/ Hex Artifact Content
Login

Artifact fed44fdc7c34838d8c6a6a89a7e124944846f66c:


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 20 52 65 74 75 72 6e 20 74 72 75 65 20 69  /* Return true i
16d0: 66 20 74 68 65 20 63 75 72 73 6f 72 20 77 61 73  f the cursor was
16e0: 20 6f 70 65 6e 65 64 20 75 73 69 6e 67 20 74 68   opened using th
16f0: 65 20 4f 50 5f 4f 70 65 6e 53 6f 72 74 65 72 20  e OP_OpenSorter 
1700: 6f 70 63 6f 64 65 2e 20 2a 2f 0a 23 69 66 64 65  opcode. */.#ifde
1710: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 4d 45  f SQLITE_OMIT_ME
1720: 52 47 45 5f 53 4f 52 54 0a 23 20 64 65 66 69 6e  RGE_SORT.# defin
1730: 65 20 69 73 53 6f 72 74 65 72 28 78 29 20 30 0a  e isSorter(x) 0.
1740: 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 69  #else.# define i
1750: 73 53 6f 72 74 65 72 28 78 29 20 28 28 78 29 2d  sSorter(x) ((x)-
1760: 3e 70 53 6f 72 74 65 72 21 3d 30 29 0a 23 65 6e  >pSorter!=0).#en
1770: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 72 67 75 6d  dif../*.** Argum
1780: 65 6e 74 20 70 4d 65 6d 20 70 6f 69 6e 74 73 20  ent pMem points 
1790: 61 74 20 61 20 72 65 67 69 73 74 65 72 20 74 68  at a register th
17a0: 61 74 20 77 69 6c 6c 20 62 65 20 70 61 73 73 65  at will be passe
17b0: 64 20 74 6f 20 61 0a 2a 2a 20 75 73 65 72 2d 64  d to a.** user-d
17c0: 65 66 69 6e 65 64 20 66 75 6e 63 74 69 6f 6e 20  efined function 
17d0: 6f 72 20 72 65 74 75 72 6e 65 64 20 74 6f 20 74  or returned to t
17e0: 68 65 20 75 73 65 72 20 61 73 20 74 68 65 20 72  he user as the r
17f0: 65 73 75 6c 74 20 6f 66 20 61 20 71 75 65 72 79  esult of a query
1800: 2e 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e  ..** This routin
1810: 65 20 73 65 74 73 20 74 68 65 20 70 4d 65 6d 2d  e sets the pMem-
1820: 3e 74 79 70 65 20 76 61 72 69 61 62 6c 65 20 75  >type variable u
1830: 73 65 64 20 62 79 20 74 68 65 20 73 71 6c 69 74  sed by the sqlit
1840: 65 33 5f 76 61 6c 75 65 5f 2a 28 29 20 0a 2a 2a  e3_value_*() .**
1850: 20 72 6f 75 74 69 6e 65 73 2e 0a 2a 2f 0a 76 6f   routines..*/.vo
1860: 69 64 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  id sqlite3VdbeMe
1870: 6d 53 74 6f 72 65 54 79 70 65 28 4d 65 6d 20 2a  mStoreType(Mem *
1880: 70 4d 65 6d 29 7b 0a 20 20 69 6e 74 20 66 6c 61  pMem){.  int fla
1890: 67 73 20 3d 20 70 4d 65 6d 2d 3e 66 6c 61 67 73  gs = pMem->flags
18a0: 3b 0a 20 20 69 66 28 20 66 6c 61 67 73 20 26 20  ;.  if( flags & 
18b0: 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20  MEM_Null ){.    
18c0: 70 4d 65 6d 2d 3e 74 79 70 65 20 3d 20 53 51 4c  pMem->type = SQL
18d0: 49 54 45 5f 4e 55 4c 4c 3b 0a 20 20 7d 0a 20 20  ITE_NULL;.  }.  
18e0: 65 6c 73 65 20 69 66 28 20 66 6c 61 67 73 20 26  else if( flags &
18f0: 20 4d 45 4d 5f 49 6e 74 20 29 7b 0a 20 20 20 20   MEM_Int ){.    
1900: 70 4d 65 6d 2d 3e 74 79 70 65 20 3d 20 53 51 4c  pMem->type = SQL
1910: 49 54 45 5f 49 4e 54 45 47 45 52 3b 0a 20 20 7d  ITE_INTEGER;.  }
1920: 0a 20 20 65 6c 73 65 20 69 66 28 20 66 6c 61 67  .  else if( flag
1930: 73 20 26 20 4d 45 4d 5f 52 65 61 6c 20 29 7b 0a  s & MEM_Real ){.
1940: 20 20 20 20 70 4d 65 6d 2d 3e 74 79 70 65 20 3d      pMem->type =
1950: 20 53 51 4c 49 54 45 5f 46 4c 4f 41 54 3b 0a 20   SQLITE_FLOAT;. 
1960: 20 7d 0a 20 20 65 6c 73 65 20 69 66 28 20 66 6c   }.  else if( fl
1970: 61 67 73 20 26 20 4d 45 4d 5f 53 74 72 20 29 7b  ags & MEM_Str ){
1980: 0a 20 20 20 20 70 4d 65 6d 2d 3e 74 79 70 65 20  .    pMem->type 
1990: 3d 20 53 51 4c 49 54 45 5f 54 45 58 54 3b 0a 20  = SQLITE_TEXT;. 
19a0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 4d 65 6d   }else{.    pMem
19b0: 2d 3e 74 79 70 65 20 3d 20 53 51 4c 49 54 45 5f  ->type = SQLITE_
19c0: 42 4c 4f 42 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a  BLOB;.  }.}../*.
19d0: 2a 2a 20 41 6c 6c 6f 63 61 74 65 20 56 64 62 65  ** Allocate Vdbe
19e0: 43 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 69 43  Cursor number iC
19f0: 75 72 2e 20 20 52 65 74 75 72 6e 20 61 20 70 6f  ur.  Return a po
1a00: 69 6e 74 65 72 20 74 6f 20 69 74 2e 20 20 52 65  inter to it.  Re
1a10: 74 75 72 6e 20 4e 55 4c 4c 0a 2a 2a 20 69 66 20  turn NULL.** if 
1a20: 77 65 20 72 75 6e 20 6f 75 74 20 6f 66 20 6d 65  we run out of me
1a30: 6d 6f 72 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  mory..*/.static 
1a40: 56 64 62 65 43 75 72 73 6f 72 20 2a 61 6c 6c 6f  VdbeCursor *allo
1a50: 63 61 74 65 43 75 72 73 6f 72 28 0a 20 20 56 64  cateCursor(.  Vd
1a60: 62 65 20 2a 70 2c 20 20 20 20 20 20 20 20 20 20  be *p,          
1a70: 20 20 20 20 2f 2a 20 54 68 65 20 76 69 72 74 75      /* The virtu
1a80: 61 6c 20 6d 61 63 68 69 6e 65 20 2a 2f 0a 20 20  al machine */.  
1a90: 69 6e 74 20 69 43 75 72 2c 20 20 20 20 20 20 20  int iCur,       
1aa0: 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 6f        /* Index o
1ab0: 66 20 74 68 65 20 6e 65 77 20 56 64 62 65 43 75  f the new VdbeCu
1ac0: 72 73 6f 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 46  rsor */.  int nF
1ad0: 69 65 6c 64 2c 20 20 20 20 20 20 20 20 20 20 20  ield,           
1ae0: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 66 69 65  /* Number of fie
1af0: 6c 64 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65  lds in the table
1b00: 20 6f 72 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69   or index */.  i
1b10: 6e 74 20 69 44 62 2c 20 20 20 20 20 20 20 20 20  nt iDb,         
1b20: 20 20 20 20 20 2f 2a 20 57 68 65 6e 20 64 61 74       /* When dat
1b30: 61 62 61 73 65 20 74 68 65 20 63 75 72 73 6f 72  abase the cursor
1b40: 20 62 65 6c 6f 6e 67 73 20 74 6f 2c 20 6f 72 20   belongs to, or 
1b50: 2d 31 20 2a 2f 0a 20 20 69 6e 74 20 69 73 42 74  -1 */.  int isBt
1b60: 72 65 65 43 75 72 73 6f 72 20 20 20 20 20 2f 2a  reeCursor     /*
1b70: 20 54 72 75 65 20 66 6f 72 20 42 2d 54 72 65 65   True for B-Tree
1b80: 2e 20 20 46 61 6c 73 65 20 66 6f 72 20 70 73 65  .  False for pse
1b90: 75 64 6f 2d 74 61 62 6c 65 20 6f 72 20 76 74 61  udo-table or vta
1ba0: 62 20 2a 2f 0a 29 7b 0a 20 20 2f 2a 20 46 69 6e  b */.){.  /* Fin
1bb0: 64 20 74 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c  d the memory cel
1bc0: 6c 20 74 68 61 74 20 77 69 6c 6c 20 62 65 20 75  l that will be u
1bd0: 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65  sed to store the
1be0: 20 62 6c 6f 62 20 6f 66 20 6d 65 6d 6f 72 79 0a   blob of memory.
1bf0: 20 20 2a 2a 20 72 65 71 75 69 72 65 64 20 66 6f    ** required fo
1c00: 72 20 74 68 69 73 20 56 64 62 65 43 75 72 73 6f  r this VdbeCurso
1c10: 72 20 73 74 72 75 63 74 75 72 65 2e 20 49 74 20  r structure. It 
1c20: 69 73 20 63 6f 6e 76 65 6e 69 65 6e 74 20 74 6f  is convenient to
1c30: 20 75 73 65 20 61 20 0a 20 20 2a 2a 20 76 64 62   use a .  ** vdb
1c40: 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74 6f  e memory cell to
1c50: 20 6d 61 6e 61 67 65 20 74 68 65 20 6d 65 6d 6f   manage the memo
1c60: 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 72 65  ry allocation re
1c70: 71 75 69 72 65 64 20 66 6f 72 20 61 0a 20 20 2a  quired for a.  *
1c80: 2a 20 56 64 62 65 43 75 72 73 6f 72 20 73 74 72  * VdbeCursor str
1c90: 75 63 74 75 72 65 20 66 6f 72 20 74 68 65 20 66  ucture for the f
1ca0: 6f 6c 6c 6f 77 69 6e 67 20 72 65 61 73 6f 6e 73  ollowing reasons
1cb0: 3a 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 20 2a 20  :.  **.  **   * 
1cc0: 53 6f 6d 65 74 69 6d 65 73 20 63 75 72 73 6f 72  Sometimes cursor
1cd0: 20 6e 75 6d 62 65 72 73 20 61 72 65 20 75 73 65   numbers are use
1ce0: 64 20 66 6f 72 20 61 20 63 6f 75 70 6c 65 20 6f  d for a couple o
1cf0: 66 20 64 69 66 66 65 72 65 6e 74 0a 20 20 2a 2a  f different.  **
1d00: 20 20 20 20 20 70 75 72 70 6f 73 65 73 20 69 6e       purposes in
1d10: 20 61 20 76 64 62 65 20 70 72 6f 67 72 61 6d 2e   a vdbe program.
1d20: 20 54 68 65 20 64 69 66 66 65 72 65 6e 74 20 75   The different u
1d30: 73 65 73 20 6d 69 67 68 74 20 72 65 71 75 69 72  ses might requir
1d40: 65 0a 20 20 2a 2a 20 20 20 20 20 64 69 66 66 65  e.  **     diffe
1d50: 72 65 6e 74 20 73 69 7a 65 64 20 61 6c 6c 6f 63  rent sized alloc
1d60: 61 74 69 6f 6e 73 2e 20 4d 65 6d 6f 72 79 20 63  ations. Memory c
1d70: 65 6c 6c 73 20 70 72 6f 76 69 64 65 20 67 72 6f  ells provide gro
1d80: 77 61 62 6c 65 0a 20 20 2a 2a 20 20 20 20 20 61  wable.  **     a
1d90: 6c 6c 6f 63 61 74 69 6f 6e 73 2e 0a 20 20 2a 2a  llocations..  **
1da0: 0a 20 20 2a 2a 20 20 20 2a 20 57 68 65 6e 20 75  .  **   * When u
1db0: 73 69 6e 67 20 45 4e 41 42 4c 45 5f 4d 45 4d 4f  sing ENABLE_MEMO
1dc0: 52 59 5f 4d 41 4e 41 47 45 4d 45 4e 54 2c 20 6d  RY_MANAGEMENT, m
1dd0: 65 6d 6f 72 79 20 63 65 6c 6c 20 62 75 66 66 65  emory cell buffe
1de0: 72 73 20 63 61 6e 0a 20 20 2a 2a 20 20 20 20 20  rs can.  **     
1df0: 62 65 20 66 72 65 65 64 20 6c 61 7a 69 6c 79 20  be freed lazily 
1e00: 76 69 61 20 74 68 65 20 73 71 6c 69 74 65 33 5f  via the sqlite3_
1e10: 72 65 6c 65 61 73 65 5f 6d 65 6d 6f 72 79 28 29  release_memory()
1e20: 20 41 50 49 2e 20 54 68 69 73 0a 20 20 2a 2a 20   API. This.  ** 
1e30: 20 20 20 20 6d 69 6e 69 6d 69 7a 65 73 20 74 68      minimizes th
1e40: 65 20 6e 75 6d 62 65 72 20 6f 66 20 6d 61 6c 6c  e number of mall
1e50: 6f 63 20 63 61 6c 6c 73 20 6d 61 64 65 20 62 79  oc calls made by
1e60: 20 74 68 65 20 73 79 73 74 65 6d 2e 0a 20 20 2a   the system..  *
1e70: 2a 0a 20 20 2a 2a 20 4d 65 6d 6f 72 79 20 63 65  *.  ** Memory ce
1e80: 6c 6c 73 20 66 6f 72 20 63 75 72 73 6f 72 73 20  lls for cursors 
1e90: 61 72 65 20 61 6c 6c 6f 63 61 74 65 64 20 61 74  are allocated at
1ea0: 20 74 68 65 20 74 6f 70 20 6f 66 20 74 68 65 20   the top of the 
1eb0: 61 64 64 72 65 73 73 0a 20 20 2a 2a 20 73 70 61  address.  ** spa
1ec0: 63 65 2e 20 4d 65 6d 6f 72 79 20 63 65 6c 6c 20  ce. Memory cell 
1ed0: 28 70 2d 3e 6e 4d 65 6d 29 20 63 6f 72 72 65 73  (p->nMem) corres
1ee0: 70 6f 6e 64 73 20 74 6f 20 63 75 72 73 6f 72 20  ponds to cursor 
1ef0: 30 2e 20 53 70 61 63 65 20 66 6f 72 0a 20 20 2a  0. Space for.  *
1f00: 2a 20 63 75 72 73 6f 72 20 31 20 69 73 20 6d 61  * cursor 1 is ma
1f10: 6e 61 67 65 64 20 62 79 20 6d 65 6d 6f 72 79 20  naged by memory 
1f20: 63 65 6c 6c 20 28 70 2d 3e 6e 4d 65 6d 2d 31 29  cell (p->nMem-1)
1f30: 2c 20 65 74 63 2e 0a 20 20 2a 2f 0a 20 20 4d 65  , etc..  */.  Me
1f40: 6d 20 2a 70 4d 65 6d 20 3d 20 26 70 2d 3e 61 4d  m *pMem = &p->aM
1f50: 65 6d 5b 70 2d 3e 6e 4d 65 6d 2d 69 43 75 72 5d  em[p->nMem-iCur]
1f60: 3b 0a 0a 20 20 69 6e 74 20 6e 42 79 74 65 3b 0a  ;..  int nByte;.
1f70: 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
1f80: 78 20 3d 20 30 3b 0a 20 20 6e 42 79 74 65 20 3d  x = 0;.  nByte =
1f90: 20 0a 20 20 20 20 20 20 52 4f 55 4e 44 38 28 73   .      ROUND8(s
1fa0: 69 7a 65 6f 66 28 56 64 62 65 43 75 72 73 6f 72  izeof(VdbeCursor
1fb0: 29 29 20 2b 20 0a 20 20 20 20 20 20 28 69 73 42  )) + .      (isB
1fc0: 74 72 65 65 43 75 72 73 6f 72 3f 73 71 6c 69 74  treeCursor?sqlit
1fd0: 65 33 42 74 72 65 65 43 75 72 73 6f 72 53 69 7a  e3BtreeCursorSiz
1fe0: 65 28 29 3a 30 29 20 2b 20 0a 20 20 20 20 20 20  e():0) + .      
1ff0: 32 2a 6e 46 69 65 6c 64 2a 73 69 7a 65 6f 66 28  2*nField*sizeof(
2000: 75 33 32 29 3b 0a 0a 20 20 61 73 73 65 72 74 28  u32);..  assert(
2010: 20 69 43 75 72 3c 70 2d 3e 6e 43 75 72 73 6f 72   iCur<p->nCursor
2020: 20 29 3b 0a 20 20 69 66 28 20 70 2d 3e 61 70 43   );.  if( p->apC
2030: 73 72 5b 69 43 75 72 5d 20 29 7b 0a 20 20 20 20  sr[iCur] ){.    
2040: 73 71 6c 69 74 65 33 56 64 62 65 46 72 65 65 43  sqlite3VdbeFreeC
2050: 75 72 73 6f 72 28 70 2c 20 70 2d 3e 61 70 43 73  ursor(p, p->apCs
2060: 72 5b 69 43 75 72 5d 29 3b 0a 20 20 20 20 70 2d  r[iCur]);.    p-
2070: 3e 61 70 43 73 72 5b 69 43 75 72 5d 20 3d 20 30  >apCsr[iCur] = 0
2080: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 53 51 4c 49  ;.  }.  if( SQLI
2090: 54 45 5f 4f 4b 3d 3d 73 71 6c 69 74 65 33 56 64  TE_OK==sqlite3Vd
20a0: 62 65 4d 65 6d 47 72 6f 77 28 70 4d 65 6d 2c 20  beMemGrow(pMem, 
20b0: 6e 42 79 74 65 2c 20 30 29 20 29 7b 0a 20 20 20  nByte, 0) ){.   
20c0: 20 70 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 20   p->apCsr[iCur] 
20d0: 3d 20 70 43 78 20 3d 20 28 56 64 62 65 43 75 72  = pCx = (VdbeCur
20e0: 73 6f 72 2a 29 70 4d 65 6d 2d 3e 7a 3b 0a 20 20  sor*)pMem->z;.  
20f0: 20 20 6d 65 6d 73 65 74 28 70 43 78 2c 20 30 2c    memset(pCx, 0,
2100: 20 73 69 7a 65 6f 66 28 56 64 62 65 43 75 72 73   sizeof(VdbeCurs
2110: 6f 72 29 29 3b 0a 20 20 20 20 70 43 78 2d 3e 69  or));.    pCx->i
2120: 44 62 20 3d 20 69 44 62 3b 0a 20 20 20 20 70 43  Db = iDb;.    pC
2130: 78 2d 3e 6e 46 69 65 6c 64 20 3d 20 6e 46 69 65  x->nField = nFie
2140: 6c 64 3b 0a 20 20 20 20 69 66 28 20 6e 46 69 65  ld;.    if( nFie
2150: 6c 64 20 29 7b 0a 20 20 20 20 20 20 70 43 78 2d  ld ){.      pCx-
2160: 3e 61 54 79 70 65 20 3d 20 28 75 33 32 20 2a 29  >aType = (u32 *)
2170: 26 70 4d 65 6d 2d 3e 7a 5b 52 4f 55 4e 44 38 28  &pMem->z[ROUND8(
2180: 73 69 7a 65 6f 66 28 56 64 62 65 43 75 72 73 6f  sizeof(VdbeCurso
2190: 72 29 29 5d 3b 0a 20 20 20 20 7d 0a 20 20 20 20  r))];.    }.    
21a0: 69 66 28 20 69 73 42 74 72 65 65 43 75 72 73 6f  if( isBtreeCurso
21b0: 72 20 29 7b 0a 20 20 20 20 20 20 70 43 78 2d 3e  r ){.      pCx->
21c0: 70 43 75 72 73 6f 72 20 3d 20 28 42 74 43 75 72  pCursor = (BtCur
21d0: 73 6f 72 2a 29 0a 20 20 20 20 20 20 20 20 20 20  sor*).          
21e0: 26 70 4d 65 6d 2d 3e 7a 5b 52 4f 55 4e 44 38 28  &pMem->z[ROUND8(
21f0: 73 69 7a 65 6f 66 28 56 64 62 65 43 75 72 73 6f  sizeof(VdbeCurso
2200: 72 29 29 2b 32 2a 6e 46 69 65 6c 64 2a 73 69 7a  r))+2*nField*siz
2210: 65 6f 66 28 75 33 32 29 5d 3b 0a 20 20 20 20 20  eof(u32)];.     
2220: 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72   sqlite3BtreeCur
2230: 73 6f 72 5a 65 72 6f 28 70 43 78 2d 3e 70 43 75  sorZero(pCx->pCu
2240: 72 73 6f 72 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  rsor);.    }.  }
2250: 0a 20 20 72 65 74 75 72 6e 20 70 43 78 3b 0a 7d  .  return pCx;.}
2260: 0a 0a 2f 2a 0a 2a 2a 20 54 72 79 20 74 6f 20 63  ../*.** Try to c
2270: 6f 6e 76 65 72 74 20 61 20 76 61 6c 75 65 20 69  onvert a value i
2280: 6e 74 6f 20 61 20 6e 75 6d 65 72 69 63 20 72 65  nto a numeric re
2290: 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 69 66 20  presentation if 
22a0: 77 65 20 63 61 6e 0a 2a 2a 20 64 6f 20 73 6f 20  we can.** do so 
22b0: 77 69 74 68 6f 75 74 20 6c 6f 73 73 20 6f 66 20  without loss of 
22c0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 20 20 49 6e  information.  In
22d0: 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 69 66   other words, if
22e0: 20 74 68 65 20 73 74 72 69 6e 67 0a 2a 2a 20 6c   the string.** l
22f0: 6f 6f 6b 73 20 6c 69 6b 65 20 61 20 6e 75 6d 62  ooks like a numb
2300: 65 72 2c 20 63 6f 6e 76 65 72 74 20 69 74 20 69  er, convert it i
2310: 6e 74 6f 20 61 20 6e 75 6d 62 65 72 2e 20 20 49  nto a number.  I
2320: 66 20 69 74 20 64 6f 65 73 20 6e 6f 74 0a 2a 2a  f it does not.**
2330: 20 6c 6f 6f 6b 20 6c 69 6b 65 20 61 20 6e 75 6d   look like a num
2340: 62 65 72 2c 20 6c 65 61 76 65 20 69 74 20 61 6c  ber, leave it al
2350: 6f 6e 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76  one..*/.static v
2360: 6f 69 64 20 61 70 70 6c 79 4e 75 6d 65 72 69 63  oid applyNumeric
2370: 41 66 66 69 6e 69 74 79 28 4d 65 6d 20 2a 70 52  Affinity(Mem *pR
2380: 65 63 29 7b 0a 20 20 69 66 28 20 28 70 52 65 63  ec){.  if( (pRec
2390: 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 52  ->flags & (MEM_R
23a0: 65 61 6c 7c 4d 45 4d 5f 49 6e 74 29 29 3d 3d 30  eal|MEM_Int))==0
23b0: 20 29 7b 0a 20 20 20 20 64 6f 75 62 6c 65 20 72   ){.    double r
23c0: 56 61 6c 75 65 3b 0a 20 20 20 20 69 36 34 20 69  Value;.    i64 i
23d0: 56 61 6c 75 65 3b 0a 20 20 20 20 75 38 20 65 6e  Value;.    u8 en
23e0: 63 20 3d 20 70 52 65 63 2d 3e 65 6e 63 3b 0a 20  c = pRec->enc;. 
23f0: 20 20 20 69 66 28 20 28 70 52 65 63 2d 3e 66 6c     if( (pRec->fl
2400: 61 67 73 26 4d 45 4d 5f 53 74 72 29 3d 3d 30 20  ags&MEM_Str)==0 
2410: 29 20 72 65 74 75 72 6e 3b 0a 20 20 20 20 69 66  ) return;.    if
2420: 28 20 73 71 6c 69 74 65 33 41 74 6f 46 28 70 52  ( sqlite3AtoF(pR
2430: 65 63 2d 3e 7a 2c 20 26 72 56 61 6c 75 65 2c 20  ec->z, &rValue, 
2440: 70 52 65 63 2d 3e 6e 2c 20 65 6e 63 29 3d 3d 30  pRec->n, enc)==0
2450: 20 29 20 72 65 74 75 72 6e 3b 0a 20 20 20 20 69   ) return;.    i
2460: 66 28 20 30 3d 3d 73 71 6c 69 74 65 33 41 74 6f  f( 0==sqlite3Ato
2470: 69 36 34 28 70 52 65 63 2d 3e 7a 2c 20 26 69 56  i64(pRec->z, &iV
2480: 61 6c 75 65 2c 20 70 52 65 63 2d 3e 6e 2c 20 65  alue, pRec->n, e
2490: 6e 63 29 20 29 7b 0a 20 20 20 20 20 20 70 52 65  nc) ){.      pRe
24a0: 63 2d 3e 75 2e 69 20 3d 20 69 56 61 6c 75 65 3b  c->u.i = iValue;
24b0: 0a 20 20 20 20 20 20 70 52 65 63 2d 3e 66 6c 61  .      pRec->fla
24c0: 67 73 20 7c 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20  gs |= MEM_Int;. 
24d0: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
24e0: 70 52 65 63 2d 3e 72 20 3d 20 72 56 61 6c 75 65  pRec->r = rValue
24f0: 3b 0a 20 20 20 20 20 20 70 52 65 63 2d 3e 66 6c  ;.      pRec->fl
2500: 61 67 73 20 7c 3d 20 4d 45 4d 5f 52 65 61 6c 3b  ags |= MEM_Real;
2510: 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a 0a 2f 2a  .    }.  }.}../*
2520: 0a 2a 2a 20 50 72 6f 63 65 73 73 69 6e 67 20 69  .** Processing i
2530: 73 20 64 65 74 65 72 6d 69 6e 65 20 62 79 20 74  s determine by t
2540: 68 65 20 61 66 66 69 6e 69 74 79 20 70 61 72 61  he affinity para
2550: 6d 65 74 65 72 3a 0a 2a 2a 0a 2a 2a 20 53 51 4c  meter:.**.** SQL
2560: 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 3a  ITE_AFF_INTEGER:
2570: 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 52  .** SQLITE_AFF_R
2580: 45 41 4c 3a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41  EAL:.** SQLITE_A
2590: 46 46 5f 4e 55 4d 45 52 49 43 3a 0a 2a 2a 20 20  FF_NUMERIC:.**  
25a0: 20 20 54 72 79 20 74 6f 20 63 6f 6e 76 65 72 74    Try to convert
25b0: 20 70 52 65 63 20 74 6f 20 61 6e 20 69 6e 74 65   pRec to an inte
25c0: 67 65 72 20 72 65 70 72 65 73 65 6e 74 61 74 69  ger representati
25d0: 6f 6e 20 6f 72 20 61 20 0a 2a 2a 20 20 20 20 66  on or a .**    f
25e0: 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e 74 20 72 65  loating-point re
25f0: 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 69 66 20  presentation if 
2600: 61 6e 20 69 6e 74 65 67 65 72 20 72 65 70 72 65  an integer repre
2610: 73 65 6e 74 61 74 69 6f 6e 0a 2a 2a 20 20 20 20  sentation.**    
2620: 69 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65 2e  is not possible.
2630: 20 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20    Note that the 
2640: 69 6e 74 65 67 65 72 20 72 65 70 72 65 73 65 6e  integer represen
2650: 74 61 74 69 6f 6e 20 69 73 0a 2a 2a 20 20 20 20  tation is.**    
2660: 61 6c 77 61 79 73 20 70 72 65 66 65 72 72 65 64  always preferred
2670: 2c 20 65 76 65 6e 20 69 66 20 74 68 65 20 61 66  , even if the af
2680: 66 69 6e 69 74 79 20 69 73 20 52 45 41 4c 2c 20  finity is REAL, 
2690: 62 65 63 61 75 73 65 0a 2a 2a 20 20 20 20 61 6e  because.**    an
26a0: 20 69 6e 74 65 67 65 72 20 72 65 70 72 65 73 65   integer represe
26b0: 6e 74 61 74 69 6f 6e 20 69 73 20 6d 6f 72 65 20  ntation is more 
26c0: 73 70 61 63 65 20 65 66 66 69 63 69 65 6e 74 20  space efficient 
26d0: 6f 6e 20 64 69 73 6b 2e 0a 2a 2a 0a 2a 2a 20 53  on disk..**.** S
26e0: 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 3a 0a  QLITE_AFF_TEXT:.
26f0: 2a 2a 20 20 20 20 43 6f 6e 76 65 72 74 20 70 52  **    Convert pR
2700: 65 63 20 74 6f 20 61 20 74 65 78 74 20 72 65 70  ec to a text rep
2710: 72 65 73 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a 0a  resentation..**.
2720: 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 4f  ** SQLITE_AFF_NO
2730: 4e 45 3a 0a 2a 2a 20 20 20 20 4e 6f 2d 6f 70 2e  NE:.**    No-op.
2740: 20 20 70 52 65 63 20 69 73 20 75 6e 63 68 61 6e    pRec is unchan
2750: 67 65 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76  ged..*/.static v
2760: 6f 69 64 20 61 70 70 6c 79 41 66 66 69 6e 69 74  oid applyAffinit
2770: 79 28 0a 20 20 4d 65 6d 20 2a 70 52 65 63 2c 20  y(.  Mem *pRec, 
2780: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
2790: 76 61 6c 75 65 20 74 6f 20 61 70 70 6c 79 20 61  value to apply a
27a0: 66 66 69 6e 69 74 79 20 74 6f 20 2a 2f 0a 20 20  ffinity to */.  
27b0: 63 68 61 72 20 61 66 66 69 6e 69 74 79 2c 20 20  char affinity,  
27c0: 20 20 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e      /* The affin
27d0: 69 74 79 20 74 6f 20 62 65 20 61 70 70 6c 69 65  ity to be applie
27e0: 64 20 2a 2f 0a 20 20 75 38 20 65 6e 63 20 20 20  d */.  u8 enc   
27f0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73             /* Us
2800: 65 20 74 68 69 73 20 74 65 78 74 20 65 6e 63 6f  e this text enco
2810: 64 69 6e 67 20 2a 2f 0a 29 7b 0a 20 20 69 66 28  ding */.){.  if(
2820: 20 61 66 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54   affinity==SQLIT
2830: 45 5f 41 46 46 5f 54 45 58 54 20 29 7b 0a 20 20  E_AFF_TEXT ){.  
2840: 20 20 2f 2a 20 4f 6e 6c 79 20 61 74 74 65 6d 70    /* Only attemp
2850: 74 20 74 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e  t the conversion
2860: 20 74 6f 20 54 45 58 54 20 69 66 20 74 68 65 72   to TEXT if ther
2870: 65 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20  e is an integer 
2880: 6f 72 20 72 65 61 6c 0a 20 20 20 20 2a 2a 20 72  or real.    ** r
2890: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 28 62  epresentation (b
28a0: 6c 6f 62 20 61 6e 64 20 4e 55 4c 4c 20 64 6f 20  lob and NULL do 
28b0: 6e 6f 74 20 67 65 74 20 63 6f 6e 76 65 72 74 65  not get converte
28c0: 64 29 20 62 75 74 20 6e 6f 20 73 74 72 69 6e 67  d) but no string
28d0: 0a 20 20 20 20 2a 2a 20 72 65 70 72 65 73 65 6e  .    ** represen
28e0: 74 61 74 69 6f 6e 2e 0a 20 20 20 20 2a 2f 0a 20  tation..    */. 
28f0: 20 20 20 69 66 28 20 30 3d 3d 28 70 52 65 63 2d     if( 0==(pRec-
2900: 3e 66 6c 61 67 73 26 4d 45 4d 5f 53 74 72 29 20  >flags&MEM_Str) 
2910: 26 26 20 28 70 52 65 63 2d 3e 66 6c 61 67 73 26  && (pRec->flags&
2920: 28 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 49 6e  (MEM_Real|MEM_In
2930: 74 29 29 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  t)) ){.      sql
2940: 69 74 65 33 56 64 62 65 4d 65 6d 53 74 72 69 6e  ite3VdbeMemStrin
2950: 67 69 66 79 28 70 52 65 63 2c 20 65 6e 63 29 3b  gify(pRec, enc);
2960: 0a 20 20 20 20 7d 0a 20 20 20 20 70 52 65 63 2d  .    }.    pRec-
2970: 3e 66 6c 61 67 73 20 26 3d 20 7e 28 4d 45 4d 5f  >flags &= ~(MEM_
2980: 52 65 61 6c 7c 4d 45 4d 5f 49 6e 74 29 3b 0a 20  Real|MEM_Int);. 
2990: 20 7d 65 6c 73 65 20 69 66 28 20 61 66 66 69 6e   }else if( affin
29a0: 69 74 79 21 3d 53 51 4c 49 54 45 5f 41 46 46 5f  ity!=SQLITE_AFF_
29b0: 4e 4f 4e 45 20 29 7b 0a 20 20 20 20 61 73 73 65  NONE ){.    asse
29c0: 72 74 28 20 61 66 66 69 6e 69 74 79 3d 3d 53 51  rt( affinity==SQ
29d0: 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52  LITE_AFF_INTEGER
29e0: 20 7c 7c 20 61 66 66 69 6e 69 74 79 3d 3d 53 51   || affinity==SQ
29f0: 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c 0a 20 20  LITE_AFF_REAL.  
2a00: 20 20 20 20 20 20 20 20 20 20 20 7c 7c 20 61 66             || af
2a10: 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41  finity==SQLITE_A
2a20: 46 46 5f 4e 55 4d 45 52 49 43 20 29 3b 0a 20 20  FF_NUMERIC );.  
2a30: 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66    applyNumericAf
2a40: 66 69 6e 69 74 79 28 70 52 65 63 29 3b 0a 20 20  finity(pRec);.  
2a50: 20 20 69 66 28 20 70 52 65 63 2d 3e 66 6c 61 67    if( pRec->flag
2a60: 73 20 26 20 4d 45 4d 5f 52 65 61 6c 20 29 7b 0a  s & MEM_Real ){.
2a70: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
2a80: 65 49 6e 74 65 67 65 72 41 66 66 69 6e 69 74 79  eIntegerAffinity
2a90: 28 70 52 65 63 29 3b 0a 20 20 20 20 7d 0a 20 20  (pRec);.    }.  
2aa0: 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 72 79 20 74  }.}../*.** Try t
2ab0: 6f 20 63 6f 6e 76 65 72 74 20 74 68 65 20 74 79  o convert the ty
2ac0: 70 65 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e  pe of a function
2ad0: 20 61 72 67 75 6d 65 6e 74 20 6f 72 20 61 20 72   argument or a r
2ae0: 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 0a 2a 2a 20  esult column.** 
2af0: 69 6e 74 6f 20 61 20 6e 75 6d 65 72 69 63 20 72  into a numeric r
2b00: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e 20 20  epresentation.  
2b10: 55 73 65 20 65 69 74 68 65 72 20 49 4e 54 45 47  Use either INTEG
2b20: 45 52 20 6f 72 20 52 45 41 4c 20 77 68 69 63 68  ER or REAL which
2b30: 65 76 65 72 0a 2a 2a 20 69 73 20 61 70 70 72 6f  ever.** is appro
2b40: 70 72 69 61 74 65 2e 20 20 42 75 74 20 6f 6e 6c  priate.  But onl
2b50: 79 20 64 6f 20 74 68 65 20 63 6f 6e 76 65 72 73  y do the convers
2b60: 69 6f 6e 20 69 66 20 69 74 20 69 73 20 70 6f 73  ion if it is pos
2b70: 73 69 62 6c 65 20 77 69 74 68 6f 75 74 0a 2a 2a  sible without.**
2b80: 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72 6d 61   loss of informa
2b90: 74 69 6f 6e 20 61 6e 64 20 72 65 74 75 72 6e 20  tion and return 
2ba0: 74 68 65 20 72 65 76 69 73 65 64 20 74 79 70 65  the revised type
2bb0: 20 6f 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74   of the argument
2bc0: 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  ..*/.int sqlite3
2bd0: 5f 76 61 6c 75 65 5f 6e 75 6d 65 72 69 63 5f 74  _value_numeric_t
2be0: 79 70 65 28 73 71 6c 69 74 65 33 5f 76 61 6c 75  ype(sqlite3_valu
2bf0: 65 20 2a 70 56 61 6c 29 7b 0a 20 20 4d 65 6d 20  e *pVal){.  Mem 
2c00: 2a 70 4d 65 6d 20 3d 20 28 4d 65 6d 2a 29 70 56  *pMem = (Mem*)pV
2c10: 61 6c 3b 0a 20 20 69 66 28 20 70 4d 65 6d 2d 3e  al;.  if( pMem->
2c20: 74 79 70 65 3d 3d 53 51 4c 49 54 45 5f 54 45 58  type==SQLITE_TEX
2c30: 54 20 29 7b 0a 20 20 20 20 61 70 70 6c 79 4e 75  T ){.    applyNu
2c40: 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 70 4d  mericAffinity(pM
2c50: 65 6d 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  em);.    sqlite3
2c60: 56 64 62 65 4d 65 6d 53 74 6f 72 65 54 79 70 65  VdbeMemStoreType
2c70: 28 70 4d 65 6d 29 3b 0a 20 20 7d 0a 20 20 72 65  (pMem);.  }.  re
2c80: 74 75 72 6e 20 70 4d 65 6d 2d 3e 74 79 70 65 3b  turn pMem->type;
2c90: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 45 78 70 6f 72 74  .}../*.** Export
2ca0: 65 64 20 76 65 72 73 69 6f 6e 20 6f 66 20 61 70  ed version of ap
2cb0: 70 6c 79 41 66 66 69 6e 69 74 79 28 29 2e 20 54  plyAffinity(). T
2cc0: 68 69 73 20 6f 6e 65 20 77 6f 72 6b 73 20 6f 6e  his one works on
2cd0: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c   sqlite3_value*,
2ce0: 20 0a 2a 2a 20 6e 6f 74 20 74 68 65 20 69 6e 74   .** not the int
2cf0: 65 72 6e 61 6c 20 4d 65 6d 2a 20 74 79 70 65 2e  ernal Mem* type.
2d00: 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  .*/.void sqlite3
2d10: 56 61 6c 75 65 41 70 70 6c 79 41 66 66 69 6e 69  ValueApplyAffini
2d20: 74 79 28 0a 20 20 73 71 6c 69 74 65 33 5f 76 61  ty(.  sqlite3_va
2d30: 6c 75 65 20 2a 70 56 61 6c 2c 20 0a 20 20 75 38  lue *pVal, .  u8
2d40: 20 61 66 66 69 6e 69 74 79 2c 20 0a 20 20 75 38   affinity, .  u8
2d50: 20 65 6e 63 0a 29 7b 0a 20 20 61 70 70 6c 79 41   enc.){.  applyA
2d60: 66 66 69 6e 69 74 79 28 28 4d 65 6d 20 2a 29 70  ffinity((Mem *)p
2d70: 56 61 6c 2c 20 61 66 66 69 6e 69 74 79 2c 20 65  Val, affinity, e
2d80: 6e 63 29 3b 0a 7d 0a 0a 23 69 66 64 65 66 20 53  nc);.}..#ifdef S
2d90: 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a  QLITE_DEBUG./*.*
2da0: 2a 20 57 72 69 74 65 20 61 20 6e 69 63 65 20 73  * Write a nice s
2db0: 74 72 69 6e 67 20 72 65 70 72 65 73 65 6e 74 61  tring representa
2dc0: 74 69 6f 6e 20 6f 66 20 74 68 65 20 63 6f 6e 74  tion of the cont
2dd0: 65 6e 74 73 20 6f 66 20 63 65 6c 6c 20 70 4d 65  ents of cell pMe
2de0: 6d 0a 2a 2a 20 69 6e 74 6f 20 62 75 66 66 65 72  m.** into buffer
2df0: 20 7a 42 75 66 2c 20 6c 65 6e 67 74 68 20 6e 42   zBuf, length nB
2e00: 75 66 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69  uf..*/.void sqli
2e10: 74 65 33 56 64 62 65 4d 65 6d 50 72 65 74 74 79  te3VdbeMemPretty
2e20: 50 72 69 6e 74 28 4d 65 6d 20 2a 70 4d 65 6d 2c  Print(Mem *pMem,
2e30: 20 63 68 61 72 20 2a 7a 42 75 66 29 7b 0a 20 20   char *zBuf){.  
2e40: 63 68 61 72 20 2a 7a 43 73 72 20 3d 20 7a 42 75  char *zCsr = zBu
2e50: 66 3b 0a 20 20 69 6e 74 20 66 20 3d 20 70 4d 65  f;.  int f = pMe
2e60: 6d 2d 3e 66 6c 61 67 73 3b 0a 0a 20 20 73 74 61  m->flags;..  sta
2e70: 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  tic const char *
2e80: 63 6f 6e 73 74 20 65 6e 63 6e 61 6d 65 73 5b 5d  const encnames[]
2e90: 20 3d 20 7b 22 28 58 29 22 2c 20 22 28 38 29 22   = {"(X)", "(8)"
2ea0: 2c 20 22 28 31 36 4c 45 29 22 2c 20 22 28 31 36  , "(16LE)", "(16
2eb0: 42 45 29 22 7d 3b 0a 0a 20 20 69 66 28 20 66 26  BE)"};..  if( f&
2ec0: 4d 45 4d 5f 42 6c 6f 62 20 29 7b 0a 20 20 20 20  MEM_Blob ){.    
2ed0: 69 6e 74 20 69 3b 0a 20 20 20 20 63 68 61 72 20  int i;.    char 
2ee0: 63 3b 0a 20 20 20 20 69 66 28 20 66 20 26 20 4d  c;.    if( f & M
2ef0: 45 4d 5f 44 79 6e 20 29 7b 0a 20 20 20 20 20 20  EM_Dyn ){.      
2f00: 63 20 3d 20 27 7a 27 3b 0a 20 20 20 20 20 20 61  c = 'z';.      a
2f10: 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d  ssert( (f & (MEM
2f20: 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 45 70 68 65  _Static|MEM_Ephe
2f30: 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65  m))==0 );.    }e
2f40: 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f  lse if( f & MEM_
2f50: 53 74 61 74 69 63 20 29 7b 0a 20 20 20 20 20 20  Static ){.      
2f60: 63 20 3d 20 27 74 27 3b 0a 20 20 20 20 20 20 61  c = 't';.      a
2f70: 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d  ssert( (f & (MEM
2f80: 5f 44 79 6e 7c 4d 45 4d 5f 45 70 68 65 6d 29 29  _Dyn|MEM_Ephem))
2f90: 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65  ==0 );.    }else
2fa0: 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 45 70 68   if( f & MEM_Eph
2fb0: 65 6d 20 29 7b 0a 20 20 20 20 20 20 63 20 3d 20  em ){.      c = 
2fc0: 27 65 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72  'e';.      asser
2fd0: 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74 61  t( (f & (MEM_Sta
2fe0: 74 69 63 7c 4d 45 4d 5f 44 79 6e 29 29 3d 3d 30  tic|MEM_Dyn))==0
2ff0: 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20   );.    }else{. 
3000: 20 20 20 20 20 63 20 3d 20 27 73 27 3b 0a 20 20       c = 's';.  
3010: 20 20 7d 0a 0a 20 20 20 20 73 71 6c 69 74 65 33    }..    sqlite3
3020: 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a  _snprintf(100, z
3030: 43 73 72 2c 20 22 25 63 22 2c 20 63 29 3b 0a 20  Csr, "%c", c);. 
3040: 20 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74     zCsr += sqlit
3050: 65 33 53 74 72 6c 65 6e 33 30 28 7a 43 73 72 29  e3Strlen30(zCsr)
3060: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e  ;.    sqlite3_sn
3070: 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73 72  printf(100, zCsr
3080: 2c 20 22 25 64 5b 22 2c 20 70 4d 65 6d 2d 3e 6e  , "%d[", pMem->n
3090: 29 3b 0a 20 20 20 20 7a 43 73 72 20 2b 3d 20 73  );.    zCsr += s
30a0: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a  qlite3Strlen30(z
30b0: 43 73 72 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d  Csr);.    for(i=
30c0: 30 3b 20 69 3c 31 36 20 26 26 20 69 3c 70 4d 65  0; i<16 && i<pMe
30d0: 6d 2d 3e 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  m->n; i++){.    
30e0: 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e    sqlite3_snprin
30f0: 74 66 28 31 30 30 2c 20 7a 43 73 72 2c 20 22 25  tf(100, zCsr, "%
3100: 30 32 58 22 2c 20 28 28 69 6e 74 29 70 4d 65 6d  02X", ((int)pMem
3110: 2d 3e 7a 5b 69 5d 20 26 20 30 78 46 46 29 29 3b  ->z[i] & 0xFF));
3120: 0a 20 20 20 20 20 20 7a 43 73 72 20 2b 3d 20 73  .      zCsr += s
3130: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a  qlite3Strlen30(z
3140: 43 73 72 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  Csr);.    }.    
3150: 66 6f 72 28 69 3d 30 3b 20 69 3c 31 36 20 26 26  for(i=0; i<16 &&
3160: 20 69 3c 70 4d 65 6d 2d 3e 6e 3b 20 69 2b 2b 29   i<pMem->n; i++)
3170: 7b 0a 20 20 20 20 20 20 63 68 61 72 20 7a 20 3d  {.      char z =
3180: 20 70 4d 65 6d 2d 3e 7a 5b 69 5d 3b 0a 20 20 20   pMem->z[i];.   
3190: 20 20 20 69 66 28 20 7a 3c 33 32 20 7c 7c 20 7a     if( z<32 || z
31a0: 3e 31 32 36 20 29 20 2a 7a 43 73 72 2b 2b 20 3d  >126 ) *zCsr++ =
31b0: 20 27 2e 27 3b 0a 20 20 20 20 20 20 65 6c 73 65   '.';.      else
31c0: 20 2a 7a 43 73 72 2b 2b 20 3d 20 7a 3b 0a 20 20   *zCsr++ = z;.  
31d0: 20 20 7d 0a 0a 20 20 20 20 73 71 6c 69 74 65 33    }..    sqlite3
31e0: 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a  _snprintf(100, z
31f0: 43 73 72 2c 20 22 5d 25 73 22 2c 20 65 6e 63 6e  Csr, "]%s", encn
3200: 61 6d 65 73 5b 70 4d 65 6d 2d 3e 65 6e 63 5d 29  ames[pMem->enc])
3210: 3b 0a 20 20 20 20 7a 43 73 72 20 2b 3d 20 73 71  ;.    zCsr += sq
3220: 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 43  lite3Strlen30(zC
3230: 73 72 29 3b 0a 20 20 20 20 69 66 28 20 66 20 26  sr);.    if( f &
3240: 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20   MEM_Zero ){.   
3250: 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69     sqlite3_snpri
3260: 6e 74 66 28 31 30 30 2c 20 7a 43 73 72 2c 22 2b  ntf(100, zCsr,"+
3270: 25 64 7a 22 2c 70 4d 65 6d 2d 3e 75 2e 6e 5a 65  %dz",pMem->u.nZe
3280: 72 6f 29 3b 0a 20 20 20 20 20 20 7a 43 73 72 20  ro);.      zCsr 
3290: 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  += sqlite3Strlen
32a0: 33 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 7d 0a  30(zCsr);.    }.
32b0: 20 20 20 20 2a 7a 43 73 72 20 3d 20 27 5c 30 27      *zCsr = '\0'
32c0: 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20  ;.  }else if( f 
32d0: 26 20 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20  & MEM_Str ){.   
32e0: 20 69 6e 74 20 6a 2c 20 6b 3b 0a 20 20 20 20 7a   int j, k;.    z
32f0: 42 75 66 5b 30 5d 20 3d 20 27 20 27 3b 0a 20 20  Buf[0] = ' ';.  
3300: 20 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 44 79    if( f & MEM_Dy
3310: 6e 20 29 7b 0a 20 20 20 20 20 20 7a 42 75 66 5b  n ){.      zBuf[
3320: 31 5d 20 3d 20 27 7a 27 3b 0a 20 20 20 20 20 20  1] = 'z';.      
3330: 61 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45  assert( (f & (ME
3340: 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 45 70 68  M_Static|MEM_Eph
3350: 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d  em))==0 );.    }
3360: 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d  else if( f & MEM
3370: 5f 53 74 61 74 69 63 20 29 7b 0a 20 20 20 20 20  _Static ){.     
3380: 20 7a 42 75 66 5b 31 5d 20 3d 20 27 74 27 3b 0a   zBuf[1] = 't';.
3390: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28 66        assert( (f
33a0: 20 26 20 28 4d 45 4d 5f 44 79 6e 7c 4d 45 4d 5f   & (MEM_Dyn|MEM_
33b0: 45 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20  Ephem))==0 );.  
33c0: 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26 20    }else if( f & 
33d0: 4d 45 4d 5f 45 70 68 65 6d 20 29 7b 0a 20 20 20  MEM_Ephem ){.   
33e0: 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27 65 27     zBuf[1] = 'e'
33f0: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
3400: 28 66 20 26 20 28 4d 45 4d 5f 53 74 61 74 69 63  (f & (MEM_Static
3410: 7c 4d 45 4d 5f 44 79 6e 29 29 3d 3d 30 20 29 3b  |MEM_Dyn))==0 );
3420: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
3430: 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27 73 27 3b    zBuf[1] = 's';
3440: 0a 20 20 20 20 7d 0a 20 20 20 20 6b 20 3d 20 32  .    }.    k = 2
3450: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e  ;.    sqlite3_sn
3460: 70 72 69 6e 74 66 28 31 30 30 2c 20 26 7a 42 75  printf(100, &zBu
3470: 66 5b 6b 5d 2c 20 22 25 64 22 2c 20 70 4d 65 6d  f[k], "%d", pMem
3480: 2d 3e 6e 29 3b 0a 20 20 20 20 6b 20 2b 3d 20 73  ->n);.    k += s
3490: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 26  qlite3Strlen30(&
34a0: 7a 42 75 66 5b 6b 5d 29 3b 0a 20 20 20 20 7a 42  zBuf[k]);.    zB
34b0: 75 66 5b 6b 2b 2b 5d 20 3d 20 27 5b 27 3b 0a 20  uf[k++] = '[';. 
34c0: 20 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c 31 35     for(j=0; j<15
34d0: 20 26 26 20 6a 3c 70 4d 65 6d 2d 3e 6e 3b 20 6a   && j<pMem->n; j
34e0: 2b 2b 29 7b 0a 20 20 20 20 20 20 75 38 20 63 20  ++){.      u8 c 
34f0: 3d 20 70 4d 65 6d 2d 3e 7a 5b 6a 5d 3b 0a 20 20  = pMem->z[j];.  
3500: 20 20 20 20 69 66 28 20 63 3e 3d 30 78 32 30 20      if( c>=0x20 
3510: 26 26 20 63 3c 30 78 37 66 20 29 7b 0a 20 20 20  && c<0x7f ){.   
3520: 20 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d       zBuf[k++] =
3530: 20 63 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b   c;.      }else{
3540: 0a 20 20 20 20 20 20 20 20 7a 42 75 66 5b 6b 2b  .        zBuf[k+
3550: 2b 5d 20 3d 20 27 2e 27 3b 0a 20 20 20 20 20 20  +] = '.';.      
3560: 7d 0a 20 20 20 20 7d 0a 20 20 20 20 7a 42 75 66  }.    }.    zBuf
3570: 5b 6b 2b 2b 5d 20 3d 20 27 5d 27 3b 0a 20 20 20  [k++] = ']';.   
3580: 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74   sqlite3_snprint
3590: 66 28 31 30 30 2c 26 7a 42 75 66 5b 6b 5d 2c 20  f(100,&zBuf[k], 
35a0: 65 6e 63 6e 61 6d 65 73 5b 70 4d 65 6d 2d 3e 65  encnames[pMem->e
35b0: 6e 63 5d 29 3b 0a 20 20 20 20 6b 20 2b 3d 20 73  nc]);.    k += s
35c0: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 26  qlite3Strlen30(&
35d0: 7a 42 75 66 5b 6b 5d 29 3b 0a 20 20 20 20 7a 42  zBuf[k]);.    zB
35e0: 75 66 5b 6b 2b 2b 5d 20 3d 20 30 3b 0a 20 20 7d  uf[k++] = 0;.  }
35f0: 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65  .}.#endif..#ifde
3600: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f  f SQLITE_DEBUG./
3610: 2a 0a 2a 2a 20 50 72 69 6e 74 20 74 68 65 20 76  *.** Print the v
3620: 61 6c 75 65 20 6f 66 20 61 20 72 65 67 69 73 74  alue of a regist
3630: 65 72 20 66 6f 72 20 74 72 61 63 69 6e 67 20 70  er for tracing p
3640: 75 72 70 6f 73 65 73 3a 0a 2a 2f 0a 73 74 61 74  urposes:.*/.stat
3650: 69 63 20 76 6f 69 64 20 6d 65 6d 54 72 61 63 65  ic void memTrace
3660: 50 72 69 6e 74 28 46 49 4c 45 20 2a 6f 75 74 2c  Print(FILE *out,
3670: 20 4d 65 6d 20 2a 70 29 7b 0a 20 20 69 66 28 20   Mem *p){.  if( 
3680: 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  p->flags & MEM_N
3690: 75 6c 6c 20 29 7b 0a 20 20 20 20 66 70 72 69 6e  ull ){.    fprin
36a0: 74 66 28 6f 75 74 2c 20 22 20 4e 55 4c 4c 22 29  tf(out, " NULL")
36b0: 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 28 70  ;.  }else if( (p
36c0: 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49  ->flags & (MEM_I
36d0: 6e 74 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d 28 4d  nt|MEM_Str))==(M
36e0: 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 53 74 72 29 20  EM_Int|MEM_Str) 
36f0: 29 7b 0a 20 20 20 20 66 70 72 69 6e 74 66 28 6f  ){.    fprintf(o
3700: 75 74 2c 20 22 20 73 69 3a 25 6c 6c 64 22 2c 20  ut, " si:%lld", 
3710: 70 2d 3e 75 2e 69 29 3b 0a 20 20 7d 65 6c 73 65  p->u.i);.  }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 49 6e 74 20 29 7b 0a 20 20 20 20 66  MEM_Int ){.    f
3740: 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 20 69 3a  printf(out, " i:
3750: 25 6c 6c 64 22 2c 20 70 2d 3e 75 2e 69 29 3b 0a  %lld", p->u.i);.
3760: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
3770: 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49  MIT_FLOATING_POI
3780: 4e 54 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70  NT.  }else if( p
3790: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65  ->flags & MEM_Re
37a0: 61 6c 20 29 7b 0a 20 20 20 20 66 70 72 69 6e 74  al ){.    fprint
37b0: 66 28 6f 75 74 2c 20 22 20 72 3a 25 67 22 2c 20  f(out, " r:%g", 
37c0: 70 2d 3e 72 29 3b 0a 23 65 6e 64 69 66 0a 20 20  p->r);.#endif.  
37d0: 7d 65 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c 61  }else if( p->fla
37e0: 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 20  gs & MEM_RowSet 
37f0: 29 7b 0a 20 20 20 20 66 70 72 69 6e 74 66 28 6f  ){.    fprintf(o
3800: 75 74 2c 20 22 20 28 72 6f 77 73 65 74 29 22 29  ut, " (rowset)")
3810: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 63  ;.  }else{.    c
3820: 68 61 72 20 7a 42 75 66 5b 32 30 30 5d 3b 0a 20  har zBuf[200];. 
3830: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
3840: 6d 50 72 65 74 74 79 50 72 69 6e 74 28 70 2c 20  mPrettyPrint(p, 
3850: 7a 42 75 66 29 3b 0a 20 20 20 20 66 70 72 69 6e  zBuf);.    fprin
3860: 74 66 28 6f 75 74 2c 20 22 20 22 29 3b 0a 20 20  tf(out, " ");.  
3870: 20 20 66 70 72 69 6e 74 66 28 6f 75 74 2c 20 22    fprintf(out, "
3880: 25 73 22 2c 20 7a 42 75 66 29 3b 0a 20 20 7d 0a  %s", zBuf);.  }.
3890: 7d 0a 73 74 61 74 69 63 20 76 6f 69 64 20 72 65  }.static void re
38a0: 67 69 73 74 65 72 54 72 61 63 65 28 46 49 4c 45  gisterTrace(FILE
38b0: 20 2a 6f 75 74 2c 20 69 6e 74 20 69 52 65 67 2c   *out, int iReg,
38c0: 20 4d 65 6d 20 2a 70 29 7b 0a 20 20 66 70 72 69   Mem *p){.  fpri
38d0: 6e 74 66 28 6f 75 74 2c 20 22 52 45 47 5b 25 64  ntf(out, "REG[%d
38e0: 5d 20 3d 20 22 2c 20 69 52 65 67 29 3b 0a 20 20  ] = ", iReg);.  
38f0: 6d 65 6d 54 72 61 63 65 50 72 69 6e 74 28 6f 75  memTracePrint(ou
3900: 74 2c 20 70 29 3b 0a 20 20 66 70 72 69 6e 74 66  t, p);.  fprintf
3910: 28 6f 75 74 2c 20 22 5c 6e 22 29 3b 0a 7d 0a 23  (out, "\n");.}.#
3920: 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51  endif..#ifdef SQ
3930: 4c 49 54 45 5f 44 45 42 55 47 0a 23 20 20 64 65  LITE_DEBUG.#  de
3940: 66 69 6e 65 20 52 45 47 49 53 54 45 52 5f 54 52  fine REGISTER_TR
3950: 41 43 45 28 52 2c 4d 29 20 69 66 28 70 2d 3e 74  ACE(R,M) if(p->t
3960: 72 61 63 65 29 72 65 67 69 73 74 65 72 54 72 61  race)registerTra
3970: 63 65 28 70 2d 3e 74 72 61 63 65 2c 52 2c 4d 29  ce(p->trace,R,M)
3980: 0a 23 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65  .#else.#  define
3990: 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
39a0: 52 2c 4d 29 0a 23 65 6e 64 69 66 0a 0a 0a 23 69  R,M).#endif...#i
39b0: 66 64 65 66 20 56 44 42 45 5f 50 52 4f 46 49 4c  fdef VDBE_PROFIL
39c0: 45 0a 0a 2f 2a 20 0a 2a 2a 20 68 77 74 69 6d 65  E../* .** hwtime
39d0: 2e 68 20 63 6f 6e 74 61 69 6e 73 20 69 6e 6c 69  .h contains inli
39e0: 6e 65 20 61 73 73 65 6d 62 6c 65 72 20 63 6f 64  ne assembler cod
39f0: 65 20 66 6f 72 20 69 6d 70 6c 65 6d 65 6e 74 69  e for implementi
3a00: 6e 67 20 0a 2a 2a 20 68 69 67 68 2d 70 65 72 66  ng .** high-perf
3a10: 6f 72 6d 61 6e 63 65 20 74 69 6d 69 6e 67 20 72  ormance timing r
3a20: 6f 75 74 69 6e 65 73 2e 0a 2a 2f 0a 23 69 6e 63  outines..*/.#inc
3a30: 6c 75 64 65 20 22 68 77 74 69 6d 65 2e 68 22 0a  lude "hwtime.h".
3a40: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
3a50: 68 65 20 43 48 45 43 4b 5f 46 4f 52 5f 49 4e 54  he CHECK_FOR_INT
3a60: 45 52 52 55 50 54 20 6d 61 63 72 6f 20 64 65 66  ERRUPT macro def
3a70: 69 6e 65 64 20 68 65 72 65 20 6c 6f 6f 6b 73 20  ined here looks 
3a80: 74 6f 20 73 65 65 20 69 66 20 74 68 65 0a 2a 2a  to see if the.**
3a90: 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75   sqlite3_interru
3aa0: 70 74 28 29 20 72 6f 75 74 69 6e 65 20 68 61 73  pt() routine has
3ab0: 20 62 65 65 6e 20 63 61 6c 6c 65 64 2e 20 20 49   been called.  I
3ac0: 66 20 69 74 20 68 61 73 20 62 65 65 6e 2c 20 74  f it has been, t
3ad0: 68 65 6e 0a 2a 2a 20 70 72 6f 63 65 73 73 69 6e  hen.** processin
3ae0: 67 20 6f 66 20 74 68 65 20 56 44 42 45 20 70 72  g of the VDBE pr
3af0: 6f 67 72 61 6d 20 69 73 20 69 6e 74 65 72 72 75  ogram is interru
3b00: 70 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  pted..**.** This
3b10: 20 6d 61 63 72 6f 20 61 64 64 65 64 20 74 6f 20   macro added to 
3b20: 65 76 65 72 79 20 69 6e 73 74 72 75 63 74 69 6f  every instructio
3b30: 6e 20 74 68 61 74 20 64 6f 65 73 20 61 20 6a 75  n that does a ju
3b40: 6d 70 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a  mp in order to.*
3b50: 2a 20 69 6d 70 6c 65 6d 65 6e 74 20 61 20 6c 6f  * implement a lo
3b60: 6f 70 2e 20 20 54 68 69 73 20 74 65 73 74 20 75  op.  This test u
3b70: 73 65 64 20 74 6f 20 62 65 20 6f 6e 20 65 76 65  sed to be on eve
3b80: 72 79 20 73 69 6e 67 6c 65 20 69 6e 73 74 72 75  ry single instru
3b90: 63 74 69 6f 6e 2c 0a 2a 2a 20 62 75 74 20 74 68  ction,.** but th
3ba0: 61 74 20 6d 65 61 6e 74 20 77 65 20 6d 6f 72 65  at meant we more
3bb0: 20 74 65 73 74 69 6e 67 20 74 68 61 74 20 77 65   testing that we
3bc0: 20 6e 65 65 64 65 64 2e 20 20 42 79 20 6f 6e 6c   needed.  By onl
3bd0: 79 20 74 65 73 74 69 6e 67 20 74 68 65 0a 2a 2a  y testing the.**
3be0: 20 66 6c 61 67 20 6f 6e 20 6a 75 6d 70 20 69 6e   flag on jump in
3bf0: 73 74 72 75 63 74 69 6f 6e 73 2c 20 77 65 20 67  structions, we g
3c00: 65 74 20 61 20 28 73 6d 61 6c 6c 29 20 73 70 65  et a (small) spe
3c10: 65 64 20 69 6d 70 72 6f 76 65 6d 65 6e 74 2e 0a  ed improvement..
3c20: 2a 2f 0a 23 64 65 66 69 6e 65 20 43 48 45 43 4b  */.#define CHECK
3c30: 5f 46 4f 52 5f 49 4e 54 45 52 52 55 50 54 20 5c  _FOR_INTERRUPT \
3c40: 0a 20 20 20 69 66 28 20 64 62 2d 3e 75 31 2e 69  .   if( db->u1.i
3c50: 73 49 6e 74 65 72 72 75 70 74 65 64 20 29 20 67  sInterrupted ) g
3c60: 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
3c70: 5f 69 6e 74 65 72 72 75 70 74 3b 0a 0a 0a 23 69  _interrupt;...#i
3c80: 66 6e 64 65 66 20 4e 44 45 42 55 47 0a 2f 2a 0a  fndef NDEBUG./*.
3c90: 2a 2a 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e  ** This function
3ca0: 20 69 73 20 6f 6e 6c 79 20 63 61 6c 6c 65 64 20   is only called 
3cb0: 66 72 6f 6d 20 77 69 74 68 69 6e 20 61 6e 20 61  from within an a
3cc0: 73 73 65 72 74 28 29 20 65 78 70 72 65 73 73 69  ssert() expressi
3cd0: 6f 6e 2e 20 49 74 0a 2a 2a 20 63 68 65 63 6b 73  on. It.** checks
3ce0: 20 74 68 61 74 20 74 68 65 20 73 71 6c 69 74 65   that the sqlite
3cf0: 33 2e 6e 54 72 61 6e 73 61 63 74 69 6f 6e 20 76  3.nTransaction v
3d00: 61 72 69 61 62 6c 65 20 69 73 20 63 6f 72 72 65  ariable is corre
3d10: 63 74 6c 79 20 73 65 74 20 74 6f 0a 2a 2a 20 74  ctly set to.** t
3d20: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6e 6f 6e  he number of non
3d30: 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61 76  -transaction sav
3d40: 65 70 6f 69 6e 74 73 20 63 75 72 72 65 6e 74 6c  epoints currentl
3d50: 79 20 69 6e 20 74 68 65 20 0a 2a 2a 20 6c 69 6e  y in the .** lin
3d60: 6b 65 64 20 6c 69 73 74 20 73 74 61 72 74 69 6e  ked list startin
3d70: 67 20 61 74 20 73 71 6c 69 74 65 33 2e 70 53 61  g at sqlite3.pSa
3d80: 76 65 70 6f 69 6e 74 2e 0a 2a 2a 20 0a 2a 2a 20  vepoint..** .** 
3d90: 55 73 61 67 65 3a 0a 2a 2a 0a 2a 2a 20 20 20 20  Usage:.**.**    
3da0: 20 61 73 73 65 72 74 28 20 63 68 65 63 6b 53 61   assert( checkSa
3db0: 76 65 70 6f 69 6e 74 43 6f 75 6e 74 28 64 62 29  vepointCount(db)
3dc0: 20 29 3b 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e   );.*/.static in
3dd0: 74 20 63 68 65 63 6b 53 61 76 65 70 6f 69 6e 74  t checkSavepoint
3de0: 43 6f 75 6e 74 28 73 71 6c 69 74 65 33 20 2a 64  Count(sqlite3 *d
3df0: 62 29 7b 0a 20 20 69 6e 74 20 6e 20 3d 20 30 3b  b){.  int n = 0;
3e00: 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 3b  .  Savepoint *p;
3e10: 0a 20 20 66 6f 72 28 70 3d 64 62 2d 3e 70 53 61  .  for(p=db->pSa
3e20: 76 65 70 6f 69 6e 74 3b 20 70 3b 20 70 3d 70 2d  vepoint; p; p=p-
3e30: 3e 70 4e 65 78 74 29 20 6e 2b 2b 3b 0a 20 20 61  >pNext) n++;.  a
3e40: 73 73 65 72 74 28 20 6e 3d 3d 28 64 62 2d 3e 6e  ssert( n==(db->n
3e50: 53 61 76 65 70 6f 69 6e 74 20 2b 20 64 62 2d 3e  Savepoint + db->
3e60: 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76  isTransactionSav
3e70: 65 70 6f 69 6e 74 29 20 29 3b 0a 20 20 72 65 74  epoint) );.  ret
3e80: 75 72 6e 20 31 3b 0a 7d 0a 23 65 6e 64 69 66 0a  urn 1;.}.#endif.
3e90: 0a 2f 2a 0a 2a 2a 20 54 72 61 6e 73 66 65 72 20  ./*.** Transfer 
3ea0: 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 74 65  error message te
3eb0: 78 74 20 66 72 6f 6d 20 61 6e 20 73 71 6c 69 74  xt from an sqlit
3ec0: 65 33 5f 76 74 61 62 2e 7a 45 72 72 4d 73 67 20  e3_vtab.zErrMsg 
3ed0: 28 74 65 78 74 20 73 74 6f 72 65 64 0a 2a 2a 20  (text stored.** 
3ee0: 69 6e 20 6d 65 6d 6f 72 79 20 6f 62 74 61 69 6e  in memory obtain
3ef0: 65 64 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 5f  ed from sqlite3_
3f00: 6d 61 6c 6c 6f 63 29 20 69 6e 74 6f 20 61 20 56  malloc) into a V
3f10: 64 62 65 2e 7a 45 72 72 4d 73 67 20 28 74 65 78  dbe.zErrMsg (tex
3f20: 74 20 73 74 6f 72 65 64 0a 2a 2a 20 69 6e 20 6d  t stored.** in m
3f30: 65 6d 6f 72 79 20 6f 62 74 61 69 6e 65 64 20 66  emory obtained f
3f40: 72 6f 6d 20 73 71 6c 69 74 65 33 44 62 4d 61 6c  rom sqlite3DbMal
3f50: 6c 6f 63 29 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  loc)..*/.static 
3f60: 76 6f 69 64 20 69 6d 70 6f 72 74 56 74 61 62 45  void importVtabE
3f70: 72 72 4d 73 67 28 56 64 62 65 20 2a 70 2c 20 73  rrMsg(Vdbe *p, s
3f80: 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74  qlite3_vtab *pVt
3f90: 61 62 29 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a  ab){.  sqlite3 *
3fa0: 64 62 20 3d 20 70 2d 3e 64 62 3b 0a 20 20 73 71  db = p->db;.  sq
3fb0: 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20  lite3DbFree(db, 
3fc0: 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 70  p->zErrMsg);.  p
3fd0: 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 73 71 6c 69  ->zErrMsg = sqli
3fe0: 74 65 33 44 62 53 74 72 44 75 70 28 64 62 2c 20  te3DbStrDup(db, 
3ff0: 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67 29 3b  pVtab->zErrMsg);
4000: 0a 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28  .  sqlite3_free(
4010: 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67 29 3b  pVtab->zErrMsg);
4020: 0a 20 20 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73  .  pVtab->zErrMs
4030: 67 20 3d 20 30 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a  g = 0;.}.../*.**
4040: 20 45 78 65 63 75 74 65 20 61 73 20 6d 75 63 68   Execute as much
4050: 20 6f 66 20 61 20 56 44 42 45 20 70 72 6f 67 72   of a VDBE progr
4060: 61 6d 20 61 73 20 77 65 20 63 61 6e 20 74 68 65  am as we can the
4070: 6e 20 72 65 74 75 72 6e 2e 0a 2a 2a 0a 2a 2a 20  n return..**.** 
4080: 73 71 6c 69 74 65 33 56 64 62 65 4d 61 6b 65 52  sqlite3VdbeMakeR
4090: 65 61 64 79 28 29 20 6d 75 73 74 20 62 65 20 63  eady() must be c
40a0: 61 6c 6c 65 64 20 62 65 66 6f 72 65 20 74 68 69  alled before thi
40b0: 73 20 72 6f 75 74 69 6e 65 20 69 6e 20 6f 72 64  s routine in ord
40c0: 65 72 20 74 6f 0a 2a 2a 20 63 6c 6f 73 65 20 74  er to.** close t
40d0: 68 65 20 70 72 6f 67 72 61 6d 20 77 69 74 68 20  he program with 
40e0: 61 20 66 69 6e 61 6c 20 4f 50 5f 48 61 6c 74 20  a final OP_Halt 
40f0: 61 6e 64 20 74 6f 20 73 65 74 20 75 70 20 74 68  and to set up th
4100: 65 20 63 61 6c 6c 62 61 63 6b 73 0a 2a 2a 20 61  e callbacks.** a
4110: 6e 64 20 74 68 65 20 65 72 72 6f 72 20 6d 65 73  nd the error mes
4120: 73 61 67 65 20 70 6f 69 6e 74 65 72 2e 0a 2a 2a  sage pointer..**
4130: 0a 2a 2a 20 57 68 65 6e 65 76 65 72 20 61 20 72  .** Whenever a r
4140: 6f 77 20 6f 72 20 72 65 73 75 6c 74 20 64 61 74  ow or result dat
4150: 61 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2c 20  a is available, 
4160: 74 68 69 73 20 72 6f 75 74 69 6e 65 20 77 69 6c  this routine wil
4170: 6c 20 65 69 74 68 65 72 0a 2a 2a 20 69 6e 76 6f  l either.** invo
4180: 6b 65 20 74 68 65 20 72 65 73 75 6c 74 20 63 61  ke the result ca
4190: 6c 6c 62 61 63 6b 20 28 69 66 20 74 68 65 72 65  llback (if there
41a0: 20 69 73 20 6f 6e 65 29 20 6f 72 20 72 65 74 75   is one) or retu
41b0: 72 6e 20 77 69 74 68 0a 2a 2a 20 53 51 4c 49 54  rn with.** SQLIT
41c0: 45 5f 52 4f 57 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  E_ROW..**.** If 
41d0: 61 6e 20 61 74 74 65 6d 70 74 20 69 73 20 6d 61  an attempt is ma
41e0: 64 65 20 74 6f 20 6f 70 65 6e 20 61 20 6c 6f 63  de to open a loc
41f0: 6b 65 64 20 64 61 74 61 62 61 73 65 2c 20 74 68  ked database, th
4200: 65 6e 20 74 68 69 73 20 72 6f 75 74 69 6e 65 0a  en this routine.
4210: 2a 2a 20 77 69 6c 6c 20 65 69 74 68 65 72 20 69  ** will either i
4220: 6e 76 6f 6b 65 20 74 68 65 20 62 75 73 79 20 63  nvoke the busy c
4230: 61 6c 6c 62 61 63 6b 20 28 69 66 20 74 68 65 72  allback (if ther
4240: 65 20 69 73 20 6f 6e 65 29 20 6f 72 20 69 74 20  e is one) or it 
4250: 77 69 6c 6c 0a 2a 2a 20 72 65 74 75 72 6e 20 53  will.** return S
4260: 51 4c 49 54 45 5f 42 55 53 59 2e 0a 2a 2a 0a 2a  QLITE_BUSY..**.*
4270: 2a 20 49 66 20 61 6e 20 65 72 72 6f 72 20 6f 63  * If an error oc
4280: 63 75 72 73 2c 20 61 6e 20 65 72 72 6f 72 20 6d  curs, an error m
4290: 65 73 73 61 67 65 20 69 73 20 77 72 69 74 74 65  essage is writte
42a0: 6e 20 74 6f 20 6d 65 6d 6f 72 79 20 6f 62 74 61  n to memory obta
42b0: 69 6e 65 64 0a 2a 2a 20 66 72 6f 6d 20 73 71 6c  ined.** from sql
42c0: 69 74 65 33 5f 6d 61 6c 6c 6f 63 28 29 20 61 6e  ite3_malloc() an
42d0: 64 20 70 2d 3e 7a 45 72 72 4d 73 67 20 69 73 20  d p->zErrMsg is 
42e0: 6d 61 64 65 20 74 6f 20 70 6f 69 6e 74 20 74 6f  made to point to
42f0: 20 74 68 61 74 20 6d 65 6d 6f 72 79 2e 0a 2a 2a   that memory..**
4300: 20 54 68 65 20 65 72 72 6f 72 20 63 6f 64 65 20   The error code 
4310: 69 73 20 73 74 6f 72 65 64 20 69 6e 20 70 2d 3e  is stored in p->
4320: 72 63 20 61 6e 64 20 74 68 69 73 20 72 6f 75 74  rc and this rout
4330: 69 6e 65 20 72 65 74 75 72 6e 73 20 53 51 4c 49  ine returns SQLI
4340: 54 45 5f 45 52 52 4f 52 2e 0a 2a 2a 0a 2a 2a 20  TE_ERROR..**.** 
4350: 49 66 20 74 68 65 20 63 61 6c 6c 62 61 63 6b 20  If the callback 
4360: 65 76 65 72 20 72 65 74 75 72 6e 73 20 6e 6f 6e  ever returns non
4370: 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20  -zero, then the 
4380: 70 72 6f 67 72 61 6d 20 65 78 69 74 73 0a 2a 2a  program exits.**
4390: 20 69 6d 6d 65 64 69 61 74 65 6c 79 2e 20 20 54   immediately.  T
43a0: 68 65 72 65 20 77 69 6c 6c 20 62 65 20 6e 6f 20  here will be no 
43b0: 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 62 75  error message bu
43c0: 74 20 74 68 65 20 70 2d 3e 72 63 20 66 69 65 6c  t the p->rc fiel
43d0: 64 20 69 73 0a 2a 2a 20 73 65 74 20 74 6f 20 53  d is.** set to S
43e0: 51 4c 49 54 45 5f 41 42 4f 52 54 20 61 6e 64 20  QLITE_ABORT and 
43f0: 74 68 69 73 20 72 6f 75 74 69 6e 65 20 77 69 6c  this routine wil
4400: 6c 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f  l return SQLITE_
4410: 45 52 52 4f 52 2e 0a 2a 2a 0a 2a 2a 20 41 20 6d  ERROR..**.** A m
4420: 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e  emory allocation
4430: 20 65 72 72 6f 72 20 63 61 75 73 65 73 20 70 2d   error causes p-
4440: 3e 72 63 20 74 6f 20 62 65 20 73 65 74 20 74 6f  >rc to be set to
4450: 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 61 6e   SQLITE_NOMEM an
4460: 64 20 74 68 69 73 0a 2a 2a 20 72 6f 75 74 69 6e  d this.** routin
4470: 65 20 74 6f 20 72 65 74 75 72 6e 20 53 51 4c 49  e to return SQLI
4480: 54 45 5f 45 52 52 4f 52 2e 0a 2a 2a 0a 2a 2a 20  TE_ERROR..**.** 
4490: 4f 74 68 65 72 20 66 61 74 61 6c 20 65 72 72 6f  Other fatal erro
44a0: 72 73 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45  rs return SQLITE
44b0: 5f 45 52 52 4f 52 2e 0a 2a 2a 0a 2a 2a 20 41 66  _ERROR..**.** Af
44c0: 74 65 72 20 74 68 69 73 20 72 6f 75 74 69 6e 65  ter this routine
44d0: 20 68 61 73 20 66 69 6e 69 73 68 65 64 2c 20 73   has finished, s
44e0: 71 6c 69 74 65 33 56 64 62 65 46 69 6e 61 6c 69  qlite3VdbeFinali
44f0: 7a 65 28 29 20 73 68 6f 75 6c 64 20 62 65 0a 2a  ze() should be.*
4500: 2a 20 75 73 65 64 20 74 6f 20 63 6c 65 61 6e 20  * used to clean 
4510: 75 70 20 74 68 65 20 6d 65 73 73 20 74 68 61 74  up the mess that
4520: 20 77 61 73 20 6c 65 66 74 20 62 65 68 69 6e 64   was left behind
4530: 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  ..*/.int sqlite3
4540: 56 64 62 65 45 78 65 63 28 0a 20 20 56 64 62 65  VdbeExec(.  Vdbe
4550: 20 2a 70 20 20 20 20 20 20 20 20 20 20 20 20 20   *p             
4560: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 56 44         /* The VD
4570: 42 45 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20 70  BE */.){.  int p
4580: 63 3d 30 3b 20 20 20 20 20 20 20 20 20 20 20 20  c=0;            
4590: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 70 72 6f        /* The pro
45a0: 67 72 61 6d 20 63 6f 75 6e 74 65 72 20 2a 2f 0a  gram counter */.
45b0: 20 20 4f 70 20 2a 61 4f 70 20 3d 20 70 2d 3e 61    Op *aOp = p->a
45c0: 4f 70 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  Op;          /* 
45d0: 43 6f 70 79 20 6f 66 20 70 2d 3e 61 4f 70 20 2a  Copy of p->aOp *
45e0: 2f 0a 20 20 4f 70 20 2a 70 4f 70 3b 20 20 20 20  /.  Op *pOp;    
45f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
4600: 2a 20 43 75 72 72 65 6e 74 20 6f 70 65 72 61 74  * Current operat
4610: 69 6f 6e 20 2a 2f 0a 20 20 69 6e 74 20 72 63 20  ion */.  int rc 
4620: 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 20 20 20 20  = SQLITE_OK;    
4630: 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20      /* Value to 
4640: 72 65 74 75 72 6e 20 2a 2f 0a 20 20 73 71 6c 69  return */.  sqli
4650: 74 65 33 20 2a 64 62 20 3d 20 70 2d 3e 64 62 3b  te3 *db = p->db;
4660: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61         /* The da
4670: 74 61 62 61 73 65 20 2a 2f 0a 20 20 75 38 20 72  tabase */.  u8 r
4680: 65 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c  esetSchemaOnFaul
4690: 74 20 3d 20 30 3b 20 2f 2a 20 52 65 73 65 74 20  t = 0; /* Reset 
46a0: 73 63 68 65 6d 61 20 61 66 74 65 72 20 61 6e 20  schema after an 
46b0: 65 72 72 6f 72 20 69 66 20 70 6f 73 69 74 69 76  error if positiv
46c0: 65 20 2a 2f 0a 20 20 75 38 20 65 6e 63 6f 64 69  e */.  u8 encodi
46d0: 6e 67 20 3d 20 45 4e 43 28 64 62 29 3b 20 20 20  ng = ENC(db);   
46e0: 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73    /* The databas
46f0: 65 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 23 69  e encoding */.#i
4700: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
4710: 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42  T_PROGRESS_CALLB
4720: 41 43 4b 0a 20 20 69 6e 74 20 63 68 65 63 6b 50  ACK.  int checkP
4730: 72 6f 67 72 65 73 73 3b 20 20 20 20 20 20 20 20  rogress;        
4740: 20 2f 2a 20 54 72 75 65 20 69 66 20 70 72 6f 67   /* True if prog
4750: 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 73 20 61  ress callbacks a
4760: 72 65 20 65 6e 61 62 6c 65 64 20 2a 2f 0a 20 20  re enabled */.  
4770: 69 6e 74 20 6e 50 72 6f 67 72 65 73 73 4f 70 73  int nProgressOps
4780: 20 3d 20 30 3b 20 20 20 20 20 20 2f 2a 20 4f 70   = 0;      /* Op
4790: 63 6f 64 65 73 20 65 78 65 63 75 74 65 64 20 73  codes executed s
47a0: 69 6e 63 65 20 70 72 6f 67 72 65 73 73 20 63 61  ince progress ca
47b0: 6c 6c 62 61 63 6b 2e 20 2a 2f 0a 23 65 6e 64 69  llback. */.#endi
47c0: 66 0a 20 20 4d 65 6d 20 2a 61 4d 65 6d 20 3d 20  f.  Mem *aMem = 
47d0: 70 2d 3e 61 4d 65 6d 3b 20 20 20 20 20 20 20 2f  p->aMem;       /
47e0: 2a 20 43 6f 70 79 20 6f 66 20 70 2d 3e 61 4d 65  * Copy of p->aMe
47f0: 6d 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e 31  m */.  Mem *pIn1
4800: 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 20   = 0;           
4810: 20 20 2f 2a 20 31 73 74 20 69 6e 70 75 74 20 6f    /* 1st input o
4820: 70 65 72 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20  perand */.  Mem 
4830: 2a 70 49 6e 32 20 3d 20 30 3b 20 20 20 20 20 20  *pIn2 = 0;      
4840: 20 20 20 20 20 20 20 2f 2a 20 32 6e 64 20 69 6e         /* 2nd in
4850: 70 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20  put operand */. 
4860: 20 4d 65 6d 20 2a 70 49 6e 33 20 3d 20 30 3b 20   Mem *pIn3 = 0; 
4870: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 33              /* 3
4880: 72 64 20 69 6e 70 75 74 20 6f 70 65 72 61 6e 64  rd input operand
4890: 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4f 75 74 20   */.  Mem *pOut 
48a0: 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 20 20  = 0;            
48b0: 20 2f 2a 20 4f 75 74 70 75 74 20 6f 70 65 72 61   /* Output opera
48c0: 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 69 43 6f 6d  nd */.  int iCom
48d0: 70 61 72 65 20 3d 20 30 3b 20 20 20 20 20 20 20  pare = 0;       
48e0: 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20     /* Result of 
48f0: 6c 61 73 74 20 4f 50 5f 43 6f 6d 70 61 72 65 20  last OP_Compare 
4900: 6f 70 65 72 61 74 69 6f 6e 20 2a 2f 0a 20 20 69  operation */.  i
4910: 6e 74 20 2a 61 50 65 72 6d 75 74 65 20 3d 20 30  nt *aPermute = 0
4920: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 50 65 72  ;         /* Per
4930: 6d 75 74 61 74 69 6f 6e 20 6f 66 20 63 6f 6c 75  mutation of colu
4940: 6d 6e 73 20 66 6f 72 20 4f 50 5f 43 6f 6d 70 61  mns for OP_Compa
4950: 72 65 20 2a 2f 0a 20 20 69 36 34 20 6c 61 73 74  re */.  i64 last
4960: 52 6f 77 69 64 20 3d 20 64 62 2d 3e 6c 61 73 74  Rowid = db->last
4970: 52 6f 77 69 64 3b 20 20 2f 2a 20 53 61 76 65 64  Rowid;  /* Saved
4980: 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 6c 61   value of the la
4990: 73 74 20 69 6e 73 65 72 74 20 52 4f 57 49 44 20  st insert ROWID 
49a0: 2a 2f 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50  */.#ifdef VDBE_P
49b0: 52 4f 46 49 4c 45 0a 20 20 75 36 34 20 73 74 61  ROFILE.  u64 sta
49c0: 72 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rt;             
49d0: 20 20 20 20 2f 2a 20 43 50 55 20 63 6c 6f 63 6b      /* CPU clock
49e0: 20 63 6f 75 6e 74 20 61 74 20 73 74 61 72 74 20   count at start 
49f0: 6f 66 20 6f 70 63 6f 64 65 20 2a 2f 0a 20 20 69  of opcode */.  i
4a00: 6e 74 20 6f 72 69 67 50 63 3b 20 20 20 20 20 20  nt origPc;      
4a10: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 72 6f            /* Pro
4a20: 67 72 61 6d 20 63 6f 75 6e 74 65 72 20 61 74 20  gram counter at 
4a30: 73 74 61 72 74 20 6f 66 20 6f 70 63 6f 64 65 20  start of opcode 
4a40: 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 2f 2a 2a 2a  */.#endif.  /***
4a50: 20 49 4e 53 45 52 54 20 53 54 41 43 4b 20 55 4e   INSERT STACK UN
4a60: 49 4f 4e 20 48 45 52 45 20 2a 2a 2a 2f 0a 0a 20  ION HERE ***/.. 
4a70: 20 61 73 73 65 72 74 28 20 70 2d 3e 6d 61 67 69   assert( p->magi
4a80: 63 3d 3d 56 44 42 45 5f 4d 41 47 49 43 5f 52 55  c==VDBE_MAGIC_RU
4a90: 4e 20 29 3b 20 20 2f 2a 20 73 71 6c 69 74 65 33  N );  /* sqlite3
4aa0: 5f 73 74 65 70 28 29 20 76 65 72 69 66 69 65 73  _step() verifies
4ab0: 20 74 68 69 73 20 2a 2f 0a 20 20 73 71 6c 69 74   this */.  sqlit
4ac0: 65 33 56 64 62 65 45 6e 74 65 72 28 70 29 3b 0a  e3VdbeEnter(p);.
4ad0: 20 20 69 66 28 20 70 2d 3e 72 63 3d 3d 53 51 4c    if( p->rc==SQL
4ae0: 49 54 45 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20  ITE_NOMEM ){.   
4af0: 20 2f 2a 20 54 68 69 73 20 68 61 70 70 65 6e 73   /* This happens
4b00: 20 69 66 20 61 20 6d 61 6c 6c 6f 63 28 29 20 69   if a malloc() i
4b10: 6e 73 69 64 65 20 61 20 63 61 6c 6c 20 74 6f 20  nside a call to 
4b20: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
4b30: 65 78 74 28 29 20 6f 72 0a 20 20 20 20 2a 2a 20  ext() or.    ** 
4b40: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
4b50: 65 78 74 31 36 28 29 20 66 61 69 6c 65 64 2e 20  ext16() failed. 
4b60: 20 2a 2f 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f   */.    goto no_
4b70: 6d 65 6d 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72  mem;.  }.  asser
4b80: 74 28 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45  t( p->rc==SQLITE
4b90: 5f 4f 4b 20 7c 7c 20 70 2d 3e 72 63 3d 3d 53 51  _OK || p->rc==SQ
4ba0: 4c 49 54 45 5f 42 55 53 59 20 29 3b 0a 20 20 70  LITE_BUSY );.  p
4bb0: 2d 3e 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b  ->rc = SQLITE_OK
4bc0: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 65  ;.  assert( p->e
4bd0: 78 70 6c 61 69 6e 3d 3d 30 20 29 3b 0a 20 20 70  xplain==0 );.  p
4be0: 2d 3e 70 52 65 73 75 6c 74 53 65 74 20 3d 20 30  ->pResultSet = 0
4bf0: 3b 0a 20 20 64 62 2d 3e 62 75 73 79 48 61 6e 64  ;.  db->busyHand
4c00: 6c 65 72 2e 6e 42 75 73 79 20 3d 20 30 3b 0a 20  ler.nBusy = 0;. 
4c10: 20 43 48 45 43 4b 5f 46 4f 52 5f 49 4e 54 45 52   CHECK_FOR_INTER
4c20: 52 55 50 54 3b 0a 20 20 73 71 6c 69 74 65 33 56  RUPT;.  sqlite3V
4c30: 64 62 65 49 4f 54 72 61 63 65 53 71 6c 28 70 29  dbeIOTraceSql(p)
4c40: 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
4c50: 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f 43  _OMIT_PROGRESS_C
4c60: 41 4c 4c 42 41 43 4b 0a 20 20 63 68 65 63 6b 50  ALLBACK.  checkP
4c70: 72 6f 67 72 65 73 73 20 3d 20 64 62 2d 3e 78 50  rogress = db->xP
4c80: 72 6f 67 72 65 73 73 21 3d 30 3b 0a 23 65 6e 64  rogress!=0;.#end
4c90: 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  if.#ifdef SQLITE
4ca0: 5f 44 45 42 55 47 0a 20 20 73 71 6c 69 74 65 33  _DEBUG.  sqlite3
4cb0: 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f  BeginBenignMallo
4cc0: 63 28 29 3b 0a 20 20 69 66 28 20 70 2d 3e 70 63  c();.  if( p->pc
4cd0: 3d 3d 30 20 20 26 26 20 28 70 2d 3e 64 62 2d 3e  ==0  && (p->db->
4ce0: 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 56  flags & SQLITE_V
4cf0: 64 62 65 4c 69 73 74 69 6e 67 29 21 3d 30 20 29  dbeListing)!=0 )
4d00: 7b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20  {.    int i;.   
4d10: 20 70 72 69 6e 74 66 28 22 56 44 42 45 20 50 72   printf("VDBE Pr
4d20: 6f 67 72 61 6d 20 4c 69 73 74 69 6e 67 3a 5c 6e  ogram Listing:\n
4d30: 22 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  ");.    sqlite3V
4d40: 64 62 65 50 72 69 6e 74 53 71 6c 28 70 29 3b 0a  dbePrintSql(p);.
4d50: 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70      for(i=0; i<p
4d60: 2d 3e 6e 4f 70 3b 20 69 2b 2b 29 7b 0a 20 20 20  ->nOp; i++){.   
4d70: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 50 72     sqlite3VdbePr
4d80: 69 6e 74 4f 70 28 73 74 64 6f 75 74 2c 20 69 2c  intOp(stdout, i,
4d90: 20 26 61 4f 70 5b 69 5d 29 3b 0a 20 20 20 20 7d   &aOp[i]);.    }
4da0: 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 45 6e  .  }.  sqlite3En
4db0: 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 3b  dBenignMalloc();
4dc0: 0a 23 65 6e 64 69 66 0a 20 20 66 6f 72 28 70 63  .#endif.  for(pc
4dd0: 3d 70 2d 3e 70 63 3b 20 72 63 3d 3d 53 51 4c 49  =p->pc; rc==SQLI
4de0: 54 45 5f 4f 4b 3b 20 70 63 2b 2b 29 7b 0a 20 20  TE_OK; pc++){.  
4df0: 20 20 61 73 73 65 72 74 28 20 70 63 3e 3d 30 20    assert( pc>=0 
4e00: 26 26 20 70 63 3c 70 2d 3e 6e 4f 70 20 29 3b 0a  && pc<p->nOp );.
4e10: 20 20 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c 6c      if( db->mall
4e20: 6f 63 46 61 69 6c 65 64 20 29 20 67 6f 74 6f 20  ocFailed ) goto 
4e30: 6e 6f 5f 6d 65 6d 3b 0a 23 69 66 64 65 66 20 56  no_mem;.#ifdef V
4e40: 44 42 45 5f 50 52 4f 46 49 4c 45 0a 20 20 20 20  DBE_PROFILE.    
4e50: 6f 72 69 67 50 63 20 3d 20 70 63 3b 0a 20 20 20  origPc = pc;.   
4e60: 20 73 74 61 72 74 20 3d 20 73 71 6c 69 74 65 33   start = sqlite3
4e70: 48 77 74 69 6d 65 28 29 3b 0a 23 65 6e 64 69 66  Hwtime();.#endif
4e80: 0a 20 20 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b  .    pOp = &aOp[
4e90: 70 63 5d 3b 0a 0a 20 20 20 20 2f 2a 20 4f 6e 6c  pc];..    /* Onl
4ea0: 79 20 61 6c 6c 6f 77 20 74 72 61 63 69 6e 67 20  y allow tracing 
4eb0: 69 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20  if SQLITE_DEBUG 
4ec0: 69 73 20 64 65 66 69 6e 65 64 2e 0a 20 20 20 20  is defined..    
4ed0: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
4ee0: 5f 44 45 42 55 47 0a 20 20 20 20 69 66 28 20 70  _DEBUG.    if( p
4ef0: 2d 3e 74 72 61 63 65 20 29 7b 0a 20 20 20 20 20  ->trace ){.     
4f00: 20 69 66 28 20 70 63 3d 3d 30 20 29 7b 0a 20 20   if( pc==0 ){.  
4f10: 20 20 20 20 20 20 70 72 69 6e 74 66 28 22 56 44        printf("VD
4f20: 42 45 20 45 78 65 63 75 74 69 6f 6e 20 54 72 61  BE Execution Tra
4f30: 63 65 3a 5c 6e 22 29 3b 0a 20 20 20 20 20 20 20  ce:\n");.       
4f40: 20 73 71 6c 69 74 65 33 56 64 62 65 50 72 69 6e   sqlite3VdbePrin
4f50: 74 53 71 6c 28 70 29 3b 0a 20 20 20 20 20 20 7d  tSql(p);.      }
4f60: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
4f70: 62 65 50 72 69 6e 74 4f 70 28 70 2d 3e 74 72 61  bePrintOp(p->tra
4f80: 63 65 2c 20 70 63 2c 20 70 4f 70 29 3b 0a 20 20  ce, pc, pOp);.  
4f90: 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 20    }.#endif.     
4fa0: 20 0a 0a 20 20 20 20 2f 2a 20 43 68 65 63 6b 20   ..    /* Check 
4fb0: 74 6f 20 73 65 65 20 69 66 20 77 65 20 6e 65 65  to see if we nee
4fc0: 64 20 74 6f 20 73 69 6d 75 6c 61 74 65 20 61 6e  d to simulate an
4fd0: 20 69 6e 74 65 72 72 75 70 74 2e 20 20 54 68 69   interrupt.  Thi
4fe0: 73 20 6f 6e 6c 79 20 68 61 70 70 65 6e 73 0a 20  s only happens. 
4ff0: 20 20 20 2a 2a 20 69 66 20 77 65 20 68 61 76 65     ** if we have
5000: 20 61 20 73 70 65 63 69 61 6c 20 74 65 73 74 20   a special test 
5010: 62 75 69 6c 64 2e 0a 20 20 20 20 2a 2f 0a 23 69  build..    */.#i
5020: 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54  fdef SQLITE_TEST
5030: 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33  .    if( sqlite3
5040: 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74  _interrupt_count
5050: 3e 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  >0 ){.      sqli
5060: 74 65 33 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f  te3_interrupt_co
5070: 75 6e 74 2d 2d 3b 0a 20 20 20 20 20 20 69 66 28  unt--;.      if(
5080: 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75   sqlite3_interru
5090: 70 74 5f 63 6f 75 6e 74 3d 3d 30 20 29 7b 0a 20  pt_count==0 ){. 
50a0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 69         sqlite3_i
50b0: 6e 74 65 72 72 75 70 74 28 64 62 29 3b 0a 20 20  nterrupt(db);.  
50c0: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 23 65 6e 64      }.    }.#end
50d0: 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  if..#ifndef SQLI
50e0: 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53  TE_OMIT_PROGRESS
50f0: 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 20 20 2f 2a  _CALLBACK.    /*
5100: 20 43 61 6c 6c 20 74 68 65 20 70 72 6f 67 72 65   Call the progre
5110: 73 73 20 63 61 6c 6c 62 61 63 6b 20 69 66 20 69  ss callback if i
5120: 74 20 69 73 20 63 6f 6e 66 69 67 75 72 65 64 20  t is configured 
5130: 61 6e 64 20 74 68 65 20 72 65 71 75 69 72 65 64  and the required
5140: 20 6e 75 6d 62 65 72 0a 20 20 20 20 2a 2a 20 6f   number.    ** o
5150: 66 20 56 44 42 45 20 6f 70 73 20 68 61 76 65 20  f VDBE ops have 
5160: 62 65 65 6e 20 65 78 65 63 75 74 65 64 20 28 65  been executed (e
5170: 69 74 68 65 72 20 73 69 6e 63 65 20 74 68 69 73  ither since this
5180: 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 0a 20   invocation of. 
5190: 20 20 20 2a 2a 20 73 71 6c 69 74 65 33 56 64 62     ** sqlite3Vdb
51a0: 65 45 78 65 63 28 29 20 6f 72 20 73 69 6e 63 65  eExec() or since
51b0: 20 6c 61 73 74 20 74 69 6d 65 20 74 68 65 20 70   last time the p
51c0: 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b  rogress callback
51d0: 20 77 61 73 20 63 61 6c 6c 65 64 29 2e 0a 20 20   was called)..  
51e0: 20 20 2a 2a 20 49 66 20 74 68 65 20 70 72 6f 67    ** If the prog
51f0: 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 72 65  ress callback re
5200: 74 75 72 6e 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20  turns non-zero, 
5210: 65 78 69 74 20 74 68 65 20 76 69 72 74 75 61 6c  exit the virtual
5220: 20 6d 61 63 68 69 6e 65 20 77 69 74 68 0a 20 20   machine with.  
5230: 20 20 2a 2a 20 61 20 72 65 74 75 72 6e 20 63 6f    ** a return co
5240: 64 65 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 2e  de SQLITE_ABORT.
5250: 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20  .    */.    if( 
5260: 63 68 65 63 6b 50 72 6f 67 72 65 73 73 20 29 7b  checkProgress ){
5270: 0a 20 20 20 20 20 20 69 66 28 20 64 62 2d 3e 6e  .      if( db->n
5280: 50 72 6f 67 72 65 73 73 4f 70 73 3d 3d 6e 50 72  ProgressOps==nPr
5290: 6f 67 72 65 73 73 4f 70 73 20 29 7b 0a 20 20 20  ogressOps ){.   
52a0: 20 20 20 20 20 69 6e 74 20 70 72 63 3b 0a 20 20       int prc;.  
52b0: 20 20 20 20 20 20 70 72 63 20 3d 20 64 62 2d 3e        prc = db->
52c0: 78 50 72 6f 67 72 65 73 73 28 64 62 2d 3e 70 50  xProgress(db->pP
52d0: 72 6f 67 72 65 73 73 41 72 67 29 3b 0a 20 20 20  rogressArg);.   
52e0: 20 20 20 20 20 69 66 28 20 70 72 63 21 3d 30 20       if( prc!=0 
52f0: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 72 63 20  ){.          rc 
5300: 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45 52 52 55  = SQLITE_INTERRU
5310: 50 54 3b 0a 20 20 20 20 20 20 20 20 20 20 67 6f  PT;.          go
5320: 74 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f 68 61  to vdbe_error_ha
5330: 6c 74 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  lt;.        }.  
5340: 20 20 20 20 20 20 6e 50 72 6f 67 72 65 73 73 4f        nProgressO
5350: 70 73 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a  ps = 0;.      }.
5360: 20 20 20 20 20 20 6e 50 72 6f 67 72 65 73 73 4f        nProgressO
5370: 70 73 2b 2b 3b 0a 20 20 20 20 7d 0a 23 65 6e 64  ps++;.    }.#end
5380: 69 66 0a 0a 20 20 20 20 2f 2a 20 4f 6e 20 61 6e  if..    /* On an
5390: 79 20 6f 70 63 6f 64 65 20 77 69 74 68 20 74 68  y opcode with th
53a0: 65 20 22 6f 75 74 32 2d 70 72 65 72 65 6c 61 73  e "out2-prerelas
53b0: 65 22 20 74 61 67 2c 20 66 72 65 65 20 61 6e 79  e" tag, free any
53c0: 0a 20 20 20 20 2a 2a 20 65 78 74 65 72 6e 61 6c  .    ** external
53d0: 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 6f 75 74   allocations out
53e0: 20 6f 66 20 6d 65 6d 5b 70 32 5d 20 61 6e 64 20   of mem[p2] and 
53f0: 73 65 74 20 6d 65 6d 5b 70 32 5d 20 74 6f 20 62  set mem[p2] to b
5400: 65 0a 20 20 20 20 2a 2a 20 61 6e 20 75 6e 64 65  e.    ** an unde
5410: 66 69 6e 65 64 20 69 6e 74 65 67 65 72 2e 20 20  fined integer.  
5420: 4f 70 63 6f 64 65 73 20 77 69 6c 6c 20 65 69 74  Opcodes will eit
5430: 68 65 72 20 66 69 6c 6c 20 69 6e 20 74 68 65 20  her fill in the 
5440: 69 6e 74 65 67 65 72 0a 20 20 20 20 2a 2a 20 76  integer.    ** v
5450: 61 6c 75 65 20 6f 72 20 63 6f 6e 76 65 72 74 20  alue or convert 
5460: 6d 65 6d 5b 70 32 5d 20 74 6f 20 61 20 64 69 66  mem[p2] to a dif
5470: 66 65 72 65 6e 74 20 74 79 70 65 2e 0a 20 20 20  ferent type..   
5480: 20 2a 2f 0a 20 20 20 20 61 73 73 65 72 74 28 20   */.    assert( 
5490: 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 3d 3d 73 71  pOp->opflags==sq
54a0: 6c 69 74 65 33 4f 70 63 6f 64 65 50 72 6f 70 65  lite3OpcodePrope
54b0: 72 74 79 5b 70 4f 70 2d 3e 6f 70 63 6f 64 65 5d  rty[pOp->opcode]
54c0: 20 29 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d   );.    if( pOp-
54d0: 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 47  >opflags & OPFLG
54e0: 5f 4f 55 54 32 5f 50 52 45 52 45 4c 45 41 53 45  _OUT2_PRERELEASE
54f0: 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74   ){.      assert
5500: 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20  ( pOp->p2>0 );. 
5510: 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
5520: 2d 3e 70 32 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b  ->p2<=p->nMem );
5530: 0a 20 20 20 20 20 20 70 4f 75 74 20 3d 20 26 61  .      pOut = &a
5540: 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
5550: 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68      memAboutToCh
5560: 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 20  ange(p, pOut);. 
5570: 20 20 20 20 20 4d 65 6d 52 65 6c 65 61 73 65 45       MemReleaseE
5580: 78 74 28 70 4f 75 74 29 3b 0a 20 20 20 20 20 20  xt(pOut);.      
5590: 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pOut->flags = ME
55a0: 4d 5f 49 6e 74 3b 0a 20 20 20 20 7d 0a 0a 20 20  M_Int;.    }..  
55b0: 20 20 2f 2a 20 53 61 6e 69 74 79 20 63 68 65 63    /* Sanity chec
55c0: 6b 69 6e 67 20 6f 6e 20 6f 74 68 65 72 20 6f 70  king on other op
55d0: 65 72 61 6e 64 73 20 2a 2f 0a 23 69 66 64 65 66  erands */.#ifdef
55e0: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
55f0: 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70 66 6c    if( (pOp->opfl
5600: 61 67 73 20 26 20 4f 50 46 4c 47 5f 49 4e 31 29  ags & OPFLG_IN1)
5610: 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73  !=0 ){.      ass
5620: 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 29  ert( pOp->p1>0 )
5630: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
5640: 70 4f 70 2d 3e 70 31 3c 3d 70 2d 3e 6e 4d 65 6d  pOp->p1<=p->nMem
5650: 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
5660: 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d  ( memIsValid(&aM
5670: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 29 20 29 3b 0a  em[pOp->p1]) );.
5680: 20 20 20 20 20 20 52 45 47 49 53 54 45 52 5f 54        REGISTER_T
5690: 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20 26 61  RACE(pOp->p1, &a
56a0: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 29 3b 0a 20  Mem[pOp->p1]);. 
56b0: 20 20 20 7d 0a 20 20 20 20 69 66 28 20 28 70 4f     }.    if( (pO
56c0: 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50 46  p->opflags & OPF
56d0: 4c 47 5f 49 4e 32 29 21 3d 30 20 29 7b 0a 20 20  LG_IN2)!=0 ){.  
56e0: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
56f0: 3e 70 32 3e 30 20 29 3b 0a 20 20 20 20 20 20 61  >p2>0 );.      a
5700: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d  ssert( pOp->p2<=
5710: 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20  p->nMem );.     
5720: 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
5730: 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  lid(&aMem[pOp->p
5740: 32 5d 29 20 29 3b 0a 20 20 20 20 20 20 52 45 47  2]) );.      REG
5750: 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
5760: 3e 70 32 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  >p2, &aMem[pOp->
5770: 70 32 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  p2]);.    }.    
5780: 69 66 28 20 28 70 4f 70 2d 3e 6f 70 66 6c 61 67  if( (pOp->opflag
5790: 73 20 26 20 4f 50 46 4c 47 5f 49 4e 33 29 21 3d  s & OPFLG_IN3)!=
57a0: 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72  0 ){.      asser
57b0: 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a  t( pOp->p3>0 );.
57c0: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
57d0: 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29  p->p3<=p->nMem )
57e0: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
57f0: 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d  memIsValid(&aMem
5800: 5b 70 4f 70 2d 3e 70 33 5d 29 20 29 3b 0a 20 20  [pOp->p3]) );.  
5810: 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41      REGISTER_TRA
5820: 43 45 28 70 4f 70 2d 3e 70 33 2c 20 26 61 4d 65  CE(pOp->p3, &aMe
5830: 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20 20 20  m[pOp->p3]);.   
5840: 20 7d 0a 20 20 20 20 69 66 28 20 28 70 4f 70 2d   }.    if( (pOp-
5850: 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 47  >opflags & OPFLG
5860: 5f 4f 55 54 32 29 21 3d 30 20 29 7b 0a 20 20 20  _OUT2)!=0 ){.   
5870: 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
5880: 70 32 3e 30 20 29 3b 0a 20 20 20 20 20 20 61 73  p2>0 );.      as
5890: 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 70  sert( pOp->p2<=p
58a0: 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20  ->nMem );.      
58b0: 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
58c0: 28 70 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  (p, &aMem[pOp->p
58d0: 32 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  2]);.    }.    i
58e0: 66 28 20 28 70 4f 70 2d 3e 6f 70 66 6c 61 67 73  f( (pOp->opflags
58f0: 20 26 20 4f 50 46 4c 47 5f 4f 55 54 33 29 21 3d   & OPFLG_OUT3)!=
5900: 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72  0 ){.      asser
5910: 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a  t( pOp->p3>0 );.
5920: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
5930: 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29  p->p3<=p->nMem )
5940: 3b 0a 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74  ;.      memAbout
5950: 54 6f 43 68 61 6e 67 65 28 70 2c 20 26 61 4d 65  ToChange(p, &aMe
5960: 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20 20 20  m[pOp->p3]);.   
5970: 20 7d 0a 23 65 6e 64 69 66 0a 20 20 0a 20 20 20   }.#endif.  .   
5980: 20 73 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70   switch( pOp->op
5990: 63 6f 64 65 20 29 7b 0a 0a 2f 2a 2a 2a 2a 2a 2a  code ){../******
59a0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
59b0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
59c0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
59d0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
59e0: 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 57 68 61 74 20  *******.** What 
59f0: 66 6f 6c 6c 6f 77 73 20 69 73 20 61 20 6d 61 73  follows is a mas
5a00: 73 69 76 65 20 73 77 69 74 63 68 20 73 74 61 74  sive switch stat
5a10: 65 6d 65 6e 74 20 77 68 65 72 65 20 65 61 63 68  ement where each
5a20: 20 63 61 73 65 20 69 6d 70 6c 65 6d 65 6e 74 73   case implements
5a30: 20 61 0a 2a 2a 20 73 65 70 61 72 61 74 65 20 69   a.** separate i
5a40: 6e 73 74 72 75 63 74 69 6f 6e 20 69 6e 20 74 68  nstruction in th
5a50: 65 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e  e virtual machin
5a60: 65 2e 20 20 49 66 20 77 65 20 66 6f 6c 6c 6f 77  e.  If we follow
5a70: 20 74 68 65 20 75 73 75 61 6c 0a 2a 2a 20 69 6e   the usual.** in
5a80: 64 65 6e 74 61 74 69 6f 6e 20 63 6f 6e 76 65 6e  dentation conven
5a90: 74 69 6f 6e 73 2c 20 65 61 63 68 20 63 61 73 65  tions, each case
5aa0: 20 73 68 6f 75 6c 64 20 62 65 20 69 6e 64 65 6e   should be inden
5ab0: 74 65 64 20 62 79 20 36 20 73 70 61 63 65 73 2e  ted by 6 spaces.
5ac0: 20 20 42 75 74 0a 2a 2a 20 74 68 61 74 20 69 73    But.** that is
5ad0: 20 61 20 6c 6f 74 20 6f 66 20 77 61 73 74 65 64   a lot of wasted
5ae0: 20 73 70 61 63 65 20 6f 6e 20 74 68 65 20 6c 65   space on the le
5af0: 66 74 20 6d 61 72 67 69 6e 2e 20 20 53 6f 20 74  ft margin.  So t
5b00: 68 65 20 63 6f 64 65 20 77 69 74 68 69 6e 0a 2a  he code within.*
5b10: 2a 20 74 68 65 20 73 77 69 74 63 68 20 73 74 61  * the switch sta
5b20: 74 65 6d 65 6e 74 20 77 69 6c 6c 20 62 72 65 61  tement will brea
5b30: 6b 20 77 69 74 68 20 63 6f 6e 76 65 6e 74 69 6f  k with conventio
5b40: 6e 20 61 6e 64 20 62 65 20 66 6c 75 73 68 2d 6c  n and be flush-l
5b50: 65 66 74 2e 20 41 6e 6f 74 68 65 72 0a 2a 2a 20  eft. Another.** 
5b60: 62 69 67 20 63 6f 6d 6d 65 6e 74 20 28 73 69 6d  big comment (sim
5b70: 69 6c 61 72 20 74 6f 20 74 68 69 73 20 6f 6e 65  ilar to this one
5b80: 29 20 77 69 6c 6c 20 6d 61 72 6b 20 74 68 65 20  ) will mark the 
5b90: 70 6f 69 6e 74 20 69 6e 20 74 68 65 20 63 6f 64  point in the cod
5ba0: 65 20 77 68 65 72 65 0a 2a 2a 20 77 65 20 74 72  e where.** we tr
5bb0: 61 6e 73 69 74 69 6f 6e 20 62 61 63 6b 20 74 6f  ansition back to
5bc0: 20 6e 6f 72 6d 61 6c 20 69 6e 64 65 6e 74 61 74   normal indentat
5bd0: 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 66  ion..**.** The f
5be0: 6f 72 6d 61 74 74 69 6e 67 20 6f 66 20 65 61 63  ormatting of eac
5bf0: 68 20 63 61 73 65 20 69 73 20 69 6d 70 6f 72 74  h case is import
5c00: 61 6e 74 2e 20 20 54 68 65 20 6d 61 6b 65 66 69  ant.  The makefi
5c10: 6c 65 20 66 6f 72 20 53 51 4c 69 74 65 0a 2a 2a  le for SQLite.**
5c20: 20 67 65 6e 65 72 61 74 65 73 20 74 77 6f 20 43   generates two C
5c30: 20 66 69 6c 65 73 20 22 6f 70 63 6f 64 65 73 2e   files "opcodes.
5c40: 68 22 20 61 6e 64 20 22 6f 70 63 6f 64 65 73 2e  h" and "opcodes.
5c50: 63 22 20 62 79 20 73 63 61 6e 6e 69 6e 67 20 74  c" by scanning t
5c60: 68 69 73 0a 2a 2a 20 66 69 6c 65 20 6c 6f 6f 6b  his.** file look
5c70: 69 6e 67 20 66 6f 72 20 6c 69 6e 65 73 20 74 68  ing for lines th
5c80: 61 74 20 62 65 67 69 6e 20 77 69 74 68 20 22 63  at begin with "c
5c90: 61 73 65 20 4f 50 5f 22 2e 20 20 54 68 65 20 6f  ase OP_".  The o
5ca0: 70 63 6f 64 65 73 2e 68 20 66 69 6c 65 73 0a 2a  pcodes.h files.*
5cb0: 2a 20 77 69 6c 6c 20 62 65 20 66 69 6c 6c 65 64  * will be filled
5cc0: 20 77 69 74 68 20 23 64 65 66 69 6e 65 73 20 74   with #defines t
5cd0: 68 61 74 20 67 69 76 65 20 75 6e 69 71 75 65 20  hat give unique 
5ce0: 69 6e 74 65 67 65 72 20 76 61 6c 75 65 73 20 74  integer values t
5cf0: 6f 20 65 61 63 68 0a 2a 2a 20 6f 70 63 6f 64 65  o each.** opcode
5d00: 20 61 6e 64 20 74 68 65 20 6f 70 63 6f 64 65 73   and the opcodes
5d10: 2e 63 20 66 69 6c 65 20 69 73 20 66 69 6c 6c 65  .c file is fille
5d20: 64 20 77 69 74 68 20 61 6e 20 61 72 72 61 79 20  d with an array 
5d30: 6f 66 20 73 74 72 69 6e 67 73 20 77 68 65 72 65  of strings where
5d40: 0a 2a 2a 20 65 61 63 68 20 73 74 72 69 6e 67 20  .** each string 
5d50: 69 73 20 74 68 65 20 73 79 6d 62 6f 6c 69 63 20  is the symbolic 
5d60: 6e 61 6d 65 20 66 6f 72 20 74 68 65 20 63 6f 72  name for the cor
5d70: 72 65 73 70 6f 6e 64 69 6e 67 20 6f 70 63 6f 64  responding opcod
5d80: 65 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 63 61  e.  If the.** ca
5d90: 73 65 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  se statement is 
5da0: 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20 63 6f  followed by a co
5db0: 6d 6d 65 6e 74 20 6f 66 20 74 68 65 20 66 6f 72  mment of the for
5dc0: 6d 20 22 2f 23 20 73 61 6d 65 20 61 73 20 2e 2e  m "/# same as ..
5dd0: 2e 20 23 2f 22 0a 2a 2a 20 74 68 61 74 20 63 6f  . #/".** that co
5de0: 6d 6d 65 6e 74 20 69 73 20 75 73 65 64 20 74 6f  mment is used to
5df0: 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20 70   determine the p
5e00: 61 72 74 69 63 75 6c 61 72 20 76 61 6c 75 65 20  articular value 
5e10: 6f 66 20 74 68 65 20 6f 70 63 6f 64 65 2e 0a 2a  of the opcode..*
5e20: 2a 0a 2a 2a 20 4f 74 68 65 72 20 6b 65 79 77 6f  *.** Other keywo
5e30: 72 64 73 20 69 6e 20 74 68 65 20 63 6f 6d 6d 65  rds in the comme
5e40: 6e 74 20 74 68 61 74 20 66 6f 6c 6c 6f 77 73 20  nt that follows 
5e50: 65 61 63 68 20 63 61 73 65 20 61 72 65 20 75 73  each case are us
5e60: 65 64 20 74 6f 0a 2a 2a 20 63 6f 6e 73 74 72 75  ed to.** constru
5e70: 63 74 20 74 68 65 20 4f 50 46 4c 47 5f 49 4e 49  ct the OPFLG_INI
5e80: 54 49 41 4c 49 5a 45 52 20 76 61 6c 75 65 20 74  TIALIZER value t
5e90: 68 61 74 20 69 6e 69 74 69 61 6c 69 7a 65 73 20  hat initializes 
5ea0: 6f 70 63 6f 64 65 50 72 6f 70 65 72 74 79 5b 5d  opcodeProperty[]
5eb0: 2e 0a 2a 2a 20 4b 65 79 77 6f 72 64 73 20 69 6e  ..** Keywords in
5ec0: 63 6c 75 64 65 3a 20 69 6e 31 2c 20 69 6e 32 2c  clude: in1, in2,
5ed0: 20 69 6e 33 2c 20 6f 75 74 32 5f 70 72 65 72 65   in3, out2_prere
5ee0: 6c 65 61 73 65 2c 20 6f 75 74 32 2c 20 6f 75 74  lease, out2, out
5ef0: 33 2e 20 20 53 65 65 0a 2a 2a 20 74 68 65 20 6d  3.  See.** the m
5f00: 6b 6f 70 63 6f 64 65 68 2e 61 77 6b 20 73 63 72  kopcodeh.awk scr
5f10: 69 70 74 20 66 6f 72 20 61 64 64 69 74 69 6f 6e  ipt for addition
5f20: 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a  al information..
5f30: 2a 2a 0a 2a 2a 20 44 6f 63 75 6d 65 6e 74 61 74  **.** Documentat
5f40: 69 6f 6e 20 61 62 6f 75 74 20 56 44 42 45 20 6f  ion about VDBE o
5f50: 70 63 6f 64 65 73 20 69 73 20 67 65 6e 65 72 61  pcodes is genera
5f60: 74 65 64 20 62 79 20 73 63 61 6e 6e 69 6e 67 20  ted by scanning 
5f70: 74 68 69 73 20 66 69 6c 65 0a 2a 2a 20 66 6f 72  this file.** for
5f80: 20 6c 69 6e 65 73 20 6f 66 20 74 68 61 74 20 63   lines of that c
5f90: 6f 6e 74 61 69 6e 20 22 4f 70 63 6f 64 65 3a 22  ontain "Opcode:"
5fa0: 2e 20 20 54 68 61 74 20 6c 69 6e 65 20 61 6e 64  .  That line and
5fb0: 20 61 6c 6c 20 73 75 62 73 65 71 75 65 6e 74 0a   all subsequent.
5fc0: 2a 2a 20 63 6f 6d 6d 65 6e 74 20 6c 69 6e 65 73  ** comment lines
5fd0: 20 61 72 65 20 75 73 65 64 20 69 6e 20 74 68 65   are used in the
5fe0: 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20 74   generation of t
5ff0: 68 65 20 6f 70 63 6f 64 65 2e 68 74 6d 6c 20 64  he opcode.html d
6000: 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 0a 2a 2a 20  ocumentation.** 
6010: 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53 55 4d 4d  file..**.** SUMM
6020: 41 52 59 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 46  ARY:.**.**     F
6030: 6f 72 6d 61 74 74 69 6e 67 20 69 73 20 69 6d 70  ormatting is imp
6040: 6f 72 74 61 6e 74 20 74 6f 20 73 63 72 69 70 74  ortant to script
6050: 73 20 74 68 61 74 20 73 63 61 6e 20 74 68 69 73  s that scan this
6060: 20 66 69 6c 65 2e 0a 2a 2a 20 20 20 20 20 44 6f   file..**     Do
6070: 20 6e 6f 74 20 64 65 76 69 61 74 65 20 66 72 6f   not deviate fro
6080: 6d 20 74 68 65 20 66 6f 72 6d 61 74 74 69 6e 67  m the formatting
6090: 20 73 74 79 6c 65 20 63 75 72 72 65 6e 74 6c 79   style currently
60a0: 20 69 6e 20 75 73 65 2e 0a 2a 2a 0a 2a 2a 2a 2a   in use..**.****
60b0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
60c0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
60d0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
60e0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
60f0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 2f 2a 20 4f  *********/../* O
6100: 70 63 6f 64 65 3a 20 20 47 6f 74 6f 20 2a 20 50  pcode:  Goto * P
6110: 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 6e  2 * * *.**.** An
6120: 20 75 6e 63 6f 6e 64 69 74 69 6f 6e 61 6c 20 6a   unconditional j
6130: 75 6d 70 20 74 6f 20 61 64 64 72 65 73 73 20 50  ump to address P
6140: 32 2e 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 69  2..** The next i
6150: 6e 73 74 72 75 63 74 69 6f 6e 20 65 78 65 63 75  nstruction execu
6160: 74 65 64 20 77 69 6c 6c 20 62 65 20 0a 2a 2a 20  ted will be .** 
6170: 74 68 65 20 6f 6e 65 20 61 74 20 69 6e 64 65 78  the one at index
6180: 20 50 32 20 66 72 6f 6d 20 74 68 65 20 62 65 67   P2 from the beg
6190: 69 6e 6e 69 6e 67 20 6f 66 0a 2a 2a 20 74 68 65  inning of.** the
61a0: 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f 0a 63 61 73   program..*/.cas
61b0: 65 20 4f 50 5f 47 6f 74 6f 3a 20 7b 20 20 20 20  e OP_Goto: {    
61c0: 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
61d0: 20 2a 2f 0a 20 20 43 48 45 43 4b 5f 46 4f 52 5f   */.  CHECK_FOR_
61e0: 49 4e 54 45 52 52 55 50 54 3b 0a 20 20 70 63 20  INTERRUPT;.  pc 
61f0: 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
6200: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
6210: 63 6f 64 65 3a 20 20 47 6f 73 75 62 20 50 31 20  code:  Gosub P1 
6220: 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57  P2 * * *.**.** W
6230: 72 69 74 65 20 74 68 65 20 63 75 72 72 65 6e 74  rite the current
6240: 20 61 64 64 72 65 73 73 20 6f 6e 74 6f 20 72 65   address onto re
6250: 67 69 73 74 65 72 20 50 31 0a 2a 2a 20 61 6e 64  gister P1.** and
6260: 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 61 64   then jump to ad
6270: 64 72 65 73 73 20 50 32 2e 0a 2a 2f 0a 63 61 73  dress P2..*/.cas
6280: 65 20 4f 50 5f 47 6f 73 75 62 3a 20 7b 20 20 20  e OP_Gosub: {   
6290: 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
62a0: 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f   */.  assert( pO
62b0: 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p1>0 && pOp->
62c0: 70 31 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20  p1<=p->nMem );. 
62d0: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
62e0: 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
62f0: 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
6300: 20 4d 45 4d 5f 44 79 6e 29 3d 3d 30 20 29 3b 0a   MEM_Dyn)==0 );.
6310: 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
6320: 67 65 28 70 2c 20 70 49 6e 31 29 3b 0a 20 20 70  ge(p, pIn1);.  p
6330: 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  In1->flags = MEM
6340: 5f 49 6e 74 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e  _Int;.  pIn1->u.
6350: 69 20 3d 20 70 63 3b 0a 20 20 52 45 47 49 53 54  i = pc;.  REGIST
6360: 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31  ER_TRACE(pOp->p1
6370: 2c 20 70 49 6e 31 29 3b 0a 20 20 70 63 20 3d 20  , pIn1);.  pc = 
6380: 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 62  pOp->p2 - 1;.  b
6390: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
63a0: 64 65 3a 20 20 52 65 74 75 72 6e 20 50 31 20 2a  de:  Return P1 *
63b0: 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d   * * *.**.** Jum
63c0: 70 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e  p to the next in
63d0: 73 74 72 75 63 74 69 6f 6e 20 61 66 74 65 72 20  struction after 
63e0: 74 68 65 20 61 64 64 72 65 73 73 20 69 6e 20 72  the address in r
63f0: 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2f 0a 63  egister P1..*/.c
6400: 61 73 65 20 4f 50 5f 52 65 74 75 72 6e 3a 20 7b  ase OP_Return: {
6410: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e             /* in
6420: 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  1 */.  pIn1 = &a
6430: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
6440: 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c  assert( pIn1->fl
6450: 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b  ags & MEM_Int );
6460: 0a 20 20 70 63 20 3d 20 28 69 6e 74 29 70 49 6e  .  pc = (int)pIn
6470: 31 2d 3e 75 2e 69 3b 0a 20 20 62 72 65 61 6b 3b  1->u.i;.  break;
6480: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20  .}../* Opcode:  
6490: 59 69 65 6c 64 20 50 31 20 2a 20 2a 20 2a 20 2a  Yield P1 * * * *
64a0: 0a 2a 2a 0a 2a 2a 20 53 77 61 70 20 74 68 65 20  .**.** Swap the 
64b0: 70 72 6f 67 72 61 6d 20 63 6f 75 6e 74 65 72 20  program counter 
64c0: 77 69 74 68 20 74 68 65 20 76 61 6c 75 65 20 69  with the value i
64d0: 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a  n register P1..*
64e0: 2f 0a 63 61 73 65 20 4f 50 5f 59 69 65 6c 64 3a  /.case OP_Yield:
64f0: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
6500: 20 69 6e 31 20 2a 2f 0a 20 20 69 6e 74 20 70 63   in1 */.  int pc
6510: 44 65 73 74 3b 0a 20 20 70 49 6e 31 20 3d 20 26  Dest;.  pIn1 = &
6520: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
6530: 20 61 73 73 65 72 74 28 20 28 70 49 6e 31 2d 3e   assert( (pIn1->
6540: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 44 79 6e 29  flags & MEM_Dyn)
6550: 3d 3d 30 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66  ==0 );.  pIn1->f
6560: 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a  lags = MEM_Int;.
6570: 20 20 70 63 44 65 73 74 20 3d 20 28 69 6e 74 29    pcDest = (int)
6580: 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20 70 49 6e  pIn1->u.i;.  pIn
6590: 31 2d 3e 75 2e 69 20 3d 20 70 63 3b 0a 20 20 52  1->u.i = pc;.  R
65a0: 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
65b0: 70 2d 3e 70 31 2c 20 70 49 6e 31 29 3b 0a 20 20  p->p1, pIn1);.  
65c0: 70 63 20 3d 20 70 63 44 65 73 74 3b 0a 20 20 62  pc = pcDest;.  b
65d0: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
65e0: 64 65 3a 20 20 48 61 6c 74 49 66 4e 75 6c 6c 20  de:  HaltIfNull 
65f0: 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a   P1 P2 P3 P4 *.*
6600: 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 68 65 20 76  *.** Check the v
6610: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
6620: 20 50 33 2e 20 20 49 66 20 69 74 20 69 73 20 4e   P3.  If it is N
6630: 55 4c 4c 20 74 68 65 6e 20 48 61 6c 74 20 75 73  ULL then Halt us
6640: 69 6e 67 0a 2a 2a 20 70 61 72 61 6d 65 74 65 72  ing.** parameter
6650: 20 50 31 2c 20 50 32 2c 20 61 6e 64 20 50 34 20   P1, P2, and P4 
6660: 61 73 20 69 66 20 74 68 69 73 20 77 65 72 65 20  as if this were 
6670: 61 20 48 61 6c 74 20 69 6e 73 74 72 75 63 74 69  a Halt instructi
6680: 6f 6e 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 76  on.  If the.** v
6690: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
66a0: 20 50 33 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c   P3 is not NULL,
66b0: 20 74 68 65 6e 20 74 68 69 73 20 72 6f 75 74 69   then this routi
66c0: 6e 65 20 69 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a  ne is a no-op..*
66d0: 2f 0a 63 61 73 65 20 4f 50 5f 48 61 6c 74 49 66  /.case OP_HaltIf
66e0: 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20 2f 2a 20  Null: {      /* 
66f0: 69 6e 33 20 2a 2f 0a 20 20 70 49 6e 33 20 3d 20  in3 */.  pIn3 = 
6700: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
6710: 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61    if( (pIn3->fla
6720: 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d  gs & MEM_Null)==
6730: 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 2f 2a 20  0 ) break;.  /* 
6740: 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e 74  Fall through int
6750: 6f 20 4f 50 5f 48 61 6c 74 20 2a 2f 0a 7d 0a 0a  o OP_Halt */.}..
6760: 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 48 61 6c 74  /* Opcode:  Halt
6770: 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a   P1 P2 * P4 *.**
6780: 0a 2a 2a 20 45 78 69 74 20 69 6d 6d 65 64 69 61  .** Exit immedia
6790: 74 65 6c 79 2e 20 20 41 6c 6c 20 6f 70 65 6e 20  tely.  All open 
67a0: 63 75 72 73 6f 72 73 2c 20 65 74 63 20 61 72 65  cursors, etc are
67b0: 20 63 6c 6f 73 65 64 0a 2a 2a 20 61 75 74 6f 6d   closed.** autom
67c0: 61 74 69 63 61 6c 6c 79 2e 0a 2a 2a 0a 2a 2a 20  atically..**.** 
67d0: 50 31 20 69 73 20 74 68 65 20 72 65 73 75 6c 74  P1 is the result
67e0: 20 63 6f 64 65 20 72 65 74 75 72 6e 65 64 20 62   code returned b
67f0: 79 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28 29  y sqlite3_exec()
6800: 2c 20 73 71 6c 69 74 65 33 5f 72 65 73 65 74 28  , sqlite3_reset(
6810: 29 2c 0a 2a 2a 20 6f 72 20 73 71 6c 69 74 65 33  ),.** or sqlite3
6820: 5f 66 69 6e 61 6c 69 7a 65 28 29 2e 20 20 46 6f  _finalize().  Fo
6830: 72 20 61 20 6e 6f 72 6d 61 6c 20 68 61 6c 74 2c  r a normal halt,
6840: 20 74 68 69 73 20 73 68 6f 75 6c 64 20 62 65 20   this should be 
6850: 53 51 4c 49 54 45 5f 4f 4b 20 28 30 29 2e 0a 2a  SQLITE_OK (0)..*
6860: 2a 20 46 6f 72 20 65 72 72 6f 72 73 2c 20 69 74  * For errors, it
6870: 20 63 61 6e 20 62 65 20 73 6f 6d 65 20 6f 74 68   can be some oth
6880: 65 72 20 76 61 6c 75 65 2e 20 20 49 66 20 50 31  er value.  If P1
6890: 21 3d 30 20 74 68 65 6e 20 50 32 20 77 69 6c 6c  !=0 then P2 will
68a0: 20 64 65 74 65 72 6d 69 6e 65 0a 2a 2a 20 77 68   determine.** wh
68b0: 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 6f 20  ether or not to 
68c0: 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20 63 75 72  rollback the cur
68d0: 72 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  rent transaction
68e0: 2e 20 20 44 6f 20 6e 6f 74 20 72 6f 6c 6c 62 61  .  Do not rollba
68f0: 63 6b 0a 2a 2a 20 69 66 20 50 32 3d 3d 4f 45 5f  ck.** if P2==OE_
6900: 46 61 69 6c 2e 20 44 6f 20 74 68 65 20 72 6f 6c  Fail. Do the rol
6910: 6c 62 61 63 6b 20 69 66 20 50 32 3d 3d 4f 45 5f  lback if P2==OE_
6920: 52 6f 6c 6c 62 61 63 6b 2e 20 20 49 66 20 50 32  Rollback.  If P2
6930: 3d 3d 4f 45 5f 41 62 6f 72 74 2c 0a 2a 2a 20 74  ==OE_Abort,.** t
6940: 68 65 6e 20 62 61 63 6b 20 6f 75 74 20 61 6c 6c  hen back out all
6950: 20 63 68 61 6e 67 65 73 20 74 68 61 74 20 68 61   changes that ha
6960: 76 65 20 6f 63 63 75 72 72 65 64 20 64 75 72 69  ve occurred duri
6970: 6e 67 20 74 68 69 73 20 65 78 65 63 75 74 69 6f  ng this executio
6980: 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 56 44 42 45  n of the.** VDBE
6990: 2c 20 62 75 74 20 64 6f 20 6e 6f 74 20 72 6f 6c  , but do not rol
69a0: 6c 62 61 63 6b 20 74 68 65 20 74 72 61 6e 73 61  lback the transa
69b0: 63 74 69 6f 6e 2e 20 0a 2a 2a 0a 2a 2a 20 49 66  ction. .**.** If
69c0: 20 50 34 20 69 73 20 6e 6f 74 20 6e 75 6c 6c 20   P4 is not null 
69d0: 74 68 65 6e 20 69 74 20 69 73 20 61 6e 20 65 72  then it is an er
69e0: 72 6f 72 20 6d 65 73 73 61 67 65 20 73 74 72 69  ror message stri
69f0: 6e 67 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20  ng..**.** There 
6a00: 69 73 20 61 6e 20 69 6d 70 6c 69 65 64 20 22 48  is an implied "H
6a10: 61 6c 74 20 30 20 30 20 30 22 20 69 6e 73 74 72  alt 0 0 0" instr
6a20: 75 63 74 69 6f 6e 20 69 6e 73 65 72 74 65 64 20  uction inserted 
6a30: 61 74 20 74 68 65 20 76 65 72 79 20 65 6e 64 20  at the very end 
6a40: 6f 66 0a 2a 2a 20 65 76 65 72 79 20 70 72 6f 67  of.** every prog
6a50: 72 61 6d 2e 20 20 53 6f 20 61 20 6a 75 6d 70 20  ram.  So a jump 
6a60: 70 61 73 74 20 74 68 65 20 6c 61 73 74 20 69 6e  past the last in
6a70: 73 74 72 75 63 74 69 6f 6e 20 6f 66 20 74 68 65  struction of the
6a80: 20 70 72 6f 67 72 61 6d 0a 2a 2a 20 69 73 20 74   program.** is t
6a90: 68 65 20 73 61 6d 65 20 61 73 20 65 78 65 63 75  he same as execu
6aa0: 74 69 6e 67 20 48 61 6c 74 2e 0a 2a 2f 0a 63 61  ting Halt..*/.ca
6ab0: 73 65 20 4f 50 5f 48 61 6c 74 3a 20 7b 0a 20 20  se OP_Halt: {.  
6ac0: 69 66 28 20 70 4f 70 2d 3e 70 31 3d 3d 53 51 4c  if( pOp->p1==SQL
6ad0: 49 54 45 5f 4f 4b 20 26 26 20 70 2d 3e 70 46 72  ITE_OK && p->pFr
6ae0: 61 6d 65 20 29 7b 0a 20 20 20 20 2f 2a 20 48 61  ame ){.    /* Ha
6af0: 6c 74 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72  lt the sub-progr
6b00: 61 6d 2e 20 52 65 74 75 72 6e 20 63 6f 6e 74 72  am. Return contr
6b10: 6f 6c 20 74 6f 20 74 68 65 20 70 61 72 65 6e 74  ol to the parent
6b20: 20 66 72 61 6d 65 2e 20 2a 2f 0a 20 20 20 20 56   frame. */.    V
6b30: 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65  dbeFrame *pFrame
6b40: 20 3d 20 70 2d 3e 70 46 72 61 6d 65 3b 0a 20 20   = p->pFrame;.  
6b50: 20 20 70 2d 3e 70 46 72 61 6d 65 20 3d 20 70 46    p->pFrame = pF
6b60: 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 3b 0a 20  rame->pParent;. 
6b70: 20 20 20 70 2d 3e 6e 46 72 61 6d 65 2d 2d 3b 0a     p->nFrame--;.
6b80: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
6b90: 65 74 43 68 61 6e 67 65 73 28 64 62 2c 20 70 2d  etChanges(db, p-
6ba0: 3e 6e 43 68 61 6e 67 65 29 3b 0a 20 20 20 20 70  >nChange);.    p
6bb0: 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 46  c = sqlite3VdbeF
6bc0: 72 61 6d 65 52 65 73 74 6f 72 65 28 70 46 72 61  rameRestore(pFra
6bd0: 6d 65 29 3b 0a 20 20 20 20 6c 61 73 74 52 6f 77  me);.    lastRow
6be0: 69 64 20 3d 20 64 62 2d 3e 6c 61 73 74 52 6f 77  id = db->lastRow
6bf0: 69 64 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d  id;.    if( pOp-
6c00: 3e 70 32 3d 3d 4f 45 5f 49 67 6e 6f 72 65 20 29  >p2==OE_Ignore )
6c10: 7b 0a 20 20 20 20 20 20 2f 2a 20 49 6e 73 74 72  {.      /* Instr
6c20: 75 63 74 69 6f 6e 20 70 63 20 69 73 20 74 68 65  uction pc is the
6c30: 20 4f 50 5f 50 72 6f 67 72 61 6d 20 74 68 61 74   OP_Program that
6c40: 20 69 6e 76 6f 6b 65 64 20 74 68 65 20 73 75 62   invoked the sub
6c50: 2d 70 72 6f 67 72 61 6d 20 0a 20 20 20 20 20 20  -program .      
6c60: 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20 62 65 69  ** currently bei
6c70: 6e 67 20 68 61 6c 74 65 64 2e 20 49 66 20 74 68  ng halted. If th
6c80: 65 20 70 32 20 69 6e 73 74 72 75 63 74 69 6f 6e  e p2 instruction
6c90: 20 6f 66 20 74 68 69 73 20 4f 50 5f 48 61 6c 74   of this OP_Halt
6ca0: 0a 20 20 20 20 20 20 2a 2a 20 69 6e 73 74 72 75  .      ** instru
6cb0: 63 74 69 6f 6e 20 69 73 20 73 65 74 20 74 6f 20  ction is set to 
6cc0: 4f 45 5f 49 67 6e 6f 72 65 2c 20 74 68 65 6e 20  OE_Ignore, then 
6cd0: 74 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 20  the sub-program 
6ce0: 69 73 20 74 68 72 6f 77 69 6e 67 0a 20 20 20 20  is throwing.    
6cf0: 20 20 2a 2a 20 61 6e 20 49 47 4e 4f 52 45 20 65    ** an IGNORE e
6d00: 78 63 65 70 74 69 6f 6e 2e 20 49 6e 20 74 68 69  xception. In thi
6d10: 73 20 63 61 73 65 20 6a 75 6d 70 20 74 6f 20 74  s case jump to t
6d20: 68 65 20 61 64 64 72 65 73 73 20 73 70 65 63 69  he address speci
6d30: 66 69 65 64 0a 20 20 20 20 20 20 2a 2a 20 61 73  fied.      ** as
6d40: 20 74 68 65 20 70 32 20 6f 66 20 74 68 65 20 63   the p2 of the c
6d50: 61 6c 6c 69 6e 67 20 4f 50 5f 50 72 6f 67 72 61  alling OP_Progra
6d60: 6d 2e 20 20 2a 2f 0a 20 20 20 20 20 20 70 63 20  m.  */.      pc 
6d70: 3d 20 70 2d 3e 61 4f 70 5b 70 63 5d 2e 70 32 2d  = p->aOp[pc].p2-
6d80: 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 61 4f 70  1;.    }.    aOp
6d90: 20 3d 20 70 2d 3e 61 4f 70 3b 0a 20 20 20 20 61   = p->aOp;.    a
6da0: 4d 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b 0a 20  Mem = p->aMem;. 
6db0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20     break;.  }.. 
6dc0: 20 70 2d 3e 72 63 20 3d 20 70 4f 70 2d 3e 70 31   p->rc = pOp->p1
6dd0: 3b 0a 20 20 70 2d 3e 65 72 72 6f 72 41 63 74 69  ;.  p->errorActi
6de0: 6f 6e 20 3d 20 28 75 38 29 70 4f 70 2d 3e 70 32  on = (u8)pOp->p2
6df0: 3b 0a 20 20 70 2d 3e 70 63 20 3d 20 70 63 3b 0a  ;.  p->pc = pc;.
6e00: 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 2e 7a 20    if( pOp->p4.z 
6e10: 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ){.    assert( p
6e20: 2d 3e 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ->rc!=SQLITE_OK 
6e30: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65  );.    sqlite3Se
6e40: 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72  tString(&p->zErr
6e50: 4d 73 67 2c 20 64 62 2c 20 22 25 73 22 2c 20 70  Msg, db, "%s", p
6e60: 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 74  Op->p4.z);.    t
6e70: 65 73 74 63 61 73 65 28 20 73 71 6c 69 74 65 33  estcase( sqlite3
6e80: 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 78 4c 6f  GlobalConfig.xLo
6e90: 67 21 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c 69  g!=0 );.    sqli
6ea0: 74 65 33 5f 6c 6f 67 28 70 4f 70 2d 3e 70 31 2c  te3_log(pOp->p1,
6eb0: 20 22 61 62 6f 72 74 20 61 74 20 25 64 20 69 6e   "abort at %d in
6ec0: 20 5b 25 73 5d 3a 20 25 73 22 2c 20 70 63 2c 20   [%s]: %s", pc, 
6ed0: 70 2d 3e 7a 53 71 6c 2c 20 70 4f 70 2d 3e 70 34  p->zSql, pOp->p4
6ee0: 2e 7a 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  .z);.  }else if(
6ef0: 20 70 2d 3e 72 63 20 29 7b 0a 20 20 20 20 74 65   p->rc ){.    te
6f00: 73 74 63 61 73 65 28 20 73 71 6c 69 74 65 33 47  stcase( sqlite3G
6f10: 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 78 4c 6f 67  lobalConfig.xLog
6f20: 21 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c 69 74  !=0 );.    sqlit
6f30: 65 33 5f 6c 6f 67 28 70 4f 70 2d 3e 70 31 2c 20  e3_log(pOp->p1, 
6f40: 22 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c  "constraint fail
6f50: 65 64 20 61 74 20 25 64 20 69 6e 20 5b 25 73 5d  ed at %d in [%s]
6f60: 22 2c 20 70 63 2c 20 70 2d 3e 7a 53 71 6c 29 3b  ", pc, p->zSql);
6f70: 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69  .  }.  rc = sqli
6f80: 74 65 33 56 64 62 65 48 61 6c 74 28 70 29 3b 0a  te3VdbeHalt(p);.
6f90: 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51    assert( rc==SQ
6fa0: 4c 49 54 45 5f 42 55 53 59 20 7c 7c 20 72 63 3d  LITE_BUSY || rc=
6fb0: 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 72 63  =SQLITE_OK || rc
6fc0: 3d 3d 53 51 4c 49 54 45 5f 45 52 52 4f 52 20 29  ==SQLITE_ERROR )
6fd0: 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49  ;.  if( rc==SQLI
6fe0: 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 70  TE_BUSY ){.    p
6ff0: 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53 51 4c 49  ->rc = rc = SQLI
7000: 54 45 5f 42 55 53 59 3b 0a 20 20 7d 65 6c 73 65  TE_BUSY;.  }else
7010: 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 72 63  {.    assert( rc
7020: 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 70  ==SQLITE_OK || p
7030: 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 43 4f 4e  ->rc==SQLITE_CON
7040: 53 54 52 41 49 4e 54 20 29 3b 0a 20 20 20 20 61  STRAINT );.    a
7050: 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54  ssert( rc==SQLIT
7060: 45 5f 4f 4b 20 7c 7c 20 64 62 2d 3e 6e 44 65 66  E_OK || db->nDef
7070: 65 72 72 65 64 43 6f 6e 73 3e 30 20 29 3b 0a 20  erredCons>0 );. 
7080: 20 20 20 72 63 20 3d 20 70 2d 3e 72 63 20 3f 20     rc = p->rc ? 
7090: 53 51 4c 49 54 45 5f 45 52 52 4f 52 20 3a 20 53  SQLITE_ERROR : S
70a0: 51 4c 49 54 45 5f 44 4f 4e 45 3b 0a 20 20 7d 0a  QLITE_DONE;.  }.
70b0: 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75    goto vdbe_retu
70c0: 72 6e 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  rn;.}../* Opcode
70d0: 3a 20 49 6e 74 65 67 65 72 20 50 31 20 50 32 20  : Integer P1 P2 
70e0: 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20  * * *.**.** The 
70f0: 33 32 2d 62 69 74 20 69 6e 74 65 67 65 72 20 76  32-bit integer v
7100: 61 6c 75 65 20 50 31 20 69 73 20 77 72 69 74 74  alue P1 is writt
7110: 65 6e 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  en into register
7120: 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P2..*/.case OP_
7130: 49 6e 74 65 67 65 72 3a 20 7b 20 20 20 20 20 20  Integer: {      
7140: 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65     /* out2-prere
7150: 6c 65 61 73 65 20 2a 2f 0a 20 20 70 4f 75 74 2d  lease */.  pOut-
7160: 3e 75 2e 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a  >u.i = pOp->p1;.
7170: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
7180: 70 63 6f 64 65 3a 20 49 6e 74 36 34 20 2a 20 50  pcode: Int64 * P
7190: 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50  2 * P4 *.**.** P
71a0: 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  4 is a pointer t
71b0: 6f 20 61 20 36 34 2d 62 69 74 20 69 6e 74 65 67  o a 64-bit integ
71c0: 65 72 20 76 61 6c 75 65 2e 0a 2a 2a 20 57 72 69  er value..** Wri
71d0: 74 65 20 74 68 61 74 20 76 61 6c 75 65 20 69 6e  te that value in
71e0: 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  to register P2..
71f0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74 36 34  */.case OP_Int64
7200: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  : {           /*
7210: 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65   out2-prerelease
7220: 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f   */.  assert( pO
7230: 70 2d 3e 70 34 2e 70 49 36 34 21 3d 30 20 29 3b  p->p4.pI64!=0 );
7240: 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 2a  .  pOut->u.i = *
7250: 70 4f 70 2d 3e 70 34 2e 70 49 36 34 3b 0a 20 20  pOp->p4.pI64;.  
7260: 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65  break;.}..#ifnde
7270: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c  f SQLITE_OMIT_FL
7280: 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 2f 2a 20  OATING_POINT./* 
7290: 4f 70 63 6f 64 65 3a 20 52 65 61 6c 20 2a 20 50  Opcode: Real * P
72a0: 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50  2 * P4 *.**.** P
72b0: 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  4 is a pointer t
72c0: 6f 20 61 20 36 34 2d 62 69 74 20 66 6c 6f 61 74  o a 64-bit float
72d0: 69 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75 65 2e  ing point value.
72e0: 0a 2a 2a 20 57 72 69 74 65 20 74 68 61 74 20 76  .** Write that v
72f0: 61 6c 75 65 20 69 6e 74 6f 20 72 65 67 69 73 74  alue into regist
7300: 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f  er P2..*/.case O
7310: 50 5f 52 65 61 6c 3a 20 7b 20 20 20 20 20 20 20  P_Real: {       
7320: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
7330: 54 4b 5f 46 4c 4f 41 54 2c 20 6f 75 74 32 2d 70  TK_FLOAT, out2-p
7340: 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 70  rerelease */.  p
7350: 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
7360: 5f 52 65 61 6c 3b 0a 20 20 61 73 73 65 72 74 28  _Real;.  assert(
7370: 20 21 73 71 6c 69 74 65 33 49 73 4e 61 4e 28 2a   !sqlite3IsNaN(*
7380: 70 4f 70 2d 3e 70 34 2e 70 52 65 61 6c 29 20 29  pOp->p4.pReal) )
7390: 3b 0a 20 20 70 4f 75 74 2d 3e 72 20 3d 20 2a 70  ;.  pOut->r = *p
73a0: 4f 70 2d 3e 70 34 2e 70 52 65 61 6c 3b 0a 20 20  Op->p4.pReal;.  
73b0: 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a  break;.}.#endif.
73c0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 74 72 69  ./* Opcode: Stri
73d0: 6e 67 38 20 2a 20 50 32 20 2a 20 50 34 20 2a 0a  ng8 * P2 * P4 *.
73e0: 2a 2a 0a 2a 2a 20 50 34 20 70 6f 69 6e 74 73 20  **.** P4 points 
73f0: 74 6f 20 61 20 6e 75 6c 20 74 65 72 6d 69 6e 61  to a nul termina
7400: 74 65 64 20 55 54 46 2d 38 20 73 74 72 69 6e 67  ted UTF-8 string
7410: 2e 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73  . This opcode is
7420: 20 74 72 61 6e 73 66 6f 72 6d 65 64 20 0a 2a 2a   transformed .**
7430: 20 69 6e 74 6f 20 61 6e 20 4f 50 5f 53 74 72 69   into an OP_Stri
7440: 6e 67 20 62 65 66 6f 72 65 20 69 74 20 69 73 20  ng before it is 
7450: 65 78 65 63 75 74 65 64 20 66 6f 72 20 74 68 65  executed for the
7460: 20 66 69 72 73 74 20 74 69 6d 65 2e 0a 2a 2f 0a   first time..*/.
7470: 63 61 73 65 20 4f 50 5f 53 74 72 69 6e 67 38 3a  case OP_String8:
7480: 20 7b 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61   {         /* sa
7490: 6d 65 20 61 73 20 54 4b 5f 53 54 52 49 4e 47 2c  me as TK_STRING,
74a0: 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65   out2-prerelease
74b0: 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f   */.  assert( pO
74c0: 70 2d 3e 70 34 2e 7a 21 3d 30 20 29 3b 0a 20 20  p->p4.z!=0 );.  
74d0: 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 3d 20 4f 50  pOp->opcode = OP
74e0: 5f 53 74 72 69 6e 67 3b 0a 20 20 70 4f 70 2d 3e  _String;.  pOp->
74f0: 70 31 20 3d 20 73 71 6c 69 74 65 33 53 74 72 6c  p1 = sqlite3Strl
7500: 65 6e 33 30 28 70 4f 70 2d 3e 70 34 2e 7a 29 3b  en30(pOp->p4.z);
7510: 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
7520: 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20 69 66  _OMIT_UTF16.  if
7530: 28 20 65 6e 63 6f 64 69 6e 67 21 3d 53 51 4c 49  ( encoding!=SQLI
7540: 54 45 5f 55 54 46 38 20 29 7b 0a 20 20 20 20 72  TE_UTF8 ){.    r
7550: 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d  c = sqlite3VdbeM
7560: 65 6d 53 65 74 53 74 72 28 70 4f 75 74 2c 20 70  emSetStr(pOut, p
7570: 4f 70 2d 3e 70 34 2e 7a 2c 20 2d 31 2c 20 53 51  Op->p4.z, -1, SQ
7580: 4c 49 54 45 5f 55 54 46 38 2c 20 53 51 4c 49 54  LITE_UTF8, SQLIT
7590: 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 69  E_STATIC);.    i
75a0: 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 54 4f  f( rc==SQLITE_TO
75b0: 4f 42 49 47 20 29 20 67 6f 74 6f 20 74 6f 6f 5f  OBIG ) goto too_
75c0: 62 69 67 3b 0a 20 20 20 20 69 66 28 20 53 51 4c  big;.    if( SQL
75d0: 49 54 45 5f 4f 4b 21 3d 73 71 6c 69 74 65 33 56  ITE_OK!=sqlite3V
75e0: 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e  dbeChangeEncodin
75f0: 67 28 70 4f 75 74 2c 20 65 6e 63 6f 64 69 6e 67  g(pOut, encoding
7600: 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  ) ) goto no_mem;
7610: 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 75  .    assert( pOu
7620: 74 2d 3e 7a 4d 61 6c 6c 6f 63 3d 3d 70 4f 75 74  t->zMalloc==pOut
7630: 2d 3e 7a 20 29 3b 0a 20 20 20 20 61 73 73 65 72  ->z );.    asser
7640: 74 28 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 26  t( pOut->flags &
7650: 20 4d 45 4d 5f 44 79 6e 20 29 3b 0a 20 20 20 20   MEM_Dyn );.    
7660: 70 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d 20  pOut->zMalloc = 
7670: 30 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61  0;.    pOut->fla
7680: 67 73 20 7c 3d 20 4d 45 4d 5f 53 74 61 74 69 63  gs |= MEM_Static
7690: 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67  ;.    pOut->flag
76a0: 73 20 26 3d 20 7e 4d 45 4d 5f 44 79 6e 3b 0a 20  s &= ~MEM_Dyn;. 
76b0: 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79     if( pOp->p4ty
76c0: 70 65 3d 3d 50 34 5f 44 59 4e 41 4d 49 43 20 29  pe==P4_DYNAMIC )
76d0: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 44  {.      sqlite3D
76e0: 62 46 72 65 65 28 64 62 2c 20 70 4f 70 2d 3e 70  bFree(db, pOp->p
76f0: 34 2e 7a 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  4.z);.    }.    
7700: 70 4f 70 2d 3e 70 34 74 79 70 65 20 3d 20 50 34  pOp->p4type = P4
7710: 5f 44 59 4e 41 4d 49 43 3b 0a 20 20 20 20 70 4f  _DYNAMIC;.    pO
7720: 70 2d 3e 70 34 2e 7a 20 3d 20 70 4f 75 74 2d 3e  p->p4.z = pOut->
7730: 7a 3b 0a 20 20 20 20 70 4f 70 2d 3e 70 31 20 3d  z;.    pOp->p1 =
7740: 20 70 4f 75 74 2d 3e 6e 3b 0a 20 20 7d 0a 23 65   pOut->n;.  }.#e
7750: 6e 64 69 66 0a 20 20 69 66 28 20 70 4f 70 2d 3e  ndif.  if( pOp->
7760: 70 31 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51  p1>db->aLimit[SQ
7770: 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54  LITE_LIMIT_LENGT
7780: 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74  H] ){.    goto t
7790: 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 2f 2a  oo_big;.  }.  /*
77a0: 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f   Fall through to
77b0: 20 74 68 65 20 6e 65 78 74 20 63 61 73 65 2c 20   the next case, 
77c0: 4f 50 5f 53 74 72 69 6e 67 20 2a 2f 0a 7d 0a 20  OP_String */.}. 
77d0: 20 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 74 72   ./* Opcode: Str
77e0: 69 6e 67 20 50 31 20 50 32 20 2a 20 50 34 20 2a  ing P1 P2 * P4 *
77f0: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 74 72 69 6e  .**.** The strin
7800: 67 20 76 61 6c 75 65 20 50 34 20 6f 66 20 6c 65  g value P4 of le
7810: 6e 67 74 68 20 50 31 20 28 62 79 74 65 73 29 20  ngth P1 (bytes) 
7820: 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67  is stored in reg
7830: 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73  ister P2..*/.cas
7840: 65 20 4f 50 5f 53 74 72 69 6e 67 3a 20 7b 20 20  e OP_String: {  
7850: 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d          /* out2-
7860: 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20  prerelease */.  
7870: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e  assert( pOp->p4.
7880: 7a 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74 2d 3e  z!=0 );.  pOut->
7890: 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 53 74 72 7c  flags = MEM_Str|
78a0: 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 54  MEM_Static|MEM_T
78b0: 65 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e 7a 20 3d  erm;.  pOut->z =
78c0: 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 70 4f   pOp->p4.z;.  pO
78d0: 75 74 2d 3e 6e 20 3d 20 70 4f 70 2d 3e 70 31 3b  ut->n = pOp->p1;
78e0: 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 65  .  pOut->enc = e
78f0: 6e 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44 41 54  ncoding;.  UPDAT
7900: 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70  E_MAX_BLOBSIZE(p
7910: 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Out);.  break;.}
7920: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 75 6c  ../* Opcode: Nul
7930: 6c 20 2a 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a  l * P2 P3 * *.**
7940: 0a 2a 2a 20 57 72 69 74 65 20 61 20 4e 55 4c 4c  .** Write a NULL
7950: 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 73 20   into registers 
7960: 50 32 2e 20 20 49 66 20 50 33 20 67 72 65 61 74  P2.  If P3 great
7970: 65 72 20 74 68 61 6e 20 50 32 2c 20 74 68 65 6e  er than P2, then
7980: 20 61 6c 73 6f 20 77 72 69 74 65 0a 2a 2a 20 4e   also write.** N
7990: 55 4c 4c 20 69 6e 74 6f 20 72 65 67 69 73 74 65  ULL into registe
79a0: 72 20 50 33 20 61 6e 64 20 65 76 65 72 20 72 65  r P3 and ever re
79b0: 67 69 73 74 65 72 20 69 6e 20 62 65 74 77 65 65  gister in betwee
79c0: 6e 20 50 32 20 61 6e 64 20 50 33 2e 20 20 49 66  n P2 and P3.  If
79d0: 20 50 33 0a 2a 2a 20 69 73 20 6c 65 73 73 20 74   P3.** is less t
79e0: 68 61 6e 20 50 32 20 28 74 79 70 69 63 61 6c 6c  han P2 (typicall
79f0: 79 20 50 33 20 69 73 20 7a 65 72 6f 29 20 74 68  y P3 is zero) th
7a00: 65 6e 20 6f 6e 6c 79 20 72 65 67 69 73 74 65 72  en only register
7a10: 20 50 32 20 69 73 0a 2a 2a 20 73 65 74 20 74 6f   P2 is.** set to
7a20: 20 4e 55 4c 4c 0a 2a 2f 0a 63 61 73 65 20 4f 50   NULL.*/.case OP
7a30: 5f 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20 20 20  _Null: {        
7a40: 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65     /* out2-prere
7a50: 6c 65 61 73 65 20 2a 2f 0a 20 20 69 6e 74 20 63  lease */.  int c
7a60: 6e 74 3b 0a 20 20 63 6e 74 20 3d 20 70 4f 70 2d  nt;.  cnt = pOp-
7a70: 3e 70 33 2d 70 4f 70 2d 3e 70 32 3b 0a 20 20 61  >p3-pOp->p2;.  a
7a80: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d  ssert( pOp->p3<=
7a90: 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 4f 75  p->nMem );.  pOu
7aa0: 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e  t->flags = MEM_N
7ab0: 75 6c 6c 3b 0a 20 20 77 68 69 6c 65 28 20 63 6e  ull;.  while( cn
7ac0: 74 3e 30 20 29 7b 0a 20 20 20 20 70 4f 75 74 2b  t>0 ){.    pOut+
7ad0: 2b 3b 0a 20 20 20 20 6d 65 6d 41 62 6f 75 74 54  +;.    memAboutT
7ae0: 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29  oChange(p, pOut)
7af0: 3b 0a 20 20 20 20 4d 65 6d 52 65 6c 65 61 73 65  ;.    MemRelease
7b00: 45 78 74 28 70 4f 75 74 29 3b 0a 20 20 20 20 70  Ext(pOut);.    p
7b10: 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
7b20: 5f 4e 75 6c 6c 3b 0a 20 20 20 20 63 6e 74 2d 2d  _Null;.    cnt--
7b30: 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
7b40: 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 6c  .../* Opcode: Bl
7b50: 6f 62 20 50 31 20 50 32 20 2a 20 50 34 0a 2a 2a  ob P1 P2 * P4.**
7b60: 0a 2a 2a 20 50 34 20 70 6f 69 6e 74 73 20 74 6f  .** P4 points to
7b70: 20 61 20 62 6c 6f 62 20 6f 66 20 64 61 74 61 20   a blob of data 
7b80: 50 31 20 62 79 74 65 73 20 6c 6f 6e 67 2e 20 20  P1 bytes long.  
7b90: 53 74 6f 72 65 20 74 68 69 73 0a 2a 2a 20 62 6c  Store this.** bl
7ba0: 6f 62 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ob in register P
7bb0: 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 6c  2..*/.case OP_Bl
7bc0: 6f 62 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ob: {           
7bd0: 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65       /* out2-pre
7be0: 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 61 73 73  release */.  ass
7bf0: 65 72 74 28 20 70 4f 70 2d 3e 70 31 20 3c 3d 20  ert( pOp->p1 <= 
7c00: 53 51 4c 49 54 45 5f 4d 41 58 5f 4c 45 4e 47 54  SQLITE_MAX_LENGT
7c10: 48 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  H );.  sqlite3Vd
7c20: 62 65 4d 65 6d 53 65 74 53 74 72 28 70 4f 75 74  beMemSetStr(pOut
7c30: 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 70 4f 70  , pOp->p4.z, pOp
7c40: 2d 3e 70 31 2c 20 30 2c 20 30 29 3b 0a 20 20 70  ->p1, 0, 0);.  p
7c50: 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64  Out->enc = encod
7c60: 69 6e 67 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41  ing;.  UPDATE_MA
7c70: 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29  X_BLOBSIZE(pOut)
7c80: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
7c90: 20 4f 70 63 6f 64 65 3a 20 56 61 72 69 61 62 6c   Opcode: Variabl
7ca0: 65 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a  e P1 P2 * P4 *.*
7cb0: 2a 0a 2a 2a 20 54 72 61 6e 73 66 65 72 20 74 68  *.** Transfer th
7cc0: 65 20 76 61 6c 75 65 73 20 6f 66 20 62 6f 75 6e  e values of boun
7cd0: 64 20 70 61 72 61 6d 65 74 65 72 20 50 31 20 69  d parameter P1 i
7ce0: 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 0a  nto register P2.
7cf0: 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 70 61 72  **.** If the par
7d00: 61 6d 65 74 65 72 20 69 73 20 6e 61 6d 65 64 2c  ameter is named,
7d10: 20 74 68 65 6e 20 69 74 73 20 6e 61 6d 65 20 61   then its name a
7d20: 70 70 65 61 72 73 20 69 6e 20 50 34 20 61 6e 64  ppears in P4 and
7d30: 20 50 33 3d 3d 31 2e 0a 2a 2a 20 54 68 65 20 50   P3==1..** The P
7d40: 34 20 76 61 6c 75 65 20 69 73 20 75 73 65 64 20  4 value is used 
7d50: 62 79 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  by sqlite3_bind_
7d60: 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65 28 29  parameter_name()
7d70: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 61 72  ..*/.case OP_Var
7d80: 69 61 62 6c 65 3a 20 7b 20 20 20 20 20 20 20 20  iable: {        
7d90: 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72      /* out2-prer
7da0: 65 6c 65 61 73 65 20 2a 2f 0a 20 20 4d 65 6d 20  elease */.  Mem 
7db0: 2a 70 56 61 72 3b 20 20 20 20 20 20 20 2f 2a 20  *pVar;       /* 
7dc0: 56 61 6c 75 65 20 62 65 69 6e 67 20 74 72 61 6e  Value being tran
7dd0: 73 66 65 72 72 65 64 20 2a 2f 0a 0a 20 20 61 73  sferred */..  as
7de0: 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20  sert( pOp->p1>0 
7df0: 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 70 2d 3e 6e  && pOp->p1<=p->n
7e00: 56 61 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28  Var );.  assert(
7e10: 20 70 4f 70 2d 3e 70 34 2e 7a 3d 3d 30 20 7c 7c   pOp->p4.z==0 ||
7e20: 20 70 4f 70 2d 3e 70 34 2e 7a 3d 3d 70 2d 3e 61   pOp->p4.z==p->a
7e30: 7a 56 61 72 5b 70 4f 70 2d 3e 70 31 2d 31 5d 20  zVar[pOp->p1-1] 
7e40: 29 3b 0a 20 20 70 56 61 72 20 3d 20 26 70 2d 3e  );.  pVar = &p->
7e50: 61 56 61 72 5b 70 4f 70 2d 3e 70 31 20 2d 20 31  aVar[pOp->p1 - 1
7e60: 5d 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  ];.  if( sqlite3
7e70: 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28 70 56  VdbeMemTooBig(pV
7e80: 61 72 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  ar) ){.    goto 
7e90: 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 73  too_big;.  }.  s
7ea0: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61  qlite3VdbeMemSha
7eb0: 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20 70  llowCopy(pOut, p
7ec0: 56 61 72 2c 20 4d 45 4d 5f 53 74 61 74 69 63 29  Var, MEM_Static)
7ed0: 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  ;.  UPDATE_MAX_B
7ee0: 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20  LOBSIZE(pOut);. 
7ef0: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
7f00: 63 6f 64 65 3a 20 4d 6f 76 65 20 50 31 20 50 32  code: Move P1 P2
7f10: 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4d 6f   P3 * *.**.** Mo
7f20: 76 65 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e  ve the values in
7f30: 20 72 65 67 69 73 74 65 72 20 50 31 2e 2e 50 31   register P1..P1
7f40: 2b 50 33 2d 31 20 6f 76 65 72 20 69 6e 74 6f 0a  +P3-1 over into.
7f50: 2a 2a 20 72 65 67 69 73 74 65 72 73 20 50 32 2e  ** registers P2.
7f60: 2e 50 32 2b 50 33 2d 31 2e 20 20 52 65 67 69 73  .P2+P3-1.  Regis
7f70: 74 65 72 73 20 50 31 2e 2e 50 31 2b 50 31 2d 31  ters P1..P1+P1-1
7f80: 20 61 72 65 0a 2a 2a 20 6c 65 66 74 20 68 6f 6c   are.** left hol
7f90: 64 69 6e 67 20 61 20 4e 55 4c 4c 2e 20 20 49 74  ding a NULL.  It
7fa0: 20 69 73 20 61 6e 20 65 72 72 6f 72 20 66 6f 72   is an error for
7fb0: 20 72 65 67 69 73 74 65 72 20 72 61 6e 67 65 73   register ranges
7fc0: 0a 2a 2a 20 50 31 2e 2e 50 31 2b 50 33 2d 31 20  .** P1..P1+P3-1 
7fd0: 61 6e 64 20 50 32 2e 2e 50 32 2b 50 33 2d 31 20  and P2..P2+P3-1 
7fe0: 74 6f 20 6f 76 65 72 6c 61 70 2e 0a 2a 2f 0a 63  to overlap..*/.c
7ff0: 61 73 65 20 4f 50 5f 4d 6f 76 65 3a 20 7b 0a 20  ase OP_Move: {. 
8000: 20 63 68 61 72 20 2a 7a 4d 61 6c 6c 6f 63 3b 20   char *zMalloc; 
8010: 20 20 2f 2a 20 48 6f 6c 64 69 6e 67 20 76 61 72    /* Holding var
8020: 69 61 62 6c 65 20 66 6f 72 20 61 6c 6c 6f 63 61  iable for alloca
8030: 74 65 64 20 6d 65 6d 6f 72 79 20 2a 2f 0a 20 20  ted memory */.  
8040: 69 6e 74 20 6e 3b 20 20 20 20 20 20 20 20 20 20  int n;          
8050: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 72 65   /* Number of re
8060: 67 69 73 74 65 72 73 20 6c 65 66 74 20 74 6f 20  gisters left to 
8070: 63 6f 70 79 20 2a 2f 0a 20 20 69 6e 74 20 70 31  copy */.  int p1
8080: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65  ;          /* Re
8090: 67 69 73 74 65 72 20 74 6f 20 63 6f 70 79 20 66  gister to copy f
80a0: 72 6f 6d 20 2a 2f 0a 20 20 69 6e 74 20 70 32 3b  rom */.  int p2;
80b0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67            /* Reg
80c0: 69 73 74 65 72 20 74 6f 20 63 6f 70 79 20 74 6f  ister to copy to
80d0: 20 2a 2f 0a 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e   */..  n = pOp->
80e0: 70 33 3b 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e  p3;.  p1 = pOp->
80f0: 70 31 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e  p1;.  p2 = pOp->
8100: 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 3e  p2;.  assert( n>
8110: 30 20 26 26 20 70 31 3e 30 20 26 26 20 70 32 3e  0 && p1>0 && p2>
8120: 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
8130: 31 2b 6e 3c 3d 70 32 20 7c 7c 20 70 32 2b 6e 3c  1+n<=p2 || p2+n<
8140: 3d 70 31 20 29 3b 0a 0a 20 20 70 49 6e 31 20 3d  =p1 );..  pIn1 =
8150: 20 26 61 4d 65 6d 5b 70 31 5d 3b 0a 20 20 70 4f   &aMem[p1];.  pO
8160: 75 74 20 3d 20 26 61 4d 65 6d 5b 70 32 5d 3b 0a  ut = &aMem[p2];.
8170: 20 20 77 68 69 6c 65 28 20 6e 2d 2d 20 29 7b 0a    while( n-- ){.
8180: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 75 74      assert( pOut
8190: 3c 3d 26 61 4d 65 6d 5b 70 2d 3e 6e 4d 65 6d 5d  <=&aMem[p->nMem]
81a0: 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
81b0: 70 49 6e 31 3c 3d 26 61 4d 65 6d 5b 70 2d 3e 6e  pIn1<=&aMem[p->n
81c0: 4d 65 6d 5d 20 29 3b 0a 20 20 20 20 61 73 73 65  Mem] );.    asse
81d0: 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70  rt( memIsValid(p
81e0: 49 6e 31 29 20 29 3b 0a 20 20 20 20 6d 65 6d 41  In1) );.    memA
81f0: 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
8200: 70 4f 75 74 29 3b 0a 20 20 20 20 7a 4d 61 6c 6c  pOut);.    zMall
8210: 6f 63 20 3d 20 70 4f 75 74 2d 3e 7a 4d 61 6c 6c  oc = pOut->zMall
8220: 6f 63 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 7a 4d  oc;.    pOut->zM
8230: 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20 20 20 73  alloc = 0;.    s
8240: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76  qlite3VdbeMemMov
8250: 65 28 70 4f 75 74 2c 20 70 49 6e 31 29 3b 0a 23  e(pOut, pIn1);.#
8260: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
8270: 55 47 0a 20 20 20 20 69 66 28 20 70 4f 75 74 2d  UG.    if( pOut-
8280: 3e 70 53 63 6f 70 79 46 72 6f 6d 3e 3d 26 61 4d  >pScopyFrom>=&aM
8290: 65 6d 5b 70 31 5d 20 26 26 20 70 4f 75 74 2d 3e  em[p1] && pOut->
82a0: 70 53 63 6f 70 79 46 72 6f 6d 3c 26 61 4d 65 6d  pScopyFrom<&aMem
82b0: 5b 70 31 2b 70 4f 70 2d 3e 70 33 5d 20 29 7b 0a  [p1+pOp->p3] ){.
82c0: 20 20 20 20 20 20 70 4f 75 74 2d 3e 70 53 63 6f        pOut->pSco
82d0: 70 79 46 72 6f 6d 20 2b 3d 20 70 31 20 2d 20 70  pyFrom += p1 - p
82e0: 4f 70 2d 3e 70 32 3b 0a 20 20 20 20 7d 0a 23 65  Op->p2;.    }.#e
82f0: 6e 64 69 66 0a 20 20 20 20 70 49 6e 31 2d 3e 7a  ndif.    pIn1->z
8300: 4d 61 6c 6c 6f 63 20 3d 20 7a 4d 61 6c 6c 6f 63  Malloc = zMalloc
8310: 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54  ;.    REGISTER_T
8320: 52 41 43 45 28 70 32 2b 2b 2c 20 70 4f 75 74 29  RACE(p2++, pOut)
8330: 3b 0a 20 20 20 20 70 49 6e 31 2b 2b 3b 0a 20 20  ;.    pIn1++;.  
8340: 20 20 70 4f 75 74 2b 2b 3b 0a 20 20 7d 0a 20 20    pOut++;.  }.  
8350: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
8360: 6f 64 65 3a 20 43 6f 70 79 20 50 31 20 50 32 20  ode: Copy P1 P2 
8370: 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4d 61 6b 65  * * *.**.** Make
8380: 20 61 20 63 6f 70 79 20 6f 66 20 72 65 67 69 73   a copy of regis
8390: 74 65 72 20 50 31 20 69 6e 74 6f 20 72 65 67 69  ter P1 into regi
83a0: 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54  ster P2..**.** T
83b0: 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
83c0: 6d 61 6b 65 73 20 61 20 64 65 65 70 20 63 6f 70  makes a deep cop
83d0: 79 20 6f 66 20 74 68 65 20 76 61 6c 75 65 2e 20  y of the value. 
83e0: 20 41 20 64 75 70 6c 69 63 61 74 65 0a 2a 2a 20   A duplicate.** 
83f0: 69 73 20 6d 61 64 65 20 6f 66 20 61 6e 79 20 73  is made of any s
8400: 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 63 6f  tring or blob co
8410: 6e 73 74 61 6e 74 2e 20 20 53 65 65 20 61 6c 73  nstant.  See als
8420: 6f 20 4f 50 5f 53 43 6f 70 79 2e 0a 2a 2f 0a 63  o OP_SCopy..*/.c
8430: 61 73 65 20 4f 50 5f 43 6f 70 79 3a 20 7b 20 20  ase OP_Copy: {  
8440: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e             /* in
8450: 31 2c 20 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e  1, out2 */.  pIn
8460: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
8470: 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d  1];.  pOut = &aM
8480: 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61  em[pOp->p2];.  a
8490: 73 73 65 72 74 28 20 70 4f 75 74 21 3d 70 49 6e  ssert( pOut!=pIn
84a0: 31 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  1 );.  sqlite3Vd
84b0: 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79  beMemShallowCopy
84c0: 28 70 4f 75 74 2c 20 70 49 6e 31 2c 20 4d 45 4d  (pOut, pIn1, MEM
84d0: 5f 45 70 68 65 6d 29 3b 0a 20 20 44 65 65 70 68  _Ephem);.  Deeph
84e0: 65 6d 65 72 61 6c 69 7a 65 28 70 4f 75 74 29 3b  emeralize(pOut);
84f0: 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43  .  REGISTER_TRAC
8500: 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29  E(pOp->p2, pOut)
8510: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
8520: 20 4f 70 63 6f 64 65 3a 20 53 43 6f 70 79 20 50   Opcode: SCopy P
8530: 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
8540: 20 4d 61 6b 65 20 61 20 73 68 61 6c 6c 6f 77 20   Make a shallow 
8550: 63 6f 70 79 20 6f 66 20 72 65 67 69 73 74 65 72  copy of register
8560: 20 50 31 20 69 6e 74 6f 20 72 65 67 69 73 74 65   P1 into registe
8570: 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  r P2..**.** This
8580: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6d 61 6b   instruction mak
8590: 65 73 20 61 20 73 68 61 6c 6c 6f 77 20 63 6f 70  es a shallow cop
85a0: 79 20 6f 66 20 74 68 65 20 76 61 6c 75 65 2e 20  y of the value. 
85b0: 20 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a   If the value.**
85c0: 20 69 73 20 61 20 73 74 72 69 6e 67 20 6f 72 20   is a string or 
85d0: 62 6c 6f 62 2c 20 74 68 65 6e 20 74 68 65 20 63  blob, then the c
85e0: 6f 70 79 20 69 73 20 6f 6e 6c 79 20 61 20 70 6f  opy is only a po
85f0: 69 6e 74 65 72 20 74 6f 20 74 68 65 0a 2a 2a 20  inter to the.** 
8600: 6f 72 69 67 69 6e 61 6c 20 61 6e 64 20 68 65 6e  original and hen
8610: 63 65 20 69 66 20 74 68 65 20 6f 72 69 67 69 6e  ce if the origin
8620: 61 6c 20 63 68 61 6e 67 65 73 20 73 6f 20 77 69  al changes so wi
8630: 6c 6c 20 74 68 65 20 63 6f 70 79 2e 0a 2a 2a 20  ll the copy..** 
8640: 57 6f 72 73 65 2c 20 69 66 20 74 68 65 20 6f 72  Worse, if the or
8650: 69 67 69 6e 61 6c 20 69 73 20 64 65 61 6c 6c 6f  iginal is deallo
8660: 63 61 74 65 64 2c 20 74 68 65 20 63 6f 70 79 20  cated, the copy 
8670: 62 65 63 6f 6d 65 73 20 69 6e 76 61 6c 69 64 2e  becomes invalid.
8680: 0a 2a 2a 20 54 68 75 73 20 74 68 65 20 70 72 6f  .** Thus the pro
8690: 67 72 61 6d 20 6d 75 73 74 20 67 75 61 72 61 6e  gram must guaran
86a0: 74 65 65 20 74 68 61 74 20 74 68 65 20 6f 72 69  tee that the ori
86b0: 67 69 6e 61 6c 20 77 69 6c 6c 20 6e 6f 74 20 63  ginal will not c
86c0: 68 61 6e 67 65 0a 2a 2a 20 64 75 72 69 6e 67 20  hange.** during 
86d0: 74 68 65 20 6c 69 66 65 74 69 6d 65 20 6f 66 20  the lifetime of 
86e0: 74 68 65 20 63 6f 70 79 2e 20 20 55 73 65 20 4f  the copy.  Use O
86f0: 50 5f 43 6f 70 79 20 74 6f 20 6d 61 6b 65 20 61  P_Copy to make a
8700: 20 63 6f 6d 70 6c 65 74 65 0a 2a 2a 20 63 6f 70   complete.** cop
8710: 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 43  y..*/.case OP_SC
8720: 6f 70 79 3a 20 7b 20 20 20 20 20 20 20 20 20 20  opy: {          
8730: 20 20 2f 2a 20 69 6e 31 2c 20 6f 75 74 32 20 2a    /* in1, out2 *
8740: 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
8750: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75  [pOp->p1];.  pOu
8760: 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
8770: 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  2];.  assert( pO
8780: 75 74 21 3d 70 49 6e 31 20 29 3b 0a 20 20 73 71  ut!=pIn1 );.  sq
8790: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c  lite3VdbeMemShal
87a0: 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20 70 49  lowCopy(pOut, pI
87b0: 6e 31 2c 20 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a  n1, MEM_Ephem);.
87c0: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
87d0: 42 55 47 0a 20 20 69 66 28 20 70 4f 75 74 2d 3e  BUG.  if( pOut->
87e0: 70 53 63 6f 70 79 46 72 6f 6d 3d 3d 30 20 29 20  pScopyFrom==0 ) 
87f0: 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d  pOut->pScopyFrom
8800: 20 3d 20 70 49 6e 31 3b 0a 23 65 6e 64 69 66 0a   = pIn1;.#endif.
8810: 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
8820: 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b  (pOp->p2, pOut);
8830: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
8840: 4f 70 63 6f 64 65 3a 20 52 65 73 75 6c 74 52 6f  Opcode: ResultRo
8850: 77 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  w P1 P2 * * *.**
8860: 0a 2a 2a 20 54 68 65 20 72 65 67 69 73 74 65 72  .** The register
8870: 73 20 50 31 20 74 68 72 6f 75 67 68 20 50 31 2b  s P1 through P1+
8880: 50 32 2d 31 20 63 6f 6e 74 61 69 6e 20 61 20 73  P2-1 contain a s
8890: 69 6e 67 6c 65 20 72 6f 77 20 6f 66 0a 2a 2a 20  ingle row of.** 
88a0: 72 65 73 75 6c 74 73 2e 20 54 68 69 73 20 6f 70  results. This op
88b0: 63 6f 64 65 20 63 61 75 73 65 73 20 74 68 65 20  code causes the 
88c0: 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20 63  sqlite3_step() c
88d0: 61 6c 6c 20 74 6f 20 74 65 72 6d 69 6e 61 74 65  all to terminate
88e0: 0a 2a 2a 20 77 69 74 68 20 61 6e 20 53 51 4c 49  .** with an SQLI
88f0: 54 45 5f 52 4f 57 20 72 65 74 75 72 6e 20 63 6f  TE_ROW return co
8900: 64 65 20 61 6e 64 20 69 74 20 73 65 74 73 20 75  de and it sets u
8910: 70 20 74 68 65 20 73 71 6c 69 74 65 33 5f 73 74  p the sqlite3_st
8920: 6d 74 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 20  mt.** structure 
8930: 74 6f 20 70 72 6f 76 69 64 65 20 61 63 63 65 73  to provide acces
8940: 73 20 74 6f 20 74 68 65 20 74 6f 70 20 50 31 20  s to the top P1 
8950: 76 61 6c 75 65 73 20 61 73 20 74 68 65 20 72 65  values as the re
8960: 73 75 6c 74 0a 2a 2a 20 72 6f 77 2e 0a 2a 2f 0a  sult.** row..*/.
8970: 63 61 73 65 20 4f 50 5f 52 65 73 75 6c 74 52 6f  case OP_ResultRo
8980: 77 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d  w: {.  Mem *pMem
8990: 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 61 73 73  ;.  int i;.  ass
89a0: 65 72 74 28 20 70 2d 3e 6e 52 65 73 43 6f 6c 75  ert( p->nResColu
89b0: 6d 6e 3d 3d 70 4f 70 2d 3e 70 32 20 29 3b 0a 20  mn==pOp->p2 );. 
89c0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
89d0: 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  >0 );.  assert( 
89e0: 70 4f 70 2d 3e 70 31 2b 70 4f 70 2d 3e 70 32 3c  pOp->p1+pOp->p2<
89f0: 3d 70 2d 3e 6e 4d 65 6d 2b 31 20 29 3b 0a 0a 20  =p->nMem+1 );.. 
8a00: 20 2f 2a 20 49 66 20 74 68 69 73 20 73 74 61 74   /* If this stat
8a10: 65 6d 65 6e 74 20 68 61 73 20 76 69 6f 6c 61 74  ement has violat
8a20: 65 64 20 69 6d 6d 65 64 69 61 74 65 20 66 6f 72  ed immediate for
8a30: 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61  eign key constra
8a40: 69 6e 74 73 2c 20 64 6f 0a 20 20 2a 2a 20 6e 6f  ints, do.  ** no
8a50: 74 20 72 65 74 75 72 6e 20 74 68 65 20 6e 75 6d  t return the num
8a60: 62 65 72 20 6f 66 20 72 6f 77 73 20 6d 6f 64 69  ber of rows modi
8a70: 66 69 65 64 2e 20 41 6e 64 20 64 6f 20 6e 6f 74  fied. And do not
8a80: 20 52 45 4c 45 41 53 45 20 74 68 65 20 73 74 61   RELEASE the sta
8a90: 74 65 6d 65 6e 74 0a 20 20 2a 2a 20 74 72 61 6e  tement.  ** tran
8aa0: 73 61 63 74 69 6f 6e 2e 20 49 74 20 6e 65 65 64  saction. It need
8ab0: 73 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62  s to be rolled b
8ac0: 61 63 6b 2e 20 20 2a 2f 0a 20 20 69 66 28 20 53  ack.  */.  if( S
8ad0: 51 4c 49 54 45 5f 4f 4b 21 3d 28 72 63 20 3d 20  QLITE_OK!=(rc = 
8ae0: 73 71 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b  sqlite3VdbeCheck
8af0: 46 6b 28 70 2c 20 30 29 29 20 29 7b 0a 20 20 20  Fk(p, 0)) ){.   
8b00: 20 61 73 73 65 72 74 28 20 64 62 2d 3e 66 6c 61   assert( db->fla
8b10: 67 73 26 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52  gs&SQLITE_CountR
8b20: 6f 77 73 20 29 3b 0a 20 20 20 20 61 73 73 65 72  ows );.    asser
8b30: 74 28 20 70 2d 3e 75 73 65 73 53 74 6d 74 4a 6f  t( p->usesStmtJo
8b40: 75 72 6e 61 6c 20 29 3b 0a 20 20 20 20 62 72 65  urnal );.    bre
8b50: 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 66  ak;.  }..  /* If
8b60: 20 74 68 65 20 53 51 4c 49 54 45 5f 43 6f 75 6e   the SQLITE_Coun
8b70: 74 52 6f 77 73 20 66 6c 61 67 20 69 73 20 73 65  tRows flag is se
8b80: 74 20 69 6e 20 73 71 6c 69 74 65 33 2e 66 6c 61  t in sqlite3.fla
8b90: 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 0a 20  gs mask, then . 
8ba0: 20 2a 2a 20 44 4d 4c 20 73 74 61 74 65 6d 65 6e   ** DML statemen
8bb0: 74 73 20 69 6e 76 6f 6b 65 20 74 68 69 73 20 6f  ts invoke this o
8bc0: 70 63 6f 64 65 20 74 6f 20 72 65 74 75 72 6e 20  pcode to return 
8bd0: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f  the number of ro
8be0: 77 73 20 0a 20 20 2a 2a 20 6d 6f 64 69 66 69 65  ws .  ** modifie
8bf0: 64 20 74 6f 20 74 68 65 20 75 73 65 72 2e 20 54  d to the user. T
8c00: 68 69 73 20 69 73 20 74 68 65 20 6f 6e 6c 79 20  his is the only 
8c10: 77 61 79 20 74 68 61 74 20 61 20 56 4d 20 74 68  way that a VM th
8c20: 61 74 0a 20 20 2a 2a 20 6f 70 65 6e 73 20 61 20  at.  ** opens a 
8c30: 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61  statement transa
8c40: 63 74 69 6f 6e 20 6d 61 79 20 69 6e 76 6f 6b 65  ction may invoke
8c50: 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a 20 20   this opcode..  
8c60: 2a 2a 0a 20 20 2a 2a 20 49 6e 20 63 61 73 65 20  **.  ** In case 
8c70: 74 68 69 73 20 69 73 20 73 75 63 68 20 61 20 73  this is such a s
8c80: 74 61 74 65 6d 65 6e 74 2c 20 63 6c 6f 73 65 20  tatement, close 
8c90: 61 6e 79 20 73 74 61 74 65 6d 65 6e 74 20 74 72  any statement tr
8ca0: 61 6e 73 61 63 74 69 6f 6e 0a 20 20 2a 2a 20 6f  ansaction.  ** o
8cb0: 70 65 6e 65 64 20 62 79 20 74 68 69 73 20 56 4d  pened by this VM
8cc0: 20 62 65 66 6f 72 65 20 72 65 74 75 72 6e 69 6e   before returnin
8cd0: 67 20 63 6f 6e 74 72 6f 6c 20 74 6f 20 74 68 65  g control to the
8ce0: 20 75 73 65 72 2e 20 54 68 69 73 20 69 73 20 74   user. This is t
8cf0: 6f 0a 20 20 2a 2a 20 65 6e 73 75 72 65 20 74 68  o.  ** ensure th
8d00: 61 74 20 73 74 61 74 65 6d 65 6e 74 2d 74 72 61  at statement-tra
8d10: 6e 73 61 63 74 69 6f 6e 73 20 61 72 65 20 61 6c  nsactions are al
8d20: 77 61 79 73 20 6e 65 73 74 65 64 2c 20 6e 6f 74  ways nested, not
8d30: 20 6f 76 65 72 6c 61 70 70 69 6e 67 2e 0a 20 20   overlapping..  
8d40: 2a 2a 20 49 66 20 74 68 65 20 6f 70 65 6e 20 73  ** If the open s
8d50: 74 61 74 65 6d 65 6e 74 2d 74 72 61 6e 73 61 63  tatement-transac
8d60: 74 69 6f 6e 20 69 73 20 6e 6f 74 20 63 6c 6f 73  tion is not clos
8d70: 65 64 20 68 65 72 65 2c 20 74 68 65 6e 20 74 68  ed here, then th
8d80: 65 20 75 73 65 72 0a 20 20 2a 2a 20 6d 61 79 20  e user.  ** may 
8d90: 73 74 65 70 20 61 6e 6f 74 68 65 72 20 56 4d 20  step another VM 
8da0: 74 68 61 74 20 6f 70 65 6e 73 20 69 74 73 20 6f  that opens its o
8db0: 77 6e 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61  wn statement tra
8dc0: 6e 73 61 63 74 69 6f 6e 2e 20 54 68 69 73 0a 20  nsaction. This. 
8dd0: 20 2a 2a 20 6d 61 79 20 6c 65 61 64 20 74 6f 20   ** may lead to 
8de0: 6f 76 65 72 6c 61 70 70 69 6e 67 20 73 74 61 74  overlapping stat
8df0: 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  ement transactio
8e00: 6e 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68  ns..  **.  ** Th
8e10: 65 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e  e statement tran
8e20: 73 61 63 74 69 6f 6e 20 69 73 20 6e 65 76 65 72  saction is never
8e30: 20 61 20 74 6f 70 2d 6c 65 76 65 6c 20 74 72 61   a top-level tra
8e40: 6e 73 61 63 74 69 6f 6e 2e 20 20 48 65 6e 63 65  nsaction.  Hence
8e50: 0a 20 20 2a 2a 20 74 68 65 20 52 45 4c 45 41 53  .  ** the RELEAS
8e60: 45 20 63 61 6c 6c 20 62 65 6c 6f 77 20 63 61 6e  E call below can
8e70: 20 6e 65 76 65 72 20 66 61 69 6c 2e 0a 20 20 2a   never fail..  *
8e80: 2f 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 69  /.  assert( p->i
8e90: 53 74 61 74 65 6d 65 6e 74 3d 3d 30 20 7c 7c 20  Statement==0 || 
8ea0: 64 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54 45  db->flags&SQLITE
8eb0: 5f 43 6f 75 6e 74 52 6f 77 73 20 29 3b 0a 20 20  _CountRows );.  
8ec0: 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
8ed0: 43 6c 6f 73 65 53 74 61 74 65 6d 65 6e 74 28 70  CloseStatement(p
8ee0: 2c 20 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45  , SAVEPOINT_RELE
8ef0: 41 53 45 29 3b 0a 20 20 69 66 28 20 4e 45 56 45  ASE);.  if( NEVE
8f00: 52 28 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 29  R(rc!=SQLITE_OK)
8f10: 20 29 7b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20   ){.    break;. 
8f20: 20 7d 0a 0a 20 20 2f 2a 20 49 6e 76 61 6c 69 64   }..  /* Invalid
8f30: 61 74 65 20 61 6c 6c 20 65 70 68 65 6d 65 72 61  ate all ephemera
8f40: 6c 20 63 75 72 73 6f 72 20 72 6f 77 20 63 61 63  l cursor row cac
8f50: 68 65 73 20 2a 2f 0a 20 20 70 2d 3e 63 61 63 68  hes */.  p->cach
8f60: 65 43 74 72 20 3d 20 28 70 2d 3e 63 61 63 68 65  eCtr = (p->cache
8f70: 43 74 72 20 2b 20 32 29 7c 31 3b 0a 0a 20 20 2f  Ctr + 2)|1;..  /
8f80: 2a 20 4d 61 6b 65 20 73 75 72 65 20 74 68 65 20  * Make sure the 
8f90: 72 65 73 75 6c 74 73 20 6f 66 20 74 68 65 20 63  results of the c
8fa0: 75 72 72 65 6e 74 20 72 6f 77 20 61 72 65 20 5c  urrent row are \
8fb0: 30 30 30 20 74 65 72 6d 69 6e 61 74 65 64 0a 20  000 terminated. 
8fc0: 20 2a 2a 20 61 6e 64 20 68 61 76 65 20 61 6e 20   ** and have an 
8fd0: 61 73 73 69 67 6e 65 64 20 74 79 70 65 2e 20 20  assigned type.  
8fe0: 54 68 65 20 72 65 73 75 6c 74 73 20 61 72 65 20  The results are 
8ff0: 64 65 2d 65 70 68 65 6d 65 72 61 6c 69 7a 65 64  de-ephemeralized
9000: 20 61 73 0a 20 20 2a 2a 20 61 73 20 73 69 64 65   as.  ** as side
9010: 20 65 66 66 65 63 74 2e 0a 20 20 2a 2f 0a 20 20   effect..  */.  
9020: 70 4d 65 6d 20 3d 20 70 2d 3e 70 52 65 73 75 6c  pMem = p->pResul
9030: 74 53 65 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  tSet = &aMem[pOp
9040: 2d 3e 70 31 5d 3b 0a 20 20 66 6f 72 28 69 3d 30  ->p1];.  for(i=0
9050: 3b 20 69 3c 70 4f 70 2d 3e 70 32 3b 20 69 2b 2b  ; i<pOp->p2; i++
9060: 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d  ){.    assert( m
9070: 65 6d 49 73 56 61 6c 69 64 28 26 70 4d 65 6d 5b  emIsValid(&pMem[
9080: 69 5d 29 20 29 3b 0a 20 20 20 20 44 65 65 70 68  i]) );.    Deeph
9090: 65 6d 65 72 61 6c 69 7a 65 28 26 70 4d 65 6d 5b  emeralize(&pMem[
90a0: 69 5d 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  i]);.    assert(
90b0: 20 28 70 4d 65 6d 5b 69 5d 2e 66 6c 61 67 73 20   (pMem[i].flags 
90c0: 26 20 4d 45 4d 5f 45 70 68 65 6d 29 3d 3d 30 0a  & MEM_Ephem)==0.
90d0: 20 20 20 20 20 20 20 20 20 20 20 20 7c 7c 20 28              || (
90e0: 70 4d 65 6d 5b 69 5d 2e 66 6c 61 67 73 20 26 20  pMem[i].flags & 
90f0: 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f  (MEM_Str|MEM_Blo
9100: 62 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 73 71  b))==0 );.    sq
9110: 6c 69 74 65 33 56 64 62 65 4d 65 6d 4e 75 6c 54  lite3VdbeMemNulT
9120: 65 72 6d 69 6e 61 74 65 28 26 70 4d 65 6d 5b 69  erminate(&pMem[i
9130: 5d 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  ]);.    sqlite3V
9140: 64 62 65 4d 65 6d 53 74 6f 72 65 54 79 70 65 28  dbeMemStoreType(
9150: 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 20 20 52  &pMem[i]);.    R
9160: 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
9170: 70 2d 3e 70 31 2b 69 2c 20 26 70 4d 65 6d 5b 69  p->p1+i, &pMem[i
9180: 5d 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 64 62  ]);.  }.  if( db
9190: 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29  ->mallocFailed )
91a0: 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 0a 20   goto no_mem;.. 
91b0: 20 2f 2a 20 52 65 74 75 72 6e 20 53 51 4c 49 54   /* Return SQLIT
91c0: 45 5f 52 4f 57 0a 20 20 2a 2f 0a 20 20 70 2d 3e  E_ROW.  */.  p->
91d0: 70 63 20 3d 20 70 63 20 2b 20 31 3b 0a 20 20 72  pc = pc + 1;.  r
91e0: 63 20 3d 20 53 51 4c 49 54 45 5f 52 4f 57 3b 0a  c = SQLITE_ROW;.
91f0: 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75    goto vdbe_retu
9200: 72 6e 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  rn;.}../* Opcode
9210: 3a 20 43 6f 6e 63 61 74 20 50 31 20 50 32 20 50  : Concat P1 P2 P
9220: 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 64 64 20  3 * *.**.** Add 
9230: 74 68 65 20 74 65 78 74 20 69 6e 20 72 65 67 69  the text in regi
9240: 73 74 65 72 20 50 31 20 6f 6e 74 6f 20 74 68 65  ster P1 onto the
9250: 20 65 6e 64 20 6f 66 20 74 68 65 20 74 65 78 74   end of the text
9260: 20 69 6e 0a 2a 2a 20 72 65 67 69 73 74 65 72 20   in.** register 
9270: 50 32 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65  P2 and store the
9280: 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73   result in regis
9290: 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69  ter P3..** If ei
92a0: 74 68 65 72 20 74 68 65 20 50 31 20 6f 72 20 50  ther the P1 or P
92b0: 32 20 74 65 78 74 20 61 72 65 20 4e 55 4c 4c 20  2 text are NULL 
92c0: 74 68 65 6e 20 73 74 6f 72 65 20 4e 55 4c 4c 20  then store NULL 
92d0: 69 6e 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 20 20 50  in P3..**.**   P
92e0: 33 20 3d 20 50 32 20 7c 7c 20 50 31 0a 2a 2a 0a  3 = P2 || P1.**.
92f0: 2a 2a 20 49 74 20 69 73 20 69 6c 6c 65 67 61 6c  ** It is illegal
9300: 20 66 6f 72 20 50 31 20 61 6e 64 20 50 33 20 74   for P1 and P3 t
9310: 6f 20 62 65 20 74 68 65 20 73 61 6d 65 20 72 65  o be the same re
9320: 67 69 73 74 65 72 2e 20 53 6f 6d 65 74 69 6d 65  gister. Sometime
9330: 73 2c 0a 2a 2a 20 69 66 20 50 33 20 69 73 20 74  s,.** if P3 is t
9340: 68 65 20 73 61 6d 65 20 72 65 67 69 73 74 65 72  he same register
9350: 20 61 73 20 50 32 2c 20 74 68 65 20 69 6d 70 6c   as P2, the impl
9360: 65 6d 65 6e 74 61 74 69 6f 6e 20 69 73 20 61 62  ementation is ab
9370: 6c 65 0a 2a 2a 20 74 6f 20 61 76 6f 69 64 20 61  le.** to avoid a
9380: 20 6d 65 6d 63 70 79 28 29 2e 0a 2a 2f 0a 63 61   memcpy()..*/.ca
9390: 73 65 20 4f 50 5f 43 6f 6e 63 61 74 3a 20 7b 20  se OP_Concat: { 
93a0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
93b0: 65 20 61 73 20 54 4b 5f 43 4f 4e 43 41 54 2c 20  e as TK_CONCAT, 
93c0: 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a  in1, in2, out3 *
93d0: 2f 0a 20 20 69 36 34 20 6e 42 79 74 65 3b 0a 0a  /.  i64 nByte;..
93e0: 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
93f0: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 32 20  Op->p1];.  pIn2 
9400: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
9410: 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d  ;.  pOut = &aMem
9420: 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73  [pOp->p3];.  ass
9430: 65 72 74 28 20 70 49 6e 31 21 3d 70 4f 75 74 20  ert( pIn1!=pOut 
9440: 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  );.  if( (pIn1->
9450: 66 6c 61 67 73 20 7c 20 70 49 6e 32 2d 3e 66 6c  flags | pIn2->fl
9460: 61 67 73 29 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20  ags) & MEM_Null 
9470: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
9480: 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75  beMemSetNull(pOu
9490: 74 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20  t);.    break;. 
94a0: 20 7d 0a 20 20 69 66 28 20 45 78 70 61 6e 64 42   }.  if( ExpandB
94b0: 6c 6f 62 28 70 49 6e 31 29 20 7c 7c 20 45 78 70  lob(pIn1) || Exp
94c0: 61 6e 64 42 6c 6f 62 28 70 49 6e 32 29 20 29 20  andBlob(pIn2) ) 
94d0: 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 53  goto no_mem;.  S
94e0: 74 72 69 6e 67 69 66 79 28 70 49 6e 31 2c 20 65  tringify(pIn1, e
94f0: 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 53 74 72 69  ncoding);.  Stri
9500: 6e 67 69 66 79 28 70 49 6e 32 2c 20 65 6e 63 6f  ngify(pIn2, enco
9510: 64 69 6e 67 29 3b 0a 20 20 6e 42 79 74 65 20 3d  ding);.  nByte =
9520: 20 70 49 6e 31 2d 3e 6e 20 2b 20 70 49 6e 32 2d   pIn1->n + pIn2-
9530: 3e 6e 3b 0a 20 20 69 66 28 20 6e 42 79 74 65 3e  >n;.  if( nByte>
9540: 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54  db->aLimit[SQLIT
9550: 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20  E_LIMIT_LENGTH] 
9560: 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f  ){.    goto too_
9570: 62 69 67 3b 0a 20 20 7d 0a 20 20 4d 65 6d 53 65  big;.  }.  MemSe
9580: 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20  tTypeFlag(pOut, 
9590: 4d 45 4d 5f 53 74 72 29 3b 0a 20 20 69 66 28 20  MEM_Str);.  if( 
95a0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 47 72  sqlite3VdbeMemGr
95b0: 6f 77 28 70 4f 75 74 2c 20 28 69 6e 74 29 6e 42  ow(pOut, (int)nB
95c0: 79 74 65 2b 32 2c 20 70 4f 75 74 3d 3d 70 49 6e  yte+2, pOut==pIn
95d0: 32 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e  2) ){.    goto n
95e0: 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 69 66 28  o_mem;.  }.  if(
95f0: 20 70 4f 75 74 21 3d 70 49 6e 32 20 29 7b 0a 20   pOut!=pIn2 ){. 
9600: 20 20 20 6d 65 6d 63 70 79 28 70 4f 75 74 2d 3e     memcpy(pOut->
9610: 7a 2c 20 70 49 6e 32 2d 3e 7a 2c 20 70 49 6e 32  z, pIn2->z, pIn2
9620: 2d 3e 6e 29 3b 0a 20 20 7d 0a 20 20 6d 65 6d 63  ->n);.  }.  memc
9630: 70 79 28 26 70 4f 75 74 2d 3e 7a 5b 70 49 6e 32  py(&pOut->z[pIn2
9640: 2d 3e 6e 5d 2c 20 70 49 6e 31 2d 3e 7a 2c 20 70  ->n], pIn1->z, p
9650: 49 6e 31 2d 3e 6e 29 3b 0a 20 20 70 4f 75 74 2d  In1->n);.  pOut-
9660: 3e 7a 5b 6e 42 79 74 65 5d 20 3d 20 30 3b 0a 20  >z[nByte] = 0;. 
9670: 20 70 4f 75 74 2d 3e 7a 5b 6e 42 79 74 65 2b 31   pOut->z[nByte+1
9680: 5d 20 3d 20 30 3b 0a 20 20 70 4f 75 74 2d 3e 66  ] = 0;.  pOut->f
9690: 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 54 65 72 6d  lags |= MEM_Term
96a0: 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 28 69  ;.  pOut->n = (i
96b0: 6e 74 29 6e 42 79 74 65 3b 0a 20 20 70 4f 75 74  nt)nByte;.  pOut
96c0: 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67  ->enc = encoding
96d0: 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  ;.  UPDATE_MAX_B
96e0: 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20  LOBSIZE(pOut);. 
96f0: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
9700: 63 6f 64 65 3a 20 41 64 64 20 50 31 20 50 32 20  code: Add P1 P2 
9710: 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 64 64  P3 * *.**.** Add
9720: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
9730: 67 69 73 74 65 72 20 50 31 20 74 6f 20 74 68 65  gister P1 to the
9740: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
9750: 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f  er P2.** and sto
9760: 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e  re the result in
9770: 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a   register P3..**
9780: 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74   If either input
9790: 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65   is NULL, the re
97a0: 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f  sult is NULL..*/
97b0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 75 6c 74  ./* Opcode: Mult
97c0: 69 70 6c 79 20 50 31 20 50 32 20 50 33 20 2a 20  iply P1 P2 P3 * 
97d0: 2a 0a 2a 2a 0a 2a 2a 0a 2a 2a 20 4d 75 6c 74 69  *.**.**.** Multi
97e0: 70 6c 79 20 74 68 65 20 76 61 6c 75 65 20 69 6e  ply the value in
97f0: 20 72 65 67 69 73 74 65 72 20 50 31 20 62 79 20   register P1 by 
9800: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
9810: 69 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20  ister P2.** and 
9820: 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74  store the result
9830: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e   in register P3.
9840: 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e  .** If either in
9850: 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65  put is NULL, the
9860: 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e   result is NULL.
9870: 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .*/./* Opcode: S
9880: 75 62 74 72 61 63 74 20 50 31 20 50 32 20 50 33  ubtract P1 P2 P3
9890: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 75 62 74 72   * *.**.** Subtr
98a0: 61 63 74 20 74 68 65 20 76 61 6c 75 65 20 69 6e  act the value in
98b0: 20 72 65 67 69 73 74 65 72 20 50 31 20 66 72 6f   register P1 fro
98c0: 6d 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  m the value in r
98d0: 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e  egister P2.** an
98e0: 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75  d store the resu
98f0: 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  lt in register P
9900: 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20  3..** If either 
9910: 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74  input is NULL, t
9920: 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c  he result is NUL
9930: 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  L..*/./* Opcode:
9940: 20 44 69 76 69 64 65 20 50 31 20 50 32 20 50 33   Divide P1 P2 P3
9950: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 69 76 69 64   * *.**.** Divid
9960: 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  e the value in r
9970: 65 67 69 73 74 65 72 20 50 31 20 62 79 20 74 68  egister P1 by th
9980: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
9990: 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74  ter P2.** and st
99a0: 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69  ore the result i
99b0: 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 28 50  n register P3 (P
99c0: 33 3d 50 32 2f 50 31 29 2e 20 49 66 20 74 68 65  3=P2/P1). If the
99d0: 20 76 61 6c 75 65 20 69 6e 20 0a 2a 2a 20 72 65   value in .** re
99e0: 67 69 73 74 65 72 20 50 31 20 69 73 20 7a 65 72  gister P1 is zer
99f0: 6f 2c 20 74 68 65 6e 20 74 68 65 20 72 65 73 75  o, then the resu
9a00: 6c 74 20 69 73 20 4e 55 4c 4c 2e 20 49 66 20 65  lt is NULL. If e
9a10: 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 0a  ither input is .
9a20: 2a 2a 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73  ** NULL, the res
9a30: 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a  ult is NULL..*/.
9a40: 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 6d 61 69  /* Opcode: Remai
9a50: 6e 64 65 72 20 50 31 20 50 32 20 50 33 20 2a 20  nder P1 P2 P3 * 
9a60: 2a 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 75 74 65 20  *.**.** Compute 
9a70: 74 68 65 20 72 65 6d 61 69 6e 64 65 72 20 61 66  the remainder af
9a80: 74 65 72 20 69 6e 74 65 67 65 72 20 64 69 76 69  ter integer divi
9a90: 73 69 6f 6e 20 6f 66 20 74 68 65 20 76 61 6c 75  sion of the valu
9aa0: 65 20 69 6e 0a 2a 2a 20 72 65 67 69 73 74 65 72  e in.** register
9ab0: 20 50 31 20 62 79 20 74 68 65 20 76 61 6c 75 65   P1 by the value
9ac0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 20   in register P2 
9ad0: 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65  and store the re
9ae0: 73 75 6c 74 20 69 6e 20 50 33 2e 20 0a 2a 2a 20  sult in P3. .** 
9af0: 49 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  If the value in 
9b00: 72 65 67 69 73 74 65 72 20 50 32 20 69 73 20 7a  register P2 is z
9b10: 65 72 6f 20 74 68 65 20 72 65 73 75 6c 74 20 69  ero the result i
9b20: 73 20 4e 55 4c 4c 2e 0a 2a 2a 20 49 66 20 65 69  s NULL..** If ei
9b30: 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20  ther operand is 
9b40: 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74  NULL, the result
9b50: 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73   is NULL..*/.cas
9b60: 65 20 4f 50 5f 41 64 64 3a 20 20 20 20 20 20 20  e OP_Add:       
9b70: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
9b80: 61 6d 65 20 61 73 20 54 4b 5f 50 4c 55 53 2c 20  ame as TK_PLUS, 
9b90: 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a  in1, in2, out3 *
9ba0: 2f 0a 63 61 73 65 20 4f 50 5f 53 75 62 74 72 61  /.case OP_Subtra
9bb0: 63 74 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  ct:             
9bc0: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4d   /* same as TK_M
9bd0: 49 4e 55 53 2c 20 69 6e 31 2c 20 69 6e 32 2c 20  INUS, in1, in2, 
9be0: 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  out3 */.case OP_
9bf0: 4d 75 6c 74 69 70 6c 79 3a 20 20 20 20 20 20 20  Multiply:       
9c00: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
9c10: 73 20 54 4b 5f 53 54 41 52 2c 20 69 6e 31 2c 20  s TK_STAR, in1, 
9c20: 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73  in2, out3 */.cas
9c30: 65 20 4f 50 5f 44 69 76 69 64 65 3a 20 20 20 20  e OP_Divide:    
9c40: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
9c50: 61 6d 65 20 61 73 20 54 4b 5f 53 4c 41 53 48 2c  ame as TK_SLASH,
9c60: 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20   in1, in2, out3 
9c70: 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 6d 61 69  */.case OP_Remai
9c80: 6e 64 65 72 3a 20 7b 20 20 20 20 20 20 20 20 20  nder: {         
9c90: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
9ca0: 52 45 4d 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f  REM, in1, in2, o
9cb0: 75 74 33 20 2a 2f 0a 20 20 69 6e 74 20 66 6c 61  ut3 */.  int fla
9cc0: 67 73 3b 20 20 20 20 20 20 2f 2a 20 43 6f 6d 62  gs;      /* Comb
9cd0: 69 6e 65 64 20 4d 45 4d 5f 2a 20 66 6c 61 67 73  ined MEM_* flags
9ce0: 20 66 72 6f 6d 20 62 6f 74 68 20 69 6e 70 75 74   from both input
9cf0: 73 20 2a 2f 0a 20 20 69 36 34 20 69 41 3b 20 20  s */.  i64 iA;  
9d00: 20 20 20 20 20 20 20 2f 2a 20 49 6e 74 65 67 65         /* Intege
9d10: 72 20 76 61 6c 75 65 20 6f 66 20 6c 65 66 74 20  r value of left 
9d20: 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 69 36 34  operand */.  i64
9d30: 20 69 42 3b 20 20 20 20 20 20 20 20 20 2f 2a 20   iB;         /* 
9d40: 49 6e 74 65 67 65 72 20 76 61 6c 75 65 20 6f 66  Integer value of
9d50: 20 72 69 67 68 74 20 6f 70 65 72 61 6e 64 20 2a   right operand *
9d60: 2f 0a 20 20 64 6f 75 62 6c 65 20 72 41 3b 20 20  /.  double rA;  
9d70: 20 20 20 20 2f 2a 20 52 65 61 6c 20 76 61 6c 75      /* Real valu
9d80: 65 20 6f 66 20 6c 65 66 74 20 6f 70 65 72 61 6e  e of left operan
9d90: 64 20 2a 2f 0a 20 20 64 6f 75 62 6c 65 20 72 42  d */.  double rB
9da0: 3b 20 20 20 20 20 20 2f 2a 20 52 65 61 6c 20 76  ;      /* Real v
9db0: 61 6c 75 65 20 6f 66 20 72 69 67 68 74 20 6f 70  alue of right op
9dc0: 65 72 61 6e 64 20 2a 2f 0a 0a 20 20 70 49 6e 31  erand */..  pIn1
9dd0: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
9de0: 5d 3b 0a 20 20 61 70 70 6c 79 4e 75 6d 65 72 69  ];.  applyNumeri
9df0: 63 41 66 66 69 6e 69 74 79 28 70 49 6e 31 29 3b  cAffinity(pIn1);
9e00: 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b  .  pIn2 = &aMem[
9e10: 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 70 70 6c  pOp->p2];.  appl
9e20: 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79  yNumericAffinity
9e30: 28 70 49 6e 32 29 3b 0a 20 20 70 4f 75 74 20 3d  (pIn2);.  pOut =
9e40: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
9e50: 0a 20 20 66 6c 61 67 73 20 3d 20 70 49 6e 31 2d  .  flags = pIn1-
9e60: 3e 66 6c 61 67 73 20 7c 20 70 49 6e 32 2d 3e 66  >flags | pIn2->f
9e70: 6c 61 67 73 3b 0a 20 20 69 66 28 20 28 66 6c 61  lags;.  if( (fla
9e80: 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d  gs & MEM_Null)!=
9e90: 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d 65  0 ) goto arithme
9ea0: 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75  tic_result_is_nu
9eb0: 6c 6c 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d  ll;.  if( (pIn1-
9ec0: 3e 66 6c 61 67 73 20 26 20 70 49 6e 32 2d 3e 66  >flags & pIn2->f
9ed0: 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d  lags & MEM_Int)=
9ee0: 3d 4d 45 4d 5f 49 6e 74 20 29 7b 0a 20 20 20 20  =MEM_Int ){.    
9ef0: 69 41 20 3d 20 70 49 6e 31 2d 3e 75 2e 69 3b 0a  iA = pIn1->u.i;.
9f00: 20 20 20 20 69 42 20 3d 20 70 49 6e 32 2d 3e 75      iB = pIn2->u
9f10: 2e 69 3b 0a 20 20 20 20 73 77 69 74 63 68 28 20  .i;.    switch( 
9f20: 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 20  pOp->opcode ){. 
9f30: 20 20 20 20 20 63 61 73 65 20 4f 50 5f 41 64 64       case OP_Add
9f40: 3a 20 20 20 20 20 20 20 69 66 28 20 73 71 6c 69  :       if( sqli
9f50: 74 65 33 41 64 64 49 6e 74 36 34 28 26 69 42 2c  te3AddInt64(&iB,
9f60: 69 41 29 20 29 20 67 6f 74 6f 20 66 70 5f 6d 61  iA) ) goto fp_ma
9f70: 74 68 3b 20 20 62 72 65 61 6b 3b 0a 20 20 20 20  th;  break;.    
9f80: 20 20 63 61 73 65 20 4f 50 5f 53 75 62 74 72 61    case OP_Subtra
9f90: 63 74 3a 20 20 69 66 28 20 73 71 6c 69 74 65 33  ct:  if( sqlite3
9fa0: 53 75 62 49 6e 74 36 34 28 26 69 42 2c 69 41 29  SubInt64(&iB,iA)
9fb0: 20 29 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68 3b   ) goto fp_math;
9fc0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63    break;.      c
9fd0: 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a  ase OP_Multiply:
9fe0: 20 20 69 66 28 20 73 71 6c 69 74 65 33 4d 75 6c    if( sqlite3Mul
9ff0: 49 6e 74 36 34 28 26 69 42 2c 69 41 29 20 29 20  Int64(&iB,iA) ) 
a000: 67 6f 74 6f 20 66 70 5f 6d 61 74 68 3b 20 20 62  goto fp_math;  b
a010: 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65  reak;.      case
a020: 20 4f 50 5f 44 69 76 69 64 65 3a 20 7b 0a 20 20   OP_Divide: {.  
a030: 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d 30 20        if( iA==0 
a040: 29 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69  ) goto arithmeti
a050: 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c  c_result_is_null
a060: 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 41  ;.        if( iA
a070: 3d 3d 2d 31 20 26 26 20 69 42 3d 3d 53 4d 41 4c  ==-1 && iB==SMAL
a080: 4c 45 53 54 5f 49 4e 54 36 34 20 29 20 67 6f 74  LEST_INT64 ) got
a090: 6f 20 66 70 5f 6d 61 74 68 3b 0a 20 20 20 20 20  o fp_math;.     
a0a0: 20 20 20 69 42 20 2f 3d 20 69 41 3b 0a 20 20 20     iB /= iA;.   
a0b0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
a0c0: 20 20 7d 0a 20 20 20 20 20 20 64 65 66 61 75 6c    }.      defaul
a0d0: 74 3a 20 7b 0a 20 20 20 20 20 20 20 20 69 66 28  t: {.        if(
a0e0: 20 69 41 3d 3d 30 20 29 20 67 6f 74 6f 20 61 72   iA==0 ) goto ar
a0f0: 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f  ithmetic_result_
a100: 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20  is_null;.       
a110: 20 69 66 28 20 69 41 3d 3d 2d 31 20 29 20 69 41   if( iA==-1 ) iA
a120: 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 69 42   = 1;.        iB
a130: 20 25 3d 20 69 41 3b 0a 20 20 20 20 20 20 20 20   %= iA;.        
a140: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20  break;.      }. 
a150: 20 20 20 7d 0a 20 20 20 20 70 4f 75 74 2d 3e 75     }.    pOut->u
a160: 2e 69 20 3d 20 69 42 3b 0a 20 20 20 20 4d 65 6d  .i = iB;.    Mem
a170: 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74  SetTypeFlag(pOut
a180: 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d 65  , MEM_Int);.  }e
a190: 6c 73 65 7b 0a 66 70 5f 6d 61 74 68 3a 0a 20 20  lse{.fp_math:.  
a1a0: 20 20 72 41 20 3d 20 73 71 6c 69 74 65 33 56 64    rA = sqlite3Vd
a1b0: 62 65 52 65 61 6c 56 61 6c 75 65 28 70 49 6e 31  beRealValue(pIn1
a1c0: 29 3b 0a 20 20 20 20 72 42 20 3d 20 73 71 6c 69  );.    rB = sqli
a1d0: 74 65 33 56 64 62 65 52 65 61 6c 56 61 6c 75 65  te3VdbeRealValue
a1e0: 28 70 49 6e 32 29 3b 0a 20 20 20 20 73 77 69 74  (pIn2);.    swit
a1f0: 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20  ch( pOp->opcode 
a200: 29 7b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50  ){.      case OP
a210: 5f 41 64 64 3a 20 20 20 20 20 20 20 20 20 72 42  _Add:         rB
a220: 20 2b 3d 20 72 41 3b 20 20 20 20 20 20 20 62 72   += rA;       br
a230: 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20  eak;.      case 
a240: 4f 50 5f 53 75 62 74 72 61 63 74 3a 20 20 20 20  OP_Subtract:    
a250: 72 42 20 2d 3d 20 72 41 3b 20 20 20 20 20 20 20  rB -= rA;       
a260: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73  break;.      cas
a270: 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a 20 20  e OP_Multiply:  
a280: 20 20 72 42 20 2a 3d 20 72 41 3b 20 20 20 20 20    rB *= rA;     
a290: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63    break;.      c
a2a0: 61 73 65 20 4f 50 5f 44 69 76 69 64 65 3a 20 7b  ase OP_Divide: {
a2b0: 0a 20 20 20 20 20 20 20 20 2f 2a 20 28 64 6f 75  .        /* (dou
a2c0: 62 6c 65 29 30 20 49 6e 20 63 61 73 65 20 6f 66  ble)0 In case of
a2d0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f   SQLITE_OMIT_FLO
a2e0: 41 54 49 4e 47 5f 50 4f 49 4e 54 2e 2e 2e 20 2a  ATING_POINT... *
a2f0: 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20 72 41  /.        if( rA
a300: 3d 3d 28 64 6f 75 62 6c 65 29 30 20 29 20 67 6f  ==(double)0 ) go
a310: 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65  to arithmetic_re
a320: 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20  sult_is_null;.  
a330: 20 20 20 20 20 20 72 42 20 2f 3d 20 72 41 3b 0a        rB /= rA;.
a340: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
a350: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 64 65 66       }.      def
a360: 61 75 6c 74 3a 20 7b 0a 20 20 20 20 20 20 20 20  ault: {.        
a370: 69 41 20 3d 20 28 69 36 34 29 72 41 3b 0a 20 20  iA = (i64)rA;.  
a380: 20 20 20 20 20 20 69 42 20 3d 20 28 69 36 34 29        iB = (i64)
a390: 72 42 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  rB;.        if( 
a3a0: 69 41 3d 3d 30 20 29 20 67 6f 74 6f 20 61 72 69  iA==0 ) goto ari
a3b0: 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69  thmetic_result_i
a3c0: 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20  s_null;.        
a3d0: 69 66 28 20 69 41 3d 3d 2d 31 20 29 20 69 41 20  if( iA==-1 ) iA 
a3e0: 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 72 42 20  = 1;.        rB 
a3f0: 3d 20 28 64 6f 75 62 6c 65 29 28 69 42 20 25 20  = (double)(iB % 
a400: 69 41 29 3b 0a 20 20 20 20 20 20 20 20 62 72 65  iA);.        bre
a410: 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ak;.      }.    
a420: 7d 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  }.#ifdef SQLITE_
a430: 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f  OMIT_FLOATING_PO
a440: 49 4e 54 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e  INT.    pOut->u.
a450: 69 20 3d 20 72 42 3b 0a 20 20 20 20 4d 65 6d 53  i = rB;.    MemS
a460: 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c  etTypeFlag(pOut,
a470: 20 4d 45 4d 5f 49 6e 74 29 3b 0a 23 65 6c 73 65   MEM_Int);.#else
a480: 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33  .    if( sqlite3
a490: 49 73 4e 61 4e 28 72 42 29 20 29 7b 0a 20 20 20  IsNaN(rB) ){.   
a4a0: 20 20 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74     goto arithmet
a4b0: 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c  ic_result_is_nul
a4c0: 6c 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f 75  l;.    }.    pOu
a4d0: 74 2d 3e 72 20 3d 20 72 42 3b 0a 20 20 20 20 4d  t->r = rB;.    M
a4e0: 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f  emSetTypeFlag(pO
a4f0: 75 74 2c 20 4d 45 4d 5f 52 65 61 6c 29 3b 0a 20  ut, MEM_Real);. 
a500: 20 20 20 69 66 28 20 28 66 6c 61 67 73 20 26 20     if( (flags & 
a510: 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30 20 29 7b 0a  MEM_Real)==0 ){.
a520: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
a530: 65 49 6e 74 65 67 65 72 41 66 66 69 6e 69 74 79  eIntegerAffinity
a540: 28 70 4f 75 74 29 3b 0a 20 20 20 20 7d 0a 23 65  (pOut);.    }.#e
a550: 6e 64 69 66 0a 20 20 7d 0a 20 20 62 72 65 61 6b  ndif.  }.  break
a560: 3b 0a 0a 61 72 69 74 68 6d 65 74 69 63 5f 72 65  ;..arithmetic_re
a570: 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3a 0a 20 20  sult_is_null:.  
a580: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
a590: 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 62  tNull(pOut);.  b
a5a0: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
a5b0: 64 65 3a 20 43 6f 6c 6c 53 65 71 20 2a 20 2a 20  de: CollSeq * * 
a5c0: 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61  P4.**.** P4 is a
a5d0: 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 43 6f   pointer to a Co
a5e0: 6c 6c 53 65 71 20 73 74 72 75 63 74 2e 20 49 66  llSeq struct. If
a5f0: 20 74 68 65 20 6e 65 78 74 20 63 61 6c 6c 20 74   the next call t
a600: 6f 20 61 20 75 73 65 72 20 66 75 6e 63 74 69 6f  o a user functio
a610: 6e 0a 2a 2a 20 6f 72 20 61 67 67 72 65 67 61 74  n.** or aggregat
a620: 65 20 63 61 6c 6c 73 20 73 71 6c 69 74 65 33 47  e calls sqlite3G
a630: 65 74 46 75 6e 63 43 6f 6c 6c 53 65 71 28 29 2c  etFuncCollSeq(),
a640: 20 74 68 69 73 20 63 6f 6c 6c 61 74 69 6f 6e 20   this collation 
a650: 73 65 71 75 65 6e 63 65 20 77 69 6c 6c 0a 2a 2a  sequence will.**
a660: 20 62 65 20 72 65 74 75 72 6e 65 64 2e 20 54 68   be returned. Th
a670: 69 73 20 69 73 20 75 73 65 64 20 62 79 20 74 68  is is used by th
a680: 65 20 62 75 69 6c 74 2d 69 6e 20 6d 69 6e 28 29  e built-in min()
a690: 2c 20 6d 61 78 28 29 20 61 6e 64 20 6e 75 6c 6c  , max() and null
a6a0: 69 66 28 29 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e  if().** function
a6b0: 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 69 6e 74  s..**.** The int
a6c0: 65 72 66 61 63 65 20 75 73 65 64 20 62 79 20 74  erface used by t
a6d0: 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  he implementatio
a6e0: 6e 20 6f 66 20 74 68 65 20 61 66 6f 72 65 6d 65  n of the aforeme
a6f0: 6e 74 69 6f 6e 65 64 20 66 75 6e 63 74 69 6f 6e  ntioned function
a700: 73 0a 2a 2a 20 74 6f 20 72 65 74 72 69 65 76 65  s.** to retrieve
a710: 20 74 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20 73   the collation s
a720: 65 71 75 65 6e 63 65 20 73 65 74 20 62 79 20 74  equence set by t
a730: 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 6e 6f  his opcode is no
a740: 74 20 61 76 61 69 6c 61 62 6c 65 0a 2a 2a 20 70  t available.** p
a750: 75 62 6c 69 63 6c 79 2c 20 6f 6e 6c 79 20 74 6f  ublicly, only to
a760: 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 73 20   user functions 
a770: 64 65 66 69 6e 65 64 20 69 6e 20 66 75 6e 63 2e  defined in func.
a780: 63 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f  c..*/.case OP_Co
a790: 6c 6c 53 65 71 3a 20 7b 0a 20 20 61 73 73 65 72  llSeq: {.  asser
a7a0: 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  t( pOp->p4type==
a7b0: 50 34 5f 43 4f 4c 4c 53 45 51 20 29 3b 0a 20 20  P4_COLLSEQ );.  
a7c0: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
a7d0: 6f 64 65 3a 20 46 75 6e 63 74 69 6f 6e 20 50 31  ode: Function P1
a7e0: 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a   P2 P3 P4 P5.**.
a7f0: 2a 2a 20 49 6e 76 6f 6b 65 20 61 20 75 73 65 72  ** Invoke a user
a800: 20 66 75 6e 63 74 69 6f 6e 20 28 50 34 20 69 73   function (P4 is
a810: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20   a pointer to a 
a820: 46 75 6e 63 74 69 6f 6e 20 73 74 72 75 63 74 75  Function structu
a830: 72 65 20 74 68 61 74 0a 2a 2a 20 64 65 66 69 6e  re that.** defin
a840: 65 73 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 29  es the function)
a850: 20 77 69 74 68 20 50 35 20 61 72 67 75 6d 65 6e   with P5 argumen
a860: 74 73 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65  ts taken from re
a870: 67 69 73 74 65 72 20 50 32 20 61 6e 64 0a 2a 2a  gister P2 and.**
a880: 20 73 75 63 63 65 73 73 6f 72 73 2e 20 20 54 68   successors.  Th
a890: 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20  e result of the 
a8a0: 66 75 6e 63 74 69 6f 6e 20 69 73 20 73 74 6f 72  function is stor
a8b0: 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ed in register P
a8c0: 33 2e 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50  3..** Register P
a8d0: 33 20 6d 75 73 74 20 6e 6f 74 20 62 65 20 6f 6e  3 must not be on
a8e0: 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f  e of the functio
a8f0: 6e 20 69 6e 70 75 74 73 2e 0a 2a 2a 0a 2a 2a 20  n inputs..**.** 
a900: 50 31 20 69 73 20 61 20 33 32 2d 62 69 74 20 62  P1 is a 32-bit b
a910: 69 74 6d 61 73 6b 20 69 6e 64 69 63 61 74 69 6e  itmask indicatin
a920: 67 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  g whether or not
a930: 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74 20 74   each argument t
a940: 6f 20 74 68 65 20 0a 2a 2a 20 66 75 6e 63 74 69  o the .** functi
a950: 6f 6e 20 77 61 73 20 64 65 74 65 72 6d 69 6e 65  on was determine
a960: 64 20 74 6f 20 62 65 20 63 6f 6e 73 74 61 6e 74  d to be constant
a970: 20 61 74 20 63 6f 6d 70 69 6c 65 20 74 69 6d 65   at compile time
a980: 2e 20 49 66 20 74 68 65 20 66 69 72 73 74 0a 2a  . If the first.*
a990: 2a 20 61 72 67 75 6d 65 6e 74 20 77 61 73 20 63  * argument was c
a9a0: 6f 6e 73 74 61 6e 74 20 74 68 65 6e 20 62 69 74  onstant then bit
a9b0: 20 30 20 6f 66 20 50 31 20 69 73 20 73 65 74 2e   0 of P1 is set.
a9c0: 20 54 68 69 73 20 69 73 20 75 73 65 64 20 74 6f   This is used to
a9d0: 20 64 65 74 65 72 6d 69 6e 65 0a 2a 2a 20 77 68   determine.** wh
a9e0: 65 74 68 65 72 20 6d 65 74 61 20 64 61 74 61 20  ether meta data 
a9f0: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
aa00: 61 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20  a user function 
aa10: 61 72 67 75 6d 65 6e 74 20 75 73 69 6e 67 20 74  argument using t
aa20: 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 73 65  he.** sqlite3_se
aa30: 74 5f 61 75 78 64 61 74 61 28 29 20 41 50 49 20  t_auxdata() API 
aa40: 6d 61 79 20 62 65 20 73 61 66 65 6c 79 20 72 65  may be safely re
aa50: 74 61 69 6e 65 64 20 75 6e 74 69 6c 20 74 68 65  tained until the
aa60: 20 6e 65 78 74 0a 2a 2a 20 69 6e 76 6f 63 61 74   next.** invocat
aa70: 69 6f 6e 20 6f 66 20 74 68 69 73 20 6f 70 63 6f  ion of this opco
aa80: 64 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  de..**.** See al
aa90: 73 6f 3a 20 41 67 67 53 74 65 70 20 61 6e 64 20  so: AggStep and 
aaa0: 41 67 67 46 69 6e 61 6c 0a 2a 2f 0a 63 61 73 65  AggFinal.*/.case
aab0: 20 4f 50 5f 46 75 6e 63 74 69 6f 6e 3a 20 7b 0a   OP_Function: {.
aac0: 20 20 69 6e 74 20 69 3b 0a 20 20 4d 65 6d 20 2a    int i;.  Mem *
aad0: 70 41 72 67 3b 0a 20 20 73 71 6c 69 74 65 33 5f  pArg;.  sqlite3_
aae0: 63 6f 6e 74 65 78 74 20 63 74 78 3b 0a 20 20 73  context ctx;.  s
aaf0: 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61  qlite3_value **a
ab00: 70 56 61 6c 3b 0a 20 20 69 6e 74 20 6e 3b 0a 0a  pVal;.  int n;..
ab10: 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 35 3b 0a 20    n = pOp->p5;. 
ab20: 20 61 70 56 61 6c 20 3d 20 70 2d 3e 61 70 41 72   apVal = p->apAr
ab30: 67 3b 0a 20 20 61 73 73 65 72 74 28 20 61 70 56  g;.  assert( apV
ab40: 61 6c 20 7c 7c 20 6e 3d 3d 30 20 29 3b 0a 20 20  al || n==0 );.  
ab50: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e  assert( pOp->p3>
ab60: 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d  0 && pOp->p3<=p-
ab70: 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 4f 75 74 20  >nMem );.  pOut 
ab80: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
ab90: 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68  ;.  memAboutToCh
aba0: 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 0a  ange(p, pOut);..
abb0: 20 20 61 73 73 65 72 74 28 20 6e 3d 3d 30 20 7c    assert( n==0 |
abc0: 7c 20 28 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20  | (pOp->p2>0 && 
abd0: 70 4f 70 2d 3e 70 32 2b 6e 3c 3d 70 2d 3e 6e 4d  pOp->p2+n<=p->nM
abe0: 65 6d 2b 31 29 20 29 3b 0a 20 20 61 73 73 65 72  em+1) );.  asser
abf0: 74 28 20 70 4f 70 2d 3e 70 33 3c 70 4f 70 2d 3e  t( pOp->p3<pOp->
ac00: 70 32 20 7c 7c 20 70 4f 70 2d 3e 70 33 3e 3d 70  p2 || pOp->p3>=p
ac10: 4f 70 2d 3e 70 32 2b 6e 20 29 3b 0a 20 20 70 41  Op->p2+n );.  pA
ac20: 72 67 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  rg = &aMem[pOp->
ac30: 70 32 5d 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20  p2];.  for(i=0; 
ac40: 69 3c 6e 3b 20 69 2b 2b 2c 20 70 41 72 67 2b 2b  i<n; i++, pArg++
ac50: 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d  ){.    assert( m
ac60: 65 6d 49 73 56 61 6c 69 64 28 70 41 72 67 29 20  emIsValid(pArg) 
ac70: 29 3b 0a 20 20 20 20 61 70 56 61 6c 5b 69 5d 20  );.    apVal[i] 
ac80: 3d 20 70 41 72 67 3b 0a 20 20 20 20 44 65 65 70  = pArg;.    Deep
ac90: 68 65 6d 65 72 61 6c 69 7a 65 28 70 41 72 67 29  hemeralize(pArg)
aca0: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
acb0: 65 4d 65 6d 53 74 6f 72 65 54 79 70 65 28 70 41  eMemStoreType(pA
acc0: 72 67 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45  rg);.    REGISTE
acd0: 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2b  R_TRACE(pOp->p2+
ace0: 69 2c 20 70 41 72 67 29 3b 0a 20 20 7d 0a 0a 20  i, pArg);.  }.. 
acf0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
ad00: 74 79 70 65 3d 3d 50 34 5f 46 55 4e 43 44 45 46  type==P4_FUNCDEF
ad10: 20 7c 7c 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d   || pOp->p4type=
ad20: 3d 50 34 5f 56 44 42 45 46 55 4e 43 20 29 3b 0a  =P4_VDBEFUNC );.
ad30: 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70    if( pOp->p4typ
ad40: 65 3d 3d 50 34 5f 46 55 4e 43 44 45 46 20 29 7b  e==P4_FUNCDEF ){
ad50: 0a 20 20 20 20 63 74 78 2e 70 46 75 6e 63 20 3d  .    ctx.pFunc =
ad60: 20 70 4f 70 2d 3e 70 34 2e 70 46 75 6e 63 3b 0a   pOp->p4.pFunc;.
ad70: 20 20 20 20 63 74 78 2e 70 56 64 62 65 46 75 6e      ctx.pVdbeFun
ad80: 63 20 3d 20 30 3b 0a 20 20 7d 65 6c 73 65 7b 0a  c = 0;.  }else{.
ad90: 20 20 20 20 63 74 78 2e 70 56 64 62 65 46 75 6e      ctx.pVdbeFun
ada0: 63 20 3d 20 28 56 64 62 65 46 75 6e 63 2a 29 70  c = (VdbeFunc*)p
adb0: 4f 70 2d 3e 70 34 2e 70 56 64 62 65 46 75 6e 63  Op->p4.pVdbeFunc
adc0: 3b 0a 20 20 20 20 63 74 78 2e 70 46 75 6e 63 20  ;.    ctx.pFunc 
add0: 3d 20 63 74 78 2e 70 56 64 62 65 46 75 6e 63 2d  = ctx.pVdbeFunc-
ade0: 3e 70 46 75 6e 63 3b 0a 20 20 7d 0a 0a 20 20 63  >pFunc;.  }..  c
adf0: 74 78 2e 73 2e 66 6c 61 67 73 20 3d 20 4d 45 4d  tx.s.flags = MEM
ae00: 5f 4e 75 6c 6c 3b 0a 20 20 63 74 78 2e 73 2e 64  _Null;.  ctx.s.d
ae10: 62 20 3d 20 64 62 3b 0a 20 20 63 74 78 2e 73 2e  b = db;.  ctx.s.
ae20: 78 44 65 6c 20 3d 20 30 3b 0a 20 20 63 74 78 2e  xDel = 0;.  ctx.
ae30: 73 2e 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a 0a  s.zMalloc = 0;..
ae40: 20 20 2f 2a 20 54 68 65 20 6f 75 74 70 75 74 20    /* The output 
ae50: 63 65 6c 6c 20 6d 61 79 20 61 6c 72 65 61 64 79  cell may already
ae60: 20 68 61 76 65 20 61 20 62 75 66 66 65 72 20 61   have a buffer a
ae70: 6c 6c 6f 63 61 74 65 64 2e 20 4d 6f 76 65 0a 20  llocated. Move. 
ae80: 20 2a 2a 20 74 68 65 20 70 6f 69 6e 74 65 72 20   ** the pointer 
ae90: 74 6f 20 63 74 78 2e 73 20 73 6f 20 69 6e 20 63  to ctx.s so in c
aea0: 61 73 65 20 74 68 65 20 75 73 65 72 2d 66 75 6e  ase the user-fun
aeb0: 63 74 69 6f 6e 20 63 61 6e 20 75 73 65 0a 20 20  ction can use.  
aec0: 2a 2a 20 74 68 65 20 61 6c 72 65 61 64 79 20 61  ** the already a
aed0: 6c 6c 6f 63 61 74 65 64 20 62 75 66 66 65 72 20  llocated buffer 
aee0: 69 6e 73 74 65 61 64 20 6f 66 20 61 6c 6c 6f 63  instead of alloc
aef0: 61 74 69 6e 67 20 61 20 6e 65 77 20 6f 6e 65 2e  ating a new one.
af00: 0a 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56  .  */.  sqlite3V
af10: 64 62 65 4d 65 6d 4d 6f 76 65 28 26 63 74 78 2e  dbeMemMove(&ctx.
af20: 73 2c 20 70 4f 75 74 29 3b 0a 20 20 4d 65 6d 53  s, pOut);.  MemS
af30: 65 74 54 79 70 65 46 6c 61 67 28 26 63 74 78 2e  etTypeFlag(&ctx.
af40: 73 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 0a 20  s, MEM_Null);.. 
af50: 20 63 74 78 2e 69 73 45 72 72 6f 72 20 3d 20 30   ctx.isError = 0
af60: 3b 0a 20 20 69 66 28 20 63 74 78 2e 70 46 75 6e  ;.  if( ctx.pFun
af70: 63 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54  c->flags & SQLIT
af80: 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20  E_FUNC_NEEDCOLL 
af90: 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ){.    assert( p
afa0: 4f 70 3e 61 4f 70 20 29 3b 0a 20 20 20 20 61 73  Op>aOp );.    as
afb0: 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 70 34  sert( pOp[-1].p4
afc0: 74 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51  type==P4_COLLSEQ
afd0: 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
afe0: 70 4f 70 5b 2d 31 5d 2e 6f 70 63 6f 64 65 3d 3d  pOp[-1].opcode==
aff0: 4f 50 5f 43 6f 6c 6c 53 65 71 20 29 3b 0a 20 20  OP_CollSeq );.  
b000: 20 20 63 74 78 2e 70 43 6f 6c 6c 20 3d 20 70 4f    ctx.pColl = pO
b010: 70 5b 2d 31 5d 2e 70 34 2e 70 43 6f 6c 6c 3b 0a  p[-1].p4.pColl;.
b020: 20 20 7d 0a 20 20 64 62 2d 3e 6c 61 73 74 52 6f    }.  db->lastRo
b030: 77 69 64 20 3d 20 6c 61 73 74 52 6f 77 69 64 3b  wid = lastRowid;
b040: 0a 20 20 28 2a 63 74 78 2e 70 46 75 6e 63 2d 3e  .  (*ctx.pFunc->
b050: 78 46 75 6e 63 29 28 26 63 74 78 2c 20 6e 2c 20  xFunc)(&ctx, n, 
b060: 61 70 56 61 6c 29 3b 20 2f 2a 20 49 4d 50 3a 20  apVal); /* IMP: 
b070: 52 2d 32 34 35 30 35 2d 32 33 32 33 30 20 2a 2f  R-24505-23230 */
b080: 0a 20 20 6c 61 73 74 52 6f 77 69 64 20 3d 20 64  .  lastRowid = d
b090: 62 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 0a 0a 20  b->lastRowid;.. 
b0a0: 20 2f 2a 20 49 66 20 61 6e 79 20 61 75 78 69 6c   /* If any auxil
b0b0: 69 61 72 79 20 64 61 74 61 20 66 75 6e 63 74 69  iary data functi
b0c0: 6f 6e 73 20 68 61 76 65 20 62 65 65 6e 20 63 61  ons have been ca
b0d0: 6c 6c 65 64 20 62 79 20 74 68 69 73 20 75 73 65  lled by this use
b0e0: 72 20 66 75 6e 63 74 69 6f 6e 2c 0a 20 20 2a 2a  r function,.  **
b0f0: 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 63 61 6c   immediately cal
b100: 6c 20 74 68 65 20 64 65 73 74 72 75 63 74 6f 72  l the destructor
b110: 20 66 6f 72 20 61 6e 79 20 6e 6f 6e 2d 73 74 61   for any non-sta
b120: 74 69 63 20 76 61 6c 75 65 73 2e 0a 20 20 2a 2f  tic values..  */
b130: 0a 20 20 69 66 28 20 63 74 78 2e 70 56 64 62 65  .  if( ctx.pVdbe
b140: 46 75 6e 63 20 29 7b 0a 20 20 20 20 73 71 6c 69  Func ){.    sqli
b150: 74 65 33 56 64 62 65 44 65 6c 65 74 65 41 75 78  te3VdbeDeleteAux
b160: 44 61 74 61 28 63 74 78 2e 70 56 64 62 65 46 75  Data(ctx.pVdbeFu
b170: 6e 63 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20  nc, pOp->p1);.  
b180: 20 20 70 4f 70 2d 3e 70 34 2e 70 56 64 62 65 46    pOp->p4.pVdbeF
b190: 75 6e 63 20 3d 20 63 74 78 2e 70 56 64 62 65 46  unc = ctx.pVdbeF
b1a0: 75 6e 63 3b 0a 20 20 20 20 70 4f 70 2d 3e 70 34  unc;.    pOp->p4
b1b0: 74 79 70 65 20 3d 20 50 34 5f 56 44 42 45 46 55  type = P4_VDBEFU
b1c0: 4e 43 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 64  NC;.  }..  if( d
b1d0: 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20  b->mallocFailed 
b1e0: 29 7b 0a 20 20 20 20 2f 2a 20 45 76 65 6e 20 74  ){.    /* Even t
b1f0: 68 6f 75 67 68 20 61 20 6d 61 6c 6c 6f 63 28 29  hough a malloc()
b200: 20 68 61 73 20 66 61 69 6c 65 64 2c 20 74 68 65   has failed, the
b210: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
b220: 6f 66 20 74 68 65 0a 20 20 20 20 2a 2a 20 75 73  of the.    ** us
b230: 65 72 20 66 75 6e 63 74 69 6f 6e 20 6d 61 79 20  er function may 
b240: 68 61 76 65 20 63 61 6c 6c 65 64 20 61 6e 20 73  have called an s
b250: 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 58 58  qlite3_result_XX
b260: 58 28 29 20 66 75 6e 63 74 69 6f 6e 0a 20 20 20  X() function.   
b270: 20 2a 2a 20 74 6f 20 72 65 74 75 72 6e 20 61 20   ** to return a 
b280: 76 61 6c 75 65 2e 20 54 68 65 20 66 6f 6c 6c 6f  value. The follo
b290: 77 69 6e 67 20 63 61 6c 6c 20 72 65 6c 65 61 73  wing call releas
b2a0: 65 73 20 61 6e 79 20 72 65 73 6f 75 72 63 65 73  es any resources
b2b0: 0a 20 20 20 20 2a 2a 20 61 73 73 6f 63 69 61 74  .    ** associat
b2c0: 65 64 20 77 69 74 68 20 73 75 63 68 20 61 20 76  ed with such a v
b2d0: 61 6c 75 65 2e 0a 20 20 20 20 2a 2f 0a 20 20 20  alue..    */.   
b2e0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52   sqlite3VdbeMemR
b2f0: 65 6c 65 61 73 65 28 26 63 74 78 2e 73 29 3b 0a  elease(&ctx.s);.
b300: 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b      goto no_mem;
b310: 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20 74 68  .  }..  /* If th
b320: 65 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  e function retur
b330: 6e 65 64 20 61 6e 20 65 72 72 6f 72 2c 20 74 68  ned an error, th
b340: 72 6f 77 20 61 6e 20 65 78 63 65 70 74 69 6f 6e  row an exception
b350: 20 2a 2f 0a 20 20 69 66 28 20 63 74 78 2e 69 73   */.  if( ctx.is
b360: 45 72 72 6f 72 20 29 7b 0a 20 20 20 20 73 71 6c  Error ){.    sql
b370: 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70  ite3SetString(&p
b380: 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22  ->zErrMsg, db, "
b390: 25 73 22 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c  %s", sqlite3_val
b3a0: 75 65 5f 74 65 78 74 28 26 63 74 78 2e 73 29 29  ue_text(&ctx.s))
b3b0: 3b 0a 20 20 20 20 72 63 20 3d 20 63 74 78 2e 69  ;.    rc = ctx.i
b3c0: 73 45 72 72 6f 72 3b 0a 20 20 7d 0a 0a 20 20 2f  sError;.  }..  /
b3d0: 2a 20 43 6f 70 79 20 74 68 65 20 72 65 73 75 6c  * Copy the resul
b3e0: 74 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f  t of the functio
b3f0: 6e 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  n into register 
b400: 50 33 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56  P3 */.  sqlite3V
b410: 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e  dbeChangeEncodin
b420: 67 28 26 63 74 78 2e 73 2c 20 65 6e 63 6f 64 69  g(&ctx.s, encodi
b430: 6e 67 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  ng);.  sqlite3Vd
b440: 62 65 4d 65 6d 4d 6f 76 65 28 70 4f 75 74 2c 20  beMemMove(pOut, 
b450: 26 63 74 78 2e 73 29 3b 0a 20 20 69 66 28 20 73  &ctx.s);.  if( s
b460: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f  qlite3VdbeMemToo
b470: 42 69 67 28 70 4f 75 74 29 20 29 7b 0a 20 20 20  Big(pOut) ){.   
b480: 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20   goto too_big;. 
b490: 20 7d 0a 0a 23 69 66 20 30 0a 20 20 2f 2a 20 54   }..#if 0.  /* T
b4a0: 68 65 20 61 70 70 2d 64 65 66 69 6e 65 64 20 66  he app-defined f
b4b0: 75 6e 63 74 69 6f 6e 20 68 61 73 20 64 6f 6e 65  unction has done
b4c0: 20 73 6f 6d 65 74 68 69 6e 67 20 74 68 61 74 20   something that 
b4d0: 61 73 20 63 61 75 73 65 64 20 74 68 69 73 0a 20  as caused this. 
b4e0: 20 2a 2a 20 73 74 61 74 65 6d 65 6e 74 20 74 6f   ** statement to
b4f0: 20 65 78 70 69 72 65 2e 20 20 28 50 65 72 68 61   expire.  (Perha
b500: 70 73 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20  ps the function 
b510: 63 61 6c 6c 65 64 20 73 71 6c 69 74 65 33 5f 65  called sqlite3_e
b520: 78 65 63 28 29 0a 20 20 2a 2a 20 77 69 74 68 20  xec().  ** with 
b530: 61 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 73  a CREATE TABLE s
b540: 74 61 74 65 6d 65 6e 74 2e 29 0a 20 20 2a 2f 0a  tatement.).  */.
b550: 20 20 69 66 28 20 70 2d 3e 65 78 70 69 72 65 64    if( p->expired
b560: 20 29 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 41   ) rc = SQLITE_A
b570: 42 4f 52 54 3b 0a 23 65 6e 64 69 66 0a 0a 20 20  BORT;.#endif..  
b580: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
b590: 4f 70 2d 3e 70 33 2c 20 70 4f 75 74 29 3b 0a 20  Op->p3, pOut);. 
b5a0: 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42   UPDATE_MAX_BLOB
b5b0: 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72  SIZE(pOut);.  br
b5c0: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
b5d0: 65 3a 20 42 69 74 41 6e 64 20 50 31 20 50 32 20  e: BitAnd P1 P2 
b5e0: 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 61 6b  P3 * *.**.** Tak
b5f0: 65 20 74 68 65 20 62 69 74 2d 77 69 73 65 20 41  e the bit-wise A
b600: 4e 44 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73  ND of the values
b610: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
b620: 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20 73 74  and P2 and.** st
b630: 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69  ore the result i
b640: 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  n register P3..*
b650: 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75  * If either inpu
b660: 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72  t is NULL, the r
b670: 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a  esult is NULL..*
b680: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 69 74  /./* Opcode: Bit
b690: 4f 72 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  Or P1 P2 P3 * *.
b6a0: 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20 62  **.** Take the b
b6b0: 69 74 2d 77 69 73 65 20 4f 52 20 6f 66 20 74 68  it-wise OR of th
b6c0: 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69  e values in regi
b6d0: 73 74 65 72 20 50 31 20 61 6e 64 20 50 32 20 61  ster P1 and P2 a
b6e0: 6e 64 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65 20  nd.** store the 
b6f0: 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74  result in regist
b700: 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74  er P3..** If eit
b710: 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c  her input is NUL
b720: 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  L, the result is
b730: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63   NULL..*/./* Opc
b740: 6f 64 65 3a 20 53 68 69 66 74 4c 65 66 74 20 50  ode: ShiftLeft P
b750: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
b760: 2a 20 53 68 69 66 74 20 74 68 65 20 69 6e 74 65  * Shift the inte
b770: 67 65 72 20 76 61 6c 75 65 20 69 6e 20 72 65 67  ger value in reg
b780: 69 73 74 65 72 20 50 32 20 74 6f 20 74 68 65 20  ister P2 to the 
b790: 6c 65 66 74 20 62 79 20 74 68 65 0a 2a 2a 20 6e  left by the.** n
b7a0: 75 6d 62 65 72 20 6f 66 20 62 69 74 73 20 73 70  umber of bits sp
b7b0: 65 63 69 66 69 65 64 20 62 79 20 74 68 65 20 69  ecified by the i
b7c0: 6e 74 65 67 65 72 20 69 6e 20 72 65 67 69 73 74  nteger in regist
b7d0: 65 72 20 50 31 2e 0a 2a 2a 20 53 74 6f 72 65 20  er P1..** Store 
b7e0: 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65  the result in re
b7f0: 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66  gister P3..** If
b800: 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73   either input is
b810: 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c   NULL, the resul
b820: 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a  t is NULL..*/./*
b830: 20 4f 70 63 6f 64 65 3a 20 53 68 69 66 74 52 69   Opcode: ShiftRi
b840: 67 68 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a  ght P1 P2 P3 * *
b850: 0a 2a 2a 0a 2a 2a 20 53 68 69 66 74 20 74 68 65  .**.** Shift the
b860: 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69   integer value i
b870: 6e 20 72 65 67 69 73 74 65 72 20 50 32 20 74 6f  n register P2 to
b880: 20 74 68 65 20 72 69 67 68 74 20 62 79 20 74 68   the right by th
b890: 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 62  e.** number of b
b8a0: 69 74 73 20 73 70 65 63 69 66 69 65 64 20 62 79  its specified by
b8b0: 20 74 68 65 20 69 6e 74 65 67 65 72 20 69 6e 20   the integer in 
b8c0: 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 20  register P1..** 
b8d0: 53 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74  Store the result
b8e0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e   in register P3.
b8f0: 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e  .** If either in
b900: 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65  put is NULL, the
b910: 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e   result is NULL.
b920: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 69 74 41  .*/.case OP_BitA
b930: 6e 64 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  nd:             
b940: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
b950: 4b 5f 42 49 54 41 4e 44 2c 20 69 6e 31 2c 20 69  K_BITAND, in1, i
b960: 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65  n2, out3 */.case
b970: 20 4f 50 5f 42 69 74 4f 72 3a 20 20 20 20 20 20   OP_BitOr:      
b980: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
b990: 61 6d 65 20 61 73 20 54 4b 5f 42 49 54 4f 52 2c  ame as TK_BITOR,
b9a0: 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20   in1, in2, out3 
b9b0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 68 69 66 74  */.case OP_Shift
b9c0: 4c 65 66 74 3a 20 20 20 20 20 20 20 20 20 20 20  Left:           
b9d0: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
b9e0: 5f 4c 53 48 49 46 54 2c 20 69 6e 31 2c 20 69 6e  _LSHIFT, in1, in
b9f0: 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20  2, out3 */.case 
ba00: 4f 50 5f 53 68 69 66 74 52 69 67 68 74 3a 20 7b  OP_ShiftRight: {
ba10: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
ba20: 6d 65 20 61 73 20 54 4b 5f 52 53 48 49 46 54 2c  me as TK_RSHIFT,
ba30: 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20   in1, in2, out3 
ba40: 2a 2f 0a 20 20 69 36 34 20 69 41 3b 0a 20 20 75  */.  i64 iA;.  u
ba50: 36 34 20 75 41 3b 0a 20 20 69 36 34 20 69 42 3b  64 uA;.  i64 iB;
ba60: 0a 20 20 75 38 20 6f 70 3b 0a 0a 20 20 70 49 6e  .  u8 op;..  pIn
ba70: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
ba80: 31 5d 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d  1];.  pIn2 = &aM
ba90: 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70  em[pOp->p2];.  p
baa0: 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
bab0: 3e 70 33 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e  >p3];.  if( (pIn
bac0: 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49 6e 32 2d  1->flags | pIn2-
bad0: 3e 66 6c 61 67 73 29 20 26 20 4d 45 4d 5f 4e 75  >flags) & MEM_Nu
bae0: 6c 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  ll ){.    sqlite
baf0: 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28  3VdbeMemSetNull(
bb00: 70 4f 75 74 29 3b 0a 20 20 20 20 62 72 65 61 6b  pOut);.    break
bb10: 3b 0a 20 20 7d 0a 20 20 69 41 20 3d 20 73 71 6c  ;.  }.  iA = sql
bb20: 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65  ite3VdbeIntValue
bb30: 28 70 49 6e 32 29 3b 0a 20 20 69 42 20 3d 20 73  (pIn2);.  iB = s
bb40: 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c  qlite3VdbeIntVal
bb50: 75 65 28 70 49 6e 31 29 3b 0a 20 20 6f 70 20 3d  ue(pIn1);.  op =
bb60: 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a 20 20   pOp->opcode;.  
bb70: 69 66 28 20 6f 70 3d 3d 4f 50 5f 42 69 74 41 6e  if( op==OP_BitAn
bb80: 64 20 29 7b 0a 20 20 20 20 69 41 20 26 3d 20 69  d ){.    iA &= i
bb90: 42 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 6f  B;.  }else if( o
bba0: 70 3d 3d 4f 50 5f 42 69 74 4f 72 20 29 7b 0a 20  p==OP_BitOr ){. 
bbb0: 20 20 20 69 41 20 7c 3d 20 69 42 3b 0a 20 20 7d     iA |= iB;.  }
bbc0: 65 6c 73 65 20 69 66 28 20 69 42 21 3d 30 20 29  else if( iB!=0 )
bbd0: 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6f 70  {.    assert( op
bbe0: 3d 3d 4f 50 5f 53 68 69 66 74 52 69 67 68 74 20  ==OP_ShiftRight 
bbf0: 7c 7c 20 6f 70 3d 3d 4f 50 5f 53 68 69 66 74 4c  || op==OP_ShiftL
bc00: 65 66 74 20 29 3b 0a 0a 20 20 20 20 2f 2a 20 49  eft );..    /* I
bc10: 66 20 73 68 69 66 74 69 6e 67 20 62 79 20 61 20  f shifting by a 
bc20: 6e 65 67 61 74 69 76 65 20 61 6d 6f 75 6e 74 2c  negative amount,
bc30: 20 73 68 69 66 74 20 69 6e 20 74 68 65 20 6f 74   shift in the ot
bc40: 68 65 72 20 64 69 72 65 63 74 69 6f 6e 20 2a 2f  her direction */
bc50: 0a 20 20 20 20 69 66 28 20 69 42 3c 30 20 29 7b  .    if( iB<0 ){
bc60: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 4f  .      assert( O
bc70: 50 5f 53 68 69 66 74 52 69 67 68 74 3d 3d 4f 50  P_ShiftRight==OP
bc80: 5f 53 68 69 66 74 4c 65 66 74 2b 31 20 29 3b 0a  _ShiftLeft+1 );.
bc90: 20 20 20 20 20 20 6f 70 20 3d 20 32 2a 4f 50 5f        op = 2*OP_
bca0: 53 68 69 66 74 4c 65 66 74 20 2b 20 31 20 2d 20  ShiftLeft + 1 - 
bcb0: 6f 70 3b 0a 20 20 20 20 20 20 69 42 20 3d 20 69  op;.      iB = i
bcc0: 42 3e 28 2d 36 34 29 20 3f 20 2d 69 42 20 3a 20  B>(-64) ? -iB : 
bcd0: 36 34 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69  64;.    }..    i
bce0: 66 28 20 69 42 3e 3d 36 34 20 29 7b 0a 20 20 20  f( iB>=64 ){.   
bcf0: 20 20 20 69 41 20 3d 20 28 69 41 3e 3d 30 20 7c     iA = (iA>=0 |
bd00: 7c 20 6f 70 3d 3d 4f 50 5f 53 68 69 66 74 4c 65  | op==OP_ShiftLe
bd10: 66 74 29 20 3f 20 30 20 3a 20 2d 31 3b 0a 20 20  ft) ? 0 : -1;.  
bd20: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 6d    }else{.      m
bd30: 65 6d 63 70 79 28 26 75 41 2c 20 26 69 41 2c 20  emcpy(&uA, &iA, 
bd40: 73 69 7a 65 6f 66 28 75 41 29 29 3b 0a 20 20 20  sizeof(uA));.   
bd50: 20 20 20 69 66 28 20 6f 70 3d 3d 4f 50 5f 53 68     if( op==OP_Sh
bd60: 69 66 74 4c 65 66 74 20 29 7b 0a 20 20 20 20 20  iftLeft ){.     
bd70: 20 20 20 75 41 20 3c 3c 3d 20 69 42 3b 0a 20 20     uA <<= iB;.  
bd80: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
bd90: 20 20 20 75 41 20 3e 3e 3d 20 69 42 3b 0a 20 20     uA >>= iB;.  
bda0: 20 20 20 20 20 20 2f 2a 20 53 69 67 6e 2d 65 78        /* Sign-ex
bdb0: 74 65 6e 64 20 6f 6e 20 61 20 72 69 67 68 74 20  tend on a right 
bdc0: 73 68 69 66 74 20 6f 66 20 61 20 6e 65 67 61 74  shift of a negat
bdd0: 69 76 65 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20  ive number */.  
bde0: 20 20 20 20 20 20 69 66 28 20 69 41 3c 30 20 29        if( iA<0 )
bdf0: 20 75 41 20 7c 3d 20 28 28 28 28 75 36 34 29 30   uA |= ((((u64)0
be00: 78 66 66 66 66 66 66 66 66 29 3c 3c 33 32 29 7c  xffffffff)<<32)|
be10: 30 78 66 66 66 66 66 66 66 66 29 20 3c 3c 20 28  0xffffffff) << (
be20: 36 34 2d 69 42 29 3b 0a 20 20 20 20 20 20 7d 0a  64-iB);.      }.
be30: 20 20 20 20 20 20 6d 65 6d 63 70 79 28 26 69 41        memcpy(&iA
be40: 2c 20 26 75 41 2c 20 73 69 7a 65 6f 66 28 69 41  , &uA, sizeof(iA
be50: 29 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  ));.    }.  }.  
be60: 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 41 3b 0a  pOut->u.i = iA;.
be70: 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
be80: 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b  (pOut, MEM_Int);
be90: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
bea0: 4f 70 63 6f 64 65 3a 20 41 64 64 49 6d 6d 20 20  Opcode: AddImm  
beb0: 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 0a  P1 P2 * * *.** .
bec0: 2a 2a 20 41 64 64 20 74 68 65 20 63 6f 6e 73 74  ** Add the const
bed0: 61 6e 74 20 50 32 20 74 6f 20 74 68 65 20 76 61  ant P2 to the va
bee0: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
bef0: 50 31 2e 0a 2a 2a 20 54 68 65 20 72 65 73 75 6c  P1..** The resul
bf00: 74 20 69 73 20 61 6c 77 61 79 73 20 61 6e 20 69  t is always an i
bf10: 6e 74 65 67 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 6f  nteger..**.** To
bf20: 20 66 6f 72 63 65 20 61 6e 79 20 72 65 67 69 73   force any regis
bf30: 74 65 72 20 74 6f 20 62 65 20 61 6e 20 69 6e 74  ter to be an int
bf40: 65 67 65 72 2c 20 6a 75 73 74 20 61 64 64 20 30  eger, just add 0
bf50: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 64 64  ..*/.case OP_Add
bf60: 49 6d 6d 3a 20 7b 20 20 20 20 20 20 20 20 20 20  Imm: {          
bf70: 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 70 49    /* in1 */.  pI
bf80: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
bf90: 70 31 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54  p1];.  memAboutT
bfa0: 6f 43 68 61 6e 67 65 28 70 2c 20 70 49 6e 31 29  oChange(p, pIn1)
bfb0: 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
bfc0: 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e  emIntegerify(pIn
bfd0: 31 29 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 20  1);.  pIn1->u.i 
bfe0: 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 62 72  += pOp->p2;.  br
bff0: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
c000: 65 3a 20 4d 75 73 74 42 65 49 6e 74 20 50 31 20  e: MustBeInt P1 
c010: 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 0a 2a 2a 20  P2 * * *.** .** 
c020: 46 6f 72 63 65 20 74 68 65 20 76 61 6c 75 65 20  Force the value 
c030: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 74  in register P1 t
c040: 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72 2e  o be an integer.
c050: 20 20 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a    If the value.*
c060: 2a 20 69 6e 20 50 31 20 69 73 20 6e 6f 74 20 61  * in P1 is not a
c070: 6e 20 69 6e 74 65 67 65 72 20 61 6e 64 20 63 61  n integer and ca
c080: 6e 6e 6f 74 20 62 65 20 63 6f 6e 76 65 72 74 65  nnot be converte
c090: 64 20 69 6e 74 6f 20 61 6e 20 69 6e 74 65 67 65  d into an intege
c0a0: 72 0a 2a 2a 20 77 69 74 68 6f 75 74 20 64 61 74  r.** without dat
c0b0: 61 20 6c 6f 73 73 2c 20 74 68 65 6e 20 6a 75 6d  a loss, then jum
c0c0: 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f  p immediately to
c0d0: 20 50 32 2c 20 6f 72 20 69 66 20 50 32 3d 3d 30   P2, or if P2==0
c0e0: 0a 2a 2a 20 72 61 69 73 65 20 61 6e 20 53 51 4c  .** raise an SQL
c0f0: 49 54 45 5f 4d 49 53 4d 41 54 43 48 20 65 78 63  ITE_MISMATCH exc
c100: 65 70 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20  eption..*/.case 
c110: 4f 50 5f 4d 75 73 74 42 65 49 6e 74 3a 20 7b 20  OP_MustBeInt: { 
c120: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75             /* ju
c130: 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e  mp, in1 */.  pIn
c140: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
c150: 31 5d 3b 0a 20 20 61 70 70 6c 79 41 66 66 69 6e  1];.  applyAffin
c160: 69 74 79 28 70 49 6e 31 2c 20 53 51 4c 49 54 45  ity(pIn1, SQLITE
c170: 5f 41 46 46 5f 4e 55 4d 45 52 49 43 2c 20 65 6e  _AFF_NUMERIC, en
c180: 63 6f 64 69 6e 67 29 3b 0a 20 20 69 66 28 20 28  coding);.  if( (
c190: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
c1a0: 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20  M_Int)==0 ){.   
c1b0: 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 30 20   if( pOp->p2==0 
c1c0: 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51  ){.      rc = SQ
c1d0: 4c 49 54 45 5f 4d 49 53 4d 41 54 43 48 3b 0a 20  LITE_MISMATCH;. 
c1e0: 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
c1f0: 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
c200: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 70    }else{.      p
c210: 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
c220: 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a  .    }.  }else{.
c230: 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c      MemSetTypeFl
c240: 61 67 28 70 49 6e 31 2c 20 4d 45 4d 5f 49 6e 74  ag(pIn1, MEM_Int
c250: 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
c260: 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  }..#ifndef SQLIT
c270: 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f  E_OMIT_FLOATING_
c280: 50 4f 49 4e 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a  POINT./* Opcode:
c290: 20 52 65 61 6c 41 66 66 69 6e 69 74 79 20 50 31   RealAffinity P1
c2a0: 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49   * * * *.**.** I
c2b0: 66 20 72 65 67 69 73 74 65 72 20 50 31 20 68 6f  f register P1 ho
c2c0: 6c 64 73 20 61 6e 20 69 6e 74 65 67 65 72 20 63  lds an integer c
c2d0: 6f 6e 76 65 72 74 20 69 74 20 74 6f 20 61 20 72  onvert it to a r
c2e0: 65 61 6c 20 76 61 6c 75 65 2e 0a 2a 2a 0a 2a 2a  eal value..**.**
c2f0: 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20   This opcode is 
c300: 75 73 65 64 20 77 68 65 6e 20 65 78 74 72 61 63  used when extrac
c310: 74 69 6e 67 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  ting information
c320: 20 66 72 6f 6d 20 61 20 63 6f 6c 75 6d 6e 20 74   from a column t
c330: 68 61 74 0a 2a 2a 20 68 61 73 20 52 45 41 4c 20  hat.** has REAL 
c340: 61 66 66 69 6e 69 74 79 2e 20 20 53 75 63 68 20  affinity.  Such 
c350: 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 73 20 6d 61  column values ma
c360: 79 20 73 74 69 6c 6c 20 62 65 20 73 74 6f 72 65  y still be store
c370: 64 20 61 73 0a 2a 2a 20 69 6e 74 65 67 65 72 73  d as.** integers
c380: 2c 20 66 6f 72 20 73 70 61 63 65 20 65 66 66 69  , for space effi
c390: 63 69 65 6e 63 79 2c 20 62 75 74 20 61 66 74 65  ciency, but afte
c3a0: 72 20 65 78 74 72 61 63 74 69 6f 6e 20 77 65 20  r extraction we 
c3b0: 77 61 6e 74 20 74 68 65 6d 0a 2a 2a 20 74 6f 20  want them.** to 
c3c0: 68 61 76 65 20 6f 6e 6c 79 20 61 20 72 65 61 6c  have only a real
c3d0: 20 76 61 6c 75 65 2e 0a 2a 2f 0a 63 61 73 65 20   value..*/.case 
c3e0: 4f 50 5f 52 65 61 6c 41 66 66 69 6e 69 74 79 3a  OP_RealAffinity:
c3f0: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
c400: 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20      /* in1 */.  
c410: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
c420: 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70 49 6e  ->p1];.  if( pIn
c430: 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  1->flags & MEM_I
c440: 6e 74 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  nt ){.    sqlite
c450: 33 56 64 62 65 4d 65 6d 52 65 61 6c 69 66 79 28  3VdbeMemRealify(
c460: 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65  pIn1);.  }.  bre
c470: 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69  ak;.}.#endif..#i
c480: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
c490: 54 5f 43 41 53 54 0a 2f 2a 20 4f 70 63 6f 64 65  T_CAST./* Opcode
c4a0: 3a 20 54 6f 54 65 78 74 20 50 31 20 2a 20 2a 20  : ToText P1 * * 
c4b0: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20  * *.**.** Force 
c4c0: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
c4d0: 69 73 74 65 72 20 50 31 20 74 6f 20 62 65 20 74  ister P1 to be t
c4e0: 65 78 74 2e 0a 2a 2a 20 49 66 20 74 68 65 20 76  ext..** If the v
c4f0: 61 6c 75 65 20 69 73 20 6e 75 6d 65 72 69 63 2c  alue is numeric,
c500: 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f 20 61   convert it to a
c510: 20 73 74 72 69 6e 67 20 75 73 69 6e 67 20 74 68   string using th
c520: 65 0a 2a 2a 20 65 71 75 69 76 61 6c 65 6e 74 20  e.** equivalent 
c530: 6f 66 20 70 72 69 6e 74 66 28 29 2e 20 20 42 6c  of printf().  Bl
c540: 6f 62 20 76 61 6c 75 65 73 20 61 72 65 20 75 6e  ob values are un
c550: 63 68 61 6e 67 65 64 20 61 6e 64 0a 2a 2a 20 61  changed and.** a
c560: 72 65 20 61 66 74 65 72 77 61 72 64 73 20 73 69  re afterwards si
c570: 6d 70 6c 79 20 69 6e 74 65 72 70 72 65 74 65 64  mply interpreted
c580: 20 61 73 20 74 65 78 74 2e 0a 2a 2a 0a 2a 2a 20   as text..**.** 
c590: 41 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69 73 20  A NULL value is 
c5a0: 6e 6f 74 20 63 68 61 6e 67 65 64 20 62 79 20 74  not changed by t
c5b0: 68 69 73 20 72 6f 75 74 69 6e 65 2e 20 20 49 74  his routine.  It
c5c0: 20 72 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a   remains NULL..*
c5d0: 2f 0a 63 61 73 65 20 4f 50 5f 54 6f 54 65 78 74  /.case OP_ToText
c5e0: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
c5f0: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
c600: 54 4b 5f 54 4f 5f 54 45 58 54 2c 20 69 6e 31 20  TK_TO_TEXT, in1 
c610: 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
c620: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 6d 65  m[pOp->p1];.  me
c630: 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
c640: 2c 20 70 49 6e 31 29 3b 0a 20 20 69 66 28 20 70  , pIn1);.  if( p
c650: 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
c660: 5f 4e 75 6c 6c 20 29 20 62 72 65 61 6b 3b 0a 20  _Null ) break;. 
c670: 20 61 73 73 65 72 74 28 20 4d 45 4d 5f 53 74 72   assert( MEM_Str
c680: 3d 3d 28 4d 45 4d 5f 42 6c 6f 62 3e 3e 33 29 20  ==(MEM_Blob>>3) 
c690: 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73  );.  pIn1->flags
c6a0: 20 7c 3d 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73   |= (pIn1->flags
c6b0: 26 4d 45 4d 5f 42 6c 6f 62 29 3e 3e 33 3b 0a 20  &MEM_Blob)>>3;. 
c6c0: 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70   applyAffinity(p
c6d0: 49 6e 31 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f  In1, SQLITE_AFF_
c6e0: 54 45 58 54 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  TEXT, encoding);
c6f0: 0a 20 20 72 63 20 3d 20 45 78 70 61 6e 64 42 6c  .  rc = ExpandBl
c700: 6f 62 28 70 49 6e 31 29 3b 0a 20 20 61 73 73 65  ob(pIn1);.  asse
c710: 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20  rt( pIn1->flags 
c720: 26 20 4d 45 4d 5f 53 74 72 20 7c 7c 20 64 62 2d  & MEM_Str || db-
c730: 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 3b  >mallocFailed );
c740: 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  .  pIn1->flags &
c750: 3d 20 7e 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f  = ~(MEM_Int|MEM_
c760: 52 65 61 6c 7c 4d 45 4d 5f 42 6c 6f 62 7c 4d 45  Real|MEM_Blob|ME
c770: 4d 5f 5a 65 72 6f 29 3b 0a 20 20 55 50 44 41 54  M_Zero);.  UPDAT
c780: 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70  E_MAX_BLOBSIZE(p
c790: 49 6e 31 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  In1);.  break;.}
c7a0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 6f 42  ../* Opcode: ToB
c7b0: 6c 6f 62 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a  lob P1 * * * *.*
c7c0: 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65 20 76  *.** Force the v
c7d0: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
c7e0: 20 50 31 20 74 6f 20 62 65 20 61 20 42 4c 4f 42   P1 to be a BLOB
c7f0: 2e 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75  ..** If the valu
c800: 65 20 69 73 20 6e 75 6d 65 72 69 63 2c 20 63 6f  e is numeric, co
c810: 6e 76 65 72 74 20 69 74 20 74 6f 20 61 20 73 74  nvert it to a st
c820: 72 69 6e 67 20 66 69 72 73 74 2e 0a 2a 2a 20 53  ring first..** S
c830: 74 72 69 6e 67 73 20 61 72 65 20 73 69 6d 70 6c  trings are simpl
c840: 79 20 72 65 69 6e 74 65 72 70 72 65 74 65 64 20  y reinterpreted 
c850: 61 73 20 62 6c 6f 62 73 20 77 69 74 68 20 6e 6f  as blobs with no
c860: 20 63 68 61 6e 67 65 0a 2a 2a 20 74 6f 20 74 68   change.** to th
c870: 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 64 61 74  e underlying dat
c880: 61 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20  a..**.** A NULL 
c890: 76 61 6c 75 65 20 69 73 20 6e 6f 74 20 63 68 61  value is not cha
c8a0: 6e 67 65 64 20 62 79 20 74 68 69 73 20 72 6f 75  nged by this rou
c8b0: 74 69 6e 65 2e 20 20 49 74 20 72 65 6d 61 69 6e  tine.  It remain
c8c0: 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20  s NULL..*/.case 
c8d0: 4f 50 5f 54 6f 42 6c 6f 62 3a 20 7b 20 20 20 20  OP_ToBlob: {    
c8e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
c8f0: 20 73 61 6d 65 20 61 73 20 54 4b 5f 54 4f 5f 42   same as TK_TO_B
c900: 4c 4f 42 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49  LOB, in1 */.  pI
c910: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
c920: 70 31 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d  p1];.  if( pIn1-
c930: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
c940: 6c 20 29 20 62 72 65 61 6b 3b 0a 20 20 69 66 28  l ) break;.  if(
c950: 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
c960: 4d 45 4d 5f 42 6c 6f 62 29 3d 3d 30 20 29 7b 0a  MEM_Blob)==0 ){.
c970: 20 20 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74      applyAffinit
c980: 79 28 70 49 6e 31 2c 20 53 51 4c 49 54 45 5f 41  y(pIn1, SQLITE_A
c990: 46 46 5f 54 45 58 54 2c 20 65 6e 63 6f 64 69 6e  FF_TEXT, encodin
c9a0: 67 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  g);.    assert( 
c9b0: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
c9c0: 4d 5f 53 74 72 20 7c 7c 20 64 62 2d 3e 6d 61 6c  M_Str || db->mal
c9d0: 6c 6f 63 46 61 69 6c 65 64 20 29 3b 0a 20 20 20  locFailed );.   
c9e0: 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
c9f0: 70 49 6e 31 2c 20 4d 45 4d 5f 42 6c 6f 62 29 3b  pIn1, MEM_Blob);
ca00: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 49  .  }else{.    pI
ca10: 6e 31 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 28 4d  n1->flags &= ~(M
ca20: 45 4d 5f 54 79 70 65 4d 61 73 6b 26 7e 4d 45 4d  EM_TypeMask&~MEM
ca30: 5f 42 6c 6f 62 29 3b 0a 20 20 7d 0a 20 20 55 50  _Blob);.  }.  UP
ca40: 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
ca50: 45 28 70 49 6e 31 29 3b 0a 20 20 62 72 65 61 6b  E(pIn1);.  break
ca60: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
ca70: 54 6f 4e 75 6d 65 72 69 63 20 50 31 20 2a 20 2a  ToNumeric P1 * *
ca80: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65   * *.**.** Force
ca90: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
caa0: 67 69 73 74 65 72 20 50 31 20 74 6f 20 62 65 20  gister P1 to be 
cab0: 6e 75 6d 65 72 69 63 20 28 65 69 74 68 65 72 20  numeric (either 
cac0: 61 6e 0a 2a 2a 20 69 6e 74 65 67 65 72 20 6f 72  an.** integer or
cad0: 20 61 20 66 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e   a floating-poin
cae0: 74 20 6e 75 6d 62 65 72 2e 29 0a 2a 2a 20 49 66  t number.).** If
caf0: 20 74 68 65 20 76 61 6c 75 65 20 69 73 20 74 65   the value is te
cb00: 78 74 20 6f 72 20 62 6c 6f 62 2c 20 74 72 79 20  xt or blob, try 
cb10: 74 6f 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f  to convert it to
cb20: 20 61 6e 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a   an using the.**
cb30: 20 65 71 75 69 76 61 6c 65 6e 74 20 6f 66 20 61   equivalent of a
cb40: 74 6f 69 28 29 20 6f 72 20 61 74 6f 66 28 29 20  toi() or atof() 
cb50: 61 6e 64 20 73 74 6f 72 65 20 30 20 69 66 20 6e  and store 0 if n
cb60: 6f 20 73 75 63 68 20 63 6f 6e 76 65 72 73 69 6f  o such conversio
cb70: 6e 20 0a 2a 2a 20 69 73 20 70 6f 73 73 69 62 6c  n .** is possibl
cb80: 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20  e..**.** A NULL 
cb90: 76 61 6c 75 65 20 69 73 20 6e 6f 74 20 63 68 61  value is not cha
cba0: 6e 67 65 64 20 62 79 20 74 68 69 73 20 72 6f 75  nged by this rou
cbb0: 74 69 6e 65 2e 20 20 49 74 20 72 65 6d 61 69 6e  tine.  It remain
cbc0: 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20  s NULL..*/.case 
cbd0: 4f 50 5f 54 6f 4e 75 6d 65 72 69 63 3a 20 7b 20  OP_ToNumeric: { 
cbe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cbf0: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 54   /* same as TK_T
cc00: 4f 5f 4e 55 4d 45 52 49 43 2c 20 69 6e 31 20 2a  O_NUMERIC, in1 *
cc10: 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
cc20: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 73 71 6c  [pOp->p1];.  sql
cc30: 69 74 65 33 56 64 62 65 4d 65 6d 4e 75 6d 65 72  ite3VdbeMemNumer
cc40: 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 62 72 65  ify(pIn1);.  bre
cc50: 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ak;.}.#endif /* 
cc60: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 41 53 54  SQLITE_OMIT_CAST
cc70: 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20   */../* Opcode: 
cc80: 54 6f 49 6e 74 20 50 31 20 2a 20 2a 20 2a 20 2a  ToInt P1 * * * *
cc90: 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65  .**.** Force the
cca0: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
ccb0: 65 72 20 50 31 20 74 6f 20 62 65 20 61 6e 20 69  er P1 to be an i
ccc0: 6e 74 65 67 65 72 2e 20 20 49 66 0a 2a 2a 20 54  nteger.  If.** T
ccd0: 68 65 20 76 61 6c 75 65 20 69 73 20 63 75 72 72  he value is curr
cce0: 65 6e 74 6c 79 20 61 20 72 65 61 6c 20 6e 75 6d  ently a real num
ccf0: 62 65 72 2c 20 64 72 6f 70 20 69 74 73 20 66 72  ber, drop its fr
cd00: 61 63 74 69 6f 6e 61 6c 20 70 61 72 74 2e 0a 2a  actional part..*
cd10: 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 69  * If the value i
cd20: 73 20 74 65 78 74 20 6f 72 20 62 6c 6f 62 2c 20  s text or blob, 
cd30: 74 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20 69  try to convert i
cd40: 74 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20  t to an integer 
cd50: 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 65 71 75  using the.** equ
cd60: 69 76 61 6c 65 6e 74 20 6f 66 20 61 74 6f 69 28  ivalent of atoi(
cd70: 29 20 61 6e 64 20 73 74 6f 72 65 20 30 20 69 66  ) and store 0 if
cd80: 20 6e 6f 20 73 75 63 68 20 63 6f 6e 76 65 72 73   no such convers
cd90: 69 6f 6e 20 69 73 20 70 6f 73 73 69 62 6c 65 2e  ion is possible.
cda0: 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76 61  .**.** A NULL va
cdb0: 6c 75 65 20 69 73 20 6e 6f 74 20 63 68 61 6e 67  lue is not chang
cdc0: 65 64 20 62 79 20 74 68 69 73 20 72 6f 75 74 69  ed by this routi
cdd0: 6e 65 2e 20 20 49 74 20 72 65 6d 61 69 6e 73 20  ne.  It remains 
cde0: 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  NULL..*/.case OP
cdf0: 5f 54 6f 49 6e 74 3a 20 7b 20 20 20 20 20 20 20  _ToInt: {       
ce00: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
ce10: 6d 65 20 61 73 20 54 4b 5f 54 4f 5f 49 4e 54 2c  me as TK_TO_INT,
ce20: 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d   in1 */.  pIn1 =
ce30: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
ce40: 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c  .  if( (pIn1->fl
ce50: 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d  ags & MEM_Null)=
ce60: 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  =0 ){.    sqlite
ce70: 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69  3VdbeMemIntegeri
ce80: 66 79 28 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20  fy(pIn1);.  }.  
ce90: 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 20 21 64  break;.}..#if !d
cea0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
ceb0: 49 54 5f 43 41 53 54 29 20 26 26 20 21 64 65 66  IT_CAST) && !def
cec0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
ced0: 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 29  _FLOATING_POINT)
cee0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 6f 52 65  ./* Opcode: ToRe
cef0: 61 6c 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a  al P1 * * * *.**
cf00: 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65 20 76 61  .** Force the va
cf10: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
cf20: 50 31 20 74 6f 20 62 65 20 61 20 66 6c 6f 61 74  P1 to be a float
cf30: 69 6e 67 20 70 6f 69 6e 74 20 6e 75 6d 62 65 72  ing point number
cf40: 2e 0a 2a 2a 20 49 66 20 54 68 65 20 76 61 6c 75  ..** If The valu
cf50: 65 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 61  e is currently a
cf60: 6e 20 69 6e 74 65 67 65 72 2c 20 63 6f 6e 76 65  n integer, conve
cf70: 72 74 20 69 74 2e 0a 2a 2a 20 49 66 20 74 68 65  rt it..** If the
cf80: 20 76 61 6c 75 65 20 69 73 20 74 65 78 74 20 6f   value is text o
cf90: 72 20 62 6c 6f 62 2c 20 74 72 79 20 74 6f 20 63  r blob, try to c
cfa0: 6f 6e 76 65 72 74 20 69 74 20 74 6f 20 61 6e 20  onvert it to an 
cfb0: 69 6e 74 65 67 65 72 20 75 73 69 6e 67 20 74 68  integer using th
cfc0: 65 0a 2a 2a 20 65 71 75 69 76 61 6c 65 6e 74 20  e.** equivalent 
cfd0: 6f 66 20 61 74 6f 69 28 29 20 61 6e 64 20 73 74  of atoi() and st
cfe0: 6f 72 65 20 30 2e 30 20 69 66 20 6e 6f 20 73 75  ore 0.0 if no su
cff0: 63 68 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69 73  ch conversion is
d000: 20 70 6f 73 73 69 62 6c 65 2e 0a 2a 2a 0a 2a 2a   possible..**.**
d010: 20 41 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69 73   A NULL value is
d020: 20 6e 6f 74 20 63 68 61 6e 67 65 64 20 62 79 20   not changed by 
d030: 74 68 69 73 20 72 6f 75 74 69 6e 65 2e 20 20 49  this routine.  I
d040: 74 20 72 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a  t remains NULL..
d050: 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 6f 52 65 61  */.case OP_ToRea
d060: 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  l: {            
d070: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
d080: 20 54 4b 5f 54 4f 5f 52 45 41 4c 2c 20 69 6e 31   TK_TO_REAL, in1
d090: 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   */.  pIn1 = &aM
d0a0: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 6d  em[pOp->p1];.  m
d0b0: 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
d0c0: 70 2c 20 70 49 6e 31 29 3b 0a 20 20 69 66 28 20  p, pIn1);.  if( 
d0d0: 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn1->flags & M
d0e0: 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20  EM_Null)==0 ){. 
d0f0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
d100: 6d 52 65 61 6c 69 66 79 28 70 49 6e 31 29 3b 0a  mRealify(pIn1);.
d110: 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23    }.  break;.}.#
d120: 65 6e 64 69 66 20 2f 2a 20 21 64 65 66 69 6e 65  endif /* !define
d130: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 41  d(SQLITE_OMIT_CA
d140: 53 54 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  ST) && !defined(
d150: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41  SQLITE_OMIT_FLOA
d160: 54 49 4e 47 5f 50 4f 49 4e 54 29 20 2a 2f 0a 0a  TING_POINT) */..
d170: 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 74 20 50 31  /* Opcode: Lt P1
d180: 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a   P2 P3 P4 P5.**.
d190: 2a 2a 20 43 6f 6d 70 61 72 65 20 74 68 65 20 76  ** Compare the v
d1a0: 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74 65  alues in registe
d1b0: 72 20 50 31 20 61 6e 64 20 50 33 2e 20 20 49 66  r P1 and P3.  If
d1c0: 20 72 65 67 28 50 33 29 3c 72 65 67 28 50 31 29   reg(P3)<reg(P1)
d1d0: 20 74 68 65 6e 0a 2a 2a 20 6a 75 6d 70 20 74 6f   then.** jump to
d1e0: 20 61 64 64 72 65 73 73 20 50 32 2e 20 20 0a 2a   address P2.  .*
d1f0: 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53 51 4c 49  *.** If the SQLI
d200: 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 62 69  TE_JUMPIFNULL bi
d210: 74 20 6f 66 20 50 35 20 69 73 20 73 65 74 20 61  t of P5 is set a
d220: 6e 64 20 65 69 74 68 65 72 20 72 65 67 28 50 31  nd either reg(P1
d230: 29 20 6f 72 0a 2a 2a 20 72 65 67 28 50 33 29 20  ) or.** reg(P3) 
d240: 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 61 6b  is NULL then tak
d250: 65 20 74 68 65 20 6a 75 6d 70 2e 20 20 49 66 20  e the jump.  If 
d260: 74 68 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49  the SQLITE_JUMPI
d270: 46 4e 55 4c 4c 20 0a 2a 2a 20 62 69 74 20 69 73  FNULL .** bit is
d280: 20 63 6c 65 61 72 20 74 68 65 6e 20 66 61 6c 6c   clear then fall
d290: 20 74 68 72 6f 75 67 68 20 69 66 20 65 69 74 68   through if eith
d2a0: 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55  er operand is NU
d2b0: 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 53 51  LL..**.** The SQ
d2c0: 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 70 6f  LITE_AFF_MASK po
d2d0: 72 74 69 6f 6e 20 6f 66 20 50 35 20 6d 75 73 74  rtion of P5 must
d2e0: 20 62 65 20 61 6e 20 61 66 66 69 6e 69 74 79 20   be an affinity 
d2f0: 63 68 61 72 61 63 74 65 72 20 2d 0a 2a 2a 20 53  character -.** S
d300: 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 2c 20  QLITE_AFF_TEXT, 
d310: 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47  SQLITE_AFF_INTEG
d320: 45 52 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68  ER, and so forth
d330: 2e 20 41 6e 20 61 74 74 65 6d 70 74 20 69 73 20  . An attempt is 
d340: 6d 61 64 65 20 0a 2a 2a 20 74 6f 20 63 6f 65 72  made .** to coer
d350: 63 65 20 62 6f 74 68 20 69 6e 70 75 74 73 20 61  ce both inputs a
d360: 63 63 6f 72 64 69 6e 67 20 74 6f 20 74 68 69 73  ccording to this
d370: 20 61 66 66 69 6e 69 74 79 20 62 65 66 6f 72 65   affinity before
d380: 20 74 68 65 0a 2a 2a 20 63 6f 6d 70 61 72 69 73   the.** comparis
d390: 6f 6e 20 69 73 20 6d 61 64 65 2e 20 49 66 20 74  on is made. If t
d3a0: 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41  he SQLITE_AFF_MA
d3b0: 53 4b 20 69 73 20 30 78 30 30 2c 20 74 68 65 6e  SK is 0x00, then
d3c0: 20 6e 75 6d 65 72 69 63 0a 2a 2a 20 61 66 66 69   numeric.** affi
d3d0: 6e 69 74 79 20 69 73 20 75 73 65 64 2e 20 4e 6f  nity is used. No
d3e0: 74 65 20 74 68 61 74 20 74 68 65 20 61 66 66 69  te that the affi
d3f0: 6e 69 74 79 20 63 6f 6e 76 65 72 73 69 6f 6e 73  nity conversions
d400: 20 61 72 65 20 73 74 6f 72 65 64 0a 2a 2a 20 62   are stored.** b
d410: 61 63 6b 20 69 6e 74 6f 20 74 68 65 20 69 6e 70  ack into the inp
d420: 75 74 20 72 65 67 69 73 74 65 72 73 20 50 31 20  ut registers P1 
d430: 61 6e 64 20 50 33 2e 20 20 53 6f 20 74 68 69 73  and P3.  So this
d440: 20 6f 70 63 6f 64 65 20 63 61 6e 20 63 61 75 73   opcode can caus
d450: 65 0a 2a 2a 20 70 65 72 73 69 73 74 65 6e 74 20  e.** persistent 
d460: 63 68 61 6e 67 65 73 20 74 6f 20 72 65 67 69 73  changes to regis
d470: 74 65 72 73 20 50 31 20 61 6e 64 20 50 33 2e 0a  ters P1 and P3..
d480: 2a 2a 0a 2a 2a 20 4f 6e 63 65 20 61 6e 79 20 63  **.** Once any c
d490: 6f 6e 76 65 72 73 69 6f 6e 73 20 68 61 76 65 20  onversions have 
d4a0: 74 61 6b 65 6e 20 70 6c 61 63 65 2c 20 61 6e 64  taken place, and
d4b0: 20 6e 65 69 74 68 65 72 20 76 61 6c 75 65 20 69   neither value i
d4c0: 73 20 4e 55 4c 4c 2c 20 0a 2a 2a 20 74 68 65 20  s NULL, .** the 
d4d0: 76 61 6c 75 65 73 20 61 72 65 20 63 6f 6d 70 61  values are compa
d4e0: 72 65 64 2e 20 49 66 20 62 6f 74 68 20 76 61 6c  red. If both val
d4f0: 75 65 73 20 61 72 65 20 62 6c 6f 62 73 20 74 68  ues are blobs th
d500: 65 6e 20 6d 65 6d 63 6d 70 28 29 20 69 73 0a 2a  en memcmp() is.*
d510: 2a 20 75 73 65 64 20 74 6f 20 64 65 74 65 72 6d  * used to determ
d520: 69 6e 65 20 74 68 65 20 72 65 73 75 6c 74 73 20  ine the results 
d530: 6f 66 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f  of the compariso
d540: 6e 2e 20 20 49 66 20 62 6f 74 68 20 76 61 6c 75  n.  If both valu
d550: 65 73 0a 2a 2a 20 61 72 65 20 74 65 78 74 2c 20  es.** are text, 
d560: 74 68 65 6e 20 74 68 65 20 61 70 70 72 6f 70 72  then the appropr
d570: 69 61 74 65 20 63 6f 6c 6c 61 74 69 6e 67 20 66  iate collating f
d580: 75 6e 63 74 69 6f 6e 20 73 70 65 63 69 66 69 65  unction specifie
d590: 64 20 69 6e 0a 2a 2a 20 50 34 20 69 73 20 20 75  d in.** P4 is  u
d5a0: 73 65 64 20 74 6f 20 64 6f 20 74 68 65 20 63 6f  sed to do the co
d5b0: 6d 70 61 72 69 73 6f 6e 2e 20 20 49 66 20 50 34  mparison.  If P4
d5c0: 20 69 73 20 6e 6f 74 20 73 70 65 63 69 66 69 65   is not specifie
d5d0: 64 20 74 68 65 6e 0a 2a 2a 20 6d 65 6d 63 6d 70  d then.** memcmp
d5e0: 28 29 20 69 73 20 75 73 65 64 20 74 6f 20 63 6f  () is used to co
d5f0: 6d 70 61 72 65 20 74 65 78 74 20 73 74 72 69 6e  mpare text strin
d600: 67 2e 20 20 49 66 20 62 6f 74 68 20 76 61 6c 75  g.  If both valu
d610: 65 73 20 61 72 65 0a 2a 2a 20 6e 75 6d 65 72 69  es are.** numeri
d620: 63 2c 20 74 68 65 6e 20 61 20 6e 75 6d 65 72 69  c, then a numeri
d630: 63 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20  c comparison is 
d640: 75 73 65 64 2e 20 49 66 20 74 68 65 20 74 77 6f  used. If the two
d650: 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72 65 20 6f   values.** are o
d660: 66 20 64 69 66 66 65 72 65 6e 74 20 74 79 70 65  f different type
d670: 73 2c 20 74 68 65 6e 20 6e 75 6d 62 65 72 73 20  s, then numbers 
d680: 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20 6c  are considered l
d690: 65 73 73 20 74 68 61 6e 0a 2a 2a 20 73 74 72 69  ess than.** stri
d6a0: 6e 67 73 20 61 6e 64 20 73 74 72 69 6e 67 73 20  ngs and strings 
d6b0: 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20 6c  are considered l
d6c0: 65 73 73 20 74 68 61 6e 20 62 6c 6f 62 73 2e 0a  ess than blobs..
d6d0: 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53 51 4c  **.** If the SQL
d6e0: 49 54 45 5f 53 54 4f 52 45 50 32 20 62 69 74 20  ITE_STOREP2 bit 
d6f0: 6f 66 20 50 35 20 69 73 20 73 65 74 2c 20 74 68  of P5 is set, th
d700: 65 6e 20 64 6f 20 6e 6f 74 20 6a 75 6d 70 2e 20  en do not jump. 
d710: 20 49 6e 73 74 65 61 64 2c 0a 2a 2a 20 73 74 6f   Instead,.** sto
d720: 72 65 20 61 20 62 6f 6f 6c 65 61 6e 20 72 65 73  re a boolean res
d730: 75 6c 74 20 28 65 69 74 68 65 72 20 30 2c 20 6f  ult (either 0, o
d740: 72 20 31 2c 20 6f 72 20 4e 55 4c 4c 29 20 69 6e  r 1, or NULL) in
d750: 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f   register P2..*/
d760: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 20 50  ./* Opcode: Ne P
d770: 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
d780: 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a  .** This works j
d790: 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20  ust like the Lt 
d7a0: 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20 74 68  opcode except th
d7b0: 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74  at the jump is t
d7c0: 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 6f  aken if.** the o
d7d0: 70 65 72 61 6e 64 73 20 69 6e 20 72 65 67 69 73  perands in regis
d7e0: 74 65 72 73 20 50 31 20 61 6e 64 20 50 33 20 61  ters P1 and P3 a
d7f0: 72 65 20 6e 6f 74 20 65 71 75 61 6c 2e 20 20 53  re not equal.  S
d800: 65 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65  ee the Lt opcode
d810: 20 66 6f 72 0a 2a 2a 20 61 64 64 69 74 69 6f 6e   for.** addition
d820: 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a  al information..
d830: 2a 2a 0a 2a 2a 20 49 66 20 53 51 4c 49 54 45 5f  **.** If SQLITE_
d840: 4e 55 4c 4c 45 51 20 69 73 20 73 65 74 20 69 6e  NULLEQ is set in
d850: 20 50 35 20 74 68 65 6e 20 74 68 65 20 72 65 73   P5 then the res
d860: 75 6c 74 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f  ult of compariso
d870: 6e 20 69 73 20 61 6c 77 61 79 73 20 65 69 74 68  n is always eith
d880: 65 72 0a 2a 2a 20 74 72 75 65 20 6f 72 20 66 61  er.** true or fa
d890: 6c 73 65 20 61 6e 64 20 69 73 20 6e 65 76 65 72  lse and is never
d8a0: 20 4e 55 4c 4c 2e 20 20 49 66 20 62 6f 74 68 20   NULL.  If both 
d8b0: 6f 70 65 72 61 6e 64 73 20 61 72 65 20 4e 55 4c  operands are NUL
d8c0: 4c 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c  L then the resul
d8d0: 74 0a 2a 2a 20 6f 66 20 63 6f 6d 70 61 72 69 73  t.** of comparis
d8e0: 6f 6e 20 69 73 20 66 61 6c 73 65 2e 20 20 49 66  on is false.  If
d8f0: 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20   either operand 
d900: 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65  is NULL then the
d910: 20 72 65 73 75 6c 74 20 69 73 20 74 72 75 65 2e   result is true.
d920: 0a 2a 2a 20 49 66 20 6e 65 69 74 68 65 72 20 6f  .** If neither o
d930: 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20 74  perand is NULL t
d940: 68 65 20 72 65 73 75 6c 74 20 69 73 20 74 68 65  he result is the
d950: 20 73 61 6d 65 20 61 73 20 69 74 20 77 6f 75 6c   same as it woul
d960: 64 20 62 65 20 69 66 0a 2a 2a 20 74 68 65 20 53  d be if.** the S
d970: 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 66 6c 61  QLITE_NULLEQ fla
d980: 67 20 77 65 72 65 20 6f 6d 69 74 74 65 64 20 66  g were omitted f
d990: 72 6f 6d 20 50 35 2e 0a 2a 2f 0a 2f 2a 20 4f 70  rom P5..*/./* Op
d9a0: 63 6f 64 65 3a 20 45 71 20 50 31 20 50 32 20 50  code: Eq P1 P2 P
d9b0: 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68  3 P4 P5.**.** Th
d9c0: 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69  is works just li
d9d0: 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65  ke the Lt opcode
d9e0: 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65   except that the
d9f0: 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69   jump is taken i
da00: 66 0a 2a 2a 20 74 68 65 20 6f 70 65 72 61 6e 64  f.** the operand
da10: 73 20 69 6e 20 72 65 67 69 73 74 65 72 73 20 50  s in registers P
da20: 31 20 61 6e 64 20 50 33 20 61 72 65 20 65 71 75  1 and P3 are equ
da30: 61 6c 2e 0a 2a 2a 20 53 65 65 20 74 68 65 20 4c  al..** See the L
da40: 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64 64  t opcode for add
da50: 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74  itional informat
da60: 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 53 51  ion..**.** If SQ
da70: 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20 73  LITE_NULLEQ is s
da80: 65 74 20 69 6e 20 50 35 20 74 68 65 6e 20 74 68  et in P5 then th
da90: 65 20 72 65 73 75 6c 74 20 6f 66 20 63 6f 6d 70  e result of comp
daa0: 61 72 69 73 6f 6e 20 69 73 20 61 6c 77 61 79 73  arison is always
dab0: 20 65 69 74 68 65 72 0a 2a 2a 20 74 72 75 65 20   either.** true 
dac0: 6f 72 20 66 61 6c 73 65 20 61 6e 64 20 69 73 20  or false and is 
dad0: 6e 65 76 65 72 20 4e 55 4c 4c 2e 20 20 49 66 20  never NULL.  If 
dae0: 62 6f 74 68 20 6f 70 65 72 61 6e 64 73 20 61 72  both operands ar
daf0: 65 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65 20  e NULL then the 
db00: 72 65 73 75 6c 74 0a 2a 2a 20 6f 66 20 63 6f 6d  result.** of com
db10: 70 61 72 69 73 6f 6e 20 69 73 20 74 72 75 65 2e  parison is true.
db20: 20 20 49 66 20 65 69 74 68 65 72 20 6f 70 65 72    If either oper
db30: 61 6e 64 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e  and is NULL then
db40: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 66   the result is f
db50: 61 6c 73 65 2e 0a 2a 2a 20 49 66 20 6e 65 69 74  alse..** If neit
db60: 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e  her operand is N
db70: 55 4c 4c 20 74 68 65 20 72 65 73 75 6c 74 20 69  ULL the result i
db80: 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 69 74  s the same as it
db90: 20 77 6f 75 6c 64 20 62 65 20 69 66 0a 2a 2a 20   would be if.** 
dba0: 74 68 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45  the SQLITE_NULLE
dbb0: 51 20 66 6c 61 67 20 77 65 72 65 20 6f 6d 69 74  Q flag were omit
dbc0: 74 65 64 20 66 72 6f 6d 20 50 35 2e 0a 2a 2f 0a  ted from P5..*/.
dbd0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 65 20 50 31  /* Opcode: Le P1
dbe0: 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a   P2 P3 P4 P5.**.
dbf0: 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75  ** This works ju
dc00: 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f  st like the Lt o
dc10: 70 63 6f 64 65 20 65 78 63 65 70 74 20 74 68 61  pcode except tha
dc20: 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61  t the jump is ta
dc30: 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f  ken if.** the co
dc40: 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65  ntent of registe
dc50: 72 20 50 33 20 69 73 20 6c 65 73 73 20 74 68 61  r P3 is less tha
dc60: 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68  n or equal to th
dc70: 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20  e content of.** 
dc80: 72 65 67 69 73 74 65 72 20 50 31 2e 20 20 53 65  register P1.  Se
dc90: 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20  e the Lt opcode 
dca0: 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69  for additional i
dcb0: 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f  nformation..*/./
dcc0: 2a 20 4f 70 63 6f 64 65 3a 20 47 74 20 50 31 20  * Opcode: Gt P1 
dcd0: 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a  P2 P3 P4 P5.**.*
dce0: 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73  * This works jus
dcf0: 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70  t like the Lt op
dd00: 63 6f 64 65 20 65 78 63 65 70 74 20 74 68 61 74  code except that
dd10: 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b   the jump is tak
dd20: 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f 6e  en if.** the con
dd30: 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72  tent of register
dd40: 20 50 33 20 69 73 20 67 72 65 61 74 65 72 20 74   P3 is greater t
dd50: 68 61 6e 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  han the content 
dd60: 6f 66 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50  of.** register P
dd70: 31 2e 20 20 53 65 65 20 74 68 65 20 4c 74 20 6f  1.  See the Lt o
dd80: 70 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69  pcode for additi
dd90: 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  onal information
dda0: 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
ddb0: 47 65 20 50 31 20 50 32 20 50 33 20 50 34 20 50  Ge P1 P2 P3 P4 P
ddc0: 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72  5.**.** This wor
ddd0: 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 74 68 65  ks just like the
dde0: 20 4c 74 20 6f 70 63 6f 64 65 20 65 78 63 65 70   Lt opcode excep
ddf0: 74 20 74 68 61 74 20 74 68 65 20 6a 75 6d 70 20  t that the jump 
de00: 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74  is taken if.** t
de10: 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65  he content of re
de20: 67 69 73 74 65 72 20 50 33 20 69 73 20 67 72 65  gister P3 is gre
de30: 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75  ater than or equ
de40: 61 6c 20 74 6f 20 74 68 65 20 63 6f 6e 74 65 6e  al to the conten
de50: 74 20 6f 66 0a 2a 2a 20 72 65 67 69 73 74 65 72  t of.** register
de60: 20 50 31 2e 20 20 53 65 65 20 74 68 65 20 4c 74   P1.  See the Lt
de70: 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64 64 69   opcode for addi
de80: 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69  tional informati
de90: 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 45  on..*/.case OP_E
dea0: 71 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  q:              
deb0: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 45   /* same as TK_E
dec0: 51 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e  Q, jump, in1, in
ded0: 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 3a  3 */.case OP_Ne:
dee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
def0: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4e 45 2c  * same as TK_NE,
df00: 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20   jump, in1, in3 
df10: 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 74 3a 20 20  */.case OP_Lt:  
df20: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
df30: 73 61 6d 65 20 61 73 20 54 4b 5f 4c 54 2c 20 6a  same as TK_LT, j
df40: 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f  ump, in1, in3 */
df50: 0a 63 61 73 65 20 4f 50 5f 4c 65 3a 20 20 20 20  .case OP_Le:    
df60: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
df70: 6d 65 20 61 73 20 54 4b 5f 4c 45 2c 20 6a 75 6d  me as TK_LE, jum
df80: 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63  p, in1, in3 */.c
df90: 61 73 65 20 4f 50 5f 47 74 3a 20 20 20 20 20 20  ase OP_Gt:      
dfa0: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
dfb0: 20 61 73 20 54 4b 5f 47 54 2c 20 6a 75 6d 70 2c   as TK_GT, jump,
dfc0: 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73   in1, in3 */.cas
dfd0: 65 20 4f 50 5f 47 65 3a 20 7b 20 20 20 20 20 20  e OP_Ge: {      
dfe0: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
dff0: 73 20 54 4b 5f 47 45 2c 20 6a 75 6d 70 2c 20 69  s TK_GE, jump, i
e000: 6e 31 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74  n1, in3 */.  int
e010: 20 72 65 73 3b 20 20 20 20 20 20 20 20 20 20 20   res;           
e020: 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20 74 68   /* Result of th
e030: 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 66 20  e comparison of 
e040: 70 49 6e 31 20 61 67 61 69 6e 73 74 20 70 49 6e  pIn1 against pIn
e050: 33 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 69  3 */.  char affi
e060: 6e 69 74 79 3b 20 20 20 20 20 20 2f 2a 20 41 66  nity;      /* Af
e070: 66 69 6e 69 74 79 20 74 6f 20 75 73 65 20 66 6f  finity to use fo
e080: 72 20 63 6f 6d 70 61 72 69 73 6f 6e 20 2a 2f 0a  r comparison */.
e090: 20 20 75 31 36 20 66 6c 61 67 73 31 3b 20 20 20    u16 flags1;   
e0a0: 20 20 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66        /* Copy of
e0b0: 20 69 6e 69 74 69 61 6c 20 76 61 6c 75 65 20 6f   initial value o
e0c0: 66 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 2a 2f  f pIn1->flags */
e0d0: 0a 20 20 75 31 36 20 66 6c 61 67 73 33 3b 20 20  .  u16 flags3;  
e0e0: 20 20 20 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f         /* Copy o
e0f0: 66 20 69 6e 69 74 69 61 6c 20 76 61 6c 75 65 20  f initial value 
e100: 6f 66 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 2a  of pIn3->flags *
e110: 2f 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  /..  pIn1 = &aMe
e120: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49  m[pOp->p1];.  pI
e130: 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n3 = &aMem[pOp->
e140: 70 33 5d 3b 0a 20 20 66 6c 61 67 73 31 20 3d 20  p3];.  flags1 = 
e150: 70 49 6e 31 2d 3e 66 6c 61 67 73 3b 0a 20 20 66  pIn1->flags;.  f
e160: 6c 61 67 73 33 20 3d 20 70 49 6e 33 2d 3e 66 6c  lags3 = pIn3->fl
e170: 61 67 73 3b 0a 20 20 69 66 28 20 28 66 6c 61 67  ags;.  if( (flag
e180: 73 31 20 7c 20 66 6c 61 67 73 33 29 26 4d 45 4d  s1 | flags3)&MEM
e190: 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 2f 2a 20  _Null ){.    /* 
e1a0: 4f 6e 65 20 6f 72 20 62 6f 74 68 20 6f 70 65 72  One or both oper
e1b0: 61 6e 64 73 20 61 72 65 20 4e 55 4c 4c 20 2a 2f  ands are NULL */
e1c0: 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35  .    if( pOp->p5
e1d0: 20 26 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51   & SQLITE_NULLEQ
e1e0: 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 66 20   ){.      /* If 
e1f0: 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73  SQLITE_NULLEQ is
e200: 20 73 65 74 20 28 77 68 69 63 68 20 77 69 6c 6c   set (which will
e210: 20 6f 6e 6c 79 20 68 61 70 70 65 6e 20 69 66 20   only happen if 
e220: 74 68 65 20 6f 70 65 72 61 74 6f 72 20 69 73 0a  the operator is.
e230: 20 20 20 20 20 20 2a 2a 20 4f 50 5f 45 71 20 6f        ** OP_Eq o
e240: 72 20 4f 50 5f 4e 65 29 20 74 68 65 6e 20 74 61  r OP_Ne) then ta
e250: 6b 65 20 74 68 65 20 6a 75 6d 70 20 6f 72 20 6e  ke the jump or n
e260: 6f 74 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20  ot depending on 
e270: 77 68 65 74 68 65 72 0a 20 20 20 20 20 20 2a 2a  whether.      **
e280: 20 6f 72 20 6e 6f 74 20 62 6f 74 68 20 6f 70 65   or not both ope
e290: 72 61 6e 64 73 20 61 72 65 20 6e 75 6c 6c 2e 0a  rands are null..
e2a0: 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 61        */.      a
e2b0: 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f  ssert( pOp->opco
e2c0: 64 65 3d 3d 4f 50 5f 45 71 20 7c 7c 20 70 4f 70  de==OP_Eq || pOp
e2d0: 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 65 20  ->opcode==OP_Ne 
e2e0: 29 3b 0a 20 20 20 20 20 20 72 65 73 20 3d 20 28  );.      res = (
e2f0: 66 6c 61 67 73 31 20 26 20 66 6c 61 67 73 33 20  flags1 & flags3 
e300: 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 3b 0a  & MEM_Null)==0;.
e310: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
e320: 20 2f 2a 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45   /* SQLITE_NULLE
e330: 51 20 69 73 20 63 6c 65 61 72 20 61 6e 64 20 61  Q is clear and a
e340: 74 20 6c 65 61 73 74 20 6f 6e 65 20 6f 70 65 72  t least one oper
e350: 61 6e 64 20 69 73 20 4e 55 4c 4c 2c 0a 20 20 20  and is NULL,.   
e360: 20 20 20 2a 2a 20 74 68 65 6e 20 74 68 65 20 72     ** then the r
e370: 65 73 75 6c 74 20 69 73 20 61 6c 77 61 79 73 20  esult is always 
e380: 4e 55 4c 4c 2e 0a 20 20 20 20 20 20 2a 2a 20 54  NULL..      ** T
e390: 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e  he jump is taken
e3a0: 20 69 66 20 74 68 65 20 53 51 4c 49 54 45 5f 4a   if the SQLITE_J
e3b0: 55 4d 50 49 46 4e 55 4c 4c 20 62 69 74 20 69 73  UMPIFNULL bit is
e3c0: 20 73 65 74 2e 0a 20 20 20 20 20 20 2a 2f 0a 20   set..      */. 
e3d0: 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35       if( pOp->p5
e3e0: 20 26 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50   & SQLITE_STOREP
e3f0: 32 20 29 7b 0a 20 20 20 20 20 20 20 20 70 4f 75  2 ){.        pOu
e400: 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
e410: 32 5d 3b 0a 20 20 20 20 20 20 20 20 4d 65 6d 53  2];.        MemS
e420: 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c  etTypeFlag(pOut,
e430: 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 20 20   MEM_Null);.    
e440: 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41      REGISTER_TRA
e450: 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74  CE(pOp->p2, pOut
e460: 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69  );.      }else i
e470: 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c  f( pOp->p5 & SQL
e480: 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 29  ITE_JUMPIFNULL )
e490: 7b 0a 20 20 20 20 20 20 20 20 70 63 20 3d 20 70  {.        pc = p
e4a0: 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 20 20 20 20  Op->p2-1;.      
e4b0: 7d 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  }.      break;. 
e4c0: 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20     }.  }else{.  
e4d0: 20 20 2f 2a 20 4e 65 69 74 68 65 72 20 6f 70 65    /* Neither ope
e4e0: 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2e 20 20 44  rand is NULL.  D
e4f0: 6f 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20  o a comparison. 
e500: 2a 2f 0a 20 20 20 20 61 66 66 69 6e 69 74 79 20  */.    affinity 
e510: 3d 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49  = pOp->p5 & SQLI
e520: 54 45 5f 41 46 46 5f 4d 41 53 4b 3b 0a 20 20 20  TE_AFF_MASK;.   
e530: 20 69 66 28 20 61 66 66 69 6e 69 74 79 20 29 7b   if( affinity ){
e540: 0a 20 20 20 20 20 20 61 70 70 6c 79 41 66 66 69  .      applyAffi
e550: 6e 69 74 79 28 70 49 6e 31 2c 20 61 66 66 69 6e  nity(pIn1, affin
e560: 69 74 79 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a  ity, encoding);.
e570: 20 20 20 20 20 20 61 70 70 6c 79 41 66 66 69 6e        applyAffin
e580: 69 74 79 28 70 49 6e 33 2c 20 61 66 66 69 6e 69  ity(pIn3, affini
e590: 74 79 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  ty, encoding);. 
e5a0: 20 20 20 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c       if( db->mal
e5b0: 6c 6f 63 46 61 69 6c 65 64 20 29 20 67 6f 74 6f  locFailed ) goto
e5c0: 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 7d 0a 0a   no_mem;.    }..
e5d0: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
e5e0: 3e 70 34 74 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c  >p4type==P4_COLL
e5f0: 53 45 51 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 70  SEQ || pOp->p4.p
e600: 43 6f 6c 6c 3d 3d 30 20 29 3b 0a 20 20 20 20 45  Coll==0 );.    E
e610: 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 31 29 3b  xpandBlob(pIn1);
e620: 0a 20 20 20 20 45 78 70 61 6e 64 42 6c 6f 62 28  .    ExpandBlob(
e630: 70 49 6e 33 29 3b 0a 20 20 20 20 72 65 73 20 3d  pIn3);.    res =
e640: 20 73 71 6c 69 74 65 33 4d 65 6d 43 6f 6d 70 61   sqlite3MemCompa
e650: 72 65 28 70 49 6e 33 2c 20 70 49 6e 31 2c 20 70  re(pIn3, pIn1, p
e660: 4f 70 2d 3e 70 34 2e 70 43 6f 6c 6c 29 3b 0a 20  Op->p4.pColl);. 
e670: 20 7d 0a 20 20 73 77 69 74 63 68 28 20 70 4f 70   }.  switch( pOp
e680: 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 20 20 20 20  ->opcode ){.    
e690: 63 61 73 65 20 4f 50 5f 45 71 3a 20 20 20 20 72  case OP_Eq:    r
e6a0: 65 73 20 3d 20 72 65 73 3d 3d 30 3b 20 20 20 20  es = res==0;    
e6b0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65   break;.    case
e6c0: 20 4f 50 5f 4e 65 3a 20 20 20 20 72 65 73 20 3d   OP_Ne:    res =
e6d0: 20 72 65 73 21 3d 30 3b 20 20 20 20 20 62 72 65   res!=0;     bre
e6e0: 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f  ak;.    case OP_
e6f0: 4c 74 3a 20 20 20 20 72 65 73 20 3d 20 72 65 73  Lt:    res = res
e700: 3c 30 3b 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  <0;      break;.
e710: 20 20 20 20 63 61 73 65 20 4f 50 5f 4c 65 3a 20      case OP_Le: 
e720: 20 20 20 72 65 73 20 3d 20 72 65 73 3c 3d 30 3b     res = res<=0;
e730: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
e740: 63 61 73 65 20 4f 50 5f 47 74 3a 20 20 20 20 72  case OP_Gt:    r
e750: 65 73 20 3d 20 72 65 73 3e 30 3b 20 20 20 20 20  es = res>0;     
e760: 20 62 72 65 61 6b 3b 0a 20 20 20 20 64 65 66 61   break;.    defa
e770: 75 6c 74 3a 20 20 20 20 20 20 20 72 65 73 20 3d  ult:       res =
e780: 20 72 65 73 3e 3d 30 3b 20 20 20 20 20 62 72 65   res>=0;     bre
e790: 61 6b 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 70  ak;.  }..  if( p
e7a0: 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f  Op->p5 & SQLITE_
e7b0: 53 54 4f 52 45 50 32 20 29 7b 0a 20 20 20 20 70  STOREP2 ){.    p
e7c0: 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
e7d0: 3e 70 32 5d 3b 0a 20 20 20 20 6d 65 6d 41 62 6f  >p2];.    memAbo
e7e0: 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f  utToChange(p, pO
e7f0: 75 74 29 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54  ut);.    MemSetT
e800: 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45  ypeFlag(pOut, ME
e810: 4d 5f 49 6e 74 29 3b 0a 20 20 20 20 70 4f 75 74  M_Int);.    pOut
e820: 2d 3e 75 2e 69 20 3d 20 72 65 73 3b 0a 20 20 20  ->u.i = res;.   
e830: 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
e840: 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a  pOp->p2, pOut);.
e850: 20 20 7d 65 6c 73 65 20 69 66 28 20 72 65 73 20    }else if( res 
e860: 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  ){.    pc = pOp-
e870: 3e 70 32 2d 31 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  >p2-1;.  }..  /*
e880: 20 55 6e 64 6f 20 61 6e 79 20 63 68 61 6e 67 65   Undo any change
e890: 73 20 6d 61 64 65 20 62 79 20 61 70 70 6c 79 41  s made by applyA
e8a0: 66 66 69 6e 69 74 79 28 29 20 74 6f 20 74 68 65  ffinity() to the
e8b0: 20 69 6e 70 75 74 20 72 65 67 69 73 74 65 72 73   input registers
e8c0: 2e 20 2a 2f 0a 20 20 70 49 6e 31 2d 3e 66 6c 61  . */.  pIn1->fla
e8d0: 67 73 20 3d 20 28 70 49 6e 31 2d 3e 66 6c 61 67  gs = (pIn1->flag
e8e0: 73 26 7e 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 29  s&~MEM_TypeMask)
e8f0: 20 7c 20 28 66 6c 61 67 73 31 26 4d 45 4d 5f 54   | (flags1&MEM_T
e900: 79 70 65 4d 61 73 6b 29 3b 0a 20 20 70 49 6e 33  ypeMask);.  pIn3
e910: 2d 3e 66 6c 61 67 73 20 3d 20 28 70 49 6e 33 2d  ->flags = (pIn3-
e920: 3e 66 6c 61 67 73 26 7e 4d 45 4d 5f 54 79 70 65  >flags&~MEM_Type
e930: 4d 61 73 6b 29 20 7c 20 28 66 6c 61 67 73 33 26  Mask) | (flags3&
e940: 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 29 3b 0a 20  MEM_TypeMask);. 
e950: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
e960: 63 6f 64 65 3a 20 50 65 72 6d 75 74 61 74 69 6f  code: Permutatio
e970: 6e 20 2a 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a  n * * * P4 *.**.
e980: 2a 2a 20 53 65 74 20 74 68 65 20 70 65 72 6d 75  ** Set the permu
e990: 74 61 74 69 6f 6e 20 75 73 65 64 20 62 79 20 74  tation used by t
e9a0: 68 65 20 4f 50 5f 43 6f 6d 70 61 72 65 20 6f 70  he OP_Compare op
e9b0: 65 72 61 74 6f 72 20 74 6f 20 62 65 20 74 68 65  erator to be the
e9c0: 20 61 72 72 61 79 0a 2a 2a 20 6f 66 20 69 6e 74   array.** of int
e9d0: 65 67 65 72 73 20 69 6e 20 50 34 2e 0a 2a 2a 0a  egers in P4..**.
e9e0: 2a 2a 20 54 68 65 20 70 65 72 6d 75 74 61 74 69  ** The permutati
e9f0: 6f 6e 20 69 73 20 6f 6e 6c 79 20 76 61 6c 69 64  on is only valid
ea00: 20 75 6e 74 69 6c 20 74 68 65 20 6e 65 78 74 20   until the next 
ea10: 4f 50 5f 50 65 72 6d 75 74 61 74 69 6f 6e 2c 20  OP_Permutation, 
ea20: 4f 50 5f 43 6f 6d 70 61 72 65 2c 0a 2a 2a 20 4f  OP_Compare,.** O
ea30: 50 5f 48 61 6c 74 2c 20 6f 72 20 4f 50 5f 52 65  P_Halt, or OP_Re
ea40: 73 75 6c 74 52 6f 77 2e 20 20 54 79 70 69 63 61  sultRow.  Typica
ea50: 6c 6c 79 20 74 68 65 20 4f 50 5f 50 65 72 6d 75  lly the OP_Permu
ea60: 74 61 74 69 6f 6e 20 73 68 6f 75 6c 64 20 6f 63  tation should oc
ea70: 63 75 72 0a 2a 2a 20 69 6d 6d 65 64 69 61 74 65  cur.** immediate
ea80: 6c 79 20 70 72 69 6f 72 20 74 6f 20 74 68 65 20  ly prior to the 
ea90: 4f 50 5f 43 6f 6d 70 61 72 65 2e 0a 2a 2f 0a 63  OP_Compare..*/.c
eaa0: 61 73 65 20 4f 50 5f 50 65 72 6d 75 74 61 74 69  ase OP_Permutati
eab0: 6f 6e 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20  on: {.  assert( 
eac0: 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
ead0: 49 4e 54 41 52 52 41 59 20 29 3b 0a 20 20 61 73  INTARRAY );.  as
eae0: 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 61 69  sert( pOp->p4.ai
eaf0: 20 29 3b 0a 20 20 61 50 65 72 6d 75 74 65 20 3d   );.  aPermute =
eb00: 20 70 4f 70 2d 3e 70 34 2e 61 69 3b 0a 20 20 62   pOp->p4.ai;.  b
eb10: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
eb20: 64 65 3a 20 43 6f 6d 70 61 72 65 20 50 31 20 50  de: Compare P1 P
eb30: 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20  2 P3 P4 *.**.** 
eb40: 43 6f 6d 70 61 72 65 20 74 77 6f 20 76 65 63 74  Compare two vect
eb50: 6f 72 73 20 6f 66 20 72 65 67 69 73 74 65 72 73  ors of registers
eb60: 20 69 6e 20 72 65 67 28 50 31 29 2e 2e 72 65 67   in reg(P1)..reg
eb70: 28 50 31 2b 50 33 2d 31 29 20 28 63 61 6c 6c 20  (P1+P3-1) (call 
eb80: 74 68 69 73 0a 2a 2a 20 76 65 63 74 6f 72 20 22  this.** vector "
eb90: 41 22 29 20 61 6e 64 20 69 6e 20 72 65 67 28 50  A") and in reg(P
eba0: 32 29 2e 2e 72 65 67 28 50 32 2b 50 33 2d 31 29  2)..reg(P2+P3-1)
ebb0: 20 28 22 42 22 29 2e 20 20 53 61 76 65 20 74 68   ("B").  Save th
ebc0: 65 20 72 65 73 75 6c 74 20 6f 66 0a 2a 2a 20 74  e result of.** t
ebd0: 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20 66 6f  he comparison fo
ebe0: 72 20 75 73 65 20 62 79 20 74 68 65 20 6e 65 78  r use by the nex
ebf0: 74 20 4f 50 5f 4a 75 6d 70 20 69 6e 73 74 72 75  t OP_Jump instru
ec00: 63 74 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20  ct..**.** P4 is 
ec10: 61 20 4b 65 79 49 6e 66 6f 20 73 74 72 75 63 74  a KeyInfo struct
ec20: 75 72 65 20 74 68 61 74 20 64 65 66 69 6e 65 73  ure that defines
ec30: 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
ec40: 6e 63 65 73 20 61 6e 64 20 73 6f 72 74 0a 2a 2a  nces and sort.**
ec50: 20 6f 72 64 65 72 73 20 66 6f 72 20 74 68 65 20   orders for the 
ec60: 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 54 68 65  comparison.  The
ec70: 20 70 65 72 6d 75 74 61 74 69 6f 6e 20 61 70 70   permutation app
ec80: 6c 69 65 73 20 74 6f 20 72 65 67 69 73 74 65 72  lies to register
ec90: 73 0a 2a 2a 20 6f 6e 6c 79 2e 20 20 54 68 65 20  s.** only.  The 
eca0: 4b 65 79 49 6e 66 6f 20 65 6c 65 6d 65 6e 74 73  KeyInfo elements
ecb0: 20 61 72 65 20 75 73 65 64 20 73 65 71 75 65 6e   are used sequen
ecc0: 74 69 61 6c 6c 79 2e 0a 2a 2a 0a 2a 2a 20 54 68  tially..**.** Th
ecd0: 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20  e comparison is 
ece0: 61 20 73 6f 72 74 20 63 6f 6d 70 61 72 69 73 6f  a sort compariso
ecf0: 6e 2c 20 73 6f 20 4e 55 4c 4c 73 20 63 6f 6d 70  n, so NULLs comp
ed00: 61 72 65 20 65 71 75 61 6c 2c 0a 2a 2a 20 4e 55  are equal,.** NU
ed10: 4c 4c 73 20 61 72 65 20 6c 65 73 73 20 74 68 61  LLs are less tha
ed20: 6e 20 6e 75 6d 62 65 72 73 2c 20 6e 75 6d 62 65  n numbers, numbe
ed30: 72 73 20 61 72 65 20 6c 65 73 73 20 74 68 61 6e  rs are less than
ed40: 20 73 74 72 69 6e 67 73 2c 0a 2a 2a 20 61 6e 64   strings,.** and
ed50: 20 73 74 72 69 6e 67 73 20 61 72 65 20 6c 65 73   strings are les
ed60: 73 20 74 68 61 6e 20 62 6c 6f 62 73 2e 0a 2a 2f  s than blobs..*/
ed70: 0a 63 61 73 65 20 4f 50 5f 43 6f 6d 70 61 72 65  .case OP_Compare
ed80: 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a 20 20 69  : {.  int n;.  i
ed90: 6e 74 20 69 3b 0a 20 20 69 6e 74 20 70 31 3b 0a  nt i;.  int p1;.
eda0: 20 20 69 6e 74 20 70 32 3b 0a 20 20 63 6f 6e 73    int p2;.  cons
edb0: 74 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49  t KeyInfo *pKeyI
edc0: 6e 66 6f 3b 0a 20 20 69 6e 74 20 69 64 78 3b 0a  nfo;.  int idx;.
edd0: 20 20 43 6f 6c 6c 53 65 71 20 2a 70 43 6f 6c 6c    CollSeq *pColl
ede0: 3b 20 20 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e  ;    /* Collatin
edf0: 67 20 73 65 71 75 65 6e 63 65 20 74 6f 20 75 73  g sequence to us
ee00: 65 20 6f 6e 20 74 68 69 73 20 74 65 72 6d 20 2a  e on this term *
ee10: 2f 0a 20 20 69 6e 74 20 62 52 65 76 3b 20 20 20  /.  int bRev;   
ee20: 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 66         /* True f
ee30: 6f 72 20 44 45 53 43 45 4e 44 49 4e 47 20 73 6f  or DESCENDING so
ee40: 72 74 20 6f 72 64 65 72 20 2a 2f 0a 0a 20 20 6e  rt order */..  n
ee50: 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 70 4b   = pOp->p3;.  pK
ee60: 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34  eyInfo = pOp->p4
ee70: 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 61 73 73  .pKeyInfo;.  ass
ee80: 65 72 74 28 20 6e 3e 30 20 29 3b 0a 20 20 61 73  ert( n>0 );.  as
ee90: 73 65 72 74 28 20 70 4b 65 79 49 6e 66 6f 21 3d  sert( pKeyInfo!=
eea0: 30 20 29 3b 0a 20 20 70 31 20 3d 20 70 4f 70 2d  0 );.  p1 = pOp-
eeb0: 3e 70 31 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d  >p1;.  p2 = pOp-
eec0: 3e 70 32 3b 0a 23 69 66 20 53 51 4c 49 54 45 5f  >p2;.#if SQLITE_
eed0: 44 45 42 55 47 0a 20 20 69 66 28 20 61 50 65 72  DEBUG.  if( aPer
eee0: 6d 75 74 65 20 29 7b 0a 20 20 20 20 69 6e 74 20  mute ){.    int 
eef0: 6b 2c 20 6d 78 20 3d 20 30 3b 0a 20 20 20 20 66  k, mx = 0;.    f
ef00: 6f 72 28 6b 3d 30 3b 20 6b 3c 6e 3b 20 6b 2b 2b  or(k=0; k<n; k++
ef10: 29 20 69 66 28 20 61 50 65 72 6d 75 74 65 5b 6b  ) if( aPermute[k
ef20: 5d 3e 6d 78 20 29 20 6d 78 20 3d 20 61 50 65 72  ]>mx ) mx = aPer
ef30: 6d 75 74 65 5b 6b 5d 3b 0a 20 20 20 20 61 73 73  mute[k];.    ass
ef40: 65 72 74 28 20 70 31 3e 30 20 26 26 20 70 31 2b  ert( p1>0 && p1+
ef50: 6d 78 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31 20 29 3b  mx<=p->nMem+1 );
ef60: 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 32 3e  .    assert( p2>
ef70: 30 20 26 26 20 70 32 2b 6d 78 3c 3d 70 2d 3e 6e  0 && p2+mx<=p->n
ef80: 4d 65 6d 2b 31 20 29 3b 0a 20 20 7d 65 6c 73 65  Mem+1 );.  }else
ef90: 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 31  {.    assert( p1
efa0: 3e 30 20 26 26 20 70 31 2b 6e 3c 3d 70 2d 3e 6e  >0 && p1+n<=p->n
efb0: 4d 65 6d 2b 31 20 29 3b 0a 20 20 20 20 61 73 73  Mem+1 );.    ass
efc0: 65 72 74 28 20 70 32 3e 30 20 26 26 20 70 32 2b  ert( p2>0 && p2+
efd0: 6e 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31 20 29 3b 0a  n<=p->nMem+1 );.
efe0: 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51    }.#endif /* SQ
eff0: 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a 20 20  LITE_DEBUG */.  
f000: 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b  for(i=0; i<n; i+
f010: 2b 29 7b 0a 20 20 20 20 69 64 78 20 3d 20 61 50  +){.    idx = aP
f020: 65 72 6d 75 74 65 20 3f 20 61 50 65 72 6d 75 74  ermute ? aPermut
f030: 65 5b 69 5d 20 3a 20 69 3b 0a 20 20 20 20 61 73  e[i] : i;.    as
f040: 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
f050: 28 26 61 4d 65 6d 5b 70 31 2b 69 64 78 5d 29 20  (&aMem[p1+idx]) 
f060: 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d  );.    assert( m
f070: 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b  emIsValid(&aMem[
f080: 70 32 2b 69 64 78 5d 29 20 29 3b 0a 20 20 20 20  p2+idx]) );.    
f090: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
f0a0: 31 2b 69 64 78 2c 20 26 61 4d 65 6d 5b 70 31 2b  1+idx, &aMem[p1+
f0b0: 69 64 78 5d 29 3b 0a 20 20 20 20 52 45 47 49 53  idx]);.    REGIS
f0c0: 54 45 52 5f 54 52 41 43 45 28 70 32 2b 69 64 78  TER_TRACE(p2+idx
f0d0: 2c 20 26 61 4d 65 6d 5b 70 32 2b 69 64 78 5d 29  , &aMem[p2+idx])
f0e0: 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 69 3c  ;.    assert( i<
f0f0: 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64  pKeyInfo->nField
f100: 20 29 3b 0a 20 20 20 20 70 43 6f 6c 6c 20 3d 20   );.    pColl = 
f110: 70 4b 65 79 49 6e 66 6f 2d 3e 61 43 6f 6c 6c 5b  pKeyInfo->aColl[
f120: 69 5d 3b 0a 20 20 20 20 62 52 65 76 20 3d 20 70  i];.    bRev = p
f130: 4b 65 79 49 6e 66 6f 2d 3e 61 53 6f 72 74 4f 72  KeyInfo->aSortOr
f140: 64 65 72 5b 69 5d 3b 0a 20 20 20 20 69 43 6f 6d  der[i];.    iCom
f150: 70 61 72 65 20 3d 20 73 71 6c 69 74 65 33 4d 65  pare = sqlite3Me
f160: 6d 43 6f 6d 70 61 72 65 28 26 61 4d 65 6d 5b 70  mCompare(&aMem[p
f170: 31 2b 69 64 78 5d 2c 20 26 61 4d 65 6d 5b 70 32  1+idx], &aMem[p2
f180: 2b 69 64 78 5d 2c 20 70 43 6f 6c 6c 29 3b 0a 20  +idx], pColl);. 
f190: 20 20 20 69 66 28 20 69 43 6f 6d 70 61 72 65 20     if( iCompare 
f1a0: 29 7b 0a 20 20 20 20 20 20 69 66 28 20 62 52 65  ){.      if( bRe
f1b0: 76 20 29 20 69 43 6f 6d 70 61 72 65 20 3d 20 2d  v ) iCompare = -
f1c0: 69 43 6f 6d 70 61 72 65 3b 0a 20 20 20 20 20 20  iCompare;.      
f1d0: 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d  break;.    }.  }
f1e0: 0a 20 20 61 50 65 72 6d 75 74 65 20 3d 20 30 3b  .  aPermute = 0;
f1f0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
f200: 4f 70 63 6f 64 65 3a 20 4a 75 6d 70 20 50 31 20  Opcode: Jump P1 
f210: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
f220: 4a 75 6d 70 20 74 6f 20 74 68 65 20 69 6e 73 74  Jump to the inst
f230: 72 75 63 74 69 6f 6e 20 61 74 20 61 64 64 72 65  ruction at addre
f240: 73 73 20 50 31 2c 20 50 32 2c 20 6f 72 20 50 33  ss P1, P2, or P3
f250: 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68   depending on wh
f260: 65 74 68 65 72 0a 2a 2a 20 69 6e 20 74 68 65 20  ether.** in the 
f270: 6d 6f 73 74 20 72 65 63 65 6e 74 20 4f 50 5f 43  most recent OP_C
f280: 6f 6d 70 61 72 65 20 69 6e 73 74 72 75 63 74 69  ompare instructi
f290: 6f 6e 20 74 68 65 20 50 31 20 76 65 63 74 6f 72  on the P1 vector
f2a0: 20 77 61 73 20 6c 65 73 73 20 74 68 61 6e 0a 2a   was less than.*
f2b0: 2a 20 65 71 75 61 6c 20 74 6f 2c 20 6f 72 20 67  * equal to, or g
f2c0: 72 65 61 74 65 72 20 74 68 61 6e 20 74 68 65 20  reater than the 
f2d0: 50 32 20 76 65 63 74 6f 72 2c 20 72 65 73 70 65  P2 vector, respe
f2e0: 63 74 69 76 65 6c 79 2e 0a 2a 2f 0a 63 61 73 65  ctively..*/.case
f2f0: 20 4f 50 5f 4a 75 6d 70 3a 20 7b 20 20 20 20 20   OP_Jump: {     
f300: 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
f310: 2a 2f 0a 20 20 69 66 28 20 69 43 6f 6d 70 61 72  */.  if( iCompar
f320: 65 3c 30 20 29 7b 0a 20 20 20 20 70 63 20 3d 20  e<0 ){.    pc = 
f330: 70 4f 70 2d 3e 70 31 20 2d 20 31 3b 0a 20 20 7d  pOp->p1 - 1;.  }
f340: 65 6c 73 65 20 69 66 28 20 69 43 6f 6d 70 61 72  else if( iCompar
f350: 65 3d 3d 30 20 29 7b 0a 20 20 20 20 70 63 20 3d  e==0 ){.    pc =
f360: 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
f370: 7d 65 6c 73 65 7b 0a 20 20 20 20 70 63 20 3d 20  }else{.    pc = 
f380: 70 4f 70 2d 3e 70 33 20 2d 20 31 3b 0a 20 20 7d  pOp->p3 - 1;.  }
f390: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
f3a0: 4f 70 63 6f 64 65 3a 20 41 6e 64 20 50 31 20 50  Opcode: And P1 P
f3b0: 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54  2 P3 * *.**.** T
f3c0: 61 6b 65 20 74 68 65 20 6c 6f 67 69 63 61 6c 20  ake the logical 
f3d0: 41 4e 44 20 6f 66 20 74 68 65 20 76 61 6c 75 65  AND of the value
f3e0: 73 20 69 6e 20 72 65 67 69 73 74 65 72 73 20 50  s in registers P
f3f0: 31 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20  1 and P2 and.** 
f400: 77 72 69 74 65 20 74 68 65 20 72 65 73 75 6c 74  write the result
f410: 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
f420: 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69 74 68  3..**.** If eith
f430: 65 72 20 50 31 20 6f 72 20 50 32 20 69 73 20 30  er P1 or P2 is 0
f440: 20 28 66 61 6c 73 65 29 20 74 68 65 6e 20 74 68   (false) then th
f450: 65 20 72 65 73 75 6c 74 20 69 73 20 30 20 65 76  e result is 0 ev
f460: 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 6f 74 68  en if.** the oth
f470: 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c  er input is NULL
f480: 2e 20 20 41 20 4e 55 4c 4c 20 61 6e 64 20 74 72  .  A NULL and tr
f490: 75 65 20 6f 72 20 74 77 6f 20 4e 55 4c 4c 73 20  ue or two NULLs 
f4a0: 67 69 76 65 0a 2a 2a 20 61 20 4e 55 4c 4c 20 6f  give.** a NULL o
f4b0: 75 74 70 75 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  utput..*/./* Opc
f4c0: 6f 64 65 3a 20 4f 72 20 50 31 20 50 32 20 50 33  ode: Or P1 P2 P3
f4d0: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20   * *.**.** Take 
f4e0: 74 68 65 20 6c 6f 67 69 63 61 6c 20 4f 52 20 6f  the logical OR o
f4f0: 66 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20  f the values in 
f500: 72 65 67 69 73 74 65 72 20 50 31 20 61 6e 64 20  register P1 and 
f510: 50 32 20 61 6e 64 0a 2a 2a 20 73 74 6f 72 65 20  P2 and.** store 
f520: 74 68 65 20 61 6e 73 77 65 72 20 69 6e 20 72 65  the answer in re
f530: 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a  gister P3..**.**
f540: 20 49 66 20 65 69 74 68 65 72 20 50 31 20 6f 72   If either P1 or
f550: 20 50 32 20 69 73 20 6e 6f 6e 7a 65 72 6f 20 28   P2 is nonzero (
f560: 74 72 75 65 29 20 74 68 65 6e 20 74 68 65 20 72  true) then the r
f570: 65 73 75 6c 74 20 69 73 20 31 20 28 74 72 75 65  esult is 1 (true
f580: 29 0a 2a 2a 20 65 76 65 6e 20 69 66 20 74 68 65  ).** even if the
f590: 20 6f 74 68 65 72 20 69 6e 70 75 74 20 69 73 20   other input is 
f5a0: 4e 55 4c 4c 2e 20 20 41 20 4e 55 4c 4c 20 61 6e  NULL.  A NULL an
f5b0: 64 20 66 61 6c 73 65 20 6f 72 20 74 77 6f 20 4e  d false or two N
f5c0: 55 4c 4c 73 0a 2a 2a 20 67 69 76 65 20 61 20 4e  ULLs.** give a N
f5d0: 55 4c 4c 20 6f 75 74 70 75 74 2e 0a 2a 2f 0a 63  ULL output..*/.c
f5e0: 61 73 65 20 4f 50 5f 41 6e 64 3a 20 20 20 20 20  ase OP_And:     
f5f0: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
f600: 20 61 73 20 54 4b 5f 41 4e 44 2c 20 69 6e 31 2c   as TK_AND, in1,
f610: 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61   in2, out3 */.ca
f620: 73 65 20 4f 50 5f 4f 72 3a 20 7b 20 20 20 20 20  se OP_Or: {     
f630: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
f640: 61 73 20 54 4b 5f 4f 52 2c 20 69 6e 31 2c 20 69  as TK_OR, in1, i
f650: 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69 6e  n2, out3 */.  in
f660: 74 20 76 31 3b 20 20 20 20 2f 2a 20 4c 65 66 74  t v1;    /* Left
f670: 20 6f 70 65 72 61 6e 64 3a 20 20 30 3d 3d 46 41   operand:  0==FA
f680: 4c 53 45 2c 20 31 3d 3d 54 52 55 45 2c 20 32 3d  LSE, 1==TRUE, 2=
f690: 3d 55 4e 4b 4e 4f 57 4e 20 6f 72 20 4e 55 4c 4c  =UNKNOWN or NULL
f6a0: 20 2a 2f 0a 20 20 69 6e 74 20 76 32 3b 20 20 20   */.  int v2;   
f6b0: 20 2f 2a 20 52 69 67 68 74 20 6f 70 65 72 61 6e   /* Right operan
f6c0: 64 3a 20 30 3d 3d 46 41 4c 53 45 2c 20 31 3d 3d  d: 0==FALSE, 1==
f6d0: 54 52 55 45 2c 20 32 3d 3d 55 4e 4b 4e 4f 57 4e  TRUE, 2==UNKNOWN
f6e0: 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 0a 20 20 70   or NULL */..  p
f6f0: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
f700: 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31  >p1];.  if( pIn1
f710: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ->flags & MEM_Nu
f720: 6c 6c 20 29 7b 0a 20 20 20 20 76 31 20 3d 20 32  ll ){.    v1 = 2
f730: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 76  ;.  }else{.    v
f740: 31 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49  1 = sqlite3VdbeI
f750: 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 21 3d 30  ntValue(pIn1)!=0
f760: 3b 0a 20 20 7d 0a 20 20 70 49 6e 32 20 3d 20 26  ;.  }.  pIn2 = &
f770: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
f780: 20 69 66 28 20 70 49 6e 32 2d 3e 66 6c 61 67 73   if( pIn2->flags
f790: 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20   & MEM_Null ){. 
f7a0: 20 20 20 76 32 20 3d 20 32 3b 0a 20 20 7d 65 6c     v2 = 2;.  }el
f7b0: 73 65 7b 0a 20 20 20 20 76 32 20 3d 20 73 71 6c  se{.    v2 = sql
f7c0: 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65  ite3VdbeIntValue
f7d0: 28 70 49 6e 32 29 21 3d 30 3b 0a 20 20 7d 0a 20  (pIn2)!=0;.  }. 
f7e0: 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65   if( pOp->opcode
f7f0: 3d 3d 4f 50 5f 41 6e 64 20 29 7b 0a 20 20 20 20  ==OP_And ){.    
f800: 73 74 61 74 69 63 20 63 6f 6e 73 74 20 75 6e 73  static const uns
f810: 69 67 6e 65 64 20 63 68 61 72 20 61 6e 64 5f 6c  igned char and_l
f820: 6f 67 69 63 5b 5d 20 3d 20 7b 20 30 2c 20 30 2c  ogic[] = { 0, 0,
f830: 20 30 2c 20 30 2c 20 31 2c 20 32 2c 20 30 2c 20   0, 0, 1, 2, 0, 
f840: 32 2c 20 32 20 7d 3b 0a 20 20 20 20 76 31 20 3d  2, 2 };.    v1 =
f850: 20 61 6e 64 5f 6c 6f 67 69 63 5b 76 31 2a 33 2b   and_logic[v1*3+
f860: 76 32 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  v2];.  }else{.  
f870: 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 75    static const u
f880: 6e 73 69 67 6e 65 64 20 63 68 61 72 20 6f 72 5f  nsigned char or_
f890: 6c 6f 67 69 63 5b 5d 20 3d 20 7b 20 30 2c 20 31  logic[] = { 0, 1
f8a0: 2c 20 32 2c 20 31 2c 20 31 2c 20 31 2c 20 32 2c  , 2, 1, 1, 1, 2,
f8b0: 20 31 2c 20 32 20 7d 3b 0a 20 20 20 20 76 31 20   1, 2 };.    v1 
f8c0: 3d 20 6f 72 5f 6c 6f 67 69 63 5b 76 31 2a 33 2b  = or_logic[v1*3+
f8d0: 76 32 5d 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 20  v2];.  }.  pOut 
f8e0: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
f8f0: 3b 0a 20 20 69 66 28 20 76 31 3d 3d 32 20 29 7b  ;.  if( v1==2 ){
f900: 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46  .    MemSetTypeF
f910: 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 4e 75  lag(pOut, MEM_Nu
f920: 6c 6c 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  ll);.  }else{.  
f930: 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 76 31    pOut->u.i = v1
f940: 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65  ;.    MemSetType
f950: 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49  Flag(pOut, MEM_I
f960: 6e 74 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  nt);.  }.  break
f970: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
f980: 4e 6f 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  Not P1 P2 * * *.
f990: 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20  **.** Interpret 
f9a0: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
f9b0: 69 73 74 65 72 20 50 31 20 61 73 20 61 20 62 6f  ister P1 as a bo
f9c0: 6f 6c 65 61 6e 20 76 61 6c 75 65 2e 20 20 53 74  olean value.  St
f9d0: 6f 72 65 20 74 68 65 0a 2a 2a 20 62 6f 6f 6c 65  ore the.** boole
f9e0: 61 6e 20 63 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e  an complement in
f9f0: 20 72 65 67 69 73 74 65 72 20 50 32 2e 20 20 49   register P2.  I
fa00: 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  f the value in r
fa10: 65 67 69 73 74 65 72 20 50 31 20 69 73 20 0a 2a  egister P1 is .*
fa20: 2a 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 61 20 4e  * NULL, then a N
fa30: 55 4c 4c 20 69 73 20 73 74 6f 72 65 64 20 69 6e  ULL is stored in
fa40: 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P2..*/.case OP_
fa50: 4e 6f 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20  Not: {          
fa60: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
fa70: 20 54 4b 5f 4e 4f 54 2c 20 69 6e 31 2c 20 6f 75   TK_NOT, in1, ou
fa80: 74 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26  t2 */.  pIn1 = &
fa90: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
faa0: 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f   pOut = &aMem[pO
fab0: 70 2d 3e 70 32 5d 3b 0a 20 20 69 66 28 20 70 49  p->p2];.  if( pI
fac0: 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
fad0: 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69  Null ){.    sqli
fae0: 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c  te3VdbeMemSetNul
faf0: 6c 28 70 4f 75 74 29 3b 0a 20 20 7d 65 6c 73 65  l(pOut);.  }else
fb00: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
fb10: 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 70 4f 75  eMemSetInt64(pOu
fb20: 74 2c 20 21 73 71 6c 69 74 65 33 56 64 62 65 49  t, !sqlite3VdbeI
fb30: 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 29 3b 0a  ntValue(pIn1));.
fb40: 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
fb50: 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 69 74 4e 6f  /* Opcode: BitNo
fb60: 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  t P1 P2 * * *.**
fb70: 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68  .** Interpret th
fb80: 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67  e content of reg
fb90: 69 73 74 65 72 20 50 31 20 61 73 20 61 6e 20 69  ister P1 as an i
fba0: 6e 74 65 67 65 72 2e 20 20 53 74 6f 72 65 20 74  nteger.  Store t
fbb0: 68 65 0a 2a 2a 20 6f 6e 65 73 2d 63 6f 6d 70 6c  he.** ones-compl
fbc0: 65 6d 65 6e 74 20 6f 66 20 74 68 65 20 50 31 20  ement of the P1 
fbd0: 76 61 6c 75 65 20 69 6e 74 6f 20 72 65 67 69 73  value into regis
fbe0: 74 65 72 20 50 32 2e 20 20 49 66 20 50 31 20 68  ter P2.  If P1 h
fbf0: 6f 6c 64 73 0a 2a 2a 20 61 20 4e 55 4c 4c 20 74  olds.** a NULL t
fc00: 68 65 6e 20 73 74 6f 72 65 20 61 20 4e 55 4c 4c  hen store a NULL
fc10: 20 69 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20   in P2..*/.case 
fc20: 4f 50 5f 42 69 74 4e 6f 74 3a 20 7b 20 20 20 20  OP_BitNot: {    
fc30: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
fc40: 20 61 73 20 54 4b 5f 42 49 54 4e 4f 54 2c 20 69   as TK_BITNOT, i
fc50: 6e 31 2c 20 6f 75 74 32 20 2a 2f 0a 20 20 70 49  n1, out2 */.  pI
fc60: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
fc70: 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61  p1];.  pOut = &a
fc80: 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
fc90: 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20  if( pIn1->flags 
fca0: 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20  & MEM_Null ){.  
fcb0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
fcc0: 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20  SetNull(pOut);. 
fcd0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69   }else{.    sqli
fce0: 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74  te3VdbeMemSetInt
fcf0: 36 34 28 70 4f 75 74 2c 20 7e 73 71 6c 69 74 65  64(pOut, ~sqlite
fd00: 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49  3VdbeIntValue(pI
fd10: 6e 31 29 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61  n1));.  }.  brea
fd20: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
fd30: 20 4f 6e 63 65 20 50 31 20 50 32 20 2a 20 2a 20   Once P1 P2 * * 
fd40: 2a 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b 20 69 66  *.**.** Check if
fd50: 20 4f 50 5f 4f 6e 63 65 20 66 6c 61 67 20 50 31   OP_Once flag P1
fd60: 20 69 73 20 73 65 74 2e 20 49 66 20 73 6f 2c 20   is set. If so, 
fd70: 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74  jump to instruct
fd80: 69 6f 6e 20 50 32 2e 20 4f 74 68 65 72 77 69 73  ion P2. Otherwis
fd90: 65 2c 0a 2a 2a 20 73 65 74 20 74 68 65 20 66 6c  e,.** set the fl
fda0: 61 67 20 61 6e 64 20 66 61 6c 6c 20 74 68 72 6f  ag and fall thro
fdb0: 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ugh to the next 
fdc0: 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a  instruction..**.
fdd0: 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 4a 75 6d  ** See also: Jum
fde0: 70 4f 6e 63 65 0a 2a 2f 0a 63 61 73 65 20 4f 50  pOnce.*/.case OP
fdf0: 5f 4f 6e 63 65 3a 20 7b 20 20 20 20 20 20 20 20  _Once: {        
fe00: 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
fe10: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
fe20: 31 3c 70 2d 3e 6e 4f 6e 63 65 46 6c 61 67 20 29  1<p->nOnceFlag )
fe30: 3b 0a 20 20 69 66 28 20 70 2d 3e 61 4f 6e 63 65  ;.  if( p->aOnce
fe40: 46 6c 61 67 5b 70 4f 70 2d 3e 70 31 5d 20 29 7b  Flag[pOp->p1] ){
fe50: 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70  .    pc = pOp->p
fe60: 32 2d 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  2-1;.  }else{.  
fe70: 20 20 70 2d 3e 61 4f 6e 63 65 46 6c 61 67 5b 70    p->aOnceFlag[p
fe80: 4f 70 2d 3e 70 31 5d 20 3d 20 31 3b 0a 20 20 7d  Op->p1] = 1;.  }
fe90: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
fea0: 4f 70 63 6f 64 65 3a 20 49 66 20 50 31 20 50 32  Opcode: If P1 P2
feb0: 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75   P3 * *.**.** Ju
fec0: 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68 65 20  mp to P2 if the 
fed0: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
fee0: 72 20 50 31 20 69 73 20 74 72 75 65 2e 20 20 54  r P1 is true.  T
fef0: 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20 63  he value.** is c
ff00: 6f 6e 73 69 64 65 72 65 64 20 74 72 75 65 20 69  onsidered true i
ff10: 66 20 69 74 20 69 73 20 6e 75 6d 65 72 69 63 20  f it is numeric 
ff20: 61 6e 64 20 6e 6f 6e 2d 7a 65 72 6f 2e 20 20 49  and non-zero.  I
ff30: 66 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69  f the value.** i
ff40: 6e 20 50 31 20 69 73 20 4e 55 4c 4c 20 74 68 65  n P1 is NULL the
ff50: 6e 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 20  n take the jump 
ff60: 69 66 20 50 33 20 69 73 20 6e 6f 6e 2d 7a 65 72  if P3 is non-zer
ff70: 6f 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  o..*/./* Opcode:
ff80: 20 49 66 4e 6f 74 20 50 31 20 50 32 20 50 33 20   IfNot P1 P2 P3 
ff90: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74  * *.**.** Jump t
ffa0: 6f 20 50 32 20 69 66 20 74 68 65 20 76 61 6c 75  o P2 if the valu
ffb0: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
ffc0: 20 69 73 20 46 61 6c 73 65 2e 20 20 54 68 65 20   is False.  The 
ffd0: 76 61 6c 75 65 0a 2a 2a 20 69 73 20 63 6f 6e 73  value.** is cons
ffe0: 69 64 65 72 65 64 20 66 61 6c 73 65 20 69 66 20  idered false if 
fff0: 69 74 20 68 61 73 20 61 20 6e 75 6d 65 72 69 63  it has a numeric
10000 20 76 61 6c 75 65 20 6f 66 20 7a 65 72 6f 2e 20   value of zero. 
10010 20 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a   If the value.**
10020 20 69 6e 20 50 31 20 69 73 20 4e 55 4c 4c 20 74   in P1 is NULL t
10030 68 65 6e 20 74 61 6b 65 20 74 68 65 20 6a 75 6d  hen take the jum
10040 70 20 69 66 20 50 33 20 69 73 20 7a 65 72 6f 2e  p if P3 is zero.
10050 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 3a 20  .*/.case OP_If: 
10060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10070 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a  /* jump, in1 */.
10080 63 61 73 65 20 4f 50 5f 49 66 4e 6f 74 3a 20 7b  case OP_IfNot: {
10090 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a              /* j
100a0 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 69 6e  ump, in1 */.  in
100b0 74 20 63 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61  t c;.  pIn1 = &a
100c0 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
100d0 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20  if( pIn1->flags 
100e0 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20  & MEM_Null ){.  
100f0 20 20 63 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20    c = pOp->p3;. 
10100 20 7d 65 6c 73 65 7b 0a 23 69 66 64 65 66 20 53   }else{.#ifdef S
10110 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54  QLITE_OMIT_FLOAT
10120 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 20 20 63 20  ING_POINT.    c 
10130 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74  = sqlite3VdbeInt
10140 56 61 6c 75 65 28 70 49 6e 31 29 21 3d 30 3b 0a  Value(pIn1)!=0;.
10150 23 65 6c 73 65 0a 20 20 20 20 63 20 3d 20 73 71  #else.    c = sq
10160 6c 69 74 65 33 56 64 62 65 52 65 61 6c 56 61 6c  lite3VdbeRealVal
10170 75 65 28 70 49 6e 31 29 21 3d 30 2e 30 3b 0a 23  ue(pIn1)!=0.0;.#
10180 65 6e 64 69 66 0a 20 20 20 20 69 66 28 20 70 4f  endif.    if( pO
10190 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 66  p->opcode==OP_If
101a0 4e 6f 74 20 29 20 63 20 3d 20 21 63 3b 0a 20 20  Not ) c = !c;.  
101b0 7d 0a 20 20 69 66 28 20 63 20 29 7b 0a 20 20 20  }.  if( c ){.   
101c0 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b   pc = pOp->p2-1;
101d0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
101e0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 73 4e 75  ./* Opcode: IsNu
101f0 6c 6c 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  ll P1 P2 * * *.*
10200 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20  *.** Jump to P2 
10210 69 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  if the value in 
10220 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20 4e  register P1 is N
10230 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ULL..*/.case OP_
10240 49 73 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20 20  IsNull: {       
10250 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
10260 54 4b 5f 49 53 4e 55 4c 4c 2c 20 6a 75 6d 70 2c  TK_ISNULL, jump,
10270 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d   in1 */.  pIn1 =
10280 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
10290 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c  .  if( (pIn1->fl
102a0 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21  ags & MEM_Null)!
102b0 3d 30 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70  =0 ){.    pc = p
102c0 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a  Op->p2 - 1;.  }.
102d0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
102e0 70 63 6f 64 65 3a 20 4e 6f 74 4e 75 6c 6c 20 50  pcode: NotNull P
102f0 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
10300 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74   Jump to P2 if t
10310 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
10320 73 74 65 72 20 50 31 20 69 73 20 6e 6f 74 20 4e  ster P1 is not N
10330 55 4c 4c 2e 20 20 0a 2a 2f 0a 63 61 73 65 20 4f  ULL.  .*/.case O
10340 50 5f 4e 6f 74 4e 75 6c 6c 3a 20 7b 20 20 20 20  P_NotNull: {    
10350 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
10360 61 73 20 54 4b 5f 4e 4f 54 4e 55 4c 4c 2c 20 6a  as TK_NOTNULL, j
10370 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49  ump, in1 */.  pI
10380 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
10390 70 31 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 31  p1];.  if( (pIn1
103a0 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ->flags & MEM_Nu
103b0 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 70 63  ll)==0 ){.    pc
103c0 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
103d0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
103e0 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6c 75 6d  /* Opcode: Colum
103f0 6e 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  n P1 P2 P3 P4 P5
10400 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74  .**.** Interpret
10410 20 74 68 65 20 64 61 74 61 20 74 68 61 74 20 63   the data that c
10420 75 72 73 6f 72 20 50 31 20 70 6f 69 6e 74 73 20  ursor P1 points 
10430 74 6f 20 61 73 20 61 20 73 74 72 75 63 74 75 72  to as a structur
10440 65 20 62 75 69 6c 74 20 75 73 69 6e 67 0a 2a 2a  e built using.**
10450 20 74 68 65 20 4d 61 6b 65 52 65 63 6f 72 64 20   the MakeRecord 
10460 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 28 53  instruction.  (S
10470 65 65 20 74 68 65 20 4d 61 6b 65 52 65 63 6f 72  ee the MakeRecor
10480 64 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64 64  d opcode for add
10490 69 74 69 6f 6e 61 6c 0a 2a 2a 20 69 6e 66 6f 72  itional.** infor
104a0 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65  mation about the
104b0 20 66 6f 72 6d 61 74 20 6f 66 20 74 68 65 20 64   format of the d
104c0 61 74 61 2e 29 20 20 45 78 74 72 61 63 74 20 74  ata.)  Extract t
104d0 68 65 20 50 32 2d 74 68 20 63 6f 6c 75 6d 6e 0a  he P2-th column.
104e0 2a 2a 20 66 72 6f 6d 20 74 68 69 73 20 72 65 63  ** from this rec
104f0 6f 72 64 2e 20 20 49 66 20 74 68 65 72 65 20 61  ord.  If there a
10500 72 65 20 6c 65 73 73 20 74 68 61 74 20 28 50 32  re less that (P2
10510 2b 31 29 20 0a 2a 2a 20 76 61 6c 75 65 73 20 69  +1) .** values i
10520 6e 20 74 68 65 20 72 65 63 6f 72 64 2c 20 65 78  n the record, ex
10530 74 72 61 63 74 20 61 20 4e 55 4c 4c 2e 0a 2a 2a  tract a NULL..**
10540 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65 20 65 78  .** The value ex
10550 74 72 61 63 74 65 64 20 69 73 20 73 74 6f 72 65  tracted is store
10560 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  d in register P3
10570 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 63  ..**.** If the c
10580 6f 6c 75 6d 6e 20 63 6f 6e 74 61 69 6e 73 20 66  olumn contains f
10590 65 77 65 72 20 74 68 61 6e 20 50 32 20 66 69 65  ewer than P2 fie
105a0 6c 64 73 2c 20 74 68 65 6e 20 65 78 74 72 61 63  lds, then extrac
105b0 74 20 61 20 4e 55 4c 4c 2e 20 20 4f 72 2c 0a 2a  t a NULL.  Or,.*
105c0 2a 20 69 66 20 74 68 65 20 50 34 20 61 72 67 75  * if the P4 argu
105d0 6d 65 6e 74 20 69 73 20 61 20 50 34 5f 4d 45 4d  ment is a P4_MEM
105e0 20 75 73 65 20 74 68 65 20 76 61 6c 75 65 20 6f   use the value o
105f0 66 20 74 68 65 20 50 34 20 61 72 67 75 6d 65 6e  f the P4 argumen
10600 74 20 61 73 0a 2a 2a 20 74 68 65 20 72 65 73 75  t as.** the resu
10610 6c 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  lt..**.** If the
10620 20 4f 50 46 4c 41 47 5f 43 4c 45 41 52 43 41 43   OPFLAG_CLEARCAC
10630 48 45 20 62 69 74 20 69 73 20 73 65 74 20 6f 6e  HE bit is set on
10640 20 50 35 20 61 6e 64 20 50 31 20 69 73 20 61 20   P5 and P1 is a 
10650 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 63 75 72  pseudo-table cur
10660 73 6f 72 2c 0a 2a 2a 20 74 68 65 6e 20 74 68 65  sor,.** then the
10670 20 63 61 63 68 65 20 6f 66 20 74 68 65 20 63 75   cache of the cu
10680 72 73 6f 72 20 69 73 20 72 65 73 65 74 20 70 72  rsor is reset pr
10690 69 6f 72 20 74 6f 20 65 78 74 72 61 63 74 69 6e  ior to extractin
106a0 67 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a  g the column..**
106b0 20 54 68 65 20 66 69 72 73 74 20 4f 50 5f 43 6f   The first OP_Co
106c0 6c 75 6d 6e 20 61 67 61 69 6e 73 74 20 61 20 70  lumn against a p
106d0 73 65 75 64 6f 2d 74 61 62 6c 65 20 61 66 74 65  seudo-table afte
106e0 72 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74  r the value of t
106f0 68 65 20 63 6f 6e 74 65 6e 74 0a 2a 2a 20 72 65  he content.** re
10700 67 69 73 74 65 72 20 68 61 73 20 63 68 61 6e 67  gister has chang
10710 65 64 20 73 68 6f 75 6c 64 20 68 61 76 65 20 74  ed should have t
10720 68 69 73 20 62 69 74 20 73 65 74 2e 0a 2a 2f 0a  his bit set..*/.
10730 63 61 73 65 20 4f 50 5f 43 6f 6c 75 6d 6e 3a 20  case OP_Column: 
10740 7b 0a 20 20 75 33 32 20 70 61 79 6c 6f 61 64 53  {.  u32 payloadS
10750 69 7a 65 3b 20 20 20 2f 2a 20 4e 75 6d 62 65 72  ize;   /* Number
10760 20 6f 66 20 62 79 74 65 73 20 69 6e 20 74 68 65   of bytes in the
10770 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 36 34   record */.  i64
10780 20 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 3b 20   payloadSize64; 
10790 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74  /* Number of byt
107a0 65 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64  es in the record
107b0 20 2a 2f 0a 20 20 69 6e 74 20 70 31 3b 20 20 20   */.  int p1;   
107c0 20 20 20 20 20 20 20 20 20 2f 2a 20 50 31 20 76           /* P1 v
107d0 61 6c 75 65 20 6f 66 20 74 68 65 20 6f 70 63 6f  alue of the opco
107e0 64 65 20 2a 2f 0a 20 20 69 6e 74 20 70 32 3b 20  de */.  int p2; 
107f0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 63 6f             /* co
10800 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 74 6f 20 72  lumn number to r
10810 65 74 72 69 65 76 65 20 2a 2f 0a 20 20 56 64 62  etrieve */.  Vdb
10820 65 43 75 72 73 6f 72 20 2a 70 43 3b 20 20 20 20  eCursor *pC;    
10830 2f 2a 20 54 68 65 20 56 44 42 45 20 63 75 72 73  /* The VDBE curs
10840 6f 72 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 52  or */.  char *zR
10850 65 63 3b 20 20 20 20 20 20 20 20 2f 2a 20 50 6f  ec;        /* Po
10860 69 6e 74 65 72 20 74 6f 20 63 6f 6d 70 6c 65 74  inter to complet
10870 65 20 72 65 63 6f 72 64 2d 64 61 74 61 20 2a 2f  e record-data */
10880 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72  .  BtCursor *pCr
10890 73 72 3b 20 20 20 2f 2a 20 54 68 65 20 42 54 72  sr;   /* The BTr
108a0 65 65 20 63 75 72 73 6f 72 20 2a 2f 0a 20 20 75  ee cursor */.  u
108b0 33 32 20 2a 61 54 79 70 65 3b 20 20 20 20 20 20  32 *aType;      
108c0 20 20 2f 2a 20 61 54 79 70 65 5b 69 5d 20 68 6f    /* aType[i] ho
108d0 6c 64 73 20 74 68 65 20 6e 75 6d 65 72 69 63 20  lds the numeric 
108e0 74 79 70 65 20 6f 66 20 74 68 65 20 69 2d 74 68  type of the i-th
108f0 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 75 33 32   column */.  u32
10900 20 2a 61 4f 66 66 73 65 74 3b 20 20 20 20 20 20   *aOffset;      
10910 2f 2a 20 61 4f 66 66 73 65 74 5b 69 5d 20 69 73  /* aOffset[i] is
10920 20 6f 66 66 73 65 74 20 74 6f 20 73 74 61 72 74   offset to start
10930 20 6f 66 20 64 61 74 61 20 66 6f 72 20 69 2d 74   of data for i-t
10940 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 69 6e  h column */.  in
10950 74 20 6e 46 69 65 6c 64 3b 20 20 20 20 20 20 20  t nField;       
10960 20 2f 2a 20 6e 75 6d 62 65 72 20 6f 66 20 66 69   /* number of fi
10970 65 6c 64 73 20 69 6e 20 74 68 65 20 72 65 63 6f  elds in the reco
10980 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6c 65 6e 3b  rd */.  int len;
10990 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
109a0 65 20 6c 65 6e 67 74 68 20 6f 66 20 74 68 65 20  e length of the 
109b0 73 65 72 69 61 6c 69 7a 65 64 20 64 61 74 61 20  serialized data 
109c0 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 20 2a  for the column *
109d0 2f 0a 20 20 69 6e 74 20 69 3b 20 20 20 20 20 20  /.  int i;      
109e0 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63         /* Loop c
109f0 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 63 68 61 72  ounter */.  char
10a00 20 2a 7a 44 61 74 61 3b 20 20 20 20 20 20 20 2f   *zData;       /
10a10 2a 20 50 61 72 74 20 6f 66 20 74 68 65 20 72 65  * Part of the re
10a20 63 6f 72 64 20 62 65 69 6e 67 20 64 65 63 6f 64  cord being decod
10a30 65 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 44 65  ed */.  Mem *pDe
10a40 73 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 57 68  st;        /* Wh
10a50 65 72 65 20 74 6f 20 77 72 69 74 65 20 74 68 65  ere to write the
10a60 20 65 78 74 72 61 63 74 65 64 20 76 61 6c 75 65   extracted value
10a70 20 2a 2f 0a 20 20 4d 65 6d 20 73 4d 65 6d 3b 20   */.  Mem sMem; 
10a80 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6f 72 20           /* For 
10a90 73 74 6f 72 69 6e 67 20 74 68 65 20 72 65 63 6f  storing the reco
10aa0 72 64 20 62 65 69 6e 67 20 64 65 63 6f 64 65 64  rd being decoded
10ab0 20 2a 2f 0a 20 20 75 38 20 2a 7a 49 64 78 3b 20   */.  u8 *zIdx; 
10ac0 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65           /* Inde
10ad0 78 20 69 6e 74 6f 20 68 65 61 64 65 72 20 2a 2f  x into header */
10ae0 0a 20 20 75 38 20 2a 7a 45 6e 64 48 64 72 3b 20  .  u8 *zEndHdr; 
10af0 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72        /* Pointer
10b00 20 74 6f 20 66 69 72 73 74 20 62 79 74 65 20 61   to first byte a
10b10 66 74 65 72 20 74 68 65 20 68 65 61 64 65 72 20  fter the header 
10b20 2a 2f 0a 20 20 75 33 32 20 6f 66 66 73 65 74 3b  */.  u32 offset;
10b30 20 20 20 20 20 20 20 20 2f 2a 20 4f 66 66 73 65          /* Offse
10b40 74 20 69 6e 74 6f 20 74 68 65 20 64 61 74 61 20  t into the data 
10b50 2a 2f 0a 20 20 75 33 32 20 73 7a 46 69 65 6c 64  */.  u32 szField
10b60 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65  ;       /* Numbe
10b70 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20 74 68  r of bytes in th
10b80 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 61 20 66  e content of a f
10b90 69 65 6c 64 20 2a 2f 0a 20 20 69 6e 74 20 73 7a  ield */.  int sz
10ba0 48 64 72 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  Hdr;         /* 
10bb0 53 69 7a 65 20 6f 66 20 74 68 65 20 68 65 61 64  Size of the head
10bc0 65 72 20 73 69 7a 65 20 66 69 65 6c 64 20 61 74  er size field at
10bd0 20 73 74 61 72 74 20 6f 66 20 72 65 63 6f 72 64   start of record
10be0 20 2a 2f 0a 20 20 69 6e 74 20 61 76 61 69 6c 3b   */.  int avail;
10bf0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
10c00 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20 61  er of bytes of a
10c10 76 61 69 6c 61 62 6c 65 20 64 61 74 61 20 2a 2f  vailable data */
10c20 0a 20 20 75 33 32 20 74 3b 20 20 20 20 20 20 20  .  u32 t;       
10c30 20 20 20 20 20 20 2f 2a 20 41 20 74 79 70 65 20        /* A type 
10c40 63 6f 64 65 20 66 72 6f 6d 20 74 68 65 20 72 65  code from the re
10c50 63 6f 72 64 20 68 65 61 64 65 72 20 2a 2f 0a 20  cord header */. 
10c60 20 4d 65 6d 20 2a 70 52 65 67 3b 20 20 20 20 20   Mem *pReg;     
10c70 20 20 20 20 2f 2a 20 50 73 65 75 64 6f 54 61 62      /* PseudoTab
10c80 6c 65 20 69 6e 70 75 74 20 72 65 67 69 73 74 65  le input registe
10c90 72 20 2a 2f 0a 0a 0a 20 20 70 31 20 3d 20 70 4f  r */...  p1 = pO
10ca0 70 2d 3e 70 31 3b 0a 20 20 70 32 20 3d 20 70 4f  p->p1;.  p2 = pO
10cb0 70 2d 3e 70 32 3b 0a 20 20 70 43 20 3d 20 30 3b  p->p2;.  pC = 0;
10cc0 0a 20 20 6d 65 6d 73 65 74 28 26 73 4d 65 6d 2c  .  memset(&sMem,
10cd0 20 30 2c 20 73 69 7a 65 6f 66 28 73 4d 65 6d 29   0, sizeof(sMem)
10ce0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 31 3c  );.  assert( p1<
10cf0 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
10d00 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e  assert( pOp->p3>
10d10 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d  0 && pOp->p3<=p-
10d20 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 44 65 73 74  >nMem );.  pDest
10d30 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
10d40 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43  ];.  memAboutToC
10d50 68 61 6e 67 65 28 70 2c 20 70 44 65 73 74 29 3b  hange(p, pDest);
10d60 0a 20 20 7a 52 65 63 20 3d 20 30 3b 0a 0a 20 20  .  zRec = 0;..  
10d70 2f 2a 20 54 68 69 73 20 62 6c 6f 63 6b 20 73 65  /* This block se
10d80 74 73 20 74 68 65 20 76 61 72 69 61 62 6c 65 20  ts the variable 
10d90 70 61 79 6c 6f 61 64 53 69 7a 65 20 74 6f 20 62  payloadSize to b
10da0 65 20 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62  e the total numb
10db0 65 72 20 6f 66 0a 20 20 2a 2a 20 62 79 74 65 73  er of.  ** bytes
10dc0 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 2e 0a   in the record..
10dd0 20 20 2a 2a 0a 20 20 2a 2a 20 7a 52 65 63 20 69    **.  ** zRec i
10de0 73 20 73 65 74 20 74 6f 20 62 65 20 74 68 65 20  s set to be the 
10df0 63 6f 6d 70 6c 65 74 65 20 74 65 78 74 20 6f 66  complete text of
10e00 20 74 68 65 20 72 65 63 6f 72 64 20 69 66 20 69   the record if i
10e10 74 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2e 0a  t is available..
10e20 20 20 2a 2a 20 54 68 65 20 63 6f 6d 70 6c 65 74    ** The complet
10e30 65 20 72 65 63 6f 72 64 20 74 65 78 74 20 69 73  e record text is
10e40 20 61 6c 77 61 79 73 20 61 76 61 69 6c 61 62 6c   always availabl
10e50 65 20 66 6f 72 20 70 73 65 75 64 6f 2d 74 61 62  e for pseudo-tab
10e60 6c 65 73 0a 20 20 2a 2a 20 49 66 20 74 68 65 20  les.  ** If the 
10e70 72 65 63 6f 72 64 20 69 73 20 73 74 6f 72 65 64  record is stored
10e80 20 69 6e 20 61 20 63 75 72 73 6f 72 2c 20 74 68   in a cursor, th
10e90 65 20 63 6f 6d 70 6c 65 74 65 20 72 65 63 6f 72  e complete recor
10ea0 64 20 74 65 78 74 0a 20 20 2a 2a 20 6d 69 67 68  d text.  ** migh
10eb0 74 20 62 65 20 61 76 61 69 6c 61 62 6c 65 20 69  t be available i
10ec0 6e 20 74 68 65 20 20 70 43 2d 3e 61 52 6f 77 20  n the  pC->aRow 
10ed0 63 61 63 68 65 2e 20 20 4f 72 20 69 74 20 6d 69  cache.  Or it mi
10ee0 67 68 74 20 6e 6f 74 20 62 65 2e 0a 20 20 2a 2a  ght not be..  **
10ef0 20 49 66 20 74 68 65 20 64 61 74 61 20 69 73 20   If the data is 
10f00 75 6e 61 76 61 69 6c 61 62 6c 65 2c 20 20 7a 52  unavailable,  zR
10f10 65 63 20 69 73 20 73 65 74 20 74 6f 20 4e 55 4c  ec is set to NUL
10f20 4c 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 57 65 20  L..  **.  ** We 
10f30 61 6c 73 6f 20 63 6f 6d 70 75 74 65 20 74 68 65  also compute the
10f40 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   number of colum
10f50 6e 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64  ns in the record
10f60 2e 20 20 46 6f 72 20 63 75 72 73 6f 72 73 2c 0a  .  For cursors,.
10f70 20 20 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72 20    ** the number 
10f80 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 73 20 73 74  of columns is st
10f90 6f 72 65 64 20 69 6e 20 74 68 65 20 56 64 62 65  ored in the Vdbe
10fa0 43 75 72 73 6f 72 2e 6e 46 69 65 6c 64 20 65 6c  Cursor.nField el
10fb0 65 6d 65 6e 74 2e 0a 20 20 2a 2f 0a 20 20 70 43  ement..  */.  pC
10fc0 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 31 5d 3b   = p->apCsr[p1];
10fd0 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
10fe0 20 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   );.#ifndef SQLI
10ff0 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
11000 41 42 4c 45 0a 20 20 61 73 73 65 72 74 28 20 70  ABLE.  assert( p
11010 43 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 3d 3d  C->pVtabCursor==
11020 30 20 29 3b 0a 23 65 6e 64 69 66 0a 20 20 70 43  0 );.#endif.  pC
11030 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f  rsr = pC->pCurso
11040 72 3b 0a 20 20 69 66 28 20 70 43 72 73 72 21 3d  r;.  if( pCrsr!=
11050 30 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20  0 ){.    /* The 
11060 72 65 63 6f 72 64 20 69 73 20 73 74 6f 72 65 64  record is stored
11070 20 69 6e 20 61 20 42 2d 54 72 65 65 20 2a 2f 0a   in a B-Tree */.
11080 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
11090 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f  VdbeCursorMoveto
110a0 28 70 43 29 3b 0a 20 20 20 20 69 66 28 20 72 63  (pC);.    if( rc
110b0 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
110c0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
110d0 69 66 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20  if( pC->nullRow 
110e0 29 7b 0a 20 20 20 20 20 20 70 61 79 6c 6f 61 64  ){.      payload
110f0 53 69 7a 65 20 3d 20 30 3b 0a 20 20 20 20 7d 65  Size = 0;.    }e
11100 6c 73 65 20 69 66 28 20 70 43 2d 3e 63 61 63 68  lse if( pC->cach
11110 65 53 74 61 74 75 73 3d 3d 70 2d 3e 63 61 63 68  eStatus==p->cach
11120 65 43 74 72 20 29 7b 0a 20 20 20 20 20 20 70 61  eCtr ){.      pa
11130 79 6c 6f 61 64 53 69 7a 65 20 3d 20 70 43 2d 3e  yloadSize = pC->
11140 70 61 79 6c 6f 61 64 53 69 7a 65 3b 0a 20 20 20  payloadSize;.   
11150 20 20 20 7a 52 65 63 20 3d 20 28 63 68 61 72 2a     zRec = (char*
11160 29 70 43 2d 3e 61 52 6f 77 3b 0a 20 20 20 20 7d  )pC->aRow;.    }
11170 65 6c 73 65 20 69 66 28 20 70 43 2d 3e 69 73 49  else if( pC->isI
11180 6e 64 65 78 20 29 7b 0a 20 20 20 20 20 20 61 73  ndex ){.      as
11190 73 65 72 74 28 20 73 71 6c 69 74 65 33 42 74 72  sert( sqlite3Btr
111a0 65 65 43 75 72 73 6f 72 49 73 56 61 6c 69 64 28  eeCursorIsValid(
111b0 70 43 72 73 72 29 20 29 3b 0a 20 20 20 20 20 20  pCrsr) );.      
111c0 56 56 41 5f 4f 4e 4c 59 28 72 63 20 3d 29 20 73  VVA_ONLY(rc =) s
111d0 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79 53 69  qlite3BtreeKeySi
111e0 7a 65 28 70 43 72 73 72 2c 20 26 70 61 79 6c 6f  ze(pCrsr, &paylo
111f0 61 64 53 69 7a 65 36 34 29 3b 0a 20 20 20 20 20  adSize64);.     
11200 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c   assert( rc==SQL
11210 49 54 45 5f 4f 4b 20 29 3b 20 20 20 2f 2a 20 54  ITE_OK );   /* T
11220 72 75 65 20 62 65 63 61 75 73 65 20 6f 66 20 43  rue because of C
11230 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29 20 63 61  ursorMoveto() ca
11240 6c 6c 20 61 62 6f 76 65 20 2a 2f 0a 20 20 20 20  ll above */.    
11250 20 20 2f 2a 20 73 71 6c 69 74 65 33 42 74 72 65    /* sqlite3Btre
11260 65 50 61 72 73 65 43 65 6c 6c 50 74 72 28 29 20  eParseCellPtr() 
11270 75 73 65 73 20 67 65 74 56 61 72 69 6e 74 33 32  uses getVarint32
11280 28 29 20 74 6f 20 65 78 74 72 61 63 74 20 74 68  () to extract th
11290 65 0a 20 20 20 20 20 20 2a 2a 20 70 61 79 6c 6f  e.      ** paylo
112a0 61 64 20 73 69 7a 65 2c 20 73 6f 20 69 74 20 69  ad size, so it i
112b0 73 20 69 6d 70 6f 73 73 69 62 6c 65 20 66 6f 72  s impossible for
112c0 20 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 20 74   payloadSize64 t
112d0 6f 20 62 65 0a 20 20 20 20 20 20 2a 2a 20 6c 61  o be.      ** la
112e0 72 67 65 72 20 74 68 61 6e 20 33 32 20 62 69 74  rger than 32 bit
112f0 73 2e 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65  s. */.      asse
11300 72 74 28 20 28 70 61 79 6c 6f 61 64 53 69 7a 65  rt( (payloadSize
11310 36 34 20 26 20 53 51 4c 49 54 45 5f 4d 41 58 5f  64 & SQLITE_MAX_
11320 55 33 32 29 3d 3d 28 75 36 34 29 70 61 79 6c 6f  U32)==(u64)paylo
11330 61 64 53 69 7a 65 36 34 20 29 3b 0a 20 20 20 20  adSize64 );.    
11340 20 20 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20    payloadSize = 
11350 28 75 33 32 29 70 61 79 6c 6f 61 64 53 69 7a 65  (u32)payloadSize
11360 36 34 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  64;.    }else{. 
11370 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c       assert( sql
11380 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 49  ite3BtreeCursorI
11390 73 56 61 6c 69 64 28 70 43 72 73 72 29 20 29 3b  sValid(pCrsr) );
113a0 0a 20 20 20 20 20 20 56 56 41 5f 4f 4e 4c 59 28  .      VVA_ONLY(
113b0 72 63 20 3d 29 20 73 71 6c 69 74 65 33 42 74 72  rc =) sqlite3Btr
113c0 65 65 44 61 74 61 53 69 7a 65 28 70 43 72 73 72  eeDataSize(pCrsr
113d0 2c 20 26 70 61 79 6c 6f 61 64 53 69 7a 65 29 3b  , &payloadSize);
113e0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 72  .      assert( r
113f0 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20  c==SQLITE_OK ); 
11400 20 20 2f 2a 20 44 61 74 61 53 69 7a 65 28 29 20    /* DataSize() 
11410 63 61 6e 6e 6f 74 20 66 61 69 6c 20 2a 2f 0a 20  cannot fail */. 
11420 20 20 20 7d 0a 20 20 7d 65 6c 73 65 20 69 66 28     }.  }else if(
11430 20 41 4c 57 41 59 53 28 70 43 2d 3e 70 73 65 75   ALWAYS(pC->pseu
11440 64 6f 54 61 62 6c 65 52 65 67 3e 30 29 20 29 7b  doTableReg>0) ){
11450 0a 20 20 20 20 70 52 65 67 20 3d 20 26 61 4d 65  .    pReg = &aMe
11460 6d 5b 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c  m[pC->pseudoTabl
11470 65 52 65 67 5d 3b 0a 20 20 20 20 61 73 73 65 72  eReg];.    asser
11480 74 28 20 70 52 65 67 2d 3e 66 6c 61 67 73 20 26  t( pReg->flags &
11490 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20 20   MEM_Blob );.   
114a0 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
114b0 6c 69 64 28 70 52 65 67 29 20 29 3b 0a 20 20 20  lid(pReg) );.   
114c0 20 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20 70   payloadSize = p
114d0 52 65 67 2d 3e 6e 3b 0a 20 20 20 20 7a 52 65 63  Reg->n;.    zRec
114e0 20 3d 20 70 52 65 67 2d 3e 7a 3b 0a 20 20 20 20   = pReg->z;.    
114f0 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20  pC->cacheStatus 
11500 3d 20 28 70 4f 70 2d 3e 70 35 26 4f 50 46 4c 41  = (pOp->p5&OPFLA
11510 47 5f 43 4c 45 41 52 43 41 43 48 45 29 20 3f 20  G_CLEARCACHE) ? 
11520 43 41 43 48 45 5f 53 54 41 4c 45 20 3a 20 70 2d  CACHE_STALE : p-
11530 3e 63 61 63 68 65 43 74 72 3b 0a 20 20 20 20 61  >cacheCtr;.    a
11540 73 73 65 72 74 28 20 70 61 79 6c 6f 61 64 53 69  ssert( payloadSi
11550 7a 65 3d 3d 30 20 7c 7c 20 7a 52 65 63 21 3d 30  ze==0 || zRec!=0
11560 20 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20   );.  }else{.   
11570 20 2f 2a 20 43 6f 6e 73 69 64 65 72 20 74 68 65   /* Consider the
11580 20 72 6f 77 20 74 6f 20 62 65 20 4e 55 4c 4c 20   row to be NULL 
11590 2a 2f 0a 20 20 20 20 70 61 79 6c 6f 61 64 53 69  */.    payloadSi
115a0 7a 65 20 3d 20 30 3b 0a 20 20 7d 0a 0a 20 20 2f  ze = 0;.  }..  /
115b0 2a 20 49 66 20 70 61 79 6c 6f 61 64 53 69 7a 65  * If payloadSize
115c0 20 69 73 20 30 2c 20 74 68 65 6e 20 6a 75 73 74   is 0, then just
115d0 20 73 74 6f 72 65 20 61 20 4e 55 4c 4c 2e 20 20   store a NULL.  
115e0 54 68 69 73 20 63 61 6e 20 68 61 70 70 65 6e 20  This can happen 
115f0 62 65 63 61 75 73 65 20 6f 66 0a 20 20 2a 2a 20  because of.  ** 
11600 6e 75 6c 6c 52 6f 77 20 6f 72 20 62 65 63 61 75  nullRow or becau
11610 73 65 20 6f 66 20 61 20 63 6f 72 72 75 70 74 20  se of a corrupt 
11620 64 61 74 61 62 61 73 65 2e 20 2a 2f 0a 20 20 69  database. */.  i
11630 66 28 20 70 61 79 6c 6f 61 64 53 69 7a 65 3d 3d  f( payloadSize==
11640 30 20 29 7b 0a 20 20 20 20 4d 65 6d 53 65 74 54  0 ){.    MemSetT
11650 79 70 65 46 6c 61 67 28 70 44 65 73 74 2c 20 4d  ypeFlag(pDest, M
11660 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 20 20 67 6f  EM_Null);.    go
11670 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74  to op_column_out
11680 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20  ;.  }.  assert( 
11690 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54  db->aLimit[SQLIT
116a0 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 3e  E_LIMIT_LENGTH]>
116b0 3d 30 20 29 3b 0a 20 20 69 66 28 20 70 61 79 6c  =0 );.  if( payl
116c0 6f 61 64 53 69 7a 65 20 3e 20 28 75 33 32 29 64  oadSize > (u32)d
116d0 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45  b->aLimit[SQLITE
116e0 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29  _LIMIT_LENGTH] )
116f0 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62  {.    goto too_b
11700 69 67 3b 0a 20 20 7d 0a 0a 20 20 6e 46 69 65 6c  ig;.  }..  nFiel
11710 64 20 3d 20 70 43 2d 3e 6e 46 69 65 6c 64 3b 0a  d = pC->nField;.
11720 20 20 61 73 73 65 72 74 28 20 70 32 3c 6e 46 69    assert( p2<nFi
11730 65 6c 64 20 29 3b 0a 0a 20 20 2f 2a 20 52 65 61  eld );..  /* Rea
11740 64 20 61 6e 64 20 70 61 72 73 65 20 74 68 65 20  d and parse the 
11750 74 61 62 6c 65 20 68 65 61 64 65 72 2e 20 20 53  table header.  S
11760 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 73  tore the results
11770 20 6f 66 20 74 68 65 20 70 61 72 73 65 0a 20 20   of the parse.  
11780 2a 2a 20 69 6e 74 6f 20 74 68 65 20 72 65 63 6f  ** into the reco
11790 72 64 20 68 65 61 64 65 72 20 63 61 63 68 65 20  rd header cache 
117a0 66 69 65 6c 64 73 20 6f 66 20 74 68 65 20 63 75  fields of the cu
117b0 72 73 6f 72 2e 0a 20 20 2a 2f 0a 20 20 61 54 79  rsor..  */.  aTy
117c0 70 65 20 3d 20 70 43 2d 3e 61 54 79 70 65 3b 0a  pe = pC->aType;.
117d0 20 20 69 66 28 20 70 43 2d 3e 63 61 63 68 65 53    if( pC->cacheS
117e0 74 61 74 75 73 3d 3d 70 2d 3e 63 61 63 68 65 43  tatus==p->cacheC
117f0 74 72 20 29 7b 0a 20 20 20 20 61 4f 66 66 73 65  tr ){.    aOffse
11800 74 20 3d 20 70 43 2d 3e 61 4f 66 66 73 65 74 3b  t = pC->aOffset;
11810 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73  .  }else{.    as
11820 73 65 72 74 28 61 54 79 70 65 29 3b 0a 20 20 20  sert(aType);.   
11830 20 61 76 61 69 6c 20 3d 20 30 3b 0a 20 20 20 20   avail = 0;.    
11840 70 43 2d 3e 61 4f 66 66 73 65 74 20 3d 20 61 4f  pC->aOffset = aO
11850 66 66 73 65 74 20 3d 20 26 61 54 79 70 65 5b 6e  ffset = &aType[n
11860 46 69 65 6c 64 5d 3b 0a 20 20 20 20 70 43 2d 3e  Field];.    pC->
11870 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20 70 61  payloadSize = pa
11880 79 6c 6f 61 64 53 69 7a 65 3b 0a 20 20 20 20 70  yloadSize;.    p
11890 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
118a0 20 70 2d 3e 63 61 63 68 65 43 74 72 3b 0a 0a 20   p->cacheCtr;.. 
118b0 20 20 20 2f 2a 20 46 69 67 75 72 65 20 6f 75 74     /* Figure out
118c0 20 68 6f 77 20 6d 61 6e 79 20 62 79 74 65 73 20   how many bytes 
118d0 61 72 65 20 69 6e 20 74 68 65 20 68 65 61 64 65  are in the heade
118e0 72 20 2a 2f 0a 20 20 20 20 69 66 28 20 7a 52 65  r */.    if( zRe
118f0 63 20 29 7b 0a 20 20 20 20 20 20 7a 44 61 74 61  c ){.      zData
11900 20 3d 20 7a 52 65 63 3b 0a 20 20 20 20 7d 65 6c   = zRec;.    }el
11910 73 65 7b 0a 20 20 20 20 20 20 69 66 28 20 70 43  se{.      if( pC
11920 2d 3e 69 73 49 6e 64 65 78 20 29 7b 0a 20 20 20  ->isIndex ){.   
11930 20 20 20 20 20 7a 44 61 74 61 20 3d 20 28 63 68       zData = (ch
11940 61 72 2a 29 73 71 6c 69 74 65 33 42 74 72 65 65  ar*)sqlite3Btree
11950 4b 65 79 46 65 74 63 68 28 70 43 72 73 72 2c 20  KeyFetch(pCrsr, 
11960 26 61 76 61 69 6c 29 3b 0a 20 20 20 20 20 20 7d  &avail);.      }
11970 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 7a 44  else{.        zD
11980 61 74 61 20 3d 20 28 63 68 61 72 2a 29 73 71 6c  ata = (char*)sql
11990 69 74 65 33 42 74 72 65 65 44 61 74 61 46 65 74  ite3BtreeDataFet
119a0 63 68 28 70 43 72 73 72 2c 20 26 61 76 61 69 6c  ch(pCrsr, &avail
119b0 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  );.      }.     
119c0 20 2f 2a 20 49 66 20 4b 65 79 46 65 74 63 68 28   /* If KeyFetch(
119d0 29 2f 44 61 74 61 46 65 74 63 68 28 29 20 6d 61  )/DataFetch() ma
119e0 6e 61 67 65 64 20 74 6f 20 67 65 74 20 74 68 65  naged to get the
119f0 20 65 6e 74 69 72 65 20 70 61 79 6c 6f 61 64 2c   entire payload,
11a00 0a 20 20 20 20 20 20 2a 2a 20 73 61 76 65 20 74  .      ** save t
11a10 68 65 20 70 61 79 6c 6f 61 64 20 69 6e 20 74 68  he payload in th
11a20 65 20 70 43 2d 3e 61 52 6f 77 20 63 61 63 68 65  e pC->aRow cache
11a30 2e 20 20 54 68 61 74 20 77 69 6c 6c 20 73 61 76  .  That will sav
11a40 65 20 75 73 20 66 72 6f 6d 0a 20 20 20 20 20 20  e us from.      
11a50 2a 2a 20 68 61 76 69 6e 67 20 74 6f 20 6d 61 6b  ** having to mak
11a60 65 20 61 64 64 69 74 69 6f 6e 61 6c 20 63 61 6c  e additional cal
11a70 6c 73 20 74 6f 20 66 65 74 63 68 20 74 68 65 20  ls to fetch the 
11a80 63 6f 6e 74 65 6e 74 20 70 6f 72 74 69 6f 6e 20  content portion 
11a90 6f 66 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 20  of.      ** the 
11aa0 72 65 63 6f 72 64 2e 0a 20 20 20 20 20 20 2a 2f  record..      */
11ab0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 61  .      assert( a
11ac0 76 61 69 6c 3e 3d 30 20 29 3b 0a 20 20 20 20 20  vail>=0 );.     
11ad0 20 69 66 28 20 70 61 79 6c 6f 61 64 53 69 7a 65   if( payloadSize
11ae0 20 3c 3d 20 28 75 33 32 29 61 76 61 69 6c 20 29   <= (u32)avail )
11af0 7b 0a 20 20 20 20 20 20 20 20 7a 52 65 63 20 3d  {.        zRec =
11b00 20 7a 44 61 74 61 3b 0a 20 20 20 20 20 20 20 20   zData;.        
11b10 70 43 2d 3e 61 52 6f 77 20 3d 20 28 75 38 2a 29  pC->aRow = (u8*)
11b20 7a 44 61 74 61 3b 0a 20 20 20 20 20 20 7d 65 6c  zData;.      }el
11b30 73 65 7b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e  se{.        pC->
11b40 61 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20 20 20  aRow = 0;.      
11b50 7d 0a 20 20 20 20 7d 0a 20 20 20 20 2f 2a 20 54  }.    }.    /* T
11b60 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 73 73  he following ass
11b70 65 72 74 20 69 73 20 74 72 75 65 20 69 6e 20 61  ert is true in a
11b80 6c 6c 20 63 61 73 65 73 20 61 63 63 65 70 74 20  ll cases accept 
11b90 77 68 65 6e 0a 20 20 20 20 2a 2a 20 74 68 65 20  when.    ** the 
11ba0 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 68 61  database file ha
11bb0 73 20 62 65 65 6e 20 63 6f 72 72 75 70 74 65 64  s been corrupted
11bc0 20 65 78 74 65 72 6e 61 6c 6c 79 2e 0a 20 20 20   externally..   
11bd0 20 2a 2a 20 20 20 20 61 73 73 65 72 74 28 20 7a   **    assert( z
11be0 52 65 63 21 3d 30 20 7c 7c 20 61 76 61 69 6c 3e  Rec!=0 || avail>
11bf0 3d 70 61 79 6c 6f 61 64 53 69 7a 65 20 7c 7c 20  =payloadSize || 
11c00 61 76 61 69 6c 3e 3d 39 20 29 3b 20 2a 2f 0a 20  avail>=9 ); */. 
11c10 20 20 20 73 7a 48 64 72 20 3d 20 67 65 74 56 61     szHdr = getVa
11c20 72 69 6e 74 33 32 28 28 75 38 2a 29 7a 44 61 74  rint32((u8*)zDat
11c30 61 2c 20 6f 66 66 73 65 74 29 3b 0a 0a 20 20 20  a, offset);..   
11c40 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 61 20   /* Make sure a 
11c50 63 6f 72 72 75 70 74 20 64 61 74 61 62 61 73 65  corrupt database
11c60 20 68 61 73 20 6e 6f 74 20 67 69 76 65 6e 20 75   has not given u
11c70 73 20 61 6e 20 6f 76 65 72 73 69 7a 65 20 68 65  s an oversize he
11c80 61 64 65 72 2e 0a 20 20 20 20 2a 2a 20 44 6f 20  ader..    ** Do 
11c90 74 68 69 73 20 6e 6f 77 20 74 6f 20 61 76 6f 69  this now to avoi
11ca0 64 20 61 6e 20 6f 76 65 72 73 69 7a 65 20 6d 65  d an oversize me
11cb0 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e  mory allocation.
11cc0 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 54  .    **.    ** T
11cd0 79 70 65 20 65 6e 74 72 69 65 73 20 63 61 6e 20  ype entries can 
11ce0 62 65 20 62 65 74 77 65 65 6e 20 31 20 61 6e 64  be between 1 and
11cf0 20 35 20 62 79 74 65 73 20 65 61 63 68 2e 20 20   5 bytes each.  
11d00 42 75 74 20 34 20 61 6e 64 20 35 20 62 79 74 65  But 4 and 5 byte
11d10 0a 20 20 20 20 2a 2a 20 74 79 70 65 73 20 75 73  .    ** types us
11d20 65 20 73 6f 20 6d 75 63 68 20 64 61 74 61 20 73  e so much data s
11d30 70 61 63 65 20 74 68 61 74 20 74 68 65 72 65 20  pace that there 
11d40 63 61 6e 20 6f 6e 6c 79 20 62 65 20 34 30 39 36  can only be 4096
11d50 20 61 6e 64 20 33 32 20 6f 66 0a 20 20 20 20 2a   and 32 of.    *
11d60 2a 20 74 68 65 6d 2c 20 72 65 73 70 65 63 74 69  * them, respecti
11d70 76 65 6c 79 2e 20 20 53 6f 20 74 68 65 20 6d 61  vely.  So the ma
11d80 78 69 6d 75 6d 20 68 65 61 64 65 72 20 6c 65 6e  ximum header len
11d90 67 74 68 20 72 65 73 75 6c 74 73 20 66 72 6f 6d  gth results from
11da0 20 61 0a 20 20 20 20 2a 2a 20 33 2d 62 79 74 65   a.    ** 3-byte
11db0 20 74 79 70 65 20 66 6f 72 20 65 61 63 68 20 6f   type for each o
11dc0 66 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6f 66  f the maximum of
11dd0 20 33 32 37 36 38 20 63 6f 6c 75 6d 6e 73 20 70   32768 columns p
11de0 6c 75 73 20 74 68 72 65 65 0a 20 20 20 20 2a 2a  lus three.    **
11df0 20 65 78 74 72 61 20 62 79 74 65 73 20 66 6f 72   extra bytes for
11e00 20 74 68 65 20 68 65 61 64 65 72 20 6c 65 6e 67   the header leng
11e10 74 68 20 69 74 73 65 6c 66 2e 20 20 33 32 37 36  th itself.  3276
11e20 38 2a 33 20 2b 20 33 20 3d 20 39 38 33 30 37 2e  8*3 + 3 = 98307.
11e30 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20  .    */.    if( 
11e40 6f 66 66 73 65 74 20 3e 20 39 38 33 30 37 20 29  offset > 98307 )
11e50 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c  {.      rc = SQL
11e60 49 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54  ITE_CORRUPT_BKPT
11e70 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f  ;.      goto op_
11e80 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20  column_out;.    
11e90 7d 0a 0a 20 20 20 20 2f 2a 20 43 6f 6d 70 75 74  }..    /* Comput
11ea0 65 20 69 6e 20 6c 65 6e 20 74 68 65 20 6e 75 6d  e in len the num
11eb0 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20  ber of bytes of 
11ec0 64 61 74 61 20 77 65 20 6e 65 65 64 20 74 6f 20  data we need to 
11ed0 72 65 61 64 20 69 6e 20 6f 72 64 65 72 0a 20 20  read in order.  
11ee0 20 20 2a 2a 20 74 6f 20 67 65 74 20 6e 46 69 65    ** to get nFie
11ef0 6c 64 20 74 79 70 65 20 76 61 6c 75 65 73 2e 20  ld type values. 
11f00 20 6f 66 66 73 65 74 20 69 73 20 61 6e 20 75 70   offset is an up
11f10 70 65 72 20 62 6f 75 6e 64 20 6f 6e 20 74 68 69  per bound on thi
11f20 73 2e 20 20 42 75 74 0a 20 20 20 20 2a 2a 20 6e  s.  But.    ** n
11f30 46 69 65 6c 64 20 6d 69 67 68 74 20 62 65 20 73  Field might be s
11f40 69 67 6e 69 66 69 63 61 6e 74 6c 79 20 6c 65 73  ignificantly les
11f50 73 20 74 68 61 6e 20 74 68 65 20 74 72 75 65 20  s than the true 
11f60 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  number of column
11f70 73 0a 20 20 20 20 2a 2a 20 69 6e 20 74 68 65 20  s.    ** in the 
11f80 74 61 62 6c 65 2c 20 61 6e 64 20 69 6e 20 74 68  table, and in th
11f90 61 74 20 63 61 73 65 2c 20 35 2a 6e 46 69 65 6c  at case, 5*nFiel
11fa0 64 2b 33 20 6d 69 67 68 74 20 62 65 20 73 6d 61  d+3 might be sma
11fb0 6c 6c 65 72 20 74 68 61 6e 20 6f 66 66 73 65 74  ller than offset
11fc0 2e 0a 20 20 20 20 2a 2a 20 57 65 20 77 61 6e 74  ..    ** We want
11fd0 20 74 6f 20 6d 69 6e 69 6d 69 7a 65 20 6c 65 6e   to minimize len
11fe0 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6c 69 6d   in order to lim
11ff0 69 74 20 74 68 65 20 73 69 7a 65 20 6f 66 20 74  it the size of t
12000 68 65 20 6d 65 6d 6f 72 79 0a 20 20 20 20 2a 2a  he memory.    **
12010 20 61 6c 6c 6f 63 61 74 69 6f 6e 2c 20 65 73 70   allocation, esp
12020 65 63 69 61 6c 6c 79 20 69 66 20 61 20 63 6f 72  ecially if a cor
12030 72 75 70 74 20 64 61 74 61 62 61 73 65 20 66 69  rupt database fi
12040 6c 65 20 68 61 73 20 63 61 75 73 65 64 20 6f 66  le has caused of
12050 66 73 65 74 0a 20 20 20 20 2a 2a 20 74 6f 20 62  fset.    ** to b
12060 65 20 6f 76 65 72 73 69 7a 65 64 2e 20 4f 66 66  e oversized. Off
12070 73 65 74 20 69 73 20 6c 69 6d 69 74 65 64 20 74  set is limited t
12080 6f 20 39 38 33 30 37 20 61 62 6f 76 65 2e 20 20  o 98307 above.  
12090 42 75 74 20 39 38 33 30 37 20 6d 69 67 68 74 0a  But 98307 might.
120a0 20 20 20 20 2a 2a 20 73 74 69 6c 6c 20 65 78 63      ** still exc
120b0 65 65 64 20 52 6f 62 73 6f 6e 20 6d 65 6d 6f 72  eed Robson memor
120c0 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 6c 69 6d  y allocation lim
120d0 69 74 73 20 6f 6e 20 73 6f 6d 65 20 63 6f 6e 66  its on some conf
120e0 69 67 75 72 61 74 69 6f 6e 73 2e 0a 20 20 20 20  igurations..    
120f0 2a 2a 20 4f 6e 20 73 79 73 74 65 6d 73 20 74 68  ** On systems th
12100 61 74 20 63 61 6e 6e 6f 74 20 74 6f 6c 65 72 61  at cannot tolera
12110 74 65 20 6c 61 72 67 65 20 6d 65 6d 6f 72 79 20  te large memory 
12120 61 6c 6c 6f 63 61 74 69 6f 6e 73 2c 20 6e 46 69  allocations, nFi
12130 65 6c 64 2a 35 2b 33 0a 20 20 20 20 2a 2a 20 77  eld*5+3.    ** w
12140 69 6c 6c 20 6c 69 6b 65 6c 79 20 62 65 20 6d 75  ill likely be mu
12150 63 68 20 73 6d 61 6c 6c 65 72 20 73 69 6e 63 65  ch smaller since
12160 20 6e 46 69 65 6c 64 20 77 69 6c 6c 20 6c 69 6b   nField will lik
12170 65 6c 79 20 62 65 20 6c 65 73 73 20 74 68 61 6e  ely be less than
12180 0a 20 20 20 20 2a 2a 20 32 30 20 6f 72 20 73 6f  .    ** 20 or so
12190 2e 20 20 54 68 69 73 20 69 6e 73 75 72 65 73 20  .  This insures 
121a0 74 68 61 74 20 52 6f 62 73 6f 6e 20 6d 65 6d 6f  that Robson memo
121b0 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 6c 69  ry allocation li
121c0 6d 69 74 73 20 61 72 65 0a 20 20 20 20 2a 2a 20  mits are.    ** 
121d0 6e 6f 74 20 65 78 63 65 65 64 65 64 20 65 76 65  not exceeded eve
121e0 6e 20 66 6f 72 20 63 6f 72 72 75 70 74 20 64 61  n for corrupt da
121f0 74 61 62 61 73 65 20 66 69 6c 65 73 2e 0a 20 20  tabase files..  
12200 20 20 2a 2f 0a 20 20 20 20 6c 65 6e 20 3d 20 6e    */.    len = n
12210 46 69 65 6c 64 2a 35 20 2b 20 33 3b 0a 20 20 20  Field*5 + 3;.   
12220 20 69 66 28 20 6c 65 6e 20 3e 20 28 69 6e 74 29   if( len > (int)
12230 6f 66 66 73 65 74 20 29 20 6c 65 6e 20 3d 20 28  offset ) len = (
12240 69 6e 74 29 6f 66 66 73 65 74 3b 0a 0a 20 20 20  int)offset;..   
12250 20 2f 2a 20 54 68 65 20 4b 65 79 46 65 74 63 68   /* The KeyFetch
12260 28 29 20 6f 72 20 44 61 74 61 46 65 74 63 68 28  () or DataFetch(
12270 29 20 61 62 6f 76 65 20 61 72 65 20 66 61 73 74  ) above are fast
12280 20 61 6e 64 20 77 69 6c 6c 20 67 65 74 20 74 68   and will get th
12290 65 20 65 6e 74 69 72 65 0a 20 20 20 20 2a 2a 20  e entire.    ** 
122a0 72 65 63 6f 72 64 20 68 65 61 64 65 72 20 69 6e  record header in
122b0 20 6d 6f 73 74 20 63 61 73 65 73 2e 20 20 42 75   most cases.  Bu
122c0 74 20 74 68 65 79 20 77 69 6c 6c 20 66 61 69 6c  t they will fail
122d0 20 74 6f 20 67 65 74 20 74 68 65 20 63 6f 6d 70   to get the comp
122e0 6c 65 74 65 0a 20 20 20 20 2a 2a 20 72 65 63 6f  lete.    ** reco
122f0 72 64 20 68 65 61 64 65 72 20 69 66 20 74 68 65  rd header if the
12300 20 72 65 63 6f 72 64 20 68 65 61 64 65 72 20 64   record header d
12310 6f 65 73 20 6e 6f 74 20 66 69 74 20 6f 6e 20 61  oes not fit on a
12320 20 73 69 6e 67 6c 65 20 70 61 67 65 0a 20 20 20   single page.   
12330 20 2a 2a 20 69 6e 20 74 68 65 20 42 2d 54 72 65   ** in the B-Tre
12340 65 2e 20 20 57 68 65 6e 20 74 68 61 74 20 68 61  e.  When that ha
12350 70 70 65 6e 73 2c 20 75 73 65 20 73 71 6c 69 74  ppens, use sqlit
12360 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72  e3VdbeMemFromBtr
12370 65 65 28 29 20 74 6f 0a 20 20 20 20 2a 2a 20 61  ee() to.    ** a
12380 63 71 75 69 72 65 20 74 68 65 20 63 6f 6d 70 6c  cquire the compl
12390 65 74 65 20 68 65 61 64 65 72 20 74 65 78 74 2e  ete header text.
123a0 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20  .    */.    if( 
123b0 21 7a 52 65 63 20 26 26 20 61 76 61 69 6c 3c 6c  !zRec && avail<l
123c0 65 6e 20 29 7b 0a 20 20 20 20 20 20 73 4d 65 6d  en ){.      sMem
123d0 2e 66 6c 61 67 73 20 3d 20 30 3b 0a 20 20 20 20  .flags = 0;.    
123e0 20 20 73 4d 65 6d 2e 64 62 20 3d 20 30 3b 0a 20    sMem.db = 0;. 
123f0 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
12400 33 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65  3VdbeMemFromBtre
12410 65 28 70 43 72 73 72 2c 20 30 2c 20 6c 65 6e 2c  e(pCrsr, 0, len,
12420 20 70 43 2d 3e 69 73 49 6e 64 65 78 2c 20 26 73   pC->isIndex, &s
12430 4d 65 6d 29 3b 0a 20 20 20 20 20 20 69 66 28 20  Mem);.      if( 
12440 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc!=SQLITE_OK ){
12450 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6f 70  .        goto op
12460 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20  _column_out;.   
12470 20 20 20 7d 0a 20 20 20 20 20 20 7a 44 61 74 61     }.      zData
12480 20 3d 20 73 4d 65 6d 2e 7a 3b 0a 20 20 20 20 7d   = sMem.z;.    }
12490 0a 20 20 20 20 7a 45 6e 64 48 64 72 20 3d 20 28  .    zEndHdr = (
124a0 75 38 20 2a 29 26 7a 44 61 74 61 5b 6c 65 6e 5d  u8 *)&zData[len]
124b0 3b 0a 20 20 20 20 7a 49 64 78 20 3d 20 28 75 38  ;.    zIdx = (u8
124c0 20 2a 29 26 7a 44 61 74 61 5b 73 7a 48 64 72 5d   *)&zData[szHdr]
124d0 3b 0a 0a 20 20 20 20 2f 2a 20 53 63 61 6e 20 74  ;..    /* Scan t
124e0 68 65 20 68 65 61 64 65 72 20 61 6e 64 20 75 73  he header and us
124f0 65 20 69 74 20 74 6f 20 66 69 6c 6c 20 69 6e 20  e it to fill in 
12500 74 68 65 20 61 54 79 70 65 5b 5d 20 61 6e 64 20  the aType[] and 
12510 61 4f 66 66 73 65 74 5b 5d 0a 20 20 20 20 2a 2a  aOffset[].    **
12520 20 61 72 72 61 79 73 2e 20 20 61 54 79 70 65 5b   arrays.  aType[
12530 69 5d 20 77 69 6c 6c 20 63 6f 6e 74 61 69 6e 20  i] will contain 
12540 74 68 65 20 74 79 70 65 20 69 6e 74 65 67 65 72  the type integer
12550 20 66 6f 72 20 74 68 65 20 69 2d 74 68 0a 20 20   for the i-th.  
12560 20 20 2a 2a 20 63 6f 6c 75 6d 6e 20 61 6e 64 20    ** column and 
12570 61 4f 66 66 73 65 74 5b 69 5d 20 77 69 6c 6c 20  aOffset[i] will 
12580 63 6f 6e 74 61 69 6e 20 74 68 65 20 6f 66 66 73  contain the offs
12590 65 74 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69  et from the begi
125a0 6e 6e 69 6e 67 0a 20 20 20 20 2a 2a 20 6f 66 20  nning.    ** of 
125b0 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20 74 68  the record to th
125c0 65 20 73 74 61 72 74 20 6f 66 20 74 68 65 20 64  e start of the d
125d0 61 74 61 20 66 6f 72 20 74 68 65 20 69 2d 74 68  ata for the i-th
125e0 20 63 6f 6c 75 6d 6e 0a 20 20 20 20 2a 2f 0a 20   column.    */. 
125f0 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 46     for(i=0; i<nF
12600 69 65 6c 64 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  ield; i++){.    
12610 20 20 69 66 28 20 7a 49 64 78 3c 7a 45 6e 64 48    if( zIdx<zEndH
12620 64 72 20 29 7b 0a 20 20 20 20 20 20 20 20 61 4f  dr ){.        aO
12630 66 66 73 65 74 5b 69 5d 20 3d 20 6f 66 66 73 65  ffset[i] = offse
12640 74 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 7a  t;.        if( z
12650 49 64 78 5b 30 5d 3c 30 78 38 30 20 29 7b 0a 20  Idx[0]<0x80 ){. 
12660 20 20 20 20 20 20 20 20 20 74 20 3d 20 7a 49 64           t = zId
12670 78 5b 30 5d 3b 0a 20 20 20 20 20 20 20 20 20 20  x[0];.          
12680 7a 49 64 78 2b 2b 3b 0a 20 20 20 20 20 20 20 20  zIdx++;.        
12690 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20  }else{.         
126a0 20 7a 49 64 78 20 2b 3d 20 73 71 6c 69 74 65 33   zIdx += sqlite3
126b0 47 65 74 56 61 72 69 6e 74 33 32 28 7a 49 64 78  GetVarint32(zIdx
126c0 2c 20 26 74 29 3b 0a 20 20 20 20 20 20 20 20 7d  , &t);.        }
126d0 0a 20 20 20 20 20 20 20 20 61 54 79 70 65 5b 69  .        aType[i
126e0 5d 20 3d 20 74 3b 0a 20 20 20 20 20 20 20 20 73  ] = t;.        s
126f0 7a 46 69 65 6c 64 20 3d 20 73 71 6c 69 74 65 33  zField = sqlite3
12700 56 64 62 65 53 65 72 69 61 6c 54 79 70 65 4c 65  VdbeSerialTypeLe
12710 6e 28 74 29 3b 0a 20 20 20 20 20 20 20 20 6f 66  n(t);.        of
12720 66 73 65 74 20 2b 3d 20 73 7a 46 69 65 6c 64 3b  fset += szField;
12730 0a 20 20 20 20 20 20 20 20 69 66 28 20 6f 66 66  .        if( off
12740 73 65 74 3c 73 7a 46 69 65 6c 64 20 29 7b 20 20  set<szField ){  
12750 2f 2a 20 54 72 75 65 20 69 66 20 6f 66 66 73 65  /* True if offse
12760 74 20 6f 76 65 72 66 6c 6f 77 73 20 2a 2f 0a 20  t overflows */. 
12770 20 20 20 20 20 20 20 20 20 7a 49 64 78 20 3d 20           zIdx = 
12780 26 7a 45 6e 64 48 64 72 5b 31 5d 3b 20 20 2f 2a  &zEndHdr[1];  /*
12790 20 46 6f 72 63 65 73 20 53 51 4c 49 54 45 5f 43   Forces SQLITE_C
127a0 4f 52 52 55 50 54 20 72 65 74 75 72 6e 20 62 65  ORRUPT return be
127b0 6c 6f 77 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  low */.         
127c0 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20   break;.        
127d0 7d 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  }.      }else{. 
127e0 20 20 20 20 20 20 20 2f 2a 20 49 66 20 69 20 69         /* If i i
127f0 73 20 6c 65 73 73 20 74 68 61 74 20 6e 46 69 65  s less that nFie
12800 6c 64 2c 20 74 68 65 6e 20 74 68 65 72 65 20 61  ld, then there a
12810 72 65 20 6c 65 73 73 20 66 69 65 6c 64 73 20 69  re less fields i
12820 6e 20 74 68 69 73 0a 20 20 20 20 20 20 20 20 2a  n this.        *
12830 2a 20 72 65 63 6f 72 64 20 74 68 61 6e 20 53 65  * record than Se
12840 74 4e 75 6d 43 6f 6c 75 6d 6e 73 20 69 6e 64 69  tNumColumns indi
12850 63 61 74 65 64 20 74 68 65 72 65 20 61 72 65 20  cated there are 
12860 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 0a 20  columns in the. 
12870 20 20 20 20 20 20 20 2a 2a 20 74 61 62 6c 65 2e         ** table.
12880 20 53 65 74 20 74 68 65 20 6f 66 66 73 65 74 20   Set the offset 
12890 66 6f 72 20 61 6e 79 20 65 78 74 72 61 20 63 6f  for any extra co
128a0 6c 75 6d 6e 73 20 6e 6f 74 20 70 72 65 73 65 6e  lumns not presen
128b0 74 20 69 6e 0a 20 20 20 20 20 20 20 20 2a 2a 20  t in.        ** 
128c0 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20 30 2e  the record to 0.
128d0 20 54 68 69 73 20 74 65 6c 6c 73 20 63 6f 64 65   This tells code
128e0 20 62 65 6c 6f 77 20 74 6f 20 73 74 6f 72 65 20   below to store 
128f0 61 20 4e 55 4c 4c 0a 20 20 20 20 20 20 20 20 2a  a NULL.        *
12900 2a 20 69 6e 73 74 65 61 64 20 6f 66 20 64 65 73  * instead of des
12910 65 72 69 61 6c 69 7a 69 6e 67 20 61 20 76 61 6c  erializing a val
12920 75 65 20 66 72 6f 6d 20 74 68 65 20 72 65 63 6f  ue from the reco
12930 72 64 2e 0a 20 20 20 20 20 20 20 20 2a 2f 0a 20  rd..        */. 
12940 20 20 20 20 20 20 20 61 4f 66 66 73 65 74 5b 69         aOffset[i
12950 5d 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a 20  ] = 0;.      }. 
12960 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33     }.    sqlite3
12970 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 26  VdbeMemRelease(&
12980 73 4d 65 6d 29 3b 0a 20 20 20 20 73 4d 65 6d 2e  sMem);.    sMem.
12990 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c  flags = MEM_Null
129a0 3b 0a 0a 20 20 20 20 2f 2a 20 49 66 20 77 65 20  ;..    /* If we 
129b0 68 61 76 65 20 72 65 61 64 20 6d 6f 72 65 20 68  have read more h
129c0 65 61 64 65 72 20 64 61 74 61 20 74 68 61 6e 20  eader data than 
129d0 77 61 73 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e  was contained in
129e0 20 74 68 65 20 68 65 61 64 65 72 2c 0a 20 20 20   the header,.   
129f0 20 2a 2a 20 6f 72 20 69 66 20 74 68 65 20 65 6e   ** or if the en
12a00 64 20 6f 66 20 74 68 65 20 6c 61 73 74 20 66 69  d of the last fi
12a10 65 6c 64 20 61 70 70 65 61 72 73 20 74 6f 20 62  eld appears to b
12a20 65 20 70 61 73 74 20 74 68 65 20 65 6e 64 20 6f  e past the end o
12a30 66 20 74 68 65 0a 20 20 20 20 2a 2a 20 72 65 63  f the.    ** rec
12a40 6f 72 64 2c 20 6f 72 20 69 66 20 74 68 65 20 65  ord, or if the e
12a50 6e 64 20 6f 66 20 74 68 65 20 6c 61 73 74 20 66  nd of the last f
12a60 69 65 6c 64 20 61 70 70 65 61 72 73 20 74 6f 20  ield appears to 
12a70 62 65 20 62 65 66 6f 72 65 20 74 68 65 20 65 6e  be before the en
12a80 64 0a 20 20 20 20 2a 2a 20 6f 66 20 74 68 65 20  d.    ** of the 
12a90 72 65 63 6f 72 64 20 28 77 68 65 6e 20 61 6c 6c  record (when all
12aa0 20 66 69 65 6c 64 73 20 70 72 65 73 65 6e 74 29   fields present)
12ab0 2c 20 74 68 65 6e 20 77 65 20 6d 75 73 74 20 62  , then we must b
12ac0 65 20 64 65 61 6c 69 6e 67 20 0a 20 20 20 20 2a  e dealing .    *
12ad0 2a 20 77 69 74 68 20 61 20 63 6f 72 72 75 70 74  * with a corrupt
12ae0 20 64 61 74 61 62 61 73 65 2e 0a 20 20 20 20 2a   database..    *
12af0 2f 0a 20 20 20 20 69 66 28 20 28 7a 49 64 78 20  /.    if( (zIdx 
12b00 3e 20 7a 45 6e 64 48 64 72 29 20 7c 7c 20 28 6f  > zEndHdr) || (o
12b10 66 66 73 65 74 20 3e 20 70 61 79 6c 6f 61 64 53  ffset > payloadS
12b20 69 7a 65 29 0a 20 20 20 20 20 20 20 20 20 7c 7c  ize).         ||
12b30 20 28 7a 49 64 78 3d 3d 7a 45 6e 64 48 64 72 20   (zIdx==zEndHdr 
12b40 26 26 20 6f 66 66 73 65 74 21 3d 70 61 79 6c 6f  && offset!=paylo
12b50 61 64 53 69 7a 65 29 20 29 7b 0a 20 20 20 20 20  adSize) ){.     
12b60 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52   rc = SQLITE_COR
12b70 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20 20  RUPT_BKPT;.     
12b80 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f   goto op_column_
12b90 6f 75 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a  out;.    }.  }..
12ba0 20 20 2f 2a 20 47 65 74 20 74 68 65 20 63 6f 6c    /* Get the col
12bb0 75 6d 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  umn information.
12bc0 20 49 66 20 61 4f 66 66 73 65 74 5b 70 32 5d 20   If aOffset[p2] 
12bd0 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65  is non-zero, the
12be0 6e 20 0a 20 20 2a 2a 20 64 65 73 65 72 69 61 6c  n .  ** deserial
12bf0 69 7a 65 20 74 68 65 20 76 61 6c 75 65 20 66 72  ize the value fr
12c00 6f 6d 20 74 68 65 20 72 65 63 6f 72 64 2e 20 49  om the record. I
12c10 66 20 61 4f 66 66 73 65 74 5b 70 32 5d 20 69 73  f aOffset[p2] is
12c20 20 7a 65 72 6f 2c 0a 20 20 2a 2a 20 74 68 65 6e   zero,.  ** then
12c30 20 74 68 65 72 65 20 61 72 65 20 6e 6f 74 20 65   there are not e
12c40 6e 6f 75 67 68 20 66 69 65 6c 64 73 20 69 6e 20  nough fields in 
12c50 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20 73 61  the record to sa
12c60 74 69 73 66 79 20 74 68 65 0a 20 20 2a 2a 20 72  tisfy the.  ** r
12c70 65 71 75 65 73 74 2e 20 20 49 6e 20 74 68 69 73  equest.  In this
12c80 20 63 61 73 65 2c 20 73 65 74 20 74 68 65 20 76   case, set the v
12c90 61 6c 75 65 20 4e 55 4c 4c 20 6f 72 20 74 6f 20  alue NULL or to 
12ca0 50 34 20 69 66 20 50 34 20 69 73 0a 20 20 2a 2a  P4 if P4 is.  **
12cb0 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20   a pointer to a 
12cc0 4d 65 6d 20 6f 62 6a 65 63 74 2e 0a 20 20 2a 2f  Mem object..  */
12cd0 0a 20 20 69 66 28 20 61 4f 66 66 73 65 74 5b 70  .  if( aOffset[p
12ce0 32 5d 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  2] ){.    assert
12cf0 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
12d00 29 3b 0a 20 20 20 20 69 66 28 20 7a 52 65 63 20  );.    if( zRec 
12d10 29 7b 0a 20 20 20 20 20 20 4d 65 6d 52 65 6c 65  ){.      MemRele
12d20 61 73 65 45 78 74 28 70 44 65 73 74 29 3b 0a 20  aseExt(pDest);. 
12d30 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
12d40 53 65 72 69 61 6c 47 65 74 28 28 75 38 20 2a 29  SerialGet((u8 *)
12d50 26 7a 52 65 63 5b 61 4f 66 66 73 65 74 5b 70 32  &zRec[aOffset[p2
12d60 5d 5d 2c 20 61 54 79 70 65 5b 70 32 5d 2c 20 70  ]], aType[p2], p
12d70 44 65 73 74 29 3b 0a 20 20 20 20 7d 65 6c 73 65  Dest);.    }else
12d80 7b 0a 20 20 20 20 20 20 6c 65 6e 20 3d 20 73 71  {.      len = sq
12d90 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 54  lite3VdbeSerialT
12da0 79 70 65 4c 65 6e 28 61 54 79 70 65 5b 70 32 5d  ypeLen(aType[p2]
12db0 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
12dc0 56 64 62 65 4d 65 6d 4d 6f 76 65 28 26 73 4d 65  VdbeMemMove(&sMe
12dd0 6d 2c 20 70 44 65 73 74 29 3b 0a 20 20 20 20 20  m, pDest);.     
12de0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
12df0 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65 28 70 43  eMemFromBtree(pC
12e00 72 73 72 2c 20 61 4f 66 66 73 65 74 5b 70 32 5d  rsr, aOffset[p2]
12e10 2c 20 6c 65 6e 2c 20 70 43 2d 3e 69 73 49 6e 64  , len, pC->isInd
12e20 65 78 2c 20 26 73 4d 65 6d 29 3b 0a 20 20 20 20  ex, &sMem);.    
12e30 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
12e40 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 67  _OK ){.        g
12e50 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75  oto op_column_ou
12e60 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  t;.      }.     
12e70 20 7a 44 61 74 61 20 3d 20 73 4d 65 6d 2e 7a 3b   zData = sMem.z;
12e80 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
12e90 62 65 53 65 72 69 61 6c 47 65 74 28 28 75 38 2a  beSerialGet((u8*
12ea0 29 7a 44 61 74 61 2c 20 61 54 79 70 65 5b 70 32  )zData, aType[p2
12eb0 5d 2c 20 70 44 65 73 74 29 3b 0a 20 20 20 20 7d  ], pDest);.    }
12ec0 0a 20 20 20 20 70 44 65 73 74 2d 3e 65 6e 63 20  .    pDest->enc 
12ed0 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 7d 65  = encoding;.  }e
12ee0 6c 73 65 7b 0a 20 20 20 20 69 66 28 20 70 4f 70  lse{.    if( pOp
12ef0 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4d 45 4d  ->p4type==P4_MEM
12f00 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
12f10 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43  3VdbeMemShallowC
12f20 6f 70 79 28 70 44 65 73 74 2c 20 70 4f 70 2d 3e  opy(pDest, pOp->
12f30 70 34 2e 70 4d 65 6d 2c 20 4d 45 4d 5f 53 74 61  p4.pMem, MEM_Sta
12f40 74 69 63 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  tic);.    }else{
12f50 0a 20 20 20 20 20 20 4d 65 6d 53 65 74 54 79 70  .      MemSetTyp
12f60 65 46 6c 61 67 28 70 44 65 73 74 2c 20 4d 45 4d  eFlag(pDest, MEM
12f70 5f 4e 75 6c 6c 29 3b 0a 20 20 20 20 7d 0a 20 20  _Null);.    }.  
12f80 7d 0a 0a 20 20 2f 2a 20 49 66 20 77 65 20 64 79  }..  /* If we dy
12f90 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f 63 61  namically alloca
12fa0 74 65 64 20 73 70 61 63 65 20 74 6f 20 68 6f 6c  ted space to hol
12fb0 64 20 74 68 65 20 64 61 74 61 20 28 69 6e 20 74  d the data (in t
12fc0 68 65 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 56  he.  ** sqlite3V
12fd0 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65 28  dbeMemFromBtree(
12fe0 29 20 63 61 6c 6c 20 61 62 6f 76 65 29 20 74 68  ) call above) th
12ff0 65 6e 20 74 72 61 6e 73 66 65 72 20 63 6f 6e 74  en transfer cont
13000 72 6f 6c 20 6f 66 20 74 68 61 74 0a 20 20 2a 2a  rol of that.  **
13010 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c   dynamically all
13020 6f 63 61 74 65 64 20 73 70 61 63 65 20 6f 76 65  ocated space ove
13030 72 20 74 6f 20 74 68 65 20 70 44 65 73 74 20 73  r to the pDest s
13040 74 72 75 63 74 75 72 65 2e 0a 20 20 2a 2a 20 54  tructure..  ** T
13050 68 69 73 20 70 72 65 76 65 6e 74 73 20 61 20 6d  his prevents a m
13060 65 6d 6f 72 79 20 63 6f 70 79 2e 0a 20 20 2a 2f  emory copy..  */
13070 0a 20 20 69 66 28 20 73 4d 65 6d 2e 7a 4d 61 6c  .  if( sMem.zMal
13080 6c 6f 63 20 29 7b 0a 20 20 20 20 61 73 73 65 72  loc ){.    asser
13090 74 28 20 73 4d 65 6d 2e 7a 3d 3d 73 4d 65 6d 2e  t( sMem.z==sMem.
130a0 7a 4d 61 6c 6c 6f 63 20 29 3b 0a 20 20 20 20 61  zMalloc );.    a
130b0 73 73 65 72 74 28 20 21 28 70 44 65 73 74 2d 3e  ssert( !(pDest->
130c0 66 6c 61 67 73 20 26 20 4d 45 4d 5f 44 79 6e 29  flags & MEM_Dyn)
130d0 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
130e0 21 28 70 44 65 73 74 2d 3e 66 6c 61 67 73 20 26  !(pDest->flags &
130f0 20 28 4d 45 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f 53   (MEM_Blob|MEM_S
13100 74 72 29 29 20 7c 7c 20 70 44 65 73 74 2d 3e 7a  tr)) || pDest->z
13110 3d 3d 73 4d 65 6d 2e 7a 20 29 3b 0a 20 20 20 20  ==sMem.z );.    
13120 70 44 65 73 74 2d 3e 66 6c 61 67 73 20 26 3d 20  pDest->flags &= 
13130 7e 28 4d 45 4d 5f 45 70 68 65 6d 7c 4d 45 4d 5f  ~(MEM_Ephem|MEM_
13140 53 74 61 74 69 63 29 3b 0a 20 20 20 20 70 44 65  Static);.    pDe
13150 73 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d  st->flags |= MEM
13160 5f 54 65 72 6d 3b 0a 20 20 20 20 70 44 65 73 74  _Term;.    pDest
13170 2d 3e 7a 20 3d 20 73 4d 65 6d 2e 7a 3b 0a 20 20  ->z = sMem.z;.  
13180 20 20 70 44 65 73 74 2d 3e 7a 4d 61 6c 6c 6f 63    pDest->zMalloc
13190 20 3d 20 73 4d 65 6d 2e 7a 4d 61 6c 6c 6f 63 3b   = sMem.zMalloc;
131a0 0a 20 20 7d 0a 0a 20 20 72 63 20 3d 20 73 71 6c  .  }..  rc = sql
131b0 69 74 65 33 56 64 62 65 4d 65 6d 4d 61 6b 65 57  ite3VdbeMemMakeW
131c0 72 69 74 65 61 62 6c 65 28 70 44 65 73 74 29 3b  riteable(pDest);
131d0 0a 0a 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3a  ..op_column_out:
131e0 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c  .  UPDATE_MAX_BL
131f0 4f 42 53 49 5a 45 28 70 44 65 73 74 29 3b 0a 20  OBSIZE(pDest);. 
13200 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
13210 70 4f 70 2d 3e 70 33 2c 20 70 44 65 73 74 29 3b  pOp->p3, pDest);
13220 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
13230 4f 70 63 6f 64 65 3a 20 41 66 66 69 6e 69 74 79  Opcode: Affinity
13240 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a   P1 P2 * P4 *.**
13250 0a 2a 2a 20 41 70 70 6c 79 20 61 66 66 69 6e 69  .** Apply affini
13260 74 69 65 73 20 74 6f 20 61 20 72 61 6e 67 65 20  ties to a range 
13270 6f 66 20 50 32 20 72 65 67 69 73 74 65 72 73 20  of P2 registers 
13280 73 74 61 72 74 69 6e 67 20 77 69 74 68 20 50 31  starting with P1
13290 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20  ..**.** P4 is a 
132a0 73 74 72 69 6e 67 20 74 68 61 74 20 69 73 20 50  string that is P
132b0 32 20 63 68 61 72 61 63 74 65 72 73 20 6c 6f 6e  2 characters lon
132c0 67 2e 20 54 68 65 20 6e 74 68 20 63 68 61 72 61  g. The nth chara
132d0 63 74 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20 73  cter of the.** s
132e0 74 72 69 6e 67 20 69 6e 64 69 63 61 74 65 73 20  tring indicates 
132f0 74 68 65 20 63 6f 6c 75 6d 6e 20 61 66 66 69 6e  the column affin
13300 69 74 79 20 74 68 61 74 20 73 68 6f 75 6c 64 20  ity that should 
13310 62 65 20 75 73 65 64 20 66 6f 72 20 74 68 65 20  be used for the 
13320 6e 74 68 0a 2a 2a 20 6d 65 6d 6f 72 79 20 63 65  nth.** memory ce
13330 6c 6c 20 69 6e 20 74 68 65 20 72 61 6e 67 65 2e  ll in the range.
13340 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 66 66 69  .*/.case OP_Affi
13350 6e 69 74 79 3a 20 7b 0a 20 20 63 6f 6e 73 74 20  nity: {.  const 
13360 63 68 61 72 20 2a 7a 41 66 66 69 6e 69 74 79 3b  char *zAffinity;
13370 20 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69     /* The affini
13380 74 79 20 74 6f 20 62 65 20 61 70 70 6c 69 65 64  ty to be applied
13390 20 2a 2f 0a 20 20 63 68 61 72 20 63 41 66 66 3b   */.  char cAff;
133a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
133b0 2a 20 41 20 73 69 6e 67 6c 65 20 63 68 61 72 61  * A single chara
133c0 63 74 65 72 20 6f 66 20 61 66 66 69 6e 69 74 79  cter of affinity
133d0 20 2a 2f 0a 0a 20 20 7a 41 66 66 69 6e 69 74 79   */..  zAffinity
133e0 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20   = pOp->p4.z;.  
133f0 61 73 73 65 72 74 28 20 7a 41 66 66 69 6e 69 74  assert( zAffinit
13400 79 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  y!=0 );.  assert
13410 28 20 7a 41 66 66 69 6e 69 74 79 5b 70 4f 70 2d  ( zAffinity[pOp-
13420 3e 70 32 5d 3d 3d 30 20 29 3b 0a 20 20 70 49 6e  >p2]==0 );.  pIn
13430 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
13440 31 5d 3b 0a 20 20 77 68 69 6c 65 28 20 28 63 41  1];.  while( (cA
13450 66 66 20 3d 20 2a 28 7a 41 66 66 69 6e 69 74 79  ff = *(zAffinity
13460 2b 2b 29 29 21 3d 30 20 29 7b 0a 20 20 20 20 61  ++))!=0 ){.    a
13470 73 73 65 72 74 28 20 70 49 6e 31 20 3c 3d 20 26  ssert( pIn1 <= &
13480 70 2d 3e 61 4d 65 6d 5b 70 2d 3e 6e 4d 65 6d 5d  p->aMem[p->nMem]
13490 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
134a0 6d 65 6d 49 73 56 61 6c 69 64 28 70 49 6e 31 29  memIsValid(pIn1)
134b0 20 29 3b 0a 20 20 20 20 45 78 70 61 6e 64 42 6c   );.    ExpandBl
134c0 6f 62 28 70 49 6e 31 29 3b 0a 20 20 20 20 61 70  ob(pIn1);.    ap
134d0 70 6c 79 41 66 66 69 6e 69 74 79 28 70 49 6e 31  plyAffinity(pIn1
134e0 2c 20 63 41 66 66 2c 20 65 6e 63 6f 64 69 6e 67  , cAff, encoding
134f0 29 3b 0a 20 20 20 20 70 49 6e 31 2b 2b 3b 0a 20  );.    pIn1++;. 
13500 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
13510 2a 20 4f 70 63 6f 64 65 3a 20 4d 61 6b 65 52 65  * Opcode: MakeRe
13520 63 6f 72 64 20 50 31 20 50 32 20 50 33 20 50 34  cord P1 P2 P3 P4
13530 20 2a 0a 2a 2a 0a 2a 2a 20 43 6f 6e 76 65 72 74   *.**.** Convert
13540 20 50 32 20 72 65 67 69 73 74 65 72 73 20 62 65   P2 registers be
13550 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 50 31 20  ginning with P1 
13560 69 6e 74 6f 20 74 68 65 20 5b 72 65 63 6f 72 64  into the [record
13570 20 66 6f 72 6d 61 74 5d 0a 2a 2a 20 75 73 65 20   format].** use 
13580 61 73 20 61 20 64 61 74 61 20 72 65 63 6f 72 64  as a data record
13590 20 69 6e 20 61 20 64 61 74 61 62 61 73 65 20 74   in a database t
135a0 61 62 6c 65 20 6f 72 20 61 73 20 61 20 6b 65 79  able or as a key
135b0 0a 2a 2a 20 69 6e 20 61 6e 20 69 6e 64 65 78 2e  .** in an index.
135c0 20 20 54 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20    The OP_Column 
135d0 6f 70 63 6f 64 65 20 63 61 6e 20 64 65 63 6f 64  opcode can decod
135e0 65 20 74 68 65 20 72 65 63 6f 72 64 20 6c 61 74  e the record lat
135f0 65 72 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 6d 61 79  er..**.** P4 may
13600 20 62 65 20 61 20 73 74 72 69 6e 67 20 74 68 61   be a string tha
13610 74 20 69 73 20 50 32 20 63 68 61 72 61 63 74 65  t is P2 characte
13620 72 73 20 6c 6f 6e 67 2e 20 20 54 68 65 20 6e 74  rs long.  The nt
13630 68 20 63 68 61 72 61 63 74 65 72 20 6f 66 20 74  h character of t
13640 68 65 0a 2a 2a 20 73 74 72 69 6e 67 20 69 6e 64  he.** string ind
13650 69 63 61 74 65 73 20 74 68 65 20 63 6f 6c 75 6d  icates the colum
13660 6e 20 61 66 66 69 6e 69 74 79 20 74 68 61 74 20  n affinity that 
13670 73 68 6f 75 6c 64 20 62 65 20 75 73 65 64 20 66  should be used f
13680 6f 72 20 74 68 65 20 6e 74 68 0a 2a 2a 20 66 69  or the nth.** fi
13690 65 6c 64 20 6f 66 20 74 68 65 20 69 6e 64 65 78  eld of the index
136a0 20 6b 65 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20   key..**.** The 
136b0 6d 61 70 70 69 6e 67 20 66 72 6f 6d 20 63 68 61  mapping from cha
136c0 72 61 63 74 65 72 20 74 6f 20 61 66 66 69 6e 69  racter to affini
136d0 74 79 20 69 73 20 67 69 76 65 6e 20 62 79 20 74  ty is given by t
136e0 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 0a 2a  he SQLITE_AFF_.*
136f0 2a 20 6d 61 63 72 6f 73 20 64 65 66 69 6e 65 64  * macros defined
13700 20 69 6e 20 73 71 6c 69 74 65 49 6e 74 2e 68 2e   in sqliteInt.h.
13710 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69 73 20  .**.** If P4 is 
13720 4e 55 4c 4c 20 74 68 65 6e 20 61 6c 6c 20 69 6e  NULL then all in
13730 64 65 78 20 66 69 65 6c 64 73 20 68 61 76 65 20  dex fields have 
13740 74 68 65 20 61 66 66 69 6e 69 74 79 20 4e 4f 4e  the affinity NON
13750 45 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 61  E..*/.case OP_Ma
13760 6b 65 52 65 63 6f 72 64 3a 20 7b 0a 20 20 75 38  keRecord: {.  u8
13770 20 2a 7a 4e 65 77 52 65 63 6f 72 64 3b 20 20 20   *zNewRecord;   
13780 20 20 20 20 20 2f 2a 20 41 20 62 75 66 66 65 72       /* A buffer
13790 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 64 61 74   to hold the dat
137a0 61 20 66 6f 72 20 74 68 65 20 6e 65 77 20 72 65  a for the new re
137b0 63 6f 72 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  cord */.  Mem *p
137c0 52 65 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  Rec;            
137d0 20 2f 2a 20 54 68 65 20 6e 65 77 20 72 65 63 6f   /* The new reco
137e0 72 64 20 2a 2f 0a 20 20 75 36 34 20 6e 44 61 74  rd */.  u64 nDat
137f0 61 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  a;             /
13800 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  * Number of byte
13810 73 20 6f 66 20 64 61 74 61 20 73 70 61 63 65 20  s of data space 
13820 2a 2f 0a 20 20 69 6e 74 20 6e 48 64 72 3b 20 20  */.  int nHdr;  
13830 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
13840 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f  umber of bytes o
13850 66 20 68 65 61 64 65 72 20 73 70 61 63 65 20 2a  f header space *
13860 2f 0a 20 20 69 36 34 20 6e 42 79 74 65 3b 20 20  /.  i64 nByte;  
13870 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61             /* Da
13880 74 61 20 73 70 61 63 65 20 72 65 71 75 69 72 65  ta space require
13890 64 20 66 6f 72 20 74 68 69 73 20 72 65 63 6f 72  d for this recor
138a0 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 5a 65 72 6f  d */.  int nZero
138b0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
138c0 20 4e 75 6d 62 65 72 20 6f 66 20 7a 65 72 6f 20   Number of zero 
138d0 62 79 74 65 73 20 61 74 20 74 68 65 20 65 6e 64  bytes at the end
138e0 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20 2a   of the record *
138f0 2f 0a 20 20 69 6e 74 20 6e 56 61 72 69 6e 74 3b  /.  int nVarint;
13900 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
13910 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 69 6e  mber of bytes in
13920 20 61 20 76 61 72 69 6e 74 20 2a 2f 0a 20 20 75   a varint */.  u
13930 33 32 20 73 65 72 69 61 6c 5f 74 79 70 65 3b 20  32 serial_type; 
13940 20 20 20 20 20 20 2f 2a 20 54 79 70 65 20 66 69        /* Type fi
13950 65 6c 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 44  eld */.  Mem *pD
13960 61 74 61 30 3b 20 20 20 20 20 20 20 20 20 20 20  ata0;           
13970 2f 2a 20 46 69 72 73 74 20 66 69 65 6c 64 20 74  /* First field t
13980 6f 20 62 65 20 63 6f 6d 62 69 6e 65 64 20 69 6e  o be combined in
13990 74 6f 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f  to the record */
139a0 0a 20 20 4d 65 6d 20 2a 70 4c 61 73 74 3b 20 20  .  Mem *pLast;  
139b0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 61 73            /* Las
139c0 74 20 66 69 65 6c 64 20 6f 66 20 74 68 65 20 72  t field of the r
139d0 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e  ecord */.  int n
139e0 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20 20 20  Field;          
139f0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 66    /* Number of f
13a00 69 65 6c 64 73 20 69 6e 20 74 68 65 20 72 65 63  ields in the rec
13a10 6f 72 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  ord */.  char *z
13a20 41 66 66 69 6e 69 74 79 3b 20 20 20 20 20 20 20  Affinity;       
13a30 2f 2a 20 54 68 65 20 61 66 66 69 6e 69 74 79 20  /* The affinity 
13a40 73 74 72 69 6e 67 20 66 6f 72 20 74 68 65 20 72  string for the r
13a50 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 66  ecord */.  int f
13a60 69 6c 65 5f 66 6f 72 6d 61 74 3b 20 20 20 20 20  ile_format;     
13a70 20 20 2f 2a 20 46 69 6c 65 20 66 6f 72 6d 61 74    /* File format
13a80 20 74 6f 20 75 73 65 20 66 6f 72 20 65 6e 63 6f   to use for enco
13a90 64 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 69 3b  ding */.  int i;
13aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ab0 20 2f 2a 20 53 70 61 63 65 20 75 73 65 64 20 69   /* Space used i
13ac0 6e 20 7a 4e 65 77 52 65 63 6f 72 64 5b 5d 20 2a  n zNewRecord[] *
13ad0 2f 0a 20 20 69 6e 74 20 6c 65 6e 3b 20 20 20 20  /.  int len;    
13ae0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65             /* Le
13af0 6e 67 74 68 20 6f 66 20 61 20 66 69 65 6c 64 20  ngth of a field 
13b00 2a 2f 0a 0a 20 20 2f 2a 20 41 73 73 75 6d 69 6e  */..  /* Assumin
13b10 67 20 74 68 65 20 72 65 63 6f 72 64 20 63 6f 6e  g the record con
13b20 74 61 69 6e 73 20 4e 20 66 69 65 6c 64 73 2c 20  tains N fields, 
13b30 74 68 65 20 72 65 63 6f 72 64 20 66 6f 72 6d 61  the record forma
13b40 74 20 6c 6f 6f 6b 73 0a 20 20 2a 2a 20 6c 69 6b  t looks.  ** lik
13b50 65 20 74 68 69 73 3a 0a 20 20 2a 2a 0a 20 20 2a  e this:.  **.  *
13b60 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  * --------------
13b70 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13b80 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13b90 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13ba0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2a 20  ----------.  ** 
13bb0 7c 20 68 64 72 2d 73 69 7a 65 20 7c 20 74 79 70  | hdr-size | typ
13bc0 65 20 30 20 7c 20 74 79 70 65 20 31 20 7c 20 2e  e 0 | type 1 | .
13bd0 2e 2e 20 7c 20 74 79 70 65 20 4e 2d 31 20 7c 20  .. | type N-1 | 
13be0 64 61 74 61 30 20 7c 20 2e 2e 2e 20 7c 20 64 61  data0 | ... | da
13bf0 74 61 20 4e 2d 31 20 7c 20 0a 20 20 2a 2a 20 2d  ta N-1 | .  ** -
13c00 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13c10 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13c20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13c30 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13c40 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2a 0a 20 20 2a  -------.  **.  *
13c50 2a 20 44 61 74 61 28 30 29 20 69 73 20 74 61 6b  * Data(0) is tak
13c60 65 6e 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72  en from register
13c70 20 50 31 2e 20 20 44 61 74 61 28 31 29 20 63 6f   P1.  Data(1) co
13c80 6d 65 73 20 66 72 6f 6d 20 72 65 67 69 73 74 65  mes from registe
13c90 72 20 50 31 2b 31 0a 20 20 2a 2a 20 61 6e 64 20  r P1+1.  ** and 
13ca0 73 6f 20 66 72 6f 74 68 2e 0a 20 20 2a 2a 0a 20  so froth..  **. 
13cb0 20 2a 2a 20 45 61 63 68 20 74 79 70 65 20 66 69   ** Each type fi
13cc0 65 6c 64 20 69 73 20 61 20 76 61 72 69 6e 74 20  eld is a varint 
13cd0 72 65 70 72 65 73 65 6e 74 69 6e 67 20 74 68 65  representing the
13ce0 20 73 65 72 69 61 6c 20 74 79 70 65 20 6f 66 20   serial type of 
13cf0 74 68 65 20 0a 20 20 2a 2a 20 63 6f 72 72 65 73  the .  ** corres
13d00 70 6f 6e 64 69 6e 67 20 64 61 74 61 20 65 6c 65  ponding data ele
13d10 6d 65 6e 74 20 28 73 65 65 20 73 71 6c 69 74 65  ment (see sqlite
13d20 33 56 64 62 65 53 65 72 69 61 6c 54 79 70 65 28  3VdbeSerialType(
13d30 29 29 2e 20 54 68 65 0a 20 20 2a 2a 20 68 64 72  )). The.  ** hdr
13d40 2d 73 69 7a 65 20 66 69 65 6c 64 20 69 73 20 61  -size field is a
13d50 6c 73 6f 20 61 20 76 61 72 69 6e 74 20 77 68 69  lso a varint whi
13d60 63 68 20 69 73 20 74 68 65 20 6f 66 66 73 65 74  ch is the offset
13d70 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e   from the beginn
13d80 69 6e 67 0a 20 20 2a 2a 20 6f 66 20 74 68 65 20  ing.  ** of the 
13d90 72 65 63 6f 72 64 20 74 6f 20 64 61 74 61 30 2e  record to data0.
13da0 0a 20 20 2a 2f 0a 20 20 6e 44 61 74 61 20 3d 20  .  */.  nData = 
13db0 30 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  0;         /* Nu
13dc0 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66  mber of bytes of
13dd0 20 64 61 74 61 20 73 70 61 63 65 20 2a 2f 0a 20   data space */. 
13de0 20 6e 48 64 72 20 3d 20 30 3b 20 20 20 20 20 20   nHdr = 0;      
13df0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
13e00 20 62 79 74 65 73 20 6f 66 20 68 65 61 64 65 72   bytes of header
13e10 20 73 70 61 63 65 20 2a 2f 0a 20 20 6e 5a 65 72   space */.  nZer
13e20 6f 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 2f  o = 0;         /
13e30 2a 20 4e 75 6d 62 65 72 20 6f 66 20 7a 65 72 6f  * Number of zero
13e40 20 62 79 74 65 73 20 61 74 20 74 68 65 20 65 6e   bytes at the en
13e50 64 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20  d of the record 
13e60 2a 2f 0a 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f  */.  nField = pO
13e70 70 2d 3e 70 31 3b 0a 20 20 7a 41 66 66 69 6e 69  p->p1;.  zAffini
13e80 74 79 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a  ty = pOp->p4.z;.
13e90 20 20 61 73 73 65 72 74 28 20 6e 46 69 65 6c 64    assert( nField
13ea0 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 3e 30 20  >0 && pOp->p2>0 
13eb0 26 26 20 70 4f 70 2d 3e 70 32 2b 6e 46 69 65 6c  && pOp->p2+nFiel
13ec0 64 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31 20 29 3b 0a  d<=p->nMem+1 );.
13ed0 20 20 70 44 61 74 61 30 20 3d 20 26 61 4d 65 6d    pData0 = &aMem
13ee0 5b 6e 46 69 65 6c 64 5d 3b 0a 20 20 6e 46 69 65  [nField];.  nFie
13ef0 6c 64 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  ld = pOp->p2;.  
13f00 70 4c 61 73 74 20 3d 20 26 70 44 61 74 61 30 5b  pLast = &pData0[
13f10 6e 46 69 65 6c 64 2d 31 5d 3b 0a 20 20 66 69 6c  nField-1];.  fil
13f20 65 5f 66 6f 72 6d 61 74 20 3d 20 70 2d 3e 6d 69  e_format = p->mi
13f30 6e 57 72 69 74 65 46 69 6c 65 46 6f 72 6d 61 74  nWriteFileFormat
13f40 3b 0a 0a 20 20 2f 2a 20 49 64 65 6e 74 69 66 79  ;..  /* Identify
13f50 20 74 68 65 20 6f 75 74 70 75 74 20 72 65 67 69   the output regi
13f60 73 74 65 72 20 2a 2f 0a 20 20 61 73 73 65 72 74  ster */.  assert
13f70 28 20 70 4f 70 2d 3e 70 33 3c 70 4f 70 2d 3e 70  ( pOp->p3<pOp->p
13f80 31 20 7c 7c 20 70 4f 70 2d 3e 70 33 3e 3d 70 4f  1 || pOp->p3>=pO
13f90 70 2d 3e 70 31 2b 70 4f 70 2d 3e 70 32 20 29 3b  p->p1+pOp->p2 );
13fa0 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b  .  pOut = &aMem[
13fb0 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41  pOp->p3];.  memA
13fc0 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
13fd0 70 4f 75 74 29 3b 0a 0a 20 20 2f 2a 20 4c 6f 6f  pOut);..  /* Loo
13fe0 70 20 74 68 72 6f 75 67 68 20 74 68 65 20 65 6c  p through the el
13ff0 65 6d 65 6e 74 73 20 74 68 61 74 20 77 69 6c 6c  ements that will
14000 20 6d 61 6b 65 20 75 70 20 74 68 65 20 72 65 63   make up the rec
14010 6f 72 64 20 74 6f 20 66 69 67 75 72 65 0a 20 20  ord to figure.  
14020 2a 2a 20 6f 75 74 20 68 6f 77 20 6d 75 63 68 20  ** out how much 
14030 73 70 61 63 65 20 69 73 20 72 65 71 75 69 72 65  space is require
14040 64 20 66 6f 72 20 74 68 65 20 6e 65 77 20 72 65  d for the new re
14050 63 6f 72 64 2e 0a 20 20 2a 2f 0a 20 20 66 6f 72  cord..  */.  for
14060 28 70 52 65 63 3d 70 44 61 74 61 30 3b 20 70 52  (pRec=pData0; pR
14070 65 63 3c 3d 70 4c 61 73 74 3b 20 70 52 65 63 2b  ec<=pLast; pRec+
14080 2b 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20  +){.    assert( 
14090 6d 65 6d 49 73 56 61 6c 69 64 28 70 52 65 63 29  memIsValid(pRec)
140a0 20 29 3b 0a 20 20 20 20 69 66 28 20 7a 41 66 66   );.    if( zAff
140b0 69 6e 69 74 79 20 29 7b 0a 20 20 20 20 20 20 61  inity ){.      a
140c0 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70 52 65  pplyAffinity(pRe
140d0 63 2c 20 7a 41 66 66 69 6e 69 74 79 5b 70 52 65  c, zAffinity[pRe
140e0 63 2d 70 44 61 74 61 30 5d 2c 20 65 6e 63 6f 64  c-pData0], encod
140f0 69 6e 67 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  ing);.    }.    
14100 69 66 28 20 70 52 65 63 2d 3e 66 6c 61 67 73 26  if( pRec->flags&
14110 4d 45 4d 5f 5a 65 72 6f 20 26 26 20 70 52 65 63  MEM_Zero && pRec
14120 2d 3e 6e 3e 30 20 29 7b 0a 20 20 20 20 20 20 73  ->n>0 ){.      s
14130 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 45 78 70  qlite3VdbeMemExp
14140 61 6e 64 42 6c 6f 62 28 70 52 65 63 29 3b 0a 20  andBlob(pRec);. 
14150 20 20 20 7d 0a 20 20 20 20 73 65 72 69 61 6c 5f     }.    serial_
14160 74 79 70 65 20 3d 20 73 71 6c 69 74 65 33 56 64  type = sqlite3Vd
14170 62 65 53 65 72 69 61 6c 54 79 70 65 28 70 52 65  beSerialType(pRe
14180 63 2c 20 66 69 6c 65 5f 66 6f 72 6d 61 74 29 3b  c, file_format);
14190 0a 20 20 20 20 6c 65 6e 20 3d 20 73 71 6c 69 74  .    len = sqlit
141a0 65 33 56 64 62 65 53 65 72 69 61 6c 54 79 70 65  e3VdbeSerialType
141b0 4c 65 6e 28 73 65 72 69 61 6c 5f 74 79 70 65 29  Len(serial_type)
141c0 3b 0a 20 20 20 20 6e 44 61 74 61 20 2b 3d 20 6c  ;.    nData += l
141d0 65 6e 3b 0a 20 20 20 20 6e 48 64 72 20 2b 3d 20  en;.    nHdr += 
141e0 73 71 6c 69 74 65 33 56 61 72 69 6e 74 4c 65 6e  sqlite3VarintLen
141f0 28 73 65 72 69 61 6c 5f 74 79 70 65 29 3b 0a 20  (serial_type);. 
14200 20 20 20 69 66 28 20 70 52 65 63 2d 3e 66 6c 61     if( pRec->fla
14210 67 73 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b  gs & MEM_Zero ){
14220 0a 20 20 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 70  .      /* Only p
14230 75 72 65 20 7a 65 72 6f 2d 66 69 6c 6c 65 64 20  ure zero-filled 
14240 42 4c 4f 42 73 20 63 61 6e 20 62 65 20 69 6e 70  BLOBs can be inp
14250 75 74 20 74 6f 20 74 68 69 73 20 4f 70 63 6f 64  ut to this Opcod
14260 65 2e 0a 20 20 20 20 20 20 2a 2a 20 57 65 20 64  e..      ** We d
14270 6f 20 6e 6f 74 20 61 6c 6c 6f 77 20 62 6c 6f 62  o not allow blob
14280 73 20 77 69 74 68 20 61 20 70 72 65 66 69 78 20  s with a prefix 
14290 61 6e 64 20 61 20 7a 65 72 6f 2d 66 69 6c 6c 65  and a zero-fille
142a0 64 20 74 61 69 6c 2e 20 2a 2f 0a 20 20 20 20 20  d tail. */.     
142b0 20 6e 5a 65 72 6f 20 2b 3d 20 70 52 65 63 2d 3e   nZero += pRec->
142c0 75 2e 6e 5a 65 72 6f 3b 0a 20 20 20 20 7d 65 6c  u.nZero;.    }el
142d0 73 65 20 69 66 28 20 6c 65 6e 20 29 7b 0a 20 20  se if( len ){.  
142e0 20 20 20 20 6e 5a 65 72 6f 20 3d 20 30 3b 0a 20      nZero = 0;. 
142f0 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 2f 2a 20 41     }.  }..  /* A
14300 64 64 20 74 68 65 20 69 6e 69 74 69 61 6c 20 68  dd the initial h
14310 65 61 64 65 72 20 76 61 72 69 6e 74 20 61 6e 64  eader varint and
14320 20 74 6f 74 61 6c 20 74 68 65 20 73 69 7a 65 20   total the size 
14330 2a 2f 0a 20 20 6e 48 64 72 20 2b 3d 20 6e 56 61  */.  nHdr += nVa
14340 72 69 6e 74 20 3d 20 73 71 6c 69 74 65 33 56 61  rint = sqlite3Va
14350 72 69 6e 74 4c 65 6e 28 6e 48 64 72 29 3b 0a 20  rintLen(nHdr);. 
14360 20 69 66 28 20 6e 56 61 72 69 6e 74 3c 73 71 6c   if( nVarint<sql
14370 69 74 65 33 56 61 72 69 6e 74 4c 65 6e 28 6e 48  ite3VarintLen(nH
14380 64 72 29 20 29 7b 0a 20 20 20 20 6e 48 64 72 2b  dr) ){.    nHdr+
14390 2b 3b 0a 20 20 7d 0a 20 20 6e 42 79 74 65 20 3d  +;.  }.  nByte =
143a0 20 6e 48 64 72 2b 6e 44 61 74 61 2d 6e 5a 65 72   nHdr+nData-nZer
143b0 6f 3b 0a 20 20 69 66 28 20 6e 42 79 74 65 3e 64  o;.  if( nByte>d
143c0 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45  b->aLimit[SQLITE
143d0 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29  _LIMIT_LENGTH] )
143e0 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62  {.    goto too_b
143f0 69 67 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 4d 61  ig;.  }..  /* Ma
14400 6b 65 20 73 75 72 65 20 74 68 65 20 6f 75 74 70  ke sure the outp
14410 75 74 20 72 65 67 69 73 74 65 72 20 68 61 73 20  ut register has 
14420 61 20 62 75 66 66 65 72 20 6c 61 72 67 65 20 65  a buffer large e
14430 6e 6f 75 67 68 20 74 6f 20 73 74 6f 72 65 20 0a  nough to store .
14440 20 20 2a 2a 20 74 68 65 20 6e 65 77 20 72 65 63    ** the new rec
14450 6f 72 64 2e 20 54 68 65 20 6f 75 74 70 75 74 20  ord. The output 
14460 72 65 67 69 73 74 65 72 20 28 70 4f 70 2d 3e 70  register (pOp->p
14470 33 29 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 77 65  3) is not allowe
14480 64 20 74 6f 0a 20 20 2a 2a 20 62 65 20 6f 6e 65  d to.  ** be one
14490 20 6f 66 20 74 68 65 20 69 6e 70 75 74 20 72 65   of the input re
144a0 67 69 73 74 65 72 73 20 28 62 65 63 61 75 73 65  gisters (because
144b0 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63   the following c
144c0 61 6c 6c 20 74 6f 0a 20 20 2a 2a 20 73 71 6c 69  all to.  ** sqli
144d0 74 65 33 56 64 62 65 4d 65 6d 47 72 6f 77 28 29  te3VdbeMemGrow()
144e0 20 63 6f 75 6c 64 20 63 6c 6f 62 62 65 72 20 74   could clobber t
144f0 68 65 20 76 61 6c 75 65 20 62 65 66 6f 72 65 20  he value before 
14500 69 74 20 69 73 20 75 73 65 64 29 2e 0a 20 20 2a  it is used)..  *
14510 2f 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 56  /.  if( sqlite3V
14520 64 62 65 4d 65 6d 47 72 6f 77 28 70 4f 75 74 2c  dbeMemGrow(pOut,
14530 20 28 69 6e 74 29 6e 42 79 74 65 2c 20 30 29 20   (int)nByte, 0) 
14540 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d  ){.    goto no_m
14550 65 6d 3b 0a 20 20 7d 0a 20 20 7a 4e 65 77 52 65  em;.  }.  zNewRe
14560 63 6f 72 64 20 3d 20 28 75 38 20 2a 29 70 4f 75  cord = (u8 *)pOu
14570 74 2d 3e 7a 3b 0a 0a 20 20 2f 2a 20 57 72 69 74  t->z;..  /* Writ
14580 65 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a  e the record */.
14590 20 20 69 20 3d 20 70 75 74 56 61 72 69 6e 74 33    i = putVarint3
145a0 32 28 7a 4e 65 77 52 65 63 6f 72 64 2c 20 6e 48  2(zNewRecord, nH
145b0 64 72 29 3b 0a 20 20 66 6f 72 28 70 52 65 63 3d  dr);.  for(pRec=
145c0 70 44 61 74 61 30 3b 20 70 52 65 63 3c 3d 70 4c  pData0; pRec<=pL
145d0 61 73 74 3b 20 70 52 65 63 2b 2b 29 7b 0a 20 20  ast; pRec++){.  
145e0 20 20 73 65 72 69 61 6c 5f 74 79 70 65 20 3d 20    serial_type = 
145f0 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61  sqlite3VdbeSeria
14600 6c 54 79 70 65 28 70 52 65 63 2c 20 66 69 6c 65  lType(pRec, file
14610 5f 66 6f 72 6d 61 74 29 3b 0a 20 20 20 20 69 20  _format);.    i 
14620 2b 3d 20 70 75 74 56 61 72 69 6e 74 33 32 28 26  += putVarint32(&
14630 7a 4e 65 77 52 65 63 6f 72 64 5b 69 5d 2c 20 73  zNewRecord[i], s
14640 65 72 69 61 6c 5f 74 79 70 65 29 3b 20 20 20 20  erial_type);    
14650 20 20 2f 2a 20 73 65 72 69 61 6c 20 74 79 70 65    /* serial type
14660 20 2a 2f 0a 20 20 7d 0a 20 20 66 6f 72 28 70 52   */.  }.  for(pR
14670 65 63 3d 70 44 61 74 61 30 3b 20 70 52 65 63 3c  ec=pData0; pRec<
14680 3d 70 4c 61 73 74 3b 20 70 52 65 63 2b 2b 29 7b  =pLast; pRec++){
14690 20 20 2f 2a 20 73 65 72 69 61 6c 20 64 61 74 61    /* serial data
146a0 20 2a 2f 0a 20 20 20 20 69 20 2b 3d 20 73 71 6c   */.    i += sql
146b0 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 50 75  ite3VdbeSerialPu
146c0 74 28 26 7a 4e 65 77 52 65 63 6f 72 64 5b 69 5d  t(&zNewRecord[i]
146d0 2c 20 28 69 6e 74 29 28 6e 42 79 74 65 2d 69 29  , (int)(nByte-i)
146e0 2c 20 70 52 65 63 2c 66 69 6c 65 5f 66 6f 72 6d  , pRec,file_form
146f0 61 74 29 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72  at);.  }.  asser
14700 74 28 20 69 3d 3d 6e 42 79 74 65 20 29 3b 0a 0a  t( i==nByte );..
14710 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
14720 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d  3>0 && pOp->p3<=
14730 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 4f 75  p->nMem );.  pOu
14740 74 2d 3e 6e 20 3d 20 28 69 6e 74 29 6e 42 79 74  t->n = (int)nByt
14750 65 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  e;.  pOut->flags
14760 20 3d 20 4d 45 4d 5f 42 6c 6f 62 20 7c 20 4d 45   = MEM_Blob | ME
14770 4d 5f 44 79 6e 3b 0a 20 20 70 4f 75 74 2d 3e 78  M_Dyn;.  pOut->x
14780 44 65 6c 20 3d 20 30 3b 0a 20 20 69 66 28 20 6e  Del = 0;.  if( n
14790 5a 65 72 6f 20 29 7b 0a 20 20 20 20 70 4f 75 74  Zero ){.    pOut
147a0 2d 3e 75 2e 6e 5a 65 72 6f 20 3d 20 6e 5a 65 72  ->u.nZero = nZer
147b0 6f 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61  o;.    pOut->fla
147c0 67 73 20 7c 3d 20 4d 45 4d 5f 5a 65 72 6f 3b 0a  gs |= MEM_Zero;.
147d0 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20    }.  pOut->enc 
147e0 3d 20 53 51 4c 49 54 45 5f 55 54 46 38 3b 20 20  = SQLITE_UTF8;  
147f0 2f 2a 20 49 6e 20 63 61 73 65 20 74 68 65 20 62  /* In case the b
14800 6c 6f 62 20 69 73 20 65 76 65 72 20 63 6f 6e 76  lob is ever conv
14810 65 72 74 65 64 20 74 6f 20 74 65 78 74 20 2a 2f  erted to text */
14820 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43  .  REGISTER_TRAC
14830 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4f 75 74 29  E(pOp->p3, pOut)
14840 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  ;.  UPDATE_MAX_B
14850 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20  LOBSIZE(pOut);. 
14860 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
14870 63 6f 64 65 3a 20 43 6f 75 6e 74 20 50 31 20 50  code: Count P1 P
14880 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 74  2 * * *.**.** St
14890 6f 72 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  ore the number o
148a0 66 20 65 6e 74 72 69 65 73 20 28 61 6e 20 69 6e  f entries (an in
148b0 74 65 67 65 72 20 76 61 6c 75 65 29 20 69 6e 20  teger value) in 
148c0 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  the table or ind
148d0 65 78 20 0a 2a 2a 20 6f 70 65 6e 65 64 20 62 79  ex .** opened by
148e0 20 63 75 72 73 6f 72 20 50 31 20 69 6e 20 72 65   cursor P1 in re
148f0 67 69 73 74 65 72 20 50 32 0a 2a 2f 0a 23 69 66  gister P2.*/.#if
14900 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
14910 5f 42 54 52 45 45 43 4f 55 4e 54 0a 63 61 73 65  _BTREECOUNT.case
14920 20 4f 50 5f 43 6f 75 6e 74 3a 20 7b 20 20 20 20   OP_Count: {    
14930 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65       /* out2-pre
14940 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69 36 34  release */.  i64
14950 20 6e 45 6e 74 72 79 3b 0a 20 20 42 74 43 75 72   nEntry;.  BtCur
14960 73 6f 72 20 2a 70 43 72 73 72 3b 0a 0a 20 20 70  sor *pCrsr;..  p
14970 43 72 73 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b  Crsr = p->apCsr[
14980 70 4f 70 2d 3e 70 31 5d 2d 3e 70 43 75 72 73 6f  pOp->p1]->pCurso
14990 72 3b 0a 20 20 69 66 28 20 41 4c 57 41 59 53 28  r;.  if( ALWAYS(
149a0 70 43 72 73 72 29 20 29 7b 0a 20 20 20 20 72 63  pCrsr) ){.    rc
149b0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43   = sqlite3BtreeC
149c0 6f 75 6e 74 28 70 43 72 73 72 2c 20 26 6e 45 6e  ount(pCrsr, &nEn
149d0 74 72 79 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  try);.  }else{. 
149e0 20 20 20 6e 45 6e 74 72 79 20 3d 20 30 3b 0a 20     nEntry = 0;. 
149f0 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d   }.  pOut->u.i =
14a00 20 6e 45 6e 74 72 79 3b 0a 20 20 62 72 65 61 6b   nEntry;.  break
14a10 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f  ;.}.#endif../* O
14a20 70 63 6f 64 65 3a 20 53 61 76 65 70 6f 69 6e 74  pcode: Savepoint
14a30 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a   P1 * * P4 *.**.
14a40 2a 2a 20 4f 70 65 6e 2c 20 72 65 6c 65 61 73 65  ** Open, release
14a50 20 6f 72 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65   or rollback the
14a60 20 73 61 76 65 70 6f 69 6e 74 20 6e 61 6d 65 64   savepoint named
14a70 20 62 79 20 70 61 72 61 6d 65 74 65 72 20 50 34   by parameter P4
14a80 2c 20 64 65 70 65 6e 64 69 6e 67 0a 2a 2a 20 6f  , depending.** o
14a90 6e 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 50  n the value of P
14aa0 31 2e 20 54 6f 20 6f 70 65 6e 20 61 20 6e 65 77  1. To open a new
14ab0 20 73 61 76 65 70 6f 69 6e 74 2c 20 50 31 3d 3d   savepoint, P1==
14ac0 30 2e 20 54 6f 20 72 65 6c 65 61 73 65 20 28 63  0. To release (c
14ad0 6f 6d 6d 69 74 29 20 61 6e 0a 2a 2a 20 65 78 69  ommit) an.** exi
14ae0 73 74 69 6e 67 20 73 61 76 65 70 6f 69 6e 74 2c  sting savepoint,
14af0 20 50 31 3d 3d 31 2c 20 6f 72 20 74 6f 20 72 6f   P1==1, or to ro
14b00 6c 6c 62 61 63 6b 20 61 6e 20 65 78 69 73 74 69  llback an existi
14b10 6e 67 20 73 61 76 65 70 6f 69 6e 74 20 50 31 3d  ng savepoint P1=
14b20 3d 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  =2..*/.case OP_S
14b30 61 76 65 70 6f 69 6e 74 3a 20 7b 0a 20 20 69 6e  avepoint: {.  in
14b40 74 20 70 31 3b 20 20 20 20 20 20 20 20 20 20 20  t p1;           
14b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
14b60 20 56 61 6c 75 65 20 6f 66 20 50 31 20 6f 70 65   Value of P1 ope
14b70 72 61 6e 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a  rand */.  char *
14b80 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20  zName;          
14b90 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d            /* Nam
14ba0 65 20 6f 66 20 73 61 76 65 70 6f 69 6e 74 20 2a  e of savepoint *
14bb0 2f 0a 20 20 69 6e 74 20 6e 4e 61 6d 65 3b 0a 20  /.  int nName;. 
14bc0 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 4e 65 77   Savepoint *pNew
14bd0 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70  ;.  Savepoint *p
14be0 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 53 61 76  Savepoint;.  Sav
14bf0 65 70 6f 69 6e 74 20 2a 70 54 6d 70 3b 0a 20 20  epoint *pTmp;.  
14c00 69 6e 74 20 69 53 61 76 65 70 6f 69 6e 74 3b 0a  int iSavepoint;.
14c10 20 20 69 6e 74 20 69 69 3b 0a 0a 20 20 70 31 20    int ii;..  p1 
14c20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 7a 4e 61  = pOp->p1;.  zNa
14c30 6d 65 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a  me = pOp->p4.z;.
14c40 0a 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68 61  .  /* Assert tha
14c50 74 20 74 68 65 20 70 31 20 70 61 72 61 6d 65 74  t the p1 paramet
14c60 65 72 20 69 73 20 76 61 6c 69 64 2e 20 41 6c 73  er is valid. Als
14c70 6f 20 74 68 61 74 20 69 66 20 74 68 65 72 65 20  o that if there 
14c80 69 73 20 6e 6f 20 6f 70 65 6e 0a 20 20 2a 2a 20  is no open.  ** 
14c90 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65  transaction, the
14ca0 6e 20 74 68 65 72 65 20 63 61 6e 6e 6f 74 20 62  n there cannot b
14cb0 65 20 61 6e 79 20 73 61 76 65 70 6f 69 6e 74 73  e any savepoints
14cc0 2e 20 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74  . .  */.  assert
14cd0 28 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74  ( db->pSavepoint
14ce0 3d 3d 30 20 7c 7c 20 64 62 2d 3e 61 75 74 6f 43  ==0 || db->autoC
14cf0 6f 6d 6d 69 74 3d 3d 30 20 29 3b 0a 20 20 61 73  ommit==0 );.  as
14d00 73 65 72 74 28 20 70 31 3d 3d 53 41 56 45 50 4f  sert( p1==SAVEPO
14d10 49 4e 54 5f 42 45 47 49 4e 7c 7c 70 31 3d 3d 53  INT_BEGIN||p1==S
14d20 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45  AVEPOINT_RELEASE
14d30 7c 7c 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f  ||p1==SAVEPOINT_
14d40 52 4f 4c 4c 42 41 43 4b 20 29 3b 0a 20 20 61 73  ROLLBACK );.  as
14d50 73 65 72 74 28 20 64 62 2d 3e 70 53 61 76 65 70  sert( db->pSavep
14d60 6f 69 6e 74 20 7c 7c 20 64 62 2d 3e 69 73 54 72  oint || db->isTr
14d70 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69  ansactionSavepoi
14d80 6e 74 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  nt==0 );.  asser
14d90 74 28 20 63 68 65 63 6b 53 61 76 65 70 6f 69 6e  t( checkSavepoin
14da0 74 43 6f 75 6e 74 28 64 62 29 20 29 3b 0a 0a 20  tCount(db) );.. 
14db0 20 69 66 28 20 70 31 3d 3d 53 41 56 45 50 4f 49   if( p1==SAVEPOI
14dc0 4e 54 5f 42 45 47 49 4e 20 29 7b 0a 20 20 20 20  NT_BEGIN ){.    
14dd0 69 66 28 20 64 62 2d 3e 77 72 69 74 65 56 64 62  if( db->writeVdb
14de0 65 43 6e 74 3e 30 20 29 7b 0a 20 20 20 20 20 20  eCnt>0 ){.      
14df0 2f 2a 20 41 20 6e 65 77 20 73 61 76 65 70 6f 69  /* A new savepoi
14e00 6e 74 20 63 61 6e 6e 6f 74 20 62 65 20 63 72 65  nt cannot be cre
14e10 61 74 65 64 20 69 66 20 74 68 65 72 65 20 61 72  ated if there ar
14e20 65 20 61 63 74 69 76 65 20 77 72 69 74 65 20 0a  e active write .
14e30 20 20 20 20 20 20 2a 2a 20 73 74 61 74 65 6d 65        ** stateme
14e40 6e 74 73 20 28 69 2e 65 2e 20 6f 70 65 6e 20 72  nts (i.e. open r
14e50 65 61 64 2f 77 72 69 74 65 20 69 6e 63 72 65 6d  ead/write increm
14e60 65 6e 74 61 6c 20 62 6c 6f 62 20 68 61 6e 64 6c  ental blob handl
14e70 65 73 29 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20  es)..      */.  
14e80 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74      sqlite3SetSt
14e90 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67  ring(&p->zErrMsg
14ea0 2c 20 64 62 2c 20 22 63 61 6e 6e 6f 74 20 6f 70  , db, "cannot op
14eb0 65 6e 20 73 61 76 65 70 6f 69 6e 74 20 2d 20 22  en savepoint - "
14ec0 0a 20 20 20 20 20 20 20 20 22 53 51 4c 20 73 74  .        "SQL st
14ed0 61 74 65 6d 65 6e 74 73 20 69 6e 20 70 72 6f 67  atements in prog
14ee0 72 65 73 73 22 29 3b 0a 20 20 20 20 20 20 72 63  ress");.      rc
14ef0 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a   = SQLITE_BUSY;.
14f00 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
14f10 20 6e 4e 61 6d 65 20 3d 20 73 71 6c 69 74 65 33   nName = sqlite3
14f20 53 74 72 6c 65 6e 33 30 28 7a 4e 61 6d 65 29 3b  Strlen30(zName);
14f30 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
14f40 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
14f50 4c 45 0a 20 20 20 20 20 20 2f 2a 20 54 68 69 73  LE.      /* This
14f60 20 63 61 6c 6c 20 69 73 20 4f 6b 20 65 76 65 6e   call is Ok even
14f70 20 69 66 20 74 68 69 73 20 73 61 76 65 70 6f 69   if this savepoi
14f80 6e 74 20 69 73 20 61 63 74 75 61 6c 6c 79 20 61  nt is actually a
14f90 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 20 20 20   transaction.   
14fa0 20 20 20 2a 2a 20 73 61 76 65 70 6f 69 6e 74 20     ** savepoint 
14fb0 28 61 6e 64 20 74 68 65 72 65 66 6f 72 65 20 73  (and therefore s
14fc0 68 6f 75 6c 64 20 6e 6f 74 20 70 72 6f 6d 70 74  hould not prompt
14fd0 20 78 53 61 76 65 70 6f 69 6e 74 28 29 29 20 63   xSavepoint()) c
14fe0 61 6c 6c 62 61 63 6b 73 2e 0a 20 20 20 20 20 20  allbacks..      
14ff0 2a 2a 20 49 66 20 74 68 69 73 20 69 73 20 61 20  ** If this is a 
15000 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65  transaction save
15010 70 6f 69 6e 74 20 62 65 69 6e 67 20 6f 70 65 6e  point being open
15020 65 64 2c 20 69 74 20 69 73 20 67 75 61 72 61 6e  ed, it is guaran
15030 74 65 65 64 0a 20 20 20 20 20 20 2a 2a 20 74 68  teed.      ** th
15040 61 74 20 74 68 65 20 64 62 2d 3e 61 56 54 72 61  at the db->aVTra
15050 6e 73 5b 5d 20 61 72 72 61 79 20 69 73 20 65 6d  ns[] array is em
15060 70 74 79 2e 20 20 2a 2f 0a 20 20 20 20 20 20 61  pty.  */.      a
15070 73 73 65 72 74 28 20 64 62 2d 3e 61 75 74 6f 43  ssert( db->autoC
15080 6f 6d 6d 69 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e  ommit==0 || db->
15090 6e 56 54 72 61 6e 73 3d 3d 30 20 29 3b 0a 20 20  nVTrans==0 );.  
150a0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
150b0 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28 64 62  VtabSavepoint(db
150c0 2c 20 53 41 56 45 50 4f 49 4e 54 5f 42 45 47 49  , SAVEPOINT_BEGI
150d0 4e 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  N,.             
150e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
150f0 20 20 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e     db->nStatemen
15100 74 2b 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74  t+db->nSavepoint
15110 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 21  );.      if( rc!
15120 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74  =SQLITE_OK ) got
15130 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
15140 72 72 6f 72 3b 0a 23 65 6e 64 69 66 0a 0a 20 20  rror;.#endif..  
15150 20 20 20 20 2f 2a 20 43 72 65 61 74 65 20 61 20      /* Create a 
15160 6e 65 77 20 73 61 76 65 70 6f 69 6e 74 20 73 74  new savepoint st
15170 72 75 63 74 75 72 65 2e 20 2a 2f 0a 20 20 20 20  ructure. */.    
15180 20 20 70 4e 65 77 20 3d 20 73 71 6c 69 74 65 33    pNew = sqlite3
15190 44 62 4d 61 6c 6c 6f 63 52 61 77 28 64 62 2c 20  DbMallocRaw(db, 
151a0 73 69 7a 65 6f 66 28 53 61 76 65 70 6f 69 6e 74  sizeof(Savepoint
151b0 29 2b 6e 4e 61 6d 65 2b 31 29 3b 0a 20 20 20 20  )+nName+1);.    
151c0 20 20 69 66 28 20 70 4e 65 77 20 29 7b 0a 20 20    if( pNew ){.  
151d0 20 20 20 20 20 20 70 4e 65 77 2d 3e 7a 4e 61 6d        pNew->zNam
151e0 65 20 3d 20 28 63 68 61 72 20 2a 29 26 70 4e 65  e = (char *)&pNe
151f0 77 5b 31 5d 3b 0a 20 20 20 20 20 20 20 20 6d 65  w[1];.        me
15200 6d 63 70 79 28 70 4e 65 77 2d 3e 7a 4e 61 6d 65  mcpy(pNew->zName
15210 2c 20 7a 4e 61 6d 65 2c 20 6e 4e 61 6d 65 2b 31  , zName, nName+1
15220 29 3b 0a 20 20 20 20 0a 20 20 20 20 20 20 20 20  );.    .        
15230 2f 2a 20 49 66 20 74 68 65 72 65 20 69 73 20 6e  /* If there is n
15240 6f 20 6f 70 65 6e 20 74 72 61 6e 73 61 63 74 69  o open transacti
15250 6f 6e 2c 20 74 68 65 6e 20 6d 61 72 6b 20 74 68  on, then mark th
15260 69 73 20 61 73 20 61 20 73 70 65 63 69 61 6c 0a  is as a special.
15270 20 20 20 20 20 20 20 20 2a 2a 20 22 74 72 61 6e          ** "tran
15280 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e  saction savepoin
15290 74 22 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 69  t". */.        i
152a0 66 28 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69  f( db->autoCommi
152b0 74 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 64  t ){.          d
152c0 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20  b->autoCommit = 
152d0 30 3b 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d  0;.          db-
152e0 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61  >isTransactionSa
152f0 76 65 70 6f 69 6e 74 20 3d 20 31 3b 0a 20 20 20  vepoint = 1;.   
15300 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
15310 20 20 20 20 20 20 64 62 2d 3e 6e 53 61 76 65 70        db->nSavep
15320 6f 69 6e 74 2b 2b 3b 0a 20 20 20 20 20 20 20 20  oint++;.        
15330 7d 0a 20 20 20 20 0a 20 20 20 20 20 20 20 20 2f  }.    .        /
15340 2a 20 4c 69 6e 6b 20 74 68 65 20 6e 65 77 20 73  * Link the new s
15350 61 76 65 70 6f 69 6e 74 20 69 6e 74 6f 20 74 68  avepoint into th
15360 65 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c  e database handl
15370 65 27 73 20 6c 69 73 74 2e 20 2a 2f 0a 20 20 20  e's list. */.   
15380 20 20 20 20 20 70 4e 65 77 2d 3e 70 4e 65 78 74       pNew->pNext
15390 20 3d 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e   = db->pSavepoin
153a0 74 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 70  t;.        db->p
153b0 53 61 76 65 70 6f 69 6e 74 20 3d 20 70 4e 65 77  Savepoint = pNew
153c0 3b 0a 20 20 20 20 20 20 20 20 70 4e 65 77 2d 3e  ;.        pNew->
153d0 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 20 3d 20  nDeferredCons = 
153e0 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e  db->nDeferredCon
153f0 73 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  s;.      }.    }
15400 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69 53  .  }else{.    iS
15410 61 76 65 70 6f 69 6e 74 20 3d 20 30 3b 0a 0a 20  avepoint = 0;.. 
15420 20 20 20 2f 2a 20 46 69 6e 64 20 74 68 65 20 6e     /* Find the n
15430 61 6d 65 64 20 73 61 76 65 70 6f 69 6e 74 2e 20  amed savepoint. 
15440 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 73  If there is no s
15450 75 63 68 20 73 61 76 65 70 6f 69 6e 74 2c 20 74  uch savepoint, t
15460 68 65 6e 20 61 6e 0a 20 20 20 20 2a 2a 20 61 6e  hen an.    ** an
15470 20 65 72 72 6f 72 20 69 73 20 72 65 74 75 72 6e   error is return
15480 65 64 20 74 6f 20 74 68 65 20 75 73 65 72 2e 20  ed to the user. 
15490 20 2a 2f 0a 20 20 20 20 66 6f 72 28 0a 20 20 20   */.    for(.   
154a0 20 20 20 70 53 61 76 65 70 6f 69 6e 74 20 3d 20     pSavepoint = 
154b0 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b 20  db->pSavepoint; 
154c0 0a 20 20 20 20 20 20 70 53 61 76 65 70 6f 69 6e  .      pSavepoin
154d0 74 20 26 26 20 73 71 6c 69 74 65 33 53 74 72 49  t && sqlite3StrI
154e0 43 6d 70 28 70 53 61 76 65 70 6f 69 6e 74 2d 3e  Cmp(pSavepoint->
154f0 7a 4e 61 6d 65 2c 20 7a 4e 61 6d 65 29 3b 0a 20  zName, zName);. 
15500 20 20 20 20 20 70 53 61 76 65 70 6f 69 6e 74 20       pSavepoint 
15510 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 70 4e  = pSavepoint->pN
15520 65 78 74 0a 20 20 20 20 29 7b 0a 20 20 20 20 20  ext.    ){.     
15530 20 69 53 61 76 65 70 6f 69 6e 74 2b 2b 3b 0a 20   iSavepoint++;. 
15540 20 20 20 7d 0a 20 20 20 20 69 66 28 20 21 70 53     }.    if( !pS
15550 61 76 65 70 6f 69 6e 74 20 29 7b 0a 20 20 20 20  avepoint ){.    
15560 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69    sqlite3SetStri
15570 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20  ng(&p->zErrMsg, 
15580 64 62 2c 20 22 6e 6f 20 73 75 63 68 20 73 61 76  db, "no such sav
15590 65 70 6f 69 6e 74 3a 20 25 73 22 2c 20 7a 4e 61  epoint: %s", zNa
155a0 6d 65 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  me);.      rc = 
155b0 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20  SQLITE_ERROR;.  
155c0 20 20 7d 65 6c 73 65 20 69 66 28 20 0a 20 20 20    }else if( .   
155d0 20 20 20 20 20 64 62 2d 3e 77 72 69 74 65 56 64       db->writeVd
155e0 62 65 43 6e 74 3e 30 20 7c 7c 20 28 70 31 3d 3d  beCnt>0 || (p1==
155f0 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41  SAVEPOINT_ROLLBA
15600 43 4b 20 26 26 20 64 62 2d 3e 61 63 74 69 76 65  CK && db->active
15610 56 64 62 65 43 6e 74 3e 31 29 20 0a 20 20 20 20  VdbeCnt>1) .    
15620 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 74 20 69  ){.      /* It i
15630 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65 20 74  s not possible t
15640 6f 20 72 65 6c 65 61 73 65 20 28 63 6f 6d 6d 69  o release (commi
15650 74 29 20 61 20 73 61 76 65 70 6f 69 6e 74 20 69  t) a savepoint i
15660 66 20 74 68 65 72 65 20 61 72 65 20 0a 20 20 20  f there are .   
15670 20 20 20 2a 2a 20 61 63 74 69 76 65 20 77 72 69     ** active wri
15680 74 65 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 49  te statements. I
15690 74 20 69 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c  t is not possibl
156a0 65 20 74 6f 20 72 6f 6c 6c 62 61 63 6b 20 61 20  e to rollback a 
156b0 73 61 76 65 70 6f 69 6e 74 0a 20 20 20 20 20 20  savepoint.      
156c0 2a 2a 20 69 66 20 74 68 65 72 65 20 61 72 65 20  ** if there are 
156d0 61 6e 79 20 61 63 74 69 76 65 20 73 74 61 74 65  any active state
156e0 6d 65 6e 74 73 20 61 74 20 61 6c 6c 2e 0a 20 20  ments at all..  
156f0 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c      */.      sql
15700 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70  ite3SetString(&p
15710 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 0a  ->zErrMsg, db, .
15720 20 20 20 20 20 20 20 20 22 63 61 6e 6e 6f 74 20          "cannot 
15730 25 73 20 73 61 76 65 70 6f 69 6e 74 20 2d 20 53  %s savepoint - S
15740 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e  QL statements in
15750 20 70 72 6f 67 72 65 73 73 22 2c 0a 20 20 20 20   progress",.    
15760 20 20 20 20 28 70 31 3d 3d 53 41 56 45 50 4f 49      (p1==SAVEPOI
15770 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 3f 20 22 72  NT_ROLLBACK ? "r
15780 6f 6c 6c 62 61 63 6b 22 3a 20 22 72 65 6c 65 61  ollback": "relea
15790 73 65 22 29 0a 20 20 20 20 20 20 29 3b 0a 20 20  se").      );.  
157a0 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
157b0 42 55 53 59 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  BUSY;.    }else{
157c0 0a 0a 20 20 20 20 20 20 2f 2a 20 44 65 74 65 72  ..      /* Deter
157d0 6d 69 6e 65 20 77 68 65 74 68 65 72 20 6f 72 20  mine whether or 
157e0 6e 6f 74 20 74 68 69 73 20 69 73 20 61 20 74 72  not this is a tr
157f0 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f  ansaction savepo
15800 69 6e 74 2e 20 49 66 20 73 6f 2c 0a 20 20 20 20  int. If so,.    
15810 20 20 2a 2a 20 61 6e 64 20 74 68 69 73 20 69 73    ** and this is
15820 20 61 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61   a RELEASE comma
15830 6e 64 2c 20 74 68 65 6e 20 74 68 65 20 63 75 72  nd, then the cur
15840 72 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  rent transaction
15850 20 0a 20 20 20 20 20 20 2a 2a 20 69 73 20 63 6f   .      ** is co
15860 6d 6d 69 74 74 65 64 2e 20 0a 20 20 20 20 20 20  mmitted. .      
15870 2a 2f 0a 20 20 20 20 20 20 69 6e 74 20 69 73 54  */.      int isT
15880 72 61 6e 73 61 63 74 69 6f 6e 20 3d 20 70 53 61  ransaction = pSa
15890 76 65 70 6f 69 6e 74 2d 3e 70 4e 65 78 74 3d 3d  vepoint->pNext==
158a0 30 20 26 26 20 64 62 2d 3e 69 73 54 72 61 6e 73  0 && db->isTrans
158b0 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3b  actionSavepoint;
158c0 0a 20 20 20 20 20 20 69 66 28 20 69 73 54 72 61  .      if( isTra
158d0 6e 73 61 63 74 69 6f 6e 20 26 26 20 70 31 3d 3d  nsaction && p1==
158e0 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53  SAVEPOINT_RELEAS
158f0 45 20 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28  E ){.        if(
15900 20 28 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64   (rc = sqlite3Vd
15910 62 65 43 68 65 63 6b 46 6b 28 70 2c 20 31 29 29  beCheckFk(p, 1))
15920 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
15930 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20 76 64           goto vd
15940 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 20  be_return;.     
15950 20 20 20 7d 0a 20 20 20 20 20 20 20 20 64 62 2d     }.        db-
15960 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 31 3b  >autoCommit = 1;
15970 0a 20 20 20 20 20 20 20 20 69 66 28 20 73 71 6c  .        if( sql
15980 69 74 65 33 56 64 62 65 48 61 6c 74 28 70 29 3d  ite3VdbeHalt(p)=
15990 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a  =SQLITE_BUSY ){.
159a0 20 20 20 20 20 20 20 20 20 20 70 2d 3e 70 63 20            p->pc 
159b0 3d 20 70 63 3b 0a 20 20 20 20 20 20 20 20 20 20  = pc;.          
159c0 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d  db->autoCommit =
159d0 20 30 3b 0a 20 20 20 20 20 20 20 20 20 20 70 2d   0;.          p-
159e0 3e 72 63 20 3d 20 72 63 20 3d 20 53 51 4c 49 54  >rc = rc = SQLIT
159f0 45 5f 42 55 53 59 3b 0a 20 20 20 20 20 20 20 20  E_BUSY;.        
15a00 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75    goto vdbe_retu
15a10 72 6e 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  rn;.        }.  
15a20 20 20 20 20 20 20 64 62 2d 3e 69 73 54 72 61 6e        db->isTran
15a30 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74  sactionSavepoint
15a40 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 72 63   = 0;.        rc
15a50 20 3d 20 70 2d 3e 72 63 3b 0a 20 20 20 20 20 20   = p->rc;.      
15a60 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 69  }else{.        i
15a70 53 61 76 65 70 6f 69 6e 74 20 3d 20 64 62 2d 3e  Savepoint = db->
15a80 6e 53 61 76 65 70 6f 69 6e 74 20 2d 20 69 53 61  nSavepoint - iSa
15a90 76 65 70 6f 69 6e 74 20 2d 20 31 3b 0a 20 20 20  vepoint - 1;.   
15aa0 20 20 20 20 20 66 6f 72 28 69 69 3d 30 3b 20 69       for(ii=0; i
15ab0 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 69 2b 2b 29  i<db->nDb; ii++)
15ac0 7b 0a 20 20 20 20 20 20 20 20 20 20 72 63 20 3d  {.          rc =
15ad0 20 73 71 6c 69 74 65 33 42 74 72 65 65 53 61 76   sqlite3BtreeSav
15ae0 65 70 6f 69 6e 74 28 64 62 2d 3e 61 44 62 5b 69  epoint(db->aDb[i
15af0 69 5d 2e 70 42 74 2c 20 70 31 2c 20 69 53 61 76  i].pBt, p1, iSav
15b00 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20 20  epoint);.       
15b10 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
15b20 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20  E_OK ){.        
15b30 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
15b40 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
15b50 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
15b60 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20 70   }.        if( p
15b70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c  1==SAVEPOINT_ROL
15b80 4c 42 41 43 4b 20 26 26 20 28 64 62 2d 3e 66 6c  LBACK && (db->fl
15b90 61 67 73 26 53 51 4c 49 54 45 5f 49 6e 74 65 72  ags&SQLITE_Inter
15ba0 6e 43 68 61 6e 67 65 73 29 21 3d 30 20 29 7b 0a  nChanges)!=0 ){.
15bb0 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
15bc0 33 45 78 70 69 72 65 50 72 65 70 61 72 65 64 53  3ExpirePreparedS
15bd0 74 61 74 65 6d 65 6e 74 73 28 64 62 29 3b 0a 20  tatements(db);. 
15be0 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
15bf0 52 65 73 65 74 49 6e 74 65 72 6e 61 6c 53 63 68  ResetInternalSch
15c00 65 6d 61 28 64 62 2c 20 2d 31 29 3b 0a 20 20 20  ema(db, -1);.   
15c10 20 20 20 20 20 20 20 64 62 2d 3e 66 6c 61 67 73         db->flags
15c20 20 3d 20 28 64 62 2d 3e 66 6c 61 67 73 20 7c 20   = (db->flags | 
15c30 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68 61  SQLITE_InternCha
15c40 6e 67 65 73 29 3b 0a 20 20 20 20 20 20 20 20 7d  nges);.        }
15c50 0a 20 20 20 20 20 20 7d 0a 20 20 0a 20 20 20 20  .      }.  .    
15c60 20 20 2f 2a 20 52 65 67 61 72 64 6c 65 73 73 20    /* Regardless 
15c70 6f 66 20 77 68 65 74 68 65 72 20 74 68 69 73 20  of whether this 
15c80 69 73 20 61 20 52 45 4c 45 41 53 45 20 6f 72 20  is a RELEASE or 
15c90 52 4f 4c 4c 42 41 43 4b 2c 20 64 65 73 74 72 6f  ROLLBACK, destro
15ca0 79 20 61 6c 6c 20 0a 20 20 20 20 20 20 2a 2a 20  y all .      ** 
15cb0 73 61 76 65 70 6f 69 6e 74 73 20 6e 65 73 74 65  savepoints neste
15cc0 64 20 69 6e 73 69 64 65 20 6f 66 20 74 68 65 20  d inside of the 
15cd0 73 61 76 65 70 6f 69 6e 74 20 62 65 69 6e 67 20  savepoint being 
15ce0 6f 70 65 72 61 74 65 64 20 6f 6e 2e 20 2a 2f 0a  operated on. */.
15cf0 20 20 20 20 20 20 77 68 69 6c 65 28 20 64 62 2d        while( db-
15d00 3e 70 53 61 76 65 70 6f 69 6e 74 21 3d 70 53 61  >pSavepoint!=pSa
15d10 76 65 70 6f 69 6e 74 20 29 7b 0a 20 20 20 20 20  vepoint ){.     
15d20 20 20 20 70 54 6d 70 20 3d 20 64 62 2d 3e 70 53     pTmp = db->pS
15d30 61 76 65 70 6f 69 6e 74 3b 0a 20 20 20 20 20 20  avepoint;.      
15d40 20 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74    db->pSavepoint
15d50 20 3d 20 70 54 6d 70 2d 3e 70 4e 65 78 74 3b 0a   = pTmp->pNext;.
15d60 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 44          sqlite3D
15d70 62 46 72 65 65 28 64 62 2c 20 70 54 6d 70 29 3b  bFree(db, pTmp);
15d80 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53 61  .        db->nSa
15d90 76 65 70 6f 69 6e 74 2d 2d 3b 0a 20 20 20 20 20  vepoint--;.     
15da0 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 49 66 20   }..      /* If 
15db0 69 74 20 69 73 20 61 20 52 45 4c 45 41 53 45 2c  it is a RELEASE,
15dc0 20 74 68 65 6e 20 64 65 73 74 72 6f 79 20 74 68   then destroy th
15dd0 65 20 73 61 76 65 70 6f 69 6e 74 20 62 65 69 6e  e savepoint bein
15de0 67 20 6f 70 65 72 61 74 65 64 20 6f 6e 20 0a 20  g operated on . 
15df0 20 20 20 20 20 2a 2a 20 74 6f 6f 2e 20 49 66 20       ** too. If 
15e00 69 74 20 69 73 20 61 20 52 4f 4c 4c 42 41 43 4b  it is a ROLLBACK
15e10 20 54 4f 2c 20 74 68 65 6e 20 73 65 74 20 74 68   TO, then set th
15e20 65 20 6e 75 6d 62 65 72 20 6f 66 20 64 65 66 65  e number of defe
15e30 72 72 65 64 20 0a 20 20 20 20 20 20 2a 2a 20 63  rred .      ** c
15e40 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74  onstraint violat
15e50 69 6f 6e 73 20 70 72 65 73 65 6e 74 20 69 6e 20  ions present in 
15e60 74 68 65 20 64 61 74 61 62 61 73 65 20 74 6f 20  the database to 
15e70 74 68 65 20 76 61 6c 75 65 20 73 74 6f 72 65 64  the value stored
15e80 0a 20 20 20 20 20 20 2a 2a 20 77 68 65 6e 20 74  .      ** when t
15e90 68 65 20 73 61 76 65 70 6f 69 6e 74 20 77 61 73  he savepoint was
15ea0 20 63 72 65 61 74 65 64 2e 20 20 2a 2f 0a 20 20   created.  */.  
15eb0 20 20 20 20 69 66 28 20 70 31 3d 3d 53 41 56 45      if( p1==SAVE
15ec0 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20 29 7b  POINT_RELEASE ){
15ed0 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
15ee0 20 70 53 61 76 65 70 6f 69 6e 74 3d 3d 64 62 2d   pSavepoint==db-
15ef0 3e 70 53 61 76 65 70 6f 69 6e 74 20 29 3b 0a 20  >pSavepoint );. 
15f00 20 20 20 20 20 20 20 64 62 2d 3e 70 53 61 76 65         db->pSave
15f10 70 6f 69 6e 74 20 3d 20 70 53 61 76 65 70 6f 69  point = pSavepoi
15f20 6e 74 2d 3e 70 4e 65 78 74 3b 0a 20 20 20 20 20  nt->pNext;.     
15f30 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65     sqlite3DbFree
15f40 28 64 62 2c 20 70 53 61 76 65 70 6f 69 6e 74 29  (db, pSavepoint)
15f50 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 21 69  ;.        if( !i
15f60 73 54 72 61 6e 73 61 63 74 69 6f 6e 20 29 7b 0a  sTransaction ){.
15f70 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53            db->nS
15f80 61 76 65 70 6f 69 6e 74 2d 2d 3b 0a 20 20 20 20  avepoint--;.    
15f90 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 65 6c 73      }.      }els
15fa0 65 7b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 6e  e{.        db->n
15fb0 44 65 66 65 72 72 65 64 43 6f 6e 73 20 3d 20 70  DeferredCons = p
15fc0 53 61 76 65 70 6f 69 6e 74 2d 3e 6e 44 65 66 65  Savepoint->nDefe
15fd0 72 72 65 64 43 6f 6e 73 3b 0a 20 20 20 20 20 20  rredCons;.      
15fe0 7d 0a 0a 20 20 20 20 20 20 69 66 28 20 21 69 73  }..      if( !is
15ff0 54 72 61 6e 73 61 63 74 69 6f 6e 20 29 7b 0a 20  Transaction ){. 
16000 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69         rc = sqli
16010 74 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e 74  te3VtabSavepoint
16020 28 64 62 2c 20 70 31 2c 20 69 53 61 76 65 70 6f  (db, p1, iSavepo
16030 69 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 69 66  int);.        if
16040 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
16050 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
16060 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20  _to_error;.     
16070 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20   }.    }.  }..  
16080 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
16090 6f 64 65 3a 20 41 75 74 6f 43 6f 6d 6d 69 74 20  ode: AutoCommit 
160a0 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
160b0 2a 20 53 65 74 20 74 68 65 20 64 61 74 61 62 61  * Set the databa
160c0 73 65 20 61 75 74 6f 2d 63 6f 6d 6d 69 74 20 66  se auto-commit f
160d0 6c 61 67 20 74 6f 20 50 31 20 28 31 20 6f 72 20  lag to P1 (1 or 
160e0 30 29 2e 20 49 66 20 50 32 20 69 73 20 74 72 75  0). If P2 is tru
160f0 65 2c 20 72 6f 6c 6c 0a 2a 2a 20 62 61 63 6b 20  e, roll.** back 
16100 61 6e 79 20 63 75 72 72 65 6e 74 6c 79 20 61 63  any currently ac
16110 74 69 76 65 20 62 74 72 65 65 20 74 72 61 6e 73  tive btree trans
16120 61 63 74 69 6f 6e 73 2e 20 49 66 20 74 68 65 72  actions. If ther
16130 65 20 61 72 65 20 61 6e 79 20 61 63 74 69 76 65  e are any active
16140 0a 2a 2a 20 56 4d 73 20 28 61 70 61 72 74 20 66  .** VMs (apart f
16150 72 6f 6d 20 74 68 69 73 20 6f 6e 65 29 2c 20 74  rom this one), t
16160 68 65 6e 20 61 20 52 4f 4c 4c 42 41 43 4b 20 66  hen a ROLLBACK f
16170 61 69 6c 73 2e 20 20 41 20 43 4f 4d 4d 49 54 20  ails.  A COMMIT 
16180 66 61 69 6c 73 20 69 66 0a 2a 2a 20 74 68 65 72  fails if.** ther
16190 65 20 61 72 65 20 61 63 74 69 76 65 20 77 72 69  e are active wri
161a0 74 69 6e 67 20 56 4d 73 20 6f 72 20 61 63 74 69  ting VMs or acti
161b0 76 65 20 56 4d 73 20 74 68 61 74 20 75 73 65 20  ve VMs that use 
161c0 73 68 61 72 65 64 20 63 61 63 68 65 2e 0a 2a 2a  shared cache..**
161d0 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63  .** This instruc
161e0 74 69 6f 6e 20 63 61 75 73 65 73 20 74 68 65 20  tion causes the 
161f0 56 4d 20 74 6f 20 68 61 6c 74 2e 0a 2a 2f 0a 63  VM to halt..*/.c
16200 61 73 65 20 4f 50 5f 41 75 74 6f 43 6f 6d 6d 69  ase OP_AutoCommi
16210 74 3a 20 7b 0a 20 20 69 6e 74 20 64 65 73 69 72  t: {.  int desir
16220 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3b 0a 20 20  edAutoCommit;.  
16230 69 6e 74 20 69 52 6f 6c 6c 62 61 63 6b 3b 0a 20  int iRollback;. 
16240 20 69 6e 74 20 74 75 72 6e 4f 6e 41 43 3b 0a 0a   int turnOnAC;..
16250 20 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d    desiredAutoCom
16260 6d 69 74 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20  mit = pOp->p1;. 
16270 20 69 52 6f 6c 6c 62 61 63 6b 20 3d 20 70 4f 70   iRollback = pOp
16280 2d 3e 70 32 3b 0a 20 20 74 75 72 6e 4f 6e 41 43  ->p2;.  turnOnAC
16290 20 3d 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f   = desiredAutoCo
162a0 6d 6d 69 74 20 26 26 20 21 64 62 2d 3e 61 75 74  mmit && !db->aut
162b0 6f 43 6f 6d 6d 69 74 3b 0a 20 20 61 73 73 65 72  oCommit;.  asser
162c0 74 28 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f  t( desiredAutoCo
162d0 6d 6d 69 74 3d 3d 31 20 7c 7c 20 64 65 73 69 72  mmit==1 || desir
162e0 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20  edAutoCommit==0 
162f0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64 65 73  );.  assert( des
16300 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d  iredAutoCommit==
16310 31 20 7c 7c 20 69 52 6f 6c 6c 62 61 63 6b 3d 3d  1 || iRollback==
16320 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64  0 );.  assert( d
16330 62 2d 3e 61 63 74 69 76 65 56 64 62 65 43 6e 74  b->activeVdbeCnt
16340 3e 30 20 29 3b 20 20 2f 2a 20 41 74 20 6c 65 61  >0 );  /* At lea
16350 73 74 20 74 68 69 73 20 6f 6e 65 20 56 4d 20 69  st this one VM i
16360 73 20 61 63 74 69 76 65 20 2a 2f 0a 0a 20 20 69  s active */..  i
16370 66 28 20 74 75 72 6e 4f 6e 41 43 20 26 26 20 69  f( turnOnAC && i
16380 52 6f 6c 6c 62 61 63 6b 20 26 26 20 64 62 2d 3e  Rollback && db->
16390 61 63 74 69 76 65 56 64 62 65 43 6e 74 3e 31 20  activeVdbeCnt>1 
163a0 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 69  ){.    /* If thi
163b0 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 6d  s instruction im
163c0 70 6c 65 6d 65 6e 74 73 20 61 20 52 4f 4c 4c 42  plements a ROLLB
163d0 41 43 4b 20 61 6e 64 20 6f 74 68 65 72 20 56 4d  ACK and other VM
163e0 73 20 61 72 65 0a 20 20 20 20 2a 2a 20 73 74 69  s are.    ** sti
163f0 6c 6c 20 72 75 6e 6e 69 6e 67 2c 20 61 6e 64 20  ll running, and 
16400 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  a transaction is
16410 20 61 63 74 69 76 65 2c 20 72 65 74 75 72 6e 20   active, return 
16420 61 6e 20 65 72 72 6f 72 20 69 6e 64 69 63 61 74  an error indicat
16430 69 6e 67 0a 20 20 20 20 2a 2a 20 74 68 61 74 20  ing.    ** that 
16440 74 68 65 20 6f 74 68 65 72 20 56 4d 73 20 6d 75  the other VMs mu
16450 73 74 20 63 6f 6d 70 6c 65 74 65 20 66 69 72 73  st complete firs
16460 74 2e 20 0a 20 20 20 20 2a 2f 0a 20 20 20 20 73  t. .    */.    s
16470 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28  qlite3SetString(
16480 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c  &p->zErrMsg, db,
16490 20 22 63 61 6e 6e 6f 74 20 72 6f 6c 6c 62 61 63   "cannot rollbac
164a0 6b 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2d 20  k transaction - 
164b0 22 0a 20 20 20 20 20 20 20 20 22 53 51 4c 20 73  ".        "SQL s
164c0 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 70 72 6f  tatements in pro
164d0 67 72 65 73 73 22 29 3b 0a 20 20 20 20 72 63 20  gress");.    rc 
164e0 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20  = SQLITE_BUSY;. 
164f0 20 7d 65 6c 73 65 20 69 66 28 20 74 75 72 6e 4f   }else if( turnO
16500 6e 41 43 20 26 26 20 21 69 52 6f 6c 6c 62 61 63  nAC && !iRollbac
16510 6b 20 26 26 20 64 62 2d 3e 77 72 69 74 65 56 64  k && db->writeVd
16520 62 65 43 6e 74 3e 30 20 29 7b 0a 20 20 20 20 2f  beCnt>0 ){.    /
16530 2a 20 49 66 20 74 68 69 73 20 69 6e 73 74 72 75  * If this instru
16540 63 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 73  ction implements
16550 20 61 20 43 4f 4d 4d 49 54 20 61 6e 64 20 6f 74   a COMMIT and ot
16560 68 65 72 20 56 4d 73 20 61 72 65 20 77 72 69 74  her VMs are writ
16570 69 6e 67 0a 20 20 20 20 2a 2a 20 72 65 74 75 72  ing.    ** retur
16580 6e 20 61 6e 20 65 72 72 6f 72 20 69 6e 64 69 63  n an error indic
16590 61 74 69 6e 67 20 74 68 61 74 20 74 68 65 20 6f  ating that the o
165a0 74 68 65 72 20 56 4d 73 20 6d 75 73 74 20 63 6f  ther VMs must co
165b0 6d 70 6c 65 74 65 20 66 69 72 73 74 2e 20 0a 20  mplete first. . 
165c0 20 20 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65     */.    sqlite
165d0 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a  3SetString(&p->z
165e0 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 63 61 6e  ErrMsg, db, "can
165f0 6e 6f 74 20 63 6f 6d 6d 69 74 20 74 72 61 6e 73  not commit trans
16600 61 63 74 69 6f 6e 20 2d 20 22 0a 20 20 20 20 20  action - ".     
16610 20 20 20 22 53 51 4c 20 73 74 61 74 65 6d 65 6e     "SQL statemen
16620 74 73 20 69 6e 20 70 72 6f 67 72 65 73 73 22 29  ts in progress")
16630 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54  ;.    rc = SQLIT
16640 45 5f 42 55 53 59 3b 0a 20 20 7d 65 6c 73 65 20  E_BUSY;.  }else 
16650 69 66 28 20 64 65 73 69 72 65 64 41 75 74 6f 43  if( desiredAutoC
16660 6f 6d 6d 69 74 21 3d 64 62 2d 3e 61 75 74 6f 43  ommit!=db->autoC
16670 6f 6d 6d 69 74 20 29 7b 0a 20 20 20 20 69 66 28  ommit ){.    if(
16680 20 69 52 6f 6c 6c 62 61 63 6b 20 29 7b 0a 20 20   iRollback ){.  
16690 20 20 20 20 61 73 73 65 72 74 28 20 64 65 73 69      assert( desi
166a0 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31  redAutoCommit==1
166b0 20 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   );.      sqlite
166c0 33 52 6f 6c 6c 62 61 63 6b 41 6c 6c 28 64 62 29  3RollbackAll(db)
166d0 3b 0a 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f  ;.      db->auto
166e0 43 6f 6d 6d 69 74 20 3d 20 31 3b 0a 20 20 20 20  Commit = 1;.    
166f0 7d 65 6c 73 65 20 69 66 28 20 28 72 63 20 3d 20  }else if( (rc = 
16700 73 71 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b  sqlite3VdbeCheck
16710 46 6b 28 70 2c 20 31 29 29 21 3d 53 51 4c 49 54  Fk(p, 1))!=SQLIT
16720 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f  E_OK ){.      go
16730 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a  to vdbe_return;.
16740 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
16750 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20   db->autoCommit 
16760 3d 20 28 75 38 29 64 65 73 69 72 65 64 41 75 74  = (u8)desiredAut
16770 6f 43 6f 6d 6d 69 74 3b 0a 20 20 20 20 20 20 69  oCommit;.      i
16780 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 48 61  f( sqlite3VdbeHa
16790 6c 74 28 70 29 3d 3d 53 51 4c 49 54 45 5f 42 55  lt(p)==SQLITE_BU
167a0 53 59 20 29 7b 0a 20 20 20 20 20 20 20 20 70 2d  SY ){.        p-
167b0 3e 70 63 20 3d 20 70 63 3b 0a 20 20 20 20 20 20  >pc = pc;.      
167c0 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74    db->autoCommit
167d0 20 3d 20 28 75 38 29 28 31 2d 64 65 73 69 72 65   = (u8)(1-desire
167e0 64 41 75 74 6f 43 6f 6d 6d 69 74 29 3b 0a 20 20  dAutoCommit);.  
167f0 20 20 20 20 20 20 70 2d 3e 72 63 20 3d 20 72 63        p->rc = rc
16800 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a   = SQLITE_BUSY;.
16810 20 20 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62          goto vdb
16820 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20  e_return;.      
16830 7d 0a 20 20 20 20 7d 0a 20 20 20 20 61 73 73 65  }.    }.    asse
16840 72 74 28 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65  rt( db->nStateme
16850 6e 74 3d 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c  nt==0 );.    sql
16860 69 74 65 33 43 6c 6f 73 65 53 61 76 65 70 6f 69  ite3CloseSavepoi
16870 6e 74 73 28 64 62 29 3b 0a 20 20 20 20 69 66 28  nts(db);.    if(
16880 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 4f   p->rc==SQLITE_O
16890 4b 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20  K ){.      rc = 
168a0 53 51 4c 49 54 45 5f 44 4f 4e 45 3b 0a 20 20 20  SQLITE_DONE;.   
168b0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 63   }else{.      rc
168c0 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b   = SQLITE_ERROR;
168d0 0a 20 20 20 20 7d 0a 20 20 20 20 67 6f 74 6f 20  .    }.    goto 
168e0 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 7d  vdbe_return;.  }
168f0 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65  else{.    sqlite
16900 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a  3SetString(&p->z
16910 45 72 72 4d 73 67 2c 20 64 62 2c 0a 20 20 20 20  ErrMsg, db,.    
16920 20 20 20 20 28 21 64 65 73 69 72 65 64 41 75 74      (!desiredAut
16930 6f 43 6f 6d 6d 69 74 29 3f 22 63 61 6e 6e 6f 74  oCommit)?"cannot
16940 20 73 74 61 72 74 20 61 20 74 72 61 6e 73 61 63   start a transac
16950 74 69 6f 6e 20 77 69 74 68 69 6e 20 61 20 74 72  tion within a tr
16960 61 6e 73 61 63 74 69 6f 6e 22 3a 28 0a 20 20 20  ansaction":(.   
16970 20 20 20 20 20 28 69 52 6f 6c 6c 62 61 63 6b 29       (iRollback)
16980 3f 22 63 61 6e 6e 6f 74 20 72 6f 6c 6c 62 61 63  ?"cannot rollbac
16990 6b 20 2d 20 6e 6f 20 74 72 61 6e 73 61 63 74 69  k - no transacti
169a0 6f 6e 20 69 73 20 61 63 74 69 76 65 22 3a 0a 20  on is active":. 
169b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
169c0 20 20 22 63 61 6e 6e 6f 74 20 63 6f 6d 6d 69 74    "cannot commit
169d0 20 2d 20 6e 6f 20 74 72 61 6e 73 61 63 74 69 6f   - no transactio
169e0 6e 20 69 73 20 61 63 74 69 76 65 22 29 29 3b 0a  n is active"));.
169f0 20 20 20 20 20 20 20 20 20 0a 20 20 20 20 72 63           .    rc
16a00 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b   = SQLITE_ERROR;
16a10 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
16a20 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 72 61 6e  ./* Opcode: Tran
16a30 73 61 63 74 69 6f 6e 20 50 31 20 50 32 20 2a 20  saction P1 P2 * 
16a40 2a 20 2a 0a 2a 2a 0a 2a 2a 20 42 65 67 69 6e 20  * *.**.** Begin 
16a50 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20  a transaction.  
16a60 54 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  The transaction 
16a70 65 6e 64 73 20 77 68 65 6e 20 61 20 43 6f 6d 6d  ends when a Comm
16a80 69 74 20 6f 72 20 52 6f 6c 6c 62 61 63 6b 0a 2a  it or Rollback.*
16a90 2a 20 6f 70 63 6f 64 65 20 69 73 20 65 6e 63 6f  * opcode is enco
16aa0 75 6e 74 65 72 65 64 2e 20 20 44 65 70 65 6e 64  untered.  Depend
16ab0 69 6e 67 20 6f 6e 20 74 68 65 20 4f 4e 20 43 4f  ing on the ON CO
16ac0 4e 46 4c 49 43 54 20 73 65 74 74 69 6e 67 2c 20  NFLICT setting, 
16ad0 74 68 65 0a 2a 2a 20 74 72 61 6e 73 61 63 74 69  the.** transacti
16ae0 6f 6e 20 6d 69 67 68 74 20 61 6c 73 6f 20 62 65  on might also be
16af0 20 72 6f 6c 6c 65 64 20 62 61 63 6b 20 69 66 20   rolled back if 
16b00 61 6e 20 65 72 72 6f 72 20 69 73 20 65 6e 63 6f  an error is enco
16b10 75 6e 74 65 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 50  untered..**.** P
16b20 31 20 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f  1 is the index o
16b30 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  f the database f
16b40 69 6c 65 20 6f 6e 20 77 68 69 63 68 20 74 68 65  ile on which the
16b50 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 0a   transaction is.
16b60 2a 2a 20 73 74 61 72 74 65 64 2e 20 20 49 6e 64  ** started.  Ind
16b70 65 78 20 30 20 69 73 20 74 68 65 20 6d 61 69 6e  ex 0 is the main
16b80 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 61   database file a
16b90 6e 64 20 69 6e 64 65 78 20 31 20 69 73 20 74 68  nd index 1 is th
16ba0 65 0a 2a 2a 20 66 69 6c 65 20 75 73 65 64 20 66  e.** file used f
16bb0 6f 72 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62  or temporary tab
16bc0 6c 65 73 2e 20 20 49 6e 64 69 63 65 73 20 6f 66  les.  Indices of
16bd0 20 32 20 6f 72 20 6d 6f 72 65 20 61 72 65 20 75   2 or more are u
16be0 73 65 64 20 66 6f 72 0a 2a 2a 20 61 74 74 61 63  sed for.** attac
16bf0 68 65 64 20 64 61 74 61 62 61 73 65 73 2e 0a 2a  hed databases..*
16c00 2a 0a 2a 2a 20 49 66 20 50 32 20 69 73 20 6e 6f  *.** If P2 is no
16c10 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 61 20 77  n-zero, then a w
16c20 72 69 74 65 2d 74 72 61 6e 73 61 63 74 69 6f 6e  rite-transaction
16c30 20 69 73 20 73 74 61 72 74 65 64 2e 20 20 41 20   is started.  A 
16c40 52 45 53 45 52 56 45 44 20 6c 6f 63 6b 20 69 73  RESERVED lock is
16c50 0a 2a 2a 20 6f 62 74 61 69 6e 65 64 20 6f 6e 20  .** obtained on 
16c60 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
16c70 65 20 77 68 65 6e 20 61 20 77 72 69 74 65 2d 74  e when a write-t
16c80 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 73 74  ransaction is st
16c90 61 72 74 65 64 2e 20 20 4e 6f 0a 2a 2a 20 6f 74  arted.  No.** ot
16ca0 68 65 72 20 70 72 6f 63 65 73 73 20 63 61 6e 20  her process can 
16cb0 73 74 61 72 74 20 61 6e 6f 74 68 65 72 20 77 72  start another wr
16cc0 69 74 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ite transaction 
16cd0 77 68 69 6c 65 20 74 68 69 73 20 74 72 61 6e 73  while this trans
16ce0 61 63 74 69 6f 6e 20 69 73 0a 2a 2a 20 75 6e 64  action is.** und
16cf0 65 72 77 61 79 2e 20 20 53 74 61 72 74 69 6e 67  erway.  Starting
16d00 20 61 20 77 72 69 74 65 20 74 72 61 6e 73 61 63   a write transac
16d10 74 69 6f 6e 20 61 6c 73 6f 20 63 72 65 61 74 65  tion also create
16d20 73 20 61 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75  s a rollback jou
16d30 72 6e 61 6c 2e 20 41 0a 2a 2a 20 77 72 69 74 65  rnal. A.** write
16d40 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 75 73   transaction mus
16d50 74 20 62 65 20 73 74 61 72 74 65 64 20 62 65 66  t be started bef
16d60 6f 72 65 20 61 6e 79 20 63 68 61 6e 67 65 73 20  ore any changes 
16d70 63 61 6e 20 62 65 20 6d 61 64 65 20 74 6f 20 74  can be made to t
16d80 68 65 0a 2a 2a 20 64 61 74 61 62 61 73 65 2e 20  he.** database. 
16d90 20 49 66 20 50 32 20 69 73 20 32 20 6f 72 20 67   If P2 is 2 or g
16da0 72 65 61 74 65 72 20 74 68 65 6e 20 61 6e 20 45  reater then an E
16db0 58 43 4c 55 53 49 56 45 20 6c 6f 63 6b 20 69 73  XCLUSIVE lock is
16dc0 20 61 6c 73 6f 20 6f 62 74 61 69 6e 65 64 0a 2a   also obtained.*
16dd0 2a 20 6f 6e 20 74 68 65 20 66 69 6c 65 2e 0a 2a  * on the file..*
16de0 2a 0a 2a 2a 20 49 66 20 61 20 77 72 69 74 65 2d  *.** If a write-
16df0 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 73  transaction is s
16e00 74 61 72 74 65 64 20 61 6e 64 20 74 68 65 20 56  tarted and the V
16e10 64 62 65 2e 75 73 65 73 53 74 6d 74 4a 6f 75 72  dbe.usesStmtJour
16e20 6e 61 6c 20 66 6c 61 67 20 69 73 0a 2a 2a 20 74  nal flag is.** t
16e30 72 75 65 20 28 74 68 69 73 20 66 6c 61 67 20 69  rue (this flag i
16e40 73 20 73 65 74 20 69 66 20 74 68 65 20 56 64 62  s set if the Vdb
16e50 65 20 6d 61 79 20 6d 6f 64 69 66 79 20 6d 6f 72  e may modify mor
16e60 65 20 74 68 61 6e 20 6f 6e 65 20 72 6f 77 20 61  e than one row a
16e70 6e 64 20 6d 61 79 0a 2a 2a 20 74 68 72 6f 77 20  nd may.** throw 
16e80 61 6e 20 41 42 4f 52 54 20 65 78 63 65 70 74 69  an ABORT excepti
16e90 6f 6e 29 2c 20 61 20 73 74 61 74 65 6d 65 6e 74  on), a statement
16ea0 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 61 79   transaction may
16eb0 20 61 6c 73 6f 20 62 65 20 6f 70 65 6e 65 64 2e   also be opened.
16ec0 0a 2a 2a 20 4d 6f 72 65 20 73 70 65 63 69 66 69  .** More specifi
16ed0 63 61 6c 6c 79 2c 20 61 20 73 74 61 74 65 6d 65  cally, a stateme
16ee0 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  nt transaction i
16ef0 73 20 6f 70 65 6e 65 64 20 69 66 66 20 74 68 65  s opened iff the
16f00 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 63 6f 6e   database.** con
16f10 6e 65 63 74 69 6f 6e 20 69 73 20 63 75 72 72 65  nection is curre
16f20 6e 74 6c 79 20 6e 6f 74 20 69 6e 20 61 75 74 6f  ntly not in auto
16f30 63 6f 6d 6d 69 74 20 6d 6f 64 65 2c 20 6f 72 20  commit mode, or 
16f40 69 66 20 74 68 65 72 65 20 61 72 65 20 6f 74 68  if there are oth
16f50 65 72 0a 2a 2a 20 61 63 74 69 76 65 20 73 74 61  er.** active sta
16f60 74 65 6d 65 6e 74 73 2e 20 41 20 73 74 61 74 65  tements. A state
16f70 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  ment transaction
16f80 20 61 6c 6c 6f 77 73 20 74 68 65 20 61 66 66 65   allows the affe
16f90 63 74 73 20 6f 66 20 74 68 69 73 0a 2a 2a 20 56  cts of this.** V
16fa0 44 42 45 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64  DBE to be rolled
16fb0 20 62 61 63 6b 20 61 66 74 65 72 20 61 6e 20 65   back after an e
16fc0 72 72 6f 72 20 77 69 74 68 6f 75 74 20 68 61 76  rror without hav
16fd0 69 6e 67 20 74 6f 20 72 6f 6c 6c 20 62 61 63 6b  ing to roll back
16fe0 20 74 68 65 0a 2a 2a 20 65 6e 74 69 72 65 20 74   the.** entire t
16ff0 72 61 6e 73 61 63 74 69 6f 6e 2e 20 49 66 20 6e  ransaction. If n
17000 6f 20 65 72 72 6f 72 20 69 73 20 65 6e 63 6f 75  o error is encou
17010 6e 74 65 72 65 64 2c 20 74 68 65 20 73 74 61 74  ntered, the stat
17020 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  ement transactio
17030 6e 0a 2a 2a 20 77 69 6c 6c 20 61 75 74 6f 6d 61  n.** will automa
17040 74 69 63 61 6c 6c 79 20 63 6f 6d 6d 69 74 20 77  tically commit w
17050 68 65 6e 20 74 68 65 20 56 44 42 45 20 68 61 6c  hen the VDBE hal
17060 74 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 32 20  ts..**.** If P2 
17070 69 73 20 7a 65 72 6f 2c 20 74 68 65 6e 20 61 20  is zero, then a 
17080 72 65 61 64 2d 6c 6f 63 6b 20 69 73 20 6f 62 74  read-lock is obt
17090 61 69 6e 65 64 20 6f 6e 20 74 68 65 20 64 61 74  ained on the dat
170a0 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2f 0a 63  abase file..*/.c
170b0 61 73 65 20 4f 50 5f 54 72 61 6e 73 61 63 74 69  ase OP_Transacti
170c0 6f 6e 3a 20 7b 0a 20 20 42 74 72 65 65 20 2a 70  on: {.  Btree *p
170d0 42 74 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  Bt;..  assert( p
170e0 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
170f0 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a  ->p1<db->nDb );.
17100 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74    assert( (p->bt
17110 72 65 65 4d 61 73 6b 20 26 20 28 28 28 79 44 62  reeMask & (((yDb
17120 4d 61 73 6b 29 31 29 3c 3c 70 4f 70 2d 3e 70 31  Mask)1)<<pOp->p1
17130 29 29 21 3d 30 20 29 3b 0a 20 20 70 42 74 20 3d  ))!=0 );.  pBt =
17140 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31   db->aDb[pOp->p1
17150 5d 2e 70 42 74 3b 0a 0a 20 20 69 66 28 20 70 42  ].pBt;..  if( pB
17160 74 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71  t ){.    rc = sq
17170 6c 69 74 65 33 42 74 72 65 65 42 65 67 69 6e 54  lite3BtreeBeginT
17180 72 61 6e 73 28 70 42 74 2c 20 70 4f 70 2d 3e 70  rans(pBt, pOp->p
17190 32 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d  2);.    if( rc==
171a0 53 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20  SQLITE_BUSY ){. 
171b0 20 20 20 20 20 70 2d 3e 70 63 20 3d 20 70 63 3b       p->pc = pc;
171c0 0a 20 20 20 20 20 20 70 2d 3e 72 63 20 3d 20 72  .      p->rc = r
171d0 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b  c = SQLITE_BUSY;
171e0 0a 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65  .      goto vdbe
171f0 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 7d 0a 20  _return;.    }. 
17200 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
17210 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f  E_OK ){.      go
17220 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
17230 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 0a 20 20  error;.    }..  
17240 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 20 26 26    if( pOp->p2 &&
17250 20 70 2d 3e 75 73 65 73 53 74 6d 74 4a 6f 75 72   p->usesStmtJour
17260 6e 61 6c 20 0a 20 20 20 20 20 26 26 20 28 64 62  nal .     && (db
17270 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20  ->autoCommit==0 
17280 7c 7c 20 64 62 2d 3e 61 63 74 69 76 65 56 64 62  || db->activeVdb
17290 65 43 6e 74 3e 31 29 20 0a 20 20 20 20 29 7b 0a  eCnt>1) .    ){.
172a0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71        assert( sq
172b0 6c 69 74 65 33 42 74 72 65 65 49 73 49 6e 54 72  lite3BtreeIsInTr
172c0 61 6e 73 28 70 42 74 29 20 29 3b 0a 20 20 20 20  ans(pBt) );.    
172d0 20 20 69 66 28 20 70 2d 3e 69 53 74 61 74 65 6d    if( p->iStatem
172e0 65 6e 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  ent==0 ){.      
172f0 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 6e 53    assert( db->nS
17300 74 61 74 65 6d 65 6e 74 3e 3d 30 20 26 26 20 64  tatement>=0 && d
17310 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 3e 3d 30  b->nSavepoint>=0
17320 20 29 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e   );.        db->
17330 6e 53 74 61 74 65 6d 65 6e 74 2b 2b 3b 20 0a 20  nStatement++; . 
17340 20 20 20 20 20 20 20 70 2d 3e 69 53 74 61 74 65         p->iState
17350 6d 65 6e 74 20 3d 20 64 62 2d 3e 6e 53 61 76 65  ment = db->nSave
17360 70 6f 69 6e 74 20 2b 20 64 62 2d 3e 6e 53 74 61  point + db->nSta
17370 74 65 6d 65 6e 74 3b 0a 20 20 20 20 20 20 7d 0a  tement;.      }.
17380 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69  .      rc = sqli
17390 74 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e 74  te3VtabSavepoint
173a0 28 64 62 2c 20 53 41 56 45 50 4f 49 4e 54 5f 42  (db, SAVEPOINT_B
173b0 45 47 49 4e 2c 20 70 2d 3e 69 53 74 61 74 65 6d  EGIN, p->iStatem
173c0 65 6e 74 2d 31 29 3b 0a 20 20 20 20 20 20 69 66  ent-1);.      if
173d0 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
173e0 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  ){.        rc = 
173f0 73 71 6c 69 74 65 33 42 74 72 65 65 42 65 67 69  sqlite3BtreeBegi
17400 6e 53 74 6d 74 28 70 42 74 2c 20 70 2d 3e 69 53  nStmt(pBt, p->iS
17410 74 61 74 65 6d 65 6e 74 29 3b 0a 20 20 20 20 20  tatement);.     
17420 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 53 74 6f   }..      /* Sto
17430 72 65 20 74 68 65 20 63 75 72 72 65 6e 74 20 76  re the current v
17440 61 6c 75 65 20 6f 66 20 74 68 65 20 64 61 74 61  alue of the data
17450 62 61 73 65 20 68 61 6e 64 6c 65 73 20 64 65 66  base handles def
17460 65 72 72 65 64 20 63 6f 6e 73 74 72 61 69 6e 74  erred constraint
17470 0a 20 20 20 20 20 20 2a 2a 20 63 6f 75 6e 74 65  .      ** counte
17480 72 2e 20 49 66 20 74 68 65 20 73 74 61 74 65 6d  r. If the statem
17490 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ent transaction 
174a0 6e 65 65 64 73 20 74 6f 20 62 65 20 72 6f 6c 6c  needs to be roll
174b0 65 64 20 62 61 63 6b 2c 0a 20 20 20 20 20 20 2a  ed back,.      *
174c0 2a 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74  * the value of t
174d0 68 69 73 20 63 6f 75 6e 74 65 72 20 6e 65 65 64  his counter need
174e0 73 20 74 6f 20 62 65 20 72 65 73 74 6f 72 65 64  s to be restored
174f0 20 74 6f 6f 2e 20 20 2a 2f 0a 20 20 20 20 20 20   too.  */.      
17500 70 2d 3e 6e 53 74 6d 74 44 65 66 43 6f 6e 73 20  p->nStmtDefCons 
17510 3d 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43  = db->nDeferredC
17520 6f 6e 73 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  ons;.    }.  }. 
17530 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
17540 63 6f 64 65 3a 20 52 65 61 64 43 6f 6f 6b 69 65  code: ReadCookie
17550 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
17560 0a 2a 2a 20 52 65 61 64 20 63 6f 6f 6b 69 65 20  .** Read cookie 
17570 6e 75 6d 62 65 72 20 50 33 20 66 72 6f 6d 20 64  number P3 from d
17580 61 74 61 62 61 73 65 20 50 31 20 61 6e 64 20 77  atabase P1 and w
17590 72 69 74 65 20 69 74 20 69 6e 74 6f 20 72 65 67  rite it into reg
175a0 69 73 74 65 72 20 50 32 2e 0a 2a 2a 20 50 33 3d  ister P2..** P3=
175b0 3d 31 20 69 73 20 74 68 65 20 73 63 68 65 6d 61  =1 is the schema
175c0 20 76 65 72 73 69 6f 6e 2e 20 20 50 33 3d 3d 32   version.  P3==2
175d0 20 69 73 20 74 68 65 20 64 61 74 61 62 61 73 65   is the database
175e0 20 66 6f 72 6d 61 74 2e 0a 2a 2a 20 50 33 3d 3d   format..** P3==
175f0 33 20 69 73 20 74 68 65 20 72 65 63 6f 6d 6d 65  3 is the recomme
17600 6e 64 65 64 20 70 61 67 65 72 20 63 61 63 68 65  nded pager cache
17610 20 73 69 7a 65 2c 20 61 6e 64 20 73 6f 20 66 6f   size, and so fo
17620 72 74 68 2e 20 20 50 31 3d 3d 30 20 69 73 0a 2a  rth.  P1==0 is.*
17630 2a 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  * the main datab
17640 61 73 65 20 66 69 6c 65 20 61 6e 64 20 50 31 3d  ase file and P1=
17650 3d 31 20 69 73 20 74 68 65 20 64 61 74 61 62 61  =1 is the databa
17660 73 65 20 66 69 6c 65 20 75 73 65 64 20 74 6f 20  se file used to 
17670 73 74 6f 72 65 0a 2a 2a 20 74 65 6d 70 6f 72 61  store.** tempora
17680 72 79 20 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a  ry tables..**.**
17690 20 54 68 65 72 65 20 6d 75 73 74 20 62 65 20 61   There must be a
176a0 20 72 65 61 64 2d 6c 6f 63 6b 20 6f 6e 20 74 68   read-lock on th
176b0 65 20 64 61 74 61 62 61 73 65 20 28 65 69 74 68  e database (eith
176c0 65 72 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  er a transaction
176d0 0a 2a 2a 20 6d 75 73 74 20 62 65 20 73 74 61 72  .** must be star
176e0 74 65 64 20 6f 72 20 74 68 65 72 65 20 6d 75 73  ted or there mus
176f0 74 20 62 65 20 61 6e 20 6f 70 65 6e 20 63 75 72  t be an open cur
17700 73 6f 72 29 20 62 65 66 6f 72 65 0a 2a 2a 20 65  sor) before.** e
17710 78 65 63 75 74 69 6e 67 20 74 68 69 73 20 69 6e  xecuting this in
17720 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61  struction..*/.ca
17730 73 65 20 4f 50 5f 52 65 61 64 43 6f 6f 6b 69 65  se OP_ReadCookie
17740 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
17750 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c    /* out2-prerel
17760 65 61 73 65 20 2a 2f 0a 20 20 69 6e 74 20 69 4d  ease */.  int iM
17770 65 74 61 3b 0a 20 20 69 6e 74 20 69 44 62 3b 0a  eta;.  int iDb;.
17780 20 20 69 6e 74 20 69 43 6f 6f 6b 69 65 3b 0a 0a    int iCookie;..
17790 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70 31 3b    iDb = pOp->p1;
177a0 0a 20 20 69 43 6f 6f 6b 69 65 20 3d 20 70 4f 70  .  iCookie = pOp
177b0 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72 74 28 20  ->p3;.  assert( 
177c0 70 4f 70 2d 3e 70 33 3c 53 51 4c 49 54 45 5f 4e  pOp->p3<SQLITE_N
177d0 5f 42 54 52 45 45 5f 4d 45 54 41 20 29 3b 0a 20  _BTREE_META );. 
177e0 20 61 73 73 65 72 74 28 20 69 44 62 3e 3d 30 20   assert( iDb>=0 
177f0 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29  && iDb<db->nDb )
17800 3b 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e  ;.  assert( db->
17810 61 44 62 5b 69 44 62 5d 2e 70 42 74 21 3d 30 20  aDb[iDb].pBt!=0 
17820 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d  );.  assert( (p-
17830 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28 28 28  >btreeMask & (((
17840 79 44 62 4d 61 73 6b 29 31 29 3c 3c 69 44 62 29  yDbMask)1)<<iDb)
17850 29 21 3d 30 20 29 3b 0a 0a 20 20 73 71 6c 69 74  )!=0 );..  sqlit
17860 65 33 42 74 72 65 65 47 65 74 4d 65 74 61 28 64  e3BtreeGetMeta(d
17870 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 2c  b->aDb[iDb].pBt,
17880 20 69 43 6f 6f 6b 69 65 2c 20 28 75 33 32 20 2a   iCookie, (u32 *
17890 29 26 69 4d 65 74 61 29 3b 0a 20 20 70 4f 75 74  )&iMeta);.  pOut
178a0 2d 3e 75 2e 69 20 3d 20 69 4d 65 74 61 3b 0a 20  ->u.i = iMeta;. 
178b0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
178c0 63 6f 64 65 3a 20 53 65 74 43 6f 6f 6b 69 65 20  code: SetCookie 
178d0 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
178e0 2a 2a 20 57 72 69 74 65 20 74 68 65 20 63 6f 6e  ** Write the con
178f0 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72  tent of register
17900 20 50 33 20 28 69 6e 74 65 72 70 72 65 74 65 64   P3 (interpreted
17910 20 61 73 20 61 6e 20 69 6e 74 65 67 65 72 29 0a   as an integer).
17920 2a 2a 20 69 6e 74 6f 20 63 6f 6f 6b 69 65 20 6e  ** into cookie n
17930 75 6d 62 65 72 20 50 32 20 6f 66 20 64 61 74 61  umber P2 of data
17940 62 61 73 65 20 50 31 2e 20 20 50 32 3d 3d 31 20  base P1.  P2==1 
17950 69 73 20 74 68 65 20 73 63 68 65 6d 61 20 76 65  is the schema ve
17960 72 73 69 6f 6e 2e 20 20 0a 2a 2a 20 50 32 3d 3d  rsion.  .** P2==
17970 32 20 69 73 20 74 68 65 20 64 61 74 61 62 61 73  2 is the databas
17980 65 20 66 6f 72 6d 61 74 2e 20 50 32 3d 3d 33 20  e format. P2==3 
17990 69 73 20 74 68 65 20 72 65 63 6f 6d 6d 65 6e 64  is the recommend
179a0 65 64 20 70 61 67 65 72 20 63 61 63 68 65 20 0a  ed pager cache .
179b0 2a 2a 20 73 69 7a 65 2c 20 61 6e 64 20 73 6f 20  ** size, and so 
179c0 66 6f 72 74 68 2e 20 20 50 31 3d 3d 30 20 69 73  forth.  P1==0 is
179d0 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
179e0 73 65 20 66 69 6c 65 20 61 6e 64 20 50 31 3d 3d  se file and P1==
179f0 31 20 69 73 20 74 68 65 20 0a 2a 2a 20 64 61 74  1 is the .** dat
17a00 61 62 61 73 65 20 66 69 6c 65 20 75 73 65 64 20  abase file used 
17a10 74 6f 20 73 74 6f 72 65 20 74 65 6d 70 6f 72 61  to store tempora
17a20 72 79 20 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a  ry tables..**.**
17a30 20 41 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d   A transaction m
17a40 75 73 74 20 62 65 20 73 74 61 72 74 65 64 20 62  ust be started b
17a50 65 66 6f 72 65 20 65 78 65 63 75 74 69 6e 67 20  efore executing 
17a60 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a  this opcode..*/.
17a70 63 61 73 65 20 4f 50 5f 53 65 74 43 6f 6f 6b 69  case OP_SetCooki
17a80 65 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20 69 6e  e: {       /* in
17a90 33 20 2a 2f 0a 20 20 44 62 20 2a 70 44 62 3b 0a  3 */.  Db *pDb;.
17aa0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
17ab0 32 3c 53 51 4c 49 54 45 5f 4e 5f 42 54 52 45 45  2<SQLITE_N_BTREE
17ac0 5f 4d 45 54 41 20 29 3b 0a 20 20 61 73 73 65 72  _META );.  asser
17ad0 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
17ae0 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62   pOp->p1<db->nDb
17af0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70   );.  assert( (p
17b00 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28 28  ->btreeMask & ((
17b10 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c 70 4f 70  (yDbMask)1)<<pOp
17b20 2d 3e 70 31 29 29 21 3d 30 20 29 3b 0a 20 20 70  ->p1))!=0 );.  p
17b30 44 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b 70 4f  Db = &db->aDb[pO
17b40 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
17b50 28 20 70 44 62 2d 3e 70 42 74 21 3d 30 20 29 3b  ( pDb->pBt!=0 );
17b60 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74  .  assert( sqlit
17b70 65 33 53 63 68 65 6d 61 4d 75 74 65 78 48 65 6c  e3SchemaMutexHel
17b80 64 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 30  d(db, pOp->p1, 0
17b90 29 20 29 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61  ) );.  pIn3 = &a
17ba0 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
17bb0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e  sqlite3VdbeMemIn
17bc0 74 65 67 65 72 69 66 79 28 70 49 6e 33 29 3b 0a  tegerify(pIn3);.
17bd0 20 20 2f 2a 20 53 65 65 20 6e 6f 74 65 20 61 62    /* See note ab
17be0 6f 75 74 20 69 6e 64 65 78 20 73 68 69 66 74 69  out index shifti
17bf0 6e 67 20 6f 6e 20 4f 50 5f 52 65 61 64 43 6f 6f  ng on OP_ReadCoo
17c00 6b 69 65 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71  kie */.  rc = sq
17c10 6c 69 74 65 33 42 74 72 65 65 55 70 64 61 74 65  lite3BtreeUpdate
17c20 4d 65 74 61 28 70 44 62 2d 3e 70 42 74 2c 20 70  Meta(pDb->pBt, p
17c30 4f 70 2d 3e 70 32 2c 20 28 69 6e 74 29 70 49 6e  Op->p2, (int)pIn
17c40 33 2d 3e 75 2e 69 29 3b 0a 20 20 69 66 28 20 70  3->u.i);.  if( p
17c50 4f 70 2d 3e 70 32 3d 3d 42 54 52 45 45 5f 53 43  Op->p2==BTREE_SC
17c60 48 45 4d 41 5f 56 45 52 53 49 4f 4e 20 29 7b 0a  HEMA_VERSION ){.
17c70 20 20 20 20 2f 2a 20 57 68 65 6e 20 74 68 65 20      /* When the 
17c80 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20 63 68  schema cookie ch
17c90 61 6e 67 65 73 2c 20 72 65 63 6f 72 64 20 74 68  anges, record th
17ca0 65 20 6e 65 77 20 63 6f 6f 6b 69 65 20 69 6e 74  e new cookie int
17cb0 65 72 6e 61 6c 6c 79 20 2a 2f 0a 20 20 20 20 70  ernally */.    p
17cc0 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 73 63 68  Db->pSchema->sch
17cd0 65 6d 61 5f 63 6f 6f 6b 69 65 20 3d 20 28 69 6e  ema_cookie = (in
17ce0 74 29 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20 20  t)pIn3->u.i;.   
17cf0 20 64 62 2d 3e 66 6c 61 67 73 20 7c 3d 20 53 51   db->flags |= SQ
17d00 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68 61 6e 67  LITE_InternChang
17d10 65 73 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  es;.  }else if( 
17d20 70 4f 70 2d 3e 70 32 3d 3d 42 54 52 45 45 5f 46  pOp->p2==BTREE_F
17d30 49 4c 45 5f 46 4f 52 4d 41 54 20 29 7b 0a 20 20  ILE_FORMAT ){.  
17d40 20 20 2f 2a 20 52 65 63 6f 72 64 20 63 68 61 6e    /* Record chan
17d50 67 65 73 20 69 6e 20 74 68 65 20 66 69 6c 65 20  ges in the file 
17d60 66 6f 72 6d 61 74 20 2a 2f 0a 20 20 20 20 70 44  format */.    pD
17d70 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 66 69 6c 65  b->pSchema->file
17d80 5f 66 6f 72 6d 61 74 20 3d 20 28 75 38 29 70 49  _format = (u8)pI
17d90 6e 33 2d 3e 75 2e 69 3b 0a 20 20 7d 0a 20 20 69  n3->u.i;.  }.  i
17da0 66 28 20 70 4f 70 2d 3e 70 31 3d 3d 31 20 29 7b  f( pOp->p1==1 ){
17db0 0a 20 20 20 20 2f 2a 20 49 6e 76 61 6c 69 64 61  .    /* Invalida
17dc0 74 65 20 61 6c 6c 20 70 72 65 70 61 72 65 64 20  te all prepared 
17dd0 73 74 61 74 65 6d 65 6e 74 73 20 77 68 65 6e 65  statements whene
17de0 76 65 72 20 74 68 65 20 54 45 4d 50 20 64 61 74  ver the TEMP dat
17df0 61 62 61 73 65 0a 20 20 20 20 2a 2a 20 73 63 68  abase.    ** sch
17e00 65 6d 61 20 69 73 20 63 68 61 6e 67 65 64 2e 20  ema is changed. 
17e10 20 54 69 63 6b 65 74 20 23 31 36 34 34 20 2a 2f   Ticket #1644 */
17e20 0a 20 20 20 20 73 71 6c 69 74 65 33 45 78 70 69  .    sqlite3Expi
17e30 72 65 50 72 65 70 61 72 65 64 53 74 61 74 65 6d  rePreparedStatem
17e40 65 6e 74 73 28 64 62 29 3b 0a 20 20 20 20 70 2d  ents(db);.    p-
17e50 3e 65 78 70 69 72 65 64 20 3d 20 30 3b 0a 20 20  >expired = 0;.  
17e60 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
17e70 20 4f 70 63 6f 64 65 3a 20 56 65 72 69 66 79 43   Opcode: VerifyC
17e80 6f 6f 6b 69 65 20 50 31 20 50 32 20 50 33 20 2a  ookie P1 P2 P3 *
17e90 20 2a 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b 20 74   *.**.** Check t
17ea0 68 65 20 76 61 6c 75 65 20 6f 66 20 67 6c 6f 62  he value of glob
17eb0 61 6c 20 64 61 74 61 62 61 73 65 20 70 61 72 61  al database para
17ec0 6d 65 74 65 72 20 6e 75 6d 62 65 72 20 30 20 28  meter number 0 (
17ed0 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 76 65  the.** schema ve
17ee0 72 73 69 6f 6e 29 20 61 6e 64 20 6d 61 6b 65 20  rsion) and make 
17ef0 73 75 72 65 20 69 74 20 69 73 20 65 71 75 61 6c  sure it is equal
17f00 20 74 6f 20 50 32 20 61 6e 64 20 74 68 61 74 20   to P2 and that 
17f10 74 68 65 0a 2a 2a 20 67 65 6e 65 72 61 74 69 6f  the.** generatio
17f20 6e 20 63 6f 75 6e 74 65 72 20 6f 6e 20 74 68 65  n counter on the
17f30 20 6c 6f 63 61 6c 20 73 63 68 65 6d 61 20 70 61   local schema pa
17f40 72 73 65 20 65 71 75 61 6c 73 20 50 33 2e 0a 2a  rse equals P3..*
17f50 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68 65 20 64  *.** P1 is the d
17f60 61 74 61 62 61 73 65 20 6e 75 6d 62 65 72 20 77  atabase number w
17f70 68 69 63 68 20 69 73 20 30 20 66 6f 72 20 74 68  hich is 0 for th
17f80 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
17f90 66 69 6c 65 0a 2a 2a 20 61 6e 64 20 31 20 66 6f  file.** and 1 fo
17fa0 72 20 74 68 65 20 66 69 6c 65 20 68 6f 6c 64 69  r the file holdi
17fb0 6e 67 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62  ng temporary tab
17fc0 6c 65 73 20 61 6e 64 20 73 6f 6d 65 20 68 69 67  les and some hig
17fd0 68 65 72 20 6e 75 6d 62 65 72 0a 2a 2a 20 66 6f  her number.** fo
17fe0 72 20 61 75 78 69 6c 69 61 72 79 20 64 61 74 61  r auxiliary data
17ff0 62 61 73 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  bases..**.** The
18000 20 63 6f 6f 6b 69 65 20 63 68 61 6e 67 65 73 20   cookie changes 
18010 69 74 73 20 76 61 6c 75 65 20 77 68 65 6e 65 76  its value whenev
18020 65 72 20 74 68 65 20 64 61 74 61 62 61 73 65 20  er the database 
18030 73 63 68 65 6d 61 20 63 68 61 6e 67 65 73 2e 0a  schema changes..
18040 2a 2a 20 54 68 69 73 20 6f 70 65 72 61 74 69 6f  ** This operatio
18050 6e 20 69 73 20 75 73 65 64 20 74 6f 20 64 65 74  n is used to det
18060 65 63 74 20 77 68 65 6e 20 74 68 61 74 20 74 68  ect when that th
18070 65 20 63 6f 6f 6b 69 65 20 68 61 73 20 63 68 61  e cookie has cha
18080 6e 67 65 64 0a 2a 2a 20 61 6e 64 20 74 68 61 74  nged.** and that
18090 20 74 68 65 20 63 75 72 72 65 6e 74 20 70 72 6f   the current pro
180a0 63 65 73 73 20 6e 65 65 64 73 20 74 6f 20 72 65  cess needs to re
180b0 72 65 61 64 20 74 68 65 20 73 63 68 65 6d 61 2e  read the schema.
180c0 0a 2a 2a 0a 2a 2a 20 45 69 74 68 65 72 20 61 20  .**.** Either a 
180d0 74 72 61 6e 73 61 63 74 69 6f 6e 20 6e 65 65 64  transaction need
180e0 73 20 74 6f 20 68 61 76 65 20 62 65 65 6e 20 73  s to have been s
180f0 74 61 72 74 65 64 20 6f 72 20 61 6e 20 4f 50 5f  tarted or an OP_
18100 4f 70 65 6e 20 6e 65 65 64 73 0a 2a 2a 20 74 6f  Open needs.** to
18110 20 62 65 20 65 78 65 63 75 74 65 64 20 28 74 6f   be executed (to
18120 20 65 73 74 61 62 6c 69 73 68 20 61 20 72 65 61   establish a rea
18130 64 20 6c 6f 63 6b 29 20 62 65 66 6f 72 65 20 74  d lock) before t
18140 68 69 73 20 6f 70 63 6f 64 65 20 69 73 0a 2a 2a  his opcode is.**
18150 20 69 6e 76 6f 6b 65 64 2e 0a 2a 2f 0a 63 61 73   invoked..*/.cas
18160 65 20 4f 50 5f 56 65 72 69 66 79 43 6f 6f 6b 69  e OP_VerifyCooki
18170 65 3a 20 7b 0a 20 20 69 6e 74 20 69 4d 65 74 61  e: {.  int iMeta
18180 3b 0a 20 20 69 6e 74 20 69 47 65 6e 3b 0a 20 20  ;.  int iGen;.  
18190 42 74 72 65 65 20 2a 70 42 74 3b 0a 0a 20 20 61  Btree *pBt;..  a
181a0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
181b0 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d  0 && pOp->p1<db-
181c0 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74  >nDb );.  assert
181d0 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20  ( (p->btreeMask 
181e0 26 20 28 28 28 79 44 62 4d 61 73 6b 29 31 29 3c  & (((yDbMask)1)<
181f0 3c 70 4f 70 2d 3e 70 31 29 29 21 3d 30 20 29 3b  <pOp->p1))!=0 );
18200 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74  .  assert( sqlit
18210 65 33 53 63 68 65 6d 61 4d 75 74 65 78 48 65 6c  e3SchemaMutexHel
18220 64 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 30  d(db, pOp->p1, 0
18230 29 20 29 3b 0a 20 20 70 42 74 20 3d 20 64 62 2d  ) );.  pBt = db-
18240 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42  >aDb[pOp->p1].pB
18250 74 3b 0a 20 20 69 66 28 20 70 42 74 20 29 7b 0a  t;.  if( pBt ){.
18260 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65      sqlite3Btree
18270 47 65 74 4d 65 74 61 28 70 42 74 2c 20 42 54 52  GetMeta(pBt, BTR
18280 45 45 5f 53 43 48 45 4d 41 5f 56 45 52 53 49 4f  EE_SCHEMA_VERSIO
18290 4e 2c 20 28 75 33 32 20 2a 29 26 69 4d 65 74 61  N, (u32 *)&iMeta
182a0 29 3b 0a 20 20 20 20 69 47 65 6e 20 3d 20 64 62  );.    iGen = db
182b0 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70  ->aDb[pOp->p1].p
182c0 53 63 68 65 6d 61 2d 3e 69 47 65 6e 65 72 61 74  Schema->iGenerat
182d0 69 6f 6e 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  ion;.  }else{.  
182e0 20 20 69 47 65 6e 20 3d 20 69 4d 65 74 61 20 3d    iGen = iMeta =
182f0 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 69 4d   0;.  }.  if( iM
18300 65 74 61 21 3d 70 4f 70 2d 3e 70 32 20 7c 7c 20  eta!=pOp->p2 || 
18310 69 47 65 6e 21 3d 70 4f 70 2d 3e 70 33 20 29 7b  iGen!=pOp->p3 ){
18320 0a 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72  .    sqlite3DbFr
18330 65 65 28 64 62 2c 20 70 2d 3e 7a 45 72 72 4d 73  ee(db, p->zErrMs
18340 67 29 3b 0a 20 20 20 20 70 2d 3e 7a 45 72 72 4d  g);.    p->zErrM
18350 73 67 20 3d 20 73 71 6c 69 74 65 33 44 62 53 74  sg = sqlite3DbSt
18360 72 44 75 70 28 64 62 2c 20 22 64 61 74 61 62 61  rDup(db, "databa
18370 73 65 20 73 63 68 65 6d 61 20 68 61 73 20 63 68  se schema has ch
18380 61 6e 67 65 64 22 29 3b 0a 20 20 20 20 2f 2a 20  anged");.    /* 
18390 49 66 20 74 68 65 20 73 63 68 65 6d 61 2d 63 6f  If the schema-co
183a0 6f 6b 69 65 20 66 72 6f 6d 20 74 68 65 20 64 61  okie from the da
183b0 74 61 62 61 73 65 20 66 69 6c 65 20 6d 61 74 63  tabase file matc
183c0 68 65 73 20 74 68 65 20 63 6f 6f 6b 69 65 20 0a  hes the cookie .
183d0 20 20 20 20 2a 2a 20 73 74 6f 72 65 64 20 77 69      ** stored wi
183e0 74 68 20 74 68 65 20 69 6e 2d 6d 65 6d 6f 72 79  th the in-memory
183f0 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   representation 
18400 6f 66 20 74 68 65 20 73 63 68 65 6d 61 2c 20 64  of the schema, d
18410 6f 0a 20 20 20 20 2a 2a 20 6e 6f 74 20 72 65 6c  o.    ** not rel
18420 6f 61 64 20 74 68 65 20 73 63 68 65 6d 61 20 66  oad the schema f
18430 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73 65  rom the database
18440 20 66 69 6c 65 2e 0a 20 20 20 20 2a 2a 0a 20 20   file..    **.  
18450 20 20 2a 2a 20 49 66 20 76 69 72 74 75 61 6c 2d    ** If virtual-
18460 74 61 62 6c 65 73 20 61 72 65 20 69 6e 20 75 73  tables are in us
18470 65 2c 20 74 68 69 73 20 69 73 20 6e 6f 74 20 6a  e, this is not j
18480 75 73 74 20 61 6e 20 6f 70 74 69 6d 69 7a 61 74  ust an optimizat
18490 69 6f 6e 2e 0a 20 20 20 20 2a 2a 20 4f 66 74 65  ion..    ** Ofte
184a0 6e 2c 20 76 2d 74 61 62 6c 65 73 20 73 74 6f 72  n, v-tables stor
184b0 65 20 74 68 65 69 72 20 64 61 74 61 20 69 6e 20  e their data in 
184c0 6f 74 68 65 72 20 53 51 4c 69 74 65 20 74 61 62  other SQLite tab
184d0 6c 65 73 2c 20 77 68 69 63 68 0a 20 20 20 20 2a  les, which.    *
184e0 2a 20 61 72 65 20 71 75 65 72 69 65 64 20 66 72  * are queried fr
184f0 6f 6d 20 77 69 74 68 69 6e 20 78 4e 65 78 74 28  om within xNext(
18500 29 20 61 6e 64 20 6f 74 68 65 72 20 76 2d 74 61  ) and other v-ta
18510 62 6c 65 20 6d 65 74 68 6f 64 73 20 75 73 69 6e  ble methods usin
18520 67 0a 20 20 20 20 2a 2a 20 70 72 65 70 61 72 65  g.    ** prepare
18530 64 20 71 75 65 72 69 65 73 2e 20 49 66 20 73 75  d queries. If su
18540 63 68 20 61 20 71 75 65 72 79 20 69 73 20 6f 75  ch a query is ou
18550 74 2d 6f 66 2d 64 61 74 65 2c 20 77 65 20 64 6f  t-of-date, we do
18560 20 6e 6f 74 20 77 61 6e 74 20 74 6f 0a 20 20 20   not want to.   
18570 20 2a 2a 20 64 69 73 63 61 72 64 20 74 68 65 20   ** discard the 
18580 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2c  database schema,
18590 20 61 73 20 74 68 65 20 75 73 65 72 20 63 6f 64   as the user cod
185a0 65 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 74  e implementing t
185b0 68 65 0a 20 20 20 20 2a 2a 20 76 2d 74 61 62 6c  he.    ** v-tabl
185c0 65 20 77 6f 75 6c 64 20 68 61 76 65 20 74 6f 20  e would have to 
185d0 62 65 20 72 65 61 64 79 20 66 6f 72 20 74 68 65  be ready for the
185e0 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74   sqlite3_vtab st
185f0 72 75 63 74 75 72 65 20 69 74 73 65 6c 66 0a 20  ructure itself. 
18600 20 20 20 2a 2a 20 74 6f 20 62 65 20 69 6e 76 61     ** to be inva
18610 6c 69 64 61 74 65 64 20 77 68 65 6e 65 76 65 72  lidated whenever
18620 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20   sqlite3_step() 
18630 69 73 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20 77  is called from w
18640 69 74 68 69 6e 20 0a 20 20 20 20 2a 2a 20 61 20  ithin .    ** a 
18650 76 2d 74 61 62 6c 65 20 6d 65 74 68 6f 64 2e 0a  v-table method..
18660 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 64      */.    if( d
18670 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e  b->aDb[pOp->p1].
18680 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 5f  pSchema->schema_
18690 63 6f 6f 6b 69 65 21 3d 69 4d 65 74 61 20 29 7b  cookie!=iMeta ){
186a0 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 52 65  .      sqlite3Re
186b0 73 65 74 49 6e 74 65 72 6e 61 6c 53 63 68 65 6d  setInternalSchem
186c0 61 28 64 62 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a  a(db, pOp->p1);.
186d0 20 20 20 20 7d 0a 0a 20 20 20 20 70 2d 3e 65 78      }..    p->ex
186e0 70 69 72 65 64 20 3d 20 31 3b 0a 20 20 20 20 72  pired = 1;.    r
186f0 63 20 3d 20 53 51 4c 49 54 45 5f 53 43 48 45 4d  c = SQLITE_SCHEM
18700 41 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  A;.  }.  break;.
18710 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70  }../* Opcode: Op
18720 65 6e 52 65 61 64 20 50 31 20 50 32 20 50 33 20  enRead P1 P2 P3 
18730 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e  P4 P5.**.** Open
18740 20 61 20 72 65 61 64 2d 6f 6e 6c 79 20 63 75 72   a read-only cur
18750 73 6f 72 20 66 6f 72 20 74 68 65 20 64 61 74 61  sor for the data
18760 62 61 73 65 20 74 61 62 6c 65 20 77 68 6f 73 65  base table whose
18770 20 72 6f 6f 74 20 70 61 67 65 20 69 73 0a 2a 2a   root page is.**
18780 20 50 32 20 69 6e 20 61 20 64 61 74 61 62 61 73   P2 in a databas
18790 65 20 66 69 6c 65 2e 20 20 54 68 65 20 64 61 74  e file.  The dat
187a0 61 62 61 73 65 20 66 69 6c 65 20 69 73 20 64 65  abase file is de
187b0 74 65 72 6d 69 6e 65 64 20 62 79 20 50 33 2e 20  termined by P3. 
187c0 0a 2a 2a 20 50 33 3d 3d 30 20 6d 65 61 6e 73 20  .** P3==0 means 
187d0 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
187e0 65 2c 20 50 33 3d 3d 31 20 6d 65 61 6e 73 20 74  e, P3==1 means t
187f0 68 65 20 64 61 74 61 62 61 73 65 20 75 73 65 64  he database used
18800 20 66 6f 72 20 0a 2a 2a 20 74 65 6d 70 6f 72 61   for .** tempora
18810 72 79 20 74 61 62 6c 65 73 2c 20 61 6e 64 20 50  ry tables, and P
18820 33 3e 31 20 6d 65 61 6e 73 20 75 73 65 64 20 74  3>1 means used t
18830 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  he corresponding
18840 20 61 74 74 61 63 68 65 64 0a 2a 2a 20 64 61 74   attached.** dat
18850 61 62 61 73 65 2e 20 20 47 69 76 65 20 74 68 65  abase.  Give the
18860 20 6e 65 77 20 63 75 72 73 6f 72 20 61 6e 20 69   new cursor an i
18870 64 65 6e 74 69 66 69 65 72 20 6f 66 20 50 31 2e  dentifier of P1.
18880 20 20 54 68 65 20 50 31 0a 2a 2a 20 76 61 6c 75    The P1.** valu
18890 65 73 20 6e 65 65 64 20 6e 6f 74 20 62 65 20 63  es need not be c
188a0 6f 6e 74 69 67 75 6f 75 73 20 62 75 74 20 61 6c  ontiguous but al
188b0 6c 20 50 31 20 76 61 6c 75 65 73 20 73 68 6f 75  l P1 values shou
188c0 6c 64 20 62 65 20 73 6d 61 6c 6c 20 69 6e 74 65  ld be small inte
188d0 67 65 72 73 2e 0a 2a 2a 20 49 74 20 69 73 20 61  gers..** It is a
188e0 6e 20 65 72 72 6f 72 20 66 6f 72 20 50 31 20 74  n error for P1 t
188f0 6f 20 62 65 20 6e 65 67 61 74 69 76 65 2e 0a 2a  o be negative..*
18900 2a 0a 2a 2a 20 49 66 20 50 35 21 3d 30 20 74 68  *.** If P5!=0 th
18910 65 6e 20 75 73 65 20 74 68 65 20 63 6f 6e 74 65  en use the conte
18920 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  nt of register P
18930 32 20 61 73 20 74 68 65 20 72 6f 6f 74 20 70 61  2 as the root pa
18940 67 65 2c 20 6e 6f 74 0a 2a 2a 20 74 68 65 20 76  ge, not.** the v
18950 61 6c 75 65 20 6f 66 20 50 32 20 69 74 73 65 6c  alue of P2 itsel
18960 66 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 77  f..**.** There w
18970 69 6c 6c 20 62 65 20 61 20 72 65 61 64 20 6c 6f  ill be a read lo
18980 63 6b 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61  ck on the databa
18990 73 65 20 77 68 65 6e 65 76 65 72 20 74 68 65 72  se whenever ther
189a0 65 20 69 73 20 61 6e 0a 2a 2a 20 6f 70 65 6e 20  e is an.** open 
189b0 63 75 72 73 6f 72 2e 20 20 49 66 20 74 68 65 20  cursor.  If the 
189c0 64 61 74 61 62 61 73 65 20 77 61 73 20 75 6e 6c  database was unl
189d0 6f 63 6b 65 64 20 70 72 69 6f 72 20 74 6f 20 74  ocked prior to t
189e0 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a  his instruction.
189f0 2a 2a 20 74 68 65 6e 20 61 20 72 65 61 64 20 6c  ** then a read l
18a00 6f 63 6b 20 69 73 20 61 63 71 75 69 72 65 64 20  ock is acquired 
18a10 61 73 20 70 61 72 74 20 6f 66 20 74 68 69 73 20  as part of this 
18a20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 41 20  instruction.  A 
18a30 72 65 61 64 0a 2a 2a 20 6c 6f 63 6b 20 61 6c 6c  read.** lock all
18a40 6f 77 73 20 6f 74 68 65 72 20 70 72 6f 63 65 73  ows other proces
18a50 73 65 73 20 74 6f 20 72 65 61 64 20 74 68 65 20  ses to read the 
18a60 64 61 74 61 62 61 73 65 20 62 75 74 20 70 72 6f  database but pro
18a70 68 69 62 69 74 73 0a 2a 2a 20 61 6e 79 20 6f 74  hibits.** any ot
18a80 68 65 72 20 70 72 6f 63 65 73 73 20 66 72 6f 6d  her process from
18a90 20 6d 6f 64 69 66 79 69 6e 67 20 74 68 65 20 64   modifying the d
18aa0 61 74 61 62 61 73 65 2e 20 20 54 68 65 20 72 65  atabase.  The re
18ab0 61 64 20 6c 6f 63 6b 20 69 73 0a 2a 2a 20 72 65  ad lock is.** re
18ac0 6c 65 61 73 65 64 20 77 68 65 6e 20 61 6c 6c 20  leased when all 
18ad0 63 75 72 73 6f 72 73 20 61 72 65 20 63 6c 6f 73  cursors are clos
18ae0 65 64 2e 20 20 49 66 20 74 68 69 73 20 69 6e 73  ed.  If this ins
18af0 74 72 75 63 74 69 6f 6e 20 61 74 74 65 6d 70 74  truction attempt
18b00 73 0a 2a 2a 20 74 6f 20 67 65 74 20 61 20 72 65  s.** to get a re
18b10 61 64 20 6c 6f 63 6b 20 62 75 74 20 66 61 69 6c  ad lock but fail
18b20 73 2c 20 74 68 65 20 73 63 72 69 70 74 20 74 65  s, the script te
18b30 72 6d 69 6e 61 74 65 73 20 77 69 74 68 20 61 6e  rminates with an
18b40 0a 2a 2a 20 53 51 4c 49 54 45 5f 42 55 53 59 20  .** SQLITE_BUSY 
18b50 65 72 72 6f 72 20 63 6f 64 65 2e 0a 2a 2a 0a 2a  error code..**.*
18b60 2a 20 54 68 65 20 50 34 20 76 61 6c 75 65 20 6d  * The P4 value m
18b70 61 79 20 62 65 20 65 69 74 68 65 72 20 61 6e 20  ay be either an 
18b80 69 6e 74 65 67 65 72 20 28 50 34 5f 49 4e 54 33  integer (P4_INT3
18b90 32 29 20 6f 72 20 61 20 70 6f 69 6e 74 65 72 20  2) or a pointer 
18ba0 74 6f 0a 2a 2a 20 61 20 4b 65 79 49 6e 66 6f 20  to.** a KeyInfo 
18bb0 73 74 72 75 63 74 75 72 65 20 28 50 34 5f 4b 45  structure (P4_KE
18bc0 59 49 4e 46 4f 29 2e 20 49 66 20 69 74 20 69 73  YINFO). If it is
18bd0 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20   a pointer to a 
18be0 4b 65 79 49 6e 66 6f 20 0a 2a 2a 20 73 74 72 75  KeyInfo .** stru
18bf0 63 74 75 72 65 2c 20 74 68 65 6e 20 73 61 69 64  cture, then said
18c00 20 73 74 72 75 63 74 75 72 65 20 64 65 66 69 6e   structure defin
18c10 65 73 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 61  es the content a
18c20 6e 64 20 63 6f 6c 6c 61 74 69 6e 67 20 0a 2a 2a  nd collating .**
18c30 20 73 65 71 75 65 6e 63 65 20 6f 66 20 74 68 65   sequence of the
18c40 20 69 6e 64 65 78 20 62 65 69 6e 67 20 6f 70 65   index being ope
18c50 6e 65 64 2e 20 4f 74 68 65 72 77 69 73 65 2c 20  ned. Otherwise, 
18c60 69 66 20 50 34 20 69 73 20 61 6e 20 69 6e 74 65  if P4 is an inte
18c70 67 65 72 20 0a 2a 2a 20 76 61 6c 75 65 2c 20 69  ger .** value, i
18c80 74 20 69 73 20 73 65 74 20 74 6f 20 74 68 65 20  t is set to the 
18c90 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  number of column
18ca0 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 0a  s in the table..
18cb0 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 20 4f  **.** See also O
18cc0 70 65 6e 57 72 69 74 65 2e 0a 2a 2f 0a 2f 2a 20  penWrite..*/./* 
18cd0 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 57 72 69 74  Opcode: OpenWrit
18ce0 65 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  e P1 P2 P3 P4 P5
18cf0 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 72 65  .**.** Open a re
18d00 61 64 2f 77 72 69 74 65 20 63 75 72 73 6f 72 20  ad/write cursor 
18d10 6e 61 6d 65 64 20 50 31 20 6f 6e 20 74 68 65 20  named P1 on the 
18d20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 77  table or index w
18d30 68 6f 73 65 20 72 6f 6f 74 0a 2a 2a 20 70 61 67  hose root.** pag
18d40 65 20 69 73 20 50 32 2e 20 20 4f 72 20 69 66 20  e is P2.  Or if 
18d50 50 35 21 3d 30 20 75 73 65 20 74 68 65 20 63 6f  P5!=0 use the co
18d60 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65  ntent of registe
18d70 72 20 50 32 20 74 6f 20 66 69 6e 64 20 74 68 65  r P2 to find the
18d80 0a 2a 2a 20 72 6f 6f 74 20 70 61 67 65 2e 0a 2a  .** root page..*
18d90 2a 0a 2a 2a 20 54 68 65 20 50 34 20 76 61 6c 75  *.** The P4 valu
18da0 65 20 6d 61 79 20 62 65 20 65 69 74 68 65 72 20  e may be either 
18db0 61 6e 20 69 6e 74 65 67 65 72 20 28 50 34 5f 49  an integer (P4_I
18dc0 4e 54 33 32 29 20 6f 72 20 61 20 70 6f 69 6e 74  NT32) or a point
18dd0 65 72 20 74 6f 0a 2a 2a 20 61 20 4b 65 79 49 6e  er to.** a KeyIn
18de0 66 6f 20 73 74 72 75 63 74 75 72 65 20 28 50 34  fo structure (P4
18df0 5f 4b 45 59 49 4e 46 4f 29 2e 20 49 66 20 69 74  _KEYINFO). If it
18e00 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
18e10 20 61 20 4b 65 79 49 6e 66 6f 20 0a 2a 2a 20 73   a KeyInfo .** s
18e20 74 72 75 63 74 75 72 65 2c 20 74 68 65 6e 20 73  tructure, then s
18e30 61 69 64 20 73 74 72 75 63 74 75 72 65 20 64 65  aid structure de
18e40 66 69 6e 65 73 20 74 68 65 20 63 6f 6e 74 65 6e  fines the conten
18e50 74 20 61 6e 64 20 63 6f 6c 6c 61 74 69 6e 67 20  t and collating 
18e60 0a 2a 2a 20 73 65 71 75 65 6e 63 65 20 6f 66 20  .** sequence of 
18e70 74 68 65 20 69 6e 64 65 78 20 62 65 69 6e 67 20  the index being 
18e80 6f 70 65 6e 65 64 2e 20 4f 74 68 65 72 77 69 73  opened. Otherwis
18e90 65 2c 20 69 66 20 50 34 20 69 73 20 61 6e 20 69  e, if P4 is an i
18ea0 6e 74 65 67 65 72 20 0a 2a 2a 20 76 61 6c 75 65  nteger .** value
18eb0 2c 20 69 74 20 69 73 20 73 65 74 20 74 6f 20 74  , it is set to t
18ec0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  he number of col
18ed0 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61 62 6c  umns in the tabl
18ee0 65 2c 20 6f 72 20 74 6f 20 74 68 65 0a 2a 2a 20  e, or to the.** 
18ef0 6c 61 72 67 65 73 74 20 69 6e 64 65 78 20 6f 66  largest index of
18f00 20 61 6e 79 20 63 6f 6c 75 6d 6e 20 6f 66 20 74   any column of t
18f10 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 69 73  he table that is
18f20 20 61 63 74 75 61 6c 6c 79 20 75 73 65 64 2e 0a   actually used..
18f30 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72  **.** This instr
18f40 75 63 74 69 6f 6e 20 77 6f 72 6b 73 20 6a 75 73  uction works jus
18f50 74 20 6c 69 6b 65 20 4f 70 65 6e 52 65 61 64 20  t like OpenRead 
18f60 65 78 63 65 70 74 20 74 68 61 74 20 69 74 20 6f  except that it o
18f70 70 65 6e 73 20 74 68 65 20 63 75 72 73 6f 72 0a  pens the cursor.
18f80 2a 2a 20 69 6e 20 72 65 61 64 2f 77 72 69 74 65  ** in read/write
18f90 20 6d 6f 64 65 2e 20 20 46 6f 72 20 61 20 67 69   mode.  For a gi
18fa0 76 65 6e 20 74 61 62 6c 65 2c 20 74 68 65 72 65  ven table, there
18fb0 20 63 61 6e 20 62 65 20 6f 6e 65 20 6f 72 20 6d   can be one or m
18fc0 6f 72 65 20 72 65 61 64 2d 6f 6e 6c 79 0a 2a 2a  ore read-only.**
18fd0 20 63 75 72 73 6f 72 73 20 6f 72 20 61 20 73 69   cursors or a si
18fe0 6e 67 6c 65 20 72 65 61 64 2f 77 72 69 74 65 20  ngle read/write 
18ff0 63 75 72 73 6f 72 20 62 75 74 20 6e 6f 74 20 62  cursor but not b
19000 6f 74 68 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  oth..**.** See a
19010 6c 73 6f 20 4f 70 65 6e 52 65 61 64 2e 0a 2a 2f  lso OpenRead..*/
19020 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 52 65 61  .case OP_OpenRea
19030 64 3a 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 57  d:.case OP_OpenW
19040 72 69 74 65 3a 20 7b 0a 20 20 69 6e 74 20 6e 46  rite: {.  int nF
19050 69 65 6c 64 3b 0a 20 20 4b 65 79 49 6e 66 6f 20  ield;.  KeyInfo 
19060 2a 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 69 6e 74  *pKeyInfo;.  int
19070 20 70 32 3b 0a 20 20 69 6e 74 20 69 44 62 3b 0a   p2;.  int iDb;.
19080 20 20 69 6e 74 20 77 72 46 6c 61 67 3b 0a 20 20    int wrFlag;.  
19090 42 74 72 65 65 20 2a 70 58 3b 0a 20 20 56 64 62  Btree *pX;.  Vdb
190a0 65 43 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a 20  eCursor *pCur;. 
190b0 20 44 62 20 2a 70 44 62 3b 0a 0a 20 20 69 66 28   Db *pDb;..  if(
190c0 20 70 2d 3e 65 78 70 69 72 65 64 20 29 7b 0a 20   p->expired ){. 
190d0 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 41     rc = SQLITE_A
190e0 42 4f 52 54 3b 0a 20 20 20 20 62 72 65 61 6b 3b  BORT;.    break;
190f0 0a 20 20 7d 0a 0a 20 20 6e 46 69 65 6c 64 20 3d  .  }..  nField =
19100 20 30 3b 0a 20 20 70 4b 65 79 49 6e 66 6f 20 3d   0;.  pKeyInfo =
19110 20 30 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e   0;.  p2 = pOp->
19120 70 32 3b 0a 20 20 69 44 62 20 3d 20 70 4f 70 2d  p2;.  iDb = pOp-
19130 3e 70 33 3b 0a 20 20 61 73 73 65 72 74 28 20 69  >p3;.  assert( i
19140 44 62 3e 3d 30 20 26 26 20 69 44 62 3c 64 62 2d  Db>=0 && iDb<db-
19150 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74  >nDb );.  assert
19160 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20  ( (p->btreeMask 
19170 26 20 28 28 28 79 44 62 4d 61 73 6b 29 31 29 3c  & (((yDbMask)1)<
19180 3c 69 44 62 29 29 21 3d 30 20 29 3b 0a 20 20 70  <iDb))!=0 );.  p
19190 44 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b 69 44  Db = &db->aDb[iD
191a0 62 5d 3b 0a 20 20 70 58 20 3d 20 70 44 62 2d 3e  b];.  pX = pDb->
191b0 70 42 74 3b 0a 20 20 61 73 73 65 72 74 28 20 70  pBt;.  assert( p
191c0 58 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 70 4f  X!=0 );.  if( pO
191d0 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70  p->opcode==OP_Op
191e0 65 6e 57 72 69 74 65 20 29 7b 0a 20 20 20 20 77  enWrite ){.    w
191f0 72 46 6c 61 67 20 3d 20 31 3b 0a 20 20 20 20 61  rFlag = 1;.    a
19200 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 53 63  ssert( sqlite3Sc
19210 68 65 6d 61 4d 75 74 65 78 48 65 6c 64 28 64 62  hemaMutexHeld(db
19220 2c 20 69 44 62 2c 20 30 29 20 29 3b 0a 20 20 20  , iDb, 0) );.   
19230 20 69 66 28 20 70 44 62 2d 3e 70 53 63 68 65 6d   if( pDb->pSchem
19240 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3c  a->file_format <
19250 20 70 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65   p->minWriteFile
19260 46 6f 72 6d 61 74 20 29 7b 0a 20 20 20 20 20 20  Format ){.      
19270 70 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65 46  p->minWriteFileF
19280 6f 72 6d 61 74 20 3d 20 70 44 62 2d 3e 70 53 63  ormat = pDb->pSc
19290 68 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61  hema->file_forma
192a0 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65  t;.    }.  }else
192b0 7b 0a 20 20 20 20 77 72 46 6c 61 67 20 3d 20 30  {.    wrFlag = 0
192c0 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d  ;.  }.  if( pOp-
192d0 3e 70 35 20 29 7b 0a 20 20 20 20 61 73 73 65 72  >p5 ){.    asser
192e0 74 28 20 70 32 3e 30 20 29 3b 0a 20 20 20 20 61  t( p2>0 );.    a
192f0 73 73 65 72 74 28 20 70 32 3c 3d 70 2d 3e 6e 4d  ssert( p2<=p->nM
19300 65 6d 20 29 3b 0a 20 20 20 20 70 49 6e 32 20 3d  em );.    pIn2 =
19310 20 26 61 4d 65 6d 5b 70 32 5d 3b 0a 20 20 20 20   &aMem[p2];.    
19320 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
19330 69 64 28 70 49 6e 32 29 20 29 3b 0a 20 20 20 20  id(pIn2) );.    
19340 61 73 73 65 72 74 28 20 28 70 49 6e 32 2d 3e 66  assert( (pIn2->f
19350 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21  lags & MEM_Int)!
19360 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  =0 );.    sqlite
19370 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69  3VdbeMemIntegeri
19380 66 79 28 70 49 6e 32 29 3b 0a 20 20 20 20 70 32  fy(pIn2);.    p2
19390 20 3d 20 28 69 6e 74 29 70 49 6e 32 2d 3e 75 2e   = (int)pIn2->u.
193a0 69 3b 0a 20 20 20 20 2f 2a 20 54 68 65 20 70 32  i;.    /* The p2
193b0 20 76 61 6c 75 65 20 61 6c 77 61 79 73 20 63 6f   value always co
193c0 6d 65 73 20 66 72 6f 6d 20 61 20 70 72 69 6f 72  mes from a prior
193d0 20 4f 50 5f 43 72 65 61 74 65 54 61 62 6c 65 20   OP_CreateTable 
193e0 6f 70 63 6f 64 65 20 61 6e 64 0a 20 20 20 20 2a  opcode and.    *
193f0 2a 20 74 68 61 74 20 6f 70 63 6f 64 65 20 77 69  * that opcode wi
19400 6c 6c 20 61 6c 77 61 79 73 20 73 65 74 20 74 68  ll always set th
19410 65 20 70 32 20 76 61 6c 75 65 20 74 6f 20 32 20  e p2 value to 2 
19420 6f 72 20 6d 6f 72 65 20 6f 72 20 65 6c 73 65 20  or more or else 
19430 66 61 69 6c 2e 0a 20 20 20 20 2a 2a 20 49 66 20  fail..    ** If 
19440 74 68 65 72 65 20 77 65 72 65 20 61 20 66 61 69  there were a fai
19450 6c 75 72 65 2c 20 74 68 65 20 70 72 65 70 61 72  lure, the prepar
19460 65 64 20 73 74 61 74 65 6d 65 6e 74 20 77 6f 75  ed statement wou
19470 6c 64 20 68 61 76 65 20 68 61 6c 74 65 64 0a 20  ld have halted. 
19480 20 20 20 2a 2a 20 62 65 66 6f 72 65 20 72 65 61     ** before rea
19490 63 68 69 6e 67 20 74 68 69 73 20 69 6e 73 74 72  ching this instr
194a0 75 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 20 20 69  uction. */.    i
194b0 66 28 20 4e 45 56 45 52 28 70 32 3c 32 29 20 29  f( NEVER(p2<2) )
194c0 20 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51   {.      rc = SQ
194d0 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50  LITE_CORRUPT_BKP
194e0 54 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62  T;.      goto ab
194f0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
19500 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66  ;.    }.  }.  if
19510 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
19520 34 5f 4b 45 59 49 4e 46 4f 20 29 7b 0a 20 20 20  4_KEYINFO ){.   
19530 20 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d   pKeyInfo = pOp-
19540 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20  >p4.pKeyInfo;.  
19550 20 20 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63 20    pKeyInfo->enc 
19560 3d 20 45 4e 43 28 70 2d 3e 64 62 29 3b 0a 20 20  = ENC(p->db);.  
19570 20 20 6e 46 69 65 6c 64 20 3d 20 70 4b 65 79 49    nField = pKeyI
19580 6e 66 6f 2d 3e 6e 46 69 65 6c 64 2b 31 3b 0a 20  nfo->nField+1;. 
19590 20 7d 65 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e   }else if( pOp->
195a0 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32  p4type==P4_INT32
195b0 20 29 7b 0a 20 20 20 20 6e 46 69 65 6c 64 20 3d   ){.    nField =
195c0 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 7d 0a   pOp->p4.i;.  }.
195d0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
195e0 31 3e 3d 30 20 29 3b 0a 20 20 70 43 75 72 20 3d  1>=0 );.  pCur =
195f0 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28   allocateCursor(
19600 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 6e 46 69 65  p, pOp->p1, nFie
19610 6c 64 2c 20 69 44 62 2c 20 31 29 3b 0a 20 20 69  ld, iDb, 1);.  i
19620 66 28 20 70 43 75 72 3d 3d 30 20 29 20 67 6f 74  f( pCur==0 ) got
19630 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 75 72  o no_mem;.  pCur
19640 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20  ->nullRow = 1;. 
19650 20 70 43 75 72 2d 3e 69 73 4f 72 64 65 72 65 64   pCur->isOrdered
19660 20 3d 20 31 3b 0a 20 20 72 63 20 3d 20 73 71 6c   = 1;.  rc = sql
19670 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 28  ite3BtreeCursor(
19680 70 58 2c 20 70 32 2c 20 77 72 46 6c 61 67 2c 20  pX, p2, wrFlag, 
19690 70 4b 65 79 49 6e 66 6f 2c 20 70 43 75 72 2d 3e  pKeyInfo, pCur->
196a0 70 43 75 72 73 6f 72 29 3b 0a 20 20 70 43 75 72  pCursor);.  pCur
196b0 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4b 65  ->pKeyInfo = pKe
196c0 79 49 6e 66 6f 3b 0a 0a 20 20 2f 2a 20 53 69 6e  yInfo;..  /* Sin
196d0 63 65 20 69 74 20 70 65 72 66 6f 72 6d 73 20 6e  ce it performs n
196e0 6f 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  o memory allocat
196f0 69 6f 6e 20 6f 72 20 49 4f 2c 20 74 68 65 20 6f  ion or IO, the o
19700 6e 6c 79 20 76 61 6c 75 65 20 74 68 61 74 0a 20  nly value that. 
19710 20 2a 2a 20 73 71 6c 69 74 65 33 42 74 72 65 65   ** sqlite3Btree
19720 43 75 72 73 6f 72 28 29 20 6d 61 79 20 72 65 74  Cursor() may ret
19730 75 72 6e 20 69 73 20 53 51 4c 49 54 45 5f 4f 4b  urn is SQLITE_OK
19740 2e 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 72  . */.  assert( r
19750 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a  c==SQLITE_OK );.
19760 0a 20 20 2f 2a 20 53 65 74 20 74 68 65 20 56 64  .  /* Set the Vd
19770 62 65 43 75 72 73 6f 72 2e 69 73 54 61 62 6c 65  beCursor.isTable
19780 20 61 6e 64 20 69 73 49 6e 64 65 78 20 76 61 72   and isIndex var
19790 69 61 62 6c 65 73 2e 20 50 72 65 76 69 6f 75 73  iables. Previous
197a0 20 76 65 72 73 69 6f 6e 73 20 6f 66 0a 20 20 2a   versions of.  *
197b0 2a 20 53 51 4c 69 74 65 20 75 73 65 64 20 74 6f  * SQLite used to
197c0 20 63 68 65 63 6b 20 69 66 20 74 68 65 20 72 6f   check if the ro
197d0 6f 74 2d 70 61 67 65 20 66 6c 61 67 73 20 77 65  ot-page flags we
197e0 72 65 20 73 61 6e 65 20 61 74 20 74 68 69 73 20  re sane at this 
197f0 70 6f 69 6e 74 0a 20 20 2a 2a 20 61 6e 64 20 72  point.  ** and r
19800 65 70 6f 72 74 20 64 61 74 61 62 61 73 65 20 63  eport database c
19810 6f 72 72 75 70 74 69 6f 6e 20 69 66 20 74 68 65  orruption if the
19820 79 20 77 65 72 65 20 6e 6f 74 2c 20 62 75 74 20  y were not, but 
19830 74 68 69 73 20 63 68 65 63 6b 20 68 61 73 0a 20  this check has. 
19840 20 2a 2a 20 73 69 6e 63 65 20 6d 6f 76 65 64 20   ** since moved 
19850 69 6e 74 6f 20 74 68 65 20 62 74 72 65 65 20 6c  into the btree l
19860 61 79 65 72 2e 20 20 2a 2f 20 20 0a 20 20 70 43  ayer.  */  .  pC
19870 75 72 2d 3e 69 73 54 61 62 6c 65 20 3d 20 70 4f  ur->isTable = pO
19880 70 2d 3e 70 34 74 79 70 65 21 3d 50 34 5f 4b 45  p->p4type!=P4_KE
19890 59 49 4e 46 4f 3b 0a 20 20 70 43 75 72 2d 3e 69  YINFO;.  pCur->i
198a0 73 49 6e 64 65 78 20 3d 20 21 70 43 75 72 2d 3e  sIndex = !pCur->
198b0 69 73 54 61 62 6c 65 3b 0a 20 20 62 72 65 61 6b  isTable;.  break
198c0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
198d0 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 50 31  OpenEphemeral P1
198e0 20 50 32 20 2a 20 50 34 20 50 35 0a 2a 2a 0a 2a   P2 * P4 P5.**.*
198f0 2a 20 4f 70 65 6e 20 61 20 6e 65 77 20 63 75 72  * Open a new cur
19900 73 6f 72 20 50 31 20 74 6f 20 61 20 74 72 61 6e  sor P1 to a tran
19910 73 69 65 6e 74 20 74 61 62 6c 65 2e 0a 2a 2a 20  sient table..** 
19920 54 68 65 20 63 75 72 73 6f 72 20 69 73 20 61 6c  The cursor is al
19930 77 61 79 73 20 6f 70 65 6e 65 64 20 72 65 61 64  ways opened read
19940 2f 77 72 69 74 65 20 65 76 65 6e 20 69 66 20 0a  /write even if .
19950 2a 2a 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  ** the main data
19960 62 61 73 65 20 69 73 20 72 65 61 64 2d 6f 6e 6c  base is read-onl
19970 79 2e 20 20 54 68 65 20 65 70 68 65 6d 65 72 61  y.  The ephemera
19980 6c 0a 2a 2a 20 74 61 62 6c 65 20 69 73 20 64 65  l.** table is de
19990 6c 65 74 65 64 20 61 75 74 6f 6d 61 74 69 63 61  leted automatica
199a0 6c 6c 79 20 77 68 65 6e 20 74 68 65 20 63 75 72  lly when the cur
199b0 73 6f 72 20 69 73 20 63 6c 6f 73 65 64 2e 0a 2a  sor is closed..*
199c0 2a 0a 2a 2a 20 50 32 20 69 73 20 74 68 65 20 6e  *.** P2 is the n
199d0 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
199e0 20 69 6e 20 74 68 65 20 65 70 68 65 6d 65 72 61   in the ephemera
199f0 6c 20 74 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20  l table..** The 
19a00 63 75 72 73 6f 72 20 70 6f 69 6e 74 73 20 74 6f  cursor points to
19a10 20 61 20 42 54 72 65 65 20 74 61 62 6c 65 20 69   a BTree table i
19a20 66 20 50 34 3d 3d 30 20 61 6e 64 20 74 6f 20 61  f P4==0 and to a
19a30 20 42 54 72 65 65 20 69 6e 64 65 78 0a 2a 2a 20   BTree index.** 
19a40 69 66 20 50 34 20 69 73 20 6e 6f 74 20 30 2e 20  if P4 is not 0. 
19a50 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20 4e 55   If P4 is not NU
19a60 4c 4c 2c 20 69 74 20 70 6f 69 6e 74 73 20 74 6f  LL, it points to
19a70 20 61 20 4b 65 79 49 6e 66 6f 20 73 74 72 75 63   a KeyInfo struc
19a80 74 75 72 65 0a 2a 2a 20 74 68 61 74 20 64 65 66  ture.** that def
19a90 69 6e 65 73 20 74 68 65 20 66 6f 72 6d 61 74 20  ines the format 
19aa0 6f 66 20 6b 65 79 73 20 69 6e 20 74 68 65 20 69  of keys in the i
19ab0 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  ndex..**.** This
19ac0 20 6f 70 63 6f 64 65 20 77 61 73 20 6f 6e 63 65   opcode was once
19ad0 20 63 61 6c 6c 65 64 20 4f 70 65 6e 54 65 6d 70   called OpenTemp
19ae0 2e 20 20 42 75 74 20 74 68 61 74 20 63 72 65 61  .  But that crea
19af0 74 65 64 0a 2a 2a 20 63 6f 6e 66 75 73 69 6f 6e  ted.** confusion
19b00 20 62 65 63 61 75 73 65 20 74 68 65 20 74 65 72   because the ter
19b10 6d 20 22 74 65 6d 70 20 74 61 62 6c 65 22 2c 20  m "temp table", 
19b20 6d 69 67 68 74 20 72 65 66 65 72 20 65 69 74 68  might refer eith
19b30 65 72 0a 2a 2a 20 74 6f 20 61 20 54 45 4d 50 20  er.** to a TEMP 
19b40 74 61 62 6c 65 20 61 74 20 74 68 65 20 53 51 4c  table at the SQL
19b50 20 6c 65 76 65 6c 2c 20 6f 72 20 74 6f 20 61 20   level, or to a 
19b60 74 61 62 6c 65 20 6f 70 65 6e 65 64 20 62 79 0a  table opened by.
19b70 2a 2a 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 20  ** this opcode. 
19b80 20 54 68 65 6e 20 74 68 69 73 20 6f 70 63 6f 64   Then this opcod
19b90 65 20 77 61 73 20 63 61 6c 6c 20 4f 70 65 6e 56  e was call OpenV
19ba0 69 72 74 75 61 6c 2e 20 20 42 75 74 0a 2a 2a 20  irtual.  But.** 
19bb0 74 68 61 74 20 63 72 65 61 74 65 64 20 63 6f 6e  that created con
19bc0 66 75 73 69 6f 6e 20 77 69 74 68 20 74 68 65 20  fusion with the 
19bd0 77 68 6f 6c 65 20 76 69 72 74 75 61 6c 2d 74 61  whole virtual-ta
19be0 62 6c 65 20 69 64 65 61 2e 0a 2a 2a 0a 2a 2a 20  ble idea..**.** 
19bf0 54 68 65 20 50 35 20 70 61 72 61 6d 65 74 65 72  The P5 parameter
19c00 20 63 61 6e 20 62 65 20 61 20 6d 61 73 6b 20 6f   can be a mask o
19c10 66 20 74 68 65 20 42 54 52 45 45 5f 2a 20 66 6c  f the BTREE_* fl
19c20 61 67 73 20 64 65 66 69 6e 65 64 0a 2a 2a 20 69  ags defined.** i
19c30 6e 20 62 74 72 65 65 2e 68 2e 20 20 54 68 65 73  n btree.h.  Thes
19c40 65 20 66 6c 61 67 73 20 63 6f 6e 74 72 6f 6c 20  e flags control 
19c50 61 73 70 65 63 74 73 20 6f 66 20 74 68 65 20 6f  aspects of the o
19c60 70 65 72 61 74 69 6f 6e 20 6f 66 0a 2a 2a 20 74  peration of.** t
19c70 68 65 20 62 74 72 65 65 2e 20 20 54 68 65 20 42  he btree.  The B
19c80 54 52 45 45 5f 4f 4d 49 54 5f 4a 4f 55 52 4e 41  TREE_OMIT_JOURNA
19c90 4c 20 61 6e 64 20 42 54 52 45 45 5f 53 49 4e 47  L and BTREE_SING
19ca0 4c 45 20 66 6c 61 67 73 20 61 72 65 0a 2a 2a 20  LE flags are.** 
19cb0 61 64 64 65 64 20 61 75 74 6f 6d 61 74 69 63 61  added automatica
19cc0 6c 6c 79 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  lly..*/./* Opcod
19cd0 65 3a 20 4f 70 65 6e 41 75 74 6f 69 6e 64 65 78  e: OpenAutoindex
19ce0 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a   P1 P2 * P4 *.**
19cf0 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
19d00 77 6f 72 6b 73 20 74 68 65 20 73 61 6d 65 20 61  works the same a
19d10 73 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72  s OP_OpenEphemer
19d20 61 6c 2e 20 20 49 74 20 68 61 73 20 61 0a 2a 2a  al.  It has a.**
19d30 20 64 69 66 66 65 72 65 6e 74 20 6e 61 6d 65 20   different name 
19d40 74 6f 20 64 69 73 74 69 6e 67 75 69 73 68 20 69  to distinguish i
19d50 74 73 20 75 73 65 2e 20 20 54 61 62 6c 65 73 20  ts use.  Tables 
19d60 63 72 65 61 74 65 64 20 75 73 69 6e 67 0a 2a 2a  created using.**
19d70 20 62 79 20 74 68 69 73 20 6f 70 63 6f 64 65 20   by this opcode 
19d80 77 69 6c 6c 20 62 65 20 75 73 65 64 20 66 6f 72  will be used for
19d90 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63   automatically c
19da0 72 65 61 74 65 64 20 74 72 61 6e 73 69 65 6e 74  reated transient
19db0 0a 2a 2a 20 69 6e 64 69 63 65 73 20 69 6e 20 6a  .** indices in j
19dc0 6f 69 6e 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  oins..*/.case OP
19dd0 5f 4f 70 65 6e 41 75 74 6f 69 6e 64 65 78 3a 20  _OpenAutoindex: 
19de0 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 45 70 68  .case OP_OpenEph
19df0 65 6d 65 72 61 6c 3a 20 7b 0a 20 20 56 64 62 65  emeral: {.  Vdbe
19e00 43 75 72 73 6f 72 20 2a 70 43 78 3b 0a 20 20 73  Cursor *pCx;.  s
19e10 74 61 74 69 63 20 63 6f 6e 73 74 20 69 6e 74 20  tatic const int 
19e20 76 66 73 46 6c 61 67 73 20 3d 20 0a 20 20 20 20  vfsFlags = .    
19e30 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 52 45    SQLITE_OPEN_RE
19e40 41 44 57 52 49 54 45 20 7c 0a 20 20 20 20 20 20  ADWRITE |.      
19e50 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 43 52 45 41  SQLITE_OPEN_CREA
19e60 54 45 20 7c 0a 20 20 20 20 20 20 53 51 4c 49 54  TE |.      SQLIT
19e70 45 5f 4f 50 45 4e 5f 45 58 43 4c 55 53 49 56 45  E_OPEN_EXCLUSIVE
19e80 20 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f   |.      SQLITE_
19e90 4f 50 45 4e 5f 44 45 4c 45 54 45 4f 4e 43 4c 4f  OPEN_DELETEONCLO
19ea0 53 45 20 7c 0a 20 20 20 20 20 20 53 51 4c 49 54  SE |.      SQLIT
19eb0 45 5f 4f 50 45 4e 5f 54 52 41 4e 53 49 45 4e 54  E_OPEN_TRANSIENT
19ec0 5f 44 42 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  _DB;..  assert( 
19ed0 70 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20  pOp->p1>=0 );.  
19ee0 70 43 78 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75  pCx = allocateCu
19ef0 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c  rsor(p, pOp->p1,
19f00 20 70 4f 70 2d 3e 70 32 2c 20 2d 31 2c 20 31 29   pOp->p2, -1, 1)
19f10 3b 0a 20 20 69 66 28 20 70 43 78 3d 3d 30 20 29  ;.  if( pCx==0 )
19f20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
19f30 70 43 78 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31  pCx->nullRow = 1
19f40 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
19f50 42 74 72 65 65 4f 70 65 6e 28 64 62 2d 3e 70 56  BtreeOpen(db->pV
19f60 66 73 2c 20 30 2c 20 64 62 2c 20 26 70 43 78 2d  fs, 0, db, &pCx-
19f70 3e 70 42 74 2c 20 0a 20 20 20 20 20 20 20 20 20  >pBt, .         
19f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 42                 B
19f90 54 52 45 45 5f 4f 4d 49 54 5f 4a 4f 55 52 4e 41  TREE_OMIT_JOURNA
19fa0 4c 20 7c 20 42 54 52 45 45 5f 53 49 4e 47 4c 45  L | BTREE_SINGLE
19fb0 20 7c 20 70 4f 70 2d 3e 70 35 2c 20 76 66 73 46   | pOp->p5, vfsF
19fc0 6c 61 67 73 29 3b 0a 20 20 69 66 28 20 72 63 3d  lags);.  if( rc=
19fd0 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
19fe0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
19ff0 72 65 65 42 65 67 69 6e 54 72 61 6e 73 28 70 43  reeBeginTrans(pC
1a000 78 2d 3e 70 42 74 2c 20 31 29 3b 0a 20 20 7d 0a  x->pBt, 1);.  }.
1a010 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
1a020 5f 4f 4b 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66  _OK ){.    /* If
1a030 20 61 20 74 72 61 6e 73 69 65 6e 74 20 69 6e 64   a transient ind
1a040 65 78 20 69 73 20 72 65 71 75 69 72 65 64 2c 20  ex is required, 
1a050 63 72 65 61 74 65 20 69 74 20 62 79 20 63 61 6c  create it by cal
1a060 6c 69 6e 67 0a 20 20 20 20 2a 2a 20 73 71 6c 69  ling.    ** sqli
1a070 74 65 33 42 74 72 65 65 43 72 65 61 74 65 54 61  te3BtreeCreateTa
1a080 62 6c 65 28 29 20 77 69 74 68 20 74 68 65 20 42  ble() with the B
1a090 54 52 45 45 5f 42 4c 4f 42 4b 45 59 20 66 6c 61  TREE_BLOBKEY fla
1a0a0 67 20 62 65 66 6f 72 65 0a 20 20 20 20 2a 2a 20  g before.    ** 
1a0b0 6f 70 65 6e 69 6e 67 20 69 74 2e 20 49 66 20 61  opening it. If a
1a0c0 20 74 72 61 6e 73 69 65 6e 74 20 74 61 62 6c 65   transient table
1a0d0 20 69 73 20 72 65 71 75 69 72 65 64 2c 20 6a 75   is required, ju
1a0e0 73 74 20 75 73 65 20 74 68 65 0a 20 20 20 20 2a  st use the.    *
1a0f0 2a 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20  * automatically 
1a100 63 72 65 61 74 65 64 20 74 61 62 6c 65 20 77 69  created table wi
1a110 74 68 20 72 6f 6f 74 2d 70 61 67 65 20 31 20 28  th root-page 1 (
1a120 61 6e 20 42 4c 4f 42 5f 49 4e 54 4b 45 59 20 74  an BLOB_INTKEY t
1a130 61 62 6c 65 29 2e 0a 20 20 20 20 2a 2f 0a 20 20  able)..    */.  
1a140 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 2e 70 4b    if( pOp->p4.pK
1a150 65 79 49 6e 66 6f 20 29 7b 0a 20 20 20 20 20 20  eyInfo ){.      
1a160 69 6e 74 20 70 67 6e 6f 3b 0a 20 20 20 20 20 20  int pgno;.      
1a170 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
1a180 79 70 65 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f 20  ype==P4_KEYINFO 
1a190 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71  );.      rc = sq
1a1a0 6c 69 74 65 33 42 74 72 65 65 43 72 65 61 74 65  lite3BtreeCreate
1a1b0 54 61 62 6c 65 28 70 43 78 2d 3e 70 42 74 2c 20  Table(pCx->pBt, 
1a1c0 26 70 67 6e 6f 2c 20 42 54 52 45 45 5f 42 4c 4f  &pgno, BTREE_BLO
1a1d0 42 4b 45 59 20 7c 20 70 4f 70 2d 3e 70 35 29 3b  BKEY | pOp->p5);
1a1e0 20 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d   .      if( rc==
1a1f0 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
1a200 20 20 20 20 20 61 73 73 65 72 74 28 20 70 67 6e       assert( pgn
1a210 6f 3d 3d 4d 41 53 54 45 52 5f 52 4f 4f 54 2b 31  o==MASTER_ROOT+1
1a220 20 29 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d   );.        rc =
1a230 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72   sqlite3BtreeCur
1a240 73 6f 72 28 70 43 78 2d 3e 70 42 74 2c 20 70 67  sor(pCx->pBt, pg
1a250 6e 6f 2c 20 31 2c 20 0a 20 20 20 20 20 20 20 20  no, 1, .        
1a260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a270 20 20 20 20 20 20 20 20 28 4b 65 79 49 6e 66 6f          (KeyInfo
1a280 2a 29 70 4f 70 2d 3e 70 34 2e 7a 2c 20 70 43 78  *)pOp->p4.z, pCx
1a290 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20  ->pCursor);.    
1a2a0 20 20 20 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66      pCx->pKeyInf
1a2b0 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79  o = pOp->p4.pKey
1a2c0 49 6e 66 6f 3b 0a 20 20 20 20 20 20 20 20 70 43  Info;.        pC
1a2d0 78 2d 3e 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63  x->pKeyInfo->enc
1a2e0 20 3d 20 45 4e 43 28 70 2d 3e 64 62 29 3b 0a 20   = ENC(p->db);. 
1a2f0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 70 43 78       }.      pCx
1a300 2d 3e 69 73 54 61 62 6c 65 20 3d 20 30 3b 0a 20  ->isTable = 0;. 
1a310 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
1a320 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
1a330 65 43 75 72 73 6f 72 28 70 43 78 2d 3e 70 42 74  eCursor(pCx->pBt
1a340 2c 20 4d 41 53 54 45 52 5f 52 4f 4f 54 2c 20 31  , MASTER_ROOT, 1
1a350 2c 20 30 2c 20 70 43 78 2d 3e 70 43 75 72 73 6f  , 0, pCx->pCurso
1a360 72 29 3b 0a 20 20 20 20 20 20 70 43 78 2d 3e 69  r);.      pCx->i
1a370 73 54 61 62 6c 65 20 3d 20 31 3b 0a 20 20 20 20  sTable = 1;.    
1a380 7d 0a 20 20 7d 0a 20 20 70 43 78 2d 3e 69 73 4f  }.  }.  pCx->isO
1a390 72 64 65 72 65 64 20 3d 20 28 70 4f 70 2d 3e 70  rdered = (pOp->p
1a3a0 35 21 3d 42 54 52 45 45 5f 55 4e 4f 52 44 45 52  5!=BTREE_UNORDER
1a3b0 45 44 29 3b 0a 20 20 70 43 78 2d 3e 69 73 49 6e  ED);.  pCx->isIn
1a3c0 64 65 78 20 3d 20 21 70 43 78 2d 3e 69 73 54 61  dex = !pCx->isTa
1a3d0 62 6c 65 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ble;.  break;.}.
1a3e0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e  ./* Opcode: Open
1a3f0 53 6f 72 74 65 72 20 50 31 20 50 32 20 2a 20 50  Sorter P1 P2 * P
1a400 34 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  4 *.**.** This o
1a410 70 63 6f 64 65 20 77 6f 72 6b 73 20 6c 69 6b 65  pcode works like
1a420 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61   OP_OpenEphemera
1a430 6c 20 65 78 63 65 70 74 20 74 68 61 74 20 69 74  l except that it
1a440 20 6f 70 65 6e 73 0a 2a 2a 20 61 20 74 72 61 6e   opens.** a tran
1a450 73 69 65 6e 74 20 69 6e 64 65 78 20 74 68 61 74  sient index that
1a460 20 69 73 20 73 70 65 63 69 66 69 63 61 6c 6c 79   is specifically
1a470 20 64 65 73 69 67 6e 65 64 20 74 6f 20 73 6f 72   designed to sor
1a480 74 20 6c 61 72 67 65 0a 2a 2a 20 74 61 62 6c 65  t large.** table
1a490 73 20 75 73 69 6e 67 20 61 6e 20 65 78 74 65 72  s using an exter
1a4a0 6e 61 6c 20 6d 65 72 67 65 2d 73 6f 72 74 20 61  nal merge-sort a
1a4b0 6c 67 6f 72 69 74 68 6d 2e 0a 2a 2f 0a 63 61 73  lgorithm..*/.cas
1a4c0 65 20 4f 50 5f 53 6f 72 74 65 72 4f 70 65 6e 3a  e OP_SorterOpen:
1a4d0 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20   {.  VdbeCursor 
1a4e0 2a 70 43 78 3b 0a 23 69 66 6e 64 65 66 20 53 51  *pCx;.#ifndef SQ
1a4f0 4c 49 54 45 5f 4f 4d 49 54 5f 4d 45 52 47 45 5f  LITE_OMIT_MERGE_
1a500 53 4f 52 54 0a 20 20 70 43 78 20 3d 20 61 6c 6c  SORT.  pCx = all
1a510 6f 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70  ocateCursor(p, p
1a520 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 32 2c  Op->p1, pOp->p2,
1a530 20 2d 31 2c 20 31 29 3b 0a 20 20 69 66 28 20 70   -1, 1);.  if( p
1a540 43 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f  Cx==0 ) goto no_
1a550 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e 70 4b 65 79  mem;.  pCx->pKey
1a560 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70  Info = pOp->p4.p
1a570 4b 65 79 49 6e 66 6f 3b 0a 20 20 70 43 78 2d 3e  KeyInfo;.  pCx->
1a580 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63 20 3d 20  pKeyInfo->enc = 
1a590 45 4e 43 28 70 2d 3e 64 62 29 3b 0a 20 20 70 43  ENC(p->db);.  pC
1a5a0 78 2d 3e 69 73 53 6f 72 74 65 72 20 3d 20 31 3b  x->isSorter = 1;
1a5b0 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
1a5c0 64 62 65 53 6f 72 74 65 72 49 6e 69 74 28 64 62  dbeSorterInit(db
1a5d0 2c 20 70 43 78 29 3b 0a 23 65 6c 73 65 0a 20 20  , pCx);.#else.  
1a5e0 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 3d 20 4f 50  pOp->opcode = OP
1a5f0 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 3b 0a  _OpenEphemeral;.
1a600 20 20 70 63 2d 2d 3b 0a 23 65 6e 64 69 66 0a 20    pc--;.#endif. 
1a610 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
1a620 63 6f 64 65 3a 20 4f 70 65 6e 50 73 65 75 64 6f  code: OpenPseudo
1a630 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
1a640 0a 2a 2a 20 4f 70 65 6e 20 61 20 6e 65 77 20 63  .** Open a new c
1a650 75 72 73 6f 72 20 74 68 61 74 20 70 6f 69 6e 74  ursor that point
1a660 73 20 74 6f 20 61 20 66 61 6b 65 20 74 61 62 6c  s to a fake tabl
1a670 65 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20  e that contains 
1a680 61 20 73 69 6e 67 6c 65 0a 2a 2a 20 72 6f 77 20  a single.** row 
1a690 6f 66 20 64 61 74 61 2e 20 20 54 68 65 20 63 6f  of data.  The co
1a6a0 6e 74 65 6e 74 20 6f 66 20 74 68 61 74 20 6f 6e  ntent of that on
1a6b0 65 20 72 6f 77 20 69 6e 20 74 68 65 20 63 6f 6e  e row in the con
1a6c0 74 65 6e 74 20 6f 66 20 6d 65 6d 6f 72 79 0a 2a  tent of memory.*
1a6d0 2a 20 72 65 67 69 73 74 65 72 20 50 32 2e 20 20  * register P2.  
1a6e0 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
1a6f0 63 75 72 73 6f 72 20 50 31 20 62 65 63 6f 6d 65  cursor P1 become
1a700 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 74  s an alias for t
1a710 68 65 20 0a 2a 2a 20 4d 45 4d 5f 42 6c 6f 62 20  he .** MEM_Blob 
1a720 63 6f 6e 74 65 6e 74 20 63 6f 6e 74 61 69 6e 65  content containe
1a730 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  d in register P2
1a740 2e 0a 2a 2a 0a 2a 2a 20 41 20 70 73 65 75 64 6f  ..**.** A pseudo
1a750 2d 74 61 62 6c 65 20 63 72 65 61 74 65 64 20 62  -table created b
1a760 79 20 74 68 69 73 20 6f 70 63 6f 64 65 20 69 73  y this opcode is
1a770 20 75 73 65 64 20 74 6f 20 68 6f 6c 64 20 61 20   used to hold a 
1a780 73 69 6e 67 6c 65 0a 2a 2a 20 72 6f 77 20 6f 75  single.** row ou
1a790 74 70 75 74 20 66 72 6f 6d 20 74 68 65 20 73 6f  tput from the so
1a7a0 72 74 65 72 20 73 6f 20 74 68 61 74 20 74 68 65  rter so that the
1a7b0 20 72 6f 77 20 63 61 6e 20 62 65 20 64 65 63 6f   row can be deco
1a7c0 6d 70 6f 73 65 64 20 69 6e 74 6f 0a 2a 2a 20 69  mposed into.** i
1a7d0 6e 64 69 76 69 64 75 61 6c 20 63 6f 6c 75 6d 6e  ndividual column
1a7e0 73 20 75 73 69 6e 67 20 74 68 65 20 4f 50 5f 43  s using the OP_C
1a7f0 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 2e 20 20 54  olumn opcode.  T
1a800 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63  he OP_Column opc
1a810 6f 64 65 0a 2a 2a 20 69 73 20 74 68 65 20 6f 6e  ode.** is the on
1a820 6c 79 20 63 75 72 73 6f 72 20 6f 70 63 6f 64 65  ly cursor opcode
1a830 20 74 68 61 74 20 77 6f 72 6b 73 20 77 69 74 68   that works with
1a840 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e   a pseudo-table.
1a850 0a 2a 2a 0a 2a 2a 20 50 33 20 69 73 20 74 68 65  .**.** P3 is the
1a860 20 6e 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64   number of field
1a870 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 73  s in the records
1a880 20 74 68 61 74 20 77 69 6c 6c 20 62 65 20 73 74   that will be st
1a890 6f 72 65 64 20 62 79 0a 2a 2a 20 74 68 65 20 70  ored by.** the p
1a8a0 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2f 0a  seudo-table..*/.
1a8b0 63 61 73 65 20 4f 50 5f 4f 70 65 6e 50 73 65 75  case OP_OpenPseu
1a8c0 64 6f 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73  do: {.  VdbeCurs
1a8d0 6f 72 20 2a 70 43 78 3b 0a 0a 20 20 61 73 73 65  or *pCx;..  asse
1a8e0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 29  rt( pOp->p1>=0 )
1a8f0 3b 0a 20 20 70 43 78 20 3d 20 61 6c 6c 6f 63 61  ;.  pCx = alloca
1a900 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d  teCursor(p, pOp-
1a910 3e 70 31 2c 20 70 4f 70 2d 3e 70 33 2c 20 2d 31  >p1, pOp->p3, -1
1a920 2c 20 30 29 3b 0a 20 20 69 66 28 20 70 43 78 3d  , 0);.  if( pCx=
1a930 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  =0 ) goto no_mem
1a940 3b 0a 20 20 70 43 78 2d 3e 6e 75 6c 6c 52 6f 77  ;.  pCx->nullRow
1a950 20 3d 20 31 3b 0a 20 20 70 43 78 2d 3e 70 73 65   = 1;.  pCx->pse
1a960 75 64 6f 54 61 62 6c 65 52 65 67 20 3d 20 70 4f  udoTableReg = pO
1a970 70 2d 3e 70 32 3b 0a 20 20 70 43 78 2d 3e 69 73  p->p2;.  pCx->is
1a980 54 61 62 6c 65 20 3d 20 31 3b 0a 20 20 70 43 78  Table = 1;.  pCx
1a990 2d 3e 69 73 49 6e 64 65 78 20 3d 20 30 3b 0a 20  ->isIndex = 0;. 
1a9a0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
1a9b0 63 6f 64 65 3a 20 43 6c 6f 73 65 20 50 31 20 2a  code: Close P1 *
1a9c0 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 6c 6f   * * *.**.** Clo
1a9d0 73 65 20 61 20 63 75 72 73 6f 72 20 70 72 65 76  se a cursor prev
1a9e0 69 6f 75 73 6c 79 20 6f 70 65 6e 65 64 20 61 73  iously opened as
1a9f0 20 50 31 2e 20 20 49 66 20 50 31 20 69 73 20 6e   P1.  If P1 is n
1aa00 6f 74 0a 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20  ot.** currently 
1aa10 6f 70 65 6e 2c 20 74 68 69 73 20 69 6e 73 74 72  open, this instr
1aa20 75 63 74 69 6f 6e 20 69 73 20 61 20 6e 6f 2d 6f  uction is a no-o
1aa30 70 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6c  p..*/.case OP_Cl
1aa40 6f 73 65 3a 20 7b 0a 20 20 61 73 73 65 72 74 28  ose: {.  assert(
1aa50 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
1aa60 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
1aa70 72 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  r );.  sqlite3Vd
1aa80 62 65 46 72 65 65 43 75 72 73 6f 72 28 70 2c 20  beFreeCursor(p, 
1aa90 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
1aaa0 5d 29 3b 0a 20 20 70 2d 3e 61 70 43 73 72 5b 70  ]);.  p->apCsr[p
1aab0 4f 70 2d 3e 70 31 5d 20 3d 20 30 3b 0a 20 20 62  Op->p1] = 0;.  b
1aac0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
1aad0 64 65 3a 20 53 65 65 6b 47 65 20 50 31 20 50 32  de: SeekGe P1 P2
1aae0 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 49   P3 P4 *.**.** I
1aaf0 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65  f cursor P1 refe
1ab00 72 73 20 74 6f 20 61 6e 20 53 51 4c 20 74 61 62  rs to an SQL tab
1ab10 6c 65 20 28 42 2d 54 72 65 65 20 74 68 61 74 20  le (B-Tree that 
1ab20 75 73 65 73 20 69 6e 74 65 67 65 72 20 6b 65 79  uses integer key
1ab30 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65 20  s), .** use the 
1ab40 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
1ab50 72 20 50 33 20 61 73 20 74 68 65 20 6b 65 79 2e  r P3 as the key.
1ab60 20 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72    If cursor P1 r
1ab70 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20  efers .** to an 
1ab80 53 51 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e 20  SQL index, then 
1ab90 50 33 20 69 73 20 74 68 65 20 66 69 72 73 74 20  P3 is the first 
1aba0 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20 50  in an array of P
1abb0 34 20 72 65 67 69 73 74 65 72 73 20 0a 2a 2a 20  4 registers .** 
1abc0 74 68 61 74 20 61 72 65 20 75 73 65 64 20 61 73  that are used as
1abd0 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64   an unpacked ind
1abe0 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52  ex key. .**.** R
1abf0 65 70 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72  eposition cursor
1ac00 20 50 31 20 73 6f 20 74 68 61 74 20 20 69 74 20   P1 so that  it 
1ac10 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 73 6d  points to the sm
1ac20 61 6c 6c 65 73 74 20 65 6e 74 72 79 20 74 68 61  allest entry tha
1ac30 74 20 0a 2a 2a 20 69 73 20 67 72 65 61 74 65 72  t .** is greater
1ac40 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74   than or equal t
1ac50 6f 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 2e  o the key value.
1ac60 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f   If there are no
1ac70 20 72 65 63 6f 72 64 73 20 0a 2a 2a 20 67 72 65   records .** gre
1ac80 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75  ater than or equ
1ac90 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 61 6e  al to the key an
1aca0 64 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f  d P2 is not zero
1acb0 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50  , then jump to P
1acc0 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  2..**.** See als
1acd0 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75  o: Found, NotFou
1ace0 6e 64 2c 20 44 69 73 74 69 6e 63 74 2c 20 53 65  nd, Distinct, Se
1acf0 65 6b 4c 74 2c 20 53 65 65 6b 47 74 2c 20 53 65  ekLt, SeekGt, Se
1ad00 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ekLe.*/./* Opcod
1ad10 65 3a 20 53 65 65 6b 47 74 20 50 31 20 50 32 20  e: SeekGt P1 P2 
1ad20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 49 66  P3 P4 *.**.** If
1ad30 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72   cursor P1 refer
1ad40 73 20 74 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c  s to an SQL tabl
1ad50 65 20 28 42 2d 54 72 65 65 20 74 68 61 74 20 75  e (B-Tree that u
1ad60 73 65 73 20 69 6e 74 65 67 65 72 20 6b 65 79 73  ses integer keys
1ad70 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65 20 76  ), .** use the v
1ad80 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
1ad90 20 50 33 20 61 73 20 61 20 6b 65 79 2e 20 49 66   P3 as a key. If
1ada0 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72   cursor P1 refer
1adb0 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20  s .** to an SQL 
1adc0 69 6e 64 65 78 2c 20 74 68 65 6e 20 50 33 20 69  index, then P3 i
1add0 73 20 74 68 65 20 66 69 72 73 74 20 69 6e 20 61  s the first in a
1ade0 6e 20 61 72 72 61 79 20 6f 66 20 50 34 20 72 65  n array of P4 re
1adf0 67 69 73 74 65 72 73 20 0a 2a 2a 20 74 68 61 74  gisters .** that
1ae00 20 61 72 65 20 75 73 65 64 20 61 73 20 61 6e 20   are used as an 
1ae10 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b  unpacked index k
1ae20 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73  ey. .**.** Repos
1ae30 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50 31 20  ition cursor P1 
1ae40 73 6f 20 74 68 61 74 20 20 69 74 20 70 6f 69 6e  so that  it poin
1ae50 74 73 20 74 6f 20 74 68 65 20 73 6d 61 6c 6c 65  ts to the smalle
1ae60 73 74 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a  st entry that .*
1ae70 2a 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61  * is greater tha
1ae80 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 2e  n the key value.
1ae90 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f   If there are no
1aea0 20 72 65 63 6f 72 64 73 20 67 72 65 61 74 65 72   records greater
1aeb0 20 74 68 61 6e 20 0a 2a 2a 20 74 68 65 20 6b 65   than .** the ke
1aec0 79 20 61 6e 64 20 50 32 20 69 73 20 6e 6f 74 20  y and P2 is not 
1aed0 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20  zero, then jump 
1aee0 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  to P2..**.** See
1aef0 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f   also: Found, No
1af00 74 46 6f 75 6e 64 2c 20 44 69 73 74 69 6e 63 74  tFound, Distinct
1af10 2c 20 53 65 65 6b 4c 74 2c 20 53 65 65 6b 47 65  , SeekLt, SeekGe
1af20 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f  , SeekLe.*/./* O
1af30 70 63 6f 64 65 3a 20 53 65 65 6b 4c 74 20 50 31  pcode: SeekLt P1
1af40 20 50 32 20 50 33 20 50 34 20 2a 20 0a 2a 2a 0a   P2 P3 P4 * .**.
1af50 2a 2a 20 49 66 20 63 75 72 73 6f 72 20 50 31 20  ** If cursor P1 
1af60 72 65 66 65 72 73 20 74 6f 20 61 6e 20 53 51 4c  refers to an SQL
1af70 20 74 61 62 6c 65 20 28 42 2d 54 72 65 65 20 74   table (B-Tree t
1af80 68 61 74 20 75 73 65 73 20 69 6e 74 65 67 65 72  hat uses integer
1af90 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20   keys), .** use 
1afa0 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
1afb0 69 73 74 65 72 20 50 33 20 61 73 20 61 20 6b 65  ister P3 as a ke
1afc0 79 2e 20 49 66 20 63 75 72 73 6f 72 20 50 31 20  y. If cursor P1 
1afd0 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e  refers .** to an
1afe0 20 53 51 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e   SQL index, then
1aff0 20 50 33 20 69 73 20 74 68 65 20 66 69 72 73 74   P3 is the first
1b000 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20   in an array of 
1b010 50 34 20 72 65 67 69 73 74 65 72 73 20 0a 2a 2a  P4 registers .**
1b020 20 74 68 61 74 20 61 72 65 20 75 73 65 64 20 61   that are used a
1b030 73 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e  s an unpacked in
1b040 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20  dex key. .**.** 
1b050 52 65 70 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f  Reposition curso
1b060 72 20 50 31 20 73 6f 20 74 68 61 74 20 20 69 74  r P1 so that  it
1b070 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 6c   points to the l
1b080 61 72 67 65 73 74 20 65 6e 74 72 79 20 74 68 61  argest entry tha
1b090 74 20 0a 2a 2a 20 69 73 20 6c 65 73 73 20 74 68  t .** is less th
1b0a0 61 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65  an the key value
1b0b0 2e 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6e  . If there are n
1b0c0 6f 20 72 65 63 6f 72 64 73 20 6c 65 73 73 20 74  o records less t
1b0d0 68 61 6e 20 0a 2a 2a 20 74 68 65 20 6b 65 79 20  han .** the key 
1b0e0 61 6e 64 20 50 32 20 69 73 20 6e 6f 74 20 7a 65  and P2 is not ze
1b0f0 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f  ro, then jump to
1b100 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61   P2..**.** See a
1b110 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46  lso: Found, NotF
1b120 6f 75 6e 64 2c 20 44 69 73 74 69 6e 63 74 2c 20  ound, Distinct, 
1b130 53 65 65 6b 47 74 2c 20 53 65 65 6b 47 65 2c 20  SeekGt, SeekGe, 
1b140 53 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63  SeekLe.*/./* Opc
1b150 6f 64 65 3a 20 53 65 65 6b 4c 65 20 50 31 20 50  ode: SeekLe P1 P
1b160 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20  2 P3 P4 *.**.** 
1b170 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66  If cursor P1 ref
1b180 65 72 73 20 74 6f 20 61 6e 20 53 51 4c 20 74 61  ers to an SQL ta
1b190 62 6c 65 20 28 42 2d 54 72 65 65 20 74 68 61 74  ble (B-Tree that
1b1a0 20 75 73 65 73 20 69 6e 74 65 67 65 72 20 6b 65   uses integer ke
1b1b0 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65  ys), .** use the
1b1c0 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
1b1d0 65 72 20 50 33 20 61 73 20 61 20 6b 65 79 2e 20  er P3 as a key. 
1b1e0 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66  If cursor P1 ref
1b1f0 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51  ers .** to an SQ
1b200 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 50 33  L index, then P3
1b210 20 69 73 20 74 68 65 20 66 69 72 73 74 20 69 6e   is the first in
1b220 20 61 6e 20 61 72 72 61 79 20 6f 66 20 50 34 20   an array of P4 
1b230 72 65 67 69 73 74 65 72 73 20 0a 2a 2a 20 74 68  registers .** th
1b240 61 74 20 61 72 65 20 75 73 65 64 20 61 73 20 61  at are used as a
1b250 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78  n unpacked index
1b260 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70   key. .**.** Rep
1b270 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50  osition cursor P
1b280 31 20 73 6f 20 74 68 61 74 20 69 74 20 70 6f 69  1 so that it poi
1b290 6e 74 73 20 74 6f 20 74 68 65 20 6c 61 72 67 65  nts to the large
1b2a0 73 74 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a  st entry that .*
1b2b0 2a 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 6f  * is less than o
1b2c0 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b  r equal to the k
1b2d0 65 79 20 76 61 6c 75 65 2e 20 49 66 20 74 68 65  ey value. If the
1b2e0 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64  re are no record
1b2f0 73 20 0a 2a 2a 20 6c 65 73 73 20 74 68 61 6e 20  s .** less than 
1b300 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20  or equal to the 
1b310 6b 65 79 20 61 6e 64 20 50 32 20 69 73 20 6e 6f  key and P2 is no
1b320 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d  t zero, then jum
1b330 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53  p to P2..**.** S
1b340 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20  ee also: Found, 
1b350 4e 6f 74 46 6f 75 6e 64 2c 20 44 69 73 74 69 6e  NotFound, Distin
1b360 63 74 2c 20 53 65 65 6b 47 74 2c 20 53 65 65 6b  ct, SeekGt, Seek
1b370 47 65 2c 20 53 65 65 6b 4c 74 0a 2a 2f 0a 63 61  Ge, SeekLt.*/.ca
1b380 73 65 20 4f 50 5f 53 65 65 6b 4c 74 3a 20 20 20  se OP_SeekLt:   
1b390 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
1b3a0 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65  n3 */.case OP_Se
1b3b0 65 6b 4c 65 3a 20 20 20 20 20 20 20 20 20 2f 2a  ekLe:         /*
1b3c0 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61   jump, in3 */.ca
1b3d0 73 65 20 4f 50 5f 53 65 65 6b 47 65 3a 20 20 20  se OP_SeekGe:   
1b3e0 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
1b3f0 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65  n3 */.case OP_Se
1b400 65 6b 47 74 3a 20 7b 20 20 20 20 20 20 20 2f 2a  ekGt: {       /*
1b410 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20   jump, in3 */.  
1b420 69 6e 74 20 72 65 73 3b 0a 20 20 69 6e 74 20 6f  int res;.  int o
1b430 63 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  c;.  VdbeCursor 
1b440 2a 70 43 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52  *pC;.  UnpackedR
1b450 65 63 6f 72 64 20 72 3b 0a 20 20 69 6e 74 20 6e  ecord r;.  int n
1b460 46 69 65 6c 64 3b 0a 20 20 69 36 34 20 69 4b 65  Field;.  i64 iKe
1b470 79 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 72  y;      /* The r
1b480 6f 77 69 64 20 77 65 20 61 72 65 20 74 6f 20 73  owid we are to s
1b490 65 65 6b 20 74 6f 20 2a 2f 0a 0a 20 20 61 73 73  eek to */..  ass
1b4a0 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
1b4b0 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
1b4c0 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72  ursor );.  asser
1b4d0 74 28 20 70 4f 70 2d 3e 70 32 21 3d 30 20 29 3b  t( pOp->p2!=0 );
1b4e0 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
1b4f0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
1b500 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
1b510 61 73 73 65 72 74 28 20 70 43 2d 3e 70 73 65 75  assert( pC->pseu
1b520 64 6f 54 61 62 6c 65 52 65 67 3d 3d 30 20 29 3b  doTableReg==0 );
1b530 0a 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65  .  assert( OP_Se
1b540 65 6b 4c 65 20 3d 3d 20 4f 50 5f 53 65 65 6b 4c  ekLe == OP_SeekL
1b550 74 2b 31 20 29 3b 0a 20 20 61 73 73 65 72 74 28  t+1 );.  assert(
1b560 20 4f 50 5f 53 65 65 6b 47 65 20 3d 3d 20 4f 50   OP_SeekGe == OP
1b570 5f 53 65 65 6b 4c 74 2b 32 20 29 3b 0a 20 20 61  _SeekLt+2 );.  a
1b580 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 47 74  ssert( OP_SeekGt
1b590 20 3d 3d 20 4f 50 5f 53 65 65 6b 4c 74 2b 33 20   == OP_SeekLt+3 
1b5a0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
1b5b0 3e 69 73 4f 72 64 65 72 65 64 20 29 3b 0a 20 20  >isOrdered );.  
1b5c0 69 66 28 20 41 4c 57 41 59 53 28 70 43 2d 3e 70  if( ALWAYS(pC->p
1b5d0 43 75 72 73 6f 72 21 3d 30 29 20 29 7b 0a 20 20  Cursor!=0) ){.  
1b5e0 20 20 6f 63 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f    oc = pOp->opco
1b5f0 64 65 3b 0a 20 20 20 20 70 43 2d 3e 6e 75 6c 6c  de;.    pC->null
1b600 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20 69 66 28  Row = 0;.    if(
1b610 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 7b 0a   pC->isTable ){.
1b620 20 20 20 20 20 20 2f 2a 20 54 68 65 20 69 6e 70        /* The inp
1b630 75 74 20 76 61 6c 75 65 20 69 6e 20 50 33 20 6d  ut value in P3 m
1b640 69 67 68 74 20 62 65 20 6f 66 20 61 6e 79 20 74  ight be of any t
1b650 79 70 65 3a 20 69 6e 74 65 67 65 72 2c 20 72 65  ype: integer, re
1b660 61 6c 2c 20 73 74 72 69 6e 67 2c 0a 20 20 20 20  al, string,.    
1b670 20 20 2a 2a 20 62 6c 6f 62 2c 20 6f 72 20 4e 55    ** blob, or NU
1b680 4c 4c 2e 20 20 42 75 74 20 69 74 20 6e 65 65 64  LL.  But it need
1b690 73 20 74 6f 20 62 65 20 61 6e 20 69 6e 74 65 67  s to be an integ
1b6a0 65 72 20 62 65 66 6f 72 65 20 77 65 20 63 61 6e  er before we can
1b6b0 20 64 6f 0a 20 20 20 20 20 20 2a 2a 20 74 68 65   do.      ** the
1b6c0 20 73 65 65 6b 2c 20 73 6f 20 63 6f 76 65 72 74   seek, so covert
1b6d0 20 69 74 2e 20 2a 2f 0a 20 20 20 20 20 20 70 49   it. */.      pI
1b6e0 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n3 = &aMem[pOp->
1b6f0 70 33 5d 3b 0a 20 20 20 20 20 20 61 70 70 6c 79  p3];.      apply
1b700 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28  NumericAffinity(
1b710 70 49 6e 33 29 3b 0a 20 20 20 20 20 20 69 4b 65  pIn3);.      iKe
1b720 79 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49  y = sqlite3VdbeI
1b730 6e 74 56 61 6c 75 65 28 70 49 6e 33 29 3b 0a 20  ntValue(pIn3);. 
1b740 20 20 20 20 20 70 43 2d 3e 72 6f 77 69 64 49 73       pC->rowidIs
1b750 56 61 6c 69 64 20 3d 20 30 3b 0a 0a 20 20 20 20  Valid = 0;..    
1b760 20 20 2f 2a 20 49 66 20 74 68 65 20 50 33 20 76    /* If the P3 v
1b770 61 6c 75 65 20 63 6f 75 6c 64 20 6e 6f 74 20 62  alue could not b
1b780 65 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f  e converted into
1b790 20 61 6e 20 69 6e 74 65 67 65 72 20 77 69 74 68   an integer with
1b7a0 6f 75 74 0a 20 20 20 20 20 20 2a 2a 20 6c 6f 73  out.      ** los
1b7b0 73 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  s of information
1b7c0 2c 20 74 68 65 6e 20 73 70 65 63 69 61 6c 20 70  , then special p
1b7d0 72 6f 63 65 73 73 69 6e 67 20 69 73 20 72 65 71  rocessing is req
1b7e0 75 69 72 65 64 2e 2e 2e 20 2a 2f 0a 20 20 20 20  uired... */.    
1b7f0 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61    if( (pIn3->fla
1b800 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30  gs & MEM_Int)==0
1b810 20 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20   ){.        if( 
1b820 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn3->flags & M
1b830 45 4d 5f 52 65 61 6c 29 3d 3d 30 20 29 7b 0a 20  EM_Real)==0 ){. 
1b840 20 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20 74           /* If t
1b850 68 65 20 50 33 20 76 61 6c 75 65 20 63 61 6e 6e  he P3 value cann
1b860 6f 74 20 62 65 20 63 6f 6e 76 65 72 74 65 64 20  ot be converted 
1b870 69 6e 74 6f 20 61 6e 79 20 6b 69 6e 64 20 6f 66  into any kind of
1b880 20 61 20 6e 75 6d 62 65 72 2c 0a 20 20 20 20 20   a number,.     
1b890 20 20 20 20 20 2a 2a 20 74 68 65 6e 20 74 68 65       ** then the
1b8a0 20 73 65 65 6b 20 69 73 20 6e 6f 74 20 70 6f 73   seek is not pos
1b8b0 73 69 62 6c 65 2c 20 73 6f 20 6a 75 6d 70 20 74  sible, so jump t
1b8c0 6f 20 50 32 20 2a 2f 0a 20 20 20 20 20 20 20 20  o P2 */.        
1b8d0 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
1b8e0 20 31 3b 0a 20 20 20 20 20 20 20 20 20 20 62 72   1;.          br
1b8f0 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  eak;.        }. 
1b900 20 20 20 20 20 20 20 2f 2a 20 49 66 20 77 65 20         /* If we 
1b910 72 65 61 63 68 20 74 68 69 73 20 70 6f 69 6e 74  reach this point
1b920 2c 20 74 68 65 6e 20 74 68 65 20 50 33 20 76 61  , then the P3 va
1b930 6c 75 65 20 6d 75 73 74 20 62 65 20 61 20 66 6c  lue must be a fl
1b940 6f 61 74 69 6e 67 0a 20 20 20 20 20 20 20 20 2a  oating.        *
1b950 2a 20 70 6f 69 6e 74 20 6e 75 6d 62 65 72 2e 20  * point number. 
1b960 2a 2f 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  */.        asser
1b970 74 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20  t( (pIn3->flags 
1b980 26 20 4d 45 4d 5f 52 65 61 6c 29 21 3d 30 20 29  & MEM_Real)!=0 )
1b990 3b 0a 0a 20 20 20 20 20 20 20 20 69 66 28 20 69  ;..        if( i
1b9a0 4b 65 79 3d 3d 53 4d 41 4c 4c 45 53 54 5f 49 4e  Key==SMALLEST_IN
1b9b0 54 36 34 20 26 26 20 28 70 49 6e 33 2d 3e 72 3c  T64 && (pIn3->r<
1b9c0 28 64 6f 75 62 6c 65 29 69 4b 65 79 20 7c 7c 20  (double)iKey || 
1b9d0 70 49 6e 33 2d 3e 72 3e 30 29 20 29 7b 0a 20 20  pIn3->r>0) ){.  
1b9e0 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 50          /* The P
1b9f0 33 20 76 61 6c 75 65 20 69 73 20 74 6f 6f 20 6c  3 value is too l
1ba00 61 72 67 65 20 69 6e 20 6d 61 67 6e 69 74 75 64  arge in magnitud
1ba10 65 20 74 6f 20 62 65 20 65 78 70 72 65 73 73 65  e to be expresse
1ba20 64 20 61 73 20 61 6e 0a 20 20 20 20 20 20 20 20  d as an.        
1ba30 20 20 2a 2a 20 69 6e 74 65 67 65 72 2e 20 2a 2f    ** integer. */
1ba40 0a 20 20 20 20 20 20 20 20 20 20 72 65 73 20 3d  .          res =
1ba50 20 31 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66   1;.          if
1ba60 28 20 70 49 6e 33 2d 3e 72 3c 30 20 29 7b 0a 20  ( pIn3->r<0 ){. 
1ba70 20 20 20 20 20 20 20 20 20 20 20 69 66 28 20 6f             if( o
1ba80 63 3e 3d 4f 50 5f 53 65 65 6b 47 65 20 29 7b 20  c>=OP_SeekGe ){ 
1ba90 20 61 73 73 65 72 74 28 20 6f 63 3d 3d 4f 50 5f   assert( oc==OP_
1baa0 53 65 65 6b 47 65 20 7c 7c 20 6f 63 3d 3d 4f 50  SeekGe || oc==OP
1bab0 5f 53 65 65 6b 47 74 20 29 3b 0a 20 20 20 20 20  _SeekGt );.     
1bac0 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71           rc = sq
1bad0 6c 69 74 65 33 42 74 72 65 65 46 69 72 73 74 28  lite3BtreeFirst(
1bae0 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72 65  pC->pCursor, &re
1baf0 73 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  s);.            
1bb00 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
1bb10 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74  _OK ) goto abort
1bb20 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
1bb30 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20             }.   
1bb40 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20         }else{.  
1bb50 20 20 20 20 20 20 20 20 20 20 69 66 28 20 6f 63            if( oc
1bb60 3c 3d 4f 50 5f 53 65 65 6b 4c 65 20 29 7b 20 20  <=OP_SeekLe ){  
1bb70 61 73 73 65 72 74 28 20 6f 63 3d 3d 4f 50 5f 53  assert( oc==OP_S
1bb80 65 65 6b 4c 74 20 7c 7c 20 6f 63 3d 3d 4f 50 5f  eekLt || oc==OP_
1bb90 53 65 65 6b 4c 65 20 29 3b 0a 20 20 20 20 20 20  SeekLe );.      
1bba0 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c          rc = sql
1bbb0 69 74 65 33 42 74 72 65 65 4c 61 73 74 28 70 43  ite3BtreeLast(pC
1bbc0 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29  ->pCursor, &res)
1bbd0 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;.              
1bbe0 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
1bbf0 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  K ) goto abort_d
1bc00 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
1bc10 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
1bc20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
1bc30 20 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20   if( res ){.    
1bc40 20 20 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70          pc = pOp
1bc50 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 20 20  ->p2 - 1;.      
1bc60 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20      }.          
1bc70 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 7d  break;.        }
1bc80 65 6c 73 65 20 69 66 28 20 6f 63 3d 3d 4f 50 5f  else if( oc==OP_
1bc90 53 65 65 6b 4c 74 20 7c 7c 20 6f 63 3d 3d 4f 50  SeekLt || oc==OP
1bca0 5f 53 65 65 6b 47 65 20 29 7b 0a 20 20 20 20 20  _SeekGe ){.     
1bcb0 20 20 20 20 20 2f 2a 20 55 73 65 20 74 68 65 20       /* Use the 
1bcc0 63 65 69 6c 69 6e 67 28 29 20 66 75 6e 63 74 69  ceiling() functi
1bcd0 6f 6e 20 74 6f 20 63 6f 6e 76 65 72 74 20 72 65  on to convert re
1bce0 61 6c 2d 3e 69 6e 74 20 2a 2f 0a 20 20 20 20 20  al->int */.     
1bcf0 20 20 20 20 20 69 66 28 20 70 49 6e 33 2d 3e 72       if( pIn3->r
1bd00 20 3e 20 28 64 6f 75 62 6c 65 29 69 4b 65 79 20   > (double)iKey 
1bd10 29 20 69 4b 65 79 2b 2b 3b 0a 20 20 20 20 20 20  ) iKey++;.      
1bd20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
1bd30 20 20 20 2f 2a 20 55 73 65 20 74 68 65 20 66 6c     /* Use the fl
1bd40 6f 6f 72 28 29 20 66 75 6e 63 74 69 6f 6e 20 74  oor() function t
1bd50 6f 20 63 6f 6e 76 65 72 74 20 72 65 61 6c 2d 3e  o convert real->
1bd60 69 6e 74 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  int */.         
1bd70 20 61 73 73 65 72 74 28 20 6f 63 3d 3d 4f 50 5f   assert( oc==OP_
1bd80 53 65 65 6b 4c 65 20 7c 7c 20 6f 63 3d 3d 4f 50  SeekLe || oc==OP
1bd90 5f 53 65 65 6b 47 74 20 29 3b 0a 20 20 20 20 20  _SeekGt );.     
1bda0 20 20 20 20 20 69 66 28 20 70 49 6e 33 2d 3e 72       if( pIn3->r
1bdb0 20 3c 20 28 64 6f 75 62 6c 65 29 69 4b 65 79 20   < (double)iKey 
1bdc0 29 20 69 4b 65 79 2d 2d 3b 0a 20 20 20 20 20 20  ) iKey--;.      
1bdd0 20 20 7d 0a 20 20 20 20 20 20 7d 20 0a 20 20 20    }.      } .   
1bde0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
1bdf0 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b  treeMovetoUnpack
1be00 65 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20  ed(pC->pCursor, 
1be10 30 2c 20 28 75 36 34 29 69 4b 65 79 2c 20 30 2c  0, (u64)iKey, 0,
1be20 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20 69 66   &res);.      if
1be30 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
1be40 29 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20  ){.        goto 
1be50 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
1be60 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  or;.      }.    
1be70 20 20 69 66 28 20 72 65 73 3d 3d 30 20 29 7b 0a    if( res==0 ){.
1be80 20 20 20 20 20 20 20 20 70 43 2d 3e 72 6f 77 69          pC->rowi
1be90 64 49 73 56 61 6c 69 64 20 3d 20 31 3b 0a 20 20  dIsValid = 1;.  
1bea0 20 20 20 20 20 20 70 43 2d 3e 6c 61 73 74 52 6f        pC->lastRo
1beb0 77 69 64 20 3d 20 69 4b 65 79 3b 0a 20 20 20 20  wid = iKey;.    
1bec0 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20    }.    }else{. 
1bed0 20 20 20 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f       nField = pO
1bee0 70 2d 3e 70 34 2e 69 3b 0a 20 20 20 20 20 20 61  p->p4.i;.      a
1bef0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79  ssert( pOp->p4ty
1bf00 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a  pe==P4_INT32 );.
1bf10 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6e 46        assert( nF
1bf20 69 65 6c 64 3e 30 20 29 3b 0a 20 20 20 20 20 20  ield>0 );.      
1bf30 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d  r.pKeyInfo = pC-
1bf40 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 20  >pKeyInfo;.     
1bf50 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31 36   r.nField = (u16
1bf60 29 6e 46 69 65 6c 64 3b 0a 0a 20 20 20 20 20 20  )nField;..      
1bf70 2f 2a 20 54 68 65 20 6e 65 78 74 20 6c 69 6e 65  /* The next line
1bf80 20 6f 66 20 63 6f 64 65 20 63 6f 6d 70 75 74 65   of code compute
1bf90 73 20 61 73 20 66 6f 6c 6c 6f 77 73 2c 20 6f 6e  s as follows, on
1bfa0 6c 79 20 66 61 73 74 65 72 3a 0a 20 20 20 20 20  ly faster:.     
1bfb0 20 2a 2a 20 20 20 69 66 28 20 6f 63 3d 3d 4f 50   **   if( oc==OP
1bfc0 5f 53 65 65 6b 47 74 20 7c 7c 20 6f 63 3d 3d 4f  _SeekGt || oc==O
1bfd0 50 5f 53 65 65 6b 4c 65 20 29 7b 0a 20 20 20 20  P_SeekLe ){.    
1bfe0 20 20 2a 2a 20 20 20 20 20 72 2e 66 6c 61 67 73    **     r.flags
1bff0 20 3d 20 55 4e 50 41 43 4b 45 44 5f 49 4e 43 52   = UNPACKED_INCR
1c000 4b 45 59 3b 0a 20 20 20 20 20 20 2a 2a 20 20 20  KEY;.      **   
1c010 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 2a 2a 20  }else{.      ** 
1c020 20 20 20 20 72 2e 66 6c 61 67 73 20 3d 20 30 3b      r.flags = 0;
1c030 0a 20 20 20 20 20 20 2a 2a 20 20 20 7d 0a 20 20  .      **   }.  
1c040 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 72 2e 66      */.      r.f
1c050 6c 61 67 73 20 3d 20 28 75 31 36 29 28 55 4e 50  lags = (u16)(UNP
1c060 41 43 4b 45 44 5f 49 4e 43 52 4b 45 59 20 2a 20  ACKED_INCRKEY * 
1c070 28 31 20 26 20 28 6f 63 20 2d 20 4f 50 5f 53 65  (1 & (oc - OP_Se
1c080 65 6b 4c 74 29 29 29 3b 0a 20 20 20 20 20 20 61  ekLt)));.      a
1c090 73 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65  ssert( oc!=OP_Se
1c0a0 65 6b 47 74 20 7c 7c 20 72 2e 66 6c 61 67 73 3d  ekGt || r.flags=
1c0b0 3d 55 4e 50 41 43 4b 45 44 5f 49 4e 43 52 4b 45  =UNPACKED_INCRKE
1c0c0 59 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  Y );.      asser
1c0d0 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 4c 65  t( oc!=OP_SeekLe
1c0e0 20 7c 7c 20 72 2e 66 6c 61 67 73 3d 3d 55 4e 50   || r.flags==UNP
1c0f0 41 43 4b 45 44 5f 49 4e 43 52 4b 45 59 20 29 3b  ACKED_INCRKEY );
1c100 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6f  .      assert( o
1c110 63 21 3d 4f 50 5f 53 65 65 6b 47 65 20 7c 7c 20  c!=OP_SeekGe || 
1c120 72 2e 66 6c 61 67 73 3d 3d 30 20 29 3b 0a 20 20  r.flags==0 );.  
1c130 20 20 20 20 61 73 73 65 72 74 28 20 6f 63 21 3d      assert( oc!=
1c140 4f 50 5f 53 65 65 6b 4c 74 20 7c 7c 20 72 2e 66  OP_SeekLt || r.f
1c150 6c 61 67 73 3d 3d 30 20 29 3b 0a 0a 20 20 20 20  lags==0 );..    
1c160 20 20 72 2e 61 4d 65 6d 20 3d 20 26 61 4d 65 6d    r.aMem = &aMem
1c170 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 23 69 66 64 65  [pOp->p3];.#ifde
1c180 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
1c190 20 20 20 20 20 7b 20 69 6e 74 20 69 3b 20 66 6f       { int i; fo
1c1a0 72 28 69 3d 30 3b 20 69 3c 72 2e 6e 46 69 65 6c  r(i=0; i<r.nFiel
1c1b0 64 3b 20 69 2b 2b 29 20 61 73 73 65 72 74 28 20  d; i++) assert( 
1c1c0 6d 65 6d 49 73 56 61 6c 69 64 28 26 72 2e 61 4d  memIsValid(&r.aM
1c1d0 65 6d 5b 69 5d 29 20 29 3b 20 7d 0a 23 65 6e 64  em[i]) ); }.#end
1c1e0 69 66 0a 20 20 20 20 20 20 45 78 70 61 6e 64 42  if.      ExpandB
1c1f0 6c 6f 62 28 72 2e 61 4d 65 6d 29 3b 0a 20 20 20  lob(r.aMem);.   
1c200 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
1c210 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b  treeMovetoUnpack
1c220 65 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20  ed(pC->pCursor, 
1c230 26 72 2c 20 30 2c 20 30 2c 20 26 72 65 73 29 3b  &r, 0, 0, &res);
1c240 0a 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53  .      if( rc!=S
1c250 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
1c260 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
1c270 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
1c280 20 20 20 7d 0a 20 20 20 20 20 20 70 43 2d 3e 72     }.      pC->r
1c290 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b  owidIsValid = 0;
1c2a0 0a 20 20 20 20 7d 0a 20 20 20 20 70 43 2d 3e 64  .    }.    pC->d
1c2b0 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20  eferredMoveto = 
1c2c0 30 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65  0;.    pC->cache
1c2d0 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53  Status = CACHE_S
1c2e0 54 41 4c 45 3b 0a 23 69 66 64 65 66 20 53 51 4c  TALE;.#ifdef SQL
1c2f0 49 54 45 5f 54 45 53 54 0a 20 20 20 20 73 71 6c  ITE_TEST.    sql
1c300 69 74 65 33 5f 73 65 61 72 63 68 5f 63 6f 75 6e  ite3_search_coun
1c310 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20  t++;.#endif.    
1c320 69 66 28 20 6f 63 3e 3d 4f 50 5f 53 65 65 6b 47  if( oc>=OP_SeekG
1c330 65 20 29 7b 20 20 61 73 73 65 72 74 28 20 6f 63  e ){  assert( oc
1c340 3d 3d 4f 50 5f 53 65 65 6b 47 65 20 7c 7c 20 6f  ==OP_SeekGe || o
1c350 63 3d 3d 4f 50 5f 53 65 65 6b 47 74 20 29 3b 0a  c==OP_SeekGt );.
1c360 20 20 20 20 20 20 69 66 28 20 72 65 73 3c 30 20        if( res<0 
1c370 7c 7c 20 28 72 65 73 3d 3d 30 20 26 26 20 6f 63  || (res==0 && oc
1c380 3d 3d 4f 50 5f 53 65 65 6b 47 74 29 20 29 7b 0a  ==OP_SeekGt) ){.
1c390 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c          rc = sql
1c3a0 69 74 65 33 42 74 72 65 65 4e 65 78 74 28 70 43  ite3BtreeNext(pC
1c3b0 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29  ->pCursor, &res)
1c3c0 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 72 63  ;.        if( rc
1c3d0 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f  !=SQLITE_OK ) go
1c3e0 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
1c3f0 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 70  error;.        p
1c400 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20  C->rowidIsValid 
1c410 3d 20 30 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  = 0;.      }else
1c420 7b 0a 20 20 20 20 20 20 20 20 72 65 73 20 3d 20  {.        res = 
1c430 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  0;.      }.    }
1c440 65 6c 73 65 7b 0a 20 20 20 20 20 20 61 73 73 65  else{.      asse
1c450 72 74 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c  rt( oc==OP_SeekL
1c460 74 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b  t || oc==OP_Seek
1c470 4c 65 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20  Le );.      if( 
1c480 72 65 73 3e 30 20 7c 7c 20 28 72 65 73 3d 3d 30  res>0 || (res==0
1c490 20 26 26 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c   && oc==OP_SeekL
1c4a0 74 29 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63  t) ){.        rc
1c4b0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 50   = sqlite3BtreeP
1c4c0 72 65 76 69 6f 75 73 28 70 43 2d 3e 70 43 75 72  revious(pC->pCur
1c4d0 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20  sor, &res);.    
1c4e0 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
1c4f0 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f  TE_OK ) goto abo
1c500 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
1c510 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 72 6f 77  .        pC->row
1c520 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20  idIsValid = 0;. 
1c530 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
1c540 20 20 20 20 2f 2a 20 72 65 73 20 6d 69 67 68 74      /* res might
1c550 20 62 65 20 6e 65 67 61 74 69 76 65 20 62 65 63   be negative bec
1c560 61 75 73 65 20 74 68 65 20 74 61 62 6c 65 20 69  ause the table i
1c570 73 20 65 6d 70 74 79 2e 20 20 43 68 65 63 6b 20  s empty.  Check 
1c580 74 6f 0a 20 20 20 20 20 20 20 20 2a 2a 20 73 65  to.        ** se
1c590 65 20 69 66 20 74 68 69 73 20 69 73 20 74 68 65  e if this is the
1c5a0 20 63 61 73 65 2e 0a 20 20 20 20 20 20 20 20 2a   case..        *
1c5b0 2f 0a 20 20 20 20 20 20 20 20 72 65 73 20 3d 20  /.        res = 
1c5c0 73 71 6c 69 74 65 33 42 74 72 65 65 45 6f 66 28  sqlite3BtreeEof(
1c5d0 70 43 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20  pC->pCursor);.  
1c5e0 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
1c5f0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e  assert( pOp->p2>
1c600 30 20 29 3b 0a 20 20 20 20 69 66 28 20 72 65 73  0 );.    if( res
1c610 20 29 7b 0a 20 20 20 20 20 20 70 63 20 3d 20 70   ){.      pc = p
1c620 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20  Op->p2 - 1;.    
1c630 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f  }.  }else{.    /
1c640 2a 20 54 68 69 73 20 68 61 70 70 65 6e 73 20 77  * This happens w
1c650 68 65 6e 20 61 74 74 65 6d 70 74 69 6e 67 20 74  hen attempting t
1c660 6f 20 6f 70 65 6e 20 74 68 65 20 73 71 6c 69 74  o open the sqlit
1c670 65 33 5f 6d 61 73 74 65 72 20 74 61 62 6c 65 0a  e3_master table.
1c680 20 20 20 20 2a 2a 20 66 6f 72 20 72 65 61 64 20      ** for read 
1c690 61 63 63 65 73 73 20 72 65 74 75 72 6e 73 20 53  access returns S
1c6a0 51 4c 49 54 45 5f 45 4d 50 54 59 2e 20 49 6e 20  QLITE_EMPTY. In 
1c6b0 74 68 69 73 20 63 61 73 65 20 61 6c 77 61 79 73  this case always
1c6c0 0a 20 20 20 20 2a 2a 20 74 61 6b 65 20 74 68 65  .    ** take the
1c6d0 20 6a 75 6d 70 20 28 73 69 6e 63 65 20 74 68 65   jump (since the
1c6e0 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64  re are no record
1c6f0 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 29 2e  s in the table).
1c700 0a 20 20 20 20 2a 2f 0a 20 20 20 20 70 63 20 3d  .    */.    pc =
1c710 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
1c720 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
1c730 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 20 50 31   Opcode: Seek P1
1c740 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
1c750 50 31 20 69 73 20 61 6e 20 6f 70 65 6e 20 74 61  P1 is an open ta
1c760 62 6c 65 20 63 75 72 73 6f 72 20 61 6e 64 20 50  ble cursor and P
1c770 32 20 69 73 20 61 20 72 6f 77 69 64 20 69 6e 74  2 is a rowid int
1c780 65 67 65 72 2e 20 20 41 72 72 61 6e 67 65 0a 2a  eger.  Arrange.*
1c790 2a 20 66 6f 72 20 50 31 20 74 6f 20 6d 6f 76 65  * for P1 to move
1c7a0 20 73 6f 20 74 68 61 74 20 69 74 20 70 6f 69 6e   so that it poin
1c7b0 74 73 20 74 6f 20 74 68 65 20 72 6f 77 69 64 20  ts to the rowid 
1c7c0 67 69 76 65 6e 20 62 79 20 50 32 2e 0a 2a 2a 0a  given by P2..**.
1c7d0 2a 2a 20 54 68 69 73 20 69 73 20 61 63 74 75 61  ** This is actua
1c7e0 6c 6c 79 20 61 20 64 65 66 65 72 72 65 64 20 73  lly a deferred s
1c7f0 65 65 6b 2e 20 20 4e 6f 74 68 69 6e 67 20 61 63  eek.  Nothing ac
1c800 74 75 61 6c 6c 79 20 68 61 70 70 65 6e 73 20 75  tually happens u
1c810 6e 74 69 6c 0a 2a 2a 20 74 68 65 20 63 75 72 73  ntil.** the curs
1c820 6f 72 20 69 73 20 75 73 65 64 20 74 6f 20 72 65  or is used to re
1c830 61 64 20 61 20 72 65 63 6f 72 64 2e 20 20 54 68  ad a record.  Th
1c840 61 74 20 77 61 79 2c 20 69 66 20 6e 6f 20 72 65  at way, if no re
1c850 61 64 73 0a 2a 2a 20 6f 63 63 75 72 2c 20 6e 6f  ads.** occur, no
1c860 20 75 6e 6e 65 63 65 73 73 61 72 79 20 49 2f 4f   unnecessary I/O
1c870 20 68 61 70 70 65 6e 73 2e 0a 2a 2f 0a 63 61 73   happens..*/.cas
1c880 65 20 4f 50 5f 53 65 65 6b 3a 20 7b 20 20 20 20  e OP_Seek: {    
1c890 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20 56 64 62 65  /* in2 */.  Vdbe
1c8a0 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 61  Cursor *pC;..  a
1c8b0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
1c8c0 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
1c8d0 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
1c8e0 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
1c8f0 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
1c900 43 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 41 4c  C!=0 );.  if( AL
1c910 57 41 59 53 28 70 43 2d 3e 70 43 75 72 73 6f 72  WAYS(pC->pCursor
1c920 21 3d 30 29 20 29 7b 0a 20 20 20 20 61 73 73 65  !=0) ){.    asse
1c930 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20  rt( pC->isTable 
1c940 29 3b 0a 20 20 20 20 70 43 2d 3e 6e 75 6c 6c 52  );.    pC->nullR
1c950 6f 77 20 3d 20 30 3b 0a 20 20 20 20 70 49 6e 32  ow = 0;.    pIn2
1c960 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
1c970 5d 3b 0a 20 20 20 20 70 43 2d 3e 6d 6f 76 65 74  ];.    pC->movet
1c980 6f 54 61 72 67 65 74 20 3d 20 73 71 6c 69 74 65  oTarget = sqlite
1c990 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49  3VdbeIntValue(pI
1c9a0 6e 32 29 3b 0a 20 20 20 20 70 43 2d 3e 72 6f 77  n2);.    pC->row
1c9b0 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20  idIsValid = 0;. 
1c9c0 20 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d     pC->deferredM
1c9d0 6f 76 65 74 6f 20 3d 20 31 3b 0a 20 20 7d 0a 20  oveto = 1;.  }. 
1c9e0 20 62 72 65 61 6b 3b 0a 7d 0a 20 20 0a 0a 2f 2a   break;.}.  ../*
1c9f0 20 4f 70 63 6f 64 65 3a 20 46 6f 75 6e 64 20 50   Opcode: Found P
1ca00 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a  1 P2 P3 P4 *.**.
1ca10 2a 2a 20 49 66 20 50 34 3d 3d 30 20 74 68 65 6e  ** If P4==0 then
1ca20 20 72 65 67 69 73 74 65 72 20 50 33 20 68 6f 6c   register P3 hol
1ca30 64 73 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74 72  ds a blob constr
1ca40 75 63 74 65 64 20 62 79 20 4d 61 6b 65 52 65 63  ucted by MakeRec
1ca50 6f 72 64 2e 20 20 49 66 0a 2a 2a 20 50 34 3e 30  ord.  If.** P4>0
1ca60 20 74 68 65 6e 20 72 65 67 69 73 74 65 72 20 50   then register P
1ca70 33 20 69 73 20 74 68 65 20 66 69 72 73 74 20 6f  3 is the first o
1ca80 66 20 50 34 20 72 65 67 69 73 74 65 72 73 20 74  f P4 registers t
1ca90 68 61 74 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61  hat form an unpa
1caa0 63 6b 65 64 0a 2a 2a 20 72 65 63 6f 72 64 2e 0a  cked.** record..
1cab0 2a 2a 0a 2a 2a 20 43 75 72 73 6f 72 20 50 31 20  **.** Cursor P1 
1cac0 69 73 20 6f 6e 20 61 6e 20 69 6e 64 65 78 20 62  is on an index b
1cad0 74 72 65 65 2e 20 20 49 66 20 74 68 65 20 72 65  tree.  If the re
1cae0 63 6f 72 64 20 69 64 65 6e 74 69 66 69 65 64 20  cord identified 
1caf0 62 79 20 50 33 20 61 6e 64 20 50 34 0a 2a 2a 20  by P3 and P4.** 
1cb00 69 73 20 61 20 70 72 65 66 69 78 20 6f 66 20 61  is a prefix of a
1cb10 6e 79 20 65 6e 74 72 79 20 69 6e 20 50 31 20 74  ny entry in P1 t
1cb20 68 65 6e 20 61 20 6a 75 6d 70 20 69 73 20 6d 61  hen a jump is ma
1cb30 64 65 20 74 6f 20 50 32 20 61 6e 64 0a 2a 2a 20  de to P2 and.** 
1cb40 50 31 20 69 73 20 6c 65 66 74 20 70 6f 69 6e 74  P1 is left point
1cb50 69 6e 67 20 61 74 20 74 68 65 20 6d 61 74 63 68  ing at the match
1cb60 69 6e 67 20 65 6e 74 72 79 2e 0a 2a 2f 0a 2f 2a  ing entry..*/./*
1cb70 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 46 6f 75 6e   Opcode: NotFoun
1cb80 64 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a  d P1 P2 P3 P4 *.
1cb90 2a 2a 0a 2a 2a 20 49 66 20 50 34 3d 3d 30 20 74  **.** If P4==0 t
1cba0 68 65 6e 20 72 65 67 69 73 74 65 72 20 50 33 20  hen register P3 
1cbb0 68 6f 6c 64 73 20 61 20 62 6c 6f 62 20 63 6f 6e  holds a blob con
1cbc0 73 74 72 75 63 74 65 64 20 62 79 20 4d 61 6b 65  structed by Make
1cbd0 52 65 63 6f 72 64 2e 20 20 49 66 0a 2a 2a 20 50  Record.  If.** P
1cbe0 34 3e 30 20 74 68 65 6e 20 72 65 67 69 73 74 65  4>0 then registe
1cbf0 72 20 50 33 20 69 73 20 74 68 65 20 66 69 72 73  r P3 is the firs
1cc00 74 20 6f 66 20 50 34 20 72 65 67 69 73 74 65 72  t of P4 register
1cc10 73 20 74 68 61 74 20 66 6f 72 6d 20 61 6e 20 75  s that form an u
1cc20 6e 70 61 63 6b 65 64 0a 2a 2a 20 72 65 63 6f 72  npacked.** recor
1cc30 64 2e 0a 2a 2a 20 0a 2a 2a 20 43 75 72 73 6f 72  d..** .** Cursor
1cc40 20 50 31 20 69 73 20 6f 6e 20 61 6e 20 69 6e 64   P1 is on an ind
1cc50 65 78 20 62 74 72 65 65 2e 20 20 49 66 20 74 68  ex btree.  If th
1cc60 65 20 72 65 63 6f 72 64 20 69 64 65 6e 74 69 66  e record identif
1cc70 69 65 64 20 62 79 20 50 33 20 61 6e 64 20 50 34  ied by P3 and P4
1cc80 0a 2a 2a 20 69 73 20 6e 6f 74 20 74 68 65 20 70  .** is not the p
1cc90 72 65 66 69 78 20 6f 66 20 61 6e 79 20 65 6e 74  refix of any ent
1cca0 72 79 20 69 6e 20 50 31 20 74 68 65 6e 20 61 20  ry in P1 then a 
1ccb0 6a 75 6d 70 20 69 73 20 6d 61 64 65 20 74 6f 20  jump is made to 
1ccc0 50 32 2e 20 20 49 66 20 50 31 20 0a 2a 2a 20 64  P2.  If P1 .** d
1ccd0 6f 65 73 20 63 6f 6e 74 61 69 6e 20 61 6e 20 65  oes contain an e
1cce0 6e 74 72 79 20 77 68 6f 73 65 20 70 72 65 66 69  ntry whose prefi
1ccf0 78 20 6d 61 74 63 68 65 73 20 74 68 65 20 50 33  x matches the P3
1cd00 2f 50 34 20 72 65 63 6f 72 64 20 74 68 65 6e 20  /P4 record then 
1cd10 63 6f 6e 74 72 6f 6c 0a 2a 2a 20 66 61 6c 6c 73  control.** falls
1cd20 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
1cd30 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
1cd40 20 61 6e 64 20 50 31 20 69 73 20 6c 65 66 74 20   and P1 is left 
1cd50 70 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 65 0a  pointing at the.
1cd60 2a 2a 20 6d 61 74 63 68 69 6e 67 20 65 6e 74 72  ** matching entr
1cd70 79 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  y..**.** See als
1cd80 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 45 78 69  o: Found, NotExi
1cd90 73 74 73 2c 20 49 73 55 6e 69 71 75 65 0a 2a 2f  sts, IsUnique.*/
1cda0 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 46 6f 75 6e  .case OP_NotFoun
1cdb0 64 3a 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70  d:       /* jump
1cdc0 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50  , in3 */.case OP
1cdd0 5f 46 6f 75 6e 64 3a 20 7b 20 20 20 20 20 20 20  _Found: {       
1cde0 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f   /* jump, in3 */
1cdf0 0a 20 20 69 6e 74 20 61 6c 72 65 61 64 79 45 78  .  int alreadyEx
1ce00 69 73 74 73 3b 0a 20 20 56 64 62 65 43 75 72 73  ists;.  VdbeCurs
1ce10 6f 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65  or *pC;.  int re
1ce20 73 3b 0a 20 20 63 68 61 72 20 2a 70 46 72 65 65  s;.  char *pFree
1ce30 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f  ;.  UnpackedReco
1ce40 72 64 20 2a 70 49 64 78 4b 65 79 3b 0a 20 20 55  rd *pIdxKey;.  U
1ce50 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72 3b  npackedRecord r;
1ce60 0a 20 20 63 68 61 72 20 61 54 65 6d 70 52 65 63  .  char aTempRec
1ce70 5b 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28 55  [ROUND8(sizeof(U
1ce80 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 29 29 20  npackedRecord)) 
1ce90 2b 20 73 69 7a 65 6f 66 28 4d 65 6d 29 2a 33 20  + sizeof(Mem)*3 
1cea0 2b 20 37 5d 3b 0a 0a 23 69 66 64 65 66 20 53 51  + 7];..#ifdef SQ
1ceb0 4c 49 54 45 5f 54 45 53 54 0a 20 20 73 71 6c 69  LITE_TEST.  sqli
1cec0 74 65 33 5f 66 6f 75 6e 64 5f 63 6f 75 6e 74 2b  te3_found_count+
1ced0 2b 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 61 6c 72  +;.#endif..  alr
1cee0 65 61 64 79 45 78 69 73 74 73 20 3d 20 30 3b 0a  eadyExists = 0;.
1cef0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1cf00 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
1cf10 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
1cf20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
1cf30 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b  ype==P4_INT32 );
1cf40 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
1cf50 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
1cf60 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
1cf70 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn3 = &aMem[pOp
1cf80 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20 41 4c 57  ->p3];.  if( ALW
1cf90 41 59 53 28 70 43 2d 3e 70 43 75 72 73 6f 72 21  AYS(pC->pCursor!
1cfa0 3d 30 29 20 29 7b 0a 0a 20 20 20 20 61 73 73 65  =0) ){..    asse
1cfb0 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d  rt( pC->isTable=
1cfc0 3d 30 20 29 3b 0a 20 20 20 20 69 66 28 20 70 4f  =0 );.    if( pO
1cfd0 70 2d 3e 70 34 2e 69 3e 30 20 29 7b 0a 20 20 20  p->p4.i>0 ){.   
1cfe0 20 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20     r.pKeyInfo = 
1cff0 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20  pC->pKeyInfo;.  
1d000 20 20 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28      r.nField = (
1d010 75 31 36 29 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20  u16)pOp->p4.i;. 
1d020 20 20 20 20 20 72 2e 61 4d 65 6d 20 3d 20 70 49       r.aMem = pI
1d030 6e 33 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  n3;.#ifdef SQLIT
1d040 45 5f 44 45 42 55 47 0a 20 20 20 20 20 20 7b 20  E_DEBUG.      { 
1d050 69 6e 74 20 69 3b 20 66 6f 72 28 69 3d 30 3b 20  int i; for(i=0; 
1d060 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b 29  i<r.nField; i++)
1d070 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
1d080 6c 69 64 28 26 72 2e 61 4d 65 6d 5b 69 5d 29 20  lid(&r.aMem[i]) 
1d090 29 3b 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20  ); }.#endif.    
1d0a0 20 20 72 2e 66 6c 61 67 73 20 3d 20 55 4e 50 41    r.flags = UNPA
1d0b0 43 4b 45 44 5f 50 52 45 46 49 58 5f 4d 41 54 43  CKED_PREFIX_MATC
1d0c0 48 3b 0a 20 20 20 20 20 20 70 49 64 78 4b 65 79  H;.      pIdxKey
1d0d0 20 3d 20 26 72 3b 0a 20 20 20 20 7d 65 6c 73 65   = &r;.    }else
1d0e0 7b 0a 20 20 20 20 20 20 70 49 64 78 4b 65 79 20  {.      pIdxKey 
1d0f0 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 6c 6c  = sqlite3VdbeAll
1d100 6f 63 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64  ocUnpackedRecord
1d110 28 0a 20 20 20 20 20 20 20 20 20 20 70 43 2d 3e  (.          pC->
1d120 70 4b 65 79 49 6e 66 6f 2c 20 61 54 65 6d 70 52  pKeyInfo, aTempR
1d130 65 63 2c 20 73 69 7a 65 6f 66 28 61 54 65 6d 70  ec, sizeof(aTemp
1d140 52 65 63 29 2c 20 26 70 46 72 65 65 0a 20 20 20  Rec), &pFree.   
1d150 20 20 20 29 3b 20 0a 20 20 20 20 20 20 69 66 28     ); .      if(
1d160 20 70 49 64 78 4b 65 79 3d 3d 30 20 29 20 67 6f   pIdxKey==0 ) go
1d170 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 20  to no_mem;.     
1d180 20 61 73 73 65 72 74 28 20 70 49 6e 33 2d 3e 66   assert( pIn3->f
1d190 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20  lags & MEM_Blob 
1d1a0 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
1d1b0 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20   (pIn3->flags & 
1d1c0 4d 45 4d 5f 5a 65 72 6f 29 3d 3d 30 20 29 3b 20  MEM_Zero)==0 ); 
1d1d0 20 2f 2a 20 7a 65 72 6f 62 6c 6f 62 73 20 61 6c   /* zeroblobs al
1d1e0 72 65 61 64 79 20 65 78 70 61 6e 64 65 64 20 2a  ready expanded *
1d1f0 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  /.      sqlite3V
1d200 64 62 65 52 65 63 6f 72 64 55 6e 70 61 63 6b 28  dbeRecordUnpack(
1d210 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 2c 20 70 49  pC->pKeyInfo, pI
1d220 6e 33 2d 3e 6e 2c 20 70 49 6e 33 2d 3e 7a 2c 20  n3->n, pIn3->z, 
1d230 70 49 64 78 4b 65 79 29 3b 0a 20 20 20 20 20 20  pIdxKey);.      
1d240 70 49 64 78 4b 65 79 2d 3e 66 6c 61 67 73 20 7c  pIdxKey->flags |
1d250 3d 20 55 4e 50 41 43 4b 45 44 5f 50 52 45 46 49  = UNPACKED_PREFI
1d260 58 5f 4d 41 54 43 48 3b 0a 20 20 20 20 7d 0a 20  X_MATCH;.    }. 
1d270 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
1d280 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b  treeMovetoUnpack
1d290 65 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20  ed(pC->pCursor, 
1d2a0 70 49 64 78 4b 65 79 2c 20 30 2c 20 30 2c 20 26  pIdxKey, 0, 0, &
1d2b0 72 65 73 29 3b 0a 20 20 20 20 69 66 28 20 70 4f  res);.    if( pO
1d2c0 70 2d 3e 70 34 2e 69 3d 3d 30 20 29 7b 0a 20 20  p->p4.i==0 ){.  
1d2d0 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65      sqlite3DbFre
1d2e0 65 28 64 62 2c 20 70 46 72 65 65 29 3b 0a 20 20  e(db, pFree);.  
1d2f0 20 20 7d 0a 20 20 20 20 69 66 28 20 72 63 21 3d    }.    if( rc!=
1d300 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
1d310 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a     break;.    }.
1d320 20 20 20 20 61 6c 72 65 61 64 79 45 78 69 73 74      alreadyExist
1d330 73 20 3d 20 28 72 65 73 3d 3d 30 29 3b 0a 20 20  s = (res==0);.  
1d340 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f    pC->deferredMo
1d350 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20 20 70 43  veto = 0;.    pC
1d360 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
1d370 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 7d  CACHE_STALE;.  }
1d380 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f  .  if( pOp->opco
1d390 64 65 3d 3d 4f 50 5f 46 6f 75 6e 64 20 29 7b 0a  de==OP_Found ){.
1d3a0 20 20 20 20 69 66 28 20 61 6c 72 65 61 64 79 45      if( alreadyE
1d3b0 78 69 73 74 73 20 29 20 70 63 20 3d 20 70 4f 70  xists ) pc = pOp
1d3c0 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 65 6c 73  ->p2 - 1;.  }els
1d3d0 65 7b 0a 20 20 20 20 69 66 28 20 21 61 6c 72 65  e{.    if( !alre
1d3e0 61 64 79 45 78 69 73 74 73 20 29 20 70 63 20 3d  adyExists ) pc =
1d3f0 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
1d400 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
1d410 20 4f 70 63 6f 64 65 3a 20 49 73 55 6e 69 71 75   Opcode: IsUniqu
1d420 65 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a  e P1 P2 P3 P4 *.
1d430 2a 2a 0a 2a 2a 20 43 75 72 73 6f 72 20 50 31 20  **.** Cursor P1 
1d440 69 73 20 6f 70 65 6e 20 6f 6e 20 61 6e 20 69 6e  is open on an in
1d450 64 65 78 20 62 2d 74 72 65 65 20 2d 20 74 68 61  dex b-tree - tha
1d460 74 20 69 73 20 74 6f 20 73 61 79 2c 20 61 20 62  t is to say, a b
1d470 74 72 65 65 20 77 68 69 63 68 0a 2a 2a 20 6e 6f  tree which.** no
1d480 20 64 61 74 61 20 61 6e 64 20 77 68 65 72 65 20   data and where 
1d490 74 68 65 20 6b 65 79 20 61 72 65 20 72 65 63 6f  the key are reco
1d4a0 72 64 73 20 67 65 6e 65 72 61 74 65 64 20 62 79  rds generated by
1d4b0 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64 20 77   OP_MakeRecord w
1d4c0 69 74 68 0a 2a 2a 20 74 68 65 20 6c 69 73 74 20  ith.** the list 
1d4d0 66 69 65 6c 64 20 62 65 69 6e 67 20 74 68 65 20  field being the 
1d4e0 69 6e 74 65 67 65 72 20 52 4f 57 49 44 20 6f 66  integer ROWID of
1d4f0 20 74 68 65 20 65 6e 74 72 79 20 74 68 61 74 20   the entry that 
1d500 74 68 65 20 69 6e 64 65 78 0a 2a 2a 20 65 6e 74  the index.** ent
1d510 72 79 20 72 65 66 65 72 73 20 74 6f 2e 0a 2a 2a  ry refers to..**
1d520 0a 2a 2a 20 54 68 65 20 50 33 20 72 65 67 69 73  .** The P3 regis
1d530 74 65 72 20 63 6f 6e 74 61 69 6e 73 20 61 6e 20  ter contains an 
1d540 69 6e 74 65 67 65 72 20 72 65 63 6f 72 64 20 6e  integer record n
1d550 75 6d 62 65 72 2e 20 43 61 6c 6c 20 74 68 69 73  umber. Call this
1d560 20 72 65 63 6f 72 64 20 0a 2a 2a 20 6e 75 6d 62   record .** numb
1d570 65 72 20 52 2e 20 52 65 67 69 73 74 65 72 20 50  er R. Register P
1d580 34 20 69 73 20 74 68 65 20 66 69 72 73 74 20 69  4 is the first i
1d590 6e 20 61 20 73 65 74 20 6f 66 20 4e 20 63 6f 6e  n a set of N con
1d5a0 74 69 67 75 6f 75 73 20 72 65 67 69 73 74 65 72  tiguous register
1d5b0 73 0a 2a 2a 20 74 68 61 74 20 6d 61 6b 65 20 75  s.** that make u
1d5c0 70 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e  p an unpacked in
1d5d0 64 65 78 20 6b 65 79 20 74 68 61 74 20 63 61 6e  dex key that can
1d5e0 20 62 65 20 75 73 65 64 20 77 69 74 68 20 63 75   be used with cu
1d5f0 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 54 68 65 20  rsor P1..** The 
1d600 76 61 6c 75 65 20 6f 66 20 4e 20 63 61 6e 20 62  value of N can b
1d610 65 20 69 6e 66 65 72 72 65 64 20 66 72 6f 6d 20  e inferred from 
1d620 74 68 65 20 63 75 72 73 6f 72 2e 20 4e 20 69 6e  the cursor. N in
1d630 63 6c 75 64 65 73 20 74 68 65 20 72 6f 77 69 64  cludes the rowid
1d640 0a 2a 2a 20 76 61 6c 75 65 20 61 70 70 65 6e 64  .** value append
1d650 65 64 20 74 6f 20 74 68 65 20 65 6e 64 20 6f 66  ed to the end of
1d660 20 74 68 65 20 69 6e 64 65 78 20 72 65 63 6f 72   the index recor
1d670 64 2e 20 54 68 69 73 20 72 6f 77 69 64 20 76 61  d. This rowid va
1d680 6c 75 65 20 6d 61 79 0a 2a 2a 20 6f 72 20 6d 61  lue may.** or ma
1d690 79 20 6e 6f 74 20 62 65 20 74 68 65 20 73 61 6d  y not be the sam
1d6a0 65 20 61 73 20 52 2e 0a 2a 2a 0a 2a 2a 20 49 66  e as R..**.** If
1d6b0 20 61 6e 79 20 6f 66 20 74 68 65 20 4e 20 72 65   any of the N re
1d6c0 67 69 73 74 65 72 73 20 62 65 67 69 6e 6e 69 6e  gisters beginnin
1d6d0 67 20 77 69 74 68 20 72 65 67 69 73 74 65 72 20  g with register 
1d6e0 50 34 20 63 6f 6e 74 61 69 6e 73 20 61 20 4e 55  P4 contains a NU
1d6f0 4c 4c 0a 2a 2a 20 76 61 6c 75 65 2c 20 6a 75 6d  LL.** value, jum
1d700 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f  p immediately to
1d710 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 4f 74 68 65 72   P2..**.** Other
1d720 77 69 73 65 2c 20 74 68 69 73 20 69 6e 73 74 72  wise, this instr
1d730 75 63 74 69 6f 6e 20 63 68 65 63 6b 73 20 69 66  uction checks if
1d740 20 63 75 72 73 6f 72 20 50 31 20 63 6f 6e 74 61   cursor P1 conta
1d750 69 6e 73 20 61 6e 20 65 6e 74 72 79 0a 2a 2a 20  ins an entry.** 
1d760 77 68 65 72 65 20 74 68 65 20 66 69 72 73 74 20  where the first 
1d770 28 4e 2d 31 29 20 66 69 65 6c 64 73 20 6d 61 74  (N-1) fields mat
1d780 63 68 20 62 75 74 20 74 68 65 20 72 6f 77 69 64  ch but the rowid
1d790 20 76 61 6c 75 65 20 61 74 20 74 68 65 20 65 6e   value at the en
1d7a0 64 0a 2a 2a 20 6f 66 20 74 68 65 20 69 6e 64 65  d.** of the inde
1d7b0 78 20 65 6e 74 72 79 20 69 73 20 6e 6f 74 20 52  x entry is not R
1d7c0 2e 20 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f  . If there is no
1d7d0 20 73 75 63 68 20 65 6e 74 72 79 2c 20 63 6f 6e   such entry, con
1d7e0 74 72 6f 6c 20 6a 75 6d 70 73 0a 2a 2a 20 74 6f  trol jumps.** to
1d7f0 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 50 32 2e   instruction P2.
1d800 20 4f 74 68 65 72 77 69 73 65 2c 20 74 68 65 20   Otherwise, the 
1d810 72 6f 77 69 64 20 6f 66 20 74 68 65 20 63 6f 6e  rowid of the con
1d820 66 6c 69 63 74 69 6e 67 20 69 6e 64 65 78 0a 2a  flicting index.*
1d830 2a 20 65 6e 74 72 79 20 69 73 20 63 6f 70 69 65  * entry is copie
1d840 64 20 74 6f 20 72 65 67 69 73 74 65 72 20 50 33  d to register P3
1d850 20 61 6e 64 20 63 6f 6e 74 72 6f 6c 20 66 61 6c   and control fal
1d860 6c 73 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  ls through to th
1d870 65 20 6e 65 78 74 0a 2a 2a 20 69 6e 73 74 72 75  e next.** instru
1d880 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  ction..**.** See
1d890 20 61 6c 73 6f 3a 20 4e 6f 74 46 6f 75 6e 64 2c   also: NotFound,
1d8a0 20 4e 6f 74 45 78 69 73 74 73 2c 20 46 6f 75 6e   NotExists, Foun
1d8b0 64 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 73 55  d.*/.case OP_IsU
1d8c0 6e 69 71 75 65 3a 20 7b 20 20 20 20 20 20 20 20  nique: {        
1d8d0 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a  /* jump, in3 */.
1d8e0 20 20 75 31 36 20 69 69 3b 0a 20 20 56 64 62 65    u16 ii;.  Vdbe
1d8f0 43 75 72 73 6f 72 20 2a 70 43 78 3b 0a 20 20 42  Cursor *pCx;.  B
1d900 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a  tCursor *pCrsr;.
1d910 20 20 75 31 36 20 6e 46 69 65 6c 64 3b 0a 20 20    u16 nField;.  
1d920 4d 65 6d 20 2a 61 4d 78 3b 0a 20 20 55 6e 70 61  Mem *aMx;.  Unpa
1d930 63 6b 65 64 52 65 63 6f 72 64 20 72 3b 20 20 20  ckedRecord r;   
1d940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1d950 2a 20 42 2d 54 72 65 65 20 69 6e 64 65 78 20 73  * B-Tree index s
1d960 65 61 72 63 68 20 6b 65 79 20 2a 2f 0a 20 20 69  earch key */.  i
1d970 36 34 20 52 3b 20 20 20 20 20 20 20 20 20 20 20  64 R;           
1d980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d990 20 20 2f 2a 20 52 6f 77 69 64 20 73 74 6f 72 65    /* Rowid store
1d9a0 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  d in register P3
1d9b0 20 2a 2f 0a 0a 20 20 70 49 6e 33 20 3d 20 26 61   */..  pIn3 = &a
1d9c0 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
1d9d0 61 4d 78 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  aMx = &aMem[pOp-
1d9e0 3e 70 34 2e 69 5d 3b 0a 20 20 2f 2a 20 41 73 73  >p4.i];.  /* Ass
1d9f0 65 72 74 20 74 68 61 74 20 74 68 65 20 76 61 6c  ert that the val
1da00 75 65 73 20 6f 66 20 70 61 72 61 6d 65 74 65 72  ues of parameter
1da10 73 20 50 31 20 61 6e 64 20 50 34 20 61 72 65 20  s P1 and P4 are 
1da20 69 6e 20 72 61 6e 67 65 2e 20 2a 2f 0a 20 20 61  in range. */.  a
1da30 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79  ssert( pOp->p4ty
1da40 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a  pe==P4_INT32 );.
1da50 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1da60 34 2e 69 3e 30 20 26 26 20 70 4f 70 2d 3e 70 34  4.i>0 && pOp->p4
1da70 2e 69 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20  .i<=p->nMem );. 
1da80 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
1da90 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
1daa0 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 0a 20 20  ->nCursor );..  
1dab0 2f 2a 20 46 69 6e 64 20 74 68 65 20 69 6e 64 65  /* Find the inde
1dac0 78 20 63 75 72 73 6f 72 2e 20 2a 2f 0a 20 20 70  x cursor. */.  p
1dad0 43 78 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  Cx = p->apCsr[pO
1dae0 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
1daf0 28 20 70 43 78 2d 3e 64 65 66 65 72 72 65 64 4d  ( pCx->deferredM
1db00 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 70 43  oveto==0 );.  pC
1db10 78 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d 20  x->seekResult = 
1db20 30 3b 0a 20 20 70 43 78 2d 3e 63 61 63 68 65 53  0;.  pCx->cacheS
1db30 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
1db40 41 4c 45 3b 0a 20 20 70 43 72 73 72 20 3d 20 70  ALE;.  pCrsr = p
1db50 43 78 2d 3e 70 43 75 72 73 6f 72 3b 0a 0a 20 20  Cx->pCursor;..  
1db60 2f 2a 20 49 66 20 61 6e 79 20 6f 66 20 74 68 65  /* If any of the
1db70 20 76 61 6c 75 65 73 20 61 72 65 20 4e 55 4c 4c   values are NULL
1db80 2c 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 2e  , take the jump.
1db90 20 2a 2f 0a 20 20 6e 46 69 65 6c 64 20 3d 20 70   */.  nField = p
1dba0 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46  Cx->pKeyInfo->nF
1dbb0 69 65 6c 64 3b 0a 20 20 66 6f 72 28 69 69 3d 30  ield;.  for(ii=0
1dbc0 3b 20 69 69 3c 6e 46 69 65 6c 64 3b 20 69 69 2b  ; ii<nField; ii+
1dbd0 2b 29 7b 0a 20 20 20 20 69 66 28 20 61 4d 78 5b  +){.    if( aMx[
1dbe0 69 69 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  ii].flags & MEM_
1dbf0 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 20 20 70 63  Null ){.      pc
1dc00 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
1dc10 20 20 20 20 20 20 70 43 72 73 72 20 3d 20 30 3b        pCrsr = 0;
1dc20 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  .      break;.  
1dc30 20 20 7d 0a 20 20 7d 0a 20 20 61 73 73 65 72 74    }.  }.  assert
1dc40 28 20 28 61 4d 78 5b 6e 46 69 65 6c 64 5d 2e 66  ( (aMx[nField].f
1dc50 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29  lags & MEM_Null)
1dc60 3d 3d 30 20 29 3b 0a 0a 20 20 69 66 28 20 70 43  ==0 );..  if( pC
1dc70 72 73 72 21 3d 30 20 29 7b 0a 20 20 20 20 2f 2a  rsr!=0 ){.    /*
1dc80 20 50 6f 70 75 6c 61 74 65 20 74 68 65 20 69 6e   Populate the in
1dc90 64 65 78 20 73 65 61 72 63 68 20 6b 65 79 2e 20  dex search key. 
1dca0 2a 2f 0a 20 20 20 20 72 2e 70 4b 65 79 49 6e 66  */.    r.pKeyInf
1dcb0 6f 20 3d 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66  o = pCx->pKeyInf
1dcc0 6f 3b 0a 20 20 20 20 72 2e 6e 46 69 65 6c 64 20  o;.    r.nField 
1dcd0 3d 20 6e 46 69 65 6c 64 20 2b 20 31 3b 0a 20 20  = nField + 1;.  
1dce0 20 20 72 2e 66 6c 61 67 73 20 3d 20 55 4e 50 41    r.flags = UNPA
1dcf0 43 4b 45 44 5f 50 52 45 46 49 58 5f 53 45 41 52  CKED_PREFIX_SEAR
1dd00 43 48 3b 0a 20 20 20 20 72 2e 61 4d 65 6d 20 3d  CH;.    r.aMem =
1dd10 20 61 4d 78 3b 0a 23 69 66 64 65 66 20 53 51 4c   aMx;.#ifdef SQL
1dd20 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20 7b 20  ITE_DEBUG.    { 
1dd30 69 6e 74 20 69 3b 20 66 6f 72 28 69 3d 30 3b 20  int i; for(i=0; 
1dd40 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b 29  i<r.nField; i++)
1dd50 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
1dd60 6c 69 64 28 26 72 2e 61 4d 65 6d 5b 69 5d 29 20  lid(&r.aMem[i]) 
1dd70 29 3b 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 20  ); }.#endif..   
1dd80 20 2f 2a 20 45 78 74 72 61 63 74 20 74 68 65 20   /* Extract the 
1dd90 76 61 6c 75 65 20 6f 66 20 52 20 66 72 6f 6d 20  value of R from 
1dda0 72 65 67 69 73 74 65 72 20 50 33 2e 20 2a 2f 0a  register P3. */.
1ddb0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
1ddc0 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e  emIntegerify(pIn
1ddd0 33 29 3b 0a 20 20 20 20 52 20 3d 20 70 49 6e 33  3);.    R = pIn3
1dde0 2d 3e 75 2e 69 3b 0a 0a 20 20 20 20 2f 2a 20 53  ->u.i;..    /* S
1ddf0 65 61 72 63 68 20 74 68 65 20 42 2d 54 72 65 65  earch the B-Tree
1de00 20 69 6e 64 65 78 2e 20 49 66 20 6e 6f 20 63 6f   index. If no co
1de10 6e 66 6c 69 63 74 69 6e 67 20 72 65 63 6f 72 64  nflicting record
1de20 20 69 73 20 66 6f 75 6e 64 2c 20 6a 75 6d 70 0a   is found, jump.
1de30 20 20 20 20 2a 2a 20 74 6f 20 50 32 2e 20 4f 74      ** to P2. Ot
1de40 68 65 72 77 69 73 65 2c 20 63 6f 70 79 20 74 68  herwise, copy th
1de50 65 20 72 6f 77 69 64 20 6f 66 20 74 68 65 20 63  e rowid of the c
1de60 6f 6e 66 6c 69 63 74 69 6e 67 20 72 65 63 6f 72  onflicting recor
1de70 64 20 74 6f 0a 20 20 20 20 2a 2a 20 72 65 67 69  d to.    ** regi
1de80 73 74 65 72 20 50 33 20 61 6e 64 20 66 61 6c 6c  ster P3 and fall
1de90 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
1dea0 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
1deb0 2e 20 20 2a 2f 0a 20 20 20 20 72 63 20 3d 20 73  .  */.    rc = s
1dec0 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74  qlite3BtreeMovet
1ded0 6f 55 6e 70 61 63 6b 65 64 28 70 43 72 73 72 2c  oUnpacked(pCrsr,
1dee0 20 26 72 2c 20 30 2c 20 30 2c 20 26 70 43 78 2d   &r, 0, 0, &pCx-
1def0 3e 73 65 65 6b 52 65 73 75 6c 74 29 3b 0a 20 20  >seekResult);.  
1df00 20 20 69 66 28 20 28 72 2e 66 6c 61 67 73 20 26    if( (r.flags &
1df10 20 55 4e 50 41 43 4b 45 44 5f 50 52 45 46 49 58   UNPACKED_PREFIX
1df20 5f 53 45 41 52 43 48 29 20 7c 7c 20 72 2e 72 6f  _SEARCH) || r.ro
1df30 77 69 64 3d 3d 52 20 29 7b 0a 20 20 20 20 20 20  wid==R ){.      
1df40 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
1df50 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
1df60 20 20 20 70 49 6e 33 2d 3e 75 2e 69 20 3d 20 72     pIn3->u.i = r
1df70 2e 72 6f 77 69 64 3b 0a 20 20 20 20 7d 0a 20 20  .rowid;.    }.  
1df80 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
1df90 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 45 78 69 73   Opcode: NotExis
1dfa0 74 73 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ts P1 P2 P3 * *.
1dfb0 2a 2a 0a 2a 2a 20 55 73 65 20 74 68 65 20 63 6f  **.** Use the co
1dfc0 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65  ntent of registe
1dfd0 72 20 50 33 20 61 73 20 61 6e 20 69 6e 74 65 67  r P3 as an integ
1dfe0 65 72 20 6b 65 79 2e 20 20 49 66 20 61 20 72 65  er key.  If a re
1dff0 63 6f 72 64 20 0a 2a 2a 20 77 69 74 68 20 74 68  cord .** with th
1e000 61 74 20 6b 65 79 20 64 6f 65 73 20 6e 6f 74 20  at key does not 
1e010 65 78 69 73 74 20 69 6e 20 74 61 62 6c 65 20 6f  exist in table o
1e020 66 20 50 31 2c 20 74 68 65 6e 20 6a 75 6d 70 20  f P1, then jump 
1e030 74 6f 20 50 32 2e 20 0a 2a 2a 20 49 66 20 74 68  to P2. .** If th
1e040 65 20 72 65 63 6f 72 64 20 64 6f 65 73 20 65 78  e record does ex
1e050 69 73 74 2c 20 74 68 65 6e 20 66 61 6c 6c 20 74  ist, then fall t
1e060 68 72 6f 75 67 68 2e 20 20 54 68 65 20 63 75 72  hrough.  The cur
1e070 73 6f 72 20 69 73 20 6c 65 66 74 20 0a 2a 2a 20  sor is left .** 
1e080 70 6f 69 6e 74 69 6e 67 20 74 6f 20 74 68 65 20  pointing to the 
1e090 72 65 63 6f 72 64 20 69 66 20 69 74 20 65 78 69  record if it exi
1e0a0 73 74 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 64  sts..**.** The d
1e0b0 69 66 66 65 72 65 6e 63 65 20 62 65 74 77 65 65  ifference betwee
1e0c0 6e 20 74 68 69 73 20 6f 70 65 72 61 74 69 6f 6e  n this operation
1e0d0 20 61 6e 64 20 4e 6f 74 46 6f 75 6e 64 20 69 73   and NotFound is
1e0e0 20 74 68 61 74 20 74 68 69 73 0a 2a 2a 20 6f 70   that this.** op
1e0f0 65 72 61 74 69 6f 6e 20 61 73 73 75 6d 65 73 20  eration assumes 
1e100 74 68 65 20 6b 65 79 20 69 73 20 61 6e 20 69 6e  the key is an in
1e110 74 65 67 65 72 20 61 6e 64 20 74 68 61 74 20 50  teger and that P
1e120 31 20 69 73 20 61 20 74 61 62 6c 65 20 77 68 65  1 is a table whe
1e130 72 65 61 73 0a 2a 2a 20 4e 6f 74 46 6f 75 6e 64  reas.** NotFound
1e140 20 61 73 73 75 6d 65 73 20 6b 65 79 20 69 73 20   assumes key is 
1e150 61 20 62 6c 6f 62 20 63 6f 6e 73 74 72 75 63 74  a blob construct
1e160 65 64 20 66 72 6f 6d 20 4d 61 6b 65 52 65 63 6f  ed from MakeReco
1e170 72 64 20 61 6e 64 0a 2a 2a 20 50 31 20 69 73 20  rd and.** P1 is 
1e180 61 6e 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20  an index..**.** 
1e190 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c  See also: Found,
1e1a0 20 4e 6f 74 46 6f 75 6e 64 2c 20 49 73 55 6e 69   NotFound, IsUni
1e1b0 71 75 65 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e  que.*/.case OP_N
1e1c0 6f 74 45 78 69 73 74 73 3a 20 7b 20 20 20 20 20  otExists: {     
1e1d0 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20     /* jump, in3 
1e1e0 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  */.  VdbeCursor 
1e1f0 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20  *pC;.  BtCursor 
1e200 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65  *pCrsr;.  int re
1e210 73 3b 0a 20 20 75 36 34 20 69 4b 65 79 3b 0a 0a  s;.  u64 iKey;..
1e220 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70    pIn3 = &aMem[p
1e230 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72  Op->p3];.  asser
1e240 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26  t( pIn3->flags &
1e250 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 61 73   MEM_Int );.  as
1e260 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
1e270 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
1e280 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
1e290 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
1e2a0 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
1e2b0 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
1e2c0 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a   pC->isTable );.
1e2d0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 73    assert( pC->ps
1e2e0 65 75 64 6f 54 61 62 6c 65 52 65 67 3d 3d 30 20  eudoTableReg==0 
1e2f0 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d  );.  pCrsr = pC-
1e300 3e 70 43 75 72 73 6f 72 3b 0a 20 20 69 66 28 20  >pCursor;.  if( 
1e310 41 4c 57 41 59 53 28 70 43 72 73 72 21 3d 30 29  ALWAYS(pCrsr!=0)
1e320 20 29 7b 0a 20 20 20 20 72 65 73 20 3d 20 30 3b   ){.    res = 0;
1e330 0a 20 20 20 20 69 4b 65 79 20 3d 20 70 49 6e 33  .    iKey = pIn3
1e340 2d 3e 75 2e 69 3b 0a 20 20 20 20 72 63 20 3d 20  ->u.i;.    rc = 
1e350 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65  sqlite3BtreeMove
1e360 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 72 73 72  toUnpacked(pCrsr
1e370 2c 20 30 2c 20 69 4b 65 79 2c 20 30 2c 20 26 72  , 0, iKey, 0, &r
1e380 65 73 29 3b 0a 20 20 20 20 70 43 2d 3e 6c 61 73  es);.    pC->las
1e390 74 52 6f 77 69 64 20 3d 20 70 49 6e 33 2d 3e 75  tRowid = pIn3->u
1e3a0 2e 69 3b 0a 20 20 20 20 70 43 2d 3e 72 6f 77 69  .i;.    pC->rowi
1e3b0 64 49 73 56 61 6c 69 64 20 3d 20 72 65 73 3d 3d  dIsValid = res==
1e3c0 30 20 3f 31 3a 30 3b 0a 20 20 20 20 70 43 2d 3e  0 ?1:0;.    pC->
1e3d0 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 20  nullRow = 0;.   
1e3e0 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
1e3f0 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a   = CACHE_STALE;.
1e400 20 20 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64      pC->deferred
1e410 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20 20  Moveto = 0;.    
1e420 69 66 28 20 72 65 73 21 3d 30 20 29 7b 0a 20 20  if( res!=0 ){.  
1e430 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
1e440 20 2d 20 31 3b 0a 20 20 20 20 20 20 61 73 73 65   - 1;.      asse
1e450 72 74 28 20 70 43 2d 3e 72 6f 77 69 64 49 73 56  rt( pC->rowidIsV
1e460 61 6c 69 64 3d 3d 30 20 29 3b 0a 20 20 20 20 7d  alid==0 );.    }
1e470 0a 20 20 20 20 70 43 2d 3e 73 65 65 6b 52 65 73  .    pC->seekRes
1e480 75 6c 74 20 3d 20 72 65 73 3b 0a 20 20 7d 65 6c  ult = res;.  }el
1e490 73 65 7b 0a 20 20 20 20 2f 2a 20 54 68 69 73 20  se{.    /* This 
1e4a0 68 61 70 70 65 6e 73 20 77 68 65 6e 20 61 6e 20  happens when an 
1e4b0 61 74 74 65 6d 70 74 20 74 6f 20 6f 70 65 6e 20  attempt to open 
1e4c0 61 20 72 65 61 64 20 63 75 72 73 6f 72 20 6f 6e  a read cursor on
1e4d0 20 74 68 65 20 0a 20 20 20 20 2a 2a 20 73 71 6c   the .    ** sql
1e4e0 69 74 65 5f 6d 61 73 74 65 72 20 74 61 62 6c 65  ite_master table
1e4f0 20 72 65 74 75 72 6e 73 20 53 51 4c 49 54 45 5f   returns SQLITE_
1e500 45 4d 50 54 59 2e 0a 20 20 20 20 2a 2f 0a 20 20  EMPTY..    */.  
1e510 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
1e520 20 31 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   1;.    assert( 
1e530 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64  pC->rowidIsValid
1e540 3d 3d 30 20 29 3b 0a 20 20 20 20 70 43 2d 3e 73  ==0 );.    pC->s
1e550 65 65 6b 52 65 73 75 6c 74 20 3d 20 30 3b 0a 20  eekResult = 0;. 
1e560 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
1e570 2a 20 4f 70 63 6f 64 65 3a 20 53 65 71 75 65 6e  * Opcode: Sequen
1e580 63 65 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  ce P1 P2 * * *.*
1e590 2a 0a 2a 2a 20 46 69 6e 64 20 74 68 65 20 6e 65  *.** Find the ne
1e5a0 78 74 20 61 76 61 69 6c 61 62 6c 65 20 73 65 71  xt available seq
1e5b0 75 65 6e 63 65 20 6e 75 6d 62 65 72 20 66 6f 72  uence number for
1e5c0 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 57   cursor P1..** W
1e5d0 72 69 74 65 20 74 68 65 20 73 65 71 75 65 6e 63  rite the sequenc
1e5e0 65 20 6e 75 6d 62 65 72 20 69 6e 74 6f 20 72 65  e number into re
1e5f0 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 20 54 68  gister P2..** Th
1e600 65 20 73 65 71 75 65 6e 63 65 20 6e 75 6d 62 65  e sequence numbe
1e610 72 20 6f 6e 20 74 68 65 20 63 75 72 73 6f 72 20  r on the cursor 
1e620 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 61  is incremented a
1e630 66 74 65 72 20 74 68 69 73 0a 2a 2a 20 69 6e 73  fter this.** ins
1e640 74 72 75 63 74 69 6f 6e 2e 20 20 0a 2a 2f 0a 63  truction.  .*/.c
1e650 61 73 65 20 4f 50 5f 53 65 71 75 65 6e 63 65 3a  ase OP_Sequence:
1e660 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20   {           /* 
1e670 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20  out2-prerelease 
1e680 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  */.  assert( pOp
1e690 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
1e6a0 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
1e6b0 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 61 70  .  assert( p->ap
1e6c0 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 21 3d 30 20  Csr[pOp->p1]!=0 
1e6d0 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  );.  pOut->u.i =
1e6e0 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
1e6f0 31 5d 2d 3e 73 65 71 43 6f 75 6e 74 2b 2b 3b 0a  1]->seqCount++;.
1e700 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20    break;.}.../* 
1e710 4f 70 63 6f 64 65 3a 20 4e 65 77 52 6f 77 69 64  Opcode: NewRowid
1e720 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
1e730 0a 2a 2a 20 47 65 74 20 61 20 6e 65 77 20 69 6e  .** Get a new in
1e740 74 65 67 65 72 20 72 65 63 6f 72 64 20 6e 75 6d  teger record num
1e750 62 65 72 20 28 61 2e 6b 2e 61 20 22 72 6f 77 69  ber (a.k.a "rowi
1e760 64 22 29 20 75 73 65 64 20 61 73 20 74 68 65 20  d") used as the 
1e770 6b 65 79 20 74 6f 20 61 20 74 61 62 6c 65 2e 0a  key to a table..
1e780 2a 2a 20 54 68 65 20 72 65 63 6f 72 64 20 6e 75  ** The record nu
1e790 6d 62 65 72 20 69 73 20 6e 6f 74 20 70 72 65 76  mber is not prev
1e7a0 69 6f 75 73 6c 79 20 75 73 65 64 20 61 73 20 61  iously used as a
1e7b0 20 6b 65 79 20 69 6e 20 74 68 65 20 64 61 74 61   key in the data
1e7c0 62 61 73 65 0a 2a 2a 20 74 61 62 6c 65 20 74 68  base.** table th
1e7d0 61 74 20 63 75 72 73 6f 72 20 50 31 20 70 6f 69  at cursor P1 poi
1e7e0 6e 74 73 20 74 6f 2e 20 20 54 68 65 20 6e 65 77  nts to.  The new
1e7f0 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 20 69   record number i
1e800 73 20 77 72 69 74 74 65 6e 0a 2a 2a 20 77 72 69  s written.** wri
1e810 74 74 65 6e 20 74 6f 20 72 65 67 69 73 74 65 72  tten to register
1e820 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 33   P2..**.** If P3
1e830 3e 30 20 74 68 65 6e 20 50 33 20 69 73 20 61 20  >0 then P3 is a 
1e840 72 65 67 69 73 74 65 72 20 69 6e 20 74 68 65 20  register in the 
1e850 72 6f 6f 74 20 66 72 61 6d 65 20 6f 66 20 74 68  root frame of th
1e860 69 73 20 56 44 42 45 20 74 68 61 74 20 68 6f 6c  is VDBE that hol
1e870 64 73 20 0a 2a 2a 20 74 68 65 20 6c 61 72 67 65  ds .** the large
1e880 73 74 20 70 72 65 76 69 6f 75 73 6c 79 20 67 65  st previously ge
1e890 6e 65 72 61 74 65 64 20 72 65 63 6f 72 64 20 6e  nerated record n
1e8a0 75 6d 62 65 72 2e 20 4e 6f 20 6e 65 77 20 72 65  umber. No new re
1e8b0 63 6f 72 64 20 6e 75 6d 62 65 72 73 20 61 72 65  cord numbers are
1e8c0 0a 2a 2a 20 61 6c 6c 6f 77 65 64 20 74 6f 20 62  .** allowed to b
1e8d0 65 20 6c 65 73 73 20 74 68 61 6e 20 74 68 69 73  e less than this
1e8e0 20 76 61 6c 75 65 2e 20 57 68 65 6e 20 74 68 69   value. When thi
1e8f0 73 20 76 61 6c 75 65 20 72 65 61 63 68 65 73 20  s value reaches 
1e900 69 74 73 20 6d 61 78 69 6d 75 6d 2c 20 0a 2a 2a  its maximum, .**
1e910 20 61 6e 20 53 51 4c 49 54 45 5f 46 55 4c 4c 20   an SQLITE_FULL 
1e920 65 72 72 6f 72 20 69 73 20 67 65 6e 65 72 61 74  error is generat
1e930 65 64 2e 20 54 68 65 20 50 33 20 72 65 67 69 73  ed. The P3 regis
1e940 74 65 72 20 69 73 20 75 70 64 61 74 65 64 20 77  ter is updated w
1e950 69 74 68 20 74 68 65 20 27 0a 2a 2a 20 67 65 6e  ith the '.** gen
1e960 65 72 61 74 65 64 20 72 65 63 6f 72 64 20 6e 75  erated record nu
1e970 6d 62 65 72 2e 20 54 68 69 73 20 50 33 20 6d 65  mber. This P3 me
1e980 63 68 61 6e 69 73 6d 20 69 73 20 75 73 65 64 20  chanism is used 
1e990 74 6f 20 68 65 6c 70 20 69 6d 70 6c 65 6d 65 6e  to help implemen
1e9a0 74 20 74 68 65 0a 2a 2a 20 41 55 54 4f 49 4e 43  t the.** AUTOINC
1e9b0 52 45 4d 45 4e 54 20 66 65 61 74 75 72 65 2e 0a  REMENT feature..
1e9c0 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 77 52 6f  */.case OP_NewRo
1e9d0 77 69 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20  wid: {          
1e9e0 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65   /* out2-prerele
1e9f0 61 73 65 20 2a 2f 0a 20 20 69 36 34 20 76 3b 20  ase */.  i64 v; 
1ea00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ea10 2f 2a 20 54 68 65 20 6e 65 77 20 72 6f 77 69 64  /* The new rowid
1ea20 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72   */.  VdbeCursor
1ea30 20 2a 70 43 3b 20 20 20 20 20 20 20 20 2f 2a 20   *pC;        /* 
1ea40 43 75 72 73 6f 72 20 6f 66 20 74 61 62 6c 65 20  Cursor of table 
1ea50 74 6f 20 67 65 74 20 74 68 65 20 6e 65 77 20 72  to get the new r
1ea60 6f 77 69 64 20 2a 2f 0a 20 20 69 6e 74 20 72 65  owid */.  int re
1ea70 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s;              
1ea80 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20 61 6e   /* Result of an
1ea90 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73   sqlite3BtreeLas
1eaa0 74 28 29 20 2a 2f 0a 20 20 69 6e 74 20 63 6e 74  t() */.  int cnt
1eab0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1eac0 2f 2a 20 43 6f 75 6e 74 65 72 20 74 6f 20 6c 69  /* Counter to li
1ead0 6d 69 74 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  mit the number o
1eae0 66 20 73 65 61 72 63 68 65 73 20 2a 2f 0a 20 20  f searches */.  
1eaf0 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20 20 20 20 20  Mem *pMem;      
1eb00 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74         /* Regist
1eb10 65 72 20 68 6f 6c 64 69 6e 67 20 6c 61 72 67 65  er holding large
1eb20 73 74 20 72 6f 77 69 64 20 66 6f 72 20 41 55 54  st rowid for AUT
1eb30 4f 49 4e 43 52 45 4d 45 4e 54 20 2a 2f 0a 20 20  OINCREMENT */.  
1eb40 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d  VdbeFrame *pFram
1eb50 65 3b 20 20 20 20 20 2f 2a 20 52 6f 6f 74 20 66  e;     /* Root f
1eb60 72 61 6d 65 20 6f 66 20 56 44 42 45 20 2a 2f 0a  rame of VDBE */.
1eb70 0a 20 20 76 20 3d 20 30 3b 0a 20 20 72 65 73 20  .  v = 0;.  res 
1eb80 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70  = 0;.  assert( p
1eb90 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
1eba0 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
1ebb0 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
1ebc0 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
1ebd0 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
1ebe0 20 20 69 66 28 20 4e 45 56 45 52 28 70 43 2d 3e    if( NEVER(pC->
1ebf0 70 43 75 72 73 6f 72 3d 3d 30 29 20 29 7b 0a 20  pCursor==0) ){. 
1ec00 20 20 20 2f 2a 20 54 68 65 20 7a 65 72 6f 20 69     /* The zero i
1ec10 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 61 62  nitialization ab
1ec20 6f 76 65 20 69 73 20 61 6c 6c 20 74 68 61 74 20  ove is all that 
1ec30 69 73 20 6e 65 65 64 65 64 20 2a 2f 0a 20 20 7d  is needed */.  }
1ec40 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 54 68 65  else{.    /* The
1ec50 20 6e 65 78 74 20 72 6f 77 69 64 20 6f 72 20 72   next rowid or r
1ec60 65 63 6f 72 64 20 6e 75 6d 62 65 72 20 28 64 69  ecord number (di
1ec70 66 66 65 72 65 6e 74 20 74 65 72 6d 73 20 66 6f  fferent terms fo
1ec80 72 20 74 68 65 20 73 61 6d 65 0a 20 20 20 20 2a  r the same.    *
1ec90 2a 20 74 68 69 6e 67 29 20 69 73 20 6f 62 74 61  * thing) is obta
1eca0 69 6e 65 64 20 69 6e 20 61 20 74 77 6f 2d 73 74  ined in a two-st
1ecb0 65 70 20 61 6c 67 6f 72 69 74 68 6d 2e 0a 20 20  ep algorithm..  
1ecc0 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 46 69 72 73    **.    ** Firs
1ecd0 74 20 77 65 20 61 74 74 65 6d 70 74 20 74 6f 20  t we attempt to 
1ece0 66 69 6e 64 20 74 68 65 20 6c 61 72 67 65 73 74  find the largest
1ecf0 20 65 78 69 73 74 69 6e 67 20 72 6f 77 69 64 20   existing rowid 
1ed00 61 6e 64 20 61 64 64 20 6f 6e 65 0a 20 20 20 20  and add one.    
1ed10 2a 2a 20 74 6f 20 74 68 61 74 2e 20 20 42 75 74  ** to that.  But
1ed20 20 69 66 20 74 68 65 20 6c 61 72 67 65 73 74 20   if the largest 
1ed30 65 78 69 73 74 69 6e 67 20 72 6f 77 69 64 20 69  existing rowid i
1ed40 73 20 61 6c 72 65 61 64 79 20 74 68 65 20 6d 61  s already the ma
1ed50 78 69 6d 75 6d 0a 20 20 20 20 2a 2a 20 70 6f 73  ximum.    ** pos
1ed60 69 74 69 76 65 20 69 6e 74 65 67 65 72 2c 20 77  itive integer, w
1ed70 65 20 68 61 76 65 20 74 6f 20 66 61 6c 6c 20 74  e have to fall t
1ed80 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 73 65  hrough to the se
1ed90 63 6f 6e 64 0a 20 20 20 20 2a 2a 20 70 72 6f 62  cond.    ** prob
1eda0 61 62 69 6c 69 73 74 69 63 20 61 6c 67 6f 72 69  abilistic algori
1edb0 74 68 6d 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a  thm.    **.    *
1edc0 2a 20 54 68 65 20 73 65 63 6f 6e 64 20 61 6c 67  * The second alg
1edd0 6f 72 69 74 68 6d 20 69 73 20 74 6f 20 73 65 6c  orithm is to sel
1ede0 65 63 74 20 61 20 72 6f 77 69 64 20 61 74 20 72  ect a rowid at r
1edf0 61 6e 64 6f 6d 20 61 6e 64 20 73 65 65 20 69 66  andom and see if
1ee00 0a 20 20 20 20 2a 2a 20 69 74 20 61 6c 72 65 61  .    ** it alrea
1ee10 64 79 20 65 78 69 73 74 73 20 69 6e 20 74 68 65  dy exists in the
1ee20 20 74 61 62 6c 65 2e 20 20 49 66 20 69 74 20 64   table.  If it d
1ee30 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 2c 20 77  oes not exist, w
1ee40 65 20 68 61 76 65 0a 20 20 20 20 2a 2a 20 73 75  e have.    ** su
1ee50 63 63 65 65 64 65 64 2e 20 20 49 66 20 74 68 65  cceeded.  If the
1ee60 20 72 61 6e 64 6f 6d 20 72 6f 77 69 64 20 64 6f   random rowid do
1ee70 65 73 20 65 78 69 73 74 2c 20 77 65 20 73 65 6c  es exist, we sel
1ee80 65 63 74 20 61 20 6e 65 77 20 6f 6e 65 0a 20 20  ect a new one.  
1ee90 20 20 2a 2a 20 61 6e 64 20 74 72 79 20 61 67 61    ** and try aga
1eea0 69 6e 2c 20 75 70 20 74 6f 20 31 30 30 20 74 69  in, up to 100 ti
1eeb0 6d 65 73 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  mes..    */.    
1eec0 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61  assert( pC->isTa
1eed0 62 6c 65 20 29 3b 0a 0a 23 69 66 64 65 66 20 53  ble );..#ifdef S
1eee0 51 4c 49 54 45 5f 33 32 42 49 54 5f 52 4f 57 49  QLITE_32BIT_ROWI
1eef0 44 0a 23 20 20 20 64 65 66 69 6e 65 20 4d 41 58  D.#   define MAX
1ef00 5f 52 4f 57 49 44 20 30 78 37 66 66 66 66 66 66  _ROWID 0x7ffffff
1ef10 66 0a 23 65 6c 73 65 0a 20 20 20 20 2f 2a 20 53  f.#else.    /* S
1ef20 6f 6d 65 20 63 6f 6d 70 69 6c 65 72 73 20 63 6f  ome compilers co
1ef30 6d 70 6c 61 69 6e 20 61 62 6f 75 74 20 63 6f 6e  mplain about con
1ef40 73 74 61 6e 74 73 20 6f 66 20 74 68 65 20 66 6f  stants of the fo
1ef50 72 6d 20 30 78 37 66 66 66 66 66 66 66 66 66 66  rm 0x7ffffffffff
1ef60 66 66 66 66 66 2e 0a 20 20 20 20 2a 2a 20 4f 74  fffff..    ** Ot
1ef70 68 65 72 73 20 63 6f 6d 70 6c 61 69 6e 20 61 62  hers complain ab
1ef80 6f 75 74 20 30 78 37 66 66 66 66 66 66 66 66 66  out 0x7fffffffff
1ef90 66 66 66 66 66 66 66 4c 4c 2e 20 20 54 68 65 20  fffffffLL.  The 
1efa0 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 20  following macro 
1efb0 73 65 65 6d 73 0a 20 20 20 20 2a 2a 20 74 6f 20  seems.    ** to 
1efc0 70 72 6f 76 69 64 65 20 74 68 65 20 63 6f 6e 73  provide the cons
1efd0 74 61 6e 74 20 77 68 69 6c 65 20 6d 61 6b 69 6e  tant while makin
1efe0 67 20 61 6c 6c 20 63 6f 6d 70 69 6c 65 72 73 20  g all compilers 
1eff0 68 61 70 70 79 2e 0a 20 20 20 20 2a 2f 0a 23 20  happy..    */.# 
1f000 20 20 64 65 66 69 6e 65 20 4d 41 58 5f 52 4f 57    define MAX_ROW
1f010 49 44 20 20 28 69 36 34 29 28 20 28 28 28 75 36  ID  (i64)( (((u6
1f020 34 29 30 78 37 66 66 66 66 66 66 66 29 3c 3c 33  4)0x7fffffff)<<3
1f030 32 29 20 7c 20 28 75 36 34 29 30 78 66 66 66 66  2) | (u64)0xffff
1f040 66 66 66 66 20 29 0a 23 65 6e 64 69 66 0a 0a 20  ffff ).#endif.. 
1f050 20 20 20 69 66 28 20 21 70 43 2d 3e 75 73 65 52     if( !pC->useR
1f060 61 6e 64 6f 6d 52 6f 77 69 64 20 29 7b 0a 20 20  andomRowid ){.  
1f070 20 20 20 20 76 20 3d 20 73 71 6c 69 74 65 33 42      v = sqlite3B
1f080 74 72 65 65 47 65 74 43 61 63 68 65 64 52 6f 77  treeGetCachedRow
1f090 69 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 29 3b  id(pC->pCursor);
1f0a0 0a 20 20 20 20 20 20 69 66 28 20 76 3d 3d 30 20  .      if( v==0 
1f0b0 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  ){.        rc = 
1f0c0 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74  sqlite3BtreeLast
1f0d0 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72  (pC->pCursor, &r
1f0e0 65 73 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28  es);.        if(
1f0f0 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
1f100 7b 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f  {.          goto
1f110 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
1f120 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  ror;.        }. 
1f130 20 20 20 20 20 20 20 69 66 28 20 72 65 73 20 29         if( res )
1f140 7b 0a 20 20 20 20 20 20 20 20 20 20 76 20 3d 20  {.          v = 
1f150 31 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 36  1;   /* IMP: R-6
1f160 31 39 31 34 2d 34 38 30 37 34 20 2a 2f 0a 20 20  1914-48074 */.  
1f170 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
1f180 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73         assert( s
1f190 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f  qlite3BtreeCurso
1f1a0 72 49 73 56 61 6c 69 64 28 70 43 2d 3e 70 43 75  rIsValid(pC->pCu
1f1b0 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 20  rsor) );.       
1f1c0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
1f1d0 74 72 65 65 4b 65 79 53 69 7a 65 28 70 43 2d 3e  treeKeySize(pC->
1f1e0 70 43 75 72 73 6f 72 2c 20 26 76 29 3b 0a 20 20  pCursor, &v);.  
1f1f0 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
1f200 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b  rc==SQLITE_OK );
1f210 20 20 20 2f 2a 20 43 61 6e 6e 6f 74 20 66 61 69     /* Cannot fai
1f220 6c 20 66 6f 6c 6c 6f 77 69 6e 67 20 42 74 72 65  l following Btre
1f230 65 4c 61 73 74 28 29 20 2a 2f 0a 20 20 20 20 20  eLast() */.     
1f240 20 20 20 20 20 69 66 28 20 76 3d 3d 4d 41 58 5f       if( v==MAX_
1f250 52 4f 57 49 44 20 29 7b 0a 20 20 20 20 20 20 20  ROWID ){.       
1f260 20 20 20 20 20 70 43 2d 3e 75 73 65 52 61 6e 64       pC->useRand
1f270 6f 6d 52 6f 77 69 64 20 3d 20 31 3b 0a 20 20 20  omRowid = 1;.   
1f280 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20         }else{.  
1f290 20 20 20 20 20 20 20 20 20 20 76 2b 2b 3b 20 20            v++;  
1f2a0 20 2f 2a 20 49 4d 50 3a 20 52 2d 32 39 35 33 38   /* IMP: R-29538
1f2b0 2d 33 34 39 38 37 20 2a 2f 0a 20 20 20 20 20 20  -34987 */.      
1f2c0 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a      }.        }.
1f2d0 20 20 20 20 20 20 7d 0a 0a 23 69 66 6e 64 65 66        }..#ifndef
1f2e0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54   SQLITE_OMIT_AUT
1f2f0 4f 49 4e 43 52 45 4d 45 4e 54 0a 20 20 20 20 20  OINCREMENT.     
1f300 20 69 66 28 20 70 4f 70 2d 3e 70 33 20 29 7b 0a   if( pOp->p3 ){.
1f310 20 20 20 20 20 20 20 20 2f 2a 20 41 73 73 65 72          /* Asser
1f320 74 20 74 68 61 74 20 50 33 20 69 73 20 61 20 76  t that P3 is a v
1f330 61 6c 69 64 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  alid memory cell
1f340 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 61 73 73  . */.        ass
1f350 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29  ert( pOp->p3>0 )
1f360 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 2d  ;.        if( p-
1f370 3e 70 46 72 61 6d 65 20 29 7b 0a 20 20 20 20 20  >pFrame ){.     
1f380 20 20 20 20 20 66 6f 72 28 70 46 72 61 6d 65 3d       for(pFrame=
1f390 70 2d 3e 70 46 72 61 6d 65 3b 20 70 46 72 61 6d  p->pFrame; pFram
1f3a0 65 2d 3e 70 50 61 72 65 6e 74 3b 20 70 46 72 61  e->pParent; pFra
1f3b0 6d 65 3d 70 46 72 61 6d 65 2d 3e 70 50 61 72 65  me=pFrame->pPare
1f3c0 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20 2f  nt);.          /
1f3d0 2a 20 41 73 73 65 72 74 20 74 68 61 74 20 50 33  * Assert that P3
1f3e0 20 69 73 20 61 20 76 61 6c 69 64 20 6d 65 6d 6f   is a valid memo
1f3f0 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20  ry cell. */.    
1f400 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
1f410 70 2d 3e 70 33 3c 3d 70 46 72 61 6d 65 2d 3e 6e  p->p3<=pFrame->n
1f420 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20 20 20 20  Mem );.         
1f430 20 70 4d 65 6d 20 3d 20 26 70 46 72 61 6d 65 2d   pMem = &pFrame-
1f440 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  >aMem[pOp->p3];.
1f450 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20          }else{. 
1f460 20 20 20 20 20 20 20 20 20 2f 2a 20 41 73 73 65           /* Asse
1f470 72 74 20 74 68 61 74 20 50 33 20 69 73 20 61 20  rt that P3 is a 
1f480 76 61 6c 69 64 20 6d 65 6d 6f 72 79 20 63 65 6c  valid memory cel
1f490 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  l. */.          
1f4a0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c  assert( pOp->p3<
1f4b0 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20  =p->nMem );.    
1f4c0 20 20 20 20 20 20 70 4d 65 6d 20 3d 20 26 61 4d        pMem = &aM
1f4d0 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20  em[pOp->p3];.   
1f4e0 20 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74 54         memAboutT
1f4f0 6f 43 68 61 6e 67 65 28 70 2c 20 70 4d 65 6d 29  oChange(p, pMem)
1f500 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
1f510 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
1f520 73 56 61 6c 69 64 28 70 4d 65 6d 29 20 29 3b 0a  sValid(pMem) );.
1f530 0a 20 20 20 20 20 20 20 20 52 45 47 49 53 54 45  .        REGISTE
1f540 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c  R_TRACE(pOp->p3,
1f550 20 70 4d 65 6d 29 3b 0a 20 20 20 20 20 20 20 20   pMem);.        
1f560 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e  sqlite3VdbeMemIn
1f570 74 65 67 65 72 69 66 79 28 70 4d 65 6d 29 3b 0a  tegerify(pMem);.
1f580 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
1f590 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 4d  (pMem->flags & M
1f5a0 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 20 20 2f  EM_Int)!=0 );  /
1f5b0 2a 20 6d 65 6d 28 50 33 29 20 68 6f 6c 64 73 20  * mem(P3) holds 
1f5c0 61 6e 20 69 6e 74 65 67 65 72 20 2a 2f 0a 20 20  an integer */.  
1f5d0 20 20 20 20 20 20 69 66 28 20 70 4d 65 6d 2d 3e        if( pMem->
1f5e0 75 2e 69 3d 3d 4d 41 58 5f 52 4f 57 49 44 20 7c  u.i==MAX_ROWID |
1f5f0 7c 20 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52  | pC->useRandomR
1f600 6f 77 69 64 20 29 7b 0a 20 20 20 20 20 20 20 20  owid ){.        
1f610 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 46 55    rc = SQLITE_FU
1f620 4c 4c 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d  LL;   /* IMP: R-
1f630 31 32 32 37 35 2d 36 31 33 33 38 20 2a 2f 0a 20  12275-61338 */. 
1f640 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62           goto ab
1f650 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
1f660 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
1f670 20 20 20 20 69 66 28 20 76 3c 70 4d 65 6d 2d 3e      if( v<pMem->
1f680 75 2e 69 2b 31 20 29 7b 0a 20 20 20 20 20 20 20  u.i+1 ){.       
1f690 20 20 20 76 20 3d 20 70 4d 65 6d 2d 3e 75 2e 69     v = pMem->u.i
1f6a0 20 2b 20 31 3b 0a 20 20 20 20 20 20 20 20 7d 0a   + 1;.        }.
1f6b0 20 20 20 20 20 20 20 20 70 4d 65 6d 2d 3e 75 2e          pMem->u.
1f6c0 69 20 3d 20 76 3b 0a 20 20 20 20 20 20 7d 0a 23  i = v;.      }.#
1f6d0 65 6e 64 69 66 0a 0a 20 20 20 20 20 20 73 71 6c  endif..      sql
1f6e0 69 74 65 33 42 74 72 65 65 53 65 74 43 61 63 68  ite3BtreeSetCach
1f6f0 65 64 52 6f 77 69 64 28 70 43 2d 3e 70 43 75 72  edRowid(pC->pCur
1f700 73 6f 72 2c 20 76 3c 4d 41 58 5f 52 4f 57 49 44  sor, v<MAX_ROWID
1f710 20 3f 20 76 2b 31 20 3a 20 30 29 3b 0a 20 20 20   ? v+1 : 0);.   
1f720 20 7d 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 75   }.    if( pC->u
1f730 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20 29 7b  seRandomRowid ){
1f740 0a 20 20 20 20 20 20 2f 2a 20 49 4d 50 4c 45 4d  .      /* IMPLEM
1f750 45 4e 54 41 54 49 4f 4e 2d 4f 46 3a 20 52 2d 30  ENTATION-OF: R-0
1f760 37 36 37 37 2d 34 31 38 38 31 20 49 66 20 74 68  7677-41881 If th
1f770 65 20 6c 61 72 67 65 73 74 20 52 4f 57 49 44 20  e largest ROWID 
1f780 69 73 20 65 71 75 61 6c 20 74 6f 20 74 68 65 0a  is equal to the.
1f790 20 20 20 20 20 20 2a 2a 20 6c 61 72 67 65 73 74        ** largest
1f7a0 20 70 6f 73 73 69 62 6c 65 20 69 6e 74 65 67 65   possible intege
1f7b0 72 20 28 39 32 32 33 33 37 32 30 33 36 38 35 34  r (9223372036854
1f7c0 37 37 35 38 30 37 29 20 74 68 65 6e 20 74 68 65  775807) then the
1f7d0 20 64 61 74 61 62 61 73 65 0a 20 20 20 20 20 20   database.      
1f7e0 2a 2a 20 65 6e 67 69 6e 65 20 73 74 61 72 74 73  ** engine starts
1f7f0 20 70 69 63 6b 69 6e 67 20 70 6f 73 69 74 69 76   picking positiv
1f800 65 20 63 61 6e 64 69 64 61 74 65 20 52 4f 57 49  e candidate ROWI
1f810 44 73 20 61 74 20 72 61 6e 64 6f 6d 20 75 6e 74  Ds at random unt
1f820 69 6c 0a 20 20 20 20 20 20 2a 2a 20 69 74 20 66  il.      ** it f
1f830 69 6e 64 73 20 6f 6e 65 20 74 68 61 74 20 69 73  inds one that is
1f840 20 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c 79 20   not previously 
1f850 75 73 65 64 2e 20 2a 2f 0a 20 20 20 20 20 20 61  used. */.      a
1f860 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3d 3d  ssert( pOp->p3==
1f870 30 20 29 3b 20 20 2f 2a 20 57 65 20 63 61 6e 6e  0 );  /* We cann
1f880 6f 74 20 62 65 20 69 6e 20 72 61 6e 64 6f 6d 20  ot be in random 
1f890 72 6f 77 69 64 20 6d 6f 64 65 20 69 66 20 74 68  rowid mode if th
1f8a0 69 73 20 69 73 0a 20 20 20 20 20 20 20 20 20 20  is is.          
1f8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f8c0 20 20 20 2a 2a 20 61 6e 20 41 55 54 4f 49 4e 43     ** an AUTOINC
1f8d0 52 45 4d 45 4e 54 20 74 61 62 6c 65 2e 20 2a 2f  REMENT table. */
1f8e0 0a 20 20 20 20 20 20 2f 2a 20 6f 6e 20 74 68 65  .      /* on the
1f8f0 20 66 69 72 73 74 20 61 74 74 65 6d 70 74 2c 20   first attempt, 
1f900 73 69 6d 70 6c 79 20 64 6f 20 6f 6e 65 20 6d 6f  simply do one mo
1f910 72 65 20 74 68 61 6e 20 70 72 65 76 69 6f 75 73  re than previous
1f920 20 2a 2f 0a 20 20 20 20 20 20 76 20 3d 20 6c 61   */.      v = la
1f930 73 74 52 6f 77 69 64 3b 0a 20 20 20 20 20 20 76  stRowid;.      v
1f940 20 26 3d 20 28 4d 41 58 5f 52 4f 57 49 44 3e 3e   &= (MAX_ROWID>>
1f950 31 29 3b 20 2f 2a 20 65 6e 73 75 72 65 20 64 6f  1); /* ensure do
1f960 65 73 6e 27 74 20 67 6f 20 6e 65 67 61 74 69 76  esn't go negativ
1f970 65 20 2a 2f 0a 20 20 20 20 20 20 76 2b 2b 3b 20  e */.      v++; 
1f980 2f 2a 20 65 6e 73 75 72 65 20 6e 6f 6e 2d 7a 65  /* ensure non-ze
1f990 72 6f 20 2a 2f 0a 20 20 20 20 20 20 63 6e 74 20  ro */.      cnt 
1f9a0 3d 20 30 3b 0a 20 20 20 20 20 20 77 68 69 6c 65  = 0;.      while
1f9b0 28 20 20 20 28 28 72 63 20 3d 20 73 71 6c 69 74  (   ((rc = sqlit
1f9c0 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70  e3BtreeMovetoUnp
1f9d0 61 63 6b 65 64 28 70 43 2d 3e 70 43 75 72 73 6f  acked(pC->pCurso
1f9e0 72 2c 20 30 2c 20 28 75 36 34 29 76 2c 0a 20 20  r, 0, (u64)v,.  
1f9f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fa00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fa10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 30                 0
1fa20 2c 20 26 72 65 73 29 29 3d 3d 53 51 4c 49 54 45  , &res))==SQLITE
1fa30 5f 4f 4b 29 0a 20 20 20 20 20 20 20 20 20 20 20  _OK).           
1fa40 20 26 26 20 28 72 65 73 3d 3d 30 29 0a 20 20 20   && (res==0).   
1fa50 20 20 20 20 20 20 20 20 20 26 26 20 28 2b 2b 63           && (++c
1fa60 6e 74 3c 31 30 30 29 29 7b 0a 20 20 20 20 20 20  nt<100)){.      
1fa70 20 20 2f 2a 20 63 6f 6c 6c 69 73 69 6f 6e 20 2d    /* collision -
1fa80 20 74 72 79 20 61 6e 6f 74 68 65 72 20 72 61 6e   try another ran
1fa90 64 6f 6d 20 72 6f 77 69 64 20 2a 2f 0a 20 20 20  dom rowid */.   
1faa0 20 20 20 20 20 73 71 6c 69 74 65 33 5f 72 61 6e       sqlite3_ran
1fab0 64 6f 6d 6e 65 73 73 28 73 69 7a 65 6f 66 28 76  domness(sizeof(v
1fac0 29 2c 20 26 76 29 3b 0a 20 20 20 20 20 20 20 20  ), &v);.        
1fad0 69 66 28 20 63 6e 74 3c 35 20 29 7b 0a 20 20 20  if( cnt<5 ){.   
1fae0 20 20 20 20 20 20 20 2f 2a 20 74 72 79 20 22 73         /* try "s
1faf0 6d 61 6c 6c 22 20 72 61 6e 64 6f 6d 20 72 6f 77  mall" random row
1fb00 69 64 73 20 66 6f 72 20 74 68 65 20 69 6e 69 74  ids for the init
1fb10 69 61 6c 20 61 74 74 65 6d 70 74 73 20 2a 2f 0a  ial attempts */.
1fb20 20 20 20 20 20 20 20 20 20 20 76 20 26 3d 20 30            v &= 0
1fb30 78 66 66 66 66 66 66 3b 0a 20 20 20 20 20 20 20  xffffff;.       
1fb40 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
1fb50 20 20 76 20 26 3d 20 28 4d 41 58 5f 52 4f 57 49    v &= (MAX_ROWI
1fb60 44 3e 3e 31 29 3b 20 2f 2a 20 65 6e 73 75 72 65  D>>1); /* ensure
1fb70 20 64 6f 65 73 6e 27 74 20 67 6f 20 6e 65 67 61   doesn't go nega
1fb80 74 69 76 65 20 2a 2f 0a 20 20 20 20 20 20 20 20  tive */.        
1fb90 7d 0a 20 20 20 20 20 20 20 20 76 2b 2b 3b 20 2f  }.        v++; /
1fba0 2a 20 65 6e 73 75 72 65 20 6e 6f 6e 2d 7a 65 72  * ensure non-zer
1fbb0 6f 20 2a 2f 0a 20 20 20 20 20 20 7d 0a 20 20 20  o */.      }.   
1fbc0 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54     if( rc==SQLIT
1fbd0 45 5f 4f 4b 20 26 26 20 72 65 73 3d 3d 30 20 29  E_OK && res==0 )
1fbe0 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 53  {.        rc = S
1fbf0 51 4c 49 54 45 5f 46 55 4c 4c 3b 20 20 20 2f 2a  QLITE_FULL;   /*
1fc00 20 49 4d 50 3a 20 52 2d 33 38 32 31 39 2d 35 33   IMP: R-38219-53
1fc10 30 30 32 20 2a 2f 0a 20 20 20 20 20 20 20 20 67  002 */.        g
1fc20 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
1fc30 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a  _error;.      }.
1fc40 20 20 20 20 20 20 61 73 73 65 72 74 28 20 76 3e        assert( v>
1fc50 30 20 29 3b 20 20 2f 2a 20 45 56 3a 20 52 2d 34  0 );  /* EV: R-4
1fc60 30 38 31 32 2d 30 33 35 37 30 20 2a 2f 0a 20 20  0812-03570 */.  
1fc70 20 20 7d 0a 20 20 20 20 70 43 2d 3e 72 6f 77 69    }.    pC->rowi
1fc80 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20  dIsValid = 0;.  
1fc90 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f    pC->deferredMo
1fca0 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20 20 70 43  veto = 0;.    pC
1fcb0 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
1fcc0 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 7d  CACHE_STALE;.  }
1fcd0 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 76  .  pOut->u.i = v
1fce0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
1fcf0 20 4f 70 63 6f 64 65 3a 20 49 6e 73 65 72 74 20   Opcode: Insert 
1fd00 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
1fd10 2a 0a 2a 2a 20 57 72 69 74 65 20 61 6e 20 65 6e  *.** Write an en
1fd20 74 72 79 20 69 6e 74 6f 20 74 68 65 20 74 61 62  try into the tab
1fd30 6c 65 20 6f 66 20 63 75 72 73 6f 72 20 50 31 2e  le of cursor P1.
1fd40 20 20 41 20 6e 65 77 20 65 6e 74 72 79 20 69 73    A new entry is
1fd50 0a 2a 2a 20 63 72 65 61 74 65 64 20 69 66 20 69  .** created if i
1fd60 74 20 64 6f 65 73 6e 27 74 20 61 6c 72 65 61 64  t doesn't alread
1fd70 79 20 65 78 69 73 74 20 6f 72 20 74 68 65 20 64  y exist or the d
1fd80 61 74 61 20 66 6f 72 20 61 6e 20 65 78 69 73 74  ata for an exist
1fd90 69 6e 67 0a 2a 2a 20 65 6e 74 72 79 20 69 73 20  ing.** entry is 
1fda0 6f 76 65 72 77 72 69 74 74 65 6e 2e 20 20 54 68  overwritten.  Th
1fdb0 65 20 64 61 74 61 20 69 73 20 74 68 65 20 76 61  e data is the va
1fdc0 6c 75 65 20 4d 45 4d 5f 42 6c 6f 62 20 73 74 6f  lue MEM_Blob sto
1fdd0 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 0a  red in register.
1fde0 2a 2a 20 6e 75 6d 62 65 72 20 50 32 2e 20 54 68  ** number P2. Th
1fdf0 65 20 6b 65 79 20 69 73 20 73 74 6f 72 65 64 20  e key is stored 
1fe00 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 20  in register P3. 
1fe10 54 68 65 20 6b 65 79 20 6d 75 73 74 0a 2a 2a 20  The key must.** 
1fe20 62 65 20 61 20 4d 45 4d 5f 49 6e 74 2e 0a 2a 2a  be a MEM_Int..**
1fe30 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41  .** If the OPFLA
1fe40 47 5f 4e 43 48 41 4e 47 45 20 66 6c 61 67 20 6f  G_NCHANGE flag o
1fe50 66 20 50 35 20 69 73 20 73 65 74 2c 20 74 68 65  f P5 is set, the
1fe60 6e 20 74 68 65 20 72 6f 77 20 63 68 61 6e 67 65  n the row change
1fe70 20 63 6f 75 6e 74 20 69 73 0a 2a 2a 20 69 6e 63   count is.** inc
1fe80 72 65 6d 65 6e 74 65 64 20 28 6f 74 68 65 72 77  remented (otherw
1fe90 69 73 65 20 6e 6f 74 29 2e 20 20 49 66 20 74 68  ise not).  If th
1fea0 65 20 4f 50 46 4c 41 47 5f 4c 41 53 54 52 4f 57  e OPFLAG_LASTROW
1feb0 49 44 20 66 6c 61 67 20 6f 66 20 50 35 20 69 73  ID flag of P5 is
1fec0 20 73 65 74 2c 0a 2a 2a 20 74 68 65 6e 20 72 6f   set,.** then ro
1fed0 77 69 64 20 69 73 20 73 74 6f 72 65 64 20 66 6f  wid is stored fo
1fee0 72 20 73 75 62 73 65 71 75 65 6e 74 20 72 65 74  r subsequent ret
1fef0 75 72 6e 20 62 79 20 74 68 65 0a 2a 2a 20 73 71  urn by the.** sq
1ff00 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e 73 65 72  lite3_last_inser
1ff10 74 5f 72 6f 77 69 64 28 29 20 66 75 6e 63 74 69  t_rowid() functi
1ff20 6f 6e 20 28 6f 74 68 65 72 77 69 73 65 20 69 74  on (otherwise it
1ff30 20 69 73 20 75 6e 6d 6f 64 69 66 69 65 64 29 2e   is unmodified).
1ff40 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50  .**.** If the OP
1ff50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55  FLAG_USESEEKRESU
1ff60 4c 54 20 66 6c 61 67 20 6f 66 20 50 35 20 69 73  LT flag of P5 is
1ff70 20 73 65 74 20 61 6e 64 20 69 66 20 74 68 65 20   set and if the 
1ff80 72 65 73 75 6c 74 20 6f 66 0a 2a 2a 20 74 68 65  result of.** the
1ff90 20 6c 61 73 74 20 73 65 65 6b 20 6f 70 65 72 61   last seek opera
1ffa0 74 69 6f 6e 20 28 4f 50 5f 4e 6f 74 45 78 69 73  tion (OP_NotExis
1ffb0 74 73 29 20 77 61 73 20 61 20 73 75 63 63 65 73  ts) was a succes
1ffc0 73 2c 20 74 68 65 6e 20 74 68 69 73 0a 2a 2a 20  s, then this.** 
1ffd0 6f 70 65 72 61 74 69 6f 6e 20 77 69 6c 6c 20 6e  operation will n
1ffe0 6f 74 20 61 74 74 65 6d 70 74 20 74 6f 20 66 69  ot attempt to fi
1fff0 6e 64 20 74 68 65 20 61 70 70 72 6f 70 72 69 61  nd the appropria
20000 74 65 20 72 6f 77 20 62 65 66 6f 72 65 20 64 6f  te row before do
20010 69 6e 67 0a 2a 2a 20 74 68 65 20 69 6e 73 65 72  ing.** the inser
20020 74 20 62 75 74 20 77 69 6c 6c 20 69 6e 73 74 65  t but will inste
20030 61 64 20 6f 76 65 72 77 72 69 74 65 20 74 68 65  ad overwrite the
20040 20 72 6f 77 20 74 68 61 74 20 74 68 65 20 63 75   row that the cu
20050 72 73 6f 72 20 69 73 0a 2a 2a 20 63 75 72 72 65  rsor is.** curre
20060 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f  ntly pointing to
20070 2e 20 20 50 72 65 73 75 6d 61 62 6c 79 2c 20 74  .  Presumably, t
20080 68 65 20 70 72 69 6f 72 20 4f 50 5f 4e 6f 74 45  he prior OP_NotE
20090 78 69 73 74 73 20 6f 70 63 6f 64 65 0a 2a 2a 20  xists opcode.** 
200a0 68 61 73 20 61 6c 72 65 61 64 79 20 70 6f 73 69  has already posi
200b0 74 69 6f 6e 65 64 20 74 68 65 20 63 75 72 73 6f  tioned the curso
200c0 72 20 63 6f 72 72 65 63 74 6c 79 2e 20 20 54 68  r correctly.  Th
200d0 69 73 20 69 73 20 61 6e 20 6f 70 74 69 6d 69 7a  is is an optimiz
200e0 61 74 69 6f 6e 0a 2a 2a 20 74 68 61 74 20 62 6f  ation.** that bo
200f0 6f 73 74 73 20 70 65 72 66 6f 72 6d 61 6e 63 65  osts performance
20100 20 62 79 20 61 76 6f 69 64 69 6e 67 20 72 65 64   by avoiding red
20110 75 6e 64 61 6e 74 20 73 65 65 6b 73 2e 0a 2a 2a  undant seeks..**
20120 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41  .** If the OPFLA
20130 47 5f 49 53 55 50 44 41 54 45 20 66 6c 61 67 20  G_ISUPDATE flag 
20140 69 73 20 73 65 74 2c 20 74 68 65 6e 20 74 68 69  is set, then thi
20150 73 20 6f 70 63 6f 64 65 20 69 73 20 70 61 72 74  s opcode is part
20160 20 6f 66 20 61 6e 0a 2a 2a 20 55 50 44 41 54 45   of an.** UPDATE
20170 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20 4f 74 68   operation.  Oth
20180 65 72 77 69 73 65 20 28 69 66 20 74 68 65 20 66  erwise (if the f
20190 6c 61 67 20 69 73 20 63 6c 65 61 72 29 20 74 68  lag is clear) th
201a0 65 6e 20 74 68 69 73 20 6f 70 63 6f 64 65 0a 2a  en this opcode.*
201b0 2a 20 69 73 20 70 61 72 74 20 6f 66 20 61 6e 20  * is part of an 
201c0 49 4e 53 45 52 54 20 6f 70 65 72 61 74 69 6f 6e  INSERT operation
201d0 2e 20 20 54 68 65 20 64 69 66 66 65 72 65 6e 63  .  The differenc
201e0 65 20 69 73 20 6f 6e 6c 79 20 69 6d 70 6f 72 74  e is only import
201f0 61 6e 74 20 74 6f 0a 2a 2a 20 74 68 65 20 75 70  ant to.** the up
20200 64 61 74 65 20 68 6f 6f 6b 2e 0a 2a 2a 0a 2a 2a  date hook..**.**
20210 20 50 61 72 61 6d 65 74 65 72 20 50 34 20 6d 61   Parameter P4 ma
20220 79 20 70 6f 69 6e 74 20 74 6f 20 61 20 73 74 72  y point to a str
20230 69 6e 67 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  ing containing t
20240 68 65 20 74 61 62 6c 65 2d 6e 61 6d 65 2c 20 6f  he table-name, o
20250 72 0a 2a 2a 20 6d 61 79 20 62 65 20 4e 55 4c 4c  r.** may be NULL
20260 2e 20 49 66 20 69 74 20 69 73 20 6e 6f 74 20 4e  . If it is not N
20270 55 4c 4c 2c 20 74 68 65 6e 20 74 68 65 20 75 70  ULL, then the up
20280 64 61 74 65 2d 68 6f 6f 6b 20 0a 2a 2a 20 28 73  date-hook .** (s
20290 71 6c 69 74 65 33 2e 78 55 70 64 61 74 65 43 61  qlite3.xUpdateCa
202a0 6c 6c 62 61 63 6b 29 20 69 73 20 69 6e 76 6f 6b  llback) is invok
202b0 65 64 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 20 73  ed following a s
202c0 75 63 63 65 73 73 66 75 6c 20 69 6e 73 65 72 74  uccessful insert
202d0 2e 0a 2a 2a 0a 2a 2a 20 28 57 41 52 4e 49 4e 47  ..**.** (WARNING
202e0 2f 54 4f 44 4f 3a 20 49 66 20 50 31 20 69 73 20  /TODO: If P1 is 
202f0 61 20 70 73 65 75 64 6f 2d 63 75 72 73 6f 72 20  a pseudo-cursor 
20300 61 6e 64 20 50 32 20 69 73 20 64 79 6e 61 6d 69  and P2 is dynami
20310 63 61 6c 6c 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74  cally.** allocat
20320 65 64 2c 20 74 68 65 6e 20 6f 77 6e 65 72 73 68  ed, then ownersh
20330 69 70 20 6f 66 20 50 32 20 69 73 20 74 72 61 6e  ip of P2 is tran
20340 73 66 65 72 72 65 64 20 74 6f 20 74 68 65 20 70  sferred to the p
20350 73 65 75 64 6f 2d 63 75 72 73 6f 72 0a 2a 2a 20  seudo-cursor.** 
20360 61 6e 64 20 72 65 67 69 73 74 65 72 20 50 32 20  and register P2 
20370 62 65 63 6f 6d 65 73 20 65 70 68 65 6d 65 72 61  becomes ephemera
20380 6c 2e 20 20 49 66 20 74 68 65 20 63 75 72 73 6f  l.  If the curso
20390 72 20 69 73 20 63 68 61 6e 67 65 64 2c 20 74 68  r is changed, th
203a0 65 0a 2a 2a 20 76 61 6c 75 65 20 6f 66 20 72 65  e.** value of re
203b0 67 69 73 74 65 72 20 50 32 20 77 69 6c 6c 20 74  gister P2 will t
203c0 68 65 6e 20 63 68 61 6e 67 65 2e 20 20 4d 61 6b  hen change.  Mak
203d0 65 20 73 75 72 65 20 74 68 69 73 20 64 6f 65 73  e sure this does
203e0 20 6e 6f 74 0a 2a 2a 20 63 61 75 73 65 20 61 6e   not.** cause an
203f0 79 20 70 72 6f 62 6c 65 6d 73 2e 29 0a 2a 2a 0a  y problems.).**.
20400 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74  ** This instruct
20410 69 6f 6e 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 6f  ion only works o
20420 6e 20 74 61 62 6c 65 73 2e 20 20 54 68 65 20 65  n tables.  The e
20430 71 75 69 76 61 6c 65 6e 74 20 69 6e 73 74 72 75  quivalent instru
20440 63 74 69 6f 6e 0a 2a 2a 20 66 6f 72 20 69 6e 64  ction.** for ind
20450 69 63 65 73 20 69 73 20 4f 50 5f 49 64 78 49 6e  ices is OP_IdxIn
20460 73 65 72 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  sert..*/./* Opco
20470 64 65 3a 20 49 6e 73 65 72 74 49 6e 74 20 50 31  de: InsertInt P1
20480 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a   P2 P3 P4 P5.**.
20490 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 65 78  ** This works ex
204a0 61 63 74 6c 79 20 6c 69 6b 65 20 4f 50 5f 49 6e  actly like OP_In
204b0 73 65 72 74 20 65 78 63 65 70 74 20 74 68 61 74  sert except that
204c0 20 74 68 65 20 6b 65 79 20 69 73 20 74 68 65 0a   the key is the.
204d0 2a 2a 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  ** integer value
204e0 20 50 33 2c 20 6e 6f 74 20 74 68 65 20 76 61 6c   P3, not the val
204f0 75 65 20 6f 66 20 74 68 65 20 69 6e 74 65 67 65  ue of the intege
20500 72 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  r stored in regi
20510 73 74 65 72 20 50 33 2e 0a 2a 2f 0a 63 61 73 65  ster P3..*/.case
20520 20 4f 50 5f 49 6e 73 65 72 74 3a 20 0a 63 61 73   OP_Insert: .cas
20530 65 20 4f 50 5f 49 6e 73 65 72 74 49 6e 74 3a 20  e OP_InsertInt: 
20540 7b 0a 20 20 4d 65 6d 20 2a 70 44 61 74 61 3b 20  {.  Mem *pData; 
20550 20 20 20 20 20 20 2f 2a 20 4d 45 4d 20 63 65 6c        /* MEM cel
20560 6c 20 68 6f 6c 64 69 6e 67 20 64 61 74 61 20 66  l holding data f
20570 6f 72 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f  or the record to
20580 20 62 65 20 69 6e 73 65 72 74 65 64 20 2a 2f 0a   be inserted */.
20590 20 20 4d 65 6d 20 2a 70 4b 65 79 3b 20 20 20 20    Mem *pKey;    
205a0 20 20 20 20 2f 2a 20 4d 45 4d 20 63 65 6c 6c 20      /* MEM cell 
205b0 68 6f 6c 64 69 6e 67 20 6b 65 79 20 20 66 6f 72  holding key  for
205c0 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20   the record */. 
205d0 20 69 36 34 20 69 4b 65 79 3b 20 20 20 20 20 20   i64 iKey;      
205e0 20 20 20 2f 2a 20 54 68 65 20 69 6e 74 65 67 65     /* The intege
205f0 72 20 52 4f 57 49 44 20 6f 72 20 6b 65 79 20 66  r ROWID or key f
20600 6f 72 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f  or the record to
20610 20 62 65 20 69 6e 73 65 72 74 65 64 20 2a 2f 0a   be inserted */.
20620 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
20630 3b 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 74 6f  ;   /* Cursor to
20640 20 74 61 62 6c 65 20 69 6e 74 6f 20 77 68 69 63   table into whic
20650 68 20 69 6e 73 65 72 74 20 69 73 20 77 72 69 74  h insert is writ
20660 74 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 5a 65  ten */.  int nZe
20670 72 6f 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  ro;        /* Nu
20680 6d 62 65 72 20 6f 66 20 7a 65 72 6f 2d 62 79 74  mber of zero-byt
20690 65 73 20 74 6f 20 61 70 70 65 6e 64 20 2a 2f 0a  es to append */.
206a0 20 20 69 6e 74 20 73 65 65 6b 52 65 73 75 6c 74    int seekResult
206b0 3b 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66  ;   /* Result of
206c0 20 70 72 69 6f 72 20 73 65 65 6b 20 6f 72 20 30   prior seek or 0
206d0 20 69 66 20 6e 6f 20 55 53 45 53 45 45 4b 52 45   if no USESEEKRE
206e0 53 55 4c 54 20 66 6c 61 67 20 2a 2f 0a 20 20 63  SULT flag */.  c
206f0 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 3b 20  onst char *zDb; 
20700 20 2f 2a 20 64 61 74 61 62 61 73 65 20 6e 61 6d   /* database nam
20710 65 20 2d 20 75 73 65 64 20 62 79 20 74 68 65 20  e - used by the 
20720 75 70 64 61 74 65 20 68 6f 6f 6b 20 2a 2f 0a 20  update hook */. 
20730 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 62   const char *zTb
20740 6c 3b 20 2f 2a 20 54 61 62 6c 65 20 6e 61 6d 65  l; /* Table name
20750 20 2d 20 75 73 65 64 20 62 79 20 74 68 65 20 6f   - used by the o
20760 70 64 61 74 65 20 68 6f 6f 6b 20 2a 2f 0a 20 20  pdate hook */.  
20770 69 6e 74 20 6f 70 3b 20 20 20 20 20 20 20 20 20  int op;         
20780 20 20 2f 2a 20 4f 70 63 6f 64 65 20 66 6f 72 20    /* Opcode for 
20790 75 70 64 61 74 65 20 68 6f 6f 6b 3a 20 53 51 4c  update hook: SQL
207a0 49 54 45 5f 55 50 44 41 54 45 20 6f 72 20 53 51  ITE_UPDATE or SQ
207b0 4c 49 54 45 5f 49 4e 53 45 52 54 20 2a 2f 0a 0a  LITE_INSERT */..
207c0 20 20 70 44 61 74 61 20 3d 20 26 61 4d 65 6d 5b    pData = &aMem[
207d0 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65  pOp->p2];.  asse
207e0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
207f0 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
20800 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74  rsor );.  assert
20810 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 44 61  ( memIsValid(pDa
20820 74 61 29 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  ta) );.  pC = p-
20830 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
20840 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
20850 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
20860 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a  ->pCursor!=0 );.
20870 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 73    assert( pC->ps
20880 65 75 64 6f 54 61 62 6c 65 52 65 67 3d 3d 30 20  eudoTableReg==0 
20890 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
208a0 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 52 45  >isTable );.  RE
208b0 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
208c0 2d 3e 70 32 2c 20 70 44 61 74 61 29 3b 0a 0a 20  ->p2, pData);.. 
208d0 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65   if( pOp->opcode
208e0 3d 3d 4f 50 5f 49 6e 73 65 72 74 20 29 7b 0a 20  ==OP_Insert ){. 
208f0 20 20 20 70 4b 65 79 20 3d 20 26 61 4d 65 6d 5b     pKey = &aMem[
20900 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 61 73  pOp->p3];.    as
20910 73 65 72 74 28 20 70 4b 65 79 2d 3e 66 6c 61 67  sert( pKey->flag
20920 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20  s & MEM_Int );. 
20930 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
20940 56 61 6c 69 64 28 70 4b 65 79 29 20 29 3b 0a 20  Valid(pKey) );. 
20950 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43     REGISTER_TRAC
20960 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4b 65 79 29  E(pOp->p3, pKey)
20970 3b 0a 20 20 20 20 69 4b 65 79 20 3d 20 70 4b 65  ;.    iKey = pKe
20980 79 2d 3e 75 2e 69 3b 0a 20 20 7d 65 6c 73 65 7b  y->u.i;.  }else{
20990 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
209a0 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 6e 73  ->opcode==OP_Ins
209b0 65 72 74 49 6e 74 20 29 3b 0a 20 20 20 20 69 4b  ertInt );.    iK
209c0 65 79 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20  ey = pOp->p3;.  
209d0 7d 0a 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35  }..  if( pOp->p5
209e0 20 26 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47   & OPFLAG_NCHANG
209f0 45 20 29 20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b  E ) p->nChange++
20a00 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20  ;.  if( pOp->p5 
20a10 26 20 4f 50 46 4c 41 47 5f 4c 41 53 54 52 4f 57  & OPFLAG_LASTROW
20a20 49 44 20 29 20 64 62 2d 3e 6c 61 73 74 52 6f 77  ID ) db->lastRow
20a30 69 64 20 3d 20 6c 61 73 74 52 6f 77 69 64 20 3d  id = lastRowid =
20a40 20 69 4b 65 79 3b 0a 20 20 69 66 28 20 70 44 61   iKey;.  if( pDa
20a50 74 61 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  ta->flags & MEM_
20a60 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 70 44 61 74  Null ){.    pDat
20a70 61 2d 3e 7a 20 3d 20 30 3b 0a 20 20 20 20 70 44  a->z = 0;.    pD
20a80 61 74 61 2d 3e 6e 20 3d 20 30 3b 0a 20 20 7d 65  ata->n = 0;.  }e
20a90 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28  lse{.    assert(
20aa0 20 70 44 61 74 61 2d 3e 66 6c 61 67 73 20 26 20   pData->flags & 
20ab0 28 4d 45 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f 53 74  (MEM_Blob|MEM_St
20ac0 72 29 20 29 3b 0a 20 20 7d 0a 20 20 73 65 65 6b  r) );.  }.  seek
20ad0 52 65 73 75 6c 74 20 3d 20 28 28 70 4f 70 2d 3e  Result = ((pOp->
20ae0 70 35 20 26 20 4f 50 46 4c 41 47 5f 55 53 45 53  p5 & OPFLAG_USES
20af0 45 45 4b 52 45 53 55 4c 54 29 20 3f 20 70 43 2d  EEKRESULT) ? pC-
20b00 3e 73 65 65 6b 52 65 73 75 6c 74 20 3a 20 30 29  >seekResult : 0)
20b10 3b 0a 20 20 69 66 28 20 70 44 61 74 61 2d 3e 66  ;.  if( pData->f
20b20 6c 61 67 73 20 26 20 4d 45 4d 5f 5a 65 72 6f 20  lags & MEM_Zero 
20b30 29 7b 0a 20 20 20 20 6e 5a 65 72 6f 20 3d 20 70  ){.    nZero = p
20b40 44 61 74 61 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a 20  Data->u.nZero;. 
20b50 20 7d 65 6c 73 65 7b 0a 20 20 20 20 6e 5a 65 72   }else{.    nZer
20b60 6f 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 73 71 6c  o = 0;.  }.  sql
20b70 69 74 65 33 42 74 72 65 65 53 65 74 43 61 63 68  ite3BtreeSetCach
20b80 65 64 52 6f 77 69 64 28 70 43 2d 3e 70 43 75 72  edRowid(pC->pCur
20b90 73 6f 72 2c 20 30 29 3b 0a 20 20 72 63 20 3d 20  sor, 0);.  rc = 
20ba0 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e 73 65  sqlite3BtreeInse
20bb0 72 74 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20  rt(pC->pCursor, 
20bc0 30 2c 20 69 4b 65 79 2c 0a 20 20 20 20 20 20 20  0, iKey,.       
20bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20be0 20 20 20 70 44 61 74 61 2d 3e 7a 2c 20 70 44 61     pData->z, pDa
20bf0 74 61 2d 3e 6e 2c 20 6e 5a 65 72 6f 2c 0a 20 20  ta->n, nZero,.  
20c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20c10 20 20 20 20 20 20 20 20 70 4f 70 2d 3e 70 35 20          pOp->p5 
20c20 26 20 4f 50 46 4c 41 47 5f 41 50 50 45 4e 44 2c  & OPFLAG_APPEND,
20c30 20 73 65 65 6b 52 65 73 75 6c 74 0a 20 20 29 3b   seekResult.  );
20c40 0a 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61  .  pC->rowidIsVa
20c50 6c 69 64 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 64  lid = 0;.  pC->d
20c60 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20  eferredMoveto = 
20c70 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74  0;.  pC->cacheSt
20c80 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
20c90 4c 45 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65  LE;..  /* Invoke
20ca0 20 74 68 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b   the update-hook
20cb0 20 69 66 20 72 65 71 75 69 72 65 64 2e 20 2a 2f   if required. */
20cc0 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54  .  if( rc==SQLIT
20cd0 45 5f 4f 4b 20 26 26 20 64 62 2d 3e 78 55 70 64  E_OK && db->xUpd
20ce0 61 74 65 43 61 6c 6c 62 61 63 6b 20 26 26 20 70  ateCallback && p
20cf0 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20 20 20  Op->p4.z ){.    
20d00 7a 44 62 20 3d 20 64 62 2d 3e 61 44 62 5b 70 43  zDb = db->aDb[pC
20d10 2d 3e 69 44 62 5d 2e 7a 4e 61 6d 65 3b 0a 20 20  ->iDb].zName;.  
20d20 20 20 7a 54 62 6c 20 3d 20 70 4f 70 2d 3e 70 34    zTbl = pOp->p4
20d30 2e 7a 3b 0a 20 20 20 20 6f 70 20 3d 20 28 28 70  .z;.    op = ((p
20d40 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f  Op->p5 & OPFLAG_
20d50 49 53 55 50 44 41 54 45 29 20 3f 20 53 51 4c 49  ISUPDATE) ? SQLI
20d60 54 45 5f 55 50 44 41 54 45 20 3a 20 53 51 4c 49  TE_UPDATE : SQLI
20d70 54 45 5f 49 4e 53 45 52 54 29 3b 0a 20 20 20 20  TE_INSERT);.    
20d80 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61  assert( pC->isTa
20d90 62 6c 65 20 29 3b 0a 20 20 20 20 64 62 2d 3e 78  ble );.    db->x
20da0 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 28 64  UpdateCallback(d
20db0 62 2d 3e 70 55 70 64 61 74 65 41 72 67 2c 20 6f  b->pUpdateArg, o
20dc0 70 2c 20 7a 44 62 2c 20 7a 54 62 6c 2c 20 69 4b  p, zDb, zTbl, iK
20dd0 65 79 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  ey);.    assert(
20de0 20 70 43 2d 3e 69 44 62 3e 3d 30 20 29 3b 0a 20   pC->iDb>=0 );. 
20df0 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
20e00 2a 20 4f 70 63 6f 64 65 3a 20 44 65 6c 65 74 65  * Opcode: Delete
20e10 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a   P1 P2 * P4 *.**
20e20 0a 2a 2a 20 44 65 6c 65 74 65 20 74 68 65 20 72  .** Delete the r
20e30 65 63 6f 72 64 20 61 74 20 77 68 69 63 68 20 74  ecord at which t
20e40 68 65 20 50 31 20 63 75 72 73 6f 72 20 69 73 20  he P1 cursor is 
20e50 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69  currently pointi
20e60 6e 67 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 75  ng..**.** The cu
20e70 72 73 6f 72 20 77 69 6c 6c 20 62 65 20 6c 65 66  rsor will be lef
20e80 74 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 65 69  t pointing at ei
20e90 74 68 65 72 20 74 68 65 20 6e 65 78 74 20 6f 72  ther the next or
20ea0 20 74 68 65 20 70 72 65 76 69 6f 75 73 0a 2a 2a   the previous.**
20eb0 20 72 65 63 6f 72 64 20 69 6e 20 74 68 65 20 74   record in the t
20ec0 61 62 6c 65 2e 20 49 66 20 69 74 20 69 73 20 6c  able. If it is l
20ed0 65 66 74 20 70 6f 69 6e 74 69 6e 67 20 61 74 20  eft pointing at 
20ee0 74 68 65 20 6e 65 78 74 20 72 65 63 6f 72 64 2c  the next record,
20ef0 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20 6e 65 78   then.** the nex
20f00 74 20 4e 65 78 74 20 69 6e 73 74 72 75 63 74 69  t Next instructi
20f10 6f 6e 20 77 69 6c 6c 20 62 65 20 61 20 6e 6f 2d  on will be a no-
20f20 6f 70 2e 20 20 48 65 6e 63 65 20 69 74 20 69 73  op.  Hence it is
20f30 20 4f 4b 20 74 6f 20 64 65 6c 65 74 65 0a 2a 2a   OK to delete.**
20f40 20 61 20 72 65 63 6f 72 64 20 66 72 6f 6d 20 77   a record from w
20f50 69 74 68 69 6e 20 61 6e 20 4e 65 78 74 20 6c 6f  ithin an Next lo
20f60 6f 70 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  op..**.** If the
20f70 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20   OPFLAG_NCHANGE 
20f80 66 6c 61 67 20 6f 66 20 50 32 20 69 73 20 73 65  flag of P2 is se
20f90 74 2c 20 74 68 65 6e 20 74 68 65 20 72 6f 77 20  t, then the row 
20fa0 63 68 61 6e 67 65 20 63 6f 75 6e 74 20 69 73 0a  change count is.
20fb0 2a 2a 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 28  ** incremented (
20fc0 6f 74 68 65 72 77 69 73 65 20 6e 6f 74 29 2e 0a  otherwise not)..
20fd0 2a 2a 0a 2a 2a 20 50 31 20 6d 75 73 74 20 6e 6f  **.** P1 must no
20fe0 74 20 62 65 20 70 73 65 75 64 6f 2d 74 61 62 6c  t be pseudo-tabl
20ff0 65 2e 20 20 49 74 20 68 61 73 20 74 6f 20 62 65  e.  It has to be
21000 20 61 20 72 65 61 6c 20 74 61 62 6c 65 20 77 69   a real table wi
21010 74 68 0a 2a 2a 20 6d 75 6c 74 69 70 6c 65 20 72  th.** multiple r
21020 6f 77 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34  ows..**.** If P4
21030 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68   is not NULL, th
21040 65 6e 20 69 74 20 69 73 20 74 68 65 20 6e 61 6d  en it is the nam
21050 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74  e of the table t
21060 68 61 74 20 50 31 20 69 73 0a 2a 2a 20 70 6f 69  hat P1 is.** poi
21070 6e 74 69 6e 67 20 74 6f 2e 20 20 54 68 65 20 75  nting to.  The u
21080 70 64 61 74 65 20 68 6f 6f 6b 20 77 69 6c 6c 20  pdate hook will 
21090 62 65 20 69 6e 76 6f 6b 65 64 2c 20 69 66 20 69  be invoked, if i
210a0 74 20 65 78 69 73 74 73 2e 0a 2a 2a 20 49 66 20  t exists..** If 
210b0 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 20 74  P4 is not NULL t
210c0 68 65 6e 20 74 68 65 20 50 31 20 63 75 72 73 6f  hen the P1 curso
210d0 72 20 6d 75 73 74 20 68 61 76 65 20 62 65 65 6e  r must have been
210e0 20 70 6f 73 69 74 69 6f 6e 65 64 0a 2a 2a 20 75   positioned.** u
210f0 73 69 6e 67 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64  sing OP_NotFound
21100 20 70 72 69 6f 72 20 74 6f 20 69 6e 76 6f 6b 69   prior to invoki
21110 6e 67 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a  ng this opcode..
21120 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 65 6c 65 74  */.case OP_Delet
21130 65 3a 20 7b 0a 20 20 69 36 34 20 69 4b 65 79 3b  e: {.  i64 iKey;
21140 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
21150 43 3b 0a 0a 20 20 69 4b 65 79 20 3d 20 30 3b 0a  C;..  iKey = 0;.
21160 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
21170 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
21180 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
21190 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
211a0 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
211b0 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73  ( pC!=0 );.  ass
211c0 65 72 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72  ert( pC->pCursor
211d0 21 3d 30 20 29 3b 20 20 2f 2a 20 4f 6e 6c 79 20  !=0 );  /* Only 
211e0 76 61 6c 69 64 20 66 6f 72 20 72 65 61 6c 20 74  valid for real t
211f0 61 62 6c 65 73 2c 20 6e 6f 20 70 73 65 75 64 6f  ables, no pseudo
21200 74 61 62 6c 65 73 20 2a 2f 0a 0a 20 20 2f 2a 20  tables */..  /* 
21210 49 66 20 74 68 65 20 75 70 64 61 74 65 2d 68 6f  If the update-ho
21220 6f 6b 20 77 69 6c 6c 20 62 65 20 69 6e 76 6f 6b  ok will be invok
21230 65 64 2c 20 73 65 74 20 69 4b 65 79 20 74 6f 20  ed, set iKey to 
21240 74 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68 65  the rowid of the
21250 0a 20 20 2a 2a 20 72 6f 77 20 62 65 69 6e 67 20  .  ** row being 
21260 64 65 6c 65 74 65 64 2e 0a 20 20 2a 2f 0a 20 20  deleted..  */.  
21270 69 66 28 20 64 62 2d 3e 78 55 70 64 61 74 65 43  if( db->xUpdateC
21280 61 6c 6c 62 61 63 6b 20 26 26 20 70 4f 70 2d 3e  allback && pOp->
21290 70 34 2e 7a 20 29 7b 0a 20 20 20 20 61 73 73 65  p4.z ){.    asse
212a0 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20  rt( pC->isTable 
212b0 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
212c0 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20  C->rowidIsValid 
212d0 29 3b 20 20 2f 2a 20 6c 61 73 74 52 6f 77 69 64  );  /* lastRowid
212e0 20 73 65 74 20 62 79 20 70 72 65 76 69 6f 75 73   set by previous
212f0 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20 2a 2f 0a   OP_NotFound */.
21300 20 20 20 20 69 4b 65 79 20 3d 20 70 43 2d 3e 6c      iKey = pC->l
21310 61 73 74 52 6f 77 69 64 3b 0a 20 20 7d 0a 0a 20  astRowid;.  }.. 
21320 20 2f 2a 20 54 68 65 20 4f 50 5f 44 65 6c 65 74   /* The OP_Delet
21330 65 20 6f 70 63 6f 64 65 20 61 6c 77 61 79 73 20  e opcode always 
21340 66 6f 6c 6c 6f 77 73 20 61 6e 20 4f 50 5f 4e 6f  follows an OP_No
21350 74 45 78 69 73 74 73 20 6f 72 20 4f 50 5f 4c 61  tExists or OP_La
21360 73 74 20 6f 72 0a 20 20 2a 2a 20 4f 50 5f 43 6f  st or.  ** OP_Co
21370 6c 75 6d 6e 20 6f 6e 20 74 68 65 20 73 61 6d 65  lumn on the same
21380 20 74 61 62 6c 65 20 77 69 74 68 6f 75 74 20 61   table without a
21390 6e 79 20 69 6e 74 65 72 76 65 6e 69 6e 67 20 6f  ny intervening o
213a0 70 65 72 61 74 69 6f 6e 73 20 74 68 61 74 0a 20  perations that. 
213b0 20 2a 2a 20 6d 69 67 68 74 20 6d 6f 76 65 20 6f   ** might move o
213c0 72 20 69 6e 76 61 6c 69 64 61 74 65 20 74 68 65  r invalidate the
213d0 20 63 75 72 73 6f 72 2e 20 20 48 65 6e 63 65 20   cursor.  Hence 
213e0 63 75 72 73 6f 72 20 70 43 20 69 73 20 61 6c 77  cursor pC is alw
213f0 61 79 73 20 70 6f 69 6e 74 69 6e 67 0a 20 20 2a  ays pointing.  *
21400 2a 20 74 6f 20 74 68 65 20 72 6f 77 20 74 6f 20  * to the row to 
21410 62 65 20 64 65 6c 65 74 65 64 20 61 6e 64 20 74  be deleted and t
21420 68 65 20 73 71 6c 69 74 65 33 56 64 62 65 43 75  he sqlite3VdbeCu
21430 72 73 6f 72 4d 6f 76 65 74 6f 28 29 20 6f 70 65  rsorMoveto() ope
21440 72 61 74 69 6f 6e 0a 20 20 2a 2a 20 62 65 6c 6f  ration.  ** belo
21450 77 20 69 73 20 61 6c 77 61 79 73 20 61 20 6e 6f  w is always a no
21460 2d 6f 70 20 61 6e 64 20 63 61 6e 6e 6f 74 20 66  -op and cannot f
21470 61 69 6c 2e 20 20 57 65 20 77 69 6c 6c 20 72 75  ail.  We will ru
21480 6e 20 69 74 20 61 6e 79 68 6f 77 2c 20 74 68 6f  n it anyhow, tho
21490 75 67 68 2c 0a 20 20 2a 2a 20 74 6f 20 67 75 61  ugh,.  ** to gua
214a0 72 64 20 61 67 61 69 6e 73 74 20 66 75 74 75 72  rd against futur
214b0 65 20 63 68 61 6e 67 65 73 20 74 6f 20 74 68 65  e changes to the
214c0 20 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 2e   code generator.
214d0 0a 20 20 2a 2a 2f 0a 20 20 61 73 73 65 72 74 28  .  **/.  assert(
214e0 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
214f0 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d  eto==0 );.  rc =
21500 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73   sqlite3VdbeCurs
21510 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20  orMoveto(pC);.  
21520 69 66 28 20 4e 45 56 45 52 28 72 63 21 3d 53 51  if( NEVER(rc!=SQ
21530 4c 49 54 45 5f 4f 4b 29 20 29 20 67 6f 74 6f 20  LITE_OK) ) goto 
21540 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
21550 6f 72 3b 0a 0a 20 20 73 71 6c 69 74 65 33 42 74  or;..  sqlite3Bt
21560 72 65 65 53 65 74 43 61 63 68 65 64 52 6f 77 69  reeSetCachedRowi
21570 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 30  d(pC->pCursor, 0
21580 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  );.  rc = sqlite
21590 33 42 74 72 65 65 44 65 6c 65 74 65 28 70 43 2d  3BtreeDelete(pC-
215a0 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 70 43 2d  >pCursor);.  pC-
215b0 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
215c0 41 43 48 45 5f 53 54 41 4c 45 3b 0a 0a 20 20 2f  ACHE_STALE;..  /
215d0 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 75 70 64  * Invoke the upd
215e0 61 74 65 2d 68 6f 6f 6b 20 69 66 20 72 65 71 75  ate-hook if requ
215f0 69 72 65 64 2e 20 2a 2f 0a 20 20 69 66 28 20 72  ired. */.  if( r
21600 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20  c==SQLITE_OK && 
21610 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62  db->xUpdateCallb
21620 61 63 6b 20 26 26 20 70 4f 70 2d 3e 70 34 2e 7a  ack && pOp->p4.z
21630 20 29 7b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68   ){.    const ch
21640 61 72 20 2a 7a 44 62 20 3d 20 64 62 2d 3e 61 44  ar *zDb = db->aD
21650 62 5b 70 43 2d 3e 69 44 62 5d 2e 7a 4e 61 6d 65  b[pC->iDb].zName
21660 3b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72  ;.    const char
21670 20 2a 7a 54 62 6c 20 3d 20 70 4f 70 2d 3e 70 34   *zTbl = pOp->p4
21680 2e 7a 3b 0a 20 20 20 20 64 62 2d 3e 78 55 70 64  .z;.    db->xUpd
21690 61 74 65 43 61 6c 6c 62 61 63 6b 28 64 62 2d 3e  ateCallback(db->
216a0 70 55 70 64 61 74 65 41 72 67 2c 20 53 51 4c 49  pUpdateArg, SQLI
216b0 54 45 5f 44 45 4c 45 54 45 2c 20 7a 44 62 2c 20  TE_DELETE, zDb, 
216c0 7a 54 62 6c 2c 20 69 4b 65 79 29 3b 0a 20 20 20  zTbl, iKey);.   
216d0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 44 62   assert( pC->iDb
216e0 3e 3d 30 20 29 3b 0a 20 20 7d 0a 20 20 69 66 28  >=0 );.  }.  if(
216f0 20 70 4f 70 2d 3e 70 32 20 26 20 4f 50 46 4c 41   pOp->p2 & OPFLA
21700 47 5f 4e 43 48 41 4e 47 45 20 29 20 70 2d 3e 6e  G_NCHANGE ) p->n
21710 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 62 72 65 61  Change++;.  brea
21720 6b 3b 0a 7d 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  k;.}./* Opcode: 
21730 52 65 73 65 74 43 6f 75 6e 74 20 2a 20 2a 20 2a  ResetCount * * *
21740 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 76   * *.**.** The v
21750 61 6c 75 65 20 6f 66 20 74 68 65 20 63 68 61 6e  alue of the chan
21760 67 65 20 63 6f 75 6e 74 65 72 20 69 73 20 63 6f  ge counter is co
21770 70 69 65 64 20 74 6f 20 74 68 65 20 64 61 74 61  pied to the data
21780 62 61 73 65 20 68 61 6e 64 6c 65 0a 2a 2a 20 63  base handle.** c
21790 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 28 72  hange counter (r
217a0 65 74 75 72 6e 65 64 20 62 79 20 73 75 62 73 65  eturned by subse
217b0 71 75 65 6e 74 20 63 61 6c 6c 73 20 74 6f 20 73  quent calls to s
217c0 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 28 29  qlite3_changes()
217d0 29 2e 0a 2a 2a 20 54 68 65 6e 20 74 68 65 20 56  )..** Then the V
217e0 4d 73 20 69 6e 74 65 72 6e 61 6c 20 63 68 61 6e  Ms internal chan
217f0 67 65 20 63 6f 75 6e 74 65 72 20 72 65 73 65 74  ge counter reset
21800 73 20 74 6f 20 30 2e 0a 2a 2a 20 54 68 69 73 20  s to 0..** This 
21810 69 73 20 75 73 65 64 20 62 79 20 74 72 69 67 67  is used by trigg
21820 65 72 20 70 72 6f 67 72 61 6d 73 2e 0a 2a 2f 0a  er programs..*/.
21830 63 61 73 65 20 4f 50 5f 52 65 73 65 74 43 6f 75  case OP_ResetCou
21840 6e 74 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 56  nt: {.  sqlite3V
21850 64 62 65 53 65 74 43 68 61 6e 67 65 73 28 64 62  dbeSetChanges(db
21860 2c 20 70 2d 3e 6e 43 68 61 6e 67 65 29 3b 0a 20  , p->nChange);. 
21870 20 70 2d 3e 6e 43 68 61 6e 67 65 20 3d 20 30 3b   p->nChange = 0;
21880 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
21890 4f 70 63 6f 64 65 3a 20 53 6f 72 74 65 72 43 6f  Opcode: SorterCo
218a0 6d 70 61 72 65 20 50 31 20 50 32 20 50 33 0a 2a  mpare P1 P2 P3.*
218b0 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 73 6f 72  *.** P1 is a sor
218c0 74 65 72 20 63 75 72 73 6f 72 2e 20 54 68 69 73  ter cursor. This
218d0 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 63 6f 6d   instruction com
218e0 70 61 72 65 73 20 74 68 65 20 72 65 63 6f 72 64  pares the record
218f0 20 62 6c 6f 62 20 69 6e 20 0a 2a 2a 20 72 65 67   blob in .** reg
21900 69 73 74 65 72 20 50 33 20 77 69 74 68 20 74 68  ister P3 with th
21910 65 20 65 6e 74 72 79 20 74 68 61 74 20 74 68 65  e entry that the
21920 20 73 6f 72 74 65 72 20 63 75 72 73 6f 72 20 63   sorter cursor c
21930 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 73 20  urrently points 
21940 74 6f 2e 0a 2a 2a 20 49 66 2c 20 65 78 63 6c 75  to..** If, exclu
21950 64 69 6e 67 20 74 68 65 20 72 6f 77 69 64 20 66  ding the rowid f
21960 69 65 6c 64 73 20 61 74 20 74 68 65 20 65 6e 64  ields at the end
21970 2c 20 74 68 65 20 74 77 6f 20 72 65 63 6f 72 64  , the two record
21980 73 20 61 72 65 20 61 20 6d 61 74 63 68 2c 0a 2a  s are a match,.*
21990 2a 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74  * fall through t
219a0 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72  o the next instr
219b0 75 63 74 69 6f 6e 2e 20 4f 74 68 65 72 77 69 73  uction. Otherwis
219c0 65 2c 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72  e, jump to instr
219d0 75 63 74 69 6f 6e 20 50 32 2e 0a 2a 2f 0a 63 61  uction P2..*/.ca
219e0 73 65 20 4f 50 5f 53 6f 72 74 65 72 43 6f 6d 70  se OP_SorterComp
219f0 61 72 65 3a 20 7b 0a 20 20 56 64 62 65 43 75 72  are: {.  VdbeCur
21a00 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72  sor *pC;.  int r
21a10 65 73 3b 0a 0a 20 20 70 43 20 3d 20 70 2d 3e 61  es;..  pC = p->a
21a20 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
21a30 20 61 73 73 65 72 74 28 20 69 73 53 6f 72 74 65   assert( isSorte
21a40 72 28 70 43 29 20 29 3b 0a 20 20 70 49 6e 33 20  r(pC) );.  pIn3 
21a50 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
21a60 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
21a70 56 64 62 65 53 6f 72 74 65 72 43 6f 6d 70 61 72  VdbeSorterCompar
21a80 65 28 70 43 2c 20 70 49 6e 33 2c 20 26 72 65 73  e(pC, pIn3, &res
21a90 29 3b 0a 20 20 69 66 28 20 72 65 73 20 29 7b 0a  );.  if( res ){.
21aa0 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
21ab0 2d 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  -1;.  }.  break;
21ac0 0a 7d 3b 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  .};../* Opcode: 
21ad0 53 6f 72 74 65 72 44 61 74 61 20 50 31 20 50 32  SorterData P1 P2
21ae0 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69   * * *.**.** Wri
21af0 74 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  te into register
21b00 20 50 32 20 74 68 65 20 63 75 72 72 65 6e 74 20   P2 the current 
21b10 73 6f 72 74 65 72 20 64 61 74 61 20 66 6f 72 20  sorter data for 
21b20 73 6f 72 74 65 72 20 63 75 72 73 6f 72 20 50 31  sorter cursor P1
21b30 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72  ..*/.case OP_Sor
21b40 74 65 72 44 61 74 61 3a 20 7b 0a 20 20 56 64 62  terData: {.  Vdb
21b50 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 23 69 66  eCursor *pC;.#if
21b60 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
21b70 5f 4d 45 52 47 45 5f 53 4f 52 54 0a 20 20 70 4f  _MERGE_SORT.  pO
21b80 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
21b90 70 32 5d 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  p2];.  pC = p->a
21ba0 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
21bb0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 53   assert( pC->isS
21bc0 6f 72 74 65 72 20 29 3b 0a 20 20 72 63 20 3d 20  orter );.  rc = 
21bd0 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65  sqlite3VdbeSorte
21be0 72 52 6f 77 6b 65 79 28 70 43 2c 20 70 4f 75 74  rRowkey(pC, pOut
21bf0 29 3b 0a 23 65 6c 73 65 0a 20 20 70 4f 70 2d 3e  );.#else.  pOp->
21c00 6f 70 63 6f 64 65 20 3d 20 4f 50 5f 52 6f 77 4b  opcode = OP_RowK
21c10 65 79 3b 0a 20 20 70 63 2d 2d 3b 0a 23 65 6e 64  ey;.  pc--;.#end
21c20 69 66 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  if.  break;.}../
21c30 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 44 61 74  * Opcode: RowDat
21c40 61 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  a P1 P2 * * *.**
21c50 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f 20 72  .** Write into r
21c60 65 67 69 73 74 65 72 20 50 32 20 74 68 65 20 63  egister P2 the c
21c70 6f 6d 70 6c 65 74 65 20 72 6f 77 20 64 61 74 61  omplete row data
21c80 20 66 6f 72 20 63 75 72 73 6f 72 20 50 31 2e 0a   for cursor P1..
21c90 2a 2a 20 54 68 65 72 65 20 69 73 20 6e 6f 20 69  ** There is no i
21ca0 6e 74 65 72 70 72 65 74 61 74 69 6f 6e 20 6f 66  nterpretation of
21cb0 20 74 68 65 20 64 61 74 61 2e 20 20 0a 2a 2a 20   the data.  .** 
21cc0 49 74 20 69 73 20 6a 75 73 74 20 63 6f 70 69 65  It is just copie
21cd0 64 20 6f 6e 74 6f 20 74 68 65 20 50 32 20 72 65  d onto the P2 re
21ce0 67 69 73 74 65 72 20 65 78 61 63 74 6c 79 20 61  gister exactly a
21cf0 73 20 0a 2a 2a 20 69 74 20 69 73 20 66 6f 75 6e  s .** it is foun
21d00 64 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  d in the databas
21d10 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66  e file..**.** If
21d20 20 74 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d   the P1 cursor m
21d30 75 73 74 20 62 65 20 70 6f 69 6e 74 69 6e 67 20  ust be pointing 
21d40 74 6f 20 61 20 76 61 6c 69 64 20 72 6f 77 20 28  to a valid row (
21d50 6e 6f 74 20 61 20 4e 55 4c 4c 20 72 6f 77 29 0a  not a NULL row).
21d60 2a 2a 20 6f 66 20 61 20 72 65 61 6c 20 74 61 62  ** of a real tab
21d70 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65 75 64 6f  le, not a pseudo
21d80 2d 74 61 62 6c 65 2e 0a 2a 2f 0a 2f 2a 20 4f 70  -table..*/./* Op
21d90 63 6f 64 65 3a 20 52 6f 77 4b 65 79 20 50 31 20  code: RowKey P1 
21da0 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57  P2 * * *.**.** W
21db0 72 69 74 65 20 69 6e 74 6f 20 72 65 67 69 73 74  rite into regist
21dc0 65 72 20 50 32 20 74 68 65 20 63 6f 6d 70 6c 65  er P2 the comple
21dd0 74 65 20 72 6f 77 20 6b 65 79 20 66 6f 72 20 63  te row key for c
21de0 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 54 68 65  ursor P1..** The
21df0 72 65 20 69 73 20 6e 6f 20 69 6e 74 65 72 70 72  re is no interpr
21e00 65 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 64  etation of the d
21e10 61 74 61 2e 20 20 0a 2a 2a 20 54 68 65 20 6b 65  ata.  .** The ke
21e20 79 20 69 73 20 63 6f 70 69 65 64 20 6f 6e 74 6f  y is copied onto
21e30 20 74 68 65 20 50 33 20 72 65 67 69 73 74 65 72   the P3 register
21e40 20 65 78 61 63 74 6c 79 20 61 73 20 0a 2a 2a 20   exactly as .** 
21e50 69 74 20 69 73 20 66 6f 75 6e 64 20 69 6e 20 74  it is found in t
21e60 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
21e70 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50  ..**.** If the P
21e80 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65  1 cursor must be
21e90 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 61 20 76   pointing to a v
21ea0 61 6c 69 64 20 72 6f 77 20 28 6e 6f 74 20 61 20  alid row (not a 
21eb0 4e 55 4c 4c 20 72 6f 77 29 0a 2a 2a 20 6f 66 20  NULL row).** of 
21ec0 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f  a real table, no
21ed0 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65  t a pseudo-table
21ee0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77  ..*/.case OP_Row
21ef0 4b 65 79 3a 0a 63 61 73 65 20 4f 50 5f 52 6f 77  Key:.case OP_Row
21f00 44 61 74 61 3a 20 7b 0a 20 20 56 64 62 65 43 75  Data: {.  VdbeCu
21f10 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75  rsor *pC;.  BtCu
21f20 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 75  rsor *pCrsr;.  u
21f30 33 32 20 6e 3b 0a 20 20 69 36 34 20 6e 36 34 3b  32 n;.  i64 n64;
21f40 0a 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d  ..  pOut = &aMem
21f50 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 6d 65 6d  [pOp->p2];.  mem
21f60 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
21f70 20 70 4f 75 74 29 3b 0a 0a 20 20 2f 2a 20 4e 6f   pOut);..  /* No
21f80 74 65 20 74 68 61 74 20 52 6f 77 4b 65 79 20 61  te that RowKey a
21f90 6e 64 20 52 6f 77 44 61 74 61 20 61 72 65 20 72  nd RowData are r
21fa0 65 61 6c 6c 79 20 65 78 61 63 74 6c 79 20 74 68  eally exactly th
21fb0 65 20 73 61 6d 65 20 69 6e 73 74 72 75 63 74 69  e same instructi
21fc0 6f 6e 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  on */.  assert( 
21fd0 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
21fe0 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
21ff0 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
22000 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
22010 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 53 6f  assert( pC->isSo
22020 72 74 65 72 3d 3d 30 20 29 3b 0a 20 20 61 73 73  rter==0 );.  ass
22030 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65  ert( pC->isTable
22040 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21   || pOp->opcode!
22050 3d 4f 50 5f 52 6f 77 44 61 74 61 20 29 3b 0a 20  =OP_RowData );. 
22060 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 49   assert( pC->isI
22070 6e 64 65 78 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63  ndex || pOp->opc
22080 6f 64 65 3d 3d 4f 50 5f 52 6f 77 44 61 74 61 20  ode==OP_RowData 
22090 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  );.  assert( pC!
220a0 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
220b0 70 43 2d 3e 6e 75 6c 6c 52 6f 77 3d 3d 30 20 29  pC->nullRow==0 )
220c0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
220d0 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67 3d 3d  pseudoTableReg==
220e0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 21  0 );.  assert( !
220f0 70 43 2d 3e 69 73 53 6f 72 74 65 72 20 29 3b 0a  pC->isSorter );.
22100 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43    assert( pC->pC
22110 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 70 43  ursor!=0 );.  pC
22120 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f  rsr = pC->pCurso
22130 72 3b 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c  r;.  assert( sql
22140 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 49  ite3BtreeCursorI
22150 73 56 61 6c 69 64 28 70 43 72 73 72 29 20 29 3b  sValid(pCrsr) );
22160 0a 0a 20 20 2f 2a 20 54 68 65 20 4f 50 5f 52 6f  ..  /* The OP_Ro
22170 77 4b 65 79 20 61 6e 64 20 4f 50 5f 52 6f 77 44  wKey and OP_RowD
22180 61 74 61 20 6f 70 63 6f 64 65 73 20 61 6c 77 61  ata opcodes alwa
22190 79 73 20 66 6f 6c 6c 6f 77 20 4f 50 5f 4e 6f 74  ys follow OP_Not
221a0 45 78 69 73 74 73 20 6f 72 0a 20 20 2a 2a 20 4f  Exists or.  ** O
221b0 50 5f 52 65 77 69 6e 64 2f 4f 70 5f 4e 65 78 74  P_Rewind/Op_Next
221c0 20 77 69 74 68 20 6e 6f 20 69 6e 74 65 72 76 65   with no interve
221d0 6e 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e  ning instruction
221e0 73 20 74 68 61 74 20 6d 69 67 68 74 20 69 6e 76  s that might inv
221f0 61 6c 69 64 61 74 65 0a 20 20 2a 2a 20 74 68 65  alidate.  ** the
22200 20 63 75 72 73 6f 72 2e 20 20 48 65 6e 63 65 20   cursor.  Hence 
22210 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 71  the following sq
22220 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d  lite3VdbeCursorM
22230 6f 76 65 74 6f 28 29 20 63 61 6c 6c 20 69 73 20  oveto() call is 
22240 61 6c 77 61 79 73 0a 20 20 2a 2a 20 61 20 6e 6f  always.  ** a no
22250 2d 6f 70 20 61 6e 64 20 63 61 6e 20 6e 65 76 65  -op and can neve
22260 72 20 66 61 69 6c 2e 20 20 42 75 74 20 77 65 20  r fail.  But we 
22270 6c 65 61 76 65 20 69 74 20 69 6e 20 70 6c 61 63  leave it in plac
22280 65 20 61 73 20 61 20 73 61 66 65 74 79 2e 0a 20  e as a safety.. 
22290 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 43   */.  assert( pC
222a0 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
222b0 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 73 71  ==0 );.  rc = sq
222c0 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d  lite3VdbeCursorM
222d0 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20 69 66 28  oveto(pC);.  if(
222e0 20 4e 45 56 45 52 28 72 63 21 3d 53 51 4c 49 54   NEVER(rc!=SQLIT
222f0 45 5f 4f 4b 29 20 29 20 67 6f 74 6f 20 61 62 6f  E_OK) ) goto abo
22300 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
22310 0a 0a 20 20 69 66 28 20 70 43 2d 3e 69 73 49 6e  ..  if( pC->isIn
22320 64 65 78 20 29 7b 0a 20 20 20 20 61 73 73 65 72  dex ){.    asser
22330 74 28 20 21 70 43 2d 3e 69 73 54 61 62 6c 65 20  t( !pC->isTable 
22340 29 3b 0a 20 20 20 20 56 56 41 5f 4f 4e 4c 59 28  );.    VVA_ONLY(
22350 72 63 20 3d 29 20 73 71 6c 69 74 65 33 42 74 72  rc =) sqlite3Btr
22360 65 65 4b 65 79 53 69 7a 65 28 70 43 72 73 72 2c  eeKeySize(pCrsr,
22370 20 26 6e 36 34 29 3b 0a 20 20 20 20 61 73 73 65   &n64);.    asse
22380 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  rt( rc==SQLITE_O
22390 4b 20 29 3b 20 20 20 20 2f 2a 20 54 72 75 65 20  K );    /* True 
223a0 62 65 63 61 75 73 65 20 6f 66 20 43 75 72 73 6f  because of Curso
223b0 72 4d 6f 76 65 74 6f 28 29 20 63 61 6c 6c 20 61  rMoveto() call a
223c0 62 6f 76 65 20 2a 2f 0a 20 20 20 20 69 66 28 20  bove */.    if( 
223d0 6e 36 34 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53  n64>db->aLimit[S
223e0 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47  QLITE_LIMIT_LENG
223f0 54 48 5d 20 29 7b 0a 20 20 20 20 20 20 67 6f 74  TH] ){.      got
22400 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 20 20 7d  o too_big;.    }
22410 0a 20 20 20 20 6e 20 3d 20 28 75 33 32 29 6e 36  .    n = (u32)n6
22420 34 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  4;.  }else{.    
22430 56 56 41 5f 4f 4e 4c 59 28 72 63 20 3d 29 20 73  VVA_ONLY(rc =) s
22440 71 6c 69 74 65 33 42 74 72 65 65 44 61 74 61 53  qlite3BtreeDataS
22450 69 7a 65 28 70 43 72 73 72 2c 20 26 6e 29 3b 0a  ize(pCrsr, &n);.
22460 20 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d      assert( rc==
22470 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 20 20 20  SQLITE_OK );    
22480 2f 2a 20 44 61 74 61 53 69 7a 65 28 29 20 63 61  /* DataSize() ca
22490 6e 6e 6f 74 20 66 61 69 6c 20 2a 2f 0a 20 20 20  nnot fail */.   
224a0 20 69 66 28 20 6e 3e 28 75 33 32 29 64 62 2d 3e   if( n>(u32)db->
224b0 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49  aLimit[SQLITE_LI
224c0 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20  MIT_LENGTH] ){. 
224d0 20 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69       goto too_bi
224e0 67 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69  g;.    }.  }.  i
224f0 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  f( sqlite3VdbeMe
22500 6d 47 72 6f 77 28 70 4f 75 74 2c 20 6e 2c 20 30  mGrow(pOut, n, 0
22510 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f  ) ){.    goto no
22520 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 70 4f 75 74  _mem;.  }.  pOut
22530 2d 3e 6e 20 3d 20 6e 3b 0a 20 20 4d 65 6d 53 65  ->n = n;.  MemSe
22540 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20  tTypeFlag(pOut, 
22550 4d 45 4d 5f 42 6c 6f 62 29 3b 0a 20 20 69 66 28  MEM_Blob);.  if(
22560 20 70 43 2d 3e 69 73 49 6e 64 65 78 20 29 7b 0a   pC->isIndex ){.
22570 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
22580 42 74 72 65 65 4b 65 79 28 70 43 72 73 72 2c 20  BtreeKey(pCrsr, 
22590 30 2c 20 6e 2c 20 70 4f 75 74 2d 3e 7a 29 3b 0a  0, n, pOut->z);.
225a0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72 63 20    }else{.    rc 
225b0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 44 61  = sqlite3BtreeDa
225c0 74 61 28 70 43 72 73 72 2c 20 30 2c 20 6e 2c 20  ta(pCrsr, 0, n, 
225d0 70 4f 75 74 2d 3e 7a 29 3b 0a 20 20 7d 0a 20 20  pOut->z);.  }.  
225e0 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 53 51 4c 49  pOut->enc = SQLI
225f0 54 45 5f 55 54 46 38 3b 20 20 2f 2a 20 49 6e 20  TE_UTF8;  /* In 
22600 63 61 73 65 20 74 68 65 20 62 6c 6f 62 20 69 73  case the blob is
22610 20 65 76 65 72 20 63 61 73 74 20 74 6f 20 74 65   ever cast to te
22620 78 74 20 2a 2f 0a 20 20 55 50 44 41 54 45 5f 4d  xt */.  UPDATE_M
22630 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74  AX_BLOBSIZE(pOut
22640 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
22650 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 69 64 20  * Opcode: Rowid 
22660 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
22670 2a 20 53 74 6f 72 65 20 69 6e 20 72 65 67 69 73  * Store in regis
22680 74 65 72 20 50 32 20 61 6e 20 69 6e 74 65 67 65  ter P2 an intege
22690 72 20 77 68 69 63 68 20 69 73 20 74 68 65 20 6b  r which is the k
226a0 65 79 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  ey of the table 
226b0 65 6e 74 72 79 20 74 68 61 74 0a 2a 2a 20 50 31  entry that.** P1
226c0 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f   is currently po
226d0 69 6e 74 20 74 6f 2e 0a 2a 2a 0a 2a 2a 20 50 31  int to..**.** P1
226e0 20 63 61 6e 20 62 65 20 65 69 74 68 65 72 20 61   can be either a
226f0 6e 20 6f 72 64 69 6e 61 72 79 20 74 61 62 6c 65  n ordinary table
22700 20 6f 72 20 61 20 76 69 72 74 75 61 6c 20 74 61   or a virtual ta
22710 62 6c 65 2e 20 20 54 68 65 72 65 20 75 73 65 64  ble.  There used
22720 20 74 6f 0a 2a 2a 20 62 65 20 61 20 73 65 70 61   to.** be a sepa
22730 72 61 74 65 20 4f 50 5f 56 52 6f 77 69 64 20 6f  rate OP_VRowid o
22740 70 63 6f 64 65 20 66 6f 72 20 75 73 65 20 77 69  pcode for use wi
22750 74 68 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  th virtual table
22760 73 2c 20 62 75 74 20 74 68 69 73 0a 2a 2a 20 6f  s, but this.** o
22770 6e 65 20 6f 70 63 6f 64 65 20 6e 6f 77 20 77 6f  ne opcode now wo
22780 72 6b 73 20 66 6f 72 20 62 6f 74 68 20 74 61 62  rks for both tab
22790 6c 65 20 74 79 70 65 73 2e 0a 2a 2f 0a 63 61 73  le types..*/.cas
227a0 65 20 4f 50 5f 52 6f 77 69 64 3a 20 7b 20 20 20  e OP_Rowid: {   
227b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
227c0 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65   out2-prerelease
227d0 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72   */.  VdbeCursor
227e0 20 2a 70 43 3b 0a 20 20 69 36 34 20 76 3b 0a 20   *pC;.  i64 v;. 
227f0 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70   sqlite3_vtab *p
22800 56 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71  Vtab;.  const sq
22810 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d  lite3_module *pM
22820 6f 64 75 6c 65 3b 0a 0a 20 20 61 73 73 65 72 74  odule;..  assert
22830 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
22840 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
22850 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
22860 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
22870 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
22880 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
22890 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67 3d  >pseudoTableReg=
228a0 3d 30 20 29 3b 0a 20 20 69 66 28 20 70 43 2d 3e  =0 );.  if( pC->
228b0 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 70  nullRow ){.    p
228c0 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
228d0 5f 4e 75 6c 6c 3b 0a 20 20 20 20 62 72 65 61 6b  _Null;.    break
228e0 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70 43  ;.  }else if( pC
228f0 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
22900 20 29 7b 0a 20 20 20 20 76 20 3d 20 70 43 2d 3e   ){.    v = pC->
22910 6d 6f 76 65 74 6f 54 61 72 67 65 74 3b 0a 23 69  movetoTarget;.#i
22920 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
22930 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20  T_VIRTUALTABLE. 
22940 20 7d 65 6c 73 65 20 69 66 28 20 70 43 2d 3e 70   }else if( pC->p
22950 56 74 61 62 43 75 72 73 6f 72 20 29 7b 0a 20 20  VtabCursor ){.  
22960 20 20 70 56 74 61 62 20 3d 20 70 43 2d 3e 70 56    pVtab = pC->pV
22970 74 61 62 43 75 72 73 6f 72 2d 3e 70 56 74 61 62  tabCursor->pVtab
22980 3b 0a 20 20 20 20 70 4d 6f 64 75 6c 65 20 3d 20  ;.    pModule = 
22990 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a  pVtab->pModule;.
229a0 20 20 20 20 61 73 73 65 72 74 28 20 70 4d 6f 64      assert( pMod
229b0 75 6c 65 2d 3e 78 52 6f 77 69 64 20 29 3b 0a 20  ule->xRowid );. 
229c0 20 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d     rc = pModule-
229d0 3e 78 52 6f 77 69 64 28 70 43 2d 3e 70 56 74 61  >xRowid(pC->pVta
229e0 62 43 75 72 73 6f 72 2c 20 26 76 29 3b 0a 20 20  bCursor, &v);.  
229f0 20 20 69 6d 70 6f 72 74 56 74 61 62 45 72 72 4d    importVtabErrM
22a00 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 23 65  sg(p, pVtab);.#e
22a10 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
22a20 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
22a30 20 2a 2f 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20   */.  }else{.   
22a40 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75   assert( pC->pCu
22a50 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 20 20 72  rsor!=0 );.    r
22a60 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43  c = sqlite3VdbeC
22a70 75 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b  ursorMoveto(pC);
22a80 0a 20 20 20 20 69 66 28 20 72 63 20 29 20 67 6f  .    if( rc ) go
22a90 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
22aa0 65 72 72 6f 72 3b 0a 20 20 20 20 69 66 28 20 70  error;.    if( p
22ab0 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20  C->rowidIsValid 
22ac0 29 7b 0a 20 20 20 20 20 20 76 20 3d 20 70 43 2d  ){.      v = pC-
22ad0 3e 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20 20 20  >lastRowid;.    
22ae0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 63 20  }else{.      rc 
22af0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65  = sqlite3BtreeKe
22b00 79 53 69 7a 65 28 70 43 2d 3e 70 43 75 72 73 6f  ySize(pC->pCurso
22b10 72 2c 20 26 76 29 3b 0a 20 20 20 20 20 20 61 73  r, &v);.      as
22b20 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45  sert( rc==SQLITE
22b30 5f 4f 4b 20 29 3b 20 20 2f 2a 20 41 6c 77 61 79  _OK );  /* Alway
22b40 73 20 73 6f 20 62 65 63 61 75 73 65 20 6f 66 20  s so because of 
22b50 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29 20 61  CursorMoveto() a
22b60 62 6f 76 65 20 2a 2f 0a 20 20 20 20 7d 0a 20 20  bove */.    }.  
22b70 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20  }.  pOut->u.i = 
22b80 76 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  v;.  break;.}../
22b90 2a 20 4f 70 63 6f 64 65 3a 20 4e 75 6c 6c 52 6f  * Opcode: NullRo
22ba0 77 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a  w P1 * * * *.**.
22bb0 2a 2a 20 4d 6f 76 65 20 74 68 65 20 63 75 72 73  ** Move the curs
22bc0 6f 72 20 50 31 20 74 6f 20 61 20 6e 75 6c 6c 20  or P1 to a null 
22bd0 72 6f 77 2e 20 20 41 6e 79 20 4f 50 5f 43 6f 6c  row.  Any OP_Col
22be0 75 6d 6e 20 6f 70 65 72 61 74 69 6f 6e 73 0a 2a  umn operations.*
22bf0 2a 20 74 68 61 74 20 6f 63 63 75 72 20 77 68 69  * that occur whi
22c00 6c 65 20 74 68 65 20 63 75 72 73 6f 72 20 69 73  le the cursor is
22c10 20 6f 6e 20 74 68 65 20 6e 75 6c 6c 20 72 6f 77   on the null row
22c20 20 77 69 6c 6c 20 61 6c 77 61 79 73 0a 2a 2a 20   will always.** 
22c30 77 72 69 74 65 20 61 20 4e 55 4c 4c 2e 0a 2a 2f  write a NULL..*/
22c40 0a 63 61 73 65 20 4f 50 5f 4e 75 6c 6c 52 6f 77  .case OP_NullRow
22c50 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  : {.  VdbeCursor
22c60 20 2a 70 43 3b 0a 0a 20 20 61 73 73 65 72 74 28   *pC;..  assert(
22c70 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
22c80 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
22c90 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
22ca0 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
22cb0 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
22cc0 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20  ;.  pC->nullRow 
22cd0 3d 20 31 3b 0a 20 20 70 43 2d 3e 72 6f 77 69 64  = 1;.  pC->rowid
22ce0 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 61  IsValid = 0;.  a
22cf0 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75 72 73  ssert( pC->pCurs
22d00 6f 72 20 7c 7c 20 70 43 2d 3e 70 56 74 61 62 43  or || pC->pVtabC
22d10 75 72 73 6f 72 20 29 3b 0a 20 20 69 66 28 20 70  ursor );.  if( p
22d20 43 2d 3e 70 43 75 72 73 6f 72 20 29 7b 0a 20 20  C->pCursor ){.  
22d30 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 6c    sqlite3BtreeCl
22d40 65 61 72 43 75 72 73 6f 72 28 70 43 2d 3e 70 43  earCursor(pC->pC
22d50 75 72 73 6f 72 29 3b 0a 20 20 7d 0a 20 20 62 72  ursor);.  }.  br
22d60 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
22d70 65 3a 20 4c 61 73 74 20 50 31 20 50 32 20 2a 20  e: Last P1 P2 * 
22d80 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e 65  * *.**.** The ne
22d90 78 74 20 75 73 65 20 6f 66 20 74 68 65 20 52 6f  xt use of the Ro
22da0 77 69 64 20 6f 72 20 43 6f 6c 75 6d 6e 20 6f 72  wid or Column or
22db0 20 4e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   Next instructio
22dc0 6e 20 66 6f 72 20 50 31 20 0a 2a 2a 20 77 69 6c  n for P1 .** wil
22dd0 6c 20 72 65 66 65 72 20 74 6f 20 74 68 65 20 6c  l refer to the l
22de0 61 73 74 20 65 6e 74 72 79 20 69 6e 20 74 68 65  ast entry in the
22df0 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20   database table 
22e00 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a 20 49 66 20  or index..** If 
22e10 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  the table or ind
22e20 65 78 20 69 73 20 65 6d 70 74 79 20 61 6e 64 20  ex is empty and 
22e30 50 32 3e 30 2c 20 74 68 65 6e 20 6a 75 6d 70 20  P2>0, then jump 
22e40 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50  immediately to P
22e50 32 2e 0a 2a 2a 20 49 66 20 50 32 20 69 73 20 30  2..** If P2 is 0
22e60 20 6f 72 20 69 66 20 74 68 65 20 74 61 62 6c 65   or if the table
22e70 20 6f 72 20 69 6e 64 65 78 20 69 73 20 6e 6f 74   or index is not
22e80 20 65 6d 70 74 79 2c 20 66 61 6c 6c 20 74 68 72   empty, fall thr
22e90 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66  ough.** to the f
22ea0 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75 63  ollowing instruc
22eb0 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  tion..*/.case OP
22ec0 5f 4c 61 73 74 3a 20 7b 20 20 20 20 20 20 20 20  _Last: {        
22ed0 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62  /* jump */.  Vdb
22ee0 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42  eCursor *pC;.  B
22ef0 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a  tCursor *pCrsr;.
22f00 20 20 69 6e 74 20 72 65 73 3b 0a 0a 20 20 61 73    int res;..  as
22f10 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
22f20 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
22f30 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
22f40 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
22f50 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
22f60 21 3d 30 20 29 3b 0a 20 20 70 43 72 73 72 20 3d  !=0 );.  pCrsr =
22f70 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20   pC->pCursor;.  
22f80 72 65 73 20 3d 20 30 3b 0a 20 20 69 66 28 20 41  res = 0;.  if( A
22f90 4c 57 41 59 53 28 70 43 72 73 72 21 3d 30 29 20  LWAYS(pCrsr!=0) 
22fa0 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  ){.    rc = sqli
22fb0 74 65 33 42 74 72 65 65 4c 61 73 74 28 70 43 72  te3BtreeLast(pCr
22fc0 73 72 2c 20 26 72 65 73 29 3b 0a 20 20 7d 0a 20  sr, &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 64 65  u8)res;.  pC->de
22ff0 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30  ferredMoveto = 0
23000 3b 0a 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56  ;.  pC->rowidIsV
23010 61 6c 69 64 20 3d 20 30 3b 0a 20 20 70 43 2d 3e  alid = 0;.  pC->
23020 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
23030 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 69 66 28  CHE_STALE;.  if(
23040 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 72 65   pOp->p2>0 && re
23050 73 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f  s ){.    pc = pO
23060 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20  p->p2 - 1;.  }. 
23070 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f   break;.}.../* O
23080 70 63 6f 64 65 3a 20 53 6f 72 74 20 50 31 20 50  pcode: Sort P1 P
23090 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68  2 * * *.**.** Th
230a0 69 73 20 6f 70 63 6f 64 65 20 64 6f 65 73 20 65  is opcode does e
230b0 78 61 63 74 6c 79 20 74 68 65 20 73 61 6d 65 20  xactly the same 
230c0 74 68 69 6e 67 20 61 73 20 4f 50 5f 52 65 77 69  thing as OP_Rewi
230d0 6e 64 20 65 78 63 65 70 74 20 74 68 61 74 0a 2a  nd except that.*
230e0 2a 20 69 74 20 69 6e 63 72 65 6d 65 6e 74 73 20  * it increments 
230f0 61 6e 20 75 6e 64 6f 63 75 6d 65 6e 74 65 64 20  an undocumented 
23100 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 20  global variable 
23110 75 73 65 64 20 66 6f 72 20 74 65 73 74 69 6e 67  used for testing
23120 2e 0a 2a 2a 0a 2a 2a 20 53 6f 72 74 69 6e 67 20  ..**.** Sorting 
23130 69 73 20 61 63 63 6f 6d 70 6c 69 73 68 65 64 20  is accomplished 
23140 62 79 20 77 72 69 74 69 6e 67 20 72 65 63 6f 72  by writing recor
23150 64 73 20 69 6e 74 6f 20 61 20 73 6f 72 74 69 6e  ds into a sortin
23160 67 20 69 6e 64 65 78 2c 0a 2a 2a 20 74 68 65 6e  g index,.** then
23170 20 72 65 77 69 6e 64 69 6e 67 20 74 68 61 74 20   rewinding that 
23180 69 6e 64 65 78 20 61 6e 64 20 70 6c 61 79 69 6e  index and playin
23190 67 20 69 74 20 62 61 63 6b 20 66 72 6f 6d 20 62  g it back from b
231a0 65 67 69 6e 6e 69 6e 67 20 74 6f 0a 2a 2a 20 65  eginning to.** e
231b0 6e 64 2e 20 20 57 65 20 75 73 65 20 74 68 65 20  nd.  We use the 
231c0 4f 50 5f 53 6f 72 74 20 6f 70 63 6f 64 65 20 69  OP_Sort opcode i
231d0 6e 73 74 65 61 64 20 6f 66 20 4f 50 5f 52 65 77  nstead of OP_Rew
231e0 69 6e 64 20 74 6f 20 64 6f 20 74 68 65 0a 2a 2a  ind to do the.**
231f0 20 72 65 77 69 6e 64 69 6e 67 20 73 6f 20 74 68   rewinding so th
23200 61 74 20 74 68 65 20 67 6c 6f 62 61 6c 20 76 61  at the global va
23210 72 69 61 62 6c 65 20 77 69 6c 6c 20 62 65 20 69  riable will be i
23220 6e 63 72 65 6d 65 6e 74 65 64 20 61 6e 64 0a 2a  ncremented and.*
23230 2a 20 72 65 67 72 65 73 73 69 6f 6e 20 74 65 73  * regression tes
23240 74 73 20 63 61 6e 20 64 65 74 65 72 6d 69 6e 65  ts can determine
23250 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
23260 74 68 65 20 6f 70 74 69 6d 69 7a 65 72 20 69 73  the optimizer is
23270 0a 2a 2a 20 63 6f 72 72 65 63 74 6c 79 20 6f 70  .** correctly op
23280 74 69 6d 69 7a 69 6e 67 20 6f 75 74 20 73 6f 72  timizing out sor
23290 74 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  ts..*/.case OP_S
232a0 6f 72 74 65 72 53 6f 72 74 3a 20 20 20 20 2f 2a  orterSort:    /*
232b0 20 6a 75 6d 70 20 2a 2f 0a 23 69 66 64 65 66 20   jump */.#ifdef 
232c0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 4d 45 52 47  SQLITE_OMIT_MERG
232d0 45 5f 53 4f 52 54 0a 20 20 70 4f 70 2d 3e 6f 70  E_SORT.  pOp->op
232e0 63 6f 64 65 20 3d 20 4f 50 5f 53 6f 72 74 3b 0a  code = OP_Sort;.
232f0 23 65 6e 64 69 66 0a 63 61 73 65 20 4f 50 5f 53  #endif.case OP_S
23300 6f 72 74 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  ort: {        /*
23310 20 6a 75 6d 70 20 2a 2f 0a 23 69 66 64 65 66 20   jump */.#ifdef 
23320 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 73 71  SQLITE_TEST.  sq
23330 6c 69 74 65 33 5f 73 6f 72 74 5f 63 6f 75 6e 74  lite3_sort_count
23340 2b 2b 3b 0a 20 20 73 71 6c 69 74 65 33 5f 73 65  ++;.  sqlite3_se
23350 61 72 63 68 5f 63 6f 75 6e 74 2d 2d 3b 0a 23 65  arch_count--;.#e
23360 6e 64 69 66 0a 20 20 70 2d 3e 61 43 6f 75 6e 74  ndif.  p->aCount
23370 65 72 5b 53 51 4c 49 54 45 5f 53 54 4d 54 53 54  er[SQLITE_STMTST
23380 41 54 55 53 5f 53 4f 52 54 2d 31 5d 2b 2b 3b 0a  ATUS_SORT-1]++;.
23390 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67    /* Fall throug
233a0 68 20 69 6e 74 6f 20 4f 50 5f 52 65 77 69 6e 64  h into OP_Rewind
233b0 20 2a 2f 0a 7d 0a 2f 2a 20 4f 70 63 6f 64 65 3a   */.}./* Opcode:
233c0 20 52 65 77 69 6e 64 20 50 31 20 50 32 20 2a 20   Rewind P1 P2 * 
233d0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e 65  * *.**.** The ne
233e0 78 74 20 75 73 65 20 6f 66 20 74 68 65 20 52 6f  xt use of the Ro
233f0 77 69 64 20 6f 72 20 43 6f 6c 75 6d 6e 20 6f 72  wid or Column or
23400 20 4e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   Next instructio
23410 6e 20 66 6f 72 20 50 31 20 0a 2a 2a 20 77 69 6c  n for P1 .** wil
23420 6c 20 72 65 66 65 72 20 74 6f 20 74 68 65 20 66  l refer to the f
23430 69 72 73 74 20 65 6e 74 72 79 20 69 6e 20 74 68  irst entry in th
23440 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65  e database table
23450 20 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a 20 49 66   or index..** If
23460 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e   the table or in
23470 64 65 78 20 69 73 20 65 6d 70 74 79 20 61 6e 64  dex is empty and
23480 20 50 32 3e 30 2c 20 74 68 65 6e 20 6a 75 6d 70   P2>0, then jump
23490 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20   immediately to 
234a0 50 32 2e 0a 2a 2a 20 49 66 20 50 32 20 69 73 20  P2..** If P2 is 
234b0 30 20 6f 72 20 69 66 20 74 68 65 20 74 61 62 6c  0 or if the tabl
234c0 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20 6e 6f  e or index is no
234d0 74 20 65 6d 70 74 79 2c 20 66 61 6c 6c 20 74 68  t empty, fall th
234e0 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20  rough.** to the 
234f0 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75  following instru
23500 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ction..*/.case O
23510 50 5f 52 65 77 69 6e 64 3a 20 7b 20 20 20 20 20  P_Rewind: {     
23520 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
23530 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
23540 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73    BtCursor *pCrs
23550 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 0a 20  r;.  int res;.. 
23560 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
23570 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
23580 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  ->nCursor );.  p
23590 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
235a0 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
235b0 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65   pC!=0 );.  asse
235c0 72 74 28 20 70 43 2d 3e 69 73 53 6f 72 74 65 72  rt( pC->isSorter
235d0 3d 3d 28 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  ==(pOp->opcode==
235e0 4f 50 5f 53 6f 72 74 65 72 53 6f 72 74 29 20 29  OP_SorterSort) )
235f0 3b 0a 20 20 72 65 73 20 3d 20 31 3b 0a 20 20 69  ;.  res = 1;.  i
23600 66 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 20  f( isSorter(pC) 
23610 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  ){.    rc = sqli
23620 74 65 33 56 64 62 65 53 6f 72 74 65 72 52 65 77  te3VdbeSorterRew
23630 69 6e 64 28 64 62 2c 20 70 43 2c 20 26 72 65 73  ind(db, pC, &res
23640 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
23650 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72  pCrsr = pC->pCur
23660 73 6f 72 3b 0a 20 20 20 20 61 73 73 65 72 74 28  sor;.    assert(
23670 20 70 43 72 73 72 20 29 3b 0a 20 20 20 20 72 63   pCrsr );.    rc
23680 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 46   = sqlite3BtreeF
23690 69 72 73 74 28 70 43 72 73 72 2c 20 26 72 65 73  irst(pCrsr, &res
236a0 29 3b 0a 20 20 20 20 70 43 2d 3e 61 74 46 69 72  );.    pC->atFir
236b0 73 74 20 3d 20 72 65 73 3d 3d 30 20 3f 31 3a 30  st = res==0 ?1:0
236c0 3b 0a 20 20 20 20 70 43 2d 3e 64 65 66 65 72 72  ;.    pC->deferr
236d0 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20  edMoveto = 0;.  
236e0 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
236f0 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
23700 0a 20 20 20 20 70 43 2d 3e 72 6f 77 69 64 49 73  .    pC->rowidIs
23710 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 7d 0a 20  Valid = 0;.  }. 
23720 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 28   pC->nullRow = (
23730 75 38 29 72 65 73 3b 0a 20 20 61 73 73 65 72 74  u8)res;.  assert
23740 28 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70  ( pOp->p2>0 && p
23750 4f 70 2d 3e 70 32 3c 70 2d 3e 6e 4f 70 20 29 3b  Op->p2<p->nOp );
23760 0a 20 20 69 66 28 20 72 65 73 20 29 7b 0a 20 20  .  if( res ){.  
23770 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
23780 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b   1;.  }.  break;
23790 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e  .}../* Opcode: N
237a0 65 78 74 20 50 31 20 50 32 20 2a 20 50 34 20 50  ext P1 P2 * P4 P
237b0 35 0a 2a 2a 0a 2a 2a 20 41 64 76 61 6e 63 65 20  5.**.** Advance 
237c0 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61  cursor P1 so tha
237d0 74 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74  t it points to t
237e0 68 65 20 6e 65 78 74 20 6b 65 79 2f 64 61 74 61  he next key/data
237f0 20 70 61 69 72 20 69 6e 20 69 74 73 0a 2a 2a 20   pair in its.** 
23800 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 20  table or index. 
23810 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f   If there are no
23820 20 6d 6f 72 65 20 6b 65 79 2f 76 61 6c 75 65 20   more key/value 
23830 70 61 69 72 73 20 74 68 65 6e 20 66 61 6c 6c 20  pairs then fall 
23840 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68  through.** to th
23850 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74  e following inst
23860 72 75 63 74 69 6f 6e 2e 20 20 42 75 74 20 69 66  ruction.  But if
23870 20 74 68 65 20 63 75 72 73 6f 72 20 61 64 76 61   the cursor adva
23880 6e 63 65 20 77 61 73 20 73 75 63 63 65 73 73 66  nce was successf
23890 75 6c 2c 0a 2a 2a 20 6a 75 6d 70 20 69 6d 6d 65  ul,.** jump imme
238a0 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a  diately to P2..*
238b0 2a 0a 2a 2a 20 54 68 65 20 50 31 20 63 75 72 73  *.** The P1 curs
238c0 6f 72 20 6d 75 73 74 20 62 65 20 66 6f 72 20 61  or must be for a
238d0 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74   real table, not
238e0 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e   a pseudo-table.
238f0 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 6c 77  .**.** P4 is alw
23900 61 79 73 20 6f 66 20 74 79 70 65 20 50 34 5f 41  ays of type P4_A
23910 44 56 41 4e 43 45 2e 20 54 68 65 20 66 75 6e 63  DVANCE. The func
23920 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20 70 6f 69  tion pointer poi
23930 6e 74 73 20 74 6f 0a 2a 2a 20 73 71 6c 69 74 65  nts to.** sqlite
23940 33 42 74 72 65 65 4e 65 78 74 28 29 2e 0a 2a 2a  3BtreeNext()..**
23950 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 70 6f 73  .** If P5 is pos
23960 69 74 69 76 65 20 61 6e 64 20 74 68 65 20 6a 75  itive and the ju
23970 6d 70 20 69 73 20 74 61 6b 65 6e 2c 20 74 68 65  mp is taken, the
23980 6e 20 65 76 65 6e 74 20 63 6f 75 6e 74 65 72 0a  n event counter.
23990 2a 2a 20 6e 75 6d 62 65 72 20 50 35 2d 31 20 69  ** number P5-1 i
239a0 6e 20 74 68 65 20 70 72 65 70 61 72 65 64 20 73  n the prepared s
239b0 74 61 74 65 6d 65 6e 74 20 69 73 20 69 6e 63 72  tatement is incr
239c0 65 6d 65 6e 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 53  emented..**.** S
239d0 65 65 20 61 6c 73 6f 3a 20 50 72 65 76 0a 2a 2f  ee also: Prev.*/
239e0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 72 65 76  ./* Opcode: Prev
239f0 20 50 31 20 50 32 20 2a 20 2a 20 50 35 0a 2a 2a   P1 P2 * * P5.**
23a00 0a 2a 2a 20 42 61 63 6b 20 75 70 20 63 75 72 73  .** Back up curs
23a10 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20 69 74  or P1 so that it
23a20 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 70   points to the p
23a30 72 65 76 69 6f 75 73 20 6b 65 79 2f 64 61 74 61  revious key/data
23a40 20 70 61 69 72 20 69 6e 20 69 74 73 0a 2a 2a 20   pair in its.** 
23a50 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 20  table or index. 
23a60 20 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20   If there is no 
23a70 70 72 65 76 69 6f 75 73 20 6b 65 79 2f 76 61 6c  previous key/val
23a80 75 65 20 70 61 69 72 73 20 74 68 65 6e 20 66 61  ue pairs then fa
23a90 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f  ll through.** to
23aa0 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69   the following i
23ab0 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 42 75 74  nstruction.  But
23ac0 20 69 66 20 74 68 65 20 63 75 72 73 6f 72 20 62   if the cursor b
23ad0 61 63 6b 75 70 20 77 61 73 20 73 75 63 63 65 73  ackup was succes
23ae0 73 66 75 6c 2c 0a 2a 2a 20 6a 75 6d 70 20 69 6d  sful,.** jump im
23af0 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e  mediately to P2.
23b00 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 31 20 63 75  .**.** The P1 cu
23b10 72 73 6f 72 20 6d 75 73 74 20 62 65 20 66 6f 72  rsor must be for
23b20 20 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e   a real table, n
23b30 6f 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c  ot a pseudo-tabl
23b40 65 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61  e..**.** P4 is a
23b50 6c 77 61 79 73 20 6f 66 20 74 79 70 65 20 50 34  lways of type P4
23b60 5f 41 44 56 41 4e 43 45 2e 20 54 68 65 20 66 75  _ADVANCE. The fu
23b70 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20 70  nction pointer p
23b80 6f 69 6e 74 73 20 74 6f 0a 2a 2a 20 73 71 6c 69  oints to.** sqli
23b90 74 65 33 42 74 72 65 65 50 72 65 76 69 6f 75 73  te3BtreePrevious
23ba0 28 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20  ()..**.** If P5 
23bb0 69 73 20 70 6f 73 69 74 69 76 65 20 61 6e 64 20  is positive and 
23bc0 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65  the jump is take
23bd0 6e 2c 20 74 68 65 6e 20 65 76 65 6e 74 20 63 6f  n, then event co
23be0 75 6e 74 65 72 0a 2a 2a 20 6e 75 6d 62 65 72 20  unter.** number 
23bf0 50 35 2d 31 20 69 6e 20 74 68 65 20 70 72 65 70  P5-1 in the prep
23c00 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20 69  ared statement i
23c10 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e 0a 2a  s incremented..*
23c20 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72  /.case OP_Sorter
23c30 4e 65 78 74 3a 20 20 20 20 2f 2a 20 6a 75 6d 70  Next:    /* jump
23c40 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54   */.#ifdef SQLIT
23c50 45 5f 4f 4d 49 54 5f 4d 45 52 47 45 5f 53 4f 52  E_OMIT_MERGE_SOR
23c60 54 0a 20 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20  T.  pOp->opcode 
23c70 3d 20 4f 50 5f 4e 65 78 74 3b 0a 23 65 6e 64 69  = OP_Next;.#endi
23c80 66 0a 63 61 73 65 20 4f 50 5f 50 72 65 76 3a 20  f.case OP_Prev: 
23c90 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
23ca0 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 78 74   */.case OP_Next
23cb0 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  : {        /* ju
23cc0 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73  mp */.  VdbeCurs
23cd0 6f 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65  or *pC;.  int re
23ce0 73 3b 0a 0a 20 20 43 48 45 43 4b 5f 46 4f 52 5f  s;..  CHECK_FOR_
23cf0 49 4e 54 45 52 52 55 50 54 3b 0a 20 20 61 73 73  INTERRUPT;.  ass
23d00 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
23d10 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
23d20 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72  ursor );.  asser
23d30 74 28 20 70 4f 70 2d 3e 70 35 3c 3d 41 72 72 61  t( pOp->p5<=Arra
23d40 79 53 69 7a 65 28 70 2d 3e 61 43 6f 75 6e 74 65  ySize(p->aCounte
23d50 72 29 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  r) );.  pC = p->
23d60 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
23d70 20 20 69 66 28 20 70 43 3d 3d 30 20 29 7b 0a 20    if( pC==0 ){. 
23d80 20 20 20 62 72 65 61 6b 3b 20 20 2f 2a 20 53 65     break;  /* Se
23d90 65 20 74 69 63 6b 65 74 20 23 32 32 37 33 20 2a  e ticket #2273 *
23da0 2f 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20  /.  }.  assert( 
23db0 70 43 2d 3e 69 73 53 6f 72 74 65 72 3d 3d 28 70  pC->isSorter==(p
23dc0 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53  Op->opcode==OP_S
23dd0 6f 72 74 65 72 4e 65 78 74 29 20 29 3b 0a 20 20  orterNext) );.  
23de0 69 66 28 20 69 73 53 6f 72 74 65 72 28 70 43 29  if( isSorter(pC)
23df0 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
23e00 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
23e10 53 6f 72 74 65 72 4e 65 78 74 20 29 3b 0a 20 20  SorterNext );.  
23e20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
23e30 62 65 53 6f 72 74 65 72 4e 65 78 74 28 64 62 2c  beSorterNext(db,
23e40 20 70 43 2c 20 26 72 65 73 29 3b 0a 20 20 7d 65   pC, &res);.  }e
23e50 6c 73 65 7b 0a 20 20 20 20 72 65 73 20 3d 20 31  lse{.    res = 1
23e60 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  ;.    assert( pC
23e70 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
23e80 3d 3d 30 20 29 3b 0a 20 20 20 20 61 73 73 65 72  ==0 );.    asser
23e90 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 20 29  t( pC->pCursor )
23ea0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  ;.    assert( pO
23eb0 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e 65  p->opcode!=OP_Ne
23ec0 78 74 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78 41  xt || pOp->p4.xA
23ed0 64 76 61 6e 63 65 3d 3d 73 71 6c 69 74 65 33 42  dvance==sqlite3B
23ee0 74 72 65 65 4e 65 78 74 20 29 3b 0a 20 20 20 20  treeNext );.    
23ef0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63  assert( pOp->opc
23f00 6f 64 65 21 3d 4f 50 5f 50 72 65 76 20 7c 7c 20  ode!=OP_Prev || 
23f10 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61 6e 63 65  pOp->p4.xAdvance
23f20 3d 3d 73 71 6c 69 74 65 33 42 74 72 65 65 50 72  ==sqlite3BtreePr
23f30 65 76 69 6f 75 73 20 29 3b 0a 20 20 20 20 72 63  evious );.    rc
23f40 20 3d 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61   = pOp->p4.xAdva
23f50 6e 63 65 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c  nce(pC->pCursor,
23f60 20 26 72 65 73 29 3b 0a 20 20 7d 0a 20 20 70 43   &res);.  }.  pC
23f70 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 28 75 38 29  ->nullRow = (u8)
23f80 72 65 73 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65  res;.  pC->cache
23f90 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53  Status = CACHE_S
23fa0 54 41 4c 45 3b 0a 20 20 69 66 28 20 72 65 73 3d  TALE;.  if( res=
23fb0 3d 30 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70  =0 ){.    pc = p
23fc0 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20  Op->p2 - 1;.    
23fd0 69 66 28 20 70 4f 70 2d 3e 70 35 20 29 20 70 2d  if( pOp->p5 ) p-
23fe0 3e 61 43 6f 75 6e 74 65 72 5b 70 4f 70 2d 3e 70  >aCounter[pOp->p
23ff0 35 2d 31 5d 2b 2b 3b 0a 23 69 66 64 65 66 20 53  5-1]++;.#ifdef S
24000 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 20 20 73  QLITE_TEST.    s
24010 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f 63 6f  qlite3_search_co
24020 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a 20 20  unt++;.#endif.  
24030 7d 0a 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56  }.  pC->rowidIsV
24040 61 6c 69 64 20 3d 20 30 3b 0a 20 20 62 72 65 61  alid = 0;.  brea
24050 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
24060 20 49 64 78 49 6e 73 65 72 74 20 50 31 20 50 32   IdxInsert P1 P2
24070 20 50 33 20 2a 20 50 35 0a 2a 2a 0a 2a 2a 20 52   P3 * P5.**.** R
24080 65 67 69 73 74 65 72 20 50 32 20 68 6f 6c 64 73  egister P2 holds
24090 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 20 6b 65   an SQL index ke
240a0 79 20 6d 61 64 65 20 75 73 69 6e 67 20 74 68 65  y made using the
240b0 0a 2a 2a 20 4d 61 6b 65 52 65 63 6f 72 64 20 69  .** MakeRecord i
240c0 6e 73 74 72 75 63 74 69 6f 6e 73 2e 20 20 54 68  nstructions.  Th
240d0 69 73 20 6f 70 63 6f 64 65 20 77 72 69 74 65 73  is opcode writes
240e0 20 74 68 61 74 20 6b 65 79 0a 2a 2a 20 69 6e 74   that key.** int
240f0 6f 20 74 68 65 20 69 6e 64 65 78 20 50 31 2e 20  o the index P1. 
24100 20 44 61 74 61 20 66 6f 72 20 74 68 65 20 65 6e   Data for the en
24110 74 72 79 20 69 73 20 6e 69 6c 2e 0a 2a 2a 0a 2a  try is nil..**.*
24120 2a 20 50 33 20 69 73 20 61 20 66 6c 61 67 20 74  * P3 is a flag t
24130 68 61 74 20 70 72 6f 76 69 64 65 73 20 61 20 68  hat provides a h
24140 69 6e 74 20 74 6f 20 74 68 65 20 62 2d 74 72 65  int to the b-tre
24150 65 20 6c 61 79 65 72 20 74 68 61 74 20 74 68 69  e layer that thi
24160 73 0a 2a 2a 20 69 6e 73 65 72 74 20 69 73 20 6c  s.** insert is l
24170 69 6b 65 6c 79 20 74 6f 20 62 65 20 61 6e 20 61  ikely to be an a
24180 70 70 65 6e 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  ppend..**.** Thi
24190 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e  s instruction on
241a0 6c 79 20 77 6f 72 6b 73 20 66 6f 72 20 69 6e 64  ly works for ind
241b0 69 63 65 73 2e 20 20 54 68 65 20 65 71 75 69 76  ices.  The equiv
241c0 61 6c 65 6e 74 20 69 6e 73 74 72 75 63 74 69 6f  alent instructio
241d0 6e 0a 2a 2a 20 66 6f 72 20 74 61 62 6c 65 73 20  n.** for tables 
241e0 69 73 20 4f 50 5f 49 6e 73 65 72 74 2e 0a 2a 2f  is OP_Insert..*/
241f0 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72 49  .case OP_SorterI
24200 6e 73 65 72 74 3a 20 20 20 20 20 20 20 2f 2a 20  nsert:       /* 
24210 69 6e 32 20 2a 2f 0a 23 69 66 64 65 66 20 53 51  in2 */.#ifdef SQ
24220 4c 49 54 45 5f 4f 4d 49 54 5f 4d 45 52 47 45 5f  LITE_OMIT_MERGE_
24230 53 4f 52 54 0a 20 20 70 4f 70 2d 3e 6f 70 63 6f  SORT.  pOp->opco
24240 64 65 20 3d 20 4f 50 5f 49 64 78 49 6e 73 65 72  de = OP_IdxInser
24250 74 3b 0a 23 65 6e 64 69 66 0a 63 61 73 65 20 4f  t;.#endif.case O
24260 50 5f 49 64 78 49 6e 73 65 72 74 3a 20 7b 20 20  P_IdxInsert: {  
24270 20 20 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a        /* in2 */.
24280 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
24290 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43  ;.  BtCursor *pC
242a0 72 73 72 3b 0a 20 20 69 6e 74 20 6e 4b 65 79 3b  rsr;.  int nKey;
242b0 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
242c0 4b 65 79 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  Key;..  assert( 
242d0 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
242e0 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
242f0 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
24300 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
24310 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
24320 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69  .  assert( pC->i
24330 73 53 6f 72 74 65 72 3d 3d 28 70 4f 70 2d 3e 6f  sSorter==(pOp->o
24340 70 63 6f 64 65 3d 3d 4f 50 5f 53 6f 72 74 65 72  pcode==OP_Sorter
24350 49 6e 73 65 72 74 29 20 29 3b 0a 20 20 70 49 6e  Insert) );.  pIn
24360 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  2 = &aMem[pOp->p
24370 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49  2];.  assert( pI
24380 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n2->flags & MEM_
24390 42 6c 6f 62 20 29 3b 0a 20 20 70 43 72 73 72 20  Blob );.  pCrsr 
243a0 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20  = pC->pCursor;. 
243b0 20 69 66 28 20 41 4c 57 41 59 53 28 70 43 72 73   if( ALWAYS(pCrs
243c0 72 21 3d 30 29 20 29 7b 0a 20 20 20 20 61 73 73  r!=0) ){.    ass
243d0 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65  ert( pC->isTable
243e0 3d 3d 30 20 29 3b 0a 20 20 20 20 72 63 20 3d 20  ==0 );.    rc = 
243f0 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 32 29  ExpandBlob(pIn2)
24400 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51  ;.    if( rc==SQ
24410 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
24420 20 69 66 28 20 69 73 53 6f 72 74 65 72 28 70 43   if( isSorter(pC
24430 29 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20  ) ){.        rc 
24440 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72  = sqlite3VdbeSor
24450 74 65 72 57 72 69 74 65 28 64 62 2c 20 70 43 2c  terWrite(db, pC,
24460 20 70 49 6e 32 29 3b 0a 20 20 20 20 20 20 7d 65   pIn2);.      }e
24470 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 6e 4b 65  lse{.        nKe
24480 79 20 3d 20 70 49 6e 32 2d 3e 6e 3b 0a 20 20 20  y = pIn2->n;.   
24490 20 20 20 20 20 7a 4b 65 79 20 3d 20 70 49 6e 32       zKey = pIn2
244a0 2d 3e 7a 3b 0a 20 20 20 20 20 20 20 20 72 63 20  ->z;.        rc 
244b0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e  = sqlite3BtreeIn
244c0 73 65 72 74 28 70 43 72 73 72 2c 20 7a 4b 65 79  sert(pCrsr, zKey
244d0 2c 20 6e 4b 65 79 2c 20 22 22 2c 20 30 2c 20 30  , nKey, "", 0, 0
244e0 2c 20 70 4f 70 2d 3e 70 33 2c 20 0a 20 20 20 20  , pOp->p3, .    
244f0 20 20 20 20 20 20 20 20 28 28 70 4f 70 2d 3e 70          ((pOp->p
24500 35 20 26 20 4f 50 46 4c 41 47 5f 55 53 45 53 45  5 & OPFLAG_USESE
24510 45 4b 52 45 53 55 4c 54 29 20 3f 20 70 43 2d 3e  EKRESULT) ? pC->
24520 73 65 65 6b 52 65 73 75 6c 74 20 3a 20 30 29 0a  seekResult : 0).
24530 20 20 20 20 20 20 20 20 20 20 20 20 29 3b 0a 20              );. 
24540 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
24550 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
24560 6f 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 20 20  o==0 );.        
24570 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20  pC->cacheStatus 
24580 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20  = CACHE_STALE;. 
24590 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d       }.    }.  }
245a0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
245b0 4f 70 63 6f 64 65 3a 20 49 64 78 44 65 6c 65 74  Opcode: IdxDelet
245c0 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  e P1 P2 P3 * *.*
245d0 2a 0a 2a 2a 20 54 68 65 20 63 6f 6e 74 65 6e 74  *.** The content
245e0 20 6f 66 20 50 33 20 72 65 67 69 73 74 65 72 73   of P3 registers
245f0 20 73 74 61 72 74 69 6e 67 20 61 74 20 72 65 67   starting at reg
24600 69 73 74 65 72 20 50 32 20 66 6f 72 6d 0a 2a 2a  ister P2 form.**
24610 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64   an unpacked ind
24620 65 78 20 6b 65 79 2e 20 54 68 69 73 20 6f 70 63  ex key. This opc
24630 6f 64 65 20 72 65 6d 6f 76 65 73 20 74 68 61 74  ode removes that
24640 20 65 6e 74 72 79 20 66 72 6f 6d 20 74 68 65 20   entry from the 
24650 0a 2a 2a 20 69 6e 64 65 78 20 6f 70 65 6e 65 64  .** index opened
24660 20 62 79 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a   by cursor P1..*
24670 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 44 65 6c  /.case OP_IdxDel
24680 65 74 65 3a 20 7b 0a 20 20 56 64 62 65 43 75 72  ete: {.  VdbeCur
24690 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72  sor *pC;.  BtCur
246a0 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e  sor *pCrsr;.  in
246b0 74 20 72 65 73 3b 0a 20 20 55 6e 70 61 63 6b 65  t res;.  Unpacke
246c0 64 52 65 63 6f 72 64 20 72 3b 0a 0a 20 20 61 73  dRecord r;..  as
246d0 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20  sert( pOp->p3>0 
246e0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
246f0 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p2>0 && pOp->p
24700 32 2b 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d  2+pOp->p3<=p->nM
24710 65 6d 2b 31 20 29 3b 0a 20 20 61 73 73 65 72 74  em+1 );.  assert
24720 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
24730 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
24740 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
24750 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
24760 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
24770 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d  );.  pCrsr = pC-
24780 3e 70 43 75 72 73 6f 72 3b 0a 20 20 69 66 28 20  >pCursor;.  if( 
24790 41 4c 57 41 59 53 28 70 43 72 73 72 21 3d 30 29  ALWAYS(pCrsr!=0)
247a0 20 29 7b 0a 20 20 20 20 72 2e 70 4b 65 79 49 6e   ){.    r.pKeyIn
247b0 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66  fo = pC->pKeyInf
247c0 6f 3b 0a 20 20 20 20 72 2e 6e 46 69 65 6c 64 20  o;.    r.nField 
247d0 3d 20 28 75 31 36 29 70 4f 70 2d 3e 70 33 3b 0a  = (u16)pOp->p3;.
247e0 20 20 20 20 72 2e 66 6c 61 67 73 20 3d 20 30 3b      r.flags = 0;
247f0 0a 20 20 20 20 72 2e 61 4d 65 6d 20 3d 20 26 61  .    r.aMem = &a
24800 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 23 69  Mem[pOp->p2];.#i
24810 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
24820 47 0a 20 20 20 20 7b 20 69 6e 74 20 69 3b 20 66  G.    { int i; f
24830 6f 72 28 69 3d 30 3b 20 69 3c 72 2e 6e 46 69 65  or(i=0; i<r.nFie
24840 6c 64 3b 20 69 2b 2b 29 20 61 73 73 65 72 74 28  ld; i++) assert(
24850 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 72 2e 61   memIsValid(&r.a
24860 4d 65 6d 5b 69 5d 29 20 29 3b 20 7d 0a 23 65 6e  Mem[i]) ); }.#en
24870 64 69 66 0a 20 20 20 20 72 63 20 3d 20 73 71 6c  dif.    rc = sql
24880 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55  ite3BtreeMovetoU
24890 6e 70 61 63 6b 65 64 28 70 43 72 73 72 2c 20 26  npacked(pCrsr, &
248a0 72 2c 20 30 2c 20 30 2c 20 26 72 65 73 29 3b 0a  r, 0, 0, &res);.
248b0 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
248c0 54 45 5f 4f 4b 20 26 26 20 72 65 73 3d 3d 30 20  TE_OK && res==0 
248d0 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71  ){.      rc = sq
248e0 6c 69 74 65 33 42 74 72 65 65 44 65 6c 65 74 65  lite3BtreeDelete
248f0 28 70 43 72 73 72 29 3b 0a 20 20 20 20 7d 0a 20  (pCrsr);.    }. 
24900 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64     assert( pC->d
24910 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30  eferredMoveto==0
24920 20 29 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68   );.    pC->cach
24930 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
24940 53 54 41 4c 45 3b 0a 20 20 7d 0a 20 20 62 72 65  STALE;.  }.  bre
24950 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
24960 3a 20 49 64 78 52 6f 77 69 64 20 50 31 20 50 32  : IdxRowid P1 P2
24970 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69   * * *.**.** Wri
24980 74 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  te into register
24990 20 50 32 20 61 6e 20 69 6e 74 65 67 65 72 20 77   P2 an integer w
249a0 68 69 63 68 20 69 73 20 74 68 65 20 6c 61 73 74  hich is the last
249b0 20 65 6e 74 72 79 20 69 6e 20 74 68 65 20 72 65   entry in the re
249c0 63 6f 72 64 20 61 74 0a 2a 2a 20 74 68 65 20 65  cord at.** the e
249d0 6e 64 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20  nd of the index 
249e0 6b 65 79 20 70 6f 69 6e 74 65 64 20 74 6f 20 62  key pointed to b
249f0 79 20 63 75 72 73 6f 72 20 50 31 2e 20 20 54 68  y cursor P1.  Th
24a00 69 73 20 69 6e 74 65 67 65 72 20 73 68 6f 75 6c  is integer shoul
24a10 64 20 62 65 0a 2a 2a 20 74 68 65 20 72 6f 77 69  d be.** the rowi
24a20 64 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 65  d of the table e
24a30 6e 74 72 79 20 74 6f 20 77 68 69 63 68 20 74 68  ntry to which th
24a40 69 73 20 69 6e 64 65 78 20 65 6e 74 72 79 20 70  is index entry p
24a50 6f 69 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  oints..**.** See
24a60 20 61 6c 73 6f 3a 20 52 6f 77 69 64 2c 20 4d 61   also: Rowid, Ma
24a70 6b 65 52 65 63 6f 72 64 2e 0a 2a 2f 0a 63 61 73  keRecord..*/.cas
24a80 65 20 4f 50 5f 49 64 78 52 6f 77 69 64 3a 20 7b  e OP_IdxRowid: {
24a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
24aa0 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65   out2-prerelease
24ab0 20 2a 2f 0a 20 20 42 74 43 75 72 73 6f 72 20 2a   */.  BtCursor *
24ac0 70 43 72 73 72 3b 0a 20 20 56 64 62 65 43 75 72  pCrsr;.  VdbeCur
24ad0 73 6f 72 20 2a 70 43 3b 0a 20 20 69 36 34 20 72  sor *pC;.  i64 r
24ae0 6f 77 69 64 3b 0a 0a 20 20 61 73 73 65 72 74 28  owid;..  assert(
24af0 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
24b00 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
24b10 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
24b20 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
24b30 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
24b40 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e  ;.  pCrsr = pC->
24b50 70 43 75 72 73 6f 72 3b 0a 20 20 70 4f 75 74 2d  pCursor;.  pOut-
24b60 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c  >flags = MEM_Nul
24b70 6c 3b 0a 20 20 69 66 28 20 41 4c 57 41 59 53 28  l;.  if( ALWAYS(
24b80 70 43 72 73 72 21 3d 30 29 20 29 7b 0a 20 20 20  pCrsr!=0) ){.   
24b90 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
24ba0 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43  eCursorMoveto(pC
24bb0 29 3b 0a 20 20 20 20 69 66 28 20 4e 45 56 45 52  );.    if( NEVER
24bc0 28 72 63 29 20 29 20 67 6f 74 6f 20 61 62 6f 72  (rc) ) goto abor
24bd0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
24be0 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
24bf0 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d  deferredMoveto==
24c00 30 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  0 );.    assert(
24c10 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20   pC->isTable==0 
24c20 29 3b 0a 20 20 20 20 69 66 28 20 21 70 43 2d 3e  );.    if( !pC->
24c30 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 20  nullRow ){.     
24c40 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
24c50 65 49 64 78 52 6f 77 69 64 28 64 62 2c 20 70 43  eIdxRowid(db, pC
24c60 72 73 72 2c 20 26 72 6f 77 69 64 29 3b 0a 20 20  rsr, &rowid);.  
24c70 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
24c80 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20  TE_OK ){.       
24c90 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
24ca0 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20  to_error;.      
24cb0 7d 0a 20 20 20 20 20 20 70 4f 75 74 2d 3e 75 2e  }.      pOut->u.
24cc0 69 20 3d 20 72 6f 77 69 64 3b 0a 20 20 20 20 20  i = rowid;.     
24cd0 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
24ce0 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 7d 0a 20 20  EM_Int;.    }.  
24cf0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
24d00 20 4f 70 63 6f 64 65 3a 20 49 64 78 47 45 20 50   Opcode: IdxGE P
24d10 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
24d20 0a 2a 2a 20 54 68 65 20 50 34 20 72 65 67 69 73  .** The P4 regis
24d30 74 65 72 20 76 61 6c 75 65 73 20 62 65 67 69 6e  ter values begin
24d40 6e 69 6e 67 20 77 69 74 68 20 50 33 20 66 6f 72  ning with P3 for
24d50 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e  m an unpacked in
24d60 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74  dex .** key that
24d70 20 6f 6d 69 74 73 20 74 68 65 20 52 4f 57 49 44   omits the ROWID
24d80 2e 20 20 43 6f 6d 70 61 72 65 20 74 68 69 73 20  .  Compare this 
24d90 6b 65 79 20 76 61 6c 75 65 20 61 67 61 69 6e 73  key value agains
24da0 74 20 74 68 65 20 69 6e 64 65 78 20 0a 2a 2a 20  t the index .** 
24db0 74 68 61 74 20 50 31 20 69 73 20 63 75 72 72 65  that P1 is curre
24dc0 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f  ntly pointing to
24dd0 2c 20 69 67 6e 6f 72 69 6e 67 20 74 68 65 20 52  , ignoring the R
24de0 4f 57 49 44 20 6f 6e 20 74 68 65 20 50 31 20 69  OWID on the P1 i
24df0 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  ndex..**.** If t
24e00 68 65 20 50 31 20 69 6e 64 65 78 20 65 6e 74 72  he P1 index entr
24e10 79 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61  y is greater tha
24e20 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68  n or equal to th
24e30 65 20 6b 65 79 20 76 61 6c 75 65 0a 2a 2a 20 74  e key value.** t
24e40 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20  hen jump to P2. 
24e50 20 4f 74 68 65 72 77 69 73 65 20 66 61 6c 6c 20   Otherwise fall 
24e60 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e  through to the n
24e70 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ext instruction.
24e80 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20  .**.** If P5 is 
24e90 6e 6f 6e 2d 7a 65 72 6f 20 74 68 65 6e 20 74 68  non-zero then th
24ea0 65 20 6b 65 79 20 76 61 6c 75 65 20 69 73 20 69  e key value is i
24eb0 6e 63 72 65 61 73 65 64 20 62 79 20 61 6e 20 65  ncreased by an e
24ec0 70 73 69 6c 6f 6e 20 0a 2a 2a 20 70 72 69 6f 72  psilon .** prior
24ed0 20 74 6f 20 74 68 65 20 63 6f 6d 70 61 72 69 73   to the comparis
24ee0 6f 6e 2e 20 20 54 68 69 73 20 6d 61 6b 65 20 74  on.  This make t
24ef0 68 65 20 6f 70 63 6f 64 65 20 77 6f 72 6b 20 6c  he opcode work l
24f00 69 6b 65 20 49 64 78 47 54 20 65 78 63 65 70 74  ike IdxGT except
24f10 0a 2a 2a 20 74 68 61 74 20 69 66 20 74 68 65 20  .** that if the 
24f20 6b 65 79 20 66 72 6f 6d 20 72 65 67 69 73 74 65  key from registe
24f30 72 20 50 33 20 69 73 20 61 20 70 72 65 66 69 78  r P3 is a prefix
24f40 20 6f 66 20 74 68 65 20 6b 65 79 20 69 6e 20 74   of the key in t
24f50 68 65 20 63 75 72 73 6f 72 2c 0a 2a 2a 20 74 68  he cursor,.** th
24f60 65 20 72 65 73 75 6c 74 20 69 73 20 66 61 6c 73  e result is fals
24f70 65 20 77 68 65 72 65 61 73 20 69 74 20 77 6f 75  e whereas it wou
24f80 6c 64 20 62 65 20 74 72 75 65 20 77 69 74 68 20  ld be true with 
24f90 49 64 78 47 54 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  IdxGT..*/./* Opc
24fa0 6f 64 65 3a 20 49 64 78 4c 54 20 50 31 20 50 32  ode: IdxLT P1 P2
24fb0 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20   P3 P4 P5.**.** 
24fc0 54 68 65 20 50 34 20 72 65 67 69 73 74 65 72 20  The P4 register 
24fd0 76 61 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e 67  values beginning
24fe0 20 77 69 74 68 20 50 33 20 66 6f 72 6d 20 61 6e   with P3 form an
24ff0 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20   unpacked index 
25000 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d 69  .** key that omi
25010 74 73 20 74 68 65 20 52 4f 57 49 44 2e 20 20 43  ts the ROWID.  C
25020 6f 6d 70 61 72 65 20 74 68 69 73 20 6b 65 79 20  ompare this key 
25030 76 61 6c 75 65 20 61 67 61 69 6e 73 74 20 74 68  value against th
25040 65 20 69 6e 64 65 78 20 0a 2a 2a 20 74 68 61 74  e index .** that
25050 20 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79   P1 is currently
25060 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67   pointing to, ig
25070 6e 6f 72 69 6e 67 20 74 68 65 20 52 4f 57 49 44  noring the ROWID
25080 20 6f 6e 20 74 68 65 20 50 31 20 69 6e 64 65 78   on the P1 index
25090 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50  ..**.** If the P
250a0 31 20 69 6e 64 65 78 20 65 6e 74 72 79 20 69 73  1 index entry is
250b0 20 6c 65 73 73 20 74 68 61 6e 20 74 68 65 20 6b   less than the k
250c0 65 79 20 76 61 6c 75 65 20 74 68 65 6e 20 6a 75  ey value then ju
250d0 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 20 4f 74 68  mp to P2..** Oth
250e0 65 72 77 69 73 65 20 66 61 6c 6c 20 74 68 72 6f  erwise fall thro
250f0 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ugh to the next 
25100 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a  instruction..**.
25110 2a 2a 20 49 66 20 50 35 20 69 73 20 6e 6f 6e 2d  ** If P5 is non-
25120 7a 65 72 6f 20 74 68 65 6e 20 74 68 65 20 6b 65  zero then the ke
25130 79 20 76 61 6c 75 65 20 69 73 20 69 6e 63 72 65  y value is incre
25140 61 73 65 64 20 62 79 20 61 6e 20 65 70 73 69 6c  ased by an epsil
25150 6f 6e 20 70 72 69 6f 72 20 0a 2a 2a 20 74 6f 20  on prior .** to 
25160 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20  the comparison. 
25170 20 54 68 69 73 20 6d 61 6b 65 73 20 74 68 65 20   This makes the 
25180 6f 70 63 6f 64 65 20 77 6f 72 6b 20 6c 69 6b 65  opcode work like
25190 20 49 64 78 4c 45 2e 0a 2a 2f 0a 63 61 73 65 20   IdxLE..*/.case 
251a0 4f 50 5f 49 64 78 4c 54 3a 20 20 20 20 20 20 20  OP_IdxLT:       
251b0 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61     /* jump */.ca
251c0 73 65 20 4f 50 5f 49 64 78 47 45 3a 20 7b 20 20  se OP_IdxGE: {  
251d0 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
251e0 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
251f0 43 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20  C;.  int res;.  
25200 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72  UnpackedRecord r
25210 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
25220 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
25230 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
25240 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
25250 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
25260 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
25270 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 4f 72  assert( pC->isOr
25280 64 65 72 65 64 20 29 3b 0a 20 20 69 66 28 20 41  dered );.  if( A
25290 4c 57 41 59 53 28 70 43 2d 3e 70 43 75 72 73 6f  LWAYS(pC->pCurso
252a0 72 21 3d 30 29 20 29 7b 0a 20 20 20 20 61 73 73  r!=0) ){.    ass
252b0 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65  ert( pC->deferre
252c0 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20  dMoveto==0 );.  
252d0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
252e0 35 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d  5==0 || pOp->p5=
252f0 3d 31 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  =1 );.    assert
25300 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
25310 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 20 20 72  4_INT32 );.    r
25320 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e  .pKeyInfo = pC->
25330 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 72 2e  pKeyInfo;.    r.
25340 6e 46 69 65 6c 64 20 3d 20 28 75 31 36 29 70 4f  nField = (u16)pO
25350 70 2d 3e 70 34 2e 69 3b 0a 20 20 20 20 69 66 28  p->p4.i;.    if(
25360 20 70 4f 70 2d 3e 70 35 20 29 7b 0a 20 20 20 20   pOp->p5 ){.    
25370 20 20 72 2e 66 6c 61 67 73 20 3d 20 55 4e 50 41    r.flags = UNPA
25380 43 4b 45 44 5f 49 4e 43 52 4b 45 59 20 7c 20 55  CKED_INCRKEY | U
25390 4e 50 41 43 4b 45 44 5f 49 47 4e 4f 52 45 5f 52  NPACKED_IGNORE_R
253a0 4f 57 49 44 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  OWID;.    }else{
253b0 0a 20 20 20 20 20 20 72 2e 66 6c 61 67 73 20 3d  .      r.flags =
253c0 20 55 4e 50 41 43 4b 45 44 5f 49 47 4e 4f 52 45   UNPACKED_IGNORE
253d0 5f 52 4f 57 49 44 3b 0a 20 20 20 20 7d 0a 20 20  _ROWID;.    }.  
253e0 20 20 72 2e 61 4d 65 6d 20 3d 20 26 61 4d 65 6d    r.aMem = &aMem
253f0 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 23 69 66 64 65  [pOp->p3];.#ifde
25400 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
25410 20 20 20 7b 20 69 6e 74 20 69 3b 20 66 6f 72 28     { int i; for(
25420 69 3d 30 3b 20 69 3c 72 2e 6e 46 69 65 6c 64 3b  i=0; i<r.nField;
25430 20 69 2b 2b 29 20 61 73 73 65 72 74 28 20 6d 65   i++) assert( me
25440 6d 49 73 56 61 6c 69 64 28 26 72 2e 61 4d 65 6d  mIsValid(&r.aMem
25450 5b 69 5d 29 20 29 3b 20 7d 0a 23 65 6e 64 69 66  [i]) ); }.#endif
25460 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
25470 33 56 64 62 65 49 64 78 4b 65 79 43 6f 6d 70 61  3VdbeIdxKeyCompa
25480 72 65 28 70 43 2c 20 26 72 2c 20 26 72 65 73 29  re(pC, &r, &res)
25490 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 6f  ;.    if( pOp->o
254a0 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 54 20  pcode==OP_IdxLT 
254b0 29 7b 0a 20 20 20 20 20 20 72 65 73 20 3d 20 2d  ){.      res = -
254c0 72 65 73 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  res;.    }else{.
254d0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
254e0 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64  p->opcode==OP_Id
254f0 78 47 45 20 29 3b 0a 20 20 20 20 20 20 72 65 73  xGE );.      res
25500 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  ++;.    }.    if
25510 28 20 72 65 73 3e 30 20 29 7b 0a 20 20 20 20 20  ( res>0 ){.     
25520 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
25530 31 20 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  1 ;.    }.  }.  
25540 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
25550 6f 64 65 3a 20 44 65 73 74 72 6f 79 20 50 31 20  ode: Destroy P1 
25560 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
25570 44 65 6c 65 74 65 20 61 6e 20 65 6e 74 69 72 65  Delete an entire
25580 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20   database table 
25590 6f 72 20 69 6e 64 65 78 20 77 68 6f 73 65 20 72  or index whose r
255a0 6f 6f 74 20 70 61 67 65 20 69 6e 20 74 68 65 20  oot page in the 
255b0 64 61 74 61 62 61 73 65 0a 2a 2a 20 66 69 6c 65  database.** file
255c0 20 69 73 20 67 69 76 65 6e 20 62 79 20 50 31 2e   is given by P1.
255d0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 74 61 62 6c 65  .**.** The table
255e0 20 62 65 69 6e 67 20 64 65 73 74 72 6f 79 65 64   being destroyed
255f0 20 69 73 20 69 6e 20 74 68 65 20 6d 61 69 6e 20   is in the main 
25600 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66  database file if
25610 20 50 33 3d 3d 30 2e 20 20 49 66 0a 2a 2a 20 50   P3==0.  If.** P
25620 33 3d 3d 31 20 74 68 65 6e 20 74 68 65 20 74 61  3==1 then the ta
25630 62 6c 65 20 74 6f 20 62 65 20 63 6c 65 61 72 20  ble to be clear 
25640 69 73 20 69 6e 20 74 68 65 20 61 75 78 69 6c 69  is in the auxili
25650 61 72 79 20 64 61 74 61 62 61 73 65 20 66 69 6c  ary database fil
25660 65 0a 2a 2a 20 74 68 61 74 20 69 73 20 75 73 65  e.** that is use
25670 64 20 74 6f 20 73 74 6f 72 65 20 74 61 62 6c 65  d to store table
25680 73 20 63 72 65 61 74 65 20 75 73 69 6e 67 20 43  s create using C
25690 52 45 41 54 45 20 54 45 4d 50 4f 52 41 52 59 20  REATE TEMPORARY 
256a0 54 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  TABLE..**.** If 
256b0 41 55 54 4f 56 41 43 55 55 4d 20 69 73 20 65 6e  AUTOVACUUM is en
256c0 61 62 6c 65 64 20 74 68 65 6e 20 69 74 20 69 73  abled then it is
256d0 20 70 6f 73 73 69 62 6c 65 20 74 68 61 74 20 61   possible that a
256e0 6e 6f 74 68 65 72 20 72 6f 6f 74 20 70 61 67 65  nother root page
256f0 0a 2a 2a 20 6d 69 67 68 74 20 62 65 20 6d 6f 76  .** might be mov
25700 65 64 20 69 6e 74 6f 20 74 68 65 20 6e 65 77 6c  ed into the newl
25710 79 20 64 65 6c 65 74 65 64 20 72 6f 6f 74 20 70  y deleted root p
25720 61 67 65 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  age in order to 
25730 6b 65 65 70 20 61 6c 6c 0a 2a 2a 20 72 6f 6f 74  keep all.** root
25740 20 70 61 67 65 73 20 63 6f 6e 74 69 67 75 6f 75   pages contiguou
25750 73 20 61 74 20 74 68 65 20 62 65 67 69 6e 6e 69  s at the beginni
25760 6e 67 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  ng of the databa
25770 73 65 2e 20 20 54 68 65 20 66 6f 72 6d 65 72 0a  se.  The former.
25780 2a 2a 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  ** value of the 
25790 72 6f 6f 74 20 70 61 67 65 20 74 68 61 74 20 6d  root page that m
257a0 6f 76 65 64 20 2d 20 69 74 73 20 76 61 6c 75 65  oved - its value
257b0 20 62 65 66 6f 72 65 20 74 68 65 20 6d 6f 76 65   before the move
257c0 20 6f 63 63 75 72 72 65 64 20 2d 0a 2a 2a 20 69   occurred -.** i
257d0 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  s stored in regi
257e0 73 74 65 72 20 50 32 2e 20 20 49 66 20 6e 6f 20  ster P2.  If no 
257f0 70 61 67 65 20 0a 2a 2a 20 6d 6f 76 65 6d 65 6e  page .** movemen
25800 74 20 77 61 73 20 72 65 71 75 69 72 65 64 20 28  t was required (
25810 62 65 63 61 75 73 65 20 74 68 65 20 74 61 62 6c  because the tabl
25820 65 20 62 65 69 6e 67 20 64 72 6f 70 70 65 64 20  e being dropped 
25830 77 61 73 20 61 6c 72 65 61 64 79 20 0a 2a 2a 20  was already .** 
25840 74 68 65 20 6c 61 73 74 20 6f 6e 65 20 69 6e 20  the last one in 
25850 74 68 65 20 64 61 74 61 62 61 73 65 29 20 74 68  the database) th
25860 65 6e 20 61 20 7a 65 72 6f 20 69 73 20 73 74 6f  en a zero is sto
25870 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20  red in register 
25880 50 32 2e 0a 2a 2a 20 49 66 20 41 55 54 4f 56 41  P2..** If AUTOVA
25890 43 55 55 4d 20 69 73 20 64 69 73 61 62 6c 65 64  CUUM is disabled
258a0 20 74 68 65 6e 20 61 20 7a 65 72 6f 20 69 73 20   then a zero is 
258b0 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74  stored in regist
258c0 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  er P2..**.** See
258d0 20 61 6c 73 6f 3a 20 43 6c 65 61 72 0a 2a 2f 0a   also: Clear.*/.
258e0 63 61 73 65 20 4f 50 5f 44 65 73 74 72 6f 79 3a  case OP_Destroy:
258f0 20 7b 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70   {     /* out2-p
25900 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69  rerelease */.  i
25910 6e 74 20 69 4d 6f 76 65 64 3b 0a 20 20 69 6e 74  nt iMoved;.  int
25920 20 69 43 6e 74 3b 0a 20 20 56 64 62 65 20 2a 70   iCnt;.  Vdbe *p
25930 56 64 62 65 3b 0a 20 20 69 6e 74 20 69 44 62 3b  Vdbe;.  int iDb;
25940 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
25950 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
25960 45 0a 20 20 69 43 6e 74 20 3d 20 30 3b 0a 20 20  E.  iCnt = 0;.  
25970 66 6f 72 28 70 56 64 62 65 3d 64 62 2d 3e 70 56  for(pVdbe=db->pV
25980 64 62 65 3b 20 70 56 64 62 65 3b 20 70 56 64 62  dbe; pVdbe; pVdb
25990 65 20 3d 20 70 56 64 62 65 2d 3e 70 4e 65 78 74  e = pVdbe->pNext
259a0 29 7b 0a 20 20 20 20 69 66 28 20 70 56 64 62 65  ){.    if( pVdbe
259b0 2d 3e 6d 61 67 69 63 3d 3d 56 44 42 45 5f 4d 41  ->magic==VDBE_MA
259c0 47 49 43 5f 52 55 4e 20 26 26 20 70 56 64 62 65  GIC_RUN && pVdbe
259d0 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64 3c 32  ->inVtabMethod<2
259e0 20 26 26 20 70 56 64 62 65 2d 3e 70 63 3e 3d 30   && pVdbe->pc>=0
259f0 20 29 7b 0a 20 20 20 20 20 20 69 43 6e 74 2b 2b   ){.      iCnt++
25a00 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6c 73  ;.    }.  }.#els
25a10 65 0a 20 20 69 43 6e 74 20 3d 20 64 62 2d 3e 61  e.  iCnt = db->a
25a20 63 74 69 76 65 56 64 62 65 43 6e 74 3b 0a 23 65  ctiveVdbeCnt;.#e
25a30 6e 64 69 66 0a 20 20 70 4f 75 74 2d 3e 66 6c 61  ndif.  pOut->fla
25a40 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20  gs = MEM_Null;. 
25a50 20 69 66 28 20 69 43 6e 74 3e 31 20 29 7b 0a 20   if( iCnt>1 ){. 
25a60 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4c     rc = SQLITE_L
25a70 4f 43 4b 45 44 3b 0a 20 20 20 20 70 2d 3e 65 72  OCKED;.    p->er
25a80 72 6f 72 41 63 74 69 6f 6e 20 3d 20 4f 45 5f 41  rorAction = OE_A
25a90 62 6f 72 74 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  bort;.  }else{. 
25aa0 20 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70 33     iDb = pOp->p3
25ab0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 69 43  ;.    assert( iC
25ac0 6e 74 3d 3d 31 20 29 3b 0a 20 20 20 20 61 73 73  nt==1 );.    ass
25ad0 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61  ert( (p->btreeMa
25ae0 73 6b 20 26 20 28 28 28 79 44 62 4d 61 73 6b 29  sk & (((yDbMask)
25af0 31 29 3c 3c 69 44 62 29 29 21 3d 30 20 29 3b 0a  1)<<iDb))!=0 );.
25b00 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
25b10 42 74 72 65 65 44 72 6f 70 54 61 62 6c 65 28 64  BtreeDropTable(d
25b20 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 2c  b->aDb[iDb].pBt,
25b30 20 70 4f 70 2d 3e 70 31 2c 20 26 69 4d 6f 76 65   pOp->p1, &iMove
25b40 64 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c  d);.    pOut->fl
25b50 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20  ags = MEM_Int;. 
25b60 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69     pOut->u.i = i
25b70 4d 6f 76 65 64 3b 0a 23 69 66 6e 64 65 66 20 53  Moved;.#ifndef S
25b80 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56  QLITE_OMIT_AUTOV
25b90 41 43 55 55 4d 0a 20 20 20 20 69 66 28 20 72 63  ACUUM.    if( rc
25ba0 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 69  ==SQLITE_OK && i
25bb0 4d 6f 76 65 64 21 3d 30 20 29 7b 0a 20 20 20 20  Moved!=0 ){.    
25bc0 20 20 73 71 6c 69 74 65 33 52 6f 6f 74 50 61 67    sqlite3RootPag
25bd0 65 4d 6f 76 65 64 28 64 62 2c 20 69 44 62 2c 20  eMoved(db, iDb, 
25be0 69 4d 6f 76 65 64 2c 20 70 4f 70 2d 3e 70 31 29  iMoved, pOp->p1)
25bf0 3b 0a 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 4f  ;.      /* All O
25c00 50 5f 44 65 73 74 72 6f 79 20 6f 70 65 72 61 74  P_Destroy operat
25c10 69 6f 6e 73 20 6f 63 63 75 72 20 6f 6e 20 74 68  ions occur on th
25c20 65 20 73 61 6d 65 20 62 74 72 65 65 20 2a 2f 0a  e same btree */.
25c30 20 20 20 20 20 20 61 73 73 65 72 74 28 20 72 65        assert( re
25c40 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74  setSchemaOnFault
25c50 3d 3d 30 20 7c 7c 20 72 65 73 65 74 53 63 68 65  ==0 || resetSche
25c60 6d 61 4f 6e 46 61 75 6c 74 3d 3d 69 44 62 2b 31  maOnFault==iDb+1
25c70 20 29 3b 0a 20 20 20 20 20 20 72 65 73 65 74 53   );.      resetS
25c80 63 68 65 6d 61 4f 6e 46 61 75 6c 74 20 3d 20 69  chemaOnFault = i
25c90 44 62 2b 31 3b 0a 20 20 20 20 7d 0a 23 65 6e 64  Db+1;.    }.#end
25ca0 69 66 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  if.  }.  break;.
25cb0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6c  }../* Opcode: Cl
25cc0 65 61 72 20 50 31 20 50 32 20 50 33 0a 2a 2a 0a  ear P1 P2 P3.**.
25cd0 2a 2a 20 44 65 6c 65 74 65 20 61 6c 6c 20 63 6f  ** Delete all co
25ce0 6e 74 65 6e 74 73 20 6f 66 20 74 68 65 20 64 61  ntents of the da
25cf0 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20  tabase table or 
25d00 69 6e 64 65 78 20 77 68 6f 73 65 20 72 6f 6f 74  index whose root
25d10 20 70 61 67 65 0a 2a 2a 20 69 6e 20 74 68 65 20   page.** in the 
25d20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 73  database file is
25d30 20 67 69 76 65 6e 20 62 79 20 50 31 2e 20 20 42   given by P1.  B
25d40 75 74 2c 20 75 6e 6c 69 6b 65 20 44 65 73 74 72  ut, unlike Destr
25d50 6f 79 2c 20 64 6f 20 6e 6f 74 0a 2a 2a 20 72 65  oy, do not.** re
25d60 6d 6f 76 65 20 74 68 65 20 74 61 62 6c 65 20 6f  move the table o
25d70 72 20 69 6e 64 65 78 20 66 72 6f 6d 20 74 68 65  r index from the
25d80 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a   database file..
25d90 2a 2a 0a 2a 2a 20 54 68 65 20 74 61 62 6c 65 20  **.** The table 
25da0 62 65 69 6e 67 20 63 6c 65 61 72 20 69 73 20 69  being clear is i
25db0 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  n the main datab
25dc0 61 73 65 20 66 69 6c 65 20 69 66 20 50 32 3d 3d  ase file if P2==
25dd0 30 2e 20 20 49 66 0a 2a 2a 20 50 32 3d 3d 31 20  0.  If.** P2==1 
25de0 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20 74  then the table t
25df0 6f 20 62 65 20 63 6c 65 61 72 20 69 73 20 69 6e  o be clear is in
25e00 20 74 68 65 20 61 75 78 69 6c 69 61 72 79 20 64   the auxiliary d
25e10 61 74 61 62 61 73 65 20 66 69 6c 65 0a 2a 2a 20  atabase file.** 
25e20 74 68 61 74 20 69 73 20 75 73 65 64 20 74 6f 20  that is used to 
25e30 73 74 6f 72 65 20 74 61 62 6c 65 73 20 63 72 65  store tables cre
25e40 61 74 65 20 75 73 69 6e 67 20 43 52 45 41 54 45  ate using CREATE
25e50 20 54 45 4d 50 4f 52 41 52 59 20 54 41 42 4c 45   TEMPORARY TABLE
25e60 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50  ..**.** If the P
25e70 33 20 76 61 6c 75 65 20 69 73 20 6e 6f 6e 2d 7a  3 value is non-z
25e80 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 74 61  ero, then the ta
25e90 62 6c 65 20 72 65 66 65 72 72 65 64 20 74 6f 20  ble referred to 
25ea0 6d 75 73 74 20 62 65 20 61 6e 0a 2a 2a 20 69 6e  must be an.** in
25eb0 74 6b 65 79 20 74 61 62 6c 65 20 28 61 6e 20 53  tkey table (an S
25ec0 51 4c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61 6e  QL table, not an
25ed0 20 69 6e 64 65 78 29 2e 20 49 6e 20 74 68 69 73   index). In this
25ee0 20 63 61 73 65 20 74 68 65 20 72 6f 77 20 63 68   case the row ch
25ef0 61 6e 67 65 20 0a 2a 2a 20 63 6f 75 6e 74 20 69  ange .** count i
25f00 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 62 79  s incremented by
25f10 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72   the number of r
25f20 6f 77 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65  ows in the table
25f30 20 62 65 69 6e 67 20 63 6c 65 61 72 65 64 2e 20   being cleared. 
25f40 0a 2a 2a 20 49 66 20 50 33 20 69 73 20 67 72 65  .** If P3 is gre
25f50 61 74 65 72 20 74 68 61 6e 20 7a 65 72 6f 2c 20  ater than zero, 
25f60 74 68 65 6e 20 74 68 65 20 76 61 6c 75 65 20 73  then the value s
25f70 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65  tored in registe
25f80 72 20 50 33 20 69 73 0a 2a 2a 20 61 6c 73 6f 20  r P3 is.** also 
25f90 69 6e 63 72 65 6d 65 6e 74 65 64 20 62 79 20 74  incremented by t
25fa0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77  he number of row
25fb0 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 62  s in the table b
25fc0 65 69 6e 67 20 63 6c 65 61 72 65 64 2e 0a 2a 2a  eing cleared..**
25fd0 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 44 65  .** See also: De
25fe0 73 74 72 6f 79 0a 2a 2f 0a 63 61 73 65 20 4f 50  stroy.*/.case OP
25ff0 5f 43 6c 65 61 72 3a 20 7b 0a 20 20 69 6e 74 20  _Clear: {.  int 
26000 6e 43 68 61 6e 67 65 3b 0a 20 0a 20 20 6e 43 68  nChange;. .  nCh
26010 61 6e 67 65 20 3d 20 30 3b 0a 20 20 61 73 73 65  ange = 0;.  asse
26020 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73  rt( (p->btreeMas
26030 6b 20 26 20 28 28 28 79 44 62 4d 61 73 6b 29 31  k & (((yDbMask)1
26040 29 3c 3c 70 4f 70 2d 3e 70 32 29 29 21 3d 30 20  )<<pOp->p2))!=0 
26050 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  );.  rc = sqlite
26060 33 42 74 72 65 65 43 6c 65 61 72 54 61 62 6c 65  3BtreeClearTable
26070 28 0a 20 20 20 20 20 20 64 62 2d 3e 61 44 62 5b  (.      db->aDb[
26080 70 4f 70 2d 3e 70 32 5d 2e 70 42 74 2c 20 70 4f  pOp->p2].pBt, pO
26090 70 2d 3e 70 31 2c 20 28 70 4f 70 2d 3e 70 33 20  p->p1, (pOp->p3 
260a0 3f 20 26 6e 43 68 61 6e 67 65 20 3a 20 30 29 0a  ? &nChange : 0).
260b0 20 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e    );.  if( pOp->
260c0 70 33 20 29 7b 0a 20 20 20 20 70 2d 3e 6e 43 68  p3 ){.    p->nCh
260d0 61 6e 67 65 20 2b 3d 20 6e 43 68 61 6e 67 65 3b  ange += nChange;
260e0 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 33  .    if( pOp->p3
260f0 3e 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65  >0 ){.      asse
26100 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26  rt( memIsValid(&
26110 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 20 29  aMem[pOp->p3]) )
26120 3b 0a 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74  ;.      memAbout
26130 54 6f 43 68 61 6e 67 65 28 70 2c 20 26 61 4d 65  ToChange(p, &aMe
26140 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20 20 20  m[pOp->p3]);.   
26150 20 20 20 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d     aMem[pOp->p3]
26160 2e 75 2e 69 20 2b 3d 20 6e 43 68 61 6e 67 65 3b  .u.i += nChange;
26170 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65  .    }.  }.  bre
26180 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
26190 3a 20 43 72 65 61 74 65 54 61 62 6c 65 20 50 31  : CreateTable P1
261a0 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
261b0 41 6c 6c 6f 63 61 74 65 20 61 20 6e 65 77 20 74  Allocate a new t
261c0 61 62 6c 65 20 69 6e 20 74 68 65 20 6d 61 69 6e  able in the main
261d0 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69   database file i
261e0 66 20 50 31 3d 3d 30 20 6f 72 20 69 6e 20 74 68  f P1==0 or in th
261f0 65 0a 2a 2a 20 61 75 78 69 6c 69 61 72 79 20 64  e.** auxiliary d
26200 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66 20  atabase file if 
26210 50 31 3d 3d 31 20 6f 72 20 69 6e 20 61 6e 20 61  P1==1 or in an a
26220 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65  ttached database
26230 20 69 66 0a 2a 2a 20 50 31 3e 31 2e 20 20 57 72   if.** P1>1.  Wr
26240 69 74 65 20 74 68 65 20 72 6f 6f 74 20 70 61 67  ite the root pag
26250 65 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20  e number of the 
26260 6e 65 77 20 74 61 62 6c 65 20 69 6e 74 6f 0a 2a  new table into.*
26270 2a 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a  * register P2.**
26280 0a 2a 2a 20 54 68 65 20 64 69 66 66 65 72 65 6e  .** The differen
26290 63 65 20 62 65 74 77 65 65 6e 20 61 20 74 61 62  ce between a tab
262a0 6c 65 20 61 6e 64 20 61 6e 20 69 6e 64 65 78 20  le and an index 
262b0 69 73 20 74 68 69 73 3a 20 20 41 20 74 61 62 6c  is this:  A tabl
262c0 65 20 6d 75 73 74 0a 2a 2a 20 68 61 76 65 20 61  e must.** have a
262d0 20 34 2d 62 79 74 65 20 69 6e 74 65 67 65 72 20   4-byte integer 
262e0 6b 65 79 20 61 6e 64 20 63 61 6e 20 68 61 76 65  key and can have
262f0 20 61 72 62 69 74 72 61 72 79 20 64 61 74 61 2e   arbitrary data.
26300 20 20 41 6e 20 69 6e 64 65 78 0a 2a 2a 20 68 61    An index.** ha
26310 73 20 61 6e 20 61 72 62 69 74 72 61 72 79 20 6b  s an arbitrary k
26320 65 79 20 62 75 74 20 6e 6f 20 64 61 74 61 2e 0a  ey but no data..
26330 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
26340 43 72 65 61 74 65 49 6e 64 65 78 0a 2a 2f 0a 2f  CreateIndex.*/./
26350 2a 20 4f 70 63 6f 64 65 3a 20 43 72 65 61 74 65  * Opcode: Create
26360 49 6e 64 65 78 20 50 31 20 50 32 20 2a 20 2a 20  Index P1 P2 * * 
26370 2a 0a 2a 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65  *.**.** Allocate
26380 20 61 20 6e 65 77 20 69 6e 64 65 78 20 69 6e 20   a new index in 
26390 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
263a0 65 20 66 69 6c 65 20 69 66 20 50 31 3d 3d 30 20  e file if P1==0 
263b0 6f 72 20 69 6e 20 74 68 65 0a 2a 2a 20 61 75 78  or in the.** aux
263c0 69 6c 69 61 72 79 20 64 61 74 61 62 61 73 65 20  iliary database 
263d0 66 69 6c 65 20 69 66 20 50 31 3d 3d 31 20 6f 72  file if P1==1 or
263e0 20 69 6e 20 61 6e 20 61 74 74 61 63 68 65 64 20   in an attached 
263f0 64 61 74 61 62 61 73 65 20 69 66 0a 2a 2a 20 50  database if.** P
26400 31 3e 31 2e 20 20 57 72 69 74 65 20 74 68 65 20  1>1.  Write the 
26410 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72  root page number
26420 20 6f 66 20 74 68 65 20 6e 65 77 20 74 61 62 6c   of the new tabl
26430 65 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74  e into.** regist
26440 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  er P2..**.** See
26450 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 6f   documentation o
26460 6e 20 4f 50 5f 43 72 65 61 74 65 54 61 62 6c 65  n OP_CreateTable
26470 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20   for additional 
26480 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a  information..*/.
26490 63 61 73 65 20 4f 50 5f 43 72 65 61 74 65 49 6e  case OP_CreateIn
264a0 64 65 78 3a 20 20 20 20 20 20 20 20 20 20 20 20  dex:            
264b0 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61  /* out2-prerelea
264c0 73 65 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 72  se */.case OP_Cr
264d0 65 61 74 65 54 61 62 6c 65 3a 20 7b 20 20 20 20  eateTable: {    
264e0 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72        /* out2-pr
264f0 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69 6e  erelease */.  in
26500 74 20 70 67 6e 6f 3b 0a 20 20 69 6e 74 20 66 6c  t pgno;.  int fl
26510 61 67 73 3b 0a 20 20 44 62 20 2a 70 44 62 3b 0a  ags;.  Db *pDb;.
26520 0a 20 20 70 67 6e 6f 20 3d 20 30 3b 0a 20 20 61  .  pgno = 0;.  a
26530 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
26540 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d  0 && pOp->p1<db-
26550 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74  >nDb );.  assert
26560 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20  ( (p->btreeMask 
26570 26 20 28 28 28 79 44 62 4d 61 73 6b 29 31 29 3c  & (((yDbMask)1)<
26580 3c 70 4f 70 2d 3e 70 31 29 29 21 3d 30 20 29 3b  <pOp->p1))!=0 );
26590 0a 20 20 70 44 62 20 3d 20 26 64 62 2d 3e 61 44  .  pDb = &db->aD
265a0 62 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  b[pOp->p1];.  as
265b0 73 65 72 74 28 20 70 44 62 2d 3e 70 42 74 21 3d  sert( pDb->pBt!=
265c0 30 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e  0 );.  if( pOp->
265d0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43 72 65 61 74  opcode==OP_Creat
265e0 65 54 61 62 6c 65 20 29 7b 0a 20 20 20 20 2f 2a  eTable ){.    /*
265f0 20 66 6c 61 67 73 20 3d 20 42 54 52 45 45 5f 49   flags = BTREE_I
26600 4e 54 4b 45 59 3b 20 2a 2f 0a 20 20 20 20 66 6c  NTKEY; */.    fl
26610 61 67 73 20 3d 20 42 54 52 45 45 5f 49 4e 54 4b  ags = BTREE_INTK
26620 45 59 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  EY;.  }else{.   
26630 20 66 6c 61 67 73 20 3d 20 42 54 52 45 45 5f 42   flags = BTREE_B
26640 4c 4f 42 4b 45 59 3b 0a 20 20 7d 0a 20 20 72 63  LOBKEY;.  }.  rc
26650 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43   = sqlite3BtreeC
26660 72 65 61 74 65 54 61 62 6c 65 28 70 44 62 2d 3e  reateTable(pDb->
26670 70 42 74 2c 20 26 70 67 6e 6f 2c 20 66 6c 61 67  pBt, &pgno, flag
26680 73 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20  s);.  pOut->u.i 
26690 3d 20 70 67 6e 6f 3b 0a 20 20 62 72 65 61 6b 3b  = pgno;.  break;
266a0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50  .}../* Opcode: P
266b0 61 72 73 65 53 63 68 65 6d 61 20 50 31 20 2a 20  arseSchema P1 * 
266c0 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61  * P4 *.**.** Rea
266d0 64 20 61 6e 64 20 70 61 72 73 65 20 61 6c 6c 20  d and parse all 
266e0 65 6e 74 72 69 65 73 20 66 72 6f 6d 20 74 68 65  entries from the
266f0 20 53 51 4c 49 54 45 5f 4d 41 53 54 45 52 20 74   SQLITE_MASTER t
26700 61 62 6c 65 20 6f 66 20 64 61 74 61 62 61 73 65  able of database
26710 20 50 31 0a 2a 2a 20 74 68 61 74 20 6d 61 74 63   P1.** that matc
26720 68 20 74 68 65 20 57 48 45 52 45 20 63 6c 61 75  h the WHERE clau
26730 73 65 20 50 34 2e 20 0a 2a 2a 0a 2a 2a 20 54 68  se P4. .**.** Th
26740 69 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65  is opcode invoke
26750 73 20 74 68 65 20 70 61 72 73 65 72 20 74 6f 20  s the parser to 
26760 63 72 65 61 74 65 20 61 20 6e 65 77 20 76 69 72  create a new vir
26770 74 75 61 6c 20 6d 61 63 68 69 6e 65 2c 0a 2a 2a  tual machine,.**
26780 20 74 68 65 6e 20 72 75 6e 73 20 74 68 65 20 6e   then runs the n
26790 65 77 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69  ew virtual machi
267a0 6e 65 2e 20 20 49 74 20 69 73 20 74 68 75 73 20  ne.  It is thus 
267b0 61 20 72 65 2d 65 6e 74 72 61 6e 74 20 6f 70 63  a re-entrant opc
267c0 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ode..*/.case OP_
267d0 50 61 72 73 65 53 63 68 65 6d 61 3a 20 7b 0a 20  ParseSchema: {. 
267e0 20 69 6e 74 20 69 44 62 3b 0a 20 20 63 6f 6e 73   int iDb;.  cons
267f0 74 20 63 68 61 72 20 2a 7a 4d 61 73 74 65 72 3b  t char *zMaster;
26800 0a 20 20 63 68 61 72 20 2a 7a 53 71 6c 3b 0a 20  .  char *zSql;. 
26810 20 49 6e 69 74 44 61 74 61 20 69 6e 69 74 44 61   InitData initDa
26820 74 61 3b 0a 0a 20 20 2f 2a 20 41 6e 79 20 70 72  ta;..  /* Any pr
26830 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74  epared statement
26840 20 74 68 61 74 20 69 6e 76 6f 6b 65 73 20 74 68   that invokes th
26850 69 73 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 68  is opcode will h
26860 6f 6c 64 20 6d 75 74 65 78 65 73 0a 20 20 2a 2a  old mutexes.  **
26870 20 6f 6e 20 65 76 65 72 79 20 62 74 72 65 65 2e   on every btree.
26880 20 20 54 68 69 73 20 69 73 20 61 20 70 72 65 72    This is a prer
26890 65 71 75 69 73 69 74 65 20 66 6f 72 20 69 6e 76  equisite for inv
268a0 6f 6b 69 6e 67 20 0a 20 20 2a 2a 20 73 71 6c 69  oking .  ** sqli
268b0 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 28  te3InitCallback(
268c0 29 2e 0a 20 20 2a 2f 0a 23 69 66 64 65 66 20 53  )..  */.#ifdef S
268d0 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 66 6f  QLITE_DEBUG.  fo
268e0 72 28 69 44 62 3d 30 3b 20 69 44 62 3c 64 62 2d  r(iDb=0; iDb<db-
268f0 3e 6e 44 62 3b 20 69 44 62 2b 2b 29 7b 0a 20 20  >nDb; iDb++){.  
26900 20 20 61 73 73 65 72 74 28 20 69 44 62 3d 3d 31    assert( iDb==1
26910 20 7c 7c 20 73 71 6c 69 74 65 33 42 74 72 65 65   || sqlite3Btree
26920 48 6f 6c 64 73 4d 75 74 65 78 28 64 62 2d 3e 61  HoldsMutex(db->a
26930 44 62 5b 69 44 62 5d 2e 70 42 74 29 20 29 3b 0a  Db[iDb].pBt) );.
26940 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 69 44    }.#endif..  iD
26950 62 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 61  b = pOp->p1;.  a
26960 73 73 65 72 74 28 20 69 44 62 3e 3d 30 20 26 26  ssert( iDb>=0 &&
26970 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a   iDb<db->nDb );.
26980 20 20 61 73 73 65 72 74 28 20 44 62 48 61 73 50    assert( DbHasP
26990 72 6f 70 65 72 74 79 28 64 62 2c 20 69 44 62 2c  roperty(db, iDb,
269a0 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64   DB_SchemaLoaded
269b0 29 20 29 3b 0a 20 20 2f 2a 20 55 73 65 64 20 74  ) );.  /* Used t
269c0 6f 20 62 65 20 61 20 63 6f 6e 64 69 74 69 6f 6e  o be a condition
269d0 61 6c 20 2a 2f 20 7b 0a 20 20 20 20 7a 4d 61 73  al */ {.    zMas
269e0 74 65 72 20 3d 20 53 43 48 45 4d 41 5f 54 41 42  ter = SCHEMA_TAB
269f0 4c 45 28 69 44 62 29 3b 0a 20 20 20 20 69 6e 69  LE(iDb);.    ini
26a00 74 44 61 74 61 2e 64 62 20 3d 20 64 62 3b 0a 20  tData.db = db;. 
26a10 20 20 20 69 6e 69 74 44 61 74 61 2e 69 44 62 20     initData.iDb 
26a20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 20 20 69  = pOp->p1;.    i
26a30 6e 69 74 44 61 74 61 2e 70 7a 45 72 72 4d 73 67  nitData.pzErrMsg
26a40 20 3d 20 26 70 2d 3e 7a 45 72 72 4d 73 67 3b 0a   = &p->zErrMsg;.
26a50 20 20 20 20 7a 53 71 6c 20 3d 20 73 71 6c 69 74      zSql = sqlit
26a60 65 33 4d 50 72 69 6e 74 66 28 64 62 2c 0a 20 20  e3MPrintf(db,.  
26a70 20 20 20 20 20 22 53 45 4c 45 43 54 20 6e 61 6d       "SELECT nam
26a80 65 2c 20 72 6f 6f 74 70 61 67 65 2c 20 73 71 6c  e, rootpage, sql
26a90 20 46 52 4f 4d 20 27 25 71 27 2e 25 73 20 57 48   FROM '%q'.%s WH
26aa0 45 52 45 20 25 73 20 4f 52 44 45 52 20 42 59 20  ERE %s ORDER BY 
26ab0 72 6f 77 69 64 22 2c 0a 20 20 20 20 20 20 20 64  rowid",.       d
26ac0 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 7a 4e 61 6d  b->aDb[iDb].zNam
26ad0 65 2c 20 7a 4d 61 73 74 65 72 2c 20 70 4f 70 2d  e, zMaster, pOp-
26ae0 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 69 66 28 20  >p4.z);.    if( 
26af0 7a 53 71 6c 3d 3d 30 20 29 7b 0a 20 20 20 20 20  zSql==0 ){.     
26b00 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d   rc = SQLITE_NOM
26b10 45 4d 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  EM;.    }else{. 
26b20 20 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d       assert( db-
26b30 3e 69 6e 69 74 2e 62 75 73 79 3d 3d 30 20 29 3b  >init.busy==0 );
26b40 0a 20 20 20 20 20 20 64 62 2d 3e 69 6e 69 74 2e  .      db->init.
26b50 62 75 73 79 20 3d 20 31 3b 0a 20 20 20 20 20 20  busy = 1;.      
26b60 69 6e 69 74 44 61 74 61 2e 72 63 20 3d 20 53 51  initData.rc = SQ
26b70 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 20 20 61  LITE_OK;.      a
26b80 73 73 65 72 74 28 20 21 64 62 2d 3e 6d 61 6c 6c  ssert( !db->mall
26b90 6f 63 46 61 69 6c 65 64 20 29 3b 0a 20 20 20 20  ocFailed );.    
26ba0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 65    rc = sqlite3_e
26bb0 78 65 63 28 64 62 2c 20 7a 53 71 6c 2c 20 73 71  xec(db, zSql, sq
26bc0 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63  lite3InitCallbac
26bd0 6b 2c 20 26 69 6e 69 74 44 61 74 61 2c 20 30 29  k, &initData, 0)
26be0 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d  ;.      if( rc==
26bf0 53 51 4c 49 54 45 5f 4f 4b 20 29 20 72 63 20 3d  SQLITE_OK ) rc =
26c00 20 69 6e 69 74 44 61 74 61 2e 72 63 3b 0a 20 20   initData.rc;.  
26c10 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65      sqlite3DbFre
26c20 65 28 64 62 2c 20 7a 53 71 6c 29 3b 0a 20 20 20  e(db, zSql);.   
26c30 20 20 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79     db->init.busy
26c40 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a   = 0;.    }.  }.
26c50 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
26c60 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20 20 67 6f  _NOMEM ){.    go
26c70 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20  to no_mem;.  }. 
26c80 20 62 72 65 61 6b 3b 20 20 0a 7d 0a 0a 23 69 66   break;  .}..#if
26c90 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
26ca0 5f 4f 4d 49 54 5f 41 4e 41 4c 59 5a 45 29 0a 2f  _OMIT_ANALYZE)./
26cb0 2a 20 4f 70 63 6f 64 65 3a 20 4c 6f 61 64 41 6e  * Opcode: LoadAn
26cc0 61 6c 79 73 69 73 20 50 31 20 2a 20 2a 20 2a 20  alysis P1 * * * 
26cd0 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 74 68 65  *.**.** Read the
26ce0 20 73 71 6c 69 74 65 5f 73 74 61 74 31 20 74 61   sqlite_stat1 ta
26cf0 62 6c 65 20 66 6f 72 20 64 61 74 61 62 61 73 65  ble for database
26d00 20 50 31 20 61 6e 64 20 6c 6f 61 64 20 74 68 65   P1 and load the
26d10 20 63 6f 6e 74 65 6e 74 0a 2a 2a 20 6f 66 20 74   content.** of t
26d20 68 61 74 20 74 61 62 6c 65 20 69 6e 74 6f 20 74  hat table into t
26d30 68 65 20 69 6e 74 65 72 6e 61 6c 20 69 6e 64 65  he internal inde
26d40 78 20 68 61 73 68 20 74 61 62 6c 65 2e 20 20 54  x hash table.  T
26d50 68 69 73 20 77 69 6c 6c 20 63 61 75 73 65 0a 2a  his will cause.*
26d60 2a 20 74 68 65 20 61 6e 61 6c 79 73 69 73 20 74  * the analysis t
26d70 6f 20 62 65 20 75 73 65 64 20 77 68 65 6e 20 70  o be used when p
26d80 72 65 70 61 72 69 6e 67 20 61 6c 6c 20 73 75 62  reparing all sub
26d90 73 65 71 75 65 6e 74 20 71 75 65 72 69 65 73 2e  sequent queries.
26da0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 6f 61 64  .*/.case OP_Load
26db0 41 6e 61 6c 79 73 69 73 3a 20 7b 0a 20 20 61 73  Analysis: {.  as
26dc0 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
26dd0 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e   && pOp->p1<db->
26de0 6e 44 62 20 29 3b 0a 20 20 72 63 20 3d 20 73 71  nDb );.  rc = sq
26df0 6c 69 74 65 33 41 6e 61 6c 79 73 69 73 4c 6f 61  lite3AnalysisLoa
26e00 64 28 64 62 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a  d(db, pOp->p1);.
26e10 20 20 62 72 65 61 6b 3b 20 20 0a 7d 0a 23 65 6e    break;  .}.#en
26e20 64 69 66 20 2f 2a 20 21 64 65 66 69 6e 65 64 28  dif /* !defined(
26e30 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4e 41 4c  SQLITE_OMIT_ANAL
26e40 59 5a 45 29 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f  YZE) */../* Opco
26e50 64 65 3a 20 44 72 6f 70 54 61 62 6c 65 20 50 31  de: DropTable P1
26e60 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20   * * P4 *.**.** 
26e70 52 65 6d 6f 76 65 20 74 68 65 20 69 6e 74 65 72  Remove the inter
26e80 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79 29 20  nal (in-memory) 
26e90 64 61 74 61 20 73 74 72 75 63 74 75 72 65 73 20  data structures 
26ea0 74 68 61 74 20 64 65 73 63 72 69 62 65 0a 2a 2a  that describe.**
26eb0 20 74 68 65 20 74 61 62 6c 65 20 6e 61 6d 65 64   the table named
26ec0 20 50 34 20 69 6e 20 64 61 74 61 62 61 73 65 20   P4 in database 
26ed0 50 31 2e 20 20 54 68 69 73 20 69 73 20 63 61 6c  P1.  This is cal
26ee0 6c 65 64 20 61 66 74 65 72 20 61 20 74 61 62 6c  led after a tabl
26ef0 65 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65 64 20  e.** is dropped 
26f00 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65 70  in order to keep
26f10 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 72 65   the internal re
26f20 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20  presentation of 
26f30 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 63 6f  the.** schema co
26f40 6e 73 69 73 74 65 6e 74 20 77 69 74 68 20 77 68  nsistent with wh
26f50 61 74 20 69 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a  at is on disk..*
26f60 2f 0a 63 61 73 65 20 4f 50 5f 44 72 6f 70 54 61  /.case OP_DropTa
26f70 62 6c 65 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33  ble: {.  sqlite3
26f80 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54  UnlinkAndDeleteT
26f90 61 62 6c 65 28 64 62 2c 20 70 4f 70 2d 3e 70 31  able(db, pOp->p1
26fa0 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20  , pOp->p4.z);.  
26fb0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
26fc0 6f 64 65 3a 20 44 72 6f 70 49 6e 64 65 78 20 50  ode: DropIndex P
26fd0 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  1 * * P4 *.**.**
26fe0 20 52 65 6d 6f 76 65 20 74 68 65 20 69 6e 74 65   Remove the inte
26ff0 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79 29  rnal (in-memory)
27000 20 64 61 74 61 20 73 74 72 75 63 74 75 72 65 73   data structures
27010 20 74 68 61 74 20 64 65 73 63 72 69 62 65 0a 2a   that describe.*
27020 2a 20 74 68 65 20 69 6e 64 65 78 20 6e 61 6d 65  * the index name
27030 64 20 50 34 20 69 6e 20 64 61 74 61 62 61 73 65  d P4 in database
27040 20 50 31 2e 20 20 54 68 69 73 20 69 73 20 63 61   P1.  This is ca
27050 6c 6c 65 64 20 61 66 74 65 72 20 61 6e 20 69 6e  lled after an in
27060 64 65 78 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65  dex.** is droppe
27070 64 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65  d in order to ke
27080 65 70 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20  ep the internal 
27090 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f  representation o
270a0 66 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20  f the.** schema 
270b0 63 6f 6e 73 69 73 74 65 6e 74 20 77 69 74 68 20  consistent with 
270c0 77 68 61 74 20 69 73 20 6f 6e 20 64 69 73 6b 2e  what is on disk.
270d0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 72 6f 70  .*/.case OP_Drop
270e0 49 6e 64 65 78 3a 20 7b 0a 20 20 73 71 6c 69 74  Index: {.  sqlit
270f0 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74  e3UnlinkAndDelet
27100 65 49 6e 64 65 78 28 64 62 2c 20 70 4f 70 2d 3e  eIndex(db, pOp->
27110 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a  p1, pOp->p4.z);.
27120 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
27130 70 63 6f 64 65 3a 20 44 72 6f 70 54 72 69 67 67  pcode: DropTrigg
27140 65 72 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a  er P1 * * P4 *.*
27150 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74 68 65 20  *.** Remove the 
27160 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d  internal (in-mem
27170 6f 72 79 29 20 64 61 74 61 20 73 74 72 75 63 74  ory) data struct
27180 75 72 65 73 20 74 68 61 74 20 64 65 73 63 72 69  ures that descri
27190 62 65 0a 2a 2a 20 74 68 65 20 74 72 69 67 67 65  be.** the trigge
271a0 72 20 6e 61 6d 65 64 20 50 34 20 69 6e 20 64 61  r named P4 in da
271b0 74 61 62 61 73 65 20 50 31 2e 20 20 54 68 69 73  tabase P1.  This
271c0 20 69 73 20 63 61 6c 6c 65 64 20 61 66 74 65 72   is called after
271d0 20 61 20 74 72 69 67 67 65 72 0a 2a 2a 20 69 73   a trigger.** is
271e0 20 64 72 6f 70 70 65 64 20 69 6e 20 6f 72 64 65   dropped in orde
271f0 72 20 74 6f 20 6b 65 65 70 20 74 68 65 20 69 6e  r to keep the in
27200 74 65 72 6e 61 6c 20 72 65 70 72 65 73 65 6e 74  ternal represent
27210 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20  ation of the.** 
27220 73 63 68 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e  schema consisten
27230 74 20 77 69 74 68 20 77 68 61 74 20 69 73 20 6f  t with what is o
27240 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20  n disk..*/.case 
27250 4f 50 5f 44 72 6f 70 54 72 69 67 67 65 72 3a 20  OP_DropTrigger: 
27260 7b 0a 20 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e  {.  sqlite3Unlin
27270 6b 41 6e 64 44 65 6c 65 74 65 54 72 69 67 67 65  kAndDeleteTrigge
27280 72 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70  r(db, pOp->p1, p
27290 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62 72 65  Op->p4.z);.  bre
272a0 61 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e 64 65 66 20  ak;.}...#ifndef 
272b0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 54 45  SQLITE_OMIT_INTE
272c0 47 52 49 54 59 5f 43 48 45 43 4b 0a 2f 2a 20 4f  GRITY_CHECK./* O
272d0 70 63 6f 64 65 3a 20 49 6e 74 65 67 72 69 74 79  pcode: Integrity
272e0 43 6b 20 50 31 20 50 32 20 50 33 20 2a 20 50 35  Ck P1 P2 P3 * P5
272f0 0a 2a 2a 0a 2a 2a 20 44 6f 20 61 6e 20 61 6e 61  .**.** Do an ana
27300 6c 79 73 69 73 20 6f 66 20 74 68 65 20 63 75 72  lysis of the cur
27310 72 65 6e 74 6c 79 20 6f 70 65 6e 20 64 61 74 61  rently open data
27320 62 61 73 65 2e 20 20 53 74 6f 72 65 20 69 6e 0a  base.  Store in.
27330 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31 20 74  ** register P1 t
27340 68 65 20 74 65 78 74 20 6f 66 20 61 6e 20 65 72  he text of an er
27350 72 6f 72 20 6d 65 73 73 61 67 65 20 64 65 73 63  ror message desc
27360 72 69 62 69 6e 67 20 61 6e 79 20 70 72 6f 62 6c  ribing any probl
27370 65 6d 73 2e 0a 2a 2a 20 49 66 20 6e 6f 20 70 72  ems..** If no pr
27380 6f 62 6c 65 6d 73 20 61 72 65 20 66 6f 75 6e 64  oblems are found
27390 2c 20 73 74 6f 72 65 20 61 20 4e 55 4c 4c 20 69  , store a NULL i
273a0 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a  n register P1..*
273b0 2a 0a 2a 2a 20 54 68 65 20 72 65 67 69 73 74 65  *.** The registe
273c0 72 20 50 33 20 63 6f 6e 74 61 69 6e 73 20 74 68  r P3 contains th
273d0 65 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72  e maximum number
273e0 20 6f 66 20 61 6c 6c 6f 77 65 64 20 65 72 72 6f   of allowed erro
273f0 72 73 2e 0a 2a 2a 20 41 74 20 6d 6f 73 74 20 72  rs..** At most r
27400 65 67 28 50 33 29 20 65 72 72 6f 72 73 20 77 69  eg(P3) errors wi
27410 6c 6c 20 62 65 20 72 65 70 6f 72 74 65 64 2e 0a  ll be reported..
27420 2a 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64  ** In other word
27430 73 2c 20 74 68 65 20 61 6e 61 6c 79 73 69 73 20  s, the analysis 
27440 73 74 6f 70 73 20 61 73 20 73 6f 6f 6e 20 61 73  stops as soon as
27450 20 72 65 67 28 50 31 29 20 65 72 72 6f 72 73 20   reg(P1) errors 
27460 61 72 65 20 0a 2a 2a 20 73 65 65 6e 2e 20 20 52  are .** seen.  R
27470 65 67 28 50 31 29 20 69 73 20 75 70 64 61 74 65  eg(P1) is update
27480 64 20 77 69 74 68 20 74 68 65 20 6e 75 6d 62 65  d with the numbe
27490 72 20 6f 66 20 65 72 72 6f 72 73 20 72 65 6d 61  r of errors rema
274a0 69 6e 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  ining..**.** The
274b0 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65   root page numbe
274c0 72 73 20 6f 66 20 61 6c 6c 20 74 61 62 6c 65 73  rs of all tables
274d0 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
274e0 20 61 72 65 20 69 6e 74 65 67 65 72 0a 2a 2a 20   are integer.** 
274f0 73 74 6f 72 65 64 20 69 6e 20 72 65 67 28 50 31  stored in reg(P1
27500 29 2c 20 72 65 67 28 50 31 2b 31 29 2c 20 72 65  ), reg(P1+1), re
27510 67 28 50 31 2b 32 29 2c 20 2e 2e 2e 2e 20 20 54  g(P1+2), ....  T
27520 68 65 72 65 20 61 72 65 20 50 32 20 74 61 62 6c  here are P2 tabl
27530 65 73 0a 2a 2a 20 74 6f 74 61 6c 2e 0a 2a 2a 0a  es.** total..**.
27540 2a 2a 20 49 66 20 50 35 20 69 73 20 6e 6f 74 20  ** If P5 is not 
27550 7a 65 72 6f 2c 20 74 68 65 20 63 68 65 63 6b 20  zero, the check 
27560 69 73 20 64 6f 6e 65 20 6f 6e 20 74 68 65 20 61  is done on the a
27570 75 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73  uxiliary databas
27580 65 0a 2a 2a 20 66 69 6c 65 2c 20 6e 6f 74 20 74  e.** file, not t
27590 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
275a0 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69   file..**.** Thi
275b0 73 20 6f 70 63 6f 64 65 20 69 73 20 75 73 65 64  s opcode is used
275c0 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68   to implement th
275d0 65 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63  e integrity_chec
275e0 6b 20 70 72 61 67 6d 61 2e 0a 2a 2f 0a 63 61 73  k pragma..*/.cas
275f0 65 20 4f 50 5f 49 6e 74 65 67 72 69 74 79 43 6b  e OP_IntegrityCk
27600 3a 20 7b 0a 20 20 69 6e 74 20 6e 52 6f 6f 74 3b  : {.  int nRoot;
27610 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
27620 6f 66 20 74 61 62 6c 65 73 20 74 6f 20 63 68 65  of tables to che
27630 63 6b 2e 20 20 28 4e 75 6d 62 65 72 20 6f 66 20  ck.  (Number of 
27640 72 6f 6f 74 20 70 61 67 65 73 2e 29 20 2a 2f 0a  root pages.) */.
27650 20 20 69 6e 74 20 2a 61 52 6f 6f 74 3b 20 20 20    int *aRoot;   
27660 20 20 2f 2a 20 41 72 72 61 79 20 6f 66 20 72 6f    /* Array of ro
27670 6f 74 70 61 67 65 20 6e 75 6d 62 65 72 73 20 66  otpage numbers f
27680 6f 72 20 74 61 62 6c 65 73 20 74 6f 20 62 65 20  or tables to be 
27690 63 68 65 63 6b 65 64 20 2a 2f 0a 20 20 69 6e 74  checked */.  int
276a0 20 6a 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20   j;          /* 
276b0 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a  Loop counter */.
276c0 20 20 69 6e 74 20 6e 45 72 72 3b 20 20 20 20 20    int nErr;     
276d0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65    /* Number of e
276e0 72 72 6f 72 73 20 72 65 70 6f 72 74 65 64 20 2a  rrors reported *
276f0 2f 0a 20 20 63 68 61 72 20 2a 7a 3b 20 20 20 20  /.  char *z;    
27700 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 74      /* Text of t
27710 68 65 20 65 72 72 6f 72 20 72 65 70 6f 72 74 20  he error report 
27720 2a 2f 0a 20 20 4d 65 6d 20 2a 70 6e 45 72 72 3b  */.  Mem *pnErr;
27730 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72       /* Register
27740 20 6b 65 65 70 69 6e 67 20 74 72 61 63 6b 20 6f   keeping track o
27750 66 20 65 72 72 6f 72 73 20 72 65 6d 61 69 6e 69  f errors remaini
27760 6e 67 20 2a 2f 0a 20 20 0a 20 20 6e 52 6f 6f 74  ng */.  .  nRoot
27770 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73   = pOp->p2;.  as
27780 73 65 72 74 28 20 6e 52 6f 6f 74 3e 30 20 29 3b  sert( nRoot>0 );
27790 0a 20 20 61 52 6f 6f 74 20 3d 20 73 71 6c 69 74  .  aRoot = sqlit
277a0 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28 64 62  e3DbMallocRaw(db
277b0 2c 20 73 69 7a 65 6f 66 28 69 6e 74 29 2a 28 6e  , sizeof(int)*(n
277c0 52 6f 6f 74 2b 31 29 20 29 3b 0a 20 20 69 66 28  Root+1) );.  if(
277d0 20 61 52 6f 6f 74 3d 3d 30 20 29 20 67 6f 74 6f   aRoot==0 ) goto
277e0 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 61 73 73 65 72   no_mem;.  asser
277f0 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20  t( pOp->p3>0 && 
27800 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d  pOp->p3<=p->nMem
27810 20 29 3b 0a 20 20 70 6e 45 72 72 20 3d 20 26 61   );.  pnErr = &a
27820 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
27830 61 73 73 65 72 74 28 20 28 70 6e 45 72 72 2d 3e  assert( (pnErr->
27840 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29  flags & MEM_Int)
27850 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
27860 20 28 70 6e 45 72 72 2d 3e 66 6c 61 67 73 20 26   (pnErr->flags &
27870 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c   (MEM_Str|MEM_Bl
27880 6f 62 29 29 3d 3d 30 20 29 3b 0a 20 20 70 49 6e  ob))==0 );.  pIn
27890 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
278a0 31 5d 3b 0a 20 20 66 6f 72 28 6a 3d 30 3b 20 6a  1];.  for(j=0; j
278b0 3c 6e 52 6f 6f 74 3b 20 6a 2b 2b 29 7b 0a 20 20  <nRoot; j++){.  
278c0 20 20 61 52 6f 6f 74 5b 6a 5d 20 3d 20 28 69 6e    aRoot[j] = (in
278d0 74 29 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74  t)sqlite3VdbeInt
278e0 56 61 6c 75 65 28 26 70 49 6e 31 5b 6a 5d 29 3b  Value(&pIn1[j]);
278f0 0a 20 20 7d 0a 20 20 61 52 6f 6f 74 5b 6a 5d 20  .  }.  aRoot[j] 
27900 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70  = 0;.  assert( p
27910 4f 70 2d 3e 70 35 3c 64 62 2d 3e 6e 44 62 20 29  Op->p5<db->nDb )
27920 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e  ;.  assert( (p->
27930 62 74 72 65 65 4d 61 73 6b 20 26 20 28 28 28 79  btreeMask & (((y
27940 44 62 4d 61 73 6b 29 31 29 3c 3c 70 4f 70 2d 3e  DbMask)1)<<pOp->
27950 70 35 29 29 21 3d 30 20 29 3b 0a 20 20 7a 20 3d  p5))!=0 );.  z =
27960 20 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e 74   sqlite3BtreeInt
27970 65 67 72 69 74 79 43 68 65 63 6b 28 64 62 2d 3e  egrityCheck(db->
27980 61 44 62 5b 70 4f 70 2d 3e 70 35 5d 2e 70 42 74  aDb[pOp->p5].pBt
27990 2c 20 61 52 6f 6f 74 2c 20 6e 52 6f 6f 74 2c 0a  , aRoot, nRoot,.
279a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
279b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
279c0 20 28 69 6e 74 29 70 6e 45 72 72 2d 3e 75 2e 69   (int)pnErr->u.i
279d0 2c 20 26 6e 45 72 72 29 3b 0a 20 20 73 71 6c 69  , &nErr);.  sqli
279e0 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 61 52  te3DbFree(db, aR
279f0 6f 6f 74 29 3b 0a 20 20 70 6e 45 72 72 2d 3e 75  oot);.  pnErr->u
27a00 2e 69 20 2d 3d 20 6e 45 72 72 3b 0a 20 20 73 71  .i -= nErr;.  sq
27a10 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e  lite3VdbeMemSetN
27a20 75 6c 6c 28 70 49 6e 31 29 3b 0a 20 20 69 66 28  ull(pIn1);.  if(
27a30 20 6e 45 72 72 3d 3d 30 20 29 7b 0a 20 20 20 20   nErr==0 ){.    
27a40 61 73 73 65 72 74 28 20 7a 3d 3d 30 20 29 3b 0a  assert( z==0 );.
27a50 20 20 7d 65 6c 73 65 20 69 66 28 20 7a 3d 3d 30    }else if( z==0
27a60 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f   ){.    goto no_
27a70 6d 65 6d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  mem;.  }else{.  
27a80 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
27a90 53 65 74 53 74 72 28 70 49 6e 31 2c 20 7a 2c 20  SetStr(pIn1, z, 
27aa0 2d 31 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c  -1, SQLITE_UTF8,
27ab0 20 73 71 6c 69 74 65 33 5f 66 72 65 65 29 3b 0a   sqlite3_free);.
27ac0 20 20 7d 0a 20 20 55 50 44 41 54 45 5f 4d 41 58    }.  UPDATE_MAX
27ad0 5f 42 4c 4f 42 53 49 5a 45 28 70 49 6e 31 29 3b  _BLOBSIZE(pIn1);
27ae0 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68  .  sqlite3VdbeCh
27af0 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 49 6e  angeEncoding(pIn
27b00 31 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20  1, encoding);.  
27b10 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20  break;.}.#endif 
27b20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 49  /* SQLITE_OMIT_I
27b30 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b 20 2a  NTEGRITY_CHECK *
27b40 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f  /../* Opcode: Ro
27b50 77 53 65 74 41 64 64 20 50 31 20 50 32 20 2a 20  wSetAdd P1 P2 * 
27b60 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 6e 73 65 72 74  * *.**.** Insert
27b70 20 74 68 65 20 69 6e 74 65 67 65 72 20 76 61 6c   the integer val
27b80 75 65 20 68 65 6c 64 20 62 79 20 72 65 67 69 73  ue held by regis
27b90 74 65 72 20 50 32 20 69 6e 74 6f 20 61 20 62 6f  ter P2 into a bo
27ba0 6f 6c 65 61 6e 20 69 6e 64 65 78 0a 2a 2a 20 68  olean index.** h
27bb0 65 6c 64 20 69 6e 20 72 65 67 69 73 74 65 72 20  eld in register 
27bc0 50 31 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 61 73 73  P1..**.** An ass
27bd0 65 72 74 69 6f 6e 20 66 61 69 6c 73 20 69 66 20  ertion fails if 
27be0 50 32 20 69 73 20 6e 6f 74 20 61 6e 20 69 6e 74  P2 is not an int
27bf0 65 67 65 72 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  eger..*/.case OP
27c00 5f 52 6f 77 53 65 74 41 64 64 3a 20 7b 20 20 20  _RowSetAdd: {   
27c10 20 20 20 20 2f 2a 20 69 6e 31 2c 20 69 6e 32 20      /* in1, in2 
27c20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
27c30 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49  m[pOp->p1];.  pI
27c40 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n2 = &aMem[pOp->
27c50 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 28  p2];.  assert( (
27c60 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn2->flags & ME
27c70 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 0a 20 20 69  M_Int)!=0 );.  i
27c80 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
27c90 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30  & MEM_RowSet)==0
27ca0 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
27cb0 64 62 65 4d 65 6d 53 65 74 52 6f 77 53 65 74 28  dbeMemSetRowSet(
27cc0 70 49 6e 31 29 3b 0a 20 20 20 20 69 66 28 20 28  pIn1);.    if( (
27cd0 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
27ce0 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29 20 67  M_RowSet)==0 ) g
27cf0 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a  oto no_mem;.  }.
27d00 20 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 49    sqlite3RowSetI
27d10 6e 73 65 72 74 28 70 49 6e 31 2d 3e 75 2e 70 52  nsert(pIn1->u.pR
27d20 6f 77 53 65 74 2c 20 70 49 6e 32 2d 3e 75 2e 69  owSet, pIn2->u.i
27d30 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
27d40 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 53 65 74  * Opcode: RowSet
27d50 52 65 61 64 20 50 31 20 50 32 20 50 33 20 2a 20  Read P1 P2 P3 * 
27d60 2a 0a 2a 2a 0a 2a 2a 20 45 78 74 72 61 63 74 20  *.**.** Extract 
27d70 74 68 65 20 73 6d 61 6c 6c 65 73 74 20 76 61 6c  the smallest val
27d80 75 65 20 66 72 6f 6d 20 62 6f 6f 6c 65 61 6e 20  ue from boolean 
27d90 69 6e 64 65 78 20 50 31 20 61 6e 64 20 70 75 74  index P1 and put
27da0 20 74 68 61 74 20 76 61 6c 75 65 20 69 6e 74 6f   that value into
27db0 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 33 2e  .** register P3.
27dc0 20 20 4f 72 2c 20 69 66 20 62 6f 6f 6c 65 61 6e    Or, if boolean
27dd0 20 69 6e 64 65 78 20 50 31 20 69 73 20 69 6e 69   index P1 is ini
27de0 74 69 61 6c 6c 79 20 65 6d 70 74 79 2c 20 6c 65  tially empty, le
27df0 61 76 65 20 50 33 0a 2a 2a 20 75 6e 63 68 61 6e  ave P3.** unchan
27e00 67 65 64 20 61 6e 64 20 6a 75 6d 70 20 74 6f 20  ged and jump to 
27e10 69 6e 73 74 72 75 63 74 69 6f 6e 20 50 32 2e 0a  instruction P2..
27e20 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 53 65  */.case OP_RowSe
27e30 74 52 65 61 64 3a 20 7b 20 20 20 20 20 20 20 2f  tRead: {       /
27e40 2a 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 6f 75 74  * jump, in1, out
27e50 33 20 2a 2f 0a 20 20 69 36 34 20 76 61 6c 3b 0a  3 */.  i64 val;.
27e60 20 20 43 48 45 43 4b 5f 46 4f 52 5f 49 4e 54 45    CHECK_FOR_INTE
27e70 52 52 55 50 54 3b 0a 20 20 70 49 6e 31 20 3d 20  RRUPT;.  pIn1 = 
27e80 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
27e90 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
27ea0 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29  gs & MEM_RowSet)
27eb0 3d 3d 30 20 0a 20 20 20 7c 7c 20 73 71 6c 69 74  ==0 .   || sqlit
27ec0 65 33 52 6f 77 53 65 74 4e 65 78 74 28 70 49 6e  e3RowSetNext(pIn
27ed0 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20 26 76  1->u.pRowSet, &v
27ee0 61 6c 29 3d 3d 30 0a 20 20 29 7b 0a 20 20 20 20  al)==0.  ){.    
27ef0 2f 2a 20 54 68 65 20 62 6f 6f 6c 65 61 6e 20 69  /* The boolean i
27f00 6e 64 65 78 20 69 73 20 65 6d 70 74 79 20 2a 2f  ndex is empty */
27f10 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
27f20 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 49 6e 31 29  MemSetNull(pIn1)
27f30 3b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e  ;.    pc = pOp->
27f40 70 32 20 2d 20 31 3b 0a 20 20 7d 65 6c 73 65 7b  p2 - 1;.  }else{
27f50 0a 20 20 20 20 2f 2a 20 41 20 76 61 6c 75 65 20  .    /* A value 
27f60 77 61 73 20 70 75 6c 6c 65 64 20 66 72 6f 6d 20  was pulled from 
27f70 74 68 65 20 69 6e 64 65 78 20 2a 2f 0a 20 20 20  the index */.   
27f80 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
27f90 65 74 49 6e 74 36 34 28 26 61 4d 65 6d 5b 70 4f  etInt64(&aMem[pO
27fa0 70 2d 3e 70 33 5d 2c 20 76 61 6c 29 3b 0a 20 20  p->p3], val);.  
27fb0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
27fc0 20 4f 70 63 6f 64 65 3a 20 52 6f 77 53 65 74 54   Opcode: RowSetT
27fd0 65 73 74 20 50 31 20 50 32 20 50 33 20 50 34 0a  est P1 P2 P3 P4.
27fe0 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50  **.** Register P
27ff0 33 20 69 73 20 61 73 73 75 6d 65 64 20 74 6f 20  3 is assumed to 
28000 68 6f 6c 64 20 61 20 36 34 2d 62 69 74 20 69 6e  hold a 64-bit in
28010 74 65 67 65 72 20 76 61 6c 75 65 2e 20 49 66 20  teger value. If 
28020 72 65 67 69 73 74 65 72 20 50 31 0a 2a 2a 20 63  register P1.** c
28030 6f 6e 74 61 69 6e 73 20 61 20 52 6f 77 53 65 74  ontains a RowSet
28040 20 6f 62 6a 65 63 74 20 61 6e 64 20 74 68 61 74   object and that
28050 20 52 6f 77 53 65 74 20 6f 62 6a 65 63 74 20 63   RowSet object c
28060 6f 6e 74 61 69 6e 73 0a 2a 2a 20 74 68 65 20 76  ontains.** the v
28070 61 6c 75 65 20 68 65 6c 64 20 69 6e 20 50 33 2c  alue held in P3,
28080 20 6a 75 6d 70 20 74 6f 20 72 65 67 69 73 74 65   jump to registe
28090 72 20 50 32 2e 20 4f 74 68 65 72 77 69 73 65 2c  r P2. Otherwise,
280a0 20 69 6e 73 65 72 74 20 74 68 65 0a 2a 2a 20 69   insert the.** i
280b0 6e 74 65 67 65 72 20 69 6e 20 50 33 20 69 6e 74  nteger in P3 int
280c0 6f 20 74 68 65 20 52 6f 77 53 65 74 20 61 6e 64  o the RowSet and
280d0 20 63 6f 6e 74 69 6e 75 65 20 6f 6e 20 74 6f 20   continue on to 
280e0 74 68 65 0a 2a 2a 20 6e 65 78 74 20 6f 70 63 6f  the.** next opco
280f0 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 52 6f  de..**.** The Ro
28100 77 53 65 74 20 6f 62 6a 65 63 74 20 69 73 20 6f  wSet object is o
28110 70 74 69 6d 69 7a 65 64 20 66 6f 72 20 74 68 65  ptimized for the
28120 20 63 61 73 65 20 77 68 65 72 65 20 73 75 63 63   case where succ
28130 65 73 73 69 76 65 20 73 65 74 73 0a 2a 2a 20 6f  essive sets.** o
28140 66 20 69 6e 74 65 67 65 72 73 2c 20 77 68 65 72  f integers, wher
28150 65 20 65 61 63 68 20 73 65 74 20 63 6f 6e 74 61  e each set conta
28160 69 6e 73 20 6e 6f 20 64 75 70 6c 69 63 61 74 65  ins no duplicate
28170 73 2e 20 45 61 63 68 20 73 65 74 0a 2a 2a 20 6f  s. Each set.** o
28180 66 20 76 61 6c 75 65 73 20 69 73 20 69 64 65 6e  f values is iden
28190 74 69 66 69 65 64 20 62 79 20 61 20 75 6e 69 71  tified by a uniq
281a0 75 65 20 50 34 20 76 61 6c 75 65 2e 20 54 68 65  ue P4 value. The
281b0 20 66 69 72 73 74 20 73 65 74 0a 2a 2a 20 6d 75   first set.** mu
281c0 73 74 20 68 61 76 65 20 50 34 3d 3d 30 2c 20 74  st have P4==0, t
281d0 68 65 20 66 69 6e 61 6c 20 73 65 74 20 50 34 3d  he final set P4=
281e0 2d 31 2e 20 20 50 34 20 6d 75 73 74 20 62 65 20  -1.  P4 must be 
281f0 65 69 74 68 65 72 20 2d 31 20 6f 72 0a 2a 2a 20  either -1 or.** 
28200 6e 6f 6e 2d 6e 65 67 61 74 69 76 65 2e 20 20 46  non-negative.  F
28210 6f 72 20 6e 6f 6e 2d 6e 65 67 61 74 69 76 65 20  or non-negative 
28220 76 61 6c 75 65 73 20 6f 66 20 50 34 20 6f 6e 6c  values of P4 onl
28230 79 20 74 68 65 20 6c 6f 77 65 72 20 34 0a 2a 2a  y the lower 4.**
28240 20 62 69 74 73 20 61 72 65 20 73 69 67 6e 69 66   bits are signif
28250 69 63 61 6e 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  icant..**.** Thi
28260 73 20 61 6c 6c 6f 77 73 20 6f 70 74 69 6d 69 7a  s allows optimiz
28270 61 74 69 6f 6e 73 3a 20 28 61 29 20 77 68 65 6e  ations: (a) when
28280 20 50 34 3d 3d 30 20 74 68 65 72 65 20 69 73 20   P4==0 there is 
28290 6e 6f 20 6e 65 65 64 20 74 6f 20 74 65 73 74 0a  no need to test.
282a0 2a 2a 20 74 68 65 20 72 6f 77 73 65 74 20 6f 62  ** the rowset ob
282b0 6a 65 63 74 20 66 6f 72 20 50 33 2c 20 61 73 20  ject for P3, as 
282c0 69 74 20 69 73 20 67 75 61 72 61 6e 74 65 65 64  it is guaranteed
282d0 20 6e 6f 74 20 74 6f 20 63 6f 6e 74 61 69 6e 20   not to contain 
282e0 69 74 2c 0a 2a 2a 20 28 62 29 20 77 68 65 6e 20  it,.** (b) when 
282f0 50 34 3d 3d 2d 31 20 74 68 65 72 65 20 69 73 20  P4==-1 there is 
28300 6e 6f 20 6e 65 65 64 20 74 6f 20 69 6e 73 65 72  no need to inser
28310 74 20 74 68 65 20 76 61 6c 75 65 2c 20 61 73 20  t the value, as 
28320 69 74 20 77 69 6c 6c 0a 2a 2a 20 6e 65 76 65 72  it will.** never
28330 20 62 65 20 74 65 73 74 65 64 20 66 6f 72 2c 20   be tested for, 
28340 61 6e 64 20 28 63 29 20 77 68 65 6e 20 61 20 76  and (c) when a v
28350 61 6c 75 65 20 74 68 61 74 20 69 73 20 70 61 72  alue that is par
28360 74 20 6f 66 20 73 65 74 20 58 20 69 73 0a 2a 2a  t of set X is.**
28370 20 69 6e 73 65 72 74 65 64 2c 20 74 68 65 72 65   inserted, there
28380 20 69 73 20 6e 6f 20 6e 65 65 64 20 74 6f 20 73   is no need to s
28390 65 61 72 63 68 20 74 6f 20 73 65 65 20 69 66 20  earch to see if 
283a0 74 68 65 20 73 61 6d 65 20 76 61 6c 75 65 20 77  the same value w
283b0 61 73 0a 2a 2a 20 70 72 65 76 69 6f 75 73 6c 79  as.** previously
283c0 20 69 6e 73 65 72 74 65 64 20 61 73 20 70 61 72   inserted as par
283d0 74 20 6f 66 20 73 65 74 20 58 20 28 6f 6e 6c 79  t of set X (only
283e0 20 69 66 20 69 74 20 77 61 73 20 70 72 65 76 69   if it was previ
283f0 6f 75 73 6c 79 0a 2a 2a 20 69 6e 73 65 72 74 65  ously.** inserte
28400 64 20 61 73 20 70 61 72 74 20 6f 66 20 73 6f 6d  d as part of som
28410 65 20 6f 74 68 65 72 20 73 65 74 29 2e 0a 2a 2f  e other set)..*/
28420 0a 63 61 73 65 20 4f 50 5f 52 6f 77 53 65 74 54  .case OP_RowSetT
28430 65 73 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20  est: {          
28440 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75             /* ju
28450 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a  mp, in1, in3 */.
28460 20 20 69 6e 74 20 69 53 65 74 3b 0a 20 20 69 6e    int iSet;.  in
28470 74 20 65 78 69 73 74 73 3b 0a 0a 20 20 70 49 6e  t exists;..  pIn
28480 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
28490 31 5d 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d  1];.  pIn3 = &aM
284a0 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69  em[pOp->p3];.  i
284b0 53 65 74 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b  Set = pOp->p4.i;
284c0 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 33 2d  .  assert( pIn3-
284d0 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29  >flags&MEM_Int )
284e0 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 72 65  ;..  /* If there
284f0 20 69 73 20 61 6e 79 74 68 69 6e 67 20 6f 74 68   is anything oth
28500 65 72 20 74 68 61 6e 20 61 20 72 6f 77 73 65 74  er than a rowset
28510 20 6f 62 6a 65 63 74 20 69 6e 20 6d 65 6d 6f 72   object in memor
28520 79 20 63 65 6c 6c 20 50 31 2c 0a 20 20 2a 2a 20  y cell P1,.  ** 
28530 64 65 6c 65 74 65 20 69 74 20 6e 6f 77 20 61 6e  delete it now an
28540 64 20 69 6e 69 74 69 61 6c 69 7a 65 20 50 31 20  d initialize P1 
28550 77 69 74 68 20 61 6e 20 65 6d 70 74 79 20 72 6f  with an empty ro
28560 77 73 65 74 0a 20 20 2a 2f 0a 20 20 69 66 28 20  wset.  */.  if( 
28570 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn1->flags & M
28580 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29 7b  EM_RowSet)==0 ){
28590 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
285a0 4d 65 6d 53 65 74 52 6f 77 53 65 74 28 70 49 6e  MemSetRowSet(pIn
285b0 31 29 3b 0a 20 20 20 20 69 66 28 20 28 70 49 6e  1);.    if( (pIn
285c0 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52  1->flags & MEM_R
285d0 6f 77 53 65 74 29 3d 3d 30 20 29 20 67 6f 74 6f  owSet)==0 ) goto
285e0 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 0a 20 20   no_mem;.  }..  
285f0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
28600 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b  ype==P4_INT32 );
28610 0a 20 20 61 73 73 65 72 74 28 20 69 53 65 74 3d  .  assert( iSet=
28620 3d 2d 31 20 7c 7c 20 69 53 65 74 3e 3d 30 20 29  =-1 || iSet>=0 )
28630 3b 0a 20 20 69 66 28 20 69 53 65 74 20 29 7b 0a  ;.  if( iSet ){.
28640 20 20 20 20 65 78 69 73 74 73 20 3d 20 73 71 6c      exists = sql
28650 69 74 65 33 52 6f 77 53 65 74 54 65 73 74 28 70  ite3RowSetTest(p
28660 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20  In1->u.pRowSet, 
28670 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28690 28 75 38 29 28 69 53 65 74 3e 3d 30 20 3f 20 69  (u8)(iSet>=0 ? i
286a0 53 65 74 20 26 20 30 78 66 20 3a 20 30 78 66 66  Set & 0xf : 0xff
286b0 29 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ),.             
286c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
286d0 20 20 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20 20    pIn3->u.i);.  
286e0 20 20 69 66 28 20 65 78 69 73 74 73 20 29 7b 0a    if( exists ){.
286f0 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e        pc = pOp->
28700 70 32 20 2d 20 31 3b 0a 20 20 20 20 20 20 62 72  p2 - 1;.      br
28710 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  eak;.    }.  }. 
28720 20 69 66 28 20 69 53 65 74 3e 3d 30 20 29 7b 0a   if( iSet>=0 ){.
28730 20 20 20 20 73 71 6c 69 74 65 33 52 6f 77 53 65      sqlite3RowSe
28740 74 49 6e 73 65 72 74 28 70 49 6e 31 2d 3e 75 2e  tInsert(pIn1->u.
28750 70 52 6f 77 53 65 74 2c 20 70 49 6e 33 2d 3e 75  pRowSet, pIn3->u
28760 2e 69 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  .i);.  }.  break
28770 3b 0a 7d 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51  ;.}...#ifndef SQ
28780 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45  LITE_OMIT_TRIGGE
28790 52 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 72  R../* Opcode: Pr
287a0 6f 67 72 61 6d 20 50 31 20 50 32 20 50 33 20 50  ogram P1 P2 P3 P
287b0 34 20 2a 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74  4 *.**.** Execut
287c0 65 20 74 68 65 20 74 72 69 67 67 65 72 20 70 72  e the trigger pr
287d0 6f 67 72 61 6d 20 70 61 73 73 65 64 20 61 73 20  ogram passed as 
287e0 50 34 20 28 74 79 70 65 20 50 34 5f 53 55 42 50  P4 (type P4_SUBP
287f0 52 4f 47 52 41 4d 29 2e 20 0a 2a 2a 0a 2a 2a 20  ROGRAM). .**.** 
28800 50 31 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20  P1 contains the 
28810 61 64 64 72 65 73 73 20 6f 66 20 74 68 65 20 6d  address of the m
28820 65 6d 6f 72 79 20 63 65 6c 6c 20 74 68 61 74 20  emory cell that 
28830 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 66 69 72  contains the fir
28840 73 74 20 6d 65 6d 6f 72 79 20 0a 2a 2a 20 63 65  st memory .** ce
28850 6c 6c 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f  ll in an array o
28860 66 20 76 61 6c 75 65 73 20 75 73 65 64 20 61 73  f values used as
28870 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 74 68   arguments to th
28880 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 2e 20 50  e sub-program. P
28890 32 20 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 74  2 .** contains t
288a0 68 65 20 61 64 64 72 65 73 73 20 74 6f 20 6a 75  he address to ju
288b0 6d 70 20 74 6f 20 69 66 20 74 68 65 20 73 75 62  mp to if the sub
288c0 2d 70 72 6f 67 72 61 6d 20 74 68 72 6f 77 73 20  -program throws 
288d0 61 6e 20 49 47 4e 4f 52 45 20 0a 2a 2a 20 65 78  an IGNORE .** ex
288e0 63 65 70 74 69 6f 6e 20 75 73 69 6e 67 20 74 68  ception using th
288f0 65 20 52 41 49 53 45 28 29 20 66 75 6e 63 74 69  e RAISE() functi
28900 6f 6e 2e 20 52 65 67 69 73 74 65 72 20 50 33 20  on. Register P3 
28910 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 61 64 64  contains the add
28920 72 65 73 73 20 0a 2a 2a 20 6f 66 20 61 20 6d 65  ress .** of a me
28930 6d 6f 72 79 20 63 65 6c 6c 20 69 6e 20 74 68 69  mory cell in thi
28940 73 20 28 74 68 65 20 70 61 72 65 6e 74 29 20 56  s (the parent) V
28950 4d 20 74 68 61 74 20 69 73 20 75 73 65 64 20 74  M that is used t
28960 6f 20 61 6c 6c 6f 63 61 74 65 20 74 68 65 20 0a  o allocate the .
28970 2a 2a 20 6d 65 6d 6f 72 79 20 72 65 71 75 69 72  ** memory requir
28980 65 64 20 62 79 20 74 68 65 20 73 75 62 2d 76 64  ed by the sub-vd
28990 62 65 20 61 74 20 72 75 6e 74 69 6d 65 2e 0a 2a  be at runtime..*
289a0 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69  *.** P4 is a poi
289b0 6e 74 65 72 20 74 6f 20 74 68 65 20 56 4d 20 63  nter to the VM c
289c0 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74 72  ontaining the tr
289d0 69 67 67 65 72 20 70 72 6f 67 72 61 6d 2e 0a 2a  igger program..*
289e0 2f 0a 63 61 73 65 20 4f 50 5f 50 72 6f 67 72 61  /.case OP_Progra
289f0 6d 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a  m: {        /* j
28a00 75 6d 70 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 65  ump */.  int nMe
28a10 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  m;              
28a20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6d 65   /* Number of me
28a30 6d 6f 72 79 20 72 65 67 69 73 74 65 72 73 20 66  mory registers f
28a40 6f 72 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 2a  or sub-program *
28a50 2f 0a 20 20 69 6e 74 20 6e 42 79 74 65 3b 20 20  /.  int nByte;  
28a60 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42              /* B
28a70 79 74 65 73 20 6f 66 20 72 75 6e 74 69 6d 65 20  ytes of runtime 
28a80 73 70 61 63 65 20 72 65 71 75 69 72 65 64 20 66  space required f
28a90 6f 72 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 2a  or sub-program *
28aa0 2f 0a 20 20 4d 65 6d 20 2a 70 52 74 3b 20 20 20  /.  Mem *pRt;   
28ab0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52              /* R
28ac0 65 67 69 73 74 65 72 20 74 6f 20 61 6c 6c 6f 63  egister to alloc
28ad0 61 74 65 20 72 75 6e 74 69 6d 65 20 73 70 61 63  ate runtime spac
28ae0 65 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d  e */.  Mem *pMem
28af0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
28b00 2a 20 55 73 65 64 20 74 6f 20 69 74 65 72 61 74  * Used to iterat
28b10 65 20 74 68 72 6f 75 67 68 20 6d 65 6d 6f 72 79  e through memory
28b20 20 63 65 6c 6c 73 20 2a 2f 0a 20 20 4d 65 6d 20   cells */.  Mem 
28b30 2a 70 45 6e 64 3b 20 20 20 20 20 20 20 20 20 20  *pEnd;          
28b40 20 20 20 20 2f 2a 20 4c 61 73 74 20 6d 65 6d 6f      /* Last memo
28b50 72 79 20 63 65 6c 6c 20 69 6e 20 6e 65 77 20 61  ry cell in new a
28b60 72 72 61 79 20 2a 2f 0a 20 20 56 64 62 65 46 72  rray */.  VdbeFr
28b70 61 6d 65 20 2a 70 46 72 61 6d 65 3b 20 20 20 20  ame *pFrame;    
28b80 20 20 2f 2a 20 4e 65 77 20 76 64 62 65 20 66 72    /* New vdbe fr
28b90 61 6d 65 20 74 6f 20 65 78 65 63 75 74 65 20 69  ame to execute i
28ba0 6e 20 2a 2f 0a 20 20 53 75 62 50 72 6f 67 72 61  n */.  SubProgra
28bb0 6d 20 2a 70 50 72 6f 67 72 61 6d 3b 20 20 20 2f  m *pProgram;   /
28bc0 2a 20 53 75 62 2d 70 72 6f 67 72 61 6d 20 74 6f  * Sub-program to
28bd0 20 65 78 65 63 75 74 65 20 2a 2f 0a 20 20 76 6f   execute */.  vo
28be0 69 64 20 2a 74 3b 20 20 20 20 20 20 20 20 20 20  id *t;          
28bf0 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 69        /* Token i
28c00 64 65 6e 74 69 66 79 69 6e 67 20 74 72 69 67 67  dentifying trigg
28c10 65 72 20 2a 2f 0a 0a 20 20 70 50 72 6f 67 72 61  er */..  pProgra
28c20 6d 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 50 72 6f  m = pOp->p4.pPro
28c30 67 72 61 6d 3b 0a 20 20 70 52 74 20 3d 20 26 61  gram;.  pRt = &a
28c40 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
28c50 61 73 73 65 72 74 28 20 70 50 72 6f 67 72 61 6d  assert( pProgram
28c60 2d 3e 6e 4f 70 3e 30 20 29 3b 0a 20 20 0a 20 20  ->nOp>0 );.  .  
28c70 2f 2a 20 49 66 20 74 68 65 20 70 35 20 66 6c 61  /* If the p5 fla
28c80 67 20 69 73 20 63 6c 65 61 72 2c 20 74 68 65 6e  g is clear, then
28c90 20 72 65 63 75 72 73 69 76 65 20 69 6e 76 6f 63   recursive invoc
28ca0 61 74 69 6f 6e 20 6f 66 20 74 72 69 67 67 65 72  ation of trigger
28cb0 73 20 69 73 20 0a 20 20 2a 2a 20 64 69 73 61 62  s is .  ** disab
28cc0 6c 65 64 20 66 6f 72 20 62 61 63 6b 77 61 72 64  led for backward
28cd0 73 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 20  s compatibility 
28ce0 28 70 35 20 69 73 20 73 65 74 20 69 66 20 74 68  (p5 is set if th
28cf0 69 73 20 73 75 62 2d 70 72 6f 67 72 61 6d 0a 20  is sub-program. 
28d00 20 2a 2a 20 69 73 20 72 65 61 6c 6c 79 20 61 20   ** is really a 
28d10 74 72 69 67 67 65 72 2c 20 6e 6f 74 20 61 20 66  trigger, not a f
28d20 6f 72 65 69 67 6e 20 6b 65 79 20 61 63 74 69 6f  oreign key actio
28d30 6e 2c 20 61 6e 64 20 74 68 65 20 66 6c 61 67 20  n, and the flag 
28d40 73 65 74 0a 20 20 2a 2a 20 61 6e 64 20 63 6c 65  set.  ** and cle
28d50 61 72 65 64 20 62 79 20 74 68 65 20 22 50 52 41  ared by the "PRA
28d60 47 4d 41 20 72 65 63 75 72 73 69 76 65 5f 74 72  GMA recursive_tr
28d70 69 67 67 65 72 73 22 20 63 6f 6d 6d 61 6e 64 20  iggers" command 
28d80 69 73 20 63 6c 65 61 72 29 2e 0a 20 20 2a 2a 20  is clear)..  ** 
28d90 0a 20 20 2a 2a 20 49 74 20 69 73 20 72 65 63 75  .  ** It is recu
28da0 72 73 69 76 65 20 69 6e 76 6f 63 61 74 69 6f 6e  rsive invocation
28db0 20 6f 66 20 74 72 69 67 67 65 72 73 2c 20 61 74   of triggers, at
28dc0 20 74 68 65 20 53 51 4c 20 6c 65 76 65 6c 2c 20   the SQL level, 
28dd0 74 68 61 74 20 69 73 20 0a 20 20 2a 2a 20 64 69  that is .  ** di
28de0 73 61 62 6c 65 64 2e 20 49 6e 20 73 6f 6d 65 20  sabled. In some 
28df0 63 61 73 65 73 20 61 20 73 69 6e 67 6c 65 20 74  cases a single t
28e00 72 69 67 67 65 72 20 6d 61 79 20 67 65 6e 65 72  rigger may gener
28e10 61 74 65 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e  ate more than on
28e20 65 20 0a 20 20 2a 2a 20 53 75 62 50 72 6f 67 72  e .  ** SubProgr
28e30 61 6d 20 28 69 66 20 74 68 65 20 74 72 69 67 67  am (if the trigg
28e40 65 72 20 6d 61 79 20 62 65 20 65 78 65 63 75 74  er may be execut
28e50 65 64 20 77 69 74 68 20 6d 6f 72 65 20 74 68 61  ed with more tha
28e60 6e 20 6f 6e 65 20 64 69 66 66 65 72 65 6e 74 20  n one different 
28e70 0a 20 20 2a 2a 20 4f 4e 20 43 4f 4e 46 4c 49 43  .  ** ON CONFLIC
28e80 54 20 61 6c 67 6f 72 69 74 68 6d 29 2e 20 53 75  T algorithm). Su
28e90 62 50 72 6f 67 72 61 6d 20 73 74 72 75 63 74 75  bProgram structu
28ea0 72 65 73 20 61 73 73 6f 63 69 61 74 65 64 20 77  res associated w
28eb0 69 74 68 20 61 0a 20 20 2a 2a 20 73 69 6e 67 6c  ith a.  ** singl
28ec0 65 20 74 72 69 67 67 65 72 20 61 6c 6c 20 68 61  e trigger all ha
28ed0 76 65 20 74 68 65 20 73 61 6d 65 20 76 61 6c 75  ve the same valu
28ee0 65 20 66 6f 72 20 74 68 65 20 53 75 62 50 72 6f  e for the SubPro
28ef0 67 72 61 6d 2e 74 6f 6b 65 6e 20 0a 20 20 2a 2a  gram.token .  **
28f00 20 76 61 72 69 61 62 6c 65 2e 20 20 2a 2f 0a 20   variable.  */. 
28f10 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 29 7b 0a   if( pOp->p5 ){.
28f20 20 20 20 20 74 20 3d 20 70 50 72 6f 67 72 61 6d      t = pProgram
28f30 2d 3e 74 6f 6b 65 6e 3b 0a 20 20 20 20 66 6f 72  ->token;.    for
28f40 28 70 46 72 61 6d 65 3d 70 2d 3e 70 46 72 61 6d  (pFrame=p->pFram
28f50 65 3b 20 70 46 72 61 6d 65 20 26 26 20 70 46 72  e; pFrame && pFr
28f60 61 6d 65 2d 3e 74 6f 6b 65 6e 21 3d 74 3b 20 70  ame->token!=t; p
28f70 46 72 61 6d 65 3d 70 46 72 61 6d 65 2d 3e 70 50  Frame=pFrame->pP
28f80 61 72 65 6e 74 29 3b 0a 20 20 20 20 69 66 28 20  arent);.    if( 
28f90 70 46 72 61 6d 65 20 29 20 62 72 65 61 6b 3b 0a  pFrame ) break;.
28fa0 20 20 7d 0a 0a 20 20 69 66 28 20 70 2d 3e 6e 46    }..  if( p->nF
28fb0 72 61 6d 65 3e 3d 64 62 2d 3e 61 4c 69 6d 69 74  rame>=db->aLimit
28fc0 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 54 52  [SQLITE_LIMIT_TR
28fd0 49 47 47 45 52 5f 44 45 50 54 48 5d 20 29 7b 0a  IGGER_DEPTH] ){.
28fe0 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
28ff0 45 52 52 4f 52 3b 0a 20 20 20 20 73 71 6c 69 74  ERROR;.    sqlit
29000 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e  e3SetString(&p->
29010 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 74 6f  zErrMsg, db, "to
29020 6f 20 6d 61 6e 79 20 6c 65 76 65 6c 73 20 6f 66  o many levels of
29030 20 74 72 69 67 67 65 72 20 72 65 63 75 72 73 69   trigger recursi
29040 6f 6e 22 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b  on");.    break;
29050 0a 20 20 7d 0a 0a 20 20 2f 2a 20 52 65 67 69 73  .  }..  /* Regis
29060 74 65 72 20 70 52 74 20 69 73 20 75 73 65 64 20  ter pRt is used 
29070 74 6f 20 73 74 6f 72 65 20 74 68 65 20 6d 65 6d  to store the mem
29080 6f 72 79 20 72 65 71 75 69 72 65 64 20 74 6f 20  ory required to 
29090 73 61 76 65 20 74 68 65 20 73 74 61 74 65 0a 20  save the state. 
290a0 20 2a 2a 20 6f 66 20 74 68 65 20 63 75 72 72 65   ** of the curre
290b0 6e 74 20 70 72 6f 67 72 61 6d 2c 20 61 6e 64 20  nt program, and 
290c0 74 68 65 20 6d 65 6d 6f 72 79 20 72 65 71 75 69  the memory requi
290d0 72 65 64 20 61 74 20 72 75 6e 74 69 6d 65 20 74  red at runtime t
290e0 6f 20 65 78 65 63 75 74 65 0a 20 20 2a 2a 20 74  o execute.  ** t
290f0 68 65 20 74 72 69 67 67 65 72 20 70 72 6f 67 72  he trigger progr
29100 61 6d 2e 20 49 66 20 74 68 69 73 20 74 72 69 67  am. If this trig
29110 67 65 72 20 68 61 73 20 62 65 65 6e 20 66 69 72  ger has been fir
29120 65 64 20 62 65 66 6f 72 65 2c 20 74 68 65 6e 20  ed before, then 
29130 70 52 74 20 0a 20 20 2a 2a 20 69 73 20 61 6c 72  pRt .  ** is alr
29140 65 61 64 79 20 61 6c 6c 6f 63 61 74 65 64 2e 20  eady allocated. 
29150 4f 74 68 65 72 77 69 73 65 2c 20 69 74 20 6d 75  Otherwise, it mu
29160 73 74 20 62 65 20 69 6e 69 74 69 61 6c 69 7a 65  st be initialize
29170 64 2e 20 20 2a 2f 0a 20 20 69 66 28 20 28 70 52  d.  */.  if( (pR
29180 74 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 46 72 61  t->flags&MEM_Fra
29190 6d 65 29 3d 3d 30 20 29 7b 0a 20 20 20 20 2f 2a  me)==0 ){.    /*
291a0 20 53 75 62 50 72 6f 67 72 61 6d 2e 6e 4d 65 6d   SubProgram.nMem
291b0 20 69 73 20 73 65 74 20 74 6f 20 74 68 65 20 6e   is set to the n
291c0 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20  umber of memory 
291d0 63 65 6c 6c 73 20 75 73 65 64 20 62 79 20 74 68  cells used by th
291e0 65 20 0a 20 20 20 20 2a 2a 20 70 72 6f 67 72 61  e .    ** progra
291f0 6d 20 73 74 6f 72 65 64 20 69 6e 20 53 75 62 50  m stored in SubP
29200 72 6f 67 72 61 6d 2e 61 4f 70 2e 20 41 73 20 77  rogram.aOp. As w
29210 65 6c 6c 20 61 73 20 74 68 65 73 65 2c 20 6f 6e  ell as these, on
29220 65 20 6d 65 6d 6f 72 79 0a 20 20 20 20 2a 2a 20  e memory.    ** 
29230 63 65 6c 6c 20 69 73 20 72 65 71 75 69 72 65 64  cell is required
29240 20 66 6f 72 20 65 61 63 68 20 63 75 72 73 6f 72   for each cursor
29250 20 75 73 65 64 20 62 79 20 74 68 65 20 70 72 6f   used by the pro
29260 67 72 61 6d 2e 20 53 65 74 20 6c 6f 63 61 6c 0a  gram. Set local.
29270 20 20 20 20 2a 2a 20 76 61 72 69 61 62 6c 65 20      ** variable 
29280 6e 4d 65 6d 20 28 61 6e 64 20 6c 61 74 65 72 2c  nMem (and later,
29290 20 56 64 62 65 46 72 61 6d 65 2e 6e 43 68 69 6c   VdbeFrame.nChil
292a0 64 4d 65 6d 29 20 74 6f 20 74 68 69 73 20 76 61  dMem) to this va
292b0 6c 75 65 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  lue..    */.    
292c0 6e 4d 65 6d 20 3d 20 70 50 72 6f 67 72 61 6d 2d  nMem = pProgram-
292d0 3e 6e 4d 65 6d 20 2b 20 70 50 72 6f 67 72 61 6d  >nMem + pProgram
292e0 2d 3e 6e 43 73 72 3b 0a 20 20 20 20 6e 42 79 74  ->nCsr;.    nByt
292f0 65 20 3d 20 52 4f 55 4e 44 38 28 73 69 7a 65 6f  e = ROUND8(sizeo
29300 66 28 56 64 62 65 46 72 61 6d 65 29 29 0a 20 20  f(VdbeFrame)).  
29310 20 20 20 20 20 20 20 20 20 20 20 20 2b 20 6e 4d              + nM
29320 65 6d 20 2a 20 73 69 7a 65 6f 66 28 4d 65 6d 29  em * sizeof(Mem)
29330 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2b  .              +
29340 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 20   pProgram->nCsr 
29350 2a 20 73 69 7a 65 6f 66 28 56 64 62 65 43 75 72  * sizeof(VdbeCur
29360 73 6f 72 20 2a 29 0a 20 20 20 20 20 20 20 20 20  sor *).         
29370 20 20 20 20 20 2b 20 70 50 72 6f 67 72 61 6d 2d       + pProgram-
29380 3e 6e 4f 6e 63 65 20 2a 20 73 69 7a 65 6f 66 28  >nOnce * sizeof(
29390 75 38 29 3b 0a 20 20 20 20 70 46 72 61 6d 65 20  u8);.    pFrame 
293a0 3d 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f  = sqlite3DbMallo
293b0 63 5a 65 72 6f 28 64 62 2c 20 6e 42 79 74 65 29  cZero(db, nByte)
293c0 3b 0a 20 20 20 20 69 66 28 20 21 70 46 72 61 6d  ;.    if( !pFram
293d0 65 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20  e ){.      goto 
293e0 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 7d 0a 20 20  no_mem;.    }.  
293f0 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
29400 52 65 6c 65 61 73 65 28 70 52 74 29 3b 0a 20 20  Release(pRt);.  
29410 20 20 70 52 74 2d 3e 66 6c 61 67 73 20 3d 20 4d    pRt->flags = M
29420 45 4d 5f 46 72 61 6d 65 3b 0a 20 20 20 20 70 52  EM_Frame;.    pR
29430 74 2d 3e 75 2e 70 46 72 61 6d 65 20 3d 20 70 46  t->u.pFrame = pF
29440 72 61 6d 65 3b 0a 0a 20 20 20 20 70 46 72 61 6d  rame;..    pFram
29450 65 2d 3e 76 20 3d 20 70 3b 0a 20 20 20 20 70 46  e->v = p;.    pF
29460 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 20  rame->nChildMem 
29470 3d 20 6e 4d 65 6d 3b 0a 20 20 20 20 70 46 72 61  = nMem;.    pFra
29480 6d 65 2d 3e 6e 43 68 69 6c 64 43 73 72 20 3d 20  me->nChildCsr = 
29490 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3b 0a  pProgram->nCsr;.
294a0 20 20 20 20 70 46 72 61 6d 65 2d 3e 70 63 20 3d      pFrame->pc =
294b0 20 70 63 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d   pc;.    pFrame-
294c0 3e 61 4d 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b  >aMem = p->aMem;
294d0 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 4d 65  .    pFrame->nMe
294e0 6d 20 3d 20 70 2d 3e 6e 4d 65 6d 3b 0a 20 20 20  m = p->nMem;.   
294f0 20 70 46 72 61 6d 65 2d 3e 61 70 43 73 72 20 3d   pFrame->apCsr =
29500 20 70 2d 3e 61 70 43 73 72 3b 0a 20 20 20 20 70   p->apCsr;.    p
29510 46 72 61 6d 65 2d 3e 6e 43 75 72 73 6f 72 20 3d  Frame->nCursor =
29520 20 70 2d 3e 6e 43 75 72 73 6f 72 3b 0a 20 20 20   p->nCursor;.   
29530 20 70 46 72 61 6d 65 2d 3e 61 4f 70 20 3d 20 70   pFrame->aOp = p
29540 2d 3e 61 4f 70 3b 0a 20 20 20 20 70 46 72 61 6d  ->aOp;.    pFram
29550 65 2d 3e 6e 4f 70 20 3d 20 70 2d 3e 6e 4f 70 3b  e->nOp = p->nOp;
29560 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 74 6f 6b  .    pFrame->tok
29570 65 6e 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 74  en = pProgram->t
29580 6f 6b 65 6e 3b 0a 20 20 20 20 70 46 72 61 6d 65  oken;.    pFrame
29590 2d 3e 61 4f 6e 63 65 46 6c 61 67 20 3d 20 70 2d  ->aOnceFlag = p-
295a0 3e 61 4f 6e 63 65 46 6c 61 67 3b 0a 20 20 20 20  >aOnceFlag;.    
295b0 70 46 72 61 6d 65 2d 3e 6e 4f 6e 63 65 46 6c 61  pFrame->nOnceFla
295c0 67 20 3d 20 70 2d 3e 6e 4f 6e 63 65 46 6c 61 67  g = p->nOnceFlag
295d0 3b 0a 0a 20 20 20 20 70 45 6e 64 20 3d 20 26 56  ;..    pEnd = &V
295e0 64 62 65 46 72 61 6d 65 4d 65 6d 28 70 46 72 61  dbeFrameMem(pFra
295f0 6d 65 29 5b 70 46 72 61 6d 65 2d 3e 6e 43 68 69  me)[pFrame->nChi
29600 6c 64 4d 65 6d 5d 3b 0a 20 20 20 20 66 6f 72 28  ldMem];.    for(
29610 70 4d 65 6d 3d 56 64 62 65 46 72 61 6d 65 4d 65  pMem=VdbeFrameMe
29620 6d 28 70 46 72 61 6d 65 29 3b 20 70 4d 65 6d 21  m(pFrame); pMem!
29630 3d 70 45 6e 64 3b 20 70 4d 65 6d 2b 2b 29 7b 0a  =pEnd; pMem++){.
29640 20 20 20 20 20 20 70 4d 65 6d 2d 3e 66 6c 61 67        pMem->flag
29650 73 20 3d 20 4d 45 4d 5f 49 6e 76 61 6c 69 64 3b  s = MEM_Invalid;
29660 0a 20 20 20 20 20 20 70 4d 65 6d 2d 3e 64 62 20  .      pMem->db 
29670 3d 20 64 62 3b 0a 20 20 20 20 7d 0a 20 20 7d 65  = db;.    }.  }e
29680 6c 73 65 7b 0a 20 20 20 20 70 46 72 61 6d 65 20  lse{.    pFrame 
29690 3d 20 70 52 74 2d 3e 75 2e 70 46 72 61 6d 65 3b  = pRt->u.pFrame;
296a0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 50 72  .    assert( pPr
296b0 6f 67 72 61 6d 2d 3e 6e 4d 65 6d 2b 70 50 72 6f  ogram->nMem+pPro
296c0 67 72 61 6d 2d 3e 6e 43 73 72 3d 3d 70 46 72 61  gram->nCsr==pFra
296d0 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 20 29 3b  me->nChildMem );
296e0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 50 72  .    assert( pPr
296f0 6f 67 72 61 6d 2d 3e 6e 43 73 72 3d 3d 70 46 72  ogram->nCsr==pFr
29700 61 6d 65 2d 3e 6e 43 68 69 6c 64 43 73 72 20 29  ame->nChildCsr )
29710 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 63  ;.    assert( pc
29720 3d 3d 70 46 72 61 6d 65 2d 3e 70 63 20 29 3b 0a  ==pFrame->pc );.
29730 20 20 7d 0a 0a 20 20 70 2d 3e 6e 46 72 61 6d 65    }..  p->nFrame
29740 2b 2b 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 70 50  ++;.  pFrame->pP
29750 61 72 65 6e 74 20 3d 20 70 2d 3e 70 46 72 61 6d  arent = p->pFram
29760 65 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 6c 61 73  e;.  pFrame->las
29770 74 52 6f 77 69 64 20 3d 20 6c 61 73 74 52 6f 77  tRowid = lastRow
29780 69 64 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 6e 43  id;.  pFrame->nC
29790 68 61 6e 67 65 20 3d 20 70 2d 3e 6e 43 68 61 6e  hange = p->nChan
297a0 67 65 3b 0a 20 20 70 2d 3e 6e 43 68 61 6e 67 65  ge;.  p->nChange
297b0 20 3d 20 30 3b 0a 20 20 70 2d 3e 70 46 72 61 6d   = 0;.  p->pFram
297c0 65 20 3d 20 70 46 72 61 6d 65 3b 0a 20 20 70 2d  e = pFrame;.  p-
297d0 3e 61 4d 65 6d 20 3d 20 61 4d 65 6d 20 3d 20 26  >aMem = aMem = &
297e0 56 64 62 65 46 72 61 6d 65 4d 65 6d 28 70 46 72  VdbeFrameMem(pFr
297f0 61 6d 65 29 5b 2d 31 5d 3b 0a 20 20 70 2d 3e 6e  ame)[-1];.  p->n
29800 4d 65 6d 20 3d 20 70 46 72 61 6d 65 2d 3e 6e 43  Mem = pFrame->nC
29810 68 69 6c 64 4d 65 6d 3b 0a 20 20 70 2d 3e 6e 43  hildMem;.  p->nC
29820 75 72 73 6f 72 20 3d 20 28 75 31 36 29 70 46 72  ursor = (u16)pFr
29830 61 6d 65 2d 3e 6e 43 68 69 6c 64 43 73 72 3b 0a  ame->nChildCsr;.
29840 20 20 70 2d 3e 61 70 43 73 72 20 3d 20 28 56 64    p->apCsr = (Vd
29850 62 65 43 75 72 73 6f 72 20 2a 2a 29 26 61 4d 65  beCursor **)&aMe
29860 6d 5b 70 2d 3e 6e 4d 65 6d 2b 31 5d 3b 0a 20 20  m[p->nMem+1];.  
29870 70 2d 3e 61 4f 70 20 3d 20 61 4f 70 20 3d 20 70  p->aOp = aOp = p
29880 50 72 6f 67 72 61 6d 2d 3e 61 4f 70 3b 0a 20 20  Program->aOp;.  
29890 70 2d 3e 6e 4f 70 20 3d 20 70 50 72 6f 67 72 61  p->nOp = pProgra
298a0 6d 2d 3e 6e 4f 70 3b 0a 20 20 70 2d 3e 61 4f 6e  m->nOp;.  p->aOn
298b0 63 65 46 6c 61 67 20 3d 20 28 75 38 20 2a 29 26  ceFlag = (u8 *)&
298c0 70 2d 3e 61 70 43 73 72 5b 70 2d 3e 6e 43 75 72  p->apCsr[p->nCur
298d0 73 6f 72 5d 3b 0a 20 20 70 2d 3e 6e 4f 6e 63 65  sor];.  p->nOnce
298e0 46 6c 61 67 20 3d 20 70 50 72 6f 67 72 61 6d 2d  Flag = pProgram-
298f0 3e 6e 4f 6e 63 65 3b 0a 20 20 70 2d 3e 6e 4f 70  >nOnce;.  p->nOp
29900 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f 70   = pProgram->nOp
29910 3b 0a 20 20 70 63 20 3d 20 2d 31 3b 0a 20 20 6d  ;.  pc = -1;.  m
29920 65 6d 73 65 74 28 70 2d 3e 61 4f 6e 63 65 46 6c  emset(p->aOnceFl
29930 61 67 2c 20 30 2c 20 70 2d 3e 6e 4f 6e 63 65 46  ag, 0, p->nOnceF
29940 6c 61 67 29 3b 0a 0a 20 20 62 72 65 61 6b 3b 0a  lag);..  break;.
29950 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 61  }../* Opcode: Pa
29960 72 61 6d 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ram P1 P2 * * *.
29970 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
29980 65 20 69 73 20 6f 6e 6c 79 20 65 76 65 72 20 70  e is only ever p
29990 72 65 73 65 6e 74 20 69 6e 20 73 75 62 2d 70 72  resent in sub-pr
299a0 6f 67 72 61 6d 73 20 63 61 6c 6c 65 64 20 76 69  ograms called vi
299b0 61 20 74 68 65 20 0a 2a 2a 20 4f 50 5f 50 72 6f  a the .** OP_Pro
299c0 67 72 61 6d 20 69 6e 73 74 72 75 63 74 69 6f 6e  gram instruction
299d0 2e 20 43 6f 70 79 20 61 20 76 61 6c 75 65 20 63  . Copy a value c
299e0 75 72 72 65 6e 74 6c 79 20 73 74 6f 72 65 64 20  urrently stored 
299f0 69 6e 20 61 20 6d 65 6d 6f 72 79 20 0a 2a 2a 20  in a memory .** 
29a00 63 65 6c 6c 20 6f 66 20 74 68 65 20 63 61 6c 6c  cell of the call
29a10 69 6e 67 20 28 70 61 72 65 6e 74 29 20 66 72 61  ing (parent) fra
29a20 6d 65 20 74 6f 20 63 65 6c 6c 20 50 32 20 69 6e  me to cell P2 in
29a30 20 74 68 65 20 63 75 72 72 65 6e 74 20 66 72 61   the current fra
29a40 6d 65 73 20 0a 2a 2a 20 61 64 64 72 65 73 73 20  mes .** address 
29a50 73 70 61 63 65 2e 20 54 68 69 73 20 69 73 20 75  space. This is u
29a60 73 65 64 20 62 79 20 74 72 69 67 67 65 72 20 70  sed by trigger p
29a70 72 6f 67 72 61 6d 73 20 74 6f 20 61 63 63 65 73  rograms to acces
29a80 73 20 74 68 65 20 6e 65 77 2e 2a 20 0a 2a 2a 20  s the new.* .** 
29a90 61 6e 64 20 6f 6c 64 2e 2a 20 76 61 6c 75 65 73  and old.* values
29aa0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 64 64 72  ..**.** The addr
29ab0 65 73 73 20 6f 66 20 74 68 65 20 63 65 6c 6c 20  ess of the cell 
29ac0 69 6e 20 74 68 65 20 70 61 72 65 6e 74 20 66 72  in the parent fr
29ad0 61 6d 65 20 69 73 20 64 65 74 65 72 6d 69 6e 65  ame is determine
29ae0 64 20 62 79 20 61 64 64 69 6e 67 0a 2a 2a 20 74  d by adding.** t
29af0 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
29b00 50 31 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74  P1 argument to t
29b10 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
29b20 50 31 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74  P1 argument to t
29b30 68 65 0a 2a 2a 20 63 61 6c 6c 69 6e 67 20 4f 50  he.** calling OP
29b40 5f 50 72 6f 67 72 61 6d 20 69 6e 73 74 72 75 63  _Program instruc
29b50 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  tion..*/.case OP
29b60 5f 50 61 72 61 6d 3a 20 7b 20 20 20 20 20 20 20  _Param: {       
29b70 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72      /* out2-prer
29b80 65 6c 65 61 73 65 20 2a 2f 0a 20 20 56 64 62 65  elease */.  Vdbe
29b90 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b 0a 20  Frame *pFrame;. 
29ba0 20 4d 65 6d 20 2a 70 49 6e 3b 0a 20 20 70 46 72   Mem *pIn;.  pFr
29bb0 61 6d 65 20 3d 20 70 2d 3e 70 46 72 61 6d 65 3b  ame = p->pFrame;
29bc0 0a 20 20 70 49 6e 20 3d 20 26 70 46 72 61 6d 65  .  pIn = &pFrame
29bd0 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 20 2b  ->aMem[pOp->p1 +
29be0 20 70 46 72 61 6d 65 2d 3e 61 4f 70 5b 70 46 72   pFrame->aOp[pFr
29bf0 61 6d 65 2d 3e 70 63 5d 2e 70 31 5d 3b 20 20 20  ame->pc].p1];   
29c00 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
29c10 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75  mShallowCopy(pOu
29c20 74 2c 20 70 49 6e 2c 20 4d 45 4d 5f 45 70 68 65  t, pIn, MEM_Ephe
29c30 6d 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  m);.  break;.}..
29c40 23 65 6e 64 69 66 20 2f 2a 20 23 69 66 6e 64 65  #endif /* #ifnde
29c50 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52  f SQLITE_OMIT_TR
29c60 49 47 47 45 52 20 2a 2f 0a 0a 23 69 66 6e 64 65  IGGER */..#ifnde
29c70 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f  f SQLITE_OMIT_FO
29c80 52 45 49 47 4e 5f 4b 45 59 0a 2f 2a 20 4f 70 63  REIGN_KEY./* Opc
29c90 6f 64 65 3a 20 46 6b 43 6f 75 6e 74 65 72 20 50  ode: FkCounter P
29ca0 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
29cb0 20 49 6e 63 72 65 6d 65 6e 74 20 61 20 22 63 6f   Increment a "co
29cc0 6e 73 74 72 61 69 6e 74 20 63 6f 75 6e 74 65 72  nstraint counter
29cd0 22 20 62 79 20 50 32 20 28 50 32 20 6d 61 79 20  " by P2 (P2 may 
29ce0 62 65 20 6e 65 67 61 74 69 76 65 20 6f 72 20 70  be negative or p
29cf0 6f 73 69 74 69 76 65 29 2e 0a 2a 2a 20 49 66 20  ositive)..** If 
29d00 50 31 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20  P1 is non-zero, 
29d10 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e  the database con
29d20 73 74 72 61 69 6e 74 20 63 6f 75 6e 74 65 72 20  straint counter 
29d30 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 0a  is incremented .
29d40 2a 2a 20 28 64 65 66 65 72 72 65 64 20 66 6f 72  ** (deferred for
29d50 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61  eign key constra
29d60 69 6e 74 73 29 2e 20 4f 74 68 65 72 77 69 73 65  ints). Otherwise
29d70 2c 20 69 66 20 50 31 20 69 73 20 7a 65 72 6f 2c  , if P1 is zero,
29d80 20 74 68 65 20 0a 2a 2a 20 73 74 61 74 65 6d 65   the .** stateme
29d90 6e 74 20 63 6f 75 6e 74 65 72 20 69 73 20 69 6e  nt counter is in
29da0 63 72 65 6d 65 6e 74 65 64 20 28 69 6d 6d 65 64  cremented (immed
29db0 69 61 74 65 20 66 6f 72 65 69 67 6e 20 6b 65 79  iate foreign key
29dc0 20 63 6f 6e 73 74 72 61 69 6e 74 73 29 2e 0a 2a   constraints)..*
29dd0 2f 0a 63 61 73 65 20 4f 50 5f 46 6b 43 6f 75 6e  /.case OP_FkCoun
29de0 74 65 72 3a 20 7b 0a 20 20 69 66 28 20 70 4f 70  ter: {.  if( pOp
29df0 2d 3e 70 31 20 29 7b 0a 20 20 20 20 64 62 2d 3e  ->p1 ){.    db->
29e00 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 20 2b 3d  nDeferredCons +=
29e10 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 7d 65 6c 73   pOp->p2;.  }els
29e20 65 7b 0a 20 20 20 20 70 2d 3e 6e 46 6b 43 6f 6e  e{.    p->nFkCon
29e30 73 74 72 61 69 6e 74 20 2b 3d 20 70 4f 70 2d 3e  straint += pOp->
29e40 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  p2;.  }.  break;
29e50 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46  .}../* Opcode: F
29e60 6b 49 66 5a 65 72 6f 20 50 31 20 50 32 20 2a 20  kIfZero P1 P2 * 
29e70 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  * *.**.** This o
29e80 70 63 6f 64 65 20 74 65 73 74 73 20 69 66 20 61  pcode tests if a
29e90 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e   foreign key con
29ea0 73 74 72 61 69 6e 74 2d 63 6f 75 6e 74 65 72 20  straint-counter 
29eb0 69 73 20 63 75 72 72 65 6e 74 6c 79 20 7a 65 72  is currently zer
29ec0 6f 2e 0a 2a 2a 20 49 66 20 73 6f 2c 20 6a 75 6d  o..** If so, jum
29ed0 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e  p to instruction
29ee0 20 50 32 2e 20 4f 74 68 65 72 77 69 73 65 2c 20   P2. Otherwise, 
29ef0 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  fall through to 
29f00 74 68 65 20 6e 65 78 74 20 0a 2a 2a 20 69 6e 73  the next .** ins
29f10 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  truction..**.** 
29f20 49 66 20 50 31 20 69 73 20 6e 6f 6e 2d 7a 65 72  If P1 is non-zer
29f30 6f 2c 20 74 68 65 6e 20 74 68 65 20 6a 75 6d 70  o, then the jump
29f40 20 69 73 20 74 61 6b 65 6e 20 69 66 20 74 68 65   is taken if the
29f50 20 64 61 74 61 62 61 73 65 20 63 6f 6e 73 74 72   database constr
29f60 61 69 6e 74 2d 63 6f 75 6e 74 65 72 0a 2a 2a 20  aint-counter.** 
29f70 69 73 20 7a 65 72 6f 20 28 74 68 65 20 6f 6e 65  is zero (the one
29f80 20 74 68 61 74 20 63 6f 75 6e 74 73 20 64 65 66   that counts def
29f90 65 72 72 65 64 20 63 6f 6e 73 74 72 61 69 6e 74  erred constraint
29fa0 20 76 69 6f 6c 61 74 69 6f 6e 73 29 2e 20 49 66   violations). If
29fb0 20 50 31 20 69 73 0a 2a 2a 20 7a 65 72 6f 2c 20   P1 is.** zero, 
29fc0 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65  the jump is take
29fd0 6e 20 69 66 20 74 68 65 20 73 74 61 74 65 6d 65  n if the stateme
29fe0 6e 74 20 63 6f 6e 73 74 72 61 69 6e 74 2d 63 6f  nt constraint-co
29ff0 75 6e 74 65 72 20 69 73 20 7a 65 72 6f 0a 2a 2a  unter is zero.**
2a000 20 28 69 6d 6d 65 64 69 61 74 65 20 66 6f 72 65   (immediate fore
2a010 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69  ign key constrai
2a020 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 73 29 2e 0a  nt violations)..
2a030 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 6b 49 66 5a  */.case OP_FkIfZ
2a040 65 72 6f 3a 20 7b 20 20 20 20 20 20 20 20 20 2f  ero: {         /
2a050 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 66 28 20  * jump */.  if( 
2a060 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 69  pOp->p1 ){.    i
2a070 66 28 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64  f( db->nDeferred
2a080 43 6f 6e 73 3d 3d 30 20 29 20 70 63 20 3d 20 70  Cons==0 ) pc = p
2a090 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d 65 6c 73  Op->p2-1;.  }els
2a0a0 65 7b 0a 20 20 20 20 69 66 28 20 70 2d 3e 6e 46  e{.    if( p->nF
2a0b0 6b 43 6f 6e 73 74 72 61 69 6e 74 3d 3d 30 20 29  kConstraint==0 )
2a0c0 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b   pc = pOp->p2-1;
2a0d0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
2a0e0 23 65 6e 64 69 66 20 2f 2a 20 23 69 66 6e 64 65  #endif /* #ifnde
2a0f0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f  f SQLITE_OMIT_FO
2a100 52 45 49 47 4e 5f 4b 45 59 20 2a 2f 0a 0a 23 69  REIGN_KEY */..#i
2a110 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2a120 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a  T_AUTOINCREMENT.
2a130 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 65 6d 4d 61  /* Opcode: MemMa
2a140 78 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  x P1 P2 * * *.**
2a150 0a 2a 2a 20 50 31 20 69 73 20 61 20 72 65 67 69  .** P1 is a regi
2a160 73 74 65 72 20 69 6e 20 74 68 65 20 72 6f 6f 74  ster in the root
2a170 20 66 72 61 6d 65 20 6f 66 20 74 68 69 73 20 56   frame of this V
2a180 4d 20 28 74 68 65 20 72 6f 6f 74 20 66 72 61 6d  M (the root fram
2a190 65 20 69 73 0a 2a 2a 20 64 69 66 66 65 72 65 6e  e is.** differen
2a1a0 74 20 66 72 6f 6d 20 74 68 65 20 63 75 72 72 65  t from the curre
2a1b0 6e 74 20 66 72 61 6d 65 20 69 66 20 74 68 69 73  nt frame if this
2a1c0 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20   instruction is 
2a1d0 62 65 69 6e 67 20 65 78 65 63 75 74 65 64 0a 2a  being executed.*
2a1e0 2a 20 77 69 74 68 69 6e 20 61 20 73 75 62 2d 70  * within a sub-p
2a1f0 72 6f 67 72 61 6d 29 2e 20 53 65 74 20 74 68 65  rogram). Set the
2a200 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74   value of regist
2a210 65 72 20 50 31 20 74 6f 20 74 68 65 20 6d 61 78  er P1 to the max
2a220 69 6d 75 6d 20 6f 66 20 0a 2a 2a 20 69 74 73 20  imum of .** its 
2a230 63 75 72 72 65 6e 74 20 76 61 6c 75 65 20 61 6e  current value an
2a240 64 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  d the value in r
2a250 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a  egister P2..**.*
2a260 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69  * This instructi
2a270 6f 6e 20 74 68 72 6f 77 73 20 61 6e 20 65 72 72  on throws an err
2a280 6f 72 20 69 66 20 74 68 65 20 6d 65 6d 6f 72 79  or if the memory
2a290 20 63 65 6c 6c 20 69 73 20 6e 6f 74 20 69 6e 69   cell is not ini
2a2a0 74 69 61 6c 6c 79 0a 2a 2a 20 61 6e 20 69 6e 74  tially.** an int
2a2b0 65 67 65 72 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  eger..*/.case OP
2a2c0 5f 4d 65 6d 4d 61 78 3a 20 7b 20 20 20 20 20 20  _MemMax: {      
2a2d0 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20 4d 65    /* in2 */.  Me
2a2e0 6d 20 2a 70 49 6e 31 3b 0a 20 20 56 64 62 65 46  m *pIn1;.  VdbeF
2a2f0 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b 0a 20 20  rame *pFrame;.  
2a300 69 66 28 20 70 2d 3e 70 46 72 61 6d 65 20 29 7b  if( p->pFrame ){
2a310 0a 20 20 20 20 66 6f 72 28 70 46 72 61 6d 65 3d  .    for(pFrame=
2a320 70 2d 3e 70 46 72 61 6d 65 3b 20 70 46 72 61 6d  p->pFrame; pFram
2a330 65 2d 3e 70 50 61 72 65 6e 74 3b 20 70 46 72 61  e->pParent; pFra
2a340 6d 65 3d 70 46 72 61 6d 65 2d 3e 70 50 61 72 65  me=pFrame->pPare
2a350 6e 74 29 3b 0a 20 20 20 20 70 49 6e 31 20 3d 20  nt);.    pIn1 = 
2a360 26 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f  &pFrame->aMem[pO
2a370 70 2d 3e 70 31 5d 3b 0a 20 20 7d 65 6c 73 65 7b  p->p1];.  }else{
2a380 0a 20 20 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  .    pIn1 = &aMe
2a390 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 7d 0a  m[pOp->p1];.  }.
2a3a0 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
2a3b0 61 6c 69 64 28 70 49 6e 31 29 20 29 3b 0a 20 20  alid(pIn1) );.  
2a3c0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e  sqlite3VdbeMemIn
2a3d0 74 65 67 65 72 69 66 79 28 70 49 6e 31 29 3b 0a  tegerify(pIn1);.
2a3e0 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70    pIn2 = &aMem[p
2a3f0 4f 70 2d 3e 70 32 5d 3b 0a 20 20 73 71 6c 69 74  Op->p2];.  sqlit
2a400 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72  e3VdbeMemInteger
2a410 69 66 79 28 70 49 6e 32 29 3b 0a 20 20 69 66 28  ify(pIn2);.  if(
2a420 20 70 49 6e 31 2d 3e 75 2e 69 3c 70 49 6e 32 2d   pIn1->u.i<pIn2-
2a430 3e 75 2e 69 29 7b 0a 20 20 20 20 70 49 6e 31 2d  >u.i){.    pIn1-
2a440 3e 75 2e 69 20 3d 20 70 49 6e 32 2d 3e 75 2e 69  >u.i = pIn2->u.i
2a450 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
2a460 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
2a470 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45  E_OMIT_AUTOINCRE
2a480 4d 45 4e 54 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f  MENT */../* Opco
2a490 64 65 3a 20 49 66 50 6f 73 20 50 31 20 50 32 20  de: IfPos P1 P2 
2a4a0 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 74  * * *.**.** If t
2a4b0 68 65 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69  he value of regi
2a4c0 73 74 65 72 20 50 31 20 69 73 20 31 20 6f 72 20  ster P1 is 1 or 
2a4d0 67 72 65 61 74 65 72 2c 20 6a 75 6d 70 20 74 6f  greater, jump to
2a4e0 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73   P2..**.** It is
2a4f0 20 69 6c 6c 65 67 61 6c 20 74 6f 20 75 73 65 20   illegal to use 
2a500 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
2a510 20 6f 6e 20 61 20 72 65 67 69 73 74 65 72 20 74   on a register t
2a520 68 61 74 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20  hat does.** not 
2a530 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65 67  contain an integ
2a540 65 72 2e 20 20 41 6e 20 61 73 73 65 72 74 69 6f  er.  An assertio
2a550 6e 20 66 61 75 6c 74 20 77 69 6c 6c 20 72 65 73  n fault will res
2a560 75 6c 74 20 69 66 20 79 6f 75 20 74 72 79 2e 0a  ult if you try..
2a570 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 50 6f 73  */.case OP_IfPos
2a580 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  : {        /* ju
2a590 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e  mp, in1 */.  pIn
2a5a0 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
2a5b0 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49  1];.  assert( pI
2a5c0 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e  n1->flags&MEM_In
2a5d0 74 20 29 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d  t );.  if( pIn1-
2a5e0 3e 75 2e 69 3e 30 20 29 7b 0a 20 20 20 20 20 70  >u.i>0 ){.     p
2a5f0 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
2a600 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
2a610 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 4e 65  ./* Opcode: IfNe
2a620 67 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  g P1 P2 * * *.**
2a630 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65  .** If the value
2a640 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 31 20   of register P1 
2a650 69 73 20 6c 65 73 73 20 74 68 61 6e 20 7a 65 72  is less than zer
2a660 6f 2c 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 0a  o, jump to P2. .
2a670 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69 6c 6c 65  **.** It is ille
2a680 67 61 6c 20 74 6f 20 75 73 65 20 74 68 69 73 20  gal to use this 
2a690 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 20 61  instruction on a
2a6a0 20 72 65 67 69 73 74 65 72 20 74 68 61 74 20 64   register that d
2a6b0 6f 65 73 0a 2a 2a 20 6e 6f 74 20 63 6f 6e 74 61  oes.** not conta
2a6c0 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20  in an integer.  
2a6d0 41 6e 20 61 73 73 65 72 74 69 6f 6e 20 66 61 75  An assertion fau
2a6e0 6c 74 20 77 69 6c 6c 20 72 65 73 75 6c 74 20 69  lt will result i
2a6f0 66 20 79 6f 75 20 74 72 79 2e 0a 2a 2f 0a 63 61  f you try..*/.ca
2a700 73 65 20 4f 50 5f 49 66 4e 65 67 3a 20 7b 20 20  se OP_IfNeg: {  
2a710 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
2a720 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26  n1 */.  pIn1 = &
2a730 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
2a740 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66   assert( pIn1->f
2a750 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a  lags&MEM_Int );.
2a760 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3c    if( pIn1->u.i<
2a770 30 20 29 7b 0a 20 20 20 20 20 70 63 20 3d 20 70  0 ){.     pc = p
2a780 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a  Op->p2 - 1;.  }.
2a790 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
2a7a0 70 63 6f 64 65 3a 20 49 66 5a 65 72 6f 20 50 31  pcode: IfZero P1
2a7b0 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
2a7c0 20 54 68 65 20 72 65 67 69 73 74 65 72 20 50 31   The register P1
2a7d0 20 6d 75 73 74 20 63 6f 6e 74 61 69 6e 20 61 6e   must contain an
2a7e0 20 69 6e 74 65 67 65 72 2e 20 20 41 64 64 20 6c   integer.  Add l
2a7f0 69 74 65 72 61 6c 20 50 33 20 74 6f 20 74 68 65  iteral P3 to the
2a800 0a 2a 2a 20 76 61 6c 75 65 20 69 6e 20 72 65 67  .** value in reg
2a810 69 73 74 65 72 20 50 31 2e 20 20 49 66 20 74 68  ister P1.  If th
2a820 65 20 72 65 73 75 6c 74 20 69 73 20 65 78 61 63  e result is exac
2a830 74 6c 79 20 30 2c 20 6a 75 6d 70 20 74 6f 20 50  tly 0, jump to P
2a840 32 2e 20 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73 20  2. .**.** It is 
2a850 69 6c 6c 65 67 61 6c 20 74 6f 20 75 73 65 20 74  illegal to use t
2a860 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
2a870 6f 6e 20 61 20 72 65 67 69 73 74 65 72 20 74 68  on a register th
2a880 61 74 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 63  at does.** not c
2a890 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65 67 65  ontain an intege
2a8a0 72 2e 20 20 41 6e 20 61 73 73 65 72 74 69 6f 6e  r.  An assertion
2a8b0 20 66 61 75 6c 74 20 77 69 6c 6c 20 72 65 73 75   fault will resu
2a8c0 6c 74 20 69 66 20 79 6f 75 20 74 72 79 2e 0a 2a  lt if you try..*
2a8d0 2f 0a 63 61 73 65 20 4f 50 5f 49 66 5a 65 72 6f  /.case OP_IfZero
2a8e0 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  : {        /* ju
2a8f0 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e  mp, in1 */.  pIn
2a900 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
2a910 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49  1];.  assert( pI
2a920 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e  n1->flags&MEM_In
2a930 74 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69  t );.  pIn1->u.i
2a940 20 2b 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 69   += pOp->p3;.  i
2a950 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3d 3d 30 20  f( pIn1->u.i==0 
2a960 29 7b 0a 20 20 20 20 20 70 63 20 3d 20 70 4f 70  ){.     pc = pOp
2a970 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20  ->p2 - 1;.  }.  
2a980 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
2a990 6f 64 65 3a 20 41 67 67 53 74 65 70 20 2a 20 50  ode: AggStep * P
2a9a0 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a  2 P3 P4 P5.**.**
2a9b0 20 45 78 65 63 75 74 65 20 74 68 65 20 73 74 65   Execute the ste
2a9c0 70 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61  p function for a
2a9d0 6e 20 61 67 67 72 65 67 61 74 65 2e 20 20 54 68  n aggregate.  Th
2a9e0 65 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 20 68 61  e.** function ha
2a9f0 73 20 50 35 20 61 72 67 75 6d 65 6e 74 73 2e 20  s P5 arguments. 
2aa00 20 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65    P4 is a pointe
2aa10 72 20 74 6f 20 74 68 65 20 46 75 6e 63 44 65 66  r to the FuncDef
2aa20 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 20 74 68  .** structure th
2aa30 61 74 20 73 70 65 63 69 66 69 65 73 20 74 68 65  at specifies the
2aa40 20 66 75 6e 63 74 69 6f 6e 2e 20 20 55 73 65 20   function.  Use 
2aa50 72 65 67 69 73 74 65 72 0a 2a 2a 20 50 33 20 61  register.** P3 a
2aa60 73 20 74 68 65 20 61 63 63 75 6d 75 6c 61 74 6f  s the accumulato
2aa70 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 35 20  r..**.** The P5 
2aa80 61 72 67 75 6d 65 6e 74 73 20 61 72 65 20 74 61  arguments are ta
2aa90 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69 73 74 65  ken from registe
2aaa0 72 20 50 32 20 61 6e 64 20 69 74 73 0a 2a 2a 20  r P2 and its.** 
2aab0 73 75 63 63 65 73 73 6f 72 73 2e 0a 2a 2f 0a 63  successors..*/.c
2aac0 61 73 65 20 4f 50 5f 41 67 67 53 74 65 70 3a 20  ase OP_AggStep: 
2aad0 7b 0a 20 20 69 6e 74 20 6e 3b 0a 20 20 69 6e 74  {.  int n;.  int
2aae0 20 69 3b 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b   i;.  Mem *pMem;
2aaf0 0a 20 20 4d 65 6d 20 2a 70 52 65 63 3b 0a 20 20  .  Mem *pRec;.  
2ab00 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20  sqlite3_context 
2ab10 63 74 78 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76  ctx;.  sqlite3_v
2ab20 61 6c 75 65 20 2a 2a 61 70 56 61 6c 3b 0a 0a 20  alue **apVal;.. 
2ab30 20 6e 20 3d 20 70 4f 70 2d 3e 70 35 3b 0a 20 20   n = pOp->p5;.  
2ab40 61 73 73 65 72 74 28 20 6e 3e 3d 30 20 29 3b 0a  assert( n>=0 );.
2ab50 20 20 70 52 65 63 20 3d 20 26 61 4d 65 6d 5b 70    pRec = &aMem[p
2ab60 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 70 56 61 6c  Op->p2];.  apVal
2ab70 20 3d 20 70 2d 3e 61 70 41 72 67 3b 0a 20 20 61   = p->apArg;.  a
2ab80 73 73 65 72 74 28 20 61 70 56 61 6c 20 7c 7c 20  ssert( apVal || 
2ab90 6e 3d 3d 30 20 29 3b 0a 20 20 66 6f 72 28 69 3d  n==0 );.  for(i=
2aba0 30 3b 20 69 3c 6e 3b 20 69 2b 2b 2c 20 70 52 65  0; i<n; i++, pRe
2abb0 63 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72 74  c++){.    assert
2abc0 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 52 65  ( memIsValid(pRe
2abd0 63 29 20 29 3b 0a 20 20 20 20 61 70 56 61 6c 5b  c) );.    apVal[
2abe0 69 5d 20 3d 20 70 52 65 63 3b 0a 20 20 20 20 6d  i] = pRec;.    m
2abf0 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
2ac00 70 2c 20 70 52 65 63 29 3b 0a 20 20 20 20 73 71  p, pRec);.    sq
2ac10 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74 6f 72  lite3VdbeMemStor
2ac20 65 54 79 70 65 28 70 52 65 63 29 3b 0a 20 20 7d  eType(pRec);.  }
2ac30 0a 20 20 63 74 78 2e 70 46 75 6e 63 20 3d 20 70  .  ctx.pFunc = p
2ac40 4f 70 2d 3e 70 34 2e 70 46 75 6e 63 3b 0a 20 20  Op->p4.pFunc;.  
2ac50 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e  assert( pOp->p3>
2ac60 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d  0 && pOp->p3<=p-
2ac70 3e 6e 4d 65 6d 20 29 3b 0a 20 20 63 74 78 2e 70  >nMem );.  ctx.p
2ac80 4d 65 6d 20 3d 20 70 4d 65 6d 20 3d 20 26 61 4d  Mem = pMem = &aM
2ac90 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 70  em[pOp->p3];.  p
2aca0 4d 65 6d 2d 3e 6e 2b 2b 3b 0a 20 20 63 74 78 2e  Mem->n++;.  ctx.
2acb0 73 2e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75  s.flags = MEM_Nu
2acc0 6c 6c 3b 0a 20 20 63 74 78 2e 73 2e 7a 20 3d 20  ll;.  ctx.s.z = 
2acd0 30 3b 0a 20 20 63 74 78 2e 73 2e 7a 4d 61 6c 6c  0;.  ctx.s.zMall
2ace0 6f 63 20 3d 20 30 3b 0a 20 20 63 74 78 2e 73 2e  oc = 0;.  ctx.s.
2acf0 78 44 65 6c 20 3d 20 30 3b 0a 20 20 63 74 78 2e  xDel = 0;.  ctx.
2ad00 73 2e 64 62 20 3d 20 64 62 3b 0a 20 20 63 74 78  s.db = db;.  ctx
2ad10 2e 69 73 45 72 72 6f 72 20 3d 20 30 3b 0a 20 20  .isError = 0;.  
2ad20 63 74 78 2e 70 43 6f 6c 6c 20 3d 20 30 3b 0a 20  ctx.pColl = 0;. 
2ad30 20 69 66 28 20 63 74 78 2e 70 46 75 6e 63 2d 3e   if( ctx.pFunc->
2ad40 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 46  flags & SQLITE_F
2ad50 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20 29 7b 0a  UNC_NEEDCOLL ){.
2ad60 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 3e      assert( pOp>
2ad70 70 2d 3e 61 4f 70 20 29 3b 0a 20 20 20 20 61 73  p->aOp );.    as
2ad80 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 70 34  sert( pOp[-1].p4
2ad90 74 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51  type==P4_COLLSEQ
2ada0 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
2adb0 70 4f 70 5b 2d 31 5d 2e 6f 70 63 6f 64 65 3d 3d  pOp[-1].opcode==
2adc0 4f 50 5f 43 6f 6c 6c 53 65 71 20 29 3b 0a 20 20  OP_CollSeq );.  
2add0 20 20 63 74 78 2e 70 43 6f 6c 6c 20 3d 20 70 4f    ctx.pColl = pO
2ade0 70 5b 2d 31 5d 2e 70 34 2e 70 43 6f 6c 6c 3b 0a  p[-1].p4.pColl;.
2adf0 20 20 7d 0a 20 20 28 63 74 78 2e 70 46 75 6e 63    }.  (ctx.pFunc
2ae00 2d 3e 78 53 74 65 70 29 28 26 63 74 78 2c 20 6e  ->xStep)(&ctx, n
2ae10 2c 20 61 70 56 61 6c 29 3b 20 2f 2a 20 49 4d 50  , apVal); /* IMP
2ae20 3a 20 52 2d 32 34 35 30 35 2d 32 33 32 33 30 20  : R-24505-23230 
2ae30 2a 2f 0a 20 20 69 66 28 20 63 74 78 2e 69 73 45  */.  if( ctx.isE
2ae40 72 72 6f 72 20 29 7b 0a 20 20 20 20 73 71 6c 69  rror ){.    sqli
2ae50 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d  te3SetString(&p-
2ae60 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 25  >zErrMsg, db, "%
2ae70 73 22 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  s", sqlite3_valu
2ae80 65 5f 74 65 78 74 28 26 63 74 78 2e 73 29 29 3b  e_text(&ctx.s));
2ae90 0a 20 20 20 20 72 63 20 3d 20 63 74 78 2e 69 73  .    rc = ctx.is
2aea0 45 72 72 6f 72 3b 0a 20 20 7d 0a 0a 20 20 73 71  Error;.  }..  sq
2aeb0 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65  lite3VdbeMemRele
2aec0 61 73 65 28 26 63 74 78 2e 73 29 3b 0a 0a 20 20  ase(&ctx.s);..  
2aed0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
2aee0 6f 64 65 3a 20 41 67 67 46 69 6e 61 6c 20 50 31  ode: AggFinal P1
2aef0 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a   P2 * P4 *.**.**
2af00 20 45 78 65 63 75 74 65 20 74 68 65 20 66 69 6e   Execute the fin
2af10 61 6c 69 7a 65 72 20 66 75 6e 63 74 69 6f 6e 20  alizer function 
2af20 66 6f 72 20 61 6e 20 61 67 67 72 65 67 61 74 65  for an aggregate
2af30 2e 20 20 50 31 20 69 73 0a 2a 2a 20 74 68 65 20  .  P1 is.** the 
2af40 6d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20  memory location 
2af50 74 68 61 74 20 69 73 20 74 68 65 20 61 63 63 75  that is the accu
2af60 6d 75 6c 61 74 6f 72 20 66 6f 72 20 74 68 65 20  mulator for the 
2af70 61 67 67 72 65 67 61 74 65 2e 0a 2a 2a 0a 2a 2a  aggregate..**.**
2af80 20 50 32 20 69 73 20 74 68 65 20 6e 75 6d 62 65   P2 is the numbe
2af90 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 74  r of arguments t
2afa0 68 61 74 20 74 68 65 20 73 74 65 70 20 66 75 6e  hat the step fun
2afb0 63 74 69 6f 6e 20 74 61 6b 65 73 20 61 6e 64 0a  ction takes and.
2afc0 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74  ** P4 is a point
2afd0 65 72 20 74 6f 20 74 68 65 20 46 75 6e 63 44 65  er to the FuncDe
2afe0 66 20 66 6f 72 20 74 68 69 73 20 66 75 6e 63 74  f for this funct
2aff0 69 6f 6e 2e 20 20 54 68 65 20 50 32 0a 2a 2a 20  ion.  The P2.** 
2b000 61 72 67 75 6d 65 6e 74 20 69 73 20 6e 6f 74 20  argument is not 
2b010 75 73 65 64 20 62 79 20 74 68 69 73 20 6f 70 63  used by this opc
2b020 6f 64 65 2e 20 20 49 74 20 69 73 20 6f 6e 6c 79  ode.  It is only
2b030 20 74 68 65 72 65 20 74 6f 20 64 69 73 61 6d 62   there to disamb
2b040 69 67 75 61 74 65 0a 2a 2a 20 66 75 6e 63 74 69  iguate.** functi
2b050 6f 6e 73 20 74 68 61 74 20 63 61 6e 20 74 61 6b  ons that can tak
2b060 65 20 76 61 72 79 69 6e 67 20 6e 75 6d 62 65 72  e varying number
2b070 73 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 2e 20  s of arguments. 
2b080 20 54 68 65 0a 2a 2a 20 50 34 20 61 72 67 75 6d   The.** P4 argum
2b090 65 6e 74 20 69 73 20 6f 6e 6c 79 20 6e 65 65 64  ent is only need
2b0a0 65 64 20 66 6f 72 20 74 68 65 20 64 65 67 65 6e  ed for the degen
2b0b0 65 72 61 74 65 20 63 61 73 65 20 77 68 65 72 65  erate case where
2b0c0 0a 2a 2a 20 74 68 65 20 73 74 65 70 20 66 75 6e  .** the step fun
2b0d0 63 74 69 6f 6e 20 77 61 73 20 6e 6f 74 20 70 72  ction was not pr
2b0e0 65 76 69 6f 75 73 6c 79 20 63 61 6c 6c 65 64 2e  eviously called.
2b0f0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 67 67 46  .*/.case OP_AggF
2b100 69 6e 61 6c 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70  inal: {.  Mem *p
2b110 4d 65 6d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  Mem;.  assert( p
2b120 4f 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d  Op->p1>0 && pOp-
2b130 3e 70 31 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a  >p1<=p->nMem );.
2b140 20 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70    pMem = &aMem[p
2b150 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
2b160 74 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20  t( (pMem->flags 
2b170 26 20 7e 28 4d 45 4d 5f 4e 75 6c 6c 7c 4d 45 4d  & ~(MEM_Null|MEM
2b180 5f 41 67 67 29 29 3d 3d 30 20 29 3b 0a 20 20 72  _Agg))==0 );.  r
2b190 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d  c = sqlite3VdbeM
2b1a0 65 6d 46 69 6e 61 6c 69 7a 65 28 70 4d 65 6d 2c  emFinalize(pMem,
2b1b0 20 70 4f 70 2d 3e 70 34 2e 70 46 75 6e 63 29 3b   pOp->p4.pFunc);
2b1c0 0a 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20  .  if( rc ){.   
2b1d0 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
2b1e0 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64  g(&p->zErrMsg, d
2b1f0 62 2c 20 22 25 73 22 2c 20 73 71 6c 69 74 65 33  b, "%s", sqlite3
2b200 5f 76 61 6c 75 65 5f 74 65 78 74 28 70 4d 65 6d  _value_text(pMem
2b210 29 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65  ));.  }.  sqlite
2b220 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64  3VdbeChangeEncod
2b230 69 6e 67 28 70 4d 65 6d 2c 20 65 6e 63 6f 64 69  ing(pMem, encodi
2b240 6e 67 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41  ng);.  UPDATE_MA
2b250 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4d 65 6d 29  X_BLOBSIZE(pMem)
2b260 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 56  ;.  if( sqlite3V
2b270 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28 70 4d 65  dbeMemTooBig(pMe
2b280 6d 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74  m) ){.    goto t
2b290 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 62 72  oo_big;.  }.  br
2b2a0 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20  eak;.}..#ifndef 
2b2b0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a  SQLITE_OMIT_WAL.
2b2c0 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 68 65 63 6b  /* Opcode: Check
2b2d0 70 6f 69 6e 74 20 50 31 20 50 32 20 50 33 20 2a  point P1 P2 P3 *
2b2e0 20 2a 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b 70 6f   *.**.** Checkpo
2b2f0 69 6e 74 20 64 61 74 61 62 61 73 65 20 50 31 2e  int database P1.
2b300 20 54 68 69 73 20 69 73 20 61 20 6e 6f 2d 6f 70   This is a no-op
2b310 20 69 66 20 50 31 20 69 73 20 6e 6f 74 20 63 75   if P1 is not cu
2b320 72 72 65 6e 74 6c 79 20 69 6e 0a 2a 2a 20 57 41  rrently in.** WA
2b330 4c 20 6d 6f 64 65 2e 20 50 61 72 61 6d 65 74 65  L mode. Paramete
2b340 72 20 50 32 20 69 73 20 6f 6e 65 20 6f 66 20 53  r P2 is one of S
2b350 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54  QLITE_CHECKPOINT
2b360 5f 50 41 53 53 49 56 45 2c 20 46 55 4c 4c 0a 2a  _PASSIVE, FULL.*
2b370 2a 20 6f 72 20 52 45 53 54 41 52 54 2e 20 20 57  * or RESTART.  W
2b380 72 69 74 65 20 31 20 6f 72 20 30 20 69 6e 74 6f  rite 1 or 0 into
2b390 20 6d 65 6d 5b 50 33 5d 20 69 66 20 74 68 65 20   mem[P3] if the 
2b3a0 63 68 65 63 6b 70 6f 69 6e 74 20 72 65 74 75 72  checkpoint retur
2b3b0 6e 73 0a 2a 2a 20 53 51 4c 49 54 45 5f 42 55 53  ns.** SQLITE_BUS
2b3c0 59 20 6f 72 20 6e 6f 74 2c 20 72 65 73 70 65 63  Y or not, respec
2b3d0 74 69 76 65 6c 79 2e 20 20 57 72 69 74 65 20 74  tively.  Write t
2b3e0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67  he number of pag
2b3f0 65 73 20 69 6e 20 74 68 65 0a 2a 2a 20 57 41 4c  es in the.** WAL
2b400 20 61 66 74 65 72 20 74 68 65 20 63 68 65 63 6b   after the check
2b410 70 6f 69 6e 74 20 69 6e 74 6f 20 6d 65 6d 5b 50  point into mem[P
2b420 33 2b 31 5d 20 61 6e 64 20 74 68 65 20 6e 75 6d  3+1] and the num
2b430 62 65 72 20 6f 66 20 70 61 67 65 73 0a 2a 2a 20  ber of pages.** 
2b440 69 6e 20 74 68 65 20 57 41 4c 20 74 68 61 74 20  in the WAL that 
2b450 68 61 76 65 20 62 65 65 6e 20 63 68 65 63 6b 70  have been checkp
2b460 6f 69 6e 74 65 64 20 61 66 74 65 72 20 74 68 65  ointed after the
2b470 20 63 68 65 63 6b 70 6f 69 6e 74 0a 2a 2a 20 63   checkpoint.** c
2b480 6f 6d 70 6c 65 74 65 73 20 69 6e 74 6f 20 6d 65  ompletes into me
2b490 6d 5b 50 33 2b 32 5d 2e 20 20 48 6f 77 65 76 65  m[P3+2].  Howeve
2b4a0 72 20 6f 6e 20 61 6e 20 65 72 72 6f 72 2c 20 6d  r on an error, m
2b4b0 65 6d 5b 50 33 2b 31 5d 20 61 6e 64 0a 2a 2a 20  em[P3+1] and.** 
2b4c0 6d 65 6d 5b 50 33 2b 32 5d 20 61 72 65 20 69 6e  mem[P3+2] are in
2b4d0 69 74 69 61 6c 69 7a 65 64 20 74 6f 20 2d 31 2e  itialized to -1.
2b4e0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 68 65 63  .*/.case OP_Chec
2b4f0 6b 70 6f 69 6e 74 3a 20 7b 0a 20 20 69 6e 74 20  kpoint: {.  int 
2b500 69 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  i;              
2b510 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c              /* L
2b520 6f 6f 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20  oop counter */. 
2b530 20 69 6e 74 20 61 52 65 73 5b 33 5d 3b 20 20 20   int aRes[3];   
2b540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b550 20 2f 2a 20 52 65 73 75 6c 74 73 20 2a 2f 0a 20   /* Results */. 
2b560 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20 20 20 20   Mem *pMem;     
2b570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b580 20 2f 2a 20 57 72 69 74 65 20 72 65 73 75 6c 74   /* Write result
2b590 73 20 68 65 72 65 20 2a 2f 0a 0a 20 20 61 52 65  s here */..  aRe
2b5a0 73 5b 30 5d 20 3d 20 30 3b 0a 20 20 61 52 65 73  s[0] = 0;.  aRes
2b5b0 5b 31 5d 20 3d 20 61 52 65 73 5b 32 5d 20 3d 20  [1] = aRes[2] = 
2b5c0 2d 31 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  -1;.  assert( pO
2b5d0 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 43 48  p->p2==SQLITE_CH
2b5e0 45 43 4b 50 4f 49 4e 54 5f 50 41 53 53 49 56 45  ECKPOINT_PASSIVE
2b5f0 0a 20 20 20 20 20 20 20 7c 7c 20 70 4f 70 2d 3e  .       || pOp->
2b600 70 32 3d 3d 53 51 4c 49 54 45 5f 43 48 45 43 4b  p2==SQLITE_CHECK
2b610 50 4f 49 4e 54 5f 46 55 4c 4c 0a 20 20 20 20 20  POINT_FULL.     
2b620 20 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d 53 51    || pOp->p2==SQ
2b630 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f  LITE_CHECKPOINT_
2b640 52 45 53 54 41 52 54 0a 20 20 29 3b 0a 20 20 72  RESTART.  );.  r
2b650 63 20 3d 20 73 71 6c 69 74 65 33 43 68 65 63 6b  c = sqlite3Check
2b660 70 6f 69 6e 74 28 64 62 2c 20 70 4f 70 2d 3e 70  point(db, pOp->p
2b670 31 2c 20 70 4f 70 2d 3e 70 32 2c 20 26 61 52 65  1, pOp->p2, &aRe
2b680 73 5b 31 5d 2c 20 26 61 52 65 73 5b 32 5d 29 3b  s[1], &aRes[2]);
2b690 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54  .  if( rc==SQLIT
2b6a0 45 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 72 63  E_BUSY ){.    rc
2b6b0 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20   = SQLITE_OK;.  
2b6c0 20 20 61 52 65 73 5b 30 5d 20 3d 20 31 3b 0a 20    aRes[0] = 1;. 
2b6d0 20 7d 0a 20 20 66 6f 72 28 69 3d 30 2c 20 70 4d   }.  for(i=0, pM
2b6e0 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  em = &aMem[pOp->
2b6f0 70 33 5d 3b 20 69 3c 33 3b 20 69 2b 2b 2c 20 70  p3]; i<3; i++, p
2b700 4d 65 6d 2b 2b 29 7b 0a 20 20 20 20 73 71 6c 69  Mem++){.    sqli
2b710 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74  te3VdbeMemSetInt
2b720 36 34 28 70 4d 65 6d 2c 20 28 69 36 34 29 61 52  64(pMem, (i64)aR
2b730 65 73 5b 69 5d 29 3b 0a 20 20 7d 20 20 20 20 0a  es[i]);.  }    .
2b740 20 20 62 72 65 61 6b 3b 0a 7d 3b 20 20 0a 23 65    break;.};  .#e
2b750 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51  ndif..#ifndef SQ
2b760 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 41 47 4d 41  LITE_OMIT_PRAGMA
2b770 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4a 6f 75 72  ./* Opcode: Jour
2b780 6e 61 6c 4d 6f 64 65 20 50 31 20 50 32 20 50 33  nalMode P1 P2 P3
2b790 20 2a 20 50 35 0a 2a 2a 0a 2a 2a 20 43 68 61 6e   * P5.**.** Chan
2b7a0 67 65 20 74 68 65 20 6a 6f 75 72 6e 61 6c 20 6d  ge the journal m
2b7b0 6f 64 65 20 6f 66 20 64 61 74 61 62 61 73 65 20  ode of database 
2b7c0 50 31 20 74 6f 20 50 33 2e 20 50 33 20 6d 75 73  P1 to P3. P3 mus
2b7d0 74 20 62 65 20 6f 6e 65 20 6f 66 20 74 68 65 0a  t be one of the.
2b7e0 2a 2a 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  ** PAGER_JOURNAL
2b7f0 4d 4f 44 45 5f 58 58 58 20 76 61 6c 75 65 73 2e  MODE_XXX values.
2b800 20 49 66 20 63 68 61 6e 67 69 6e 67 20 62 65 74   If changing bet
2b810 77 65 65 6e 20 74 68 65 20 76 61 72 69 6f 75 73  ween the various
2b820 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 6d 6f 64   rollback.** mod
2b830 65 73 20 28 64 65 6c 65 74 65 2c 20 74 72 75 6e  es (delete, trun
2b840 63 61 74 65 2c 20 70 65 72 73 69 73 74 2c 20 6f  cate, persist, o
2b850 66 66 20 61 6e 64 20 6d 65 6d 6f 72 79 29 2c 20  ff and memory), 
2b860 74 68 69 73 20 69 73 20 61 20 73 69 6d 70 6c 65  this is a simple
2b870 0a 2a 2a 20 6f 70 65 72 61 74 69 6f 6e 2e 20 4e  .** operation. N
2b880 6f 20 49 4f 20 69 73 20 72 65 71 75 69 72 65 64  o IO is required
2b890 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 63 68 61 6e 67  ..**.** If chang
2b8a0 69 6e 67 20 69 6e 74 6f 20 6f 72 20 6f 75 74 20  ing into or out 
2b8b0 6f 66 20 57 41 4c 20 6d 6f 64 65 20 74 68 65 20  of WAL mode the 
2b8c0 70 72 6f 63 65 64 75 72 65 20 69 73 20 6d 6f 72  procedure is mor
2b8d0 65 20 63 6f 6d 70 6c 69 63 61 74 65 64 2e 0a 2a  e complicated..*
2b8e0 2a 0a 2a 2a 20 57 72 69 74 65 20 61 20 73 74 72  *.** Write a str
2b8f0 69 6e 67 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  ing containing t
2b900 68 65 20 66 69 6e 61 6c 20 6a 6f 75 72 6e 61 6c  he final journal
2b910 2d 6d 6f 64 65 20 74 6f 20 72 65 67 69 73 74 65  -mode to registe
2b920 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  r P2..*/.case OP
2b930 5f 4a 6f 75 72 6e 61 6c 4d 6f 64 65 3a 20 7b 20  _JournalMode: { 
2b940 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65     /* out2-prere
2b950 6c 65 61 73 65 20 2a 2f 0a 20 20 42 74 72 65 65  lease */.  Btree
2b960 20 2a 70 42 74 3b 20 20 20 20 20 20 20 20 20 20   *pBt;          
2b970 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42 74             /* Bt
2b980 72 65 65 20 74 6f 20 63 68 61 6e 67 65 20 6a 6f  ree to change jo
2b990 75 72 6e 61 6c 20 6d 6f 64 65 20 6f 66 20 2a 2f  urnal mode of */
2b9a0 0a 20 20 50 61 67 65 72 20 2a 70 50 61 67 65 72  .  Pager *pPager
2b9b0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
2b9c0 20 20 20 2f 2a 20 50 61 67 65 72 20 61 73 73 6f     /* Pager asso
2b9d0 63 69 61 74 65 64 20 77 69 74 68 20 70 42 74 20  ciated with pBt 
2b9e0 2a 2f 0a 20 20 69 6e 74 20 65 4e 65 77 3b 20 20  */.  int eNew;  
2b9f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ba00 20 20 20 20 20 2f 2a 20 4e 65 77 20 6a 6f 75 72       /* New jour
2ba10 6e 61 6c 20 6d 6f 64 65 20 2a 2f 0a 20 20 69 6e  nal mode */.  in
2ba20 74 20 65 4f 6c 64 3b 20 20 20 20 20 20 20 20 20  t eOld;         
2ba30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
2ba40 20 54 68 65 20 6f 6c 64 20 6a 6f 75 72 6e 61 6c   The old journal
2ba50 20 6d 6f 64 65 20 2a 2f 0a 20 20 63 6f 6e 73 74   mode */.  const
2ba60 20 63 68 61 72 20 2a 7a 46 69 6c 65 6e 61 6d 65   char *zFilename
2ba70 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61  ;          /* Na
2ba80 6d 65 20 6f 66 20 64 61 74 61 62 61 73 65 20 66  me of database f
2ba90 69 6c 65 20 66 6f 72 20 70 50 61 67 65 72 20 2a  ile for pPager *
2baa0 2f 0a 0a 20 20 65 4e 65 77 20 3d 20 70 4f 70 2d  /..  eNew = pOp-
2bab0 3e 70 33 3b 0a 20 20 61 73 73 65 72 74 28 20 65  >p3;.  assert( e
2bac0 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e  New==PAGER_JOURN
2bad0 41 4c 4d 4f 44 45 5f 44 45 4c 45 54 45 20 0a 20  ALMODE_DELETE . 
2bae0 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50        || eNew==P
2baf0 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
2bb00 5f 54 52 55 4e 43 41 54 45 20 0a 20 20 20 20 20  _TRUNCATE .     
2bb10 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52    || eNew==PAGER
2bb20 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 50 45 52  _JOURNALMODE_PER
2bb30 53 49 53 54 20 0a 20 20 20 20 20 20 20 7c 7c 20  SIST .       || 
2bb40 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52  eNew==PAGER_JOUR
2bb50 4e 41 4c 4d 4f 44 45 5f 4f 46 46 0a 20 20 20 20  NALMODE_OFF.    
2bb60 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45     || eNew==PAGE
2bb70 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4d 45  R_JOURNALMODE_ME
2bb80 4d 4f 52 59 0a 20 20 20 20 20 20 20 7c 7c 20 65  MORY.       || e
2bb90 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e  New==PAGER_JOURN
2bba0 41 4c 4d 4f 44 45 5f 57 41 4c 0a 20 20 20 20 20  ALMODE_WAL.     
2bbb0 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52    || eNew==PAGER
2bbc0 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 51 55 45  _JOURNALMODE_QUE
2bbd0 52 59 0a 20 20 29 3b 0a 20 20 61 73 73 65 72 74  RY.  );.  assert
2bbe0 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
2bbf0 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20  pOp->p1<db->nDb 
2bc00 29 3b 0a 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e  );..  pBt = db->
2bc10 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74  aDb[pOp->p1].pBt
2bc20 3b 0a 20 20 70 50 61 67 65 72 20 3d 20 73 71 6c  ;.  pPager = sql
2bc30 69 74 65 33 42 74 72 65 65 50 61 67 65 72 28 70  ite3BtreePager(p
2bc40 42 74 29 3b 0a 20 20 65 4f 6c 64 20 3d 20 73 71  Bt);.  eOld = sq
2bc50 6c 69 74 65 33 50 61 67 65 72 47 65 74 4a 6f 75  lite3PagerGetJou
2bc60 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65 72 29  rnalMode(pPager)
2bc70 3b 0a 20 20 69 66 28 20 65 4e 65 77 3d 3d 50 41  ;.  if( eNew==PA
2bc80 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
2bc90 51 55 45 52 59 20 29 20 65 4e 65 77 20 3d 20 65  QUERY ) eNew = e
2bca0 4f 6c 64 3b 0a 20 20 69 66 28 20 21 73 71 6c 69  Old;.  if( !sqli
2bcb0 74 65 33 50 61 67 65 72 4f 6b 54 6f 43 68 61 6e  te3PagerOkToChan
2bcc0 67 65 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50  geJournalMode(pP
2bcd0 61 67 65 72 29 20 29 20 65 4e 65 77 20 3d 20 65  ager) ) eNew = e
2bce0 4f 6c 64 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51  Old;..#ifndef SQ
2bcf0 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20  LITE_OMIT_WAL.  
2bd00 7a 46 69 6c 65 6e 61 6d 65 20 3d 20 73 71 6c 69  zFilename = sqli
2bd10 74 65 33 50 61 67 65 72 46 69 6c 65 6e 61 6d 65  te3PagerFilename
2bd20 28 70 50 61 67 65 72 29 3b 0a 0a 20 20 2f 2a 20  (pPager);..  /* 
2bd30 44 6f 20 6e 6f 74 20 61 6c 6c 6f 77 20 61 20 74  Do not allow a t
2bd40 72 61 6e 73 69 74 69 6f 6e 20 74 6f 20 6a 6f 75  ransition to jou
2bd50 72 6e 61 6c 5f 6d 6f 64 65 3d 57 41 4c 20 66 6f  rnal_mode=WAL fo
2bd60 72 20 61 20 64 61 74 61 62 61 73 65 0a 20 20 2a  r a database.  *
2bd70 2a 20 69 6e 20 74 65 6d 70 6f 72 61 72 79 20 73  * in temporary s
2bd80 74 6f 72 61 67 65 20 6f 72 20 69 66 20 74 68 65  torage or if the
2bd90 20 56 46 53 20 64 6f 65 73 20 6e 6f 74 20 73 75   VFS does not su
2bda0 70 70 6f 72 74 20 73 68 61 72 65 64 20 6d 65 6d  pport shared mem
2bdb0 6f 72 79 20 0a 20 20 2a 2f 0a 20 20 69 66 28 20  ory .  */.  if( 
2bdc0 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52  eNew==PAGER_JOUR
2bdd0 4e 41 4c 4d 4f 44 45 5f 57 41 4c 0a 20 20 20 26  NALMODE_WAL.   &
2bde0 26 20 28 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  & (sqlite3Strlen
2bdf0 33 30 28 7a 46 69 6c 65 6e 61 6d 65 29 3d 3d 30  30(zFilename)==0
2be00 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65             /* Te
2be10 6d 70 20 66 69 6c 65 20 2a 2f 0a 20 20 20 20 20  mp file */.     
2be20 20 20 7c 7c 20 21 73 71 6c 69 74 65 33 50 61 67    || !sqlite3Pag
2be30 65 72 57 61 6c 53 75 70 70 6f 72 74 65 64 28 70  erWalSupported(p
2be40 50 61 67 65 72 29 29 20 20 20 2f 2a 20 4e 6f 20  Pager))   /* No 
2be50 73 68 61 72 65 64 2d 6d 65 6d 6f 72 79 20 73 75  shared-memory su
2be60 70 70 6f 72 74 20 2a 2f 0a 20 20 29 7b 0a 20 20  pport */.  ){.  
2be70 20 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a 20    eNew = eOld;. 
2be80 20 7d 0a 0a 20 20 69 66 28 20 28 65 4e 65 77 21   }..  if( (eNew!
2be90 3d 65 4f 6c 64 29 0a 20 20 20 26 26 20 28 65 4f  =eOld).   && (eO
2bea0 6c 64 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41  ld==PAGER_JOURNA
2beb0 4c 4d 4f 44 45 5f 57 41 4c 20 7c 7c 20 65 4e 65  LMODE_WAL || eNe
2bec0 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  w==PAGER_JOURNAL
2bed0 4d 4f 44 45 5f 57 41 4c 29 0a 20 20 29 7b 0a 20  MODE_WAL).  ){. 
2bee0 20 20 20 69 66 28 20 21 64 62 2d 3e 61 75 74 6f     if( !db->auto
2bef0 43 6f 6d 6d 69 74 20 7c 7c 20 64 62 2d 3e 61 63  Commit || db->ac
2bf00 74 69 76 65 56 64 62 65 43 6e 74 3e 31 20 29 7b  tiveVdbeCnt>1 ){
2bf10 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49  .      rc = SQLI
2bf20 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 20 20  TE_ERROR;.      
2bf30 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67  sqlite3SetString
2bf40 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62  (&p->zErrMsg, db
2bf50 2c 20 0a 20 20 20 20 20 20 20 20 20 20 22 63 61  , .          "ca
2bf60 6e 6e 6f 74 20 63 68 61 6e 67 65 20 25 73 20 77  nnot change %s w
2bf70 61 6c 20 6d 6f 64 65 20 66 72 6f 6d 20 77 69 74  al mode from wit
2bf80 68 69 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f  hin a transactio
2bf90 6e 22 2c 0a 20 20 20 20 20 20 20 20 20 20 28 65  n",.          (e
2bfa0 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e  New==PAGER_JOURN
2bfb0 41 4c 4d 4f 44 45 5f 57 41 4c 20 3f 20 22 69 6e  ALMODE_WAL ? "in
2bfc0 74 6f 22 20 3a 20 22 6f 75 74 20 6f 66 22 29 0a  to" : "out of").
2bfd0 20 20 20 20 20 20 29 3b 0a 20 20 20 20 20 20 62        );.      b
2bfe0 72 65 61 6b 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  reak;.    }else{
2bff0 0a 20 0a 20 20 20 20 20 20 69 66 28 20 65 4f 6c  . .      if( eOl
2c000 64 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  d==PAGER_JOURNAL
2c010 4d 4f 44 45 5f 57 41 4c 20 29 7b 0a 20 20 20 20  MODE_WAL ){.    
2c020 20 20 20 20 2f 2a 20 49 66 20 6c 65 61 76 69 6e      /* If leavin
2c030 67 20 57 41 4c 20 6d 6f 64 65 2c 20 63 6c 6f 73  g WAL mode, clos
2c040 65 20 74 68 65 20 6c 6f 67 20 66 69 6c 65 2e 20  e the log file. 
2c050 49 66 20 73 75 63 63 65 73 73 66 75 6c 2c 20 74  If successful, t
2c060 68 65 20 63 61 6c 6c 0a 20 20 20 20 20 20 20 20  he call.        
2c070 2a 2a 20 74 6f 20 50 61 67 65 72 43 6c 6f 73 65  ** to PagerClose
2c080 57 61 6c 28 29 20 63 68 65 63 6b 70 6f 69 6e 74  Wal() checkpoint
2c090 73 20 61 6e 64 20 64 65 6c 65 74 65 73 20 74 68  s and deletes th
2c0a0 65 20 77 72 69 74 65 2d 61 68 65 61 64 2d 6c 6f  e write-ahead-lo
2c0b0 67 20 0a 20 20 20 20 20 20 20 20 2a 2a 20 66 69  g .        ** fi
2c0c0 6c 65 2e 20 41 6e 20 45 58 43 4c 55 53 49 56 45  le. An EXCLUSIVE
2c0d0 20 6c 6f 63 6b 20 6d 61 79 20 73 74 69 6c 6c 20   lock may still 
2c0e0 62 65 20 68 65 6c 64 20 6f 6e 20 74 68 65 20 64  be held on the d
2c0f0 61 74 61 62 61 73 65 20 66 69 6c 65 20 0a 20 20  atabase file .  
2c100 20 20 20 20 20 20 2a 2a 20 61 66 74 65 72 20 61        ** after a
2c110 20 73 75 63 63 65 73 73 66 75 6c 20 72 65 74 75   successful retu
2c120 72 6e 2e 20 0a 20 20 20 20 20 20 20 20 2a 2f 0a  rn. .        */.
2c130 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c          rc = sql
2c140 69 74 65 33 50 61 67 65 72 43 6c 6f 73 65 57 61  ite3PagerCloseWa
2c150 6c 28 70 50 61 67 65 72 29 3b 0a 20 20 20 20 20  l(pPager);.     
2c160 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54     if( rc==SQLIT
2c170 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20  E_OK ){.        
2c180 20 20 73 71 6c 69 74 65 33 50 61 67 65 72 53 65    sqlite3PagerSe
2c190 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61  tJournalMode(pPa
2c1a0 67 65 72 2c 20 65 4e 65 77 29 3b 0a 20 20 20 20  ger, eNew);.    
2c1b0 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 65 6c 73      }.      }els
2c1c0 65 20 69 66 28 20 65 4f 6c 64 3d 3d 50 41 47 45  e if( eOld==PAGE
2c1d0 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4d 45  R_JOURNALMODE_ME
2c1e0 4d 4f 52 59 20 29 7b 0a 20 20 20 20 20 20 20 20  MORY ){.        
2c1f0 2f 2a 20 43 61 6e 6e 6f 74 20 74 72 61 6e 73 69  /* Cannot transi
2c200 74 69 6f 6e 20 64 69 72 65 63 74 6c 79 20 66 72  tion directly fr
2c210 6f 6d 20 4d 45 4d 4f 52 59 20 74 6f 20 57 41 4c  om MEMORY to WAL
2c220 2e 20 20 55 73 65 20 6d 6f 64 65 20 4f 46 46 0a  .  Use mode OFF.
2c230 20 20 20 20 20 20 20 20 2a 2a 20 61 73 20 61 6e          ** as an
2c240 20 69 6e 74 65 72 6d 65 64 69 61 74 65 20 2a 2f   intermediate */
2c250 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
2c260 50 61 67 65 72 53 65 74 4a 6f 75 72 6e 61 6c 4d  PagerSetJournalM
2c270 6f 64 65 28 70 50 61 67 65 72 2c 20 50 41 47 45  ode(pPager, PAGE
2c280 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4f 46  R_JOURNALMODE_OF
2c290 46 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 0a 20  F);.      }.  . 
2c2a0 20 20 20 20 20 2f 2a 20 4f 70 65 6e 20 61 20 74       /* Open a t
2c2b0 72 61 6e 73 61 63 74 69 6f 6e 20 6f 6e 20 74 68  ransaction on th
2c2c0 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e  e database file.
2c2d0 20 52 65 67 61 72 64 6c 65 73 73 20 6f 66 20 74   Regardless of t
2c2e0 68 65 20 6a 6f 75 72 6e 61 6c 0a 20 20 20 20 20  he journal.     
2c2f0 20 2a 2a 20 6d 6f 64 65 2c 20 74 68 69 73 20 74   ** mode, this t
2c300 72 61 6e 73 61 63 74 69 6f 6e 20 61 6c 77 61 79  ransaction alway
2c310 73 20 75 73 65 73 20 61 20 72 6f 6c 6c 62 61 63  s uses a rollbac
2c320 6b 20 6a 6f 75 72 6e 61 6c 2e 0a 20 20 20 20 20  k journal..     
2c330 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74   */.      assert
2c340 28 20 73 71 6c 69 74 65 33 42 74 72 65 65 49 73  ( sqlite3BtreeIs
2c350 49 6e 54 72 61 6e 73 28 70 42 74 29 3d 3d 30 20  InTrans(pBt)==0 
2c360 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d  );.      if( rc=
2c370 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
2c380 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
2c390 65 33 42 74 72 65 65 53 65 74 56 65 72 73 69 6f  e3BtreeSetVersio
2c3a0 6e 28 70 42 74 2c 20 28 65 4e 65 77 3d 3d 50 41  n(pBt, (eNew==PA
2c3b0 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
2c3c0 57 41 4c 20 3f 20 32 20 3a 20 31 29 29 3b 0a 20  WAL ? 2 : 1));. 
2c3d0 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d       }.    }.  }
2c3e0 0a 23 65 6e 64 69 66 20 2f 2a 20 69 66 6e 64 65  .#endif /* ifnde
2c3f0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41  f SQLITE_OMIT_WA
2c400 4c 20 2a 2f 0a 0a 20 20 69 66 28 20 72 63 20 29  L */..  if( rc )
2c410 7b 0a 20 20 20 20 65 4e 65 77 20 3d 20 65 4f 6c  {.    eNew = eOl
2c420 64 3b 0a 20 20 7d 0a 20 20 65 4e 65 77 20 3d 20  d;.  }.  eNew = 
2c430 73 71 6c 69 74 65 33 50 61 67 65 72 53 65 74 4a  sqlite3PagerSetJ
2c440 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65  ournalMode(pPage
2c450 72 2c 20 65 4e 65 77 29 3b 0a 0a 20 20 70 4f 75  r, eNew);..  pOu
2c460 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
2c470 32 5d 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67  2];.  pOut->flag
2c480 73 20 3d 20 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f  s = MEM_Str|MEM_
2c490 53 74 61 74 69 63 7c 4d 45 4d 5f 54 65 72 6d 3b  Static|MEM_Term;
2c4a0 0a 20 20 70 4f 75 74 2d 3e 7a 20 3d 20 28 63 68  .  pOut->z = (ch
2c4b0 61 72 20 2a 29 73 71 6c 69 74 65 33 4a 6f 75 72  ar *)sqlite3Jour
2c4c0 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28 65 4e 65 77  nalModename(eNew
2c4d0 29 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 73  );.  pOut->n = s
2c4e0 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 70  qlite3Strlen30(p
2c4f0 4f 75 74 2d 3e 7a 29 3b 0a 20 20 70 4f 75 74 2d  Out->z);.  pOut-
2c500 3e 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55 54  >enc = SQLITE_UT
2c510 46 38 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  F8;.  sqlite3Vdb
2c520 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28  eChangeEncoding(
2c530 70 4f 75 74 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  pOut, encoding);
2c540 0a 20 20 62 72 65 61 6b 3b 0a 7d 3b 0a 23 65 6e  .  break;.};.#en
2c550 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
2c560 49 54 5f 50 52 41 47 4d 41 20 2a 2f 0a 0a 23 69  IT_PRAGMA */..#i
2c570 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
2c580 45 5f 4f 4d 49 54 5f 56 41 43 55 55 4d 29 20 26  E_OMIT_VACUUM) &
2c590 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  & !defined(SQLIT
2c5a0 45 5f 4f 4d 49 54 5f 41 54 54 41 43 48 29 0a 2f  E_OMIT_ATTACH)./
2c5b0 2a 20 4f 70 63 6f 64 65 3a 20 56 61 63 75 75 6d  * Opcode: Vacuum
2c5c0 20 2a 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a   * * * * *.**.**
2c5d0 20 56 61 63 75 75 6d 20 74 68 65 20 65 6e 74 69   Vacuum the enti
2c5e0 72 65 20 64 61 74 61 62 61 73 65 2e 20 20 54 68  re database.  Th
2c5f0 69 73 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 63  is opcode will c
2c600 61 75 73 65 20 6f 74 68 65 72 20 76 69 72 74 75  ause other virtu
2c610 61 6c 0a 2a 2a 20 6d 61 63 68 69 6e 65 73 20 74  al.** machines t
2c620 6f 20 62 65 20 63 72 65 61 74 65 64 20 61 6e 64  o be created and
2c630 20 72 75 6e 2e 20 20 49 74 20 6d 61 79 20 6e 6f   run.  It may no
2c640 74 20 62 65 20 63 61 6c 6c 65 64 20 66 72 6f 6d  t be called from
2c650 20 77 69 74 68 69 6e 0a 2a 2a 20 61 20 74 72 61   within.** a tra
2c660 6e 73 61 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73  nsaction..*/.cas
2c670 65 20 4f 50 5f 56 61 63 75 75 6d 3a 20 7b 0a 20  e OP_Vacuum: {. 
2c680 20 72 63 20 3d 20 73 71 6c 69 74 65 33 52 75 6e   rc = sqlite3Run
2c690 56 61 63 75 75 6d 28 26 70 2d 3e 7a 45 72 72 4d  Vacuum(&p->zErrM
2c6a0 73 67 2c 20 64 62 29 3b 0a 20 20 62 72 65 61 6b  sg, db);.  break
2c6b0 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20  ;.}.#endif..#if 
2c6c0 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
2c6d0 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 29  OMIT_AUTOVACUUM)
2c6e0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 63 72  ./* Opcode: Incr
2c6f0 56 61 63 75 75 6d 20 50 31 20 50 32 20 2a 20 2a  Vacuum P1 P2 * *
2c700 20 2a 0a 2a 2a 0a 2a 2a 20 50 65 72 66 6f 72 6d   *.**.** Perform
2c710 20 61 20 73 69 6e 67 6c 65 20 73 74 65 70 20 6f   a single step o
2c720 66 20 74 68 65 20 69 6e 63 72 65 6d 65 6e 74 61  f the incrementa
2c730 6c 20 76 61 63 75 75 6d 20 70 72 6f 63 65 64 75  l vacuum procedu
2c740 72 65 20 6f 6e 0a 2a 2a 20 74 68 65 20 50 31 20  re on.** the P1 
2c750 64 61 74 61 62 61 73 65 2e 20 49 66 20 74 68 65  database. If the
2c760 20 76 61 63 75 75 6d 20 68 61 73 20 66 69 6e 69   vacuum has fini
2c770 73 68 65 64 2c 20 6a 75 6d 70 20 74 6f 20 69 6e  shed, jump to in
2c780 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 50 32 2e  struction.** P2.
2c790 20 4f 74 68 65 72 77 69 73 65 2c 20 66 61 6c 6c   Otherwise, fall
2c7a0 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
2c7b0 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
2c7c0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 63  ..*/.case OP_Inc
2c7d0 72 56 61 63 75 75 6d 3a 20 7b 20 20 20 20 20 20  rVacuum: {      
2c7e0 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 42    /* jump */.  B
2c7f0 74 72 65 65 20 2a 70 42 74 3b 0a 0a 20 20 61 73  tree *pBt;..  as
2c800 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
2c810 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e   && pOp->p1<db->
2c820 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28  nDb );.  assert(
2c830 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26   (p->btreeMask &
2c840 20 28 28 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c   (((yDbMask)1)<<
2c850 70 4f 70 2d 3e 70 31 29 29 21 3d 30 20 29 3b 0a  pOp->p1))!=0 );.
2c860 20 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b    pBt = db->aDb[
2c870 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20 20  pOp->p1].pBt;.  
2c880 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
2c890 65 49 6e 63 72 56 61 63 75 75 6d 28 70 42 74 29  eIncrVacuum(pBt)
2c8a0 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49  ;.  if( rc==SQLI
2c8b0 54 45 5f 44 4f 4e 45 20 29 7b 0a 20 20 20 20 70  TE_DONE ){.    p
2c8c0 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
2c8d0 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45  .    rc = SQLITE
2c8e0 5f 4f 4b 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  _OK;.  }.  break
2c8f0 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f  ;.}.#endif../* O
2c900 70 63 6f 64 65 3a 20 45 78 70 69 72 65 20 50 31  pcode: Expire P1
2c910 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43   * * * *.**.** C
2c920 61 75 73 65 20 70 72 65 63 6f 6d 70 69 6c 65 64  ause precompiled
2c930 20 73 74 61 74 65 6d 65 6e 74 73 20 74 6f 20 62   statements to b
2c940 65 63 6f 6d 65 20 65 78 70 69 72 65 64 2e 20 41  ecome expired. A
2c950 6e 20 65 78 70 69 72 65 64 20 73 74 61 74 65 6d  n expired statem
2c960 65 6e 74 0a 2a 2a 20 66 61 69 6c 73 20 77 69 74  ent.** fails wit
2c970 68 20 61 6e 20 65 72 72 6f 72 20 63 6f 64 65 20  h an error code 
2c980 6f 66 20 53 51 4c 49 54 45 5f 53 43 48 45 4d 41  of SQLITE_SCHEMA
2c990 20 69 66 20 69 74 20 69 73 20 65 76 65 72 20 65   if it is ever e
2c9a0 78 65 63 75 74 65 64 20 0a 2a 2a 20 28 76 69 61  xecuted .** (via
2c9b0 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 29   sqlite3_step())
2c9c0 2e 0a 2a 2a 20 0a 2a 2a 20 49 66 20 50 31 20 69  ..** .** If P1 i
2c9d0 73 20 30 2c 20 74 68 65 6e 20 61 6c 6c 20 53 51  s 0, then all SQ
2c9e0 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 62 65 63  L statements bec
2c9f0 6f 6d 65 20 65 78 70 69 72 65 64 2e 20 49 66 20  ome expired. If 
2ca00 50 31 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 0a  P1 is non-zero,.
2ca10 2a 2a 20 74 68 65 6e 20 6f 6e 6c 79 20 74 68 65  ** then only the
2ca20 20 63 75 72 72 65 6e 74 6c 79 20 65 78 65 63 75   currently execu
2ca30 74 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 69  ting statement i
2ca40 73 20 61 66 66 65 63 74 65 64 2e 20 0a 2a 2f 0a  s affected. .*/.
2ca50 63 61 73 65 20 4f 50 5f 45 78 70 69 72 65 3a 20  case OP_Expire: 
2ca60 7b 0a 20 20 69 66 28 20 21 70 4f 70 2d 3e 70 31  {.  if( !pOp->p1
2ca70 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 45   ){.    sqlite3E
2ca80 78 70 69 72 65 50 72 65 70 61 72 65 64 53 74 61  xpirePreparedSta
2ca90 74 65 6d 65 6e 74 73 28 64 62 29 3b 0a 20 20 7d  tements(db);.  }
2caa0 65 6c 73 65 7b 0a 20 20 20 20 70 2d 3e 65 78 70  else{.    p->exp
2cab0 69 72 65 64 20 3d 20 31 3b 0a 20 20 7d 0a 20 20  ired = 1;.  }.  
2cac0 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65  break;.}..#ifnde
2cad0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48  f SQLITE_OMIT_SH
2cae0 41 52 45 44 5f 43 41 43 48 45 0a 2f 2a 20 4f 70  ARED_CACHE./* Op
2caf0 63 6f 64 65 3a 20 54 61 62 6c 65 4c 6f 63 6b 20  code: TableLock 
2cb00 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a  P1 P2 P3 P4 *.**
2cb10 0a 2a 2a 20 4f 62 74 61 69 6e 20 61 20 6c 6f 63  .** Obtain a loc
2cb20 6b 20 6f 6e 20 61 20 70 61 72 74 69 63 75 6c 61  k on a particula
2cb30 72 20 74 61 62 6c 65 2e 20 54 68 69 73 20 69 6e  r table. This in
2cb40 73 74 72 75 63 74 69 6f 6e 20 69 73 20 6f 6e 6c  struction is onl
2cb50 79 20 75 73 65 64 20 77 68 65 6e 0a 2a 2a 20 74  y used when.** t
2cb60 68 65 20 73 68 61 72 65 64 2d 63 61 63 68 65 20  he shared-cache 
2cb70 66 65 61 74 75 72 65 20 69 73 20 65 6e 61 62 6c  feature is enabl
2cb80 65 64 2e 20 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73  ed. .**.** P1 is
2cb90 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68   the index of th
2cba0 65 20 64 61 74 61 62 61 73 65 20 69 6e 20 73 71  e database in sq
2cbb0 6c 69 74 65 33 2e 61 44 62 5b 5d 20 6f 66 20 74  lite3.aDb[] of t
2cbc0 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 6f  he database.** o
2cbd0 6e 20 77 68 69 63 68 20 74 68 65 20 6c 6f 63 6b  n which the lock
2cbe0 20 69 73 20 61 63 71 75 69 72 65 64 2e 20 20 41   is acquired.  A
2cbf0 20 72 65 61 64 6c 6f 63 6b 20 69 73 20 6f 62 74   readlock is obt
2cc00 61 69 6e 65 64 20 69 66 20 50 33 3d 3d 30 20 6f  ained if P3==0 o
2cc10 72 0a 2a 2a 20 61 20 77 72 69 74 65 20 6c 6f 63  r.** a write loc
2cc20 6b 20 69 66 20 50 33 3d 3d 31 2e 0a 2a 2a 0a 2a  k if P3==1..**.*
2cc30 2a 20 50 32 20 63 6f 6e 74 61 69 6e 73 20 74 68  * P2 contains th
2cc40 65 20 72 6f 6f 74 2d 70 61 67 65 20 6f 66 20 74  e root-page of t
2cc50 68 65 20 74 61 62 6c 65 20 74 6f 20 6c 6f 63 6b  he table to lock
2cc60 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 63 6f 6e 74 61  ..**.** P4 conta
2cc70 69 6e 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f  ins a pointer to
2cc80 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   the name of the
2cc90 20 74 61 62 6c 65 20 62 65 69 6e 67 20 6c 6f 63   table being loc
2cca0 6b 65 64 2e 20 54 68 69 73 20 69 73 20 6f 6e 6c  ked. This is onl
2ccb0 79 0a 2a 2a 20 75 73 65 64 20 74 6f 20 67 65 6e  y.** used to gen
2ccc0 65 72 61 74 65 20 61 6e 20 65 72 72 6f 72 20 6d  erate an error m
2ccd0 65 73 73 61 67 65 20 69 66 20 74 68 65 20 6c 6f  essage if the lo
2cce0 63 6b 20 63 61 6e 6e 6f 74 20 62 65 20 6f 62 74  ck cannot be obt
2ccf0 61 69 6e 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ained..*/.case O
2cd00 50 5f 54 61 62 6c 65 4c 6f 63 6b 3a 20 7b 0a 20  P_TableLock: {. 
2cd10 20 75 38 20 69 73 57 72 69 74 65 4c 6f 63 6b 20   u8 isWriteLock 
2cd20 3d 20 28 75 38 29 70 4f 70 2d 3e 70 33 3b 0a 20  = (u8)pOp->p3;. 
2cd30 20 69 66 28 20 69 73 57 72 69 74 65 4c 6f 63 6b   if( isWriteLock
2cd40 20 7c 7c 20 30 3d 3d 28 64 62 2d 3e 66 6c 61 67   || 0==(db->flag
2cd50 73 26 53 51 4c 49 54 45 5f 52 65 61 64 55 6e 63  s&SQLITE_ReadUnc
2cd60 6f 6d 6d 69 74 74 65 64 29 20 29 7b 0a 20 20 20  ommitted) ){.   
2cd70 20 69 6e 74 20 70 31 20 3d 20 70 4f 70 2d 3e 70   int p1 = pOp->p
2cd80 31 3b 20 0a 20 20 20 20 61 73 73 65 72 74 28 20  1; .    assert( 
2cd90 70 31 3e 3d 30 20 26 26 20 70 31 3c 64 62 2d 3e  p1>=0 && p1<db->
2cda0 6e 44 62 20 29 3b 0a 20 20 20 20 61 73 73 65 72  nDb );.    asser
2cdb0 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b  t( (p->btreeMask
2cdc0 20 26 20 28 28 28 79 44 62 4d 61 73 6b 29 31 29   & (((yDbMask)1)
2cdd0 3c 3c 70 31 29 29 21 3d 30 20 29 3b 0a 20 20 20  <<p1))!=0 );.   
2cde0 20 61 73 73 65 72 74 28 20 69 73 57 72 69 74 65   assert( isWrite
2cdf0 4c 6f 63 6b 3d 3d 30 20 7c 7c 20 69 73 57 72 69  Lock==0 || isWri
2ce00 74 65 4c 6f 63 6b 3d 3d 31 20 29 3b 0a 20 20 20  teLock==1 );.   
2ce10 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
2ce20 65 65 4c 6f 63 6b 54 61 62 6c 65 28 64 62 2d 3e  eeLockTable(db->
2ce30 61 44 62 5b 70 31 5d 2e 70 42 74 2c 20 70 4f 70  aDb[p1].pBt, pOp
2ce40 2d 3e 70 32 2c 20 69 73 57 72 69 74 65 4c 6f 63  ->p2, isWriteLoc
2ce50 6b 29 3b 0a 20 20 20 20 69 66 28 20 28 72 63 26  k);.    if( (rc&
2ce60 30 78 46 46 29 3d 3d 53 51 4c 49 54 45 5f 4c 4f  0xFF)==SQLITE_LO
2ce70 43 4b 45 44 20 29 7b 0a 20 20 20 20 20 20 63 6f  CKED ){.      co
2ce80 6e 73 74 20 63 68 61 72 20 2a 7a 20 3d 20 70 4f  nst char *z = pO
2ce90 70 2d 3e 70 34 2e 7a 3b 0a 20 20 20 20 20 20 73  p->p4.z;.      s
2cea0 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28  qlite3SetString(
2ceb0 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c  &p->zErrMsg, db,
2cec0 20 22 64 61 74 61 62 61 73 65 20 74 61 62 6c 65   "database table
2ced0 20 69 73 20 6c 6f 63 6b 65 64 3a 20 25 73 22 2c   is locked: %s",
2cee0 20 7a 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20   z);.    }.  }. 
2cef0 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
2cf00 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
2cf10 53 48 41 52 45 44 5f 43 41 43 48 45 20 2a 2f 0a  SHARED_CACHE */.
2cf20 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2cf30 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
2cf40 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 42 65  E./* Opcode: VBe
2cf50 67 69 6e 20 2a 20 2a 20 2a 20 50 34 20 2a 0a 2a  gin * * * P4 *.*
2cf60 2a 0a 2a 2a 20 50 34 20 6d 61 79 20 62 65 20 61  *.** P4 may be a
2cf70 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 6e 20 73   pointer to an s
2cf80 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74 72 75  qlite3_vtab stru
2cf90 63 74 75 72 65 2e 20 49 66 20 73 6f 2c 20 63 61  cture. If so, ca
2cfa0 6c 6c 20 74 68 65 20 0a 2a 2a 20 78 42 65 67 69  ll the .** xBegi
2cfb0 6e 20 6d 65 74 68 6f 64 20 66 6f 72 20 74 68 61  n method for tha
2cfc0 74 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41  t table..**.** A
2cfd0 6c 73 6f 2c 20 77 68 65 74 68 65 72 20 6f 72 20  lso, whether or 
2cfe0 6e 6f 74 20 50 34 20 69 73 20 73 65 74 2c 20 63  not P4 is set, c
2cff0 68 65 63 6b 20 74 68 61 74 20 74 68 69 73 20 69  heck that this i
2d000 73 20 6e 6f 74 20 62 65 69 6e 67 20 63 61 6c 6c  s not being call
2d010 65 64 20 66 72 6f 6d 0a 2a 2a 20 77 69 74 68 69  ed from.** withi
2d020 6e 20 61 20 63 61 6c 6c 62 61 63 6b 20 74 6f 20  n a callback to 
2d030 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  a virtual table 
2d040 78 53 79 6e 63 28 29 20 6d 65 74 68 6f 64 2e 20  xSync() method. 
2d050 49 66 20 69 74 20 69 73 2c 20 74 68 65 20 65 72  If it is, the er
2d060 72 6f 72 0a 2a 2a 20 63 6f 64 65 20 77 69 6c 6c  ror.** code will
2d070 20 62 65 20 73 65 74 20 74 6f 20 53 51 4c 49 54   be set to SQLIT
2d080 45 5f 4c 4f 43 4b 45 44 2e 0a 2a 2f 0a 63 61 73  E_LOCKED..*/.cas
2d090 65 20 4f 50 5f 56 42 65 67 69 6e 3a 20 7b 0a 20  e OP_VBegin: {. 
2d0a0 20 56 54 61 62 6c 65 20 2a 70 56 54 61 62 3b 0a   VTable *pVTab;.
2d0b0 20 20 70 56 54 61 62 20 3d 20 70 4f 70 2d 3e 70    pVTab = pOp->p
2d0c0 34 2e 70 56 74 61 62 3b 0a 20 20 72 63 20 3d 20  4.pVtab;.  rc = 
2d0d0 73 71 6c 69 74 65 33 56 74 61 62 42 65 67 69 6e  sqlite3VtabBegin
2d0e0 28 64 62 2c 20 70 56 54 61 62 29 3b 0a 20 20 69  (db, pVTab);.  i
2d0f0 66 28 20 70 56 54 61 62 20 29 20 69 6d 70 6f 72  f( pVTab ) impor
2d100 74 56 74 61 62 45 72 72 4d 73 67 28 70 2c 20 70  tVtabErrMsg(p, p
2d110 56 54 61 62 2d 3e 70 56 74 61 62 29 3b 0a 20 20  VTab->pVtab);.  
2d120 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20  break;.}.#endif 
2d130 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  /* SQLITE_OMIT_V
2d140 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a  IRTUALTABLE */..
2d150 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2d160 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
2d170 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 43 72 65  ./* Opcode: VCre
2d180 61 74 65 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a  ate P1 * * P4 *.
2d190 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 74 68 65 20  **.** P4 is the 
2d1a0 6e 61 6d 65 20 6f 66 20 61 20 76 69 72 74 75 61  name of a virtua
2d1b0 6c 20 74 61 62 6c 65 20 69 6e 20 64 61 74 61 62  l table in datab
2d1c0 61 73 65 20 50 31 2e 20 43 61 6c 6c 20 74 68 65  ase P1. Call the
2d1d0 20 78 43 72 65 61 74 65 20 6d 65 74 68 6f 64 0a   xCreate method.
2d1e0 2a 2a 20 66 6f 72 20 74 68 61 74 20 74 61 62 6c  ** for that tabl
2d1f0 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 43  e..*/.case OP_VC
2d200 72 65 61 74 65 3a 20 7b 0a 20 20 72 63 20 3d 20  reate: {.  rc = 
2d210 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 43  sqlite3VtabCallC
2d220 72 65 61 74 65 28 64 62 2c 20 70 4f 70 2d 3e 70  reate(db, pOp->p
2d230 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 26 70  1, pOp->p4.z, &p
2d240 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 62 72  ->zErrMsg);.  br
2d250 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
2d260 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
2d270 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69  TUALTABLE */..#i
2d280 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2d290 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f  T_VIRTUALTABLE./
2d2a0 2a 20 4f 70 63 6f 64 65 3a 20 56 44 65 73 74 72  * Opcode: VDestr
2d2b0 6f 79 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a  oy P1 * * P4 *.*
2d2c0 2a 0a 2a 2a 20 50 34 20 69 73 20 74 68 65 20 6e  *.** P4 is the n
2d2d0 61 6d 65 20 6f 66 20 61 20 76 69 72 74 75 61 6c  ame of a virtual
2d2e0 20 74 61 62 6c 65 20 69 6e 20 64 61 74 61 62 61   table in databa
2d2f0 73 65 20 50 31 2e 20 20 43 61 6c 6c 20 74 68 65  se P1.  Call the
2d300 20 78 44 65 73 74 72 6f 79 20 6d 65 74 68 6f 64   xDestroy method
2d310 0a 2a 2a 20 6f 66 20 74 68 61 74 20 74 61 62 6c  .** of that tabl
2d320 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 44  e..*/.case OP_VD
2d330 65 73 74 72 6f 79 3a 20 7b 0a 20 20 70 2d 3e 69  estroy: {.  p->i
2d340 6e 56 74 61 62 4d 65 74 68 6f 64 20 3d 20 32 3b  nVtabMethod = 2;
2d350 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
2d360 74 61 62 43 61 6c 6c 44 65 73 74 72 6f 79 28 64  tabCallDestroy(d
2d370 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d  b, pOp->p1, pOp-
2d380 3e 70 34 2e 7a 29 3b 0a 20 20 70 2d 3e 69 6e 56  >p4.z);.  p->inV
2d390 74 61 62 4d 65 74 68 6f 64 20 3d 20 30 3b 0a 20  tabMethod = 0;. 
2d3a0 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
2d3b0 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
2d3c0 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a  VIRTUALTABLE */.
2d3d0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2d3e0 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
2d3f0 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 4f 70  E./* Opcode: VOp
2d400 65 6e 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a  en P1 * * P4 *.*
2d410 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69  *.** P4 is a poi
2d420 6e 74 65 72 20 74 6f 20 61 20 76 69 72 74 75 61  nter to a virtua
2d430 6c 20 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20  l table object, 
2d440 61 6e 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  an sqlite3_vtab 
2d450 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 20 50 31  structure..** P1
2d460 20 69 73 20 61 20 63 75 72 73 6f 72 20 6e 75 6d   is a cursor num
2d470 62 65 72 2e 20 20 54 68 69 73 20 6f 70 63 6f 64  ber.  This opcod
2d480 65 20 6f 70 65 6e 73 20 61 20 63 75 72 73 6f 72  e opens a cursor
2d490 20 74 6f 20 74 68 65 20 76 69 72 74 75 61 6c 0a   to the virtual.
2d4a0 2a 2a 20 74 61 62 6c 65 20 61 6e 64 20 73 74 6f  ** table and sto
2d4b0 72 65 73 20 74 68 61 74 20 63 75 72 73 6f 72 20  res that cursor 
2d4c0 69 6e 20 50 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f  in P1..*/.case O
2d4d0 50 5f 56 4f 70 65 6e 3a 20 7b 0a 20 20 56 64 62  P_VOpen: {.  Vdb
2d4e0 65 43 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a 20  eCursor *pCur;. 
2d4f0 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75   sqlite3_vtab_cu
2d500 72 73 6f 72 20 2a 70 56 74 61 62 43 75 72 73 6f  rsor *pVtabCurso
2d510 72 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61  r;.  sqlite3_vta
2d520 62 20 2a 70 56 74 61 62 3b 0a 20 20 73 71 6c 69  b *pVtab;.  sqli
2d530 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64  te3_module *pMod
2d540 75 6c 65 3b 0a 0a 20 20 70 43 75 72 20 3d 20 30  ule;..  pCur = 0
2d550 3b 0a 20 20 70 56 74 61 62 43 75 72 73 6f 72 20  ;.  pVtabCursor 
2d560 3d 20 30 3b 0a 20 20 70 56 74 61 62 20 3d 20 70  = 0;.  pVtab = p
2d570 4f 70 2d 3e 70 34 2e 70 56 74 61 62 2d 3e 70 56  Op->p4.pVtab->pV
2d580 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d  tab;.  pModule =
2d590 20 28 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65   (sqlite3_module
2d5a0 20 2a 29 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c   *)pVtab->pModul
2d5b0 65 3b 0a 20 20 61 73 73 65 72 74 28 70 56 74 61  e;.  assert(pVta
2d5c0 62 20 26 26 20 70 4d 6f 64 75 6c 65 29 3b 0a 20  b && pModule);. 
2d5d0 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78   rc = pModule->x
2d5e0 4f 70 65 6e 28 70 56 74 61 62 2c 20 26 70 56 74  Open(pVtab, &pVt
2d5f0 61 62 43 75 72 73 6f 72 29 3b 0a 20 20 69 6d 70  abCursor);.  imp
2d600 6f 72 74 56 74 61 62 45 72 72 4d 73 67 28 70 2c  ortVtabErrMsg(p,
2d610 20 70 56 74 61 62 29 3b 0a 20 20 69 66 28 20 53   pVtab);.  if( S
2d620 51 4c 49 54 45 5f 4f 4b 3d 3d 72 63 20 29 7b 0a  QLITE_OK==rc ){.
2d630 20 20 20 20 2f 2a 20 49 6e 69 74 69 61 6c 69 7a      /* Initializ
2d640 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63  e sqlite3_vtab_c
2d650 75 72 73 6f 72 20 62 61 73 65 20 63 6c 61 73 73  ursor base class
2d660 20 2a 2f 0a 20 20 20 20 70 56 74 61 62 43 75 72   */.    pVtabCur
2d670 73 6f 72 2d 3e 70 56 74 61 62 20 3d 20 70 56 74  sor->pVtab = pVt
2d680 61 62 3b 0a 0a 20 20 20 20 2f 2a 20 49 6e 69 74  ab;..    /* Init
2d690 69 61 6c 69 73 65 20 76 64 62 65 20 63 75 72 73  ialise vdbe curs
2d6a0 6f 72 20 6f 62 6a 65 63 74 20 2a 2f 0a 20 20 20  or object */.   
2d6b0 20 70 43 75 72 20 3d 20 61 6c 6c 6f 63 61 74 65   pCur = allocate
2d6c0 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70  Cursor(p, pOp->p
2d6d0 31 2c 20 30 2c 20 2d 31 2c 20 30 29 3b 0a 20 20  1, 0, -1, 0);.  
2d6e0 20 20 69 66 28 20 70 43 75 72 20 29 7b 0a 20 20    if( pCur ){.  
2d6f0 20 20 20 20 70 43 75 72 2d 3e 70 56 74 61 62 43      pCur->pVtabC
2d700 75 72 73 6f 72 20 3d 20 70 56 74 61 62 43 75 72  ursor = pVtabCur
2d710 73 6f 72 3b 0a 20 20 20 20 20 20 70 43 75 72 2d  sor;.      pCur-
2d720 3e 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62  >pModule = pVtab
2d730 43 75 72 73 6f 72 2d 3e 70 56 74 61 62 2d 3e 70  Cursor->pVtab->p
2d740 4d 6f 64 75 6c 65 3b 0a 20 20 20 20 7d 65 6c 73  Module;.    }els
2d750 65 7b 0a 20 20 20 20 20 20 64 62 2d 3e 6d 61 6c  e{.      db->mal
2d760 6c 6f 63 46 61 69 6c 65 64 20 3d 20 31 3b 0a 20  locFailed = 1;. 
2d770 20 20 20 20 20 70 4d 6f 64 75 6c 65 2d 3e 78 43       pModule->xC
2d780 6c 6f 73 65 28 70 56 74 61 62 43 75 72 73 6f 72  lose(pVtabCursor
2d790 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62  );.    }.  }.  b
2d7a0 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  reak;.}.#endif /
2d7b0 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  * SQLITE_OMIT_VI
2d7c0 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23  RTUALTABLE */..#
2d7d0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2d7e0 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
2d7f0 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 46 69 6c 74  /* Opcode: VFilt
2d800 65 72 20 50 31 20 50 32 20 50 33 20 50 34 20 2a  er P1 P2 P3 P4 *
2d810 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 63  .**.** P1 is a c
2d820 75 72 73 6f 72 20 6f 70 65 6e 65 64 20 75 73 69  ursor opened usi
2d830 6e 67 20 56 4f 70 65 6e 2e 20 20 50 32 20 69 73  ng VOpen.  P2 is
2d840 20 61 6e 20 61 64 64 72 65 73 73 20 74 6f 20 6a   an address to j
2d850 75 6d 70 20 74 6f 20 69 66 0a 2a 2a 20 74 68 65  ump to if.** the
2d860 20 66 69 6c 74 65 72 65 64 20 72 65 73 75 6c 74   filtered result
2d870 20 73 65 74 20 69 73 20 65 6d 70 74 79 2e 0a 2a   set is empty..*
2d880 2a 0a 2a 2a 20 50 34 20 69 73 20 65 69 74 68 65  *.** P4 is eithe
2d890 72 20 4e 55 4c 4c 20 6f 72 20 61 20 73 74 72 69  r NULL or a stri
2d8a0 6e 67 20 74 68 61 74 20 77 61 73 20 67 65 6e 65  ng that was gene
2d8b0 72 61 74 65 64 20 62 79 20 74 68 65 20 78 42 65  rated by the xBe
2d8c0 73 74 49 6e 64 65 78 0a 2a 2a 20 6d 65 74 68 6f  stIndex.** metho
2d8d0 64 20 6f 66 20 74 68 65 20 6d 6f 64 75 6c 65 2e  d of the module.
2d8e0 20 20 54 68 65 20 69 6e 74 65 72 70 72 65 74 61    The interpreta
2d8f0 74 69 6f 6e 20 6f 66 20 74 68 65 20 50 34 20 73  tion of the P4 s
2d900 74 72 69 6e 67 20 69 73 20 6c 65 66 74 0a 2a 2a  tring is left.**
2d910 20 74 6f 20 74 68 65 20 6d 6f 64 75 6c 65 20 69   to the module i
2d920 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 0a 2a  mplementation..*
2d930 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
2d940 20 69 6e 76 6f 6b 65 73 20 74 68 65 20 78 46 69   invokes the xFi
2d950 6c 74 65 72 20 6d 65 74 68 6f 64 20 6f 6e 20 74  lter method on t
2d960 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
2d970 20 73 70 65 63 69 66 69 65 64 0a 2a 2a 20 62 79   specified.** by
2d980 20 50 31 2e 20 20 54 68 65 20 69 6e 74 65 67 65   P1.  The intege
2d990 72 20 71 75 65 72 79 20 70 6c 61 6e 20 70 61 72  r query plan par
2d9a0 61 6d 65 74 65 72 20 74 6f 20 78 46 69 6c 74 65  ameter to xFilte
2d9b0 72 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72  r is stored in r
2d9c0 65 67 69 73 74 65 72 0a 2a 2a 20 50 33 2e 20 52  egister.** P3. R
2d9d0 65 67 69 73 74 65 72 20 50 33 2b 31 20 73 74 6f  egister P3+1 sto
2d9e0 72 65 73 20 74 68 65 20 61 72 67 63 20 70 61 72  res the argc par
2d9f0 61 6d 65 74 65 72 20 74 6f 20 62 65 20 70 61 73  ameter to be pas
2da00 73 65 64 20 74 6f 20 74 68 65 0a 2a 2a 20 78 46  sed to the.** xF
2da10 69 6c 74 65 72 20 6d 65 74 68 6f 64 2e 20 52 65  ilter method. Re
2da20 67 69 73 74 65 72 73 20 50 33 2b 32 2e 2e 50 33  gisters P3+2..P3
2da30 2b 31 2b 61 72 67 63 20 61 72 65 20 74 68 65 20  +1+argc are the 
2da40 61 72 67 63 0a 2a 2a 20 61 64 64 69 74 69 6f 6e  argc.** addition
2da50 61 6c 20 70 61 72 61 6d 65 74 65 72 73 20 77 68  al parameters wh
2da60 69 63 68 20 61 72 65 20 70 61 73 73 65 64 20 74  ich are passed t
2da70 6f 0a 2a 2a 20 78 46 69 6c 74 65 72 20 61 73 20  o.** xFilter as 
2da80 61 72 67 76 2e 20 52 65 67 69 73 74 65 72 20 50  argv. Register P
2da90 33 2b 32 20 62 65 63 6f 6d 65 73 20 61 72 67 76  3+2 becomes argv
2daa0 5b 30 5d 20 77 68 65 6e 20 70 61 73 73 65 64 20  [0] when passed 
2dab0 74 6f 20 78 46 69 6c 74 65 72 2e 0a 2a 2a 0a 2a  to xFilter..**.*
2dac0 2a 20 41 20 6a 75 6d 70 20 69 73 20 6d 61 64 65  * A jump is made
2dad0 20 74 6f 20 50 32 20 69 66 20 74 68 65 20 72 65   to P2 if the re
2dae0 73 75 6c 74 20 73 65 74 20 61 66 74 65 72 20 66  sult set after f
2daf0 69 6c 74 65 72 69 6e 67 20 77 6f 75 6c 64 20 62  iltering would b
2db00 65 20 65 6d 70 74 79 2e 0a 2a 2f 0a 63 61 73 65  e empty..*/.case
2db10 20 4f 50 5f 56 46 69 6c 74 65 72 3a 20 7b 20 20   OP_VFilter: {  
2db20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e   /* jump */.  in
2db30 74 20 6e 41 72 67 3b 0a 20 20 69 6e 74 20 69 51  t nArg;.  int iQ
2db40 75 65 72 79 3b 0a 20 20 63 6f 6e 73 74 20 73 71  uery;.  const sq
2db50 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d  lite3_module *pM
2db60 6f 64 75 6c 65 3b 0a 20 20 4d 65 6d 20 2a 70 51  odule;.  Mem *pQ
2db70 75 65 72 79 3b 0a 20 20 4d 65 6d 20 2a 70 41 72  uery;.  Mem *pAr
2db80 67 63 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74  gc;.  sqlite3_vt
2db90 61 62 5f 63 75 72 73 6f 72 20 2a 70 56 74 61 62  ab_cursor *pVtab
2dba0 43 75 72 73 6f 72 3b 0a 20 20 73 71 6c 69 74 65  Cursor;.  sqlite
2dbb0 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20  3_vtab *pVtab;. 
2dbc0 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 75   VdbeCursor *pCu
2dbd0 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20  r;.  int res;.  
2dbe0 69 6e 74 20 69 3b 0a 20 20 4d 65 6d 20 2a 2a 61  int i;.  Mem **a
2dbf0 70 41 72 67 3b 0a 0a 20 20 70 51 75 65 72 79 20  pArg;..  pQuery 
2dc00 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
2dc10 3b 0a 20 20 70 41 72 67 63 20 3d 20 26 70 51 75  ;.  pArgc = &pQu
2dc20 65 72 79 5b 31 5d 3b 0a 20 20 70 43 75 72 20 3d  ery[1];.  pCur =
2dc30 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
2dc40 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 6d 65  1];.  assert( me
2dc50 6d 49 73 56 61 6c 69 64 28 70 51 75 65 72 79 29  mIsValid(pQuery)
2dc60 20 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54   );.  REGISTER_T
2dc70 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 51  RACE(pOp->p3, pQ
2dc80 75 65 72 79 29 3b 0a 20 20 61 73 73 65 72 74 28  uery);.  assert(
2dc90 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73   pCur->pVtabCurs
2dca0 6f 72 20 29 3b 0a 20 20 70 56 74 61 62 43 75 72  or );.  pVtabCur
2dcb0 73 6f 72 20 3d 20 70 43 75 72 2d 3e 70 56 74 61  sor = pCur->pVta
2dcc0 62 43 75 72 73 6f 72 3b 0a 20 20 70 56 74 61 62  bCursor;.  pVtab
2dcd0 20 3d 20 70 56 74 61 62 43 75 72 73 6f 72 2d 3e   = pVtabCursor->
2dce0 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65  pVtab;.  pModule
2dcf0 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c   = pVtab->pModul
2dd00 65 3b 0a 0a 20 20 2f 2a 20 47 72 61 62 20 74 68  e;..  /* Grab th
2dd10 65 20 69 6e 64 65 78 20 6e 75 6d 62 65 72 20 61  e index number a
2dd20 6e 64 20 61 72 67 63 20 70 61 72 61 6d 65 74 65  nd argc paramete
2dd30 72 73 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  rs */.  assert( 
2dd40 28 70 51 75 65 72 79 2d 3e 66 6c 61 67 73 26 4d  (pQuery->flags&M
2dd50 45 4d 5f 49 6e 74 29 21 3d 30 20 26 26 20 70 41  EM_Int)!=0 && pA
2dd60 72 67 63 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d 5f  rgc->flags==MEM_
2dd70 49 6e 74 20 29 3b 0a 20 20 6e 41 72 67 20 3d 20  Int );.  nArg = 
2dd80 28 69 6e 74 29 70 41 72 67 63 2d 3e 75 2e 69 3b  (int)pArgc->u.i;
2dd90 0a 20 20 69 51 75 65 72 79 20 3d 20 28 69 6e 74  .  iQuery = (int
2dda0 29 70 51 75 65 72 79 2d 3e 75 2e 69 3b 0a 0a 20  )pQuery->u.i;.. 
2ddb0 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 78   /* Invoke the x
2ddc0 46 69 6c 74 65 72 20 6d 65 74 68 6f 64 20 2a 2f  Filter method */
2ddd0 0a 20 20 7b 0a 20 20 20 20 72 65 73 20 3d 20 30  .  {.    res = 0
2dde0 3b 0a 20 20 20 20 61 70 41 72 67 20 3d 20 70 2d  ;.    apArg = p-
2ddf0 3e 61 70 41 72 67 3b 0a 20 20 20 20 66 6f 72 28  >apArg;.    for(
2de00 69 20 3d 20 30 3b 20 69 3c 6e 41 72 67 3b 20 69  i = 0; i<nArg; i
2de10 2b 2b 29 7b 0a 20 20 20 20 20 20 61 70 41 72 67  ++){.      apArg
2de20 5b 69 5d 20 3d 20 26 70 41 72 67 63 5b 69 2b 31  [i] = &pArgc[i+1
2de30 5d 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ];.      sqlite3
2de40 56 64 62 65 4d 65 6d 53 74 6f 72 65 54 79 70 65  VdbeMemStoreType
2de50 28 61 70 41 72 67 5b 69 5d 29 3b 0a 20 20 20 20  (apArg[i]);.    
2de60 7d 0a 0a 20 20 20 20 70 2d 3e 69 6e 56 74 61 62  }..    p->inVtab
2de70 4d 65 74 68 6f 64 20 3d 20 31 3b 0a 20 20 20 20  Method = 1;.    
2de80 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 46  rc = pModule->xF
2de90 69 6c 74 65 72 28 70 56 74 61 62 43 75 72 73 6f  ilter(pVtabCurso
2dea0 72 2c 20 69 51 75 65 72 79 2c 20 70 4f 70 2d 3e  r, iQuery, pOp->
2deb0 70 34 2e 7a 2c 20 6e 41 72 67 2c 20 61 70 41 72  p4.z, nArg, apAr
2dec0 67 29 3b 0a 20 20 20 20 70 2d 3e 69 6e 56 74 61  g);.    p->inVta
2ded0 62 4d 65 74 68 6f 64 20 3d 20 30 3b 0a 20 20 20  bMethod = 0;.   
2dee0 20 69 6d 70 6f 72 74 56 74 61 62 45 72 72 4d 73   importVtabErrMs
2def0 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 20  g(p, pVtab);.   
2df00 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
2df10 4f 4b 20 29 7b 0a 20 20 20 20 20 20 72 65 73 20  OK ){.      res 
2df20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 45 6f 66 28  = pModule->xEof(
2df30 70 56 74 61 62 43 75 72 73 6f 72 29 3b 0a 20 20  pVtabCursor);.  
2df40 20 20 7d 0a 0a 20 20 20 20 69 66 28 20 72 65 73    }..    if( res
2df50 20 29 7b 0a 20 20 20 20 20 20 70 63 20 3d 20 70   ){.      pc = p
2df60 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20  Op->p2 - 1;.    
2df70 7d 0a 20 20 7d 0a 20 20 70 43 75 72 2d 3e 6e 75  }.  }.  pCur->nu
2df80 6c 6c 52 6f 77 20 3d 20 30 3b 0a 0a 20 20 62 72  llRow = 0;..  br
2df90 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
2dfa0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
2dfb0 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69  TUALTABLE */..#i
2dfc0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2dfd0 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f  T_VIRTUALTABLE./
2dfe0 2a 20 4f 70 63 6f 64 65 3a 20 56 43 6f 6c 75 6d  * Opcode: VColum
2dff0 6e 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  n P1 P2 P3 * *.*
2e000 2a 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 76  *.** Store the v
2e010 61 6c 75 65 20 6f 66 20 74 68 65 20 50 32 2d 74  alue of the P2-t
2e020 68 20 63 6f 6c 75 6d 6e 20 6f 66 0a 2a 2a 20 74  h column of.** t
2e030 68 65 20 72 6f 77 20 6f 66 20 74 68 65 20 76 69  he row of the vi
2e040 72 74 75 61 6c 2d 74 61 62 6c 65 20 74 68 61 74  rtual-table that
2e050 20 74 68 65 20 0a 2a 2a 20 50 31 20 63 75 72 73   the .** P1 curs
2e060 6f 72 20 69 73 20 70 6f 69 6e 74 69 6e 67 20 74  or is pointing t
2e070 6f 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  o into register 
2e080 50 33 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56  P3..*/.case OP_V
2e090 43 6f 6c 75 6d 6e 3a 20 7b 0a 20 20 73 71 6c 69  Column: {.  sqli
2e0a0 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b  te3_vtab *pVtab;
2e0b0 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33  .  const sqlite3
2e0c0 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65  _module *pModule
2e0d0 3b 0a 20 20 4d 65 6d 20 2a 70 44 65 73 74 3b 0a  ;.  Mem *pDest;.
2e0e0 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78    sqlite3_contex
2e0f0 74 20 73 43 6f 6e 74 65 78 74 3b 0a 0a 20 20 56  t sContext;..  V
2e100 64 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72 20  dbeCursor *pCur 
2e110 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
2e120 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
2e130 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72  Cur->pVtabCursor
2e140 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
2e150 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p3>0 && pOp->
2e160 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20  p3<=p->nMem );. 
2e170 20 70 44 65 73 74 20 3d 20 26 61 4d 65 6d 5b 70   pDest = &aMem[p
2e180 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41 62  Op->p3];.  memAb
2e190 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70  outToChange(p, p
2e1a0 44 65 73 74 29 3b 0a 20 20 69 66 28 20 70 43 75  Dest);.  if( pCu
2e1b0 72 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20  r->nullRow ){.  
2e1c0 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
2e1d0 53 65 74 4e 75 6c 6c 28 70 44 65 73 74 29 3b 0a  SetNull(pDest);.
2e1e0 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20      break;.  }. 
2e1f0 20 70 56 74 61 62 20 3d 20 70 43 75 72 2d 3e 70   pVtab = pCur->p
2e200 56 74 61 62 43 75 72 73 6f 72 2d 3e 70 56 74 61  VtabCursor->pVta
2e210 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70  b;.  pModule = p
2e220 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20  Vtab->pModule;. 
2e230 20 61 73 73 65 72 74 28 20 70 4d 6f 64 75 6c 65   assert( pModule
2e240 2d 3e 78 43 6f 6c 75 6d 6e 20 29 3b 0a 20 20 6d  ->xColumn );.  m
2e250 65 6d 73 65 74 28 26 73 43 6f 6e 74 65 78 74 2c  emset(&sContext,
2e260 20 30 2c 20 73 69 7a 65 6f 66 28 73 43 6f 6e 74   0, sizeof(sCont
2e270 65 78 74 29 29 3b 0a 0a 20 20 2f 2a 20 54 68 65  ext));..  /* The
2e280 20 6f 75 74 70 75 74 20 63 65 6c 6c 20 6d 61 79   output cell may
2e290 20 61 6c 72 65 61 64 79 20 68 61 76 65 20 61 20   already have a 
2e2a0 62 75 66 66 65 72 20 61 6c 6c 6f 63 61 74 65 64  buffer allocated
2e2b0 2e 20 4d 6f 76 65 0a 20 20 2a 2a 20 74 68 65 20  . Move.  ** the 
2e2c0 63 75 72 72 65 6e 74 20 63 6f 6e 74 65 6e 74 73  current contents
2e2d0 20 74 6f 20 73 43 6f 6e 74 65 78 74 2e 73 20 73   to sContext.s s
2e2e0 6f 20 69 6e 20 63 61 73 65 20 74 68 65 20 75 73  o in case the us
2e2f0 65 72 2d 66 75 6e 63 74 69 6f 6e 20 0a 20 20 2a  er-function .  *
2e300 2a 20 63 61 6e 20 75 73 65 20 74 68 65 20 61 6c  * can use the al
2e310 72 65 61 64 79 20 61 6c 6c 6f 63 61 74 65 64 20  ready allocated 
2e320 62 75 66 66 65 72 20 69 6e 73 74 65 61 64 20 6f  buffer instead o
2e330 66 20 61 6c 6c 6f 63 61 74 69 6e 67 20 61 20 0a  f allocating a .
2e340 20 20 2a 2a 20 6e 65 77 20 6f 6e 65 2e 0a 20 20    ** new one..  
2e350 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  */.  sqlite3Vdbe
2e360 4d 65 6d 4d 6f 76 65 28 26 73 43 6f 6e 74 65 78  MemMove(&sContex
2e370 74 2e 73 2c 20 70 44 65 73 74 29 3b 0a 20 20 4d  t.s, pDest);.  M
2e380 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 26 73  emSetTypeFlag(&s
2e390 43 6f 6e 74 65 78 74 2e 73 2c 20 4d 45 4d 5f 4e  Context.s, MEM_N
2e3a0 75 6c 6c 29 3b 0a 0a 20 20 72 63 20 3d 20 70 4d  ull);..  rc = pM
2e3b0 6f 64 75 6c 65 2d 3e 78 43 6f 6c 75 6d 6e 28 70  odule->xColumn(p
2e3c0 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72  Cur->pVtabCursor
2e3d0 2c 20 26 73 43 6f 6e 74 65 78 74 2c 20 70 4f 70  , &sContext, pOp
2e3e0 2d 3e 70 32 29 3b 0a 20 20 69 6d 70 6f 72 74 56  ->p2);.  importV
2e3f0 74 61 62 45 72 72 4d 73 67 28 70 2c 20 70 56 74  tabErrMsg(p, pVt
2e400 61 62 29 3b 0a 20 20 69 66 28 20 73 43 6f 6e 74  ab);.  if( sCont
2e410 65 78 74 2e 69 73 45 72 72 6f 72 20 29 7b 0a 20  ext.isError ){. 
2e420 20 20 20 72 63 20 3d 20 73 43 6f 6e 74 65 78 74     rc = sContext
2e430 2e 69 73 45 72 72 6f 72 3b 0a 20 20 7d 0a 0a 20  .isError;.  }.. 
2e440 20 2f 2a 20 43 6f 70 79 20 74 68 65 20 72 65 73   /* Copy the res
2e450 75 6c 74 20 6f 66 20 74 68 65 20 66 75 6e 63 74  ult of the funct
2e460 69 6f 6e 20 74 6f 20 74 68 65 20 50 33 20 72 65  ion to the P3 re
2e470 67 69 73 74 65 72 2e 20 57 65 0a 20 20 2a 2a 20  gister. We.  ** 
2e480 64 6f 20 74 68 69 73 20 72 65 67 61 72 64 6c 65  do this regardle
2e490 73 73 20 6f 66 20 77 68 65 74 68 65 72 20 6f 72  ss of whether or
2e4a0 20 6e 6f 74 20 61 6e 20 65 72 72 6f 72 20 6f 63   not an error oc
2e4b0 63 75 72 72 65 64 20 74 6f 20 65 6e 73 75 72 65  curred to ensure
2e4c0 20 61 6e 79 0a 20 20 2a 2a 20 64 79 6e 61 6d 69   any.  ** dynami
2e4d0 63 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e 20  c allocation in 
2e4e0 73 43 6f 6e 74 65 78 74 2e 73 20 28 61 20 4d 65  sContext.s (a Me
2e4f0 6d 20 73 74 72 75 63 74 29 20 69 73 20 20 72 65  m struct) is  re
2e500 6c 65 61 73 65 64 2e 0a 20 20 2a 2f 0a 20 20 73  leased..  */.  s
2e510 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
2e520 45 6e 63 6f 64 69 6e 67 28 26 73 43 6f 6e 74 65  Encoding(&sConte
2e530 78 74 2e 73 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  xt.s, encoding);
2e540 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
2e550 6d 4d 6f 76 65 28 70 44 65 73 74 2c 20 26 73 43  mMove(pDest, &sC
2e560 6f 6e 74 65 78 74 2e 73 29 3b 0a 20 20 52 45 47  ontext.s);.  REG
2e570 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
2e580 3e 70 33 2c 20 70 44 65 73 74 29 3b 0a 20 20 55  >p3, pDest);.  U
2e590 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49  PDATE_MAX_BLOBSI
2e5a0 5a 45 28 70 44 65 73 74 29 3b 0a 0a 20 20 69 66  ZE(pDest);..  if
2e5b0 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  ( sqlite3VdbeMem
2e5c0 54 6f 6f 42 69 67 28 70 44 65 73 74 29 20 29 7b  TooBig(pDest) ){
2e5d0 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69  .    goto too_bi
2e5e0 67 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  g;.  }.  break;.
2e5f0 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
2e600 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
2e610 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  ABLE */..#ifndef
2e620 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
2e630 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63  TUALTABLE./* Opc
2e640 6f 64 65 3a 20 56 4e 65 78 74 20 50 31 20 50 32  ode: VNext P1 P2
2e650 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 64 76   * * *.**.** Adv
2e660 61 6e 63 65 20 76 69 72 74 75 61 6c 20 74 61 62  ance virtual tab
2e670 6c 65 20 50 31 20 74 6f 20 74 68 65 20 6e 65 78  le P1 to the nex
2e680 74 20 72 6f 77 20 69 6e 20 69 74 73 20 72 65 73  t row in its res
2e690 75 6c 74 20 73 65 74 20 61 6e 64 0a 2a 2a 20 6a  ult set and.** j
2e6a0 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69  ump to instructi
2e6b0 6f 6e 20 50 32 2e 20 20 4f 72 2c 20 69 66 20 74  on P2.  Or, if t
2e6c0 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
2e6d0 20 68 61 73 20 72 65 61 63 68 65 64 0a 2a 2a 20   has reached.** 
2e6e0 74 68 65 20 65 6e 64 20 6f 66 20 69 74 73 20 72  the end of its r
2e6f0 65 73 75 6c 74 20 73 65 74 2c 20 74 68 65 6e 20  esult set, then 
2e700 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  fall through to 
2e710 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63  the next instruc
2e720 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  tion..*/.case OP
2e730 5f 56 4e 65 78 74 3a 20 7b 20 20 20 2f 2a 20 6a  _VNext: {   /* j
2e740 75 6d 70 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  ump */.  sqlite3
2e750 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20  _vtab *pVtab;.  
2e760 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f  const sqlite3_mo
2e770 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20  dule *pModule;. 
2e780 20 69 6e 74 20 72 65 73 3b 0a 20 20 56 64 62 65   int res;.  Vdbe
2e790 43 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a 0a 20  Cursor *pCur;.. 
2e7a0 20 72 65 73 20 3d 20 30 3b 0a 20 20 70 43 75 72   res = 0;.  pCur
2e7b0 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
2e7c0 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
2e7d0 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f  pCur->pVtabCurso
2e7e0 72 20 29 3b 0a 20 20 69 66 28 20 70 43 75 72 2d  r );.  if( pCur-
2e7f0 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20  >nullRow ){.    
2e800 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 56 74  break;.  }.  pVt
2e810 61 62 20 3d 20 70 43 75 72 2d 3e 70 56 74 61 62  ab = pCur->pVtab
2e820 43 75 72 73 6f 72 2d 3e 70 56 74 61 62 3b 0a 20  Cursor->pVtab;. 
2e830 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62   pModule = pVtab
2e840 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 61 73 73  ->pModule;.  ass
2e850 65 72 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 4e  ert( pModule->xN
2e860 65 78 74 20 29 3b 0a 0a 20 20 2f 2a 20 49 6e 76  ext );..  /* Inv
2e870 6f 6b 65 20 74 68 65 20 78 4e 65 78 74 28 29 20  oke the xNext() 
2e880 6d 65 74 68 6f 64 20 6f 66 20 74 68 65 20 6d 6f  method of the mo
2e890 64 75 6c 65 2e 20 54 68 65 72 65 20 69 73 20 6e  dule. There is n
2e8a0 6f 20 77 61 79 20 66 6f 72 20 74 68 65 0a 20 20  o way for the.  
2e8b0 2a 2a 20 75 6e 64 65 72 6c 79 69 6e 67 20 69 6d  ** underlying im
2e8c0 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 74 6f 20  plementation to 
2e8d0 72 65 74 75 72 6e 20 61 6e 20 65 72 72 6f 72 20  return an error 
2e8e0 69 66 20 6f 6e 65 20 6f 63 63 75 72 73 20 64 75  if one occurs du
2e8f0 72 69 6e 67 0a 20 20 2a 2a 20 78 4e 65 78 74 28  ring.  ** xNext(
2e900 29 2e 20 49 6e 73 74 65 61 64 2c 20 69 66 20 61  ). Instead, if a
2e910 6e 20 65 72 72 6f 72 20 6f 63 63 75 72 73 2c 20  n error occurs, 
2e920 74 72 75 65 20 69 73 20 72 65 74 75 72 6e 65 64  true is returned
2e930 20 28 69 6e 64 69 63 61 74 69 6e 67 20 74 68 61   (indicating tha
2e940 74 20 0a 20 20 2a 2a 20 64 61 74 61 20 69 73 20  t .  ** data is 
2e950 61 76 61 69 6c 61 62 6c 65 29 20 61 6e 64 20 74  available) and t
2e960 68 65 20 65 72 72 6f 72 20 63 6f 64 65 20 72 65  he error code re
2e970 74 75 72 6e 65 64 20 77 68 65 6e 20 78 43 6f 6c  turned when xCol
2e980 75 6d 6e 20 6f 72 0a 20 20 2a 2a 20 73 6f 6d 65  umn or.  ** some
2e990 20 6f 74 68 65 72 20 6d 65 74 68 6f 64 20 69 73   other method is
2e9a0 20 6e 65 78 74 20 69 6e 76 6f 6b 65 64 20 6f 6e   next invoked on
2e9b0 20 74 68 65 20 73 61 76 65 20 76 69 72 74 75 61   the save virtua
2e9c0 6c 20 74 61 62 6c 65 20 63 75 72 73 6f 72 2e 0a  l table cursor..
2e9d0 20 20 2a 2f 0a 20 20 70 2d 3e 69 6e 56 74 61 62    */.  p->inVtab
2e9e0 4d 65 74 68 6f 64 20 3d 20 31 3b 0a 20 20 72 63  Method = 1;.  rc
2e9f0 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 4e 65 78   = pModule->xNex
2ea00 74 28 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72  t(pCur->pVtabCur
2ea10 73 6f 72 29 3b 0a 20 20 70 2d 3e 69 6e 56 74 61  sor);.  p->inVta
2ea20 62 4d 65 74 68 6f 64 20 3d 20 30 3b 0a 20 20 69  bMethod = 0;.  i
2ea30 6d 70 6f 72 74 56 74 61 62 45 72 72 4d 73 67 28  mportVtabErrMsg(
2ea40 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 69 66 28  p, pVtab);.  if(
2ea50 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
2ea60 7b 0a 20 20 20 20 72 65 73 20 3d 20 70 4d 6f 64  {.    res = pMod
2ea70 75 6c 65 2d 3e 78 45 6f 66 28 70 43 75 72 2d 3e  ule->xEof(pCur->
2ea80 70 56 74 61 62 43 75 72 73 6f 72 29 3b 0a 20 20  pVtabCursor);.  
2ea90 7d 0a 0a 20 20 69 66 28 20 21 72 65 73 20 29 7b  }..  if( !res ){
2eaa0 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 65 72 65  .    /* If there
2eab0 20 69 73 20 64 61 74 61 2c 20 6a 75 6d 70 20 74   is data, jump t
2eac0 6f 20 50 32 20 2a 2f 0a 20 20 20 20 70 63 20 3d  o P2 */.    pc =
2ead0 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
2eae0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  }.  break;.}.#en
2eaf0 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
2eb00 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20  IT_VIRTUALTABLE 
2eb10 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
2eb20 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
2eb30 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ABLE./* Opcode: 
2eb40 56 52 65 6e 61 6d 65 20 50 31 20 2a 20 2a 20 50  VRename P1 * * P
2eb50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20  4 *.**.** P4 is 
2eb60 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 76  a pointer to a v
2eb70 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6f 62 6a  irtual table obj
2eb80 65 63 74 2c 20 61 6e 20 73 71 6c 69 74 65 33 5f  ect, an sqlite3_
2eb90 76 74 61 62 20 73 74 72 75 63 74 75 72 65 2e 0a  vtab structure..
2eba0 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69  ** This opcode i
2ebb0 6e 76 6f 6b 65 73 20 74 68 65 20 63 6f 72 72 65  nvokes the corre
2ebc0 73 70 6f 6e 64 69 6e 67 20 78 52 65 6e 61 6d 65  sponding xRename
2ebd0 20 6d 65 74 68 6f 64 2e 20 54 68 65 20 76 61 6c   method. The val
2ebe0 75 65 0a 2a 2a 20 69 6e 20 72 65 67 69 73 74 65  ue.** in registe
2ebf0 72 20 50 31 20 69 73 20 70 61 73 73 65 64 20 61  r P1 is passed a
2ec00 73 20 74 68 65 20 7a 4e 61 6d 65 20 61 72 67 75  s the zName argu
2ec10 6d 65 6e 74 20 74 6f 20 74 68 65 20 78 52 65 6e  ment to the xRen
2ec20 61 6d 65 20 6d 65 74 68 6f 64 2e 0a 2a 2f 0a 63  ame method..*/.c
2ec30 61 73 65 20 4f 50 5f 56 52 65 6e 61 6d 65 3a 20  ase OP_VRename: 
2ec40 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62  {.  sqlite3_vtab
2ec50 20 2a 70 56 74 61 62 3b 0a 20 20 4d 65 6d 20 2a   *pVtab;.  Mem *
2ec60 70 4e 61 6d 65 3b 0a 0a 20 20 70 56 74 61 62 20  pName;..  pVtab 
2ec70 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62 2d  = pOp->p4.pVtab-
2ec80 3e 70 56 74 61 62 3b 0a 20 20 70 4e 61 6d 65 20  >pVtab;.  pName 
2ec90 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
2eca0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 56 74 61  ;.  assert( pVta
2ecb0 62 2d 3e 70 4d 6f 64 75 6c 65 2d 3e 78 52 65 6e  b->pModule->xRen
2ecc0 61 6d 65 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ame );.  assert(
2ecd0 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 4e 61 6d   memIsValid(pNam
2ece0 65 29 20 29 3b 0a 20 20 52 45 47 49 53 54 45 52  e) );.  REGISTER
2ecf0 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20  _TRACE(pOp->p1, 
2ed00 70 4e 61 6d 65 29 3b 0a 20 20 61 73 73 65 72 74  pName);.  assert
2ed10 28 20 70 4e 61 6d 65 2d 3e 66 6c 61 67 73 20 26  ( pName->flags &
2ed20 20 4d 45 4d 5f 53 74 72 20 29 3b 0a 20 20 74 65   MEM_Str );.  te
2ed30 73 74 63 61 73 65 28 20 70 4e 61 6d 65 2d 3e 65  stcase( pName->e
2ed40 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46 38 20  nc==SQLITE_UTF8 
2ed50 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 70  );.  testcase( p
2ed60 4e 61 6d 65 2d 3e 65 6e 63 3d 3d 53 51 4c 49 54  Name->enc==SQLIT
2ed70 45 5f 55 54 46 31 36 42 45 20 29 3b 0a 20 20 74  E_UTF16BE );.  t
2ed80 65 73 74 63 61 73 65 28 20 70 4e 61 6d 65 2d 3e  estcase( pName->
2ed90 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46 31  enc==SQLITE_UTF1
2eda0 36 4c 45 20 29 3b 0a 20 20 72 63 20 3d 20 73 71  6LE );.  rc = sq
2edb0 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 45  lite3VdbeChangeE
2edc0 6e 63 6f 64 69 6e 67 28 70 4e 61 6d 65 2c 20 53  ncoding(pName, S
2edd0 51 4c 49 54 45 5f 55 54 46 38 29 3b 0a 20 20 69  QLITE_UTF8);.  i
2ede0 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
2edf0 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 70 56 74   ){.    rc = pVt
2ee00 61 62 2d 3e 70 4d 6f 64 75 6c 65 2d 3e 78 52 65  ab->pModule->xRe
2ee10 6e 61 6d 65 28 70 56 74 61 62 2c 20 70 4e 61 6d  name(pVtab, pNam
2ee20 65 2d 3e 7a 29 3b 0a 20 20 20 20 69 6d 70 6f 72  e->z);.    impor
2ee30 74 56 74 61 62 45 72 72 4d 73 67 28 70 2c 20 70  tVtabErrMsg(p, p
2ee40 56 74 61 62 29 3b 0a 20 20 20 20 70 2d 3e 65 78  Vtab);.    p->ex
2ee50 70 69 72 65 64 20 3d 20 30 3b 0a 20 20 7d 0a 20  pired = 0;.  }. 
2ee60 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
2ee70 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
2ee80 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
2ee90 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 55  LE./* Opcode: VU
2eea0 70 64 61 74 65 20 50 31 20 50 32 20 50 33 20 50  pdate P1 P2 P3 P
2eeb0 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20  4 *.**.** P4 is 
2eec0 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 76  a pointer to a v
2eed0 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6f 62 6a  irtual table obj
2eee0 65 63 74 2c 20 61 6e 20 73 71 6c 69 74 65 33 5f  ect, an sqlite3_
2eef0 76 74 61 62 20 73 74 72 75 63 74 75 72 65 2e 0a  vtab structure..
2ef00 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69  ** This opcode i
2ef10 6e 76 6f 6b 65 73 20 74 68 65 20 63 6f 72 72 65  nvokes the corre
2ef20 73 70 6f 6e 64 69 6e 67 20 78 55 70 64 61 74 65  sponding xUpdate
2ef30 20 6d 65 74 68 6f 64 2e 20 50 32 20 76 61 6c 75   method. P2 valu
2ef40 65 73 0a 2a 2a 20 61 72 65 20 63 6f 6e 74 69 67  es.** are contig
2ef50 75 6f 75 73 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  uous memory cell
2ef60 73 20 73 74 61 72 74 69 6e 67 20 61 74 20 50 33  s starting at P3
2ef70 20 74 6f 20 70 61 73 73 20 74 6f 20 74 68 65 20   to pass to the 
2ef80 78 55 70 64 61 74 65 20 0a 2a 2a 20 69 6e 76 6f  xUpdate .** invo
2ef90 63 61 74 69 6f 6e 2e 20 54 68 65 20 76 61 6c 75  cation. The valu
2efa0 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 28 50  e in register (P
2efb0 33 2b 50 32 2d 31 29 20 63 6f 72 72 65 73 70 6f  3+P2-1) correspo
2efc0 6e 64 73 20 74 6f 20 74 68 65 20 0a 2a 2a 20 70  nds to the .** p
2efd0 32 74 68 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74  2th element of t
2efe0 68 65 20 61 72 67 76 20 61 72 72 61 79 20 70 61  he argv array pa
2eff0 73 73 65 64 20 74 6f 20 78 55 70 64 61 74 65 2e  ssed to xUpdate.
2f000 0a 2a 2a 0a 2a 2a 20 54 68 65 20 78 55 70 64 61  .**.** The xUpda
2f010 74 65 20 6d 65 74 68 6f 64 20 77 69 6c 6c 20 64  te method will d
2f020 6f 20 61 20 44 45 4c 45 54 45 20 6f 72 20 61 6e  o a DELETE or an
2f030 20 49 4e 53 45 52 54 20 6f 72 20 62 6f 74 68 2e   INSERT or both.
2f040 0a 2a 2a 20 54 68 65 20 61 72 67 76 5b 30 5d 20  .** The argv[0] 
2f050 65 6c 65 6d 65 6e 74 20 28 77 68 69 63 68 20 63  element (which c
2f060 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 6d 65  orresponds to me
2f070 6d 6f 72 79 20 63 65 6c 6c 20 50 33 29 0a 2a 2a  mory cell P3).**
2f080 20 69 73 20 74 68 65 20 72 6f 77 69 64 20 6f 66   is the rowid of
2f090 20 61 20 72 6f 77 20 74 6f 20 64 65 6c 65 74 65   a row to delete
2f0a0 2e 20 20 49 66 20 61 72 67 76 5b 30 5d 20 69 73  .  If argv[0] is
2f0b0 20 4e 55 4c 4c 20 74 68 65 6e 20 6e 6f 20 0a 2a   NULL then no .*
2f0c0 2a 20 64 65 6c 65 74 69 6f 6e 20 6f 63 63 75 72  * deletion occur
2f0d0 73 2e 20 20 54 68 65 20 61 72 67 76 5b 31 5d 20  s.  The argv[1] 
2f0e0 65 6c 65 6d 65 6e 74 20 69 73 20 74 68 65 20 72  element is the r
2f0f0 6f 77 69 64 20 6f 66 20 74 68 65 20 6e 65 77 20  owid of the new 
2f100 0a 2a 2a 20 72 6f 77 2e 20 20 54 68 69 73 20 63  .** row.  This c
2f110 61 6e 20 62 65 20 4e 55 4c 4c 20 74 6f 20 68 61  an be NULL to ha
2f120 76 65 20 74 68 65 20 76 69 72 74 75 61 6c 20 74  ve the virtual t
2f130 61 62 6c 65 20 73 65 6c 65 63 74 20 74 68 65 20  able select the 
2f140 6e 65 77 20 0a 2a 2a 20 72 6f 77 69 64 20 66 6f  new .** rowid fo
2f150 72 20 69 74 73 65 6c 66 2e 20 20 54 68 65 20 73  r itself.  The s
2f160 75 62 73 65 71 75 65 6e 74 20 65 6c 65 6d 65 6e  ubsequent elemen
2f170 74 73 20 69 6e 20 74 68 65 20 61 72 72 61 79 20  ts in the array 
2f180 61 72 65 20 0a 2a 2a 20 74 68 65 20 76 61 6c 75  are .** the valu
2f190 65 73 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  es of columns in
2f1a0 20 74 68 65 20 6e 65 77 20 72 6f 77 2e 0a 2a 2a   the new row..**
2f1b0 0a 2a 2a 20 49 66 20 50 32 3d 3d 31 20 74 68 65  .** If P2==1 the
2f1c0 6e 20 6e 6f 20 69 6e 73 65 72 74 20 69 73 20 70  n no insert is p
2f1d0 65 72 66 6f 72 6d 65 64 2e 20 20 61 72 67 76 5b  erformed.  argv[
2f1e0 30 5d 20 69 73 20 74 68 65 20 72 6f 77 69 64 20  0] is the rowid 
2f1f0 6f 66 0a 2a 2a 20 61 20 72 6f 77 20 74 6f 20 64  of.** a row to d
2f200 65 6c 65 74 65 2e 0a 2a 2a 0a 2a 2a 20 50 31 20  elete..**.** P1 
2f210 69 73 20 61 20 62 6f 6f 6c 65 61 6e 20 66 6c 61  is a boolean fla
2f220 67 2e 20 49 66 20 69 74 20 69 73 20 73 65 74 20  g. If it is set 
2f230 74 6f 20 74 72 75 65 20 61 6e 64 20 74 68 65 20  to true and the 
2f240 78 55 70 64 61 74 65 20 63 61 6c 6c 0a 2a 2a 20  xUpdate call.** 
2f250 69 73 20 73 75 63 63 65 73 73 66 75 6c 2c 20 74  is successful, t
2f260 68 65 6e 20 74 68 65 20 76 61 6c 75 65 20 72 65  hen the value re
2f270 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65  turned by sqlite
2f280 33 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f  3_last_insert_ro
2f290 77 69 64 28 29 20 0a 2a 2a 20 69 73 20 73 65 74  wid() .** is set
2f2a0 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 6f 66   to the value of
2f2b0 20 74 68 65 20 72 6f 77 69 64 20 66 6f 72 20 74   the rowid for t
2f2c0 68 65 20 72 6f 77 20 6a 75 73 74 20 69 6e 73 65  he row just inse
2f2d0 72 74 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  rted..*/.case OP
2f2e0 5f 56 55 70 64 61 74 65 3a 20 7b 0a 20 20 73 71  _VUpdate: {.  sq
2f2f0 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61  lite3_vtab *pVta
2f300 62 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 6f 64  b;.  sqlite3_mod
2f310 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20  ule *pModule;.  
2f320 69 6e 74 20 6e 41 72 67 3b 0a 20 20 69 6e 74 20  int nArg;.  int 
2f330 69 3b 0a 20 20 73 71 6c 69 74 65 5f 69 6e 74 36  i;.  sqlite_int6
2f340 34 20 72 6f 77 69 64 3b 0a 20 20 4d 65 6d 20 2a  4 rowid;.  Mem *
2f350 2a 61 70 41 72 67 3b 0a 20 20 4d 65 6d 20 2a 70  *apArg;.  Mem *p
2f360 58 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  X;..  assert( pO
2f370 70 2d 3e 70 32 3d 3d 31 20 20 20 20 20 20 20 20  p->p2==1        
2f380 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 46  || pOp->p5==OE_F
2f390 61 69 6c 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 35  ail   || pOp->p5
2f3a0 3d 3d 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 0a 20  ==OE_Rollback . 
2f3b0 20 20 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 35        || pOp->p5
2f3c0 3d 3d 4f 45 5f 41 62 6f 72 74 20 7c 7c 20 70 4f  ==OE_Abort || pO
2f3d0 70 2d 3e 70 35 3d 3d 4f 45 5f 49 67 6e 6f 72 65  p->p5==OE_Ignore
2f3e0 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f   || pOp->p5==OE_
2f3f0 52 65 70 6c 61 63 65 0a 20 20 29 3b 0a 20 20 70  Replace.  );.  p
2f400 56 74 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70  Vtab = pOp->p4.p
2f410 56 74 61 62 2d 3e 70 56 74 61 62 3b 0a 20 20 70  Vtab->pVtab;.  p
2f420 4d 6f 64 75 6c 65 20 3d 20 28 73 71 6c 69 74 65  Module = (sqlite
2f430 33 5f 6d 6f 64 75 6c 65 20 2a 29 70 56 74 61 62  3_module *)pVtab
2f440 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 6e 41 72  ->pModule;.  nAr
2f450 67 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61  g = pOp->p2;.  a
2f460 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79  ssert( pOp->p4ty
2f470 70 65 3d 3d 50 34 5f 56 54 41 42 20 29 3b 0a 20  pe==P4_VTAB );. 
2f480 20 69 66 28 20 41 4c 57 41 59 53 28 70 4d 6f 64   if( ALWAYS(pMod
2f490 75 6c 65 2d 3e 78 55 70 64 61 74 65 29 20 29 7b  ule->xUpdate) ){
2f4a0 0a 20 20 20 20 75 38 20 76 74 61 62 4f 6e 43 6f  .    u8 vtabOnCo
2f4b0 6e 66 6c 69 63 74 20 3d 20 64 62 2d 3e 76 74 61  nflict = db->vta
2f4c0 62 4f 6e 43 6f 6e 66 6c 69 63 74 3b 0a 20 20 20  bOnConflict;.   
2f4d0 20 61 70 41 72 67 20 3d 20 70 2d 3e 61 70 41 72   apArg = p->apAr
2f4e0 67 3b 0a 20 20 20 20 70 58 20 3d 20 26 61 4d 65  g;.    pX = &aMe
2f4f0 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20  m[pOp->p3];.    
2f500 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 41 72 67 3b  for(i=0; i<nArg;
2f510 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 61 73 73   i++){.      ass
2f520 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
2f530 70 58 29 20 29 3b 0a 20 20 20 20 20 20 6d 65 6d  pX) );.      mem
2f540 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
2f550 20 70 58 29 3b 0a 20 20 20 20 20 20 73 71 6c 69   pX);.      sqli
2f560 74 65 33 56 64 62 65 4d 65 6d 53 74 6f 72 65 54  te3VdbeMemStoreT
2f570 79 70 65 28 70 58 29 3b 0a 20 20 20 20 20 20 61  ype(pX);.      a
2f580 70 41 72 67 5b 69 5d 20 3d 20 70 58 3b 0a 20 20  pArg[i] = pX;.  
2f590 20 20 20 20 70 58 2b 2b 3b 0a 20 20 20 20 7d 0a      pX++;.    }.
2f5a0 20 20 20 20 64 62 2d 3e 76 74 61 62 4f 6e 43 6f      db->vtabOnCo
2f5b0 6e 66 6c 69 63 74 20 3d 20 70 4f 70 2d 3e 70 35  nflict = pOp->p5
2f5c0 3b 0a 20 20 20 20 72 63 20 3d 20 70 4d 6f 64 75  ;.    rc = pModu
2f5d0 6c 65 2d 3e 78 55 70 64 61 74 65 28 70 56 74 61  le->xUpdate(pVta
2f5e0 62 2c 20 6e 41 72 67 2c 20 61 70 41 72 67 2c 20  b, nArg, apArg, 
2f5f0 26 72 6f 77 69 64 29 3b 0a 20 20 20 20 64 62 2d  &rowid);.    db-
2f600 3e 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 20  >vtabOnConflict 
2f610 3d 20 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74  = vtabOnConflict
2f620 3b 0a 20 20 20 20 69 6d 70 6f 72 74 56 74 61 62  ;.    importVtab
2f630 45 72 72 4d 73 67 28 70 2c 20 70 56 74 61 62 29  ErrMsg(p, pVtab)
2f640 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51  ;.    if( rc==SQ
2f650 4c 49 54 45 5f 4f 4b 20 26 26 20 70 4f 70 2d 3e  LITE_OK && pOp->
2f660 70 31 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65  p1 ){.      asse
2f670 72 74 28 20 6e 41 72 67 3e 31 20 26 26 20 61 70  rt( nArg>1 && ap
2f680 41 72 67 5b 30 5d 20 26 26 20 28 61 70 41 72 67  Arg[0] && (apArg
2f690 5b 30 5d 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 4e  [0]->flags&MEM_N
2f6a0 75 6c 6c 29 20 29 3b 0a 20 20 20 20 20 20 64 62  ull) );.      db
2f6b0 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 6c 61  ->lastRowid = la
2f6c0 73 74 52 6f 77 69 64 20 3d 20 72 6f 77 69 64 3b  stRowid = rowid;
2f6d0 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 72  .    }.    if( r
2f6e0 63 3d 3d 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52  c==SQLITE_CONSTR
2f6f0 41 49 4e 54 20 26 26 20 70 4f 70 2d 3e 70 34 2e  AINT && pOp->p4.
2f700 70 56 74 61 62 2d 3e 62 43 6f 6e 73 74 72 61 69  pVtab->bConstrai
2f710 6e 74 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20  nt ){.      if( 
2f720 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 49 67 6e 6f  pOp->p5==OE_Igno
2f730 72 65 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63  re ){.        rc
2f740 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20   = SQLITE_OK;.  
2f750 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
2f760 20 20 20 70 2d 3e 65 72 72 6f 72 41 63 74 69 6f     p->errorActio
2f770 6e 20 3d 20 28 28 70 4f 70 2d 3e 70 35 3d 3d 4f  n = ((pOp->p5==O
2f780 45 5f 52 65 70 6c 61 63 65 29 20 3f 20 4f 45 5f  E_Replace) ? OE_
2f790 41 62 6f 72 74 20 3a 20 70 4f 70 2d 3e 70 35 29  Abort : pOp->p5)
2f7a0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65  ;.      }.    }e
2f7b0 6c 73 65 7b 0a 20 20 20 20 20 20 70 2d 3e 6e 43  lse{.      p->nC
2f7c0 68 61 6e 67 65 2b 2b 3b 0a 20 20 20 20 7d 0a 20  hange++;.    }. 
2f7d0 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65   }.  break;.}.#e
2f7e0 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
2f7f0 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
2f800 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 20 53 51   */..#ifndef  SQ
2f810 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f  LITE_OMIT_PAGER_
2f820 50 52 41 47 4d 41 53 0a 2f 2a 20 4f 70 63 6f 64  PRAGMAS./* Opcod
2f830 65 3a 20 50 61 67 65 63 6f 75 6e 74 20 50 31 20  e: Pagecount P1 
2f840 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57  P2 * * *.**.** W
2f850 72 69 74 65 20 74 68 65 20 63 75 72 72 65 6e 74  rite the current
2f860 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73   number of pages
2f870 20 69 6e 20 64 61 74 61 62 61 73 65 20 50 31 20   in database P1 
2f880 74 6f 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 50  to memory cell P
2f890 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 61  2..*/.case OP_Pa
2f8a0 67 65 63 6f 75 6e 74 3a 20 7b 20 20 20 20 20 20  gecount: {      
2f8b0 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72        /* out2-pr
2f8c0 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 70 4f  erelease */.  pO
2f8d0 75 74 2d 3e 75 2e 69 20 3d 20 73 71 6c 69 74 65  ut->u.i = sqlite
2f8e0 33 42 74 72 65 65 4c 61 73 74 50 61 67 65 28 64  3BtreeLastPage(d
2f8f0 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e  b->aDb[pOp->p1].
2f900 70 42 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  pBt);.  break;.}
2f910 0a 23 65 6e 64 69 66 0a 0a 0a 23 69 66 6e 64 65  .#endif...#ifnde
2f920 66 20 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  f  SQLITE_OMIT_P
2f930 41 47 45 52 5f 50 52 41 47 4d 41 53 0a 2f 2a 20  AGER_PRAGMAS./* 
2f940 4f 70 63 6f 64 65 3a 20 4d 61 78 50 67 63 6e 74  Opcode: MaxPgcnt
2f950 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
2f960 0a 2a 2a 20 54 72 79 20 74 6f 20 73 65 74 20 74  .** Try to set t
2f970 68 65 20 6d 61 78 69 6d 75 6d 20 70 61 67 65 20  he maximum page 
2f980 63 6f 75 6e 74 20 66 6f 72 20 64 61 74 61 62 61  count for databa
2f990 73 65 20 50 31 20 74 6f 20 74 68 65 20 76 61 6c  se P1 to the val
2f9a0 75 65 20 69 6e 20 50 33 2e 0a 2a 2a 20 44 6f 20  ue in P3..** Do 
2f9b0 6e 6f 74 20 6c 65 74 20 74 68 65 20 6d 61 78 69  not let the maxi
2f9c0 6d 75 6d 20 70 61 67 65 20 63 6f 75 6e 74 20 66  mum page count f
2f9d0 61 6c 6c 20 62 65 6c 6f 77 20 74 68 65 20 63 75  all below the cu
2f9e0 72 72 65 6e 74 20 70 61 67 65 20 63 6f 75 6e 74  rrent page count
2f9f0 20 61 6e 64 0a 2a 2a 20 64 6f 20 6e 6f 74 20 63   and.** do not c
2fa00 68 61 6e 67 65 20 74 68 65 20 6d 61 78 69 6d 75  hange the maximu
2fa10 6d 20 70 61 67 65 20 63 6f 75 6e 74 20 76 61 6c  m page count val
2fa20 75 65 20 69 66 20 50 33 3d 3d 30 2e 0a 2a 2a 0a  ue if P3==0..**.
2fa30 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 6d 61 78  ** Store the max
2fa40 69 6d 75 6d 20 70 61 67 65 20 63 6f 75 6e 74 20  imum page count 
2fa50 61 66 74 65 72 20 74 68 65 20 63 68 61 6e 67 65  after the change
2fa60 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e   in register P2.
2fa70 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 61 78 50  .*/.case OP_MaxP
2fa80 67 63 6e 74 3a 20 7b 20 20 20 20 20 20 20 20 20  gcnt: {         
2fa90 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65     /* out2-prere
2faa0 6c 65 61 73 65 20 2a 2f 0a 20 20 75 6e 73 69 67  lease */.  unsig
2fab0 6e 65 64 20 69 6e 74 20 6e 65 77 4d 61 78 3b 0a  ned int newMax;.
2fac0 20 20 42 74 72 65 65 20 2a 70 42 74 3b 0a 0a 20    Btree *pBt;.. 
2fad0 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70   pBt = db->aDb[p
2fae0 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20 20 6e  Op->p1].pBt;.  n
2faf0 65 77 4d 61 78 20 3d 20 30 3b 0a 20 20 69 66 28  ewMax = 0;.  if(
2fb00 20 70 4f 70 2d 3e 70 33 20 29 7b 0a 20 20 20 20   pOp->p3 ){.    
2fb10 6e 65 77 4d 61 78 20 3d 20 73 71 6c 69 74 65 33  newMax = sqlite3
2fb20 42 74 72 65 65 4c 61 73 74 50 61 67 65 28 70 42  BtreeLastPage(pB
2fb30 74 29 3b 0a 20 20 20 20 69 66 28 20 6e 65 77 4d  t);.    if( newM
2fb40 61 78 20 3c 20 28 75 6e 73 69 67 6e 65 64 29 70  ax < (unsigned)p
2fb50 4f 70 2d 3e 70 33 20 29 20 6e 65 77 4d 61 78 20  Op->p3 ) newMax 
2fb60 3d 20 28 75 6e 73 69 67 6e 65 64 29 70 4f 70 2d  = (unsigned)pOp-
2fb70 3e 70 33 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d  >p3;.  }.  pOut-
2fb80 3e 75 2e 69 20 3d 20 73 71 6c 69 74 65 33 42 74  >u.i = sqlite3Bt
2fb90 72 65 65 4d 61 78 50 61 67 65 43 6f 75 6e 74 28  reeMaxPageCount(
2fba0 70 42 74 2c 20 6e 65 77 4d 61 78 29 3b 0a 20 20  pBt, newMax);.  
2fbb0 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a  break;.}.#endif.
2fbc0 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
2fbd0 5f 4f 4d 49 54 5f 54 52 41 43 45 0a 2f 2a 20 4f  _OMIT_TRACE./* O
2fbe0 70 63 6f 64 65 3a 20 54 72 61 63 65 20 2a 20 2a  pcode: Trace * *
2fbf0 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 49 66   * P4 *.**.** If
2fc00 20 74 72 61 63 69 6e 67 20 69 73 20 65 6e 61 62   tracing is enab
2fc10 6c 65 64 20 28 62 79 20 74 68 65 20 73 71 6c 69  led (by the sqli
2fc20 74 65 33 5f 74 72 61 63 65 28 29 29 20 69 6e 74  te3_trace()) int
2fc30 65 72 66 61 63 65 2c 20 74 68 65 6e 0a 2a 2a 20  erface, then.** 
2fc40 74 68 65 20 55 54 46 2d 38 20 73 74 72 69 6e 67  the UTF-8 string
2fc50 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 50 34   contained in P4
2fc60 20 69 73 20 65 6d 69 74 74 65 64 20 6f 6e 20 74   is emitted on t
2fc70 68 65 20 74 72 61 63 65 20 63 61 6c 6c 62 61 63  he trace callbac
2fc80 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 72  k..*/.case OP_Tr
2fc90 61 63 65 3a 20 7b 0a 20 20 63 68 61 72 20 2a 7a  ace: {.  char *z
2fca0 54 72 61 63 65 3b 0a 20 20 63 68 61 72 20 2a 7a  Trace;.  char *z
2fcb0 3b 0a 0a 20 20 69 66 28 20 64 62 2d 3e 78 54 72  ;..  if( db->xTr
2fcc0 61 63 65 20 26 26 20 28 7a 54 72 61 63 65 20 3d  ace && (zTrace =
2fcd0 20 28 70 4f 70 2d 3e 70 34 2e 7a 20 3f 20 70 4f   (pOp->p4.z ? pO
2fce0 70 2d 3e 70 34 2e 7a 20 3a 20 70 2d 3e 7a 53 71  p->p4.z : p->zSq
2fcf0 6c 29 29 21 3d 30 20 29 7b 0a 20 20 20 20 7a 20  l))!=0 ){.    z 
2fd00 3d 20 73 71 6c 69 74 65 33 56 64 62 65 45 78 70  = sqlite3VdbeExp
2fd10 61 6e 64 53 71 6c 28 70 2c 20 7a 54 72 61 63 65  andSql(p, zTrace
2fd20 29 3b 0a 20 20 20 20 64 62 2d 3e 78 54 72 61 63  );.    db->xTrac
2fd30 65 28 64 62 2d 3e 70 54 72 61 63 65 41 72 67 2c  e(db->pTraceArg,
2fd40 20 7a 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33   z);.    sqlite3
2fd50 44 62 46 72 65 65 28 64 62 2c 20 7a 29 3b 0a 20  DbFree(db, z);. 
2fd60 20 7d 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45   }.#ifdef SQLITE
2fd70 5f 44 45 42 55 47 0a 20 20 69 66 28 20 28 64 62  _DEBUG.  if( (db
2fd80 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45  ->flags & SQLITE
2fd90 5f 53 71 6c 54 72 61 63 65 29 21 3d 30 0a 20 20  _SqlTrace)!=0.  
2fda0 20 26 26 20 28 7a 54 72 61 63 65 20 3d 20 28 70   && (zTrace = (p
2fdb0 4f 70 2d 3e 70 34 2e 7a 20 3f 20 70 4f 70 2d 3e  Op->p4.z ? pOp->
2fdc0 70 34 2e 7a 20 3a 20 70 2d 3e 7a 53 71 6c 29 29  p4.z : p->zSql))
2fdd0 21 3d 30 0a 20 20 29 7b 0a 20 20 20 20 73 71 6c  !=0.  ){.    sql
2fde0 69 74 65 33 44 65 62 75 67 50 72 69 6e 74 66 28  ite3DebugPrintf(
2fdf0 22 53 51 4c 2d 74 72 61 63 65 3a 20 25 73 5c 6e  "SQL-trace: %s\n
2fe00 22 2c 20 7a 54 72 61 63 65 29 3b 0a 20 20 7d 0a  ", zTrace);.  }.
2fe10 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
2fe20 5f 44 45 42 55 47 20 2a 2f 0a 20 20 62 72 65 61  _DEBUG */.  brea
2fe30 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a  k;.}.#endif.../*
2fe40 20 4f 70 63 6f 64 65 3a 20 4e 6f 6f 70 20 2a 20   Opcode: Noop * 
2fe50 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 6f  * * * *.**.** Do
2fe60 20 6e 6f 74 68 69 6e 67 2e 20 20 54 68 69 73 20   nothing.  This 
2fe70 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 6f  instruction is o
2fe80 66 74 65 6e 20 75 73 65 66 75 6c 20 61 73 20 61  ften useful as a
2fe90 20 6a 75 6d 70 0a 2a 2a 20 64 65 73 74 69 6e 61   jump.** destina
2fea0 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 0a 2a 2a 20 54  tion..*/./*.** T
2feb0 68 65 20 6d 61 67 69 63 20 45 78 70 6c 61 69 6e  he magic Explain
2fec0 20 6f 70 63 6f 64 65 20 61 72 65 20 6f 6e 6c 79   opcode are only
2fed0 20 69 6e 73 65 72 74 65 64 20 77 68 65 6e 20 65   inserted when e
2fee0 78 70 6c 61 69 6e 3d 3d 32 20 28 77 68 69 63 68  xplain==2 (which
2fef0 0a 2a 2a 20 69 73 20 74 6f 20 73 61 79 20 77 68  .** is to say wh
2ff00 65 6e 20 74 68 65 20 45 58 50 4c 41 49 4e 20 51  en the EXPLAIN Q
2ff10 55 45 52 59 20 50 4c 41 4e 20 73 79 6e 74 61 78  UERY PLAN syntax
2ff20 20 69 73 20 75 73 65 64 2e 29 0a 2a 2a 20 54 68   is used.).** Th
2ff30 69 73 20 6f 70 63 6f 64 65 20 72 65 63 6f 72 64  is opcode record
2ff40 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 72  s information fr
2ff50 6f 6d 20 74 68 65 20 6f 70 74 69 6d 69 7a 65 72  om the optimizer
2ff60 2e 20 20 49 74 20 69 73 20 74 68 65 0a 2a 2a 20  .  It is the.** 
2ff70 74 68 65 20 73 61 6d 65 20 61 73 20 61 20 6e 6f  the same as a no
2ff80 2d 6f 70 2e 20 20 54 68 69 73 20 6f 70 63 6f 64  -op.  This opcod
2ff90 65 73 6e 65 76 65 72 20 61 70 70 65 61 72 73 20  esnever appears 
2ffa0 69 6e 20 61 20 72 65 61 6c 20 56 4d 20 70 72 6f  in a real VM pro
2ffb0 67 72 61 6d 2e 0a 2a 2f 0a 64 65 66 61 75 6c 74  gram..*/.default
2ffc0 3a 20 7b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  : {          /* 
2ffd0 54 68 69 73 20 69 73 20 72 65 61 6c 6c 79 20 4f  This is really O
2ffe0 50 5f 4e 6f 6f 70 20 61 6e 64 20 4f 50 5f 45 78  P_Noop and OP_Ex
2fff0 70 6c 61 69 6e 20 2a 2f 0a 20 20 61 73 73 65 72  plain */.  asser
30000 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  t( pOp->opcode==
30010 4f 50 5f 4e 6f 6f 70 20 7c 7c 20 70 4f 70 2d 3e  OP_Noop || pOp->
30020 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45 78 70 6c 61  opcode==OP_Expla
30030 69 6e 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  in );.  break;.}
30040 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ../*************
30050 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
30060 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
30070 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
30080 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
30090 0a 2a 2a 20 54 68 65 20 63 61 73 65 73 20 6f 66  .** The cases of
300a0 20 74 68 65 20 73 77 69 74 63 68 20 73 74 61 74   the switch stat
300b0 65 6d 65 6e 74 20 61 62 6f 76 65 20 74 68 69 73  ement above this
300c0 20 6c 69 6e 65 20 73 68 6f 75 6c 64 20 61 6c 6c   line should all
300d0 20 62 65 20 69 6e 64 65 6e 74 65 64 0a 2a 2a 20   be indented.** 
300e0 62 79 20 36 20 73 70 61 63 65 73 2e 20 20 42 75  by 6 spaces.  Bu
300f0 74 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20  t the left-most 
30100 36 20 73 70 61 63 65 73 20 68 61 76 65 20 62 65  6 spaces have be
30110 65 6e 20 72 65 6d 6f 76 65 64 20 74 6f 20 69 6d  en removed to im
30120 70 72 6f 76 65 20 74 68 65 0a 2a 2a 20 72 65 61  prove the.** rea
30130 64 61 62 69 6c 69 74 79 2e 20 20 46 72 6f 6d 20  dability.  From 
30140 74 68 69 73 20 70 6f 69 6e 74 20 6f 6e 20 64 6f  this point on do
30150 77 6e 2c 20 74 68 65 20 6e 6f 72 6d 61 6c 20 69  wn, the normal i
30160 6e 64 65 6e 74 61 74 69 6f 6e 20 72 75 6c 65 73  ndentation rules
30170 20 61 72 65 0a 2a 2a 20 72 65 73 74 6f 72 65 64   are.** restored
30180 2e 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ..**************
30190 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
301a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
301b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
301c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f  ***************/
301d0 0a 20 20 20 20 7d 0a 0a 23 69 66 64 65 66 20 56  .    }..#ifdef V
301e0 44 42 45 5f 50 52 4f 46 49 4c 45 0a 20 20 20 20  DBE_PROFILE.    
301f0 7b 0a 20 20 20 20 20 20 75 36 34 20 65 6c 61 70  {.      u64 elap
30200 73 65 64 20 3d 20 73 71 6c 69 74 65 33 48 77 74  sed = sqlite3Hwt
30210 69 6d 65 28 29 20 2d 20 73 74 61 72 74 3b 0a 20  ime() - start;. 
30220 20 20 20 20 20 70 4f 70 2d 3e 63 79 63 6c 65 73       pOp->cycles
30230 20 2b 3d 20 65 6c 61 70 73 65 64 3b 0a 20 20 20   += elapsed;.   
30240 20 20 20 70 4f 70 2d 3e 63 6e 74 2b 2b 3b 0a 23     pOp->cnt++;.#
30250 69 66 20 30 0a 20 20 20 20 20 20 20 20 66 70 72  if 0.        fpr
30260 69 6e 74 66 28 73 74 64 6f 75 74 2c 20 22 25 31  intf(stdout, "%1
30270 30 6c 6c 75 20 22 2c 20 65 6c 61 70 73 65 64 29  0llu ", elapsed)
30280 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
30290 33 56 64 62 65 50 72 69 6e 74 4f 70 28 73 74 64  3VdbePrintOp(std
302a0 6f 75 74 2c 20 6f 72 69 67 50 63 2c 20 26 61 4f  out, origPc, &aO
302b0 70 5b 6f 72 69 67 50 63 5d 29 3b 0a 23 65 6e 64  p[origPc]);.#end
302c0 69 66 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a  if.    }.#endif.
302d0 0a 20 20 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c  .    /* The foll
302e0 6f 77 69 6e 67 20 63 6f 64 65 20 61 64 64 73 20  owing code adds 
302f0 6e 6f 74 68 69 6e 67 20 74 6f 20 74 68 65 20 61  nothing to the a
30300 63 74 75 61 6c 20 66 75 6e 63 74 69 6f 6e 61 6c  ctual functional
30310 69 74 79 0a 20 20 20 20 2a 2a 20 6f 66 20 74 68  ity.    ** of th
30320 65 20 70 72 6f 67 72 61 6d 2e 20 20 49 74 20 69  e program.  It i
30330 73 20 6f 6e 6c 79 20 68 65 72 65 20 66 6f 72 20  s only here for 
30340 74 65 73 74 69 6e 67 20 61 6e 64 20 64 65 62 75  testing and debu
30350 67 67 69 6e 67 2e 0a 20 20 20 20 2a 2a 20 4f 6e  gging..    ** On
30360 20 74 68 65 20 6f 74 68 65 72 20 68 61 6e 64 2c   the other hand,
30370 20 69 74 20 64 6f 65 73 20 62 75 72 6e 20 43 50   it does burn CP
30380 55 20 63 79 63 6c 65 73 20 65 76 65 72 79 20 74  U cycles every t
30390 69 6d 65 20 74 68 72 6f 75 67 68 0a 20 20 20 20  ime through.    
303a0 2a 2a 20 74 68 65 20 65 76 61 6c 75 61 74 6f 72  ** the evaluator
303b0 20 6c 6f 6f 70 2e 20 20 53 6f 20 77 65 20 63 61   loop.  So we ca
303c0 6e 20 6c 65 61 76 65 20 69 74 20 6f 75 74 20 77  n leave it out w
303d0 68 65 6e 20 4e 44 45 42 55 47 20 69 73 20 64 65  hen NDEBUG is de
303e0 66 69 6e 65 64 2e 0a 20 20 20 20 2a 2f 0a 23 69  fined..    */.#i
303f0 66 6e 64 65 66 20 4e 44 45 42 55 47 0a 20 20 20  fndef NDEBUG.   
30400 20 61 73 73 65 72 74 28 20 70 63 3e 3d 2d 31 20   assert( pc>=-1 
30410 26 26 20 70 63 3c 70 2d 3e 6e 4f 70 20 29 3b 0a  && pc<p->nOp );.
30420 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
30430 45 42 55 47 0a 20 20 20 20 69 66 28 20 70 2d 3e  EBUG.    if( p->
30440 74 72 61 63 65 20 29 7b 0a 20 20 20 20 20 20 69  trace ){.      i
30450 66 28 20 72 63 21 3d 30 20 29 20 66 70 72 69 6e  f( rc!=0 ) fprin
30460 74 66 28 70 2d 3e 74 72 61 63 65 2c 22 72 63 3d  tf(p->trace,"rc=
30470 25 64 5c 6e 22 2c 72 63 29 3b 0a 20 20 20 20 20  %d\n",rc);.     
30480 20 69 66 28 20 70 4f 70 2d 3e 6f 70 66 6c 61 67   if( pOp->opflag
30490 73 20 26 20 28 4f 50 46 4c 47 5f 4f 55 54 32 5f  s & (OPFLG_OUT2_
304a0 50 52 45 52 45 4c 45 41 53 45 7c 4f 50 46 4c 47  PRERELEASE|OPFLG
304b0 5f 4f 55 54 32 29 20 29 7b 0a 20 20 20 20 20 20  _OUT2) ){.      
304c0 20 20 72 65 67 69 73 74 65 72 54 72 61 63 65 28    registerTrace(
304d0 70 2d 3e 74 72 61 63 65 2c 20 70 4f 70 2d 3e 70  p->trace, pOp->p
304e0 32 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32  2, &aMem[pOp->p2
304f0 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ]);.      }.    
30500 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 66 6c 61    if( pOp->opfla
30510 67 73 20 26 20 4f 50 46 4c 47 5f 4f 55 54 33 20  gs & OPFLG_OUT3 
30520 29 7b 0a 20 20 20 20 20 20 20 20 72 65 67 69 73  ){.        regis
30530 74 65 72 54 72 61 63 65 28 70 2d 3e 74 72 61 63  terTrace(p->trac
30540 65 2c 20 70 4f 70 2d 3e 70 33 2c 20 26 61 4d 65  e, pOp->p3, &aMe
30550 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20 20 20  m[pOp->p3]);.   
30560 20 20 20 7d 0a 20 20 20 20 7d 0a 23 65 6e 64 69     }.    }.#endi
30570 66 20 20 2f 2a 20 53 51 4c 49 54 45 5f 44 45 42  f  /* SQLITE_DEB
30580 55 47 20 2a 2f 0a 23 65 6e 64 69 66 20 20 2f 2a  UG */.#endif  /*
30590 20 4e 44 45 42 55 47 20 2a 2f 0a 20 20 7d 20 20   NDEBUG */.  }  
305a0 2f 2a 20 54 68 65 20 65 6e 64 20 6f 66 20 74 68  /* The end of th
305b0 65 20 66 6f 72 28 3b 3b 29 20 6c 6f 6f 70 20 74  e for(;;) loop t
305c0 68 65 20 6c 6f 6f 70 73 20 74 68 72 6f 75 67 68  he loops through
305d0 20 6f 70 63 6f 64 65 73 20 2a 2f 0a 0a 20 20 2f   opcodes */..  /
305e0 2a 20 49 66 20 77 65 20 72 65 61 63 68 20 74 68  * If we reach th
305f0 69 73 20 70 6f 69 6e 74 2c 20 69 74 20 6d 65 61  is point, it mea
30600 6e 73 20 74 68 61 74 20 65 78 65 63 75 74 69 6f  ns that executio
30610 6e 20 69 73 20 66 69 6e 69 73 68 65 64 20 77 69  n is finished wi
30620 74 68 0a 20 20 2a 2a 20 61 6e 20 65 72 72 6f 72  th.  ** an error
30630 20 6f 66 20 73 6f 6d 65 20 6b 69 6e 64 2e 0a 20   of some kind.. 
30640 20 2a 2f 0a 76 64 62 65 5f 65 72 72 6f 72 5f 68   */.vdbe_error_h
30650 61 6c 74 3a 0a 20 20 61 73 73 65 72 74 28 20 72  alt:.  assert( r
30660 63 20 29 3b 0a 20 20 70 2d 3e 72 63 20 3d 20 72  c );.  p->rc = r
30670 63 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 73  c;.  testcase( s
30680 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66  qlite3GlobalConf
30690 69 67 2e 78 4c 6f 67 21 3d 30 20 29 3b 0a 20 20  ig.xLog!=0 );.  
306a0 73 71 6c 69 74 65 33 5f 6c 6f 67 28 72 63 2c 20  sqlite3_log(rc, 
306b0 22 73 74 61 74 65 6d 65 6e 74 20 61 62 6f 72 74  "statement abort
306c0 73 20 61 74 20 25 64 3a 20 5b 25 73 5d 20 25 73  s at %d: [%s] %s
306d0 22 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20  ", .            
306e0 20 20 20 20 20 20 20 70 63 2c 20 70 2d 3e 7a 53         pc, p->zS
306f0 71 6c 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b  ql, p->zErrMsg);
30700 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 48 61  .  sqlite3VdbeHa
30710 6c 74 28 70 29 3b 0a 20 20 69 66 28 20 72 63 3d  lt(p);.  if( rc=
30720 3d 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f  =SQLITE_IOERR_NO
30730 4d 45 4d 20 29 20 64 62 2d 3e 6d 61 6c 6c 6f 63  MEM ) db->malloc
30740 46 61 69 6c 65 64 20 3d 20 31 3b 0a 20 20 72 63  Failed = 1;.  rc
30750 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b   = SQLITE_ERROR;
30760 0a 20 20 69 66 28 20 72 65 73 65 74 53 63 68 65  .  if( resetSche
30770 6d 61 4f 6e 46 61 75 6c 74 3e 30 20 29 7b 0a 20  maOnFault>0 ){. 
30780 20 20 20 73 71 6c 69 74 65 33 52 65 73 65 74 49     sqlite3ResetI
30790 6e 74 65 72 6e 61 6c 53 63 68 65 6d 61 28 64 62  nternalSchema(db
307a0 2c 20 72 65 73 65 74 53 63 68 65 6d 61 4f 6e 46  , resetSchemaOnF
307b0 61 75 6c 74 2d 31 29 3b 0a 20 20 7d 0a 0a 20 20  ault-1);.  }..  
307c0 2f 2a 20 54 68 69 73 20 69 73 20 74 68 65 20 6f  /* This is the o
307d0 6e 6c 79 20 77 61 79 20 6f 75 74 20 6f 66 20 74  nly way out of t
307e0 68 69 73 20 70 72 6f 63 65 64 75 72 65 2e 20 20  his procedure.  
307f0 57 65 20 68 61 76 65 20 74 6f 0a 20 20 2a 2a 20  We have to.  ** 
30800 72 65 6c 65 61 73 65 20 74 68 65 20 6d 75 74 65  release the mute
30810 78 65 73 20 6f 6e 20 62 74 72 65 65 73 20 74 68  xes on btrees th
30820 61 74 20 77 65 72 65 20 61 63 71 75 69 72 65 64  at were acquired
30830 20 61 74 20 74 68 65 0a 20 20 2a 2a 20 74 6f 70   at the.  ** top
30840 2e 20 2a 2f 0a 76 64 62 65 5f 72 65 74 75 72 6e  . */.vdbe_return
30850 3a 0a 20 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69  :.  db->lastRowi
30860 64 20 3d 20 6c 61 73 74 52 6f 77 69 64 3b 0a 20  d = lastRowid;. 
30870 20 73 71 6c 69 74 65 33 56 64 62 65 4c 65 61 76   sqlite3VdbeLeav
30880 65 28 70 29 3b 0a 20 20 72 65 74 75 72 6e 20 72  e(p);.  return r
30890 63 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f  c;..  /* Jump to
308a0 20 68 65 72 65 20 69 66 20 61 20 73 74 72 69 6e   here if a strin
308b0 67 20 6f 72 20 62 6c 6f 62 20 6c 61 72 67 65 72  g or blob larger
308c0 20 74 68 61 6e 20 53 51 4c 49 54 45 5f 4d 41 58   than SQLITE_MAX
308d0 5f 4c 45 4e 47 54 48 0a 20 20 2a 2a 20 69 73 20  _LENGTH.  ** is 
308e0 65 6e 63 6f 75 6e 74 65 72 65 64 2e 0a 20 20 2a  encountered..  *
308f0 2f 0a 74 6f 6f 5f 62 69 67 3a 0a 20 20 73 71 6c  /.too_big:.  sql
30900 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70  ite3SetString(&p
30910 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22  ->zErrMsg, db, "
30920 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 74  string or blob t
30930 6f 6f 20 62 69 67 22 29 3b 0a 20 20 72 63 20 3d  oo big");.  rc =
30940 20 53 51 4c 49 54 45 5f 54 4f 4f 42 49 47 3b 0a   SQLITE_TOOBIG;.
30950 20 20 67 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f    goto vdbe_erro
30960 72 5f 68 61 6c 74 3b 0a 0a 20 20 2f 2a 20 4a 75  r_halt;..  /* Ju
30970 6d 70 20 74 6f 20 68 65 72 65 20 69 66 20 61 20  mp to here if a 
30980 6d 61 6c 6c 6f 63 28 29 20 66 61 69 6c 73 2e 0a  malloc() fails..
30990 20 20 2a 2f 0a 6e 6f 5f 6d 65 6d 3a 0a 20 20 64    */.no_mem:.  d
309a0 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20  b->mallocFailed 
309b0 3d 20 31 3b 0a 20 20 73 71 6c 69 74 65 33 53 65  = 1;.  sqlite3Se
309c0 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72  tString(&p->zErr
309d0 4d 73 67 2c 20 64 62 2c 20 22 6f 75 74 20 6f 66  Msg, db, "out of
309e0 20 6d 65 6d 6f 72 79 22 29 3b 0a 20 20 72 63 20   memory");.  rc 
309f0 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a  = SQLITE_NOMEM;.
30a00 20 20 67 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f    goto vdbe_erro
30a10 72 5f 68 61 6c 74 3b 0a 0a 20 20 2f 2a 20 4a 75  r_halt;..  /* Ju
30a20 6d 70 20 74 6f 20 68 65 72 65 20 66 6f 72 20 61  mp to here for a
30a30 6e 79 20 6f 74 68 65 72 20 6b 69 6e 64 20 6f 66  ny other kind of
30a40 20 66 61 74 61 6c 20 65 72 72 6f 72 2e 20 20 54   fatal error.  T
30a50 68 65 20 22 72 63 22 20 76 61 72 69 61 62 6c 65  he "rc" variable
30a60 0a 20 20 2a 2a 20 73 68 6f 75 6c 64 20 68 6f 6c  .  ** should hol
30a70 64 20 74 68 65 20 65 72 72 6f 72 20 6e 75 6d 62  d the error numb
30a80 65 72 2e 0a 20 20 2a 2f 0a 61 62 6f 72 74 5f 64  er..  */.abort_d
30a90 75 65 5f 74 6f 5f 65 72 72 6f 72 3a 0a 20 20 61  ue_to_error:.  a
30aa0 73 73 65 72 74 28 20 70 2d 3e 7a 45 72 72 4d 73  ssert( p->zErrMs
30ab0 67 3d 3d 30 20 29 3b 0a 20 20 69 66 28 20 64 62  g==0 );.  if( db
30ac0 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29  ->mallocFailed )
30ad0 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d   rc = SQLITE_NOM
30ae0 45 4d 3b 0a 20 20 69 66 28 20 72 63 21 3d 53 51  EM;.  if( rc!=SQ
30af0 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d  LITE_IOERR_NOMEM
30b00 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 53   ){.    sqlite3S
30b10 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72  etString(&p->zEr
30b20 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 22 2c 20  rMsg, db, "%s", 
30b30 73 71 6c 69 74 65 33 45 72 72 53 74 72 28 72 63  sqlite3ErrStr(rc
30b40 29 29 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20 76  ));.  }.  goto v
30b50 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a  dbe_error_halt;.
30b60 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65  .  /* Jump to he
30b70 72 65 20 69 66 20 74 68 65 20 73 71 6c 69 74 65  re if the sqlite
30b80 33 5f 69 6e 74 65 72 72 75 70 74 28 29 20 41 50  3_interrupt() AP
30b90 49 20 73 65 74 73 20 74 68 65 20 69 6e 74 65 72  I sets the inter
30ba0 72 75 70 74 0a 20 20 2a 2a 20 66 6c 61 67 2e 0a  rupt.  ** flag..
30bb0 20 20 2a 2f 0a 61 62 6f 72 74 5f 64 75 65 5f 74    */.abort_due_t
30bc0 6f 5f 69 6e 74 65 72 72 75 70 74 3a 0a 20 20 61  o_interrupt:.  a
30bd0 73 73 65 72 74 28 20 64 62 2d 3e 75 31 2e 69 73  ssert( db->u1.is
30be0 49 6e 74 65 72 72 75 70 74 65 64 20 29 3b 0a 20  Interrupted );. 
30bf0 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54   rc = SQLITE_INT
30c00 45 52 52 55 50 54 3b 0a 20 20 70 2d 3e 72 63 20  ERRUPT;.  p->rc 
30c10 3d 20 72 63 3b 0a 20 20 73 71 6c 69 74 65 33 53  = rc;.  sqlite3S
30c20 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72  etString(&p->zEr
30c30 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 22 2c 20  rMsg, db, "%s", 
30c40 73 71 6c 69 74 65 33 45 72 72 53 74 72 28 72 63  sqlite3ErrStr(rc
30c50 29 29 3b 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f  ));.  goto vdbe_
30c60 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 7d 0a        error_halt;.}.