/ Hex Artifact Content
Login

Artifact ed2668549331d523812ca4b3b6755299d1eb4c43:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f  ******.** The co
0180: 64 65 20 69 6e 20 74 68 69 73 20 66 69 6c 65 20  de in this file 
0190: 69 6d 70 6c 65 6d 65 6e 74 73 20 65 78 65 63 75  implements execu
01a0: 74 69 6f 6e 20 6d 65 74 68 6f 64 20 6f 66 20 74  tion method of t
01b0: 68 65 20 0a 2a 2a 20 56 69 72 74 75 61 6c 20 44  he .** Virtual D
01c0: 61 74 61 62 61 73 65 20 45 6e 67 69 6e 65 20 28  atabase Engine (
01d0: 56 44 42 45 29 2e 20 20 41 20 73 65 70 61 72 61  VDBE).  A separa
01e0: 74 65 20 66 69 6c 65 20 28 22 76 64 62 65 61 75  te file ("vdbeau
01f0: 78 2e 63 22 29 0a 2a 2a 20 68 61 6e 64 6c 65 73  x.c").** handles
0200: 20 68 6f 75 73 65 6b 65 65 70 69 6e 67 20 64 65   housekeeping de
0210: 74 61 69 6c 73 20 73 75 63 68 20 61 73 20 63 72  tails such as cr
0220: 65 61 74 69 6e 67 20 61 6e 64 20 64 65 6c 65 74  eating and delet
0230: 69 6e 67 0a 2a 2a 20 56 44 42 45 20 69 6e 73 74  ing.** VDBE inst
0240: 61 6e 63 65 73 2e 20 20 54 68 69 73 20 66 69 6c  ances.  This fil
0250: 65 20 69 73 20 73 6f 6c 65 6c 79 20 69 6e 74 65  e is solely inte
0260: 72 65 73 74 65 64 20 69 6e 20 65 78 65 63 75 74  rested in execut
0270: 69 6e 67 0a 2a 2a 20 74 68 65 20 56 44 42 45 20  ing.** the VDBE 
0280: 70 72 6f 67 72 61 6d 2e 0a 2a 2a 0a 2a 2a 20 49  program..**.** I
0290: 6e 20 74 68 65 20 65 78 74 65 72 6e 61 6c 20 69  n the external i
02a0: 6e 74 65 72 66 61 63 65 2c 20 61 6e 20 22 73 71  nterface, an "sq
02b0: 6c 69 74 65 33 5f 73 74 6d 74 2a 22 20 69 73 20  lite3_stmt*" is 
02c0: 61 6e 20 6f 70 61 71 75 65 20 70 6f 69 6e 74 65  an opaque pointe
02d0: 72 0a 2a 2a 20 74 6f 20 61 20 56 44 42 45 2e 0a  r.** to a VDBE..
02e0: 2a 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 20 70 61  **.** The SQL pa
02f0: 72 73 65 72 20 67 65 6e 65 72 61 74 65 73 20 61  rser generates a
0300: 20 70 72 6f 67 72 61 6d 20 77 68 69 63 68 20 69   program which i
0310: 73 20 74 68 65 6e 20 65 78 65 63 75 74 65 64 20  s then executed 
0320: 62 79 0a 2a 2a 20 74 68 65 20 56 44 42 45 20 74  by.** the VDBE t
0330: 6f 20 64 6f 20 74 68 65 20 77 6f 72 6b 20 6f 66  o do the work of
0340: 20 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65   the SQL stateme
0350: 6e 74 2e 20 20 56 44 42 45 20 70 72 6f 67 72 61  nt.  VDBE progra
0360: 6d 73 20 61 72 65 20 0a 2a 2a 20 73 69 6d 69 6c  ms are .** simil
0370: 61 72 20 69 6e 20 66 6f 72 6d 20 74 6f 20 61 73  ar in form to as
0380: 73 65 6d 62 6c 79 20 6c 61 6e 67 75 61 67 65 2e  sembly language.
0390: 20 20 54 68 65 20 70 72 6f 67 72 61 6d 20 63 6f    The program co
03a0: 6e 73 69 73 74 73 20 6f 66 0a 2a 2a 20 61 20 6c  nsists of.** a l
03b0: 69 6e 65 61 72 20 73 65 71 75 65 6e 63 65 20 6f  inear sequence o
03c0: 66 20 6f 70 65 72 61 74 69 6f 6e 73 2e 20 20 45  f operations.  E
03d0: 61 63 68 20 6f 70 65 72 61 74 69 6f 6e 20 68 61  ach operation ha
03e0: 73 20 61 6e 20 6f 70 63 6f 64 65 20 0a 2a 2a 20  s an opcode .** 
03f0: 61 6e 64 20 35 20 6f 70 65 72 61 6e 64 73 2e 20  and 5 operands. 
0400: 20 4f 70 65 72 61 6e 64 73 20 50 31 2c 20 50 32   Operands P1, P2
0410: 2c 20 61 6e 64 20 50 33 20 61 72 65 20 69 6e 74  , and P3 are int
0420: 65 67 65 72 73 2e 20 20 4f 70 65 72 61 6e 64 20  egers.  Operand 
0430: 50 34 20 0a 2a 2a 20 69 73 20 61 20 6e 75 6c 6c  P4 .** is a null
0440: 2d 74 65 72 6d 69 6e 61 74 65 64 20 73 74 72 69  -terminated stri
0450: 6e 67 2e 20 20 4f 70 65 72 61 6e 64 20 50 35 20  ng.  Operand P5 
0460: 69 73 20 61 6e 20 75 6e 73 69 67 6e 65 64 20 63  is an unsigned c
0470: 68 61 72 61 63 74 65 72 2e 0a 2a 2a 20 46 65 77  haracter..** Few
0480: 20 6f 70 63 6f 64 65 73 20 75 73 65 20 61 6c 6c   opcodes use all
0490: 20 35 20 6f 70 65 72 61 6e 64 73 2e 0a 2a 2a 0a   5 operands..**.
04a0: 2a 2a 20 43 6f 6d 70 75 74 61 74 69 6f 6e 20 72  ** Computation r
04b0: 65 73 75 6c 74 73 20 61 72 65 20 73 74 6f 72 65  esults are store
04c0: 64 20 6f 6e 20 61 20 73 65 74 20 6f 66 20 72 65  d on a set of re
04d0: 67 69 73 74 65 72 73 20 6e 75 6d 62 65 72 65 64  gisters numbered
04e0: 20 62 65 67 69 6e 6e 69 6e 67 0a 2a 2a 20 77 69   beginning.** wi
04f0: 74 68 20 31 20 61 6e 64 20 67 6f 69 6e 67 20 75  th 1 and going u
0500: 70 20 74 6f 20 56 64 62 65 2e 6e 4d 65 6d 2e 20  p to Vdbe.nMem. 
0510: 20 45 61 63 68 20 72 65 67 69 73 74 65 72 20 63   Each register c
0520: 61 6e 20 73 74 6f 72 65 0a 2a 2a 20 65 69 74 68  an store.** eith
0530: 65 72 20 61 6e 20 69 6e 74 65 67 65 72 2c 20 61  er an integer, a
0540: 20 6e 75 6c 6c 2d 74 65 72 6d 69 6e 61 74 65 64   null-terminated
0550: 20 73 74 72 69 6e 67 2c 20 61 20 66 6c 6f 61 74   string, a float
0560: 69 6e 67 20 70 6f 69 6e 74 0a 2a 2a 20 6e 75 6d  ing point.** num
0570: 62 65 72 2c 20 6f 72 20 74 68 65 20 53 51 4c 20  ber, or the SQL 
0580: 22 4e 55 4c 4c 22 20 76 61 6c 75 65 2e 20 20 41  "NULL" value.  A
0590: 6e 20 69 6d 70 6c 69 63 69 74 20 63 6f 6e 76 65  n implicit conve
05a0: 72 73 69 6f 6e 20 66 72 6f 6d 20 6f 6e 65 0a 2a  rsion from one.*
05b0: 2a 20 74 79 70 65 20 74 6f 20 74 68 65 20 6f 74  * type to the ot
05c0: 68 65 72 20 6f 63 63 75 72 73 20 61 73 20 6e 65  her occurs as ne
05d0: 63 65 73 73 61 72 79 2e 0a 2a 2a 20 0a 2a 2a 20  cessary..** .** 
05e0: 4d 6f 73 74 20 6f 66 20 74 68 65 20 63 6f 64 65  Most of the code
05f0: 20 69 6e 20 74 68 69 73 20 66 69 6c 65 20 69 73   in this file is
0600: 20 74 61 6b 65 6e 20 75 70 20 62 79 20 74 68 65   taken up by the
0610: 20 73 71 6c 69 74 65 33 56 64 62 65 45 78 65 63   sqlite3VdbeExec
0620: 28 29 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 20 77  ().** function w
0630: 68 69 63 68 20 64 6f 65 73 20 74 68 65 20 77 6f  hich does the wo
0640: 72 6b 20 6f 66 20 69 6e 74 65 72 70 72 65 74 69  rk of interpreti
0650: 6e 67 20 61 20 56 44 42 45 20 70 72 6f 67 72 61  ng a VDBE progra
0660: 6d 2e 0a 2a 2a 20 42 75 74 20 6f 74 68 65 72 20  m..** But other 
0670: 72 6f 75 74 69 6e 65 73 20 61 72 65 20 61 6c 73  routines are als
0680: 6f 20 70 72 6f 76 69 64 65 64 20 74 6f 20 68 65  o provided to he
0690: 6c 70 20 69 6e 20 62 75 69 6c 64 69 6e 67 20 75  lp in building u
06a0: 70 0a 2a 2a 20 61 20 70 72 6f 67 72 61 6d 20 69  p.** a program i
06b0: 6e 73 74 72 75 63 74 69 6f 6e 20 62 79 20 69 6e  nstruction by in
06c0: 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  struction..**.**
06d0: 20 56 61 72 69 6f 75 73 20 73 63 72 69 70 74 73   Various scripts
06e0: 20 73 63 61 6e 20 74 68 69 73 20 73 6f 75 72 63   scan this sourc
06f0: 65 20 66 69 6c 65 20 69 6e 20 6f 72 64 65 72 20  e file in order 
0700: 74 6f 20 67 65 6e 65 72 61 74 65 20 48 54 4d 4c  to generate HTML
0710: 0a 2a 2a 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  .** documentatio
0720: 6e 2c 20 68 65 61 64 65 72 73 20 66 69 6c 65 73  n, headers files
0730: 2c 20 6f 72 20 6f 74 68 65 72 20 64 65 72 69 76  , or other deriv
0740: 65 64 20 66 69 6c 65 73 2e 20 20 54 68 65 20 66  ed files.  The f
0750: 6f 72 6d 61 74 74 69 6e 67 0a 2a 2a 20 6f 66 20  ormatting.** of 
0760: 74 68 65 20 63 6f 64 65 20 69 6e 20 74 68 69 73  the code in this
0770: 20 66 69 6c 65 20 69 73 2c 20 74 68 65 72 65 66   file is, theref
0780: 6f 72 65 2c 20 69 6d 70 6f 72 74 61 6e 74 2e 20  ore, important. 
0790: 20 53 65 65 20 6f 74 68 65 72 20 63 6f 6d 6d 65   See other comme
07a0: 6e 74 73 0a 2a 2a 20 69 6e 20 74 68 69 73 20 66  nts.** in this f
07b0: 69 6c 65 20 66 6f 72 20 64 65 74 61 69 6c 73 2e  ile for details.
07c0: 20 20 49 66 20 69 6e 20 64 6f 75 62 74 2c 20 64    If in doubt, d
07d0: 6f 20 6e 6f 74 20 64 65 76 69 61 74 65 20 66 72  o not deviate fr
07e0: 6f 6d 20 65 78 69 73 74 69 6e 67 0a 2a 2a 20 63  om existing.** c
07f0: 6f 6d 6d 65 6e 74 69 6e 67 20 61 6e 64 20 69 6e  ommenting and in
0800: 64 65 6e 74 61 74 69 6f 6e 20 70 72 61 63 74 69  dentation practi
0810: 63 65 73 20 77 68 65 6e 20 63 68 61 6e 67 69 6e  ces when changin
0820: 67 20 6f 72 20 61 64 64 69 6e 67 20 63 6f 64 65  g or adding code
0830: 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 73  ..*/.#include "s
0840: 71 6c 69 74 65 49 6e 74 2e 68 22 0a 23 69 6e 63  qliteInt.h".#inc
0850: 6c 75 64 65 20 22 76 64 62 65 49 6e 74 2e 68 22  lude "vdbeInt.h"
0860: 0a 0a 2f 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 74  ../*.** Invoke t
0870: 68 69 73 20 6d 61 63 72 6f 20 6f 6e 20 6d 65 6d  his macro on mem
0880: 6f 72 79 20 63 65 6c 6c 73 20 6a 75 73 74 20 70  ory cells just p
0890: 72 69 6f 72 20 74 6f 20 63 68 61 6e 67 69 6e 67  rior to changing
08a0: 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 6f 66   the.** value of
08b0: 20 74 68 65 20 63 65 6c 6c 2e 20 20 54 68 69 73   the cell.  This
08c0: 20 6d 61 63 72 6f 20 76 65 72 69 66 69 65 73 20   macro verifies 
08d0: 74 68 61 74 20 73 68 61 6c 6c 6f 77 20 63 6f 70  that shallow cop
08e0: 69 65 73 20 61 72 65 0a 2a 2a 20 6e 6f 74 20 6d  ies are.** not m
08f0: 69 73 75 73 65 64 2e 0a 2a 2f 0a 23 69 66 64 65  isused..*/.#ifde
0900: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 23  f SQLITE_DEBUG.#
0910: 20 64 65 66 69 6e 65 20 6d 65 6d 41 62 6f 75 74   define memAbout
0920: 54 6f 43 68 61 6e 67 65 28 50 2c 4d 29 20 73 71  ToChange(P,M) sq
0930: 6c 69 74 65 33 56 64 62 65 4d 65 6d 50 72 65 70  lite3VdbeMemPrep
0940: 61 72 65 54 6f 43 68 61 6e 67 65 28 50 2c 4d 29  areToChange(P,M)
0950: 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
0960: 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
0970: 28 50 2c 4d 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  (P,M).#endif../*
0980: 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
0990: 67 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c  g global variabl
09a0: 65 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64  e is incremented
09b0: 20 65 76 65 72 79 20 74 69 6d 65 20 61 20 63 75   every time a cu
09c0: 72 73 6f 72 0a 2a 2a 20 6d 6f 76 65 73 2c 20 65  rsor.** moves, e
09d0: 69 74 68 65 72 20 62 79 20 74 68 65 20 4f 50 5f  ither by the OP_
09e0: 53 65 65 6b 58 58 2c 20 4f 50 5f 4e 65 78 74 2c  SeekXX, OP_Next,
09f0: 20 6f 72 20 4f 50 5f 50 72 65 76 20 6f 70 63 6f   or OP_Prev opco
0a00: 64 65 73 2e 20 20 54 68 65 20 74 65 73 74 0a 2a  des.  The test.*
0a10: 2a 20 70 72 6f 63 65 64 75 72 65 73 20 75 73 65  * procedures use
0a20: 20 74 68 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f   this informatio
0a30: 6e 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 74  n to make sure t
0a40: 68 61 74 20 69 6e 64 69 63 65 73 20 61 72 65 0a  hat indices are.
0a50: 2a 2a 20 77 6f 72 6b 69 6e 67 20 63 6f 72 72 65  ** working corre
0a60: 63 74 6c 79 2e 20 20 54 68 69 73 20 76 61 72 69  ctly.  This vari
0a70: 61 62 6c 65 20 68 61 73 20 6e 6f 20 66 75 6e 63  able has no func
0a80: 74 69 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20  tion other than 
0a90: 74 6f 0a 2a 2a 20 68 65 6c 70 20 76 65 72 69 66  to.** help verif
0aa0: 79 20 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70  y the correct op
0ab0: 65 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c  eration of the l
0ac0: 69 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65  ibrary..*/.#ifde
0ad0: 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e  f SQLITE_TEST.in
0ae0: 74 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68  t sqlite3_search
0af0: 5f 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64  _count = 0;.#end
0b00: 69 66 0a 0a 2f 2a 0a 2a 2a 20 57 68 65 6e 20 74  if../*.** When t
0b10: 68 69 73 20 67 6c 6f 62 61 6c 20 76 61 72 69 61  his global varia
0b20: 62 6c 65 20 69 73 20 70 6f 73 69 74 69 76 65 2c  ble is positive,
0b30: 20 69 74 20 67 65 74 73 20 64 65 63 72 65 6d 65   it gets decreme
0b40: 6e 74 65 64 20 6f 6e 63 65 20 62 65 66 6f 72 65  nted once before
0b50: 0a 2a 2a 20 65 61 63 68 20 69 6e 73 74 72 75 63  .** each instruc
0b60: 74 69 6f 6e 20 69 6e 20 74 68 65 20 56 44 42 45  tion in the VDBE
0b70: 2e 20 20 57 68 65 6e 20 72 65 61 63 68 65 73 20  .  When reaches 
0b80: 7a 65 72 6f 2c 20 74 68 65 20 75 31 2e 69 73 49  zero, the u1.isI
0b90: 6e 74 65 72 72 75 70 74 65 64 0a 2a 2a 20 66 69  nterrupted.** fi
0ba0: 65 6c 64 20 6f 66 20 74 68 65 20 73 71 6c 69 74  eld of the sqlit
0bb0: 65 33 20 73 74 72 75 63 74 75 72 65 20 69 73 20  e3 structure is 
0bc0: 73 65 74 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  set in order to 
0bd0: 73 69 6d 75 6c 61 74 65 20 61 6e 64 20 69 6e 74  simulate and int
0be0: 65 72 72 75 70 74 2e 0a 2a 2a 0a 2a 2a 20 54 68  errupt..**.** Th
0bf0: 69 73 20 66 61 63 69 6c 69 74 79 20 69 73 20 75  is facility is u
0c00: 73 65 64 20 66 6f 72 20 74 65 73 74 69 6e 67 20  sed for testing 
0c10: 70 75 72 70 6f 73 65 73 20 6f 6e 6c 79 2e 20 20  purposes only.  
0c20: 49 74 20 64 6f 65 73 20 6e 6f 74 20 66 75 6e 63  It does not func
0c30: 74 69 6f 6e 0a 2a 2a 20 69 6e 20 61 6e 20 6f 72  tion.** in an or
0c40: 64 69 6e 61 72 79 20 62 75 69 6c 64 2e 0a 2a 2f  dinary build..*/
0c50: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54  .#ifdef SQLITE_T
0c60: 45 53 54 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f  EST.int sqlite3_
0c70: 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74 20  interrupt_count 
0c80: 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  = 0;.#endif../*.
0c90: 2a 2a 20 54 68 65 20 6e 65 78 74 20 67 6c 6f 62  ** The next glob
0ca0: 61 6c 20 76 61 72 69 61 62 6c 65 20 69 73 20 69  al variable is i
0cb0: 6e 63 72 65 6d 65 6e 74 65 64 20 65 61 63 68 20  ncremented each 
0cc0: 74 79 70 65 20 74 68 65 20 4f 50 5f 53 6f 72 74  type the OP_Sort
0cd0: 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 65 78   opcode.** is ex
0ce0: 65 63 75 74 65 64 2e 20 20 54 68 65 20 74 65 73  ecuted.  The tes
0cf0: 74 20 70 72 6f 63 65 64 75 72 65 73 20 75 73 65  t procedures use
0d00: 20 74 68 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f   this informatio
0d10: 6e 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 74  n to make sure t
0d20: 68 61 74 0a 2a 2a 20 73 6f 72 74 69 6e 67 20 69  hat.** sorting i
0d30: 73 20 6f 63 63 75 72 72 69 6e 67 20 6f 72 20 6e  s occurring or n
0d40: 6f 74 20 6f 63 63 75 72 72 69 6e 67 20 61 74 20  ot occurring at 
0d50: 61 70 70 72 6f 70 72 69 61 74 65 20 74 69 6d 65  appropriate time
0d60: 73 2e 20 20 20 54 68 69 73 20 76 61 72 69 61 62  s.   This variab
0d70: 6c 65 0a 2a 2a 20 68 61 73 20 6e 6f 20 66 75 6e  le.** has no fun
0d80: 63 74 69 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e  ction other than
0d90: 20 74 6f 20 68 65 6c 70 20 76 65 72 69 66 79 20   to help verify 
0da0: 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65 72  the correct oper
0db0: 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20  ation of the.** 
0dc0: 6c 69 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64  library..*/.#ifd
0dd0: 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 69  ef SQLITE_TEST.i
0de0: 6e 74 20 73 71 6c 69 74 65 33 5f 73 6f 72 74 5f  nt sqlite3_sort_
0df0: 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64 69  count = 0;.#endi
0e00: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 65 78  f../*.** The nex
0e10: 74 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c  t global variabl
0e20: 65 20 72 65 63 6f 72 64 73 20 74 68 65 20 73 69  e records the si
0e30: 7a 65 20 6f 66 20 74 68 65 20 6c 61 72 67 65 73  ze of the larges
0e40: 74 20 4d 45 4d 5f 42 6c 6f 62 0a 2a 2a 20 6f 72  t MEM_Blob.** or
0e50: 20 4d 45 4d 5f 53 74 72 20 74 68 61 74 20 68 61   MEM_Str that ha
0e60: 73 20 62 65 65 6e 20 75 73 65 64 20 62 79 20 61  s been used by a
0e70: 20 56 44 42 45 20 6f 70 63 6f 64 65 2e 20 20 54   VDBE opcode.  T
0e80: 68 65 20 74 65 73 74 20 70 72 6f 63 65 64 75 72  he test procedur
0e90: 65 73 0a 2a 2a 20 75 73 65 20 74 68 69 73 20 69  es.** use this i
0ea0: 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 6f 20 6d 61  nformation to ma
0eb0: 6b 65 20 73 75 72 65 20 74 68 61 74 20 74 68 65  ke sure that the
0ec0: 20 7a 65 72 6f 2d 62 6c 6f 62 20 66 75 6e 63 74   zero-blob funct
0ed0: 69 6f 6e 61 6c 69 74 79 0a 2a 2a 20 69 73 20 77  ionality.** is w
0ee0: 6f 72 6b 69 6e 67 20 63 6f 72 72 65 63 74 6c 79  orking correctly
0ef0: 2e 20 20 20 54 68 69 73 20 76 61 72 69 61 62 6c  .   This variabl
0f00: 65 20 68 61 73 20 6e 6f 20 66 75 6e 63 74 69 6f  e has no functio
0f10: 6e 20 6f 74 68 65 72 20 74 68 61 6e 20 74 6f 0a  n other than to.
0f20: 2a 2a 20 68 65 6c 70 20 76 65 72 69 66 79 20 74  ** help verify t
0f30: 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65 72 61  he correct opera
0f40: 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c 69 62 72  tion of the libr
0f50: 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  ary..*/.#ifdef S
0f60: 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74 20 73  QLITE_TEST.int s
0f70: 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62 73  qlite3_max_blobs
0f80: 69 7a 65 20 3d 20 30 3b 0a 73 74 61 74 69 63 20  ize = 0;.static 
0f90: 76 6f 69 64 20 75 70 64 61 74 65 4d 61 78 42 6c  void updateMaxBl
0fa0: 6f 62 73 69 7a 65 28 4d 65 6d 20 2a 70 29 7b 0a  obsize(Mem *p){.
0fb0: 20 20 69 66 28 20 28 70 2d 3e 66 6c 61 67 73 20    if( (p->flags 
0fc0: 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42  & (MEM_Str|MEM_B
0fd0: 6c 6f 62 29 29 21 3d 30 20 26 26 20 70 2d 3e 6e  lob))!=0 && p->n
0fe0: 3e 73 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f  >sqlite3_max_blo
0ff0: 62 73 69 7a 65 20 29 7b 0a 20 20 20 20 73 71 6c  bsize ){.    sql
1000: 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62 73 69 7a  ite3_max_blobsiz
1010: 65 20 3d 20 70 2d 3e 6e 3b 0a 20 20 7d 0a 7d 0a  e = p->n;.  }.}.
1020: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
1030: 65 20 6e 65 78 74 20 67 6c 6f 62 61 6c 20 76 61  e next global va
1040: 72 69 61 62 6c 65 20 69 73 20 69 6e 63 72 65 6d  riable is increm
1050: 65 6e 74 65 64 20 65 61 63 68 20 74 79 70 65 20  ented each type 
1060: 74 68 65 20 4f 50 5f 46 6f 75 6e 64 20 6f 70 63  the OP_Found opc
1070: 6f 64 65 0a 2a 2a 20 69 73 20 65 78 65 63 75 74  ode.** is execut
1080: 65 64 2e 20 54 68 69 73 20 69 73 20 75 73 65 64  ed. This is used
1090: 20 74 6f 20 74 65 73 74 20 77 68 65 74 68 65 72   to test whether
10a0: 20 6f 72 20 6e 6f 74 20 74 68 65 20 66 6f 72 65   or not the fore
10b0: 69 67 6e 20 6b 65 79 0a 2a 2a 20 6f 70 65 72 61  ign key.** opera
10c0: 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 65 64  tion implemented
10d0: 20 75 73 69 6e 67 20 4f 50 5f 46 6b 49 73 5a 65   using OP_FkIsZe
10e0: 72 6f 20 69 73 20 77 6f 72 6b 69 6e 67 2e 20 54  ro is working. T
10f0: 68 69 73 20 76 61 72 69 61 62 6c 65 0a 2a 2a 20  his variable.** 
1100: 68 61 73 20 6e 6f 20 66 75 6e 63 74 69 6f 6e 20  has no function 
1110: 6f 74 68 65 72 20 74 68 61 6e 20 74 6f 20 68 65  other than to he
1120: 6c 70 20 76 65 72 69 66 79 20 74 68 65 20 63 6f  lp verify the co
1130: 72 72 65 63 74 20 6f 70 65 72 61 74 69 6f 6e 20  rrect operation 
1140: 6f 66 20 74 68 65 0a 2a 2a 20 6c 69 62 72 61 72  of the.** librar
1150: 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  y..*/.#ifdef SQL
1160: 49 54 45 5f 54 45 53 54 0a 69 6e 74 20 73 71 6c  ITE_TEST.int sql
1170: 69 74 65 33 5f 66 6f 75 6e 64 5f 63 6f 75 6e 74  ite3_found_count
1180: 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a   = 0;.#endif../*
1190: 0a 2a 2a 20 54 65 73 74 20 61 20 72 65 67 69 73  .** Test a regis
11a0: 74 65 72 20 74 6f 20 73 65 65 20 69 66 20 69 74  ter to see if it
11b0: 20 65 78 63 65 65 64 73 20 74 68 65 20 63 75 72   exceeds the cur
11c0: 72 65 6e 74 20 6d 61 78 69 6d 75 6d 20 62 6c 6f  rent maximum blo
11d0: 62 20 73 69 7a 65 2e 0a 2a 2a 20 49 66 20 69 74  b size..** If it
11e0: 20 64 6f 65 73 2c 20 72 65 63 6f 72 64 20 74 68   does, record th
11f0: 65 20 6e 65 77 20 6d 61 78 69 6d 75 6d 20 62 6c  e new maximum bl
1200: 6f 62 20 73 69 7a 65 2e 0a 2a 2f 0a 23 69 66 20  ob size..*/.#if 
1210: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54  defined(SQLITE_T
1220: 45 53 54 29 20 26 26 20 21 64 65 66 69 6e 65 64  EST) && !defined
1230: 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49  (SQLITE_OMIT_BUI
1240: 4c 54 49 4e 5f 54 45 53 54 29 0a 23 20 64 65 66  LTIN_TEST).# def
1250: 69 6e 65 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  ine UPDATE_MAX_B
1260: 4c 4f 42 53 49 5a 45 28 50 29 20 20 75 70 64 61  LOBSIZE(P)  upda
1270: 74 65 4d 61 78 42 6c 6f 62 73 69 7a 65 28 50 29  teMaxBlobsize(P)
1280: 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
1290: 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53  UPDATE_MAX_BLOBS
12a0: 49 5a 45 28 50 29 0a 23 65 6e 64 69 66 0a 0a 2f  IZE(P).#endif../
12b0: 2a 0a 2a 2a 20 43 6f 6e 76 65 72 74 20 74 68 65  *.** Convert the
12c0: 20 67 69 76 65 6e 20 72 65 67 69 73 74 65 72 20   given register 
12d0: 69 6e 74 6f 20 61 20 73 74 72 69 6e 67 20 69 66  into a string if
12e0: 20 69 74 20 69 73 6e 27 74 20 6f 6e 65 0a 2a 2a   it isn't one.**
12f0: 20 61 6c 72 65 61 64 79 2e 20 52 65 74 75 72 6e   already. Return
1300: 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 61 20 6d   non-zero if a m
1310: 61 6c 6c 6f 63 28 29 20 66 61 69 6c 73 2e 0a 2a  alloc() fails..*
1320: 2f 0a 23 64 65 66 69 6e 65 20 53 74 72 69 6e 67  /.#define String
1330: 69 66 79 28 50 2c 20 65 6e 63 29 20 5c 0a 20 20  ify(P, enc) \.  
1340: 20 69 66 28 28 28 50 29 2d 3e 66 6c 61 67 73 26   if(((P)->flags&
1350: 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f  (MEM_Str|MEM_Blo
1360: 62 29 29 3d 3d 30 20 26 26 20 73 71 6c 69 74 65  b))==0 && sqlite
1370: 33 56 64 62 65 4d 65 6d 53 74 72 69 6e 67 69 66  3VdbeMemStringif
1380: 79 28 50 2c 65 6e 63 29 29 20 5c 0a 20 20 20 20  y(P,enc)) \.    
1390: 20 7b 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 20   { goto no_mem; 
13a0: 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 65 70 68 65  }../*.** An ephe
13b0: 6d 65 72 61 6c 20 73 74 72 69 6e 67 20 76 61 6c  meral string val
13c0: 75 65 20 28 73 69 67 6e 69 66 69 65 64 20 62 79  ue (signified by
13d0: 20 74 68 65 20 4d 45 4d 5f 45 70 68 65 6d 20 66   the MEM_Ephem f
13e0: 6c 61 67 29 20 63 6f 6e 74 61 69 6e 73 0a 2a 2a  lag) contains.**
13f0: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20   a pointer to a 
1400: 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f  dynamically allo
1410: 63 61 74 65 64 20 73 74 72 69 6e 67 20 77 68 65  cated string whe
1420: 72 65 20 73 6f 6d 65 20 6f 74 68 65 72 20 65 6e  re some other en
1430: 74 69 74 79 0a 2a 2a 20 69 73 20 72 65 73 70 6f  tity.** is respo
1440: 6e 73 69 62 6c 65 20 66 6f 72 20 64 65 61 6c 6c  nsible for deall
1450: 6f 63 61 74 69 6e 67 20 74 68 61 74 20 73 74 72  ocating that str
1460: 69 6e 67 2e 20 20 42 65 63 61 75 73 65 20 74 68  ing.  Because th
1470: 65 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 64 6f  e register.** do
1480: 65 73 20 6e 6f 74 20 63 6f 6e 74 72 6f 6c 20 74  es not control t
1490: 68 65 20 73 74 72 69 6e 67 2c 20 69 74 20 6d 69  he string, it mi
14a0: 67 68 74 20 62 65 20 64 65 6c 65 74 65 64 20 77  ght be deleted w
14b0: 69 74 68 6f 75 74 20 74 68 65 20 72 65 67 69 73  ithout the regis
14c0: 74 65 72 0a 2a 2a 20 6b 6e 6f 77 69 6e 67 20 69  ter.** knowing i
14d0: 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 72 6f  t..**.** This ro
14e0: 75 74 69 6e 65 20 63 6f 6e 76 65 72 74 73 20 61  utine converts a
14f0: 6e 20 65 70 68 65 6d 65 72 61 6c 20 73 74 72 69  n ephemeral stri
1500: 6e 67 20 69 6e 74 6f 20 61 20 64 79 6e 61 6d 69  ng into a dynami
1510: 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 0a  cally allocated.
1520: 2a 2a 20 73 74 72 69 6e 67 20 74 68 61 74 20 74  ** string that t
1530: 68 65 20 72 65 67 69 73 74 65 72 20 69 74 73 65  he register itse
1540: 6c 66 20 63 6f 6e 74 72 6f 6c 73 2e 20 20 49 6e  lf controls.  In
1550: 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 69 74   other words, it
1560: 0a 2a 2a 20 63 6f 6e 76 65 72 74 73 20 61 6e 20  .** converts an 
1570: 4d 45 4d 5f 45 70 68 65 6d 20 73 74 72 69 6e 67  MEM_Ephem string
1580: 20 69 6e 74 6f 20 61 6e 20 4d 45 4d 5f 44 79 6e   into an MEM_Dyn
1590: 20 73 74 72 69 6e 67 2e 0a 2a 2f 0a 23 64 65 66   string..*/.#def
15a0: 69 6e 65 20 44 65 65 70 68 65 6d 65 72 61 6c 69  ine Deephemerali
15b0: 7a 65 28 50 29 20 5c 0a 20 20 20 69 66 28 20 28  ze(P) \.   if( (
15c0: 28 50 29 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 45  (P)->flags&MEM_E
15d0: 70 68 65 6d 29 21 3d 30 20 5c 0a 20 20 20 20 20  phem)!=0 \.     
15e0: 20 20 26 26 20 73 71 6c 69 74 65 33 56 64 62 65    && sqlite3Vdbe
15f0: 4d 65 6d 4d 61 6b 65 57 72 69 74 65 61 62 6c 65  MemMakeWriteable
1600: 28 50 29 20 29 7b 20 67 6f 74 6f 20 6e 6f 5f 6d  (P) ){ goto no_m
1610: 65 6d 3b 7d 0a 0a 2f 2a 0a 2a 2a 20 43 61 6c 6c  em;}../*.** Call
1620: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 45   sqlite3VdbeMemE
1630: 78 70 61 6e 64 42 6c 6f 62 28 29 20 6f 6e 20 74  xpandBlob() on t
1640: 68 65 20 73 75 70 70 6c 69 65 64 20 76 61 6c 75  he supplied valu
1650: 65 20 28 74 79 70 65 20 4d 65 6d 2a 29 0a 2a 2a  e (type Mem*).**
1660: 20 50 20 69 66 20 72 65 71 75 69 72 65 64 2e 0a   P if required..
1670: 2a 2f 0a 23 64 65 66 69 6e 65 20 45 78 70 61 6e  */.#define Expan
1680: 64 42 6c 6f 62 28 50 29 20 28 28 28 50 29 2d 3e  dBlob(P) (((P)->
1690: 66 6c 61 67 73 26 4d 45 4d 5f 5a 65 72 6f 29 3f  flags&MEM_Zero)?
16a0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 45 78  sqlite3VdbeMemEx
16b0: 70 61 6e 64 42 6c 6f 62 28 50 29 3a 30 29 0a 0a  pandBlob(P):0)..
16c0: 2f 2a 0a 2a 2a 20 41 72 67 75 6d 65 6e 74 20 70  /*.** Argument p
16d0: 4d 65 6d 20 70 6f 69 6e 74 73 20 61 74 20 61 20  Mem points at a 
16e0: 72 65 67 69 73 74 65 72 20 74 68 61 74 20 77 69  register that wi
16f0: 6c 6c 20 62 65 20 70 61 73 73 65 64 20 74 6f 20  ll be passed to 
1700: 61 0a 2a 2a 20 75 73 65 72 2d 64 65 66 69 6e 65  a.** user-define
1710: 64 20 66 75 6e 63 74 69 6f 6e 20 6f 72 20 72 65  d function or re
1720: 74 75 72 6e 65 64 20 74 6f 20 74 68 65 20 75 73  turned to the us
1730: 65 72 20 61 73 20 74 68 65 20 72 65 73 75 6c 74  er as the result
1740: 20 6f 66 20 61 20 71 75 65 72 79 2e 0a 2a 2a 20   of a query..** 
1750: 54 68 69 73 20 72 6f 75 74 69 6e 65 20 73 65 74  This routine set
1760: 73 20 74 68 65 20 70 4d 65 6d 2d 3e 74 79 70 65  s the pMem->type
1770: 20 76 61 72 69 61 62 6c 65 20 75 73 65 64 20 62   variable used b
1780: 79 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 61  y the sqlite3_va
1790: 6c 75 65 5f 2a 28 29 20 0a 2a 2a 20 72 6f 75 74  lue_*() .** rout
17a0: 69 6e 65 73 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71  ines..*/.void sq
17b0: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74 6f 72  lite3VdbeMemStor
17c0: 65 54 79 70 65 28 4d 65 6d 20 2a 70 4d 65 6d 29  eType(Mem *pMem)
17d0: 7b 0a 20 20 69 6e 74 20 66 6c 61 67 73 20 3d 20  {.  int flags = 
17e0: 70 4d 65 6d 2d 3e 66 6c 61 67 73 3b 0a 20 20 69  pMem->flags;.  i
17f0: 66 28 20 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  f( flags & MEM_N
1800: 75 6c 6c 20 29 7b 0a 20 20 20 20 70 4d 65 6d 2d  ull ){.    pMem-
1810: 3e 74 79 70 65 20 3d 20 53 51 4c 49 54 45 5f 4e  >type = SQLITE_N
1820: 55 4c 4c 3b 0a 20 20 7d 0a 20 20 65 6c 73 65 20  ULL;.  }.  else 
1830: 69 66 28 20 66 6c 61 67 73 20 26 20 4d 45 4d 5f  if( flags & MEM_
1840: 49 6e 74 20 29 7b 0a 20 20 20 20 70 4d 65 6d 2d  Int ){.    pMem-
1850: 3e 74 79 70 65 20 3d 20 53 51 4c 49 54 45 5f 49  >type = SQLITE_I
1860: 4e 54 45 47 45 52 3b 0a 20 20 7d 0a 20 20 65 6c  NTEGER;.  }.  el
1870: 73 65 20 69 66 28 20 66 6c 61 67 73 20 26 20 4d  se if( flags & M
1880: 45 4d 5f 52 65 61 6c 20 29 7b 0a 20 20 20 20 70  EM_Real ){.    p
1890: 4d 65 6d 2d 3e 74 79 70 65 20 3d 20 53 51 4c 49  Mem->type = SQLI
18a0: 54 45 5f 46 4c 4f 41 54 3b 0a 20 20 7d 0a 20 20  TE_FLOAT;.  }.  
18b0: 65 6c 73 65 20 69 66 28 20 66 6c 61 67 73 20 26  else if( flags &
18c0: 20 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20 20   MEM_Str ){.    
18d0: 70 4d 65 6d 2d 3e 74 79 70 65 20 3d 20 53 51 4c  pMem->type = SQL
18e0: 49 54 45 5f 54 45 58 54 3b 0a 20 20 7d 65 6c 73  ITE_TEXT;.  }els
18f0: 65 7b 0a 20 20 20 20 70 4d 65 6d 2d 3e 74 79 70  e{.    pMem->typ
1900: 65 20 3d 20 53 51 4c 49 54 45 5f 42 4c 4f 42 3b  e = SQLITE_BLOB;
1910: 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6c  .  }.}../*.** Al
1920: 6c 6f 63 61 74 65 20 56 64 62 65 43 75 72 73 6f  locate VdbeCurso
1930: 72 20 6e 75 6d 62 65 72 20 69 43 75 72 2e 20 20  r number iCur.  
1940: 52 65 74 75 72 6e 20 61 20 70 6f 69 6e 74 65 72  Return a pointer
1950: 20 74 6f 20 69 74 2e 20 20 52 65 74 75 72 6e 20   to it.  Return 
1960: 4e 55 4c 4c 0a 2a 2a 20 69 66 20 77 65 20 72 75  NULL.** if we ru
1970: 6e 20 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79 2e  n out of memory.
1980: 0a 2a 2f 0a 73 74 61 74 69 63 20 56 64 62 65 43  .*/.static VdbeC
1990: 75 72 73 6f 72 20 2a 61 6c 6c 6f 63 61 74 65 43  ursor *allocateC
19a0: 75 72 73 6f 72 28 0a 20 20 56 64 62 65 20 2a 70  ursor(.  Vdbe *p
19b0: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ,              /
19c0: 2a 20 54 68 65 20 76 69 72 74 75 61 6c 20 6d 61  * The virtual ma
19d0: 63 68 69 6e 65 20 2a 2f 0a 20 20 69 6e 74 20 69  chine */.  int i
19e0: 43 75 72 2c 20 20 20 20 20 20 20 20 20 20 20 20  Cur,            
19f0: 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20 74 68 65   /* Index of the
1a00: 20 6e 65 77 20 56 64 62 65 43 75 72 73 6f 72 20   new VdbeCursor 
1a10: 2a 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 2c  */.  int nField,
1a20: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1a30: 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20 69  mber of fields i
1a40: 6e 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69  n the table or i
1a50: 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 69 44  ndex */.  int iD
1a60: 62 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  b,              
1a70: 2f 2a 20 57 68 65 6e 20 64 61 74 61 62 61 73 65  /* When database
1a80: 20 74 68 65 20 63 75 72 73 6f 72 20 62 65 6c 6f   the cursor belo
1a90: 6e 67 73 20 74 6f 2c 20 6f 72 20 2d 31 20 2a 2f  ngs to, or -1 */
1aa0: 0a 20 20 69 6e 74 20 69 73 42 74 72 65 65 43 75  .  int isBtreeCu
1ab0: 72 73 6f 72 20 20 20 20 20 2f 2a 20 54 72 75 65  rsor     /* True
1ac0: 20 66 6f 72 20 42 2d 54 72 65 65 2e 20 20 46 61   for B-Tree.  Fa
1ad0: 6c 73 65 20 66 6f 72 20 70 73 65 75 64 6f 2d 74  lse for pseudo-t
1ae0: 61 62 6c 65 20 6f 72 20 76 74 61 62 20 2a 2f 0a  able or vtab */.
1af0: 29 7b 0a 20 20 2f 2a 20 46 69 6e 64 20 74 68 65  ){.  /* Find the
1b00: 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74 68 61   memory cell tha
1b10: 74 20 77 69 6c 6c 20 62 65 20 75 73 65 64 20 74  t will be used t
1b20: 6f 20 73 74 6f 72 65 20 74 68 65 20 62 6c 6f 62  o store the blob
1b30: 20 6f 66 20 6d 65 6d 6f 72 79 0a 20 20 2a 2a 20   of memory.  ** 
1b40: 72 65 71 75 69 72 65 64 20 66 6f 72 20 74 68 69  required for thi
1b50: 73 20 56 64 62 65 43 75 72 73 6f 72 20 73 74 72  s VdbeCursor str
1b60: 75 63 74 75 72 65 2e 20 49 74 20 69 73 20 63 6f  ucture. It is co
1b70: 6e 76 65 6e 69 65 6e 74 20 74 6f 20 75 73 65 20  nvenient to use 
1b80: 61 20 0a 20 20 2a 2a 20 76 64 62 65 20 6d 65 6d  a .  ** vdbe mem
1b90: 6f 72 79 20 63 65 6c 6c 20 74 6f 20 6d 61 6e 61  ory cell to mana
1ba0: 67 65 20 74 68 65 20 6d 65 6d 6f 72 79 20 61 6c  ge the memory al
1bb0: 6c 6f 63 61 74 69 6f 6e 20 72 65 71 75 69 72 65  location require
1bc0: 64 20 66 6f 72 20 61 0a 20 20 2a 2a 20 56 64 62  d for a.  ** Vdb
1bd0: 65 43 75 72 73 6f 72 20 73 74 72 75 63 74 75 72  eCursor structur
1be0: 65 20 66 6f 72 20 74 68 65 20 66 6f 6c 6c 6f 77  e for the follow
1bf0: 69 6e 67 20 72 65 61 73 6f 6e 73 3a 0a 20 20 2a  ing reasons:.  *
1c00: 2a 0a 20 20 2a 2a 20 20 20 2a 20 53 6f 6d 65 74  *.  **   * Somet
1c10: 69 6d 65 73 20 63 75 72 73 6f 72 20 6e 75 6d 62  imes cursor numb
1c20: 65 72 73 20 61 72 65 20 75 73 65 64 20 66 6f 72  ers are used for
1c30: 20 61 20 63 6f 75 70 6c 65 20 6f 66 20 64 69 66   a couple of dif
1c40: 66 65 72 65 6e 74 0a 20 20 2a 2a 20 20 20 20 20  ferent.  **     
1c50: 70 75 72 70 6f 73 65 73 20 69 6e 20 61 20 76 64  purposes in a vd
1c60: 62 65 20 70 72 6f 67 72 61 6d 2e 20 54 68 65 20  be program. The 
1c70: 64 69 66 66 65 72 65 6e 74 20 75 73 65 73 20 6d  different uses m
1c80: 69 67 68 74 20 72 65 71 75 69 72 65 0a 20 20 2a  ight require.  *
1c90: 2a 20 20 20 20 20 64 69 66 66 65 72 65 6e 74 20  *     different 
1ca0: 73 69 7a 65 64 20 61 6c 6c 6f 63 61 74 69 6f 6e  sized allocation
1cb0: 73 2e 20 4d 65 6d 6f 72 79 20 63 65 6c 6c 73 20  s. Memory cells 
1cc0: 70 72 6f 76 69 64 65 20 67 72 6f 77 61 62 6c 65  provide growable
1cd0: 0a 20 20 2a 2a 20 20 20 20 20 61 6c 6c 6f 63 61  .  **     alloca
1ce0: 74 69 6f 6e 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a  tions..  **.  **
1cf0: 20 20 20 2a 20 57 68 65 6e 20 75 73 69 6e 67 20     * When using 
1d00: 45 4e 41 42 4c 45 5f 4d 45 4d 4f 52 59 5f 4d 41  ENABLE_MEMORY_MA
1d10: 4e 41 47 45 4d 45 4e 54 2c 20 6d 65 6d 6f 72 79  NAGEMENT, memory
1d20: 20 63 65 6c 6c 20 62 75 66 66 65 72 73 20 63 61   cell buffers ca
1d30: 6e 0a 20 20 2a 2a 20 20 20 20 20 62 65 20 66 72  n.  **     be fr
1d40: 65 65 64 20 6c 61 7a 69 6c 79 20 76 69 61 20 74  eed lazily via t
1d50: 68 65 20 73 71 6c 69 74 65 33 5f 72 65 6c 65 61  he sqlite3_relea
1d60: 73 65 5f 6d 65 6d 6f 72 79 28 29 20 41 50 49 2e  se_memory() API.
1d70: 20 54 68 69 73 0a 20 20 2a 2a 20 20 20 20 20 6d   This.  **     m
1d80: 69 6e 69 6d 69 7a 65 73 20 74 68 65 20 6e 75 6d  inimizes the num
1d90: 62 65 72 20 6f 66 20 6d 61 6c 6c 6f 63 20 63 61  ber of malloc ca
1da0: 6c 6c 73 20 6d 61 64 65 20 62 79 20 74 68 65 20  lls made by the 
1db0: 73 79 73 74 65 6d 2e 0a 20 20 2a 2a 0a 20 20 2a  system..  **.  *
1dc0: 2a 20 4d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 66  * Memory cells f
1dd0: 6f 72 20 63 75 72 73 6f 72 73 20 61 72 65 20 61  or cursors are a
1de0: 6c 6c 6f 63 61 74 65 64 20 61 74 20 74 68 65 20  llocated at the 
1df0: 74 6f 70 20 6f 66 20 74 68 65 20 61 64 64 72 65  top of the addre
1e00: 73 73 0a 20 20 2a 2a 20 73 70 61 63 65 2e 20 4d  ss.  ** space. M
1e10: 65 6d 6f 72 79 20 63 65 6c 6c 20 28 70 2d 3e 6e  emory cell (p->n
1e20: 4d 65 6d 29 20 63 6f 72 72 65 73 70 6f 6e 64 73  Mem) corresponds
1e30: 20 74 6f 20 63 75 72 73 6f 72 20 30 2e 20 53 70   to cursor 0. Sp
1e40: 61 63 65 20 66 6f 72 0a 20 20 2a 2a 20 63 75 72  ace for.  ** cur
1e50: 73 6f 72 20 31 20 69 73 20 6d 61 6e 61 67 65 64  sor 1 is managed
1e60: 20 62 79 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20   by memory cell 
1e70: 28 70 2d 3e 6e 4d 65 6d 2d 31 29 2c 20 65 74 63  (p->nMem-1), etc
1e80: 2e 0a 20 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d  ..  */.  Mem *pM
1e90: 65 6d 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 2d  em = &p->aMem[p-
1ea0: 3e 6e 4d 65 6d 2d 69 43 75 72 5d 3b 0a 0a 20 20  >nMem-iCur];..  
1eb0: 69 6e 74 20 6e 42 79 74 65 3b 0a 20 20 56 64 62  int nByte;.  Vdb
1ec0: 65 43 75 72 73 6f 72 20 2a 70 43 78 20 3d 20 30  eCursor *pCx = 0
1ed0: 3b 0a 20 20 6e 42 79 74 65 20 3d 20 0a 20 20 20  ;.  nByte = .   
1ee0: 20 20 20 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66     ROUND8(sizeof
1ef0: 28 56 64 62 65 43 75 72 73 6f 72 29 29 20 2b 20  (VdbeCursor)) + 
1f00: 0a 20 20 20 20 20 20 28 69 73 42 74 72 65 65 43  .      (isBtreeC
1f10: 75 72 73 6f 72 3f 73 71 6c 69 74 65 33 42 74 72  ursor?sqlite3Btr
1f20: 65 65 43 75 72 73 6f 72 53 69 7a 65 28 29 3a 30  eeCursorSize():0
1f30: 29 20 2b 20 0a 20 20 20 20 20 20 32 2a 6e 46 69  ) + .      2*nFi
1f40: 65 6c 64 2a 73 69 7a 65 6f 66 28 75 33 32 29 3b  eld*sizeof(u32);
1f50: 0a 0a 20 20 61 73 73 65 72 74 28 20 69 43 75 72  ..  assert( iCur
1f60: 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
1f70: 20 69 66 28 20 70 2d 3e 61 70 43 73 72 5b 69 43   if( p->apCsr[iC
1f80: 75 72 5d 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  ur] ){.    sqlit
1f90: 65 33 56 64 62 65 46 72 65 65 43 75 72 73 6f 72  e3VdbeFreeCursor
1fa0: 28 70 2c 20 70 2d 3e 61 70 43 73 72 5b 69 43 75  (p, p->apCsr[iCu
1fb0: 72 5d 29 3b 0a 20 20 20 20 70 2d 3e 61 70 43 73  r]);.    p->apCs
1fc0: 72 5b 69 43 75 72 5d 20 3d 20 30 3b 0a 20 20 7d  r[iCur] = 0;.  }
1fd0: 0a 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b  .  if( SQLITE_OK
1fe0: 3d 3d 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  ==sqlite3VdbeMem
1ff0: 47 72 6f 77 28 70 4d 65 6d 2c 20 6e 42 79 74 65  Grow(pMem, nByte
2000: 2c 20 30 29 20 29 7b 0a 20 20 20 20 70 2d 3e 61  , 0) ){.    p->a
2010: 70 43 73 72 5b 69 43 75 72 5d 20 3d 20 70 43 78  pCsr[iCur] = pCx
2020: 20 3d 20 28 56 64 62 65 43 75 72 73 6f 72 2a 29   = (VdbeCursor*)
2030: 70 4d 65 6d 2d 3e 7a 3b 0a 20 20 20 20 6d 65 6d  pMem->z;.    mem
2040: 73 65 74 28 70 43 78 2c 20 30 2c 20 73 69 7a 65  set(pCx, 0, size
2050: 6f 66 28 56 64 62 65 43 75 72 73 6f 72 29 29 3b  of(VdbeCursor));
2060: 0a 20 20 20 20 70 43 78 2d 3e 69 44 62 20 3d 20  .    pCx->iDb = 
2070: 69 44 62 3b 0a 20 20 20 20 70 43 78 2d 3e 6e 46  iDb;.    pCx->nF
2080: 69 65 6c 64 20 3d 20 6e 46 69 65 6c 64 3b 0a 20  ield = nField;. 
2090: 20 20 20 69 66 28 20 6e 46 69 65 6c 64 20 29 7b     if( nField ){
20a0: 0a 20 20 20 20 20 20 70 43 78 2d 3e 61 54 79 70  .      pCx->aTyp
20b0: 65 20 3d 20 28 75 33 32 20 2a 29 26 70 4d 65 6d  e = (u32 *)&pMem
20c0: 2d 3e 7a 5b 52 4f 55 4e 44 38 28 73 69 7a 65 6f  ->z[ROUND8(sizeo
20d0: 66 28 56 64 62 65 43 75 72 73 6f 72 29 29 5d 3b  f(VdbeCursor))];
20e0: 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 69  .    }.    if( i
20f0: 73 42 74 72 65 65 43 75 72 73 6f 72 20 29 7b 0a  sBtreeCursor ){.
2100: 20 20 20 20 20 20 70 43 78 2d 3e 70 43 75 72 73        pCx->pCurs
2110: 6f 72 20 3d 20 28 42 74 43 75 72 73 6f 72 2a 29  or = (BtCursor*)
2120: 0a 20 20 20 20 20 20 20 20 20 20 26 70 4d 65 6d  .          &pMem
2130: 2d 3e 7a 5b 52 4f 55 4e 44 38 28 73 69 7a 65 6f  ->z[ROUND8(sizeo
2140: 66 28 56 64 62 65 43 75 72 73 6f 72 29 29 2b 32  f(VdbeCursor))+2
2150: 2a 6e 46 69 65 6c 64 2a 73 69 7a 65 6f 66 28 75  *nField*sizeof(u
2160: 33 32 29 5d 3b 0a 20 20 20 20 20 20 73 71 6c 69  32)];.      sqli
2170: 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 5a 65  te3BtreeCursorZe
2180: 72 6f 28 70 43 78 2d 3e 70 43 75 72 73 6f 72 29  ro(pCx->pCursor)
2190: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65  ;.    }.  }.  re
21a0: 74 75 72 6e 20 70 43 78 3b 0a 7d 0a 0a 2f 2a 0a  turn pCx;.}../*.
21b0: 2a 2a 20 54 72 79 20 74 6f 20 63 6f 6e 76 65 72  ** Try to conver
21c0: 74 20 61 20 76 61 6c 75 65 20 69 6e 74 6f 20 61  t a value into a
21d0: 20 6e 75 6d 65 72 69 63 20 72 65 70 72 65 73 65   numeric represe
21e0: 6e 74 61 74 69 6f 6e 20 69 66 20 77 65 20 63 61  ntation if we ca
21f0: 6e 0a 2a 2a 20 64 6f 20 73 6f 20 77 69 74 68 6f  n.** do so witho
2200: 75 74 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72  ut loss of infor
2210: 6d 61 74 69 6f 6e 2e 20 20 49 6e 20 6f 74 68 65  mation.  In othe
2220: 72 20 77 6f 72 64 73 2c 20 69 66 20 74 68 65 20  r words, if the 
2230: 73 74 72 69 6e 67 0a 2a 2a 20 6c 6f 6f 6b 73 20  string.** looks 
2240: 6c 69 6b 65 20 61 20 6e 75 6d 62 65 72 2c 20 63  like a number, c
2250: 6f 6e 76 65 72 74 20 69 74 20 69 6e 74 6f 20 61  onvert it into a
2260: 20 6e 75 6d 62 65 72 2e 20 20 49 66 20 69 74 20   number.  If it 
2270: 64 6f 65 73 20 6e 6f 74 0a 2a 2a 20 6c 6f 6f 6b  does not.** look
2280: 20 6c 69 6b 65 20 61 20 6e 75 6d 62 65 72 2c 20   like a number, 
2290: 6c 65 61 76 65 20 69 74 20 61 6c 6f 6e 65 2e 0a  leave it alone..
22a0: 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 61  */.static void a
22b0: 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e  pplyNumericAffin
22c0: 69 74 79 28 4d 65 6d 20 2a 70 52 65 63 29 7b 0a  ity(Mem *pRec){.
22d0: 20 20 69 66 28 20 28 70 52 65 63 2d 3e 66 6c 61    if( (pRec->fla
22e0: 67 73 20 26 20 28 4d 45 4d 5f 52 65 61 6c 7c 4d  gs & (MEM_Real|M
22f0: 45 4d 5f 49 6e 74 29 29 3d 3d 30 20 29 7b 0a 20  EM_Int))==0 ){. 
2300: 20 20 20 64 6f 75 62 6c 65 20 72 56 61 6c 75 65     double rValue
2310: 3b 0a 20 20 20 20 69 36 34 20 69 56 61 6c 75 65  ;.    i64 iValue
2320: 3b 0a 20 20 20 20 75 38 20 65 6e 63 20 3d 20 70  ;.    u8 enc = p
2330: 52 65 63 2d 3e 65 6e 63 3b 0a 20 20 20 20 69 66  Rec->enc;.    if
2340: 28 20 28 70 52 65 63 2d 3e 66 6c 61 67 73 26 4d  ( (pRec->flags&M
2350: 45 4d 5f 53 74 72 29 3d 3d 30 20 29 20 72 65 74  EM_Str)==0 ) ret
2360: 75 72 6e 3b 0a 20 20 20 20 69 66 28 20 73 71 6c  urn;.    if( sql
2370: 69 74 65 33 41 74 6f 46 28 70 52 65 63 2d 3e 7a  ite3AtoF(pRec->z
2380: 2c 20 26 72 56 61 6c 75 65 2c 20 70 52 65 63 2d  , &rValue, pRec-
2390: 3e 6e 2c 20 65 6e 63 29 3d 3d 30 20 29 20 72 65  >n, enc)==0 ) re
23a0: 74 75 72 6e 3b 0a 20 20 20 20 69 66 28 20 30 3d  turn;.    if( 0=
23b0: 3d 73 71 6c 69 74 65 33 41 74 6f 69 36 34 28 70  =sqlite3Atoi64(p
23c0: 52 65 63 2d 3e 7a 2c 20 26 69 56 61 6c 75 65 2c  Rec->z, &iValue,
23d0: 20 70 52 65 63 2d 3e 6e 2c 20 65 6e 63 29 20 29   pRec->n, enc) )
23e0: 7b 0a 20 20 20 20 20 20 70 52 65 63 2d 3e 75 2e  {.      pRec->u.
23f0: 69 20 3d 20 69 56 61 6c 75 65 3b 0a 20 20 20 20  i = iValue;.    
2400: 20 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 7c 3d    pRec->flags |=
2410: 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 7d 65   MEM_Int;.    }e
2420: 6c 73 65 7b 0a 20 20 20 20 20 20 70 52 65 63 2d  lse{.      pRec-
2430: 3e 72 20 3d 20 72 56 61 6c 75 65 3b 0a 20 20 20  >r = rValue;.   
2440: 20 20 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 7c     pRec->flags |
2450: 3d 20 4d 45 4d 5f 52 65 61 6c 3b 0a 20 20 20 20  = MEM_Real;.    
2460: 7d 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 50  }.  }.}../*.** P
2470: 72 6f 63 65 73 73 69 6e 67 20 69 73 20 64 65 74  rocessing is det
2480: 65 72 6d 69 6e 65 20 62 79 20 74 68 65 20 61 66  ermine by the af
2490: 66 69 6e 69 74 79 20 70 61 72 61 6d 65 74 65 72  finity parameter
24a0: 3a 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41  :.**.** SQLITE_A
24b0: 46 46 5f 49 4e 54 45 47 45 52 3a 0a 2a 2a 20 53  FF_INTEGER:.** S
24c0: 51 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c 3a 0a  QLITE_AFF_REAL:.
24d0: 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55  ** SQLITE_AFF_NU
24e0: 4d 45 52 49 43 3a 0a 2a 2a 20 20 20 20 54 72 79  MERIC:.**    Try
24f0: 20 74 6f 20 63 6f 6e 76 65 72 74 20 70 52 65 63   to convert pRec
2500: 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 72   to an integer r
2510: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 72  epresentation or
2520: 20 61 20 0a 2a 2a 20 20 20 20 66 6c 6f 61 74 69   a .**    floati
2530: 6e 67 2d 70 6f 69 6e 74 20 72 65 70 72 65 73 65  ng-point represe
2540: 6e 74 61 74 69 6f 6e 20 69 66 20 61 6e 20 69 6e  ntation if an in
2550: 74 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 61  teger representa
2560: 74 69 6f 6e 0a 2a 2a 20 20 20 20 69 73 20 6e 6f  tion.**    is no
2570: 74 20 70 6f 73 73 69 62 6c 65 2e 20 20 4e 6f 74  t possible.  Not
2580: 65 20 74 68 61 74 20 74 68 65 20 69 6e 74 65 67  e that the integ
2590: 65 72 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  er representatio
25a0: 6e 20 69 73 0a 2a 2a 20 20 20 20 61 6c 77 61 79  n is.**    alway
25b0: 73 20 70 72 65 66 65 72 72 65 64 2c 20 65 76 65  s preferred, eve
25c0: 6e 20 69 66 20 74 68 65 20 61 66 66 69 6e 69 74  n if the affinit
25d0: 79 20 69 73 20 52 45 41 4c 2c 20 62 65 63 61 75  y is REAL, becau
25e0: 73 65 0a 2a 2a 20 20 20 20 61 6e 20 69 6e 74 65  se.**    an inte
25f0: 67 65 72 20 72 65 70 72 65 73 65 6e 74 61 74 69  ger representati
2600: 6f 6e 20 69 73 20 6d 6f 72 65 20 73 70 61 63 65  on is more space
2610: 20 65 66 66 69 63 69 65 6e 74 20 6f 6e 20 64 69   efficient on di
2620: 73 6b 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45  sk..**.** SQLITE
2630: 5f 41 46 46 5f 54 45 58 54 3a 0a 2a 2a 20 20 20  _AFF_TEXT:.**   
2640: 20 43 6f 6e 76 65 72 74 20 70 52 65 63 20 74 6f   Convert pRec to
2650: 20 61 20 74 65 78 74 20 72 65 70 72 65 73 65 6e   a text represen
2660: 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 51  tation..**.** SQ
2670: 4c 49 54 45 5f 41 46 46 5f 4e 4f 4e 45 3a 0a 2a  LITE_AFF_NONE:.*
2680: 2a 20 20 20 20 4e 6f 2d 6f 70 2e 20 20 70 52 65  *    No-op.  pRe
2690: 63 20 69 73 20 75 6e 63 68 61 6e 67 65 64 2e 0a  c is unchanged..
26a0: 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 61  */.static void a
26b0: 70 70 6c 79 41 66 66 69 6e 69 74 79 28 0a 20 20  pplyAffinity(.  
26c0: 4d 65 6d 20 2a 70 52 65 63 2c 20 20 20 20 20 20  Mem *pRec,      
26d0: 20 20 20 20 2f 2a 20 54 68 65 20 76 61 6c 75 65      /* The value
26e0: 20 74 6f 20 61 70 70 6c 79 20 61 66 66 69 6e 69   to apply affini
26f0: 74 79 20 74 6f 20 2a 2f 0a 20 20 63 68 61 72 20  ty to */.  char 
2700: 61 66 66 69 6e 69 74 79 2c 20 20 20 20 20 20 2f  affinity,      /
2710: 2a 20 54 68 65 20 61 66 66 69 6e 69 74 79 20 74  * The affinity t
2720: 6f 20 62 65 20 61 70 70 6c 69 65 64 20 2a 2f 0a  o be applied */.
2730: 20 20 75 38 20 65 6e 63 20 20 20 20 20 20 20 20    u8 enc        
2740: 20 20 20 20 20 20 2f 2a 20 55 73 65 20 74 68 69        /* Use thi
2750: 73 20 74 65 78 74 20 65 6e 63 6f 64 69 6e 67 20  s text encoding 
2760: 2a 2f 0a 29 7b 0a 20 20 69 66 28 20 61 66 66 69  */.){.  if( affi
2770: 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46  nity==SQLITE_AFF
2780: 5f 54 45 58 54 20 29 7b 0a 20 20 20 20 2f 2a 20  _TEXT ){.    /* 
2790: 4f 6e 6c 79 20 61 74 74 65 6d 70 74 20 74 68 65  Only attempt the
27a0: 20 63 6f 6e 76 65 72 73 69 6f 6e 20 74 6f 20 54   conversion to T
27b0: 45 58 54 20 69 66 20 74 68 65 72 65 20 69 73 20  EXT if there is 
27c0: 61 6e 20 69 6e 74 65 67 65 72 20 6f 72 20 72 65  an integer or re
27d0: 61 6c 0a 20 20 20 20 2a 2a 20 72 65 70 72 65 73  al.    ** repres
27e0: 65 6e 74 61 74 69 6f 6e 20 28 62 6c 6f 62 20 61  entation (blob a
27f0: 6e 64 20 4e 55 4c 4c 20 64 6f 20 6e 6f 74 20 67  nd NULL do not g
2800: 65 74 20 63 6f 6e 76 65 72 74 65 64 29 20 62 75  et converted) bu
2810: 74 20 6e 6f 20 73 74 72 69 6e 67 0a 20 20 20 20  t no string.    
2820: 2a 2a 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  ** representatio
2830: 6e 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66  n..    */.    if
2840: 28 20 30 3d 3d 28 70 52 65 63 2d 3e 66 6c 61 67  ( 0==(pRec->flag
2850: 73 26 4d 45 4d 5f 53 74 72 29 20 26 26 20 28 70  s&MEM_Str) && (p
2860: 52 65 63 2d 3e 66 6c 61 67 73 26 28 4d 45 4d 5f  Rec->flags&(MEM_
2870: 52 65 61 6c 7c 4d 45 4d 5f 49 6e 74 29 29 20 29  Real|MEM_Int)) )
2880: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  {.      sqlite3V
2890: 64 62 65 4d 65 6d 53 74 72 69 6e 67 69 66 79 28  dbeMemStringify(
28a0: 70 52 65 63 2c 20 65 6e 63 29 3b 0a 20 20 20 20  pRec, enc);.    
28b0: 7d 0a 20 20 20 20 70 52 65 63 2d 3e 66 6c 61 67  }.    pRec->flag
28c0: 73 20 26 3d 20 7e 28 4d 45 4d 5f 52 65 61 6c 7c  s &= ~(MEM_Real|
28d0: 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d 65 6c 73  MEM_Int);.  }els
28e0: 65 20 69 66 28 20 61 66 66 69 6e 69 74 79 21 3d  e if( affinity!=
28f0: 53 51 4c 49 54 45 5f 41 46 46 5f 4e 4f 4e 45 20  SQLITE_AFF_NONE 
2900: 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 61  ){.    assert( a
2910: 66 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f  ffinity==SQLITE_
2920: 41 46 46 5f 49 4e 54 45 47 45 52 20 7c 7c 20 61  AFF_INTEGER || a
2930: 66 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f  ffinity==SQLITE_
2940: 41 46 46 5f 52 45 41 4c 0a 20 20 20 20 20 20 20  AFF_REAL.       
2950: 20 20 20 20 20 20 7c 7c 20 61 66 66 69 6e 69 74        || affinit
2960: 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55  y==SQLITE_AFF_NU
2970: 4d 45 52 49 43 20 29 3b 0a 20 20 20 20 61 70 70  MERIC );.    app
2980: 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74  lyNumericAffinit
2990: 79 28 70 52 65 63 29 3b 0a 20 20 20 20 69 66 28  y(pRec);.    if(
29a0: 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d   pRec->flags & M
29b0: 45 4d 5f 52 65 61 6c 20 29 7b 0a 20 20 20 20 20  EM_Real ){.     
29c0: 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 65   sqlite3VdbeInte
29d0: 67 65 72 41 66 66 69 6e 69 74 79 28 70 52 65 63  gerAffinity(pRec
29e0: 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a 0a  );.    }.  }.}..
29f0: 2f 2a 0a 2a 2a 20 54 72 79 20 74 6f 20 63 6f 6e  /*.** Try to con
2a00: 76 65 72 74 20 74 68 65 20 74 79 70 65 20 6f 66  vert the type of
2a10: 20 61 20 66 75 6e 63 74 69 6f 6e 20 61 72 67 75   a function argu
2a20: 6d 65 6e 74 20 6f 72 20 61 20 72 65 73 75 6c 74  ment or a result
2a30: 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 69 6e 74 6f 20   column.** into 
2a40: 61 20 6e 75 6d 65 72 69 63 20 72 65 70 72 65 73  a numeric repres
2a50: 65 6e 74 61 74 69 6f 6e 2e 20 20 55 73 65 20 65  entation.  Use e
2a60: 69 74 68 65 72 20 49 4e 54 45 47 45 52 20 6f 72  ither INTEGER or
2a70: 20 52 45 41 4c 20 77 68 69 63 68 65 76 65 72 0a   REAL whichever.
2a80: 2a 2a 20 69 73 20 61 70 70 72 6f 70 72 69 61 74  ** is appropriat
2a90: 65 2e 20 20 42 75 74 20 6f 6e 6c 79 20 64 6f 20  e.  But only do 
2aa0: 74 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69  the conversion i
2ab0: 66 20 69 74 20 69 73 20 70 6f 73 73 69 62 6c 65  f it is possible
2ac0: 20 77 69 74 68 6f 75 74 0a 2a 2a 20 6c 6f 73 73   without.** loss
2ad0: 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20   of information 
2ae0: 61 6e 64 20 72 65 74 75 72 6e 20 74 68 65 20 72  and return the r
2af0: 65 76 69 73 65 64 20 74 79 70 65 20 6f 66 20 74  evised type of t
2b00: 68 65 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a  he argument..*/.
2b10: 69 6e 74 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  int sqlite3_valu
2b20: 65 5f 6e 75 6d 65 72 69 63 5f 74 79 70 65 28 73  e_numeric_type(s
2b30: 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 56  qlite3_value *pV
2b40: 61 6c 29 7b 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d  al){.  Mem *pMem
2b50: 20 3d 20 28 4d 65 6d 2a 29 70 56 61 6c 3b 0a 20   = (Mem*)pVal;. 
2b60: 20 69 66 28 20 70 4d 65 6d 2d 3e 74 79 70 65 3d   if( pMem->type=
2b70: 3d 53 51 4c 49 54 45 5f 54 45 58 54 20 29 7b 0a  =SQLITE_TEXT ){.
2b80: 20 20 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63      applyNumeric
2b90: 41 66 66 69 6e 69 74 79 28 70 4d 65 6d 29 3b 0a  Affinity(pMem);.
2ba0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
2bb0: 65 6d 53 74 6f 72 65 54 79 70 65 28 70 4d 65 6d  emStoreType(pMem
2bc0: 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20  );.  }.  return 
2bd0: 70 4d 65 6d 2d 3e 74 79 70 65 3b 0a 7d 0a 0a 2f  pMem->type;.}../
2be0: 2a 0a 2a 2a 20 45 78 70 6f 72 74 65 64 20 76 65  *.** Exported ve
2bf0: 72 73 69 6f 6e 20 6f 66 20 61 70 70 6c 79 41 66  rsion of applyAf
2c00: 66 69 6e 69 74 79 28 29 2e 20 54 68 69 73 20 6f  finity(). This o
2c10: 6e 65 20 77 6f 72 6b 73 20 6f 6e 20 73 71 6c 69  ne works on sqli
2c20: 74 65 33 5f 76 61 6c 75 65 2a 2c 20 0a 2a 2a 20  te3_value*, .** 
2c30: 6e 6f 74 20 74 68 65 20 69 6e 74 65 72 6e 61 6c  not the internal
2c40: 20 4d 65 6d 2a 20 74 79 70 65 2e 0a 2a 2f 0a 76   Mem* type..*/.v
2c50: 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65  oid sqlite3Value
2c60: 41 70 70 6c 79 41 66 66 69 6e 69 74 79 28 0a 20  ApplyAffinity(. 
2c70: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a   sqlite3_value *
2c80: 70 56 61 6c 2c 20 0a 20 20 75 38 20 61 66 66 69  pVal, .  u8 affi
2c90: 6e 69 74 79 2c 20 0a 20 20 75 38 20 65 6e 63 0a  nity, .  u8 enc.
2ca0: 29 7b 0a 20 20 61 70 70 6c 79 41 66 66 69 6e 69  ){.  applyAffini
2cb0: 74 79 28 28 4d 65 6d 20 2a 29 70 56 61 6c 2c 20  ty((Mem *)pVal, 
2cc0: 61 66 66 69 6e 69 74 79 2c 20 65 6e 63 29 3b 0a  affinity, enc);.
2cd0: 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  }..#ifdef SQLITE
2ce0: 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20 57 72 69  _DEBUG./*.** Wri
2cf0: 74 65 20 61 20 6e 69 63 65 20 73 74 72 69 6e 67  te a nice string
2d00: 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   representation 
2d10: 6f 66 20 74 68 65 20 63 6f 6e 74 65 6e 74 73 20  of the contents 
2d20: 6f 66 20 63 65 6c 6c 20 70 4d 65 6d 0a 2a 2a 20  of cell pMem.** 
2d30: 69 6e 74 6f 20 62 75 66 66 65 72 20 7a 42 75 66  into buffer zBuf
2d40: 2c 20 6c 65 6e 67 74 68 20 6e 42 75 66 2e 0a 2a  , length nBuf..*
2d50: 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64  /.void sqlite3Vd
2d60: 62 65 4d 65 6d 50 72 65 74 74 79 50 72 69 6e 74  beMemPrettyPrint
2d70: 28 4d 65 6d 20 2a 70 4d 65 6d 2c 20 63 68 61 72  (Mem *pMem, char
2d80: 20 2a 7a 42 75 66 29 7b 0a 20 20 63 68 61 72 20   *zBuf){.  char 
2d90: 2a 7a 43 73 72 20 3d 20 7a 42 75 66 3b 0a 20 20  *zCsr = zBuf;.  
2da0: 69 6e 74 20 66 20 3d 20 70 4d 65 6d 2d 3e 66 6c  int f = pMem->fl
2db0: 61 67 73 3b 0a 0a 20 20 73 74 61 74 69 63 20 63  ags;..  static c
2dc0: 6f 6e 73 74 20 63 68 61 72 20 2a 63 6f 6e 73 74  onst char *const
2dd0: 20 65 6e 63 6e 61 6d 65 73 5b 5d 20 3d 20 7b 22   encnames[] = {"
2de0: 28 58 29 22 2c 20 22 28 38 29 22 2c 20 22 28 31  (X)", "(8)", "(1
2df0: 36 4c 45 29 22 2c 20 22 28 31 36 42 45 29 22 7d  6LE)", "(16BE)"}
2e00: 3b 0a 0a 20 20 69 66 28 20 66 26 4d 45 4d 5f 42  ;..  if( f&MEM_B
2e10: 6c 6f 62 20 29 7b 0a 20 20 20 20 69 6e 74 20 69  lob ){.    int i
2e20: 3b 0a 20 20 20 20 63 68 61 72 20 63 3b 0a 20 20  ;.    char c;.  
2e30: 20 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 44 79    if( f & MEM_Dy
2e40: 6e 20 29 7b 0a 20 20 20 20 20 20 63 20 3d 20 27  n ){.      c = '
2e50: 7a 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  z';.      assert
2e60: 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74 61 74  ( (f & (MEM_Stat
2e70: 69 63 7c 4d 45 4d 5f 45 70 68 65 6d 29 29 3d 3d  ic|MEM_Ephem))==
2e80: 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69  0 );.    }else i
2e90: 66 28 20 66 20 26 20 4d 45 4d 5f 53 74 61 74 69  f( f & MEM_Stati
2ea0: 63 20 29 7b 0a 20 20 20 20 20 20 63 20 3d 20 27  c ){.      c = '
2eb0: 74 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  t';.      assert
2ec0: 28 20 28 66 20 26 20 28 4d 45 4d 5f 44 79 6e 7c  ( (f & (MEM_Dyn|
2ed0: 4d 45 4d 5f 45 70 68 65 6d 29 29 3d 3d 30 20 29  MEM_Ephem))==0 )
2ee0: 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
2ef0: 66 20 26 20 4d 45 4d 5f 45 70 68 65 6d 20 29 7b  f & MEM_Ephem ){
2f00: 0a 20 20 20 20 20 20 63 20 3d 20 27 65 27 3b 0a  .      c = 'e';.
2f10: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28 66        assert( (f
2f20: 20 26 20 28 4d 45 4d 5f 53 74 61 74 69 63 7c 4d   & (MEM_Static|M
2f30: 45 4d 5f 44 79 6e 29 29 3d 3d 30 20 29 3b 0a 20  EM_Dyn))==0 );. 
2f40: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
2f50: 63 20 3d 20 27 73 27 3b 0a 20 20 20 20 7d 0a 0a  c = 's';.    }..
2f60: 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72      sqlite3_snpr
2f70: 69 6e 74 66 28 31 30 30 2c 20 7a 43 73 72 2c 20  intf(100, zCsr, 
2f80: 22 25 63 22 2c 20 63 29 3b 0a 20 20 20 20 7a 43  "%c", c);.    zC
2f90: 73 72 20 2b 3d 20 73 71 6c 69 74 65 33 53 74 72  sr += sqlite3Str
2fa0: 6c 65 6e 33 30 28 7a 43 73 72 29 3b 0a 20 20 20  len30(zCsr);.   
2fb0: 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74   sqlite3_snprint
2fc0: 66 28 31 30 30 2c 20 7a 43 73 72 2c 20 22 25 64  f(100, zCsr, "%d
2fd0: 5b 22 2c 20 70 4d 65 6d 2d 3e 6e 29 3b 0a 20 20  [", pMem->n);.  
2fe0: 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74 65    zCsr += sqlite
2ff0: 33 53 74 72 6c 65 6e 33 30 28 7a 43 73 72 29 3b  3Strlen30(zCsr);
3000: 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  .    for(i=0; i<
3010: 31 36 20 26 26 20 69 3c 70 4d 65 6d 2d 3e 6e 3b  16 && i<pMem->n;
3020: 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 73 71 6c   i++){.      sql
3030: 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30  ite3_snprintf(10
3040: 30 2c 20 7a 43 73 72 2c 20 22 25 30 32 58 22 2c  0, zCsr, "%02X",
3050: 20 28 28 69 6e 74 29 70 4d 65 6d 2d 3e 7a 5b 69   ((int)pMem->z[i
3060: 5d 20 26 20 30 78 46 46 29 29 3b 0a 20 20 20 20  ] & 0xFF));.    
3070: 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74 65    zCsr += sqlite
3080: 33 53 74 72 6c 65 6e 33 30 28 7a 43 73 72 29 3b  3Strlen30(zCsr);
3090: 0a 20 20 20 20 7d 0a 20 20 20 20 66 6f 72 28 69  .    }.    for(i
30a0: 3d 30 3b 20 69 3c 31 36 20 26 26 20 69 3c 70 4d  =0; i<16 && i<pM
30b0: 65 6d 2d 3e 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20  em->n; i++){.   
30c0: 20 20 20 63 68 61 72 20 7a 20 3d 20 70 4d 65 6d     char z = pMem
30d0: 2d 3e 7a 5b 69 5d 3b 0a 20 20 20 20 20 20 69 66  ->z[i];.      if
30e0: 28 20 7a 3c 33 32 20 7c 7c 20 7a 3e 31 32 36 20  ( z<32 || z>126 
30f0: 29 20 2a 7a 43 73 72 2b 2b 20 3d 20 27 2e 27 3b  ) *zCsr++ = '.';
3100: 0a 20 20 20 20 20 20 65 6c 73 65 20 2a 7a 43 73  .      else *zCs
3110: 72 2b 2b 20 3d 20 7a 3b 0a 20 20 20 20 7d 0a 0a  r++ = z;.    }..
3120: 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72      sqlite3_snpr
3130: 69 6e 74 66 28 31 30 30 2c 20 7a 43 73 72 2c 20  intf(100, zCsr, 
3140: 22 5d 25 73 22 2c 20 65 6e 63 6e 61 6d 65 73 5b  "]%s", encnames[
3150: 70 4d 65 6d 2d 3e 65 6e 63 5d 29 3b 0a 20 20 20  pMem->enc]);.   
3160: 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74 65 33   zCsr += sqlite3
3170: 53 74 72 6c 65 6e 33 30 28 7a 43 73 72 29 3b 0a  Strlen30(zCsr);.
3180: 20 20 20 20 69 66 28 20 66 20 26 20 4d 45 4d 5f      if( f & MEM_
3190: 5a 65 72 6f 20 29 7b 0a 20 20 20 20 20 20 73 71  Zero ){.      sq
31a0: 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31  lite3_snprintf(1
31b0: 30 30 2c 20 7a 43 73 72 2c 22 2b 25 64 7a 22 2c  00, zCsr,"+%dz",
31c0: 70 4d 65 6d 2d 3e 75 2e 6e 5a 65 72 6f 29 3b 0a  pMem->u.nZero);.
31d0: 20 20 20 20 20 20 7a 43 73 72 20 2b 3d 20 73 71        zCsr += sq
31e0: 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 43  lite3Strlen30(zC
31f0: 73 72 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 2a  sr);.    }.    *
3200: 7a 43 73 72 20 3d 20 27 5c 30 27 3b 0a 20 20 7d  zCsr = '\0';.  }
3210: 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d  else if( f & MEM
3220: 5f 53 74 72 20 29 7b 0a 20 20 20 20 69 6e 74 20  _Str ){.    int 
3230: 6a 2c 20 6b 3b 0a 20 20 20 20 7a 42 75 66 5b 30  j, k;.    zBuf[0
3240: 5d 20 3d 20 27 20 27 3b 0a 20 20 20 20 69 66 28  ] = ' ';.    if(
3250: 20 66 20 26 20 4d 45 4d 5f 44 79 6e 20 29 7b 0a   f & MEM_Dyn ){.
3260: 20 20 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20        zBuf[1] = 
3270: 27 7a 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72  'z';.      asser
3280: 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74 61  t( (f & (MEM_Sta
3290: 74 69 63 7c 4d 45 4d 5f 45 70 68 65 6d 29 29 3d  tic|MEM_Ephem))=
32a0: 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20  =0 );.    }else 
32b0: 69 66 28 20 66 20 26 20 4d 45 4d 5f 53 74 61 74  if( f & MEM_Stat
32c0: 69 63 20 29 7b 0a 20 20 20 20 20 20 7a 42 75 66  ic ){.      zBuf
32d0: 5b 31 5d 20 3d 20 27 74 27 3b 0a 20 20 20 20 20  [1] = 't';.     
32e0: 20 61 73 73 65 72 74 28 20 28 66 20 26 20 28 4d   assert( (f & (M
32f0: 45 4d 5f 44 79 6e 7c 4d 45 4d 5f 45 70 68 65 6d  EM_Dyn|MEM_Ephem
3300: 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c  ))==0 );.    }el
3310: 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 45  se if( f & MEM_E
3320: 70 68 65 6d 20 29 7b 0a 20 20 20 20 20 20 7a 42  phem ){.      zB
3330: 75 66 5b 31 5d 20 3d 20 27 65 27 3b 0a 20 20 20  uf[1] = 'e';.   
3340: 20 20 20 61 73 73 65 72 74 28 20 28 66 20 26 20     assert( (f & 
3350: 28 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f  (MEM_Static|MEM_
3360: 44 79 6e 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20  Dyn))==0 );.    
3370: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 7a 42 75  }else{.      zBu
3380: 66 5b 31 5d 20 3d 20 27 73 27 3b 0a 20 20 20 20  f[1] = 's';.    
3390: 7d 0a 20 20 20 20 6b 20 3d 20 32 3b 0a 20 20 20  }.    k = 2;.   
33a0: 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74   sqlite3_snprint
33b0: 66 28 31 30 30 2c 20 26 7a 42 75 66 5b 6b 5d 2c  f(100, &zBuf[k],
33c0: 20 22 25 64 22 2c 20 70 4d 65 6d 2d 3e 6e 29 3b   "%d", pMem->n);
33d0: 0a 20 20 20 20 6b 20 2b 3d 20 73 71 6c 69 74 65  .    k += sqlite
33e0: 33 53 74 72 6c 65 6e 33 30 28 26 7a 42 75 66 5b  3Strlen30(&zBuf[
33f0: 6b 5d 29 3b 0a 20 20 20 20 7a 42 75 66 5b 6b 2b  k]);.    zBuf[k+
3400: 2b 5d 20 3d 20 27 5b 27 3b 0a 20 20 20 20 66 6f  +] = '[';.    fo
3410: 72 28 6a 3d 30 3b 20 6a 3c 31 35 20 26 26 20 6a  r(j=0; j<15 && j
3420: 3c 70 4d 65 6d 2d 3e 6e 3b 20 6a 2b 2b 29 7b 0a  <pMem->n; j++){.
3430: 20 20 20 20 20 20 75 38 20 63 20 3d 20 70 4d 65        u8 c = pMe
3440: 6d 2d 3e 7a 5b 6a 5d 3b 0a 20 20 20 20 20 20 69  m->z[j];.      i
3450: 66 28 20 63 3e 3d 30 78 32 30 20 26 26 20 63 3c  f( c>=0x20 && c<
3460: 30 78 37 66 20 29 7b 0a 20 20 20 20 20 20 20 20  0x7f ){.        
3470: 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 63 3b 0a 20  zBuf[k++] = c;. 
3480: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
3490: 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20      zBuf[k++] = 
34a0: 27 2e 27 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  '.';.      }.   
34b0: 20 7d 0a 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d   }.    zBuf[k++]
34c0: 20 3d 20 27 5d 27 3b 0a 20 20 20 20 73 71 6c 69   = ']';.    sqli
34d0: 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30  te3_snprintf(100
34e0: 2c 26 7a 42 75 66 5b 6b 5d 2c 20 65 6e 63 6e 61  ,&zBuf[k], encna
34f0: 6d 65 73 5b 70 4d 65 6d 2d 3e 65 6e 63 5d 29 3b  mes[pMem->enc]);
3500: 0a 20 20 20 20 6b 20 2b 3d 20 73 71 6c 69 74 65  .    k += sqlite
3510: 33 53 74 72 6c 65 6e 33 30 28 26 7a 42 75 66 5b  3Strlen30(&zBuf[
3520: 6b 5d 29 3b 0a 20 20 20 20 7a 42 75 66 5b 6b 2b  k]);.    zBuf[k+
3530: 2b 5d 20 3d 20 30 3b 0a 20 20 7d 0a 7d 0a 23 65  +] = 0;.  }.}.#e
3540: 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c  ndif..#ifdef SQL
3550: 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20  ITE_DEBUG./*.** 
3560: 50 72 69 6e 74 20 74 68 65 20 76 61 6c 75 65 20  Print the value 
3570: 6f 66 20 61 20 72 65 67 69 73 74 65 72 20 66 6f  of a register fo
3580: 72 20 74 72 61 63 69 6e 67 20 70 75 72 70 6f 73  r tracing purpos
3590: 65 73 3a 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f  es:.*/.static vo
35a0: 69 64 20 6d 65 6d 54 72 61 63 65 50 72 69 6e 74  id memTracePrint
35b0: 28 46 49 4c 45 20 2a 6f 75 74 2c 20 4d 65 6d 20  (FILE *out, Mem 
35c0: 2a 70 29 7b 0a 20 20 69 66 28 20 70 2d 3e 66 6c  *p){.  if( p->fl
35d0: 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29  ags & MEM_Null )
35e0: 7b 0a 20 20 20 20 66 70 72 69 6e 74 66 28 6f 75  {.    fprintf(ou
35f0: 74 2c 20 22 20 4e 55 4c 4c 22 29 3b 0a 20 20 7d  t, " NULL");.  }
3600: 65 6c 73 65 20 69 66 28 20 28 70 2d 3e 66 6c 61  else if( (p->fla
3610: 67 73 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45  gs & (MEM_Int|ME
3620: 4d 5f 53 74 72 29 29 3d 3d 28 4d 45 4d 5f 49 6e  M_Str))==(MEM_In
3630: 74 7c 4d 45 4d 5f 53 74 72 29 20 29 7b 0a 20 20  t|MEM_Str) ){.  
3640: 20 20 66 70 72 69 6e 74 66 28 6f 75 74 2c 20 22    fprintf(out, "
3650: 20 73 69 3a 25 6c 6c 64 22 2c 20 70 2d 3e 75 2e   si:%lld", p->u.
3660: 69 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  i);.  }else if( 
3670: 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  p->flags & MEM_I
3680: 6e 74 20 29 7b 0a 20 20 20 20 66 70 72 69 6e 74  nt ){.    fprint
3690: 66 28 6f 75 74 2c 20 22 20 69 3a 25 6c 6c 64 22  f(out, " i:%lld"
36a0: 2c 20 70 2d 3e 75 2e 69 29 3b 0a 23 69 66 6e 64  , p->u.i);.#ifnd
36b0: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ef SQLITE_OMIT_F
36c0: 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20  LOATING_POINT.  
36d0: 7d 65 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c 61  }else if( p->fla
36e0: 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 20 29 7b  gs & MEM_Real ){
36f0: 0a 20 20 20 20 66 70 72 69 6e 74 66 28 6f 75 74  .    fprintf(out
3700: 2c 20 22 20 72 3a 25 67 22 2c 20 70 2d 3e 72 29  , " r:%g", p->r)
3710: 3b 0a 23 65 6e 64 69 66 0a 20 20 7d 65 6c 73 65  ;.#endif.  }else
3720: 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20   if( p->flags & 
3730: 4d 45 4d 5f 52 6f 77 53 65 74 20 29 7b 0a 20 20  MEM_RowSet ){.  
3740: 20 20 66 70 72 69 6e 74 66 28 6f 75 74 2c 20 22    fprintf(out, "
3750: 20 28 72 6f 77 73 65 74 29 22 29 3b 0a 20 20 7d   (rowset)");.  }
3760: 65 6c 73 65 7b 0a 20 20 20 20 63 68 61 72 20 7a  else{.    char z
3770: 42 75 66 5b 32 30 30 5d 3b 0a 20 20 20 20 73 71  Buf[200];.    sq
3780: 6c 69 74 65 33 56 64 62 65 4d 65 6d 50 72 65 74  lite3VdbeMemPret
3790: 74 79 50 72 69 6e 74 28 70 2c 20 7a 42 75 66 29  tyPrint(p, zBuf)
37a0: 3b 0a 20 20 20 20 66 70 72 69 6e 74 66 28 6f 75  ;.    fprintf(ou
37b0: 74 2c 20 22 20 22 29 3b 0a 20 20 20 20 66 70 72  t, " ");.    fpr
37c0: 69 6e 74 66 28 6f 75 74 2c 20 22 25 73 22 2c 20  intf(out, "%s", 
37d0: 7a 42 75 66 29 3b 0a 20 20 7d 0a 7d 0a 73 74 61  zBuf);.  }.}.sta
37e0: 74 69 63 20 76 6f 69 64 20 72 65 67 69 73 74 65  tic void registe
37f0: 72 54 72 61 63 65 28 46 49 4c 45 20 2a 6f 75 74  rTrace(FILE *out
3800: 2c 20 69 6e 74 20 69 52 65 67 2c 20 4d 65 6d 20  , int iReg, Mem 
3810: 2a 70 29 7b 0a 20 20 66 70 72 69 6e 74 66 28 6f  *p){.  fprintf(o
3820: 75 74 2c 20 22 52 45 47 5b 25 64 5d 20 3d 20 22  ut, "REG[%d] = "
3830: 2c 20 69 52 65 67 29 3b 0a 20 20 6d 65 6d 54 72  , iReg);.  memTr
3840: 61 63 65 50 72 69 6e 74 28 6f 75 74 2c 20 70 29  acePrint(out, p)
3850: 3b 0a 20 20 66 70 72 69 6e 74 66 28 6f 75 74 2c  ;.  fprintf(out,
3860: 20 22 5c 6e 22 29 3b 0a 7d 0a 23 65 6e 64 69 66   "\n");.}.#endif
3870: 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
3880: 44 45 42 55 47 0a 23 20 20 64 65 66 69 6e 65 20  DEBUG.#  define 
3890: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 52  REGISTER_TRACE(R
38a0: 2c 4d 29 20 69 66 28 70 2d 3e 74 72 61 63 65 29  ,M) if(p->trace)
38b0: 72 65 67 69 73 74 65 72 54 72 61 63 65 28 70 2d  registerTrace(p-
38c0: 3e 74 72 61 63 65 2c 52 2c 4d 29 0a 23 65 6c 73  >trace,R,M).#els
38d0: 65 0a 23 20 20 64 65 66 69 6e 65 20 52 45 47 49  e.#  define REGI
38e0: 53 54 45 52 5f 54 52 41 43 45 28 52 2c 4d 29 0a  STER_TRACE(R,M).
38f0: 23 65 6e 64 69 66 0a 0a 0a 23 69 66 64 65 66 20  #endif...#ifdef 
3900: 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 0a 2f 2a  VDBE_PROFILE../*
3910: 20 0a 2a 2a 20 68 77 74 69 6d 65 2e 68 20 63 6f   .** hwtime.h co
3920: 6e 74 61 69 6e 73 20 69 6e 6c 69 6e 65 20 61 73  ntains inline as
3930: 73 65 6d 62 6c 65 72 20 63 6f 64 65 20 66 6f 72  sembler code for
3940: 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 0a 2a   implementing .*
3950: 2a 20 68 69 67 68 2d 70 65 72 66 6f 72 6d 61 6e  * high-performan
3960: 63 65 20 74 69 6d 69 6e 67 20 72 6f 75 74 69 6e  ce timing routin
3970: 65 73 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20  es..*/.#include 
3980: 22 68 77 74 69 6d 65 2e 68 22 0a 0a 23 65 6e 64  "hwtime.h"..#end
3990: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 43 48  if../*.** The CH
39a0: 45 43 4b 5f 46 4f 52 5f 49 4e 54 45 52 52 55 50  ECK_FOR_INTERRUP
39b0: 54 20 6d 61 63 72 6f 20 64 65 66 69 6e 65 64 20  T macro defined 
39c0: 68 65 72 65 20 6c 6f 6f 6b 73 20 74 6f 20 73 65  here looks to se
39d0: 65 20 69 66 20 74 68 65 0a 2a 2a 20 73 71 6c 69  e if the.** sqli
39e0: 74 65 33 5f 69 6e 74 65 72 72 75 70 74 28 29 20  te3_interrupt() 
39f0: 72 6f 75 74 69 6e 65 20 68 61 73 20 62 65 65 6e  routine has been
3a00: 20 63 61 6c 6c 65 64 2e 20 20 49 66 20 69 74 20   called.  If it 
3a10: 68 61 73 20 62 65 65 6e 2c 20 74 68 65 6e 0a 2a  has been, then.*
3a20: 2a 20 70 72 6f 63 65 73 73 69 6e 67 20 6f 66 20  * processing of 
3a30: 74 68 65 20 56 44 42 45 20 70 72 6f 67 72 61 6d  the VDBE program
3a40: 20 69 73 20 69 6e 74 65 72 72 75 70 74 65 64 2e   is interrupted.
3a50: 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6d 61 63 72  .**.** This macr
3a60: 6f 20 61 64 64 65 64 20 74 6f 20 65 76 65 72 79  o added to every
3a70: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 74 68 61   instruction tha
3a80: 74 20 64 6f 65 73 20 61 20 6a 75 6d 70 20 69 6e  t does a jump in
3a90: 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 69 6d 70   order to.** imp
3aa0: 6c 65 6d 65 6e 74 20 61 20 6c 6f 6f 70 2e 20 20  lement a loop.  
3ab0: 54 68 69 73 20 74 65 73 74 20 75 73 65 64 20 74  This test used t
3ac0: 6f 20 62 65 20 6f 6e 20 65 76 65 72 79 20 73 69  o be on every si
3ad0: 6e 67 6c 65 20 69 6e 73 74 72 75 63 74 69 6f 6e  ngle instruction
3ae0: 2c 0a 2a 2a 20 62 75 74 20 74 68 61 74 20 6d 65  ,.** but that me
3af0: 61 6e 74 20 77 65 20 6d 6f 72 65 20 74 65 73 74  ant we more test
3b00: 69 6e 67 20 74 68 61 74 20 77 65 20 6e 65 65 64  ing that we need
3b10: 65 64 2e 20 20 42 79 20 6f 6e 6c 79 20 74 65 73  ed.  By only tes
3b20: 74 69 6e 67 20 74 68 65 0a 2a 2a 20 66 6c 61 67  ting the.** flag
3b30: 20 6f 6e 20 6a 75 6d 70 20 69 6e 73 74 72 75 63   on jump instruc
3b40: 74 69 6f 6e 73 2c 20 77 65 20 67 65 74 20 61 20  tions, we get a 
3b50: 28 73 6d 61 6c 6c 29 20 73 70 65 65 64 20 69 6d  (small) speed im
3b60: 70 72 6f 76 65 6d 65 6e 74 2e 0a 2a 2f 0a 23 64  provement..*/.#d
3b70: 65 66 69 6e 65 20 43 48 45 43 4b 5f 46 4f 52 5f  efine CHECK_FOR_
3b80: 49 4e 54 45 52 52 55 50 54 20 5c 0a 20 20 20 69  INTERRUPT \.   i
3b90: 66 28 20 64 62 2d 3e 75 31 2e 69 73 49 6e 74 65  f( db->u1.isInte
3ba0: 72 72 75 70 74 65 64 20 29 20 67 6f 74 6f 20 61  rrupted ) goto a
3bb0: 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 69 6e 74 65  bort_due_to_inte
3bc0: 72 72 75 70 74 3b 0a 0a 0a 23 69 66 6e 64 65 66  rrupt;...#ifndef
3bd0: 20 4e 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20 54 68   NDEBUG./*.** Th
3be0: 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 6f  is function is o
3bf0: 6e 6c 79 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20  nly called from 
3c00: 77 69 74 68 69 6e 20 61 6e 20 61 73 73 65 72 74  within an assert
3c10: 28 29 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 49  () expression. I
3c20: 74 0a 2a 2a 20 63 68 65 63 6b 73 20 74 68 61 74  t.** checks that
3c30: 20 74 68 65 20 73 71 6c 69 74 65 33 2e 6e 54 72   the sqlite3.nTr
3c40: 61 6e 73 61 63 74 69 6f 6e 20 76 61 72 69 61 62  ansaction variab
3c50: 6c 65 20 69 73 20 63 6f 72 72 65 63 74 6c 79 20  le is correctly 
3c60: 73 65 74 20 74 6f 0a 2a 2a 20 74 68 65 20 6e 75  set to.** the nu
3c70: 6d 62 65 72 20 6f 66 20 6e 6f 6e 2d 74 72 61 6e  mber of non-tran
3c80: 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e  saction savepoin
3c90: 74 73 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20  ts currently in 
3ca0: 74 68 65 20 0a 2a 2a 20 6c 69 6e 6b 65 64 20 6c  the .** linked l
3cb0: 69 73 74 20 73 74 61 72 74 69 6e 67 20 61 74 20  ist starting at 
3cc0: 73 71 6c 69 74 65 33 2e 70 53 61 76 65 70 6f 69  sqlite3.pSavepoi
3cd0: 6e 74 2e 0a 2a 2a 20 0a 2a 2a 20 55 73 61 67 65  nt..** .** Usage
3ce0: 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 61 73 73 65  :.**.**     asse
3cf0: 72 74 28 20 63 68 65 63 6b 53 61 76 65 70 6f 69  rt( checkSavepoi
3d00: 6e 74 43 6f 75 6e 74 28 64 62 29 20 29 3b 0a 2a  ntCount(db) );.*
3d10: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 63 68 65  /.static int che
3d20: 63 6b 53 61 76 65 70 6f 69 6e 74 43 6f 75 6e 74  ckSavepointCount
3d30: 28 73 71 6c 69 74 65 33 20 2a 64 62 29 7b 0a 20  (sqlite3 *db){. 
3d40: 20 69 6e 74 20 6e 20 3d 20 30 3b 0a 20 20 53 61   int n = 0;.  Sa
3d50: 76 65 70 6f 69 6e 74 20 2a 70 3b 0a 20 20 66 6f  vepoint *p;.  fo
3d60: 72 28 70 3d 64 62 2d 3e 70 53 61 76 65 70 6f 69  r(p=db->pSavepoi
3d70: 6e 74 3b 20 70 3b 20 70 3d 70 2d 3e 70 4e 65 78  nt; p; p=p->pNex
3d80: 74 29 20 6e 2b 2b 3b 0a 20 20 61 73 73 65 72 74  t) n++;.  assert
3d90: 28 20 6e 3d 3d 28 64 62 2d 3e 6e 53 61 76 65 70  ( n==(db->nSavep
3da0: 6f 69 6e 74 20 2b 20 64 62 2d 3e 69 73 54 72 61  oint + db->isTra
3db0: 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e  nsactionSavepoin
3dc0: 74 29 20 29 3b 0a 20 20 72 65 74 75 72 6e 20 31  t) );.  return 1
3dd0: 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  ;.}.#endif../*.*
3de0: 2a 20 54 72 61 6e 73 66 65 72 20 65 72 72 6f 72  * Transfer error
3df0: 20 6d 65 73 73 61 67 65 20 74 65 78 74 20 66 72   message text fr
3e00: 6f 6d 20 61 6e 20 73 71 6c 69 74 65 33 5f 76 74  om an sqlite3_vt
3e10: 61 62 2e 7a 45 72 72 4d 73 67 20 28 74 65 78 74  ab.zErrMsg (text
3e20: 20 73 74 6f 72 65 64 0a 2a 2a 20 69 6e 20 6d 65   stored.** in me
3e30: 6d 6f 72 79 20 6f 62 74 61 69 6e 65 64 20 66 72  mory obtained fr
3e40: 6f 6d 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f  om sqlite3_mallo
3e50: 63 29 20 69 6e 74 6f 20 61 20 56 64 62 65 2e 7a  c) into a Vdbe.z
3e60: 45 72 72 4d 73 67 20 28 74 65 78 74 20 73 74 6f  ErrMsg (text sto
3e70: 72 65 64 0a 2a 2a 20 69 6e 20 6d 65 6d 6f 72 79  red.** in memory
3e80: 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 73   obtained from s
3e90: 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 29 2e  qlite3DbMalloc).
3ea0: 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20  .*/.static void 
3eb0: 69 6d 70 6f 72 74 56 74 61 62 45 72 72 4d 73 67  importVtabErrMsg
3ec0: 28 56 64 62 65 20 2a 70 2c 20 73 71 6c 69 74 65  (Vdbe *p, sqlite
3ed0: 33 5f 76 74 61 62 20 2a 70 56 74 61 62 29 7b 0a  3_vtab *pVtab){.
3ee0: 20 20 73 71 6c 69 74 65 33 20 2a 64 62 20 3d 20    sqlite3 *db = 
3ef0: 70 2d 3e 64 62 3b 0a 20 20 73 71 6c 69 74 65 33  p->db;.  sqlite3
3f00: 44 62 46 72 65 65 28 64 62 2c 20 70 2d 3e 7a 45  DbFree(db, p->zE
3f10: 72 72 4d 73 67 29 3b 0a 20 20 70 2d 3e 7a 45 72  rrMsg);.  p->zEr
3f20: 72 4d 73 67 20 3d 20 73 71 6c 69 74 65 33 44 62  rMsg = sqlite3Db
3f30: 53 74 72 44 75 70 28 64 62 2c 20 70 56 74 61 62  StrDup(db, pVtab
3f40: 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 73 71  ->zErrMsg);.  sq
3f50: 6c 69 74 65 33 5f 66 72 65 65 28 70 56 74 61 62  lite3_free(pVtab
3f60: 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 70 56  ->zErrMsg);.  pV
3f70: 74 61 62 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 30  tab->zErrMsg = 0
3f80: 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 45 78 65 63  ;.}.../*.** Exec
3f90: 75 74 65 20 61 73 20 6d 75 63 68 20 6f 66 20 61  ute as much of a
3fa0: 20 56 44 42 45 20 70 72 6f 67 72 61 6d 20 61 73   VDBE program as
3fb0: 20 77 65 20 63 61 6e 20 74 68 65 6e 20 72 65 74   we can then ret
3fc0: 75 72 6e 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74  urn..**.** sqlit
3fd0: 65 33 56 64 62 65 4d 61 6b 65 52 65 61 64 79 28  e3VdbeMakeReady(
3fe0: 29 20 6d 75 73 74 20 62 65 20 63 61 6c 6c 65 64  ) must be called
3ff0: 20 62 65 66 6f 72 65 20 74 68 69 73 20 72 6f 75   before this rou
4000: 74 69 6e 65 20 69 6e 20 6f 72 64 65 72 20 74 6f  tine in order to
4010: 0a 2a 2a 20 63 6c 6f 73 65 20 74 68 65 20 70 72  .** close the pr
4020: 6f 67 72 61 6d 20 77 69 74 68 20 61 20 66 69 6e  ogram with a fin
4030: 61 6c 20 4f 50 5f 48 61 6c 74 20 61 6e 64 20 74  al OP_Halt and t
4040: 6f 20 73 65 74 20 75 70 20 74 68 65 20 63 61 6c  o set up the cal
4050: 6c 62 61 63 6b 73 0a 2a 2a 20 61 6e 64 20 74 68  lbacks.** and th
4060: 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20  e error message 
4070: 70 6f 69 6e 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 57  pointer..**.** W
4080: 68 65 6e 65 76 65 72 20 61 20 72 6f 77 20 6f 72  henever a row or
4090: 20 72 65 73 75 6c 74 20 64 61 74 61 20 69 73 20   result data is 
40a0: 61 76 61 69 6c 61 62 6c 65 2c 20 74 68 69 73 20  available, this 
40b0: 72 6f 75 74 69 6e 65 20 77 69 6c 6c 20 65 69 74  routine will eit
40c0: 68 65 72 0a 2a 2a 20 69 6e 76 6f 6b 65 20 74 68  her.** invoke th
40d0: 65 20 72 65 73 75 6c 74 20 63 61 6c 6c 62 61 63  e result callbac
40e0: 6b 20 28 69 66 20 74 68 65 72 65 20 69 73 20 6f  k (if there is o
40f0: 6e 65 29 20 6f 72 20 72 65 74 75 72 6e 20 77 69  ne) or return wi
4100: 74 68 0a 2a 2a 20 53 51 4c 49 54 45 5f 52 4f 57  th.** SQLITE_ROW
4110: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 61 6e 20 61 74  ..**.** If an at
4120: 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20 74 6f  tempt is made to
4130: 20 6f 70 65 6e 20 61 20 6c 6f 63 6b 65 64 20 64   open a locked d
4140: 61 74 61 62 61 73 65 2c 20 74 68 65 6e 20 74 68  atabase, then th
4150: 69 73 20 72 6f 75 74 69 6e 65 0a 2a 2a 20 77 69  is routine.** wi
4160: 6c 6c 20 65 69 74 68 65 72 20 69 6e 76 6f 6b 65  ll either invoke
4170: 20 74 68 65 20 62 75 73 79 20 63 61 6c 6c 62 61   the busy callba
4180: 63 6b 20 28 69 66 20 74 68 65 72 65 20 69 73 20  ck (if there is 
4190: 6f 6e 65 29 20 6f 72 20 69 74 20 77 69 6c 6c 0a  one) or it will.
41a0: 2a 2a 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45  ** return SQLITE
41b0: 5f 42 55 53 59 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  _BUSY..**.** If 
41c0: 61 6e 20 65 72 72 6f 72 20 6f 63 63 75 72 73 2c  an error occurs,
41d0: 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67   an error messag
41e0: 65 20 69 73 20 77 72 69 74 74 65 6e 20 74 6f 20  e is written to 
41f0: 6d 65 6d 6f 72 79 20 6f 62 74 61 69 6e 65 64 0a  memory obtained.
4200: 2a 2a 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 5f  ** from sqlite3_
4210: 6d 61 6c 6c 6f 63 28 29 20 61 6e 64 20 70 2d 3e  malloc() and p->
4220: 7a 45 72 72 4d 73 67 20 69 73 20 6d 61 64 65 20  zErrMsg is made 
4230: 74 6f 20 70 6f 69 6e 74 20 74 6f 20 74 68 61 74  to point to that
4240: 20 6d 65 6d 6f 72 79 2e 0a 2a 2a 20 54 68 65 20   memory..** The 
4250: 65 72 72 6f 72 20 63 6f 64 65 20 69 73 20 73 74  error code is st
4260: 6f 72 65 64 20 69 6e 20 70 2d 3e 72 63 20 61 6e  ored in p->rc an
4270: 64 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 72  d this routine r
4280: 65 74 75 72 6e 73 20 53 51 4c 49 54 45 5f 45 52  eturns SQLITE_ER
4290: 52 4f 52 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ROR..**.** If th
42a0: 65 20 63 61 6c 6c 62 61 63 6b 20 65 76 65 72 20  e callback ever 
42b0: 72 65 74 75 72 6e 73 20 6e 6f 6e 2d 7a 65 72 6f  returns non-zero
42c0: 2c 20 74 68 65 6e 20 74 68 65 20 70 72 6f 67 72  , then the progr
42d0: 61 6d 20 65 78 69 74 73 0a 2a 2a 20 69 6d 6d 65  am exits.** imme
42e0: 64 69 61 74 65 6c 79 2e 20 20 54 68 65 72 65 20  diately.  There 
42f0: 77 69 6c 6c 20 62 65 20 6e 6f 20 65 72 72 6f 72  will be no error
4300: 20 6d 65 73 73 61 67 65 20 62 75 74 20 74 68 65   message but the
4310: 20 70 2d 3e 72 63 20 66 69 65 6c 64 20 69 73 0a   p->rc field is.
4320: 2a 2a 20 73 65 74 20 74 6f 20 53 51 4c 49 54 45  ** set to SQLITE
4330: 5f 41 42 4f 52 54 20 61 6e 64 20 74 68 69 73 20  _ABORT and this 
4340: 72 6f 75 74 69 6e 65 20 77 69 6c 6c 20 72 65 74  routine will ret
4350: 75 72 6e 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  urn SQLITE_ERROR
4360: 2e 0a 2a 2a 0a 2a 2a 20 41 20 6d 65 6d 6f 72 79  ..**.** A memory
4370: 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 65 72 72 6f   allocation erro
4380: 72 20 63 61 75 73 65 73 20 70 2d 3e 72 63 20 74  r causes p->rc t
4390: 6f 20 62 65 20 73 65 74 20 74 6f 20 53 51 4c 49  o be set to SQLI
43a0: 54 45 5f 4e 4f 4d 45 4d 20 61 6e 64 20 74 68 69  TE_NOMEM and thi
43b0: 73 0a 2a 2a 20 72 6f 75 74 69 6e 65 20 74 6f 20  s.** routine to 
43c0: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 45 52  return SQLITE_ER
43d0: 52 4f 52 2e 0a 2a 2a 0a 2a 2a 20 4f 74 68 65 72  ROR..**.** Other
43e0: 20 66 61 74 61 6c 20 65 72 72 6f 72 73 20 72 65   fatal errors re
43f0: 74 75 72 6e 20 53 51 4c 49 54 45 5f 45 52 52 4f  turn SQLITE_ERRO
4400: 52 2e 0a 2a 2a 0a 2a 2a 20 41 66 74 65 72 20 74  R..**.** After t
4410: 68 69 73 20 72 6f 75 74 69 6e 65 20 68 61 73 20  his routine has 
4420: 66 69 6e 69 73 68 65 64 2c 20 73 71 6c 69 74 65  finished, sqlite
4430: 33 56 64 62 65 46 69 6e 61 6c 69 7a 65 28 29 20  3VdbeFinalize() 
4440: 73 68 6f 75 6c 64 20 62 65 0a 2a 2a 20 75 73 65  should be.** use
4450: 64 20 74 6f 20 63 6c 65 61 6e 20 75 70 20 74 68  d to clean up th
4460: 65 20 6d 65 73 73 20 74 68 61 74 20 77 61 73 20  e mess that was 
4470: 6c 65 66 74 20 62 65 68 69 6e 64 2e 0a 2a 2f 0a  left behind..*/.
4480: 69 6e 74 20 73 71 6c 69 74 65 33 56 64 62 65 45  int sqlite3VdbeE
4490: 78 65 63 28 0a 20 20 56 64 62 65 20 2a 70 20 20  xec(.  Vdbe *p  
44a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
44b0: 20 20 2f 2a 20 54 68 65 20 56 44 42 45 20 2a 2f    /* The VDBE */
44c0: 0a 29 7b 0a 20 20 69 6e 74 20 70 63 3d 30 3b 20  .){.  int pc=0; 
44d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
44e0: 20 2f 2a 20 54 68 65 20 70 72 6f 67 72 61 6d 20   /* The program 
44f0: 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 4f 70 20  counter */.  Op 
4500: 2a 61 4f 70 20 3d 20 70 2d 3e 61 4f 70 3b 20 20  *aOp = p->aOp;  
4510: 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 70 79 20          /* Copy 
4520: 6f 66 20 70 2d 3e 61 4f 70 20 2a 2f 0a 20 20 4f  of p->aOp */.  O
4530: 70 20 2a 70 4f 70 3b 20 20 20 20 20 20 20 20 20  p *pOp;         
4540: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72            /* Cur
4550: 72 65 6e 74 20 6f 70 65 72 61 74 69 6f 6e 20 2a  rent operation *
4560: 2f 0a 20 20 69 6e 74 20 72 63 20 3d 20 53 51 4c  /.  int rc = SQL
4570: 49 54 45 5f 4f 4b 3b 20 20 20 20 20 20 20 20 2f  ITE_OK;        /
4580: 2a 20 56 61 6c 75 65 20 74 6f 20 72 65 74 75 72  * Value to retur
4590: 6e 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a  n */.  sqlite3 *
45a0: 64 62 20 3d 20 70 2d 3e 64 62 3b 20 20 20 20 20  db = p->db;     
45b0: 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73    /* The databas
45c0: 65 20 2a 2f 0a 20 20 75 38 20 72 65 73 65 74 53  e */.  u8 resetS
45d0: 63 68 65 6d 61 4f 6e 46 61 75 6c 74 20 3d 20 30  chemaOnFault = 0
45e0: 3b 20 2f 2a 20 52 65 73 65 74 20 73 63 68 65 6d  ; /* Reset schem
45f0: 61 20 61 66 74 65 72 20 61 6e 20 65 72 72 6f 72  a after an error
4600: 20 69 66 20 70 6f 73 69 74 69 76 65 20 2a 2f 0a   if positive */.
4610: 20 20 75 38 20 65 6e 63 6f 64 69 6e 67 20 3d 20    u8 encoding = 
4620: 45 4e 43 28 64 62 29 3b 20 20 20 20 20 2f 2a 20  ENC(db);     /* 
4630: 54 68 65 20 64 61 74 61 62 61 73 65 20 65 6e 63  The database enc
4640: 6f 64 69 6e 67 20 2a 2f 0a 23 69 66 6e 64 65 66  oding */.#ifndef
4650: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f   SQLITE_OMIT_PRO
4660: 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20  GRESS_CALLBACK. 
4670: 20 69 6e 74 20 63 68 65 63 6b 50 72 6f 67 72 65   int checkProgre
4680: 73 73 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ss;         /* T
4690: 72 75 65 20 69 66 20 70 72 6f 67 72 65 73 73 20  rue if progress 
46a0: 63 61 6c 6c 62 61 63 6b 73 20 61 72 65 20 65 6e  callbacks are en
46b0: 61 62 6c 65 64 20 2a 2f 0a 20 20 69 6e 74 20 6e  abled */.  int n
46c0: 50 72 6f 67 72 65 73 73 4f 70 73 20 3d 20 30 3b  ProgressOps = 0;
46d0: 20 20 20 20 20 20 2f 2a 20 4f 70 63 6f 64 65 73        /* Opcodes
46e0: 20 65 78 65 63 75 74 65 64 20 73 69 6e 63 65 20   executed since 
46f0: 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63  progress callbac
4700: 6b 2e 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 4d  k. */.#endif.  M
4710: 65 6d 20 2a 61 4d 65 6d 20 3d 20 70 2d 3e 61 4d  em *aMem = p->aM
4720: 65 6d 3b 20 20 20 20 20 20 20 2f 2a 20 43 6f 70  em;       /* Cop
4730: 79 20 6f 66 20 70 2d 3e 61 4d 65 6d 20 2a 2f 0a  y of p->aMem */.
4740: 20 20 4d 65 6d 20 2a 70 49 6e 31 20 3d 20 30 3b    Mem *pIn1 = 0;
4750: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
4760: 31 73 74 20 69 6e 70 75 74 20 6f 70 65 72 61 6e  1st input operan
4770: 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e 32  d */.  Mem *pIn2
4780: 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 20   = 0;           
4790: 20 20 2f 2a 20 32 6e 64 20 69 6e 70 75 74 20 6f    /* 2nd input o
47a0: 70 65 72 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20  perand */.  Mem 
47b0: 2a 70 49 6e 33 20 3d 20 30 3b 20 20 20 20 20 20  *pIn3 = 0;      
47c0: 20 20 20 20 20 20 20 2f 2a 20 33 72 64 20 69 6e         /* 3rd in
47d0: 70 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20  put operand */. 
47e0: 20 4d 65 6d 20 2a 70 4f 75 74 20 3d 20 30 3b 20   Mem *pOut = 0; 
47f0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
4800: 75 74 70 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f  utput operand */
4810: 0a 20 20 69 6e 74 20 69 43 6f 6d 70 61 72 65 20  .  int iCompare 
4820: 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  = 0;          /*
4830: 20 52 65 73 75 6c 74 20 6f 66 20 6c 61 73 74 20   Result of last 
4840: 4f 50 5f 43 6f 6d 70 61 72 65 20 6f 70 65 72 61  OP_Compare opera
4850: 74 69 6f 6e 20 2a 2f 0a 20 20 69 6e 74 20 2a 61  tion */.  int *a
4860: 50 65 72 6d 75 74 65 20 3d 20 30 3b 20 20 20 20  Permute = 0;    
4870: 20 20 20 20 20 2f 2a 20 50 65 72 6d 75 74 61 74       /* Permutat
4880: 69 6f 6e 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 66  ion of columns f
4890: 6f 72 20 4f 50 5f 43 6f 6d 70 61 72 65 20 2a 2f  or OP_Compare */
48a0: 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50 52 4f  .#ifdef VDBE_PRO
48b0: 46 49 4c 45 0a 20 20 75 36 34 20 73 74 61 72 74  FILE.  u64 start
48c0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
48d0: 20 20 2f 2a 20 43 50 55 20 63 6c 6f 63 6b 20 63    /* CPU clock c
48e0: 6f 75 6e 74 20 61 74 20 73 74 61 72 74 20 6f 66  ount at start of
48f0: 20 6f 70 63 6f 64 65 20 2a 2f 0a 20 20 69 6e 74   opcode */.  int
4900: 20 6f 72 69 67 50 63 3b 20 20 20 20 20 20 20 20   origPc;        
4910: 20 20 20 20 20 20 20 20 2f 2a 20 50 72 6f 67 72          /* Progr
4920: 61 6d 20 63 6f 75 6e 74 65 72 20 61 74 20 73 74  am counter at st
4930: 61 72 74 20 6f 66 20 6f 70 63 6f 64 65 20 2a 2f  art of opcode */
4940: 0a 23 65 6e 64 69 66 0a 20 20 2f 2a 2a 2a 20 49  .#endif.  /*** I
4950: 4e 53 45 52 54 20 53 54 41 43 4b 20 55 4e 49 4f  NSERT STACK UNIO
4960: 4e 20 48 45 52 45 20 2a 2a 2a 2f 0a 0a 20 20 61  N HERE ***/..  a
4970: 73 73 65 72 74 28 20 70 2d 3e 6d 61 67 69 63 3d  ssert( p->magic=
4980: 3d 56 44 42 45 5f 4d 41 47 49 43 5f 52 55 4e 20  =VDBE_MAGIC_RUN 
4990: 29 3b 20 20 2f 2a 20 73 71 6c 69 74 65 33 5f 73  );  /* sqlite3_s
49a0: 74 65 70 28 29 20 76 65 72 69 66 69 65 73 20 74  tep() verifies t
49b0: 68 69 73 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  his */.  sqlite3
49c0: 56 64 62 65 45 6e 74 65 72 28 70 29 3b 0a 20 20  VdbeEnter(p);.  
49d0: 69 66 28 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54  if( p->rc==SQLIT
49e0: 45 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20 20 2f  E_NOMEM ){.    /
49f0: 2a 20 54 68 69 73 20 68 61 70 70 65 6e 73 20 69  * This happens i
4a00: 66 20 61 20 6d 61 6c 6c 6f 63 28 29 20 69 6e 73  f a malloc() ins
4a10: 69 64 65 20 61 20 63 61 6c 6c 20 74 6f 20 73 71  ide a call to sq
4a20: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78  lite3_column_tex
4a30: 74 28 29 20 6f 72 0a 20 20 20 20 2a 2a 20 73 71  t() or.    ** sq
4a40: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78  lite3_column_tex
4a50: 74 31 36 28 29 20 66 61 69 6c 65 64 2e 20 20 2a  t16() failed.  *
4a60: 2f 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65  /.    goto no_me
4a70: 6d 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28  m;.  }.  assert(
4a80: 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 4f   p->rc==SQLITE_O
4a90: 4b 20 7c 7c 20 70 2d 3e 72 63 3d 3d 53 51 4c 49  K || p->rc==SQLI
4aa0: 54 45 5f 42 55 53 59 20 7c 7c 20 28 28 70 2d 3e  TE_BUSY || ((p->
4ab0: 72 63 26 30 78 46 46 29 20 3d 3d 20 53 51 4c 49  rc&0xFF) == SQLI
4ac0: 54 45 5f 4c 4f 43 4b 45 44 29 29 3b 0a 20 20 70  TE_LOCKED));.  p
4ad0: 2d 3e 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b  ->rc = SQLITE_OK
4ae0: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 65  ;.  assert( p->e
4af0: 78 70 6c 61 69 6e 3d 3d 30 20 29 3b 0a 20 20 70  xplain==0 );.  p
4b00: 2d 3e 70 52 65 73 75 6c 74 53 65 74 20 3d 20 30  ->pResultSet = 0
4b10: 3b 0a 20 20 64 62 2d 3e 62 75 73 79 48 61 6e 64  ;.  db->busyHand
4b20: 6c 65 72 2e 6e 42 75 73 79 20 3d 20 30 3b 0a 20  ler.nBusy = 0;. 
4b30: 20 43 48 45 43 4b 5f 46 4f 52 5f 49 4e 54 45 52   CHECK_FOR_INTER
4b40: 52 55 50 54 3b 0a 20 20 73 71 6c 69 74 65 33 56  RUPT;.  sqlite3V
4b50: 64 62 65 49 4f 54 72 61 63 65 53 71 6c 28 70 29  dbeIOTraceSql(p)
4b60: 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
4b70: 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f 43  _OMIT_PROGRESS_C
4b80: 41 4c 4c 42 41 43 4b 0a 20 20 63 68 65 63 6b 50  ALLBACK.  checkP
4b90: 72 6f 67 72 65 73 73 20 3d 20 64 62 2d 3e 78 50  rogress = db->xP
4ba0: 72 6f 67 72 65 73 73 21 3d 30 3b 0a 23 65 6e 64  rogress!=0;.#end
4bb0: 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  if.#ifdef SQLITE
4bc0: 5f 44 45 42 55 47 0a 20 20 73 71 6c 69 74 65 33  _DEBUG.  sqlite3
4bd0: 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f  BeginBenignMallo
4be0: 63 28 29 3b 0a 20 20 69 66 28 20 70 2d 3e 70 63  c();.  if( p->pc
4bf0: 3d 3d 30 20 20 26 26 20 28 70 2d 3e 64 62 2d 3e  ==0  && (p->db->
4c00: 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 56  flags & SQLITE_V
4c10: 64 62 65 4c 69 73 74 69 6e 67 29 21 3d 30 20 29  dbeListing)!=0 )
4c20: 7b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20  {.    int i;.   
4c30: 20 70 72 69 6e 74 66 28 22 56 44 42 45 20 50 72   printf("VDBE Pr
4c40: 6f 67 72 61 6d 20 4c 69 73 74 69 6e 67 3a 5c 6e  ogram Listing:\n
4c50: 22 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  ");.    sqlite3V
4c60: 64 62 65 50 72 69 6e 74 53 71 6c 28 70 29 3b 0a  dbePrintSql(p);.
4c70: 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70      for(i=0; i<p
4c80: 2d 3e 6e 4f 70 3b 20 69 2b 2b 29 7b 0a 20 20 20  ->nOp; i++){.   
4c90: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 50 72     sqlite3VdbePr
4ca0: 69 6e 74 4f 70 28 73 74 64 6f 75 74 2c 20 69 2c  intOp(stdout, i,
4cb0: 20 26 61 4f 70 5b 69 5d 29 3b 0a 20 20 20 20 7d   &aOp[i]);.    }
4cc0: 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 45 6e  .  }.  sqlite3En
4cd0: 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 3b  dBenignMalloc();
4ce0: 0a 23 65 6e 64 69 66 0a 20 20 66 6f 72 28 70 63  .#endif.  for(pc
4cf0: 3d 70 2d 3e 70 63 3b 20 72 63 3d 3d 53 51 4c 49  =p->pc; rc==SQLI
4d00: 54 45 5f 4f 4b 3b 20 70 63 2b 2b 29 7b 0a 20 20  TE_OK; pc++){.  
4d10: 20 20 61 73 73 65 72 74 28 20 70 63 3e 3d 30 20    assert( pc>=0 
4d20: 26 26 20 70 63 3c 70 2d 3e 6e 4f 70 20 29 3b 0a  && pc<p->nOp );.
4d30: 20 20 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c 6c      if( db->mall
4d40: 6f 63 46 61 69 6c 65 64 20 29 20 67 6f 74 6f 20  ocFailed ) goto 
4d50: 6e 6f 5f 6d 65 6d 3b 0a 23 69 66 64 65 66 20 56  no_mem;.#ifdef V
4d60: 44 42 45 5f 50 52 4f 46 49 4c 45 0a 20 20 20 20  DBE_PROFILE.    
4d70: 6f 72 69 67 50 63 20 3d 20 70 63 3b 0a 20 20 20  origPc = pc;.   
4d80: 20 73 74 61 72 74 20 3d 20 73 71 6c 69 74 65 33   start = sqlite3
4d90: 48 77 74 69 6d 65 28 29 3b 0a 23 65 6e 64 69 66  Hwtime();.#endif
4da0: 0a 20 20 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b  .    pOp = &aOp[
4db0: 70 63 5d 3b 0a 0a 20 20 20 20 2f 2a 20 4f 6e 6c  pc];..    /* Onl
4dc0: 79 20 61 6c 6c 6f 77 20 74 72 61 63 69 6e 67 20  y allow tracing 
4dd0: 69 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20  if SQLITE_DEBUG 
4de0: 69 73 20 64 65 66 69 6e 65 64 2e 0a 20 20 20 20  is defined..    
4df0: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
4e00: 5f 44 45 42 55 47 0a 20 20 20 20 69 66 28 20 70  _DEBUG.    if( p
4e10: 2d 3e 74 72 61 63 65 20 29 7b 0a 20 20 20 20 20  ->trace ){.     
4e20: 20 69 66 28 20 70 63 3d 3d 30 20 29 7b 0a 20 20   if( pc==0 ){.  
4e30: 20 20 20 20 20 20 70 72 69 6e 74 66 28 22 56 44        printf("VD
4e40: 42 45 20 45 78 65 63 75 74 69 6f 6e 20 54 72 61  BE Execution Tra
4e50: 63 65 3a 5c 6e 22 29 3b 0a 20 20 20 20 20 20 20  ce:\n");.       
4e60: 20 73 71 6c 69 74 65 33 56 64 62 65 50 72 69 6e   sqlite3VdbePrin
4e70: 74 53 71 6c 28 70 29 3b 0a 20 20 20 20 20 20 7d  tSql(p);.      }
4e80: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
4e90: 62 65 50 72 69 6e 74 4f 70 28 70 2d 3e 74 72 61  bePrintOp(p->tra
4ea0: 63 65 2c 20 70 63 2c 20 70 4f 70 29 3b 0a 20 20  ce, pc, pOp);.  
4eb0: 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 20    }.#endif.     
4ec0: 20 0a 0a 20 20 20 20 2f 2a 20 43 68 65 63 6b 20   ..    /* Check 
4ed0: 74 6f 20 73 65 65 20 69 66 20 77 65 20 6e 65 65  to see if we nee
4ee0: 64 20 74 6f 20 73 69 6d 75 6c 61 74 65 20 61 6e  d to simulate an
4ef0: 20 69 6e 74 65 72 72 75 70 74 2e 20 20 54 68 69   interrupt.  Thi
4f00: 73 20 6f 6e 6c 79 20 68 61 70 70 65 6e 73 0a 20  s only happens. 
4f10: 20 20 20 2a 2a 20 69 66 20 77 65 20 68 61 76 65     ** if we have
4f20: 20 61 20 73 70 65 63 69 61 6c 20 74 65 73 74 20   a special test 
4f30: 62 75 69 6c 64 2e 0a 20 20 20 20 2a 2f 0a 23 69  build..    */.#i
4f40: 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54  fdef SQLITE_TEST
4f50: 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33  .    if( sqlite3
4f60: 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74  _interrupt_count
4f70: 3e 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  >0 ){.      sqli
4f80: 74 65 33 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f  te3_interrupt_co
4f90: 75 6e 74 2d 2d 3b 0a 20 20 20 20 20 20 69 66 28  unt--;.      if(
4fa0: 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75   sqlite3_interru
4fb0: 70 74 5f 63 6f 75 6e 74 3d 3d 30 20 29 7b 0a 20  pt_count==0 ){. 
4fc0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 69         sqlite3_i
4fd0: 6e 74 65 72 72 75 70 74 28 64 62 29 3b 0a 20 20  nterrupt(db);.  
4fe0: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 23 65 6e 64      }.    }.#end
4ff0: 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  if..#ifndef SQLI
5000: 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53  TE_OMIT_PROGRESS
5010: 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 20 20 2f 2a  _CALLBACK.    /*
5020: 20 43 61 6c 6c 20 74 68 65 20 70 72 6f 67 72 65   Call the progre
5030: 73 73 20 63 61 6c 6c 62 61 63 6b 20 69 66 20 69  ss callback if i
5040: 74 20 69 73 20 63 6f 6e 66 69 67 75 72 65 64 20  t is configured 
5050: 61 6e 64 20 74 68 65 20 72 65 71 75 69 72 65 64  and the required
5060: 20 6e 75 6d 62 65 72 0a 20 20 20 20 2a 2a 20 6f   number.    ** o
5070: 66 20 56 44 42 45 20 6f 70 73 20 68 61 76 65 20  f VDBE ops have 
5080: 62 65 65 6e 20 65 78 65 63 75 74 65 64 20 28 65  been executed (e
5090: 69 74 68 65 72 20 73 69 6e 63 65 20 74 68 69 73  ither since this
50a0: 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 0a 20   invocation of. 
50b0: 20 20 20 2a 2a 20 73 71 6c 69 74 65 33 56 64 62     ** sqlite3Vdb
50c0: 65 45 78 65 63 28 29 20 6f 72 20 73 69 6e 63 65  eExec() or since
50d0: 20 6c 61 73 74 20 74 69 6d 65 20 74 68 65 20 70   last time the p
50e0: 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b  rogress callback
50f0: 20 77 61 73 20 63 61 6c 6c 65 64 29 2e 0a 20 20   was called)..  
5100: 20 20 2a 2a 20 49 66 20 74 68 65 20 70 72 6f 67    ** If the prog
5110: 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 72 65  ress callback re
5120: 74 75 72 6e 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20  turns non-zero, 
5130: 65 78 69 74 20 74 68 65 20 76 69 72 74 75 61 6c  exit the virtual
5140: 20 6d 61 63 68 69 6e 65 20 77 69 74 68 0a 20 20   machine with.  
5150: 20 20 2a 2a 20 61 20 72 65 74 75 72 6e 20 63 6f    ** a return co
5160: 64 65 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 2e  de SQLITE_ABORT.
5170: 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20  .    */.    if( 
5180: 63 68 65 63 6b 50 72 6f 67 72 65 73 73 20 29 7b  checkProgress ){
5190: 0a 20 20 20 20 20 20 69 66 28 20 64 62 2d 3e 6e  .      if( db->n
51a0: 50 72 6f 67 72 65 73 73 4f 70 73 3d 3d 6e 50 72  ProgressOps==nPr
51b0: 6f 67 72 65 73 73 4f 70 73 20 29 7b 0a 20 20 20  ogressOps ){.   
51c0: 20 20 20 20 20 69 6e 74 20 70 72 63 3b 0a 20 20       int prc;.  
51d0: 20 20 20 20 20 20 70 72 63 20 3d 20 64 62 2d 3e        prc = db->
51e0: 78 50 72 6f 67 72 65 73 73 28 64 62 2d 3e 70 50  xProgress(db->pP
51f0: 72 6f 67 72 65 73 73 41 72 67 29 3b 0a 20 20 20  rogressArg);.   
5200: 20 20 20 20 20 69 66 28 20 70 72 63 21 3d 30 20       if( prc!=0 
5210: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 72 63 20  ){.          rc 
5220: 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45 52 52 55  = SQLITE_INTERRU
5230: 50 54 3b 0a 20 20 20 20 20 20 20 20 20 20 67 6f  PT;.          go
5240: 74 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f 68 61  to vdbe_error_ha
5250: 6c 74 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  lt;.        }.  
5260: 20 20 20 20 20 20 6e 50 72 6f 67 72 65 73 73 4f        nProgressO
5270: 70 73 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a  ps = 0;.      }.
5280: 20 20 20 20 20 20 6e 50 72 6f 67 72 65 73 73 4f        nProgressO
5290: 70 73 2b 2b 3b 0a 20 20 20 20 7d 0a 23 65 6e 64  ps++;.    }.#end
52a0: 69 66 0a 0a 20 20 20 20 2f 2a 20 4f 6e 20 61 6e  if..    /* On an
52b0: 79 20 6f 70 63 6f 64 65 20 77 69 74 68 20 74 68  y opcode with th
52c0: 65 20 22 6f 75 74 32 2d 70 72 65 72 65 6c 61 73  e "out2-prerelas
52d0: 65 22 20 74 61 67 2c 20 66 72 65 65 20 61 6e 79  e" tag, free any
52e0: 0a 20 20 20 20 2a 2a 20 65 78 74 65 72 6e 61 6c  .    ** external
52f0: 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 6f 75 74   allocations out
5300: 20 6f 66 20 6d 65 6d 5b 70 32 5d 20 61 6e 64 20   of mem[p2] and 
5310: 73 65 74 20 6d 65 6d 5b 70 32 5d 20 74 6f 20 62  set mem[p2] to b
5320: 65 0a 20 20 20 20 2a 2a 20 61 6e 20 75 6e 64 65  e.    ** an unde
5330: 66 69 6e 65 64 20 69 6e 74 65 67 65 72 2e 20 20  fined integer.  
5340: 4f 70 63 6f 64 65 73 20 77 69 6c 6c 20 65 69 74  Opcodes will eit
5350: 68 65 72 20 66 69 6c 6c 20 69 6e 20 74 68 65 20  her fill in the 
5360: 69 6e 74 65 67 65 72 0a 20 20 20 20 2a 2a 20 76  integer.    ** v
5370: 61 6c 75 65 20 6f 72 20 63 6f 6e 76 65 72 74 20  alue or convert 
5380: 6d 65 6d 5b 70 32 5d 20 74 6f 20 61 20 64 69 66  mem[p2] to a dif
5390: 66 65 72 65 6e 74 20 74 79 70 65 2e 0a 20 20 20  ferent type..   
53a0: 20 2a 2f 0a 20 20 20 20 61 73 73 65 72 74 28 20   */.    assert( 
53b0: 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 3d 3d 73 71  pOp->opflags==sq
53c0: 6c 69 74 65 33 4f 70 63 6f 64 65 50 72 6f 70 65  lite3OpcodePrope
53d0: 72 74 79 5b 70 4f 70 2d 3e 6f 70 63 6f 64 65 5d  rty[pOp->opcode]
53e0: 20 29 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d   );.    if( pOp-
53f0: 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 47  >opflags & OPFLG
5400: 5f 4f 55 54 32 5f 50 52 45 52 45 4c 45 41 53 45  _OUT2_PRERELEASE
5410: 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74   ){.      assert
5420: 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20  ( pOp->p2>0 );. 
5430: 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
5440: 2d 3e 70 32 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b  ->p2<=p->nMem );
5450: 0a 20 20 20 20 20 20 70 4f 75 74 20 3d 20 26 61  .      pOut = &a
5460: 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
5470: 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68      memAboutToCh
5480: 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 20  ange(p, pOut);. 
5490: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
54a0: 4d 65 6d 52 65 6c 65 61 73 65 45 78 74 65 72 6e  MemReleaseExtern
54b0: 61 6c 28 70 4f 75 74 29 3b 0a 20 20 20 20 20 20  al(pOut);.      
54c0: 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pOut->flags = ME
54d0: 4d 5f 49 6e 74 3b 0a 20 20 20 20 7d 0a 0a 20 20  M_Int;.    }..  
54e0: 20 20 2f 2a 20 53 61 6e 69 74 79 20 63 68 65 63    /* Sanity chec
54f0: 6b 69 6e 67 20 6f 6e 20 6f 74 68 65 72 20 6f 70  king on other op
5500: 65 72 61 6e 64 73 20 2a 2f 0a 23 69 66 64 65 66  erands */.#ifdef
5510: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
5520: 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70 66 6c    if( (pOp->opfl
5530: 61 67 73 20 26 20 4f 50 46 4c 47 5f 49 4e 31 29  ags & OPFLG_IN1)
5540: 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73  !=0 ){.      ass
5550: 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 29  ert( pOp->p1>0 )
5560: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
5570: 70 4f 70 2d 3e 70 31 3c 3d 70 2d 3e 6e 4d 65 6d  pOp->p1<=p->nMem
5580: 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
5590: 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d  ( memIsValid(&aM
55a0: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 29 20 29 3b 0a  em[pOp->p1]) );.
55b0: 20 20 20 20 20 20 52 45 47 49 53 54 45 52 5f 54        REGISTER_T
55c0: 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20 26 61  RACE(pOp->p1, &a
55d0: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 29 3b 0a 20  Mem[pOp->p1]);. 
55e0: 20 20 20 7d 0a 20 20 20 20 69 66 28 20 28 70 4f     }.    if( (pO
55f0: 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50 46  p->opflags & OPF
5600: 4c 47 5f 49 4e 32 29 21 3d 30 20 29 7b 0a 20 20  LG_IN2)!=0 ){.  
5610: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
5620: 3e 70 32 3e 30 20 29 3b 0a 20 20 20 20 20 20 61  >p2>0 );.      a
5630: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d  ssert( pOp->p2<=
5640: 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20  p->nMem );.     
5650: 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
5660: 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  lid(&aMem[pOp->p
5670: 32 5d 29 20 29 3b 0a 20 20 20 20 20 20 52 45 47  2]) );.      REG
5680: 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
5690: 3e 70 32 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  >p2, &aMem[pOp->
56a0: 70 32 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  p2]);.    }.    
56b0: 69 66 28 20 28 70 4f 70 2d 3e 6f 70 66 6c 61 67  if( (pOp->opflag
56c0: 73 20 26 20 4f 50 46 4c 47 5f 49 4e 33 29 21 3d  s & OPFLG_IN3)!=
56d0: 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72  0 ){.      asser
56e0: 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a  t( pOp->p3>0 );.
56f0: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
5700: 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29  p->p3<=p->nMem )
5710: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
5720: 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d  memIsValid(&aMem
5730: 5b 70 4f 70 2d 3e 70 33 5d 29 20 29 3b 0a 20 20  [pOp->p3]) );.  
5740: 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41      REGISTER_TRA
5750: 43 45 28 70 4f 70 2d 3e 70 33 2c 20 26 61 4d 65  CE(pOp->p3, &aMe
5760: 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20 20 20  m[pOp->p3]);.   
5770: 20 7d 0a 20 20 20 20 69 66 28 20 28 70 4f 70 2d   }.    if( (pOp-
5780: 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 47  >opflags & OPFLG
5790: 5f 4f 55 54 32 29 21 3d 30 20 29 7b 0a 20 20 20  _OUT2)!=0 ){.   
57a0: 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
57b0: 70 32 3e 30 20 29 3b 0a 20 20 20 20 20 20 61 73  p2>0 );.      as
57c0: 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 70  sert( pOp->p2<=p
57d0: 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20  ->nMem );.      
57e0: 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
57f0: 28 70 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  (p, &aMem[pOp->p
5800: 32 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  2]);.    }.    i
5810: 66 28 20 28 70 4f 70 2d 3e 6f 70 66 6c 61 67 73  f( (pOp->opflags
5820: 20 26 20 4f 50 46 4c 47 5f 4f 55 54 33 29 21 3d   & OPFLG_OUT3)!=
5830: 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72  0 ){.      asser
5840: 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a  t( pOp->p3>0 );.
5850: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
5860: 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29  p->p3<=p->nMem )
5870: 3b 0a 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74  ;.      memAbout
5880: 54 6f 43 68 61 6e 67 65 28 70 2c 20 26 61 4d 65  ToChange(p, &aMe
5890: 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20 20 20  m[pOp->p3]);.   
58a0: 20 7d 0a 23 65 6e 64 69 66 0a 20 20 0a 20 20 20   }.#endif.  .   
58b0: 20 73 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70   switch( pOp->op
58c0: 63 6f 64 65 20 29 7b 0a 0a 2f 2a 2a 2a 2a 2a 2a  code ){../******
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 2a 2a 2a 2a 2a  ****************
5900: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5910: 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 57 68 61 74 20  *******.** What 
5920: 66 6f 6c 6c 6f 77 73 20 69 73 20 61 20 6d 61 73  follows is a mas
5930: 73 69 76 65 20 73 77 69 74 63 68 20 73 74 61 74  sive switch stat
5940: 65 6d 65 6e 74 20 77 68 65 72 65 20 65 61 63 68  ement where each
5950: 20 63 61 73 65 20 69 6d 70 6c 65 6d 65 6e 74 73   case implements
5960: 20 61 0a 2a 2a 20 73 65 70 61 72 61 74 65 20 69   a.** separate i
5970: 6e 73 74 72 75 63 74 69 6f 6e 20 69 6e 20 74 68  nstruction in th
5980: 65 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e  e virtual machin
5990: 65 2e 20 20 49 66 20 77 65 20 66 6f 6c 6c 6f 77  e.  If we follow
59a0: 20 74 68 65 20 75 73 75 61 6c 0a 2a 2a 20 69 6e   the usual.** in
59b0: 64 65 6e 74 61 74 69 6f 6e 20 63 6f 6e 76 65 6e  dentation conven
59c0: 74 69 6f 6e 73 2c 20 65 61 63 68 20 63 61 73 65  tions, each case
59d0: 20 73 68 6f 75 6c 64 20 62 65 20 69 6e 64 65 6e   should be inden
59e0: 74 65 64 20 62 79 20 36 20 73 70 61 63 65 73 2e  ted by 6 spaces.
59f0: 20 20 42 75 74 0a 2a 2a 20 74 68 61 74 20 69 73    But.** that is
5a00: 20 61 20 6c 6f 74 20 6f 66 20 77 61 73 74 65 64   a lot of wasted
5a10: 20 73 70 61 63 65 20 6f 6e 20 74 68 65 20 6c 65   space on the le
5a20: 66 74 20 6d 61 72 67 69 6e 2e 20 20 53 6f 20 74  ft margin.  So t
5a30: 68 65 20 63 6f 64 65 20 77 69 74 68 69 6e 0a 2a  he code within.*
5a40: 2a 20 74 68 65 20 73 77 69 74 63 68 20 73 74 61  * the switch sta
5a50: 74 65 6d 65 6e 74 20 77 69 6c 6c 20 62 72 65 61  tement will brea
5a60: 6b 20 77 69 74 68 20 63 6f 6e 76 65 6e 74 69 6f  k with conventio
5a70: 6e 20 61 6e 64 20 62 65 20 66 6c 75 73 68 2d 6c  n and be flush-l
5a80: 65 66 74 2e 20 41 6e 6f 74 68 65 72 0a 2a 2a 20  eft. Another.** 
5a90: 62 69 67 20 63 6f 6d 6d 65 6e 74 20 28 73 69 6d  big comment (sim
5aa0: 69 6c 61 72 20 74 6f 20 74 68 69 73 20 6f 6e 65  ilar to this one
5ab0: 29 20 77 69 6c 6c 20 6d 61 72 6b 20 74 68 65 20  ) will mark the 
5ac0: 70 6f 69 6e 74 20 69 6e 20 74 68 65 20 63 6f 64  point in the cod
5ad0: 65 20 77 68 65 72 65 0a 2a 2a 20 77 65 20 74 72  e where.** we tr
5ae0: 61 6e 73 69 74 69 6f 6e 20 62 61 63 6b 20 74 6f  ansition back to
5af0: 20 6e 6f 72 6d 61 6c 20 69 6e 64 65 6e 74 61 74   normal indentat
5b00: 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 66  ion..**.** The f
5b10: 6f 72 6d 61 74 74 69 6e 67 20 6f 66 20 65 61 63  ormatting of eac
5b20: 68 20 63 61 73 65 20 69 73 20 69 6d 70 6f 72 74  h case is import
5b30: 61 6e 74 2e 20 20 54 68 65 20 6d 61 6b 65 66 69  ant.  The makefi
5b40: 6c 65 20 66 6f 72 20 53 51 4c 69 74 65 0a 2a 2a  le for SQLite.**
5b50: 20 67 65 6e 65 72 61 74 65 73 20 74 77 6f 20 43   generates two C
5b60: 20 66 69 6c 65 73 20 22 6f 70 63 6f 64 65 73 2e   files "opcodes.
5b70: 68 22 20 61 6e 64 20 22 6f 70 63 6f 64 65 73 2e  h" and "opcodes.
5b80: 63 22 20 62 79 20 73 63 61 6e 6e 69 6e 67 20 74  c" by scanning t
5b90: 68 69 73 0a 2a 2a 20 66 69 6c 65 20 6c 6f 6f 6b  his.** file look
5ba0: 69 6e 67 20 66 6f 72 20 6c 69 6e 65 73 20 74 68  ing for lines th
5bb0: 61 74 20 62 65 67 69 6e 20 77 69 74 68 20 22 63  at begin with "c
5bc0: 61 73 65 20 4f 50 5f 22 2e 20 20 54 68 65 20 6f  ase OP_".  The o
5bd0: 70 63 6f 64 65 73 2e 68 20 66 69 6c 65 73 0a 2a  pcodes.h files.*
5be0: 2a 20 77 69 6c 6c 20 62 65 20 66 69 6c 6c 65 64  * will be filled
5bf0: 20 77 69 74 68 20 23 64 65 66 69 6e 65 73 20 74   with #defines t
5c00: 68 61 74 20 67 69 76 65 20 75 6e 69 71 75 65 20  hat give unique 
5c10: 69 6e 74 65 67 65 72 20 76 61 6c 75 65 73 20 74  integer values t
5c20: 6f 20 65 61 63 68 0a 2a 2a 20 6f 70 63 6f 64 65  o each.** opcode
5c30: 20 61 6e 64 20 74 68 65 20 6f 70 63 6f 64 65 73   and the opcodes
5c40: 2e 63 20 66 69 6c 65 20 69 73 20 66 69 6c 6c 65  .c file is fille
5c50: 64 20 77 69 74 68 20 61 6e 20 61 72 72 61 79 20  d with an array 
5c60: 6f 66 20 73 74 72 69 6e 67 73 20 77 68 65 72 65  of strings where
5c70: 0a 2a 2a 20 65 61 63 68 20 73 74 72 69 6e 67 20  .** each string 
5c80: 69 73 20 74 68 65 20 73 79 6d 62 6f 6c 69 63 20  is the symbolic 
5c90: 6e 61 6d 65 20 66 6f 72 20 74 68 65 20 63 6f 72  name for the cor
5ca0: 72 65 73 70 6f 6e 64 69 6e 67 20 6f 70 63 6f 64  responding opcod
5cb0: 65 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 63 61  e.  If the.** ca
5cc0: 73 65 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  se statement is 
5cd0: 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20 63 6f  followed by a co
5ce0: 6d 6d 65 6e 74 20 6f 66 20 74 68 65 20 66 6f 72  mment of the for
5cf0: 6d 20 22 2f 23 20 73 61 6d 65 20 61 73 20 2e 2e  m "/# same as ..
5d00: 2e 20 23 2f 22 0a 2a 2a 20 74 68 61 74 20 63 6f  . #/".** that co
5d10: 6d 6d 65 6e 74 20 69 73 20 75 73 65 64 20 74 6f  mment is used to
5d20: 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20 70   determine the p
5d30: 61 72 74 69 63 75 6c 61 72 20 76 61 6c 75 65 20  articular value 
5d40: 6f 66 20 74 68 65 20 6f 70 63 6f 64 65 2e 0a 2a  of the opcode..*
5d50: 2a 0a 2a 2a 20 4f 74 68 65 72 20 6b 65 79 77 6f  *.** Other keywo
5d60: 72 64 73 20 69 6e 20 74 68 65 20 63 6f 6d 6d 65  rds in the comme
5d70: 6e 74 20 74 68 61 74 20 66 6f 6c 6c 6f 77 73 20  nt that follows 
5d80: 65 61 63 68 20 63 61 73 65 20 61 72 65 20 75 73  each case are us
5d90: 65 64 20 74 6f 0a 2a 2a 20 63 6f 6e 73 74 72 75  ed to.** constru
5da0: 63 74 20 74 68 65 20 4f 50 46 4c 47 5f 49 4e 49  ct the OPFLG_INI
5db0: 54 49 41 4c 49 5a 45 52 20 76 61 6c 75 65 20 74  TIALIZER value t
5dc0: 68 61 74 20 69 6e 69 74 69 61 6c 69 7a 65 73 20  hat initializes 
5dd0: 6f 70 63 6f 64 65 50 72 6f 70 65 72 74 79 5b 5d  opcodeProperty[]
5de0: 2e 0a 2a 2a 20 4b 65 79 77 6f 72 64 73 20 69 6e  ..** Keywords in
5df0: 63 6c 75 64 65 3a 20 69 6e 31 2c 20 69 6e 32 2c  clude: in1, in2,
5e00: 20 69 6e 33 2c 20 6f 75 74 32 5f 70 72 65 72 65   in3, out2_prere
5e10: 6c 65 61 73 65 2c 20 6f 75 74 32 2c 20 6f 75 74  lease, out2, out
5e20: 33 2e 20 20 53 65 65 0a 2a 2a 20 74 68 65 20 6d  3.  See.** the m
5e30: 6b 6f 70 63 6f 64 65 68 2e 61 77 6b 20 73 63 72  kopcodeh.awk scr
5e40: 69 70 74 20 66 6f 72 20 61 64 64 69 74 69 6f 6e  ipt for addition
5e50: 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a  al information..
5e60: 2a 2a 0a 2a 2a 20 44 6f 63 75 6d 65 6e 74 61 74  **.** Documentat
5e70: 69 6f 6e 20 61 62 6f 75 74 20 56 44 42 45 20 6f  ion about VDBE o
5e80: 70 63 6f 64 65 73 20 69 73 20 67 65 6e 65 72 61  pcodes is genera
5e90: 74 65 64 20 62 79 20 73 63 61 6e 6e 69 6e 67 20  ted by scanning 
5ea0: 74 68 69 73 20 66 69 6c 65 0a 2a 2a 20 66 6f 72  this file.** for
5eb0: 20 6c 69 6e 65 73 20 6f 66 20 74 68 61 74 20 63   lines of that c
5ec0: 6f 6e 74 61 69 6e 20 22 4f 70 63 6f 64 65 3a 22  ontain "Opcode:"
5ed0: 2e 20 20 54 68 61 74 20 6c 69 6e 65 20 61 6e 64  .  That line and
5ee0: 20 61 6c 6c 20 73 75 62 73 65 71 75 65 6e 74 0a   all subsequent.
5ef0: 2a 2a 20 63 6f 6d 6d 65 6e 74 20 6c 69 6e 65 73  ** comment lines
5f00: 20 61 72 65 20 75 73 65 64 20 69 6e 20 74 68 65   are used in the
5f10: 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20 74   generation of t
5f20: 68 65 20 6f 70 63 6f 64 65 2e 68 74 6d 6c 20 64  he opcode.html d
5f30: 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 0a 2a 2a 20  ocumentation.** 
5f40: 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53 55 4d 4d  file..**.** SUMM
5f50: 41 52 59 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 46  ARY:.**.**     F
5f60: 6f 72 6d 61 74 74 69 6e 67 20 69 73 20 69 6d 70  ormatting is imp
5f70: 6f 72 74 61 6e 74 20 74 6f 20 73 63 72 69 70 74  ortant to script
5f80: 73 20 74 68 61 74 20 73 63 61 6e 20 74 68 69 73  s that scan this
5f90: 20 66 69 6c 65 2e 0a 2a 2a 20 20 20 20 20 44 6f   file..**     Do
5fa0: 20 6e 6f 74 20 64 65 76 69 61 74 65 20 66 72 6f   not deviate fro
5fb0: 6d 20 74 68 65 20 66 6f 72 6d 61 74 74 69 6e 67  m the formatting
5fc0: 20 73 74 79 6c 65 20 63 75 72 72 65 6e 74 6c 79   style currently
5fd0: 20 69 6e 20 75 73 65 2e 0a 2a 2a 0a 2a 2a 2a 2a   in use..**.****
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 2a 2a 2a  ****************
6010: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6020: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 2f 2a 20 4f  *********/../* O
6030: 70 63 6f 64 65 3a 20 20 47 6f 74 6f 20 2a 20 50  pcode:  Goto * P
6040: 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 6e  2 * * *.**.** An
6050: 20 75 6e 63 6f 6e 64 69 74 69 6f 6e 61 6c 20 6a   unconditional j
6060: 75 6d 70 20 74 6f 20 61 64 64 72 65 73 73 20 50  ump to address P
6070: 32 2e 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 69  2..** The next i
6080: 6e 73 74 72 75 63 74 69 6f 6e 20 65 78 65 63 75  nstruction execu
6090: 74 65 64 20 77 69 6c 6c 20 62 65 20 0a 2a 2a 20  ted will be .** 
60a0: 74 68 65 20 6f 6e 65 20 61 74 20 69 6e 64 65 78  the one at index
60b0: 20 50 32 20 66 72 6f 6d 20 74 68 65 20 62 65 67   P2 from the beg
60c0: 69 6e 6e 69 6e 67 20 6f 66 0a 2a 2a 20 74 68 65  inning of.** the
60d0: 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f 0a 63 61 73   program..*/.cas
60e0: 65 20 4f 50 5f 47 6f 74 6f 3a 20 7b 20 20 20 20  e OP_Goto: {    
60f0: 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
6100: 20 2a 2f 0a 20 20 43 48 45 43 4b 5f 46 4f 52 5f   */.  CHECK_FOR_
6110: 49 4e 54 45 52 52 55 50 54 3b 0a 20 20 70 63 20  INTERRUPT;.  pc 
6120: 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
6130: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
6140: 63 6f 64 65 3a 20 20 47 6f 73 75 62 20 50 31 20  code:  Gosub P1 
6150: 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57  P2 * * *.**.** W
6160: 72 69 74 65 20 74 68 65 20 63 75 72 72 65 6e 74  rite the current
6170: 20 61 64 64 72 65 73 73 20 6f 6e 74 6f 20 72 65   address onto re
6180: 67 69 73 74 65 72 20 50 31 0a 2a 2a 20 61 6e 64  gister P1.** and
6190: 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 61 64   then jump to ad
61a0: 64 72 65 73 73 20 50 32 2e 0a 2a 2f 0a 63 61 73  dress P2..*/.cas
61b0: 65 20 4f 50 5f 47 6f 73 75 62 3a 20 7b 20 20 20  e OP_Gosub: {   
61c0: 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
61d0: 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20  , in1 */.  pIn1 
61e0: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
61f0: 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 49 6e  ;.  assert( (pIn
6200: 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 44  1->flags & MEM_D
6210: 79 6e 29 3d 3d 30 20 29 3b 0a 20 20 6d 65 6d 41  yn)==0 );.  memA
6220: 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
6230: 70 49 6e 31 29 3b 0a 20 20 70 49 6e 31 2d 3e 66  pIn1);.  pIn1->f
6240: 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a  lags = MEM_Int;.
6250: 20 20 70 49 6e 31 2d 3e 75 2e 69 20 3d 20 70 63    pIn1->u.i = pc
6260: 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41  ;.  REGISTER_TRA
6270: 43 45 28 70 4f 70 2d 3e 70 31 2c 20 70 49 6e 31  CE(pOp->p1, pIn1
6280: 29 3b 0a 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70  );.  pc = pOp->p
6290: 32 20 2d 20 31 3b 0a 20 20 62 72 65 61 6b 3b 0a  2 - 1;.  break;.
62a0: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 52  }../* Opcode:  R
62b0: 65 74 75 72 6e 20 50 31 20 2a 20 2a 20 2a 20 2a  eturn P1 * * * *
62c0: 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 74  .**.** Jump to t
62d0: 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74  he next instruct
62e0: 69 6f 6e 20 61 66 74 65 72 20 74 68 65 20 61 64  ion after the ad
62f0: 64 72 65 73 73 20 69 6e 20 72 65 67 69 73 74 65  dress in registe
6300: 72 20 50 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  r P1..*/.case OP
6310: 5f 52 65 74 75 72 6e 3a 20 7b 20 20 20 20 20 20  _Return: {      
6320: 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20       /* in1 */. 
6330: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
6340: 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
6350: 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20  ( pIn1->flags & 
6360: 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 70 63 20  MEM_Int );.  pc 
6370: 3d 20 28 69 6e 74 29 70 49 6e 31 2d 3e 75 2e 69  = (int)pIn1->u.i
6380: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
6390: 20 4f 70 63 6f 64 65 3a 20 20 59 69 65 6c 64 20   Opcode:  Yield 
63a0: 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  P1 * * * *.**.**
63b0: 20 53 77 61 70 20 74 68 65 20 70 72 6f 67 72 61   Swap the progra
63c0: 6d 20 63 6f 75 6e 74 65 72 20 77 69 74 68 20 74  m counter with t
63d0: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
63e0: 73 74 65 72 20 50 31 2e 0a 2a 2f 0a 63 61 73 65  ster P1..*/.case
63f0: 20 4f 50 5f 59 69 65 6c 64 3a 20 7b 20 20 20 20   OP_Yield: {    
6400: 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a          /* in1 *
6410: 2f 0a 20 20 69 6e 74 20 70 63 44 65 73 74 3b 0a  /.  int pcDest;.
6420: 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
6430: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
6440: 74 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  t( (pIn1->flags 
6450: 26 20 4d 45 4d 5f 44 79 6e 29 3d 3d 30 20 29 3b  & MEM_Dyn)==0 );
6460: 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d  .  pIn1->flags =
6470: 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 70 63 44 65   MEM_Int;.  pcDe
6480: 73 74 20 3d 20 28 69 6e 74 29 70 49 6e 31 2d 3e  st = (int)pIn1->
6490: 75 2e 69 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69  u.i;.  pIn1->u.i
64a0: 20 3d 20 70 63 3b 0a 20 20 52 45 47 49 53 54 45   = pc;.  REGISTE
64b0: 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c  R_TRACE(pOp->p1,
64c0: 20 70 49 6e 31 29 3b 0a 20 20 70 63 20 3d 20 70   pIn1);.  pc = p
64d0: 63 44 65 73 74 3b 0a 20 20 62 72 65 61 6b 3b 0a  cDest;.  break;.
64e0: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 48  }../* Opcode:  H
64f0: 61 6c 74 49 66 4e 75 6c 6c 20 20 50 31 20 50 32  altIfNull  P1 P2
6500: 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 43   P3 P4 *.**.** C
6510: 68 65 63 6b 20 74 68 65 20 76 61 6c 75 65 20 69  heck the value i
6520: 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 20 20  n register P3.  
6530: 49 66 20 69 73 20 69 73 20 4e 55 4c 4c 20 74 68  If is is NULL th
6540: 65 6e 20 48 61 6c 74 20 75 73 69 6e 67 0a 2a 2a  en Halt using.**
6550: 20 70 61 72 61 6d 65 74 65 72 20 50 31 2c 20 50   parameter P1, P
6560: 32 2c 20 61 6e 64 20 50 34 20 61 73 20 69 66 20  2, and P4 as if 
6570: 74 68 69 73 20 77 65 72 65 20 61 20 48 61 6c 74  this were a Halt
6580: 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 49   instruction.  I
6590: 66 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69  f the.** value i
65a0: 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73  n register P3 is
65b0: 20 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68 65 6e 20   not NULL, then 
65c0: 74 68 69 73 20 72 6f 75 74 69 6e 65 20 69 73 20  this routine is 
65d0: 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 63 61 73 65  a no-op..*/.case
65e0: 20 4f 50 5f 48 61 6c 74 49 66 4e 75 6c 6c 3a 20   OP_HaltIfNull: 
65f0: 7b 20 20 20 20 20 20 2f 2a 20 69 6e 33 20 2a 2f  {      /* in3 */
6600: 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b  .  pIn3 = &aMem[
6610: 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20  pOp->p3];.  if( 
6620: 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn3->flags & M
6630: 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 20 62 72  EM_Null)==0 ) br
6640: 65 61 6b 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74  eak;.  /* Fall t
6650: 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f 48  hrough into OP_H
6660: 61 6c 74 20 2a 2f 0a 7d 0a 0a 2f 2a 20 4f 70 63  alt */.}../* Opc
6670: 6f 64 65 3a 20 20 48 61 6c 74 20 50 31 20 50 32  ode:  Halt P1 P2
6680: 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 45 78   * P4 *.**.** Ex
6690: 69 74 20 69 6d 6d 65 64 69 61 74 65 6c 79 2e 20  it immediately. 
66a0: 20 41 6c 6c 20 6f 70 65 6e 20 63 75 72 73 6f 72   All open cursor
66b0: 73 2c 20 65 74 63 20 61 72 65 20 63 6c 6f 73 65  s, etc are close
66c0: 64 0a 2a 2a 20 61 75 74 6f 6d 61 74 69 63 61 6c  d.** automatical
66d0: 6c 79 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20  ly..**.** P1 is 
66e0: 74 68 65 20 72 65 73 75 6c 74 20 63 6f 64 65 20  the result code 
66f0: 72 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69  returned by sqli
6700: 74 65 33 5f 65 78 65 63 28 29 2c 20 73 71 6c 69  te3_exec(), sqli
6710: 74 65 33 5f 72 65 73 65 74 28 29 2c 0a 2a 2a 20  te3_reset(),.** 
6720: 6f 72 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c  or sqlite3_final
6730: 69 7a 65 28 29 2e 20 20 46 6f 72 20 61 20 6e 6f  ize().  For a no
6740: 72 6d 61 6c 20 68 61 6c 74 2c 20 74 68 69 73 20  rmal halt, this 
6750: 73 68 6f 75 6c 64 20 62 65 20 53 51 4c 49 54 45  should be SQLITE
6760: 5f 4f 4b 20 28 30 29 2e 0a 2a 2a 20 46 6f 72 20  _OK (0)..** For 
6770: 65 72 72 6f 72 73 2c 20 69 74 20 63 61 6e 20 62  errors, it can b
6780: 65 20 73 6f 6d 65 20 6f 74 68 65 72 20 76 61 6c  e some other val
6790: 75 65 2e 20 20 49 66 20 50 31 21 3d 30 20 74 68  ue.  If P1!=0 th
67a0: 65 6e 20 50 32 20 77 69 6c 6c 20 64 65 74 65 72  en P2 will deter
67b0: 6d 69 6e 65 0a 2a 2a 20 77 68 65 74 68 65 72 20  mine.** whether 
67c0: 6f 72 20 6e 6f 74 20 74 6f 20 72 6f 6c 6c 62 61  or not to rollba
67d0: 63 6b 20 74 68 65 20 63 75 72 72 65 6e 74 20 74  ck the current t
67e0: 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 44 6f 20  ransaction.  Do 
67f0: 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20  not rollback.** 
6800: 69 66 20 50 32 3d 3d 4f 45 5f 46 61 69 6c 2e 20  if P2==OE_Fail. 
6810: 44 6f 20 74 68 65 20 72 6f 6c 6c 62 61 63 6b 20  Do the rollback 
6820: 69 66 20 50 32 3d 3d 4f 45 5f 52 6f 6c 6c 62 61  if P2==OE_Rollba
6830: 63 6b 2e 20 20 49 66 20 50 32 3d 3d 4f 45 5f 41  ck.  If P2==OE_A
6840: 62 6f 72 74 2c 0a 2a 2a 20 74 68 65 6e 20 62 61  bort,.** then ba
6850: 63 6b 20 6f 75 74 20 61 6c 6c 20 63 68 61 6e 67  ck out all chang
6860: 65 73 20 74 68 61 74 20 68 61 76 65 20 6f 63 63  es that have occ
6870: 75 72 72 65 64 20 64 75 72 69 6e 67 20 74 68 69  urred during thi
6880: 73 20 65 78 65 63 75 74 69 6f 6e 20 6f 66 20 74  s execution of t
6890: 68 65 0a 2a 2a 20 56 44 42 45 2c 20 62 75 74 20  he.** VDBE, but 
68a0: 64 6f 20 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 20  do not rollback 
68b0: 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e  the transaction.
68c0: 20 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69 73   .**.** If P4 is
68d0: 20 6e 6f 74 20 6e 75 6c 6c 20 74 68 65 6e 20 69   not null then i
68e0: 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20 6d 65  t is an error me
68f0: 73 73 61 67 65 20 73 74 72 69 6e 67 2e 0a 2a 2a  ssage string..**
6900: 0a 2a 2a 20 54 68 65 72 65 20 69 73 20 61 6e 20  .** There is an 
6910: 69 6d 70 6c 69 65 64 20 22 48 61 6c 74 20 30 20  implied "Halt 0 
6920: 30 20 30 22 20 69 6e 73 74 72 75 63 74 69 6f 6e  0 0" instruction
6930: 20 69 6e 73 65 72 74 65 64 20 61 74 20 74 68 65   inserted at the
6940: 20 76 65 72 79 20 65 6e 64 20 6f 66 0a 2a 2a 20   very end of.** 
6950: 65 76 65 72 79 20 70 72 6f 67 72 61 6d 2e 20 20  every program.  
6960: 53 6f 20 61 20 6a 75 6d 70 20 70 61 73 74 20 74  So a jump past t
6970: 68 65 20 6c 61 73 74 20 69 6e 73 74 72 75 63 74  he last instruct
6980: 69 6f 6e 20 6f 66 20 74 68 65 20 70 72 6f 67 72  ion of the progr
6990: 61 6d 0a 2a 2a 20 69 73 20 74 68 65 20 73 61 6d  am.** is the sam
69a0: 65 20 61 73 20 65 78 65 63 75 74 69 6e 67 20 48  e as executing H
69b0: 61 6c 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  alt..*/.case OP_
69c0: 48 61 6c 74 3a 20 7b 0a 20 20 69 66 28 20 70 4f  Halt: {.  if( pO
69d0: 70 2d 3e 70 31 3d 3d 53 51 4c 49 54 45 5f 4f 4b  p->p1==SQLITE_OK
69e0: 20 26 26 20 70 2d 3e 70 46 72 61 6d 65 20 29 7b   && p->pFrame ){
69f0: 0a 20 20 20 20 2f 2a 20 48 61 6c 74 20 74 68 65  .    /* Halt the
6a00: 20 73 75 62 2d 70 72 6f 67 72 61 6d 2e 20 52 65   sub-program. Re
6a10: 74 75 72 6e 20 63 6f 6e 74 72 6f 6c 20 74 6f 20  turn control to 
6a20: 74 68 65 20 70 61 72 65 6e 74 20 66 72 61 6d 65  the parent frame
6a30: 2e 20 2a 2f 0a 20 20 20 20 56 64 62 65 46 72 61  . */.    VdbeFra
6a40: 6d 65 20 2a 70 46 72 61 6d 65 20 3d 20 70 2d 3e  me *pFrame = p->
6a50: 70 46 72 61 6d 65 3b 0a 20 20 20 20 70 2d 3e 70  pFrame;.    p->p
6a60: 46 72 61 6d 65 20 3d 20 70 46 72 61 6d 65 2d 3e  Frame = pFrame->
6a70: 70 50 61 72 65 6e 74 3b 0a 20 20 20 20 70 2d 3e  pParent;.    p->
6a80: 6e 46 72 61 6d 65 2d 2d 3b 0a 20 20 20 20 73 71  nFrame--;.    sq
6a90: 6c 69 74 65 33 56 64 62 65 53 65 74 43 68 61 6e  lite3VdbeSetChan
6aa0: 67 65 73 28 64 62 2c 20 70 2d 3e 6e 43 68 61 6e  ges(db, p->nChan
6ab0: 67 65 29 3b 0a 20 20 20 20 70 63 20 3d 20 73 71  ge);.    pc = sq
6ac0: 6c 69 74 65 33 56 64 62 65 46 72 61 6d 65 52 65  lite3VdbeFrameRe
6ad0: 73 74 6f 72 65 28 70 46 72 61 6d 65 29 3b 0a 20  store(pFrame);. 
6ae0: 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d     if( pOp->p2==
6af0: 4f 45 5f 49 67 6e 6f 72 65 20 29 7b 0a 20 20 20  OE_Ignore ){.   
6b00: 20 20 20 2f 2a 20 49 6e 73 74 72 75 63 74 69 6f     /* Instructio
6b10: 6e 20 70 63 20 69 73 20 74 68 65 20 4f 50 5f 50  n pc is the OP_P
6b20: 72 6f 67 72 61 6d 20 74 68 61 74 20 69 6e 76 6f  rogram that invo
6b30: 6b 65 64 20 74 68 65 20 73 75 62 2d 70 72 6f 67  ked the sub-prog
6b40: 72 61 6d 20 0a 20 20 20 20 20 20 2a 2a 20 63 75  ram .      ** cu
6b50: 72 72 65 6e 74 6c 79 20 62 65 69 6e 67 20 68 61  rrently being ha
6b60: 6c 74 65 64 2e 20 49 66 20 74 68 65 20 70 32 20  lted. If the p2 
6b70: 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 66 20 74  instruction of t
6b80: 68 69 73 20 4f 50 5f 48 61 6c 74 0a 20 20 20 20  his OP_Halt.    
6b90: 20 20 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e    ** instruction
6ba0: 20 69 73 20 73 65 74 20 74 6f 20 4f 45 5f 49 67   is set to OE_Ig
6bb0: 6e 6f 72 65 2c 20 74 68 65 6e 20 74 68 65 20 73  nore, then the s
6bc0: 75 62 2d 70 72 6f 67 72 61 6d 20 69 73 20 74 68  ub-program is th
6bd0: 72 6f 77 69 6e 67 0a 20 20 20 20 20 20 2a 2a 20  rowing.      ** 
6be0: 61 6e 20 49 47 4e 4f 52 45 20 65 78 63 65 70 74  an IGNORE except
6bf0: 69 6f 6e 2e 20 49 6e 20 74 68 69 73 20 63 61 73  ion. In this cas
6c00: 65 20 6a 75 6d 70 20 74 6f 20 74 68 65 20 61 64  e jump to the ad
6c10: 64 72 65 73 73 20 73 70 65 63 69 66 69 65 64 0a  dress specified.
6c20: 20 20 20 20 20 20 2a 2a 20 61 73 20 74 68 65 20        ** as the 
6c30: 70 32 20 6f 66 20 74 68 65 20 63 61 6c 6c 69 6e  p2 of the callin
6c40: 67 20 4f 50 5f 50 72 6f 67 72 61 6d 2e 20 20 2a  g OP_Program.  *
6c50: 2f 0a 20 20 20 20 20 20 70 63 20 3d 20 70 2d 3e  /.      pc = p->
6c60: 61 4f 70 5b 70 63 5d 2e 70 32 2d 31 3b 0a 20 20  aOp[pc].p2-1;.  
6c70: 20 20 7d 0a 20 20 20 20 61 4f 70 20 3d 20 70 2d    }.    aOp = p-
6c80: 3e 61 4f 70 3b 0a 20 20 20 20 61 4d 65 6d 20 3d  >aOp;.    aMem =
6c90: 20 70 2d 3e 61 4d 65 6d 3b 0a 20 20 20 20 62 72   p->aMem;.    br
6ca0: 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 70 2d 3e 72  eak;.  }..  p->r
6cb0: 63 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70  c = pOp->p1;.  p
6cc0: 2d 3e 65 72 72 6f 72 41 63 74 69 6f 6e 20 3d 20  ->errorAction = 
6cd0: 28 75 38 29 70 4f 70 2d 3e 70 32 3b 0a 20 20 70  (u8)pOp->p2;.  p
6ce0: 2d 3e 70 63 20 3d 20 70 63 3b 0a 20 20 69 66 28  ->pc = pc;.  if(
6cf0: 20 70 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20   pOp->p4.z ){.  
6d00: 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 63 21    assert( p->rc!
6d10: 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 20 20  =SQLITE_OK );.  
6d20: 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69    sqlite3SetStri
6d30: 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20  ng(&p->zErrMsg, 
6d40: 64 62 2c 20 22 25 73 22 2c 20 70 4f 70 2d 3e 70  db, "%s", pOp->p
6d50: 34 2e 7a 29 3b 0a 20 20 20 20 74 65 73 74 63 61  4.z);.    testca
6d60: 73 65 28 20 73 71 6c 69 74 65 33 47 6c 6f 62 61  se( sqlite3Globa
6d70: 6c 43 6f 6e 66 69 67 2e 78 4c 6f 67 21 3d 30 20  lConfig.xLog!=0 
6d80: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 6c  );.    sqlite3_l
6d90: 6f 67 28 70 4f 70 2d 3e 70 31 2c 20 22 61 62 6f  og(pOp->p1, "abo
6da0: 72 74 20 61 74 20 25 64 20 69 6e 20 5b 25 73 5d  rt at %d in [%s]
6db0: 3a 20 25 73 22 2c 20 70 63 2c 20 70 2d 3e 7a 53  : %s", pc, p->zS
6dc0: 71 6c 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a  ql, pOp->p4.z);.
6dd0: 20 20 7d 65 6c 73 65 20 69 66 28 20 70 2d 3e 72    }else if( p->r
6de0: 63 20 29 7b 0a 20 20 20 20 74 65 73 74 63 61 73  c ){.    testcas
6df0: 65 28 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c  e( sqlite3Global
6e00: 43 6f 6e 66 69 67 2e 78 4c 6f 67 21 3d 30 20 29  Config.xLog!=0 )
6e10: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 6c 6f  ;.    sqlite3_lo
6e20: 67 28 70 4f 70 2d 3e 70 31 2c 20 22 63 6f 6e 73  g(pOp->p1, "cons
6e30: 74 72 61 69 6e 74 20 66 61 69 6c 65 64 20 61 74  traint failed at
6e40: 20 25 64 20 69 6e 20 5b 25 73 5d 22 2c 20 70 63   %d in [%s]", pc
6e50: 2c 20 70 2d 3e 7a 53 71 6c 29 3b 0a 20 20 7d 0a  , p->zSql);.  }.
6e60: 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
6e70: 62 65 48 61 6c 74 28 70 29 3b 0a 20 20 61 73 73  beHalt(p);.  ass
6e80: 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f  ert( rc==SQLITE_
6e90: 42 55 53 59 20 7c 7c 20 72 63 3d 3d 53 51 4c 49  BUSY || rc==SQLI
6ea0: 54 45 5f 4f 4b 20 7c 7c 20 72 63 3d 3d 53 51 4c  TE_OK || rc==SQL
6eb0: 49 54 45 5f 45 52 52 4f 52 20 29 3b 0a 20 20 69  ITE_ERROR );.  i
6ec0: 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55  f( rc==SQLITE_BU
6ed0: 53 59 20 29 7b 0a 20 20 20 20 70 2d 3e 72 63 20  SY ){.    p->rc 
6ee0: 3d 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55  = rc = SQLITE_BU
6ef0: 53 59 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  SY;.  }else{.   
6f00: 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c   assert( rc==SQL
6f10: 49 54 45 5f 4f 4b 20 7c 7c 20 70 2d 3e 72 63 3d  ITE_OK || p->rc=
6f20: 3d 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49  =SQLITE_CONSTRAI
6f30: 4e 54 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  NT );.    assert
6f40: 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
6f50: 7c 7c 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64  || db->nDeferred
6f60: 43 6f 6e 73 3e 30 20 29 3b 0a 20 20 20 20 72 63  Cons>0 );.    rc
6f70: 20 3d 20 70 2d 3e 72 63 20 3f 20 53 51 4c 49 54   = p->rc ? SQLIT
6f80: 45 5f 45 52 52 4f 52 20 3a 20 53 51 4c 49 54 45  E_ERROR : SQLITE
6f90: 5f 44 4f 4e 45 3b 0a 20 20 7d 0a 20 20 67 6f 74  _DONE;.  }.  got
6fa0: 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 7d  o vdbe_return;.}
6fb0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 74  ../* Opcode: Int
6fc0: 65 67 65 72 20 50 31 20 50 32 20 2a 20 2a 20 2a  eger P1 P2 * * *
6fd0: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 33 32 2d 62 69  .**.** The 32-bi
6fe0: 74 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20  t integer value 
6ff0: 50 31 20 69 73 20 77 72 69 74 74 65 6e 20 69 6e  P1 is written in
7000: 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  to register P2..
7010: 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74 65 67  */.case OP_Integ
7020: 65 72 3a 20 7b 20 20 20 20 20 20 20 20 20 2f 2a  er: {         /*
7030: 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65   out2-prerelease
7040: 20 2a 2f 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20   */.  pOut->u.i 
7050: 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 62 72 65  = pOp->p1;.  bre
7060: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
7070: 3a 20 49 6e 74 36 34 20 2a 20 50 32 20 2a 20 50  : Int64 * P2 * P
7080: 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20  4 *.**.** P4 is 
7090: 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 36  a pointer to a 6
70a0: 34 2d 62 69 74 20 69 6e 74 65 67 65 72 20 76 61  4-bit integer va
70b0: 6c 75 65 2e 0a 2a 2a 20 57 72 69 74 65 20 74 68  lue..** Write th
70c0: 61 74 20 76 61 6c 75 65 20 69 6e 74 6f 20 72 65  at value into re
70d0: 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61  gister P2..*/.ca
70e0: 73 65 20 4f 50 5f 49 6e 74 36 34 3a 20 7b 20 20  se OP_Int64: {  
70f0: 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
7100: 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20  -prerelease */. 
7110: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
7120: 2e 70 49 36 34 21 3d 30 20 29 3b 0a 20 20 70 4f  .pI64!=0 );.  pO
7130: 75 74 2d 3e 75 2e 69 20 3d 20 2a 70 4f 70 2d 3e  ut->u.i = *pOp->
7140: 70 34 2e 70 49 36 34 3b 0a 20 20 62 72 65 61 6b  p4.pI64;.  break
7150: 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  ;.}..#ifndef SQL
7160: 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e  ITE_OMIT_FLOATIN
7170: 47 5f 50 4f 49 4e 54 0a 2f 2a 20 4f 70 63 6f 64  G_POINT./* Opcod
7180: 65 3a 20 52 65 61 6c 20 2a 20 50 32 20 2a 20 50  e: Real * P2 * P
7190: 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20  4 *.**.** P4 is 
71a0: 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 36  a pointer to a 6
71b0: 34 2d 62 69 74 20 66 6c 6f 61 74 69 6e 67 20 70  4-bit floating p
71c0: 6f 69 6e 74 20 76 61 6c 75 65 2e 0a 2a 2a 20 57  oint value..** W
71d0: 72 69 74 65 20 74 68 61 74 20 76 61 6c 75 65 20  rite that value 
71e0: 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  into register P2
71f0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 61  ..*/.case OP_Rea
7200: 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  l: {            
7210: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 46 4c  /* same as TK_FL
7220: 4f 41 54 2c 20 6f 75 74 32 2d 70 72 65 72 65 6c  OAT, out2-prerel
7230: 65 61 73 65 20 2a 2f 0a 20 20 70 4f 75 74 2d 3e  ease */.  pOut->
7240: 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 52 65 61 6c  flags = MEM_Real
7250: 3b 0a 20 20 61 73 73 65 72 74 28 20 21 73 71 6c  ;.  assert( !sql
7260: 69 74 65 33 49 73 4e 61 4e 28 2a 70 4f 70 2d 3e  ite3IsNaN(*pOp->
7270: 70 34 2e 70 52 65 61 6c 29 20 29 3b 0a 20 20 70  p4.pReal) );.  p
7280: 4f 75 74 2d 3e 72 20 3d 20 2a 70 4f 70 2d 3e 70  Out->r = *pOp->p
7290: 34 2e 70 52 65 61 6c 3b 0a 20 20 62 72 65 61 6b  4.pReal;.  break
72a0: 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f  ;.}.#endif../* O
72b0: 70 63 6f 64 65 3a 20 53 74 72 69 6e 67 38 20 2a  pcode: String8 *
72c0: 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a   P2 * P4 *.**.**
72d0: 20 50 34 20 70 6f 69 6e 74 73 20 74 6f 20 61 20   P4 points to a 
72e0: 6e 75 6c 20 74 65 72 6d 69 6e 61 74 65 64 20 55  nul terminated U
72f0: 54 46 2d 38 20 73 74 72 69 6e 67 2e 20 54 68 69  TF-8 string. Thi
7300: 73 20 6f 70 63 6f 64 65 20 69 73 20 74 72 61 6e  s opcode is tran
7310: 73 66 6f 72 6d 65 64 20 0a 2a 2a 20 69 6e 74 6f  sformed .** into
7320: 20 61 6e 20 4f 50 5f 53 74 72 69 6e 67 20 62 65   an OP_String be
7330: 66 6f 72 65 20 69 74 20 69 73 20 65 78 65 63 75  fore it is execu
7340: 74 65 64 20 66 6f 72 20 74 68 65 20 66 69 72 73  ted for the firs
7350: 74 20 74 69 6d 65 2e 0a 2a 2f 0a 63 61 73 65 20  t time..*/.case 
7360: 4f 50 5f 53 74 72 69 6e 67 38 3a 20 7b 20 20 20  OP_String8: {   
7370: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
7380: 20 54 4b 5f 53 54 52 49 4e 47 2c 20 6f 75 74 32   TK_STRING, out2
7390: 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20  -prerelease */. 
73a0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
73b0: 2e 7a 21 3d 30 20 29 3b 0a 20 20 70 4f 70 2d 3e  .z!=0 );.  pOp->
73c0: 6f 70 63 6f 64 65 20 3d 20 4f 50 5f 53 74 72 69  opcode = OP_Stri
73d0: 6e 67 3b 0a 20 20 70 4f 70 2d 3e 70 31 20 3d 20  ng;.  pOp->p1 = 
73e0: 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
73f0: 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 0a 23 69 66  pOp->p4.z);..#if
7400: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
7410: 5f 55 54 46 31 36 0a 20 20 69 66 28 20 65 6e 63  _UTF16.  if( enc
7420: 6f 64 69 6e 67 21 3d 53 51 4c 49 54 45 5f 55 54  oding!=SQLITE_UT
7430: 46 38 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73  F8 ){.    rc = s
7440: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
7450: 53 74 72 28 70 4f 75 74 2c 20 70 4f 70 2d 3e 70  Str(pOut, pOp->p
7460: 34 2e 7a 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f  4.z, -1, SQLITE_
7470: 55 54 46 38 2c 20 53 51 4c 49 54 45 5f 53 54 41  UTF8, SQLITE_STA
7480: 54 49 43 29 3b 0a 20 20 20 20 69 66 28 20 72 63  TIC);.    if( rc
7490: 3d 3d 53 51 4c 49 54 45 5f 54 4f 4f 42 49 47 20  ==SQLITE_TOOBIG 
74a0: 29 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a  ) goto too_big;.
74b0: 20 20 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4f      if( SQLITE_O
74c0: 4b 21 3d 73 71 6c 69 74 65 33 56 64 62 65 43 68  K!=sqlite3VdbeCh
74d0: 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 4f 75  angeEncoding(pOu
74e0: 74 2c 20 65 6e 63 6f 64 69 6e 67 29 20 29 20 67  t, encoding) ) g
74f0: 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20  oto no_mem;.    
7500: 61 73 73 65 72 74 28 20 70 4f 75 74 2d 3e 7a 4d  assert( pOut->zM
7510: 61 6c 6c 6f 63 3d 3d 70 4f 75 74 2d 3e 7a 20 29  alloc==pOut->z )
7520: 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  ;.    assert( pO
7530: 75 74 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  ut->flags & MEM_
7540: 44 79 6e 20 29 3b 0a 20 20 20 20 70 4f 75 74 2d  Dyn );.    pOut-
7550: 3e 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20  >zMalloc = 0;.  
7560: 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d    pOut->flags |=
7570: 20 4d 45 4d 5f 53 74 61 74 69 63 3b 0a 20 20 20   MEM_Static;.   
7580: 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 26 3d 20   pOut->flags &= 
7590: 7e 4d 45 4d 5f 44 79 6e 3b 0a 20 20 20 20 69 66  ~MEM_Dyn;.    if
75a0: 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
75b0: 34 5f 44 59 4e 41 4d 49 43 20 29 7b 0a 20 20 20  4_DYNAMIC ){.   
75c0: 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65     sqlite3DbFree
75d0: 28 64 62 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b  (db, pOp->p4.z);
75e0: 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f 70 2d 3e  .    }.    pOp->
75f0: 70 34 74 79 70 65 20 3d 20 50 34 5f 44 59 4e 41  p4type = P4_DYNA
7600: 4d 49 43 3b 0a 20 20 20 20 70 4f 70 2d 3e 70 34  MIC;.    pOp->p4
7610: 2e 7a 20 3d 20 70 4f 75 74 2d 3e 7a 3b 0a 20 20  .z = pOut->z;.  
7620: 20 20 70 4f 70 2d 3e 70 31 20 3d 20 70 4f 75 74    pOp->p1 = pOut
7630: 2d 3e 6e 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a  ->n;.  }.#endif.
7640: 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 3e 64 62    if( pOp->p1>db
7650: 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f  ->aLimit[SQLITE_
7660: 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b  LIMIT_LENGTH] ){
7670: 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69  .    goto too_bi
7680: 67 3b 0a 20 20 7d 0a 20 20 2f 2a 20 46 61 6c 6c  g;.  }.  /* Fall
7690: 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
76a0: 6e 65 78 74 20 63 61 73 65 2c 20 4f 50 5f 53 74  next case, OP_St
76b0: 72 69 6e 67 20 2a 2f 0a 7d 0a 20 20 0a 2f 2a 20  ring */.}.  ./* 
76c0: 4f 70 63 6f 64 65 3a 20 53 74 72 69 6e 67 20 50  Opcode: String P
76d0: 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a  1 P2 * P4 *.**.*
76e0: 2a 20 54 68 65 20 73 74 72 69 6e 67 20 76 61 6c  * The string val
76f0: 75 65 20 50 34 20 6f 66 20 6c 65 6e 67 74 68 20  ue P4 of length 
7700: 50 31 20 28 62 79 74 65 73 29 20 69 73 20 73 74  P1 (bytes) is st
7710: 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
7720: 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P2..*/.case OP_
7730: 53 74 72 69 6e 67 3a 20 7b 20 20 20 20 20 20 20  String: {       
7740: 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65     /* out2-prere
7750: 6c 65 61 73 65 20 2a 2f 0a 20 20 61 73 73 65 72  lease */.  asser
7760: 74 28 20 70 4f 70 2d 3e 70 34 2e 7a 21 3d 30 20  t( pOp->p4.z!=0 
7770: 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  );.  pOut->flags
7780: 20 3d 20 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 53   = MEM_Str|MEM_S
7790: 74 61 74 69 63 7c 4d 45 4d 5f 54 65 72 6d 3b 0a  tatic|MEM_Term;.
77a0: 20 20 70 4f 75 74 2d 3e 7a 20 3d 20 70 4f 70 2d    pOut->z = pOp-
77b0: 3e 70 34 2e 7a 3b 0a 20 20 70 4f 75 74 2d 3e 6e  >p4.z;.  pOut->n
77c0: 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 4f   = pOp->p1;.  pO
77d0: 75 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69  ut->enc = encodi
77e0: 6e 67 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58  ng;.  UPDATE_MAX
77f0: 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b  _BLOBSIZE(pOut);
7800: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
7810: 4f 70 63 6f 64 65 3a 20 4e 75 6c 6c 20 2a 20 50  Opcode: Null * P
7820: 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72  2 * * *.**.** Wr
7830: 69 74 65 20 61 20 4e 55 4c 4c 20 69 6e 74 6f 20  ite a NULL into 
7840: 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a  register P2..*/.
7850: 63 61 73 65 20 4f 50 5f 4e 75 6c 6c 3a 20 7b 20  case OP_Null: { 
7860: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
7870: 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a  2-prerelease */.
7880: 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20    pOut->flags = 
7890: 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 62 72 65 61  MEM_Null;.  brea
78a0: 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65  k;.}.../* Opcode
78b0: 3a 20 42 6c 6f 62 20 50 31 20 50 32 20 2a 20 50  : Blob P1 P2 * P
78c0: 34 0a 2a 2a 0a 2a 2a 20 50 34 20 70 6f 69 6e 74  4.**.** P4 point
78d0: 73 20 74 6f 20 61 20 62 6c 6f 62 20 6f 66 20 64  s to a blob of d
78e0: 61 74 61 20 50 31 20 62 79 74 65 73 20 6c 6f 6e  ata P1 bytes lon
78f0: 67 2e 20 20 53 74 6f 72 65 20 74 68 69 73 0a 2a  g.  Store this.*
7900: 2a 20 62 6c 6f 62 20 69 6e 20 72 65 67 69 73 74  * blob in regist
7910: 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f  er P2..*/.case O
7920: 50 5f 42 6c 6f 62 3a 20 7b 20 20 20 20 20 20 20  P_Blob: {       
7930: 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
7940: 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20  -prerelease */. 
7950: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
7960: 20 3c 3d 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4c   <= SQLITE_MAX_L
7970: 45 4e 47 54 48 20 29 3b 0a 20 20 73 71 6c 69 74  ENGTH );.  sqlit
7980: 65 33 56 64 62 65 4d 65 6d 53 65 74 53 74 72 28  e3VdbeMemSetStr(
7990: 70 4f 75 74 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c  pOut, pOp->p4.z,
79a0: 20 70 4f 70 2d 3e 70 31 2c 20 30 2c 20 30 29 3b   pOp->p1, 0, 0);
79b0: 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 65  .  pOut->enc = e
79c0: 6e 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44 41 54  ncoding;.  UPDAT
79d0: 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70  E_MAX_BLOBSIZE(p
79e0: 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Out);.  break;.}
79f0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 61 72  ../* Opcode: Var
7a00: 69 61 62 6c 65 20 50 31 20 50 32 20 2a 20 50 34  iable P1 P2 * P4
7a10: 20 2a 0a 2a 2a 0a 2a 2a 20 54 72 61 6e 73 66 65   *.**.** Transfe
7a20: 72 20 74 68 65 20 76 61 6c 75 65 73 20 6f 66 20  r the values of 
7a30: 62 6f 75 6e 64 20 70 61 72 61 6d 65 74 65 72 20  bound parameter 
7a40: 50 31 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  P1 into register
7a50: 20 50 32 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65   P2.**.** If the
7a60: 20 70 61 72 61 6d 65 74 65 72 20 69 73 20 6e 61   parameter is na
7a70: 6d 65 64 2c 20 74 68 65 6e 20 69 74 73 20 6e 61  med, then its na
7a80: 6d 65 20 61 70 70 65 61 72 73 20 69 6e 20 50 34  me appears in P4
7a90: 20 61 6e 64 20 50 33 3d 3d 31 2e 0a 2a 2a 20 54   and P3==1..** T
7aa0: 68 65 20 50 34 20 76 61 6c 75 65 20 69 73 20 75  he P4 value is u
7ab0: 73 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 62  sed by sqlite3_b
7ac0: 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61  ind_parameter_na
7ad0: 6d 65 28 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  me()..*/.case OP
7ae0: 5f 56 61 72 69 61 62 6c 65 3a 20 7b 20 20 20 20  _Variable: {    
7af0: 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d          /* out2-
7b00: 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20  prerelease */.  
7b10: 4d 65 6d 20 2a 70 56 61 72 3b 20 20 20 20 20 20  Mem *pVar;      
7b20: 20 2f 2a 20 56 61 6c 75 65 20 62 65 69 6e 67 20   /* Value being 
7b30: 74 72 61 6e 73 66 65 72 72 65 64 20 2a 2f 0a 0a  transferred */..
7b40: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
7b50: 31 3e 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d  1>0 && pOp->p1<=
7b60: 70 2d 3e 6e 56 61 72 20 29 3b 0a 20 20 70 56 61  p->nVar );.  pVa
7b70: 72 20 3d 20 26 70 2d 3e 61 56 61 72 5b 70 4f 70  r = &p->aVar[pOp
7b80: 2d 3e 70 31 20 2d 20 31 5d 3b 0a 20 20 69 66 28  ->p1 - 1];.  if(
7b90: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54   sqlite3VdbeMemT
7ba0: 6f 6f 42 69 67 28 70 56 61 72 29 20 29 7b 0a 20  ooBig(pVar) ){. 
7bb0: 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b     goto too_big;
7bc0: 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 56 64  .  }.  sqlite3Vd
7bd0: 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79  beMemShallowCopy
7be0: 28 70 4f 75 74 2c 20 70 56 61 72 2c 20 4d 45 4d  (pOut, pVar, MEM
7bf0: 5f 53 74 61 74 69 63 29 3b 0a 20 20 55 50 44 41  _Static);.  UPDA
7c00: 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
7c10: 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  pOut);.  break;.
7c20: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 6f  }../* Opcode: Mo
7c30: 76 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ve P1 P2 P3 * *.
7c40: 2a 2a 0a 2a 2a 20 4d 6f 76 65 20 74 68 65 20 76  **.** Move the v
7c50: 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74 65  alues in registe
7c60: 72 20 50 31 2e 2e 50 31 2b 50 33 2d 31 20 6f 76  r P1..P1+P3-1 ov
7c70: 65 72 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73  er into.** regis
7c80: 74 65 72 73 20 50 32 2e 2e 50 32 2b 50 33 2d 31  ters P2..P2+P3-1
7c90: 2e 20 20 52 65 67 69 73 74 65 72 73 20 50 31 2e  .  Registers P1.
7ca0: 2e 50 31 2b 50 31 2d 31 20 61 72 65 0a 2a 2a 20  .P1+P1-1 are.** 
7cb0: 6c 65 66 74 20 68 6f 6c 64 69 6e 67 20 61 20 4e  left holding a N
7cc0: 55 4c 4c 2e 20 20 49 74 20 69 73 20 61 6e 20 65  ULL.  It is an e
7cd0: 72 72 6f 72 20 66 6f 72 20 72 65 67 69 73 74 65  rror for registe
7ce0: 72 20 72 61 6e 67 65 73 0a 2a 2a 20 50 31 2e 2e  r ranges.** P1..
7cf0: 50 31 2b 50 33 2d 31 20 61 6e 64 20 50 32 2e 2e  P1+P3-1 and P2..
7d00: 50 32 2b 50 33 2d 31 20 74 6f 20 6f 76 65 72 6c  P2+P3-1 to overl
7d10: 61 70 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d  ap..*/.case OP_M
7d20: 6f 76 65 3a 20 7b 0a 20 20 63 68 61 72 20 2a 7a  ove: {.  char *z
7d30: 4d 61 6c 6c 6f 63 3b 20 20 20 2f 2a 20 48 6f 6c  Malloc;   /* Hol
7d40: 64 69 6e 67 20 76 61 72 69 61 62 6c 65 20 66 6f  ding variable fo
7d50: 72 20 61 6c 6c 6f 63 61 74 65 64 20 6d 65 6d 6f  r allocated memo
7d60: 72 79 20 2a 2f 0a 20 20 69 6e 74 20 6e 3b 20 20  ry */.  int n;  
7d70: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
7d80: 65 72 20 6f 66 20 72 65 67 69 73 74 65 72 73 20  er of registers 
7d90: 6c 65 66 74 20 74 6f 20 63 6f 70 79 20 2a 2f 0a  left to copy */.
7da0: 20 20 69 6e 74 20 70 31 3b 20 20 20 20 20 20 20    int p1;       
7db0: 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 74     /* Register t
7dc0: 6f 20 63 6f 70 79 20 66 72 6f 6d 20 2a 2f 0a 20  o copy from */. 
7dd0: 20 69 6e 74 20 70 32 3b 20 20 20 20 20 20 20 20   int p2;        
7de0: 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 74 6f    /* Register to
7df0: 20 63 6f 70 79 20 74 6f 20 2a 2f 0a 0a 20 20 6e   copy to */..  n
7e00: 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 70 31   = pOp->p3;.  p1
7e10: 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 32   = pOp->p1;.  p2
7e20: 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73   = pOp->p2;.  as
7e30: 73 65 72 74 28 20 6e 3e 30 20 26 26 20 70 31 3e  sert( n>0 && p1>
7e40: 30 20 26 26 20 70 32 3e 30 20 29 3b 0a 20 20 61  0 && p2>0 );.  a
7e50: 73 73 65 72 74 28 20 70 31 2b 6e 3c 3d 70 32 20  ssert( p1+n<=p2 
7e60: 7c 7c 20 70 32 2b 6e 3c 3d 70 31 20 29 3b 0a 0a  || p2+n<=p1 );..
7e70: 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
7e80: 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d  1];.  pOut = &aM
7e90: 65 6d 5b 70 32 5d 3b 0a 20 20 77 68 69 6c 65 28  em[p2];.  while(
7ea0: 20 6e 2d 2d 20 29 7b 0a 20 20 20 20 61 73 73 65   n-- ){.    asse
7eb0: 72 74 28 20 70 4f 75 74 3c 3d 26 61 4d 65 6d 5b  rt( pOut<=&aMem[
7ec0: 70 2d 3e 6e 4d 65 6d 5d 20 29 3b 0a 20 20 20 20  p->nMem] );.    
7ed0: 61 73 73 65 72 74 28 20 70 49 6e 31 3c 3d 26 61  assert( pIn1<=&a
7ee0: 4d 65 6d 5b 70 2d 3e 6e 4d 65 6d 5d 20 29 3b 0a  Mem[p->nMem] );.
7ef0: 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
7f00: 73 56 61 6c 69 64 28 70 49 6e 31 29 20 29 3b 0a  sValid(pIn1) );.
7f10: 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68      memAboutToCh
7f20: 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 20  ange(p, pOut);. 
7f30: 20 20 20 7a 4d 61 6c 6c 6f 63 20 3d 20 70 4f 75     zMalloc = pOu
7f40: 74 2d 3e 7a 4d 61 6c 6c 6f 63 3b 0a 20 20 20 20  t->zMalloc;.    
7f50: 70 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d 20  pOut->zMalloc = 
7f60: 30 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  0;.    sqlite3Vd
7f70: 62 65 4d 65 6d 4d 6f 76 65 28 70 4f 75 74 2c 20  beMemMove(pOut, 
7f80: 70 49 6e 31 29 3b 0a 20 20 20 20 70 49 6e 31 2d  pIn1);.    pIn1-
7f90: 3e 7a 4d 61 6c 6c 6f 63 20 3d 20 7a 4d 61 6c 6c  >zMalloc = zMall
7fa0: 6f 63 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52  oc;.    REGISTER
7fb0: 5f 54 52 41 43 45 28 70 32 2b 2b 2c 20 70 4f 75  _TRACE(p2++, pOu
7fc0: 74 29 3b 0a 20 20 20 20 70 49 6e 31 2b 2b 3b 0a  t);.    pIn1++;.
7fd0: 20 20 20 20 70 4f 75 74 2b 2b 3b 0a 20 20 7d 0a      pOut++;.  }.
7fe0: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
7ff0: 70 63 6f 64 65 3a 20 43 6f 70 79 20 50 31 20 50  pcode: Copy P1 P
8000: 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4d 61  2 * * *.**.** Ma
8010: 6b 65 20 61 20 63 6f 70 79 20 6f 66 20 72 65 67  ke a copy of reg
8020: 69 73 74 65 72 20 50 31 20 69 6e 74 6f 20 72 65  ister P1 into re
8030: 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a  gister P2..**.**
8040: 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   This instructio
8050: 6e 20 6d 61 6b 65 73 20 61 20 64 65 65 70 20 63  n makes a deep c
8060: 6f 70 79 20 6f 66 20 74 68 65 20 76 61 6c 75 65  opy of the value
8070: 2e 20 20 41 20 64 75 70 6c 69 63 61 74 65 0a 2a  .  A duplicate.*
8080: 2a 20 69 73 20 6d 61 64 65 20 6f 66 20 61 6e 79  * is made of any
8090: 20 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20   string or blob 
80a0: 63 6f 6e 73 74 61 6e 74 2e 20 20 53 65 65 20 61  constant.  See a
80b0: 6c 73 6f 20 4f 50 5f 53 43 6f 70 79 2e 0a 2a 2f  lso OP_SCopy..*/
80c0: 0a 63 61 73 65 20 4f 50 5f 43 6f 70 79 3a 20 7b  .case OP_Copy: {
80d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
80e0: 69 6e 31 2c 20 6f 75 74 32 20 2a 2f 0a 20 20 70  in1, out2 */.  p
80f0: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
8100: 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26  >p1];.  pOut = &
8110: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
8120: 20 61 73 73 65 72 74 28 20 70 4f 75 74 21 3d 70   assert( pOut!=p
8130: 49 6e 31 20 29 3b 0a 20 20 73 71 6c 69 74 65 33  In1 );.  sqlite3
8140: 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f  VdbeMemShallowCo
8150: 70 79 28 70 4f 75 74 2c 20 70 49 6e 31 2c 20 4d  py(pOut, pIn1, M
8160: 45 4d 5f 45 70 68 65 6d 29 3b 0a 20 20 44 65 65  EM_Ephem);.  Dee
8170: 70 68 65 6d 65 72 61 6c 69 7a 65 28 70 4f 75 74  phemeralize(pOut
8180: 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52  );.  REGISTER_TR
8190: 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75  ACE(pOp->p2, pOu
81a0: 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
81b0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 43 6f 70 79  /* Opcode: SCopy
81c0: 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
81d0: 2a 2a 20 4d 61 6b 65 20 61 20 73 68 61 6c 6c 6f  ** Make a shallo
81e0: 77 20 63 6f 70 79 20 6f 66 20 72 65 67 69 73 74  w copy of regist
81f0: 65 72 20 50 31 20 69 6e 74 6f 20 72 65 67 69 73  er P1 into regis
8200: 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68  ter P2..**.** Th
8210: 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6d  is instruction m
8220: 61 6b 65 73 20 61 20 73 68 61 6c 6c 6f 77 20 63  akes a shallow c
8230: 6f 70 79 20 6f 66 20 74 68 65 20 76 61 6c 75 65  opy of the value
8240: 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75 65 0a  .  If the value.
8250: 2a 2a 20 69 73 20 61 20 73 74 72 69 6e 67 20 6f  ** is a string o
8260: 72 20 62 6c 6f 62 2c 20 74 68 65 6e 20 74 68 65  r blob, then the
8270: 20 63 6f 70 79 20 69 73 20 6f 6e 6c 79 20 61 20   copy is only a 
8280: 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 0a 2a  pointer to the.*
8290: 2a 20 6f 72 69 67 69 6e 61 6c 20 61 6e 64 20 68  * original and h
82a0: 65 6e 63 65 20 69 66 20 74 68 65 20 6f 72 69 67  ence if the orig
82b0: 69 6e 61 6c 20 63 68 61 6e 67 65 73 20 73 6f 20  inal changes so 
82c0: 77 69 6c 6c 20 74 68 65 20 63 6f 70 79 2e 0a 2a  will the copy..*
82d0: 2a 20 57 6f 72 73 65 2c 20 69 66 20 74 68 65 20  * Worse, if the 
82e0: 6f 72 69 67 69 6e 61 6c 20 69 73 20 64 65 61 6c  original is deal
82f0: 6c 6f 63 61 74 65 64 2c 20 74 68 65 20 63 6f 70  located, the cop
8300: 79 20 62 65 63 6f 6d 65 73 20 69 6e 76 61 6c 69  y becomes invali
8310: 64 2e 0a 2a 2a 20 54 68 75 73 20 74 68 65 20 70  d..** Thus the p
8320: 72 6f 67 72 61 6d 20 6d 75 73 74 20 67 75 61 72  rogram must guar
8330: 61 6e 74 65 65 20 74 68 61 74 20 74 68 65 20 6f  antee that the o
8340: 72 69 67 69 6e 61 6c 20 77 69 6c 6c 20 6e 6f 74  riginal will not
8350: 20 63 68 61 6e 67 65 0a 2a 2a 20 64 75 72 69 6e   change.** durin
8360: 67 20 74 68 65 20 6c 69 66 65 74 69 6d 65 20 6f  g the lifetime o
8370: 66 20 74 68 65 20 63 6f 70 79 2e 20 20 55 73 65  f the copy.  Use
8380: 20 4f 50 5f 43 6f 70 79 20 74 6f 20 6d 61 6b 65   OP_Copy to make
8390: 20 61 20 63 6f 6d 70 6c 65 74 65 0a 2a 2a 20 63   a complete.** c
83a0: 6f 70 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  opy..*/.case OP_
83b0: 53 43 6f 70 79 3a 20 7b 20 20 20 20 20 20 20 20  SCopy: {        
83c0: 20 20 20 20 2f 2a 20 69 6e 31 2c 20 6f 75 74 32      /* in1, out2
83d0: 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   */.  pIn1 = &aM
83e0: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70  em[pOp->p1];.  p
83f0: 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
8400: 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p2];.  assert( 
8410: 70 4f 75 74 21 3d 70 49 6e 31 20 29 3b 0a 20 20  pOut!=pIn1 );.  
8420: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68  sqlite3VdbeMemSh
8430: 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20  allowCopy(pOut, 
8440: 70 49 6e 31 2c 20 4d 45 4d 5f 45 70 68 65 6d 29  pIn1, MEM_Ephem)
8450: 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
8460: 44 45 42 55 47 0a 20 20 69 66 28 20 70 4f 75 74  DEBUG.  if( pOut
8470: 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 3d 3d 30 20  ->pScopyFrom==0 
8480: 29 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72  ) pOut->pScopyFr
8490: 6f 6d 20 3d 20 70 49 6e 31 3b 0a 23 65 6e 64 69  om = pIn1;.#endi
84a0: 66 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41  f.  REGISTER_TRA
84b0: 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74  CE(pOp->p2, pOut
84c0: 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
84d0: 2a 20 4f 70 63 6f 64 65 3a 20 52 65 73 75 6c 74  * Opcode: Result
84e0: 52 6f 77 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  Row P1 P2 * * *.
84f0: 2a 2a 0a 2a 2a 20 54 68 65 20 72 65 67 69 73 74  **.** The regist
8500: 65 72 73 20 50 31 20 74 68 72 6f 75 67 68 20 50  ers P1 through P
8510: 31 2b 50 32 2d 31 20 63 6f 6e 74 61 69 6e 20 61  1+P2-1 contain a
8520: 20 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66 0a 2a   single row of.*
8530: 2a 20 72 65 73 75 6c 74 73 2e 20 54 68 69 73 20  * results. This 
8540: 6f 70 63 6f 64 65 20 63 61 75 73 65 73 20 74 68  opcode causes th
8550: 65 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29  e sqlite3_step()
8560: 20 63 61 6c 6c 20 74 6f 20 74 65 72 6d 69 6e 61   call to termina
8570: 74 65 0a 2a 2a 20 77 69 74 68 20 61 6e 20 53 51  te.** with an SQ
8580: 4c 49 54 45 5f 52 4f 57 20 72 65 74 75 72 6e 20  LITE_ROW return 
8590: 63 6f 64 65 20 61 6e 64 20 69 74 20 73 65 74 73  code and it sets
85a0: 20 75 70 20 74 68 65 20 73 71 6c 69 74 65 33 5f   up the sqlite3_
85b0: 73 74 6d 74 0a 2a 2a 20 73 74 72 75 63 74 75 72  stmt.** structur
85c0: 65 20 74 6f 20 70 72 6f 76 69 64 65 20 61 63 63  e to provide acc
85d0: 65 73 73 20 74 6f 20 74 68 65 20 74 6f 70 20 50  ess to the top P
85e0: 31 20 76 61 6c 75 65 73 20 61 73 20 74 68 65 20  1 values as the 
85f0: 72 65 73 75 6c 74 0a 2a 2a 20 72 6f 77 2e 0a 2a  result.** row..*
8600: 2f 0a 63 61 73 65 20 4f 50 5f 52 65 73 75 6c 74  /.case OP_Result
8610: 52 6f 77 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70 4d  Row: {.  Mem *pM
8620: 65 6d 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 61  em;.  int i;.  a
8630: 73 73 65 72 74 28 20 70 2d 3e 6e 52 65 73 43 6f  ssert( p->nResCo
8640: 6c 75 6d 6e 3d 3d 70 4f 70 2d 3e 70 32 20 29 3b  lumn==pOp->p2 );
8650: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
8660: 70 31 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74  p1>0 );.  assert
8670: 28 20 70 4f 70 2d 3e 70 31 2b 70 4f 70 2d 3e 70  ( pOp->p1+pOp->p
8680: 32 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31 20 29 3b 0a  2<=p->nMem+1 );.
8690: 0a 20 20 2f 2a 20 49 66 20 74 68 69 73 20 73 74  .  /* If this st
86a0: 61 74 65 6d 65 6e 74 20 68 61 73 20 76 69 6f 6c  atement has viol
86b0: 61 74 65 64 20 69 6d 6d 65 64 69 61 74 65 20 66  ated immediate f
86c0: 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74  oreign key const
86d0: 72 61 69 6e 74 73 2c 20 64 6f 0a 20 20 2a 2a 20  raints, do.  ** 
86e0: 6e 6f 74 20 72 65 74 75 72 6e 20 74 68 65 20 6e  not return the n
86f0: 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 6d 6f  umber of rows mo
8700: 64 69 66 69 65 64 2e 20 41 6e 64 20 64 6f 20 6e  dified. And do n
8710: 6f 74 20 52 45 4c 45 41 53 45 20 74 68 65 20 73  ot RELEASE the s
8720: 74 61 74 65 6d 65 6e 74 0a 20 20 2a 2a 20 74 72  tatement.  ** tr
8730: 61 6e 73 61 63 74 69 6f 6e 2e 20 49 74 20 6e 65  ansaction. It ne
8740: 65 64 73 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64  eds to be rolled
8750: 20 62 61 63 6b 2e 20 20 2a 2f 0a 20 20 69 66 28   back.  */.  if(
8760: 20 53 51 4c 49 54 45 5f 4f 4b 21 3d 28 72 63 20   SQLITE_OK!=(rc 
8770: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 65  = sqlite3VdbeChe
8780: 63 6b 46 6b 28 70 2c 20 30 29 29 20 29 7b 0a 20  ckFk(p, 0)) ){. 
8790: 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 66     assert( db->f
87a0: 6c 61 67 73 26 53 51 4c 49 54 45 5f 43 6f 75 6e  lags&SQLITE_Coun
87b0: 74 52 6f 77 73 20 29 3b 0a 20 20 20 20 61 73 73  tRows );.    ass
87c0: 65 72 74 28 20 70 2d 3e 75 73 65 73 53 74 6d 74  ert( p->usesStmt
87d0: 4a 6f 75 72 6e 61 6c 20 29 3b 0a 20 20 20 20 62  Journal );.    b
87e0: 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20  reak;.  }..  /* 
87f0: 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f 43 6f  If the SQLITE_Co
8800: 75 6e 74 52 6f 77 73 20 66 6c 61 67 20 69 73 20  untRows flag is 
8810: 73 65 74 20 69 6e 20 73 71 6c 69 74 65 33 2e 66  set in sqlite3.f
8820: 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20  lags mask, then 
8830: 0a 20 20 2a 2a 20 44 4d 4c 20 73 74 61 74 65 6d  .  ** DML statem
8840: 65 6e 74 73 20 69 6e 76 6f 6b 65 20 74 68 69 73  ents invoke this
8850: 20 6f 70 63 6f 64 65 20 74 6f 20 72 65 74 75 72   opcode to retur
8860: 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  n the number of 
8870: 72 6f 77 73 20 0a 20 20 2a 2a 20 6d 6f 64 69 66  rows .  ** modif
8880: 69 65 64 20 74 6f 20 74 68 65 20 75 73 65 72 2e  ied to the user.
8890: 20 54 68 69 73 20 69 73 20 74 68 65 20 6f 6e 6c   This is the onl
88a0: 79 20 77 61 79 20 74 68 61 74 20 61 20 56 4d 20  y way that a VM 
88b0: 74 68 61 74 0a 20 20 2a 2a 20 6f 70 65 6e 73 20  that.  ** opens 
88c0: 61 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e  a statement tran
88d0: 73 61 63 74 69 6f 6e 20 6d 61 79 20 69 6e 76 6f  saction may invo
88e0: 6b 65 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a  ke this opcode..
88f0: 20 20 2a 2a 0a 20 20 2a 2a 20 49 6e 20 63 61 73    **.  ** In cas
8900: 65 20 74 68 69 73 20 69 73 20 73 75 63 68 20 61  e this is such a
8910: 20 73 74 61 74 65 6d 65 6e 74 2c 20 63 6c 6f 73   statement, clos
8920: 65 20 61 6e 79 20 73 74 61 74 65 6d 65 6e 74 20  e any statement 
8930: 74 72 61 6e 73 61 63 74 69 6f 6e 0a 20 20 2a 2a  transaction.  **
8940: 20 6f 70 65 6e 65 64 20 62 79 20 74 68 69 73 20   opened by this 
8950: 56 4d 20 62 65 66 6f 72 65 20 72 65 74 75 72 6e  VM before return
8960: 69 6e 67 20 63 6f 6e 74 72 6f 6c 20 74 6f 20 74  ing control to t
8970: 68 65 20 75 73 65 72 2e 20 54 68 69 73 20 69 73  he user. This is
8980: 20 74 6f 0a 20 20 2a 2a 20 65 6e 73 75 72 65 20   to.  ** ensure 
8990: 74 68 61 74 20 73 74 61 74 65 6d 65 6e 74 2d 74  that statement-t
89a0: 72 61 6e 73 61 63 74 69 6f 6e 73 20 61 72 65 20  ransactions are 
89b0: 61 6c 77 61 79 73 20 6e 65 73 74 65 64 2c 20 6e  always nested, n
89c0: 6f 74 20 6f 76 65 72 6c 61 70 70 69 6e 67 2e 0a  ot overlapping..
89d0: 20 20 2a 2a 20 49 66 20 74 68 65 20 6f 70 65 6e    ** If the open
89e0: 20 73 74 61 74 65 6d 65 6e 74 2d 74 72 61 6e 73   statement-trans
89f0: 61 63 74 69 6f 6e 20 69 73 20 6e 6f 74 20 63 6c  action is not cl
8a00: 6f 73 65 64 20 68 65 72 65 2c 20 74 68 65 6e 20  osed here, then 
8a10: 74 68 65 20 75 73 65 72 0a 20 20 2a 2a 20 6d 61  the user.  ** ma
8a20: 79 20 73 74 65 70 20 61 6e 6f 74 68 65 72 20 56  y step another V
8a30: 4d 20 74 68 61 74 20 6f 70 65 6e 73 20 69 74 73  M that opens its
8a40: 20 6f 77 6e 20 73 74 61 74 65 6d 65 6e 74 20 74   own statement t
8a50: 72 61 6e 73 61 63 74 69 6f 6e 2e 20 54 68 69 73  ransaction. This
8a60: 0a 20 20 2a 2a 20 6d 61 79 20 6c 65 61 64 20 74  .  ** may lead t
8a70: 6f 20 6f 76 65 72 6c 61 70 70 69 6e 67 20 73 74  o overlapping st
8a80: 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74  atement transact
8a90: 69 6f 6e 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  ions..  **.  ** 
8aa0: 54 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74 72  The statement tr
8ab0: 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e 65 76  ansaction is nev
8ac0: 65 72 20 61 20 74 6f 70 2d 6c 65 76 65 6c 20 74  er a top-level t
8ad0: 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 48 65 6e  ransaction.  Hen
8ae0: 63 65 0a 20 20 2a 2a 20 74 68 65 20 52 45 4c 45  ce.  ** the RELE
8af0: 41 53 45 20 63 61 6c 6c 20 62 65 6c 6f 77 20 63  ASE call below c
8b00: 61 6e 20 6e 65 76 65 72 20 66 61 69 6c 2e 0a 20  an never fail.. 
8b10: 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 2d   */.  assert( p-
8b20: 3e 69 53 74 61 74 65 6d 65 6e 74 3d 3d 30 20 7c  >iStatement==0 |
8b30: 7c 20 64 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49  | db->flags&SQLI
8b40: 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20 29 3b 0a  TE_CountRows );.
8b50: 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
8b60: 62 65 43 6c 6f 73 65 53 74 61 74 65 6d 65 6e 74  beCloseStatement
8b70: 28 70 2c 20 53 41 56 45 50 4f 49 4e 54 5f 52 45  (p, SAVEPOINT_RE
8b80: 4c 45 41 53 45 29 3b 0a 20 20 69 66 28 20 4e 45  LEASE);.  if( NE
8b90: 56 45 52 28 72 63 21 3d 53 51 4c 49 54 45 5f 4f  VER(rc!=SQLITE_O
8ba0: 4b 29 20 29 7b 0a 20 20 20 20 62 72 65 61 6b 3b  K) ){.    break;
8bb0: 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 6e 76 61 6c  .  }..  /* Inval
8bc0: 69 64 61 74 65 20 61 6c 6c 20 65 70 68 65 6d 65  idate all epheme
8bd0: 72 61 6c 20 63 75 72 73 6f 72 20 72 6f 77 20 63  ral cursor row c
8be0: 61 63 68 65 73 20 2a 2f 0a 20 20 70 2d 3e 63 61  aches */.  p->ca
8bf0: 63 68 65 43 74 72 20 3d 20 28 70 2d 3e 63 61 63  cheCtr = (p->cac
8c00: 68 65 43 74 72 20 2b 20 32 29 7c 31 3b 0a 0a 20  heCtr + 2)|1;.. 
8c10: 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 74 68   /* Make sure th
8c20: 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74 68 65  e results of the
8c30: 20 63 75 72 72 65 6e 74 20 72 6f 77 20 61 72 65   current row are
8c40: 20 5c 30 30 30 20 74 65 72 6d 69 6e 61 74 65 64   \000 terminated
8c50: 0a 20 20 2a 2a 20 61 6e 64 20 68 61 76 65 20 61  .  ** and have a
8c60: 6e 20 61 73 73 69 67 6e 65 64 20 74 79 70 65 2e  n assigned type.
8c70: 20 20 54 68 65 20 72 65 73 75 6c 74 73 20 61 72    The results ar
8c80: 65 20 64 65 2d 65 70 68 65 6d 65 72 61 6c 69 7a  e de-ephemeraliz
8c90: 65 64 20 61 73 0a 20 20 2a 2a 20 61 73 20 73 69  ed as.  ** as si
8ca0: 64 65 20 65 66 66 65 63 74 2e 0a 20 20 2a 2f 0a  de effect..  */.
8cb0: 20 20 70 4d 65 6d 20 3d 20 70 2d 3e 70 52 65 73    pMem = p->pRes
8cc0: 75 6c 74 53 65 74 20 3d 20 26 61 4d 65 6d 5b 70  ultSet = &aMem[p
8cd0: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 66 6f 72 28 69  Op->p1];.  for(i
8ce0: 3d 30 3b 20 69 3c 70 4f 70 2d 3e 70 32 3b 20 69  =0; i<pOp->p2; i
8cf0: 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  ++){.    assert(
8d00: 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 70 4d 65   memIsValid(&pMe
8d10: 6d 5b 69 5d 29 20 29 3b 0a 20 20 20 20 44 65 65  m[i]) );.    Dee
8d20: 70 68 65 6d 65 72 61 6c 69 7a 65 28 26 70 4d 65  phemeralize(&pMe
8d30: 6d 5b 69 5d 29 3b 0a 20 20 20 20 61 73 73 65 72  m[i]);.    asser
8d40: 74 28 20 28 70 4d 65 6d 5b 69 5d 2e 66 6c 61 67  t( (pMem[i].flag
8d50: 73 20 26 20 4d 45 4d 5f 45 70 68 65 6d 29 3d 3d  s & MEM_Ephem)==
8d60: 30 0a 20 20 20 20 20 20 20 20 20 20 20 20 7c 7c  0.            ||
8d70: 20 28 70 4d 65 6d 5b 69 5d 2e 66 6c 61 67 73 20   (pMem[i].flags 
8d80: 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42  & (MEM_Str|MEM_B
8d90: 6c 6f 62 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20  lob))==0 );.    
8da0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4e 75  sqlite3VdbeMemNu
8db0: 6c 54 65 72 6d 69 6e 61 74 65 28 26 70 4d 65 6d  lTerminate(&pMem
8dc0: 5b 69 5d 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  [i]);.    sqlite
8dd0: 33 56 64 62 65 4d 65 6d 53 74 6f 72 65 54 79 70  3VdbeMemStoreTyp
8de0: 65 28 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 20  e(&pMem[i]);.   
8df0: 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
8e00: 70 4f 70 2d 3e 70 31 2b 69 2c 20 26 70 4d 65 6d  pOp->p1+i, &pMem
8e10: 5b 69 5d 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20  [i]);.  }.  if( 
8e20: 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64  db->mallocFailed
8e30: 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
8e40: 0a 20 20 2f 2a 20 52 65 74 75 72 6e 20 53 51 4c  .  /* Return SQL
8e50: 49 54 45 5f 52 4f 57 0a 20 20 2a 2f 0a 20 20 70  ITE_ROW.  */.  p
8e60: 2d 3e 70 63 20 3d 20 70 63 20 2b 20 31 3b 0a 20  ->pc = pc + 1;. 
8e70: 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 52 4f 57   rc = SQLITE_ROW
8e80: 3b 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65  ;.  goto vdbe_re
8e90: 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  turn;.}../* Opco
8ea0: 64 65 3a 20 43 6f 6e 63 61 74 20 50 31 20 50 32  de: Concat P1 P2
8eb0: 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 64   P3 * *.**.** Ad
8ec0: 64 20 74 68 65 20 74 65 78 74 20 69 6e 20 72 65  d the text in re
8ed0: 67 69 73 74 65 72 20 50 31 20 6f 6e 74 6f 20 74  gister P1 onto t
8ee0: 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 74 65  he end of the te
8ef0: 78 74 20 69 6e 0a 2a 2a 20 72 65 67 69 73 74 65  xt in.** registe
8f00: 72 20 50 32 20 61 6e 64 20 73 74 6f 72 65 20 74  r P2 and store t
8f10: 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67  he result in reg
8f20: 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20  ister P3..** If 
8f30: 65 69 74 68 65 72 20 74 68 65 20 50 31 20 6f 72  either the P1 or
8f40: 20 50 32 20 74 65 78 74 20 61 72 65 20 4e 55 4c   P2 text are NUL
8f50: 4c 20 74 68 65 6e 20 73 74 6f 72 65 20 4e 55 4c  L then store NUL
8f60: 4c 20 69 6e 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 20  L in P3..**.**  
8f70: 20 50 33 20 3d 20 50 32 20 7c 7c 20 50 31 0a 2a   P3 = P2 || P1.*
8f80: 2a 0a 2a 2a 20 49 74 20 69 73 20 69 6c 6c 65 67  *.** It is illeg
8f90: 61 6c 20 66 6f 72 20 50 31 20 61 6e 64 20 50 33  al for P1 and P3
8fa0: 20 74 6f 20 62 65 20 74 68 65 20 73 61 6d 65 20   to be the same 
8fb0: 72 65 67 69 73 74 65 72 2e 20 53 6f 6d 65 74 69  register. Someti
8fc0: 6d 65 73 2c 0a 2a 2a 20 69 66 20 50 33 20 69 73  mes,.** if P3 is
8fd0: 20 74 68 65 20 73 61 6d 65 20 72 65 67 69 73 74   the same regist
8fe0: 65 72 20 61 73 20 50 32 2c 20 74 68 65 20 69 6d  er as P2, the im
8ff0: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 69 73 20  plementation is 
9000: 61 62 6c 65 0a 2a 2a 20 74 6f 20 61 76 6f 69 64  able.** to avoid
9010: 20 61 20 6d 65 6d 63 70 79 28 29 2e 0a 2a 2f 0a   a memcpy()..*/.
9020: 63 61 73 65 20 4f 50 5f 43 6f 6e 63 61 74 3a 20  case OP_Concat: 
9030: 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73  {           /* s
9040: 61 6d 65 20 61 73 20 54 4b 5f 43 4f 4e 43 41 54  ame as TK_CONCAT
9050: 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33  , in1, in2, out3
9060: 20 2a 2f 0a 20 20 69 36 34 20 6e 42 79 74 65 3b   */.  i64 nByte;
9070: 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ..  pIn1 = &aMem
9080: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e  [pOp->p1];.  pIn
9090: 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  2 = &aMem[pOp->p
90a0: 32 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d  2];.  pOut = &aM
90b0: 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61  em[pOp->p3];.  a
90c0: 73 73 65 72 74 28 20 70 49 6e 31 21 3d 70 4f 75  ssert( pIn1!=pOu
90d0: 74 20 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31  t );.  if( (pIn1
90e0: 2d 3e 66 6c 61 67 73 20 7c 20 70 49 6e 32 2d 3e  ->flags | pIn2->
90f0: 66 6c 61 67 73 29 20 26 20 4d 45 4d 5f 4e 75 6c  flags) & MEM_Nul
9100: 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  l ){.    sqlite3
9110: 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70  VdbeMemSetNull(p
9120: 4f 75 74 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b  Out);.    break;
9130: 0a 20 20 7d 0a 20 20 69 66 28 20 45 78 70 61 6e  .  }.  if( Expan
9140: 64 42 6c 6f 62 28 70 49 6e 31 29 20 7c 7c 20 45  dBlob(pIn1) || E
9150: 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 32 29 20  xpandBlob(pIn2) 
9160: 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
9170: 20 53 74 72 69 6e 67 69 66 79 28 70 49 6e 31 2c   Stringify(pIn1,
9180: 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 53 74   encoding);.  St
9190: 72 69 6e 67 69 66 79 28 70 49 6e 32 2c 20 65 6e  ringify(pIn2, en
91a0: 63 6f 64 69 6e 67 29 3b 0a 20 20 6e 42 79 74 65  coding);.  nByte
91b0: 20 3d 20 70 49 6e 31 2d 3e 6e 20 2b 20 70 49 6e   = pIn1->n + pIn
91c0: 32 2d 3e 6e 3b 0a 20 20 69 66 28 20 6e 42 79 74  2->n;.  if( nByt
91d0: 65 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c  e>db->aLimit[SQL
91e0: 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48  ITE_LIMIT_LENGTH
91f0: 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f  ] ){.    goto to
9200: 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 4d 65 6d  o_big;.  }.  Mem
9210: 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74  SetTypeFlag(pOut
9220: 2c 20 4d 45 4d 5f 53 74 72 29 3b 0a 20 20 69 66  , MEM_Str);.  if
9230: 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  ( sqlite3VdbeMem
9240: 47 72 6f 77 28 70 4f 75 74 2c 20 28 69 6e 74 29  Grow(pOut, (int)
9250: 6e 42 79 74 65 2b 32 2c 20 70 4f 75 74 3d 3d 70  nByte+2, pOut==p
9260: 49 6e 32 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f  In2) ){.    goto
9270: 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 69   no_mem;.  }.  i
9280: 66 28 20 70 4f 75 74 21 3d 70 49 6e 32 20 29 7b  f( pOut!=pIn2 ){
9290: 0a 20 20 20 20 6d 65 6d 63 70 79 28 70 4f 75 74  .    memcpy(pOut
92a0: 2d 3e 7a 2c 20 70 49 6e 32 2d 3e 7a 2c 20 70 49  ->z, pIn2->z, pI
92b0: 6e 32 2d 3e 6e 29 3b 0a 20 20 7d 0a 20 20 6d 65  n2->n);.  }.  me
92c0: 6d 63 70 79 28 26 70 4f 75 74 2d 3e 7a 5b 70 49  mcpy(&pOut->z[pI
92d0: 6e 32 2d 3e 6e 5d 2c 20 70 49 6e 31 2d 3e 7a 2c  n2->n], pIn1->z,
92e0: 20 70 49 6e 31 2d 3e 6e 29 3b 0a 20 20 70 4f 75   pIn1->n);.  pOu
92f0: 74 2d 3e 7a 5b 6e 42 79 74 65 5d 20 3d 20 30 3b  t->z[nByte] = 0;
9300: 0a 20 20 70 4f 75 74 2d 3e 7a 5b 6e 42 79 74 65  .  pOut->z[nByte
9310: 2b 31 5d 20 3d 20 30 3b 0a 20 20 70 4f 75 74 2d  +1] = 0;.  pOut-
9320: 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 54 65  >flags |= MEM_Te
9330: 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20  rm;.  pOut->n = 
9340: 28 69 6e 74 29 6e 42 79 74 65 3b 0a 20 20 70 4f  (int)nByte;.  pO
9350: 75 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69  ut->enc = encodi
9360: 6e 67 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58  ng;.  UPDATE_MAX
9370: 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b  _BLOBSIZE(pOut);
9380: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
9390: 4f 70 63 6f 64 65 3a 20 41 64 64 20 50 31 20 50  Opcode: Add P1 P
93a0: 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41  2 P3 * *.**.** A
93b0: 64 64 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  dd the value in 
93c0: 72 65 67 69 73 74 65 72 20 50 31 20 74 6f 20 74  register P1 to t
93d0: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
93e0: 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73  ster P2.** and s
93f0: 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20  tore the result 
9400: 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  in register P3..
9410: 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70  ** If either inp
9420: 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20  ut is NULL, the 
9430: 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a  result is NULL..
9440: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 75  */./* Opcode: Mu
9450: 6c 74 69 70 6c 79 20 50 31 20 50 32 20 50 33 20  ltiply P1 P2 P3 
9460: 2a 20 2a 0a 2a 2a 0a 2a 2a 0a 2a 2a 20 4d 75 6c  * *.**.**.** Mul
9470: 74 69 70 6c 79 20 74 68 65 20 76 61 6c 75 65 20  tiply the value 
9480: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 62  in register P1 b
9490: 79 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  y the value in r
94a0: 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e  egister P2.** an
94b0: 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75  d store the resu
94c0: 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  lt in register P
94d0: 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20  3..** If either 
94e0: 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74  input is NULL, t
94f0: 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c  he result is NUL
9500: 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  L..*/./* Opcode:
9510: 20 53 75 62 74 72 61 63 74 20 50 31 20 50 32 20   Subtract P1 P2 
9520: 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 75 62  P3 * *.**.** Sub
9530: 74 72 61 63 74 20 74 68 65 20 76 61 6c 75 65 20  tract the value 
9540: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 66  in register P1 f
9550: 72 6f 6d 20 74 68 65 20 76 61 6c 75 65 20 69 6e  rom the value in
9560: 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20   register P2.** 
9570: 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65  and store the re
9580: 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72  sult in register
9590: 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65   P3..** If eithe
95a0: 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c  r input is NULL,
95b0: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e   the result is N
95c0: 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ULL..*/./* Opcod
95d0: 65 3a 20 44 69 76 69 64 65 20 50 31 20 50 32 20  e: Divide P1 P2 
95e0: 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 69 76  P3 * *.**.** Div
95f0: 69 64 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e  ide the value in
9600: 20 72 65 67 69 73 74 65 72 20 50 31 20 62 79 20   register P1 by 
9610: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
9620: 69 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20  ister P2.** and 
9630: 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74  store the result
9640: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20   in register P3 
9650: 28 50 33 3d 50 32 2f 50 31 29 2e 20 49 66 20 74  (P3=P2/P1). If t
9660: 68 65 20 76 61 6c 75 65 20 69 6e 20 0a 2a 2a 20  he value in .** 
9670: 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20 7a  register P1 is z
9680: 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 72 65  ero, then the re
9690: 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 20 49 66  sult is NULL. If
96a0: 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73   either input is
96b0: 20 0a 2a 2a 20 4e 55 4c 4c 2c 20 74 68 65 20 72   .** NULL, the r
96c0: 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a  esult is NULL..*
96d0: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 6d  /./* Opcode: Rem
96e0: 61 69 6e 64 65 72 20 50 31 20 50 32 20 50 33 20  ainder P1 P2 P3 
96f0: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 75 74  * *.**.** Comput
9700: 65 20 74 68 65 20 72 65 6d 61 69 6e 64 65 72 20  e the remainder 
9710: 61 66 74 65 72 20 69 6e 74 65 67 65 72 20 64 69  after integer di
9720: 76 69 73 69 6f 6e 20 6f 66 20 74 68 65 20 76 61  vision of the va
9730: 6c 75 65 20 69 6e 0a 2a 2a 20 72 65 67 69 73 74  lue in.** regist
9740: 65 72 20 50 31 20 62 79 20 74 68 65 20 76 61 6c  er P1 by the val
9750: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
9760: 32 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20  2 and store the 
9770: 72 65 73 75 6c 74 20 69 6e 20 50 33 2e 20 0a 2a  result in P3. .*
9780: 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 69  * If the value i
9790: 6e 20 72 65 67 69 73 74 65 72 20 50 32 20 69 73  n register P2 is
97a0: 20 7a 65 72 6f 20 74 68 65 20 72 65 73 75 6c 74   zero the result
97b0: 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 20 49 66 20   is NULL..** If 
97c0: 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69  either operand i
97d0: 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75  s NULL, the resu
97e0: 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63  lt is NULL..*/.c
97f0: 61 73 65 20 4f 50 5f 41 64 64 3a 20 20 20 20 20  ase OP_Add:     
9800: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
9810: 20 73 61 6d 65 20 61 73 20 54 4b 5f 50 4c 55 53   same as TK_PLUS
9820: 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33  , in1, in2, out3
9830: 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 75 62 74   */.case OP_Subt
9840: 72 61 63 74 3a 20 20 20 20 20 20 20 20 20 20 20  ract:           
9850: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
9860: 5f 4d 49 4e 55 53 2c 20 69 6e 31 2c 20 69 6e 32  _MINUS, in1, in2
9870: 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f  , out3 */.case O
9880: 50 5f 4d 75 6c 74 69 70 6c 79 3a 20 20 20 20 20  P_Multiply:     
9890: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
98a0: 20 61 73 20 54 4b 5f 53 54 41 52 2c 20 69 6e 31   as TK_STAR, in1
98b0: 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63  , in2, out3 */.c
98c0: 61 73 65 20 4f 50 5f 44 69 76 69 64 65 3a 20 20  ase OP_Divide:  
98d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
98e0: 20 73 61 6d 65 20 61 73 20 54 4b 5f 53 4c 41 53   same as TK_SLAS
98f0: 48 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74  H, in1, in2, out
9900: 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 6d  3 */.case OP_Rem
9910: 61 69 6e 64 65 72 3a 20 7b 20 20 20 20 20 20 20  ainder: {       
9920: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
9930: 4b 5f 52 45 4d 2c 20 69 6e 31 2c 20 69 6e 32 2c  K_REM, in1, in2,
9940: 20 6f 75 74 33 20 2a 2f 0a 20 20 69 6e 74 20 66   out3 */.  int f
9950: 6c 61 67 73 3b 20 20 20 20 20 20 2f 2a 20 43 6f  lags;      /* Co
9960: 6d 62 69 6e 65 64 20 4d 45 4d 5f 2a 20 66 6c 61  mbined MEM_* fla
9970: 67 73 20 66 72 6f 6d 20 62 6f 74 68 20 69 6e 70  gs from both inp
9980: 75 74 73 20 2a 2f 0a 20 20 69 36 34 20 69 41 3b  uts */.  i64 iA;
9990: 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 74 65           /* Inte
99a0: 67 65 72 20 76 61 6c 75 65 20 6f 66 20 6c 65 66  ger value of lef
99b0: 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 69  t operand */.  i
99c0: 36 34 20 69 42 3b 20 20 20 20 20 20 20 20 20 2f  64 iB;         /
99d0: 2a 20 49 6e 74 65 67 65 72 20 76 61 6c 75 65 20  * Integer value 
99e0: 6f 66 20 72 69 67 68 74 20 6f 70 65 72 61 6e 64  of right operand
99f0: 20 2a 2f 0a 20 20 64 6f 75 62 6c 65 20 72 41 3b   */.  double rA;
9a00: 20 20 20 20 20 20 2f 2a 20 52 65 61 6c 20 76 61        /* Real va
9a10: 6c 75 65 20 6f 66 20 6c 65 66 74 20 6f 70 65 72  lue of left oper
9a20: 61 6e 64 20 2a 2f 0a 20 20 64 6f 75 62 6c 65 20  and */.  double 
9a30: 72 42 3b 20 20 20 20 20 20 2f 2a 20 52 65 61 6c  rB;      /* Real
9a40: 20 76 61 6c 75 65 20 6f 66 20 72 69 67 68 74 20   value of right 
9a50: 6f 70 65 72 61 6e 64 20 2a 2f 0a 0a 20 20 70 49  operand */..  pI
9a60: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
9a70: 70 31 5d 3b 0a 20 20 61 70 70 6c 79 4e 75 6d 65  p1];.  applyNume
9a80: 72 69 63 41 66 66 69 6e 69 74 79 28 70 49 6e 31  ricAffinity(pIn1
9a90: 29 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65  );.  pIn2 = &aMe
9aa0: 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 70  m[pOp->p2];.  ap
9ab0: 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69  plyNumericAffini
9ac0: 74 79 28 70 49 6e 32 29 3b 0a 20 20 70 4f 75 74  ty(pIn2);.  pOut
9ad0: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
9ae0: 5d 3b 0a 20 20 66 6c 61 67 73 20 3d 20 70 49 6e  ];.  flags = pIn
9af0: 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49 6e 32 2d  1->flags | pIn2-
9b00: 3e 66 6c 61 67 73 3b 0a 20 20 69 66 28 20 28 66  >flags;.  if( (f
9b10: 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29  lags & MEM_Null)
9b20: 21 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68  !=0 ) goto arith
9b30: 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f  metic_result_is_
9b40: 6e 75 6c 6c 3b 0a 20 20 69 66 28 20 28 70 49 6e  null;.  if( (pIn
9b50: 31 2d 3e 66 6c 61 67 73 20 26 20 70 49 6e 32 2d  1->flags & pIn2-
9b60: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
9b70: 29 3d 3d 4d 45 4d 5f 49 6e 74 20 29 7b 0a 20 20  )==MEM_Int ){.  
9b80: 20 20 69 41 20 3d 20 70 49 6e 31 2d 3e 75 2e 69    iA = pIn1->u.i
9b90: 3b 0a 20 20 20 20 69 42 20 3d 20 70 49 6e 32 2d  ;.    iB = pIn2-
9ba0: 3e 75 2e 69 3b 0a 20 20 20 20 73 77 69 74 63 68  >u.i;.    switch
9bb0: 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b  ( pOp->opcode ){
9bc0: 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 41  .      case OP_A
9bd0: 64 64 3a 20 20 20 20 20 20 20 69 66 28 20 73 71  dd:       if( sq
9be0: 6c 69 74 65 33 41 64 64 49 6e 74 36 34 28 26 69  lite3AddInt64(&i
9bf0: 42 2c 69 41 29 20 29 20 67 6f 74 6f 20 66 70 5f  B,iA) ) goto fp_
9c00: 6d 61 74 68 3b 20 20 62 72 65 61 6b 3b 0a 20 20  math;  break;.  
9c10: 20 20 20 20 63 61 73 65 20 4f 50 5f 53 75 62 74      case OP_Subt
9c20: 72 61 63 74 3a 20 20 69 66 28 20 73 71 6c 69 74  ract:  if( sqlit
9c30: 65 33 53 75 62 49 6e 74 36 34 28 26 69 42 2c 69  e3SubInt64(&iB,i
9c40: 41 29 20 29 20 67 6f 74 6f 20 66 70 5f 6d 61 74  A) ) goto fp_mat
9c50: 68 3b 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20  h;  break;.     
9c60: 20 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70 6c   case OP_Multipl
9c70: 79 3a 20 20 69 66 28 20 73 71 6c 69 74 65 33 4d  y:  if( sqlite3M
9c80: 75 6c 49 6e 74 36 34 28 26 69 42 2c 69 41 29 20  ulInt64(&iB,iA) 
9c90: 29 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68 3b 20  ) goto fp_math; 
9ca0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61   break;.      ca
9cb0: 73 65 20 4f 50 5f 44 69 76 69 64 65 3a 20 7b 0a  se OP_Divide: {.
9cc0: 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d          if( iA==
9cd0: 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d 65  0 ) goto arithme
9ce0: 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75  tic_result_is_nu
9cf0: 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  ll;.        if( 
9d00: 69 41 3d 3d 2d 31 20 26 26 20 69 42 3d 3d 53 4d  iA==-1 && iB==SM
9d10: 41 4c 4c 45 53 54 5f 49 4e 54 36 34 20 29 20 67  ALLEST_INT64 ) g
9d20: 6f 74 6f 20 66 70 5f 6d 61 74 68 3b 0a 20 20 20  oto fp_math;.   
9d30: 20 20 20 20 20 69 42 20 2f 3d 20 69 41 3b 0a 20       iB /= iA;. 
9d40: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
9d50: 20 20 20 20 7d 0a 20 20 20 20 20 20 64 65 66 61      }.      defa
9d60: 75 6c 74 3a 20 7b 0a 20 20 20 20 20 20 20 20 69  ult: {.        i
9d70: 66 28 20 69 41 3d 3d 30 20 29 20 67 6f 74 6f 20  f( iA==0 ) goto 
9d80: 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c  arithmetic_resul
9d90: 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20  t_is_null;.     
9da0: 20 20 20 69 66 28 20 69 41 3d 3d 2d 31 20 29 20     if( iA==-1 ) 
9db0: 69 41 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20  iA = 1;.        
9dc0: 69 42 20 25 3d 20 69 41 3b 0a 20 20 20 20 20 20  iB %= iA;.      
9dd0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d    break;.      }
9de0: 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f 75 74 2d  .    }.    pOut-
9df0: 3e 75 2e 69 20 3d 20 69 42 3b 0a 20 20 20 20 4d  >u.i = iB;.    M
9e00: 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f  emSetTypeFlag(pO
9e10: 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20  ut, MEM_Int);.  
9e20: 7d 65 6c 73 65 7b 0a 66 70 5f 6d 61 74 68 3a 0a  }else{.fp_math:.
9e30: 20 20 20 20 72 41 20 3d 20 73 71 6c 69 74 65 33      rA = sqlite3
9e40: 56 64 62 65 52 65 61 6c 56 61 6c 75 65 28 70 49  VdbeRealValue(pI
9e50: 6e 31 29 3b 0a 20 20 20 20 72 42 20 3d 20 73 71  n1);.    rB = sq
9e60: 6c 69 74 65 33 56 64 62 65 52 65 61 6c 56 61 6c  lite3VdbeRealVal
9e70: 75 65 28 70 49 6e 32 29 3b 0a 20 20 20 20 73 77  ue(pIn2);.    sw
9e80: 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  itch( pOp->opcod
9e90: 65 20 29 7b 0a 20 20 20 20 20 20 63 61 73 65 20  e ){.      case 
9ea0: 4f 50 5f 41 64 64 3a 20 20 20 20 20 20 20 20 20  OP_Add:         
9eb0: 72 42 20 2b 3d 20 72 41 3b 20 20 20 20 20 20 20  rB += rA;       
9ec0: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73  break;.      cas
9ed0: 65 20 4f 50 5f 53 75 62 74 72 61 63 74 3a 20 20  e OP_Subtract:  
9ee0: 20 20 72 42 20 2d 3d 20 72 41 3b 20 20 20 20 20    rB -= rA;     
9ef0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63    break;.      c
9f00: 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a  ase OP_Multiply:
9f10: 20 20 20 20 72 42 20 2a 3d 20 72 41 3b 20 20 20      rB *= rA;   
9f20: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
9f30: 20 63 61 73 65 20 4f 50 5f 44 69 76 69 64 65 3a   case OP_Divide:
9f40: 20 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 28 64   {.        /* (d
9f50: 6f 75 62 6c 65 29 30 20 49 6e 20 63 61 73 65 20  ouble)0 In case 
9f60: 6f 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  of SQLITE_OMIT_F
9f70: 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 2e 2e 2e  LOATING_POINT...
9f80: 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20   */.        if( 
9f90: 72 41 3d 3d 28 64 6f 75 62 6c 65 29 30 20 29 20  rA==(double)0 ) 
9fa0: 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f  goto arithmetic_
9fb0: 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a  result_is_null;.
9fc0: 20 20 20 20 20 20 20 20 72 42 20 2f 3d 20 72 41          rB /= rA
9fd0: 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b  ;.        break;
9fe0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 64  .      }.      d
9ff0: 65 66 61 75 6c 74 3a 20 7b 0a 20 20 20 20 20 20  efault: {.      
a000: 20 20 69 41 20 3d 20 28 69 36 34 29 72 41 3b 0a    iA = (i64)rA;.
a010: 20 20 20 20 20 20 20 20 69 42 20 3d 20 28 69 36          iB = (i6
a020: 34 29 72 42 3b 0a 20 20 20 20 20 20 20 20 69 66  4)rB;.        if
a030: 28 20 69 41 3d 3d 30 20 29 20 67 6f 74 6f 20 61  ( iA==0 ) goto a
a040: 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74  rithmetic_result
a050: 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20  _is_null;.      
a060: 20 20 69 66 28 20 69 41 3d 3d 2d 31 20 29 20 69    if( iA==-1 ) i
a070: 41 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 72  A = 1;.        r
a080: 42 20 3d 20 28 64 6f 75 62 6c 65 29 28 69 42 20  B = (double)(iB 
a090: 25 20 69 41 29 3b 0a 20 20 20 20 20 20 20 20 62  % iA);.        b
a0a0: 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20  reak;.      }.  
a0b0: 20 20 7d 0a 23 69 66 64 65 66 20 53 51 4c 49 54    }.#ifdef SQLIT
a0c0: 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f  E_OMIT_FLOATING_
a0d0: 50 4f 49 4e 54 0a 20 20 20 20 70 4f 75 74 2d 3e  POINT.    pOut->
a0e0: 75 2e 69 20 3d 20 72 42 3b 0a 20 20 20 20 4d 65  u.i = rB;.    Me
a0f0: 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75  mSetTypeFlag(pOu
a100: 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 23 65 6c  t, MEM_Int);.#el
a110: 73 65 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74  se.    if( sqlit
a120: 65 33 49 73 4e 61 4e 28 72 42 29 20 29 7b 0a 20  e3IsNaN(rB) ){. 
a130: 20 20 20 20 20 67 6f 74 6f 20 61 72 69 74 68 6d       goto arithm
a140: 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e  etic_result_is_n
a150: 75 6c 6c 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70  ull;.    }.    p
a160: 4f 75 74 2d 3e 72 20 3d 20 72 42 3b 0a 20 20 20  Out->r = rB;.   
a170: 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
a180: 70 4f 75 74 2c 20 4d 45 4d 5f 52 65 61 6c 29 3b  pOut, MEM_Real);
a190: 0a 20 20 20 20 69 66 28 20 28 66 6c 61 67 73 20  .    if( (flags 
a1a0: 26 20 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30 20 29  & MEM_Real)==0 )
a1b0: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  {.      sqlite3V
a1c0: 64 62 65 49 6e 74 65 67 65 72 41 66 66 69 6e 69  dbeIntegerAffini
a1d0: 74 79 28 70 4f 75 74 29 3b 0a 20 20 20 20 7d 0a  ty(pOut);.    }.
a1e0: 23 65 6e 64 69 66 0a 20 20 7d 0a 20 20 62 72 65  #endif.  }.  bre
a1f0: 61 6b 3b 0a 0a 61 72 69 74 68 6d 65 74 69 63 5f  ak;..arithmetic_
a200: 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3a 0a  result_is_null:.
a210: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
a220: 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20  SetNull(pOut);. 
a230: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
a240: 63 6f 64 65 3a 20 43 6f 6c 6c 53 65 71 20 2a 20  code: CollSeq * 
a250: 2a 20 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73  * P4.**.** P4 is
a260: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20   a pointer to a 
a270: 43 6f 6c 6c 53 65 71 20 73 74 72 75 63 74 2e 20  CollSeq struct. 
a280: 49 66 20 74 68 65 20 6e 65 78 74 20 63 61 6c 6c  If the next call
a290: 20 74 6f 20 61 20 75 73 65 72 20 66 75 6e 63 74   to a user funct
a2a0: 69 6f 6e 0a 2a 2a 20 6f 72 20 61 67 67 72 65 67  ion.** or aggreg
a2b0: 61 74 65 20 63 61 6c 6c 73 20 73 71 6c 69 74 65  ate calls sqlite
a2c0: 33 47 65 74 46 75 6e 63 43 6f 6c 6c 53 65 71 28  3GetFuncCollSeq(
a2d0: 29 2c 20 74 68 69 73 20 63 6f 6c 6c 61 74 69 6f  ), this collatio
a2e0: 6e 20 73 65 71 75 65 6e 63 65 20 77 69 6c 6c 0a  n sequence will.
a2f0: 2a 2a 20 62 65 20 72 65 74 75 72 6e 65 64 2e 20  ** be returned. 
a300: 54 68 69 73 20 69 73 20 75 73 65 64 20 62 79 20  This is used by 
a310: 74 68 65 20 62 75 69 6c 74 2d 69 6e 20 6d 69 6e  the built-in min
a320: 28 29 2c 20 6d 61 78 28 29 20 61 6e 64 20 6e 75  (), max() and nu
a330: 6c 6c 69 66 28 29 0a 2a 2a 20 66 75 6e 63 74 69  llif().** functi
a340: 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 69  ons..**.** The i
a350: 6e 74 65 72 66 61 63 65 20 75 73 65 64 20 62 79  nterface used by
a360: 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74   the implementat
a370: 69 6f 6e 20 6f 66 20 74 68 65 20 61 66 6f 72 65  ion of the afore
a380: 6d 65 6e 74 69 6f 6e 65 64 20 66 75 6e 63 74 69  mentioned functi
a390: 6f 6e 73 0a 2a 2a 20 74 6f 20 72 65 74 72 69 65  ons.** to retrie
a3a0: 76 65 20 74 68 65 20 63 6f 6c 6c 61 74 69 6f 6e  ve the collation
a3b0: 20 73 65 71 75 65 6e 63 65 20 73 65 74 20 62 79   sequence set by
a3c0: 20 74 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20   this opcode is 
a3d0: 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65 0a 2a 2a  not available.**
a3e0: 20 70 75 62 6c 69 63 6c 79 2c 20 6f 6e 6c 79 20   publicly, only 
a3f0: 74 6f 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e  to user function
a400: 73 20 64 65 66 69 6e 65 64 20 69 6e 20 66 75 6e  s defined in fun
a410: 63 2e 63 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  c.c..*/.case OP_
a420: 43 6f 6c 6c 53 65 71 3a 20 7b 0a 20 20 61 73 73  CollSeq: {.  ass
a430: 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65  ert( pOp->p4type
a440: 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51 20 29 3b 0a  ==P4_COLLSEQ );.
a450: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
a460: 70 63 6f 64 65 3a 20 46 75 6e 63 74 69 6f 6e 20  pcode: Function 
a470: 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
a480: 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 61 20 75 73  *.** Invoke a us
a490: 65 72 20 66 75 6e 63 74 69 6f 6e 20 28 50 34 20  er function (P4 
a4a0: 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
a4b0: 61 20 46 75 6e 63 74 69 6f 6e 20 73 74 72 75 63  a Function struc
a4c0: 74 75 72 65 20 74 68 61 74 0a 2a 2a 20 64 65 66  ture that.** def
a4d0: 69 6e 65 73 20 74 68 65 20 66 75 6e 63 74 69 6f  ines the functio
a4e0: 6e 29 20 77 69 74 68 20 50 35 20 61 72 67 75 6d  n) with P5 argum
a4f0: 65 6e 74 73 20 74 61 6b 65 6e 20 66 72 6f 6d 20  ents taken from 
a500: 72 65 67 69 73 74 65 72 20 50 32 20 61 6e 64 0a  register P2 and.
a510: 2a 2a 20 73 75 63 63 65 73 73 6f 72 73 2e 20 20  ** successors.  
a520: 54 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68  The result of th
a530: 65 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 73 74  e function is st
a540: 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
a550: 20 50 33 2e 0a 2a 2a 20 52 65 67 69 73 74 65 72   P3..** Register
a560: 20 50 33 20 6d 75 73 74 20 6e 6f 74 20 62 65 20   P3 must not be 
a570: 6f 6e 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74  one of the funct
a580: 69 6f 6e 20 69 6e 70 75 74 73 2e 0a 2a 2a 0a 2a  ion inputs..**.*
a590: 2a 20 50 31 20 69 73 20 61 20 33 32 2d 62 69 74  * P1 is a 32-bit
a5a0: 20 62 69 74 6d 61 73 6b 20 69 6e 64 69 63 61 74   bitmask indicat
a5b0: 69 6e 67 20 77 68 65 74 68 65 72 20 6f 72 20 6e  ing whether or n
a5c0: 6f 74 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74  ot each argument
a5d0: 20 74 6f 20 74 68 65 20 0a 2a 2a 20 66 75 6e 63   to the .** func
a5e0: 74 69 6f 6e 20 77 61 73 20 64 65 74 65 72 6d 69  tion was determi
a5f0: 6e 65 64 20 74 6f 20 62 65 20 63 6f 6e 73 74 61  ned to be consta
a600: 6e 74 20 61 74 20 63 6f 6d 70 69 6c 65 20 74 69  nt at compile ti
a610: 6d 65 2e 20 49 66 20 74 68 65 20 66 69 72 73 74  me. If the first
a620: 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 77 61 73  .** argument was
a630: 20 63 6f 6e 73 74 61 6e 74 20 74 68 65 6e 20 62   constant then b
a640: 69 74 20 30 20 6f 66 20 50 31 20 69 73 20 73 65  it 0 of P1 is se
a650: 74 2e 20 54 68 69 73 20 69 73 20 75 73 65 64 20  t. This is used 
a660: 74 6f 20 64 65 74 65 72 6d 69 6e 65 0a 2a 2a 20  to determine.** 
a670: 77 68 65 74 68 65 72 20 6d 65 74 61 20 64 61 74  whether meta dat
a680: 61 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  a associated wit
a690: 68 20 61 20 75 73 65 72 20 66 75 6e 63 74 69 6f  h a user functio
a6a0: 6e 20 61 72 67 75 6d 65 6e 74 20 75 73 69 6e 67  n argument using
a6b0: 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f   the.** sqlite3_
a6c0: 73 65 74 5f 61 75 78 64 61 74 61 28 29 20 41 50  set_auxdata() AP
a6d0: 49 20 6d 61 79 20 62 65 20 73 61 66 65 6c 79 20  I may be safely 
a6e0: 72 65 74 61 69 6e 65 64 20 75 6e 74 69 6c 20 74  retained until t
a6f0: 68 65 20 6e 65 78 74 0a 2a 2a 20 69 6e 76 6f 63  he next.** invoc
a700: 61 74 69 6f 6e 20 6f 66 20 74 68 69 73 20 6f 70  ation of this op
a710: 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  code..**.** See 
a720: 61 6c 73 6f 3a 20 41 67 67 53 74 65 70 20 61 6e  also: AggStep an
a730: 64 20 41 67 67 46 69 6e 61 6c 0a 2a 2f 0a 63 61  d AggFinal.*/.ca
a740: 73 65 20 4f 50 5f 46 75 6e 63 74 69 6f 6e 3a 20  se OP_Function: 
a750: 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 4d 65 6d  {.  int i;.  Mem
a760: 20 2a 70 41 72 67 3b 0a 20 20 73 71 6c 69 74 65   *pArg;.  sqlite
a770: 33 5f 63 6f 6e 74 65 78 74 20 63 74 78 3b 0a 20  3_context ctx;. 
a780: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a   sqlite3_value *
a790: 2a 61 70 56 61 6c 3b 0a 20 20 69 6e 74 20 6e 3b  *apVal;.  int n;
a7a0: 0a 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 35 3b  ..  n = pOp->p5;
a7b0: 0a 20 20 61 70 56 61 6c 20 3d 20 70 2d 3e 61 70  .  apVal = p->ap
a7c0: 41 72 67 3b 0a 20 20 61 73 73 65 72 74 28 20 61  Arg;.  assert( a
a7d0: 70 56 61 6c 20 7c 7c 20 6e 3d 3d 30 20 29 3b 0a  pVal || n==0 );.
a7e0: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
a7f0: 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d  3>0 && pOp->p3<=
a800: 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 4f 75  p->nMem );.  pOu
a810: 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
a820: 33 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f  3];.  memAboutTo
a830: 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b  Change(p, pOut);
a840: 0a 0a 20 20 61 73 73 65 72 74 28 20 6e 3d 3d 30  ..  assert( n==0
a850: 20 7c 7c 20 28 70 4f 70 2d 3e 70 32 3e 30 20 26   || (pOp->p2>0 &
a860: 26 20 70 4f 70 2d 3e 70 32 2b 6e 3c 3d 70 2d 3e  & pOp->p2+n<=p->
a870: 6e 4d 65 6d 2b 31 29 20 29 3b 0a 20 20 61 73 73  nMem+1) );.  ass
a880: 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 70 4f 70  ert( pOp->p3<pOp
a890: 2d 3e 70 32 20 7c 7c 20 70 4f 70 2d 3e 70 33 3e  ->p2 || pOp->p3>
a8a0: 3d 70 4f 70 2d 3e 70 32 2b 6e 20 29 3b 0a 20 20  =pOp->p2+n );.  
a8b0: 70 41 72 67 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pArg = &aMem[pOp
a8c0: 2d 3e 70 32 5d 3b 0a 20 20 66 6f 72 28 69 3d 30  ->p2];.  for(i=0
a8d0: 3b 20 69 3c 6e 3b 20 69 2b 2b 2c 20 70 41 72 67  ; i<n; i++, pArg
a8e0: 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  ++){.    assert(
a8f0: 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 41 72 67   memIsValid(pArg
a900: 29 20 29 3b 0a 20 20 20 20 61 70 56 61 6c 5b 69  ) );.    apVal[i
a910: 5d 20 3d 20 70 41 72 67 3b 0a 20 20 20 20 44 65  ] = pArg;.    De
a920: 65 70 68 65 6d 65 72 61 6c 69 7a 65 28 70 41 72  ephemeralize(pAr
a930: 67 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  g);.    sqlite3V
a940: 64 62 65 4d 65 6d 53 74 6f 72 65 54 79 70 65 28  dbeMemStoreType(
a950: 70 41 72 67 29 3b 0a 20 20 20 20 52 45 47 49 53  pArg);.    REGIS
a960: 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
a970: 32 2b 69 2c 20 70 41 72 67 29 3b 0a 20 20 7d 0a  2+i, pArg);.  }.
a980: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
a990: 70 34 74 79 70 65 3d 3d 50 34 5f 46 55 4e 43 44  p4type==P4_FUNCD
a9a0: 45 46 20 7c 7c 20 70 4f 70 2d 3e 70 34 74 79 70  EF || pOp->p4typ
a9b0: 65 3d 3d 50 34 5f 56 44 42 45 46 55 4e 43 20 29  e==P4_VDBEFUNC )
a9c0: 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 74  ;.  if( pOp->p4t
a9d0: 79 70 65 3d 3d 50 34 5f 46 55 4e 43 44 45 46 20  ype==P4_FUNCDEF 
a9e0: 29 7b 0a 20 20 20 20 63 74 78 2e 70 46 75 6e 63  ){.    ctx.pFunc
a9f0: 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 46 75 6e 63   = pOp->p4.pFunc
aa00: 3b 0a 20 20 20 20 63 74 78 2e 70 56 64 62 65 46  ;.    ctx.pVdbeF
aa10: 75 6e 63 20 3d 20 30 3b 0a 20 20 7d 65 6c 73 65  unc = 0;.  }else
aa20: 7b 0a 20 20 20 20 63 74 78 2e 70 56 64 62 65 46  {.    ctx.pVdbeF
aa30: 75 6e 63 20 3d 20 28 56 64 62 65 46 75 6e 63 2a  unc = (VdbeFunc*
aa40: 29 70 4f 70 2d 3e 70 34 2e 70 56 64 62 65 46 75  )pOp->p4.pVdbeFu
aa50: 6e 63 3b 0a 20 20 20 20 63 74 78 2e 70 46 75 6e  nc;.    ctx.pFun
aa60: 63 20 3d 20 63 74 78 2e 70 56 64 62 65 46 75 6e  c = ctx.pVdbeFun
aa70: 63 2d 3e 70 46 75 6e 63 3b 0a 20 20 7d 0a 0a 20  c->pFunc;.  }.. 
aa80: 20 63 74 78 2e 73 2e 66 6c 61 67 73 20 3d 20 4d   ctx.s.flags = M
aa90: 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 63 74 78 2e 73  EM_Null;.  ctx.s
aaa0: 2e 64 62 20 3d 20 64 62 3b 0a 20 20 63 74 78 2e  .db = db;.  ctx.
aab0: 73 2e 78 44 65 6c 20 3d 20 30 3b 0a 20 20 63 74  s.xDel = 0;.  ct
aac0: 78 2e 73 2e 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b  x.s.zMalloc = 0;
aad0: 0a 0a 20 20 2f 2a 20 54 68 65 20 6f 75 74 70 75  ..  /* The outpu
aae0: 74 20 63 65 6c 6c 20 6d 61 79 20 61 6c 72 65 61  t cell may alrea
aaf0: 64 79 20 68 61 76 65 20 61 20 62 75 66 66 65 72  dy have a buffer
ab00: 20 61 6c 6c 6f 63 61 74 65 64 2e 20 4d 6f 76 65   allocated. Move
ab10: 0a 20 20 2a 2a 20 74 68 65 20 70 6f 69 6e 74 65  .  ** the pointe
ab20: 72 20 74 6f 20 63 74 78 2e 73 20 73 6f 20 69 6e  r to ctx.s so in
ab30: 20 63 61 73 65 20 74 68 65 20 75 73 65 72 2d 66   case the user-f
ab40: 75 6e 63 74 69 6f 6e 20 63 61 6e 20 75 73 65 0a  unction can use.
ab50: 20 20 2a 2a 20 74 68 65 20 61 6c 72 65 61 64 79    ** the already
ab60: 20 61 6c 6c 6f 63 61 74 65 64 20 62 75 66 66 65   allocated buffe
ab70: 72 20 69 6e 73 74 65 61 64 20 6f 66 20 61 6c 6c  r instead of all
ab80: 6f 63 61 74 69 6e 67 20 61 20 6e 65 77 20 6f 6e  ocating a new on
ab90: 65 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65  e..  */.  sqlite
aba0: 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28 26 63 74  3VdbeMemMove(&ct
abb0: 78 2e 73 2c 20 70 4f 75 74 29 3b 0a 20 20 4d 65  x.s, pOut);.  Me
abc0: 6d 53 65 74 54 79 70 65 46 6c 61 67 28 26 63 74  mSetTypeFlag(&ct
abd0: 78 2e 73 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a  x.s, MEM_Null);.
abe0: 0a 20 20 63 74 78 2e 69 73 45 72 72 6f 72 20 3d  .  ctx.isError =
abf0: 20 30 3b 0a 20 20 69 66 28 20 63 74 78 2e 70 46   0;.  if( ctx.pF
ac00: 75 6e 63 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c  unc->flags & SQL
ac10: 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c  ITE_FUNC_NEEDCOL
ac20: 4c 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  L ){.    assert(
ac30: 20 70 4f 70 3e 61 4f 70 20 29 3b 0a 20 20 20 20   pOp>aOp );.    
ac40: 61 73 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e  assert( pOp[-1].
ac50: 70 34 74 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53  p4type==P4_COLLS
ac60: 45 51 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  EQ );.    assert
ac70: 28 20 70 4f 70 5b 2d 31 5d 2e 6f 70 63 6f 64 65  ( pOp[-1].opcode
ac80: 3d 3d 4f 50 5f 43 6f 6c 6c 53 65 71 20 29 3b 0a  ==OP_CollSeq );.
ac90: 20 20 20 20 63 74 78 2e 70 43 6f 6c 6c 20 3d 20      ctx.pColl = 
aca0: 70 4f 70 5b 2d 31 5d 2e 70 34 2e 70 43 6f 6c 6c  pOp[-1].p4.pColl
acb0: 3b 0a 20 20 7d 0a 20 20 28 2a 63 74 78 2e 70 46  ;.  }.  (*ctx.pF
acc0: 75 6e 63 2d 3e 78 46 75 6e 63 29 28 26 63 74 78  unc->xFunc)(&ctx
acd0: 2c 20 6e 2c 20 61 70 56 61 6c 29 3b 20 2f 2a 20  , n, apVal); /* 
ace0: 49 4d 50 3a 20 52 2d 32 34 35 30 35 2d 32 33 32  IMP: R-24505-232
acf0: 33 30 20 2a 2f 0a 20 20 69 66 28 20 64 62 2d 3e  30 */.  if( db->
ad00: 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 7b 0a  mallocFailed ){.
ad10: 20 20 20 20 2f 2a 20 45 76 65 6e 20 74 68 6f 75      /* Even thou
ad20: 67 68 20 61 20 6d 61 6c 6c 6f 63 28 29 20 68 61  gh a malloc() ha
ad30: 73 20 66 61 69 6c 65 64 2c 20 74 68 65 20 69 6d  s failed, the im
ad40: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20  plementation of 
ad50: 74 68 65 0a 20 20 20 20 2a 2a 20 75 73 65 72 20  the.    ** user 
ad60: 66 75 6e 63 74 69 6f 6e 20 6d 61 79 20 68 61 76  function may hav
ad70: 65 20 63 61 6c 6c 65 64 20 61 6e 20 73 71 6c 69  e called an sqli
ad80: 74 65 33 5f 72 65 73 75 6c 74 5f 58 58 58 28 29  te3_result_XXX()
ad90: 20 66 75 6e 63 74 69 6f 6e 0a 20 20 20 20 2a 2a   function.    **
ada0: 20 74 6f 20 72 65 74 75 72 6e 20 61 20 76 61 6c   to return a val
adb0: 75 65 2e 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  ue. The followin
adc0: 67 20 63 61 6c 6c 20 72 65 6c 65 61 73 65 73 20  g call releases 
add0: 61 6e 79 20 72 65 73 6f 75 72 63 65 73 0a 20 20  any resources.  
ade0: 20 20 2a 2a 20 61 73 73 6f 63 69 61 74 65 64 20    ** associated 
adf0: 77 69 74 68 20 73 75 63 68 20 61 20 76 61 6c 75  with such a valu
ae00: 65 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 73 71  e..    */.    sq
ae10: 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65  lite3VdbeMemRele
ae20: 61 73 65 28 26 63 74 78 2e 73 29 3b 0a 20 20 20  ase(&ctx.s);.   
ae30: 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
ae40: 7d 0a 0a 20 20 2f 2a 20 49 66 20 61 6e 79 20 61  }..  /* If any a
ae50: 75 78 69 6c 69 61 72 79 20 64 61 74 61 20 66 75  uxiliary data fu
ae60: 6e 63 74 69 6f 6e 73 20 68 61 76 65 20 62 65 65  nctions have bee
ae70: 6e 20 63 61 6c 6c 65 64 20 62 79 20 74 68 69 73  n called by this
ae80: 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 2c 0a   user function,.
ae90: 20 20 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c 79    ** immediately
aea0: 20 63 61 6c 6c 20 74 68 65 20 64 65 73 74 72 75   call the destru
aeb0: 63 74 6f 72 20 66 6f 72 20 61 6e 79 20 6e 6f 6e  ctor for any non
aec0: 2d 73 74 61 74 69 63 20 76 61 6c 75 65 73 2e 0a  -static values..
aed0: 20 20 2a 2f 0a 20 20 69 66 28 20 63 74 78 2e 70    */.  if( ctx.p
aee0: 56 64 62 65 46 75 6e 63 20 29 7b 0a 20 20 20 20  VdbeFunc ){.    
aef0: 73 71 6c 69 74 65 33 56 64 62 65 44 65 6c 65 74  sqlite3VdbeDelet
af00: 65 41 75 78 44 61 74 61 28 63 74 78 2e 70 56 64  eAuxData(ctx.pVd
af10: 62 65 46 75 6e 63 2c 20 70 4f 70 2d 3e 70 31 29  beFunc, pOp->p1)
af20: 3b 0a 20 20 20 20 70 4f 70 2d 3e 70 34 2e 70 56  ;.    pOp->p4.pV
af30: 64 62 65 46 75 6e 63 20 3d 20 63 74 78 2e 70 56  dbeFunc = ctx.pV
af40: 64 62 65 46 75 6e 63 3b 0a 20 20 20 20 70 4f 70  dbeFunc;.    pOp
af50: 2d 3e 70 34 74 79 70 65 20 3d 20 50 34 5f 56 44  ->p4type = P4_VD
af60: 42 45 46 55 4e 43 3b 0a 20 20 7d 0a 0a 20 20 2f  BEFUNC;.  }..  /
af70: 2a 20 49 66 20 74 68 65 20 66 75 6e 63 74 69 6f  * If the functio
af80: 6e 20 72 65 74 75 72 6e 65 64 20 61 6e 20 65 72  n returned an er
af90: 72 6f 72 2c 20 74 68 72 6f 77 20 61 6e 20 65 78  ror, throw an ex
afa0: 63 65 70 74 69 6f 6e 20 2a 2f 0a 20 20 69 66 28  ception */.  if(
afb0: 20 63 74 78 2e 69 73 45 72 72 6f 72 20 29 7b 0a   ctx.isError ){.
afc0: 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74      sqlite3SetSt
afd0: 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67  ring(&p->zErrMsg
afe0: 2c 20 64 62 2c 20 22 25 73 22 2c 20 73 71 6c 69  , db, "%s", sqli
aff0: 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 26  te3_value_text(&
b000: 63 74 78 2e 73 29 29 3b 0a 20 20 20 20 72 63 20  ctx.s));.    rc 
b010: 3d 20 63 74 78 2e 69 73 45 72 72 6f 72 3b 0a 20  = ctx.isError;. 
b020: 20 7d 0a 0a 20 20 2f 2a 20 43 6f 70 79 20 74 68   }..  /* Copy th
b030: 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20  e result of the 
b040: 66 75 6e 63 74 69 6f 6e 20 69 6e 74 6f 20 72 65  function into re
b050: 67 69 73 74 65 72 20 50 33 20 2a 2f 0a 20 20 73  gister P3 */.  s
b060: 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
b070: 45 6e 63 6f 64 69 6e 67 28 26 63 74 78 2e 73 2c  Encoding(&ctx.s,
b080: 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 73 71   encoding);.  sq
b090: 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65  lite3VdbeMemMove
b0a0: 28 70 4f 75 74 2c 20 26 63 74 78 2e 73 29 3b 0a  (pOut, &ctx.s);.
b0b0: 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62    if( sqlite3Vdb
b0c0: 65 4d 65 6d 54 6f 6f 42 69 67 28 70 4f 75 74 29  eMemTooBig(pOut)
b0d0: 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f   ){.    goto too
b0e0: 5f 62 69 67 3b 0a 20 20 7d 0a 0a 23 69 66 20 30  _big;.  }..#if 0
b0f0: 0a 20 20 2f 2a 20 54 68 65 20 61 70 70 2d 64 65  .  /* The app-de
b100: 66 69 6e 65 64 20 66 75 6e 63 74 69 6f 6e 20 68  fined function h
b110: 61 73 20 64 6f 6e 65 20 73 6f 6d 65 74 68 69 6e  as done somethin
b120: 67 20 74 68 61 74 20 61 73 20 63 61 75 73 65 64  g that as caused
b130: 20 74 68 69 73 0a 20 20 2a 2a 20 73 74 61 74 65   this.  ** state
b140: 6d 65 6e 74 20 74 6f 20 65 78 70 69 72 65 2e 20  ment to expire. 
b150: 20 28 50 65 72 68 61 70 73 20 74 68 65 20 66 75   (Perhaps the fu
b160: 6e 63 74 69 6f 6e 20 63 61 6c 6c 65 64 20 73 71  nction called sq
b170: 6c 69 74 65 33 5f 65 78 65 63 28 29 0a 20 20 2a  lite3_exec().  *
b180: 2a 20 77 69 74 68 20 61 20 43 52 45 41 54 45 20  * with a CREATE 
b190: 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 2e  TABLE statement.
b1a0: 29 0a 20 20 2a 2f 0a 20 20 69 66 28 20 70 2d 3e  ).  */.  if( p->
b1b0: 65 78 70 69 72 65 64 20 29 20 72 63 20 3d 20 53  expired ) rc = S
b1c0: 51 4c 49 54 45 5f 41 42 4f 52 54 3b 0a 23 65 6e  QLITE_ABORT;.#en
b1d0: 64 69 66 0a 0a 20 20 52 45 47 49 53 54 45 52 5f  dif..  REGISTER_
b1e0: 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70  TRACE(pOp->p3, p
b1f0: 4f 75 74 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d  Out);.  UPDATE_M
b200: 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74  AX_BLOBSIZE(pOut
b210: 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
b220: 2a 20 4f 70 63 6f 64 65 3a 20 42 69 74 41 6e 64  * Opcode: BitAnd
b230: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
b240: 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20 62 69 74  .** Take the bit
b250: 2d 77 69 73 65 20 41 4e 44 20 6f 66 20 74 68 65  -wise AND of the
b260: 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73   values in regis
b270: 74 65 72 20 50 31 20 61 6e 64 20 50 32 20 61 6e  ter P1 and P2 an
b280: 64 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65 20 72  d.** store the r
b290: 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65  esult in registe
b2a0: 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68  r P3..** If eith
b2b0: 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c  er input is NULL
b2c0: 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  , the result is 
b2d0: 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  NULL..*/./* Opco
b2e0: 64 65 3a 20 42 69 74 4f 72 20 50 31 20 50 32 20  de: BitOr P1 P2 
b2f0: 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 61 6b  P3 * *.**.** Tak
b300: 65 20 74 68 65 20 62 69 74 2d 77 69 73 65 20 4f  e the bit-wise O
b310: 52 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20  R of the values 
b320: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 61  in register P1 a
b330: 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20 73 74 6f  nd P2 and.** sto
b340: 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e  re the result in
b350: 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a   register P3..**
b360: 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74   If either input
b370: 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65   is NULL, the re
b380: 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f  sult is NULL..*/
b390: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 68 69 66  ./* Opcode: Shif
b3a0: 74 4c 65 66 74 20 50 31 20 50 32 20 50 33 20 2a  tLeft P1 P2 P3 *
b3b0: 20 2a 0a 2a 2a 0a 2a 2a 20 53 68 69 66 74 20 74   *.**.** Shift t
b3c0: 68 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  he integer value
b3d0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 20   in register P2 
b3e0: 74 6f 20 74 68 65 20 6c 65 66 74 20 62 79 20 74  to the left by t
b3f0: 68 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20  he.** number of 
b400: 62 69 74 73 20 73 70 65 63 69 66 69 65 64 20 62  bits specified b
b410: 79 20 74 68 65 20 69 6e 74 65 67 65 72 20 69 6e  y the integer in
b420: 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a   register P1..**
b430: 20 53 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c   Store the resul
b440: 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  t in register P3
b450: 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69  ..** If either i
b460: 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68  nput is NULL, th
b470: 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  e result is NULL
b480: 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
b490: 53 68 69 66 74 52 69 67 68 74 20 50 31 20 50 32  ShiftRight P1 P2
b4a0: 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 68   P3 * *.**.** Sh
b4b0: 69 66 74 20 74 68 65 20 69 6e 74 65 67 65 72 20  ift the integer 
b4c0: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
b4d0: 72 20 50 32 20 74 6f 20 74 68 65 20 72 69 67 68  r P2 to the righ
b4e0: 74 20 62 79 20 74 68 65 0a 2a 2a 20 6e 75 6d 62  t by the.** numb
b4f0: 65 72 20 6f 66 20 62 69 74 73 20 73 70 65 63 69  er of bits speci
b500: 66 69 65 64 20 62 79 20 74 68 65 20 69 6e 74 65  fied by the inte
b510: 67 65 72 20 69 6e 20 72 65 67 69 73 74 65 72 20  ger in register 
b520: 50 31 2e 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65  P1..** Store the
b530: 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73   result in regis
b540: 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69  ter P3..** If ei
b550: 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55  ther input is NU
b560: 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69  LL, the result i
b570: 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20  s NULL..*/.case 
b580: 4f 50 5f 42 69 74 41 6e 64 3a 20 20 20 20 20 20  OP_BitAnd:      
b590: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
b5a0: 6d 65 20 61 73 20 54 4b 5f 42 49 54 41 4e 44 2c  me as TK_BITAND,
b5b0: 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20   in1, in2, out3 
b5c0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 69 74 4f 72  */.case OP_BitOr
b5d0: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :               
b5e0: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
b5f0: 5f 42 49 54 4f 52 2c 20 69 6e 31 2c 20 69 6e 32  _BITOR, in1, in2
b600: 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f  , out3 */.case O
b610: 50 5f 53 68 69 66 74 4c 65 66 74 3a 20 20 20 20  P_ShiftLeft:    
b620: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
b630: 65 20 61 73 20 54 4b 5f 4c 53 48 49 46 54 2c 20  e as TK_LSHIFT, 
b640: 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a  in1, in2, out3 *
b650: 2f 0a 63 61 73 65 20 4f 50 5f 53 68 69 66 74 52  /.case OP_ShiftR
b660: 69 67 68 74 3a 20 7b 20 20 20 20 20 20 20 20 20  ight: {         
b670: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
b680: 52 53 48 49 46 54 2c 20 69 6e 31 2c 20 69 6e 32  RSHIFT, in1, in2
b690: 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69 36 34 20  , out3 */.  i64 
b6a0: 69 41 3b 0a 20 20 75 36 34 20 75 41 3b 0a 20 20  iA;.  u64 uA;.  
b6b0: 69 36 34 20 69 42 3b 0a 20 20 75 38 20 6f 70 3b  i64 iB;.  u8 op;
b6c0: 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ..  pIn1 = &aMem
b6d0: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e  [pOp->p1];.  pIn
b6e0: 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  2 = &aMem[pOp->p
b6f0: 32 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d  2];.  pOut = &aM
b700: 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69  em[pOp->p3];.  i
b710: 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
b720: 7c 20 70 49 6e 32 2d 3e 66 6c 61 67 73 29 20 26  | pIn2->flags) &
b730: 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20   MEM_Null ){.   
b740: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
b750: 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20  etNull(pOut);.  
b760: 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 69    break;.  }.  i
b770: 41 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49  A = sqlite3VdbeI
b780: 6e 74 56 61 6c 75 65 28 70 49 6e 32 29 3b 0a 20  ntValue(pIn2);. 
b790: 20 69 42 20 3d 20 73 71 6c 69 74 65 33 56 64 62   iB = sqlite3Vdb
b7a0: 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 3b  eIntValue(pIn1);
b7b0: 0a 20 20 6f 70 20 3d 20 70 4f 70 2d 3e 6f 70 63  .  op = pOp->opc
b7c0: 6f 64 65 3b 0a 20 20 69 66 28 20 6f 70 3d 3d 4f  ode;.  if( op==O
b7d0: 50 5f 42 69 74 41 6e 64 20 29 7b 0a 20 20 20 20  P_BitAnd ){.    
b7e0: 69 41 20 26 3d 20 69 42 3b 0a 20 20 7d 65 6c 73  iA &= iB;.  }els
b7f0: 65 20 69 66 28 20 6f 70 3d 3d 4f 50 5f 42 69 74  e if( op==OP_Bit
b800: 4f 72 20 29 7b 0a 20 20 20 20 69 41 20 7c 3d 20  Or ){.    iA |= 
b810: 69 42 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  iB;.  }else if( 
b820: 69 42 21 3d 30 20 29 7b 0a 20 20 20 20 61 73 73  iB!=0 ){.    ass
b830: 65 72 74 28 20 6f 70 3d 3d 4f 50 5f 53 68 69 66  ert( op==OP_Shif
b840: 74 52 69 67 68 74 20 7c 7c 20 6f 70 3d 3d 4f 50  tRight || op==OP
b850: 5f 53 68 69 66 74 4c 65 66 74 20 29 3b 0a 0a 20  _ShiftLeft );.. 
b860: 20 20 20 2f 2a 20 49 66 20 73 68 69 66 74 69 6e     /* If shiftin
b870: 67 20 62 79 20 61 20 6e 65 67 61 74 69 76 65 20  g by a negative 
b880: 61 6d 6f 75 6e 74 2c 20 73 68 69 66 74 20 69 6e  amount, shift in
b890: 20 74 68 65 20 6f 74 68 65 72 20 64 69 72 65 63   the other direc
b8a0: 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 66 28 20  tion */.    if( 
b8b0: 69 42 3c 30 20 29 7b 0a 20 20 20 20 20 20 61 73  iB<0 ){.      as
b8c0: 73 65 72 74 28 20 4f 50 5f 53 68 69 66 74 52 69  sert( OP_ShiftRi
b8d0: 67 68 74 3d 3d 4f 50 5f 53 68 69 66 74 4c 65 66  ght==OP_ShiftLef
b8e0: 74 2b 31 20 29 3b 0a 20 20 20 20 20 20 6f 70 20  t+1 );.      op 
b8f0: 3d 20 32 2a 4f 50 5f 53 68 69 66 74 4c 65 66 74  = 2*OP_ShiftLeft
b900: 20 2b 20 31 20 2d 20 6f 70 3b 0a 20 20 20 20 20   + 1 - op;.     
b910: 20 69 42 20 3d 20 69 42 3e 28 2d 36 34 29 20 3f   iB = iB>(-64) ?
b920: 20 2d 69 42 20 3a 20 36 34 3b 0a 20 20 20 20 7d   -iB : 64;.    }
b930: 0a 0a 20 20 20 20 69 66 28 20 69 42 3e 3d 36 34  ..    if( iB>=64
b940: 20 29 7b 0a 20 20 20 20 20 20 69 41 20 3d 20 28   ){.      iA = (
b950: 69 41 3e 3d 30 20 7c 7c 20 6f 70 3d 3d 4f 50 5f  iA>=0 || op==OP_
b960: 53 68 69 66 74 4c 65 66 74 29 20 3f 20 30 20 3a  ShiftLeft) ? 0 :
b970: 20 2d 31 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a   -1;.    }else{.
b980: 20 20 20 20 20 20 6d 65 6d 63 70 79 28 26 75 41        memcpy(&uA
b990: 2c 20 26 69 41 2c 20 73 69 7a 65 6f 66 28 75 41  , &iA, sizeof(uA
b9a0: 29 29 3b 0a 20 20 20 20 20 20 69 66 28 20 6f 70  ));.      if( op
b9b0: 3d 3d 4f 50 5f 53 68 69 66 74 4c 65 66 74 20 29  ==OP_ShiftLeft )
b9c0: 7b 0a 20 20 20 20 20 20 20 20 75 41 20 3c 3c 3d  {.        uA <<=
b9d0: 20 69 42 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65   iB;.      }else
b9e0: 7b 0a 20 20 20 20 20 20 20 20 75 41 20 3e 3e 3d  {.        uA >>=
b9f0: 20 69 42 3b 0a 20 20 20 20 20 20 20 20 2f 2a 20   iB;.        /* 
ba00: 53 69 67 6e 2d 65 78 74 65 6e 64 20 6f 6e 20 61  Sign-extend on a
ba10: 20 72 69 67 68 74 20 73 68 69 66 74 20 6f 66 20   right shift of 
ba20: 61 20 6e 65 67 61 74 69 76 65 20 6e 75 6d 62 65  a negative numbe
ba30: 72 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28  r */.        if(
ba40: 20 69 41 3c 30 20 29 20 75 41 20 7c 3d 20 28 28   iA<0 ) uA |= ((
ba50: 28 28 75 36 34 29 30 78 66 66 66 66 66 66 66 66  ((u64)0xffffffff
ba60: 29 3c 3c 33 32 29 7c 30 78 66 66 66 66 66 66 66  )<<32)|0xfffffff
ba70: 66 29 20 3c 3c 20 28 36 34 2d 69 42 29 3b 0a 20  f) << (64-iB);. 
ba80: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 6d 65 6d       }.      mem
ba90: 63 70 79 28 26 69 41 2c 20 26 75 41 2c 20 73 69  cpy(&iA, &uA, si
baa0: 7a 65 6f 66 28 69 41 29 29 3b 0a 20 20 20 20 7d  zeof(iA));.    }
bab0: 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69  .  }.  pOut->u.i
bac0: 20 3d 20 69 41 3b 0a 20 20 4d 65 6d 53 65 74 54   = iA;.  MemSetT
bad0: 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45  ypeFlag(pOut, ME
bae0: 4d 5f 49 6e 74 29 3b 0a 20 20 62 72 65 61 6b 3b  M_Int);.  break;
baf0: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41  .}../* Opcode: A
bb00: 64 64 49 6d 6d 20 20 50 31 20 50 32 20 2a 20 2a  ddImm  P1 P2 * *
bb10: 20 2a 0a 2a 2a 20 0a 2a 2a 20 41 64 64 20 74 68   *.** .** Add th
bb20: 65 20 63 6f 6e 73 74 61 6e 74 20 50 32 20 74 6f  e constant P2 to
bb30: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
bb40: 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 20 54 68  gister P1..** Th
bb50: 65 20 72 65 73 75 6c 74 20 69 73 20 61 6c 77 61  e result is alwa
bb60: 79 73 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a  ys an integer..*
bb70: 2a 0a 2a 2a 20 54 6f 20 66 6f 72 63 65 20 61 6e  *.** To force an
bb80: 79 20 72 65 67 69 73 74 65 72 20 74 6f 20 62 65  y register to be
bb90: 20 61 6e 20 69 6e 74 65 67 65 72 2c 20 6a 75 73   an integer, jus
bba0: 74 20 61 64 64 20 30 2e 0a 2a 2f 0a 63 61 73 65  t add 0..*/.case
bbb0: 20 4f 50 5f 41 64 64 49 6d 6d 3a 20 7b 20 20 20   OP_AddImm: {   
bbc0: 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20           /* in1 
bbd0: 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
bbe0: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 6d 65  m[pOp->p1];.  me
bbf0: 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
bc00: 2c 20 70 49 6e 31 29 3b 0a 20 20 73 71 6c 69 74  , pIn1);.  sqlit
bc10: 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72  e3VdbeMemInteger
bc20: 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 70 49 6e  ify(pIn1);.  pIn
bc30: 31 2d 3e 75 2e 69 20 2b 3d 20 70 4f 70 2d 3e 70  1->u.i += pOp->p
bc40: 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  2;.  break;.}../
bc50: 2a 20 4f 70 63 6f 64 65 3a 20 4d 75 73 74 42 65  * Opcode: MustBe
bc60: 49 6e 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  Int P1 P2 * * *.
bc70: 2a 2a 20 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65  ** .** Force the
bc80: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
bc90: 65 72 20 50 31 20 74 6f 20 62 65 20 61 6e 20 69  er P1 to be an i
bca0: 6e 74 65 67 65 72 2e 20 20 49 66 20 74 68 65 20  nteger.  If the 
bcb0: 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 50 31 20 69  value.** in P1 i
bcc0: 73 20 6e 6f 74 20 61 6e 20 69 6e 74 65 67 65 72  s not an integer
bcd0: 20 61 6e 64 20 63 61 6e 6e 6f 74 20 62 65 20 63   and cannot be c
bce0: 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f 20 61 6e  onverted into an
bcf0: 20 69 6e 74 65 67 65 72 0a 2a 2a 20 77 69 74 68   integer.** with
bd00: 6f 75 74 20 64 61 74 61 20 6c 6f 73 73 2c 20 74  out data loss, t
bd10: 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61  hen jump immedia
bd20: 74 65 6c 79 20 74 6f 20 50 32 2c 20 6f 72 20 69  tely to P2, or i
bd30: 66 20 50 32 3d 3d 30 0a 2a 2a 20 72 61 69 73 65  f P2==0.** raise
bd40: 20 61 6e 20 53 51 4c 49 54 45 5f 4d 49 53 4d 41   an SQLITE_MISMA
bd50: 54 43 48 20 65 78 63 65 70 74 69 6f 6e 2e 0a 2a  TCH exception..*
bd60: 2f 0a 63 61 73 65 20 4f 50 5f 4d 75 73 74 42 65  /.case OP_MustBe
bd70: 49 6e 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20  Int: {          
bd80: 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a    /* jump, in1 *
bd90: 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
bda0: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 70 70  [pOp->p1];.  app
bdb0: 6c 79 41 66 66 69 6e 69 74 79 28 70 49 6e 31 2c  lyAffinity(pIn1,
bdc0: 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45   SQLITE_AFF_NUME
bdd0: 52 49 43 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a  RIC, encoding);.
bde0: 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
bdf0: 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30  gs & MEM_Int)==0
be00: 20 29 7b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d   ){.    if( pOp-
be10: 3e 70 32 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  >p2==0 ){.      
be20: 72 63 20 3d 20 53 51 4c 49 54 45 5f 4d 49 53 4d  rc = SQLITE_MISM
be30: 41 54 43 48 3b 0a 20 20 20 20 20 20 67 6f 74 6f  ATCH;.      goto
be40: 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
be50: 72 6f 72 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  ror;.    }else{.
be60: 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e        pc = pOp->
be70: 70 32 20 2d 20 31 3b 0a 20 20 20 20 7d 0a 20 20  p2 - 1;.    }.  
be80: 7d 65 6c 73 65 7b 0a 20 20 20 20 4d 65 6d 53 65  }else{.    MemSe
be90: 74 54 79 70 65 46 6c 61 67 28 70 49 6e 31 2c 20  tTypeFlag(pIn1, 
bea0: 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d 0a 20 20  MEM_Int);.  }.  
beb0: 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65  break;.}..#ifnde
bec0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c  f SQLITE_OMIT_FL
bed0: 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 2f 2a 20  OATING_POINT./* 
bee0: 4f 70 63 6f 64 65 3a 20 52 65 61 6c 41 66 66 69  Opcode: RealAffi
bef0: 6e 69 74 79 20 50 31 20 2a 20 2a 20 2a 20 2a 0a  nity P1 * * * *.
bf00: 2a 2a 0a 2a 2a 20 49 66 20 72 65 67 69 73 74 65  **.** If registe
bf10: 72 20 50 31 20 68 6f 6c 64 73 20 61 6e 20 69 6e  r P1 holds an in
bf20: 74 65 67 65 72 20 63 6f 6e 76 65 72 74 20 69 74  teger convert it
bf30: 20 74 6f 20 61 20 72 65 61 6c 20 76 61 6c 75 65   to a real value
bf40: 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ..**.** This opc
bf50: 6f 64 65 20 69 73 20 75 73 65 64 20 77 68 65 6e  ode is used when
bf60: 20 65 78 74 72 61 63 74 69 6e 67 20 69 6e 66 6f   extracting info
bf70: 72 6d 61 74 69 6f 6e 20 66 72 6f 6d 20 61 20 63  rmation from a c
bf80: 6f 6c 75 6d 6e 20 74 68 61 74 0a 2a 2a 20 68 61  olumn that.** ha
bf90: 73 20 52 45 41 4c 20 61 66 66 69 6e 69 74 79 2e  s REAL affinity.
bfa0: 20 20 53 75 63 68 20 63 6f 6c 75 6d 6e 20 76 61    Such column va
bfb0: 6c 75 65 73 20 6d 61 79 20 73 74 69 6c 6c 20 62  lues may still b
bfc0: 65 20 73 74 6f 72 65 64 20 61 73 0a 2a 2a 20 69  e stored as.** i
bfd0: 6e 74 65 67 65 72 73 2c 20 66 6f 72 20 73 70 61  ntegers, for spa
bfe0: 63 65 20 65 66 66 69 63 69 65 6e 63 79 2c 20 62  ce efficiency, b
bff0: 75 74 20 61 66 74 65 72 20 65 78 74 72 61 63 74  ut after extract
c000: 69 6f 6e 20 77 65 20 77 61 6e 74 20 74 68 65 6d  ion we want them
c010: 0a 2a 2a 20 74 6f 20 68 61 76 65 20 6f 6e 6c 79  .** to have only
c020: 20 61 20 72 65 61 6c 20 76 61 6c 75 65 2e 0a 2a   a real value..*
c030: 2f 0a 63 61 73 65 20 4f 50 5f 52 65 61 6c 41 66  /.case OP_RealAf
c040: 66 69 6e 69 74 79 3a 20 7b 20 20 20 20 20 20 20  finity: {       
c050: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e             /* in
c060: 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  1 */.  pIn1 = &a
c070: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
c080: 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20  if( pIn1->flags 
c090: 26 20 4d 45 4d 5f 49 6e 74 20 29 7b 0a 20 20 20  & MEM_Int ){.   
c0a0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52   sqlite3VdbeMemR
c0b0: 65 61 6c 69 66 79 28 70 49 6e 31 29 3b 0a 20 20  ealify(pIn1);.  
c0c0: 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  }.  break;.}.#en
c0d0: 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  dif..#ifndef SQL
c0e0: 49 54 45 5f 4f 4d 49 54 5f 43 41 53 54 0a 2f 2a  ITE_OMIT_CAST./*
c0f0: 20 4f 70 63 6f 64 65 3a 20 54 6f 54 65 78 74 20   Opcode: ToText 
c100: 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  P1 * * * *.**.**
c110: 20 46 6f 72 63 65 20 74 68 65 20 76 61 6c 75 65   Force the value
c120: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
c130: 74 6f 20 62 65 20 74 65 78 74 2e 0a 2a 2a 20 49  to be text..** I
c140: 66 20 74 68 65 20 76 61 6c 75 65 20 69 73 20 6e  f the value is n
c150: 75 6d 65 72 69 63 2c 20 63 6f 6e 76 65 72 74 20  umeric, convert 
c160: 69 74 20 74 6f 20 61 20 73 74 72 69 6e 67 20 75  it to a string u
c170: 73 69 6e 67 20 74 68 65 0a 2a 2a 20 65 71 75 69  sing the.** equi
c180: 76 61 6c 65 6e 74 20 6f 66 20 70 72 69 6e 74 66  valent of printf
c190: 28 29 2e 20 20 42 6c 6f 62 20 76 61 6c 75 65 73  ().  Blob values
c1a0: 20 61 72 65 20 75 6e 63 68 61 6e 67 65 64 20 61   are unchanged a
c1b0: 6e 64 0a 2a 2a 20 61 72 65 20 61 66 74 65 72 77  nd.** are afterw
c1c0: 61 72 64 73 20 73 69 6d 70 6c 79 20 69 6e 74 65  ards simply inte
c1d0: 72 70 72 65 74 65 64 20 61 73 20 74 65 78 74 2e  rpreted as text.
c1e0: 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76 61  .**.** A NULL va
c1f0: 6c 75 65 20 69 73 20 6e 6f 74 20 63 68 61 6e 67  lue is not chang
c200: 65 64 20 62 79 20 74 68 69 73 20 72 6f 75 74 69  ed by this routi
c210: 6e 65 2e 20 20 49 74 20 72 65 6d 61 69 6e 73 20  ne.  It remains 
c220: 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  NULL..*/.case OP
c230: 5f 54 6f 54 65 78 74 3a 20 7b 20 20 20 20 20 20  _ToText: {      
c240: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
c250: 61 6d 65 20 61 73 20 54 4b 5f 54 4f 5f 54 45 58  ame as TK_TO_TEX
c260: 54 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31  T, in1 */.  pIn1
c270: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
c280: 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43  ];.  memAboutToC
c290: 68 61 6e 67 65 28 70 2c 20 70 49 6e 31 29 3b 0a  hange(p, pIn1);.
c2a0: 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67    if( pIn1->flag
c2b0: 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 20 62  s & MEM_Null ) b
c2c0: 72 65 61 6b 3b 0a 20 20 61 73 73 65 72 74 28 20  reak;.  assert( 
c2d0: 4d 45 4d 5f 53 74 72 3d 3d 28 4d 45 4d 5f 42 6c  MEM_Str==(MEM_Bl
c2e0: 6f 62 3e 3e 33 29 20 29 3b 0a 20 20 70 49 6e 31  ob>>3) );.  pIn1
c2f0: 2d 3e 66 6c 61 67 73 20 7c 3d 20 28 70 49 6e 31  ->flags |= (pIn1
c300: 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 42 6c 6f 62  ->flags&MEM_Blob
c310: 29 3e 3e 33 3b 0a 20 20 61 70 70 6c 79 41 66 66  )>>3;.  applyAff
c320: 69 6e 69 74 79 28 70 49 6e 31 2c 20 53 51 4c 49  inity(pIn1, SQLI
c330: 54 45 5f 41 46 46 5f 54 45 58 54 2c 20 65 6e 63  TE_AFF_TEXT, enc
c340: 6f 64 69 6e 67 29 3b 0a 20 20 72 63 20 3d 20 45  oding);.  rc = E
c350: 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 31 29 3b  xpandBlob(pIn1);
c360: 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d  .  assert( pIn1-
c370: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74 72  >flags & MEM_Str
c380: 20 7c 7c 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61   || db->mallocFa
c390: 69 6c 65 64 20 29 3b 0a 20 20 70 49 6e 31 2d 3e  iled );.  pIn1->
c3a0: 66 6c 61 67 73 20 26 3d 20 7e 28 4d 45 4d 5f 49  flags &= ~(MEM_I
c3b0: 6e 74 7c 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f  nt|MEM_Real|MEM_
c3c0: 42 6c 6f 62 7c 4d 45 4d 5f 5a 65 72 6f 29 3b 0a  Blob|MEM_Zero);.
c3d0: 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f    UPDATE_MAX_BLO
c3e0: 42 53 49 5a 45 28 70 49 6e 31 29 3b 0a 20 20 62  BSIZE(pIn1);.  b
c3f0: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
c400: 64 65 3a 20 54 6f 42 6c 6f 62 20 50 31 20 2a 20  de: ToBlob P1 * 
c410: 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63  * * *.**.** Forc
c420: 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  e the value in r
c430: 65 67 69 73 74 65 72 20 50 31 20 74 6f 20 62 65  egister P1 to be
c440: 20 61 20 42 4c 4f 42 2e 0a 2a 2a 20 49 66 20 74   a BLOB..** If t
c450: 68 65 20 76 61 6c 75 65 20 69 73 20 6e 75 6d 65  he value is nume
c460: 72 69 63 2c 20 63 6f 6e 76 65 72 74 20 69 74 20  ric, convert it 
c470: 74 6f 20 61 20 73 74 72 69 6e 67 20 66 69 72 73  to a string firs
c480: 74 2e 0a 2a 2a 20 53 74 72 69 6e 67 73 20 61 72  t..** Strings ar
c490: 65 20 73 69 6d 70 6c 79 20 72 65 69 6e 74 65 72  e simply reinter
c4a0: 70 72 65 74 65 64 20 61 73 20 62 6c 6f 62 73 20  preted as blobs 
c4b0: 77 69 74 68 20 6e 6f 20 63 68 61 6e 67 65 0a 2a  with no change.*
c4c0: 2a 20 74 6f 20 74 68 65 20 75 6e 64 65 72 6c 79  * to the underly
c4d0: 69 6e 67 20 64 61 74 61 2e 0a 2a 2a 0a 2a 2a 20  ing data..**.** 
c4e0: 41 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69 73 20  A NULL value is 
c4f0: 6e 6f 74 20 63 68 61 6e 67 65 64 20 62 79 20 74  not changed by t
c500: 68 69 73 20 72 6f 75 74 69 6e 65 2e 20 20 49 74  his routine.  It
c510: 20 72 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a   remains NULL..*
c520: 2f 0a 63 61 73 65 20 4f 50 5f 54 6f 42 6c 6f 62  /.case OP_ToBlob
c530: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
c540: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
c550: 54 4b 5f 54 4f 5f 42 4c 4f 42 2c 20 69 6e 31 20  TK_TO_BLOB, in1 
c560: 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
c570: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66  m[pOp->p1];.  if
c580: 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20  ( pIn1->flags & 
c590: 4d 45 4d 5f 4e 75 6c 6c 20 29 20 62 72 65 61 6b  MEM_Null ) break
c5a0: 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66  ;.  if( (pIn1->f
c5b0: 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 29  lags & MEM_Blob)
c5c0: 3d 3d 30 20 29 7b 0a 20 20 20 20 61 70 70 6c 79  ==0 ){.    apply
c5d0: 41 66 66 69 6e 69 74 79 28 70 49 6e 31 2c 20 53  Affinity(pIn1, S
c5e0: 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 2c 20  QLITE_AFF_TEXT, 
c5f0: 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 61  encoding);.    a
c600: 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61  ssert( pIn1->fla
c610: 67 73 20 26 20 4d 45 4d 5f 53 74 72 20 7c 7c 20  gs & MEM_Str || 
c620: 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64  db->mallocFailed
c630: 20 29 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79   );.    MemSetTy
c640: 70 65 46 6c 61 67 28 70 49 6e 31 2c 20 4d 45 4d  peFlag(pIn1, MEM
c650: 5f 42 6c 6f 62 29 3b 0a 20 20 7d 65 6c 73 65 7b  _Blob);.  }else{
c660: 0a 20 20 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73  .    pIn1->flags
c670: 20 26 3d 20 7e 28 4d 45 4d 5f 54 79 70 65 4d 61   &= ~(MEM_TypeMa
c680: 73 6b 26 7e 4d 45 4d 5f 42 6c 6f 62 29 3b 0a 20  sk&~MEM_Blob);. 
c690: 20 7d 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f   }.  UPDATE_MAX_
c6a0: 42 4c 4f 42 53 49 5a 45 28 70 49 6e 31 29 3b 0a  BLOBSIZE(pIn1);.
c6b0: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
c6c0: 70 63 6f 64 65 3a 20 54 6f 4e 75 6d 65 72 69 63  pcode: ToNumeric
c6d0: 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   P1 * * * *.**.*
c6e0: 2a 20 46 6f 72 63 65 20 74 68 65 20 76 61 6c 75  * Force the valu
c6f0: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
c700: 20 74 6f 20 62 65 20 6e 75 6d 65 72 69 63 20 28   to be numeric (
c710: 65 69 74 68 65 72 20 61 6e 0a 2a 2a 20 69 6e 74  either an.** int
c720: 65 67 65 72 20 6f 72 20 61 20 66 6c 6f 61 74 69  eger or a floati
c730: 6e 67 2d 70 6f 69 6e 74 20 6e 75 6d 62 65 72 2e  ng-point number.
c740: 29 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75  ).** If the valu
c750: 65 20 69 73 20 74 65 78 74 20 6f 72 20 62 6c 6f  e is text or blo
c760: 62 2c 20 74 72 79 20 74 6f 20 63 6f 6e 76 65 72  b, try to conver
c770: 74 20 69 74 20 74 6f 20 61 6e 20 75 73 69 6e 67  t it to an using
c780: 20 74 68 65 0a 2a 2a 20 65 71 75 69 76 61 6c 65   the.** equivale
c790: 6e 74 20 6f 66 20 61 74 6f 69 28 29 20 6f 72 20  nt of atoi() or 
c7a0: 61 74 6f 66 28 29 20 61 6e 64 20 73 74 6f 72 65  atof() and store
c7b0: 20 30 20 69 66 20 6e 6f 20 73 75 63 68 20 63 6f   0 if no such co
c7c0: 6e 76 65 72 73 69 6f 6e 20 0a 2a 2a 20 69 73 20  nversion .** is 
c7d0: 70 6f 73 73 69 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20  possible..**.** 
c7e0: 41 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69 73 20  A NULL value is 
c7f0: 6e 6f 74 20 63 68 61 6e 67 65 64 20 62 79 20 74  not changed by t
c800: 68 69 73 20 72 6f 75 74 69 6e 65 2e 20 20 49 74  his routine.  It
c810: 20 72 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a   remains NULL..*
c820: 2f 0a 63 61 73 65 20 4f 50 5f 54 6f 4e 75 6d 65  /.case OP_ToNume
c830: 72 69 63 3a 20 7b 20 20 20 20 20 20 20 20 20 20  ric: {          
c840: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
c850: 61 73 20 54 4b 5f 54 4f 5f 4e 55 4d 45 52 49 43  as TK_TO_NUMERIC
c860: 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20  , in1 */.  pIn1 
c870: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
c880: 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
c890: 65 6d 4e 75 6d 65 72 69 66 79 28 70 49 6e 31 29  emNumerify(pIn1)
c8a0: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  ;.  break;.}.#en
c8b0: 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
c8c0: 49 54 5f 43 41 53 54 20 2a 2f 0a 0a 2f 2a 20 4f  IT_CAST */../* O
c8d0: 70 63 6f 64 65 3a 20 54 6f 49 6e 74 20 50 31 20  pcode: ToInt P1 
c8e0: 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f  * * * *.**.** Fo
c8f0: 72 63 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e  rce the value in
c900: 20 72 65 67 69 73 74 65 72 20 50 31 20 74 6f 20   register P1 to 
c910: 62 65 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20  be an integer.  
c920: 49 66 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65 20  If.** The value 
c930: 69 73 20 63 75 72 72 65 6e 74 6c 79 20 61 20 72  is currently a r
c940: 65 61 6c 20 6e 75 6d 62 65 72 2c 20 64 72 6f 70  eal number, drop
c950: 20 69 74 73 20 66 72 61 63 74 69 6f 6e 61 6c 20   its fractional 
c960: 70 61 72 74 2e 0a 2a 2a 20 49 66 20 74 68 65 20  part..** If the 
c970: 76 61 6c 75 65 20 69 73 20 74 65 78 74 20 6f 72  value is text or
c980: 20 62 6c 6f 62 2c 20 74 72 79 20 74 6f 20 63 6f   blob, try to co
c990: 6e 76 65 72 74 20 69 74 20 74 6f 20 61 6e 20 69  nvert it to an i
c9a0: 6e 74 65 67 65 72 20 75 73 69 6e 67 20 74 68 65  nteger using the
c9b0: 0a 2a 2a 20 65 71 75 69 76 61 6c 65 6e 74 20 6f  .** equivalent o
c9c0: 66 20 61 74 6f 69 28 29 20 61 6e 64 20 73 74 6f  f atoi() and sto
c9d0: 72 65 20 30 20 69 66 20 6e 6f 20 73 75 63 68 20  re 0 if no such 
c9e0: 63 6f 6e 76 65 72 73 69 6f 6e 20 69 73 20 70 6f  conversion is po
c9f0: 73 73 69 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 20  ssible..**.** A 
ca00: 4e 55 4c 4c 20 76 61 6c 75 65 20 69 73 20 6e 6f  NULL value is no
ca10: 74 20 63 68 61 6e 67 65 64 20 62 79 20 74 68 69  t changed by thi
ca20: 73 20 72 6f 75 74 69 6e 65 2e 20 20 49 74 20 72  s routine.  It r
ca30: 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a  emains NULL..*/.
ca40: 63 61 73 65 20 4f 50 5f 54 6f 49 6e 74 3a 20 7b  case OP_ToInt: {
ca50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ca60: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
ca70: 54 4f 5f 49 4e 54 2c 20 69 6e 31 20 2a 2f 0a 20  TO_INT, in1 */. 
ca80: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
ca90: 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 28 70  p->p1];.  if( (p
caa0: 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
cab0: 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20 20  _Null)==0 ){.   
cac0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49   sqlite3VdbeMemI
cad0: 6e 74 65 67 65 72 69 66 79 28 70 49 6e 31 29 3b  ntegerify(pIn1);
cae0: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
caf0: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
cb00: 4c 49 54 45 5f 4f 4d 49 54 5f 43 41 53 54 29 20  LITE_OMIT_CAST) 
cb10: 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
cb20: 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47  TE_OMIT_FLOATING
cb30: 5f 50 4f 49 4e 54 29 0a 2f 2a 20 4f 70 63 6f 64  _POINT)./* Opcod
cb40: 65 3a 20 54 6f 52 65 61 6c 20 50 31 20 2a 20 2a  e: ToReal P1 * *
cb50: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65   * *.**.** Force
cb60: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
cb70: 67 69 73 74 65 72 20 50 31 20 74 6f 20 62 65 20  gister P1 to be 
cb80: 61 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74  a floating point
cb90: 20 6e 75 6d 62 65 72 2e 0a 2a 2a 20 49 66 20 54   number..** If T
cba0: 68 65 20 76 61 6c 75 65 20 69 73 20 63 75 72 72  he value is curr
cbb0: 65 6e 74 6c 79 20 61 6e 20 69 6e 74 65 67 65 72  ently an integer
cbc0: 2c 20 63 6f 6e 76 65 72 74 20 69 74 2e 0a 2a 2a  , convert it..**
cbd0: 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 69 73   If the value is
cbe0: 20 74 65 78 74 20 6f 72 20 62 6c 6f 62 2c 20 74   text or blob, t
cbf0: 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20 69 74  ry to convert it
cc00: 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 75   to an integer u
cc10: 73 69 6e 67 20 74 68 65 0a 2a 2a 20 65 71 75 69  sing the.** equi
cc20: 76 61 6c 65 6e 74 20 6f 66 20 61 74 6f 69 28 29  valent of atoi()
cc30: 20 61 6e 64 20 73 74 6f 72 65 20 30 2e 30 20 69   and store 0.0 i
cc40: 66 20 6e 6f 20 73 75 63 68 20 63 6f 6e 76 65 72  f no such conver
cc50: 73 69 6f 6e 20 69 73 20 70 6f 73 73 69 62 6c 65  sion is possible
cc60: 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76  ..**.** A NULL v
cc70: 61 6c 75 65 20 69 73 20 6e 6f 74 20 63 68 61 6e  alue is not chan
cc80: 67 65 64 20 62 79 20 74 68 69 73 20 72 6f 75 74  ged by this rout
cc90: 69 6e 65 2e 20 20 49 74 20 72 65 6d 61 69 6e 73  ine.  It remains
cca0: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f   NULL..*/.case O
ccb0: 50 5f 54 6f 52 65 61 6c 3a 20 7b 20 20 20 20 20  P_ToReal: {     
ccc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
ccd0: 73 61 6d 65 20 61 73 20 54 4b 5f 54 4f 5f 52 45  same as TK_TO_RE
cce0: 41 4c 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e  AL, in1 */.  pIn
ccf0: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
cd00: 31 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f  1];.  memAboutTo
cd10: 43 68 61 6e 67 65 28 70 2c 20 70 49 6e 31 29 3b  Change(p, pIn1);
cd20: 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c  .  if( (pIn1->fl
cd30: 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d  ags & MEM_Null)=
cd40: 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  =0 ){.    sqlite
cd50: 33 56 64 62 65 4d 65 6d 52 65 61 6c 69 66 79 28  3VdbeMemRealify(
cd60: 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65  pIn1);.  }.  bre
cd70: 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ak;.}.#endif /* 
cd80: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
cd90: 4f 4d 49 54 5f 43 41 53 54 29 20 26 26 20 21 64  OMIT_CAST) && !d
cda0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
cdb0: 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e  IT_FLOATING_POIN
cdc0: 54 29 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65  T) */../* Opcode
cdd0: 3a 20 4c 74 20 50 31 20 50 32 20 50 33 20 50 34  : Lt P1 P2 P3 P4
cde0: 20 50 35 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 61 72   P5.**.** Compar
cdf0: 65 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20  e the values in 
ce00: 72 65 67 69 73 74 65 72 20 50 31 20 61 6e 64 20  register P1 and 
ce10: 50 33 2e 20 20 49 66 20 72 65 67 28 50 33 29 3c  P3.  If reg(P3)<
ce20: 72 65 67 28 50 31 29 20 74 68 65 6e 0a 2a 2a 20  reg(P1) then.** 
ce30: 6a 75 6d 70 20 74 6f 20 61 64 64 72 65 73 73 20  jump to address 
ce40: 50 32 2e 20 20 0a 2a 2a 0a 2a 2a 20 49 66 20 74  P2.  .**.** If t
ce50: 68 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46  he SQLITE_JUMPIF
ce60: 4e 55 4c 4c 20 62 69 74 20 6f 66 20 50 35 20 69  NULL bit of P5 i
ce70: 73 20 73 65 74 20 61 6e 64 20 65 69 74 68 65 72  s set and either
ce80: 20 72 65 67 28 50 31 29 20 6f 72 0a 2a 2a 20 72   reg(P1) or.** r
ce90: 65 67 28 50 33 29 20 69 73 20 4e 55 4c 4c 20 74  eg(P3) is NULL t
cea0: 68 65 6e 20 74 61 6b 65 20 74 68 65 20 6a 75 6d  hen take the jum
ceb0: 70 2e 20 20 49 66 20 74 68 65 20 53 51 4c 49 54  p.  If the SQLIT
cec0: 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 0a 2a 2a  E_JUMPIFNULL .**
ced0: 20 62 69 74 20 69 73 20 63 6c 65 61 72 20 74 68   bit is clear th
cee0: 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20  en fall through 
cef0: 69 66 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e  if either operan
cf00: 64 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a  d is NULL..**.**
cf10: 20 54 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f   The SQLITE_AFF_
cf20: 4d 41 53 4b 20 70 6f 72 74 69 6f 6e 20 6f 66 20  MASK portion of 
cf30: 50 35 20 6d 75 73 74 20 62 65 20 61 6e 20 61 66  P5 must be an af
cf40: 66 69 6e 69 74 79 20 63 68 61 72 61 63 74 65 72  finity character
cf50: 20 2d 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46   -.** SQLITE_AFF
cf60: 5f 54 45 58 54 2c 20 53 51 4c 49 54 45 5f 41 46  _TEXT, SQLITE_AF
cf70: 46 5f 49 4e 54 45 47 45 52 2c 20 61 6e 64 20 73  F_INTEGER, and s
cf80: 6f 20 66 6f 72 74 68 2e 20 41 6e 20 61 74 74 65  o forth. An atte
cf90: 6d 70 74 20 69 73 20 6d 61 64 65 20 0a 2a 2a 20  mpt is made .** 
cfa0: 74 6f 20 63 6f 65 72 63 65 20 62 6f 74 68 20 69  to coerce both i
cfb0: 6e 70 75 74 73 20 61 63 63 6f 72 64 69 6e 67 20  nputs according 
cfc0: 74 6f 20 74 68 69 73 20 61 66 66 69 6e 69 74 79  to this affinity
cfd0: 20 62 65 66 6f 72 65 20 74 68 65 0a 2a 2a 20 63   before the.** c
cfe0: 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 6d 61 64  omparison is mad
cff0: 65 2e 20 49 66 20 74 68 65 20 53 51 4c 49 54 45  e. If the SQLITE
d000: 5f 41 46 46 5f 4d 41 53 4b 20 69 73 20 30 78 30  _AFF_MASK is 0x0
d010: 30 2c 20 74 68 65 6e 20 6e 75 6d 65 72 69 63 0a  0, then numeric.
d020: 2a 2a 20 61 66 66 69 6e 69 74 79 20 69 73 20 75  ** affinity is u
d030: 73 65 64 2e 20 4e 6f 74 65 20 74 68 61 74 20 74  sed. Note that t
d040: 68 65 20 61 66 66 69 6e 69 74 79 20 63 6f 6e 76  he affinity conv
d050: 65 72 73 69 6f 6e 73 20 61 72 65 20 73 74 6f 72  ersions are stor
d060: 65 64 0a 2a 2a 20 62 61 63 6b 20 69 6e 74 6f 20  ed.** back into 
d070: 74 68 65 20 69 6e 70 75 74 20 72 65 67 69 73 74  the input regist
d080: 65 72 73 20 50 31 20 61 6e 64 20 50 33 2e 20 20  ers P1 and P3.  
d090: 53 6f 20 74 68 69 73 20 6f 70 63 6f 64 65 20 63  So this opcode c
d0a0: 61 6e 20 63 61 75 73 65 0a 2a 2a 20 70 65 72 73  an cause.** pers
d0b0: 69 73 74 65 6e 74 20 63 68 61 6e 67 65 73 20 74  istent changes t
d0c0: 6f 20 72 65 67 69 73 74 65 72 73 20 50 31 20 61  o registers P1 a
d0d0: 6e 64 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 4f 6e 63  nd P3..**.** Onc
d0e0: 65 20 61 6e 79 20 63 6f 6e 76 65 72 73 69 6f 6e  e any conversion
d0f0: 73 20 68 61 76 65 20 74 61 6b 65 6e 20 70 6c 61  s have taken pla
d100: 63 65 2c 20 61 6e 64 20 6e 65 69 74 68 65 72 20  ce, and neither 
d110: 76 61 6c 75 65 20 69 73 20 4e 55 4c 4c 2c 20 0a  value is NULL, .
d120: 2a 2a 20 74 68 65 20 76 61 6c 75 65 73 20 61 72  ** the values ar
d130: 65 20 63 6f 6d 70 61 72 65 64 2e 20 49 66 20 62  e compared. If b
d140: 6f 74 68 20 76 61 6c 75 65 73 20 61 72 65 20 62  oth values are b
d150: 6c 6f 62 73 20 74 68 65 6e 20 6d 65 6d 63 6d 70  lobs then memcmp
d160: 28 29 20 69 73 0a 2a 2a 20 75 73 65 64 20 74 6f  () is.** used to
d170: 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20 72   determine the r
d180: 65 73 75 6c 74 73 20 6f 66 20 74 68 65 20 63 6f  esults of the co
d190: 6d 70 61 72 69 73 6f 6e 2e 20 20 49 66 20 62 6f  mparison.  If bo
d1a0: 74 68 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72 65  th values.** are
d1b0: 20 74 65 78 74 2c 20 74 68 65 6e 20 74 68 65 20   text, then the 
d1c0: 61 70 70 72 6f 70 72 69 61 74 65 20 63 6f 6c 6c  appropriate coll
d1d0: 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 73  ating function s
d1e0: 70 65 63 69 66 69 65 64 20 69 6e 0a 2a 2a 20 50  pecified in.** P
d1f0: 34 20 69 73 20 20 75 73 65 64 20 74 6f 20 64 6f  4 is  used to do
d200: 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e   the comparison.
d210: 20 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20 73    If P4 is not s
d220: 70 65 63 69 66 69 65 64 20 74 68 65 6e 0a 2a 2a  pecified then.**
d230: 20 6d 65 6d 63 6d 70 28 29 20 69 73 20 75 73 65   memcmp() is use
d240: 64 20 74 6f 20 63 6f 6d 70 61 72 65 20 74 65 78  d to compare tex
d250: 74 20 73 74 72 69 6e 67 2e 20 20 49 66 20 62 6f  t string.  If bo
d260: 74 68 20 76 61 6c 75 65 73 20 61 72 65 0a 2a 2a  th values are.**
d270: 20 6e 75 6d 65 72 69 63 2c 20 74 68 65 6e 20 61   numeric, then a
d280: 20 6e 75 6d 65 72 69 63 20 63 6f 6d 70 61 72 69   numeric compari
d290: 73 6f 6e 20 69 73 20 75 73 65 64 2e 20 49 66 20  son is used. If 
d2a0: 74 68 65 20 74 77 6f 20 76 61 6c 75 65 73 0a 2a  the two values.*
d2b0: 2a 20 61 72 65 20 6f 66 20 64 69 66 66 65 72 65  * are of differe
d2c0: 6e 74 20 74 79 70 65 73 2c 20 74 68 65 6e 20 6e  nt types, then n
d2d0: 75 6d 62 65 72 73 20 61 72 65 20 63 6f 6e 73 69  umbers are consi
d2e0: 64 65 72 65 64 20 6c 65 73 73 20 74 68 61 6e 0a  dered less than.
d2f0: 2a 2a 20 73 74 72 69 6e 67 73 20 61 6e 64 20 73  ** strings and s
d300: 74 72 69 6e 67 73 20 61 72 65 20 63 6f 6e 73 69  trings are consi
d310: 64 65 72 65 64 20 6c 65 73 73 20 74 68 61 6e 20  dered less than 
d320: 62 6c 6f 62 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  blobs..**.** If 
d330: 74 68 65 20 53 51 4c 49 54 45 5f 53 54 4f 52 45  the SQLITE_STORE
d340: 50 32 20 62 69 74 20 6f 66 20 50 35 20 69 73 20  P2 bit of P5 is 
d350: 73 65 74 2c 20 74 68 65 6e 20 64 6f 20 6e 6f 74  set, then do not
d360: 20 6a 75 6d 70 2e 20 20 49 6e 73 74 65 61 64 2c   jump.  Instead,
d370: 0a 2a 2a 20 73 74 6f 72 65 20 61 20 62 6f 6f 6c  .** store a bool
d380: 65 61 6e 20 72 65 73 75 6c 74 20 28 65 69 74 68  ean result (eith
d390: 65 72 20 30 2c 20 6f 72 20 31 2c 20 6f 72 20 4e  er 0, or 1, or N
d3a0: 55 4c 4c 29 20 69 6e 20 72 65 67 69 73 74 65 72  ULL) in register
d3b0: 20 50 32 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64   P2..*/./* Opcod
d3c0: 65 3a 20 4e 65 20 50 31 20 50 32 20 50 33 20 50  e: Ne P1 P2 P3 P
d3d0: 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  4 P5.**.** This 
d3e0: 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20  works just like 
d3f0: 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78  the Lt opcode ex
d400: 63 65 70 74 20 74 68 61 74 20 74 68 65 20 6a 75  cept that the ju
d410: 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a  mp is taken if.*
d420: 2a 20 74 68 65 20 6f 70 65 72 61 6e 64 73 20 69  * the operands i
d430: 6e 20 72 65 67 69 73 74 65 72 73 20 50 31 20 61  n registers P1 a
d440: 6e 64 20 50 33 20 61 72 65 20 6e 6f 74 20 65 71  nd P3 are not eq
d450: 75 61 6c 2e 20 20 53 65 65 20 74 68 65 20 4c 74  ual.  See the Lt
d460: 20 6f 70 63 6f 64 65 20 66 6f 72 0a 2a 2a 20 61   opcode for.** a
d470: 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d  dditional inform
d480: 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  ation..**.** If 
d490: 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73  SQLITE_NULLEQ is
d4a0: 20 73 65 74 20 69 6e 20 50 35 20 74 68 65 6e 20   set in P5 then 
d4b0: 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 63 6f  the result of co
d4c0: 6d 70 61 72 69 73 6f 6e 20 69 73 20 61 6c 77 61  mparison is alwa
d4d0: 79 73 20 65 69 74 68 65 72 0a 2a 2a 20 74 72 75  ys either.** tru
d4e0: 65 20 6f 72 20 66 61 6c 73 65 20 61 6e 64 20 69  e or false and i
d4f0: 73 20 6e 65 76 65 72 20 4e 55 4c 4c 2e 20 20 49  s never NULL.  I
d500: 66 20 62 6f 74 68 20 6f 70 65 72 61 6e 64 73 20  f both operands 
d510: 61 72 65 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68  are NULL then th
d520: 65 20 72 65 73 75 6c 74 0a 2a 2a 20 6f 66 20 63  e result.** of c
d530: 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 66 61 6c  omparison is fal
d540: 73 65 2e 20 20 49 66 20 65 69 74 68 65 72 20 6f  se.  If either o
d550: 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20 74  perand is NULL t
d560: 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69  hen the result i
d570: 73 20 74 72 75 65 2e 0a 2a 2a 20 49 66 20 6e 65  s true..** If ne
d580: 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73  ither operand is
d590: 20 4e 55 4c 4c 20 74 68 65 20 74 68 65 20 72 65   NULL the the re
d5a0: 73 75 6c 74 20 69 73 20 74 68 65 20 73 61 6d 65  sult is the same
d5b0: 20 61 73 20 69 74 20 77 6f 75 6c 64 20 62 65 20   as it would be 
d5c0: 69 66 0a 2a 2a 20 74 68 65 20 53 51 4c 49 54 45  if.** the SQLITE
d5d0: 5f 4e 55 4c 4c 45 51 20 66 6c 61 67 20 77 65 72  _NULLEQ flag wer
d5e0: 65 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 50  e omitted from P
d5f0: 35 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  5..*/./* Opcode:
d600: 20 45 71 20 50 31 20 50 32 20 50 33 20 50 34 20   Eq P1 P2 P3 P4 
d610: 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f  P5.**.** This wo
d620: 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 74 68  rks just like th
d630: 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78 63 65  e Lt opcode exce
d640: 70 74 20 74 68 61 74 20 74 68 65 20 6a 75 6d 70  pt that the jump
d650: 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20   is taken if.** 
d660: 74 68 65 20 6f 70 65 72 61 6e 64 73 20 69 6e 20  the operands in 
d670: 72 65 67 69 73 74 65 72 73 20 50 31 20 61 6e 64  registers P1 and
d680: 20 50 33 20 61 72 65 20 65 71 75 61 6c 2e 0a 2a   P3 are equal..*
d690: 2a 20 53 65 65 20 74 68 65 20 4c 74 20 6f 70 63  * See the Lt opc
d6a0: 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e  ode for addition
d6b0: 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a  al information..
d6c0: 2a 2a 0a 2a 2a 20 49 66 20 53 51 4c 49 54 45 5f  **.** If SQLITE_
d6d0: 4e 55 4c 4c 45 51 20 69 73 20 73 65 74 20 69 6e  NULLEQ is set in
d6e0: 20 50 35 20 74 68 65 6e 20 74 68 65 20 72 65 73   P5 then the res
d6f0: 75 6c 74 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f  ult of compariso
d700: 6e 20 69 73 20 61 6c 77 61 79 73 20 65 69 74 68  n is always eith
d710: 65 72 0a 2a 2a 20 74 72 75 65 20 6f 72 20 66 61  er.** true or fa
d720: 6c 73 65 20 61 6e 64 20 69 73 20 6e 65 76 65 72  lse and is never
d730: 20 4e 55 4c 4c 2e 20 20 49 66 20 62 6f 74 68 20   NULL.  If both 
d740: 6f 70 65 72 61 6e 64 73 20 61 72 65 20 4e 55 4c  operands are NUL
d750: 4c 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c  L then the resul
d760: 74 0a 2a 2a 20 6f 66 20 63 6f 6d 70 61 72 69 73  t.** of comparis
d770: 6f 6e 20 69 73 20 74 72 75 65 2e 20 20 49 66 20  on is true.  If 
d780: 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69  either operand i
d790: 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65 20  s NULL then the 
d7a0: 72 65 73 75 6c 74 20 69 73 20 66 61 6c 73 65 2e  result is false.
d7b0: 0a 2a 2a 20 49 66 20 6e 65 69 74 68 65 72 20 6f  .** If neither o
d7c0: 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20 74  perand is NULL t
d7d0: 68 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  he the result is
d7e0: 20 74 68 65 20 73 61 6d 65 20 61 73 20 69 74 20   the same as it 
d7f0: 77 6f 75 6c 64 20 62 65 20 69 66 0a 2a 2a 20 74  would be if.** t
d800: 68 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51  he SQLITE_NULLEQ
d810: 20 66 6c 61 67 20 77 65 72 65 20 6f 6d 69 74 74   flag were omitt
d820: 65 64 20 66 72 6f 6d 20 50 35 2e 0a 2a 2f 0a 2f  ed from P5..*/./
d830: 2a 20 4f 70 63 6f 64 65 3a 20 4c 65 20 50 31 20  * Opcode: Le P1 
d840: 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a  P2 P3 P4 P5.**.*
d850: 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73  * This works jus
d860: 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70  t like the Lt op
d870: 63 6f 64 65 20 65 78 63 65 70 74 20 74 68 61 74  code except that
d880: 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b   the jump is tak
d890: 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f 6e  en if.** the con
d8a0: 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72  tent of register
d8b0: 20 50 33 20 69 73 20 6c 65 73 73 20 74 68 61 6e   P3 is less than
d8c0: 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65   or equal to the
d8d0: 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 72   content of.** r
d8e0: 65 67 69 73 74 65 72 20 50 31 2e 20 20 53 65 65  egister P1.  See
d8f0: 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66   the Lt opcode f
d900: 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e  or additional in
d910: 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a  formation..*/./*
d920: 20 4f 70 63 6f 64 65 3a 20 47 74 20 50 31 20 50   Opcode: Gt P1 P
d930: 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a  2 P3 P4 P5.**.**
d940: 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74   This works just
d950: 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63   like the Lt opc
d960: 6f 64 65 20 65 78 63 65 70 74 20 74 68 61 74 20  ode except that 
d970: 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65  the jump is take
d980: 6e 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74  n if.** the cont
d990: 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20  ent of register 
d9a0: 50 33 20 69 73 20 67 72 65 61 74 65 72 20 74 68  P3 is greater th
d9b0: 61 6e 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  an the content o
d9c0: 66 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31  f.** register P1
d9d0: 2e 20 20 53 65 65 20 74 68 65 20 4c 74 20 6f 70  .  See the Lt op
d9e0: 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f  code for additio
d9f0: 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  nal information.
da00: 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 47  .*/./* Opcode: G
da10: 65 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  e P1 P2 P3 P4 P5
da20: 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b  .**.** This work
da30: 73 20 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20  s just like the 
da40: 4c 74 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74  Lt opcode except
da50: 20 74 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69   that the jump i
da60: 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68  s taken if.** th
da70: 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67  e content of reg
da80: 69 73 74 65 72 20 50 33 20 69 73 20 67 72 65 61  ister P3 is grea
da90: 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61  ter than or equa
daa0: 6c 20 74 6f 20 74 68 65 20 63 6f 6e 74 65 6e 74  l to the content
dab0: 20 6f 66 0a 2a 2a 20 72 65 67 69 73 74 65 72 20   of.** register 
dac0: 50 31 2e 20 20 53 65 65 20 74 68 65 20 4c 74 20  P1.  See the Lt 
dad0: 6f 70 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74  opcode for addit
dae0: 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ional informatio
daf0: 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 45 71  n..*/.case OP_Eq
db00: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :               
db10: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 45 51  /* same as TK_EQ
db20: 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33  , jump, in1, in3
db30: 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 3a 20   */.case OP_Ne: 
db40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
db50: 20 73 61 6d 65 20 61 73 20 54 4b 5f 4e 45 2c 20   same as TK_NE, 
db60: 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a  jump, in1, in3 *
db70: 2f 0a 63 61 73 65 20 4f 50 5f 4c 74 3a 20 20 20  /.case OP_Lt:   
db80: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
db90: 61 6d 65 20 61 73 20 54 4b 5f 4c 54 2c 20 6a 75  ame as TK_LT, ju
dba0: 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a  mp, in1, in3 */.
dbb0: 63 61 73 65 20 4f 50 5f 4c 65 3a 20 20 20 20 20  case OP_Le:     
dbc0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
dbd0: 65 20 61 73 20 54 4b 5f 4c 45 2c 20 6a 75 6d 70  e as TK_LE, jump
dbe0: 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61  , in1, in3 */.ca
dbf0: 73 65 20 4f 50 5f 47 74 3a 20 20 20 20 20 20 20  se OP_Gt:       
dc00: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
dc10: 61 73 20 54 4b 5f 47 54 2c 20 6a 75 6d 70 2c 20  as TK_GT, jump, 
dc20: 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65  in1, in3 */.case
dc30: 20 4f 50 5f 47 65 3a 20 7b 20 20 20 20 20 20 20   OP_Ge: {       
dc40: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
dc50: 20 54 4b 5f 47 45 2c 20 6a 75 6d 70 2c 20 69 6e   TK_GE, jump, in
dc60: 31 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20  1, in3 */.  int 
dc70: 72 65 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  res;            
dc80: 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20 74 68 65  /* Result of the
dc90: 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 66 20 70   comparison of p
dca0: 49 6e 31 20 61 67 61 69 6e 73 74 20 70 49 6e 33  In1 against pIn3
dcb0: 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 69 6e   */.  char affin
dcc0: 69 74 79 3b 20 20 20 20 20 20 2f 2a 20 41 66 66  ity;      /* Aff
dcd0: 69 6e 69 74 79 20 74 6f 20 75 73 65 20 66 6f 72  inity to use for
dce0: 20 63 6f 6d 70 61 72 69 73 6f 6e 20 2a 2f 0a 20   comparison */. 
dcf0: 20 75 31 36 20 66 6c 61 67 73 31 3b 20 20 20 20   u16 flags1;    
dd00: 20 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66 20       /* Copy of 
dd10: 69 6e 69 74 69 61 6c 20 76 61 6c 75 65 20 6f 66  initial value of
dd20: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 2a 2f 0a   pIn1->flags */.
dd30: 20 20 75 31 36 20 66 6c 61 67 73 33 3b 20 20 20    u16 flags3;   
dd40: 20 20 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66        /* Copy of
dd50: 20 69 6e 69 74 69 61 6c 20 76 61 6c 75 65 20 6f   initial value o
dd60: 66 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 2a 2f  f pIn3->flags */
dd70: 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ..  pIn1 = &aMem
dd80: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e  [pOp->p1];.  pIn
dd90: 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  3 = &aMem[pOp->p
dda0: 33 5d 3b 0a 20 20 66 6c 61 67 73 31 20 3d 20 70  3];.  flags1 = p
ddb0: 49 6e 31 2d 3e 66 6c 61 67 73 3b 0a 20 20 66 6c  In1->flags;.  fl
ddc0: 61 67 73 33 20 3d 20 70 49 6e 33 2d 3e 66 6c 61  ags3 = pIn3->fla
ddd0: 67 73 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d  gs;.  if( (pIn1-
dde0: 3e 66 6c 61 67 73 20 7c 20 70 49 6e 33 2d 3e 66  >flags | pIn3->f
ddf0: 6c 61 67 73 29 26 4d 45 4d 5f 4e 75 6c 6c 20 29  lags)&MEM_Null )
de00: 7b 0a 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 72 20  {.    /* One or 
de10: 62 6f 74 68 20 6f 70 65 72 61 6e 64 73 20 61 72  both operands ar
de20: 65 20 4e 55 4c 4c 20 2a 2f 0a 20 20 20 20 69 66  e NULL */.    if
de30: 28 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49  ( pOp->p5 & SQLI
de40: 54 45 5f 4e 55 4c 4c 45 51 20 29 7b 0a 20 20 20  TE_NULLEQ ){.   
de50: 20 20 20 2f 2a 20 49 66 20 53 51 4c 49 54 45 5f     /* If SQLITE_
de60: 4e 55 4c 4c 45 51 20 69 73 20 73 65 74 20 28 77  NULLEQ is set (w
de70: 68 69 63 68 20 77 69 6c 6c 20 6f 6e 6c 79 20 68  hich will only h
de80: 61 70 70 65 6e 20 69 66 20 74 68 65 20 6f 70 65  appen if the ope
de90: 72 61 74 6f 72 20 69 73 0a 20 20 20 20 20 20 2a  rator is.      *
dea0: 2a 20 4f 50 5f 45 71 20 6f 72 20 4f 50 5f 4e 65  * OP_Eq or OP_Ne
deb0: 29 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65 20  ) then take the 
dec0: 6a 75 6d 70 20 6f 72 20 6e 6f 74 20 64 65 70 65  jump or not depe
ded0: 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65 72  nding on whether
dee0: 0a 20 20 20 20 20 20 2a 2a 20 6f 72 20 6e 6f 74  .      ** or not
def0: 20 62 6f 74 68 20 6f 70 65 72 61 6e 64 73 20 61   both operands a
df00: 72 65 20 6e 75 6c 6c 2e 0a 20 20 20 20 20 20 2a  re null..      *
df10: 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  /.      assert( 
df20: 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
df30: 45 71 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64  Eq || pOp->opcod
df40: 65 3d 3d 4f 50 5f 4e 65 20 29 3b 0a 20 20 20 20  e==OP_Ne );.    
df50: 20 20 72 65 73 20 3d 20 28 70 49 6e 31 2d 3e 66    res = (pIn1->f
df60: 6c 61 67 73 20 26 20 70 49 6e 33 2d 3e 66 6c 61  lags & pIn3->fla
df70: 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d  gs & MEM_Null)==
df80: 30 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  0;.    }else{.  
df90: 20 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f 4e 55      /* SQLITE_NU
dfa0: 4c 4c 45 51 20 69 73 20 63 6c 65 61 72 20 61 6e  LLEQ is clear an
dfb0: 64 20 61 74 20 6c 65 61 73 74 20 6f 6e 65 20 6f  d at least one o
dfc0: 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2c 0a  perand is NULL,.
dfd0: 20 20 20 20 20 20 2a 2a 20 74 68 65 6e 20 74 68        ** then th
dfe0: 65 20 72 65 73 75 6c 74 20 69 73 20 61 6c 77 61  e result is alwa
dff0: 79 73 20 4e 55 4c 4c 2e 0a 20 20 20 20 20 20 2a  ys NULL..      *
e000: 2a 20 54 68 65 20 6a 75 6d 70 20 69 73 20 74 61  * The jump is ta
e010: 6b 65 6e 20 69 66 20 74 68 65 20 53 51 4c 49 54  ken if the SQLIT
e020: 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 62 69 74  E_JUMPIFNULL bit
e030: 20 69 73 20 73 65 74 2e 0a 20 20 20 20 20 20 2a   is set..      *
e040: 2f 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d  /.      if( pOp-
e050: 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 53 54 4f  >p5 & SQLITE_STO
e060: 52 45 50 32 20 29 7b 0a 20 20 20 20 20 20 20 20  REP2 ){.        
e070: 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
e080: 2d 3e 70 32 5d 3b 0a 20 20 20 20 20 20 20 20 4d  ->p2];.        M
e090: 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f  emSetTypeFlag(pO
e0a0: 75 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20  ut, MEM_Null);. 
e0b0: 20 20 20 20 20 20 20 52 45 47 49 53 54 45 52 5f         REGISTER_
e0c0: 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70  TRACE(pOp->p2, p
e0d0: 4f 75 74 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73  Out);.      }els
e0e0: 65 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20  e if( pOp->p5 & 
e0f0: 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c  SQLITE_JUMPIFNUL
e100: 4c 20 29 7b 0a 20 20 20 20 20 20 20 20 70 63 20  L ){.        pc 
e110: 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 20  = pOp->p2-1;.   
e120: 20 20 20 7d 0a 20 20 20 20 20 20 62 72 65 61 6b     }.      break
e130: 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b  ;.    }.  }else{
e140: 0a 20 20 20 20 2f 2a 20 4e 65 69 74 68 65 72 20  .    /* Neither 
e150: 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2e  operand is NULL.
e160: 20 20 44 6f 20 61 20 63 6f 6d 70 61 72 69 73 6f    Do a compariso
e170: 6e 2e 20 2a 2f 0a 20 20 20 20 61 66 66 69 6e 69  n. */.    affini
e180: 74 79 20 3d 20 70 4f 70 2d 3e 70 35 20 26 20 53  ty = pOp->p5 & S
e190: 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 3b 0a  QLITE_AFF_MASK;.
e1a0: 20 20 20 20 69 66 28 20 61 66 66 69 6e 69 74 79      if( affinity
e1b0: 20 29 7b 0a 20 20 20 20 20 20 61 70 70 6c 79 41   ){.      applyA
e1c0: 66 66 69 6e 69 74 79 28 70 49 6e 31 2c 20 61 66  ffinity(pIn1, af
e1d0: 66 69 6e 69 74 79 2c 20 65 6e 63 6f 64 69 6e 67  finity, encoding
e1e0: 29 3b 0a 20 20 20 20 20 20 61 70 70 6c 79 41 66  );.      applyAf
e1f0: 66 69 6e 69 74 79 28 70 49 6e 33 2c 20 61 66 66  finity(pIn3, aff
e200: 69 6e 69 74 79 2c 20 65 6e 63 6f 64 69 6e 67 29  inity, encoding)
e210: 3b 0a 20 20 20 20 20 20 69 66 28 20 64 62 2d 3e  ;.      if( db->
e220: 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 20 67  mallocFailed ) g
e230: 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20  oto no_mem;.    
e240: 7d 0a 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  }..    assert( p
e250: 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 43  Op->p4type==P4_C
e260: 4f 4c 4c 53 45 51 20 7c 7c 20 70 4f 70 2d 3e 70  OLLSEQ || pOp->p
e270: 34 2e 70 43 6f 6c 6c 3d 3d 30 20 29 3b 0a 20 20  4.pColl==0 );.  
e280: 20 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e    ExpandBlob(pIn
e290: 31 29 3b 0a 20 20 20 20 45 78 70 61 6e 64 42 6c  1);.    ExpandBl
e2a0: 6f 62 28 70 49 6e 33 29 3b 0a 20 20 20 20 72 65  ob(pIn3);.    re
e2b0: 73 20 3d 20 73 71 6c 69 74 65 33 4d 65 6d 43 6f  s = sqlite3MemCo
e2c0: 6d 70 61 72 65 28 70 49 6e 33 2c 20 70 49 6e 31  mpare(pIn3, pIn1
e2d0: 2c 20 70 4f 70 2d 3e 70 34 2e 70 43 6f 6c 6c 29  , pOp->p4.pColl)
e2e0: 3b 0a 20 20 7d 0a 20 20 73 77 69 74 63 68 28 20  ;.  }.  switch( 
e2f0: 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 20  pOp->opcode ){. 
e300: 20 20 20 63 61 73 65 20 4f 50 5f 45 71 3a 20 20     case OP_Eq:  
e310: 20 20 72 65 73 20 3d 20 72 65 73 3d 3d 30 3b 20    res = res==0; 
e320: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63      break;.    c
e330: 61 73 65 20 4f 50 5f 4e 65 3a 20 20 20 20 72 65  ase OP_Ne:    re
e340: 73 20 3d 20 72 65 73 21 3d 30 3b 20 20 20 20 20  s = res!=0;     
e350: 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
e360: 4f 50 5f 4c 74 3a 20 20 20 20 72 65 73 20 3d 20  OP_Lt:    res = 
e370: 72 65 73 3c 30 3b 20 20 20 20 20 20 62 72 65 61  res<0;      brea
e380: 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 4c  k;.    case OP_L
e390: 65 3a 20 20 20 20 72 65 73 20 3d 20 72 65 73 3c  e:    res = res<
e3a0: 3d 30 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  =0;     break;. 
e3b0: 20 20 20 63 61 73 65 20 4f 50 5f 47 74 3a 20 20     case OP_Gt:  
e3c0: 20 20 72 65 73 20 3d 20 72 65 73 3e 30 3b 20 20    res = res>0;  
e3d0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 64      break;.    d
e3e0: 65 66 61 75 6c 74 3a 20 20 20 20 20 20 20 72 65  efault:       re
e3f0: 73 20 3d 20 72 65 73 3e 3d 30 3b 20 20 20 20 20  s = res>=0;     
e400: 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 69 66  break;.  }..  if
e410: 28 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49  ( pOp->p5 & SQLI
e420: 54 45 5f 53 54 4f 52 45 50 32 20 29 7b 0a 20 20  TE_STOREP2 ){.  
e430: 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
e440: 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 6d 65 6d  Op->p2];.    mem
e450: 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
e460: 20 70 4f 75 74 29 3b 0a 20 20 20 20 4d 65 6d 53   pOut);.    MemS
e470: 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c  etTypeFlag(pOut,
e480: 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 20 20 70   MEM_Int);.    p
e490: 4f 75 74 2d 3e 75 2e 69 20 3d 20 72 65 73 3b 0a  Out->u.i = res;.
e4a0: 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41      REGISTER_TRA
e4b0: 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74  CE(pOp->p2, pOut
e4c0: 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 72  );.  }else if( r
e4d0: 65 73 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70  es ){.    pc = p
e4e0: 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d 0a 0a 20  Op->p2-1;.  }.. 
e4f0: 20 2f 2a 20 55 6e 64 6f 20 61 6e 79 20 63 68 61   /* Undo any cha
e500: 6e 67 65 73 20 6d 61 64 65 20 62 79 20 61 70 70  nges made by app
e510: 6c 79 41 66 66 69 6e 69 74 79 28 29 20 74 6f 20  lyAffinity() to 
e520: 74 68 65 20 69 6e 70 75 74 20 72 65 67 69 73 74  the input regist
e530: 65 72 73 2e 20 2a 2f 0a 20 20 70 49 6e 31 2d 3e  ers. */.  pIn1->
e540: 66 6c 61 67 73 20 3d 20 28 70 49 6e 31 2d 3e 66  flags = (pIn1->f
e550: 6c 61 67 73 26 7e 4d 45 4d 5f 54 79 70 65 4d 61  lags&~MEM_TypeMa
e560: 73 6b 29 20 7c 20 28 66 6c 61 67 73 31 26 4d 45  sk) | (flags1&ME
e570: 4d 5f 54 79 70 65 4d 61 73 6b 29 3b 0a 20 20 70  M_TypeMask);.  p
e580: 49 6e 33 2d 3e 66 6c 61 67 73 20 3d 20 28 70 49  In3->flags = (pI
e590: 6e 33 2d 3e 66 6c 61 67 73 26 7e 4d 45 4d 5f 54  n3->flags&~MEM_T
e5a0: 79 70 65 4d 61 73 6b 29 20 7c 20 28 66 6c 61 67  ypeMask) | (flag
e5b0: 73 33 26 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 29  s3&MEM_TypeMask)
e5c0: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
e5d0: 20 4f 70 63 6f 64 65 3a 20 50 65 72 6d 75 74 61   Opcode: Permuta
e5e0: 74 69 6f 6e 20 2a 20 2a 20 2a 20 50 34 20 2a 0a  tion * * * P4 *.
e5f0: 2a 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20 70 65  **.** Set the pe
e600: 72 6d 75 74 61 74 69 6f 6e 20 75 73 65 64 20 62  rmutation used b
e610: 79 20 74 68 65 20 4f 50 5f 43 6f 6d 70 61 72 65  y the OP_Compare
e620: 20 6f 70 65 72 61 74 6f 72 20 74 6f 20 62 65 20   operator to be 
e630: 74 68 65 20 61 72 72 61 79 0a 2a 2a 20 6f 66 20  the array.** of 
e640: 69 6e 74 65 67 65 72 73 20 69 6e 20 50 34 2e 0a  integers in P4..
e650: 2a 2a 0a 2a 2a 20 54 68 65 20 70 65 72 6d 75 74  **.** The permut
e660: 61 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 76 61  ation is only va
e670: 6c 69 64 20 75 6e 74 69 6c 20 74 68 65 20 6e 65  lid until the ne
e680: 78 74 20 4f 50 5f 50 65 72 6d 75 74 61 74 69 6f  xt OP_Permutatio
e690: 6e 2c 20 4f 50 5f 43 6f 6d 70 61 72 65 2c 0a 2a  n, OP_Compare,.*
e6a0: 2a 20 4f 50 5f 48 61 6c 74 2c 20 6f 72 20 4f 50  * OP_Halt, or OP
e6b0: 5f 52 65 73 75 6c 74 52 6f 77 2e 20 20 54 79 70  _ResultRow.  Typ
e6c0: 69 63 61 6c 6c 79 20 74 68 65 20 4f 50 5f 50 65  ically the OP_Pe
e6d0: 72 6d 75 74 61 74 69 6f 6e 20 73 68 6f 75 6c 64  rmutation should
e6e0: 20 6f 63 63 75 72 0a 2a 2a 20 69 6d 6d 65 64 69   occur.** immedi
e6f0: 61 74 65 6c 79 20 70 72 69 6f 72 20 74 6f 20 74  ately prior to t
e700: 68 65 20 4f 50 5f 43 6f 6d 70 61 72 65 2e 0a 2a  he OP_Compare..*
e710: 2f 0a 63 61 73 65 20 4f 50 5f 50 65 72 6d 75 74  /.case OP_Permut
e720: 61 74 69 6f 6e 3a 20 7b 0a 20 20 61 73 73 65 72  ation: {.  asser
e730: 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  t( pOp->p4type==
e740: 50 34 5f 49 4e 54 41 52 52 41 59 20 29 3b 0a 20  P4_INTARRAY );. 
e750: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
e760: 2e 61 69 20 29 3b 0a 20 20 61 50 65 72 6d 75 74  .ai );.  aPermut
e770: 65 20 3d 20 70 4f 70 2d 3e 70 34 2e 61 69 3b 0a  e = pOp->p4.ai;.
e780: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
e790: 70 63 6f 64 65 3a 20 43 6f 6d 70 61 72 65 20 50  pcode: Compare P
e7a0: 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a  1 P2 P3 P4 *.**.
e7b0: 2a 2a 20 43 6f 6d 70 61 72 65 20 74 77 6f 20 76  ** Compare two v
e7c0: 65 63 74 6f 72 73 20 6f 66 20 72 65 67 69 73 74  ectors of regist
e7d0: 65 72 73 20 69 6e 20 72 65 67 28 50 31 29 2e 2e  ers in reg(P1)..
e7e0: 72 65 67 28 50 31 2b 50 33 2d 31 29 20 28 63 61  reg(P1+P3-1) (ca
e7f0: 6c 6c 20 74 68 69 73 0a 2a 2a 20 76 65 63 74 6f  ll this.** vecto
e800: 72 20 22 41 22 29 20 61 6e 64 20 69 6e 20 72 65  r "A") and in re
e810: 67 28 50 32 29 2e 2e 72 65 67 28 50 32 2b 50 33  g(P2)..reg(P2+P3
e820: 2d 31 29 20 28 22 42 22 29 2e 20 20 53 61 76 65  -1) ("B").  Save
e830: 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 0a 2a   the result of.*
e840: 2a 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e  * the comparison
e850: 20 66 6f 72 20 75 73 65 20 62 79 20 74 68 65 20   for use by the 
e860: 6e 65 78 74 20 4f 50 5f 4a 75 6d 70 20 69 6e 73  next OP_Jump ins
e870: 74 72 75 63 74 2e 0a 2a 2a 0a 2a 2a 20 50 34 20  truct..**.** P4 
e880: 69 73 20 61 20 4b 65 79 49 6e 66 6f 20 73 74 72  is a KeyInfo str
e890: 75 63 74 75 72 65 20 74 68 61 74 20 64 65 66 69  ucture that defi
e8a0: 6e 65 73 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65  nes collating se
e8b0: 71 75 65 6e 63 65 73 20 61 6e 64 20 73 6f 72 74  quences and sort
e8c0: 0a 2a 2a 20 6f 72 64 65 72 73 20 66 6f 72 20 74  .** orders for t
e8d0: 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20  he comparison.  
e8e0: 54 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e 20  The permutation 
e8f0: 61 70 70 6c 69 65 73 20 74 6f 20 72 65 67 69 73  applies to regis
e900: 74 65 72 73 0a 2a 2a 20 6f 6e 6c 79 2e 20 20 54  ters.** only.  T
e910: 68 65 20 4b 65 79 49 6e 66 6f 20 65 6c 65 6d 65  he KeyInfo eleme
e920: 6e 74 73 20 61 72 65 20 75 73 65 64 20 73 65 71  nts are used seq
e930: 75 65 6e 74 69 61 6c 6c 79 2e 0a 2a 2a 0a 2a 2a  uentially..**.**
e940: 20 54 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20   The comparison 
e950: 69 73 20 61 20 73 6f 72 74 20 63 6f 6d 70 61 72  is a sort compar
e960: 69 73 6f 6e 2c 20 73 6f 20 4e 55 4c 4c 73 20 63  ison, so NULLs c
e970: 6f 6d 70 61 72 65 20 65 71 75 61 6c 2c 0a 2a 2a  ompare equal,.**
e980: 20 4e 55 4c 4c 73 20 61 72 65 20 6c 65 73 73 20   NULLs are less 
e990: 74 68 61 6e 20 6e 75 6d 62 65 72 73 2c 20 6e 75  than numbers, nu
e9a0: 6d 62 65 72 73 20 61 72 65 20 6c 65 73 73 20 74  mbers are less t
e9b0: 68 61 6e 20 73 74 72 69 6e 67 73 2c 0a 2a 2a 20  han strings,.** 
e9c0: 61 6e 64 20 73 74 72 69 6e 67 73 20 61 72 65 20  and strings are 
e9d0: 6c 65 73 73 20 74 68 61 6e 20 62 6c 6f 62 73 2e  less than blobs.
e9e0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6d 70  .*/.case OP_Comp
e9f0: 61 72 65 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a  are: {.  int n;.
ea00: 20 20 69 6e 74 20 69 3b 0a 20 20 69 6e 74 20 70    int i;.  int p
ea10: 31 3b 0a 20 20 69 6e 74 20 70 32 3b 0a 20 20 63  1;.  int p2;.  c
ea20: 6f 6e 73 74 20 4b 65 79 49 6e 66 6f 20 2a 70 4b  onst KeyInfo *pK
ea30: 65 79 49 6e 66 6f 3b 0a 20 20 69 6e 74 20 69 64  eyInfo;.  int id
ea40: 78 3b 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 70 43  x;.  CollSeq *pC
ea50: 6f 6c 6c 3b 20 20 20 20 2f 2a 20 43 6f 6c 6c 61  oll;    /* Colla
ea60: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 74 6f  ting sequence to
ea70: 20 75 73 65 20 6f 6e 20 74 68 69 73 20 74 65 72   use on this ter
ea80: 6d 20 2a 2f 0a 20 20 69 6e 74 20 62 52 65 76 3b  m */.  int bRev;
ea90: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
eaa0: 65 20 66 6f 72 20 44 45 53 43 45 4e 44 49 4e 47  e for DESCENDING
eab0: 20 73 6f 72 74 20 6f 72 64 65 72 20 2a 2f 0a 0a   sort order */..
eac0: 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20    n = pOp->p3;. 
ead0: 20 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d   pKeyInfo = pOp-
eae0: 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20  >p4.pKeyInfo;.  
eaf0: 61 73 73 65 72 74 28 20 6e 3e 30 20 29 3b 0a 20  assert( n>0 );. 
eb00: 20 61 73 73 65 72 74 28 20 70 4b 65 79 49 6e 66   assert( pKeyInf
eb10: 6f 21 3d 30 20 29 3b 0a 20 20 70 31 20 3d 20 70  o!=0 );.  p1 = p
eb20: 4f 70 2d 3e 70 31 3b 0a 20 20 70 32 20 3d 20 70  Op->p1;.  p2 = p
eb30: 4f 70 2d 3e 70 32 3b 0a 23 69 66 20 53 51 4c 49  Op->p2;.#if SQLI
eb40: 54 45 5f 44 45 42 55 47 0a 20 20 69 66 28 20 61  TE_DEBUG.  if( a
eb50: 50 65 72 6d 75 74 65 20 29 7b 0a 20 20 20 20 69  Permute ){.    i
eb60: 6e 74 20 6b 2c 20 6d 78 20 3d 20 30 3b 0a 20 20  nt k, mx = 0;.  
eb70: 20 20 66 6f 72 28 6b 3d 30 3b 20 6b 3c 6e 3b 20    for(k=0; k<n; 
eb80: 6b 2b 2b 29 20 69 66 28 20 61 50 65 72 6d 75 74  k++) if( aPermut
eb90: 65 5b 6b 5d 3e 6d 78 20 29 20 6d 78 20 3d 20 61  e[k]>mx ) mx = a
eba0: 50 65 72 6d 75 74 65 5b 6b 5d 3b 0a 20 20 20 20  Permute[k];.    
ebb0: 61 73 73 65 72 74 28 20 70 31 3e 30 20 26 26 20  assert( p1>0 && 
ebc0: 70 31 2b 6d 78 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31  p1+mx<=p->nMem+1
ebd0: 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
ebe0: 70 32 3e 30 20 26 26 20 70 32 2b 6d 78 3c 3d 70  p2>0 && p2+mx<=p
ebf0: 2d 3e 6e 4d 65 6d 2b 31 20 29 3b 0a 20 20 7d 65  ->nMem+1 );.  }e
ec00: 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28  lse{.    assert(
ec10: 20 70 31 3e 30 20 26 26 20 70 31 2b 6e 3c 3d 70   p1>0 && p1+n<=p
ec20: 2d 3e 6e 4d 65 6d 2b 31 20 29 3b 0a 20 20 20 20  ->nMem+1 );.    
ec30: 61 73 73 65 72 74 28 20 70 32 3e 30 20 26 26 20  assert( p2>0 && 
ec40: 70 32 2b 6e 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31 20  p2+n<=p->nMem+1 
ec50: 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a  );.  }.#endif /*
ec60: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f   SQLITE_DEBUG */
ec70: 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b  .  for(i=0; i<n;
ec80: 20 69 2b 2b 29 7b 0a 20 20 20 20 69 64 78 20 3d   i++){.    idx =
ec90: 20 61 50 65 72 6d 75 74 65 20 3f 20 61 50 65 72   aPermute ? aPer
eca0: 6d 75 74 65 5b 69 5d 20 3a 20 69 3b 0a 20 20 20  mute[i] : i;.   
ecb0: 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
ecc0: 6c 69 64 28 26 61 4d 65 6d 5b 70 31 2b 69 64 78  lid(&aMem[p1+idx
ecd0: 5d 29 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  ]) );.    assert
ece0: 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d  ( memIsValid(&aM
ecf0: 65 6d 5b 70 32 2b 69 64 78 5d 29 20 29 3b 0a 20  em[p2+idx]) );. 
ed00: 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43     REGISTER_TRAC
ed10: 45 28 70 31 2b 69 64 78 2c 20 26 61 4d 65 6d 5b  E(p1+idx, &aMem[
ed20: 70 31 2b 69 64 78 5d 29 3b 0a 20 20 20 20 52 45  p1+idx]);.    RE
ed30: 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 32 2b  GISTER_TRACE(p2+
ed40: 69 64 78 2c 20 26 61 4d 65 6d 5b 70 32 2b 69 64  idx, &aMem[p2+id
ed50: 78 5d 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  x]);.    assert(
ed60: 20 69 3c 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69   i<pKeyInfo->nFi
ed70: 65 6c 64 20 29 3b 0a 20 20 20 20 70 43 6f 6c 6c  eld );.    pColl
ed80: 20 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e 61 43 6f   = pKeyInfo->aCo
ed90: 6c 6c 5b 69 5d 3b 0a 20 20 20 20 62 52 65 76 20  ll[i];.    bRev 
eda0: 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e 61 53 6f 72  = pKeyInfo->aSor
edb0: 74 4f 72 64 65 72 5b 69 5d 3b 0a 20 20 20 20 69  tOrder[i];.    i
edc0: 43 6f 6d 70 61 72 65 20 3d 20 73 71 6c 69 74 65  Compare = sqlite
edd0: 33 4d 65 6d 43 6f 6d 70 61 72 65 28 26 61 4d 65  3MemCompare(&aMe
ede0: 6d 5b 70 31 2b 69 64 78 5d 2c 20 26 61 4d 65 6d  m[p1+idx], &aMem
edf0: 5b 70 32 2b 69 64 78 5d 2c 20 70 43 6f 6c 6c 29  [p2+idx], pColl)
ee00: 3b 0a 20 20 20 20 69 66 28 20 69 43 6f 6d 70 61  ;.    if( iCompa
ee10: 72 65 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20  re ){.      if( 
ee20: 62 52 65 76 20 29 20 69 43 6f 6d 70 61 72 65 20  bRev ) iCompare 
ee30: 3d 20 2d 69 43 6f 6d 70 61 72 65 3b 0a 20 20 20  = -iCompare;.   
ee40: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a     break;.    }.
ee50: 20 20 7d 0a 20 20 61 50 65 72 6d 75 74 65 20 3d    }.  aPermute =
ee60: 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a   0;.  break;.}..
ee70: 2f 2a 20 4f 70 63 6f 64 65 3a 20 4a 75 6d 70 20  /* Opcode: Jump 
ee80: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
ee90: 2a 2a 20 4a 75 6d 70 20 74 6f 20 74 68 65 20 69  ** Jump to the i
eea0: 6e 73 74 72 75 63 74 69 6f 6e 20 61 74 20 61 64  nstruction at ad
eeb0: 64 72 65 73 73 20 50 31 2c 20 50 32 2c 20 6f 72  dress P1, P2, or
eec0: 20 50 33 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e   P3 depending on
eed0: 20 77 68 65 74 68 65 72 0a 2a 2a 20 69 6e 20 74   whether.** in t
eee0: 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 4f  he most recent O
eef0: 50 5f 43 6f 6d 70 61 72 65 20 69 6e 73 74 72 75  P_Compare instru
ef00: 63 74 69 6f 6e 20 74 68 65 20 50 31 20 76 65 63  ction the P1 vec
ef10: 74 6f 72 20 77 61 73 20 6c 65 73 73 20 74 68 61  tor was less tha
ef20: 6e 0a 2a 2a 20 65 71 75 61 6c 20 74 6f 2c 20 6f  n.** equal to, o
ef30: 72 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 74  r greater than t
ef40: 68 65 20 50 32 20 76 65 63 74 6f 72 2c 20 72 65  he P2 vector, re
ef50: 73 70 65 63 74 69 76 65 6c 79 2e 0a 2a 2f 0a 63  spectively..*/.c
ef60: 61 73 65 20 4f 50 5f 4a 75 6d 70 3a 20 7b 20 20  ase OP_Jump: {  
ef70: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75             /* ju
ef80: 6d 70 20 2a 2f 0a 20 20 69 66 28 20 69 43 6f 6d  mp */.  if( iCom
ef90: 70 61 72 65 3c 30 20 29 7b 0a 20 20 20 20 70 63  pare<0 ){.    pc
efa0: 20 3d 20 70 4f 70 2d 3e 70 31 20 2d 20 31 3b 0a   = pOp->p1 - 1;.
efb0: 20 20 7d 65 6c 73 65 20 69 66 28 20 69 43 6f 6d    }else if( iCom
efc0: 70 61 72 65 3d 3d 30 20 29 7b 0a 20 20 20 20 70  pare==0 ){.    p
efd0: 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
efe0: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 63  .  }else{.    pc
eff0: 20 3d 20 70 4f 70 2d 3e 70 33 20 2d 20 31 3b 0a   = pOp->p3 - 1;.
f000: 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
f010: 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 6e 64 20 50  /* Opcode: And P
f020: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
f030: 2a 20 54 61 6b 65 20 74 68 65 20 6c 6f 67 69 63  * Take the logic
f040: 61 6c 20 41 4e 44 20 6f 66 20 74 68 65 20 76 61  al AND of the va
f050: 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74 65 72  lues in register
f060: 73 20 50 31 20 61 6e 64 20 50 32 20 61 6e 64 0a  s P1 and P2 and.
f070: 2a 2a 20 77 72 69 74 65 20 74 68 65 20 72 65 73  ** write the res
f080: 75 6c 74 20 69 6e 74 6f 20 72 65 67 69 73 74 65  ult into registe
f090: 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 65  r P3..**.** If e
f0a0: 69 74 68 65 72 20 50 31 20 6f 72 20 50 32 20 69  ither P1 or P2 i
f0b0: 73 20 30 20 28 66 61 6c 73 65 29 20 74 68 65 6e  s 0 (false) then
f0c0: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 30   the result is 0
f0d0: 20 65 76 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20   even if.** the 
f0e0: 6f 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e  other input is N
f0f0: 55 4c 4c 2e 20 20 41 20 4e 55 4c 4c 20 61 6e 64  ULL.  A NULL and
f100: 20 74 72 75 65 20 6f 72 20 74 77 6f 20 4e 55 4c   true or two NUL
f110: 4c 73 20 67 69 76 65 0a 2a 2a 20 61 20 4e 55 4c  Ls give.** a NUL
f120: 4c 20 6f 75 74 70 75 74 2e 0a 2a 2f 0a 2f 2a 20  L output..*/./* 
f130: 4f 70 63 6f 64 65 3a 20 4f 72 20 50 31 20 50 32  Opcode: Or P1 P2
f140: 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 61   P3 * *.**.** Ta
f150: 6b 65 20 74 68 65 20 6c 6f 67 69 63 61 6c 20 4f  ke the logical O
f160: 52 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20  R of the values 
f170: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 61  in register P1 a
f180: 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20 73 74 6f  nd P2 and.** sto
f190: 72 65 20 74 68 65 20 61 6e 73 77 65 72 20 69 6e  re the answer in
f1a0: 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a   register P3..**
f1b0: 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 50 31  .** If either P1
f1c0: 20 6f 72 20 50 32 20 69 73 20 6e 6f 6e 7a 65 72   or P2 is nonzer
f1d0: 6f 20 28 74 72 75 65 29 20 74 68 65 6e 20 74 68  o (true) then th
f1e0: 65 20 72 65 73 75 6c 74 20 69 73 20 31 20 28 74  e result is 1 (t
f1f0: 72 75 65 29 0a 2a 2a 20 65 76 65 6e 20 69 66 20  rue).** even if 
f200: 74 68 65 20 6f 74 68 65 72 20 69 6e 70 75 74 20  the other input 
f210: 69 73 20 4e 55 4c 4c 2e 20 20 41 20 4e 55 4c 4c  is NULL.  A NULL
f220: 20 61 6e 64 20 66 61 6c 73 65 20 6f 72 20 74 77   and false or tw
f230: 6f 20 4e 55 4c 4c 73 0a 2a 2a 20 67 69 76 65 20  o NULLs.** give 
f240: 61 20 4e 55 4c 4c 20 6f 75 74 70 75 74 2e 0a 2a  a NULL output..*
f250: 2f 0a 63 61 73 65 20 4f 50 5f 41 6e 64 3a 20 20  /.case OP_And:  
f260: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
f270: 61 6d 65 20 61 73 20 54 4b 5f 41 4e 44 2c 20 69  ame as TK_AND, i
f280: 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f  n1, in2, out3 */
f290: 0a 63 61 73 65 20 4f 50 5f 4f 72 3a 20 7b 20 20  .case OP_Or: {  
f2a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
f2b0: 6d 65 20 61 73 20 54 4b 5f 4f 52 2c 20 69 6e 31  me as TK_OR, in1
f2c0: 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20  , in2, out3 */. 
f2d0: 20 69 6e 74 20 76 31 3b 20 20 20 20 2f 2a 20 4c   int v1;    /* L
f2e0: 65 66 74 20 6f 70 65 72 61 6e 64 3a 20 20 30 3d  eft operand:  0=
f2f0: 3d 46 41 4c 53 45 2c 20 31 3d 3d 54 52 55 45 2c  =FALSE, 1==TRUE,
f300: 20 32 3d 3d 55 4e 4b 4e 4f 57 4e 20 6f 72 20 4e   2==UNKNOWN or N
f310: 55 4c 4c 20 2a 2f 0a 20 20 69 6e 74 20 76 32 3b  ULL */.  int v2;
f320: 20 20 20 20 2f 2a 20 52 69 67 68 74 20 6f 70 65      /* Right ope
f330: 72 61 6e 64 3a 20 30 3d 3d 46 41 4c 53 45 2c 20  rand: 0==FALSE, 
f340: 31 3d 3d 54 52 55 45 2c 20 32 3d 3d 55 4e 4b 4e  1==TRUE, 2==UNKN
f350: 4f 57 4e 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 0a  OWN or NULL */..
f360: 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
f370: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70  Op->p1];.  if( p
f380: 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
f390: 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 76 31 20  _Null ){.    v1 
f3a0: 3d 20 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  = 2;.  }else{.  
f3b0: 20 20 76 31 20 3d 20 73 71 6c 69 74 65 33 56 64    v1 = sqlite3Vd
f3c0: 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29  beIntValue(pIn1)
f3d0: 21 3d 30 3b 0a 20 20 7d 0a 20 20 70 49 6e 32 20  !=0;.  }.  pIn2 
f3e0: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
f3f0: 3b 0a 20 20 69 66 28 20 70 49 6e 32 2d 3e 66 6c  ;.  if( pIn2->fl
f400: 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29  ags & MEM_Null )
f410: 7b 0a 20 20 20 20 76 32 20 3d 20 32 3b 0a 20 20  {.    v2 = 2;.  
f420: 7d 65 6c 73 65 7b 0a 20 20 20 20 76 32 20 3d 20  }else{.    v2 = 
f430: 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61  sqlite3VdbeIntVa
f440: 6c 75 65 28 70 49 6e 32 29 21 3d 30 3b 0a 20 20  lue(pIn2)!=0;.  
f450: 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63  }.  if( pOp->opc
f460: 6f 64 65 3d 3d 4f 50 5f 41 6e 64 20 29 7b 0a 20  ode==OP_And ){. 
f470: 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20     static const 
f480: 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 61 6e  unsigned char an
f490: 64 5f 6c 6f 67 69 63 5b 5d 20 3d 20 7b 20 30 2c  d_logic[] = { 0,
f4a0: 20 30 2c 20 30 2c 20 30 2c 20 31 2c 20 32 2c 20   0, 0, 0, 1, 2, 
f4b0: 30 2c 20 32 2c 20 32 20 7d 3b 0a 20 20 20 20 76  0, 2, 2 };.    v
f4c0: 31 20 3d 20 61 6e 64 5f 6c 6f 67 69 63 5b 76 31  1 = and_logic[v1
f4d0: 2a 33 2b 76 32 5d 3b 0a 20 20 7d 65 6c 73 65 7b  *3+v2];.  }else{
f4e0: 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73  .    static cons
f4f0: 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  t unsigned char 
f500: 6f 72 5f 6c 6f 67 69 63 5b 5d 20 3d 20 7b 20 30  or_logic[] = { 0
f510: 2c 20 31 2c 20 32 2c 20 31 2c 20 31 2c 20 31 2c  , 1, 2, 1, 1, 1,
f520: 20 32 2c 20 31 2c 20 32 20 7d 3b 0a 20 20 20 20   2, 1, 2 };.    
f530: 76 31 20 3d 20 6f 72 5f 6c 6f 67 69 63 5b 76 31  v1 = or_logic[v1
f540: 2a 33 2b 76 32 5d 3b 0a 20 20 7d 0a 20 20 70 4f  *3+v2];.  }.  pO
f550: 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
f560: 70 33 5d 3b 0a 20 20 69 66 28 20 76 31 3d 3d 32  p3];.  if( v1==2
f570: 20 29 7b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79   ){.    MemSetTy
f580: 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d  peFlag(pOut, MEM
f590: 5f 4e 75 6c 6c 29 3b 0a 20 20 7d 65 6c 73 65 7b  _Null);.  }else{
f5a0: 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  .    pOut->u.i =
f5b0: 20 76 31 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54   v1;.    MemSetT
f5c0: 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45  ypeFlag(pOut, ME
f5d0: 4d 5f 49 6e 74 29 3b 0a 20 20 7d 0a 20 20 62 72  M_Int);.  }.  br
f5e0: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
f5f0: 65 3a 20 4e 6f 74 20 50 31 20 50 32 20 2a 20 2a  e: Not P1 P2 * *
f600: 20 2a 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72   *.**.** Interpr
f610: 65 74 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  et the value in 
f620: 72 65 67 69 73 74 65 72 20 50 31 20 61 73 20 61  register P1 as a
f630: 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 2e 20   boolean value. 
f640: 20 53 74 6f 72 65 20 74 68 65 0a 2a 2a 20 62 6f   Store the.** bo
f650: 6f 6c 65 61 6e 20 63 6f 6d 70 6c 65 6d 65 6e 74  olean complement
f660: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e   in register P2.
f670: 20 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 69    If the value i
f680: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  n register P1 is
f690: 20 0a 2a 2a 20 4e 55 4c 4c 2c 20 74 68 65 6e 20   .** NULL, then 
f6a0: 61 20 4e 55 4c 4c 20 69 73 20 73 74 6f 72 65 64  a NULL is stored
f6b0: 20 69 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20   in P2..*/.case 
f6c0: 4f 50 5f 4e 6f 74 3a 20 7b 20 20 20 20 20 20 20  OP_Not: {       
f6d0: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
f6e0: 20 61 73 20 54 4b 5f 4e 4f 54 2c 20 69 6e 31 2c   as TK_NOT, in1,
f6f0: 20 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e 31 20   out2 */.  pIn1 
f700: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
f710: 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d  ;.  pOut = &aMem
f720: 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 69 66 28  [pOp->p2];.  if(
f730: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn1->flags & M
f740: 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 73  EM_Null ){.    s
f750: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
f760: 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 7d 65  Null(pOut);.  }e
f770: 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  lse{.    sqlite3
f780: 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28  VdbeMemSetInt64(
f790: 70 4f 75 74 2c 20 21 73 71 6c 69 74 65 33 56 64  pOut, !sqlite3Vd
f7a0: 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29  beIntValue(pIn1)
f7b0: 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
f7c0: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 69  }../* Opcode: Bi
f7d0: 74 4e 6f 74 20 50 31 20 50 32 20 2a 20 2a 20 2a  tNot P1 P2 * * *
f7e0: 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74  .**.** Interpret
f7f0: 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
f800: 72 65 67 69 73 74 65 72 20 50 31 20 61 73 20 61  register P1 as a
f810: 6e 20 69 6e 74 65 67 65 72 2e 20 20 53 74 6f 72  n integer.  Stor
f820: 65 20 74 68 65 0a 2a 2a 20 6f 6e 65 73 2d 63 6f  e the.** ones-co
f830: 6d 70 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 20  mplement of the 
f840: 50 31 20 76 61 6c 75 65 20 69 6e 74 6f 20 72 65  P1 value into re
f850: 67 69 73 74 65 72 20 50 32 2e 20 20 49 66 20 50  gister P2.  If P
f860: 31 20 68 6f 6c 64 73 0a 2a 2a 20 61 20 4e 55 4c  1 holds.** a NUL
f870: 4c 20 74 68 65 6e 20 73 74 6f 72 65 20 61 20 4e  L then store a N
f880: 55 4c 4c 20 69 6e 20 50 32 2e 0a 2a 2f 0a 63 61  ULL in P2..*/.ca
f890: 73 65 20 4f 50 5f 42 69 74 4e 6f 74 3a 20 7b 20  se OP_BitNot: { 
f8a0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
f8b0: 61 6d 65 20 61 73 20 54 4b 5f 42 49 54 4e 4f 54  ame as TK_BITNOT
f8c0: 2c 20 69 6e 31 2c 20 6f 75 74 32 20 2a 2f 0a 20  , in1, out2 */. 
f8d0: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
f8e0: 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d  p->p1];.  pOut =
f8f0: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
f900: 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61  .  if( pIn1->fla
f910: 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b  gs & MEM_Null ){
f920: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
f930: 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29  MemSetNull(pOut)
f940: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73  ;.  }else{.    s
f950: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
f960: 49 6e 74 36 34 28 70 4f 75 74 2c 20 7e 73 71 6c  Int64(pOut, ~sql
f970: 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65  ite3VdbeIntValue
f980: 28 70 49 6e 31 29 29 3b 0a 20 20 7d 0a 20 20 62  (pIn1));.  }.  b
f990: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
f9a0: 64 65 3a 20 49 66 20 50 31 20 50 32 20 50 33 20  de: If P1 P2 P3 
f9b0: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74  * *.**.** Jump t
f9c0: 6f 20 50 32 20 69 66 20 74 68 65 20 76 61 6c 75  o P2 if the valu
f9d0: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
f9e0: 20 69 73 20 74 72 75 65 2e 20 20 54 68 65 20 76   is true.  The v
f9f0: 61 6c 75 65 20 69 73 0a 2a 2a 20 69 73 20 63 6f  alue is.** is co
fa00: 6e 73 69 64 65 72 65 64 20 74 72 75 65 20 69 66  nsidered true if
fa10: 20 69 74 20 69 73 20 6e 75 6d 65 72 69 63 20 61   it is numeric a
fa20: 6e 64 20 6e 6f 6e 2d 7a 65 72 6f 2e 20 20 49 66  nd non-zero.  If
fa30: 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e   the value.** in
fa40: 20 50 31 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e   P1 is NULL then
fa50: 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 20 69   take the jump i
fa60: 66 20 50 33 20 69 73 20 74 72 75 65 2e 0a 2a 2f  f P3 is true..*/
fa70: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 4e 6f  ./* Opcode: IfNo
fa80: 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  t P1 P2 P3 * *.*
fa90: 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20  *.** Jump to P2 
faa0: 69 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  if the value in 
fab0: 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20 46  register P1 is F
fac0: 61 6c 73 65 2e 20 20 54 68 65 20 76 61 6c 75 65  alse.  The value
fad0: 20 69 73 0a 2a 2a 20 69 73 20 63 6f 6e 73 69 64   is.** is consid
fae0: 65 72 65 64 20 74 72 75 65 20 69 66 20 69 74 20  ered true if it 
faf0: 68 61 73 20 61 20 6e 75 6d 65 72 69 63 20 76 61  has a numeric va
fb00: 6c 75 65 20 6f 66 20 7a 65 72 6f 2e 20 20 49 66  lue of zero.  If
fb10: 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e   the value.** in
fb20: 20 50 31 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e   P1 is NULL then
fb30: 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 20 69   take the jump i
fb40: 66 20 50 33 20 69 73 20 74 72 75 65 2e 0a 2a 2f  f P3 is true..*/
fb50: 0a 63 61 73 65 20 4f 50 5f 49 66 3a 20 20 20 20  .case OP_If:    
fb60: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
fb70: 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 63 61 73  jump, in1 */.cas
fb80: 65 20 4f 50 5f 49 66 4e 6f 74 3a 20 7b 20 20 20  e OP_IfNot: {   
fb90: 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
fba0: 2c 20 69 6e 31 20 2a 2f 0a 20 20 69 6e 74 20 63  , in1 */.  int c
fbb0: 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ;.  pIn1 = &aMem
fbc0: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28  [pOp->p1];.  if(
fbd0: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn1->flags & M
fbe0: 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 63  EM_Null ){.    c
fbf0: 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 7d 65   = pOp->p3;.  }e
fc00: 6c 73 65 7b 0a 23 69 66 64 65 66 20 53 51 4c 49  lse{.#ifdef SQLI
fc10: 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47  TE_OMIT_FLOATING
fc20: 5f 50 4f 49 4e 54 0a 20 20 20 20 63 20 3d 20 73  _POINT.    c = s
fc30: 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c  qlite3VdbeIntVal
fc40: 75 65 28 70 49 6e 31 29 21 3d 30 3b 0a 23 65 6c  ue(pIn1)!=0;.#el
fc50: 73 65 0a 20 20 20 20 63 20 3d 20 73 71 6c 69 74  se.    c = sqlit
fc60: 65 33 56 64 62 65 52 65 61 6c 56 61 6c 75 65 28  e3VdbeRealValue(
fc70: 70 49 6e 31 29 21 3d 30 2e 30 3b 0a 23 65 6e 64  pIn1)!=0.0;.#end
fc80: 69 66 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  if.    if( pOp->
fc90: 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 66 4e 6f 74  opcode==OP_IfNot
fca0: 20 29 20 63 20 3d 20 21 63 3b 0a 20 20 7d 0a 20   ) c = !c;.  }. 
fcb0: 20 69 66 28 20 63 20 29 7b 0a 20 20 20 20 70 63   if( c ){.    pc
fcc0: 20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20   = pOp->p2-1;.  
fcd0: 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
fce0: 20 4f 70 63 6f 64 65 3a 20 49 73 4e 75 6c 6c 20   Opcode: IsNull 
fcf0: 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
fd00: 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20  * Jump to P2 if 
fd10: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
fd20: 69 73 74 65 72 20 50 31 20 69 73 20 4e 55 4c 4c  ister P1 is NULL
fd30: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 73 4e  ..*/.case OP_IsN
fd40: 75 6c 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20  ull: {          
fd50: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
fd60: 49 53 4e 55 4c 4c 2c 20 6a 75 6d 70 2c 20 69 6e  ISNULL, jump, in
fd70: 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  1 */.  pIn1 = &a
fd80: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
fd90: 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
fda0: 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 20   & MEM_Null)!=0 
fdb0: 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  ){.    pc = pOp-
fdc0: 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62  >p2 - 1;.  }.  b
fdd0: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
fde0: 64 65 3a 20 4e 6f 74 4e 75 6c 6c 20 50 31 20 50  de: NotNull P1 P
fdf0: 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75  2 * * *.**.** Ju
fe00: 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68 65 20  mp to P2 if the 
fe10: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
fe20: 72 20 50 31 20 69 73 20 6e 6f 74 20 4e 55 4c 4c  r P1 is not NULL
fe30: 2e 20 20 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e  .  .*/.case OP_N
fe40: 6f 74 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20 20  otNull: {       
fe50: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
fe60: 54 4b 5f 4e 4f 54 4e 55 4c 4c 2c 20 6a 75 6d 70  TK_NOTNULL, jump
fe70: 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20  , in1 */.  pIn1 
fe80: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
fe90: 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66  ;.  if( (pIn1->f
fea0: 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29  lags & MEM_Null)
feb0: 3d 3d 30 20 29 7b 0a 20 20 20 20 70 63 20 3d 20  ==0 ){.    pc = 
fec0: 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d  pOp->p2 - 1;.  }
fed0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
fee0: 4f 70 63 6f 64 65 3a 20 43 6f 6c 75 6d 6e 20 50  Opcode: Column P
fef0: 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
ff00: 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68  .** Interpret th
ff10: 65 20 64 61 74 61 20 74 68 61 74 20 63 75 72 73  e data that curs
ff20: 6f 72 20 50 31 20 70 6f 69 6e 74 73 20 74 6f 20  or P1 points to 
ff30: 61 73 20 61 20 73 74 72 75 63 74 75 72 65 20 62  as a structure b
ff40: 75 69 6c 74 20 75 73 69 6e 67 0a 2a 2a 20 74 68  uilt using.** th
ff50: 65 20 4d 61 6b 65 52 65 63 6f 72 64 20 69 6e 73  e MakeRecord ins
ff60: 74 72 75 63 74 69 6f 6e 2e 20 20 28 53 65 65 20  truction.  (See 
ff70: 74 68 65 20 4d 61 6b 65 52 65 63 6f 72 64 20 6f  the MakeRecord o
ff80: 70 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69  pcode for additi
ff90: 6f 6e 61 6c 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74  onal.** informat
ffa0: 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 20 66 6f  ion about the fo
ffb0: 72 6d 61 74 20 6f 66 20 74 68 65 20 64 61 74 61  rmat of the data
ffc0: 2e 29 20 20 45 78 74 72 61 63 74 20 74 68 65 20  .)  Extract the 
ffd0: 50 32 2d 74 68 20 63 6f 6c 75 6d 6e 0a 2a 2a 20  P2-th column.** 
ffe0: 66 72 6f 6d 20 74 68 69 73 20 72 65 63 6f 72 64  from this record
fff0: 2e 20 20 49 66 20 74 68 65 72 65 20 61 72 65 20  .  If there are 
10000 6c 65 73 73 20 74 68 61 74 20 28 50 32 2b 31 29  less that (P2+1)
10010 20 0a 2a 2a 20 76 61 6c 75 65 73 20 69 6e 20 74   .** values in t
10020 68 65 20 72 65 63 6f 72 64 2c 20 65 78 74 72 61  he record, extra
10030 63 74 20 61 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a  ct a NULL..**.**
10040 20 54 68 65 20 76 61 6c 75 65 20 65 78 74 72 61   The value extra
10050 63 74 65 64 20 69 73 20 73 74 6f 72 65 64 20 69  cted is stored i
10060 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  n register P3..*
10070 2a 0a 2a 2a 20 49 66 20 74 68 65 20 63 6f 6c 75  *.** If the colu
10080 6d 6e 20 63 6f 6e 74 61 69 6e 73 20 66 65 77 65  mn contains fewe
10090 72 20 74 68 61 6e 20 50 32 20 66 69 65 6c 64 73  r than P2 fields
100a0 2c 20 74 68 65 6e 20 65 78 74 72 61 63 74 20 61  , then extract a
100b0 20 4e 55 4c 4c 2e 20 20 4f 72 2c 0a 2a 2a 20 69   NULL.  Or,.** i
100c0 66 20 74 68 65 20 50 34 20 61 72 67 75 6d 65 6e  f the P4 argumen
100d0 74 20 69 73 20 61 20 50 34 5f 4d 45 4d 20 75 73  t is a P4_MEM us
100e0 65 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74  e the value of t
100f0 68 65 20 50 34 20 61 72 67 75 6d 65 6e 74 20 61  he P4 argument a
10100 73 0a 2a 2a 20 74 68 65 20 72 65 73 75 6c 74 2e  s.** the result.
10110 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50  .**.** If the OP
10120 46 4c 41 47 5f 43 4c 45 41 52 43 41 43 48 45 20  FLAG_CLEARCACHE 
10130 62 69 74 20 69 73 20 73 65 74 20 6f 6e 20 50 35  bit is set on P5
10140 20 61 6e 64 20 50 31 20 69 73 20 61 20 70 73 65   and P1 is a pse
10150 75 64 6f 2d 74 61 62 6c 65 20 63 75 72 73 6f 72  udo-table cursor
10160 2c 0a 2a 2a 20 74 68 65 6e 20 74 68 65 20 63 61  ,.** then the ca
10170 63 68 65 20 6f 66 20 74 68 65 20 63 75 72 73 6f  che of the curso
10180 72 20 69 73 20 72 65 73 65 74 20 70 72 69 6f 72  r is reset prior
10190 20 74 6f 20 65 78 74 72 61 63 74 69 6e 67 20 74   to extracting t
101a0 68 65 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a 20 54 68  he column..** Th
101b0 65 20 66 69 72 73 74 20 4f 50 5f 43 6f 6c 75 6d  e first OP_Colum
101c0 6e 20 61 67 61 69 6e 73 74 20 61 20 70 73 65 75  n against a pseu
101d0 64 6f 2d 74 61 62 6c 65 20 61 66 74 65 72 20 74  do-table after t
101e0 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
101f0 63 6f 6e 74 65 6e 74 0a 2a 2a 20 72 65 67 69 73  content.** regis
10200 74 65 72 20 68 61 73 20 63 68 61 6e 67 65 64 20  ter has changed 
10210 73 68 6f 75 6c 64 20 68 61 76 65 20 74 68 69 73  should have this
10220 20 62 69 74 20 73 65 74 2e 0a 2a 2f 0a 63 61 73   bit set..*/.cas
10230 65 20 4f 50 5f 43 6f 6c 75 6d 6e 3a 20 7b 0a 20  e OP_Column: {. 
10240 20 75 33 32 20 70 61 79 6c 6f 61 64 53 69 7a 65   u32 payloadSize
10250 3b 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66  ;   /* Number of
10260 20 62 79 74 65 73 20 69 6e 20 74 68 65 20 72 65   bytes in the re
10270 63 6f 72 64 20 2a 2f 0a 20 20 69 36 34 20 70 61  cord */.  i64 pa
10280 79 6c 6f 61 64 53 69 7a 65 36 34 3b 20 2f 2a 20  yloadSize64; /* 
10290 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20  Number of bytes 
102a0 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f  in the record */
102b0 0a 20 20 69 6e 74 20 70 31 3b 20 20 20 20 20 20  .  int p1;      
102c0 20 20 20 20 20 20 2f 2a 20 50 31 20 76 61 6c 75        /* P1 valu
102d0 65 20 6f 66 20 74 68 65 20 6f 70 63 6f 64 65 20  e of the opcode 
102e0 2a 2f 0a 20 20 69 6e 74 20 70 32 3b 20 20 20 20  */.  int p2;    
102f0 20 20 20 20 20 20 20 20 2f 2a 20 63 6f 6c 75 6d          /* colum
10300 6e 20 6e 75 6d 62 65 72 20 74 6f 20 72 65 74 72  n number to retr
10310 69 65 76 65 20 2a 2f 0a 20 20 56 64 62 65 43 75  ieve */.  VdbeCu
10320 72 73 6f 72 20 2a 70 43 3b 20 20 20 20 2f 2a 20  rsor *pC;    /* 
10330 54 68 65 20 56 44 42 45 20 63 75 72 73 6f 72 20  The VDBE cursor 
10340 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 52 65 63 3b  */.  char *zRec;
10350 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74          /* Point
10360 65 72 20 74 6f 20 63 6f 6d 70 6c 65 74 65 20 72  er to complete r
10370 65 63 6f 72 64 2d 64 61 74 61 20 2a 2f 0a 20 20  ecord-data */.  
10380 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b  BtCursor *pCrsr;
10390 20 20 20 2f 2a 20 54 68 65 20 42 54 72 65 65 20     /* The BTree 
103a0 63 75 72 73 6f 72 20 2a 2f 0a 20 20 75 33 32 20  cursor */.  u32 
103b0 2a 61 54 79 70 65 3b 20 20 20 20 20 20 20 20 2f  *aType;        /
103c0 2a 20 61 54 79 70 65 5b 69 5d 20 68 6f 6c 64 73  * aType[i] holds
103d0 20 74 68 65 20 6e 75 6d 65 72 69 63 20 74 79 70   the numeric typ
103e0 65 20 6f 66 20 74 68 65 20 69 2d 74 68 20 63 6f  e of the i-th co
103f0 6c 75 6d 6e 20 2a 2f 0a 20 20 75 33 32 20 2a 61  lumn */.  u32 *a
10400 4f 66 66 73 65 74 3b 20 20 20 20 20 20 2f 2a 20  Offset;      /* 
10410 61 4f 66 66 73 65 74 5b 69 5d 20 69 73 20 6f 66  aOffset[i] is of
10420 66 73 65 74 20 74 6f 20 73 74 61 72 74 20 6f 66  fset to start of
10430 20 64 61 74 61 20 66 6f 72 20 69 2d 74 68 20 63   data for i-th c
10440 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e  olumn */.  int n
10450 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20 2f 2a  Field;        /*
10460 20 6e 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64   number of field
10470 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20  s in the record 
10480 2a 2f 0a 20 20 69 6e 74 20 6c 65 6e 3b 20 20 20  */.  int len;   
10490 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6c          /* The l
104a0 65 6e 67 74 68 20 6f 66 20 74 68 65 20 73 65 72  ength of the ser
104b0 69 61 6c 69 7a 65 64 20 64 61 74 61 20 66 6f 72  ialized data for
104c0 20 74 68 65 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20   the column */. 
104d0 20 69 6e 74 20 69 3b 20 20 20 20 20 20 20 20 20   int i;         
104e0 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e      /* Loop coun
104f0 74 65 72 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  ter */.  char *z
10500 44 61 74 61 3b 20 20 20 20 20 20 20 2f 2a 20 50  Data;       /* P
10510 61 72 74 20 6f 66 20 74 68 65 20 72 65 63 6f 72  art of the recor
10520 64 20 62 65 69 6e 67 20 64 65 63 6f 64 65 64 20  d being decoded 
10530 2a 2f 0a 20 20 4d 65 6d 20 2a 70 44 65 73 74 3b  */.  Mem *pDest;
10540 20 20 20 20 20 20 20 20 2f 2a 20 57 68 65 72 65          /* Where
10550 20 74 6f 20 77 72 69 74 65 20 74 68 65 20 65 78   to write the ex
10560 74 72 61 63 74 65 64 20 76 61 6c 75 65 20 2a 2f  tracted value */
10570 0a 20 20 4d 65 6d 20 73 4d 65 6d 3b 20 20 20 20  .  Mem sMem;    
10580 20 20 20 20 20 20 2f 2a 20 46 6f 72 20 73 74 6f        /* For sto
10590 72 69 6e 67 20 74 68 65 20 72 65 63 6f 72 64 20  ring the record 
105a0 62 65 69 6e 67 20 64 65 63 6f 64 65 64 20 2a 2f  being decoded */
105b0 0a 20 20 75 38 20 2a 7a 49 64 78 3b 20 20 20 20  .  u8 *zIdx;    
105c0 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69        /* Index i
105d0 6e 74 6f 20 68 65 61 64 65 72 20 2a 2f 0a 20 20  nto header */.  
105e0 75 38 20 2a 7a 45 6e 64 48 64 72 3b 20 20 20 20  u8 *zEndHdr;    
105f0 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f     /* Pointer to
10600 20 66 69 72 73 74 20 62 79 74 65 20 61 66 74 65   first byte afte
10610 72 20 74 68 65 20 68 65 61 64 65 72 20 2a 2f 0a  r the header */.
10620 20 20 75 33 32 20 6f 66 66 73 65 74 3b 20 20 20    u32 offset;   
10630 20 20 20 20 20 2f 2a 20 4f 66 66 73 65 74 20 69       /* Offset i
10640 6e 74 6f 20 74 68 65 20 64 61 74 61 20 2a 2f 0a  nto the data */.
10650 20 20 75 33 32 20 73 7a 46 69 65 6c 64 3b 20 20    u32 szField;  
10660 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
10670 66 20 62 79 74 65 73 20 69 6e 20 74 68 65 20 63  f bytes in the c
10680 6f 6e 74 65 6e 74 20 6f 66 20 61 20 66 69 65 6c  ontent of a fiel
10690 64 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 48 64 72  d */.  int szHdr
106a0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a  ;         /* Siz
106b0 65 20 6f 66 20 74 68 65 20 68 65 61 64 65 72 20  e of the header 
106c0 73 69 7a 65 20 66 69 65 6c 64 20 61 74 20 73 74  size field at st
106d0 61 72 74 20 6f 66 20 72 65 63 6f 72 64 20 2a 2f  art of record */
106e0 0a 20 20 69 6e 74 20 61 76 61 69 6c 3b 20 20 20  .  int avail;   
106f0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
10700 6f 66 20 62 79 74 65 73 20 6f 66 20 61 76 61 69  of bytes of avai
10710 6c 61 62 6c 65 20 64 61 74 61 20 2a 2f 0a 20 20  lable data */.  
10720 4d 65 6d 20 2a 70 52 65 67 3b 20 20 20 20 20 20  Mem *pReg;      
10730 20 20 20 2f 2a 20 50 73 65 75 64 6f 54 61 62 6c     /* PseudoTabl
10740 65 20 69 6e 70 75 74 20 72 65 67 69 73 74 65 72  e input register
10750 20 2a 2f 0a 0a 0a 20 20 70 31 20 3d 20 70 4f 70   */...  p1 = pOp
10760 2d 3e 70 31 3b 0a 20 20 70 32 20 3d 20 70 4f 70  ->p1;.  p2 = pOp
10770 2d 3e 70 32 3b 0a 20 20 70 43 20 3d 20 30 3b 0a  ->p2;.  pC = 0;.
10780 20 20 6d 65 6d 73 65 74 28 26 73 4d 65 6d 2c 20    memset(&sMem, 
10790 30 2c 20 73 69 7a 65 6f 66 28 73 4d 65 6d 29 29  0, sizeof(sMem))
107a0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 31 3c 70  ;.  assert( p1<p
107b0 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61  ->nCursor );.  a
107c0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30  ssert( pOp->p3>0
107d0 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e   && pOp->p3<=p->
107e0 6e 4d 65 6d 20 29 3b 0a 20 20 70 44 65 73 74 20  nMem );.  pDest 
107f0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
10800 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68  ;.  memAboutToCh
10810 61 6e 67 65 28 70 2c 20 70 44 65 73 74 29 3b 0a  ange(p, pDest);.
10820 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
10830 28 70 44 65 73 74 2c 20 4d 45 4d 5f 4e 75 6c 6c  (pDest, MEM_Null
10840 29 3b 0a 20 20 7a 52 65 63 20 3d 20 30 3b 0a 0a  );.  zRec = 0;..
10850 20 20 2f 2a 20 54 68 69 73 20 62 6c 6f 63 6b 20    /* This block 
10860 73 65 74 73 20 74 68 65 20 76 61 72 69 61 62 6c  sets the variabl
10870 65 20 70 61 79 6c 6f 61 64 53 69 7a 65 20 74 6f  e payloadSize to
10880 20 62 65 20 74 68 65 20 74 6f 74 61 6c 20 6e 75   be the total nu
10890 6d 62 65 72 20 6f 66 0a 20 20 2a 2a 20 62 79 74  mber of.  ** byt
108a0 65 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64  es in the record
108b0 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 7a 52 65 63  ..  **.  ** zRec
108c0 20 69 73 20 73 65 74 20 74 6f 20 62 65 20 74 68   is set to be th
108d0 65 20 63 6f 6d 70 6c 65 74 65 20 74 65 78 74 20  e complete text 
108e0 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20 69 66  of the record if
108f0 20 69 74 20 69 73 20 61 76 61 69 6c 61 62 6c 65   it is available
10900 2e 0a 20 20 2a 2a 20 54 68 65 20 63 6f 6d 70 6c  ..  ** The compl
10910 65 74 65 20 72 65 63 6f 72 64 20 74 65 78 74 20  ete record text 
10920 69 73 20 61 6c 77 61 79 73 20 61 76 61 69 6c 61  is always availa
10930 62 6c 65 20 66 6f 72 20 70 73 65 75 64 6f 2d 74  ble for pseudo-t
10940 61 62 6c 65 73 0a 20 20 2a 2a 20 49 66 20 74 68  ables.  ** If th
10950 65 20 72 65 63 6f 72 64 20 69 73 20 73 74 6f 72  e record is stor
10960 65 64 20 69 6e 20 61 20 63 75 72 73 6f 72 2c 20  ed in a cursor, 
10970 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 72 65 63  the complete rec
10980 6f 72 64 20 74 65 78 74 0a 20 20 2a 2a 20 6d 69  ord text.  ** mi
10990 67 68 74 20 62 65 20 61 76 61 69 6c 61 62 6c 65  ght be available
109a0 20 69 6e 20 74 68 65 20 20 70 43 2d 3e 61 52 6f   in the  pC->aRo
109b0 77 20 63 61 63 68 65 2e 20 20 4f 72 20 69 74 20  w cache.  Or it 
109c0 6d 69 67 68 74 20 6e 6f 74 20 62 65 2e 0a 20 20  might not be..  
109d0 2a 2a 20 49 66 20 74 68 65 20 64 61 74 61 20 69  ** If the data i
109e0 73 20 75 6e 61 76 61 69 6c 61 62 6c 65 2c 20 20  s unavailable,  
109f0 7a 52 65 63 20 69 73 20 73 65 74 20 74 6f 20 4e  zRec is set to N
10a00 55 4c 4c 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 57  ULL..  **.  ** W
10a10 65 20 61 6c 73 6f 20 63 6f 6d 70 75 74 65 20 74  e also compute t
10a20 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  he number of col
10a30 75 6d 6e 73 20 69 6e 20 74 68 65 20 72 65 63 6f  umns in the reco
10a40 72 64 2e 20 20 46 6f 72 20 63 75 72 73 6f 72 73  rd.  For cursors
10a50 2c 0a 20 20 2a 2a 20 74 68 65 20 6e 75 6d 62 65  ,.  ** the numbe
10a60 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 73 20  r of columns is 
10a70 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 56 64  stored in the Vd
10a80 62 65 43 75 72 73 6f 72 2e 6e 46 69 65 6c 64 20  beCursor.nField 
10a90 65 6c 65 6d 65 6e 74 2e 0a 20 20 2a 2f 0a 20 20  element..  */.  
10aa0 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 31  pC = p->apCsr[p1
10ab0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
10ac0 3d 30 20 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  =0 );.#ifndef SQ
10ad0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
10ae0 4c 54 41 42 4c 45 0a 20 20 61 73 73 65 72 74 28  LTABLE.  assert(
10af0 20 70 43 2d 3e 70 56 74 61 62 43 75 72 73 6f 72   pC->pVtabCursor
10b00 3d 3d 30 20 29 3b 0a 23 65 6e 64 69 66 0a 20 20  ==0 );.#endif.  
10b10 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72  pCrsr = pC->pCur
10b20 73 6f 72 3b 0a 20 20 69 66 28 20 70 43 72 73 72  sor;.  if( pCrsr
10b30 21 3d 30 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68  !=0 ){.    /* Th
10b40 65 20 72 65 63 6f 72 64 20 69 73 20 73 74 6f 72  e record is stor
10b50 65 64 20 69 6e 20 61 20 42 2d 54 72 65 65 20 2a  ed in a B-Tree *
10b60 2f 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  /.    rc = sqlit
10b70 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65  e3VdbeCursorMove
10b80 74 6f 28 70 43 29 3b 0a 20 20 20 20 69 66 28 20  to(pC);.    if( 
10b90 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
10ba0 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
10bb0 20 20 69 66 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f    if( pC->nullRo
10bc0 77 20 29 7b 0a 20 20 20 20 20 20 70 61 79 6c 6f  w ){.      paylo
10bd0 61 64 53 69 7a 65 20 3d 20 30 3b 0a 20 20 20 20  adSize = 0;.    
10be0 7d 65 6c 73 65 20 69 66 28 20 70 43 2d 3e 63 61  }else if( pC->ca
10bf0 63 68 65 53 74 61 74 75 73 3d 3d 70 2d 3e 63 61  cheStatus==p->ca
10c00 63 68 65 43 74 72 20 29 7b 0a 20 20 20 20 20 20  cheCtr ){.      
10c10 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20 70 43  payloadSize = pC
10c20 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 3b 0a 20  ->payloadSize;. 
10c30 20 20 20 20 20 7a 52 65 63 20 3d 20 28 63 68 61       zRec = (cha
10c40 72 2a 29 70 43 2d 3e 61 52 6f 77 3b 0a 20 20 20  r*)pC->aRow;.   
10c50 20 7d 65 6c 73 65 20 69 66 28 20 70 43 2d 3e 69   }else if( pC->i
10c60 73 49 6e 64 65 78 20 29 7b 0a 20 20 20 20 20 20  sIndex ){.      
10c70 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 42  assert( sqlite3B
10c80 74 72 65 65 43 75 72 73 6f 72 49 73 56 61 6c 69  treeCursorIsVali
10c90 64 28 70 43 72 73 72 29 20 29 3b 0a 20 20 20 20  d(pCrsr) );.    
10ca0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
10cb0 72 65 65 4b 65 79 53 69 7a 65 28 70 43 72 73 72  reeKeySize(pCrsr
10cc0 2c 20 26 70 61 79 6c 6f 61 64 53 69 7a 65 36 34  , &payloadSize64
10cd0 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
10ce0 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
10cf0 3b 20 20 20 2f 2a 20 54 72 75 65 20 62 65 63 61  ;   /* True beca
10d00 75 73 65 20 6f 66 20 43 75 72 73 6f 72 4d 6f 76  use of CursorMov
10d10 65 74 6f 28 29 20 63 61 6c 6c 20 61 62 6f 76 65  eto() call above
10d20 20 2a 2f 0a 20 20 20 20 20 20 2f 2a 20 73 71 6c   */.      /* sql
10d30 69 74 65 33 42 74 72 65 65 50 61 72 73 65 43 65  ite3BtreeParseCe
10d40 6c 6c 50 74 72 28 29 20 75 73 65 73 20 67 65 74  llPtr() uses get
10d50 56 61 72 69 6e 74 33 32 28 29 20 74 6f 20 65 78  Varint32() to ex
10d60 74 72 61 63 74 20 74 68 65 0a 20 20 20 20 20 20  tract the.      
10d70 2a 2a 20 70 61 79 6c 6f 61 64 20 73 69 7a 65 2c  ** payload size,
10d80 20 73 6f 20 69 74 20 69 73 20 69 6d 70 6f 73 73   so it is imposs
10d90 69 62 6c 65 20 66 6f 72 20 70 61 79 6c 6f 61 64  ible for payload
10da0 53 69 7a 65 36 34 20 74 6f 20 62 65 0a 20 20 20  Size64 to be.   
10db0 20 20 20 2a 2a 20 6c 61 72 67 65 72 20 74 68 61     ** larger tha
10dc0 6e 20 33 32 20 62 69 74 73 2e 20 2a 2f 0a 20 20  n 32 bits. */.  
10dd0 20 20 20 20 61 73 73 65 72 74 28 20 28 70 61 79      assert( (pay
10de0 6c 6f 61 64 53 69 7a 65 36 34 20 26 20 53 51 4c  loadSize64 & SQL
10df0 49 54 45 5f 4d 41 58 5f 55 33 32 29 3d 3d 28 75  ITE_MAX_U32)==(u
10e00 36 34 29 70 61 79 6c 6f 61 64 53 69 7a 65 36 34  64)payloadSize64
10e10 20 29 3b 0a 20 20 20 20 20 20 70 61 79 6c 6f 61   );.      payloa
10e20 64 53 69 7a 65 20 3d 20 28 75 33 32 29 70 61 79  dSize = (u32)pay
10e30 6c 6f 61 64 53 69 7a 65 36 34 3b 0a 20 20 20 20  loadSize64;.    
10e40 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 61 73 73  }else{.      ass
10e50 65 72 74 28 20 73 71 6c 69 74 65 33 42 74 72 65  ert( sqlite3Btre
10e60 65 43 75 72 73 6f 72 49 73 56 61 6c 69 64 28 70  eCursorIsValid(p
10e70 43 72 73 72 29 20 29 3b 0a 20 20 20 20 20 20 72  Crsr) );.      r
10e80 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
10e90 44 61 74 61 53 69 7a 65 28 70 43 72 73 72 2c 20  DataSize(pCrsr, 
10ea0 26 70 61 79 6c 6f 61 64 53 69 7a 65 29 3b 0a 20  &payloadSize);. 
10eb0 20 20 20 20 20 61 73 73 65 72 74 28 20 72 63 3d       assert( rc=
10ec0 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 20 20  =SQLITE_OK );   
10ed0 2f 2a 20 44 61 74 61 53 69 7a 65 28 29 20 63 61  /* DataSize() ca
10ee0 6e 6e 6f 74 20 66 61 69 6c 20 2a 2f 0a 20 20 20  nnot fail */.   
10ef0 20 7d 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70   }.  }else if( p
10f00 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65  C->pseudoTableRe
10f10 67 3e 30 20 29 7b 0a 20 20 20 20 70 52 65 67 20  g>0 ){.    pReg 
10f20 3d 20 26 61 4d 65 6d 5b 70 43 2d 3e 70 73 65 75  = &aMem[pC->pseu
10f30 64 6f 54 61 62 6c 65 52 65 67 5d 3b 0a 20 20 20  doTableReg];.   
10f40 20 61 73 73 65 72 74 28 20 70 52 65 67 2d 3e 66   assert( pReg->f
10f50 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20  lags & MEM_Blob 
10f60 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d  );.    assert( m
10f70 65 6d 49 73 56 61 6c 69 64 28 70 52 65 67 29 20  emIsValid(pReg) 
10f80 29 3b 0a 20 20 20 20 70 61 79 6c 6f 61 64 53 69  );.    payloadSi
10f90 7a 65 20 3d 20 70 52 65 67 2d 3e 6e 3b 0a 20 20  ze = pReg->n;.  
10fa0 20 20 7a 52 65 63 20 3d 20 70 52 65 67 2d 3e 7a    zRec = pReg->z
10fb0 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53  ;.    pC->cacheS
10fc0 74 61 74 75 73 20 3d 20 28 70 4f 70 2d 3e 70 35  tatus = (pOp->p5
10fd0 26 4f 50 46 4c 41 47 5f 43 4c 45 41 52 43 41 43  &OPFLAG_CLEARCAC
10fe0 48 45 29 20 3f 20 43 41 43 48 45 5f 53 54 41 4c  HE) ? CACHE_STAL
10ff0 45 20 3a 20 70 2d 3e 63 61 63 68 65 43 74 72 3b  E : p->cacheCtr;
11000 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 61 79  .    assert( pay
11010 6c 6f 61 64 53 69 7a 65 3d 3d 30 20 7c 7c 20 7a  loadSize==0 || z
11020 52 65 63 21 3d 30 20 29 3b 0a 20 20 7d 65 6c 73  Rec!=0 );.  }els
11030 65 7b 0a 20 20 20 20 2f 2a 20 43 6f 6e 73 69 64  e{.    /* Consid
11040 65 72 20 74 68 65 20 72 6f 77 20 74 6f 20 62 65  er the row to be
11050 20 4e 55 4c 4c 20 2a 2f 0a 20 20 20 20 70 61 79   NULL */.    pay
11060 6c 6f 61 64 53 69 7a 65 20 3d 20 30 3b 0a 20 20  loadSize = 0;.  
11070 7d 0a 0a 20 20 2f 2a 20 49 66 20 70 61 79 6c 6f  }..  /* If paylo
11080 61 64 53 69 7a 65 20 69 73 20 30 2c 20 74 68 65  adSize is 0, the
11090 6e 20 6a 75 73 74 20 73 74 6f 72 65 20 61 20 4e  n just store a N
110a0 55 4c 4c 20 2a 2f 0a 20 20 69 66 28 20 70 61 79  ULL */.  if( pay
110b0 6c 6f 61 64 53 69 7a 65 3d 3d 30 20 29 7b 0a 20  loadSize==0 ){. 
110c0 20 20 20 61 73 73 65 72 74 28 20 70 44 65 73 74     assert( pDest
110d0 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 4e 75 6c 6c  ->flags&MEM_Null
110e0 20 29 3b 0a 20 20 20 20 67 6f 74 6f 20 6f 70 5f   );.    goto op_
110f0 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20 7d 0a  column_out;.  }.
11100 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 61 4c    assert( db->aL
11110 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49  imit[SQLITE_LIMI
11120 54 5f 4c 45 4e 47 54 48 5d 3e 3d 30 20 29 3b 0a  T_LENGTH]>=0 );.
11130 20 20 69 66 28 20 70 61 79 6c 6f 61 64 53 69 7a    if( payloadSiz
11140 65 20 3e 20 28 75 33 32 29 64 62 2d 3e 61 4c 69  e > (u32)db->aLi
11150 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54  mit[SQLITE_LIMIT
11160 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20  _LENGTH] ){.    
11170 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20  goto too_big;.  
11180 7d 0a 0a 20 20 6e 46 69 65 6c 64 20 3d 20 70 43  }..  nField = pC
11190 2d 3e 6e 46 69 65 6c 64 3b 0a 20 20 61 73 73 65  ->nField;.  asse
111a0 72 74 28 20 70 32 3c 6e 46 69 65 6c 64 20 29 3b  rt( p2<nField );
111b0 0a 0a 20 20 2f 2a 20 52 65 61 64 20 61 6e 64 20  ..  /* Read and 
111c0 70 61 72 73 65 20 74 68 65 20 74 61 62 6c 65 20  parse the table 
111d0 68 65 61 64 65 72 2e 20 20 53 74 6f 72 65 20 74  header.  Store t
111e0 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74 68  he results of th
111f0 65 20 70 61 72 73 65 0a 20 20 2a 2a 20 69 6e 74  e parse.  ** int
11200 6f 20 74 68 65 20 72 65 63 6f 72 64 20 68 65 61  o the record hea
11210 64 65 72 20 63 61 63 68 65 20 66 69 65 6c 64 73  der cache fields
11220 20 6f 66 20 74 68 65 20 63 75 72 73 6f 72 2e 0a   of the cursor..
11230 20 20 2a 2f 0a 20 20 61 54 79 70 65 20 3d 20 70    */.  aType = p
11240 43 2d 3e 61 54 79 70 65 3b 0a 20 20 69 66 28 20  C->aType;.  if( 
11250 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 3d  pC->cacheStatus=
11260 3d 70 2d 3e 63 61 63 68 65 43 74 72 20 29 7b 0a  =p->cacheCtr ){.
11270 20 20 20 20 61 4f 66 66 73 65 74 20 3d 20 70 43      aOffset = pC
11280 2d 3e 61 4f 66 66 73 65 74 3b 0a 20 20 7d 65 6c  ->aOffset;.  }el
11290 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 61  se{.    assert(a
112a0 54 79 70 65 29 3b 0a 20 20 20 20 61 76 61 69 6c  Type);.    avail
112b0 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e 61 4f   = 0;.    pC->aO
112c0 66 66 73 65 74 20 3d 20 61 4f 66 66 73 65 74 20  ffset = aOffset 
112d0 3d 20 26 61 54 79 70 65 5b 6e 46 69 65 6c 64 5d  = &aType[nField]
112e0 3b 0a 20 20 20 20 70 43 2d 3e 70 61 79 6c 6f 61  ;.    pC->payloa
112f0 64 53 69 7a 65 20 3d 20 70 61 79 6c 6f 61 64 53  dSize = payloadS
11300 69 7a 65 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63  ize;.    pC->cac
11310 68 65 53 74 61 74 75 73 20 3d 20 70 2d 3e 63 61  heStatus = p->ca
11320 63 68 65 43 74 72 3b 0a 0a 20 20 20 20 2f 2a 20  cheCtr;..    /* 
11330 46 69 67 75 72 65 20 6f 75 74 20 68 6f 77 20 6d  Figure out how m
11340 61 6e 79 20 62 79 74 65 73 20 61 72 65 20 69 6e  any bytes are in
11350 20 74 68 65 20 68 65 61 64 65 72 20 2a 2f 0a 20   the header */. 
11360 20 20 20 69 66 28 20 7a 52 65 63 20 29 7b 0a 20     if( zRec ){. 
11370 20 20 20 20 20 7a 44 61 74 61 20 3d 20 7a 52 65       zData = zRe
11380 63 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  c;.    }else{.  
11390 20 20 20 20 69 66 28 20 70 43 2d 3e 69 73 49 6e      if( pC->isIn
113a0 64 65 78 20 29 7b 0a 20 20 20 20 20 20 20 20 7a  dex ){.        z
113b0 44 61 74 61 20 3d 20 28 63 68 61 72 2a 29 73 71  Data = (char*)sq
113c0 6c 69 74 65 33 42 74 72 65 65 4b 65 79 46 65 74  lite3BtreeKeyFet
113d0 63 68 28 70 43 72 73 72 2c 20 26 61 76 61 69 6c  ch(pCrsr, &avail
113e0 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  );.      }else{.
113f0 20 20 20 20 20 20 20 20 7a 44 61 74 61 20 3d 20          zData = 
11400 28 63 68 61 72 2a 29 73 71 6c 69 74 65 33 42 74  (char*)sqlite3Bt
11410 72 65 65 44 61 74 61 46 65 74 63 68 28 70 43 72  reeDataFetch(pCr
11420 73 72 2c 20 26 61 76 61 69 6c 29 3b 0a 20 20 20  sr, &avail);.   
11430 20 20 20 7d 0a 20 20 20 20 20 20 2f 2a 20 49 66     }.      /* If
11440 20 4b 65 79 46 65 74 63 68 28 29 2f 44 61 74 61   KeyFetch()/Data
11450 46 65 74 63 68 28 29 20 6d 61 6e 61 67 65 64 20  Fetch() managed 
11460 74 6f 20 67 65 74 20 74 68 65 20 65 6e 74 69 72  to get the entir
11470 65 20 70 61 79 6c 6f 61 64 2c 0a 20 20 20 20 20  e payload,.     
11480 20 2a 2a 20 73 61 76 65 20 74 68 65 20 70 61 79   ** save the pay
11490 6c 6f 61 64 20 69 6e 20 74 68 65 20 70 43 2d 3e  load in the pC->
114a0 61 52 6f 77 20 63 61 63 68 65 2e 20 20 54 68 61  aRow cache.  Tha
114b0 74 20 77 69 6c 6c 20 73 61 76 65 20 75 73 20 66  t will save us f
114c0 72 6f 6d 0a 20 20 20 20 20 20 2a 2a 20 68 61 76  rom.      ** hav
114d0 69 6e 67 20 74 6f 20 6d 61 6b 65 20 61 64 64 69  ing to make addi
114e0 74 69 6f 6e 61 6c 20 63 61 6c 6c 73 20 74 6f 20  tional calls to 
114f0 66 65 74 63 68 20 74 68 65 20 63 6f 6e 74 65 6e  fetch the conten
11500 74 20 70 6f 72 74 69 6f 6e 20 6f 66 0a 20 20 20  t portion of.   
11510 20 20 20 2a 2a 20 74 68 65 20 72 65 63 6f 72 64     ** the record
11520 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
11530 20 61 73 73 65 72 74 28 20 61 76 61 69 6c 3e 3d   assert( avail>=
11540 30 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70  0 );.      if( p
11550 61 79 6c 6f 61 64 53 69 7a 65 20 3c 3d 20 28 75  ayloadSize <= (u
11560 33 32 29 61 76 61 69 6c 20 29 7b 0a 20 20 20 20  32)avail ){.    
11570 20 20 20 20 7a 52 65 63 20 3d 20 7a 44 61 74 61      zRec = zData
11580 3b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 61 52  ;.        pC->aR
11590 6f 77 20 3d 20 28 75 38 2a 29 7a 44 61 74 61 3b  ow = (u8*)zData;
115a0 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
115b0 20 20 20 20 20 20 70 43 2d 3e 61 52 6f 77 20 3d        pC->aRow =
115c0 20 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20   0;.      }.    
115d0 7d 0a 20 20 20 20 2f 2a 20 54 68 65 20 66 6f 6c  }.    /* The fol
115e0 6c 6f 77 69 6e 67 20 61 73 73 65 72 74 20 69 73  lowing assert is
115f0 20 74 72 75 65 20 69 6e 20 61 6c 6c 20 63 61 73   true in all cas
11600 65 73 20 61 63 63 65 70 74 20 77 68 65 6e 0a 20  es accept when. 
11610 20 20 20 2a 2a 20 74 68 65 20 64 61 74 61 62 61     ** the databa
11620 73 65 20 66 69 6c 65 20 68 61 73 20 62 65 65 6e  se file has been
11630 20 63 6f 72 72 75 70 74 65 64 20 65 78 74 65 72   corrupted exter
11640 6e 61 6c 6c 79 2e 0a 20 20 20 20 2a 2a 20 20 20  nally..    **   
11650 20 61 73 73 65 72 74 28 20 7a 52 65 63 21 3d 30   assert( zRec!=0
11660 20 7c 7c 20 61 76 61 69 6c 3e 3d 70 61 79 6c 6f   || avail>=paylo
11670 61 64 53 69 7a 65 20 7c 7c 20 61 76 61 69 6c 3e  adSize || avail>
11680 3d 39 20 29 3b 20 2a 2f 0a 20 20 20 20 73 7a 48  =9 ); */.    szH
11690 64 72 20 3d 20 67 65 74 56 61 72 69 6e 74 33 32  dr = getVarint32
116a0 28 28 75 38 2a 29 7a 44 61 74 61 2c 20 6f 66 66  ((u8*)zData, off
116b0 73 65 74 29 3b 0a 0a 20 20 20 20 2f 2a 20 4d 61  set);..    /* Ma
116c0 6b 65 20 73 75 72 65 20 61 20 63 6f 72 72 75 70  ke sure a corrup
116d0 74 20 64 61 74 61 62 61 73 65 20 68 61 73 20 6e  t database has n
116e0 6f 74 20 67 69 76 65 6e 20 75 73 20 61 6e 20 6f  ot given us an o
116f0 76 65 72 73 69 7a 65 20 68 65 61 64 65 72 2e 0a  versize header..
11700 20 20 20 20 2a 2a 20 44 6f 20 74 68 69 73 20 6e      ** Do this n
11710 6f 77 20 74 6f 20 61 76 6f 69 64 20 61 6e 20 6f  ow to avoid an o
11720 76 65 72 73 69 7a 65 20 6d 65 6d 6f 72 79 20 61  versize memory a
11730 6c 6c 6f 63 61 74 69 6f 6e 2e 0a 20 20 20 20 2a  llocation..    *
11740 2a 0a 20 20 20 20 2a 2a 20 54 79 70 65 20 65 6e  *.    ** Type en
11750 74 72 69 65 73 20 63 61 6e 20 62 65 20 62 65 74  tries can be bet
11760 77 65 65 6e 20 31 20 61 6e 64 20 35 20 62 79 74  ween 1 and 5 byt
11770 65 73 20 65 61 63 68 2e 20 20 42 75 74 20 34 20  es each.  But 4 
11780 61 6e 64 20 35 20 62 79 74 65 0a 20 20 20 20 2a  and 5 byte.    *
11790 2a 20 74 79 70 65 73 20 75 73 65 20 73 6f 20 6d  * types use so m
117a0 75 63 68 20 64 61 74 61 20 73 70 61 63 65 20 74  uch data space t
117b0 68 61 74 20 74 68 65 72 65 20 63 61 6e 20 6f 6e  hat there can on
117c0 6c 79 20 62 65 20 34 30 39 36 20 61 6e 64 20 33  ly be 4096 and 3
117d0 32 20 6f 66 0a 20 20 20 20 2a 2a 20 74 68 65 6d  2 of.    ** them
117e0 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20  , respectively. 
117f0 20 53 6f 20 74 68 65 20 6d 61 78 69 6d 75 6d 20   So the maximum 
11800 68 65 61 64 65 72 20 6c 65 6e 67 74 68 20 72 65  header length re
11810 73 75 6c 74 73 20 66 72 6f 6d 20 61 0a 20 20 20  sults from a.   
11820 20 2a 2a 20 33 2d 62 79 74 65 20 74 79 70 65 20   ** 3-byte type 
11830 66 6f 72 20 65 61 63 68 20 6f 66 20 74 68 65 20  for each of the 
11840 6d 61 78 69 6d 75 6d 20 6f 66 20 33 32 37 36 38  maximum of 32768
11850 20 63 6f 6c 75 6d 6e 73 20 70 6c 75 73 20 74 68   columns plus th
11860 72 65 65 0a 20 20 20 20 2a 2a 20 65 78 74 72 61  ree.    ** extra
11870 20 62 79 74 65 73 20 66 6f 72 20 74 68 65 20 68   bytes for the h
11880 65 61 64 65 72 20 6c 65 6e 67 74 68 20 69 74 73  eader length its
11890 65 6c 66 2e 20 20 33 32 37 36 38 2a 33 20 2b 20  elf.  32768*3 + 
118a0 33 20 3d 20 39 38 33 30 37 2e 0a 20 20 20 20 2a  3 = 98307..    *
118b0 2f 0a 20 20 20 20 69 66 28 20 6f 66 66 73 65 74  /.    if( offset
118c0 20 3e 20 39 38 33 30 37 20 29 7b 0a 20 20 20 20   > 98307 ){.    
118d0 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f    rc = SQLITE_CO
118e0 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20  RRUPT_BKPT;.    
118f0 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e    goto op_column
11900 5f 6f 75 74 3b 0a 20 20 20 20 7d 0a 0a 20 20 20  _out;.    }..   
11910 20 2f 2a 20 43 6f 6d 70 75 74 65 20 69 6e 20 6c   /* Compute in l
11920 65 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  en the number of
11930 20 62 79 74 65 73 20 6f 66 20 64 61 74 61 20 77   bytes of data w
11940 65 20 6e 65 65 64 20 74 6f 20 72 65 61 64 20 69  e need to read i
11950 6e 20 6f 72 64 65 72 0a 20 20 20 20 2a 2a 20 74  n order.    ** t
11960 6f 20 67 65 74 20 6e 46 69 65 6c 64 20 74 79 70  o get nField typ
11970 65 20 76 61 6c 75 65 73 2e 20 20 6f 66 66 73 65  e values.  offse
11980 74 20 69 73 20 61 6e 20 75 70 70 65 72 20 62 6f  t is an upper bo
11990 75 6e 64 20 6f 6e 20 74 68 69 73 2e 20 20 42 75  und on this.  Bu
119a0 74 0a 20 20 20 20 2a 2a 20 6e 46 69 65 6c 64 20  t.    ** nField 
119b0 6d 69 67 68 74 20 62 65 20 73 69 67 6e 69 66 69  might be signifi
119c0 63 61 6e 74 6c 79 20 6c 65 73 73 20 74 68 61 6e  cantly less than
119d0 20 74 68 65 20 74 72 75 65 20 6e 75 6d 62 65 72   the true number
119e0 20 6f 66 20 63 6f 6c 75 6d 6e 73 0a 20 20 20 20   of columns.    
119f0 2a 2a 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2c  ** in the table,
11a00 20 61 6e 64 20 69 6e 20 74 68 61 74 20 63 61 73   and in that cas
11a10 65 2c 20 35 2a 6e 46 69 65 6c 64 2b 33 20 6d 69  e, 5*nField+3 mi
11a20 67 68 74 20 62 65 20 73 6d 61 6c 6c 65 72 20 74  ght be smaller t
11a30 68 61 6e 20 6f 66 66 73 65 74 2e 0a 20 20 20 20  han offset..    
11a40 2a 2a 20 57 65 20 77 61 6e 74 20 74 6f 20 6d 69  ** We want to mi
11a50 6e 69 6d 69 7a 65 20 6c 65 6e 20 69 6e 20 6f 72  nimize len in or
11a60 64 65 72 20 74 6f 20 6c 69 6d 69 74 20 74 68 65  der to limit the
11a70 20 73 69 7a 65 20 6f 66 20 74 68 65 20 6d 65 6d   size of the mem
11a80 6f 72 79 0a 20 20 20 20 2a 2a 20 61 6c 6c 6f 63  ory.    ** alloc
11a90 61 74 69 6f 6e 2c 20 65 73 70 65 63 69 61 6c 6c  ation, especiall
11aa0 79 20 69 66 20 61 20 63 6f 72 72 75 70 74 20 64  y if a corrupt d
11ab0 61 74 61 62 61 73 65 20 66 69 6c 65 20 68 61 73  atabase file has
11ac0 20 63 61 75 73 65 64 20 6f 66 66 73 65 74 0a 20   caused offset. 
11ad0 20 20 20 2a 2a 20 74 6f 20 62 65 20 6f 76 65 72     ** to be over
11ae0 73 69 7a 65 64 2e 20 4f 66 66 73 65 74 20 69 73  sized. Offset is
11af0 20 6c 69 6d 69 74 65 64 20 74 6f 20 39 38 33 30   limited to 9830
11b00 37 20 61 62 6f 76 65 2e 20 20 42 75 74 20 39 38  7 above.  But 98
11b10 33 30 37 20 6d 69 67 68 74 0a 20 20 20 20 2a 2a  307 might.    **
11b20 20 73 74 69 6c 6c 20 65 78 63 65 65 64 20 52 6f   still exceed Ro
11b30 62 73 6f 6e 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  bson memory allo
11b40 63 61 74 69 6f 6e 20 6c 69 6d 69 74 73 20 6f 6e  cation limits on
11b50 20 73 6f 6d 65 20 63 6f 6e 66 69 67 75 72 61 74   some configurat
11b60 69 6f 6e 73 2e 0a 20 20 20 20 2a 2a 20 4f 6e 20  ions..    ** On 
11b70 73 79 73 74 65 6d 73 20 74 68 61 74 20 63 61 6e  systems that can
11b80 6e 6f 74 20 74 6f 6c 65 72 61 74 65 20 6c 61 72  not tolerate lar
11b90 67 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  ge memory alloca
11ba0 74 69 6f 6e 73 2c 20 6e 46 69 65 6c 64 2a 35 2b  tions, nField*5+
11bb0 33 0a 20 20 20 20 2a 2a 20 77 69 6c 6c 20 6c 69  3.    ** will li
11bc0 6b 65 6c 79 20 62 65 20 6d 75 63 68 20 73 6d 61  kely be much sma
11bd0 6c 6c 65 72 20 73 69 6e 63 65 20 6e 46 69 65 6c  ller since nFiel
11be0 64 20 77 69 6c 6c 20 6c 69 6b 65 6c 79 20 62 65  d will likely be
11bf0 20 6c 65 73 73 20 74 68 61 6e 0a 20 20 20 20 2a   less than.    *
11c00 2a 20 32 30 20 6f 72 20 73 6f 2e 20 20 54 68 69  * 20 or so.  Thi
11c10 73 20 69 6e 73 75 72 65 73 20 74 68 61 74 20 52  s insures that R
11c20 6f 62 73 6f 6e 20 6d 65 6d 6f 72 79 20 61 6c 6c  obson memory all
11c30 6f 63 61 74 69 6f 6e 20 6c 69 6d 69 74 73 20 61  ocation limits a
11c40 72 65 0a 20 20 20 20 2a 2a 20 6e 6f 74 20 65 78  re.    ** not ex
11c50 63 65 65 64 65 64 20 65 76 65 6e 20 66 6f 72 20  ceeded even for 
11c60 63 6f 72 72 75 70 74 20 64 61 74 61 62 61 73 65  corrupt database
11c70 20 66 69 6c 65 73 2e 0a 20 20 20 20 2a 2f 0a 20   files..    */. 
11c80 20 20 20 6c 65 6e 20 3d 20 6e 46 69 65 6c 64 2a     len = nField*
11c90 35 20 2b 20 33 3b 0a 20 20 20 20 69 66 28 20 6c  5 + 3;.    if( l
11ca0 65 6e 20 3e 20 28 69 6e 74 29 6f 66 66 73 65 74  en > (int)offset
11cb0 20 29 20 6c 65 6e 20 3d 20 28 69 6e 74 29 6f 66   ) len = (int)of
11cc0 66 73 65 74 3b 0a 0a 20 20 20 20 2f 2a 20 54 68  fset;..    /* Th
11cd0 65 20 4b 65 79 46 65 74 63 68 28 29 20 6f 72 20  e KeyFetch() or 
11ce0 44 61 74 61 46 65 74 63 68 28 29 20 61 62 6f 76  DataFetch() abov
11cf0 65 20 61 72 65 20 66 61 73 74 20 61 6e 64 20 77  e are fast and w
11d00 69 6c 6c 20 67 65 74 20 74 68 65 20 65 6e 74 69  ill get the enti
11d10 72 65 0a 20 20 20 20 2a 2a 20 72 65 63 6f 72 64  re.    ** record
11d20 20 68 65 61 64 65 72 20 69 6e 20 6d 6f 73 74 20   header in most 
11d30 63 61 73 65 73 2e 20 20 42 75 74 20 74 68 65 79  cases.  But they
11d40 20 77 69 6c 6c 20 66 61 69 6c 20 74 6f 20 67 65   will fail to ge
11d50 74 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 0a 20  t the complete. 
11d60 20 20 20 2a 2a 20 72 65 63 6f 72 64 20 68 65 61     ** record hea
11d70 64 65 72 20 69 66 20 74 68 65 20 72 65 63 6f 72  der if the recor
11d80 64 20 68 65 61 64 65 72 20 64 6f 65 73 20 6e 6f  d header does no
11d90 74 20 66 69 74 20 6f 6e 20 61 20 73 69 6e 67 6c  t fit on a singl
11da0 65 20 70 61 67 65 0a 20 20 20 20 2a 2a 20 69 6e  e page.    ** in
11db0 20 74 68 65 20 42 2d 54 72 65 65 2e 20 20 57 68   the B-Tree.  Wh
11dc0 65 6e 20 74 68 61 74 20 68 61 70 70 65 6e 73 2c  en that happens,
11dd0 20 75 73 65 20 73 71 6c 69 74 65 33 56 64 62 65   use sqlite3Vdbe
11de0 4d 65 6d 46 72 6f 6d 42 74 72 65 65 28 29 20 74  MemFromBtree() t
11df0 6f 0a 20 20 20 20 2a 2a 20 61 63 71 75 69 72 65  o.    ** acquire
11e00 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 68 65   the complete he
11e10 61 64 65 72 20 74 65 78 74 2e 0a 20 20 20 20 2a  ader text..    *
11e20 2f 0a 20 20 20 20 69 66 28 20 21 7a 52 65 63 20  /.    if( !zRec 
11e30 26 26 20 61 76 61 69 6c 3c 6c 65 6e 20 29 7b 0a  && avail<len ){.
11e40 20 20 20 20 20 20 73 4d 65 6d 2e 66 6c 61 67 73        sMem.flags
11e50 20 3d 20 30 3b 0a 20 20 20 20 20 20 73 4d 65 6d   = 0;.      sMem
11e60 2e 64 62 20 3d 20 30 3b 0a 20 20 20 20 20 20 72  .db = 0;.      r
11e70 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d  c = sqlite3VdbeM
11e80 65 6d 46 72 6f 6d 42 74 72 65 65 28 70 43 72 73  emFromBtree(pCrs
11e90 72 2c 20 30 2c 20 6c 65 6e 2c 20 70 43 2d 3e 69  r, 0, len, pC->i
11ea0 73 49 6e 64 65 78 2c 20 26 73 4d 65 6d 29 3b 0a  sIndex, &sMem);.
11eb0 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
11ec0 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
11ed0 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d     goto op_colum
11ee0 6e 5f 6f 75 74 3b 0a 20 20 20 20 20 20 7d 0a 20  n_out;.      }. 
11ef0 20 20 20 20 20 7a 44 61 74 61 20 3d 20 73 4d 65       zData = sMe
11f00 6d 2e 7a 3b 0a 20 20 20 20 7d 0a 20 20 20 20 7a  m.z;.    }.    z
11f10 45 6e 64 48 64 72 20 3d 20 28 75 38 20 2a 29 26  EndHdr = (u8 *)&
11f20 7a 44 61 74 61 5b 6c 65 6e 5d 3b 0a 20 20 20 20  zData[len];.    
11f30 7a 49 64 78 20 3d 20 28 75 38 20 2a 29 26 7a 44  zIdx = (u8 *)&zD
11f40 61 74 61 5b 73 7a 48 64 72 5d 3b 0a 0a 20 20 20  ata[szHdr];..   
11f50 20 2f 2a 20 53 63 61 6e 20 74 68 65 20 68 65 61   /* Scan the hea
11f60 64 65 72 20 61 6e 64 20 75 73 65 20 69 74 20 74  der and use it t
11f70 6f 20 66 69 6c 6c 20 69 6e 20 74 68 65 20 61 54  o fill in the aT
11f80 79 70 65 5b 5d 20 61 6e 64 20 61 4f 66 66 73 65  ype[] and aOffse
11f90 74 5b 5d 0a 20 20 20 20 2a 2a 20 61 72 72 61 79  t[].    ** array
11fa0 73 2e 20 20 61 54 79 70 65 5b 69 5d 20 77 69 6c  s.  aType[i] wil
11fb0 6c 20 63 6f 6e 74 61 69 6e 20 74 68 65 20 74 79  l contain the ty
11fc0 70 65 20 69 6e 74 65 67 65 72 20 66 6f 72 20 74  pe integer for t
11fd0 68 65 20 69 2d 74 68 0a 20 20 20 20 2a 2a 20 63  he i-th.    ** c
11fe0 6f 6c 75 6d 6e 20 61 6e 64 20 61 4f 66 66 73 65  olumn and aOffse
11ff0 74 5b 69 5d 20 77 69 6c 6c 20 63 6f 6e 74 61 69  t[i] will contai
12000 6e 20 74 68 65 20 6f 66 66 73 65 74 20 66 72 6f  n the offset fro
12010 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 0a  m the beginning.
12020 20 20 20 20 2a 2a 20 6f 66 20 74 68 65 20 72 65      ** of the re
12030 63 6f 72 64 20 74 6f 20 74 68 65 20 73 74 61 72  cord to the star
12040 74 20 6f 66 20 74 68 65 20 64 61 74 61 20 66 6f  t of the data fo
12050 72 20 74 68 65 20 69 2d 74 68 20 63 6f 6c 75 6d  r the i-th colum
12060 6e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 66 6f 72  n.    */.    for
12070 28 69 3d 30 3b 20 69 3c 6e 46 69 65 6c 64 3b 20  (i=0; i<nField; 
12080 69 2b 2b 29 7b 0a 20 20 20 20 20 20 69 66 28 20  i++){.      if( 
12090 7a 49 64 78 3c 7a 45 6e 64 48 64 72 20 29 7b 0a  zIdx<zEndHdr ){.
120a0 20 20 20 20 20 20 20 20 61 4f 66 66 73 65 74 5b          aOffset[
120b0 69 5d 20 3d 20 6f 66 66 73 65 74 3b 0a 20 20 20  i] = offset;.   
120c0 20 20 20 20 20 7a 49 64 78 20 2b 3d 20 67 65 74       zIdx += get
120d0 56 61 72 69 6e 74 33 32 28 7a 49 64 78 2c 20 61  Varint32(zIdx, a
120e0 54 79 70 65 5b 69 5d 29 3b 0a 20 20 20 20 20 20  Type[i]);.      
120f0 20 20 73 7a 46 69 65 6c 64 20 3d 20 73 71 6c 69    szField = sqli
12100 74 65 33 56 64 62 65 53 65 72 69 61 6c 54 79 70  te3VdbeSerialTyp
12110 65 4c 65 6e 28 61 54 79 70 65 5b 69 5d 29 3b 0a  eLen(aType[i]);.
12120 20 20 20 20 20 20 20 20 6f 66 66 73 65 74 20 2b          offset +
12130 3d 20 73 7a 46 69 65 6c 64 3b 0a 20 20 20 20 20  = szField;.     
12140 20 20 20 69 66 28 20 6f 66 66 73 65 74 3c 73 7a     if( offset<sz
12150 46 69 65 6c 64 20 29 7b 20 20 2f 2a 20 54 72 75  Field ){  /* Tru
12160 65 20 69 66 20 6f 66 66 73 65 74 20 6f 76 65 72  e if offset over
12170 66 6c 6f 77 73 20 2a 2f 0a 20 20 20 20 20 20 20  flows */.       
12180 20 20 20 7a 49 64 78 20 3d 20 26 7a 45 6e 64 48     zIdx = &zEndH
12190 64 72 5b 31 5d 3b 20 20 2f 2a 20 46 6f 72 63 65  dr[1];  /* Force
121a0 73 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54  s SQLITE_CORRUPT
121b0 20 72 65 74 75 72 6e 20 62 65 6c 6f 77 20 2a 2f   return below */
121c0 0a 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b  .          break
121d0 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
121e0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
121f0 20 2f 2a 20 49 66 20 69 20 69 73 20 6c 65 73 73   /* If i is less
12200 20 74 68 61 74 20 6e 46 69 65 6c 64 2c 20 74 68   that nField, th
12210 65 6e 20 74 68 65 72 65 20 61 72 65 20 6c 65 73  en there are les
12220 73 20 66 69 65 6c 64 73 20 69 6e 20 74 68 69 73  s fields in this
12230 0a 20 20 20 20 20 20 20 20 2a 2a 20 72 65 63 6f  .        ** reco
12240 72 64 20 74 68 61 6e 20 53 65 74 4e 75 6d 43 6f  rd than SetNumCo
12250 6c 75 6d 6e 73 20 69 6e 64 69 63 61 74 65 64 20  lumns indicated 
12260 74 68 65 72 65 20 61 72 65 20 63 6f 6c 75 6d 6e  there are column
12270 73 20 69 6e 20 74 68 65 0a 20 20 20 20 20 20 20  s in the.       
12280 20 2a 2a 20 74 61 62 6c 65 2e 20 53 65 74 20 74   ** table. Set t
12290 68 65 20 6f 66 66 73 65 74 20 66 6f 72 20 61 6e  he offset for an
122a0 79 20 65 78 74 72 61 20 63 6f 6c 75 6d 6e 73 20  y extra columns 
122b0 6e 6f 74 20 70 72 65 73 65 6e 74 20 69 6e 0a 20  not present in. 
122c0 20 20 20 20 20 20 20 2a 2a 20 74 68 65 20 72 65         ** the re
122d0 63 6f 72 64 20 74 6f 20 30 2e 20 54 68 69 73 20  cord to 0. This 
122e0 74 65 6c 6c 73 20 63 6f 64 65 20 62 65 6c 6f 77  tells code below
122f0 20 74 6f 20 73 74 6f 72 65 20 61 20 4e 55 4c 4c   to store a NULL
12300 0a 20 20 20 20 20 20 20 20 2a 2a 20 69 6e 73 74  .        ** inst
12310 65 61 64 20 6f 66 20 64 65 73 65 72 69 61 6c 69  ead of deseriali
12320 7a 69 6e 67 20 61 20 76 61 6c 75 65 20 66 72 6f  zing a value fro
12330 6d 20 74 68 65 20 72 65 63 6f 72 64 2e 0a 20 20  m the record..  
12340 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 20        */.       
12350 20 61 4f 66 66 73 65 74 5b 69 5d 20 3d 20 30 3b   aOffset[i] = 0;
12360 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
12370 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
12380 6d 52 65 6c 65 61 73 65 28 26 73 4d 65 6d 29 3b  mRelease(&sMem);
12390 0a 20 20 20 20 73 4d 65 6d 2e 66 6c 61 67 73 20  .    sMem.flags 
123a0 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 0a 20 20 20  = MEM_Null;..   
123b0 20 2f 2a 20 49 66 20 77 65 20 68 61 76 65 20 72   /* If we have r
123c0 65 61 64 20 6d 6f 72 65 20 68 65 61 64 65 72 20  ead more header 
123d0 64 61 74 61 20 74 68 61 6e 20 77 61 73 20 63 6f  data than was co
123e0 6e 74 61 69 6e 65 64 20 69 6e 20 74 68 65 20 68  ntained in the h
123f0 65 61 64 65 72 2c 0a 20 20 20 20 2a 2a 20 6f 72  eader,.    ** or
12400 20 69 66 20 74 68 65 20 65 6e 64 20 6f 66 20 74   if the end of t
12410 68 65 20 6c 61 73 74 20 66 69 65 6c 64 20 61 70  he last field ap
12420 70 65 61 72 73 20 74 6f 20 62 65 20 70 61 73 74  pears to be past
12430 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 0a   the end of the.
12440 20 20 20 20 2a 2a 20 72 65 63 6f 72 64 2c 20 6f      ** record, o
12450 72 20 69 66 20 74 68 65 20 65 6e 64 20 6f 66 20  r if the end of 
12460 74 68 65 20 6c 61 73 74 20 66 69 65 6c 64 20 61  the last field a
12470 70 70 65 61 72 73 20 74 6f 20 62 65 20 62 65 66  ppears to be bef
12480 6f 72 65 20 74 68 65 20 65 6e 64 0a 20 20 20 20  ore the end.    
12490 2a 2a 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64  ** of the record
124a0 20 28 77 68 65 6e 20 61 6c 6c 20 66 69 65 6c 64   (when all field
124b0 73 20 70 72 65 73 65 6e 74 29 2c 20 74 68 65 6e  s present), then
124c0 20 77 65 20 6d 75 73 74 20 62 65 20 64 65 61 6c   we must be deal
124d0 69 6e 67 20 0a 20 20 20 20 2a 2a 20 77 69 74 68  ing .    ** with
124e0 20 61 20 63 6f 72 72 75 70 74 20 64 61 74 61 62   a corrupt datab
124f0 61 73 65 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  ase..    */.    
12500 69 66 28 20 28 7a 49 64 78 20 3e 20 7a 45 6e 64  if( (zIdx > zEnd
12510 48 64 72 29 20 7c 7c 20 28 6f 66 66 73 65 74 20  Hdr) || (offset 
12520 3e 20 70 61 79 6c 6f 61 64 53 69 7a 65 29 0a 20  > payloadSize). 
12530 20 20 20 20 20 20 20 20 7c 7c 20 28 7a 49 64 78          || (zIdx
12540 3d 3d 7a 45 6e 64 48 64 72 20 26 26 20 6f 66 66  ==zEndHdr && off
12550 73 65 74 21 3d 70 61 79 6c 6f 61 64 53 69 7a 65  set!=payloadSize
12560 29 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20  ) ){.      rc = 
12570 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 42  SQLITE_CORRUPT_B
12580 4b 50 54 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20  KPT;.      goto 
12590 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20  op_column_out;. 
125a0 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 2f 2a 20 47     }.  }..  /* G
125b0 65 74 20 74 68 65 20 63 6f 6c 75 6d 6e 20 69 6e  et the column in
125c0 66 6f 72 6d 61 74 69 6f 6e 2e 20 49 66 20 61 4f  formation. If aO
125d0 66 66 73 65 74 5b 70 32 5d 20 69 73 20 6e 6f 6e  ffset[p2] is non
125e0 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 0a 20 20 2a  -zero, then .  *
125f0 2a 20 64 65 73 65 72 69 61 6c 69 7a 65 20 74 68  * deserialize th
12600 65 20 76 61 6c 75 65 20 66 72 6f 6d 20 74 68 65  e value from the
12610 20 72 65 63 6f 72 64 2e 20 49 66 20 61 4f 66 66   record. If aOff
12620 73 65 74 5b 70 32 5d 20 69 73 20 7a 65 72 6f 2c  set[p2] is zero,
12630 0a 20 20 2a 2a 20 74 68 65 6e 20 74 68 65 72 65  .  ** then there
12640 20 61 72 65 20 6e 6f 74 20 65 6e 6f 75 67 68 20   are not enough 
12650 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20 72 65  fields in the re
12660 63 6f 72 64 20 74 6f 20 73 61 74 69 73 66 79 20  cord to satisfy 
12670 74 68 65 0a 20 20 2a 2a 20 72 65 71 75 65 73 74  the.  ** request
12680 2e 20 20 49 6e 20 74 68 69 73 20 63 61 73 65 2c  .  In this case,
12690 20 73 65 74 20 74 68 65 20 76 61 6c 75 65 20 4e   set the value N
126a0 55 4c 4c 20 6f 72 20 74 6f 20 50 34 20 69 66 20  ULL or to P4 if 
126b0 50 34 20 69 73 0a 20 20 2a 2a 20 61 20 70 6f 69  P4 is.  ** a poi
126c0 6e 74 65 72 20 74 6f 20 61 20 4d 65 6d 20 6f 62  nter to a Mem ob
126d0 6a 65 63 74 2e 0a 20 20 2a 2f 0a 20 20 69 66 28  ject..  */.  if(
126e0 20 61 4f 66 66 73 65 74 5b 70 32 5d 20 29 7b 0a   aOffset[p2] ){.
126f0 20 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d      assert( rc==
12700 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 20 20 20  SQLITE_OK );.   
12710 20 69 66 28 20 7a 52 65 63 20 29 7b 0a 20 20 20   if( zRec ){.   
12720 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
12730 6d 52 65 6c 65 61 73 65 45 78 74 65 72 6e 61 6c  mReleaseExternal
12740 28 70 44 65 73 74 29 3b 0a 20 20 20 20 20 20 73  (pDest);.      s
12750 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c  qlite3VdbeSerial
12760 47 65 74 28 28 75 38 20 2a 29 26 7a 52 65 63 5b  Get((u8 *)&zRec[
12770 61 4f 66 66 73 65 74 5b 70 32 5d 5d 2c 20 61 54  aOffset[p2]], aT
12780 79 70 65 5b 70 32 5d 2c 20 70 44 65 73 74 29 3b  ype[p2], pDest);
12790 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
127a0 20 20 6c 65 6e 20 3d 20 73 71 6c 69 74 65 33 56    len = sqlite3V
127b0 64 62 65 53 65 72 69 61 6c 54 79 70 65 4c 65 6e  dbeSerialTypeLen
127c0 28 61 54 79 70 65 5b 70 32 5d 29 3b 0a 20 20 20  (aType[p2]);.   
127d0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
127e0 6d 4d 6f 76 65 28 26 73 4d 65 6d 2c 20 70 44 65  mMove(&sMem, pDe
127f0 73 74 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  st);.      rc = 
12800 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 72  sqlite3VdbeMemFr
12810 6f 6d 42 74 72 65 65 28 70 43 72 73 72 2c 20 61  omBtree(pCrsr, a
12820 4f 66 66 73 65 74 5b 70 32 5d 2c 20 6c 65 6e 2c  Offset[p2], len,
12830 20 70 43 2d 3e 69 73 49 6e 64 65 78 2c 20 26 73   pC->isIndex, &s
12840 4d 65 6d 29 3b 0a 20 20 20 20 20 20 69 66 28 20  Mem);.      if( 
12850 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc!=SQLITE_OK ){
12860 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6f 70  .        goto op
12870 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20  _column_out;.   
12880 20 20 20 7d 0a 20 20 20 20 20 20 7a 44 61 74 61     }.      zData
12890 20 3d 20 73 4d 65 6d 2e 7a 3b 0a 20 20 20 20 20   = sMem.z;.     
128a0 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69   sqlite3VdbeSeri
128b0 61 6c 47 65 74 28 28 75 38 2a 29 7a 44 61 74 61  alGet((u8*)zData
128c0 2c 20 61 54 79 70 65 5b 70 32 5d 2c 20 70 44 65  , aType[p2], pDe
128d0 73 74 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70  st);.    }.    p
128e0 44 65 73 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f  Dest->enc = enco
128f0 64 69 6e 67 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  ding;.  }else{. 
12900 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79     if( pOp->p4ty
12910 70 65 3d 3d 50 34 5f 4d 45 4d 20 29 7b 0a 20 20  pe==P4_MEM ){.  
12920 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
12930 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 44  emShallowCopy(pD
12940 65 73 74 2c 20 70 4f 70 2d 3e 70 34 2e 70 4d 65  est, pOp->p4.pMe
12950 6d 2c 20 4d 45 4d 5f 53 74 61 74 69 63 29 3b 0a  m, MEM_Static);.
12960 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
12970 20 61 73 73 65 72 74 28 20 70 44 65 73 74 2d 3e   assert( pDest->
12980 66 6c 61 67 73 26 4d 45 4d 5f 4e 75 6c 6c 20 29  flags&MEM_Null )
12990 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 2f  ;.    }.  }..  /
129a0 2a 20 49 66 20 77 65 20 64 79 6e 61 6d 69 63 61  * If we dynamica
129b0 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 73 70  lly allocated sp
129c0 61 63 65 20 74 6f 20 68 6f 6c 64 20 74 68 65 20  ace to hold the 
129d0 64 61 74 61 20 28 69 6e 20 74 68 65 0a 20 20 2a  data (in the.  *
129e0 2a 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  * sqlite3VdbeMem
129f0 46 72 6f 6d 42 74 72 65 65 28 29 20 63 61 6c 6c  FromBtree() call
12a00 20 61 62 6f 76 65 29 20 74 68 65 6e 20 74 72 61   above) then tra
12a10 6e 73 66 65 72 20 63 6f 6e 74 72 6f 6c 20 6f 66  nsfer control of
12a20 20 74 68 61 74 0a 20 20 2a 2a 20 64 79 6e 61 6d   that.  ** dynam
12a30 69 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64  ically allocated
12a40 20 73 70 61 63 65 20 6f 76 65 72 20 74 6f 20 74   space over to t
12a50 68 65 20 70 44 65 73 74 20 73 74 72 75 63 74 75  he pDest structu
12a60 72 65 2e 0a 20 20 2a 2a 20 54 68 69 73 20 70 72  re..  ** This pr
12a70 65 76 65 6e 74 73 20 61 20 6d 65 6d 6f 72 79 20  events a memory 
12a80 63 6f 70 79 2e 0a 20 20 2a 2f 0a 20 20 69 66 28  copy..  */.  if(
12a90 20 73 4d 65 6d 2e 7a 4d 61 6c 6c 6f 63 20 29 7b   sMem.zMalloc ){
12aa0 0a 20 20 20 20 61 73 73 65 72 74 28 20 73 4d 65  .    assert( sMe
12ab0 6d 2e 7a 3d 3d 73 4d 65 6d 2e 7a 4d 61 6c 6c 6f  m.z==sMem.zMallo
12ac0 63 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  c );.    assert(
12ad0 20 21 28 70 44 65 73 74 2d 3e 66 6c 61 67 73 20   !(pDest->flags 
12ae0 26 20 4d 45 4d 5f 44 79 6e 29 20 29 3b 0a 20 20  & MEM_Dyn) );.  
12af0 20 20 61 73 73 65 72 74 28 20 21 28 70 44 65 73    assert( !(pDes
12b00 74 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  t->flags & (MEM_
12b10 42 6c 6f 62 7c 4d 45 4d 5f 53 74 72 29 29 20 7c  Blob|MEM_Str)) |
12b20 7c 20 70 44 65 73 74 2d 3e 7a 3d 3d 73 4d 65 6d  | pDest->z==sMem
12b30 2e 7a 20 29 3b 0a 20 20 20 20 70 44 65 73 74 2d  .z );.    pDest-
12b40 3e 66 6c 61 67 73 20 26 3d 20 7e 28 4d 45 4d 5f  >flags &= ~(MEM_
12b50 45 70 68 65 6d 7c 4d 45 4d 5f 53 74 61 74 69 63  Ephem|MEM_Static
12b60 29 3b 0a 20 20 20 20 70 44 65 73 74 2d 3e 66 6c  );.    pDest->fl
12b70 61 67 73 20 7c 3d 20 4d 45 4d 5f 54 65 72 6d 3b  ags |= MEM_Term;
12b80 0a 20 20 20 20 70 44 65 73 74 2d 3e 7a 20 3d 20  .    pDest->z = 
12b90 73 4d 65 6d 2e 7a 3b 0a 20 20 20 20 70 44 65 73  sMem.z;.    pDes
12ba0 74 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d 20 73 4d 65  t->zMalloc = sMe
12bb0 6d 2e 7a 4d 61 6c 6c 6f 63 3b 0a 20 20 7d 0a 0a  m.zMalloc;.  }..
12bc0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
12bd0 62 65 4d 65 6d 4d 61 6b 65 57 72 69 74 65 61 62  beMemMakeWriteab
12be0 6c 65 28 70 44 65 73 74 29 3b 0a 0a 6f 70 5f 63  le(pDest);..op_c
12bf0 6f 6c 75 6d 6e 5f 6f 75 74 3a 0a 20 20 55 50 44  olumn_out:.  UPD
12c00 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45  ATE_MAX_BLOBSIZE
12c10 28 70 44 65 73 74 29 3b 0a 20 20 52 45 47 49 53  (pDest);.  REGIS
12c20 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
12c30 33 2c 20 70 44 65 73 74 29 3b 0a 20 20 62 72 65  3, pDest);.  bre
12c40 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
12c50 3a 20 41 66 66 69 6e 69 74 79 20 50 31 20 50 32  : Affinity P1 P2
12c60 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 41 70   * P4 *.**.** Ap
12c70 70 6c 79 20 61 66 66 69 6e 69 74 69 65 73 20 74  ply affinities t
12c80 6f 20 61 20 72 61 6e 67 65 20 6f 66 20 50 32 20  o a range of P2 
12c90 72 65 67 69 73 74 65 72 73 20 73 74 61 72 74 69  registers starti
12ca0 6e 67 20 77 69 74 68 20 50 31 2e 0a 2a 2a 0a 2a  ng with P1..**.*
12cb0 2a 20 50 34 20 69 73 20 61 20 73 74 72 69 6e 67  * P4 is a string
12cc0 20 74 68 61 74 20 69 73 20 50 32 20 63 68 61 72   that is P2 char
12cd0 61 63 74 65 72 73 20 6c 6f 6e 67 2e 20 54 68 65  acters long. The
12ce0 20 6e 74 68 20 63 68 61 72 61 63 74 65 72 20 6f   nth character o
12cf0 66 20 74 68 65 0a 2a 2a 20 73 74 72 69 6e 67 20  f the.** string 
12d00 69 6e 64 69 63 61 74 65 73 20 74 68 65 20 63 6f  indicates the co
12d10 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 20 74 68  lumn affinity th
12d20 61 74 20 73 68 6f 75 6c 64 20 62 65 20 75 73 65  at should be use
12d30 64 20 66 6f 72 20 74 68 65 20 6e 74 68 0a 2a 2a  d for the nth.**
12d40 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69 6e 20   memory cell in 
12d50 74 68 65 20 72 61 6e 67 65 2e 0a 2a 2f 0a 63 61  the range..*/.ca
12d60 73 65 20 4f 50 5f 41 66 66 69 6e 69 74 79 3a 20  se OP_Affinity: 
12d70 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  {.  const char *
12d80 7a 41 66 66 69 6e 69 74 79 3b 20 20 20 2f 2a 20  zAffinity;   /* 
12d90 54 68 65 20 61 66 66 69 6e 69 74 79 20 74 6f 20  The affinity to 
12da0 62 65 20 61 70 70 6c 69 65 64 20 2a 2f 0a 20 20  be applied */.  
12db0 63 68 61 72 20 63 41 66 66 3b 20 20 20 20 20 20  char cAff;      
12dc0 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 73 69           /* A si
12dd0 6e 67 6c 65 20 63 68 61 72 61 63 74 65 72 20 6f  ngle character o
12de0 66 20 61 66 66 69 6e 69 74 79 20 2a 2f 0a 0a 20  f affinity */.. 
12df0 20 7a 41 66 66 69 6e 69 74 79 20 3d 20 70 4f 70   zAffinity = pOp
12e00 2d 3e 70 34 2e 7a 3b 0a 20 20 61 73 73 65 72 74  ->p4.z;.  assert
12e10 28 20 7a 41 66 66 69 6e 69 74 79 21 3d 30 20 29  ( zAffinity!=0 )
12e20 3b 0a 20 20 61 73 73 65 72 74 28 20 7a 41 66 66  ;.  assert( zAff
12e30 69 6e 69 74 79 5b 70 4f 70 2d 3e 70 32 5d 3d 3d  inity[pOp->p2]==
12e40 30 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61  0 );.  pIn1 = &a
12e50 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
12e60 77 68 69 6c 65 28 20 28 63 41 66 66 20 3d 20 2a  while( (cAff = *
12e70 28 7a 41 66 66 69 6e 69 74 79 2b 2b 29 29 21 3d  (zAffinity++))!=
12e80 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  0 ){.    assert(
12e90 20 70 49 6e 31 20 3c 3d 20 26 70 2d 3e 61 4d 65   pIn1 <= &p->aMe
12ea0 6d 5b 70 2d 3e 6e 4d 65 6d 5d 20 29 3b 0a 20 20  m[p->nMem] );.  
12eb0 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
12ec0 61 6c 69 64 28 70 49 6e 31 29 20 29 3b 0a 20 20  alid(pIn1) );.  
12ed0 20 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e    ExpandBlob(pIn
12ee0 31 29 3b 0a 20 20 20 20 61 70 70 6c 79 41 66 66  1);.    applyAff
12ef0 69 6e 69 74 79 28 70 49 6e 31 2c 20 63 41 66 66  inity(pIn1, cAff
12f00 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20  , encoding);.   
12f10 20 70 49 6e 31 2b 2b 3b 0a 20 20 7d 0a 20 20 62   pIn1++;.  }.  b
12f20 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
12f30 64 65 3a 20 4d 61 6b 65 52 65 63 6f 72 64 20 50  de: MakeRecord P
12f40 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a  1 P2 P3 P4 *.**.
12f50 2a 2a 20 43 6f 6e 76 65 72 74 20 50 32 20 72 65  ** Convert P2 re
12f60 67 69 73 74 65 72 73 20 62 65 67 69 6e 6e 69 6e  gisters beginnin
12f70 67 20 77 69 74 68 20 50 31 20 69 6e 74 6f 20 74  g with P1 into t
12f80 68 65 20 5b 72 65 63 6f 72 64 20 66 6f 72 6d 61  he [record forma
12f90 74 5d 0a 2a 2a 20 75 73 65 20 61 73 20 61 20 64  t].** use as a d
12fa0 61 74 61 20 72 65 63 6f 72 64 20 69 6e 20 61 20  ata record in a 
12fb0 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f  database table o
12fc0 72 20 61 73 20 61 20 6b 65 79 0a 2a 2a 20 69 6e  r as a key.** in
12fd0 20 61 6e 20 69 6e 64 65 78 2e 20 20 54 68 65 20   an index.  The 
12fe0 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65  OP_Column opcode
12ff0 20 63 61 6e 20 64 65 63 6f 64 65 20 74 68 65 20   can decode the 
13000 72 65 63 6f 72 64 20 6c 61 74 65 72 2e 0a 2a 2a  record later..**
13010 0a 2a 2a 20 50 34 20 6d 61 79 20 62 65 20 61 20  .** P4 may be a 
13020 73 74 72 69 6e 67 20 74 68 61 74 20 69 73 20 50  string that is P
13030 32 20 63 68 61 72 61 63 74 65 72 73 20 6c 6f 6e  2 characters lon
13040 67 2e 20 20 54 68 65 20 6e 74 68 20 63 68 61 72  g.  The nth char
13050 61 63 74 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20  acter of the.** 
13060 73 74 72 69 6e 67 20 69 6e 64 69 63 61 74 65 73  string indicates
13070 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61 66 66 69   the column affi
13080 6e 69 74 79 20 74 68 61 74 20 73 68 6f 75 6c 64  nity that should
13090 20 62 65 20 75 73 65 64 20 66 6f 72 20 74 68 65   be used for the
130a0 20 6e 74 68 0a 2a 2a 20 66 69 65 6c 64 20 6f 66   nth.** field of
130b0 20 74 68 65 20 69 6e 64 65 78 20 6b 65 79 2e 0a   the index key..
130c0 2a 2a 0a 2a 2a 20 54 68 65 20 6d 61 70 70 69 6e  **.** The mappin
130d0 67 20 66 72 6f 6d 20 63 68 61 72 61 63 74 65 72  g from character
130e0 20 74 6f 20 61 66 66 69 6e 69 74 79 20 69 73 20   to affinity is 
130f0 67 69 76 65 6e 20 62 79 20 74 68 65 20 53 51 4c  given by the SQL
13100 49 54 45 5f 41 46 46 5f 0a 2a 2a 20 6d 61 63 72  ITE_AFF_.** macr
13110 6f 73 20 64 65 66 69 6e 65 64 20 69 6e 20 73 71  os defined in sq
13120 6c 69 74 65 49 6e 74 2e 68 2e 0a 2a 2a 0a 2a 2a  liteInt.h..**.**
13130 20 49 66 20 50 34 20 69 73 20 4e 55 4c 4c 20 74   If P4 is NULL t
13140 68 65 6e 20 61 6c 6c 20 69 6e 64 65 78 20 66 69  hen all index fi
13150 65 6c 64 73 20 68 61 76 65 20 74 68 65 20 61 66  elds have the af
13160 66 69 6e 69 74 79 20 4e 4f 4e 45 2e 0a 2a 2f 0a  finity NONE..*/.
13170 63 61 73 65 20 4f 50 5f 4d 61 6b 65 52 65 63 6f  case OP_MakeReco
13180 72 64 3a 20 7b 0a 20 20 75 38 20 2a 7a 4e 65 77  rd: {.  u8 *zNew
13190 52 65 63 6f 72 64 3b 20 20 20 20 20 20 20 20 2f  Record;        /
131a0 2a 20 41 20 62 75 66 66 65 72 20 74 6f 20 68 6f  * A buffer to ho
131b0 6c 64 20 74 68 65 20 64 61 74 61 20 66 6f 72 20  ld the data for 
131c0 74 68 65 20 6e 65 77 20 72 65 63 6f 72 64 20 2a  the new record *
131d0 2f 0a 20 20 4d 65 6d 20 2a 70 52 65 63 3b 20 20  /.  Mem *pRec;  
131e0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
131f0 65 20 6e 65 77 20 72 65 63 6f 72 64 20 2a 2f 0a  e new record */.
13200 20 20 75 36 34 20 6e 44 61 74 61 3b 20 20 20 20    u64 nData;    
13210 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
13220 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20 64  er of bytes of d
13230 61 74 61 20 73 70 61 63 65 20 2a 2f 0a 20 20 69  ata space */.  i
13240 6e 74 20 6e 48 64 72 3b 20 20 20 20 20 20 20 20  nt nHdr;        
13250 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
13260 6f 66 20 62 79 74 65 73 20 6f 66 20 68 65 61 64  of bytes of head
13270 65 72 20 73 70 61 63 65 20 2a 2f 0a 20 20 69 36  er space */.  i6
13280 34 20 6e 42 79 74 65 3b 20 20 20 20 20 20 20 20  4 nByte;        
13290 20 20 20 20 20 2f 2a 20 44 61 74 61 20 73 70 61       /* Data spa
132a0 63 65 20 72 65 71 75 69 72 65 64 20 66 6f 72 20  ce required for 
132b0 74 68 69 73 20 72 65 63 6f 72 64 20 2a 2f 0a 20  this record */. 
132c0 20 69 6e 74 20 6e 5a 65 72 6f 3b 20 20 20 20 20   int nZero;     
132d0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
132e0 72 20 6f 66 20 7a 65 72 6f 20 62 79 74 65 73 20  r of zero bytes 
132f0 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  at the end of th
13300 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e  e record */.  in
13310 74 20 6e 56 61 72 69 6e 74 3b 20 20 20 20 20 20  t nVarint;      
13320 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
13330 66 20 62 79 74 65 73 20 69 6e 20 61 20 76 61 72  f bytes in a var
13340 69 6e 74 20 2a 2f 0a 20 20 75 33 32 20 73 65 72  int */.  u32 ser
13350 69 61 6c 5f 74 79 70 65 3b 20 20 20 20 20 20 20  ial_type;       
13360 2f 2a 20 54 79 70 65 20 66 69 65 6c 64 20 2a 2f  /* Type field */
13370 0a 20 20 4d 65 6d 20 2a 70 44 61 74 61 30 3b 20  .  Mem *pData0; 
13380 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72            /* Fir
13390 73 74 20 66 69 65 6c 64 20 74 6f 20 62 65 20 63  st field to be c
133a0 6f 6d 62 69 6e 65 64 20 69 6e 74 6f 20 74 68 65  ombined into the
133b0 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 4d 65 6d   record */.  Mem
133c0 20 2a 70 4c 61 73 74 3b 20 20 20 20 20 20 20 20   *pLast;        
133d0 20 20 20 20 2f 2a 20 4c 61 73 74 20 66 69 65 6c      /* Last fiel
133e0 64 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20  d of the record 
133f0 2a 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b  */.  int nField;
13400 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
13410 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20  umber of fields 
13420 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f  in the record */
13430 0a 20 20 63 68 61 72 20 2a 7a 41 66 66 69 6e 69  .  char *zAffini
13440 74 79 3b 20 20 20 20 20 20 20 2f 2a 20 54 68 65  ty;       /* The
13450 20 61 66 66 69 6e 69 74 79 20 73 74 72 69 6e 67   affinity string
13460 20 66 6f 72 20 74 68 65 20 72 65 63 6f 72 64 20   for the record 
13470 2a 2f 0a 20 20 69 6e 74 20 66 69 6c 65 5f 66 6f  */.  int file_fo
13480 72 6d 61 74 3b 20 20 20 20 20 20 20 2f 2a 20 46  rmat;       /* F
13490 69 6c 65 20 66 6f 72 6d 61 74 20 74 6f 20 75 73  ile format to us
134a0 65 20 66 6f 72 20 65 6e 63 6f 64 69 6e 67 20 2a  e for encoding *
134b0 2f 0a 20 20 69 6e 74 20 69 3b 20 20 20 20 20 20  /.  int i;      
134c0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 70             /* Sp
134d0 61 63 65 20 75 73 65 64 20 69 6e 20 7a 4e 65 77  ace used in zNew
134e0 52 65 63 6f 72 64 5b 5d 20 2a 2f 0a 20 20 69 6e  Record[] */.  in
134f0 74 20 6c 65 6e 3b 20 20 20 20 20 20 20 20 20 20  t len;          
13500 20 20 20 20 20 2f 2a 20 4c 65 6e 67 74 68 20 6f       /* Length o
13510 66 20 61 20 66 69 65 6c 64 20 2a 2f 0a 0a 20 20  f a field */..  
13520 2f 2a 20 41 73 73 75 6d 69 6e 67 20 74 68 65 20  /* Assuming the 
13530 72 65 63 6f 72 64 20 63 6f 6e 74 61 69 6e 73 20  record contains 
13540 4e 20 66 69 65 6c 64 73 2c 20 74 68 65 20 72 65  N fields, the re
13550 63 6f 72 64 20 66 6f 72 6d 61 74 20 6c 6f 6f 6b  cord format look
13560 73 0a 20 20 2a 2a 20 6c 69 6b 65 20 74 68 69 73  s.  ** like this
13570 3a 0a 20 20 2a 2a 0a 20 20 2a 2a 20 2d 2d 2d 2d  :.  **.  ** ----
13580 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13590 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
135a0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
135b0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
135c0 2d 2d 2d 2d 0a 20 20 2a 2a 20 7c 20 68 64 72 2d  ----.  ** | hdr-
135d0 73 69 7a 65 20 7c 20 74 79 70 65 20 30 20 7c 20  size | type 0 | 
135e0 74 79 70 65 20 31 20 7c 20 2e 2e 2e 20 7c 20 74  type 1 | ... | t
135f0 79 70 65 20 4e 2d 31 20 7c 20 64 61 74 61 30 20  ype N-1 | data0 
13600 7c 20 2e 2e 2e 20 7c 20 64 61 74 61 20 4e 2d 31  | ... | data N-1
13610 20 7c 20 0a 20 20 2a 2a 20 2d 2d 2d 2d 2d 2d 2d   | .  ** -------
13620 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13630 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13640 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13650 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13660 2d 0a 20 20 2a 2a 0a 20 20 2a 2a 20 44 61 74 61  -.  **.  ** Data
13670 28 30 29 20 69 73 20 74 61 6b 65 6e 20 66 72 6f  (0) is taken fro
13680 6d 20 72 65 67 69 73 74 65 72 20 50 31 2e 20 20  m register P1.  
13690 44 61 74 61 28 31 29 20 63 6f 6d 65 73 20 66 72  Data(1) comes fr
136a0 6f 6d 20 72 65 67 69 73 74 65 72 20 50 31 2b 31  om register P1+1
136b0 0a 20 20 2a 2a 20 61 6e 64 20 73 6f 20 66 72 6f  .  ** and so fro
136c0 74 68 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 45 61  th..  **.  ** Ea
136d0 63 68 20 74 79 70 65 20 66 69 65 6c 64 20 69 73  ch type field is
136e0 20 61 20 76 61 72 69 6e 74 20 72 65 70 72 65 73   a varint repres
136f0 65 6e 74 69 6e 67 20 74 68 65 20 73 65 72 69 61  enting the seria
13700 6c 20 74 79 70 65 20 6f 66 20 74 68 65 20 0a 20  l type of the . 
13710 20 2a 2a 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e   ** correspondin
13720 67 20 64 61 74 61 20 65 6c 65 6d 65 6e 74 20 28  g data element (
13730 73 65 65 20 73 71 6c 69 74 65 33 56 64 62 65 53  see sqlite3VdbeS
13740 65 72 69 61 6c 54 79 70 65 28 29 29 2e 20 54 68  erialType()). Th
13750 65 0a 20 20 2a 2a 20 68 64 72 2d 73 69 7a 65 20  e.  ** hdr-size 
13760 66 69 65 6c 64 20 69 73 20 61 6c 73 6f 20 61 20  field is also a 
13770 76 61 72 69 6e 74 20 77 68 69 63 68 20 69 73 20  varint which is 
13780 74 68 65 20 6f 66 66 73 65 74 20 66 72 6f 6d 20  the offset from 
13790 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 0a 20 20  the beginning.  
137a0 2a 2a 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64  ** of the record
137b0 20 74 6f 20 64 61 74 61 30 2e 0a 20 20 2a 2f 0a   to data0..  */.
137c0 20 20 6e 44 61 74 61 20 3d 20 30 3b 20 20 20 20    nData = 0;    
137d0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
137e0 66 20 62 79 74 65 73 20 6f 66 20 64 61 74 61 20  f bytes of data 
137f0 73 70 61 63 65 20 2a 2f 0a 20 20 6e 48 64 72 20  space */.  nHdr 
13800 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  = 0;          /*
13810 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   Number of bytes
13820 20 6f 66 20 68 65 61 64 65 72 20 73 70 61 63 65   of header space
13830 20 2a 2f 0a 20 20 6e 5a 65 72 6f 20 3d 20 30 3b   */.  nZero = 0;
13840 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
13850 65 72 20 6f 66 20 7a 65 72 6f 20 62 79 74 65 73  er of zero bytes
13860 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74   at the end of t
13870 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 6e  he record */.  n
13880 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 31 3b  Field = pOp->p1;
13890 0a 20 20 7a 41 66 66 69 6e 69 74 79 20 3d 20 70  .  zAffinity = p
138a0 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 61 73 73 65  Op->p4.z;.  asse
138b0 72 74 28 20 6e 46 69 65 6c 64 3e 30 20 26 26 20  rt( nField>0 && 
138c0 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70  pOp->p2>0 && pOp
138d0 2d 3e 70 32 2b 6e 46 69 65 6c 64 3c 3d 70 2d 3e  ->p2+nField<=p->
138e0 6e 4d 65 6d 2b 31 20 29 3b 0a 20 20 70 44 61 74  nMem+1 );.  pDat
138f0 61 30 20 3d 20 26 61 4d 65 6d 5b 6e 46 69 65 6c  a0 = &aMem[nFiel
13900 64 5d 3b 0a 20 20 6e 46 69 65 6c 64 20 3d 20 70  d];.  nField = p
13910 4f 70 2d 3e 70 32 3b 0a 20 20 70 4c 61 73 74 20  Op->p2;.  pLast 
13920 3d 20 26 70 44 61 74 61 30 5b 6e 46 69 65 6c 64  = &pData0[nField
13930 2d 31 5d 3b 0a 20 20 66 69 6c 65 5f 66 6f 72 6d  -1];.  file_form
13940 61 74 20 3d 20 70 2d 3e 6d 69 6e 57 72 69 74 65  at = p->minWrite
13950 46 69 6c 65 46 6f 72 6d 61 74 3b 0a 0a 20 20 2f  FileFormat;..  /
13960 2a 20 49 64 65 6e 74 69 66 79 20 74 68 65 20 6f  * Identify the o
13970 75 74 70 75 74 20 72 65 67 69 73 74 65 72 20 2a  utput register *
13980 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  /.  assert( pOp-
13990 3e 70 33 3c 70 4f 70 2d 3e 70 31 20 7c 7c 20 70  >p3<pOp->p1 || p
139a0 4f 70 2d 3e 70 33 3e 3d 70 4f 70 2d 3e 70 31 2b  Op->p3>=pOp->p1+
139b0 70 4f 70 2d 3e 70 32 20 29 3b 0a 20 20 70 4f 75  pOp->p2 );.  pOu
139c0 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
139d0 33 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f  3];.  memAboutTo
139e0 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b  Change(p, pOut);
139f0 0a 0a 20 20 2f 2a 20 4c 6f 6f 70 20 74 68 72 6f  ..  /* Loop thro
13a00 75 67 68 20 74 68 65 20 65 6c 65 6d 65 6e 74 73  ugh the elements
13a10 20 74 68 61 74 20 77 69 6c 6c 20 6d 61 6b 65 20   that will make 
13a20 75 70 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f  up the record to
13a30 20 66 69 67 75 72 65 0a 20 20 2a 2a 20 6f 75 74   figure.  ** out
13a40 20 68 6f 77 20 6d 75 63 68 20 73 70 61 63 65 20   how much space 
13a50 69 73 20 72 65 71 75 69 72 65 64 20 66 6f 72 20  is required for 
13a60 74 68 65 20 6e 65 77 20 72 65 63 6f 72 64 2e 0a  the new record..
13a70 20 20 2a 2f 0a 20 20 66 6f 72 28 70 52 65 63 3d    */.  for(pRec=
13a80 70 44 61 74 61 30 3b 20 70 52 65 63 3c 3d 70 4c  pData0; pRec<=pL
13a90 61 73 74 3b 20 70 52 65 63 2b 2b 29 7b 0a 20 20  ast; pRec++){.  
13aa0 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
13ab0 61 6c 69 64 28 70 52 65 63 29 20 29 3b 0a 20 20  alid(pRec) );.  
13ac0 20 20 69 66 28 20 7a 41 66 66 69 6e 69 74 79 20    if( zAffinity 
13ad0 29 7b 0a 20 20 20 20 20 20 61 70 70 6c 79 41 66  ){.      applyAf
13ae0 66 69 6e 69 74 79 28 70 52 65 63 2c 20 7a 41 66  finity(pRec, zAf
13af0 66 69 6e 69 74 79 5b 70 52 65 63 2d 70 44 61 74  finity[pRec-pDat
13b00 61 30 5d 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a  a0], encoding);.
13b10 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70 52      }.    if( pR
13b20 65 63 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 5a 65  ec->flags&MEM_Ze
13b30 72 6f 20 26 26 20 70 52 65 63 2d 3e 6e 3e 30 20  ro && pRec->n>0 
13b40 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
13b50 56 64 62 65 4d 65 6d 45 78 70 61 6e 64 42 6c 6f  VdbeMemExpandBlo
13b60 62 28 70 52 65 63 29 3b 0a 20 20 20 20 7d 0a 20  b(pRec);.    }. 
13b70 20 20 20 73 65 72 69 61 6c 5f 74 79 70 65 20 3d     serial_type =
13b80 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69   sqlite3VdbeSeri
13b90 61 6c 54 79 70 65 28 70 52 65 63 2c 20 66 69 6c  alType(pRec, fil
13ba0 65 5f 66 6f 72 6d 61 74 29 3b 0a 20 20 20 20 6c  e_format);.    l
13bb0 65 6e 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  en = sqlite3Vdbe
13bc0 53 65 72 69 61 6c 54 79 70 65 4c 65 6e 28 73 65  SerialTypeLen(se
13bd0 72 69 61 6c 5f 74 79 70 65 29 3b 0a 20 20 20 20  rial_type);.    
13be0 6e 44 61 74 61 20 2b 3d 20 6c 65 6e 3b 0a 20 20  nData += len;.  
13bf0 20 20 6e 48 64 72 20 2b 3d 20 73 71 6c 69 74 65    nHdr += sqlite
13c00 33 56 61 72 69 6e 74 4c 65 6e 28 73 65 72 69 61  3VarintLen(seria
13c10 6c 5f 74 79 70 65 29 3b 0a 20 20 20 20 69 66 28  l_type);.    if(
13c20 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d   pRec->flags & M
13c30 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20 20  EM_Zero ){.     
13c40 20 2f 2a 20 4f 6e 6c 79 20 70 75 72 65 20 7a 65   /* Only pure ze
13c50 72 6f 2d 66 69 6c 6c 65 64 20 42 4c 4f 42 73 20  ro-filled BLOBs 
13c60 63 61 6e 20 62 65 20 69 6e 70 75 74 20 74 6f 20  can be input to 
13c70 74 68 69 73 20 4f 70 63 6f 64 65 2e 0a 20 20 20  this Opcode..   
13c80 20 20 20 2a 2a 20 57 65 20 64 6f 20 6e 6f 74 20     ** We do not 
13c90 61 6c 6c 6f 77 20 62 6c 6f 62 73 20 77 69 74 68  allow blobs with
13ca0 20 61 20 70 72 65 66 69 78 20 61 6e 64 20 61 20   a prefix and a 
13cb0 7a 65 72 6f 2d 66 69 6c 6c 65 64 20 74 61 69 6c  zero-filled tail
13cc0 2e 20 2a 2f 0a 20 20 20 20 20 20 6e 5a 65 72 6f  . */.      nZero
13cd0 20 2b 3d 20 70 52 65 63 2d 3e 75 2e 6e 5a 65 72   += pRec->u.nZer
13ce0 6f 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  o;.    }else if(
13cf0 20 6c 65 6e 20 29 7b 0a 20 20 20 20 20 20 6e 5a   len ){.      nZ
13d00 65 72 6f 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20  ero = 0;.    }. 
13d10 20 7d 0a 0a 20 20 2f 2a 20 41 64 64 20 74 68 65   }..  /* Add the
13d20 20 69 6e 69 74 69 61 6c 20 68 65 61 64 65 72 20   initial header 
13d30 76 61 72 69 6e 74 20 61 6e 64 20 74 6f 74 61 6c  varint and total
13d40 20 74 68 65 20 73 69 7a 65 20 2a 2f 0a 20 20 6e   the size */.  n
13d50 48 64 72 20 2b 3d 20 6e 56 61 72 69 6e 74 20 3d  Hdr += nVarint =
13d60 20 73 71 6c 69 74 65 33 56 61 72 69 6e 74 4c 65   sqlite3VarintLe
13d70 6e 28 6e 48 64 72 29 3b 0a 20 20 69 66 28 20 6e  n(nHdr);.  if( n
13d80 56 61 72 69 6e 74 3c 73 71 6c 69 74 65 33 56 61  Varint<sqlite3Va
13d90 72 69 6e 74 4c 65 6e 28 6e 48 64 72 29 20 29 7b  rintLen(nHdr) ){
13da0 0a 20 20 20 20 6e 48 64 72 2b 2b 3b 0a 20 20 7d  .    nHdr++;.  }
13db0 0a 20 20 6e 42 79 74 65 20 3d 20 6e 48 64 72 2b  .  nByte = nHdr+
13dc0 6e 44 61 74 61 2d 6e 5a 65 72 6f 3b 0a 20 20 69  nData-nZero;.  i
13dd0 66 28 20 6e 42 79 74 65 3e 64 62 2d 3e 61 4c 69  f( nByte>db->aLi
13de0 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54  mit[SQLITE_LIMIT
13df0 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20  _LENGTH] ){.    
13e00 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20  goto too_big;.  
13e10 7d 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72  }..  /* Make sur
13e20 65 20 74 68 65 20 6f 75 74 70 75 74 20 72 65 67  e the output reg
13e30 69 73 74 65 72 20 68 61 73 20 61 20 62 75 66 66  ister has a buff
13e40 65 72 20 6c 61 72 67 65 20 65 6e 6f 75 67 68 20  er large enough 
13e50 74 6f 20 73 74 6f 72 65 20 0a 20 20 2a 2a 20 74  to store .  ** t
13e60 68 65 20 6e 65 77 20 72 65 63 6f 72 64 2e 20 54  he new record. T
13e70 68 65 20 6f 75 74 70 75 74 20 72 65 67 69 73 74  he output regist
13e80 65 72 20 28 70 4f 70 2d 3e 70 33 29 20 69 73 20  er (pOp->p3) is 
13e90 6e 6f 74 20 61 6c 6c 6f 77 65 64 20 74 6f 0a 20  not allowed to. 
13ea0 20 2a 2a 20 62 65 20 6f 6e 65 20 6f 66 20 74 68   ** be one of th
13eb0 65 20 69 6e 70 75 74 20 72 65 67 69 73 74 65 72  e input register
13ec0 73 20 28 62 65 63 61 75 73 65 20 74 68 65 20 66  s (because the f
13ed0 6f 6c 6c 6f 77 69 6e 67 20 63 61 6c 6c 20 74 6f  ollowing call to
13ee0 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 56 64 62  .  ** sqlite3Vdb
13ef0 65 4d 65 6d 47 72 6f 77 28 29 20 63 6f 75 6c 64  eMemGrow() could
13f00 20 63 6c 6f 62 62 65 72 20 74 68 65 20 76 61 6c   clobber the val
13f10 75 65 20 62 65 66 6f 72 65 20 69 74 20 69 73 20  ue before it is 
13f20 75 73 65 64 29 2e 0a 20 20 2a 2f 0a 20 20 69 66  used)..  */.  if
13f30 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  ( sqlite3VdbeMem
13f40 47 72 6f 77 28 70 4f 75 74 2c 20 28 69 6e 74 29  Grow(pOut, (int)
13f50 6e 42 79 74 65 2c 20 30 29 20 29 7b 0a 20 20 20  nByte, 0) ){.   
13f60 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
13f70 7d 0a 20 20 7a 4e 65 77 52 65 63 6f 72 64 20 3d  }.  zNewRecord =
13f80 20 28 75 38 20 2a 29 70 4f 75 74 2d 3e 7a 3b 0a   (u8 *)pOut->z;.
13f90 0a 20 20 2f 2a 20 57 72 69 74 65 20 74 68 65 20  .  /* Write the 
13fa0 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 20 3d 20  record */.  i = 
13fb0 70 75 74 56 61 72 69 6e 74 33 32 28 7a 4e 65 77  putVarint32(zNew
13fc0 52 65 63 6f 72 64 2c 20 6e 48 64 72 29 3b 0a 20  Record, nHdr);. 
13fd0 20 66 6f 72 28 70 52 65 63 3d 70 44 61 74 61 30   for(pRec=pData0
13fe0 3b 20 70 52 65 63 3c 3d 70 4c 61 73 74 3b 20 70  ; pRec<=pLast; p
13ff0 52 65 63 2b 2b 29 7b 0a 20 20 20 20 73 65 72 69  Rec++){.    seri
14000 61 6c 5f 74 79 70 65 20 3d 20 73 71 6c 69 74 65  al_type = sqlite
14010 33 56 64 62 65 53 65 72 69 61 6c 54 79 70 65 28  3VdbeSerialType(
14020 70 52 65 63 2c 20 66 69 6c 65 5f 66 6f 72 6d 61  pRec, file_forma
14030 74 29 3b 0a 20 20 20 20 69 20 2b 3d 20 70 75 74  t);.    i += put
14040 56 61 72 69 6e 74 33 32 28 26 7a 4e 65 77 52 65  Varint32(&zNewRe
14050 63 6f 72 64 5b 69 5d 2c 20 73 65 72 69 61 6c 5f  cord[i], serial_
14060 74 79 70 65 29 3b 20 20 20 20 20 20 2f 2a 20 73  type);      /* s
14070 65 72 69 61 6c 20 74 79 70 65 20 2a 2f 0a 20 20  erial type */.  
14080 7d 0a 20 20 66 6f 72 28 70 52 65 63 3d 70 44 61  }.  for(pRec=pDa
14090 74 61 30 3b 20 70 52 65 63 3c 3d 70 4c 61 73 74  ta0; pRec<=pLast
140a0 3b 20 70 52 65 63 2b 2b 29 7b 20 20 2f 2a 20 73  ; pRec++){  /* s
140b0 65 72 69 61 6c 20 64 61 74 61 20 2a 2f 0a 20 20  erial data */.  
140c0 20 20 69 20 2b 3d 20 73 71 6c 69 74 65 33 56 64    i += sqlite3Vd
140d0 62 65 53 65 72 69 61 6c 50 75 74 28 26 7a 4e 65  beSerialPut(&zNe
140e0 77 52 65 63 6f 72 64 5b 69 5d 2c 20 28 69 6e 74  wRecord[i], (int
140f0 29 28 6e 42 79 74 65 2d 69 29 2c 20 70 52 65 63  )(nByte-i), pRec
14100 2c 66 69 6c 65 5f 66 6f 72 6d 61 74 29 3b 0a 20  ,file_format);. 
14110 20 7d 0a 20 20 61 73 73 65 72 74 28 20 69 3d 3d   }.  assert( i==
14120 6e 42 79 74 65 20 29 3b 0a 0a 20 20 61 73 73 65  nByte );..  asse
14130 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26  rt( pOp->p3>0 &&
14140 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65   pOp->p3<=p->nMe
14150 6d 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d  m );.  pOut->n =
14160 20 28 69 6e 74 29 6e 42 79 74 65 3b 0a 20 20 70   (int)nByte;.  p
14170 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
14180 5f 42 6c 6f 62 20 7c 20 4d 45 4d 5f 44 79 6e 3b  _Blob | MEM_Dyn;
14190 0a 20 20 70 4f 75 74 2d 3e 78 44 65 6c 20 3d 20  .  pOut->xDel = 
141a0 30 3b 0a 20 20 69 66 28 20 6e 5a 65 72 6f 20 29  0;.  if( nZero )
141b0 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 6e 5a  {.    pOut->u.nZ
141c0 65 72 6f 20 3d 20 6e 5a 65 72 6f 3b 0a 20 20 20  ero = nZero;.   
141d0 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20   pOut->flags |= 
141e0 4d 45 4d 5f 5a 65 72 6f 3b 0a 20 20 7d 0a 20 20  MEM_Zero;.  }.  
141f0 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 53 51 4c 49  pOut->enc = SQLI
14200 54 45 5f 55 54 46 38 3b 20 20 2f 2a 20 49 6e 20  TE_UTF8;  /* In 
14210 63 61 73 65 20 74 68 65 20 62 6c 6f 62 20 69 73  case the blob is
14220 20 65 76 65 72 20 63 6f 6e 76 65 72 74 65 64 20   ever converted 
14230 74 6f 20 74 65 78 74 20 2a 2f 0a 20 20 52 45 47  to text */.  REG
14240 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
14250 3e 70 33 2c 20 70 4f 75 74 29 3b 0a 20 20 55 50  >p3, pOut);.  UP
14260 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
14270 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b  E(pOut);.  break
14280 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
14290 43 6f 75 6e 74 20 50 31 20 50 32 20 2a 20 2a 20  Count P1 P2 * * 
142a0 2a 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 74 68  *.**.** Store th
142b0 65 20 6e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72  e number of entr
142c0 69 65 73 20 28 61 6e 20 69 6e 74 65 67 65 72 20  ies (an integer 
142d0 76 61 6c 75 65 29 20 69 6e 20 74 68 65 20 74 61  value) in the ta
142e0 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 0a 2a 2a  ble or index .**
142f0 20 6f 70 65 6e 65 64 20 62 79 20 63 75 72 73 6f   opened by curso
14300 72 20 50 31 20 69 6e 20 72 65 67 69 73 74 65 72  r P1 in register
14310 20 50 32 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53   P2.*/.#ifndef S
14320 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 54 52 45 45  QLITE_OMIT_BTREE
14330 43 4f 55 4e 54 0a 63 61 73 65 20 4f 50 5f 43 6f  COUNT.case OP_Co
14340 75 6e 74 3a 20 7b 20 20 20 20 20 20 20 20 20 2f  unt: {         /
14350 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73  * out2-prereleas
14360 65 20 2a 2f 0a 20 20 69 36 34 20 6e 45 6e 74 72  e */.  i64 nEntr
14370 79 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70  y;.  BtCursor *p
14380 43 72 73 72 3b 0a 0a 20 20 70 43 72 73 72 20 3d  Crsr;..  pCrsr =
14390 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
143a0 31 5d 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 69  1]->pCursor;.  i
143b0 66 28 20 70 43 72 73 72 20 29 7b 0a 20 20 20 20  f( pCrsr ){.    
143c0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
143d0 65 43 6f 75 6e 74 28 70 43 72 73 72 2c 20 26 6e  eCount(pCrsr, &n
143e0 45 6e 74 72 79 29 3b 0a 20 20 7d 65 6c 73 65 7b  Entry);.  }else{
143f0 0a 20 20 20 20 6e 45 6e 74 72 79 20 3d 20 30 3b  .    nEntry = 0;
14400 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69  .  }.  pOut->u.i
14410 20 3d 20 6e 45 6e 74 72 79 3b 0a 20 20 62 72 65   = nEntry;.  bre
14420 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ak;.}.#endif../*
14430 20 4f 70 63 6f 64 65 3a 20 53 61 76 65 70 6f 69   Opcode: Savepoi
14440 6e 74 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a  nt P1 * * P4 *.*
14450 2a 0a 2a 2a 20 4f 70 65 6e 2c 20 72 65 6c 65 61  *.** Open, relea
14460 73 65 20 6f 72 20 72 6f 6c 6c 62 61 63 6b 20 74  se or rollback t
14470 68 65 20 73 61 76 65 70 6f 69 6e 74 20 6e 61 6d  he savepoint nam
14480 65 64 20 62 79 20 70 61 72 61 6d 65 74 65 72 20  ed by parameter 
14490 50 34 2c 20 64 65 70 65 6e 64 69 6e 67 0a 2a 2a  P4, depending.**
144a0 20 6f 6e 20 74 68 65 20 76 61 6c 75 65 20 6f 66   on the value of
144b0 20 50 31 2e 20 54 6f 20 6f 70 65 6e 20 61 20 6e   P1. To open a n
144c0 65 77 20 73 61 76 65 70 6f 69 6e 74 2c 20 50 31  ew savepoint, P1
144d0 3d 3d 30 2e 20 54 6f 20 72 65 6c 65 61 73 65 20  ==0. To release 
144e0 28 63 6f 6d 6d 69 74 29 20 61 6e 0a 2a 2a 20 65  (commit) an.** e
144f0 78 69 73 74 69 6e 67 20 73 61 76 65 70 6f 69 6e  xisting savepoin
14500 74 2c 20 50 31 3d 3d 31 2c 20 6f 72 20 74 6f 20  t, P1==1, or to 
14510 72 6f 6c 6c 62 61 63 6b 20 61 6e 20 65 78 69 73  rollback an exis
14520 74 69 6e 67 20 73 61 76 65 70 6f 69 6e 74 20 50  ting savepoint P
14530 31 3d 3d 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  1==2..*/.case OP
14540 5f 53 61 76 65 70 6f 69 6e 74 3a 20 7b 0a 20 20  _Savepoint: {.  
14550 69 6e 74 20 70 31 3b 20 20 20 20 20 20 20 20 20  int p1;         
14560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14570 2f 2a 20 56 61 6c 75 65 20 6f 66 20 50 31 20 6f  /* Value of P1 o
14580 70 65 72 61 6e 64 20 2a 2f 0a 20 20 63 68 61 72  perand */.  char
14590 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20   *zName;        
145a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
145b0 61 6d 65 20 6f 66 20 73 61 76 65 70 6f 69 6e 74  ame of savepoint
145c0 20 2a 2f 0a 20 20 69 6e 74 20 6e 4e 61 6d 65 3b   */.  int nName;
145d0 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 4e  .  Savepoint *pN
145e0 65 77 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20  ew;.  Savepoint 
145f0 2a 70 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 53  *pSavepoint;.  S
14600 61 76 65 70 6f 69 6e 74 20 2a 70 54 6d 70 3b 0a  avepoint *pTmp;.
14610 20 20 69 6e 74 20 69 53 61 76 65 70 6f 69 6e 74    int iSavepoint
14620 3b 0a 20 20 69 6e 74 20 69 69 3b 0a 0a 20 20 70  ;.  int ii;..  p
14630 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 7a  1 = pOp->p1;.  z
14640 4e 61 6d 65 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a  Name = pOp->p4.z
14650 3b 0a 0a 20 20 2f 2a 20 41 73 73 65 72 74 20 74  ;..  /* Assert t
14660 68 61 74 20 74 68 65 20 70 31 20 70 61 72 61 6d  hat the p1 param
14670 65 74 65 72 20 69 73 20 76 61 6c 69 64 2e 20 41  eter is valid. A
14680 6c 73 6f 20 74 68 61 74 20 69 66 20 74 68 65 72  lso that if ther
14690 65 20 69 73 20 6e 6f 20 6f 70 65 6e 0a 20 20 2a  e is no open.  *
146a0 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74  * transaction, t
146b0 68 65 6e 20 74 68 65 72 65 20 63 61 6e 6e 6f 74  hen there cannot
146c0 20 62 65 20 61 6e 79 20 73 61 76 65 70 6f 69 6e   be any savepoin
146d0 74 73 2e 20 0a 20 20 2a 2f 0a 20 20 61 73 73 65  ts. .  */.  asse
146e0 72 74 28 20 64 62 2d 3e 70 53 61 76 65 70 6f 69  rt( db->pSavepoi
146f0 6e 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 61 75 74  nt==0 || db->aut
14700 6f 43 6f 6d 6d 69 74 3d 3d 30 20 29 3b 0a 20 20  oCommit==0 );.  
14710 61 73 73 65 72 74 28 20 70 31 3d 3d 53 41 56 45  assert( p1==SAVE
14720 50 4f 49 4e 54 5f 42 45 47 49 4e 7c 7c 70 31 3d  POINT_BEGIN||p1=
14730 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41  =SAVEPOINT_RELEA
14740 53 45 7c 7c 70 31 3d 3d 53 41 56 45 50 4f 49 4e  SE||p1==SAVEPOIN
14750 54 5f 52 4f 4c 4c 42 41 43 4b 20 29 3b 0a 20 20  T_ROLLBACK );.  
14760 61 73 73 65 72 74 28 20 64 62 2d 3e 70 53 61 76  assert( db->pSav
14770 65 70 6f 69 6e 74 20 7c 7c 20 64 62 2d 3e 69 73  epoint || db->is
14780 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70  TransactionSavep
14790 6f 69 6e 74 3d 3d 30 20 29 3b 0a 20 20 61 73 73  oint==0 );.  ass
147a0 65 72 74 28 20 63 68 65 63 6b 53 61 76 65 70 6f  ert( checkSavepo
147b0 69 6e 74 43 6f 75 6e 74 28 64 62 29 20 29 3b 0a  intCount(db) );.
147c0 0a 20 20 69 66 28 20 70 31 3d 3d 53 41 56 45 50  .  if( p1==SAVEP
147d0 4f 49 4e 54 5f 42 45 47 49 4e 20 29 7b 0a 20 20  OINT_BEGIN ){.  
147e0 20 20 69 66 28 20 64 62 2d 3e 77 72 69 74 65 56    if( db->writeV
147f0 64 62 65 43 6e 74 3e 30 20 29 7b 0a 20 20 20 20  dbeCnt>0 ){.    
14800 20 20 2f 2a 20 41 20 6e 65 77 20 73 61 76 65 70    /* A new savep
14810 6f 69 6e 74 20 63 61 6e 6e 6f 74 20 62 65 20 63  oint cannot be c
14820 72 65 61 74 65 64 20 69 66 20 74 68 65 72 65 20  reated if there 
14830 61 72 65 20 61 63 74 69 76 65 20 77 72 69 74 65  are active write
14840 20 0a 20 20 20 20 20 20 2a 2a 20 73 74 61 74 65   .      ** state
14850 6d 65 6e 74 73 20 28 69 2e 65 2e 20 6f 70 65 6e  ments (i.e. open
14860 20 72 65 61 64 2f 77 72 69 74 65 20 69 6e 63 72   read/write incr
14870 65 6d 65 6e 74 61 6c 20 62 6c 6f 62 20 68 61 6e  emental blob han
14880 64 6c 65 73 29 2e 0a 20 20 20 20 20 20 2a 2f 0a  dles)..      */.
14890 20 20 20 20 20 20 73 71 6c 69 74 65 33 53 65 74        sqlite3Set
148a0 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d  String(&p->zErrM
148b0 73 67 2c 20 64 62 2c 20 22 63 61 6e 6e 6f 74 20  sg, db, "cannot 
148c0 6f 70 65 6e 20 73 61 76 65 70 6f 69 6e 74 20 2d  open savepoint -
148d0 20 22 0a 20 20 20 20 20 20 20 20 22 53 51 4c 20   ".        "SQL 
148e0 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 70 72  statements in pr
148f0 6f 67 72 65 73 73 22 29 3b 0a 20 20 20 20 20 20  ogress");.      
14900 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59  rc = SQLITE_BUSY
14910 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
14920 20 20 20 6e 4e 61 6d 65 20 3d 20 73 71 6c 69 74     nName = sqlit
14930 65 33 53 74 72 6c 65 6e 33 30 28 7a 4e 61 6d 65  e3Strlen30(zName
14940 29 3b 0a 0a 20 20 20 20 20 20 2f 2a 20 54 68 69  );..      /* Thi
14950 73 20 63 61 6c 6c 20 69 73 20 4f 6b 20 65 76 65  s call is Ok eve
14960 6e 20 69 66 20 74 68 69 73 20 73 61 76 65 70 6f  n if this savepo
14970 69 6e 74 20 69 73 20 61 63 74 75 61 6c 6c 79 20  int is actually 
14980 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 20 20  a transaction.  
14990 20 20 20 20 2a 2a 20 73 61 76 65 70 6f 69 6e 74      ** savepoint
149a0 20 28 61 6e 64 20 74 68 65 72 65 66 6f 72 65 20   (and therefore 
149b0 73 68 6f 75 6c 64 20 6e 6f 74 20 70 72 6f 6d 70  should not promp
149c0 74 20 78 53 61 76 65 70 6f 69 6e 74 28 29 29 20  t xSavepoint()) 
149d0 63 61 6c 6c 62 61 63 6b 73 2e 0a 20 20 20 20 20  callbacks..     
149e0 20 2a 2a 20 49 66 20 74 68 69 73 20 69 73 20 61   ** If this is a
149f0 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61 76   transaction sav
14a00 65 70 6f 69 6e 74 20 62 65 69 6e 67 20 6f 70 65  epoint being ope
14a10 6e 65 64 2c 20 69 74 20 69 73 20 67 75 61 72 61  ned, it is guara
14a20 6e 74 65 65 64 0a 20 20 20 20 20 20 2a 2a 20 74  nteed.      ** t
14a30 68 61 74 20 74 68 65 20 64 62 2d 3e 61 56 54 72  hat the db->aVTr
14a40 61 6e 73 5b 5d 20 61 72 72 61 79 20 69 73 20 65  ans[] array is e
14a50 6d 70 74 79 2e 20 20 2a 2f 0a 20 20 20 20 20 20  mpty.  */.      
14a60 61 73 73 65 72 74 28 20 64 62 2d 3e 61 75 74 6f  assert( db->auto
14a70 43 6f 6d 6d 69 74 3d 3d 30 20 7c 7c 20 64 62 2d  Commit==0 || db-
14a80 3e 6e 56 54 72 61 6e 73 3d 3d 30 20 29 3b 0a 20  >nVTrans==0 );. 
14a90 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
14aa0 33 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28 64  3VtabSavepoint(d
14ab0 62 2c 20 53 41 56 45 50 4f 49 4e 54 5f 42 45 47  b, SAVEPOINT_BEG
14ac0 49 4e 2c 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e  IN, p->iStatemen
14ad0 74 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63  t);.      if( rc
14ae0 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f  !=SQLITE_OK ) go
14af0 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
14b00 65 72 72 6f 72 3b 0a 0a 20 20 20 20 20 20 2f 2a  error;..      /*
14b10 20 43 72 65 61 74 65 20 61 20 6e 65 77 20 73 61   Create a new sa
14b20 76 65 70 6f 69 6e 74 20 73 74 72 75 63 74 75 72  vepoint structur
14b30 65 2e 20 2a 2f 0a 20 20 20 20 20 20 70 4e 65 77  e. */.      pNew
14b40 20 3d 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c   = sqlite3DbMall
14b50 6f 63 52 61 77 28 64 62 2c 20 73 69 7a 65 6f 66  ocRaw(db, sizeof
14b60 28 53 61 76 65 70 6f 69 6e 74 29 2b 6e 4e 61 6d  (Savepoint)+nNam
14b70 65 2b 31 29 3b 0a 20 20 20 20 20 20 69 66 28 20  e+1);.      if( 
14b80 70 4e 65 77 20 29 7b 0a 20 20 20 20 20 20 20 20  pNew ){.        
14b90 70 4e 65 77 2d 3e 7a 4e 61 6d 65 20 3d 20 28 63  pNew->zName = (c
14ba0 68 61 72 20 2a 29 26 70 4e 65 77 5b 31 5d 3b 0a  har *)&pNew[1];.
14bb0 20 20 20 20 20 20 20 20 6d 65 6d 63 70 79 28 70          memcpy(p
14bc0 4e 65 77 2d 3e 7a 4e 61 6d 65 2c 20 7a 4e 61 6d  New->zName, zNam
14bd0 65 2c 20 6e 4e 61 6d 65 2b 31 29 3b 0a 20 20 20  e, nName+1);.   
14be0 20 0a 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20   .        /* If 
14bf0 74 68 65 72 65 20 69 73 20 6e 6f 20 6f 70 65 6e  there is no open
14c00 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68   transaction, th
14c10 65 6e 20 6d 61 72 6b 20 74 68 69 73 20 61 73 20  en mark this as 
14c20 61 20 73 70 65 63 69 61 6c 0a 20 20 20 20 20 20  a special.      
14c30 20 20 2a 2a 20 22 74 72 61 6e 73 61 63 74 69 6f    ** "transactio
14c40 6e 20 73 61 76 65 70 6f 69 6e 74 22 2e 20 2a 2f  n savepoint". */
14c50 0a 20 20 20 20 20 20 20 20 69 66 28 20 64 62 2d  .        if( db-
14c60 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20  >autoCommit ){. 
14c70 20 20 20 20 20 20 20 20 20 64 62 2d 3e 61 75 74           db->aut
14c80 6f 43 6f 6d 6d 69 74 20 3d 20 30 3b 0a 20 20 20  oCommit = 0;.   
14c90 20 20 20 20 20 20 20 64 62 2d 3e 69 73 54 72 61         db->isTra
14ca0 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e  nsactionSavepoin
14cb0 74 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 7d  t = 1;.        }
14cc0 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20  else{.          
14cd0 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 2b 2b  db->nSavepoint++
14ce0 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
14cf0 0a 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 6e 6b  .        /* Link
14d00 20 74 68 65 20 6e 65 77 20 73 61 76 65 70 6f 69   the new savepoi
14d10 6e 74 20 69 6e 74 6f 20 74 68 65 20 64 61 74 61  nt into the data
14d20 62 61 73 65 20 68 61 6e 64 6c 65 27 73 20 6c 69  base handle's li
14d30 73 74 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 70  st. */.        p
14d40 4e 65 77 2d 3e 70 4e 65 78 74 20 3d 20 64 62 2d  New->pNext = db-
14d50 3e 70 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 20  >pSavepoint;.   
14d60 20 20 20 20 20 64 62 2d 3e 70 53 61 76 65 70 6f       db->pSavepo
14d70 69 6e 74 20 3d 20 70 4e 65 77 3b 0a 20 20 20 20  int = pNew;.    
14d80 20 20 20 20 70 4e 65 77 2d 3e 6e 44 65 66 65 72      pNew->nDefer
14d90 72 65 64 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44  redCons = db->nD
14da0 65 66 65 72 72 65 64 43 6f 6e 73 3b 0a 20 20 20  eferredCons;.   
14db0 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 65 6c     }.    }.  }el
14dc0 73 65 7b 0a 20 20 20 20 69 53 61 76 65 70 6f 69  se{.    iSavepoi
14dd0 6e 74 20 3d 20 30 3b 0a 0a 20 20 20 20 2f 2a 20  nt = 0;..    /* 
14de0 46 69 6e 64 20 74 68 65 20 6e 61 6d 65 64 20 73  Find the named s
14df0 61 76 65 70 6f 69 6e 74 2e 20 49 66 20 74 68 65  avepoint. If the
14e00 72 65 20 69 73 20 6e 6f 20 73 75 63 68 20 73 61  re is no such sa
14e10 76 65 70 6f 69 6e 74 2c 20 74 68 65 6e 20 61 6e  vepoint, then an
14e20 0a 20 20 20 20 2a 2a 20 61 6e 20 65 72 72 6f 72  .    ** an error
14e30 20 69 73 20 72 65 74 75 72 6e 65 64 20 74 6f 20   is returned to 
14e40 74 68 65 20 75 73 65 72 2e 20 20 2a 2f 0a 20 20  the user.  */.  
14e50 20 20 66 6f 72 28 0a 20 20 20 20 20 20 70 53 61    for(.      pSa
14e60 76 65 70 6f 69 6e 74 20 3d 20 64 62 2d 3e 70 53  vepoint = db->pS
14e70 61 76 65 70 6f 69 6e 74 3b 20 0a 20 20 20 20 20  avepoint; .     
14e80 20 70 53 61 76 65 70 6f 69 6e 74 20 26 26 20 73   pSavepoint && s
14e90 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 70 53  qlite3StrICmp(pS
14ea0 61 76 65 70 6f 69 6e 74 2d 3e 7a 4e 61 6d 65 2c  avepoint->zName,
14eb0 20 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 70   zName);.      p
14ec0 53 61 76 65 70 6f 69 6e 74 20 3d 20 70 53 61 76  Savepoint = pSav
14ed0 65 70 6f 69 6e 74 2d 3e 70 4e 65 78 74 0a 20 20  epoint->pNext.  
14ee0 20 20 29 7b 0a 20 20 20 20 20 20 69 53 61 76 65    ){.      iSave
14ef0 70 6f 69 6e 74 2b 2b 3b 0a 20 20 20 20 7d 0a 20  point++;.    }. 
14f00 20 20 20 69 66 28 20 21 70 53 61 76 65 70 6f 69     if( !pSavepoi
14f10 6e 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  nt ){.      sqli
14f20 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d  te3SetString(&p-
14f30 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 6e  >zErrMsg, db, "n
14f40 6f 20 73 75 63 68 20 73 61 76 65 70 6f 69 6e 74  o such savepoint
14f50 3a 20 25 73 22 2c 20 7a 4e 61 6d 65 29 3b 0a 20  : %s", zName);. 
14f60 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
14f70 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d 65 6c 73  _ERROR;.    }els
14f80 65 20 69 66 28 20 0a 20 20 20 20 20 20 20 20 64  e if( .        d
14f90 62 2d 3e 77 72 69 74 65 56 64 62 65 43 6e 74 3e  b->writeVdbeCnt>
14fa0 30 20 7c 7c 20 28 70 31 3d 3d 53 41 56 45 50 4f  0 || (p1==SAVEPO
14fb0 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 26 26 20  INT_ROLLBACK && 
14fc0 64 62 2d 3e 61 63 74 69 76 65 56 64 62 65 43 6e  db->activeVdbeCn
14fd0 74 3e 31 29 20 0a 20 20 20 20 29 7b 0a 20 20 20  t>1) .    ){.   
14fe0 20 20 20 2f 2a 20 49 74 20 69 73 20 6e 6f 74 20     /* It is not 
14ff0 70 6f 73 73 69 62 6c 65 20 74 6f 20 72 65 6c 65  possible to rele
15000 61 73 65 20 28 63 6f 6d 6d 69 74 29 20 61 20 73  ase (commit) a s
15010 61 76 65 70 6f 69 6e 74 20 69 66 20 74 68 65 72  avepoint if ther
15020 65 20 61 72 65 20 0a 20 20 20 20 20 20 2a 2a 20  e are .      ** 
15030 61 63 74 69 76 65 20 77 72 69 74 65 20 73 74 61  active write sta
15040 74 65 6d 65 6e 74 73 2e 20 49 74 20 69 73 20 6e  tements. It is n
15050 6f 74 20 70 6f 73 73 69 62 6c 65 20 74 6f 20 72  ot possible to r
15060 6f 6c 6c 62 61 63 6b 20 61 20 73 61 76 65 70 6f  ollback a savepo
15070 69 6e 74 0a 20 20 20 20 20 20 2a 2a 20 69 66 20  int.      ** if 
15080 74 68 65 72 65 20 61 72 65 20 61 6e 79 20 61 63  there are any ac
15090 74 69 76 65 20 73 74 61 74 65 6d 65 6e 74 73 20  tive statements 
150a0 61 74 20 61 6c 6c 2e 0a 20 20 20 20 20 20 2a 2f  at all..      */
150b0 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 53 65  .      sqlite3Se
150c0 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72  tString(&p->zErr
150d0 4d 73 67 2c 20 64 62 2c 20 0a 20 20 20 20 20 20  Msg, db, .      
150e0 20 20 22 63 61 6e 6e 6f 74 20 25 73 20 73 61 76    "cannot %s sav
150f0 65 70 6f 69 6e 74 20 2d 20 53 51 4c 20 73 74 61  epoint - SQL sta
15100 74 65 6d 65 6e 74 73 20 69 6e 20 70 72 6f 67 72  tements in progr
15110 65 73 73 22 2c 0a 20 20 20 20 20 20 20 20 28 70  ess",.        (p
15120 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c  1==SAVEPOINT_ROL
15130 4c 42 41 43 4b 20 3f 20 22 72 6f 6c 6c 62 61 63  LBACK ? "rollbac
15140 6b 22 3a 20 22 72 65 6c 65 61 73 65 22 29 0a 20  k": "release"). 
15150 20 20 20 20 20 29 3b 0a 20 20 20 20 20 20 72 63       );.      rc
15160 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a   = SQLITE_BUSY;.
15170 20 20 20 20 7d 65 6c 73 65 7b 0a 0a 20 20 20 20      }else{..    
15180 20 20 2f 2a 20 44 65 74 65 72 6d 69 6e 65 20 77    /* Determine w
15190 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68  hether or not th
151a0 69 73 20 69 73 20 61 20 74 72 61 6e 73 61 63 74  is is a transact
151b0 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 2e 20 49  ion savepoint. I
151c0 66 20 73 6f 2c 0a 20 20 20 20 20 20 2a 2a 20 61  f so,.      ** a
151d0 6e 64 20 74 68 69 73 20 69 73 20 61 20 52 45 4c  nd this is a REL
151e0 45 41 53 45 20 63 6f 6d 6d 61 6e 64 2c 20 74 68  EASE command, th
151f0 65 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 74  en the current t
15200 72 61 6e 73 61 63 74 69 6f 6e 20 0a 20 20 20 20  ransaction .    
15210 20 20 2a 2a 20 69 73 20 63 6f 6d 6d 69 74 74 65    ** is committe
15220 64 2e 20 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20  d. .      */.   
15230 20 20 20 69 6e 74 20 69 73 54 72 61 6e 73 61 63     int isTransac
15240 74 69 6f 6e 20 3d 20 70 53 61 76 65 70 6f 69 6e  tion = pSavepoin
15250 74 2d 3e 70 4e 65 78 74 3d 3d 30 20 26 26 20 64  t->pNext==0 && d
15260 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e  b->isTransaction
15270 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 20 20 20  Savepoint;.     
15280 20 69 66 28 20 69 73 54 72 61 6e 73 61 63 74 69   if( isTransacti
15290 6f 6e 20 26 26 20 70 31 3d 3d 53 41 56 45 50 4f  on && p1==SAVEPO
152a0 49 4e 54 5f 52 45 4c 45 41 53 45 20 29 7b 0a 20  INT_RELEASE ){. 
152b0 20 20 20 20 20 20 20 69 66 28 20 28 72 63 20 3d         if( (rc =
152c0 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 65 63   sqlite3VdbeChec
152d0 6b 46 6b 28 70 2c 20 31 29 29 21 3d 53 51 4c 49  kFk(p, 1))!=SQLI
152e0 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20  TE_OK ){.       
152f0 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74     goto vdbe_ret
15300 75 72 6e 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  urn;.        }. 
15310 20 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43         db->autoC
15320 6f 6d 6d 69 74 20 3d 20 31 3b 0a 20 20 20 20 20  ommit = 1;.     
15330 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64     if( sqlite3Vd
15340 62 65 48 61 6c 74 28 70 29 3d 3d 53 51 4c 49 54  beHalt(p)==SQLIT
15350 45 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 20 20  E_BUSY ){.      
15360 20 20 20 20 70 2d 3e 70 63 20 3d 20 70 63 3b 0a      p->pc = pc;.
15370 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 61 75            db->au
15380 74 6f 43 6f 6d 6d 69 74 20 3d 20 30 3b 0a 20 20  toCommit = 0;.  
15390 20 20 20 20 20 20 20 20 70 2d 3e 72 63 20 3d 20          p->rc = 
153a0 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59  rc = SQLITE_BUSY
153b0 3b 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f  ;.          goto
153c0 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20   vdbe_return;.  
153d0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
153e0 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f  db->isTransactio
153f0 6e 53 61 76 65 70 6f 69 6e 74 20 3d 20 30 3b 0a  nSavepoint = 0;.
15400 20 20 20 20 20 20 20 20 72 63 20 3d 20 70 2d 3e          rc = p->
15410 72 63 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  rc;.      }else{
15420 0a 20 20 20 20 20 20 20 20 69 53 61 76 65 70 6f  .        iSavepo
15430 69 6e 74 20 3d 20 64 62 2d 3e 6e 53 61 76 65 70  int = db->nSavep
15440 6f 69 6e 74 20 2d 20 69 53 61 76 65 70 6f 69 6e  oint - iSavepoin
15450 74 20 2d 20 31 3b 0a 20 20 20 20 20 20 20 20 66  t - 1;.        f
15460 6f 72 28 69 69 3d 30 3b 20 69 69 3c 64 62 2d 3e  or(ii=0; ii<db->
15470 6e 44 62 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20  nDb; ii++){.    
15480 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
15490 65 33 42 74 72 65 65 53 61 76 65 70 6f 69 6e 74  e3BtreeSavepoint
154a0 28 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74  (db->aDb[ii].pBt
154b0 2c 20 70 31 2c 20 69 53 61 76 65 70 6f 69 6e 74  , p1, iSavepoint
154c0 29 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28  );.          if(
154d0 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
154e0 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 67 6f  {.            go
154f0 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
15500 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 20  error;.         
15510 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20   }.        }.   
15520 20 20 20 20 20 69 66 28 20 70 31 3d 3d 53 41 56       if( p1==SAV
15530 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20  EPOINT_ROLLBACK 
15540 26 26 20 28 64 62 2d 3e 66 6c 61 67 73 26 53 51  && (db->flags&SQ
15550 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68 61 6e 67  LITE_InternChang
15560 65 73 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20  es)!=0 ){.      
15570 20 20 20 20 73 71 6c 69 74 65 33 45 78 70 69 72      sqlite3Expir
15580 65 50 72 65 70 61 72 65 64 53 74 61 74 65 6d 65  ePreparedStateme
15590 6e 74 73 28 64 62 29 3b 0a 20 20 20 20 20 20 20  nts(db);.       
155a0 20 20 20 73 71 6c 69 74 65 33 52 65 73 65 74 49     sqlite3ResetI
155b0 6e 74 65 72 6e 61 6c 53 63 68 65 6d 61 28 64 62  nternalSchema(db
155c0 2c 20 2d 31 29 3b 0a 20 20 20 20 20 20 20 20 20  , -1);.         
155d0 20 64 62 2d 3e 66 6c 61 67 73 20 3d 20 28 64 62   db->flags = (db
155e0 2d 3e 66 6c 61 67 73 20 7c 20 53 51 4c 49 54 45  ->flags | SQLITE
155f0 5f 49 6e 74 65 72 6e 43 68 61 6e 67 65 73 29 3b  _InternChanges);
15600 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
15610 20 7d 0a 20 20 0a 20 20 20 20 20 20 2f 2a 20 52   }.  .      /* R
15620 65 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68 65  egardless of whe
15630 74 68 65 72 20 74 68 69 73 20 69 73 20 61 20 52  ther this is a R
15640 45 4c 45 41 53 45 20 6f 72 20 52 4f 4c 4c 42 41  ELEASE or ROLLBA
15650 43 4b 2c 20 64 65 73 74 72 6f 79 20 61 6c 6c 20  CK, destroy all 
15660 0a 20 20 20 20 20 20 2a 2a 20 73 61 76 65 70 6f  .      ** savepo
15670 69 6e 74 73 20 6e 65 73 74 65 64 20 69 6e 73 69  ints nested insi
15680 64 65 20 6f 66 20 74 68 65 20 73 61 76 65 70 6f  de of the savepo
15690 69 6e 74 20 62 65 69 6e 67 20 6f 70 65 72 61 74  int being operat
156a0 65 64 20 6f 6e 2e 20 2a 2f 0a 20 20 20 20 20 20  ed on. */.      
156b0 77 68 69 6c 65 28 20 64 62 2d 3e 70 53 61 76 65  while( db->pSave
156c0 70 6f 69 6e 74 21 3d 70 53 61 76 65 70 6f 69 6e  point!=pSavepoin
156d0 74 20 29 7b 0a 20 20 20 20 20 20 20 20 70 54 6d  t ){.        pTm
156e0 70 20 3d 20 64 62 2d 3e 70 53 61 76 65 70 6f 69  p = db->pSavepoi
156f0 6e 74 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e  nt;.        db->
15700 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 70 54 6d  pSavepoint = pTm
15710 70 2d 3e 70 4e 65 78 74 3b 0a 20 20 20 20 20 20  p->pNext;.      
15720 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28    sqlite3DbFree(
15730 64 62 2c 20 70 54 6d 70 29 3b 0a 20 20 20 20 20  db, pTmp);.     
15740 20 20 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e     db->nSavepoin
15750 74 2d 2d 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20  t--;.      }..  
15760 20 20 20 20 2f 2a 20 49 66 20 69 74 20 69 73 20      /* If it is 
15770 61 20 52 45 4c 45 41 53 45 2c 20 74 68 65 6e 20  a RELEASE, then 
15780 64 65 73 74 72 6f 79 20 74 68 65 20 73 61 76 65  destroy the save
15790 70 6f 69 6e 74 20 62 65 69 6e 67 20 6f 70 65 72  point being oper
157a0 61 74 65 64 20 6f 6e 20 0a 20 20 20 20 20 20 2a  ated on .      *
157b0 2a 20 74 6f 6f 2e 20 49 66 20 69 74 20 69 73 20  * too. If it is 
157c0 61 20 52 4f 4c 4c 42 41 43 4b 20 54 4f 2c 20 74  a ROLLBACK TO, t
157d0 68 65 6e 20 73 65 74 20 74 68 65 20 6e 75 6d 62  hen set the numb
157e0 65 72 20 6f 66 20 64 65 66 65 72 72 65 64 20 0a  er of deferred .
157f0 20 20 20 20 20 20 2a 2a 20 63 6f 6e 73 74 72 61        ** constra
15800 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 73 20 70  int violations p
15810 72 65 73 65 6e 74 20 69 6e 20 74 68 65 20 64 61  resent in the da
15820 74 61 62 61 73 65 20 74 6f 20 74 68 65 20 76 61  tabase to the va
15830 6c 75 65 20 73 74 6f 72 65 64 0a 20 20 20 20 20  lue stored.     
15840 20 2a 2a 20 77 68 65 6e 20 74 68 65 20 73 61 76   ** when the sav
15850 65 70 6f 69 6e 74 20 77 61 73 20 63 72 65 61 74  epoint was creat
15860 65 64 2e 20 20 2a 2f 0a 20 20 20 20 20 20 69 66  ed.  */.      if
15870 28 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f  ( p1==SAVEPOINT_
15880 52 45 4c 45 41 53 45 20 29 7b 0a 20 20 20 20 20  RELEASE ){.     
15890 20 20 20 61 73 73 65 72 74 28 20 70 53 61 76 65     assert( pSave
158a0 70 6f 69 6e 74 3d 3d 64 62 2d 3e 70 53 61 76 65  point==db->pSave
158b0 70 6f 69 6e 74 20 29 3b 0a 20 20 20 20 20 20 20  point );.       
158c0 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20   db->pSavepoint 
158d0 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 70 4e  = pSavepoint->pN
158e0 65 78 74 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  ext;.        sql
158f0 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 70  ite3DbFree(db, p
15900 53 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20  Savepoint);.    
15910 20 20 20 20 69 66 28 20 21 69 73 54 72 61 6e 73      if( !isTrans
15920 61 63 74 69 6f 6e 20 29 7b 0a 20 20 20 20 20 20  action ){.      
15930 20 20 20 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69      db->nSavepoi
15940 6e 74 2d 2d 3b 0a 20 20 20 20 20 20 20 20 7d 0a  nt--;.        }.
15950 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
15960 20 20 20 20 20 64 62 2d 3e 6e 44 65 66 65 72 72       db->nDeferr
15970 65 64 43 6f 6e 73 20 3d 20 70 53 61 76 65 70 6f  edCons = pSavepo
15980 69 6e 74 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f  int->nDeferredCo
15990 6e 73 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20  ns;.      }..   
159a0 20 20 20 69 66 28 20 21 69 73 54 72 61 6e 73 61     if( !isTransa
159b0 63 74 69 6f 6e 20 29 7b 0a 20 20 20 20 20 20 20  ction ){.       
159c0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61   rc = sqlite3Vta
159d0 62 53 61 76 65 70 6f 69 6e 74 28 64 62 2c 20 70  bSavepoint(db, p
159e0 31 2c 20 69 53 61 76 65 70 6f 69 6e 74 29 3b 0a  1, iSavepoint);.
159f0 20 20 20 20 20 20 20 20 69 66 28 20 72 63 21 3d          if( rc!=
15a00 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f  SQLITE_OK ) goto
15a10 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
15a20 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  ror;.      }.   
15a30 20 7d 0a 20 20 7d 0a 0a 20 20 62 72 65 61 6b 3b   }.  }..  break;
15a40 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41  .}../* Opcode: A
15a50 75 74 6f 43 6f 6d 6d 69 74 20 50 31 20 50 32 20  utoCommit P1 P2 
15a60 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 65 74 20  * * *.**.** Set 
15a70 74 68 65 20 64 61 74 61 62 61 73 65 20 61 75 74  the database aut
15a80 6f 2d 63 6f 6d 6d 69 74 20 66 6c 61 67 20 74 6f  o-commit flag to
15a90 20 50 31 20 28 31 20 6f 72 20 30 29 2e 20 49 66   P1 (1 or 0). If
15aa0 20 50 32 20 69 73 20 74 72 75 65 2c 20 72 6f 6c   P2 is true, rol
15ab0 6c 0a 2a 2a 20 62 61 63 6b 20 61 6e 79 20 63 75  l.** back any cu
15ac0 72 72 65 6e 74 6c 79 20 61 63 74 69 76 65 20 62  rrently active b
15ad0 74 72 65 65 20 74 72 61 6e 73 61 63 74 69 6f 6e  tree transaction
15ae0 73 2e 20 49 66 20 74 68 65 72 65 20 61 72 65 20  s. If there are 
15af0 61 6e 79 20 61 63 74 69 76 65 0a 2a 2a 20 56 4d  any active.** VM
15b00 73 20 28 61 70 61 72 74 20 66 72 6f 6d 20 74 68  s (apart from th
15b10 69 73 20 6f 6e 65 29 2c 20 74 68 65 6e 20 61 20  is one), then a 
15b20 52 4f 4c 4c 42 41 43 4b 20 66 61 69 6c 73 2e 20  ROLLBACK fails. 
15b30 20 41 20 43 4f 4d 4d 49 54 20 66 61 69 6c 73 20   A COMMIT fails 
15b40 69 66 0a 2a 2a 20 74 68 65 72 65 20 61 72 65 20  if.** there are 
15b50 61 63 74 69 76 65 20 77 72 69 74 69 6e 67 20 56  active writing V
15b60 4d 73 20 6f 72 20 61 63 74 69 76 65 20 56 4d 73  Ms or active VMs
15b70 20 74 68 61 74 20 75 73 65 20 73 68 61 72 65 64   that use shared
15b80 20 63 61 63 68 65 2e 0a 2a 2a 0a 2a 2a 20 54 68   cache..**.** Th
15b90 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 63  is instruction c
15ba0 61 75 73 65 73 20 74 68 65 20 56 4d 20 74 6f 20  auses the VM to 
15bb0 68 61 6c 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  halt..*/.case OP
15bc0 5f 41 75 74 6f 43 6f 6d 6d 69 74 3a 20 7b 0a 20  _AutoCommit: {. 
15bd0 20 69 6e 74 20 64 65 73 69 72 65 64 41 75 74 6f   int desiredAuto
15be0 43 6f 6d 6d 69 74 3b 0a 20 20 69 6e 74 20 69 52  Commit;.  int iR
15bf0 6f 6c 6c 62 61 63 6b 3b 0a 20 20 69 6e 74 20 74  ollback;.  int t
15c00 75 72 6e 4f 6e 41 43 3b 0a 0a 20 20 64 65 73 69  urnOnAC;..  desi
15c10 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 20 3d 20  redAutoCommit = 
15c20 70 4f 70 2d 3e 70 31 3b 0a 20 20 69 52 6f 6c 6c  pOp->p1;.  iRoll
15c30 62 61 63 6b 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a  back = pOp->p2;.
15c40 20 20 74 75 72 6e 4f 6e 41 43 20 3d 20 64 65 73    turnOnAC = des
15c50 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 20 26  iredAutoCommit &
15c60 26 20 21 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69  & !db->autoCommi
15c70 74 3b 0a 20 20 61 73 73 65 72 74 28 20 64 65 73  t;.  assert( des
15c80 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d  iredAutoCommit==
15c90 31 20 7c 7c 20 64 65 73 69 72 65 64 41 75 74 6f  1 || desiredAuto
15ca0 43 6f 6d 6d 69 74 3d 3d 30 20 29 3b 0a 20 20 61  Commit==0 );.  a
15cb0 73 73 65 72 74 28 20 64 65 73 69 72 65 64 41 75  ssert( desiredAu
15cc0 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20 7c 7c 20 69  toCommit==1 || i
15cd0 52 6f 6c 6c 62 61 63 6b 3d 3d 30 20 29 3b 0a 20  Rollback==0 );. 
15ce0 20 61 73 73 65 72 74 28 20 64 62 2d 3e 61 63 74   assert( db->act
15cf0 69 76 65 56 64 62 65 43 6e 74 3e 30 20 29 3b 20  iveVdbeCnt>0 ); 
15d00 20 2f 2a 20 41 74 20 6c 65 61 73 74 20 74 68 69   /* At least thi
15d10 73 20 6f 6e 65 20 56 4d 20 69 73 20 61 63 74 69  s one VM is acti
15d20 76 65 20 2a 2f 0a 0a 20 20 69 66 28 20 74 75 72  ve */..  if( tur
15d30 6e 4f 6e 41 43 20 26 26 20 69 52 6f 6c 6c 62 61  nOnAC && iRollba
15d40 63 6b 20 26 26 20 64 62 2d 3e 61 63 74 69 76 65  ck && db->active
15d50 56 64 62 65 43 6e 74 3e 31 20 29 7b 0a 20 20 20  VdbeCnt>1 ){.   
15d60 20 2f 2a 20 49 66 20 74 68 69 73 20 69 6e 73 74   /* If this inst
15d70 72 75 63 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e  ruction implemen
15d80 74 73 20 61 20 52 4f 4c 4c 42 41 43 4b 20 61 6e  ts a ROLLBACK an
15d90 64 20 6f 74 68 65 72 20 56 4d 73 20 61 72 65 0a  d other VMs are.
15da0 20 20 20 20 2a 2a 20 73 74 69 6c 6c 20 72 75 6e      ** still run
15db0 6e 69 6e 67 2c 20 61 6e 64 20 61 20 74 72 61 6e  ning, and a tran
15dc0 73 61 63 74 69 6f 6e 20 69 73 20 61 63 74 69 76  saction is activ
15dd0 65 2c 20 72 65 74 75 72 6e 20 61 6e 20 65 72 72  e, return an err
15de0 6f 72 20 69 6e 64 69 63 61 74 69 6e 67 0a 20 20  or indicating.  
15df0 20 20 2a 2a 20 74 68 61 74 20 74 68 65 20 6f 74    ** that the ot
15e00 68 65 72 20 56 4d 73 20 6d 75 73 74 20 63 6f 6d  her VMs must com
15e10 70 6c 65 74 65 20 66 69 72 73 74 2e 20 0a 20 20  plete first. .  
15e20 20 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33    */.    sqlite3
15e30 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45  SetString(&p->zE
15e40 72 72 4d 73 67 2c 20 64 62 2c 20 22 63 61 6e 6e  rrMsg, db, "cann
15e50 6f 74 20 72 6f 6c 6c 62 61 63 6b 20 74 72 61 6e  ot rollback tran
15e60 73 61 63 74 69 6f 6e 20 2d 20 22 0a 20 20 20 20  saction - ".    
15e70 20 20 20 20 22 53 51 4c 20 73 74 61 74 65 6d 65      "SQL stateme
15e80 6e 74 73 20 69 6e 20 70 72 6f 67 72 65 73 73 22  nts in progress"
15e90 29 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49  );.    rc = SQLI
15ea0 54 45 5f 42 55 53 59 3b 0a 20 20 7d 65 6c 73 65  TE_BUSY;.  }else
15eb0 20 69 66 28 20 74 75 72 6e 4f 6e 41 43 20 26 26   if( turnOnAC &&
15ec0 20 21 69 52 6f 6c 6c 62 61 63 6b 20 26 26 20 64   !iRollback && d
15ed0 62 2d 3e 77 72 69 74 65 56 64 62 65 43 6e 74 3e  b->writeVdbeCnt>
15ee0 30 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74  0 ){.    /* If t
15ef0 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
15f00 69 6d 70 6c 65 6d 65 6e 74 73 20 61 20 43 4f 4d  implements a COM
15f10 4d 49 54 20 61 6e 64 20 6f 74 68 65 72 20 56 4d  MIT and other VM
15f20 73 20 61 72 65 20 77 72 69 74 69 6e 67 0a 20 20  s are writing.  
15f30 20 20 2a 2a 20 72 65 74 75 72 6e 20 61 6e 20 65    ** return an e
15f40 72 72 6f 72 20 69 6e 64 69 63 61 74 69 6e 67 20  rror indicating 
15f50 74 68 61 74 20 74 68 65 20 6f 74 68 65 72 20 56  that the other V
15f60 4d 73 20 6d 75 73 74 20 63 6f 6d 70 6c 65 74 65  Ms must complete
15f70 20 66 69 72 73 74 2e 20 0a 20 20 20 20 2a 2f 0a   first. .    */.
15f80 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74      sqlite3SetSt
15f90 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67  ring(&p->zErrMsg
15fa0 2c 20 64 62 2c 20 22 63 61 6e 6e 6f 74 20 63 6f  , db, "cannot co
15fb0 6d 6d 69 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  mmit transaction
15fc0 20 2d 20 22 0a 20 20 20 20 20 20 20 20 22 53 51   - ".        "SQ
15fd0 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20  L statements in 
15fe0 70 72 6f 67 72 65 73 73 22 29 3b 0a 20 20 20 20  progress");.    
15ff0 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59  rc = SQLITE_BUSY
16000 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 64 65  ;.  }else if( de
16010 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 21  siredAutoCommit!
16020 3d 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20  =db->autoCommit 
16030 29 7b 0a 20 20 20 20 69 66 28 20 69 52 6f 6c 6c  ){.    if( iRoll
16040 62 61 63 6b 20 29 7b 0a 20 20 20 20 20 20 61 73  back ){.      as
16050 73 65 72 74 28 20 64 65 73 69 72 65 64 41 75 74  sert( desiredAut
16060 6f 43 6f 6d 6d 69 74 3d 3d 31 20 29 3b 0a 20 20  oCommit==1 );.  
16070 20 20 20 20 73 71 6c 69 74 65 33 52 6f 6c 6c 62      sqlite3Rollb
16080 61 63 6b 41 6c 6c 28 64 62 29 3b 0a 20 20 20 20  ackAll(db);.    
16090 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74    db->autoCommit
160a0 20 3d 20 31 3b 0a 20 20 20 20 7d 65 6c 73 65 20   = 1;.    }else 
160b0 69 66 28 20 28 72 63 20 3d 20 73 71 6c 69 74 65  if( (rc = sqlite
160c0 33 56 64 62 65 43 68 65 63 6b 46 6b 28 70 2c 20  3VdbeCheckFk(p, 
160d0 31 29 29 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29  1))!=SQLITE_OK )
160e0 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62  {.      goto vdb
160f0 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 7d 65  e_return;.    }e
16100 6c 73 65 7b 0a 20 20 20 20 20 20 64 62 2d 3e 61  lse{.      db->a
16110 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 28 75 38 29  utoCommit = (u8)
16120 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69  desiredAutoCommi
16130 74 3b 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c  t;.      if( sql
16140 69 74 65 33 56 64 62 65 48 61 6c 74 28 70 29 3d  ite3VdbeHalt(p)=
16150 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a  =SQLITE_BUSY ){.
16160 20 20 20 20 20 20 20 20 70 2d 3e 70 63 20 3d 20          p->pc = 
16170 70 63 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e  pc;.        db->
16180 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 28 75 38  autoCommit = (u8
16190 29 28 31 2d 64 65 73 69 72 65 64 41 75 74 6f 43  )(1-desiredAutoC
161a0 6f 6d 6d 69 74 29 3b 0a 20 20 20 20 20 20 20 20  ommit);.        
161b0 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53 51 4c  p->rc = rc = SQL
161c0 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 20 20  ITE_BUSY;.      
161d0 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75    goto vdbe_retu
161e0 72 6e 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  rn;.      }.    
161f0 7d 0a 20 20 20 20 61 73 73 65 72 74 28 20 64 62  }.    assert( db
16200 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 3d 3d 30 20  ->nStatement==0 
16210 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 43 6c  );.    sqlite3Cl
16220 6f 73 65 53 61 76 65 70 6f 69 6e 74 73 28 64 62  oseSavepoints(db
16230 29 3b 0a 20 20 20 20 69 66 28 20 70 2d 3e 72 63  );.    if( p->rc
16240 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
16250 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
16260 5f 44 4f 4e 45 3b 0a 20 20 20 20 7d 65 6c 73 65  _DONE;.    }else
16270 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c  {.      rc = SQL
16280 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d  ITE_ERROR;.    }
16290 0a 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72  .    goto vdbe_r
162a0 65 74 75 72 6e 3b 0a 20 20 7d 65 6c 73 65 7b 0a  eturn;.  }else{.
162b0 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74      sqlite3SetSt
162c0 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67  ring(&p->zErrMsg
162d0 2c 20 64 62 2c 0a 20 20 20 20 20 20 20 20 28 21  , db,.        (!
162e0 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69  desiredAutoCommi
162f0 74 29 3f 22 63 61 6e 6e 6f 74 20 73 74 61 72 74  t)?"cannot start
16300 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 77   a transaction w
16310 69 74 68 69 6e 20 61 20 74 72 61 6e 73 61 63 74  ithin a transact
16320 69 6f 6e 22 3a 28 0a 20 20 20 20 20 20 20 20 28  ion":(.        (
16330 69 52 6f 6c 6c 62 61 63 6b 29 3f 22 63 61 6e 6e  iRollback)?"cann
16340 6f 74 20 72 6f 6c 6c 62 61 63 6b 20 2d 20 6e 6f  ot rollback - no
16350 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20   transaction is 
16360 61 63 74 69 76 65 22 3a 0a 20 20 20 20 20 20 20  active":.       
16370 20 20 20 20 20 20 20 20 20 20 20 20 22 63 61 6e              "can
16380 6e 6f 74 20 63 6f 6d 6d 69 74 20 2d 20 6e 6f 20  not commit - no 
16390 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 61  transaction is a
163a0 63 74 69 76 65 22 29 29 3b 0a 20 20 20 20 20 20  ctive"));.      
163b0 20 20 20 0a 20 20 20 20 72 63 20 3d 20 53 51 4c     .    rc = SQL
163c0 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20  ITE_ERROR;.  }. 
163d0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
163e0 63 6f 64 65 3a 20 54 72 61 6e 73 61 63 74 69 6f  code: Transactio
163f0 6e 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  n P1 P2 * * *.**
16400 0a 2a 2a 20 42 65 67 69 6e 20 61 20 74 72 61 6e  .** Begin a tran
16410 73 61 63 74 69 6f 6e 2e 20 20 54 68 65 20 74 72  saction.  The tr
16420 61 6e 73 61 63 74 69 6f 6e 20 65 6e 64 73 20 77  ansaction ends w
16430 68 65 6e 20 61 20 43 6f 6d 6d 69 74 20 6f 72 20  hen a Commit or 
16440 52 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 6f 70 63 6f  Rollback.** opco
16450 64 65 20 69 73 20 65 6e 63 6f 75 6e 74 65 72 65  de is encountere
16460 64 2e 20 20 44 65 70 65 6e 64 69 6e 67 20 6f 6e  d.  Depending on
16470 20 74 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54   the ON CONFLICT
16480 20 73 65 74 74 69 6e 67 2c 20 74 68 65 0a 2a 2a   setting, the.**
16490 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 69 67   transaction mig
164a0 68 74 20 61 6c 73 6f 20 62 65 20 72 6f 6c 6c 65  ht also be rolle
164b0 64 20 62 61 63 6b 20 69 66 20 61 6e 20 65 72 72  d back if an err
164c0 6f 72 20 69 73 20 65 6e 63 6f 75 6e 74 65 72 65  or is encountere
164d0 64 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74  d..**.** P1 is t
164e0 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20  he index of the 
164f0 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 6f 6e  database file on
16500 20 77 68 69 63 68 20 74 68 65 20 74 72 61 6e 73   which the trans
16510 61 63 74 69 6f 6e 20 69 73 0a 2a 2a 20 73 74 61  action is.** sta
16520 72 74 65 64 2e 20 20 49 6e 64 65 78 20 30 20 69  rted.  Index 0 i
16530 73 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  s the main datab
16540 61 73 65 20 66 69 6c 65 20 61 6e 64 20 69 6e 64  ase file and ind
16550 65 78 20 31 20 69 73 20 74 68 65 0a 2a 2a 20 66  ex 1 is the.** f
16560 69 6c 65 20 75 73 65 64 20 66 6f 72 20 74 65 6d  ile used for tem
16570 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 20 20  porary tables.  
16580 49 6e 64 69 63 65 73 20 6f 66 20 32 20 6f 72 20  Indices of 2 or 
16590 6d 6f 72 65 20 61 72 65 20 75 73 65 64 20 66 6f  more are used fo
165a0 72 0a 2a 2a 20 61 74 74 61 63 68 65 64 20 64 61  r.** attached da
165b0 74 61 62 61 73 65 73 2e 0a 2a 2a 0a 2a 2a 20 49  tabases..**.** I
165c0 66 20 50 32 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f  f P2 is non-zero
165d0 2c 20 74 68 65 6e 20 61 20 77 72 69 74 65 2d 74  , then a write-t
165e0 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 73 74  ransaction is st
165f0 61 72 74 65 64 2e 20 20 41 20 52 45 53 45 52 56  arted.  A RESERV
16600 45 44 20 6c 6f 63 6b 20 69 73 0a 2a 2a 20 6f 62  ED lock is.** ob
16610 74 61 69 6e 65 64 20 6f 6e 20 74 68 65 20 64 61  tained on the da
16620 74 61 62 61 73 65 20 66 69 6c 65 20 77 68 65 6e  tabase file when
16630 20 61 20 77 72 69 74 65 2d 74 72 61 6e 73 61 63   a write-transac
16640 74 69 6f 6e 20 69 73 20 73 74 61 72 74 65 64 2e  tion is started.
16650 20 20 4e 6f 0a 2a 2a 20 6f 74 68 65 72 20 70 72    No.** other pr
16660 6f 63 65 73 73 20 63 61 6e 20 73 74 61 72 74 20  ocess can start 
16670 61 6e 6f 74 68 65 72 20 77 72 69 74 65 20 74 72  another write tr
16680 61 6e 73 61 63 74 69 6f 6e 20 77 68 69 6c 65 20  ansaction while 
16690 74 68 69 73 20 74 72 61 6e 73 61 63 74 69 6f 6e  this transaction
166a0 20 69 73 0a 2a 2a 20 75 6e 64 65 72 77 61 79 2e   is.** underway.
166b0 20 20 53 74 61 72 74 69 6e 67 20 61 20 77 72 69    Starting a wri
166c0 74 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61  te transaction a
166d0 6c 73 6f 20 63 72 65 61 74 65 73 20 61 20 72 6f  lso creates a ro
166e0 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 2e 20  llback journal. 
166f0 41 0a 2a 2a 20 77 72 69 74 65 20 74 72 61 6e 73  A.** write trans
16700 61 63 74 69 6f 6e 20 6d 75 73 74 20 62 65 20 73  action must be s
16710 74 61 72 74 65 64 20 62 65 66 6f 72 65 20 61 6e  tarted before an
16720 79 20 63 68 61 6e 67 65 73 20 63 61 6e 20 62 65  y changes can be
16730 20 6d 61 64 65 20 74 6f 20 74 68 65 0a 2a 2a 20   made to the.** 
16740 64 61 74 61 62 61 73 65 2e 20 20 49 66 20 50 32  database.  If P2
16750 20 69 73 20 32 20 6f 72 20 67 72 65 61 74 65 72   is 2 or greater
16760 20 74 68 65 6e 20 61 6e 20 45 58 43 4c 55 53 49   then an EXCLUSI
16770 56 45 20 6c 6f 63 6b 20 69 73 20 61 6c 73 6f 20  VE lock is also 
16780 6f 62 74 61 69 6e 65 64 0a 2a 2a 20 6f 6e 20 74  obtained.** on t
16790 68 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49  he file..**.** I
167a0 66 20 61 20 77 72 69 74 65 2d 74 72 61 6e 73 61  f a write-transa
167b0 63 74 69 6f 6e 20 69 73 20 73 74 61 72 74 65 64  ction is started
167c0 20 61 6e 64 20 74 68 65 20 56 64 62 65 2e 75 73   and the Vdbe.us
167d0 65 73 53 74 6d 74 4a 6f 75 72 6e 61 6c 20 66 6c  esStmtJournal fl
167e0 61 67 20 69 73 0a 2a 2a 20 74 72 75 65 20 28 74  ag is.** true (t
167f0 68 69 73 20 66 6c 61 67 20 69 73 20 73 65 74 20  his flag is set 
16800 69 66 20 74 68 65 20 56 64 62 65 20 6d 61 79 20  if the Vdbe may 
16810 6d 6f 64 69 66 79 20 6d 6f 72 65 20 74 68 61 6e  modify more than
16820 20 6f 6e 65 20 72 6f 77 20 61 6e 64 20 6d 61 79   one row and may
16830 0a 2a 2a 20 74 68 72 6f 77 20 61 6e 20 41 42 4f  .** throw an ABO
16840 52 54 20 65 78 63 65 70 74 69 6f 6e 29 2c 20 61  RT exception), a
16850 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73   statement trans
16860 61 63 74 69 6f 6e 20 6d 61 79 20 61 6c 73 6f 20  action may also 
16870 62 65 20 6f 70 65 6e 65 64 2e 0a 2a 2a 20 4d 6f  be opened..** Mo
16880 72 65 20 73 70 65 63 69 66 69 63 61 6c 6c 79 2c  re specifically,
16890 20 61 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61   a statement tra
168a0 6e 73 61 63 74 69 6f 6e 20 69 73 20 6f 70 65 6e  nsaction is open
168b0 65 64 20 69 66 66 20 74 68 65 20 64 61 74 61 62  ed iff the datab
168c0 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f  ase.** connectio
168d0 6e 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 6e  n is currently n
168e0 6f 74 20 69 6e 20 61 75 74 6f 63 6f 6d 6d 69 74  ot in autocommit
168f0 20 6d 6f 64 65 2c 20 6f 72 20 69 66 20 74 68 65   mode, or if the
16900 72 65 20 61 72 65 20 6f 74 68 65 72 0a 2a 2a 20  re are other.** 
16910 61 63 74 69 76 65 20 73 74 61 74 65 6d 65 6e 74  active statement
16920 73 2e 20 41 20 73 74 61 74 65 6d 65 6e 74 20 74  s. A statement t
16930 72 61 6e 73 61 63 74 69 6f 6e 20 61 6c 6c 6f 77  ransaction allow
16940 73 20 74 68 65 20 61 66 66 65 63 74 73 20 6f 66  s the affects of
16950 20 74 68 69 73 0a 2a 2a 20 56 44 42 45 20 74 6f   this.** VDBE to
16960 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 20   be rolled back 
16970 61 66 74 65 72 20 61 6e 20 65 72 72 6f 72 20 77  after an error w
16980 69 74 68 6f 75 74 20 68 61 76 69 6e 67 20 74 6f  ithout having to
16990 20 72 6f 6c 6c 20 62 61 63 6b 20 74 68 65 0a 2a   roll back the.*
169a0 2a 20 65 6e 74 69 72 65 20 74 72 61 6e 73 61 63  * entire transac
169b0 74 69 6f 6e 2e 20 49 66 20 6e 6f 20 65 72 72 6f  tion. If no erro
169c0 72 20 69 73 20 65 6e 63 6f 75 6e 74 65 72 65 64  r is encountered
169d0 2c 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20  , the statement 
169e0 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 77  transaction.** w
169f0 69 6c 6c 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c  ill automaticall
16a00 79 20 63 6f 6d 6d 69 74 20 77 68 65 6e 20 74 68  y commit when th
16a10 65 20 56 44 42 45 20 68 61 6c 74 73 2e 0a 2a 2a  e VDBE halts..**
16a20 0a 2a 2a 20 49 66 20 50 32 20 69 73 20 7a 65 72  .** If P2 is zer
16a30 6f 2c 20 74 68 65 6e 20 61 20 72 65 61 64 2d 6c  o, then a read-l
16a40 6f 63 6b 20 69 73 20 6f 62 74 61 69 6e 65 64 20  ock is obtained 
16a50 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  on the database 
16a60 66 69 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  file..*/.case OP
16a70 5f 54 72 61 6e 73 61 63 74 69 6f 6e 3a 20 7b 0a  _Transaction: {.
16a80 20 20 42 74 72 65 65 20 2a 70 42 74 3b 0a 0a 20    Btree *pBt;.. 
16a90 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
16aa0 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64  >=0 && pOp->p1<d
16ab0 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65  b->nDb );.  asse
16ac0 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73  rt( (p->btreeMas
16ad0 6b 20 26 20 28 28 28 79 44 62 4d 61 73 6b 29 31  k & (((yDbMask)1
16ae0 29 3c 3c 70 4f 70 2d 3e 70 31 29 29 21 3d 30 20  )<<pOp->p1))!=0 
16af0 29 3b 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e 61  );.  pBt = db->a
16b00 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b  Db[pOp->p1].pBt;
16b10 0a 0a 20 20 69 66 28 20 70 42 74 20 29 7b 0a 20  ..  if( pBt ){. 
16b20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
16b30 74 72 65 65 42 65 67 69 6e 54 72 61 6e 73 28 70  treeBeginTrans(p
16b40 42 74 2c 20 70 4f 70 2d 3e 70 32 29 3b 0a 20 20  Bt, pOp->p2);.  
16b50 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
16b60 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 20 20 70  _BUSY ){.      p
16b70 2d 3e 70 63 20 3d 20 70 63 3b 0a 20 20 20 20 20  ->pc = pc;.     
16b80 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53 51   p->rc = rc = SQ
16b90 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 20  LITE_BUSY;.     
16ba0 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72   goto vdbe_retur
16bb0 6e 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  n;.    }.    if(
16bc0 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
16bd0 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f  {.      goto abo
16be0 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
16bf0 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69 66 28 20  .    }..    if( 
16c00 70 4f 70 2d 3e 70 32 20 26 26 20 70 2d 3e 75 73  pOp->p2 && p->us
16c10 65 73 53 74 6d 74 4a 6f 75 72 6e 61 6c 20 0a 20  esStmtJournal . 
16c20 20 20 20 20 26 26 20 28 64 62 2d 3e 61 75 74 6f      && (db->auto
16c30 43 6f 6d 6d 69 74 3d 3d 30 20 7c 7c 20 64 62 2d  Commit==0 || db-
16c40 3e 61 63 74 69 76 65 56 64 62 65 43 6e 74 3e 31  >activeVdbeCnt>1
16c50 29 20 0a 20 20 20 20 29 7b 0a 20 20 20 20 20 20  ) .    ){.      
16c60 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 42  assert( sqlite3B
16c70 74 72 65 65 49 73 49 6e 54 72 61 6e 73 28 70 42  treeIsInTrans(pB
16c80 74 29 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20  t) );.      if( 
16c90 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 3d 3d 30  p->iStatement==0
16ca0 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65   ){.        asse
16cb0 72 74 28 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65  rt( db->nStateme
16cc0 6e 74 3e 3d 30 20 26 26 20 64 62 2d 3e 6e 53 61  nt>=0 && db->nSa
16cd0 76 65 70 6f 69 6e 74 3e 3d 30 20 29 3b 0a 20 20  vepoint>=0 );.  
16ce0 20 20 20 20 20 20 64 62 2d 3e 6e 53 74 61 74 65        db->nState
16cf0 6d 65 6e 74 2b 2b 3b 20 0a 20 20 20 20 20 20 20  ment++; .       
16d00 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 20 3d   p->iStatement =
16d10 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 20   db->nSavepoint 
16d20 2b 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74  + db->nStatement
16d30 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20  ;.      }..     
16d40 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61   rc = sqlite3Vta
16d50 62 53 61 76 65 70 6f 69 6e 74 28 64 62 2c 20 53  bSavepoint(db, S
16d60 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 2c 20  AVEPOINT_BEGIN, 
16d70 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 29 3b 0a  p->iStatement);.
16d80 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51        if( rc==SQ
16d90 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
16da0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
16db0 74 72 65 65 42 65 67 69 6e 53 74 6d 74 28 70 42  treeBeginStmt(pB
16dc0 74 2c 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74  t, p->iStatement
16dd0 29 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20  );.      }..    
16de0 20 20 2f 2a 20 53 74 6f 72 65 20 74 68 65 20 63    /* Store the c
16df0 75 72 72 65 6e 74 20 76 61 6c 75 65 20 6f 66 20  urrent value of 
16e00 74 68 65 20 64 61 74 61 62 61 73 65 20 68 61 6e  the database han
16e10 64 6c 65 73 20 64 65 66 65 72 72 65 64 20 63 6f  dles deferred co
16e20 6e 73 74 72 61 69 6e 74 0a 20 20 20 20 20 20 2a  nstraint.      *
16e30 2a 20 63 6f 75 6e 74 65 72 2e 20 49 66 20 74 68  * counter. If th
16e40 65 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e  e statement tran
16e50 73 61 63 74 69 6f 6e 20 6e 65 65 64 73 20 74 6f  saction needs to
16e60 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2c   be rolled back,
16e70 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 20 76 61  .      ** the va
16e80 6c 75 65 20 6f 66 20 74 68 69 73 20 63 6f 75 6e  lue of this coun
16e90 74 65 72 20 6e 65 65 64 73 20 74 6f 20 62 65 20  ter needs to be 
16ea0 72 65 73 74 6f 72 65 64 20 74 6f 6f 2e 20 20 2a  restored too.  *
16eb0 2f 0a 20 20 20 20 20 20 70 2d 3e 6e 53 74 6d 74  /.      p->nStmt
16ec0 44 65 66 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44  DefCons = db->nD
16ed0 65 66 65 72 72 65 64 43 6f 6e 73 3b 0a 20 20 20  eferredCons;.   
16ee0 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a   }.  }.  break;.
16ef0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65  }../* Opcode: Re
16f00 61 64 43 6f 6f 6b 69 65 20 50 31 20 50 32 20 50  adCookie P1 P2 P
16f10 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64  3 * *.**.** Read
16f20 20 63 6f 6f 6b 69 65 20 6e 75 6d 62 65 72 20 50   cookie number P
16f30 33 20 66 72 6f 6d 20 64 61 74 61 62 61 73 65 20  3 from database 
16f40 50 31 20 61 6e 64 20 77 72 69 74 65 20 69 74 20  P1 and write it 
16f50 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  into register P2
16f60 2e 0a 2a 2a 20 50 33 3d 3d 31 20 69 73 20 74 68  ..** P3==1 is th
16f70 65 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e  e schema version
16f80 2e 20 20 50 33 3d 3d 32 20 69 73 20 74 68 65 20  .  P3==2 is the 
16f90 64 61 74 61 62 61 73 65 20 66 6f 72 6d 61 74 2e  database format.
16fa0 0a 2a 2a 20 50 33 3d 3d 33 20 69 73 20 74 68 65  .** P3==3 is the
16fb0 20 72 65 63 6f 6d 6d 65 6e 64 65 64 20 70 61 67   recommended pag
16fc0 65 72 20 63 61 63 68 65 20 73 69 7a 65 2c 20 61  er cache size, a
16fd0 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20 20 50 31  nd so forth.  P1
16fe0 3d 3d 30 20 69 73 0a 2a 2a 20 74 68 65 20 6d 61  ==0 is.** the ma
16ff0 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  in database file
17000 20 61 6e 64 20 50 31 3d 3d 31 20 69 73 20 74 68   and P1==1 is th
17010 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
17020 75 73 65 64 20 74 6f 20 73 74 6f 72 65 0a 2a 2a  used to store.**
17030 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65   temporary table
17040 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 6d  s..**.** There m
17050 75 73 74 20 62 65 20 61 20 72 65 61 64 2d 6c 6f  ust be a read-lo
17060 63 6b 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61  ck on the databa
17070 73 65 20 28 65 69 74 68 65 72 20 61 20 74 72 61  se (either a tra
17080 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 6d 75 73 74  nsaction.** must
17090 20 62 65 20 73 74 61 72 74 65 64 20 6f 72 20 74   be started or t
170a0 68 65 72 65 20 6d 75 73 74 20 62 65 20 61 6e 20  here must be an 
170b0 6f 70 65 6e 20 63 75 72 73 6f 72 29 20 62 65 66  open cursor) bef
170c0 6f 72 65 0a 2a 2a 20 65 78 65 63 75 74 69 6e 67  ore.** executing
170d0 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
170e0 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65  n..*/.case OP_Re
170f0 61 64 43 6f 6f 6b 69 65 3a 20 7b 20 20 20 20 20  adCookie: {     
17100 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
17110 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a  2-prerelease */.
17120 20 20 69 6e 74 20 69 4d 65 74 61 3b 0a 20 20 69    int iMeta;.  i
17130 6e 74 20 69 44 62 3b 0a 20 20 69 6e 74 20 69 43  nt iDb;.  int iC
17140 6f 6f 6b 69 65 3b 0a 0a 20 20 69 44 62 20 3d 20  ookie;..  iDb = 
17150 70 4f 70 2d 3e 70 31 3b 0a 20 20 69 43 6f 6f 6b  pOp->p1;.  iCook
17160 69 65 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20  ie = pOp->p3;.  
17170 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c  assert( pOp->p3<
17180 53 51 4c 49 54 45 5f 4e 5f 42 54 52 45 45 5f 4d  SQLITE_N_BTREE_M
17190 45 54 41 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ETA );.  assert(
171a0 20 69 44 62 3e 3d 30 20 26 26 20 69 44 62 3c 64   iDb>=0 && iDb<d
171b0 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65  b->nDb );.  asse
171c0 72 74 28 20 64 62 2d 3e 61 44 62 5b 69 44 62 5d  rt( db->aDb[iDb]
171d0 2e 70 42 74 21 3d 30 20 29 3b 0a 20 20 61 73 73  .pBt!=0 );.  ass
171e0 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61  ert( (p->btreeMa
171f0 73 6b 20 26 20 28 28 28 79 44 62 4d 61 73 6b 29  sk & (((yDbMask)
17200 31 29 3c 3c 69 44 62 29 29 21 3d 30 20 29 3b 0a  1)<<iDb))!=0 );.
17210 0a 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 47  .  sqlite3BtreeG
17220 65 74 4d 65 74 61 28 64 62 2d 3e 61 44 62 5b 69  etMeta(db->aDb[i
17230 44 62 5d 2e 70 42 74 2c 20 69 43 6f 6f 6b 69 65  Db].pBt, iCookie
17240 2c 20 28 75 33 32 20 2a 29 26 69 4d 65 74 61 29  , (u32 *)&iMeta)
17250 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20  ;.  pOut->u.i = 
17260 69 4d 65 74 61 3b 0a 20 20 62 72 65 61 6b 3b 0a  iMeta;.  break;.
17270 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65  }../* Opcode: Se
17280 74 43 6f 6f 6b 69 65 20 50 31 20 50 32 20 50 33  tCookie P1 P2 P3
17290 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65   * *.**.** Write
172a0 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
172b0 72 65 67 69 73 74 65 72 20 50 33 20 28 69 6e 74  register P3 (int
172c0 65 72 70 72 65 74 65 64 20 61 73 20 61 6e 20 69  erpreted as an i
172d0 6e 74 65 67 65 72 29 0a 2a 2a 20 69 6e 74 6f 20  nteger).** into 
172e0 63 6f 6f 6b 69 65 20 6e 75 6d 62 65 72 20 50 32  cookie number P2
172f0 20 6f 66 20 64 61 74 61 62 61 73 65 20 50 31 2e   of database P1.
17300 20 20 50 32 3d 3d 31 20 69 73 20 74 68 65 20 73    P2==1 is the s
17310 63 68 65 6d 61 20 76 65 72 73 69 6f 6e 2e 20 20  chema version.  
17320 0a 2a 2a 20 50 32 3d 3d 32 20 69 73 20 74 68 65  .** P2==2 is the
17330 20 64 61 74 61 62 61 73 65 20 66 6f 72 6d 61 74   database format
17340 2e 20 50 32 3d 3d 33 20 69 73 20 74 68 65 20 72  . P2==3 is the r
17350 65 63 6f 6d 6d 65 6e 64 65 64 20 70 61 67 65 72  ecommended pager
17360 20 63 61 63 68 65 20 0a 2a 2a 20 73 69 7a 65 2c   cache .** size,
17370 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20 20   and so forth.  
17380 50 31 3d 3d 30 20 69 73 20 74 68 65 20 6d 61 69  P1==0 is the mai
17390 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  n database file 
173a0 61 6e 64 20 50 31 3d 3d 31 20 69 73 20 74 68 65  and P1==1 is the
173b0 20 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 66 69   .** database fi
173c0 6c 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65  le used to store
173d0 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65   temporary table
173e0 73 2e 0a 2a 2a 0a 2a 2a 20 41 20 74 72 61 6e 73  s..**.** A trans
173f0 61 63 74 69 6f 6e 20 6d 75 73 74 20 62 65 20 73  action must be s
17400 74 61 72 74 65 64 20 62 65 66 6f 72 65 20 65 78  tarted before ex
17410 65 63 75 74 69 6e 67 20 74 68 69 73 20 6f 70 63  ecuting this opc
17420 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ode..*/.case OP_
17430 53 65 74 43 6f 6f 6b 69 65 3a 20 7b 20 20 20 20  SetCookie: {    
17440 20 20 20 2f 2a 20 69 6e 33 20 2a 2f 0a 20 20 44     /* in3 */.  D
17450 62 20 2a 70 44 62 3b 0a 20 20 61 73 73 65 72 74  b *pDb;.  assert
17460 28 20 70 4f 70 2d 3e 70 32 3c 53 51 4c 49 54 45  ( pOp->p2<SQLITE
17470 5f 4e 5f 42 54 52 45 45 5f 4d 45 54 41 20 29 3b  _N_BTREE_META );
17480 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
17490 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
174a0 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73  <db->nDb );.  as
174b0 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d  sert( (p->btreeM
174c0 61 73 6b 20 26 20 28 28 28 79 44 62 4d 61 73 6b  ask & (((yDbMask
174d0 29 31 29 3c 3c 70 4f 70 2d 3e 70 31 29 29 21 3d  )1)<<pOp->p1))!=
174e0 30 20 29 3b 0a 20 20 70 44 62 20 3d 20 26 64 62  0 );.  pDb = &db
174f0 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  ->aDb[pOp->p1];.
17500 20 20 61 73 73 65 72 74 28 20 70 44 62 2d 3e 70    assert( pDb->p
17510 42 74 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  Bt!=0 );.  asser
17520 74 28 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61  t( sqlite3Schema
17530 4d 75 74 65 78 48 65 6c 64 28 64 62 2c 20 70 4f  MutexHeld(db, pO
17540 70 2d 3e 70 31 2c 20 30 29 20 29 3b 0a 20 20 70  p->p1, 0) );.  p
17550 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In3 = &aMem[pOp-
17560 3e 70 33 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56  >p3];.  sqlite3V
17570 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79  dbeMemIntegerify
17580 28 70 49 6e 33 29 3b 0a 20 20 2f 2a 20 53 65 65  (pIn3);.  /* See
17590 20 6e 6f 74 65 20 61 62 6f 75 74 20 69 6e 64 65   note about inde
175a0 78 20 73 68 69 66 74 69 6e 67 20 6f 6e 20 4f 50  x shifting on OP
175b0 5f 52 65 61 64 43 6f 6f 6b 69 65 20 2a 2f 0a 20  _ReadCookie */. 
175c0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
175d0 65 65 55 70 64 61 74 65 4d 65 74 61 28 70 44 62  eeUpdateMeta(pDb
175e0 2d 3e 70 42 74 2c 20 70 4f 70 2d 3e 70 32 2c 20  ->pBt, pOp->p2, 
175f0 28 69 6e 74 29 70 49 6e 33 2d 3e 75 2e 69 29 3b  (int)pIn3->u.i);
17600 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d  .  if( pOp->p2==
17610 42 54 52 45 45 5f 53 43 48 45 4d 41 5f 56 45 52  BTREE_SCHEMA_VER
17620 53 49 4f 4e 20 29 7b 0a 20 20 20 20 2f 2a 20 57  SION ){.    /* W
17630 68 65 6e 20 74 68 65 20 73 63 68 65 6d 61 20 63  hen the schema c
17640 6f 6f 6b 69 65 20 63 68 61 6e 67 65 73 2c 20 72  ookie changes, r
17650 65 63 6f 72 64 20 74 68 65 20 6e 65 77 20 63 6f  ecord the new co
17660 6f 6b 69 65 20 69 6e 74 65 72 6e 61 6c 6c 79 20  okie internally 
17670 2a 2f 0a 20 20 20 20 70 44 62 2d 3e 70 53 63 68  */.    pDb->pSch
17680 65 6d 61 2d 3e 73 63 68 65 6d 61 5f 63 6f 6f 6b  ema->schema_cook
17690 69 65 20 3d 20 28 69 6e 74 29 70 49 6e 33 2d 3e  ie = (int)pIn3->
176a0 75 2e 69 3b 0a 20 20 20 20 64 62 2d 3e 66 6c 61  u.i;.    db->fla
176b0 67 73 20 7c 3d 20 53 51 4c 49 54 45 5f 49 6e 74  gs |= SQLITE_Int
176c0 65 72 6e 43 68 61 6e 67 65 73 3b 0a 20 20 7d 65  ernChanges;.  }e
176d0 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d  lse if( pOp->p2=
176e0 3d 42 54 52 45 45 5f 46 49 4c 45 5f 46 4f 52 4d  =BTREE_FILE_FORM
176f0 41 54 20 29 7b 0a 20 20 20 20 2f 2a 20 52 65 63  AT ){.    /* Rec
17700 6f 72 64 20 63 68 61 6e 67 65 73 20 69 6e 20 74  ord changes in t
17710 68 65 20 66 69 6c 65 20 66 6f 72 6d 61 74 20 2a  he file format *
17720 2f 0a 20 20 20 20 70 44 62 2d 3e 70 53 63 68 65  /.    pDb->pSche
17730 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 20  ma->file_format 
17740 3d 20 28 75 38 29 70 49 6e 33 2d 3e 75 2e 69 3b  = (u8)pIn3->u.i;
17750 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e  .  }.  if( pOp->
17760 70 31 3d 3d 31 20 29 7b 0a 20 20 20 20 2f 2a 20  p1==1 ){.    /* 
17770 49 6e 76 61 6c 69 64 61 74 65 20 61 6c 6c 20 70  Invalidate all p
17780 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e  repared statemen
17790 74 73 20 77 68 65 6e 65 76 65 72 20 74 68 65 20  ts whenever the 
177a0 54 45 4d 50 20 64 61 74 61 62 61 73 65 0a 20 20  TEMP database.  
177b0 20 20 2a 2a 20 73 63 68 65 6d 61 20 69 73 20 63    ** schema is c
177c0 68 61 6e 67 65 64 2e 20 20 54 69 63 6b 65 74 20  hanged.  Ticket 
177d0 23 31 36 34 34 20 2a 2f 0a 20 20 20 20 73 71 6c  #1644 */.    sql
177e0 69 74 65 33 45 78 70 69 72 65 50 72 65 70 61 72  ite3ExpirePrepar
177f0 65 64 53 74 61 74 65 6d 65 6e 74 73 28 64 62 29  edStatements(db)
17800 3b 0a 20 20 20 20 70 2d 3e 65 78 70 69 72 65 64  ;.    p->expired
17810 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 62 72 65 61   = 0;.  }.  brea
17820 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
17830 20 56 65 72 69 66 79 43 6f 6f 6b 69 65 20 50 31   VerifyCookie P1
17840 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
17850 20 43 68 65 63 6b 20 74 68 65 20 76 61 6c 75 65   Check the value
17860 20 6f 66 20 67 6c 6f 62 61 6c 20 64 61 74 61 62   of global datab
17870 61 73 65 20 70 61 72 61 6d 65 74 65 72 20 6e 75  ase parameter nu
17880 6d 62 65 72 20 30 20 28 74 68 65 0a 2a 2a 20 73  mber 0 (the.** s
17890 63 68 65 6d 61 20 76 65 72 73 69 6f 6e 29 20 61  chema version) a
178a0 6e 64 20 6d 61 6b 65 20 73 75 72 65 20 69 74 20  nd make sure it 
178b0 69 73 20 65 71 75 61 6c 20 74 6f 20 50 32 20 61  is equal to P2 a
178c0 6e 64 20 74 68 61 74 20 74 68 65 0a 2a 2a 20 67  nd that the.** g
178d0 65 6e 65 72 61 74 69 6f 6e 20 63 6f 75 6e 74 65  eneration counte
178e0 72 20 6f 6e 20 74 68 65 20 6c 6f 63 61 6c 20 73  r on the local s
178f0 63 68 65 6d 61 20 70 61 72 73 65 20 65 71 75 61  chema parse equa
17900 6c 73 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 50 31 20  ls P3..**.** P1 
17910 69 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20  is the database 
17920 6e 75 6d 62 65 72 20 77 68 69 63 68 20 69 73 20  number which is 
17930 30 20 66 6f 72 20 74 68 65 20 6d 61 69 6e 20 64  0 for the main d
17940 61 74 61 62 61 73 65 20 66 69 6c 65 0a 2a 2a 20  atabase file.** 
17950 61 6e 64 20 31 20 66 6f 72 20 74 68 65 20 66 69  and 1 for the fi
17960 6c 65 20 68 6f 6c 64 69 6e 67 20 74 65 6d 70 6f  le holding tempo
17970 72 61 72 79 20 74 61 62 6c 65 73 20 61 6e 64 20  rary tables and 
17980 73 6f 6d 65 20 68 69 67 68 65 72 20 6e 75 6d 62  some higher numb
17990 65 72 0a 2a 2a 20 66 6f 72 20 61 75 78 69 6c 69  er.** for auxili
179a0 61 72 79 20 64 61 74 61 62 61 73 65 73 2e 0a 2a  ary databases..*
179b0 2a 0a 2a 2a 20 54 68 65 20 63 6f 6f 6b 69 65 20  *.** The cookie 
179c0 63 68 61 6e 67 65 73 20 69 74 73 20 76 61 6c 75  changes its valu
179d0 65 20 77 68 65 6e 65 76 65 72 20 74 68 65 20 64  e whenever the d
179e0 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 63  atabase schema c
179f0 68 61 6e 67 65 73 2e 0a 2a 2a 20 54 68 69 73 20  hanges..** This 
17a00 6f 70 65 72 61 74 69 6f 6e 20 69 73 20 75 73 65  operation is use
17a10 64 20 74 6f 20 64 65 74 65 63 74 20 77 68 65 6e  d to detect when
17a20 20 74 68 61 74 20 74 68 65 20 63 6f 6f 6b 69 65   that the cookie
17a30 20 68 61 73 20 63 68 61 6e 67 65 64 0a 2a 2a 20   has changed.** 
17a40 61 6e 64 20 74 68 61 74 20 74 68 65 20 63 75 72  and that the cur
17a50 72 65 6e 74 20 70 72 6f 63 65 73 73 20 6e 65 65  rent process nee
17a60 64 73 20 74 6f 20 72 65 72 65 61 64 20 74 68 65  ds to reread the
17a70 20 73 63 68 65 6d 61 2e 0a 2a 2a 0a 2a 2a 20 45   schema..**.** E
17a80 69 74 68 65 72 20 61 20 74 72 61 6e 73 61 63 74  ither a transact
17a90 69 6f 6e 20 6e 65 65 64 73 20 74 6f 20 68 61 76  ion needs to hav
17aa0 65 20 62 65 65 6e 20 73 74 61 72 74 65 64 20 6f  e been started o
17ab0 72 20 61 6e 20 4f 50 5f 4f 70 65 6e 20 6e 65 65  r an OP_Open nee
17ac0 64 73 0a 2a 2a 20 74 6f 20 62 65 20 65 78 65 63  ds.** to be exec
17ad0 75 74 65 64 20 28 74 6f 20 65 73 74 61 62 6c 69  uted (to establi
17ae0 73 68 20 61 20 72 65 61 64 20 6c 6f 63 6b 29 20  sh a read lock) 
17af0 62 65 66 6f 72 65 20 74 68 69 73 20 6f 70 63 6f  before this opco
17b00 64 65 20 69 73 0a 2a 2a 20 69 6e 76 6f 6b 65 64  de is.** invoked
17b10 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 65 72  ..*/.case OP_Ver
17b20 69 66 79 43 6f 6f 6b 69 65 3a 20 7b 0a 20 20 69  ifyCookie: {.  i
17b30 6e 74 20 69 4d 65 74 61 3b 0a 20 20 69 6e 74 20  nt iMeta;.  int 
17b40 69 47 65 6e 3b 0a 20 20 42 74 72 65 65 20 2a 70  iGen;.  Btree *p
17b50 42 74 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  Bt;..  assert( p
17b60 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
17b70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a  ->p1<db->nDb );.
17b80 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74    assert( (p->bt
17b90 72 65 65 4d 61 73 6b 20 26 20 28 28 28 79 44 62  reeMask & (((yDb
17ba0 4d 61 73 6b 29 31 29 3c 3c 70 4f 70 2d 3e 70 31  Mask)1)<<pOp->p1
17bb0 29 29 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  ))!=0 );.  asser
17bc0 74 28 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61  t( sqlite3Schema
17bd0 4d 75 74 65 78 48 65 6c 64 28 64 62 2c 20 70 4f  MutexHeld(db, pO
17be0 70 2d 3e 70 31 2c 20 30 29 20 29 3b 0a 20 20 70  p->p1, 0) );.  p
17bf0 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70  Bt = db->aDb[pOp
17c00 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20 20 69 66 28  ->p1].pBt;.  if(
17c10 20 70 42 74 20 29 7b 0a 20 20 20 20 73 71 6c 69   pBt ){.    sqli
17c20 74 65 33 42 74 72 65 65 47 65 74 4d 65 74 61 28  te3BtreeGetMeta(
17c30 70 42 74 2c 20 42 54 52 45 45 5f 53 43 48 45 4d  pBt, BTREE_SCHEM
17c40 41 5f 56 45 52 53 49 4f 4e 2c 20 28 75 33 32 20  A_VERSION, (u32 
17c50 2a 29 26 69 4d 65 74 61 29 3b 0a 20 20 20 20 69  *)&iMeta);.    i
17c60 47 65 6e 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f  Gen = db->aDb[pO
17c70 70 2d 3e 70 31 5d 2e 70 53 63 68 65 6d 61 2d 3e  p->p1].pSchema->
17c80 69 47 65 6e 65 72 61 74 69 6f 6e 3b 0a 20 20 7d  iGeneration;.  }
17c90 65 6c 73 65 7b 0a 20 20 20 20 69 47 65 6e 20 3d  else{.    iGen =
17ca0 20 69 4d 65 74 61 20 3d 20 30 3b 0a 20 20 7d 0a   iMeta = 0;.  }.
17cb0 20 20 69 66 28 20 69 4d 65 74 61 21 3d 70 4f 70    if( iMeta!=pOp
17cc0 2d 3e 70 32 20 7c 7c 20 69 47 65 6e 21 3d 70 4f  ->p2 || iGen!=pO
17cd0 70 2d 3e 70 33 20 29 7b 0a 20 20 20 20 73 71 6c  p->p3 ){.    sql
17ce0 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 70  ite3DbFree(db, p
17cf0 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20  ->zErrMsg);.    
17d00 70 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 73 71 6c  p->zErrMsg = sql
17d10 69 74 65 33 44 62 53 74 72 44 75 70 28 64 62 2c  ite3DbStrDup(db,
17d20 20 22 64 61 74 61 62 61 73 65 20 73 63 68 65 6d   "database schem
17d30 61 20 68 61 73 20 63 68 61 6e 67 65 64 22 29 3b  a has changed");
17d40 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20 73  .    /* If the s
17d50 63 68 65 6d 61 2d 63 6f 6f 6b 69 65 20 66 72 6f  chema-cookie fro
17d60 6d 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  m the database f
17d70 69 6c 65 20 6d 61 74 63 68 65 73 20 74 68 65 20  ile matches the 
17d80 63 6f 6f 6b 69 65 20 0a 20 20 20 20 2a 2a 20 73  cookie .    ** s
17d90 74 6f 72 65 64 20 77 69 74 68 20 74 68 65 20 69  tored with the i
17da0 6e 2d 6d 65 6d 6f 72 79 20 72 65 70 72 65 73 65  n-memory represe
17db0 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 73  ntation of the s
17dc0 63 68 65 6d 61 2c 20 64 6f 0a 20 20 20 20 2a 2a  chema, do.    **
17dd0 20 6e 6f 74 20 72 65 6c 6f 61 64 20 74 68 65 20   not reload the 
17de0 73 63 68 65 6d 61 20 66 72 6f 6d 20 74 68 65 20  schema from the 
17df0 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 20  database file.. 
17e00 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 49 66 20     **.    ** If 
17e10 76 69 72 74 75 61 6c 2d 74 61 62 6c 65 73 20 61  virtual-tables a
17e20 72 65 20 69 6e 20 75 73 65 2c 20 74 68 69 73 20  re in use, this 
17e30 69 73 20 6e 6f 74 20 6a 75 73 74 20 61 6e 20 6f  is not just an o
17e40 70 74 69 6d 69 7a 61 74 69 6f 6e 2e 0a 20 20 20  ptimization..   
17e50 20 2a 2a 20 4f 66 74 65 6e 2c 20 76 2d 74 61 62   ** Often, v-tab
17e60 6c 65 73 20 73 74 6f 72 65 20 74 68 65 69 72 20  les store their 
17e70 64 61 74 61 20 69 6e 20 6f 74 68 65 72 20 53 51  data in other SQ
17e80 4c 69 74 65 20 74 61 62 6c 65 73 2c 20 77 68 69  Lite tables, whi
17e90 63 68 0a 20 20 20 20 2a 2a 20 61 72 65 20 71 75  ch.    ** are qu
17ea0 65 72 69 65 64 20 66 72 6f 6d 20 77 69 74 68 69  eried from withi
17eb0 6e 20 78 4e 65 78 74 28 29 20 61 6e 64 20 6f 74  n xNext() and ot
17ec0 68 65 72 20 76 2d 74 61 62 6c 65 20 6d 65 74 68  her v-table meth
17ed0 6f 64 73 20 75 73 69 6e 67 0a 20 20 20 20 2a 2a  ods using.    **
17ee0 20 70 72 65 70 61 72 65 64 20 71 75 65 72 69 65   prepared querie
17ef0 73 2e 20 49 66 20 73 75 63 68 20 61 20 71 75 65  s. If such a que
17f00 72 79 20 69 73 20 6f 75 74 2d 6f 66 2d 64 61 74  ry is out-of-dat
17f10 65 2c 20 77 65 20 64 6f 20 6e 6f 74 20 77 61 6e  e, we do not wan
17f20 74 20 74 6f 0a 20 20 20 20 2a 2a 20 64 69 73 63  t to.    ** disc
17f30 61 72 64 20 74 68 65 20 64 61 74 61 62 61 73 65  ard the database
17f40 20 73 63 68 65 6d 61 2c 20 61 73 20 74 68 65 20   schema, as the 
17f50 75 73 65 72 20 63 6f 64 65 20 69 6d 70 6c 65 6d  user code implem
17f60 65 6e 74 69 6e 67 20 74 68 65 0a 20 20 20 20 2a  enting the.    *
17f70 2a 20 76 2d 74 61 62 6c 65 20 77 6f 75 6c 64 20  * v-table would 
17f80 68 61 76 65 20 74 6f 20 62 65 20 72 65 61 64 79  have to be ready
17f90 20 66 6f 72 20 74 68 65 20 73 71 6c 69 74 65 33   for the sqlite3
17fa0 5f 76 74 61 62 20 73 74 72 75 63 74 75 72 65 20  _vtab structure 
17fb0 69 74 73 65 6c 66 0a 20 20 20 20 2a 2a 20 74 6f  itself.    ** to
17fc0 20 62 65 20 69 6e 76 61 6c 69 64 61 74 65 64 20   be invalidated 
17fd0 77 68 65 6e 65 76 65 72 20 73 71 6c 69 74 65 33  whenever sqlite3
17fe0 5f 73 74 65 70 28 29 20 69 73 20 63 61 6c 6c 65  _step() is calle
17ff0 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 0a 20  d from within . 
18000 20 20 20 2a 2a 20 61 20 76 2d 74 61 62 6c 65 20     ** a v-table 
18010 6d 65 74 68 6f 64 2e 0a 20 20 20 20 2a 2f 0a 20  method..    */. 
18020 20 20 20 69 66 28 20 64 62 2d 3e 61 44 62 5b 70     if( db->aDb[p
18030 4f 70 2d 3e 70 31 5d 2e 70 53 63 68 65 6d 61 2d  Op->p1].pSchema-
18040 3e 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 21 3d  >schema_cookie!=
18050 69 4d 65 74 61 20 29 7b 0a 20 20 20 20 20 20 73  iMeta ){.      s
18060 71 6c 69 74 65 33 52 65 73 65 74 49 6e 74 65 72  qlite3ResetInter
18070 6e 61 6c 53 63 68 65 6d 61 28 64 62 2c 20 70 4f  nalSchema(db, pO
18080 70 2d 3e 70 31 29 3b 0a 20 20 20 20 7d 0a 0a 20  p->p1);.    }.. 
18090 20 20 20 70 2d 3e 65 78 70 69 72 65 64 20 3d 20     p->expired = 
180a0 31 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49  1;.    rc = SQLI
180b0 54 45 5f 53 43 48 45 4d 41 3b 0a 20 20 7d 0a 20  TE_SCHEMA;.  }. 
180c0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
180d0 63 6f 64 65 3a 20 4f 70 65 6e 52 65 61 64 20 50  code: OpenRead P
180e0 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
180f0 0a 2a 2a 20 4f 70 65 6e 20 61 20 72 65 61 64 2d  .** Open a read-
18100 6f 6e 6c 79 20 63 75 72 73 6f 72 20 66 6f 72 20  only cursor for 
18110 74 68 65 20 64 61 74 61 62 61 73 65 20 74 61 62  the database tab
18120 6c 65 20 77 68 6f 73 65 20 72 6f 6f 74 20 70 61  le whose root pa
18130 67 65 20 69 73 0a 2a 2a 20 50 32 20 69 6e 20 61  ge is.** P2 in a
18140 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20   database file. 
18150 20 54 68 65 20 64 61 74 61 62 61 73 65 20 66 69   The database fi
18160 6c 65 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64  le is determined
18170 20 62 79 20 50 33 2e 20 0a 2a 2a 20 50 33 3d 3d   by P3. .** P3==
18180 30 20 6d 65 61 6e 73 20 74 68 65 20 6d 61 69 6e  0 means the main
18190 20 64 61 74 61 62 61 73 65 2c 20 50 33 3d 3d 31   database, P3==1
181a0 20 6d 65 61 6e 73 20 74 68 65 20 64 61 74 61 62   means the datab
181b0 61 73 65 20 75 73 65 64 20 66 6f 72 20 0a 2a 2a  ase used for .**
181c0 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65   temporary table
181d0 73 2c 20 61 6e 64 20 50 33 3e 31 20 6d 65 61 6e  s, and P3>1 mean
181e0 73 20 75 73 65 64 20 74 68 65 20 63 6f 72 72 65  s used the corre
181f0 73 70 6f 6e 64 69 6e 67 20 61 74 74 61 63 68 65  sponding attache
18200 64 0a 2a 2a 20 64 61 74 61 62 61 73 65 2e 20 20  d.** database.  
18210 47 69 76 65 20 74 68 65 20 6e 65 77 20 63 75 72  Give the new cur
18220 73 6f 72 20 61 6e 20 69 64 65 6e 74 69 66 69 65  sor an identifie
18230 72 20 6f 66 20 50 31 2e 20 20 54 68 65 20 50 31  r of P1.  The P1
18240 0a 2a 2a 20 76 61 6c 75 65 73 20 6e 65 65 64 20  .** values need 
18250 6e 6f 74 20 62 65 20 63 6f 6e 74 69 67 75 6f 75  not be contiguou
18260 73 20 62 75 74 20 61 6c 6c 20 50 31 20 76 61 6c  s but all P1 val
18270 75 65 73 20 73 68 6f 75 6c 64 20 62 65 20 73 6d  ues should be sm
18280 61 6c 6c 20 69 6e 74 65 67 65 72 73 2e 0a 2a 2a  all integers..**
18290 20 49 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20   It is an error 
182a0 66 6f 72 20 50 31 20 74 6f 20 62 65 20 6e 65 67  for P1 to be neg
182b0 61 74 69 76 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  ative..**.** If 
182c0 50 35 21 3d 30 20 74 68 65 6e 20 75 73 65 20 74  P5!=0 then use t
182d0 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65  he content of re
182e0 67 69 73 74 65 72 20 50 32 20 61 73 20 74 68 65  gister P2 as the
182f0 20 72 6f 6f 74 20 70 61 67 65 2c 20 6e 6f 74 0a   root page, not.
18300 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  ** the value of 
18310 50 32 20 69 74 73 65 6c 66 2e 0a 2a 2a 0a 2a 2a  P2 itself..**.**
18320 20 54 68 65 72 65 20 77 69 6c 6c 20 62 65 20 61   There will be a
18330 20 72 65 61 64 20 6c 6f 63 6b 20 6f 6e 20 74 68   read lock on th
18340 65 20 64 61 74 61 62 61 73 65 20 77 68 65 6e 65  e database whene
18350 76 65 72 20 74 68 65 72 65 20 69 73 20 61 6e 0a  ver there is an.
18360 2a 2a 20 6f 70 65 6e 20 63 75 72 73 6f 72 2e 20  ** open cursor. 
18370 20 49 66 20 74 68 65 20 64 61 74 61 62 61 73 65   If the database
18380 20 77 61 73 20 75 6e 6c 6f 63 6b 65 64 20 70 72   was unlocked pr
18390 69 6f 72 20 74 6f 20 74 68 69 73 20 69 6e 73 74  ior to this inst
183a0 72 75 63 74 69 6f 6e 0a 2a 2a 20 74 68 65 6e 20  ruction.** then 
183b0 61 20 72 65 61 64 20 6c 6f 63 6b 20 69 73 20 61  a read lock is a
183c0 63 71 75 69 72 65 64 20 61 73 20 70 61 72 74 20  cquired as part 
183d0 6f 66 20 74 68 69 73 20 69 6e 73 74 72 75 63 74  of this instruct
183e0 69 6f 6e 2e 20 20 41 20 72 65 61 64 0a 2a 2a 20  ion.  A read.** 
183f0 6c 6f 63 6b 20 61 6c 6c 6f 77 73 20 6f 74 68 65  lock allows othe
18400 72 20 70 72 6f 63 65 73 73 65 73 20 74 6f 20 72  r processes to r
18410 65 61 64 20 74 68 65 20 64 61 74 61 62 61 73 65  ead the database
18420 20 62 75 74 20 70 72 6f 68 69 62 69 74 73 0a 2a   but prohibits.*
18430 2a 20 61 6e 79 20 6f 74 68 65 72 20 70 72 6f 63  * any other proc
18440 65 73 73 20 66 72 6f 6d 20 6d 6f 64 69 66 79 69  ess from modifyi
18450 6e 67 20 74 68 65 20 64 61 74 61 62 61 73 65 2e  ng the database.
18460 20 20 54 68 65 20 72 65 61 64 20 6c 6f 63 6b 20    The read lock 
18470 69 73 0a 2a 2a 20 72 65 6c 65 61 73 65 64 20 77  is.** released w
18480 68 65 6e 20 61 6c 6c 20 63 75 72 73 6f 72 73 20  hen all cursors 
18490 61 72 65 20 63 6c 6f 73 65 64 2e 20 20 49 66 20  are closed.  If 
184a0 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
184b0 20 61 74 74 65 6d 70 74 73 0a 2a 2a 20 74 6f 20   attempts.** to 
184c0 67 65 74 20 61 20 72 65 61 64 20 6c 6f 63 6b 20  get a read lock 
184d0 62 75 74 20 66 61 69 6c 73 2c 20 74 68 65 20 73  but fails, the s
184e0 63 72 69 70 74 20 74 65 72 6d 69 6e 61 74 65 73  cript terminates
184f0 20 77 69 74 68 20 61 6e 0a 2a 2a 20 53 51 4c 49   with an.** SQLI
18500 54 45 5f 42 55 53 59 20 65 72 72 6f 72 20 63 6f  TE_BUSY error co
18510 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34  de..**.** The P4
18520 20 76 61 6c 75 65 20 6d 61 79 20 62 65 20 65 69   value may be ei
18530 74 68 65 72 20 61 6e 20 69 6e 74 65 67 65 72 20  ther an integer 
18540 28 50 34 5f 49 4e 54 33 32 29 20 6f 72 20 61 20  (P4_INT32) or a 
18550 70 6f 69 6e 74 65 72 20 74 6f 0a 2a 2a 20 61 20  pointer to.** a 
18560 4b 65 79 49 6e 66 6f 20 73 74 72 75 63 74 75 72  KeyInfo structur
18570 65 20 28 50 34 5f 4b 45 59 49 4e 46 4f 29 2e 20  e (P4_KEYINFO). 
18580 49 66 20 69 74 20 69 73 20 61 20 70 6f 69 6e 74  If it is a point
18590 65 72 20 74 6f 20 61 20 4b 65 79 49 6e 66 6f 20  er to a KeyInfo 
185a0 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 2c 20 74  .** structure, t
185b0 68 65 6e 20 73 61 69 64 20 73 74 72 75 63 74 75  hen said structu
185c0 72 65 20 64 65 66 69 6e 65 73 20 74 68 65 20 63  re defines the c
185d0 6f 6e 74 65 6e 74 20 61 6e 64 20 63 6f 6c 6c 61  ontent and colla
185e0 74 69 6e 67 20 0a 2a 2a 20 73 65 71 75 65 6e 63  ting .** sequenc
185f0 65 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20 62  e of the index b
18600 65 69 6e 67 20 6f 70 65 6e 65 64 2e 20 4f 74 68  eing opened. Oth
18610 65 72 77 69 73 65 2c 20 69 66 20 50 34 20 69 73  erwise, if P4 is
18620 20 61 6e 20 69 6e 74 65 67 65 72 20 0a 2a 2a 20   an integer .** 
18630 76 61 6c 75 65 2c 20 69 74 20 69 73 20 73 65 74  value, it is set
18640 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   to the number o
18650 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65  f columns in the
18660 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53 65   table..**.** Se
18670 65 20 61 6c 73 6f 20 4f 70 65 6e 57 72 69 74 65  e also OpenWrite
18680 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
18690 4f 70 65 6e 57 72 69 74 65 20 50 31 20 50 32 20  OpenWrite P1 P2 
186a0 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 4f  P3 P4 P5.**.** O
186b0 70 65 6e 20 61 20 72 65 61 64 2f 77 72 69 74 65  pen a read/write
186c0 20 63 75 72 73 6f 72 20 6e 61 6d 65 64 20 50 31   cursor named P1
186d0 20 6f 6e 20 74 68 65 20 74 61 62 6c 65 20 6f 72   on the table or
186e0 20 69 6e 64 65 78 20 77 68 6f 73 65 20 72 6f 6f   index whose roo
186f0 74 0a 2a 2a 20 70 61 67 65 20 69 73 20 50 32 2e  t.** page is P2.
18700 20 20 4f 72 20 69 66 20 50 35 21 3d 30 20 75 73    Or if P5!=0 us
18710 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  e the content of
18720 20 72 65 67 69 73 74 65 72 20 50 32 20 74 6f 20   register P2 to 
18730 66 69 6e 64 20 74 68 65 0a 2a 2a 20 72 6f 6f 74  find the.** root
18740 20 70 61 67 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65   page..**.** The
18750 20 50 34 20 76 61 6c 75 65 20 6d 61 79 20 62 65   P4 value may be
18760 20 65 69 74 68 65 72 20 61 6e 20 69 6e 74 65 67   either an integ
18770 65 72 20 28 50 34 5f 49 4e 54 33 32 29 20 6f 72  er (P4_INT32) or
18780 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 0a 2a 2a   a pointer to.**
18790 20 61 20 4b 65 79 49 6e 66 6f 20 73 74 72 75 63   a KeyInfo struc
187a0 74 75 72 65 20 28 50 34 5f 4b 45 59 49 4e 46 4f  ture (P4_KEYINFO
187b0 29 2e 20 49 66 20 69 74 20 69 73 20 61 20 70 6f  ). If it is a po
187c0 69 6e 74 65 72 20 74 6f 20 61 20 4b 65 79 49 6e  inter to a KeyIn
187d0 66 6f 20 0a 2a 2a 20 73 74 72 75 63 74 75 72 65  fo .** structure
187e0 2c 20 74 68 65 6e 20 73 61 69 64 20 73 74 72 75  , then said stru
187f0 63 74 75 72 65 20 64 65 66 69 6e 65 73 20 74 68  cture defines th
18800 65 20 63 6f 6e 74 65 6e 74 20 61 6e 64 20 63 6f  e content and co
18810 6c 6c 61 74 69 6e 67 20 0a 2a 2a 20 73 65 71 75  llating .** sequ
18820 65 6e 63 65 20 6f 66 20 74 68 65 20 69 6e 64 65  ence of the inde
18830 78 20 62 65 69 6e 67 20 6f 70 65 6e 65 64 2e 20  x being opened. 
18840 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20 50 34  Otherwise, if P4
18850 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 0a   is an integer .
18860 2a 2a 20 76 61 6c 75 65 2c 20 69 74 20 69 73 20  ** value, it is 
18870 73 65 74 20 74 6f 20 74 68 65 20 6e 75 6d 62 65  set to the numbe
18880 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
18890 74 68 65 20 74 61 62 6c 65 2c 20 6f 72 20 74 6f  the table, or to
188a0 20 74 68 65 0a 2a 2a 20 6c 61 72 67 65 73 74 20   the.** largest 
188b0 69 6e 64 65 78 20 6f 66 20 61 6e 79 20 63 6f 6c  index of any col
188c0 75 6d 6e 20 6f 66 20 74 68 65 20 74 61 62 6c 65  umn of the table
188d0 20 74 68 61 74 20 69 73 20 61 63 74 75 61 6c 6c   that is actuall
188e0 79 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68  y used..**.** Th
188f0 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 77  is instruction w
18900 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 4f  orks just like O
18910 70 65 6e 52 65 61 64 20 65 78 63 65 70 74 20 74  penRead except t
18920 68 61 74 20 69 74 20 6f 70 65 6e 73 20 74 68 65  hat it opens the
18930 20 63 75 72 73 6f 72 0a 2a 2a 20 69 6e 20 72 65   cursor.** in re
18940 61 64 2f 77 72 69 74 65 20 6d 6f 64 65 2e 20 20  ad/write mode.  
18950 46 6f 72 20 61 20 67 69 76 65 6e 20 74 61 62 6c  For a given tabl
18960 65 2c 20 74 68 65 72 65 20 63 61 6e 20 62 65 20  e, there can be 
18970 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 72 65 61 64  one or more read
18980 2d 6f 6e 6c 79 0a 2a 2a 20 63 75 72 73 6f 72 73  -only.** cursors
18990 20 6f 72 20 61 20 73 69 6e 67 6c 65 20 72 65 61   or a single rea
189a0 64 2f 77 72 69 74 65 20 63 75 72 73 6f 72 20 62  d/write cursor b
189b0 75 74 20 6e 6f 74 20 62 6f 74 68 2e 0a 2a 2a 0a  ut not both..**.
189c0 2a 2a 20 53 65 65 20 61 6c 73 6f 20 4f 70 65 6e  ** See also Open
189d0 52 65 61 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  Read..*/.case OP
189e0 5f 4f 70 65 6e 52 65 61 64 3a 0a 63 61 73 65 20  _OpenRead:.case 
189f0 4f 50 5f 4f 70 65 6e 57 72 69 74 65 3a 20 7b 0a  OP_OpenWrite: {.
18a00 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b 0a 20 20    int nField;.  
18a10 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66  KeyInfo *pKeyInf
18a20 6f 3b 0a 20 20 69 6e 74 20 70 32 3b 0a 20 20 69  o;.  int p2;.  i
18a30 6e 74 20 69 44 62 3b 0a 20 20 69 6e 74 20 77 72  nt iDb;.  int wr
18a40 46 6c 61 67 3b 0a 20 20 42 74 72 65 65 20 2a 70  Flag;.  Btree *p
18a50 58 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  X;.  VdbeCursor 
18a60 2a 70 43 75 72 3b 0a 20 20 44 62 20 2a 70 44 62  *pCur;.  Db *pDb
18a70 3b 0a 0a 20 20 69 66 28 20 70 2d 3e 65 78 70 69  ;..  if( p->expi
18a80 72 65 64 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  red ){.    rc = 
18a90 53 51 4c 49 54 45 5f 41 42 4f 52 54 3b 0a 20 20  SQLITE_ABORT;.  
18aa0 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20    break;.  }..  
18ab0 6e 46 69 65 6c 64 20 3d 20 30 3b 0a 20 20 70 4b  nField = 0;.  pK
18ac0 65 79 49 6e 66 6f 20 3d 20 30 3b 0a 20 20 70 32  eyInfo = 0;.  p2
18ad0 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 69 44   = pOp->p2;.  iD
18ae0 62 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61  b = pOp->p3;.  a
18af0 73 73 65 72 74 28 20 69 44 62 3e 3d 30 20 26 26  ssert( iDb>=0 &&
18b00 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a   iDb<db->nDb );.
18b10 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74    assert( (p->bt
18b20 72 65 65 4d 61 73 6b 20 26 20 28 28 28 79 44 62  reeMask & (((yDb
18b30 4d 61 73 6b 29 31 29 3c 3c 69 44 62 29 29 21 3d  Mask)1)<<iDb))!=
18b40 30 20 29 3b 0a 20 20 70 44 62 20 3d 20 26 64 62  0 );.  pDb = &db
18b50 2d 3e 61 44 62 5b 69 44 62 5d 3b 0a 20 20 70 58  ->aDb[iDb];.  pX
18b60 20 3d 20 70 44 62 2d 3e 70 42 74 3b 0a 20 20 61   = pDb->pBt;.  a
18b70 73 73 65 72 74 28 20 70 58 21 3d 30 20 29 3b 0a  ssert( pX!=0 );.
18b80 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64    if( pOp->opcod
18b90 65 3d 3d 4f 50 5f 4f 70 65 6e 57 72 69 74 65 20  e==OP_OpenWrite 
18ba0 29 7b 0a 20 20 20 20 77 72 46 6c 61 67 20 3d 20  ){.    wrFlag = 
18bb0 31 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 73  1;.    assert( s
18bc0 71 6c 69 74 65 33 53 63 68 65 6d 61 4d 75 74 65  qlite3SchemaMute
18bd0 78 48 65 6c 64 28 64 62 2c 20 69 44 62 2c 20 30  xHeld(db, iDb, 0
18be0 29 20 29 3b 0a 20 20 20 20 69 66 28 20 70 44 62  ) );.    if( pDb
18bf0 2d 3e 70 53 63 68 65 6d 61 2d 3e 66 69 6c 65 5f  ->pSchema->file_
18c00 66 6f 72 6d 61 74 20 3c 20 70 2d 3e 6d 69 6e 57  format < p->minW
18c10 72 69 74 65 46 69 6c 65 46 6f 72 6d 61 74 20 29  riteFileFormat )
18c20 7b 0a 20 20 20 20 20 20 70 2d 3e 6d 69 6e 57 72  {.      p->minWr
18c30 69 74 65 46 69 6c 65 46 6f 72 6d 61 74 20 3d 20  iteFileFormat = 
18c40 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 66 69  pDb->pSchema->fi
18c50 6c 65 5f 66 6f 72 6d 61 74 3b 0a 20 20 20 20 7d  le_format;.    }
18c60 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 77 72  .  }else{.    wr
18c70 46 6c 61 67 20 3d 20 30 3b 0a 20 20 7d 0a 20 20  Flag = 0;.  }.  
18c80 69 66 28 20 70 4f 70 2d 3e 70 35 20 29 7b 0a 20  if( pOp->p5 ){. 
18c90 20 20 20 61 73 73 65 72 74 28 20 70 32 3e 30 20     assert( p2>0 
18ca0 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
18cb0 32 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20  2<=p->nMem );.  
18cc0 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70    pIn2 = &aMem[p
18cd0 32 5d 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  2];.    assert( 
18ce0 6d 65 6d 49 73 56 61 6c 69 64 28 70 49 6e 32 29  memIsValid(pIn2)
18cf0 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
18d00 28 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn2->flags & M
18d10 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 0a 20 20  EM_Int)!=0 );.  
18d20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
18d30 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e 32 29  Integerify(pIn2)
18d40 3b 0a 20 20 20 20 70 32 20 3d 20 28 69 6e 74 29  ;.    p2 = (int)
18d50 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20 20 20 2f  pIn2->u.i;.    /
18d60 2a 20 54 68 65 20 70 32 20 76 61 6c 75 65 20 61  * The p2 value a
18d70 6c 77 61 79 73 20 63 6f 6d 65 73 20 66 72 6f 6d  lways comes from
18d80 20 61 20 70 72 69 6f 72 20 4f 50 5f 43 72 65 61   a prior OP_Crea
18d90 74 65 54 61 62 6c 65 20 6f 70 63 6f 64 65 20 61  teTable opcode a
18da0 6e 64 0a 20 20 20 20 2a 2a 20 74 68 61 74 20 6f  nd.    ** that o
18db0 70 63 6f 64 65 20 77 69 6c 6c 20 61 6c 77 61 79  pcode will alway
18dc0 73 20 73 65 74 20 74 68 65 20 70 32 20 76 61 6c  s set the p2 val
18dd0 75 65 20 74 6f 20 32 20 6f 72 20 6d 6f 72 65 20  ue to 2 or more 
18de0 6f 72 20 65 6c 73 65 20 66 61 69 6c 2e 0a 20 20  or else fail..  
18df0 20 20 2a 2a 20 49 66 20 74 68 65 72 65 20 77 65    ** If there we
18e00 72 65 20 61 20 66 61 69 6c 75 72 65 2c 20 74 68  re a failure, th
18e10 65 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65  e prepared state
18e20 6d 65 6e 74 20 77 6f 75 6c 64 20 68 61 76 65 20  ment would have 
18e30 68 61 6c 74 65 64 0a 20 20 20 20 2a 2a 20 62 65  halted.    ** be
18e40 66 6f 72 65 20 72 65 61 63 68 69 6e 67 20 74 68  fore reaching th
18e50 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20  is instruction. 
18e60 2a 2f 0a 20 20 20 20 69 66 28 20 4e 45 56 45 52  */.    if( NEVER
18e70 28 70 32 3c 32 29 20 29 20 7b 0a 20 20 20 20 20  (p2<2) ) {.     
18e80 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52   rc = SQLITE_COR
18e90 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20 20  RUPT_BKPT;.     
18ea0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
18eb0 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a  to_error;.    }.
18ec0 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70    }.  if( pOp->p
18ed0 34 74 79 70 65 3d 3d 50 34 5f 4b 45 59 49 4e 46  4type==P4_KEYINF
18ee0 4f 20 29 7b 0a 20 20 20 20 70 4b 65 79 49 6e 66  O ){.    pKeyInf
18ef0 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79  o = pOp->p4.pKey
18f00 49 6e 66 6f 3b 0a 20 20 20 20 70 4b 65 79 49 6e  Info;.    pKeyIn
18f10 66 6f 2d 3e 65 6e 63 20 3d 20 45 4e 43 28 70 2d  fo->enc = ENC(p-
18f20 3e 64 62 29 3b 0a 20 20 20 20 6e 46 69 65 6c 64  >db);.    nField
18f30 20 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69   = pKeyInfo->nFi
18f40 65 6c 64 2b 31 3b 0a 20 20 7d 65 6c 73 65 20 69  eld+1;.  }else i
18f50 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  f( pOp->p4type==
18f60 50 34 5f 49 4e 54 33 32 20 29 7b 0a 20 20 20 20  P4_INT32 ){.    
18f70 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 34  nField = pOp->p4
18f80 2e 69 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74  .i;.  }.  assert
18f90 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a  ( pOp->p1>=0 );.
18fa0 20 20 70 43 75 72 20 3d 20 61 6c 6c 6f 63 61 74    pCur = allocat
18fb0 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e  eCursor(p, pOp->
18fc0 70 31 2c 20 6e 46 69 65 6c 64 2c 20 69 44 62 2c  p1, nField, iDb,
18fd0 20 31 29 3b 0a 20 20 69 66 28 20 70 43 75 72 3d   1);.  if( pCur=
18fe0 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  =0 ) goto no_mem
18ff0 3b 0a 20 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f  ;.  pCur->nullRo
19000 77 20 3d 20 31 3b 0a 20 20 70 43 75 72 2d 3e 69  w = 1;.  pCur->i
19010 73 4f 72 64 65 72 65 64 20 3d 20 31 3b 0a 20 20  sOrdered = 1;.  
19020 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
19030 65 43 75 72 73 6f 72 28 70 58 2c 20 70 32 2c 20  eCursor(pX, p2, 
19040 77 72 46 6c 61 67 2c 20 70 4b 65 79 49 6e 66 6f  wrFlag, pKeyInfo
19050 2c 20 70 43 75 72 2d 3e 70 43 75 72 73 6f 72 29  , pCur->pCursor)
19060 3b 0a 20 20 70 43 75 72 2d 3e 70 4b 65 79 49 6e  ;.  pCur->pKeyIn
19070 66 6f 20 3d 20 70 4b 65 79 49 6e 66 6f 3b 0a 0a  fo = pKeyInfo;..
19080 20 20 2f 2a 20 53 69 6e 63 65 20 69 74 20 70 65    /* Since it pe
19090 72 66 6f 72 6d 73 20 6e 6f 20 6d 65 6d 6f 72 79  rforms no memory
190a0 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 6f 72 20 49   allocation or I
190b0 4f 2c 20 74 68 65 20 6f 6e 6c 79 20 76 61 6c 75  O, the only valu
190c0 65 73 20 74 68 61 74 0a 20 20 2a 2a 20 73 71 6c  es that.  ** sql
190d0 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 28  ite3BtreeCursor(
190e0 29 20 6d 61 79 20 72 65 74 75 72 6e 20 61 72 65  ) may return are
190f0 20 53 51 4c 49 54 45 5f 45 4d 50 54 59 20 61 6e   SQLITE_EMPTY an
19100 64 20 53 51 4c 49 54 45 5f 4f 4b 2e 20 0a 20 20  d SQLITE_OK. .  
19110 2a 2a 20 53 51 4c 49 54 45 5f 45 4d 50 54 59 20  ** SQLITE_EMPTY 
19120 69 73 20 6f 6e 6c 79 20 72 65 74 75 72 6e 65 64  is only returned
19130 20 77 68 65 6e 20 61 74 74 65 6d 70 74 69 6e 67   when attempting
19140 20 74 6f 20 6f 70 65 6e 20 74 68 65 20 74 61 62   to open the tab
19150 6c 65 0a 20 20 2a 2a 20 72 6f 6f 74 65 64 20 61  le.  ** rooted a
19160 74 20 70 61 67 65 20 31 20 6f 66 20 61 20 7a 65  t page 1 of a ze
19170 72 6f 2d 62 79 74 65 20 64 61 74 61 62 61 73 65  ro-byte database
19180 2e 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  .  */.  assert( 
19190 72 63 3d 3d 53 51 4c 49 54 45 5f 45 4d 50 54 59  rc==SQLITE_EMPTY
191a0 20 7c 7c 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f   || rc==SQLITE_O
191b0 4b 20 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53  K );.  if( rc==S
191c0 51 4c 49 54 45 5f 45 4d 50 54 59 20 29 7b 0a 20  QLITE_EMPTY ){. 
191d0 20 20 20 70 43 75 72 2d 3e 70 43 75 72 73 6f 72     pCur->pCursor
191e0 20 3d 20 30 3b 0a 20 20 20 20 72 63 20 3d 20 53   = 0;.    rc = S
191f0 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 7d 0a 0a 20  QLITE_OK;.  }.. 
19200 20 2f 2a 20 53 65 74 20 74 68 65 20 56 64 62 65   /* Set the Vdbe
19210 43 75 72 73 6f 72 2e 69 73 54 61 62 6c 65 20 61  Cursor.isTable a
19220 6e 64 20 69 73 49 6e 64 65 78 20 76 61 72 69 61  nd isIndex varia
19230 62 6c 65 73 2e 20 50 72 65 76 69 6f 75 73 20 76  bles. Previous v
19240 65 72 73 69 6f 6e 73 20 6f 66 0a 20 20 2a 2a 20  ersions of.  ** 
19250 53 51 4c 69 74 65 20 75 73 65 64 20 74 6f 20 63  SQLite used to c
19260 68 65 63 6b 20 69 66 20 74 68 65 20 72 6f 6f 74  heck if the root
19270 2d 70 61 67 65 20 66 6c 61 67 73 20 77 65 72 65  -page flags were
19280 20 73 61 6e 65 20 61 74 20 74 68 69 73 20 70 6f   sane at this po
19290 69 6e 74 0a 20 20 2a 2a 20 61 6e 64 20 72 65 70  int.  ** and rep
192a0 6f 72 74 20 64 61 74 61 62 61 73 65 20 63 6f 72  ort database cor
192b0 72 75 70 74 69 6f 6e 20 69 66 20 74 68 65 79 20  ruption if they 
192c0 77 65 72 65 20 6e 6f 74 2c 20 62 75 74 20 74 68  were not, but th
192d0 69 73 20 63 68 65 63 6b 20 68 61 73 0a 20 20 2a  is check has.  *
192e0 2a 20 73 69 6e 63 65 20 6d 6f 76 65 64 20 69 6e  * since moved in
192f0 74 6f 20 74 68 65 20 62 74 72 65 65 20 6c 61 79  to the btree lay
19300 65 72 2e 20 20 2a 2f 20 20 0a 20 20 70 43 75 72  er.  */  .  pCur
19310 2d 3e 69 73 54 61 62 6c 65 20 3d 20 70 4f 70 2d  ->isTable = pOp-
19320 3e 70 34 74 79 70 65 21 3d 50 34 5f 4b 45 59 49  >p4type!=P4_KEYI
19330 4e 46 4f 3b 0a 20 20 70 43 75 72 2d 3e 69 73 49  NFO;.  pCur->isI
19340 6e 64 65 78 20 3d 20 21 70 43 75 72 2d 3e 69 73  ndex = !pCur->is
19350 54 61 62 6c 65 3b 0a 20 20 62 72 65 61 6b 3b 0a  Table;.  break;.
19360 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70  }../* Opcode: Op
19370 65 6e 45 70 68 65 6d 65 72 61 6c 20 50 31 20 50  enEphemeral P1 P
19380 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 4f  2 * P4 *.**.** O
19390 70 65 6e 20 61 20 6e 65 77 20 63 75 72 73 6f 72  pen a new cursor
193a0 20 50 31 20 74 6f 20 61 20 74 72 61 6e 73 69 65   P1 to a transie
193b0 6e 74 20 74 61 62 6c 65 2e 0a 2a 2a 20 54 68 65  nt table..** The
193c0 20 63 75 72 73 6f 72 20 69 73 20 61 6c 77 61 79   cursor is alway
193d0 73 20 6f 70 65 6e 65 64 20 72 65 61 64 2f 77 72  s opened read/wr
193e0 69 74 65 20 65 76 65 6e 20 69 66 20 0a 2a 2a 20  ite even if .** 
193f0 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
19400 65 20 69 73 20 72 65 61 64 2d 6f 6e 6c 79 2e 20  e is read-only. 
19410 20 54 68 65 20 65 70 68 65 6d 65 72 61 6c 0a 2a   The ephemeral.*
19420 2a 20 74 61 62 6c 65 20 69 73 20 64 65 6c 65 74  * table is delet
19430 65 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  ed automatically
19440 20 77 68 65 6e 20 74 68 65 20 63 75 72 73 6f 72   when the cursor
19450 20 69 73 20 63 6c 6f 73 65 64 2e 0a 2a 2a 0a 2a   is closed..**.*
19460 2a 20 50 32 20 69 73 20 74 68 65 20 6e 75 6d 62  * P2 is the numb
19470 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
19480 20 74 68 65 20 65 70 68 65 6d 65 72 61 6c 20 74   the ephemeral t
19490 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 63 75 72  able..** The cur
194a0 73 6f 72 20 70 6f 69 6e 74 73 20 74 6f 20 61 20  sor points to a 
194b0 42 54 72 65 65 20 74 61 62 6c 65 20 69 66 20 50  BTree table if P
194c0 34 3d 3d 30 20 61 6e 64 20 74 6f 20 61 20 42 54  4==0 and to a BT
194d0 72 65 65 20 69 6e 64 65 78 0a 2a 2a 20 69 66 20  ree index.** if 
194e0 50 34 20 69 73 20 6e 6f 74 20 30 2e 20 20 49 66  P4 is not 0.  If
194f0 20 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c   P4 is not NULL,
19500 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 61 20   it points to a 
19510 4b 65 79 49 6e 66 6f 20 73 74 72 75 63 74 75 72  KeyInfo structur
19520 65 0a 2a 2a 20 74 68 61 74 20 64 65 66 69 6e 65  e.** that define
19530 73 20 74 68 65 20 66 6f 72 6d 61 74 20 6f 66 20  s the format of 
19540 6b 65 79 73 20 69 6e 20 74 68 65 20 69 6e 64 65  keys in the inde
19550 78 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  x..**.** This op
19560 63 6f 64 65 20 77 61 73 20 6f 6e 63 65 20 63 61  code was once ca
19570 6c 6c 65 64 20 4f 70 65 6e 54 65 6d 70 2e 20 20  lled OpenTemp.  
19580 42 75 74 20 74 68 61 74 20 63 72 65 61 74 65 64  But that created
19590 0a 2a 2a 20 63 6f 6e 66 75 73 69 6f 6e 20 62 65  .** confusion be
195a0 63 61 75 73 65 20 74 68 65 20 74 65 72 6d 20 22  cause the term "
195b0 74 65 6d 70 20 74 61 62 6c 65 22 2c 20 6d 69 67  temp table", mig
195c0 68 74 20 72 65 66 65 72 20 65 69 74 68 65 72 0a  ht refer either.
195d0 2a 2a 20 74 6f 20 61 20 54 45 4d 50 20 74 61 62  ** to a TEMP tab
195e0 6c 65 20 61 74 20 74 68 65 20 53 51 4c 20 6c 65  le at the SQL le
195f0 76 65 6c 2c 20 6f 72 20 74 6f 20 61 20 74 61 62  vel, or to a tab
19600 6c 65 20 6f 70 65 6e 65 64 20 62 79 0a 2a 2a 20  le opened by.** 
19610 74 68 69 73 20 6f 70 63 6f 64 65 2e 20 20 54 68  this opcode.  Th
19620 65 6e 20 74 68 69 73 20 6f 70 63 6f 64 65 20 77  en this opcode w
19630 61 73 20 63 61 6c 6c 20 4f 70 65 6e 56 69 72 74  as call OpenVirt
19640 75 61 6c 2e 20 20 42 75 74 0a 2a 2a 20 74 68 61  ual.  But.** tha
19650 74 20 63 72 65 61 74 65 64 20 63 6f 6e 66 75 73  t created confus
19660 69 6f 6e 20 77 69 74 68 20 74 68 65 20 77 68 6f  ion with the who
19670 6c 65 20 76 69 72 74 75 61 6c 2d 74 61 62 6c 65  le virtual-table
19680 20 69 64 65 61 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63   idea..*/./* Opc
19690 6f 64 65 3a 20 4f 70 65 6e 41 75 74 6f 69 6e 64  ode: OpenAutoind
196a0 65 78 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a  ex P1 P2 * P4 *.
196b0 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
196c0 65 20 77 6f 72 6b 73 20 74 68 65 20 73 61 6d 65  e works the same
196d0 20 61 73 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d   as OP_OpenEphem
196e0 65 72 61 6c 2e 20 20 49 74 20 68 61 73 20 61 0a  eral.  It has a.
196f0 2a 2a 20 64 69 66 66 65 72 65 6e 74 20 6e 61 6d  ** different nam
19700 65 20 74 6f 20 64 69 73 74 69 6e 67 75 69 73 68  e to distinguish
19710 20 69 74 73 20 75 73 65 2e 20 20 54 61 62 6c 65   its use.  Table
19720 73 20 63 72 65 61 74 65 64 20 75 73 69 6e 67 0a  s created using.
19730 2a 2a 20 62 79 20 74 68 69 73 20 6f 70 63 6f 64  ** by this opcod
19740 65 20 77 69 6c 6c 20 62 65 20 75 73 65 64 20 66  e will be used f
19750 6f 72 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  or automatically
19760 20 63 72 65 61 74 65 64 20 74 72 61 6e 73 69 65   created transie
19770 6e 74 0a 2a 2a 20 69 6e 64 69 63 65 73 20 69 6e  nt.** indices in
19780 20 6a 6f 69 6e 73 2e 0a 2a 2f 0a 63 61 73 65 20   joins..*/.case 
19790 4f 50 5f 4f 70 65 6e 41 75 74 6f 69 6e 64 65 78  OP_OpenAutoindex
197a0 3a 20 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 45  : .case OP_OpenE
197b0 70 68 65 6d 65 72 61 6c 3a 20 7b 0a 20 20 56 64  phemeral: {.  Vd
197c0 62 65 43 75 72 73 6f 72 20 2a 70 43 78 3b 0a 20  beCursor *pCx;. 
197d0 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 69 6e   static const in
197e0 74 20 76 66 73 46 6c 61 67 73 20 3d 20 0a 20 20  t vfsFlags = .  
197f0 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f      SQLITE_OPEN_
19800 52 45 41 44 57 52 49 54 45 20 7c 0a 20 20 20 20  READWRITE |.    
19810 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 43 52    SQLITE_OPEN_CR
19820 45 41 54 45 20 7c 0a 20 20 20 20 20 20 53 51 4c  EATE |.      SQL
19830 49 54 45 5f 4f 50 45 4e 5f 45 58 43 4c 55 53 49  ITE_OPEN_EXCLUSI
19840 56 45 20 7c 0a 20 20 20 20 20 20 53 51 4c 49 54  VE |.      SQLIT
19850 45 5f 4f 50 45 4e 5f 44 45 4c 45 54 45 4f 4e 43  E_OPEN_DELETEONC
19860 4c 4f 53 45 20 7c 0a 20 20 20 20 20 20 53 51 4c  LOSE |.      SQL
19870 49 54 45 5f 4f 50 45 4e 5f 54 52 41 4e 53 49 45  ITE_OPEN_TRANSIE
19880 4e 54 5f 44 42 3b 0a 0a 20 20 61 73 73 65 72 74  NT_DB;..  assert
19890 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a  ( pOp->p1>=0 );.
198a0 20 20 70 43 78 20 3d 20 61 6c 6c 6f 63 61 74 65    pCx = allocate
198b0 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70  Cursor(p, pOp->p
198c0 31 2c 20 70 4f 70 2d 3e 70 32 2c 20 2d 31 2c 20  1, pOp->p2, -1, 
198d0 31 29 3b 0a 20 20 69 66 28 20 70 43 78 3d 3d 30  1);.  if( pCx==0
198e0 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
198f0 20 20 70 43 78 2d 3e 6e 75 6c 6c 52 6f 77 20 3d    pCx->nullRow =
19900 20 31 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   1;.  rc = sqlit
19910 65 33 42 74 72 65 65 4f 70 65 6e 28 64 62 2d 3e  e3BtreeOpen(db->
19920 70 56 66 73 2c 20 30 2c 20 64 62 2c 20 26 70 43  pVfs, 0, db, &pC
19930 78 2d 3e 70 42 74 2c 20 0a 20 20 20 20 20 20 20  x->pBt, .       
19940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19950 20 42 54 52 45 45 5f 4f 4d 49 54 5f 4a 4f 55 52   BTREE_OMIT_JOUR
19960 4e 41 4c 20 7c 20 42 54 52 45 45 5f 53 49 4e 47  NAL | BTREE_SING
19970 4c 45 20 7c 20 70 4f 70 2d 3e 70 35 2c 20 76 66  LE | pOp->p5, vf
19980 73 46 6c 61 67 73 29 3b 0a 20 20 69 66 28 20 72  sFlags);.  if( r
19990 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
199a0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
199b0 42 74 72 65 65 42 65 67 69 6e 54 72 61 6e 73 28  BtreeBeginTrans(
199c0 70 43 78 2d 3e 70 42 74 2c 20 31 29 3b 0a 20 20  pCx->pBt, 1);.  
199d0 7d 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49  }.  if( rc==SQLI
199e0 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 2f 2a 20  TE_OK ){.    /* 
199f0 49 66 20 61 20 74 72 61 6e 73 69 65 6e 74 20 69  If a transient i
19a00 6e 64 65 78 20 69 73 20 72 65 71 75 69 72 65 64  ndex is required
19a10 2c 20 63 72 65 61 74 65 20 69 74 20 62 79 20 63  , create it by c
19a20 61 6c 6c 69 6e 67 0a 20 20 20 20 2a 2a 20 73 71  alling.    ** sq
19a30 6c 69 74 65 33 42 74 72 65 65 43 72 65 61 74 65  lite3BtreeCreate
19a40 54 61 62 6c 65 28 29 20 77 69 74 68 20 74 68 65  Table() with the
19a50 20 42 54 52 45 45 5f 42 4c 4f 42 4b 45 59 20 66   BTREE_BLOBKEY f
19a60 6c 61 67 20 62 65 66 6f 72 65 0a 20 20 20 20 2a  lag before.    *
19a70 2a 20 6f 70 65 6e 69 6e 67 20 69 74 2e 20 49 66  * opening it. If
19a80 20 61 20 74 72 61 6e 73 69 65 6e 74 20 74 61 62   a transient tab
19a90 6c 65 20 69 73 20 72 65 71 75 69 72 65 64 2c 20  le is required, 
19aa0 6a 75 73 74 20 75 73 65 20 74 68 65 0a 20 20 20  just use the.   
19ab0 20 2a 2a 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c   ** automaticall
19ac0 79 20 63 72 65 61 74 65 64 20 74 61 62 6c 65 20  y created table 
19ad0 77 69 74 68 20 72 6f 6f 74 2d 70 61 67 65 20 31  with root-page 1
19ae0 20 28 61 6e 20 42 4c 4f 42 5f 49 4e 54 4b 45 59   (an BLOB_INTKEY
19af0 20 74 61 62 6c 65 29 2e 0a 20 20 20 20 2a 2f 0a   table)..    */.
19b00 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 2e      if( pOp->p4.
19b10 70 4b 65 79 49 6e 66 6f 20 29 7b 0a 20 20 20 20  pKeyInfo ){.    
19b20 20 20 69 6e 74 20 70 67 6e 6f 3b 0a 20 20 20 20    int pgno;.    
19b30 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
19b40 34 74 79 70 65 3d 3d 50 34 5f 4b 45 59 49 4e 46  4type==P4_KEYINF
19b50 4f 20 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  O );.      rc = 
19b60 73 71 6c 69 74 65 33 42 74 72 65 65 43 72 65 61  sqlite3BtreeCrea
19b70 74 65 54 61 62 6c 65 28 70 43 78 2d 3e 70 42 74  teTable(pCx->pBt
19b80 2c 20 26 70 67 6e 6f 2c 20 42 54 52 45 45 5f 42  , &pgno, BTREE_B
19b90 4c 4f 42 4b 45 59 29 3b 20 0a 20 20 20 20 20 20  LOBKEY); .      
19ba0 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
19bb0 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73  K ){.        ass
19bc0 65 72 74 28 20 70 67 6e 6f 3d 3d 4d 41 53 54 45  ert( pgno==MASTE
19bd0 52 5f 52 4f 4f 54 2b 31 20 29 3b 0a 20 20 20 20  R_ROOT+1 );.    
19be0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
19bf0 42 74 72 65 65 43 75 72 73 6f 72 28 70 43 78 2d  BtreeCursor(pCx-
19c00 3e 70 42 74 2c 20 70 67 6e 6f 2c 20 31 2c 20 0a  >pBt, pgno, 1, .
19c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19c30 28 4b 65 79 49 6e 66 6f 2a 29 70 4f 70 2d 3e 70  (KeyInfo*)pOp->p
19c40 34 2e 7a 2c 20 70 43 78 2d 3e 70 43 75 72 73 6f  4.z, pCx->pCurso
19c50 72 29 3b 0a 20 20 20 20 20 20 20 20 70 43 78 2d  r);.        pCx-
19c60 3e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d  >pKeyInfo = pOp-
19c70 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20  >p4.pKeyInfo;.  
19c80 20 20 20 20 20 20 70 43 78 2d 3e 70 4b 65 79 49        pCx->pKeyI
19c90 6e 66 6f 2d 3e 65 6e 63 20 3d 20 45 4e 43 28 70  nfo->enc = ENC(p
19ca0 2d 3e 64 62 29 3b 0a 20 20 20 20 20 20 7d 0a 20  ->db);.      }. 
19cb0 20 20 20 20 20 70 43 78 2d 3e 69 73 54 61 62 6c       pCx->isTabl
19cc0 65 20 3d 20 30 3b 0a 20 20 20 20 7d 65 6c 73 65  e = 0;.    }else
19cd0 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  {.      rc = sql
19ce0 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 28  ite3BtreeCursor(
19cf0 70 43 78 2d 3e 70 42 74 2c 20 4d 41 53 54 45 52  pCx->pBt, MASTER
19d00 5f 52 4f 4f 54 2c 20 31 2c 20 30 2c 20 70 43 78  _ROOT, 1, 0, pCx
19d10 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20  ->pCursor);.    
19d20 20 20 70 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d    pCx->isTable =
19d30 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20   1;.    }.  }.  
19d40 70 43 78 2d 3e 69 73 4f 72 64 65 72 65 64 20 3d  pCx->isOrdered =
19d50 20 28 70 4f 70 2d 3e 70 35 21 3d 42 54 52 45 45   (pOp->p5!=BTREE
19d60 5f 55 4e 4f 52 44 45 52 45 44 29 3b 0a 20 20 70  _UNORDERED);.  p
19d70 43 78 2d 3e 69 73 49 6e 64 65 78 20 3d 20 21 70  Cx->isIndex = !p
19d80 43 78 2d 3e 69 73 54 61 62 6c 65 3b 0a 20 20 62  Cx->isTable;.  b
19d90 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
19da0 64 65 3a 20 4f 70 65 6e 50 73 65 75 64 6f 20 50  de: OpenPseudo P
19db0 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
19dc0 2a 20 4f 70 65 6e 20 61 20 6e 65 77 20 63 75 72  * Open a new cur
19dd0 73 6f 72 20 74 68 61 74 20 70 6f 69 6e 74 73 20  sor that points 
19de0 74 6f 20 61 20 66 61 6b 65 20 74 61 62 6c 65 20  to a fake table 
19df0 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 61 20  that contains a 
19e00 73 69 6e 67 6c 65 0a 2a 2a 20 72 6f 77 20 6f 66  single.** row of
19e10 20 64 61 74 61 2e 20 20 54 68 65 20 63 6f 6e 74   data.  The cont
19e20 65 6e 74 20 6f 66 20 74 68 61 74 20 6f 6e 65 20  ent of that one 
19e30 72 6f 77 20 69 6e 20 74 68 65 20 63 6f 6e 74 65  row in the conte
19e40 6e 74 20 6f 66 20 6d 65 6d 6f 72 79 0a 2a 2a 20  nt of memory.** 
19e50 72 65 67 69 73 74 65 72 20 50 32 2e 20 20 49 6e  register P2.  In
19e60 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 63 75   other words, cu
19e70 72 73 6f 72 20 50 31 20 62 65 63 6f 6d 65 73 20  rsor P1 becomes 
19e80 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 74 68 65  an alias for the
19e90 20 0a 2a 2a 20 4d 45 4d 5f 42 6c 6f 62 20 63 6f   .** MEM_Blob co
19ea0 6e 74 65 6e 74 20 63 6f 6e 74 61 69 6e 65 64 20  ntent contained 
19eb0 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  in register P2..
19ec0 2a 2a 0a 2a 2a 20 41 20 70 73 65 75 64 6f 2d 74  **.** A pseudo-t
19ed0 61 62 6c 65 20 63 72 65 61 74 65 64 20 62 79 20  able created by 
19ee0 74 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 75  this opcode is u
19ef0 73 65 64 20 74 6f 20 68 6f 6c 64 20 61 20 73 69  sed to hold a si
19f00 6e 67 6c 65 0a 2a 2a 20 72 6f 77 20 6f 75 74 70  ngle.** row outp
19f10 75 74 20 66 72 6f 6d 20 74 68 65 20 73 6f 72 74  ut from the sort
19f20 65 72 20 73 6f 20 74 68 61 74 20 74 68 65 20 72  er so that the r
19f30 6f 77 20 63 61 6e 20 62 65 20 64 65 63 6f 6d 70  ow can be decomp
19f40 6f 73 65 64 20 69 6e 74 6f 0a 2a 2a 20 69 6e 64  osed into.** ind
19f50 69 76 69 64 75 61 6c 20 63 6f 6c 75 6d 6e 73 20  ividual columns 
19f60 75 73 69 6e 67 20 74 68 65 20 4f 50 5f 43 6f 6c  using the OP_Col
19f70 75 6d 6e 20 6f 70 63 6f 64 65 2e 20 20 54 68 65  umn opcode.  The
19f80 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64   OP_Column opcod
19f90 65 0a 2a 2a 20 69 73 20 74 68 65 20 6f 6e 6c 79  e.** is the only
19fa0 20 63 75 72 73 6f 72 20 6f 70 63 6f 64 65 20 74   cursor opcode t
19fb0 68 61 74 20 77 6f 72 6b 73 20 77 69 74 68 20 61  hat works with a
19fc0 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a   pseudo-table..*
19fd0 2a 0a 2a 2a 20 50 33 20 69 73 20 74 68 65 20 6e  *.** P3 is the n
19fe0 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20  umber of fields 
19ff0 69 6e 20 74 68 65 20 72 65 63 6f 72 64 73 20 74  in the records t
1a000 68 61 74 20 77 69 6c 6c 20 62 65 20 73 74 6f 72  hat will be stor
1a010 65 64 20 62 79 0a 2a 2a 20 74 68 65 20 70 73 65  ed by.** the pse
1a020 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61  udo-table..*/.ca
1a030 73 65 20 4f 50 5f 4f 70 65 6e 50 73 65 75 64 6f  se OP_OpenPseudo
1a040 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  : {.  VdbeCursor
1a050 20 2a 70 43 78 3b 0a 0a 20 20 61 73 73 65 72 74   *pCx;..  assert
1a060 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a  ( pOp->p1>=0 );.
1a070 20 20 70 43 78 20 3d 20 61 6c 6c 6f 63 61 74 65    pCx = allocate
1a080 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70  Cursor(p, pOp->p
1a090 31 2c 20 70 4f 70 2d 3e 70 33 2c 20 2d 31 2c 20  1, pOp->p3, -1, 
1a0a0 30 29 3b 0a 20 20 69 66 28 20 70 43 78 3d 3d 30  0);.  if( pCx==0
1a0b0 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
1a0c0 20 20 70 43 78 2d 3e 6e 75 6c 6c 52 6f 77 20 3d    pCx->nullRow =
1a0d0 20 31 3b 0a 20 20 70 43 78 2d 3e 70 73 65 75 64   1;.  pCx->pseud
1a0e0 6f 54 61 62 6c 65 52 65 67 20 3d 20 70 4f 70 2d  oTableReg = pOp-
1a0f0 3e 70 32 3b 0a 20 20 70 43 78 2d 3e 69 73 54 61  >p2;.  pCx->isTa
1a100 62 6c 65 20 3d 20 31 3b 0a 20 20 70 43 78 2d 3e  ble = 1;.  pCx->
1a110 69 73 49 6e 64 65 78 20 3d 20 30 3b 0a 20 20 62  isIndex = 0;.  b
1a120 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
1a130 64 65 3a 20 43 6c 6f 73 65 20 50 31 20 2a 20 2a  de: Close P1 * *
1a140 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 6c 6f 73 65   * *.**.** Close
1a150 20 61 20 63 75 72 73 6f 72 20 70 72 65 76 69 6f   a cursor previo
1a160 75 73 6c 79 20 6f 70 65 6e 65 64 20 61 73 20 50  usly opened as P
1a170 31 2e 20 20 49 66 20 50 31 20 69 73 20 6e 6f 74  1.  If P1 is not
1a180 0a 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20 6f 70  .** currently op
1a190 65 6e 2c 20 74 68 69 73 20 69 6e 73 74 72 75 63  en, this instruc
1a1a0 74 69 6f 6e 20 69 73 20 61 20 6e 6f 2d 6f 70 2e  tion is a no-op.
1a1b0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6c 6f 73  .*/.case OP_Clos
1a1c0 65 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70  e: {.  assert( p
1a1d0 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
1a1e0 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
1a1f0 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  );.  sqlite3Vdbe
1a200 46 72 65 65 43 75 72 73 6f 72 28 70 2c 20 70 2d  FreeCursor(p, p-
1a210 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 29  >apCsr[pOp->p1])
1a220 3b 0a 20 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  ;.  p->apCsr[pOp
1a230 2d 3e 70 31 5d 20 3d 20 30 3b 0a 20 20 62 72 65  ->p1] = 0;.  bre
1a240 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
1a250 3a 20 53 65 65 6b 47 65 20 50 31 20 50 32 20 50  : SeekGe P1 P2 P
1a260 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20  3 P4 *.**.** If 
1a270 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73  cursor P1 refers
1a280 20 74 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c 65   to an SQL table
1a290 20 28 42 2d 54 72 65 65 20 74 68 61 74 20 75 73   (B-Tree that us
1a2a0 65 73 20 69 6e 74 65 67 65 72 20 6b 65 79 73 29  es integer keys)
1a2b0 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65 20 76 61  , .** use the va
1a2c0 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
1a2d0 50 33 20 61 73 20 74 68 65 20 6b 65 79 2e 20 20  P3 as the key.  
1a2e0 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66  If cursor P1 ref
1a2f0 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51  ers .** to an SQ
1a300 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 50 33  L index, then P3
1a310 20 69 73 20 74 68 65 20 66 69 72 73 74 20 69 6e   is the first in
1a320 20 61 6e 20 61 72 72 61 79 20 6f 66 20 50 34 20   an array of P4 
1a330 72 65 67 69 73 74 65 72 73 20 0a 2a 2a 20 74 68  registers .** th
1a340 61 74 20 61 72 65 20 75 73 65 64 20 61 73 20 61  at are used as a
1a350 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78  n unpacked index
1a360 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70   key. .**.** Rep
1a370 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50  osition cursor P
1a380 31 20 73 6f 20 74 68 61 74 20 20 69 74 20 70 6f  1 so that  it po
1a390 69 6e 74 73 20 74 6f 20 74 68 65 20 73 6d 61 6c  ints to the smal
1a3a0 6c 65 73 74 20 65 6e 74 72 79 20 74 68 61 74 20  lest entry that 
1a3b0 0a 2a 2a 20 69 73 20 67 72 65 61 74 65 72 20 74  .** is greater t
1a3c0 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20  han or equal to 
1a3d0 74 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20 49  the key value. I
1a3e0 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72  f there are no r
1a3f0 65 63 6f 72 64 73 20 0a 2a 2a 20 67 72 65 61 74  ecords .** great
1a400 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c  er than or equal
1a410 20 74 6f 20 74 68 65 20 6b 65 79 20 61 6e 64 20   to the key and 
1a420 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20  P2 is not zero, 
1a430 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e  then jump to P2.
1a440 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
1a450 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64   Found, NotFound
1a460 2c 20 44 69 73 74 69 6e 63 74 2c 20 53 65 65 6b  , Distinct, Seek
1a470 4c 74 2c 20 53 65 65 6b 47 74 2c 20 53 65 65 6b  Lt, SeekGt, Seek
1a480 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  Le.*/./* Opcode:
1a490 20 53 65 65 6b 47 74 20 50 31 20 50 32 20 50 33   SeekGt P1 P2 P3
1a4a0 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 63   P4 *.**.** If c
1a4b0 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20  ursor P1 refers 
1a4c0 74 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20  to an SQL table 
1a4d0 28 42 2d 54 72 65 65 20 74 68 61 74 20 75 73 65  (B-Tree that use
1a4e0 73 20 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c  s integer keys),
1a4f0 20 0a 2a 2a 20 75 73 65 20 74 68 65 20 76 61 6c   .** use the val
1a500 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
1a510 33 20 61 73 20 61 20 6b 65 79 2e 20 49 66 20 63  3 as a key. If c
1a520 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20  ursor P1 refers 
1a530 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e  .** to an SQL in
1a540 64 65 78 2c 20 74 68 65 6e 20 50 33 20 69 73 20  dex, then P3 is 
1a550 74 68 65 20 66 69 72 73 74 20 69 6e 20 61 6e 20  the first in an 
1a560 61 72 72 61 79 20 6f 66 20 50 34 20 72 65 67 69  array of P4 regi
1a570 73 74 65 72 73 20 0a 2a 2a 20 74 68 61 74 20 61  sters .** that a
1a580 72 65 20 75 73 65 64 20 61 73 20 61 6e 20 75 6e  re used as an un
1a590 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79  packed index key
1a5a0 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74  . .**.** Reposit
1a5b0 69 6f 6e 20 63 75 72 73 6f 72 20 50 31 20 73 6f  ion cursor P1 so
1a5c0 20 74 68 61 74 20 20 69 74 20 70 6f 69 6e 74 73   that  it points
1a5d0 20 74 6f 20 74 68 65 20 73 6d 61 6c 6c 65 73 74   to the smallest
1a5e0 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a 20   entry that .** 
1a5f0 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  is greater than 
1a600 74 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20 49  the key value. I
1a610 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72  f there are no r
1a620 65 63 6f 72 64 73 20 67 72 65 61 74 65 72 20 74  ecords greater t
1a630 68 61 6e 20 0a 2a 2a 20 74 68 65 20 6b 65 79 20  han .** the key 
1a640 61 6e 64 20 50 32 20 69 73 20 6e 6f 74 20 7a 65  and P2 is not ze
1a650 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f  ro, then jump to
1a660 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61   P2..**.** See a
1a670 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46  lso: Found, NotF
1a680 6f 75 6e 64 2c 20 44 69 73 74 69 6e 63 74 2c 20  ound, Distinct, 
1a690 53 65 65 6b 4c 74 2c 20 53 65 65 6b 47 65 2c 20  SeekLt, SeekGe, 
1a6a0 53 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63  SeekLe.*/./* Opc
1a6b0 6f 64 65 3a 20 53 65 65 6b 4c 74 20 50 31 20 50  ode: SeekLt P1 P
1a6c0 32 20 50 33 20 50 34 20 2a 20 0a 2a 2a 0a 2a 2a  2 P3 P4 * .**.**
1a6d0 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65   If cursor P1 re
1a6e0 66 65 72 73 20 74 6f 20 61 6e 20 53 51 4c 20 74  fers to an SQL t
1a6f0 61 62 6c 65 20 28 42 2d 54 72 65 65 20 74 68 61  able (B-Tree tha
1a700 74 20 75 73 65 73 20 69 6e 74 65 67 65 72 20 6b  t uses integer k
1a710 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68  eys), .** use th
1a720 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
1a730 74 65 72 20 50 33 20 61 73 20 61 20 6b 65 79 2e  ter P3 as a key.
1a740 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65   If cursor P1 re
1a750 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53  fers .** to an S
1a760 51 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 50  QL index, then P
1a770 33 20 69 73 20 74 68 65 20 66 69 72 73 74 20 69  3 is the first i
1a780 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20 50 34  n an array of P4
1a790 20 72 65 67 69 73 74 65 72 73 20 0a 2a 2a 20 74   registers .** t
1a7a0 68 61 74 20 61 72 65 20 75 73 65 64 20 61 73 20  hat are used as 
1a7b0 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65  an unpacked inde
1a7c0 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65  x key. .**.** Re
1a7d0 70 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20  position cursor 
1a7e0 50 31 20 73 6f 20 74 68 61 74 20 20 69 74 20 70  P1 so that  it p
1a7f0 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 6c 61 72  oints to the lar
1a800 67 65 73 74 20 65 6e 74 72 79 20 74 68 61 74 20  gest entry that 
1a810 0a 2a 2a 20 69 73 20 6c 65 73 73 20 74 68 61 6e  .** is less than
1a820 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20   the key value. 
1a830 49 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20  If there are no 
1a840 72 65 63 6f 72 64 73 20 6c 65 73 73 20 74 68 61  records less tha
1a850 6e 20 0a 2a 2a 20 74 68 65 20 6b 65 79 20 61 6e  n .** the key an
1a860 64 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f  d P2 is not zero
1a870 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50  , then jump to P
1a880 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  2..**.** See als
1a890 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75  o: Found, NotFou
1a8a0 6e 64 2c 20 44 69 73 74 69 6e 63 74 2c 20 53 65  nd, Distinct, Se
1a8b0 65 6b 47 74 2c 20 53 65 65 6b 47 65 2c 20 53 65  ekGt, SeekGe, Se
1a8c0 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ekLe.*/./* Opcod
1a8d0 65 3a 20 53 65 65 6b 4c 65 20 50 31 20 50 32 20  e: SeekLe P1 P2 
1a8e0 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 49 66  P3 P4 *.**.** If
1a8f0 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72   cursor P1 refer
1a900 73 20 74 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c  s to an SQL tabl
1a910 65 20 28 42 2d 54 72 65 65 20 74 68 61 74 20 75  e (B-Tree that u
1a920 73 65 73 20 69 6e 74 65 67 65 72 20 6b 65 79 73  ses integer keys
1a930 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65 20 76  ), .** use the v
1a940 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
1a950 20 50 33 20 61 73 20 61 20 6b 65 79 2e 20 49 66   P3 as a key. If
1a960 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72   cursor P1 refer
1a970 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20  s .** to an SQL 
1a980 69 6e 64 65 78 2c 20 74 68 65 6e 20 50 33 20 69  index, then P3 i
1a990 73 20 74 68 65 20 66 69 72 73 74 20 69 6e 20 61  s the first in a
1a9a0 6e 20 61 72 72 61 79 20 6f 66 20 50 34 20 72 65  n array of P4 re
1a9b0 67 69 73 74 65 72 73 20 0a 2a 2a 20 74 68 61 74  gisters .** that
1a9c0 20 61 72 65 20 75 73 65 64 20 61 73 20 61 6e 20   are used as an 
1a9d0 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b  unpacked index k
1a9e0 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73  ey. .**.** Repos
1a9f0 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50 31 20  ition cursor P1 
1aa00 73 6f 20 74 68 61 74 20 69 74 20 70 6f 69 6e 74  so that it point
1aa10 73 20 74 6f 20 74 68 65 20 6c 61 72 67 65 73 74  s to the largest
1aa20 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a 20   entry that .** 
1aa30 69 73 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20  is less than or 
1aa40 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79  equal to the key
1aa50 20 76 61 6c 75 65 2e 20 49 66 20 74 68 65 72 65   value. If there
1aa60 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20   are no records 
1aa70 0a 2a 2a 20 6c 65 73 73 20 74 68 61 6e 20 6f 72  .** less than or
1aa80 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65   equal to the ke
1aa90 79 20 61 6e 64 20 50 32 20 69 73 20 6e 6f 74 20  y and P2 is not 
1aaa0 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20  zero, then jump 
1aab0 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  to P2..**.** See
1aac0 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f   also: Found, No
1aad0 74 46 6f 75 6e 64 2c 20 44 69 73 74 69 6e 63 74  tFound, Distinct
1aae0 2c 20 53 65 65 6b 47 74 2c 20 53 65 65 6b 47 65  , SeekGt, SeekGe
1aaf0 2c 20 53 65 65 6b 4c 74 0a 2a 2f 0a 63 61 73 65  , SeekLt.*/.case
1ab00 20 4f 50 5f 53 65 65 6b 4c 74 3a 20 20 20 20 20   OP_SeekLt:     
1ab10 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33      /* jump, in3
1ab20 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b   */.case OP_Seek
1ab30 4c 65 3a 20 20 20 20 20 20 20 20 20 2f 2a 20 6a  Le:         /* j
1ab40 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65  ump, in3 */.case
1ab50 20 4f 50 5f 53 65 65 6b 47 65 3a 20 20 20 20 20   OP_SeekGe:     
1ab60 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33      /* jump, in3
1ab70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b   */.case OP_Seek
1ab80 47 74 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20 6a  Gt: {       /* j
1ab90 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e  ump, in3 */.  in
1aba0 74 20 72 65 73 3b 0a 20 20 69 6e 74 20 6f 63 3b  t res;.  int oc;
1abb0 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
1abc0 43 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63  C;.  UnpackedRec
1abd0 6f 72 64 20 72 3b 0a 20 20 69 6e 74 20 6e 46 69  ord r;.  int nFi
1abe0 65 6c 64 3b 0a 20 20 69 36 34 20 69 4b 65 79 3b  eld;.  i64 iKey;
1abf0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 72 6f 77        /* The row
1ac00 69 64 20 77 65 20 61 72 65 20 74 6f 20 73 65 65  id we are to see
1ac10 6b 20 74 6f 20 2a 2f 0a 0a 20 20 61 73 73 65 72  k to */..  asser
1ac20 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
1ac30 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
1ac40 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28  sor );.  assert(
1ac50 20 70 4f 70 2d 3e 70 32 21 3d 30 20 29 3b 0a 20   pOp->p2!=0 );. 
1ac60 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
1ac70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
1ac80 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73  t( pC!=0 );.  as
1ac90 73 65 72 74 28 20 70 43 2d 3e 70 73 65 75 64 6f  sert( pC->pseudo
1aca0 54 61 62 6c 65 52 65 67 3d 3d 30 20 29 3b 0a 20  TableReg==0 );. 
1acb0 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b   assert( OP_Seek
1acc0 4c 65 20 3d 3d 20 4f 50 5f 53 65 65 6b 4c 74 2b  Le == OP_SeekLt+
1acd0 31 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 4f  1 );.  assert( O
1ace0 50 5f 53 65 65 6b 47 65 20 3d 3d 20 4f 50 5f 53  P_SeekGe == OP_S
1acf0 65 65 6b 4c 74 2b 32 20 29 3b 0a 20 20 61 73 73  eekLt+2 );.  ass
1ad00 65 72 74 28 20 4f 50 5f 53 65 65 6b 47 74 20 3d  ert( OP_SeekGt =
1ad10 3d 20 4f 50 5f 53 65 65 6b 4c 74 2b 33 20 29 3b  = OP_SeekLt+3 );
1ad20 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69  .  assert( pC->i
1ad30 73 4f 72 64 65 72 65 64 20 29 3b 0a 20 20 69 66  sOrdered );.  if
1ad40 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30  ( pC->pCursor!=0
1ad50 20 29 7b 0a 20 20 20 20 6f 63 20 3d 20 70 4f 70   ){.    oc = pOp
1ad60 2d 3e 6f 70 63 6f 64 65 3b 0a 20 20 20 20 70 43  ->opcode;.    pC
1ad70 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20  ->nullRow = 0;. 
1ad80 20 20 20 69 66 28 20 70 43 2d 3e 69 73 54 61 62     if( pC->isTab
1ad90 6c 65 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 54  le ){.      /* T
1ada0 68 65 20 69 6e 70 75 74 20 76 61 6c 75 65 20 69  he input value i
1adb0 6e 20 50 33 20 6d 69 67 68 74 20 62 65 20 6f 66  n P3 might be of
1adc0 20 61 6e 79 20 74 79 70 65 3a 20 69 6e 74 65 67   any type: integ
1add0 65 72 2c 20 72 65 61 6c 2c 20 73 74 72 69 6e 67  er, real, string
1ade0 2c 0a 20 20 20 20 20 20 2a 2a 20 62 6c 6f 62 2c  ,.      ** blob,
1adf0 20 6f 72 20 4e 55 4c 4c 2e 20 20 42 75 74 20 69   or NULL.  But i
1ae00 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20 61 6e  t needs to be an
1ae10 20 69 6e 74 65 67 65 72 20 62 65 66 6f 72 65 20   integer before 
1ae20 77 65 20 63 61 6e 20 64 6f 0a 20 20 20 20 20 20  we can do.      
1ae30 2a 2a 20 74 68 65 20 73 65 65 6b 2c 20 73 6f 20  ** the seek, so 
1ae40 63 6f 76 65 72 74 20 69 74 2e 20 2a 2f 0a 20 20  covert it. */.  
1ae50 20 20 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d      pIn3 = &aMem
1ae60 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 20  [pOp->p3];.     
1ae70 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66   applyNumericAff
1ae80 69 6e 69 74 79 28 70 49 6e 33 29 3b 0a 20 20 20  inity(pIn3);.   
1ae90 20 20 20 69 4b 65 79 20 3d 20 73 71 6c 69 74 65     iKey = sqlite
1aea0 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49  3VdbeIntValue(pI
1aeb0 6e 33 29 3b 0a 20 20 20 20 20 20 70 43 2d 3e 72  n3);.      pC->r
1aec0 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b  owidIsValid = 0;
1aed0 0a 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68  ..      /* If th
1aee0 65 20 50 33 20 76 61 6c 75 65 20 63 6f 75 6c 64  e P3 value could
1aef0 20 6e 6f 74 20 62 65 20 63 6f 6e 76 65 72 74 65   not be converte
1af00 64 20 69 6e 74 6f 20 61 6e 20 69 6e 74 65 67 65  d into an intege
1af10 72 20 77 69 74 68 6f 75 74 0a 20 20 20 20 20 20  r without.      
1af20 2a 2a 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72  ** loss of infor
1af30 6d 61 74 69 6f 6e 2c 20 74 68 65 6e 20 73 70 65  mation, then spe
1af40 63 69 61 6c 20 70 72 6f 63 65 73 73 69 6e 67 20  cial processing 
1af50 69 73 20 72 65 71 75 69 72 65 64 2e 2e 2e 20 2a  is required... *
1af60 2f 0a 20 20 20 20 20 20 69 66 28 20 28 70 49 6e  /.      if( (pIn
1af70 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  3->flags & MEM_I
1af80 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  nt)==0 ){.      
1af90 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61    if( (pIn3->fla
1afa0 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 29 3d 3d  gs & MEM_Real)==
1afb0 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 2f  0 ){.          /
1afc0 2a 20 49 66 20 74 68 65 20 50 33 20 76 61 6c 75  * If the P3 valu
1afd0 65 20 63 61 6e 6e 6f 74 20 62 65 20 63 6f 6e 76  e cannot be conv
1afe0 65 72 74 65 64 20 69 6e 74 6f 20 61 6e 79 20 6b  erted into any k
1aff0 69 6e 64 20 6f 66 20 61 20 6e 75 6d 62 65 72 2c  ind of a number,
1b000 0a 20 20 20 20 20 20 20 20 20 20 2a 2a 20 74 68  .          ** th
1b010 65 6e 20 74 68 65 20 73 65 65 6b 20 69 73 20 6e  en the seek is n
1b020 6f 74 20 70 6f 73 73 69 62 6c 65 2c 20 73 6f 20  ot possible, so 
1b030 6a 75 6d 70 20 74 6f 20 50 32 20 2a 2f 0a 20 20  jump to P2 */.  
1b040 20 20 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70          pc = pOp
1b050 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 20 20  ->p2 - 1;.      
1b060 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
1b070 20 20 20 7d 0a 20 20 20 20 20 20 20 20 2f 2a 20     }.        /* 
1b080 49 66 20 77 65 20 72 65 61 63 68 20 74 68 69 73  If we reach this
1b090 20 70 6f 69 6e 74 2c 20 74 68 65 6e 20 74 68 65   point, then the
1b0a0 20 50 33 20 76 61 6c 75 65 20 6d 75 73 74 20 62   P3 value must b
1b0b0 65 20 61 20 66 6c 6f 61 74 69 6e 67 0a 20 20 20  e a floating.   
1b0c0 20 20 20 20 20 2a 2a 20 70 6f 69 6e 74 20 6e 75       ** point nu
1b0d0 6d 62 65 72 2e 20 2a 2f 0a 20 20 20 20 20 20 20  mber. */.       
1b0e0 20 61 73 73 65 72 74 28 20 28 70 49 6e 33 2d 3e   assert( (pIn3->
1b0f0 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c  flags & MEM_Real
1b100 29 21 3d 30 20 29 3b 0a 0a 20 20 20 20 20 20 20  )!=0 );..       
1b110 20 69 66 28 20 69 4b 65 79 3d 3d 53 4d 41 4c 4c   if( iKey==SMALL
1b120 45 53 54 5f 49 4e 54 36 34 20 26 26 20 28 70 49  EST_INT64 && (pI
1b130 6e 33 2d 3e 72 3c 28 64 6f 75 62 6c 65 29 69 4b  n3->r<(double)iK
1b140 65 79 20 7c 7c 20 70 49 6e 33 2d 3e 72 3e 30 29  ey || pIn3->r>0)
1b150 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 2f 2a   ){.          /*
1b160 20 54 68 65 20 50 33 20 76 61 6c 75 65 20 69 73   The P3 value is
1b170 20 74 6f 6f 20 6c 61 72 67 65 20 69 6e 20 6d 61   too large in ma
1b180 67 6e 69 74 75 64 65 20 74 6f 20 62 65 20 65 78  gnitude to be ex
1b190 70 72 65 73 73 65 64 20 61 73 20 61 6e 0a 20 20  pressed as an.  
1b1a0 20 20 20 20 20 20 20 20 2a 2a 20 69 6e 74 65 67          ** integ
1b1b0 65 72 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  er. */.         
1b1c0 20 72 65 73 20 3d 20 31 3b 0a 20 20 20 20 20 20   res = 1;.      
1b1d0 20 20 20 20 69 66 28 20 70 49 6e 33 2d 3e 72 3c      if( pIn3->r<
1b1e0 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20  0 ){.           
1b1f0 20 69 66 28 20 6f 63 3e 3d 4f 50 5f 53 65 65 6b   if( oc>=OP_Seek
1b200 47 65 20 29 7b 20 20 61 73 73 65 72 74 28 20 6f  Ge ){  assert( o
1b210 63 3d 3d 4f 50 5f 53 65 65 6b 47 65 20 7c 7c 20  c==OP_SeekGe || 
1b220 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 74 20 29 3b  oc==OP_SeekGt );
1b230 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72  .              r
1b240 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
1b250 46 69 72 73 74 28 70 43 2d 3e 70 43 75 72 73 6f  First(pC->pCurso
1b260 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20  r, &res);.      
1b270 20 20 20 20 20 20 20 20 69 66 28 20 72 63 21 3d          if( rc!=
1b280 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f  SQLITE_OK ) goto
1b290 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
1b2a0 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 20 20 20  ror;.           
1b2b0 20 7d 0a 20 20 20 20 20 20 20 20 20 20 7d 65 6c   }.          }el
1b2c0 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  se{.            
1b2d0 69 66 28 20 6f 63 3c 3d 4f 50 5f 53 65 65 6b 4c  if( oc<=OP_SeekL
1b2e0 65 20 29 7b 20 20 61 73 73 65 72 74 28 20 6f 63  e ){  assert( oc
1b2f0 3d 3d 4f 50 5f 53 65 65 6b 4c 74 20 7c 7c 20 6f  ==OP_SeekLt || o
1b300 63 3d 3d 4f 50 5f 53 65 65 6b 4c 65 20 29 3b 0a  c==OP_SeekLe );.
1b310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 63                rc
1b320 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c   = sqlite3BtreeL
1b330 61 73 74 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c  ast(pC->pCursor,
1b340 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20 20 20   &res);.        
1b350 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
1b360 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61  LITE_OK ) goto a
1b370 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
1b380 72 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  r;.            }
1b390 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20  .          }.   
1b3a0 20 20 20 20 20 20 20 69 66 28 20 72 65 73 20 29         if( res )
1b3b0 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 63  {.            pc
1b3c0 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
1b3d0 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
1b3e0 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
1b3f0 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 6f       }else if( o
1b400 63 3d 3d 4f 50 5f 53 65 65 6b 4c 74 20 7c 7c 20  c==OP_SeekLt || 
1b410 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 65 20 29 7b  oc==OP_SeekGe ){
1b420 0a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73  .          /* Us
1b430 65 20 74 68 65 20 63 65 69 6c 69 6e 67 28 29 20  e the ceiling() 
1b440 66 75 6e 63 74 69 6f 6e 20 74 6f 20 63 6f 6e 76  function to conv
1b450 65 72 74 20 72 65 61 6c 2d 3e 69 6e 74 20 2a 2f  ert real->int */
1b460 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20 70  .          if( p
1b470 49 6e 33 2d 3e 72 20 3e 20 28 64 6f 75 62 6c 65  In3->r > (double
1b480 29 69 4b 65 79 20 29 20 69 4b 65 79 2b 2b 3b 0a  )iKey ) iKey++;.
1b490 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20          }else{. 
1b4a0 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 20           /* Use 
1b4b0 74 68 65 20 66 6c 6f 6f 72 28 29 20 66 75 6e 63  the floor() func
1b4c0 74 69 6f 6e 20 74 6f 20 63 6f 6e 76 65 72 74 20  tion to convert 
1b4d0 72 65 61 6c 2d 3e 69 6e 74 20 2a 2f 0a 20 20 20  real->int */.   
1b4e0 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6f         assert( o
1b4f0 63 3d 3d 4f 50 5f 53 65 65 6b 4c 65 20 7c 7c 20  c==OP_SeekLe || 
1b500 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 74 20 29 3b  oc==OP_SeekGt );
1b510 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20 70  .          if( p
1b520 49 6e 33 2d 3e 72 20 3c 20 28 64 6f 75 62 6c 65  In3->r < (double
1b530 29 69 4b 65 79 20 29 20 69 4b 65 79 2d 2d 3b 0a  )iKey ) iKey--;.
1b540 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
1b550 7d 20 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71  } .      rc = sq
1b560 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f  lite3BtreeMoveto
1b570 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e 70 43 75  Unpacked(pC->pCu
1b580 72 73 6f 72 2c 20 30 2c 20 28 75 36 34 29 69 4b  rsor, 0, (u64)iK
1b590 65 79 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20  ey, 0, &res);.  
1b5a0 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
1b5b0 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20  TE_OK ){.       
1b5c0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
1b5d0 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20  to_error;.      
1b5e0 7d 0a 20 20 20 20 20 20 69 66 28 20 72 65 73 3d  }.      if( res=
1b5f0 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 70 43  =0 ){.        pC
1b600 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d  ->rowidIsValid =
1b610 20 31 3b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e   1;.        pC->
1b620 6c 61 73 74 52 6f 77 69 64 20 3d 20 69 4b 65 79  lastRowid = iKey
1b630 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65  ;.      }.    }e
1b640 6c 73 65 7b 0a 20 20 20 20 20 20 6e 46 69 65 6c  lse{.      nFiel
1b650 64 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20  d = pOp->p4.i;. 
1b660 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
1b670 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54  ->p4type==P4_INT
1b680 33 32 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  32 );.      asse
1b690 72 74 28 20 6e 46 69 65 6c 64 3e 30 20 29 3b 0a  rt( nField>0 );.
1b6a0 20 20 20 20 20 20 72 2e 70 4b 65 79 49 6e 66 6f        r.pKeyInfo
1b6b0 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b   = pC->pKeyInfo;
1b6c0 0a 20 20 20 20 20 20 72 2e 6e 46 69 65 6c 64 20  .      r.nField 
1b6d0 3d 20 28 75 31 36 29 6e 46 69 65 6c 64 3b 0a 0a  = (u16)nField;..
1b6e0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 78        /* The nex
1b6f0 74 20 6c 69 6e 65 20 6f 66 20 63 6f 64 65 20 63  t line of code c
1b700 6f 6d 70 75 74 65 73 20 61 73 20 66 6f 6c 6c 6f  omputes as follo
1b710 77 73 2c 20 6f 6e 6c 79 20 66 61 73 74 65 72 3a  ws, only faster:
1b720 0a 20 20 20 20 20 20 2a 2a 20 20 20 69 66 28 20  .      **   if( 
1b730 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 74 20 7c 7c  oc==OP_SeekGt ||
1b740 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 65 20 29   oc==OP_SeekLe )
1b750 7b 0a 20 20 20 20 20 20 2a 2a 20 20 20 20 20 72  {.      **     r
1b760 2e 66 6c 61 67 73 20 3d 20 55 4e 50 41 43 4b 45  .flags = UNPACKE
1b770 44 5f 49 4e 43 52 4b 45 59 3b 0a 20 20 20 20 20  D_INCRKEY;.     
1b780 20 2a 2a 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20   **   }else{.   
1b790 20 20 20 2a 2a 20 20 20 20 20 72 2e 66 6c 61 67     **     r.flag
1b7a0 73 20 3d 20 30 3b 0a 20 20 20 20 20 20 2a 2a 20  s = 0;.      ** 
1b7b0 20 20 7d 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20    }.      */.   
1b7c0 20 20 20 72 2e 66 6c 61 67 73 20 3d 20 28 75 31     r.flags = (u1
1b7d0 36 29 28 55 4e 50 41 43 4b 45 44 5f 49 4e 43 52  6)(UNPACKED_INCR
1b7e0 4b 45 59 20 2a 20 28 31 20 26 20 28 6f 63 20 2d  KEY * (1 & (oc -
1b7f0 20 4f 50 5f 53 65 65 6b 4c 74 29 29 29 3b 0a 20   OP_SeekLt)));. 
1b800 20 20 20 20 20 61 73 73 65 72 74 28 20 6f 63 21       assert( oc!
1b810 3d 4f 50 5f 53 65 65 6b 47 74 20 7c 7c 20 72 2e  =OP_SeekGt || r.
1b820 66 6c 61 67 73 3d 3d 55 4e 50 41 43 4b 45 44 5f  flags==UNPACKED_
1b830 49 4e 43 52 4b 45 59 20 29 3b 0a 20 20 20 20 20  INCRKEY );.     
1b840 20 61 73 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f   assert( oc!=OP_
1b850 53 65 65 6b 4c 65 20 7c 7c 20 72 2e 66 6c 61 67  SeekLe || r.flag
1b860 73 3d 3d 55 4e 50 41 43 4b 45 44 5f 49 4e 43 52  s==UNPACKED_INCR
1b870 4b 45 59 20 29 3b 0a 20 20 20 20 20 20 61 73 73  KEY );.      ass
1b880 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b  ert( oc!=OP_Seek
1b890 47 65 20 7c 7c 20 72 2e 66 6c 61 67 73 3d 3d 30  Ge || r.flags==0
1b8a0 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
1b8b0 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 4c 74 20  ( oc!=OP_SeekLt 
1b8c0 7c 7c 20 72 2e 66 6c 61 67 73 3d 3d 30 20 29 3b  || r.flags==0 );
1b8d0 0a 0a 20 20 20 20 20 20 72 2e 61 4d 65 6d 20 3d  ..      r.aMem =
1b8e0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
1b8f0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
1b900 45 42 55 47 0a 20 20 20 20 20 20 7b 20 69 6e 74  EBUG.      { int
1b910 20 69 3b 20 66 6f 72 28 69 3d 30 3b 20 69 3c 72   i; for(i=0; i<r
1b920 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b 29 20 61 73  .nField; i++) as
1b930 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
1b940 28 26 72 2e 61 4d 65 6d 5b 69 5d 29 20 29 3b 20  (&r.aMem[i]) ); 
1b950 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 20 20 45  }.#endif.      E
1b960 78 70 61 6e 64 42 6c 6f 62 28 72 2e 61 4d 65 6d  xpandBlob(r.aMem
1b970 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71  );.      rc = sq
1b980 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f  lite3BtreeMoveto
1b990 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e 70 43 75  Unpacked(pC->pCu
1b9a0 72 73 6f 72 2c 20 26 72 2c 20 30 2c 20 30 2c 20  rsor, &r, 0, 0, 
1b9b0 26 72 65 73 29 3b 0a 20 20 20 20 20 20 69 66 28  &res);.      if(
1b9c0 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
1b9d0 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61  {.        goto a
1b9e0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
1b9f0 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  r;.      }.     
1ba00 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69   pC->rowidIsVali
1ba10 64 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 20  d = 0;.    }.   
1ba20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
1ba30 65 74 6f 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d  eto = 0;.    pC-
1ba40 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
1ba50 41 43 48 45 5f 53 54 41 4c 45 3b 0a 23 69 66 64  ACHE_STALE;.#ifd
1ba60 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20  ef SQLITE_TEST. 
1ba70 20 20 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63     sqlite3_searc
1ba80 68 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69  h_count++;.#endi
1ba90 66 0a 20 20 20 20 69 66 28 20 6f 63 3e 3d 4f 50  f.    if( oc>=OP
1baa0 5f 53 65 65 6b 47 65 20 29 7b 20 20 61 73 73 65  _SeekGe ){  asse
1bab0 72 74 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47  rt( oc==OP_SeekG
1bac0 65 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b  e || oc==OP_Seek
1bad0 47 74 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20  Gt );.      if( 
1bae0 72 65 73 3c 30 20 7c 7c 20 28 72 65 73 3d 3d 30  res<0 || (res==0
1baf0 20 26 26 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47   && oc==OP_SeekG
1bb00 74 29 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63  t) ){.        rc
1bb10 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4e   = sqlite3BtreeN
1bb20 65 78 74 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c  ext(pC->pCursor,
1bb30 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20 20 20   &res);.        
1bb40 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
1bb50 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  K ) goto abort_d
1bb60 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
1bb70 20 20 20 20 20 70 43 2d 3e 72 6f 77 69 64 49 73       pC->rowidIs
1bb80 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 20 20 20  Valid = 0;.     
1bb90 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
1bba0 72 65 73 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d  res = 0;.      }
1bbb0 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
1bbc0 20 20 61 73 73 65 72 74 28 20 6f 63 3d 3d 4f 50    assert( oc==OP
1bbd0 5f 53 65 65 6b 4c 74 20 7c 7c 20 6f 63 3d 3d 4f  _SeekLt || oc==O
1bbe0 50 5f 53 65 65 6b 4c 65 20 29 3b 0a 20 20 20 20  P_SeekLe );.    
1bbf0 20 20 69 66 28 20 72 65 73 3e 30 20 7c 7c 20 28    if( res>0 || (
1bc00 72 65 73 3d 3d 30 20 26 26 20 6f 63 3d 3d 4f 50  res==0 && oc==OP
1bc10 5f 53 65 65 6b 4c 74 29 20 29 7b 0a 20 20 20 20  _SeekLt) ){.    
1bc20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
1bc30 42 74 72 65 65 50 72 65 76 69 6f 75 73 28 70 43  BtreePrevious(pC
1bc40 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29  ->pCursor, &res)
1bc50 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 72 63  ;.        if( rc
1bc60 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f  !=SQLITE_OK ) go
1bc70 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
1bc80 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 70  error;.        p
1bc90 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20  C->rowidIsValid 
1bca0 3d 20 30 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  = 0;.      }else
1bcb0 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 72 65 73  {.        /* res
1bcc0 20 6d 69 67 68 74 20 62 65 20 6e 65 67 61 74 69   might be negati
1bcd0 76 65 20 62 65 63 61 75 73 65 20 74 68 65 20 74  ve because the t
1bce0 61 62 6c 65 20 69 73 20 65 6d 70 74 79 2e 20 20  able is empty.  
1bcf0 43 68 65 63 6b 20 74 6f 0a 20 20 20 20 20 20 20  Check to.       
1bd00 20 2a 2a 20 73 65 65 20 69 66 20 74 68 69 73 20   ** see if this 
1bd10 69 73 20 74 68 65 20 63 61 73 65 2e 0a 20 20 20  is the case..   
1bd20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 20 20       */.        
1bd30 72 65 73 20 3d 20 73 71 6c 69 74 65 33 42 74 72  res = sqlite3Btr
1bd40 65 65 45 6f 66 28 70 43 2d 3e 70 43 75 72 73 6f  eeEof(pC->pCurso
1bd50 72 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  r);.      }.    
1bd60 7d 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  }.    assert( pO
1bd70 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 20 20 69  p->p2>0 );.    i
1bd80 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20 20 20  f( res ){.      
1bd90 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
1bda0 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b  ;.    }.  }else{
1bdb0 0a 20 20 20 20 2f 2a 20 54 68 69 73 20 68 61 70  .    /* This hap
1bdc0 70 65 6e 73 20 77 68 65 6e 20 61 74 74 65 6d 70  pens when attemp
1bdd0 74 69 6e 67 20 74 6f 20 6f 70 65 6e 20 74 68 65  ting to open the
1bde0 20 73 71 6c 69 74 65 33 5f 6d 61 73 74 65 72 20   sqlite3_master 
1bdf0 74 61 62 6c 65 0a 20 20 20 20 2a 2a 20 66 6f 72  table.    ** for
1be00 20 72 65 61 64 20 61 63 63 65 73 73 20 72 65 74   read access ret
1be10 75 72 6e 73 20 53 51 4c 49 54 45 5f 45 4d 50 54  urns SQLITE_EMPT
1be20 59 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65 20  Y. In this case 
1be30 61 6c 77 61 79 73 0a 20 20 20 20 2a 2a 20 74 61  always.    ** ta
1be40 6b 65 20 74 68 65 20 6a 75 6d 70 20 28 73 69 6e  ke the jump (sin
1be50 63 65 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20  ce there are no 
1be60 72 65 63 6f 72 64 73 20 69 6e 20 74 68 65 20 74  records in the t
1be70 61 62 6c 65 29 2e 0a 20 20 20 20 2a 2f 0a 20 20  able)..    */.  
1be80 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
1be90 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b   1;.  }.  break;
1bea0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .}../* Opcode: S
1beb0 65 65 6b 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  eek P1 P2 * * *.
1bec0 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 6e 20 6f  **.** P1 is an o
1bed0 70 65 6e 20 74 61 62 6c 65 20 63 75 72 73 6f 72  pen table cursor
1bee0 20 61 6e 64 20 50 32 20 69 73 20 61 20 72 6f 77   and P2 is a row
1bef0 69 64 20 69 6e 74 65 67 65 72 2e 20 20 41 72 72  id integer.  Arr
1bf00 61 6e 67 65 0a 2a 2a 20 66 6f 72 20 50 31 20 74  ange.** for P1 t
1bf10 6f 20 6d 6f 76 65 20 73 6f 20 74 68 61 74 20 69  o move so that i
1bf20 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20  t points to the 
1bf30 72 6f 77 69 64 20 67 69 76 65 6e 20 62 79 20 50  rowid given by P
1bf40 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 73  2..**.** This is
1bf50 20 61 63 74 75 61 6c 6c 79 20 61 20 64 65 66 65   actually a defe
1bf60 72 72 65 64 20 73 65 65 6b 2e 20 20 4e 6f 74 68  rred seek.  Noth
1bf70 69 6e 67 20 61 63 74 75 61 6c 6c 79 20 68 61 70  ing actually hap
1bf80 70 65 6e 73 20 75 6e 74 69 6c 0a 2a 2a 20 74 68  pens until.** th
1bf90 65 20 63 75 72 73 6f 72 20 69 73 20 75 73 65 64  e cursor is used
1bfa0 20 74 6f 20 72 65 61 64 20 61 20 72 65 63 6f 72   to read a recor
1bfb0 64 2e 20 20 54 68 61 74 20 77 61 79 2c 20 69 66  d.  That way, if
1bfc0 20 6e 6f 20 72 65 61 64 73 0a 2a 2a 20 6f 63 63   no reads.** occ
1bfd0 75 72 2c 20 6e 6f 20 75 6e 6e 65 63 65 73 73 61  ur, no unnecessa
1bfe0 72 79 20 49 2f 4f 20 68 61 70 70 65 6e 73 2e 0a  ry I/O happens..
1bff0 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 3a  */.case OP_Seek:
1c000 20 7b 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a   {    /* in2 */.
1c010 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
1c020 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
1c030 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
1c040 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
1c050 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
1c060 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
1c070 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
1c080 69 66 28 20 41 4c 57 41 59 53 28 70 43 2d 3e 70  if( ALWAYS(pC->p
1c090 43 75 72 73 6f 72 21 3d 30 29 20 29 7b 0a 20 20  Cursor!=0) ){.  
1c0a0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73    assert( pC->is
1c0b0 54 61 62 6c 65 20 29 3b 0a 20 20 20 20 70 43 2d  Table );.    pC-
1c0c0 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20  >nullRow = 0;.  
1c0d0 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70    pIn2 = &aMem[p
1c0e0 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 70 43 2d  Op->p2];.    pC-
1c0f0 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 20 3d 20  >movetoTarget = 
1c100 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61  sqlite3VdbeIntVa
1c110 6c 75 65 28 70 49 6e 32 29 3b 0a 20 20 20 20 70  lue(pIn2);.    p
1c120 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20  C->rowidIsValid 
1c130 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e 64 65 66  = 0;.    pC->def
1c140 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 31 3b  erredMoveto = 1;
1c150 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
1c160 20 20 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46    ../* Opcode: F
1c170 6f 75 6e 64 20 50 31 20 50 32 20 50 33 20 50 34  ound P1 P2 P3 P4
1c180 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 3d 3d   *.**.** If P4==
1c190 30 20 74 68 65 6e 20 72 65 67 69 73 74 65 72 20  0 then register 
1c1a0 50 33 20 68 6f 6c 64 73 20 61 20 62 6c 6f 62 20  P3 holds a blob 
1c1b0 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79 20 4d  constructed by M
1c1c0 61 6b 65 52 65 63 6f 72 64 2e 20 20 49 66 0a 2a  akeRecord.  If.*
1c1d0 2a 20 50 34 3e 30 20 74 68 65 6e 20 72 65 67 69  * P4>0 then regi
1c1e0 73 74 65 72 20 50 33 20 69 73 20 74 68 65 20 66  ster P3 is the f
1c1f0 69 72 73 74 20 6f 66 20 50 34 20 72 65 67 69 73  irst of P4 regis
1c200 74 65 72 73 20 74 68 61 74 20 66 6f 72 6d 20 61  ters that form a
1c210 6e 20 75 6e 70 61 63 6b 65 64 0a 2a 2a 20 72 65  n unpacked.** re
1c220 63 6f 72 64 2e 0a 2a 2a 0a 2a 2a 20 43 75 72 73  cord..**.** Curs
1c230 6f 72 20 50 31 20 69 73 20 6f 6e 20 61 6e 20 69  or P1 is on an i
1c240 6e 64 65 78 20 62 74 72 65 65 2e 20 20 49 66 20  ndex btree.  If 
1c250 74 68 65 20 72 65 63 6f 72 64 20 69 64 65 6e 74  the record ident
1c260 69 66 69 65 64 20 62 79 20 50 33 20 61 6e 64 20  ified by P3 and 
1c270 50 34 0a 2a 2a 20 69 73 20 61 20 70 72 65 66 69  P4.** is a prefi
1c280 78 20 6f 66 20 61 6e 79 20 65 6e 74 72 79 20 69  x of any entry i
1c290 6e 20 50 31 20 74 68 65 6e 20 61 20 6a 75 6d 70  n P1 then a jump
1c2a0 20 69 73 20 6d 61 64 65 20 74 6f 20 50 32 20 61   is made to P2 a
1c2b0 6e 64 0a 2a 2a 20 50 31 20 69 73 20 6c 65 66 74  nd.** P1 is left
1c2c0 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 65   pointing at the
1c2d0 20 6d 61 74 63 68 69 6e 67 20 65 6e 74 72 79 2e   matching entry.
1c2e0 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e  .*/./* Opcode: N
1c2f0 6f 74 46 6f 75 6e 64 20 50 31 20 50 32 20 50 33  otFound P1 P2 P3
1c300 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 50   P4 *.**.** If P
1c310 34 3d 3d 30 20 74 68 65 6e 20 72 65 67 69 73 74  4==0 then regist
1c320 65 72 20 50 33 20 68 6f 6c 64 73 20 61 20 62 6c  er P3 holds a bl
1c330 6f 62 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62  ob constructed b
1c340 79 20 4d 61 6b 65 52 65 63 6f 72 64 2e 20 20 49  y MakeRecord.  I
1c350 66 0a 2a 2a 20 50 34 3e 30 20 74 68 65 6e 20 72  f.** P4>0 then r
1c360 65 67 69 73 74 65 72 20 50 33 20 69 73 20 74 68  egister P3 is th
1c370 65 20 66 69 72 73 74 20 6f 66 20 50 34 20 72 65  e first of P4 re
1c380 67 69 73 74 65 72 73 20 74 68 61 74 20 66 6f 72  gisters that for
1c390 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 0a 2a 2a  m an unpacked.**
1c3a0 20 72 65 63 6f 72 64 2e 0a 2a 2a 20 0a 2a 2a 20   record..** .** 
1c3b0 43 75 72 73 6f 72 20 50 31 20 69 73 20 6f 6e 20  Cursor P1 is on 
1c3c0 61 6e 20 69 6e 64 65 78 20 62 74 72 65 65 2e 20  an index btree. 
1c3d0 20 49 66 20 74 68 65 20 72 65 63 6f 72 64 20 69   If the record i
1c3e0 64 65 6e 74 69 66 69 65 64 20 62 79 20 50 33 20  dentified by P3 
1c3f0 61 6e 64 20 50 34 0a 2a 2a 20 69 73 20 6e 6f 74  and P4.** is not
1c400 20 74 68 65 20 70 72 65 66 69 78 20 6f 66 20 61   the prefix of a
1c410 6e 79 20 65 6e 74 72 79 20 69 6e 20 50 31 20 74  ny entry in P1 t
1c420 68 65 6e 20 61 20 6a 75 6d 70 20 69 73 20 6d 61  hen a jump is ma
1c430 64 65 20 74 6f 20 50 32 2e 20 20 49 66 20 50 31  de to P2.  If P1
1c440 20 0a 2a 2a 20 64 6f 65 73 20 63 6f 6e 74 61 69   .** does contai
1c450 6e 20 61 6e 20 65 6e 74 72 79 20 77 68 6f 73 65  n an entry whose
1c460 20 70 72 65 66 69 78 20 6d 61 74 63 68 65 73 20   prefix matches 
1c470 74 68 65 20 50 33 2f 50 34 20 72 65 63 6f 72 64  the P3/P4 record
1c480 20 74 68 65 6e 20 63 6f 6e 74 72 6f 6c 0a 2a 2a   then control.**
1c490 20 66 61 6c 6c 73 20 74 68 72 6f 75 67 68 20 74   falls through t
1c4a0 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72  o the next instr
1c4b0 75 63 74 69 6f 6e 20 61 6e 64 20 50 31 20 69 73  uction and P1 is
1c4c0 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67 20 61   left pointing a
1c4d0 74 20 74 68 65 0a 2a 2a 20 6d 61 74 63 68 69 6e  t the.** matchin
1c4e0 67 20 65 6e 74 72 79 2e 0a 2a 2a 0a 2a 2a 20 53  g entry..**.** S
1c4f0 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20  ee also: Found, 
1c500 4e 6f 74 45 78 69 73 74 73 2c 20 49 73 55 6e 69  NotExists, IsUni
1c510 71 75 65 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e  que.*/.case OP_N
1c520 6f 74 46 6f 75 6e 64 3a 20 20 20 20 20 20 20 2f  otFound:       /
1c530 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63  * jump, in3 */.c
1c540 61 73 65 20 4f 50 5f 46 6f 75 6e 64 3a 20 7b 20  ase OP_Found: { 
1c550 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
1c560 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 61 6c 72  in3 */.  int alr
1c570 65 61 64 79 45 78 69 73 74 73 3b 0a 20 20 56 64  eadyExists;.  Vd
1c580 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
1c590 69 6e 74 20 72 65 73 3b 0a 20 20 55 6e 70 61 63  int res;.  Unpac
1c5a0 6b 65 64 52 65 63 6f 72 64 20 2a 70 49 64 78 4b  kedRecord *pIdxK
1c5b0 65 79 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65  ey;.  UnpackedRe
1c5c0 63 6f 72 64 20 72 3b 0a 20 20 63 68 61 72 20 61  cord r;.  char a
1c5d0 54 65 6d 70 52 65 63 5b 52 4f 55 4e 44 38 28 73  TempRec[ROUND8(s
1c5e0 69 7a 65 6f 66 28 55 6e 70 61 63 6b 65 64 52 65  izeof(UnpackedRe
1c5f0 63 6f 72 64 29 29 20 2b 20 73 69 7a 65 6f 66 28  cord)) + sizeof(
1c600 4d 65 6d 29 2a 33 20 2b 20 37 5d 3b 0a 0a 23 69  Mem)*3 + 7];..#i
1c610 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54  fdef SQLITE_TEST
1c620 0a 20 20 73 71 6c 69 74 65 33 5f 66 6f 75 6e 64  .  sqlite3_found
1c630 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66  _count++;.#endif
1c640 0a 0a 20 20 61 6c 72 65 61 64 79 45 78 69 73 74  ..  alreadyExist
1c650 73 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28  s = 0;.  assert(
1c660 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
1c670 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
1c680 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  r );.  assert( p
1c690 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49  Op->p4type==P4_I
1c6a0 4e 54 33 32 20 29 3b 0a 20 20 70 43 20 3d 20 70  NT32 );.  pC = p
1c6b0 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
1c6c0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
1c6d0 30 20 29 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61  0 );.  pIn3 = &a
1c6e0 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
1c6f0 69 66 28 20 41 4c 57 41 59 53 28 70 43 2d 3e 70  if( ALWAYS(pC->p
1c700 43 75 72 73 6f 72 21 3d 30 29 20 29 7b 0a 0a 20  Cursor!=0) ){.. 
1c710 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69     assert( pC->i
1c720 73 54 61 62 6c 65 3d 3d 30 20 29 3b 0a 20 20 20  sTable==0 );.   
1c730 20 69 66 28 20 70 4f 70 2d 3e 70 34 2e 69 3e 30   if( pOp->p4.i>0
1c740 20 29 7b 0a 20 20 20 20 20 20 72 2e 70 4b 65 79   ){.      r.pKey
1c750 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49  Info = pC->pKeyI
1c760 6e 66 6f 3b 0a 20 20 20 20 20 20 72 2e 6e 46 69  nfo;.      r.nFi
1c770 65 6c 64 20 3d 20 28 75 31 36 29 70 4f 70 2d 3e  eld = (u16)pOp->
1c780 70 34 2e 69 3b 0a 20 20 20 20 20 20 72 2e 61 4d  p4.i;.      r.aM
1c790 65 6d 20 3d 20 70 49 6e 33 3b 0a 23 69 66 64 65  em = pIn3;.#ifde
1c7a0 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
1c7b0 20 20 20 20 20 7b 20 69 6e 74 20 69 3b 20 66 6f       { int i; fo
1c7c0 72 28 69 3d 30 3b 20 69 3c 72 2e 6e 46 69 65 6c  r(i=0; i<r.nFiel
1c7d0 64 3b 20 69 2b 2b 29 20 61 73 73 65 72 74 28 20  d; i++) assert( 
1c7e0 6d 65 6d 49 73 56 61 6c 69 64 28 26 72 2e 61 4d  memIsValid(&r.aM
1c7f0 65 6d 5b 69 5d 29 20 29 3b 20 7d 0a 23 65 6e 64  em[i]) ); }.#end
1c800 69 66 0a 20 20 20 20 20 20 72 2e 66 6c 61 67 73  if.      r.flags
1c810 20 3d 20 55 4e 50 41 43 4b 45 44 5f 50 52 45 46   = UNPACKED_PREF
1c820 49 58 5f 4d 41 54 43 48 3b 0a 20 20 20 20 20 20  IX_MATCH;.      
1c830 70 49 64 78 4b 65 79 20 3d 20 26 72 3b 0a 20 20  pIdxKey = &r;.  
1c840 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 61    }else{.      a
1c850 73 73 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61  ssert( pIn3->fla
1c860 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b  gs & MEM_Blob );
1c870 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28  .      assert( (
1c880 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn3->flags & ME
1c890 4d 5f 5a 65 72 6f 29 3d 3d 30 20 29 3b 20 20 2f  M_Zero)==0 );  /
1c8a0 2a 20 7a 65 72 6f 62 6c 6f 62 73 20 61 6c 72 65  * zeroblobs alre
1c8b0 61 64 79 20 65 78 70 61 6e 64 65 64 20 2a 2f 0a  ady expanded */.
1c8c0 20 20 20 20 20 20 70 49 64 78 4b 65 79 20 3d 20        pIdxKey = 
1c8d0 73 71 6c 69 74 65 33 56 64 62 65 52 65 63 6f 72  sqlite3VdbeRecor
1c8e0 64 55 6e 70 61 63 6b 28 70 43 2d 3e 70 4b 65 79  dUnpack(pC->pKey
1c8f0 49 6e 66 6f 2c 20 70 49 6e 33 2d 3e 6e 2c 20 70  Info, pIn3->n, p
1c900 49 6e 33 2d 3e 7a 2c 0a 20 20 20 20 20 20 20 20  In3->z,.        
1c910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c930 61 54 65 6d 70 52 65 63 2c 20 73 69 7a 65 6f 66  aTempRec, sizeof
1c940 28 61 54 65 6d 70 52 65 63 29 29 3b 0a 20 20 20  (aTempRec));.   
1c950 20 20 20 69 66 28 20 70 49 64 78 4b 65 79 3d 3d     if( pIdxKey==
1c960 30 20 29 7b 0a 20 20 20 20 20 20 20 20 67 6f 74  0 ){.        got
1c970 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 20 20  o no_mem;.      
1c980 7d 0a 20 20 20 20 20 20 70 49 64 78 4b 65 79 2d  }.      pIdxKey-
1c990 3e 66 6c 61 67 73 20 7c 3d 20 55 4e 50 41 43 4b  >flags |= UNPACK
1c9a0 45 44 5f 50 52 45 46 49 58 5f 4d 41 54 43 48 3b  ED_PREFIX_MATCH;
1c9b0 0a 20 20 20 20 7d 0a 20 20 20 20 72 63 20 3d 20  .    }.    rc = 
1c9c0 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65  sqlite3BtreeMove
1c9d0 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e 70  toUnpacked(pC->p
1c9e0 43 75 72 73 6f 72 2c 20 70 49 64 78 4b 65 79 2c  Cursor, pIdxKey,
1c9f0 20 30 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20   0, 0, &res);.  
1ca00 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 2e 69 3d    if( pOp->p4.i=
1ca10 3d 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  =0 ){.      sqli
1ca20 74 65 33 56 64 62 65 44 65 6c 65 74 65 55 6e 70  te3VdbeDeleteUnp
1ca30 61 63 6b 65 64 52 65 63 6f 72 64 28 70 49 64 78  ackedRecord(pIdx
1ca40 4b 65 79 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  Key);.    }.    
1ca50 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
1ca60 4b 20 29 7b 0a 20 20 20 20 20 20 62 72 65 61 6b  K ){.      break
1ca70 3b 0a 20 20 20 20 7d 0a 20 20 20 20 61 6c 72 65  ;.    }.    alre
1ca80 61 64 79 45 78 69 73 74 73 20 3d 20 28 72 65 73  adyExists = (res
1ca90 3d 3d 30 29 3b 0a 20 20 20 20 70 43 2d 3e 64 65  ==0);.    pC->de
1caa0 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30  ferredMoveto = 0
1cab0 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53  ;.    pC->cacheS
1cac0 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
1cad0 41 4c 45 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70  ALE;.  }.  if( p
1cae0 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 46  Op->opcode==OP_F
1caf0 6f 75 6e 64 20 29 7b 0a 20 20 20 20 69 66 28 20  ound ){.    if( 
1cb00 61 6c 72 65 61 64 79 45 78 69 73 74 73 20 29 20  alreadyExists ) 
1cb10 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
1cb20 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69  ;.  }else{.    i
1cb30 66 28 20 21 61 6c 72 65 61 64 79 45 78 69 73 74  f( !alreadyExist
1cb40 73 20 29 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32  s ) pc = pOp->p2
1cb50 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61   - 1;.  }.  brea
1cb60 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
1cb70 20 49 73 55 6e 69 71 75 65 20 50 31 20 50 32 20   IsUnique P1 P2 
1cb80 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 43 75  P3 P4 *.**.** Cu
1cb90 72 73 6f 72 20 50 31 20 69 73 20 6f 70 65 6e 20  rsor P1 is open 
1cba0 6f 6e 20 61 6e 20 69 6e 64 65 78 20 62 2d 74 72  on an index b-tr
1cbb0 65 65 20 2d 20 74 68 61 74 20 69 73 20 74 6f 20  ee - that is to 
1cbc0 73 61 79 2c 20 61 20 62 74 72 65 65 20 77 68 69  say, a btree whi
1cbd0 63 68 0a 2a 2a 20 6e 6f 20 64 61 74 61 20 61 6e  ch.** no data an
1cbe0 64 20 77 68 65 72 65 20 74 68 65 20 6b 65 79 20  d where the key 
1cbf0 61 72 65 20 72 65 63 6f 72 64 73 20 67 65 6e 65  are records gene
1cc00 72 61 74 65 64 20 62 79 20 4f 50 5f 4d 61 6b 65  rated by OP_Make
1cc10 52 65 63 6f 72 64 20 77 69 74 68 0a 2a 2a 20 74  Record with.** t
1cc20 68 65 20 6c 69 73 74 20 66 69 65 6c 64 20 62 65  he list field be
1cc30 69 6e 67 20 74 68 65 20 69 6e 74 65 67 65 72 20  ing the integer 
1cc40 52 4f 57 49 44 20 6f 66 20 74 68 65 20 65 6e 74  ROWID of the ent
1cc50 72 79 20 74 68 61 74 20 74 68 65 20 69 6e 64 65  ry that the inde
1cc60 78 0a 2a 2a 20 65 6e 74 72 79 20 72 65 66 65 72  x.** entry refer
1cc70 73 20 74 6f 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  s to..**.** The 
1cc80 50 33 20 72 65 67 69 73 74 65 72 20 63 6f 6e 74  P3 register cont
1cc90 61 69 6e 73 20 61 6e 20 69 6e 74 65 67 65 72 20  ains an integer 
1cca0 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 2e 20 43  record number. C
1ccb0 61 6c 6c 20 74 68 69 73 20 72 65 63 6f 72 64 20  all this record 
1ccc0 0a 2a 2a 20 6e 75 6d 62 65 72 20 52 2e 20 52 65  .** number R. Re
1ccd0 67 69 73 74 65 72 20 50 34 20 69 73 20 74 68 65  gister P4 is the
1cce0 20 66 69 72 73 74 20 69 6e 20 61 20 73 65 74 20   first in a set 
1ccf0 6f 66 20 4e 20 63 6f 6e 74 69 67 75 6f 75 73 20  of N contiguous 
1cd00 72 65 67 69 73 74 65 72 73 0a 2a 2a 20 74 68 61  registers.** tha
1cd10 74 20 6d 61 6b 65 20 75 70 20 61 6e 20 75 6e 70  t make up an unp
1cd20 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 20  acked index key 
1cd30 74 68 61 74 20 63 61 6e 20 62 65 20 75 73 65 64  that can be used
1cd40 20 77 69 74 68 20 63 75 72 73 6f 72 20 50 31 2e   with cursor P1.
1cd50 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65 20 6f 66  .** The value of
1cd60 20 4e 20 63 61 6e 20 62 65 20 69 6e 66 65 72 72   N can be inferr
1cd70 65 64 20 66 72 6f 6d 20 74 68 65 20 63 75 72 73  ed from the curs
1cd80 6f 72 2e 20 4e 20 69 6e 63 6c 75 64 65 73 20 74  or. N includes t
1cd90 68 65 20 72 6f 77 69 64 0a 2a 2a 20 76 61 6c 75  he rowid.** valu
1cda0 65 20 61 70 70 65 6e 64 65 64 20 74 6f 20 74 68  e appended to th
1cdb0 65 20 65 6e 64 20 6f 66 20 74 68 65 20 69 6e 64  e end of the ind
1cdc0 65 78 20 72 65 63 6f 72 64 2e 20 54 68 69 73 20  ex record. This 
1cdd0 72 6f 77 69 64 20 76 61 6c 75 65 20 6d 61 79 0a  rowid value may.
1cde0 2a 2a 20 6f 72 20 6d 61 79 20 6e 6f 74 20 62 65  ** or may not be
1cdf0 20 74 68 65 20 73 61 6d 65 20 61 73 20 52 2e 0a   the same as R..
1ce00 2a 2a 0a 2a 2a 20 49 66 20 61 6e 79 20 6f 66 20  **.** If any of 
1ce10 74 68 65 20 4e 20 72 65 67 69 73 74 65 72 73 20  the N registers 
1ce20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 72  beginning with r
1ce30 65 67 69 73 74 65 72 20 50 34 20 63 6f 6e 74 61  egister P4 conta
1ce40 69 6e 73 20 61 20 4e 55 4c 4c 0a 2a 2a 20 76 61  ins a NULL.** va
1ce50 6c 75 65 2c 20 6a 75 6d 70 20 69 6d 6d 65 64 69  lue, jump immedi
1ce60 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 0a  ately to P2..**.
1ce70 2a 2a 20 4f 74 68 65 72 77 69 73 65 2c 20 74 68  ** Otherwise, th
1ce80 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 63  is instruction c
1ce90 68 65 63 6b 73 20 69 66 20 63 75 72 73 6f 72 20  hecks if cursor 
1cea0 50 31 20 63 6f 6e 74 61 69 6e 73 20 61 6e 20 65  P1 contains an e
1ceb0 6e 74 72 79 0a 2a 2a 20 77 68 65 72 65 20 74 68  ntry.** where th
1cec0 65 20 66 69 72 73 74 20 28 4e 2d 31 29 20 66 69  e first (N-1) fi
1ced0 65 6c 64 73 20 6d 61 74 63 68 20 62 75 74 20 74  elds match but t
1cee0 68 65 20 72 6f 77 69 64 20 76 61 6c 75 65 20 61  he rowid value a
1cef0 74 20 74 68 65 20 65 6e 64 0a 2a 2a 20 6f 66 20  t the end.** of 
1cf00 74 68 65 20 69 6e 64 65 78 20 65 6e 74 72 79 20  the index entry 
1cf10 69 73 20 6e 6f 74 20 52 2e 20 49 66 20 74 68 65  is not R. If the
1cf20 72 65 20 69 73 20 6e 6f 20 73 75 63 68 20 65 6e  re is no such en
1cf30 74 72 79 2c 20 63 6f 6e 74 72 6f 6c 20 6a 75 6d  try, control jum
1cf40 70 73 0a 2a 2a 20 74 6f 20 69 6e 73 74 72 75 63  ps.** to instruc
1cf50 74 69 6f 6e 20 50 32 2e 20 4f 74 68 65 72 77 69  tion P2. Otherwi
1cf60 73 65 2c 20 74 68 65 20 72 6f 77 69 64 20 6f 66  se, the rowid of
1cf70 20 74 68 65 20 63 6f 6e 66 6c 69 63 74 69 6e 67   the conflicting
1cf80 20 69 6e 64 65 78 0a 2a 2a 20 65 6e 74 72 79 20   index.** entry 
1cf90 69 73 20 63 6f 70 69 65 64 20 74 6f 20 72 65 67  is copied to reg
1cfa0 69 73 74 65 72 20 50 33 20 61 6e 64 20 63 6f 6e  ister P3 and con
1cfb0 74 72 6f 6c 20 66 61 6c 6c 73 20 74 68 72 6f 75  trol falls throu
1cfc0 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 0a 2a  gh to the next.*
1cfd0 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  * instruction..*
1cfe0 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 4e  *.** See also: N
1cff0 6f 74 46 6f 75 6e 64 2c 20 4e 6f 74 45 78 69 73  otFound, NotExis
1d000 74 73 2c 20 46 6f 75 6e 64 0a 2a 2f 0a 63 61 73  ts, Found.*/.cas
1d010 65 20 4f 50 5f 49 73 55 6e 69 71 75 65 3a 20 7b  e OP_IsUnique: {
1d020 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
1d030 20 69 6e 33 20 2a 2f 0a 20 20 75 31 36 20 69 69   in3 */.  u16 ii
1d040 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  ;.  VdbeCursor *
1d050 70 43 78 3b 0a 20 20 42 74 43 75 72 73 6f 72 20  pCx;.  BtCursor 
1d060 2a 70 43 72 73 72 3b 0a 20 20 75 31 36 20 6e 46  *pCrsr;.  u16 nF
1d070 69 65 6c 64 3b 0a 20 20 4d 65 6d 20 2a 61 4d 78  ield;.  Mem *aMx
1d080 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f  ;.  UnpackedReco
1d090 72 64 20 72 3b 20 20 20 20 20 20 20 20 20 20 20  rd r;           
1d0a0 20 20 20 20 20 20 20 2f 2a 20 42 2d 54 72 65 65         /* B-Tree
1d0b0 20 69 6e 64 65 78 20 73 65 61 72 63 68 20 6b 65   index search ke
1d0c0 79 20 2a 2f 0a 20 20 69 36 34 20 52 3b 20 20 20  y */.  i64 R;   
1d0d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d0e0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 6f 77            /* Row
1d0f0 69 64 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67  id stored in reg
1d100 69 73 74 65 72 20 50 33 20 2a 2f 0a 0a 20 20 70  ister P3 */..  p
1d110 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In3 = &aMem[pOp-
1d120 3e 70 33 5d 3b 0a 20 20 61 4d 78 20 3d 20 26 61  >p3];.  aMx = &a
1d130 4d 65 6d 5b 70 4f 70 2d 3e 70 34 2e 69 5d 3b 0a  Mem[pOp->p4.i];.
1d140 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68 61 74    /* Assert that
1d150 20 74 68 65 20 76 61 6c 75 65 73 20 6f 66 20 70   the values of p
1d160 61 72 61 6d 65 74 65 72 73 20 50 31 20 61 6e 64  arameters P1 and
1d170 20 50 34 20 61 72 65 20 69 6e 20 72 61 6e 67 65   P4 are in range
1d180 2e 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70  . */.  assert( p
1d190 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49  Op->p4type==P4_I
1d1a0 4e 54 33 32 20 29 3b 0a 20 20 61 73 73 65 72 74  NT32 );.  assert
1d1b0 28 20 70 4f 70 2d 3e 70 34 2e 69 3e 30 20 26 26  ( pOp->p4.i>0 &&
1d1c0 20 70 4f 70 2d 3e 70 34 2e 69 3c 3d 70 2d 3e 6e   pOp->p4.i<=p->n
1d1d0 4d 65 6d 20 29 3b 0a 20 20 61 73 73 65 72 74 28  Mem );.  assert(
1d1e0 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
1d1f0 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
1d200 72 20 29 3b 0a 0a 20 20 2f 2a 20 46 69 6e 64 20  r );..  /* Find 
1d210 74 68 65 20 69 6e 64 65 78 20 63 75 72 73 6f 72  the index cursor
1d220 2e 20 2a 2f 0a 20 20 70 43 78 20 3d 20 70 2d 3e  . */.  pCx = p->
1d230 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
1d240 20 20 61 73 73 65 72 74 28 20 70 43 78 2d 3e 64    assert( pCx->d
1d250 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30  eferredMoveto==0
1d260 20 29 3b 0a 20 20 70 43 78 2d 3e 73 65 65 6b 52   );.  pCx->seekR
1d270 65 73 75 6c 74 20 3d 20 30 3b 0a 20 20 70 43 78  esult = 0;.  pCx
1d280 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
1d290 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 70  CACHE_STALE;.  p
1d2a0 43 72 73 72 20 3d 20 70 43 78 2d 3e 70 43 75 72  Crsr = pCx->pCur
1d2b0 73 6f 72 3b 0a 0a 20 20 2f 2a 20 49 66 20 61 6e  sor;..  /* If an
1d2c0 79 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20  y of the values 
1d2d0 61 72 65 20 4e 55 4c 4c 2c 20 74 61 6b 65 20 74  are NULL, take t
1d2e0 68 65 20 6a 75 6d 70 2e 20 2a 2f 0a 20 20 6e 46  he jump. */.  nF
1d2f0 69 65 6c 64 20 3d 20 70 43 78 2d 3e 70 4b 65 79  ield = pCx->pKey
1d300 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64 3b 0a 20 20  Info->nField;.  
1d310 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 6e 46 69  for(ii=0; ii<nFi
1d320 65 6c 64 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20  eld; ii++){.    
1d330 69 66 28 20 61 4d 78 5b 69 69 5d 2e 66 6c 61 67  if( aMx[ii].flag
1d340 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a  s & MEM_Null ){.
1d350 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e        pc = pOp->
1d360 70 32 20 2d 20 31 3b 0a 20 20 20 20 20 20 70 43  p2 - 1;.      pC
1d370 72 73 72 20 3d 20 30 3b 0a 20 20 20 20 20 20 62  rsr = 0;.      b
1d380 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  reak;.    }.  }.
1d390 20 20 61 73 73 65 72 74 28 20 28 61 4d 78 5b 6e    assert( (aMx[n
1d3a0 46 69 65 6c 64 5d 2e 66 6c 61 67 73 20 26 20 4d  Field].flags & M
1d3b0 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 3b 0a 0a  EM_Null)==0 );..
1d3c0 20 20 69 66 28 20 70 43 72 73 72 21 3d 30 20 29    if( pCrsr!=0 )
1d3d0 7b 0a 20 20 20 20 2f 2a 20 50 6f 70 75 6c 61 74  {.    /* Populat
1d3e0 65 20 74 68 65 20 69 6e 64 65 78 20 73 65 61 72  e the index sear
1d3f0 63 68 20 6b 65 79 2e 20 2a 2f 0a 20 20 20 20 72  ch key. */.    r
1d400 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43 78 2d  .pKeyInfo = pCx-
1d410 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 72  >pKeyInfo;.    r
1d420 2e 6e 46 69 65 6c 64 20 3d 20 6e 46 69 65 6c 64  .nField = nField
1d430 20 2b 20 31 3b 0a 20 20 20 20 72 2e 66 6c 61 67   + 1;.    r.flag
1d440 73 20 3d 20 55 4e 50 41 43 4b 45 44 5f 50 52 45  s = UNPACKED_PRE
1d450 46 49 58 5f 53 45 41 52 43 48 3b 0a 20 20 20 20  FIX_SEARCH;.    
1d460 72 2e 61 4d 65 6d 20 3d 20 61 4d 78 3b 0a 23 69  r.aMem = aMx;.#i
1d470 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
1d480 47 0a 20 20 20 20 7b 20 69 6e 74 20 69 3b 20 66  G.    { int i; f
1d490 6f 72 28 69 3d 30 3b 20 69 3c 72 2e 6e 46 69 65  or(i=0; i<r.nFie
1d4a0 6c 64 3b 20 69 2b 2b 29 20 61 73 73 65 72 74 28  ld; i++) assert(
1d4b0 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 72 2e 61   memIsValid(&r.a
1d4c0 4d 65 6d 5b 69 5d 29 20 29 3b 20 7d 0a 23 65 6e  Mem[i]) ); }.#en
1d4d0 64 69 66 0a 0a 20 20 20 20 2f 2a 20 45 78 74 72  dif..    /* Extr
1d4e0 61 63 74 20 74 68 65 20 76 61 6c 75 65 20 6f 66  act the value of
1d4f0 20 52 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72   R from register
1d500 20 50 33 2e 20 2a 2f 0a 20 20 20 20 73 71 6c 69   P3. */.    sqli
1d510 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65  te3VdbeMemIntege
1d520 72 69 66 79 28 70 49 6e 33 29 3b 0a 20 20 20 20  rify(pIn3);.    
1d530 52 20 3d 20 70 49 6e 33 2d 3e 75 2e 69 3b 0a 0a  R = pIn3->u.i;..
1d540 20 20 20 20 2f 2a 20 53 65 61 72 63 68 20 74 68      /* Search th
1d550 65 20 42 2d 54 72 65 65 20 69 6e 64 65 78 2e 20  e B-Tree index. 
1d560 49 66 20 6e 6f 20 63 6f 6e 66 6c 69 63 74 69 6e  If no conflictin
1d570 67 20 72 65 63 6f 72 64 20 69 73 20 66 6f 75 6e  g record is foun
1d580 64 2c 20 6a 75 6d 70 0a 20 20 20 20 2a 2a 20 74  d, jump.    ** t
1d590 6f 20 50 32 2e 20 4f 74 68 65 72 77 69 73 65 2c  o P2. Otherwise,
1d5a0 20 63 6f 70 79 20 74 68 65 20 72 6f 77 69 64 20   copy the rowid 
1d5b0 6f 66 20 74 68 65 20 63 6f 6e 66 6c 69 63 74 69  of the conflicti
1d5c0 6e 67 20 72 65 63 6f 72 64 20 74 6f 0a 20 20 20  ng record to.   
1d5d0 20 2a 2a 20 72 65 67 69 73 74 65 72 20 50 33 20   ** register P3 
1d5e0 61 6e 64 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  and fall through
1d5f0 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73   to the next ins
1d600 74 72 75 63 74 69 6f 6e 2e 20 20 2a 2f 0a 20 20  truction.  */.  
1d610 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
1d620 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65  reeMovetoUnpacke
1d630 64 28 70 43 72 73 72 2c 20 26 72 2c 20 30 2c 20  d(pCrsr, &r, 0, 
1d640 30 2c 20 26 70 43 78 2d 3e 73 65 65 6b 52 65 73  0, &pCx->seekRes
1d650 75 6c 74 29 3b 0a 20 20 20 20 69 66 28 20 28 72  ult);.    if( (r
1d660 2e 66 6c 61 67 73 20 26 20 55 4e 50 41 43 4b 45  .flags & UNPACKE
1d670 44 5f 50 52 45 46 49 58 5f 53 45 41 52 43 48 29  D_PREFIX_SEARCH)
1d680 20 7c 7c 20 72 2e 72 6f 77 69 64 3d 3d 52 20 29   || r.rowid==R )
1d690 7b 0a 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70  {.      pc = pOp
1d6a0 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 7d 65  ->p2 - 1;.    }e
1d6b0 6c 73 65 7b 0a 20 20 20 20 20 20 70 49 6e 33 2d  lse{.      pIn3-
1d6c0 3e 75 2e 69 20 3d 20 72 2e 72 6f 77 69 64 3b 0a  >u.i = r.rowid;.
1d6d0 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61      }.  }.  brea
1d6e0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
1d6f0 20 4e 6f 74 45 78 69 73 74 73 20 50 31 20 50 32   NotExists P1 P2
1d700 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 55 73   P3 * *.**.** Us
1d710 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  e the content of
1d720 20 72 65 67 69 73 74 65 72 20 50 33 20 61 73 20   register P3 as 
1d730 61 20 69 6e 74 65 67 65 72 20 6b 65 79 2e 20 20  a integer key.  
1d740 49 66 20 61 20 72 65 63 6f 72 64 20 0a 2a 2a 20  If a record .** 
1d750 77 69 74 68 20 74 68 61 74 20 6b 65 79 20 64 6f  with that key do
1d760 65 73 20 6e 6f 74 20 65 78 69 73 74 20 69 6e 20  es not exist in 
1d770 74 61 62 6c 65 20 6f 66 20 50 31 2c 20 74 68 65  table of P1, the
1d780 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 0a 2a  n jump to P2. .*
1d790 2a 20 49 66 20 74 68 65 20 72 65 63 6f 72 64 20  * If the record 
1d7a0 64 6f 65 73 20 65 78 69 73 74 2c 20 74 68 65 6e  does exist, then
1d7b0 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 2e 20 20   fall through.  
1d7c0 54 68 65 20 63 75 72 73 6f 72 20 69 73 20 6c 65  The cursor is le
1d7d0 66 74 20 0a 2a 2a 20 70 6f 69 6e 74 69 6e 67 20  ft .** pointing 
1d7e0 74 6f 20 74 68 65 20 72 65 63 6f 72 64 20 69 66  to the record if
1d7f0 20 69 74 20 65 78 69 73 74 73 2e 0a 2a 2a 0a 2a   it exists..**.*
1d800 2a 20 54 68 65 20 64 69 66 66 65 72 65 6e 63 65  * The difference
1d810 20 62 65 74 77 65 65 6e 20 74 68 69 73 20 6f 70   between this op
1d820 65 72 61 74 69 6f 6e 20 61 6e 64 20 4e 6f 74 46  eration and NotF
1d830 6f 75 6e 64 20 69 73 20 74 68 61 74 20 74 68 69  ound is that thi
1d840 73 0a 2a 2a 20 6f 70 65 72 61 74 69 6f 6e 20 61  s.** operation a
1d850 73 73 75 6d 65 73 20 74 68 65 20 6b 65 79 20 69  ssumes the key i
1d860 73 20 61 6e 20 69 6e 74 65 67 65 72 20 61 6e 64  s an integer and
1d870 20 74 68 61 74 20 50 31 20 69 73 20 61 20 74 61   that P1 is a ta
1d880 62 6c 65 20 77 68 65 72 65 61 73 0a 2a 2a 20 4e  ble whereas.** N
1d890 6f 74 46 6f 75 6e 64 20 61 73 73 75 6d 65 73 20  otFound assumes 
1d8a0 6b 65 79 20 69 73 20 61 20 62 6c 6f 62 20 63 6f  key is a blob co
1d8b0 6e 73 74 72 75 63 74 65 64 20 66 72 6f 6d 20 4d  nstructed from M
1d8c0 61 6b 65 52 65 63 6f 72 64 20 61 6e 64 0a 2a 2a  akeRecord and.**
1d8d0 20 50 31 20 69 73 20 61 6e 20 69 6e 64 65 78 2e   P1 is an index.
1d8e0 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
1d8f0 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64   Found, NotFound
1d900 2c 20 49 73 55 6e 69 71 75 65 0a 2a 2f 0a 63 61  , IsUnique.*/.ca
1d910 73 65 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 3a  se OP_NotExists:
1d920 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d   {        /* jum
1d930 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 56 64 62 65  p, in3 */.  Vdbe
1d940 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74  Cursor *pC;.  Bt
1d950 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20  Cursor *pCrsr;. 
1d960 20 69 6e 74 20 72 65 73 3b 0a 20 20 75 36 34 20   int res;.  u64 
1d970 69 4b 65 79 3b 0a 0a 20 20 70 49 6e 33 20 3d 20  iKey;..  pIn3 = 
1d980 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
1d990 20 20 61 73 73 65 72 74 28 20 70 49 6e 33 2d 3e    assert( pIn3->
1d9a0 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20  flags & MEM_Int 
1d9b0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
1d9c0 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
1d9d0 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
1d9e0 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
1d9f0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
1da00 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
1da10 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61  assert( pC->isTa
1da20 62 6c 65 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ble );.  assert(
1da30 20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65   pC->pseudoTable
1da40 52 65 67 3d 3d 30 20 29 3b 0a 20 20 70 43 72 73  Reg==0 );.  pCrs
1da50 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b  r = pC->pCursor;
1da60 0a 20 20 69 66 28 20 70 43 72 73 72 21 3d 30 20  .  if( pCrsr!=0 
1da70 29 7b 0a 20 20 20 20 72 65 73 20 3d 20 30 3b 0a  ){.    res = 0;.
1da80 20 20 20 20 69 4b 65 79 20 3d 20 70 49 6e 33 2d      iKey = pIn3-
1da90 3e 75 2e 69 3b 0a 20 20 20 20 72 63 20 3d 20 73  >u.i;.    rc = s
1daa0 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74  qlite3BtreeMovet
1dab0 6f 55 6e 70 61 63 6b 65 64 28 70 43 72 73 72 2c  oUnpacked(pCrsr,
1dac0 20 30 2c 20 69 4b 65 79 2c 20 30 2c 20 26 72 65   0, iKey, 0, &re
1dad0 73 29 3b 0a 20 20 20 20 70 43 2d 3e 6c 61 73 74  s);.    pC->last
1dae0 52 6f 77 69 64 20 3d 20 70 49 6e 33 2d 3e 75 2e  Rowid = pIn3->u.
1daf0 69 3b 0a 20 20 20 20 70 43 2d 3e 72 6f 77 69 64  i;.    pC->rowid
1db00 49 73 56 61 6c 69 64 20 3d 20 72 65 73 3d 3d 30  IsValid = res==0
1db10 20 3f 31 3a 30 3b 0a 20 20 20 20 70 43 2d 3e 6e   ?1:0;.    pC->n
1db20 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20  ullRow = 0;.    
1db30 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20  pC->cacheStatus 
1db40 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20  = CACHE_STALE;. 
1db50 20 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d     pC->deferredM
1db60 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20 20 69  oveto = 0;.    i
1db70 66 28 20 72 65 73 21 3d 30 20 29 7b 0a 20 20 20  f( res!=0 ){.   
1db80 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
1db90 2d 20 31 3b 0a 20 20 20 20 20 20 61 73 73 65 72  - 1;.      asser
1dba0 74 28 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61  t( pC->rowidIsVa
1dbb0 6c 69 64 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 0a  lid==0 );.    }.
1dbc0 20 20 20 20 70 43 2d 3e 73 65 65 6b 52 65 73 75      pC->seekResu
1dbd0 6c 74 20 3d 20 72 65 73 3b 0a 20 20 7d 65 6c 73  lt = res;.  }els
1dbe0 65 7b 0a 20 20 20 20 2f 2a 20 54 68 69 73 20 68  e{.    /* This h
1dbf0 61 70 70 65 6e 73 20 77 68 65 6e 20 61 6e 20 61  appens when an a
1dc00 74 74 65 6d 70 74 20 74 6f 20 6f 70 65 6e 20 61  ttempt to open a
1dc10 20 72 65 61 64 20 63 75 72 73 6f 72 20 6f 6e 20   read cursor on 
1dc20 74 68 65 20 0a 20 20 20 20 2a 2a 20 73 71 6c 69  the .    ** sqli
1dc30 74 65 5f 6d 61 73 74 65 72 20 74 61 62 6c 65 20  te_master table 
1dc40 72 65 74 75 72 6e 73 20 53 51 4c 49 54 45 5f 45  returns SQLITE_E
1dc50 4d 50 54 59 2e 0a 20 20 20 20 2a 2f 0a 20 20 20  MPTY..    */.   
1dc60 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
1dc70 31 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  1;.    assert( p
1dc80 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 3d  C->rowidIsValid=
1dc90 3d 30 20 29 3b 0a 20 20 20 20 70 43 2d 3e 73 65  =0 );.    pC->se
1dca0 65 6b 52 65 73 75 6c 74 20 3d 20 30 3b 0a 20 20  ekResult = 0;.  
1dcb0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
1dcc0 20 4f 70 63 6f 64 65 3a 20 53 65 71 75 65 6e 63   Opcode: Sequenc
1dcd0 65 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  e P1 P2 * * *.**
1dce0 0a 2a 2a 20 46 69 6e 64 20 74 68 65 20 6e 65 78  .** Find the nex
1dcf0 74 20 61 76 61 69 6c 61 62 6c 65 20 73 65 71 75  t available sequ
1dd00 65 6e 63 65 20 6e 75 6d 62 65 72 20 66 6f 72 20  ence number for 
1dd10 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 57 72  cursor P1..** Wr
1dd20 69 74 65 20 74 68 65 20 73 65 71 75 65 6e 63 65  ite the sequence
1dd30 20 6e 75 6d 62 65 72 20 69 6e 74 6f 20 72 65 67   number into reg
1dd40 69 73 74 65 72 20 50 32 2e 0a 2a 2a 20 54 68 65  ister P2..** The
1dd50 20 73 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72   sequence number
1dd60 20 6f 6e 20 74 68 65 20 63 75 72 73 6f 72 20 69   on the cursor i
1dd70 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 61 66  s incremented af
1dd80 74 65 72 20 74 68 69 73 0a 2a 2a 20 69 6e 73 74  ter this.** inst
1dd90 72 75 63 74 69 6f 6e 2e 20 20 0a 2a 2f 0a 63 61  ruction.  .*/.ca
1dda0 73 65 20 4f 50 5f 53 65 71 75 65 6e 63 65 3a 20  se OP_Sequence: 
1ddb0 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f  {           /* o
1ddc0 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a  ut2-prerelease *
1ddd0 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  /.  assert( pOp-
1dde0 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
1ddf0 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
1de00 20 20 61 73 73 65 72 74 28 20 70 2d 3e 61 70 43    assert( p->apC
1de10 73 72 5b 70 4f 70 2d 3e 70 31 5d 21 3d 30 20 29  sr[pOp->p1]!=0 )
1de20 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20  ;.  pOut->u.i = 
1de30 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
1de40 5d 2d 3e 73 65 71 43 6f 75 6e 74 2b 2b 3b 0a 20  ]->seqCount++;. 
1de50 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f   break;.}.../* O
1de60 70 63 6f 64 65 3a 20 4e 65 77 52 6f 77 69 64 20  pcode: NewRowid 
1de70 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
1de80 2a 2a 20 47 65 74 20 61 20 6e 65 77 20 69 6e 74  ** Get a new int
1de90 65 67 65 72 20 72 65 63 6f 72 64 20 6e 75 6d 62  eger record numb
1dea0 65 72 20 28 61 2e 6b 2e 61 20 22 72 6f 77 69 64  er (a.k.a "rowid
1deb0 22 29 20 75 73 65 64 20 61 73 20 74 68 65 20 6b  ") used as the k
1dec0 65 79 20 74 6f 20 61 20 74 61 62 6c 65 2e 0a 2a  ey to a table..*
1ded0 2a 20 54 68 65 20 72 65 63 6f 72 64 20 6e 75 6d  * The record num
1dee0 62 65 72 20 69 73 20 6e 6f 74 20 70 72 65 76 69  ber is not previ
1def0 6f 75 73 6c 79 20 75 73 65 64 20 61 73 20 61 20  ously used as a 
1df00 6b 65 79 20 69 6e 20 74 68 65 20 64 61 74 61 62  key in the datab
1df10 61 73 65 0a 2a 2a 20 74 61 62 6c 65 20 74 68 61  ase.** table tha
1df20 74 20 63 75 72 73 6f 72 20 50 31 20 70 6f 69 6e  t cursor P1 poin
1df30 74 73 20 74 6f 2e 20 20 54 68 65 20 6e 65 77 20  ts to.  The new 
1df40 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 20 69 73  record number is
1df50 20 77 72 69 74 74 65 6e 0a 2a 2a 20 77 72 69 74   written.** writ
1df60 74 65 6e 20 74 6f 20 72 65 67 69 73 74 65 72 20  ten to register 
1df70 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 33 3e  P2..**.** If P3>
1df80 30 20 74 68 65 6e 20 50 33 20 69 73 20 61 20 72  0 then P3 is a r
1df90 65 67 69 73 74 65 72 20 69 6e 20 74 68 65 20 72  egister in the r
1dfa0 6f 6f 74 20 66 72 61 6d 65 20 6f 66 20 74 68 69  oot frame of thi
1dfb0 73 20 56 44 42 45 20 74 68 61 74 20 68 6f 6c 64  s VDBE that hold
1dfc0 73 20 0a 2a 2a 20 74 68 65 20 6c 61 72 67 65 73  s .** the larges
1dfd0 74 20 70 72 65 76 69 6f 75 73 6c 79 20 67 65 6e  t previously gen
1dfe0 65 72 61 74 65 64 20 72 65 63 6f 72 64 20 6e 75  erated record nu
1dff0 6d 62 65 72 2e 20 4e 6f 20 6e 65 77 20 72 65 63  mber. No new rec
1e000 6f 72 64 20 6e 75 6d 62 65 72 73 20 61 72 65 0a  ord numbers are.
1e010 2a 2a 20 61 6c 6c 6f 77 65 64 20 74 6f 20 62 65  ** allowed to be
1e020 20 6c 65 73 73 20 74 68 61 6e 20 74 68 69 73 20   less than this 
1e030 76 61 6c 75 65 2e 20 57 68 65 6e 20 74 68 69 73  value. When this
1e040 20 76 61 6c 75 65 20 72 65 61 63 68 65 73 20 69   value reaches i
1e050 74 73 20 6d 61 78 69 6d 75 6d 2c 20 0a 2a 2a 20  ts maximum, .** 
1e060 61 20 53 51 4c 49 54 45 5f 46 55 4c 4c 20 65 72  a SQLITE_FULL er
1e070 72 6f 72 20 69 73 20 67 65 6e 65 72 61 74 65 64  ror is generated
1e080 2e 20 54 68 65 20 50 33 20 72 65 67 69 73 74 65  . The P3 registe
1e090 72 20 69 73 20 75 70 64 61 74 65 64 20 77 69 74  r is updated wit
1e0a0 68 20 74 68 65 20 27 0a 2a 2a 20 67 65 6e 65 72  h the '.** gener
1e0b0 61 74 65 64 20 72 65 63 6f 72 64 20 6e 75 6d 62  ated record numb
1e0c0 65 72 2e 20 54 68 69 73 20 50 33 20 6d 65 63 68  er. This P3 mech
1e0d0 61 6e 69 73 6d 20 69 73 20 75 73 65 64 20 74 6f  anism is used to
1e0e0 20 68 65 6c 70 20 69 6d 70 6c 65 6d 65 6e 74 20   help implement 
1e0f0 74 68 65 0a 2a 2a 20 41 55 54 4f 49 4e 43 52 45  the.** AUTOINCRE
1e100 4d 45 4e 54 20 66 65 61 74 75 72 65 2e 0a 2a 2f  MENT feature..*/
1e110 0a 63 61 73 65 20 4f 50 5f 4e 65 77 52 6f 77 69  .case OP_NewRowi
1e120 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f  d: {           /
1e130 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73  * out2-prereleas
1e140 65 20 2a 2f 0a 20 20 69 36 34 20 76 3b 20 20 20  e */.  i64 v;   
1e150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1e160 20 54 68 65 20 6e 65 77 20 72 6f 77 69 64 20 2a   The new rowid *
1e170 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  /.  VdbeCursor *
1e180 70 43 3b 20 20 20 20 20 20 20 20 2f 2a 20 43 75  pC;        /* Cu
1e190 72 73 6f 72 20 6f 66 20 74 61 62 6c 65 20 74 6f  rsor of table to
1e1a0 20 67 65 74 20 74 68 65 20 6e 65 77 20 72 6f 77   get the new row
1e1b0 69 64 20 2a 2f 0a 20 20 69 6e 74 20 72 65 73 3b  id */.  int res;
1e1c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1e1d0 2a 20 52 65 73 75 6c 74 20 6f 66 20 61 6e 20 73  * Result of an s
1e1e0 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74 28  qlite3BtreeLast(
1e1f0 29 20 2a 2f 0a 20 20 69 6e 74 20 63 6e 74 3b 20  ) */.  int cnt; 
1e200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1e210 20 43 6f 75 6e 74 65 72 20 74 6f 20 6c 69 6d 69   Counter to limi
1e220 74 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  t the number of 
1e230 73 65 61 72 63 68 65 73 20 2a 2f 0a 20 20 4d 65  searches */.  Me
1e240 6d 20 2a 70 4d 65 6d 3b 20 20 20 20 20 20 20 20  m *pMem;        
1e250 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72       /* Register
1e260 20 68 6f 6c 64 69 6e 67 20 6c 61 72 67 65 73 74   holding largest
1e270 20 72 6f 77 69 64 20 66 6f 72 20 41 55 54 4f 49   rowid for AUTOI
1e280 4e 43 52 45 4d 45 4e 54 20 2a 2f 0a 20 20 56 64  NCREMENT */.  Vd
1e290 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b  beFrame *pFrame;
1e2a0 20 20 20 20 20 2f 2a 20 52 6f 6f 74 20 66 72 61       /* Root fra
1e2b0 6d 65 20 6f 66 20 56 44 42 45 20 2a 2f 0a 0a 20  me of VDBE */.. 
1e2c0 20 76 20 3d 20 30 3b 0a 20 20 72 65 73 20 3d 20   v = 0;.  res = 
1e2d0 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  0;.  assert( pOp
1e2e0 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
1e2f0 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
1e300 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
1e310 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
1e320 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
1e330 69 66 28 20 4e 45 56 45 52 28 70 43 2d 3e 70 43  if( NEVER(pC->pC
1e340 75 72 73 6f 72 3d 3d 30 29 20 29 7b 0a 20 20 20  ursor==0) ){.   
1e350 20 2f 2a 20 54 68 65 20 7a 65 72 6f 20 69 6e 69   /* The zero ini
1e360 74 69 61 6c 69 7a 61 74 69 6f 6e 20 61 62 6f 76  tialization abov
1e370 65 20 69 73 20 61 6c 6c 20 74 68 61 74 20 69 73  e is all that is
1e380 20 6e 65 65 64 65 64 20 2a 2f 0a 20 20 7d 65 6c   needed */.  }el
1e390 73 65 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20 6e  se{.    /* The n
1e3a0 65 78 74 20 72 6f 77 69 64 20 6f 72 20 72 65 63  ext rowid or rec
1e3b0 6f 72 64 20 6e 75 6d 62 65 72 20 28 64 69 66 66  ord number (diff
1e3c0 65 72 65 6e 74 20 74 65 72 6d 73 20 66 6f 72 20  erent terms for 
1e3d0 74 68 65 20 73 61 6d 65 0a 20 20 20 20 2a 2a 20  the same.    ** 
1e3e0 74 68 69 6e 67 29 20 69 73 20 6f 62 74 61 69 6e  thing) is obtain
1e3f0 65 64 20 69 6e 20 61 20 74 77 6f 2d 73 74 65 70  ed in a two-step
1e400 20 61 6c 67 6f 72 69 74 68 6d 2e 0a 20 20 20 20   algorithm..    
1e410 2a 2a 0a 20 20 20 20 2a 2a 20 46 69 72 73 74 20  **.    ** First 
1e420 77 65 20 61 74 74 65 6d 70 74 20 74 6f 20 66 69  we attempt to fi
1e430 6e 64 20 74 68 65 20 6c 61 72 67 65 73 74 20 65  nd the largest e
1e440 78 69 73 74 69 6e 67 20 72 6f 77 69 64 20 61 6e  xisting rowid an
1e450 64 20 61 64 64 20 6f 6e 65 0a 20 20 20 20 2a 2a  d add one.    **
1e460 20 74 6f 20 74 68 61 74 2e 20 20 42 75 74 20 69   to that.  But i
1e470 66 20 74 68 65 20 6c 61 72 67 65 73 74 20 65 78  f the largest ex
1e480 69 73 74 69 6e 67 20 72 6f 77 69 64 20 69 73 20  isting rowid is 
1e490 61 6c 72 65 61 64 79 20 74 68 65 20 6d 61 78 69  already the maxi
1e4a0 6d 75 6d 0a 20 20 20 20 2a 2a 20 70 6f 73 69 74  mum.    ** posit
1e4b0 69 76 65 20 69 6e 74 65 67 65 72 2c 20 77 65 20  ive integer, we 
1e4c0 68 61 76 65 20 74 6f 20 66 61 6c 6c 20 74 68 72  have to fall thr
1e4d0 6f 75 67 68 20 74 6f 20 74 68 65 20 73 65 63 6f  ough to the seco
1e4e0 6e 64 0a 20 20 20 20 2a 2a 20 70 72 6f 62 61 62  nd.    ** probab
1e4f0 69 6c 69 73 74 69 63 20 61 6c 67 6f 72 69 74 68  ilistic algorith
1e500 6d 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20  m.    **.    ** 
1e510 54 68 65 20 73 65 63 6f 6e 64 20 61 6c 67 6f 72  The second algor
1e520 69 74 68 6d 20 69 73 20 74 6f 20 73 65 6c 65 63  ithm is to selec
1e530 74 20 61 20 72 6f 77 69 64 20 61 74 20 72 61 6e  t a rowid at ran
1e540 64 6f 6d 20 61 6e 64 20 73 65 65 20 69 66 0a 20  dom and see if. 
1e550 20 20 20 2a 2a 20 69 74 20 61 6c 72 65 61 64 79     ** it already
1e560 20 65 78 69 73 74 73 20 69 6e 20 74 68 65 20 74   exists in the t
1e570 61 62 6c 65 2e 20 20 49 66 20 69 74 20 64 6f 65  able.  If it doe
1e580 73 20 6e 6f 74 20 65 78 69 73 74 2c 20 77 65 20  s not exist, we 
1e590 68 61 76 65 0a 20 20 20 20 2a 2a 20 73 75 63 63  have.    ** succ
1e5a0 65 65 64 65 64 2e 20 20 49 66 20 74 68 65 20 72  eeded.  If the r
1e5b0 61 6e 64 6f 6d 20 72 6f 77 69 64 20 64 6f 65 73  andom rowid does
1e5c0 20 65 78 69 73 74 2c 20 77 65 20 73 65 6c 65 63   exist, we selec
1e5d0 74 20 61 20 6e 65 77 20 6f 6e 65 0a 20 20 20 20  t a new one.    
1e5e0 2a 2a 20 61 6e 64 20 74 72 79 20 61 67 61 69 6e  ** and try again
1e5f0 2c 20 75 70 20 74 6f 20 31 30 30 20 74 69 6d 65  , up to 100 time
1e600 73 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 61 73  s..    */.    as
1e610 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c  sert( pC->isTabl
1e620 65 20 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c  e );..#ifdef SQL
1e630 49 54 45 5f 33 32 42 49 54 5f 52 4f 57 49 44 0a  ITE_32BIT_ROWID.
1e640 23 20 20 20 64 65 66 69 6e 65 20 4d 41 58 5f 52  #   define MAX_R
1e650 4f 57 49 44 20 30 78 37 66 66 66 66 66 66 66 0a  OWID 0x7fffffff.
1e660 23 65 6c 73 65 0a 20 20 20 20 2f 2a 20 53 6f 6d  #else.    /* Som
1e670 65 20 63 6f 6d 70 69 6c 65 72 73 20 63 6f 6d 70  e compilers comp
1e680 6c 61 69 6e 20 61 62 6f 75 74 20 63 6f 6e 73 74  lain about const
1e690 61 6e 74 73 20 6f 66 20 74 68 65 20 66 6f 72 6d  ants of the form
1e6a0 20 30 78 37 66 66 66 66 66 66 66 66 66 66 66 66   0x7ffffffffffff
1e6b0 66 66 66 2e 0a 20 20 20 20 2a 2a 20 4f 74 68 65  fff..    ** Othe
1e6c0 72 73 20 63 6f 6d 70 6c 61 69 6e 20 61 62 6f 75  rs complain abou
1e6d0 74 20 30 78 37 66 66 66 66 66 66 66 66 66 66 66  t 0x7fffffffffff
1e6e0 66 66 66 66 66 4c 4c 2e 20 20 54 68 65 20 66 6f  fffffLL.  The fo
1e6f0 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 20 73 65  llowing macro se
1e700 65 6d 73 0a 20 20 20 20 2a 2a 20 74 6f 20 70 72  ems.    ** to pr
1e710 6f 76 69 64 65 20 74 68 65 20 63 6f 6e 73 74 61  ovide the consta
1e720 6e 74 20 77 68 69 6c 65 20 6d 61 6b 69 6e 67 20  nt while making 
1e730 61 6c 6c 20 63 6f 6d 70 69 6c 65 72 73 20 68 61  all compilers ha
1e740 70 70 79 2e 0a 20 20 20 20 2a 2f 0a 23 20 20 20  ppy..    */.#   
1e750 64 65 66 69 6e 65 20 4d 41 58 5f 52 4f 57 49 44  define MAX_ROWID
1e760 20 20 28 69 36 34 29 28 20 28 28 28 75 36 34 29    (i64)( (((u64)
1e770 30 78 37 66 66 66 66 66 66 66 29 3c 3c 33 32 29  0x7fffffff)<<32)
1e780 20 7c 20 28 75 36 34 29 30 78 66 66 66 66 66 66   | (u64)0xffffff
1e790 66 66 20 29 0a 23 65 6e 64 69 66 0a 0a 20 20 20  ff ).#endif..   
1e7a0 20 69 66 28 20 21 70 43 2d 3e 75 73 65 52 61 6e   if( !pC->useRan
1e7b0 64 6f 6d 52 6f 77 69 64 20 29 7b 0a 20 20 20 20  domRowid ){.    
1e7c0 20 20 76 20 3d 20 73 71 6c 69 74 65 33 42 74 72    v = sqlite3Btr
1e7d0 65 65 47 65 74 43 61 63 68 65 64 52 6f 77 69 64  eeGetCachedRowid
1e7e0 28 70 43 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20  (pC->pCursor);. 
1e7f0 20 20 20 20 20 69 66 28 20 76 3d 3d 30 20 29 7b       if( v==0 ){
1e800 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71  .        rc = sq
1e810 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74 28 70  lite3BtreeLast(p
1e820 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72 65 73  C->pCursor, &res
1e830 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 72  );.        if( r
1e840 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c!=SQLITE_OK ){.
1e850 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61            goto a
1e860 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
1e870 72 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  r;.        }.   
1e880 20 20 20 20 20 69 66 28 20 72 65 73 20 29 7b 0a       if( res ){.
1e890 20 20 20 20 20 20 20 20 20 20 76 20 3d 20 31 3b            v = 1;
1e8a0 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 36 31 39     /* IMP: R-619
1e8b0 31 34 2d 34 38 30 37 34 20 2a 2f 0a 20 20 20 20  14-48074 */.    
1e8c0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
1e8d0 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c       assert( sql
1e8e0 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 49  ite3BtreeCursorI
1e8f0 73 56 61 6c 69 64 28 70 43 2d 3e 70 43 75 72 73  sValid(pC->pCurs
1e900 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 20 20 20  or) );.         
1e910 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
1e920 65 65 4b 65 79 53 69 7a 65 28 70 43 2d 3e 70 43  eeKeySize(pC->pC
1e930 75 72 73 6f 72 2c 20 26 76 29 3b 0a 20 20 20 20  ursor, &v);.    
1e940 20 20 20 20 20 20 61 73 73 65 72 74 28 20 72 63        assert( rc
1e950 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 20  ==SQLITE_OK );  
1e960 20 2f 2a 20 43 61 6e 6e 6f 74 20 66 61 69 6c 20   /* Cannot fail 
1e970 66 6f 6c 6c 6f 77 69 6e 67 20 42 74 72 65 65 4c  following BtreeL
1e980 61 73 74 28 29 20 2a 2f 0a 20 20 20 20 20 20 20  ast() */.       
1e990 20 20 20 69 66 28 20 76 3d 3d 4d 41 58 5f 52 4f     if( v==MAX_RO
1e9a0 57 49 44 20 29 7b 0a 20 20 20 20 20 20 20 20 20  WID ){.         
1e9b0 20 20 20 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d     pC->useRandom
1e9c0 52 6f 77 69 64 20 3d 20 31 3b 0a 20 20 20 20 20  Rowid = 1;.     
1e9d0 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
1e9e0 20 20 20 20 20 20 20 20 76 2b 2b 3b 20 20 20 2f          v++;   /
1e9f0 2a 20 49 4d 50 3a 20 52 2d 32 39 35 33 38 2d 33  * IMP: R-29538-3
1ea00 34 39 38 37 20 2a 2f 0a 20 20 20 20 20 20 20 20  4987 */.        
1ea10 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20    }.        }.  
1ea20 20 20 20 20 7d 0a 0a 23 69 66 6e 64 65 66 20 53      }..#ifndef S
1ea30 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49  QLITE_OMIT_AUTOI
1ea40 4e 43 52 45 4d 45 4e 54 0a 20 20 20 20 20 20 69  NCREMENT.      i
1ea50 66 28 20 70 4f 70 2d 3e 70 33 20 29 7b 0a 20 20  f( pOp->p3 ){.  
1ea60 20 20 20 20 20 20 2f 2a 20 41 73 73 65 72 74 20        /* Assert 
1ea70 74 68 61 74 20 50 33 20 69 73 20 61 20 76 61 6c  that P3 is a val
1ea80 69 64 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 2e 20  id memory cell. 
1ea90 2a 2f 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  */.        asser
1eaa0 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a  t( pOp->p3>0 );.
1eab0 20 20 20 20 20 20 20 20 69 66 28 20 70 2d 3e 70          if( p->p
1eac0 46 72 61 6d 65 20 29 7b 0a 20 20 20 20 20 20 20  Frame ){.       
1ead0 20 20 20 66 6f 72 28 70 46 72 61 6d 65 3d 70 2d     for(pFrame=p-
1eae0 3e 70 46 72 61 6d 65 3b 20 70 46 72 61 6d 65 2d  >pFrame; pFrame-
1eaf0 3e 70 50 61 72 65 6e 74 3b 20 70 46 72 61 6d 65  >pParent; pFrame
1eb00 3d 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74  =pFrame->pParent
1eb10 29 3b 0a 20 20 20 20 20 20 20 20 20 20 2f 2a 20  );.          /* 
1eb20 41 73 73 65 72 74 20 74 68 61 74 20 50 33 20 69  Assert that P3 i
1eb30 73 20 61 20 76 61 6c 69 64 20 6d 65 6d 6f 72 79  s a valid memory
1eb40 20 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20 20   cell. */.      
1eb50 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
1eb60 3e 70 33 3c 3d 70 46 72 61 6d 65 2d 3e 6e 4d 65  >p3<=pFrame->nMe
1eb70 6d 20 29 3b 0a 20 20 20 20 20 20 20 20 20 20 70  m );.          p
1eb80 4d 65 6d 20 3d 20 26 70 46 72 61 6d 65 2d 3e 61  Mem = &pFrame->a
1eb90 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
1eba0 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
1ebb0 20 20 20 20 20 20 20 2f 2a 20 41 73 73 65 72 74         /* Assert
1ebc0 20 74 68 61 74 20 50 33 20 69 73 20 61 20 76 61   that P3 is a va
1ebd0 6c 69 64 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 2e  lid memory cell.
1ebe0 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 61 73   */.          as
1ebf0 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 70  sert( pOp->p3<=p
1ec00 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20  ->nMem );.      
1ec10 20 20 20 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d      pMem = &aMem
1ec20 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 20  [pOp->p3];.     
1ec30 20 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43       memAboutToC
1ec40 68 61 6e 67 65 28 70 2c 20 70 4d 65 6d 29 3b 0a  hange(p, pMem);.
1ec50 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
1ec60 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
1ec70 61 6c 69 64 28 70 4d 65 6d 29 20 29 3b 0a 0a 20  alid(pMem) );.. 
1ec80 20 20 20 20 20 20 20 52 45 47 49 53 54 45 52 5f         REGISTER_
1ec90 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70  TRACE(pOp->p3, p
1eca0 4d 65 6d 29 3b 0a 20 20 20 20 20 20 20 20 73 71  Mem);.        sq
1ecb0 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65  lite3VdbeMemInte
1ecc0 67 65 72 69 66 79 28 70 4d 65 6d 29 3b 0a 20 20  gerify(pMem);.  
1ecd0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28 70        assert( (p
1ece0 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  Mem->flags & MEM
1ecf0 5f 49 6e 74 29 21 3d 30 20 29 3b 20 20 2f 2a 20  _Int)!=0 );  /* 
1ed00 6d 65 6d 28 50 33 29 20 68 6f 6c 64 73 20 61 6e  mem(P3) holds an
1ed10 20 69 6e 74 65 67 65 72 20 2a 2f 0a 20 20 20 20   integer */.    
1ed20 20 20 20 20 69 66 28 20 70 4d 65 6d 2d 3e 75 2e      if( pMem->u.
1ed30 69 3d 3d 4d 41 58 5f 52 4f 57 49 44 20 7c 7c 20  i==MAX_ROWID || 
1ed40 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77  pC->useRandomRow
1ed50 69 64 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  id ){.          
1ed60 72 63 20 3d 20 53 51 4c 49 54 45 5f 46 55 4c 4c  rc = SQLITE_FULL
1ed70 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 31 32  ;   /* IMP: R-12
1ed80 32 37 35 2d 36 31 33 33 38 20 2a 2f 0a 20 20 20  275-61338 */.   
1ed90 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72         goto abor
1eda0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
1edb0 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
1edc0 20 20 69 66 28 20 76 3c 70 4d 65 6d 2d 3e 75 2e    if( v<pMem->u.
1edd0 69 2b 31 20 29 7b 0a 20 20 20 20 20 20 20 20 20  i+1 ){.         
1ede0 20 76 20 3d 20 70 4d 65 6d 2d 3e 75 2e 69 20 2b   v = pMem->u.i +
1edf0 20 31 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20   1;.        }.  
1ee00 20 20 20 20 20 20 70 4d 65 6d 2d 3e 75 2e 69 20        pMem->u.i 
1ee10 3d 20 76 3b 0a 20 20 20 20 20 20 7d 0a 23 65 6e  = v;.      }.#en
1ee20 64 69 66 0a 0a 20 20 20 20 20 20 73 71 6c 69 74  dif..      sqlit
1ee30 65 33 42 74 72 65 65 53 65 74 43 61 63 68 65 64  e3BtreeSetCached
1ee40 52 6f 77 69 64 28 70 43 2d 3e 70 43 75 72 73 6f  Rowid(pC->pCurso
1ee50 72 2c 20 76 3c 4d 41 58 5f 52 4f 57 49 44 20 3f  r, v<MAX_ROWID ?
1ee60 20 76 2b 31 20 3a 20 30 29 3b 0a 20 20 20 20 7d   v+1 : 0);.    }
1ee70 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 75 73 65  .    if( pC->use
1ee80 52 61 6e 64 6f 6d 52 6f 77 69 64 20 29 7b 0a 20  RandomRowid ){. 
1ee90 20 20 20 20 20 2f 2a 20 49 4d 50 4c 45 4d 45 4e       /* IMPLEMEN
1eea0 54 41 54 49 4f 4e 2d 4f 46 3a 20 52 2d 30 37 36  TATION-OF: R-076
1eeb0 37 37 2d 34 31 38 38 31 20 49 66 20 74 68 65 20  77-41881 If the 
1eec0 6c 61 72 67 65 73 74 20 52 4f 57 49 44 20 69 73  largest ROWID is
1eed0 20 65 71 75 61 6c 20 74 6f 20 74 68 65 0a 20 20   equal to the.  
1eee0 20 20 20 20 2a 2a 20 6c 61 72 67 65 73 74 20 70      ** largest p
1eef0 6f 73 73 69 62 6c 65 20 69 6e 74 65 67 65 72 20  ossible integer 
1ef00 28 39 32 32 33 33 37 32 30 33 36 38 35 34 37 37  (922337203685477
1ef10 35 38 30 37 29 20 74 68 65 6e 20 74 68 65 20 64  5807) then the d
1ef20 61 74 61 62 61 73 65 0a 20 20 20 20 20 20 2a 2a  atabase.      **
1ef30 20 65 6e 67 69 6e 65 20 73 74 61 72 74 73 20 70   engine starts p
1ef40 69 63 6b 69 6e 67 20 70 6f 73 69 74 69 76 65 20  icking positive 
1ef50 63 61 6e 64 69 64 61 74 65 20 52 4f 57 49 44 73  candidate ROWIDs
1ef60 20 61 74 20 72 61 6e 64 6f 6d 20 75 6e 74 69 6c   at random until
1ef70 0a 20 20 20 20 20 20 2a 2a 20 69 74 20 66 69 6e  .      ** it fin
1ef80 64 73 20 6f 6e 65 20 74 68 61 74 20 69 73 20 6e  ds one that is n
1ef90 6f 74 20 70 72 65 76 69 6f 75 73 6c 79 20 75 73  ot previously us
1efa0 65 64 2e 20 2a 2f 0a 20 20 20 20 20 20 61 73 73  ed. */.      ass
1efb0 65 72 74 28 20 70 4f 70 2d 3e 70 33 3d 3d 30 20  ert( pOp->p3==0 
1efc0 29 3b 20 20 2f 2a 20 57 65 20 63 61 6e 6e 6f 74  );  /* We cannot
1efd0 20 62 65 20 69 6e 20 72 61 6e 64 6f 6d 20 72 6f   be in random ro
1efe0 77 69 64 20 6d 6f 64 65 20 69 66 20 74 68 69 73  wid mode if this
1eff0 20 69 73 0a 20 20 20 20 20 20 20 20 20 20 20 20   is.            
1f000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f010 20 2a 2a 20 61 6e 20 41 55 54 4f 49 4e 43 52 45   ** an AUTOINCRE
1f020 4d 45 4e 54 20 74 61 62 6c 65 2e 20 2a 2f 0a 20  MENT table. */. 
1f030 20 20 20 20 20 2f 2a 20 6f 6e 20 74 68 65 20 66       /* on the f
1f040 69 72 73 74 20 61 74 74 65 6d 70 74 2c 20 73 69  irst attempt, si
1f050 6d 70 6c 79 20 64 6f 20 6f 6e 65 20 6d 6f 72 65  mply do one more
1f060 20 74 68 61 6e 20 70 72 65 76 69 6f 75 73 20 2a   than previous *
1f070 2f 0a 20 20 20 20 20 20 76 20 3d 20 64 62 2d 3e  /.      v = db->
1f080 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20 20 20 20  lastRowid;.     
1f090 20 76 20 26 3d 20 28 4d 41 58 5f 52 4f 57 49 44   v &= (MAX_ROWID
1f0a0 3e 3e 31 29 3b 20 2f 2a 20 65 6e 73 75 72 65 20  >>1); /* ensure 
1f0b0 64 6f 65 73 6e 27 74 20 67 6f 20 6e 65 67 61 74  doesn't go negat
1f0c0 69 76 65 20 2a 2f 0a 20 20 20 20 20 20 76 2b 2b  ive */.      v++
1f0d0 3b 20 2f 2a 20 65 6e 73 75 72 65 20 6e 6f 6e 2d  ; /* ensure non-
1f0e0 7a 65 72 6f 20 2a 2f 0a 20 20 20 20 20 20 63 6e  zero */.      cn
1f0f0 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 77 68 69  t = 0;.      whi
1f100 6c 65 28 20 20 20 28 28 72 63 20 3d 20 73 71 6c  le(   ((rc = sql
1f110 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55  ite3BtreeMovetoU
1f120 6e 70 61 63 6b 65 64 28 70 43 2d 3e 70 43 75 72  npacked(pC->pCur
1f130 73 6f 72 2c 20 30 2c 20 28 75 36 34 29 76 2c 0a  sor, 0, (u64)v,.
1f140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f170 20 30 2c 20 26 72 65 73 29 29 3d 3d 53 51 4c 49   0, &res))==SQLI
1f180 54 45 5f 4f 4b 29 0a 20 20 20 20 20 20 20 20 20  TE_OK).         
1f190 20 20 20 26 26 20 28 72 65 73 3d 3d 30 29 0a 20     && (res==0). 
1f1a0 20 20 20 20 20 20 20 20 20 20 20 26 26 20 28 2b             && (+
1f1b0 2b 63 6e 74 3c 31 30 30 29 29 7b 0a 20 20 20 20  +cnt<100)){.    
1f1c0 20 20 20 20 2f 2a 20 63 6f 6c 6c 69 73 69 6f 6e      /* collision
1f1d0 20 2d 20 74 72 79 20 61 6e 6f 74 68 65 72 20 72   - try another r
1f1e0 61 6e 64 6f 6d 20 72 6f 77 69 64 20 2a 2f 0a 20  andom rowid */. 
1f1f0 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 72         sqlite3_r
1f200 61 6e 64 6f 6d 6e 65 73 73 28 73 69 7a 65 6f 66  andomness(sizeof
1f210 28 76 29 2c 20 26 76 29 3b 0a 20 20 20 20 20 20  (v), &v);.      
1f220 20 20 69 66 28 20 63 6e 74 3c 35 20 29 7b 0a 20    if( cnt<5 ){. 
1f230 20 20 20 20 20 20 20 20 20 2f 2a 20 74 72 79 20           /* try 
1f240 22 73 6d 61 6c 6c 22 20 72 61 6e 64 6f 6d 20 72  "small" random r
1f250 6f 77 69 64 73 20 66 6f 72 20 74 68 65 20 69 6e  owids for the in
1f260 69 74 69 61 6c 20 61 74 74 65 6d 70 74 73 20 2a  itial attempts *
1f270 2f 0a 20 20 20 20 20 20 20 20 20 20 76 20 26 3d  /.          v &=
1f280 20 30 78 66 66 66 66 66 66 3b 0a 20 20 20 20 20   0xffffff;.     
1f290 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
1f2a0 20 20 20 20 76 20 26 3d 20 28 4d 41 58 5f 52 4f      v &= (MAX_RO
1f2b0 57 49 44 3e 3e 31 29 3b 20 2f 2a 20 65 6e 73 75  WID>>1); /* ensu
1f2c0 72 65 20 64 6f 65 73 6e 27 74 20 67 6f 20 6e 65  re doesn't go ne
1f2d0 67 61 74 69 76 65 20 2a 2f 0a 20 20 20 20 20 20  gative */.      
1f2e0 20 20 7d 0a 20 20 20 20 20 20 20 20 76 2b 2b 3b    }.        v++;
1f2f0 20 2f 2a 20 65 6e 73 75 72 65 20 6e 6f 6e 2d 7a   /* ensure non-z
1f300 65 72 6f 20 2a 2f 0a 20 20 20 20 20 20 7d 0a 20  ero */.      }. 
1f310 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c       if( rc==SQL
1f320 49 54 45 5f 4f 4b 20 26 26 20 72 65 73 3d 3d 30  ITE_OK && res==0
1f330 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d   ){.        rc =
1f340 20 53 51 4c 49 54 45 5f 46 55 4c 4c 3b 20 20 20   SQLITE_FULL;   
1f350 2f 2a 20 49 4d 50 3a 20 52 2d 33 38 32 31 39 2d  /* IMP: R-38219-
1f360 35 33 30 30 32 20 2a 2f 0a 20 20 20 20 20 20 20  53002 */.       
1f370 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
1f380 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20  to_error;.      
1f390 7d 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  }.      assert( 
1f3a0 76 3e 30 20 29 3b 20 20 2f 2a 20 45 56 3a 20 52  v>0 );  /* EV: R
1f3b0 2d 34 30 38 31 32 2d 30 33 35 37 30 20 2a 2f 0a  -40812-03570 */.
1f3c0 20 20 20 20 7d 0a 20 20 20 20 70 43 2d 3e 72 6f      }.    pC->ro
1f3d0 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a  widIsValid = 0;.
1f3e0 20 20 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64      pC->deferred
1f3f0 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20 20  Moveto = 0;.    
1f400 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20  pC->cacheStatus 
1f410 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20  = CACHE_STALE;. 
1f420 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d   }.  pOut->u.i =
1f430 20 76 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a   v;.  break;.}..
1f440 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 73 65 72  /* Opcode: Inser
1f450 74 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  t P1 P2 P3 P4 P5
1f460 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 61 6e 20  .**.** Write an 
1f470 65 6e 74 72 79 20 69 6e 74 6f 20 74 68 65 20 74  entry into the t
1f480 61 62 6c 65 20 6f 66 20 63 75 72 73 6f 72 20 50  able of cursor P
1f490 31 2e 20 20 41 20 6e 65 77 20 65 6e 74 72 79 20  1.  A new entry 
1f4a0 69 73 0a 2a 2a 20 63 72 65 61 74 65 64 20 69 66  is.** created if
1f4b0 20 69 74 20 64 6f 65 73 6e 27 74 20 61 6c 72 65   it doesn't alre
1f4c0 61 64 79 20 65 78 69 73 74 20 6f 72 20 74 68 65  ady exist or the
1f4d0 20 64 61 74 61 20 66 6f 72 20 61 6e 20 65 78 69   data for an exi
1f4e0 73 74 69 6e 67 0a 2a 2a 20 65 6e 74 72 79 20 69  sting.** entry i
1f4f0 73 20 6f 76 65 72 77 72 69 74 74 65 6e 2e 20 20  s overwritten.  
1f500 54 68 65 20 64 61 74 61 20 69 73 20 74 68 65 20  The data is the 
1f510 76 61 6c 75 65 20 4d 45 4d 5f 42 6c 6f 62 20 73  value MEM_Blob s
1f520 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65  tored in registe
1f530 72 0a 2a 2a 20 6e 75 6d 62 65 72 20 50 32 2e 20  r.** number P2. 
1f540 54 68 65 20 6b 65 79 20 69 73 20 73 74 6f 72 65  The key is store
1f550 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  d in register P3
1f560 2e 20 54 68 65 20 6b 65 79 20 6d 75 73 74 0a 2a  . The key must.*
1f570 2a 20 62 65 20 61 20 4d 45 4d 5f 49 6e 74 2e 0a  * be a MEM_Int..
1f580 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46  **.** If the OPF
1f590 4c 41 47 5f 4e 43 48 41 4e 47 45 20 66 6c 61 67  LAG_NCHANGE flag
1f5a0 20 6f 66 20 50 35 20 69 73 20 73 65 74 2c 20 74   of P5 is set, t
1f5b0 68 65 6e 20 74 68 65 20 72 6f 77 20 63 68 61 6e  hen the row chan
1f5c0 67 65 20 63 6f 75 6e 74 20 69 73 0a 2a 2a 20 69  ge count is.** i
1f5d0 6e 63 72 65 6d 65 6e 74 65 64 20 28 6f 74 68 65  ncremented (othe
1f5e0 72 77 69 73 65 20 6e 6f 74 29 2e 20 20 49 66 20  rwise not).  If 
1f5f0 74 68 65 20 4f 50 46 4c 41 47 5f 4c 41 53 54 52  the OPFLAG_LASTR
1f600 4f 57 49 44 20 66 6c 61 67 20 6f 66 20 50 35 20  OWID flag of P5 
1f610 69 73 20 73 65 74 2c 0a 2a 2a 20 74 68 65 6e 20  is set,.** then 
1f620 72 6f 77 69 64 20 69 73 20 73 74 6f 72 65 64 20  rowid is stored 
1f630 66 6f 72 20 73 75 62 73 65 71 75 65 6e 74 20 72  for subsequent r
1f640 65 74 75 72 6e 20 62 79 20 74 68 65 0a 2a 2a 20  eturn by the.** 
1f650 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e 73  sqlite3_last_ins
1f660 65 72 74 5f 72 6f 77 69 64 28 29 20 66 75 6e 63  ert_rowid() func
1f670 74 69 6f 6e 20 28 6f 74 68 65 72 77 69 73 65 20  tion (otherwise 
1f680 69 74 20 69 73 20 75 6e 6d 6f 64 69 66 69 65 64  it is unmodified
1f690 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  )..**.** If the 
1f6a0 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45  OPFLAG_USESEEKRE
1f6b0 53 55 4c 54 20 66 6c 61 67 20 6f 66 20 50 35 20  SULT flag of P5 
1f6c0 69 73 20 73 65 74 20 61 6e 64 20 69 66 20 74 68  is set and if th
1f6d0 65 20 72 65 73 75 6c 74 20 6f 66 0a 2a 2a 20 74  e result of.** t
1f6e0 68 65 20 6c 61 73 74 20 73 65 65 6b 20 6f 70 65  he last seek ope
1f6f0 72 61 74 69 6f 6e 20 28 4f 50 5f 4e 6f 74 45 78  ration (OP_NotEx
1f700 69 73 74 73 29 20 77 61 73 20 61 20 73 75 63 63  ists) was a succ
1f710 65 73 73 2c 20 74 68 65 6e 20 74 68 69 73 0a 2a  ess, then this.*
1f720 2a 20 6f 70 65 72 61 74 69 6f 6e 20 77 69 6c 6c  * operation will
1f730 20 6e 6f 74 20 61 74 74 65 6d 70 74 20 74 6f 20   not attempt to 
1f740 66 69 6e 64 20 74 68 65 20 61 70 70 72 6f 70 72  find the appropr
1f750 69 61 74 65 20 72 6f 77 20 62 65 66 6f 72 65 20  iate row before 
1f760 64 6f 69 6e 67 0a 2a 2a 20 74 68 65 20 69 6e 73  doing.** the ins
1f770 65 72 74 20 62 75 74 20 77 69 6c 6c 20 69 6e 73  ert but will ins
1f780 74 65 61 64 20 6f 76 65 72 77 72 69 74 65 20 74  tead overwrite t
1f790 68 65 20 72 6f 77 20 74 68 61 74 20 74 68 65 20  he row that the 
1f7a0 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 75 72  cursor is.** cur
1f7b0 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20  rently pointing 
1f7c0 74 6f 2e 20 20 50 72 65 73 75 6d 61 62 6c 79 2c  to.  Presumably,
1f7d0 20 74 68 65 20 70 72 69 6f 72 20 4f 50 5f 4e 6f   the prior OP_No
1f7e0 74 45 78 69 73 74 73 20 6f 70 63 6f 64 65 0a 2a  tExists opcode.*
1f7f0 2a 20 68 61 73 20 61 6c 72 65 61 64 79 20 70 6f  * has already po
1f800 73 69 74 69 6f 6e 65 64 20 74 68 65 20 63 75 72  sitioned the cur
1f810 73 6f 72 20 63 6f 72 72 65 63 74 6c 79 2e 20 20  sor correctly.  
1f820 54 68 69 73 20 69 73 20 61 6e 20 6f 70 74 69 6d  This is an optim
1f830 69 7a 61 74 69 6f 6e 0a 2a 2a 20 74 68 61 74 20  ization.** that 
1f840 62 6f 6f 73 74 73 20 70 65 72 66 6f 72 6d 61 6e  boosts performan
1f850 63 65 20 62 79 20 61 76 6f 69 64 69 6e 67 20 72  ce by avoiding r
1f860 65 64 75 6e 64 61 6e 74 20 73 65 65 6b 73 2e 0a  edundant seeks..
1f870 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46  **.** If the OPF
1f880 4c 41 47 5f 49 53 55 50 44 41 54 45 20 66 6c 61  LAG_ISUPDATE fla
1f890 67 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 74  g is set, then t
1f8a0 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 70 61  his opcode is pa
1f8b0 72 74 20 6f 66 20 61 6e 0a 2a 2a 20 55 50 44 41  rt of an.** UPDA
1f8c0 54 45 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20 4f  TE operation.  O
1f8d0 74 68 65 72 77 69 73 65 20 28 69 66 20 74 68 65  therwise (if the
1f8e0 20 66 6c 61 67 20 69 73 20 63 6c 65 61 72 29 20   flag is clear) 
1f8f0 74 68 65 6e 20 74 68 69 73 20 6f 70 63 6f 64 65  then this opcode
1f900 0a 2a 2a 20 69 73 20 70 61 72 74 20 6f 66 20 61  .** is part of a
1f910 6e 20 49 4e 53 45 52 54 20 6f 70 65 72 61 74 69  n INSERT operati
1f920 6f 6e 2e 20 20 54 68 65 20 64 69 66 66 65 72 65  on.  The differe
1f930 6e 63 65 20 69 73 20 6f 6e 6c 79 20 69 6d 70 6f  nce is only impo
1f940 72 74 61 6e 74 20 74 6f 0a 2a 2a 20 74 68 65 20  rtant to.** the 
1f950 75 70 64 61 74 65 20 68 6f 6f 6b 2e 0a 2a 2a 0a  update hook..**.
1f960 2a 2a 20 50 61 72 61 6d 65 74 65 72 20 50 34 20  ** Parameter P4 
1f970 6d 61 79 20 70 6f 69 6e 74 20 74 6f 20 61 20 73  may point to a s
1f980 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e 69 6e 67  tring containing
1f990 20 74 68 65 20 74 61 62 6c 65 2d 6e 61 6d 65 2c   the table-name,
1f9a0 20 6f 72 0a 2a 2a 20 6d 61 79 20 62 65 20 4e 55   or.** may be NU
1f9b0 4c 4c 2e 20 49 66 20 69 74 20 69 73 20 6e 6f 74  LL. If it is not
1f9c0 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 74 68 65 20   NULL, then the 
1f9d0 75 70 64 61 74 65 2d 68 6f 6f 6b 20 0a 2a 2a 20  update-hook .** 
1f9e0 28 73 71 6c 69 74 65 33 2e 78 55 70 64 61 74 65  (sqlite3.xUpdate
1f9f0 43 61 6c 6c 62 61 63 6b 29 20 69 73 20 69 6e 76  Callback) is inv
1fa00 6f 6b 65 64 20 66 6f 6c 6c 6f 77 69 6e 67 20 61  oked following a
1fa10 20 73 75 63 63 65 73 73 66 75 6c 20 69 6e 73 65   successful inse
1fa20 72 74 2e 0a 2a 2a 0a 2a 2a 20 28 57 41 52 4e 49  rt..**.** (WARNI
1fa30 4e 47 2f 54 4f 44 4f 3a 20 49 66 20 50 31 20 69  NG/TODO: If P1 i
1fa40 73 20 61 20 70 73 65 75 64 6f 2d 63 75 72 73 6f  s a pseudo-curso
1fa50 72 20 61 6e 64 20 50 32 20 69 73 20 64 79 6e 61  r and P2 is dyna
1fa60 6d 69 63 61 6c 6c 79 0a 2a 2a 20 61 6c 6c 6f 63  mically.** alloc
1fa70 61 74 65 64 2c 20 74 68 65 6e 20 6f 77 6e 65 72  ated, then owner
1fa80 73 68 69 70 20 6f 66 20 50 32 20 69 73 20 74 72  ship of P2 is tr
1fa90 61 6e 73 66 65 72 72 65 64 20 74 6f 20 74 68 65  ansferred to the
1faa0 20 70 73 65 75 64 6f 2d 63 75 72 73 6f 72 0a 2a   pseudo-cursor.*
1fab0 2a 20 61 6e 64 20 72 65 67 69 73 74 65 72 20 50  * and register P
1fac0 32 20 62 65 63 6f 6d 65 73 20 65 70 68 65 6d 65  2 becomes epheme
1fad0 72 61 6c 2e 20 20 49 66 20 74 68 65 20 63 75 72  ral.  If the cur
1fae0 73 6f 72 20 69 73 20 63 68 61 6e 67 65 64 2c 20  sor is changed, 
1faf0 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 6f 66 20  the.** value of 
1fb00 72 65 67 69 73 74 65 72 20 50 32 20 77 69 6c 6c  register P2 will
1fb10 20 74 68 65 6e 20 63 68 61 6e 67 65 2e 20 20 4d   then change.  M
1fb20 61 6b 65 20 73 75 72 65 20 74 68 69 73 20 64 6f  ake sure this do
1fb30 65 73 20 6e 6f 74 0a 2a 2a 20 63 61 75 73 65 20  es not.** cause 
1fb40 61 6e 79 20 70 72 6f 62 6c 65 6d 73 2e 29 0a 2a  any problems.).*
1fb50 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75  *.** This instru
1fb60 63 74 69 6f 6e 20 6f 6e 6c 79 20 77 6f 72 6b 73  ction only works
1fb70 20 6f 6e 20 74 61 62 6c 65 73 2e 20 20 54 68 65   on tables.  The
1fb80 20 65 71 75 69 76 61 6c 65 6e 74 20 69 6e 73 74   equivalent inst
1fb90 72 75 63 74 69 6f 6e 0a 2a 2a 20 66 6f 72 20 69  ruction.** for i
1fba0 6e 64 69 63 65 73 20 69 73 20 4f 50 5f 49 64 78  ndices is OP_Idx
1fbb0 49 6e 73 65 72 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70  Insert..*/./* Op
1fbc0 63 6f 64 65 3a 20 49 6e 73 65 72 74 49 6e 74 20  code: InsertInt 
1fbd0 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
1fbe0 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20  *.** This works 
1fbf0 65 78 61 63 74 6c 79 20 6c 69 6b 65 20 4f 50 5f  exactly like OP_
1fc00 49 6e 73 65 72 74 20 65 78 63 65 70 74 20 74 68  Insert except th
1fc10 61 74 20 74 68 65 20 6b 65 79 20 69 73 20 74 68  at the key is th
1fc20 65 0a 2a 2a 20 69 6e 74 65 67 65 72 20 76 61 6c  e.** integer val
1fc30 75 65 20 50 33 2c 20 6e 6f 74 20 74 68 65 20 76  ue P3, not the v
1fc40 61 6c 75 65 20 6f 66 20 74 68 65 20 69 6e 74 65  alue of the inte
1fc50 67 65 72 20 73 74 6f 72 65 64 20 69 6e 20 72 65  ger stored in re
1fc60 67 69 73 74 65 72 20 50 33 2e 0a 2a 2f 0a 63 61  gister P3..*/.ca
1fc70 73 65 20 4f 50 5f 49 6e 73 65 72 74 3a 20 0a 63  se OP_Insert: .c
1fc80 61 73 65 20 4f 50 5f 49 6e 73 65 72 74 49 6e 74  ase OP_InsertInt
1fc90 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70 44 61 74 61  : {.  Mem *pData
1fca0 3b 20 20 20 20 20 20 20 2f 2a 20 4d 45 4d 20 63  ;       /* MEM c
1fcb0 65 6c 6c 20 68 6f 6c 64 69 6e 67 20 64 61 74 61  ell holding data
1fcc0 20 66 6f 72 20 74 68 65 20 72 65 63 6f 72 64 20   for the record 
1fcd0 74 6f 20 62 65 20 69 6e 73 65 72 74 65 64 20 2a  to be inserted *
1fce0 2f 0a 20 20 4d 65 6d 20 2a 70 4b 65 79 3b 20 20  /.  Mem *pKey;  
1fcf0 20 20 20 20 20 20 2f 2a 20 4d 45 4d 20 63 65 6c        /* MEM cel
1fd00 6c 20 68 6f 6c 64 69 6e 67 20 6b 65 79 20 20 66  l holding key  f
1fd10 6f 72 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f  or the record */
1fd20 0a 20 20 69 36 34 20 69 4b 65 79 3b 20 20 20 20  .  i64 iKey;    
1fd30 20 20 20 20 20 2f 2a 20 54 68 65 20 69 6e 74 65       /* The inte
1fd40 67 65 72 20 52 4f 57 49 44 20 6f 72 20 6b 65 79  ger ROWID or key
1fd50 20 66 6f 72 20 74 68 65 20 72 65 63 6f 72 64 20   for the record 
1fd60 74 6f 20 62 65 20 69 6e 73 65 72 74 65 64 20 2a  to be inserted *
1fd70 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  /.  VdbeCursor *
1fd80 70 43 3b 20 20 20 2f 2a 20 43 75 72 73 6f 72 20  pC;   /* Cursor 
1fd90 74 6f 20 74 61 62 6c 65 20 69 6e 74 6f 20 77 68  to table into wh
1fda0 69 63 68 20 69 6e 73 65 72 74 20 69 73 20 77 72  ich insert is wr
1fdb0 69 74 74 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e  itten */.  int n
1fdc0 5a 65 72 6f 3b 20 20 20 20 20 20 20 20 2f 2a 20  Zero;        /* 
1fdd0 4e 75 6d 62 65 72 20 6f 66 20 7a 65 72 6f 2d 62  Number of zero-b
1fde0 79 74 65 73 20 74 6f 20 61 70 70 65 6e 64 20 2a  ytes to append *
1fdf0 2f 0a 20 20 69 6e 74 20 73 65 65 6b 52 65 73 75  /.  int seekResu
1fe00 6c 74 3b 20 20 20 2f 2a 20 52 65 73 75 6c 74 20  lt;   /* Result 
1fe10 6f 66 20 70 72 69 6f 72 20 73 65 65 6b 20 6f 72  of prior seek or
1fe20 20 30 20 69 66 20 6e 6f 20 55 53 45 53 45 45 4b   0 if no USESEEK
1fe30 52 45 53 55 4c 54 20 66 6c 61 67 20 2a 2f 0a 20  RESULT flag */. 
1fe40 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62   const char *zDb
1fe50 3b 20 20 2f 2a 20 64 61 74 61 62 61 73 65 20 6e  ;  /* database n
1fe60 61 6d 65 20 2d 20 75 73 65 64 20 62 79 20 74 68  ame - used by th
1fe70 65 20 75 70 64 61 74 65 20 68 6f 6f 6b 20 2a 2f  e update hook */
1fe80 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
1fe90 54 62 6c 3b 20 2f 2a 20 54 61 62 6c 65 20 6e 61  Tbl; /* Table na
1fea0 6d 65 20 2d 20 75 73 65 64 20 62 79 20 74 68 65  me - used by the
1feb0 20 6f 70 64 61 74 65 20 68 6f 6f 6b 20 2a 2f 0a   opdate hook */.
1fec0 20 20 69 6e 74 20 6f 70 3b 20 20 20 20 20 20 20    int op;       
1fed0 20 20 20 20 2f 2a 20 4f 70 63 6f 64 65 20 66 6f      /* Opcode fo
1fee0 72 20 75 70 64 61 74 65 20 68 6f 6f 6b 3a 20 53  r update hook: S
1fef0 51 4c 49 54 45 5f 55 50 44 41 54 45 20 6f 72 20  QLITE_UPDATE or 
1ff00 53 51 4c 49 54 45 5f 49 4e 53 45 52 54 20 2a 2f  SQLITE_INSERT */
1ff10 0a 0a 20 20 70 44 61 74 61 20 3d 20 26 61 4d 65  ..  pData = &aMe
1ff20 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73  m[pOp->p2];.  as
1ff30 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
1ff40 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
1ff50 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65  Cursor );.  asse
1ff60 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70  rt( memIsValid(p
1ff70 44 61 74 61 29 20 29 3b 0a 20 20 70 43 20 3d 20  Data) );.  pC = 
1ff80 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
1ff90 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
1ffa0 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
1ffb0 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20 29  pC->pCursor!=0 )
1ffc0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
1ffd0 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67 3d 3d  pseudoTableReg==
1ffe0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
1fff0 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20  C->isTable );.  
20000 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
20010 4f 70 2d 3e 70 32 2c 20 70 44 61 74 61 29 3b 0a  Op->p2, pData);.
20020 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f  .  if( pOp->opco
20030 64 65 3d 3d 4f 50 5f 49 6e 73 65 72 74 20 29 7b  de==OP_Insert ){
20040 0a 20 20 20 20 70 4b 65 79 20 3d 20 26 61 4d 65  .    pKey = &aMe
20050 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20  m[pOp->p3];.    
20060 61 73 73 65 72 74 28 20 70 4b 65 79 2d 3e 66 6c  assert( pKey->fl
20070 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b  ags & MEM_Int );
20080 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d  .    assert( mem
20090 49 73 56 61 6c 69 64 28 70 4b 65 79 29 20 29 3b  IsValid(pKey) );
200a0 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52  .    REGISTER_TR
200b0 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4b 65  ACE(pOp->p3, pKe
200c0 79 29 3b 0a 20 20 20 20 69 4b 65 79 20 3d 20 70  y);.    iKey = p
200d0 4b 65 79 2d 3e 75 2e 69 3b 0a 20 20 7d 65 6c 73  Key->u.i;.  }els
200e0 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  e{.    assert( p
200f0 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49  Op->opcode==OP_I
20100 6e 73 65 72 74 49 6e 74 20 29 3b 0a 20 20 20 20  nsertInt );.    
20110 69 4b 65 79 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a  iKey = pOp->p3;.
20120 20 20 7d 0a 0a 20 20 69 66 28 20 70 4f 70 2d 3e    }..  if( pOp->
20130 70 35 20 26 20 4f 50 46 4c 41 47 5f 4e 43 48 41  p5 & OPFLAG_NCHA
20140 4e 47 45 20 29 20 70 2d 3e 6e 43 68 61 6e 67 65  NGE ) p->nChange
20150 2b 2b 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70  ++;.  if( pOp->p
20160 35 20 26 20 4f 50 46 4c 41 47 5f 4c 41 53 54 52  5 & OPFLAG_LASTR
20170 4f 57 49 44 20 29 20 64 62 2d 3e 6c 61 73 74 52  OWID ) db->lastR
20180 6f 77 69 64 20 3d 20 69 4b 65 79 3b 0a 20 20 69  owid = iKey;.  i
20190 66 28 20 70 44 61 74 61 2d 3e 66 6c 61 67 73 20  f( pData->flags 
201a0 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20  & MEM_Null ){.  
201b0 20 20 70 44 61 74 61 2d 3e 7a 20 3d 20 30 3b 0a    pData->z = 0;.
201c0 20 20 20 20 70 44 61 74 61 2d 3e 6e 20 3d 20 30      pData->n = 0
201d0 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61  ;.  }else{.    a
201e0 73 73 65 72 74 28 20 70 44 61 74 61 2d 3e 66 6c  ssert( pData->fl
201f0 61 67 73 20 26 20 28 4d 45 4d 5f 42 6c 6f 62 7c  ags & (MEM_Blob|
20200 4d 45 4d 5f 53 74 72 29 20 29 3b 0a 20 20 7d 0a  MEM_Str) );.  }.
20210 20 20 73 65 65 6b 52 65 73 75 6c 74 20 3d 20 28    seekResult = (
20220 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41  (pOp->p5 & OPFLA
20230 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54 29  G_USESEEKRESULT)
20240 20 3f 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c   ? pC->seekResul
20250 74 20 3a 20 30 29 3b 0a 20 20 69 66 28 20 70 44  t : 0);.  if( pD
20260 61 74 61 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  ata->flags & MEM
20270 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20 6e 5a 65  _Zero ){.    nZe
20280 72 6f 20 3d 20 70 44 61 74 61 2d 3e 75 2e 6e 5a  ro = pData->u.nZ
20290 65 72 6f 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  ero;.  }else{.  
202a0 20 20 6e 5a 65 72 6f 20 3d 20 30 3b 0a 20 20 7d    nZero = 0;.  }
202b0 0a 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 53  .  sqlite3BtreeS
202c0 65 74 43 61 63 68 65 64 52 6f 77 69 64 28 70 43  etCachedRowid(pC
202d0 2d 3e 70 43 75 72 73 6f 72 2c 20 30 29 3b 0a 20  ->pCursor, 0);. 
202e0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
202f0 65 65 49 6e 73 65 72 74 28 70 43 2d 3e 70 43 75  eeInsert(pC->pCu
20300 72 73 6f 72 2c 20 30 2c 20 69 4b 65 79 2c 0a 20  rsor, 0, iKey,. 
20310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20320 20 20 20 20 20 20 20 20 20 70 44 61 74 61 2d 3e           pData->
20330 7a 2c 20 70 44 61 74 61 2d 3e 6e 2c 20 6e 5a 65  z, pData->n, nZe
20340 72 6f 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  ro,.            
20350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 4f                pO
20360 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 41  p->p5 & OPFLAG_A
20370 50 50 45 4e 44 2c 20 73 65 65 6b 52 65 73 75 6c  PPEND, seekResul
20380 74 0a 20 20 29 3b 0a 20 20 70 43 2d 3e 72 6f 77  t.  );.  pC->row
20390 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20  idIsValid = 0;. 
203a0 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
203b0 65 74 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63  eto = 0;.  pC->c
203c0 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
203d0 48 45 5f 53 54 41 4c 45 3b 0a 0a 20 20 2f 2a 20  HE_STALE;..  /* 
203e0 49 6e 76 6f 6b 65 20 74 68 65 20 75 70 64 61 74  Invoke the updat
203f0 65 2d 68 6f 6f 6b 20 69 66 20 72 65 71 75 69 72  e-hook if requir
20400 65 64 2e 20 2a 2f 0a 20 20 69 66 28 20 72 63 3d  ed. */.  if( rc=
20410 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 64 62  =SQLITE_OK && db
20420 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63  ->xUpdateCallbac
20430 6b 20 26 26 20 70 4f 70 2d 3e 70 34 2e 7a 20 29  k && pOp->p4.z )
20440 7b 0a 20 20 20 20 7a 44 62 20 3d 20 64 62 2d 3e  {.    zDb = db->
20450 61 44 62 5b 70 43 2d 3e 69 44 62 5d 2e 7a 4e 61  aDb[pC->iDb].zNa
20460 6d 65 3b 0a 20 20 20 20 7a 54 62 6c 20 3d 20 70  me;.    zTbl = p
20470 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 20 20 6f 70  Op->p4.z;.    op
20480 20 3d 20 28 28 70 4f 70 2d 3e 70 35 20 26 20 4f   = ((pOp->p5 & O
20490 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45 29 20  PFLAG_ISUPDATE) 
204a0 3f 20 53 51 4c 49 54 45 5f 55 50 44 41 54 45 20  ? SQLITE_UPDATE 
204b0 3a 20 53 51 4c 49 54 45 5f 49 4e 53 45 52 54 29  : SQLITE_INSERT)
204c0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  ;.    assert( pC
204d0 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 20  ->isTable );.   
204e0 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c   db->xUpdateCall
204f0 62 61 63 6b 28 64 62 2d 3e 70 55 70 64 61 74 65  back(db->pUpdate
20500 41 72 67 2c 20 6f 70 2c 20 7a 44 62 2c 20 7a 54  Arg, op, zDb, zT
20510 62 6c 2c 20 69 4b 65 79 29 3b 0a 20 20 20 20 61  bl, iKey);.    a
20520 73 73 65 72 74 28 20 70 43 2d 3e 69 44 62 3e 3d  ssert( pC->iDb>=
20530 30 20 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  0 );.  }.  break
20540 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
20550 44 65 6c 65 74 65 20 50 31 20 50 32 20 2a 20 50  Delete P1 P2 * P
20560 34 20 2a 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65  4 *.**.** Delete
20570 20 74 68 65 20 72 65 63 6f 72 64 20 61 74 20 77   the record at w
20580 68 69 63 68 20 74 68 65 20 50 31 20 63 75 72 73  hich the P1 curs
20590 6f 72 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20  or is currently 
205a0 70 6f 69 6e 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20  pointing..**.** 
205b0 54 68 65 20 63 75 72 73 6f 72 20 77 69 6c 6c 20  The cursor will 
205c0 62 65 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67  be left pointing
205d0 20 61 74 20 65 69 74 68 65 72 20 74 68 65 20 6e   at either the n
205e0 65 78 74 20 6f 72 20 74 68 65 20 70 72 65 76 69  ext or the previ
205f0 6f 75 73 0a 2a 2a 20 72 65 63 6f 72 64 20 69 6e  ous.** record in
20600 20 74 68 65 20 74 61 62 6c 65 2e 20 49 66 20 69   the table. If i
20610 74 20 69 73 20 6c 65 66 74 20 70 6f 69 6e 74 69  t is left pointi
20620 6e 67 20 61 74 20 74 68 65 20 6e 65 78 74 20 72  ng at the next r
20630 65 63 6f 72 64 2c 20 74 68 65 6e 0a 2a 2a 20 74  ecord, then.** t
20640 68 65 20 6e 65 78 74 20 4e 65 78 74 20 69 6e 73  he next Next ins
20650 74 72 75 63 74 69 6f 6e 20 77 69 6c 6c 20 62 65  truction will be
20660 20 61 20 6e 6f 2d 6f 70 2e 20 20 48 65 6e 63 65   a no-op.  Hence
20670 20 69 74 20 69 73 20 4f 4b 20 74 6f 20 64 65 6c   it is OK to del
20680 65 74 65 0a 2a 2a 20 61 20 72 65 63 6f 72 64 20  ete.** a record 
20690 66 72 6f 6d 20 77 69 74 68 69 6e 20 61 6e 20 4e  from within an N
206a0 65 78 74 20 6c 6f 6f 70 2e 0a 2a 2a 0a 2a 2a 20  ext loop..**.** 
206b0 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43  If the OPFLAG_NC
206c0 48 41 4e 47 45 20 66 6c 61 67 20 6f 66 20 50 32  HANGE flag of P2
206d0 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 74 68   is set, then th
206e0 65 20 72 6f 77 20 63 68 61 6e 67 65 20 63 6f 75  e row change cou
206f0 6e 74 20 69 73 0a 2a 2a 20 69 6e 63 72 65 6d 65  nt is.** increme
20700 6e 74 65 64 20 28 6f 74 68 65 72 77 69 73 65 20  nted (otherwise 
20710 6e 6f 74 29 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 6d  not)..**.** P1 m
20720 75 73 74 20 6e 6f 74 20 62 65 20 70 73 65 75 64  ust not be pseud
20730 6f 2d 74 61 62 6c 65 2e 20 20 49 74 20 68 61 73  o-table.  It has
20740 20 74 6f 20 62 65 20 61 20 72 65 61 6c 20 74 61   to be a real ta
20750 62 6c 65 20 77 69 74 68 0a 2a 2a 20 6d 75 6c 74  ble with.** mult
20760 69 70 6c 65 20 72 6f 77 73 2e 0a 2a 2a 0a 2a 2a  iple rows..**.**
20770 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20 4e 55   If P4 is not NU
20780 4c 4c 2c 20 74 68 65 6e 20 69 74 20 69 73 20 74  LL, then it is t
20790 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74  he name of the t
207a0 61 62 6c 65 20 74 68 61 74 20 50 31 20 69 73 0a  able that P1 is.
207b0 2a 2a 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2e 20  ** pointing to. 
207c0 20 54 68 65 20 75 70 64 61 74 65 20 68 6f 6f 6b   The update hook
207d0 20 77 69 6c 6c 20 62 65 20 69 6e 76 6f 6b 65 64   will be invoked
207e0 2c 20 69 66 20 69 74 20 65 78 69 73 74 73 2e 0a  , if it exists..
207f0 2a 2a 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20  ** If P4 is not 
20800 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65 20 50 31  NULL then the P1
20810 20 63 75 72 73 6f 72 20 6d 75 73 74 20 68 61 76   cursor must hav
20820 65 20 62 65 65 6e 20 70 6f 73 69 74 69 6f 6e 65  e been positione
20830 64 0a 2a 2a 20 75 73 69 6e 67 20 4f 50 5f 4e 6f  d.** using OP_No
20840 74 46 6f 75 6e 64 20 70 72 69 6f 72 20 74 6f 20  tFound prior to 
20850 69 6e 76 6f 6b 69 6e 67 20 74 68 69 73 20 6f 70  invoking this op
20860 63 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  code..*/.case OP
20870 5f 44 65 6c 65 74 65 3a 20 7b 0a 20 20 69 36 34  _Delete: {.  i64
20880 20 69 4b 65 79 3b 0a 20 20 56 64 62 65 43 75 72   iKey;.  VdbeCur
20890 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 69 4b 65 79  sor *pC;..  iKey
208a0 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20   = 0;.  assert( 
208b0 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
208c0 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
208d0 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
208e0 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
208f0 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
20900 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70  .  assert( pC->p
20910 43 75 72 73 6f 72 21 3d 30 20 29 3b 20 20 2f 2a  Cursor!=0 );  /*
20920 20 4f 6e 6c 79 20 76 61 6c 69 64 20 66 6f 72 20   Only valid for 
20930 72 65 61 6c 20 74 61 62 6c 65 73 2c 20 6e 6f 20  real tables, no 
20940 70 73 65 75 64 6f 74 61 62 6c 65 73 20 2a 2f 0a  pseudotables */.
20950 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 75 70 64  .  /* If the upd
20960 61 74 65 2d 68 6f 6f 6b 20 77 69 6c 6c 20 62 65  ate-hook will be
20970 20 69 6e 76 6f 6b 65 64 2c 20 73 65 74 20 69 4b   invoked, set iK
20980 65 79 20 74 6f 20 74 68 65 20 72 6f 77 69 64 20  ey to the rowid 
20990 6f 66 20 74 68 65 0a 20 20 2a 2a 20 72 6f 77 20  of the.  ** row 
209a0 62 65 69 6e 67 20 64 65 6c 65 74 65 64 2e 0a 20  being deleted.. 
209b0 20 2a 2f 0a 20 20 69 66 28 20 64 62 2d 3e 78 55   */.  if( db->xU
209c0 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20 26 26  pdateCallback &&
209d0 20 70 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20   pOp->p4.z ){.  
209e0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73    assert( pC->is
209f0 54 61 62 6c 65 20 29 3b 0a 20 20 20 20 61 73 73  Table );.    ass
20a00 65 72 74 28 20 70 43 2d 3e 72 6f 77 69 64 49 73  ert( pC->rowidIs
20a10 56 61 6c 69 64 20 29 3b 20 20 2f 2a 20 6c 61 73  Valid );  /* las
20a20 74 52 6f 77 69 64 20 73 65 74 20 62 79 20 70 72  tRowid set by pr
20a30 65 76 69 6f 75 73 20 4f 50 5f 4e 6f 74 46 6f 75  evious OP_NotFou
20a40 6e 64 20 2a 2f 0a 20 20 20 20 69 4b 65 79 20 3d  nd */.    iKey =
20a50 20 70 43 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 0a   pC->lastRowid;.
20a60 20 20 7d 0a 0a 20 20 2f 2a 20 54 68 65 20 4f 50    }..  /* The OP
20a70 5f 44 65 6c 65 74 65 20 6f 70 63 6f 64 65 20 61  _Delete opcode a
20a80 6c 77 61 79 73 20 66 6f 6c 6c 6f 77 73 20 61 6e  lways follows an
20a90 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 20 6f 72   OP_NotExists or
20aa0 20 4f 50 5f 4c 61 73 74 20 6f 72 0a 20 20 2a 2a   OP_Last or.  **
20ab0 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 6e 20 74 68   OP_Column on th
20ac0 65 20 73 61 6d 65 20 74 61 62 6c 65 20 77 69 74  e same table wit
20ad0 68 6f 75 74 20 61 6e 79 20 69 6e 74 65 72 76 65  hout any interve
20ae0 6e 69 6e 67 20 6f 70 65 72 61 74 69 6f 6e 73 20  ning operations 
20af0 74 68 61 74 0a 20 20 2a 2a 20 6d 69 67 68 74 20  that.  ** might 
20b00 6d 6f 76 65 20 6f 72 20 69 6e 76 61 6c 69 64 61  move or invalida
20b10 74 65 20 74 68 65 20 63 75 72 73 6f 72 2e 20 20  te the cursor.  
20b20 48 65 6e 63 65 20 63 75 72 73 6f 72 20 70 43 20  Hence cursor pC 
20b30 69 73 20 61 6c 77 61 79 73 20 70 6f 69 6e 74 69  is always pointi
20b40 6e 67 0a 20 20 2a 2a 20 74 6f 20 74 68 65 20 72  ng.  ** to the r
20b50 6f 77 20 74 6f 20 62 65 20 64 65 6c 65 74 65 64  ow to be deleted
20b60 20 61 6e 64 20 74 68 65 20 73 71 6c 69 74 65 33   and the sqlite3
20b70 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f  VdbeCursorMoveto
20b80 28 29 20 6f 70 65 72 61 74 69 6f 6e 0a 20 20 2a  () operation.  *
20b90 2a 20 62 65 6c 6f 77 20 69 73 20 61 6c 77 61 79  * below is alway
20ba0 73 20 61 20 6e 6f 2d 6f 70 20 61 6e 64 20 63 61  s a no-op and ca
20bb0 6e 6e 6f 74 20 66 61 69 6c 2e 20 20 57 65 20 77  nnot fail.  We w
20bc0 69 6c 6c 20 72 75 6e 20 69 74 20 61 6e 79 68 6f  ill run it anyho
20bd0 77 2c 20 74 68 6f 75 67 68 2c 0a 20 20 2a 2a 20  w, though,.  ** 
20be0 74 6f 20 67 75 61 72 64 20 61 67 61 69 6e 73 74  to guard against
20bf0 20 66 75 74 75 72 65 20 63 68 61 6e 67 65 73 20   future changes 
20c00 74 6f 20 74 68 65 20 63 6f 64 65 20 67 65 6e 65  to the code gene
20c10 72 61 74 6f 72 2e 0a 20 20 2a 2a 2f 0a 20 20 61  rator..  **/.  a
20c20 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72  ssert( pC->defer
20c30 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a  redMoveto==0 );.
20c40 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
20c50 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 70  beCursorMoveto(p
20c60 43 29 3b 0a 20 20 69 66 28 20 4e 45 56 45 52 28  C);.  if( NEVER(
20c70 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 29 20 29  rc!=SQLITE_OK) )
20c80 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
20c90 74 6f 5f 65 72 72 6f 72 3b 0a 0a 20 20 73 71 6c  to_error;..  sql
20ca0 69 74 65 33 42 74 72 65 65 53 65 74 43 61 63 68  ite3BtreeSetCach
20cb0 65 64 52 6f 77 69 64 28 70 43 2d 3e 70 43 75 72  edRowid(pC->pCur
20cc0 73 6f 72 2c 20 30 29 3b 0a 20 20 72 63 20 3d 20  sor, 0);.  rc = 
20cd0 73 71 6c 69 74 65 33 42 74 72 65 65 44 65 6c 65  sqlite3BtreeDele
20ce0 74 65 28 70 43 2d 3e 70 43 75 72 73 6f 72 29 3b  te(pC->pCursor);
20cf0 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74  .  pC->cacheStat
20d00 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45  us = CACHE_STALE
20d10 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74  ;..  /* Invoke t
20d20 68 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20 69  he update-hook i
20d30 66 20 72 65 71 75 69 72 65 64 2e 20 2a 2f 0a 20  f required. */. 
20d40 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
20d50 4f 4b 20 26 26 20 64 62 2d 3e 78 55 70 64 61 74  OK && db->xUpdat
20d60 65 43 61 6c 6c 62 61 63 6b 20 26 26 20 70 4f 70  eCallback && pOp
20d70 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20 20 20 63 6f  ->p4.z ){.    co
20d80 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 20 3d 20  nst char *zDb = 
20d90 64 62 2d 3e 61 44 62 5b 70 43 2d 3e 69 44 62 5d  db->aDb[pC->iDb]
20da0 2e 7a 4e 61 6d 65 3b 0a 20 20 20 20 63 6f 6e 73  .zName;.    cons
20db0 74 20 63 68 61 72 20 2a 7a 54 62 6c 20 3d 20 70  t char *zTbl = p
20dc0 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 20 20 64 62  Op->p4.z;.    db
20dd0 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63  ->xUpdateCallbac
20de0 6b 28 64 62 2d 3e 70 55 70 64 61 74 65 41 72 67  k(db->pUpdateArg
20df0 2c 20 53 51 4c 49 54 45 5f 44 45 4c 45 54 45 2c  , SQLITE_DELETE,
20e00 20 7a 44 62 2c 20 7a 54 62 6c 2c 20 69 4b 65 79   zDb, zTbl, iKey
20e10 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
20e20 43 2d 3e 69 44 62 3e 3d 30 20 29 3b 0a 20 20 7d  C->iDb>=0 );.  }
20e30 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 20 26  .  if( pOp->p2 &
20e40 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20   OPFLAG_NCHANGE 
20e50 29 20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a  ) p->nChange++;.
20e60 20 20 62 72 65 61 6b 3b 0a 7d 0a 2f 2a 20 4f 70    break;.}./* Op
20e70 63 6f 64 65 3a 20 52 65 73 65 74 43 6f 75 6e 74  code: ResetCount
20e80 20 2a 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a   * * * * *.**.**
20e90 20 54 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   The value of th
20ea0 65 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72  e change counter
20eb0 20 69 73 20 63 6f 70 69 65 64 20 74 6f 20 74 68   is copied to th
20ec0 65 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c  e database handl
20ed0 65 0a 2a 2a 20 63 68 61 6e 67 65 20 63 6f 75 6e  e.** change coun
20ee0 74 65 72 20 28 72 65 74 75 72 6e 65 64 20 62 79  ter (returned by
20ef0 20 73 75 62 73 65 71 75 65 6e 74 20 63 61 6c 6c   subsequent call
20f00 73 20 74 6f 20 73 71 6c 69 74 65 33 5f 63 68 61  s to sqlite3_cha
20f10 6e 67 65 73 28 29 29 2e 0a 2a 2a 20 54 68 65 6e  nges())..** Then
20f20 20 74 68 65 20 56 4d 73 20 69 6e 74 65 72 6e 61   the VMs interna
20f30 6c 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72  l change counter
20f40 20 72 65 73 65 74 73 20 74 6f 20 30 2e 0a 2a 2a   resets to 0..**
20f50 20 54 68 69 73 20 69 73 20 75 73 65 64 20 62 79   This is used by
20f60 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d   trigger program
20f70 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65  s..*/.case OP_Re
20f80 73 65 74 43 6f 75 6e 74 3a 20 7b 0a 20 20 73 71  setCount: {.  sq
20f90 6c 69 74 65 33 56 64 62 65 53 65 74 43 68 61 6e  lite3VdbeSetChan
20fa0 67 65 73 28 64 62 2c 20 70 2d 3e 6e 43 68 61 6e  ges(db, p->nChan
20fb0 67 65 29 3b 0a 20 20 70 2d 3e 6e 43 68 61 6e 67  ge);.  p->nChang
20fc0 65 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a  e = 0;.  break;.
20fd0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f  }../* Opcode: Ro
20fe0 77 44 61 74 61 20 50 31 20 50 32 20 2a 20 2a 20  wData P1 P2 * * 
20ff0 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 69 6e  *.**.** Write in
21000 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 20 74  to register P2 t
21010 68 65 20 63 6f 6d 70 6c 65 74 65 20 72 6f 77 20  he complete row 
21020 64 61 74 61 20 66 6f 72 20 63 75 72 73 6f 72 20  data for cursor 
21030 50 31 2e 0a 2a 2a 20 54 68 65 72 65 20 69 73 20  P1..** There is 
21040 6e 6f 20 69 6e 74 65 72 70 72 65 74 61 74 69 6f  no interpretatio
21050 6e 20 6f 66 20 74 68 65 20 64 61 74 61 2e 20 20  n of the data.  
21060 0a 2a 2a 20 49 74 20 69 73 20 6a 75 73 74 20 63  .** It is just c
21070 6f 70 69 65 64 20 6f 6e 74 6f 20 74 68 65 20 50  opied onto the P
21080 32 20 72 65 67 69 73 74 65 72 20 65 78 61 63 74  2 register exact
21090 6c 79 20 61 73 20 0a 2a 2a 20 69 74 20 69 73 20  ly as .** it is 
210a0 66 6f 75 6e 64 20 69 6e 20 74 68 65 20 64 61 74  found in the dat
210b0 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a  abase file..**.*
210c0 2a 20 49 66 20 74 68 65 20 50 31 20 63 75 72 73  * If the P1 curs
210d0 6f 72 20 6d 75 73 74 20 62 65 20 70 6f 69 6e 74  or must be point
210e0 69 6e 67 20 74 6f 20 61 20 76 61 6c 69 64 20 72  ing to a valid r
210f0 6f 77 20 28 6e 6f 74 20 61 20 4e 55 4c 4c 20 72  ow (not a NULL r
21100 6f 77 29 0a 2a 2a 20 6f 66 20 61 20 72 65 61 6c  ow).** of a real
21110 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20 70 73   table, not a ps
21120 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2f 0a 2f  eudo-table..*/./
21130 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 4b 65 79  * Opcode: RowKey
21140 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
21150 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f 20 72 65  ** Write into re
21160 67 69 73 74 65 72 20 50 32 20 74 68 65 20 63 6f  gister P2 the co
21170 6d 70 6c 65 74 65 20 72 6f 77 20 6b 65 79 20 66  mplete row key f
21180 6f 72 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a  or cursor P1..**
21190 20 54 68 65 72 65 20 69 73 20 6e 6f 20 69 6e 74   There is no int
211a0 65 72 70 72 65 74 61 74 69 6f 6e 20 6f 66 20 74  erpretation of t
211b0 68 65 20 64 61 74 61 2e 20 20 0a 2a 2a 20 54 68  he data.  .** Th
211c0 65 20 6b 65 79 20 69 73 20 63 6f 70 69 65 64 20  e key is copied 
211d0 6f 6e 74 6f 20 74 68 65 20 50 33 20 72 65 67 69  onto the P3 regi
211e0 73 74 65 72 20 65 78 61 63 74 6c 79 20 61 73 20  ster exactly as 
211f0 0a 2a 2a 20 69 74 20 69 73 20 66 6f 75 6e 64 20  .** it is found 
21200 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  in the database 
21210 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  file..**.** If t
21220 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d 75 73  he P1 cursor mus
21230 74 20 62 65 20 70 6f 69 6e 74 69 6e 67 20 74 6f  t be pointing to
21240 20 61 20 76 61 6c 69 64 20 72 6f 77 20 28 6e 6f   a valid row (no
21250 74 20 61 20 4e 55 4c 4c 20 72 6f 77 29 0a 2a 2a  t a NULL row).**
21260 20 6f 66 20 61 20 72 65 61 6c 20 74 61 62 6c 65   of a real table
21270 2c 20 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d 74  , not a pseudo-t
21280 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  able..*/.case OP
21290 5f 52 6f 77 4b 65 79 3a 0a 63 61 73 65 20 4f 50  _RowKey:.case OP
212a0 5f 52 6f 77 44 61 74 61 3a 20 7b 0a 20 20 56 64  _RowData: {.  Vd
212b0 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
212c0 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b  BtCursor *pCrsr;
212d0 0a 20 20 75 33 32 20 6e 3b 0a 20 20 69 36 34 20  .  u32 n;.  i64 
212e0 6e 36 34 3b 0a 0a 20 20 70 4f 75 74 20 3d 20 26  n64;..  pOut = &
212f0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
21300 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
21310 65 28 70 2c 20 70 4f 75 74 29 3b 0a 0a 20 20 2f  e(p, pOut);..  /
21320 2a 20 4e 6f 74 65 20 74 68 61 74 20 52 6f 77 4b  * Note that RowK
21330 65 79 20 61 6e 64 20 52 6f 77 44 61 74 61 20 61  ey and RowData a
21340 72 65 20 72 65 61 6c 6c 79 20 65 78 61 63 74 6c  re really exactl
21350 79 20 74 68 65 20 73 61 6d 65 20 69 6e 73 74 72  y the same instr
21360 75 63 74 69 6f 6e 20 2a 2f 0a 20 20 61 73 73 65  uction */.  asse
21370 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
21380 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
21390 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
213a0 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
213b0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
213c0 69 73 54 61 62 6c 65 20 7c 7c 20 70 4f 70 2d 3e  isTable || pOp->
213d0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 52 6f 77 4b 65  opcode==OP_RowKe
213e0 79 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  y );.  assert( p
213f0 43 2d 3e 69 73 49 6e 64 65 78 20 7c 7c 20 70 4f  C->isIndex || pO
21400 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 52 6f  p->opcode==OP_Ro
21410 77 44 61 74 61 20 29 3b 0a 20 20 61 73 73 65 72  wData );.  asser
21420 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73  t( pC!=0 );.  as
21430 73 65 72 74 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f  sert( pC->nullRo
21440 77 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  w==0 );.  assert
21450 28 20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c  ( pC->pseudoTabl
21460 65 52 65 67 3d 3d 30 20 29 3b 0a 20 20 61 73 73  eReg==0 );.  ass
21470 65 72 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72  ert( pC->pCursor
21480 21 3d 30 20 29 3b 0a 20 20 70 43 72 73 72 20 3d  !=0 );.  pCrsr =
21490 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20   pC->pCursor;.  
214a0 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 42  assert( sqlite3B
214b0 74 72 65 65 43 75 72 73 6f 72 49 73 56 61 6c 69  treeCursorIsVali
214c0 64 28 70 43 72 73 72 29 20 29 3b 0a 0a 20 20 2f  d(pCrsr) );..  /
214d0 2a 20 54 68 65 20 4f 50 5f 52 6f 77 4b 65 79 20  * The OP_RowKey 
214e0 61 6e 64 20 4f 50 5f 52 6f 77 44 61 74 61 20 6f  and OP_RowData o
214f0 70 63 6f 64 65 73 20 61 6c 77 61 79 73 20 66 6f  pcodes always fo
21500 6c 6c 6f 77 20 4f 50 5f 4e 6f 74 45 78 69 73 74  llow OP_NotExist
21510 73 20 6f 72 0a 20 20 2a 2a 20 4f 50 5f 52 65 77  s or.  ** OP_Rew
21520 69 6e 64 2f 4f 70 5f 4e 65 78 74 20 77 69 74 68  ind/Op_Next with
21530 20 6e 6f 20 69 6e 74 65 72 76 65 6e 69 6e 67 20   no intervening 
21540 69 6e 73 74 72 75 63 74 69 6f 6e 73 20 74 68 61  instructions tha
21550 74 20 6d 69 67 68 74 20 69 6e 76 61 6c 69 64 61  t might invalida
21560 74 65 0a 20 20 2a 2a 20 74 68 65 20 63 75 72 73  te.  ** the curs
21570 6f 72 2e 20 20 48 65 6e 63 65 20 74 68 65 20 66  or.  Hence the f
21580 6f 6c 6c 6f 77 69 6e 67 20 73 71 6c 69 74 65 33  ollowing sqlite3
21590 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f  VdbeCursorMoveto
215a0 28 29 20 63 61 6c 6c 20 69 73 20 61 6c 77 61 79  () call is alway
215b0 73 0a 20 20 2a 2a 20 61 20 6e 6f 2d 6f 70 20 61  s.  ** a no-op a
215c0 6e 64 20 63 61 6e 20 6e 65 76 65 72 20 66 61 69  nd can never fai
215d0 6c 2e 20 20 42 75 74 20 77 65 20 6c 65 61 76 65  l.  But we leave
215e0 20 69 74 20 69 6e 20 70 6c 61 63 65 20 61 73 20   it in place as 
215f0 61 20 73 61 66 65 74 79 2e 0a 20 20 2a 2f 0a 20  a safety..  */. 
21600 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66   assert( pC->def
21610 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29  erredMoveto==0 )
21620 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
21630 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f  VdbeCursorMoveto
21640 28 70 43 29 3b 0a 20 20 69 66 28 20 4e 45 56 45  (pC);.  if( NEVE
21650 52 28 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 29  R(rc!=SQLITE_OK)
21660 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
21670 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a 20 20 69  e_to_error;..  i
21680 66 28 20 70 43 2d 3e 69 73 49 6e 64 65 78 20 29  f( pC->isIndex )
21690 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 21 70  {.    assert( !p
216a0 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20  C->isTable );.  
216b0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
216c0 72 65 65 4b 65 79 53 69 7a 65 28 70 43 72 73 72  reeKeySize(pCrsr
216d0 2c 20 26 6e 36 34 29 3b 0a 20 20 20 20 61 73 73  , &n64);.    ass
216e0 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f  ert( rc==SQLITE_
216f0 4f 4b 20 29 3b 20 20 20 20 2f 2a 20 54 72 75 65  OK );    /* True
21700 20 62 65 63 61 75 73 65 20 6f 66 20 43 75 72 73   because of Curs
21710 6f 72 4d 6f 76 65 74 6f 28 29 20 63 61 6c 6c 20  orMoveto() call 
21720 61 62 6f 76 65 20 2a 2f 0a 20 20 20 20 69 66 28  above */.    if(
21730 20 6e 36 34 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b   n64>db->aLimit[
21740 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e  SQLITE_LIMIT_LEN
21750 47 54 48 5d 20 29 7b 0a 20 20 20 20 20 20 67 6f  GTH] ){.      go
21760 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 20 20  to too_big;.    
21770 7d 0a 20 20 20 20 6e 20 3d 20 28 75 33 32 29 6e  }.    n = (u32)n
21780 36 34 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  64;.  }else{.   
21790 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
217a0 65 65 44 61 74 61 53 69 7a 65 28 70 43 72 73 72  eeDataSize(pCrsr
217b0 2c 20 26 6e 29 3b 0a 20 20 20 20 61 73 73 65 72  , &n);.    asser
217c0 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  t( rc==SQLITE_OK
217d0 20 29 3b 20 20 20 20 2f 2a 20 44 61 74 61 53 69   );    /* DataSi
217e0 7a 65 28 29 20 63 61 6e 6e 6f 74 20 66 61 69 6c  ze() cannot fail
217f0 20 2a 2f 0a 20 20 20 20 69 66 28 20 6e 3e 28 75   */.    if( n>(u
21800 33 32 29 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51  32)db->aLimit[SQ
21810 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54  LITE_LIMIT_LENGT
21820 48 5d 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f  H] ){.      goto
21830 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 20 20 7d 0a   too_big;.    }.
21840 20 20 7d 0a 20 20 69 66 28 20 73 71 6c 69 74 65    }.  if( sqlite
21850 33 56 64 62 65 4d 65 6d 47 72 6f 77 28 70 4f 75  3VdbeMemGrow(pOu
21860 74 2c 20 6e 2c 20 30 29 20 29 7b 0a 20 20 20 20  t, n, 0) ){.    
21870 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d  goto no_mem;.  }
21880 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 6e 3b 0a  .  pOut->n = n;.
21890 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
218a0 28 70 4f 75 74 2c 20 4d 45 4d 5f 42 6c 6f 62 29  (pOut, MEM_Blob)
218b0 3b 0a 20 20 69 66 28 20 70 43 2d 3e 69 73 49 6e  ;.  if( pC->isIn
218c0 64 65 78 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  dex ){.    rc = 
218d0 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79 28  sqlite3BtreeKey(
218e0 70 43 72 73 72 2c 20 30 2c 20 6e 2c 20 70 4f 75  pCrsr, 0, n, pOu
218f0 74 2d 3e 7a 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  t->z);.  }else{.
21900 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
21910 42 74 72 65 65 44 61 74 61 28 70 43 72 73 72 2c  BtreeData(pCrsr,
21920 20 30 2c 20 6e 2c 20 70 4f 75 74 2d 3e 7a 29 3b   0, n, pOut->z);
21930 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 65 6e 63  .  }.  pOut->enc
21940 20 3d 20 53 51 4c 49 54 45 5f 55 54 46 38 3b 20   = SQLITE_UTF8; 
21950 20 2f 2a 20 49 6e 20 63 61 73 65 20 74 68 65 20   /* In case the 
21960 62 6c 6f 62 20 69 73 20 65 76 65 72 20 63 61 73  blob is ever cas
21970 74 20 74 6f 20 74 65 78 74 20 2a 2f 0a 20 20 55  t to text */.  U
21980 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49  PDATE_MAX_BLOBSI
21990 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61  ZE(pOut);.  brea
219a0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
219b0 20 52 6f 77 69 64 20 50 31 20 50 32 20 2a 20 2a   Rowid P1 P2 * *
219c0 20 2a 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 69   *.**.** Store i
219d0 6e 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e  n register P2 an
219e0 20 69 6e 74 65 67 65 72 20 77 68 69 63 68 20 69   integer which i
219f0 73 20 74 68 65 20 6b 65 79 20 6f 66 20 74 68 65  s the key of the
21a00 20 74 61 62 6c 65 20 65 6e 74 72 79 20 74 68 61   table entry tha
21a10 74 0a 2a 2a 20 50 31 20 69 73 20 63 75 72 72 65  t.** P1 is curre
21a20 6e 74 6c 79 20 70 6f 69 6e 74 20 74 6f 2e 0a 2a  ntly point to..*
21a30 2a 0a 2a 2a 20 50 31 20 63 61 6e 20 62 65 20 65  *.** P1 can be e
21a40 69 74 68 65 72 20 61 6e 20 6f 72 64 69 6e 61 72  ither an ordinar
21a50 79 20 74 61 62 6c 65 20 6f 72 20 61 20 76 69 72  y table or a vir
21a60 74 75 61 6c 20 74 61 62 6c 65 2e 20 20 54 68 65  tual table.  The
21a70 72 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 62 65  re used to.** be
21a80 20 61 20 73 65 70 61 72 61 74 65 20 4f 50 5f 56   a separate OP_V
21a90 52 6f 77 69 64 20 6f 70 63 6f 64 65 20 66 6f 72  Rowid opcode for
21aa0 20 75 73 65 20 77 69 74 68 20 76 69 72 74 75 61   use with virtua
21ab0 6c 20 74 61 62 6c 65 73 2c 20 62 75 74 20 74 68  l tables, but th
21ac0 69 73 0a 2a 2a 20 6f 6e 65 20 6f 70 63 6f 64 65  is.** one opcode
21ad0 20 6e 6f 77 20 77 6f 72 6b 73 20 66 6f 72 20 62   now works for b
21ae0 6f 74 68 20 74 61 62 6c 65 20 74 79 70 65 73 2e  oth table types.
21af0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 69  .*/.case OP_Rowi
21b00 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  d: {            
21b10 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65       /* out2-pre
21b20 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 56 64 62  release */.  Vdb
21b30 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69  eCursor *pC;.  i
21b40 36 34 20 76 3b 0a 20 20 73 71 6c 69 74 65 33 5f  64 v;.  sqlite3_
21b50 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 63  vtab *pVtab;.  c
21b60 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64  onst sqlite3_mod
21b70 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 0a 20  ule *pModule;.. 
21b80 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
21b90 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
21ba0 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  ->nCursor );.  p
21bb0 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
21bc0 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
21bd0 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65   pC!=0 );.  asse
21be0 72 74 28 20 70 43 2d 3e 70 73 65 75 64 6f 54 61  rt( pC->pseudoTa
21bf0 62 6c 65 52 65 67 3d 3d 30 20 29 3b 0a 20 20 69  bleReg==0 );.  i
21c00 66 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29  f( pC->nullRow )
21c10 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67  {.    pOut->flag
21c20 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20  s = MEM_Null;.  
21c30 20 20 62 72 65 61 6b 3b 0a 20 20 7d 65 6c 73 65    break;.  }else
21c40 20 69 66 28 20 70 43 2d 3e 64 65 66 65 72 72 65   if( pC->deferre
21c50 64 4d 6f 76 65 74 6f 20 29 7b 0a 20 20 20 20 76  dMoveto ){.    v
21c60 20 3d 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72   = pC->movetoTar
21c70 67 65 74 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  get;.#ifndef SQL
21c80 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
21c90 54 41 42 4c 45 0a 20 20 7d 65 6c 73 65 20 69 66  TABLE.  }else if
21ca0 28 20 70 43 2d 3e 70 56 74 61 62 43 75 72 73 6f  ( pC->pVtabCurso
21cb0 72 20 29 7b 0a 20 20 20 20 70 56 74 61 62 20 3d  r ){.    pVtab =
21cc0 20 70 43 2d 3e 70 56 74 61 62 43 75 72 73 6f 72   pC->pVtabCursor
21cd0 2d 3e 70 56 74 61 62 3b 0a 20 20 20 20 70 4d 6f  ->pVtab;.    pMo
21ce0 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d  dule = pVtab->pM
21cf0 6f 64 75 6c 65 3b 0a 20 20 20 20 61 73 73 65 72  odule;.    asser
21d00 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 52 6f 77  t( pModule->xRow
21d10 69 64 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 70  id );.    rc = p
21d20 4d 6f 64 75 6c 65 2d 3e 78 52 6f 77 69 64 28 70  Module->xRowid(p
21d30 43 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 2c 20  C->pVtabCursor, 
21d40 26 76 29 3b 0a 20 20 20 20 69 6d 70 6f 72 74 56  &v);.    importV
21d50 74 61 62 45 72 72 4d 73 67 28 70 2c 20 70 56 74  tabErrMsg(p, pVt
21d60 61 62 29 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53  ab);.#endif /* S
21d70 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
21d80 41 4c 54 41 42 4c 45 20 2a 2f 0a 20 20 7d 65 6c  ALTABLE */.  }el
21d90 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20  se{.    assert( 
21da0 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20 29  pC->pCursor!=0 )
21db0 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  ;.    rc = sqlit
21dc0 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65  e3VdbeCursorMove
21dd0 74 6f 28 70 43 29 3b 0a 20 20 20 20 69 66 28 20  to(pC);.    if( 
21de0 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
21df0 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
21e00 20 20 69 66 28 20 70 43 2d 3e 72 6f 77 69 64 49    if( pC->rowidI
21e10 73 56 61 6c 69 64 20 29 7b 0a 20 20 20 20 20 20  sValid ){.      
21e20 76 20 3d 20 70 43 2d 3e 6c 61 73 74 52 6f 77 69  v = pC->lastRowi
21e30 64 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  d;.    }else{.  
21e40 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
21e50 42 74 72 65 65 4b 65 79 53 69 7a 65 28 70 43 2d  BtreeKeySize(pC-
21e60 3e 70 43 75 72 73 6f 72 2c 20 26 76 29 3b 0a 20  >pCursor, &v);. 
21e70 20 20 20 20 20 61 73 73 65 72 74 28 20 72 63 3d       assert( rc=
21e80 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 20 2f  =SQLITE_OK );  /
21e90 2a 20 41 6c 77 61 79 73 20 73 6f 20 62 65 63 61  * Always so beca
21ea0 75 73 65 20 6f 66 20 43 75 72 73 6f 72 4d 6f 76  use of CursorMov
21eb0 65 74 6f 28 29 20 61 62 6f 76 65 20 2a 2f 0a 20  eto() above */. 
21ec0 20 20 20 7d 0a 20 20 7d 0a 20 20 70 4f 75 74 2d     }.  }.  pOut-
21ed0 3e 75 2e 69 20 3d 20 76 3b 0a 20 20 62 72 65 61  >u.i = v;.  brea
21ee0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
21ef0 20 4e 75 6c 6c 52 6f 77 20 50 31 20 2a 20 2a 20   NullRow P1 * * 
21f00 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4d 6f 76 65 20 74  * *.**.** Move t
21f10 68 65 20 63 75 72 73 6f 72 20 50 31 20 74 6f 20  he cursor P1 to 
21f20 61 20 6e 75 6c 6c 20 72 6f 77 2e 20 20 41 6e 79  a null row.  Any
21f30 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 65 72 61   OP_Column opera
21f40 74 69 6f 6e 73 0a 2a 2a 20 74 68 61 74 20 6f 63  tions.** that oc
21f50 63 75 72 20 77 68 69 6c 65 20 74 68 65 20 63 75  cur while the cu
21f60 72 73 6f 72 20 69 73 20 6f 6e 20 74 68 65 20 6e  rsor is on the n
21f70 75 6c 6c 20 72 6f 77 20 77 69 6c 6c 20 61 6c 77  ull row will alw
21f80 61 79 73 0a 2a 2a 20 77 72 69 74 65 20 61 20 4e  ays.** write a N
21f90 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ULL..*/.case OP_
21fa0 4e 75 6c 6c 52 6f 77 3a 20 7b 0a 20 20 56 64 62  NullRow: {.  Vdb
21fb0 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20  eCursor *pC;..  
21fc0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
21fd0 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
21fe0 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
21ff0 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
22000 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
22010 70 43 21 3d 30 20 29 3b 0a 20 20 70 43 2d 3e 6e  pC!=0 );.  pC->n
22020 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43  ullRow = 1;.  pC
22030 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d  ->rowidIsValid =
22040 20 30 3b 0a 20 20 69 66 28 20 70 43 2d 3e 70 43   0;.  if( pC->pC
22050 75 72 73 6f 72 20 29 7b 0a 20 20 20 20 73 71 6c  ursor ){.    sql
22060 69 74 65 33 42 74 72 65 65 43 6c 65 61 72 43 75  ite3BtreeClearCu
22070 72 73 6f 72 28 70 43 2d 3e 70 43 75 72 73 6f 72  rsor(pC->pCursor
22080 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
22090 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 61  }../* Opcode: La
220a0 73 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  st P1 P2 * * *.*
220b0 2a 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 75 73  *.** The next us
220c0 65 20 6f 66 20 74 68 65 20 52 6f 77 69 64 20 6f  e of the Rowid o
220d0 72 20 43 6f 6c 75 6d 6e 20 6f 72 20 4e 65 78 74  r Column or Next
220e0 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 66 6f 72   instruction for
220f0 20 50 31 20 0a 2a 2a 20 77 69 6c 6c 20 72 65 66   P1 .** will ref
22100 65 72 20 74 6f 20 74 68 65 20 6c 61 73 74 20 65  er to the last e
22110 6e 74 72 79 20 69 6e 20 74 68 65 20 64 61 74 61  ntry in the data
22120 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20 69 6e  base table or in
22130 64 65 78 2e 0a 2a 2a 20 49 66 20 74 68 65 20 74  dex..** If the t
22140 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 69 73  able or index is
22150 20 65 6d 70 74 79 20 61 6e 64 20 50 32 3e 30 2c   empty and P2>0,
22160 20 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65 64   then jump immed
22170 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a  iately to P2..**
22180 20 49 66 20 50 32 20 69 73 20 30 20 6f 72 20 69   If P2 is 0 or i
22190 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69  f the table or i
221a0 6e 64 65 78 20 69 73 20 6e 6f 74 20 65 6d 70 74  ndex is not empt
221b0 79 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a  y, fall through.
221c0 2a 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77  ** to the follow
221d0 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ing instruction.
221e0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 61 73 74  .*/.case OP_Last
221f0 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  : {        /* ju
22200 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73  mp */.  VdbeCurs
22210 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73  or *pC;.  BtCurs
22220 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74  or *pCrsr;.  int
22230 20 72 65 73 3b 0a 0a 20 20 61 73 73 65 72 74 28   res;..  assert(
22240 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
22250 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
22260 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
22270 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
22280 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
22290 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e  ;.  pCrsr = pC->
222a0 70 43 75 72 73 6f 72 3b 0a 20 20 69 66 28 20 70  pCursor;.  if( p
222b0 43 72 73 72 3d 3d 30 20 29 7b 0a 20 20 20 20 72  Crsr==0 ){.    r
222c0 65 73 20 3d 20 31 3b 0a 20 20 7d 65 6c 73 65 7b  es = 1;.  }else{
222d0 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
222e0 33 42 74 72 65 65 4c 61 73 74 28 70 43 72 73 72  3BtreeLast(pCrsr
222f0 2c 20 26 72 65 73 29 3b 0a 20 20 7d 0a 20 20 70  , &res);.  }.  p
22300 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 28 75 38  C->nullRow = (u8
22310 29 72 65 73 3b 0a 20 20 70 43 2d 3e 64 65 66 65  )res;.  pC->defe
22320 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a  rredMoveto = 0;.
22330 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c    pC->rowidIsVal
22340 69 64 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61  id = 0;.  pC->ca
22350 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
22360 45 5f 53 54 41 4c 45 3b 0a 20 20 69 66 28 20 70  E_STALE;.  if( p
22370 4f 70 2d 3e 70 32 3e 30 20 26 26 20 72 65 73 20  Op->p2>0 && res 
22380 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  ){.    pc = pOp-
22390 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62  >p2 - 1;.  }.  b
223a0 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63  reak;.}.../* Opc
223b0 6f 64 65 3a 20 53 6f 72 74 20 50 31 20 50 32 20  ode: Sort P1 P2 
223c0 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73  * * *.**.** This
223d0 20 6f 70 63 6f 64 65 20 64 6f 65 73 20 65 78 61   opcode does exa
223e0 63 74 6c 79 20 74 68 65 20 73 61 6d 65 20 74 68  ctly the same th
223f0 69 6e 67 20 61 73 20 4f 50 5f 52 65 77 69 6e 64  ing as OP_Rewind
22400 20 65 78 63 65 70 74 20 74 68 61 74 0a 2a 2a 20   except that.** 
22410 69 74 20 69 6e 63 72 65 6d 65 6e 74 73 20 61 6e  it increments an
22420 20 75 6e 64 6f 63 75 6d 65 6e 74 65 64 20 67 6c   undocumented gl
22430 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 20 75 73  obal variable us
22440 65 64 20 66 6f 72 20 74 65 73 74 69 6e 67 2e 0a  ed for testing..
22450 2a 2a 0a 2a 2a 20 53 6f 72 74 69 6e 67 20 69 73  **.** Sorting is
22460 20 61 63 63 6f 6d 70 6c 69 73 68 65 64 20 62 79   accomplished by
22470 20 77 72 69 74 69 6e 67 20 72 65 63 6f 72 64 73   writing records
22480 20 69 6e 74 6f 20 61 20 73 6f 72 74 69 6e 67 20   into a sorting 
22490 69 6e 64 65 78 2c 0a 2a 2a 20 74 68 65 6e 20 72  index,.** then r
224a0 65 77 69 6e 64 69 6e 67 20 74 68 61 74 20 69 6e  ewinding that in
224b0 64 65 78 20 61 6e 64 20 70 6c 61 79 69 6e 67 20  dex and playing 
224c0 69 74 20 62 61 63 6b 20 66 72 6f 6d 20 62 65 67  it back from beg
224d0 69 6e 6e 69 6e 67 20 74 6f 0a 2a 2a 20 65 6e 64  inning to.** end
224e0 2e 20 20 57 65 20 75 73 65 20 74 68 65 20 4f 50  .  We use the OP
224f0 5f 53 6f 72 74 20 6f 70 63 6f 64 65 20 69 6e 73  _Sort opcode ins
22500 74 65 61 64 20 6f 66 20 4f 50 5f 52 65 77 69 6e  tead of OP_Rewin
22510 64 20 74 6f 20 64 6f 20 74 68 65 0a 2a 2a 20 72  d to do the.** r
22520 65 77 69 6e 64 69 6e 67 20 73 6f 20 74 68 61 74  ewinding so that
22530 20 74 68 65 20 67 6c 6f 62 61 6c 20 76 61 72 69   the global vari
22540 61 62 6c 65 20 77 69 6c 6c 20 62 65 20 69 6e 63  able will be inc
22550 72 65 6d 65 6e 74 65 64 20 61 6e 64 0a 2a 2a 20  remented and.** 
22560 72 65 67 72 65 73 73 69 6f 6e 20 74 65 73 74 73  regression tests
22570 20 63 61 6e 20 64 65 74 65 72 6d 69 6e 65 20 77   can determine w
22580 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68  hether or not th
22590 65 20 6f 70 74 69 6d 69 7a 65 72 20 69 73 0a 2a  e optimizer is.*
225a0 2a 20 63 6f 72 72 65 63 74 6c 79 20 6f 70 74 69  * correctly opti
225b0 6d 69 7a 69 6e 67 20 6f 75 74 20 73 6f 72 74 73  mizing out sorts
225c0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72  ..*/.case OP_Sor
225d0 74 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a  t: {        /* j
225e0 75 6d 70 20 2a 2f 0a 23 69 66 64 65 66 20 53 51  ump */.#ifdef SQ
225f0 4c 49 54 45 5f 54 45 53 54 0a 20 20 73 71 6c 69  LITE_TEST.  sqli
22600 74 65 33 5f 73 6f 72 74 5f 63 6f 75 6e 74 2b 2b  te3_sort_count++
22610 3b 0a 20 20 73 71 6c 69 74 65 33 5f 73 65 61 72  ;.  sqlite3_sear
22620 63 68 5f 63 6f 75 6e 74 2d 2d 3b 0a 23 65 6e 64  ch_count--;.#end
22630 69 66 0a 20 20 70 2d 3e 61 43 6f 75 6e 74 65 72  if.  p->aCounter
22640 5b 53 51 4c 49 54 45 5f 53 54 4d 54 53 54 41 54  [SQLITE_STMTSTAT
22650 55 53 5f 53 4f 52 54 2d 31 5d 2b 2b 3b 0a 20 20  US_SORT-1]++;.  
22660 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20  /* Fall through 
22670 69 6e 74 6f 20 4f 50 5f 52 65 77 69 6e 64 20 2a  into OP_Rewind *
22680 2f 0a 7d 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  /.}./* Opcode: R
22690 65 77 69 6e 64 20 50 31 20 50 32 20 2a 20 2a 20  ewind P1 P2 * * 
226a0 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e 65 78 74  *.**.** The next
226b0 20 75 73 65 20 6f 66 20 74 68 65 20 52 6f 77 69   use of the Rowi
226c0 64 20 6f 72 20 43 6f 6c 75 6d 6e 20 6f 72 20 4e  d or Column or N
226d0 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  ext instruction 
226e0 66 6f 72 20 50 31 20 0a 2a 2a 20 77 69 6c 6c 20  for P1 .** will 
226f0 72 65 66 65 72 20 74 6f 20 74 68 65 20 66 69 72  refer to the fir
22700 73 74 20 65 6e 74 72 79 20 69 6e 20 74 68 65 20  st entry in the 
22710 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f  database table o
22720 72 20 69 6e 64 65 78 2e 0a 2a 2a 20 49 66 20 74  r index..** If t
22730 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  he table or inde
22740 78 20 69 73 20 65 6d 70 74 79 20 61 6e 64 20 50  x is empty and P
22750 32 3e 30 2c 20 74 68 65 6e 20 6a 75 6d 70 20 69  2>0, then jump i
22760 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32  mmediately to P2
22770 2e 0a 2a 2a 20 49 66 20 50 32 20 69 73 20 30 20  ..** If P2 is 0 
22780 6f 72 20 69 66 20 74 68 65 20 74 61 62 6c 65 20  or if the table 
22790 6f 72 20 69 6e 64 65 78 20 69 73 20 6e 6f 74 20  or index is not 
227a0 65 6d 70 74 79 2c 20 66 61 6c 6c 20 74 68 72 6f  empty, fall thro
227b0 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66 6f  ugh.** to the fo
227c0 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75 63 74  llowing instruct
227d0 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ion..*/.case OP_
227e0 52 65 77 69 6e 64 3a 20 7b 20 20 20 20 20 20 20  Rewind: {       
227f0 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64   /* jump */.  Vd
22800 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
22810 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b  BtCursor *pCrsr;
22820 0a 20 20 69 6e 74 20 72 65 73 3b 0a 0a 20 20 61  .  int res;..  a
22830 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
22840 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
22850 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
22860 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
22870 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
22880 43 21 3d 30 20 29 3b 0a 20 20 72 65 73 20 3d 20  C!=0 );.  res = 
22890 31 3b 0a 20 20 69 66 28 20 28 70 43 72 73 72 20  1;.  if( (pCrsr 
228a0 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 29 21 3d  = pC->pCursor)!=
228b0 30 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71  0 ){.    rc = sq
228c0 6c 69 74 65 33 42 74 72 65 65 46 69 72 73 74 28  lite3BtreeFirst(
228d0 70 43 72 73 72 2c 20 26 72 65 73 29 3b 0a 20 20  pCrsr, &res);.  
228e0 20 20 70 43 2d 3e 61 74 46 69 72 73 74 20 3d 20    pC->atFirst = 
228f0 72 65 73 3d 3d 30 20 3f 31 3a 30 3b 0a 20 20 20  res==0 ?1:0;.   
22900 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
22910 65 74 6f 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d  eto = 0;.    pC-
22920 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
22930 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 20 20  ACHE_STALE;.    
22940 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64  pC->rowidIsValid
22950 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 70 43 2d 3e   = 0;.  }.  pC->
22960 6e 75 6c 6c 52 6f 77 20 3d 20 28 75 38 29 72 65  nullRow = (u8)re
22970 73 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  s;.  assert( pOp
22980 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p2>0 && pOp->p
22990 32 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 69 66  2<p->nOp );.  if
229a0 28 20 72 65 73 20 29 7b 0a 20 20 20 20 70 63 20  ( res ){.    pc 
229b0 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
229c0 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
229d0 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 78 74 20 50  * Opcode: Next P
229e0 31 20 50 32 20 2a 20 2a 20 50 35 0a 2a 2a 0a 2a  1 P2 * * P5.**.*
229f0 2a 20 41 64 76 61 6e 63 65 20 63 75 72 73 6f 72  * Advance cursor
22a00 20 50 31 20 73 6f 20 74 68 61 74 20 69 74 20 70   P1 so that it p
22a10 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 6e 65 78  oints to the nex
22a20 74 20 6b 65 79 2f 64 61 74 61 20 70 61 69 72 20  t key/data pair 
22a30 69 6e 20 69 74 73 0a 2a 2a 20 74 61 62 6c 65 20  in its.** table 
22a40 6f 72 20 69 6e 64 65 78 2e 20 20 49 66 20 74 68  or index.  If th
22a50 65 72 65 20 61 72 65 20 6e 6f 20 6d 6f 72 65 20  ere are no more 
22a60 6b 65 79 2f 76 61 6c 75 65 20 70 61 69 72 73 20  key/value pairs 
22a70 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67  then fall throug
22a80 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c  h.** to the foll
22a90 6f 77 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f  owing instructio
22aa0 6e 2e 20 20 42 75 74 20 69 66 20 74 68 65 20 63  n.  But if the c
22ab0 75 72 73 6f 72 20 61 64 76 61 6e 63 65 20 77 61  ursor advance wa
22ac0 73 20 73 75 63 63 65 73 73 66 75 6c 2c 0a 2a 2a  s successful,.**
22ad0 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c   jump immediatel
22ae0 79 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54  y to P2..**.** T
22af0 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d 75 73  he P1 cursor mus
22b00 74 20 62 65 20 66 6f 72 20 61 20 72 65 61 6c 20  t be for a real 
22b10 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65  table, not a pse
22b20 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a  udo-table..**.**
22b30 20 49 66 20 50 35 20 69 73 20 70 6f 73 69 74 69   If P5 is positi
22b40 76 65 20 61 6e 64 20 74 68 65 20 6a 75 6d 70 20  ve and the jump 
22b50 69 73 20 74 61 6b 65 6e 2c 20 74 68 65 6e 20 65  is taken, then e
22b60 76 65 6e 74 20 63 6f 75 6e 74 65 72 0a 2a 2a 20  vent counter.** 
22b70 6e 75 6d 62 65 72 20 50 35 2d 31 20 69 6e 20 74  number P5-1 in t
22b80 68 65 20 70 72 65 70 61 72 65 64 20 73 74 61 74  he prepared stat
22b90 65 6d 65 6e 74 20 69 73 20 69 6e 63 72 65 6d 65  ement is increme
22ba0 6e 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  nted..**.** See 
22bb0 61 6c 73 6f 3a 20 50 72 65 76 0a 2a 2f 0a 2f 2a  also: Prev.*/./*
22bc0 20 4f 70 63 6f 64 65 3a 20 50 72 65 76 20 50 31   Opcode: Prev P1
22bd0 20 50 32 20 2a 20 2a 20 50 35 0a 2a 2a 0a 2a 2a   P2 * * P5.**.**
22be0 20 42 61 63 6b 20 75 70 20 63 75 72 73 6f 72 20   Back up cursor 
22bf0 50 31 20 73 6f 20 74 68 61 74 20 69 74 20 70 6f  P1 so that it po
22c00 69 6e 74 73 20 74 6f 20 74 68 65 20 70 72 65 76  ints to the prev
22c10 69 6f 75 73 20 6b 65 79 2f 64 61 74 61 20 70 61  ious key/data pa
22c20 69 72 20 69 6e 20 69 74 73 0a 2a 2a 20 74 61 62  ir in its.** tab
22c30 6c 65 20 6f 72 20 69 6e 64 65 78 2e 20 20 49 66  le or index.  If
22c40 20 74 68 65 72 65 20 69 73 20 6e 6f 20 70 72 65   there is no pre
22c50 76 69 6f 75 73 20 6b 65 79 2f 76 61 6c 75 65 20  vious key/value 
22c60 70 61 69 72 73 20 74 68 65 6e 20 66 61 6c 6c 20  pairs then fall 
22c70 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68  through.** to th
22c80 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74  e following inst
22c90 72 75 63 74 69 6f 6e 2e 20 20 42 75 74 20 69 66  ruction.  But if
22ca0 20 74 68 65 20 63 75 72 73 6f 72 20 62 61 63 6b   the cursor back
22cb0 75 70 20 77 61 73 20 73 75 63 63 65 73 73 66 75  up was successfu
22cc0 6c 2c 0a 2a 2a 20 6a 75 6d 70 20 69 6d 6d 65 64  l,.** jump immed
22cd0 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a  iately to P2..**
22ce0 0a 2a 2a 20 54 68 65 20 50 31 20 63 75 72 73 6f  .** The P1 curso
22cf0 72 20 6d 75 73 74 20 62 65 20 66 6f 72 20 61 20  r must be for a 
22d00 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20  real table, not 
22d10 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a  a pseudo-table..
22d20 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 70  **.** If P5 is p
22d30 6f 73 69 74 69 76 65 20 61 6e 64 20 74 68 65 20  ositive and the 
22d40 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 2c 20 74  jump is taken, t
22d50 68 65 6e 20 65 76 65 6e 74 20 63 6f 75 6e 74 65  hen event counte
22d60 72 0a 2a 2a 20 6e 75 6d 62 65 72 20 50 35 2d 31  r.** number P5-1
22d70 20 69 6e 20 74 68 65 20 70 72 65 70 61 72 65 64   in the prepared
22d80 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 69 6e   statement is in
22d90 63 72 65 6d 65 6e 74 65 64 2e 0a 2a 2f 0a 63 61  cremented..*/.ca
22da0 73 65 20 4f 50 5f 50 72 65 76 3a 20 20 20 20 20  se OP_Prev:     
22db0 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
22dc0 63 61 73 65 20 4f 50 5f 4e 65 78 74 3a 20 7b 20  case OP_Next: { 
22dd0 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
22de0 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  /.  VdbeCursor *
22df0 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a  pC;.  BtCursor *
22e00 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73  pCrsr;.  int res
22e10 3b 0a 0a 20 20 43 48 45 43 4b 5f 46 4f 52 5f 49  ;..  CHECK_FOR_I
22e20 4e 54 45 52 52 55 50 54 3b 0a 20 20 61 73 73 65  NTERRUPT;.  asse
22e30 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
22e40 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
22e50 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74  rsor );.  assert
22e60 28 20 70 4f 70 2d 3e 70 35 3c 3d 41 72 72 61 79  ( pOp->p5<=Array
22e70 53 69 7a 65 28 70 2d 3e 61 43 6f 75 6e 74 65 72  Size(p->aCounter
22e80 29 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  ) );.  pC = p->a
22e90 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
22ea0 20 69 66 28 20 70 43 3d 3d 30 20 29 7b 0a 20 20   if( pC==0 ){.  
22eb0 20 20 62 72 65 61 6b 3b 20 20 2f 2a 20 53 65 65    break;  /* See
22ec0 20 74 69 63 6b 65 74 20 23 32 32 37 33 20 2a 2f   ticket #2273 */
22ed0 0a 20 20 7d 0a 20 20 70 43 72 73 72 20 3d 20 70  .  }.  pCrsr = p
22ee0 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 69 66  C->pCursor;.  if
22ef0 28 20 70 43 72 73 72 3d 3d 30 20 29 7b 0a 20 20  ( pCrsr==0 ){.  
22f00 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20    pC->nullRow = 
22f10 31 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  1;.    break;.  
22f20 7d 0a 20 20 72 65 73 20 3d 20 31 3b 0a 20 20 61  }.  res = 1;.  a
22f30 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72  ssert( pC->defer
22f40 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a  redMoveto==0 );.
22f50 20 20 72 63 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f    rc = pOp->opco
22f60 64 65 3d 3d 4f 50 5f 4e 65 78 74 20 3f 20 73 71  de==OP_Next ? sq
22f70 6c 69 74 65 33 42 74 72 65 65 4e 65 78 74 28 70  lite3BtreeNext(p
22f80 43 72 73 72 2c 20 26 72 65 73 29 20 3a 0a 20 20  Crsr, &res) :.  
22f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22fa0 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
22fb0 74 65 33 42 74 72 65 65 50 72 65 76 69 6f 75 73  te3BtreePrevious
22fc0 28 70 43 72 73 72 2c 20 26 72 65 73 29 3b 0a 20  (pCrsr, &res);. 
22fd0 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 28   pC->nullRow = (
22fe0 75 38 29 72 65 73 3b 0a 20 20 70 43 2d 3e 63 61  u8)res;.  pC->ca
22ff0 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
23000 45 5f 53 54 41 4c 45 3b 0a 20 20 69 66 28 20 72  E_STALE;.  if( r
23010 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 70 63 20  es==0 ){.    pc 
23020 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
23030 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 29     if( pOp->p5 )
23040 20 70 2d 3e 61 43 6f 75 6e 74 65 72 5b 70 4f 70   p->aCounter[pOp
23050 2d 3e 70 35 2d 31 5d 2b 2b 3b 0a 23 69 66 64 65  ->p5-1]++;.#ifde
23060 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20  f SQLITE_TEST.  
23070 20 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68    sqlite3_search
23080 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66  _count++;.#endif
23090 0a 20 20 7d 0a 20 20 70 43 2d 3e 72 6f 77 69 64  .  }.  pC->rowid
230a0 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 62  IsValid = 0;.  b
230b0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
230c0 64 65 3a 20 49 64 78 49 6e 73 65 72 74 20 50 31  de: IdxInsert P1
230d0 20 50 32 20 50 33 20 2a 20 50 35 0a 2a 2a 0a 2a   P2 P3 * P5.**.*
230e0 2a 20 52 65 67 69 73 74 65 72 20 50 32 20 68 6f  * Register P2 ho
230f0 6c 64 73 20 61 20 53 51 4c 20 69 6e 64 65 78 20  lds a SQL index 
23100 6b 65 79 20 6d 61 64 65 20 75 73 69 6e 67 20 74  key made using t
23110 68 65 0a 2a 2a 20 4d 61 6b 65 52 65 63 6f 72 64  he.** MakeRecord
23120 20 69 6e 73 74 72 75 63 74 69 6f 6e 73 2e 20 20   instructions.  
23130 54 68 69 73 20 6f 70 63 6f 64 65 20 77 72 69 74  This opcode writ
23140 65 73 20 74 68 61 74 20 6b 65 79 0a 2a 2a 20 69  es that key.** i
23150 6e 74 6f 20 74 68 65 20 69 6e 64 65 78 20 50 31  nto the index P1
23160 2e 20 20 44 61 74 61 20 66 6f 72 20 74 68 65 20  .  Data for the 
23170 65 6e 74 72 79 20 69 73 20 6e 69 6c 2e 0a 2a 2a  entry is nil..**
23180 0a 2a 2a 20 50 33 20 69 73 20 61 20 66 6c 61 67  .** P3 is a flag
23190 20 74 68 61 74 20 70 72 6f 76 69 64 65 73 20 61   that provides a
231a0 20 68 69 6e 74 20 74 6f 20 74 68 65 20 62 2d 74   hint to the b-t
231b0 72 65 65 20 6c 61 79 65 72 20 74 68 61 74 20 74  ree layer that t
231c0 68 69 73 0a 2a 2a 20 69 6e 73 65 72 74 20 69 73  his.** insert is
231d0 20 6c 69 6b 65 6c 79 20 74 6f 20 62 65 20 61 6e   likely to be an
231e0 20 61 70 70 65 6e 64 2e 0a 2a 2a 0a 2a 2a 20 54   append..**.** T
231f0 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
23200 6f 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72 20 69  only works for i
23210 6e 64 69 63 65 73 2e 20 20 54 68 65 20 65 71 75  ndices.  The equ
23220 69 76 61 6c 65 6e 74 20 69 6e 73 74 72 75 63 74  ivalent instruct
23230 69 6f 6e 0a 2a 2a 20 66 6f 72 20 74 61 62 6c 65  ion.** for table
23240 73 20 69 73 20 4f 50 5f 49 6e 73 65 72 74 2e 0a  s is OP_Insert..
23250 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 49 6e  */.case OP_IdxIn
23260 73 65 72 74 3a 20 7b 20 20 20 20 20 20 20 20 2f  sert: {        /
23270 2a 20 69 6e 32 20 2a 2f 0a 20 20 56 64 62 65 43  * in2 */.  VdbeC
23280 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43  ursor *pC;.  BtC
23290 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20  ursor *pCrsr;.  
232a0 69 6e 74 20 6e 4b 65 79 3b 0a 20 20 63 6f 6e 73  int nKey;.  cons
232b0 74 20 63 68 61 72 20 2a 7a 4b 65 79 3b 0a 0a 20  t char *zKey;.. 
232c0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
232d0 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
232e0 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  ->nCursor );.  p
232f0 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
23300 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
23310 20 70 43 21 3d 30 20 29 3b 0a 20 20 70 49 6e 32   pC!=0 );.  pIn2
23320 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
23330 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e  ];.  assert( pIn
23340 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42  2->flags & MEM_B
23350 6c 6f 62 20 29 3b 0a 20 20 70 43 72 73 72 20 3d  lob );.  pCrsr =
23360 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20   pC->pCursor;.  
23370 69 66 28 20 41 4c 57 41 59 53 28 70 43 72 73 72  if( ALWAYS(pCrsr
23380 21 3d 30 29 20 29 7b 0a 20 20 20 20 61 73 73 65  !=0) ){.    asse
23390 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d  rt( pC->isTable=
233a0 3d 30 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 45  =0 );.    rc = E
233b0 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 32 29 3b  xpandBlob(pIn2);
233c0 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  .    if( rc==SQL
233d0 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
233e0 6e 4b 65 79 20 3d 20 70 49 6e 32 2d 3e 6e 3b 0a  nKey = pIn2->n;.
233f0 20 20 20 20 20 20 7a 4b 65 79 20 3d 20 70 49 6e        zKey = pIn
23400 32 2d 3e 7a 3b 0a 20 20 20 20 20 20 72 63 20 3d  2->z;.      rc =
23410 20 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e 73   sqlite3BtreeIns
23420 65 72 74 28 70 43 72 73 72 2c 20 7a 4b 65 79 2c  ert(pCrsr, zKey,
23430 20 6e 4b 65 79 2c 20 22 22 2c 20 30 2c 20 30 2c   nKey, "", 0, 0,
23440 20 70 4f 70 2d 3e 70 33 2c 20 0a 20 20 20 20 20   pOp->p3, .     
23450 20 20 20 20 20 28 28 70 4f 70 2d 3e 70 35 20 26       ((pOp->p5 &
23460 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52   OPFLAG_USESEEKR
23470 45 53 55 4c 54 29 20 3f 20 70 43 2d 3e 73 65 65  ESULT) ? pC->see
23480 6b 52 65 73 75 6c 74 20 3a 20 30 29 0a 20 20 20  kResult : 0).   
23490 20 20 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65     );.      asse
234a0 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64  rt( pC->deferred
234b0 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 20  Moveto==0 );.   
234c0 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74     pC->cacheStat
234d0 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45  us = CACHE_STALE
234e0 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72  ;.    }.  }.  br
234f0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
23500 65 3a 20 49 64 78 44 65 6c 65 74 65 20 50 31 20  e: IdxDelete P1 
23510 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
23520 54 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 50  The content of P
23530 33 20 72 65 67 69 73 74 65 72 73 20 73 74 61 72  3 registers star
23540 74 69 6e 67 20 61 74 20 72 65 67 69 73 74 65 72  ting at register
23550 20 50 32 20 66 6f 72 6d 0a 2a 2a 20 61 6e 20 75   P2 form.** an u
23560 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65  npacked index ke
23570 79 2e 20 54 68 69 73 20 6f 70 63 6f 64 65 20 72  y. This opcode r
23580 65 6d 6f 76 65 73 20 74 68 61 74 20 65 6e 74 72  emoves that entr
23590 79 20 66 72 6f 6d 20 74 68 65 20 0a 2a 2a 20 69  y from the .** i
235a0 6e 64 65 78 20 6f 70 65 6e 65 64 20 62 79 20 63  ndex opened by c
235b0 75 72 73 6f 72 20 50 31 2e 0a 2a 2f 0a 63 61 73  ursor P1..*/.cas
235c0 65 20 4f 50 5f 49 64 78 44 65 6c 65 74 65 3a 20  e OP_IdxDelete: 
235d0 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  {.  VdbeCursor *
235e0 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a  pC;.  BtCursor *
235f0 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73  pCrsr;.  int res
23600 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f  ;.  UnpackedReco
23610 72 64 20 72 3b 0a 0a 20 20 61 73 73 65 72 74 28  rd r;..  assert(
23620 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20   pOp->p3>0 );.  
23630 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e  assert( pOp->p2>
23640 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 70 4f 70  0 && pOp->p2+pOp
23650 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31 20  ->p3<=p->nMem+1 
23660 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
23670 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
23680 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
23690 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
236a0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
236b0 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
236c0 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72  pCrsr = pC->pCur
236d0 73 6f 72 3b 0a 20 20 69 66 28 20 41 4c 57 41 59  sor;.  if( ALWAY
236e0 53 28 70 43 72 73 72 21 3d 30 29 20 29 7b 0a 20  S(pCrsr!=0) ){. 
236f0 20 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20     r.pKeyInfo = 
23700 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20  pC->pKeyInfo;.  
23710 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31    r.nField = (u1
23720 36 29 70 4f 70 2d 3e 70 33 3b 0a 20 20 20 20 72  6)pOp->p3;.    r
23730 2e 66 6c 61 67 73 20 3d 20 30 3b 0a 20 20 20 20  .flags = 0;.    
23740 72 2e 61 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70  r.aMem = &aMem[p
23750 4f 70 2d 3e 70 32 5d 3b 0a 23 69 66 64 65 66 20  Op->p2];.#ifdef 
23760 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20  SQLITE_DEBUG.   
23770 20 7b 20 69 6e 74 20 69 3b 20 66 6f 72 28 69 3d   { int i; for(i=
23780 30 3b 20 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69  0; i<r.nField; i
23790 2b 2b 29 20 61 73 73 65 72 74 28 20 6d 65 6d 49  ++) assert( memI
237a0 73 56 61 6c 69 64 28 26 72 2e 61 4d 65 6d 5b 69  sValid(&r.aMem[i
237b0 5d 29 20 29 3b 20 7d 0a 23 65 6e 64 69 66 0a 20  ]) ); }.#endif. 
237c0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
237d0 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b  treeMovetoUnpack
237e0 65 64 28 70 43 72 73 72 2c 20 26 72 2c 20 30 2c  ed(pCrsr, &r, 0,
237f0 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 69   0, &res);.    i
23800 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
23810 20 26 26 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20   && res==0 ){.  
23820 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
23830 42 74 72 65 65 44 65 6c 65 74 65 28 70 43 72 73  BtreeDelete(pCrs
23840 72 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 61 73  r);.    }.    as
23850 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72  sert( pC->deferr
23860 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20  edMoveto==0 );. 
23870 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74     pC->cacheStat
23880 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45  us = CACHE_STALE
23890 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
238a0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78  ../* Opcode: Idx
238b0 52 6f 77 69 64 20 50 31 20 50 32 20 2a 20 2a 20  Rowid P1 P2 * * 
238c0 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 69 6e  *.**.** Write in
238d0 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 20 61  to register P2 a
238e0 6e 20 69 6e 74 65 67 65 72 20 77 68 69 63 68 20  n integer which 
238f0 69 73 20 74 68 65 20 6c 61 73 74 20 65 6e 74 72  is the last entr
23900 79 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20  y in the record 
23910 61 74 0a 2a 2a 20 74 68 65 20 65 6e 64 20 6f 66  at.** the end of
23920 20 74 68 65 20 69 6e 64 65 78 20 6b 65 79 20 70   the index key p
23930 6f 69 6e 74 65 64 20 74 6f 20 62 79 20 63 75 72  ointed to by cur
23940 73 6f 72 20 50 31 2e 20 20 54 68 69 73 20 69 6e  sor P1.  This in
23950 74 65 67 65 72 20 73 68 6f 75 6c 64 20 62 65 0a  teger should be.
23960 2a 2a 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20  ** the rowid of 
23970 74 68 65 20 74 61 62 6c 65 20 65 6e 74 72 79 20  the table entry 
23980 74 6f 20 77 68 69 63 68 20 74 68 69 73 20 69 6e  to which this in
23990 64 65 78 20 65 6e 74 72 79 20 70 6f 69 6e 74 73  dex entry points
239a0 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
239b0 3a 20 52 6f 77 69 64 2c 20 4d 61 6b 65 52 65 63  : Rowid, MakeRec
239c0 6f 72 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ord..*/.case OP_
239d0 49 64 78 52 6f 77 69 64 3a 20 7b 20 20 20 20 20  IdxRowid: {     
239e0 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
239f0 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20  -prerelease */. 
23a00 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72   BtCursor *pCrsr
23a10 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  ;.  VdbeCursor *
23a20 70 43 3b 0a 20 20 69 36 34 20 72 6f 77 69 64 3b  pC;.  i64 rowid;
23a30 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
23a40 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
23a50 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
23a60 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
23a70 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
23a80 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 70  rt( pC!=0 );.  p
23a90 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73  Crsr = pC->pCurs
23aa0 6f 72 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67  or;.  pOut->flag
23ab0 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20  s = MEM_Null;.  
23ac0 69 66 28 20 41 4c 57 41 59 53 28 70 43 72 73 72  if( ALWAYS(pCrsr
23ad0 21 3d 30 29 20 29 7b 0a 20 20 20 20 72 63 20 3d  !=0) ){.    rc =
23ae0 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73   sqlite3VdbeCurs
23af0 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20  orMoveto(pC);.  
23b00 20 20 69 66 28 20 4e 45 56 45 52 28 72 63 29 20    if( NEVER(rc) 
23b10 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
23b20 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 61  _to_error;.    a
23b30 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72  ssert( pC->defer
23b40 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a  redMoveto==0 );.
23b50 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
23b60 69 73 54 61 62 6c 65 3d 3d 30 20 29 3b 0a 20 20  isTable==0 );.  
23b70 20 20 69 66 28 20 21 70 43 2d 3e 6e 75 6c 6c 52    if( !pC->nullR
23b80 6f 77 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d  ow ){.      rc =
23b90 20 73 71 6c 69 74 65 33 56 64 62 65 49 64 78 52   sqlite3VdbeIdxR
23ba0 6f 77 69 64 28 64 62 2c 20 70 43 72 73 72 2c 20  owid(db, pCrsr, 
23bb0 26 72 6f 77 69 64 29 3b 0a 20 20 20 20 20 20 69  &rowid);.      i
23bc0 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
23bd0 20 29 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f   ){.        goto
23be0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
23bf0 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  ror;.      }.   
23c00 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 72     pOut->u.i = r
23c10 6f 77 69 64 3b 0a 20 20 20 20 20 20 70 4f 75 74  owid;.      pOut
23c20 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e  ->flags = MEM_In
23c30 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62  t;.    }.  }.  b
23c40 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
23c50 64 65 3a 20 49 64 78 47 45 20 50 31 20 50 32 20  de: IdxGE P1 P2 
23c60 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54  P3 P4 P5.**.** T
23c70 68 65 20 50 34 20 72 65 67 69 73 74 65 72 20 76  he P4 register v
23c80 61 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e 67 20  alues beginning 
23c90 77 69 74 68 20 50 33 20 66 6f 72 6d 20 61 6e 20  with P3 form an 
23ca0 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 0a  unpacked index .
23cb0 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d 69 74  ** key that omit
23cc0 73 20 74 68 65 20 52 4f 57 49 44 2e 20 20 43 6f  s the ROWID.  Co
23cd0 6d 70 61 72 65 20 74 68 69 73 20 6b 65 79 20 76  mpare this key v
23ce0 61 6c 75 65 20 61 67 61 69 6e 73 74 20 74 68 65  alue against the
23cf0 20 69 6e 64 65 78 20 0a 2a 2a 20 74 68 61 74 20   index .** that 
23d00 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20  P1 is currently 
23d10 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67 6e  pointing to, ign
23d20 6f 72 69 6e 67 20 74 68 65 20 52 4f 57 49 44 20  oring the ROWID 
23d30 6f 6e 20 74 68 65 20 50 31 20 69 6e 64 65 78 2e  on the P1 index.
23d40 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31  .**.** If the P1
23d50 20 69 6e 64 65 78 20 65 6e 74 72 79 20 69 73 20   index entry is 
23d60 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20  greater than or 
23d70 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79  equal to the key
23d80 20 76 61 6c 75 65 0a 2a 2a 20 74 68 65 6e 20 6a   value.** then j
23d90 75 6d 70 20 74 6f 20 50 32 2e 20 20 4f 74 68 65  ump to P2.  Othe
23da0 72 77 69 73 65 20 66 61 6c 6c 20 74 68 72 6f 75  rwise fall throu
23db0 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69  gh to the next i
23dc0 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a  nstruction..**.*
23dd0 2a 20 49 66 20 50 35 20 69 73 20 6e 6f 6e 2d 7a  * If P5 is non-z
23de0 65 72 6f 20 74 68 65 6e 20 74 68 65 20 6b 65 79  ero then the key
23df0 20 76 61 6c 75 65 20 69 73 20 69 6e 63 72 65 61   value is increa
23e00 73 65 64 20 62 79 20 61 6e 20 65 70 73 69 6c 6f  sed by an epsilo
23e10 6e 20 0a 2a 2a 20 70 72 69 6f 72 20 74 6f 20 74  n .** prior to t
23e20 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20  he comparison.  
23e30 54 68 69 73 20 6d 61 6b 65 20 74 68 65 20 6f 70  This make the op
23e40 63 6f 64 65 20 77 6f 72 6b 20 6c 69 6b 65 20 49  code work like I
23e50 64 78 47 54 20 65 78 63 65 70 74 0a 2a 2a 20 74  dxGT except.** t
23e60 68 61 74 20 69 66 20 74 68 65 20 6b 65 79 20 66  hat if the key f
23e70 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50 33 20  rom register P3 
23e80 69 73 20 61 20 70 72 65 66 69 78 20 6f 66 20 74  is a prefix of t
23e90 68 65 20 6b 65 79 20 69 6e 20 74 68 65 20 63 75  he key in the cu
23ea0 72 73 6f 72 2c 0a 2a 2a 20 74 68 65 20 72 65 73  rsor,.** the res
23eb0 75 6c 74 20 69 73 20 66 61 6c 73 65 20 77 68 65  ult is false whe
23ec0 72 65 61 73 20 69 74 20 77 6f 75 6c 64 20 62 65  reas it would be
23ed0 20 74 72 75 65 20 77 69 74 68 20 49 64 78 47 54   true with IdxGT
23ee0 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
23ef0 49 64 78 4c 54 20 50 31 20 50 32 20 50 33 20 50  IdxLT P1 P2 P3 P
23f00 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50  4 P5.**.** The P
23f10 34 20 72 65 67 69 73 74 65 72 20 76 61 6c 75 65  4 register value
23f20 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68  s beginning with
23f30 20 50 33 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61   P3 form an unpa
23f40 63 6b 65 64 20 69 6e 64 65 78 20 0a 2a 2a 20 6b  cked index .** k
23f50 65 79 20 74 68 61 74 20 6f 6d 69 74 73 20 74 68  ey that omits th
23f60 65 20 52 4f 57 49 44 2e 20 20 43 6f 6d 70 61 72  e ROWID.  Compar
23f70 65 20 74 68 69 73 20 6b 65 79 20 76 61 6c 75 65  e this key value
23f80 20 61 67 61 69 6e 73 74 20 74 68 65 20 69 6e 64   against the ind
23f90 65 78 20 0a 2a 2a 20 74 68 61 74 20 50 31 20 69  ex .** that P1 i
23fa0 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e  s currently poin
23fb0 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e  ting to, ignorin
23fc0 67 20 74 68 65 20 52 4f 57 49 44 20 6f 6e 20 74  g the ROWID on t
23fd0 68 65 20 50 31 20 69 6e 64 65 78 2e 0a 2a 2a 0a  he P1 index..**.
23fe0 2a 2a 20 49 66 20 74 68 65 20 50 31 20 69 6e 64  ** If the P1 ind
23ff0 65 78 20 65 6e 74 72 79 20 69 73 20 6c 65 73 73  ex entry is less
24000 20 74 68 61 6e 20 74 68 65 20 6b 65 79 20 76 61   than the key va
24010 6c 75 65 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f  lue then jump to
24020 20 50 32 2e 0a 2a 2a 20 4f 74 68 65 72 77 69 73   P2..** Otherwis
24030 65 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74  e fall through t
24040 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72  o the next instr
24050 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66  uction..**.** If
24060 20 50 35 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 20   P5 is non-zero 
24070 74 68 65 6e 20 74 68 65 20 6b 65 79 20 76 61 6c  then the key val
24080 75 65 20 69 73 20 69 6e 63 72 65 61 73 65 64 20  ue is increased 
24090 62 79 20 61 6e 20 65 70 73 69 6c 6f 6e 20 70 72  by an epsilon pr
240a0 69 6f 72 20 0a 2a 2a 20 74 6f 20 74 68 65 20 63  ior .** to the c
240b0 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 54 68 69 73  omparison.  This
240c0 20 6d 61 6b 65 73 20 74 68 65 20 6f 70 63 6f 64   makes the opcod
240d0 65 20 77 6f 72 6b 20 6c 69 6b 65 20 49 64 78 4c  e work like IdxL
240e0 45 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64  E..*/.case OP_Id
240f0 78 4c 54 3a 20 20 20 20 20 20 20 20 20 20 2f 2a  xLT:          /*
24100 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50   jump */.case OP
24110 5f 49 64 78 47 45 3a 20 7b 20 20 20 20 20 20 20  _IdxGE: {       
24120 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64   /* jump */.  Vd
24130 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
24140 69 6e 74 20 72 65 73 3b 0a 20 20 55 6e 70 61 63  int res;.  Unpac
24150 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a 0a 20 20  kedRecord r;..  
24160 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
24170 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
24180 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
24190 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
241a0 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
241b0 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  pC!=0 );.  asser
241c0 74 28 20 70 43 2d 3e 69 73 4f 72 64 65 72 65 64  t( pC->isOrdered
241d0 20 29 3b 0a 20 20 69 66 28 20 41 4c 57 41 59 53   );.  if( ALWAYS
241e0 28 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 29  (pC->pCursor!=0)
241f0 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
24200 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
24210 74 6f 3d 3d 30 20 29 3b 0a 20 20 20 20 61 73 73  to==0 );.    ass
24220 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20  ert( pOp->p5==0 
24230 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 31 20 29 3b  || pOp->p5==1 );
24240 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
24250 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54  ->p4type==P4_INT
24260 33 32 20 29 3b 0a 20 20 20 20 72 2e 70 4b 65 79  32 );.    r.pKey
24270 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49  Info = pC->pKeyI
24280 6e 66 6f 3b 0a 20 20 20 20 72 2e 6e 46 69 65 6c  nfo;.    r.nFiel
24290 64 20 3d 20 28 75 31 36 29 70 4f 70 2d 3e 70 34  d = (u16)pOp->p4
242a0 2e 69 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d  .i;.    if( pOp-
242b0 3e 70 35 20 29 7b 0a 20 20 20 20 20 20 72 2e 66  >p5 ){.      r.f
242c0 6c 61 67 73 20 3d 20 55 4e 50 41 43 4b 45 44 5f  lags = UNPACKED_
242d0 49 4e 43 52 4b 45 59 20 7c 20 55 4e 50 41 43 4b  INCRKEY | UNPACK
242e0 45 44 5f 49 47 4e 4f 52 45 5f 52 4f 57 49 44 3b  ED_IGNORE_ROWID;
242f0 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
24300 20 20 72 2e 66 6c 61 67 73 20 3d 20 55 4e 50 41    r.flags = UNPA
24310 43 4b 45 44 5f 49 47 4e 4f 52 45 5f 52 4f 57 49  CKED_IGNORE_ROWI
24320 44 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72 2e 61  D;.    }.    r.a
24330 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Mem = &aMem[pOp-
24340 3e 70 33 5d 3b 0a 23 69 66 64 65 66 20 53 51 4c  >p3];.#ifdef SQL
24350 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20 7b 20  ITE_DEBUG.    { 
24360 69 6e 74 20 69 3b 20 66 6f 72 28 69 3d 30 3b 20  int i; for(i=0; 
24370 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b 29  i<r.nField; i++)
24380 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
24390 6c 69 64 28 26 72 2e 61 4d 65 6d 5b 69 5d 29 20  lid(&r.aMem[i]) 
243a0 29 3b 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20  ); }.#endif.    
243b0 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
243c0 49 64 78 4b 65 79 43 6f 6d 70 61 72 65 28 70 43  IdxKeyCompare(pC
243d0 2c 20 26 72 2c 20 26 72 65 73 29 3b 0a 20 20 20  , &r, &res);.   
243e0 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65   if( pOp->opcode
243f0 3d 3d 4f 50 5f 49 64 78 4c 54 20 29 7b 0a 20 20  ==OP_IdxLT ){.  
24400 20 20 20 20 72 65 73 20 3d 20 2d 72 65 73 3b 0a      res = -res;.
24410 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
24420 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70   assert( pOp->op
24430 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 45 20 29  code==OP_IdxGE )
24440 3b 0a 20 20 20 20 20 20 72 65 73 2b 2b 3b 0a 20  ;.      res++;. 
24450 20 20 20 7d 0a 20 20 20 20 69 66 28 20 72 65 73     }.    if( res
24460 3e 30 20 29 7b 0a 20 20 20 20 20 20 70 63 20 3d  >0 ){.      pc =
24470 20 70 4f 70 2d 3e 70 32 20 2d 20 31 20 3b 0a 20   pOp->p2 - 1 ;. 
24480 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b     }.  }.  break
24490 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
244a0 44 65 73 74 72 6f 79 20 50 31 20 50 32 20 50 33  Destroy P1 P2 P3
244b0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74   * *.**.** Delet
244c0 65 20 61 6e 20 65 6e 74 69 72 65 20 64 61 74 61  e an entire data
244d0 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20 69 6e  base table or in
244e0 64 65 78 20 77 68 6f 73 65 20 72 6f 6f 74 20 70  dex whose root p
244f0 61 67 65 20 69 6e 20 74 68 65 20 64 61 74 61 62  age in the datab
24500 61 73 65 0a 2a 2a 20 66 69 6c 65 20 69 73 20 67  ase.** file is g
24510 69 76 65 6e 20 62 79 20 50 31 2e 0a 2a 2a 0a 2a  iven by P1..**.*
24520 2a 20 54 68 65 20 74 61 62 6c 65 20 62 65 69 6e  * The table bein
24530 67 20 64 65 73 74 72 6f 79 65 64 20 69 73 20 69  g destroyed is i
24540 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  n the main datab
24550 61 73 65 20 66 69 6c 65 20 69 66 20 50 33 3d 3d  ase file if P3==
24560 30 2e 20 20 49 66 0a 2a 2a 20 50 33 3d 3d 31 20  0.  If.** P3==1 
24570 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20 74  then the table t
24580 6f 20 62 65 20 63 6c 65 61 72 20 69 73 20 69 6e  o be clear is in
24590 20 74 68 65 20 61 75 78 69 6c 69 61 72 79 20 64   the auxiliary d
245a0 61 74 61 62 61 73 65 20 66 69 6c 65 0a 2a 2a 20  atabase file.** 
245b0 74 68 61 74 20 69 73 20 75 73 65 64 20 74 6f 20  that is used to 
245c0 73 74 6f 72 65 20 74 61 62 6c 65 73 20 63 72 65  store tables cre
245d0 61 74 65 20 75 73 69 6e 67 20 43 52 45 41 54 45  ate using CREATE
245e0 20 54 45 4d 50 4f 52 41 52 59 20 54 41 42 4c 45   TEMPORARY TABLE
245f0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 41 55 54 4f 56  ..**.** If AUTOV
24600 41 43 55 55 4d 20 69 73 20 65 6e 61 62 6c 65 64  ACUUM is enabled
24610 20 74 68 65 6e 20 69 74 20 69 73 20 70 6f 73 73   then it is poss
24620 69 62 6c 65 20 74 68 61 74 20 61 6e 6f 74 68 65  ible that anothe
24630 72 20 72 6f 6f 74 20 70 61 67 65 0a 2a 2a 20 6d  r root page.** m
24640 69 67 68 74 20 62 65 20 6d 6f 76 65 64 20 69 6e  ight be moved in
24650 74 6f 20 74 68 65 20 6e 65 77 6c 79 20 64 65 6c  to the newly del
24660 65 74 65 64 20 72 6f 6f 74 20 70 61 67 65 20 69  eted root page i
24670 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65 70 20  n order to keep 
24680 61 6c 6c 0a 2a 2a 20 72 6f 6f 74 20 70 61 67 65  all.** root page
24690 73 20 63 6f 6e 74 69 67 75 6f 75 73 20 61 74 20  s contiguous at 
246a0 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66  the beginning of
246b0 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 20 20   the database.  
246c0 54 68 65 20 66 6f 72 6d 65 72 0a 2a 2a 20 76 61  The former.** va
246d0 6c 75 65 20 6f 66 20 74 68 65 20 72 6f 6f 74 20  lue of the root 
246e0 70 61 67 65 20 74 68 61 74 20 6d 6f 76 65 64 20  page that moved 
246f0 2d 20 69 74 73 20 76 61 6c 75 65 20 62 65 66 6f  - its value befo
24700 72 65 20 74 68 65 20 6d 6f 76 65 20 6f 63 63 75  re the move occu
24710 72 72 65 64 20 2d 0a 2a 2a 20 69 73 20 73 74 6f  rred -.** is sto
24720 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20  red in register 
24730 50 32 2e 20 20 49 66 20 6e 6f 20 70 61 67 65 20  P2.  If no page 
24740 0a 2a 2a 20 6d 6f 76 65 6d 65 6e 74 20 77 61 73  .** movement was
24750 20 72 65 71 75 69 72 65 64 20 28 62 65 63 61 75   required (becau
24760 73 65 20 74 68 65 20 74 61 62 6c 65 20 62 65 69  se the table bei
24770 6e 67 20 64 72 6f 70 70 65 64 20 77 61 73 20 61  ng dropped was a
24780 6c 72 65 61 64 79 20 0a 2a 2a 20 74 68 65 20 6c  lready .** the l
24790 61 73 74 20 6f 6e 65 20 69 6e 20 74 68 65 20 64  ast one in the d
247a0 61 74 61 62 61 73 65 29 20 74 68 65 6e 20 61 20  atabase) then a 
247b0 7a 65 72 6f 20 69 73 20 73 74 6f 72 65 64 20 69  zero is stored i
247c0 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  n register P2..*
247d0 2a 20 49 66 20 41 55 54 4f 56 41 43 55 55 4d 20  * If AUTOVACUUM 
247e0 69 73 20 64 69 73 61 62 6c 65 64 20 74 68 65 6e  is disabled then
247f0 20 61 20 7a 65 72 6f 20 69 73 20 73 74 6f 72 65   a zero is store
24800 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  d in register P2
24810 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
24820 3a 20 43 6c 65 61 72 0a 2a 2f 0a 63 61 73 65 20  : Clear.*/.case 
24830 4f 50 5f 44 65 73 74 72 6f 79 3a 20 7b 20 20 20  OP_Destroy: {   
24840 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c    /* out2-prerel
24850 65 61 73 65 20 2a 2f 0a 20 20 69 6e 74 20 69 4d  ease */.  int iM
24860 6f 76 65 64 3b 0a 20 20 69 6e 74 20 69 43 6e 74  oved;.  int iCnt
24870 3b 0a 20 20 56 64 62 65 20 2a 70 56 64 62 65 3b  ;.  Vdbe *pVdbe;
24880 0a 20 20 69 6e 74 20 69 44 62 3b 0a 23 69 66 6e  .  int iDb;.#ifn
24890 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
248a0 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 69  VIRTUALTABLE.  i
248b0 43 6e 74 20 3d 20 30 3b 0a 20 20 66 6f 72 28 70  Cnt = 0;.  for(p
248c0 56 64 62 65 3d 64 62 2d 3e 70 56 64 62 65 3b 20  Vdbe=db->pVdbe; 
248d0 70 56 64 62 65 3b 20 70 56 64 62 65 20 3d 20 70  pVdbe; pVdbe = p
248e0 56 64 62 65 2d 3e 70 4e 65 78 74 29 7b 0a 20 20  Vdbe->pNext){.  
248f0 20 20 69 66 28 20 70 56 64 62 65 2d 3e 6d 61 67    if( pVdbe->mag
24900 69 63 3d 3d 56 44 42 45 5f 4d 41 47 49 43 5f 52  ic==VDBE_MAGIC_R
24910 55 4e 20 26 26 20 70 56 64 62 65 2d 3e 69 6e 56  UN && pVdbe->inV
24920 74 61 62 4d 65 74 68 6f 64 3c 32 20 26 26 20 70  tabMethod<2 && p
24930 56 64 62 65 2d 3e 70 63 3e 3d 30 20 29 7b 0a 20  Vdbe->pc>=0 ){. 
24940 20 20 20 20 20 69 43 6e 74 2b 2b 3b 0a 20 20 20       iCnt++;.   
24950 20 7d 0a 20 20 7d 0a 23 65 6c 73 65 0a 20 20 69   }.  }.#else.  i
24960 43 6e 74 20 3d 20 64 62 2d 3e 61 63 74 69 76 65  Cnt = db->active
24970 56 64 62 65 43 6e 74 3b 0a 23 65 6e 64 69 66 0a  VdbeCnt;.#endif.
24980 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20    pOut->flags = 
24990 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 69 66 28 20  MEM_Null;.  if( 
249a0 69 43 6e 74 3e 31 20 29 7b 0a 20 20 20 20 72 63  iCnt>1 ){.    rc
249b0 20 3d 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44   = SQLITE_LOCKED
249c0 3b 0a 20 20 20 20 70 2d 3e 65 72 72 6f 72 41 63  ;.    p->errorAc
249d0 74 69 6f 6e 20 3d 20 4f 45 5f 41 62 6f 72 74 3b  tion = OE_Abort;
249e0 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69 44  .  }else{.    iD
249f0 62 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 20  b = pOp->p3;.   
24a00 20 61 73 73 65 72 74 28 20 69 43 6e 74 3d 3d 31   assert( iCnt==1
24a10 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
24a20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20  (p->btreeMask & 
24a30 28 28 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c 69  (((yDbMask)1)<<i
24a40 44 62 29 29 21 3d 30 20 29 3b 0a 20 20 20 20 72  Db))!=0 );.    r
24a50 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
24a60 44 72 6f 70 54 61 62 6c 65 28 64 62 2d 3e 61 44  DropTable(db->aD
24a70 62 5b 69 44 62 5d 2e 70 42 74 2c 20 70 4f 70 2d  b[iDb].pBt, pOp-
24a80 3e 70 31 2c 20 26 69 4d 6f 76 65 64 29 3b 0a 20  >p1, &iMoved);. 
24a90 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d     pOut->flags =
24aa0 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 70 4f   MEM_Int;.    pO
24ab0 75 74 2d 3e 75 2e 69 20 3d 20 69 4d 6f 76 65 64  ut->u.i = iMoved
24ac0 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
24ad0 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d  _OMIT_AUTOVACUUM
24ae0 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  .    if( rc==SQL
24af0 49 54 45 5f 4f 4b 20 26 26 20 69 4d 6f 76 65 64  ITE_OK && iMoved
24b00 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  !=0 ){.      sql
24b10 69 74 65 33 52 6f 6f 74 50 61 67 65 4d 6f 76 65  ite3RootPageMove
24b20 64 28 64 62 2c 20 69 44 62 2c 20 69 4d 6f 76 65  d(db, iDb, iMove
24b30 64 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 20  d, pOp->p1);.   
24b40 20 20 20 2f 2a 20 41 6c 6c 20 4f 50 5f 44 65 73     /* All OP_Des
24b50 74 72 6f 79 20 6f 70 65 72 61 74 69 6f 6e 73 20  troy operations 
24b60 6f 63 63 75 72 20 6f 6e 20 74 68 65 20 73 61 6d  occur on the sam
24b70 65 20 62 74 72 65 65 20 2a 2f 0a 20 20 20 20 20  e btree */.     
24b80 20 61 73 73 65 72 74 28 20 72 65 73 65 74 53 63   assert( resetSc
24b90 68 65 6d 61 4f 6e 46 61 75 6c 74 3d 3d 30 20 7c  hemaOnFault==0 |
24ba0 7c 20 72 65 73 65 74 53 63 68 65 6d 61 4f 6e 46  | resetSchemaOnF
24bb0 61 75 6c 74 3d 3d 69 44 62 2b 31 20 29 3b 0a 20  ault==iDb+1 );. 
24bc0 20 20 20 20 20 72 65 73 65 74 53 63 68 65 6d 61       resetSchema
24bd0 4f 6e 46 61 75 6c 74 20 3d 20 69 44 62 2b 31 3b  OnFault = iDb+1;
24be0 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20  .    }.#endif.  
24bf0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
24c00 20 4f 70 63 6f 64 65 3a 20 43 6c 65 61 72 20 50   Opcode: Clear P
24c10 31 20 50 32 20 50 33 0a 2a 2a 0a 2a 2a 20 44 65  1 P2 P3.**.** De
24c20 6c 65 74 65 20 61 6c 6c 20 63 6f 6e 74 65 6e 74  lete all content
24c30 73 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  s of the databas
24c40 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  e table or index
24c50 20 77 68 6f 73 65 20 72 6f 6f 74 20 70 61 67 65   whose root page
24c60 0a 2a 2a 20 69 6e 20 74 68 65 20 64 61 74 61 62  .** in the datab
24c70 61 73 65 20 66 69 6c 65 20 69 73 20 67 69 76 65  ase file is give
24c80 6e 20 62 79 20 50 31 2e 20 20 42 75 74 2c 20 75  n by P1.  But, u
24c90 6e 6c 69 6b 65 20 44 65 73 74 72 6f 79 2c 20 64  nlike Destroy, d
24ca0 6f 20 6e 6f 74 0a 2a 2a 20 72 65 6d 6f 76 65 20  o not.** remove 
24cb0 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  the table or ind
24cc0 65 78 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61  ex from the data
24cd0 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a  base file..**.**
24ce0 20 54 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67   The table being
24cf0 20 63 6c 65 61 72 20 69 73 20 69 6e 20 74 68 65   clear is in the
24d00 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66   main database f
24d10 69 6c 65 20 69 66 20 50 32 3d 3d 30 2e 20 20 49  ile if P2==0.  I
24d20 66 0a 2a 2a 20 50 32 3d 3d 31 20 74 68 65 6e 20  f.** P2==1 then 
24d30 74 68 65 20 74 61 62 6c 65 20 74 6f 20 62 65 20  the table to be 
24d40 63 6c 65 61 72 20 69 73 20 69 6e 20 74 68 65 20  clear is in the 
24d50 61 75 78 69 6c 69 61 72 79 20 64 61 74 61 62 61  auxiliary databa
24d60 73 65 20 66 69 6c 65 0a 2a 2a 20 74 68 61 74 20  se file.** that 
24d70 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65  is used to store
24d80 20 74 61 62 6c 65 73 20 63 72 65 61 74 65 20 75   tables create u
24d90 73 69 6e 67 20 43 52 45 41 54 45 20 54 45 4d 50  sing CREATE TEMP
24da0 4f 52 41 52 59 20 54 41 42 4c 45 2e 0a 2a 2a 0a  ORARY TABLE..**.
24db0 2a 2a 20 49 66 20 74 68 65 20 50 33 20 76 61 6c  ** If the P3 val
24dc0 75 65 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20  ue is non-zero, 
24dd0 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20 72  then the table r
24de0 65 66 65 72 72 65 64 20 74 6f 20 6d 75 73 74 20  eferred to must 
24df0 62 65 20 61 6e 0a 2a 2a 20 69 6e 74 6b 65 79 20  be an.** intkey 
24e00 74 61 62 6c 65 20 28 61 6e 20 53 51 4c 20 74 61  table (an SQL ta
24e10 62 6c 65 2c 20 6e 6f 74 20 61 6e 20 69 6e 64 65  ble, not an inde
24e20 78 29 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65  x). In this case
24e30 20 74 68 65 20 72 6f 77 20 63 68 61 6e 67 65 20   the row change 
24e40 0a 2a 2a 20 63 6f 75 6e 74 20 69 73 20 69 6e 63  .** count is inc
24e50 72 65 6d 65 6e 74 65 64 20 62 79 20 74 68 65 20  remented by the 
24e60 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69  number of rows i
24e70 6e 20 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e  n the table bein
24e80 67 20 63 6c 65 61 72 65 64 2e 20 0a 2a 2a 20 49  g cleared. .** I
24e90 66 20 50 33 20 69 73 20 67 72 65 61 74 65 72 20  f P3 is greater 
24ea0 74 68 61 6e 20 7a 65 72 6f 2c 20 74 68 65 6e 20  than zero, then 
24eb0 74 68 65 20 76 61 6c 75 65 20 73 74 6f 72 65 64  the value stored
24ec0 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20   in register P3 
24ed0 69 73 0a 2a 2a 20 61 6c 73 6f 20 69 6e 63 72 65  is.** also incre
24ee0 6d 65 6e 74 65 64 20 62 79 20 74 68 65 20 6e 75  mented by the nu
24ef0 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20  mber of rows in 
24f00 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20  the table being 
24f10 63 6c 65 61 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 53  cleared..**.** S
24f20 65 65 20 61 6c 73 6f 3a 20 44 65 73 74 72 6f 79  ee also: Destroy
24f30 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6c 65 61  .*/.case OP_Clea
24f40 72 3a 20 7b 0a 20 20 69 6e 74 20 6e 43 68 61 6e  r: {.  int nChan
24f50 67 65 3b 0a 20 0a 20 20 6e 43 68 61 6e 67 65 20  ge;. .  nChange 
24f60 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20 28  = 0;.  assert( (
24f70 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28  p->btreeMask & (
24f80 28 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c 70 4f  ((yDbMask)1)<<pO
24f90 70 2d 3e 70 32 29 29 21 3d 30 20 29 3b 0a 20 20  p->p2))!=0 );.  
24fa0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
24fb0 65 43 6c 65 61 72 54 61 62 6c 65 28 0a 20 20 20  eClearTable(.   
24fc0 20 20 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e     db->aDb[pOp->
24fd0 70 32 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 31  p2].pBt, pOp->p1
24fe0 2c 20 28 70 4f 70 2d 3e 70 33 20 3f 20 26 6e 43  , (pOp->p3 ? &nC
24ff0 68 61 6e 67 65 20 3a 20 30 29 0a 20 20 29 3b 0a  hange : 0).  );.
25000 20 20 69 66 28 20 70 4f 70 2d 3e 70 33 20 29 7b    if( pOp->p3 ){
25010 0a 20 20 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20  .    p->nChange 
25020 2b 3d 20 6e 43 68 61 6e 67 65 3b 0a 20 20 20 20  += nChange;.    
25030 69 66 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 7b  if( pOp->p3>0 ){
25040 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d  .      assert( m
25050 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b  emIsValid(&aMem[
25060 70 4f 70 2d 3e 70 33 5d 29 20 29 3b 0a 20 20 20  pOp->p3]) );.   
25070 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61     memAboutToCha
25080 6e 67 65 28 70 2c 20 26 61 4d 65 6d 5b 70 4f 70  nge(p, &aMem[pOp
25090 2d 3e 70 33 5d 29 3b 0a 20 20 20 20 20 20 61 4d  ->p3]);.      aM
250a0 65 6d 5b 70 4f 70 2d 3e 70 33 5d 2e 75 2e 69 20  em[pOp->p3].u.i 
250b0 2b 3d 20 6e 43 68 61 6e 67 65 3b 0a 20 20 20 20  += nChange;.    
250c0 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  }.  }.  break;.}
250d0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 72 65  ../* Opcode: Cre
250e0 61 74 65 54 61 62 6c 65 20 50 31 20 50 32 20 2a  ateTable P1 P2 *
250f0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 6c 6c 6f 63   * *.**.** Alloc
25100 61 74 65 20 61 20 6e 65 77 20 74 61 62 6c 65 20  ate a new table 
25110 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  in the main data
25120 62 61 73 65 20 66 69 6c 65 20 69 66 20 50 31 3d  base file if P1=
25130 3d 30 20 6f 72 20 69 6e 20 74 68 65 0a 2a 2a 20  =0 or in the.** 
25140 61 75 78 69 6c 69 61 72 79 20 64 61 74 61 62 61  auxiliary databa
25150 73 65 20 66 69 6c 65 20 69 66 20 50 31 3d 3d 31  se file if P1==1
25160 20 6f 72 20 69 6e 20 61 6e 20 61 74 74 61 63 68   or in an attach
25170 65 64 20 64 61 74 61 62 61 73 65 20 69 66 0a 2a  ed database if.*
25180 2a 20 50 31 3e 31 2e 20 20 57 72 69 74 65 20 74  * P1>1.  Write t
25190 68 65 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d  he root page num
251a0 62 65 72 20 6f 66 20 74 68 65 20 6e 65 77 20 74  ber of the new t
251b0 61 62 6c 65 20 69 6e 74 6f 0a 2a 2a 20 72 65 67  able into.** reg
251c0 69 73 74 65 72 20 50 32 0a 2a 2a 0a 2a 2a 20 54  ister P2.**.** T
251d0 68 65 20 64 69 66 66 65 72 65 6e 63 65 20 62 65  he difference be
251e0 74 77 65 65 6e 20 61 20 74 61 62 6c 65 20 61 6e  tween a table an
251f0 64 20 61 6e 20 69 6e 64 65 78 20 69 73 20 74 68  d an index is th
25200 69 73 3a 20 20 41 20 74 61 62 6c 65 20 6d 75 73  is:  A table mus
25210 74 0a 2a 2a 20 68 61 76 65 20 61 20 34 2d 62 79  t.** have a 4-by
25220 74 65 20 69 6e 74 65 67 65 72 20 6b 65 79 20 61  te integer key a
25230 6e 64 20 63 61 6e 20 68 61 76 65 20 61 72 62 69  nd can have arbi
25240 74 72 61 72 79 20 64 61 74 61 2e 20 20 41 6e 20  trary data.  An 
25250 69 6e 64 65 78 0a 2a 2a 20 68 61 73 20 61 6e 20  index.** has an 
25260 61 72 62 69 74 72 61 72 79 20 6b 65 79 20 62 75  arbitrary key bu
25270 74 20 6e 6f 20 64 61 74 61 2e 0a 2a 2a 0a 2a 2a  t no data..**.**
25280 20 53 65 65 20 61 6c 73 6f 3a 20 43 72 65 61 74   See also: Creat
25290 65 49 6e 64 65 78 0a 2a 2f 0a 2f 2a 20 4f 70 63  eIndex.*/./* Opc
252a0 6f 64 65 3a 20 43 72 65 61 74 65 49 6e 64 65 78  ode: CreateIndex
252b0 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
252c0 2a 2a 20 41 6c 6c 6f 63 61 74 65 20 61 20 6e 65  ** Allocate a ne
252d0 77 20 69 6e 64 65 78 20 69 6e 20 74 68 65 20 6d  w index in the m
252e0 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
252f0 65 20 69 66 20 50 31 3d 3d 30 20 6f 72 20 69 6e  e if P1==0 or in
25300 20 74 68 65 0a 2a 2a 20 61 75 78 69 6c 69 61 72   the.** auxiliar
25310 79 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  y database file 
25320 69 66 20 50 31 3d 3d 31 20 6f 72 20 69 6e 20 61  if P1==1 or in a
25330 6e 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62  n attached datab
25340 61 73 65 20 69 66 0a 2a 2a 20 50 31 3e 31 2e 20  ase if.** P1>1. 
25350 20 57 72 69 74 65 20 74 68 65 20 72 6f 6f 74 20   Write the root 
25360 70 61 67 65 20 6e 75 6d 62 65 72 20 6f 66 20 74  page number of t
25370 68 65 20 6e 65 77 20 74 61 62 6c 65 20 69 6e 74  he new table int
25380 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 32  o.** register P2
25390 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 64 6f 63 75  ..**.** See docu
253a0 6d 65 6e 74 61 74 69 6f 6e 20 6f 6e 20 4f 50 5f  mentation on OP_
253b0 43 72 65 61 74 65 54 61 62 6c 65 20 66 6f 72 20  CreateTable for 
253c0 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72  additional infor
253d0 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20  mation..*/.case 
253e0 4f 50 5f 43 72 65 61 74 65 49 6e 64 65 78 3a 20  OP_CreateIndex: 
253f0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
25400 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f  t2-prerelease */
25410 0a 63 61 73 65 20 4f 50 5f 43 72 65 61 74 65 54  .case OP_CreateT
25420 61 62 6c 65 3a 20 7b 20 20 20 20 20 20 20 20 20  able: {         
25430 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65   /* out2-prerele
25440 61 73 65 20 2a 2f 0a 20 20 69 6e 74 20 70 67 6e  ase */.  int pgn
25450 6f 3b 0a 20 20 69 6e 74 20 66 6c 61 67 73 3b 0a  o;.  int flags;.
25460 20 20 44 62 20 2a 70 44 62 3b 0a 0a 20 20 70 67    Db *pDb;..  pg
25470 6e 6f 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74  no = 0;.  assert
25480 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
25490 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20  pOp->p1<db->nDb 
254a0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d  );.  assert( (p-
254b0 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28 28 28  >btreeMask & (((
254c0 79 44 62 4d 61 73 6b 29 31 29 3c 3c 70 4f 70 2d  yDbMask)1)<<pOp-
254d0 3e 70 31 29 29 21 3d 30 20 29 3b 0a 20 20 70 44  >p1))!=0 );.  pD
254e0 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b 70 4f 70  b = &db->aDb[pOp
254f0 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
25500 20 70 44 62 2d 3e 70 42 74 21 3d 30 20 29 3b 0a   pDb->pBt!=0 );.
25510 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64    if( pOp->opcod
25520 65 3d 3d 4f 50 5f 43 72 65 61 74 65 54 61 62 6c  e==OP_CreateTabl
25530 65 20 29 7b 0a 20 20 20 20 2f 2a 20 66 6c 61 67  e ){.    /* flag
25540 73 20 3d 20 42 54 52 45 45 5f 49 4e 54 4b 45 59  s = BTREE_INTKEY
25550 3b 20 2a 2f 0a 20 20 20 20 66 6c 61 67 73 20 3d  ; */.    flags =
25560 20 42 54 52 45 45 5f 49 4e 54 4b 45 59 3b 0a 20   BTREE_INTKEY;. 
25570 20 7d 65 6c 73 65 7b 0a 20 20 20 20 66 6c 61 67   }else{.    flag
25580 73 20 3d 20 42 54 52 45 45 5f 42 4c 4f 42 4b 45  s = BTREE_BLOBKE
25590 59 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71  Y;.  }.  rc = sq
255a0 6c 69 74 65 33 42 74 72 65 65 43 72 65 61 74 65  lite3BtreeCreate
255b0 54 61 62 6c 65 28 70 44 62 2d 3e 70 42 74 2c 20  Table(pDb->pBt, 
255c0 26 70 67 6e 6f 2c 20 66 6c 61 67 73 29 3b 0a 20  &pgno, flags);. 
255d0 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 67 6e   pOut->u.i = pgn
255e0 6f 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  o;.  break;.}../
255f0 2a 20 4f 70 63 6f 64 65 3a 20 50 61 72 73 65 53  * Opcode: ParseS
25600 63 68 65 6d 61 20 50 31 20 2a 20 2a 20 50 34 20  chema P1 * * P4 
25610 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 61 6e 64  *.**.** Read and
25620 20 70 61 72 73 65 20 61 6c 6c 20 65 6e 74 72 69   parse all entri
25630 65 73 20 66 72 6f 6d 20 74 68 65 20 53 51 4c 49  es from the SQLI
25640 54 45 5f 4d 41 53 54 45 52 20 74 61 62 6c 65 20  TE_MASTER table 
25650 6f 66 20 64 61 74 61 62 61 73 65 20 50 31 0a 2a  of database P1.*
25660 2a 20 74 68 61 74 20 6d 61 74 63 68 20 74 68 65  * that match the
25670 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 50 34   WHERE clause P4
25680 2e 20 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  . .**.** This op
25690 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74 68 65  code invokes the
256a0 20 70 61 72 73 65 72 20 74 6f 20 63 72 65 61 74   parser to creat
256b0 65 20 61 20 6e 65 77 20 76 69 72 74 75 61 6c 20  e a new virtual 
256c0 6d 61 63 68 69 6e 65 2c 0a 2a 2a 20 74 68 65 6e  machine,.** then
256d0 20 72 75 6e 73 20 74 68 65 20 6e 65 77 20 76 69   runs the new vi
256e0 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 2e 20 20  rtual machine.  
256f0 49 74 20 69 73 20 74 68 75 73 20 61 20 72 65 2d  It is thus a re-
25700 65 6e 74 72 61 6e 74 20 6f 70 63 6f 64 65 2e 0a  entrant opcode..
25710 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 61 72 73 65  */.case OP_Parse
25720 53 63 68 65 6d 61 3a 20 7b 0a 20 20 69 6e 74 20  Schema: {.  int 
25730 69 44 62 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61  iDb;.  const cha
25740 72 20 2a 7a 4d 61 73 74 65 72 3b 0a 20 20 63 68  r *zMaster;.  ch
25750 61 72 20 2a 7a 53 71 6c 3b 0a 20 20 49 6e 69 74  ar *zSql;.  Init
25760 44 61 74 61 20 69 6e 69 74 44 61 74 61 3b 0a 0a  Data initData;..
25770 20 20 2f 2a 20 41 6e 79 20 70 72 65 70 61 72 65    /* Any prepare
25780 64 20 73 74 61 74 65 6d 65 6e 74 20 74 68 61 74  d statement that
25790 20 69 6e 76 6f 6b 65 73 20 74 68 69 73 20 6f 70   invokes this op
257a0 63 6f 64 65 20 77 69 6c 6c 20 68 6f 6c 64 20 6d  code will hold m
257b0 75 74 65 78 65 73 0a 20 20 2a 2a 20 6f 6e 20 65  utexes.  ** on e
257c0 76 65 72 79 20 62 74 72 65 65 2e 20 20 54 68 69  very btree.  Thi
257d0 73 20 69 73 20 61 20 70 72 65 72 65 71 75 69 73  s is a prerequis
257e0 69 74 65 20 66 6f 72 20 69 6e 76 6f 6b 69 6e 67  ite for invoking
257f0 20 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 49 6e   .  ** sqlite3In
25800 69 74 43 61 6c 6c 62 61 63 6b 28 29 2e 0a 20 20  itCallback()..  
25810 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
25820 5f 44 45 42 55 47 0a 20 20 66 6f 72 28 69 44 62  _DEBUG.  for(iDb
25830 3d 30 3b 20 69 44 62 3c 64 62 2d 3e 6e 44 62 3b  =0; iDb<db->nDb;
25840 20 69 44 62 2b 2b 29 7b 0a 20 20 20 20 61 73 73   iDb++){.    ass
25850 65 72 74 28 20 69 44 62 3d 3d 31 20 7c 7c 20 73  ert( iDb==1 || s
25860 71 6c 69 74 65 33 42 74 72 65 65 48 6f 6c 64 73  qlite3BtreeHolds
25870 4d 75 74 65 78 28 64 62 2d 3e 61 44 62 5b 69 44  Mutex(db->aDb[iD
25880 62 5d 2e 70 42 74 29 20 29 3b 0a 20 20 7d 0a 23  b].pBt) );.  }.#
25890 65 6e 64 69 66 0a 0a 20 20 69 44 62 20 3d 20 70  endif..  iDb = p
258a0 4f 70 2d 3e 70 31 3b 0a 20 20 61 73 73 65 72 74  Op->p1;.  assert
258b0 28 20 69 44 62 3e 3d 30 20 26 26 20 69 44 62 3c  ( iDb>=0 && iDb<
258c0 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73  db->nDb );.  ass
258d0 65 72 74 28 20 44 62 48 61 73 50 72 6f 70 65 72  ert( DbHasProper
258e0 74 79 28 64 62 2c 20 69 44 62 2c 20 44 42 5f 53  ty(db, iDb, DB_S
258f0 63 68 65 6d 61 4c 6f 61 64 65 64 29 20 29 3b 0a  chemaLoaded) );.
25900 20 20 2f 2a 20 55 73 65 64 20 74 6f 20 62 65 20    /* Used to be 
25910 61 20 63 6f 6e 64 69 74 69 6f 6e 61 6c 20 2a 2f  a conditional */
25920 20 7b 0a 20 20 20 20 7a 4d 61 73 74 65 72 20 3d   {.    zMaster =
25930 20 53 43 48 45 4d 41 5f 54 41 42 4c 45 28 69 44   SCHEMA_TABLE(iD
25940 62 29 3b 0a 20 20 20 20 69 6e 69 74 44 61 74 61  b);.    initData
25950 2e 64 62 20 3d 20 64 62 3b 0a 20 20 20 20 69 6e  .db = db;.    in
25960 69 74 44 61 74 61 2e 69 44 62 20 3d 20 70 4f 70  itData.iDb = pOp
25970 2d 3e 70 31 3b 0a 20 20 20 20 69 6e 69 74 44 61  ->p1;.    initDa
25980 74 61 2e 70 7a 45 72 72 4d 73 67 20 3d 20 26 70  ta.pzErrMsg = &p
25990 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20 20 20 20 7a  ->zErrMsg;.    z
259a0 53 71 6c 20 3d 20 73 71 6c 69 74 65 33 4d 50 72  Sql = sqlite3MPr
259b0 69 6e 74 66 28 64 62 2c 0a 20 20 20 20 20 20 20  intf(db,.       
259c0 22 53 45 4c 45 43 54 20 6e 61 6d 65 2c 20 72 6f  "SELECT name, ro
259d0 6f 74 70 61 67 65 2c 20 73 71 6c 20 46 52 4f 4d  otpage, sql FROM
259e0 20 27 25 71 27 2e 25 73 20 57 48 45 52 45 20 25   '%q'.%s WHERE %
259f0 73 20 4f 52 44 45 52 20 42 59 20 72 6f 77 69 64  s ORDER BY rowid
25a00 22 2c 0a 20 20 20 20 20 20 20 64 62 2d 3e 61 44  ",.       db->aD
25a10 62 5b 69 44 62 5d 2e 7a 4e 61 6d 65 2c 20 7a 4d  b[iDb].zName, zM
25a20 61 73 74 65 72 2c 20 70 4f 70 2d 3e 70 34 2e 7a  aster, pOp->p4.z
25a30 29 3b 0a 20 20 20 20 69 66 28 20 7a 53 71 6c 3d  );.    if( zSql=
25a40 3d 30 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d  =0 ){.      rc =
25a50 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20   SQLITE_NOMEM;. 
25a60 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
25a70 61 73 73 65 72 74 28 20 64 62 2d 3e 69 6e 69 74  assert( db->init
25a80 2e 62 75 73 79 3d 3d 30 20 29 3b 0a 20 20 20 20  .busy==0 );.    
25a90 20 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20    db->init.busy 
25aa0 3d 20 31 3b 0a 20 20 20 20 20 20 69 6e 69 74 44  = 1;.      initD
25ab0 61 74 61 2e 72 63 20 3d 20 53 51 4c 49 54 45 5f  ata.rc = SQLITE_
25ac0 4f 4b 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  OK;.      assert
25ad0 28 20 21 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69  ( !db->mallocFai
25ae0 6c 65 64 20 29 3b 0a 20 20 20 20 20 20 72 63 20  led );.      rc 
25af0 3d 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28 64  = sqlite3_exec(d
25b00 62 2c 20 7a 53 71 6c 2c 20 73 71 6c 69 74 65 33  b, zSql, sqlite3
25b10 49 6e 69 74 43 61 6c 6c 62 61 63 6b 2c 20 26 69  InitCallback, &i
25b20 6e 69 74 44 61 74 61 2c 20 30 29 3b 0a 20 20 20  nitData, 0);.   
25b30 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54     if( rc==SQLIT
25b40 45 5f 4f 4b 20 29 20 72 63 20 3d 20 69 6e 69 74  E_OK ) rc = init
25b50 44 61 74 61 2e 72 63 3b 0a 20 20 20 20 20 20 73  Data.rc;.      s
25b60 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c  qlite3DbFree(db,
25b70 20 7a 53 71 6c 29 3b 0a 20 20 20 20 20 20 64 62   zSql);.      db
25b80 2d 3e 69 6e 69 74 2e 62 75 73 79 20 3d 20 30 3b  ->init.busy = 0;
25b90 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28  .    }.  }.  if(
25ba0 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4e 4f 4d 45   rc==SQLITE_NOME
25bb0 4d 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f  M ){.    goto no
25bc0 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 62 72 65 61  _mem;.  }.  brea
25bd0 6b 3b 20 20 0a 7d 0a 0a 23 69 66 20 21 64 65 66  k;  .}..#if !def
25be0 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
25bf0 5f 41 4e 41 4c 59 5a 45 29 0a 2f 2a 20 4f 70 63  _ANALYZE)./* Opc
25c00 6f 64 65 3a 20 4c 6f 61 64 41 6e 61 6c 79 73 69  ode: LoadAnalysi
25c10 73 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a  s P1 * * * *.**.
25c20 2a 2a 20 52 65 61 64 20 74 68 65 20 73 71 6c 69  ** Read the sqli
25c30 74 65 5f 73 74 61 74 31 20 74 61 62 6c 65 20 66  te_stat1 table f
25c40 6f 72 20 64 61 74 61 62 61 73 65 20 50 31 20 61  or database P1 a
25c50 6e 64 20 6c 6f 61 64 20 74 68 65 20 63 6f 6e 74  nd load the cont
25c60 65 6e 74 0a 2a 2a 20 6f 66 20 74 68 61 74 20 74  ent.** of that t
25c70 61 62 6c 65 20 69 6e 74 6f 20 74 68 65 20 69 6e  able into the in
25c80 74 65 72 6e 61 6c 20 69 6e 64 65 78 20 68 61 73  ternal index has
25c90 68 20 74 61 62 6c 65 2e 20 20 54 68 69 73 20 77  h table.  This w
25ca0 69 6c 6c 20 63 61 75 73 65 0a 2a 2a 20 74 68 65  ill cause.** the
25cb0 20 61 6e 61 6c 79 73 69 73 20 74 6f 20 62 65 20   analysis to be 
25cc0 75 73 65 64 20 77 68 65 6e 20 70 72 65 70 61 72  used when prepar
25cd0 69 6e 67 20 61 6c 6c 20 73 75 62 73 65 71 75 65  ing all subseque
25ce0 6e 74 20 71 75 65 72 69 65 73 2e 0a 2a 2f 0a 63  nt queries..*/.c
25cf0 61 73 65 20 4f 50 5f 4c 6f 61 64 41 6e 61 6c 79  ase OP_LoadAnaly
25d00 73 69 73 3a 20 7b 0a 20 20 61 73 73 65 72 74 28  sis: {.  assert(
25d10 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
25d20 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29  Op->p1<db->nDb )
25d30 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
25d40 41 6e 61 6c 79 73 69 73 4c 6f 61 64 28 64 62 2c  AnalysisLoad(db,
25d50 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 62 72 65   pOp->p1);.  bre
25d60 61 6b 3b 20 20 0a 7d 0a 23 65 6e 64 69 66 20 2f  ak;  .}.#endif /
25d70 2a 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  * !defined(SQLIT
25d80 45 5f 4f 4d 49 54 5f 41 4e 41 4c 59 5a 45 29 20  E_OMIT_ANALYZE) 
25d90 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44  */../* Opcode: D
25da0 72 6f 70 54 61 62 6c 65 20 50 31 20 2a 20 2a 20  ropTable P1 * * 
25db0 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76  P4 *.**.** Remov
25dc0 65 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 28  e the internal (
25dd0 69 6e 2d 6d 65 6d 6f 72 79 29 20 64 61 74 61 20  in-memory) data 
25de0 73 74 72 75 63 74 75 72 65 73 20 74 68 61 74 20  structures that 
25df0 64 65 73 63 72 69 62 65 0a 2a 2a 20 74 68 65 20  describe.** the 
25e00 74 61 62 6c 65 20 6e 61 6d 65 64 20 50 34 20 69  table named P4 i
25e10 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e 20 20  n database P1.  
25e20 54 68 69 73 20 69 73 20 63 61 6c 6c 65 64 20 61  This is called a
25e30 66 74 65 72 20 61 20 74 61 62 6c 65 0a 2a 2a 20  fter a table.** 
25e40 69 73 20 64 72 6f 70 70 65 64 20 69 6e 20 6f 72  is dropped in or
25e50 64 65 72 20 74 6f 20 6b 65 65 70 20 74 68 65 20  der to keep the 
25e60 69 6e 74 65 72 6e 61 6c 20 72 65 70 72 65 73 65  internal represe
25e70 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a  ntation of the.*
25e80 2a 20 73 63 68 65 6d 61 20 63 6f 6e 73 69 73 74  * schema consist
25e90 65 6e 74 20 77 69 74 68 20 77 68 61 74 20 69 73  ent with what is
25ea0 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73   on disk..*/.cas
25eb0 65 20 4f 50 5f 44 72 6f 70 54 61 62 6c 65 3a 20  e OP_DropTable: 
25ec0 7b 0a 20 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e  {.  sqlite3Unlin
25ed0 6b 41 6e 64 44 65 6c 65 74 65 54 61 62 6c 65 28  kAndDeleteTable(
25ee0 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70  db, pOp->p1, pOp
25ef0 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62 72 65 61 6b  ->p4.z);.  break
25f00 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
25f10 44 72 6f 70 49 6e 64 65 78 20 50 31 20 2a 20 2a  DropIndex P1 * *
25f20 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f   P4 *.**.** Remo
25f30 76 65 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20  ve the internal 
25f40 28 69 6e 2d 6d 65 6d 6f 72 79 29 20 64 61 74 61  (in-memory) data
25f50 20 73 74 72 75 63 74 75 72 65 73 20 74 68 61 74   structures that
25f60 20 64 65 73 63 72 69 62 65 0a 2a 2a 20 74 68 65   describe.** the
25f70 20 69 6e 64 65 78 20 6e 61 6d 65 64 20 50 34 20   index named P4 
25f80 69 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e 20  in database P1. 
25f90 20 54 68 69 73 20 69 73 20 63 61 6c 6c 65 64 20   This is called 
25fa0 61 66 74 65 72 20 61 6e 20 69 6e 64 65 78 0a 2a  after an index.*
25fb0 2a 20 69 73 20 64 72 6f 70 70 65 64 20 69 6e 20  * is dropped in 
25fc0 6f 72 64 65 72 20 74 6f 20 6b 65 65 70 20 74 68  order to keep th
25fd0 65 20 69 6e 74 65 72 6e 61 6c 20 72 65 70 72 65  e internal repre
25fe0 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65  sentation of the
25ff0 0a 2a 2a 20 73 63 68 65 6d 61 20 63 6f 6e 73 69  .** schema consi
26000 73 74 65 6e 74 20 77 69 74 68 20 77 68 61 74 20  stent with what 
26010 69 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63  is on disk..*/.c
26020 61 73 65 20 4f 50 5f 44 72 6f 70 49 6e 64 65 78  ase OP_DropIndex
26030 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 55 6e 6c  : {.  sqlite3Unl
26040 69 6e 6b 41 6e 64 44 65 6c 65 74 65 49 6e 64 65  inkAndDeleteInde
26050 78 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70  x(db, pOp->p1, p
26060 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62 72 65  Op->p4.z);.  bre
26070 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
26080 3a 20 44 72 6f 70 54 72 69 67 67 65 72 20 50 31  : DropTrigger P1
26090 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20   * * P4 *.**.** 
260a0 52 65 6d 6f 76 65 20 74 68 65 20 69 6e 74 65 72  Remove the inter
260b0 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79 29 20  nal (in-memory) 
260c0 64 61 74 61 20 73 74 72 75 63 74 75 72 65 73 20  data structures 
260d0 74 68 61 74 20 64 65 73 63 72 69 62 65 0a 2a 2a  that describe.**
260e0 20 74 68 65 20 74 72 69 67 67 65 72 20 6e 61 6d   the trigger nam
260f0 65 64 20 50 34 20 69 6e 20 64 61 74 61 62 61 73  ed P4 in databas
26100 65 20 50 31 2e 20 20 54 68 69 73 20 69 73 20 63  e P1.  This is c
26110 61 6c 6c 65 64 20 61 66 74 65 72 20 61 20 74 72  alled after a tr
26120 69 67 67 65 72 0a 2a 2a 20 69 73 20 64 72 6f 70  igger.** is drop
26130 70 65 64 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  ped in order to 
26140 6b 65 65 70 20 74 68 65 20 69 6e 74 65 72 6e 61  keep the interna
26150 6c 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  l representation
26160 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d   of the.** schem
26170 61 20 63 6f 6e 73 69 73 74 65 6e 74 20 77 69 74  a consistent wit
26180 68 20 77 68 61 74 20 69 73 20 6f 6e 20 64 69 73  h what is on dis
26190 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 72  k..*/.case OP_Dr
261a0 6f 70 54 72 69 67 67 65 72 3a 20 7b 0a 20 20 73  opTrigger: {.  s
261b0 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44  qlite3UnlinkAndD
261c0 65 6c 65 74 65 54 72 69 67 67 65 72 28 64 62 2c  eleteTrigger(db,
261d0 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70   pOp->p1, pOp->p
261e0 34 2e 7a 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  4.z);.  break;.}
261f0 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  ...#ifndef SQLIT
26200 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54 59  E_OMIT_INTEGRITY
26210 5f 43 48 45 43 4b 0a 2f 2a 20 4f 70 63 6f 64 65  _CHECK./* Opcode
26220 3a 20 49 6e 74 65 67 72 69 74 79 43 6b 20 50 31  : IntegrityCk P1
26230 20 50 32 20 50 33 20 2a 20 50 35 0a 2a 2a 0a 2a   P2 P3 * P5.**.*
26240 2a 20 44 6f 20 61 6e 20 61 6e 61 6c 79 73 69 73  * Do an analysis
26250 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74 6c   of the currentl
26260 79 20 6f 70 65 6e 20 64 61 74 61 62 61 73 65 2e  y open database.
26270 20 20 53 74 6f 72 65 20 69 6e 0a 2a 2a 20 72 65    Store in.** re
26280 67 69 73 74 65 72 20 50 31 20 74 68 65 20 74 65  gister P1 the te
26290 78 74 20 6f 66 20 61 6e 20 65 72 72 6f 72 20 6d  xt of an error m
262a0 65 73 73 61 67 65 20 64 65 73 63 72 69 62 69 6e  essage describin
262b0 67 20 61 6e 79 20 70 72 6f 62 6c 65 6d 73 2e 0a  g any problems..
262c0 2a 2a 20 49 66 20 6e 6f 20 70 72 6f 62 6c 65 6d  ** If no problem
262d0 73 20 61 72 65 20 66 6f 75 6e 64 2c 20 73 74 6f  s are found, sto
262e0 72 65 20 61 20 4e 55 4c 4c 20 69 6e 20 72 65 67  re a NULL in reg
262f0 69 73 74 65 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20  ister P1..**.** 
26300 54 68 65 20 72 65 67 69 73 74 65 72 20 50 33 20  The register P3 
26310 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 6d 61 78  contains the max
26320 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f 66 20 61  imum number of a
26330 6c 6c 6f 77 65 64 20 65 72 72 6f 72 73 2e 0a 2a  llowed errors..*
26340 2a 20 41 74 20 6d 6f 73 74 20 72 65 67 28 50 33  * At most reg(P3
26350 29 20 65 72 72 6f 72 73 20 77 69 6c 6c 20 62 65  ) errors will be
26360 20 72 65 70 6f 72 74 65 64 2e 0a 2a 2a 20 49 6e   reported..** In
26370 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68   other words, th
26380 65 20 61 6e 61 6c 79 73 69 73 20 73 74 6f 70 73  e analysis stops
26390 20 61 73 20 73 6f 6f 6e 20 61 73 20 72 65 67 28   as soon as reg(
263a0 50 31 29 20 65 72 72 6f 72 73 20 61 72 65 20 0a  P1) errors are .
263b0 2a 2a 20 73 65 65 6e 2e 20 20 52 65 67 28 50 31  ** seen.  Reg(P1
263c0 29 20 69 73 20 75 70 64 61 74 65 64 20 77 69 74  ) is updated wit
263d0 68 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  h the number of 
263e0 65 72 72 6f 72 73 20 72 65 6d 61 69 6e 69 6e 67  errors remaining
263f0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 6f 6f 74  ..**.** The root
26400 20 70 61 67 65 20 6e 75 6d 62 65 72 73 20 6f 66   page numbers of
26410 20 61 6c 6c 20 74 61 62 6c 65 73 20 69 6e 20 74   all tables in t
26420 68 65 20 64 61 74 61 62 61 73 65 20 61 72 65 20  he database are 
26430 69 6e 74 65 67 65 72 0a 2a 2a 20 73 74 6f 72 65  integer.** store
26440 64 20 69 6e 20 72 65 67 28 50 31 29 2c 20 72 65  d in reg(P1), re
26450 67 28 50 31 2b 31 29 2c 20 72 65 67 28 50 31 2b  g(P1+1), reg(P1+
26460 32 29 2c 20 2e 2e 2e 2e 20 20 54 68 65 72 65 20  2), ....  There 
26470 61 72 65 20 50 32 20 74 61 62 6c 65 73 0a 2a 2a  are P2 tables.**
26480 20 74 6f 74 61 6c 2e 0a 2a 2a 0a 2a 2a 20 49 66   total..**.** If
26490 20 50 35 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c   P5 is not zero,
264a0 20 74 68 65 20 63 68 65 63 6b 20 69 73 20 64 6f   the check is do
264b0 6e 65 20 6f 6e 20 74 68 65 20 61 75 78 69 6c 69  ne on the auxili
264c0 61 72 79 20 64 61 74 61 62 61 73 65 0a 2a 2a 20  ary database.** 
264d0 66 69 6c 65 2c 20 6e 6f 74 20 74 68 65 20 6d 61  file, not the ma
264e0 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  in database file
264f0 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ..**.** This opc
26500 6f 64 65 20 69 73 20 75 73 65 64 20 74 6f 20 69  ode is used to i
26510 6d 70 6c 65 6d 65 6e 74 20 74 68 65 20 69 6e 74  mplement the int
26520 65 67 72 69 74 79 5f 63 68 65 63 6b 20 70 72 61  egrity_check pra
26530 67 6d 61 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  gma..*/.case OP_
26540 49 6e 74 65 67 72 69 74 79 43 6b 3a 20 7b 0a 20  IntegrityCk: {. 
26550 20 69 6e 74 20 6e 52 6f 6f 74 3b 20 20 20 20 20   int nRoot;     
26560 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74 61   /* Number of ta
26570 62 6c 65 73 20 74 6f 20 63 68 65 63 6b 2e 20 20  bles to check.  
26580 28 4e 75 6d 62 65 72 20 6f 66 20 72 6f 6f 74 20  (Number of root 
26590 70 61 67 65 73 2e 29 20 2a 2f 0a 20 20 69 6e 74  pages.) */.  int
265a0 20 2a 61 52 6f 6f 74 3b 20 20 20 20 20 2f 2a 20   *aRoot;     /* 
265b0 41 72 72 61 79 20 6f 66 20 72 6f 6f 74 70 61 67  Array of rootpag
265c0 65 20 6e 75 6d 62 65 72 73 20 66 6f 72 20 74 61  e numbers for ta
265d0 62 6c 65 73 20 74 6f 20 62 65 20 63 68 65 63 6b  bles to be check
265e0 65 64 20 2a 2f 0a 20 20 69 6e 74 20 6a 3b 20 20  ed */.  int j;  
265f0 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20          /* Loop 
26600 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 69 6e 74  counter */.  int
26610 20 6e 45 72 72 3b 20 20 20 20 20 20 20 2f 2a 20   nErr;       /* 
26620 4e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73  Number of errors
26630 20 72 65 70 6f 72 74 65 64 20 2a 2f 0a 20 20 63   reported */.  c
26640 68 61 72 20 2a 7a 3b 20 20 20 20 20 20 20 20 2f  har *z;        /
26650 2a 20 54 65 78 74 20 6f 66 20 74 68 65 20 65 72  * Text of the er
26660 72 6f 72 20 72 65 70 6f 72 74 20 2a 2f 0a 20 20  ror report */.  
26670 4d 65 6d 20 2a 70 6e 45 72 72 3b 20 20 20 20 20  Mem *pnErr;     
26680 2f 2a 20 52 65 67 69 73 74 65 72 20 6b 65 65 70  /* Register keep
26690 69 6e 67 20 74 72 61 63 6b 20 6f 66 20 65 72 72  ing track of err
266a0 6f 72 73 20 72 65 6d 61 69 6e 69 6e 67 20 2a 2f  ors remaining */
266b0 0a 20 20 0a 20 20 6e 52 6f 6f 74 20 3d 20 70 4f  .  .  nRoot = pO
266c0 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28  p->p2;.  assert(
266d0 20 6e 52 6f 6f 74 3e 30 20 29 3b 0a 20 20 61 52   nRoot>0 );.  aR
266e0 6f 6f 74 20 3d 20 73 71 6c 69 74 65 33 44 62 4d  oot = sqlite3DbM
266f0 61 6c 6c 6f 63 52 61 77 28 64 62 2c 20 73 69 7a  allocRaw(db, siz
26700 65 6f 66 28 69 6e 74 29 2a 28 6e 52 6f 6f 74 2b  eof(int)*(nRoot+
26710 31 29 20 29 3b 0a 20 20 69 66 28 20 61 52 6f 6f  1) );.  if( aRoo
26720 74 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  t==0 ) goto no_m
26730 65 6d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  em;.  assert( pO
26740 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p3>0 && pOp->
26750 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20  p3<=p->nMem );. 
26760 20 70 6e 45 72 72 20 3d 20 26 61 4d 65 6d 5b 70   pnErr = &aMem[p
26770 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72  Op->p3];.  asser
26780 74 28 20 28 70 6e 45 72 72 2d 3e 66 6c 61 67 73  t( (pnErr->flags
26790 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29   & MEM_Int)!=0 )
267a0 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 6e 45  ;.  assert( (pnE
267b0 72 72 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d  rr->flags & (MEM
267c0 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29 3d  _Str|MEM_Blob))=
267d0 3d 30 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26  =0 );.  pIn1 = &
267e0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
267f0 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c 6e 52 6f 6f   for(j=0; j<nRoo
26800 74 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 61 52 6f  t; j++){.    aRo
26810 6f 74 5b 6a 5d 20 3d 20 28 69 6e 74 29 73 71 6c  ot[j] = (int)sql
26820 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65  ite3VdbeIntValue
26830 28 26 70 49 6e 31 5b 6a 5d 29 3b 0a 20 20 7d 0a  (&pIn1[j]);.  }.
26840 20 20 61 52 6f 6f 74 5b 6a 5d 20 3d 20 30 3b 0a    aRoot[j] = 0;.
26850 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
26860 35 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61  5<db->nDb );.  a
26870 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65  ssert( (p->btree
26880 4d 61 73 6b 20 26 20 28 28 28 79 44 62 4d 61 73  Mask & (((yDbMas
26890 6b 29 31 29 3c 3c 70 4f 70 2d 3e 70 35 29 29 21  k)1)<<pOp->p5))!
268a0 3d 30 20 29 3b 0a 20 20 7a 20 3d 20 73 71 6c 69  =0 );.  z = sqli
268b0 74 65 33 42 74 72 65 65 49 6e 74 65 67 72 69 74  te3BtreeIntegrit
268c0 79 43 68 65 63 6b 28 64 62 2d 3e 61 44 62 5b 70  yCheck(db->aDb[p
268d0 4f 70 2d 3e 70 35 5d 2e 70 42 74 2c 20 61 52 6f  Op->p5].pBt, aRo
268e0 6f 74 2c 20 6e 52 6f 6f 74 2c 0a 20 20 20 20 20  ot, nRoot,.     
268f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26900 20 20 20 20 20 20 20 20 20 20 20 20 28 69 6e 74              (int
26910 29 70 6e 45 72 72 2d 3e 75 2e 69 2c 20 26 6e 45  )pnErr->u.i, &nE
26920 72 72 29 3b 0a 20 20 73 71 6c 69 74 65 33 44 62  rr);.  sqlite3Db
26930 46 72 65 65 28 64 62 2c 20 61 52 6f 6f 74 29 3b  Free(db, aRoot);
26940 0a 20 20 70 6e 45 72 72 2d 3e 75 2e 69 20 2d 3d  .  pnErr->u.i -=
26950 20 6e 45 72 72 3b 0a 20 20 73 71 6c 69 74 65 33   nErr;.  sqlite3
26960 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70  VdbeMemSetNull(p
26970 49 6e 31 29 3b 0a 20 20 69 66 28 20 6e 45 72 72  In1);.  if( nErr
26980 3d 3d 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72  ==0 ){.    asser
26990 74 28 20 7a 3d 3d 30 20 29 3b 0a 20 20 7d 65 6c  t( z==0 );.  }el
269a0 73 65 20 69 66 28 20 7a 3d 3d 30 20 29 7b 0a 20  se if( z==0 ){. 
269b0 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a     goto no_mem;.
269c0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c    }else{.    sql
269d0 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 53 74  ite3VdbeMemSetSt
269e0 72 28 70 49 6e 31 2c 20 7a 2c 20 2d 31 2c 20 53  r(pIn1, z, -1, S
269f0 51 4c 49 54 45 5f 55 54 46 38 2c 20 73 71 6c 69  QLITE_UTF8, sqli
26a00 74 65 33 5f 66 72 65 65 29 3b 0a 20 20 7d 0a 20  te3_free);.  }. 
26a10 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42   UPDATE_MAX_BLOB
26a20 53 49 5a 45 28 70 49 6e 31 29 3b 0a 20 20 73 71  SIZE(pIn1);.  sq
26a30 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 45  lite3VdbeChangeE
26a40 6e 63 6f 64 69 6e 67 28 70 49 6e 31 2c 20 65 6e  ncoding(pIn1, en
26a50 63 6f 64 69 6e 67 29 3b 0a 20 20 62 72 65 61 6b  coding);.  break
26a60 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ;.}.#endif /* SQ
26a70 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52  LITE_OMIT_INTEGR
26a80 49 54 59 5f 43 48 45 43 4b 20 2a 2f 0a 0a 2f 2a  ITY_CHECK */../*
26a90 20 4f 70 63 6f 64 65 3a 20 52 6f 77 53 65 74 41   Opcode: RowSetA
26aa0 64 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  dd P1 P2 * * *.*
26ab0 2a 0a 2a 2a 20 49 6e 73 65 72 74 20 74 68 65 20  *.** Insert the 
26ac0 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 68 65  integer value he
26ad0 6c 64 20 62 79 20 72 65 67 69 73 74 65 72 20 50  ld by register P
26ae0 32 20 69 6e 74 6f 20 61 20 62 6f 6f 6c 65 61 6e  2 into a boolean
26af0 20 69 6e 64 65 78 0a 2a 2a 20 68 65 6c 64 20 69   index.** held i
26b00 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a  n register P1..*
26b10 2a 0a 2a 2a 20 41 6e 20 61 73 73 65 72 74 69 6f  *.** An assertio
26b20 6e 20 66 61 69 6c 73 20 69 66 20 50 32 20 69 73  n fails if P2 is
26b30 20 6e 6f 74 20 61 6e 20 69 6e 74 65 67 65 72 2e   not an integer.
26b40 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 53  .*/.case OP_RowS
26b50 65 74 41 64 64 3a 20 7b 20 20 20 20 20 20 20 2f  etAdd: {       /
26b60 2a 20 69 6e 31 2c 20 69 6e 32 20 2a 2f 0a 20 20  * in1, in2 */.  
26b70 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
26b80 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 32 20 3d 20  ->p1];.  pIn2 = 
26b90 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
26ba0 20 20 61 73 73 65 72 74 28 20 28 70 49 6e 32 2d    assert( (pIn2-
26bb0 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
26bc0 29 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 28 70  )!=0 );.  if( (p
26bd0 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
26be0 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29 7b 0a 20  _RowSet)==0 ){. 
26bf0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
26c00 6d 53 65 74 52 6f 77 53 65 74 28 70 49 6e 31 29  mSetRowSet(pIn1)
26c10 3b 0a 20 20 20 20 69 66 28 20 28 70 49 6e 31 2d  ;.    if( (pIn1-
26c20 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77  >flags & MEM_Row
26c30 53 65 74 29 3d 3d 30 20 29 20 67 6f 74 6f 20 6e  Set)==0 ) goto n
26c40 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 73 71 6c  o_mem;.  }.  sql
26c50 69 74 65 33 52 6f 77 53 65 74 49 6e 73 65 72 74  ite3RowSetInsert
26c60 28 70 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74  (pIn1->u.pRowSet
26c70 2c 20 70 49 6e 32 2d 3e 75 2e 69 29 3b 0a 20 20  , pIn2->u.i);.  
26c80 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
26c90 6f 64 65 3a 20 52 6f 77 53 65 74 52 65 61 64 20  ode: RowSetRead 
26ca0 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
26cb0 2a 2a 20 45 78 74 72 61 63 74 20 74 68 65 20 73  ** Extract the s
26cc0 6d 61 6c 6c 65 73 74 20 76 61 6c 75 65 20 66 72  mallest value fr
26cd0 6f 6d 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78  om boolean index
26ce0 20 50 31 20 61 6e 64 20 70 75 74 20 74 68 61 74   P1 and put that
26cf0 20 76 61 6c 75 65 20 69 6e 74 6f 0a 2a 2a 20 72   value into.** r
26d00 65 67 69 73 74 65 72 20 50 33 2e 20 20 4f 72 2c  egister P3.  Or,
26d10 20 69 66 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65   if boolean inde
26d20 78 20 50 31 20 69 73 20 69 6e 69 74 69 61 6c 6c  x P1 is initiall
26d30 79 20 65 6d 70 74 79 2c 20 6c 65 61 76 65 20 50  y empty, leave P
26d40 33 0a 2a 2a 20 75 6e 63 68 61 6e 67 65 64 20 61  3.** unchanged a
26d50 6e 64 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72  nd jump to instr
26d60 75 63 74 69 6f 6e 20 50 32 2e 0a 2a 2f 0a 63 61  uction P2..*/.ca
26d70 73 65 20 4f 50 5f 52 6f 77 53 65 74 52 65 61 64  se OP_RowSetRead
26d80 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d  : {       /* jum
26d90 70 2c 20 69 6e 31 2c 20 6f 75 74 33 20 2a 2f 0a  p, in1, out3 */.
26da0 20 20 69 36 34 20 76 61 6c 3b 0a 20 20 43 48 45    i64 val;.  CHE
26db0 43 4b 5f 46 4f 52 5f 49 4e 54 45 52 52 55 50 54  CK_FOR_INTERRUPT
26dc0 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ;.  pIn1 = &aMem
26dd0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28  [pOp->p1];.  if(
26de0 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
26df0 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 0a  MEM_RowSet)==0 .
26e00 20 20 20 7c 7c 20 73 71 6c 69 74 65 33 52 6f 77     || sqlite3Row
26e10 53 65 74 4e 65 78 74 28 70 49 6e 31 2d 3e 75 2e  SetNext(pIn1->u.
26e20 70 52 6f 77 53 65 74 2c 20 26 76 61 6c 29 3d 3d  pRowSet, &val)==
26e30 30 0a 20 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68  0.  ){.    /* Th
26e40 65 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 20  e boolean index 
26e50 69 73 20 65 6d 70 74 79 20 2a 2f 0a 20 20 20 20  is empty */.    
26e60 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
26e70 74 4e 75 6c 6c 28 70 49 6e 31 29 3b 0a 20 20 20  tNull(pIn1);.   
26e80 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
26e90 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  1;.  }else{.    
26ea0 2f 2a 20 41 20 76 61 6c 75 65 20 77 61 73 20 70  /* A value was p
26eb0 75 6c 6c 65 64 20 66 72 6f 6d 20 74 68 65 20 69  ulled from the i
26ec0 6e 64 65 78 20 2a 2f 0a 20 20 20 20 73 71 6c 69  ndex */.    sqli
26ed0 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74  te3VdbeMemSetInt
26ee0 36 34 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33  64(&aMem[pOp->p3
26ef0 5d 2c 20 76 61 6c 29 3b 0a 20 20 7d 0a 20 20 62  ], val);.  }.  b
26f00 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
26f10 64 65 3a 20 52 6f 77 53 65 74 54 65 73 74 20 50  de: RowSetTest P
26f20 31 20 50 32 20 50 33 20 50 34 0a 2a 2a 0a 2a 2a  1 P2 P3 P4.**.**
26f30 20 52 65 67 69 73 74 65 72 20 50 33 20 69 73 20   Register P3 is 
26f40 61 73 73 75 6d 65 64 20 74 6f 20 68 6f 6c 64 20  assumed to hold 
26f50 61 20 36 34 2d 62 69 74 20 69 6e 74 65 67 65 72  a 64-bit integer
26f60 20 76 61 6c 75 65 2e 20 49 66 20 72 65 67 69 73   value. If regis
26f70 74 65 72 20 50 31 0a 2a 2a 20 63 6f 6e 74 61 69  ter P1.** contai
26f80 6e 73 20 61 20 52 6f 77 53 65 74 20 6f 62 6a 65  ns a RowSet obje
26f90 63 74 20 61 6e 64 20 74 68 61 74 20 52 6f 77 53  ct and that RowS
26fa0 65 74 20 6f 62 6a 65 63 74 20 63 6f 6e 74 61 69  et object contai
26fb0 6e 73 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 20  ns.** the value 
26fc0 68 65 6c 64 20 69 6e 20 50 33 2c 20 6a 75 6d 70  held in P3, jump
26fd0 20 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e   to register P2.
26fe0 20 4f 74 68 65 72 77 69 73 65 2c 20 69 6e 73 65   Otherwise, inse
26ff0 72 74 20 74 68 65 0a 2a 2a 20 69 6e 74 65 67 65  rt the.** intege
27000 72 20 69 6e 20 50 33 20 69 6e 74 6f 20 74 68 65  r in P3 into the
27010 20 52 6f 77 53 65 74 20 61 6e 64 20 63 6f 6e 74   RowSet and cont
27020 69 6e 75 65 20 6f 6e 20 74 6f 20 74 68 65 0a 2a  inue on to the.*
27030 2a 20 6e 65 78 74 20 6f 70 63 6f 64 65 2e 0a 2a  * next opcode..*
27040 2a 0a 2a 2a 20 54 68 65 20 52 6f 77 53 65 74 20  *.** The RowSet 
27050 6f 62 6a 65 63 74 20 69 73 20 6f 70 74 69 6d 69  object is optimi
27060 7a 65 64 20 66 6f 72 20 74 68 65 20 63 61 73 65  zed for the case
27070 20 77 68 65 72 65 20 73 75 63 63 65 73 73 69 76   where successiv
27080 65 20 73 65 74 73 0a 2a 2a 20 6f 66 20 69 6e 74  e sets.** of int
27090 65 67 65 72 73 2c 20 77 68 65 72 65 20 65 61 63  egers, where eac
270a0 68 20 73 65 74 20 63 6f 6e 74 61 69 6e 73 20 6e  h set contains n
270b0 6f 20 64 75 70 6c 69 63 61 74 65 73 2e 20 45 61  o duplicates. Ea
270c0 63 68 20 73 65 74 0a 2a 2a 20 6f 66 20 76 61 6c  ch set.** of val
270d0 75 65 73 20 69 73 20 69 64 65 6e 74 69 66 69 65  ues is identifie
270e0 64 20 62 79 20 61 20 75 6e 69 71 75 65 20 50 34  d by a unique P4
270f0 20 76 61 6c 75 65 2e 20 54 68 65 20 66 69 72 73   value. The firs
27100 74 20 73 65 74 0a 2a 2a 20 6d 75 73 74 20 68 61  t set.** must ha
27110 76 65 20 50 34 3d 3d 30 2c 20 74 68 65 20 66 69  ve P4==0, the fi
27120 6e 61 6c 20 73 65 74 20 50 34 3d 2d 31 2e 20 20  nal set P4=-1.  
27130 50 34 20 6d 75 73 74 20 62 65 20 65 69 74 68 65  P4 must be eithe
27140 72 20 2d 31 20 6f 72 0a 2a 2a 20 6e 6f 6e 2d 6e  r -1 or.** non-n
27150 65 67 61 74 69 76 65 2e 20 20 46 6f 72 20 6e 6f  egative.  For no
27160 6e 2d 6e 65 67 61 74 69 76 65 20 76 61 6c 75 65  n-negative value
27170 73 20 6f 66 20 50 34 20 6f 6e 6c 79 20 74 68 65  s of P4 only the
27180 20 6c 6f 77 65 72 20 34 0a 2a 2a 20 62 69 74 73   lower 4.** bits
27190 20 61 72 65 20 73 69 67 6e 69 66 69 63 61 6e 74   are significant
271a0 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 61 6c 6c  ..**.** This all
271b0 6f 77 73 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e  ows optimization
271c0 73 3a 20 28 61 29 20 77 68 65 6e 20 50 34 3d 3d  s: (a) when P4==
271d0 30 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6e 65  0 there is no ne
271e0 65 64 20 74 6f 20 74 65 73 74 0a 2a 2a 20 74 68  ed to test.** th
271f0 65 20 72 6f 77 73 65 74 20 6f 62 6a 65 63 74 20  e rowset object 
27200 66 6f 72 20 50 33 2c 20 61 73 20 69 74 20 69 73  for P3, as it is
27210 20 67 75 61 72 61 6e 74 65 65 64 20 6e 6f 74 20   guaranteed not 
27220 74 6f 20 63 6f 6e 74 61 69 6e 20 69 74 2c 0a 2a  to contain it,.*
27230 2a 20 28 62 29 20 77 68 65 6e 20 50 34 3d 3d 2d  * (b) when P4==-
27240 31 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6e 65  1 there is no ne
27250 65 64 20 74 6f 20 69 6e 73 65 72 74 20 74 68 65  ed to insert the
27260 20 76 61 6c 75 65 2c 20 61 73 20 69 74 20 77 69   value, as it wi
27270 6c 6c 0a 2a 2a 20 6e 65 76 65 72 20 62 65 20 74  ll.** never be t
27280 65 73 74 65 64 20 66 6f 72 2c 20 61 6e 64 20 28  ested for, and (
27290 63 29 20 77 68 65 6e 20 61 20 76 61 6c 75 65 20  c) when a value 
272a0 74 68 61 74 20 69 73 20 70 61 72 74 20 6f 66 20  that is part of 
272b0 73 65 74 20 58 20 69 73 0a 2a 2a 20 69 6e 73 65  set X is.** inse
272c0 72 74 65 64 2c 20 74 68 65 72 65 20 69 73 20 6e  rted, there is n
272d0 6f 20 6e 65 65 64 20 74 6f 20 73 65 61 72 63 68  o need to search
272e0 20 74 6f 20 73 65 65 20 69 66 20 74 68 65 20 73   to see if the s
272f0 61 6d 65 20 76 61 6c 75 65 20 77 61 73 0a 2a 2a  ame value was.**
27300 20 70 72 65 76 69 6f 75 73 6c 79 20 69 6e 73 65   previously inse
27310 72 74 65 64 20 61 73 20 70 61 72 74 20 6f 66 20  rted as part of 
27320 73 65 74 20 58 20 28 6f 6e 6c 79 20 69 66 20 69  set X (only if i
27330 74 20 77 61 73 20 70 72 65 76 69 6f 75 73 6c 79  t was previously
27340 0a 2a 2a 20 69 6e 73 65 72 74 65 64 20 61 73 20  .** inserted as 
27350 70 61 72 74 20 6f 66 20 73 6f 6d 65 20 6f 74 68  part of some oth
27360 65 72 20 73 65 74 29 2e 0a 2a 2f 0a 63 61 73 65  er set)..*/.case
27370 20 4f 50 5f 52 6f 77 53 65 74 54 65 73 74 3a 20   OP_RowSetTest: 
27380 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
27390 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
273a0 6e 31 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74  n1, in3 */.  int
273b0 20 69 53 65 74 3b 0a 20 20 69 6e 74 20 65 78 69   iSet;.  int exi
273c0 73 74 73 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26  sts;..  pIn1 = &
273d0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
273e0 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn3 = &aMem[pO
273f0 70 2d 3e 70 33 5d 3b 0a 20 20 69 53 65 74 20 3d  p->p3];.  iSet =
27400 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 61 73   pOp->p4.i;.  as
27410 73 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67  sert( pIn3->flag
27420 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 0a 20 20  s&MEM_Int );..  
27430 2f 2a 20 49 66 20 74 68 65 72 65 20 69 73 20 61  /* If there is a
27440 6e 79 74 68 69 6e 67 20 6f 74 68 65 72 20 74 68  nything other th
27450 61 6e 20 61 20 72 6f 77 73 65 74 20 6f 62 6a 65  an a rowset obje
27460 63 74 20 69 6e 20 6d 65 6d 6f 72 79 20 63 65 6c  ct in memory cel
27470 6c 20 50 31 2c 0a 20 20 2a 2a 20 64 65 6c 65 74  l P1,.  ** delet
27480 65 20 69 74 20 6e 6f 77 20 61 6e 64 20 69 6e 69  e it now and ini
27490 74 69 61 6c 69 7a 65 20 50 31 20 77 69 74 68 20  tialize P1 with 
274a0 61 6e 20 65 6d 70 74 79 20 72 6f 77 73 65 74 0a  an empty rowset.
274b0 20 20 2a 2f 0a 20 20 69 66 28 20 28 70 49 6e 31    */.  if( (pIn1
274c0 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f  ->flags & MEM_Ro
274d0 77 53 65 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20  wSet)==0 ){.    
274e0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
274f0 74 52 6f 77 53 65 74 28 70 49 6e 31 29 3b 0a 20  tRowSet(pIn1);. 
27500 20 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c     if( (pIn1->fl
27510 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74  ags & MEM_RowSet
27520 29 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  )==0 ) goto no_m
27530 65 6d 3b 0a 20 20 7d 0a 0a 20 20 61 73 73 65 72  em;.  }..  asser
27540 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  t( pOp->p4type==
27550 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 61 73  P4_INT32 );.  as
27560 73 65 72 74 28 20 69 53 65 74 3d 3d 2d 31 20 7c  sert( iSet==-1 |
27570 7c 20 69 53 65 74 3e 3d 30 20 29 3b 0a 20 20 69  | iSet>=0 );.  i
27580 66 28 20 69 53 65 74 20 29 7b 0a 20 20 20 20 65  f( iSet ){.    e
27590 78 69 73 74 73 20 3d 20 73 71 6c 69 74 65 33 52  xists = sqlite3R
275a0 6f 77 53 65 74 54 65 73 74 28 70 49 6e 31 2d 3e  owSetTest(pIn1->
275b0 75 2e 70 52 6f 77 53 65 74 2c 20 0a 20 20 20 20  u.pRowSet, .    
275c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
275d0 20 20 20 20 20 20 20 20 20 20 20 28 75 38 29 28             (u8)(
275e0 69 53 65 74 3e 3d 30 20 3f 20 69 53 65 74 20 26  iSet>=0 ? iSet &
275f0 20 30 78 66 20 3a 20 30 78 66 66 29 2c 0a 20 20   0xf : 0xff),.  
27600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27610 20 20 20 20 20 20 20 20 20 20 20 20 20 70 49 6e               pIn
27620 33 2d 3e 75 2e 69 29 3b 0a 20 20 20 20 69 66 28  3->u.i);.    if(
27630 20 65 78 69 73 74 73 20 29 7b 0a 20 20 20 20 20   exists ){.     
27640 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
27650 31 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  1;.      break;.
27660 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20      }.  }.  if( 
27670 69 53 65 74 3e 3d 30 20 29 7b 0a 20 20 20 20 73  iSet>=0 ){.    s
27680 71 6c 69 74 65 33 52 6f 77 53 65 74 49 6e 73 65  qlite3RowSetInse
27690 72 74 28 70 49 6e 31 2d 3e 75 2e 70 52 6f 77 53  rt(pIn1->u.pRowS
276a0 65 74 2c 20 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a  et, pIn3->u.i);.
276b0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
276c0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
276d0 4f 4d 49 54 5f 54 52 49 47 47 45 52 0a 0a 2f 2a  OMIT_TRIGGER../*
276e0 20 4f 70 63 6f 64 65 3a 20 50 72 6f 67 72 61 6d   Opcode: Program
276f0 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a   P1 P2 P3 P4 *.*
27700 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20 74 68 65  *.** Execute the
27710 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d   trigger program
27720 20 70 61 73 73 65 64 20 61 73 20 50 34 20 28 74   passed as P4 (t
27730 79 70 65 20 50 34 5f 53 55 42 50 52 4f 47 52 41  ype P4_SUBPROGRA
27740 4d 29 2e 20 0a 2a 2a 0a 2a 2a 20 50 31 20 63 6f  M). .**.** P1 co
27750 6e 74 61 69 6e 73 20 74 68 65 20 61 64 64 72 65  ntains the addre
27760 73 73 20 6f 66 20 74 68 65 20 6d 65 6d 6f 72 79  ss of the memory
27770 20 63 65 6c 6c 20 74 68 61 74 20 63 6f 6e 74 61   cell that conta
27780 69 6e 73 20 74 68 65 20 66 69 72 73 74 20 6d 65  ins the first me
27790 6d 6f 72 79 20 0a 2a 2a 20 63 65 6c 6c 20 69 6e  mory .** cell in
277a0 20 61 6e 20 61 72 72 61 79 20 6f 66 20 76 61 6c   an array of val
277b0 75 65 73 20 75 73 65 64 20 61 73 20 61 72 67 75  ues used as argu
277c0 6d 65 6e 74 73 20 74 6f 20 74 68 65 20 73 75 62  ments to the sub
277d0 2d 70 72 6f 67 72 61 6d 2e 20 50 32 20 0a 2a 2a  -program. P2 .**
277e0 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 61 64   contains the ad
277f0 64 72 65 73 73 20 74 6f 20 6a 75 6d 70 20 74 6f  dress to jump to
27800 20 69 66 20 74 68 65 20 73 75 62 2d 70 72 6f 67   if the sub-prog
27810 72 61 6d 20 74 68 72 6f 77 73 20 61 6e 20 49 47  ram throws an IG
27820 4e 4f 52 45 20 0a 2a 2a 20 65 78 63 65 70 74 69  NORE .** excepti
27830 6f 6e 20 75 73 69 6e 67 20 74 68 65 20 52 41 49  on using the RAI
27840 53 45 28 29 20 66 75 6e 63 74 69 6f 6e 2e 20 52  SE() function. R
27850 65 67 69 73 74 65 72 20 50 33 20 63 6f 6e 74 61  egister P3 conta
27860 69 6e 73 20 74 68 65 20 61 64 64 72 65 73 73 20  ins the address 
27870 0a 2a 2a 20 6f 66 20 61 20 6d 65 6d 6f 72 79 20  .** of a memory 
27880 63 65 6c 6c 20 69 6e 20 74 68 69 73 20 28 74 68  cell in this (th
27890 65 20 70 61 72 65 6e 74 29 20 56 4d 20 74 68 61  e parent) VM tha
278a0 74 20 69 73 20 75 73 65 64 20 74 6f 20 61 6c 6c  t is used to all
278b0 6f 63 61 74 65 20 74 68 65 20 0a 2a 2a 20 6d 65  ocate the .** me
278c0 6d 6f 72 79 20 72 65 71 75 69 72 65 64 20 62 79  mory required by
278d0 20 74 68 65 20 73 75 62 2d 76 64 62 65 20 61 74   the sub-vdbe at
278e0 20 72 75 6e 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20   runtime..**.** 
278f0 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20  P4 is a pointer 
27900 74 6f 20 74 68 65 20 56 4d 20 63 6f 6e 74 61 69  to the VM contai
27910 6e 69 6e 67 20 74 68 65 20 74 72 69 67 67 65 72  ning the trigger
27920 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f 0a 63 61 73   program..*/.cas
27930 65 20 4f 50 5f 50 72 6f 67 72 61 6d 3a 20 7b 20  e OP_Program: { 
27940 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
27950 2f 0a 20 20 69 6e 74 20 6e 4d 65 6d 3b 20 20 20  /.  int nMem;   
27960 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
27970 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20  umber of memory 
27980 72 65 67 69 73 74 65 72 73 20 66 6f 72 20 73 75  registers for su
27990 62 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a 20 20 69  b-program */.  i
279a0 6e 74 20 6e 42 79 74 65 3b 20 20 20 20 20 20 20  nt nByte;       
279b0 20 20 20 20 20 20 20 2f 2a 20 42 79 74 65 73 20         /* Bytes 
279c0 6f 66 20 72 75 6e 74 69 6d 65 20 73 70 61 63 65  of runtime space
279d0 20 72 65 71 75 69 72 65 64 20 66 6f 72 20 73 75   required for su
279e0 62 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a 20 20 4d  b-program */.  M
279f0 65 6d 20 2a 70 52 74 3b 20 20 20 20 20 20 20 20  em *pRt;        
27a00 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74         /* Regist
27a10 65 72 20 74 6f 20 61 6c 6c 6f 63 61 74 65 20 72  er to allocate r
27a20 75 6e 74 69 6d 65 20 73 70 61 63 65 20 2a 2f 0a  untime space */.
27a30 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20 20 20    Mem *pMem;    
27a40 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65            /* Use
27a50 64 20 74 6f 20 69 74 65 72 61 74 65 20 74 68 72  d to iterate thr
27a60 6f 75 67 68 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  ough memory cell
27a70 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 45 6e 64  s */.  Mem *pEnd
27a80 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
27a90 2a 20 4c 61 73 74 20 6d 65 6d 6f 72 79 20 63 65  * Last memory ce
27aa0 6c 6c 20 69 6e 20 6e 65 77 20 61 72 72 61 79 20  ll in new array 
27ab0 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d 65 20 2a  */.  VdbeFrame *
27ac0 70 46 72 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20  pFrame;      /* 
27ad0 4e 65 77 20 76 64 62 65 20 66 72 61 6d 65 20 74  New vdbe frame t
27ae0 6f 20 65 78 65 63 75 74 65 20 69 6e 20 2a 2f 0a  o execute in */.
27af0 20 20 53 75 62 50 72 6f 67 72 61 6d 20 2a 70 50    SubProgram *pP
27b00 72 6f 67 72 61 6d 3b 20 20 20 2f 2a 20 53 75 62  rogram;   /* Sub
27b10 2d 70 72 6f 67 72 61 6d 20 74 6f 20 65 78 65 63  -program to exec
27b20 75 74 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 74  ute */.  void *t
27b30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
27b40 20 2f 2a 20 54 6f 6b 65 6e 20 69 64 65 6e 74 69   /* Token identi
27b50 66 79 69 6e 67 20 74 72 69 67 67 65 72 20 2a 2f  fying trigger */
27b60 0a 0a 20 20 70 50 72 6f 67 72 61 6d 20 3d 20 70  ..  pProgram = p
27b70 4f 70 2d 3e 70 34 2e 70 50 72 6f 67 72 61 6d 3b  Op->p4.pProgram;
27b80 0a 20 20 70 52 74 20 3d 20 26 61 4d 65 6d 5b 70  .  pRt = &aMem[p
27b90 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72  Op->p3];.  asser
27ba0 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 52  t( memIsValid(pR
27bb0 74 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  t) );.  assert( 
27bc0 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f 70 3e 30 20  pProgram->nOp>0 
27bd0 29 3b 0a 20 20 0a 20 20 2f 2a 20 49 66 20 74 68  );.  .  /* If th
27be0 65 20 70 35 20 66 6c 61 67 20 69 73 20 63 6c 65  e p5 flag is cle
27bf0 61 72 2c 20 74 68 65 6e 20 72 65 63 75 72 73 69  ar, then recursi
27c00 76 65 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66  ve invocation of
27c10 20 74 72 69 67 67 65 72 73 20 69 73 20 0a 20 20   triggers is .  
27c20 2a 2a 20 64 69 73 61 62 6c 65 64 20 66 6f 72 20  ** disabled for 
27c30 62 61 63 6b 77 61 72 64 73 20 63 6f 6d 70 61 74  backwards compat
27c40 69 62 69 6c 69 74 79 20 28 70 35 20 69 73 20 73  ibility (p5 is s
27c50 65 74 20 69 66 20 74 68 69 73 20 73 75 62 2d 70  et if this sub-p
27c60 72 6f 67 72 61 6d 0a 20 20 2a 2a 20 69 73 20 72  rogram.  ** is r
27c70 65 61 6c 6c 79 20 61 20 74 72 69 67 67 65 72 2c  eally a trigger,
27c80 20 6e 6f 74 20 61 20 66 6f 72 65 69 67 6e 20 6b   not a foreign k
27c90 65 79 20 61 63 74 69 6f 6e 2c 20 61 6e 64 20 74  ey action, and t
27ca0 68 65 20 66 6c 61 67 20 73 65 74 0a 20 20 2a 2a  he flag set.  **
27cb0 20 61 6e 64 20 63 6c 65 61 72 65 64 20 62 79 20   and cleared by 
27cc0 74 68 65 20 22 50 52 41 47 4d 41 20 72 65 63 75  the "PRAGMA recu
27cd0 72 73 69 76 65 5f 74 72 69 67 67 65 72 73 22 20  rsive_triggers" 
27ce0 63 6f 6d 6d 61 6e 64 20 69 73 20 63 6c 65 61 72  command is clear
27cf0 29 2e 0a 20 20 2a 2a 20 0a 20 20 2a 2a 20 49 74  )..  ** .  ** It
27d00 20 69 73 20 72 65 63 75 72 73 69 76 65 20 69 6e   is recursive in
27d10 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74 72 69 67  vocation of trig
27d20 67 65 72 73 2c 20 61 74 20 74 68 65 20 53 51 4c  gers, at the SQL
27d30 20 6c 65 76 65 6c 2c 20 74 68 61 74 20 69 73 20   level, that is 
27d40 0a 20 20 2a 2a 20 64 69 73 61 62 6c 65 64 2e 20  .  ** disabled. 
27d50 49 6e 20 73 6f 6d 65 20 63 61 73 65 73 20 61 20  In some cases a 
27d60 73 69 6e 67 6c 65 20 74 72 69 67 67 65 72 20 6d  single trigger m
27d70 61 79 20 67 65 6e 65 72 61 74 65 20 6d 6f 72 65  ay generate more
27d80 20 74 68 61 6e 20 6f 6e 65 20 0a 20 20 2a 2a 20   than one .  ** 
27d90 53 75 62 50 72 6f 67 72 61 6d 20 28 69 66 20 74  SubProgram (if t
27da0 68 65 20 74 72 69 67 67 65 72 20 6d 61 79 20 62  he trigger may b
27db0 65 20 65 78 65 63 75 74 65 64 20 77 69 74 68 20  e executed with 
27dc0 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20 64 69  more than one di
27dd0 66 66 65 72 65 6e 74 20 0a 20 20 2a 2a 20 4f 4e  fferent .  ** ON
27de0 20 43 4f 4e 46 4c 49 43 54 20 61 6c 67 6f 72 69   CONFLICT algori
27df0 74 68 6d 29 2e 20 53 75 62 50 72 6f 67 72 61 6d  thm). SubProgram
27e00 20 73 74 72 75 63 74 75 72 65 73 20 61 73 73 6f   structures asso
27e10 63 69 61 74 65 64 20 77 69 74 68 20 61 0a 20 20  ciated with a.  
27e20 2a 2a 20 73 69 6e 67 6c 65 20 74 72 69 67 67 65  ** single trigge
27e30 72 20 61 6c 6c 20 68 61 76 65 20 74 68 65 20 73  r all have the s
27e40 61 6d 65 20 76 61 6c 75 65 20 66 6f 72 20 74 68  ame value for th
27e50 65 20 53 75 62 50 72 6f 67 72 61 6d 2e 74 6f 6b  e SubProgram.tok
27e60 65 6e 20 0a 20 20 2a 2a 20 76 61 72 69 61 62 6c  en .  ** variabl
27e70 65 2e 20 20 2a 2f 0a 20 20 69 66 28 20 70 4f 70  e.  */.  if( pOp
27e80 2d 3e 70 35 20 29 7b 0a 20 20 20 20 74 20 3d 20  ->p5 ){.    t = 
27e90 70 50 72 6f 67 72 61 6d 2d 3e 74 6f 6b 65 6e 3b  pProgram->token;
27ea0 0a 20 20 20 20 66 6f 72 28 70 46 72 61 6d 65 3d  .    for(pFrame=
27eb0 70 2d 3e 70 46 72 61 6d 65 3b 20 70 46 72 61 6d  p->pFrame; pFram
27ec0 65 20 26 26 20 70 46 72 61 6d 65 2d 3e 74 6f 6b  e && pFrame->tok
27ed0 65 6e 21 3d 74 3b 20 70 46 72 61 6d 65 3d 70 46  en!=t; pFrame=pF
27ee0 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 29 3b 0a  rame->pParent);.
27ef0 20 20 20 20 69 66 28 20 70 46 72 61 6d 65 20 29      if( pFrame )
27f00 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 69   break;.  }..  i
27f10 66 28 20 70 2d 3e 6e 46 72 61 6d 65 3e 3d 64 62  f( p->nFrame>=db
27f20 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f  ->aLimit[SQLITE_
27f30 4c 49 4d 49 54 5f 54 52 49 47 47 45 52 5f 44 45  LIMIT_TRIGGER_DE
27f40 50 54 48 5d 20 29 7b 0a 20 20 20 20 72 63 20 3d  PTH] ){.    rc =
27f50 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20   SQLITE_ERROR;. 
27f60 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72     sqlite3SetStr
27f70 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c  ing(&p->zErrMsg,
27f80 20 64 62 2c 20 22 74 6f 6f 20 6d 61 6e 79 20 6c   db, "too many l
27f90 65 76 65 6c 73 20 6f 66 20 74 72 69 67 67 65 72  evels of trigger
27fa0 20 72 65 63 75 72 73 69 6f 6e 22 29 3b 0a 20 20   recursion");.  
27fb0 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20    break;.  }..  
27fc0 2f 2a 20 52 65 67 69 73 74 65 72 20 70 52 74 20  /* Register pRt 
27fd0 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65  is used to store
27fe0 20 74 68 65 20 6d 65 6d 6f 72 79 20 72 65 71 75   the memory requ
27ff0 69 72 65 64 20 74 6f 20 73 61 76 65 20 74 68 65  ired to save the
28000 20 73 74 61 74 65 0a 20 20 2a 2a 20 6f 66 20 74   state.  ** of t
28010 68 65 20 63 75 72 72 65 6e 74 20 70 72 6f 67 72  he current progr
28020 61 6d 2c 20 61 6e 64 20 74 68 65 20 6d 65 6d 6f  am, and the memo
28030 72 79 20 72 65 71 75 69 72 65 64 20 61 74 20 72  ry required at r
28040 75 6e 74 69 6d 65 20 74 6f 20 65 78 65 63 75 74  untime to execut
28050 65 0a 20 20 2a 2a 20 74 68 65 20 74 72 69 67 67  e.  ** the trigg
28060 65 72 20 70 72 6f 67 72 61 6d 2e 20 49 66 20 74  er program. If t
28070 68 69 73 20 74 72 69 67 67 65 72 20 68 61 73 20  his trigger has 
28080 62 65 65 6e 20 66 69 72 65 64 20 62 65 66 6f 72  been fired befor
28090 65 2c 20 74 68 65 6e 20 70 52 74 20 0a 20 20 2a  e, then pRt .  *
280a0 2a 20 69 73 20 61 6c 72 65 61 64 79 20 61 6c 6c  * is already all
280b0 6f 63 61 74 65 64 2e 20 4f 74 68 65 72 77 69 73  ocated. Otherwis
280c0 65 2c 20 69 74 20 6d 75 73 74 20 62 65 20 69 6e  e, it must be in
280d0 69 74 69 61 6c 69 7a 65 64 2e 20 20 2a 2f 0a 20  itialized.  */. 
280e0 20 69 66 28 20 28 70 52 74 2d 3e 66 6c 61 67 73   if( (pRt->flags
280f0 26 4d 45 4d 5f 46 72 61 6d 65 29 3d 3d 30 20 29  &MEM_Frame)==0 )
28100 7b 0a 20 20 20 20 2f 2a 20 53 75 62 50 72 6f 67  {.    /* SubProg
28110 72 61 6d 2e 6e 4d 65 6d 20 69 73 20 73 65 74 20  ram.nMem is set 
28120 74 6f 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  to the number of
28130 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 75 73   memory cells us
28140 65 64 20 62 79 20 74 68 65 20 0a 20 20 20 20 2a  ed by the .    *
28150 2a 20 70 72 6f 67 72 61 6d 20 73 74 6f 72 65 64  * program stored
28160 20 69 6e 20 53 75 62 50 72 6f 67 72 61 6d 2e 61   in SubProgram.a
28170 4f 70 2e 20 41 73 20 77 65 6c 6c 20 61 73 20 74  Op. As well as t
28180 68 65 73 65 2c 20 6f 6e 65 20 6d 65 6d 6f 72 79  hese, one memory
28190 0a 20 20 20 20 2a 2a 20 63 65 6c 6c 20 69 73 20  .    ** cell is 
281a0 72 65 71 75 69 72 65 64 20 66 6f 72 20 65 61 63  required for eac
281b0 68 20 63 75 72 73 6f 72 20 75 73 65 64 20 62 79  h cursor used by
281c0 20 74 68 65 20 70 72 6f 67 72 61 6d 2e 20 53 65   the program. Se
281d0 74 20 6c 6f 63 61 6c 0a 20 20 20 20 2a 2a 20 76  t local.    ** v
281e0 61 72 69 61 62 6c 65 20 6e 4d 65 6d 20 28 61 6e  ariable nMem (an
281f0 64 20 6c 61 74 65 72 2c 20 56 64 62 65 46 72 61  d later, VdbeFra
28200 6d 65 2e 6e 43 68 69 6c 64 4d 65 6d 29 20 74 6f  me.nChildMem) to
28210 20 74 68 69 73 20 76 61 6c 75 65 2e 0a 20 20 20   this value..   
28220 20 2a 2f 0a 20 20 20 20 6e 4d 65 6d 20 3d 20 70   */.    nMem = p
28230 50 72 6f 67 72 61 6d 2d 3e 6e 4d 65 6d 20 2b 20  Program->nMem + 
28240 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3b 0a  pProgram->nCsr;.
28250 20 20 20 20 6e 42 79 74 65 20 3d 20 52 4f 55 4e      nByte = ROUN
28260 44 38 28 73 69 7a 65 6f 66 28 56 64 62 65 46 72  D8(sizeof(VdbeFr
28270 61 6d 65 29 29 0a 20 20 20 20 20 20 20 20 20 20  ame)).          
28280 20 20 20 20 2b 20 6e 4d 65 6d 20 2a 20 73 69 7a      + nMem * siz
28290 65 6f 66 28 4d 65 6d 29 0a 20 20 20 20 20 20 20  eof(Mem).       
282a0 20 20 20 20 20 20 20 2b 20 70 50 72 6f 67 72 61         + pProgra
282b0 6d 2d 3e 6e 43 73 72 20 2a 20 73 69 7a 65 6f 66  m->nCsr * sizeof
282c0 28 56 64 62 65 43 75 72 73 6f 72 20 2a 29 3b 0a  (VdbeCursor *);.
282d0 20 20 20 20 70 46 72 61 6d 65 20 3d 20 73 71 6c      pFrame = sql
282e0 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f  ite3DbMallocZero
282f0 28 64 62 2c 20 6e 42 79 74 65 29 3b 0a 20 20 20  (db, nByte);.   
28300 20 69 66 28 20 21 70 46 72 61 6d 65 20 29 7b 0a   if( !pFrame ){.
28310 20 20 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65        goto no_me
28320 6d 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c  m;.    }.    sql
28330 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61  ite3VdbeMemRelea
28340 73 65 28 70 52 74 29 3b 0a 20 20 20 20 70 52 74  se(pRt);.    pRt
28350 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 46 72  ->flags = MEM_Fr
28360 61 6d 65 3b 0a 20 20 20 20 70 52 74 2d 3e 75 2e  ame;.    pRt->u.
28370 70 46 72 61 6d 65 20 3d 20 70 46 72 61 6d 65 3b  pFrame = pFrame;
28380 0a 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 76 20  ..    pFrame->v 
28390 3d 20 70 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d  = p;.    pFrame-
283a0 3e 6e 43 68 69 6c 64 4d 65 6d 20 3d 20 6e 4d 65  >nChildMem = nMe
283b0 6d 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e  m;.    pFrame->n
283c0 43 68 69 6c 64 43 73 72 20 3d 20 70 50 72 6f 67  ChildCsr = pProg
283d0 72 61 6d 2d 3e 6e 43 73 72 3b 0a 20 20 20 20 70  ram->nCsr;.    p
283e0 46 72 61 6d 65 2d 3e 70 63 20 3d 20 70 63 3b 0a  Frame->pc = pc;.
283f0 20 20 20 20 70 46 72 61 6d 65 2d 3e 61 4d 65 6d      pFrame->aMem
28400 20 3d 20 70 2d 3e 61 4d 65 6d 3b 0a 20 20 20 20   = p->aMem;.    
28410 70 46 72 61 6d 65 2d 3e 6e 4d 65 6d 20 3d 20 70  pFrame->nMem = p
28420 2d 3e 6e 4d 65 6d 3b 0a 20 20 20 20 70 46 72 61  ->nMem;.    pFra
28430 6d 65 2d 3e 61 70 43 73 72 20 3d 20 70 2d 3e 61  me->apCsr = p->a
28440 70 43 73 72 3b 0a 20 20 20 20 70 46 72 61 6d 65  pCsr;.    pFrame
28450 2d 3e 6e 43 75 72 73 6f 72 20 3d 20 70 2d 3e 6e  ->nCursor = p->n
28460 43 75 72 73 6f 72 3b 0a 20 20 20 20 70 46 72 61  Cursor;.    pFra
28470 6d 65 2d 3e 61 4f 70 20 3d 20 70 2d 3e 61 4f 70  me->aOp = p->aOp
28480 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 4f  ;.    pFrame->nO
28490 70 20 3d 20 70 2d 3e 6e 4f 70 3b 0a 20 20 20 20  p = p->nOp;.    
284a0 70 46 72 61 6d 65 2d 3e 74 6f 6b 65 6e 20 3d 20  pFrame->token = 
284b0 70 50 72 6f 67 72 61 6d 2d 3e 74 6f 6b 65 6e 3b  pProgram->token;
284c0 0a 0a 20 20 20 20 70 45 6e 64 20 3d 20 26 56 64  ..    pEnd = &Vd
284d0 62 65 46 72 61 6d 65 4d 65 6d 28 70 46 72 61 6d  beFrameMem(pFram
284e0 65 29 5b 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c  e)[pFrame->nChil
284f0 64 4d 65 6d 5d 3b 0a 20 20 20 20 66 6f 72 28 70  dMem];.    for(p
28500 4d 65 6d 3d 56 64 62 65 46 72 61 6d 65 4d 65 6d  Mem=VdbeFrameMem
28510 28 70 46 72 61 6d 65 29 3b 20 70 4d 65 6d 21 3d  (pFrame); pMem!=
28520 70 45 6e 64 3b 20 70 4d 65 6d 2b 2b 29 7b 0a 20  pEnd; pMem++){. 
28530 20 20 20 20 20 70 4d 65 6d 2d 3e 66 6c 61 67 73       pMem->flags
28540 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20   = MEM_Null;.   
28550 20 20 20 70 4d 65 6d 2d 3e 64 62 20 3d 20 64 62     pMem->db = db
28560 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b  ;.    }.  }else{
28570 0a 20 20 20 20 70 46 72 61 6d 65 20 3d 20 70 52  .    pFrame = pR
28580 74 2d 3e 75 2e 70 46 72 61 6d 65 3b 0a 20 20 20  t->u.pFrame;.   
28590 20 61 73 73 65 72 74 28 20 70 50 72 6f 67 72 61   assert( pProgra
285a0 6d 2d 3e 6e 4d 65 6d 2b 70 50 72 6f 67 72 61 6d  m->nMem+pProgram
285b0 2d 3e 6e 43 73 72 3d 3d 70 46 72 61 6d 65 2d 3e  ->nCsr==pFrame->
285c0 6e 43 68 69 6c 64 4d 65 6d 20 29 3b 0a 20 20 20  nChildMem );.   
285d0 20 61 73 73 65 72 74 28 20 70 50 72 6f 67 72 61   assert( pProgra
285e0 6d 2d 3e 6e 43 73 72 3d 3d 70 46 72 61 6d 65 2d  m->nCsr==pFrame-
285f0 3e 6e 43 68 69 6c 64 43 73 72 20 29 3b 0a 20 20  >nChildCsr );.  
28600 20 20 61 73 73 65 72 74 28 20 70 63 3d 3d 70 46    assert( pc==pF
28610 72 61 6d 65 2d 3e 70 63 20 29 3b 0a 20 20 7d 0a  rame->pc );.  }.
28620 0a 20 20 70 2d 3e 6e 46 72 61 6d 65 2b 2b 3b 0a  .  p->nFrame++;.
28630 20 20 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e    pFrame->pParen
28640 74 20 3d 20 70 2d 3e 70 46 72 61 6d 65 3b 0a 20  t = p->pFrame;. 
28650 20 70 46 72 61 6d 65 2d 3e 6c 61 73 74 52 6f 77   pFrame->lastRow
28660 69 64 20 3d 20 64 62 2d 3e 6c 61 73 74 52 6f 77  id = db->lastRow
28670 69 64 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 6e 43  id;.  pFrame->nC
28680 68 61 6e 67 65 20 3d 20 70 2d 3e 6e 43 68 61 6e  hange = p->nChan
28690 67 65 3b 0a 20 20 70 2d 3e 6e 43 68 61 6e 67 65  ge;.  p->nChange
286a0 20 3d 20 30 3b 0a 20 20 70 2d 3e 70 46 72 61 6d   = 0;.  p->pFram
286b0 65 20 3d 20 70 46 72 61 6d 65 3b 0a 20 20 70 2d  e = pFrame;.  p-
286c0 3e 61 4d 65 6d 20 3d 20 61 4d 65 6d 20 3d 20 26  >aMem = aMem = &
286d0 56 64 62 65 46 72 61 6d 65 4d 65 6d 28 70 46 72  VdbeFrameMem(pFr
286e0 61 6d 65 29 5b 2d 31 5d 3b 0a 20 20 70 2d 3e 6e  ame)[-1];.  p->n
286f0 4d 65 6d 20 3d 20 70 46 72 61 6d 65 2d 3e 6e 43  Mem = pFrame->nC
28700 68 69 6c 64 4d 65 6d 3b 0a 20 20 70 2d 3e 6e 43  hildMem;.  p->nC
28710 75 72 73 6f 72 20 3d 20 28 75 31 36 29 70 46 72  ursor = (u16)pFr
28720 61 6d 65 2d 3e 6e 43 68 69 6c 64 43 73 72 3b 0a  ame->nChildCsr;.
28730 20 20 70 2d 3e 61 70 43 73 72 20 3d 20 28 56 64    p->apCsr = (Vd
28740 62 65 43 75 72 73 6f 72 20 2a 2a 29 26 61 4d 65  beCursor **)&aMe
28750 6d 5b 70 2d 3e 6e 4d 65 6d 2b 31 5d 3b 0a 20 20  m[p->nMem+1];.  
28760 70 2d 3e 61 4f 70 20 3d 20 61 4f 70 20 3d 20 70  p->aOp = aOp = p
28770 50 72 6f 67 72 61 6d 2d 3e 61 4f 70 3b 0a 20 20  Program->aOp;.  
28780 70 2d 3e 6e 4f 70 20 3d 20 70 50 72 6f 67 72 61  p->nOp = pProgra
28790 6d 2d 3e 6e 4f 70 3b 0a 20 20 70 63 20 3d 20 2d  m->nOp;.  pc = -
287a0 31 3b 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  1;..  break;.}..
287b0 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 61 72 61 6d  /* Opcode: Param
287c0 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
287d0 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69  ** This opcode i
287e0 73 20 6f 6e 6c 79 20 65 76 65 72 20 70 72 65 73  s only ever pres
287f0 65 6e 74 20 69 6e 20 73 75 62 2d 70 72 6f 67 72  ent in sub-progr
28800 61 6d 73 20 63 61 6c 6c 65 64 20 76 69 61 20 74  ams called via t
28810 68 65 20 0a 2a 2a 20 4f 50 5f 50 72 6f 67 72 61  he .** OP_Progra
28820 6d 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 43  m instruction. C
28830 6f 70 79 20 61 20 76 61 6c 75 65 20 63 75 72 72  opy a value curr
28840 65 6e 74 6c 79 20 73 74 6f 72 65 64 20 69 6e 20  ently stored in 
28850 61 20 6d 65 6d 6f 72 79 20 0a 2a 2a 20 63 65 6c  a memory .** cel
28860 6c 20 6f 66 20 74 68 65 20 63 61 6c 6c 69 6e 67  l of the calling
28870 20 28 70 61 72 65 6e 74 29 20 66 72 61 6d 65 20   (parent) frame 
28880 74 6f 20 63 65 6c 6c 20 50 32 20 69 6e 20 74 68  to cell P2 in th
28890 65 20 63 75 72 72 65 6e 74 20 66 72 61 6d 65 73  e current frames
288a0 20 0a 2a 2a 20 61 64 64 72 65 73 73 20 73 70 61   .** address spa
288b0 63 65 2e 20 54 68 69 73 20 69 73 20 75 73 65 64  ce. This is used
288c0 20 62 79 20 74 72 69 67 67 65 72 20 70 72 6f 67   by trigger prog
288d0 72 61 6d 73 20 74 6f 20 61 63 63 65 73 73 20 74  rams to access t
288e0 68 65 20 6e 65 77 2e 2a 20 0a 2a 2a 20 61 6e 64  he new.* .** and
288f0 20 6f 6c 64 2e 2a 20 76 61 6c 75 65 73 2e 0a 2a   old.* values..*
28900 2a 0a 2a 2a 20 54 68 65 20 61 64 64 72 65 73 73  *.** The address
28910 20 6f 66 20 74 68 65 20 63 65 6c 6c 20 69 6e 20   of the cell in 
28920 74 68 65 20 70 61 72 65 6e 74 20 66 72 61 6d 65  the parent frame
28930 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62   is determined b
28940 79 20 61 64 64 69 6e 67 0a 2a 2a 20 74 68 65 20  y adding.** the 
28950 76 61 6c 75 65 20 6f 66 20 74 68 65 20 50 31 20  value of the P1 
28960 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20  argument to the 
28970 76 61 6c 75 65 20 6f 66 20 74 68 65 20 50 31 20  value of the P1 
28980 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 0a  argument to the.
28990 2a 2a 20 63 61 6c 6c 69 6e 67 20 4f 50 5f 50 72  ** calling OP_Pr
289a0 6f 67 72 61 6d 20 69 6e 73 74 72 75 63 74 69 6f  ogram instructio
289b0 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 61  n..*/.case OP_Pa
289c0 72 61 6d 3a 20 7b 20 20 20 20 20 20 20 20 20 20  ram: {          
289d0 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65   /* out2-prerele
289e0 61 73 65 20 2a 2f 0a 20 20 56 64 62 65 46 72 61  ase */.  VdbeFra
289f0 6d 65 20 2a 70 46 72 61 6d 65 3b 0a 20 20 4d 65  me *pFrame;.  Me
28a00 6d 20 2a 70 49 6e 3b 0a 20 20 70 46 72 61 6d 65  m *pIn;.  pFrame
28a10 20 3d 20 70 2d 3e 70 46 72 61 6d 65 3b 0a 20 20   = p->pFrame;.  
28a20 70 49 6e 20 3d 20 26 70 46 72 61 6d 65 2d 3e 61  pIn = &pFrame->a
28a30 4d 65 6d 5b 70 4f 70 2d 3e 70 31 20 2b 20 70 46  Mem[pOp->p1 + pF
28a40 72 61 6d 65 2d 3e 61 4f 70 5b 70 46 72 61 6d 65  rame->aOp[pFrame
28a50 2d 3e 70 63 5d 2e 70 31 5d 3b 20 20 20 0a 20 20  ->pc].p1];   .  
28a60 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68  sqlite3VdbeMemSh
28a70 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20  allowCopy(pOut, 
28a80 70 49 6e 2c 20 4d 45 4d 5f 45 70 68 65 6d 29 3b  pIn, MEM_Ephem);
28a90 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 65 6e  .  break;.}..#en
28aa0 64 69 66 20 2f 2a 20 23 69 66 6e 64 65 66 20 53  dif /* #ifndef S
28ab0 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47  QLITE_OMIT_TRIGG
28ac0 45 52 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  ER */..#ifndef S
28ad0 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49  QLITE_OMIT_FOREI
28ae0 47 4e 5f 4b 45 59 0a 2f 2a 20 4f 70 63 6f 64 65  GN_KEY./* Opcode
28af0 3a 20 46 6b 43 6f 75 6e 74 65 72 20 50 31 20 50  : FkCounter P1 P
28b00 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 6e  2 * * *.**.** In
28b10 63 72 65 6d 65 6e 74 20 61 20 22 63 6f 6e 73 74  crement a "const
28b20 72 61 69 6e 74 20 63 6f 75 6e 74 65 72 22 20 62  raint counter" b
28b30 79 20 50 32 20 28 50 32 20 6d 61 79 20 62 65 20  y P2 (P2 may be 
28b40 6e 65 67 61 74 69 76 65 20 6f 72 20 70 6f 73 69  negative or posi
28b50 74 69 76 65 29 2e 0a 2a 2a 20 49 66 20 50 31 20  tive)..** If P1 
28b60 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65  is non-zero, the
28b70 20 64 61 74 61 62 61 73 65 20 63 6f 6e 73 74 72   database constr
28b80 61 69 6e 74 20 63 6f 75 6e 74 65 72 20 69 73 20  aint counter is 
28b90 69 6e 63 72 65 6d 65 6e 74 65 64 20 0a 2a 2a 20  incremented .** 
28ba0 28 64 65 66 65 72 72 65 64 20 66 6f 72 65 69 67  (deferred foreig
28bb0 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74  n key constraint
28bc0 73 29 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69  s). Otherwise, i
28bd0 66 20 50 31 20 69 73 20 7a 65 72 6f 2c 20 74 68  f P1 is zero, th
28be0 65 20 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74 20  e .** statement 
28bf0 63 6f 75 6e 74 65 72 20 69 73 20 69 6e 63 72 65  counter is incre
28c00 6d 65 6e 74 65 64 20 28 69 6d 6d 65 64 69 61 74  mented (immediat
28c10 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f  e foreign key co
28c20 6e 73 74 72 61 69 6e 74 73 29 2e 0a 2a 2f 0a 63  nstraints)..*/.c
28c30 61 73 65 20 4f 50 5f 46 6b 43 6f 75 6e 74 65 72  ase OP_FkCounter
28c40 3a 20 7b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70  : {.  if( pOp->p
28c50 31 20 29 7b 0a 20 20 20 20 64 62 2d 3e 6e 44 65  1 ){.    db->nDe
28c60 66 65 72 72 65 64 43 6f 6e 73 20 2b 3d 20 70 4f  ferredCons += pO
28c70 70 2d 3e 70 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a  p->p2;.  }else{.
28c80 20 20 20 20 70 2d 3e 6e 46 6b 43 6f 6e 73 74 72      p->nFkConstr
28c90 61 69 6e 74 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b  aint += pOp->p2;
28ca0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
28cb0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 6b 49 66  ./* Opcode: FkIf
28cc0 5a 65 72 6f 20 50 31 20 50 32 20 2a 20 2a 20 2a  Zero P1 P2 * * *
28cd0 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
28ce0 64 65 20 74 65 73 74 73 20 69 66 20 61 20 66 6f  de tests if a fo
28cf0 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72  reign key constr
28d00 61 69 6e 74 2d 63 6f 75 6e 74 65 72 20 69 73 20  aint-counter is 
28d10 63 75 72 72 65 6e 74 6c 79 20 7a 65 72 6f 2e 0a  currently zero..
28d20 2a 2a 20 49 66 20 73 6f 2c 20 6a 75 6d 70 20 74  ** If so, jump t
28d30 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 50 32  o instruction P2
28d40 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 66 61 6c  . Otherwise, fal
28d50 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  l through to the
28d60 20 6e 65 78 74 20 0a 2a 2a 20 69 6e 73 74 72 75   next .** instru
28d70 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  ction..**.** If 
28d80 50 31 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20  P1 is non-zero, 
28d90 74 68 65 6e 20 74 68 65 20 6a 75 6d 70 20 69 73  then the jump is
28da0 20 74 61 6b 65 6e 20 69 66 20 74 68 65 20 64 61   taken if the da
28db0 74 61 62 61 73 65 20 63 6f 6e 73 74 72 61 69 6e  tabase constrain
28dc0 74 2d 63 6f 75 6e 74 65 72 0a 2a 2a 20 69 73 20  t-counter.** is 
28dd0 7a 65 72 6f 20 28 74 68 65 20 6f 6e 65 20 74 68  zero (the one th
28de0 61 74 20 63 6f 75 6e 74 73 20 64 65 66 65 72 72  at counts deferr
28df0 65 64 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69  ed constraint vi
28e00 6f 6c 61 74 69 6f 6e 73 29 2e 20 49 66 20 50 31  olations). If P1
28e10 20 69 73 0a 2a 2a 20 7a 65 72 6f 2c 20 74 68 65   is.** zero, the
28e20 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69   jump is taken i
28e30 66 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20  f the statement 
28e40 63 6f 6e 73 74 72 61 69 6e 74 2d 63 6f 75 6e 74  constraint-count
28e50 65 72 20 69 73 20 7a 65 72 6f 0a 2a 2a 20 28 69  er is zero.** (i
28e60 6d 6d 65 64 69 61 74 65 20 66 6f 72 65 69 67 6e  mmediate foreign
28e70 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 20   key constraint 
28e80 76 69 6f 6c 61 74 69 6f 6e 73 29 2e 0a 2a 2f 0a  violations)..*/.
28e90 63 61 73 65 20 4f 50 5f 46 6b 49 66 5a 65 72 6f  case OP_FkIfZero
28ea0 3a 20 7b 20 20 20 20 20 20 20 20 20 2f 2a 20 6a  : {         /* j
28eb0 75 6d 70 20 2a 2f 0a 20 20 69 66 28 20 70 4f 70  ump */.  if( pOp
28ec0 2d 3e 70 31 20 29 7b 0a 20 20 20 20 69 66 28 20  ->p1 ){.    if( 
28ed0 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e  db->nDeferredCon
28ee0 73 3d 3d 30 20 29 20 70 63 20 3d 20 70 4f 70 2d  s==0 ) pc = pOp-
28ef0 3e 70 32 2d 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a  >p2-1;.  }else{.
28f00 20 20 20 20 69 66 28 20 70 2d 3e 6e 46 6b 43 6f      if( p->nFkCo
28f10 6e 73 74 72 61 69 6e 74 3d 3d 30 20 29 20 70 63  nstraint==0 ) pc
28f20 20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20   = pOp->p2-1;.  
28f30 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  }.  break;.}.#en
28f40 64 69 66 20 2f 2a 20 23 69 66 6e 64 65 66 20 53  dif /* #ifndef S
28f50 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49  QLITE_OMIT_FOREI
28f60 47 4e 5f 4b 45 59 20 2a 2f 0a 0a 23 69 66 6e 64  GN_KEY */..#ifnd
28f70 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ef SQLITE_OMIT_A
28f80 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 2f 2a 20  UTOINCREMENT./* 
28f90 4f 70 63 6f 64 65 3a 20 4d 65 6d 4d 61 78 20 50  Opcode: MemMax P
28fa0 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
28fb0 20 50 31 20 69 73 20 61 20 72 65 67 69 73 74 65   P1 is a registe
28fc0 72 20 69 6e 20 74 68 65 20 72 6f 6f 74 20 66 72  r in the root fr
28fd0 61 6d 65 20 6f 66 20 74 68 69 73 20 56 4d 20 28  ame of this VM (
28fe0 74 68 65 20 72 6f 6f 74 20 66 72 61 6d 65 20 69  the root frame i
28ff0 73 0a 2a 2a 20 64 69 66 66 65 72 65 6e 74 20 66  s.** different f
29000 72 6f 6d 20 74 68 65 20 63 75 72 72 65 6e 74 20  rom the current 
29010 66 72 61 6d 65 20 69 66 20 74 68 69 73 20 69 6e  frame if this in
29020 73 74 72 75 63 74 69 6f 6e 20 69 73 20 62 65 69  struction is bei
29030 6e 67 20 65 78 65 63 75 74 65 64 0a 2a 2a 20 77  ng executed.** w
29040 69 74 68 69 6e 20 61 20 73 75 62 2d 70 72 6f 67  ithin a sub-prog
29050 72 61 6d 29 2e 20 53 65 74 20 74 68 65 20 76 61  ram). Set the va
29060 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65 72 20  lue of register 
29070 50 31 20 74 6f 20 74 68 65 20 6d 61 78 69 6d 75  P1 to the maximu
29080 6d 20 6f 66 20 0a 2a 2a 20 69 74 73 20 63 75 72  m of .** its cur
29090 72 65 6e 74 20 76 61 6c 75 65 20 61 6e 64 20 74  rent value and t
290a0 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
290b0 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54  ster P2..**.** T
290c0 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
290d0 74 68 72 6f 77 73 20 61 6e 20 65 72 72 6f 72 20  throws an error 
290e0 69 66 20 74 68 65 20 6d 65 6d 6f 72 79 20 63 65  if the memory ce
290f0 6c 6c 20 69 73 20 6e 6f 74 20 69 6e 69 74 69 61  ll is not initia
29100 6c 6c 79 0a 2a 2a 20 61 6e 20 69 6e 74 65 67 65  lly.** an intege
29110 72 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 65  r..*/.case OP_Me
29120 6d 4d 61 78 3a 20 7b 20 20 20 20 20 20 20 20 2f  mMax: {        /
29130 2a 20 69 6e 32 20 2a 2f 0a 20 20 4d 65 6d 20 2a  * in2 */.  Mem *
29140 70 49 6e 31 3b 0a 20 20 56 64 62 65 46 72 61 6d  pIn1;.  VdbeFram
29150 65 20 2a 70 46 72 61 6d 65 3b 0a 20 20 69 66 28  e *pFrame;.  if(
29160 20 70 2d 3e 70 46 72 61 6d 65 20 29 7b 0a 20 20   p->pFrame ){.  
29170 20 20 66 6f 72 28 70 46 72 61 6d 65 3d 70 2d 3e    for(pFrame=p->
29180 70 46 72 61 6d 65 3b 20 70 46 72 61 6d 65 2d 3e  pFrame; pFrame->
29190 70 50 61 72 65 6e 74 3b 20 70 46 72 61 6d 65 3d  pParent; pFrame=
291a0 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 29  pFrame->pParent)
291b0 3b 0a 20 20 20 20 70 49 6e 31 20 3d 20 26 70 46  ;.    pIn1 = &pF
291c0 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e  rame->aMem[pOp->
291d0 70 31 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  p1];.  }else{.  
291e0 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
291f0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 7d 0a 20 20 61  Op->p1];.  }.  a
29200 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
29210 64 28 70 49 6e 31 29 20 29 3b 0a 20 20 73 71 6c  d(pIn1) );.  sql
29220 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67  ite3VdbeMemInteg
29230 65 72 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 70  erify(pIn1);.  p
29240 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In2 = &aMem[pOp-
29250 3e 70 32 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56  >p2];.  sqlite3V
29260 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79  dbeMemIntegerify
29270 28 70 49 6e 32 29 3b 0a 20 20 69 66 28 20 70 49  (pIn2);.  if( pI
29280 6e 31 2d 3e 75 2e 69 3c 70 49 6e 32 2d 3e 75 2e  n1->u.i<pIn2->u.
29290 69 29 7b 0a 20 20 20 20 70 49 6e 31 2d 3e 75 2e  i){.    pIn1->u.
292a0 69 20 3d 20 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20  i = pIn2->u.i;. 
292b0 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65   }.  break;.}.#e
292c0 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
292d0 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e  MIT_AUTOINCREMEN
292e0 54 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  T */../* Opcode:
292f0 20 49 66 50 6f 73 20 50 31 20 50 32 20 2a 20 2a   IfPos P1 P2 * *
29300 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20   *.**.** If the 
29310 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65  value of registe
29320 72 20 50 31 20 69 73 20 31 20 6f 72 20 67 72 65  r P1 is 1 or gre
29330 61 74 65 72 2c 20 6a 75 6d 70 20 74 6f 20 50 32  ater, jump to P2
29340 2e 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69 6c  ..**.** It is il
29350 6c 65 67 61 6c 20 74 6f 20 75 73 65 20 74 68 69  legal to use thi
29360 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e  s instruction on
29370 20 61 20 72 65 67 69 73 74 65 72 20 74 68 61 74   a register that
29380 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 63 6f 6e   does.** not con
29390 74 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e  tain an integer.
293a0 20 20 41 6e 20 61 73 73 65 72 74 69 6f 6e 20 66    An assertion f
293b0 61 75 6c 74 20 77 69 6c 6c 20 72 65 73 75 6c 74  ault will result
293c0 20 69 66 20 79 6f 75 20 74 72 79 2e 0a 2a 2f 0a   if you try..*/.
293d0 63 61 73 65 20 4f 50 5f 49 66 50 6f 73 3a 20 7b  case OP_IfPos: {
293e0 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
293f0 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d   in1 */.  pIn1 =
29400 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
29410 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d  .  assert( pIn1-
29420 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29  >flags&MEM_Int )
29430 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e  ;.  if( pIn1->u.
29440 69 3e 30 20 29 7b 0a 20 20 20 20 20 70 63 20 3d  i>0 ){.     pc =
29450 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
29460 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
29470 20 4f 70 63 6f 64 65 3a 20 49 66 4e 65 67 20 50   Opcode: IfNeg P
29480 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
29490 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 6f 66   If the value of
294a0 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20   register P1 is 
294b0 6c 65 73 73 20 74 68 61 6e 20 7a 65 72 6f 2c 20  less than zero, 
294c0 6a 75 6d 70 20 74 6f 20 50 32 2e 20 0a 2a 2a 0a  jump to P2. .**.
294d0 2a 2a 20 49 74 20 69 73 20 69 6c 6c 65 67 61 6c  ** It is illegal
294e0 20 74 6f 20 75 73 65 20 74 68 69 73 20 69 6e 73   to use this ins
294f0 74 72 75 63 74 69 6f 6e 20 6f 6e 20 61 20 72 65  truction on a re
29500 67 69 73 74 65 72 20 74 68 61 74 20 64 6f 65 73  gister that does
29510 0a 2a 2a 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20  .** not contain 
29520 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 41 6e 20  an integer.  An 
29530 61 73 73 65 72 74 69 6f 6e 20 66 61 75 6c 74 20  assertion fault 
29540 77 69 6c 6c 20 72 65 73 75 6c 74 20 69 66 20 79  will result if y
29550 6f 75 20 74 72 79 2e 0a 2a 2f 0a 63 61 73 65 20  ou try..*/.case 
29560 4f 50 5f 49 66 4e 65 67 3a 20 7b 20 20 20 20 20  OP_IfNeg: {     
29570 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20     /* jump, in1 
29580 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
29590 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  m[pOp->p1];.  as
295a0 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67  sert( pIn1->flag
295b0 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 69  s&MEM_Int );.  i
295c0 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3c 30 20 29  f( pIn1->u.i<0 )
295d0 7b 0a 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  {.     pc = pOp-
295e0 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62  >p2 - 1;.  }.  b
295f0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
29600 64 65 3a 20 49 66 5a 65 72 6f 20 50 31 20 50 32  de: IfZero P1 P2
29610 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68   P3 * *.**.** Th
29620 65 20 72 65 67 69 73 74 65 72 20 50 31 20 6d 75  e register P1 mu
29630 73 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e  st contain an in
29640 74 65 67 65 72 2e 20 20 41 64 64 20 6c 69 74 65  teger.  Add lite
29650 72 61 6c 20 50 33 20 74 6f 20 74 68 65 0a 2a 2a  ral P3 to the.**
29660 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
29670 65 72 20 50 31 2e 20 20 49 66 20 74 68 65 20 72  er P1.  If the r
29680 65 73 75 6c 74 20 69 73 20 65 78 61 63 74 6c 79  esult is exactly
29690 20 30 2c 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20   0, jump to P2. 
296a0 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69 6c 6c  .**.** It is ill
296b0 65 67 61 6c 20 74 6f 20 75 73 65 20 74 68 69 73  egal to use this
296c0 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 20   instruction on 
296d0 61 20 72 65 67 69 73 74 65 72 20 74 68 61 74 20  a register that 
296e0 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 63 6f 6e 74  does.** not cont
296f0 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 20  ain an integer. 
29700 20 41 6e 20 61 73 73 65 72 74 69 6f 6e 20 66 61   An assertion fa
29710 75 6c 74 20 77 69 6c 6c 20 72 65 73 75 6c 74 20  ult will result 
29720 69 66 20 79 6f 75 20 74 72 79 2e 0a 2a 2f 0a 63  if you try..*/.c
29730 61 73 65 20 4f 50 5f 49 66 5a 65 72 6f 3a 20 7b  ase OP_IfZero: {
29740 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
29750 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d   in1 */.  pIn1 =
29760 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
29770 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d  .  assert( pIn1-
29780 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29  >flags&MEM_Int )
29790 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 20 2b 3d  ;.  pIn1->u.i +=
297a0 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 69 66 28 20   pOp->p3;.  if( 
297b0 70 49 6e 31 2d 3e 75 2e 69 3d 3d 30 20 29 7b 0a  pIn1->u.i==0 ){.
297c0 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70       pc = pOp->p
297d0 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65  2 - 1;.  }.  bre
297e0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
297f0 3a 20 41 67 67 53 74 65 70 20 2a 20 50 32 20 50  : AggStep * P2 P
29800 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 45 78  3 P4 P5.**.** Ex
29810 65 63 75 74 65 20 74 68 65 20 73 74 65 70 20 66  ecute the step f
29820 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6e 20 61  unction for an a
29830 67 67 72 65 67 61 74 65 2e 20 20 54 68 65 0a 2a  ggregate.  The.*
29840 2a 20 66 75 6e 63 74 69 6f 6e 20 68 61 73 20 50  * function has P
29850 35 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 20 50  5 arguments.   P
29860 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  4 is a pointer t
29870 6f 20 74 68 65 20 46 75 6e 63 44 65 66 0a 2a 2a  o the FuncDef.**
29880 20 73 74 72 75 63 74 75 72 65 20 74 68 61 74 20   structure that 
29890 73 70 65 63 69 66 69 65 73 20 74 68 65 20 66 75  specifies the fu
298a0 6e 63 74 69 6f 6e 2e 20 20 55 73 65 20 72 65 67  nction.  Use reg
298b0 69 73 74 65 72 0a 2a 2a 20 50 33 20 61 73 20 74  ister.** P3 as t
298c0 68 65 20 61 63 63 75 6d 75 6c 61 74 6f 72 2e 0a  he accumulator..
298d0 2a 2a 0a 2a 2a 20 54 68 65 20 50 35 20 61 72 67  **.** The P5 arg
298e0 75 6d 65 6e 74 73 20 61 72 65 20 74 61 6b 65 6e  uments are taken
298f0 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50   from register P
29900 32 20 61 6e 64 20 69 74 73 0a 2a 2a 20 73 75 63  2 and its.** suc
29910 63 65 73 73 6f 72 73 2e 0a 2a 2f 0a 63 61 73 65  cessors..*/.case
29920 20 4f 50 5f 41 67 67 53 74 65 70 3a 20 7b 0a 20   OP_AggStep: {. 
29930 20 69 6e 74 20 6e 3b 0a 20 20 69 6e 74 20 69 3b   int n;.  int i;
29940 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20  .  Mem *pMem;.  
29950 4d 65 6d 20 2a 70 52 65 63 3b 0a 20 20 73 71 6c  Mem *pRec;.  sql
29960 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 63 74 78  ite3_context ctx
29970 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  ;.  sqlite3_valu
29980 65 20 2a 2a 61 70 56 61 6c 3b 0a 0a 20 20 6e 20  e **apVal;..  n 
29990 3d 20 70 4f 70 2d 3e 70 35 3b 0a 20 20 61 73 73  = pOp->p5;.  ass
299a0 65 72 74 28 20 6e 3e 3d 30 20 29 3b 0a 20 20 70  ert( n>=0 );.  p
299b0 52 65 63 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Rec = &aMem[pOp-
299c0 3e 70 32 5d 3b 0a 20 20 61 70 56 61 6c 20 3d 20  >p2];.  apVal = 
299d0 70 2d 3e 61 70 41 72 67 3b 0a 20 20 61 73 73 65  p->apArg;.  asse
299e0 72 74 28 20 61 70 56 61 6c 20 7c 7c 20 6e 3d 3d  rt( apVal || n==
299f0 30 20 29 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20  0 );.  for(i=0; 
29a00 69 3c 6e 3b 20 69 2b 2b 2c 20 70 52 65 63 2b 2b  i<n; i++, pRec++
29a10 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d  ){.    assert( m
29a20 65 6d 49 73 56 61 6c 69 64 28 70 52 65 63 29 20  emIsValid(pRec) 
29a30 29 3b 0a 20 20 20 20 61 70 56 61 6c 5b 69 5d 20  );.    apVal[i] 
29a40 3d 20 70 52 65 63 3b 0a 20 20 20 20 6d 65 6d 41  = pRec;.    memA
29a50 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
29a60 70 52 65 63 29 3b 0a 20 20 20 20 73 71 6c 69 74  pRec);.    sqlit
29a70 65 33 56 64 62 65 4d 65 6d 53 74 6f 72 65 54 79  e3VdbeMemStoreTy
29a80 70 65 28 70 52 65 63 29 3b 0a 20 20 7d 0a 20 20  pe(pRec);.  }.  
29a90 63 74 78 2e 70 46 75 6e 63 20 3d 20 70 4f 70 2d  ctx.pFunc = pOp-
29aa0 3e 70 34 2e 70 46 75 6e 63 3b 0a 20 20 61 73 73  >p4.pFunc;.  ass
29ab0 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26  ert( pOp->p3>0 &
29ac0 26 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d  & pOp->p3<=p->nM
29ad0 65 6d 20 29 3b 0a 20 20 63 74 78 2e 70 4d 65 6d  em );.  ctx.pMem
29ae0 20 3d 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b   = pMem = &aMem[
29af0 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 70 4d 65 6d  pOp->p3];.  pMem
29b00 2d 3e 6e 2b 2b 3b 0a 20 20 63 74 78 2e 73 2e 66  ->n++;.  ctx.s.f
29b10 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b  lags = MEM_Null;
29b20 0a 20 20 63 74 78 2e 73 2e 7a 20 3d 20 30 3b 0a  .  ctx.s.z = 0;.
29b30 20 20 63 74 78 2e 73 2e 7a 4d 61 6c 6c 6f 63 20    ctx.s.zMalloc 
29b40 3d 20 30 3b 0a 20 20 63 74 78 2e 73 2e 78 44 65  = 0;.  ctx.s.xDe
29b50 6c 20 3d 20 30 3b 0a 20 20 63 74 78 2e 73 2e 64  l = 0;.  ctx.s.d
29b60 62 20 3d 20 64 62 3b 0a 20 20 63 74 78 2e 69 73  b = db;.  ctx.is
29b70 45 72 72 6f 72 20 3d 20 30 3b 0a 20 20 63 74 78  Error = 0;.  ctx
29b80 2e 70 43 6f 6c 6c 20 3d 20 30 3b 0a 20 20 69 66  .pColl = 0;.  if
29b90 28 20 63 74 78 2e 70 46 75 6e 63 2d 3e 66 6c 61  ( ctx.pFunc->fla
29ba0 67 73 20 26 20 53 51 4c 49 54 45 5f 46 55 4e 43  gs & SQLITE_FUNC
29bb0 5f 4e 45 45 44 43 4f 4c 4c 20 29 7b 0a 20 20 20  _NEEDCOLL ){.   
29bc0 20 61 73 73 65 72 74 28 20 70 4f 70 3e 70 2d 3e   assert( pOp>p->
29bd0 61 4f 70 20 29 3b 0a 20 20 20 20 61 73 73 65 72  aOp );.    asser
29be0 74 28 20 70 4f 70 5b 2d 31 5d 2e 70 34 74 79 70  t( pOp[-1].p4typ
29bf0 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51 20 29 3b  e==P4_COLLSEQ );
29c00 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
29c10 5b 2d 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  [-1].opcode==OP_
29c20 43 6f 6c 6c 53 65 71 20 29 3b 0a 20 20 20 20 63  CollSeq );.    c
29c30 74 78 2e 70 43 6f 6c 6c 20 3d 20 70 4f 70 5b 2d  tx.pColl = pOp[-
29c40 31 5d 2e 70 34 2e 70 43 6f 6c 6c 3b 0a 20 20 7d  1].p4.pColl;.  }
29c50 0a 20 20 28 63 74 78 2e 70 46 75 6e 63 2d 3e 78  .  (ctx.pFunc->x
29c60 53 74 65 70 29 28 26 63 74 78 2c 20 6e 2c 20 61  Step)(&ctx, n, a
29c70 70 56 61 6c 29 3b 20 2f 2a 20 49 4d 50 3a 20 52  pVal); /* IMP: R
29c80 2d 32 34 35 30 35 2d 32 33 32 33 30 20 2a 2f 0a  -24505-23230 */.
29c90 20 20 69 66 28 20 63 74 78 2e 69 73 45 72 72 6f    if( ctx.isErro
29ca0 72 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  r ){.    sqlite3
29cb0 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45  SetString(&p->zE
29cc0 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 22 2c  rrMsg, db, "%s",
29cd0 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74   sqlite3_value_t
29ce0 65 78 74 28 26 63 74 78 2e 73 29 29 3b 0a 20 20  ext(&ctx.s));.  
29cf0 20 20 72 63 20 3d 20 63 74 78 2e 69 73 45 72 72    rc = ctx.isErr
29d00 6f 72 3b 0a 20 20 7d 0a 0a 20 20 73 71 6c 69 74  or;.  }..  sqlit
29d10 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65  e3VdbeMemRelease
29d20 28 26 63 74 78 2e 73 29 3b 0a 0a 20 20 62 72 65  (&ctx.s);..  bre
29d30 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
29d40 3a 20 41 67 67 46 69 6e 61 6c 20 50 31 20 50 32  : AggFinal P1 P2
29d50 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 45 78   * P4 *.**.** Ex
29d60 65 63 75 74 65 20 74 68 65 20 66 69 6e 61 6c 69  ecute the finali
29d70 7a 65 72 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72  zer function for
29d80 20 61 6e 20 61 67 67 72 65 67 61 74 65 2e 20 20   an aggregate.  
29d90 50 31 20 69 73 0a 2a 2a 20 74 68 65 20 6d 65 6d  P1 is.** the mem
29da0 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61  ory location tha
29db0 74 20 69 73 20 74 68 65 20 61 63 63 75 6d 75 6c  t is the accumul
29dc0 61 74 6f 72 20 66 6f 72 20 74 68 65 20 61 67 67  ator for the agg
29dd0 72 65 67 61 74 65 2e 0a 2a 2a 0a 2a 2a 20 50 32  regate..**.** P2
29de0 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   is the number o
29df0 66 20 61 72 67 75 6d 65 6e 74 73 20 74 68 61 74  f arguments that
29e00 20 74 68 65 20 73 74 65 70 20 66 75 6e 63 74 69   the step functi
29e10 6f 6e 20 74 61 6b 65 73 20 61 6e 64 0a 2a 2a 20  on takes and.** 
29e20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20  P4 is a pointer 
29e30 74 6f 20 74 68 65 20 46 75 6e 63 44 65 66 20 66  to the FuncDef f
29e40 6f 72 20 74 68 69 73 20 66 75 6e 63 74 69 6f 6e  or this function
29e50 2e 20 20 54 68 65 20 50 32 0a 2a 2a 20 61 72 67  .  The P2.** arg
29e60 75 6d 65 6e 74 20 69 73 20 6e 6f 74 20 75 73 65  ument is not use
29e70 64 20 62 79 20 74 68 69 73 20 6f 70 63 6f 64 65  d by this opcode
29e80 2e 20 20 49 74 20 69 73 20 6f 6e 6c 79 20 74 68  .  It is only th
29e90 65 72 65 20 74 6f 20 64 69 73 61 6d 62 69 67 75  ere to disambigu
29ea0 61 74 65 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73  ate.** functions
29eb0 20 74 68 61 74 20 63 61 6e 20 74 61 6b 65 20 76   that can take v
29ec0 61 72 79 69 6e 67 20 6e 75 6d 62 65 72 73 20 6f  arying numbers o
29ed0 66 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 54 68  f arguments.  Th
29ee0 65 0a 2a 2a 20 50 34 20 61 72 67 75 6d 65 6e 74  e.** P4 argument
29ef0 20 69 73 20 6f 6e 6c 79 20 6e 65 65 64 65 64 20   is only needed 
29f00 66 6f 72 20 74 68 65 20 64 65 67 65 6e 65 72 61  for the degenera
29f10 74 65 20 63 61 73 65 20 77 68 65 72 65 0a 2a 2a  te case where.**
29f20 20 74 68 65 20 73 74 65 70 20 66 75 6e 63 74 69   the step functi
29f30 6f 6e 20 77 61 73 20 6e 6f 74 20 70 72 65 76 69  on was not previ
29f40 6f 75 73 6c 79 20 63 61 6c 6c 65 64 2e 0a 2a 2f  ously called..*/
29f50 0a 63 61 73 65 20 4f 50 5f 41 67 67 46 69 6e 61  .case OP_AggFina
29f60 6c 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d  l: {.  Mem *pMem
29f70 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
29f80 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e 70 31  >p1>0 && pOp->p1
29f90 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70  <=p->nMem );.  p
29fa0 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Mem = &aMem[pOp-
29fb0 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
29fc0 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 7e  (pMem->flags & ~
29fd0 28 4d 45 4d 5f 4e 75 6c 6c 7c 4d 45 4d 5f 41 67  (MEM_Null|MEM_Ag
29fe0 67 29 29 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d  g))==0 );.  rc =
29ff0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 46   sqlite3VdbeMemF
2a000 69 6e 61 6c 69 7a 65 28 70 4d 65 6d 2c 20 70 4f  inalize(pMem, pO
2a010 70 2d 3e 70 34 2e 70 46 75 6e 63 29 3b 0a 20 20  p->p4.pFunc);.  
2a020 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20 73 71  if( rc ){.    sq
2a030 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26  lite3SetString(&
2a040 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20  p->zErrMsg, db, 
2a050 22 25 73 22 2c 20 73 71 6c 69 74 65 33 5f 76 61  "%s", sqlite3_va
2a060 6c 75 65 5f 74 65 78 74 28 70 4d 65 6d 29 29 3b  lue_text(pMem));
2a070 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 56 64  .  }.  sqlite3Vd
2a080 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67  beChangeEncoding
2a090 28 70 4d 65 6d 2c 20 65 6e 63 6f 64 69 6e 67 29  (pMem, encoding)
2a0a0 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  ;.  UPDATE_MAX_B
2a0b0 4c 4f 42 53 49 5a 45 28 70 4d 65 6d 29 3b 0a 20  LOBSIZE(pMem);. 
2a0c0 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65   if( sqlite3Vdbe
2a0d0 4d 65 6d 54 6f 6f 42 69 67 28 70 4d 65 6d 29 20  MemTooBig(pMem) 
2a0e0 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f  ){.    goto too_
2a0f0 62 69 67 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  big;.  }.  break
2a100 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  ;.}..#ifndef SQL
2a110 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 2f 2a 20  ITE_OMIT_WAL./* 
2a120 4f 70 63 6f 64 65 3a 20 43 68 65 63 6b 70 6f 69  Opcode: Checkpoi
2a130 6e 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  nt P1 P2 P3 * *.
2a140 2a 2a 0a 2a 2a 20 43 68 65 63 6b 70 6f 69 6e 74  **.** Checkpoint
2a150 20 64 61 74 61 62 61 73 65 20 50 31 2e 20 54 68   database P1. Th
2a160 69 73 20 69 73 20 61 20 6e 6f 2d 6f 70 20 69 66  is is a no-op if
2a170 20 50 31 20 69 73 20 6e 6f 74 20 63 75 72 72 65   P1 is not curre
2a180 6e 74 6c 79 20 69 6e 0a 2a 2a 20 57 41 4c 20 6d  ntly in.** WAL m
2a190 6f 64 65 2e 20 50 61 72 61 6d 65 74 65 72 20 50  ode. Parameter P
2a1a0 32 20 69 73 20 6f 6e 65 20 6f 66 20 53 51 4c 49  2 is one of SQLI
2a1b0 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 50 41  TE_CHECKPOINT_PA
2a1c0 53 53 49 56 45 2c 20 46 55 4c 4c 0a 2a 2a 20 6f  SSIVE, FULL.** o
2a1d0 72 20 52 45 53 54 41 52 54 2e 20 20 57 72 69 74  r RESTART.  Writ
2a1e0 65 20 31 20 6f 72 20 30 20 69 6e 74 6f 20 6d 65  e 1 or 0 into me
2a1f0 6d 5b 50 33 5d 20 69 66 20 74 68 65 20 63 68 65  m[P3] if the che
2a200 63 6b 70 6f 69 6e 74 20 72 65 74 75 72 6e 73 0a  ckpoint returns.
2a210 2a 2a 20 53 51 4c 49 54 45 5f 42 55 53 59 20 6f  ** SQLITE_BUSY o
2a220 72 20 6e 6f 74 2c 20 72 65 73 70 65 63 74 69 76  r not, respectiv
2a230 65 6c 79 2e 20 20 57 72 69 74 65 20 74 68 65 20  ely.  Write the 
2a240 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20  number of pages 
2a250 69 6e 20 74 68 65 0a 2a 2a 20 57 41 4c 20 61 66  in the.** WAL af
2a260 74 65 72 20 74 68 65 20 63 68 65 63 6b 70 6f 69  ter the checkpoi
2a270 6e 74 20 69 6e 74 6f 20 6d 65 6d 5b 50 33 2b 31  nt into mem[P3+1
2a280 5d 20 61 6e 64 20 74 68 65 20 6e 75 6d 62 65 72  ] and the number
2a290 20 6f 66 20 70 61 67 65 73 0a 2a 2a 20 69 6e 20   of pages.** in 
2a2a0 74 68 65 20 57 41 4c 20 74 68 61 74 20 68 61 76  the WAL that hav
2a2b0 65 20 62 65 65 6e 20 63 68 65 63 6b 70 6f 69 6e  e been checkpoin
2a2c0 74 65 64 20 61 66 74 65 72 20 74 68 65 20 63 68  ted after the ch
2a2d0 65 63 6b 70 6f 69 6e 74 0a 2a 2a 20 63 6f 6d 70  eckpoint.** comp
2a2e0 6c 65 74 65 73 20 69 6e 74 6f 20 6d 65 6d 5b 50  letes into mem[P
2a2f0 33 2b 32 5d 2e 20 20 48 6f 77 65 76 65 72 20 6f  3+2].  However o
2a300 6e 20 61 6e 20 65 72 72 6f 72 2c 20 6d 65 6d 5b  n an error, mem[
2a310 50 33 2b 31 5d 20 61 6e 64 0a 2a 2a 20 6d 65 6d  P3+1] and.** mem
2a320 5b 50 33 2b 32 5d 20 61 72 65 20 69 6e 69 74 69  [P3+2] are initi
2a330 61 6c 69 7a 65 64 20 74 6f 20 2d 31 2e 0a 2a 2f  alized to -1..*/
2a340 0a 63 61 73 65 20 4f 50 5f 43 68 65 63 6b 70 6f  .case OP_Checkpo
2a350 69 6e 74 3a 20 7b 0a 20 20 69 6e 74 20 69 3b 20  int: {.  int i; 
2a360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a370 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70           /* Loop
2a380 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 69 6e   counter */.  in
2a390 74 20 61 52 65 73 5b 33 5d 3b 20 20 20 20 20 20  t aRes[3];      
2a3a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
2a3b0 20 52 65 73 75 6c 74 73 20 2a 2f 0a 20 20 4d 65   Results */.  Me
2a3c0 6d 20 2a 70 4d 65 6d 3b 20 20 20 20 20 20 20 20  m *pMem;        
2a3d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
2a3e0 20 57 72 69 74 65 20 72 65 73 75 6c 74 73 20 68   Write results h
2a3f0 65 72 65 20 2a 2f 0a 0a 20 20 61 52 65 73 5b 30  ere */..  aRes[0
2a400 5d 20 3d 20 30 3b 0a 20 20 61 52 65 73 5b 31 5d  ] = 0;.  aRes[1]
2a410 20 3d 20 61 52 65 73 5b 32 5d 20 3d 20 2d 31 3b   = aRes[2] = -1;
2a420 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
2a430 70 32 3d 3d 53 51 4c 49 54 45 5f 43 48 45 43 4b  p2==SQLITE_CHECK
2a440 50 4f 49 4e 54 5f 50 41 53 53 49 56 45 0a 20 20  POINT_PASSIVE.  
2a450 20 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d       || pOp->p2=
2a460 3d 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49  =SQLITE_CHECKPOI
2a470 4e 54 5f 46 55 4c 4c 0a 20 20 20 20 20 20 20 7c  NT_FULL.       |
2a480 7c 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54  | pOp->p2==SQLIT
2a490 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 52 45 53  E_CHECKPOINT_RES
2a4a0 54 41 52 54 0a 20 20 29 3b 0a 20 20 72 63 20 3d  TART.  );.  rc =
2a4b0 20 73 71 6c 69 74 65 33 43 68 65 63 6b 70 6f 69   sqlite3Checkpoi
2a4c0 6e 74 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20  nt(db, pOp->p1, 
2a4d0 70 4f 70 2d 3e 70 32 2c 20 26 61 52 65 73 5b 31  pOp->p2, &aRes[1
2a4e0 5d 2c 20 26 61 52 65 73 5b 32 5d 29 3b 0a 20 20  ], &aRes[2]);.  
2a4f0 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42  if( rc==SQLITE_B
2a500 55 53 59 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  USY ){.    rc = 
2a510 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 61  SQLITE_OK;.    a
2a520 52 65 73 5b 30 5d 20 3d 20 31 3b 0a 20 20 7d 0a  Res[0] = 1;.  }.
2a530 20 20 66 6f 72 28 69 3d 30 2c 20 70 4d 65 6d 20    for(i=0, pMem 
2a540 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
2a550 3b 20 69 3c 33 3b 20 69 2b 2b 2c 20 70 4d 65 6d  ; i<3; i++, pMem
2a560 2b 2b 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  ++){.    sqlite3
2a570 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28  VdbeMemSetInt64(
2a580 70 4d 65 6d 2c 20 28 69 36 34 29 61 52 65 73 5b  pMem, (i64)aRes[
2a590 69 5d 29 3b 0a 20 20 7d 20 20 20 20 0a 20 20 62  i]);.  }    .  b
2a5a0 72 65 61 6b 3b 0a 7d 3b 20 20 0a 23 65 6e 64 69  reak;.};  .#endi
2a5b0 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  f..#ifndef SQLIT
2a5c0 45 5f 4f 4d 49 54 5f 50 52 41 47 4d 41 0a 2f 2a  E_OMIT_PRAGMA./*
2a5d0 20 4f 70 63 6f 64 65 3a 20 4a 6f 75 72 6e 61 6c   Opcode: Journal
2a5e0 4d 6f 64 65 20 50 31 20 50 32 20 50 33 20 2a 20  Mode P1 P2 P3 * 
2a5f0 50 35 0a 2a 2a 0a 2a 2a 20 43 68 61 6e 67 65 20  P5.**.** Change 
2a600 74 68 65 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65  the journal mode
2a610 20 6f 66 20 64 61 74 61 62 61 73 65 20 50 31 20   of database P1 
2a620 74 6f 20 50 33 2e 20 50 33 20 6d 75 73 74 20 62  to P3. P3 must b
2a630 65 20 6f 6e 65 20 6f 66 20 74 68 65 0a 2a 2a 20  e one of the.** 
2a640 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
2a650 45 5f 58 58 58 20 76 61 6c 75 65 73 2e 20 49 66  E_XXX values. If
2a660 20 63 68 61 6e 67 69 6e 67 20 62 65 74 77 65 65   changing betwee
2a670 6e 20 74 68 65 20 76 61 72 69 6f 75 73 20 72 6f  n the various ro
2a680 6c 6c 62 61 63 6b 0a 2a 2a 20 6d 6f 64 65 73 20  llback.** modes 
2a690 28 64 65 6c 65 74 65 2c 20 74 72 75 6e 63 61 74  (delete, truncat
2a6a0 65 2c 20 70 65 72 73 69 73 74 2c 20 6f 66 66 20  e, persist, off 
2a6b0 61 6e 64 20 6d 65 6d 6f 72 79 29 2c 20 74 68 69  and memory), thi
2a6c0 73 20 69 73 20 61 20 73 69 6d 70 6c 65 0a 2a 2a  s is a simple.**
2a6d0 20 6f 70 65 72 61 74 69 6f 6e 2e 20 4e 6f 20 49   operation. No I
2a6e0 4f 20 69 73 20 72 65 71 75 69 72 65 64 2e 0a 2a  O is required..*
2a6f0 2a 0a 2a 2a 20 49 66 20 63 68 61 6e 67 69 6e 67  *.** If changing
2a700 20 69 6e 74 6f 20 6f 72 20 6f 75 74 20 6f 66 20   into or out of 
2a710 57 41 4c 20 6d 6f 64 65 20 74 68 65 20 70 72 6f  WAL mode the pro
2a720 63 65 64 75 72 65 20 69 73 20 6d 6f 72 65 20 63  cedure is more c
2a730 6f 6d 70 6c 69 63 61 74 65 64 2e 0a 2a 2a 0a 2a  omplicated..**.*
2a740 2a 20 57 72 69 74 65 20 61 20 73 74 72 69 6e 67  * Write a string
2a750 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
2a760 66 69 6e 61 6c 20 6a 6f 75 72 6e 61 6c 2d 6d 6f  final journal-mo
2a770 64 65 20 74 6f 20 72 65 67 69 73 74 65 72 20 50  de to register P
2a780 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4a 6f  2..*/.case OP_Jo
2a790 75 72 6e 61 6c 4d 6f 64 65 3a 20 7b 20 20 20 20  urnalMode: {    
2a7a0 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61  /* out2-prerelea
2a7b0 73 65 20 2a 2f 0a 20 20 42 74 72 65 65 20 2a 70  se */.  Btree *p
2a7c0 42 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  Bt;             
2a7d0 20 20 20 20 20 20 20 20 2f 2a 20 42 74 72 65 65          /* Btree
2a7e0 20 74 6f 20 63 68 61 6e 67 65 20 6a 6f 75 72 6e   to change journ
2a7f0 61 6c 20 6d 6f 64 65 20 6f 66 20 2a 2f 0a 20 20  al mode of */.  
2a800 50 61 67 65 72 20 2a 70 50 61 67 65 72 3b 20 20  Pager *pPager;  
2a810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a820 2f 2a 20 50 61 67 65 72 20 61 73 73 6f 63 69 61  /* Pager associa
2a830 74 65 64 20 77 69 74 68 20 70 42 74 20 2a 2f 0a  ted with pBt */.
2a840 20 20 69 6e 74 20 65 4e 65 77 3b 20 20 20 20 20    int eNew;     
2a850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a860 20 20 2f 2a 20 4e 65 77 20 6a 6f 75 72 6e 61 6c    /* New journal
2a870 20 6d 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20 65   mode */.  int e
2a880 4f 6c 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  Old;            
2a890 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
2a8a0 65 20 6f 6c 64 20 6a 6f 75 72 6e 61 6c 20 6d 6f  e old journal mo
2a8b0 64 65 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  de */.  const ch
2a8c0 61 72 20 2a 7a 46 69 6c 65 6e 61 6d 65 3b 20 20  ar *zFilename;  
2a8d0 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20          /* Name 
2a8e0 6f 66 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  of database file
2a8f0 20 66 6f 72 20 70 50 61 67 65 72 20 2a 2f 0a 0a   for pPager */..
2a900 20 20 65 4e 65 77 20 3d 20 70 4f 70 2d 3e 70 33    eNew = pOp->p3
2a910 3b 0a 20 20 61 73 73 65 72 74 28 20 65 4e 65 77  ;.  assert( eNew
2a920 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
2a930 4f 44 45 5f 44 45 4c 45 54 45 20 0a 20 20 20 20  ODE_DELETE .    
2a940 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45     || eNew==PAGE
2a950 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 54 52  R_JOURNALMODE_TR
2a960 55 4e 43 41 54 45 20 0a 20 20 20 20 20 20 20 7c  UNCATE .       |
2a970 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f  | eNew==PAGER_JO
2a980 55 52 4e 41 4c 4d 4f 44 45 5f 50 45 52 53 49 53  URNALMODE_PERSIS
2a990 54 20 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65  T .       || eNe
2a9a0 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  w==PAGER_JOURNAL
2a9b0 4d 4f 44 45 5f 4f 46 46 0a 20 20 20 20 20 20 20  MODE_OFF.       
2a9c0 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a  || eNew==PAGER_J
2a9d0 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4d 45 4d 4f 52  OURNALMODE_MEMOR
2a9e0 59 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77  Y.       || eNew
2a9f0 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
2aa00 4f 44 45 5f 57 41 4c 0a 20 20 20 20 20 20 20 7c  ODE_WAL.       |
2aa10 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f  | eNew==PAGER_JO
2aa20 55 52 4e 41 4c 4d 4f 44 45 5f 51 55 45 52 59 0a  URNALMODE_QUERY.
2aa30 20 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70    );.  assert( p
2aa40 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
2aa50 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a  ->p1<db->nDb );.
2aa60 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62  .  pBt = db->aDb
2aa70 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20  [pOp->p1].pBt;. 
2aa80 20 70 50 61 67 65 72 20 3d 20 73 71 6c 69 74 65   pPager = sqlite
2aa90 33 42 74 72 65 65 50 61 67 65 72 28 70 42 74 29  3BtreePager(pBt)
2aaa0 3b 0a 20 20 65 4f 6c 64 20 3d 20 73 71 6c 69 74  ;.  eOld = sqlit
2aab0 65 33 50 61 67 65 72 47 65 74 4a 6f 75 72 6e 61  e3PagerGetJourna
2aac0 6c 4d 6f 64 65 28 70 50 61 67 65 72 29 3b 0a 20  lMode(pPager);. 
2aad0 20 69 66 28 20 65 4e 65 77 3d 3d 50 41 47 45 52   if( eNew==PAGER
2aae0 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 51 55 45  _JOURNALMODE_QUE
2aaf0 52 59 20 29 20 65 4e 65 77 20 3d 20 65 4f 6c 64  RY ) eNew = eOld
2ab00 3b 0a 20 20 69 66 28 20 21 73 71 6c 69 74 65 33  ;.  if( !sqlite3
2ab10 50 61 67 65 72 4f 6b 54 6f 43 68 61 6e 67 65 4a  PagerOkToChangeJ
2ab20 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65  ournalMode(pPage
2ab30 72 29 20 29 20 65 4e 65 77 20 3d 20 65 4f 6c 64  r) ) eNew = eOld
2ab40 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  ;..#ifndef SQLIT
2ab50 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 7a 46 69  E_OMIT_WAL.  zFi
2ab60 6c 65 6e 61 6d 65 20 3d 20 73 71 6c 69 74 65 33  lename = sqlite3
2ab70 50 61 67 65 72 46 69 6c 65 6e 61 6d 65 28 70 50  PagerFilename(pP
2ab80 61 67 65 72 29 3b 0a 0a 20 20 2f 2a 20 44 6f 20  ager);..  /* Do 
2ab90 6e 6f 74 20 61 6c 6c 6f 77 20 61 20 74 72 61 6e  not allow a tran
2aba0 73 69 74 69 6f 6e 20 74 6f 20 6a 6f 75 72 6e 61  sition to journa
2abb0 6c 5f 6d 6f 64 65 3d 57 41 4c 20 66 6f 72 20 61  l_mode=WAL for a
2abc0 20 64 61 74 61 62 61 73 65 0a 20 20 2a 2a 20 69   database.  ** i
2abd0 6e 20 74 65 6d 70 6f 72 61 72 79 20 73 74 6f 72  n temporary stor
2abe0 61 67 65 20 6f 72 20 69 66 20 74 68 65 20 56 46  age or if the VF
2abf0 53 20 64 6f 65 73 20 6e 6f 74 20 73 75 70 70 6f  S does not suppo
2ac00 72 74 20 73 68 61 72 65 64 20 6d 65 6d 6f 72 79  rt shared memory
2ac10 20 0a 20 20 2a 2f 0a 20 20 69 66 28 20 65 4e 65   .  */.  if( eNe
2ac20 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  w==PAGER_JOURNAL
2ac30 4d 4f 44 45 5f 57 41 4c 0a 20 20 20 26 26 20 28  MODE_WAL.   && (
2ac40 7a 46 69 6c 65 6e 61 6d 65 5b 30 5d 3d 3d 30 20  zFilename[0]==0 
2ac50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ac60 20 20 20 20 20 20 20 20 2f 2a 20 54 65 6d 70 20          /* Temp 
2ac70 66 69 6c 65 20 2a 2f 0a 20 20 20 20 20 20 20 7c  file */.       |
2ac80 7c 20 21 73 71 6c 69 74 65 33 50 61 67 65 72 57  | !sqlite3PagerW
2ac90 61 6c 53 75 70 70 6f 72 74 65 64 28 70 50 61 67  alSupported(pPag
2aca0 65 72 29 29 20 20 20 2f 2a 20 4e 6f 20 73 68 61  er))   /* No sha
2acb0 72 65 64 2d 6d 65 6d 6f 72 79 20 73 75 70 70 6f  red-memory suppo
2acc0 72 74 20 2a 2f 0a 20 20 29 7b 0a 20 20 20 20 65  rt */.  ){.    e
2acd0 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a 20 20 7d 0a  New = eOld;.  }.
2ace0 0a 20 20 69 66 28 20 28 65 4e 65 77 21 3d 65 4f  .  if( (eNew!=eO
2acf0 6c 64 29 0a 20 20 20 26 26 20 28 65 4f 6c 64 3d  ld).   && (eOld=
2ad00 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f  =PAGER_JOURNALMO
2ad10 44 45 5f 57 41 4c 20 7c 7c 20 65 4e 65 77 3d 3d  DE_WAL || eNew==
2ad20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
2ad30 45 5f 57 41 4c 29 0a 20 20 29 7b 0a 20 20 20 20  E_WAL).  ){.    
2ad40 69 66 28 20 21 64 62 2d 3e 61 75 74 6f 43 6f 6d  if( !db->autoCom
2ad50 6d 69 74 20 7c 7c 20 64 62 2d 3e 61 63 74 69 76  mit || db->activ
2ad60 65 56 64 62 65 43 6e 74 3e 31 20 29 7b 0a 20 20  eVdbeCnt>1 ){.  
2ad70 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
2ad80 45 52 52 4f 52 3b 0a 20 20 20 20 20 20 73 71 6c  ERROR;.      sql
2ad90 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70  ite3SetString(&p
2ada0 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 0a  ->zErrMsg, db, .
2adb0 20 20 20 20 20 20 20 20 20 20 22 63 61 6e 6e 6f            "canno
2adc0 74 20 63 68 61 6e 67 65 20 25 73 20 77 61 6c 20  t change %s wal 
2add0 6d 6f 64 65 20 66 72 6f 6d 20 77 69 74 68 69 6e  mode from within
2ade0 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 22 2c   a transaction",
2adf0 0a 20 20 20 20 20 20 20 20 20 20 28 65 4e 65 77  .          (eNew
2ae00 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
2ae10 4f 44 45 5f 57 41 4c 20 3f 20 22 69 6e 74 6f 22  ODE_WAL ? "into"
2ae20 20 3a 20 22 6f 75 74 20 6f 66 22 29 0a 20 20 20   : "out of").   
2ae30 20 20 20 29 3b 0a 20 20 20 20 20 20 62 72 65 61     );.      brea
2ae40 6b 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 0a  k;.    }else{. .
2ae50 20 20 20 20 20 20 69 66 28 20 65 4f 6c 64 3d 3d        if( eOld==
2ae60 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
2ae70 45 5f 57 41 4c 20 29 7b 0a 20 20 20 20 20 20 20  E_WAL ){.       
2ae80 20 2f 2a 20 49 66 20 6c 65 61 76 69 6e 67 20 57   /* If leaving W
2ae90 41 4c 20 6d 6f 64 65 2c 20 63 6c 6f 73 65 20 74  AL mode, close t
2aea0 68 65 20 6c 6f 67 20 66 69 6c 65 2e 20 49 66 20  he log file. If 
2aeb0 73 75 63 63 65 73 73 66 75 6c 2c 20 74 68 65 20  successful, the 
2aec0 63 61 6c 6c 0a 20 20 20 20 20 20 20 20 2a 2a 20  call.        ** 
2aed0 74 6f 20 50 61 67 65 72 43 6c 6f 73 65 57 61 6c  to PagerCloseWal
2aee0 28 29 20 63 68 65 63 6b 70 6f 69 6e 74 73 20 61  () checkpoints a
2aef0 6e 64 20 64 65 6c 65 74 65 73 20 74 68 65 20 77  nd deletes the w
2af00 72 69 74 65 2d 61 68 65 61 64 2d 6c 6f 67 20 0a  rite-ahead-log .
2af10 20 20 20 20 20 20 20 20 2a 2a 20 66 69 6c 65 2e          ** file.
2af20 20 41 6e 20 45 58 43 4c 55 53 49 56 45 20 6c 6f   An EXCLUSIVE lo
2af30 63 6b 20 6d 61 79 20 73 74 69 6c 6c 20 62 65 20  ck may still be 
2af40 68 65 6c 64 20 6f 6e 20 74 68 65 20 64 61 74 61  held on the data
2af50 62 61 73 65 20 66 69 6c 65 20 0a 20 20 20 20 20  base file .     
2af60 20 20 20 2a 2a 20 61 66 74 65 72 20 61 20 73 75     ** after a su
2af70 63 63 65 73 73 66 75 6c 20 72 65 74 75 72 6e 2e  ccessful return.
2af80 20 0a 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 20   .        */.   
2af90 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
2afa0 33 50 61 67 65 72 43 6c 6f 73 65 57 61 6c 28 70  3PagerCloseWal(p
2afb0 50 61 67 65 72 29 3b 0a 20 20 20 20 20 20 20 20  Pager);.        
2afc0 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
2afd0 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73  K ){.          s
2afe0 71 6c 69 74 65 33 50 61 67 65 72 53 65 74 4a 6f  qlite3PagerSetJo
2aff0 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65 72  urnalMode(pPager
2b000 2c 20 65 4e 65 77 29 3b 0a 20 20 20 20 20 20 20  , eNew);.       
2b010 20 7d 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69   }.      }else i
2b020 66 28 20 65 4f 6c 64 3d 3d 50 41 47 45 52 5f 4a  f( eOld==PAGER_J
2b030 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4d 45 4d 4f 52  OURNALMODE_MEMOR
2b040 59 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20  Y ){.        /* 
2b050 43 61 6e 6e 6f 74 20 74 72 61 6e 73 69 74 69 6f  Cannot transitio
2b060 6e 20 64 69 72 65 63 74 6c 79 20 66 72 6f 6d 20  n directly from 
2b070 4d 45 4d 4f 52 59 20 74 6f 20 57 41 4c 2e 20 20  MEMORY to WAL.  
2b080 55 73 65 20 6d 6f 64 65 20 4f 46 46 0a 20 20 20  Use mode OFF.   
2b090 20 20 20 20 20 2a 2a 20 61 73 20 61 6e 20 69 6e       ** as an in
2b0a0 74 65 72 6d 65 64 69 61 74 65 20 2a 2f 0a 20 20  termediate */.  
2b0b0 20 20 20 20 20 20 73 71 6c 69 74 65 33 50 61 67        sqlite3Pag
2b0c0 65 72 53 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65  erSetJournalMode
2b0d0 28 70 50 61 67 65 72 2c 20 50 41 47 45 52 5f 4a  (pPager, PAGER_J
2b0e0 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4f 46 46 29 3b  OURNALMODE_OFF);
2b0f0 0a 20 20 20 20 20 20 7d 0a 20 20 0a 20 20 20 20  .      }.  .    
2b100 20 20 2f 2a 20 4f 70 65 6e 20 61 20 74 72 61 6e    /* Open a tran
2b110 73 61 63 74 69 6f 6e 20 6f 6e 20 74 68 65 20 64  saction on the d
2b120 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20 52 65  atabase file. Re
2b130 67 61 72 64 6c 65 73 73 20 6f 66 20 74 68 65 20  gardless of the 
2b140 6a 6f 75 72 6e 61 6c 0a 20 20 20 20 20 20 2a 2a  journal.      **
2b150 20 6d 6f 64 65 2c 20 74 68 69 73 20 74 72 61 6e   mode, this tran
2b160 73 61 63 74 69 6f 6e 20 61 6c 77 61 79 73 20 75  saction always u
2b170 73 65 73 20 61 20 72 6f 6c 6c 62 61 63 6b 20 6a  ses a rollback j
2b180 6f 75 72 6e 61 6c 2e 0a 20 20 20 20 20 20 2a 2f  ournal..      */
2b190 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73  .      assert( s
2b1a0 71 6c 69 74 65 33 42 74 72 65 65 49 73 49 6e 54  qlite3BtreeIsInT
2b1b0 72 61 6e 73 28 70 42 74 29 3d 3d 30 20 29 3b 0a  rans(pBt)==0 );.
2b1c0 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51        if( rc==SQ
2b1d0 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
2b1e0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
2b1f0 74 72 65 65 53 65 74 56 65 72 73 69 6f 6e 28 70  treeSetVersion(p
2b200 42 74 2c 20 28 65 4e 65 77 3d 3d 50 41 47 45 52  Bt, (eNew==PAGER
2b210 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c  _JOURNALMODE_WAL
2b220 20 3f 20 32 20 3a 20 31 29 29 3b 0a 20 20 20 20   ? 2 : 1));.    
2b230 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65    }.    }.  }.#e
2b240 6e 64 69 66 20 2f 2a 20 69 66 6e 64 65 66 20 53  ndif /* ifndef S
2b250 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 20 2a  QLITE_OMIT_WAL *
2b260 2f 0a 0a 20 20 69 66 28 20 72 63 20 29 7b 0a 20  /..  if( rc ){. 
2b270 20 20 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a     eNew = eOld;.
2b280 20 20 7d 0a 20 20 65 4e 65 77 20 3d 20 73 71 6c    }.  eNew = sql
2b290 69 74 65 33 50 61 67 65 72 53 65 74 4a 6f 75 72  ite3PagerSetJour
2b2a0 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65 72 2c 20  nalMode(pPager, 
2b2b0 65 4e 65 77 29 3b 0a 0a 20 20 70 4f 75 74 20 3d  eNew);..  pOut =
2b2c0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
2b2d0 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d  .  pOut->flags =
2b2e0 20 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 53 74 61   MEM_Str|MEM_Sta
2b2f0 74 69 63 7c 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20  tic|MEM_Term;.  
2b300 70 4f 75 74 2d 3e 7a 20 3d 20 28 63 68 61 72 20  pOut->z = (char 
2b310 2a 29 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c  *)sqlite3Journal
2b320 4d 6f 64 65 6e 61 6d 65 28 65 4e 65 77 29 3b 0a  Modename(eNew);.
2b330 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 73 71 6c 69    pOut->n = sqli
2b340 74 65 33 53 74 72 6c 65 6e 33 30 28 70 4f 75 74  te3Strlen30(pOut
2b350 2d 3e 7a 29 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e  ->z);.  pOut->en
2b360 63 20 3d 20 53 51 4c 49 54 45 5f 55 54 46 38 3b  c = SQLITE_UTF8;
2b370 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68  .  sqlite3VdbeCh
2b380 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 4f 75  angeEncoding(pOu
2b390 74 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20  t, encoding);.  
2b3a0 62 72 65 61 6b 3b 0a 7d 3b 0a 23 65 6e 64 69 66  break;.};.#endif
2b3b0 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
2b3c0 50 52 41 47 4d 41 20 2a 2f 0a 0a 23 69 66 20 21  PRAGMA */..#if !
2b3d0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
2b3e0 4d 49 54 5f 56 41 43 55 55 4d 29 20 26 26 20 21  MIT_VACUUM) && !
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 54 54 41 43 48 29 0a 2f 2a 20 4f  MIT_ATTACH)./* O
2b410 70 63 6f 64 65 3a 20 56 61 63 75 75 6d 20 2a 20  pcode: Vacuum * 
2b420 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 56 61  * * * *.**.** Va
2b430 63 75 75 6d 20 74 68 65 20 65 6e 74 69 72 65 20  cuum the entire 
2b440 64 61 74 61 62 61 73 65 2e 20 20 54 68 69 73 20  database.  This 
2b450 6f 70 63 6f 64 65 20 77 69 6c 6c 20 63 61 75 73  opcode will caus
2b460 65 20 6f 74 68 65 72 20 76 69 72 74 75 61 6c 0a  e other virtual.
2b470 2a 2a 20 6d 61 63 68 69 6e 65 73 20 74 6f 20 62  ** machines to b
2b480 65 20 63 72 65 61 74 65 64 20 61 6e 64 20 72 75  e created and ru
2b490 6e 2e 20 20 49 74 20 6d 61 79 20 6e 6f 74 20 62  n.  It may not b
2b4a0 65 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20 77 69  e called from wi
2b4b0 74 68 69 6e 0a 2a 2a 20 61 20 74 72 61 6e 73 61  thin.** a transa
2b4c0 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ction..*/.case O
2b4d0 50 5f 56 61 63 75 75 6d 3a 20 7b 0a 20 20 72 63  P_Vacuum: {.  rc
2b4e0 20 3d 20 73 71 6c 69 74 65 33 52 75 6e 56 61 63   = sqlite3RunVac
2b4f0 75 75 6d 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c  uum(&p->zErrMsg,
2b500 20 64 62 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d   db);.  break;.}
2b510 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 21 64 65  .#endif..#if !de
2b520 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
2b530 54 5f 41 55 54 4f 56 41 43 55 55 4d 29 0a 2f 2a  T_AUTOVACUUM)./*
2b540 20 4f 70 63 6f 64 65 3a 20 49 6e 63 72 56 61 63   Opcode: IncrVac
2b550 75 75 6d 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  uum P1 P2 * * *.
2b560 2a 2a 0a 2a 2a 20 50 65 72 66 6f 72 6d 20 61 20  **.** Perform a 
2b570 73 69 6e 67 6c 65 20 73 74 65 70 20 6f 66 20 74  single step of t
2b580 68 65 20 69 6e 63 72 65 6d 65 6e 74 61 6c 20 76  he incremental v
2b590 61 63 75 75 6d 20 70 72 6f 63 65 64 75 72 65 20  acuum procedure 
2b5a0 6f 6e 0a 2a 2a 20 74 68 65 20 50 31 20 64 61 74  on.** the P1 dat
2b5b0 61 62 61 73 65 2e 20 49 66 20 74 68 65 20 76 61  abase. If the va
2b5c0 63 75 75 6d 20 68 61 73 20 66 69 6e 69 73 68 65  cuum has finishe
2b5d0 64 2c 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72  d, jump to instr
2b5e0 75 63 74 69 6f 6e 0a 2a 2a 20 50 32 2e 20 4f 74  uction.** P2. Ot
2b5f0 68 65 72 77 69 73 65 2c 20 66 61 6c 6c 20 74 68  herwise, fall th
2b600 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78  rough to the nex
2b610 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  t instruction..*
2b620 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 63 72 56 61  /.case OP_IncrVa
2b630 63 75 75 6d 3a 20 7b 20 20 20 20 20 20 20 20 2f  cuum: {        /
2b640 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 42 74 72 65  * jump */.  Btre
2b650 65 20 2a 70 42 74 3b 0a 0a 20 20 61 73 73 65 72  e *pBt;..  asser
2b660 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
2b670 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62   pOp->p1<db->nDb
2b680 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70   );.  assert( (p
2b690 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28 28  ->btreeMask & ((
2b6a0 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c 70 4f 70  (yDbMask)1)<<pOp
2b6b0 2d 3e 70 31 29 29 21 3d 30 20 29 3b 0a 20 20 70  ->p1))!=0 );.  p
2b6c0 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70  Bt = db->aDb[pOp
2b6d0 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20 20 72 63 20  ->p1].pBt;.  rc 
2b6e0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e  = sqlite3BtreeIn
2b6f0 63 72 56 61 63 75 75 6d 28 70 42 74 29 3b 0a 20  crVacuum(pBt);. 
2b700 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
2b710 44 4f 4e 45 20 29 7b 0a 20 20 20 20 70 63 20 3d  DONE ){.    pc =
2b720 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
2b730 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b    rc = SQLITE_OK
2b740 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
2b750 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f  .#endif../* Opco
2b760 64 65 3a 20 45 78 70 69 72 65 20 50 31 20 2a 20  de: Expire P1 * 
2b770 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 61 75 73  * * *.**.** Caus
2b780 65 20 70 72 65 63 6f 6d 70 69 6c 65 64 20 73 74  e precompiled st
2b790 61 74 65 6d 65 6e 74 73 20 74 6f 20 62 65 63 6f  atements to beco
2b7a0 6d 65 20 65 78 70 69 72 65 64 2e 20 41 6e 20 65  me expired. An e
2b7b0 78 70 69 72 65 64 20 73 74 61 74 65 6d 65 6e 74  xpired statement
2b7c0 0a 2a 2a 20 66 61 69 6c 73 20 77 69 74 68 20 61  .** fails with a
2b7d0 6e 20 65 72 72 6f 72 20 63 6f 64 65 20 6f 66 20  n error code of 
2b7e0 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 20 69 66  SQLITE_SCHEMA if
2b7f0 20 69 74 20 69 73 20 65 76 65 72 20 65 78 65 63   it is ever exec
2b800 75 74 65 64 20 0a 2a 2a 20 28 76 69 61 20 73 71  uted .** (via sq
2b810 6c 69 74 65 33 5f 73 74 65 70 28 29 29 2e 0a 2a  lite3_step())..*
2b820 2a 20 0a 2a 2a 20 49 66 20 50 31 20 69 73 20 30  * .** If P1 is 0
2b830 2c 20 74 68 65 6e 20 61 6c 6c 20 53 51 4c 20 73  , then all SQL s
2b840 74 61 74 65 6d 65 6e 74 73 20 62 65 63 6f 6d 65  tatements become
2b850 20 65 78 70 69 72 65 64 2e 20 49 66 20 50 31 20   expired. If P1 
2b860 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 0a 2a 2a 20  is non-zero,.** 
2b870 74 68 65 6e 20 6f 6e 6c 79 20 74 68 65 20 63 75  then only the cu
2b880 72 72 65 6e 74 6c 79 20 65 78 65 63 75 74 69 6e  rrently executin
2b890 67 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 61  g statement is a
2b8a0 66 66 65 63 74 65 64 2e 20 0a 2a 2f 0a 63 61 73  ffected. .*/.cas
2b8b0 65 20 4f 50 5f 45 78 70 69 72 65 3a 20 7b 0a 20  e OP_Expire: {. 
2b8c0 20 69 66 28 20 21 70 4f 70 2d 3e 70 31 20 29 7b   if( !pOp->p1 ){
2b8d0 0a 20 20 20 20 73 71 6c 69 74 65 33 45 78 70 69  .    sqlite3Expi
2b8e0 72 65 50 72 65 70 61 72 65 64 53 74 61 74 65 6d  rePreparedStatem
2b8f0 65 6e 74 73 28 64 62 29 3b 0a 20 20 7d 65 6c 73  ents(db);.  }els
2b900 65 7b 0a 20 20 20 20 70 2d 3e 65 78 70 69 72 65  e{.    p->expire
2b910 64 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65  d = 1;.  }.  bre
2b920 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53  ak;.}..#ifndef S
2b930 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45  QLITE_OMIT_SHARE
2b940 44 5f 43 41 43 48 45 0a 2f 2a 20 4f 70 63 6f 64  D_CACHE./* Opcod
2b950 65 3a 20 54 61 62 6c 65 4c 6f 63 6b 20 50 31 20  e: TableLock P1 
2b960 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  P2 P3 P4 *.**.**
2b970 20 4f 62 74 61 69 6e 20 61 20 6c 6f 63 6b 20 6f   Obtain a lock o
2b980 6e 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 74  n a particular t
2b990 61 62 6c 65 2e 20 54 68 69 73 20 69 6e 73 74 72  able. This instr
2b9a0 75 63 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 75  uction is only u
2b9b0 73 65 64 20 77 68 65 6e 0a 2a 2a 20 74 68 65 20  sed when.** the 
2b9c0 73 68 61 72 65 64 2d 63 61 63 68 65 20 66 65 61  shared-cache fea
2b9d0 74 75 72 65 20 69 73 20 65 6e 61 62 6c 65 64 2e  ture is enabled.
2b9e0 20 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68   .**.** P1 is th
2b9f0 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 64  e index of the d
2ba00 61 74 61 62 61 73 65 20 69 6e 20 73 71 6c 69 74  atabase in sqlit
2ba10 65 33 2e 61 44 62 5b 5d 20 6f 66 20 74 68 65 20  e3.aDb[] of the 
2ba20 64 61 74 61 62 61 73 65 0a 2a 2a 20 6f 6e 20 77  database.** on w
2ba30 68 69 63 68 20 74 68 65 20 6c 6f 63 6b 20 69 73  hich the lock is
2ba40 20 61 63 71 75 69 72 65 64 2e 20 20 41 20 72 65   acquired.  A re
2ba50 61 64 6c 6f 63 6b 20 69 73 20 6f 62 74 61 69 6e  adlock is obtain
2ba60 65 64 20 69 66 20 50 33 3d 3d 30 20 6f 72 0a 2a  ed if P3==0 or.*
2ba70 2a 20 61 20 77 72 69 74 65 20 6c 6f 63 6b 20 69  * a write lock i
2ba80 66 20 50 33 3d 3d 31 2e 0a 2a 2a 0a 2a 2a 20 50  f P3==1..**.** P
2ba90 32 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 72  2 contains the r
2baa0 6f 6f 74 2d 70 61 67 65 20 6f 66 20 74 68 65 20  oot-page of the 
2bab0 74 61 62 6c 65 20 74 6f 20 6c 6f 63 6b 2e 0a 2a  table to lock..*
2bac0 2a 0a 2a 2a 20 50 34 20 63 6f 6e 74 61 69 6e 73  *.** P4 contains
2bad0 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68   a pointer to th
2bae0 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61  e name of the ta
2baf0 62 6c 65 20 62 65 69 6e 67 20 6c 6f 63 6b 65 64  ble being locked
2bb00 2e 20 54 68 69 73 20 69 73 20 6f 6e 6c 79 0a 2a  . This is only.*
2bb10 2a 20 75 73 65 64 20 74 6f 20 67 65 6e 65 72 61  * used to genera
2bb20 74 65 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73  te an error mess
2bb30 61 67 65 20 69 66 20 74 68 65 20 6c 6f 63 6b 20  age if the lock 
2bb40 63 61 6e 6e 6f 74 20 62 65 20 6f 62 74 61 69 6e  cannot be obtain
2bb50 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54  ed..*/.case OP_T
2bb60 61 62 6c 65 4c 6f 63 6b 3a 20 7b 0a 20 20 75 38  ableLock: {.  u8
2bb70 20 69 73 57 72 69 74 65 4c 6f 63 6b 20 3d 20 28   isWriteLock = (
2bb80 75 38 29 70 4f 70 2d 3e 70 33 3b 0a 20 20 69 66  u8)pOp->p3;.  if
2bb90 28 20 69 73 57 72 69 74 65 4c 6f 63 6b 20 7c 7c  ( isWriteLock ||
2bba0 20 30 3d 3d 28 64 62 2d 3e 66 6c 61 67 73 26 53   0==(db->flags&S
2bbb0 51 4c 49 54 45 5f 52 65 61 64 55 6e 63 6f 6d 6d  QLITE_ReadUncomm
2bbc0 69 74 74 65 64 29 20 29 7b 0a 20 20 20 20 69 6e  itted) ){.    in
2bbd0 74 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 20  t p1 = pOp->p1; 
2bbe0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 31 3e  .    assert( p1>
2bbf0 3d 30 20 26 26 20 70 31 3c 64 62 2d 3e 6e 44 62  =0 && p1<db->nDb
2bc00 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
2bc10 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20  (p->btreeMask & 
2bc20 28 28 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c 70  (((yDbMask)1)<<p
2bc30 31 29 29 21 3d 30 20 29 3b 0a 20 20 20 20 61 73  1))!=0 );.    as
2bc40 73 65 72 74 28 20 69 73 57 72 69 74 65 4c 6f 63  sert( isWriteLoc
2bc50 6b 3d 3d 30 20 7c 7c 20 69 73 57 72 69 74 65 4c  k==0 || isWriteL
2bc60 6f 63 6b 3d 3d 31 20 29 3b 0a 20 20 20 20 72 63  ock==1 );.    rc
2bc70 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c   = sqlite3BtreeL
2bc80 6f 63 6b 54 61 62 6c 65 28 64 62 2d 3e 61 44 62  ockTable(db->aDb
2bc90 5b 70 31 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70  [p1].pBt, pOp->p
2bca0 32 2c 20 69 73 57 72 69 74 65 4c 6f 63 6b 29 3b  2, isWriteLock);
2bcb0 0a 20 20 20 20 69 66 28 20 28 72 63 26 30 78 46  .    if( (rc&0xF
2bcc0 46 29 3d 3d 53 51 4c 49 54 45 5f 4c 4f 43 4b 45  F)==SQLITE_LOCKE
2bcd0 44 20 29 7b 0a 20 20 20 20 20 20 63 6f 6e 73 74  D ){.      const
2bce0 20 63 68 61 72 20 2a 7a 20 3d 20 70 4f 70 2d 3e   char *z = pOp->
2bcf0 70 34 2e 7a 3b 0a 20 20 20 20 20 20 73 71 6c 69  p4.z;.      sqli
2bd00 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d  te3SetString(&p-
2bd10 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 64  >zErrMsg, db, "d
2bd20 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 69 73  atabase table is
2bd30 20 6c 6f 63 6b 65 64 3a 20 25 73 22 2c 20 7a 29   locked: %s", z)
2bd40 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72  ;.    }.  }.  br
2bd50 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
2bd60 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41   SQLITE_OMIT_SHA
2bd70 52 45 44 5f 43 41 43 48 45 20 2a 2f 0a 0a 23 69  RED_CACHE */..#i
2bd80 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2bd90 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f  T_VIRTUALTABLE./
2bda0 2a 20 4f 70 63 6f 64 65 3a 20 56 42 65 67 69 6e  * Opcode: VBegin
2bdb0 20 2a 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a   * * * P4 *.**.*
2bdc0 2a 20 50 34 20 6d 61 79 20 62 65 20 61 20 70 6f  * P4 may be a po
2bdd0 69 6e 74 65 72 20 74 6f 20 61 6e 20 73 71 6c 69  inter to an sqli
2bde0 74 65 33 5f 76 74 61 62 20 73 74 72 75 63 74 75  te3_vtab structu
2bdf0 72 65 2e 20 49 66 20 73 6f 2c 20 63 61 6c 6c 20  re. If so, call 
2be00 74 68 65 20 0a 2a 2a 20 78 42 65 67 69 6e 20 6d  the .** xBegin m
2be10 65 74 68 6f 64 20 66 6f 72 20 74 68 61 74 20 74  ethod for that t
2be20 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 6c 73 6f  able..**.** Also
2be30 2c 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  , whether or not
2be40 20 50 34 20 69 73 20 73 65 74 2c 20 63 68 65 63   P4 is set, chec
2be50 6b 20 74 68 61 74 20 74 68 69 73 20 69 73 20 6e  k that this is n
2be60 6f 74 20 62 65 69 6e 67 20 63 61 6c 6c 65 64 20  ot being called 
2be70 66 72 6f 6d 0a 2a 2a 20 77 69 74 68 69 6e 20 61  from.** within a
2be80 20 63 61 6c 6c 62 61 63 6b 20 74 6f 20 61 20 76   callback to a v
2be90 69 72 74 75 61 6c 20 74 61 62 6c 65 20 78 53 79  irtual table xSy
2bea0 6e 63 28 29 20 6d 65 74 68 6f 64 2e 20 49 66 20  nc() method. If 
2beb0 69 74 20 69 73 2c 20 74 68 65 20 65 72 72 6f 72  it is, the error
2bec0 0a 2a 2a 20 63 6f 64 65 20 77 69 6c 6c 20 62 65  .** code will be
2bed0 20 73 65 74 20 74 6f 20 53 51 4c 49 54 45 5f 4c   set to SQLITE_L
2bee0 4f 43 4b 45 44 2e 0a 2a 2f 0a 63 61 73 65 20 4f  OCKED..*/.case O
2bef0 50 5f 56 42 65 67 69 6e 3a 20 7b 0a 20 20 56 54  P_VBegin: {.  VT
2bf00 61 62 6c 65 20 2a 70 56 54 61 62 3b 0a 20 20 70  able *pVTab;.  p
2bf10 56 54 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70  VTab = pOp->p4.p
2bf20 56 74 61 62 3b 0a 20 20 72 63 20 3d 20 73 71 6c  Vtab;.  rc = sql
2bf30 69 74 65 33 56 74 61 62 42 65 67 69 6e 28 64 62  ite3VtabBegin(db
2bf40 2c 20 70 56 54 61 62 29 3b 0a 20 20 69 66 28 20  , pVTab);.  if( 
2bf50 70 56 54 61 62 20 29 20 69 6d 70 6f 72 74 56 74  pVTab ) importVt
2bf60 61 62 45 72 72 4d 73 67 28 70 2c 20 70 56 54 61  abErrMsg(p, pVTa
2bf70 62 2d 3e 70 56 74 61 62 29 3b 0a 20 20 62 72 65  b->pVtab);.  bre
2bf80 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ak;.}.#endif /* 
2bf90 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
2bfa0 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66  UALTABLE */..#if
2bfb0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
2bfc0 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a  _VIRTUALTABLE./*
2bfd0 20 4f 70 63 6f 64 65 3a 20 56 43 72 65 61 74 65   Opcode: VCreate
2bfe0 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a   P1 * * P4 *.**.
2bff0 2a 2a 20 50 34 20 69 73 20 74 68 65 20 6e 61 6d  ** P4 is the nam
2c000 65 20 6f 66 20 61 20 76 69 72 74 75 61 6c 20 74  e of a virtual t
2c010 61 62 6c 65 20 69 6e 20 64 61 74 61 62 61 73 65  able in database
2c020 20 50 31 2e 20 43 61 6c 6c 20 74 68 65 20 78 43   P1. Call the xC
2c030 72 65 61 74 65 20 6d 65 74 68 6f 64 0a 2a 2a 20  reate method.** 
2c040 66 6f 72 20 74 68 61 74 20 74 61 62 6c 65 2e 0a  for that table..
2c050 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 43 72 65 61  */.case OP_VCrea
2c060 74 65 3a 20 7b 0a 20 20 72 63 20 3d 20 73 71 6c  te: {.  rc = sql
2c070 69 74 65 33 56 74 61 62 43 61 6c 6c 43 72 65 61  ite3VtabCallCrea
2c080 74 65 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20  te(db, pOp->p1, 
2c090 70 4f 70 2d 3e 70 34 2e 7a 2c 20 26 70 2d 3e 7a  pOp->p4.z, &p->z
2c0a0 45 72 72 4d 73 67 29 3b 0a 20 20 62 72 65 61 6b  ErrMsg);.  break
2c0b0 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ;.}.#endif /* SQ
2c0c0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
2c0d0 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64  LTABLE */..#ifnd
2c0e0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
2c0f0 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f  IRTUALTABLE./* O
2c100 70 63 6f 64 65 3a 20 56 44 65 73 74 72 6f 79 20  pcode: VDestroy 
2c110 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a  P1 * * P4 *.**.*
2c120 2a 20 50 34 20 69 73 20 74 68 65 20 6e 61 6d 65  * P4 is the name
2c130 20 6f 66 20 61 20 76 69 72 74 75 61 6c 20 74 61   of a virtual ta
2c140 62 6c 65 20 69 6e 20 64 61 74 61 62 61 73 65 20  ble in database 
2c150 50 31 2e 20 20 43 61 6c 6c 20 74 68 65 20 78 44  P1.  Call the xD
2c160 65 73 74 72 6f 79 20 6d 65 74 68 6f 64 0a 2a 2a  estroy method.**
2c170 20 6f 66 20 74 68 61 74 20 74 61 62 6c 65 2e 0a   of that table..
2c180 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 44 65 73 74  */.case OP_VDest
2c190 72 6f 79 3a 20 7b 0a 20 20 70 2d 3e 69 6e 56 74  roy: {.  p->inVt
2c1a0 61 62 4d 65 74 68 6f 64 20 3d 20 32 3b 0a 20 20  abMethod = 2;.  
2c1b0 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62  rc = sqlite3Vtab
2c1c0 43 61 6c 6c 44 65 73 74 72 6f 79 28 64 62 2c 20  CallDestroy(db, 
2c1d0 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34  pOp->p1, pOp->p4
2c1e0 2e 7a 29 3b 0a 20 20 70 2d 3e 69 6e 56 74 61 62  .z);.  p->inVtab
2c1f0 4d 65 74 68 6f 64 20 3d 20 30 3b 0a 20 20 62 72  Method = 0;.  br
2c200 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
2c210 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
2c220 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69  TUALTABLE */..#i
2c230 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2c240 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f  T_VIRTUALTABLE./
2c250 2a 20 4f 70 63 6f 64 65 3a 20 56 4f 70 65 6e 20  * Opcode: VOpen 
2c260 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a  P1 * * P4 *.**.*
2c270 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65  * P4 is a pointe
2c280 72 20 74 6f 20 61 20 76 69 72 74 75 61 6c 20 74  r to a virtual t
2c290 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20 61 6e 20  able object, an 
2c2a0 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74 72  sqlite3_vtab str
2c2b0 75 63 74 75 72 65 2e 0a 2a 2a 20 50 31 20 69 73  ucture..** P1 is
2c2c0 20 61 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72   a cursor number
2c2d0 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6f  .  This opcode o
2c2e0 70 65 6e 73 20 61 20 63 75 72 73 6f 72 20 74 6f  pens a cursor to
2c2f0 20 74 68 65 20 76 69 72 74 75 61 6c 0a 2a 2a 20   the virtual.** 
2c300 74 61 62 6c 65 20 61 6e 64 20 73 74 6f 72 65 73  table and stores
2c310 20 74 68 61 74 20 63 75 72 73 6f 72 20 69 6e 20   that cursor in 
2c320 50 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56  P1..*/.case OP_V
2c330 4f 70 65 6e 3a 20 7b 0a 20 20 56 64 62 65 43 75  Open: {.  VdbeCu
2c340 72 73 6f 72 20 2a 70 43 75 72 3b 0a 20 20 73 71  rsor *pCur;.  sq
2c350 6c 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f  lite3_vtab_curso
2c360 72 20 2a 70 56 74 61 62 43 75 72 73 6f 72 3b 0a  r *pVtabCursor;.
2c370 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a    sqlite3_vtab *
2c380 70 56 74 61 62 3b 0a 20 20 73 71 6c 69 74 65 33  pVtab;.  sqlite3
2c390 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65  _module *pModule
2c3a0 3b 0a 0a 20 20 70 43 75 72 20 3d 20 30 3b 0a 20  ;..  pCur = 0;. 
2c3b0 20 70 56 74 61 62 43 75 72 73 6f 72 20 3d 20 30   pVtabCursor = 0
2c3c0 3b 0a 20 20 70 56 74 61 62 20 3d 20 70 4f 70 2d  ;.  pVtab = pOp-
2c3d0 3e 70 34 2e 70 56 74 61 62 2d 3e 70 56 74 61 62  >p4.pVtab->pVtab
2c3e0 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20 28 73  ;.  pModule = (s
2c3f0 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 29  qlite3_module *)
2c400 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a  pVtab->pModule;.
2c410 20 20 61 73 73 65 72 74 28 70 56 74 61 62 20 26    assert(pVtab &
2c420 26 20 70 4d 6f 64 75 6c 65 29 3b 0a 20 20 72 63  & pModule);.  rc
2c430 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 4f 70 65   = pModule->xOpe
2c440 6e 28 70 56 74 61 62 2c 20 26 70 56 74 61 62 43  n(pVtab, &pVtabC
2c450 75 72 73 6f 72 29 3b 0a 20 20 69 6d 70 6f 72 74  ursor);.  import
2c460 56 74 61 62 45 72 72 4d 73 67 28 70 2c 20 70 56  VtabErrMsg(p, pV
2c470 74 61 62 29 3b 0a 20 20 69 66 28 20 53 51 4c 49  tab);.  if( SQLI
2c480 54 45 5f 4f 4b 3d 3d 72 63 20 29 7b 0a 20 20 20  TE_OK==rc ){.   
2c490 20 2f 2a 20 49 6e 69 74 69 61 6c 69 7a 65 20 73   /* Initialize s
2c4a0 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73  qlite3_vtab_curs
2c4b0 6f 72 20 62 61 73 65 20 63 6c 61 73 73 20 2a 2f  or base class */
2c4c0 0a 20 20 20 20 70 56 74 61 62 43 75 72 73 6f 72  .    pVtabCursor
2c4d0 2d 3e 70 56 74 61 62 20 3d 20 70 56 74 61 62 3b  ->pVtab = pVtab;
2c4e0 0a 0a 20 20 20 20 2f 2a 20 49 6e 69 74 69 61 6c  ..    /* Initial
2c4f0 69 73 65 20 76 64 62 65 20 63 75 72 73 6f 72 20  ise vdbe cursor 
2c500 6f 62 6a 65 63 74 20 2a 2f 0a 20 20 20 20 70 43  object */.    pC
2c510 75 72 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72  ur = allocateCur
2c520 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20  sor(p, pOp->p1, 
2c530 30 2c 20 2d 31 2c 20 30 29 3b 0a 20 20 20 20 69  0, -1, 0);.    i
2c540 66 28 20 70 43 75 72 20 29 7b 0a 20 20 20 20 20  f( pCur ){.     
2c550 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73   pCur->pVtabCurs
2c560 6f 72 20 3d 20 70 56 74 61 62 43 75 72 73 6f 72  or = pVtabCursor
2c570 3b 0a 20 20 20 20 20 20 70 43 75 72 2d 3e 70 4d  ;.      pCur->pM
2c580 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 43 75 72  odule = pVtabCur
2c590 73 6f 72 2d 3e 70 56 74 61 62 2d 3e 70 4d 6f 64  sor->pVtab->pMod
2c5a0 75 6c 65 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  ule;.    }else{.
2c5b0 20 20 20 20 20 20 64 62 2d 3e 6d 61 6c 6c 6f 63        db->malloc
2c5c0 46 61 69 6c 65 64 20 3d 20 31 3b 0a 20 20 20 20  Failed = 1;.    
2c5d0 20 20 70 4d 6f 64 75 6c 65 2d 3e 78 43 6c 6f 73    pModule->xClos
2c5e0 65 28 70 56 74 61 62 43 75 72 73 6f 72 29 3b 0a  e(pVtabCursor);.
2c5f0 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61      }.  }.  brea
2c600 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k;.}.#endif /* S
2c610 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
2c620 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e  ALTABLE */..#ifn
2c630 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2c640 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20  VIRTUALTABLE./* 
2c650 4f 70 63 6f 64 65 3a 20 56 46 69 6c 74 65 72 20  Opcode: VFilter 
2c660 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a  P1 P2 P3 P4 *.**
2c670 0a 2a 2a 20 50 31 20 69 73 20 61 20 63 75 72 73  .** P1 is a curs
2c680 6f 72 20 6f 70 65 6e 65 64 20 75 73 69 6e 67 20  or opened using 
2c690 56 4f 70 65 6e 2e 20 20 50 32 20 69 73 20 61 6e  VOpen.  P2 is an
2c6a0 20 61 64 64 72 65 73 73 20 74 6f 20 6a 75 6d 70   address to jump
2c6b0 20 74 6f 20 69 66 0a 2a 2a 20 74 68 65 20 66 69   to if.** the fi
2c6c0 6c 74 65 72 65 64 20 72 65 73 75 6c 74 20 73 65  ltered result se
2c6d0 74 20 69 73 20 65 6d 70 74 79 2e 0a 2a 2a 0a 2a  t is empty..**.*
2c6e0 2a 20 50 34 20 69 73 20 65 69 74 68 65 72 20 4e  * P4 is either N
2c6f0 55 4c 4c 20 6f 72 20 61 20 73 74 72 69 6e 67 20  ULL or a string 
2c700 74 68 61 74 20 77 61 73 20 67 65 6e 65 72 61 74  that was generat
2c710 65 64 20 62 79 20 74 68 65 20 78 42 65 73 74 49  ed by the xBestI
2c720 6e 64 65 78 0a 2a 2a 20 6d 65 74 68 6f 64 20 6f  ndex.** method o
2c730 66 20 74 68 65 20 6d 6f 64 75 6c 65 2e 20 20 54  f the module.  T
2c740 68 65 20 69 6e 74 65 72 70 72 65 74 61 74 69 6f  he interpretatio
2c750 6e 20 6f 66 20 74 68 65 20 50 34 20 73 74 72 69  n of the P4 stri
2c760 6e 67 20 69 73 20 6c 65 66 74 0a 2a 2a 20 74 6f  ng is left.** to
2c770 20 74 68 65 20 6d 6f 64 75 6c 65 20 69 6d 70 6c   the module impl
2c780 65 6d 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a  ementation..**.*
2c790 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 6e  * This opcode in
2c7a0 76 6f 6b 65 73 20 74 68 65 20 78 46 69 6c 74 65  vokes the xFilte
2c7b0 72 20 6d 65 74 68 6f 64 20 6f 6e 20 74 68 65 20  r method on the 
2c7c0 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 73 70  virtual table sp
2c7d0 65 63 69 66 69 65 64 0a 2a 2a 20 62 79 20 50 31  ecified.** by P1
2c7e0 2e 20 20 54 68 65 20 69 6e 74 65 67 65 72 20 71  .  The integer q
2c7f0 75 65 72 79 20 70 6c 61 6e 20 70 61 72 61 6d 65  uery plan parame
2c800 74 65 72 20 74 6f 20 78 46 69 6c 74 65 72 20 69  ter to xFilter i
2c810 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  s stored in regi
2c820 73 74 65 72 0a 2a 2a 20 50 33 2e 20 52 65 67 69  ster.** P3. Regi
2c830 73 74 65 72 20 50 33 2b 31 20 73 74 6f 72 65 73  ster P3+1 stores
2c840 20 74 68 65 20 61 72 67 63 20 70 61 72 61 6d 65   the argc parame
2c850 74 65 72 20 74 6f 20 62 65 20 70 61 73 73 65 64  ter to be passed
2c860 20 74 6f 20 74 68 65 0a 2a 2a 20 78 46 69 6c 74   to the.** xFilt
2c870 65 72 20 6d 65 74 68 6f 64 2e 20 52 65 67 69 73  er method. Regis
2c880 74 65 72 73 20 50 33 2b 32 2e 2e 50 33 2b 31 2b  ters P3+2..P3+1+
2c890 61 72 67 63 20 61 72 65 20 74 68 65 20 61 72 67  argc are the arg
2c8a0 63 0a 2a 2a 20 61 64 64 69 74 69 6f 6e 61 6c 20  c.** additional 
2c8b0 70 61 72 61 6d 65 74 65 72 73 20 77 68 69 63 68  parameters which
2c8c0 20 61 72 65 20 70 61 73 73 65 64 20 74 6f 0a 2a   are passed to.*
2c8d0 2a 20 78 46 69 6c 74 65 72 20 61 73 20 61 72 67  * xFilter as arg
2c8e0 76 2e 20 52 65 67 69 73 74 65 72 20 50 33 2b 32  v. Register P3+2
2c8f0 20 62 65 63 6f 6d 65 73 20 61 72 67 76 5b 30 5d   becomes argv[0]
2c900 20 77 68 65 6e 20 70 61 73 73 65 64 20 74 6f 20   when passed to 
2c910 78 46 69 6c 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 41  xFilter..**.** A
2c920 20 6a 75 6d 70 20 69 73 20 6d 61 64 65 20 74 6f   jump is made to
2c930 20 50 32 20 69 66 20 74 68 65 20 72 65 73 75 6c   P2 if the resul
2c940 74 20 73 65 74 20 61 66 74 65 72 20 66 69 6c 74  t set after filt
2c950 65 72 69 6e 67 20 77 6f 75 6c 64 20 62 65 20 65  ering would be e
2c960 6d 70 74 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  mpty..*/.case OP
2c970 5f 56 46 69 6c 74 65 72 3a 20 7b 20 20 20 2f 2a  _VFilter: {   /*
2c980 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e 74 20 6e   jump */.  int n
2c990 41 72 67 3b 0a 20 20 69 6e 74 20 69 51 75 65 72  Arg;.  int iQuer
2c9a0 79 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74  y;.  const sqlit
2c9b0 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75  e3_module *pModu
2c9c0 6c 65 3b 0a 20 20 4d 65 6d 20 2a 70 51 75 65 72  le;.  Mem *pQuer
2c9d0 79 3b 0a 20 20 4d 65 6d 20 2a 70 41 72 67 63 3b  y;.  Mem *pArgc;
2c9e0 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f  .  sqlite3_vtab_
2c9f0 63 75 72 73 6f 72 20 2a 70 56 74 61 62 43 75 72  cursor *pVtabCur
2ca00 73 6f 72 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76  sor;.  sqlite3_v
2ca10 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 56 64  tab *pVtab;.  Vd
2ca20 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a  beCursor *pCur;.
2ca30 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 69 6e 74    int res;.  int
2ca40 20 69 3b 0a 20 20 4d 65 6d 20 2a 2a 61 70 41 72   i;.  Mem **apAr
2ca50 67 3b 0a 0a 20 20 70 51 75 65 72 79 20 3d 20 26  g;..  pQuery = &
2ca60 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
2ca70 20 70 41 72 67 63 20 3d 20 26 70 51 75 65 72 79   pArgc = &pQuery
2ca80 5b 31 5d 3b 0a 20 20 70 43 75 72 20 3d 20 70 2d  [1];.  pCur = p-
2ca90 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
2caa0 0a 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73  .  assert( memIs
2cab0 56 61 6c 69 64 28 70 51 75 65 72 79 29 20 29 3b  Valid(pQuery) );
2cac0 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43  .  REGISTER_TRAC
2cad0 45 28 70 4f 70 2d 3e 70 33 2c 20 70 51 75 65 72  E(pOp->p3, pQuer
2cae0 79 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  y);.  assert( pC
2caf0 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 20  ur->pVtabCursor 
2cb00 29 3b 0a 20 20 70 56 74 61 62 43 75 72 73 6f 72  );.  pVtabCursor
2cb10 20 3d 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75   = pCur->pVtabCu
2cb20 72 73 6f 72 3b 0a 20 20 70 56 74 61 62 20 3d 20  rsor;.  pVtab = 
2cb30 70 56 74 61 62 43 75 72 73 6f 72 2d 3e 70 56 74  pVtabCursor->pVt
2cb40 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20  ab;.  pModule = 
2cb50 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a  pVtab->pModule;.
2cb60 0a 20 20 2f 2a 20 47 72 61 62 20 74 68 65 20 69  .  /* Grab the i
2cb70 6e 64 65 78 20 6e 75 6d 62 65 72 20 61 6e 64 20  ndex number and 
2cb80 61 72 67 63 20 70 61 72 61 6d 65 74 65 72 73 20  argc parameters 
2cb90 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 28 70 51  */.  assert( (pQ
2cba0 75 65 72 79 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  uery->flags&MEM_
2cbb0 49 6e 74 29 21 3d 30 20 26 26 20 70 41 72 67 63  Int)!=0 && pArgc
2cbc0 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d 5f 49 6e 74  ->flags==MEM_Int
2cbd0 20 29 3b 0a 20 20 6e 41 72 67 20 3d 20 28 69 6e   );.  nArg = (in
2cbe0 74 29 70 41 72 67 63 2d 3e 75 2e 69 3b 0a 20 20  t)pArgc->u.i;.  
2cbf0 69 51 75 65 72 79 20 3d 20 28 69 6e 74 29 70 51  iQuery = (int)pQ
2cc00 75 65 72 79 2d 3e 75 2e 69 3b 0a 0a 20 20 2f 2a  uery->u.i;..  /*
2cc10 20 49 6e 76 6f 6b 65 20 74 68 65 20 78 46 69 6c   Invoke the xFil
2cc20 74 65 72 20 6d 65 74 68 6f 64 20 2a 2f 0a 20 20  ter method */.  
2cc30 7b 0a 20 20 20 20 72 65 73 20 3d 20 30 3b 0a 20  {.    res = 0;. 
2cc40 20 20 20 61 70 41 72 67 20 3d 20 70 2d 3e 61 70     apArg = p->ap
2cc50 41 72 67 3b 0a 20 20 20 20 66 6f 72 28 69 20 3d  Arg;.    for(i =
2cc60 20 30 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29   0; i<nArg; i++)
2cc70 7b 0a 20 20 20 20 20 20 61 70 41 72 67 5b 69 5d  {.      apArg[i]
2cc80 20 3d 20 26 70 41 72 67 63 5b 69 2b 31 5d 3b 0a   = &pArgc[i+1];.
2cc90 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
2cca0 65 4d 65 6d 53 74 6f 72 65 54 79 70 65 28 61 70  eMemStoreType(ap
2ccb0 41 72 67 5b 69 5d 29 3b 0a 20 20 20 20 7d 0a 0a  Arg[i]);.    }..
2ccc0 20 20 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74      p->inVtabMet
2ccd0 68 6f 64 20 3d 20 31 3b 0a 20 20 20 20 72 63 20  hod = 1;.    rc 
2cce0 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 46 69 6c 74  = pModule->xFilt
2ccf0 65 72 28 70 56 74 61 62 43 75 72 73 6f 72 2c 20  er(pVtabCursor, 
2cd00 69 51 75 65 72 79 2c 20 70 4f 70 2d 3e 70 34 2e  iQuery, pOp->p4.
2cd10 7a 2c 20 6e 41 72 67 2c 20 61 70 41 72 67 29 3b  z, nArg, apArg);
2cd20 0a 20 20 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65  .    p->inVtabMe
2cd30 74 68 6f 64 20 3d 20 30 3b 0a 20 20 20 20 69 6d  thod = 0;.    im
2cd40 70 6f 72 74 56 74 61 62 45 72 72 4d 73 67 28 70  portVtabErrMsg(p
2cd50 2c 20 70 56 74 61 62 29 3b 0a 20 20 20 20 69 66  , pVtab);.    if
2cd60 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
2cd70 29 7b 0a 20 20 20 20 20 20 72 65 73 20 3d 20 70  ){.      res = p
2cd80 4d 6f 64 75 6c 65 2d 3e 78 45 6f 66 28 70 56 74  Module->xEof(pVt
2cd90 61 62 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 7d  abCursor);.    }
2cda0 0a 0a 20 20 20 20 69 66 28 20 72 65 73 20 29 7b  ..    if( res ){
2cdb0 0a 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  .      pc = pOp-
2cdc0 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 7d 0a 20  >p2 - 1;.    }. 
2cdd0 20 7d 0a 20 20 70 43 75 72 2d 3e 6e 75 6c 6c 52   }.  pCur->nullR
2cde0 6f 77 20 3d 20 30 3b 0a 0a 20 20 62 72 65 61 6b  ow = 0;..  break
2cdf0 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ;.}.#endif /* SQ
2ce00 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
2ce10 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64  LTABLE */..#ifnd
2ce20 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
2ce30 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f  IRTUALTABLE./* O
2ce40 70 63 6f 64 65 3a 20 56 43 6f 6c 75 6d 6e 20 50  pcode: VColumn P
2ce50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
2ce60 2a 20 53 74 6f 72 65 20 74 68 65 20 76 61 6c 75  * Store the valu
2ce70 65 20 6f 66 20 74 68 65 20 50 32 2d 74 68 20 63  e of the P2-th c
2ce80 6f 6c 75 6d 6e 20 6f 66 0a 2a 2a 20 74 68 65 20  olumn of.** the 
2ce90 72 6f 77 20 6f 66 20 74 68 65 20 76 69 72 74 75  row of the virtu
2cea0 61 6c 2d 74 61 62 6c 65 20 74 68 61 74 20 74 68  al-table that th
2ceb0 65 20 0a 2a 2a 20 50 31 20 63 75 72 73 6f 72 20  e .** P1 cursor 
2cec0 69 73 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 69  is pointing to i
2ced0 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 33 2e  nto register P3.
2cee0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 43 6f 6c  .*/.case OP_VCol
2cef0 75 6d 6e 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33  umn: {.  sqlite3
2cf00 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20  _vtab *pVtab;.  
2cf10 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f  const sqlite3_mo
2cf20 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20  dule *pModule;. 
2cf30 20 4d 65 6d 20 2a 70 44 65 73 74 3b 0a 20 20 73   Mem *pDest;.  s
2cf40 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 73  qlite3_context s
2cf50 43 6f 6e 74 65 78 74 3b 0a 0a 20 20 56 64 62 65  Context;..  Vdbe
2cf60 43 75 72 73 6f 72 20 2a 70 43 75 72 20 3d 20 70  Cursor *pCur = p
2cf70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
2cf80 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 75 72  ;.  assert( pCur
2cf90 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 20 29 3b  ->pVtabCursor );
2cfa0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
2cfb0 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c  p3>0 && pOp->p3<
2cfc0 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 44  =p->nMem );.  pD
2cfd0 65 73 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  est = &aMem[pOp-
2cfe0 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74  >p3];.  memAbout
2cff0 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 44 65 73  ToChange(p, pDes
2d000 74 29 3b 0a 20 20 69 66 28 20 70 43 75 72 2d 3e  t);.  if( pCur->
2d010 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 73  nullRow ){.    s
2d020 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
2d030 4e 75 6c 6c 28 70 44 65 73 74 29 3b 0a 20 20 20  Null(pDest);.   
2d040 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 56   break;.  }.  pV
2d050 74 61 62 20 3d 20 70 43 75 72 2d 3e 70 56 74 61  tab = pCur->pVta
2d060 62 43 75 72 73 6f 72 2d 3e 70 56 74 61 62 3b 0a  bCursor->pVtab;.
2d070 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61    pModule = pVta
2d080 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 61 73  b->pModule;.  as
2d090 73 65 72 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78  sert( pModule->x
2d0a0 43 6f 6c 75 6d 6e 20 29 3b 0a 20 20 6d 65 6d 73  Column );.  mems
2d0b0 65 74 28 26 73 43 6f 6e 74 65 78 74 2c 20 30 2c  et(&sContext, 0,
2d0c0 20 73 69 7a 65 6f 66 28 73 43 6f 6e 74 65 78 74   sizeof(sContext
2d0d0 29 29 3b 0a 0a 20 20 2f 2a 20 54 68 65 20 6f 75  ));..  /* The ou
2d0e0 74 70 75 74 20 63 65 6c 6c 20 6d 61 79 20 61 6c  tput cell may al
2d0f0 72 65 61 64 79 20 68 61 76 65 20 61 20 62 75 66  ready have a buf
2d100 66 65 72 20 61 6c 6c 6f 63 61 74 65 64 2e 20 4d  fer allocated. M
2d110 6f 76 65 0a 20 20 2a 2a 20 74 68 65 20 63 75 72  ove.  ** the cur
2d120 72 65 6e 74 20 63 6f 6e 74 65 6e 74 73 20 74 6f  rent contents to
2d130 20 73 43 6f 6e 74 65 78 74 2e 73 20 73 6f 20 69   sContext.s so i
2d140 6e 20 63 61 73 65 20 74 68 65 20 75 73 65 72 2d  n case the user-
2d150 66 75 6e 63 74 69 6f 6e 20 0a 20 20 2a 2a 20 63  function .  ** c
2d160 61 6e 20 75 73 65 20 74 68 65 20 61 6c 72 65 61  an use the alrea
2d170 64 79 20 61 6c 6c 6f 63 61 74 65 64 20 62 75 66  dy allocated buf
2d180 66 65 72 20 69 6e 73 74 65 61 64 20 6f 66 20 61  fer instead of a
2d190 6c 6c 6f 63 61 74 69 6e 67 20 61 20 0a 20 20 2a  llocating a .  *
2d1a0 2a 20 6e 65 77 20 6f 6e 65 2e 0a 20 20 2a 2f 0a  * new one..  */.
2d1b0 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
2d1c0 4d 6f 76 65 28 26 73 43 6f 6e 74 65 78 74 2e 73  Move(&sContext.s
2d1d0 2c 20 70 44 65 73 74 29 3b 0a 20 20 4d 65 6d 53  , pDest);.  MemS
2d1e0 65 74 54 79 70 65 46 6c 61 67 28 26 73 43 6f 6e  etTypeFlag(&sCon
2d1f0 74 65 78 74 2e 73 2c 20 4d 45 4d 5f 4e 75 6c 6c  text.s, MEM_Null
2d200 29 3b 0a 0a 20 20 72 63 20 3d 20 70 4d 6f 64 75  );..  rc = pModu
2d210 6c 65 2d 3e 78 43 6f 6c 75 6d 6e 28 70 43 75 72  le->xColumn(pCur
2d220 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 2c 20 26  ->pVtabCursor, &
2d230 73 43 6f 6e 74 65 78 74 2c 20 70 4f 70 2d 3e 70  sContext, pOp->p
2d240 32 29 3b 0a 20 20 69 6d 70 6f 72 74 56 74 61 62  2);.  importVtab
2d250 45 72 72 4d 73 67 28 70 2c 20 70 56 74 61 62 29  ErrMsg(p, pVtab)
2d260 3b 0a 20 20 69 66 28 20 73 43 6f 6e 74 65 78 74  ;.  if( sContext
2d270 2e 69 73 45 72 72 6f 72 20 29 7b 0a 20 20 20 20  .isError ){.    
2d280 72 63 20 3d 20 73 43 6f 6e 74 65 78 74 2e 69 73  rc = sContext.is
2d290 45 72 72 6f 72 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  Error;.  }..  /*
2d2a0 20 43 6f 70 79 20 74 68 65 20 72 65 73 75 6c 74   Copy the result
2d2b0 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e   of the function
2d2c0 20 74 6f 20 74 68 65 20 50 33 20 72 65 67 69 73   to the P3 regis
2d2d0 74 65 72 2e 20 57 65 0a 20 20 2a 2a 20 64 6f 20  ter. We.  ** do 
2d2e0 74 68 69 73 20 72 65 67 61 72 64 6c 65 73 73 20  this regardless 
2d2f0 6f 66 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  of whether or no
2d300 74 20 61 6e 20 65 72 72 6f 72 20 6f 63 63 75 72  t an error occur
2d310 72 65 64 20 74 6f 20 65 6e 73 75 72 65 20 61 6e  red to ensure an
2d320 79 0a 20 20 2a 2a 20 64 79 6e 61 6d 69 63 20 61  y.  ** dynamic a
2d330 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e 20 73 43 6f  llocation in sCo
2d340 6e 74 65 78 74 2e 73 20 28 61 20 4d 65 6d 20 73  ntext.s (a Mem s
2d350 74 72 75 63 74 29 20 69 73 20 20 72 65 6c 65 61  truct) is  relea
2d360 73 65 64 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c 69  sed..  */.  sqli
2d370 74 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63  te3VdbeChangeEnc
2d380 6f 64 69 6e 67 28 26 73 43 6f 6e 74 65 78 74 2e  oding(&sContext.
2d390 73 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20  s, encoding);.  
2d3a0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d 6f  sqlite3VdbeMemMo
2d3b0 76 65 28 70 44 65 73 74 2c 20 26 73 43 6f 6e 74  ve(pDest, &sCont
2d3c0 65 78 74 2e 73 29 3b 0a 20 20 52 45 47 49 53 54  ext.s);.  REGIST
2d3d0 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33  ER_TRACE(pOp->p3
2d3e0 2c 20 70 44 65 73 74 29 3b 0a 20 20 55 50 44 41  , pDest);.  UPDA
2d3f0 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
2d400 70 44 65 73 74 29 3b 0a 0a 20 20 69 66 28 20 73  pDest);..  if( s
2d410 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f  qlite3VdbeMemToo
2d420 42 69 67 28 70 44 65 73 74 29 20 29 7b 0a 20 20  Big(pDest) ){.  
2d430 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a    goto too_big;.
2d440 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23    }.  break;.}.#
2d450 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
2d460 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
2d470 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  E */..#ifndef SQ
2d480 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
2d490 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65  LTABLE./* Opcode
2d4a0 3a 20 56 4e 65 78 74 20 50 31 20 50 32 20 2a 20  : VNext P1 P2 * 
2d4b0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 64 76 61 6e 63  * *.**.** Advanc
2d4c0 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  e virtual table 
2d4d0 50 31 20 74 6f 20 74 68 65 20 6e 65 78 74 20 72  P1 to the next r
2d4e0 6f 77 20 69 6e 20 69 74 73 20 72 65 73 75 6c 74  ow in its result
2d4f0 20 73 65 74 20 61 6e 64 0a 2a 2a 20 6a 75 6d 70   set and.** jump
2d500 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 20   to instruction 
2d510 50 32 2e 20 20 4f 72 2c 20 69 66 20 74 68 65 20  P2.  Or, if the 
2d520 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 68 61  virtual table ha
2d530 73 20 72 65 61 63 68 65 64 0a 2a 2a 20 74 68 65  s reached.** the
2d540 20 65 6e 64 20 6f 66 20 69 74 73 20 72 65 73 75   end of its resu
2d550 6c 74 20 73 65 74 2c 20 74 68 65 6e 20 66 61 6c  lt set, then fal
2d560 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  l through to the
2d570 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   next instructio
2d580 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 4e  n..*/.case OP_VN
2d590 65 78 74 3a 20 7b 20 20 20 2f 2a 20 6a 75 6d 70  ext: {   /* jump
2d5a0 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76 74   */.  sqlite3_vt
2d5b0 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f 6e  ab *pVtab;.  con
2d5c0 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c  st sqlite3_modul
2d5d0 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 69 6e  e *pModule;.  in
2d5e0 74 20 72 65 73 3b 0a 20 20 56 64 62 65 43 75 72  t res;.  VdbeCur
2d5f0 73 6f 72 20 2a 70 43 75 72 3b 0a 0a 20 20 72 65  sor *pCur;..  re
2d600 73 20 3d 20 30 3b 0a 20 20 70 43 75 72 20 3d 20  s = 0;.  pCur = 
2d610 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
2d620 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 75  ];.  assert( pCu
2d630 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 20 29  r->pVtabCursor )
2d640 3b 0a 20 20 69 66 28 20 70 43 75 72 2d 3e 6e 75  ;.  if( pCur->nu
2d650 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 62 72 65  llRow ){.    bre
2d660 61 6b 3b 0a 20 20 7d 0a 20 20 70 56 74 61 62 20  ak;.  }.  pVtab 
2d670 3d 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72  = pCur->pVtabCur
2d680 73 6f 72 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4d  sor->pVtab;.  pM
2d690 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70  odule = pVtab->p
2d6a0 4d 6f 64 75 6c 65 3b 0a 20 20 61 73 73 65 72 74  Module;.  assert
2d6b0 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 4e 65 78 74  ( pModule->xNext
2d6c0 20 29 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65   );..  /* Invoke
2d6d0 20 74 68 65 20 78 4e 65 78 74 28 29 20 6d 65 74   the xNext() met
2d6e0 68 6f 64 20 6f 66 20 74 68 65 20 6d 6f 64 75 6c  hod of the modul
2d6f0 65 2e 20 54 68 65 72 65 20 69 73 20 6e 6f 20 77  e. There is no w
2d700 61 79 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20  ay for the.  ** 
2d710 75 6e 64 65 72 6c 79 69 6e 67 20 69 6d 70 6c 65  underlying imple
2d720 6d 65 6e 74 61 74 69 6f 6e 20 74 6f 20 72 65 74  mentation to ret
2d730 75 72 6e 20 61 6e 20 65 72 72 6f 72 20 69 66 20  urn an error if 
2d740 6f 6e 65 20 6f 63 63 75 72 73 20 64 75 72 69 6e  one occurs durin
2d750 67 0a 20 20 2a 2a 20 78 4e 65 78 74 28 29 2e 20  g.  ** xNext(). 
2d760 49 6e 73 74 65 61 64 2c 20 69 66 20 61 6e 20 65  Instead, if an e
2d770 72 72 6f 72 20 6f 63 63 75 72 73 2c 20 74 72 75  rror occurs, tru
2d780 65 20 69 73 20 72 65 74 75 72 6e 65 64 20 28 69  e is returned (i
2d790 6e 64 69 63 61 74 69 6e 67 20 74 68 61 74 20 0a  ndicating that .
2d7a0 20 20 2a 2a 20 64 61 74 61 20 69 73 20 61 76 61    ** data is ava
2d7b0 69 6c 61 62 6c 65 29 20 61 6e 64 20 74 68 65 20  ilable) and the 
2d7c0 65 72 72 6f 72 20 63 6f 64 65 20 72 65 74 75 72  error code retur
2d7d0 6e 65 64 20 77 68 65 6e 20 78 43 6f 6c 75 6d 6e  ned when xColumn
2d7e0 20 6f 72 0a 20 20 2a 2a 20 73 6f 6d 65 20 6f 74   or.  ** some ot
2d7f0 68 65 72 20 6d 65 74 68 6f 64 20 69 73 20 6e 65  her method is ne
2d800 78 74 20 69 6e 76 6f 6b 65 64 20 6f 6e 20 74 68  xt invoked on th
2d810 65 20 73 61 76 65 20 76 69 72 74 75 61 6c 20 74  e save virtual t
2d820 61 62 6c 65 20 63 75 72 73 6f 72 2e 0a 20 20 2a  able cursor..  *
2d830 2f 0a 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74  /.  p->inVtabMet
2d840 68 6f 64 20 3d 20 31 3b 0a 20 20 72 63 20 3d 20  hod = 1;.  rc = 
2d850 70 4d 6f 64 75 6c 65 2d 3e 78 4e 65 78 74 28 70  pModule->xNext(p
2d860 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72  Cur->pVtabCursor
2d870 29 3b 0a 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65  );.  p->inVtabMe
2d880 74 68 6f 64 20 3d 20 30 3b 0a 20 20 69 6d 70 6f  thod = 0;.  impo
2d890 72 74 56 74 61 62 45 72 72 4d 73 67 28 70 2c 20  rtVtabErrMsg(p, 
2d8a0 70 56 74 61 62 29 3b 0a 20 20 69 66 28 20 72 63  pVtab);.  if( rc
2d8b0 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
2d8c0 20 20 20 72 65 73 20 3d 20 70 4d 6f 64 75 6c 65     res = pModule
2d8d0 2d 3e 78 45 6f 66 28 70 43 75 72 2d 3e 70 56 74  ->xEof(pCur->pVt
2d8e0 61 62 43 75 72 73 6f 72 29 3b 0a 20 20 7d 0a 0a  abCursor);.  }..
2d8f0 20 20 69 66 28 20 21 72 65 73 20 29 7b 0a 20 20    if( !res ){.  
2d900 20 20 2f 2a 20 49 66 20 74 68 65 72 65 20 69 73    /* If there is
2d910 20 64 61 74 61 2c 20 6a 75 6d 70 20 74 6f 20 50   data, jump to P
2d920 32 20 2a 2f 0a 20 20 20 20 70 63 20 3d 20 70 4f  2 */.    pc = pO
2d930 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20  p->p2 - 1;.  }. 
2d940 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
2d950 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
2d960 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a  VIRTUALTABLE */.
2d970 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2d980 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
2d990 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 52 65  E./* Opcode: VRe
2d9a0 6e 61 6d 65 20 50 31 20 2a 20 2a 20 50 34 20 2a  name P1 * * P4 *
2d9b0 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70  .**.** P4 is a p
2d9c0 6f 69 6e 74 65 72 20 74 6f 20 61 20 76 69 72 74  ointer to a virt
2d9d0 75 61 6c 20 74 61 62 6c 65 20 6f 62 6a 65 63 74  ual table object
2d9e0 2c 20 61 6e 20 73 71 6c 69 74 65 33 5f 76 74 61  , an sqlite3_vta
2d9f0 62 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 20  b structure..** 
2da00 54 68 69 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f  This opcode invo
2da10 6b 65 73 20 74 68 65 20 63 6f 72 72 65 73 70 6f  kes the correspo
2da20 6e 64 69 6e 67 20 78 52 65 6e 61 6d 65 20 6d 65  nding xRename me
2da30 74 68 6f 64 2e 20 54 68 65 20 76 61 6c 75 65 0a  thod. The value.
2da40 2a 2a 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ** in register P
2da50 31 20 69 73 20 70 61 73 73 65 64 20 61 73 20 74  1 is passed as t
2da60 68 65 20 7a 4e 61 6d 65 20 61 72 67 75 6d 65 6e  he zName argumen
2da70 74 20 74 6f 20 74 68 65 20 78 52 65 6e 61 6d 65  t to the xRename
2da80 20 6d 65 74 68 6f 64 2e 0a 2a 2f 0a 63 61 73 65   method..*/.case
2da90 20 4f 50 5f 56 52 65 6e 61 6d 65 3a 20 7b 0a 20   OP_VRename: {. 
2daa0 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70   sqlite3_vtab *p
2dab0 56 74 61 62 3b 0a 20 20 4d 65 6d 20 2a 70 4e 61  Vtab;.  Mem *pNa
2dac0 6d 65 3b 0a 0a 20 20 70 56 74 61 62 20 3d 20 70  me;..  pVtab = p
2dad0 4f 70 2d 3e 70 34 2e 70 56 74 61 62 2d 3e 70 56  Op->p4.pVtab->pV
2dae0 74 61 62 3b 0a 20 20 70 4e 61 6d 65 20 3d 20 26  tab;.  pName = &
2daf0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
2db00 20 61 73 73 65 72 74 28 20 70 56 74 61 62 2d 3e   assert( pVtab->
2db10 70 4d 6f 64 75 6c 65 2d 3e 78 52 65 6e 61 6d 65  pModule->xRename
2db20 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 6d 65   );.  assert( me
2db30 6d 49 73 56 61 6c 69 64 28 70 4e 61 6d 65 29 20  mIsValid(pName) 
2db40 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52  );.  REGISTER_TR
2db50 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20 70 4e 61  ACE(pOp->p1, pNa
2db60 6d 65 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  me);.  assert( p
2db70 4e 61 6d 65 2d 3e 66 6c 61 67 73 20 26 20 4d 45  Name->flags & ME
2db80 4d 5f 53 74 72 20 29 3b 0a 20 20 72 63 20 3d 20  M_Str );.  rc = 
2db90 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 2d 3e  pVtab->pModule->
2dba0 78 52 65 6e 61 6d 65 28 70 56 74 61 62 2c 20 70  xRename(pVtab, p
2dbb0 4e 61 6d 65 2d 3e 7a 29 3b 0a 20 20 69 6d 70 6f  Name->z);.  impo
2dbc0 72 74 56 74 61 62 45 72 72 4d 73 67 28 70 2c 20  rtVtabErrMsg(p, 
2dbd0 70 56 74 61 62 29 3b 0a 20 20 70 2d 3e 65 78 70  pVtab);.  p->exp
2dbe0 69 72 65 64 20 3d 20 30 3b 0a 0a 20 20 62 72 65  ired = 0;..  bre
2dbf0 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69  ak;.}.#endif..#i
2dc00 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2dc10 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f  T_VIRTUALTABLE./
2dc20 2a 20 4f 70 63 6f 64 65 3a 20 56 55 70 64 61 74  * Opcode: VUpdat
2dc30 65 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a  e P1 P2 P3 P4 *.
2dc40 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f  **.** P4 is a po
2dc50 69 6e 74 65 72 20 74 6f 20 61 20 76 69 72 74 75  inter to a virtu
2dc60 61 6c 20 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c  al table object,
2dc70 20 61 6e 20 73 71 6c 69 74 65 33 5f 76 74 61 62   an sqlite3_vtab
2dc80 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 20 54   structure..** T
2dc90 68 69 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b  his opcode invok
2dca0 65 73 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e  es the correspon
2dcb0 64 69 6e 67 20 78 55 70 64 61 74 65 20 6d 65 74  ding xUpdate met
2dcc0 68 6f 64 2e 20 50 32 20 76 61 6c 75 65 73 0a 2a  hod. P2 values.*
2dcd0 2a 20 61 72 65 20 63 6f 6e 74 69 67 75 6f 75 73  * are contiguous
2dce0 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 73 74   memory cells st
2dcf0 61 72 74 69 6e 67 20 61 74 20 50 33 20 74 6f 20  arting at P3 to 
2dd00 70 61 73 73 20 74 6f 20 74 68 65 20 78 55 70 64  pass to the xUpd
2dd10 61 74 65 20 0a 2a 2a 20 69 6e 76 6f 63 61 74 69  ate .** invocati
2dd20 6f 6e 2e 20 54 68 65 20 76 61 6c 75 65 20 69 6e  on. The value in
2dd30 20 72 65 67 69 73 74 65 72 20 28 50 33 2b 50 32   register (P3+P2
2dd40 2d 31 29 20 63 6f 72 72 65 73 70 6f 6e 64 73 20  -1) corresponds 
2dd50 74 6f 20 74 68 65 20 0a 2a 2a 20 70 32 74 68 20  to the .** p2th 
2dd60 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 20 61  element of the a
2dd70 72 67 76 20 61 72 72 61 79 20 70 61 73 73 65 64  rgv array passed
2dd80 20 74 6f 20 78 55 70 64 61 74 65 2e 0a 2a 2a 0a   to xUpdate..**.
2dd90 2a 2a 20 54 68 65 20 78 55 70 64 61 74 65 20 6d  ** The xUpdate m
2dda0 65 74 68 6f 64 20 77 69 6c 6c 20 64 6f 20 61 20  ethod will do a 
2ddb0 44 45 4c 45 54 45 20 6f 72 20 61 6e 20 49 4e 53  DELETE or an INS
2ddc0 45 52 54 20 6f 72 20 62 6f 74 68 2e 0a 2a 2a 20  ERT or both..** 
2ddd0 54 68 65 20 61 72 67 76 5b 30 5d 20 65 6c 65 6d  The argv[0] elem
2dde0 65 6e 74 20 28 77 68 69 63 68 20 63 6f 72 72 65  ent (which corre
2ddf0 73 70 6f 6e 64 73 20 74 6f 20 6d 65 6d 6f 72 79  sponds to memory
2de00 20 63 65 6c 6c 20 50 33 29 0a 2a 2a 20 69 73 20   cell P3).** is 
2de10 74 68 65 20 72 6f 77 69 64 20 6f 66 20 61 20 72  the rowid of a r
2de20 6f 77 20 74 6f 20 64 65 6c 65 74 65 2e 20 20 49  ow to delete.  I
2de30 66 20 61 72 67 76 5b 30 5d 20 69 73 20 4e 55 4c  f argv[0] is NUL
2de40 4c 20 74 68 65 6e 20 6e 6f 20 0a 2a 2a 20 64 65  L then no .** de
2de50 6c 65 74 69 6f 6e 20 6f 63 63 75 72 73 2e 20 20  letion occurs.  
2de60 54 68 65 20 61 72 67 76 5b 31 5d 20 65 6c 65 6d  The argv[1] elem
2de70 65 6e 74 20 69 73 20 74 68 65 20 72 6f 77 69 64  ent is the rowid
2de80 20 6f 66 20 74 68 65 20 6e 65 77 20 0a 2a 2a 20   of the new .** 
2de90 72 6f 77 2e 20 20 54 68 69 73 20 63 61 6e 20 62  row.  This can b
2dea0 65 20 4e 55 4c 4c 20 74 6f 20 68 61 76 65 20 74  e NULL to have t
2deb0 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
2dec0 20 73 65 6c 65 63 74 20 74 68 65 20 6e 65 77 20   select the new 
2ded0 0a 2a 2a 20 72 6f 77 69 64 20 66 6f 72 20 69 74  .** rowid for it
2dee0 73 65 6c 66 2e 20 20 54 68 65 20 73 75 62 73 65  self.  The subse
2def0 71 75 65 6e 74 20 65 6c 65 6d 65 6e 74 73 20 69  quent elements i
2df00 6e 20 74 68 65 20 61 72 72 61 79 20 61 72 65 20  n the array are 
2df10 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 73 20 6f  .** the values o
2df20 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65  f columns in the
2df30 20 6e 65 77 20 72 6f 77 2e 0a 2a 2a 0a 2a 2a 20   new row..**.** 
2df40 49 66 20 50 32 3d 3d 31 20 74 68 65 6e 20 6e 6f  If P2==1 then no
2df50 20 69 6e 73 65 72 74 20 69 73 20 70 65 72 66 6f   insert is perfo
2df60 72 6d 65 64 2e 20 20 61 72 67 76 5b 30 5d 20 69  rmed.  argv[0] i
2df70 73 20 74 68 65 20 72 6f 77 69 64 20 6f 66 0a 2a  s the rowid of.*
2df80 2a 20 61 20 72 6f 77 20 74 6f 20 64 65 6c 65 74  * a row to delet
2df90 65 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61  e..**.** P1 is a
2dfa0 20 62 6f 6f 6c 65 61 6e 20 66 6c 61 67 2e 20 49   boolean flag. I
2dfb0 66 20 69 74 20 69 73 20 73 65 74 20 74 6f 20 74  f it is set to t
2dfc0 72 75 65 20 61 6e 64 20 74 68 65 20 78 55 70 64  rue and the xUpd
2dfd0 61 74 65 20 63 61 6c 6c 0a 2a 2a 20 69 73 20 73  ate call.** is s
2dfe0 75 63 63 65 73 73 66 75 6c 2c 20 74 68 65 6e 20  uccessful, then 
2dff0 74 68 65 20 76 61 6c 75 65 20 72 65 74 75 72 6e  the value return
2e000 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 6c 61  ed by sqlite3_la
2e010 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28  st_insert_rowid(
2e020 29 20 0a 2a 2a 20 69 73 20 73 65 74 20 74 6f 20  ) .** is set to 
2e030 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
2e040 20 72 6f 77 69 64 20 66 6f 72 20 74 68 65 20 72   rowid for the r
2e050 6f 77 20 6a 75 73 74 20 69 6e 73 65 72 74 65 64  ow just inserted
2e060 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 55 70  ..*/.case OP_VUp
2e070 64 61 74 65 3a 20 7b 0a 20 20 73 71 6c 69 74 65  date: {.  sqlite
2e080 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20  3_vtab *pVtab;. 
2e090 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20   sqlite3_module 
2e0a0 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 69 6e 74 20  *pModule;.  int 
2e0b0 6e 41 72 67 3b 0a 20 20 69 6e 74 20 69 3b 0a 20  nArg;.  int i;. 
2e0c0 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 20 72 6f   sqlite_int64 ro
2e0d0 77 69 64 3b 0a 20 20 4d 65 6d 20 2a 2a 61 70 41  wid;.  Mem **apA
2e0e0 72 67 3b 0a 20 20 4d 65 6d 20 2a 70 58 3b 0a 0a  rg;.  Mem *pX;..
2e0f0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
2e100 32 3d 3d 31 20 20 20 20 20 20 20 20 7c 7c 20 70  2==1        || p
2e110 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 46 61 69 6c 20  Op->p5==OE_Fail 
2e120 20 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45    || pOp->p5==OE
2e130 5f 52 6f 6c 6c 62 61 63 6b 20 0a 20 20 20 20 20  _Rollback .     
2e140 20 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45    || pOp->p5==OE
2e150 5f 41 62 6f 72 74 20 7c 7c 20 70 4f 70 2d 3e 70  _Abort || pOp->p
2e160 35 3d 3d 4f 45 5f 49 67 6e 6f 72 65 20 7c 7c 20  5==OE_Ignore || 
2e170 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 52 65 70 6c  pOp->p5==OE_Repl
2e180 61 63 65 0a 20 20 29 3b 0a 20 20 70 56 74 61 62  ace.  );.  pVtab
2e190 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62   = pOp->p4.pVtab
2e1a0 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75  ->pVtab;.  pModu
2e1b0 6c 65 20 3d 20 28 73 71 6c 69 74 65 33 5f 6d 6f  le = (sqlite3_mo
2e1c0 64 75 6c 65 20 2a 29 70 56 74 61 62 2d 3e 70 4d  dule *)pVtab->pM
2e1d0 6f 64 75 6c 65 3b 0a 20 20 6e 41 72 67 20 3d 20  odule;.  nArg = 
2e1e0 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72  pOp->p2;.  asser
2e1f0 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  t( pOp->p4type==
2e200 50 34 5f 56 54 41 42 20 29 3b 0a 20 20 69 66 28  P4_VTAB );.  if(
2e210 20 41 4c 57 41 59 53 28 70 4d 6f 64 75 6c 65 2d   ALWAYS(pModule-
2e220 3e 78 55 70 64 61 74 65 29 20 29 7b 0a 20 20 20  >xUpdate) ){.   
2e230 20 75 38 20 76 74 61 62 4f 6e 43 6f 6e 66 6c 69   u8 vtabOnConfli
2e240 63 74 20 3d 20 64 62 2d 3e 76 74 61 62 4f 6e 43  ct = db->vtabOnC
2e250 6f 6e 66 6c 69 63 74 3b 0a 20 20 20 20 61 70 41  onflict;.    apA
2e260 72 67 20 3d 20 70 2d 3e 61 70 41 72 67 3b 0a 20  rg = p->apArg;. 
2e270 20 20 20 70 58 20 3d 20 26 61 4d 65 6d 5b 70 4f     pX = &aMem[pO
2e280 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 66 6f 72 28  p->p3];.    for(
2e290 69 3d 30 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b  i=0; i<nArg; i++
2e2a0 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ){.      assert(
2e2b0 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 58 29 20   memIsValid(pX) 
2e2c0 29 3b 0a 20 20 20 20 20 20 6d 65 6d 41 62 6f 75  );.      memAbou
2e2d0 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 58 29  tToChange(p, pX)
2e2e0 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
2e2f0 64 62 65 4d 65 6d 53 74 6f 72 65 54 79 70 65 28  dbeMemStoreType(
2e300 70 58 29 3b 0a 20 20 20 20 20 20 61 70 41 72 67  pX);.      apArg
2e310 5b 69 5d 20 3d 20 70 58 3b 0a 20 20 20 20 20 20  [i] = pX;.      
2e320 70 58 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20  pX++;.    }.    
2e330 64 62 2d 3e 76 74 61 62 4f 6e 43 6f 6e 66 6c 69  db->vtabOnConfli
2e340 63 74 20 3d 20 70 4f 70 2d 3e 70 35 3b 0a 20 20  ct = pOp->p5;.  
2e350 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e    rc = pModule->
2e360 78 55 70 64 61 74 65 28 70 56 74 61 62 2c 20 6e  xUpdate(pVtab, n
2e370 41 72 67 2c 20 61 70 41 72 67 2c 20 26 72 6f 77  Arg, apArg, &row
2e380 69 64 29 3b 0a 20 20 20 20 64 62 2d 3e 76 74 61  id);.    db->vta
2e390 62 4f 6e 43 6f 6e 66 6c 69 63 74 20 3d 20 76 74  bOnConflict = vt
2e3a0 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 3b 0a 20 20  abOnConflict;.  
2e3b0 20 20 69 6d 70 6f 72 74 56 74 61 62 45 72 72 4d    importVtabErrM
2e3c0 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20  sg(p, pVtab);.  
2e3d0 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
2e3e0 5f 4f 4b 20 26 26 20 70 4f 70 2d 3e 70 31 20 29  _OK && pOp->p1 )
2e3f0 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  {.      assert( 
2e400 6e 41 72 67 3e 31 20 26 26 20 61 70 41 72 67 5b  nArg>1 && apArg[
2e410 30 5d 20 26 26 20 28 61 70 41 72 67 5b 30 5d 2d  0] && (apArg[0]-
2e420 3e 66 6c 61 67 73 26 4d 45 4d 5f 4e 75 6c 6c 29  >flags&MEM_Null)
2e430 20 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 6c 61   );.      db->la
2e440 73 74 52 6f 77 69 64 20 3d 20 72 6f 77 69 64 3b  stRowid = rowid;
2e450 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 72  .    }.    if( r
2e460 63 3d 3d 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52  c==SQLITE_CONSTR
2e470 41 49 4e 54 20 26 26 20 70 4f 70 2d 3e 70 34 2e  AINT && pOp->p4.
2e480 70 56 74 61 62 2d 3e 62 43 6f 6e 73 74 72 61 69  pVtab->bConstrai
2e490 6e 74 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20  nt ){.      if( 
2e4a0 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 49 67 6e 6f  pOp->p5==OE_Igno
2e4b0 72 65 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63  re ){.        rc
2e4c0 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20   = SQLITE_OK;.  
2e4d0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
2e4e0 20 20 20 70 2d 3e 65 72 72 6f 72 41 63 74 69 6f     p->errorActio
2e4f0 6e 20 3d 20 28 28 70 4f 70 2d 3e 70 35 3d 3d 4f  n = ((pOp->p5==O
2e500 45 5f 52 65 70 6c 61 63 65 29 20 3f 20 4f 45 5f  E_Replace) ? OE_
2e510 41 62 6f 72 74 20 3a 20 70 4f 70 2d 3e 70 35 29  Abort : pOp->p5)
2e520 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65  ;.      }.    }e
2e530 6c 73 65 7b 0a 20 20 20 20 20 20 70 2d 3e 6e 43  lse{.      p->nC
2e540 68 61 6e 67 65 2b 2b 3b 0a 20 20 20 20 7d 0a 20  hange++;.    }. 
2e550 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65   }.  break;.}.#e
2e560 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
2e570 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
2e580 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 20 53 51   */..#ifndef  SQ
2e590 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f  LITE_OMIT_PAGER_
2e5a0 50 52 41 47 4d 41 53 0a 2f 2a 20 4f 70 63 6f 64  PRAGMAS./* Opcod
2e5b0 65 3a 20 50 61 67 65 63 6f 75 6e 74 20 50 31 20  e: Pagecount P1 
2e5c0 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57  P2 * * *.**.** W
2e5d0 72 69 74 65 20 74 68 65 20 63 75 72 72 65 6e 74  rite the current
2e5e0 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73   number of pages
2e5f0 20 69 6e 20 64 61 74 61 62 61 73 65 20 50 31 20   in database P1 
2e600 74 6f 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 50  to memory cell P
2e610 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 61  2..*/.case OP_Pa
2e620 67 65 63 6f 75 6e 74 3a 20 7b 20 20 20 20 20 20  gecount: {      
2e630 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72        /* out2-pr
2e640 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 70 4f  erelease */.  pO
2e650 75 74 2d 3e 75 2e 69 20 3d 20 73 71 6c 69 74 65  ut->u.i = sqlite
2e660 33 42 74 72 65 65 4c 61 73 74 50 61 67 65 28 64  3BtreeLastPage(d
2e670 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e  b->aDb[pOp->p1].
2e680 70 42 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  pBt);.  break;.}
2e690 0a 23 65 6e 64 69 66 0a 0a 0a 23 69 66 6e 64 65  .#endif...#ifnde
2e6a0 66 20 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  f  SQLITE_OMIT_P
2e6b0 41 47 45 52 5f 50 52 41 47 4d 41 53 0a 2f 2a 20  AGER_PRAGMAS./* 
2e6c0 4f 70 63 6f 64 65 3a 20 4d 61 78 50 67 63 6e 74  Opcode: MaxPgcnt
2e6d0 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
2e6e0 0a 2a 2a 20 54 72 79 20 74 6f 20 73 65 74 20 74  .** Try to set t
2e6f0 68 65 20 6d 61 78 69 6d 75 6d 20 70 61 67 65 20  he maximum page 
2e700 63 6f 75 6e 74 20 66 6f 72 20 64 61 74 61 62 61  count for databa
2e710 73 65 20 50 31 20 74 6f 20 74 68 65 20 76 61 6c  se P1 to the val
2e720 75 65 20 69 6e 20 50 33 2e 0a 2a 2a 20 44 6f 20  ue in P3..** Do 
2e730 6e 6f 74 20 6c 65 74 20 74 68 65 20 6d 61 78 69  not let the maxi
2e740 6d 75 6d 20 70 61 67 65 20 63 6f 75 6e 74 20 66  mum page count f
2e750 61 6c 6c 20 62 65 6c 6f 77 20 74 68 65 20 63 75  all below the cu
2e760 72 72 65 6e 74 20 70 61 67 65 20 63 6f 75 6e 74  rrent page count
2e770 20 61 6e 64 0a 2a 2a 20 64 6f 20 6e 6f 74 20 63   and.** do not c
2e780 68 61 6e 67 65 20 74 68 65 20 6d 61 78 69 6d 75  hange the maximu
2e790 6d 20 70 61 67 65 20 63 6f 75 6e 74 20 76 61 6c  m page count val
2e7a0 75 65 20 69 66 20 50 33 3d 3d 30 2e 0a 2a 2a 0a  ue if P3==0..**.
2e7b0 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 6d 61 78  ** Store the max
2e7c0 69 6d 75 6d 20 70 61 67 65 20 63 6f 75 6e 74 20  imum page count 
2e7d0 61 66 74 65 72 20 74 68 65 20 63 68 61 6e 67 65  after the change
2e7e0 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e   in register P2.
2e7f0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 61 78 50  .*/.case OP_MaxP
2e800 67 63 6e 74 3a 20 7b 20 20 20 20 20 20 20 20 20  gcnt: {         
2e810 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65     /* out2-prere
2e820 6c 65 61 73 65 20 2a 2f 0a 20 20 75 6e 73 69 67  lease */.  unsig
2e830 6e 65 64 20 69 6e 74 20 6e 65 77 4d 61 78 3b 0a  ned int newMax;.
2e840 20 20 42 74 72 65 65 20 2a 70 42 74 3b 0a 0a 20    Btree *pBt;.. 
2e850 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70   pBt = db->aDb[p
2e860 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20 20 6e  Op->p1].pBt;.  n
2e870 65 77 4d 61 78 20 3d 20 30 3b 0a 20 20 69 66 28  ewMax = 0;.  if(
2e880 20 70 4f 70 2d 3e 70 33 20 29 7b 0a 20 20 20 20   pOp->p3 ){.    
2e890 6e 65 77 4d 61 78 20 3d 20 73 71 6c 69 74 65 33  newMax = sqlite3
2e8a0 42 74 72 65 65 4c 61 73 74 50 61 67 65 28 70 42  BtreeLastPage(pB
2e8b0 74 29 3b 0a 20 20 20 20 69 66 28 20 6e 65 77 4d  t);.    if( newM
2e8c0 61 78 20 3c 20 28 75 6e 73 69 67 6e 65 64 29 70  ax < (unsigned)p
2e8d0 4f 70 2d 3e 70 33 20 29 20 6e 65 77 4d 61 78 20  Op->p3 ) newMax 
2e8e0 3d 20 28 75 6e 73 69 67 6e 65 64 29 70 4f 70 2d  = (unsigned)pOp-
2e8f0 3e 70 33 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d  >p3;.  }.  pOut-
2e900 3e 75 2e 69 20 3d 20 73 71 6c 69 74 65 33 42 74  >u.i = sqlite3Bt
2e910 72 65 65 4d 61 78 50 61 67 65 43 6f 75 6e 74 28  reeMaxPageCount(
2e920 70 42 74 2c 20 6e 65 77 4d 61 78 29 3b 0a 20 20  pBt, newMax);.  
2e930 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a  break;.}.#endif.
2e940 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
2e950 5f 4f 4d 49 54 5f 54 52 41 43 45 0a 2f 2a 20 4f  _OMIT_TRACE./* O
2e960 70 63 6f 64 65 3a 20 54 72 61 63 65 20 2a 20 2a  pcode: Trace * *
2e970 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 49 66   * P4 *.**.** If
2e980 20 74 72 61 63 69 6e 67 20 69 73 20 65 6e 61 62   tracing is enab
2e990 6c 65 64 20 28 62 79 20 74 68 65 20 73 71 6c 69  led (by the sqli
2e9a0 74 65 33 5f 74 72 61 63 65 28 29 29 20 69 6e 74  te3_trace()) int
2e9b0 65 72 66 61 63 65 2c 20 74 68 65 6e 0a 2a 2a 20  erface, then.** 
2e9c0 74 68 65 20 55 54 46 2d 38 20 73 74 72 69 6e 67  the UTF-8 string
2e9d0 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 50 34   contained in P4
2e9e0 20 69 73 20 65 6d 69 74 74 65 64 20 6f 6e 20 74   is emitted on t
2e9f0 68 65 20 74 72 61 63 65 20 63 61 6c 6c 62 61 63  he trace callbac
2ea00 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 72  k..*/.case OP_Tr
2ea10 61 63 65 3a 20 7b 0a 20 20 63 68 61 72 20 2a 7a  ace: {.  char *z
2ea20 54 72 61 63 65 3b 0a 0a 20 20 7a 54 72 61 63 65  Trace;..  zTrace
2ea30 20 3d 20 28 70 4f 70 2d 3e 70 34 2e 7a 20 3f 20   = (pOp->p4.z ? 
2ea40 70 4f 70 2d 3e 70 34 2e 7a 20 3a 20 70 2d 3e 7a  pOp->p4.z : p->z
2ea50 53 71 6c 29 3b 0a 20 20 69 66 28 20 7a 54 72 61  Sql);.  if( zTra
2ea60 63 65 20 29 7b 0a 20 20 20 20 69 66 28 20 64 62  ce ){.    if( db
2ea70 2d 3e 78 54 72 61 63 65 20 29 7b 0a 20 20 20 20  ->xTrace ){.    
2ea80 20 20 63 68 61 72 20 2a 7a 20 3d 20 73 71 6c 69    char *z = sqli
2ea90 74 65 33 56 64 62 65 45 78 70 61 6e 64 53 71 6c  te3VdbeExpandSql
2eaa0 28 70 2c 20 7a 54 72 61 63 65 29 3b 0a 20 20 20  (p, zTrace);.   
2eab0 20 20 20 64 62 2d 3e 78 54 72 61 63 65 28 64 62     db->xTrace(db
2eac0 2d 3e 70 54 72 61 63 65 41 72 67 2c 20 7a 29 3b  ->pTraceArg, z);
2ead0 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 62  .      sqlite3Db
2eae0 46 72 65 65 28 64 62 2c 20 7a 29 3b 0a 20 20 20  Free(db, z);.   
2eaf0 20 7d 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45   }.#ifdef SQLITE
2eb00 5f 44 45 42 55 47 0a 20 20 20 20 69 66 28 20 28  _DEBUG.    if( (
2eb10 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49  db->flags & SQLI
2eb20 54 45 5f 53 71 6c 54 72 61 63 65 29 21 3d 30 20  TE_SqlTrace)!=0 
2eb30 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
2eb40 44 65 62 75 67 50 72 69 6e 74 66 28 22 53 51 4c  DebugPrintf("SQL
2eb50 2d 74 72 61 63 65 3a 20 25 73 5c 6e 22 2c 20 7a  -trace: %s\n", z
2eb60 54 72 61 63 65 29 3b 0a 20 20 20 20 7d 0a 23 65  Trace);.    }.#e
2eb70 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 44  ndif /* SQLITE_D
2eb80 45 42 55 47 20 2a 2f 0a 20 20 7d 0a 20 20 62 72  EBUG */.  }.  br
2eb90 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a  eak;.}.#endif...
2eba0 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 6f 70 20  /* Opcode: Noop 
2ebb0 2a 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  * * * * *.**.** 
2ebc0 44 6f 20 6e 6f 74 68 69 6e 67 2e 20 20 54 68 69  Do nothing.  Thi
2ebd0 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73  s instruction is
2ebe0 20 6f 66 74 65 6e 20 75 73 65 66 75 6c 20 61 73   often useful as
2ebf0 20 61 20 6a 75 6d 70 0a 2a 2a 20 64 65 73 74 69   a jump.** desti
2ec00 6e 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 0a 2a 2a  nation..*/./*.**
2ec10 20 54 68 65 20 6d 61 67 69 63 20 45 78 70 6c 61   The magic Expla
2ec20 69 6e 20 6f 70 63 6f 64 65 20 61 72 65 20 6f 6e  in opcode are on
2ec30 6c 79 20 69 6e 73 65 72 74 65 64 20 77 68 65 6e  ly inserted when
2ec40 20 65 78 70 6c 61 69 6e 3d 3d 32 20 28 77 68 69   explain==2 (whi
2ec50 63 68 0a 2a 2a 20 69 73 20 74 6f 20 73 61 79 20  ch.** is to say 
2ec60 77 68 65 6e 20 74 68 65 20 45 58 50 4c 41 49 4e  when the EXPLAIN
2ec70 20 51 55 45 52 59 20 50 4c 41 4e 20 73 79 6e 74   QUERY PLAN synt
2ec80 61 78 20 69 73 20 75 73 65 64 2e 29 0a 2a 2a 20  ax is used.).** 
2ec90 54 68 69 73 20 6f 70 63 6f 64 65 20 72 65 63 6f  This opcode reco
2eca0 72 64 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  rds information 
2ecb0 66 72 6f 6d 20 74 68 65 20 6f 70 74 69 6d 69 7a  from the optimiz
2ecc0 65 72 2e 20 20 49 74 20 69 73 20 74 68 65 0a 2a  er.  It is the.*
2ecd0 2a 20 74 68 65 20 73 61 6d 65 20 61 73 20 61 20  * the same as a 
2ece0 6e 6f 2d 6f 70 2e 20 20 54 68 69 73 20 6f 70 63  no-op.  This opc
2ecf0 6f 64 65 73 6e 65 76 65 72 20 61 70 70 65 61 72  odesnever appear
2ed00 73 20 69 6e 20 61 20 72 65 61 6c 20 56 4d 20 70  s in a real VM p
2ed10 72 6f 67 72 61 6d 2e 0a 2a 2f 0a 64 65 66 61 75  rogram..*/.defau
2ed20 6c 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 2f  lt: {          /
2ed30 2a 20 54 68 69 73 20 69 73 20 72 65 61 6c 6c 79  * This is really
2ed40 20 4f 50 5f 4e 6f 6f 70 20 61 6e 64 20 4f 50 5f   OP_Noop and OP_
2ed50 45 78 70 6c 61 69 6e 20 2a 2f 0a 20 20 61 73 73  Explain */.  ass
2ed60 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  ert( pOp->opcode
2ed70 3d 3d 4f 50 5f 4e 6f 6f 70 20 7c 7c 20 70 4f 70  ==OP_Noop || pOp
2ed80 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45 78 70  ->opcode==OP_Exp
2ed90 6c 61 69 6e 20 29 3b 0a 20 20 62 72 65 61 6b 3b  lain );.  break;
2eda0 0a 7d 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .}../***********
2edb0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2edc0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2edd0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2ede0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2edf0 2a 2a 0a 2a 2a 20 54 68 65 20 63 61 73 65 73 20  **.** The cases 
2ee00 6f 66 20 74 68 65 20 73 77 69 74 63 68 20 73 74  of the switch st
2ee10 61 74 65 6d 65 6e 74 20 61 62 6f 76 65 20 74 68  atement above th
2ee20 69 73 20 6c 69 6e 65 20 73 68 6f 75 6c 64 20 61  is line should a
2ee30 6c 6c 20 62 65 20 69 6e 64 65 6e 74 65 64 0a 2a  ll be indented.*
2ee40 2a 20 62 79 20 36 20 73 70 61 63 65 73 2e 20 20  * by 6 spaces.  
2ee50 42 75 74 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73  But the left-mos
2ee60 74 20 36 20 73 70 61 63 65 73 20 68 61 76 65 20  t 6 spaces have 
2ee70 62 65 65 6e 20 72 65 6d 6f 76 65 64 20 74 6f 20  been removed to 
2ee80 69 6d 70 72 6f 76 65 20 74 68 65 0a 2a 2a 20 72  improve the.** r
2ee90 65 61 64 61 62 69 6c 69 74 79 2e 20 20 46 72 6f  eadability.  Fro
2eea0 6d 20 74 68 69 73 20 70 6f 69 6e 74 20 6f 6e 20  m this point on 
2eeb0 64 6f 77 6e 2c 20 74 68 65 20 6e 6f 72 6d 61 6c  down, the normal
2eec0 20 69 6e 64 65 6e 74 61 74 69 6f 6e 20 72 75 6c   indentation rul
2eed0 65 73 20 61 72 65 0a 2a 2a 20 72 65 73 74 6f 72  es are.** restor
2eee0 65 64 2e 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ed..************
2eef0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2ef00 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2ef10 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2ef20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2ef30 2a 2f 0a 20 20 20 20 7d 0a 0a 23 69 66 64 65 66  */.    }..#ifdef
2ef40 20 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 20 20   VDBE_PROFILE.  
2ef50 20 20 7b 0a 20 20 20 20 20 20 75 36 34 20 65 6c    {.      u64 el
2ef60 61 70 73 65 64 20 3d 20 73 71 6c 69 74 65 33 48  apsed = sqlite3H
2ef70 77 74 69 6d 65 28 29 20 2d 20 73 74 61 72 74 3b  wtime() - start;
2ef80 0a 20 20 20 20 20 20 70 4f 70 2d 3e 63 79 63 6c  .      pOp->cycl
2ef90 65 73 20 2b 3d 20 65 6c 61 70 73 65 64 3b 0a 20  es += elapsed;. 
2efa0 20 20 20 20 20 70 4f 70 2d 3e 63 6e 74 2b 2b 3b       pOp->cnt++;
2efb0 0a 23 69 66 20 30 0a 20 20 20 20 20 20 20 20 66  .#if 0.        f
2efc0 70 72 69 6e 74 66 28 73 74 64 6f 75 74 2c 20 22  printf(stdout, "
2efd0 25 31 30 6c 6c 75 20 22 2c 20 65 6c 61 70 73 65  %10llu ", elapse
2efe0 64 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  d);.        sqli
2eff0 74 65 33 56 64 62 65 50 72 69 6e 74 4f 70 28 73  te3VdbePrintOp(s
2f000 74 64 6f 75 74 2c 20 6f 72 69 67 50 63 2c 20 26  tdout, origPc, &
2f010 61 4f 70 5b 6f 72 69 67 50 63 5d 29 3b 0a 23 65  aOp[origPc]);.#e
2f020 6e 64 69 66 0a 20 20 20 20 7d 0a 23 65 6e 64 69  ndif.    }.#endi
2f030 66 0a 0a 20 20 20 20 2f 2a 20 54 68 65 20 66 6f  f..    /* The fo
2f040 6c 6c 6f 77 69 6e 67 20 63 6f 64 65 20 61 64 64  llowing code add
2f050 73 20 6e 6f 74 68 69 6e 67 20 74 6f 20 74 68 65  s nothing to the
2f060 20 61 63 74 75 61 6c 20 66 75 6e 63 74 69 6f 6e   actual function
2f070 61 6c 69 74 79 0a 20 20 20 20 2a 2a 20 6f 66 20  ality.    ** of 
2f080 74 68 65 20 70 72 6f 67 72 61 6d 2e 20 20 49 74  the program.  It
2f090 20 69 73 20 6f 6e 6c 79 20 68 65 72 65 20 66 6f   is only here fo
2f0a0 72 20 74 65 73 74 69 6e 67 20 61 6e 64 20 64 65  r testing and de
2f0b0 62 75 67 67 69 6e 67 2e 0a 20 20 20 20 2a 2a 20  bugging..    ** 
2f0c0 4f 6e 20 74 68 65 20 6f 74 68 65 72 20 68 61 6e  On the other han
2f0d0 64 2c 20 69 74 20 64 6f 65 73 20 62 75 72 6e 20  d, it does burn 
2f0e0 43 50 55 20 63 79 63 6c 65 73 20 65 76 65 72 79  CPU cycles every
2f0f0 20 74 69 6d 65 20 74 68 72 6f 75 67 68 0a 20 20   time through.  
2f100 20 20 2a 2a 20 74 68 65 20 65 76 61 6c 75 61 74    ** the evaluat
2f110 6f 72 20 6c 6f 6f 70 2e 20 20 53 6f 20 77 65 20  or loop.  So we 
2f120 63 61 6e 20 6c 65 61 76 65 20 69 74 20 6f 75 74  can leave it out
2f130 20 77 68 65 6e 20 4e 44 45 42 55 47 20 69 73 20   when NDEBUG is 
2f140 64 65 66 69 6e 65 64 2e 0a 20 20 20 20 2a 2f 0a  defined..    */.
2f150 23 69 66 6e 64 65 66 20 4e 44 45 42 55 47 0a 20  #ifndef NDEBUG. 
2f160 20 20 20 61 73 73 65 72 74 28 20 70 63 3e 3d 2d     assert( pc>=-
2f170 31 20 26 26 20 70 63 3c 70 2d 3e 6e 4f 70 20 29  1 && pc<p->nOp )
2f180 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  ;..#ifdef SQLITE
2f190 5f 44 45 42 55 47 0a 20 20 20 20 69 66 28 20 70  _DEBUG.    if( p
2f1a0 2d 3e 74 72 61 63 65 20 29 7b 0a 20 20 20 20 20  ->trace ){.     
2f1b0 20 69 66 28 20 72 63 21 3d 30 20 29 20 66 70 72   if( rc!=0 ) fpr
2f1c0 69 6e 74 66 28 70 2d 3e 74 72 61 63 65 2c 22 72  intf(p->trace,"r
2f1d0 63 3d 25 64 5c 6e 22 2c 72 63 29 3b 0a 20 20 20  c=%d\n",rc);.   
2f1e0 20 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 66 6c     if( pOp->opfl
2f1f0 61 67 73 20 26 20 28 4f 50 46 4c 47 5f 4f 55 54  ags & (OPFLG_OUT
2f200 32 5f 50 52 45 52 45 4c 45 41 53 45 7c 4f 50 46  2_PRERELEASE|OPF
2f210 4c 47 5f 4f 55 54 32 29 20 29 7b 0a 20 20 20 20  LG_OUT2) ){.    
2f220 20 20 20 20 72 65 67 69 73 74 65 72 54 72 61 63      registerTrac
2f230 65 28 70 2d 3e 74 72 61 63 65 2c 20 70 4f 70 2d  e(p->trace, pOp-
2f240 3e 70 32 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  >p2, &aMem[pOp->
2f250 70 32 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  p2]);.      }.  
2f260 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 66      if( pOp->opf
2f270 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f 4f 55 54  lags & OPFLG_OUT
2f280 33 20 29 7b 0a 20 20 20 20 20 20 20 20 72 65 67  3 ){.        reg
2f290 69 73 74 65 72 54 72 61 63 65 28 70 2d 3e 74 72  isterTrace(p->tr
2f2a0 61 63 65 2c 20 70 4f 70 2d 3e 70 33 2c 20 26 61  ace, pOp->p3, &a
2f2b0 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20  Mem[pOp->p3]);. 
2f2c0 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 23 65 6e       }.    }.#en
2f2d0 64 69 66 20 20 2f 2a 20 53 51 4c 49 54 45 5f 44  dif  /* SQLITE_D
2f2e0 45 42 55 47 20 2a 2f 0a 23 65 6e 64 69 66 20 20  EBUG */.#endif  
2f2f0 2f 2a 20 4e 44 45 42 55 47 20 2a 2f 0a 20 20 7d  /* NDEBUG */.  }
2f300 20 20 2f 2a 20 54 68 65 20 65 6e 64 20 6f 66 20    /* The end of 
2f310 74 68 65 20 66 6f 72 28 3b 3b 29 20 6c 6f 6f 70  the for(;;) loop
2f320 20 74 68 65 20 6c 6f 6f 70 73 20 74 68 72 6f 75   the loops throu
2f330 67 68 20 6f 70 63 6f 64 65 73 20 2a 2f 0a 0a 20  gh opcodes */.. 
2f340 20 2f 2a 20 49 66 20 77 65 20 72 65 61 63 68 20   /* If we reach 
2f350 74 68 69 73 20 70 6f 69 6e 74 2c 20 69 74 20 6d  this point, it m
2f360 65 61 6e 73 20 74 68 61 74 20 65 78 65 63 75 74  eans that execut
2f370 69 6f 6e 20 69 73 20 66 69 6e 69 73 68 65 64 20  ion is finished 
2f380 77 69 74 68 0a 20 20 2a 2a 20 61 6e 20 65 72 72  with.  ** an err
2f390 6f 72 20 6f 66 20 73 6f 6d 65 20 6b 69 6e 64 2e  or of some kind.
2f3a0 0a 20 20 2a 2f 0a 76 64 62 65 5f 65 72 72 6f 72  .  */.vdbe_error
2f3b0 5f 68 61 6c 74 3a 0a 20 20 61 73 73 65 72 74 28  _halt:.  assert(
2f3c0 20 72 63 20 29 3b 0a 20 20 70 2d 3e 72 63 20 3d   rc );.  p->rc =
2f3d0 20 72 63 3b 0a 20 20 74 65 73 74 63 61 73 65 28   rc;.  testcase(
2f3e0 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f   sqlite3GlobalCo
2f3f0 6e 66 69 67 2e 78 4c 6f 67 21 3d 30 20 29 3b 0a  nfig.xLog!=0 );.
2f400 20 20 73 71 6c 69 74 65 33 5f 6c 6f 67 28 72 63    sqlite3_log(rc
2f410 2c 20 22 73 74 61 74 65 6d 65 6e 74 20 61 62 6f  , "statement abo
2f420 72 74 73 20 61 74 20 25 64 3a 20 5b 25 73 5d 20  rts at %d: [%s] 
2f430 25 73 22 2c 20 0a 20 20 20 20 20 20 20 20 20 20  %s", .          
2f440 20 20 20 20 20 20 20 20 20 70 63 2c 20 70 2d 3e           pc, p->
2f450 7a 53 71 6c 2c 20 70 2d 3e 7a 45 72 72 4d 73 67  zSql, p->zErrMsg
2f460 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  );.  sqlite3Vdbe
2f470 48 61 6c 74 28 70 29 3b 0a 20 20 69 66 28 20 72  Halt(p);.  if( r
2f480 63 3d 3d 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f  c==SQLITE_IOERR_
2f490 4e 4f 4d 45 4d 20 29 20 64 62 2d 3e 6d 61 6c 6c  NOMEM ) db->mall
2f4a0 6f 63 46 61 69 6c 65 64 20 3d 20 31 3b 0a 20 20  ocFailed = 1;.  
2f4b0 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f  rc = SQLITE_ERRO
2f4c0 52 3b 0a 20 20 69 66 28 20 72 65 73 65 74 53 63  R;.  if( resetSc
2f4d0 68 65 6d 61 4f 6e 46 61 75 6c 74 3e 30 20 29 7b  hemaOnFault>0 ){
2f4e0 0a 20 20 20 20 73 71 6c 69 74 65 33 52 65 73 65  .    sqlite3Rese
2f4f0 74 49 6e 74 65 72 6e 61 6c 53 63 68 65 6d 61 28  tInternalSchema(
2f500 64 62 2c 20 72 65 73 65 74 53 63 68 65 6d 61 4f  db, resetSchemaO
2f510 6e 46 61 75 6c 74 2d 31 29 3b 0a 20 20 7d 0a 0a  nFault-1);.  }..
2f520 20 20 2f 2a 20 54 68 69 73 20 69 73 20 74 68 65    /* This is the
2f530 20 6f 6e 6c 79 20 77 61 79 20 6f 75 74 20 6f 66   only way out of
2f540 20 74 68 69 73 20 70 72 6f 63 65 64 75 72 65 2e   this procedure.
2f550 20 20 57 65 20 68 61 76 65 20 74 6f 0a 20 20 2a    We have to.  *
2f560 2a 20 72 65 6c 65 61 73 65 20 74 68 65 20 6d 75  * release the mu
2f570 74 65 78 65 73 20 6f 6e 20 62 74 72 65 65 73 20  texes on btrees 
2f580 74 68 61 74 20 77 65 72 65 20 61 63 71 75 69 72  that were acquir
2f590 65 64 20 61 74 20 74 68 65 0a 20 20 2a 2a 20 74  ed at the.  ** t
2f5a0 6f 70 2e 20 2a 2f 0a 76 64 62 65 5f 72 65 74 75  op. */.vdbe_retu
2f5b0 72 6e 3a 0a 20 20 73 71 6c 69 74 65 33 56 64 62  rn:.  sqlite3Vdb
2f5c0 65 4c 65 61 76 65 28 70 29 3b 0a 20 20 72 65 74  eLeave(p);.  ret
2f5d0 75 72 6e 20 72 63 3b 0a 0a 20 20 2f 2a 20 4a 75  urn rc;..  /* Ju
2f5e0 6d 70 20 74 6f 20 68 65 72 65 20 69 66 20 61 20  mp to here if a 
2f5f0 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6c  string or blob l
2f600 61 72 67 65 72 20 74 68 61 6e 20 53 51 4c 49 54  arger than SQLIT
2f610 45 5f 4d 41 58 5f 4c 45 4e 47 54 48 0a 20 20 2a  E_MAX_LENGTH.  *
2f620 2a 20 69 73 20 65 6e 63 6f 75 6e 74 65 72 65 64  * is encountered
2f630 2e 0a 20 20 2a 2f 0a 74 6f 6f 5f 62 69 67 3a 0a  ..  */.too_big:.
2f640 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69    sqlite3SetStri
2f650 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20  ng(&p->zErrMsg, 
2f660 64 62 2c 20 22 73 74 72 69 6e 67 20 6f 72 20 62  db, "string or b
2f670 6c 6f 62 20 74 6f 6f 20 62 69 67 22 29 3b 0a 20  lob too big");. 
2f680 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 54 4f 4f   rc = SQLITE_TOO
2f690 42 49 47 3b 0a 20 20 67 6f 74 6f 20 76 64 62 65  BIG;.  goto vdbe
2f6a0 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 0a 20 20  _error_halt;..  
2f6b0 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72 65 20  /* Jump to here 
2f6c0 69 66 20 61 20 6d 61 6c 6c 6f 63 28 29 20 66 61  if a malloc() fa
2f6d0 69 6c 73 2e 0a 20 20 2a 2f 0a 6e 6f 5f 6d 65 6d  ils..  */.no_mem
2f6e0 3a 0a 20 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61  :.  db->mallocFa
2f6f0 69 6c 65 64 20 3d 20 31 3b 0a 20 20 73 71 6c 69  iled = 1;.  sqli
2f700 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d  te3SetString(&p-
2f710 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 6f  >zErrMsg, db, "o
2f720 75 74 20 6f 66 20 6d 65 6d 6f 72 79 22 29 3b 0a  ut of memory");.
2f730 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f    rc = SQLITE_NO
2f740 4d 45 4d 3b 0a 20 20 67 6f 74 6f 20 76 64 62 65  MEM;.  goto vdbe
2f750 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 0a 20 20  _error_halt;..  
2f760 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72 65 20  /* Jump to here 
2f770 66 6f 72 20 61 6e 79 20 6f 74 68 65 72 20 6b 69  for any other ki
2f780 6e 64 20 6f 66 20 66 61 74 61 6c 20 65 72 72 6f  nd of fatal erro
2f790 72 2e 20 20 54 68 65 20 22 72 63 22 20 76 61 72  r.  The "rc" var
2f7a0 69 61 62 6c 65 0a 20 20 2a 2a 20 73 68 6f 75 6c  iable.  ** shoul
2f7b0 64 20 68 6f 6c 64 20 74 68 65 20 65 72 72 6f 72  d hold the error
2f7c0 20 6e 75 6d 62 65 72 2e 0a 20 20 2a 2f 0a 61 62   number..  */.ab
2f7d0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
2f7e0 3a 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 7a  :.  assert( p->z
2f7f0 45 72 72 4d 73 67 3d 3d 30 20 29 3b 0a 20 20 69  ErrMsg==0 );.  i
2f800 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69  f( db->mallocFai
2f810 6c 65 64 20 29 20 72 63 20 3d 20 53 51 4c 49 54  led ) rc = SQLIT
2f820 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 69 66 28 20 72  E_NOMEM;.  if( r
2f830 63 21 3d 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f  c!=SQLITE_IOERR_
2f840 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20 20 73 71 6c  NOMEM ){.    sql
2f850 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70  ite3SetString(&p
2f860 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22  ->zErrMsg, db, "
2f870 25 73 22 2c 20 73 71 6c 69 74 65 33 45 72 72 53  %s", sqlite3ErrS
2f880 74 72 28 72 63 29 29 3b 0a 20 20 7d 0a 20 20 67  tr(rc));.  }.  g
2f890 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f 68  oto vdbe_error_h
2f8a0 61 6c 74 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20  alt;..  /* Jump 
2f8b0 74 6f 20 68 65 72 65 20 69 66 20 74 68 65 20 73  to here if the s
2f8c0 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74  qlite3_interrupt
2f8d0 28 29 20 41 50 49 20 73 65 74 73 20 74 68 65 20  () API sets the 
2f8e0 69 6e 74 65 72 72 75 70 74 0a 20 20 2a 2a 20 66  interrupt.  ** f
2f8f0 6c 61 67 2e 0a 20 20 2a 2f 0a 61 62 6f 72 74 5f  lag..  */.abort_
2f900 64 75 65 5f 74 6f 5f 69 6e 74 65 72 72 75 70 74  due_to_interrupt
2f910 3a 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e  :.  assert( db->
2f920 75 31 2e 69 73 49 6e 74 65 72 72 75 70 74 65 64  u1.isInterrupted
2f930 20 29 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49 54   );.  rc = SQLIT
2f940 45 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20 70  E_INTERRUPT;.  p
2f950 2d 3e 72 63 20 3d 20 72 63 3b 0a 20 20 73 71 6c  ->rc = rc;.  sql
2f960 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70  ite3SetString(&p
2f970 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22  ->zErrMsg, db, "
2f980 25 73 22 2c 20 73 71 6c 69 74 65 33 45 72 72 53  %s", sqlite3ErrS
2f990 74 72 28 72 63 29 29 3b 0a 20 20 67 6f 74 6f 20  tr(rc));.  goto 
2f9a0 76 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b  vdbe_error_halt;
2f9b0 0a 7d 0a                                         .}.