/ Hex Artifact Content
Login

Artifact 00f017d904614e0076d09e40668884a7c61e6899:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f  ******.** The co
0180: 64 65 20 69 6e 20 74 68 69 73 20 66 69 6c 65 20  de in this file 
0190: 69 6d 70 6c 65 6d 65 6e 74 73 20 65 78 65 63 75  implements execu
01a0: 74 69 6f 6e 20 6d 65 74 68 6f 64 20 6f 66 20 74  tion method of t
01b0: 68 65 20 0a 2a 2a 20 56 69 72 74 75 61 6c 20 44  he .** Virtual D
01c0: 61 74 61 62 61 73 65 20 45 6e 67 69 6e 65 20 28  atabase Engine (
01d0: 56 44 42 45 29 2e 20 20 41 20 73 65 70 61 72 61  VDBE).  A separa
01e0: 74 65 20 66 69 6c 65 20 28 22 76 64 62 65 61 75  te file ("vdbeau
01f0: 78 2e 63 22 29 0a 2a 2a 20 68 61 6e 64 6c 65 73  x.c").** handles
0200: 20 68 6f 75 73 65 6b 65 65 70 69 6e 67 20 64 65   housekeeping de
0210: 74 61 69 6c 73 20 73 75 63 68 20 61 73 20 63 72  tails such as cr
0220: 65 61 74 69 6e 67 20 61 6e 64 20 64 65 6c 65 74  eating and delet
0230: 69 6e 67 0a 2a 2a 20 56 44 42 45 20 69 6e 73 74  ing.** VDBE inst
0240: 61 6e 63 65 73 2e 20 20 54 68 69 73 20 66 69 6c  ances.  This fil
0250: 65 20 69 73 20 73 6f 6c 65 6c 79 20 69 6e 74 65  e is solely inte
0260: 72 65 73 74 65 64 20 69 6e 20 65 78 65 63 75 74  rested in execut
0270: 69 6e 67 0a 2a 2a 20 74 68 65 20 56 44 42 45 20  ing.** the VDBE 
0280: 70 72 6f 67 72 61 6d 2e 0a 2a 2a 0a 2a 2a 20 49  program..**.** I
0290: 6e 20 74 68 65 20 65 78 74 65 72 6e 61 6c 20 69  n the external i
02a0: 6e 74 65 72 66 61 63 65 2c 20 61 6e 20 22 73 71  nterface, an "sq
02b0: 6c 69 74 65 33 5f 73 74 6d 74 2a 22 20 69 73 20  lite3_stmt*" is 
02c0: 61 6e 20 6f 70 61 71 75 65 20 70 6f 69 6e 74 65  an opaque pointe
02d0: 72 0a 2a 2a 20 74 6f 20 61 20 56 44 42 45 2e 0a  r.** to a VDBE..
02e0: 2a 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 20 70 61  **.** The SQL pa
02f0: 72 73 65 72 20 67 65 6e 65 72 61 74 65 73 20 61  rser generates a
0300: 20 70 72 6f 67 72 61 6d 20 77 68 69 63 68 20 69   program which i
0310: 73 20 74 68 65 6e 20 65 78 65 63 75 74 65 64 20  s then executed 
0320: 62 79 0a 2a 2a 20 74 68 65 20 56 44 42 45 20 74  by.** the VDBE t
0330: 6f 20 64 6f 20 74 68 65 20 77 6f 72 6b 20 6f 66  o do the work of
0340: 20 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65   the SQL stateme
0350: 6e 74 2e 20 20 56 44 42 45 20 70 72 6f 67 72 61  nt.  VDBE progra
0360: 6d 73 20 61 72 65 20 0a 2a 2a 20 73 69 6d 69 6c  ms are .** simil
0370: 61 72 20 69 6e 20 66 6f 72 6d 20 74 6f 20 61 73  ar in form to as
0380: 73 65 6d 62 6c 79 20 6c 61 6e 67 75 61 67 65 2e  sembly language.
0390: 20 20 54 68 65 20 70 72 6f 67 72 61 6d 20 63 6f    The program co
03a0: 6e 73 69 73 74 73 20 6f 66 0a 2a 2a 20 61 20 6c  nsists of.** a l
03b0: 69 6e 65 61 72 20 73 65 71 75 65 6e 63 65 20 6f  inear sequence o
03c0: 66 20 6f 70 65 72 61 74 69 6f 6e 73 2e 20 20 45  f operations.  E
03d0: 61 63 68 20 6f 70 65 72 61 74 69 6f 6e 20 68 61  ach operation ha
03e0: 73 20 61 6e 20 6f 70 63 6f 64 65 20 0a 2a 2a 20  s an opcode .** 
03f0: 61 6e 64 20 35 20 6f 70 65 72 61 6e 64 73 2e 20  and 5 operands. 
0400: 20 4f 70 65 72 61 6e 64 73 20 50 31 2c 20 50 32   Operands P1, P2
0410: 2c 20 61 6e 64 20 50 33 20 61 72 65 20 69 6e 74  , and P3 are int
0420: 65 67 65 72 73 2e 20 20 4f 70 65 72 61 6e 64 20  egers.  Operand 
0430: 50 34 20 0a 2a 2a 20 69 73 20 61 20 6e 75 6c 6c  P4 .** is a null
0440: 2d 74 65 72 6d 69 6e 61 74 65 64 20 73 74 72 69  -terminated stri
0450: 6e 67 2e 20 20 4f 70 65 72 61 6e 64 20 50 35 20  ng.  Operand P5 
0460: 69 73 20 61 6e 20 75 6e 73 69 67 6e 65 64 20 63  is an unsigned c
0470: 68 61 72 61 63 74 65 72 2e 0a 2a 2a 20 46 65 77  haracter..** Few
0480: 20 6f 70 63 6f 64 65 73 20 75 73 65 20 61 6c 6c   opcodes use all
0490: 20 35 20 6f 70 65 72 61 6e 64 73 2e 0a 2a 2a 0a   5 operands..**.
04a0: 2a 2a 20 43 6f 6d 70 75 74 61 74 69 6f 6e 20 72  ** Computation r
04b0: 65 73 75 6c 74 73 20 61 72 65 20 73 74 6f 72 65  esults are store
04c0: 64 20 6f 6e 20 61 20 73 65 74 20 6f 66 20 72 65  d on a set of re
04d0: 67 69 73 74 65 72 73 20 6e 75 6d 62 65 72 65 64  gisters numbered
04e0: 20 62 65 67 69 6e 6e 69 6e 67 0a 2a 2a 20 77 69   beginning.** wi
04f0: 74 68 20 31 20 61 6e 64 20 67 6f 69 6e 67 20 75  th 1 and going u
0500: 70 20 74 6f 20 56 64 62 65 2e 6e 4d 65 6d 2e 20  p to Vdbe.nMem. 
0510: 20 45 61 63 68 20 72 65 67 69 73 74 65 72 20 63   Each register c
0520: 61 6e 20 73 74 6f 72 65 0a 2a 2a 20 65 69 74 68  an store.** eith
0530: 65 72 20 61 6e 20 69 6e 74 65 67 65 72 2c 20 61  er an integer, a
0540: 20 6e 75 6c 6c 2d 74 65 72 6d 69 6e 61 74 65 64   null-terminated
0550: 20 73 74 72 69 6e 67 2c 20 61 20 66 6c 6f 61 74   string, a float
0560: 69 6e 67 20 70 6f 69 6e 74 0a 2a 2a 20 6e 75 6d  ing point.** num
0570: 62 65 72 2c 20 6f 72 20 74 68 65 20 53 51 4c 20  ber, or the SQL 
0580: 22 4e 55 4c 4c 22 20 76 61 6c 75 65 2e 20 20 41  "NULL" value.  A
0590: 6e 20 69 6d 70 6c 69 63 69 74 20 63 6f 6e 76 65  n implicit conve
05a0: 72 73 69 6f 6e 20 66 72 6f 6d 20 6f 6e 65 0a 2a  rsion from one.*
05b0: 2a 20 74 79 70 65 20 74 6f 20 74 68 65 20 6f 74  * type to the ot
05c0: 68 65 72 20 6f 63 63 75 72 73 20 61 73 20 6e 65  her occurs as ne
05d0: 63 65 73 73 61 72 79 2e 0a 2a 2a 20 0a 2a 2a 20  cessary..** .** 
05e0: 4d 6f 73 74 20 6f 66 20 74 68 65 20 63 6f 64 65  Most of the code
05f0: 20 69 6e 20 74 68 69 73 20 66 69 6c 65 20 69 73   in this file is
0600: 20 74 61 6b 65 6e 20 75 70 20 62 79 20 74 68 65   taken up by the
0610: 20 73 71 6c 69 74 65 33 56 64 62 65 45 78 65 63   sqlite3VdbeExec
0620: 28 29 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 20 77  ().** function w
0630: 68 69 63 68 20 64 6f 65 73 20 74 68 65 20 77 6f  hich does the wo
0640: 72 6b 20 6f 66 20 69 6e 74 65 72 70 72 65 74 69  rk of interpreti
0650: 6e 67 20 61 20 56 44 42 45 20 70 72 6f 67 72 61  ng a VDBE progra
0660: 6d 2e 0a 2a 2a 20 42 75 74 20 6f 74 68 65 72 20  m..** But other 
0670: 72 6f 75 74 69 6e 65 73 20 61 72 65 20 61 6c 73  routines are als
0680: 6f 20 70 72 6f 76 69 64 65 64 20 74 6f 20 68 65  o provided to he
0690: 6c 70 20 69 6e 20 62 75 69 6c 64 69 6e 67 20 75  lp in building u
06a0: 70 0a 2a 2a 20 61 20 70 72 6f 67 72 61 6d 20 69  p.** a program i
06b0: 6e 73 74 72 75 63 74 69 6f 6e 20 62 79 20 69 6e  nstruction by in
06c0: 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  struction..**.**
06d0: 20 56 61 72 69 6f 75 73 20 73 63 72 69 70 74 73   Various scripts
06e0: 20 73 63 61 6e 20 74 68 69 73 20 73 6f 75 72 63   scan this sourc
06f0: 65 20 66 69 6c 65 20 69 6e 20 6f 72 64 65 72 20  e file in order 
0700: 74 6f 20 67 65 6e 65 72 61 74 65 20 48 54 4d 4c  to generate HTML
0710: 0a 2a 2a 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  .** documentatio
0720: 6e 2c 20 68 65 61 64 65 72 73 20 66 69 6c 65 73  n, headers files
0730: 2c 20 6f 72 20 6f 74 68 65 72 20 64 65 72 69 76  , or other deriv
0740: 65 64 20 66 69 6c 65 73 2e 20 20 54 68 65 20 66  ed files.  The f
0750: 6f 72 6d 61 74 74 69 6e 67 0a 2a 2a 20 6f 66 20  ormatting.** of 
0760: 74 68 65 20 63 6f 64 65 20 69 6e 20 74 68 69 73  the code in this
0770: 20 66 69 6c 65 20 69 73 2c 20 74 68 65 72 65 66   file is, theref
0780: 6f 72 65 2c 20 69 6d 70 6f 72 74 61 6e 74 2e 20  ore, important. 
0790: 20 53 65 65 20 6f 74 68 65 72 20 63 6f 6d 6d 65   See other comme
07a0: 6e 74 73 0a 2a 2a 20 69 6e 20 74 68 69 73 20 66  nts.** in this f
07b0: 69 6c 65 20 66 6f 72 20 64 65 74 61 69 6c 73 2e  ile for details.
07c0: 20 20 49 66 20 69 6e 20 64 6f 75 62 74 2c 20 64    If in doubt, d
07d0: 6f 20 6e 6f 74 20 64 65 76 69 61 74 65 20 66 72  o not deviate fr
07e0: 6f 6d 20 65 78 69 73 74 69 6e 67 0a 2a 2a 20 63  om existing.** c
07f0: 6f 6d 6d 65 6e 74 69 6e 67 20 61 6e 64 20 69 6e  ommenting and in
0800: 64 65 6e 74 61 74 69 6f 6e 20 70 72 61 63 74 69  dentation practi
0810: 63 65 73 20 77 68 65 6e 20 63 68 61 6e 67 69 6e  ces when changin
0820: 67 20 6f 72 20 61 64 64 69 6e 67 20 63 6f 64 65  g or adding code
0830: 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 73  ..*/.#include "s
0840: 71 6c 69 74 65 49 6e 74 2e 68 22 0a 23 69 6e 63  qliteInt.h".#inc
0850: 6c 75 64 65 20 22 76 64 62 65 49 6e 74 2e 68 22  lude "vdbeInt.h"
0860: 0a 0a 2f 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 74  ../*.** Invoke t
0870: 68 69 73 20 6d 61 63 72 6f 20 6f 6e 20 6d 65 6d  his macro on mem
0880: 6f 72 79 20 63 65 6c 6c 73 20 6a 75 73 74 20 70  ory cells just p
0890: 72 69 6f 72 20 74 6f 20 63 68 61 6e 67 69 6e 67  rior to changing
08a0: 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 6f 66   the.** value of
08b0: 20 74 68 65 20 63 65 6c 6c 2e 20 20 54 68 69 73   the cell.  This
08c0: 20 6d 61 63 72 6f 20 76 65 72 69 66 69 65 73 20   macro verifies 
08d0: 74 68 61 74 20 73 68 61 6c 6c 6f 77 20 63 6f 70  that shallow cop
08e0: 69 65 73 20 61 72 65 0a 2a 2a 20 6e 6f 74 20 6d  ies are.** not m
08f0: 69 73 75 73 65 64 2e 0a 2a 2f 0a 23 69 66 64 65  isused..*/.#ifde
0900: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 23  f SQLITE_DEBUG.#
0910: 20 64 65 66 69 6e 65 20 6d 65 6d 41 62 6f 75 74   define memAbout
0920: 54 6f 43 68 61 6e 67 65 28 50 2c 4d 29 20 73 71  ToChange(P,M) sq
0930: 6c 69 74 65 33 56 64 62 65 4d 65 6d 50 72 65 70  lite3VdbeMemPrep
0940: 61 72 65 54 6f 43 68 61 6e 67 65 28 50 2c 4d 29  areToChange(P,M)
0950: 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
0960: 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
0970: 28 50 2c 4d 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  (P,M).#endif../*
0980: 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
0990: 67 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c  g global variabl
09a0: 65 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64  e is incremented
09b0: 20 65 76 65 72 79 20 74 69 6d 65 20 61 20 63 75   every time a cu
09c0: 72 73 6f 72 0a 2a 2a 20 6d 6f 76 65 73 2c 20 65  rsor.** moves, e
09d0: 69 74 68 65 72 20 62 79 20 74 68 65 20 4f 50 5f  ither by the OP_
09e0: 53 65 65 6b 58 58 2c 20 4f 50 5f 4e 65 78 74 2c  SeekXX, OP_Next,
09f0: 20 6f 72 20 4f 50 5f 50 72 65 76 20 6f 70 63 6f   or OP_Prev opco
0a00: 64 65 73 2e 20 20 54 68 65 20 74 65 73 74 0a 2a  des.  The test.*
0a10: 2a 20 70 72 6f 63 65 64 75 72 65 73 20 75 73 65  * procedures use
0a20: 20 74 68 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f   this informatio
0a30: 6e 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 74  n to make sure t
0a40: 68 61 74 20 69 6e 64 69 63 65 73 20 61 72 65 0a  hat indices are.
0a50: 2a 2a 20 77 6f 72 6b 69 6e 67 20 63 6f 72 72 65  ** working corre
0a60: 63 74 6c 79 2e 20 20 54 68 69 73 20 76 61 72 69  ctly.  This vari
0a70: 61 62 6c 65 20 68 61 73 20 6e 6f 20 66 75 6e 63  able has no func
0a80: 74 69 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20  tion other than 
0a90: 74 6f 0a 2a 2a 20 68 65 6c 70 20 76 65 72 69 66  to.** help verif
0aa0: 79 20 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70  y the correct op
0ab0: 65 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c  eration of the l
0ac0: 69 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65  ibrary..*/.#ifde
0ad0: 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e  f SQLITE_TEST.in
0ae0: 74 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68  t sqlite3_search
0af0: 5f 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64  _count = 0;.#end
0b00: 69 66 0a 0a 2f 2a 0a 2a 2a 20 57 68 65 6e 20 74  if../*.** When t
0b10: 68 69 73 20 67 6c 6f 62 61 6c 20 76 61 72 69 61  his global varia
0b20: 62 6c 65 20 69 73 20 70 6f 73 69 74 69 76 65 2c  ble is positive,
0b30: 20 69 74 20 67 65 74 73 20 64 65 63 72 65 6d 65   it gets decreme
0b40: 6e 74 65 64 20 6f 6e 63 65 20 62 65 66 6f 72 65  nted once before
0b50: 0a 2a 2a 20 65 61 63 68 20 69 6e 73 74 72 75 63  .** each instruc
0b60: 74 69 6f 6e 20 69 6e 20 74 68 65 20 56 44 42 45  tion in the VDBE
0b70: 2e 20 20 57 68 65 6e 20 72 65 61 63 68 65 73 20  .  When reaches 
0b80: 7a 65 72 6f 2c 20 74 68 65 20 75 31 2e 69 73 49  zero, the u1.isI
0b90: 6e 74 65 72 72 75 70 74 65 64 0a 2a 2a 20 66 69  nterrupted.** fi
0ba0: 65 6c 64 20 6f 66 20 74 68 65 20 73 71 6c 69 74  eld of the sqlit
0bb0: 65 33 20 73 74 72 75 63 74 75 72 65 20 69 73 20  e3 structure is 
0bc0: 73 65 74 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  set in order to 
0bd0: 73 69 6d 75 6c 61 74 65 20 61 6e 64 20 69 6e 74  simulate and int
0be0: 65 72 72 75 70 74 2e 0a 2a 2a 0a 2a 2a 20 54 68  errupt..**.** Th
0bf0: 69 73 20 66 61 63 69 6c 69 74 79 20 69 73 20 75  is facility is u
0c00: 73 65 64 20 66 6f 72 20 74 65 73 74 69 6e 67 20  sed for testing 
0c10: 70 75 72 70 6f 73 65 73 20 6f 6e 6c 79 2e 20 20  purposes only.  
0c20: 49 74 20 64 6f 65 73 20 6e 6f 74 20 66 75 6e 63  It does not func
0c30: 74 69 6f 6e 0a 2a 2a 20 69 6e 20 61 6e 20 6f 72  tion.** in an or
0c40: 64 69 6e 61 72 79 20 62 75 69 6c 64 2e 0a 2a 2f  dinary build..*/
0c50: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54  .#ifdef SQLITE_T
0c60: 45 53 54 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f  EST.int sqlite3_
0c70: 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74 20  interrupt_count 
0c80: 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  = 0;.#endif../*.
0c90: 2a 2a 20 54 68 65 20 6e 65 78 74 20 67 6c 6f 62  ** The next glob
0ca0: 61 6c 20 76 61 72 69 61 62 6c 65 20 69 73 20 69  al variable is i
0cb0: 6e 63 72 65 6d 65 6e 74 65 64 20 65 61 63 68 20  ncremented each 
0cc0: 74 79 70 65 20 74 68 65 20 4f 50 5f 53 6f 72 74  type the OP_Sort
0cd0: 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 65 78   opcode.** is ex
0ce0: 65 63 75 74 65 64 2e 20 20 54 68 65 20 74 65 73  ecuted.  The tes
0cf0: 74 20 70 72 6f 63 65 64 75 72 65 73 20 75 73 65  t procedures use
0d00: 20 74 68 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f   this informatio
0d10: 6e 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 74  n to make sure t
0d20: 68 61 74 0a 2a 2a 20 73 6f 72 74 69 6e 67 20 69  hat.** sorting i
0d30: 73 20 6f 63 63 75 72 72 69 6e 67 20 6f 72 20 6e  s occurring or n
0d40: 6f 74 20 6f 63 63 75 72 72 69 6e 67 20 61 74 20  ot occurring at 
0d50: 61 70 70 72 6f 70 72 69 61 74 65 20 74 69 6d 65  appropriate time
0d60: 73 2e 20 20 20 54 68 69 73 20 76 61 72 69 61 62  s.   This variab
0d70: 6c 65 0a 2a 2a 20 68 61 73 20 6e 6f 20 66 75 6e  le.** has no fun
0d80: 63 74 69 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e  ction other than
0d90: 20 74 6f 20 68 65 6c 70 20 76 65 72 69 66 79 20   to help verify 
0da0: 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65 72  the correct oper
0db0: 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20  ation of the.** 
0dc0: 6c 69 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64  library..*/.#ifd
0dd0: 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 69  ef SQLITE_TEST.i
0de0: 6e 74 20 73 71 6c 69 74 65 33 5f 73 6f 72 74 5f  nt sqlite3_sort_
0df0: 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64 69  count = 0;.#endi
0e00: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 65 78  f../*.** The nex
0e10: 74 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c  t global variabl
0e20: 65 20 72 65 63 6f 72 64 73 20 74 68 65 20 73 69  e records the si
0e30: 7a 65 20 6f 66 20 74 68 65 20 6c 61 72 67 65 73  ze of the larges
0e40: 74 20 4d 45 4d 5f 42 6c 6f 62 0a 2a 2a 20 6f 72  t MEM_Blob.** or
0e50: 20 4d 45 4d 5f 53 74 72 20 74 68 61 74 20 68 61   MEM_Str that ha
0e60: 73 20 62 65 65 6e 20 75 73 65 64 20 62 79 20 61  s been used by a
0e70: 20 56 44 42 45 20 6f 70 63 6f 64 65 2e 20 20 54   VDBE opcode.  T
0e80: 68 65 20 74 65 73 74 20 70 72 6f 63 65 64 75 72  he test procedur
0e90: 65 73 0a 2a 2a 20 75 73 65 20 74 68 69 73 20 69  es.** use this i
0ea0: 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 6f 20 6d 61  nformation to ma
0eb0: 6b 65 20 73 75 72 65 20 74 68 61 74 20 74 68 65  ke sure that the
0ec0: 20 7a 65 72 6f 2d 62 6c 6f 62 20 66 75 6e 63 74   zero-blob funct
0ed0: 69 6f 6e 61 6c 69 74 79 0a 2a 2a 20 69 73 20 77  ionality.** is w
0ee0: 6f 72 6b 69 6e 67 20 63 6f 72 72 65 63 74 6c 79  orking correctly
0ef0: 2e 20 20 20 54 68 69 73 20 76 61 72 69 61 62 6c  .   This variabl
0f00: 65 20 68 61 73 20 6e 6f 20 66 75 6e 63 74 69 6f  e has no functio
0f10: 6e 20 6f 74 68 65 72 20 74 68 61 6e 20 74 6f 0a  n other than to.
0f20: 2a 2a 20 68 65 6c 70 20 76 65 72 69 66 79 20 74  ** help verify t
0f30: 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65 72 61  he correct opera
0f40: 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c 69 62 72  tion of the libr
0f50: 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  ary..*/.#ifdef S
0f60: 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74 20 73  QLITE_TEST.int s
0f70: 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62 73  qlite3_max_blobs
0f80: 69 7a 65 20 3d 20 30 3b 0a 73 74 61 74 69 63 20  ize = 0;.static 
0f90: 76 6f 69 64 20 75 70 64 61 74 65 4d 61 78 42 6c  void updateMaxBl
0fa0: 6f 62 73 69 7a 65 28 4d 65 6d 20 2a 70 29 7b 0a  obsize(Mem *p){.
0fb0: 20 20 69 66 28 20 28 70 2d 3e 66 6c 61 67 73 20    if( (p->flags 
0fc0: 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42  & (MEM_Str|MEM_B
0fd0: 6c 6f 62 29 29 21 3d 30 20 26 26 20 70 2d 3e 6e  lob))!=0 && p->n
0fe0: 3e 73 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f  >sqlite3_max_blo
0ff0: 62 73 69 7a 65 20 29 7b 0a 20 20 20 20 73 71 6c  bsize ){.    sql
1000: 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62 73 69 7a  ite3_max_blobsiz
1010: 65 20 3d 20 70 2d 3e 6e 3b 0a 20 20 7d 0a 7d 0a  e = p->n;.  }.}.
1020: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
1030: 65 20 6e 65 78 74 20 67 6c 6f 62 61 6c 20 76 61  e next global va
1040: 72 69 61 62 6c 65 20 69 73 20 69 6e 63 72 65 6d  riable is increm
1050: 65 6e 74 65 64 20 65 61 63 68 20 74 79 70 65 20  ented each type 
1060: 74 68 65 20 4f 50 5f 46 6f 75 6e 64 20 6f 70 63  the OP_Found opc
1070: 6f 64 65 0a 2a 2a 20 69 73 20 65 78 65 63 75 74  ode.** is execut
1080: 65 64 2e 20 54 68 69 73 20 69 73 20 75 73 65 64  ed. This is used
1090: 20 74 6f 20 74 65 73 74 20 77 68 65 74 68 65 72   to test whether
10a0: 20 6f 72 20 6e 6f 74 20 74 68 65 20 66 6f 72 65   or not the fore
10b0: 69 67 6e 20 6b 65 79 0a 2a 2a 20 6f 70 65 72 61  ign key.** opera
10c0: 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 65 64  tion implemented
10d0: 20 75 73 69 6e 67 20 4f 50 5f 46 6b 49 73 5a 65   using OP_FkIsZe
10e0: 72 6f 20 69 73 20 77 6f 72 6b 69 6e 67 2e 20 54  ro is working. T
10f0: 68 69 73 20 76 61 72 69 61 62 6c 65 0a 2a 2a 20  his variable.** 
1100: 68 61 73 20 6e 6f 20 66 75 6e 63 74 69 6f 6e 20  has no function 
1110: 6f 74 68 65 72 20 74 68 61 6e 20 74 6f 20 68 65  other than to he
1120: 6c 70 20 76 65 72 69 66 79 20 74 68 65 20 63 6f  lp verify the co
1130: 72 72 65 63 74 20 6f 70 65 72 61 74 69 6f 6e 20  rrect operation 
1140: 6f 66 20 74 68 65 0a 2a 2a 20 6c 69 62 72 61 72  of the.** librar
1150: 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  y..*/.#ifdef SQL
1160: 49 54 45 5f 54 45 53 54 0a 69 6e 74 20 73 71 6c  ITE_TEST.int sql
1170: 69 74 65 33 5f 66 6f 75 6e 64 5f 63 6f 75 6e 74  ite3_found_count
1180: 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a   = 0;.#endif../*
1190: 0a 2a 2a 20 54 65 73 74 20 61 20 72 65 67 69 73  .** Test a regis
11a0: 74 65 72 20 74 6f 20 73 65 65 20 69 66 20 69 74  ter to see if it
11b0: 20 65 78 63 65 65 64 73 20 74 68 65 20 63 75 72   exceeds the cur
11c0: 72 65 6e 74 20 6d 61 78 69 6d 75 6d 20 62 6c 6f  rent maximum blo
11d0: 62 20 73 69 7a 65 2e 0a 2a 2a 20 49 66 20 69 74  b size..** If it
11e0: 20 64 6f 65 73 2c 20 72 65 63 6f 72 64 20 74 68   does, record th
11f0: 65 20 6e 65 77 20 6d 61 78 69 6d 75 6d 20 62 6c  e new maximum bl
1200: 6f 62 20 73 69 7a 65 2e 0a 2a 2f 0a 23 69 66 20  ob size..*/.#if 
1210: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54  defined(SQLITE_T
1220: 45 53 54 29 20 26 26 20 21 64 65 66 69 6e 65 64  EST) && !defined
1230: 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49  (SQLITE_OMIT_BUI
1240: 4c 54 49 4e 5f 54 45 53 54 29 0a 23 20 64 65 66  LTIN_TEST).# def
1250: 69 6e 65 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  ine UPDATE_MAX_B
1260: 4c 4f 42 53 49 5a 45 28 50 29 20 20 75 70 64 61  LOBSIZE(P)  upda
1270: 74 65 4d 61 78 42 6c 6f 62 73 69 7a 65 28 50 29  teMaxBlobsize(P)
1280: 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
1290: 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53  UPDATE_MAX_BLOBS
12a0: 49 5a 45 28 50 29 0a 23 65 6e 64 69 66 0a 0a 2f  IZE(P).#endif../
12b0: 2a 0a 2a 2a 20 43 6f 6e 76 65 72 74 20 74 68 65  *.** Convert the
12c0: 20 67 69 76 65 6e 20 72 65 67 69 73 74 65 72 20   given register 
12d0: 69 6e 74 6f 20 61 20 73 74 72 69 6e 67 20 69 66  into a string if
12e0: 20 69 74 20 69 73 6e 27 74 20 6f 6e 65 0a 2a 2a   it isn't one.**
12f0: 20 61 6c 72 65 61 64 79 2e 20 52 65 74 75 72 6e   already. Return
1300: 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 61 20 6d   non-zero if a m
1310: 61 6c 6c 6f 63 28 29 20 66 61 69 6c 73 2e 0a 2a  alloc() fails..*
1320: 2f 0a 23 64 65 66 69 6e 65 20 53 74 72 69 6e 67  /.#define String
1330: 69 66 79 28 50 2c 20 65 6e 63 29 20 5c 0a 20 20  ify(P, enc) \.  
1340: 20 69 66 28 28 28 50 29 2d 3e 66 6c 61 67 73 26   if(((P)->flags&
1350: 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f  (MEM_Str|MEM_Blo
1360: 62 29 29 3d 3d 30 20 26 26 20 73 71 6c 69 74 65  b))==0 && sqlite
1370: 33 56 64 62 65 4d 65 6d 53 74 72 69 6e 67 69 66  3VdbeMemStringif
1380: 79 28 50 2c 65 6e 63 29 29 20 5c 0a 20 20 20 20  y(P,enc)) \.    
1390: 20 7b 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 20   { goto no_mem; 
13a0: 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 65 70 68 65  }../*.** An ephe
13b0: 6d 65 72 61 6c 20 73 74 72 69 6e 67 20 76 61 6c  meral string val
13c0: 75 65 20 28 73 69 67 6e 69 66 69 65 64 20 62 79  ue (signified by
13d0: 20 74 68 65 20 4d 45 4d 5f 45 70 68 65 6d 20 66   the MEM_Ephem f
13e0: 6c 61 67 29 20 63 6f 6e 74 61 69 6e 73 0a 2a 2a  lag) contains.**
13f0: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20   a pointer to a 
1400: 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f  dynamically allo
1410: 63 61 74 65 64 20 73 74 72 69 6e 67 20 77 68 65  cated string whe
1420: 72 65 20 73 6f 6d 65 20 6f 74 68 65 72 20 65 6e  re some other en
1430: 74 69 74 79 0a 2a 2a 20 69 73 20 72 65 73 70 6f  tity.** is respo
1440: 6e 73 69 62 6c 65 20 66 6f 72 20 64 65 61 6c 6c  nsible for deall
1450: 6f 63 61 74 69 6e 67 20 74 68 61 74 20 73 74 72  ocating that str
1460: 69 6e 67 2e 20 20 42 65 63 61 75 73 65 20 74 68  ing.  Because th
1470: 65 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 64 6f  e register.** do
1480: 65 73 20 6e 6f 74 20 63 6f 6e 74 72 6f 6c 20 74  es not control t
1490: 68 65 20 73 74 72 69 6e 67 2c 20 69 74 20 6d 69  he string, it mi
14a0: 67 68 74 20 62 65 20 64 65 6c 65 74 65 64 20 77  ght be deleted w
14b0: 69 74 68 6f 75 74 20 74 68 65 20 72 65 67 69 73  ithout the regis
14c0: 74 65 72 0a 2a 2a 20 6b 6e 6f 77 69 6e 67 20 69  ter.** knowing i
14d0: 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 72 6f  t..**.** This ro
14e0: 75 74 69 6e 65 20 63 6f 6e 76 65 72 74 73 20 61  utine converts a
14f0: 6e 20 65 70 68 65 6d 65 72 61 6c 20 73 74 72 69  n ephemeral stri
1500: 6e 67 20 69 6e 74 6f 20 61 20 64 79 6e 61 6d 69  ng into a dynami
1510: 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 0a  cally allocated.
1520: 2a 2a 20 73 74 72 69 6e 67 20 74 68 61 74 20 74  ** string that t
1530: 68 65 20 72 65 67 69 73 74 65 72 20 69 74 73 65  he register itse
1540: 6c 66 20 63 6f 6e 74 72 6f 6c 73 2e 20 20 49 6e  lf controls.  In
1550: 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 69 74   other words, it
1560: 0a 2a 2a 20 63 6f 6e 76 65 72 74 73 20 61 6e 20  .** converts an 
1570: 4d 45 4d 5f 45 70 68 65 6d 20 73 74 72 69 6e 67  MEM_Ephem string
1580: 20 69 6e 74 6f 20 61 6e 20 4d 45 4d 5f 44 79 6e   into an MEM_Dyn
1590: 20 73 74 72 69 6e 67 2e 0a 2a 2f 0a 23 64 65 66   string..*/.#def
15a0: 69 6e 65 20 44 65 65 70 68 65 6d 65 72 61 6c 69  ine Deephemerali
15b0: 7a 65 28 50 29 20 5c 0a 20 20 20 69 66 28 20 28  ze(P) \.   if( (
15c0: 28 50 29 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 45  (P)->flags&MEM_E
15d0: 70 68 65 6d 29 21 3d 30 20 5c 0a 20 20 20 20 20  phem)!=0 \.     
15e0: 20 20 26 26 20 73 71 6c 69 74 65 33 56 64 62 65    && sqlite3Vdbe
15f0: 4d 65 6d 4d 61 6b 65 57 72 69 74 65 61 62 6c 65  MemMakeWriteable
1600: 28 50 29 20 29 7b 20 67 6f 74 6f 20 6e 6f 5f 6d  (P) ){ goto no_m
1610: 65 6d 3b 7d 0a 0a 2f 2a 0a 2a 2a 20 43 61 6c 6c  em;}../*.** Call
1620: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 45   sqlite3VdbeMemE
1630: 78 70 61 6e 64 42 6c 6f 62 28 29 20 6f 6e 20 74  xpandBlob() on t
1640: 68 65 20 73 75 70 70 6c 69 65 64 20 76 61 6c 75  he supplied valu
1650: 65 20 28 74 79 70 65 20 4d 65 6d 2a 29 0a 2a 2a  e (type Mem*).**
1660: 20 50 20 69 66 20 72 65 71 75 69 72 65 64 2e 0a   P if required..
1670: 2a 2f 0a 23 64 65 66 69 6e 65 20 45 78 70 61 6e  */.#define Expan
1680: 64 42 6c 6f 62 28 50 29 20 28 28 28 50 29 2d 3e  dBlob(P) (((P)->
1690: 66 6c 61 67 73 26 4d 45 4d 5f 5a 65 72 6f 29 3f  flags&MEM_Zero)?
16a0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 45 78  sqlite3VdbeMemEx
16b0: 70 61 6e 64 42 6c 6f 62 28 50 29 3a 30 29 0a 0a  pandBlob(P):0)..
16c0: 2f 2a 0a 2a 2a 20 41 72 67 75 6d 65 6e 74 20 70  /*.** Argument p
16d0: 4d 65 6d 20 70 6f 69 6e 74 73 20 61 74 20 61 20  Mem points at a 
16e0: 72 65 67 69 73 74 65 72 20 74 68 61 74 20 77 69  register that wi
16f0: 6c 6c 20 62 65 20 70 61 73 73 65 64 20 74 6f 20  ll be passed to 
1700: 61 0a 2a 2a 20 75 73 65 72 2d 64 65 66 69 6e 65  a.** user-define
1710: 64 20 66 75 6e 63 74 69 6f 6e 20 6f 72 20 72 65  d function or re
1720: 74 75 72 6e 65 64 20 74 6f 20 74 68 65 20 75 73  turned to the us
1730: 65 72 20 61 73 20 74 68 65 20 72 65 73 75 6c 74  er as the result
1740: 20 6f 66 20 61 20 71 75 65 72 79 2e 0a 2a 2a 20   of a query..** 
1750: 54 68 69 73 20 72 6f 75 74 69 6e 65 20 73 65 74  This routine set
1760: 73 20 74 68 65 20 70 4d 65 6d 2d 3e 74 79 70 65  s the pMem->type
1770: 20 76 61 72 69 61 62 6c 65 20 75 73 65 64 20 62   variable used b
1780: 79 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 61  y the sqlite3_va
1790: 6c 75 65 5f 2a 28 29 20 0a 2a 2a 20 72 6f 75 74  lue_*() .** rout
17a0: 69 6e 65 73 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71  ines..*/.void sq
17b0: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74 6f 72  lite3VdbeMemStor
17c0: 65 54 79 70 65 28 4d 65 6d 20 2a 70 4d 65 6d 29  eType(Mem *pMem)
17d0: 7b 0a 20 20 69 6e 74 20 66 6c 61 67 73 20 3d 20  {.  int flags = 
17e0: 70 4d 65 6d 2d 3e 66 6c 61 67 73 3b 0a 20 20 69  pMem->flags;.  i
17f0: 66 28 20 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  f( flags & MEM_N
1800: 75 6c 6c 20 29 7b 0a 20 20 20 20 70 4d 65 6d 2d  ull ){.    pMem-
1810: 3e 74 79 70 65 20 3d 20 53 51 4c 49 54 45 5f 4e  >type = SQLITE_N
1820: 55 4c 4c 3b 0a 20 20 7d 0a 20 20 65 6c 73 65 20  ULL;.  }.  else 
1830: 69 66 28 20 66 6c 61 67 73 20 26 20 4d 45 4d 5f  if( flags & MEM_
1840: 49 6e 74 20 29 7b 0a 20 20 20 20 70 4d 65 6d 2d  Int ){.    pMem-
1850: 3e 74 79 70 65 20 3d 20 53 51 4c 49 54 45 5f 49  >type = SQLITE_I
1860: 4e 54 45 47 45 52 3b 0a 20 20 7d 0a 20 20 65 6c  NTEGER;.  }.  el
1870: 73 65 20 69 66 28 20 66 6c 61 67 73 20 26 20 4d  se if( flags & M
1880: 45 4d 5f 52 65 61 6c 20 29 7b 0a 20 20 20 20 70  EM_Real ){.    p
1890: 4d 65 6d 2d 3e 74 79 70 65 20 3d 20 53 51 4c 49  Mem->type = SQLI
18a0: 54 45 5f 46 4c 4f 41 54 3b 0a 20 20 7d 0a 20 20  TE_FLOAT;.  }.  
18b0: 65 6c 73 65 20 69 66 28 20 66 6c 61 67 73 20 26  else if( flags &
18c0: 20 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20 20   MEM_Str ){.    
18d0: 70 4d 65 6d 2d 3e 74 79 70 65 20 3d 20 53 51 4c  pMem->type = SQL
18e0: 49 54 45 5f 54 45 58 54 3b 0a 20 20 7d 65 6c 73  ITE_TEXT;.  }els
18f0: 65 7b 0a 20 20 20 20 70 4d 65 6d 2d 3e 74 79 70  e{.    pMem->typ
1900: 65 20 3d 20 53 51 4c 49 54 45 5f 42 4c 4f 42 3b  e = SQLITE_BLOB;
1910: 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6c  .  }.}../*.** Al
1920: 6c 6f 63 61 74 65 20 56 64 62 65 43 75 72 73 6f  locate VdbeCurso
1930: 72 20 6e 75 6d 62 65 72 20 69 43 75 72 2e 20 20  r number iCur.  
1940: 52 65 74 75 72 6e 20 61 20 70 6f 69 6e 74 65 72  Return a pointer
1950: 20 74 6f 20 69 74 2e 20 20 52 65 74 75 72 6e 20   to it.  Return 
1960: 4e 55 4c 4c 0a 2a 2a 20 69 66 20 77 65 20 72 75  NULL.** if we ru
1970: 6e 20 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79 2e  n out of memory.
1980: 0a 2a 2f 0a 73 74 61 74 69 63 20 56 64 62 65 43  .*/.static VdbeC
1990: 75 72 73 6f 72 20 2a 61 6c 6c 6f 63 61 74 65 43  ursor *allocateC
19a0: 75 72 73 6f 72 28 0a 20 20 56 64 62 65 20 2a 70  ursor(.  Vdbe *p
19b0: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ,              /
19c0: 2a 20 54 68 65 20 76 69 72 74 75 61 6c 20 6d 61  * The virtual ma
19d0: 63 68 69 6e 65 20 2a 2f 0a 20 20 69 6e 74 20 69  chine */.  int i
19e0: 43 75 72 2c 20 20 20 20 20 20 20 20 20 20 20 20  Cur,            
19f0: 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20 74 68 65   /* Index of the
1a00: 20 6e 65 77 20 56 64 62 65 43 75 72 73 6f 72 20   new VdbeCursor 
1a10: 2a 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 2c  */.  int nField,
1a20: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1a30: 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20 69  mber of fields i
1a40: 6e 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69  n the table or i
1a50: 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 69 44  ndex */.  int iD
1a60: 62 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  b,              
1a70: 2f 2a 20 57 68 65 6e 20 64 61 74 61 62 61 73 65  /* When database
1a80: 20 74 68 65 20 63 75 72 73 6f 72 20 62 65 6c 6f   the cursor belo
1a90: 6e 67 73 20 74 6f 2c 20 6f 72 20 2d 31 20 2a 2f  ngs to, or -1 */
1aa0: 0a 20 20 69 6e 74 20 69 73 42 74 72 65 65 43 75  .  int isBtreeCu
1ab0: 72 73 6f 72 20 20 20 20 20 2f 2a 20 54 72 75 65  rsor     /* True
1ac0: 20 66 6f 72 20 42 2d 54 72 65 65 2e 20 20 46 61   for B-Tree.  Fa
1ad0: 6c 73 65 20 66 6f 72 20 70 73 65 75 64 6f 2d 74  lse for pseudo-t
1ae0: 61 62 6c 65 20 6f 72 20 76 74 61 62 20 2a 2f 0a  able or vtab */.
1af0: 29 7b 0a 20 20 2f 2a 20 46 69 6e 64 20 74 68 65  ){.  /* Find the
1b00: 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74 68 61   memory cell tha
1b10: 74 20 77 69 6c 6c 20 62 65 20 75 73 65 64 20 74  t will be used t
1b20: 6f 20 73 74 6f 72 65 20 74 68 65 20 62 6c 6f 62  o store the blob
1b30: 20 6f 66 20 6d 65 6d 6f 72 79 0a 20 20 2a 2a 20   of memory.  ** 
1b40: 72 65 71 75 69 72 65 64 20 66 6f 72 20 74 68 69  required for thi
1b50: 73 20 56 64 62 65 43 75 72 73 6f 72 20 73 74 72  s VdbeCursor str
1b60: 75 63 74 75 72 65 2e 20 49 74 20 69 73 20 63 6f  ucture. It is co
1b70: 6e 76 65 6e 69 65 6e 74 20 74 6f 20 75 73 65 20  nvenient to use 
1b80: 61 20 0a 20 20 2a 2a 20 76 64 62 65 20 6d 65 6d  a .  ** vdbe mem
1b90: 6f 72 79 20 63 65 6c 6c 20 74 6f 20 6d 61 6e 61  ory cell to mana
1ba0: 67 65 20 74 68 65 20 6d 65 6d 6f 72 79 20 61 6c  ge the memory al
1bb0: 6c 6f 63 61 74 69 6f 6e 20 72 65 71 75 69 72 65  location require
1bc0: 64 20 66 6f 72 20 61 0a 20 20 2a 2a 20 56 64 62  d for a.  ** Vdb
1bd0: 65 43 75 72 73 6f 72 20 73 74 72 75 63 74 75 72  eCursor structur
1be0: 65 20 66 6f 72 20 74 68 65 20 66 6f 6c 6c 6f 77  e for the follow
1bf0: 69 6e 67 20 72 65 61 73 6f 6e 73 3a 0a 20 20 2a  ing reasons:.  *
1c00: 2a 0a 20 20 2a 2a 20 20 20 2a 20 53 6f 6d 65 74  *.  **   * Somet
1c10: 69 6d 65 73 20 63 75 72 73 6f 72 20 6e 75 6d 62  imes cursor numb
1c20: 65 72 73 20 61 72 65 20 75 73 65 64 20 66 6f 72  ers are used for
1c30: 20 61 20 63 6f 75 70 6c 65 20 6f 66 20 64 69 66   a couple of dif
1c40: 66 65 72 65 6e 74 0a 20 20 2a 2a 20 20 20 20 20  ferent.  **     
1c50: 70 75 72 70 6f 73 65 73 20 69 6e 20 61 20 76 64  purposes in a vd
1c60: 62 65 20 70 72 6f 67 72 61 6d 2e 20 54 68 65 20  be program. The 
1c70: 64 69 66 66 65 72 65 6e 74 20 75 73 65 73 20 6d  different uses m
1c80: 69 67 68 74 20 72 65 71 75 69 72 65 0a 20 20 2a  ight require.  *
1c90: 2a 20 20 20 20 20 64 69 66 66 65 72 65 6e 74 20  *     different 
1ca0: 73 69 7a 65 64 20 61 6c 6c 6f 63 61 74 69 6f 6e  sized allocation
1cb0: 73 2e 20 4d 65 6d 6f 72 79 20 63 65 6c 6c 73 20  s. Memory cells 
1cc0: 70 72 6f 76 69 64 65 20 67 72 6f 77 61 62 6c 65  provide growable
1cd0: 0a 20 20 2a 2a 20 20 20 20 20 61 6c 6c 6f 63 61  .  **     alloca
1ce0: 74 69 6f 6e 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a  tions..  **.  **
1cf0: 20 20 20 2a 20 57 68 65 6e 20 75 73 69 6e 67 20     * When using 
1d00: 45 4e 41 42 4c 45 5f 4d 45 4d 4f 52 59 5f 4d 41  ENABLE_MEMORY_MA
1d10: 4e 41 47 45 4d 45 4e 54 2c 20 6d 65 6d 6f 72 79  NAGEMENT, memory
1d20: 20 63 65 6c 6c 20 62 75 66 66 65 72 73 20 63 61   cell buffers ca
1d30: 6e 0a 20 20 2a 2a 20 20 20 20 20 62 65 20 66 72  n.  **     be fr
1d40: 65 65 64 20 6c 61 7a 69 6c 79 20 76 69 61 20 74  eed lazily via t
1d50: 68 65 20 73 71 6c 69 74 65 33 5f 72 65 6c 65 61  he sqlite3_relea
1d60: 73 65 5f 6d 65 6d 6f 72 79 28 29 20 41 50 49 2e  se_memory() API.
1d70: 20 54 68 69 73 0a 20 20 2a 2a 20 20 20 20 20 6d   This.  **     m
1d80: 69 6e 69 6d 69 7a 65 73 20 74 68 65 20 6e 75 6d  inimizes the num
1d90: 62 65 72 20 6f 66 20 6d 61 6c 6c 6f 63 20 63 61  ber of malloc ca
1da0: 6c 6c 73 20 6d 61 64 65 20 62 79 20 74 68 65 20  lls made by the 
1db0: 73 79 73 74 65 6d 2e 0a 20 20 2a 2a 0a 20 20 2a  system..  **.  *
1dc0: 2a 20 4d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 66  * Memory cells f
1dd0: 6f 72 20 63 75 72 73 6f 72 73 20 61 72 65 20 61  or cursors are a
1de0: 6c 6c 6f 63 61 74 65 64 20 61 74 20 74 68 65 20  llocated at the 
1df0: 74 6f 70 20 6f 66 20 74 68 65 20 61 64 64 72 65  top of the addre
1e00: 73 73 0a 20 20 2a 2a 20 73 70 61 63 65 2e 20 4d  ss.  ** space. M
1e10: 65 6d 6f 72 79 20 63 65 6c 6c 20 28 70 2d 3e 6e  emory cell (p->n
1e20: 4d 65 6d 29 20 63 6f 72 72 65 73 70 6f 6e 64 73  Mem) corresponds
1e30: 20 74 6f 20 63 75 72 73 6f 72 20 30 2e 20 53 70   to cursor 0. Sp
1e40: 61 63 65 20 66 6f 72 0a 20 20 2a 2a 20 63 75 72  ace for.  ** cur
1e50: 73 6f 72 20 31 20 69 73 20 6d 61 6e 61 67 65 64  sor 1 is managed
1e60: 20 62 79 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20   by memory cell 
1e70: 28 70 2d 3e 6e 4d 65 6d 2d 31 29 2c 20 65 74 63  (p->nMem-1), etc
1e80: 2e 0a 20 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d  ..  */.  Mem *pM
1e90: 65 6d 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 2d  em = &p->aMem[p-
1ea0: 3e 6e 4d 65 6d 2d 69 43 75 72 5d 3b 0a 0a 20 20  >nMem-iCur];..  
1eb0: 69 6e 74 20 6e 42 79 74 65 3b 0a 20 20 56 64 62  int nByte;.  Vdb
1ec0: 65 43 75 72 73 6f 72 20 2a 70 43 78 20 3d 20 30  eCursor *pCx = 0
1ed0: 3b 0a 20 20 6e 42 79 74 65 20 3d 20 0a 20 20 20  ;.  nByte = .   
1ee0: 20 20 20 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66     ROUND8(sizeof
1ef0: 28 56 64 62 65 43 75 72 73 6f 72 29 29 20 2b 20  (VdbeCursor)) + 
1f00: 0a 20 20 20 20 20 20 28 69 73 42 74 72 65 65 43  .      (isBtreeC
1f10: 75 72 73 6f 72 3f 73 71 6c 69 74 65 33 42 74 72  ursor?sqlite3Btr
1f20: 65 65 43 75 72 73 6f 72 53 69 7a 65 28 29 3a 30  eeCursorSize():0
1f30: 29 20 2b 20 0a 20 20 20 20 20 20 32 2a 6e 46 69  ) + .      2*nFi
1f40: 65 6c 64 2a 73 69 7a 65 6f 66 28 75 33 32 29 3b  eld*sizeof(u32);
1f50: 0a 0a 20 20 61 73 73 65 72 74 28 20 69 43 75 72  ..  assert( iCur
1f60: 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
1f70: 20 69 66 28 20 70 2d 3e 61 70 43 73 72 5b 69 43   if( p->apCsr[iC
1f80: 75 72 5d 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  ur] ){.    sqlit
1f90: 65 33 56 64 62 65 46 72 65 65 43 75 72 73 6f 72  e3VdbeFreeCursor
1fa0: 28 70 2c 20 70 2d 3e 61 70 43 73 72 5b 69 43 75  (p, p->apCsr[iCu
1fb0: 72 5d 29 3b 0a 20 20 20 20 70 2d 3e 61 70 43 73  r]);.    p->apCs
1fc0: 72 5b 69 43 75 72 5d 20 3d 20 30 3b 0a 20 20 7d  r[iCur] = 0;.  }
1fd0: 0a 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b  .  if( SQLITE_OK
1fe0: 3d 3d 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  ==sqlite3VdbeMem
1ff0: 47 72 6f 77 28 70 4d 65 6d 2c 20 6e 42 79 74 65  Grow(pMem, nByte
2000: 2c 20 30 29 20 29 7b 0a 20 20 20 20 70 2d 3e 61  , 0) ){.    p->a
2010: 70 43 73 72 5b 69 43 75 72 5d 20 3d 20 70 43 78  pCsr[iCur] = pCx
2020: 20 3d 20 28 56 64 62 65 43 75 72 73 6f 72 2a 29   = (VdbeCursor*)
2030: 70 4d 65 6d 2d 3e 7a 3b 0a 20 20 20 20 6d 65 6d  pMem->z;.    mem
2040: 73 65 74 28 70 43 78 2c 20 30 2c 20 73 69 7a 65  set(pCx, 0, size
2050: 6f 66 28 56 64 62 65 43 75 72 73 6f 72 29 29 3b  of(VdbeCursor));
2060: 0a 20 20 20 20 70 43 78 2d 3e 69 44 62 20 3d 20  .    pCx->iDb = 
2070: 69 44 62 3b 0a 20 20 20 20 70 43 78 2d 3e 6e 46  iDb;.    pCx->nF
2080: 69 65 6c 64 20 3d 20 6e 46 69 65 6c 64 3b 0a 20  ield = nField;. 
2090: 20 20 20 69 66 28 20 6e 46 69 65 6c 64 20 29 7b     if( nField ){
20a0: 0a 20 20 20 20 20 20 70 43 78 2d 3e 61 54 79 70  .      pCx->aTyp
20b0: 65 20 3d 20 28 75 33 32 20 2a 29 26 70 4d 65 6d  e = (u32 *)&pMem
20c0: 2d 3e 7a 5b 52 4f 55 4e 44 38 28 73 69 7a 65 6f  ->z[ROUND8(sizeo
20d0: 66 28 56 64 62 65 43 75 72 73 6f 72 29 29 5d 3b  f(VdbeCursor))];
20e0: 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 69  .    }.    if( i
20f0: 73 42 74 72 65 65 43 75 72 73 6f 72 20 29 7b 0a  sBtreeCursor ){.
2100: 20 20 20 20 20 20 70 43 78 2d 3e 70 43 75 72 73        pCx->pCurs
2110: 6f 72 20 3d 20 28 42 74 43 75 72 73 6f 72 2a 29  or = (BtCursor*)
2120: 0a 20 20 20 20 20 20 20 20 20 20 26 70 4d 65 6d  .          &pMem
2130: 2d 3e 7a 5b 52 4f 55 4e 44 38 28 73 69 7a 65 6f  ->z[ROUND8(sizeo
2140: 66 28 56 64 62 65 43 75 72 73 6f 72 29 29 2b 32  f(VdbeCursor))+2
2150: 2a 6e 46 69 65 6c 64 2a 73 69 7a 65 6f 66 28 75  *nField*sizeof(u
2160: 33 32 29 5d 3b 0a 20 20 20 20 20 20 73 71 6c 69  32)];.      sqli
2170: 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 5a 65  te3BtreeCursorZe
2180: 72 6f 28 70 43 78 2d 3e 70 43 75 72 73 6f 72 29  ro(pCx->pCursor)
2190: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65  ;.    }.  }.  re
21a0: 74 75 72 6e 20 70 43 78 3b 0a 7d 0a 0a 2f 2a 0a  turn pCx;.}../*.
21b0: 2a 2a 20 54 72 79 20 74 6f 20 63 6f 6e 76 65 72  ** Try to conver
21c0: 74 20 61 20 76 61 6c 75 65 20 69 6e 74 6f 20 61  t a value into a
21d0: 20 6e 75 6d 65 72 69 63 20 72 65 70 72 65 73 65   numeric represe
21e0: 6e 74 61 74 69 6f 6e 20 69 66 20 77 65 20 63 61  ntation if we ca
21f0: 6e 0a 2a 2a 20 64 6f 20 73 6f 20 77 69 74 68 6f  n.** do so witho
2200: 75 74 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72  ut loss of infor
2210: 6d 61 74 69 6f 6e 2e 20 20 49 6e 20 6f 74 68 65  mation.  In othe
2220: 72 20 77 6f 72 64 73 2c 20 69 66 20 74 68 65 20  r words, if the 
2230: 73 74 72 69 6e 67 0a 2a 2a 20 6c 6f 6f 6b 73 20  string.** looks 
2240: 6c 69 6b 65 20 61 20 6e 75 6d 62 65 72 2c 20 63  like a number, c
2250: 6f 6e 76 65 72 74 20 69 74 20 69 6e 74 6f 20 61  onvert it into a
2260: 20 6e 75 6d 62 65 72 2e 20 20 49 66 20 69 74 20   number.  If it 
2270: 64 6f 65 73 20 6e 6f 74 0a 2a 2a 20 6c 6f 6f 6b  does not.** look
2280: 20 6c 69 6b 65 20 61 20 6e 75 6d 62 65 72 2c 20   like a number, 
2290: 6c 65 61 76 65 20 69 74 20 61 6c 6f 6e 65 2e 0a  leave it alone..
22a0: 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 61  */.static void a
22b0: 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e  pplyNumericAffin
22c0: 69 74 79 28 4d 65 6d 20 2a 70 52 65 63 29 7b 0a  ity(Mem *pRec){.
22d0: 20 20 69 66 28 20 28 70 52 65 63 2d 3e 66 6c 61    if( (pRec->fla
22e0: 67 73 20 26 20 28 4d 45 4d 5f 52 65 61 6c 7c 4d  gs & (MEM_Real|M
22f0: 45 4d 5f 49 6e 74 29 29 3d 3d 30 20 29 7b 0a 20  EM_Int))==0 ){. 
2300: 20 20 20 69 6e 74 20 72 65 61 6c 6e 75 6d 3b 0a     int realnum;.
2310: 20 20 20 20 75 38 20 65 6e 63 20 3d 20 70 52 65      u8 enc = pRe
2320: 63 2d 3e 65 6e 63 3b 0a 20 20 20 20 73 71 6c 69  c->enc;.    sqli
2330: 74 65 33 56 64 62 65 4d 65 6d 4e 75 6c 54 65 72  te3VdbeMemNulTer
2340: 6d 69 6e 61 74 65 28 70 52 65 63 29 3b 0a 20 20  minate(pRec);.  
2350: 20 20 69 66 28 20 28 70 52 65 63 2d 3e 66 6c 61    if( (pRec->fla
2360: 67 73 26 4d 45 4d 5f 53 74 72 29 20 26 26 20 73  gs&MEM_Str) && s
2370: 71 6c 69 74 65 33 49 73 4e 75 6d 62 65 72 28 70  qlite3IsNumber(p
2380: 52 65 63 2d 3e 7a 2c 20 26 72 65 61 6c 6e 75 6d  Rec->z, &realnum
2390: 2c 20 65 6e 63 29 20 29 7b 0a 20 20 20 20 20 20  , enc) ){.      
23a0: 69 36 34 20 76 61 6c 75 65 3b 0a 20 20 20 20 20  i64 value;.     
23b0: 20 63 68 61 72 20 2a 7a 55 74 66 38 20 3d 20 70   char *zUtf8 = p
23c0: 52 65 63 2d 3e 7a 3b 0a 23 69 66 6e 64 65 66 20  Rec->z;.#ifndef 
23d0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31  SQLITE_OMIT_UTF1
23e0: 36 0a 20 20 20 20 20 20 69 66 28 20 65 6e 63 21  6.      if( enc!
23f0: 3d 53 51 4c 49 54 45 5f 55 54 46 38 20 29 7b 0a  =SQLITE_UTF8 ){.
2400: 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
2410: 70 52 65 63 2d 3e 64 62 20 29 3b 0a 20 20 20 20  pRec->db );.    
2420: 20 20 20 20 7a 55 74 66 38 20 3d 20 73 71 6c 69      zUtf8 = sqli
2430: 74 65 33 55 74 66 31 36 74 6f 38 28 70 52 65 63  te3Utf16to8(pRec
2440: 2d 3e 64 62 2c 20 70 52 65 63 2d 3e 7a 2c 20 70  ->db, pRec->z, p
2450: 52 65 63 2d 3e 6e 2c 20 65 6e 63 29 3b 0a 20 20  Rec->n, enc);.  
2460: 20 20 20 20 20 20 69 66 28 20 21 7a 55 74 66 38        if( !zUtf8
2470: 20 29 20 72 65 74 75 72 6e 3b 0a 20 20 20 20 20   ) return;.     
2480: 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 20 20   }.#endif.      
2490: 69 66 28 20 21 72 65 61 6c 6e 75 6d 20 26 26 20  if( !realnum && 
24a0: 73 71 6c 69 74 65 33 41 74 6f 69 36 34 28 7a 55  sqlite3Atoi64(zU
24b0: 74 66 38 2c 20 26 76 61 6c 75 65 29 20 29 7b 0a  tf8, &value) ){.
24c0: 20 20 20 20 20 20 20 20 70 52 65 63 2d 3e 75 2e          pRec->u.
24d0: 69 20 3d 20 76 61 6c 75 65 3b 0a 20 20 20 20 20  i = value;.     
24e0: 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61     MemSetTypeFla
24f0: 67 28 70 52 65 63 2c 20 4d 45 4d 5f 49 6e 74 29  g(pRec, MEM_Int)
2500: 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
2510: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 41 74         sqlite3At
2520: 6f 46 28 7a 55 74 66 38 2c 20 26 70 52 65 63 2d  oF(zUtf8, &pRec-
2530: 3e 72 29 3b 0a 20 20 20 20 20 20 20 20 4d 65 6d  >r);.        Mem
2540: 53 65 74 54 79 70 65 46 6c 61 67 28 70 52 65 63  SetTypeFlag(pRec
2550: 2c 20 4d 45 4d 5f 52 65 61 6c 29 3b 0a 20 20 20  , MEM_Real);.   
2560: 20 20 20 7d 0a 23 69 66 6e 64 65 66 20 53 51 4c     }.#ifndef SQL
2570: 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20  ITE_OMIT_UTF16. 
2580: 20 20 20 20 20 69 66 28 20 65 6e 63 21 3d 53 51       if( enc!=SQ
2590: 4c 49 54 45 5f 55 54 46 38 20 29 7b 0a 20 20 20  LITE_UTF8 ){.   
25a0: 20 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72       sqlite3DbFr
25b0: 65 65 28 70 52 65 63 2d 3e 64 62 2c 20 7a 55 74  ee(pRec->db, zUt
25c0: 66 38 29 3b 0a 20 20 20 20 20 20 7d 0a 23 65 6e  f8);.      }.#en
25d0: 64 69 66 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a  dif.    }.  }.}.
25e0: 0a 2f 2a 0a 2a 2a 20 50 72 6f 63 65 73 73 69 6e  ./*.** Processin
25f0: 67 20 69 73 20 64 65 74 65 72 6d 69 6e 65 20 62  g is determine b
2600: 79 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 70  y the affinity p
2610: 61 72 61 6d 65 74 65 72 3a 0a 2a 2a 0a 2a 2a 20  arameter:.**.** 
2620: 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47  SQLITE_AFF_INTEG
2630: 45 52 3a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46  ER:.** SQLITE_AF
2640: 46 5f 52 45 41 4c 3a 0a 2a 2a 20 53 51 4c 49 54  F_REAL:.** SQLIT
2650: 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 3a 0a 2a  E_AFF_NUMERIC:.*
2660: 2a 20 20 20 20 54 72 79 20 74 6f 20 63 6f 6e 76  *    Try to conv
2670: 65 72 74 20 70 52 65 63 20 74 6f 20 61 6e 20 69  ert pRec to an i
2680: 6e 74 65 67 65 72 20 72 65 70 72 65 73 65 6e 74  nteger represent
2690: 61 74 69 6f 6e 20 6f 72 20 61 20 0a 2a 2a 20 20  ation or a .**  
26a0: 20 20 66 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e 74    floating-point
26b0: 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   representation 
26c0: 69 66 20 61 6e 20 69 6e 74 65 67 65 72 20 72 65  if an integer re
26d0: 70 72 65 73 65 6e 74 61 74 69 6f 6e 0a 2a 2a 20  presentation.** 
26e0: 20 20 20 69 73 20 6e 6f 74 20 70 6f 73 73 69 62     is not possib
26f0: 6c 65 2e 20 20 4e 6f 74 65 20 74 68 61 74 20 74  le.  Note that t
2700: 68 65 20 69 6e 74 65 67 65 72 20 72 65 70 72 65  he integer repre
2710: 73 65 6e 74 61 74 69 6f 6e 20 69 73 0a 2a 2a 20  sentation is.** 
2720: 20 20 20 61 6c 77 61 79 73 20 70 72 65 66 65 72     always prefer
2730: 72 65 64 2c 20 65 76 65 6e 20 69 66 20 74 68 65  red, even if the
2740: 20 61 66 66 69 6e 69 74 79 20 69 73 20 52 45 41   affinity is REA
2750: 4c 2c 20 62 65 63 61 75 73 65 0a 2a 2a 20 20 20  L, because.**   
2760: 20 61 6e 20 69 6e 74 65 67 65 72 20 72 65 70 72   an integer repr
2770: 65 73 65 6e 74 61 74 69 6f 6e 20 69 73 20 6d 6f  esentation is mo
2780: 72 65 20 73 70 61 63 65 20 65 66 66 69 63 69 65  re space efficie
2790: 6e 74 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2a 0a 2a  nt on disk..**.*
27a0: 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58  * SQLITE_AFF_TEX
27b0: 54 3a 0a 2a 2a 20 20 20 20 43 6f 6e 76 65 72 74  T:.**    Convert
27c0: 20 70 52 65 63 20 74 6f 20 61 20 74 65 78 74 20   pRec to a text 
27d0: 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e 0a  representation..
27e0: 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46  **.** SQLITE_AFF
27f0: 5f 4e 4f 4e 45 3a 0a 2a 2a 20 20 20 20 4e 6f 2d  _NONE:.**    No-
2800: 6f 70 2e 20 20 70 52 65 63 20 69 73 20 75 6e 63  op.  pRec is unc
2810: 68 61 6e 67 65 64 2e 0a 2a 2f 0a 73 74 61 74 69  hanged..*/.stati
2820: 63 20 76 6f 69 64 20 61 70 70 6c 79 41 66 66 69  c void applyAffi
2830: 6e 69 74 79 28 0a 20 20 4d 65 6d 20 2a 70 52 65  nity(.  Mem *pRe
2840: 63 2c 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  c,          /* T
2850: 68 65 20 76 61 6c 75 65 20 74 6f 20 61 70 70 6c  he value to appl
2860: 79 20 61 66 66 69 6e 69 74 79 20 74 6f 20 2a 2f  y affinity to */
2870: 0a 20 20 63 68 61 72 20 61 66 66 69 6e 69 74 79  .  char affinity
2880: 2c 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61 66  ,      /* The af
2890: 66 69 6e 69 74 79 20 74 6f 20 62 65 20 61 70 70  finity to be app
28a0: 6c 69 65 64 20 2a 2f 0a 20 20 75 38 20 65 6e 63  lied */.  u8 enc
28b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
28c0: 20 55 73 65 20 74 68 69 73 20 74 65 78 74 20 65   Use this text e
28d0: 6e 63 6f 64 69 6e 67 20 2a 2f 0a 29 7b 0a 20 20  ncoding */.){.  
28e0: 69 66 28 20 61 66 66 69 6e 69 74 79 3d 3d 53 51  if( affinity==SQ
28f0: 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 20 29 7b  LITE_AFF_TEXT ){
2900: 0a 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 61 74 74  .    /* Only att
2910: 65 6d 70 74 20 74 68 65 20 63 6f 6e 76 65 72 73  empt the convers
2920: 69 6f 6e 20 74 6f 20 54 45 58 54 20 69 66 20 74  ion to TEXT if t
2930: 68 65 72 65 20 69 73 20 61 6e 20 69 6e 74 65 67  here is an integ
2940: 65 72 20 6f 72 20 72 65 61 6c 0a 20 20 20 20 2a  er or real.    *
2950: 2a 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  * representation
2960: 20 28 62 6c 6f 62 20 61 6e 64 20 4e 55 4c 4c 20   (blob and NULL 
2970: 64 6f 20 6e 6f 74 20 67 65 74 20 63 6f 6e 76 65  do not get conve
2980: 72 74 65 64 29 20 62 75 74 20 6e 6f 20 73 74 72  rted) but no str
2990: 69 6e 67 0a 20 20 20 20 2a 2a 20 72 65 70 72 65  ing.    ** repre
29a0: 73 65 6e 74 61 74 69 6f 6e 2e 0a 20 20 20 20 2a  sentation..    *
29b0: 2f 0a 20 20 20 20 69 66 28 20 30 3d 3d 28 70 52  /.    if( 0==(pR
29c0: 65 63 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 53 74  ec->flags&MEM_St
29d0: 72 29 20 26 26 20 28 70 52 65 63 2d 3e 66 6c 61  r) && (pRec->fla
29e0: 67 73 26 28 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d  gs&(MEM_Real|MEM
29f0: 5f 49 6e 74 29 29 20 29 7b 0a 20 20 20 20 20 20  _Int)) ){.      
2a00: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74  sqlite3VdbeMemSt
2a10: 72 69 6e 67 69 66 79 28 70 52 65 63 2c 20 65 6e  ringify(pRec, en
2a20: 63 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 52  c);.    }.    pR
2a30: 65 63 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 28 4d  ec->flags &= ~(M
2a40: 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 49 6e 74 29  EM_Real|MEM_Int)
2a50: 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 61 66  ;.  }else if( af
2a60: 66 69 6e 69 74 79 21 3d 53 51 4c 49 54 45 5f 41  finity!=SQLITE_A
2a70: 46 46 5f 4e 4f 4e 45 20 29 7b 0a 20 20 20 20 61  FF_NONE ){.    a
2a80: 73 73 65 72 74 28 20 61 66 66 69 6e 69 74 79 3d  ssert( affinity=
2a90: 3d 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45  =SQLITE_AFF_INTE
2aa0: 47 45 52 20 7c 7c 20 61 66 66 69 6e 69 74 79 3d  GER || affinity=
2ab0: 3d 53 51 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c  =SQLITE_AFF_REAL
2ac0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 7c 7c  .             ||
2ad0: 20 61 66 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54   affinity==SQLIT
2ae0: 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 20 29 3b  E_AFF_NUMERIC );
2af0: 0a 20 20 20 20 61 70 70 6c 79 4e 75 6d 65 72 69  .    applyNumeri
2b00: 63 41 66 66 69 6e 69 74 79 28 70 52 65 63 29 3b  cAffinity(pRec);
2b10: 0a 20 20 20 20 69 66 28 20 70 52 65 63 2d 3e 66  .    if( pRec->f
2b20: 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 20  lags & MEM_Real 
2b30: 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
2b40: 56 64 62 65 49 6e 74 65 67 65 72 41 66 66 69 6e  VdbeIntegerAffin
2b50: 69 74 79 28 70 52 65 63 29 3b 0a 20 20 20 20 7d  ity(pRec);.    }
2b60: 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 72  .  }.}../*.** Tr
2b70: 79 20 74 6f 20 63 6f 6e 76 65 72 74 20 74 68 65  y to convert the
2b80: 20 74 79 70 65 20 6f 66 20 61 20 66 75 6e 63 74   type of a funct
2b90: 69 6f 6e 20 61 72 67 75 6d 65 6e 74 20 6f 72 20  ion argument or 
2ba0: 61 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 0a  a result column.
2bb0: 2a 2a 20 69 6e 74 6f 20 61 20 6e 75 6d 65 72 69  ** into a numeri
2bc0: 63 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  c representation
2bd0: 2e 20 20 55 73 65 20 65 69 74 68 65 72 20 49 4e  .  Use either IN
2be0: 54 45 47 45 52 20 6f 72 20 52 45 41 4c 20 77 68  TEGER or REAL wh
2bf0: 69 63 68 65 76 65 72 0a 2a 2a 20 69 73 20 61 70  ichever.** is ap
2c00: 70 72 6f 70 72 69 61 74 65 2e 20 20 42 75 74 20  propriate.  But 
2c10: 6f 6e 6c 79 20 64 6f 20 74 68 65 20 63 6f 6e 76  only do the conv
2c20: 65 72 73 69 6f 6e 20 69 66 20 69 74 20 69 73 20  ersion if it is 
2c30: 70 6f 73 73 69 62 6c 65 20 77 69 74 68 6f 75 74  possible without
2c40: 0a 2a 2a 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f  .** loss of info
2c50: 72 6d 61 74 69 6f 6e 20 61 6e 64 20 72 65 74 75  rmation and retu
2c60: 72 6e 20 74 68 65 20 72 65 76 69 73 65 64 20 74  rn the revised t
2c70: 79 70 65 20 6f 66 20 74 68 65 20 61 72 67 75 6d  ype of the argum
2c80: 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  ent..**.** This 
2c90: 69 73 20 61 6e 20 45 58 50 45 52 49 4d 45 4e 54  is an EXPERIMENT
2ca0: 41 4c 20 61 70 69 20 61 6e 64 20 69 73 20 73 75  AL api and is su
2cb0: 62 6a 65 63 74 20 74 6f 20 63 68 61 6e 67 65 20  bject to change 
2cc0: 6f 72 20 72 65 6d 6f 76 61 6c 2e 0a 2a 2f 0a 69  or removal..*/.i
2cd0: 6e 74 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  nt sqlite3_value
2ce0: 5f 6e 75 6d 65 72 69 63 5f 74 79 70 65 28 73 71  _numeric_type(sq
2cf0: 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 56 61  lite3_value *pVa
2d00: 6c 29 7b 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 20  l){.  Mem *pMem 
2d10: 3d 20 28 4d 65 6d 2a 29 70 56 61 6c 3b 0a 20 20  = (Mem*)pVal;.  
2d20: 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69  applyNumericAffi
2d30: 6e 69 74 79 28 70 4d 65 6d 29 3b 0a 20 20 73 71  nity(pMem);.  sq
2d40: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74 6f 72  lite3VdbeMemStor
2d50: 65 54 79 70 65 28 70 4d 65 6d 29 3b 0a 20 20 72  eType(pMem);.  r
2d60: 65 74 75 72 6e 20 70 4d 65 6d 2d 3e 74 79 70 65  eturn pMem->type
2d70: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 45 78 70 6f 72  ;.}../*.** Expor
2d80: 74 65 64 20 76 65 72 73 69 6f 6e 20 6f 66 20 61  ted version of a
2d90: 70 70 6c 79 41 66 66 69 6e 69 74 79 28 29 2e 20  pplyAffinity(). 
2da0: 54 68 69 73 20 6f 6e 65 20 77 6f 72 6b 73 20 6f  This one works o
2db0: 6e 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  n sqlite3_value*
2dc0: 2c 20 0a 2a 2a 20 6e 6f 74 20 74 68 65 20 69 6e  , .** not the in
2dd0: 74 65 72 6e 61 6c 20 4d 65 6d 2a 20 74 79 70 65  ternal Mem* type
2de0: 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65  ..*/.void sqlite
2df0: 33 56 61 6c 75 65 41 70 70 6c 79 41 66 66 69 6e  3ValueApplyAffin
2e00: 69 74 79 28 0a 20 20 73 71 6c 69 74 65 33 5f 76  ity(.  sqlite3_v
2e10: 61 6c 75 65 20 2a 70 56 61 6c 2c 20 0a 20 20 75  alue *pVal, .  u
2e20: 38 20 61 66 66 69 6e 69 74 79 2c 20 0a 20 20 75  8 affinity, .  u
2e30: 38 20 65 6e 63 0a 29 7b 0a 20 20 61 70 70 6c 79  8 enc.){.  apply
2e40: 41 66 66 69 6e 69 74 79 28 28 4d 65 6d 20 2a 29  Affinity((Mem *)
2e50: 70 56 61 6c 2c 20 61 66 66 69 6e 69 74 79 2c 20  pVal, affinity, 
2e60: 65 6e 63 29 3b 0a 7d 0a 0a 23 69 66 64 65 66 20  enc);.}..#ifdef 
2e70: 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a  SQLITE_DEBUG./*.
2e80: 2a 2a 20 57 72 69 74 65 20 61 20 6e 69 63 65 20  ** Write a nice 
2e90: 73 74 72 69 6e 67 20 72 65 70 72 65 73 65 6e 74  string represent
2ea0: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 63 6f 6e  ation of the con
2eb0: 74 65 6e 74 73 20 6f 66 20 63 65 6c 6c 20 70 4d  tents of cell pM
2ec0: 65 6d 0a 2a 2a 20 69 6e 74 6f 20 62 75 66 66 65  em.** into buffe
2ed0: 72 20 7a 42 75 66 2c 20 6c 65 6e 67 74 68 20 6e  r zBuf, length n
2ee0: 42 75 66 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c  Buf..*/.void sql
2ef0: 69 74 65 33 56 64 62 65 4d 65 6d 50 72 65 74 74  ite3VdbeMemPrett
2f00: 79 50 72 69 6e 74 28 4d 65 6d 20 2a 70 4d 65 6d  yPrint(Mem *pMem
2f10: 2c 20 63 68 61 72 20 2a 7a 42 75 66 29 7b 0a 20  , char *zBuf){. 
2f20: 20 63 68 61 72 20 2a 7a 43 73 72 20 3d 20 7a 42   char *zCsr = zB
2f30: 75 66 3b 0a 20 20 69 6e 74 20 66 20 3d 20 70 4d  uf;.  int f = pM
2f40: 65 6d 2d 3e 66 6c 61 67 73 3b 0a 0a 20 20 73 74  em->flags;..  st
2f50: 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20  atic const char 
2f60: 2a 63 6f 6e 73 74 20 65 6e 63 6e 61 6d 65 73 5b  *const encnames[
2f70: 5d 20 3d 20 7b 22 28 58 29 22 2c 20 22 28 38 29  ] = {"(X)", "(8)
2f80: 22 2c 20 22 28 31 36 4c 45 29 22 2c 20 22 28 31  ", "(16LE)", "(1
2f90: 36 42 45 29 22 7d 3b 0a 0a 20 20 69 66 28 20 66  6BE)"};..  if( f
2fa0: 26 4d 45 4d 5f 42 6c 6f 62 20 29 7b 0a 20 20 20  &MEM_Blob ){.   
2fb0: 20 69 6e 74 20 69 3b 0a 20 20 20 20 63 68 61 72   int i;.    char
2fc0: 20 63 3b 0a 20 20 20 20 69 66 28 20 66 20 26 20   c;.    if( f & 
2fd0: 4d 45 4d 5f 44 79 6e 20 29 7b 0a 20 20 20 20 20  MEM_Dyn ){.     
2fe0: 20 63 20 3d 20 27 7a 27 3b 0a 20 20 20 20 20 20   c = 'z';.      
2ff0: 61 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45  assert( (f & (ME
3000: 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 45 70 68  M_Static|MEM_Eph
3010: 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d  em))==0 );.    }
3020: 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d  else if( f & MEM
3030: 5f 53 74 61 74 69 63 20 29 7b 0a 20 20 20 20 20  _Static ){.     
3040: 20 63 20 3d 20 27 74 27 3b 0a 20 20 20 20 20 20   c = 't';.      
3050: 61 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45  assert( (f & (ME
3060: 4d 5f 44 79 6e 7c 4d 45 4d 5f 45 70 68 65 6d 29  M_Dyn|MEM_Ephem)
3070: 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73  )==0 );.    }els
3080: 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 45 70  e if( f & MEM_Ep
3090: 68 65 6d 20 29 7b 0a 20 20 20 20 20 20 63 20 3d  hem ){.      c =
30a0: 20 27 65 27 3b 0a 20 20 20 20 20 20 61 73 73 65   'e';.      asse
30b0: 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74  rt( (f & (MEM_St
30c0: 61 74 69 63 7c 4d 45 4d 5f 44 79 6e 29 29 3d 3d  atic|MEM_Dyn))==
30d0: 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  0 );.    }else{.
30e0: 20 20 20 20 20 20 63 20 3d 20 27 73 27 3b 0a 20        c = 's';. 
30f0: 20 20 20 7d 0a 0a 20 20 20 20 73 71 6c 69 74 65     }..    sqlite
3100: 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20  3_snprintf(100, 
3110: 7a 43 73 72 2c 20 22 25 63 22 2c 20 63 29 3b 0a  zCsr, "%c", c);.
3120: 20 20 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69      zCsr += sqli
3130: 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 43 73 72  te3Strlen30(zCsr
3140: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73  );.    sqlite3_s
3150: 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73  nprintf(100, zCs
3160: 72 2c 20 22 25 64 5b 22 2c 20 70 4d 65 6d 2d 3e  r, "%d[", pMem->
3170: 6e 29 3b 0a 20 20 20 20 7a 43 73 72 20 2b 3d 20  n);.    zCsr += 
3180: 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
3190: 7a 43 73 72 29 3b 0a 20 20 20 20 66 6f 72 28 69  zCsr);.    for(i
31a0: 3d 30 3b 20 69 3c 31 36 20 26 26 20 69 3c 70 4d  =0; i<16 && i<pM
31b0: 65 6d 2d 3e 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20  em->n; i++){.   
31c0: 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69     sqlite3_snpri
31d0: 6e 74 66 28 31 30 30 2c 20 7a 43 73 72 2c 20 22  ntf(100, zCsr, "
31e0: 25 30 32 58 22 2c 20 28 28 69 6e 74 29 70 4d 65  %02X", ((int)pMe
31f0: 6d 2d 3e 7a 5b 69 5d 20 26 20 30 78 46 46 29 29  m->z[i] & 0xFF))
3200: 3b 0a 20 20 20 20 20 20 7a 43 73 72 20 2b 3d 20  ;.      zCsr += 
3210: 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
3220: 7a 43 73 72 29 3b 0a 20 20 20 20 7d 0a 20 20 20  zCsr);.    }.   
3230: 20 66 6f 72 28 69 3d 30 3b 20 69 3c 31 36 20 26   for(i=0; i<16 &
3240: 26 20 69 3c 70 4d 65 6d 2d 3e 6e 3b 20 69 2b 2b  & i<pMem->n; i++
3250: 29 7b 0a 20 20 20 20 20 20 63 68 61 72 20 7a 20  ){.      char z 
3260: 3d 20 70 4d 65 6d 2d 3e 7a 5b 69 5d 3b 0a 20 20  = pMem->z[i];.  
3270: 20 20 20 20 69 66 28 20 7a 3c 33 32 20 7c 7c 20      if( z<32 || 
3280: 7a 3e 31 32 36 20 29 20 2a 7a 43 73 72 2b 2b 20  z>126 ) *zCsr++ 
3290: 3d 20 27 2e 27 3b 0a 20 20 20 20 20 20 65 6c 73  = '.';.      els
32a0: 65 20 2a 7a 43 73 72 2b 2b 20 3d 20 7a 3b 0a 20  e *zCsr++ = z;. 
32b0: 20 20 20 7d 0a 0a 20 20 20 20 73 71 6c 69 74 65     }..    sqlite
32c0: 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20  3_snprintf(100, 
32d0: 7a 43 73 72 2c 20 22 5d 25 73 22 2c 20 65 6e 63  zCsr, "]%s", enc
32e0: 6e 61 6d 65 73 5b 70 4d 65 6d 2d 3e 65 6e 63 5d  names[pMem->enc]
32f0: 29 3b 0a 20 20 20 20 7a 43 73 72 20 2b 3d 20 73  );.    zCsr += s
3300: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a  qlite3Strlen30(z
3310: 43 73 72 29 3b 0a 20 20 20 20 69 66 28 20 66 20  Csr);.    if( f 
3320: 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20  & MEM_Zero ){.  
3330: 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72      sqlite3_snpr
3340: 69 6e 74 66 28 31 30 30 2c 20 7a 43 73 72 2c 22  intf(100, zCsr,"
3350: 2b 25 64 7a 22 2c 70 4d 65 6d 2d 3e 75 2e 6e 5a  +%dz",pMem->u.nZ
3360: 65 72 6f 29 3b 0a 20 20 20 20 20 20 7a 43 73 72  ero);.      zCsr
3370: 20 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65   += sqlite3Strle
3380: 6e 33 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 7d  n30(zCsr);.    }
3390: 0a 20 20 20 20 2a 7a 43 73 72 20 3d 20 27 5c 30  .    *zCsr = '\0
33a0: 27 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 66  ';.  }else if( f
33b0: 20 26 20 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20   & MEM_Str ){.  
33c0: 20 20 69 6e 74 20 6a 2c 20 6b 3b 0a 20 20 20 20    int j, k;.    
33d0: 7a 42 75 66 5b 30 5d 20 3d 20 27 20 27 3b 0a 20  zBuf[0] = ' ';. 
33e0: 20 20 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 44     if( f & MEM_D
33f0: 79 6e 20 29 7b 0a 20 20 20 20 20 20 7a 42 75 66  yn ){.      zBuf
3400: 5b 31 5d 20 3d 20 27 7a 27 3b 0a 20 20 20 20 20  [1] = 'z';.     
3410: 20 61 73 73 65 72 74 28 20 28 66 20 26 20 28 4d   assert( (f & (M
3420: 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 45 70  EM_Static|MEM_Ep
3430: 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20  hem))==0 );.    
3440: 7d 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45  }else if( f & ME
3450: 4d 5f 53 74 61 74 69 63 20 29 7b 0a 20 20 20 20  M_Static ){.    
3460: 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27 74 27 3b    zBuf[1] = 't';
3470: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28  .      assert( (
3480: 66 20 26 20 28 4d 45 4d 5f 44 79 6e 7c 4d 45 4d  f & (MEM_Dyn|MEM
3490: 5f 45 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20  _Ephem))==0 );. 
34a0: 20 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26     }else if( f &
34b0: 20 4d 45 4d 5f 45 70 68 65 6d 20 29 7b 0a 20 20   MEM_Ephem ){.  
34c0: 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27 65      zBuf[1] = 'e
34d0: 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ';.      assert(
34e0: 20 28 66 20 26 20 28 4d 45 4d 5f 53 74 61 74 69   (f & (MEM_Stati
34f0: 63 7c 4d 45 4d 5f 44 79 6e 29 29 3d 3d 30 20 29  c|MEM_Dyn))==0 )
3500: 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
3510: 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27 73 27     zBuf[1] = 's'
3520: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6b 20 3d 20  ;.    }.    k = 
3530: 32 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73  2;.    sqlite3_s
3540: 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 26 7a 42  nprintf(100, &zB
3550: 75 66 5b 6b 5d 2c 20 22 25 64 22 2c 20 70 4d 65  uf[k], "%d", pMe
3560: 6d 2d 3e 6e 29 3b 0a 20 20 20 20 6b 20 2b 3d 20  m->n);.    k += 
3570: 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
3580: 26 7a 42 75 66 5b 6b 5d 29 3b 0a 20 20 20 20 7a  &zBuf[k]);.    z
3590: 42 75 66 5b 6b 2b 2b 5d 20 3d 20 27 5b 27 3b 0a  Buf[k++] = '[';.
35a0: 20 20 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c 31      for(j=0; j<1
35b0: 35 20 26 26 20 6a 3c 70 4d 65 6d 2d 3e 6e 3b 20  5 && j<pMem->n; 
35c0: 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 75 38 20 63  j++){.      u8 c
35d0: 20 3d 20 70 4d 65 6d 2d 3e 7a 5b 6a 5d 3b 0a 20   = pMem->z[j];. 
35e0: 20 20 20 20 20 69 66 28 20 63 3e 3d 30 78 32 30       if( c>=0x20
35f0: 20 26 26 20 63 3c 30 78 37 66 20 29 7b 0a 20 20   && c<0x7f ){.  
3600: 20 20 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20        zBuf[k++] 
3610: 3d 20 63 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  = c;.      }else
3620: 7b 0a 20 20 20 20 20 20 20 20 7a 42 75 66 5b 6b  {.        zBuf[k
3630: 2b 2b 5d 20 3d 20 27 2e 27 3b 0a 20 20 20 20 20  ++] = '.';.     
3640: 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 7a 42 75   }.    }.    zBu
3650: 66 5b 6b 2b 2b 5d 20 3d 20 27 5d 27 3b 0a 20 20  f[k++] = ']';.  
3660: 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e    sqlite3_snprin
3670: 74 66 28 31 30 30 2c 26 7a 42 75 66 5b 6b 5d 2c  tf(100,&zBuf[k],
3680: 20 65 6e 63 6e 61 6d 65 73 5b 70 4d 65 6d 2d 3e   encnames[pMem->
3690: 65 6e 63 5d 29 3b 0a 20 20 20 20 6b 20 2b 3d 20  enc]);.    k += 
36a0: 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
36b0: 26 7a 42 75 66 5b 6b 5d 29 3b 0a 20 20 20 20 7a  &zBuf[k]);.    z
36c0: 42 75 66 5b 6b 2b 2b 5d 20 3d 20 30 3b 0a 20 20  Buf[k++] = 0;.  
36d0: 7d 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64  }.}.#endif..#ifd
36e0: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
36f0: 2f 2a 0a 2a 2a 20 50 72 69 6e 74 20 74 68 65 20  /*.** Print the 
3700: 76 61 6c 75 65 20 6f 66 20 61 20 72 65 67 69 73  value of a regis
3710: 74 65 72 20 66 6f 72 20 74 72 61 63 69 6e 67 20  ter for tracing 
3720: 70 75 72 70 6f 73 65 73 3a 0a 2a 2f 0a 73 74 61  purposes:.*/.sta
3730: 74 69 63 20 76 6f 69 64 20 6d 65 6d 54 72 61 63  tic void memTrac
3740: 65 50 72 69 6e 74 28 46 49 4c 45 20 2a 6f 75 74  ePrint(FILE *out
3750: 2c 20 4d 65 6d 20 2a 70 29 7b 0a 20 20 69 66 28  , Mem *p){.  if(
3760: 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f   p->flags & MEM_
3770: 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 66 70 72 69  Null ){.    fpri
3780: 6e 74 66 28 6f 75 74 2c 20 22 20 4e 55 4c 4c 22  ntf(out, " NULL"
3790: 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 28  );.  }else if( (
37a0: 70 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  p->flags & (MEM_
37b0: 49 6e 74 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d 28  Int|MEM_Str))==(
37c0: 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 53 74 72 29  MEM_Int|MEM_Str)
37d0: 20 29 7b 0a 20 20 20 20 66 70 72 69 6e 74 66 28   ){.    fprintf(
37e0: 6f 75 74 2c 20 22 20 73 69 3a 25 6c 6c 64 22 2c  out, " si:%lld",
37f0: 20 70 2d 3e 75 2e 69 29 3b 0a 20 20 7d 65 6c 73   p->u.i);.  }els
3800: 65 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26  e if( p->flags &
3810: 20 4d 45 4d 5f 49 6e 74 20 29 7b 0a 20 20 20 20   MEM_Int ){.    
3820: 66 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 20 69  fprintf(out, " i
3830: 3a 25 6c 6c 64 22 2c 20 70 2d 3e 75 2e 69 29 3b  :%lld", p->u.i);
3840: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
3850: 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f  OMIT_FLOATING_PO
3860: 49 4e 54 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  INT.  }else if( 
3870: 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52  p->flags & MEM_R
3880: 65 61 6c 20 29 7b 0a 20 20 20 20 66 70 72 69 6e  eal ){.    fprin
3890: 74 66 28 6f 75 74 2c 20 22 20 72 3a 25 67 22 2c  tf(out, " r:%g",
38a0: 20 70 2d 3e 72 29 3b 0a 23 65 6e 64 69 66 0a 20   p->r);.#endif. 
38b0: 20 7d 65 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c   }else if( p->fl
38c0: 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74  ags & MEM_RowSet
38d0: 20 29 7b 0a 20 20 20 20 66 70 72 69 6e 74 66 28   ){.    fprintf(
38e0: 6f 75 74 2c 20 22 20 28 72 6f 77 73 65 74 29 22  out, " (rowset)"
38f0: 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
3900: 63 68 61 72 20 7a 42 75 66 5b 32 30 30 5d 3b 0a  char zBuf[200];.
3910: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
3920: 65 6d 50 72 65 74 74 79 50 72 69 6e 74 28 70 2c  emPrettyPrint(p,
3930: 20 7a 42 75 66 29 3b 0a 20 20 20 20 66 70 72 69   zBuf);.    fpri
3940: 6e 74 66 28 6f 75 74 2c 20 22 20 22 29 3b 0a 20  ntf(out, " ");. 
3950: 20 20 20 66 70 72 69 6e 74 66 28 6f 75 74 2c 20     fprintf(out, 
3960: 22 25 73 22 2c 20 7a 42 75 66 29 3b 0a 20 20 7d  "%s", zBuf);.  }
3970: 0a 7d 0a 73 74 61 74 69 63 20 76 6f 69 64 20 72  .}.static void r
3980: 65 67 69 73 74 65 72 54 72 61 63 65 28 46 49 4c  egisterTrace(FIL
3990: 45 20 2a 6f 75 74 2c 20 69 6e 74 20 69 52 65 67  E *out, int iReg
39a0: 2c 20 4d 65 6d 20 2a 70 29 7b 0a 20 20 66 70 72  , Mem *p){.  fpr
39b0: 69 6e 74 66 28 6f 75 74 2c 20 22 52 45 47 5b 25  intf(out, "REG[%
39c0: 64 5d 20 3d 20 22 2c 20 69 52 65 67 29 3b 0a 20  d] = ", iReg);. 
39d0: 20 6d 65 6d 54 72 61 63 65 50 72 69 6e 74 28 6f   memTracePrint(o
39e0: 75 74 2c 20 70 29 3b 0a 20 20 66 70 72 69 6e 74  ut, p);.  fprint
39f0: 66 28 6f 75 74 2c 20 22 5c 6e 22 29 3b 0a 7d 0a  f(out, "\n");.}.
3a00: 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53  #endif..#ifdef S
3a10: 51 4c 49 54 45 5f 44 45 42 55 47 0a 23 20 20 64  QLITE_DEBUG.#  d
3a20: 65 66 69 6e 65 20 52 45 47 49 53 54 45 52 5f 54  efine REGISTER_T
3a30: 52 41 43 45 28 52 2c 4d 29 20 69 66 28 70 2d 3e  RACE(R,M) if(p->
3a40: 74 72 61 63 65 29 72 65 67 69 73 74 65 72 54 72  trace)registerTr
3a50: 61 63 65 28 70 2d 3e 74 72 61 63 65 2c 52 2c 4d  ace(p->trace,R,M
3a60: 29 0a 23 65 6c 73 65 0a 23 20 20 64 65 66 69 6e  ).#else.#  defin
3a70: 65 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45  e REGISTER_TRACE
3a80: 28 52 2c 4d 29 0a 23 65 6e 64 69 66 0a 0a 0a 23  (R,M).#endif...#
3a90: 69 66 64 65 66 20 56 44 42 45 5f 50 52 4f 46 49  ifdef VDBE_PROFI
3aa0: 4c 45 0a 0a 2f 2a 20 0a 2a 2a 20 68 77 74 69 6d  LE../* .** hwtim
3ab0: 65 2e 68 20 63 6f 6e 74 61 69 6e 73 20 69 6e 6c  e.h contains inl
3ac0: 69 6e 65 20 61 73 73 65 6d 62 6c 65 72 20 63 6f  ine assembler co
3ad0: 64 65 20 66 6f 72 20 69 6d 70 6c 65 6d 65 6e 74  de for implement
3ae0: 69 6e 67 20 0a 2a 2a 20 68 69 67 68 2d 70 65 72  ing .** high-per
3af0: 66 6f 72 6d 61 6e 63 65 20 74 69 6d 69 6e 67 20  formance timing 
3b00: 72 6f 75 74 69 6e 65 73 2e 0a 2a 2f 0a 23 69 6e  routines..*/.#in
3b10: 63 6c 75 64 65 20 22 68 77 74 69 6d 65 2e 68 22  clude "hwtime.h"
3b20: 0a 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ..#endif../*.** 
3b30: 54 68 65 20 43 48 45 43 4b 5f 46 4f 52 5f 49 4e  The CHECK_FOR_IN
3b40: 54 45 52 52 55 50 54 20 6d 61 63 72 6f 20 64 65  TERRUPT macro de
3b50: 66 69 6e 65 64 20 68 65 72 65 20 6c 6f 6f 6b 73  fined here looks
3b60: 20 74 6f 20 73 65 65 20 69 66 20 74 68 65 0a 2a   to see if the.*
3b70: 2a 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72  * sqlite3_interr
3b80: 75 70 74 28 29 20 72 6f 75 74 69 6e 65 20 68 61  upt() routine ha
3b90: 73 20 62 65 65 6e 20 63 61 6c 6c 65 64 2e 20 20  s been called.  
3ba0: 49 66 20 69 74 20 68 61 73 20 62 65 65 6e 2c 20  If it has been, 
3bb0: 74 68 65 6e 0a 2a 2a 20 70 72 6f 63 65 73 73 69  then.** processi
3bc0: 6e 67 20 6f 66 20 74 68 65 20 56 44 42 45 20 70  ng of the VDBE p
3bd0: 72 6f 67 72 61 6d 20 69 73 20 69 6e 74 65 72 72  rogram is interr
3be0: 75 70 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  upted..**.** Thi
3bf0: 73 20 6d 61 63 72 6f 20 61 64 64 65 64 20 74 6f  s macro added to
3c00: 20 65 76 65 72 79 20 69 6e 73 74 72 75 63 74 69   every instructi
3c10: 6f 6e 20 74 68 61 74 20 64 6f 65 73 20 61 20 6a  on that does a j
3c20: 75 6d 70 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a  ump in order to.
3c30: 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 20 61 20 6c  ** implement a l
3c40: 6f 6f 70 2e 20 20 54 68 69 73 20 74 65 73 74 20  oop.  This test 
3c50: 75 73 65 64 20 74 6f 20 62 65 20 6f 6e 20 65 76  used to be on ev
3c60: 65 72 79 20 73 69 6e 67 6c 65 20 69 6e 73 74 72  ery single instr
3c70: 75 63 74 69 6f 6e 2c 0a 2a 2a 20 62 75 74 20 74  uction,.** but t
3c80: 68 61 74 20 6d 65 61 6e 74 20 77 65 20 6d 6f 72  hat meant we mor
3c90: 65 20 74 65 73 74 69 6e 67 20 74 68 61 74 20 77  e testing that w
3ca0: 65 20 6e 65 65 64 65 64 2e 20 20 42 79 20 6f 6e  e needed.  By on
3cb0: 6c 79 20 74 65 73 74 69 6e 67 20 74 68 65 0a 2a  ly testing the.*
3cc0: 2a 20 66 6c 61 67 20 6f 6e 20 6a 75 6d 70 20 69  * flag on jump i
3cd0: 6e 73 74 72 75 63 74 69 6f 6e 73 2c 20 77 65 20  nstructions, we 
3ce0: 67 65 74 20 61 20 28 73 6d 61 6c 6c 29 20 73 70  get a (small) sp
3cf0: 65 65 64 20 69 6d 70 72 6f 76 65 6d 65 6e 74 2e  eed improvement.
3d00: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43 48 45 43  .*/.#define CHEC
3d10: 4b 5f 46 4f 52 5f 49 4e 54 45 52 52 55 50 54 20  K_FOR_INTERRUPT 
3d20: 5c 0a 20 20 20 69 66 28 20 64 62 2d 3e 75 31 2e  \.   if( db->u1.
3d30: 69 73 49 6e 74 65 72 72 75 70 74 65 64 20 29 20  isInterrupted ) 
3d40: 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
3d50: 6f 5f 69 6e 74 65 72 72 75 70 74 3b 0a 0a 0a 23  o_interrupt;...#
3d60: 69 66 6e 64 65 66 20 4e 44 45 42 55 47 0a 2f 2a  ifndef NDEBUG./*
3d70: 0a 2a 2a 20 54 68 69 73 20 66 75 6e 63 74 69 6f  .** This functio
3d80: 6e 20 69 73 20 6f 6e 6c 79 20 63 61 6c 6c 65 64  n is only called
3d90: 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 61 6e 20   from within an 
3da0: 61 73 73 65 72 74 28 29 20 65 78 70 72 65 73 73  assert() express
3db0: 69 6f 6e 2e 20 49 74 0a 2a 2a 20 63 68 65 63 6b  ion. It.** check
3dc0: 73 20 74 68 61 74 20 74 68 65 20 73 71 6c 69 74  s that the sqlit
3dd0: 65 33 2e 6e 54 72 61 6e 73 61 63 74 69 6f 6e 20  e3.nTransaction 
3de0: 76 61 72 69 61 62 6c 65 20 69 73 20 63 6f 72 72  variable is corr
3df0: 65 63 74 6c 79 20 73 65 74 20 74 6f 0a 2a 2a 20  ectly set to.** 
3e00: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6e 6f  the number of no
3e10: 6e 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61  n-transaction sa
3e20: 76 65 70 6f 69 6e 74 73 20 63 75 72 72 65 6e 74  vepoints current
3e30: 6c 79 20 69 6e 20 74 68 65 20 0a 2a 2a 20 6c 69  ly in the .** li
3e40: 6e 6b 65 64 20 6c 69 73 74 20 73 74 61 72 74 69  nked list starti
3e50: 6e 67 20 61 74 20 73 71 6c 69 74 65 33 2e 70 53  ng at sqlite3.pS
3e60: 61 76 65 70 6f 69 6e 74 2e 0a 2a 2a 20 0a 2a 2a  avepoint..** .**
3e70: 20 55 73 61 67 65 3a 0a 2a 2a 0a 2a 2a 20 20 20   Usage:.**.**   
3e80: 20 20 61 73 73 65 72 74 28 20 63 68 65 63 6b 53    assert( checkS
3e90: 61 76 65 70 6f 69 6e 74 43 6f 75 6e 74 28 64 62  avepointCount(db
3ea0: 29 20 29 3b 0a 2a 2f 0a 73 74 61 74 69 63 20 69  ) );.*/.static i
3eb0: 6e 74 20 63 68 65 63 6b 53 61 76 65 70 6f 69 6e  nt checkSavepoin
3ec0: 74 43 6f 75 6e 74 28 73 71 6c 69 74 65 33 20 2a  tCount(sqlite3 *
3ed0: 64 62 29 7b 0a 20 20 69 6e 74 20 6e 20 3d 20 30  db){.  int n = 0
3ee0: 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70  ;.  Savepoint *p
3ef0: 3b 0a 20 20 66 6f 72 28 70 3d 64 62 2d 3e 70 53  ;.  for(p=db->pS
3f00: 61 76 65 70 6f 69 6e 74 3b 20 70 3b 20 70 3d 70  avepoint; p; p=p
3f10: 2d 3e 70 4e 65 78 74 29 20 6e 2b 2b 3b 0a 20 20  ->pNext) n++;.  
3f20: 61 73 73 65 72 74 28 20 6e 3d 3d 28 64 62 2d 3e  assert( n==(db->
3f30: 6e 53 61 76 65 70 6f 69 6e 74 20 2b 20 64 62 2d  nSavepoint + db-
3f40: 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61  >isTransactionSa
3f50: 76 65 70 6f 69 6e 74 29 20 29 3b 0a 20 20 72 65  vepoint) );.  re
3f60: 74 75 72 6e 20 31 3b 0a 7d 0a 23 65 6e 64 69 66  turn 1;.}.#endif
3f70: 0a 0a 2f 2a 0a 2a 2a 20 54 72 61 6e 73 66 65 72  ../*.** Transfer
3f80: 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 74   error message t
3f90: 65 78 74 20 66 72 6f 6d 20 61 6e 20 73 71 6c 69  ext from an sqli
3fa0: 74 65 33 5f 76 74 61 62 2e 7a 45 72 72 4d 73 67  te3_vtab.zErrMsg
3fb0: 20 28 74 65 78 74 20 73 74 6f 72 65 64 0a 2a 2a   (text stored.**
3fc0: 20 69 6e 20 6d 65 6d 6f 72 79 20 6f 62 74 61 69   in memory obtai
3fd0: 6e 65 64 20 66 72 6f 6d 20 73 71 6c 69 74 65 33  ned from sqlite3
3fe0: 5f 6d 61 6c 6c 6f 63 29 20 69 6e 74 6f 20 61 20  _malloc) into a 
3ff0: 56 64 62 65 2e 7a 45 72 72 4d 73 67 20 28 74 65  Vdbe.zErrMsg (te
4000: 78 74 20 73 74 6f 72 65 64 0a 2a 2a 20 69 6e 20  xt stored.** in 
4010: 6d 65 6d 6f 72 79 20 6f 62 74 61 69 6e 65 64 20  memory obtained 
4020: 66 72 6f 6d 20 73 71 6c 69 74 65 33 44 62 4d 61  from sqlite3DbMa
4030: 6c 6c 6f 63 29 2e 0a 2a 2f 0a 73 74 61 74 69 63  lloc)..*/.static
4040: 20 76 6f 69 64 20 69 6d 70 6f 72 74 56 74 61 62   void importVtab
4050: 45 72 72 4d 73 67 28 56 64 62 65 20 2a 70 2c 20  ErrMsg(Vdbe *p, 
4060: 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56  sqlite3_vtab *pV
4070: 74 61 62 29 7b 0a 20 20 73 71 6c 69 74 65 33 20  tab){.  sqlite3 
4080: 2a 64 62 20 3d 20 70 2d 3e 64 62 3b 0a 20 20 73  *db = p->db;.  s
4090: 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c  qlite3DbFree(db,
40a0: 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20   p->zErrMsg);.  
40b0: 70 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 73 71 6c  p->zErrMsg = sql
40c0: 69 74 65 33 44 62 53 74 72 44 75 70 28 64 62 2c  ite3DbStrDup(db,
40d0: 20 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67 29   pVtab->zErrMsg)
40e0: 3b 0a 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65  ;.  sqlite3_free
40f0: 28 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67 29  (pVtab->zErrMsg)
4100: 3b 0a 20 20 70 56 74 61 62 2d 3e 7a 45 72 72 4d  ;.  pVtab->zErrM
4110: 73 67 20 3d 20 30 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a  sg = 0;.}.../*.*
4120: 2a 20 45 78 65 63 75 74 65 20 61 73 20 6d 75 63  * Execute as muc
4130: 68 20 6f 66 20 61 20 56 44 42 45 20 70 72 6f 67  h of a VDBE prog
4140: 72 61 6d 20 61 73 20 77 65 20 63 61 6e 20 74 68  ram as we can th
4150: 65 6e 20 72 65 74 75 72 6e 2e 0a 2a 2a 0a 2a 2a  en return..**.**
4160: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 61 6b 65   sqlite3VdbeMake
4170: 52 65 61 64 79 28 29 20 6d 75 73 74 20 62 65 20  Ready() must be 
4180: 63 61 6c 6c 65 64 20 62 65 66 6f 72 65 20 74 68  called before th
4190: 69 73 20 72 6f 75 74 69 6e 65 20 69 6e 20 6f 72  is routine in or
41a0: 64 65 72 20 74 6f 0a 2a 2a 20 63 6c 6f 73 65 20  der to.** close 
41b0: 74 68 65 20 70 72 6f 67 72 61 6d 20 77 69 74 68  the program with
41c0: 20 61 20 66 69 6e 61 6c 20 4f 50 5f 48 61 6c 74   a final OP_Halt
41d0: 20 61 6e 64 20 74 6f 20 73 65 74 20 75 70 20 74   and to set up t
41e0: 68 65 20 63 61 6c 6c 62 61 63 6b 73 0a 2a 2a 20  he callbacks.** 
41f0: 61 6e 64 20 74 68 65 20 65 72 72 6f 72 20 6d 65  and the error me
4200: 73 73 61 67 65 20 70 6f 69 6e 74 65 72 2e 0a 2a  ssage pointer..*
4210: 2a 0a 2a 2a 20 57 68 65 6e 65 76 65 72 20 61 20  *.** Whenever a 
4220: 72 6f 77 20 6f 72 20 72 65 73 75 6c 74 20 64 61  row or result da
4230: 74 61 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2c  ta is available,
4240: 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 77 69   this routine wi
4250: 6c 6c 20 65 69 74 68 65 72 0a 2a 2a 20 69 6e 76  ll either.** inv
4260: 6f 6b 65 20 74 68 65 20 72 65 73 75 6c 74 20 63  oke the result c
4270: 61 6c 6c 62 61 63 6b 20 28 69 66 20 74 68 65 72  allback (if ther
4280: 65 20 69 73 20 6f 6e 65 29 20 6f 72 20 72 65 74  e is one) or ret
4290: 75 72 6e 20 77 69 74 68 0a 2a 2a 20 53 51 4c 49  urn with.** SQLI
42a0: 54 45 5f 52 4f 57 2e 0a 2a 2a 0a 2a 2a 20 49 66  TE_ROW..**.** If
42b0: 20 61 6e 20 61 74 74 65 6d 70 74 20 69 73 20 6d   an attempt is m
42c0: 61 64 65 20 74 6f 20 6f 70 65 6e 20 61 20 6c 6f  ade to open a lo
42d0: 63 6b 65 64 20 64 61 74 61 62 61 73 65 2c 20 74  cked database, t
42e0: 68 65 6e 20 74 68 69 73 20 72 6f 75 74 69 6e 65  hen this routine
42f0: 0a 2a 2a 20 77 69 6c 6c 20 65 69 74 68 65 72 20  .** will either 
4300: 69 6e 76 6f 6b 65 20 74 68 65 20 62 75 73 79 20  invoke the busy 
4310: 63 61 6c 6c 62 61 63 6b 20 28 69 66 20 74 68 65  callback (if the
4320: 72 65 20 69 73 20 6f 6e 65 29 20 6f 72 20 69 74  re is one) or it
4330: 20 77 69 6c 6c 0a 2a 2a 20 72 65 74 75 72 6e 20   will.** return 
4340: 53 51 4c 49 54 45 5f 42 55 53 59 2e 0a 2a 2a 0a  SQLITE_BUSY..**.
4350: 2a 2a 20 49 66 20 61 6e 20 65 72 72 6f 72 20 6f  ** If an error o
4360: 63 63 75 72 73 2c 20 61 6e 20 65 72 72 6f 72 20  ccurs, an error 
4370: 6d 65 73 73 61 67 65 20 69 73 20 77 72 69 74 74  message is writt
4380: 65 6e 20 74 6f 20 6d 65 6d 6f 72 79 20 6f 62 74  en to memory obt
4390: 61 69 6e 65 64 0a 2a 2a 20 66 72 6f 6d 20 73 71  ained.** from sq
43a0: 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 28 29 20 61  lite3_malloc() a
43b0: 6e 64 20 70 2d 3e 7a 45 72 72 4d 73 67 20 69 73  nd p->zErrMsg is
43c0: 20 6d 61 64 65 20 74 6f 20 70 6f 69 6e 74 20 74   made to point t
43d0: 6f 20 74 68 61 74 20 6d 65 6d 6f 72 79 2e 0a 2a  o that memory..*
43e0: 2a 20 54 68 65 20 65 72 72 6f 72 20 63 6f 64 65  * The error code
43f0: 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 70 2d   is stored in p-
4400: 3e 72 63 20 61 6e 64 20 74 68 69 73 20 72 6f 75  >rc and this rou
4410: 74 69 6e 65 20 72 65 74 75 72 6e 73 20 53 51 4c  tine returns SQL
4420: 49 54 45 5f 45 52 52 4f 52 2e 0a 2a 2a 0a 2a 2a  ITE_ERROR..**.**
4430: 20 49 66 20 74 68 65 20 63 61 6c 6c 62 61 63 6b   If the callback
4440: 20 65 76 65 72 20 72 65 74 75 72 6e 73 20 6e 6f   ever returns no
4450: 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65  n-zero, then the
4460: 20 70 72 6f 67 72 61 6d 20 65 78 69 74 73 0a 2a   program exits.*
4470: 2a 20 69 6d 6d 65 64 69 61 74 65 6c 79 2e 20 20  * immediately.  
4480: 54 68 65 72 65 20 77 69 6c 6c 20 62 65 20 6e 6f  There will be no
4490: 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 62   error message b
44a0: 75 74 20 74 68 65 20 70 2d 3e 72 63 20 66 69 65  ut the p->rc fie
44b0: 6c 64 20 69 73 0a 2a 2a 20 73 65 74 20 74 6f 20  ld is.** set to 
44c0: 53 51 4c 49 54 45 5f 41 42 4f 52 54 20 61 6e 64  SQLITE_ABORT and
44d0: 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 77 69   this routine wi
44e0: 6c 6c 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45  ll return SQLITE
44f0: 5f 45 52 52 4f 52 2e 0a 2a 2a 0a 2a 2a 20 41 20  _ERROR..**.** A 
4500: 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
4510: 6e 20 65 72 72 6f 72 20 63 61 75 73 65 73 20 70  n error causes p
4520: 2d 3e 72 63 20 74 6f 20 62 65 20 73 65 74 20 74  ->rc to be set t
4530: 6f 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 61  o SQLITE_NOMEM a
4540: 6e 64 20 74 68 69 73 0a 2a 2a 20 72 6f 75 74 69  nd this.** routi
4550: 6e 65 20 74 6f 20 72 65 74 75 72 6e 20 53 51 4c  ne to return SQL
4560: 49 54 45 5f 45 52 52 4f 52 2e 0a 2a 2a 0a 2a 2a  ITE_ERROR..**.**
4570: 20 4f 74 68 65 72 20 66 61 74 61 6c 20 65 72 72   Other fatal err
4580: 6f 72 73 20 72 65 74 75 72 6e 20 53 51 4c 49 54  ors return SQLIT
4590: 45 5f 45 52 52 4f 52 2e 0a 2a 2a 0a 2a 2a 20 41  E_ERROR..**.** A
45a0: 66 74 65 72 20 74 68 69 73 20 72 6f 75 74 69 6e  fter this routin
45b0: 65 20 68 61 73 20 66 69 6e 69 73 68 65 64 2c 20  e has finished, 
45c0: 73 71 6c 69 74 65 33 56 64 62 65 46 69 6e 61 6c  sqlite3VdbeFinal
45d0: 69 7a 65 28 29 20 73 68 6f 75 6c 64 20 62 65 0a  ize() should be.
45e0: 2a 2a 20 75 73 65 64 20 74 6f 20 63 6c 65 61 6e  ** used to clean
45f0: 20 75 70 20 74 68 65 20 6d 65 73 73 20 74 68 61   up the mess tha
4600: 74 20 77 61 73 20 6c 65 66 74 20 62 65 68 69 6e  t was left behin
4610: 64 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  d..*/.int sqlite
4620: 33 56 64 62 65 45 78 65 63 28 0a 20 20 56 64 62  3VdbeExec(.  Vdb
4630: 65 20 2a 70 20 20 20 20 20 20 20 20 20 20 20 20  e *p            
4640: 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 56          /* The V
4650: 44 42 45 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20  DBE */.){.  int 
4660: 70 63 3d 30 3b 20 20 20 20 20 20 20 20 20 20 20  pc=0;           
4670: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 70 72         /* The pr
4680: 6f 67 72 61 6d 20 63 6f 75 6e 74 65 72 20 2a 2f  ogram counter */
4690: 0a 20 20 4f 70 20 2a 61 4f 70 20 3d 20 70 2d 3e  .  Op *aOp = p->
46a0: 61 4f 70 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  aOp;          /*
46b0: 20 43 6f 70 79 20 6f 66 20 70 2d 3e 61 4f 70 20   Copy of p->aOp 
46c0: 2a 2f 0a 20 20 4f 70 20 2a 70 4f 70 3b 20 20 20  */.  Op *pOp;   
46d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
46e0: 2f 2a 20 43 75 72 72 65 6e 74 20 6f 70 65 72 61  /* Current opera
46f0: 74 69 6f 6e 20 2a 2f 0a 20 20 69 6e 74 20 72 63  tion */.  int rc
4700: 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 20 20 20   = SQLITE_OK;   
4710: 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f       /* Value to
4720: 20 72 65 74 75 72 6e 20 2a 2f 0a 20 20 73 71 6c   return */.  sql
4730: 69 74 65 33 20 2a 64 62 20 3d 20 70 2d 3e 64 62  ite3 *db = p->db
4740: 3b 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64  ;       /* The d
4750: 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 75 38 20  atabase */.  u8 
4760: 72 65 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75  resetSchemaOnFau
4770: 6c 74 20 3d 20 30 3b 20 2f 2a 20 52 65 73 65 74  lt = 0; /* Reset
4780: 20 73 63 68 65 6d 61 20 61 66 74 65 72 20 61 6e   schema after an
4790: 20 65 72 72 6f 72 20 69 66 20 74 72 75 65 20 2a   error if true *
47a0: 2f 0a 20 20 75 38 20 65 6e 63 6f 64 69 6e 67 20  /.  u8 encoding 
47b0: 3d 20 45 4e 43 28 64 62 29 3b 20 20 20 20 20 2f  = ENC(db);     /
47c0: 2a 20 54 68 65 20 64 61 74 61 62 61 73 65 20 65  * The database e
47d0: 6e 63 6f 64 69 6e 67 20 2a 2f 0a 23 69 66 6e 64  ncoding */.#ifnd
47e0: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  ef SQLITE_OMIT_P
47f0: 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b  ROGRESS_CALLBACK
4800: 0a 20 20 69 6e 74 20 63 68 65 63 6b 50 72 6f 67  .  int checkProg
4810: 72 65 73 73 3b 20 20 20 20 20 20 20 20 20 2f 2a  ress;         /*
4820: 20 54 72 75 65 20 69 66 20 70 72 6f 67 72 65 73   True if progres
4830: 73 20 63 61 6c 6c 62 61 63 6b 73 20 61 72 65 20  s callbacks are 
4840: 65 6e 61 62 6c 65 64 20 2a 2f 0a 20 20 69 6e 74  enabled */.  int
4850: 20 6e 50 72 6f 67 72 65 73 73 4f 70 73 20 3d 20   nProgressOps = 
4860: 30 3b 20 20 20 20 20 20 2f 2a 20 4f 70 63 6f 64  0;      /* Opcod
4870: 65 73 20 65 78 65 63 75 74 65 64 20 73 69 6e 63  es executed sinc
4880: 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62  e progress callb
4890: 61 63 6b 2e 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  ack. */.#endif. 
48a0: 20 4d 65 6d 20 2a 61 4d 65 6d 20 3d 20 70 2d 3e   Mem *aMem = p->
48b0: 61 4d 65 6d 3b 20 20 20 20 20 20 20 2f 2a 20 43  aMem;       /* C
48c0: 6f 70 79 20 6f 66 20 70 2d 3e 61 4d 65 6d 20 2a  opy of p->aMem *
48d0: 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e 31 20 3d 20  /.  Mem *pIn1 = 
48e0: 30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  0;             /
48f0: 2a 20 31 73 74 20 69 6e 70 75 74 20 6f 70 65 72  * 1st input oper
4900: 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49  and */.  Mem *pI
4910: 6e 32 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20  n2 = 0;         
4920: 20 20 20 20 2f 2a 20 32 6e 64 20 69 6e 70 75 74      /* 2nd input
4930: 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 4d 65   operand */.  Me
4940: 6d 20 2a 70 49 6e 33 20 3d 20 30 3b 20 20 20 20  m *pIn3 = 0;    
4950: 20 20 20 20 20 20 20 20 20 2f 2a 20 33 72 64 20           /* 3rd 
4960: 69 6e 70 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f  input operand */
4970: 0a 20 20 4d 65 6d 20 2a 70 4f 75 74 20 3d 20 30  .  Mem *pOut = 0
4980: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
4990: 20 4f 75 74 70 75 74 20 6f 70 65 72 61 6e 64 20   Output operand 
49a0: 2a 2f 0a 20 20 69 6e 74 20 69 43 6f 6d 70 61 72  */.  int iCompar
49b0: 65 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20  e = 0;          
49c0: 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20 6c 61 73  /* Result of las
49d0: 74 20 4f 50 5f 43 6f 6d 70 61 72 65 20 6f 70 65  t OP_Compare ope
49e0: 72 61 74 69 6f 6e 20 2a 2f 0a 20 20 69 6e 74 20  ration */.  int 
49f0: 2a 61 50 65 72 6d 75 74 65 20 3d 20 30 3b 20 20  *aPermute = 0;  
4a00: 20 20 20 20 20 20 20 2f 2a 20 50 65 72 6d 75 74         /* Permut
4a10: 61 74 69 6f 6e 20 6f 66 20 63 6f 6c 75 6d 6e 73  ation of columns
4a20: 20 66 6f 72 20 4f 50 5f 43 6f 6d 70 61 72 65 20   for OP_Compare 
4a30: 2a 2f 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50  */.#ifdef VDBE_P
4a40: 52 4f 46 49 4c 45 0a 20 20 75 36 34 20 73 74 61  ROFILE.  u64 sta
4a50: 72 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rt;             
4a60: 20 20 20 20 2f 2a 20 43 50 55 20 63 6c 6f 63 6b      /* CPU clock
4a70: 20 63 6f 75 6e 74 20 61 74 20 73 74 61 72 74 20   count at start 
4a80: 6f 66 20 6f 70 63 6f 64 65 20 2a 2f 0a 20 20 69  of opcode */.  i
4a90: 6e 74 20 6f 72 69 67 50 63 3b 20 20 20 20 20 20  nt origPc;      
4aa0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 72 6f            /* Pro
4ab0: 67 72 61 6d 20 63 6f 75 6e 74 65 72 20 61 74 20  gram counter at 
4ac0: 73 74 61 72 74 20 6f 66 20 6f 70 63 6f 64 65 20  start of opcode 
4ad0: 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 2f 2a 2a 2a  */.#endif.  /***
4ae0: 20 49 4e 53 45 52 54 20 53 54 41 43 4b 20 55 4e   INSERT STACK UN
4af0: 49 4f 4e 20 48 45 52 45 20 2a 2a 2a 2f 0a 0a 20  ION HERE ***/.. 
4b00: 20 61 73 73 65 72 74 28 20 70 2d 3e 6d 61 67 69   assert( p->magi
4b10: 63 3d 3d 56 44 42 45 5f 4d 41 47 49 43 5f 52 55  c==VDBE_MAGIC_RU
4b20: 4e 20 29 3b 20 20 2f 2a 20 73 71 6c 69 74 65 33  N );  /* sqlite3
4b30: 5f 73 74 65 70 28 29 20 76 65 72 69 66 69 65 73  _step() verifies
4b40: 20 74 68 69 73 20 2a 2f 0a 20 20 73 71 6c 69 74   this */.  sqlit
4b50: 65 33 56 64 62 65 4d 75 74 65 78 41 72 72 61 79  e3VdbeMutexArray
4b60: 45 6e 74 65 72 28 70 29 3b 0a 20 20 69 66 28 20  Enter(p);.  if( 
4b70: 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 4e 4f  p->rc==SQLITE_NO
4b80: 4d 45 4d 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68  MEM ){.    /* Th
4b90: 69 73 20 68 61 70 70 65 6e 73 20 69 66 20 61 20  is happens if a 
4ba0: 6d 61 6c 6c 6f 63 28 29 20 69 6e 73 69 64 65 20  malloc() inside 
4bb0: 61 20 63 61 6c 6c 20 74 6f 20 73 71 6c 69 74 65  a call to sqlite
4bc0: 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 29 20  3_column_text() 
4bd0: 6f 72 0a 20 20 20 20 2a 2a 20 73 71 6c 69 74 65  or.    ** sqlite
4be0: 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 31 36 28  3_column_text16(
4bf0: 29 20 66 61 69 6c 65 64 2e 20 20 2a 2f 0a 20 20  ) failed.  */.  
4c00: 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20    goto no_mem;. 
4c10: 20 7d 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e   }.  assert( p->
4c20: 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c  rc==SQLITE_OK ||
4c30: 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 42   p->rc==SQLITE_B
4c40: 55 53 59 20 29 3b 0a 20 20 70 2d 3e 72 63 20 3d  USY );.  p->rc =
4c50: 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 61 73   SQLITE_OK;.  as
4c60: 73 65 72 74 28 20 70 2d 3e 65 78 70 6c 61 69 6e  sert( p->explain
4c70: 3d 3d 30 20 29 3b 0a 20 20 70 2d 3e 70 52 65 73  ==0 );.  p->pRes
4c80: 75 6c 74 53 65 74 20 3d 20 30 3b 0a 20 20 64 62  ultSet = 0;.  db
4c90: 2d 3e 62 75 73 79 48 61 6e 64 6c 65 72 2e 6e 42  ->busyHandler.nB
4ca0: 75 73 79 20 3d 20 30 3b 0a 20 20 43 48 45 43 4b  usy = 0;.  CHECK
4cb0: 5f 46 4f 52 5f 49 4e 54 45 52 52 55 50 54 3b 0a  _FOR_INTERRUPT;.
4cc0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 49 4f 54    sqlite3VdbeIOT
4cd0: 72 61 63 65 53 71 6c 28 70 29 3b 0a 23 69 66 6e  raceSql(p);.#ifn
4ce0: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
4cf0: 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43  PROGRESS_CALLBAC
4d00: 4b 0a 20 20 63 68 65 63 6b 50 72 6f 67 72 65 73  K.  checkProgres
4d10: 73 20 3d 20 64 62 2d 3e 78 50 72 6f 67 72 65 73  s = db->xProgres
4d20: 73 21 3d 30 3b 0a 23 65 6e 64 69 66 0a 23 69 66  s!=0;.#endif.#if
4d30: 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
4d40: 0a 20 20 73 71 6c 69 74 65 33 42 65 67 69 6e 42  .  sqlite3BeginB
4d50: 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 3b 0a 20  enignMalloc();. 
4d60: 20 69 66 28 20 70 2d 3e 70 63 3d 3d 30 20 20 26   if( p->pc==0  &
4d70: 26 20 28 70 2d 3e 64 62 2d 3e 66 6c 61 67 73 20  & (p->db->flags 
4d80: 26 20 53 51 4c 49 54 45 5f 56 64 62 65 4c 69 73  & SQLITE_VdbeLis
4d90: 74 69 6e 67 29 21 3d 30 20 29 7b 0a 20 20 20 20  ting)!=0 ){.    
4da0: 69 6e 74 20 69 3b 0a 20 20 20 20 70 72 69 6e 74  int i;.    print
4db0: 66 28 22 56 44 42 45 20 50 72 6f 67 72 61 6d 20  f("VDBE Program 
4dc0: 4c 69 73 74 69 6e 67 3a 5c 6e 22 29 3b 0a 20 20  Listing:\n");.  
4dd0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 50 72 69    sqlite3VdbePri
4de0: 6e 74 53 71 6c 28 70 29 3b 0a 20 20 20 20 66 6f  ntSql(p);.    fo
4df0: 72 28 69 3d 30 3b 20 69 3c 70 2d 3e 6e 4f 70 3b  r(i=0; i<p->nOp;
4e00: 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 73 71 6c   i++){.      sql
4e10: 69 74 65 33 56 64 62 65 50 72 69 6e 74 4f 70 28  ite3VdbePrintOp(
4e20: 73 74 64 6f 75 74 2c 20 69 2c 20 26 61 4f 70 5b  stdout, i, &aOp[
4e30: 69 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  i]);.    }.  }. 
4e40: 20 73 71 6c 69 74 65 33 45 6e 64 42 65 6e 69 67   sqlite3EndBenig
4e50: 6e 4d 61 6c 6c 6f 63 28 29 3b 0a 23 65 6e 64 69  nMalloc();.#endi
4e60: 66 0a 20 20 66 6f 72 28 70 63 3d 70 2d 3e 70 63  f.  for(pc=p->pc
4e70: 3b 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 3b  ; rc==SQLITE_OK;
4e80: 20 70 63 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65   pc++){.    asse
4e90: 72 74 28 20 70 63 3e 3d 30 20 26 26 20 70 63 3c  rt( pc>=0 && pc<
4ea0: 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 20 20 69 66  p->nOp );.    if
4eb0: 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c  ( db->mallocFail
4ec0: 65 64 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  ed ) goto no_mem
4ed0: 3b 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50 52  ;.#ifdef VDBE_PR
4ee0: 4f 46 49 4c 45 0a 20 20 20 20 6f 72 69 67 50 63  OFILE.    origPc
4ef0: 20 3d 20 70 63 3b 0a 20 20 20 20 73 74 61 72 74   = pc;.    start
4f00: 20 3d 20 73 71 6c 69 74 65 33 48 77 74 69 6d 65   = sqlite3Hwtime
4f10: 28 29 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 70  ();.#endif.    p
4f20: 4f 70 20 3d 20 26 61 4f 70 5b 70 63 5d 3b 0a 0a  Op = &aOp[pc];..
4f30: 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 61 6c 6c 6f      /* Only allo
4f40: 77 20 74 72 61 63 69 6e 67 20 69 66 20 53 51 4c  w tracing if SQL
4f50: 49 54 45 5f 44 45 42 55 47 20 69 73 20 64 65 66  ITE_DEBUG is def
4f60: 69 6e 65 64 2e 0a 20 20 20 20 2a 2f 0a 23 69 66  ined..    */.#if
4f70: 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
4f80: 0a 20 20 20 20 69 66 28 20 70 2d 3e 74 72 61 63  .    if( p->trac
4f90: 65 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 70  e ){.      if( p
4fa0: 63 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  c==0 ){.        
4fb0: 70 72 69 6e 74 66 28 22 56 44 42 45 20 45 78 65  printf("VDBE Exe
4fc0: 63 75 74 69 6f 6e 20 54 72 61 63 65 3a 5c 6e 22  cution Trace:\n"
4fd0: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
4fe0: 65 33 56 64 62 65 50 72 69 6e 74 53 71 6c 28 70  e3VdbePrintSql(p
4ff0: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  );.      }.     
5000: 20 73 71 6c 69 74 65 33 56 64 62 65 50 72 69 6e   sqlite3VdbePrin
5010: 74 4f 70 28 70 2d 3e 74 72 61 63 65 2c 20 70 63  tOp(p->trace, pc
5020: 2c 20 70 4f 70 29 3b 0a 20 20 20 20 7d 0a 23 65  , pOp);.    }.#e
5030: 6e 64 69 66 0a 20 20 20 20 20 20 0a 0a 20 20 20  ndif.      ..   
5040: 20 2f 2a 20 43 68 65 63 6b 20 74 6f 20 73 65 65   /* Check to see
5050: 20 69 66 20 77 65 20 6e 65 65 64 20 74 6f 20 73   if we need to s
5060: 69 6d 75 6c 61 74 65 20 61 6e 20 69 6e 74 65 72  imulate an inter
5070: 72 75 70 74 2e 20 20 54 68 69 73 20 6f 6e 6c 79  rupt.  This only
5080: 20 68 61 70 70 65 6e 73 0a 20 20 20 20 2a 2a 20   happens.    ** 
5090: 69 66 20 77 65 20 68 61 76 65 20 61 20 73 70 65  if we have a spe
50a0: 63 69 61 6c 20 74 65 73 74 20 62 75 69 6c 64 2e  cial test build.
50b0: 0a 20 20 20 20 2a 2f 0a 23 69 66 64 65 66 20 53  .    */.#ifdef S
50c0: 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 20 20 69  QLITE_TEST.    i
50d0: 66 28 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72  f( sqlite3_inter
50e0: 72 75 70 74 5f 63 6f 75 6e 74 3e 30 20 29 7b 0a  rupt_count>0 ){.
50f0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 69 6e        sqlite3_in
5100: 74 65 72 72 75 70 74 5f 63 6f 75 6e 74 2d 2d 3b  terrupt_count--;
5110: 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74  .      if( sqlit
5120: 65 33 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75  e3_interrupt_cou
5130: 6e 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  nt==0 ){.       
5140: 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75   sqlite3_interru
5150: 70 74 28 64 62 29 3b 0a 20 20 20 20 20 20 7d 0a  pt(db);.      }.
5160: 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 23 69      }.#endif..#i
5170: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
5180: 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42  T_PROGRESS_CALLB
5190: 41 43 4b 0a 20 20 20 20 2f 2a 20 43 61 6c 6c 20  ACK.    /* Call 
51a0: 74 68 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c  the progress cal
51b0: 6c 62 61 63 6b 20 69 66 20 69 74 20 69 73 20 63  lback if it is c
51c0: 6f 6e 66 69 67 75 72 65 64 20 61 6e 64 20 74 68  onfigured and th
51d0: 65 20 72 65 71 75 69 72 65 64 20 6e 75 6d 62 65  e required numbe
51e0: 72 0a 20 20 20 20 2a 2a 20 6f 66 20 56 44 42 45  r.    ** of VDBE
51f0: 20 6f 70 73 20 68 61 76 65 20 62 65 65 6e 20 65   ops have been e
5200: 78 65 63 75 74 65 64 20 28 65 69 74 68 65 72 20  xecuted (either 
5210: 73 69 6e 63 65 20 74 68 69 73 20 69 6e 76 6f 63  since this invoc
5220: 61 74 69 6f 6e 20 6f 66 0a 20 20 20 20 2a 2a 20  ation of.    ** 
5230: 73 71 6c 69 74 65 33 56 64 62 65 45 78 65 63 28  sqlite3VdbeExec(
5240: 29 20 6f 72 20 73 69 6e 63 65 20 6c 61 73 74 20  ) or since last 
5250: 74 69 6d 65 20 74 68 65 20 70 72 6f 67 72 65 73  time the progres
5260: 73 20 63 61 6c 6c 62 61 63 6b 20 77 61 73 20 63  s callback was c
5270: 61 6c 6c 65 64 29 2e 0a 20 20 20 20 2a 2a 20 49  alled)..    ** I
5280: 66 20 74 68 65 20 70 72 6f 67 72 65 73 73 20 63  f the progress c
5290: 61 6c 6c 62 61 63 6b 20 72 65 74 75 72 6e 73 20  allback returns 
52a0: 6e 6f 6e 2d 7a 65 72 6f 2c 20 65 78 69 74 20 74  non-zero, exit t
52b0: 68 65 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69  he virtual machi
52c0: 6e 65 20 77 69 74 68 0a 20 20 20 20 2a 2a 20 61  ne with.    ** a
52d0: 20 72 65 74 75 72 6e 20 63 6f 64 65 20 53 51 4c   return code SQL
52e0: 49 54 45 5f 41 42 4f 52 54 2e 0a 20 20 20 20 2a  ITE_ABORT..    *
52f0: 2f 0a 20 20 20 20 69 66 28 20 63 68 65 63 6b 50  /.    if( checkP
5300: 72 6f 67 72 65 73 73 20 29 7b 0a 20 20 20 20 20  rogress ){.     
5310: 20 69 66 28 20 64 62 2d 3e 6e 50 72 6f 67 72 65   if( db->nProgre
5320: 73 73 4f 70 73 3d 3d 6e 50 72 6f 67 72 65 73 73  ssOps==nProgress
5330: 4f 70 73 20 29 7b 0a 20 20 20 20 20 20 20 20 69  Ops ){.        i
5340: 6e 74 20 70 72 63 3b 0a 20 20 20 20 20 20 20 20  nt prc;.        
5350: 70 72 63 20 3d 20 64 62 2d 3e 78 50 72 6f 67 72  prc = db->xProgr
5360: 65 73 73 28 64 62 2d 3e 70 50 72 6f 67 72 65 73  ess(db->pProgres
5370: 73 41 72 67 29 3b 0a 20 20 20 20 20 20 20 20 69  sArg);.        i
5380: 66 28 20 70 72 63 21 3d 30 20 29 7b 0a 20 20 20  f( prc!=0 ){.   
5390: 20 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49         rc = SQLI
53a0: 54 45 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20  TE_INTERRUPT;.  
53b0: 20 20 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62          goto vdb
53c0: 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 20 20  e_error_halt;.  
53d0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
53e0: 6e 50 72 6f 67 72 65 73 73 4f 70 73 20 3d 20 30  nProgressOps = 0
53f0: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
5400: 6e 50 72 6f 67 72 65 73 73 4f 70 73 2b 2b 3b 0a  nProgressOps++;.
5410: 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20      }.#endif..  
5420: 20 20 2f 2a 20 4f 6e 20 61 6e 79 20 6f 70 63 6f    /* On any opco
5430: 64 65 20 77 69 74 68 20 74 68 65 20 22 6f 75 74  de with the "out
5440: 32 2d 70 72 65 72 65 6c 61 73 65 22 20 74 61 67  2-prerelase" tag
5450: 2c 20 66 72 65 65 20 61 6e 79 0a 20 20 20 20 2a  , free any.    *
5460: 2a 20 65 78 74 65 72 6e 61 6c 20 61 6c 6c 6f 63  * external alloc
5470: 61 74 69 6f 6e 73 20 6f 75 74 20 6f 66 20 6d 65  ations out of me
5480: 6d 5b 70 32 5d 20 61 6e 64 20 73 65 74 20 6d 65  m[p2] and set me
5490: 6d 5b 70 32 5d 20 74 6f 20 62 65 0a 20 20 20 20  m[p2] to be.    
54a0: 2a 2a 20 61 6e 20 75 6e 64 65 66 69 6e 65 64 20  ** an undefined 
54b0: 69 6e 74 65 67 65 72 2e 20 20 4f 70 63 6f 64 65  integer.  Opcode
54c0: 73 20 77 69 6c 6c 20 65 69 74 68 65 72 20 66 69  s will either fi
54d0: 6c 6c 20 69 6e 20 74 68 65 20 69 6e 74 65 67 65  ll in the intege
54e0: 72 0a 20 20 20 20 2a 2a 20 76 61 6c 75 65 20 6f  r.    ** value o
54f0: 72 20 63 6f 6e 76 65 72 74 20 6d 65 6d 5b 70 32  r convert mem[p2
5500: 5d 20 74 6f 20 61 20 64 69 66 66 65 72 65 6e 74  ] to a different
5510: 20 74 79 70 65 2e 0a 20 20 20 20 2a 2f 0a 20 20   type..    */.  
5520: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f    assert( pOp->o
5530: 70 66 6c 61 67 73 3d 3d 73 71 6c 69 74 65 33 4f  pflags==sqlite3O
5540: 70 63 6f 64 65 50 72 6f 70 65 72 74 79 5b 70 4f  pcodeProperty[pO
5550: 70 2d 3e 6f 70 63 6f 64 65 5d 20 29 3b 0a 20 20  p->opcode] );.  
5560: 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 66 6c 61    if( pOp->opfla
5570: 67 73 20 26 20 4f 50 46 4c 47 5f 4f 55 54 32 5f  gs & OPFLG_OUT2_
5580: 50 52 45 52 45 4c 45 41 53 45 20 29 7b 0a 20 20  PRERELEASE ){.  
5590: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
55a0: 3e 70 32 3e 30 20 29 3b 0a 20 20 20 20 20 20 61  >p2>0 );.      a
55b0: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d  ssert( pOp->p2<=
55c0: 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20  p->nMem );.     
55d0: 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f   pOut = &aMem[pO
55e0: 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 20 20 6d 65  p->p2];.      me
55f0: 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
5600: 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 20 20 73  , pOut);.      s
5610: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c  qlite3VdbeMemRel
5620: 65 61 73 65 45 78 74 65 72 6e 61 6c 28 70 4f 75  easeExternal(pOu
5630: 74 29 3b 0a 20 20 20 20 20 20 70 4f 75 74 2d 3e  t);.      pOut->
5640: 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b  flags = MEM_Int;
5650: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 20 53  .    }..    /* S
5660: 61 6e 69 74 79 20 63 68 65 63 6b 69 6e 67 20 6f  anity checking o
5670: 6e 20 6f 74 68 65 72 20 6f 70 65 72 61 6e 64 73  n other operands
5680: 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54   */.#ifdef SQLIT
5690: 45 5f 44 45 42 55 47 0a 20 20 20 20 69 66 28 20  E_DEBUG.    if( 
56a0: 28 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20  (pOp->opflags & 
56b0: 4f 50 46 4c 47 5f 49 4e 31 29 21 3d 30 20 29 7b  OPFLG_IN1)!=0 ){
56c0: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
56d0: 4f 70 2d 3e 70 31 3e 30 20 29 3b 0a 20 20 20 20  Op->p1>0 );.    
56e0: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
56f0: 31 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20  1<=p->nMem );.  
5700: 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
5710: 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70  sValid(&aMem[pOp
5720: 2d 3e 70 31 5d 29 20 29 3b 0a 20 20 20 20 20 20  ->p1]) );.      
5730: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
5740: 4f 70 2d 3e 70 31 2c 20 26 61 4d 65 6d 5b 70 4f  Op->p1, &aMem[pO
5750: 70 2d 3e 70 31 5d 29 3b 0a 20 20 20 20 7d 0a 20  p->p1]);.    }. 
5760: 20 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70 66     if( (pOp->opf
5770: 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f 49 4e 32  lags & OPFLG_IN2
5780: 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 61 73  )!=0 ){.      as
5790: 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20  sert( pOp->p2>0 
57a0: 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
57b0: 20 70 4f 70 2d 3e 70 32 3c 3d 70 2d 3e 6e 4d 65   pOp->p2<=p->nMe
57c0: 6d 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  m );.      asser
57d0: 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61  t( memIsValid(&a
57e0: 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 20 29 3b  Mem[pOp->p2]) );
57f0: 0a 20 20 20 20 20 20 52 45 47 49 53 54 45 52 5f  .      REGISTER_
5800: 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 26  TRACE(pOp->p2, &
5810: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 3b 0a  aMem[pOp->p2]);.
5820: 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 28 70      }.    if( (p
5830: 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50  Op->opflags & OP
5840: 46 4c 47 5f 49 4e 33 29 21 3d 30 20 29 7b 0a 20  FLG_IN3)!=0 ){. 
5850: 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
5860: 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 20 20 20 20  ->p3>0 );.      
5870: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c  assert( pOp->p3<
5880: 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20  =p->nMem );.    
5890: 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
58a0: 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e  alid(&aMem[pOp->
58b0: 70 33 5d 29 20 29 3b 0a 20 20 20 20 20 20 52 45  p3]) );.      RE
58c0: 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
58d0: 2d 3e 70 33 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d  ->p3, &aMem[pOp-
58e0: 3e 70 33 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 20  >p3]);.    }.   
58f0: 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70 66 6c 61   if( (pOp->opfla
5900: 67 73 20 26 20 4f 50 46 4c 47 5f 4f 55 54 32 29  gs & OPFLG_OUT2)
5910: 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73  !=0 ){.      ass
5920: 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29  ert( pOp->p2>0 )
5930: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
5940: 70 4f 70 2d 3e 70 32 3c 3d 70 2d 3e 6e 4d 65 6d  pOp->p2<=p->nMem
5950: 20 29 3b 0a 20 20 20 20 20 20 6d 65 6d 41 62 6f   );.      memAbo
5960: 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 26 61  utToChange(p, &a
5970: 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 3b 0a 20  Mem[pOp->p2]);. 
5980: 20 20 20 7d 0a 20 20 20 20 69 66 28 20 28 70 4f     }.    if( (pO
5990: 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50 46  p->opflags & OPF
59a0: 4c 47 5f 4f 55 54 33 29 21 3d 30 20 29 7b 0a 20  LG_OUT3)!=0 ){. 
59b0: 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
59c0: 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 20 20 20 20  ->p3>0 );.      
59d0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c  assert( pOp->p3<
59e0: 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20  =p->nMem );.    
59f0: 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
5a00: 67 65 28 70 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d  ge(p, &aMem[pOp-
5a10: 3e 70 33 5d 29 3b 0a 20 20 20 20 7d 0a 23 65 6e  >p3]);.    }.#en
5a20: 64 69 66 0a 20 20 0a 20 20 20 20 73 77 69 74 63  dif.  .    switc
5a30: 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29  h( pOp->opcode )
5a40: 7b 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  {../************
5a50: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5a60: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5a70: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5a80: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5a90: 2a 0a 2a 2a 20 57 68 61 74 20 66 6f 6c 6c 6f 77  *.** What follow
5aa0: 73 20 69 73 20 61 20 6d 61 73 73 69 76 65 20 73  s is a massive s
5ab0: 77 69 74 63 68 20 73 74 61 74 65 6d 65 6e 74 20  witch statement 
5ac0: 77 68 65 72 65 20 65 61 63 68 20 63 61 73 65 20  where each case 
5ad0: 69 6d 70 6c 65 6d 65 6e 74 73 20 61 0a 2a 2a 20  implements a.** 
5ae0: 73 65 70 61 72 61 74 65 20 69 6e 73 74 72 75 63  separate instruc
5af0: 74 69 6f 6e 20 69 6e 20 74 68 65 20 76 69 72 74  tion in the virt
5b00: 75 61 6c 20 6d 61 63 68 69 6e 65 2e 20 20 49 66  ual machine.  If
5b10: 20 77 65 20 66 6f 6c 6c 6f 77 20 74 68 65 20 75   we follow the u
5b20: 73 75 61 6c 0a 2a 2a 20 69 6e 64 65 6e 74 61 74  sual.** indentat
5b30: 69 6f 6e 20 63 6f 6e 76 65 6e 74 69 6f 6e 73 2c  ion conventions,
5b40: 20 65 61 63 68 20 63 61 73 65 20 73 68 6f 75 6c   each case shoul
5b50: 64 20 62 65 20 69 6e 64 65 6e 74 65 64 20 62 79  d be indented by
5b60: 20 36 20 73 70 61 63 65 73 2e 20 20 42 75 74 0a   6 spaces.  But.
5b70: 2a 2a 20 74 68 61 74 20 69 73 20 61 20 6c 6f 74  ** that is a lot
5b80: 20 6f 66 20 77 61 73 74 65 64 20 73 70 61 63 65   of wasted space
5b90: 20 6f 6e 20 74 68 65 20 6c 65 66 74 20 6d 61 72   on the left mar
5ba0: 67 69 6e 2e 20 20 53 6f 20 74 68 65 20 63 6f 64  gin.  So the cod
5bb0: 65 20 77 69 74 68 69 6e 0a 2a 2a 20 74 68 65 20  e within.** the 
5bc0: 73 77 69 74 63 68 20 73 74 61 74 65 6d 65 6e 74  switch statement
5bd0: 20 77 69 6c 6c 20 62 72 65 61 6b 20 77 69 74 68   will break with
5be0: 20 63 6f 6e 76 65 6e 74 69 6f 6e 20 61 6e 64 20   convention and 
5bf0: 62 65 20 66 6c 75 73 68 2d 6c 65 66 74 2e 20 41  be flush-left. A
5c00: 6e 6f 74 68 65 72 0a 2a 2a 20 62 69 67 20 63 6f  nother.** big co
5c10: 6d 6d 65 6e 74 20 28 73 69 6d 69 6c 61 72 20 74  mment (similar t
5c20: 6f 20 74 68 69 73 20 6f 6e 65 29 20 77 69 6c 6c  o this one) will
5c30: 20 6d 61 72 6b 20 74 68 65 20 70 6f 69 6e 74 20   mark the point 
5c40: 69 6e 20 74 68 65 20 63 6f 64 65 20 77 68 65 72  in the code wher
5c50: 65 0a 2a 2a 20 77 65 20 74 72 61 6e 73 69 74 69  e.** we transiti
5c60: 6f 6e 20 62 61 63 6b 20 74 6f 20 6e 6f 72 6d 61  on back to norma
5c70: 6c 20 69 6e 64 65 6e 74 61 74 69 6f 6e 2e 0a 2a  l indentation..*
5c80: 2a 0a 2a 2a 20 54 68 65 20 66 6f 72 6d 61 74 74  *.** The formatt
5c90: 69 6e 67 20 6f 66 20 65 61 63 68 20 63 61 73 65  ing of each case
5ca0: 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 2e 20 20   is important.  
5cb0: 54 68 65 20 6d 61 6b 65 66 69 6c 65 20 66 6f 72  The makefile for
5cc0: 20 53 51 4c 69 74 65 0a 2a 2a 20 67 65 6e 65 72   SQLite.** gener
5cd0: 61 74 65 73 20 74 77 6f 20 43 20 66 69 6c 65 73  ates two C files
5ce0: 20 22 6f 70 63 6f 64 65 73 2e 68 22 20 61 6e 64   "opcodes.h" and
5cf0: 20 22 6f 70 63 6f 64 65 73 2e 63 22 20 62 79 20   "opcodes.c" by 
5d00: 73 63 61 6e 6e 69 6e 67 20 74 68 69 73 0a 2a 2a  scanning this.**
5d10: 20 66 69 6c 65 20 6c 6f 6f 6b 69 6e 67 20 66 6f   file looking fo
5d20: 72 20 6c 69 6e 65 73 20 74 68 61 74 20 62 65 67  r lines that beg
5d30: 69 6e 20 77 69 74 68 20 22 63 61 73 65 20 4f 50  in with "case OP
5d40: 5f 22 2e 20 20 54 68 65 20 6f 70 63 6f 64 65 73  _".  The opcodes
5d50: 2e 68 20 66 69 6c 65 73 0a 2a 2a 20 77 69 6c 6c  .h files.** will
5d60: 20 62 65 20 66 69 6c 6c 65 64 20 77 69 74 68 20   be filled with 
5d70: 23 64 65 66 69 6e 65 73 20 74 68 61 74 20 67 69  #defines that gi
5d80: 76 65 20 75 6e 69 71 75 65 20 69 6e 74 65 67 65  ve unique intege
5d90: 72 20 76 61 6c 75 65 73 20 74 6f 20 65 61 63 68  r values to each
5da0: 0a 2a 2a 20 6f 70 63 6f 64 65 20 61 6e 64 20 74  .** opcode and t
5db0: 68 65 20 6f 70 63 6f 64 65 73 2e 63 20 66 69 6c  he opcodes.c fil
5dc0: 65 20 69 73 20 66 69 6c 6c 65 64 20 77 69 74 68  e is filled with
5dd0: 20 61 6e 20 61 72 72 61 79 20 6f 66 20 73 74 72   an array of str
5de0: 69 6e 67 73 20 77 68 65 72 65 0a 2a 2a 20 65 61  ings where.** ea
5df0: 63 68 20 73 74 72 69 6e 67 20 69 73 20 74 68 65  ch string is the
5e00: 20 73 79 6d 62 6f 6c 69 63 20 6e 61 6d 65 20 66   symbolic name f
5e10: 6f 72 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e  or the correspon
5e20: 64 69 6e 67 20 6f 70 63 6f 64 65 2e 20 20 49 66  ding opcode.  If
5e30: 20 74 68 65 0a 2a 2a 20 63 61 73 65 20 73 74 61   the.** case sta
5e40: 74 65 6d 65 6e 74 20 69 73 20 66 6f 6c 6c 6f 77  tement is follow
5e50: 65 64 20 62 79 20 61 20 63 6f 6d 6d 65 6e 74 20  ed by a comment 
5e60: 6f 66 20 74 68 65 20 66 6f 72 6d 20 22 2f 23 20  of the form "/# 
5e70: 73 61 6d 65 20 61 73 20 2e 2e 2e 20 23 2f 22 0a  same as ... #/".
5e80: 2a 2a 20 74 68 61 74 20 63 6f 6d 6d 65 6e 74 20  ** that comment 
5e90: 69 73 20 75 73 65 64 20 74 6f 20 64 65 74 65 72  is used to deter
5ea0: 6d 69 6e 65 20 74 68 65 20 70 61 72 74 69 63 75  mine the particu
5eb0: 6c 61 72 20 76 61 6c 75 65 20 6f 66 20 74 68 65  lar value of the
5ec0: 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 4f   opcode..**.** O
5ed0: 74 68 65 72 20 6b 65 79 77 6f 72 64 73 20 69 6e  ther keywords in
5ee0: 20 74 68 65 20 63 6f 6d 6d 65 6e 74 20 74 68 61   the comment tha
5ef0: 74 20 66 6f 6c 6c 6f 77 73 20 65 61 63 68 20 63  t follows each c
5f00: 61 73 65 20 61 72 65 20 75 73 65 64 20 74 6f 0a  ase are used to.
5f10: 2a 2a 20 63 6f 6e 73 74 72 75 63 74 20 74 68 65  ** construct the
5f20: 20 4f 50 46 4c 47 5f 49 4e 49 54 49 41 4c 49 5a   OPFLG_INITIALIZ
5f30: 45 52 20 76 61 6c 75 65 20 74 68 61 74 20 69 6e  ER value that in
5f40: 69 74 69 61 6c 69 7a 65 73 20 6f 70 63 6f 64 65  itializes opcode
5f50: 50 72 6f 70 65 72 74 79 5b 5d 2e 0a 2a 2a 20 4b  Property[]..** K
5f60: 65 79 77 6f 72 64 73 20 69 6e 63 6c 75 64 65 3a  eywords include:
5f70: 20 69 6e 31 2c 20 69 6e 32 2c 20 69 6e 33 2c 20   in1, in2, in3, 
5f80: 6f 75 74 32 5f 70 72 65 72 65 6c 65 61 73 65 2c  out2_prerelease,
5f90: 20 6f 75 74 32 2c 20 6f 75 74 33 2e 20 20 53 65   out2, out3.  Se
5fa0: 65 0a 2a 2a 20 74 68 65 20 6d 6b 6f 70 63 6f 64  e.** the mkopcod
5fb0: 65 68 2e 61 77 6b 20 73 63 72 69 70 74 20 66 6f  eh.awk script fo
5fc0: 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66  r additional inf
5fd0: 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  ormation..**.** 
5fe0: 44 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 61 62  Documentation ab
5ff0: 6f 75 74 20 56 44 42 45 20 6f 70 63 6f 64 65 73  out VDBE opcodes
6000: 20 69 73 20 67 65 6e 65 72 61 74 65 64 20 62 79   is generated by
6010: 20 73 63 61 6e 6e 69 6e 67 20 74 68 69 73 20 66   scanning this f
6020: 69 6c 65 0a 2a 2a 20 66 6f 72 20 6c 69 6e 65 73  ile.** for lines
6030: 20 6f 66 20 74 68 61 74 20 63 6f 6e 74 61 69 6e   of that contain
6040: 20 22 4f 70 63 6f 64 65 3a 22 2e 20 20 54 68 61   "Opcode:".  Tha
6050: 74 20 6c 69 6e 65 20 61 6e 64 20 61 6c 6c 20 73  t line and all s
6060: 75 62 73 65 71 75 65 6e 74 0a 2a 2a 20 63 6f 6d  ubsequent.** com
6070: 6d 65 6e 74 20 6c 69 6e 65 73 20 61 72 65 20 75  ment lines are u
6080: 73 65 64 20 69 6e 20 74 68 65 20 67 65 6e 65 72  sed in the gener
6090: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6f 70 63  ation of the opc
60a0: 6f 64 65 2e 68 74 6d 6c 20 64 6f 63 75 6d 65 6e  ode.html documen
60b0: 74 61 74 69 6f 6e 0a 2a 2a 20 66 69 6c 65 2e 0a  tation.** file..
60c0: 2a 2a 0a 2a 2a 20 53 55 4d 4d 41 52 59 3a 0a 2a  **.** SUMMARY:.*
60d0: 2a 0a 2a 2a 20 20 20 20 20 46 6f 72 6d 61 74 74  *.**     Formatt
60e0: 69 6e 67 20 69 73 20 69 6d 70 6f 72 74 61 6e 74  ing is important
60f0: 20 74 6f 20 73 63 72 69 70 74 73 20 74 68 61 74   to scripts that
6100: 20 73 63 61 6e 20 74 68 69 73 20 66 69 6c 65 2e   scan this file.
6110: 0a 2a 2a 20 20 20 20 20 44 6f 20 6e 6f 74 20 64  .**     Do not d
6120: 65 76 69 61 74 65 20 66 72 6f 6d 20 74 68 65 20  eviate from the 
6130: 66 6f 72 6d 61 74 74 69 6e 67 20 73 74 79 6c 65  formatting style
6140: 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 75 73   currently in us
6150: 65 2e 0a 2a 2a 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  e..**.**********
6160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6170: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6180: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6190: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
61a0: 2a 2a 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  ***/../* Opcode:
61b0: 20 20 47 6f 74 6f 20 2a 20 50 32 20 2a 20 2a 20    Goto * P2 * * 
61c0: 2a 0a 2a 2a 0a 2a 2a 20 41 6e 20 75 6e 63 6f 6e  *.**.** An uncon
61d0: 64 69 74 69 6f 6e 61 6c 20 6a 75 6d 70 20 74 6f  ditional jump to
61e0: 20 61 64 64 72 65 73 73 20 50 32 2e 0a 2a 2a 20   address P2..** 
61f0: 54 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63  The next instruc
6200: 74 69 6f 6e 20 65 78 65 63 75 74 65 64 20 77 69  tion executed wi
6210: 6c 6c 20 62 65 20 0a 2a 2a 20 74 68 65 20 6f 6e  ll be .** the on
6220: 65 20 61 74 20 69 6e 64 65 78 20 50 32 20 66 72  e at index P2 fr
6230: 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67  om the beginning
6240: 20 6f 66 0a 2a 2a 20 74 68 65 20 70 72 6f 67 72   of.** the progr
6250: 61 6d 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 47  am..*/.case OP_G
6260: 6f 74 6f 3a 20 7b 20 20 20 20 20 20 20 20 20 20  oto: {          
6270: 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
6280: 43 48 45 43 4b 5f 46 4f 52 5f 49 4e 54 45 52 52  CHECK_FOR_INTERR
6290: 55 50 54 3b 0a 20 20 70 63 20 3d 20 70 4f 70 2d  UPT;.  pc = pOp-
62a0: 3e 70 32 20 2d 20 31 3b 0a 20 20 62 72 65 61 6b  >p2 - 1;.  break
62b0: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
62c0: 20 47 6f 73 75 62 20 50 31 20 50 32 20 2a 20 2a   Gosub P1 P2 * *
62d0: 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 74   *.**.** Write t
62e0: 68 65 20 63 75 72 72 65 6e 74 20 61 64 64 72 65  he current addre
62f0: 73 73 20 6f 6e 74 6f 20 72 65 67 69 73 74 65 72  ss onto register
6300: 20 50 31 0a 2a 2a 20 61 6e 64 20 74 68 65 6e 20   P1.** and then 
6310: 6a 75 6d 70 20 74 6f 20 61 64 64 72 65 73 73 20  jump to address 
6320: 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 47  P2..*/.case OP_G
6330: 6f 73 75 62 3a 20 7b 20 20 20 20 20 20 20 20 20  osub: {         
6340: 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20     /* jump, in1 
6350: 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
6360: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  m[pOp->p1];.  as
6370: 73 65 72 74 28 20 28 70 49 6e 31 2d 3e 66 6c 61  sert( (pIn1->fla
6380: 67 73 20 26 20 4d 45 4d 5f 44 79 6e 29 3d 3d 30  gs & MEM_Dyn)==0
6390: 20 29 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f   );.  memAboutTo
63a0: 43 68 61 6e 67 65 28 70 2c 20 70 49 6e 31 29 3b  Change(p, pIn1);
63b0: 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d  .  pIn1->flags =
63c0: 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 70 49 6e 31   MEM_Int;.  pIn1
63d0: 2d 3e 75 2e 69 20 3d 20 70 63 3b 0a 20 20 52 45  ->u.i = pc;.  RE
63e0: 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
63f0: 2d 3e 70 31 2c 20 70 49 6e 31 29 3b 0a 20 20 70  ->p1, pIn1);.  p
6400: 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
6410: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
6420: 4f 70 63 6f 64 65 3a 20 20 52 65 74 75 72 6e 20  Opcode:  Return 
6430: 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  P1 * * * *.**.**
6440: 20 4a 75 6d 70 20 74 6f 20 74 68 65 20 6e 65 78   Jump to the nex
6450: 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 66  t instruction af
6460: 74 65 72 20 74 68 65 20 61 64 64 72 65 73 73 20  ter the address 
6470: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a  in register P1..
6480: 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 74 75 72  */.case OP_Retur
6490: 6e 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f  n: {           /
64a0: 2a 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20  * in1 */.  pIn1 
64b0: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
64c0: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 31  ;.  assert( pIn1
64d0: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
64e0: 74 20 29 3b 0a 20 20 70 63 20 3d 20 28 69 6e 74  t );.  pc = (int
64f0: 29 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20 62 72  )pIn1->u.i;.  br
6500: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
6510: 65 3a 20 20 59 69 65 6c 64 20 50 31 20 2a 20 2a  e:  Yield P1 * *
6520: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 77 61 70 20   * *.**.** Swap 
6530: 74 68 65 20 70 72 6f 67 72 61 6d 20 63 6f 75 6e  the program coun
6540: 74 65 72 20 77 69 74 68 20 74 68 65 20 76 61 6c  ter with the val
6550: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
6560: 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 59 69  1..*/.case OP_Yi
6570: 65 6c 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20  eld: {          
6580: 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 69 6e    /* in1 */.  in
6590: 74 20 70 63 44 65 73 74 3b 0a 20 20 70 49 6e 31  t pcDest;.  pIn1
65a0: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
65b0: 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 49  ];.  assert( (pI
65c0: 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
65d0: 44 79 6e 29 3d 3d 30 20 29 3b 0a 20 20 70 49 6e  Dyn)==0 );.  pIn
65e0: 31 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49  1->flags = MEM_I
65f0: 6e 74 3b 0a 20 20 70 63 44 65 73 74 20 3d 20 28  nt;.  pcDest = (
6600: 69 6e 74 29 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20  int)pIn1->u.i;. 
6610: 20 70 49 6e 31 2d 3e 75 2e 69 20 3d 20 70 63 3b   pIn1->u.i = pc;
6620: 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43  .  REGISTER_TRAC
6630: 45 28 70 4f 70 2d 3e 70 31 2c 20 70 49 6e 31 29  E(pOp->p1, pIn1)
6640: 3b 0a 20 20 70 63 20 3d 20 70 63 44 65 73 74 3b  ;.  pc = pcDest;
6650: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
6660: 4f 70 63 6f 64 65 3a 20 20 48 61 6c 74 49 66 4e  Opcode:  HaltIfN
6670: 75 6c 6c 20 20 50 31 20 50 32 20 50 33 20 50 34  ull  P1 P2 P3 P4
6680: 20 2a 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b 20 74   *.**.** Check t
6690: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
66a0: 73 74 65 72 20 50 33 2e 20 20 49 66 20 69 73 20  ster P3.  If is 
66b0: 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 48 61 6c  is NULL then Hal
66c0: 74 20 75 73 69 6e 67 0a 2a 2a 20 70 61 72 61 6d  t using.** param
66d0: 65 74 65 72 20 50 31 2c 20 50 32 2c 20 61 6e 64  eter P1, P2, and
66e0: 20 50 34 20 61 73 20 69 66 20 74 68 69 73 20 77   P4 as if this w
66f0: 65 72 65 20 61 20 48 61 6c 74 20 69 6e 73 74 72  ere a Halt instr
6700: 75 63 74 69 6f 6e 2e 20 20 49 66 20 74 68 65 0a  uction.  If the.
6710: 2a 2a 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  ** value in regi
6720: 73 74 65 72 20 50 33 20 69 73 20 6e 6f 74 20 4e  ster P3 is not N
6730: 55 4c 4c 2c 20 74 68 65 6e 20 74 68 69 73 20 72  ULL, then this r
6740: 6f 75 74 69 6e 65 20 69 73 20 61 20 6e 6f 2d 6f  outine is a no-o
6750: 70 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 48 61  p..*/.case OP_Ha
6760: 6c 74 49 66 4e 75 6c 6c 3a 20 7b 20 20 20 20 20  ltIfNull: {     
6770: 20 2f 2a 20 69 6e 33 20 2a 2f 0a 20 20 70 49 6e   /* in3 */.  pIn
6780: 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  3 = &aMem[pOp->p
6790: 33 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 33 2d  3];.  if( (pIn3-
67a0: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
67b0: 6c 29 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20  l)==0 ) break;. 
67c0: 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68   /* Fall through
67d0: 20 69 6e 74 6f 20 4f 50 5f 48 61 6c 74 20 2a 2f   into OP_Halt */
67e0: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20  .}../* Opcode:  
67f0: 48 61 6c 74 20 50 31 20 50 32 20 2a 20 50 34 20  Halt P1 P2 * P4 
6800: 2a 0a 2a 2a 0a 2a 2a 20 45 78 69 74 20 69 6d 6d  *.**.** Exit imm
6810: 65 64 69 61 74 65 6c 79 2e 20 20 41 6c 6c 20 6f  ediately.  All o
6820: 70 65 6e 20 63 75 72 73 6f 72 73 2c 20 65 74 63  pen cursors, etc
6830: 20 61 72 65 20 63 6c 6f 73 65 64 0a 2a 2a 20 61   are closed.** a
6840: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 2e 0a 2a 2a  utomatically..**
6850: 0a 2a 2a 20 50 31 20 69 73 20 74 68 65 20 72 65  .** P1 is the re
6860: 73 75 6c 74 20 63 6f 64 65 20 72 65 74 75 72 6e  sult code return
6870: 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 65 78  ed by sqlite3_ex
6880: 65 63 28 29 2c 20 73 71 6c 69 74 65 33 5f 72 65  ec(), sqlite3_re
6890: 73 65 74 28 29 2c 0a 2a 2a 20 6f 72 20 73 71 6c  set(),.** or sql
68a0: 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 29 2e  ite3_finalize().
68b0: 20 20 46 6f 72 20 61 20 6e 6f 72 6d 61 6c 20 68    For a normal h
68c0: 61 6c 74 2c 20 74 68 69 73 20 73 68 6f 75 6c 64  alt, this should
68d0: 20 62 65 20 53 51 4c 49 54 45 5f 4f 4b 20 28 30   be SQLITE_OK (0
68e0: 29 2e 0a 2a 2a 20 46 6f 72 20 65 72 72 6f 72 73  )..** For errors
68f0: 2c 20 69 74 20 63 61 6e 20 62 65 20 73 6f 6d 65  , it can be some
6900: 20 6f 74 68 65 72 20 76 61 6c 75 65 2e 20 20 49   other value.  I
6910: 66 20 50 31 21 3d 30 20 74 68 65 6e 20 50 32 20  f P1!=0 then P2 
6920: 77 69 6c 6c 20 64 65 74 65 72 6d 69 6e 65 0a 2a  will determine.*
6930: 2a 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  * whether or not
6940: 20 74 6f 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65   to rollback the
6950: 20 63 75 72 72 65 6e 74 20 74 72 61 6e 73 61 63   current transac
6960: 74 69 6f 6e 2e 20 20 44 6f 20 6e 6f 74 20 72 6f  tion.  Do not ro
6970: 6c 6c 62 61 63 6b 0a 2a 2a 20 69 66 20 50 32 3d  llback.** if P2=
6980: 3d 4f 45 5f 46 61 69 6c 2e 20 44 6f 20 74 68 65  =OE_Fail. Do the
6990: 20 72 6f 6c 6c 62 61 63 6b 20 69 66 20 50 32 3d   rollback if P2=
69a0: 3d 4f 45 5f 52 6f 6c 6c 62 61 63 6b 2e 20 20 49  =OE_Rollback.  I
69b0: 66 20 50 32 3d 3d 4f 45 5f 41 62 6f 72 74 2c 0a  f P2==OE_Abort,.
69c0: 2a 2a 20 74 68 65 6e 20 62 61 63 6b 20 6f 75 74  ** then back out
69d0: 20 61 6c 6c 20 63 68 61 6e 67 65 73 20 74 68 61   all changes tha
69e0: 74 20 68 61 76 65 20 6f 63 63 75 72 72 65 64 20  t have occurred 
69f0: 64 75 72 69 6e 67 20 74 68 69 73 20 65 78 65 63  during this exec
6a00: 75 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20  ution of the.** 
6a10: 56 44 42 45 2c 20 62 75 74 20 64 6f 20 6e 6f 74  VDBE, but do not
6a20: 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20 74 72   rollback the tr
6a30: 61 6e 73 61 63 74 69 6f 6e 2e 20 0a 2a 2a 0a 2a  ansaction. .**.*
6a40: 2a 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20 6e  * If P4 is not n
6a50: 75 6c 6c 20 74 68 65 6e 20 69 74 20 69 73 20 61  ull then it is a
6a60: 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20  n error message 
6a70: 73 74 72 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 54 68  string..**.** Th
6a80: 65 72 65 20 69 73 20 61 6e 20 69 6d 70 6c 69 65  ere is an implie
6a90: 64 20 22 48 61 6c 74 20 30 20 30 20 30 22 20 69  d "Halt 0 0 0" i
6aa0: 6e 73 74 72 75 63 74 69 6f 6e 20 69 6e 73 65 72  nstruction inser
6ab0: 74 65 64 20 61 74 20 74 68 65 20 76 65 72 79 20  ted at the very 
6ac0: 65 6e 64 20 6f 66 0a 2a 2a 20 65 76 65 72 79 20  end of.** every 
6ad0: 70 72 6f 67 72 61 6d 2e 20 20 53 6f 20 61 20 6a  program.  So a j
6ae0: 75 6d 70 20 70 61 73 74 20 74 68 65 20 6c 61 73  ump past the las
6af0: 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 66  t instruction of
6b00: 20 74 68 65 20 70 72 6f 67 72 61 6d 0a 2a 2a 20   the program.** 
6b10: 69 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 65  is the same as e
6b20: 78 65 63 75 74 69 6e 67 20 48 61 6c 74 2e 0a 2a  xecuting Halt..*
6b30: 2f 0a 63 61 73 65 20 4f 50 5f 48 61 6c 74 3a 20  /.case OP_Halt: 
6b40: 7b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 3d  {.  if( pOp->p1=
6b50: 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 70 2d  =SQLITE_OK && p-
6b60: 3e 70 46 72 61 6d 65 20 29 7b 0a 20 20 20 20 2f  >pFrame ){.    /
6b70: 2a 20 48 61 6c 74 20 74 68 65 20 73 75 62 2d 70  * Halt the sub-p
6b80: 72 6f 67 72 61 6d 2e 20 52 65 74 75 72 6e 20 63  rogram. Return c
6b90: 6f 6e 74 72 6f 6c 20 74 6f 20 74 68 65 20 70 61  ontrol to the pa
6ba0: 72 65 6e 74 20 66 72 61 6d 65 2e 20 2a 2f 0a 20  rent frame. */. 
6bb0: 20 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46     VdbeFrame *pF
6bc0: 72 61 6d 65 20 3d 20 70 2d 3e 70 46 72 61 6d 65  rame = p->pFrame
6bd0: 3b 0a 20 20 20 20 70 2d 3e 70 46 72 61 6d 65 20  ;.    p->pFrame 
6be0: 3d 20 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e  = pFrame->pParen
6bf0: 74 3b 0a 20 20 20 20 70 2d 3e 6e 46 72 61 6d 65  t;.    p->nFrame
6c00: 2d 2d 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  --;.    sqlite3V
6c10: 64 62 65 53 65 74 43 68 61 6e 67 65 73 28 64 62  dbeSetChanges(db
6c20: 2c 20 70 2d 3e 6e 43 68 61 6e 67 65 29 3b 0a 20  , p->nChange);. 
6c30: 20 20 20 70 63 20 3d 20 73 71 6c 69 74 65 33 56     pc = sqlite3V
6c40: 64 62 65 46 72 61 6d 65 52 65 73 74 6f 72 65 28  dbeFrameRestore(
6c50: 70 46 72 61 6d 65 29 3b 0a 20 20 20 20 69 66 28  pFrame);.    if(
6c60: 20 70 4f 70 2d 3e 70 32 3d 3d 4f 45 5f 49 67 6e   pOp->p2==OE_Ign
6c70: 6f 72 65 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20  ore ){.      /* 
6c80: 49 6e 73 74 72 75 63 74 69 6f 6e 20 70 63 20 69  Instruction pc i
6c90: 73 20 74 68 65 20 4f 50 5f 50 72 6f 67 72 61 6d  s the OP_Program
6ca0: 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68   that invoked th
6cb0: 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 0a 20  e sub-program . 
6cc0: 20 20 20 20 20 2a 2a 20 63 75 72 72 65 6e 74 6c       ** currentl
6cd0: 79 20 62 65 69 6e 67 20 68 61 6c 74 65 64 2e 20  y being halted. 
6ce0: 49 66 20 74 68 65 20 70 32 20 69 6e 73 74 72 75  If the p2 instru
6cf0: 63 74 69 6f 6e 20 6f 66 20 74 68 69 73 20 4f 50  ction of this OP
6d00: 5f 48 61 6c 74 0a 20 20 20 20 20 20 2a 2a 20 69  _Halt.      ** i
6d10: 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 73 65  nstruction is se
6d20: 74 20 74 6f 20 4f 45 5f 49 67 6e 6f 72 65 2c 20  t to OE_Ignore, 
6d30: 74 68 65 6e 20 74 68 65 20 73 75 62 2d 70 72 6f  then the sub-pro
6d40: 67 72 61 6d 20 69 73 20 74 68 72 6f 77 69 6e 67  gram is throwing
6d50: 0a 20 20 20 20 20 20 2a 2a 20 61 6e 20 49 47 4e  .      ** an IGN
6d60: 4f 52 45 20 65 78 63 65 70 74 69 6f 6e 2e 20 49  ORE exception. I
6d70: 6e 20 74 68 69 73 20 63 61 73 65 20 6a 75 6d 70  n this case jump
6d80: 20 74 6f 20 74 68 65 20 61 64 64 72 65 73 73 20   to the address 
6d90: 73 70 65 63 69 66 69 65 64 0a 20 20 20 20 20 20  specified.      
6da0: 2a 2a 20 61 73 20 74 68 65 20 70 32 20 6f 66 20  ** as the p2 of 
6db0: 74 68 65 20 63 61 6c 6c 69 6e 67 20 4f 50 5f 50  the calling OP_P
6dc0: 72 6f 67 72 61 6d 2e 20 20 2a 2f 0a 20 20 20 20  rogram.  */.    
6dd0: 20 20 70 63 20 3d 20 70 2d 3e 61 4f 70 5b 70 63    pc = p->aOp[pc
6de0: 5d 2e 70 32 2d 31 3b 0a 20 20 20 20 7d 0a 20 20  ].p2-1;.    }.  
6df0: 20 20 61 4f 70 20 3d 20 70 2d 3e 61 4f 70 3b 0a    aOp = p->aOp;.
6e00: 20 20 20 20 61 4d 65 6d 20 3d 20 70 2d 3e 61 4d      aMem = p->aM
6e10: 65 6d 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20  em;.    break;. 
6e20: 20 7d 0a 0a 20 20 70 2d 3e 72 63 20 3d 20 70 4f   }..  p->rc = pO
6e30: 70 2d 3e 70 31 3b 0a 20 20 70 2d 3e 65 72 72 6f  p->p1;.  p->erro
6e40: 72 41 63 74 69 6f 6e 20 3d 20 28 75 38 29 70 4f  rAction = (u8)pO
6e50: 70 2d 3e 70 32 3b 0a 20 20 70 2d 3e 70 63 20 3d  p->p2;.  p->pc =
6e60: 20 70 63 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e   pc;.  if( pOp->
6e70: 70 34 2e 7a 20 29 7b 0a 20 20 20 20 61 73 73 65  p4.z ){.    asse
6e80: 72 74 28 20 70 2d 3e 72 63 21 3d 53 51 4c 49 54  rt( p->rc!=SQLIT
6e90: 45 5f 4f 4b 20 29 3b 0a 20 20 20 20 73 71 6c 69  E_OK );.    sqli
6ea0: 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d  te3SetString(&p-
6eb0: 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 25  >zErrMsg, db, "%
6ec0: 73 22 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a  s", pOp->p4.z);.
6ed0: 20 20 20 20 74 65 73 74 63 61 73 65 28 20 73 71      testcase( sq
6ee0: 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69  lite3GlobalConfi
6ef0: 67 2e 78 4c 6f 67 21 3d 30 20 29 3b 0a 20 20 20  g.xLog!=0 );.   
6f00: 20 73 71 6c 69 74 65 33 5f 6c 6f 67 28 70 4f 70   sqlite3_log(pOp
6f10: 2d 3e 70 31 2c 20 22 61 62 6f 72 74 20 61 74 20  ->p1, "abort at 
6f20: 25 64 20 69 6e 20 5b 25 73 5d 3a 20 25 73 22 2c  %d in [%s]: %s",
6f30: 20 70 63 2c 20 70 2d 3e 7a 53 71 6c 2c 20 70 4f   pc, p->zSql, pO
6f40: 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 7d 65 6c 73  p->p4.z);.  }els
6f50: 65 20 69 66 28 20 70 2d 3e 72 63 20 29 7b 0a 20  e if( p->rc ){. 
6f60: 20 20 20 74 65 73 74 63 61 73 65 28 20 73 71 6c     testcase( sql
6f70: 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67  ite3GlobalConfig
6f80: 2e 78 4c 6f 67 21 3d 30 20 29 3b 0a 20 20 20 20  .xLog!=0 );.    
6f90: 73 71 6c 69 74 65 33 5f 6c 6f 67 28 70 4f 70 2d  sqlite3_log(pOp-
6fa0: 3e 70 31 2c 20 22 63 6f 6e 73 74 72 61 69 6e 74  >p1, "constraint
6fb0: 20 66 61 69 6c 65 64 20 61 74 20 25 64 20 69 6e   failed at %d in
6fc0: 20 5b 25 73 5d 22 2c 20 70 63 2c 20 70 2d 3e 7a   [%s]", pc, p->z
6fd0: 53 71 6c 29 3b 0a 20 20 7d 0a 20 20 72 63 20 3d  Sql);.  }.  rc =
6fe0: 20 73 71 6c 69 74 65 33 56 64 62 65 48 61 6c 74   sqlite3VdbeHalt
6ff0: 28 70 29 3b 0a 20 20 61 73 73 65 72 74 28 20 72  (p);.  assert( r
7000: 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 7c  c==SQLITE_BUSY |
7010: 7c 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  | rc==SQLITE_OK 
7020: 7c 7c 20 72 63 3d 3d 53 51 4c 49 54 45 5f 45 52  || rc==SQLITE_ER
7030: 52 4f 52 20 29 3b 0a 20 20 69 66 28 20 72 63 3d  ROR );.  if( rc=
7040: 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a  =SQLITE_BUSY ){.
7050: 20 20 20 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d      p->rc = rc =
7060: 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20   SQLITE_BUSY;.  
7070: 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72  }else{.    asser
7080: 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  t( rc==SQLITE_OK
7090: 20 7c 7c 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54   || p->rc==SQLIT
70a0: 45 5f 43 4f 4e 53 54 52 41 49 4e 54 20 29 3b 0a  E_CONSTRAINT );.
70b0: 20 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d      assert( rc==
70c0: 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 64 62 2d  SQLITE_OK || db-
70d0: 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3e 30  >nDeferredCons>0
70e0: 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 70 2d 3e   );.    rc = p->
70f0: 72 63 20 3f 20 53 51 4c 49 54 45 5f 45 52 52 4f  rc ? SQLITE_ERRO
7100: 52 20 3a 20 53 51 4c 49 54 45 5f 44 4f 4e 45 3b  R : SQLITE_DONE;
7110: 0a 20 20 7d 0a 20 20 67 6f 74 6f 20 76 64 62 65  .  }.  goto vdbe
7120: 5f 72 65 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a 20 4f  _return;.}../* O
7130: 70 63 6f 64 65 3a 20 49 6e 74 65 67 65 72 20 50  pcode: Integer P
7140: 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
7150: 20 54 68 65 20 33 32 2d 62 69 74 20 69 6e 74 65   The 32-bit inte
7160: 67 65 72 20 76 61 6c 75 65 20 50 31 20 69 73 20  ger value P1 is 
7170: 77 72 69 74 74 65 6e 20 69 6e 74 6f 20 72 65 67  written into reg
7180: 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73  ister P2..*/.cas
7190: 65 20 4f 50 5f 49 6e 74 65 67 65 72 3a 20 7b 20  e OP_Integer: { 
71a0: 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d          /* out2-
71b0: 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20  prerelease */.  
71c0: 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 4f 70 2d  pOut->u.i = pOp-
71d0: 3e 70 31 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  >p1;.  break;.}.
71e0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 74 36  ./* Opcode: Int6
71f0: 34 20 2a 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a  4 * P2 * P4 *.**
7200: 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e  .** P4 is a poin
7210: 74 65 72 20 74 6f 20 61 20 36 34 2d 62 69 74 20  ter to a 64-bit 
7220: 69 6e 74 65 67 65 72 20 76 61 6c 75 65 2e 0a 2a  integer value..*
7230: 2a 20 57 72 69 74 65 20 74 68 61 74 20 76 61 6c  * Write that val
7240: 75 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  ue into register
7250: 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P2..*/.case OP_
7260: 49 6e 74 36 34 3a 20 7b 20 20 20 20 20 20 20 20  Int64: {        
7270: 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65     /* out2-prere
7280: 6c 65 61 73 65 20 2a 2f 0a 20 20 61 73 73 65 72  lease */.  asser
7290: 74 28 20 70 4f 70 2d 3e 70 34 2e 70 49 36 34 21  t( pOp->p4.pI64!
72a0: 3d 30 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e  =0 );.  pOut->u.
72b0: 69 20 3d 20 2a 70 4f 70 2d 3e 70 34 2e 70 49 36  i = *pOp->p4.pI6
72c0: 34 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23  4;.  break;.}..#
72d0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
72e0: 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e  IT_FLOATING_POIN
72f0: 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 61  T./* Opcode: Rea
7300: 6c 20 2a 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a  l * P2 * P4 *.**
7310: 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e  .** P4 is a poin
7320: 74 65 72 20 74 6f 20 61 20 36 34 2d 62 69 74 20  ter to a 64-bit 
7330: 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 76  floating point v
7340: 61 6c 75 65 2e 0a 2a 2a 20 57 72 69 74 65 20 74  alue..** Write t
7350: 68 61 74 20 76 61 6c 75 65 20 69 6e 74 6f 20 72  hat value into r
7360: 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63  egister P2..*/.c
7370: 61 73 65 20 4f 50 5f 52 65 61 6c 3a 20 7b 20 20  ase OP_Real: {  
7380: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
7390: 65 20 61 73 20 54 4b 5f 46 4c 4f 41 54 2c 20 6f  e as TK_FLOAT, o
73a0: 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a  ut2-prerelease *
73b0: 2f 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20  /.  pOut->flags 
73c0: 3d 20 4d 45 4d 5f 52 65 61 6c 3b 0a 20 20 61 73  = MEM_Real;.  as
73d0: 73 65 72 74 28 20 21 73 71 6c 69 74 65 33 49 73  sert( !sqlite3Is
73e0: 4e 61 4e 28 2a 70 4f 70 2d 3e 70 34 2e 70 52 65  NaN(*pOp->p4.pRe
73f0: 61 6c 29 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 72  al) );.  pOut->r
7400: 20 3d 20 2a 70 4f 70 2d 3e 70 34 2e 70 52 65 61   = *pOp->p4.pRea
7410: 6c 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65  l;.  break;.}.#e
7420: 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  ndif../* Opcode:
7430: 20 53 74 72 69 6e 67 38 20 2a 20 50 32 20 2a 20   String8 * P2 * 
7440: 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 70 6f  P4 *.**.** P4 po
7450: 69 6e 74 73 20 74 6f 20 61 20 6e 75 6c 20 74 65  ints to a nul te
7460: 72 6d 69 6e 61 74 65 64 20 55 54 46 2d 38 20 73  rminated UTF-8 s
7470: 74 72 69 6e 67 2e 20 54 68 69 73 20 6f 70 63 6f  tring. This opco
7480: 64 65 20 69 73 20 74 72 61 6e 73 66 6f 72 6d 65  de is transforme
7490: 64 20 0a 2a 2a 20 69 6e 74 6f 20 61 6e 20 4f 50  d .** into an OP
74a0: 5f 53 74 72 69 6e 67 20 62 65 66 6f 72 65 20 69  _String before i
74b0: 74 20 69 73 20 65 78 65 63 75 74 65 64 20 66 6f  t is executed fo
74c0: 72 20 74 68 65 20 66 69 72 73 74 20 74 69 6d 65  r the first time
74d0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 74 72  ..*/.case OP_Str
74e0: 69 6e 67 38 3a 20 7b 20 20 20 20 20 20 20 20 20  ing8: {         
74f0: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 53 54  /* same as TK_ST
7500: 52 49 4e 47 2c 20 6f 75 74 32 2d 70 72 65 72 65  RING, out2-prere
7510: 6c 65 61 73 65 20 2a 2f 0a 20 20 61 73 73 65 72  lease */.  asser
7520: 74 28 20 70 4f 70 2d 3e 70 34 2e 7a 21 3d 30 20  t( pOp->p4.z!=0 
7530: 29 3b 0a 20 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  );.  pOp->opcode
7540: 20 3d 20 4f 50 5f 53 74 72 69 6e 67 3b 0a 20 20   = OP_String;.  
7550: 70 4f 70 2d 3e 70 31 20 3d 20 73 71 6c 69 74 65  pOp->p1 = sqlite
7560: 33 53 74 72 6c 65 6e 33 30 28 70 4f 70 2d 3e 70  3Strlen30(pOp->p
7570: 34 2e 7a 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53  4.z);..#ifndef S
7580: 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36  QLITE_OMIT_UTF16
7590: 0a 20 20 69 66 28 20 65 6e 63 6f 64 69 6e 67 21  .  if( encoding!
75a0: 3d 53 51 4c 49 54 45 5f 55 54 46 38 20 29 7b 0a  =SQLITE_UTF8 ){.
75b0: 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
75c0: 56 64 62 65 4d 65 6d 53 65 74 53 74 72 28 70 4f  VdbeMemSetStr(pO
75d0: 75 74 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 2d  ut, pOp->p4.z, -
75e0: 31 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20  1, SQLITE_UTF8, 
75f0: 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
7600: 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
7610: 54 45 5f 54 4f 4f 42 49 47 20 29 20 67 6f 74 6f  TE_TOOBIG ) goto
7620: 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 20 20 69 66   too_big;.    if
7630: 28 20 53 51 4c 49 54 45 5f 4f 4b 21 3d 73 71 6c  ( SQLITE_OK!=sql
7640: 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e  ite3VdbeChangeEn
7650: 63 6f 64 69 6e 67 28 70 4f 75 74 2c 20 65 6e 63  coding(pOut, enc
7660: 6f 64 69 6e 67 29 20 29 20 67 6f 74 6f 20 6e 6f  oding) ) goto no
7670: 5f 6d 65 6d 3b 0a 20 20 20 20 61 73 73 65 72 74  _mem;.    assert
7680: 28 20 70 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f 63 3d  ( pOut->zMalloc=
7690: 3d 70 4f 75 74 2d 3e 7a 20 29 3b 0a 20 20 20 20  =pOut->z );.    
76a0: 61 73 73 65 72 74 28 20 70 4f 75 74 2d 3e 66 6c  assert( pOut->fl
76b0: 61 67 73 20 26 20 4d 45 4d 5f 44 79 6e 20 29 3b  ags & MEM_Dyn );
76c0: 0a 20 20 20 20 70 4f 75 74 2d 3e 7a 4d 61 6c 6c  .    pOut->zMall
76d0: 6f 63 20 3d 20 30 3b 0a 20 20 20 20 70 4f 75 74  oc = 0;.    pOut
76e0: 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 53  ->flags |= MEM_S
76f0: 74 61 74 69 63 3b 0a 20 20 20 20 70 4f 75 74 2d  tatic;.    pOut-
7700: 3e 66 6c 61 67 73 20 26 3d 20 7e 4d 45 4d 5f 44  >flags &= ~MEM_D
7710: 79 6e 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d  yn;.    if( pOp-
7720: 3e 70 34 74 79 70 65 3d 3d 50 34 5f 44 59 4e 41  >p4type==P4_DYNA
7730: 4d 49 43 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  MIC ){.      sql
7740: 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 70  ite3DbFree(db, p
7750: 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 7d  Op->p4.z);.    }
7760: 0a 20 20 20 20 70 4f 70 2d 3e 70 34 74 79 70 65  .    pOp->p4type
7770: 20 3d 20 50 34 5f 44 59 4e 41 4d 49 43 3b 0a 20   = P4_DYNAMIC;. 
7780: 20 20 20 70 4f 70 2d 3e 70 34 2e 7a 20 3d 20 70     pOp->p4.z = p
7790: 4f 75 74 2d 3e 7a 3b 0a 20 20 20 20 70 4f 70 2d  Out->z;.    pOp-
77a0: 3e 70 31 20 3d 20 70 4f 75 74 2d 3e 6e 3b 0a 20  >p1 = pOut->n;. 
77b0: 20 7d 0a 23 65 6e 64 69 66 0a 20 20 69 66 28 20   }.#endif.  if( 
77c0: 70 4f 70 2d 3e 70 31 3e 64 62 2d 3e 61 4c 69 6d  pOp->p1>db->aLim
77d0: 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f  it[SQLITE_LIMIT_
77e0: 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 67  LENGTH] ){.    g
77f0: 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d  oto too_big;.  }
7800: 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75  .  /* Fall throu
7810: 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 63  gh to the next c
7820: 61 73 65 2c 20 4f 50 5f 53 74 72 69 6e 67 20 2a  ase, OP_String *
7830: 2f 0a 7d 0a 20 20 0a 2f 2a 20 4f 70 63 6f 64 65  /.}.  ./* Opcode
7840: 3a 20 53 74 72 69 6e 67 20 50 31 20 50 32 20 2a  : String P1 P2 *
7850: 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20   P4 *.**.** The 
7860: 73 74 72 69 6e 67 20 76 61 6c 75 65 20 50 34 20  string value P4 
7870: 6f 66 20 6c 65 6e 67 74 68 20 50 31 20 28 62 79  of length P1 (by
7880: 74 65 73 29 20 69 73 20 73 74 6f 72 65 64 20 69  tes) is stored i
7890: 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  n register P2..*
78a0: 2f 0a 63 61 73 65 20 4f 50 5f 53 74 72 69 6e 67  /.case OP_String
78b0: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  : {          /* 
78c0: 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20  out2-prerelease 
78d0: 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  */.  assert( pOp
78e0: 2d 3e 70 34 2e 7a 21 3d 30 20 29 3b 0a 20 20 70  ->p4.z!=0 );.  p
78f0: 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
7900: 5f 53 74 72 7c 4d 45 4d 5f 53 74 61 74 69 63 7c  _Str|MEM_Static|
7910: 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f 75 74  MEM_Term;.  pOut
7920: 2d 3e 7a 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b  ->z = pOp->p4.z;
7930: 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 70 4f 70  .  pOut->n = pOp
7940: 2d 3e 70 31 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e  ->p1;.  pOut->en
7950: 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20  c = encoding;.  
7960: 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53  UPDATE_MAX_BLOBS
7970: 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65  IZE(pOut);.  bre
7980: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
7990: 3a 20 4e 75 6c 6c 20 2a 20 50 32 20 2a 20 2a 20  : Null * P2 * * 
79a0: 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 61 20  *.**.** Write a 
79b0: 4e 55 4c 4c 20 69 6e 74 6f 20 72 65 67 69 73 74  NULL into regist
79c0: 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f  er P2..*/.case O
79d0: 50 5f 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20 20  P_Null: {       
79e0: 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72      /* out2-prer
79f0: 65 6c 65 61 73 65 20 2a 2f 0a 20 20 70 4f 75 74  elease */.  pOut
7a00: 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75  ->flags = MEM_Nu
7a10: 6c 6c 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  ll;.  break;.}..
7a20: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 6c 6f 62  ./* Opcode: Blob
7a30: 20 50 31 20 50 32 20 2a 20 50 34 0a 2a 2a 0a 2a   P1 P2 * P4.**.*
7a40: 2a 20 50 34 20 70 6f 69 6e 74 73 20 74 6f 20 61  * P4 points to a
7a50: 20 62 6c 6f 62 20 6f 66 20 64 61 74 61 20 50 31   blob of data P1
7a60: 20 62 79 74 65 73 20 6c 6f 6e 67 2e 20 20 53 74   bytes long.  St
7a70: 6f 72 65 20 74 68 69 73 0a 2a 2a 20 62 6c 6f 62  ore this.** blob
7a80: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e   in register P2.
7a90: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 6c 6f 62  .*/.case OP_Blob
7aa0: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
7ab0: 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65     /* out2-prere
7ac0: 6c 65 61 73 65 20 2a 2f 0a 20 20 61 73 73 65 72  lease */.  asser
7ad0: 74 28 20 70 4f 70 2d 3e 70 31 20 3c 3d 20 53 51  t( pOp->p1 <= SQ
7ae0: 4c 49 54 45 5f 4d 41 58 5f 4c 45 4e 47 54 48 20  LITE_MAX_LENGTH 
7af0: 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  );.  sqlite3Vdbe
7b00: 4d 65 6d 53 65 74 53 74 72 28 70 4f 75 74 2c 20  MemSetStr(pOut, 
7b10: 70 4f 70 2d 3e 70 34 2e 7a 2c 20 70 4f 70 2d 3e  pOp->p4.z, pOp->
7b20: 70 31 2c 20 30 2c 20 30 29 3b 0a 20 20 70 4f 75  p1, 0, 0);.  pOu
7b30: 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e  t->enc = encodin
7b40: 67 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f  g;.  UPDATE_MAX_
7b50: 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a  BLOBSIZE(pOut);.
7b60: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
7b70: 70 63 6f 64 65 3a 20 56 61 72 69 61 62 6c 65 20  pcode: Variable 
7b80: 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a  P1 P2 * P4 *.**.
7b90: 2a 2a 20 54 72 61 6e 73 66 65 72 20 74 68 65 20  ** Transfer the 
7ba0: 76 61 6c 75 65 73 20 6f 66 20 62 6f 75 6e 64 20  values of bound 
7bb0: 70 61 72 61 6d 65 74 65 72 20 50 31 20 69 6e 74  parameter P1 int
7bc0: 6f 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a  o register P2.**
7bd0: 0a 2a 2a 20 49 66 20 74 68 65 20 70 61 72 61 6d  .** If the param
7be0: 65 74 65 72 20 69 73 20 6e 61 6d 65 64 2c 20 74  eter is named, t
7bf0: 68 65 6e 20 69 74 73 20 6e 61 6d 65 20 61 70 70  hen its name app
7c00: 65 61 72 73 20 69 6e 20 50 34 20 61 6e 64 20 50  ears in P4 and P
7c10: 33 3d 3d 31 2e 0a 2a 2a 20 54 68 65 20 50 34 20  3==1..** The P4 
7c20: 76 61 6c 75 65 20 69 73 20 75 73 65 64 20 62 79  value is used by
7c30: 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61   sqlite3_bind_pa
7c40: 72 61 6d 65 74 65 72 5f 6e 61 6d 65 28 29 2e 0a  rameter_name()..
7c50: 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 61 72 69 61  */.case OP_Varia
7c60: 62 6c 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20  ble: {          
7c70: 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c    /* out2-prerel
7c80: 65 61 73 65 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  ease */.  Mem *p
7c90: 56 61 72 3b 20 20 20 20 20 20 20 2f 2a 20 56 61  Var;       /* Va
7ca0: 6c 75 65 20 62 65 69 6e 67 20 74 72 61 6e 73 66  lue being transf
7cb0: 65 72 72 65 64 20 2a 2f 0a 0a 20 20 61 73 73 65  erred */..  asse
7cc0: 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26 26  rt( pOp->p1>0 &&
7cd0: 20 70 4f 70 2d 3e 70 31 3c 3d 70 2d 3e 6e 56 61   pOp->p1<=p->nVa
7ce0: 72 20 29 3b 0a 20 20 70 56 61 72 20 3d 20 26 70  r );.  pVar = &p
7cf0: 2d 3e 61 56 61 72 5b 70 4f 70 2d 3e 70 31 20 2d  ->aVar[pOp->p1 -
7d00: 20 31 5d 3b 0a 20 20 69 66 28 20 73 71 6c 69 74   1];.  if( sqlit
7d10: 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28  e3VdbeMemTooBig(
7d20: 70 56 61 72 29 20 29 7b 0a 20 20 20 20 67 6f 74  pVar) ){.    got
7d30: 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20  o too_big;.  }. 
7d40: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
7d50: 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c  hallowCopy(pOut,
7d60: 20 70 56 61 72 2c 20 4d 45 4d 5f 53 74 61 74 69   pVar, MEM_Stati
7d70: 63 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58  c);.  UPDATE_MAX
7d80: 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b  _BLOBSIZE(pOut);
7d90: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
7da0: 4f 70 63 6f 64 65 3a 20 4d 6f 76 65 20 50 31 20  Opcode: Move P1 
7db0: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
7dc0: 4d 6f 76 65 20 74 68 65 20 76 61 6c 75 65 73 20  Move the values 
7dd0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 2e  in register P1..
7de0: 50 31 2b 50 33 2d 31 20 6f 76 65 72 20 69 6e 74  P1+P3-1 over int
7df0: 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72 73 20 50  o.** registers P
7e00: 32 2e 2e 50 32 2b 50 33 2d 31 2e 20 20 52 65 67  2..P2+P3-1.  Reg
7e10: 69 73 74 65 72 73 20 50 31 2e 2e 50 31 2b 50 31  isters P1..P1+P1
7e20: 2d 31 20 61 72 65 0a 2a 2a 20 6c 65 66 74 20 68  -1 are.** left h
7e30: 6f 6c 64 69 6e 67 20 61 20 4e 55 4c 4c 2e 20 20  olding a NULL.  
7e40: 49 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20 66  It is an error f
7e50: 6f 72 20 72 65 67 69 73 74 65 72 20 72 61 6e 67  or register rang
7e60: 65 73 0a 2a 2a 20 50 31 2e 2e 50 31 2b 50 33 2d  es.** P1..P1+P3-
7e70: 31 20 61 6e 64 20 50 32 2e 2e 50 32 2b 50 33 2d  1 and P2..P2+P3-
7e80: 31 20 74 6f 20 6f 76 65 72 6c 61 70 2e 0a 2a 2f  1 to overlap..*/
7e90: 0a 63 61 73 65 20 4f 50 5f 4d 6f 76 65 3a 20 7b  .case OP_Move: {
7ea0: 0a 20 20 63 68 61 72 20 2a 7a 4d 61 6c 6c 6f 63  .  char *zMalloc
7eb0: 3b 20 20 20 2f 2a 20 48 6f 6c 64 69 6e 67 20 76  ;   /* Holding v
7ec0: 61 72 69 61 62 6c 65 20 66 6f 72 20 61 6c 6c 6f  ariable for allo
7ed0: 63 61 74 65 64 20 6d 65 6d 6f 72 79 20 2a 2f 0a  cated memory */.
7ee0: 20 20 69 6e 74 20 6e 3b 20 20 20 20 20 20 20 20    int n;        
7ef0: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
7f00: 72 65 67 69 73 74 65 72 73 20 6c 65 66 74 20 74  registers left t
7f10: 6f 20 63 6f 70 79 20 2a 2f 0a 20 20 69 6e 74 20  o copy */.  int 
7f20: 70 31 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  p1;          /* 
7f30: 52 65 67 69 73 74 65 72 20 74 6f 20 63 6f 70 79  Register to copy
7f40: 20 66 72 6f 6d 20 2a 2f 0a 20 20 69 6e 74 20 70   from */.  int p
7f50: 32 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52  2;          /* R
7f60: 65 67 69 73 74 65 72 20 74 6f 20 63 6f 70 79 20  egister to copy 
7f70: 74 6f 20 2a 2f 0a 0a 20 20 6e 20 3d 20 70 4f 70  to */..  n = pOp
7f80: 2d 3e 70 33 3b 0a 20 20 70 31 20 3d 20 70 4f 70  ->p3;.  p1 = pOp
7f90: 2d 3e 70 31 3b 0a 20 20 70 32 20 3d 20 70 4f 70  ->p1;.  p2 = pOp
7fa0: 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20  ->p2;.  assert( 
7fb0: 6e 3e 30 20 26 26 20 70 31 3e 30 20 26 26 20 70  n>0 && p1>0 && p
7fc0: 32 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  2>0 );.  assert(
7fd0: 20 70 31 2b 6e 3c 3d 70 32 20 7c 7c 20 70 32 2b   p1+n<=p2 || p2+
7fe0: 6e 3c 3d 70 31 20 29 3b 0a 0a 20 20 70 49 6e 31  n<=p1 );..  pIn1
7ff0: 20 3d 20 26 61 4d 65 6d 5b 70 31 5d 3b 0a 20 20   = &aMem[p1];.  
8000: 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 32 5d  pOut = &aMem[p2]
8010: 3b 0a 20 20 77 68 69 6c 65 28 20 6e 2d 2d 20 29  ;.  while( n-- )
8020: 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  {.    assert( pO
8030: 75 74 3c 3d 26 61 4d 65 6d 5b 70 2d 3e 6e 4d 65  ut<=&aMem[p->nMe
8040: 6d 5d 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  m] );.    assert
8050: 28 20 70 49 6e 31 3c 3d 26 61 4d 65 6d 5b 70 2d  ( pIn1<=&aMem[p-
8060: 3e 6e 4d 65 6d 5d 20 29 3b 0a 20 20 20 20 61 73  >nMem] );.    as
8070: 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
8080: 28 70 49 6e 31 29 20 29 3b 0a 20 20 20 20 6d 65  (pIn1) );.    me
8090: 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
80a0: 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 7a 4d 61  , pOut);.    zMa
80b0: 6c 6c 6f 63 20 3d 20 70 4f 75 74 2d 3e 7a 4d 61  lloc = pOut->zMa
80c0: 6c 6c 6f 63 3b 0a 20 20 20 20 70 4f 75 74 2d 3e  lloc;.    pOut->
80d0: 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20 20  zMalloc = 0;.   
80e0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d   sqlite3VdbeMemM
80f0: 6f 76 65 28 70 4f 75 74 2c 20 70 49 6e 31 29 3b  ove(pOut, pIn1);
8100: 0a 20 20 20 20 70 49 6e 31 2d 3e 7a 4d 61 6c 6c  .    pIn1->zMall
8110: 6f 63 20 3d 20 7a 4d 61 6c 6c 6f 63 3b 0a 20 20  oc = zMalloc;.  
8120: 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
8130: 28 70 32 2b 2b 2c 20 70 4f 75 74 29 3b 0a 20 20  (p2++, pOut);.  
8140: 20 20 70 49 6e 31 2b 2b 3b 0a 20 20 20 20 70 4f    pIn1++;.    pO
8150: 75 74 2b 2b 3b 0a 20 20 7d 0a 20 20 62 72 65 61  ut++;.  }.  brea
8160: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
8170: 20 43 6f 70 79 20 50 31 20 50 32 20 2a 20 2a 20   Copy P1 P2 * * 
8180: 2a 0a 2a 2a 0a 2a 2a 20 4d 61 6b 65 20 61 20 63  *.**.** Make a c
8190: 6f 70 79 20 6f 66 20 72 65 67 69 73 74 65 72 20  opy of register 
81a0: 50 31 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  P1 into register
81b0: 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20   P2..**.** This 
81c0: 69 6e 73 74 72 75 63 74 69 6f 6e 20 6d 61 6b 65  instruction make
81d0: 73 20 61 20 64 65 65 70 20 63 6f 70 79 20 6f 66  s a deep copy of
81e0: 20 74 68 65 20 76 61 6c 75 65 2e 20 20 41 20 64   the value.  A d
81f0: 75 70 6c 69 63 61 74 65 0a 2a 2a 20 69 73 20 6d  uplicate.** is m
8200: 61 64 65 20 6f 66 20 61 6e 79 20 73 74 72 69 6e  ade of any strin
8210: 67 20 6f 72 20 62 6c 6f 62 20 63 6f 6e 73 74 61  g or blob consta
8220: 6e 74 2e 20 20 53 65 65 20 61 6c 73 6f 20 4f 50  nt.  See also OP
8230: 5f 53 43 6f 70 79 2e 0a 2a 2f 0a 63 61 73 65 20  _SCopy..*/.case 
8240: 4f 50 5f 43 6f 70 79 3a 20 7b 20 20 20 20 20 20  OP_Copy: {      
8250: 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 2c 20 6f         /* in1, o
8260: 75 74 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  ut2 */.  pIn1 = 
8270: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
8280: 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
8290: 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72  Op->p2];.  asser
82a0: 74 28 20 70 4f 75 74 21 3d 70 49 6e 31 20 29 3b  t( pOut!=pIn1 );
82b0: 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
82c0: 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75  mShallowCopy(pOu
82d0: 74 2c 20 70 49 6e 31 2c 20 4d 45 4d 5f 45 70 68  t, pIn1, MEM_Eph
82e0: 65 6d 29 3b 0a 20 20 44 65 65 70 68 65 6d 65 72  em);.  Deephemer
82f0: 61 6c 69 7a 65 28 70 4f 75 74 29 3b 0a 20 20 52  alize(pOut);.  R
8300: 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
8310: 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20 20  p->p2, pOut);.  
8320: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
8330: 6f 64 65 3a 20 53 43 6f 70 79 20 50 31 20 50 32  ode: SCopy P1 P2
8340: 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4d 61 6b   * * *.**.** Mak
8350: 65 20 61 20 73 68 61 6c 6c 6f 77 20 63 6f 70 79  e a shallow copy
8360: 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 31 20   of register P1 
8370: 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  into register P2
8380: 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73  ..**.** This ins
8390: 74 72 75 63 74 69 6f 6e 20 6d 61 6b 65 73 20 61  truction makes a
83a0: 20 73 68 61 6c 6c 6f 77 20 63 6f 70 79 20 6f 66   shallow copy of
83b0: 20 74 68 65 20 76 61 6c 75 65 2e 20 20 49 66 20   the value.  If 
83c0: 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20  the value.** is 
83d0: 61 20 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62  a string or blob
83e0: 2c 20 74 68 65 6e 20 74 68 65 20 63 6f 70 79 20  , then the copy 
83f0: 69 73 20 6f 6e 6c 79 20 61 20 70 6f 69 6e 74 65  is only a pointe
8400: 72 20 74 6f 20 74 68 65 0a 2a 2a 20 6f 72 69 67  r to the.** orig
8410: 69 6e 61 6c 20 61 6e 64 20 68 65 6e 63 65 20 69  inal and hence i
8420: 66 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 63  f the original c
8430: 68 61 6e 67 65 73 20 73 6f 20 77 69 6c 6c 20 74  hanges so will t
8440: 68 65 20 63 6f 70 79 2e 0a 2a 2a 20 57 6f 72 73  he copy..** Wors
8450: 65 2c 20 69 66 20 74 68 65 20 6f 72 69 67 69 6e  e, if the origin
8460: 61 6c 20 69 73 20 64 65 61 6c 6c 6f 63 61 74 65  al is deallocate
8470: 64 2c 20 74 68 65 20 63 6f 70 79 20 62 65 63 6f  d, the copy beco
8480: 6d 65 73 20 69 6e 76 61 6c 69 64 2e 0a 2a 2a 20  mes invalid..** 
8490: 54 68 75 73 20 74 68 65 20 70 72 6f 67 72 61 6d  Thus the program
84a0: 20 6d 75 73 74 20 67 75 61 72 61 6e 74 65 65 20   must guarantee 
84b0: 74 68 61 74 20 74 68 65 20 6f 72 69 67 69 6e 61  that the origina
84c0: 6c 20 77 69 6c 6c 20 6e 6f 74 20 63 68 61 6e 67  l will not chang
84d0: 65 0a 2a 2a 20 64 75 72 69 6e 67 20 74 68 65 20  e.** during the 
84e0: 6c 69 66 65 74 69 6d 65 20 6f 66 20 74 68 65 20  lifetime of the 
84f0: 63 6f 70 79 2e 20 20 55 73 65 20 4f 50 5f 43 6f  copy.  Use OP_Co
8500: 70 79 20 74 6f 20 6d 61 6b 65 20 61 20 63 6f 6d  py to make a com
8510: 70 6c 65 74 65 0a 2a 2a 20 63 6f 70 79 2e 0a 2a  plete.** copy..*
8520: 2f 0a 63 61 73 65 20 4f 50 5f 53 43 6f 70 79 3a  /.case OP_SCopy:
8530: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
8540: 20 69 6e 31 2c 20 6f 75 74 32 20 2a 2f 0a 20 20   in1, out2 */.  
8550: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
8560: 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20  ->p1];.  pOut = 
8570: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
8580: 20 20 61 73 73 65 72 74 28 20 70 4f 75 74 21 3d    assert( pOut!=
8590: 70 49 6e 31 20 29 3b 0a 20 20 73 71 6c 69 74 65  pIn1 );.  sqlite
85a0: 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43  3VdbeMemShallowC
85b0: 6f 70 79 28 70 4f 75 74 2c 20 70 49 6e 31 2c 20  opy(pOut, pIn1, 
85c0: 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a 23 69 66 64  MEM_Ephem);.#ifd
85d0: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
85e0: 20 20 69 66 28 20 70 4f 75 74 2d 3e 70 53 63 6f    if( pOut->pSco
85f0: 70 79 46 72 6f 6d 3d 3d 30 20 29 20 70 4f 75 74  pyFrom==0 ) pOut
8600: 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 20 3d 20 70  ->pScopyFrom = p
8610: 49 6e 31 3b 0a 23 65 6e 64 69 66 0a 20 20 52 45  In1;.#endif.  RE
8620: 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
8630: 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20 20 62  ->p2, pOut);.  b
8640: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
8650: 64 65 3a 20 52 65 73 75 6c 74 52 6f 77 20 50 31  de: ResultRow P1
8660: 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
8670: 54 68 65 20 72 65 67 69 73 74 65 72 73 20 50 31  The registers P1
8680: 20 74 68 72 6f 75 67 68 20 50 31 2b 50 32 2d 31   through P1+P2-1
8690: 20 63 6f 6e 74 61 69 6e 20 61 20 73 69 6e 67 6c   contain a singl
86a0: 65 20 72 6f 77 20 6f 66 0a 2a 2a 20 72 65 73 75  e row of.** resu
86b0: 6c 74 73 2e 20 54 68 69 73 20 6f 70 63 6f 64 65  lts. This opcode
86c0: 20 63 61 75 73 65 73 20 74 68 65 20 73 71 6c 69   causes the sqli
86d0: 74 65 33 5f 73 74 65 70 28 29 20 63 61 6c 6c 20  te3_step() call 
86e0: 74 6f 20 74 65 72 6d 69 6e 61 74 65 0a 2a 2a 20  to terminate.** 
86f0: 77 69 74 68 20 61 6e 20 53 51 4c 49 54 45 5f 52  with an SQLITE_R
8700: 4f 57 20 72 65 74 75 72 6e 20 63 6f 64 65 20 61  OW return code a
8710: 6e 64 20 69 74 20 73 65 74 73 20 75 70 20 74 68  nd it sets up th
8720: 65 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 0a 2a  e sqlite3_stmt.*
8730: 2a 20 73 74 72 75 63 74 75 72 65 20 74 6f 20 70  * structure to p
8740: 72 6f 76 69 64 65 20 61 63 63 65 73 73 20 74 6f  rovide access to
8750: 20 74 68 65 20 74 6f 70 20 50 31 20 76 61 6c 75   the top P1 valu
8760: 65 73 20 61 73 20 74 68 65 20 72 65 73 75 6c 74  es as the result
8770: 0a 2a 2a 20 72 6f 77 2e 0a 2a 2f 0a 63 61 73 65  .** row..*/.case
8780: 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 3a 20 7b   OP_ResultRow: {
8790: 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20  .  Mem *pMem;.  
87a0: 69 6e 74 20 69 3b 0a 20 20 61 73 73 65 72 74 28  int i;.  assert(
87b0: 20 70 2d 3e 6e 52 65 73 43 6f 6c 75 6d 6e 3d 3d   p->nResColumn==
87c0: 70 4f 70 2d 3e 70 32 20 29 3b 0a 20 20 61 73 73  pOp->p2 );.  ass
87d0: 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 29  ert( pOp->p1>0 )
87e0: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
87f0: 3e 70 31 2b 70 4f 70 2d 3e 70 32 3c 3d 70 2d 3e  >p1+pOp->p2<=p->
8800: 6e 4d 65 6d 2b 31 20 29 3b 0a 0a 20 20 2f 2a 20  nMem+1 );..  /* 
8810: 49 66 20 74 68 69 73 20 73 74 61 74 65 6d 65 6e  If this statemen
8820: 74 20 68 61 73 20 76 69 6f 6c 61 74 65 64 20 69  t has violated i
8830: 6d 6d 65 64 69 61 74 65 20 66 6f 72 65 69 67 6e  mmediate foreign
8840: 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73   key constraints
8850: 2c 20 64 6f 0a 20 20 2a 2a 20 6e 6f 74 20 72 65  , do.  ** not re
8860: 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72 20  turn the number 
8870: 6f 66 20 72 6f 77 73 20 6d 6f 64 69 66 69 65 64  of rows modified
8880: 2e 20 41 6e 64 20 64 6f 20 6e 6f 74 20 52 45 4c  . And do not REL
8890: 45 41 53 45 20 74 68 65 20 73 74 61 74 65 6d 65  EASE the stateme
88a0: 6e 74 0a 20 20 2a 2a 20 74 72 61 6e 73 61 63 74  nt.  ** transact
88b0: 69 6f 6e 2e 20 49 74 20 6e 65 65 64 73 20 74 6f  ion. It needs to
88c0: 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e   be rolled back.
88d0: 20 20 2a 2f 0a 20 20 69 66 28 20 53 51 4c 49 54    */.  if( SQLIT
88e0: 45 5f 4f 4b 21 3d 28 72 63 20 3d 20 73 71 6c 69  E_OK!=(rc = sqli
88f0: 74 65 33 56 64 62 65 43 68 65 63 6b 46 6b 28 70  te3VdbeCheckFk(p
8900: 2c 20 30 29 29 20 29 7b 0a 20 20 20 20 61 73 73  , 0)) ){.    ass
8910: 65 72 74 28 20 64 62 2d 3e 66 6c 61 67 73 26 53  ert( db->flags&S
8920: 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20  QLITE_CountRows 
8930: 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
8940: 2d 3e 75 73 65 73 53 74 6d 74 4a 6f 75 72 6e 61  ->usesStmtJourna
8950: 6c 20 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a  l );.    break;.
8960: 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65    }..  /* If the
8970: 20 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77   SQLITE_CountRow
8980: 73 20 66 6c 61 67 20 69 73 20 73 65 74 20 69 6e  s flag is set in
8990: 20 73 71 6c 69 74 65 33 2e 66 6c 61 67 73 20 6d   sqlite3.flags m
89a0: 61 73 6b 2c 20 74 68 65 6e 20 0a 20 20 2a 2a 20  ask, then .  ** 
89b0: 44 4d 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69  DML statements i
89c0: 6e 76 6f 6b 65 20 74 68 69 73 20 6f 70 63 6f 64  nvoke this opcod
89d0: 65 20 74 6f 20 72 65 74 75 72 6e 20 74 68 65 20  e to return the 
89e0: 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 0a  number of rows .
89f0: 20 20 2a 2a 20 6d 6f 64 69 66 69 65 64 20 74 6f    ** modified to
8a00: 20 74 68 65 20 75 73 65 72 2e 20 54 68 69 73 20   the user. This 
8a10: 69 73 20 74 68 65 20 6f 6e 6c 79 20 77 61 79 20  is the only way 
8a20: 74 68 61 74 20 61 20 56 4d 20 74 68 61 74 0a 20  that a VM that. 
8a30: 20 2a 2a 20 6f 70 65 6e 73 20 61 20 73 74 61 74   ** opens a stat
8a40: 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  ement transactio
8a50: 6e 20 6d 61 79 20 69 6e 76 6f 6b 65 20 74 68 69  n may invoke thi
8a60: 73 20 6f 70 63 6f 64 65 2e 0a 20 20 2a 2a 0a 20  s opcode..  **. 
8a70: 20 2a 2a 20 49 6e 20 63 61 73 65 20 74 68 69 73   ** In case this
8a80: 20 69 73 20 73 75 63 68 20 61 20 73 74 61 74 65   is such a state
8a90: 6d 65 6e 74 2c 20 63 6c 6f 73 65 20 61 6e 79 20  ment, close any 
8aa0: 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61  statement transa
8ab0: 63 74 69 6f 6e 0a 20 20 2a 2a 20 6f 70 65 6e 65  ction.  ** opene
8ac0: 64 20 62 79 20 74 68 69 73 20 56 4d 20 62 65 66  d by this VM bef
8ad0: 6f 72 65 20 72 65 74 75 72 6e 69 6e 67 20 63 6f  ore returning co
8ae0: 6e 74 72 6f 6c 20 74 6f 20 74 68 65 20 75 73 65  ntrol to the use
8af0: 72 2e 20 54 68 69 73 20 69 73 20 74 6f 0a 20 20  r. This is to.  
8b00: 2a 2a 20 65 6e 73 75 72 65 20 74 68 61 74 20 73  ** ensure that s
8b10: 74 61 74 65 6d 65 6e 74 2d 74 72 61 6e 73 61 63  tatement-transac
8b20: 74 69 6f 6e 73 20 61 72 65 20 61 6c 77 61 79 73  tions are always
8b30: 20 6e 65 73 74 65 64 2c 20 6e 6f 74 20 6f 76 65   nested, not ove
8b40: 72 6c 61 70 70 69 6e 67 2e 0a 20 20 2a 2a 20 49  rlapping..  ** I
8b50: 66 20 74 68 65 20 6f 70 65 6e 20 73 74 61 74 65  f the open state
8b60: 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74 69 6f 6e  ment-transaction
8b70: 20 69 73 20 6e 6f 74 20 63 6c 6f 73 65 64 20 68   is not closed h
8b80: 65 72 65 2c 20 74 68 65 6e 20 74 68 65 20 75 73  ere, then the us
8b90: 65 72 0a 20 20 2a 2a 20 6d 61 79 20 73 74 65 70  er.  ** may step
8ba0: 20 61 6e 6f 74 68 65 72 20 56 4d 20 74 68 61 74   another VM that
8bb0: 20 6f 70 65 6e 73 20 69 74 73 20 6f 77 6e 20 73   opens its own s
8bc0: 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63  tatement transac
8bd0: 74 69 6f 6e 2e 20 54 68 69 73 0a 20 20 2a 2a 20  tion. This.  ** 
8be0: 6d 61 79 20 6c 65 61 64 20 74 6f 20 6f 76 65 72  may lead to over
8bf0: 6c 61 70 70 69 6e 67 20 73 74 61 74 65 6d 65 6e  lapping statemen
8c00: 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 2e 0a  t transactions..
8c10: 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 73 74    **.  ** The st
8c20: 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74  atement transact
8c30: 69 6f 6e 20 69 73 20 6e 65 76 65 72 20 61 20 74  ion is never a t
8c40: 6f 70 2d 6c 65 76 65 6c 20 74 72 61 6e 73 61 63  op-level transac
8c50: 74 69 6f 6e 2e 20 20 48 65 6e 63 65 0a 20 20 2a  tion.  Hence.  *
8c60: 2a 20 74 68 65 20 52 45 4c 45 41 53 45 20 63 61  * the RELEASE ca
8c70: 6c 6c 20 62 65 6c 6f 77 20 63 61 6e 20 6e 65 76  ll below can nev
8c80: 65 72 20 66 61 69 6c 2e 0a 20 20 2a 2f 0a 20 20  er fail..  */.  
8c90: 61 73 73 65 72 74 28 20 70 2d 3e 69 53 74 61 74  assert( p->iStat
8ca0: 65 6d 65 6e 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e  ement==0 || db->
8cb0: 66 6c 61 67 73 26 53 51 4c 49 54 45 5f 43 6f 75  flags&SQLITE_Cou
8cc0: 6e 74 52 6f 77 73 20 29 3b 0a 20 20 72 63 20 3d  ntRows );.  rc =
8cd0: 20 73 71 6c 69 74 65 33 56 64 62 65 43 6c 6f 73   sqlite3VdbeClos
8ce0: 65 53 74 61 74 65 6d 65 6e 74 28 70 2c 20 53 41  eStatement(p, SA
8cf0: 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 29  VEPOINT_RELEASE)
8d00: 3b 0a 20 20 69 66 28 20 4e 45 56 45 52 28 72 63  ;.  if( NEVER(rc
8d10: 21 3d 53 51 4c 49 54 45 5f 4f 4b 29 20 29 7b 0a  !=SQLITE_OK) ){.
8d20: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a      break;.  }..
8d30: 20 20 2f 2a 20 49 6e 76 61 6c 69 64 61 74 65 20    /* Invalidate 
8d40: 61 6c 6c 20 65 70 68 65 6d 65 72 61 6c 20 63 75  all ephemeral cu
8d50: 72 73 6f 72 20 72 6f 77 20 63 61 63 68 65 73 20  rsor row caches 
8d60: 2a 2f 0a 20 20 70 2d 3e 63 61 63 68 65 43 74 72  */.  p->cacheCtr
8d70: 20 3d 20 28 70 2d 3e 63 61 63 68 65 43 74 72 20   = (p->cacheCtr 
8d80: 2b 20 32 29 7c 31 3b 0a 0a 20 20 2f 2a 20 4d 61  + 2)|1;..  /* Ma
8d90: 6b 65 20 73 75 72 65 20 74 68 65 20 72 65 73 75  ke sure the resu
8da0: 6c 74 73 20 6f 66 20 74 68 65 20 63 75 72 72 65  lts of the curre
8db0: 6e 74 20 72 6f 77 20 61 72 65 20 5c 30 30 30 20  nt row are \000 
8dc0: 74 65 72 6d 69 6e 61 74 65 64 0a 20 20 2a 2a 20  terminated.  ** 
8dd0: 61 6e 64 20 68 61 76 65 20 61 6e 20 61 73 73 69  and have an assi
8de0: 67 6e 65 64 20 74 79 70 65 2e 20 20 54 68 65 20  gned type.  The 
8df0: 72 65 73 75 6c 74 73 20 61 72 65 20 64 65 2d 65  results are de-e
8e00: 70 68 65 6d 65 72 61 6c 69 7a 65 64 20 61 73 0a  phemeralized as.
8e10: 20 20 2a 2a 20 61 73 20 73 69 64 65 20 65 66 66    ** as side eff
8e20: 65 63 74 2e 0a 20 20 2a 2f 0a 20 20 70 4d 65 6d  ect..  */.  pMem
8e30: 20 3d 20 70 2d 3e 70 52 65 73 75 6c 74 53 65 74   = p->pResultSet
8e40: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
8e50: 5d 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  ];.  for(i=0; i<
8e60: 70 4f 70 2d 3e 70 32 3b 20 69 2b 2b 29 7b 0a 20  pOp->p2; i++){. 
8e70: 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
8e80: 56 61 6c 69 64 28 26 70 4d 65 6d 5b 69 5d 29 20  Valid(&pMem[i]) 
8e90: 29 3b 0a 20 20 20 20 6d 65 6d 41 62 6f 75 74 54  );.    memAboutT
8ea0: 6f 43 68 61 6e 67 65 28 70 2c 20 26 70 4d 65 6d  oChange(p, &pMem
8eb0: 5b 69 5d 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  [i]);.    sqlite
8ec0: 33 56 64 62 65 4d 65 6d 4e 75 6c 54 65 72 6d 69  3VdbeMemNulTermi
8ed0: 6e 61 74 65 28 26 70 4d 65 6d 5b 69 5d 29 3b 0a  nate(&pMem[i]);.
8ee0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
8ef0: 65 6d 53 74 6f 72 65 54 79 70 65 28 26 70 4d 65  emStoreType(&pMe
8f00: 6d 5b 69 5d 29 3b 0a 20 20 20 20 52 45 47 49 53  m[i]);.    REGIS
8f10: 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
8f20: 31 2b 69 2c 20 26 70 4d 65 6d 5b 69 5d 29 3b 0a  1+i, &pMem[i]);.
8f30: 20 20 7d 0a 20 20 69 66 28 20 64 62 2d 3e 6d 61    }.  if( db->ma
8f40: 6c 6c 6f 63 46 61 69 6c 65 64 20 29 20 67 6f 74  llocFailed ) got
8f50: 6f 20 6e 6f 5f 6d 65 6d 3b 0a 0a 20 20 2f 2a 20  o no_mem;..  /* 
8f60: 52 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 52 4f  Return SQLITE_RO
8f70: 57 0a 20 20 2a 2f 0a 20 20 70 2d 3e 70 63 20 3d  W.  */.  p->pc =
8f80: 20 70 63 20 2b 20 31 3b 0a 20 20 72 63 20 3d 20   pc + 1;.  rc = 
8f90: 53 51 4c 49 54 45 5f 52 4f 57 3b 0a 20 20 67 6f  SQLITE_ROW;.  go
8fa0: 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a  to vdbe_return;.
8fb0: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f  }../* Opcode: Co
8fc0: 6e 63 61 74 20 50 31 20 50 32 20 50 33 20 2a 20  ncat P1 P2 P3 * 
8fd0: 2a 0a 2a 2a 0a 2a 2a 20 41 64 64 20 74 68 65 20  *.**.** Add the 
8fe0: 74 65 78 74 20 69 6e 20 72 65 67 69 73 74 65 72  text in register
8ff0: 20 50 31 20 6f 6e 74 6f 20 74 68 65 20 65 6e 64   P1 onto the end
9000: 20 6f 66 20 74 68 65 20 74 65 78 74 20 69 6e 0a   of the text in.
9010: 2a 2a 20 72 65 67 69 73 74 65 72 20 50 32 20 61  ** register P2 a
9020: 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73  nd store the res
9030: 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ult in register 
9040: 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  P3..** If either
9050: 20 74 68 65 20 50 31 20 6f 72 20 50 32 20 74 65   the P1 or P2 te
9060: 78 74 20 61 72 65 20 4e 55 4c 4c 20 74 68 65 6e  xt are NULL then
9070: 20 73 74 6f 72 65 20 4e 55 4c 4c 20 69 6e 20 50   store NULL in P
9080: 33 2e 0a 2a 2a 0a 2a 2a 20 20 20 50 33 20 3d 20  3..**.**   P3 = 
9090: 50 32 20 7c 7c 20 50 31 0a 2a 2a 0a 2a 2a 20 49  P2 || P1.**.** I
90a0: 74 20 69 73 20 69 6c 6c 65 67 61 6c 20 66 6f 72  t is illegal for
90b0: 20 50 31 20 61 6e 64 20 50 33 20 74 6f 20 62 65   P1 and P3 to be
90c0: 20 74 68 65 20 73 61 6d 65 20 72 65 67 69 73 74   the same regist
90d0: 65 72 2e 20 53 6f 6d 65 74 69 6d 65 73 2c 0a 2a  er. Sometimes,.*
90e0: 2a 20 69 66 20 50 33 20 69 73 20 74 68 65 20 73  * if P3 is the s
90f0: 61 6d 65 20 72 65 67 69 73 74 65 72 20 61 73 20  ame register as 
9100: 50 32 2c 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e  P2, the implemen
9110: 74 61 74 69 6f 6e 20 69 73 20 61 62 6c 65 0a 2a  tation is able.*
9120: 2a 20 74 6f 20 61 76 6f 69 64 20 61 20 6d 65 6d  * to avoid a mem
9130: 63 70 79 28 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f  cpy()..*/.case O
9140: 50 5f 43 6f 6e 63 61 74 3a 20 7b 20 20 20 20 20  P_Concat: {     
9150: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
9160: 20 54 4b 5f 43 4f 4e 43 41 54 2c 20 69 6e 31 2c   TK_CONCAT, in1,
9170: 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20   in2, out3 */.  
9180: 69 36 34 20 6e 42 79 74 65 3b 0a 0a 20 20 70 49  i64 nByte;..  pI
9190: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
91a0: 70 31 5d 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61  p1];.  pIn2 = &a
91b0: 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
91c0: 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
91d0: 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p3];.  assert(
91e0: 20 70 49 6e 31 21 3d 70 4f 75 74 20 29 3b 0a 20   pIn1!=pOut );. 
91f0: 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67   if( (pIn1->flag
9200: 73 20 7c 20 70 49 6e 32 2d 3e 66 6c 61 67 73 29  s | pIn2->flags)
9210: 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20   & MEM_Null ){. 
9220: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
9230: 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a  mSetNull(pOut);.
9240: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20      break;.  }. 
9250: 20 69 66 28 20 45 78 70 61 6e 64 42 6c 6f 62 28   if( ExpandBlob(
9260: 70 49 6e 31 29 20 7c 7c 20 45 78 70 61 6e 64 42  pIn1) || ExpandB
9270: 6c 6f 62 28 70 49 6e 32 29 20 29 20 67 6f 74 6f  lob(pIn2) ) goto
9280: 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 53 74 72 69 6e   no_mem;.  Strin
9290: 67 69 66 79 28 70 49 6e 31 2c 20 65 6e 63 6f 64  gify(pIn1, encod
92a0: 69 6e 67 29 3b 0a 20 20 53 74 72 69 6e 67 69 66  ing);.  Stringif
92b0: 79 28 70 49 6e 32 2c 20 65 6e 63 6f 64 69 6e 67  y(pIn2, encoding
92c0: 29 3b 0a 20 20 6e 42 79 74 65 20 3d 20 70 49 6e  );.  nByte = pIn
92d0: 31 2d 3e 6e 20 2b 20 70 49 6e 32 2d 3e 6e 3b 0a  1->n + pIn2->n;.
92e0: 20 20 69 66 28 20 6e 42 79 74 65 3e 64 62 2d 3e    if( nByte>db->
92f0: 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49  aLimit[SQLITE_LI
9300: 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20  MIT_LENGTH] ){. 
9310: 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b     goto too_big;
9320: 0a 20 20 7d 0a 20 20 4d 65 6d 53 65 74 54 79 70  .  }.  MemSetTyp
9330: 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f  eFlag(pOut, MEM_
9340: 53 74 72 29 3b 0a 20 20 69 66 28 20 73 71 6c 69  Str);.  if( sqli
9350: 74 65 33 56 64 62 65 4d 65 6d 47 72 6f 77 28 70  te3VdbeMemGrow(p
9360: 4f 75 74 2c 20 28 69 6e 74 29 6e 42 79 74 65 2b  Out, (int)nByte+
9370: 32 2c 20 70 4f 75 74 3d 3d 70 49 6e 32 29 20 29  2, pOut==pIn2) )
9380: 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65  {.    goto no_me
9390: 6d 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 75  m;.  }.  if( pOu
93a0: 74 21 3d 70 49 6e 32 20 29 7b 0a 20 20 20 20 6d  t!=pIn2 ){.    m
93b0: 65 6d 63 70 79 28 70 4f 75 74 2d 3e 7a 2c 20 70  emcpy(pOut->z, p
93c0: 49 6e 32 2d 3e 7a 2c 20 70 49 6e 32 2d 3e 6e 29  In2->z, pIn2->n)
93d0: 3b 0a 20 20 7d 0a 20 20 6d 65 6d 63 70 79 28 26  ;.  }.  memcpy(&
93e0: 70 4f 75 74 2d 3e 7a 5b 70 49 6e 32 2d 3e 6e 5d  pOut->z[pIn2->n]
93f0: 2c 20 70 49 6e 31 2d 3e 7a 2c 20 70 49 6e 31 2d  , pIn1->z, pIn1-
9400: 3e 6e 29 3b 0a 20 20 70 4f 75 74 2d 3e 7a 5b 6e  >n);.  pOut->z[n
9410: 42 79 74 65 5d 20 3d 20 30 3b 0a 20 20 70 4f 75  Byte] = 0;.  pOu
9420: 74 2d 3e 7a 5b 6e 42 79 74 65 2b 31 5d 20 3d 20  t->z[nByte+1] = 
9430: 30 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  0;.  pOut->flags
9440: 20 7c 3d 20 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20   |= MEM_Term;.  
9450: 70 4f 75 74 2d 3e 6e 20 3d 20 28 69 6e 74 29 6e  pOut->n = (int)n
9460: 42 79 74 65 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e  Byte;.  pOut->en
9470: 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20  c = encoding;.  
9480: 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53  UPDATE_MAX_BLOBS
9490: 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65  IZE(pOut);.  bre
94a0: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
94b0: 3a 20 41 64 64 20 50 31 20 50 32 20 50 33 20 2a  : Add P1 P2 P3 *
94c0: 20 2a 0a 2a 2a 0a 2a 2a 20 41 64 64 20 74 68 65   *.**.** Add the
94d0: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
94e0: 65 72 20 50 31 20 74 6f 20 74 68 65 20 76 61 6c  er P1 to the val
94f0: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
9500: 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20 74  2.** and store t
9510: 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67  he result in reg
9520: 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20  ister P3..** If 
9530: 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20  either input is 
9540: 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74  NULL, the result
9550: 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20   is NULL..*/./* 
9560: 4f 70 63 6f 64 65 3a 20 4d 75 6c 74 69 70 6c 79  Opcode: Multiply
9570: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
9580: 0a 2a 2a 0a 2a 2a 20 4d 75 6c 74 69 70 6c 79 20  .**.** Multiply 
9590: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
95a0: 69 73 74 65 72 20 50 31 20 62 79 20 74 68 65 20  ister P1 by the 
95b0: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
95c0: 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72  r P2.** and stor
95d0: 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20  e the result in 
95e0: 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20  register P3..** 
95f0: 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20  If either input 
9600: 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73  is NULL, the res
9610: 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a  ult is NULL..*/.
9620: 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 75 62 74 72  /* Opcode: Subtr
9630: 61 63 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a  act P1 P2 P3 * *
9640: 0a 2a 2a 0a 2a 2a 20 53 75 62 74 72 61 63 74 20  .**.** Subtract 
9650: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
9660: 69 73 74 65 72 20 50 31 20 66 72 6f 6d 20 74 68  ister P1 from th
9670: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
9680: 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74  ter P2.** and st
9690: 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69  ore the result i
96a0: 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  n register P3..*
96b0: 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75  * If either inpu
96c0: 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72  t is NULL, the r
96d0: 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a  esult is NULL..*
96e0: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 69 76  /./* Opcode: Div
96f0: 69 64 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a  ide P1 P2 P3 * *
9700: 0a 2a 2a 0a 2a 2a 20 44 69 76 69 64 65 20 74 68  .**.** Divide th
9710: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
9720: 74 65 72 20 50 31 20 62 79 20 74 68 65 20 76 61  ter P1 by the va
9730: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
9740: 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20  P2.** and store 
9750: 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65  the result in re
9760: 67 69 73 74 65 72 20 50 33 20 28 50 33 3d 50 32  gister P3 (P3=P2
9770: 2f 50 31 29 2e 20 49 66 20 74 68 65 20 76 61 6c  /P1). If the val
9780: 75 65 20 69 6e 20 0a 2a 2a 20 72 65 67 69 73 74  ue in .** regist
9790: 65 72 20 50 31 20 69 73 20 7a 65 72 6f 2c 20 74  er P1 is zero, t
97a0: 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69  hen the result i
97b0: 73 20 4e 55 4c 4c 2e 20 49 66 20 65 69 74 68 65  s NULL. If eithe
97c0: 72 20 69 6e 70 75 74 20 69 73 20 0a 2a 2a 20 4e  r input is .** N
97d0: 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20  ULL, the result 
97e0: 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f  is NULL..*/./* O
97f0: 70 63 6f 64 65 3a 20 52 65 6d 61 69 6e 64 65 72  pcode: Remainder
9800: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
9810: 0a 2a 2a 20 43 6f 6d 70 75 74 65 20 74 68 65 20  .** Compute the 
9820: 72 65 6d 61 69 6e 64 65 72 20 61 66 74 65 72 20  remainder after 
9830: 69 6e 74 65 67 65 72 20 64 69 76 69 73 69 6f 6e  integer division
9840: 20 6f 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e   of the value in
9850: 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31 20  .** register P1 
9860: 62 79 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  by the value in 
9870: 72 65 67 69 73 74 65 72 20 50 32 20 61 6e 64 20  register P2 and 
9880: 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74  store the result
9890: 20 69 6e 20 50 33 2e 20 0a 2a 2a 20 49 66 20 74   in P3. .** If t
98a0: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
98b0: 73 74 65 72 20 50 32 20 69 73 20 7a 65 72 6f 20  ster P2 is zero 
98c0: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
98d0: 4c 4c 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  LL..** If either
98e0: 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c   operand is NULL
98f0: 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  , the result is 
9900: 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  NULL..*/.case OP
9910: 5f 41 64 64 3a 20 20 20 20 20 20 20 20 20 20 20  _Add:           
9920: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
9930: 61 73 20 54 4b 5f 50 4c 55 53 2c 20 69 6e 31 2c  as TK_PLUS, in1,
9940: 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61   in2, out3 */.ca
9950: 73 65 20 4f 50 5f 53 75 62 74 72 61 63 74 3a 20  se OP_Subtract: 
9960: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
9970: 73 61 6d 65 20 61 73 20 54 4b 5f 4d 49 4e 55 53  same as TK_MINUS
9980: 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33  , in1, in2, out3
9990: 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 75 6c 74   */.case OP_Mult
99a0: 69 70 6c 79 3a 20 20 20 20 20 20 20 20 20 20 20  iply:           
99b0: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
99c0: 5f 53 54 41 52 2c 20 69 6e 31 2c 20 69 6e 32 2c  _STAR, in1, in2,
99d0: 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50   out3 */.case OP
99e0: 5f 44 69 76 69 64 65 3a 20 20 20 20 20 20 20 20  _Divide:        
99f0: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
9a00: 61 73 20 54 4b 5f 53 4c 41 53 48 2c 20 69 6e 31  as TK_SLASH, in1
9a10: 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63  , in2, out3 */.c
9a20: 61 73 65 20 4f 50 5f 52 65 6d 61 69 6e 64 65 72  ase OP_Remainder
9a30: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  : {           /*
9a40: 20 73 61 6d 65 20 61 73 20 54 4b 5f 52 45 4d 2c   same as TK_REM,
9a50: 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20   in1, in2, out3 
9a60: 2a 2f 0a 20 20 69 6e 74 20 66 6c 61 67 73 3b 20  */.  int flags; 
9a70: 20 20 20 20 20 2f 2a 20 43 6f 6d 62 69 6e 65 64       /* Combined
9a80: 20 4d 45 4d 5f 2a 20 66 6c 61 67 73 20 66 72 6f   MEM_* flags fro
9a90: 6d 20 62 6f 74 68 20 69 6e 70 75 74 73 20 2a 2f  m both inputs */
9aa0: 0a 20 20 69 36 34 20 69 41 3b 20 20 20 20 20 20  .  i64 iA;      
9ab0: 20 20 20 2f 2a 20 49 6e 74 65 67 65 72 20 76 61     /* Integer va
9ac0: 6c 75 65 20 6f 66 20 6c 65 66 74 20 6f 70 65 72  lue of left oper
9ad0: 61 6e 64 20 2a 2f 0a 20 20 69 36 34 20 69 42 3b  and */.  i64 iB;
9ae0: 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 74 65           /* Inte
9af0: 67 65 72 20 76 61 6c 75 65 20 6f 66 20 72 69 67  ger value of rig
9b00: 68 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20  ht operand */.  
9b10: 64 6f 75 62 6c 65 20 72 41 3b 20 20 20 20 20 20  double rA;      
9b20: 2f 2a 20 52 65 61 6c 20 76 61 6c 75 65 20 6f 66  /* Real value of
9b30: 20 6c 65 66 74 20 6f 70 65 72 61 6e 64 20 2a 2f   left operand */
9b40: 0a 20 20 64 6f 75 62 6c 65 20 72 42 3b 20 20 20  .  double rB;   
9b50: 20 20 20 2f 2a 20 52 65 61 6c 20 76 61 6c 75 65     /* Real value
9b60: 20 6f 66 20 72 69 67 68 74 20 6f 70 65 72 61 6e   of right operan
9b70: 64 20 2a 2f 0a 0a 20 20 70 49 6e 31 20 3d 20 26  d */..  pIn1 = &
9b80: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
9b90: 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66   applyNumericAff
9ba0: 69 6e 69 74 79 28 70 49 6e 31 29 3b 0a 20 20 70  inity(pIn1);.  p
9bb0: 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In2 = &aMem[pOp-
9bc0: 3e 70 32 5d 3b 0a 20 20 61 70 70 6c 79 4e 75 6d  >p2];.  applyNum
9bd0: 65 72 69 63 41 66 66 69 6e 69 74 79 28 70 49 6e  ericAffinity(pIn
9be0: 32 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d  2);.  pOut = &aM
9bf0: 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 66  em[pOp->p3];.  f
9c00: 6c 61 67 73 20 3d 20 70 49 6e 31 2d 3e 66 6c 61  lags = pIn1->fla
9c10: 67 73 20 7c 20 70 49 6e 32 2d 3e 66 6c 61 67 73  gs | pIn2->flags
9c20: 3b 0a 20 20 69 66 28 20 28 66 6c 61 67 73 20 26  ;.  if( (flags &
9c30: 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 20 29 20   MEM_Null)!=0 ) 
9c40: 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f  goto arithmetic_
9c50: 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a  result_is_null;.
9c60: 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
9c70: 67 73 20 26 20 70 49 6e 32 2d 3e 66 6c 61 67 73  gs & pIn2->flags
9c80: 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 4d 45 4d   & MEM_Int)==MEM
9c90: 5f 49 6e 74 20 29 7b 0a 20 20 20 20 69 41 20 3d  _Int ){.    iA =
9ca0: 20 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20 20 20   pIn1->u.i;.    
9cb0: 69 42 20 3d 20 70 49 6e 32 2d 3e 75 2e 69 3b 0a  iB = pIn2->u.i;.
9cc0: 20 20 20 20 73 77 69 74 63 68 28 20 70 4f 70 2d      switch( pOp-
9cd0: 3e 6f 70 63 6f 64 65 20 29 7b 0a 20 20 20 20 20  >opcode ){.     
9ce0: 20 63 61 73 65 20 4f 50 5f 41 64 64 3a 20 20 20   case OP_Add:   
9cf0: 20 20 20 20 20 20 69 42 20 2b 3d 20 69 41 3b 20        iB += iA; 
9d00: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
9d10: 20 20 20 63 61 73 65 20 4f 50 5f 53 75 62 74 72     case OP_Subtr
9d20: 61 63 74 3a 20 20 20 20 69 42 20 2d 3d 20 69 41  act:    iB -= iA
9d30: 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  ;       break;. 
9d40: 20 20 20 20 20 63 61 73 65 20 4f 50 5f 4d 75 6c       case OP_Mul
9d50: 74 69 70 6c 79 3a 20 20 20 20 69 42 20 2a 3d 20  tiply:    iB *= 
9d60: 69 41 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b  iA;       break;
9d70: 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 44  .      case OP_D
9d80: 69 76 69 64 65 3a 20 7b 0a 20 20 20 20 20 20 20  ivide: {.       
9d90: 20 69 66 28 20 69 41 3d 3d 30 20 29 20 67 6f 74   if( iA==0 ) got
9da0: 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73  o arithmetic_res
9db0: 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20  ult_is_null;.   
9dc0: 20 20 20 20 20 2f 2a 20 44 69 76 69 64 69 6e 67       /* Dividing
9dd0: 20 74 68 65 20 6c 61 72 67 65 73 74 20 70 6f 73   the largest pos
9de0: 73 69 62 6c 65 20 6e 65 67 61 74 69 76 65 20 36  sible negative 6
9df0: 34 2d 62 69 74 20 69 6e 74 65 67 65 72 20 28 31  4-bit integer (1
9e00: 3c 3c 36 33 29 20 62 79 20 0a 20 20 20 20 20 20  <<63) by .      
9e10: 20 20 2a 2a 20 2d 31 20 72 65 74 75 72 6e 73 20    ** -1 returns 
9e20: 61 6e 20 69 6e 74 65 67 65 72 20 74 6f 6f 20 6c  an integer too l
9e30: 61 72 67 65 20 74 6f 20 73 74 6f 72 65 20 69 6e  arge to store in
9e40: 20 61 20 36 34 2d 62 69 74 20 64 61 74 61 2d 74   a 64-bit data-t
9e50: 79 70 65 2e 20 4f 6e 0a 20 20 20 20 20 20 20 20  ype. On.        
9e60: 2a 2a 20 73 6f 6d 65 20 61 72 63 68 69 74 65 63  ** some architec
9e70: 74 75 72 65 73 2c 20 74 68 65 20 76 61 6c 75 65  tures, the value
9e80: 20 6f 76 65 72 66 6c 6f 77 73 20 74 6f 20 28 31   overflows to (1
9e90: 3c 3c 36 33 29 2e 20 4f 6e 20 6f 74 68 65 72 73  <<63). On others
9ea0: 2c 0a 20 20 20 20 20 20 20 20 2a 2a 20 61 20 53  ,.        ** a S
9eb0: 49 47 46 50 45 20 69 73 20 69 73 73 75 65 64 2e  IGFPE is issued.
9ec0: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   The following s
9ed0: 74 61 74 65 6d 65 6e 74 20 6e 6f 72 6d 61 6c 69  tatement normali
9ee0: 7a 65 73 20 74 68 69 73 0a 20 20 20 20 20 20 20  zes this.       
9ef0: 20 2a 2a 20 62 65 68 61 76 69 6f 72 20 73 6f 20   ** behavior so 
9f00: 74 68 61 74 20 61 6c 6c 20 61 72 63 68 69 74 65  that all archite
9f10: 63 74 75 72 65 73 20 62 65 68 61 76 65 20 61 73  ctures behave as
9f20: 20 69 66 20 69 6e 74 65 67 65 72 20 0a 20 20 20   if integer .   
9f30: 20 20 20 20 20 2a 2a 20 6f 76 65 72 66 6c 6f 77       ** overflow
9f40: 20 6f 63 63 75 72 72 65 64 2e 0a 20 20 20 20 20   occurred..     
9f50: 20 20 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66     */.        if
9f60: 28 20 69 41 3d 3d 2d 31 20 26 26 20 69 42 3d 3d  ( iA==-1 && iB==
9f70: 53 4d 41 4c 4c 45 53 54 5f 49 4e 54 36 34 20 29  SMALLEST_INT64 )
9f80: 20 69 41 20 3d 20 31 3b 0a 20 20 20 20 20 20 20   iA = 1;.       
9f90: 20 69 42 20 2f 3d 20 69 41 3b 0a 20 20 20 20 20   iB /= iA;.     
9fa0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
9fb0: 7d 0a 20 20 20 20 20 20 64 65 66 61 75 6c 74 3a  }.      default:
9fc0: 20 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 69   {.        if( i
9fd0: 41 3d 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74  A==0 ) goto arit
9fe0: 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73  hmetic_result_is
9ff0: 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69  _null;.        i
a000: 66 28 20 69 41 3d 3d 2d 31 20 29 20 69 41 20 3d  f( iA==-1 ) iA =
a010: 20 31 3b 0a 20 20 20 20 20 20 20 20 69 42 20 25   1;.        iB %
a020: 3d 20 69 41 3b 0a 20 20 20 20 20 20 20 20 62 72  = iA;.        br
a030: 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  eak;.      }.   
a040: 20 7d 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69   }.    pOut->u.i
a050: 20 3d 20 69 42 3b 0a 20 20 20 20 4d 65 6d 53 65   = iB;.    MemSe
a060: 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20  tTypeFlag(pOut, 
a070: 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d 65 6c 73  MEM_Int);.  }els
a080: 65 7b 0a 20 20 20 20 72 41 20 3d 20 73 71 6c 69  e{.    rA = sqli
a090: 74 65 33 56 64 62 65 52 65 61 6c 56 61 6c 75 65  te3VdbeRealValue
a0a0: 28 70 49 6e 31 29 3b 0a 20 20 20 20 72 42 20 3d  (pIn1);.    rB =
a0b0: 20 73 71 6c 69 74 65 33 56 64 62 65 52 65 61 6c   sqlite3VdbeReal
a0c0: 56 61 6c 75 65 28 70 49 6e 32 29 3b 0a 20 20 20  Value(pIn2);.   
a0d0: 20 73 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70   switch( pOp->op
a0e0: 63 6f 64 65 20 29 7b 0a 20 20 20 20 20 20 63 61  code ){.      ca
a0f0: 73 65 20 4f 50 5f 41 64 64 3a 20 20 20 20 20 20  se OP_Add:      
a100: 20 20 20 72 42 20 2b 3d 20 72 41 3b 20 20 20 20     rB += rA;    
a110: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
a120: 63 61 73 65 20 4f 50 5f 53 75 62 74 72 61 63 74  case OP_Subtract
a130: 3a 20 20 20 20 72 42 20 2d 3d 20 72 41 3b 20 20  :    rB -= rA;  
a140: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
a150: 20 20 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70    case OP_Multip
a160: 6c 79 3a 20 20 20 20 72 42 20 2a 3d 20 72 41 3b  ly:    rB *= rA;
a170: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
a180: 20 20 20 20 63 61 73 65 20 4f 50 5f 44 69 76 69      case OP_Divi
a190: 64 65 3a 20 7b 0a 20 20 20 20 20 20 20 20 2f 2a  de: {.        /*
a1a0: 20 28 64 6f 75 62 6c 65 29 30 20 49 6e 20 63 61   (double)0 In ca
a1b0: 73 65 20 6f 66 20 53 51 4c 49 54 45 5f 4f 4d 49  se of SQLITE_OMI
a1c0: 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54  T_FLOATING_POINT
a1d0: 2e 2e 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 69  ... */.        i
a1e0: 66 28 20 72 41 3d 3d 28 64 6f 75 62 6c 65 29 30  f( rA==(double)0
a1f0: 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74   ) goto arithmet
a200: 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c  ic_result_is_nul
a210: 6c 3b 0a 20 20 20 20 20 20 20 20 72 42 20 2f 3d  l;.        rB /=
a220: 20 72 41 3b 0a 20 20 20 20 20 20 20 20 62 72 65   rA;.        bre
a230: 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ak;.      }.    
a240: 20 20 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20 20    default: {.   
a250: 20 20 20 20 20 69 41 20 3d 20 28 69 36 34 29 72       iA = (i64)r
a260: 41 3b 0a 20 20 20 20 20 20 20 20 69 42 20 3d 20  A;.        iB = 
a270: 28 69 36 34 29 72 42 3b 0a 20 20 20 20 20 20 20  (i64)rB;.       
a280: 20 69 66 28 20 69 41 3d 3d 30 20 29 20 67 6f 74   if( iA==0 ) got
a290: 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73  o arithmetic_res
a2a0: 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20  ult_is_null;.   
a2b0: 20 20 20 20 20 69 66 28 20 69 41 3d 3d 2d 31 20       if( iA==-1 
a2c0: 29 20 69 41 20 3d 20 31 3b 0a 20 20 20 20 20 20  ) iA = 1;.      
a2d0: 20 20 72 42 20 3d 20 28 64 6f 75 62 6c 65 29 28    rB = (double)(
a2e0: 69 42 20 25 20 69 41 29 3b 0a 20 20 20 20 20 20  iB % iA);.      
a2f0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d    break;.      }
a300: 0a 20 20 20 20 7d 0a 23 69 66 64 65 66 20 53 51  .    }.#ifdef SQ
a310: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49  LITE_OMIT_FLOATI
a320: 4e 47 5f 50 4f 49 4e 54 0a 20 20 20 20 70 4f 75  NG_POINT.    pOu
a330: 74 2d 3e 75 2e 69 20 3d 20 72 42 3b 0a 20 20 20  t->u.i = rB;.   
a340: 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
a350: 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a  pOut, MEM_Int);.
a360: 23 65 6c 73 65 0a 20 20 20 20 69 66 28 20 73 71  #else.    if( sq
a370: 6c 69 74 65 33 49 73 4e 61 4e 28 72 42 29 20 29  lite3IsNaN(rB) )
a380: 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 72 69  {.      goto ari
a390: 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69  thmetic_result_i
a3a0: 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 7d 0a 20 20  s_null;.    }.  
a3b0: 20 20 70 4f 75 74 2d 3e 72 20 3d 20 72 42 3b 0a    pOut->r = rB;.
a3c0: 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c      MemSetTypeFl
a3d0: 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 52 65 61  ag(pOut, MEM_Rea
a3e0: 6c 29 3b 0a 20 20 20 20 69 66 28 20 28 66 6c 61  l);.    if( (fla
a3f0: 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 29 3d 3d  gs & MEM_Real)==
a400: 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  0 ){.      sqlit
a410: 65 33 56 64 62 65 49 6e 74 65 67 65 72 41 66 66  e3VdbeIntegerAff
a420: 69 6e 69 74 79 28 70 4f 75 74 29 3b 0a 20 20 20  inity(pOut);.   
a430: 20 7d 0a 23 65 6e 64 69 66 0a 20 20 7d 0a 20 20   }.#endif.  }.  
a440: 62 72 65 61 6b 3b 0a 0a 61 72 69 74 68 6d 65 74  break;..arithmet
a450: 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c  ic_result_is_nul
a460: 6c 3a 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  l:.  sqlite3Vdbe
a470: 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29  MemSetNull(pOut)
a480: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
a490: 20 4f 70 63 6f 64 65 3a 20 43 6f 6c 6c 53 65 71   Opcode: CollSeq
a4a0: 20 2a 20 2a 20 50 34 0a 2a 2a 0a 2a 2a 20 50 34   * * P4.**.** P4
a4b0: 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
a4c0: 20 61 20 43 6f 6c 6c 53 65 71 20 73 74 72 75 63   a CollSeq struc
a4d0: 74 2e 20 49 66 20 74 68 65 20 6e 65 78 74 20 63  t. If the next c
a4e0: 61 6c 6c 20 74 6f 20 61 20 75 73 65 72 20 66 75  all to a user fu
a4f0: 6e 63 74 69 6f 6e 0a 2a 2a 20 6f 72 20 61 67 67  nction.** or agg
a500: 72 65 67 61 74 65 20 63 61 6c 6c 73 20 73 71 6c  regate calls sql
a510: 69 74 65 33 47 65 74 46 75 6e 63 43 6f 6c 6c 53  ite3GetFuncCollS
a520: 65 71 28 29 2c 20 74 68 69 73 20 63 6f 6c 6c 61  eq(), this colla
a530: 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 77 69  tion sequence wi
a540: 6c 6c 0a 2a 2a 20 62 65 20 72 65 74 75 72 6e 65  ll.** be returne
a550: 64 2e 20 54 68 69 73 20 69 73 20 75 73 65 64 20  d. This is used 
a560: 62 79 20 74 68 65 20 62 75 69 6c 74 2d 69 6e 20  by the built-in 
a570: 6d 69 6e 28 29 2c 20 6d 61 78 28 29 20 61 6e 64  min(), max() and
a580: 20 6e 75 6c 6c 69 66 28 29 0a 2a 2a 20 66 75 6e   nullif().** fun
a590: 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 54 68  ctions..**.** Th
a5a0: 65 20 69 6e 74 65 72 66 61 63 65 20 75 73 65 64  e interface used
a5b0: 20 62 79 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e   by the implemen
a5c0: 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 61 66  tation of the af
a5d0: 6f 72 65 6d 65 6e 74 69 6f 6e 65 64 20 66 75 6e  orementioned fun
a5e0: 63 74 69 6f 6e 73 0a 2a 2a 20 74 6f 20 72 65 74  ctions.** to ret
a5f0: 72 69 65 76 65 20 74 68 65 20 63 6f 6c 6c 61 74  rieve the collat
a600: 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 73 65 74  ion sequence set
a610: 20 62 79 20 74 68 69 73 20 6f 70 63 6f 64 65 20   by this opcode 
a620: 69 73 20 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65  is not available
a630: 0a 2a 2a 20 70 75 62 6c 69 63 6c 79 2c 20 6f 6e  .** publicly, on
a640: 6c 79 20 74 6f 20 75 73 65 72 20 66 75 6e 63 74  ly to user funct
a650: 69 6f 6e 73 20 64 65 66 69 6e 65 64 20 69 6e 20  ions defined in 
a660: 66 75 6e 63 2e 63 2e 0a 2a 2f 0a 63 61 73 65 20  func.c..*/.case 
a670: 4f 50 5f 43 6f 6c 6c 53 65 71 3a 20 7b 0a 20 20  OP_CollSeq: {.  
a680: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
a690: 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51 20  ype==P4_COLLSEQ 
a6a0: 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
a6b0: 2a 20 4f 70 63 6f 64 65 3a 20 46 75 6e 63 74 69  * Opcode: Functi
a6c0: 6f 6e 20 50 31 20 50 32 20 50 33 20 50 34 20 50  on P1 P2 P3 P4 P
a6d0: 35 0a 2a 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 61  5.**.** Invoke a
a6e0: 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 28   user function (
a6f0: 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20  P4 is a pointer 
a700: 74 6f 20 61 20 46 75 6e 63 74 69 6f 6e 20 73 74  to a Function st
a710: 72 75 63 74 75 72 65 20 74 68 61 74 0a 2a 2a 20  ructure that.** 
a720: 64 65 66 69 6e 65 73 20 74 68 65 20 66 75 6e 63  defines the func
a730: 74 69 6f 6e 29 20 77 69 74 68 20 50 35 20 61 72  tion) with P5 ar
a740: 67 75 6d 65 6e 74 73 20 74 61 6b 65 6e 20 66 72  guments taken fr
a750: 6f 6d 20 72 65 67 69 73 74 65 72 20 50 32 20 61  om register P2 a
a760: 6e 64 0a 2a 2a 20 73 75 63 63 65 73 73 6f 72 73  nd.** successors
a770: 2e 20 20 54 68 65 20 72 65 73 75 6c 74 20 6f 66  .  The result of
a780: 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 69 73   the function is
a790: 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73   stored in regis
a7a0: 74 65 72 20 50 33 2e 0a 2a 2a 20 52 65 67 69 73  ter P3..** Regis
a7b0: 74 65 72 20 50 33 20 6d 75 73 74 20 6e 6f 74 20  ter P3 must not 
a7c0: 62 65 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 75  be one of the fu
a7d0: 6e 63 74 69 6f 6e 20 69 6e 70 75 74 73 2e 0a 2a  nction inputs..*
a7e0: 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 33 32 2d  *.** P1 is a 32-
a7f0: 62 69 74 20 62 69 74 6d 61 73 6b 20 69 6e 64 69  bit bitmask indi
a800: 63 61 74 69 6e 67 20 77 68 65 74 68 65 72 20 6f  cating whether o
a810: 72 20 6e 6f 74 20 65 61 63 68 20 61 72 67 75 6d  r not each argum
a820: 65 6e 74 20 74 6f 20 74 68 65 20 0a 2a 2a 20 66  ent to the .** f
a830: 75 6e 63 74 69 6f 6e 20 77 61 73 20 64 65 74 65  unction was dete
a840: 72 6d 69 6e 65 64 20 74 6f 20 62 65 20 63 6f 6e  rmined to be con
a850: 73 74 61 6e 74 20 61 74 20 63 6f 6d 70 69 6c 65  stant at compile
a860: 20 74 69 6d 65 2e 20 49 66 20 74 68 65 20 66 69   time. If the fi
a870: 72 73 74 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20  rst.** argument 
a880: 77 61 73 20 63 6f 6e 73 74 61 6e 74 20 74 68 65  was constant the
a890: 6e 20 62 69 74 20 30 20 6f 66 20 50 31 20 69 73  n bit 0 of P1 is
a8a0: 20 73 65 74 2e 20 54 68 69 73 20 69 73 20 75 73   set. This is us
a8b0: 65 64 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 0a  ed to determine.
a8c0: 2a 2a 20 77 68 65 74 68 65 72 20 6d 65 74 61 20  ** whether meta 
a8d0: 64 61 74 61 20 61 73 73 6f 63 69 61 74 65 64 20  data associated 
a8e0: 77 69 74 68 20 61 20 75 73 65 72 20 66 75 6e 63  with a user func
a8f0: 74 69 6f 6e 20 61 72 67 75 6d 65 6e 74 20 75 73  tion argument us
a900: 69 6e 67 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74  ing the.** sqlit
a910: 65 33 5f 73 65 74 5f 61 75 78 64 61 74 61 28 29  e3_set_auxdata()
a920: 20 41 50 49 20 6d 61 79 20 62 65 20 73 61 66 65   API may be safe
a930: 6c 79 20 72 65 74 61 69 6e 65 64 20 75 6e 74 69  ly retained unti
a940: 6c 20 74 68 65 20 6e 65 78 74 0a 2a 2a 20 69 6e  l the next.** in
a950: 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 69 73  vocation of this
a960: 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 53   opcode..**.** S
a970: 65 65 20 61 6c 73 6f 3a 20 41 67 67 53 74 65 70  ee also: AggStep
a980: 20 61 6e 64 20 41 67 67 46 69 6e 61 6c 0a 2a 2f   and AggFinal.*/
a990: 0a 63 61 73 65 20 4f 50 5f 46 75 6e 63 74 69 6f  .case OP_Functio
a9a0: 6e 3a 20 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20  n: {.  int i;.  
a9b0: 4d 65 6d 20 2a 70 41 72 67 3b 0a 20 20 73 71 6c  Mem *pArg;.  sql
a9c0: 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 63 74 78  ite3_context ctx
a9d0: 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  ;.  sqlite3_valu
a9e0: 65 20 2a 2a 61 70 56 61 6c 3b 0a 20 20 69 6e 74  e **apVal;.  int
a9f0: 20 6e 3b 0a 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e   n;..  n = pOp->
aa00: 70 35 3b 0a 20 20 61 70 56 61 6c 20 3d 20 70 2d  p5;.  apVal = p-
aa10: 3e 61 70 41 72 67 3b 0a 20 20 61 73 73 65 72 74  >apArg;.  assert
aa20: 28 20 61 70 56 61 6c 20 7c 7c 20 6e 3d 3d 30 20  ( apVal || n==0 
aa30: 29 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 6e 3d  );..  assert( n=
aa40: 3d 30 20 7c 7c 20 28 70 4f 70 2d 3e 70 32 3e 30  =0 || (pOp->p2>0
aa50: 20 26 26 20 70 4f 70 2d 3e 70 32 2b 6e 3c 3d 70   && pOp->p2+n<=p
aa60: 2d 3e 6e 4d 65 6d 2b 31 29 20 29 3b 0a 20 20 61  ->nMem+1) );.  a
aa70: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 70  ssert( pOp->p3<p
aa80: 4f 70 2d 3e 70 32 20 7c 7c 20 70 4f 70 2d 3e 70  Op->p2 || pOp->p
aa90: 33 3e 3d 70 4f 70 2d 3e 70 32 2b 6e 20 29 3b 0a  3>=pOp->p2+n );.
aaa0: 20 20 70 41 72 67 20 3d 20 26 61 4d 65 6d 5b 70    pArg = &aMem[p
aab0: 4f 70 2d 3e 70 32 5d 3b 0a 20 20 66 6f 72 28 69  Op->p2];.  for(i
aac0: 3d 30 3b 20 69 3c 6e 3b 20 69 2b 2b 2c 20 70 41  =0; i<n; i++, pA
aad0: 72 67 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72  rg++){.    asser
aae0: 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 41  t( memIsValid(pA
aaf0: 72 67 29 20 29 3b 0a 20 20 20 20 61 70 56 61 6c  rg) );.    apVal
ab00: 5b 69 5d 20 3d 20 70 41 72 67 3b 0a 20 20 20 20  [i] = pArg;.    
ab10: 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
ab20: 28 70 2c 20 70 41 72 67 29 3b 0a 20 20 20 20 73  (p, pArg);.    s
ab30: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74 6f  qlite3VdbeMemSto
ab40: 72 65 54 79 70 65 28 70 41 72 67 29 3b 0a 20 20  reType(pArg);.  
ab50: 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
ab60: 28 70 4f 70 2d 3e 70 32 2b 69 2c 20 70 41 72 67  (pOp->p2+i, pArg
ab70: 29 3b 0a 20 20 7d 0a 0a 20 20 61 73 73 65 72 74  );.  }..  assert
ab80: 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
ab90: 34 5f 46 55 4e 43 44 45 46 20 7c 7c 20 70 4f 70  4_FUNCDEF || pOp
aba0: 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 56 44 42  ->p4type==P4_VDB
abb0: 45 46 55 4e 43 20 29 3b 0a 20 20 69 66 28 20 70  EFUNC );.  if( p
abc0: 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 46  Op->p4type==P4_F
abd0: 55 4e 43 44 45 46 20 29 7b 0a 20 20 20 20 63 74  UNCDEF ){.    ct
abe0: 78 2e 70 46 75 6e 63 20 3d 20 70 4f 70 2d 3e 70  x.pFunc = pOp->p
abf0: 34 2e 70 46 75 6e 63 3b 0a 20 20 20 20 63 74 78  4.pFunc;.    ctx
ac00: 2e 70 56 64 62 65 46 75 6e 63 20 3d 20 30 3b 0a  .pVdbeFunc = 0;.
ac10: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 63 74 78    }else{.    ctx
ac20: 2e 70 56 64 62 65 46 75 6e 63 20 3d 20 28 56 64  .pVdbeFunc = (Vd
ac30: 62 65 46 75 6e 63 2a 29 70 4f 70 2d 3e 70 34 2e  beFunc*)pOp->p4.
ac40: 70 56 64 62 65 46 75 6e 63 3b 0a 20 20 20 20 63  pVdbeFunc;.    c
ac50: 74 78 2e 70 46 75 6e 63 20 3d 20 63 74 78 2e 70  tx.pFunc = ctx.p
ac60: 56 64 62 65 46 75 6e 63 2d 3e 70 46 75 6e 63 3b  VdbeFunc->pFunc;
ac70: 0a 20 20 7d 0a 0a 20 20 61 73 73 65 72 74 28 20  .  }..  assert( 
ac80: 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70  pOp->p3>0 && pOp
ac90: 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b  ->p3<=p->nMem );
aca0: 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b  .  pOut = &aMem[
acb0: 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41  pOp->p3];.  memA
acc0: 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
acd0: 70 4f 75 74 29 3b 0a 20 20 63 74 78 2e 73 2e 66  pOut);.  ctx.s.f
ace0: 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b  lags = MEM_Null;
acf0: 0a 20 20 63 74 78 2e 73 2e 64 62 20 3d 20 64 62  .  ctx.s.db = db
ad00: 3b 0a 20 20 63 74 78 2e 73 2e 78 44 65 6c 20 3d  ;.  ctx.s.xDel =
ad10: 20 30 3b 0a 20 20 63 74 78 2e 73 2e 7a 4d 61 6c   0;.  ctx.s.zMal
ad20: 6c 6f 63 20 3d 20 30 3b 0a 0a 20 20 2f 2a 20 54  loc = 0;..  /* T
ad30: 68 65 20 6f 75 74 70 75 74 20 63 65 6c 6c 20 6d  he output cell m
ad40: 61 79 20 61 6c 72 65 61 64 79 20 68 61 76 65 20  ay already have 
ad50: 61 20 62 75 66 66 65 72 20 61 6c 6c 6f 63 61 74  a buffer allocat
ad60: 65 64 2e 20 4d 6f 76 65 0a 20 20 2a 2a 20 74 68  ed. Move.  ** th
ad70: 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 63 74 78  e pointer to ctx
ad80: 2e 73 20 73 6f 20 69 6e 20 63 61 73 65 20 74 68  .s so in case th
ad90: 65 20 75 73 65 72 2d 66 75 6e 63 74 69 6f 6e 20  e user-function 
ada0: 63 61 6e 20 75 73 65 0a 20 20 2a 2a 20 74 68 65  can use.  ** the
adb0: 20 61 6c 72 65 61 64 79 20 61 6c 6c 6f 63 61 74   already allocat
adc0: 65 64 20 62 75 66 66 65 72 20 69 6e 73 74 65 61  ed buffer instea
add0: 64 20 6f 66 20 61 6c 6c 6f 63 61 74 69 6e 67 20  d of allocating 
ade0: 61 20 6e 65 77 20 6f 6e 65 2e 0a 20 20 2a 2f 0a  a new one..  */.
adf0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
ae00: 4d 6f 76 65 28 26 63 74 78 2e 73 2c 20 70 4f 75  Move(&ctx.s, pOu
ae10: 74 29 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65  t);.  MemSetType
ae20: 46 6c 61 67 28 26 63 74 78 2e 73 2c 20 4d 45 4d  Flag(&ctx.s, MEM
ae30: 5f 4e 75 6c 6c 29 3b 0a 0a 20 20 63 74 78 2e 69  _Null);..  ctx.i
ae40: 73 45 72 72 6f 72 20 3d 20 30 3b 0a 20 20 69 66  sError = 0;.  if
ae50: 28 20 63 74 78 2e 70 46 75 6e 63 2d 3e 66 6c 61  ( ctx.pFunc->fla
ae60: 67 73 20 26 20 53 51 4c 49 54 45 5f 46 55 4e 43  gs & SQLITE_FUNC
ae70: 5f 4e 45 45 44 43 4f 4c 4c 20 29 7b 0a 20 20 20  _NEEDCOLL ){.   
ae80: 20 61 73 73 65 72 74 28 20 70 4f 70 3e 61 4f 70   assert( pOp>aOp
ae90: 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
aea0: 70 4f 70 5b 2d 31 5d 2e 70 34 74 79 70 65 3d 3d  pOp[-1].p4type==
aeb0: 50 34 5f 43 4f 4c 4c 53 45 51 20 29 3b 0a 20 20  P4_COLLSEQ );.  
aec0: 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 2d 31    assert( pOp[-1
aed0: 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43 6f 6c  ].opcode==OP_Col
aee0: 6c 53 65 71 20 29 3b 0a 20 20 20 20 63 74 78 2e  lSeq );.    ctx.
aef0: 70 43 6f 6c 6c 20 3d 20 70 4f 70 5b 2d 31 5d 2e  pColl = pOp[-1].
af00: 70 34 2e 70 43 6f 6c 6c 3b 0a 20 20 7d 0a 20 20  p4.pColl;.  }.  
af10: 28 2a 63 74 78 2e 70 46 75 6e 63 2d 3e 78 46 75  (*ctx.pFunc->xFu
af20: 6e 63 29 28 26 63 74 78 2c 20 6e 2c 20 61 70 56  nc)(&ctx, n, apV
af30: 61 6c 29 3b 20 2f 2a 20 49 4d 50 3a 20 52 2d 32  al); /* IMP: R-2
af40: 34 35 30 35 2d 32 33 32 33 30 20 2a 2f 0a 20 20  4505-23230 */.  
af50: 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61  if( db->mallocFa
af60: 69 6c 65 64 20 29 7b 0a 20 20 20 20 2f 2a 20 45  iled ){.    /* E
af70: 76 65 6e 20 74 68 6f 75 67 68 20 61 20 6d 61 6c  ven though a mal
af80: 6c 6f 63 28 29 20 68 61 73 20 66 61 69 6c 65 64  loc() has failed
af90: 2c 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61  , the implementa
afa0: 74 69 6f 6e 20 6f 66 20 74 68 65 0a 20 20 20 20  tion of the.    
afb0: 2a 2a 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e  ** user function
afc0: 20 6d 61 79 20 68 61 76 65 20 63 61 6c 6c 65 64   may have called
afd0: 20 61 6e 20 73 71 6c 69 74 65 33 5f 72 65 73 75   an sqlite3_resu
afe0: 6c 74 5f 58 58 58 28 29 20 66 75 6e 63 74 69 6f  lt_XXX() functio
aff0: 6e 0a 20 20 20 20 2a 2a 20 74 6f 20 72 65 74 75  n.    ** to retu
b000: 72 6e 20 61 20 76 61 6c 75 65 2e 20 54 68 65 20  rn a value. The 
b010: 66 6f 6c 6c 6f 77 69 6e 67 20 63 61 6c 6c 20 72  following call r
b020: 65 6c 65 61 73 65 73 20 61 6e 79 20 72 65 73 6f  eleases any reso
b030: 75 72 63 65 73 0a 20 20 20 20 2a 2a 20 61 73 73  urces.    ** ass
b040: 6f 63 69 61 74 65 64 20 77 69 74 68 20 73 75 63  ociated with suc
b050: 68 20 61 20 76 61 6c 75 65 2e 0a 20 20 20 20 2a  h a value..    *
b060: 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  /.    sqlite3Vdb
b070: 65 4d 65 6d 52 65 6c 65 61 73 65 28 26 63 74 78  eMemRelease(&ctx
b080: 2e 73 29 3b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f  .s);.    goto no
b090: 5f 6d 65 6d 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20  _mem;.  }..  /* 
b0a0: 49 66 20 61 6e 79 20 61 75 78 69 6c 69 61 72 79  If any auxiliary
b0b0: 20 64 61 74 61 20 66 75 6e 63 74 69 6f 6e 73 20   data functions 
b0c0: 68 61 76 65 20 62 65 65 6e 20 63 61 6c 6c 65 64  have been called
b0d0: 20 62 79 20 74 68 69 73 20 75 73 65 72 20 66 75   by this user fu
b0e0: 6e 63 74 69 6f 6e 2c 0a 20 20 2a 2a 20 69 6d 6d  nction,.  ** imm
b0f0: 65 64 69 61 74 65 6c 79 20 63 61 6c 6c 20 74 68  ediately call th
b100: 65 20 64 65 73 74 72 75 63 74 6f 72 20 66 6f 72  e destructor for
b110: 20 61 6e 79 20 6e 6f 6e 2d 73 74 61 74 69 63 20   any non-static 
b120: 76 61 6c 75 65 73 2e 0a 20 20 2a 2f 0a 20 20 69  values..  */.  i
b130: 66 28 20 63 74 78 2e 70 56 64 62 65 46 75 6e 63  f( ctx.pVdbeFunc
b140: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
b150: 64 62 65 44 65 6c 65 74 65 41 75 78 44 61 74 61  dbeDeleteAuxData
b160: 28 63 74 78 2e 70 56 64 62 65 46 75 6e 63 2c 20  (ctx.pVdbeFunc, 
b170: 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 20 20 70 4f  pOp->p1);.    pO
b180: 70 2d 3e 70 34 2e 70 56 64 62 65 46 75 6e 63 20  p->p4.pVdbeFunc 
b190: 3d 20 63 74 78 2e 70 56 64 62 65 46 75 6e 63 3b  = ctx.pVdbeFunc;
b1a0: 0a 20 20 20 20 70 4f 70 2d 3e 70 34 74 79 70 65  .    pOp->p4type
b1b0: 20 3d 20 50 34 5f 56 44 42 45 46 55 4e 43 3b 0a   = P4_VDBEFUNC;.
b1c0: 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65    }..  /* If the
b1d0: 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
b1e0: 65 64 20 61 6e 20 65 72 72 6f 72 2c 20 74 68 72  ed an error, thr
b1f0: 6f 77 20 61 6e 20 65 78 63 65 70 74 69 6f 6e 20  ow an exception 
b200: 2a 2f 0a 20 20 69 66 28 20 63 74 78 2e 69 73 45  */.  if( ctx.isE
b210: 72 72 6f 72 20 29 7b 0a 20 20 20 20 73 71 6c 69  rror ){.    sqli
b220: 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d  te3SetString(&p-
b230: 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 25  >zErrMsg, db, "%
b240: 73 22 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  s", sqlite3_valu
b250: 65 5f 74 65 78 74 28 26 63 74 78 2e 73 29 29 3b  e_text(&ctx.s));
b260: 0a 20 20 20 20 72 63 20 3d 20 63 74 78 2e 69 73  .    rc = ctx.is
b270: 45 72 72 6f 72 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  Error;.  }..  /*
b280: 20 43 6f 70 79 20 74 68 65 20 72 65 73 75 6c 74   Copy the result
b290: 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e   of the function
b2a0: 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
b2b0: 33 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56 64  3 */.  sqlite3Vd
b2c0: 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67  beChangeEncoding
b2d0: 28 26 63 74 78 2e 73 2c 20 65 6e 63 6f 64 69 6e  (&ctx.s, encodin
b2e0: 67 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  g);.  sqlite3Vdb
b2f0: 65 4d 65 6d 4d 6f 76 65 28 70 4f 75 74 2c 20 26  eMemMove(pOut, &
b300: 63 74 78 2e 73 29 3b 0a 20 20 69 66 28 20 73 71  ctx.s);.  if( sq
b310: 6c 69 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42  lite3VdbeMemTooB
b320: 69 67 28 70 4f 75 74 29 20 29 7b 0a 20 20 20 20  ig(pOut) ){.    
b330: 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20  goto too_big;.  
b340: 7d 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41  }.  REGISTER_TRA
b350: 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4f 75 74  CE(pOp->p3, pOut
b360: 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f  );.  UPDATE_MAX_
b370: 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a  BLOBSIZE(pOut);.
b380: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
b390: 70 63 6f 64 65 3a 20 42 69 74 41 6e 64 20 50 31  pcode: BitAnd P1
b3a0: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
b3b0: 20 54 61 6b 65 20 74 68 65 20 62 69 74 2d 77 69   Take the bit-wi
b3c0: 73 65 20 41 4e 44 20 6f 66 20 74 68 65 20 76 61  se AND of the va
b3d0: 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74 65 72  lues in register
b3e0: 20 50 31 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a   P1 and P2 and.*
b3f0: 2a 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75  * store the resu
b400: 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  lt in register P
b410: 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20  3..** If either 
b420: 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74  input is NULL, t
b430: 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c  he result is NUL
b440: 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  L..*/./* Opcode:
b450: 20 42 69 74 4f 72 20 50 31 20 50 32 20 50 33 20   BitOr P1 P2 P3 
b460: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74  * *.**.** Take t
b470: 68 65 20 62 69 74 2d 77 69 73 65 20 4f 52 20 6f  he bit-wise OR o
b480: 66 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20  f the values in 
b490: 72 65 67 69 73 74 65 72 20 50 31 20 61 6e 64 20  register P1 and 
b4a0: 50 32 20 61 6e 64 0a 2a 2a 20 73 74 6f 72 65 20  P2 and.** store 
b4b0: 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65  the result in re
b4c0: 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66  gister P3..** If
b4d0: 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73   either input is
b4e0: 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c   NULL, the resul
b4f0: 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a  t is NULL..*/./*
b500: 20 4f 70 63 6f 64 65 3a 20 53 68 69 66 74 4c 65   Opcode: ShiftLe
b510: 66 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ft P1 P2 P3 * *.
b520: 2a 2a 0a 2a 2a 20 53 68 69 66 74 20 74 68 65 20  **.** Shift the 
b530: 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69 6e  integer value in
b540: 20 72 65 67 69 73 74 65 72 20 50 32 20 74 6f 20   register P2 to 
b550: 74 68 65 20 6c 65 66 74 20 62 79 20 74 68 65 0a  the left by the.
b560: 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 62 69 74  ** number of bit
b570: 73 20 73 70 65 63 69 66 69 65 64 20 62 79 20 74  s specified by t
b580: 68 65 20 69 6e 74 65 67 65 72 20 69 6e 20 72 65  he integer in re
b590: 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 20 53 74  gister P1..** St
b5a0: 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69  ore the result i
b5b0: 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  n register P3..*
b5c0: 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75  * If either inpu
b5d0: 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72  t is NULL, the r
b5e0: 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a  esult is NULL..*
b5f0: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 68 69  /./* Opcode: Shi
b600: 66 74 52 69 67 68 74 20 50 31 20 50 32 20 50 33  ftRight P1 P2 P3
b610: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 68 69 66 74   * *.**.** Shift
b620: 20 74 68 65 20 69 6e 74 65 67 65 72 20 76 61 6c   the integer val
b630: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
b640: 32 20 74 6f 20 74 68 65 20 72 69 67 68 74 20 62  2 to the right b
b650: 79 20 74 68 65 0a 2a 2a 20 6e 75 6d 62 65 72 20  y the.** number 
b660: 6f 66 20 62 69 74 73 20 73 70 65 63 69 66 69 65  of bits specifie
b670: 64 20 62 79 20 74 68 65 20 69 6e 74 65 67 65 72  d by the integer
b680: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e   in register P1.
b690: 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 72 65  .** Store the re
b6a0: 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72  sult in register
b6b0: 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65   P3..** If eithe
b6c0: 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c  r input is NULL,
b6d0: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e   the result is N
b6e0: 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ULL..*/.case OP_
b6f0: 42 69 74 41 6e 64 3a 20 20 20 20 20 20 20 20 20  BitAnd:         
b700: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
b710: 61 73 20 54 4b 5f 42 49 54 41 4e 44 2c 20 69 6e  as TK_BITAND, in
b720: 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
b730: 63 61 73 65 20 4f 50 5f 42 69 74 4f 72 3a 20 20  case OP_BitOr:  
b740: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b750: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 42 49  /* same as TK_BI
b760: 54 4f 52 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f  TOR, in1, in2, o
b770: 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  ut3 */.case OP_S
b780: 68 69 66 74 4c 65 66 74 3a 20 20 20 20 20 20 20  hiftLeft:       
b790: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
b7a0: 73 20 54 4b 5f 4c 53 48 49 46 54 2c 20 69 6e 31  s TK_LSHIFT, in1
b7b0: 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63  , in2, out3 */.c
b7c0: 61 73 65 20 4f 50 5f 53 68 69 66 74 52 69 67 68  ase OP_ShiftRigh
b7d0: 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f  t: {           /
b7e0: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 52 53 48  * same as TK_RSH
b7f0: 49 46 54 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f  IFT, in1, in2, o
b800: 75 74 33 20 2a 2f 0a 20 20 69 36 34 20 61 3b 0a  ut3 */.  i64 a;.
b810: 20 20 69 36 34 20 62 3b 0a 0a 20 20 70 49 6e 31    i64 b;..  pIn1
b820: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
b830: 5d 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65  ];.  pIn2 = &aMe
b840: 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70 4f  m[pOp->p2];.  pO
b850: 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
b860: 70 33 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 31  p3];.  if( (pIn1
b870: 2d 3e 66 6c 61 67 73 20 7c 20 70 49 6e 32 2d 3e  ->flags | pIn2->
b880: 66 6c 61 67 73 29 20 26 20 4d 45 4d 5f 4e 75 6c  flags) & MEM_Nul
b890: 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  l ){.    sqlite3
b8a0: 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70  VdbeMemSetNull(p
b8b0: 4f 75 74 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b  Out);.    break;
b8c0: 0a 20 20 7d 0a 20 20 61 20 3d 20 73 71 6c 69 74  .  }.  a = sqlit
b8d0: 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70  e3VdbeIntValue(p
b8e0: 49 6e 32 29 3b 0a 20 20 62 20 3d 20 73 71 6c 69  In2);.  b = sqli
b8f0: 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28  te3VdbeIntValue(
b900: 70 49 6e 31 29 3b 0a 20 20 73 77 69 74 63 68 28  pIn1);.  switch(
b910: 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a   pOp->opcode ){.
b920: 20 20 20 20 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 61 20 26 3d 20 62 3b  nd:      a &= b;
b940: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
b950: 63 61 73 65 20 4f 50 5f 42 69 74 4f 72 3a 20 20  case OP_BitOr:  
b960: 20 20 20 20 20 61 20 7c 3d 20 62 3b 20 20 20 20       a |= b;    
b970: 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65   break;.    case
b980: 20 4f 50 5f 53 68 69 66 74 4c 65 66 74 3a 20 20   OP_ShiftLeft:  
b990: 20 61 20 3c 3c 3d 20 62 3b 20 20 20 20 62 72 65   a <<= b;    bre
b9a0: 61 6b 3b 0a 20 20 20 20 64 65 66 61 75 6c 74 3a  ak;.    default:
b9b0: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f    assert( pOp->o
b9c0: 70 63 6f 64 65 3d 3d 4f 50 5f 53 68 69 66 74 52  pcode==OP_ShiftR
b9d0: 69 67 68 74 20 29 3b 0a 20 20 20 20 20 20 20 20  ight );.        
b9e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b9f0: 20 61 20 3e 3e 3d 20 62 3b 20 20 20 20 62 72 65   a >>= b;    bre
ba00: 61 6b 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e  ak;.  }.  pOut->
ba10: 75 2e 69 20 3d 20 61 3b 0a 20 20 4d 65 6d 53 65  u.i = a;.  MemSe
ba20: 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20  tTypeFlag(pOut, 
ba30: 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 62 72 65 61  MEM_Int);.  brea
ba40: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
ba50: 20 41 64 64 49 6d 6d 20 20 50 31 20 50 32 20 2a   AddImm  P1 P2 *
ba60: 20 2a 20 2a 0a 2a 2a 20 0a 2a 2a 20 41 64 64 20   * *.** .** Add 
ba70: 74 68 65 20 63 6f 6e 73 74 61 6e 74 20 50 32 20  the constant P2 
ba80: 74 6f 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  to the value in 
ba90: 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 20  register P1..** 
baa0: 54 68 65 20 72 65 73 75 6c 74 20 69 73 20 61 6c  The result is al
bab0: 77 61 79 73 20 61 6e 20 69 6e 74 65 67 65 72 2e  ways an integer.
bac0: 0a 2a 2a 0a 2a 2a 20 54 6f 20 66 6f 72 63 65 20  .**.** To force 
bad0: 61 6e 79 20 72 65 67 69 73 74 65 72 20 74 6f 20  any register to 
bae0: 62 65 20 61 6e 20 69 6e 74 65 67 65 72 2c 20 6a  be an integer, j
baf0: 75 73 74 20 61 64 64 20 30 2e 0a 2a 2f 0a 63 61  ust add 0..*/.ca
bb00: 73 65 20 4f 50 5f 41 64 64 49 6d 6d 3a 20 7b 20  se OP_AddImm: { 
bb10: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e             /* in
bb20: 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  1 */.  pIn1 = &a
bb30: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
bb40: 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
bb50: 28 70 2c 20 70 49 6e 31 29 3b 0a 20 20 73 71 6c  (p, pIn1);.  sql
bb60: 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67  ite3VdbeMemInteg
bb70: 65 72 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 70  erify(pIn1);.  p
bb80: 49 6e 31 2d 3e 75 2e 69 20 2b 3d 20 70 4f 70 2d  In1->u.i += pOp-
bb90: 3e 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  >p2;.  break;.}.
bba0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 75 73 74  ./* Opcode: Must
bbb0: 42 65 49 6e 74 20 50 31 20 50 32 20 2a 20 2a 20  BeInt P1 P2 * * 
bbc0: 2a 0a 2a 2a 20 0a 2a 2a 20 46 6f 72 63 65 20 74  *.** .** Force t
bbd0: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
bbe0: 73 74 65 72 20 50 31 20 74 6f 20 62 65 20 61 6e  ster P1 to be an
bbf0: 20 69 6e 74 65 67 65 72 2e 20 20 49 66 20 74 68   integer.  If th
bc00: 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 50 31  e value.** in P1
bc10: 20 69 73 20 6e 6f 74 20 61 6e 20 69 6e 74 65 67   is not an integ
bc20: 65 72 20 61 6e 64 20 63 61 6e 6e 6f 74 20 62 65  er and cannot be
bc30: 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f 20   converted into 
bc40: 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20 77 69  an integer.** wi
bc50: 74 68 6f 75 74 20 64 61 74 61 20 6c 6f 73 73 2c  thout data loss,
bc60: 20 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65 64   then jump immed
bc70: 69 61 74 65 6c 79 20 74 6f 20 50 32 2c 20 6f 72  iately to P2, or
bc80: 20 69 66 20 50 32 3d 3d 30 0a 2a 2a 20 72 61 69   if P2==0.** rai
bc90: 73 65 20 61 6e 20 53 51 4c 49 54 45 5f 4d 49 53  se an SQLITE_MIS
bca0: 4d 41 54 43 48 20 65 78 63 65 70 74 69 6f 6e 2e  MATCH exception.
bcb0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 75 73 74  .*/.case OP_Must
bcc0: 42 65 49 6e 74 3a 20 7b 20 20 20 20 20 20 20 20  BeInt: {        
bcd0: 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31      /* jump, in1
bce0: 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   */.  pIn1 = &aM
bcf0: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 6d  em[pOp->p1];.  m
bd00: 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
bd10: 70 2c 20 70 49 6e 31 29 3b 0a 20 20 61 70 70 6c  p, pIn1);.  appl
bd20: 79 41 66 66 69 6e 69 74 79 28 70 49 6e 31 2c 20  yAffinity(pIn1, 
bd30: 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52  SQLITE_AFF_NUMER
bd40: 49 43 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  IC, encoding);. 
bd50: 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67   if( (pIn1->flag
bd60: 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20  s & MEM_Int)==0 
bd70: 29 7b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  ){.    if( pOp->
bd80: 70 32 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 72  p2==0 ){.      r
bd90: 63 20 3d 20 53 51 4c 49 54 45 5f 4d 49 53 4d 41  c = SQLITE_MISMA
bda0: 54 43 48 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20  TCH;.      goto 
bdb0: 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
bdc0: 6f 72 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  or;.    }else{. 
bdd0: 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70       pc = pOp->p
bde0: 32 20 2d 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d  2 - 1;.    }.  }
bdf0: 65 6c 73 65 7b 0a 20 20 20 20 4d 65 6d 53 65 74  else{.    MemSet
be00: 54 79 70 65 46 6c 61 67 28 70 49 6e 31 2c 20 4d  TypeFlag(pIn1, M
be10: 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d 0a 20 20 62  EM_Int);.  }.  b
be20: 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66  reak;.}..#ifndef
be30: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f   SQLITE_OMIT_FLO
be40: 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 2f 2a 20 4f  ATING_POINT./* O
be50: 70 63 6f 64 65 3a 20 52 65 61 6c 41 66 66 69 6e  pcode: RealAffin
be60: 69 74 79 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a  ity P1 * * * *.*
be70: 2a 0a 2a 2a 20 49 66 20 72 65 67 69 73 74 65 72  *.** If register
be80: 20 50 31 20 68 6f 6c 64 73 20 61 6e 20 69 6e 74   P1 holds an int
be90: 65 67 65 72 20 63 6f 6e 76 65 72 74 20 69 74 20  eger convert it 
bea0: 74 6f 20 61 20 72 65 61 6c 20 76 61 6c 75 65 2e  to a real value.
beb0: 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
bec0: 64 65 20 69 73 20 75 73 65 64 20 77 68 65 6e 20  de is used when 
bed0: 65 78 74 72 61 63 74 69 6e 67 20 69 6e 66 6f 72  extracting infor
bee0: 6d 61 74 69 6f 6e 20 66 72 6f 6d 20 61 20 63 6f  mation from a co
bef0: 6c 75 6d 6e 20 74 68 61 74 0a 2a 2a 20 68 61 73  lumn that.** has
bf00: 20 52 45 41 4c 20 61 66 66 69 6e 69 74 79 2e 20   REAL affinity. 
bf10: 20 53 75 63 68 20 63 6f 6c 75 6d 6e 20 76 61 6c   Such column val
bf20: 75 65 73 20 6d 61 79 20 73 74 69 6c 6c 20 62 65  ues may still be
bf30: 20 73 74 6f 72 65 64 20 61 73 0a 2a 2a 20 69 6e   stored as.** in
bf40: 74 65 67 65 72 73 2c 20 66 6f 72 20 73 70 61 63  tegers, for spac
bf50: 65 20 65 66 66 69 63 69 65 6e 63 79 2c 20 62 75  e efficiency, bu
bf60: 74 20 61 66 74 65 72 20 65 78 74 72 61 63 74 69  t after extracti
bf70: 6f 6e 20 77 65 20 77 61 6e 74 20 74 68 65 6d 0a  on we want them.
bf80: 2a 2a 20 74 6f 20 68 61 76 65 20 6f 6e 6c 79 20  ** to have only 
bf90: 61 20 72 65 61 6c 20 76 61 6c 75 65 2e 0a 2a 2f  a real value..*/
bfa0: 0a 63 61 73 65 20 4f 50 5f 52 65 61 6c 41 66 66  .case OP_RealAff
bfb0: 69 6e 69 74 79 3a 20 7b 20 20 20 20 20 20 20 20  inity: {        
bfc0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31            /* in1
bfd0: 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   */.  pIn1 = &aM
bfe0: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 6d  em[pOp->p1];.  m
bff0: 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
c000: 70 2c 20 70 49 6e 31 29 3b 0a 20 20 69 66 28 20  p, pIn1);.  if( 
c010: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
c020: 4d 5f 49 6e 74 20 29 7b 0a 20 20 20 20 73 71 6c  M_Int ){.    sql
c030: 69 74 65 33 56 64 62 65 4d 65 6d 52 65 61 6c 69  ite3VdbeMemReali
c040: 66 79 28 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20  fy(pIn1);.  }.  
c050: 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a  break;.}.#endif.
c060: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
c070: 4f 4d 49 54 5f 43 41 53 54 0a 2f 2a 20 4f 70 63  OMIT_CAST./* Opc
c080: 6f 64 65 3a 20 54 6f 54 65 78 74 20 50 31 20 2a  ode: ToText P1 *
c090: 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72   * * *.**.** For
c0a0: 63 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  ce the value in 
c0b0: 72 65 67 69 73 74 65 72 20 50 31 20 74 6f 20 62  register P1 to b
c0c0: 65 20 74 65 78 74 2e 0a 2a 2a 20 49 66 20 74 68  e text..** If th
c0d0: 65 20 76 61 6c 75 65 20 69 73 20 6e 75 6d 65 72  e value is numer
c0e0: 69 63 2c 20 63 6f 6e 76 65 72 74 20 69 74 20 74  ic, convert it t
c0f0: 6f 20 61 20 73 74 72 69 6e 67 20 75 73 69 6e 67  o a string using
c100: 20 74 68 65 0a 2a 2a 20 65 71 75 69 76 61 6c 65   the.** equivale
c110: 6e 74 20 6f 66 20 70 72 69 6e 74 66 28 29 2e 20  nt of printf(). 
c120: 20 42 6c 6f 62 20 76 61 6c 75 65 73 20 61 72 65   Blob values are
c130: 20 75 6e 63 68 61 6e 67 65 64 20 61 6e 64 0a 2a   unchanged and.*
c140: 2a 20 61 72 65 20 61 66 74 65 72 77 61 72 64 73  * are afterwards
c150: 20 73 69 6d 70 6c 79 20 69 6e 74 65 72 70 72 65   simply interpre
c160: 74 65 64 20 61 73 20 74 65 78 74 2e 0a 2a 2a 0a  ted as text..**.
c170: 2a 2a 20 41 20 4e 55 4c 4c 20 76 61 6c 75 65 20  ** A NULL value 
c180: 69 73 20 6e 6f 74 20 63 68 61 6e 67 65 64 20 62  is not changed b
c190: 79 20 74 68 69 73 20 72 6f 75 74 69 6e 65 2e 20  y this routine. 
c1a0: 20 49 74 20 72 65 6d 61 69 6e 73 20 4e 55 4c 4c   It remains NULL
c1b0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 6f 54  ..*/.case OP_ToT
c1c0: 65 78 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20  ext: {          
c1d0: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
c1e0: 61 73 20 54 4b 5f 54 4f 5f 54 45 58 54 2c 20 69  as TK_TO_TEXT, i
c1f0: 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26  n1 */.  pIn1 = &
c200: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
c210: 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
c220: 65 28 70 2c 20 70 49 6e 31 29 3b 0a 20 20 69 66  e(p, pIn1);.  if
c230: 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20  ( pIn1->flags & 
c240: 4d 45 4d 5f 4e 75 6c 6c 20 29 20 62 72 65 61 6b  MEM_Null ) break
c250: 3b 0a 20 20 61 73 73 65 72 74 28 20 4d 45 4d 5f  ;.  assert( MEM_
c260: 53 74 72 3d 3d 28 4d 45 4d 5f 42 6c 6f 62 3e 3e  Str==(MEM_Blob>>
c270: 33 29 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c  3) );.  pIn1->fl
c280: 61 67 73 20 7c 3d 20 28 70 49 6e 31 2d 3e 66 6c  ags |= (pIn1->fl
c290: 61 67 73 26 4d 45 4d 5f 42 6c 6f 62 29 3e 3e 33  ags&MEM_Blob)>>3
c2a0: 3b 0a 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74  ;.  applyAffinit
c2b0: 79 28 70 49 6e 31 2c 20 53 51 4c 49 54 45 5f 41  y(pIn1, SQLITE_A
c2c0: 46 46 5f 54 45 58 54 2c 20 65 6e 63 6f 64 69 6e  FF_TEXT, encodin
c2d0: 67 29 3b 0a 20 20 72 63 20 3d 20 45 78 70 61 6e  g);.  rc = Expan
c2e0: 64 42 6c 6f 62 28 70 49 6e 31 29 3b 0a 20 20 61  dBlob(pIn1);.  a
c2f0: 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61  ssert( pIn1->fla
c300: 67 73 20 26 20 4d 45 4d 5f 53 74 72 20 7c 7c 20  gs & MEM_Str || 
c310: 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64  db->mallocFailed
c320: 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67   );.  pIn1->flag
c330: 73 20 26 3d 20 7e 28 4d 45 4d 5f 49 6e 74 7c 4d  s &= ~(MEM_Int|M
c340: 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 42 6c 6f 62  EM_Real|MEM_Blob
c350: 7c 4d 45 4d 5f 5a 65 72 6f 29 3b 0a 20 20 55 50  |MEM_Zero);.  UP
c360: 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
c370: 45 28 70 49 6e 31 29 3b 0a 20 20 62 72 65 61 6b  E(pIn1);.  break
c380: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
c390: 54 6f 42 6c 6f 62 20 50 31 20 2a 20 2a 20 2a 20  ToBlob P1 * * * 
c3a0: 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68  *.**.** Force th
c3b0: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
c3c0: 74 65 72 20 50 31 20 74 6f 20 62 65 20 61 20 42  ter P1 to be a B
c3d0: 4c 4f 42 2e 0a 2a 2a 20 49 66 20 74 68 65 20 76  LOB..** If the v
c3e0: 61 6c 75 65 20 69 73 20 6e 75 6d 65 72 69 63 2c  alue is numeric,
c3f0: 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f 20 61   convert it to a
c400: 20 73 74 72 69 6e 67 20 66 69 72 73 74 2e 0a 2a   string first..*
c410: 2a 20 53 74 72 69 6e 67 73 20 61 72 65 20 73 69  * Strings are si
c420: 6d 70 6c 79 20 72 65 69 6e 74 65 72 70 72 65 74  mply reinterpret
c430: 65 64 20 61 73 20 62 6c 6f 62 73 20 77 69 74 68  ed as blobs with
c440: 20 6e 6f 20 63 68 61 6e 67 65 0a 2a 2a 20 74 6f   no change.** to
c450: 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20   the underlying 
c460: 64 61 74 61 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55  data..**.** A NU
c470: 4c 4c 20 76 61 6c 75 65 20 69 73 20 6e 6f 74 20  LL value is not 
c480: 63 68 61 6e 67 65 64 20 62 79 20 74 68 69 73 20  changed by this 
c490: 72 6f 75 74 69 6e 65 2e 20 20 49 74 20 72 65 6d  routine.  It rem
c4a0: 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61  ains NULL..*/.ca
c4b0: 73 65 20 4f 50 5f 54 6f 42 6c 6f 62 3a 20 7b 20  se OP_ToBlob: { 
c4c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c4d0: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 54   /* same as TK_T
c4e0: 4f 5f 42 4c 4f 42 2c 20 69 6e 31 20 2a 2f 0a 20  O_BLOB, in1 */. 
c4f0: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
c500: 70 2d 3e 70 31 5d 3b 0a 20 20 6d 65 6d 41 62 6f  p->p1];.  memAbo
c510: 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 49  utToChange(p, pI
c520: 6e 31 29 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d  n1);.  if( pIn1-
c530: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
c540: 6c 20 29 20 62 72 65 61 6b 3b 0a 20 20 69 66 28  l ) break;.  if(
c550: 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
c560: 4d 45 4d 5f 42 6c 6f 62 29 3d 3d 30 20 29 7b 0a  MEM_Blob)==0 ){.
c570: 20 20 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74      applyAffinit
c580: 79 28 70 49 6e 31 2c 20 53 51 4c 49 54 45 5f 41  y(pIn1, SQLITE_A
c590: 46 46 5f 54 45 58 54 2c 20 65 6e 63 6f 64 69 6e  FF_TEXT, encodin
c5a0: 67 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  g);.    assert( 
c5b0: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
c5c0: 4d 5f 53 74 72 20 7c 7c 20 64 62 2d 3e 6d 61 6c  M_Str || db->mal
c5d0: 6c 6f 63 46 61 69 6c 65 64 20 29 3b 0a 20 20 20  locFailed );.   
c5e0: 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
c5f0: 70 49 6e 31 2c 20 4d 45 4d 5f 42 6c 6f 62 29 3b  pIn1, MEM_Blob);
c600: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 49  .  }else{.    pI
c610: 6e 31 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 28 4d  n1->flags &= ~(M
c620: 45 4d 5f 54 79 70 65 4d 61 73 6b 26 7e 4d 45 4d  EM_TypeMask&~MEM
c630: 5f 42 6c 6f 62 29 3b 0a 20 20 7d 0a 20 20 55 50  _Blob);.  }.  UP
c640: 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
c650: 45 28 70 49 6e 31 29 3b 0a 20 20 62 72 65 61 6b  E(pIn1);.  break
c660: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
c670: 54 6f 4e 75 6d 65 72 69 63 20 50 31 20 2a 20 2a  ToNumeric P1 * *
c680: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65   * *.**.** Force
c690: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
c6a0: 67 69 73 74 65 72 20 50 31 20 74 6f 20 62 65 20  gister P1 to be 
c6b0: 6e 75 6d 65 72 69 63 20 28 65 69 74 68 65 72 20  numeric (either 
c6c0: 61 6e 0a 2a 2a 20 69 6e 74 65 67 65 72 20 6f 72  an.** integer or
c6d0: 20 61 20 66 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e   a floating-poin
c6e0: 74 20 6e 75 6d 62 65 72 2e 29 0a 2a 2a 20 49 66  t number.).** If
c6f0: 20 74 68 65 20 76 61 6c 75 65 20 69 73 20 74 65   the value is te
c700: 78 74 20 6f 72 20 62 6c 6f 62 2c 20 74 72 79 20  xt or blob, try 
c710: 74 6f 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f  to convert it to
c720: 20 61 6e 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a   an using the.**
c730: 20 65 71 75 69 76 61 6c 65 6e 74 20 6f 66 20 61   equivalent of a
c740: 74 6f 69 28 29 20 6f 72 20 61 74 6f 66 28 29 20  toi() or atof() 
c750: 61 6e 64 20 73 74 6f 72 65 20 30 20 69 66 20 6e  and store 0 if n
c760: 6f 20 73 75 63 68 20 63 6f 6e 76 65 72 73 69 6f  o such conversio
c770: 6e 20 0a 2a 2a 20 69 73 20 70 6f 73 73 69 62 6c  n .** is possibl
c780: 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20  e..**.** A NULL 
c790: 76 61 6c 75 65 20 69 73 20 6e 6f 74 20 63 68 61  value is not cha
c7a0: 6e 67 65 64 20 62 79 20 74 68 69 73 20 72 6f 75  nged by this rou
c7b0: 74 69 6e 65 2e 20 20 49 74 20 72 65 6d 61 69 6e  tine.  It remain
c7c0: 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20  s NULL..*/.case 
c7d0: 4f 50 5f 54 6f 4e 75 6d 65 72 69 63 3a 20 7b 20  OP_ToNumeric: { 
c7e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c7f0: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 54   /* same as TK_T
c800: 4f 5f 4e 55 4d 45 52 49 43 2c 20 69 6e 31 20 2a  O_NUMERIC, in1 *
c810: 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
c820: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 6d 65 6d  [pOp->p1];.  mem
c830: 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
c840: 20 70 49 6e 31 29 3b 0a 20 20 69 66 28 20 28 70   pIn1);.  if( (p
c850: 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45  In1->flags & (ME
c860: 4d 5f 4e 75 6c 6c 7c 4d 45 4d 5f 49 6e 74 7c 4d  M_Null|MEM_Int|M
c870: 45 4d 5f 52 65 61 6c 29 29 3d 3d 30 20 29 7b 0a  EM_Real))==0 ){.
c880: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
c890: 65 6d 4e 75 6d 65 72 69 66 79 28 70 49 6e 31 29  emNumerify(pIn1)
c8a0: 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
c8b0: 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
c8c0: 45 5f 4f 4d 49 54 5f 43 41 53 54 20 2a 2f 0a 0a  E_OMIT_CAST */..
c8d0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 6f 49 6e 74  /* Opcode: ToInt
c8e0: 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   P1 * * * *.**.*
c8f0: 2a 20 46 6f 72 63 65 20 74 68 65 20 76 61 6c 75  * Force the valu
c900: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
c910: 20 74 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65   to be an intege
c920: 72 2e 20 20 49 66 0a 2a 2a 20 54 68 65 20 76 61  r.  If.** The va
c930: 6c 75 65 20 69 73 20 63 75 72 72 65 6e 74 6c 79  lue is currently
c940: 20 61 20 72 65 61 6c 20 6e 75 6d 62 65 72 2c 20   a real number, 
c950: 64 72 6f 70 20 69 74 73 20 66 72 61 63 74 69 6f  drop its fractio
c960: 6e 61 6c 20 70 61 72 74 2e 0a 2a 2a 20 49 66 20  nal part..** If 
c970: 74 68 65 20 76 61 6c 75 65 20 69 73 20 74 65 78  the value is tex
c980: 74 20 6f 72 20 62 6c 6f 62 2c 20 74 72 79 20 74  t or blob, try t
c990: 6f 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f 20  o convert it to 
c9a0: 61 6e 20 69 6e 74 65 67 65 72 20 75 73 69 6e 67  an integer using
c9b0: 20 74 68 65 0a 2a 2a 20 65 71 75 69 76 61 6c 65   the.** equivale
c9c0: 6e 74 20 6f 66 20 61 74 6f 69 28 29 20 61 6e 64  nt of atoi() and
c9d0: 20 73 74 6f 72 65 20 30 20 69 66 20 6e 6f 20 73   store 0 if no s
c9e0: 75 63 68 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69  uch conversion i
c9f0: 73 20 70 6f 73 73 69 62 6c 65 2e 0a 2a 2a 0a 2a  s possible..**.*
ca00: 2a 20 41 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69  * A NULL value i
ca10: 73 20 6e 6f 74 20 63 68 61 6e 67 65 64 20 62 79  s not changed by
ca20: 20 74 68 69 73 20 72 6f 75 74 69 6e 65 2e 20 20   this routine.  
ca30: 49 74 20 72 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e  It remains NULL.
ca40: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 6f 49 6e  .*/.case OP_ToIn
ca50: 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  t: {            
ca60: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
ca70: 20 54 4b 5f 54 4f 5f 49 4e 54 2c 20 69 6e 31 20   TK_TO_INT, in1 
ca80: 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
ca90: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 6d 65  m[pOp->p1];.  me
caa0: 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
cab0: 2c 20 70 49 6e 31 29 3b 0a 20 20 69 66 28 20 28  , pIn1);.  if( (
cac0: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
cad0: 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20  M_Null)==0 ){.  
cae0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
caf0: 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e 31 29  Integerify(pIn1)
cb00: 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
cb10: 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  ..#if !defined(S
cb20: 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 41 53 54 29  QLITE_OMIT_CAST)
cb30: 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c   && !defined(SQL
cb40: 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e  ITE_OMIT_FLOATIN
cb50: 47 5f 50 4f 49 4e 54 29 0a 2f 2a 20 4f 70 63 6f  G_POINT)./* Opco
cb60: 64 65 3a 20 54 6f 52 65 61 6c 20 50 31 20 2a 20  de: ToReal P1 * 
cb70: 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63  * * *.**.** Forc
cb80: 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  e the value in r
cb90: 65 67 69 73 74 65 72 20 50 31 20 74 6f 20 62 65  egister P1 to be
cba0: 20 61 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e   a floating poin
cbb0: 74 20 6e 75 6d 62 65 72 2e 0a 2a 2a 20 49 66 20  t number..** If 
cbc0: 54 68 65 20 76 61 6c 75 65 20 69 73 20 63 75 72  The value is cur
cbd0: 72 65 6e 74 6c 79 20 61 6e 20 69 6e 74 65 67 65  rently an intege
cbe0: 72 2c 20 63 6f 6e 76 65 72 74 20 69 74 2e 0a 2a  r, convert it..*
cbf0: 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 69  * If the value i
cc00: 73 20 74 65 78 74 20 6f 72 20 62 6c 6f 62 2c 20  s text or blob, 
cc10: 74 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20 69  try to convert i
cc20: 74 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20  t to an integer 
cc30: 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 65 71 75  using the.** equ
cc40: 69 76 61 6c 65 6e 74 20 6f 66 20 61 74 6f 69 28  ivalent of atoi(
cc50: 29 20 61 6e 64 20 73 74 6f 72 65 20 30 2e 30 20  ) and store 0.0 
cc60: 69 66 20 6e 6f 20 73 75 63 68 20 63 6f 6e 76 65  if no such conve
cc70: 72 73 69 6f 6e 20 69 73 20 70 6f 73 73 69 62 6c  rsion is possibl
cc80: 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20  e..**.** A NULL 
cc90: 76 61 6c 75 65 20 69 73 20 6e 6f 74 20 63 68 61  value is not cha
cca0: 6e 67 65 64 20 62 79 20 74 68 69 73 20 72 6f 75  nged by this rou
ccb0: 74 69 6e 65 2e 20 20 49 74 20 72 65 6d 61 69 6e  tine.  It remain
ccc0: 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20  s NULL..*/.case 
ccd0: 4f 50 5f 54 6f 52 65 61 6c 3a 20 7b 20 20 20 20  OP_ToReal: {    
cce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
ccf0: 20 73 61 6d 65 20 61 73 20 54 4b 5f 54 4f 5f 52   same as TK_TO_R
cd00: 45 41 4c 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49  EAL, in1 */.  pI
cd10: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
cd20: 70 31 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54  p1];.  memAboutT
cd30: 6f 43 68 61 6e 67 65 28 70 2c 20 70 49 6e 31 29  oChange(p, pIn1)
cd40: 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66  ;.  if( (pIn1->f
cd50: 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29  lags & MEM_Null)
cd60: 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  ==0 ){.    sqlit
cd70: 65 33 56 64 62 65 4d 65 6d 52 65 61 6c 69 66 79  e3VdbeMemRealify
cd80: 28 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20 62 72  (pIn1);.  }.  br
cd90: 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
cda0: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
cdb0: 5f 4f 4d 49 54 5f 43 41 53 54 29 20 26 26 20 21  _OMIT_CAST) && !
cdc0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
cdd0: 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49  MIT_FLOATING_POI
cde0: 4e 54 29 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64  NT) */../* Opcod
cdf0: 65 3a 20 4c 74 20 50 31 20 50 32 20 50 33 20 50  e: Lt P1 P2 P3 P
ce00: 34 20 50 35 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 61  4 P5.**.** Compa
ce10: 72 65 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e  re the values in
ce20: 20 72 65 67 69 73 74 65 72 20 50 31 20 61 6e 64   register P1 and
ce30: 20 50 33 2e 20 20 49 66 20 72 65 67 28 50 33 29   P3.  If reg(P3)
ce40: 3c 72 65 67 28 50 31 29 20 74 68 65 6e 0a 2a 2a  <reg(P1) then.**
ce50: 20 6a 75 6d 70 20 74 6f 20 61 64 64 72 65 73 73   jump to address
ce60: 20 50 32 2e 20 20 0a 2a 2a 0a 2a 2a 20 49 66 20   P2.  .**.** If 
ce70: 74 68 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49  the SQLITE_JUMPI
ce80: 46 4e 55 4c 4c 20 62 69 74 20 6f 66 20 50 35 20  FNULL bit of P5 
ce90: 69 73 20 73 65 74 20 61 6e 64 20 65 69 74 68 65  is set and eithe
cea0: 72 20 72 65 67 28 50 31 29 20 6f 72 0a 2a 2a 20  r reg(P1) or.** 
ceb0: 72 65 67 28 50 33 29 20 69 73 20 4e 55 4c 4c 20  reg(P3) is NULL 
cec0: 74 68 65 6e 20 74 61 6b 65 20 74 68 65 20 6a 75  then take the ju
ced0: 6d 70 2e 20 20 49 66 20 74 68 65 20 53 51 4c 49  mp.  If the SQLI
cee0: 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 0a 2a  TE_JUMPIFNULL .*
cef0: 2a 20 62 69 74 20 69 73 20 63 6c 65 61 72 20 74  * bit is clear t
cf00: 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  hen fall through
cf10: 20 69 66 20 65 69 74 68 65 72 20 6f 70 65 72 61   if either opera
cf20: 6e 64 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a  nd is NULL..**.*
cf30: 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 41 46 46  * The SQLITE_AFF
cf40: 5f 4d 41 53 4b 20 70 6f 72 74 69 6f 6e 20 6f 66  _MASK portion of
cf50: 20 50 35 20 6d 75 73 74 20 62 65 20 61 6e 20 61   P5 must be an a
cf60: 66 66 69 6e 69 74 79 20 63 68 61 72 61 63 74 65  ffinity characte
cf70: 72 20 2d 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46  r -.** SQLITE_AF
cf80: 46 5f 54 45 58 54 2c 20 53 51 4c 49 54 45 5f 41  F_TEXT, SQLITE_A
cf90: 46 46 5f 49 4e 54 45 47 45 52 2c 20 61 6e 64 20  FF_INTEGER, and 
cfa0: 73 6f 20 66 6f 72 74 68 2e 20 41 6e 20 61 74 74  so forth. An att
cfb0: 65 6d 70 74 20 69 73 20 6d 61 64 65 20 0a 2a 2a  empt is made .**
cfc0: 20 74 6f 20 63 6f 65 72 63 65 20 62 6f 74 68 20   to coerce both 
cfd0: 69 6e 70 75 74 73 20 61 63 63 6f 72 64 69 6e 67  inputs according
cfe0: 20 74 6f 20 74 68 69 73 20 61 66 66 69 6e 69 74   to this affinit
cff0: 79 20 62 65 66 6f 72 65 20 74 68 65 0a 2a 2a 20  y before the.** 
d000: 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 6d 61  comparison is ma
d010: 64 65 2e 20 49 66 20 74 68 65 20 53 51 4c 49 54  de. If the SQLIT
d020: 45 5f 41 46 46 5f 4d 41 53 4b 20 69 73 20 30 78  E_AFF_MASK is 0x
d030: 30 30 2c 20 74 68 65 6e 20 6e 75 6d 65 72 69 63  00, then numeric
d040: 0a 2a 2a 20 61 66 66 69 6e 69 74 79 20 69 73 20  .** affinity is 
d050: 75 73 65 64 2e 20 4e 6f 74 65 20 74 68 61 74 20  used. Note that 
d060: 74 68 65 20 61 66 66 69 6e 69 74 79 20 63 6f 6e  the affinity con
d070: 76 65 72 73 69 6f 6e 73 20 61 72 65 20 73 74 6f  versions are sto
d080: 72 65 64 0a 2a 2a 20 62 61 63 6b 20 69 6e 74 6f  red.** back into
d090: 20 74 68 65 20 69 6e 70 75 74 20 72 65 67 69 73   the input regis
d0a0: 74 65 72 73 20 50 31 20 61 6e 64 20 50 33 2e 20  ters P1 and P3. 
d0b0: 20 53 6f 20 74 68 69 73 20 6f 70 63 6f 64 65 20   So this opcode 
d0c0: 63 61 6e 20 63 61 75 73 65 0a 2a 2a 20 70 65 72  can cause.** per
d0d0: 73 69 73 74 65 6e 74 20 63 68 61 6e 67 65 73 20  sistent changes 
d0e0: 74 6f 20 72 65 67 69 73 74 65 72 73 20 50 31 20  to registers P1 
d0f0: 61 6e 64 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 4f 6e  and P3..**.** On
d100: 63 65 20 61 6e 79 20 63 6f 6e 76 65 72 73 69 6f  ce any conversio
d110: 6e 73 20 68 61 76 65 20 74 61 6b 65 6e 20 70 6c  ns have taken pl
d120: 61 63 65 2c 20 61 6e 64 20 6e 65 69 74 68 65 72  ace, and neither
d130: 20 76 61 6c 75 65 20 69 73 20 4e 55 4c 4c 2c 20   value is NULL, 
d140: 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 73 20 61  .** the values a
d150: 72 65 20 63 6f 6d 70 61 72 65 64 2e 20 49 66 20  re compared. If 
d160: 62 6f 74 68 20 76 61 6c 75 65 73 20 61 72 65 20  both values are 
d170: 62 6c 6f 62 73 20 74 68 65 6e 20 6d 65 6d 63 6d  blobs then memcm
d180: 70 28 29 20 69 73 0a 2a 2a 20 75 73 65 64 20 74  p() is.** used t
d190: 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20  o determine the 
d1a0: 72 65 73 75 6c 74 73 20 6f 66 20 74 68 65 20 63  results of the c
d1b0: 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 49 66 20 62  omparison.  If b
d1c0: 6f 74 68 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72  oth values.** ar
d1d0: 65 20 74 65 78 74 2c 20 74 68 65 6e 20 74 68 65  e text, then the
d1e0: 20 61 70 70 72 6f 70 72 69 61 74 65 20 63 6f 6c   appropriate col
d1f0: 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20  lating function 
d200: 73 70 65 63 69 66 69 65 64 20 69 6e 0a 2a 2a 20  specified in.** 
d210: 50 34 20 69 73 20 20 75 73 65 64 20 74 6f 20 64  P4 is  used to d
d220: 6f 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e  o the comparison
d230: 2e 20 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20  .  If P4 is not 
d240: 73 70 65 63 69 66 69 65 64 20 74 68 65 6e 0a 2a  specified then.*
d250: 2a 20 6d 65 6d 63 6d 70 28 29 20 69 73 20 75 73  * memcmp() is us
d260: 65 64 20 74 6f 20 63 6f 6d 70 61 72 65 20 74 65  ed to compare te
d270: 78 74 20 73 74 72 69 6e 67 2e 20 20 49 66 20 62  xt string.  If b
d280: 6f 74 68 20 76 61 6c 75 65 73 20 61 72 65 0a 2a  oth values are.*
d290: 2a 20 6e 75 6d 65 72 69 63 2c 20 74 68 65 6e 20  * numeric, then 
d2a0: 61 20 6e 75 6d 65 72 69 63 20 63 6f 6d 70 61 72  a numeric compar
d2b0: 69 73 6f 6e 20 69 73 20 75 73 65 64 2e 20 49 66  ison is used. If
d2c0: 20 74 68 65 20 74 77 6f 20 76 61 6c 75 65 73 0a   the two values.
d2d0: 2a 2a 20 61 72 65 20 6f 66 20 64 69 66 66 65 72  ** are of differ
d2e0: 65 6e 74 20 74 79 70 65 73 2c 20 74 68 65 6e 20  ent types, then 
d2f0: 6e 75 6d 62 65 72 73 20 61 72 65 20 63 6f 6e 73  numbers are cons
d300: 69 64 65 72 65 64 20 6c 65 73 73 20 74 68 61 6e  idered less than
d310: 0a 2a 2a 20 73 74 72 69 6e 67 73 20 61 6e 64 20  .** strings and 
d320: 73 74 72 69 6e 67 73 20 61 72 65 20 63 6f 6e 73  strings are cons
d330: 69 64 65 72 65 64 20 6c 65 73 73 20 74 68 61 6e  idered less than
d340: 20 62 6c 6f 62 73 2e 0a 2a 2a 0a 2a 2a 20 49 66   blobs..**.** If
d350: 20 74 68 65 20 53 51 4c 49 54 45 5f 53 54 4f 52   the SQLITE_STOR
d360: 45 50 32 20 62 69 74 20 6f 66 20 50 35 20 69 73  EP2 bit of P5 is
d370: 20 73 65 74 2c 20 74 68 65 6e 20 64 6f 20 6e 6f   set, then do no
d380: 74 20 6a 75 6d 70 2e 20 20 49 6e 73 74 65 61 64  t jump.  Instead
d390: 2c 0a 2a 2a 20 73 74 6f 72 65 20 61 20 62 6f 6f  ,.** store a boo
d3a0: 6c 65 61 6e 20 72 65 73 75 6c 74 20 28 65 69 74  lean result (eit
d3b0: 68 65 72 20 30 2c 20 6f 72 20 31 2c 20 6f 72 20  her 0, or 1, or 
d3c0: 4e 55 4c 4c 29 20 69 6e 20 72 65 67 69 73 74 65  NULL) in registe
d3d0: 72 20 50 32 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  r P2..*/./* Opco
d3e0: 64 65 3a 20 4e 65 20 50 31 20 50 32 20 50 33 20  de: Ne P1 P2 P3 
d3f0: 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73  P4 P5.**.** This
d400: 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65   works just like
d410: 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65   the Lt opcode e
d420: 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20 6a  xcept that the j
d430: 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a  ump is taken if.
d440: 2a 2a 20 74 68 65 20 6f 70 65 72 61 6e 64 73 20  ** the operands 
d450: 69 6e 20 72 65 67 69 73 74 65 72 73 20 50 31 20  in registers P1 
d460: 61 6e 64 20 50 33 20 61 72 65 20 6e 6f 74 20 65  and P3 are not e
d470: 71 75 61 6c 2e 20 20 53 65 65 20 74 68 65 20 4c  qual.  See the L
d480: 74 20 6f 70 63 6f 64 65 20 66 6f 72 0a 2a 2a 20  t opcode for.** 
d490: 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72  additional infor
d4a0: 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66  mation..**.** If
d4b0: 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69   SQLITE_NULLEQ i
d4c0: 73 20 73 65 74 20 69 6e 20 50 35 20 74 68 65 6e  s set in P5 then
d4d0: 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 63   the result of c
d4e0: 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 61 6c 77  omparison is alw
d4f0: 61 79 73 20 65 69 74 68 65 72 0a 2a 2a 20 74 72  ays either.** tr
d500: 75 65 20 6f 72 20 66 61 6c 73 65 20 61 6e 64 20  ue or false and 
d510: 69 73 20 6e 65 76 65 72 20 4e 55 4c 4c 2e 20 20  is never NULL.  
d520: 49 66 20 62 6f 74 68 20 6f 70 65 72 61 6e 64 73  If both operands
d530: 20 61 72 65 20 4e 55 4c 4c 20 74 68 65 6e 20 74   are NULL then t
d540: 68 65 20 72 65 73 75 6c 74 0a 2a 2a 20 6f 66 20  he result.** of 
d550: 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 66 61  comparison is fa
d560: 6c 73 65 2e 20 20 49 66 20 65 69 74 68 65 72 20  lse.  If either 
d570: 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20  operand is NULL 
d580: 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20  then the result 
d590: 69 73 20 74 72 75 65 2e 0a 2a 2a 20 49 66 20 6e  is true..** If n
d5a0: 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69  either operand i
d5b0: 73 20 4e 55 4c 4c 20 74 68 65 20 74 68 65 20 72  s NULL the the r
d5c0: 65 73 75 6c 74 20 69 73 20 74 68 65 20 73 61 6d  esult is the sam
d5d0: 65 20 61 73 20 69 74 20 77 6f 75 6c 64 20 62 65  e as it would be
d5e0: 20 69 66 0a 2a 2a 20 74 68 65 20 53 51 4c 49 54   if.** the SQLIT
d5f0: 45 5f 4e 55 4c 4c 45 51 20 66 6c 61 67 20 77 65  E_NULLEQ flag we
d600: 72 65 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20  re omitted from 
d610: 50 35 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  P5..*/./* Opcode
d620: 3a 20 45 71 20 50 31 20 50 32 20 50 33 20 50 34  : Eq P1 P2 P3 P4
d630: 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77   P5.**.** This w
d640: 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 74  orks just like t
d650: 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78 63  he Lt opcode exc
d660: 65 70 74 20 74 68 61 74 20 74 68 65 20 6a 75 6d  ept that the jum
d670: 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a  p is taken if.**
d680: 20 74 68 65 20 6f 70 65 72 61 6e 64 73 20 69 6e   the operands in
d690: 20 72 65 67 69 73 74 65 72 73 20 50 31 20 61 6e   registers P1 an
d6a0: 64 20 50 33 20 61 72 65 20 65 71 75 61 6c 2e 0a  d P3 are equal..
d6b0: 2a 2a 20 53 65 65 20 74 68 65 20 4c 74 20 6f 70  ** See the Lt op
d6c0: 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f  code for additio
d6d0: 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  nal information.
d6e0: 0a 2a 2a 0a 2a 2a 20 49 66 20 53 51 4c 49 54 45  .**.** If SQLITE
d6f0: 5f 4e 55 4c 4c 45 51 20 69 73 20 73 65 74 20 69  _NULLEQ is set i
d700: 6e 20 50 35 20 74 68 65 6e 20 74 68 65 20 72 65  n P5 then the re
d710: 73 75 6c 74 20 6f 66 20 63 6f 6d 70 61 72 69 73  sult of comparis
d720: 6f 6e 20 69 73 20 61 6c 77 61 79 73 20 65 69 74  on is always eit
d730: 68 65 72 0a 2a 2a 20 74 72 75 65 20 6f 72 20 66  her.** true or f
d740: 61 6c 73 65 20 61 6e 64 20 69 73 20 6e 65 76 65  alse and is neve
d750: 72 20 4e 55 4c 4c 2e 20 20 49 66 20 62 6f 74 68  r NULL.  If both
d760: 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20 4e 55   operands are NU
d770: 4c 4c 20 74 68 65 6e 20 74 68 65 20 72 65 73 75  LL then the resu
d780: 6c 74 0a 2a 2a 20 6f 66 20 63 6f 6d 70 61 72 69  lt.** of compari
d790: 73 6f 6e 20 69 73 20 74 72 75 65 2e 20 20 49 66  son is true.  If
d7a0: 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20   either operand 
d7b0: 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65  is NULL then the
d7c0: 20 72 65 73 75 6c 74 20 69 73 20 66 61 6c 73 65   result is false
d7d0: 2e 0a 2a 2a 20 49 66 20 6e 65 69 74 68 65 72 20  ..** If neither 
d7e0: 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20  operand is NULL 
d7f0: 74 68 65 20 74 68 65 20 72 65 73 75 6c 74 20 69  the the result i
d800: 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 69 74  s the same as it
d810: 20 77 6f 75 6c 64 20 62 65 20 69 66 0a 2a 2a 20   would be if.** 
d820: 74 68 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45  the SQLITE_NULLE
d830: 51 20 66 6c 61 67 20 77 65 72 65 20 6f 6d 69 74  Q flag were omit
d840: 74 65 64 20 66 72 6f 6d 20 50 35 2e 0a 2a 2f 0a  ted from P5..*/.
d850: 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 65 20 50 31  /* Opcode: Le P1
d860: 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a   P2 P3 P4 P5.**.
d870: 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75  ** This works ju
d880: 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f  st like the Lt o
d890: 70 63 6f 64 65 20 65 78 63 65 70 74 20 74 68 61  pcode except tha
d8a0: 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61  t the jump is ta
d8b0: 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f  ken if.** the co
d8c0: 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65  ntent of registe
d8d0: 72 20 50 33 20 69 73 20 6c 65 73 73 20 74 68 61  r P3 is less tha
d8e0: 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68  n or equal to th
d8f0: 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20  e content of.** 
d900: 72 65 67 69 73 74 65 72 20 50 31 2e 20 20 53 65  register P1.  Se
d910: 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20  e the Lt opcode 
d920: 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69  for additional i
d930: 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f  nformation..*/./
d940: 2a 20 4f 70 63 6f 64 65 3a 20 47 74 20 50 31 20  * Opcode: Gt P1 
d950: 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a  P2 P3 P4 P5.**.*
d960: 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73  * This works jus
d970: 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70  t like the Lt op
d980: 63 6f 64 65 20 65 78 63 65 70 74 20 74 68 61 74  code except that
d990: 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b   the jump is tak
d9a0: 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f 6e  en if.** the con
d9b0: 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72  tent of register
d9c0: 20 50 33 20 69 73 20 67 72 65 61 74 65 72 20 74   P3 is greater t
d9d0: 68 61 6e 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  han the content 
d9e0: 6f 66 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50  of.** register P
d9f0: 31 2e 20 20 53 65 65 20 74 68 65 20 4c 74 20 6f  1.  See the Lt o
da00: 70 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69  pcode for additi
da10: 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  onal information
da20: 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
da30: 47 65 20 50 31 20 50 32 20 50 33 20 50 34 20 50  Ge P1 P2 P3 P4 P
da40: 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72  5.**.** This wor
da50: 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 74 68 65  ks just like the
da60: 20 4c 74 20 6f 70 63 6f 64 65 20 65 78 63 65 70   Lt opcode excep
da70: 74 20 74 68 61 74 20 74 68 65 20 6a 75 6d 70 20  t that the jump 
da80: 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74  is taken if.** t
da90: 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65  he content of re
daa0: 67 69 73 74 65 72 20 50 33 20 69 73 20 67 72 65  gister P3 is gre
dab0: 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75  ater than or equ
dac0: 61 6c 20 74 6f 20 74 68 65 20 63 6f 6e 74 65 6e  al to the conten
dad0: 74 20 6f 66 0a 2a 2a 20 72 65 67 69 73 74 65 72  t of.** register
dae0: 20 50 31 2e 20 20 53 65 65 20 74 68 65 20 4c 74   P1.  See the Lt
daf0: 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64 64 69   opcode for addi
db00: 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69  tional informati
db10: 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 45  on..*/.case OP_E
db20: 71 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  q:              
db30: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 45   /* same as TK_E
db40: 51 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e  Q, jump, in1, in
db50: 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 3a  3 */.case OP_Ne:
db60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
db70: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4e 45 2c  * same as TK_NE,
db80: 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20   jump, in1, in3 
db90: 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 74 3a 20 20  */.case OP_Lt:  
dba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
dbb0: 73 61 6d 65 20 61 73 20 54 4b 5f 4c 54 2c 20 6a  same as TK_LT, j
dbc0: 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f  ump, in1, in3 */
dbd0: 0a 63 61 73 65 20 4f 50 5f 4c 65 3a 20 20 20 20  .case OP_Le:    
dbe0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
dbf0: 6d 65 20 61 73 20 54 4b 5f 4c 45 2c 20 6a 75 6d  me as TK_LE, jum
dc00: 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63  p, in1, in3 */.c
dc10: 61 73 65 20 4f 50 5f 47 74 3a 20 20 20 20 20 20  ase OP_Gt:      
dc20: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
dc30: 20 61 73 20 54 4b 5f 47 54 2c 20 6a 75 6d 70 2c   as TK_GT, jump,
dc40: 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73   in1, in3 */.cas
dc50: 65 20 4f 50 5f 47 65 3a 20 7b 20 20 20 20 20 20  e OP_Ge: {      
dc60: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
dc70: 73 20 54 4b 5f 47 45 2c 20 6a 75 6d 70 2c 20 69  s TK_GE, jump, i
dc80: 6e 31 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74  n1, in3 */.  int
dc90: 20 72 65 73 3b 20 20 20 20 20 20 20 20 20 20 20   res;           
dca0: 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20 74 68   /* Result of th
dcb0: 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 66 20  e comparison of 
dcc0: 70 49 6e 31 20 61 67 61 69 6e 73 74 20 70 49 6e  pIn1 against pIn
dcd0: 33 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 69  3 */.  char affi
dce0: 6e 69 74 79 3b 20 20 20 20 20 20 2f 2a 20 41 66  nity;      /* Af
dcf0: 66 69 6e 69 74 79 20 74 6f 20 75 73 65 20 66 6f  finity to use fo
dd00: 72 20 63 6f 6d 70 61 72 69 73 6f 6e 20 2a 2f 0a  r comparison */.
dd10: 20 20 75 31 36 20 66 6c 61 67 73 31 3b 20 20 20    u16 flags1;   
dd20: 20 20 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66        /* Copy of
dd30: 20 69 6e 69 74 69 61 6c 20 76 61 6c 75 65 20 6f   initial value o
dd40: 66 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 2a 2f  f pIn1->flags */
dd50: 0a 20 20 75 31 36 20 66 6c 61 67 73 33 3b 20 20  .  u16 flags3;  
dd60: 20 20 20 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f         /* Copy o
dd70: 66 20 69 6e 69 74 69 61 6c 20 76 61 6c 75 65 20  f initial value 
dd80: 6f 66 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 2a  of pIn3->flags *
dd90: 2f 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  /..  pIn1 = &aMe
dda0: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49  m[pOp->p1];.  pI
ddb0: 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n3 = &aMem[pOp->
ddc0: 70 33 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54  p3];.  memAboutT
ddd0: 6f 43 68 61 6e 67 65 28 70 2c 20 70 49 6e 31 29  oChange(p, pIn1)
dde0: 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68  ;.  memAboutToCh
ddf0: 61 6e 67 65 28 70 2c 20 70 49 6e 33 29 3b 0a 20  ange(p, pIn3);. 
de00: 20 66 6c 61 67 73 31 20 3d 20 70 49 6e 31 2d 3e   flags1 = pIn1->
de10: 66 6c 61 67 73 3b 0a 20 20 66 6c 61 67 73 33 20  flags;.  flags3 
de20: 3d 20 70 49 6e 33 2d 3e 66 6c 61 67 73 3b 0a 20  = pIn3->flags;. 
de30: 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67   if( (pIn1->flag
de40: 73 20 7c 20 70 49 6e 33 2d 3e 66 6c 61 67 73 29  s | pIn3->flags)
de50: 26 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20  &MEM_Null ){.   
de60: 20 2f 2a 20 4f 6e 65 20 6f 72 20 62 6f 74 68 20   /* One or both 
de70: 6f 70 65 72 61 6e 64 73 20 61 72 65 20 4e 55 4c  operands are NUL
de80: 4c 20 2a 2f 0a 20 20 20 20 69 66 28 20 70 4f 70  L */.    if( pOp
de90: 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 4e 55  ->p5 & SQLITE_NU
dea0: 4c 4c 45 51 20 29 7b 0a 20 20 20 20 20 20 2f 2a  LLEQ ){.      /*
deb0: 20 49 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45   If SQLITE_NULLE
dec0: 51 20 69 73 20 73 65 74 20 28 77 68 69 63 68 20  Q is set (which 
ded0: 77 69 6c 6c 20 6f 6e 6c 79 20 68 61 70 70 65 6e  will only happen
dee0: 20 69 66 20 74 68 65 20 6f 70 65 72 61 74 6f 72   if the operator
def0: 20 69 73 0a 20 20 20 20 20 20 2a 2a 20 4f 50 5f   is.      ** OP_
df00: 45 71 20 6f 72 20 4f 50 5f 4e 65 29 20 74 68 65  Eq or OP_Ne) the
df10: 6e 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 20  n take the jump 
df20: 6f 72 20 6e 6f 74 20 64 65 70 65 6e 64 69 6e 67  or not depending
df30: 20 6f 6e 20 77 68 65 74 68 65 72 0a 20 20 20 20   on whether.    
df40: 20 20 2a 2a 20 6f 72 20 6e 6f 74 20 62 6f 74 68    ** or not both
df50: 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20 6e 75   operands are nu
df60: 6c 6c 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20  ll..      */.   
df70: 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
df80: 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45 71 20 7c 7c  opcode==OP_Eq ||
df90: 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
dfa0: 5f 4e 65 20 29 3b 0a 20 20 20 20 20 20 72 65 73  _Ne );.      res
dfb0: 20 3d 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20   = (pIn1->flags 
dfc0: 26 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20  & pIn3->flags & 
dfd0: 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 3b 0a 20 20  MEM_Null)==0;.  
dfe0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 2f    }else{.      /
dff0: 2a 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20  * SQLITE_NULLEQ 
e000: 69 73 20 63 6c 65 61 72 20 61 6e 64 20 61 74 20  is clear and at 
e010: 6c 65 61 73 74 20 6f 6e 65 20 6f 70 65 72 61 6e  least one operan
e020: 64 20 69 73 20 4e 55 4c 4c 2c 0a 20 20 20 20 20  d is NULL,.     
e030: 20 2a 2a 20 74 68 65 6e 20 74 68 65 20 72 65 73   ** then the res
e040: 75 6c 74 20 69 73 20 61 6c 77 61 79 73 20 4e 55  ult is always NU
e050: 4c 4c 2e 0a 20 20 20 20 20 20 2a 2a 20 54 68 65  LL..      ** The
e060: 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69   jump is taken i
e070: 66 20 74 68 65 20 53 51 4c 49 54 45 5f 4a 55 4d  f the SQLITE_JUM
e080: 50 49 46 4e 55 4c 4c 20 62 69 74 20 69 73 20 73  PIFNULL bit is s
e090: 65 74 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20  et..      */.   
e0a0: 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26     if( pOp->p5 &
e0b0: 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20   SQLITE_STOREP2 
e0c0: 29 7b 0a 20 20 20 20 20 20 20 20 70 4f 75 74 20  ){.        pOut 
e0d0: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
e0e0: 3b 0a 20 20 20 20 20 20 20 20 4d 65 6d 53 65 74  ;.        MemSet
e0f0: 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d  TypeFlag(pOut, M
e100: 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 20 20 20 20  EM_Null);.      
e110: 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
e120: 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b  (pOp->p2, pOut);
e130: 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28  .      }else if(
e140: 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54   pOp->p5 & SQLIT
e150: 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 29 7b 0a  E_JUMPIFNULL ){.
e160: 20 20 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70          pc = pOp
e170: 2d 3e 70 32 2d 31 3b 0a 20 20 20 20 20 20 7d 0a  ->p2-1;.      }.
e180: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
e190: 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20   }.  }else{.    
e1a0: 2f 2a 20 4e 65 69 74 68 65 72 20 6f 70 65 72 61  /* Neither opera
e1b0: 6e 64 20 69 73 20 4e 55 4c 4c 2e 20 20 44 6f 20  nd is NULL.  Do 
e1c0: 61 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 2a 2f  a comparison. */
e1d0: 0a 20 20 20 20 61 66 66 69 6e 69 74 79 20 3d 20  .    affinity = 
e1e0: 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45  pOp->p5 & SQLITE
e1f0: 5f 41 46 46 5f 4d 41 53 4b 3b 0a 20 20 20 20 69  _AFF_MASK;.    i
e200: 66 28 20 61 66 66 69 6e 69 74 79 20 29 7b 0a 20  f( affinity ){. 
e210: 20 20 20 20 20 61 70 70 6c 79 41 66 66 69 6e 69       applyAffini
e220: 74 79 28 70 49 6e 31 2c 20 61 66 66 69 6e 69 74  ty(pIn1, affinit
e230: 79 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20  y, encoding);.  
e240: 20 20 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74      applyAffinit
e250: 79 28 70 49 6e 33 2c 20 61 66 66 69 6e 69 74 79  y(pIn3, affinity
e260: 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20  , encoding);.   
e270: 20 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f     if( db->mallo
e280: 63 46 61 69 6c 65 64 20 29 20 67 6f 74 6f 20 6e  cFailed ) goto n
e290: 6f 5f 6d 65 6d 3b 0a 20 20 20 20 7d 0a 0a 20 20  o_mem;.    }..  
e2a0: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
e2b0: 34 74 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45  4type==P4_COLLSE
e2c0: 51 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 70 43 6f  Q || pOp->p4.pCo
e2d0: 6c 6c 3d 3d 30 20 29 3b 0a 20 20 20 20 45 78 70  ll==0 );.    Exp
e2e0: 61 6e 64 42 6c 6f 62 28 70 49 6e 31 29 3b 0a 20  andBlob(pIn1);. 
e2f0: 20 20 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49     ExpandBlob(pI
e300: 6e 33 29 3b 0a 20 20 20 20 72 65 73 20 3d 20 73  n3);.    res = s
e310: 71 6c 69 74 65 33 4d 65 6d 43 6f 6d 70 61 72 65  qlite3MemCompare
e320: 28 70 49 6e 33 2c 20 70 49 6e 31 2c 20 70 4f 70  (pIn3, pIn1, pOp
e330: 2d 3e 70 34 2e 70 43 6f 6c 6c 29 3b 0a 20 20 7d  ->p4.pColl);.  }
e340: 0a 20 20 73 77 69 74 63 68 28 20 70 4f 70 2d 3e  .  switch( pOp->
e350: 6f 70 63 6f 64 65 20 29 7b 0a 20 20 20 20 63 61  opcode ){.    ca
e360: 73 65 20 4f 50 5f 45 71 3a 20 20 20 20 72 65 73  se OP_Eq:    res
e370: 20 3d 20 72 65 73 3d 3d 30 3b 20 20 20 20 20 62   = res==0;     b
e380: 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f  reak;.    case O
e390: 50 5f 4e 65 3a 20 20 20 20 72 65 73 20 3d 20 72  P_Ne:    res = r
e3a0: 65 73 21 3d 30 3b 20 20 20 20 20 62 72 65 61 6b  es!=0;     break
e3b0: 3b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 4c 74  ;.    case OP_Lt
e3c0: 3a 20 20 20 20 72 65 73 20 3d 20 72 65 73 3c 30  :    res = res<0
e3d0: 3b 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  ;      break;.  
e3e0: 20 20 63 61 73 65 20 4f 50 5f 4c 65 3a 20 20 20    case OP_Le:   
e3f0: 20 72 65 73 20 3d 20 72 65 73 3c 3d 30 3b 20 20   res = res<=0;  
e400: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61     break;.    ca
e410: 73 65 20 4f 50 5f 47 74 3a 20 20 20 20 72 65 73  se OP_Gt:    res
e420: 20 3d 20 72 65 73 3e 30 3b 20 20 20 20 20 20 62   = res>0;      b
e430: 72 65 61 6b 3b 0a 20 20 20 20 64 65 66 61 75 6c  reak;.    defaul
e440: 74 3a 20 20 20 20 20 20 20 72 65 73 20 3d 20 72  t:       res = r
e450: 65 73 3e 3d 30 3b 20 20 20 20 20 62 72 65 61 6b  es>=0;     break
e460: 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 70 4f 70  ;.  }..  if( pOp
e470: 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 53 54  ->p5 & SQLITE_ST
e480: 4f 52 45 50 32 20 29 7b 0a 20 20 20 20 70 4f 75  OREP2 ){.    pOu
e490: 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
e4a0: 32 5d 3b 0a 20 20 20 20 6d 65 6d 41 62 6f 75 74  2];.    memAbout
e4b0: 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74  ToChange(p, pOut
e4c0: 29 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70  );.    MemSetTyp
e4d0: 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f  eFlag(pOut, MEM_
e4e0: 49 6e 74 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e  Int);.    pOut->
e4f0: 75 2e 69 20 3d 20 72 65 73 3b 0a 20 20 20 20 52  u.i = res;.    R
e500: 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
e510: 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20 20  p->p2, pOut);.  
e520: 7d 65 6c 73 65 20 69 66 28 20 72 65 73 20 29 7b  }else if( res ){
e530: 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70  .    pc = pOp->p
e540: 32 2d 31 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 55  2-1;.  }..  /* U
e550: 6e 64 6f 20 61 6e 79 20 63 68 61 6e 67 65 73 20  ndo any changes 
e560: 6d 61 64 65 20 62 79 20 61 70 70 6c 79 41 66 66  made by applyAff
e570: 69 6e 69 74 79 28 29 20 74 6f 20 74 68 65 20 69  inity() to the i
e580: 6e 70 75 74 20 72 65 67 69 73 74 65 72 73 2e 20  nput registers. 
e590: 2a 2f 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73  */.  pIn1->flags
e5a0: 20 3d 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 26   = (pIn1->flags&
e5b0: 7e 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 29 20 7c  ~MEM_TypeMask) |
e5c0: 20 28 66 6c 61 67 73 31 26 4d 45 4d 5f 54 79 70   (flags1&MEM_Typ
e5d0: 65 4d 61 73 6b 29 3b 0a 20 20 70 49 6e 33 2d 3e  eMask);.  pIn3->
e5e0: 66 6c 61 67 73 20 3d 20 28 70 49 6e 33 2d 3e 66  flags = (pIn3->f
e5f0: 6c 61 67 73 26 7e 4d 45 4d 5f 54 79 70 65 4d 61  lags&~MEM_TypeMa
e600: 73 6b 29 20 7c 20 28 66 6c 61 67 73 33 26 4d 45  sk) | (flags3&ME
e610: 4d 5f 54 79 70 65 4d 61 73 6b 29 3b 0a 20 20 62  M_TypeMask);.  b
e620: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
e630: 64 65 3a 20 50 65 72 6d 75 74 61 74 69 6f 6e 20  de: Permutation 
e640: 2a 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  * * * P4 *.**.**
e650: 20 53 65 74 20 74 68 65 20 70 65 72 6d 75 74 61   Set the permuta
e660: 74 69 6f 6e 20 75 73 65 64 20 62 79 20 74 68 65  tion used by the
e670: 20 4f 50 5f 43 6f 6d 70 61 72 65 20 6f 70 65 72   OP_Compare oper
e680: 61 74 6f 72 20 74 6f 20 62 65 20 74 68 65 20 61  ator to be the a
e690: 72 72 61 79 0a 2a 2a 20 6f 66 20 69 6e 74 65 67  rray.** of integ
e6a0: 65 72 73 20 69 6e 20 50 34 2e 0a 2a 2a 0a 2a 2a  ers in P4..**.**
e6b0: 20 54 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e   The permutation
e6c0: 20 69 73 20 6f 6e 6c 79 20 76 61 6c 69 64 20 75   is only valid u
e6d0: 6e 74 69 6c 20 74 68 65 20 6e 65 78 74 20 4f 50  ntil the next OP
e6e0: 5f 50 65 72 6d 75 74 61 74 69 6f 6e 2c 20 4f 50  _Permutation, OP
e6f0: 5f 43 6f 6d 70 61 72 65 2c 0a 2a 2a 20 4f 50 5f  _Compare,.** OP_
e700: 48 61 6c 74 2c 20 6f 72 20 4f 50 5f 52 65 73 75  Halt, or OP_Resu
e710: 6c 74 52 6f 77 2e 20 20 54 79 70 69 63 61 6c 6c  ltRow.  Typicall
e720: 79 20 74 68 65 20 4f 50 5f 50 65 72 6d 75 74 61  y the OP_Permuta
e730: 74 69 6f 6e 20 73 68 6f 75 6c 64 20 6f 63 63 75  tion should occu
e740: 72 0a 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c 79  r.** immediately
e750: 20 70 72 69 6f 72 20 74 6f 20 74 68 65 20 4f 50   prior to the OP
e760: 5f 43 6f 6d 70 61 72 65 2e 0a 2a 2f 0a 63 61 73  _Compare..*/.cas
e770: 65 20 4f 50 5f 50 65 72 6d 75 74 61 74 69 6f 6e  e OP_Permutation
e780: 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  : {.  assert( pO
e790: 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e  p->p4type==P4_IN
e7a0: 54 41 52 52 41 59 20 29 3b 0a 20 20 61 73 73 65  TARRAY );.  asse
e7b0: 72 74 28 20 70 4f 70 2d 3e 70 34 2e 61 69 20 29  rt( pOp->p4.ai )
e7c0: 3b 0a 20 20 61 50 65 72 6d 75 74 65 20 3d 20 70  ;.  aPermute = p
e7d0: 4f 70 2d 3e 70 34 2e 61 69 3b 0a 20 20 62 72 65  Op->p4.ai;.  bre
e7e0: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
e7f0: 3a 20 43 6f 6d 70 61 72 65 20 50 31 20 50 32 20  : Compare P1 P2 
e800: 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 43 6f  P3 P4 *.**.** Co
e810: 6d 70 61 72 65 20 74 77 6f 20 76 65 63 74 6f 72  mpare two vector
e820: 73 20 6f 66 20 72 65 67 69 73 74 65 72 73 20 69  s of registers i
e830: 6e 20 72 65 67 28 50 31 29 2e 2e 72 65 67 28 50  n reg(P1)..reg(P
e840: 31 2b 50 33 2d 31 29 20 28 63 61 6c 6c 20 74 68  1+P3-1) (call th
e850: 69 73 0a 2a 2a 20 76 65 63 74 6f 72 20 22 41 22  is.** vector "A"
e860: 29 20 61 6e 64 20 69 6e 20 72 65 67 28 50 32 29  ) and in reg(P2)
e870: 2e 2e 72 65 67 28 50 32 2b 50 33 2d 31 29 20 28  ..reg(P2+P3-1) (
e880: 22 42 22 29 2e 20 20 53 61 76 65 20 74 68 65 20  "B").  Save the 
e890: 72 65 73 75 6c 74 20 6f 66 0a 2a 2a 20 74 68 65  result of.** the
e8a0: 20 63 6f 6d 70 61 72 69 73 6f 6e 20 66 6f 72 20   comparison for 
e8b0: 75 73 65 20 62 79 20 74 68 65 20 6e 65 78 74 20  use by the next 
e8c0: 4f 50 5f 4a 75 6d 70 20 69 6e 73 74 72 75 63 74  OP_Jump instruct
e8d0: 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20  ..**.** P4 is a 
e8e0: 4b 65 79 49 6e 66 6f 20 73 74 72 75 63 74 75 72  KeyInfo structur
e8f0: 65 20 74 68 61 74 20 64 65 66 69 6e 65 73 20 63  e that defines c
e900: 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
e910: 65 73 20 61 6e 64 20 73 6f 72 74 0a 2a 2a 20 6f  es and sort.** o
e920: 72 64 65 72 73 20 66 6f 72 20 74 68 65 20 63 6f  rders for the co
e930: 6d 70 61 72 69 73 6f 6e 2e 20 20 54 68 65 20 70  mparison.  The p
e940: 65 72 6d 75 74 61 74 69 6f 6e 20 61 70 70 6c 69  ermutation appli
e950: 65 73 20 74 6f 20 72 65 67 69 73 74 65 72 73 0a  es to registers.
e960: 2a 2a 20 6f 6e 6c 79 2e 20 20 54 68 65 20 4b 65  ** only.  The Ke
e970: 79 49 6e 66 6f 20 65 6c 65 6d 65 6e 74 73 20 61  yInfo elements a
e980: 72 65 20 75 73 65 64 20 73 65 71 75 65 6e 74 69  re used sequenti
e990: 61 6c 6c 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ally..**.** The 
e9a0: 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 61 20  comparison is a 
e9b0: 73 6f 72 74 20 63 6f 6d 70 61 72 69 73 6f 6e 2c  sort comparison,
e9c0: 20 73 6f 20 4e 55 4c 4c 73 20 63 6f 6d 70 61 72   so NULLs compar
e9d0: 65 20 65 71 75 61 6c 2c 0a 2a 2a 20 4e 55 4c 4c  e equal,.** NULL
e9e0: 73 20 61 72 65 20 6c 65 73 73 20 74 68 61 6e 20  s are less than 
e9f0: 6e 75 6d 62 65 72 73 2c 20 6e 75 6d 62 65 72 73  numbers, numbers
ea00: 20 61 72 65 20 6c 65 73 73 20 74 68 61 6e 20 73   are less than s
ea10: 74 72 69 6e 67 73 2c 0a 2a 2a 20 61 6e 64 20 73  trings,.** and s
ea20: 74 72 69 6e 67 73 20 61 72 65 20 6c 65 73 73 20  trings are less 
ea30: 74 68 61 6e 20 62 6c 6f 62 73 2e 0a 2a 2f 0a 63  than blobs..*/.c
ea40: 61 73 65 20 4f 50 5f 43 6f 6d 70 61 72 65 3a 20  ase OP_Compare: 
ea50: 7b 0a 20 20 69 6e 74 20 6e 3b 0a 20 20 69 6e 74  {.  int n;.  int
ea60: 20 69 3b 0a 20 20 69 6e 74 20 70 31 3b 0a 20 20   i;.  int p1;.  
ea70: 69 6e 74 20 70 32 3b 0a 20 20 63 6f 6e 73 74 20  int p2;.  const 
ea80: 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66  KeyInfo *pKeyInf
ea90: 6f 3b 0a 20 20 69 6e 74 20 69 64 78 3b 0a 20 20  o;.  int idx;.  
eaa0: 43 6f 6c 6c 53 65 71 20 2a 70 43 6f 6c 6c 3b 20  CollSeq *pColl; 
eab0: 20 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20     /* Collating 
eac0: 73 65 71 75 65 6e 63 65 20 74 6f 20 75 73 65 20  sequence to use 
ead0: 6f 6e 20 74 68 69 73 20 74 65 72 6d 20 2a 2f 0a  on this term */.
eae0: 20 20 69 6e 74 20 62 52 65 76 3b 20 20 20 20 20    int bRev;     
eaf0: 20 20 20 20 20 2f 2a 20 54 72 75 65 20 66 6f 72       /* True for
eb00: 20 44 45 53 43 45 4e 44 49 4e 47 20 73 6f 72 74   DESCENDING sort
eb10: 20 6f 72 64 65 72 20 2a 2f 0a 0a 20 20 6e 20 3d   order */..  n =
eb20: 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 70 4b 65 79   pOp->p3;.  pKey
eb30: 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70  Info = pOp->p4.p
eb40: 4b 65 79 49 6e 66 6f 3b 0a 20 20 61 73 73 65 72  KeyInfo;.  asser
eb50: 74 28 20 6e 3e 30 20 29 3b 0a 20 20 61 73 73 65  t( n>0 );.  asse
eb60: 72 74 28 20 70 4b 65 79 49 6e 66 6f 21 3d 30 20  rt( pKeyInfo!=0 
eb70: 29 3b 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70  );.  p1 = pOp->p
eb80: 31 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70  1;.  p2 = pOp->p
eb90: 32 3b 0a 23 69 66 20 53 51 4c 49 54 45 5f 44 45  2;.#if SQLITE_DE
eba0: 42 55 47 0a 20 20 69 66 28 20 61 50 65 72 6d 75  BUG.  if( aPermu
ebb0: 74 65 20 29 7b 0a 20 20 20 20 69 6e 74 20 6b 2c  te ){.    int k,
ebc0: 20 6d 78 20 3d 20 30 3b 0a 20 20 20 20 66 6f 72   mx = 0;.    for
ebd0: 28 6b 3d 30 3b 20 6b 3c 6e 3b 20 6b 2b 2b 29 20  (k=0; k<n; k++) 
ebe0: 69 66 28 20 61 50 65 72 6d 75 74 65 5b 6b 5d 3e  if( aPermute[k]>
ebf0: 6d 78 20 29 20 6d 78 20 3d 20 61 50 65 72 6d 75  mx ) mx = aPermu
ec00: 74 65 5b 6b 5d 3b 0a 20 20 20 20 61 73 73 65 72  te[k];.    asser
ec10: 74 28 20 70 31 3e 30 20 26 26 20 70 31 2b 6d 78  t( p1>0 && p1+mx
ec20: 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31 20 29 3b 0a 20  <=p->nMem+1 );. 
ec30: 20 20 20 61 73 73 65 72 74 28 20 70 32 3e 30 20     assert( p2>0 
ec40: 26 26 20 70 32 2b 6d 78 3c 3d 70 2d 3e 6e 4d 65  && p2+mx<=p->nMe
ec50: 6d 2b 31 20 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  m+1 );.  }else{.
ec60: 20 20 20 20 61 73 73 65 72 74 28 20 70 31 3e 30      assert( p1>0
ec70: 20 26 26 20 70 31 2b 6e 3c 3d 70 2d 3e 6e 4d 65   && p1+n<=p->nMe
ec80: 6d 2b 31 20 29 3b 0a 20 20 20 20 61 73 73 65 72  m+1 );.    asser
ec90: 74 28 20 70 32 3e 30 20 26 26 20 70 32 2b 6e 3c  t( p2>0 && p2+n<
eca0: 3d 70 2d 3e 6e 4d 65 6d 2b 31 20 29 3b 0a 20 20  =p->nMem+1 );.  
ecb0: 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
ecc0: 54 45 5f 44 45 42 55 47 20 2a 2f 0a 20 20 66 6f  TE_DEBUG */.  fo
ecd0: 72 28 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b 2b 29  r(i=0; i<n; i++)
ece0: 7b 0a 20 20 20 20 69 64 78 20 3d 20 61 50 65 72  {.    idx = aPer
ecf0: 6d 75 74 65 20 3f 20 61 50 65 72 6d 75 74 65 5b  mute ? aPermute[
ed00: 69 5d 20 3a 20 69 3b 0a 20 20 20 20 61 73 73 65  i] : i;.    asse
ed10: 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26  rt( memIsValid(&
ed20: 61 4d 65 6d 5b 70 31 2b 69 64 78 5d 29 20 29 3b  aMem[p1+idx]) );
ed30: 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d  .    assert( mem
ed40: 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 32  IsValid(&aMem[p2
ed50: 2b 69 64 78 5d 29 20 29 3b 0a 20 20 20 20 52 45  +idx]) );.    RE
ed60: 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 31 2b  GISTER_TRACE(p1+
ed70: 69 64 78 2c 20 26 61 4d 65 6d 5b 70 31 2b 69 64  idx, &aMem[p1+id
ed80: 78 5d 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45  x]);.    REGISTE
ed90: 52 5f 54 52 41 43 45 28 70 32 2b 69 64 78 2c 20  R_TRACE(p2+idx, 
eda0: 26 61 4d 65 6d 5b 70 32 2b 69 64 78 5d 29 3b 0a  &aMem[p2+idx]);.
edb0: 20 20 20 20 61 73 73 65 72 74 28 20 69 3c 70 4b      assert( i<pK
edc0: 65 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64 20 29  eyInfo->nField )
edd0: 3b 0a 20 20 20 20 70 43 6f 6c 6c 20 3d 20 70 4b  ;.    pColl = pK
ede0: 65 79 49 6e 66 6f 2d 3e 61 43 6f 6c 6c 5b 69 5d  eyInfo->aColl[i]
edf0: 3b 0a 20 20 20 20 62 52 65 76 20 3d 20 70 4b 65  ;.    bRev = pKe
ee00: 79 49 6e 66 6f 2d 3e 61 53 6f 72 74 4f 72 64 65  yInfo->aSortOrde
ee10: 72 5b 69 5d 3b 0a 20 20 20 20 69 43 6f 6d 70 61  r[i];.    iCompa
ee20: 72 65 20 3d 20 73 71 6c 69 74 65 33 4d 65 6d 43  re = sqlite3MemC
ee30: 6f 6d 70 61 72 65 28 26 61 4d 65 6d 5b 70 31 2b  ompare(&aMem[p1+
ee40: 69 64 78 5d 2c 20 26 61 4d 65 6d 5b 70 32 2b 69  idx], &aMem[p2+i
ee50: 64 78 5d 2c 20 70 43 6f 6c 6c 29 3b 0a 20 20 20  dx], pColl);.   
ee60: 20 69 66 28 20 69 43 6f 6d 70 61 72 65 20 29 7b   if( iCompare ){
ee70: 0a 20 20 20 20 20 20 69 66 28 20 62 52 65 76 20  .      if( bRev 
ee80: 29 20 69 43 6f 6d 70 61 72 65 20 3d 20 2d 69 43  ) iCompare = -iC
ee90: 6f 6d 70 61 72 65 3b 0a 20 20 20 20 20 20 62 72  ompare;.      br
eea0: 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  eak;.    }.  }. 
eeb0: 20 61 50 65 72 6d 75 74 65 20 3d 20 30 3b 0a 20   aPermute = 0;. 
eec0: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
eed0: 63 6f 64 65 3a 20 4a 75 6d 70 20 50 31 20 50 32  code: Jump P1 P2
eee0: 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75   P3 * *.**.** Ju
eef0: 6d 70 20 74 6f 20 74 68 65 20 69 6e 73 74 72 75  mp to the instru
ef00: 63 74 69 6f 6e 20 61 74 20 61 64 64 72 65 73 73  ction at address
ef10: 20 50 31 2c 20 50 32 2c 20 6f 72 20 50 33 20 64   P1, P2, or P3 d
ef20: 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74  epending on whet
ef30: 68 65 72 0a 2a 2a 20 69 6e 20 74 68 65 20 6d 6f  her.** in the mo
ef40: 73 74 20 72 65 63 65 6e 74 20 4f 50 5f 43 6f 6d  st recent OP_Com
ef50: 70 61 72 65 20 69 6e 73 74 72 75 63 74 69 6f 6e  pare instruction
ef60: 20 74 68 65 20 50 31 20 76 65 63 74 6f 72 20 77   the P1 vector w
ef70: 61 73 20 6c 65 73 73 20 74 68 61 6e 0a 2a 2a 20  as less than.** 
ef80: 65 71 75 61 6c 20 74 6f 2c 20 6f 72 20 67 72 65  equal to, or gre
ef90: 61 74 65 72 20 74 68 61 6e 20 74 68 65 20 50 32  ater than the P2
efa0: 20 76 65 63 74 6f 72 2c 20 72 65 73 70 65 63 74   vector, respect
efb0: 69 76 65 6c 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ively..*/.case O
efc0: 50 5f 4a 75 6d 70 3a 20 7b 20 20 20 20 20 20 20  P_Jump: {       
efd0: 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
efe0: 0a 20 20 69 66 28 20 69 43 6f 6d 70 61 72 65 3c  .  if( iCompare<
eff0: 30 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f  0 ){.    pc = pO
f000: 70 2d 3e 70 31 20 2d 20 31 3b 0a 20 20 7d 65 6c  p->p1 - 1;.  }el
f010: 73 65 20 69 66 28 20 69 43 6f 6d 70 61 72 65 3d  se if( iCompare=
f020: 3d 30 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70  =0 ){.    pc = p
f030: 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 65  Op->p2 - 1;.  }e
f040: 6c 73 65 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f  lse{.    pc = pO
f050: 70 2d 3e 70 33 20 2d 20 31 3b 0a 20 20 7d 0a 20  p->p3 - 1;.  }. 
f060: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
f070: 63 6f 64 65 3a 20 41 6e 64 20 50 31 20 50 32 20  code: And P1 P2 
f080: 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 61 6b  P3 * *.**.** Tak
f090: 65 20 74 68 65 20 6c 6f 67 69 63 61 6c 20 41 4e  e the logical AN
f0a0: 44 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20  D of the values 
f0b0: 69 6e 20 72 65 67 69 73 74 65 72 73 20 50 31 20  in registers P1 
f0c0: 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20 77 72  and P2 and.** wr
f0d0: 69 74 65 20 74 68 65 20 72 65 73 75 6c 74 20 69  ite the result i
f0e0: 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 33 2e  nto register P3.
f0f0: 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  .**.** If either
f100: 20 50 31 20 6f 72 20 50 32 20 69 73 20 30 20 28   P1 or P2 is 0 (
f110: 66 61 6c 73 65 29 20 74 68 65 6e 20 74 68 65 20  false) then the 
f120: 72 65 73 75 6c 74 20 69 73 20 30 20 65 76 65 6e  result is 0 even
f130: 20 69 66 0a 2a 2a 20 74 68 65 20 6f 74 68 65 72   if.** the other
f140: 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2e 20   input is NULL. 
f150: 20 41 20 4e 55 4c 4c 20 61 6e 64 20 74 72 75 65   A NULL and true
f160: 20 6f 72 20 74 77 6f 20 4e 55 4c 4c 73 20 67 69   or two NULLs gi
f170: 76 65 0a 2a 2a 20 61 20 4e 55 4c 4c 20 6f 75 74  ve.** a NULL out
f180: 70 75 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  put..*/./* Opcod
f190: 65 3a 20 4f 72 20 50 31 20 50 32 20 50 33 20 2a  e: Or P1 P2 P3 *
f1a0: 20 2a 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68   *.**.** Take th
f1b0: 65 20 6c 6f 67 69 63 61 6c 20 4f 52 20 6f 66 20  e logical OR of 
f1c0: 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65  the values in re
f1d0: 67 69 73 74 65 72 20 50 31 20 61 6e 64 20 50 32  gister P1 and P2
f1e0: 20 61 6e 64 0a 2a 2a 20 73 74 6f 72 65 20 74 68   and.** store th
f1f0: 65 20 61 6e 73 77 65 72 20 69 6e 20 72 65 67 69  e answer in regi
f200: 73 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49  ster P3..**.** I
f210: 66 20 65 69 74 68 65 72 20 50 31 20 6f 72 20 50  f either P1 or P
f220: 32 20 69 73 20 6e 6f 6e 7a 65 72 6f 20 28 74 72  2 is nonzero (tr
f230: 75 65 29 20 74 68 65 6e 20 74 68 65 20 72 65 73  ue) then the res
f240: 75 6c 74 20 69 73 20 31 20 28 74 72 75 65 29 0a  ult is 1 (true).
f250: 2a 2a 20 65 76 65 6e 20 69 66 20 74 68 65 20 6f  ** even if the o
f260: 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55  ther input is NU
f270: 4c 4c 2e 20 20 41 20 4e 55 4c 4c 20 61 6e 64 20  LL.  A NULL and 
f280: 66 61 6c 73 65 20 6f 72 20 74 77 6f 20 4e 55 4c  false or two NUL
f290: 4c 73 0a 2a 2a 20 67 69 76 65 20 61 20 4e 55 4c  Ls.** give a NUL
f2a0: 4c 20 6f 75 74 70 75 74 2e 0a 2a 2f 0a 63 61 73  L output..*/.cas
f2b0: 65 20 4f 50 5f 41 6e 64 3a 20 20 20 20 20 20 20  e OP_And:       
f2c0: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
f2d0: 73 20 54 4b 5f 41 4e 44 2c 20 69 6e 31 2c 20 69  s TK_AND, in1, i
f2e0: 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65  n2, out3 */.case
f2f0: 20 4f 50 5f 4f 72 3a 20 7b 20 20 20 20 20 20 20   OP_Or: {       
f300: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
f310: 20 54 4b 5f 4f 52 2c 20 69 6e 31 2c 20 69 6e 32   TK_OR, in1, in2
f320: 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69 6e 74 20  , out3 */.  int 
f330: 76 31 3b 20 20 20 20 2f 2a 20 4c 65 66 74 20 6f  v1;    /* Left o
f340: 70 65 72 61 6e 64 3a 20 20 30 3d 3d 46 41 4c 53  perand:  0==FALS
f350: 45 2c 20 31 3d 3d 54 52 55 45 2c 20 32 3d 3d 55  E, 1==TRUE, 2==U
f360: 4e 4b 4e 4f 57 4e 20 6f 72 20 4e 55 4c 4c 20 2a  NKNOWN or NULL *
f370: 2f 0a 20 20 69 6e 74 20 76 32 3b 20 20 20 20 2f  /.  int v2;    /
f380: 2a 20 52 69 67 68 74 20 6f 70 65 72 61 6e 64 3a  * Right operand:
f390: 20 30 3d 3d 46 41 4c 53 45 2c 20 31 3d 3d 54 52   0==FALSE, 1==TR
f3a0: 55 45 2c 20 32 3d 3d 55 4e 4b 4e 4f 57 4e 20 6f  UE, 2==UNKNOWN o
f3b0: 72 20 4e 55 4c 4c 20 2a 2f 0a 0a 20 20 70 49 6e  r NULL */..  pIn
f3c0: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
f3d0: 31 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e  1];.  if( pIn1->
f3e0: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
f3f0: 20 29 7b 0a 20 20 20 20 76 31 20 3d 20 32 3b 0a   ){.    v1 = 2;.
f400: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 76 31 20    }else{.    v1 
f410: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74  = sqlite3VdbeInt
f420: 56 61 6c 75 65 28 70 49 6e 31 29 21 3d 30 3b 0a  Value(pIn1)!=0;.
f430: 20 20 7d 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d    }.  pIn2 = &aM
f440: 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 69  em[pOp->p2];.  i
f450: 66 28 20 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26  f( pIn2->flags &
f460: 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20   MEM_Null ){.   
f470: 20 76 32 20 3d 20 32 3b 0a 20 20 7d 65 6c 73 65   v2 = 2;.  }else
f480: 7b 0a 20 20 20 20 76 32 20 3d 20 73 71 6c 69 74  {.    v2 = sqlit
f490: 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70  e3VdbeIntValue(p
f4a0: 49 6e 32 29 21 3d 30 3b 0a 20 20 7d 0a 20 20 69  In2)!=0;.  }.  i
f4b0: 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  f( pOp->opcode==
f4c0: 4f 50 5f 41 6e 64 20 29 7b 0a 20 20 20 20 73 74  OP_And ){.    st
f4d0: 61 74 69 63 20 63 6f 6e 73 74 20 75 6e 73 69 67  atic const unsig
f4e0: 6e 65 64 20 63 68 61 72 20 61 6e 64 5f 6c 6f 67  ned char and_log
f4f0: 69 63 5b 5d 20 3d 20 7b 20 30 2c 20 30 2c 20 30  ic[] = { 0, 0, 0
f500: 2c 20 30 2c 20 31 2c 20 32 2c 20 30 2c 20 32 2c  , 0, 1, 2, 0, 2,
f510: 20 32 20 7d 3b 0a 20 20 20 20 76 31 20 3d 20 61   2 };.    v1 = a
f520: 6e 64 5f 6c 6f 67 69 63 5b 76 31 2a 33 2b 76 32  nd_logic[v1*3+v2
f530: 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  ];.  }else{.    
f540: 73 74 61 74 69 63 20 63 6f 6e 73 74 20 75 6e 73  static const uns
f550: 69 67 6e 65 64 20 63 68 61 72 20 6f 72 5f 6c 6f  igned char or_lo
f560: 67 69 63 5b 5d 20 3d 20 7b 20 30 2c 20 31 2c 20  gic[] = { 0, 1, 
f570: 32 2c 20 31 2c 20 31 2c 20 31 2c 20 32 2c 20 31  2, 1, 1, 1, 2, 1
f580: 2c 20 32 20 7d 3b 0a 20 20 20 20 76 31 20 3d 20  , 2 };.    v1 = 
f590: 6f 72 5f 6c 6f 67 69 63 5b 76 31 2a 33 2b 76 32  or_logic[v1*3+v2
f5a0: 5d 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 20 3d 20  ];.  }.  pOut = 
f5b0: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
f5c0: 20 20 69 66 28 20 76 31 3d 3d 32 20 29 7b 0a 20    if( v1==2 ){. 
f5d0: 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61     MemSetTypeFla
f5e0: 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 4e 75 6c 6c  g(pOut, MEM_Null
f5f0: 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
f600: 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 76 31 3b 0a  pOut->u.i = v1;.
f610: 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c      MemSetTypeFl
f620: 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74  ag(pOut, MEM_Int
f630: 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
f640: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f  }../* Opcode: No
f650: 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  t P1 P2 * * *.**
f660: 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68  .** Interpret th
f670: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
f680: 74 65 72 20 50 31 20 61 73 20 61 20 62 6f 6f 6c  ter P1 as a bool
f690: 65 61 6e 20 76 61 6c 75 65 2e 20 20 53 74 6f 72  ean value.  Stor
f6a0: 65 20 74 68 65 0a 2a 2a 20 62 6f 6f 6c 65 61 6e  e the.** boolean
f6b0: 20 63 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e 20 72   complement in r
f6c0: 65 67 69 73 74 65 72 20 50 32 2e 20 20 49 66 20  egister P2.  If 
f6d0: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
f6e0: 69 73 74 65 72 20 50 31 20 69 73 20 0a 2a 2a 20  ister P1 is .** 
f6f0: 4e 55 4c 4c 2c 20 74 68 65 6e 20 61 20 4e 55 4c  NULL, then a NUL
f700: 4c 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 50  L is stored in P
f710: 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f  2..*/.case OP_No
f720: 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  t: {            
f730: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
f740: 4b 5f 4e 4f 54 2c 20 69 6e 31 2c 20 6f 75 74 32  K_NOT, in1, out2
f750: 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   */.  pIn1 = &aM
f760: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70  em[pOp->p1];.  p
f770: 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
f780: 3e 70 32 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31  >p2];.  if( pIn1
f790: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ->flags & MEM_Nu
f7a0: 6c 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  ll ){.    sqlite
f7b0: 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28  3VdbeMemSetNull(
f7c0: 70 4f 75 74 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  pOut);.  }else{.
f7d0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
f7e0: 65 6d 53 65 74 49 6e 74 36 34 28 70 4f 75 74 2c  emSetInt64(pOut,
f7f0: 20 21 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74   !sqlite3VdbeInt
f800: 56 61 6c 75 65 28 70 49 6e 31 29 29 3b 0a 20 20  Value(pIn1));.  
f810: 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
f820: 20 4f 70 63 6f 64 65 3a 20 42 69 74 4e 6f 74 20   Opcode: BitNot 
f830: 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
f840: 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68 65 20  * Interpret the 
f850: 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73  content of regis
f860: 74 65 72 20 50 31 20 61 73 20 61 6e 20 69 6e 74  ter P1 as an int
f870: 65 67 65 72 2e 20 20 53 74 6f 72 65 20 74 68 65  eger.  Store the
f880: 0a 2a 2a 20 6f 6e 65 73 2d 63 6f 6d 70 6c 65 6d  .** ones-complem
f890: 65 6e 74 20 6f 66 20 74 68 65 20 50 31 20 76 61  ent of the P1 va
f8a0: 6c 75 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65  lue into registe
f8b0: 72 20 50 32 2e 20 20 49 66 20 50 31 20 68 6f 6c  r P2.  If P1 hol
f8c0: 64 73 0a 2a 2a 20 61 20 4e 55 4c 4c 20 74 68 65  ds.** a NULL the
f8d0: 6e 20 73 74 6f 72 65 20 61 20 4e 55 4c 4c 20 69  n store a NULL i
f8e0: 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  n P2..*/.case OP
f8f0: 5f 42 69 74 4e 6f 74 3a 20 7b 20 20 20 20 20 20  _BitNot: {      
f900: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
f910: 73 20 54 4b 5f 42 49 54 4e 4f 54 2c 20 69 6e 31  s TK_BITNOT, in1
f920: 2c 20 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e 31  , out2 */.  pIn1
f930: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
f940: 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65  ];.  pOut = &aMe
f950: 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 69 66  m[pOp->p2];.  if
f960: 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20  ( pIn1->flags & 
f970: 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20  MEM_Null ){.    
f980: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
f990: 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 7d  tNull(pOut);.  }
f9a0: 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65  else{.    sqlite
f9b0: 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34  3VdbeMemSetInt64
f9c0: 28 70 4f 75 74 2c 20 7e 73 71 6c 69 74 65 33 56  (pOut, ~sqlite3V
f9d0: 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31  dbeIntValue(pIn1
f9e0: 29 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  ));.  }.  break;
f9f0: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
fa00: 66 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  f P1 P2 P3 * *.*
fa10: 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20  *.** Jump to P2 
fa20: 69 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  if the value in 
fa30: 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20 74  register P1 is t
fa40: 72 75 65 2e 20 20 54 68 65 20 76 61 6c 75 65 20  rue.  The value 
fa50: 69 73 0a 2a 2a 20 69 73 20 63 6f 6e 73 69 64 65  is.** is conside
fa60: 72 65 64 20 74 72 75 65 20 69 66 20 69 74 20 69  red true if it i
fa70: 73 20 6e 75 6d 65 72 69 63 20 61 6e 64 20 6e 6f  s numeric and no
fa80: 6e 2d 7a 65 72 6f 2e 20 20 49 66 20 74 68 65 20  n-zero.  If the 
fa90: 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 50 31 20 69  value.** in P1 i
faa0: 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 61 6b 65  s NULL then take
fab0: 20 74 68 65 20 6a 75 6d 70 20 69 66 20 50 33 20   the jump if P3 
fac0: 69 73 20 74 72 75 65 2e 0a 2a 2f 0a 2f 2a 20 4f  is true..*/./* O
fad0: 70 63 6f 64 65 3a 20 49 66 4e 6f 74 20 50 31 20  pcode: IfNot P1 
fae0: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
faf0: 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68  Jump to P2 if th
fb00: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
fb10: 74 65 72 20 50 31 20 69 73 20 46 61 6c 73 65 2e  ter P1 is False.
fb20: 20 20 54 68 65 20 76 61 6c 75 65 20 69 73 0a 2a    The value is.*
fb30: 2a 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64 20  * is considered 
fb40: 74 72 75 65 20 69 66 20 69 74 20 68 61 73 20 61  true if it has a
fb50: 20 6e 75 6d 65 72 69 63 20 76 61 6c 75 65 20 6f   numeric value o
fb60: 66 20 7a 65 72 6f 2e 20 20 49 66 20 74 68 65 20  f zero.  If the 
fb70: 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 50 31 20 69  value.** in P1 i
fb80: 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 61 6b 65  s NULL then take
fb90: 20 74 68 65 20 6a 75 6d 70 20 69 66 20 50 33 20   the jump if P3 
fba0: 69 73 20 74 72 75 65 2e 0a 2a 2f 0a 63 61 73 65  is true..*/.case
fbb0: 20 4f 50 5f 49 66 3a 20 20 20 20 20 20 20 20 20   OP_If:         
fbc0: 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
fbd0: 20 69 6e 31 20 2a 2f 0a 63 61 73 65 20 4f 50 5f   in1 */.case OP_
fbe0: 49 66 4e 6f 74 3a 20 7b 20 20 20 20 20 20 20 20  IfNot: {        
fbf0: 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31      /* jump, in1
fc00: 20 2a 2f 0a 20 20 69 6e 74 20 63 3b 0a 20 20 70   */.  int c;.  p
fc10: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
fc20: 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31  >p1];.  if( pIn1
fc30: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ->flags & MEM_Nu
fc40: 6c 6c 20 29 7b 0a 20 20 20 20 63 20 3d 20 70 4f  ll ){.    c = pO
fc50: 70 2d 3e 70 33 3b 0a 20 20 7d 65 6c 73 65 7b 0a  p->p3;.  }else{.
fc60: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  #ifdef SQLITE_OM
fc70: 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e  IT_FLOATING_POIN
fc80: 54 0a 20 20 20 20 63 20 3d 20 73 71 6c 69 74 65  T.    c = sqlite
fc90: 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49  3VdbeIntValue(pI
fca0: 6e 31 29 21 3d 30 3b 0a 23 65 6c 73 65 0a 20 20  n1)!=0;.#else.  
fcb0: 20 20 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62    c = sqlite3Vdb
fcc0: 65 52 65 61 6c 56 61 6c 75 65 28 70 49 6e 31 29  eRealValue(pIn1)
fcd0: 21 3d 30 2e 30 3b 0a 23 65 6e 64 69 66 0a 20 20  !=0.0;.#endif.  
fce0: 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64    if( pOp->opcod
fcf0: 65 3d 3d 4f 50 5f 49 66 4e 6f 74 20 29 20 63 20  e==OP_IfNot ) c 
fd00: 3d 20 21 63 3b 0a 20 20 7d 0a 20 20 69 66 28 20  = !c;.  }.  if( 
fd10: 63 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f  c ){.    pc = pO
fd20: 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d 0a 20 20 62  p->p2-1;.  }.  b
fd30: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
fd40: 64 65 3a 20 49 73 4e 75 6c 6c 20 50 31 20 50 32  de: IsNull P1 P2
fd50: 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d   * * *.**.** Jum
fd60: 70 20 74 6f 20 50 32 20 69 66 20 74 68 65 20 76  p to P2 if the v
fd70: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
fd80: 20 50 31 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a   P1 is NULL..*/.
fd90: 63 61 73 65 20 4f 50 5f 49 73 4e 75 6c 6c 3a 20  case OP_IsNull: 
fda0: 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  {            /* 
fdb0: 73 61 6d 65 20 61 73 20 54 4b 5f 49 53 4e 55 4c  same as TK_ISNUL
fdc0: 4c 2c 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a  L, jump, in1 */.
fdd0: 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
fde0: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 28  Op->p1];.  if( (
fdf0: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
fe00: 4d 5f 4e 75 6c 6c 29 21 3d 30 20 29 7b 0a 20 20  M_Null)!=0 ){.  
fe10: 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
fe20: 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b   1;.  }.  break;
fe30: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e  .}../* Opcode: N
fe40: 6f 74 4e 75 6c 6c 20 50 31 20 50 32 20 2a 20 2a  otNull P1 P2 * *
fe50: 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f   *.**.** Jump to
fe60: 20 50 32 20 69 66 20 74 68 65 20 76 61 6c 75 65   P2 if the value
fe70: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
fe80: 69 73 20 6e 6f 74 20 4e 55 4c 4c 2e 20 20 0a 2a  is not NULL.  .*
fe90: 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 4e 75 6c  /.case OP_NotNul
fea0: 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  l: {            
feb0: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4e 4f  /* same as TK_NO
fec0: 54 4e 55 4c 4c 2c 20 6a 75 6d 70 2c 20 69 6e 31  TNULL, jump, in1
fed0: 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   */.  pIn1 = &aM
fee0: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69  em[pOp->p1];.  i
fef0: 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
ff00: 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29  & MEM_Null)==0 )
ff10: 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e  {.    pc = pOp->
ff20: 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72  p2 - 1;.  }.  br
ff30: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
ff40: 65 3a 20 43 6f 6c 75 6d 6e 20 50 31 20 50 32 20  e: Column P1 P2 
ff50: 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 49  P3 P4 P5.**.** I
ff60: 6e 74 65 72 70 72 65 74 20 74 68 65 20 64 61 74  nterpret the dat
ff70: 61 20 74 68 61 74 20 63 75 72 73 6f 72 20 50 31  a that cursor P1
ff80: 20 70 6f 69 6e 74 73 20 74 6f 20 61 73 20 61 20   points to as a 
ff90: 73 74 72 75 63 74 75 72 65 20 62 75 69 6c 74 20  structure built 
ffa0: 75 73 69 6e 67 0a 2a 2a 20 74 68 65 20 4d 61 6b  using.** the Mak
ffb0: 65 52 65 63 6f 72 64 20 69 6e 73 74 72 75 63 74  eRecord instruct
ffc0: 69 6f 6e 2e 20 20 28 53 65 65 20 74 68 65 20 4d  ion.  (See the M
ffd0: 61 6b 65 52 65 63 6f 72 64 20 6f 70 63 6f 64 65  akeRecord opcode
ffe0: 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 0a   for additional.
fff0: 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  ** information a
10000 62 6f 75 74 20 74 68 65 20 66 6f 72 6d 61 74 20  bout the format 
10010 6f 66 20 74 68 65 20 64 61 74 61 2e 29 20 20 45  of the data.)  E
10020 78 74 72 61 63 74 20 74 68 65 20 50 32 2d 74 68  xtract the P2-th
10030 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 66 72 6f 6d 20   column.** from 
10040 74 68 69 73 20 72 65 63 6f 72 64 2e 20 20 49 66  this record.  If
10050 20 74 68 65 72 65 20 61 72 65 20 6c 65 73 73 20   there are less 
10060 74 68 61 74 20 28 50 32 2b 31 29 20 0a 2a 2a 20  that (P2+1) .** 
10070 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20 72 65  values in the re
10080 63 6f 72 64 2c 20 65 78 74 72 61 63 74 20 61 20  cord, extract a 
10090 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  NULL..**.** The 
100a0 76 61 6c 75 65 20 65 78 74 72 61 63 74 65 64 20  value extracted 
100b0 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67  is stored in reg
100c0 69 73 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20  ister P3..**.** 
100d0 49 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 63 6f  If the column co
100e0 6e 74 61 69 6e 73 20 66 65 77 65 72 20 74 68 61  ntains fewer tha
100f0 6e 20 50 32 20 66 69 65 6c 64 73 2c 20 74 68 65  n P2 fields, the
10100 6e 20 65 78 74 72 61 63 74 20 61 20 4e 55 4c 4c  n extract a NULL
10110 2e 20 20 4f 72 2c 0a 2a 2a 20 69 66 20 74 68 65  .  Or,.** if the
10120 20 50 34 20 61 72 67 75 6d 65 6e 74 20 69 73 20   P4 argument is 
10130 61 20 50 34 5f 4d 45 4d 20 75 73 65 20 74 68 65  a P4_MEM use the
10140 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 50 34   value of the P4
10150 20 61 72 67 75 6d 65 6e 74 20 61 73 0a 2a 2a 20   argument as.** 
10160 74 68 65 20 72 65 73 75 6c 74 2e 0a 2a 2a 0a 2a  the result..**.*
10170 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f  * If the OPFLAG_
10180 43 4c 45 41 52 43 41 43 48 45 20 62 69 74 20 69  CLEARCACHE bit i
10190 73 20 73 65 74 20 6f 6e 20 50 35 20 61 6e 64 20  s set on P5 and 
101a0 50 31 20 69 73 20 61 20 70 73 65 75 64 6f 2d 74  P1 is a pseudo-t
101b0 61 62 6c 65 20 63 75 72 73 6f 72 2c 0a 2a 2a 20  able cursor,.** 
101c0 74 68 65 6e 20 74 68 65 20 63 61 63 68 65 20 6f  then the cache o
101d0 66 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20  f the cursor is 
101e0 72 65 73 65 74 20 70 72 69 6f 72 20 74 6f 20 65  reset prior to e
101f0 78 74 72 61 63 74 69 6e 67 20 74 68 65 20 63 6f  xtracting the co
10200 6c 75 6d 6e 2e 0a 2a 2a 20 54 68 65 20 66 69 72  lumn..** The fir
10210 73 74 20 4f 50 5f 43 6f 6c 75 6d 6e 20 61 67 61  st OP_Column aga
10220 69 6e 73 74 20 61 20 70 73 65 75 64 6f 2d 74 61  inst a pseudo-ta
10230 62 6c 65 20 61 66 74 65 72 20 74 68 65 20 76 61  ble after the va
10240 6c 75 65 20 6f 66 20 74 68 65 20 63 6f 6e 74 65  lue of the conte
10250 6e 74 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 68  nt.** register h
10260 61 73 20 63 68 61 6e 67 65 64 20 73 68 6f 75 6c  as changed shoul
10270 64 20 68 61 76 65 20 74 68 69 73 20 62 69 74 20  d have this bit 
10280 73 65 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  set..*/.case OP_
10290 43 6f 6c 75 6d 6e 3a 20 7b 0a 20 20 75 33 32 20  Column: {.  u32 
102a0 70 61 79 6c 6f 61 64 53 69 7a 65 3b 20 20 20 2f  payloadSize;   /
102b0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  * Number of byte
102c0 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20  s in the record 
102d0 2a 2f 0a 20 20 69 36 34 20 70 61 79 6c 6f 61 64  */.  i64 payload
102e0 53 69 7a 65 36 34 3b 20 2f 2a 20 4e 75 6d 62 65  Size64; /* Numbe
102f0 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20 74 68  r of bytes in th
10300 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e  e record */.  in
10310 74 20 70 31 3b 20 20 20 20 20 20 20 20 20 20 20  t p1;           
10320 20 2f 2a 20 50 31 20 76 61 6c 75 65 20 6f 66 20   /* P1 value of 
10330 74 68 65 20 6f 70 63 6f 64 65 20 2a 2f 0a 20 20  the opcode */.  
10340 69 6e 74 20 70 32 3b 20 20 20 20 20 20 20 20 20  int p2;         
10350 20 20 20 2f 2a 20 63 6f 6c 75 6d 6e 20 6e 75 6d     /* column num
10360 62 65 72 20 74 6f 20 72 65 74 72 69 65 76 65 20  ber to retrieve 
10370 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  */.  VdbeCursor 
10380 2a 70 43 3b 20 20 20 20 2f 2a 20 54 68 65 20 56  *pC;    /* The V
10390 44 42 45 20 63 75 72 73 6f 72 20 2a 2f 0a 20 20  DBE cursor */.  
103a0 63 68 61 72 20 2a 7a 52 65 63 3b 20 20 20 20 20  char *zRec;     
103b0 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f     /* Pointer to
103c0 20 63 6f 6d 70 6c 65 74 65 20 72 65 63 6f 72 64   complete record
103d0 2d 64 61 74 61 20 2a 2f 0a 20 20 42 74 43 75 72  -data */.  BtCur
103e0 73 6f 72 20 2a 70 43 72 73 72 3b 20 20 20 2f 2a  sor *pCrsr;   /*
103f0 20 54 68 65 20 42 54 72 65 65 20 63 75 72 73 6f   The BTree curso
10400 72 20 2a 2f 0a 20 20 75 33 32 20 2a 61 54 79 70  r */.  u32 *aTyp
10410 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 61 54 79  e;        /* aTy
10420 70 65 5b 69 5d 20 68 6f 6c 64 73 20 74 68 65 20  pe[i] holds the 
10430 6e 75 6d 65 72 69 63 20 74 79 70 65 20 6f 66 20  numeric type of 
10440 74 68 65 20 69 2d 74 68 20 63 6f 6c 75 6d 6e 20  the i-th column 
10450 2a 2f 0a 20 20 75 33 32 20 2a 61 4f 66 66 73 65  */.  u32 *aOffse
10460 74 3b 20 20 20 20 20 20 2f 2a 20 61 4f 66 66 73  t;      /* aOffs
10470 65 74 5b 69 5d 20 69 73 20 6f 66 66 73 65 74 20  et[i] is offset 
10480 74 6f 20 73 74 61 72 74 20 6f 66 20 64 61 74 61  to start of data
10490 20 66 6f 72 20 69 2d 74 68 20 63 6f 6c 75 6d 6e   for i-th column
104a0 20 2a 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64   */.  int nField
104b0 3b 20 20 20 20 20 20 20 20 2f 2a 20 6e 75 6d 62  ;        /* numb
104c0 65 72 20 6f 66 20 66 69 65 6c 64 73 20 69 6e 20  er of fields in 
104d0 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20  the record */.  
104e0 69 6e 74 20 6c 65 6e 3b 20 20 20 20 20 20 20 20  int len;        
104f0 20 20 20 2f 2a 20 54 68 65 20 6c 65 6e 67 74 68     /* The length
10500 20 6f 66 20 74 68 65 20 73 65 72 69 61 6c 69 7a   of the serializ
10510 65 64 20 64 61 74 61 20 66 6f 72 20 74 68 65 20  ed data for the 
10520 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 69 6e 74 20  column */.  int 
10530 69 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  i;             /
10540 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 20 2a  * Loop counter *
10550 2f 0a 20 20 63 68 61 72 20 2a 7a 44 61 74 61 3b  /.  char *zData;
10560 20 20 20 20 20 20 20 2f 2a 20 50 61 72 74 20 6f         /* Part o
10570 66 20 74 68 65 20 72 65 63 6f 72 64 20 62 65 69  f the record bei
10580 6e 67 20 64 65 63 6f 64 65 64 20 2a 2f 0a 20 20  ng decoded */.  
10590 4d 65 6d 20 2a 70 44 65 73 74 3b 20 20 20 20 20  Mem *pDest;     
105a0 20 20 20 2f 2a 20 57 68 65 72 65 20 74 6f 20 77     /* Where to w
105b0 72 69 74 65 20 74 68 65 20 65 78 74 72 61 63 74  rite the extract
105c0 65 64 20 76 61 6c 75 65 20 2a 2f 0a 20 20 4d 65  ed value */.  Me
105d0 6d 20 73 4d 65 6d 3b 20 20 20 20 20 20 20 20 20  m sMem;         
105e0 20 2f 2a 20 46 6f 72 20 73 74 6f 72 69 6e 67 20   /* For storing 
105f0 74 68 65 20 72 65 63 6f 72 64 20 62 65 69 6e 67  the record being
10600 20 64 65 63 6f 64 65 64 20 2a 2f 0a 20 20 75 38   decoded */.  u8
10610 20 2a 7a 49 64 78 3b 20 20 20 20 20 20 20 20 20   *zIdx;         
10620 20 2f 2a 20 49 6e 64 65 78 20 69 6e 74 6f 20 68   /* Index into h
10630 65 61 64 65 72 20 2a 2f 0a 20 20 75 38 20 2a 7a  eader */.  u8 *z
10640 45 6e 64 48 64 72 3b 20 20 20 20 20 20 20 2f 2a  EndHdr;       /*
10650 20 50 6f 69 6e 74 65 72 20 74 6f 20 66 69 72 73   Pointer to firs
10660 74 20 62 79 74 65 20 61 66 74 65 72 20 74 68 65  t byte after the
10670 20 68 65 61 64 65 72 20 2a 2f 0a 20 20 75 33 32   header */.  u32
10680 20 6f 66 66 73 65 74 3b 20 20 20 20 20 20 20 20   offset;        
10690 2f 2a 20 4f 66 66 73 65 74 20 69 6e 74 6f 20 74  /* Offset into t
106a0 68 65 20 64 61 74 61 20 2a 2f 0a 20 20 75 33 32  he data */.  u32
106b0 20 73 7a 46 69 65 6c 64 3b 20 20 20 20 20 20 20   szField;       
106c0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74  /* Number of byt
106d0 65 73 20 69 6e 20 74 68 65 20 63 6f 6e 74 65 6e  es in the conten
106e0 74 20 6f 66 20 61 20 66 69 65 6c 64 20 2a 2f 0a  t of a field */.
106f0 20 20 69 6e 74 20 73 7a 48 64 72 3b 20 20 20 20    int szHdr;    
10700 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20       /* Size of 
10710 74 68 65 20 68 65 61 64 65 72 20 73 69 7a 65 20  the header size 
10720 66 69 65 6c 64 20 61 74 20 73 74 61 72 74 20 6f  field at start o
10730 66 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e  f record */.  in
10740 74 20 61 76 61 69 6c 3b 20 20 20 20 20 20 20 20  t avail;        
10750 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79   /* Number of by
10760 74 65 73 20 6f 66 20 61 76 61 69 6c 61 62 6c 65  tes of available
10770 20 64 61 74 61 20 2a 2f 0a 20 20 4d 65 6d 20 2a   data */.  Mem *
10780 70 52 65 67 3b 20 20 20 20 20 20 20 20 20 2f 2a  pReg;         /*
10790 20 50 73 65 75 64 6f 54 61 62 6c 65 20 69 6e 70   PseudoTable inp
107a0 75 74 20 72 65 67 69 73 74 65 72 20 2a 2f 0a 0a  ut register */..
107b0 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b  .  p1 = pOp->p1;
107c0 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b  .  p2 = pOp->p2;
107d0 0a 20 20 70 43 20 3d 20 30 3b 0a 20 20 6d 65 6d  .  pC = 0;.  mem
107e0 73 65 74 28 26 73 4d 65 6d 2c 20 30 2c 20 73 69  set(&sMem, 0, si
107f0 7a 65 6f 66 28 73 4d 65 6d 29 29 3b 0a 20 20 61  zeof(sMem));.  a
10800 73 73 65 72 74 28 20 70 31 3c 70 2d 3e 6e 43 75  ssert( p1<p->nCu
10810 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74  rsor );.  assert
10820 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70  ( pOp->p3>0 && p
10830 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20  Op->p3<=p->nMem 
10840 29 3b 0a 20 20 70 44 65 73 74 20 3d 20 26 61 4d  );.  pDest = &aM
10850 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d  em[pOp->p3];.  m
10860 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
10870 70 2c 20 70 44 65 73 74 29 3b 0a 20 20 4d 65 6d  p, pDest);.  Mem
10880 53 65 74 54 79 70 65 46 6c 61 67 28 70 44 65 73  SetTypeFlag(pDes
10890 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20  t, MEM_Null);.  
108a0 7a 52 65 63 20 3d 20 30 3b 0a 0a 20 20 2f 2a 20  zRec = 0;..  /* 
108b0 54 68 69 73 20 62 6c 6f 63 6b 20 73 65 74 73 20  This block sets 
108c0 74 68 65 20 76 61 72 69 61 62 6c 65 20 70 61 79  the variable pay
108d0 6c 6f 61 64 53 69 7a 65 20 74 6f 20 62 65 20 74  loadSize to be t
108e0 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20  he total number 
108f0 6f 66 0a 20 20 2a 2a 20 62 79 74 65 73 20 69 6e  of.  ** bytes in
10900 20 74 68 65 20 72 65 63 6f 72 64 2e 0a 20 20 2a   the record..  *
10910 2a 0a 20 20 2a 2a 20 7a 52 65 63 20 69 73 20 73  *.  ** zRec is s
10920 65 74 20 74 6f 20 62 65 20 74 68 65 20 63 6f 6d  et to be the com
10930 70 6c 65 74 65 20 74 65 78 74 20 6f 66 20 74 68  plete text of th
10940 65 20 72 65 63 6f 72 64 20 69 66 20 69 74 20 69  e record if it i
10950 73 20 61 76 61 69 6c 61 62 6c 65 2e 0a 20 20 2a  s available..  *
10960 2a 20 54 68 65 20 63 6f 6d 70 6c 65 74 65 20 72  * The complete r
10970 65 63 6f 72 64 20 74 65 78 74 20 69 73 20 61 6c  ecord text is al
10980 77 61 79 73 20 61 76 61 69 6c 61 62 6c 65 20 66  ways available f
10990 6f 72 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 73  or pseudo-tables
109a0 0a 20 20 2a 2a 20 49 66 20 74 68 65 20 72 65 63  .  ** If the rec
109b0 6f 72 64 20 69 73 20 73 74 6f 72 65 64 20 69 6e  ord is stored in
109c0 20 61 20 63 75 72 73 6f 72 2c 20 74 68 65 20 63   a cursor, the c
109d0 6f 6d 70 6c 65 74 65 20 72 65 63 6f 72 64 20 74  omplete record t
109e0 65 78 74 0a 20 20 2a 2a 20 6d 69 67 68 74 20 62  ext.  ** might b
109f0 65 20 61 76 61 69 6c 61 62 6c 65 20 69 6e 20 74  e available in t
10a00 68 65 20 20 70 43 2d 3e 61 52 6f 77 20 63 61 63  he  pC->aRow cac
10a10 68 65 2e 20 20 4f 72 20 69 74 20 6d 69 67 68 74  he.  Or it might
10a20 20 6e 6f 74 20 62 65 2e 0a 20 20 2a 2a 20 49 66   not be..  ** If
10a30 20 74 68 65 20 64 61 74 61 20 69 73 20 75 6e 61   the data is una
10a40 76 61 69 6c 61 62 6c 65 2c 20 20 7a 52 65 63 20  vailable,  zRec 
10a50 69 73 20 73 65 74 20 74 6f 20 4e 55 4c 4c 2e 0a  is set to NULL..
10a60 20 20 2a 2a 0a 20 20 2a 2a 20 57 65 20 61 6c 73    **.  ** We als
10a70 6f 20 63 6f 6d 70 75 74 65 20 74 68 65 20 6e 75  o compute the nu
10a80 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
10a90 69 6e 20 74 68 65 20 72 65 63 6f 72 64 2e 20 20  in the record.  
10aa0 46 6f 72 20 63 75 72 73 6f 72 73 2c 0a 20 20 2a  For cursors,.  *
10ab0 2a 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  * the number of 
10ac0 63 6f 6c 75 6d 6e 73 20 69 73 20 73 74 6f 72 65  columns is store
10ad0 64 20 69 6e 20 74 68 65 20 56 64 62 65 43 75 72  d in the VdbeCur
10ae0 73 6f 72 2e 6e 46 69 65 6c 64 20 65 6c 65 6d 65  sor.nField eleme
10af0 6e 74 2e 0a 20 20 2a 2f 0a 20 20 70 43 20 3d 20  nt..  */.  pC = 
10b00 70 2d 3e 61 70 43 73 72 5b 70 31 5d 3b 0a 20 20  p->apCsr[p1];.  
10b10 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
10b20 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
10b30 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
10b40 45 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  E.  assert( pC->
10b50 70 56 74 61 62 43 75 72 73 6f 72 3d 3d 30 20 29  pVtabCursor==0 )
10b60 3b 0a 23 65 6e 64 69 66 0a 20 20 70 43 72 73 72  ;.#endif.  pCrsr
10b70 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a   = pC->pCursor;.
10b80 20 20 69 66 28 20 70 43 72 73 72 21 3d 30 20 29    if( pCrsr!=0 )
10b90 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20 72 65 63  {.    /* The rec
10ba0 6f 72 64 20 69 73 20 73 74 6f 72 65 64 20 69 6e  ord is stored in
10bb0 20 61 20 42 2d 54 72 65 65 20 2a 2f 0a 20 20 20   a B-Tree */.   
10bc0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
10bd0 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43  eCursorMoveto(pC
10be0 29 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29 20  );.    if( rc ) 
10bf0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
10c00 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 69 66 28  o_error;.    if(
10c10 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a   pC->nullRow ){.
10c20 20 20 20 20 20 20 70 61 79 6c 6f 61 64 53 69 7a        payloadSiz
10c30 65 20 3d 20 30 3b 0a 20 20 20 20 7d 65 6c 73 65  e = 0;.    }else
10c40 20 69 66 28 20 70 43 2d 3e 63 61 63 68 65 53 74   if( pC->cacheSt
10c50 61 74 75 73 3d 3d 70 2d 3e 63 61 63 68 65 43 74  atus==p->cacheCt
10c60 72 20 29 7b 0a 20 20 20 20 20 20 70 61 79 6c 6f  r ){.      paylo
10c70 61 64 53 69 7a 65 20 3d 20 70 43 2d 3e 70 61 79  adSize = pC->pay
10c80 6c 6f 61 64 53 69 7a 65 3b 0a 20 20 20 20 20 20  loadSize;.      
10c90 7a 52 65 63 20 3d 20 28 63 68 61 72 2a 29 70 43  zRec = (char*)pC
10ca0 2d 3e 61 52 6f 77 3b 0a 20 20 20 20 7d 65 6c 73  ->aRow;.    }els
10cb0 65 20 69 66 28 20 70 43 2d 3e 69 73 49 6e 64 65  e if( pC->isInde
10cc0 78 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72  x ){.      asser
10cd0 74 28 20 73 71 6c 69 74 65 33 42 74 72 65 65 43  t( sqlite3BtreeC
10ce0 75 72 73 6f 72 49 73 56 61 6c 69 64 28 70 43 72  ursorIsValid(pCr
10cf0 73 72 29 20 29 3b 0a 20 20 20 20 20 20 72 63 20  sr) );.      rc 
10d00 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65  = sqlite3BtreeKe
10d10 79 53 69 7a 65 28 70 43 72 73 72 2c 20 26 70 61  ySize(pCrsr, &pa
10d20 79 6c 6f 61 64 53 69 7a 65 36 34 29 3b 0a 20 20  yloadSize64);.  
10d30 20 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d      assert( rc==
10d40 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 20 20 2f  SQLITE_OK );   /
10d50 2a 20 54 72 75 65 20 62 65 63 61 75 73 65 20 6f  * True because o
10d60 66 20 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29  f CursorMoveto()
10d70 20 63 61 6c 6c 20 61 62 6f 76 65 20 2a 2f 0a 20   call above */. 
10d80 20 20 20 20 20 2f 2a 20 73 71 6c 69 74 65 33 42       /* sqlite3B
10d90 74 72 65 65 50 61 72 73 65 43 65 6c 6c 50 74 72  treeParseCellPtr
10da0 28 29 20 75 73 65 73 20 67 65 74 56 61 72 69 6e  () uses getVarin
10db0 74 33 32 28 29 20 74 6f 20 65 78 74 72 61 63 74  t32() to extract
10dc0 20 74 68 65 0a 20 20 20 20 20 20 2a 2a 20 70 61   the.      ** pa
10dd0 79 6c 6f 61 64 20 73 69 7a 65 2c 20 73 6f 20 69  yload size, so i
10de0 74 20 69 73 20 69 6d 70 6f 73 73 69 62 6c 65 20  t is impossible 
10df0 66 6f 72 20 70 61 79 6c 6f 61 64 53 69 7a 65 36  for payloadSize6
10e00 34 20 74 6f 20 62 65 0a 20 20 20 20 20 20 2a 2a  4 to be.      **
10e10 20 6c 61 72 67 65 72 20 74 68 61 6e 20 33 32 20   larger than 32 
10e20 62 69 74 73 2e 20 2a 2f 0a 20 20 20 20 20 20 61  bits. */.      a
10e30 73 73 65 72 74 28 20 28 70 61 79 6c 6f 61 64 53  ssert( (payloadS
10e40 69 7a 65 36 34 20 26 20 53 51 4c 49 54 45 5f 4d  ize64 & SQLITE_M
10e50 41 58 5f 55 33 32 29 3d 3d 28 75 36 34 29 70 61  AX_U32)==(u64)pa
10e60 79 6c 6f 61 64 53 69 7a 65 36 34 20 29 3b 0a 20  yloadSize64 );. 
10e70 20 20 20 20 20 70 61 79 6c 6f 61 64 53 69 7a 65       payloadSize
10e80 20 3d 20 28 75 33 32 29 70 61 79 6c 6f 61 64 53   = (u32)payloadS
10e90 69 7a 65 36 34 3b 0a 20 20 20 20 7d 65 6c 73 65  ize64;.    }else
10ea0 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  {.      assert( 
10eb0 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73  sqlite3BtreeCurs
10ec0 6f 72 49 73 56 61 6c 69 64 28 70 43 72 73 72 29  orIsValid(pCrsr)
10ed0 20 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73   );.      rc = s
10ee0 71 6c 69 74 65 33 42 74 72 65 65 44 61 74 61 53  qlite3BtreeDataS
10ef0 69 7a 65 28 70 43 72 73 72 2c 20 26 70 61 79 6c  ize(pCrsr, &payl
10f00 6f 61 64 53 69 7a 65 29 3b 0a 20 20 20 20 20 20  oadSize);.      
10f10 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49  assert( rc==SQLI
10f20 54 45 5f 4f 4b 20 29 3b 20 20 20 2f 2a 20 44 61  TE_OK );   /* Da
10f30 74 61 53 69 7a 65 28 29 20 63 61 6e 6e 6f 74 20  taSize() cannot 
10f40 66 61 69 6c 20 2a 2f 0a 20 20 20 20 7d 0a 20 20  fail */.    }.  
10f50 7d 65 6c 73 65 20 69 66 28 20 70 43 2d 3e 70 73  }else if( pC->ps
10f60 65 75 64 6f 54 61 62 6c 65 52 65 67 3e 30 20 29  eudoTableReg>0 )
10f70 7b 0a 20 20 20 20 70 52 65 67 20 3d 20 26 61 4d  {.    pReg = &aM
10f80 65 6d 5b 70 43 2d 3e 70 73 65 75 64 6f 54 61 62  em[pC->pseudoTab
10f90 6c 65 52 65 67 5d 3b 0a 20 20 20 20 61 73 73 65  leReg];.    asse
10fa0 72 74 28 20 70 52 65 67 2d 3e 66 6c 61 67 73 20  rt( pReg->flags 
10fb0 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20  & MEM_Blob );.  
10fc0 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
10fd0 61 6c 69 64 28 70 52 65 67 29 20 29 3b 0a 20 20  alid(pReg) );.  
10fe0 20 20 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20    payloadSize = 
10ff0 70 52 65 67 2d 3e 6e 3b 0a 20 20 20 20 7a 52 65  pReg->n;.    zRe
11000 63 20 3d 20 70 52 65 67 2d 3e 7a 3b 0a 20 20 20  c = pReg->z;.   
11010 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
11020 20 3d 20 28 70 4f 70 2d 3e 70 35 26 4f 50 46 4c   = (pOp->p5&OPFL
11030 41 47 5f 43 4c 45 41 52 43 41 43 48 45 29 20 3f  AG_CLEARCACHE) ?
11040 20 43 41 43 48 45 5f 53 54 41 4c 45 20 3a 20 70   CACHE_STALE : p
11050 2d 3e 63 61 63 68 65 43 74 72 3b 0a 20 20 20 20  ->cacheCtr;.    
11060 61 73 73 65 72 74 28 20 70 61 79 6c 6f 61 64 53  assert( payloadS
11070 69 7a 65 3d 3d 30 20 7c 7c 20 7a 52 65 63 21 3d  ize==0 || zRec!=
11080 30 20 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  0 );.  }else{.  
11090 20 20 2f 2a 20 43 6f 6e 73 69 64 65 72 20 74 68    /* Consider th
110a0 65 20 72 6f 77 20 74 6f 20 62 65 20 4e 55 4c 4c  e row to be NULL
110b0 20 2a 2f 0a 20 20 20 20 70 61 79 6c 6f 61 64 53   */.    payloadS
110c0 69 7a 65 20 3d 20 30 3b 0a 20 20 7d 0a 0a 20 20  ize = 0;.  }..  
110d0 2f 2a 20 49 66 20 70 61 79 6c 6f 61 64 53 69 7a  /* If payloadSiz
110e0 65 20 69 73 20 30 2c 20 74 68 65 6e 20 6a 75 73  e is 0, then jus
110f0 74 20 73 74 6f 72 65 20 61 20 4e 55 4c 4c 20 2a  t store a NULL *
11100 2f 0a 20 20 69 66 28 20 70 61 79 6c 6f 61 64 53  /.  if( payloadS
11110 69 7a 65 3d 3d 30 20 29 7b 0a 20 20 20 20 61 73  ize==0 ){.    as
11120 73 65 72 74 28 20 70 44 65 73 74 2d 3e 66 6c 61  sert( pDest->fla
11130 67 73 26 4d 45 4d 5f 4e 75 6c 6c 20 29 3b 0a 20  gs&MEM_Null );. 
11140 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d     goto op_colum
11150 6e 5f 6f 75 74 3b 0a 20 20 7d 0a 20 20 61 73 73  n_out;.  }.  ass
11160 65 72 74 28 20 64 62 2d 3e 61 4c 69 6d 69 74 5b  ert( db->aLimit[
11170 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e  SQLITE_LIMIT_LEN
11180 47 54 48 5d 3e 3d 30 20 29 3b 0a 20 20 69 66 28  GTH]>=0 );.  if(
11190 20 70 61 79 6c 6f 61 64 53 69 7a 65 20 3e 20 28   payloadSize > (
111a0 75 33 32 29 64 62 2d 3e 61 4c 69 6d 69 74 5b 53  u32)db->aLimit[S
111b0 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47  QLITE_LIMIT_LENG
111c0 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  TH] ){.    goto 
111d0 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 0a 20 20  too_big;.  }..  
111e0 6e 46 69 65 6c 64 20 3d 20 70 43 2d 3e 6e 46 69  nField = pC->nFi
111f0 65 6c 64 3b 0a 20 20 61 73 73 65 72 74 28 20 70  eld;.  assert( p
11200 32 3c 6e 46 69 65 6c 64 20 29 3b 0a 0a 20 20 2f  2<nField );..  /
11210 2a 20 52 65 61 64 20 61 6e 64 20 70 61 72 73 65  * Read and parse
11220 20 74 68 65 20 74 61 62 6c 65 20 68 65 61 64 65   the table heade
11230 72 2e 20 20 53 74 6f 72 65 20 74 68 65 20 72 65  r.  Store the re
11240 73 75 6c 74 73 20 6f 66 20 74 68 65 20 70 61 72  sults of the par
11250 73 65 0a 20 20 2a 2a 20 69 6e 74 6f 20 74 68 65  se.  ** into the
11260 20 72 65 63 6f 72 64 20 68 65 61 64 65 72 20 63   record header c
11270 61 63 68 65 20 66 69 65 6c 64 73 20 6f 66 20 74  ache fields of t
11280 68 65 20 63 75 72 73 6f 72 2e 0a 20 20 2a 2f 0a  he cursor..  */.
11290 20 20 61 54 79 70 65 20 3d 20 70 43 2d 3e 61 54    aType = pC->aT
112a0 79 70 65 3b 0a 20 20 69 66 28 20 70 43 2d 3e 63  ype;.  if( pC->c
112b0 61 63 68 65 53 74 61 74 75 73 3d 3d 70 2d 3e 63  acheStatus==p->c
112c0 61 63 68 65 43 74 72 20 29 7b 0a 20 20 20 20 61  acheCtr ){.    a
112d0 4f 66 66 73 65 74 20 3d 20 70 43 2d 3e 61 4f 66  Offset = pC->aOf
112e0 66 73 65 74 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  fset;.  }else{. 
112f0 20 20 20 61 73 73 65 72 74 28 61 54 79 70 65 29     assert(aType)
11300 3b 0a 20 20 20 20 61 76 61 69 6c 20 3d 20 30 3b  ;.    avail = 0;
11310 0a 20 20 20 20 70 43 2d 3e 61 4f 66 66 73 65 74  .    pC->aOffset
11320 20 3d 20 61 4f 66 66 73 65 74 20 3d 20 26 61 54   = aOffset = &aT
11330 79 70 65 5b 6e 46 69 65 6c 64 5d 3b 0a 20 20 20  ype[nField];.   
11340 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65   pC->payloadSize
11350 20 3d 20 70 61 79 6c 6f 61 64 53 69 7a 65 3b 0a   = payloadSize;.
11360 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61      pC->cacheSta
11370 74 75 73 20 3d 20 70 2d 3e 63 61 63 68 65 43 74  tus = p->cacheCt
11380 72 3b 0a 0a 20 20 20 20 2f 2a 20 46 69 67 75 72  r;..    /* Figur
11390 65 20 6f 75 74 20 68 6f 77 20 6d 61 6e 79 20 62  e out how many b
113a0 79 74 65 73 20 61 72 65 20 69 6e 20 74 68 65 20  ytes are in the 
113b0 68 65 61 64 65 72 20 2a 2f 0a 20 20 20 20 69 66  header */.    if
113c0 28 20 7a 52 65 63 20 29 7b 0a 20 20 20 20 20 20  ( zRec ){.      
113d0 7a 44 61 74 61 20 3d 20 7a 52 65 63 3b 0a 20 20  zData = zRec;.  
113e0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 69    }else{.      i
113f0 66 28 20 70 43 2d 3e 69 73 49 6e 64 65 78 20 29  f( pC->isIndex )
11400 7b 0a 20 20 20 20 20 20 20 20 7a 44 61 74 61 20  {.        zData 
11410 3d 20 28 63 68 61 72 2a 29 73 71 6c 69 74 65 33  = (char*)sqlite3
11420 42 74 72 65 65 4b 65 79 46 65 74 63 68 28 70 43  BtreeKeyFetch(pC
11430 72 73 72 2c 20 26 61 76 61 69 6c 29 3b 0a 20 20  rsr, &avail);.  
11440 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
11450 20 20 20 7a 44 61 74 61 20 3d 20 28 63 68 61 72     zData = (char
11460 2a 29 73 71 6c 69 74 65 33 42 74 72 65 65 44 61  *)sqlite3BtreeDa
11470 74 61 46 65 74 63 68 28 70 43 72 73 72 2c 20 26  taFetch(pCrsr, &
11480 61 76 61 69 6c 29 3b 0a 20 20 20 20 20 20 7d 0a  avail);.      }.
11490 20 20 20 20 20 20 2f 2a 20 49 66 20 4b 65 79 46        /* If KeyF
114a0 65 74 63 68 28 29 2f 44 61 74 61 46 65 74 63 68  etch()/DataFetch
114b0 28 29 20 6d 61 6e 61 67 65 64 20 74 6f 20 67 65  () managed to ge
114c0 74 20 74 68 65 20 65 6e 74 69 72 65 20 70 61 79  t the entire pay
114d0 6c 6f 61 64 2c 0a 20 20 20 20 20 20 2a 2a 20 73  load,.      ** s
114e0 61 76 65 20 74 68 65 20 70 61 79 6c 6f 61 64 20  ave the payload 
114f0 69 6e 20 74 68 65 20 70 43 2d 3e 61 52 6f 77 20  in the pC->aRow 
11500 63 61 63 68 65 2e 20 20 54 68 61 74 20 77 69 6c  cache.  That wil
11510 6c 20 73 61 76 65 20 75 73 20 66 72 6f 6d 0a 20  l save us from. 
11520 20 20 20 20 20 2a 2a 20 68 61 76 69 6e 67 20 74       ** having t
11530 6f 20 6d 61 6b 65 20 61 64 64 69 74 69 6f 6e 61  o make additiona
11540 6c 20 63 61 6c 6c 73 20 74 6f 20 66 65 74 63 68  l calls to fetch
11550 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 70 6f 72   the content por
11560 74 69 6f 6e 20 6f 66 0a 20 20 20 20 20 20 2a 2a  tion of.      **
11570 20 74 68 65 20 72 65 63 6f 72 64 2e 0a 20 20 20   the record..   
11580 20 20 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65     */.      asse
11590 72 74 28 20 61 76 61 69 6c 3e 3d 30 20 29 3b 0a  rt( avail>=0 );.
115a0 20 20 20 20 20 20 69 66 28 20 70 61 79 6c 6f 61        if( payloa
115b0 64 53 69 7a 65 20 3c 3d 20 28 75 33 32 29 61 76  dSize <= (u32)av
115c0 61 69 6c 20 29 7b 0a 20 20 20 20 20 20 20 20 7a  ail ){.        z
115d0 52 65 63 20 3d 20 7a 44 61 74 61 3b 0a 20 20 20  Rec = zData;.   
115e0 20 20 20 20 20 70 43 2d 3e 61 52 6f 77 20 3d 20       pC->aRow = 
115f0 28 75 38 2a 29 7a 44 61 74 61 3b 0a 20 20 20 20  (u8*)zData;.    
11600 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
11610 20 70 43 2d 3e 61 52 6f 77 20 3d 20 30 3b 0a 20   pC->aRow = 0;. 
11620 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
11630 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e   /* The followin
11640 67 20 61 73 73 65 72 74 20 69 73 20 74 72 75 65  g assert is true
11650 20 69 6e 20 61 6c 6c 20 63 61 73 65 73 20 61 63   in all cases ac
11660 63 65 70 74 20 77 68 65 6e 0a 20 20 20 20 2a 2a  cept when.    **
11670 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
11680 6c 65 20 68 61 73 20 62 65 65 6e 20 63 6f 72 72  le has been corr
11690 75 70 74 65 64 20 65 78 74 65 72 6e 61 6c 6c 79  upted externally
116a0 2e 0a 20 20 20 20 2a 2a 20 20 20 20 61 73 73 65  ..    **    asse
116b0 72 74 28 20 7a 52 65 63 21 3d 30 20 7c 7c 20 61  rt( zRec!=0 || a
116c0 76 61 69 6c 3e 3d 70 61 79 6c 6f 61 64 53 69 7a  vail>=payloadSiz
116d0 65 20 7c 7c 20 61 76 61 69 6c 3e 3d 39 20 29 3b  e || avail>=9 );
116e0 20 2a 2f 0a 20 20 20 20 73 7a 48 64 72 20 3d 20   */.    szHdr = 
116f0 67 65 74 56 61 72 69 6e 74 33 32 28 28 75 38 2a  getVarint32((u8*
11700 29 7a 44 61 74 61 2c 20 6f 66 66 73 65 74 29 3b  )zData, offset);
11710 0a 0a 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75  ..    /* Make su
11720 72 65 20 61 20 63 6f 72 72 75 70 74 20 64 61 74  re a corrupt dat
11730 61 62 61 73 65 20 68 61 73 20 6e 6f 74 20 67 69  abase has not gi
11740 76 65 6e 20 75 73 20 61 6e 20 6f 76 65 72 73 69  ven us an oversi
11750 7a 65 20 68 65 61 64 65 72 2e 0a 20 20 20 20 2a  ze header..    *
11760 2a 20 44 6f 20 74 68 69 73 20 6e 6f 77 20 74 6f  * Do this now to
11770 20 61 76 6f 69 64 20 61 6e 20 6f 76 65 72 73 69   avoid an oversi
11780 7a 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  ze memory alloca
11790 74 69 6f 6e 2e 0a 20 20 20 20 2a 2a 0a 20 20 20  tion..    **.   
117a0 20 2a 2a 20 54 79 70 65 20 65 6e 74 72 69 65 73   ** Type entries
117b0 20 63 61 6e 20 62 65 20 62 65 74 77 65 65 6e 20   can be between 
117c0 31 20 61 6e 64 20 35 20 62 79 74 65 73 20 65 61  1 and 5 bytes ea
117d0 63 68 2e 20 20 42 75 74 20 34 20 61 6e 64 20 35  ch.  But 4 and 5
117e0 20 62 79 74 65 0a 20 20 20 20 2a 2a 20 74 79 70   byte.    ** typ
117f0 65 73 20 75 73 65 20 73 6f 20 6d 75 63 68 20 64  es use so much d
11800 61 74 61 20 73 70 61 63 65 20 74 68 61 74 20 74  ata space that t
11810 68 65 72 65 20 63 61 6e 20 6f 6e 6c 79 20 62 65  here can only be
11820 20 34 30 39 36 20 61 6e 64 20 33 32 20 6f 66 0a   4096 and 32 of.
11830 20 20 20 20 2a 2a 20 74 68 65 6d 2c 20 72 65 73      ** them, res
11840 70 65 63 74 69 76 65 6c 79 2e 20 20 53 6f 20 74  pectively.  So t
11850 68 65 20 6d 61 78 69 6d 75 6d 20 68 65 61 64 65  he maximum heade
11860 72 20 6c 65 6e 67 74 68 20 72 65 73 75 6c 74 73  r length results
11870 20 66 72 6f 6d 20 61 0a 20 20 20 20 2a 2a 20 33   from a.    ** 3
11880 2d 62 79 74 65 20 74 79 70 65 20 66 6f 72 20 65  -byte type for e
11890 61 63 68 20 6f 66 20 74 68 65 20 6d 61 78 69 6d  ach of the maxim
118a0 75 6d 20 6f 66 20 33 32 37 36 38 20 63 6f 6c 75  um of 32768 colu
118b0 6d 6e 73 20 70 6c 75 73 20 74 68 72 65 65 0a 20  mns plus three. 
118c0 20 20 20 2a 2a 20 65 78 74 72 61 20 62 79 74 65     ** extra byte
118d0 73 20 66 6f 72 20 74 68 65 20 68 65 61 64 65 72  s for the header
118e0 20 6c 65 6e 67 74 68 20 69 74 73 65 6c 66 2e 20   length itself. 
118f0 20 33 32 37 36 38 2a 33 20 2b 20 33 20 3d 20 39   32768*3 + 3 = 9
11900 38 33 30 37 2e 0a 20 20 20 20 2a 2f 0a 20 20 20  8307..    */.   
11910 20 69 66 28 20 6f 66 66 73 65 74 20 3e 20 39 38   if( offset > 98
11920 33 30 37 20 29 7b 0a 20 20 20 20 20 20 72 63 20  307 ){.      rc 
11930 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54  = SQLITE_CORRUPT
11940 5f 42 4b 50 54 3b 0a 20 20 20 20 20 20 67 6f 74  _BKPT;.      got
11950 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b  o op_column_out;
11960 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 20 43  .    }..    /* C
11970 6f 6d 70 75 74 65 20 69 6e 20 6c 65 6e 20 74 68  ompute in len th
11980 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  e number of byte
11990 73 20 6f 66 20 64 61 74 61 20 77 65 20 6e 65 65  s of data we nee
119a0 64 20 74 6f 20 72 65 61 64 20 69 6e 20 6f 72 64  d to read in ord
119b0 65 72 0a 20 20 20 20 2a 2a 20 74 6f 20 67 65 74  er.    ** to get
119c0 20 6e 46 69 65 6c 64 20 74 79 70 65 20 76 61 6c   nField type val
119d0 75 65 73 2e 20 20 6f 66 66 73 65 74 20 69 73 20  ues.  offset is 
119e0 61 6e 20 75 70 70 65 72 20 62 6f 75 6e 64 20 6f  an upper bound o
119f0 6e 20 74 68 69 73 2e 20 20 42 75 74 0a 20 20 20  n this.  But.   
11a00 20 2a 2a 20 6e 46 69 65 6c 64 20 6d 69 67 68 74   ** nField might
11a10 20 62 65 20 73 69 67 6e 69 66 69 63 61 6e 74 6c   be significantl
11a20 79 20 6c 65 73 73 20 74 68 61 6e 20 74 68 65 20  y less than the 
11a30 74 72 75 65 20 6e 75 6d 62 65 72 20 6f 66 20 63  true number of c
11a40 6f 6c 75 6d 6e 73 0a 20 20 20 20 2a 2a 20 69 6e  olumns.    ** in
11a50 20 74 68 65 20 74 61 62 6c 65 2c 20 61 6e 64 20   the table, and 
11a60 69 6e 20 74 68 61 74 20 63 61 73 65 2c 20 35 2a  in that case, 5*
11a70 6e 46 69 65 6c 64 2b 33 20 6d 69 67 68 74 20 62  nField+3 might b
11a80 65 20 73 6d 61 6c 6c 65 72 20 74 68 61 6e 20 6f  e smaller than o
11a90 66 66 73 65 74 2e 0a 20 20 20 20 2a 2a 20 57 65  ffset..    ** We
11aa0 20 77 61 6e 74 20 74 6f 20 6d 69 6e 69 6d 69 7a   want to minimiz
11ab0 65 20 6c 65 6e 20 69 6e 20 6f 72 64 65 72 20 74  e len in order t
11ac0 6f 20 6c 69 6d 69 74 20 74 68 65 20 73 69 7a 65  o limit the size
11ad0 20 6f 66 20 74 68 65 20 6d 65 6d 6f 72 79 0a 20   of the memory. 
11ae0 20 20 20 2a 2a 20 61 6c 6c 6f 63 61 74 69 6f 6e     ** allocation
11af0 2c 20 65 73 70 65 63 69 61 6c 6c 79 20 69 66 20  , especially if 
11b00 61 20 63 6f 72 72 75 70 74 20 64 61 74 61 62 61  a corrupt databa
11b10 73 65 20 66 69 6c 65 20 68 61 73 20 63 61 75 73  se file has caus
11b20 65 64 20 6f 66 66 73 65 74 0a 20 20 20 20 2a 2a  ed offset.    **
11b30 20 74 6f 20 62 65 20 6f 76 65 72 73 69 7a 65 64   to be oversized
11b40 2e 20 4f 66 66 73 65 74 20 69 73 20 6c 69 6d 69  . Offset is limi
11b50 74 65 64 20 74 6f 20 39 38 33 30 37 20 61 62 6f  ted to 98307 abo
11b60 76 65 2e 20 20 42 75 74 20 39 38 33 30 37 20 6d  ve.  But 98307 m
11b70 69 67 68 74 0a 20 20 20 20 2a 2a 20 73 74 69 6c  ight.    ** stil
11b80 6c 20 65 78 63 65 65 64 20 52 6f 62 73 6f 6e 20  l exceed Robson 
11b90 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
11ba0 6e 20 6c 69 6d 69 74 73 20 6f 6e 20 73 6f 6d 65  n limits on some
11bb0 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73 2e   configurations.
11bc0 0a 20 20 20 20 2a 2a 20 4f 6e 20 73 79 73 74 65  .    ** On syste
11bd0 6d 73 20 74 68 61 74 20 63 61 6e 6e 6f 74 20 74  ms that cannot t
11be0 6f 6c 65 72 61 74 65 20 6c 61 72 67 65 20 6d 65  olerate large me
11bf0 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 73  mory allocations
11c00 2c 20 6e 46 69 65 6c 64 2a 35 2b 33 0a 20 20 20  , nField*5+3.   
11c10 20 2a 2a 20 77 69 6c 6c 20 6c 69 6b 65 6c 79 20   ** will likely 
11c20 62 65 20 6d 75 63 68 20 73 6d 61 6c 6c 65 72 20  be much smaller 
11c30 73 69 6e 63 65 20 6e 46 69 65 6c 64 20 77 69 6c  since nField wil
11c40 6c 20 6c 69 6b 65 6c 79 20 62 65 20 6c 65 73 73  l likely be less
11c50 20 74 68 61 6e 0a 20 20 20 20 2a 2a 20 32 30 20   than.    ** 20 
11c60 6f 72 20 73 6f 2e 20 20 54 68 69 73 20 69 6e 73  or so.  This ins
11c70 75 72 65 73 20 74 68 61 74 20 52 6f 62 73 6f 6e  ures that Robson
11c80 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
11c90 6f 6e 20 6c 69 6d 69 74 73 20 61 72 65 0a 20 20  on limits are.  
11ca0 20 20 2a 2a 20 6e 6f 74 20 65 78 63 65 65 64 65    ** not exceede
11cb0 64 20 65 76 65 6e 20 66 6f 72 20 63 6f 72 72 75  d even for corru
11cc0 70 74 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  pt database file
11cd0 73 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 6c 65  s..    */.    le
11ce0 6e 20 3d 20 6e 46 69 65 6c 64 2a 35 20 2b 20 33  n = nField*5 + 3
11cf0 3b 0a 20 20 20 20 69 66 28 20 6c 65 6e 20 3e 20  ;.    if( len > 
11d00 28 69 6e 74 29 6f 66 66 73 65 74 20 29 20 6c 65  (int)offset ) le
11d10 6e 20 3d 20 28 69 6e 74 29 6f 66 66 73 65 74 3b  n = (int)offset;
11d20 0a 0a 20 20 20 20 2f 2a 20 54 68 65 20 4b 65 79  ..    /* The Key
11d30 46 65 74 63 68 28 29 20 6f 72 20 44 61 74 61 46  Fetch() or DataF
11d40 65 74 63 68 28 29 20 61 62 6f 76 65 20 61 72 65  etch() above are
11d50 20 66 61 73 74 20 61 6e 64 20 77 69 6c 6c 20 67   fast and will g
11d60 65 74 20 74 68 65 20 65 6e 74 69 72 65 0a 20 20  et the entire.  
11d70 20 20 2a 2a 20 72 65 63 6f 72 64 20 68 65 61 64    ** record head
11d80 65 72 20 69 6e 20 6d 6f 73 74 20 63 61 73 65 73  er in most cases
11d90 2e 20 20 42 75 74 20 74 68 65 79 20 77 69 6c 6c  .  But they will
11da0 20 66 61 69 6c 20 74 6f 20 67 65 74 20 74 68 65   fail to get the
11db0 20 63 6f 6d 70 6c 65 74 65 0a 20 20 20 20 2a 2a   complete.    **
11dc0 20 72 65 63 6f 72 64 20 68 65 61 64 65 72 20 69   record header i
11dd0 66 20 74 68 65 20 72 65 63 6f 72 64 20 68 65 61  f the record hea
11de0 64 65 72 20 64 6f 65 73 20 6e 6f 74 20 66 69 74  der does not fit
11df0 20 6f 6e 20 61 20 73 69 6e 67 6c 65 20 70 61 67   on a single pag
11e00 65 0a 20 20 20 20 2a 2a 20 69 6e 20 74 68 65 20  e.    ** in the 
11e10 42 2d 54 72 65 65 2e 20 20 57 68 65 6e 20 74 68  B-Tree.  When th
11e20 61 74 20 68 61 70 70 65 6e 73 2c 20 75 73 65 20  at happens, use 
11e30 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 72  sqlite3VdbeMemFr
11e40 6f 6d 42 74 72 65 65 28 29 20 74 6f 0a 20 20 20  omBtree() to.   
11e50 20 2a 2a 20 61 63 71 75 69 72 65 20 74 68 65 20   ** acquire the 
11e60 63 6f 6d 70 6c 65 74 65 20 68 65 61 64 65 72 20  complete header 
11e70 74 65 78 74 2e 0a 20 20 20 20 2a 2f 0a 20 20 20  text..    */.   
11e80 20 69 66 28 20 21 7a 52 65 63 20 26 26 20 61 76   if( !zRec && av
11e90 61 69 6c 3c 6c 65 6e 20 29 7b 0a 20 20 20 20 20  ail<len ){.     
11ea0 20 73 4d 65 6d 2e 66 6c 61 67 73 20 3d 20 30 3b   sMem.flags = 0;
11eb0 0a 20 20 20 20 20 20 73 4d 65 6d 2e 64 62 20 3d  .      sMem.db =
11ec0 20 30 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73   0;.      rc = s
11ed0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 72 6f  qlite3VdbeMemFro
11ee0 6d 42 74 72 65 65 28 70 43 72 73 72 2c 20 30 2c  mBtree(pCrsr, 0,
11ef0 20 6c 65 6e 2c 20 70 43 2d 3e 69 73 49 6e 64 65   len, pC->isInde
11f00 78 2c 20 26 73 4d 65 6d 29 3b 0a 20 20 20 20 20  x, &sMem);.     
11f10 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
11f20 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 67 6f  OK ){.        go
11f30 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74  to op_column_out
11f40 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
11f50 7a 44 61 74 61 20 3d 20 73 4d 65 6d 2e 7a 3b 0a  zData = sMem.z;.
11f60 20 20 20 20 7d 0a 20 20 20 20 7a 45 6e 64 48 64      }.    zEndHd
11f70 72 20 3d 20 28 75 38 20 2a 29 26 7a 44 61 74 61  r = (u8 *)&zData
11f80 5b 6c 65 6e 5d 3b 0a 20 20 20 20 7a 49 64 78 20  [len];.    zIdx 
11f90 3d 20 28 75 38 20 2a 29 26 7a 44 61 74 61 5b 73  = (u8 *)&zData[s
11fa0 7a 48 64 72 5d 3b 0a 0a 20 20 20 20 2f 2a 20 53  zHdr];..    /* S
11fb0 63 61 6e 20 74 68 65 20 68 65 61 64 65 72 20 61  can the header a
11fc0 6e 64 20 75 73 65 20 69 74 20 74 6f 20 66 69 6c  nd use it to fil
11fd0 6c 20 69 6e 20 74 68 65 20 61 54 79 70 65 5b 5d  l in the aType[]
11fe0 20 61 6e 64 20 61 4f 66 66 73 65 74 5b 5d 0a 20   and aOffset[]. 
11ff0 20 20 20 2a 2a 20 61 72 72 61 79 73 2e 20 20 61     ** arrays.  a
12000 54 79 70 65 5b 69 5d 20 77 69 6c 6c 20 63 6f 6e  Type[i] will con
12010 74 61 69 6e 20 74 68 65 20 74 79 70 65 20 69 6e  tain the type in
12020 74 65 67 65 72 20 66 6f 72 20 74 68 65 20 69 2d  teger for the i-
12030 74 68 0a 20 20 20 20 2a 2a 20 63 6f 6c 75 6d 6e  th.    ** column
12040 20 61 6e 64 20 61 4f 66 66 73 65 74 5b 69 5d 20   and aOffset[i] 
12050 77 69 6c 6c 20 63 6f 6e 74 61 69 6e 20 74 68 65  will contain the
12060 20 6f 66 66 73 65 74 20 66 72 6f 6d 20 74 68 65   offset from the
12070 20 62 65 67 69 6e 6e 69 6e 67 0a 20 20 20 20 2a   beginning.    *
12080 2a 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20  * of the record 
12090 74 6f 20 74 68 65 20 73 74 61 72 74 20 6f 66 20  to the start of 
120a0 74 68 65 20 64 61 74 61 20 66 6f 72 20 74 68 65  the data for the
120b0 20 69 2d 74 68 20 63 6f 6c 75 6d 6e 0a 20 20 20   i-th column.   
120c0 20 2a 2f 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b   */.    for(i=0;
120d0 20 69 3c 6e 46 69 65 6c 64 3b 20 69 2b 2b 29 7b   i<nField; i++){
120e0 0a 20 20 20 20 20 20 69 66 28 20 7a 49 64 78 3c  .      if( zIdx<
120f0 7a 45 6e 64 48 64 72 20 29 7b 0a 20 20 20 20 20  zEndHdr ){.     
12100 20 20 20 61 4f 66 66 73 65 74 5b 69 5d 20 3d 20     aOffset[i] = 
12110 6f 66 66 73 65 74 3b 0a 20 20 20 20 20 20 20 20  offset;.        
12120 7a 49 64 78 20 2b 3d 20 67 65 74 56 61 72 69 6e  zIdx += getVarin
12130 74 33 32 28 7a 49 64 78 2c 20 61 54 79 70 65 5b  t32(zIdx, aType[
12140 69 5d 29 3b 0a 20 20 20 20 20 20 20 20 73 7a 46  i]);.        szF
12150 69 65 6c 64 20 3d 20 73 71 6c 69 74 65 33 56 64  ield = sqlite3Vd
12160 62 65 53 65 72 69 61 6c 54 79 70 65 4c 65 6e 28  beSerialTypeLen(
12170 61 54 79 70 65 5b 69 5d 29 3b 0a 20 20 20 20 20  aType[i]);.     
12180 20 20 20 6f 66 66 73 65 74 20 2b 3d 20 73 7a 46     offset += szF
12190 69 65 6c 64 3b 0a 20 20 20 20 20 20 20 20 69 66  ield;.        if
121a0 28 20 6f 66 66 73 65 74 3c 73 7a 46 69 65 6c 64  ( offset<szField
121b0 20 29 7b 20 20 2f 2a 20 54 72 75 65 20 69 66 20   ){  /* True if 
121c0 6f 66 66 73 65 74 20 6f 76 65 72 66 6c 6f 77 73  offset overflows
121d0 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 7a 49   */.          zI
121e0 64 78 20 3d 20 26 7a 45 6e 64 48 64 72 5b 31 5d  dx = &zEndHdr[1]
121f0 3b 20 20 2f 2a 20 46 6f 72 63 65 73 20 53 51 4c  ;  /* Forces SQL
12200 49 54 45 5f 43 4f 52 52 55 50 54 20 72 65 74 75  ITE_CORRUPT retu
12210 72 6e 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 20 20  rn below */.    
12220 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
12230 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 65 6c       }.      }el
12240 73 65 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 49  se{.        /* I
12250 66 20 69 20 69 73 20 6c 65 73 73 20 74 68 61 74  f i is less that
12260 20 6e 46 69 65 6c 64 2c 20 74 68 65 6e 20 74 68   nField, then th
12270 65 72 65 20 61 72 65 20 6c 65 73 73 20 66 69 65  ere are less fie
12280 6c 64 73 20 69 6e 20 74 68 69 73 0a 20 20 20 20  lds in this.    
12290 20 20 20 20 2a 2a 20 72 65 63 6f 72 64 20 74 68      ** record th
122a0 61 6e 20 53 65 74 4e 75 6d 43 6f 6c 75 6d 6e 73  an SetNumColumns
122b0 20 69 6e 64 69 63 61 74 65 64 20 74 68 65 72 65   indicated there
122c0 20 61 72 65 20 63 6f 6c 75 6d 6e 73 20 69 6e 20   are columns in 
122d0 74 68 65 0a 20 20 20 20 20 20 20 20 2a 2a 20 74  the.        ** t
122e0 61 62 6c 65 2e 20 53 65 74 20 74 68 65 20 6f 66  able. Set the of
122f0 66 73 65 74 20 66 6f 72 20 61 6e 79 20 65 78 74  fset for any ext
12300 72 61 20 63 6f 6c 75 6d 6e 73 20 6e 6f 74 20 70  ra columns not p
12310 72 65 73 65 6e 74 20 69 6e 0a 20 20 20 20 20 20  resent in.      
12320 20 20 2a 2a 20 74 68 65 20 72 65 63 6f 72 64 20    ** the record 
12330 74 6f 20 30 2e 20 54 68 69 73 20 74 65 6c 6c 73  to 0. This tells
12340 20 63 6f 64 65 20 62 65 6c 6f 77 20 74 6f 20 73   code below to s
12350 74 6f 72 65 20 61 20 4e 55 4c 4c 0a 20 20 20 20  tore a NULL.    
12360 20 20 20 20 2a 2a 20 69 6e 73 74 65 61 64 20 6f      ** instead o
12370 66 20 64 65 73 65 72 69 61 6c 69 7a 69 6e 67 20  f deserializing 
12380 61 20 76 61 6c 75 65 20 66 72 6f 6d 20 74 68 65  a value from the
12390 20 72 65 63 6f 72 64 2e 0a 20 20 20 20 20 20 20   record..       
123a0 20 2a 2f 0a 20 20 20 20 20 20 20 20 61 4f 66 66   */.        aOff
123b0 73 65 74 5b 69 5d 20 3d 20 30 3b 0a 20 20 20 20  set[i] = 0;.    
123c0 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 73 71    }.    }.    sq
123d0 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65  lite3VdbeMemRele
123e0 61 73 65 28 26 73 4d 65 6d 29 3b 0a 20 20 20 20  ase(&sMem);.    
123f0 73 4d 65 6d 2e 66 6c 61 67 73 20 3d 20 4d 45 4d  sMem.flags = MEM
12400 5f 4e 75 6c 6c 3b 0a 0a 20 20 20 20 2f 2a 20 49  _Null;..    /* I
12410 66 20 77 65 20 68 61 76 65 20 72 65 61 64 20 6d  f we have read m
12420 6f 72 65 20 68 65 61 64 65 72 20 64 61 74 61 20  ore header data 
12430 74 68 61 6e 20 77 61 73 20 63 6f 6e 74 61 69 6e  than was contain
12440 65 64 20 69 6e 20 74 68 65 20 68 65 61 64 65 72  ed in the header
12450 2c 0a 20 20 20 20 2a 2a 20 6f 72 20 69 66 20 74  ,.    ** or if t
12460 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 6c 61  he end of the la
12470 73 74 20 66 69 65 6c 64 20 61 70 70 65 61 72 73  st field appears
12480 20 74 6f 20 62 65 20 70 61 73 74 20 74 68 65 20   to be past the 
12490 65 6e 64 20 6f 66 20 74 68 65 0a 20 20 20 20 2a  end of the.    *
124a0 2a 20 72 65 63 6f 72 64 2c 20 6f 72 20 69 66 20  * record, or if 
124b0 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 6c  the end of the l
124c0 61 73 74 20 66 69 65 6c 64 20 61 70 70 65 61 72  ast field appear
124d0 73 20 74 6f 20 62 65 20 62 65 66 6f 72 65 20 74  s to be before t
124e0 68 65 20 65 6e 64 0a 20 20 20 20 2a 2a 20 6f 66  he end.    ** of
124f0 20 74 68 65 20 72 65 63 6f 72 64 20 28 77 68 65   the record (whe
12500 6e 20 61 6c 6c 20 66 69 65 6c 64 73 20 70 72 65  n all fields pre
12510 73 65 6e 74 29 2c 20 74 68 65 6e 20 77 65 20 6d  sent), then we m
12520 75 73 74 20 62 65 20 64 65 61 6c 69 6e 67 20 0a  ust be dealing .
12530 20 20 20 20 2a 2a 20 77 69 74 68 20 61 20 63 6f      ** with a co
12540 72 72 75 70 74 20 64 61 74 61 62 61 73 65 2e 0a  rrupt database..
12550 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 28      */.    if( (
12560 7a 49 64 78 20 3e 20 7a 45 6e 64 48 64 72 29 20  zIdx > zEndHdr) 
12570 7c 7c 20 28 6f 66 66 73 65 74 20 3e 20 70 61 79  || (offset > pay
12580 6c 6f 61 64 53 69 7a 65 29 0a 20 20 20 20 20 20  loadSize).      
12590 20 20 20 7c 7c 20 28 7a 49 64 78 3d 3d 7a 45 6e     || (zIdx==zEn
125a0 64 48 64 72 20 26 26 20 6f 66 66 73 65 74 21 3d  dHdr && offset!=
125b0 70 61 79 6c 6f 61 64 53 69 7a 65 29 20 29 7b 0a  payloadSize) ){.
125c0 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
125d0 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a  E_CORRUPT_BKPT;.
125e0 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f        goto op_co
125f0 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20 7d 0a  lumn_out;.    }.
12600 20 20 7d 0a 0a 20 20 2f 2a 20 47 65 74 20 74 68    }..  /* Get th
12610 65 20 63 6f 6c 75 6d 6e 20 69 6e 66 6f 72 6d 61  e column informa
12620 74 69 6f 6e 2e 20 49 66 20 61 4f 66 66 73 65 74  tion. If aOffset
12630 5b 70 32 5d 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f  [p2] is non-zero
12640 2c 20 74 68 65 6e 20 0a 20 20 2a 2a 20 64 65 73  , then .  ** des
12650 65 72 69 61 6c 69 7a 65 20 74 68 65 20 76 61 6c  erialize the val
12660 75 65 20 66 72 6f 6d 20 74 68 65 20 72 65 63 6f  ue from the reco
12670 72 64 2e 20 49 66 20 61 4f 66 66 73 65 74 5b 70  rd. If aOffset[p
12680 32 5d 20 69 73 20 7a 65 72 6f 2c 0a 20 20 2a 2a  2] is zero,.  **
12690 20 74 68 65 6e 20 74 68 65 72 65 20 61 72 65 20   then there are 
126a0 6e 6f 74 20 65 6e 6f 75 67 68 20 66 69 65 6c 64  not enough field
126b0 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20  s in the record 
126c0 74 6f 20 73 61 74 69 73 66 79 20 74 68 65 0a 20  to satisfy the. 
126d0 20 2a 2a 20 72 65 71 75 65 73 74 2e 20 20 49 6e   ** request.  In
126e0 20 74 68 69 73 20 63 61 73 65 2c 20 73 65 74 20   this case, set 
126f0 74 68 65 20 76 61 6c 75 65 20 4e 55 4c 4c 20 6f  the value NULL o
12700 72 20 74 6f 20 50 34 20 69 66 20 50 34 20 69 73  r to P4 if P4 is
12710 0a 20 20 2a 2a 20 61 20 70 6f 69 6e 74 65 72 20  .  ** a pointer 
12720 74 6f 20 61 20 4d 65 6d 20 6f 62 6a 65 63 74 2e  to a Mem object.
12730 0a 20 20 2a 2f 0a 20 20 69 66 28 20 61 4f 66 66  .  */.  if( aOff
12740 73 65 74 5b 70 32 5d 20 29 7b 0a 20 20 20 20 61  set[p2] ){.    a
12750 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54  ssert( rc==SQLIT
12760 45 5f 4f 4b 20 29 3b 0a 20 20 20 20 69 66 28 20  E_OK );.    if( 
12770 7a 52 65 63 20 29 7b 0a 20 20 20 20 20 20 73 71  zRec ){.      sq
12780 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65  lite3VdbeMemRele
12790 61 73 65 45 78 74 65 72 6e 61 6c 28 70 44 65 73  aseExternal(pDes
127a0 74 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  t);.      sqlite
127b0 33 56 64 62 65 53 65 72 69 61 6c 47 65 74 28 28  3VdbeSerialGet((
127c0 75 38 20 2a 29 26 7a 52 65 63 5b 61 4f 66 66 73  u8 *)&zRec[aOffs
127d0 65 74 5b 70 32 5d 5d 2c 20 61 54 79 70 65 5b 70  et[p2]], aType[p
127e0 32 5d 2c 20 70 44 65 73 74 29 3b 0a 20 20 20 20  2], pDest);.    
127f0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 6c 65 6e  }else{.      len
12800 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 65   = sqlite3VdbeSe
12810 72 69 61 6c 54 79 70 65 4c 65 6e 28 61 54 79 70  rialTypeLen(aTyp
12820 65 5b 70 32 5d 29 3b 0a 20 20 20 20 20 20 73 71  e[p2]);.      sq
12830 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65  lite3VdbeMemMove
12840 28 26 73 4d 65 6d 2c 20 70 44 65 73 74 29 3b 0a  (&sMem, pDest);.
12850 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
12860 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72  e3VdbeMemFromBtr
12870 65 65 28 70 43 72 73 72 2c 20 61 4f 66 66 73 65  ee(pCrsr, aOffse
12880 74 5b 70 32 5d 2c 20 6c 65 6e 2c 20 70 43 2d 3e  t[p2], len, pC->
12890 69 73 49 6e 64 65 78 2c 20 26 73 4d 65 6d 29 3b  isIndex, &sMem);
128a0 0a 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53  .      if( rc!=S
128b0 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
128c0 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75      goto op_colu
128d0 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20 20 20 7d 0a  mn_out;.      }.
128e0 20 20 20 20 20 20 7a 44 61 74 61 20 3d 20 73 4d        zData = sM
128f0 65 6d 2e 7a 3b 0a 20 20 20 20 20 20 73 71 6c 69  em.z;.      sqli
12900 74 65 33 56 64 62 65 53 65 72 69 61 6c 47 65 74  te3VdbeSerialGet
12910 28 28 75 38 2a 29 7a 44 61 74 61 2c 20 61 54 79  ((u8*)zData, aTy
12920 70 65 5b 70 32 5d 2c 20 70 44 65 73 74 29 3b 0a  pe[p2], pDest);.
12930 20 20 20 20 7d 0a 20 20 20 20 70 44 65 73 74 2d      }.    pDest-
12940 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b  >enc = encoding;
12950 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69 66  .  }else{.    if
12960 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
12970 34 5f 4d 45 4d 20 29 7b 0a 20 20 20 20 20 20 73  4_MEM ){.      s
12980 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61  qlite3VdbeMemSha
12990 6c 6c 6f 77 43 6f 70 79 28 70 44 65 73 74 2c 20  llowCopy(pDest, 
129a0 70 4f 70 2d 3e 70 34 2e 70 4d 65 6d 2c 20 4d 45  pOp->p4.pMem, ME
129b0 4d 5f 53 74 61 74 69 63 29 3b 0a 20 20 20 20 7d  M_Static);.    }
129c0 65 6c 73 65 7b 0a 20 20 20 20 20 20 61 73 73 65  else{.      asse
129d0 72 74 28 20 70 44 65 73 74 2d 3e 66 6c 61 67 73  rt( pDest->flags
129e0 26 4d 45 4d 5f 4e 75 6c 6c 20 29 3b 0a 20 20 20  &MEM_Null );.   
129f0 20 7d 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20   }.  }..  /* If 
12a00 77 65 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61  we dynamically a
12a10 6c 6c 6f 63 61 74 65 64 20 73 70 61 63 65 20 74  llocated space t
12a20 6f 20 68 6f 6c 64 20 74 68 65 20 64 61 74 61 20  o hold the data 
12a30 28 69 6e 20 74 68 65 0a 20 20 2a 2a 20 73 71 6c  (in the.  ** sql
12a40 69 74 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d 42  ite3VdbeMemFromB
12a50 74 72 65 65 28 29 20 63 61 6c 6c 20 61 62 6f 76  tree() call abov
12a60 65 29 20 74 68 65 6e 20 74 72 61 6e 73 66 65 72  e) then transfer
12a70 20 63 6f 6e 74 72 6f 6c 20 6f 66 20 74 68 61 74   control of that
12a80 0a 20 20 2a 2a 20 64 79 6e 61 6d 69 63 61 6c 6c  .  ** dynamicall
12a90 79 20 61 6c 6c 6f 63 61 74 65 64 20 73 70 61 63  y allocated spac
12aa0 65 20 6f 76 65 72 20 74 6f 20 74 68 65 20 70 44  e over to the pD
12ab0 65 73 74 20 73 74 72 75 63 74 75 72 65 2e 0a 20  est structure.. 
12ac0 20 2a 2a 20 54 68 69 73 20 70 72 65 76 65 6e 74   ** This prevent
12ad0 73 20 61 20 6d 65 6d 6f 72 79 20 63 6f 70 79 2e  s a memory copy.
12ae0 0a 20 20 2a 2f 0a 20 20 69 66 28 20 73 4d 65 6d  .  */.  if( sMem
12af0 2e 7a 4d 61 6c 6c 6f 63 20 29 7b 0a 20 20 20 20  .zMalloc ){.    
12b00 61 73 73 65 72 74 28 20 73 4d 65 6d 2e 7a 3d 3d  assert( sMem.z==
12b10 73 4d 65 6d 2e 7a 4d 61 6c 6c 6f 63 20 29 3b 0a  sMem.zMalloc );.
12b20 20 20 20 20 61 73 73 65 72 74 28 20 21 28 70 44      assert( !(pD
12b30 65 73 74 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  est->flags & MEM
12b40 5f 44 79 6e 29 20 29 3b 0a 20 20 20 20 61 73 73  _Dyn) );.    ass
12b50 65 72 74 28 20 21 28 70 44 65 73 74 2d 3e 66 6c  ert( !(pDest->fl
12b60 61 67 73 20 26 20 28 4d 45 4d 5f 42 6c 6f 62 7c  ags & (MEM_Blob|
12b70 4d 45 4d 5f 53 74 72 29 29 20 7c 7c 20 70 44 65  MEM_Str)) || pDe
12b80 73 74 2d 3e 7a 3d 3d 73 4d 65 6d 2e 7a 20 29 3b  st->z==sMem.z );
12b90 0a 20 20 20 20 70 44 65 73 74 2d 3e 66 6c 61 67  .    pDest->flag
12ba0 73 20 26 3d 20 7e 28 4d 45 4d 5f 45 70 68 65 6d  s &= ~(MEM_Ephem
12bb0 7c 4d 45 4d 5f 53 74 61 74 69 63 29 3b 0a 20 20  |MEM_Static);.  
12bc0 20 20 70 44 65 73 74 2d 3e 66 6c 61 67 73 20 7c    pDest->flags |
12bd0 3d 20 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 20 20  = MEM_Term;.    
12be0 70 44 65 73 74 2d 3e 7a 20 3d 20 73 4d 65 6d 2e  pDest->z = sMem.
12bf0 7a 3b 0a 20 20 20 20 70 44 65 73 74 2d 3e 7a 4d  z;.    pDest->zM
12c00 61 6c 6c 6f 63 20 3d 20 73 4d 65 6d 2e 7a 4d 61  alloc = sMem.zMa
12c10 6c 6c 6f 63 3b 0a 20 20 7d 0a 0a 20 20 72 63 20  lloc;.  }..  rc 
12c20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  = sqlite3VdbeMem
12c30 4d 61 6b 65 57 72 69 74 65 61 62 6c 65 28 70 44  MakeWriteable(pD
12c40 65 73 74 29 3b 0a 0a 6f 70 5f 63 6f 6c 75 6d 6e  est);..op_column
12c50 5f 6f 75 74 3a 0a 20 20 55 50 44 41 54 45 5f 4d  _out:.  UPDATE_M
12c60 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 44 65 73  AX_BLOBSIZE(pDes
12c70 74 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54  t);.  REGISTER_T
12c80 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 44  RACE(pOp->p3, pD
12c90 65 73 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  est);.  break;.}
12ca0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 66 66  ../* Opcode: Aff
12cb0 69 6e 69 74 79 20 50 31 20 50 32 20 2a 20 50 34  inity P1 P2 * P4
12cc0 20 2a 0a 2a 2a 0a 2a 2a 20 41 70 70 6c 79 20 61   *.**.** Apply a
12cd0 66 66 69 6e 69 74 69 65 73 20 74 6f 20 61 20 72  ffinities to a r
12ce0 61 6e 67 65 20 6f 66 20 50 32 20 72 65 67 69 73  ange of P2 regis
12cf0 74 65 72 73 20 73 74 61 72 74 69 6e 67 20 77 69  ters starting wi
12d00 74 68 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20  th P1..**.** P4 
12d10 69 73 20 61 20 73 74 72 69 6e 67 20 74 68 61 74  is a string that
12d20 20 69 73 20 50 32 20 63 68 61 72 61 63 74 65 72   is P2 character
12d30 73 20 6c 6f 6e 67 2e 20 54 68 65 20 6e 74 68 20  s long. The nth 
12d40 63 68 61 72 61 63 74 65 72 20 6f 66 20 74 68 65  character of the
12d50 0a 2a 2a 20 73 74 72 69 6e 67 20 69 6e 64 69 63  .** string indic
12d60 61 74 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20  ates the column 
12d70 61 66 66 69 6e 69 74 79 20 74 68 61 74 20 73 68  affinity that sh
12d80 6f 75 6c 64 20 62 65 20 75 73 65 64 20 66 6f 72  ould be used for
12d90 20 74 68 65 20 6e 74 68 0a 2a 2a 20 6d 65 6d 6f   the nth.** memo
12da0 72 79 20 63 65 6c 6c 20 69 6e 20 74 68 65 20 72  ry cell in the r
12db0 61 6e 67 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  ange..*/.case OP
12dc0 5f 41 66 66 69 6e 69 74 79 3a 20 7b 0a 20 20 63  _Affinity: {.  c
12dd0 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41 66 66 69  onst char *zAffi
12de0 6e 69 74 79 3b 20 20 20 2f 2a 20 54 68 65 20 61  nity;   /* The a
12df0 66 66 69 6e 69 74 79 20 74 6f 20 62 65 20 61 70  ffinity to be ap
12e00 70 6c 69 65 64 20 2a 2f 0a 20 20 63 68 61 72 20  plied */.  char 
12e10 63 41 66 66 3b 20 20 20 20 20 20 20 20 20 20 20  cAff;           
12e20 20 20 20 20 2f 2a 20 41 20 73 69 6e 67 6c 65 20      /* A single 
12e30 63 68 61 72 61 63 74 65 72 20 6f 66 20 61 66 66  character of aff
12e40 69 6e 69 74 79 20 2a 2f 0a 0a 20 20 7a 41 66 66  inity */..  zAff
12e50 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70 34 2e  inity = pOp->p4.
12e60 7a 3b 0a 20 20 61 73 73 65 72 74 28 20 7a 41 66  z;.  assert( zAf
12e70 66 69 6e 69 74 79 21 3d 30 20 29 3b 0a 20 20 61  finity!=0 );.  a
12e80 73 73 65 72 74 28 20 7a 41 66 66 69 6e 69 74 79  ssert( zAffinity
12e90 5b 70 4f 70 2d 3e 70 32 5d 3d 3d 30 20 29 3b 0a  [pOp->p2]==0 );.
12ea0 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
12eb0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 77 68 69 6c 65  Op->p1];.  while
12ec0 28 20 28 63 41 66 66 20 3d 20 2a 28 7a 41 66 66  ( (cAff = *(zAff
12ed0 69 6e 69 74 79 2b 2b 29 29 21 3d 30 20 29 7b 0a  inity++))!=0 ){.
12ee0 20 20 20 20 61 73 73 65 72 74 28 20 70 49 6e 31      assert( pIn1
12ef0 20 3c 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 2d 3e   <= &p->aMem[p->
12f00 6e 4d 65 6d 5d 20 29 3b 0a 20 20 20 20 61 73 73  nMem] );.    ass
12f10 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
12f20 70 49 6e 31 29 20 29 3b 0a 20 20 20 20 6d 65 6d  pIn1) );.    mem
12f30 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
12f40 20 70 49 6e 31 29 3b 0a 20 20 20 20 45 78 70 61   pIn1);.    Expa
12f50 6e 64 42 6c 6f 62 28 70 49 6e 31 29 3b 0a 20 20  ndBlob(pIn1);.  
12f60 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28    applyAffinity(
12f70 70 49 6e 31 2c 20 63 41 66 66 2c 20 65 6e 63 6f  pIn1, cAff, enco
12f80 64 69 6e 67 29 3b 0a 20 20 20 20 70 49 6e 31 2b  ding);.    pIn1+
12f90 2b 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  +;.  }.  break;.
12fa0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 61  }../* Opcode: Ma
12fb0 6b 65 52 65 63 6f 72 64 20 50 31 20 50 32 20 50  keRecord P1 P2 P
12fc0 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 43 6f 6e  3 P4 *.**.** Con
12fd0 76 65 72 74 20 50 32 20 72 65 67 69 73 74 65 72  vert P2 register
12fe0 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68  s beginning with
12ff0 20 50 31 20 69 6e 74 6f 20 74 68 65 20 5b 72 65   P1 into the [re
13000 63 6f 72 64 20 66 6f 72 6d 61 74 5d 0a 2a 2a 20  cord format].** 
13010 75 73 65 20 61 73 20 61 20 64 61 74 61 20 72 65  use as a data re
13020 63 6f 72 64 20 69 6e 20 61 20 64 61 74 61 62 61  cord in a databa
13030 73 65 20 74 61 62 6c 65 20 6f 72 20 61 73 20 61  se table or as a
13040 20 6b 65 79 0a 2a 2a 20 69 6e 20 61 6e 20 69 6e   key.** in an in
13050 64 65 78 2e 20 20 54 68 65 20 4f 50 5f 43 6f 6c  dex.  The OP_Col
13060 75 6d 6e 20 6f 70 63 6f 64 65 20 63 61 6e 20 64  umn opcode can d
13070 65 63 6f 64 65 20 74 68 65 20 72 65 63 6f 72 64  ecode the record
13080 20 6c 61 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 50 34   later..**.** P4
13090 20 6d 61 79 20 62 65 20 61 20 73 74 72 69 6e 67   may be a string
130a0 20 74 68 61 74 20 69 73 20 50 32 20 63 68 61 72   that is P2 char
130b0 61 63 74 65 72 73 20 6c 6f 6e 67 2e 20 20 54 68  acters long.  Th
130c0 65 20 6e 74 68 20 63 68 61 72 61 63 74 65 72 20  e nth character 
130d0 6f 66 20 74 68 65 0a 2a 2a 20 73 74 72 69 6e 67  of the.** string
130e0 20 69 6e 64 69 63 61 74 65 73 20 74 68 65 20 63   indicates the c
130f0 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 20 74  olumn affinity t
13100 68 61 74 20 73 68 6f 75 6c 64 20 62 65 20 75 73  hat should be us
13110 65 64 20 66 6f 72 20 74 68 65 20 6e 74 68 0a 2a  ed for the nth.*
13120 2a 20 66 69 65 6c 64 20 6f 66 20 74 68 65 20 69  * field of the i
13130 6e 64 65 78 20 6b 65 79 2e 0a 2a 2a 0a 2a 2a 20  ndex key..**.** 
13140 54 68 65 20 6d 61 70 70 69 6e 67 20 66 72 6f 6d  The mapping from
13150 20 63 68 61 72 61 63 74 65 72 20 74 6f 20 61 66   character to af
13160 66 69 6e 69 74 79 20 69 73 20 67 69 76 65 6e 20  finity is given 
13170 62 79 20 74 68 65 20 53 51 4c 49 54 45 5f 41 46  by the SQLITE_AF
13180 46 5f 0a 2a 2a 20 6d 61 63 72 6f 73 20 64 65 66  F_.** macros def
13190 69 6e 65 64 20 69 6e 20 73 71 6c 69 74 65 49 6e  ined in sqliteIn
131a0 74 2e 68 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34  t.h..**.** If P4
131b0 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 61 6c   is NULL then al
131c0 6c 20 69 6e 64 65 78 20 66 69 65 6c 64 73 20 68  l index fields h
131d0 61 76 65 20 74 68 65 20 61 66 66 69 6e 69 74 79  ave the affinity
131e0 20 4e 4f 4e 45 2e 0a 2a 2f 0a 63 61 73 65 20 4f   NONE..*/.case O
131f0 50 5f 4d 61 6b 65 52 65 63 6f 72 64 3a 20 7b 0a  P_MakeRecord: {.
13200 20 20 75 38 20 2a 7a 4e 65 77 52 65 63 6f 72 64    u8 *zNewRecord
13210 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 20 62 75  ;        /* A bu
13220 66 66 65 72 20 74 6f 20 68 6f 6c 64 20 74 68 65  ffer to hold the
13230 20 64 61 74 61 20 66 6f 72 20 74 68 65 20 6e 65   data for the ne
13240 77 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 4d 65  w record */.  Me
13250 6d 20 2a 70 52 65 63 3b 20 20 20 20 20 20 20 20  m *pRec;        
13260 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 77 20       /* The new 
13270 72 65 63 6f 72 64 20 2a 2f 0a 20 20 75 36 34 20  record */.  u64 
13280 6e 44 61 74 61 3b 20 20 20 20 20 20 20 20 20 20  nData;          
13290 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
132a0 62 79 74 65 73 20 6f 66 20 64 61 74 61 20 73 70  bytes of data sp
132b0 61 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 48 64  ace */.  int nHd
132c0 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r;              
132d0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74  /* Number of byt
132e0 65 73 20 6f 66 20 68 65 61 64 65 72 20 73 70 61  es of header spa
132f0 63 65 20 2a 2f 0a 20 20 69 36 34 20 6e 42 79 74  ce */.  i64 nByt
13300 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  e;             /
13310 2a 20 44 61 74 61 20 73 70 61 63 65 20 72 65 71  * Data space req
13320 75 69 72 65 64 20 66 6f 72 20 74 68 69 73 20 72  uired for this r
13330 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e  ecord */.  int n
13340 5a 65 72 6f 3b 20 20 20 20 20 20 20 20 20 20 20  Zero;           
13350 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 7a    /* Number of z
13360 65 72 6f 20 62 79 74 65 73 20 61 74 20 74 68 65  ero bytes at the
13370 20 65 6e 64 20 6f 66 20 74 68 65 20 72 65 63 6f   end of the reco
13380 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 61 72  rd */.  int nVar
13390 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f  int;           /
133a0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  * Number of byte
133b0 73 20 69 6e 20 61 20 76 61 72 69 6e 74 20 2a 2f  s in a varint */
133c0 0a 20 20 75 33 32 20 73 65 72 69 61 6c 5f 74 79  .  u32 serial_ty
133d0 70 65 3b 20 20 20 20 20 20 20 2f 2a 20 54 79 70  pe;       /* Typ
133e0 65 20 66 69 65 6c 64 20 2a 2f 0a 20 20 4d 65 6d  e field */.  Mem
133f0 20 2a 70 44 61 74 61 30 3b 20 20 20 20 20 20 20   *pData0;       
13400 20 20 20 20 2f 2a 20 46 69 72 73 74 20 66 69 65      /* First fie
13410 6c 64 20 74 6f 20 62 65 20 63 6f 6d 62 69 6e 65  ld to be combine
13420 64 20 69 6e 74 6f 20 74 68 65 20 72 65 63 6f 72  d into the recor
13430 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4c 61 73  d */.  Mem *pLas
13440 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  t;            /*
13450 20 4c 61 73 74 20 66 69 65 6c 64 20 6f 66 20 74   Last field of t
13460 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69  he record */.  i
13470 6e 74 20 6e 46 69 65 6c 64 3b 20 20 20 20 20 20  nt nField;      
13480 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
13490 6f 66 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65  of fields in the
134a0 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 63 68 61   record */.  cha
134b0 72 20 2a 7a 41 66 66 69 6e 69 74 79 3b 20 20 20  r *zAffinity;   
134c0 20 20 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e      /* The affin
134d0 69 74 79 20 73 74 72 69 6e 67 20 66 6f 72 20 74  ity string for t
134e0 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69  he record */.  i
134f0 6e 74 20 66 69 6c 65 5f 66 6f 72 6d 61 74 3b 20  nt file_format; 
13500 20 20 20 20 20 20 2f 2a 20 46 69 6c 65 20 66 6f        /* File fo
13510 72 6d 61 74 20 74 6f 20 75 73 65 20 66 6f 72 20  rmat to use for 
13520 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20 20 69 6e  encoding */.  in
13530 74 20 69 3b 20 20 20 20 20 20 20 20 20 20 20 20  t i;            
13540 20 20 20 20 20 2f 2a 20 53 70 61 63 65 20 75 73       /* Space us
13550 65 64 20 69 6e 20 7a 4e 65 77 52 65 63 6f 72 64  ed in zNewRecord
13560 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6c 65 6e 3b  [] */.  int len;
13570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
13580 2a 20 4c 65 6e 67 74 68 20 6f 66 20 61 20 66 69  * Length of a fi
13590 65 6c 64 20 2a 2f 0a 0a 20 20 2f 2a 20 41 73 73  eld */..  /* Ass
135a0 75 6d 69 6e 67 20 74 68 65 20 72 65 63 6f 72 64  uming the record
135b0 20 63 6f 6e 74 61 69 6e 73 20 4e 20 66 69 65 6c   contains N fiel
135c0 64 73 2c 20 74 68 65 20 72 65 63 6f 72 64 20 66  ds, the record f
135d0 6f 72 6d 61 74 20 6c 6f 6f 6b 73 0a 20 20 2a 2a  ormat looks.  **
135e0 20 6c 69 6b 65 20 74 68 69 73 3a 0a 20 20 2a 2a   like this:.  **
135f0 0a 20 20 2a 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  .  ** ----------
13600 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13610 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13620 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13630 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20  --------------. 
13640 20 2a 2a 20 7c 20 68 64 72 2d 73 69 7a 65 20 7c   ** | hdr-size |
13650 20 74 79 70 65 20 30 20 7c 20 74 79 70 65 20 31   type 0 | type 1
13660 20 7c 20 2e 2e 2e 20 7c 20 74 79 70 65 20 4e 2d   | ... | type N-
13670 31 20 7c 20 64 61 74 61 30 20 7c 20 2e 2e 2e 20  1 | data0 | ... 
13680 7c 20 64 61 74 61 20 4e 2d 31 20 7c 20 0a 20 20  | data N-1 | .  
13690 2a 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ** -------------
136a0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
136b0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
136c0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
136d0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2a  -----------.  **
136e0 0a 20 20 2a 2a 20 44 61 74 61 28 30 29 20 69 73  .  ** Data(0) is
136f0 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69   taken from regi
13700 73 74 65 72 20 50 31 2e 20 20 44 61 74 61 28 31  ster P1.  Data(1
13710 29 20 63 6f 6d 65 73 20 66 72 6f 6d 20 72 65 67  ) comes from reg
13720 69 73 74 65 72 20 50 31 2b 31 0a 20 20 2a 2a 20  ister P1+1.  ** 
13730 61 6e 64 20 73 6f 20 66 72 6f 74 68 2e 0a 20 20  and so froth..  
13740 2a 2a 0a 20 20 2a 2a 20 45 61 63 68 20 74 79 70  **.  ** Each typ
13750 65 20 66 69 65 6c 64 20 69 73 20 61 20 76 61 72  e field is a var
13760 69 6e 74 20 72 65 70 72 65 73 65 6e 74 69 6e 67  int representing
13770 20 74 68 65 20 73 65 72 69 61 6c 20 74 79 70 65   the serial type
13780 20 6f 66 20 74 68 65 20 0a 20 20 2a 2a 20 63 6f   of the .  ** co
13790 72 72 65 73 70 6f 6e 64 69 6e 67 20 64 61 74 61  rresponding data
137a0 20 65 6c 65 6d 65 6e 74 20 28 73 65 65 20 73 71   element (see sq
137b0 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 54  lite3VdbeSerialT
137c0 79 70 65 28 29 29 2e 20 54 68 65 0a 20 20 2a 2a  ype()). The.  **
137d0 20 68 64 72 2d 73 69 7a 65 20 66 69 65 6c 64 20   hdr-size field 
137e0 69 73 20 61 6c 73 6f 20 61 20 76 61 72 69 6e 74  is also a varint
137f0 20 77 68 69 63 68 20 69 73 20 74 68 65 20 6f 66   which is the of
13800 66 73 65 74 20 66 72 6f 6d 20 74 68 65 20 62 65  fset from the be
13810 67 69 6e 6e 69 6e 67 0a 20 20 2a 2a 20 6f 66 20  ginning.  ** of 
13820 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20 64 61  the record to da
13830 74 61 30 2e 0a 20 20 2a 2f 0a 20 20 6e 44 61 74  ta0..  */.  nDat
13840 61 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 2f  a = 0;         /
13850 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  * Number of byte
13860 73 20 6f 66 20 64 61 74 61 20 73 70 61 63 65 20  s of data space 
13870 2a 2f 0a 20 20 6e 48 64 72 20 3d 20 30 3b 20 20  */.  nHdr = 0;  
13880 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
13890 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20 68 65  r of bytes of he
138a0 61 64 65 72 20 73 70 61 63 65 20 2a 2f 0a 20 20  ader space */.  
138b0 6e 42 79 74 65 20 3d 20 30 3b 20 20 20 20 20 20  nByte = 0;      
138c0 20 20 20 2f 2a 20 44 61 74 61 20 73 70 61 63 65     /* Data space
138d0 20 72 65 71 75 69 72 65 64 20 66 6f 72 20 74 68   required for th
138e0 69 73 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 6e  is record */.  n
138f0 5a 65 72 6f 20 3d 20 30 3b 20 20 20 20 20 20 20  Zero = 0;       
13900 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 7a    /* Number of z
13910 65 72 6f 20 62 79 74 65 73 20 61 74 20 74 68 65  ero bytes at the
13920 20 65 6e 64 20 6f 66 20 74 68 65 20 72 65 63 6f   end of the reco
13930 72 64 20 2a 2f 0a 20 20 6e 46 69 65 6c 64 20 3d  rd */.  nField =
13940 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 7a 41 66 66   pOp->p1;.  zAff
13950 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70 34 2e  inity = pOp->p4.
13960 7a 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 46 69  z;.  assert( nFi
13970 65 6c 64 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32  eld>0 && pOp->p2
13980 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 6e 46  >0 && pOp->p2+nF
13990 69 65 6c 64 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31 20  ield<=p->nMem+1 
139a0 29 3b 0a 20 20 70 44 61 74 61 30 20 3d 20 26 61  );.  pData0 = &a
139b0 4d 65 6d 5b 6e 46 69 65 6c 64 5d 3b 0a 20 20 6e  Mem[nField];.  n
139c0 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 32 3b  Field = pOp->p2;
139d0 0a 20 20 70 4c 61 73 74 20 3d 20 26 70 44 61 74  .  pLast = &pDat
139e0 61 30 5b 6e 46 69 65 6c 64 2d 31 5d 3b 0a 20 20  a0[nField-1];.  
139f0 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3d 20 70 2d  file_format = p-
13a00 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65 46 6f 72  >minWriteFileFor
13a10 6d 61 74 3b 0a 0a 20 20 2f 2a 20 49 64 65 6e 74  mat;..  /* Ident
13a20 69 66 79 20 74 68 65 20 6f 75 74 70 75 74 20 72  ify the output r
13a30 65 67 69 73 74 65 72 20 2a 2f 0a 20 20 61 73 73  egister */.  ass
13a40 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 70 4f 70  ert( pOp->p3<pOp
13a50 2d 3e 70 31 20 7c 7c 20 70 4f 70 2d 3e 70 33 3e  ->p1 || pOp->p3>
13a60 3d 70 4f 70 2d 3e 70 31 2b 70 4f 70 2d 3e 70 32  =pOp->p1+pOp->p2
13a70 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d   );.  pOut = &aM
13a80 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d  em[pOp->p3];.  m
13a90 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
13aa0 70 2c 20 70 4f 75 74 29 3b 0a 0a 20 20 2f 2a 20  p, pOut);..  /* 
13ab0 4c 6f 6f 70 20 74 68 72 6f 75 67 68 20 74 68 65  Loop through the
13ac0 20 65 6c 65 6d 65 6e 74 73 20 74 68 61 74 20 77   elements that w
13ad0 69 6c 6c 20 6d 61 6b 65 20 75 70 20 74 68 65 20  ill make up the 
13ae0 72 65 63 6f 72 64 20 74 6f 20 66 69 67 75 72 65  record to figure
13af0 0a 20 20 2a 2a 20 6f 75 74 20 68 6f 77 20 6d 75  .  ** out how mu
13b00 63 68 20 73 70 61 63 65 20 69 73 20 72 65 71 75  ch space is requ
13b10 69 72 65 64 20 66 6f 72 20 74 68 65 20 6e 65 77  ired for the new
13b20 20 72 65 63 6f 72 64 2e 0a 20 20 2a 2f 0a 20 20   record..  */.  
13b30 66 6f 72 28 70 52 65 63 3d 70 44 61 74 61 30 3b  for(pRec=pData0;
13b40 20 70 52 65 63 3c 3d 70 4c 61 73 74 3b 20 70 52   pRec<=pLast; pR
13b50 65 63 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72  ec++){.    asser
13b60 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 52  t( memIsValid(pR
13b70 65 63 29 20 29 3b 0a 20 20 20 20 69 66 28 20 7a  ec) );.    if( z
13b80 41 66 66 69 6e 69 74 79 20 29 7b 0a 20 20 20 20  Affinity ){.    
13b90 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
13ba0 67 65 28 70 2c 20 70 52 65 63 29 3b 0a 20 20 20  ge(p, pRec);.   
13bb0 20 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79     applyAffinity
13bc0 28 70 52 65 63 2c 20 7a 41 66 66 69 6e 69 74 79  (pRec, zAffinity
13bd0 5b 70 52 65 63 2d 70 44 61 74 61 30 5d 2c 20 65  [pRec-pData0], e
13be0 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 7d 0a  ncoding);.    }.
13bf0 20 20 20 20 69 66 28 20 70 52 65 63 2d 3e 66 6c      if( pRec->fl
13c00 61 67 73 26 4d 45 4d 5f 5a 65 72 6f 20 26 26 20  ags&MEM_Zero && 
13c10 70 52 65 63 2d 3e 6e 3e 30 20 29 7b 0a 20 20 20  pRec->n>0 ){.   
13c20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
13c30 6d 45 78 70 61 6e 64 42 6c 6f 62 28 70 52 65 63  mExpandBlob(pRec
13c40 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 65 72  );.    }.    ser
13c50 69 61 6c 5f 74 79 70 65 20 3d 20 73 71 6c 69 74  ial_type = sqlit
13c60 65 33 56 64 62 65 53 65 72 69 61 6c 54 79 70 65  e3VdbeSerialType
13c70 28 70 52 65 63 2c 20 66 69 6c 65 5f 66 6f 72 6d  (pRec, file_form
13c80 61 74 29 3b 0a 20 20 20 20 6c 65 6e 20 3d 20 73  at);.    len = s
13c90 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c  qlite3VdbeSerial
13ca0 54 79 70 65 4c 65 6e 28 73 65 72 69 61 6c 5f 74  TypeLen(serial_t
13cb0 79 70 65 29 3b 0a 20 20 20 20 6e 44 61 74 61 20  ype);.    nData 
13cc0 2b 3d 20 6c 65 6e 3b 0a 20 20 20 20 6e 48 64 72  += len;.    nHdr
13cd0 20 2b 3d 20 73 71 6c 69 74 65 33 56 61 72 69 6e   += sqlite3Varin
13ce0 74 4c 65 6e 28 73 65 72 69 61 6c 5f 74 79 70 65  tLen(serial_type
13cf0 29 3b 0a 20 20 20 20 69 66 28 20 70 52 65 63 2d  );.    if( pRec-
13d00 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a 65 72  >flags & MEM_Zer
13d10 6f 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 4f 6e  o ){.      /* On
13d20 6c 79 20 70 75 72 65 20 7a 65 72 6f 2d 66 69 6c  ly pure zero-fil
13d30 6c 65 64 20 42 4c 4f 42 73 20 63 61 6e 20 62 65  led BLOBs can be
13d40 20 69 6e 70 75 74 20 74 6f 20 74 68 69 73 20 4f   input to this O
13d50 70 63 6f 64 65 2e 0a 20 20 20 20 20 20 2a 2a 20  pcode..      ** 
13d60 57 65 20 64 6f 20 6e 6f 74 20 61 6c 6c 6f 77 20  We do not allow 
13d70 62 6c 6f 62 73 20 77 69 74 68 20 61 20 70 72 65  blobs with a pre
13d80 66 69 78 20 61 6e 64 20 61 20 7a 65 72 6f 2d 66  fix and a zero-f
13d90 69 6c 6c 65 64 20 74 61 69 6c 2e 20 2a 2f 0a 20  illed tail. */. 
13da0 20 20 20 20 20 6e 5a 65 72 6f 20 2b 3d 20 70 52       nZero += pR
13db0 65 63 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a 20 20 20  ec->u.nZero;.   
13dc0 20 7d 65 6c 73 65 20 69 66 28 20 6c 65 6e 20 29   }else if( len )
13dd0 7b 0a 20 20 20 20 20 20 6e 5a 65 72 6f 20 3d 20  {.      nZero = 
13de0 30 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20  0;.    }.  }..  
13df0 2f 2a 20 41 64 64 20 74 68 65 20 69 6e 69 74 69  /* Add the initi
13e00 61 6c 20 68 65 61 64 65 72 20 76 61 72 69 6e 74  al header varint
13e10 20 61 6e 64 20 74 6f 74 61 6c 20 74 68 65 20 73   and total the s
13e20 69 7a 65 20 2a 2f 0a 20 20 6e 48 64 72 20 2b 3d  ize */.  nHdr +=
13e30 20 6e 56 61 72 69 6e 74 20 3d 20 73 71 6c 69 74   nVarint = sqlit
13e40 65 33 56 61 72 69 6e 74 4c 65 6e 28 6e 48 64 72  e3VarintLen(nHdr
13e50 29 3b 0a 20 20 69 66 28 20 6e 56 61 72 69 6e 74  );.  if( nVarint
13e60 3c 73 71 6c 69 74 65 33 56 61 72 69 6e 74 4c 65  <sqlite3VarintLe
13e70 6e 28 6e 48 64 72 29 20 29 7b 0a 20 20 20 20 6e  n(nHdr) ){.    n
13e80 48 64 72 2b 2b 3b 0a 20 20 7d 0a 20 20 6e 42 79  Hdr++;.  }.  nBy
13e90 74 65 20 3d 20 6e 48 64 72 2b 6e 44 61 74 61 2d  te = nHdr+nData-
13ea0 6e 5a 65 72 6f 3b 0a 20 20 69 66 28 20 6e 42 79  nZero;.  if( nBy
13eb0 74 65 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51  te>db->aLimit[SQ
13ec0 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54  LITE_LIMIT_LENGT
13ed0 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74  H] ){.    goto t
13ee0 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 0a 20 20 2f  oo_big;.  }..  /
13ef0 2a 20 4d 61 6b 65 20 73 75 72 65 20 74 68 65 20  * Make sure the 
13f00 6f 75 74 70 75 74 20 72 65 67 69 73 74 65 72 20  output register 
13f10 68 61 73 20 61 20 62 75 66 66 65 72 20 6c 61 72  has a buffer lar
13f20 67 65 20 65 6e 6f 75 67 68 20 74 6f 20 73 74 6f  ge enough to sto
13f30 72 65 20 0a 20 20 2a 2a 20 74 68 65 20 6e 65 77  re .  ** the new
13f40 20 72 65 63 6f 72 64 2e 20 54 68 65 20 6f 75 74   record. The out
13f50 70 75 74 20 72 65 67 69 73 74 65 72 20 28 70 4f  put register (pO
13f60 70 2d 3e 70 33 29 20 69 73 20 6e 6f 74 20 61 6c  p->p3) is not al
13f70 6c 6f 77 65 64 20 74 6f 0a 20 20 2a 2a 20 62 65  lowed to.  ** be
13f80 20 6f 6e 65 20 6f 66 20 74 68 65 20 69 6e 70 75   one of the inpu
13f90 74 20 72 65 67 69 73 74 65 72 73 20 28 62 65 63  t registers (bec
13fa0 61 75 73 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69  ause the followi
13fb0 6e 67 20 63 61 6c 6c 20 74 6f 0a 20 20 2a 2a 20  ng call to.  ** 
13fc0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 47 72  sqlite3VdbeMemGr
13fd0 6f 77 28 29 20 63 6f 75 6c 64 20 63 6c 6f 62 62  ow() could clobb
13fe0 65 72 20 74 68 65 20 76 61 6c 75 65 20 62 65 66  er the value bef
13ff0 6f 72 65 20 69 74 20 69 73 20 75 73 65 64 29 2e  ore it is used).
14000 0a 20 20 2a 2f 0a 20 20 69 66 28 20 73 71 6c 69  .  */.  if( sqli
14010 74 65 33 56 64 62 65 4d 65 6d 47 72 6f 77 28 70  te3VdbeMemGrow(p
14020 4f 75 74 2c 20 28 69 6e 74 29 6e 42 79 74 65 2c  Out, (int)nByte,
14030 20 30 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20   0) ){.    goto 
14040 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 7a 4e  no_mem;.  }.  zN
14050 65 77 52 65 63 6f 72 64 20 3d 20 28 75 38 20 2a  ewRecord = (u8 *
14060 29 70 4f 75 74 2d 3e 7a 3b 0a 0a 20 20 2f 2a 20  )pOut->z;..  /* 
14070 57 72 69 74 65 20 74 68 65 20 72 65 63 6f 72 64  Write the record
14080 20 2a 2f 0a 20 20 69 20 3d 20 70 75 74 56 61 72   */.  i = putVar
14090 69 6e 74 33 32 28 7a 4e 65 77 52 65 63 6f 72 64  int32(zNewRecord
140a0 2c 20 6e 48 64 72 29 3b 0a 20 20 66 6f 72 28 70  , nHdr);.  for(p
140b0 52 65 63 3d 70 44 61 74 61 30 3b 20 70 52 65 63  Rec=pData0; pRec
140c0 3c 3d 70 4c 61 73 74 3b 20 70 52 65 63 2b 2b 29  <=pLast; pRec++)
140d0 7b 0a 20 20 20 20 73 65 72 69 61 6c 5f 74 79 70  {.    serial_typ
140e0 65 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53  e = sqlite3VdbeS
140f0 65 72 69 61 6c 54 79 70 65 28 70 52 65 63 2c 20  erialType(pRec, 
14100 66 69 6c 65 5f 66 6f 72 6d 61 74 29 3b 0a 20 20  file_format);.  
14110 20 20 69 20 2b 3d 20 70 75 74 56 61 72 69 6e 74    i += putVarint
14120 33 32 28 26 7a 4e 65 77 52 65 63 6f 72 64 5b 69  32(&zNewRecord[i
14130 5d 2c 20 73 65 72 69 61 6c 5f 74 79 70 65 29 3b  ], serial_type);
14140 20 20 20 20 20 20 2f 2a 20 73 65 72 69 61 6c 20        /* serial 
14150 74 79 70 65 20 2a 2f 0a 20 20 7d 0a 20 20 66 6f  type */.  }.  fo
14160 72 28 70 52 65 63 3d 70 44 61 74 61 30 3b 20 70  r(pRec=pData0; p
14170 52 65 63 3c 3d 70 4c 61 73 74 3b 20 70 52 65 63  Rec<=pLast; pRec
14180 2b 2b 29 7b 20 20 2f 2a 20 73 65 72 69 61 6c 20  ++){  /* serial 
14190 64 61 74 61 20 2a 2f 0a 20 20 20 20 69 20 2b 3d  data */.    i +=
141a0 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69   sqlite3VdbeSeri
141b0 61 6c 50 75 74 28 26 7a 4e 65 77 52 65 63 6f 72  alPut(&zNewRecor
141c0 64 5b 69 5d 2c 20 28 69 6e 74 29 28 6e 42 79 74  d[i], (int)(nByt
141d0 65 2d 69 29 2c 20 70 52 65 63 2c 66 69 6c 65 5f  e-i), pRec,file_
141e0 66 6f 72 6d 61 74 29 3b 0a 20 20 7d 0a 20 20 61  format);.  }.  a
141f0 73 73 65 72 74 28 20 69 3d 3d 6e 42 79 74 65 20  ssert( i==nByte 
14200 29 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  );..  assert( pO
14210 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p3>0 && pOp->
14220 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20  p3<=p->nMem );. 
14230 20 70 4f 75 74 2d 3e 6e 20 3d 20 28 69 6e 74 29   pOut->n = (int)
14240 6e 42 79 74 65 3b 0a 20 20 70 4f 75 74 2d 3e 66  nByte;.  pOut->f
14250 6c 61 67 73 20 3d 20 4d 45 4d 5f 42 6c 6f 62 20  lags = MEM_Blob 
14260 7c 20 4d 45 4d 5f 44 79 6e 3b 0a 20 20 70 4f 75  | MEM_Dyn;.  pOu
14270 74 2d 3e 78 44 65 6c 20 3d 20 30 3b 0a 20 20 69  t->xDel = 0;.  i
14280 66 28 20 6e 5a 65 72 6f 20 29 7b 0a 20 20 20 20  f( nZero ){.    
14290 70 4f 75 74 2d 3e 75 2e 6e 5a 65 72 6f 20 3d 20  pOut->u.nZero = 
142a0 6e 5a 65 72 6f 3b 0a 20 20 20 20 70 4f 75 74 2d  nZero;.    pOut-
142b0 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 5a 65  >flags |= MEM_Ze
142c0 72 6f 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e  ro;.  }.  pOut->
142d0 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55 54 46  enc = SQLITE_UTF
142e0 38 3b 20 20 2f 2a 20 49 6e 20 63 61 73 65 20 74  8;  /* In case t
142f0 68 65 20 62 6c 6f 62 20 69 73 20 65 76 65 72 20  he blob is ever 
14300 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 74 65 78  converted to tex
14310 74 20 2a 2f 0a 20 20 52 45 47 49 53 54 45 52 5f  t */.  REGISTER_
14320 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70  TRACE(pOp->p3, p
14330 4f 75 74 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d  Out);.  UPDATE_M
14340 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74  AX_BLOBSIZE(pOut
14350 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
14360 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 75 6e 74 20  * Opcode: Count 
14370 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
14380 2a 20 53 74 6f 72 65 20 74 68 65 20 6e 75 6d 62  * Store the numb
14390 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 28 61  er of entries (a
143a0 6e 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 29  n integer value)
143b0 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 6f 72   in the table or
143c0 20 69 6e 64 65 78 20 0a 2a 2a 20 6f 70 65 6e 65   index .** opene
143d0 64 20 62 79 20 63 75 72 73 6f 72 20 50 31 20 69  d by cursor P1 i
143e0 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2f  n register P2.*/
143f0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
14400 4f 4d 49 54 5f 42 54 52 45 45 43 4f 55 4e 54 0a  OMIT_BTREECOUNT.
14410 63 61 73 65 20 4f 50 5f 43 6f 75 6e 74 3a 20 7b  case OP_Count: {
14420 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
14430 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20  -prerelease */. 
14440 20 69 36 34 20 6e 45 6e 74 72 79 3b 0a 20 20 42   i64 nEntry;.  B
14450 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a  tCursor *pCrsr;.
14460 0a 20 20 70 43 72 73 72 20 3d 20 70 2d 3e 61 70  .  pCrsr = p->ap
14470 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 70 43  Csr[pOp->p1]->pC
14480 75 72 73 6f 72 3b 0a 20 20 69 66 28 20 70 43 72  ursor;.  if( pCr
14490 73 72 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73  sr ){.    rc = s
144a0 71 6c 69 74 65 33 42 74 72 65 65 43 6f 75 6e 74  qlite3BtreeCount
144b0 28 70 43 72 73 72 2c 20 26 6e 45 6e 74 72 79 29  (pCrsr, &nEntry)
144c0 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 6e  ;.  }else{.    n
144d0 45 6e 74 72 79 20 3d 20 30 3b 0a 20 20 7d 0a 20  Entry = 0;.  }. 
144e0 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 6e 45 6e   pOut->u.i = nEn
144f0 74 72 79 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  try;.  break;.}.
14500 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64  #endif../* Opcod
14510 65 3a 20 53 61 76 65 70 6f 69 6e 74 20 50 31 20  e: Savepoint P1 
14520 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 4f  * * P4 *.**.** O
14530 70 65 6e 2c 20 72 65 6c 65 61 73 65 20 6f 72 20  pen, release or 
14540 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20 73 61 76  rollback the sav
14550 65 70 6f 69 6e 74 20 6e 61 6d 65 64 20 62 79 20  epoint named by 
14560 70 61 72 61 6d 65 74 65 72 20 50 34 2c 20 64 65  parameter P4, de
14570 70 65 6e 64 69 6e 67 0a 2a 2a 20 6f 6e 20 74 68  pending.** on th
14580 65 20 76 61 6c 75 65 20 6f 66 20 50 31 2e 20 54  e value of P1. T
14590 6f 20 6f 70 65 6e 20 61 20 6e 65 77 20 73 61 76  o open a new sav
145a0 65 70 6f 69 6e 74 2c 20 50 31 3d 3d 30 2e 20 54  epoint, P1==0. T
145b0 6f 20 72 65 6c 65 61 73 65 20 28 63 6f 6d 6d 69  o release (commi
145c0 74 29 20 61 6e 0a 2a 2a 20 65 78 69 73 74 69 6e  t) an.** existin
145d0 67 20 73 61 76 65 70 6f 69 6e 74 2c 20 50 31 3d  g savepoint, P1=
145e0 3d 31 2c 20 6f 72 20 74 6f 20 72 6f 6c 6c 62 61  =1, or to rollba
145f0 63 6b 20 61 6e 20 65 78 69 73 74 69 6e 67 20 73  ck an existing s
14600 61 76 65 70 6f 69 6e 74 20 50 31 3d 3d 32 2e 0a  avepoint P1==2..
14610 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 61 76 65 70  */.case OP_Savep
14620 6f 69 6e 74 3a 20 7b 0a 20 20 69 6e 74 20 70 31  oint: {.  int p1
14630 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
14640 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c            /* Val
14650 75 65 20 6f 66 20 50 31 20 6f 70 65 72 61 6e 64  ue of P1 operand
14660 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d   */.  char *zNam
14670 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
14680 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
14690 20 73 61 76 65 70 6f 69 6e 74 20 2a 2f 0a 20 20   savepoint */.  
146a0 69 6e 74 20 6e 4e 61 6d 65 3b 0a 20 20 53 61 76  int nName;.  Sav
146b0 65 70 6f 69 6e 74 20 2a 70 4e 65 77 3b 0a 20 20  epoint *pNew;.  
146c0 53 61 76 65 70 6f 69 6e 74 20 2a 70 53 61 76 65  Savepoint *pSave
146d0 70 6f 69 6e 74 3b 0a 20 20 53 61 76 65 70 6f 69  point;.  Savepoi
146e0 6e 74 20 2a 70 54 6d 70 3b 0a 20 20 69 6e 74 20  nt *pTmp;.  int 
146f0 69 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 69 6e  iSavepoint;.  in
14700 74 20 69 69 3b 0a 0a 20 20 70 31 20 3d 20 70 4f  t ii;..  p1 = pO
14710 70 2d 3e 70 31 3b 0a 20 20 7a 4e 61 6d 65 20 3d  p->p1;.  zName =
14720 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 0a 20 20 2f   pOp->p4.z;..  /
14730 2a 20 41 73 73 65 72 74 20 74 68 61 74 20 74 68  * Assert that th
14740 65 20 70 31 20 70 61 72 61 6d 65 74 65 72 20 69  e p1 parameter i
14750 73 20 76 61 6c 69 64 2e 20 41 6c 73 6f 20 74 68  s valid. Also th
14760 61 74 20 69 66 20 74 68 65 72 65 20 69 73 20 6e  at if there is n
14770 6f 20 6f 70 65 6e 0a 20 20 2a 2a 20 74 72 61 6e  o open.  ** tran
14780 73 61 63 74 69 6f 6e 2c 20 74 68 65 6e 20 74 68  saction, then th
14790 65 72 65 20 63 61 6e 6e 6f 74 20 62 65 20 61 6e  ere cannot be an
147a0 79 20 73 61 76 65 70 6f 69 6e 74 73 2e 20 0a 20  y savepoints. . 
147b0 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 64 62   */.  assert( db
147c0 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3d 3d 30 20  ->pSavepoint==0 
147d0 7c 7c 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69  || db->autoCommi
147e0 74 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  t==0 );.  assert
147f0 28 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f  ( p1==SAVEPOINT_
14800 42 45 47 49 4e 7c 7c 70 31 3d 3d 53 41 56 45 50  BEGIN||p1==SAVEP
14810 4f 49 4e 54 5f 52 45 4c 45 41 53 45 7c 7c 70 31  OINT_RELEASE||p1
14820 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c  ==SAVEPOINT_ROLL
14830 42 41 43 4b 20 29 3b 0a 20 20 61 73 73 65 72 74  BACK );.  assert
14840 28 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74  ( db->pSavepoint
14850 20 7c 7c 20 64 62 2d 3e 69 73 54 72 61 6e 73 61   || db->isTransa
14860 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3d 3d  ctionSavepoint==
14870 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 63  0 );.  assert( c
14880 68 65 63 6b 53 61 76 65 70 6f 69 6e 74 43 6f 75  heckSavepointCou
14890 6e 74 28 64 62 29 20 29 3b 0a 0a 20 20 69 66 28  nt(db) );..  if(
148a0 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 42   p1==SAVEPOINT_B
148b0 45 47 49 4e 20 29 7b 0a 20 20 20 20 69 66 28 20  EGIN ){.    if( 
148c0 64 62 2d 3e 77 72 69 74 65 56 64 62 65 43 6e 74  db->writeVdbeCnt
148d0 3e 30 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 41  >0 ){.      /* A
148e0 20 6e 65 77 20 73 61 76 65 70 6f 69 6e 74 20 63   new savepoint c
148f0 61 6e 6e 6f 74 20 62 65 20 63 72 65 61 74 65 64  annot be created
14900 20 69 66 20 74 68 65 72 65 20 61 72 65 20 61 63   if there are ac
14910 74 69 76 65 20 77 72 69 74 65 20 0a 20 20 20 20  tive write .    
14920 20 20 2a 2a 20 73 74 61 74 65 6d 65 6e 74 73 20    ** statements 
14930 28 69 2e 65 2e 20 6f 70 65 6e 20 72 65 61 64 2f  (i.e. open read/
14940 77 72 69 74 65 20 69 6e 63 72 65 6d 65 6e 74 61  write incrementa
14950 6c 20 62 6c 6f 62 20 68 61 6e 64 6c 65 73 29 2e  l blob handles).
14960 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20  .      */.      
14970 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67  sqlite3SetString
14980 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62  (&p->zErrMsg, db
14990 2c 20 22 63 61 6e 6e 6f 74 20 6f 70 65 6e 20 73  , "cannot open s
149a0 61 76 65 70 6f 69 6e 74 20 2d 20 22 0a 20 20 20  avepoint - ".   
149b0 20 20 20 20 20 22 53 51 4c 20 73 74 61 74 65 6d       "SQL statem
149c0 65 6e 74 73 20 69 6e 20 70 72 6f 67 72 65 73 73  ents in progress
149d0 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 53  ");.      rc = S
149e0 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20  QLITE_BUSY;.    
149f0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 6e 4e 61  }else{.      nNa
14a00 6d 65 20 3d 20 73 71 6c 69 74 65 33 53 74 72 6c  me = sqlite3Strl
14a10 65 6e 33 30 28 7a 4e 61 6d 65 29 3b 0a 0a 20 20  en30(zName);..  
14a20 20 20 20 20 2f 2a 20 43 72 65 61 74 65 20 61 20      /* Create a 
14a30 6e 65 77 20 73 61 76 65 70 6f 69 6e 74 20 73 74  new savepoint st
14a40 72 75 63 74 75 72 65 2e 20 2a 2f 0a 20 20 20 20  ructure. */.    
14a50 20 20 70 4e 65 77 20 3d 20 73 71 6c 69 74 65 33    pNew = sqlite3
14a60 44 62 4d 61 6c 6c 6f 63 52 61 77 28 64 62 2c 20  DbMallocRaw(db, 
14a70 73 69 7a 65 6f 66 28 53 61 76 65 70 6f 69 6e 74  sizeof(Savepoint
14a80 29 2b 6e 4e 61 6d 65 2b 31 29 3b 0a 20 20 20 20  )+nName+1);.    
14a90 20 20 69 66 28 20 70 4e 65 77 20 29 7b 0a 20 20    if( pNew ){.  
14aa0 20 20 20 20 20 20 70 4e 65 77 2d 3e 7a 4e 61 6d        pNew->zNam
14ab0 65 20 3d 20 28 63 68 61 72 20 2a 29 26 70 4e 65  e = (char *)&pNe
14ac0 77 5b 31 5d 3b 0a 20 20 20 20 20 20 20 20 6d 65  w[1];.        me
14ad0 6d 63 70 79 28 70 4e 65 77 2d 3e 7a 4e 61 6d 65  mcpy(pNew->zName
14ae0 2c 20 7a 4e 61 6d 65 2c 20 6e 4e 61 6d 65 2b 31  , zName, nName+1
14af0 29 3b 0a 20 20 20 20 0a 20 20 20 20 20 20 20 20  );.    .        
14b00 2f 2a 20 49 66 20 74 68 65 72 65 20 69 73 20 6e  /* If there is n
14b10 6f 20 6f 70 65 6e 20 74 72 61 6e 73 61 63 74 69  o open transacti
14b20 6f 6e 2c 20 74 68 65 6e 20 6d 61 72 6b 20 74 68  on, then mark th
14b30 69 73 20 61 73 20 61 20 73 70 65 63 69 61 6c 0a  is as a special.
14b40 20 20 20 20 20 20 20 20 2a 2a 20 22 74 72 61 6e          ** "tran
14b50 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e  saction savepoin
14b60 74 22 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 69  t". */.        i
14b70 66 28 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69  f( db->autoCommi
14b80 74 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 64  t ){.          d
14b90 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20  b->autoCommit = 
14ba0 30 3b 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d  0;.          db-
14bb0 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61  >isTransactionSa
14bc0 76 65 70 6f 69 6e 74 20 3d 20 31 3b 0a 20 20 20  vepoint = 1;.   
14bd0 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
14be0 20 20 20 20 20 20 64 62 2d 3e 6e 53 61 76 65 70        db->nSavep
14bf0 6f 69 6e 74 2b 2b 3b 0a 20 20 20 20 20 20 20 20  oint++;.        
14c00 7d 0a 20 20 20 20 0a 20 20 20 20 20 20 20 20 2f  }.    .        /
14c10 2a 20 4c 69 6e 6b 20 74 68 65 20 6e 65 77 20 73  * Link the new s
14c20 61 76 65 70 6f 69 6e 74 20 69 6e 74 6f 20 74 68  avepoint into th
14c30 65 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c  e database handl
14c40 65 27 73 20 6c 69 73 74 2e 20 2a 2f 0a 20 20 20  e's list. */.   
14c50 20 20 20 20 20 70 4e 65 77 2d 3e 70 4e 65 78 74       pNew->pNext
14c60 20 3d 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e   = db->pSavepoin
14c70 74 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 70  t;.        db->p
14c80 53 61 76 65 70 6f 69 6e 74 20 3d 20 70 4e 65 77  Savepoint = pNew
14c90 3b 0a 20 20 20 20 20 20 20 20 70 4e 65 77 2d 3e  ;.        pNew->
14ca0 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 20 3d 20  nDeferredCons = 
14cb0 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e  db->nDeferredCon
14cc0 73 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  s;.      }.    }
14cd0 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69 53  .  }else{.    iS
14ce0 61 76 65 70 6f 69 6e 74 20 3d 20 30 3b 0a 0a 20  avepoint = 0;.. 
14cf0 20 20 20 2f 2a 20 46 69 6e 64 20 74 68 65 20 6e     /* Find the n
14d00 61 6d 65 64 20 73 61 76 65 70 6f 69 6e 74 2e 20  amed savepoint. 
14d10 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 73  If there is no s
14d20 75 63 68 20 73 61 76 65 70 6f 69 6e 74 2c 20 74  uch savepoint, t
14d30 68 65 6e 20 61 6e 0a 20 20 20 20 2a 2a 20 61 6e  hen an.    ** an
14d40 20 65 72 72 6f 72 20 69 73 20 72 65 74 75 72 6e   error is return
14d50 65 64 20 74 6f 20 74 68 65 20 75 73 65 72 2e 20  ed to the user. 
14d60 20 2a 2f 0a 20 20 20 20 66 6f 72 28 0a 20 20 20   */.    for(.   
14d70 20 20 20 70 53 61 76 65 70 6f 69 6e 74 20 3d 20     pSavepoint = 
14d80 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b 20  db->pSavepoint; 
14d90 0a 20 20 20 20 20 20 70 53 61 76 65 70 6f 69 6e  .      pSavepoin
14da0 74 20 26 26 20 73 71 6c 69 74 65 33 53 74 72 49  t && sqlite3StrI
14db0 43 6d 70 28 70 53 61 76 65 70 6f 69 6e 74 2d 3e  Cmp(pSavepoint->
14dc0 7a 4e 61 6d 65 2c 20 7a 4e 61 6d 65 29 3b 0a 20  zName, zName);. 
14dd0 20 20 20 20 20 70 53 61 76 65 70 6f 69 6e 74 20       pSavepoint 
14de0 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 70 4e  = pSavepoint->pN
14df0 65 78 74 0a 20 20 20 20 29 7b 0a 20 20 20 20 20  ext.    ){.     
14e00 20 69 53 61 76 65 70 6f 69 6e 74 2b 2b 3b 0a 20   iSavepoint++;. 
14e10 20 20 20 7d 0a 20 20 20 20 69 66 28 20 21 70 53     }.    if( !pS
14e20 61 76 65 70 6f 69 6e 74 20 29 7b 0a 20 20 20 20  avepoint ){.    
14e30 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69    sqlite3SetStri
14e40 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20  ng(&p->zErrMsg, 
14e50 64 62 2c 20 22 6e 6f 20 73 75 63 68 20 73 61 76  db, "no such sav
14e60 65 70 6f 69 6e 74 3a 20 25 73 22 2c 20 7a 4e 61  epoint: %s", zNa
14e70 6d 65 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  me);.      rc = 
14e80 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20  SQLITE_ERROR;.  
14e90 20 20 7d 65 6c 73 65 20 69 66 28 20 0a 20 20 20    }else if( .   
14ea0 20 20 20 20 20 64 62 2d 3e 77 72 69 74 65 56 64       db->writeVd
14eb0 62 65 43 6e 74 3e 30 20 7c 7c 20 28 70 31 3d 3d  beCnt>0 || (p1==
14ec0 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41  SAVEPOINT_ROLLBA
14ed0 43 4b 20 26 26 20 64 62 2d 3e 61 63 74 69 76 65  CK && db->active
14ee0 56 64 62 65 43 6e 74 3e 31 29 20 0a 20 20 20 20  VdbeCnt>1) .    
14ef0 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 74 20 69  ){.      /* It i
14f00 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65 20 74  s not possible t
14f10 6f 20 72 65 6c 65 61 73 65 20 28 63 6f 6d 6d 69  o release (commi
14f20 74 29 20 61 20 73 61 76 65 70 6f 69 6e 74 20 69  t) a savepoint i
14f30 66 20 74 68 65 72 65 20 61 72 65 20 0a 20 20 20  f there are .   
14f40 20 20 20 2a 2a 20 61 63 74 69 76 65 20 77 72 69     ** active wri
14f50 74 65 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 49  te statements. I
14f60 74 20 69 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c  t is not possibl
14f70 65 20 74 6f 20 72 6f 6c 6c 62 61 63 6b 20 61 20  e to rollback a 
14f80 73 61 76 65 70 6f 69 6e 74 0a 20 20 20 20 20 20  savepoint.      
14f90 2a 2a 20 69 66 20 74 68 65 72 65 20 61 72 65 20  ** if there are 
14fa0 61 6e 79 20 61 63 74 69 76 65 20 73 74 61 74 65  any active state
14fb0 6d 65 6e 74 73 20 61 74 20 61 6c 6c 2e 0a 20 20  ments at all..  
14fc0 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c      */.      sql
14fd0 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70  ite3SetString(&p
14fe0 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 0a  ->zErrMsg, db, .
14ff0 20 20 20 20 20 20 20 20 22 63 61 6e 6e 6f 74 20          "cannot 
15000 25 73 20 73 61 76 65 70 6f 69 6e 74 20 2d 20 53  %s savepoint - S
15010 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e  QL statements in
15020 20 70 72 6f 67 72 65 73 73 22 2c 0a 20 20 20 20   progress",.    
15030 20 20 20 20 28 70 31 3d 3d 53 41 56 45 50 4f 49      (p1==SAVEPOI
15040 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 3f 20 22 72  NT_ROLLBACK ? "r
15050 6f 6c 6c 62 61 63 6b 22 3a 20 22 72 65 6c 65 61  ollback": "relea
15060 73 65 22 29 0a 20 20 20 20 20 20 29 3b 0a 20 20  se").      );.  
15070 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
15080 42 55 53 59 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  BUSY;.    }else{
15090 0a 0a 20 20 20 20 20 20 2f 2a 20 44 65 74 65 72  ..      /* Deter
150a0 6d 69 6e 65 20 77 68 65 74 68 65 72 20 6f 72 20  mine whether or 
150b0 6e 6f 74 20 74 68 69 73 20 69 73 20 61 20 74 72  not this is a tr
150c0 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f  ansaction savepo
150d0 69 6e 74 2e 20 49 66 20 73 6f 2c 0a 20 20 20 20  int. If so,.    
150e0 20 20 2a 2a 20 61 6e 64 20 74 68 69 73 20 69 73    ** and this is
150f0 20 61 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61   a RELEASE comma
15100 6e 64 2c 20 74 68 65 6e 20 74 68 65 20 63 75 72  nd, then the cur
15110 72 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  rent transaction
15120 20 0a 20 20 20 20 20 20 2a 2a 20 69 73 20 63 6f   .      ** is co
15130 6d 6d 69 74 74 65 64 2e 20 0a 20 20 20 20 20 20  mmitted. .      
15140 2a 2f 0a 20 20 20 20 20 20 69 6e 74 20 69 73 54  */.      int isT
15150 72 61 6e 73 61 63 74 69 6f 6e 20 3d 20 70 53 61  ransaction = pSa
15160 76 65 70 6f 69 6e 74 2d 3e 70 4e 65 78 74 3d 3d  vepoint->pNext==
15170 30 20 26 26 20 64 62 2d 3e 69 73 54 72 61 6e 73  0 && db->isTrans
15180 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3b  actionSavepoint;
15190 0a 20 20 20 20 20 20 69 66 28 20 69 73 54 72 61  .      if( isTra
151a0 6e 73 61 63 74 69 6f 6e 20 26 26 20 70 31 3d 3d  nsaction && p1==
151b0 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53  SAVEPOINT_RELEAS
151c0 45 20 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28  E ){.        if(
151d0 20 28 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64   (rc = sqlite3Vd
151e0 62 65 43 68 65 63 6b 46 6b 28 70 2c 20 31 29 29  beCheckFk(p, 1))
151f0 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
15200 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20 76 64           goto vd
15210 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 20  be_return;.     
15220 20 20 20 7d 0a 20 20 20 20 20 20 20 20 64 62 2d     }.        db-
15230 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 31 3b  >autoCommit = 1;
15240 0a 20 20 20 20 20 20 20 20 69 66 28 20 73 71 6c  .        if( sql
15250 69 74 65 33 56 64 62 65 48 61 6c 74 28 70 29 3d  ite3VdbeHalt(p)=
15260 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a  =SQLITE_BUSY ){.
15270 20 20 20 20 20 20 20 20 20 20 70 2d 3e 70 63 20            p->pc 
15280 3d 20 70 63 3b 0a 20 20 20 20 20 20 20 20 20 20  = pc;.          
15290 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d  db->autoCommit =
152a0 20 30 3b 0a 20 20 20 20 20 20 20 20 20 20 70 2d   0;.          p-
152b0 3e 72 63 20 3d 20 72 63 20 3d 20 53 51 4c 49 54  >rc = rc = SQLIT
152c0 45 5f 42 55 53 59 3b 0a 20 20 20 20 20 20 20 20  E_BUSY;.        
152d0 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75    goto vdbe_retu
152e0 72 6e 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  rn;.        }.  
152f0 20 20 20 20 20 20 64 62 2d 3e 69 73 54 72 61 6e        db->isTran
15300 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74  sactionSavepoint
15310 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 72 63   = 0;.        rc
15320 20 3d 20 70 2d 3e 72 63 3b 0a 20 20 20 20 20 20   = p->rc;.      
15330 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 69  }else{.        i
15340 53 61 76 65 70 6f 69 6e 74 20 3d 20 64 62 2d 3e  Savepoint = db->
15350 6e 53 61 76 65 70 6f 69 6e 74 20 2d 20 69 53 61  nSavepoint - iSa
15360 76 65 70 6f 69 6e 74 20 2d 20 31 3b 0a 20 20 20  vepoint - 1;.   
15370 20 20 20 20 20 66 6f 72 28 69 69 3d 30 3b 20 69       for(ii=0; i
15380 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 69 2b 2b 29  i<db->nDb; ii++)
15390 7b 0a 20 20 20 20 20 20 20 20 20 20 72 63 20 3d  {.          rc =
153a0 20 73 71 6c 69 74 65 33 42 74 72 65 65 53 61 76   sqlite3BtreeSav
153b0 65 70 6f 69 6e 74 28 64 62 2d 3e 61 44 62 5b 69  epoint(db->aDb[i
153c0 69 5d 2e 70 42 74 2c 20 70 31 2c 20 69 53 61 76  i].pBt, p1, iSav
153d0 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20 20  epoint);.       
153e0 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
153f0 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20  E_OK ){.        
15400 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
15410 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
15420 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
15430 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20 70   }.        if( p
15440 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c  1==SAVEPOINT_ROL
15450 4c 42 41 43 4b 20 26 26 20 28 64 62 2d 3e 66 6c  LBACK && (db->fl
15460 61 67 73 26 53 51 4c 49 54 45 5f 49 6e 74 65 72  ags&SQLITE_Inter
15470 6e 43 68 61 6e 67 65 73 29 21 3d 30 20 29 7b 0a  nChanges)!=0 ){.
15480 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
15490 33 45 78 70 69 72 65 50 72 65 70 61 72 65 64 53  3ExpirePreparedS
154a0 74 61 74 65 6d 65 6e 74 73 28 64 62 29 3b 0a 20  tatements(db);. 
154b0 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
154c0 52 65 73 65 74 49 6e 74 65 72 6e 61 6c 53 63 68  ResetInternalSch
154d0 65 6d 61 28 64 62 2c 20 30 29 3b 0a 20 20 20 20  ema(db, 0);.    
154e0 20 20 20 20 20 20 64 62 2d 3e 66 6c 61 67 73 20        db->flags 
154f0 3d 20 28 64 62 2d 3e 66 6c 61 67 73 20 7c 20 53  = (db->flags | S
15500 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68 61 6e  QLITE_InternChan
15510 67 65 73 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a  ges);.        }.
15520 20 20 20 20 20 20 7d 0a 20 20 0a 20 20 20 20 20        }.  .     
15530 20 2f 2a 20 52 65 67 61 72 64 6c 65 73 73 20 6f   /* Regardless o
15540 66 20 77 68 65 74 68 65 72 20 74 68 69 73 20 69  f whether this i
15550 73 20 61 20 52 45 4c 45 41 53 45 20 6f 72 20 52  s a RELEASE or R
15560 4f 4c 4c 42 41 43 4b 2c 20 64 65 73 74 72 6f 79  OLLBACK, destroy
15570 20 61 6c 6c 20 0a 20 20 20 20 20 20 2a 2a 20 73   all .      ** s
15580 61 76 65 70 6f 69 6e 74 73 20 6e 65 73 74 65 64  avepoints nested
15590 20 69 6e 73 69 64 65 20 6f 66 20 74 68 65 20 73   inside of the s
155a0 61 76 65 70 6f 69 6e 74 20 62 65 69 6e 67 20 6f  avepoint being o
155b0 70 65 72 61 74 65 64 20 6f 6e 2e 20 2a 2f 0a 20  perated on. */. 
155c0 20 20 20 20 20 77 68 69 6c 65 28 20 64 62 2d 3e       while( db->
155d0 70 53 61 76 65 70 6f 69 6e 74 21 3d 70 53 61 76  pSavepoint!=pSav
155e0 65 70 6f 69 6e 74 20 29 7b 0a 20 20 20 20 20 20  epoint ){.      
155f0 20 20 70 54 6d 70 20 3d 20 64 62 2d 3e 70 53 61    pTmp = db->pSa
15600 76 65 70 6f 69 6e 74 3b 0a 20 20 20 20 20 20 20  vepoint;.       
15610 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20   db->pSavepoint 
15620 3d 20 70 54 6d 70 2d 3e 70 4e 65 78 74 3b 0a 20  = pTmp->pNext;. 
15630 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 62         sqlite3Db
15640 46 72 65 65 28 64 62 2c 20 70 54 6d 70 29 3b 0a  Free(db, pTmp);.
15650 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53 61 76          db->nSav
15660 65 70 6f 69 6e 74 2d 2d 3b 0a 20 20 20 20 20 20  epoint--;.      
15670 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 69  }..      /* If i
15680 74 20 69 73 20 61 20 52 45 4c 45 41 53 45 2c 20  t is a RELEASE, 
15690 74 68 65 6e 20 64 65 73 74 72 6f 79 20 74 68 65  then destroy the
156a0 20 73 61 76 65 70 6f 69 6e 74 20 62 65 69 6e 67   savepoint being
156b0 20 6f 70 65 72 61 74 65 64 20 6f 6e 20 0a 20 20   operated on .  
156c0 20 20 20 20 2a 2a 20 74 6f 6f 2e 20 49 66 20 69      ** too. If i
156d0 74 20 69 73 20 61 20 52 4f 4c 4c 42 41 43 4b 20  t is a ROLLBACK 
156e0 54 4f 2c 20 74 68 65 6e 20 73 65 74 20 74 68 65  TO, then set the
156f0 20 6e 75 6d 62 65 72 20 6f 66 20 64 65 66 65 72   number of defer
15700 72 65 64 20 0a 20 20 20 20 20 20 2a 2a 20 63 6f  red .      ** co
15710 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69  nstraint violati
15720 6f 6e 73 20 70 72 65 73 65 6e 74 20 69 6e 20 74  ons present in t
15730 68 65 20 64 61 74 61 62 61 73 65 20 74 6f 20 74  he database to t
15740 68 65 20 76 61 6c 75 65 20 73 74 6f 72 65 64 0a  he value stored.
15750 20 20 20 20 20 20 2a 2a 20 77 68 65 6e 20 74 68        ** when th
15760 65 20 73 61 76 65 70 6f 69 6e 74 20 77 61 73 20  e savepoint was 
15770 63 72 65 61 74 65 64 2e 20 20 2a 2f 0a 20 20 20  created.  */.   
15780 20 20 20 69 66 28 20 70 31 3d 3d 53 41 56 45 50     if( p1==SAVEP
15790 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20 29 7b 0a  OINT_RELEASE ){.
157a0 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
157b0 70 53 61 76 65 70 6f 69 6e 74 3d 3d 64 62 2d 3e  pSavepoint==db->
157c0 70 53 61 76 65 70 6f 69 6e 74 20 29 3b 0a 20 20  pSavepoint );.  
157d0 20 20 20 20 20 20 64 62 2d 3e 70 53 61 76 65 70        db->pSavep
157e0 6f 69 6e 74 20 3d 20 70 53 61 76 65 70 6f 69 6e  oint = pSavepoin
157f0 74 2d 3e 70 4e 65 78 74 3b 0a 20 20 20 20 20 20  t->pNext;.      
15800 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28    sqlite3DbFree(
15810 64 62 2c 20 70 53 61 76 65 70 6f 69 6e 74 29 3b  db, pSavepoint);
15820 0a 20 20 20 20 20 20 20 20 69 66 28 20 21 69 73  .        if( !is
15830 54 72 61 6e 73 61 63 74 69 6f 6e 20 29 7b 0a 20  Transaction ){. 
15840 20 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53 61           db->nSa
15850 76 65 70 6f 69 6e 74 2d 2d 3b 0a 20 20 20 20 20  vepoint--;.     
15860 20 20 20 7d 0a 20 20 20 20 20 20 7d 65 6c 73 65     }.      }else
15870 7b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 44  {.        db->nD
15880 65 66 65 72 72 65 64 43 6f 6e 73 20 3d 20 70 53  eferredCons = pS
15890 61 76 65 70 6f 69 6e 74 2d 3e 6e 44 65 66 65 72  avepoint->nDefer
158a0 72 65 64 43 6f 6e 73 3b 0a 20 20 20 20 20 20 7d  redCons;.      }
158b0 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 62 72  .    }.  }..  br
158c0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
158d0 65 3a 20 41 75 74 6f 43 6f 6d 6d 69 74 20 50 31  e: AutoCommit P1
158e0 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
158f0 53 65 74 20 74 68 65 20 64 61 74 61 62 61 73 65  Set the database
15900 20 61 75 74 6f 2d 63 6f 6d 6d 69 74 20 66 6c 61   auto-commit fla
15910 67 20 74 6f 20 50 31 20 28 31 20 6f 72 20 30 29  g to P1 (1 or 0)
15920 2e 20 49 66 20 50 32 20 69 73 20 74 72 75 65 2c  . If P2 is true,
15930 20 72 6f 6c 6c 0a 2a 2a 20 62 61 63 6b 20 61 6e   roll.** back an
15940 79 20 63 75 72 72 65 6e 74 6c 79 20 61 63 74 69  y currently acti
15950 76 65 20 62 74 72 65 65 20 74 72 61 6e 73 61 63  ve btree transac
15960 74 69 6f 6e 73 2e 20 49 66 20 74 68 65 72 65 20  tions. If there 
15970 61 72 65 20 61 6e 79 20 61 63 74 69 76 65 0a 2a  are any active.*
15980 2a 20 56 4d 73 20 28 61 70 61 72 74 20 66 72 6f  * VMs (apart fro
15990 6d 20 74 68 69 73 20 6f 6e 65 29 2c 20 74 68 65  m this one), the
159a0 6e 20 61 20 52 4f 4c 4c 42 41 43 4b 20 66 61 69  n a ROLLBACK fai
159b0 6c 73 2e 20 20 41 20 43 4f 4d 4d 49 54 20 66 61  ls.  A COMMIT fa
159c0 69 6c 73 20 69 66 0a 2a 2a 20 74 68 65 72 65 20  ils if.** there 
159d0 61 72 65 20 61 63 74 69 76 65 20 77 72 69 74 69  are active writi
159e0 6e 67 20 56 4d 73 20 6f 72 20 61 63 74 69 76 65  ng VMs or active
159f0 20 56 4d 73 20 74 68 61 74 20 75 73 65 20 73 68   VMs that use sh
15a00 61 72 65 64 20 63 61 63 68 65 2e 0a 2a 2a 0a 2a  ared cache..**.*
15a10 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69  * This instructi
15a20 6f 6e 20 63 61 75 73 65 73 20 74 68 65 20 56 4d  on causes the VM
15a30 20 74 6f 20 68 61 6c 74 2e 0a 2a 2f 0a 63 61 73   to halt..*/.cas
15a40 65 20 4f 50 5f 41 75 74 6f 43 6f 6d 6d 69 74 3a  e OP_AutoCommit:
15a50 20 7b 0a 20 20 69 6e 74 20 64 65 73 69 72 65 64   {.  int desired
15a60 41 75 74 6f 43 6f 6d 6d 69 74 3b 0a 20 20 69 6e  AutoCommit;.  in
15a70 74 20 69 52 6f 6c 6c 62 61 63 6b 3b 0a 20 20 69  t iRollback;.  i
15a80 6e 74 20 74 75 72 6e 4f 6e 41 43 3b 0a 0a 20 20  nt turnOnAC;..  
15a90 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69  desiredAutoCommi
15aa0 74 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 69  t = pOp->p1;.  i
15ab0 52 6f 6c 6c 62 61 63 6b 20 3d 20 70 4f 70 2d 3e  Rollback = pOp->
15ac0 70 32 3b 0a 20 20 74 75 72 6e 4f 6e 41 43 20 3d  p2;.  turnOnAC =
15ad0 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d   desiredAutoComm
15ae0 69 74 20 26 26 20 21 64 62 2d 3e 61 75 74 6f 43  it && !db->autoC
15af0 6f 6d 6d 69 74 3b 0a 20 20 61 73 73 65 72 74 28  ommit;.  assert(
15b00 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d   desiredAutoComm
15b10 69 74 3d 3d 31 20 7c 7c 20 64 65 73 69 72 65 64  it==1 || desired
15b20 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 29 3b  AutoCommit==0 );
15b30 0a 20 20 61 73 73 65 72 74 28 20 64 65 73 69 72  .  assert( desir
15b40 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20  edAutoCommit==1 
15b50 7c 7c 20 69 52 6f 6c 6c 62 61 63 6b 3d 3d 30 20  || iRollback==0 
15b60 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d  );.  assert( db-
15b70 3e 61 63 74 69 76 65 56 64 62 65 43 6e 74 3e 30  >activeVdbeCnt>0
15b80 20 29 3b 20 20 2f 2a 20 41 74 20 6c 65 61 73 74   );  /* At least
15b90 20 74 68 69 73 20 6f 6e 65 20 56 4d 20 69 73 20   this one VM is 
15ba0 61 63 74 69 76 65 20 2a 2f 0a 0a 20 20 69 66 28  active */..  if(
15bb0 20 74 75 72 6e 4f 6e 41 43 20 26 26 20 69 52 6f   turnOnAC && iRo
15bc0 6c 6c 62 61 63 6b 20 26 26 20 64 62 2d 3e 61 63  llback && db->ac
15bd0 74 69 76 65 56 64 62 65 43 6e 74 3e 31 20 29 7b  tiveVdbeCnt>1 ){
15be0 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 69 73 20  .    /* If this 
15bf0 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 6d 70 6c  instruction impl
15c00 65 6d 65 6e 74 73 20 61 20 52 4f 4c 4c 42 41 43  ements a ROLLBAC
15c10 4b 20 61 6e 64 20 6f 74 68 65 72 20 56 4d 73 20  K and other VMs 
15c20 61 72 65 0a 20 20 20 20 2a 2a 20 73 74 69 6c 6c  are.    ** still
15c30 20 72 75 6e 6e 69 6e 67 2c 20 61 6e 64 20 61 20   running, and a 
15c40 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 61  transaction is a
15c50 63 74 69 76 65 2c 20 72 65 74 75 72 6e 20 61 6e  ctive, return an
15c60 20 65 72 72 6f 72 20 69 6e 64 69 63 61 74 69 6e   error indicatin
15c70 67 0a 20 20 20 20 2a 2a 20 74 68 61 74 20 74 68  g.    ** that th
15c80 65 20 6f 74 68 65 72 20 56 4d 73 20 6d 75 73 74  e other VMs must
15c90 20 63 6f 6d 70 6c 65 74 65 20 66 69 72 73 74 2e   complete first.
15ca0 20 0a 20 20 20 20 2a 2f 0a 20 20 20 20 73 71 6c   .    */.    sql
15cb0 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70  ite3SetString(&p
15cc0 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22  ->zErrMsg, db, "
15cd0 63 61 6e 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 20  cannot rollback 
15ce0 74 72 61 6e 73 61 63 74 69 6f 6e 20 2d 20 22 0a  transaction - ".
15cf0 20 20 20 20 20 20 20 20 22 53 51 4c 20 73 74 61          "SQL sta
15d00 74 65 6d 65 6e 74 73 20 69 6e 20 70 72 6f 67 72  tements in progr
15d10 65 73 73 22 29 3b 0a 20 20 20 20 72 63 20 3d 20  ess");.    rc = 
15d20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 7d  SQLITE_BUSY;.  }
15d30 65 6c 73 65 20 69 66 28 20 74 75 72 6e 4f 6e 41  else if( turnOnA
15d40 43 20 26 26 20 21 69 52 6f 6c 6c 62 61 63 6b 20  C && !iRollback 
15d50 26 26 20 64 62 2d 3e 77 72 69 74 65 56 64 62 65  && db->writeVdbe
15d60 43 6e 74 3e 30 20 29 7b 0a 20 20 20 20 2f 2a 20  Cnt>0 ){.    /* 
15d70 49 66 20 74 68 69 73 20 69 6e 73 74 72 75 63 74  If this instruct
15d80 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 73 20 61  ion implements a
15d90 20 43 4f 4d 4d 49 54 20 61 6e 64 20 6f 74 68 65   COMMIT and othe
15da0 72 20 56 4d 73 20 61 72 65 20 77 72 69 74 69 6e  r VMs are writin
15db0 67 0a 20 20 20 20 2a 2a 20 72 65 74 75 72 6e 20  g.    ** return 
15dc0 61 6e 20 65 72 72 6f 72 20 69 6e 64 69 63 61 74  an error indicat
15dd0 69 6e 67 20 74 68 61 74 20 74 68 65 20 6f 74 68  ing that the oth
15de0 65 72 20 56 4d 73 20 6d 75 73 74 20 63 6f 6d 70  er VMs must comp
15df0 6c 65 74 65 20 66 69 72 73 74 2e 20 0a 20 20 20  lete first. .   
15e00 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 53   */.    sqlite3S
15e10 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72  etString(&p->zEr
15e20 72 4d 73 67 2c 20 64 62 2c 20 22 63 61 6e 6e 6f  rMsg, db, "canno
15e30 74 20 63 6f 6d 6d 69 74 20 74 72 61 6e 73 61 63  t commit transac
15e40 74 69 6f 6e 20 2d 20 22 0a 20 20 20 20 20 20 20  tion - ".       
15e50 20 22 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73   "SQL statements
15e60 20 69 6e 20 70 72 6f 67 72 65 73 73 22 29 3b 0a   in progress");.
15e70 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
15e80 42 55 53 59 3b 0a 20 20 7d 65 6c 73 65 20 69 66  BUSY;.  }else if
15e90 28 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d  ( desiredAutoCom
15ea0 6d 69 74 21 3d 64 62 2d 3e 61 75 74 6f 43 6f 6d  mit!=db->autoCom
15eb0 6d 69 74 20 29 7b 0a 20 20 20 20 69 66 28 20 69  mit ){.    if( i
15ec0 52 6f 6c 6c 62 61 63 6b 20 29 7b 0a 20 20 20 20  Rollback ){.    
15ed0 20 20 61 73 73 65 72 74 28 20 64 65 73 69 72 65    assert( desire
15ee0 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20 29  dAutoCommit==1 )
15ef0 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 52  ;.      sqlite3R
15f00 6f 6c 6c 62 61 63 6b 41 6c 6c 28 64 62 29 3b 0a  ollbackAll(db);.
15f10 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f        db->autoCo
15f20 6d 6d 69 74 20 3d 20 31 3b 0a 20 20 20 20 7d 65  mmit = 1;.    }e
15f30 6c 73 65 20 69 66 28 20 28 72 63 20 3d 20 73 71  lse if( (rc = sq
15f40 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b 46 6b  lite3VdbeCheckFk
15f50 28 70 2c 20 31 29 29 21 3d 53 51 4c 49 54 45 5f  (p, 1))!=SQLITE_
15f60 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f  OK ){.      goto
15f70 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20   vdbe_return;.  
15f80 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 64    }else{.      d
15f90 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20  b->autoCommit = 
15fa0 28 75 38 29 64 65 73 69 72 65 64 41 75 74 6f 43  (u8)desiredAutoC
15fb0 6f 6d 6d 69 74 3b 0a 20 20 20 20 20 20 69 66 28  ommit;.      if(
15fc0 20 73 71 6c 69 74 65 33 56 64 62 65 48 61 6c 74   sqlite3VdbeHalt
15fd0 28 70 29 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59  (p)==SQLITE_BUSY
15fe0 20 29 7b 0a 20 20 20 20 20 20 20 20 70 2d 3e 70   ){.        p->p
15ff0 63 20 3d 20 70 63 3b 0a 20 20 20 20 20 20 20 20  c = pc;.        
16000 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d  db->autoCommit =
16010 20 28 75 38 29 28 31 2d 64 65 73 69 72 65 64 41   (u8)(1-desiredA
16020 75 74 6f 43 6f 6d 6d 69 74 29 3b 0a 20 20 20 20  utoCommit);.    
16030 20 20 20 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d      p->rc = rc =
16040 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20   SQLITE_BUSY;.  
16050 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f        goto vdbe_
16060 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 7d 0a  return;.      }.
16070 20 20 20 20 7d 0a 20 20 20 20 61 73 73 65 72 74      }.    assert
16080 28 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74  ( db->nStatement
16090 3d 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c 69 74  ==0 );.    sqlit
160a0 65 33 43 6c 6f 73 65 53 61 76 65 70 6f 69 6e 74  e3CloseSavepoint
160b0 73 28 64 62 29 3b 0a 20 20 20 20 69 66 28 20 70  s(db);.    if( p
160c0 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ->rc==SQLITE_OK 
160d0 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51  ){.      rc = SQ
160e0 4c 49 54 45 5f 44 4f 4e 45 3b 0a 20 20 20 20 7d  LITE_DONE;.    }
160f0 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 63 20 3d  else{.      rc =
16100 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20   SQLITE_ERROR;. 
16110 20 20 20 7d 0a 20 20 20 20 67 6f 74 6f 20 76 64     }.    goto vd
16120 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 7d 65 6c  be_return;.  }el
16130 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 53  se{.    sqlite3S
16140 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72  etString(&p->zEr
16150 72 4d 73 67 2c 20 64 62 2c 0a 20 20 20 20 20 20  rMsg, db,.      
16160 20 20 28 21 64 65 73 69 72 65 64 41 75 74 6f 43    (!desiredAutoC
16170 6f 6d 6d 69 74 29 3f 22 63 61 6e 6e 6f 74 20 73  ommit)?"cannot s
16180 74 61 72 74 20 61 20 74 72 61 6e 73 61 63 74 69  tart a transacti
16190 6f 6e 20 77 69 74 68 69 6e 20 61 20 74 72 61 6e  on within a tran
161a0 73 61 63 74 69 6f 6e 22 3a 28 0a 20 20 20 20 20  saction":(.     
161b0 20 20 20 28 69 52 6f 6c 6c 62 61 63 6b 29 3f 22     (iRollback)?"
161c0 63 61 6e 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 20  cannot rollback 
161d0 2d 20 6e 6f 20 74 72 61 6e 73 61 63 74 69 6f 6e  - no transaction
161e0 20 69 73 20 61 63 74 69 76 65 22 3a 0a 20 20 20   is active":.   
161f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16200 22 63 61 6e 6e 6f 74 20 63 6f 6d 6d 69 74 20 2d  "cannot commit -
16210 20 6e 6f 20 74 72 61 6e 73 61 63 74 69 6f 6e 20   no transaction 
16220 69 73 20 61 63 74 69 76 65 22 29 29 3b 0a 20 20  is active"));.  
16230 20 20 20 20 20 20 20 0a 20 20 20 20 72 63 20 3d         .    rc =
16240 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20   SQLITE_ERROR;. 
16250 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
16260 2a 20 4f 70 63 6f 64 65 3a 20 54 72 61 6e 73 61  * Opcode: Transa
16270 63 74 69 6f 6e 20 50 31 20 50 32 20 2a 20 2a 20  ction P1 P2 * * 
16280 2a 0a 2a 2a 0a 2a 2a 20 42 65 67 69 6e 20 61 20  *.**.** Begin a 
16290 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 54 68  transaction.  Th
162a0 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 65 6e  e transaction en
162b0 64 73 20 77 68 65 6e 20 61 20 43 6f 6d 6d 69 74  ds when a Commit
162c0 20 6f 72 20 52 6f 6c 6c 62 61 63 6b 0a 2a 2a 20   or Rollback.** 
162d0 6f 70 63 6f 64 65 20 69 73 20 65 6e 63 6f 75 6e  opcode is encoun
162e0 74 65 72 65 64 2e 20 20 44 65 70 65 6e 64 69 6e  tered.  Dependin
162f0 67 20 6f 6e 20 74 68 65 20 4f 4e 20 43 4f 4e 46  g on the ON CONF
16300 4c 49 43 54 20 73 65 74 74 69 6e 67 2c 20 74 68  LICT setting, th
16310 65 0a 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e  e.** transaction
16320 20 6d 69 67 68 74 20 61 6c 73 6f 20 62 65 20 72   might also be r
16330 6f 6c 6c 65 64 20 62 61 63 6b 20 69 66 20 61 6e  olled back if an
16340 20 65 72 72 6f 72 20 69 73 20 65 6e 63 6f 75 6e   error is encoun
16350 74 65 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 50 31 20  tered..**.** P1 
16360 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20  is the index of 
16370 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
16380 65 20 6f 6e 20 77 68 69 63 68 20 74 68 65 20 74  e on which the t
16390 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 0a 2a 2a  ransaction is.**
163a0 20 73 74 61 72 74 65 64 2e 20 20 49 6e 64 65 78   started.  Index
163b0 20 30 20 69 73 20 74 68 65 20 6d 61 69 6e 20 64   0 is the main d
163c0 61 74 61 62 61 73 65 20 66 69 6c 65 20 61 6e 64  atabase file and
163d0 20 69 6e 64 65 78 20 31 20 69 73 20 74 68 65 0a   index 1 is the.
163e0 2a 2a 20 66 69 6c 65 20 75 73 65 64 20 66 6f 72  ** file used for
163f0 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65   temporary table
16400 73 2e 20 20 49 6e 64 69 63 65 73 20 6f 66 20 32  s.  Indices of 2
16410 20 6f 72 20 6d 6f 72 65 20 61 72 65 20 75 73 65   or more are use
16420 64 20 66 6f 72 0a 2a 2a 20 61 74 74 61 63 68 65  d for.** attache
16430 64 20 64 61 74 61 62 61 73 65 73 2e 0a 2a 2a 0a  d databases..**.
16440 2a 2a 20 49 66 20 50 32 20 69 73 20 6e 6f 6e 2d  ** If P2 is non-
16450 7a 65 72 6f 2c 20 74 68 65 6e 20 61 20 77 72 69  zero, then a wri
16460 74 65 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  te-transaction i
16470 73 20 73 74 61 72 74 65 64 2e 20 20 41 20 52 45  s started.  A RE
16480 53 45 52 56 45 44 20 6c 6f 63 6b 20 69 73 0a 2a  SERVED lock is.*
16490 2a 20 6f 62 74 61 69 6e 65 64 20 6f 6e 20 74 68  * obtained on th
164a0 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
164b0 77 68 65 6e 20 61 20 77 72 69 74 65 2d 74 72 61  when a write-tra
164c0 6e 73 61 63 74 69 6f 6e 20 69 73 20 73 74 61 72  nsaction is star
164d0 74 65 64 2e 20 20 4e 6f 0a 2a 2a 20 6f 74 68 65  ted.  No.** othe
164e0 72 20 70 72 6f 63 65 73 73 20 63 61 6e 20 73 74  r process can st
164f0 61 72 74 20 61 6e 6f 74 68 65 72 20 77 72 69 74  art another writ
16500 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 77 68  e transaction wh
16510 69 6c 65 20 74 68 69 73 20 74 72 61 6e 73 61 63  ile this transac
16520 74 69 6f 6e 20 69 73 0a 2a 2a 20 75 6e 64 65 72  tion is.** under
16530 77 61 79 2e 20 20 53 74 61 72 74 69 6e 67 20 61  way.  Starting a
16540 20 77 72 69 74 65 20 74 72 61 6e 73 61 63 74 69   write transacti
16550 6f 6e 20 61 6c 73 6f 20 63 72 65 61 74 65 73 20  on also creates 
16560 61 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e  a rollback journ
16570 61 6c 2e 20 41 0a 2a 2a 20 77 72 69 74 65 20 74  al. A.** write t
16580 72 61 6e 73 61 63 74 69 6f 6e 20 6d 75 73 74 20  ransaction must 
16590 62 65 20 73 74 61 72 74 65 64 20 62 65 66 6f 72  be started befor
165a0 65 20 61 6e 79 20 63 68 61 6e 67 65 73 20 63 61  e any changes ca
165b0 6e 20 62 65 20 6d 61 64 65 20 74 6f 20 74 68 65  n be made to the
165c0 0a 2a 2a 20 64 61 74 61 62 61 73 65 2e 20 20 49  .** database.  I
165d0 66 20 50 32 20 69 73 20 32 20 6f 72 20 67 72 65  f P2 is 2 or gre
165e0 61 74 65 72 20 74 68 65 6e 20 61 6e 20 45 58 43  ater then an EXC
165f0 4c 55 53 49 56 45 20 6c 6f 63 6b 20 69 73 20 61  LUSIVE lock is a
16600 6c 73 6f 20 6f 62 74 61 69 6e 65 64 0a 2a 2a 20  lso obtained.** 
16610 6f 6e 20 74 68 65 20 66 69 6c 65 2e 0a 2a 2a 0a  on the file..**.
16620 2a 2a 20 49 66 20 61 20 77 72 69 74 65 2d 74 72  ** If a write-tr
16630 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 73 74 61  ansaction is sta
16640 72 74 65 64 20 61 6e 64 20 74 68 65 20 56 64 62  rted and the Vdb
16650 65 2e 75 73 65 73 53 74 6d 74 4a 6f 75 72 6e 61  e.usesStmtJourna
16660 6c 20 66 6c 61 67 20 69 73 0a 2a 2a 20 74 72 75  l flag is.** tru
16670 65 20 28 74 68 69 73 20 66 6c 61 67 20 69 73 20  e (this flag is 
16680 73 65 74 20 69 66 20 74 68 65 20 56 64 62 65 20  set if the Vdbe 
16690 6d 61 79 20 6d 6f 64 69 66 79 20 6d 6f 72 65 20  may modify more 
166a0 74 68 61 6e 20 6f 6e 65 20 72 6f 77 20 61 6e 64  than one row and
166b0 20 6d 61 79 0a 2a 2a 20 74 68 72 6f 77 20 61 6e   may.** throw an
166c0 20 41 42 4f 52 54 20 65 78 63 65 70 74 69 6f 6e   ABORT exception
166d0 29 2c 20 61 20 73 74 61 74 65 6d 65 6e 74 20 74  ), a statement t
166e0 72 61 6e 73 61 63 74 69 6f 6e 20 6d 61 79 20 61  ransaction may a
166f0 6c 73 6f 20 62 65 20 6f 70 65 6e 65 64 2e 0a 2a  lso be opened..*
16700 2a 20 4d 6f 72 65 20 73 70 65 63 69 66 69 63 61  * More specifica
16710 6c 6c 79 2c 20 61 20 73 74 61 74 65 6d 65 6e 74  lly, a statement
16720 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20   transaction is 
16730 6f 70 65 6e 65 64 20 69 66 66 20 74 68 65 20 64  opened iff the d
16740 61 74 61 62 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65  atabase.** conne
16750 63 74 69 6f 6e 20 69 73 20 63 75 72 72 65 6e 74  ction is current
16760 6c 79 20 6e 6f 74 20 69 6e 20 61 75 74 6f 63 6f  ly not in autoco
16770 6d 6d 69 74 20 6d 6f 64 65 2c 20 6f 72 20 69 66  mmit mode, or if
16780 20 74 68 65 72 65 20 61 72 65 20 6f 74 68 65 72   there are other
16790 0a 2a 2a 20 61 63 74 69 76 65 20 73 74 61 74 65  .** active state
167a0 6d 65 6e 74 73 2e 20 41 20 73 74 61 74 65 6d 65  ments. A stateme
167b0 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61  nt transaction a
167c0 6c 6c 6f 77 73 20 74 68 65 20 61 66 66 65 63 74  llows the affect
167d0 73 20 6f 66 20 74 68 69 73 0a 2a 2a 20 56 44 42  s of this.** VDB
167e0 45 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62  E to be rolled b
167f0 61 63 6b 20 61 66 74 65 72 20 61 6e 20 65 72 72  ack after an err
16800 6f 72 20 77 69 74 68 6f 75 74 20 68 61 76 69 6e  or without havin
16810 67 20 74 6f 20 72 6f 6c 6c 20 62 61 63 6b 20 74  g to roll back t
16820 68 65 0a 2a 2a 20 65 6e 74 69 72 65 20 74 72 61  he.** entire tra
16830 6e 73 61 63 74 69 6f 6e 2e 20 49 66 20 6e 6f 20  nsaction. If no 
16840 65 72 72 6f 72 20 69 73 20 65 6e 63 6f 75 6e 74  error is encount
16850 65 72 65 64 2c 20 74 68 65 20 73 74 61 74 65 6d  ered, the statem
16860 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a  ent transaction.
16870 2a 2a 20 77 69 6c 6c 20 61 75 74 6f 6d 61 74 69  ** will automati
16880 63 61 6c 6c 79 20 63 6f 6d 6d 69 74 20 77 68 65  cally commit whe
16890 6e 20 74 68 65 20 56 44 42 45 20 68 61 6c 74 73  n the VDBE halts
168a0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 32 20 69 73  ..**.** If P2 is
168b0 20 7a 65 72 6f 2c 20 74 68 65 6e 20 61 20 72 65   zero, then a re
168c0 61 64 2d 6c 6f 63 6b 20 69 73 20 6f 62 74 61 69  ad-lock is obtai
168d0 6e 65 64 20 6f 6e 20 74 68 65 20 64 61 74 61 62  ned on the datab
168e0 61 73 65 20 66 69 6c 65 2e 0a 2a 2f 0a 63 61 73  ase file..*/.cas
168f0 65 20 4f 50 5f 54 72 61 6e 73 61 63 74 69 6f 6e  e OP_Transaction
16900 3a 20 7b 0a 20 20 42 74 72 65 65 20 2a 70 42 74  : {.  Btree *pBt
16910 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
16920 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
16930 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20  p1<db->nDb );.  
16940 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65  assert( (p->btre
16950 65 4d 61 73 6b 20 26 20 28 31 3c 3c 70 4f 70 2d  eMask & (1<<pOp-
16960 3e 70 31 29 29 21 3d 30 20 29 3b 0a 20 20 70 42  >p1))!=0 );.  pB
16970 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d  t = db->aDb[pOp-
16980 3e 70 31 5d 2e 70 42 74 3b 0a 0a 20 20 69 66 28  >p1].pBt;..  if(
16990 20 70 42 74 20 29 7b 0a 20 20 20 20 72 63 20 3d   pBt ){.    rc =
169a0 20 73 71 6c 69 74 65 33 42 74 72 65 65 42 65 67   sqlite3BtreeBeg
169b0 69 6e 54 72 61 6e 73 28 70 42 74 2c 20 70 4f 70  inTrans(pBt, pOp
169c0 2d 3e 70 32 29 3b 0a 20 20 20 20 69 66 28 20 72  ->p2);.    if( r
169d0 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29  c==SQLITE_BUSY )
169e0 7b 0a 20 20 20 20 20 20 70 2d 3e 70 63 20 3d 20  {.      p->pc = 
169f0 70 63 3b 0a 20 20 20 20 20 20 70 2d 3e 72 63 20  pc;.      p->rc 
16a00 3d 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55  = rc = SQLITE_BU
16a10 53 59 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 76  SY;.      goto v
16a20 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20  dbe_return;.    
16a30 7d 0a 20 20 20 20 69 66 28 20 72 63 21 3d 53 51  }.    if( rc!=SQ
16a40 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
16a50 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
16a60 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a  to_error;.    }.
16a70 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 32  .    if( pOp->p2
16a80 20 26 26 20 70 2d 3e 75 73 65 73 53 74 6d 74 4a   && p->usesStmtJ
16a90 6f 75 72 6e 61 6c 20 0a 20 20 20 20 20 26 26 20  ournal .     && 
16aa0 28 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d  (db->autoCommit=
16ab0 3d 30 20 7c 7c 20 64 62 2d 3e 61 63 74 69 76 65  =0 || db->active
16ac0 56 64 62 65 43 6e 74 3e 31 29 20 0a 20 20 20 20  VdbeCnt>1) .    
16ad0 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ){.      assert(
16ae0 20 73 71 6c 69 74 65 33 42 74 72 65 65 49 73 49   sqlite3BtreeIsI
16af0 6e 54 72 61 6e 73 28 70 42 74 29 20 29 3b 0a 20  nTrans(pBt) );. 
16b00 20 20 20 20 20 69 66 28 20 70 2d 3e 69 53 74 61       if( p->iSta
16b10 74 65 6d 65 6e 74 3d 3d 30 20 29 7b 0a 20 20 20  tement==0 ){.   
16b20 20 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d       assert( db-
16b30 3e 6e 53 74 61 74 65 6d 65 6e 74 3e 3d 30 20 26  >nStatement>=0 &
16b40 26 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74  & db->nSavepoint
16b50 3e 3d 30 20 29 3b 0a 20 20 20 20 20 20 20 20 64  >=0 );.        d
16b60 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 2b 2b 3b  b->nStatement++;
16b70 20 0a 20 20 20 20 20 20 20 20 70 2d 3e 69 53 74   .        p->iSt
16b80 61 74 65 6d 65 6e 74 20 3d 20 64 62 2d 3e 6e 53  atement = db->nS
16b90 61 76 65 70 6f 69 6e 74 20 2b 20 64 62 2d 3e 6e  avepoint + db->n
16ba0 53 74 61 74 65 6d 65 6e 74 3b 0a 20 20 20 20 20  Statement;.     
16bb0 20 7d 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71   }.      rc = sq
16bc0 6c 69 74 65 33 42 74 72 65 65 42 65 67 69 6e 53  lite3BtreeBeginS
16bd0 74 6d 74 28 70 42 74 2c 20 70 2d 3e 69 53 74 61  tmt(pBt, p->iSta
16be0 74 65 6d 65 6e 74 29 3b 0a 0a 20 20 20 20 20 20  tement);..      
16bf0 2f 2a 20 53 74 6f 72 65 20 74 68 65 20 63 75 72  /* Store the cur
16c00 72 65 6e 74 20 76 61 6c 75 65 20 6f 66 20 74 68  rent value of th
16c10 65 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c  e database handl
16c20 65 73 20 64 65 66 65 72 72 65 64 20 63 6f 6e 73  es deferred cons
16c30 74 72 61 69 6e 74 0a 20 20 20 20 20 20 2a 2a 20  traint.      ** 
16c40 63 6f 75 6e 74 65 72 2e 20 49 66 20 74 68 65 20  counter. If the 
16c50 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61  statement transa
16c60 63 74 69 6f 6e 20 6e 65 65 64 73 20 74 6f 20 62  ction needs to b
16c70 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2c 0a 20  e rolled back,. 
16c80 20 20 20 20 20 2a 2a 20 74 68 65 20 76 61 6c 75       ** the valu
16c90 65 20 6f 66 20 74 68 69 73 20 63 6f 75 6e 74 65  e of this counte
16ca0 72 20 6e 65 65 64 73 20 74 6f 20 62 65 20 72 65  r needs to be re
16cb0 73 74 6f 72 65 64 20 74 6f 6f 2e 20 20 2a 2f 0a  stored too.  */.
16cc0 20 20 20 20 20 20 70 2d 3e 6e 53 74 6d 74 44 65        p->nStmtDe
16cd0 66 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66  fCons = db->nDef
16ce0 65 72 72 65 64 43 6f 6e 73 3b 0a 20 20 20 20 7d  erredCons;.    }
16cf0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
16d00 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 61 64  ./* Opcode: Read
16d10 43 6f 6f 6b 69 65 20 50 31 20 50 32 20 50 33 20  Cookie P1 P2 P3 
16d20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 63  * *.**.** Read c
16d30 6f 6f 6b 69 65 20 6e 75 6d 62 65 72 20 50 33 20  ookie number P3 
16d40 66 72 6f 6d 20 64 61 74 61 62 61 73 65 20 50 31  from database P1
16d50 20 61 6e 64 20 77 72 69 74 65 20 69 74 20 69 6e   and write it in
16d60 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  to register P2..
16d70 2a 2a 20 50 33 3d 3d 31 20 69 73 20 74 68 65 20  ** P3==1 is the 
16d80 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e 2e 20  schema version. 
16d90 20 50 33 3d 3d 32 20 69 73 20 74 68 65 20 64 61   P3==2 is the da
16da0 74 61 62 61 73 65 20 66 6f 72 6d 61 74 2e 0a 2a  tabase format..*
16db0 2a 20 50 33 3d 3d 33 20 69 73 20 74 68 65 20 72  * P3==3 is the r
16dc0 65 63 6f 6d 6d 65 6e 64 65 64 20 70 61 67 65 72  ecommended pager
16dd0 20 63 61 63 68 65 20 73 69 7a 65 2c 20 61 6e 64   cache size, and
16de0 20 73 6f 20 66 6f 72 74 68 2e 20 20 50 31 3d 3d   so forth.  P1==
16df0 30 20 69 73 0a 2a 2a 20 74 68 65 20 6d 61 69 6e  0 is.** the main
16e00 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 61   database file a
16e10 6e 64 20 50 31 3d 3d 31 20 69 73 20 74 68 65 20  nd P1==1 is the 
16e20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 75 73  database file us
16e30 65 64 20 74 6f 20 73 74 6f 72 65 0a 2a 2a 20 74  ed to store.** t
16e40 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e  emporary tables.
16e50 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 6d 75 73  .**.** There mus
16e60 74 20 62 65 20 61 20 72 65 61 64 2d 6c 6f 63 6b  t be a read-lock
16e70 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   on the database
16e80 20 28 65 69 74 68 65 72 20 61 20 74 72 61 6e 73   (either a trans
16e90 61 63 74 69 6f 6e 0a 2a 2a 20 6d 75 73 74 20 62  action.** must b
16ea0 65 20 73 74 61 72 74 65 64 20 6f 72 20 74 68 65  e started or the
16eb0 72 65 20 6d 75 73 74 20 62 65 20 61 6e 20 6f 70  re must be an op
16ec0 65 6e 20 63 75 72 73 6f 72 29 20 62 65 66 6f 72  en cursor) befor
16ed0 65 0a 2a 2a 20 65 78 65 63 75 74 69 6e 67 20 74  e.** executing t
16ee0 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  his instruction.
16ef0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 61 64  .*/.case OP_Read
16f00 43 6f 6f 6b 69 65 3a 20 7b 20 20 20 20 20 20 20  Cookie: {       
16f10 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d          /* out2-
16f20 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20  prerelease */.  
16f30 69 6e 74 20 69 4d 65 74 61 3b 0a 20 20 69 6e 74  int iMeta;.  int
16f40 20 69 44 62 3b 0a 20 20 69 6e 74 20 69 43 6f 6f   iDb;.  int iCoo
16f50 6b 69 65 3b 0a 0a 20 20 69 44 62 20 3d 20 70 4f  kie;..  iDb = pO
16f60 70 2d 3e 70 31 3b 0a 20 20 69 43 6f 6f 6b 69 65  p->p1;.  iCookie
16f70 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73   = pOp->p3;.  as
16f80 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 53 51  sert( pOp->p3<SQ
16f90 4c 49 54 45 5f 4e 5f 42 54 52 45 45 5f 4d 45 54  LITE_N_BTREE_MET
16fa0 41 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69  A );.  assert( i
16fb0 44 62 3e 3d 30 20 26 26 20 69 44 62 3c 64 62 2d  Db>=0 && iDb<db-
16fc0 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74  >nDb );.  assert
16fd0 28 20 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70  ( db->aDb[iDb].p
16fe0 42 74 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  Bt!=0 );.  asser
16ff0 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b  t( (p->btreeMask
17000 20 26 20 28 31 3c 3c 69 44 62 29 29 21 3d 30 20   & (1<<iDb))!=0 
17010 29 3b 0a 0a 20 20 73 71 6c 69 74 65 33 42 74 72  );..  sqlite3Btr
17020 65 65 47 65 74 4d 65 74 61 28 64 62 2d 3e 61 44  eeGetMeta(db->aD
17030 62 5b 69 44 62 5d 2e 70 42 74 2c 20 69 43 6f 6f  b[iDb].pBt, iCoo
17040 6b 69 65 2c 20 28 75 33 32 20 2a 29 26 69 4d 65  kie, (u32 *)&iMe
17050 74 61 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69  ta);.  pOut->u.i
17060 20 3d 20 69 4d 65 74 61 3b 0a 20 20 62 72 65 61   = iMeta;.  brea
17070 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
17080 20 53 65 74 43 6f 6f 6b 69 65 20 50 31 20 50 32   SetCookie P1 P2
17090 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72   P3 * *.**.** Wr
170a0 69 74 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  ite the content 
170b0 6f 66 20 72 65 67 69 73 74 65 72 20 50 33 20 28  of register P3 (
170c0 69 6e 74 65 72 70 72 65 74 65 64 20 61 73 20 61  interpreted as a
170d0 6e 20 69 6e 74 65 67 65 72 29 0a 2a 2a 20 69 6e  n integer).** in
170e0 74 6f 20 63 6f 6f 6b 69 65 20 6e 75 6d 62 65 72  to cookie number
170f0 20 50 32 20 6f 66 20 64 61 74 61 62 61 73 65 20   P2 of database 
17100 50 31 2e 20 20 50 32 3d 3d 31 20 69 73 20 74 68  P1.  P2==1 is th
17110 65 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e  e schema version
17120 2e 20 20 0a 2a 2a 20 50 32 3d 3d 32 20 69 73 20  .  .** P2==2 is 
17130 74 68 65 20 64 61 74 61 62 61 73 65 20 66 6f 72  the database for
17140 6d 61 74 2e 20 50 32 3d 3d 33 20 69 73 20 74 68  mat. P2==3 is th
17150 65 20 72 65 63 6f 6d 6d 65 6e 64 65 64 20 70 61  e recommended pa
17160 67 65 72 20 63 61 63 68 65 20 0a 2a 2a 20 73 69  ger cache .** si
17170 7a 65 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68  ze, and so forth
17180 2e 20 20 50 31 3d 3d 30 20 69 73 20 74 68 65 20  .  P1==0 is the 
17190 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69  main database fi
171a0 6c 65 20 61 6e 64 20 50 31 3d 3d 31 20 69 73 20  le and P1==1 is 
171b0 74 68 65 20 0a 2a 2a 20 64 61 74 61 62 61 73 65  the .** database
171c0 20 66 69 6c 65 20 75 73 65 64 20 74 6f 20 73 74   file used to st
171d0 6f 72 65 20 74 65 6d 70 6f 72 61 72 79 20 74 61  ore temporary ta
171e0 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 41 20 74 72  bles..**.** A tr
171f0 61 6e 73 61 63 74 69 6f 6e 20 6d 75 73 74 20 62  ansaction must b
17200 65 20 73 74 61 72 74 65 64 20 62 65 66 6f 72 65  e started before
17210 20 65 78 65 63 75 74 69 6e 67 20 74 68 69 73 20   executing this 
17220 6f 70 63 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65 20  opcode..*/.case 
17230 4f 50 5f 53 65 74 43 6f 6f 6b 69 65 3a 20 7b 20  OP_SetCookie: { 
17240 20 20 20 20 20 20 2f 2a 20 69 6e 33 20 2a 2f 0a        /* in3 */.
17250 20 20 44 62 20 2a 70 44 62 3b 0a 20 20 61 73 73    Db *pDb;.  ass
17260 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 53 51 4c  ert( pOp->p2<SQL
17270 49 54 45 5f 4e 5f 42 54 52 45 45 5f 4d 45 54 41  ITE_N_BTREE_META
17280 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
17290 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
172a0 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20  >p1<db->nDb );. 
172b0 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72   assert( (p->btr
172c0 65 65 4d 61 73 6b 20 26 20 28 31 3c 3c 70 4f 70  eeMask & (1<<pOp
172d0 2d 3e 70 31 29 29 21 3d 30 20 29 3b 0a 20 20 70  ->p1))!=0 );.  p
172e0 44 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b 70 4f  Db = &db->aDb[pO
172f0 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
17300 28 20 70 44 62 2d 3e 70 42 74 21 3d 30 20 29 3b  ( pDb->pBt!=0 );
17310 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b  .  pIn3 = &aMem[
17320 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 73 71 6c 69  pOp->p3];.  sqli
17330 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65  te3VdbeMemIntege
17340 72 69 66 79 28 70 49 6e 33 29 3b 0a 20 20 2f 2a  rify(pIn3);.  /*
17350 20 53 65 65 20 6e 6f 74 65 20 61 62 6f 75 74 20   See note about 
17360 69 6e 64 65 78 20 73 68 69 66 74 69 6e 67 20 6f  index shifting o
17370 6e 20 4f 50 5f 52 65 61 64 43 6f 6f 6b 69 65 20  n OP_ReadCookie 
17380 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  */.  rc = sqlite
17390 33 42 74 72 65 65 55 70 64 61 74 65 4d 65 74 61  3BtreeUpdateMeta
173a0 28 70 44 62 2d 3e 70 42 74 2c 20 70 4f 70 2d 3e  (pDb->pBt, pOp->
173b0 70 32 2c 20 28 69 6e 74 29 70 49 6e 33 2d 3e 75  p2, (int)pIn3->u
173c0 2e 69 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e  .i);.  if( pOp->
173d0 70 32 3d 3d 42 54 52 45 45 5f 53 43 48 45 4d 41  p2==BTREE_SCHEMA
173e0 5f 56 45 52 53 49 4f 4e 20 29 7b 0a 20 20 20 20  _VERSION ){.    
173f0 2f 2a 20 57 68 65 6e 20 74 68 65 20 73 63 68 65  /* When the sche
17400 6d 61 20 63 6f 6f 6b 69 65 20 63 68 61 6e 67 65  ma cookie change
17410 73 2c 20 72 65 63 6f 72 64 20 74 68 65 20 6e 65  s, record the ne
17420 77 20 63 6f 6f 6b 69 65 20 69 6e 74 65 72 6e 61  w cookie interna
17430 6c 6c 79 20 2a 2f 0a 20 20 20 20 70 44 62 2d 3e  lly */.    pDb->
17440 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 5f  pSchema->schema_
17450 63 6f 6f 6b 69 65 20 3d 20 28 69 6e 74 29 70 49  cookie = (int)pI
17460 6e 33 2d 3e 75 2e 69 3b 0a 20 20 20 20 64 62 2d  n3->u.i;.    db-
17470 3e 66 6c 61 67 73 20 7c 3d 20 53 51 4c 49 54 45  >flags |= SQLITE
17480 5f 49 6e 74 65 72 6e 43 68 61 6e 67 65 73 3b 0a  _InternChanges;.
17490 20 20 7d 65 6c 73 65 20 69 66 28 20 70 4f 70 2d    }else if( pOp-
174a0 3e 70 32 3d 3d 42 54 52 45 45 5f 46 49 4c 45 5f  >p2==BTREE_FILE_
174b0 46 4f 52 4d 41 54 20 29 7b 0a 20 20 20 20 2f 2a  FORMAT ){.    /*
174c0 20 52 65 63 6f 72 64 20 63 68 61 6e 67 65 73 20   Record changes 
174d0 69 6e 20 74 68 65 20 66 69 6c 65 20 66 6f 72 6d  in the file form
174e0 61 74 20 2a 2f 0a 20 20 20 20 70 44 62 2d 3e 70  at */.    pDb->p
174f0 53 63 68 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72  Schema->file_for
17500 6d 61 74 20 3d 20 28 75 38 29 70 49 6e 33 2d 3e  mat = (u8)pIn3->
17510 75 2e 69 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70  u.i;.  }.  if( p
17520 4f 70 2d 3e 70 31 3d 3d 31 20 29 7b 0a 20 20 20  Op->p1==1 ){.   
17530 20 2f 2a 20 49 6e 76 61 6c 69 64 61 74 65 20 61   /* Invalidate a
17540 6c 6c 20 70 72 65 70 61 72 65 64 20 73 74 61 74  ll prepared stat
17550 65 6d 65 6e 74 73 20 77 68 65 6e 65 76 65 72 20  ements whenever 
17560 74 68 65 20 54 45 4d 50 20 64 61 74 61 62 61 73  the TEMP databas
17570 65 0a 20 20 20 20 2a 2a 20 73 63 68 65 6d 61 20  e.    ** schema 
17580 69 73 20 63 68 61 6e 67 65 64 2e 20 20 54 69 63  is changed.  Tic
17590 6b 65 74 20 23 31 36 34 34 20 2a 2f 0a 20 20 20  ket #1644 */.   
175a0 20 73 71 6c 69 74 65 33 45 78 70 69 72 65 50 72   sqlite3ExpirePr
175b0 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73  eparedStatements
175c0 28 64 62 29 3b 0a 20 20 20 20 70 2d 3e 65 78 70  (db);.    p->exp
175d0 69 72 65 64 20 3d 20 30 3b 0a 20 20 7d 0a 20 20  ired = 0;.  }.  
175e0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
175f0 6f 64 65 3a 20 56 65 72 69 66 79 43 6f 6f 6b 69  ode: VerifyCooki
17600 65 20 50 31 20 50 32 20 2a 0a 2a 2a 0a 2a 2a 20  e P1 P2 *.**.** 
17610 43 68 65 63 6b 20 74 68 65 20 76 61 6c 75 65 20  Check the value 
17620 6f 66 20 67 6c 6f 62 61 6c 20 64 61 74 61 62 61  of global databa
17630 73 65 20 70 61 72 61 6d 65 74 65 72 20 6e 75 6d  se parameter num
17640 62 65 72 20 30 20 28 74 68 65 0a 2a 2a 20 73 63  ber 0 (the.** sc
17650 68 65 6d 61 20 76 65 72 73 69 6f 6e 29 20 61 6e  hema version) an
17660 64 20 6d 61 6b 65 20 73 75 72 65 20 69 74 20 69  d make sure it i
17670 73 20 65 71 75 61 6c 20 74 6f 20 50 32 2e 20 20  s equal to P2.  
17680 0a 2a 2a 20 50 31 20 69 73 20 74 68 65 20 64 61  .** P1 is the da
17690 74 61 62 61 73 65 20 6e 75 6d 62 65 72 20 77 68  tabase number wh
176a0 69 63 68 20 69 73 20 30 20 66 6f 72 20 74 68 65  ich is 0 for the
176b0 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66   main database f
176c0 69 6c 65 0a 2a 2a 20 61 6e 64 20 31 20 66 6f 72  ile.** and 1 for
176d0 20 74 68 65 20 66 69 6c 65 20 68 6f 6c 64 69 6e   the file holdin
176e0 67 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c  g temporary tabl
176f0 65 73 20 61 6e 64 20 73 6f 6d 65 20 68 69 67 68  es and some high
17700 65 72 20 6e 75 6d 62 65 72 0a 2a 2a 20 66 6f 72  er number.** for
17710 20 61 75 78 69 6c 69 61 72 79 20 64 61 74 61 62   auxiliary datab
17720 61 73 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ases..**.** The 
17730 63 6f 6f 6b 69 65 20 63 68 61 6e 67 65 73 20 69  cookie changes i
17740 74 73 20 76 61 6c 75 65 20 77 68 65 6e 65 76 65  ts value wheneve
17750 72 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73  r the database s
17760 63 68 65 6d 61 20 63 68 61 6e 67 65 73 2e 0a 2a  chema changes..*
17770 2a 20 54 68 69 73 20 6f 70 65 72 61 74 69 6f 6e  * This operation
17780 20 69 73 20 75 73 65 64 20 74 6f 20 64 65 74 65   is used to dete
17790 63 74 20 77 68 65 6e 20 74 68 61 74 20 74 68 65  ct when that the
177a0 20 63 6f 6f 6b 69 65 20 68 61 73 20 63 68 61 6e   cookie has chan
177b0 67 65 64 0a 2a 2a 20 61 6e 64 20 74 68 61 74 20  ged.** and that 
177c0 74 68 65 20 63 75 72 72 65 6e 74 20 70 72 6f 63  the current proc
177d0 65 73 73 20 6e 65 65 64 73 20 74 6f 20 72 65 72  ess needs to rer
177e0 65 61 64 20 74 68 65 20 73 63 68 65 6d 61 2e 0a  ead the schema..
177f0 2a 2a 0a 2a 2a 20 45 69 74 68 65 72 20 61 20 74  **.** Either a t
17800 72 61 6e 73 61 63 74 69 6f 6e 20 6e 65 65 64 73  ransaction needs
17810 20 74 6f 20 68 61 76 65 20 62 65 65 6e 20 73 74   to have been st
17820 61 72 74 65 64 20 6f 72 20 61 6e 20 4f 50 5f 4f  arted or an OP_O
17830 70 65 6e 20 6e 65 65 64 73 0a 2a 2a 20 74 6f 20  pen needs.** to 
17840 62 65 20 65 78 65 63 75 74 65 64 20 28 74 6f 20  be executed (to 
17850 65 73 74 61 62 6c 69 73 68 20 61 20 72 65 61 64  establish a read
17860 20 6c 6f 63 6b 29 20 62 65 66 6f 72 65 20 74 68   lock) before th
17870 69 73 20 6f 70 63 6f 64 65 20 69 73 0a 2a 2a 20  is opcode is.** 
17880 69 6e 76 6f 6b 65 64 2e 0a 2a 2f 0a 63 61 73 65  invoked..*/.case
17890 20 4f 50 5f 56 65 72 69 66 79 43 6f 6f 6b 69 65   OP_VerifyCookie
178a0 3a 20 7b 0a 20 20 69 6e 74 20 69 4d 65 74 61 3b  : {.  int iMeta;
178b0 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b 0a 20  .  Btree *pBt;. 
178c0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
178d0 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64  >=0 && pOp->p1<d
178e0 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65  b->nDb );.  asse
178f0 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73  rt( (p->btreeMas
17900 6b 20 26 20 28 31 3c 3c 70 4f 70 2d 3e 70 31 29  k & (1<<pOp->p1)
17910 29 21 3d 30 20 29 3b 0a 20 20 70 42 74 20 3d 20  )!=0 );.  pBt = 
17920 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d  db->aDb[pOp->p1]
17930 2e 70 42 74 3b 0a 20 20 69 66 28 20 70 42 74 20  .pBt;.  if( pBt 
17940 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 42 74  ){.    sqlite3Bt
17950 72 65 65 47 65 74 4d 65 74 61 28 70 42 74 2c 20  reeGetMeta(pBt, 
17960 42 54 52 45 45 5f 53 43 48 45 4d 41 5f 56 45 52  BTREE_SCHEMA_VER
17970 53 49 4f 4e 2c 20 28 75 33 32 20 2a 29 26 69 4d  SION, (u32 *)&iM
17980 65 74 61 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  eta);.  }else{. 
17990 20 20 20 69 4d 65 74 61 20 3d 20 30 3b 0a 20 20     iMeta = 0;.  
179a0 7d 0a 20 20 69 66 28 20 69 4d 65 74 61 21 3d 70  }.  if( iMeta!=p
179b0 4f 70 2d 3e 70 32 20 29 7b 0a 20 20 20 20 73 71  Op->p2 ){.    sq
179c0 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20  lite3DbFree(db, 
179d0 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20  p->zErrMsg);.   
179e0 20 70 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 73 71   p->zErrMsg = sq
179f0 6c 69 74 65 33 44 62 53 74 72 44 75 70 28 64 62  lite3DbStrDup(db
17a00 2c 20 22 64 61 74 61 62 61 73 65 20 73 63 68 65  , "database sche
17a10 6d 61 20 68 61 73 20 63 68 61 6e 67 65 64 22 29  ma has changed")
17a20 3b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20  ;.    /* If the 
17a30 73 63 68 65 6d 61 2d 63 6f 6f 6b 69 65 20 66 72  schema-cookie fr
17a40 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73 65 20  om the database 
17a50 66 69 6c 65 20 6d 61 74 63 68 65 73 20 74 68 65  file matches the
17a60 20 63 6f 6f 6b 69 65 20 0a 20 20 20 20 2a 2a 20   cookie .    ** 
17a70 73 74 6f 72 65 64 20 77 69 74 68 20 74 68 65 20  stored with the 
17a80 69 6e 2d 6d 65 6d 6f 72 79 20 72 65 70 72 65 73  in-memory repres
17a90 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  entation of the 
17aa0 73 63 68 65 6d 61 2c 20 64 6f 0a 20 20 20 20 2a  schema, do.    *
17ab0 2a 20 6e 6f 74 20 72 65 6c 6f 61 64 20 74 68 65  * not reload the
17ac0 20 73 63 68 65 6d 61 20 66 72 6f 6d 20 74 68 65   schema from the
17ad0 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a   database file..
17ae0 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 49 66      **.    ** If
17af0 20 76 69 72 74 75 61 6c 2d 74 61 62 6c 65 73 20   virtual-tables 
17b00 61 72 65 20 69 6e 20 75 73 65 2c 20 74 68 69 73  are in use, this
17b10 20 69 73 20 6e 6f 74 20 6a 75 73 74 20 61 6e 20   is not just an 
17b20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 2e 0a 20 20  optimization..  
17b30 20 20 2a 2a 20 4f 66 74 65 6e 2c 20 76 2d 74 61    ** Often, v-ta
17b40 62 6c 65 73 20 73 74 6f 72 65 20 74 68 65 69 72  bles store their
17b50 20 64 61 74 61 20 69 6e 20 6f 74 68 65 72 20 53   data in other S
17b60 51 4c 69 74 65 20 74 61 62 6c 65 73 2c 20 77 68  QLite tables, wh
17b70 69 63 68 0a 20 20 20 20 2a 2a 20 61 72 65 20 71  ich.    ** are q
17b80 75 65 72 69 65 64 20 66 72 6f 6d 20 77 69 74 68  ueried from with
17b90 69 6e 20 78 4e 65 78 74 28 29 20 61 6e 64 20 6f  in xNext() and o
17ba0 74 68 65 72 20 76 2d 74 61 62 6c 65 20 6d 65 74  ther v-table met
17bb0 68 6f 64 73 20 75 73 69 6e 67 0a 20 20 20 20 2a  hods using.    *
17bc0 2a 20 70 72 65 70 61 72 65 64 20 71 75 65 72 69  * prepared queri
17bd0 65 73 2e 20 49 66 20 73 75 63 68 20 61 20 71 75  es. If such a qu
17be0 65 72 79 20 69 73 20 6f 75 74 2d 6f 66 2d 64 61  ery is out-of-da
17bf0 74 65 2c 20 77 65 20 64 6f 20 6e 6f 74 20 77 61  te, we do not wa
17c00 6e 74 20 74 6f 0a 20 20 20 20 2a 2a 20 64 69 73  nt to.    ** dis
17c10 63 61 72 64 20 74 68 65 20 64 61 74 61 62 61 73  card the databas
17c20 65 20 73 63 68 65 6d 61 2c 20 61 73 20 74 68 65  e schema, as the
17c30 20 75 73 65 72 20 63 6f 64 65 20 69 6d 70 6c 65   user code imple
17c40 6d 65 6e 74 69 6e 67 20 74 68 65 0a 20 20 20 20  menting the.    
17c50 2a 2a 20 76 2d 74 61 62 6c 65 20 77 6f 75 6c 64  ** v-table would
17c60 20 68 61 76 65 20 74 6f 20 62 65 20 72 65 61 64   have to be read
17c70 79 20 66 6f 72 20 74 68 65 20 73 71 6c 69 74 65  y for the sqlite
17c80 33 5f 76 74 61 62 20 73 74 72 75 63 74 75 72 65  3_vtab structure
17c90 20 69 74 73 65 6c 66 0a 20 20 20 20 2a 2a 20 74   itself.    ** t
17ca0 6f 20 62 65 20 69 6e 76 61 6c 69 64 61 74 65 64  o be invalidated
17cb0 20 77 68 65 6e 65 76 65 72 20 73 71 6c 69 74 65   whenever sqlite
17cc0 33 5f 73 74 65 70 28 29 20 69 73 20 63 61 6c 6c  3_step() is call
17cd0 65 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 0a  ed from within .
17ce0 20 20 20 20 2a 2a 20 61 20 76 2d 74 61 62 6c 65      ** a v-table
17cf0 20 6d 65 74 68 6f 64 2e 0a 20 20 20 20 2a 2f 0a   method..    */.
17d00 20 20 20 20 69 66 28 20 64 62 2d 3e 61 44 62 5b      if( db->aDb[
17d10 70 4f 70 2d 3e 70 31 5d 2e 70 53 63 68 65 6d 61  pOp->p1].pSchema
17d20 2d 3e 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 21  ->schema_cookie!
17d30 3d 69 4d 65 74 61 20 29 7b 0a 20 20 20 20 20 20  =iMeta ){.      
17d40 73 71 6c 69 74 65 33 52 65 73 65 74 49 6e 74 65  sqlite3ResetInte
17d50 72 6e 61 6c 53 63 68 65 6d 61 28 64 62 2c 20 70  rnalSchema(db, p
17d60 4f 70 2d 3e 70 31 29 3b 0a 20 20 20 20 7d 0a 0a  Op->p1);.    }..
17d70 20 20 20 20 73 71 6c 69 74 65 33 45 78 70 69 72      sqlite3Expir
17d80 65 50 72 65 70 61 72 65 64 53 74 61 74 65 6d 65  ePreparedStateme
17d90 6e 74 73 28 64 62 29 3b 0a 20 20 20 20 72 63 20  nts(db);.    rc 
17da0 3d 20 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 3b  = SQLITE_SCHEMA;
17db0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
17dc0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e  ./* Opcode: Open
17dd0 52 65 61 64 20 50 31 20 50 32 20 50 33 20 50 34  Read P1 P2 P3 P4
17de0 20 50 35 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61   P5.**.** Open a
17df0 20 72 65 61 64 2d 6f 6e 6c 79 20 63 75 72 73 6f   read-only curso
17e00 72 20 66 6f 72 20 74 68 65 20 64 61 74 61 62 61  r for the databa
17e10 73 65 20 74 61 62 6c 65 20 77 68 6f 73 65 20 72  se table whose r
17e20 6f 6f 74 20 70 61 67 65 20 69 73 0a 2a 2a 20 50  oot page is.** P
17e30 32 20 69 6e 20 61 20 64 61 74 61 62 61 73 65 20  2 in a database 
17e40 66 69 6c 65 2e 20 20 54 68 65 20 64 61 74 61 62  file.  The datab
17e50 61 73 65 20 66 69 6c 65 20 69 73 20 64 65 74 65  ase file is dete
17e60 72 6d 69 6e 65 64 20 62 79 20 50 33 2e 20 0a 2a  rmined by P3. .*
17e70 2a 20 50 33 3d 3d 30 20 6d 65 61 6e 73 20 74 68  * P3==0 means th
17e80 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2c  e main database,
17e90 20 50 33 3d 3d 31 20 6d 65 61 6e 73 20 74 68 65   P3==1 means the
17ea0 20 64 61 74 61 62 61 73 65 20 75 73 65 64 20 66   database used f
17eb0 6f 72 20 0a 2a 2a 20 74 65 6d 70 6f 72 61 72 79  or .** temporary
17ec0 20 74 61 62 6c 65 73 2c 20 61 6e 64 20 50 33 3e   tables, and P3>
17ed0 31 20 6d 65 61 6e 73 20 75 73 65 64 20 74 68 65  1 means used the
17ee0 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 61   corresponding a
17ef0 74 74 61 63 68 65 64 0a 2a 2a 20 64 61 74 61 62  ttached.** datab
17f00 61 73 65 2e 20 20 47 69 76 65 20 74 68 65 20 6e  ase.  Give the n
17f10 65 77 20 63 75 72 73 6f 72 20 61 6e 20 69 64 65  ew cursor an ide
17f20 6e 74 69 66 69 65 72 20 6f 66 20 50 31 2e 20 20  ntifier of P1.  
17f30 54 68 65 20 50 31 0a 2a 2a 20 76 61 6c 75 65 73  The P1.** values
17f40 20 6e 65 65 64 20 6e 6f 74 20 62 65 20 63 6f 6e   need not be con
17f50 74 69 67 75 6f 75 73 20 62 75 74 20 61 6c 6c 20  tiguous but all 
17f60 50 31 20 76 61 6c 75 65 73 20 73 68 6f 75 6c 64  P1 values should
17f70 20 62 65 20 73 6d 61 6c 6c 20 69 6e 74 65 67 65   be small intege
17f80 72 73 2e 0a 2a 2a 20 49 74 20 69 73 20 61 6e 20  rs..** It is an 
17f90 65 72 72 6f 72 20 66 6f 72 20 50 31 20 74 6f 20  error for P1 to 
17fa0 62 65 20 6e 65 67 61 74 69 76 65 2e 0a 2a 2a 0a  be negative..**.
17fb0 2a 2a 20 49 66 20 50 35 21 3d 30 20 74 68 65 6e  ** If P5!=0 then
17fc0 20 75 73 65 20 74 68 65 20 63 6f 6e 74 65 6e 74   use the content
17fd0 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 32 20   of register P2 
17fe0 61 73 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65  as the root page
17ff0 2c 20 6e 6f 74 0a 2a 2a 20 74 68 65 20 76 61 6c  , not.** the val
18000 75 65 20 6f 66 20 50 32 20 69 74 73 65 6c 66 2e  ue of P2 itself.
18010 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 77 69 6c  .**.** There wil
18020 6c 20 62 65 20 61 20 72 65 61 64 20 6c 6f 63 6b  l be a read lock
18030 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   on the database
18040 20 77 68 65 6e 65 76 65 72 20 74 68 65 72 65 20   whenever there 
18050 69 73 20 61 6e 0a 2a 2a 20 6f 70 65 6e 20 63 75  is an.** open cu
18060 72 73 6f 72 2e 20 20 49 66 20 74 68 65 20 64 61  rsor.  If the da
18070 74 61 62 61 73 65 20 77 61 73 20 75 6e 6c 6f 63  tabase was unloc
18080 6b 65 64 20 70 72 69 6f 72 20 74 6f 20 74 68 69  ked prior to thi
18090 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a  s instruction.**
180a0 20 74 68 65 6e 20 61 20 72 65 61 64 20 6c 6f 63   then a read loc
180b0 6b 20 69 73 20 61 63 71 75 69 72 65 64 20 61 73  k is acquired as
180c0 20 70 61 72 74 20 6f 66 20 74 68 69 73 20 69 6e   part of this in
180d0 73 74 72 75 63 74 69 6f 6e 2e 20 20 41 20 72 65  struction.  A re
180e0 61 64 0a 2a 2a 20 6c 6f 63 6b 20 61 6c 6c 6f 77  ad.** lock allow
180f0 73 20 6f 74 68 65 72 20 70 72 6f 63 65 73 73 65  s other processe
18100 73 20 74 6f 20 72 65 61 64 20 74 68 65 20 64 61  s to read the da
18110 74 61 62 61 73 65 20 62 75 74 20 70 72 6f 68 69  tabase but prohi
18120 62 69 74 73 0a 2a 2a 20 61 6e 79 20 6f 74 68 65  bits.** any othe
18130 72 20 70 72 6f 63 65 73 73 20 66 72 6f 6d 20 6d  r process from m
18140 6f 64 69 66 79 69 6e 67 20 74 68 65 20 64 61 74  odifying the dat
18150 61 62 61 73 65 2e 20 20 54 68 65 20 72 65 61 64  abase.  The read
18160 20 6c 6f 63 6b 20 69 73 0a 2a 2a 20 72 65 6c 65   lock is.** rele
18170 61 73 65 64 20 77 68 65 6e 20 61 6c 6c 20 63 75  ased when all cu
18180 72 73 6f 72 73 20 61 72 65 20 63 6c 6f 73 65 64  rsors are closed
18190 2e 20 20 49 66 20 74 68 69 73 20 69 6e 73 74 72  .  If this instr
181a0 75 63 74 69 6f 6e 20 61 74 74 65 6d 70 74 73 0a  uction attempts.
181b0 2a 2a 20 74 6f 20 67 65 74 20 61 20 72 65 61 64  ** to get a read
181c0 20 6c 6f 63 6b 20 62 75 74 20 66 61 69 6c 73 2c   lock but fails,
181d0 20 74 68 65 20 73 63 72 69 70 74 20 74 65 72 6d   the script term
181e0 69 6e 61 74 65 73 20 77 69 74 68 20 61 6e 0a 2a  inates with an.*
181f0 2a 20 53 51 4c 49 54 45 5f 42 55 53 59 20 65 72  * SQLITE_BUSY er
18200 72 6f 72 20 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20  ror code..**.** 
18210 54 68 65 20 50 34 20 76 61 6c 75 65 20 6d 61 79  The P4 value may
18220 20 62 65 20 65 69 74 68 65 72 20 61 6e 20 69 6e   be either an in
18230 74 65 67 65 72 20 28 50 34 5f 49 4e 54 33 32 29  teger (P4_INT32)
18240 20 6f 72 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   or a pointer to
18250 0a 2a 2a 20 61 20 4b 65 79 49 6e 66 6f 20 73 74  .** a KeyInfo st
18260 72 75 63 74 75 72 65 20 28 50 34 5f 4b 45 59 49  ructure (P4_KEYI
18270 4e 46 4f 29 2e 20 49 66 20 69 74 20 69 73 20 61  NFO). If it is a
18280 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 4b 65   pointer to a Ke
18290 79 49 6e 66 6f 20 0a 2a 2a 20 73 74 72 75 63 74  yInfo .** struct
182a0 75 72 65 2c 20 74 68 65 6e 20 73 61 69 64 20 73  ure, then said s
182b0 74 72 75 63 74 75 72 65 20 64 65 66 69 6e 65 73  tructure defines
182c0 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 61 6e 64   the content and
182d0 20 63 6f 6c 6c 61 74 69 6e 67 20 0a 2a 2a 20 73   collating .** s
182e0 65 71 75 65 6e 63 65 20 6f 66 20 74 68 65 20 69  equence of the i
182f0 6e 64 65 78 20 62 65 69 6e 67 20 6f 70 65 6e 65  ndex being opene
18300 64 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69 66  d. Otherwise, if
18310 20 50 34 20 69 73 20 61 6e 20 69 6e 74 65 67 65   P4 is an intege
18320 72 20 0a 2a 2a 20 76 61 6c 75 65 2c 20 69 74 20  r .** value, it 
18330 69 73 20 73 65 74 20 74 6f 20 74 68 65 20 6e 75  is set to the nu
18340 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
18350 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 0a 2a 2a  in the table..**
18360 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 20 4f 70 65  .** See also Ope
18370 6e 57 72 69 74 65 2e 0a 2a 2f 0a 2f 2a 20 4f 70  nWrite..*/./* Op
18380 63 6f 64 65 3a 20 4f 70 65 6e 57 72 69 74 65 20  code: OpenWrite 
18390 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
183a0 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 72 65 61 64  *.** Open a read
183b0 2f 77 72 69 74 65 20 63 75 72 73 6f 72 20 6e 61  /write cursor na
183c0 6d 65 64 20 50 31 20 6f 6e 20 74 68 65 20 74 61  med P1 on the ta
183d0 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 77 68 6f  ble or index who
183e0 73 65 20 72 6f 6f 74 0a 2a 2a 20 70 61 67 65 20  se root.** page 
183f0 69 73 20 50 32 2e 20 20 4f 72 20 69 66 20 50 35  is P2.  Or if P5
18400 21 3d 30 20 75 73 65 20 74 68 65 20 63 6f 6e 74  !=0 use the cont
18410 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20  ent of register 
18420 50 32 20 74 6f 20 66 69 6e 64 20 74 68 65 0a 2a  P2 to find the.*
18430 2a 20 72 6f 6f 74 20 70 61 67 65 2e 0a 2a 2a 0a  * root page..**.
18440 2a 2a 20 54 68 65 20 50 34 20 76 61 6c 75 65 20  ** The P4 value 
18450 6d 61 79 20 62 65 20 65 69 74 68 65 72 20 61 6e  may be either an
18460 20 69 6e 74 65 67 65 72 20 28 50 34 5f 49 4e 54   integer (P4_INT
18470 33 32 29 20 6f 72 20 61 20 70 6f 69 6e 74 65 72  32) or a pointer
18480 20 74 6f 0a 2a 2a 20 61 20 4b 65 79 49 6e 66 6f   to.** a KeyInfo
18490 20 73 74 72 75 63 74 75 72 65 20 28 50 34 5f 4b   structure (P4_K
184a0 45 59 49 4e 46 4f 29 2e 20 49 66 20 69 74 20 69  EYINFO). If it i
184b0 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  s a pointer to a
184c0 20 4b 65 79 49 6e 66 6f 20 0a 2a 2a 20 73 74 72   KeyInfo .** str
184d0 75 63 74 75 72 65 2c 20 74 68 65 6e 20 73 61 69  ucture, then sai
184e0 64 20 73 74 72 75 63 74 75 72 65 20 64 65 66 69  d structure defi
184f0 6e 65 73 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  nes the content 
18500 61 6e 64 20 63 6f 6c 6c 61 74 69 6e 67 20 0a 2a  and collating .*
18510 2a 20 73 65 71 75 65 6e 63 65 20 6f 66 20 74 68  * sequence of th
18520 65 20 69 6e 64 65 78 20 62 65 69 6e 67 20 6f 70  e index being op
18530 65 6e 65 64 2e 20 4f 74 68 65 72 77 69 73 65 2c  ened. Otherwise,
18540 20 69 66 20 50 34 20 69 73 20 61 6e 20 69 6e 74   if P4 is an int
18550 65 67 65 72 20 0a 2a 2a 20 76 61 6c 75 65 2c 20  eger .** value, 
18560 69 74 20 69 73 20 73 65 74 20 74 6f 20 74 68 65  it is set to the
18570 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   number of colum
18580 6e 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2c  ns in the table,
18590 20 6f 72 20 74 6f 20 74 68 65 0a 2a 2a 20 6c 61   or to the.** la
185a0 72 67 65 73 74 20 69 6e 64 65 78 20 6f 66 20 61  rgest index of a
185b0 6e 79 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65  ny column of the
185c0 20 74 61 62 6c 65 20 74 68 61 74 20 69 73 20 61   table that is a
185d0 63 74 75 61 6c 6c 79 20 75 73 65 64 2e 0a 2a 2a  ctually used..**
185e0 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63  .** This instruc
185f0 74 69 6f 6e 20 77 6f 72 6b 73 20 6a 75 73 74 20  tion works just 
18600 6c 69 6b 65 20 4f 70 65 6e 52 65 61 64 20 65 78  like OpenRead ex
18610 63 65 70 74 20 74 68 61 74 20 69 74 20 6f 70 65  cept that it ope
18620 6e 73 20 74 68 65 20 63 75 72 73 6f 72 0a 2a 2a  ns the cursor.**
18630 20 69 6e 20 72 65 61 64 2f 77 72 69 74 65 20 6d   in read/write m
18640 6f 64 65 2e 20 20 46 6f 72 20 61 20 67 69 76 65  ode.  For a give
18650 6e 20 74 61 62 6c 65 2c 20 74 68 65 72 65 20 63  n table, there c
18660 61 6e 20 62 65 20 6f 6e 65 20 6f 72 20 6d 6f 72  an be one or mor
18670 65 20 72 65 61 64 2d 6f 6e 6c 79 0a 2a 2a 20 63  e read-only.** c
18680 75 72 73 6f 72 73 20 6f 72 20 61 20 73 69 6e 67  ursors or a sing
18690 6c 65 20 72 65 61 64 2f 77 72 69 74 65 20 63 75  le read/write cu
186a0 72 73 6f 72 20 62 75 74 20 6e 6f 74 20 62 6f 74  rsor but not bot
186b0 68 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  h..**.** See als
186c0 6f 20 4f 70 65 6e 52 65 61 64 2e 0a 2a 2f 0a 63  o OpenRead..*/.c
186d0 61 73 65 20 4f 50 5f 4f 70 65 6e 52 65 61 64 3a  ase OP_OpenRead:
186e0 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 57 72 69  .case OP_OpenWri
186f0 74 65 3a 20 7b 0a 20 20 69 6e 74 20 6e 46 69 65  te: {.  int nFie
18700 6c 64 3b 0a 20 20 4b 65 79 49 6e 66 6f 20 2a 70  ld;.  KeyInfo *p
18710 4b 65 79 49 6e 66 6f 3b 0a 20 20 69 6e 74 20 70  KeyInfo;.  int p
18720 32 3b 0a 20 20 69 6e 74 20 69 44 62 3b 0a 20 20  2;.  int iDb;.  
18730 69 6e 74 20 77 72 46 6c 61 67 3b 0a 20 20 42 74  int wrFlag;.  Bt
18740 72 65 65 20 2a 70 58 3b 0a 20 20 56 64 62 65 43  ree *pX;.  VdbeC
18750 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a 20 20 44  ursor *pCur;.  D
18760 62 20 2a 70 44 62 3b 0a 0a 20 20 69 66 28 20 70  b *pDb;..  if( p
18770 2d 3e 65 78 70 69 72 65 64 20 29 7b 0a 20 20 20  ->expired ){.   
18780 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 41 42 4f   rc = SQLITE_ABO
18790 52 54 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20  RT;.    break;. 
187a0 20 7d 0a 0a 20 20 6e 46 69 65 6c 64 20 3d 20 30   }..  nField = 0
187b0 3b 0a 20 20 70 4b 65 79 49 6e 66 6f 20 3d 20 30  ;.  pKeyInfo = 0
187c0 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32  ;.  p2 = pOp->p2
187d0 3b 0a 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70  ;.  iDb = pOp->p
187e0 33 3b 0a 20 20 61 73 73 65 72 74 28 20 69 44 62  3;.  assert( iDb
187f0 3e 3d 30 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e  >=0 && iDb<db->n
18800 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  Db );.  assert( 
18810 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20  (p->btreeMask & 
18820 28 31 3c 3c 69 44 62 29 29 21 3d 30 20 29 3b 0a  (1<<iDb))!=0 );.
18830 20 20 70 44 62 20 3d 20 26 64 62 2d 3e 61 44 62    pDb = &db->aDb
18840 5b 69 44 62 5d 3b 0a 20 20 70 58 20 3d 20 70 44  [iDb];.  pX = pD
18850 62 2d 3e 70 42 74 3b 0a 20 20 61 73 73 65 72 74  b->pBt;.  assert
18860 28 20 70 58 21 3d 30 20 29 3b 0a 20 20 69 66 28  ( pX!=0 );.  if(
18870 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
18880 5f 4f 70 65 6e 57 72 69 74 65 20 29 7b 0a 20 20  _OpenWrite ){.  
18890 20 20 77 72 46 6c 61 67 20 3d 20 31 3b 0a 20 20    wrFlag = 1;.  
188a0 20 20 69 66 28 20 70 44 62 2d 3e 70 53 63 68 65    if( pDb->pSche
188b0 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 20  ma->file_format 
188c0 3c 20 70 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c  < p->minWriteFil
188d0 65 46 6f 72 6d 61 74 20 29 7b 0a 20 20 20 20 20  eFormat ){.     
188e0 20 70 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65   p->minWriteFile
188f0 46 6f 72 6d 61 74 20 3d 20 70 44 62 2d 3e 70 53  Format = pDb->pS
18900 63 68 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d  chema->file_form
18910 61 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73  at;.    }.  }els
18920 65 7b 0a 20 20 20 20 77 72 46 6c 61 67 20 3d 20  e{.    wrFlag = 
18930 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70  0;.  }.  if( pOp
18940 2d 3e 70 35 20 29 7b 0a 20 20 20 20 61 73 73 65  ->p5 ){.    asse
18950 72 74 28 20 70 32 3e 30 20 29 3b 0a 20 20 20 20  rt( p2>0 );.    
18960 61 73 73 65 72 74 28 20 70 32 3c 3d 70 2d 3e 6e  assert( p2<=p->n
18970 4d 65 6d 20 29 3b 0a 20 20 20 20 70 49 6e 32 20  Mem );.    pIn2 
18980 3d 20 26 61 4d 65 6d 5b 70 32 5d 3b 0a 20 20 20  = &aMem[p2];.   
18990 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
189a0 6c 69 64 28 70 49 6e 32 29 20 29 3b 0a 20 20 20  lid(pIn2) );.   
189b0 20 61 73 73 65 72 74 28 20 28 70 49 6e 32 2d 3e   assert( (pIn2->
189c0 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29  flags & MEM_Int)
189d0 21 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c 69 74  !=0 );.    sqlit
189e0 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72  e3VdbeMemInteger
189f0 69 66 79 28 70 49 6e 32 29 3b 0a 20 20 20 20 70  ify(pIn2);.    p
18a00 32 20 3d 20 28 69 6e 74 29 70 49 6e 32 2d 3e 75  2 = (int)pIn2->u
18a10 2e 69 3b 0a 20 20 20 20 2f 2a 20 54 68 65 20 70  .i;.    /* The p
18a20 32 20 76 61 6c 75 65 20 61 6c 77 61 79 73 20 63  2 value always c
18a30 6f 6d 65 73 20 66 72 6f 6d 20 61 20 70 72 69 6f  omes from a prio
18a40 72 20 4f 50 5f 43 72 65 61 74 65 54 61 62 6c 65  r OP_CreateTable
18a50 20 6f 70 63 6f 64 65 20 61 6e 64 0a 20 20 20 20   opcode and.    
18a60 2a 2a 20 74 68 61 74 20 6f 70 63 6f 64 65 20 77  ** that opcode w
18a70 69 6c 6c 20 61 6c 77 61 79 73 20 73 65 74 20 74  ill always set t
18a80 68 65 20 70 32 20 76 61 6c 75 65 20 74 6f 20 32  he p2 value to 2
18a90 20 6f 72 20 6d 6f 72 65 20 6f 72 20 65 6c 73 65   or more or else
18aa0 20 66 61 69 6c 2e 0a 20 20 20 20 2a 2a 20 49 66   fail..    ** If
18ab0 20 74 68 65 72 65 20 77 65 72 65 20 61 20 66 61   there were a fa
18ac0 69 6c 75 72 65 2c 20 74 68 65 20 70 72 65 70 61  ilure, the prepa
18ad0 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20 77 6f  red statement wo
18ae0 75 6c 64 20 68 61 76 65 20 68 61 6c 74 65 64 0a  uld have halted.
18af0 20 20 20 20 2a 2a 20 62 65 66 6f 72 65 20 72 65      ** before re
18b00 61 63 68 69 6e 67 20 74 68 69 73 20 69 6e 73 74  aching this inst
18b10 72 75 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 20 20  ruction. */.    
18b20 69 66 28 20 4e 45 56 45 52 28 70 32 3c 32 29 20  if( NEVER(p2<2) 
18b30 29 20 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53  ) {.      rc = S
18b40 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b  QLITE_CORRUPT_BK
18b50 50 54 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61  PT;.      goto a
18b60 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
18b70 72 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69  r;.    }.  }.  i
18b80 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  f( pOp->p4type==
18b90 50 34 5f 4b 45 59 49 4e 46 4f 20 29 7b 0a 20 20  P4_KEYINFO ){.  
18ba0 20 20 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70    pKeyInfo = pOp
18bb0 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20  ->p4.pKeyInfo;. 
18bc0 20 20 20 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63     pKeyInfo->enc
18bd0 20 3d 20 45 4e 43 28 70 2d 3e 64 62 29 3b 0a 20   = ENC(p->db);. 
18be0 20 20 20 6e 46 69 65 6c 64 20 3d 20 70 4b 65 79     nField = pKey
18bf0 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64 2b 31 3b 0a  Info->nField+1;.
18c00 20 20 7d 65 6c 73 65 20 69 66 28 20 70 4f 70 2d    }else if( pOp-
18c10 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33  >p4type==P4_INT3
18c20 32 20 29 7b 0a 20 20 20 20 6e 46 69 65 6c 64 20  2 ){.    nField 
18c30 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 7d  = pOp->p4.i;.  }
18c40 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
18c50 70 31 3e 3d 30 20 29 3b 0a 20 20 70 43 75 72 20  p1>=0 );.  pCur 
18c60 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72  = allocateCursor
18c70 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 6e 46 69  (p, pOp->p1, nFi
18c80 65 6c 64 2c 20 69 44 62 2c 20 31 29 3b 0a 20 20  eld, iDb, 1);.  
18c90 69 66 28 20 70 43 75 72 3d 3d 30 20 29 20 67 6f  if( pCur==0 ) go
18ca0 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 75  to no_mem;.  pCu
18cb0 72 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a  r->nullRow = 1;.
18cc0 20 20 70 43 75 72 2d 3e 69 73 4f 72 64 65 72 65    pCur->isOrdere
18cd0 64 20 3d 20 31 3b 0a 20 20 72 63 20 3d 20 73 71  d = 1;.  rc = sq
18ce0 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72  lite3BtreeCursor
18cf0 28 70 58 2c 20 70 32 2c 20 77 72 46 6c 61 67 2c  (pX, p2, wrFlag,
18d00 20 70 4b 65 79 49 6e 66 6f 2c 20 70 43 75 72 2d   pKeyInfo, pCur-
18d10 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 70 43 75  >pCursor);.  pCu
18d20 72 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4b  r->pKeyInfo = pK
18d30 65 79 49 6e 66 6f 3b 0a 0a 20 20 2f 2a 20 53 69  eyInfo;..  /* Si
18d40 6e 63 65 20 69 74 20 70 65 72 66 6f 72 6d 73 20  nce it performs 
18d50 6e 6f 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  no memory alloca
18d60 74 69 6f 6e 20 6f 72 20 49 4f 2c 20 74 68 65 20  tion or IO, the 
18d70 6f 6e 6c 79 20 76 61 6c 75 65 73 20 74 68 61 74  only values that
18d80 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 42 74 72  .  ** sqlite3Btr
18d90 65 65 43 75 72 73 6f 72 28 29 20 6d 61 79 20 72  eeCursor() may r
18da0 65 74 75 72 6e 20 61 72 65 20 53 51 4c 49 54 45  eturn are SQLITE
18db0 5f 45 4d 50 54 59 20 61 6e 64 20 53 51 4c 49 54  _EMPTY and SQLIT
18dc0 45 5f 4f 4b 2e 20 0a 20 20 2a 2a 20 53 51 4c 49  E_OK. .  ** SQLI
18dd0 54 45 5f 45 4d 50 54 59 20 69 73 20 6f 6e 6c 79  TE_EMPTY is only
18de0 20 72 65 74 75 72 6e 65 64 20 77 68 65 6e 20 61   returned when a
18df0 74 74 65 6d 70 74 69 6e 67 20 74 6f 20 6f 70 65  ttempting to ope
18e00 6e 20 74 68 65 20 74 61 62 6c 65 0a 20 20 2a 2a  n the table.  **
18e10 20 72 6f 6f 74 65 64 20 61 74 20 70 61 67 65 20   rooted at page 
18e20 31 20 6f 66 20 61 20 7a 65 72 6f 2d 62 79 74 65  1 of a zero-byte
18e30 20 64 61 74 61 62 61 73 65 2e 20 20 2a 2f 0a 20   database.  */. 
18e40 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c   assert( rc==SQL
18e50 49 54 45 5f 45 4d 50 54 59 20 7c 7c 20 72 63 3d  ITE_EMPTY || rc=
18e60 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 20 20  =SQLITE_OK );.  
18e70 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 45  if( rc==SQLITE_E
18e80 4d 50 54 59 20 29 7b 0a 20 20 20 20 70 43 75 72  MPTY ){.    pCur
18e90 2d 3e 70 43 75 72 73 6f 72 20 3d 20 30 3b 0a 20  ->pCursor = 0;. 
18ea0 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f     rc = SQLITE_O
18eb0 4b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 53 65 74  K;.  }..  /* Set
18ec0 20 74 68 65 20 56 64 62 65 43 75 72 73 6f 72 2e   the VdbeCursor.
18ed0 69 73 54 61 62 6c 65 20 61 6e 64 20 69 73 49 6e  isTable and isIn
18ee0 64 65 78 20 76 61 72 69 61 62 6c 65 73 2e 20 50  dex variables. P
18ef0 72 65 76 69 6f 75 73 20 76 65 72 73 69 6f 6e 73  revious versions
18f00 20 6f 66 0a 20 20 2a 2a 20 53 51 4c 69 74 65 20   of.  ** SQLite 
18f10 75 73 65 64 20 74 6f 20 63 68 65 63 6b 20 69 66  used to check if
18f20 20 74 68 65 20 72 6f 6f 74 2d 70 61 67 65 20 66   the root-page f
18f30 6c 61 67 73 20 77 65 72 65 20 73 61 6e 65 20 61  lags were sane a
18f40 74 20 74 68 69 73 20 70 6f 69 6e 74 0a 20 20 2a  t this point.  *
18f50 2a 20 61 6e 64 20 72 65 70 6f 72 74 20 64 61 74  * and report dat
18f60 61 62 61 73 65 20 63 6f 72 72 75 70 74 69 6f 6e  abase corruption
18f70 20 69 66 20 74 68 65 79 20 77 65 72 65 20 6e 6f   if they were no
18f80 74 2c 20 62 75 74 20 74 68 69 73 20 63 68 65 63  t, but this chec
18f90 6b 20 68 61 73 0a 20 20 2a 2a 20 73 69 6e 63 65  k has.  ** since
18fa0 20 6d 6f 76 65 64 20 69 6e 74 6f 20 74 68 65 20   moved into the 
18fb0 62 74 72 65 65 20 6c 61 79 65 72 2e 20 20 2a 2f  btree layer.  */
18fc0 20 20 0a 20 20 70 43 75 72 2d 3e 69 73 54 61 62    .  pCur->isTab
18fd0 6c 65 20 3d 20 70 4f 70 2d 3e 70 34 74 79 70 65  le = pOp->p4type
18fe0 21 3d 50 34 5f 4b 45 59 49 4e 46 4f 3b 0a 20 20  !=P4_KEYINFO;.  
18ff0 70 43 75 72 2d 3e 69 73 49 6e 64 65 78 20 3d 20  pCur->isIndex = 
19000 21 70 43 75 72 2d 3e 69 73 54 61 62 6c 65 3b 0a  !pCur->isTable;.
19010 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
19020 70 63 6f 64 65 3a 20 4f 70 65 6e 45 70 68 65 6d  pcode: OpenEphem
19030 65 72 61 6c 20 50 31 20 50 32 20 2a 20 50 34 20  eral P1 P2 * P4 
19040 2a 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 6e  *.**.** Open a n
19050 65 77 20 63 75 72 73 6f 72 20 50 31 20 74 6f 20  ew cursor P1 to 
19060 61 20 74 72 61 6e 73 69 65 6e 74 20 74 61 62 6c  a transient tabl
19070 65 2e 0a 2a 2a 20 54 68 65 20 63 75 72 73 6f 72  e..** The cursor
19080 20 69 73 20 61 6c 77 61 79 73 20 6f 70 65 6e 65   is always opene
19090 64 20 72 65 61 64 2f 77 72 69 74 65 20 65 76 65  d read/write eve
190a0 6e 20 69 66 20 0a 2a 2a 20 74 68 65 20 6d 61 69  n if .** the mai
190b0 6e 20 64 61 74 61 62 61 73 65 20 69 73 20 72 65  n database is re
190c0 61 64 2d 6f 6e 6c 79 2e 20 20 54 68 65 20 65 70  ad-only.  The ep
190d0 68 65 6d 65 72 61 6c 0a 2a 2a 20 74 61 62 6c 65  hemeral.** table
190e0 20 69 73 20 64 65 6c 65 74 65 64 20 61 75 74 6f   is deleted auto
190f0 6d 61 74 69 63 61 6c 6c 79 20 77 68 65 6e 20 74  matically when t
19100 68 65 20 63 75 72 73 6f 72 20 69 73 20 63 6c 6f  he cursor is clo
19110 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73  sed..**.** P2 is
19120 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63   the number of c
19130 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 65 70  olumns in the ep
19140 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 2e 0a 2a  hemeral table..*
19150 2a 20 54 68 65 20 63 75 72 73 6f 72 20 70 6f 69  * The cursor poi
19160 6e 74 73 20 74 6f 20 61 20 42 54 72 65 65 20 74  nts to a BTree t
19170 61 62 6c 65 20 69 66 20 50 34 3d 3d 30 20 61 6e  able if P4==0 an
19180 64 20 74 6f 20 61 20 42 54 72 65 65 20 69 6e 64  d to a BTree ind
19190 65 78 0a 2a 2a 20 69 66 20 50 34 20 69 73 20 6e  ex.** if P4 is n
191a0 6f 74 20 30 2e 20 20 49 66 20 50 34 20 69 73 20  ot 0.  If P4 is 
191b0 6e 6f 74 20 4e 55 4c 4c 2c 20 69 74 20 70 6f 69  not NULL, it poi
191c0 6e 74 73 20 74 6f 20 61 20 4b 65 79 49 6e 66 6f  nts to a KeyInfo
191d0 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 74 68   structure.** th
191e0 61 74 20 64 65 66 69 6e 65 73 20 74 68 65 20 66  at defines the f
191f0 6f 72 6d 61 74 20 6f 66 20 6b 65 79 73 20 69 6e  ormat of keys in
19200 20 74 68 65 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a   the index..**.*
19210 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77 61  * This opcode wa
19220 73 20 6f 6e 63 65 20 63 61 6c 6c 65 64 20 4f 70  s once called Op
19230 65 6e 54 65 6d 70 2e 20 20 42 75 74 20 74 68 61  enTemp.  But tha
19240 74 20 63 72 65 61 74 65 64 0a 2a 2a 20 63 6f 6e  t created.** con
19250 66 75 73 69 6f 6e 20 62 65 63 61 75 73 65 20 74  fusion because t
19260 68 65 20 74 65 72 6d 20 22 74 65 6d 70 20 74 61  he term "temp ta
19270 62 6c 65 22 2c 20 6d 69 67 68 74 20 72 65 66 65  ble", might refe
19280 72 20 65 69 74 68 65 72 0a 2a 2a 20 74 6f 20 61  r either.** to a
19290 20 54 45 4d 50 20 74 61 62 6c 65 20 61 74 20 74   TEMP table at t
192a0 68 65 20 53 51 4c 20 6c 65 76 65 6c 2c 20 6f 72  he SQL level, or
192b0 20 74 6f 20 61 20 74 61 62 6c 65 20 6f 70 65 6e   to a table open
192c0 65 64 20 62 79 0a 2a 2a 20 74 68 69 73 20 6f 70  ed by.** this op
192d0 63 6f 64 65 2e 20 20 54 68 65 6e 20 74 68 69 73  code.  Then this
192e0 20 6f 70 63 6f 64 65 20 77 61 73 20 63 61 6c 6c   opcode was call
192f0 20 4f 70 65 6e 56 69 72 74 75 61 6c 2e 20 20 42   OpenVirtual.  B
19300 75 74 0a 2a 2a 20 74 68 61 74 20 63 72 65 61 74  ut.** that creat
19310 65 64 20 63 6f 6e 66 75 73 69 6f 6e 20 77 69 74  ed confusion wit
19320 68 20 74 68 65 20 77 68 6f 6c 65 20 76 69 72 74  h the whole virt
19330 75 61 6c 2d 74 61 62 6c 65 20 69 64 65 61 2e 0a  ual-table idea..
19340 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70  */./* Opcode: Op
19350 65 6e 41 75 74 6f 69 6e 64 65 78 20 50 31 20 50  enAutoindex P1 P
19360 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 54  2 * P4 *.**.** T
19370 68 69 73 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73  his opcode works
19380 20 74 68 65 20 73 61 6d 65 20 61 73 20 4f 50 5f   the same as OP_
19390 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 2e 20 20  OpenEphemeral.  
193a0 49 74 20 68 61 73 20 61 0a 2a 2a 20 64 69 66 66  It has a.** diff
193b0 65 72 65 6e 74 20 6e 61 6d 65 20 74 6f 20 64 69  erent name to di
193c0 73 74 69 6e 67 75 69 73 68 20 69 74 73 20 75 73  stinguish its us
193d0 65 2e 20 20 54 61 62 6c 65 73 20 63 72 65 61 74  e.  Tables creat
193e0 65 64 20 75 73 69 6e 67 0a 2a 2a 20 62 79 20 74  ed using.** by t
193f0 68 69 73 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20  his opcode will 
19400 62 65 20 75 73 65 64 20 66 6f 72 20 61 75 74 6f  be used for auto
19410 6d 61 74 69 63 61 6c 6c 79 20 63 72 65 61 74 65  matically create
19420 64 20 74 72 61 6e 73 69 65 6e 74 0a 2a 2a 20 69  d transient.** i
19430 6e 64 69 63 65 73 20 69 6e 20 6a 6f 69 6e 73 2e  ndices in joins.
19440 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e  .*/.case OP_Open
19450 41 75 74 6f 69 6e 64 65 78 3a 20 0a 63 61 73 65  Autoindex: .case
19460 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61   OP_OpenEphemera
19470 6c 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f  l: {.  VdbeCurso
19480 72 20 2a 70 43 78 3b 0a 20 20 73 74 61 74 69 63  r *pCx;.  static
19490 20 63 6f 6e 73 74 20 69 6e 74 20 76 66 73 46 6c   const int vfsFl
194a0 61 67 73 20 3d 20 0a 20 20 20 20 20 20 53 51 4c  ags = .      SQL
194b0 49 54 45 5f 4f 50 45 4e 5f 52 45 41 44 57 52 49  ITE_OPEN_READWRI
194c0 54 45 20 7c 0a 20 20 20 20 20 20 53 51 4c 49 54  TE |.      SQLIT
194d0 45 5f 4f 50 45 4e 5f 43 52 45 41 54 45 20 7c 0a  E_OPEN_CREATE |.
194e0 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45        SQLITE_OPE
194f0 4e 5f 45 58 43 4c 55 53 49 56 45 20 7c 0a 20 20  N_EXCLUSIVE |.  
19500 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f      SQLITE_OPEN_
19510 44 45 4c 45 54 45 4f 4e 43 4c 4f 53 45 20 7c 0a  DELETEONCLOSE |.
19520 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45        SQLITE_OPE
19530 4e 5f 54 52 41 4e 53 49 45 4e 54 5f 44 42 3b 0a  N_TRANSIENT_DB;.
19540 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
19550 70 31 3e 3d 30 20 29 3b 0a 20 20 70 43 78 20 3d  p1>=0 );.  pCx =
19560 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28   allocateCursor(
19570 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d  p, pOp->p1, pOp-
19580 3e 70 32 2c 20 2d 31 2c 20 31 29 3b 0a 20 20 69  >p2, -1, 1);.  i
19590 66 28 20 70 43 78 3d 3d 30 20 29 20 67 6f 74 6f  f( pCx==0 ) goto
195a0 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e   no_mem;.  pCx->
195b0 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 72  nullRow = 1;.  r
195c0 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
195d0 4f 70 65 6e 28 30 2c 20 64 62 2c 20 26 70 43 78  Open(0, db, &pCx
195e0 2d 3e 70 42 74 2c 20 0a 20 20 20 20 20 20 20 20  ->pBt, .        
195f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19600 42 54 52 45 45 5f 4f 4d 49 54 5f 4a 4f 55 52 4e  BTREE_OMIT_JOURN
19610 41 4c 20 7c 20 42 54 52 45 45 5f 53 49 4e 47 4c  AL | BTREE_SINGL
19620 45 20 7c 20 70 4f 70 2d 3e 70 35 2c 20 76 66 73  E | pOp->p5, vfs
19630 46 6c 61 67 73 29 3b 0a 20 20 69 66 28 20 72 63  Flags);.  if( rc
19640 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
19650 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
19660 74 72 65 65 42 65 67 69 6e 54 72 61 6e 73 28 70  treeBeginTrans(p
19670 43 78 2d 3e 70 42 74 2c 20 31 29 3b 0a 20 20 7d  Cx->pBt, 1);.  }
19680 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54  .  if( rc==SQLIT
19690 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 2f 2a 20 49  E_OK ){.    /* I
196a0 66 20 61 20 74 72 61 6e 73 69 65 6e 74 20 69 6e  f a transient in
196b0 64 65 78 20 69 73 20 72 65 71 75 69 72 65 64 2c  dex is required,
196c0 20 63 72 65 61 74 65 20 69 74 20 62 79 20 63 61   create it by ca
196d0 6c 6c 69 6e 67 0a 20 20 20 20 2a 2a 20 73 71 6c  lling.    ** sql
196e0 69 74 65 33 42 74 72 65 65 43 72 65 61 74 65 54  ite3BtreeCreateT
196f0 61 62 6c 65 28 29 20 77 69 74 68 20 74 68 65 20  able() with the 
19700 42 54 52 45 45 5f 42 4c 4f 42 4b 45 59 20 66 6c  BTREE_BLOBKEY fl
19710 61 67 20 62 65 66 6f 72 65 0a 20 20 20 20 2a 2a  ag before.    **
19720 20 6f 70 65 6e 69 6e 67 20 69 74 2e 20 49 66 20   opening it. If 
19730 61 20 74 72 61 6e 73 69 65 6e 74 20 74 61 62 6c  a transient tabl
19740 65 20 69 73 20 72 65 71 75 69 72 65 64 2c 20 6a  e is required, j
19750 75 73 74 20 75 73 65 20 74 68 65 0a 20 20 20 20  ust use the.    
19760 2a 2a 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  ** automatically
19770 20 63 72 65 61 74 65 64 20 74 61 62 6c 65 20 77   created table w
19780 69 74 68 20 72 6f 6f 74 2d 70 61 67 65 20 31 20  ith root-page 1 
19790 28 61 6e 20 42 4c 4f 42 5f 49 4e 54 4b 45 59 20  (an BLOB_INTKEY 
197a0 74 61 62 6c 65 29 2e 0a 20 20 20 20 2a 2f 0a 20  table)..    */. 
197b0 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 2e 70     if( pOp->p4.p
197c0 4b 65 79 49 6e 66 6f 20 29 7b 0a 20 20 20 20 20  KeyInfo ){.     
197d0 20 69 6e 74 20 70 67 6e 6f 3b 0a 20 20 20 20 20   int pgno;.     
197e0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
197f0 74 79 70 65 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f  type==P4_KEYINFO
19800 20 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73   );.      rc = s
19810 71 6c 69 74 65 33 42 74 72 65 65 43 72 65 61 74  qlite3BtreeCreat
19820 65 54 61 62 6c 65 28 70 43 78 2d 3e 70 42 74 2c  eTable(pCx->pBt,
19830 20 26 70 67 6e 6f 2c 20 42 54 52 45 45 5f 42 4c   &pgno, BTREE_BL
19840 4f 42 4b 45 59 29 3b 20 0a 20 20 20 20 20 20 69  OBKEY); .      i
19850 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
19860 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65   ){.        asse
19870 72 74 28 20 70 67 6e 6f 3d 3d 4d 41 53 54 45 52  rt( pgno==MASTER
19880 5f 52 4f 4f 54 2b 31 20 29 3b 0a 20 20 20 20 20  _ROOT+1 );.     
19890 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
198a0 74 72 65 65 43 75 72 73 6f 72 28 70 43 78 2d 3e  treeCursor(pCx->
198b0 70 42 74 2c 20 70 67 6e 6f 2c 20 31 2c 20 0a 20  pBt, pgno, 1, . 
198c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
198d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28                 (
198e0 4b 65 79 49 6e 66 6f 2a 29 70 4f 70 2d 3e 70 34  KeyInfo*)pOp->p4
198f0 2e 7a 2c 20 70 43 78 2d 3e 70 43 75 72 73 6f 72  .z, pCx->pCursor
19900 29 3b 0a 20 20 20 20 20 20 20 20 70 43 78 2d 3e  );.        pCx->
19910 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e  pKeyInfo = pOp->
19920 70 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20  p4.pKeyInfo;.   
19930 20 20 20 20 20 70 43 78 2d 3e 70 4b 65 79 49 6e       pCx->pKeyIn
19940 66 6f 2d 3e 65 6e 63 20 3d 20 45 4e 43 28 70 2d  fo->enc = ENC(p-
19950 3e 64 62 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  >db);.      }.  
19960 20 20 20 20 70 43 78 2d 3e 69 73 54 61 62 6c 65      pCx->isTable
19970 20 3d 20 30 3b 0a 20 20 20 20 7d 65 6c 73 65 7b   = 0;.    }else{
19980 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69  .      rc = sqli
19990 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 28 70  te3BtreeCursor(p
199a0 43 78 2d 3e 70 42 74 2c 20 4d 41 53 54 45 52 5f  Cx->pBt, MASTER_
199b0 52 4f 4f 54 2c 20 31 2c 20 30 2c 20 70 43 78 2d  ROOT, 1, 0, pCx-
199c0 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 20  >pCursor);.     
199d0 20 70 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d 20   pCx->isTable = 
199e0 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 70  1;.    }.  }.  p
199f0 43 78 2d 3e 69 73 4f 72 64 65 72 65 64 20 3d 20  Cx->isOrdered = 
19a00 28 70 4f 70 2d 3e 70 35 21 3d 42 54 52 45 45 5f  (pOp->p5!=BTREE_
19a10 55 4e 4f 52 44 45 52 45 44 29 3b 0a 20 20 70 43  UNORDERED);.  pC
19a20 78 2d 3e 69 73 49 6e 64 65 78 20 3d 20 21 70 43  x->isIndex = !pC
19a30 78 2d 3e 69 73 54 61 62 6c 65 3b 0a 20 20 62 72  x->isTable;.  br
19a40 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
19a50 65 3a 20 4f 70 65 6e 50 73 65 75 64 6f 20 50 31  e: OpenPseudo P1
19a60 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
19a70 20 4f 70 65 6e 20 61 20 6e 65 77 20 63 75 72 73   Open a new curs
19a80 6f 72 20 74 68 61 74 20 70 6f 69 6e 74 73 20 74  or that points t
19a90 6f 20 61 20 66 61 6b 65 20 74 61 62 6c 65 20 74  o a fake table t
19aa0 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 61 20 73  hat contains a s
19ab0 69 6e 67 6c 65 0a 2a 2a 20 72 6f 77 20 6f 66 20  ingle.** row of 
19ac0 64 61 74 61 2e 20 20 54 68 65 20 63 6f 6e 74 65  data.  The conte
19ad0 6e 74 20 6f 66 20 74 68 61 74 20 6f 6e 65 20 72  nt of that one r
19ae0 6f 77 20 69 6e 20 74 68 65 20 63 6f 6e 74 65 6e  ow in the conten
19af0 74 20 6f 66 20 6d 65 6d 6f 72 79 0a 2a 2a 20 72  t of memory.** r
19b00 65 67 69 73 74 65 72 20 50 32 2e 20 20 49 6e 20  egister P2.  In 
19b10 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 63 75 72  other words, cur
19b20 73 6f 72 20 50 31 20 62 65 63 6f 6d 65 73 20 61  sor P1 becomes a
19b30 6e 20 61 6c 69 61 73 20 66 6f 72 20 74 68 65 20  n alias for the 
19b40 0a 2a 2a 20 4d 45 4d 5f 42 6c 6f 62 20 63 6f 6e  .** MEM_Blob con
19b50 74 65 6e 74 20 63 6f 6e 74 61 69 6e 65 64 20 69  tent contained i
19b60 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  n register P2..*
19b70 2a 0a 2a 2a 20 41 20 70 73 65 75 64 6f 2d 74 61  *.** A pseudo-ta
19b80 62 6c 65 20 63 72 65 61 74 65 64 20 62 79 20 74  ble created by t
19b90 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 75 73  his opcode is us
19ba0 65 64 20 74 6f 20 68 6f 6c 64 20 61 20 73 69 6e  ed to hold a sin
19bb0 67 6c 65 0a 2a 2a 20 72 6f 77 20 6f 75 74 70 75  gle.** row outpu
19bc0 74 20 66 72 6f 6d 20 74 68 65 20 73 6f 72 74 65  t from the sorte
19bd0 72 20 73 6f 20 74 68 61 74 20 74 68 65 20 72 6f  r so that the ro
19be0 77 20 63 61 6e 20 62 65 20 64 65 63 6f 6d 70 6f  w can be decompo
19bf0 73 65 64 20 69 6e 74 6f 0a 2a 2a 20 69 6e 64 69  sed into.** indi
19c00 76 69 64 75 61 6c 20 63 6f 6c 75 6d 6e 73 20 75  vidual columns u
19c10 73 69 6e 67 20 74 68 65 20 4f 50 5f 43 6f 6c 75  sing the OP_Colu
19c20 6d 6e 20 6f 70 63 6f 64 65 2e 20 20 54 68 65 20  mn opcode.  The 
19c30 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65  OP_Column opcode
19c40 0a 2a 2a 20 69 73 20 74 68 65 20 6f 6e 6c 79 20  .** is the only 
19c50 63 75 72 73 6f 72 20 6f 70 63 6f 64 65 20 74 68  cursor opcode th
19c60 61 74 20 77 6f 72 6b 73 20 77 69 74 68 20 61 20  at works with a 
19c70 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2a  pseudo-table..**
19c80 0a 2a 2a 20 50 33 20 69 73 20 74 68 65 20 6e 75  .** P3 is the nu
19c90 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20 69  mber of fields i
19ca0 6e 20 74 68 65 20 72 65 63 6f 72 64 73 20 74 68  n the records th
19cb0 61 74 20 77 69 6c 6c 20 62 65 20 73 74 6f 72 65  at will be store
19cc0 64 20 62 79 0a 2a 2a 20 74 68 65 20 70 73 65 75  d by.** the pseu
19cd0 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73  do-table..*/.cas
19ce0 65 20 4f 50 5f 4f 70 65 6e 50 73 65 75 64 6f 3a  e OP_OpenPseudo:
19cf0 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20   {.  VdbeCursor 
19d00 2a 70 43 78 3b 0a 0a 20 20 61 73 73 65 72 74 28  *pCx;..  assert(
19d10 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20   pOp->p1>=0 );. 
19d20 20 70 43 78 20 3d 20 61 6c 6c 6f 63 61 74 65 43   pCx = allocateC
19d30 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31  ursor(p, pOp->p1
19d40 2c 20 70 4f 70 2d 3e 70 33 2c 20 2d 31 2c 20 30  , pOp->p3, -1, 0
19d50 29 3b 0a 20 20 69 66 28 20 70 43 78 3d 3d 30 20  );.  if( pCx==0 
19d60 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
19d70 20 70 43 78 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20   pCx->nullRow = 
19d80 31 3b 0a 20 20 70 43 78 2d 3e 70 73 65 75 64 6f  1;.  pCx->pseudo
19d90 54 61 62 6c 65 52 65 67 20 3d 20 70 4f 70 2d 3e  TableReg = pOp->
19da0 70 32 3b 0a 20 20 70 43 78 2d 3e 69 73 54 61 62  p2;.  pCx->isTab
19db0 6c 65 20 3d 20 31 3b 0a 20 20 70 43 78 2d 3e 69  le = 1;.  pCx->i
19dc0 73 49 6e 64 65 78 20 3d 20 30 3b 0a 20 20 62 72  sIndex = 0;.  br
19dd0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
19de0 65 3a 20 43 6c 6f 73 65 20 50 31 20 2a 20 2a 20  e: Close P1 * * 
19df0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 6c 6f 73 65 20  * *.**.** Close 
19e00 61 20 63 75 72 73 6f 72 20 70 72 65 76 69 6f 75  a cursor previou
19e10 73 6c 79 20 6f 70 65 6e 65 64 20 61 73 20 50 31  sly opened as P1
19e20 2e 20 20 49 66 20 50 31 20 69 73 20 6e 6f 74 0a  .  If P1 is not.
19e30 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20 6f 70 65  ** currently ope
19e40 6e 2c 20 74 68 69 73 20 69 6e 73 74 72 75 63 74  n, this instruct
19e50 69 6f 6e 20 69 73 20 61 20 6e 6f 2d 6f 70 2e 0a  ion is a no-op..
19e60 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6c 6f 73 65  */.case OP_Close
19e70 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  : {.  assert( pO
19e80 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
19e90 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
19ea0 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 46  ;.  sqlite3VdbeF
19eb0 72 65 65 43 75 72 73 6f 72 28 70 2c 20 70 2d 3e  reeCursor(p, p->
19ec0 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 29 3b  apCsr[pOp->p1]);
19ed0 0a 20 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d  .  p->apCsr[pOp-
19ee0 3e 70 31 5d 20 3d 20 30 3b 0a 20 20 62 72 65 61  >p1] = 0;.  brea
19ef0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
19f00 20 53 65 65 6b 47 65 20 50 31 20 50 32 20 50 33   SeekGe P1 P2 P3
19f10 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 63   P4 *.**.** If c
19f20 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20  ursor P1 refers 
19f30 74 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20  to an SQL table 
19f40 28 42 2d 54 72 65 65 20 74 68 61 74 20 75 73 65  (B-Tree that use
19f50 73 20 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c  s integer keys),
19f60 20 0a 2a 2a 20 75 73 65 20 74 68 65 20 76 61 6c   .** use the val
19f70 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
19f80 33 20 61 73 20 74 68 65 20 6b 65 79 2e 20 20 49  3 as the key.  I
19f90 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65  f cursor P1 refe
19fa0 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c  rs .** to an SQL
19fb0 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 50 33 20   index, then P3 
19fc0 69 73 20 74 68 65 20 66 69 72 73 74 20 69 6e 20  is the first in 
19fd0 61 6e 20 61 72 72 61 79 20 6f 66 20 50 34 20 72  an array of P4 r
19fe0 65 67 69 73 74 65 72 73 20 0a 2a 2a 20 74 68 61  egisters .** tha
19ff0 74 20 61 72 65 20 75 73 65 64 20 61 73 20 61 6e  t are used as an
1a000 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20   unpacked index 
1a010 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f  key. .**.** Repo
1a020 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50 31  sition cursor P1
1a030 20 73 6f 20 74 68 61 74 20 20 69 74 20 70 6f 69   so that  it poi
1a040 6e 74 73 20 74 6f 20 74 68 65 20 73 6d 61 6c 6c  nts to the small
1a050 65 73 74 20 65 6e 74 72 79 20 74 68 61 74 20 0a  est entry that .
1a060 2a 2a 20 69 73 20 67 72 65 61 74 65 72 20 74 68  ** is greater th
1a070 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74  an or equal to t
1a080 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20 49 66  he key value. If
1a090 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65   there are no re
1a0a0 63 6f 72 64 73 20 0a 2a 2a 20 67 72 65 61 74 65  cords .** greate
1a0b0 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20  r than or equal 
1a0c0 74 6f 20 74 68 65 20 6b 65 79 20 61 6e 64 20 50  to the key and P
1a0d0 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74  2 is not zero, t
1a0e0 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a  hen jump to P2..
1a0f0 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
1a100 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c  Found, NotFound,
1a110 20 44 69 73 74 69 6e 63 74 2c 20 53 65 65 6b 4c   Distinct, SeekL
1a120 74 2c 20 53 65 65 6b 47 74 2c 20 53 65 65 6b 4c  t, SeekGt, SeekL
1a130 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  e.*/./* Opcode: 
1a140 53 65 65 6b 47 74 20 50 31 20 50 32 20 50 33 20  SeekGt P1 P2 P3 
1a150 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75  P4 *.**.** If cu
1a160 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 74  rsor P1 refers t
1a170 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28  o an SQL table (
1a180 42 2d 54 72 65 65 20 74 68 61 74 20 75 73 65 73  B-Tree that uses
1a190 20 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20   integer keys), 
1a1a0 0a 2a 2a 20 75 73 65 20 74 68 65 20 76 61 6c 75  .** use the valu
1a1b0 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  e in register P3
1a1c0 20 61 73 20 61 20 6b 65 79 2e 20 49 66 20 63 75   as a key. If cu
1a1d0 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a  rsor P1 refers .
1a1e0 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64  ** to an SQL ind
1a1f0 65 78 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74  ex, then P3 is t
1a200 68 65 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61  he first in an a
1a210 72 72 61 79 20 6f 66 20 50 34 20 72 65 67 69 73  rray of P4 regis
1a220 74 65 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72  ters .** that ar
1a230 65 20 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70  e used as an unp
1a240 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e  acked index key.
1a250 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69   .**.** Repositi
1a260 6f 6e 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20  on cursor P1 so 
1a270 74 68 61 74 20 20 69 74 20 70 6f 69 6e 74 73 20  that  it points 
1a280 74 6f 20 74 68 65 20 73 6d 61 6c 6c 65 73 74 20  to the smallest 
1a290 65 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 69  entry that .** i
1a2a0 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 74  s greater than t
1a2b0 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20 49 66  he key value. If
1a2c0 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65   there are no re
1a2d0 63 6f 72 64 73 20 67 72 65 61 74 65 72 20 74 68  cords greater th
1a2e0 61 6e 20 0a 2a 2a 20 74 68 65 20 6b 65 79 20 61  an .** the key a
1a2f0 6e 64 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72  nd P2 is not zer
1a300 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20  o, then jump to 
1a310 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  P2..**.** See al
1a320 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f  so: Found, NotFo
1a330 75 6e 64 2c 20 44 69 73 74 69 6e 63 74 2c 20 53  und, Distinct, S
1a340 65 65 6b 4c 74 2c 20 53 65 65 6b 47 65 2c 20 53  eekLt, SeekGe, S
1a350 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  eekLe.*/./* Opco
1a360 64 65 3a 20 53 65 65 6b 4c 74 20 50 31 20 50 32  de: SeekLt P1 P2
1a370 20 50 33 20 50 34 20 2a 20 0a 2a 2a 0a 2a 2a 20   P3 P4 * .**.** 
1a380 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66  If cursor P1 ref
1a390 65 72 73 20 74 6f 20 61 6e 20 53 51 4c 20 74 61  ers to an SQL ta
1a3a0 62 6c 65 20 28 42 2d 54 72 65 65 20 74 68 61 74  ble (B-Tree that
1a3b0 20 75 73 65 73 20 69 6e 74 65 67 65 72 20 6b 65   uses integer ke
1a3c0 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65  ys), .** use the
1a3d0 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
1a3e0 65 72 20 50 33 20 61 73 20 61 20 6b 65 79 2e 20  er P3 as a key. 
1a3f0 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66  If cursor P1 ref
1a400 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51  ers .** to an SQ
1a410 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 50 33  L index, then P3
1a420 20 69 73 20 74 68 65 20 66 69 72 73 74 20 69 6e   is the first in
1a430 20 61 6e 20 61 72 72 61 79 20 6f 66 20 50 34 20   an array of P4 
1a440 72 65 67 69 73 74 65 72 73 20 0a 2a 2a 20 74 68  registers .** th
1a450 61 74 20 61 72 65 20 75 73 65 64 20 61 73 20 61  at are used as a
1a460 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78  n unpacked index
1a470 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70   key. .**.** Rep
1a480 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50  osition cursor P
1a490 31 20 73 6f 20 74 68 61 74 20 20 69 74 20 70 6f  1 so that  it po
1a4a0 69 6e 74 73 20 74 6f 20 74 68 65 20 6c 61 72 67  ints to the larg
1a4b0 65 73 74 20 65 6e 74 72 79 20 74 68 61 74 20 0a  est entry that .
1a4c0 2a 2a 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20  ** is less than 
1a4d0 74 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20 49  the key value. I
1a4e0 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72  f there are no r
1a4f0 65 63 6f 72 64 73 20 6c 65 73 73 20 74 68 61 6e  ecords less than
1a500 20 0a 2a 2a 20 74 68 65 20 6b 65 79 20 61 6e 64   .** the key and
1a510 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c   P2 is not zero,
1a520 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32   then jump to P2
1a530 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
1a540 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e  : Found, NotFoun
1a550 64 2c 20 44 69 73 74 69 6e 63 74 2c 20 53 65 65  d, Distinct, See
1a560 6b 47 74 2c 20 53 65 65 6b 47 65 2c 20 53 65 65  kGt, SeekGe, See
1a570 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  kLe.*/./* Opcode
1a580 3a 20 53 65 65 6b 4c 65 20 50 31 20 50 32 20 50  : SeekLe P1 P2 P
1a590 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20  3 P4 *.**.** If 
1a5a0 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73  cursor P1 refers
1a5b0 20 74 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c 65   to an SQL table
1a5c0 20 28 42 2d 54 72 65 65 20 74 68 61 74 20 75 73   (B-Tree that us
1a5d0 65 73 20 69 6e 74 65 67 65 72 20 6b 65 79 73 29  es integer keys)
1a5e0 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65 20 76 61  , .** use the va
1a5f0 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
1a600 50 33 20 61 73 20 61 20 6b 65 79 2e 20 49 66 20  P3 as a key. If 
1a610 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73  cursor P1 refers
1a620 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69   .** to an SQL i
1a630 6e 64 65 78 2c 20 74 68 65 6e 20 50 33 20 69 73  ndex, then P3 is
1a640 20 74 68 65 20 66 69 72 73 74 20 69 6e 20 61 6e   the first in an
1a650 20 61 72 72 61 79 20 6f 66 20 50 34 20 72 65 67   array of P4 reg
1a660 69 73 74 65 72 73 20 0a 2a 2a 20 74 68 61 74 20  isters .** that 
1a670 61 72 65 20 75 73 65 64 20 61 73 20 61 6e 20 75  are used as an u
1a680 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65  npacked index ke
1a690 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69  y. .**.** Reposi
1a6a0 74 69 6f 6e 20 63 75 72 73 6f 72 20 50 31 20 73  tion cursor P1 s
1a6b0 6f 20 74 68 61 74 20 69 74 20 70 6f 69 6e 74 73  o that it points
1a6c0 20 74 6f 20 74 68 65 20 6c 61 72 67 65 73 74 20   to the largest 
1a6d0 65 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 69  entry that .** i
1a6e0 73 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65  s less than or e
1a6f0 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20  qual to the key 
1a700 76 61 6c 75 65 2e 20 49 66 20 74 68 65 72 65 20  value. If there 
1a710 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 0a  are no records .
1a720 2a 2a 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20  ** less than or 
1a730 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79  equal to the key
1a740 20 61 6e 64 20 50 32 20 69 73 20 6e 6f 74 20 7a   and P2 is not z
1a750 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74  ero, then jump t
1a760 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  o P2..**.** See 
1a770 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74  also: Found, Not
1a780 46 6f 75 6e 64 2c 20 44 69 73 74 69 6e 63 74 2c  Found, Distinct,
1a790 20 53 65 65 6b 47 74 2c 20 53 65 65 6b 47 65 2c   SeekGt, SeekGe,
1a7a0 20 53 65 65 6b 4c 74 0a 2a 2f 0a 63 61 73 65 20   SeekLt.*/.case 
1a7b0 4f 50 5f 53 65 65 6b 4c 74 3a 20 20 20 20 20 20  OP_SeekLt:      
1a7c0 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20     /* jump, in3 
1a7d0 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 4c  */.case OP_SeekL
1a7e0 65 3a 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  e:         /* ju
1a7f0 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20  mp, in3 */.case 
1a800 4f 50 5f 53 65 65 6b 47 65 3a 20 20 20 20 20 20  OP_SeekGe:      
1a810 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20     /* jump, in3 
1a820 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 47  */.case OP_SeekG
1a830 74 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20 6a 75  t: {       /* ju
1a840 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74  mp, in3 */.  int
1a850 20 72 65 73 3b 0a 20 20 69 6e 74 20 6f 63 3b 0a   res;.  int oc;.
1a860 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
1a870 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f  ;.  UnpackedReco
1a880 72 64 20 72 3b 0a 20 20 69 6e 74 20 6e 46 69 65  rd r;.  int nFie
1a890 6c 64 3b 0a 20 20 69 36 34 20 69 4b 65 79 3b 20  ld;.  i64 iKey; 
1a8a0 20 20 20 20 20 2f 2a 20 54 68 65 20 72 6f 77 69       /* The rowi
1a8b0 64 20 77 65 20 61 72 65 20 74 6f 20 73 65 65 6b  d we are to seek
1a8c0 20 74 6f 20 2a 2f 0a 0a 20 20 61 73 73 65 72 74   to */..  assert
1a8d0 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
1a8e0 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
1a8f0 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  or );.  assert( 
1a900 70 4f 70 2d 3e 70 32 21 3d 30 20 29 3b 0a 20 20  pOp->p2!=0 );.  
1a910 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
1a920 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
1a930 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73  ( pC!=0 );.  ass
1a940 65 72 74 28 20 70 43 2d 3e 70 73 65 75 64 6f 54  ert( pC->pseudoT
1a950 61 62 6c 65 52 65 67 3d 3d 30 20 29 3b 0a 20 20  ableReg==0 );.  
1a960 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 4c  assert( OP_SeekL
1a970 65 20 3d 3d 20 4f 50 5f 53 65 65 6b 4c 74 2b 31  e == OP_SeekLt+1
1a980 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50   );.  assert( OP
1a990 5f 53 65 65 6b 47 65 20 3d 3d 20 4f 50 5f 53 65  _SeekGe == OP_Se
1a9a0 65 6b 4c 74 2b 32 20 29 3b 0a 20 20 61 73 73 65  ekLt+2 );.  asse
1a9b0 72 74 28 20 4f 50 5f 53 65 65 6b 47 74 20 3d 3d  rt( OP_SeekGt ==
1a9c0 20 4f 50 5f 53 65 65 6b 4c 74 2b 33 20 29 3b 0a   OP_SeekLt+3 );.
1a9d0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73    assert( pC->is
1a9e0 4f 72 64 65 72 65 64 20 29 3b 0a 20 20 69 66 28  Ordered );.  if(
1a9f0 20 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20   pC->pCursor!=0 
1aa00 29 7b 0a 20 20 20 20 6f 63 20 3d 20 70 4f 70 2d  ){.    oc = pOp-
1aa10 3e 6f 70 63 6f 64 65 3b 0a 20 20 20 20 70 43 2d  >opcode;.    pC-
1aa20 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20  >nullRow = 0;.  
1aa30 20 20 69 66 28 20 70 43 2d 3e 69 73 54 61 62 6c    if( pC->isTabl
1aa40 65 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 54 68  e ){.      /* Th
1aa50 65 20 69 6e 70 75 74 20 76 61 6c 75 65 20 69 6e  e input value in
1aa60 20 50 33 20 6d 69 67 68 74 20 62 65 20 6f 66 20   P3 might be of 
1aa70 61 6e 79 20 74 79 70 65 3a 20 69 6e 74 65 67 65  any type: intege
1aa80 72 2c 20 72 65 61 6c 2c 20 73 74 72 69 6e 67 2c  r, real, string,
1aa90 0a 20 20 20 20 20 20 2a 2a 20 62 6c 6f 62 2c 20  .      ** blob, 
1aaa0 6f 72 20 4e 55 4c 4c 2e 20 20 42 75 74 20 69 74  or NULL.  But it
1aab0 20 6e 65 65 64 73 20 74 6f 20 62 65 20 61 6e 20   needs to be an 
1aac0 69 6e 74 65 67 65 72 20 62 65 66 6f 72 65 20 77  integer before w
1aad0 65 20 63 61 6e 20 64 6f 0a 20 20 20 20 20 20 2a  e can do.      *
1aae0 2a 20 74 68 65 20 73 65 65 6b 2c 20 73 6f 20 63  * the seek, so c
1aaf0 6f 76 65 72 74 20 69 74 2e 20 2a 2f 0a 20 20 20  overt it. */.   
1ab00 20 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b     pIn3 = &aMem[
1ab10 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 20 20  pOp->p3];.      
1ab20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69  applyNumericAffi
1ab30 6e 69 74 79 28 70 49 6e 33 29 3b 0a 20 20 20 20  nity(pIn3);.    
1ab40 20 20 69 4b 65 79 20 3d 20 73 71 6c 69 74 65 33    iKey = sqlite3
1ab50 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e  VdbeIntValue(pIn
1ab60 33 29 3b 0a 20 20 20 20 20 20 70 43 2d 3e 72 6f  3);.      pC->ro
1ab70 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a  widIsValid = 0;.
1ab80 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65  .      /* If the
1ab90 20 50 33 20 76 61 6c 75 65 20 63 6f 75 6c 64 20   P3 value could 
1aba0 6e 6f 74 20 62 65 20 63 6f 6e 76 65 72 74 65 64  not be converted
1abb0 20 69 6e 74 6f 20 61 6e 20 69 6e 74 65 67 65 72   into an integer
1abc0 20 77 69 74 68 6f 75 74 0a 20 20 20 20 20 20 2a   without.      *
1abd0 2a 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72 6d  * loss of inform
1abe0 61 74 69 6f 6e 2c 20 74 68 65 6e 20 73 70 65 63  ation, then spec
1abf0 69 61 6c 20 70 72 6f 63 65 73 73 69 6e 67 20 69  ial processing i
1ac00 73 20 72 65 71 75 69 72 65 64 2e 2e 2e 20 2a 2f  s required... */
1ac10 0a 20 20 20 20 20 20 69 66 28 20 28 70 49 6e 33  .      if( (pIn3
1ac20 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
1ac30 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  t)==0 ){.       
1ac40 20 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67   if( (pIn3->flag
1ac50 73 20 26 20 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30  s & MEM_Real)==0
1ac60 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 2f 2a   ){.          /*
1ac70 20 49 66 20 74 68 65 20 50 33 20 76 61 6c 75 65   If the P3 value
1ac80 20 63 61 6e 6e 6f 74 20 62 65 20 63 6f 6e 76 65   cannot be conve
1ac90 72 74 65 64 20 69 6e 74 6f 20 61 6e 79 20 6b 69  rted into any ki
1aca0 6e 64 20 6f 66 20 61 20 6e 75 6d 62 65 72 2c 0a  nd of a number,.
1acb0 20 20 20 20 20 20 20 20 20 20 2a 2a 20 74 68 65            ** the
1acc0 6e 20 74 68 65 20 73 65 65 6b 20 69 73 20 6e 6f  n the seek is no
1acd0 74 20 70 6f 73 73 69 62 6c 65 2c 20 73 6f 20 6a  t possible, so j
1ace0 75 6d 70 20 74 6f 20 50 32 20 2a 2f 0a 20 20 20  ump to P2 */.   
1acf0 20 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d         pc = pOp-
1ad00 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 20 20 20  >p2 - 1;.       
1ad10 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
1ad20 20 20 7d 0a 20 20 20 20 20 20 20 20 2f 2a 20 49    }.        /* I
1ad30 66 20 77 65 20 72 65 61 63 68 20 74 68 69 73 20  f we reach this 
1ad40 70 6f 69 6e 74 2c 20 74 68 65 6e 20 74 68 65 20  point, then the 
1ad50 50 33 20 76 61 6c 75 65 20 6d 75 73 74 20 62 65  P3 value must be
1ad60 20 61 20 66 6c 6f 61 74 69 6e 67 0a 20 20 20 20   a floating.    
1ad70 20 20 20 20 2a 2a 20 70 6f 69 6e 74 20 6e 75 6d      ** point num
1ad80 62 65 72 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20  ber. */.        
1ad90 61 73 73 65 72 74 28 20 28 70 49 6e 33 2d 3e 66  assert( (pIn3->f
1ada0 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 29  lags & MEM_Real)
1adb0 21 3d 30 20 29 3b 0a 0a 20 20 20 20 20 20 20 20  !=0 );..        
1adc0 69 66 28 20 69 4b 65 79 3d 3d 53 4d 41 4c 4c 45  if( iKey==SMALLE
1add0 53 54 5f 49 4e 54 36 34 20 26 26 20 28 70 49 6e  ST_INT64 && (pIn
1ade0 33 2d 3e 72 3c 28 64 6f 75 62 6c 65 29 69 4b 65  3->r<(double)iKe
1adf0 79 20 7c 7c 20 70 49 6e 33 2d 3e 72 3e 30 29 20  y || pIn3->r>0) 
1ae00 29 7b 0a 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ){.          /* 
1ae10 54 68 65 20 50 33 20 76 61 6c 75 65 20 69 73 20  The P3 value is 
1ae20 74 6f 6f 20 6c 61 72 67 65 20 69 6e 20 6d 61 67  too large in mag
1ae30 6e 69 74 75 64 65 20 74 6f 20 62 65 20 65 78 70  nitude to be exp
1ae40 72 65 73 73 65 64 20 61 73 20 61 6e 0a 20 20 20  ressed as an.   
1ae50 20 20 20 20 20 20 20 2a 2a 20 69 6e 74 65 67 65         ** intege
1ae60 72 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  r. */.          
1ae70 72 65 73 20 3d 20 31 3b 0a 20 20 20 20 20 20 20  res = 1;.       
1ae80 20 20 20 69 66 28 20 70 49 6e 33 2d 3e 72 3c 30     if( pIn3->r<0
1ae90 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20   ){.            
1aea0 69 66 28 20 6f 63 3e 3d 4f 50 5f 53 65 65 6b 47  if( oc>=OP_SeekG
1aeb0 65 20 29 7b 20 20 61 73 73 65 72 74 28 20 6f 63  e ){  assert( oc
1aec0 3d 3d 4f 50 5f 53 65 65 6b 47 65 20 7c 7c 20 6f  ==OP_SeekGe || o
1aed0 63 3d 3d 4f 50 5f 53 65 65 6b 47 74 20 29 3b 0a  c==OP_SeekGt );.
1aee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 63                rc
1aef0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 46   = sqlite3BtreeF
1af00 69 72 73 74 28 70 43 2d 3e 70 43 75 72 73 6f 72  irst(pC->pCursor
1af10 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20 20  , &res);.       
1af20 20 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53         if( rc!=S
1af30 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20  QLITE_OK ) goto 
1af40 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
1af50 6f 72 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  or;.            
1af60 7d 0a 20 20 20 20 20 20 20 20 20 20 7d 65 6c 73  }.          }els
1af70 65 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  e{.            i
1af80 66 28 20 6f 63 3c 3d 4f 50 5f 53 65 65 6b 4c 65  f( oc<=OP_SeekLe
1af90 20 29 7b 20 20 61 73 73 65 72 74 28 20 6f 63 3d   ){  assert( oc=
1afa0 3d 4f 50 5f 53 65 65 6b 4c 74 20 7c 7c 20 6f 63  =OP_SeekLt || oc
1afb0 3d 3d 4f 50 5f 53 65 65 6b 4c 65 20 29 3b 0a 20  ==OP_SeekLe );. 
1afc0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 63 20               rc 
1afd0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61  = sqlite3BtreeLa
1afe0 73 74 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20  st(pC->pCursor, 
1aff0 26 72 65 73 29 3b 0a 20 20 20 20 20 20 20 20 20  &res);.         
1b000 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c       if( rc!=SQL
1b010 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62  ITE_OK ) goto ab
1b020 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
1b030 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a  ;.            }.
1b040 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
1b050 20 20 20 20 20 20 69 66 28 20 72 65 73 20 29 7b        if( res ){
1b060 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 63 20  .            pc 
1b070 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
1b080 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
1b090 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
1b0a0 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 6f 63      }else if( oc
1b0b0 3d 3d 4f 50 5f 53 65 65 6b 4c 74 20 7c 7c 20 6f  ==OP_SeekLt || o
1b0c0 63 3d 3d 4f 50 5f 53 65 65 6b 47 65 20 29 7b 0a  c==OP_SeekGe ){.
1b0d0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65            /* Use
1b0e0 20 74 68 65 20 63 65 69 6c 69 6e 67 28 29 20 66   the ceiling() f
1b0f0 75 6e 63 74 69 6f 6e 20 74 6f 20 63 6f 6e 76 65  unction to conve
1b100 72 74 20 72 65 61 6c 2d 3e 69 6e 74 20 2a 2f 0a  rt real->int */.
1b110 20 20 20 20 20 20 20 20 20 20 69 66 28 20 70 49            if( pI
1b120 6e 33 2d 3e 72 20 3e 20 28 64 6f 75 62 6c 65 29  n3->r > (double)
1b130 69 4b 65 79 20 29 20 69 4b 65 79 2b 2b 3b 0a 20  iKey ) iKey++;. 
1b140 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20         }else{.  
1b150 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 20 74          /* Use t
1b160 68 65 20 66 6c 6f 6f 72 28 29 20 66 75 6e 63 74  he floor() funct
1b170 69 6f 6e 20 74 6f 20 63 6f 6e 76 65 72 74 20 72  ion to convert r
1b180 65 61 6c 2d 3e 69 6e 74 20 2a 2f 0a 20 20 20 20  eal->int */.    
1b190 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6f 63        assert( oc
1b1a0 3d 3d 4f 50 5f 53 65 65 6b 4c 65 20 7c 7c 20 6f  ==OP_SeekLe || o
1b1b0 63 3d 3d 4f 50 5f 53 65 65 6b 47 74 20 29 3b 0a  c==OP_SeekGt );.
1b1c0 20 20 20 20 20 20 20 20 20 20 69 66 28 20 70 49            if( pI
1b1d0 6e 33 2d 3e 72 20 3c 20 28 64 6f 75 62 6c 65 29  n3->r < (double)
1b1e0 69 4b 65 79 20 29 20 69 4b 65 79 2d 2d 3b 0a 20  iKey ) iKey--;. 
1b1f0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d         }.      }
1b200 20 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c   .      rc = sql
1b210 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55  ite3BtreeMovetoU
1b220 6e 70 61 63 6b 65 64 28 70 43 2d 3e 70 43 75 72  npacked(pC->pCur
1b230 73 6f 72 2c 20 30 2c 20 28 75 36 34 29 69 4b 65  sor, 0, (u64)iKe
1b240 79 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 20  y, 0, &res);.   
1b250 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
1b260 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20  E_OK ){.        
1b270 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
1b280 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d  o_error;.      }
1b290 0a 20 20 20 20 20 20 69 66 28 20 72 65 73 3d 3d  .      if( res==
1b2a0 30 20 29 7b 0a 20 20 20 20 20 20 20 20 70 43 2d  0 ){.        pC-
1b2b0 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20  >rowidIsValid = 
1b2c0 31 3b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 6c  1;.        pC->l
1b2d0 61 73 74 52 6f 77 69 64 20 3d 20 69 4b 65 79 3b  astRowid = iKey;
1b2e0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c  .      }.    }el
1b2f0 73 65 7b 0a 20 20 20 20 20 20 6e 46 69 65 6c 64  se{.      nField
1b300 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20   = pOp->p4.i;.  
1b310 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
1b320 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33  >p4type==P4_INT3
1b330 32 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  2 );.      asser
1b340 74 28 20 6e 46 69 65 6c 64 3e 30 20 29 3b 0a 20  t( nField>0 );. 
1b350 20 20 20 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20       r.pKeyInfo 
1b360 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a  = pC->pKeyInfo;.
1b370 20 20 20 20 20 20 72 2e 6e 46 69 65 6c 64 20 3d        r.nField =
1b380 20 28 75 31 36 29 6e 46 69 65 6c 64 3b 0a 0a 20   (u16)nField;.. 
1b390 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 78 74       /* The next
1b3a0 20 6c 69 6e 65 20 6f 66 20 63 6f 64 65 20 63 6f   line of code co
1b3b0 6d 70 75 74 65 73 20 61 73 20 66 6f 6c 6c 6f 77  mputes as follow
1b3c0 73 2c 20 6f 6e 6c 79 20 66 61 73 74 65 72 3a 0a  s, only faster:.
1b3d0 20 20 20 20 20 20 2a 2a 20 20 20 69 66 28 20 6f        **   if( o
1b3e0 63 3d 3d 4f 50 5f 53 65 65 6b 47 74 20 7c 7c 20  c==OP_SeekGt || 
1b3f0 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 65 20 29 7b  oc==OP_SeekLe ){
1b400 0a 20 20 20 20 20 20 2a 2a 20 20 20 20 20 72 2e  .      **     r.
1b410 66 6c 61 67 73 20 3d 20 55 4e 50 41 43 4b 45 44  flags = UNPACKED
1b420 5f 49 4e 43 52 4b 45 59 3b 0a 20 20 20 20 20 20  _INCRKEY;.      
1b430 2a 2a 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  **   }else{.    
1b440 20 20 2a 2a 20 20 20 20 20 72 2e 66 6c 61 67 73    **     r.flags
1b450 20 3d 20 30 3b 0a 20 20 20 20 20 20 2a 2a 20 20   = 0;.      **  
1b460 20 7d 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20   }.      */.    
1b470 20 20 72 2e 66 6c 61 67 73 20 3d 20 28 75 31 36    r.flags = (u16
1b480 29 28 55 4e 50 41 43 4b 45 44 5f 49 4e 43 52 4b  )(UNPACKED_INCRK
1b490 45 59 20 2a 20 28 31 20 26 20 28 6f 63 20 2d 20  EY * (1 & (oc - 
1b4a0 4f 50 5f 53 65 65 6b 4c 74 29 29 29 3b 0a 20 20  OP_SeekLt)));.  
1b4b0 20 20 20 20 61 73 73 65 72 74 28 20 6f 63 21 3d      assert( oc!=
1b4c0 4f 50 5f 53 65 65 6b 47 74 20 7c 7c 20 72 2e 66  OP_SeekGt || r.f
1b4d0 6c 61 67 73 3d 3d 55 4e 50 41 43 4b 45 44 5f 49  lags==UNPACKED_I
1b4e0 4e 43 52 4b 45 59 20 29 3b 0a 20 20 20 20 20 20  NCRKEY );.      
1b4f0 61 73 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53  assert( oc!=OP_S
1b500 65 65 6b 4c 65 20 7c 7c 20 72 2e 66 6c 61 67 73  eekLe || r.flags
1b510 3d 3d 55 4e 50 41 43 4b 45 44 5f 49 4e 43 52 4b  ==UNPACKED_INCRK
1b520 45 59 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  EY );.      asse
1b530 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 47  rt( oc!=OP_SeekG
1b540 65 20 7c 7c 20 72 2e 66 6c 61 67 73 3d 3d 30 20  e || r.flags==0 
1b550 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
1b560 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 4c 74 20 7c   oc!=OP_SeekLt |
1b570 7c 20 72 2e 66 6c 61 67 73 3d 3d 30 20 29 3b 0a  | r.flags==0 );.
1b580 0a 20 20 20 20 20 20 72 2e 61 4d 65 6d 20 3d 20  .      r.aMem = 
1b590 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
1b5a0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
1b5b0 42 55 47 0a 20 20 20 20 20 20 7b 20 69 6e 74 20  BUG.      { int 
1b5c0 69 3b 20 66 6f 72 28 69 3d 30 3b 20 69 3c 72 2e  i; for(i=0; i<r.
1b5d0 6e 46 69 65 6c 64 3b 20 69 2b 2b 29 20 61 73 73  nField; i++) ass
1b5e0 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
1b5f0 26 72 2e 61 4d 65 6d 5b 69 5d 29 20 29 3b 20 7d  &r.aMem[i]) ); }
1b600 0a 23 65 6e 64 69 66 0a 20 20 20 20 20 20 45 78  .#endif.      Ex
1b610 70 61 6e 64 42 6c 6f 62 28 72 2e 61 4d 65 6d 29  pandBlob(r.aMem)
1b620 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  ;.      rc = sql
1b630 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55  ite3BtreeMovetoU
1b640 6e 70 61 63 6b 65 64 28 70 43 2d 3e 70 43 75 72  npacked(pC->pCur
1b650 73 6f 72 2c 20 26 72 2c 20 30 2c 20 30 2c 20 26  sor, &r, 0, 0, &
1b660 72 65 73 29 3b 0a 20 20 20 20 20 20 69 66 28 20  res);.      if( 
1b670 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc!=SQLITE_OK ){
1b680 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62  .        goto ab
1b690 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
1b6a0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
1b6b0 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64  pC->rowidIsValid
1b6c0 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 20 20   = 0;.    }.    
1b6d0 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
1b6e0 74 6f 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e  to = 0;.    pC->
1b6f0 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
1b700 43 48 45 5f 53 54 41 4c 45 3b 0a 23 69 66 64 65  CHE_STALE;.#ifde
1b710 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20  f SQLITE_TEST.  
1b720 20 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68    sqlite3_search
1b730 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66  _count++;.#endif
1b740 0a 20 20 20 20 69 66 28 20 6f 63 3e 3d 4f 50 5f  .    if( oc>=OP_
1b750 53 65 65 6b 47 65 20 29 7b 20 20 61 73 73 65 72  SeekGe ){  asser
1b760 74 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 65  t( oc==OP_SeekGe
1b770 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47   || oc==OP_SeekG
1b780 74 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72  t );.      if( r
1b790 65 73 3c 30 20 7c 7c 20 28 72 65 73 3d 3d 30 20  es<0 || (res==0 
1b7a0 26 26 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 74  && oc==OP_SeekGt
1b7b0 29 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20  ) ){.        rc 
1b7c0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4e 65  = sqlite3BtreeNe
1b7d0 78 74 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20  xt(pC->pCursor, 
1b7e0 26 72 65 73 29 3b 0a 20 20 20 20 20 20 20 20 69  &res);.        i
1b7f0 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
1b800 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
1b810 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
1b820 20 20 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56      pC->rowidIsV
1b830 61 6c 69 64 20 3d 20 30 3b 0a 20 20 20 20 20 20  alid = 0;.      
1b840 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 72  }else{.        r
1b850 65 73 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a  es = 0;.      }.
1b860 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
1b870 20 61 73 73 65 72 74 28 20 6f 63 3d 3d 4f 50 5f   assert( oc==OP_
1b880 53 65 65 6b 4c 74 20 7c 7c 20 6f 63 3d 3d 4f 50  SeekLt || oc==OP
1b890 5f 53 65 65 6b 4c 65 20 29 3b 0a 20 20 20 20 20  _SeekLe );.     
1b8a0 20 69 66 28 20 72 65 73 3e 30 20 7c 7c 20 28 72   if( res>0 || (r
1b8b0 65 73 3d 3d 30 20 26 26 20 6f 63 3d 3d 4f 50 5f  es==0 && oc==OP_
1b8c0 53 65 65 6b 4c 74 29 20 29 7b 0a 20 20 20 20 20  SeekLt) ){.     
1b8d0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
1b8e0 74 72 65 65 50 72 65 76 69 6f 75 73 28 70 43 2d  treePrevious(pC-
1b8f0 3e 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29 3b  >pCursor, &res);
1b900 0a 20 20 20 20 20 20 20 20 69 66 28 20 72 63 21  .        if( rc!
1b910 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74  =SQLITE_OK ) got
1b920 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
1b930 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 70 43  rror;.        pC
1b940 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d  ->rowidIsValid =
1b950 20 30 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b   0;.      }else{
1b960 0a 20 20 20 20 20 20 20 20 2f 2a 20 72 65 73 20  .        /* res 
1b970 6d 69 67 68 74 20 62 65 20 6e 65 67 61 74 69 76  might be negativ
1b980 65 20 62 65 63 61 75 73 65 20 74 68 65 20 74 61  e because the ta
1b990 62 6c 65 20 69 73 20 65 6d 70 74 79 2e 20 20 43  ble is empty.  C
1b9a0 68 65 63 6b 20 74 6f 0a 20 20 20 20 20 20 20 20  heck to.        
1b9b0 2a 2a 20 73 65 65 20 69 66 20 74 68 69 73 20 69  ** see if this i
1b9c0 73 20 74 68 65 20 63 61 73 65 2e 0a 20 20 20 20  s the case..    
1b9d0 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 20 20 72      */.        r
1b9e0 65 73 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  es = sqlite3Btre
1b9f0 65 45 6f 66 28 70 43 2d 3e 70 43 75 72 73 6f 72  eEof(pC->pCursor
1ba00 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
1ba10 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
1ba20 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 20 20 69 66  ->p2>0 );.    if
1ba30 28 20 72 65 73 20 29 7b 0a 20 20 20 20 20 20 70  ( res ){.      p
1ba40 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
1ba50 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a  .    }.  }else{.
1ba60 20 20 20 20 2f 2a 20 54 68 69 73 20 68 61 70 70      /* This happ
1ba70 65 6e 73 20 77 68 65 6e 20 61 74 74 65 6d 70 74  ens when attempt
1ba80 69 6e 67 20 74 6f 20 6f 70 65 6e 20 74 68 65 20  ing to open the 
1ba90 73 71 6c 69 74 65 33 5f 6d 61 73 74 65 72 20 74  sqlite3_master t
1baa0 61 62 6c 65 0a 20 20 20 20 2a 2a 20 66 6f 72 20  able.    ** for 
1bab0 72 65 61 64 20 61 63 63 65 73 73 20 72 65 74 75  read access retu
1bac0 72 6e 73 20 53 51 4c 49 54 45 5f 45 4d 50 54 59  rns SQLITE_EMPTY
1bad0 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65 20 61  . In this case a
1bae0 6c 77 61 79 73 0a 20 20 20 20 2a 2a 20 74 61 6b  lways.    ** tak
1baf0 65 20 74 68 65 20 6a 75 6d 70 20 28 73 69 6e 63  e the jump (sinc
1bb00 65 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72  e there are no r
1bb10 65 63 6f 72 64 73 20 69 6e 20 74 68 65 20 74 61  ecords in the ta
1bb20 62 6c 65 29 2e 0a 20 20 20 20 2a 2f 0a 20 20 20  ble)..    */.   
1bb30 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
1bb40 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  1;.  }.  break;.
1bb50 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65  }../* Opcode: Se
1bb60 65 6b 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  ek P1 P2 * * *.*
1bb70 2a 0a 2a 2a 20 50 31 20 69 73 20 61 6e 20 6f 70  *.** P1 is an op
1bb80 65 6e 20 74 61 62 6c 65 20 63 75 72 73 6f 72 20  en table cursor 
1bb90 61 6e 64 20 50 32 20 69 73 20 61 20 72 6f 77 69  and P2 is a rowi
1bba0 64 20 69 6e 74 65 67 65 72 2e 20 20 41 72 72 61  d integer.  Arra
1bbb0 6e 67 65 0a 2a 2a 20 66 6f 72 20 50 31 20 74 6f  nge.** for P1 to
1bbc0 20 6d 6f 76 65 20 73 6f 20 74 68 61 74 20 69 74   move so that it
1bbd0 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 72   points to the r
1bbe0 6f 77 69 64 20 67 69 76 65 6e 20 62 79 20 50 32  owid given by P2
1bbf0 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20  ..**.** This is 
1bc00 61 63 74 75 61 6c 6c 79 20 61 20 64 65 66 65 72  actually a defer
1bc10 72 65 64 20 73 65 65 6b 2e 20 20 4e 6f 74 68 69  red seek.  Nothi
1bc20 6e 67 20 61 63 74 75 61 6c 6c 79 20 68 61 70 70  ng actually happ
1bc30 65 6e 73 20 75 6e 74 69 6c 0a 2a 2a 20 74 68 65  ens until.** the
1bc40 20 63 75 72 73 6f 72 20 69 73 20 75 73 65 64 20   cursor is used 
1bc50 74 6f 20 72 65 61 64 20 61 20 72 65 63 6f 72 64  to read a record
1bc60 2e 20 20 54 68 61 74 20 77 61 79 2c 20 69 66 20  .  That way, if 
1bc70 6e 6f 20 72 65 61 64 73 0a 2a 2a 20 6f 63 63 75  no reads.** occu
1bc80 72 2c 20 6e 6f 20 75 6e 6e 65 63 65 73 73 61 72  r, no unnecessar
1bc90 79 20 49 2f 4f 20 68 61 70 70 65 6e 73 2e 0a 2a  y I/O happens..*
1bca0 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 3a 20  /.case OP_Seek: 
1bcb0 7b 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20  {    /* in2 */. 
1bcc0 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
1bcd0 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
1bce0 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
1bcf0 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
1bd00 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
1bd10 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
1bd20 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 69  rt( pC!=0 );.  i
1bd30 66 28 20 41 4c 57 41 59 53 28 70 43 2d 3e 70 43  f( ALWAYS(pC->pC
1bd40 75 72 73 6f 72 21 3d 30 29 20 29 7b 0a 20 20 20  ursor!=0) ){.   
1bd50 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54   assert( pC->isT
1bd60 61 62 6c 65 20 29 3b 0a 20 20 20 20 70 43 2d 3e  able );.    pC->
1bd70 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 20  nullRow = 0;.   
1bd80 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn2 = &aMem[pO
1bd90 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 70 43 2d 3e  p->p2];.    pC->
1bda0 6d 6f 76 65 74 6f 54 61 72 67 65 74 20 3d 20 73  movetoTarget = s
1bdb0 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c  qlite3VdbeIntVal
1bdc0 75 65 28 70 49 6e 32 29 3b 0a 20 20 20 20 70 43  ue(pIn2);.    pC
1bdd0 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d  ->rowidIsValid =
1bde0 20 30 3b 0a 20 20 20 20 70 43 2d 3e 64 65 66 65   0;.    pC->defe
1bdf0 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 31 3b 0a  rredMoveto = 1;.
1be00 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 20    }.  break;.}. 
1be10 20 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 6f   ../* Opcode: Fo
1be20 75 6e 64 20 50 31 20 50 32 20 50 33 20 50 34 20  und P1 P2 P3 P4 
1be30 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 3d 3d 30  *.**.** If P4==0
1be40 20 74 68 65 6e 20 72 65 67 69 73 74 65 72 20 50   then register P
1be50 33 20 68 6f 6c 64 73 20 61 20 62 6c 6f 62 20 63  3 holds a blob c
1be60 6f 6e 73 74 72 75 63 74 65 64 20 62 79 20 4d 61  onstructed by Ma
1be70 6b 65 52 65 63 6f 72 64 2e 20 20 49 66 0a 2a 2a  keRecord.  If.**
1be80 20 50 34 3e 30 20 74 68 65 6e 20 72 65 67 69 73   P4>0 then regis
1be90 74 65 72 20 50 33 20 69 73 20 74 68 65 20 66 69  ter P3 is the fi
1bea0 72 73 74 20 6f 66 20 50 34 20 72 65 67 69 73 74  rst of P4 regist
1beb0 65 72 73 20 74 68 61 74 20 66 6f 72 6d 20 61 6e  ers that form an
1bec0 20 75 6e 70 61 63 6b 65 64 0a 2a 2a 20 72 65 63   unpacked.** rec
1bed0 6f 72 64 2e 0a 2a 2a 0a 2a 2a 20 43 75 72 73 6f  ord..**.** Curso
1bee0 72 20 50 31 20 69 73 20 6f 6e 20 61 6e 20 69 6e  r P1 is on an in
1bef0 64 65 78 20 62 74 72 65 65 2e 20 20 49 66 20 74  dex btree.  If t
1bf00 68 65 20 72 65 63 6f 72 64 20 69 64 65 6e 74 69  he record identi
1bf10 66 69 65 64 20 62 79 20 50 33 20 61 6e 64 20 50  fied by P3 and P
1bf20 34 0a 2a 2a 20 69 73 20 61 20 70 72 65 66 69 78  4.** is a prefix
1bf30 20 6f 66 20 61 6e 79 20 65 6e 74 72 79 20 69 6e   of any entry in
1bf40 20 50 31 20 74 68 65 6e 20 61 20 6a 75 6d 70 20   P1 then a jump 
1bf50 69 73 20 6d 61 64 65 20 74 6f 20 50 32 20 61 6e  is made to P2 an
1bf60 64 0a 2a 2a 20 50 31 20 69 73 20 6c 65 66 74 20  d.** P1 is left 
1bf70 70 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 65 20  pointing at the 
1bf80 6d 61 74 63 68 69 6e 67 20 65 6e 74 72 79 2e 0a  matching entry..
1bf90 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f  */./* Opcode: No
1bfa0 74 46 6f 75 6e 64 20 50 31 20 50 32 20 50 33 20  tFound P1 P2 P3 
1bfb0 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34  P4 *.**.** If P4
1bfc0 3d 3d 30 20 74 68 65 6e 20 72 65 67 69 73 74 65  ==0 then registe
1bfd0 72 20 50 33 20 68 6f 6c 64 73 20 61 20 62 6c 6f  r P3 holds a blo
1bfe0 62 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79  b constructed by
1bff0 20 4d 61 6b 65 52 65 63 6f 72 64 2e 20 20 49 66   MakeRecord.  If
1c000 0a 2a 2a 20 50 34 3e 30 20 74 68 65 6e 20 72 65  .** P4>0 then re
1c010 67 69 73 74 65 72 20 50 33 20 69 73 20 74 68 65  gister P3 is the
1c020 20 66 69 72 73 74 20 6f 66 20 50 34 20 72 65 67   first of P4 reg
1c030 69 73 74 65 72 73 20 74 68 61 74 20 66 6f 72 6d  isters that form
1c040 20 61 6e 20 75 6e 70 61 63 6b 65 64 0a 2a 2a 20   an unpacked.** 
1c050 72 65 63 6f 72 64 2e 0a 2a 2a 20 0a 2a 2a 20 43  record..** .** C
1c060 75 72 73 6f 72 20 50 31 20 69 73 20 6f 6e 20 61  ursor P1 is on a
1c070 6e 20 69 6e 64 65 78 20 62 74 72 65 65 2e 20 20  n index btree.  
1c080 49 66 20 74 68 65 20 72 65 63 6f 72 64 20 69 64  If the record id
1c090 65 6e 74 69 66 69 65 64 20 62 79 20 50 33 20 61  entified by P3 a
1c0a0 6e 64 20 50 34 0a 2a 2a 20 69 73 20 6e 6f 74 20  nd P4.** is not 
1c0b0 74 68 65 20 70 72 65 66 69 78 20 6f 66 20 61 6e  the prefix of an
1c0c0 79 20 65 6e 74 72 79 20 69 6e 20 50 31 20 74 68  y entry in P1 th
1c0d0 65 6e 20 61 20 6a 75 6d 70 20 69 73 20 6d 61 64  en a jump is mad
1c0e0 65 20 74 6f 20 50 32 2e 20 20 49 66 20 50 31 20  e to P2.  If P1 
1c0f0 0a 2a 2a 20 64 6f 65 73 20 63 6f 6e 74 61 69 6e  .** does contain
1c100 20 61 6e 20 65 6e 74 72 79 20 77 68 6f 73 65 20   an entry whose 
1c110 70 72 65 66 69 78 20 6d 61 74 63 68 65 73 20 74  prefix matches t
1c120 68 65 20 50 33 2f 50 34 20 72 65 63 6f 72 64 20  he P3/P4 record 
1c130 74 68 65 6e 20 63 6f 6e 74 72 6f 6c 0a 2a 2a 20  then control.** 
1c140 66 61 6c 6c 73 20 74 68 72 6f 75 67 68 20 74 6f  falls through to
1c150 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75   the next instru
1c160 63 74 69 6f 6e 20 61 6e 64 20 50 31 20 69 73 20  ction and P1 is 
1c170 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67 20 61 74  left pointing at
1c180 20 74 68 65 0a 2a 2a 20 6d 61 74 63 68 69 6e 67   the.** matching
1c190 20 65 6e 74 72 79 2e 0a 2a 2a 0a 2a 2a 20 53 65   entry..**.** Se
1c1a0 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e  e also: Found, N
1c1b0 6f 74 45 78 69 73 74 73 2c 20 49 73 55 6e 69 71  otExists, IsUniq
1c1c0 75 65 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f  ue.*/.case OP_No
1c1d0 74 46 6f 75 6e 64 3a 20 20 20 20 20 20 20 2f 2a  tFound:       /*
1c1e0 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61   jump, in3 */.ca
1c1f0 73 65 20 4f 50 5f 46 6f 75 6e 64 3a 20 7b 20 20  se OP_Found: {  
1c200 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
1c210 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 61 6c 72 65  n3 */.  int alre
1c220 61 64 79 45 78 69 73 74 73 3b 0a 20 20 56 64 62  adyExists;.  Vdb
1c230 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69  eCursor *pC;.  i
1c240 6e 74 20 72 65 73 3b 0a 20 20 55 6e 70 61 63 6b  nt res;.  Unpack
1c250 65 64 52 65 63 6f 72 64 20 2a 70 49 64 78 4b 65  edRecord *pIdxKe
1c260 79 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63  y;.  UnpackedRec
1c270 6f 72 64 20 72 3b 0a 20 20 63 68 61 72 20 61 54  ord r;.  char aT
1c280 65 6d 70 52 65 63 5b 52 4f 55 4e 44 38 28 73 69  empRec[ROUND8(si
1c290 7a 65 6f 66 28 55 6e 70 61 63 6b 65 64 52 65 63  zeof(UnpackedRec
1c2a0 6f 72 64 29 29 20 2b 20 73 69 7a 65 6f 66 28 4d  ord)) + sizeof(M
1c2b0 65 6d 29 2a 33 20 2b 20 37 5d 3b 0a 0a 23 69 66  em)*3 + 7];..#if
1c2c0 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a  def SQLITE_TEST.
1c2d0 20 20 73 71 6c 69 74 65 33 5f 66 6f 75 6e 64 5f    sqlite3_found_
1c2e0 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a  count++;.#endif.
1c2f0 0a 20 20 61 6c 72 65 61 64 79 45 78 69 73 74 73  .  alreadyExists
1c300 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20   = 0;.  assert( 
1c310 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
1c320 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
1c330 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
1c340 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e  p->p4type==P4_IN
1c350 54 33 32 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  T32 );.  pC = p-
1c360 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
1c370 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
1c380 20 29 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d   );.  pIn3 = &aM
1c390 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69  em[pOp->p3];.  i
1c3a0 66 28 20 41 4c 57 41 59 53 28 70 43 2d 3e 70 43  f( ALWAYS(pC->pC
1c3b0 75 72 73 6f 72 21 3d 30 29 20 29 7b 0a 0a 20 20  ursor!=0) ){..  
1c3c0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73    assert( pC->is
1c3d0 54 61 62 6c 65 3d 3d 30 20 29 3b 0a 20 20 20 20  Table==0 );.    
1c3e0 69 66 28 20 70 4f 70 2d 3e 70 34 2e 69 3e 30 20  if( pOp->p4.i>0 
1c3f0 29 7b 0a 20 20 20 20 20 20 72 2e 70 4b 65 79 49  ){.      r.pKeyI
1c400 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e  nfo = pC->pKeyIn
1c410 66 6f 3b 0a 20 20 20 20 20 20 72 2e 6e 46 69 65  fo;.      r.nFie
1c420 6c 64 20 3d 20 28 75 31 36 29 70 4f 70 2d 3e 70  ld = (u16)pOp->p
1c430 34 2e 69 3b 0a 20 20 20 20 20 20 72 2e 61 4d 65  4.i;.      r.aMe
1c440 6d 20 3d 20 70 49 6e 33 3b 0a 23 69 66 64 65 66  m = pIn3;.#ifdef
1c450 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
1c460 20 20 20 20 7b 20 69 6e 74 20 69 3b 20 66 6f 72      { int i; for
1c470 28 69 3d 30 3b 20 69 3c 72 2e 6e 46 69 65 6c 64  (i=0; i<r.nField
1c480 3b 20 69 2b 2b 29 20 61 73 73 65 72 74 28 20 6d  ; i++) assert( m
1c490 65 6d 49 73 56 61 6c 69 64 28 26 72 2e 61 4d 65  emIsValid(&r.aMe
1c4a0 6d 5b 69 5d 29 20 29 3b 20 7d 0a 23 65 6e 64 69  m[i]) ); }.#endi
1c4b0 66 0a 20 20 20 20 20 20 72 2e 66 6c 61 67 73 20  f.      r.flags 
1c4c0 3d 20 55 4e 50 41 43 4b 45 44 5f 50 52 45 46 49  = UNPACKED_PREFI
1c4d0 58 5f 4d 41 54 43 48 3b 0a 20 20 20 20 20 20 70  X_MATCH;.      p
1c4e0 49 64 78 4b 65 79 20 3d 20 26 72 3b 0a 20 20 20  IdxKey = &r;.   
1c4f0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 61 73   }else{.      as
1c500 73 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67  sert( pIn3->flag
1c510 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a  s & MEM_Blob );.
1c520 20 20 20 20 20 20 45 78 70 61 6e 64 42 6c 6f 62        ExpandBlob
1c530 28 70 49 6e 33 29 3b 0a 20 20 20 20 20 20 70 49  (pIn3);.      pI
1c540 64 78 4b 65 79 20 3d 20 73 71 6c 69 74 65 33 56  dxKey = sqlite3V
1c550 64 62 65 52 65 63 6f 72 64 55 6e 70 61 63 6b 28  dbeRecordUnpack(
1c560 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 2c 20 70 49  pC->pKeyInfo, pI
1c570 6e 33 2d 3e 6e 2c 20 70 49 6e 33 2d 3e 7a 2c 0a  n3->n, pIn3->z,.
1c580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c5a0 20 20 20 20 20 20 20 20 61 54 65 6d 70 52 65 63          aTempRec
1c5b0 2c 20 73 69 7a 65 6f 66 28 61 54 65 6d 70 52 65  , sizeof(aTempRe
1c5c0 63 29 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70  c));.      if( p
1c5d0 49 64 78 4b 65 79 3d 3d 30 20 29 7b 0a 20 20 20  IdxKey==0 ){.   
1c5e0 20 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d       goto no_mem
1c5f0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
1c600 70 49 64 78 4b 65 79 2d 3e 66 6c 61 67 73 20 7c  pIdxKey->flags |
1c610 3d 20 55 4e 50 41 43 4b 45 44 5f 50 52 45 46 49  = UNPACKED_PREFI
1c620 58 5f 4d 41 54 43 48 3b 0a 20 20 20 20 7d 0a 20  X_MATCH;.    }. 
1c630 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
1c640 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b  treeMovetoUnpack
1c650 65 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20  ed(pC->pCursor, 
1c660 70 49 64 78 4b 65 79 2c 20 30 2c 20 30 2c 20 26  pIdxKey, 0, 0, &
1c670 72 65 73 29 3b 0a 20 20 20 20 69 66 28 20 70 4f  res);.    if( pO
1c680 70 2d 3e 70 34 2e 69 3d 3d 30 20 29 7b 0a 20 20  p->p4.i==0 ){.  
1c690 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 44      sqlite3VdbeD
1c6a0 65 6c 65 74 65 55 6e 70 61 63 6b 65 64 52 65 63  eleteUnpackedRec
1c6b0 6f 72 64 28 70 49 64 78 4b 65 79 29 3b 0a 20 20  ord(pIdxKey);.  
1c6c0 20 20 7d 0a 20 20 20 20 69 66 28 20 72 63 21 3d    }.    if( rc!=
1c6d0 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
1c6e0 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a     break;.    }.
1c6f0 20 20 20 20 61 6c 72 65 61 64 79 45 78 69 73 74      alreadyExist
1c700 73 20 3d 20 28 72 65 73 3d 3d 30 29 3b 0a 20 20  s = (res==0);.  
1c710 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f    pC->deferredMo
1c720 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20 20 70 43  veto = 0;.    pC
1c730 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
1c740 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 7d  CACHE_STALE;.  }
1c750 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f  .  if( pOp->opco
1c760 64 65 3d 3d 4f 50 5f 46 6f 75 6e 64 20 29 7b 0a  de==OP_Found ){.
1c770 20 20 20 20 69 66 28 20 61 6c 72 65 61 64 79 45      if( alreadyE
1c780 78 69 73 74 73 20 29 20 70 63 20 3d 20 70 4f 70  xists ) pc = pOp
1c790 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 65 6c 73  ->p2 - 1;.  }els
1c7a0 65 7b 0a 20 20 20 20 69 66 28 20 21 61 6c 72 65  e{.    if( !alre
1c7b0 61 64 79 45 78 69 73 74 73 20 29 20 70 63 20 3d  adyExists ) pc =
1c7c0 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
1c7d0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
1c7e0 20 4f 70 63 6f 64 65 3a 20 49 73 55 6e 69 71 75   Opcode: IsUniqu
1c7f0 65 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a  e P1 P2 P3 P4 *.
1c800 2a 2a 0a 2a 2a 20 43 75 72 73 6f 72 20 50 31 20  **.** Cursor P1 
1c810 69 73 20 6f 70 65 6e 20 6f 6e 20 61 6e 20 69 6e  is open on an in
1c820 64 65 78 20 62 2d 74 72 65 65 20 2d 20 74 68 61  dex b-tree - tha
1c830 74 20 69 73 20 74 6f 20 73 61 79 2c 20 61 20 62  t is to say, a b
1c840 74 72 65 65 20 77 68 69 63 68 0a 2a 2a 20 6e 6f  tree which.** no
1c850 20 64 61 74 61 20 61 6e 64 20 77 68 65 72 65 20   data and where 
1c860 74 68 65 20 6b 65 79 20 61 72 65 20 72 65 63 6f  the key are reco
1c870 72 64 73 20 67 65 6e 65 72 61 74 65 64 20 62 79  rds generated by
1c880 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64 20 77   OP_MakeRecord w
1c890 69 74 68 0a 2a 2a 20 74 68 65 20 6c 69 73 74 20  ith.** the list 
1c8a0 66 69 65 6c 64 20 62 65 69 6e 67 20 74 68 65 20  field being the 
1c8b0 69 6e 74 65 67 65 72 20 52 4f 57 49 44 20 6f 66  integer ROWID of
1c8c0 20 74 68 65 20 65 6e 74 72 79 20 74 68 61 74 20   the entry that 
1c8d0 74 68 65 20 69 6e 64 65 78 0a 2a 2a 20 65 6e 74  the index.** ent
1c8e0 72 79 20 72 65 66 65 72 73 20 74 6f 2e 0a 2a 2a  ry refers to..**
1c8f0 0a 2a 2a 20 54 68 65 20 50 33 20 72 65 67 69 73  .** The P3 regis
1c900 74 65 72 20 63 6f 6e 74 61 69 6e 73 20 61 6e 20  ter contains an 
1c910 69 6e 74 65 67 65 72 20 72 65 63 6f 72 64 20 6e  integer record n
1c920 75 6d 62 65 72 2e 20 43 61 6c 6c 20 74 68 69 73  umber. Call this
1c930 20 72 65 63 6f 72 64 20 0a 2a 2a 20 6e 75 6d 62   record .** numb
1c940 65 72 20 52 2e 20 52 65 67 69 73 74 65 72 20 50  er R. Register P
1c950 34 20 69 73 20 74 68 65 20 66 69 72 73 74 20 69  4 is the first i
1c960 6e 20 61 20 73 65 74 20 6f 66 20 4e 20 63 6f 6e  n a set of N con
1c970 74 69 67 75 6f 75 73 20 72 65 67 69 73 74 65 72  tiguous register
1c980 73 0a 2a 2a 20 74 68 61 74 20 6d 61 6b 65 20 75  s.** that make u
1c990 70 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e  p an unpacked in
1c9a0 64 65 78 20 6b 65 79 20 74 68 61 74 20 63 61 6e  dex key that can
1c9b0 20 62 65 20 75 73 65 64 20 77 69 74 68 20 63 75   be used with cu
1c9c0 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 54 68 65 20  rsor P1..** The 
1c9d0 76 61 6c 75 65 20 6f 66 20 4e 20 63 61 6e 20 62  value of N can b
1c9e0 65 20 69 6e 66 65 72 72 65 64 20 66 72 6f 6d 20  e inferred from 
1c9f0 74 68 65 20 63 75 72 73 6f 72 2e 20 4e 20 69 6e  the cursor. N in
1ca00 63 6c 75 64 65 73 20 74 68 65 20 72 6f 77 69 64  cludes the rowid
1ca10 0a 2a 2a 20 76 61 6c 75 65 20 61 70 70 65 6e 64  .** value append
1ca20 65 64 20 74 6f 20 74 68 65 20 65 6e 64 20 6f 66  ed to the end of
1ca30 20 74 68 65 20 69 6e 64 65 78 20 72 65 63 6f 72   the index recor
1ca40 64 2e 20 54 68 69 73 20 72 6f 77 69 64 20 76 61  d. This rowid va
1ca50 6c 75 65 20 6d 61 79 0a 2a 2a 20 6f 72 20 6d 61  lue may.** or ma
1ca60 79 20 6e 6f 74 20 62 65 20 74 68 65 20 73 61 6d  y not be the sam
1ca70 65 20 61 73 20 52 2e 0a 2a 2a 0a 2a 2a 20 49 66  e as R..**.** If
1ca80 20 61 6e 79 20 6f 66 20 74 68 65 20 4e 20 72 65   any of the N re
1ca90 67 69 73 74 65 72 73 20 62 65 67 69 6e 6e 69 6e  gisters beginnin
1caa0 67 20 77 69 74 68 20 72 65 67 69 73 74 65 72 20  g with register 
1cab0 50 34 20 63 6f 6e 74 61 69 6e 73 20 61 20 4e 55  P4 contains a NU
1cac0 4c 4c 0a 2a 2a 20 76 61 6c 75 65 2c 20 6a 75 6d  LL.** value, jum
1cad0 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f  p immediately to
1cae0 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 4f 74 68 65 72   P2..**.** Other
1caf0 77 69 73 65 2c 20 74 68 69 73 20 69 6e 73 74 72  wise, this instr
1cb00 75 63 74 69 6f 6e 20 63 68 65 63 6b 73 20 69 66  uction checks if
1cb10 20 63 75 72 73 6f 72 20 50 31 20 63 6f 6e 74 61   cursor P1 conta
1cb20 69 6e 73 20 61 6e 20 65 6e 74 72 79 0a 2a 2a 20  ins an entry.** 
1cb30 77 68 65 72 65 20 74 68 65 20 66 69 72 73 74 20  where the first 
1cb40 28 4e 2d 31 29 20 66 69 65 6c 64 73 20 6d 61 74  (N-1) fields mat
1cb50 63 68 20 62 75 74 20 74 68 65 20 72 6f 77 69 64  ch but the rowid
1cb60 20 76 61 6c 75 65 20 61 74 20 74 68 65 20 65 6e   value at the en
1cb70 64 0a 2a 2a 20 6f 66 20 74 68 65 20 69 6e 64 65  d.** of the inde
1cb80 78 20 65 6e 74 72 79 20 69 73 20 6e 6f 74 20 52  x entry is not R
1cb90 2e 20 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f  . If there is no
1cba0 20 73 75 63 68 20 65 6e 74 72 79 2c 20 63 6f 6e   such entry, con
1cbb0 74 72 6f 6c 20 6a 75 6d 70 73 0a 2a 2a 20 74 6f  trol jumps.** to
1cbc0 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 50 32 2e   instruction P2.
1cbd0 20 4f 74 68 65 72 77 69 73 65 2c 20 74 68 65 20   Otherwise, the 
1cbe0 72 6f 77 69 64 20 6f 66 20 74 68 65 20 63 6f 6e  rowid of the con
1cbf0 66 6c 69 63 74 69 6e 67 20 69 6e 64 65 78 0a 2a  flicting index.*
1cc00 2a 20 65 6e 74 72 79 20 69 73 20 63 6f 70 69 65  * entry is copie
1cc10 64 20 74 6f 20 72 65 67 69 73 74 65 72 20 50 33  d to register P3
1cc20 20 61 6e 64 20 63 6f 6e 74 72 6f 6c 20 66 61 6c   and control fal
1cc30 6c 73 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  ls through to th
1cc40 65 20 6e 65 78 74 0a 2a 2a 20 69 6e 73 74 72 75  e next.** instru
1cc50 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  ction..**.** See
1cc60 20 61 6c 73 6f 3a 20 4e 6f 74 46 6f 75 6e 64 2c   also: NotFound,
1cc70 20 4e 6f 74 45 78 69 73 74 73 2c 20 46 6f 75 6e   NotExists, Foun
1cc80 64 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 73 55  d.*/.case OP_IsU
1cc90 6e 69 71 75 65 3a 20 7b 20 20 20 20 20 20 20 20  nique: {        
1cca0 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a  /* jump, in3 */.
1ccb0 20 20 75 31 36 20 69 69 3b 0a 20 20 56 64 62 65    u16 ii;.  Vdbe
1ccc0 43 75 72 73 6f 72 20 2a 70 43 78 3b 0a 20 20 42  Cursor *pCx;.  B
1ccd0 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a  tCursor *pCrsr;.
1cce0 20 20 75 31 36 20 6e 46 69 65 6c 64 3b 0a 20 20    u16 nField;.  
1ccf0 4d 65 6d 20 2a 61 4d 78 3b 0a 20 20 55 6e 70 61  Mem *aMx;.  Unpa
1cd00 63 6b 65 64 52 65 63 6f 72 64 20 72 3b 20 20 20  ckedRecord r;   
1cd10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1cd20 2a 20 42 2d 54 72 65 65 20 69 6e 64 65 78 20 73  * B-Tree index s
1cd30 65 61 72 63 68 20 6b 65 79 20 2a 2f 0a 20 20 69  earch key */.  i
1cd40 36 34 20 52 3b 20 20 20 20 20 20 20 20 20 20 20  64 R;           
1cd50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cd60 20 20 2f 2a 20 52 6f 77 69 64 20 73 74 6f 72 65    /* Rowid store
1cd70 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  d in register P3
1cd80 20 2a 2f 0a 0a 20 20 70 49 6e 33 20 3d 20 26 61   */..  pIn3 = &a
1cd90 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
1cda0 61 4d 78 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  aMx = &aMem[pOp-
1cdb0 3e 70 34 2e 69 5d 3b 0a 20 20 2f 2a 20 41 73 73  >p4.i];.  /* Ass
1cdc0 65 72 74 20 74 68 61 74 20 74 68 65 20 76 61 6c  ert that the val
1cdd0 75 65 73 20 6f 66 20 70 61 72 61 6d 65 74 65 72  ues of parameter
1cde0 73 20 50 31 20 61 6e 64 20 50 34 20 61 72 65 20  s P1 and P4 are 
1cdf0 69 6e 20 72 61 6e 67 65 2e 20 2a 2f 0a 20 20 61  in range. */.  a
1ce00 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79  ssert( pOp->p4ty
1ce10 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a  pe==P4_INT32 );.
1ce20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1ce30 34 2e 69 3e 30 20 26 26 20 70 4f 70 2d 3e 70 34  4.i>0 && pOp->p4
1ce40 2e 69 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20  .i<=p->nMem );. 
1ce50 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
1ce60 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
1ce70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 0a 20 20  ->nCursor );..  
1ce80 2f 2a 20 46 69 6e 64 20 74 68 65 20 69 6e 64 65  /* Find the inde
1ce90 78 20 63 75 72 73 6f 72 2e 20 2a 2f 0a 20 20 70  x cursor. */.  p
1cea0 43 78 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  Cx = p->apCsr[pO
1ceb0 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
1cec0 28 20 70 43 78 2d 3e 64 65 66 65 72 72 65 64 4d  ( pCx->deferredM
1ced0 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 70 43  oveto==0 );.  pC
1cee0 78 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d 20  x->seekResult = 
1cef0 30 3b 0a 20 20 70 43 78 2d 3e 63 61 63 68 65 53  0;.  pCx->cacheS
1cf00 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
1cf10 41 4c 45 3b 0a 20 20 70 43 72 73 72 20 3d 20 70  ALE;.  pCrsr = p
1cf20 43 78 2d 3e 70 43 75 72 73 6f 72 3b 0a 0a 20 20  Cx->pCursor;..  
1cf30 2f 2a 20 49 66 20 61 6e 79 20 6f 66 20 74 68 65  /* If any of the
1cf40 20 76 61 6c 75 65 73 20 61 72 65 20 4e 55 4c 4c   values are NULL
1cf50 2c 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 2e  , take the jump.
1cf60 20 2a 2f 0a 20 20 6e 46 69 65 6c 64 20 3d 20 70   */.  nField = p
1cf70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46  Cx->pKeyInfo->nF
1cf80 69 65 6c 64 3b 0a 20 20 66 6f 72 28 69 69 3d 30  ield;.  for(ii=0
1cf90 3b 20 69 69 3c 6e 46 69 65 6c 64 3b 20 69 69 2b  ; ii<nField; ii+
1cfa0 2b 29 7b 0a 20 20 20 20 69 66 28 20 61 4d 78 5b  +){.    if( aMx[
1cfb0 69 69 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  ii].flags & MEM_
1cfc0 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 20 20 70 63  Null ){.      pc
1cfd0 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
1cfe0 20 20 20 20 20 20 70 43 72 73 72 20 3d 20 30 3b        pCrsr = 0;
1cff0 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  .      break;.  
1d000 20 20 7d 0a 20 20 7d 0a 20 20 61 73 73 65 72 74    }.  }.  assert
1d010 28 20 28 61 4d 78 5b 6e 46 69 65 6c 64 5d 2e 66  ( (aMx[nField].f
1d020 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29  lags & MEM_Null)
1d030 3d 3d 30 20 29 3b 0a 0a 20 20 69 66 28 20 70 43  ==0 );..  if( pC
1d040 72 73 72 21 3d 30 20 29 7b 0a 20 20 20 20 2f 2a  rsr!=0 ){.    /*
1d050 20 50 6f 70 75 6c 61 74 65 20 74 68 65 20 69 6e   Populate the in
1d060 64 65 78 20 73 65 61 72 63 68 20 6b 65 79 2e 20  dex search key. 
1d070 2a 2f 0a 20 20 20 20 72 2e 70 4b 65 79 49 6e 66  */.    r.pKeyInf
1d080 6f 20 3d 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66  o = pCx->pKeyInf
1d090 6f 3b 0a 20 20 20 20 72 2e 6e 46 69 65 6c 64 20  o;.    r.nField 
1d0a0 3d 20 6e 46 69 65 6c 64 20 2b 20 31 3b 0a 20 20  = nField + 1;.  
1d0b0 20 20 72 2e 66 6c 61 67 73 20 3d 20 55 4e 50 41    r.flags = UNPA
1d0c0 43 4b 45 44 5f 50 52 45 46 49 58 5f 53 45 41 52  CKED_PREFIX_SEAR
1d0d0 43 48 3b 0a 20 20 20 20 72 2e 61 4d 65 6d 20 3d  CH;.    r.aMem =
1d0e0 20 61 4d 78 3b 0a 23 69 66 64 65 66 20 53 51 4c   aMx;.#ifdef SQL
1d0f0 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20 7b 20  ITE_DEBUG.    { 
1d100 69 6e 74 20 69 3b 20 66 6f 72 28 69 3d 30 3b 20  int i; for(i=0; 
1d110 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b 29  i<r.nField; i++)
1d120 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
1d130 6c 69 64 28 26 72 2e 61 4d 65 6d 5b 69 5d 29 20  lid(&r.aMem[i]) 
1d140 29 3b 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 20  ); }.#endif..   
1d150 20 2f 2a 20 45 78 74 72 61 63 74 20 74 68 65 20   /* Extract the 
1d160 76 61 6c 75 65 20 6f 66 20 52 20 66 72 6f 6d 20  value of R from 
1d170 72 65 67 69 73 74 65 72 20 50 33 2e 20 2a 2f 0a  register P3. */.
1d180 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
1d190 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e  emIntegerify(pIn
1d1a0 33 29 3b 0a 20 20 20 20 52 20 3d 20 70 49 6e 33  3);.    R = pIn3
1d1b0 2d 3e 75 2e 69 3b 0a 0a 20 20 20 20 2f 2a 20 53  ->u.i;..    /* S
1d1c0 65 61 72 63 68 20 74 68 65 20 42 2d 54 72 65 65  earch the B-Tree
1d1d0 20 69 6e 64 65 78 2e 20 49 66 20 6e 6f 20 63 6f   index. If no co
1d1e0 6e 66 6c 69 63 74 69 6e 67 20 72 65 63 6f 72 64  nflicting record
1d1f0 20 69 73 20 66 6f 75 6e 64 2c 20 6a 75 6d 70 0a   is found, jump.
1d200 20 20 20 20 2a 2a 20 74 6f 20 50 32 2e 20 4f 74      ** to P2. Ot
1d210 68 65 72 77 69 73 65 2c 20 63 6f 70 79 20 74 68  herwise, copy th
1d220 65 20 72 6f 77 69 64 20 6f 66 20 74 68 65 20 63  e rowid of the c
1d230 6f 6e 66 6c 69 63 74 69 6e 67 20 72 65 63 6f 72  onflicting recor
1d240 64 20 74 6f 0a 20 20 20 20 2a 2a 20 72 65 67 69  d to.    ** regi
1d250 73 74 65 72 20 50 33 20 61 6e 64 20 66 61 6c 6c  ster P3 and fall
1d260 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
1d270 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
1d280 2e 20 20 2a 2f 0a 20 20 20 20 72 63 20 3d 20 73  .  */.    rc = s
1d290 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74  qlite3BtreeMovet
1d2a0 6f 55 6e 70 61 63 6b 65 64 28 70 43 72 73 72 2c  oUnpacked(pCrsr,
1d2b0 20 26 72 2c 20 30 2c 20 30 2c 20 26 70 43 78 2d   &r, 0, 0, &pCx-
1d2c0 3e 73 65 65 6b 52 65 73 75 6c 74 29 3b 0a 20 20  >seekResult);.  
1d2d0 20 20 69 66 28 20 28 72 2e 66 6c 61 67 73 20 26    if( (r.flags &
1d2e0 20 55 4e 50 41 43 4b 45 44 5f 50 52 45 46 49 58   UNPACKED_PREFIX
1d2f0 5f 53 45 41 52 43 48 29 20 7c 7c 20 72 2e 72 6f  _SEARCH) || r.ro
1d300 77 69 64 3d 3d 52 20 29 7b 0a 20 20 20 20 20 20  wid==R ){.      
1d310 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
1d320 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
1d330 20 20 20 70 49 6e 33 2d 3e 75 2e 69 20 3d 20 72     pIn3->u.i = r
1d340 2e 72 6f 77 69 64 3b 0a 20 20 20 20 7d 0a 20 20  .rowid;.    }.  
1d350 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
1d360 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 45 78 69 73   Opcode: NotExis
1d370 74 73 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ts P1 P2 P3 * *.
1d380 2a 2a 0a 2a 2a 20 55 73 65 20 74 68 65 20 63 6f  **.** Use the co
1d390 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65  ntent of registe
1d3a0 72 20 50 33 20 61 73 20 61 20 69 6e 74 65 67 65  r P3 as a intege
1d3b0 72 20 6b 65 79 2e 20 20 49 66 20 61 20 72 65 63  r key.  If a rec
1d3c0 6f 72 64 20 0a 2a 2a 20 77 69 74 68 20 74 68 61  ord .** with tha
1d3d0 74 20 6b 65 79 20 64 6f 65 73 20 6e 6f 74 20 65  t key does not e
1d3e0 78 69 73 74 20 69 6e 20 74 61 62 6c 65 20 6f 66  xist in table of
1d3f0 20 50 31 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74   P1, then jump t
1d400 6f 20 50 32 2e 20 0a 2a 2a 20 49 66 20 74 68 65  o P2. .** If the
1d410 20 72 65 63 6f 72 64 20 64 6f 65 73 20 65 78 69   record does exi
1d420 73 74 2c 20 74 68 65 6e 20 66 61 6c 6c 20 74 68  st, then fall th
1d430 72 6f 75 67 68 2e 20 20 54 68 65 20 63 75 72 73  rough.  The curs
1d440 6f 72 20 69 73 20 6c 65 66 74 20 0a 2a 2a 20 70  or is left .** p
1d450 6f 69 6e 74 69 6e 67 20 74 6f 20 74 68 65 20 72  ointing to the r
1d460 65 63 6f 72 64 20 69 66 20 69 74 20 65 78 69 73  ecord if it exis
1d470 74 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 64 69  ts..**.** The di
1d480 66 66 65 72 65 6e 63 65 20 62 65 74 77 65 65 6e  fference between
1d490 20 74 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 20   this operation 
1d4a0 61 6e 64 20 4e 6f 74 46 6f 75 6e 64 20 69 73 20  and NotFound is 
1d4b0 74 68 61 74 20 74 68 69 73 0a 2a 2a 20 6f 70 65  that this.** ope
1d4c0 72 61 74 69 6f 6e 20 61 73 73 75 6d 65 73 20 74  ration assumes t
1d4d0 68 65 20 6b 65 79 20 69 73 20 61 6e 20 69 6e 74  he key is an int
1d4e0 65 67 65 72 20 61 6e 64 20 74 68 61 74 20 50 31  eger and that P1
1d4f0 20 69 73 20 61 20 74 61 62 6c 65 20 77 68 65 72   is a table wher
1d500 65 61 73 0a 2a 2a 20 4e 6f 74 46 6f 75 6e 64 20  eas.** NotFound 
1d510 61 73 73 75 6d 65 73 20 6b 65 79 20 69 73 20 61  assumes key is a
1d520 20 62 6c 6f 62 20 63 6f 6e 73 74 72 75 63 74 65   blob constructe
1d530 64 20 66 72 6f 6d 20 4d 61 6b 65 52 65 63 6f 72  d from MakeRecor
1d540 64 20 61 6e 64 0a 2a 2a 20 50 31 20 69 73 20 61  d and.** P1 is a
1d550 6e 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 53  n index..**.** S
1d560 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20  ee also: Found, 
1d570 4e 6f 74 46 6f 75 6e 64 2c 20 49 73 55 6e 69 71  NotFound, IsUniq
1d580 75 65 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f  ue.*/.case OP_No
1d590 74 45 78 69 73 74 73 3a 20 7b 20 20 20 20 20 20  tExists: {      
1d5a0 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a    /* jump, in3 *
1d5b0 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  /.  VdbeCursor *
1d5c0 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a  pC;.  BtCursor *
1d5d0 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73  pCrsr;.  int res
1d5e0 3b 0a 20 20 75 36 34 20 69 4b 65 79 3b 0a 0a 20  ;.  u64 iKey;.. 
1d5f0 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn3 = &aMem[pO
1d600 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72 74  p->p3];.  assert
1d610 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20  ( pIn3->flags & 
1d620 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 61 73 73  MEM_Int );.  ass
1d630 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
1d640 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
1d650 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
1d660 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
1d670 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
1d680 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
1d690 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20  pC->isTable );. 
1d6a0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 73 65   assert( pC->pse
1d6b0 75 64 6f 54 61 62 6c 65 52 65 67 3d 3d 30 20 29  udoTableReg==0 )
1d6c0 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e  ;.  pCrsr = pC->
1d6d0 70 43 75 72 73 6f 72 3b 0a 20 20 69 66 28 20 70  pCursor;.  if( p
1d6e0 43 72 73 72 21 3d 30 20 29 7b 0a 20 20 20 20 72  Crsr!=0 ){.    r
1d6f0 65 73 20 3d 20 30 3b 0a 20 20 20 20 69 4b 65 79  es = 0;.    iKey
1d700 20 3d 20 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20   = pIn3->u.i;.  
1d710 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
1d720 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65  reeMovetoUnpacke
1d730 64 28 70 43 72 73 72 2c 20 30 2c 20 69 4b 65 79  d(pCrsr, 0, iKey
1d740 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 20 20  , 0, &res);.    
1d750 70 43 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20  pC->lastRowid = 
1d760 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20 20 20 70  pIn3->u.i;.    p
1d770 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20  C->rowidIsValid 
1d780 3d 20 72 65 73 3d 3d 30 20 3f 31 3a 30 3b 0a 20  = res==0 ?1:0;. 
1d790 20 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d     pC->nullRow =
1d7a0 20 30 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68   0;.    pC->cach
1d7b0 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
1d7c0 53 54 41 4c 45 3b 0a 20 20 20 20 70 43 2d 3e 64  STALE;.    pC->d
1d7d0 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20  eferredMoveto = 
1d7e0 30 3b 0a 20 20 20 20 69 66 28 20 72 65 73 21 3d  0;.    if( res!=
1d7f0 30 20 29 7b 0a 20 20 20 20 20 20 70 63 20 3d 20  0 ){.      pc = 
1d800 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20  pOp->p2 - 1;.   
1d810 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 72     assert( pC->r
1d820 6f 77 69 64 49 73 56 61 6c 69 64 3d 3d 30 20 29  owidIsValid==0 )
1d830 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 43 2d 3e  ;.    }.    pC->
1d840 73 65 65 6b 52 65 73 75 6c 74 20 3d 20 72 65 73  seekResult = res
1d850 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f  ;.  }else{.    /
1d860 2a 20 54 68 69 73 20 68 61 70 70 65 6e 73 20 77  * This happens w
1d870 68 65 6e 20 61 6e 20 61 74 74 65 6d 70 74 20 74  hen an attempt t
1d880 6f 20 6f 70 65 6e 20 61 20 72 65 61 64 20 63 75  o open a read cu
1d890 72 73 6f 72 20 6f 6e 20 74 68 65 20 0a 20 20 20  rsor on the .   
1d8a0 20 2a 2a 20 73 71 6c 69 74 65 5f 6d 61 73 74 65   ** sqlite_maste
1d8b0 72 20 74 61 62 6c 65 20 72 65 74 75 72 6e 73 20  r table returns 
1d8c0 53 51 4c 49 54 45 5f 45 4d 50 54 59 2e 0a 20 20  SQLITE_EMPTY..  
1d8d0 20 20 2a 2f 0a 20 20 20 20 70 63 20 3d 20 70 4f    */.    pc = pO
1d8e0 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 61  p->p2 - 1;.    a
1d8f0 73 73 65 72 74 28 20 70 43 2d 3e 72 6f 77 69 64  ssert( pC->rowid
1d900 49 73 56 61 6c 69 64 3d 3d 30 20 29 3b 0a 20 20  IsValid==0 );.  
1d910 20 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74    pC->seekResult
1d920 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 62 72 65 61   = 0;.  }.  brea
1d930 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
1d940 20 53 65 71 75 65 6e 63 65 20 50 31 20 50 32 20   Sequence P1 P2 
1d950 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 69 6e 64  * * *.**.** Find
1d960 20 74 68 65 20 6e 65 78 74 20 61 76 61 69 6c 61   the next availa
1d970 62 6c 65 20 73 65 71 75 65 6e 63 65 20 6e 75 6d  ble sequence num
1d980 62 65 72 20 66 6f 72 20 63 75 72 73 6f 72 20 50  ber for cursor P
1d990 31 2e 0a 2a 2a 20 57 72 69 74 65 20 74 68 65 20  1..** Write the 
1d9a0 73 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20  sequence number 
1d9b0 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  into register P2
1d9c0 2e 0a 2a 2a 20 54 68 65 20 73 65 71 75 65 6e 63  ..** The sequenc
1d9d0 65 20 6e 75 6d 62 65 72 20 6f 6e 20 74 68 65 20  e number on the 
1d9e0 63 75 72 73 6f 72 20 69 73 20 69 6e 63 72 65 6d  cursor is increm
1d9f0 65 6e 74 65 64 20 61 66 74 65 72 20 74 68 69 73  ented after this
1da00 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  .** instruction.
1da10 20 20 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65    .*/.case OP_Se
1da20 71 75 65 6e 63 65 3a 20 7b 20 20 20 20 20 20 20  quence: {       
1da30 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72      /* out2-prer
1da40 65 6c 65 61 73 65 20 2a 2f 0a 20 20 61 73 73 65  elease */.  asse
1da50 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
1da60 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
1da70 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74  rsor );.  assert
1da80 28 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  ( p->apCsr[pOp->
1da90 70 31 5d 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74  p1]!=0 );.  pOut
1daa0 2d 3e 75 2e 69 20 3d 20 70 2d 3e 61 70 43 73 72  ->u.i = p->apCsr
1dab0 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 73 65 71 43 6f  [pOp->p1]->seqCo
1dac0 75 6e 74 2b 2b 3b 0a 20 20 62 72 65 61 6b 3b 0a  unt++;.  break;.
1dad0 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e  }.../* Opcode: N
1dae0 65 77 52 6f 77 69 64 20 50 31 20 50 32 20 50 33  ewRowid P1 P2 P3
1daf0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 47 65 74 20 61   * *.**.** Get a
1db00 20 6e 65 77 20 69 6e 74 65 67 65 72 20 72 65 63   new integer rec
1db10 6f 72 64 20 6e 75 6d 62 65 72 20 28 61 2e 6b 2e  ord number (a.k.
1db20 61 20 22 72 6f 77 69 64 22 29 20 75 73 65 64 20  a "rowid") used 
1db30 61 73 20 74 68 65 20 6b 65 79 20 74 6f 20 61 20  as the key to a 
1db40 74 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 72 65  table..** The re
1db50 63 6f 72 64 20 6e 75 6d 62 65 72 20 69 73 20 6e  cord number is n
1db60 6f 74 20 70 72 65 76 69 6f 75 73 6c 79 20 75 73  ot previously us
1db70 65 64 20 61 73 20 61 20 6b 65 79 20 69 6e 20 74  ed as a key in t
1db80 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 74  he database.** t
1db90 61 62 6c 65 20 74 68 61 74 20 63 75 72 73 6f 72  able that cursor
1dba0 20 50 31 20 70 6f 69 6e 74 73 20 74 6f 2e 20 20   P1 points to.  
1dbb0 54 68 65 20 6e 65 77 20 72 65 63 6f 72 64 20 6e  The new record n
1dbc0 75 6d 62 65 72 20 69 73 20 77 72 69 74 74 65 6e  umber is written
1dbd0 0a 2a 2a 20 77 72 69 74 74 65 6e 20 74 6f 20 72  .** written to r
1dbe0 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a  egister P2..**.*
1dbf0 2a 20 49 66 20 50 33 3e 30 20 74 68 65 6e 20 50  * If P3>0 then P
1dc00 33 20 69 73 20 61 20 72 65 67 69 73 74 65 72 20  3 is a register 
1dc10 69 6e 20 74 68 65 20 72 6f 6f 74 20 66 72 61 6d  in the root fram
1dc20 65 20 6f 66 20 74 68 69 73 20 56 44 42 45 20 74  e of this VDBE t
1dc30 68 61 74 20 68 6f 6c 64 73 20 0a 2a 2a 20 74 68  hat holds .** th
1dc40 65 20 6c 61 72 67 65 73 74 20 70 72 65 76 69 6f  e largest previo
1dc50 75 73 6c 79 20 67 65 6e 65 72 61 74 65 64 20 72  usly generated r
1dc60 65 63 6f 72 64 20 6e 75 6d 62 65 72 2e 20 4e 6f  ecord number. No
1dc70 20 6e 65 77 20 72 65 63 6f 72 64 20 6e 75 6d 62   new record numb
1dc80 65 72 73 20 61 72 65 0a 2a 2a 20 61 6c 6c 6f 77  ers are.** allow
1dc90 65 64 20 74 6f 20 62 65 20 6c 65 73 73 20 74 68  ed to be less th
1dca0 61 6e 20 74 68 69 73 20 76 61 6c 75 65 2e 20 57  an this value. W
1dcb0 68 65 6e 20 74 68 69 73 20 76 61 6c 75 65 20 72  hen this value r
1dcc0 65 61 63 68 65 73 20 69 74 73 20 6d 61 78 69 6d  eaches its maxim
1dcd0 75 6d 2c 20 0a 2a 2a 20 61 20 53 51 4c 49 54 45  um, .** a SQLITE
1dce0 5f 46 55 4c 4c 20 65 72 72 6f 72 20 69 73 20 67  _FULL error is g
1dcf0 65 6e 65 72 61 74 65 64 2e 20 54 68 65 20 50 33  enerated. The P3
1dd00 20 72 65 67 69 73 74 65 72 20 69 73 20 75 70 64   register is upd
1dd10 61 74 65 64 20 77 69 74 68 20 74 68 65 20 27 0a  ated with the '.
1dd20 2a 2a 20 67 65 6e 65 72 61 74 65 64 20 72 65 63  ** generated rec
1dd30 6f 72 64 20 6e 75 6d 62 65 72 2e 20 54 68 69 73  ord number. This
1dd40 20 50 33 20 6d 65 63 68 61 6e 69 73 6d 20 69 73   P3 mechanism is
1dd50 20 75 73 65 64 20 74 6f 20 68 65 6c 70 20 69 6d   used to help im
1dd60 70 6c 65 6d 65 6e 74 20 74 68 65 0a 2a 2a 20 41  plement the.** A
1dd70 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 66 65 61  UTOINCREMENT fea
1dd80 74 75 72 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  ture..*/.case OP
1dd90 5f 4e 65 77 52 6f 77 69 64 3a 20 7b 20 20 20 20  _NewRowid: {    
1dda0 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70         /* out2-p
1ddb0 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69  rerelease */.  i
1ddc0 36 34 20 76 3b 20 20 20 20 20 20 20 20 20 20 20  64 v;           
1ddd0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 77        /* The new
1dde0 20 72 6f 77 69 64 20 2a 2f 0a 20 20 56 64 62 65   rowid */.  Vdbe
1ddf0 43 75 72 73 6f 72 20 2a 70 43 3b 20 20 20 20 20  Cursor *pC;     
1de00 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6f 66 20     /* Cursor of 
1de10 74 61 62 6c 65 20 74 6f 20 67 65 74 20 74 68 65  table to get the
1de20 20 6e 65 77 20 72 6f 77 69 64 20 2a 2f 0a 20 20   new rowid */.  
1de30 69 6e 74 20 72 65 73 3b 20 20 20 20 20 20 20 20  int res;        
1de40 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74         /* Result
1de50 20 6f 66 20 61 6e 20 73 71 6c 69 74 65 33 42 74   of an sqlite3Bt
1de60 72 65 65 4c 61 73 74 28 29 20 2a 2f 0a 20 20 69  reeLast() */.  i
1de70 6e 74 20 63 6e 74 3b 20 20 20 20 20 20 20 20 20  nt cnt;         
1de80 20 20 20 20 20 20 2f 2a 20 43 6f 75 6e 74 65 72        /* Counter
1de90 20 74 6f 20 6c 69 6d 69 74 20 74 68 65 20 6e 75   to limit the nu
1dea0 6d 62 65 72 20 6f 66 20 73 65 61 72 63 68 65 73  mber of searches
1deb0 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b   */.  Mem *pMem;
1dec0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1ded0 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67  Register holding
1dee0 20 6c 61 72 67 65 73 74 20 72 6f 77 69 64 20 66   largest rowid f
1def0 6f 72 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  or AUTOINCREMENT
1df00 20 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d 65 20   */.  VdbeFrame 
1df10 2a 70 46 72 61 6d 65 3b 20 20 20 20 20 2f 2a 20  *pFrame;     /* 
1df20 52 6f 6f 74 20 66 72 61 6d 65 20 6f 66 20 56 44  Root frame of VD
1df30 42 45 20 2a 2f 0a 0a 20 20 76 20 3d 20 30 3b 0a  BE */..  v = 0;.
1df40 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 61 73 73    res = 0;.  ass
1df50 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
1df60 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
1df70 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
1df80 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
1df90 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
1dfa0 3d 30 20 29 3b 0a 20 20 69 66 28 20 4e 45 56 45  =0 );.  if( NEVE
1dfb0 52 28 70 43 2d 3e 70 43 75 72 73 6f 72 3d 3d 30  R(pC->pCursor==0
1dfc0 29 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20  ) ){.    /* The 
1dfd0 7a 65 72 6f 20 69 6e 69 74 69 61 6c 69 7a 61 74  zero initializat
1dfe0 69 6f 6e 20 61 62 6f 76 65 20 69 73 20 61 6c 6c  ion above is all
1dff0 20 74 68 61 74 20 69 73 20 6e 65 65 64 65 64 20   that is needed 
1e000 2a 2f 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  */.  }else{.    
1e010 2f 2a 20 54 68 65 20 6e 65 78 74 20 72 6f 77 69  /* The next rowi
1e020 64 20 6f 72 20 72 65 63 6f 72 64 20 6e 75 6d 62  d or record numb
1e030 65 72 20 28 64 69 66 66 65 72 65 6e 74 20 74 65  er (different te
1e040 72 6d 73 20 66 6f 72 20 74 68 65 20 73 61 6d 65  rms for the same
1e050 0a 20 20 20 20 2a 2a 20 74 68 69 6e 67 29 20 69  .    ** thing) i
1e060 73 20 6f 62 74 61 69 6e 65 64 20 69 6e 20 61 20  s obtained in a 
1e070 74 77 6f 2d 73 74 65 70 20 61 6c 67 6f 72 69 74  two-step algorit
1e080 68 6d 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a  hm..    **.    *
1e090 2a 20 46 69 72 73 74 20 77 65 20 61 74 74 65 6d  * First we attem
1e0a0 70 74 20 74 6f 20 66 69 6e 64 20 74 68 65 20 6c  pt to find the l
1e0b0 61 72 67 65 73 74 20 65 78 69 73 74 69 6e 67 20  argest existing 
1e0c0 72 6f 77 69 64 20 61 6e 64 20 61 64 64 20 6f 6e  rowid and add on
1e0d0 65 0a 20 20 20 20 2a 2a 20 74 6f 20 74 68 61 74  e.    ** to that
1e0e0 2e 20 20 42 75 74 20 69 66 20 74 68 65 20 6c 61  .  But if the la
1e0f0 72 67 65 73 74 20 65 78 69 73 74 69 6e 67 20 72  rgest existing r
1e100 6f 77 69 64 20 69 73 20 61 6c 72 65 61 64 79 20  owid is already 
1e110 74 68 65 20 6d 61 78 69 6d 75 6d 0a 20 20 20 20  the maximum.    
1e120 2a 2a 20 70 6f 73 69 74 69 76 65 20 69 6e 74 65  ** positive inte
1e130 67 65 72 2c 20 77 65 20 68 61 76 65 20 74 6f 20  ger, we have to 
1e140 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  fall through to 
1e150 74 68 65 20 73 65 63 6f 6e 64 0a 20 20 20 20 2a  the second.    *
1e160 2a 20 70 72 6f 62 61 62 69 6c 69 73 74 69 63 20  * probabilistic 
1e170 61 6c 67 6f 72 69 74 68 6d 0a 20 20 20 20 2a 2a  algorithm.    **
1e180 0a 20 20 20 20 2a 2a 20 54 68 65 20 73 65 63 6f  .    ** The seco
1e190 6e 64 20 61 6c 67 6f 72 69 74 68 6d 20 69 73 20  nd algorithm is 
1e1a0 74 6f 20 73 65 6c 65 63 74 20 61 20 72 6f 77 69  to select a rowi
1e1b0 64 20 61 74 20 72 61 6e 64 6f 6d 20 61 6e 64 20  d at random and 
1e1c0 73 65 65 20 69 66 0a 20 20 20 20 2a 2a 20 69 74  see if.    ** it
1e1d0 20 61 6c 72 65 61 64 79 20 65 78 69 73 74 73 20   already exists 
1e1e0 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 20 49  in the table.  I
1e1f0 66 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 78  f it does not ex
1e200 69 73 74 2c 20 77 65 20 68 61 76 65 0a 20 20 20  ist, we have.   
1e210 20 2a 2a 20 73 75 63 63 65 65 64 65 64 2e 20 20   ** succeeded.  
1e220 49 66 20 74 68 65 20 72 61 6e 64 6f 6d 20 72 6f  If the random ro
1e230 77 69 64 20 64 6f 65 73 20 65 78 69 73 74 2c 20  wid does exist, 
1e240 77 65 20 73 65 6c 65 63 74 20 61 20 6e 65 77 20  we select a new 
1e250 6f 6e 65 0a 20 20 20 20 2a 2a 20 61 6e 64 20 74  one.    ** and t
1e260 72 79 20 61 67 61 69 6e 2c 20 75 70 20 74 6f 20  ry again, up to 
1e270 31 30 30 20 74 69 6d 65 73 2e 0a 20 20 20 20 2a  100 times..    *
1e280 2f 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  /.    assert( pC
1e290 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 20  ->isTable );.   
1e2a0 20 63 6e 74 20 3d 20 30 3b 0a 0a 23 69 66 64 65   cnt = 0;..#ifde
1e2b0 66 20 53 51 4c 49 54 45 5f 33 32 42 49 54 5f 52  f SQLITE_32BIT_R
1e2c0 4f 57 49 44 0a 23 20 20 20 64 65 66 69 6e 65 20  OWID.#   define 
1e2d0 4d 41 58 5f 52 4f 57 49 44 20 30 78 37 66 66 66  MAX_ROWID 0x7fff
1e2e0 66 66 66 66 0a 23 65 6c 73 65 0a 20 20 20 20 2f  ffff.#else.    /
1e2f0 2a 20 53 6f 6d 65 20 63 6f 6d 70 69 6c 65 72 73  * Some compilers
1e300 20 63 6f 6d 70 6c 61 69 6e 20 61 62 6f 75 74 20   complain about 
1e310 63 6f 6e 73 74 61 6e 74 73 20 6f 66 20 74 68 65  constants of the
1e320 20 66 6f 72 6d 20 30 78 37 66 66 66 66 66 66 66   form 0x7fffffff
1e330 66 66 66 66 66 66 66 66 2e 0a 20 20 20 20 2a 2a  ffffffff..    **
1e340 20 4f 74 68 65 72 73 20 63 6f 6d 70 6c 61 69 6e   Others complain
1e350 20 61 62 6f 75 74 20 30 78 37 66 66 66 66 66 66   about 0x7ffffff
1e360 66 66 66 66 66 66 66 66 66 66 4c 4c 2e 20 20 54  ffffffffffLL.  T
1e370 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63  he following mac
1e380 72 6f 20 73 65 65 6d 73 0a 20 20 20 20 2a 2a 20  ro seems.    ** 
1e390 74 6f 20 70 72 6f 76 69 64 65 20 74 68 65 20 63  to provide the c
1e3a0 6f 6e 73 74 61 6e 74 20 77 68 69 6c 65 20 6d 61  onstant while ma
1e3b0 6b 69 6e 67 20 61 6c 6c 20 63 6f 6d 70 69 6c 65  king all compile
1e3c0 72 73 20 68 61 70 70 79 2e 0a 20 20 20 20 2a 2f  rs happy..    */
1e3d0 0a 23 20 20 20 64 65 66 69 6e 65 20 4d 41 58 5f  .#   define MAX_
1e3e0 52 4f 57 49 44 20 20 28 69 36 34 29 28 20 28 28  ROWID  (i64)( ((
1e3f0 28 75 36 34 29 30 78 37 66 66 66 66 66 66 66 29  (u64)0x7fffffff)
1e400 3c 3c 33 32 29 20 7c 20 28 75 36 34 29 30 78 66  <<32) | (u64)0xf
1e410 66 66 66 66 66 66 66 20 29 0a 23 65 6e 64 69 66  fffffff ).#endif
1e420 0a 0a 20 20 20 20 69 66 28 20 21 70 43 2d 3e 75  ..    if( !pC->u
1e430 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20 29 7b  seRandomRowid ){
1e440 0a 20 20 20 20 20 20 76 20 3d 20 73 71 6c 69 74  .      v = sqlit
1e450 65 33 42 74 72 65 65 47 65 74 43 61 63 68 65 64  e3BtreeGetCached
1e460 52 6f 77 69 64 28 70 43 2d 3e 70 43 75 72 73 6f  Rowid(pC->pCurso
1e470 72 29 3b 0a 20 20 20 20 20 20 69 66 28 20 76 3d  r);.      if( v=
1e480 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63  =0 ){.        rc
1e490 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c   = sqlite3BtreeL
1e4a0 61 73 74 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c  ast(pC->pCursor,
1e4b0 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20 20 20   &res);.        
1e4c0 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
1e4d0 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 67  K ){.          g
1e4e0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
1e4f0 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20  _error;.        
1e500 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20 72 65  }.        if( re
1e510 73 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 76  s ){.          v
1e520 20 3d 20 31 3b 20 20 20 2f 2a 20 49 4d 50 3a 20   = 1;   /* IMP: 
1e530 52 2d 36 31 39 31 34 2d 34 38 30 37 34 20 2a 2f  R-61914-48074 */
1e540 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  .        }else{.
1e550 20 20 20 20 20 20 20 20 20 20 61 73 73 65 72 74            assert
1e560 28 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75  ( sqlite3BtreeCu
1e570 72 73 6f 72 49 73 56 61 6c 69 64 28 70 43 2d 3e  rsorIsValid(pC->
1e580 70 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20  pCursor) );.    
1e590 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
1e5a0 65 33 42 74 72 65 65 4b 65 79 53 69 7a 65 28 70  e3BtreeKeySize(p
1e5b0 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 76 29 3b  C->pCursor, &v);
1e5c0 0a 20 20 20 20 20 20 20 20 20 20 61 73 73 65 72  .          asser
1e5d0 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  t( rc==SQLITE_OK
1e5e0 20 29 3b 20 20 20 2f 2a 20 43 61 6e 6e 6f 74 20   );   /* Cannot 
1e5f0 66 61 69 6c 20 66 6f 6c 6c 6f 77 69 6e 67 20 42  fail following B
1e600 74 72 65 65 4c 61 73 74 28 29 20 2a 2f 0a 20 20  treeLast() */.  
1e610 20 20 20 20 20 20 20 20 69 66 28 20 76 3d 3d 4d          if( v==M
1e620 41 58 5f 52 4f 57 49 44 20 29 7b 0a 20 20 20 20  AX_ROWID ){.    
1e630 20 20 20 20 20 20 20 20 70 43 2d 3e 75 73 65 52          pC->useR
1e640 61 6e 64 6f 6d 52 6f 77 69 64 20 3d 20 31 3b 0a  andomRowid = 1;.
1e650 20 20 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b            }else{
1e660 0a 20 20 20 20 20 20 20 20 20 20 20 20 76 2b 2b  .            v++
1e670 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 32 39  ;   /* IMP: R-29
1e680 35 33 38 2d 33 34 39 38 37 20 2a 2f 0a 20 20 20  538-34987 */.   
1e690 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
1e6a0 20 7d 0a 20 20 20 20 20 20 7d 0a 0a 23 69 66 6e   }.      }..#ifn
1e6b0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
1e6c0 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 20 20  AUTOINCREMENT.  
1e6d0 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 33 20      if( pOp->p3 
1e6e0 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 41 73  ){.        /* As
1e6f0 73 65 72 74 20 74 68 61 74 20 50 33 20 69 73 20  sert that P3 is 
1e700 61 20 76 61 6c 69 64 20 6d 65 6d 6f 72 79 20 63  a valid memory c
1e710 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20  ell. */.        
1e720 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e  assert( pOp->p3>
1e730 30 20 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28  0 );.        if(
1e740 20 70 2d 3e 70 46 72 61 6d 65 20 29 7b 0a 20 20   p->pFrame ){.  
1e750 20 20 20 20 20 20 20 20 66 6f 72 28 70 46 72 61          for(pFra
1e760 6d 65 3d 70 2d 3e 70 46 72 61 6d 65 3b 20 70 46  me=p->pFrame; pF
1e770 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 3b 20 70  rame->pParent; p
1e780 46 72 61 6d 65 3d 70 46 72 61 6d 65 2d 3e 70 50  Frame=pFrame->pP
1e790 61 72 65 6e 74 29 3b 0a 20 20 20 20 20 20 20 20  arent);.        
1e7a0 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68 61 74    /* Assert that
1e7b0 20 50 33 20 69 73 20 61 20 76 61 6c 69 64 20 6d   P3 is a valid m
1e7c0 65 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a 20  emory cell. */. 
1e7d0 20 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28           assert(
1e7e0 20 70 4f 70 2d 3e 70 33 3c 3d 70 46 72 61 6d 65   pOp->p3<=pFrame
1e7f0 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20  ->nMem );.      
1e800 20 20 20 20 70 4d 65 6d 20 3d 20 26 70 46 72 61      pMem = &pFra
1e810 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33  me->aMem[pOp->p3
1e820 5d 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65  ];.        }else
1e830 7b 0a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41  {.          /* A
1e840 73 73 65 72 74 20 74 68 61 74 20 50 33 20 69 73  ssert that P3 is
1e850 20 61 20 76 61 6c 69 64 20 6d 65 6d 6f 72 79 20   a valid memory 
1e860 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 20  cell. */.       
1e870 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
1e880 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20  p3<=p->nMem );. 
1e890 20 20 20 20 20 20 20 20 20 70 4d 65 6d 20 3d 20           pMem = 
1e8a0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
1e8b0 20 20 20 20 20 20 20 20 20 20 6d 65 6d 41 62 6f            memAbo
1e8c0 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4d  utToChange(p, pM
1e8d0 65 6d 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  em);.        }. 
1e8e0 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d         assert( m
1e8f0 65 6d 49 73 56 61 6c 69 64 28 70 4d 65 6d 29 20  emIsValid(pMem) 
1e900 29 3b 0a 0a 20 20 20 20 20 20 20 20 52 45 47 49  );..        REGI
1e910 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
1e920 70 33 2c 20 70 4d 65 6d 29 3b 0a 20 20 20 20 20  p3, pMem);.     
1e930 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
1e940 6d 49 6e 74 65 67 65 72 69 66 79 28 70 4d 65 6d  mIntegerify(pMem
1e950 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  );.        asser
1e960 74 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20  t( (pMem->flags 
1e970 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b  & MEM_Int)!=0 );
1e980 20 20 2f 2a 20 6d 65 6d 28 50 33 29 20 68 6f 6c    /* mem(P3) hol
1e990 64 73 20 61 6e 20 69 6e 74 65 67 65 72 20 2a 2f  ds an integer */
1e9a0 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 4d 65  .        if( pMe
1e9b0 6d 2d 3e 75 2e 69 3d 3d 4d 41 58 5f 52 4f 57 49  m->u.i==MAX_ROWI
1e9c0 44 20 7c 7c 20 70 43 2d 3e 75 73 65 52 61 6e 64  D || pC->useRand
1e9d0 6f 6d 52 6f 77 69 64 20 29 7b 0a 20 20 20 20 20  omRowid ){.     
1e9e0 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
1e9f0 5f 46 55 4c 4c 3b 20 20 20 2f 2a 20 49 4d 50 3a  _FULL;   /* IMP:
1ea00 20 52 2d 31 32 32 37 35 2d 36 31 33 33 38 20 2a   R-12275-61338 *
1ea10 2f 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f  /.          goto
1ea20 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
1ea30 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  ror;.        }. 
1ea40 20 20 20 20 20 20 20 69 66 28 20 76 3c 70 4d 65         if( v<pMe
1ea50 6d 2d 3e 75 2e 69 2b 31 20 29 7b 0a 20 20 20 20  m->u.i+1 ){.    
1ea60 20 20 20 20 20 20 76 20 3d 20 70 4d 65 6d 2d 3e        v = pMem->
1ea70 75 2e 69 20 2b 20 31 3b 0a 20 20 20 20 20 20 20  u.i + 1;.       
1ea80 20 7d 0a 20 20 20 20 20 20 20 20 70 4d 65 6d 2d   }.        pMem-
1ea90 3e 75 2e 69 20 3d 20 76 3b 0a 20 20 20 20 20 20  >u.i = v;.      
1eaa0 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 20 20  }.#endif..      
1eab0 73 71 6c 69 74 65 33 42 74 72 65 65 53 65 74 43  sqlite3BtreeSetC
1eac0 61 63 68 65 64 52 6f 77 69 64 28 70 43 2d 3e 70  achedRowid(pC->p
1ead0 43 75 72 73 6f 72 2c 20 76 3c 4d 41 58 5f 52 4f  Cursor, v<MAX_RO
1eae0 57 49 44 20 3f 20 76 2b 31 20 3a 20 30 29 3b 0a  WID ? v+1 : 0);.
1eaf0 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70 43      }.    if( pC
1eb00 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64  ->useRandomRowid
1eb10 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 4d 50   ){.      /* IMP
1eb20 4c 45 4d 45 4e 54 41 54 49 4f 4e 2d 4f 46 3a 20  LEMENTATION-OF: 
1eb30 52 2d 30 37 36 37 37 2d 34 31 38 38 31 20 49 66  R-07677-41881 If
1eb40 20 74 68 65 20 6c 61 72 67 65 73 74 20 52 4f 57   the largest ROW
1eb50 49 44 20 69 73 20 65 71 75 61 6c 20 74 6f 20 74  ID is equal to t
1eb60 68 65 0a 20 20 20 20 20 20 2a 2a 20 6c 61 72 67  he.      ** larg
1eb70 65 73 74 20 70 6f 73 73 69 62 6c 65 20 69 6e 74  est possible int
1eb80 65 67 65 72 20 28 39 32 32 33 33 37 32 30 33 36  eger (9223372036
1eb90 38 35 34 37 37 35 38 30 37 29 20 74 68 65 6e 20  854775807) then 
1eba0 74 68 65 20 64 61 74 61 62 61 73 65 0a 20 20 20  the database.   
1ebb0 20 20 20 2a 2a 20 65 6e 67 69 6e 65 20 73 74 61     ** engine sta
1ebc0 72 74 73 20 70 69 63 6b 69 6e 67 20 70 6f 73 69  rts picking posi
1ebd0 74 69 76 65 20 63 61 6e 64 69 64 61 74 65 20 52  tive candidate R
1ebe0 4f 57 49 44 73 20 61 74 20 72 61 6e 64 6f 6d 20  OWIDs at random 
1ebf0 75 6e 74 69 6c 0a 20 20 20 20 20 20 2a 2a 20 69  until.      ** i
1ec00 74 20 66 69 6e 64 73 20 6f 6e 65 20 74 68 61 74  t finds one that
1ec10 20 69 73 20 6e 6f 74 20 70 72 65 76 69 6f 75 73   is not previous
1ec20 6c 79 20 75 73 65 64 2e 20 2a 2f 0a 20 20 20 20  ly used. */.    
1ec30 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1ec40 33 3d 3d 30 20 29 3b 20 20 2f 2a 20 57 65 20 63  3==0 );  /* We c
1ec50 61 6e 6e 6f 74 20 62 65 20 69 6e 20 72 61 6e 64  annot be in rand
1ec60 6f 6d 20 72 6f 77 69 64 20 6d 6f 64 65 20 69 66  om rowid mode if
1ec70 20 74 68 69 73 20 69 73 0a 20 20 20 20 20 20 20   this is.       
1ec80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ec90 20 20 20 20 20 20 2a 2a 20 61 6e 20 41 55 54 4f        ** an AUTO
1eca0 49 4e 43 52 45 4d 45 4e 54 20 74 61 62 6c 65 2e  INCREMENT table.
1ecb0 20 2a 2f 0a 20 20 20 20 20 20 2f 2a 20 6f 6e 20   */.      /* on 
1ecc0 74 68 65 20 66 69 72 73 74 20 61 74 74 65 6d 70  the first attemp
1ecd0 74 2c 20 73 69 6d 70 6c 79 20 64 6f 20 6f 6e 65  t, simply do one
1ece0 20 6d 6f 72 65 20 74 68 61 6e 20 70 72 65 76 69   more than previ
1ecf0 6f 75 73 20 2a 2f 0a 20 20 20 20 20 20 76 20 3d  ous */.      v =
1ed00 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 0a   db->lastRowid;.
1ed10 20 20 20 20 20 20 76 20 26 3d 20 28 4d 41 58 5f        v &= (MAX_
1ed20 52 4f 57 49 44 3e 3e 31 29 3b 20 2f 2a 20 65 6e  ROWID>>1); /* en
1ed30 73 75 72 65 20 64 6f 65 73 6e 27 74 20 67 6f 20  sure doesn't go 
1ed40 6e 65 67 61 74 69 76 65 20 2a 2f 0a 20 20 20 20  negative */.    
1ed50 20 20 76 2b 2b 3b 20 2f 2a 20 65 6e 73 75 72 65    v++; /* ensure
1ed60 20 6e 6f 6e 2d 7a 65 72 6f 20 2a 2f 0a 20 20 20   non-zero */.   
1ed70 20 20 20 63 6e 74 20 3d 20 30 3b 0a 20 20 20 20     cnt = 0;.    
1ed80 20 20 77 68 69 6c 65 28 20 20 20 28 28 72 63 20    while(   ((rc 
1ed90 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f  = sqlite3BtreeMo
1eda0 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d  vetoUnpacked(pC-
1edb0 3e 70 43 75 72 73 6f 72 2c 20 30 2c 20 28 75 36  >pCursor, 0, (u6
1edc0 34 29 76 2c 0a 20 20 20 20 20 20 20 20 20 20 20  4)v,.           
1edd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ede0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1edf0 20 20 20 20 20 20 30 2c 20 26 72 65 73 29 29 3d        0, &res))=
1ee00 3d 53 51 4c 49 54 45 5f 4f 4b 29 0a 20 20 20 20  =SQLITE_OK).    
1ee10 20 20 20 20 20 20 20 20 26 26 20 28 72 65 73 3d          && (res=
1ee20 3d 30 29 0a 20 20 20 20 20 20 20 20 20 20 20 20  =0).            
1ee30 26 26 20 28 2b 2b 63 6e 74 3c 31 30 30 29 29 7b  && (++cnt<100)){
1ee40 0a 20 20 20 20 20 20 20 20 2f 2a 20 63 6f 6c 6c  .        /* coll
1ee50 69 73 69 6f 6e 20 2d 20 74 72 79 20 61 6e 6f 74  ision - try anot
1ee60 68 65 72 20 72 61 6e 64 6f 6d 20 72 6f 77 69 64  her random rowid
1ee70 20 2a 2f 0a 20 20 20 20 20 20 20 20 73 71 6c 69   */.        sqli
1ee80 74 65 33 5f 72 61 6e 64 6f 6d 6e 65 73 73 28 73  te3_randomness(s
1ee90 69 7a 65 6f 66 28 76 29 2c 20 26 76 29 3b 0a 20  izeof(v), &v);. 
1eea0 20 20 20 20 20 20 20 69 66 28 20 63 6e 74 3c 35         if( cnt<5
1eeb0 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 2f 2a   ){.          /*
1eec0 20 74 72 79 20 22 73 6d 61 6c 6c 22 20 72 61 6e   try "small" ran
1eed0 64 6f 6d 20 72 6f 77 69 64 73 20 66 6f 72 20 74  dom rowids for t
1eee0 68 65 20 69 6e 69 74 69 61 6c 20 61 74 74 65 6d  he initial attem
1eef0 70 74 73 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  pts */.         
1ef00 20 76 20 26 3d 20 30 78 66 66 66 66 66 66 3b 0a   v &= 0xffffff;.
1ef10 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20          }else{. 
1ef20 20 20 20 20 20 20 20 20 20 76 20 26 3d 20 28 4d           v &= (M
1ef30 41 58 5f 52 4f 57 49 44 3e 3e 31 29 3b 20 2f 2a  AX_ROWID>>1); /*
1ef40 20 65 6e 73 75 72 65 20 64 6f 65 73 6e 27 74 20   ensure doesn't 
1ef50 67 6f 20 6e 65 67 61 74 69 76 65 20 2a 2f 0a 20  go negative */. 
1ef60 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
1ef70 20 76 2b 2b 3b 20 2f 2a 20 65 6e 73 75 72 65 20   v++; /* ensure 
1ef80 6e 6f 6e 2d 7a 65 72 6f 20 2a 2f 0a 20 20 20 20  non-zero */.    
1ef90 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 72 63    }.      if( rc
1efa0 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 72  ==SQLITE_OK && r
1efb0 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  es==0 ){.       
1efc0 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 46 55 4c   rc = SQLITE_FUL
1efd0 4c 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 33  L;   /* IMP: R-3
1efe0 38 32 31 39 2d 35 33 30 30 32 20 2a 2f 0a 20 20  8219-53002 */.  
1eff0 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74        goto abort
1f000 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
1f010 20 20 20 20 20 7d 0a 20 20 20 20 20 20 61 73 73       }.      ass
1f020 65 72 74 28 20 76 3e 30 20 29 3b 20 20 2f 2a 20  ert( v>0 );  /* 
1f030 45 56 3a 20 52 2d 34 30 38 31 32 2d 30 33 35 37  EV: R-40812-0357
1f040 30 20 2a 2f 0a 20 20 20 20 7d 0a 20 20 20 20 70  0 */.    }.    p
1f050 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20  C->rowidIsValid 
1f060 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e 64 65 66  = 0;.    pC->def
1f070 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b  erredMoveto = 0;
1f080 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74  .    pC->cacheSt
1f090 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
1f0a0 4c 45 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e  LE;.  }.  pOut->
1f0b0 75 2e 69 20 3d 20 76 3b 0a 20 20 62 72 65 61 6b  u.i = v;.  break
1f0c0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
1f0d0 49 6e 73 65 72 74 20 50 31 20 50 32 20 50 33 20  Insert P1 P2 P3 
1f0e0 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 57 72 69 74  P4 P5.**.** Writ
1f0f0 65 20 61 6e 20 65 6e 74 72 79 20 69 6e 74 6f 20  e an entry into 
1f100 74 68 65 20 74 61 62 6c 65 20 6f 66 20 63 75 72  the table of cur
1f110 73 6f 72 20 50 31 2e 20 20 41 20 6e 65 77 20 65  sor P1.  A new e
1f120 6e 74 72 79 20 69 73 0a 2a 2a 20 63 72 65 61 74  ntry is.** creat
1f130 65 64 20 69 66 20 69 74 20 64 6f 65 73 6e 27 74  ed if it doesn't
1f140 20 61 6c 72 65 61 64 79 20 65 78 69 73 74 20 6f   already exist o
1f150 72 20 74 68 65 20 64 61 74 61 20 66 6f 72 20 61  r the data for a
1f160 6e 20 65 78 69 73 74 69 6e 67 0a 2a 2a 20 65 6e  n existing.** en
1f170 74 72 79 20 69 73 20 6f 76 65 72 77 72 69 74 74  try is overwritt
1f180 65 6e 2e 20 20 54 68 65 20 64 61 74 61 20 69 73  en.  The data is
1f190 20 74 68 65 20 76 61 6c 75 65 20 4d 45 4d 5f 42   the value MEM_B
1f1a0 6c 6f 62 20 73 74 6f 72 65 64 20 69 6e 20 72 65  lob stored in re
1f1b0 67 69 73 74 65 72 0a 2a 2a 20 6e 75 6d 62 65 72  gister.** number
1f1c0 20 50 32 2e 20 54 68 65 20 6b 65 79 20 69 73 20   P2. The key is 
1f1d0 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74  stored in regist
1f1e0 65 72 20 50 33 2e 20 54 68 65 20 6b 65 79 20 6d  er P3. The key m
1f1f0 75 73 74 0a 2a 2a 20 62 65 20 61 20 4d 45 4d 5f  ust.** be a MEM_
1f200 49 6e 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  Int..**.** If th
1f210 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45  e OPFLAG_NCHANGE
1f220 20 66 6c 61 67 20 6f 66 20 50 35 20 69 73 20 73   flag of P5 is s
1f230 65 74 2c 20 74 68 65 6e 20 74 68 65 20 72 6f 77  et, then the row
1f240 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 20 69 73   change count is
1f250 0a 2a 2a 20 69 6e 63 72 65 6d 65 6e 74 65 64 20  .** incremented 
1f260 28 6f 74 68 65 72 77 69 73 65 20 6e 6f 74 29 2e  (otherwise not).
1f270 20 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f    If the OPFLAG_
1f280 4c 41 53 54 52 4f 57 49 44 20 66 6c 61 67 20 6f  LASTROWID flag o
1f290 66 20 50 35 20 69 73 20 73 65 74 2c 0a 2a 2a 20  f P5 is set,.** 
1f2a0 74 68 65 6e 20 72 6f 77 69 64 20 69 73 20 73 74  then rowid is st
1f2b0 6f 72 65 64 20 66 6f 72 20 73 75 62 73 65 71 75  ored for subsequ
1f2c0 65 6e 74 20 72 65 74 75 72 6e 20 62 79 20 74 68  ent return by th
1f2d0 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 6c 61 73  e.** sqlite3_las
1f2e0 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 29  t_insert_rowid()
1f2f0 20 66 75 6e 63 74 69 6f 6e 20 28 6f 74 68 65 72   function (other
1f300 77 69 73 65 20 69 74 20 69 73 20 75 6e 6d 6f 64  wise it is unmod
1f310 69 66 69 65 64 29 2e 0a 2a 2a 0a 2a 2a 20 49 66  ified)..**.** If
1f320 20 74 68 65 20 4f 50 46 4c 41 47 5f 55 53 45 53   the OPFLAG_USES
1f330 45 45 4b 52 45 53 55 4c 54 20 66 6c 61 67 20 6f  EEKRESULT flag o
1f340 66 20 50 35 20 69 73 20 73 65 74 20 61 6e 64 20  f P5 is set and 
1f350 69 66 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  if the result of
1f360 0a 2a 2a 20 74 68 65 20 6c 61 73 74 20 73 65 65  .** the last see
1f370 6b 20 6f 70 65 72 61 74 69 6f 6e 20 28 4f 50 5f  k operation (OP_
1f380 4e 6f 74 45 78 69 73 74 73 29 20 77 61 73 20 61  NotExists) was a
1f390 20 73 75 63 63 65 73 73 2c 20 74 68 65 6e 20 74   success, then t
1f3a0 68 69 73 0a 2a 2a 20 6f 70 65 72 61 74 69 6f 6e  his.** operation
1f3b0 20 77 69 6c 6c 20 6e 6f 74 20 61 74 74 65 6d 70   will not attemp
1f3c0 74 20 74 6f 20 66 69 6e 64 20 74 68 65 20 61 70  t to find the ap
1f3d0 70 72 6f 70 72 69 61 74 65 20 72 6f 77 20 62 65  propriate row be
1f3e0 66 6f 72 65 20 64 6f 69 6e 67 0a 2a 2a 20 74 68  fore doing.** th
1f3f0 65 20 69 6e 73 65 72 74 20 62 75 74 20 77 69 6c  e insert but wil
1f400 6c 20 69 6e 73 74 65 61 64 20 6f 76 65 72 77 72  l instead overwr
1f410 69 74 65 20 74 68 65 20 72 6f 77 20 74 68 61 74  ite the row that
1f420 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a 2a   the cursor is.*
1f430 2a 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e  * currently poin
1f440 74 69 6e 67 20 74 6f 2e 20 20 50 72 65 73 75 6d  ting to.  Presum
1f450 61 62 6c 79 2c 20 74 68 65 20 70 72 69 6f 72 20  ably, the prior 
1f460 4f 50 5f 4e 6f 74 45 78 69 73 74 73 20 6f 70 63  OP_NotExists opc
1f470 6f 64 65 0a 2a 2a 20 68 61 73 20 61 6c 72 65 61  ode.** has alrea
1f480 64 79 20 70 6f 73 69 74 69 6f 6e 65 64 20 74 68  dy positioned th
1f490 65 20 63 75 72 73 6f 72 20 63 6f 72 72 65 63 74  e cursor correct
1f4a0 6c 79 2e 20 20 54 68 69 73 20 69 73 20 61 6e 20  ly.  This is an 
1f4b0 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 0a 2a 2a 20  optimization.** 
1f4c0 74 68 61 74 20 62 6f 6f 73 74 73 20 70 65 72 66  that boosts perf
1f4d0 6f 72 6d 61 6e 63 65 20 62 79 20 61 76 6f 69 64  ormance by avoid
1f4e0 69 6e 67 20 72 65 64 75 6e 64 61 6e 74 20 73 65  ing redundant se
1f4f0 65 6b 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  eks..**.** If th
1f500 65 20 4f 50 46 4c 41 47 5f 49 53 55 50 44 41 54  e OPFLAG_ISUPDAT
1f510 45 20 66 6c 61 67 20 69 73 20 73 65 74 2c 20 74  E flag is set, t
1f520 68 65 6e 20 74 68 69 73 20 6f 70 63 6f 64 65 20  hen this opcode 
1f530 69 73 20 70 61 72 74 20 6f 66 20 61 6e 0a 2a 2a  is part of an.**
1f540 20 55 50 44 41 54 45 20 6f 70 65 72 61 74 69 6f   UPDATE operatio
1f550 6e 2e 20 20 4f 74 68 65 72 77 69 73 65 20 28 69  n.  Otherwise (i
1f560 66 20 74 68 65 20 66 6c 61 67 20 69 73 20 63 6c  f the flag is cl
1f570 65 61 72 29 20 74 68 65 6e 20 74 68 69 73 20 6f  ear) then this o
1f580 70 63 6f 64 65 0a 2a 2a 20 69 73 20 70 61 72 74  pcode.** is part
1f590 20 6f 66 20 61 6e 20 49 4e 53 45 52 54 20 6f 70   of an INSERT op
1f5a0 65 72 61 74 69 6f 6e 2e 20 20 54 68 65 20 64 69  eration.  The di
1f5b0 66 66 65 72 65 6e 63 65 20 69 73 20 6f 6e 6c 79  fference is only
1f5c0 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 0a 2a 2a   important to.**
1f5d0 20 74 68 65 20 75 70 64 61 74 65 20 68 6f 6f 6b   the update hook
1f5e0 2e 0a 2a 2a 0a 2a 2a 20 50 61 72 61 6d 65 74 65  ..**.** Paramete
1f5f0 72 20 50 34 20 6d 61 79 20 70 6f 69 6e 74 20 74  r P4 may point t
1f600 6f 20 61 20 73 74 72 69 6e 67 20 63 6f 6e 74 61  o a string conta
1f610 69 6e 69 6e 67 20 74 68 65 20 74 61 62 6c 65 2d  ining the table-
1f620 6e 61 6d 65 2c 20 6f 72 0a 2a 2a 20 6d 61 79 20  name, or.** may 
1f630 62 65 20 4e 55 4c 4c 2e 20 49 66 20 69 74 20 69  be NULL. If it i
1f640 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68 65 6e  s not NULL, then
1f650 20 74 68 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b   the update-hook
1f660 20 0a 2a 2a 20 28 73 71 6c 69 74 65 33 2e 78 55   .** (sqlite3.xU
1f670 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 29 20 69  pdateCallback) i
1f680 73 20 69 6e 76 6f 6b 65 64 20 66 6f 6c 6c 6f 77  s invoked follow
1f690 69 6e 67 20 61 20 73 75 63 63 65 73 73 66 75 6c  ing a successful
1f6a0 20 69 6e 73 65 72 74 2e 0a 2a 2a 0a 2a 2a 20 28   insert..**.** (
1f6b0 57 41 52 4e 49 4e 47 2f 54 4f 44 4f 3a 20 49 66  WARNING/TODO: If
1f6c0 20 50 31 20 69 73 20 61 20 70 73 65 75 64 6f 2d   P1 is a pseudo-
1f6d0 63 75 72 73 6f 72 20 61 6e 64 20 50 32 20 69 73  cursor and P2 is
1f6e0 20 64 79 6e 61 6d 69 63 61 6c 6c 79 0a 2a 2a 20   dynamically.** 
1f6f0 61 6c 6c 6f 63 61 74 65 64 2c 20 74 68 65 6e 20  allocated, then 
1f700 6f 77 6e 65 72 73 68 69 70 20 6f 66 20 50 32 20  ownership of P2 
1f710 69 73 20 74 72 61 6e 73 66 65 72 72 65 64 20 74  is transferred t
1f720 6f 20 74 68 65 20 70 73 65 75 64 6f 2d 63 75 72  o the pseudo-cur
1f730 73 6f 72 0a 2a 2a 20 61 6e 64 20 72 65 67 69 73  sor.** and regis
1f740 74 65 72 20 50 32 20 62 65 63 6f 6d 65 73 20 65  ter P2 becomes e
1f750 70 68 65 6d 65 72 61 6c 2e 20 20 49 66 20 74 68  phemeral.  If th
1f760 65 20 63 75 72 73 6f 72 20 69 73 20 63 68 61 6e  e cursor is chan
1f770 67 65 64 2c 20 74 68 65 0a 2a 2a 20 76 61 6c 75  ged, the.** valu
1f780 65 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 32  e of register P2
1f790 20 77 69 6c 6c 20 74 68 65 6e 20 63 68 61 6e 67   will then chang
1f7a0 65 2e 20 20 4d 61 6b 65 20 73 75 72 65 20 74 68  e.  Make sure th
1f7b0 69 73 20 64 6f 65 73 20 6e 6f 74 0a 2a 2a 20 63  is does not.** c
1f7c0 61 75 73 65 20 61 6e 79 20 70 72 6f 62 6c 65 6d  ause any problem
1f7d0 73 2e 29 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69  s.).**.** This i
1f7e0 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 6c 79 20  nstruction only 
1f7f0 77 6f 72 6b 73 20 6f 6e 20 74 61 62 6c 65 73 2e  works on tables.
1f800 20 20 54 68 65 20 65 71 75 69 76 61 6c 65 6e 74    The equivalent
1f810 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20   instruction.** 
1f820 66 6f 72 20 69 6e 64 69 63 65 73 20 69 73 20 4f  for indices is O
1f830 50 5f 49 64 78 49 6e 73 65 72 74 2e 0a 2a 2f 0a  P_IdxInsert..*/.
1f840 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 73 65 72  /* Opcode: Inser
1f850 74 49 6e 74 20 50 31 20 50 32 20 50 33 20 50 34  tInt P1 P2 P3 P4
1f860 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77   P5.**.** This w
1f870 6f 72 6b 73 20 65 78 61 63 74 6c 79 20 6c 69 6b  orks exactly lik
1f880 65 20 4f 50 5f 49 6e 73 65 72 74 20 65 78 63 65  e OP_Insert exce
1f890 70 74 20 74 68 61 74 20 74 68 65 20 6b 65 79 20  pt that the key 
1f8a0 69 73 20 74 68 65 0a 2a 2a 20 69 6e 74 65 67 65  is the.** intege
1f8b0 72 20 76 61 6c 75 65 20 50 33 2c 20 6e 6f 74 20  r value P3, not 
1f8c0 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
1f8d0 20 69 6e 74 65 67 65 72 20 73 74 6f 72 65 64 20   integer stored 
1f8e0 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  in register P3..
1f8f0 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 73 65 72  */.case OP_Inser
1f900 74 3a 20 0a 63 61 73 65 20 4f 50 5f 49 6e 73 65  t: .case OP_Inse
1f910 72 74 49 6e 74 3a 20 7b 0a 20 20 4d 65 6d 20 2a  rtInt: {.  Mem *
1f920 70 44 61 74 61 3b 20 20 20 20 20 20 20 2f 2a 20  pData;       /* 
1f930 4d 45 4d 20 63 65 6c 6c 20 68 6f 6c 64 69 6e 67  MEM cell holding
1f940 20 64 61 74 61 20 66 6f 72 20 74 68 65 20 72 65   data for the re
1f950 63 6f 72 64 20 74 6f 20 62 65 20 69 6e 73 65 72  cord to be inser
1f960 74 65 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4b  ted */.  Mem *pK
1f970 65 79 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 45  ey;        /* ME
1f980 4d 20 63 65 6c 6c 20 68 6f 6c 64 69 6e 67 20 6b  M cell holding k
1f990 65 79 20 20 66 6f 72 20 74 68 65 20 72 65 63 6f  ey  for the reco
1f9a0 72 64 20 2a 2f 0a 20 20 69 36 34 20 69 4b 65 79  rd */.  i64 iKey
1f9b0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  ;         /* The
1f9c0 20 69 6e 74 65 67 65 72 20 52 4f 57 49 44 20 6f   integer ROWID o
1f9d0 72 20 6b 65 79 20 66 6f 72 20 74 68 65 20 72 65  r key for the re
1f9e0 63 6f 72 64 20 74 6f 20 62 65 20 69 6e 73 65 72  cord to be inser
1f9f0 74 65 64 20 2a 2f 0a 20 20 56 64 62 65 43 75 72  ted */.  VdbeCur
1fa00 73 6f 72 20 2a 70 43 3b 20 20 20 2f 2a 20 43 75  sor *pC;   /* Cu
1fa10 72 73 6f 72 20 74 6f 20 74 61 62 6c 65 20 69 6e  rsor to table in
1fa20 74 6f 20 77 68 69 63 68 20 69 6e 73 65 72 74 20  to which insert 
1fa30 69 73 20 77 72 69 74 74 65 6e 20 2a 2f 0a 20 20  is written */.  
1fa40 69 6e 74 20 6e 5a 65 72 6f 3b 20 20 20 20 20 20  int nZero;      
1fa50 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 7a    /* Number of z
1fa60 65 72 6f 2d 62 79 74 65 73 20 74 6f 20 61 70 70  ero-bytes to app
1fa70 65 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 73 65 65  end */.  int see
1fa80 6b 52 65 73 75 6c 74 3b 20 20 20 2f 2a 20 52 65  kResult;   /* Re
1fa90 73 75 6c 74 20 6f 66 20 70 72 69 6f 72 20 73 65  sult of prior se
1faa0 65 6b 20 6f 72 20 30 20 69 66 20 6e 6f 20 55 53  ek or 0 if no US
1fab0 45 53 45 45 4b 52 45 53 55 4c 54 20 66 6c 61 67  ESEEKRESULT flag
1fac0 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
1fad0 20 2a 7a 44 62 3b 20 20 2f 2a 20 64 61 74 61 62   *zDb;  /* datab
1fae0 61 73 65 20 6e 61 6d 65 20 2d 20 75 73 65 64 20  ase name - used 
1faf0 62 79 20 74 68 65 20 75 70 64 61 74 65 20 68 6f  by the update ho
1fb00 6f 6b 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  ok */.  const ch
1fb10 61 72 20 2a 7a 54 62 6c 3b 20 2f 2a 20 54 61 62  ar *zTbl; /* Tab
1fb20 6c 65 20 6e 61 6d 65 20 2d 20 75 73 65 64 20 62  le name - used b
1fb30 79 20 74 68 65 20 6f 70 64 61 74 65 20 68 6f 6f  y the opdate hoo
1fb40 6b 20 2a 2f 0a 20 20 69 6e 74 20 6f 70 3b 20 20  k */.  int op;  
1fb50 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 70 63 6f           /* Opco
1fb60 64 65 20 66 6f 72 20 75 70 64 61 74 65 20 68 6f  de for update ho
1fb70 6f 6b 3a 20 53 51 4c 49 54 45 5f 55 50 44 41 54  ok: SQLITE_UPDAT
1fb80 45 20 6f 72 20 53 51 4c 49 54 45 5f 49 4e 53 45  E or SQLITE_INSE
1fb90 52 54 20 2a 2f 0a 0a 20 20 70 44 61 74 61 20 3d  RT */..  pData =
1fba0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
1fbb0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1fbc0 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
1fbd0 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
1fbe0 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
1fbf0 6c 69 64 28 70 44 61 74 61 29 20 29 3b 0a 20 20  lid(pData) );.  
1fc00 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
1fc10 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
1fc20 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73  ( pC!=0 );.  ass
1fc30 65 72 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72  ert( pC->pCursor
1fc40 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
1fc50 20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65   pC->pseudoTable
1fc60 52 65 67 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  Reg==0 );.  asse
1fc70 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20  rt( pC->isTable 
1fc80 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52  );.  REGISTER_TR
1fc90 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 44 61  ACE(pOp->p2, pDa
1fca0 74 61 29 3b 0a 0a 20 20 69 66 28 20 70 4f 70 2d  ta);..  if( pOp-
1fcb0 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 6e 73 65  >opcode==OP_Inse
1fcc0 72 74 20 29 7b 0a 20 20 20 20 70 4b 65 79 20 3d  rt ){.    pKey =
1fcd0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
1fce0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4b 65  .    assert( pKe
1fcf0 79 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  y->flags & MEM_I
1fd00 6e 74 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  nt );.    assert
1fd10 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 4b 65  ( memIsValid(pKe
1fd20 79 29 20 29 3b 0a 20 20 20 20 52 45 47 49 53 54  y) );.    REGIST
1fd30 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33  ER_TRACE(pOp->p3
1fd40 2c 20 70 4b 65 79 29 3b 0a 20 20 20 20 69 4b 65  , pKey);.    iKe
1fd50 79 20 3d 20 70 4b 65 79 2d 3e 75 2e 69 3b 0a 20  y = pKey->u.i;. 
1fd60 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65   }else{.    asse
1fd70 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  rt( pOp->opcode=
1fd80 3d 4f 50 5f 49 6e 73 65 72 74 49 6e 74 20 29 3b  =OP_InsertInt );
1fd90 0a 20 20 20 20 69 4b 65 79 20 3d 20 70 4f 70 2d  .    iKey = pOp-
1fda0 3e 70 33 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20  >p3;.  }..  if( 
1fdb0 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47  pOp->p5 & OPFLAG
1fdc0 5f 4e 43 48 41 4e 47 45 20 29 20 70 2d 3e 6e 43  _NCHANGE ) p->nC
1fdd0 68 61 6e 67 65 2b 2b 3b 0a 20 20 69 66 28 20 70  hange++;.  if( p
1fde0 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f  Op->p5 & OPFLAG_
1fdf0 4c 41 53 54 52 4f 57 49 44 20 29 20 64 62 2d 3e  LASTROWID ) db->
1fe00 6c 61 73 74 52 6f 77 69 64 20 3d 20 69 4b 65 79  lastRowid = iKey
1fe10 3b 0a 20 20 69 66 28 20 70 44 61 74 61 2d 3e 66  ;.  if( pData->f
1fe20 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20  lags & MEM_Null 
1fe30 29 7b 0a 20 20 20 20 70 44 61 74 61 2d 3e 7a 20  ){.    pData->z 
1fe40 3d 20 30 3b 0a 20 20 20 20 70 44 61 74 61 2d 3e  = 0;.    pData->
1fe50 6e 20 3d 20 30 3b 0a 20 20 7d 65 6c 73 65 7b 0a  n = 0;.  }else{.
1fe60 20 20 20 20 61 73 73 65 72 74 28 20 70 44 61 74      assert( pDat
1fe70 61 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  a->flags & (MEM_
1fe80 42 6c 6f 62 7c 4d 45 4d 5f 53 74 72 29 20 29 3b  Blob|MEM_Str) );
1fe90 0a 20 20 7d 0a 20 20 73 65 65 6b 52 65 73 75 6c  .  }.  seekResul
1fea0 74 20 3d 20 28 28 70 4f 70 2d 3e 70 35 20 26 20  t = ((pOp->p5 & 
1feb0 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45  OPFLAG_USESEEKRE
1fec0 53 55 4c 54 29 20 3f 20 70 43 2d 3e 73 65 65 6b  SULT) ? pC->seek
1fed0 52 65 73 75 6c 74 20 3a 20 30 29 3b 0a 20 20 69  Result : 0);.  i
1fee0 66 28 20 70 44 61 74 61 2d 3e 66 6c 61 67 73 20  f( pData->flags 
1fef0 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20  & MEM_Zero ){.  
1ff00 20 20 6e 5a 65 72 6f 20 3d 20 70 44 61 74 61 2d    nZero = pData-
1ff10 3e 75 2e 6e 5a 65 72 6f 3b 0a 20 20 7d 65 6c 73  >u.nZero;.  }els
1ff20 65 7b 0a 20 20 20 20 6e 5a 65 72 6f 20 3d 20 30  e{.    nZero = 0
1ff30 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 42  ;.  }.  sqlite3B
1ff40 74 72 65 65 53 65 74 43 61 63 68 65 64 52 6f 77  treeSetCachedRow
1ff50 69 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20  id(pC->pCursor, 
1ff60 30 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74  0);.  rc = sqlit
1ff70 65 33 42 74 72 65 65 49 6e 73 65 72 74 28 70 43  e3BtreeInsert(pC
1ff80 2d 3e 70 43 75 72 73 6f 72 2c 20 30 2c 20 69 4b  ->pCursor, 0, iK
1ff90 65 79 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  ey,.            
1ffa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 44                pD
1ffb0 61 74 61 2d 3e 7a 2c 20 70 44 61 74 61 2d 3e 6e  ata->z, pData->n
1ffc0 2c 20 6e 5a 65 72 6f 2c 0a 20 20 20 20 20 20 20  , nZero,.       
1ffd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ffe0 20 20 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46     pOp->p5 & OPF
1fff0 4c 41 47 5f 41 50 50 45 4e 44 2c 20 73 65 65 6b  LAG_APPEND, seek
20000 52 65 73 75 6c 74 0a 20 20 29 3b 0a 20 20 70 43  Result.  );.  pC
20010 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d  ->rowidIsValid =
20020 20 30 3b 0a 20 20 70 43 2d 3e 64 65 66 65 72 72   0;.  pC->deferr
20030 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20  edMoveto = 0;.  
20040 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20  pC->cacheStatus 
20050 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 0a  = CACHE_STALE;..
20060 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20    /* Invoke the 
20070 75 70 64 61 74 65 2d 68 6f 6f 6b 20 69 66 20 72  update-hook if r
20080 65 71 75 69 72 65 64 2e 20 2a 2f 0a 20 20 69 66  equired. */.  if
20090 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
200a0 26 26 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61  && db->xUpdateCa
200b0 6c 6c 62 61 63 6b 20 26 26 20 70 4f 70 2d 3e 70  llback && pOp->p
200c0 34 2e 7a 20 29 7b 0a 20 20 20 20 7a 44 62 20 3d  4.z ){.    zDb =
200d0 20 64 62 2d 3e 61 44 62 5b 70 43 2d 3e 69 44 62   db->aDb[pC->iDb
200e0 5d 2e 7a 4e 61 6d 65 3b 0a 20 20 20 20 7a 54 62  ].zName;.    zTb
200f0 6c 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20  l = pOp->p4.z;. 
20100 20 20 20 6f 70 20 3d 20 28 28 70 4f 70 2d 3e 70     op = ((pOp->p
20110 35 20 26 20 4f 50 46 4c 41 47 5f 49 53 55 50 44  5 & OPFLAG_ISUPD
20120 41 54 45 29 20 3f 20 53 51 4c 49 54 45 5f 55 50  ATE) ? SQLITE_UP
20130 44 41 54 45 20 3a 20 53 51 4c 49 54 45 5f 49 4e  DATE : SQLITE_IN
20140 53 45 52 54 29 3b 0a 20 20 20 20 61 73 73 65 72  SERT);.    asser
20150 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29  t( pC->isTable )
20160 3b 0a 20 20 20 20 64 62 2d 3e 78 55 70 64 61 74  ;.    db->xUpdat
20170 65 43 61 6c 6c 62 61 63 6b 28 64 62 2d 3e 70 55  eCallback(db->pU
20180 70 64 61 74 65 41 72 67 2c 20 6f 70 2c 20 7a 44  pdateArg, op, zD
20190 62 2c 20 7a 54 62 6c 2c 20 69 4b 65 79 29 3b 0a  b, zTbl, iKey);.
201a0 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
201b0 69 44 62 3e 3d 30 20 29 3b 0a 20 20 7d 0a 20 20  iDb>=0 );.  }.  
201c0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
201d0 6f 64 65 3a 20 44 65 6c 65 74 65 20 50 31 20 50  ode: Delete P1 P
201e0 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 44  2 * P4 *.**.** D
201f0 65 6c 65 74 65 20 74 68 65 20 72 65 63 6f 72 64  elete the record
20200 20 61 74 20 77 68 69 63 68 20 74 68 65 20 50 31   at which the P1
20210 20 63 75 72 73 6f 72 20 69 73 20 63 75 72 72 65   cursor is curre
20220 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 2e 0a 2a  ntly pointing..*
20230 2a 0a 2a 2a 20 54 68 65 20 63 75 72 73 6f 72 20  *.** The cursor 
20240 77 69 6c 6c 20 62 65 20 6c 65 66 74 20 70 6f 69  will be left poi
20250 6e 74 69 6e 67 20 61 74 20 65 69 74 68 65 72 20  nting at either 
20260 74 68 65 20 6e 65 78 74 20 6f 72 20 74 68 65 20  the next or the 
20270 70 72 65 76 69 6f 75 73 0a 2a 2a 20 72 65 63 6f  previous.** reco
20280 72 64 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e  rd in the table.
20290 20 49 66 20 69 74 20 69 73 20 6c 65 66 74 20 70   If it is left p
202a0 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 65 20 6e  ointing at the n
202b0 65 78 74 20 72 65 63 6f 72 64 2c 20 74 68 65 6e  ext record, then
202c0 0a 2a 2a 20 74 68 65 20 6e 65 78 74 20 4e 65 78  .** the next Nex
202d0 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 77 69  t instruction wi
202e0 6c 6c 20 62 65 20 61 20 6e 6f 2d 6f 70 2e 20 20  ll be a no-op.  
202f0 48 65 6e 63 65 20 69 74 20 69 73 20 4f 4b 20 74  Hence it is OK t
20300 6f 20 64 65 6c 65 74 65 0a 2a 2a 20 61 20 72 65  o delete.** a re
20310 63 6f 72 64 20 66 72 6f 6d 20 77 69 74 68 69 6e  cord from within
20320 20 61 6e 20 4e 65 78 74 20 6c 6f 6f 70 2e 0a 2a   an Next loop..*
20330 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c  *.** If the OPFL
20340 41 47 5f 4e 43 48 41 4e 47 45 20 66 6c 61 67 20  AG_NCHANGE flag 
20350 6f 66 20 50 32 20 69 73 20 73 65 74 2c 20 74 68  of P2 is set, th
20360 65 6e 20 74 68 65 20 72 6f 77 20 63 68 61 6e 67  en the row chang
20370 65 20 63 6f 75 6e 74 20 69 73 0a 2a 2a 20 69 6e  e count is.** in
20380 63 72 65 6d 65 6e 74 65 64 20 28 6f 74 68 65 72  cremented (other
20390 77 69 73 65 20 6e 6f 74 29 2e 0a 2a 2a 0a 2a 2a  wise not)..**.**
203a0 20 50 31 20 6d 75 73 74 20 6e 6f 74 20 62 65 20   P1 must not be 
203b0 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 20 20 49  pseudo-table.  I
203c0 74 20 68 61 73 20 74 6f 20 62 65 20 61 20 72 65  t has to be a re
203d0 61 6c 20 74 61 62 6c 65 20 77 69 74 68 0a 2a 2a  al table with.**
203e0 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 2e 0a   multiple rows..
203f0 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69 73 20 6e  **.** If P4 is n
20400 6f 74 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 69 74  ot NULL, then it
20410 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20   is the name of 
20420 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 50  the table that P
20430 31 20 69 73 0a 2a 2a 20 70 6f 69 6e 74 69 6e 67  1 is.** pointing
20440 20 74 6f 2e 20 20 54 68 65 20 75 70 64 61 74 65   to.  The update
20450 20 68 6f 6f 6b 20 77 69 6c 6c 20 62 65 20 69 6e   hook will be in
20460 76 6f 6b 65 64 2c 20 69 66 20 69 74 20 65 78 69  voked, if it exi
20470 73 74 73 2e 0a 2a 2a 20 49 66 20 50 34 20 69 73  sts..** If P4 is
20480 20 6e 6f 74 20 4e 55 4c 4c 20 74 68 65 6e 20 74   not NULL then t
20490 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d 75 73  he P1 cursor mus
204a0 74 20 68 61 76 65 20 62 65 65 6e 20 70 6f 73 69  t have been posi
204b0 74 69 6f 6e 65 64 0a 2a 2a 20 75 73 69 6e 67 20  tioned.** using 
204c0 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20 70 72 69 6f  OP_NotFound prio
204d0 72 20 74 6f 20 69 6e 76 6f 6b 69 6e 67 20 74 68  r to invoking th
204e0 69 73 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a 63 61  is opcode..*/.ca
204f0 73 65 20 4f 50 5f 44 65 6c 65 74 65 3a 20 7b 0a  se OP_Delete: {.
20500 20 20 69 36 34 20 69 4b 65 79 3b 0a 20 20 56 64    i64 iKey;.  Vd
20510 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20  beCursor *pC;.. 
20520 20 69 4b 65 79 20 3d 20 30 3b 0a 20 20 61 73 73   iKey = 0;.  ass
20530 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
20540 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
20550 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
20560 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
20570 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
20580 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
20590 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20 29  pC->pCursor!=0 )
205a0 3b 20 20 2f 2a 20 4f 6e 6c 79 20 76 61 6c 69 64  ;  /* Only valid
205b0 20 66 6f 72 20 72 65 61 6c 20 74 61 62 6c 65 73   for real tables
205c0 2c 20 6e 6f 20 70 73 65 75 64 6f 74 61 62 6c 65  , no pseudotable
205d0 73 20 2a 2f 0a 0a 20 20 2f 2a 20 49 66 20 74 68  s */..  /* If th
205e0 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20 77 69  e update-hook wi
205f0 6c 6c 20 62 65 20 69 6e 76 6f 6b 65 64 2c 20 73  ll be invoked, s
20600 65 74 20 69 4b 65 79 20 74 6f 20 74 68 65 20 72  et iKey to the r
20610 6f 77 69 64 20 6f 66 20 74 68 65 0a 20 20 2a 2a  owid of the.  **
20620 20 72 6f 77 20 62 65 69 6e 67 20 64 65 6c 65 74   row being delet
20630 65 64 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 64  ed..  */.  if( d
20640 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61  b->xUpdateCallba
20650 63 6b 20 26 26 20 70 4f 70 2d 3e 70 34 2e 7a 20  ck && pOp->p4.z 
20660 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ){.    assert( p
20670 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20  C->isTable );.  
20680 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 72 6f    assert( pC->ro
20690 77 69 64 49 73 56 61 6c 69 64 20 29 3b 20 20 2f  widIsValid );  /
206a0 2a 20 6c 61 73 74 52 6f 77 69 64 20 73 65 74 20  * lastRowid set 
206b0 62 79 20 70 72 65 76 69 6f 75 73 20 4f 50 5f 4e  by previous OP_N
206c0 6f 74 46 6f 75 6e 64 20 2a 2f 0a 20 20 20 20 69  otFound */.    i
206d0 4b 65 79 20 3d 20 70 43 2d 3e 6c 61 73 74 52 6f  Key = pC->lastRo
206e0 77 69 64 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 54  wid;.  }..  /* T
206f0 68 65 20 4f 50 5f 44 65 6c 65 74 65 20 6f 70 63  he OP_Delete opc
20700 6f 64 65 20 61 6c 77 61 79 73 20 66 6f 6c 6c 6f  ode always follo
20710 77 73 20 61 6e 20 4f 50 5f 4e 6f 74 45 78 69 73  ws an OP_NotExis
20720 74 73 20 6f 72 20 4f 50 5f 4c 61 73 74 20 6f 72  ts or OP_Last or
20730 0a 20 20 2a 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20  .  ** OP_Column 
20740 6f 6e 20 74 68 65 20 73 61 6d 65 20 74 61 62 6c  on the same tabl
20750 65 20 77 69 74 68 6f 75 74 20 61 6e 79 20 69 6e  e without any in
20760 74 65 72 76 65 6e 69 6e 67 20 6f 70 65 72 61 74  tervening operat
20770 69 6f 6e 73 20 74 68 61 74 0a 20 20 2a 2a 20 6d  ions that.  ** m
20780 69 67 68 74 20 6d 6f 76 65 20 6f 72 20 69 6e 76  ight move or inv
20790 61 6c 69 64 61 74 65 20 74 68 65 20 63 75 72 73  alidate the curs
207a0 6f 72 2e 20 20 48 65 6e 63 65 20 63 75 72 73 6f  or.  Hence curso
207b0 72 20 70 43 20 69 73 20 61 6c 77 61 79 73 20 70  r pC is always p
207c0 6f 69 6e 74 69 6e 67 0a 20 20 2a 2a 20 74 6f 20  ointing.  ** to 
207d0 74 68 65 20 72 6f 77 20 74 6f 20 62 65 20 64 65  the row to be de
207e0 6c 65 74 65 64 20 61 6e 64 20 74 68 65 20 73 71  leted and the sq
207f0 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d  lite3VdbeCursorM
20800 6f 76 65 74 6f 28 29 20 6f 70 65 72 61 74 69 6f  oveto() operatio
20810 6e 0a 20 20 2a 2a 20 62 65 6c 6f 77 20 69 73 20  n.  ** below is 
20820 61 6c 77 61 79 73 20 61 20 6e 6f 2d 6f 70 20 61  always a no-op a
20830 6e 64 20 63 61 6e 6e 6f 74 20 66 61 69 6c 2e 20  nd cannot fail. 
20840 20 57 65 20 77 69 6c 6c 20 72 75 6e 20 69 74 20   We will run it 
20850 61 6e 79 68 6f 77 2c 20 74 68 6f 75 67 68 2c 0a  anyhow, though,.
20860 20 20 2a 2a 20 74 6f 20 67 75 61 72 64 20 61 67    ** to guard ag
20870 61 69 6e 73 74 20 66 75 74 75 72 65 20 63 68 61  ainst future cha
20880 6e 67 65 73 20 74 6f 20 74 68 65 20 63 6f 64 65  nges to the code
20890 20 67 65 6e 65 72 61 74 6f 72 2e 0a 20 20 2a 2a   generator..  **
208a0 2f 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  /.  assert( pC->
208b0 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d  deferredMoveto==
208c0 30 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  0 );.  rc = sqli
208d0 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76  te3VdbeCursorMov
208e0 65 74 6f 28 70 43 29 3b 0a 20 20 69 66 28 20 4e  eto(pC);.  if( N
208f0 45 56 45 52 28 72 63 21 3d 53 51 4c 49 54 45 5f  EVER(rc!=SQLITE_
20900 4f 4b 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74  OK) ) goto abort
20910 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a  _due_to_error;..
20920 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 53 65    sqlite3BtreeSe
20930 74 43 61 63 68 65 64 52 6f 77 69 64 28 70 43 2d  tCachedRowid(pC-
20940 3e 70 43 75 72 73 6f 72 2c 20 30 29 3b 0a 20 20  >pCursor, 0);.  
20950 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
20960 65 44 65 6c 65 74 65 28 70 43 2d 3e 70 43 75 72  eDelete(pC->pCur
20970 73 6f 72 29 3b 0a 20 20 70 43 2d 3e 63 61 63 68  sor);.  pC->cach
20980 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
20990 53 54 41 4c 45 3b 0a 0a 20 20 2f 2a 20 49 6e 76  STALE;..  /* Inv
209a0 6f 6b 65 20 74 68 65 20 75 70 64 61 74 65 2d 68  oke the update-h
209b0 6f 6f 6b 20 69 66 20 72 65 71 75 69 72 65 64 2e  ook if required.
209c0 20 2a 2f 0a 20 20 69 66 28 20 72 63 3d 3d 53 51   */.  if( rc==SQ
209d0 4c 49 54 45 5f 4f 4b 20 26 26 20 64 62 2d 3e 78  LITE_OK && db->x
209e0 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20 26  UpdateCallback &
209f0 26 20 70 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20  & pOp->p4.z ){. 
20a00 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a     const char *z
20a10 44 62 20 3d 20 64 62 2d 3e 61 44 62 5b 70 43 2d  Db = db->aDb[pC-
20a20 3e 69 44 62 5d 2e 7a 4e 61 6d 65 3b 0a 20 20 20  >iDb].zName;.   
20a30 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 62   const char *zTb
20a40 6c 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20  l = pOp->p4.z;. 
20a50 20 20 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61     db->xUpdateCa
20a60 6c 6c 62 61 63 6b 28 64 62 2d 3e 70 55 70 64 61  llback(db->pUpda
20a70 74 65 41 72 67 2c 20 53 51 4c 49 54 45 5f 44 45  teArg, SQLITE_DE
20a80 4c 45 54 45 2c 20 7a 44 62 2c 20 7a 54 62 6c 2c  LETE, zDb, zTbl,
20a90 20 69 4b 65 79 29 3b 0a 20 20 20 20 61 73 73 65   iKey);.    asse
20aa0 72 74 28 20 70 43 2d 3e 69 44 62 3e 3d 30 20 29  rt( pC->iDb>=0 )
20ab0 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d  ;.  }.  if( pOp-
20ac0 3e 70 32 20 26 20 4f 50 46 4c 41 47 5f 4e 43 48  >p2 & OPFLAG_NCH
20ad0 41 4e 47 45 20 29 20 70 2d 3e 6e 43 68 61 6e 67  ANGE ) p->nChang
20ae0 65 2b 2b 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  e++;.  break;.}.
20af0 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 73 65 74  /* Opcode: Reset
20b00 43 6f 75 6e 74 20 2a 20 2a 20 2a 20 2a 20 2a 0a  Count * * * * *.
20b10 2a 2a 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65 20  **.** The value 
20b20 6f 66 20 74 68 65 20 63 68 61 6e 67 65 20 63 6f  of the change co
20b30 75 6e 74 65 72 20 69 73 20 63 6f 70 69 65 64 20  unter is copied 
20b40 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20  to the database 
20b50 68 61 6e 64 6c 65 0a 2a 2a 20 63 68 61 6e 67 65  handle.** change
20b60 20 63 6f 75 6e 74 65 72 20 28 72 65 74 75 72 6e   counter (return
20b70 65 64 20 62 79 20 73 75 62 73 65 71 75 65 6e 74  ed by subsequent
20b80 20 63 61 6c 6c 73 20 74 6f 20 73 71 6c 69 74 65   calls to sqlite
20b90 33 5f 63 68 61 6e 67 65 73 28 29 29 2e 0a 2a 2a  3_changes())..**
20ba0 20 54 68 65 6e 20 74 68 65 20 56 4d 73 20 69 6e   Then the VMs in
20bb0 74 65 72 6e 61 6c 20 63 68 61 6e 67 65 20 63 6f  ternal change co
20bc0 75 6e 74 65 72 20 72 65 73 65 74 73 20 74 6f 20  unter resets to 
20bd0 30 2e 0a 2a 2a 20 54 68 69 73 20 69 73 20 75 73  0..** This is us
20be0 65 64 20 62 79 20 74 72 69 67 67 65 72 20 70 72  ed by trigger pr
20bf0 6f 67 72 61 6d 73 2e 0a 2a 2f 0a 63 61 73 65 20  ograms..*/.case 
20c00 4f 50 5f 52 65 73 65 74 43 6f 75 6e 74 3a 20 7b  OP_ResetCount: {
20c10 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65  .  sqlite3VdbeSe
20c20 74 43 68 61 6e 67 65 73 28 64 62 2c 20 70 2d 3e  tChanges(db, p->
20c30 6e 43 68 61 6e 67 65 29 3b 0a 20 20 70 2d 3e 6e  nChange);.  p->n
20c40 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20 62 72  Change = 0;.  br
20c50 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
20c60 65 3a 20 52 6f 77 44 61 74 61 20 50 31 20 50 32  e: RowData P1 P2
20c70 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69   * * *.**.** Wri
20c80 74 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  te into register
20c90 20 50 32 20 74 68 65 20 63 6f 6d 70 6c 65 74 65   P2 the complete
20ca0 20 72 6f 77 20 64 61 74 61 20 66 6f 72 20 63 75   row data for cu
20cb0 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 54 68 65 72  rsor P1..** Ther
20cc0 65 20 69 73 20 6e 6f 20 69 6e 74 65 72 70 72 65  e is no interpre
20cd0 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 64 61  tation of the da
20ce0 74 61 2e 20 20 0a 2a 2a 20 49 74 20 69 73 20 6a  ta.  .** It is j
20cf0 75 73 74 20 63 6f 70 69 65 64 20 6f 6e 74 6f 20  ust copied onto 
20d00 74 68 65 20 50 32 20 72 65 67 69 73 74 65 72 20  the P2 register 
20d10 65 78 61 63 74 6c 79 20 61 73 20 0a 2a 2a 20 69  exactly as .** i
20d20 74 20 69 73 20 66 6f 75 6e 64 20 69 6e 20 74 68  t is found in th
20d30 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e  e database file.
20d40 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31  .**.** If the P1
20d50 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20   cursor must be 
20d60 70 6f 69 6e 74 69 6e 67 20 74 6f 20 61 20 76 61  pointing to a va
20d70 6c 69 64 20 72 6f 77 20 28 6e 6f 74 20 61 20 4e  lid row (not a N
20d80 55 4c 4c 20 72 6f 77 29 0a 2a 2a 20 6f 66 20 61  ULL row).** of a
20d90 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74   real table, not
20da0 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e   a pseudo-table.
20db0 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  .*/./* Opcode: R
20dc0 6f 77 4b 65 79 20 50 31 20 50 32 20 2a 20 2a 20  owKey P1 P2 * * 
20dd0 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 69 6e  *.**.** Write in
20de0 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 20 74  to register P2 t
20df0 68 65 20 63 6f 6d 70 6c 65 74 65 20 72 6f 77 20  he complete row 
20e00 6b 65 79 20 66 6f 72 20 63 75 72 73 6f 72 20 50  key for cursor P
20e10 31 2e 0a 2a 2a 20 54 68 65 72 65 20 69 73 20 6e  1..** There is n
20e20 6f 20 69 6e 74 65 72 70 72 65 74 61 74 69 6f 6e  o interpretation
20e30 20 6f 66 20 74 68 65 20 64 61 74 61 2e 20 20 0a   of the data.  .
20e40 2a 2a 20 54 68 65 20 6b 65 79 20 69 73 20 63 6f  ** The key is co
20e50 70 69 65 64 20 6f 6e 74 6f 20 74 68 65 20 50 33  pied onto the P3
20e60 20 72 65 67 69 73 74 65 72 20 65 78 61 63 74 6c   register exactl
20e70 79 20 61 73 20 0a 2a 2a 20 69 74 20 69 73 20 66  y as .** it is f
20e80 6f 75 6e 64 20 69 6e 20 74 68 65 20 64 61 74 61  ound in the data
20e90 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a  base file..**.**
20ea0 20 49 66 20 74 68 65 20 50 31 20 63 75 72 73 6f   If the P1 curso
20eb0 72 20 6d 75 73 74 20 62 65 20 70 6f 69 6e 74 69  r must be pointi
20ec0 6e 67 20 74 6f 20 61 20 76 61 6c 69 64 20 72 6f  ng to a valid ro
20ed0 77 20 28 6e 6f 74 20 61 20 4e 55 4c 4c 20 72 6f  w (not a NULL ro
20ee0 77 29 0a 2a 2a 20 6f 66 20 61 20 72 65 61 6c 20  w).** of a real 
20ef0 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65  table, not a pse
20f00 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61  udo-table..*/.ca
20f10 73 65 20 4f 50 5f 52 6f 77 4b 65 79 3a 0a 63 61  se OP_RowKey:.ca
20f20 73 65 20 4f 50 5f 52 6f 77 44 61 74 61 3a 20 7b  se OP_RowData: {
20f30 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
20f40 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70  C;.  BtCursor *p
20f50 43 72 73 72 3b 0a 20 20 75 33 32 20 6e 3b 0a 20  Crsr;.  u32 n;. 
20f60 20 69 36 34 20 6e 36 34 3b 0a 0a 20 20 70 4f 75   i64 n64;..  pOu
20f70 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
20f80 32 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f  2];.  memAboutTo
20f90 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b  Change(p, pOut);
20fa0 0a 0a 20 20 2f 2a 20 4e 6f 74 65 20 74 68 61 74  ..  /* Note that
20fb0 20 52 6f 77 4b 65 79 20 61 6e 64 20 52 6f 77 44   RowKey and RowD
20fc0 61 74 61 20 61 72 65 20 72 65 61 6c 6c 79 20 65  ata are really e
20fd0 78 61 63 74 6c 79 20 74 68 65 20 73 61 6d 65 20  xactly the same 
20fe0 69 6e 73 74 72 75 63 74 69 6f 6e 20 2a 2f 0a 20  instruction */. 
20ff0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
21000 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
21010 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  ->nCursor );.  p
21020 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
21030 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
21040 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 7c 7c 20   pC->isTable || 
21050 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
21060 52 6f 77 4b 65 79 20 29 3b 0a 20 20 61 73 73 65  RowKey );.  asse
21070 72 74 28 20 70 43 2d 3e 69 73 49 6e 64 65 78 20  rt( pC->isIndex 
21080 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  || pOp->opcode==
21090 4f 50 5f 52 6f 77 44 61 74 61 20 29 3b 0a 20 20  OP_RowData );.  
210a0 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
210b0 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 6e  .  assert( pC->n
210c0 75 6c 6c 52 6f 77 3d 3d 30 20 29 3b 0a 20 20 61  ullRow==0 );.  a
210d0 73 73 65 72 74 28 20 70 43 2d 3e 70 73 65 75 64  ssert( pC->pseud
210e0 6f 54 61 62 6c 65 52 65 67 3d 3d 30 20 29 3b 0a  oTableReg==0 );.
210f0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43    assert( pC->pC
21100 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 70 43  ursor!=0 );.  pC
21110 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f  rsr = pC->pCurso
21120 72 3b 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c  r;.  assert( sql
21130 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 49  ite3BtreeCursorI
21140 73 56 61 6c 69 64 28 70 43 72 73 72 29 20 29 3b  sValid(pCrsr) );
21150 0a 0a 20 20 2f 2a 20 54 68 65 20 4f 50 5f 52 6f  ..  /* The OP_Ro
21160 77 4b 65 79 20 61 6e 64 20 4f 50 5f 52 6f 77 44  wKey and OP_RowD
21170 61 74 61 20 6f 70 63 6f 64 65 73 20 61 6c 77 61  ata opcodes alwa
21180 79 73 20 66 6f 6c 6c 6f 77 20 4f 50 5f 4e 6f 74  ys follow OP_Not
21190 45 78 69 73 74 73 20 6f 72 0a 20 20 2a 2a 20 4f  Exists or.  ** O
211a0 50 5f 52 65 77 69 6e 64 2f 4f 70 5f 4e 65 78 74  P_Rewind/Op_Next
211b0 20 77 69 74 68 20 6e 6f 20 69 6e 74 65 72 76 65   with no interve
211c0 6e 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e  ning instruction
211d0 73 20 74 68 61 74 20 6d 69 67 68 74 20 69 6e 76  s that might inv
211e0 61 6c 69 64 61 74 65 0a 20 20 2a 2a 20 74 68 65  alidate.  ** the
211f0 20 63 75 72 73 6f 72 2e 20 20 48 65 6e 63 65 20   cursor.  Hence 
21200 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 71  the following sq
21210 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d  lite3VdbeCursorM
21220 6f 76 65 74 6f 28 29 20 63 61 6c 6c 20 69 73 20  oveto() call is 
21230 61 6c 77 61 79 73 0a 20 20 2a 2a 20 61 20 6e 6f  always.  ** a no
21240 2d 6f 70 20 61 6e 64 20 63 61 6e 20 6e 65 76 65  -op and can neve
21250 72 20 66 61 69 6c 2e 20 20 42 75 74 20 77 65 20  r fail.  But we 
21260 6c 65 61 76 65 20 69 74 20 69 6e 20 70 6c 61 63  leave it in plac
21270 65 20 61 73 20 61 20 73 61 66 65 74 79 2e 0a 20  e as a safety.. 
21280 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 43   */.  assert( pC
21290 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
212a0 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 73 71  ==0 );.  rc = sq
212b0 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d  lite3VdbeCursorM
212c0 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20 69 66 28  oveto(pC);.  if(
212d0 20 4e 45 56 45 52 28 72 63 21 3d 53 51 4c 49 54   NEVER(rc!=SQLIT
212e0 45 5f 4f 4b 29 20 29 20 67 6f 74 6f 20 61 62 6f  E_OK) ) goto abo
212f0 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
21300 0a 0a 20 20 69 66 28 20 70 43 2d 3e 69 73 49 6e  ..  if( pC->isIn
21310 64 65 78 20 29 7b 0a 20 20 20 20 61 73 73 65 72  dex ){.    asser
21320 74 28 20 21 70 43 2d 3e 69 73 54 61 62 6c 65 20  t( !pC->isTable 
21330 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  );.    rc = sqli
21340 74 65 33 42 74 72 65 65 4b 65 79 53 69 7a 65 28  te3BtreeKeySize(
21350 70 43 72 73 72 2c 20 26 6e 36 34 29 3b 0a 20 20  pCrsr, &n64);.  
21360 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51    assert( rc==SQ
21370 4c 49 54 45 5f 4f 4b 20 29 3b 20 20 20 20 2f 2a  LITE_OK );    /*
21380 20 54 72 75 65 20 62 65 63 61 75 73 65 20 6f 66   True because of
21390 20 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29 20   CursorMoveto() 
213a0 63 61 6c 6c 20 61 62 6f 76 65 20 2a 2f 0a 20 20  call above */.  
213b0 20 20 69 66 28 20 6e 36 34 3e 64 62 2d 3e 61 4c    if( n64>db->aL
213c0 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49  imit[SQLITE_LIMI
213d0 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20  T_LENGTH] ){.   
213e0 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b     goto too_big;
213f0 0a 20 20 20 20 7d 0a 20 20 20 20 6e 20 3d 20 28  .    }.    n = (
21400 75 33 32 29 6e 36 34 3b 0a 20 20 7d 65 6c 73 65  u32)n64;.  }else
21410 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  {.    rc = sqlit
21420 65 33 42 74 72 65 65 44 61 74 61 53 69 7a 65 28  e3BtreeDataSize(
21430 70 43 72 73 72 2c 20 26 6e 29 3b 0a 20 20 20 20  pCrsr, &n);.    
21440 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49  assert( rc==SQLI
21450 54 45 5f 4f 4b 20 29 3b 20 20 20 20 2f 2a 20 44  TE_OK );    /* D
21460 61 74 61 53 69 7a 65 28 29 20 63 61 6e 6e 6f 74  ataSize() cannot
21470 20 66 61 69 6c 20 2a 2f 0a 20 20 20 20 69 66 28   fail */.    if(
21480 20 6e 3e 28 75 33 32 29 64 62 2d 3e 61 4c 69 6d   n>(u32)db->aLim
21490 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f  it[SQLITE_LIMIT_
214a0 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 20  LENGTH] ){.     
214b0 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20   goto too_big;. 
214c0 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 73     }.  }.  if( s
214d0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 47 72 6f  qlite3VdbeMemGro
214e0 77 28 70 4f 75 74 2c 20 6e 2c 20 30 29 20 29 7b  w(pOut, n, 0) ){
214f0 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  .    goto no_mem
21500 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 6e 20  ;.  }.  pOut->n 
21510 3d 20 6e 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70  = n;.  MemSetTyp
21520 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f  eFlag(pOut, MEM_
21530 42 6c 6f 62 29 3b 0a 20 20 69 66 28 20 70 43 2d  Blob);.  if( pC-
21540 3e 69 73 49 6e 64 65 78 20 29 7b 0a 20 20 20 20  >isIndex ){.    
21550 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
21560 65 4b 65 79 28 70 43 72 73 72 2c 20 30 2c 20 6e  eKey(pCrsr, 0, n
21570 2c 20 70 4f 75 74 2d 3e 7a 29 3b 0a 20 20 7d 65  , pOut->z);.  }e
21580 6c 73 65 7b 0a 20 20 20 20 72 63 20 3d 20 73 71  lse{.    rc = sq
21590 6c 69 74 65 33 42 74 72 65 65 44 61 74 61 28 70  lite3BtreeData(p
215a0 43 72 73 72 2c 20 30 2c 20 6e 2c 20 70 4f 75 74  Crsr, 0, n, pOut
215b0 2d 3e 7a 29 3b 0a 20 20 7d 0a 20 20 70 4f 75 74  ->z);.  }.  pOut
215c0 2d 3e 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55  ->enc = SQLITE_U
215d0 54 46 38 3b 20 20 2f 2a 20 49 6e 20 63 61 73 65  TF8;  /* In case
215e0 20 74 68 65 20 62 6c 6f 62 20 69 73 20 65 76 65   the blob is eve
215f0 72 20 63 61 73 74 20 74 6f 20 74 65 78 74 20 2a  r cast to text *
21600 2f 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  /.  UPDATE_MAX_B
21610 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20  LOBSIZE(pOut);. 
21620 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
21630 63 6f 64 65 3a 20 52 6f 77 69 64 20 50 31 20 50  code: Rowid P1 P
21640 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 74  2 * * *.**.** St
21650 6f 72 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  ore in register 
21660 50 32 20 61 6e 20 69 6e 74 65 67 65 72 20 77 68  P2 an integer wh
21670 69 63 68 20 69 73 20 74 68 65 20 6b 65 79 20 6f  ich is the key o
21680 66 20 74 68 65 20 74 61 62 6c 65 20 65 6e 74 72  f the table entr
21690 79 20 74 68 61 74 0a 2a 2a 20 50 31 20 69 73 20  y that.** P1 is 
216a0 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 20  currently point 
216b0 74 6f 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 63 61 6e  to..**.** P1 can
216c0 20 62 65 20 65 69 74 68 65 72 20 61 6e 20 6f 72   be either an or
216d0 64 69 6e 61 72 79 20 74 61 62 6c 65 20 6f 72 20  dinary table or 
216e0 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e  a virtual table.
216f0 20 20 54 68 65 72 65 20 75 73 65 64 20 74 6f 0a    There used to.
21700 2a 2a 20 62 65 20 61 20 73 65 70 61 72 61 74 65  ** be a separate
21710 20 4f 50 5f 56 52 6f 77 69 64 20 6f 70 63 6f 64   OP_VRowid opcod
21720 65 20 66 6f 72 20 75 73 65 20 77 69 74 68 20 76  e for use with v
21730 69 72 74 75 61 6c 20 74 61 62 6c 65 73 2c 20 62  irtual tables, b
21740 75 74 20 74 68 69 73 0a 2a 2a 20 6f 6e 65 20 6f  ut this.** one o
21750 70 63 6f 64 65 20 6e 6f 77 20 77 6f 72 6b 73 20  pcode now works 
21760 66 6f 72 20 62 6f 74 68 20 74 61 62 6c 65 20 74  for both table t
21770 79 70 65 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  ypes..*/.case OP
21780 5f 52 6f 77 69 64 3a 20 7b 20 20 20 20 20 20 20  _Rowid: {       
21790 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
217a0 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a  2-prerelease */.
217b0 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
217c0 3b 0a 20 20 69 36 34 20 76 3b 0a 20 20 73 71 6c  ;.  i64 v;.  sql
217d0 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62  ite3_vtab *pVtab
217e0 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65  ;.  const sqlite
217f0 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c  3_module *pModul
21800 65 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  e;..  assert( pO
21810 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
21820 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
21830 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
21840 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
21850 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
21860 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 73 65   assert( pC->pse
21870 75 64 6f 54 61 62 6c 65 52 65 67 3d 3d 30 20 29  udoTableReg==0 )
21880 3b 0a 20 20 69 66 28 20 70 43 2d 3e 6e 75 6c 6c  ;.  if( pC->null
21890 52 6f 77 20 29 7b 0a 20 20 20 20 70 4f 75 74 2d  Row ){.    pOut-
218a0 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c  >flags = MEM_Nul
218b0 6c 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  l;.    break;.  
218c0 7d 65 6c 73 65 20 69 66 28 20 70 43 2d 3e 64 65  }else if( pC->de
218d0 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 29 7b 0a  ferredMoveto ){.
218e0 20 20 20 20 76 20 3d 20 70 43 2d 3e 6d 6f 76 65      v = pC->move
218f0 74 6f 54 61 72 67 65 74 3b 0a 23 69 66 6e 64 65  toTarget;.#ifnde
21900 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
21910 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 7d 65 6c  RTUALTABLE.  }el
21920 73 65 20 69 66 28 20 70 43 2d 3e 70 56 74 61 62  se if( pC->pVtab
21930 43 75 72 73 6f 72 20 29 7b 0a 20 20 20 20 70 56  Cursor ){.    pV
21940 74 61 62 20 3d 20 70 43 2d 3e 70 56 74 61 62 43  tab = pC->pVtabC
21950 75 72 73 6f 72 2d 3e 70 56 74 61 62 3b 0a 20 20  ursor->pVtab;.  
21960 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61    pModule = pVta
21970 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 20 20  b->pModule;.    
21980 61 73 73 65 72 74 28 20 70 4d 6f 64 75 6c 65 2d  assert( pModule-
21990 3e 78 52 6f 77 69 64 20 29 3b 0a 20 20 20 20 72  >xRowid );.    r
219a0 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 52 6f  c = pModule->xRo
219b0 77 69 64 28 70 43 2d 3e 70 56 74 61 62 43 75 72  wid(pC->pVtabCur
219c0 73 6f 72 2c 20 26 76 29 3b 0a 20 20 20 20 69 6d  sor, &v);.    im
219d0 70 6f 72 74 56 74 61 62 45 72 72 4d 73 67 28 70  portVtabErrMsg(p
219e0 2c 20 70 56 74 61 62 29 3b 0a 23 65 6e 64 69 66  , pVtab);.#endif
219f0 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
21a00 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a  VIRTUALTABLE */.
21a10 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73    }else{.    ass
21a20 65 72 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72  ert( pC->pCursor
21a30 21 3d 30 20 29 3b 0a 20 20 20 20 72 63 20 3d 20  !=0 );.    rc = 
21a40 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f  sqlite3VdbeCurso
21a50 72 4d 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20 20  rMoveto(pC);.   
21a60 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61   if( rc ) goto a
21a70 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
21a80 72 3b 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 72  r;.    if( pC->r
21a90 6f 77 69 64 49 73 56 61 6c 69 64 20 29 7b 0a 20  owidIsValid ){. 
21aa0 20 20 20 20 20 76 20 3d 20 70 43 2d 3e 6c 61 73       v = pC->las
21ab0 74 52 6f 77 69 64 3b 0a 20 20 20 20 7d 65 6c 73  tRowid;.    }els
21ac0 65 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71  e{.      rc = sq
21ad0 6c 69 74 65 33 42 74 72 65 65 4b 65 79 53 69 7a  lite3BtreeKeySiz
21ae0 65 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26  e(pC->pCursor, &
21af0 76 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  v);.      assert
21b00 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
21b10 29 3b 20 20 2f 2a 20 41 6c 77 61 79 73 20 73 6f  );  /* Always so
21b20 20 62 65 63 61 75 73 65 20 6f 66 20 43 75 72 73   because of Curs
21b30 6f 72 4d 6f 76 65 74 6f 28 29 20 61 62 6f 76 65  orMoveto() above
21b40 20 2a 2f 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20   */.    }.  }.  
21b50 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20  pOut->u.i = v;. 
21b60 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
21b70 63 6f 64 65 3a 20 4e 75 6c 6c 52 6f 77 20 50 31  code: NullRow P1
21b80 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4d   * * * *.**.** M
21b90 6f 76 65 20 74 68 65 20 63 75 72 73 6f 72 20 50  ove the cursor P
21ba0 31 20 74 6f 20 61 20 6e 75 6c 6c 20 72 6f 77 2e  1 to a null row.
21bb0 20 20 41 6e 79 20 4f 50 5f 43 6f 6c 75 6d 6e 20    Any OP_Column 
21bc0 6f 70 65 72 61 74 69 6f 6e 73 0a 2a 2a 20 74 68  operations.** th
21bd0 61 74 20 6f 63 63 75 72 20 77 68 69 6c 65 20 74  at occur while t
21be0 68 65 20 63 75 72 73 6f 72 20 69 73 20 6f 6e 20  he cursor is on 
21bf0 74 68 65 20 6e 75 6c 6c 20 72 6f 77 20 77 69 6c  the null row wil
21c00 6c 20 61 6c 77 61 79 73 0a 2a 2a 20 77 72 69 74  l always.** writ
21c10 65 20 61 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73  e a NULL..*/.cas
21c20 65 20 4f 50 5f 4e 75 6c 6c 52 6f 77 3a 20 7b 0a  e OP_NullRow: {.
21c30 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
21c40 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
21c50 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
21c60 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
21c70 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
21c80 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
21c90 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
21ca0 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b  pC->nullRow = 1;
21cb0 0a 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61  .  pC->rowidIsVa
21cc0 6c 69 64 20 3d 20 30 3b 0a 20 20 69 66 28 20 70  lid = 0;.  if( p
21cd0 43 2d 3e 70 43 75 72 73 6f 72 20 29 7b 0a 20 20  C->pCursor ){.  
21ce0 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 6c    sqlite3BtreeCl
21cf0 65 61 72 43 75 72 73 6f 72 28 70 43 2d 3e 70 43  earCursor(pC->pC
21d00 75 72 73 6f 72 29 3b 0a 20 20 7d 0a 20 20 62 72  ursor);.  }.  br
21d10 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
21d20 65 3a 20 4c 61 73 74 20 50 31 20 50 32 20 2a 20  e: Last P1 P2 * 
21d30 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e 65  * *.**.** The ne
21d40 78 74 20 75 73 65 20 6f 66 20 74 68 65 20 52 6f  xt use of the Ro
21d50 77 69 64 20 6f 72 20 43 6f 6c 75 6d 6e 20 6f 72  wid or Column or
21d60 20 4e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   Next instructio
21d70 6e 20 66 6f 72 20 50 31 20 0a 2a 2a 20 77 69 6c  n for P1 .** wil
21d80 6c 20 72 65 66 65 72 20 74 6f 20 74 68 65 20 6c  l refer to the l
21d90 61 73 74 20 65 6e 74 72 79 20 69 6e 20 74 68 65  ast entry in the
21da0 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20   database table 
21db0 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a 20 49 66 20  or index..** If 
21dc0 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  the table or ind
21dd0 65 78 20 69 73 20 65 6d 70 74 79 20 61 6e 64 20  ex is empty and 
21de0 50 32 3e 30 2c 20 74 68 65 6e 20 6a 75 6d 70 20  P2>0, then jump 
21df0 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50  immediately to P
21e00 32 2e 0a 2a 2a 20 49 66 20 50 32 20 69 73 20 30  2..** If P2 is 0
21e10 20 6f 72 20 69 66 20 74 68 65 20 74 61 62 6c 65   or if the table
21e20 20 6f 72 20 69 6e 64 65 78 20 69 73 20 6e 6f 74   or index is not
21e30 20 65 6d 70 74 79 2c 20 66 61 6c 6c 20 74 68 72   empty, fall thr
21e40 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66  ough.** to the f
21e50 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75 63  ollowing instruc
21e60 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  tion..*/.case OP
21e70 5f 4c 61 73 74 3a 20 7b 20 20 20 20 20 20 20 20  _Last: {        
21e80 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62  /* jump */.  Vdb
21e90 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42  eCursor *pC;.  B
21ea0 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a  tCursor *pCrsr;.
21eb0 20 20 69 6e 74 20 72 65 73 3b 0a 0a 20 20 61 73    int res;..  as
21ec0 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
21ed0 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
21ee0 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
21ef0 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
21f00 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
21f10 21 3d 30 20 29 3b 0a 20 20 70 43 72 73 72 20 3d  !=0 );.  pCrsr =
21f20 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20   pC->pCursor;.  
21f30 69 66 28 20 70 43 72 73 72 3d 3d 30 20 29 7b 0a  if( pCrsr==0 ){.
21f40 20 20 20 20 72 65 73 20 3d 20 31 3b 0a 20 20 7d      res = 1;.  }
21f50 65 6c 73 65 7b 0a 20 20 20 20 72 63 20 3d 20 73  else{.    rc = s
21f60 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74 28  qlite3BtreeLast(
21f70 70 43 72 73 72 2c 20 26 72 65 73 29 3b 0a 20 20  pCrsr, &res);.  
21f80 7d 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20  }.  pC->nullRow 
21f90 3d 20 28 75 38 29 72 65 73 3b 0a 20 20 70 43 2d  = (u8)res;.  pC-
21fa0 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20  >deferredMoveto 
21fb0 3d 20 30 3b 0a 20 20 70 43 2d 3e 72 6f 77 69 64  = 0;.  pC->rowid
21fc0 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 70  IsValid = 0;.  p
21fd0 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
21fe0 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20   CACHE_STALE;.  
21ff0 69 66 28 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26  if( pOp->p2>0 &&
22000 20 72 65 73 20 29 7b 0a 20 20 20 20 70 63 20 3d   res ){.    pc =
22010 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
22020 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f  }.  break;.}.../
22030 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 20 50  * Opcode: Sort P
22040 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
22050 20 54 68 69 73 20 6f 70 63 6f 64 65 20 64 6f 65   This opcode doe
22060 73 20 65 78 61 63 74 6c 79 20 74 68 65 20 73 61  s exactly the sa
22070 6d 65 20 74 68 69 6e 67 20 61 73 20 4f 50 5f 52  me thing as OP_R
22080 65 77 69 6e 64 20 65 78 63 65 70 74 20 74 68 61  ewind except tha
22090 74 0a 2a 2a 20 69 74 20 69 6e 63 72 65 6d 65 6e  t.** it incremen
220a0 74 73 20 61 6e 20 75 6e 64 6f 63 75 6d 65 6e 74  ts an undocument
220b0 65 64 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  ed global variab
220c0 6c 65 20 75 73 65 64 20 66 6f 72 20 74 65 73 74  le used for test
220d0 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 53 6f 72 74 69  ing..**.** Sorti
220e0 6e 67 20 69 73 20 61 63 63 6f 6d 70 6c 69 73 68  ng is accomplish
220f0 65 64 20 62 79 20 77 72 69 74 69 6e 67 20 72 65  ed by writing re
22100 63 6f 72 64 73 20 69 6e 74 6f 20 61 20 73 6f 72  cords into a sor
22110 74 69 6e 67 20 69 6e 64 65 78 2c 0a 2a 2a 20 74  ting index,.** t
22120 68 65 6e 20 72 65 77 69 6e 64 69 6e 67 20 74 68  hen rewinding th
22130 61 74 20 69 6e 64 65 78 20 61 6e 64 20 70 6c 61  at index and pla
22140 79 69 6e 67 20 69 74 20 62 61 63 6b 20 66 72 6f  ying it back fro
22150 6d 20 62 65 67 69 6e 6e 69 6e 67 20 74 6f 0a 2a  m beginning to.*
22160 2a 20 65 6e 64 2e 20 20 57 65 20 75 73 65 20 74  * end.  We use t
22170 68 65 20 4f 50 5f 53 6f 72 74 20 6f 70 63 6f 64  he OP_Sort opcod
22180 65 20 69 6e 73 74 65 61 64 20 6f 66 20 4f 50 5f  e instead of OP_
22190 52 65 77 69 6e 64 20 74 6f 20 64 6f 20 74 68 65  Rewind to do the
221a0 0a 2a 2a 20 72 65 77 69 6e 64 69 6e 67 20 73 6f  .** rewinding so
221b0 20 74 68 61 74 20 74 68 65 20 67 6c 6f 62 61 6c   that the global
221c0 20 76 61 72 69 61 62 6c 65 20 77 69 6c 6c 20 62   variable will b
221d0 65 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 61 6e  e incremented an
221e0 64 0a 2a 2a 20 72 65 67 72 65 73 73 69 6f 6e 20  d.** regression 
221f0 74 65 73 74 73 20 63 61 6e 20 64 65 74 65 72 6d  tests can determ
22200 69 6e 65 20 77 68 65 74 68 65 72 20 6f 72 20 6e  ine whether or n
22210 6f 74 20 74 68 65 20 6f 70 74 69 6d 69 7a 65 72  ot the optimizer
22220 20 69 73 0a 2a 2a 20 63 6f 72 72 65 63 74 6c 79   is.** correctly
22230 20 6f 70 74 69 6d 69 7a 69 6e 67 20 6f 75 74 20   optimizing out 
22240 73 6f 72 74 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f  sorts..*/.case O
22250 50 5f 53 6f 72 74 3a 20 7b 20 20 20 20 20 20 20  P_Sort: {       
22260 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 23 69 66 64   /* jump */.#ifd
22270 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20  ef SQLITE_TEST. 
22280 20 73 71 6c 69 74 65 33 5f 73 6f 72 74 5f 63 6f   sqlite3_sort_co
22290 75 6e 74 2b 2b 3b 0a 20 20 73 71 6c 69 74 65 33  unt++;.  sqlite3
222a0 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74 2d 2d 3b  _search_count--;
222b0 0a 23 65 6e 64 69 66 0a 20 20 70 2d 3e 61 43 6f  .#endif.  p->aCo
222c0 75 6e 74 65 72 5b 53 51 4c 49 54 45 5f 53 54 4d  unter[SQLITE_STM
222d0 54 53 54 41 54 55 53 5f 53 4f 52 54 2d 31 5d 2b  TSTATUS_SORT-1]+
222e0 2b 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72  +;.  /* Fall thr
222f0 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f 52 65 77  ough into OP_Rew
22300 69 6e 64 20 2a 2f 0a 7d 0a 2f 2a 20 4f 70 63 6f  ind */.}./* Opco
22310 64 65 3a 20 52 65 77 69 6e 64 20 50 31 20 50 32  de: Rewind P1 P2
22320 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65   * * *.**.** The
22330 20 6e 65 78 74 20 75 73 65 20 6f 66 20 74 68 65   next use of the
22340 20 52 6f 77 69 64 20 6f 72 20 43 6f 6c 75 6d 6e   Rowid or Column
22350 20 6f 72 20 4e 65 78 74 20 69 6e 73 74 72 75 63   or Next instruc
22360 74 69 6f 6e 20 66 6f 72 20 50 31 20 0a 2a 2a 20  tion for P1 .** 
22370 77 69 6c 6c 20 72 65 66 65 72 20 74 6f 20 74 68  will refer to th
22380 65 20 66 69 72 73 74 20 65 6e 74 72 79 20 69 6e  e first entry in
22390 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74 61   the database ta
223a0 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a  ble or index..**
223b0 20 49 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72   If the table or
223c0 20 69 6e 64 65 78 20 69 73 20 65 6d 70 74 79 20   index is empty 
223d0 61 6e 64 20 50 32 3e 30 2c 20 74 68 65 6e 20 6a  and P2>0, then j
223e0 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20  ump immediately 
223f0 74 6f 20 50 32 2e 0a 2a 2a 20 49 66 20 50 32 20  to P2..** If P2 
22400 69 73 20 30 20 6f 72 20 69 66 20 74 68 65 20 74  is 0 or if the t
22410 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 69 73  able or index is
22420 20 6e 6f 74 20 65 6d 70 74 79 2c 20 66 61 6c 6c   not empty, fall
22430 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74   through.** to t
22440 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73  he following ins
22450 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73  truction..*/.cas
22460 65 20 4f 50 5f 52 65 77 69 6e 64 3a 20 7b 20 20  e OP_Rewind: {  
22470 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
22480 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
22490 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70  C;.  BtCursor *p
224a0 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b  Crsr;.  int res;
224b0 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
224c0 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
224d0 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
224e0 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
224f0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
22500 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 72  rt( pC!=0 );.  r
22510 65 73 20 3d 20 31 3b 0a 20 20 69 66 28 20 28 70  es = 1;.  if( (p
22520 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73  Crsr = pC->pCurs
22530 6f 72 29 21 3d 30 20 29 7b 0a 20 20 20 20 72 63  or)!=0 ){.    rc
22540 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 46   = sqlite3BtreeF
22550 69 72 73 74 28 70 43 72 73 72 2c 20 26 72 65 73  irst(pCrsr, &res
22560 29 3b 0a 20 20 20 20 70 43 2d 3e 61 74 46 69 72  );.    pC->atFir
22570 73 74 20 3d 20 72 65 73 3d 3d 30 20 3f 31 3a 30  st = res==0 ?1:0
22580 3b 0a 20 20 20 20 70 43 2d 3e 64 65 66 65 72 72  ;.    pC->deferr
22590 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20  edMoveto = 0;.  
225a0 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
225b0 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
225c0 0a 20 20 20 20 70 43 2d 3e 72 6f 77 69 64 49 73  .    pC->rowidIs
225d0 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 7d 0a 20  Valid = 0;.  }. 
225e0 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 28   pC->nullRow = (
225f0 75 38 29 72 65 73 3b 0a 20 20 61 73 73 65 72 74  u8)res;.  assert
22600 28 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70  ( pOp->p2>0 && p
22610 4f 70 2d 3e 70 32 3c 70 2d 3e 6e 4f 70 20 29 3b  Op->p2<p->nOp );
22620 0a 20 20 69 66 28 20 72 65 73 20 29 7b 0a 20 20  .  if( res ){.  
22630 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
22640 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b   1;.  }.  break;
22650 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e  .}../* Opcode: N
22660 65 78 74 20 50 31 20 50 32 20 2a 20 2a 20 50 35  ext P1 P2 * * P5
22670 0a 2a 2a 0a 2a 2a 20 41 64 76 61 6e 63 65 20 63  .**.** Advance c
22680 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74  ursor P1 so that
22690 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68   it points to th
226a0 65 20 6e 65 78 74 20 6b 65 79 2f 64 61 74 61 20  e next key/data 
226b0 70 61 69 72 20 69 6e 20 69 74 73 0a 2a 2a 20 74  pair in its.** t
226c0 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 20 20  able or index.  
226d0 49 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20  If there are no 
226e0 6d 6f 72 65 20 6b 65 79 2f 76 61 6c 75 65 20 70  more key/value p
226f0 61 69 72 73 20 74 68 65 6e 20 66 61 6c 6c 20 74  airs then fall t
22700 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65  hrough.** to the
22710 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72   following instr
22720 75 63 74 69 6f 6e 2e 20 20 42 75 74 20 69 66 20  uction.  But if 
22730 74 68 65 20 63 75 72 73 6f 72 20 61 64 76 61 6e  the cursor advan
22740 63 65 20 77 61 73 20 73 75 63 63 65 73 73 66 75  ce was successfu
22750 6c 2c 0a 2a 2a 20 6a 75 6d 70 20 69 6d 6d 65 64  l,.** jump immed
22760 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a  iately to P2..**
22770 0a 2a 2a 20 54 68 65 20 50 31 20 63 75 72 73 6f  .** The P1 curso
22780 72 20 6d 75 73 74 20 62 65 20 66 6f 72 20 61 20  r must be for a 
22790 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20  real table, not 
227a0 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a  a pseudo-table..
227b0 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 70  **.** If P5 is p
227c0 6f 73 69 74 69 76 65 20 61 6e 64 20 74 68 65 20  ositive and the 
227d0 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 2c 20 74  jump is taken, t
227e0 68 65 6e 20 65 76 65 6e 74 20 63 6f 75 6e 74 65  hen event counte
227f0 72 0a 2a 2a 20 6e 75 6d 62 65 72 20 50 35 2d 31  r.** number P5-1
22800 20 69 6e 20 74 68 65 20 70 72 65 70 61 72 65 64   in the prepared
22810 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 69 6e   statement is in
22820 63 72 65 6d 65 6e 74 65 64 2e 0a 2a 2a 0a 2a 2a  cremented..**.**
22830 20 53 65 65 20 61 6c 73 6f 3a 20 50 72 65 76 0a   See also: Prev.
22840 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 72  */./* Opcode: Pr
22850 65 76 20 50 31 20 50 32 20 2a 20 2a 20 50 35 0a  ev P1 P2 * * P5.
22860 2a 2a 0a 2a 2a 20 42 61 63 6b 20 75 70 20 63 75  **.** Back up cu
22870 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20  rsor P1 so that 
22880 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65  it points to the
22890 20 70 72 65 76 69 6f 75 73 20 6b 65 79 2f 64 61   previous key/da
228a0 74 61 20 70 61 69 72 20 69 6e 20 69 74 73 0a 2a  ta pair in its.*
228b0 2a 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  * table or index
228c0 2e 20 20 49 66 20 74 68 65 72 65 20 69 73 20 6e  .  If there is n
228d0 6f 20 70 72 65 76 69 6f 75 73 20 6b 65 79 2f 76  o previous key/v
228e0 61 6c 75 65 20 70 61 69 72 73 20 74 68 65 6e 20  alue pairs then 
228f0 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20  fall through.** 
22900 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  to the following
22910 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 42   instruction.  B
22920 75 74 20 69 66 20 74 68 65 20 63 75 72 73 6f 72  ut if the cursor
22930 20 62 61 63 6b 75 70 20 77 61 73 20 73 75 63 63   backup was succ
22940 65 73 73 66 75 6c 2c 0a 2a 2a 20 6a 75 6d 70 20  essful,.** jump 
22950 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50  immediately to P
22960 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 31 20  2..**.** The P1 
22970 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20 66  cursor must be f
22980 6f 72 20 61 20 72 65 61 6c 20 74 61 62 6c 65 2c  or a real table,
22990 20 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d 74 61   not a pseudo-ta
229a0 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35  ble..**.** If P5
229b0 20 69 73 20 70 6f 73 69 74 69 76 65 20 61 6e 64   is positive and
229c0 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b   the jump is tak
229d0 65 6e 2c 20 74 68 65 6e 20 65 76 65 6e 74 20 63  en, then event c
229e0 6f 75 6e 74 65 72 0a 2a 2a 20 6e 75 6d 62 65 72  ounter.** number
229f0 20 50 35 2d 31 20 69 6e 20 74 68 65 20 70 72 65   P5-1 in the pre
22a00 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20  pared statement 
22a10 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e 0a  is incremented..
22a20 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 72 65 76 3a  */.case OP_Prev:
22a30 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d            /* jum
22a40 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 78  p */.case OP_Nex
22a50 74 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a  t: {        /* j
22a60 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43 75 72  ump */.  VdbeCur
22a70 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72  sor *pC;.  BtCur
22a80 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e  sor *pCrsr;.  in
22a90 74 20 72 65 73 3b 0a 0a 20 20 43 48 45 43 4b 5f  t res;..  CHECK_
22aa0 46 4f 52 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20  FOR_INTERRUPT;. 
22ab0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
22ac0 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
22ad0 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61  ->nCursor );.  a
22ae0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3c 3d  ssert( pOp->p5<=
22af0 41 72 72 61 79 53 69 7a 65 28 70 2d 3e 61 43 6f  ArraySize(p->aCo
22b00 75 6e 74 65 72 29 20 29 3b 0a 20 20 70 43 20 3d  unter) );.  pC =
22b10 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
22b20 31 5d 3b 0a 20 20 69 66 28 20 70 43 3d 3d 30 20  1];.  if( pC==0 
22b30 29 7b 0a 20 20 20 20 62 72 65 61 6b 3b 20 20 2f  ){.    break;  /
22b40 2a 20 53 65 65 20 74 69 63 6b 65 74 20 23 32 32  * See ticket #22
22b50 37 33 20 2a 2f 0a 20 20 7d 0a 20 20 70 43 72 73  73 */.  }.  pCrs
22b60 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b  r = pC->pCursor;
22b70 0a 20 20 69 66 28 20 70 43 72 73 72 3d 3d 30 20  .  if( pCrsr==0 
22b80 29 7b 0a 20 20 20 20 70 43 2d 3e 6e 75 6c 6c 52  ){.    pC->nullR
22b90 6f 77 20 3d 20 31 3b 0a 20 20 20 20 62 72 65 61  ow = 1;.    brea
22ba0 6b 3b 0a 20 20 7d 0a 20 20 72 65 73 20 3d 20 31  k;.  }.  res = 1
22bb0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
22bc0 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d  deferredMoveto==
22bd0 30 20 29 3b 0a 20 20 72 63 20 3d 20 70 4f 70 2d  0 );.  rc = pOp-
22be0 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 65 78 74  >opcode==OP_Next
22bf0 20 3f 20 73 71 6c 69 74 65 33 42 74 72 65 65 4e   ? sqlite3BtreeN
22c00 65 78 74 28 70 43 72 73 72 2c 20 26 72 65 73 29  ext(pCrsr, &res)
22c10 20 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   :.             
22c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22c30 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 72 65   sqlite3BtreePre
22c40 76 69 6f 75 73 28 70 43 72 73 72 2c 20 26 72 65  vious(pCrsr, &re
22c50 73 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f  s);.  pC->nullRo
22c60 77 20 3d 20 28 75 38 29 72 65 73 3b 0a 20 20 70  w = (u8)res;.  p
22c70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
22c80 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20   CACHE_STALE;.  
22c90 69 66 28 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20  if( res==0 ){.  
22ca0 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
22cb0 20 31 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d   1;.    if( pOp-
22cc0 3e 70 35 20 29 20 70 2d 3e 61 43 6f 75 6e 74 65  >p5 ) p->aCounte
22cd0 72 5b 70 4f 70 2d 3e 70 35 2d 31 5d 2b 2b 3b 0a  r[pOp->p5-1]++;.
22ce0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45  #ifdef SQLITE_TE
22cf0 53 54 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73  ST.    sqlite3_s
22d00 65 61 72 63 68 5f 63 6f 75 6e 74 2b 2b 3b 0a 23  earch_count++;.#
22d10 65 6e 64 69 66 0a 20 20 7d 0a 20 20 70 43 2d 3e  endif.  }.  pC->
22d20 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30  rowidIsValid = 0
22d30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
22d40 20 4f 70 63 6f 64 65 3a 20 49 64 78 49 6e 73 65   Opcode: IdxInse
22d50 72 74 20 50 31 20 50 32 20 50 33 20 2a 20 50 35  rt P1 P2 P3 * P5
22d60 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20  .**.** Register 
22d70 50 32 20 68 6f 6c 64 73 20 61 20 53 51 4c 20 69  P2 holds a SQL i
22d80 6e 64 65 78 20 6b 65 79 20 6d 61 64 65 20 75 73  ndex key made us
22d90 69 6e 67 20 74 68 65 0a 2a 2a 20 4d 61 6b 65 52  ing the.** MakeR
22da0 65 63 6f 72 64 20 69 6e 73 74 72 75 63 74 69 6f  ecord instructio
22db0 6e 73 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65  ns.  This opcode
22dc0 20 77 72 69 74 65 73 20 74 68 61 74 20 6b 65 79   writes that key
22dd0 0a 2a 2a 20 69 6e 74 6f 20 74 68 65 20 69 6e 64  .** into the ind
22de0 65 78 20 50 31 2e 20 20 44 61 74 61 20 66 6f 72  ex P1.  Data for
22df0 20 74 68 65 20 65 6e 74 72 79 20 69 73 20 6e 69   the entry is ni
22e00 6c 2e 0a 2a 2a 0a 2a 2a 20 50 33 20 69 73 20 61  l..**.** P3 is a
22e10 20 66 6c 61 67 20 74 68 61 74 20 70 72 6f 76 69   flag that provi
22e20 64 65 73 20 61 20 68 69 6e 74 20 74 6f 20 74 68  des a hint to th
22e30 65 20 62 2d 74 72 65 65 20 6c 61 79 65 72 20 74  e b-tree layer t
22e40 68 61 74 20 74 68 69 73 0a 2a 2a 20 69 6e 73 65  hat this.** inse
22e50 72 74 20 69 73 20 6c 69 6b 65 6c 79 20 74 6f 20  rt is likely to 
22e60 62 65 20 61 6e 20 61 70 70 65 6e 64 2e 0a 2a 2a  be an append..**
22e70 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63  .** This instruc
22e80 74 69 6f 6e 20 6f 6e 6c 79 20 77 6f 72 6b 73 20  tion only works 
22e90 66 6f 72 20 69 6e 64 69 63 65 73 2e 20 20 54 68  for indices.  Th
22ea0 65 20 65 71 75 69 76 61 6c 65 6e 74 20 69 6e 73  e equivalent ins
22eb0 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 66 6f 72 20  truction.** for 
22ec0 74 61 62 6c 65 73 20 69 73 20 4f 50 5f 49 6e 73  tables is OP_Ins
22ed0 65 72 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ert..*/.case OP_
22ee0 49 64 78 49 6e 73 65 72 74 3a 20 7b 20 20 20 20  IdxInsert: {    
22ef0 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20      /* in2 */.  
22f00 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
22f10 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73    BtCursor *pCrs
22f20 72 3b 0a 20 20 69 6e 74 20 6e 4b 65 79 3b 0a 20  r;.  int nKey;. 
22f30 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4b 65   const char *zKe
22f40 79 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  y;..  assert( pO
22f50 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
22f60 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
22f70 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
22f80 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
22f90 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
22fa0 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn2 = &aMem[pO
22fb0 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74  p->p2];.  assert
22fc0 28 20 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20  ( pIn2->flags & 
22fd0 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20 70 43  MEM_Blob );.  pC
22fe0 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f  rsr = pC->pCurso
22ff0 72 3b 0a 20 20 69 66 28 20 41 4c 57 41 59 53 28  r;.  if( ALWAYS(
23000 70 43 72 73 72 21 3d 30 29 20 29 7b 0a 20 20 20  pCrsr!=0) ){.   
23010 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54   assert( pC->isT
23020 61 62 6c 65 3d 3d 30 20 29 3b 0a 20 20 20 20 72  able==0 );.    r
23030 63 20 3d 20 45 78 70 61 6e 64 42 6c 6f 62 28 70  c = ExpandBlob(p
23040 49 6e 32 29 3b 0a 20 20 20 20 69 66 28 20 72 63  In2);.    if( rc
23050 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
23060 20 20 20 20 20 6e 4b 65 79 20 3d 20 70 49 6e 32       nKey = pIn2
23070 2d 3e 6e 3b 0a 20 20 20 20 20 20 7a 4b 65 79 20  ->n;.      zKey 
23080 3d 20 70 49 6e 32 2d 3e 7a 3b 0a 20 20 20 20 20  = pIn2->z;.     
23090 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
230a0 65 65 49 6e 73 65 72 74 28 70 43 72 73 72 2c 20  eeInsert(pCrsr, 
230b0 7a 4b 65 79 2c 20 6e 4b 65 79 2c 20 22 22 2c 20  zKey, nKey, "", 
230c0 30 2c 20 30 2c 20 70 4f 70 2d 3e 70 33 2c 20 0a  0, 0, pOp->p3, .
230d0 20 20 20 20 20 20 20 20 20 20 28 28 70 4f 70 2d            ((pOp-
230e0 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 55 53 45  >p5 & OPFLAG_USE
230f0 53 45 45 4b 52 45 53 55 4c 54 29 20 3f 20 70 43  SEEKRESULT) ? pC
23100 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3a 20 30  ->seekResult : 0
23110 29 0a 20 20 20 20 20 20 29 3b 0a 20 20 20 20 20  ).      );.     
23120 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66   assert( pC->def
23130 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29  erredMoveto==0 )
23140 3b 0a 20 20 20 20 20 20 70 43 2d 3e 63 61 63 68  ;.      pC->cach
23150 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
23160 53 54 41 4c 45 3b 0a 20 20 20 20 7d 0a 20 20 7d  STALE;.    }.  }
23170 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
23180 4f 70 63 6f 64 65 3a 20 49 64 78 44 65 6c 65 74  Opcode: IdxDelet
23190 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  e P1 P2 P3 * *.*
231a0 2a 0a 2a 2a 20 54 68 65 20 63 6f 6e 74 65 6e 74  *.** The content
231b0 20 6f 66 20 50 33 20 72 65 67 69 73 74 65 72 73   of P3 registers
231c0 20 73 74 61 72 74 69 6e 67 20 61 74 20 72 65 67   starting at reg
231d0 69 73 74 65 72 20 50 32 20 66 6f 72 6d 0a 2a 2a  ister P2 form.**
231e0 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64   an unpacked ind
231f0 65 78 20 6b 65 79 2e 20 54 68 69 73 20 6f 70 63  ex key. This opc
23200 6f 64 65 20 72 65 6d 6f 76 65 73 20 74 68 61 74  ode removes that
23210 20 65 6e 74 72 79 20 66 72 6f 6d 20 74 68 65 20   entry from the 
23220 0a 2a 2a 20 69 6e 64 65 78 20 6f 70 65 6e 65 64  .** index opened
23230 20 62 79 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a   by cursor P1..*
23240 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 44 65 6c  /.case OP_IdxDel
23250 65 74 65 3a 20 7b 0a 20 20 56 64 62 65 43 75 72  ete: {.  VdbeCur
23260 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72  sor *pC;.  BtCur
23270 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e  sor *pCrsr;.  in
23280 74 20 72 65 73 3b 0a 20 20 55 6e 70 61 63 6b 65  t res;.  Unpacke
23290 64 52 65 63 6f 72 64 20 72 3b 0a 0a 20 20 61 73  dRecord r;..  as
232a0 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20  sert( pOp->p3>0 
232b0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
232c0 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p2>0 && pOp->p
232d0 32 2b 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d  2+pOp->p3<=p->nM
232e0 65 6d 2b 31 20 29 3b 0a 20 20 61 73 73 65 72 74  em+1 );.  assert
232f0 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
23300 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
23310 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
23320 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
23330 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
23340 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d  );.  pCrsr = pC-
23350 3e 70 43 75 72 73 6f 72 3b 0a 20 20 69 66 28 20  >pCursor;.  if( 
23360 41 4c 57 41 59 53 28 70 43 72 73 72 21 3d 30 29  ALWAYS(pCrsr!=0)
23370 20 29 7b 0a 20 20 20 20 72 2e 70 4b 65 79 49 6e   ){.    r.pKeyIn
23380 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66  fo = pC->pKeyInf
23390 6f 3b 0a 20 20 20 20 72 2e 6e 46 69 65 6c 64 20  o;.    r.nField 
233a0 3d 20 28 75 31 36 29 70 4f 70 2d 3e 70 33 3b 0a  = (u16)pOp->p3;.
233b0 20 20 20 20 72 2e 66 6c 61 67 73 20 3d 20 30 3b      r.flags = 0;
233c0 0a 20 20 20 20 72 2e 61 4d 65 6d 20 3d 20 26 61  .    r.aMem = &a
233d0 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 23 69  Mem[pOp->p2];.#i
233e0 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
233f0 47 0a 20 20 20 20 7b 20 69 6e 74 20 69 3b 20 66  G.    { int i; f
23400 6f 72 28 69 3d 30 3b 20 69 3c 72 2e 6e 46 69 65  or(i=0; i<r.nFie
23410 6c 64 3b 20 69 2b 2b 29 20 61 73 73 65 72 74 28  ld; i++) assert(
23420 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 72 2e 61   memIsValid(&r.a
23430 4d 65 6d 5b 69 5d 29 20 29 3b 20 7d 0a 23 65 6e  Mem[i]) ); }.#en
23440 64 69 66 0a 20 20 20 20 72 63 20 3d 20 73 71 6c  dif.    rc = sql
23450 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55  ite3BtreeMovetoU
23460 6e 70 61 63 6b 65 64 28 70 43 72 73 72 2c 20 26  npacked(pCrsr, &
23470 72 2c 20 30 2c 20 30 2c 20 26 72 65 73 29 3b 0a  r, 0, 0, &res);.
23480 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
23490 54 45 5f 4f 4b 20 26 26 20 72 65 73 3d 3d 30 20  TE_OK && res==0 
234a0 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71  ){.      rc = sq
234b0 6c 69 74 65 33 42 74 72 65 65 44 65 6c 65 74 65  lite3BtreeDelete
234c0 28 70 43 72 73 72 29 3b 0a 20 20 20 20 7d 0a 20  (pCrsr);.    }. 
234d0 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64     assert( pC->d
234e0 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30  eferredMoveto==0
234f0 20 29 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68   );.    pC->cach
23500 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
23510 53 54 41 4c 45 3b 0a 20 20 7d 0a 20 20 62 72 65  STALE;.  }.  bre
23520 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
23530 3a 20 49 64 78 52 6f 77 69 64 20 50 31 20 50 32  : IdxRowid P1 P2
23540 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69   * * *.**.** Wri
23550 74 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  te into register
23560 20 50 32 20 61 6e 20 69 6e 74 65 67 65 72 20 77   P2 an integer w
23570 68 69 63 68 20 69 73 20 74 68 65 20 6c 61 73 74  hich is the last
23580 20 65 6e 74 72 79 20 69 6e 20 74 68 65 20 72 65   entry in the re
23590 63 6f 72 64 20 61 74 0a 2a 2a 20 74 68 65 20 65  cord at.** the e
235a0 6e 64 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20  nd of the index 
235b0 6b 65 79 20 70 6f 69 6e 74 65 64 20 74 6f 20 62  key pointed to b
235c0 79 20 63 75 72 73 6f 72 20 50 31 2e 20 20 54 68  y cursor P1.  Th
235d0 69 73 20 69 6e 74 65 67 65 72 20 73 68 6f 75 6c  is integer shoul
235e0 64 20 62 65 0a 2a 2a 20 74 68 65 20 72 6f 77 69  d be.** the rowi
235f0 64 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 65  d of the table e
23600 6e 74 72 79 20 74 6f 20 77 68 69 63 68 20 74 68  ntry to which th
23610 69 73 20 69 6e 64 65 78 20 65 6e 74 72 79 20 70  is index entry p
23620 6f 69 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  oints..**.** See
23630 20 61 6c 73 6f 3a 20 52 6f 77 69 64 2c 20 4d 61   also: Rowid, Ma
23640 6b 65 52 65 63 6f 72 64 2e 0a 2a 2f 0a 63 61 73  keRecord..*/.cas
23650 65 20 4f 50 5f 49 64 78 52 6f 77 69 64 3a 20 7b  e OP_IdxRowid: {
23660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
23670 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65   out2-prerelease
23680 20 2a 2f 0a 20 20 42 74 43 75 72 73 6f 72 20 2a   */.  BtCursor *
23690 70 43 72 73 72 3b 0a 20 20 56 64 62 65 43 75 72  pCrsr;.  VdbeCur
236a0 73 6f 72 20 2a 70 43 3b 0a 20 20 69 36 34 20 72  sor *pC;.  i64 r
236b0 6f 77 69 64 3b 0a 0a 20 20 61 73 73 65 72 74 28  owid;..  assert(
236c0 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
236d0 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
236e0 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
236f0 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
23700 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
23710 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e  ;.  pCrsr = pC->
23720 70 43 75 72 73 6f 72 3b 0a 20 20 70 4f 75 74 2d  pCursor;.  pOut-
23730 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c  >flags = MEM_Nul
23740 6c 3b 0a 20 20 69 66 28 20 41 4c 57 41 59 53 28  l;.  if( ALWAYS(
23750 70 43 72 73 72 21 3d 30 29 20 29 7b 0a 20 20 20  pCrsr!=0) ){.   
23760 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
23770 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43  eCursorMoveto(pC
23780 29 3b 0a 20 20 20 20 69 66 28 20 4e 45 56 45 52  );.    if( NEVER
23790 28 72 63 29 20 29 20 67 6f 74 6f 20 61 62 6f 72  (rc) ) goto abor
237a0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
237b0 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
237c0 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d  deferredMoveto==
237d0 30 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  0 );.    assert(
237e0 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20   pC->isTable==0 
237f0 29 3b 0a 20 20 20 20 69 66 28 20 21 70 43 2d 3e  );.    if( !pC->
23800 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 20  nullRow ){.     
23810 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
23820 65 49 64 78 52 6f 77 69 64 28 64 62 2c 20 70 43  eIdxRowid(db, pC
23830 72 73 72 2c 20 26 72 6f 77 69 64 29 3b 0a 20 20  rsr, &rowid);.  
23840 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
23850 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20  TE_OK ){.       
23860 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
23870 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20  to_error;.      
23880 7d 0a 20 20 20 20 20 20 70 4f 75 74 2d 3e 75 2e  }.      pOut->u.
23890 69 20 3d 20 72 6f 77 69 64 3b 0a 20 20 20 20 20  i = rowid;.     
238a0 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
238b0 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 7d 0a 20 20  EM_Int;.    }.  
238c0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
238d0 20 4f 70 63 6f 64 65 3a 20 49 64 78 47 45 20 50   Opcode: IdxGE P
238e0 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
238f0 0a 2a 2a 20 54 68 65 20 50 34 20 72 65 67 69 73  .** The P4 regis
23900 74 65 72 20 76 61 6c 75 65 73 20 62 65 67 69 6e  ter values begin
23910 6e 69 6e 67 20 77 69 74 68 20 50 33 20 66 6f 72  ning with P3 for
23920 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e  m an unpacked in
23930 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74  dex .** key that
23940 20 6f 6d 69 74 73 20 74 68 65 20 52 4f 57 49 44   omits the ROWID
23950 2e 20 20 43 6f 6d 70 61 72 65 20 74 68 69 73 20  .  Compare this 
23960 6b 65 79 20 76 61 6c 75 65 20 61 67 61 69 6e 73  key value agains
23970 74 20 74 68 65 20 69 6e 64 65 78 20 0a 2a 2a 20  t the index .** 
23980 74 68 61 74 20 50 31 20 69 73 20 63 75 72 72 65  that P1 is curre
23990 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f  ntly pointing to
239a0 2c 20 69 67 6e 6f 72 69 6e 67 20 74 68 65 20 52  , ignoring the R
239b0 4f 57 49 44 20 6f 6e 20 74 68 65 20 50 31 20 69  OWID on the P1 i
239c0 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  ndex..**.** If t
239d0 68 65 20 50 31 20 69 6e 64 65 78 20 65 6e 74 72  he P1 index entr
239e0 79 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61  y is greater tha
239f0 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68  n or equal to th
23a00 65 20 6b 65 79 20 76 61 6c 75 65 0a 2a 2a 20 74  e key value.** t
23a10 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20  hen jump to P2. 
23a20 20 4f 74 68 65 72 77 69 73 65 20 66 61 6c 6c 20   Otherwise fall 
23a30 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e  through to the n
23a40 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ext instruction.
23a50 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20  .**.** If P5 is 
23a60 6e 6f 6e 2d 7a 65 72 6f 20 74 68 65 6e 20 74 68  non-zero then th
23a70 65 20 6b 65 79 20 76 61 6c 75 65 20 69 73 20 69  e key value is i
23a80 6e 63 72 65 61 73 65 64 20 62 79 20 61 6e 20 65  ncreased by an e
23a90 70 73 69 6c 6f 6e 20 0a 2a 2a 20 70 72 69 6f 72  psilon .** prior
23aa0 20 74 6f 20 74 68 65 20 63 6f 6d 70 61 72 69 73   to the comparis
23ab0 6f 6e 2e 20 20 54 68 69 73 20 6d 61 6b 65 20 74  on.  This make t
23ac0 68 65 20 6f 70 63 6f 64 65 20 77 6f 72 6b 20 6c  he opcode work l
23ad0 69 6b 65 20 49 64 78 47 54 20 65 78 63 65 70 74  ike IdxGT except
23ae0 0a 2a 2a 20 74 68 61 74 20 69 66 20 74 68 65 20  .** that if the 
23af0 6b 65 79 20 66 72 6f 6d 20 72 65 67 69 73 74 65  key from registe
23b00 72 20 50 33 20 69 73 20 61 20 70 72 65 66 69 78  r P3 is a prefix
23b10 20 6f 66 20 74 68 65 20 6b 65 79 20 69 6e 20 74   of the key in t
23b20 68 65 20 63 75 72 73 6f 72 2c 0a 2a 2a 20 74 68  he cursor,.** th
23b30 65 20 72 65 73 75 6c 74 20 69 73 20 66 61 6c 73  e result is fals
23b40 65 20 77 68 65 72 65 61 73 20 69 74 20 77 6f 75  e whereas it wou
23b50 6c 64 20 62 65 20 74 72 75 65 20 77 69 74 68 20  ld be true with 
23b60 49 64 78 47 54 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  IdxGT..*/./* Opc
23b70 6f 64 65 3a 20 49 64 78 4c 54 20 50 31 20 50 32  ode: IdxLT P1 P2
23b80 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20   P3 P4 P5.**.** 
23b90 54 68 65 20 50 34 20 72 65 67 69 73 74 65 72 20  The P4 register 
23ba0 76 61 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e 67  values beginning
23bb0 20 77 69 74 68 20 50 33 20 66 6f 72 6d 20 61 6e   with P3 form an
23bc0 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20   unpacked index 
23bd0 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d 69  .** key that omi
23be0 74 73 20 74 68 65 20 52 4f 57 49 44 2e 20 20 43  ts the ROWID.  C
23bf0 6f 6d 70 61 72 65 20 74 68 69 73 20 6b 65 79 20  ompare this key 
23c00 76 61 6c 75 65 20 61 67 61 69 6e 73 74 20 74 68  value against th
23c10 65 20 69 6e 64 65 78 20 0a 2a 2a 20 74 68 61 74  e index .** that
23c20 20 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79   P1 is currently
23c30 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67   pointing to, ig
23c40 6e 6f 72 69 6e 67 20 74 68 65 20 52 4f 57 49 44  noring the ROWID
23c50 20 6f 6e 20 74 68 65 20 50 31 20 69 6e 64 65 78   on the P1 index
23c60 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50  ..**.** If the P
23c70 31 20 69 6e 64 65 78 20 65 6e 74 72 79 20 69 73  1 index entry is
23c80 20 6c 65 73 73 20 74 68 61 6e 20 74 68 65 20 6b   less than the k
23c90 65 79 20 76 61 6c 75 65 20 74 68 65 6e 20 6a 75  ey value then ju
23ca0 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 20 4f 74 68  mp to P2..** Oth
23cb0 65 72 77 69 73 65 20 66 61 6c 6c 20 74 68 72 6f  erwise fall thro
23cc0 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ugh to the next 
23cd0 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a  instruction..**.
23ce0 2a 2a 20 49 66 20 50 35 20 69 73 20 6e 6f 6e 2d  ** If P5 is non-
23cf0 7a 65 72 6f 20 74 68 65 6e 20 74 68 65 20 6b 65  zero then the ke
23d00 79 20 76 61 6c 75 65 20 69 73 20 69 6e 63 72 65  y value is incre
23d10 61 73 65 64 20 62 79 20 61 6e 20 65 70 73 69 6c  ased by an epsil
23d20 6f 6e 20 70 72 69 6f 72 20 0a 2a 2a 20 74 6f 20  on prior .** to 
23d30 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20  the comparison. 
23d40 20 54 68 69 73 20 6d 61 6b 65 73 20 74 68 65 20   This makes the 
23d50 6f 70 63 6f 64 65 20 77 6f 72 6b 20 6c 69 6b 65  opcode work like
23d60 20 49 64 78 4c 45 2e 0a 2a 2f 0a 63 61 73 65 20   IdxLE..*/.case 
23d70 4f 50 5f 49 64 78 4c 54 3a 20 20 20 20 20 20 20  OP_IdxLT:       
23d80 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61     /* jump */.ca
23d90 73 65 20 4f 50 5f 49 64 78 47 45 3a 20 7b 20 20  se OP_IdxGE: {  
23da0 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
23db0 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
23dc0 43 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20  C;.  int res;.  
23dd0 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72  UnpackedRecord r
23de0 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
23df0 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
23e00 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
23e10 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
23e20 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
23e30 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
23e40 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 4f 72  assert( pC->isOr
23e50 64 65 72 65 64 20 29 3b 0a 20 20 69 66 28 20 41  dered );.  if( A
23e60 4c 57 41 59 53 28 70 43 2d 3e 70 43 75 72 73 6f  LWAYS(pC->pCurso
23e70 72 21 3d 30 29 20 29 7b 0a 20 20 20 20 61 73 73  r!=0) ){.    ass
23e80 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65  ert( pC->deferre
23e90 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20  dMoveto==0 );.  
23ea0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
23eb0 35 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d  5==0 || pOp->p5=
23ec0 3d 31 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  =1 );.    assert
23ed0 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
23ee0 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 20 20 72  4_INT32 );.    r
23ef0 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e  .pKeyInfo = pC->
23f00 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 72 2e  pKeyInfo;.    r.
23f10 6e 46 69 65 6c 64 20 3d 20 28 75 31 36 29 70 4f  nField = (u16)pO
23f20 70 2d 3e 70 34 2e 69 3b 0a 20 20 20 20 69 66 28  p->p4.i;.    if(
23f30 20 70 4f 70 2d 3e 70 35 20 29 7b 0a 20 20 20 20   pOp->p5 ){.    
23f40 20 20 72 2e 66 6c 61 67 73 20 3d 20 55 4e 50 41    r.flags = UNPA
23f50 43 4b 45 44 5f 49 4e 43 52 4b 45 59 20 7c 20 55  CKED_INCRKEY | U
23f60 4e 50 41 43 4b 45 44 5f 49 47 4e 4f 52 45 5f 52  NPACKED_IGNORE_R
23f70 4f 57 49 44 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  OWID;.    }else{
23f80 0a 20 20 20 20 20 20 72 2e 66 6c 61 67 73 20 3d  .      r.flags =
23f90 20 55 4e 50 41 43 4b 45 44 5f 49 47 4e 4f 52 45   UNPACKED_IGNORE
23fa0 5f 52 4f 57 49 44 3b 0a 20 20 20 20 7d 0a 20 20  _ROWID;.    }.  
23fb0 20 20 72 2e 61 4d 65 6d 20 3d 20 26 61 4d 65 6d    r.aMem = &aMem
23fc0 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 23 69 66 64 65  [pOp->p3];.#ifde
23fd0 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
23fe0 20 20 20 7b 20 69 6e 74 20 69 3b 20 66 6f 72 28     { int i; for(
23ff0 69 3d 30 3b 20 69 3c 72 2e 6e 46 69 65 6c 64 3b  i=0; i<r.nField;
24000 20 69 2b 2b 29 20 61 73 73 65 72 74 28 20 6d 65   i++) assert( me
24010 6d 49 73 56 61 6c 69 64 28 26 72 2e 61 4d 65 6d  mIsValid(&r.aMem
24020 5b 69 5d 29 20 29 3b 20 7d 0a 23 65 6e 64 69 66  [i]) ); }.#endif
24030 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
24040 33 56 64 62 65 49 64 78 4b 65 79 43 6f 6d 70 61  3VdbeIdxKeyCompa
24050 72 65 28 70 43 2c 20 26 72 2c 20 26 72 65 73 29  re(pC, &r, &res)
24060 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 6f  ;.    if( pOp->o
24070 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 54 20  pcode==OP_IdxLT 
24080 29 7b 0a 20 20 20 20 20 20 72 65 73 20 3d 20 2d  ){.      res = -
24090 72 65 73 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  res;.    }else{.
240a0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
240b0 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64  p->opcode==OP_Id
240c0 78 47 45 20 29 3b 0a 20 20 20 20 20 20 72 65 73  xGE );.      res
240d0 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  ++;.    }.    if
240e0 28 20 72 65 73 3e 30 20 29 7b 0a 20 20 20 20 20  ( res>0 ){.     
240f0 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
24100 31 20 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  1 ;.    }.  }.  
24110 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
24120 6f 64 65 3a 20 44 65 73 74 72 6f 79 20 50 31 20  ode: Destroy P1 
24130 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
24140 44 65 6c 65 74 65 20 61 6e 20 65 6e 74 69 72 65  Delete an entire
24150 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20   database table 
24160 6f 72 20 69 6e 64 65 78 20 77 68 6f 73 65 20 72  or index whose r
24170 6f 6f 74 20 70 61 67 65 20 69 6e 20 74 68 65 20  oot page in the 
24180 64 61 74 61 62 61 73 65 0a 2a 2a 20 66 69 6c 65  database.** file
24190 20 69 73 20 67 69 76 65 6e 20 62 79 20 50 31 2e   is given by P1.
241a0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 74 61 62 6c 65  .**.** The table
241b0 20 62 65 69 6e 67 20 64 65 73 74 72 6f 79 65 64   being destroyed
241c0 20 69 73 20 69 6e 20 74 68 65 20 6d 61 69 6e 20   is in the main 
241d0 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66  database file if
241e0 20 50 33 3d 3d 30 2e 20 20 49 66 0a 2a 2a 20 50   P3==0.  If.** P
241f0 33 3d 3d 31 20 74 68 65 6e 20 74 68 65 20 74 61  3==1 then the ta
24200 62 6c 65 20 74 6f 20 62 65 20 63 6c 65 61 72 20  ble to be clear 
24210 69 73 20 69 6e 20 74 68 65 20 61 75 78 69 6c 69  is in the auxili
24220 61 72 79 20 64 61 74 61 62 61 73 65 20 66 69 6c  ary database fil
24230 65 0a 2a 2a 20 74 68 61 74 20 69 73 20 75 73 65  e.** that is use
24240 64 20 74 6f 20 73 74 6f 72 65 20 74 61 62 6c 65  d to store table
24250 73 20 63 72 65 61 74 65 20 75 73 69 6e 67 20 43  s create using C
24260 52 45 41 54 45 20 54 45 4d 50 4f 52 41 52 59 20  REATE TEMPORARY 
24270 54 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  TABLE..**.** If 
24280 41 55 54 4f 56 41 43 55 55 4d 20 69 73 20 65 6e  AUTOVACUUM is en
24290 61 62 6c 65 64 20 74 68 65 6e 20 69 74 20 69 73  abled then it is
242a0 20 70 6f 73 73 69 62 6c 65 20 74 68 61 74 20 61   possible that a
242b0 6e 6f 74 68 65 72 20 72 6f 6f 74 20 70 61 67 65  nother root page
242c0 0a 2a 2a 20 6d 69 67 68 74 20 62 65 20 6d 6f 76  .** might be mov
242d0 65 64 20 69 6e 74 6f 20 74 68 65 20 6e 65 77 6c  ed into the newl
242e0 79 20 64 65 6c 65 74 65 64 20 72 6f 6f 74 20 70  y deleted root p
242f0 61 67 65 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  age in order to 
24300 6b 65 65 70 20 61 6c 6c 0a 2a 2a 20 72 6f 6f 74  keep all.** root
24310 20 70 61 67 65 73 20 63 6f 6e 74 69 67 75 6f 75   pages contiguou
24320 73 20 61 74 20 74 68 65 20 62 65 67 69 6e 6e 69  s at the beginni
24330 6e 67 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  ng of the databa
24340 73 65 2e 20 20 54 68 65 20 66 6f 72 6d 65 72 0a  se.  The former.
24350 2a 2a 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  ** value of the 
24360 72 6f 6f 74 20 70 61 67 65 20 74 68 61 74 20 6d  root page that m
24370 6f 76 65 64 20 2d 20 69 74 73 20 76 61 6c 75 65  oved - its value
24380 20 62 65 66 6f 72 65 20 74 68 65 20 6d 6f 76 65   before the move
24390 20 6f 63 63 75 72 72 65 64 20 2d 0a 2a 2a 20 69   occurred -.** i
243a0 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  s stored in regi
243b0 73 74 65 72 20 50 32 2e 20 20 49 66 20 6e 6f 20  ster P2.  If no 
243c0 70 61 67 65 20 0a 2a 2a 20 6d 6f 76 65 6d 65 6e  page .** movemen
243d0 74 20 77 61 73 20 72 65 71 75 69 72 65 64 20 28  t was required (
243e0 62 65 63 61 75 73 65 20 74 68 65 20 74 61 62 6c  because the tabl
243f0 65 20 62 65 69 6e 67 20 64 72 6f 70 70 65 64 20  e being dropped 
24400 77 61 73 20 61 6c 72 65 61 64 79 20 0a 2a 2a 20  was already .** 
24410 74 68 65 20 6c 61 73 74 20 6f 6e 65 20 69 6e 20  the last one in 
24420 74 68 65 20 64 61 74 61 62 61 73 65 29 20 74 68  the database) th
24430 65 6e 20 61 20 7a 65 72 6f 20 69 73 20 73 74 6f  en a zero is sto
24440 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20  red in register 
24450 50 32 2e 0a 2a 2a 20 49 66 20 41 55 54 4f 56 41  P2..** If AUTOVA
24460 43 55 55 4d 20 69 73 20 64 69 73 61 62 6c 65 64  CUUM is disabled
24470 20 74 68 65 6e 20 61 20 7a 65 72 6f 20 69 73 20   then a zero is 
24480 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74  stored in regist
24490 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  er P2..**.** See
244a0 20 61 6c 73 6f 3a 20 43 6c 65 61 72 0a 2a 2f 0a   also: Clear.*/.
244b0 63 61 73 65 20 4f 50 5f 44 65 73 74 72 6f 79 3a  case OP_Destroy:
244c0 20 7b 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70   {     /* out2-p
244d0 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69  rerelease */.  i
244e0 6e 74 20 69 4d 6f 76 65 64 3b 0a 20 20 69 6e 74  nt iMoved;.  int
244f0 20 69 43 6e 74 3b 0a 20 20 56 64 62 65 20 2a 70   iCnt;.  Vdbe *p
24500 56 64 62 65 3b 0a 20 20 69 6e 74 20 69 44 62 3b  Vdbe;.  int iDb;
24510 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
24520 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
24530 45 0a 20 20 69 43 6e 74 20 3d 20 30 3b 0a 20 20  E.  iCnt = 0;.  
24540 66 6f 72 28 70 56 64 62 65 3d 64 62 2d 3e 70 56  for(pVdbe=db->pV
24550 64 62 65 3b 20 70 56 64 62 65 3b 20 70 56 64 62  dbe; pVdbe; pVdb
24560 65 20 3d 20 70 56 64 62 65 2d 3e 70 4e 65 78 74  e = pVdbe->pNext
24570 29 7b 0a 20 20 20 20 69 66 28 20 70 56 64 62 65  ){.    if( pVdbe
24580 2d 3e 6d 61 67 69 63 3d 3d 56 44 42 45 5f 4d 41  ->magic==VDBE_MA
24590 47 49 43 5f 52 55 4e 20 26 26 20 70 56 64 62 65  GIC_RUN && pVdbe
245a0 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64 3c 32  ->inVtabMethod<2
245b0 20 26 26 20 70 56 64 62 65 2d 3e 70 63 3e 3d 30   && pVdbe->pc>=0
245c0 20 29 7b 0a 20 20 20 20 20 20 69 43 6e 74 2b 2b   ){.      iCnt++
245d0 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6c 73  ;.    }.  }.#els
245e0 65 0a 20 20 69 43 6e 74 20 3d 20 64 62 2d 3e 61  e.  iCnt = db->a
245f0 63 74 69 76 65 56 64 62 65 43 6e 74 3b 0a 23 65  ctiveVdbeCnt;.#e
24600 6e 64 69 66 0a 20 20 70 4f 75 74 2d 3e 66 6c 61  ndif.  pOut->fla
24610 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20  gs = MEM_Null;. 
24620 20 69 66 28 20 69 43 6e 74 3e 31 20 29 7b 0a 20   if( iCnt>1 ){. 
24630 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4c     rc = SQLITE_L
24640 4f 43 4b 45 44 3b 0a 20 20 20 20 70 2d 3e 65 72  OCKED;.    p->er
24650 72 6f 72 41 63 74 69 6f 6e 20 3d 20 4f 45 5f 41  rorAction = OE_A
24660 62 6f 72 74 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  bort;.  }else{. 
24670 20 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70 33     iDb = pOp->p3
24680 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 69 43  ;.    assert( iC
24690 6e 74 3d 3d 31 20 29 3b 0a 20 20 20 20 61 73 73  nt==1 );.    ass
246a0 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61  ert( (p->btreeMa
246b0 73 6b 20 26 20 28 31 3c 3c 69 44 62 29 29 21 3d  sk & (1<<iDb))!=
246c0 30 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71  0 );.    rc = sq
246d0 6c 69 74 65 33 42 74 72 65 65 44 72 6f 70 54 61  lite3BtreeDropTa
246e0 62 6c 65 28 64 62 2d 3e 61 44 62 5b 69 44 62 5d  ble(db->aDb[iDb]
246f0 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 31 2c 20 26  .pBt, pOp->p1, &
24700 69 4d 6f 76 65 64 29 3b 0a 20 20 20 20 70 4f 75  iMoved);.    pOu
24710 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49  t->flags = MEM_I
24720 6e 74 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e  nt;.    pOut->u.
24730 69 20 3d 20 69 4d 6f 76 65 64 3b 0a 23 69 66 6e  i = iMoved;.#ifn
24740 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
24750 41 55 54 4f 56 41 43 55 55 4d 0a 20 20 20 20 69  AUTOVACUUM.    i
24760 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
24770 20 26 26 20 69 4d 6f 76 65 64 21 3d 30 20 29 7b   && iMoved!=0 ){
24780 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 52 6f  .      sqlite3Ro
24790 6f 74 50 61 67 65 4d 6f 76 65 64 28 26 64 62 2d  otPageMoved(&db-
247a0 3e 61 44 62 5b 69 44 62 5d 2c 20 69 4d 6f 76 65  >aDb[iDb], iMove
247b0 64 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 20  d, pOp->p1);.   
247c0 20 20 20 72 65 73 65 74 53 63 68 65 6d 61 4f 6e     resetSchemaOn
247d0 46 61 75 6c 74 20 3d 20 31 3b 0a 20 20 20 20 7d  Fault = 1;.    }
247e0 0a 23 65 6e 64 69 66 0a 20 20 7d 0a 20 20 62 72  .#endif.  }.  br
247f0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
24800 65 3a 20 43 6c 65 61 72 20 50 31 20 50 32 20 50  e: Clear P1 P2 P
24810 33 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 61  3.**.** Delete a
24820 6c 6c 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20 74  ll contents of t
24830 68 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c  he database tabl
24840 65 20 6f 72 20 69 6e 64 65 78 20 77 68 6f 73 65  e or index whose
24850 20 72 6f 6f 74 20 70 61 67 65 0a 2a 2a 20 69 6e   root page.** in
24860 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
24870 6c 65 20 69 73 20 67 69 76 65 6e 20 62 79 20 50  le is given by P
24880 31 2e 20 20 42 75 74 2c 20 75 6e 6c 69 6b 65 20  1.  But, unlike 
24890 44 65 73 74 72 6f 79 2c 20 64 6f 20 6e 6f 74 0a  Destroy, do not.
248a0 2a 2a 20 72 65 6d 6f 76 65 20 74 68 65 20 74 61  ** remove the ta
248b0 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 66 72 6f  ble or index fro
248c0 6d 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  m the database f
248d0 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 74  ile..**.** The t
248e0 61 62 6c 65 20 62 65 69 6e 67 20 63 6c 65 61 72  able being clear
248f0 20 69 73 20 69 6e 20 74 68 65 20 6d 61 69 6e 20   is in the main 
24900 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66  database file if
24910 20 50 32 3d 3d 30 2e 20 20 49 66 0a 2a 2a 20 50   P2==0.  If.** P
24920 32 3d 3d 31 20 74 68 65 6e 20 74 68 65 20 74 61  2==1 then the ta
24930 62 6c 65 20 74 6f 20 62 65 20 63 6c 65 61 72 20  ble to be clear 
24940 69 73 20 69 6e 20 74 68 65 20 61 75 78 69 6c 69  is in the auxili
24950 61 72 79 20 64 61 74 61 62 61 73 65 20 66 69 6c  ary database fil
24960 65 0a 2a 2a 20 74 68 61 74 20 69 73 20 75 73 65  e.** that is use
24970 64 20 74 6f 20 73 74 6f 72 65 20 74 61 62 6c 65  d to store table
24980 73 20 63 72 65 61 74 65 20 75 73 69 6e 67 20 43  s create using C
24990 52 45 41 54 45 20 54 45 4d 50 4f 52 41 52 59 20  REATE TEMPORARY 
249a0 54 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  TABLE..**.** If 
249b0 74 68 65 20 50 33 20 76 61 6c 75 65 20 69 73 20  the P3 value is 
249c0 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 74  non-zero, then t
249d0 68 65 20 74 61 62 6c 65 20 72 65 66 65 72 72 65  he table referre
249e0 64 20 74 6f 20 6d 75 73 74 20 62 65 20 61 6e 0a  d to must be an.
249f0 2a 2a 20 69 6e 74 6b 65 79 20 74 61 62 6c 65 20  ** intkey table 
24a00 28 61 6e 20 53 51 4c 20 74 61 62 6c 65 2c 20 6e  (an SQL table, n
24a10 6f 74 20 61 6e 20 69 6e 64 65 78 29 2e 20 49 6e  ot an index). In
24a20 20 74 68 69 73 20 63 61 73 65 20 74 68 65 20 72   this case the r
24a30 6f 77 20 63 68 61 6e 67 65 20 0a 2a 2a 20 63 6f  ow change .** co
24a40 75 6e 74 20 69 73 20 69 6e 63 72 65 6d 65 6e 74  unt is increment
24a50 65 64 20 62 79 20 74 68 65 20 6e 75 6d 62 65 72  ed by the number
24a60 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68 65 20   of rows in the 
24a70 74 61 62 6c 65 20 62 65 69 6e 67 20 63 6c 65 61  table being clea
24a80 72 65 64 2e 20 0a 2a 2a 20 49 66 20 50 33 20 69  red. .** If P3 i
24a90 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 7a  s greater than z
24aa0 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 76 61  ero, then the va
24ab0 6c 75 65 20 73 74 6f 72 65 64 20 69 6e 20 72 65  lue stored in re
24ac0 67 69 73 74 65 72 20 50 33 20 69 73 0a 2a 2a 20  gister P3 is.** 
24ad0 61 6c 73 6f 20 69 6e 63 72 65 6d 65 6e 74 65 64  also incremented
24ae0 20 62 79 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   by the number o
24af0 66 20 72 6f 77 73 20 69 6e 20 74 68 65 20 74 61  f rows in the ta
24b00 62 6c 65 20 62 65 69 6e 67 20 63 6c 65 61 72 65  ble being cleare
24b10 64 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  d..**.** See als
24b20 6f 3a 20 44 65 73 74 72 6f 79 0a 2a 2f 0a 63 61  o: Destroy.*/.ca
24b30 73 65 20 4f 50 5f 43 6c 65 61 72 3a 20 7b 0a 20  se OP_Clear: {. 
24b40 20 69 6e 74 20 6e 43 68 61 6e 67 65 3b 0a 20 0a   int nChange;. .
24b50 20 20 6e 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20    nChange = 0;. 
24b60 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72   assert( (p->btr
24b70 65 65 4d 61 73 6b 20 26 20 28 31 3c 3c 70 4f 70  eeMask & (1<<pOp
24b80 2d 3e 70 32 29 29 21 3d 30 20 29 3b 0a 20 20 72  ->p2))!=0 );.  r
24b90 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
24ba0 43 6c 65 61 72 54 61 62 6c 65 28 0a 20 20 20 20  ClearTable(.    
24bb0 20 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70    db->aDb[pOp->p
24bc0 32 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 31 2c  2].pBt, pOp->p1,
24bd0 20 28 70 4f 70 2d 3e 70 33 20 3f 20 26 6e 43 68   (pOp->p3 ? &nCh
24be0 61 6e 67 65 20 3a 20 30 29 0a 20 20 29 3b 0a 20  ange : 0).  );. 
24bf0 20 69 66 28 20 70 4f 70 2d 3e 70 33 20 29 7b 0a   if( pOp->p3 ){.
24c00 20 20 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20 2b      p->nChange +
24c10 3d 20 6e 43 68 61 6e 67 65 3b 0a 20 20 20 20 69  = nChange;.    i
24c20 66 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 7b 0a  f( pOp->p3>0 ){.
24c30 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65        assert( me
24c40 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70  mIsValid(&aMem[p
24c50 4f 70 2d 3e 70 33 5d 29 20 29 3b 0a 20 20 20 20  Op->p3]) );.    
24c60 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
24c70 67 65 28 70 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d  ge(p, &aMem[pOp-
24c80 3e 70 33 5d 29 3b 0a 20 20 20 20 20 20 61 4d 65  >p3]);.      aMe
24c90 6d 5b 70 4f 70 2d 3e 70 33 5d 2e 75 2e 69 20 2b  m[pOp->p3].u.i +
24ca0 3d 20 6e 43 68 61 6e 67 65 3b 0a 20 20 20 20 7d  = nChange;.    }
24cb0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
24cc0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 72 65 61  ./* Opcode: Crea
24cd0 74 65 54 61 62 6c 65 20 50 31 20 50 32 20 2a 20  teTable P1 P2 * 
24ce0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 6c 6c 6f 63 61  * *.**.** Alloca
24cf0 74 65 20 61 20 6e 65 77 20 74 61 62 6c 65 20 69  te a new table i
24d00 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  n the main datab
24d10 61 73 65 20 66 69 6c 65 20 69 66 20 50 31 3d 3d  ase file if P1==
24d20 30 20 6f 72 20 69 6e 20 74 68 65 0a 2a 2a 20 61  0 or in the.** a
24d30 75 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73  uxiliary databas
24d40 65 20 66 69 6c 65 20 69 66 20 50 31 3d 3d 31 20  e file if P1==1 
24d50 6f 72 20 69 6e 20 61 6e 20 61 74 74 61 63 68 65  or in an attache
24d60 64 20 64 61 74 61 62 61 73 65 20 69 66 0a 2a 2a  d database if.**
24d70 20 50 31 3e 31 2e 20 20 57 72 69 74 65 20 74 68   P1>1.  Write th
24d80 65 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62  e root page numb
24d90 65 72 20 6f 66 20 74 68 65 20 6e 65 77 20 74 61  er of the new ta
24da0 62 6c 65 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69  ble into.** regi
24db0 73 74 65 72 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68  ster P2.**.** Th
24dc0 65 20 64 69 66 66 65 72 65 6e 63 65 20 62 65 74  e difference bet
24dd0 77 65 65 6e 20 61 20 74 61 62 6c 65 20 61 6e 64  ween a table and
24de0 20 61 6e 20 69 6e 64 65 78 20 69 73 20 74 68 69   an index is thi
24df0 73 3a 20 20 41 20 74 61 62 6c 65 20 6d 75 73 74  s:  A table must
24e00 0a 2a 2a 20 68 61 76 65 20 61 20 34 2d 62 79 74  .** have a 4-byt
24e10 65 20 69 6e 74 65 67 65 72 20 6b 65 79 20 61 6e  e integer key an
24e20 64 20 63 61 6e 20 68 61 76 65 20 61 72 62 69 74  d can have arbit
24e30 72 61 72 79 20 64 61 74 61 2e 20 20 41 6e 20 69  rary data.  An i
24e40 6e 64 65 78 0a 2a 2a 20 68 61 73 20 61 6e 20 61  ndex.** has an a
24e50 72 62 69 74 72 61 72 79 20 6b 65 79 20 62 75 74  rbitrary key but
24e60 20 6e 6f 20 64 61 74 61 2e 0a 2a 2a 0a 2a 2a 20   no data..**.** 
24e70 53 65 65 20 61 6c 73 6f 3a 20 43 72 65 61 74 65  See also: Create
24e80 49 6e 64 65 78 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  Index.*/./* Opco
24e90 64 65 3a 20 43 72 65 61 74 65 49 6e 64 65 78 20  de: CreateIndex 
24ea0 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
24eb0 2a 20 41 6c 6c 6f 63 61 74 65 20 61 20 6e 65 77  * Allocate a new
24ec0 20 69 6e 64 65 78 20 69 6e 20 74 68 65 20 6d 61   index in the ma
24ed0 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  in database file
24ee0 20 69 66 20 50 31 3d 3d 30 20 6f 72 20 69 6e 20   if P1==0 or in 
24ef0 74 68 65 0a 2a 2a 20 61 75 78 69 6c 69 61 72 79  the.** auxiliary
24f00 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69   database file i
24f10 66 20 50 31 3d 3d 31 20 6f 72 20 69 6e 20 61 6e  f P1==1 or in an
24f20 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61   attached databa
24f30 73 65 20 69 66 0a 2a 2a 20 50 31 3e 31 2e 20 20  se if.** P1>1.  
24f40 57 72 69 74 65 20 74 68 65 20 72 6f 6f 74 20 70  Write the root p
24f50 61 67 65 20 6e 75 6d 62 65 72 20 6f 66 20 74 68  age number of th
24f60 65 20 6e 65 77 20 74 61 62 6c 65 20 69 6e 74 6f  e new table into
24f70 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 32 2e  .** register P2.
24f80 0a 2a 2a 0a 2a 2a 20 53 65 65 20 64 6f 63 75 6d  .**.** See docum
24f90 65 6e 74 61 74 69 6f 6e 20 6f 6e 20 4f 50 5f 43  entation on OP_C
24fa0 72 65 61 74 65 54 61 62 6c 65 20 66 6f 72 20 61  reateTable for a
24fb0 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d  dditional inform
24fc0 61 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ation..*/.case O
24fd0 50 5f 43 72 65 61 74 65 49 6e 64 65 78 3a 20 20  P_CreateIndex:  
24fe0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
24ff0 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a  2-prerelease */.
25000 63 61 73 65 20 4f 50 5f 43 72 65 61 74 65 54 61  case OP_CreateTa
25010 62 6c 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20  ble: {          
25020 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61  /* out2-prerelea
25030 73 65 20 2a 2f 0a 20 20 69 6e 74 20 70 67 6e 6f  se */.  int pgno
25040 3b 0a 20 20 69 6e 74 20 66 6c 61 67 73 3b 0a 20  ;.  int flags;. 
25050 20 44 62 20 2a 70 44 62 3b 0a 0a 20 20 70 67 6e   Db *pDb;..  pgn
25060 6f 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28  o = 0;.  assert(
25070 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
25080 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29  Op->p1<db->nDb )
25090 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e  ;.  assert( (p->
250a0 62 74 72 65 65 4d 61 73 6b 20 26 20 28 31 3c 3c  btreeMask & (1<<
250b0 70 4f 70 2d 3e 70 31 29 29 21 3d 30 20 29 3b 0a  pOp->p1))!=0 );.
250c0 20 20 70 44 62 20 3d 20 26 64 62 2d 3e 61 44 62    pDb = &db->aDb
250d0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
250e0 65 72 74 28 20 70 44 62 2d 3e 70 42 74 21 3d 30  ert( pDb->pBt!=0
250f0 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f   );.  if( pOp->o
25100 70 63 6f 64 65 3d 3d 4f 50 5f 43 72 65 61 74 65  pcode==OP_Create
25110 54 61 62 6c 65 20 29 7b 0a 20 20 20 20 2f 2a 20  Table ){.    /* 
25120 66 6c 61 67 73 20 3d 20 42 54 52 45 45 5f 49 4e  flags = BTREE_IN
25130 54 4b 45 59 3b 20 2a 2f 0a 20 20 20 20 66 6c 61  TKEY; */.    fla
25140 67 73 20 3d 20 42 54 52 45 45 5f 49 4e 54 4b 45  gs = BTREE_INTKE
25150 59 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  Y;.  }else{.    
25160 66 6c 61 67 73 20 3d 20 42 54 52 45 45 5f 42 4c  flags = BTREE_BL
25170 4f 42 4b 45 59 3b 0a 20 20 7d 0a 20 20 72 63 20  OBKEY;.  }.  rc 
25180 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 72  = sqlite3BtreeCr
25190 65 61 74 65 54 61 62 6c 65 28 70 44 62 2d 3e 70  eateTable(pDb->p
251a0 42 74 2c 20 26 70 67 6e 6f 2c 20 66 6c 61 67 73  Bt, &pgno, flags
251b0 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  );.  pOut->u.i =
251c0 20 70 67 6e 6f 3b 0a 20 20 62 72 65 61 6b 3b 0a   pgno;.  break;.
251d0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 61  }../* Opcode: Pa
251e0 72 73 65 53 63 68 65 6d 61 20 50 31 20 50 32 20  rseSchema P1 P2 
251f0 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61  * P4 *.**.** Rea
25200 64 20 61 6e 64 20 70 61 72 73 65 20 61 6c 6c 20  d and parse all 
25210 65 6e 74 72 69 65 73 20 66 72 6f 6d 20 74 68 65  entries from the
25220 20 53 51 4c 49 54 45 5f 4d 41 53 54 45 52 20 74   SQLITE_MASTER t
25230 61 62 6c 65 20 6f 66 20 64 61 74 61 62 61 73 65  able of database
25240 20 50 31 0a 2a 2a 20 74 68 61 74 20 6d 61 74 63   P1.** that matc
25250 68 20 74 68 65 20 57 48 45 52 45 20 63 6c 61 75  h the WHERE clau
25260 73 65 20 50 34 2e 20 20 50 32 20 69 73 20 74 68  se P4.  P2 is th
25270 65 20 22 66 6f 72 63 65 22 20 66 6c 61 67 2e 20  e "force" flag. 
25280 20 20 41 6c 77 61 79 73 20 64 6f 0a 2a 2a 20 74    Always do.** t
25290 68 65 20 70 61 72 73 69 6e 67 20 69 66 20 50 32  he parsing if P2
252a0 20 69 73 20 74 72 75 65 2e 20 20 49 66 20 50 32   is true.  If P2
252b0 20 69 73 20 66 61 6c 73 65 2c 20 74 68 65 6e 20   is false, then 
252c0 74 68 69 73 20 72 6f 75 74 69 6e 65 20 69 73 20  this routine is 
252d0 61 0a 2a 2a 20 6e 6f 2d 6f 70 20 69 66 20 74 68  a.** no-op if th
252e0 65 20 73 63 68 65 6d 61 20 69 73 20 6e 6f 74 20  e schema is not 
252f0 63 75 72 72 65 6e 74 6c 79 20 6c 6f 61 64 65 64  currently loaded
25300 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64  .  In other word
25310 73 2c 20 69 66 20 50 32 0a 2a 2a 20 69 73 20 66  s, if P2.** is f
25320 61 6c 73 65 2c 20 74 68 65 20 53 51 4c 49 54 45  alse, the SQLITE
25330 5f 4d 41 53 54 45 52 20 74 61 62 6c 65 20 69 73  _MASTER table is
25340 20 6f 6e 6c 79 20 70 61 72 73 65 64 20 69 66 20   only parsed if 
25350 74 68 65 20 72 65 73 74 20 6f 66 20 74 68 65 0a  the rest of the.
25360 2a 2a 20 73 63 68 65 6d 61 20 69 73 20 61 6c 72  ** schema is alr
25370 65 61 64 79 20 6c 6f 61 64 65 64 20 69 6e 74 6f  eady loaded into
25380 20 74 68 65 20 73 79 6d 62 6f 6c 20 74 61 62 6c   the symbol tabl
25390 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  e..**.** This op
253a0 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74 68 65  code invokes the
253b0 20 70 61 72 73 65 72 20 74 6f 20 63 72 65 61 74   parser to creat
253c0 65 20 61 20 6e 65 77 20 76 69 72 74 75 61 6c 20  e a new virtual 
253d0 6d 61 63 68 69 6e 65 2c 0a 2a 2a 20 74 68 65 6e  machine,.** then
253e0 20 72 75 6e 73 20 74 68 65 20 6e 65 77 20 76 69   runs the new vi
253f0 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 2e 20 20  rtual machine.  
25400 49 74 20 69 73 20 74 68 75 73 20 61 20 72 65 2d  It is thus a re-
25410 65 6e 74 72 61 6e 74 20 6f 70 63 6f 64 65 2e 0a  entrant opcode..
25420 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 61 72 73 65  */.case OP_Parse
25430 53 63 68 65 6d 61 3a 20 7b 0a 20 20 69 6e 74 20  Schema: {.  int 
25440 69 44 62 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61  iDb;.  const cha
25450 72 20 2a 7a 4d 61 73 74 65 72 3b 0a 20 20 63 68  r *zMaster;.  ch
25460 61 72 20 2a 7a 53 71 6c 3b 0a 20 20 49 6e 69 74  ar *zSql;.  Init
25470 44 61 74 61 20 69 6e 69 74 44 61 74 61 3b 0a 0a  Data initData;..
25480 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70 31 3b    iDb = pOp->p1;
25490 0a 20 20 61 73 73 65 72 74 28 20 69 44 62 3e 3d  .  assert( iDb>=
254a0 30 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62  0 && iDb<db->nDb
254b0 20 29 3b 0a 0a 20 20 2f 2a 20 49 66 20 70 4f 70   );..  /* If pOp
254c0 2d 3e 70 32 20 69 73 20 30 2c 20 74 68 65 6e 20  ->p2 is 0, then 
254d0 74 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 62  this opcode is b
254e0 65 69 6e 67 20 65 78 65 63 75 74 65 64 20 74 6f  eing executed to
254f0 20 72 65 61 64 20 61 0a 20 20 2a 2a 20 73 69 6e   read a.  ** sin
25500 67 6c 65 20 72 6f 77 2c 20 66 6f 72 20 65 78 61  gle row, for exa
25510 6d 70 6c 65 20 74 68 65 20 72 6f 77 20 63 6f 72  mple the row cor
25520 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 61 20  responding to a 
25530 6e 65 77 20 69 6e 64 65 78 0a 20 20 2a 2a 20 63  new index.  ** c
25540 72 65 61 74 65 64 20 62 79 20 74 68 69 73 20 56  reated by this V
25550 44 42 45 2c 20 66 72 6f 6d 20 74 68 65 20 73 71  DBE, from the sq
25560 6c 69 74 65 5f 6d 61 73 74 65 72 20 74 61 62 6c  lite_master tabl
25570 65 2e 20 49 74 20 6f 6e 6c 79 0a 20 20 2a 2a 20  e. It only.  ** 
25580 64 6f 65 73 20 74 68 69 73 20 69 66 20 74 68 65  does this if the
25590 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 69   corresponding i
255a0 6e 2d 6d 65 6d 6f 72 79 20 73 63 68 65 6d 61 20  n-memory schema 
255b0 69 73 20 63 75 72 72 65 6e 74 6c 79 0a 20 20 2a  is currently.  *
255c0 2a 20 6c 6f 61 64 65 64 2e 20 4f 74 68 65 72 77  * loaded. Otherw
255d0 69 73 65 2c 20 74 68 65 20 6e 65 77 20 69 6e 64  ise, the new ind
255e0 65 78 20 64 65 66 69 6e 69 74 69 6f 6e 20 63 61  ex definition ca
255f0 6e 20 62 65 20 6c 6f 61 64 65 64 20 61 6c 6f 6e  n be loaded alon
25600 67 0a 20 20 2a 2a 20 77 69 74 68 20 74 68 65 20  g.  ** with the 
25610 72 65 73 74 20 6f 66 20 74 68 65 20 73 63 68 65  rest of the sche
25620 6d 61 20 77 68 65 6e 20 69 74 20 69 73 20 72 65  ma when it is re
25630 71 75 69 72 65 64 2e 0a 20 20 2a 2a 0a 20 20 2a  quired..  **.  *
25640 2a 20 41 6c 74 68 6f 75 67 68 20 74 68 65 20 6d  * Although the m
25650 75 74 65 78 20 6f 6e 20 74 68 65 20 42 74 53 68  utex on the BtSh
25660 61 72 65 64 20 6f 62 6a 65 63 74 20 74 68 61 74  ared object that
25670 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 0a   corresponds to.
25680 20 20 2a 2a 20 64 61 74 61 62 61 73 65 20 69 44    ** database iD
25690 62 20 28 74 68 65 20 64 61 74 61 62 61 73 65 20  b (the database 
256a0 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 73  containing the s
256b0 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 74 61 62  qlite_master tab
256c0 6c 65 0a 20 20 2a 2a 20 72 65 61 64 20 62 79 20  le.  ** read by 
256d0 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
256e0 29 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 68  ) is currently h
256f0 65 6c 64 2c 20 69 74 20 69 73 20 6e 65 63 65 73  eld, it is neces
25700 73 61 72 79 20 74 6f 0a 20 20 2a 2a 20 6f 62 74  sary to.  ** obt
25710 61 69 6e 20 74 68 65 20 6d 75 74 65 78 65 73 20  ain the mutexes 
25720 6f 6e 20 61 6c 6c 20 61 74 74 61 63 68 65 64 20  on all attached 
25730 64 61 74 61 62 61 73 65 73 20 62 65 66 6f 72 65  databases before
25740 20 63 68 65 63 6b 69 6e 67 20 69 66 0a 20 20 2a   checking if.  *
25750 2a 20 74 68 65 20 73 63 68 65 6d 61 20 6f 66 20  * the schema of 
25760 69 44 62 20 69 73 20 6c 6f 61 64 65 64 2e 20 54  iDb is loaded. T
25770 68 69 73 20 69 73 20 62 65 63 61 75 73 65 2c 20  his is because, 
25780 61 74 20 74 68 65 20 73 74 61 72 74 20 6f 66 0a  at the start of.
25790 20 20 2a 2a 20 74 68 65 20 73 71 6c 69 74 65 33    ** the sqlite3
257a0 5f 65 78 65 63 28 29 20 63 61 6c 6c 20 62 65 6c  _exec() call bel
257b0 6f 77 2c 20 53 51 4c 69 74 65 20 77 69 6c 6c 20  ow, SQLite will 
257c0 69 6e 76 6f 6b 65 20 0a 20 20 2a 2a 20 73 71 6c  invoke .  ** sql
257d0 69 74 65 33 42 74 72 65 65 45 6e 74 65 72 41 6c  ite3BtreeEnterAl
257e0 6c 28 29 2e 20 49 66 20 61 6c 6c 20 6d 75 74 65  l(). If all mute
257f0 78 65 73 20 61 72 65 20 6e 6f 74 20 61 6c 72 65  xes are not alre
25800 61 64 79 20 68 65 6c 64 2c 20 74 68 65 0a 20 20  ady held, the.  
25810 2a 2a 20 69 44 62 20 6d 75 74 65 78 20 6d 61 79  ** iDb mutex may
25820 20 62 65 20 74 65 6d 70 6f 72 61 72 69 6c 79 20   be temporarily 
25830 72 65 6c 65 61 73 65 64 20 74 6f 20 61 76 6f 69  released to avoi
25840 64 20 64 65 61 64 6c 6f 63 6b 2e 20 49 66 20 0a  d deadlock. If .
25850 20 20 2a 2a 20 74 68 69 73 20 68 61 70 70 65 6e    ** this happen
25860 73 2c 20 74 68 65 6e 20 73 6f 6d 65 20 6f 74 68  s, then some oth
25870 65 72 20 74 68 72 65 61 64 20 6d 61 79 20 64 65  er thread may de
25880 6c 65 74 65 20 74 68 65 20 69 6e 2d 6d 65 6d 6f  lete the in-memo
25890 72 79 20 0a 20 20 2a 2a 20 73 63 68 65 6d 61 20  ry .  ** schema 
258a0 6f 66 20 64 61 74 61 62 61 73 65 20 69 44 62 20  of database iDb 
258b0 62 65 66 6f 72 65 20 74 68 65 20 53 51 4c 20 73  before the SQL s
258c0 74 61 74 65 6d 65 6e 74 20 72 75 6e 73 2e 20 54  tatement runs. T
258d0 68 65 20 73 63 68 65 6d 61 0a 20 20 2a 2a 20 77  he schema.  ** w
258e0 69 6c 6c 20 6e 6f 74 20 62 65 20 72 65 6c 6f 61  ill not be reloa
258f0 64 65 64 20 62 65 63 75 61 73 65 20 74 68 65 20  ded becuase the 
25900 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20 66 6c  db->init.busy fl
25910 61 67 20 69 73 20 73 65 74 2e 20 54 68 69 73 0a  ag is set. This.
25920 20 20 2a 2a 20 63 61 6e 20 72 65 73 75 6c 74 20    ** can result 
25930 69 6e 20 61 20 22 6e 6f 20 73 75 63 68 20 74 61  in a "no such ta
25940 62 6c 65 3a 20 73 71 6c 69 74 65 5f 6d 61 73 74  ble: sqlite_mast
25950 65 72 22 20 6f 72 20 22 6d 61 6c 66 6f 72 6d 65  er" or "malforme
25960 64 0a 20 20 2a 2a 20 64 61 74 61 62 61 73 65 20  d.  ** database 
25970 73 63 68 65 6d 61 22 20 65 72 72 6f 72 20 62 65  schema" error be
25980 69 6e 67 20 72 65 74 75 72 6e 65 64 20 74 6f 20  ing returned to 
25990 74 68 65 20 75 73 65 72 2e 0a 20 20 2a 2f 0a 20  the user..  */. 
259a0 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
259b0 42 74 72 65 65 48 6f 6c 64 73 4d 75 74 65 78 28  BtreeHoldsMutex(
259c0 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74  db->aDb[iDb].pBt
259d0 29 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 42 74  ) );.  sqlite3Bt
259e0 72 65 65 45 6e 74 65 72 41 6c 6c 28 64 62 29 3b  reeEnterAll(db);
259f0 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 20 7c  .  if( pOp->p2 |
25a00 7c 20 44 62 48 61 73 50 72 6f 70 65 72 74 79 28  | DbHasProperty(
25a10 64 62 2c 20 69 44 62 2c 20 44 42 5f 53 63 68 65  db, iDb, DB_Sche
25a20 6d 61 4c 6f 61 64 65 64 29 20 29 7b 0a 20 20 20  maLoaded) ){.   
25a30 20 7a 4d 61 73 74 65 72 20 3d 20 53 43 48 45 4d   zMaster = SCHEM
25a40 41 5f 54 41 42 4c 45 28 69 44 62 29 3b 0a 20 20  A_TABLE(iDb);.  
25a50 20 20 69 6e 69 74 44 61 74 61 2e 64 62 20 3d 20    initData.db = 
25a60 64 62 3b 0a 20 20 20 20 69 6e 69 74 44 61 74 61  db;.    initData
25a70 2e 69 44 62 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a  .iDb = pOp->p1;.
25a80 20 20 20 20 69 6e 69 74 44 61 74 61 2e 70 7a 45      initData.pzE
25a90 72 72 4d 73 67 20 3d 20 26 70 2d 3e 7a 45 72 72  rrMsg = &p->zErr
25aa0 4d 73 67 3b 0a 20 20 20 20 7a 53 71 6c 20 3d 20  Msg;.    zSql = 
25ab0 73 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 64  sqlite3MPrintf(d
25ac0 62 2c 0a 20 20 20 20 20 20 20 22 53 45 4c 45 43  b,.       "SELEC
25ad0 54 20 6e 61 6d 65 2c 20 72 6f 6f 74 70 61 67 65  T name, rootpage
25ae0 2c 20 73 71 6c 20 46 52 4f 4d 20 27 25 71 27 2e  , sql FROM '%q'.
25af0 25 73 20 57 48 45 52 45 20 25 73 20 4f 52 44 45  %s WHERE %s ORDE
25b00 52 20 42 59 20 72 6f 77 69 64 22 2c 0a 20 20 20  R BY rowid",.   
25b10 20 20 20 20 64 62 2d 3e 61 44 62 5b 69 44 62 5d      db->aDb[iDb]
25b20 2e 7a 4e 61 6d 65 2c 20 7a 4d 61 73 74 65 72 2c  .zName, zMaster,
25b30 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20   pOp->p4.z);.   
25b40 20 69 66 28 20 7a 53 71 6c 3d 3d 30 20 29 7b 0a   if( zSql==0 ){.
25b50 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
25b60 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 20 20 7d 65 6c  E_NOMEM;.    }el
25b70 73 65 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74  se{.      assert
25b80 28 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 3d  ( db->init.busy=
25b90 3d 30 20 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e  =0 );.      db->
25ba0 69 6e 69 74 2e 62 75 73 79 20 3d 20 31 3b 0a 20  init.busy = 1;. 
25bb0 20 20 20 20 20 69 6e 69 74 44 61 74 61 2e 72 63       initData.rc
25bc0 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20   = SQLITE_OK;.  
25bd0 20 20 20 20 61 73 73 65 72 74 28 20 21 64 62 2d      assert( !db-
25be0 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 3b  >mallocFailed );
25bf0 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69  .      rc = sqli
25c00 74 65 33 5f 65 78 65 63 28 64 62 2c 20 7a 53 71  te3_exec(db, zSq
25c10 6c 2c 20 73 71 6c 69 74 65 33 49 6e 69 74 43 61  l, sqlite3InitCa
25c20 6c 6c 62 61 63 6b 2c 20 26 69 6e 69 74 44 61 74  llback, &initDat
25c30 61 2c 20 30 29 3b 0a 20 20 20 20 20 20 69 66 28  a, 0);.      if(
25c40 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
25c50 20 72 63 20 3d 20 69 6e 69 74 44 61 74 61 2e 72   rc = initData.r
25c60 63 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  c;.      sqlite3
25c70 44 62 46 72 65 65 28 64 62 2c 20 7a 53 71 6c 29  DbFree(db, zSql)
25c80 3b 0a 20 20 20 20 20 20 64 62 2d 3e 69 6e 69 74  ;.      db->init
25c90 2e 62 75 73 79 20 3d 20 30 3b 0a 20 20 20 20 7d  .busy = 0;.    }
25ca0 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 42 74  .  }.  sqlite3Bt
25cb0 72 65 65 4c 65 61 76 65 41 6c 6c 28 64 62 29 3b  reeLeaveAll(db);
25cc0 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54  .  if( rc==SQLIT
25cd0 45 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20 20 67  E_NOMEM ){.    g
25ce0 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a  oto no_mem;.  }.
25cf0 20 20 62 72 65 61 6b 3b 20 20 0a 7d 0a 0a 23 69    break;  .}..#i
25d00 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
25d10 45 5f 4f 4d 49 54 5f 41 4e 41 4c 59 5a 45 29 0a  E_OMIT_ANALYZE).
25d20 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 6f 61 64 41  /* Opcode: LoadA
25d30 6e 61 6c 79 73 69 73 20 50 31 20 2a 20 2a 20 2a  nalysis P1 * * *
25d40 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 74 68   *.**.** Read th
25d50 65 20 73 71 6c 69 74 65 5f 73 74 61 74 31 20 74  e sqlite_stat1 t
25d60 61 62 6c 65 20 66 6f 72 20 64 61 74 61 62 61 73  able for databas
25d70 65 20 50 31 20 61 6e 64 20 6c 6f 61 64 20 74 68  e P1 and load th
25d80 65 20 63 6f 6e 74 65 6e 74 0a 2a 2a 20 6f 66 20  e content.** of 
25d90 74 68 61 74 20 74 61 62 6c 65 20 69 6e 74 6f 20  that table into 
25da0 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 69 6e 64  the internal ind
25db0 65 78 20 68 61 73 68 20 74 61 62 6c 65 2e 20 20  ex hash table.  
25dc0 54 68 69 73 20 77 69 6c 6c 20 63 61 75 73 65 0a  This will cause.
25dd0 2a 2a 20 74 68 65 20 61 6e 61 6c 79 73 69 73 20  ** the analysis 
25de0 74 6f 20 62 65 20 75 73 65 64 20 77 68 65 6e 20  to be used when 
25df0 70 72 65 70 61 72 69 6e 67 20 61 6c 6c 20 73 75  preparing all su
25e00 62 73 65 71 75 65 6e 74 20 71 75 65 72 69 65 73  bsequent queries
25e10 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 6f 61  ..*/.case OP_Loa
25e20 64 41 6e 61 6c 79 73 69 73 3a 20 7b 0a 20 20 61  dAnalysis: {.  a
25e30 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
25e40 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d  0 && pOp->p1<db-
25e50 3e 6e 44 62 20 29 3b 0a 20 20 72 63 20 3d 20 73  >nDb );.  rc = s
25e60 71 6c 69 74 65 33 41 6e 61 6c 79 73 69 73 4c 6f  qlite3AnalysisLo
25e70 61 64 28 64 62 2c 20 70 4f 70 2d 3e 70 31 29 3b  ad(db, pOp->p1);
25e80 0a 20 20 62 72 65 61 6b 3b 20 20 0a 7d 0a 23 65  .  break;  .}.#e
25e90 6e 64 69 66 20 2f 2a 20 21 64 65 66 69 6e 65 64  ndif /* !defined
25ea0 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4e 41  (SQLITE_OMIT_ANA
25eb0 4c 59 5a 45 29 20 2a 2f 0a 0a 2f 2a 20 4f 70 63  LYZE) */../* Opc
25ec0 6f 64 65 3a 20 44 72 6f 70 54 61 62 6c 65 20 50  ode: DropTable P
25ed0 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  1 * * P4 *.**.**
25ee0 20 52 65 6d 6f 76 65 20 74 68 65 20 69 6e 74 65   Remove the inte
25ef0 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79 29  rnal (in-memory)
25f00 20 64 61 74 61 20 73 74 72 75 63 74 75 72 65 73   data structures
25f10 20 74 68 61 74 20 64 65 73 63 72 69 62 65 0a 2a   that describe.*
25f20 2a 20 74 68 65 20 74 61 62 6c 65 20 6e 61 6d 65  * the table name
25f30 64 20 50 34 20 69 6e 20 64 61 74 61 62 61 73 65  d P4 in database
25f40 20 50 31 2e 20 20 54 68 69 73 20 69 73 20 63 61   P1.  This is ca
25f50 6c 6c 65 64 20 61 66 74 65 72 20 61 20 74 61 62  lled after a tab
25f60 6c 65 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65 64  le.** is dropped
25f70 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65   in order to kee
25f80 70 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 72  p the internal r
25f90 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66  epresentation of
25fa0 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 63   the.** schema c
25fb0 6f 6e 73 69 73 74 65 6e 74 20 77 69 74 68 20 77  onsistent with w
25fc0 68 61 74 20 69 73 20 6f 6e 20 64 69 73 6b 2e 0a  hat is on disk..
25fd0 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 72 6f 70 54  */.case OP_DropT
25fe0 61 62 6c 65 3a 20 7b 0a 20 20 73 71 6c 69 74 65  able: {.  sqlite
25ff0 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65  3UnlinkAndDelete
26000 54 61 62 6c 65 28 64 62 2c 20 70 4f 70 2d 3e 70  Table(db, pOp->p
26010 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20  1, pOp->p4.z);. 
26020 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
26030 63 6f 64 65 3a 20 44 72 6f 70 49 6e 64 65 78 20  code: DropIndex 
26040 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a  P1 * * P4 *.**.*
26050 2a 20 52 65 6d 6f 76 65 20 74 68 65 20 69 6e 74  * Remove the int
26060 65 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79  ernal (in-memory
26070 29 20 64 61 74 61 20 73 74 72 75 63 74 75 72 65  ) data structure
26080 73 20 74 68 61 74 20 64 65 73 63 72 69 62 65 0a  s that describe.
26090 2a 2a 20 74 68 65 20 69 6e 64 65 78 20 6e 61 6d  ** the index nam
260a0 65 64 20 50 34 20 69 6e 20 64 61 74 61 62 61 73  ed P4 in databas
260b0 65 20 50 31 2e 20 20 54 68 69 73 20 69 73 20 63  e P1.  This is c
260c0 61 6c 6c 65 64 20 61 66 74 65 72 20 61 6e 20 69  alled after an i
260d0 6e 64 65 78 0a 2a 2a 20 69 73 20 64 72 6f 70 70  ndex.** is dropp
260e0 65 64 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b  ed in order to k
260f0 65 65 70 20 74 68 65 20 69 6e 74 65 72 6e 61 6c  eep the internal
26100 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   representation 
26110 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61  of the.** schema
26120 20 63 6f 6e 73 69 73 74 65 6e 74 20 77 69 74 68   consistent with
26130 20 77 68 61 74 20 69 73 20 6f 6e 20 64 69 73 6b   what is on disk
26140 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 72 6f  ..*/.case OP_Dro
26150 70 49 6e 64 65 78 3a 20 7b 0a 20 20 73 71 6c 69  pIndex: {.  sqli
26160 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65  te3UnlinkAndDele
26170 74 65 49 6e 64 65 78 28 64 62 2c 20 70 4f 70 2d  teIndex(db, pOp-
26180 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b  >p1, pOp->p4.z);
26190 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
261a0 4f 70 63 6f 64 65 3a 20 44 72 6f 70 54 72 69 67  Opcode: DropTrig
261b0 67 65 72 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a  ger P1 * * P4 *.
261c0 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74 68 65  **.** Remove the
261d0 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d 6d 65   internal (in-me
261e0 6d 6f 72 79 29 20 64 61 74 61 20 73 74 72 75 63  mory) data struc
261f0 74 75 72 65 73 20 74 68 61 74 20 64 65 73 63 72  tures that descr
26200 69 62 65 0a 2a 2a 20 74 68 65 20 74 72 69 67 67  ibe.** the trigg
26210 65 72 20 6e 61 6d 65 64 20 50 34 20 69 6e 20 64  er named P4 in d
26220 61 74 61 62 61 73 65 20 50 31 2e 20 20 54 68 69  atabase P1.  Thi
26230 73 20 69 73 20 63 61 6c 6c 65 64 20 61 66 74 65  s is called afte
26240 72 20 61 20 74 72 69 67 67 65 72 0a 2a 2a 20 69  r a trigger.** i
26250 73 20 64 72 6f 70 70 65 64 20 69 6e 20 6f 72 64  s dropped in ord
26260 65 72 20 74 6f 20 6b 65 65 70 20 74 68 65 20 69  er to keep the i
26270 6e 74 65 72 6e 61 6c 20 72 65 70 72 65 73 65 6e  nternal represen
26280 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a  tation of the.**
26290 20 73 63 68 65 6d 61 20 63 6f 6e 73 69 73 74 65   schema consiste
262a0 6e 74 20 77 69 74 68 20 77 68 61 74 20 69 73 20  nt with what is 
262b0 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65  on disk..*/.case
262c0 20 4f 50 5f 44 72 6f 70 54 72 69 67 67 65 72 3a   OP_DropTrigger:
262d0 20 7b 0a 20 20 73 71 6c 69 74 65 33 55 6e 6c 69   {.  sqlite3Unli
262e0 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72 69 67 67  nkAndDeleteTrigg
262f0 65 72 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20  er(db, pOp->p1, 
26300 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62 72  pOp->p4.z);.  br
26310 65 61 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e 64 65 66  eak;.}...#ifndef
26320 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 54   SQLITE_OMIT_INT
26330 45 47 52 49 54 59 5f 43 48 45 43 4b 0a 2f 2a 20  EGRITY_CHECK./* 
26340 4f 70 63 6f 64 65 3a 20 49 6e 74 65 67 72 69 74  Opcode: Integrit
26350 79 43 6b 20 50 31 20 50 32 20 50 33 20 2a 20 50  yCk P1 P2 P3 * P
26360 35 0a 2a 2a 0a 2a 2a 20 44 6f 20 61 6e 20 61 6e  5.**.** Do an an
26370 61 6c 79 73 69 73 20 6f 66 20 74 68 65 20 63 75  alysis of the cu
26380 72 72 65 6e 74 6c 79 20 6f 70 65 6e 20 64 61 74  rrently open dat
26390 61 62 61 73 65 2e 20 20 53 74 6f 72 65 20 69 6e  abase.  Store in
263a0 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31 20  .** register P1 
263b0 74 68 65 20 74 65 78 74 20 6f 66 20 61 6e 20 65  the text of an e
263c0 72 72 6f 72 20 6d 65 73 73 61 67 65 20 64 65 73  rror message des
263d0 63 72 69 62 69 6e 67 20 61 6e 79 20 70 72 6f 62  cribing any prob
263e0 6c 65 6d 73 2e 0a 2a 2a 20 49 66 20 6e 6f 20 70  lems..** If no p
263f0 72 6f 62 6c 65 6d 73 20 61 72 65 20 66 6f 75 6e  roblems are foun
26400 64 2c 20 73 74 6f 72 65 20 61 20 4e 55 4c 4c 20  d, store a NULL 
26410 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a  in register P1..
26420 2a 2a 0a 2a 2a 20 54 68 65 20 72 65 67 69 73 74  **.** The regist
26430 65 72 20 50 33 20 63 6f 6e 74 61 69 6e 73 20 74  er P3 contains t
26440 68 65 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65  he maximum numbe
26450 72 20 6f 66 20 61 6c 6c 6f 77 65 64 20 65 72 72  r of allowed err
26460 6f 72 73 2e 0a 2a 2a 20 41 74 20 6d 6f 73 74 20  ors..** At most 
26470 72 65 67 28 50 33 29 20 65 72 72 6f 72 73 20 77  reg(P3) errors w
26480 69 6c 6c 20 62 65 20 72 65 70 6f 72 74 65 64 2e  ill be reported.
26490 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  .** In other wor
264a0 64 73 2c 20 74 68 65 20 61 6e 61 6c 79 73 69 73  ds, the analysis
264b0 20 73 74 6f 70 73 20 61 73 20 73 6f 6f 6e 20 61   stops as soon a
264c0 73 20 72 65 67 28 50 31 29 20 65 72 72 6f 72 73  s reg(P1) errors
264d0 20 61 72 65 20 0a 2a 2a 20 73 65 65 6e 2e 20 20   are .** seen.  
264e0 52 65 67 28 50 31 29 20 69 73 20 75 70 64 61 74  Reg(P1) is updat
264f0 65 64 20 77 69 74 68 20 74 68 65 20 6e 75 6d 62  ed with the numb
26500 65 72 20 6f 66 20 65 72 72 6f 72 73 20 72 65 6d  er of errors rem
26510 61 69 6e 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 54 68  aining..**.** Th
26520 65 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62  e root page numb
26530 65 72 73 20 6f 66 20 61 6c 6c 20 74 61 62 6c 65  ers of all table
26540 73 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  s in the databas
26550 65 20 61 72 65 20 69 6e 74 65 67 65 72 0a 2a 2a  e are integer.**
26560 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 28 50   stored in reg(P
26570 31 29 2c 20 72 65 67 28 50 31 2b 31 29 2c 20 72  1), reg(P1+1), r
26580 65 67 28 50 31 2b 32 29 2c 20 2e 2e 2e 2e 20 20  eg(P1+2), ....  
26590 54 68 65 72 65 20 61 72 65 20 50 32 20 74 61 62  There are P2 tab
265a0 6c 65 73 0a 2a 2a 20 74 6f 74 61 6c 2e 0a 2a 2a  les.** total..**
265b0 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 6e 6f 74  .** If P5 is not
265c0 20 7a 65 72 6f 2c 20 74 68 65 20 63 68 65 63 6b   zero, the check
265d0 20 69 73 20 64 6f 6e 65 20 6f 6e 20 74 68 65 20   is done on the 
265e0 61 75 78 69 6c 69 61 72 79 20 64 61 74 61 62 61  auxiliary databa
265f0 73 65 0a 2a 2a 20 66 69 6c 65 2c 20 6e 6f 74 20  se.** file, not 
26600 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
26610 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68  e file..**.** Th
26620 69 73 20 6f 70 63 6f 64 65 20 69 73 20 75 73 65  is opcode is use
26630 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74  d to implement t
26640 68 65 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65  he integrity_che
26650 63 6b 20 70 72 61 67 6d 61 2e 0a 2a 2f 0a 63 61  ck pragma..*/.ca
26660 73 65 20 4f 50 5f 49 6e 74 65 67 72 69 74 79 43  se OP_IntegrityC
26670 6b 3a 20 7b 0a 20 20 69 6e 74 20 6e 52 6f 6f 74  k: {.  int nRoot
26680 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72  ;      /* Number
26690 20 6f 66 20 74 61 62 6c 65 73 20 74 6f 20 63 68   of tables to ch
266a0 65 63 6b 2e 20 20 28 4e 75 6d 62 65 72 20 6f 66  eck.  (Number of
266b0 20 72 6f 6f 74 20 70 61 67 65 73 2e 29 20 2a 2f   root pages.) */
266c0 0a 20 20 69 6e 74 20 2a 61 52 6f 6f 74 3b 20 20  .  int *aRoot;  
266d0 20 20 20 2f 2a 20 41 72 72 61 79 20 6f 66 20 72     /* Array of r
266e0 6f 6f 74 70 61 67 65 20 6e 75 6d 62 65 72 73 20  ootpage numbers 
266f0 66 6f 72 20 74 61 62 6c 65 73 20 74 6f 20 62 65  for tables to be
26700 20 63 68 65 63 6b 65 64 20 2a 2f 0a 20 20 69 6e   checked */.  in
26710 74 20 6a 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  t j;          /*
26720 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 20 2a 2f   Loop counter */
26730 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20 20 20 20  .  int nErr;    
26740 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
26750 65 72 72 6f 72 73 20 72 65 70 6f 72 74 65 64 20  errors reported 
26760 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 3b 20 20 20  */.  char *z;   
26770 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20       /* Text of 
26780 74 68 65 20 65 72 72 6f 72 20 72 65 70 6f 72 74  the error report
26790 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 6e 45 72 72   */.  Mem *pnErr
267a0 3b 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65  ;     /* Registe
267b0 72 20 6b 65 65 70 69 6e 67 20 74 72 61 63 6b 20  r keeping track 
267c0 6f 66 20 65 72 72 6f 72 73 20 72 65 6d 61 69 6e  of errors remain
267d0 69 6e 67 20 2a 2f 0a 20 20 0a 20 20 6e 52 6f 6f  ing */.  .  nRoo
267e0 74 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61  t = pOp->p2;.  a
267f0 73 73 65 72 74 28 20 6e 52 6f 6f 74 3e 30 20 29  ssert( nRoot>0 )
26800 3b 0a 20 20 61 52 6f 6f 74 20 3d 20 73 71 6c 69  ;.  aRoot = sqli
26810 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28 64  te3DbMallocRaw(d
26820 62 2c 20 73 69 7a 65 6f 66 28 69 6e 74 29 2a 28  b, sizeof(int)*(
26830 6e 52 6f 6f 74 2b 31 29 20 29 3b 0a 20 20 69 66  nRoot+1) );.  if
26840 28 20 61 52 6f 6f 74 3d 3d 30 20 29 20 67 6f 74  ( aRoot==0 ) got
26850 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 61 73 73 65  o no_mem;.  asse
26860 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26  rt( pOp->p3>0 &&
26870 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65   pOp->p3<=p->nMe
26880 6d 20 29 3b 0a 20 20 70 6e 45 72 72 20 3d 20 26  m );.  pnErr = &
26890 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
268a0 20 61 73 73 65 72 74 28 20 28 70 6e 45 72 72 2d   assert( (pnErr-
268b0 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
268c0 29 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  )!=0 );.  assert
268d0 28 20 28 70 6e 45 72 72 2d 3e 66 6c 61 67 73 20  ( (pnErr->flags 
268e0 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42  & (MEM_Str|MEM_B
268f0 6c 6f 62 29 29 3d 3d 30 20 29 3b 0a 20 20 70 49  lob))==0 );.  pI
26900 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
26910 70 31 5d 3b 0a 20 20 66 6f 72 28 6a 3d 30 3b 20  p1];.  for(j=0; 
26920 6a 3c 6e 52 6f 6f 74 3b 20 6a 2b 2b 29 7b 0a 20  j<nRoot; j++){. 
26930 20 20 20 61 52 6f 6f 74 5b 6a 5d 20 3d 20 28 69     aRoot[j] = (i
26940 6e 74 29 73 71 6c 69 74 65 33 56 64 62 65 49 6e  nt)sqlite3VdbeIn
26950 74 56 61 6c 75 65 28 26 70 49 6e 31 5b 6a 5d 29  tValue(&pIn1[j])
26960 3b 0a 20 20 7d 0a 20 20 61 52 6f 6f 74 5b 6a 5d  ;.  }.  aRoot[j]
26970 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20   = 0;.  assert( 
26980 70 4f 70 2d 3e 70 35 3c 64 62 2d 3e 6e 44 62 20  pOp->p5<db->nDb 
26990 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d  );.  assert( (p-
269a0 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28 31 3c  >btreeMask & (1<
269b0 3c 70 4f 70 2d 3e 70 35 29 29 21 3d 30 20 29 3b  <pOp->p5))!=0 );
269c0 0a 20 20 7a 20 3d 20 73 71 6c 69 74 65 33 42 74  .  z = sqlite3Bt
269d0 72 65 65 49 6e 74 65 67 72 69 74 79 43 68 65 63  reeIntegrityChec
269e0 6b 28 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70  k(db->aDb[pOp->p
269f0 35 5d 2e 70 42 74 2c 20 61 52 6f 6f 74 2c 20 6e  5].pBt, aRoot, n
26a00 52 6f 6f 74 2c 0a 20 20 20 20 20 20 20 20 20 20  Root,.          
26a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26a20 20 20 20 20 20 20 20 28 69 6e 74 29 70 6e 45 72         (int)pnEr
26a30 72 2d 3e 75 2e 69 2c 20 26 6e 45 72 72 29 3b 0a  r->u.i, &nErr);.
26a40 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28    sqlite3DbFree(
26a50 64 62 2c 20 61 52 6f 6f 74 29 3b 0a 20 20 70 6e  db, aRoot);.  pn
26a60 45 72 72 2d 3e 75 2e 69 20 2d 3d 20 6e 45 72 72  Err->u.i -= nErr
26a70 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
26a80 65 6d 53 65 74 4e 75 6c 6c 28 70 49 6e 31 29 3b  emSetNull(pIn1);
26a90 0a 20 20 69 66 28 20 6e 45 72 72 3d 3d 30 20 29  .  if( nErr==0 )
26aa0 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 7a 3d  {.    assert( z=
26ab0 3d 30 20 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66  =0 );.  }else if
26ac0 28 20 7a 3d 3d 30 20 29 7b 0a 20 20 20 20 67 6f  ( z==0 ){.    go
26ad0 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 65 6c  to no_mem;.  }el
26ae0 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  se{.    sqlite3V
26af0 64 62 65 4d 65 6d 53 65 74 53 74 72 28 70 49 6e  dbeMemSetStr(pIn
26b00 31 2c 20 7a 2c 20 2d 31 2c 20 53 51 4c 49 54 45  1, z, -1, SQLITE
26b10 5f 55 54 46 38 2c 20 73 71 6c 69 74 65 33 5f 66  _UTF8, sqlite3_f
26b20 72 65 65 29 3b 0a 20 20 7d 0a 20 20 55 50 44 41  ree);.  }.  UPDA
26b30 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
26b40 70 49 6e 31 29 3b 0a 20 20 73 71 6c 69 74 65 33  pIn1);.  sqlite3
26b50 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69  VdbeChangeEncodi
26b60 6e 67 28 70 49 6e 31 2c 20 65 6e 63 6f 64 69 6e  ng(pIn1, encodin
26b70 67 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23  g);.  break;.}.#
26b80 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
26b90 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54 59 5f 43  OMIT_INTEGRITY_C
26ba0 48 45 43 4b 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f  HECK */../* Opco
26bb0 64 65 3a 20 52 6f 77 53 65 74 41 64 64 20 50 31  de: RowSetAdd P1
26bc0 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
26bd0 49 6e 73 65 72 74 20 74 68 65 20 69 6e 74 65 67  Insert the integ
26be0 65 72 20 76 61 6c 75 65 20 68 65 6c 64 20 62 79  er value held by
26bf0 20 72 65 67 69 73 74 65 72 20 50 32 20 69 6e 74   register P2 int
26c00 6f 20 61 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65  o a boolean inde
26c10 78 0a 2a 2a 20 68 65 6c 64 20 69 6e 20 72 65 67  x.** held in reg
26c20 69 73 74 65 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20  ister P1..**.** 
26c30 41 6e 20 61 73 73 65 72 74 69 6f 6e 20 66 61 69  An assertion fai
26c40 6c 73 20 69 66 20 50 32 20 69 73 20 6e 6f 74 20  ls if P2 is not 
26c50 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2f 0a 63  an integer..*/.c
26c60 61 73 65 20 4f 50 5f 52 6f 77 53 65 74 41 64 64  ase OP_RowSetAdd
26c70 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20 69 6e 31  : {       /* in1
26c80 2c 20 69 6e 32 20 2a 2f 0a 20 20 70 49 6e 31 20  , in2 */.  pIn1 
26c90 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
26ca0 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d  ;.  pIn2 = &aMem
26cb0 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73  [pOp->p2];.  ass
26cc0 65 72 74 28 20 28 70 49 6e 32 2d 3e 66 6c 61 67  ert( (pIn2->flag
26cd0 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20  s & MEM_Int)!=0 
26ce0 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  );.  if( (pIn1->
26cf0 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53  flags & MEM_RowS
26d00 65 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71  et)==0 ){.    sq
26d10 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 52  lite3VdbeMemSetR
26d20 6f 77 53 65 74 28 70 49 6e 31 29 3b 0a 20 20 20  owSet(pIn1);.   
26d30 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67   if( (pIn1->flag
26d40 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d  s & MEM_RowSet)=
26d50 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  =0 ) goto no_mem
26d60 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 52  ;.  }.  sqlite3R
26d70 6f 77 53 65 74 49 6e 73 65 72 74 28 70 49 6e 31  owSetInsert(pIn1
26d80 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20 70 49 6e  ->u.pRowSet, pIn
26d90 32 2d 3e 75 2e 69 29 3b 0a 20 20 62 72 65 61 6b  2->u.i);.  break
26da0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
26db0 52 6f 77 53 65 74 52 65 61 64 20 50 31 20 50 32  RowSetRead P1 P2
26dc0 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 45 78   P3 * *.**.** Ex
26dd0 74 72 61 63 74 20 74 68 65 20 73 6d 61 6c 6c 65  tract the smalle
26de0 73 74 20 76 61 6c 75 65 20 66 72 6f 6d 20 62 6f  st value from bo
26df0 6f 6c 65 61 6e 20 69 6e 64 65 78 20 50 31 20 61  olean index P1 a
26e00 6e 64 20 70 75 74 20 74 68 61 74 20 76 61 6c 75  nd put that valu
26e10 65 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74  e into.** regist
26e20 65 72 20 50 33 2e 20 20 4f 72 2c 20 69 66 20 62  er P3.  Or, if b
26e30 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 20 50 31 20  oolean index P1 
26e40 69 73 20 69 6e 69 74 69 61 6c 6c 79 20 65 6d 70  is initially emp
26e50 74 79 2c 20 6c 65 61 76 65 20 50 33 0a 2a 2a 20  ty, leave P3.** 
26e60 75 6e 63 68 61 6e 67 65 64 20 61 6e 64 20 6a 75  unchanged and ju
26e70 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f  mp to instructio
26e80 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  n P2..*/.case OP
26e90 5f 52 6f 77 53 65 74 52 65 61 64 3a 20 7b 20 20  _RowSetRead: {  
26ea0 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
26eb0 31 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69 36 34  1, out3 */.  i64
26ec0 20 76 61 6c 3b 0a 20 20 43 48 45 43 4b 5f 46 4f   val;.  CHECK_FO
26ed0 52 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20 70  R_INTERRUPT;.  p
26ee0 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
26ef0 3e 70 31 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e  >p1];.  if( (pIn
26f00 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52  1->flags & MEM_R
26f10 6f 77 53 65 74 29 3d 3d 30 20 0a 20 20 20 7c 7c  owSet)==0 .   ||
26f20 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 4e 65   sqlite3RowSetNe
26f30 78 74 28 70 49 6e 31 2d 3e 75 2e 70 52 6f 77 53  xt(pIn1->u.pRowS
26f40 65 74 2c 20 26 76 61 6c 29 3d 3d 30 0a 20 20 29  et, &val)==0.  )
26f50 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20 62 6f 6f  {.    /* The boo
26f60 6c 65 61 6e 20 69 6e 64 65 78 20 69 73 20 65 6d  lean index is em
26f70 70 74 79 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74  pty */.    sqlit
26f80 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c  e3VdbeMemSetNull
26f90 28 70 49 6e 31 29 3b 0a 20 20 20 20 70 63 20 3d  (pIn1);.    pc =
26fa0 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
26fb0 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 41 20  }else{.    /* A 
26fc0 76 61 6c 75 65 20 77 61 73 20 70 75 6c 6c 65 64  value was pulled
26fd0 20 66 72 6f 6d 20 74 68 65 20 69 6e 64 65 78 20   from the index 
26fe0 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  */.    sqlite3Vd
26ff0 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 26 61  beMemSetInt64(&a
27000 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 2c 20 76 61  Mem[pOp->p3], va
27010 6c 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  l);.  }.  break;
27020 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  .}../* Opcode: R
27030 6f 77 53 65 74 54 65 73 74 20 50 31 20 50 32 20  owSetTest P1 P2 
27040 50 33 20 50 34 0a 2a 2a 0a 2a 2a 20 52 65 67 69  P3 P4.**.** Regi
27050 73 74 65 72 20 50 33 20 69 73 20 61 73 73 75 6d  ster P3 is assum
27060 65 64 20 74 6f 20 68 6f 6c 64 20 61 20 36 34 2d  ed to hold a 64-
27070 62 69 74 20 69 6e 74 65 67 65 72 20 76 61 6c 75  bit integer valu
27080 65 2e 20 49 66 20 72 65 67 69 73 74 65 72 20 50  e. If register P
27090 31 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 61 20  1.** contains a 
270a0 52 6f 77 53 65 74 20 6f 62 6a 65 63 74 20 61 6e  RowSet object an
270b0 64 20 74 68 61 74 20 52 6f 77 53 65 74 20 6f 62  d that RowSet ob
270c0 6a 65 63 74 20 63 6f 6e 74 61 69 6e 73 0a 2a 2a  ject contains.**
270d0 20 74 68 65 20 76 61 6c 75 65 20 68 65 6c 64 20   the value held 
270e0 69 6e 20 50 33 2c 20 6a 75 6d 70 20 74 6f 20 72  in P3, jump to r
270f0 65 67 69 73 74 65 72 20 50 32 2e 20 4f 74 68 65  egister P2. Othe
27100 72 77 69 73 65 2c 20 69 6e 73 65 72 74 20 74 68  rwise, insert th
27110 65 0a 2a 2a 20 69 6e 74 65 67 65 72 20 69 6e 20  e.** integer in 
27120 50 33 20 69 6e 74 6f 20 74 68 65 20 52 6f 77 53  P3 into the RowS
27130 65 74 20 61 6e 64 20 63 6f 6e 74 69 6e 75 65 20  et and continue 
27140 6f 6e 20 74 6f 20 74 68 65 0a 2a 2a 20 6e 65 78  on to the.** nex
27150 74 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20  t opcode..**.** 
27160 54 68 65 20 52 6f 77 53 65 74 20 6f 62 6a 65 63  The RowSet objec
27170 74 20 69 73 20 6f 70 74 69 6d 69 7a 65 64 20 66  t is optimized f
27180 6f 72 20 74 68 65 20 63 61 73 65 20 77 68 65 72  or the case wher
27190 65 20 73 75 63 63 65 73 73 69 76 65 20 73 65 74  e successive set
271a0 73 0a 2a 2a 20 6f 66 20 69 6e 74 65 67 65 72 73  s.** of integers
271b0 2c 20 77 68 65 72 65 20 65 61 63 68 20 73 65 74  , where each set
271c0 20 63 6f 6e 74 61 69 6e 73 20 6e 6f 20 64 75 70   contains no dup
271d0 6c 69 63 61 74 65 73 2e 20 45 61 63 68 20 73 65  licates. Each se
271e0 74 0a 2a 2a 20 6f 66 20 76 61 6c 75 65 73 20 69  t.** of values i
271f0 73 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20  s identified by 
27200 61 20 75 6e 69 71 75 65 20 50 34 20 76 61 6c 75  a unique P4 valu
27210 65 2e 20 54 68 65 20 66 69 72 73 74 20 73 65 74  e. The first set
27220 0a 2a 2a 20 6d 75 73 74 20 68 61 76 65 20 50 34  .** must have P4
27230 3d 3d 30 2c 20 74 68 65 20 66 69 6e 61 6c 20 73  ==0, the final s
27240 65 74 20 50 34 3d 2d 31 2e 20 20 50 34 20 6d 75  et P4=-1.  P4 mu
27250 73 74 20 62 65 20 65 69 74 68 65 72 20 2d 31 20  st be either -1 
27260 6f 72 0a 2a 2a 20 6e 6f 6e 2d 6e 65 67 61 74 69  or.** non-negati
27270 76 65 2e 20 20 46 6f 72 20 6e 6f 6e 2d 6e 65 67  ve.  For non-neg
27280 61 74 69 76 65 20 76 61 6c 75 65 73 20 6f 66 20  ative values of 
27290 50 34 20 6f 6e 6c 79 20 74 68 65 20 6c 6f 77 65  P4 only the lowe
272a0 72 20 34 0a 2a 2a 20 62 69 74 73 20 61 72 65 20  r 4.** bits are 
272b0 73 69 67 6e 69 66 69 63 61 6e 74 2e 0a 2a 2a 0a  significant..**.
272c0 2a 2a 20 54 68 69 73 20 61 6c 6c 6f 77 73 20 6f  ** This allows o
272d0 70 74 69 6d 69 7a 61 74 69 6f 6e 73 3a 20 28 61  ptimizations: (a
272e0 29 20 77 68 65 6e 20 50 34 3d 3d 30 20 74 68 65  ) when P4==0 the
272f0 72 65 20 69 73 20 6e 6f 20 6e 65 65 64 20 74 6f  re is no need to
27300 20 74 65 73 74 0a 2a 2a 20 74 68 65 20 72 6f 77   test.** the row
27310 73 65 74 20 6f 62 6a 65 63 74 20 66 6f 72 20 50  set object for P
27320 33 2c 20 61 73 20 69 74 20 69 73 20 67 75 61 72  3, as it is guar
27330 61 6e 74 65 65 64 20 6e 6f 74 20 74 6f 20 63 6f  anteed not to co
27340 6e 74 61 69 6e 20 69 74 2c 0a 2a 2a 20 28 62 29  ntain it,.** (b)
27350 20 77 68 65 6e 20 50 34 3d 3d 2d 31 20 74 68 65   when P4==-1 the
27360 72 65 20 69 73 20 6e 6f 20 6e 65 65 64 20 74 6f  re is no need to
27370 20 69 6e 73 65 72 74 20 74 68 65 20 76 61 6c 75   insert the valu
27380 65 2c 20 61 73 20 69 74 20 77 69 6c 6c 0a 2a 2a  e, as it will.**
27390 20 6e 65 76 65 72 20 62 65 20 74 65 73 74 65 64   never be tested
273a0 20 66 6f 72 2c 20 61 6e 64 20 28 63 29 20 77 68   for, and (c) wh
273b0 65 6e 20 61 20 76 61 6c 75 65 20 74 68 61 74 20  en a value that 
273c0 69 73 20 70 61 72 74 20 6f 66 20 73 65 74 20 58  is part of set X
273d0 20 69 73 0a 2a 2a 20 69 6e 73 65 72 74 65 64 2c   is.** inserted,
273e0 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6e 65 65   there is no nee
273f0 64 20 74 6f 20 73 65 61 72 63 68 20 74 6f 20 73  d to search to s
27400 65 65 20 69 66 20 74 68 65 20 73 61 6d 65 20 76  ee if the same v
27410 61 6c 75 65 20 77 61 73 0a 2a 2a 20 70 72 65 76  alue was.** prev
27420 69 6f 75 73 6c 79 20 69 6e 73 65 72 74 65 64 20  iously inserted 
27430 61 73 20 70 61 72 74 20 6f 66 20 73 65 74 20 58  as part of set X
27440 20 28 6f 6e 6c 79 20 69 66 20 69 74 20 77 61 73   (only if it was
27450 20 70 72 65 76 69 6f 75 73 6c 79 0a 2a 2a 20 69   previously.** i
27460 6e 73 65 72 74 65 64 20 61 73 20 70 61 72 74 20  nserted as part 
27470 6f 66 20 73 6f 6d 65 20 6f 74 68 65 72 20 73 65  of some other se
27480 74 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  t)..*/.case OP_R
27490 6f 77 53 65 74 54 65 73 74 3a 20 7b 20 20 20 20  owSetTest: {    
274a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
274b0 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69   /* jump, in1, i
274c0 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 69 53 65 74  n3 */.  int iSet
274d0 3b 0a 20 20 69 6e 74 20 65 78 69 73 74 73 3b 0a  ;.  int exists;.
274e0 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
274f0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 33  pOp->p1];.  pIn3
27500 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
27510 5d 3b 0a 20 20 69 53 65 74 20 3d 20 70 4f 70 2d  ];.  iSet = pOp-
27520 3e 70 34 2e 69 3b 0a 20 20 61 73 73 65 72 74 28  >p4.i;.  assert(
27530 20 70 49 6e 33 2d 3e 66 6c 61 67 73 26 4d 45 4d   pIn3->flags&MEM
27540 5f 49 6e 74 20 29 3b 0a 0a 20 20 2f 2a 20 49 66  _Int );..  /* If
27550 20 74 68 65 72 65 20 69 73 20 61 6e 79 74 68 69   there is anythi
27560 6e 67 20 6f 74 68 65 72 20 74 68 61 6e 20 61 20  ng other than a 
27570 72 6f 77 73 65 74 20 6f 62 6a 65 63 74 20 69 6e  rowset object in
27580 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 50 31 2c   memory cell P1,
27590 0a 20 20 2a 2a 20 64 65 6c 65 74 65 20 69 74 20  .  ** delete it 
275a0 6e 6f 77 20 61 6e 64 20 69 6e 69 74 69 61 6c 69  now and initiali
275b0 7a 65 20 50 31 20 77 69 74 68 20 61 6e 20 65 6d  ze P1 with an em
275c0 70 74 79 20 72 6f 77 73 65 74 0a 20 20 2a 2f 0a  pty rowset.  */.
275d0 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
275e0 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29  gs & MEM_RowSet)
275f0 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  ==0 ){.    sqlit
27600 65 33 56 64 62 65 4d 65 6d 53 65 74 52 6f 77 53  e3VdbeMemSetRowS
27610 65 74 28 70 49 6e 31 29 3b 0a 20 20 20 20 69 66  et(pIn1);.    if
27620 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
27630 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20   MEM_RowSet)==0 
27640 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
27650 20 7d 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f   }..  assert( pO
27660 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e  p->p4type==P4_IN
27670 54 33 32 20 29 3b 0a 20 20 61 73 73 65 72 74 28  T32 );.  assert(
27680 20 69 53 65 74 3d 3d 2d 31 20 7c 7c 20 69 53 65   iSet==-1 || iSe
27690 74 3e 3d 30 20 29 3b 0a 20 20 69 66 28 20 69 53  t>=0 );.  if( iS
276a0 65 74 20 29 7b 0a 20 20 20 20 65 78 69 73 74 73  et ){.    exists
276b0 20 3d 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74   = sqlite3RowSet
276c0 54 65 73 74 28 70 49 6e 31 2d 3e 75 2e 70 52 6f  Test(pIn1->u.pRo
276d0 77 53 65 74 2c 20 0a 20 20 20 20 20 20 20 20 20  wSet, .         
276e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
276f0 20 20 20 20 20 20 28 75 38 29 28 69 53 65 74 3e        (u8)(iSet>
27700 3d 30 20 3f 20 69 53 65 74 20 26 20 30 78 66 20  =0 ? iSet & 0xf 
27710 3a 20 30 78 66 66 29 2c 0a 20 20 20 20 20 20 20  : 0xff),.       
27720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27730 20 20 20 20 20 20 20 20 70 49 6e 33 2d 3e 75 2e          pIn3->u.
27740 69 29 3b 0a 20 20 20 20 69 66 28 20 65 78 69 73  i);.    if( exis
27750 74 73 20 29 7b 0a 20 20 20 20 20 20 70 63 20 3d  ts ){.      pc =
27760 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
27770 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d      break;.    }
27780 0a 20 20 7d 0a 20 20 69 66 28 20 69 53 65 74 3e  .  }.  if( iSet>
27790 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  =0 ){.    sqlite
277a0 33 52 6f 77 53 65 74 49 6e 73 65 72 74 28 70 49  3RowSetInsert(pI
277b0 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20 70  n1->u.pRowSet, p
277c0 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20 20 7d 0a 20  In3->u.i);.  }. 
277d0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e   break;.}...#ifn
277e0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
277f0 54 52 49 47 47 45 52 0a 0a 2f 2a 20 4f 70 63 6f  TRIGGER../* Opco
27800 64 65 3a 20 50 72 6f 67 72 61 6d 20 50 31 20 50  de: Program P1 P
27810 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20  2 P3 P4 *.**.** 
27820 45 78 65 63 75 74 65 20 74 68 65 20 74 72 69 67  Execute the trig
27830 67 65 72 20 70 72 6f 67 72 61 6d 20 70 61 73 73  ger program pass
27840 65 64 20 61 73 20 50 34 20 28 74 79 70 65 20 50  ed as P4 (type P
27850 34 5f 53 55 42 50 52 4f 47 52 41 4d 29 2e 20 0a  4_SUBPROGRAM). .
27860 2a 2a 0a 2a 2a 20 50 31 20 63 6f 6e 74 61 69 6e  **.** P1 contain
27870 73 20 74 68 65 20 61 64 64 72 65 73 73 20 6f 66  s the address of
27880 20 74 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c   the memory cell
27890 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74   that contains t
278a0 68 65 20 66 69 72 73 74 20 6d 65 6d 6f 72 79 20  he first memory 
278b0 0a 2a 2a 20 63 65 6c 6c 20 69 6e 20 61 6e 20 61  .** cell in an a
278c0 72 72 61 79 20 6f 66 20 76 61 6c 75 65 73 20 75  rray of values u
278d0 73 65 64 20 61 73 20 61 72 67 75 6d 65 6e 74 73  sed as arguments
278e0 20 74 6f 20 74 68 65 20 73 75 62 2d 70 72 6f 67   to the sub-prog
278f0 72 61 6d 2e 20 50 32 20 0a 2a 2a 20 63 6f 6e 74  ram. P2 .** cont
27900 61 69 6e 73 20 74 68 65 20 61 64 64 72 65 73 73  ains the address
27910 20 74 6f 20 6a 75 6d 70 20 74 6f 20 69 66 20 74   to jump to if t
27920 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 74  he sub-program t
27930 68 72 6f 77 73 20 61 6e 20 49 47 4e 4f 52 45 20  hrows an IGNORE 
27940 0a 2a 2a 20 65 78 63 65 70 74 69 6f 6e 20 75 73  .** exception us
27950 69 6e 67 20 74 68 65 20 52 41 49 53 45 28 29 20  ing the RAISE() 
27960 66 75 6e 63 74 69 6f 6e 2e 20 52 65 67 69 73 74  function. Regist
27970 65 72 20 50 33 20 63 6f 6e 74 61 69 6e 73 20 74  er P3 contains t
27980 68 65 20 61 64 64 72 65 73 73 20 0a 2a 2a 20 6f  he address .** o
27990 66 20 61 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20  f a memory cell 
279a0 69 6e 20 74 68 69 73 20 28 74 68 65 20 70 61 72  in this (the par
279b0 65 6e 74 29 20 56 4d 20 74 68 61 74 20 69 73 20  ent) VM that is 
279c0 75 73 65 64 20 74 6f 20 61 6c 6c 6f 63 61 74 65  used to allocate
279d0 20 74 68 65 20 0a 2a 2a 20 6d 65 6d 6f 72 79 20   the .** memory 
279e0 72 65 71 75 69 72 65 64 20 62 79 20 74 68 65 20  required by the 
279f0 73 75 62 2d 76 64 62 65 20 61 74 20 72 75 6e 74  sub-vdbe at runt
27a00 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73  ime..**.** P4 is
27a10 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68   a pointer to th
27a20 65 20 56 4d 20 63 6f 6e 74 61 69 6e 69 6e 67 20  e VM containing 
27a30 74 68 65 20 74 72 69 67 67 65 72 20 70 72 6f 67  the trigger prog
27a40 72 61 6d 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ram..*/.case OP_
27a50 50 72 6f 67 72 61 6d 3a 20 7b 20 20 20 20 20 20  Program: {      
27a60 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69    /* jump */.  i
27a70 6e 74 20 6e 4d 65 6d 3b 20 20 20 20 20 20 20 20  nt nMem;        
27a80 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
27a90 20 6f 66 20 6d 65 6d 6f 72 79 20 72 65 67 69 73   of memory regis
27aa0 74 65 72 73 20 66 6f 72 20 73 75 62 2d 70 72 6f  ters for sub-pro
27ab0 67 72 61 6d 20 2a 2f 0a 20 20 69 6e 74 20 6e 42  gram */.  int nB
27ac0 79 74 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  yte;            
27ad0 20 20 2f 2a 20 42 79 74 65 73 20 6f 66 20 72 75    /* Bytes of ru
27ae0 6e 74 69 6d 65 20 73 70 61 63 65 20 72 65 71 75  ntime space requ
27af0 69 72 65 64 20 66 6f 72 20 73 75 62 2d 70 72 6f  ired for sub-pro
27b00 67 72 61 6d 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  gram */.  Mem *p
27b10 52 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  Rt;             
27b20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 74 6f    /* Register to
27b30 20 61 6c 6c 6f 63 61 74 65 20 72 75 6e 74 69 6d   allocate runtim
27b40 65 20 73 70 61 63 65 20 2a 2f 0a 20 20 4d 65 6d  e space */.  Mem
27b50 20 2a 70 4d 65 6d 3b 20 20 20 20 20 20 20 20 20   *pMem;         
27b60 20 20 20 20 20 2f 2a 20 55 73 65 64 20 74 6f 20       /* Used to 
27b70 69 74 65 72 61 74 65 20 74 68 72 6f 75 67 68 20  iterate through 
27b80 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 2a 2f 0a  memory cells */.
27b90 20 20 4d 65 6d 20 2a 70 45 6e 64 3b 20 20 20 20    Mem *pEnd;    
27ba0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 61 73            /* Las
27bb0 74 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69 6e  t memory cell in
27bc0 20 6e 65 77 20 61 72 72 61 79 20 2a 2f 0a 20 20   new array */.  
27bd0 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d  VdbeFrame *pFram
27be0 65 3b 20 20 20 20 20 20 2f 2a 20 4e 65 77 20 76  e;      /* New v
27bf0 64 62 65 20 66 72 61 6d 65 20 74 6f 20 65 78 65  dbe frame to exe
27c00 63 75 74 65 20 69 6e 20 2a 2f 0a 20 20 53 75 62  cute in */.  Sub
27c10 50 72 6f 67 72 61 6d 20 2a 70 50 72 6f 67 72 61  Program *pProgra
27c20 6d 3b 20 20 20 2f 2a 20 53 75 62 2d 70 72 6f 67  m;   /* Sub-prog
27c30 72 61 6d 20 74 6f 20 65 78 65 63 75 74 65 20 2a  ram to execute *
27c40 2f 0a 20 20 76 6f 69 64 20 2a 74 3b 20 20 20 20  /.  void *t;    
27c50 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
27c60 6f 6b 65 6e 20 69 64 65 6e 74 69 66 79 69 6e 67  oken identifying
27c70 20 74 72 69 67 67 65 72 20 2a 2f 0a 0a 20 20 70   trigger */..  p
27c80 50 72 6f 67 72 61 6d 20 3d 20 70 4f 70 2d 3e 70  Program = pOp->p
27c90 34 2e 70 50 72 6f 67 72 61 6d 3b 0a 20 20 70 52  4.pProgram;.  pR
27ca0 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
27cb0 33 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 6d 65  3];.  assert( me
27cc0 6d 49 73 56 61 6c 69 64 28 70 52 74 29 20 29 3b  mIsValid(pRt) );
27cd0 0a 20 20 61 73 73 65 72 74 28 20 70 50 72 6f 67  .  assert( pProg
27ce0 72 61 6d 2d 3e 6e 4f 70 3e 30 20 29 3b 0a 20 20  ram->nOp>0 );.  
27cf0 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 70 35 20  .  /* If the p5 
27d00 66 6c 61 67 20 69 73 20 63 6c 65 61 72 2c 20 74  flag is clear, t
27d10 68 65 6e 20 72 65 63 75 72 73 69 76 65 20 69 6e  hen recursive in
27d20 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74 72 69 67  vocation of trig
27d30 67 65 72 73 20 69 73 20 0a 20 20 2a 2a 20 64 69  gers is .  ** di
27d40 73 61 62 6c 65 64 20 66 6f 72 20 62 61 63 6b 77  sabled for backw
27d50 61 72 64 73 20 63 6f 6d 70 61 74 69 62 69 6c 69  ards compatibili
27d60 74 79 20 28 70 35 20 69 73 20 73 65 74 20 69 66  ty (p5 is set if
27d70 20 74 68 69 73 20 73 75 62 2d 70 72 6f 67 72 61   this sub-progra
27d80 6d 0a 20 20 2a 2a 20 69 73 20 72 65 61 6c 6c 79  m.  ** is really
27d90 20 61 20 74 72 69 67 67 65 72 2c 20 6e 6f 74 20   a trigger, not 
27da0 61 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 61 63  a foreign key ac
27db0 74 69 6f 6e 2c 20 61 6e 64 20 74 68 65 20 66 6c  tion, and the fl
27dc0 61 67 20 73 65 74 0a 20 20 2a 2a 20 61 6e 64 20  ag set.  ** and 
27dd0 63 6c 65 61 72 65 64 20 62 79 20 74 68 65 20 22  cleared by the "
27de0 50 52 41 47 4d 41 20 72 65 63 75 72 73 69 76 65  PRAGMA recursive
27df0 5f 74 72 69 67 67 65 72 73 22 20 63 6f 6d 6d 61  _triggers" comma
27e00 6e 64 20 69 73 20 63 6c 65 61 72 29 2e 0a 20 20  nd is clear)..  
27e10 2a 2a 20 0a 20 20 2a 2a 20 49 74 20 69 73 20 72  ** .  ** It is r
27e20 65 63 75 72 73 69 76 65 20 69 6e 76 6f 63 61 74  ecursive invocat
27e30 69 6f 6e 20 6f 66 20 74 72 69 67 67 65 72 73 2c  ion of triggers,
27e40 20 61 74 20 74 68 65 20 53 51 4c 20 6c 65 76 65   at the SQL leve
27e50 6c 2c 20 74 68 61 74 20 69 73 20 0a 20 20 2a 2a  l, that is .  **
27e60 20 64 69 73 61 62 6c 65 64 2e 20 49 6e 20 73 6f   disabled. In so
27e70 6d 65 20 63 61 73 65 73 20 61 20 73 69 6e 67 6c  me cases a singl
27e80 65 20 74 72 69 67 67 65 72 20 6d 61 79 20 67 65  e trigger may ge
27e90 6e 65 72 61 74 65 20 6d 6f 72 65 20 74 68 61 6e  nerate more than
27ea0 20 6f 6e 65 20 0a 20 20 2a 2a 20 53 75 62 50 72   one .  ** SubPr
27eb0 6f 67 72 61 6d 20 28 69 66 20 74 68 65 20 74 72  ogram (if the tr
27ec0 69 67 67 65 72 20 6d 61 79 20 62 65 20 65 78 65  igger may be exe
27ed0 63 75 74 65 64 20 77 69 74 68 20 6d 6f 72 65 20  cuted with more 
27ee0 74 68 61 6e 20 6f 6e 65 20 64 69 66 66 65 72 65  than one differe
27ef0 6e 74 20 0a 20 20 2a 2a 20 4f 4e 20 43 4f 4e 46  nt .  ** ON CONF
27f00 4c 49 43 54 20 61 6c 67 6f 72 69 74 68 6d 29 2e  LICT algorithm).
27f10 20 53 75 62 50 72 6f 67 72 61 6d 20 73 74 72 75   SubProgram stru
27f20 63 74 75 72 65 73 20 61 73 73 6f 63 69 61 74 65  ctures associate
27f30 64 20 77 69 74 68 20 61 0a 20 20 2a 2a 20 73 69  d with a.  ** si
27f40 6e 67 6c 65 20 74 72 69 67 67 65 72 20 61 6c 6c  ngle trigger all
27f50 20 68 61 76 65 20 74 68 65 20 73 61 6d 65 20 76   have the same v
27f60 61 6c 75 65 20 66 6f 72 20 74 68 65 20 53 75 62  alue for the Sub
27f70 50 72 6f 67 72 61 6d 2e 74 6f 6b 65 6e 20 0a 20  Program.token . 
27f80 20 2a 2a 20 76 61 72 69 61 62 6c 65 2e 20 20 2a   ** variable.  *
27f90 2f 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20  /.  if( pOp->p5 
27fa0 29 7b 0a 20 20 20 20 74 20 3d 20 70 50 72 6f 67  ){.    t = pProg
27fb0 72 61 6d 2d 3e 74 6f 6b 65 6e 3b 0a 20 20 20 20  ram->token;.    
27fc0 66 6f 72 28 70 46 72 61 6d 65 3d 70 2d 3e 70 46  for(pFrame=p->pF
27fd0 72 61 6d 65 3b 20 70 46 72 61 6d 65 20 26 26 20  rame; pFrame && 
27fe0 70 46 72 61 6d 65 2d 3e 74 6f 6b 65 6e 21 3d 74  pFrame->token!=t
27ff0 3b 20 70 46 72 61 6d 65 3d 70 46 72 61 6d 65 2d  ; pFrame=pFrame-
28000 3e 70 50 61 72 65 6e 74 29 3b 0a 20 20 20 20 69  >pParent);.    i
28010 66 28 20 70 46 72 61 6d 65 20 29 20 62 72 65 61  f( pFrame ) brea
28020 6b 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 70 2d  k;.  }..  if( p-
28030 3e 6e 46 72 61 6d 65 3e 3d 64 62 2d 3e 61 4c 69  >nFrame>=db->aLi
28040 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54  mit[SQLITE_LIMIT
28050 5f 54 52 49 47 47 45 52 5f 44 45 50 54 48 5d 20  _TRIGGER_DEPTH] 
28060 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49  ){.    rc = SQLI
28070 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 73 71  TE_ERROR;.    sq
28080 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26  lite3SetString(&
28090 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20  p->zErrMsg, db, 
280a0 22 74 6f 6f 20 6d 61 6e 79 20 6c 65 76 65 6c 73  "too many levels
280b0 20 6f 66 20 74 72 69 67 67 65 72 20 72 65 63 75   of trigger recu
280c0 72 73 69 6f 6e 22 29 3b 0a 20 20 20 20 62 72 65  rsion");.    bre
280d0 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 52 65  ak;.  }..  /* Re
280e0 67 69 73 74 65 72 20 70 52 74 20 69 73 20 75 73  gister pRt is us
280f0 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20  ed to store the 
28100 6d 65 6d 6f 72 79 20 72 65 71 75 69 72 65 64 20  memory required 
28110 74 6f 20 73 61 76 65 20 74 68 65 20 73 74 61 74  to save the stat
28120 65 0a 20 20 2a 2a 20 6f 66 20 74 68 65 20 63 75  e.  ** of the cu
28130 72 72 65 6e 74 20 70 72 6f 67 72 61 6d 2c 20 61  rrent program, a
28140 6e 64 20 74 68 65 20 6d 65 6d 6f 72 79 20 72 65  nd the memory re
28150 71 75 69 72 65 64 20 61 74 20 72 75 6e 74 69 6d  quired at runtim
28160 65 20 74 6f 20 65 78 65 63 75 74 65 0a 20 20 2a  e to execute.  *
28170 2a 20 74 68 65 20 74 72 69 67 67 65 72 20 70 72  * the trigger pr
28180 6f 67 72 61 6d 2e 20 49 66 20 74 68 69 73 20 74  ogram. If this t
28190 72 69 67 67 65 72 20 68 61 73 20 62 65 65 6e 20  rigger has been 
281a0 66 69 72 65 64 20 62 65 66 6f 72 65 2c 20 74 68  fired before, th
281b0 65 6e 20 70 52 74 20 0a 20 20 2a 2a 20 69 73 20  en pRt .  ** is 
281c0 61 6c 72 65 61 64 79 20 61 6c 6c 6f 63 61 74 65  already allocate
281d0 64 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69 74  d. Otherwise, it
281e0 20 6d 75 73 74 20 62 65 20 69 6e 69 74 69 61 6c   must be initial
281f0 69 7a 65 64 2e 20 20 2a 2f 0a 20 20 69 66 28 20  ized.  */.  if( 
28200 28 70 52 74 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  (pRt->flags&MEM_
28210 46 72 61 6d 65 29 3d 3d 30 20 29 7b 0a 20 20 20  Frame)==0 ){.   
28220 20 2f 2a 20 53 75 62 50 72 6f 67 72 61 6d 2e 6e   /* SubProgram.n
28230 4d 65 6d 20 69 73 20 73 65 74 20 74 6f 20 74 68  Mem is set to th
28240 65 20 6e 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f  e number of memo
28250 72 79 20 63 65 6c 6c 73 20 75 73 65 64 20 62 79  ry cells used by
28260 20 74 68 65 20 0a 20 20 20 20 2a 2a 20 70 72 6f   the .    ** pro
28270 67 72 61 6d 20 73 74 6f 72 65 64 20 69 6e 20 53  gram stored in S
28280 75 62 50 72 6f 67 72 61 6d 2e 61 4f 70 2e 20 41  ubProgram.aOp. A
28290 73 20 77 65 6c 6c 20 61 73 20 74 68 65 73 65 2c  s well as these,
282a0 20 6f 6e 65 20 6d 65 6d 6f 72 79 0a 20 20 20 20   one memory.    
282b0 2a 2a 20 63 65 6c 6c 20 69 73 20 72 65 71 75 69  ** cell is requi
282c0 72 65 64 20 66 6f 72 20 65 61 63 68 20 63 75 72  red for each cur
282d0 73 6f 72 20 75 73 65 64 20 62 79 20 74 68 65 20  sor used by the 
282e0 70 72 6f 67 72 61 6d 2e 20 53 65 74 20 6c 6f 63  program. Set loc
282f0 61 6c 0a 20 20 20 20 2a 2a 20 76 61 72 69 61 62  al.    ** variab
28300 6c 65 20 6e 4d 65 6d 20 28 61 6e 64 20 6c 61 74  le nMem (and lat
28310 65 72 2c 20 56 64 62 65 46 72 61 6d 65 2e 6e 43  er, VdbeFrame.nC
28320 68 69 6c 64 4d 65 6d 29 20 74 6f 20 74 68 69 73  hildMem) to this
28330 20 76 61 6c 75 65 2e 0a 20 20 20 20 2a 2f 0a 20   value..    */. 
28340 20 20 20 6e 4d 65 6d 20 3d 20 70 50 72 6f 67 72     nMem = pProgr
28350 61 6d 2d 3e 6e 4d 65 6d 20 2b 20 70 50 72 6f 67  am->nMem + pProg
28360 72 61 6d 2d 3e 6e 43 73 72 3b 0a 20 20 20 20 6e  ram->nCsr;.    n
28370 42 79 74 65 20 3d 20 52 4f 55 4e 44 38 28 73 69  Byte = ROUND8(si
28380 7a 65 6f 66 28 56 64 62 65 46 72 61 6d 65 29 29  zeof(VdbeFrame))
28390 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2b  .              +
283a0 20 6e 4d 65 6d 20 2a 20 73 69 7a 65 6f 66 28 4d   nMem * sizeof(M
283b0 65 6d 29 0a 20 20 20 20 20 20 20 20 20 20 20 20  em).            
283c0 20 20 2b 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43    + pProgram->nC
283d0 73 72 20 2a 20 73 69 7a 65 6f 66 28 56 64 62 65  sr * sizeof(Vdbe
283e0 43 75 72 73 6f 72 20 2a 29 3b 0a 20 20 20 20 70  Cursor *);.    p
283f0 46 72 61 6d 65 20 3d 20 73 71 6c 69 74 65 33 44  Frame = sqlite3D
28400 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 64 62 2c 20  bMallocZero(db, 
28410 6e 42 79 74 65 29 3b 0a 20 20 20 20 69 66 28 20  nByte);.    if( 
28420 21 70 46 72 61 6d 65 20 29 7b 0a 20 20 20 20 20  !pFrame ){.     
28430 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
28440 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 56    }.    sqlite3V
28450 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 70 52  dbeMemRelease(pR
28460 74 29 3b 0a 20 20 20 20 70 52 74 2d 3e 66 6c 61  t);.    pRt->fla
28470 67 73 20 3d 20 4d 45 4d 5f 46 72 61 6d 65 3b 0a  gs = MEM_Frame;.
28480 20 20 20 20 70 52 74 2d 3e 75 2e 70 46 72 61 6d      pRt->u.pFram
28490 65 20 3d 20 70 46 72 61 6d 65 3b 0a 0a 20 20 20  e = pFrame;..   
284a0 20 70 46 72 61 6d 65 2d 3e 76 20 3d 20 70 3b 0a   pFrame->v = p;.
284b0 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 43 68 69      pFrame->nChi
284c0 6c 64 4d 65 6d 20 3d 20 6e 4d 65 6d 3b 0a 20 20  ldMem = nMem;.  
284d0 20 20 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64    pFrame->nChild
284e0 43 73 72 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e  Csr = pProgram->
284f0 6e 43 73 72 3b 0a 20 20 20 20 70 46 72 61 6d 65  nCsr;.    pFrame
28500 2d 3e 70 63 20 3d 20 70 63 3b 0a 20 20 20 20 70  ->pc = pc;.    p
28510 46 72 61 6d 65 2d 3e 61 4d 65 6d 20 3d 20 70 2d  Frame->aMem = p-
28520 3e 61 4d 65 6d 3b 0a 20 20 20 20 70 46 72 61 6d  >aMem;.    pFram
28530 65 2d 3e 6e 4d 65 6d 20 3d 20 70 2d 3e 6e 4d 65  e->nMem = p->nMe
28540 6d 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 61  m;.    pFrame->a
28550 70 43 73 72 20 3d 20 70 2d 3e 61 70 43 73 72 3b  pCsr = p->apCsr;
28560 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 43 75  .    pFrame->nCu
28570 72 73 6f 72 20 3d 20 70 2d 3e 6e 43 75 72 73 6f  rsor = p->nCurso
28580 72 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 61  r;.    pFrame->a
28590 4f 70 20 3d 20 70 2d 3e 61 4f 70 3b 0a 20 20 20  Op = p->aOp;.   
285a0 20 70 46 72 61 6d 65 2d 3e 6e 4f 70 20 3d 20 70   pFrame->nOp = p
285b0 2d 3e 6e 4f 70 3b 0a 20 20 20 20 70 46 72 61 6d  ->nOp;.    pFram
285c0 65 2d 3e 74 6f 6b 65 6e 20 3d 20 70 50 72 6f 67  e->token = pProg
285d0 72 61 6d 2d 3e 74 6f 6b 65 6e 3b 0a 0a 20 20 20  ram->token;..   
285e0 20 70 45 6e 64 20 3d 20 26 56 64 62 65 46 72 61   pEnd = &VdbeFra
285f0 6d 65 4d 65 6d 28 70 46 72 61 6d 65 29 5b 70 46  meMem(pFrame)[pF
28600 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 5d  rame->nChildMem]
28610 3b 0a 20 20 20 20 66 6f 72 28 70 4d 65 6d 3d 56  ;.    for(pMem=V
28620 64 62 65 46 72 61 6d 65 4d 65 6d 28 70 46 72 61  dbeFrameMem(pFra
28630 6d 65 29 3b 20 70 4d 65 6d 21 3d 70 45 6e 64 3b  me); pMem!=pEnd;
28640 20 70 4d 65 6d 2b 2b 29 7b 0a 20 20 20 20 20 20   pMem++){.      
28650 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pMem->flags = ME
28660 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20 20 20 70 4d  M_Null;.      pM
28670 65 6d 2d 3e 64 62 20 3d 20 64 62 3b 0a 20 20 20  em->db = db;.   
28680 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20   }.  }else{.    
28690 70 46 72 61 6d 65 20 3d 20 70 52 74 2d 3e 75 2e  pFrame = pRt->u.
286a0 70 46 72 61 6d 65 3b 0a 20 20 20 20 61 73 73 65  pFrame;.    asse
286b0 72 74 28 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4d  rt( pProgram->nM
286c0 65 6d 2b 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73  em+pProgram->nCs
286d0 72 3d 3d 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c  r==pFrame->nChil
286e0 64 4d 65 6d 20 29 3b 0a 20 20 20 20 61 73 73 65  dMem );.    asse
286f0 72 74 28 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43  rt( pProgram->nC
28700 73 72 3d 3d 70 46 72 61 6d 65 2d 3e 6e 43 68 69  sr==pFrame->nChi
28710 6c 64 43 73 72 20 29 3b 0a 20 20 20 20 61 73 73  ldCsr );.    ass
28720 65 72 74 28 20 70 63 3d 3d 70 46 72 61 6d 65 2d  ert( pc==pFrame-
28730 3e 70 63 20 29 3b 0a 20 20 7d 0a 0a 20 20 70 2d  >pc );.  }..  p-
28740 3e 6e 46 72 61 6d 65 2b 2b 3b 0a 20 20 70 46 72  >nFrame++;.  pFr
28750 61 6d 65 2d 3e 70 50 61 72 65 6e 74 20 3d 20 70  ame->pParent = p
28760 2d 3e 70 46 72 61 6d 65 3b 0a 20 20 70 46 72 61  ->pFrame;.  pFra
28770 6d 65 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20  me->lastRowid = 
28780 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 0a 20  db->lastRowid;. 
28790 20 70 46 72 61 6d 65 2d 3e 6e 43 68 61 6e 67 65   pFrame->nChange
287a0 20 3d 20 70 2d 3e 6e 43 68 61 6e 67 65 3b 0a 20   = p->nChange;. 
287b0 20 70 2d 3e 6e 43 68 61 6e 67 65 20 3d 20 30 3b   p->nChange = 0;
287c0 0a 20 20 70 2d 3e 70 46 72 61 6d 65 20 3d 20 70  .  p->pFrame = p
287d0 46 72 61 6d 65 3b 0a 20 20 70 2d 3e 61 4d 65 6d  Frame;.  p->aMem
287e0 20 3d 20 61 4d 65 6d 20 3d 20 26 56 64 62 65 46   = aMem = &VdbeF
287f0 72 61 6d 65 4d 65 6d 28 70 46 72 61 6d 65 29 5b  rameMem(pFrame)[
28800 2d 31 5d 3b 0a 20 20 70 2d 3e 6e 4d 65 6d 20 3d  -1];.  p->nMem =
28810 20 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d   pFrame->nChildM
28820 65 6d 3b 0a 20 20 70 2d 3e 6e 43 75 72 73 6f 72  em;.  p->nCursor
28830 20 3d 20 28 75 31 36 29 70 46 72 61 6d 65 2d 3e   = (u16)pFrame->
28840 6e 43 68 69 6c 64 43 73 72 3b 0a 20 20 70 2d 3e  nChildCsr;.  p->
28850 61 70 43 73 72 20 3d 20 28 56 64 62 65 43 75 72  apCsr = (VdbeCur
28860 73 6f 72 20 2a 2a 29 26 61 4d 65 6d 5b 70 2d 3e  sor **)&aMem[p->
28870 6e 4d 65 6d 2b 31 5d 3b 0a 20 20 70 2d 3e 61 4f  nMem+1];.  p->aO
28880 70 20 3d 20 61 4f 70 20 3d 20 70 50 72 6f 67 72  p = aOp = pProgr
28890 61 6d 2d 3e 61 4f 70 3b 0a 20 20 70 2d 3e 6e 4f  am->aOp;.  p->nO
288a0 70 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f  p = pProgram->nO
288b0 70 3b 0a 20 20 70 63 20 3d 20 2d 31 3b 0a 0a 20  p;.  pc = -1;.. 
288c0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
288d0 63 6f 64 65 3a 20 50 61 72 61 6d 20 50 31 20 50  code: Param P1 P
288e0 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68  2 * * *.**.** Th
288f0 69 73 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c  is opcode is onl
28900 79 20 65 76 65 72 20 70 72 65 73 65 6e 74 20 69  y ever present i
28910 6e 20 73 75 62 2d 70 72 6f 67 72 61 6d 73 20 63  n sub-programs c
28920 61 6c 6c 65 64 20 76 69 61 20 74 68 65 20 0a 2a  alled via the .*
28930 2a 20 4f 50 5f 50 72 6f 67 72 61 6d 20 69 6e 73  * OP_Program ins
28940 74 72 75 63 74 69 6f 6e 2e 20 43 6f 70 79 20 61  truction. Copy a
28950 20 76 61 6c 75 65 20 63 75 72 72 65 6e 74 6c 79   value currently
28960 20 73 74 6f 72 65 64 20 69 6e 20 61 20 6d 65 6d   stored in a mem
28970 6f 72 79 20 0a 2a 2a 20 63 65 6c 6c 20 6f 66 20  ory .** cell of 
28980 74 68 65 20 63 61 6c 6c 69 6e 67 20 28 70 61 72  the calling (par
28990 65 6e 74 29 20 66 72 61 6d 65 20 74 6f 20 63 65  ent) frame to ce
289a0 6c 6c 20 50 32 20 69 6e 20 74 68 65 20 63 75 72  ll P2 in the cur
289b0 72 65 6e 74 20 66 72 61 6d 65 73 20 0a 2a 2a 20  rent frames .** 
289c0 61 64 64 72 65 73 73 20 73 70 61 63 65 2e 20 54  address space. T
289d0 68 69 73 20 69 73 20 75 73 65 64 20 62 79 20 74  his is used by t
289e0 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 73 20  rigger programs 
289f0 74 6f 20 61 63 63 65 73 73 20 74 68 65 20 6e 65  to access the ne
28a00 77 2e 2a 20 0a 2a 2a 20 61 6e 64 20 6f 6c 64 2e  w.* .** and old.
28a10 2a 20 76 61 6c 75 65 73 2e 0a 2a 2a 0a 2a 2a 20  * values..**.** 
28a20 54 68 65 20 61 64 64 72 65 73 73 20 6f 66 20 74  The address of t
28a30 68 65 20 63 65 6c 6c 20 69 6e 20 74 68 65 20 70  he cell in the p
28a40 61 72 65 6e 74 20 66 72 61 6d 65 20 69 73 20 64  arent frame is d
28a50 65 74 65 72 6d 69 6e 65 64 20 62 79 20 61 64 64  etermined by add
28a60 69 6e 67 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65  ing.** the value
28a70 20 6f 66 20 74 68 65 20 50 31 20 61 72 67 75 6d   of the P1 argum
28a80 65 6e 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65  ent to the value
28a90 20 6f 66 20 74 68 65 20 50 31 20 61 72 67 75 6d   of the P1 argum
28aa0 65 6e 74 20 74 6f 20 74 68 65 0a 2a 2a 20 63 61  ent to the.** ca
28ab0 6c 6c 69 6e 67 20 4f 50 5f 50 72 6f 67 72 61 6d  lling OP_Program
28ac0 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f   instruction..*/
28ad0 0a 63 61 73 65 20 4f 50 5f 50 61 72 61 6d 3a 20  .case OP_Param: 
28ae0 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f  {           /* o
28af0 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a  ut2-prerelease *
28b00 2f 0a 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70  /.  VdbeFrame *p
28b10 46 72 61 6d 65 3b 0a 20 20 4d 65 6d 20 2a 70 49  Frame;.  Mem *pI
28b20 6e 3b 0a 20 20 70 46 72 61 6d 65 20 3d 20 70 2d  n;.  pFrame = p-
28b30 3e 70 46 72 61 6d 65 3b 0a 20 20 70 49 6e 20 3d  >pFrame;.  pIn =
28b40 20 26 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70   &pFrame->aMem[p
28b50 4f 70 2d 3e 70 31 20 2b 20 70 46 72 61 6d 65 2d  Op->p1 + pFrame-
28b60 3e 61 4f 70 5b 70 46 72 61 6d 65 2d 3e 70 63 5d  >aOp[pFrame->pc]
28b70 2e 70 31 5d 3b 20 20 20 0a 20 20 73 71 6c 69 74  .p1];   .  sqlit
28b80 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77  e3VdbeMemShallow
28b90 43 6f 70 79 28 70 4f 75 74 2c 20 70 49 6e 2c 20  Copy(pOut, pIn, 
28ba0 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a 20 20 62 72  MEM_Ephem);.  br
28bb0 65 61 6b 3b 0a 7d 0a 0a 23 65 6e 64 69 66 20 2f  eak;.}..#endif /
28bc0 2a 20 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  * #ifndef SQLITE
28bd0 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 20 2a 2f  _OMIT_TRIGGER */
28be0 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
28bf0 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45  _OMIT_FOREIGN_KE
28c00 59 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 6b 43  Y./* Opcode: FkC
28c10 6f 75 6e 74 65 72 20 50 31 20 50 32 20 2a 20 2a  ounter P1 P2 * *
28c20 20 2a 0a 2a 2a 0a 2a 2a 20 49 6e 63 72 65 6d 65   *.**.** Increme
28c30 6e 74 20 61 20 22 63 6f 6e 73 74 72 61 69 6e 74  nt a "constraint
28c40 20 63 6f 75 6e 74 65 72 22 20 62 79 20 50 32 20   counter" by P2 
28c50 28 50 32 20 6d 61 79 20 62 65 20 6e 65 67 61 74  (P2 may be negat
28c60 69 76 65 20 6f 72 20 70 6f 73 69 74 69 76 65 29  ive or positive)
28c70 2e 0a 2a 2a 20 49 66 20 50 31 20 69 73 20 6e 6f  ..** If P1 is no
28c80 6e 2d 7a 65 72 6f 2c 20 74 68 65 20 64 61 74 61  n-zero, the data
28c90 62 61 73 65 20 63 6f 6e 73 74 72 61 69 6e 74 20  base constraint 
28ca0 63 6f 75 6e 74 65 72 20 69 73 20 69 6e 63 72 65  counter is incre
28cb0 6d 65 6e 74 65 64 20 0a 2a 2a 20 28 64 65 66 65  mented .** (defe
28cc0 72 72 65 64 20 66 6f 72 65 69 67 6e 20 6b 65 79  rred foreign key
28cd0 20 63 6f 6e 73 74 72 61 69 6e 74 73 29 2e 20 4f   constraints). O
28ce0 74 68 65 72 77 69 73 65 2c 20 69 66 20 50 31 20  therwise, if P1 
28cf0 69 73 20 7a 65 72 6f 2c 20 74 68 65 20 0a 2a 2a  is zero, the .**
28d00 20 73 74 61 74 65 6d 65 6e 74 20 63 6f 75 6e 74   statement count
28d10 65 72 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65  er is incremente
28d20 64 20 28 69 6d 6d 65 64 69 61 74 65 20 66 6f 72  d (immediate for
28d30 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61  eign key constra
28d40 69 6e 74 73 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ints)..*/.case O
28d50 50 5f 46 6b 43 6f 75 6e 74 65 72 3a 20 7b 0a 20  P_FkCounter: {. 
28d60 20 69 66 28 20 70 4f 70 2d 3e 70 31 20 29 7b 0a   if( pOp->p1 ){.
28d70 20 20 20 20 64 62 2d 3e 6e 44 65 66 65 72 72 65      db->nDeferre
28d80 64 43 6f 6e 73 20 2b 3d 20 70 4f 70 2d 3e 70 32  dCons += pOp->p2
28d90 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70  ;.  }else{.    p
28da0 2d 3e 6e 46 6b 43 6f 6e 73 74 72 61 69 6e 74 20  ->nFkConstraint 
28db0 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 7d 0a  += pOp->p2;.  }.
28dc0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
28dd0 70 63 6f 64 65 3a 20 46 6b 49 66 5a 65 72 6f 20  pcode: FkIfZero 
28de0 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
28df0 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 74 65  * This opcode te
28e00 73 74 73 20 69 66 20 61 20 66 6f 72 65 69 67 6e  sts if a foreign
28e10 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 2d   key constraint-
28e20 63 6f 75 6e 74 65 72 20 69 73 20 63 75 72 72 65  counter is curre
28e30 6e 74 6c 79 20 7a 65 72 6f 2e 0a 2a 2a 20 49 66  ntly zero..** If
28e40 20 73 6f 2c 20 6a 75 6d 70 20 74 6f 20 69 6e 73   so, jump to ins
28e50 74 72 75 63 74 69 6f 6e 20 50 32 2e 20 4f 74 68  truction P2. Oth
28e60 65 72 77 69 73 65 2c 20 66 61 6c 6c 20 74 68 72  erwise, fall thr
28e70 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74  ough to the next
28e80 20 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e   .** instruction
28e90 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 31 20 69 73  ..**.** If P1 is
28ea0 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20   non-zero, then 
28eb0 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65  the jump is take
28ec0 6e 20 69 66 20 74 68 65 20 64 61 74 61 62 61 73  n if the databas
28ed0 65 20 63 6f 6e 73 74 72 61 69 6e 74 2d 63 6f 75  e constraint-cou
28ee0 6e 74 65 72 0a 2a 2a 20 69 73 20 7a 65 72 6f 20  nter.** is zero 
28ef0 28 74 68 65 20 6f 6e 65 20 74 68 61 74 20 63 6f  (the one that co
28f00 75 6e 74 73 20 64 65 66 65 72 72 65 64 20 63 6f  unts deferred co
28f10 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69  nstraint violati
28f20 6f 6e 73 29 2e 20 49 66 20 50 31 20 69 73 0a 2a  ons). If P1 is.*
28f30 2a 20 7a 65 72 6f 2c 20 74 68 65 20 6a 75 6d 70  * zero, the jump
28f40 20 69 73 20 74 61 6b 65 6e 20 69 66 20 74 68 65   is taken if the
28f50 20 73 74 61 74 65 6d 65 6e 74 20 63 6f 6e 73 74   statement const
28f60 72 61 69 6e 74 2d 63 6f 75 6e 74 65 72 20 69 73  raint-counter is
28f70 20 7a 65 72 6f 0a 2a 2a 20 28 69 6d 6d 65 64 69   zero.** (immedi
28f80 61 74 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  ate foreign key 
28f90 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61  constraint viola
28fa0 74 69 6f 6e 73 29 2e 0a 2a 2f 0a 63 61 73 65 20  tions)..*/.case 
28fb0 4f 50 5f 46 6b 49 66 5a 65 72 6f 3a 20 7b 20 20  OP_FkIfZero: {  
28fc0 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
28fd0 2f 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 20  /.  if( pOp->p1 
28fe0 29 7b 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 6e  ){.    if( db->n
28ff0 44 65 66 65 72 72 65 64 43 6f 6e 73 3d 3d 30 20  DeferredCons==0 
29000 29 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31  ) pc = pOp->p2-1
29010 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69  ;.  }else{.    i
29020 66 28 20 70 2d 3e 6e 46 6b 43 6f 6e 73 74 72 61  f( p->nFkConstra
29030 69 6e 74 3d 3d 30 20 29 20 70 63 20 3d 20 70 4f  int==0 ) pc = pO
29040 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d 0a 20 20 62  p->p2-1;.  }.  b
29050 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  reak;.}.#endif /
29060 2a 20 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  * #ifndef SQLITE
29070 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45  _OMIT_FOREIGN_KE
29080 59 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  Y */..#ifndef SQ
29090 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e  LITE_OMIT_AUTOIN
290a0 43 52 45 4d 45 4e 54 0a 2f 2a 20 4f 70 63 6f 64  CREMENT./* Opcod
290b0 65 3a 20 4d 65 6d 4d 61 78 20 50 31 20 50 32 20  e: MemMax P1 P2 
290c0 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50 31 20 69  * * *.**.** P1 i
290d0 73 20 61 20 72 65 67 69 73 74 65 72 20 69 6e 20  s a register in 
290e0 74 68 65 20 72 6f 6f 74 20 66 72 61 6d 65 20 6f  the root frame o
290f0 66 20 74 68 69 73 20 56 4d 20 28 74 68 65 20 72  f this VM (the r
29100 6f 6f 74 20 66 72 61 6d 65 20 69 73 0a 2a 2a 20  oot frame is.** 
29110 64 69 66 66 65 72 65 6e 74 20 66 72 6f 6d 20 74  different from t
29120 68 65 20 63 75 72 72 65 6e 74 20 66 72 61 6d 65  he current frame
29130 20 69 66 20 74 68 69 73 20 69 6e 73 74 72 75 63   if this instruc
29140 74 69 6f 6e 20 69 73 20 62 65 69 6e 67 20 65 78  tion is being ex
29150 65 63 75 74 65 64 0a 2a 2a 20 77 69 74 68 69 6e  ecuted.** within
29160 20 61 20 73 75 62 2d 70 72 6f 67 72 61 6d 29 2e   a sub-program).
29170 20 53 65 74 20 74 68 65 20 76 61 6c 75 65 20 6f   Set the value o
29180 66 20 72 65 67 69 73 74 65 72 20 50 31 20 74 6f  f register P1 to
29190 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6f 66 20   the maximum of 
291a0 0a 2a 2a 20 69 74 73 20 63 75 72 72 65 6e 74 20  .** its current 
291b0 76 61 6c 75 65 20 61 6e 64 20 74 68 65 20 76 61  value and the va
291c0 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
291d0 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69  P2..**.** This i
291e0 6e 73 74 72 75 63 74 69 6f 6e 20 74 68 72 6f 77  nstruction throw
291f0 73 20 61 6e 20 65 72 72 6f 72 20 69 66 20 74 68  s an error if th
29200 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69 73  e memory cell is
29210 20 6e 6f 74 20 69 6e 69 74 69 61 6c 6c 79 0a 2a   not initially.*
29220 2a 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2f  * an integer..*/
29230 0a 63 61 73 65 20 4f 50 5f 4d 65 6d 4d 61 78 3a  .case OP_MemMax:
29240 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 32   {        /* in2
29250 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e 31 3b   */.  Mem *pIn1;
29260 0a 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46  .  VdbeFrame *pF
29270 72 61 6d 65 3b 0a 20 20 69 66 28 20 70 2d 3e 70  rame;.  if( p->p
29280 46 72 61 6d 65 20 29 7b 0a 20 20 20 20 66 6f 72  Frame ){.    for
29290 28 70 46 72 61 6d 65 3d 70 2d 3e 70 46 72 61 6d  (pFrame=p->pFram
292a0 65 3b 20 70 46 72 61 6d 65 2d 3e 70 50 61 72 65  e; pFrame->pPare
292b0 6e 74 3b 20 70 46 72 61 6d 65 3d 70 46 72 61 6d  nt; pFrame=pFram
292c0 65 2d 3e 70 50 61 72 65 6e 74 29 3b 0a 20 20 20  e->pParent);.   
292d0 20 70 49 6e 31 20 3d 20 26 70 46 72 61 6d 65 2d   pIn1 = &pFrame-
292e0 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  >aMem[pOp->p1];.
292f0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 49 6e    }else{.    pIn
29300 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
29310 31 5d 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74  1];.  }.  assert
29320 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 49 6e  ( memIsValid(pIn
29330 31 29 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56  1) );.  sqlite3V
29340 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79  dbeMemIntegerify
29350 28 70 49 6e 31 29 3b 0a 20 20 70 49 6e 32 20 3d  (pIn1);.  pIn2 =
29360 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
29370 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
29380 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e 32  mIntegerify(pIn2
29390 29 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 75  );.  if( pIn1->u
293a0 2e 69 3c 70 49 6e 32 2d 3e 75 2e 69 29 7b 0a 20  .i<pIn2->u.i){. 
293b0 20 20 20 70 49 6e 31 2d 3e 75 2e 69 20 3d 20 70     pIn1->u.i = p
293c0 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20 7d 0a 20 20  In2->u.i;.  }.  
293d0 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20  break;.}.#endif 
293e0 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  /* SQLITE_OMIT_A
293f0 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 2a 2f 0a  UTOINCREMENT */.
29400 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 50 6f  ./* Opcode: IfPo
29410 73 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  s P1 P2 * * *.**
29420 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65  .** If the value
29430 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 31 20   of register P1 
29440 69 73 20 31 20 6f 72 20 67 72 65 61 74 65 72 2c  is 1 or greater,
29450 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a   jump to P2..**.
29460 2a 2a 20 49 74 20 69 73 20 69 6c 6c 65 67 61 6c  ** It is illegal
29470 20 74 6f 20 75 73 65 20 74 68 69 73 20 69 6e 73   to use this ins
29480 74 72 75 63 74 69 6f 6e 20 6f 6e 20 61 20 72 65  truction on a re
29490 67 69 73 74 65 72 20 74 68 61 74 20 64 6f 65 73  gister that does
294a0 0a 2a 2a 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20  .** not contain 
294b0 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 41 6e 20  an integer.  An 
294c0 61 73 73 65 72 74 69 6f 6e 20 66 61 75 6c 74 20  assertion fault 
294d0 77 69 6c 6c 20 72 65 73 75 6c 74 20 69 66 20 79  will result if y
294e0 6f 75 20 74 72 79 2e 0a 2a 2f 0a 63 61 73 65 20  ou try..*/.case 
294f0 4f 50 5f 49 66 50 6f 73 3a 20 7b 20 20 20 20 20  OP_IfPos: {     
29500 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20     /* jump, in1 
29510 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
29520 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  m[pOp->p1];.  as
29530 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67  sert( pIn1->flag
29540 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 69  s&MEM_Int );.  i
29550 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3e 30 20 29  f( pIn1->u.i>0 )
29560 7b 0a 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  {.     pc = pOp-
29570 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62  >p2 - 1;.  }.  b
29580 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
29590 64 65 3a 20 49 66 4e 65 67 20 50 31 20 50 32 20  de: IfNeg P1 P2 
295a0 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 74  * * *.**.** If t
295b0 68 65 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69  he value of regi
295c0 73 74 65 72 20 50 31 20 69 73 20 6c 65 73 73 20  ster P1 is less 
295d0 74 68 61 6e 20 7a 65 72 6f 2c 20 6a 75 6d 70 20  than zero, jump 
295e0 74 6f 20 50 32 2e 20 0a 2a 2a 0a 2a 2a 20 49 74  to P2. .**.** It
295f0 20 69 73 20 69 6c 6c 65 67 61 6c 20 74 6f 20 75   is illegal to u
29600 73 65 20 74 68 69 73 20 69 6e 73 74 72 75 63 74  se this instruct
29610 69 6f 6e 20 6f 6e 20 61 20 72 65 67 69 73 74 65  ion on a registe
29620 72 20 74 68 61 74 20 64 6f 65 73 0a 2a 2a 20 6e  r that does.** n
29630 6f 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e  ot contain an in
29640 74 65 67 65 72 2e 20 20 41 6e 20 61 73 73 65 72  teger.  An asser
29650 74 69 6f 6e 20 66 61 75 6c 74 20 77 69 6c 6c 20  tion fault will 
29660 72 65 73 75 6c 74 20 69 66 20 79 6f 75 20 74 72  result if you tr
29670 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66  y..*/.case OP_If
29680 4e 65 67 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  Neg: {        /*
29690 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20   jump, in1 */.  
296a0 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
296b0 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
296c0 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d   pIn1->flags&MEM
296d0 5f 49 6e 74 20 29 3b 0a 20 20 69 66 28 20 70 49  _Int );.  if( pI
296e0 6e 31 2d 3e 75 2e 69 3c 30 20 29 7b 0a 20 20 20  n1->u.i<0 ){.   
296f0 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
29700 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b   1;.  }.  break;
29710 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
29720 66 5a 65 72 6f 20 50 31 20 50 32 20 50 33 20 2a  fZero P1 P2 P3 *
29730 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 65 67   *.**.** The reg
29740 69 73 74 65 72 20 50 31 20 6d 75 73 74 20 63 6f  ister P1 must co
29750 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72  ntain an integer
29760 2e 20 20 41 64 64 20 6c 69 74 65 72 61 6c 20 50  .  Add literal P
29770 33 20 74 6f 20 74 68 65 0a 2a 2a 20 76 61 6c 75  3 to the.** valu
29780 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
29790 2e 20 20 49 66 20 74 68 65 20 72 65 73 75 6c 74  .  If the result
297a0 20 69 73 20 65 78 61 63 74 6c 79 20 30 2c 20 6a   is exactly 0, j
297b0 75 6d 70 20 74 6f 20 50 32 2e 20 0a 2a 2a 0a 2a  ump to P2. .**.*
297c0 2a 20 49 74 20 69 73 20 69 6c 6c 65 67 61 6c 20  * It is illegal 
297d0 74 6f 20 75 73 65 20 74 68 69 73 20 69 6e 73 74  to use this inst
297e0 72 75 63 74 69 6f 6e 20 6f 6e 20 61 20 72 65 67  ruction on a reg
297f0 69 73 74 65 72 20 74 68 61 74 20 64 6f 65 73 0a  ister that does.
29800 2a 2a 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 61  ** not contain a
29810 6e 20 69 6e 74 65 67 65 72 2e 20 20 41 6e 20 61  n integer.  An a
29820 73 73 65 72 74 69 6f 6e 20 66 61 75 6c 74 20 77  ssertion fault w
29830 69 6c 6c 20 72 65 73 75 6c 74 20 69 66 20 79 6f  ill result if yo
29840 75 20 74 72 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f  u try..*/.case O
29850 50 5f 49 66 5a 65 72 6f 3a 20 7b 20 20 20 20 20  P_IfZero: {     
29860 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20     /* jump, in1 
29870 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
29880 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  m[pOp->p1];.  as
29890 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67  sert( pIn1->flag
298a0 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 70  s&MEM_Int );.  p
298b0 49 6e 31 2d 3e 75 2e 69 20 2b 3d 20 70 4f 70 2d  In1->u.i += pOp-
298c0 3e 70 33 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d  >p3;.  if( pIn1-
298d0 3e 75 2e 69 3d 3d 30 20 29 7b 0a 20 20 20 20 20  >u.i==0 ){.     
298e0 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
298f0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
29900 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 67 67  ../* Opcode: Agg
29910 53 74 65 70 20 2a 20 50 32 20 50 33 20 50 34 20  Step * P2 P3 P4 
29920 50 35 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74 65  P5.**.** Execute
29930 20 74 68 65 20 73 74 65 70 20 66 75 6e 63 74 69   the step functi
29940 6f 6e 20 66 6f 72 20 61 6e 20 61 67 67 72 65 67  on for an aggreg
29950 61 74 65 2e 20 20 54 68 65 0a 2a 2a 20 66 75 6e  ate.  The.** fun
29960 63 74 69 6f 6e 20 68 61 73 20 50 35 20 61 72 67  ction has P5 arg
29970 75 6d 65 6e 74 73 2e 20 20 20 50 34 20 69 73 20  uments.   P4 is 
29980 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65  a pointer to the
29990 20 46 75 6e 63 44 65 66 0a 2a 2a 20 73 74 72 75   FuncDef.** stru
299a0 63 74 75 72 65 20 74 68 61 74 20 73 70 65 63 69  cture that speci
299b0 66 69 65 73 20 74 68 65 20 66 75 6e 63 74 69 6f  fies the functio
299c0 6e 2e 20 20 55 73 65 20 72 65 67 69 73 74 65 72  n.  Use register
299d0 0a 2a 2a 20 50 33 20 61 73 20 74 68 65 20 61 63  .** P3 as the ac
299e0 63 75 6d 75 6c 61 74 6f 72 2e 0a 2a 2a 0a 2a 2a  cumulator..**.**
299f0 20 54 68 65 20 50 35 20 61 72 67 75 6d 65 6e 74   The P5 argument
29a00 73 20 61 72 65 20 74 61 6b 65 6e 20 66 72 6f 6d  s are taken from
29a10 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e 64   register P2 and
29a20 20 69 74 73 0a 2a 2a 20 73 75 63 63 65 73 73 6f   its.** successo
29a30 72 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41  rs..*/.case OP_A
29a40 67 67 53 74 65 70 3a 20 7b 0a 20 20 69 6e 74 20  ggStep: {.  int 
29a50 6e 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 4d 65  n;.  int i;.  Me
29a60 6d 20 2a 70 4d 65 6d 3b 0a 20 20 4d 65 6d 20 2a  m *pMem;.  Mem *
29a70 70 52 65 63 3b 0a 20 20 73 71 6c 69 74 65 33 5f  pRec;.  sqlite3_
29a80 63 6f 6e 74 65 78 74 20 63 74 78 3b 0a 20 20 73  context ctx;.  s
29a90 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61  qlite3_value **a
29aa0 70 56 61 6c 3b 0a 0a 20 20 6e 20 3d 20 70 4f 70  pVal;..  n = pOp
29ab0 2d 3e 70 35 3b 0a 20 20 61 73 73 65 72 74 28 20  ->p5;.  assert( 
29ac0 6e 3e 3d 30 20 29 3b 0a 20 20 70 52 65 63 20 3d  n>=0 );.  pRec =
29ad0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
29ae0 0a 20 20 61 70 56 61 6c 20 3d 20 70 2d 3e 61 70  .  apVal = p->ap
29af0 41 72 67 3b 0a 20 20 61 73 73 65 72 74 28 20 61  Arg;.  assert( a
29b00 70 56 61 6c 20 7c 7c 20 6e 3d 3d 30 20 29 3b 0a  pVal || n==0 );.
29b10 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b 20    for(i=0; i<n; 
29b20 69 2b 2b 2c 20 70 52 65 63 2b 2b 29 7b 0a 20 20  i++, pRec++){.  
29b30 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
29b40 61 6c 69 64 28 70 52 65 63 29 20 29 3b 0a 20 20  alid(pRec) );.  
29b50 20 20 61 70 56 61 6c 5b 69 5d 20 3d 20 70 52 65    apVal[i] = pRe
29b60 63 3b 0a 20 20 20 20 6d 65 6d 41 62 6f 75 74 54  c;.    memAboutT
29b70 6f 43 68 61 6e 67 65 28 70 2c 20 70 52 65 63 29  oChange(p, pRec)
29b80 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
29b90 65 4d 65 6d 53 74 6f 72 65 54 79 70 65 28 70 52  eMemStoreType(pR
29ba0 65 63 29 3b 0a 20 20 7d 0a 20 20 63 74 78 2e 70  ec);.  }.  ctx.p
29bb0 46 75 6e 63 20 3d 20 70 4f 70 2d 3e 70 34 2e 70  Func = pOp->p4.p
29bc0 46 75 6e 63 3b 0a 20 20 61 73 73 65 72 74 28 20  Func;.  assert( 
29bd0 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70  pOp->p3>0 && pOp
29be0 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b  ->p3<=p->nMem );
29bf0 0a 20 20 63 74 78 2e 70 4d 65 6d 20 3d 20 70 4d  .  ctx.pMem = pM
29c00 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  em = &aMem[pOp->
29c10 70 33 5d 3b 0a 20 20 70 4d 65 6d 2d 3e 6e 2b 2b  p3];.  pMem->n++
29c20 3b 0a 20 20 63 74 78 2e 73 2e 66 6c 61 67 73 20  ;.  ctx.s.flags 
29c30 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 63 74  = MEM_Null;.  ct
29c40 78 2e 73 2e 7a 20 3d 20 30 3b 0a 20 20 63 74 78  x.s.z = 0;.  ctx
29c50 2e 73 2e 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a  .s.zMalloc = 0;.
29c60 20 20 63 74 78 2e 73 2e 78 44 65 6c 20 3d 20 30    ctx.s.xDel = 0
29c70 3b 0a 20 20 63 74 78 2e 73 2e 64 62 20 3d 20 64  ;.  ctx.s.db = d
29c80 62 3b 0a 20 20 63 74 78 2e 69 73 45 72 72 6f 72  b;.  ctx.isError
29c90 20 3d 20 30 3b 0a 20 20 63 74 78 2e 70 43 6f 6c   = 0;.  ctx.pCol
29ca0 6c 20 3d 20 30 3b 0a 20 20 69 66 28 20 63 74 78  l = 0;.  if( ctx
29cb0 2e 70 46 75 6e 63 2d 3e 66 6c 61 67 73 20 26 20  .pFunc->flags & 
29cc0 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44  SQLITE_FUNC_NEED
29cd0 43 4f 4c 4c 20 29 7b 0a 20 20 20 20 61 73 73 65  COLL ){.    asse
29ce0 72 74 28 20 70 4f 70 3e 70 2d 3e 61 4f 70 20 29  rt( pOp>p->aOp )
29cf0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  ;.    assert( pO
29d00 70 5b 2d 31 5d 2e 70 34 74 79 70 65 3d 3d 50 34  p[-1].p4type==P4
29d10 5f 43 4f 4c 4c 53 45 51 20 29 3b 0a 20 20 20 20  _COLLSEQ );.    
29d20 61 73 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e  assert( pOp[-1].
29d30 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43 6f 6c 6c 53  opcode==OP_CollS
29d40 65 71 20 29 3b 0a 20 20 20 20 63 74 78 2e 70 43  eq );.    ctx.pC
29d50 6f 6c 6c 20 3d 20 70 4f 70 5b 2d 31 5d 2e 70 34  oll = pOp[-1].p4
29d60 2e 70 43 6f 6c 6c 3b 0a 20 20 7d 0a 20 20 28 63  .pColl;.  }.  (c
29d70 74 78 2e 70 46 75 6e 63 2d 3e 78 53 74 65 70 29  tx.pFunc->xStep)
29d80 28 26 63 74 78 2c 20 6e 2c 20 61 70 56 61 6c 29  (&ctx, n, apVal)
29d90 3b 20 2f 2a 20 49 4d 50 3a 20 52 2d 32 34 35 30  ; /* IMP: R-2450
29da0 35 2d 32 33 32 33 30 20 2a 2f 0a 20 20 69 66 28  5-23230 */.  if(
29db0 20 63 74 78 2e 69 73 45 72 72 6f 72 20 29 7b 0a   ctx.isError ){.
29dc0 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74      sqlite3SetSt
29dd0 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67  ring(&p->zErrMsg
29de0 2c 20 64 62 2c 20 22 25 73 22 2c 20 73 71 6c 69  , db, "%s", sqli
29df0 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 26  te3_value_text(&
29e00 63 74 78 2e 73 29 29 3b 0a 20 20 20 20 72 63 20  ctx.s));.    rc 
29e10 3d 20 63 74 78 2e 69 73 45 72 72 6f 72 3b 0a 20  = ctx.isError;. 
29e20 20 7d 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65   }.  sqlite3Vdbe
29e30 4d 65 6d 52 65 6c 65 61 73 65 28 26 63 74 78 2e  MemRelease(&ctx.
29e40 73 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  s);.  break;.}..
29e50 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 67 67 46 69  /* Opcode: AggFi
29e60 6e 61 6c 20 50 31 20 50 32 20 2a 20 50 34 20 2a  nal P1 P2 * P4 *
29e70 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20 74  .**.** Execute t
29e80 68 65 20 66 69 6e 61 6c 69 7a 65 72 20 66 75 6e  he finalizer fun
29e90 63 74 69 6f 6e 20 66 6f 72 20 61 6e 20 61 67 67  ction for an agg
29ea0 72 65 67 61 74 65 2e 20 20 50 31 20 69 73 0a 2a  regate.  P1 is.*
29eb0 2a 20 74 68 65 20 6d 65 6d 6f 72 79 20 6c 6f 63  * the memory loc
29ec0 61 74 69 6f 6e 20 74 68 61 74 20 69 73 20 74 68  ation that is th
29ed0 65 20 61 63 63 75 6d 75 6c 61 74 6f 72 20 66 6f  e accumulator fo
29ee0 72 20 74 68 65 20 61 67 67 72 65 67 61 74 65 2e  r the aggregate.
29ef0 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73 20 74 68 65  .**.** P2 is the
29f00 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   number of argum
29f10 65 6e 74 73 20 74 68 61 74 20 74 68 65 20 73 74  ents that the st
29f20 65 70 20 66 75 6e 63 74 69 6f 6e 20 74 61 6b 65  ep function take
29f30 73 20 61 6e 64 0a 2a 2a 20 50 34 20 69 73 20 61  s and.** P4 is a
29f40 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20   pointer to the 
29f50 46 75 6e 63 44 65 66 20 66 6f 72 20 74 68 69 73  FuncDef for this
29f60 20 66 75 6e 63 74 69 6f 6e 2e 20 20 54 68 65 20   function.  The 
29f70 50 32 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 69  P2.** argument i
29f80 73 20 6e 6f 74 20 75 73 65 64 20 62 79 20 74 68  s not used by th
29f90 69 73 20 6f 70 63 6f 64 65 2e 20 20 49 74 20 69  is opcode.  It i
29fa0 73 20 6f 6e 6c 79 20 74 68 65 72 65 20 74 6f 20  s only there to 
29fb0 64 69 73 61 6d 62 69 67 75 61 74 65 0a 2a 2a 20  disambiguate.** 
29fc0 66 75 6e 63 74 69 6f 6e 73 20 74 68 61 74 20 63  functions that c
29fd0 61 6e 20 74 61 6b 65 20 76 61 72 79 69 6e 67 20  an take varying 
29fe0 6e 75 6d 62 65 72 73 20 6f 66 20 61 72 67 75 6d  numbers of argum
29ff0 65 6e 74 73 2e 20 20 54 68 65 0a 2a 2a 20 50 34  ents.  The.** P4
2a000 20 61 72 67 75 6d 65 6e 74 20 69 73 20 6f 6e 6c   argument is onl
2a010 79 20 6e 65 65 64 65 64 20 66 6f 72 20 74 68 65  y needed for the
2a020 20 64 65 67 65 6e 65 72 61 74 65 20 63 61 73 65   degenerate case
2a030 20 77 68 65 72 65 0a 2a 2a 20 74 68 65 20 73 74   where.** the st
2a040 65 70 20 66 75 6e 63 74 69 6f 6e 20 77 61 73 20  ep function was 
2a050 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c 79 20 63  not previously c
2a060 61 6c 6c 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f  alled..*/.case O
2a070 50 5f 41 67 67 46 69 6e 61 6c 3a 20 7b 0a 20 20  P_AggFinal: {.  
2a080 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20 61 73 73  Mem *pMem;.  ass
2a090 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26  ert( pOp->p1>0 &
2a0a0 26 20 70 4f 70 2d 3e 70 31 3c 3d 70 2d 3e 6e 4d  & pOp->p1<=p->nM
2a0b0 65 6d 20 29 3b 0a 20 20 70 4d 65 6d 20 3d 20 26  em );.  pMem = &
2a0c0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
2a0d0 20 61 73 73 65 72 74 28 20 28 70 4d 65 6d 2d 3e   assert( (pMem->
2a0e0 66 6c 61 67 73 20 26 20 7e 28 4d 45 4d 5f 4e 75  flags & ~(MEM_Nu
2a0f0 6c 6c 7c 4d 45 4d 5f 41 67 67 29 29 3d 3d 30 20  ll|MEM_Agg))==0 
2a100 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  );.  rc = sqlite
2a110 33 56 64 62 65 4d 65 6d 46 69 6e 61 6c 69 7a 65  3VdbeMemFinalize
2a120 28 70 4d 65 6d 2c 20 70 4f 70 2d 3e 70 34 2e 70  (pMem, pOp->p4.p
2a130 46 75 6e 63 29 3b 0a 20 20 69 66 28 20 72 63 20  Func);.  if( rc 
2a140 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65  ){.    sqlite3Se
2a150 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72  tString(&p->zErr
2a160 4d 73 67 2c 20 64 62 2c 20 22 25 73 22 2c 20 73  Msg, db, "%s", s
2a170 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78  qlite3_value_tex
2a180 74 28 70 4d 65 6d 29 29 3b 0a 20 20 7d 0a 20 20  t(pMem));.  }.  
2a190 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67  sqlite3VdbeChang
2a1a0 65 45 6e 63 6f 64 69 6e 67 28 70 4d 65 6d 2c 20  eEncoding(pMem, 
2a1b0 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 55 50 44  encoding);.  UPD
2a1c0 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45  ATE_MAX_BLOBSIZE
2a1d0 28 70 4d 65 6d 29 3b 0a 20 20 69 66 28 20 73 71  (pMem);.  if( sq
2a1e0 6c 69 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42  lite3VdbeMemTooB
2a1f0 69 67 28 70 4d 65 6d 29 20 29 7b 0a 20 20 20 20  ig(pMem) ){.    
2a200 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20  goto too_big;.  
2a210 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69  }.  break;.}..#i
2a220 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2a230 54 5f 57 41 4c 0a 2f 2a 20 4f 70 63 6f 64 65 3a  T_WAL./* Opcode:
2a240 20 43 68 65 63 6b 70 6f 69 6e 74 20 50 31 20 2a   Checkpoint P1 *
2a250 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 68 65   * * *.**.** Che
2a260 63 6b 70 6f 69 6e 74 20 64 61 74 61 62 61 73 65  ckpoint database
2a270 20 50 31 2e 20 54 68 69 73 20 69 73 20 61 20 6e   P1. This is a n
2a280 6f 2d 6f 70 20 69 66 20 50 31 20 69 73 20 6e 6f  o-op if P1 is no
2a290 74 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 0a 2a  t currently in.*
2a2a0 2a 20 57 41 4c 20 6d 6f 64 65 2e 0a 2a 2f 0a 63  * WAL mode..*/.c
2a2b0 61 73 65 20 4f 50 5f 43 68 65 63 6b 70 6f 69 6e  ase OP_Checkpoin
2a2c0 74 3a 20 7b 0a 20 20 72 63 20 3d 20 73 71 6c 69  t: {.  rc = sqli
2a2d0 74 65 33 43 68 65 63 6b 70 6f 69 6e 74 28 64 62  te3Checkpoint(db
2a2e0 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 62 72  , pOp->p1);.  br
2a2f0 65 61 6b 3b 0a 7d 3b 20 20 0a 23 65 6e 64 69 66  eak;.};  .#endif
2a300 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
2a310 5f 4f 4d 49 54 5f 50 52 41 47 4d 41 0a 2f 2a 20  _OMIT_PRAGMA./* 
2a320 4f 70 63 6f 64 65 3a 20 4a 6f 75 72 6e 61 6c 4d  Opcode: JournalM
2a330 6f 64 65 20 50 31 20 50 32 20 50 33 20 2a 20 50  ode P1 P2 P3 * P
2a340 35 0a 2a 2a 0a 2a 2a 20 43 68 61 6e 67 65 20 74  5.**.** Change t
2a350 68 65 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20  he journal mode 
2a360 6f 66 20 64 61 74 61 62 61 73 65 20 50 31 20 74  of database P1 t
2a370 6f 20 50 33 2e 20 50 33 20 6d 75 73 74 20 62 65  o P3. P3 must be
2a380 20 6f 6e 65 20 6f 66 20 74 68 65 0a 2a 2a 20 50   one of the.** P
2a390 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
2a3a0 5f 58 58 58 20 76 61 6c 75 65 73 2e 20 49 66 20  _XXX values. If 
2a3b0 63 68 61 6e 67 69 6e 67 20 62 65 74 77 65 65 6e  changing between
2a3c0 20 74 68 65 20 76 61 72 69 6f 75 73 20 72 6f 6c   the various rol
2a3d0 6c 62 61 63 6b 0a 2a 2a 20 6d 6f 64 65 73 20 28  lback.** modes (
2a3e0 64 65 6c 65 74 65 2c 20 74 72 75 6e 63 61 74 65  delete, truncate
2a3f0 2c 20 70 65 72 73 69 73 74 2c 20 6f 66 66 20 61  , persist, off a
2a400 6e 64 20 6d 65 6d 6f 72 79 29 2c 20 74 68 69 73  nd memory), this
2a410 20 69 73 20 61 20 73 69 6d 70 6c 65 0a 2a 2a 20   is a simple.** 
2a420 6f 70 65 72 61 74 69 6f 6e 2e 20 4e 6f 20 49 4f  operation. No IO
2a430 20 69 73 20 72 65 71 75 69 72 65 64 2e 0a 2a 2a   is required..**
2a440 0a 2a 2a 20 49 66 20 63 68 61 6e 67 69 6e 67 20  .** If changing 
2a450 69 6e 74 6f 20 6f 72 20 6f 75 74 20 6f 66 20 57  into or out of W
2a460 41 4c 20 6d 6f 64 65 20 74 68 65 20 70 72 6f 63  AL mode the proc
2a470 65 64 75 72 65 20 69 73 20 6d 6f 72 65 20 63 6f  edure is more co
2a480 6d 70 6c 69 63 61 74 65 64 2e 0a 2a 2a 0a 2a 2a  mplicated..**.**
2a490 20 57 72 69 74 65 20 61 20 73 74 72 69 6e 67 20   Write a string 
2a4a0 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 66  containing the f
2a4b0 69 6e 61 6c 20 6a 6f 75 72 6e 61 6c 2d 6d 6f 64  inal journal-mod
2a4c0 65 20 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  e to register P2
2a4d0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4a 6f 75  ..*/.case OP_Jou
2a4e0 72 6e 61 6c 4d 6f 64 65 3a 20 7b 20 20 20 20 2f  rnalMode: {    /
2a4f0 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73  * out2-prereleas
2a500 65 20 2a 2f 0a 20 20 42 74 72 65 65 20 2a 70 42  e */.  Btree *pB
2a510 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
2a520 20 20 20 20 20 20 20 2f 2a 20 42 74 72 65 65 20         /* Btree 
2a530 74 6f 20 63 68 61 6e 67 65 20 6a 6f 75 72 6e 61  to change journa
2a540 6c 20 6d 6f 64 65 20 6f 66 20 2a 2f 0a 20 20 50  l mode of */.  P
2a550 61 67 65 72 20 2a 70 50 61 67 65 72 3b 20 20 20  ager *pPager;   
2a560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2a570 2a 20 50 61 67 65 72 20 61 73 73 6f 63 69 61 74  * Pager associat
2a580 65 64 20 77 69 74 68 20 70 42 74 20 2a 2f 0a 20  ed with pBt */. 
2a590 20 69 6e 74 20 65 4e 65 77 3b 20 20 20 20 20 20   int eNew;      
2a5a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a5b0 20 2f 2a 20 4e 65 77 20 6a 6f 75 72 6e 61 6c 20   /* New journal 
2a5c0 6d 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20 65 4f  mode */.  int eO
2a5d0 6c 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ld;             
2a5e0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
2a5f0 20 6f 6c 64 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64   old journal mod
2a600 65 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  e */.  const cha
2a610 72 20 2a 7a 46 69 6c 65 6e 61 6d 65 3b 20 20 20  r *zFilename;   
2a620 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f         /* Name o
2a630 66 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  f database file 
2a640 66 6f 72 20 70 50 61 67 65 72 20 2a 2f 0a 0a 20  for pPager */.. 
2a650 20 65 4e 65 77 20 3d 20 70 4f 70 2d 3e 70 33 3b   eNew = pOp->p3;
2a660 0a 20 20 61 73 73 65 72 74 28 20 65 4e 65 77 3d  .  assert( eNew=
2a670 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f  =PAGER_JOURNALMO
2a680 44 45 5f 44 45 4c 45 54 45 20 0a 20 20 20 20 20  DE_DELETE .     
2a690 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52    || eNew==PAGER
2a6a0 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 54 52 55  _JOURNALMODE_TRU
2a6b0 4e 43 41 54 45 20 0a 20 20 20 20 20 20 20 7c 7c  NCATE .       ||
2a6c0 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55   eNew==PAGER_JOU
2a6d0 52 4e 41 4c 4d 4f 44 45 5f 50 45 52 53 49 53 54  RNALMODE_PERSIST
2a6e0 20 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77   .       || eNew
2a6f0 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
2a700 4f 44 45 5f 4f 46 46 0a 20 20 20 20 20 20 20 7c  ODE_OFF.       |
2a710 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f  | eNew==PAGER_JO
2a720 55 52 4e 41 4c 4d 4f 44 45 5f 4d 45 4d 4f 52 59  URNALMODE_MEMORY
2a730 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d  .       || eNew=
2a740 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f  =PAGER_JOURNALMO
2a750 44 45 5f 57 41 4c 0a 20 20 20 20 20 20 20 7c 7c  DE_WAL.       ||
2a760 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55   eNew==PAGER_JOU
2a770 52 4e 41 4c 4d 4f 44 45 5f 51 55 45 52 59 0a 20  RNALMODE_QUERY. 
2a780 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
2a790 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
2a7a0 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 0a  >p1<db->nDb );..
2a7b0 20 20 2f 2a 20 54 68 69 73 20 6f 70 63 6f 64 65    /* This opcode
2a7c0 20 69 73 20 75 73 65 64 20 69 6e 20 74 77 6f 20   is used in two 
2a7d0 70 6c 61 63 65 73 3a 20 50 52 41 47 4d 41 20 6a  places: PRAGMA j
2a7e0 6f 75 72 6e 61 6c 5f 6d 6f 64 65 20 61 6e 64 20  ournal_mode and 
2a7f0 41 54 54 41 43 48 2e 0a 20 20 2a 2a 20 49 6e 20  ATTACH..  ** In 
2a800 50 52 41 47 4d 41 20 6a 6f 75 72 6e 61 6c 5f 6d  PRAGMA journal_m
2a810 6f 64 65 2c 20 74 68 65 20 73 71 6c 69 74 65 33  ode, the sqlite3
2a820 56 64 62 65 55 73 65 73 42 74 72 65 65 28 29 20  VdbeUsesBtree() 
2a830 72 6f 75 74 69 6e 65 20 69 73 20 63 61 6c 6c 65  routine is calle
2a840 64 0a 20 20 2a 2a 20 77 68 65 6e 20 74 68 65 20  d.  ** when the 
2a850 73 74 61 74 6d 65 6e 74 20 69 73 20 70 72 65 70  statment is prep
2a860 61 72 65 64 20 61 6e 64 20 73 6f 20 70 2d 3e 61  ared and so p->a
2a870 4d 75 74 65 78 2e 6e 4d 75 74 65 78 3e 30 2e 20  Mutex.nMutex>0. 
2a880 20 41 6c 6c 20 6d 75 74 65 78 65 73 0a 20 20 2a   All mutexes.  *
2a890 2a 20 61 72 65 20 61 6c 72 65 61 64 79 20 61 63  * are already ac
2a8a0 71 75 69 72 65 64 2e 20 20 42 75 74 20 77 68 65  quired.  But whe
2a8b0 6e 20 75 73 65 64 20 69 6e 20 41 54 54 41 43 48  n used in ATTACH
2a8c0 2c 20 73 71 6c 69 74 65 33 56 64 62 65 55 73 65  , sqlite3VdbeUse
2a8d0 73 42 74 72 65 65 28 29 0a 20 20 2a 2a 20 69 73  sBtree().  ** is
2a8e0 20 6e 6f 74 20 63 61 6c 6c 65 64 20 77 68 65 6e   not called when
2a8f0 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 69   the statement i
2a900 73 20 70 72 65 70 61 72 65 64 20 62 65 63 61 75  s prepared becau
2a910 73 65 20 69 74 20 72 65 71 75 69 72 65 73 20 74  se it requires t
2a920 68 65 0a 20 20 2a 2a 20 69 44 62 20 69 6e 64 65  he.  ** iDb inde
2a930 78 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  x of the databas
2a940 65 20 61 73 20 61 20 70 61 72 61 6d 65 74 65 72  e as a parameter
2a950 2c 20 61 6e 64 20 74 68 65 20 64 61 74 61 62 61  , and the databa
2a960 73 65 20 68 61 73 20 6e 6f 74 0a 20 20 2a 2a 20  se has not.  ** 
2a970 79 65 74 20 62 65 65 6e 20 61 74 74 61 63 68 65  yet been attache
2a980 64 20 73 6f 20 74 68 61 74 20 69 6e 64 65 78 20  d so that index 
2a990 69 73 20 75 6e 61 76 61 69 6c 61 62 6c 65 2e 20  is unavailable. 
2a9a0 20 57 65 20 68 61 76 65 20 74 6f 20 77 61 69 74   We have to wait
2a9b0 0a 20 20 2a 2a 20 75 6e 74 69 6c 20 72 75 6e 74  .  ** until runt
2a9c0 69 6d 65 20 28 6e 6f 77 29 20 74 6f 20 67 65 74  ime (now) to get
2a9d0 20 74 68 65 20 6d 75 74 65 78 20 6f 6e 20 74 68   the mutex on th
2a9e0 65 20 6e 65 77 6c 79 20 61 74 74 61 63 68 65 64  e newly attached
2a9f0 20 64 61 74 61 62 61 73 65 2e 0a 20 20 2a 2a 20   database..  ** 
2aa00 4e 6f 20 6f 74 68 65 72 20 6d 75 74 65 78 65 73  No other mutexes
2aa10 20 61 72 65 20 72 65 71 75 69 72 65 64 20 62 79   are required by
2aa20 20 74 68 65 20 41 54 54 41 43 48 20 63 6f 6d 6d   the ATTACH comm
2aa30 61 6e 64 20 73 6f 20 74 68 69 73 20 69 73 20 73  and so this is s
2aa40 61 66 65 0a 20 20 2a 2a 20 74 6f 20 64 6f 2e 0a  afe.  ** to do..
2aa50 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 28    */.  assert( (
2aa60 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28  p->btreeMask & (
2aa70 31 3c 3c 70 4f 70 2d 3e 70 31 29 29 21 3d 30 20  1<<pOp->p1))!=0 
2aa80 7c 7c 20 70 2d 3e 61 4d 75 74 65 78 2e 6e 4d 75  || p->aMutex.nMu
2aa90 74 65 78 3d 3d 30 20 29 3b 0a 20 20 69 66 28 20  tex==0 );.  if( 
2aaa0 70 2d 3e 61 4d 75 74 65 78 2e 6e 4d 75 74 65 78  p->aMutex.nMutex
2aab0 3d 3d 30 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68  ==0 ){.    /* Th
2aac0 69 73 20 6f 63 63 75 72 73 20 72 69 67 68 74 20  is occurs right 
2aad0 61 66 74 65 72 20 41 54 54 41 43 48 2e 20 20 47  after ATTACH.  G
2aae0 65 74 20 61 20 6d 75 74 65 78 20 6f 6e 20 74 68  et a mutex on th
2aaf0 65 20 6e 65 77 6c 79 20 41 54 54 41 43 48 65 64  e newly ATTACHed
2ab00 0a 20 20 20 20 2a 2a 20 64 61 74 61 62 61 73 65  .    ** database
2ab10 2e 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33  . */.    sqlite3
2ab20 56 64 62 65 55 73 65 73 42 74 72 65 65 28 70 2c  VdbeUsesBtree(p,
2ab30 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 20 20 73   pOp->p1);.    s
2ab40 71 6c 69 74 65 33 56 64 62 65 4d 75 74 65 78 41  qlite3VdbeMutexA
2ab50 72 72 61 79 45 6e 74 65 72 28 70 29 3b 0a 20 20  rrayEnter(p);.  
2ab60 7d 0a 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e 61  }..  pBt = db->a
2ab70 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b  Db[pOp->p1].pBt;
2ab80 0a 20 20 70 50 61 67 65 72 20 3d 20 73 71 6c 69  .  pPager = sqli
2ab90 74 65 33 42 74 72 65 65 50 61 67 65 72 28 70 42  te3BtreePager(pB
2aba0 74 29 3b 0a 20 20 65 4f 6c 64 20 3d 20 73 71 6c  t);.  eOld = sql
2abb0 69 74 65 33 50 61 67 65 72 47 65 74 4a 6f 75 72  ite3PagerGetJour
2abc0 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65 72 29 3b  nalMode(pPager);
2abd0 0a 20 20 69 66 28 20 65 4e 65 77 3d 3d 50 41 47  .  if( eNew==PAG
2abe0 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 51  ER_JOURNALMODE_Q
2abf0 55 45 52 59 20 29 20 65 4e 65 77 20 3d 20 65 4f  UERY ) eNew = eO
2ac00 6c 64 3b 0a 20 20 69 66 28 20 21 73 71 6c 69 74  ld;.  if( !sqlit
2ac10 65 33 50 61 67 65 72 4f 6b 54 6f 43 68 61 6e 67  e3PagerOkToChang
2ac20 65 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61  eJournalMode(pPa
2ac30 67 65 72 29 20 29 20 65 4e 65 77 20 3d 20 65 4f  ger) ) eNew = eO
2ac40 6c 64 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  ld;..#ifndef SQL
2ac50 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 7a  ITE_OMIT_WAL.  z
2ac60 46 69 6c 65 6e 61 6d 65 20 3d 20 73 71 6c 69 74  Filename = sqlit
2ac70 65 33 50 61 67 65 72 46 69 6c 65 6e 61 6d 65 28  e3PagerFilename(
2ac80 70 50 61 67 65 72 29 3b 0a 0a 20 20 2f 2a 20 44  pPager);..  /* D
2ac90 6f 20 6e 6f 74 20 61 6c 6c 6f 77 20 61 20 74 72  o not allow a tr
2aca0 61 6e 73 69 74 69 6f 6e 20 74 6f 20 6a 6f 75 72  ansition to jour
2acb0 6e 61 6c 5f 6d 6f 64 65 3d 57 41 4c 20 66 6f 72  nal_mode=WAL for
2acc0 20 61 20 64 61 74 61 62 61 73 65 0a 20 20 2a 2a   a database.  **
2acd0 20 69 6e 20 74 65 6d 70 6f 72 61 72 79 20 73 74   in temporary st
2ace0 6f 72 61 67 65 20 6f 72 20 69 66 20 74 68 65 20  orage or if the 
2acf0 56 46 53 20 64 6f 65 73 20 6e 6f 74 20 73 75 70  VFS does not sup
2ad00 70 6f 72 74 20 73 68 61 72 65 64 20 6d 65 6d 6f  port shared memo
2ad10 72 79 20 0a 20 20 2a 2f 0a 20 20 69 66 28 20 65  ry .  */.  if( e
2ad20 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e  New==PAGER_JOURN
2ad30 41 4c 4d 4f 44 45 5f 57 41 4c 0a 20 20 20 26 26  ALMODE_WAL.   &&
2ad40 20 28 7a 46 69 6c 65 6e 61 6d 65 5b 30 5d 3d 3d   (zFilename[0]==
2ad50 30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  0               
2ad60 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 6d            /* Tem
2ad70 70 20 66 69 6c 65 20 2a 2f 0a 20 20 20 20 20 20  p file */.      
2ad80 20 7c 7c 20 21 73 71 6c 69 74 65 33 50 61 67 65   || !sqlite3Page
2ad90 72 57 61 6c 53 75 70 70 6f 72 74 65 64 28 70 50  rWalSupported(pP
2ada0 61 67 65 72 29 29 20 20 20 2f 2a 20 4e 6f 20 73  ager))   /* No s
2adb0 68 61 72 65 64 2d 6d 65 6d 6f 72 79 20 73 75 70  hared-memory sup
2adc0 70 6f 72 74 20 2a 2f 0a 20 20 29 7b 0a 20 20 20  port */.  ){.   
2add0 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a 20 20   eNew = eOld;.  
2ade0 7d 0a 0a 20 20 69 66 28 20 28 65 4e 65 77 21 3d  }..  if( (eNew!=
2adf0 65 4f 6c 64 29 0a 20 20 20 26 26 20 28 65 4f 6c  eOld).   && (eOl
2ae00 64 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  d==PAGER_JOURNAL
2ae10 4d 4f 44 45 5f 57 41 4c 20 7c 7c 20 65 4e 65 77  MODE_WAL || eNew
2ae20 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
2ae30 4f 44 45 5f 57 41 4c 29 0a 20 20 29 7b 0a 20 20  ODE_WAL).  ){.  
2ae40 20 20 69 66 28 20 21 64 62 2d 3e 61 75 74 6f 43    if( !db->autoC
2ae50 6f 6d 6d 69 74 20 7c 7c 20 64 62 2d 3e 61 63 74  ommit || db->act
2ae60 69 76 65 56 64 62 65 43 6e 74 3e 31 20 29 7b 0a  iveVdbeCnt>1 ){.
2ae70 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
2ae80 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 20 20 73  E_ERROR;.      s
2ae90 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28  qlite3SetString(
2aea0 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c  &p->zErrMsg, db,
2aeb0 20 0a 20 20 20 20 20 20 20 20 20 20 22 63 61 6e   .          "can
2aec0 6e 6f 74 20 63 68 61 6e 67 65 20 25 73 20 77 61  not change %s wa
2aed0 6c 20 6d 6f 64 65 20 66 72 6f 6d 20 77 69 74 68  l mode from with
2aee0 69 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  in a transaction
2aef0 22 2c 0a 20 20 20 20 20 20 20 20 20 20 28 65 4e  ",.          (eN
2af00 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41  ew==PAGER_JOURNA
2af10 4c 4d 4f 44 45 5f 57 41 4c 20 3f 20 22 69 6e 74  LMODE_WAL ? "int
2af20 6f 22 20 3a 20 22 6f 75 74 20 6f 66 22 29 0a 20  o" : "out of"). 
2af30 20 20 20 20 20 29 3b 0a 20 20 20 20 20 20 62 72       );.      br
2af40 65 61 6b 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  eak;.    }else{.
2af50 20 0a 20 20 20 20 20 20 69 66 28 20 65 4f 6c 64   .      if( eOld
2af60 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
2af70 4f 44 45 5f 57 41 4c 20 29 7b 0a 20 20 20 20 20  ODE_WAL ){.     
2af80 20 20 20 2f 2a 20 49 66 20 6c 65 61 76 69 6e 67     /* If leaving
2af90 20 57 41 4c 20 6d 6f 64 65 2c 20 63 6c 6f 73 65   WAL mode, close
2afa0 20 74 68 65 20 6c 6f 67 20 66 69 6c 65 2e 20 49   the log file. I
2afb0 66 20 73 75 63 63 65 73 73 66 75 6c 2c 20 74 68  f successful, th
2afc0 65 20 63 61 6c 6c 0a 20 20 20 20 20 20 20 20 2a  e call.        *
2afd0 2a 20 74 6f 20 50 61 67 65 72 43 6c 6f 73 65 57  * to PagerCloseW
2afe0 61 6c 28 29 20 63 68 65 63 6b 70 6f 69 6e 74 73  al() checkpoints
2aff0 20 61 6e 64 20 64 65 6c 65 74 65 73 20 74 68 65   and deletes the
2b000 20 77 72 69 74 65 2d 61 68 65 61 64 2d 6c 6f 67   write-ahead-log
2b010 20 0a 20 20 20 20 20 20 20 20 2a 2a 20 66 69 6c   .        ** fil
2b020 65 2e 20 41 6e 20 45 58 43 4c 55 53 49 56 45 20  e. An EXCLUSIVE 
2b030 6c 6f 63 6b 20 6d 61 79 20 73 74 69 6c 6c 20 62  lock may still b
2b040 65 20 68 65 6c 64 20 6f 6e 20 74 68 65 20 64 61  e held on the da
2b050 74 61 62 61 73 65 20 66 69 6c 65 20 0a 20 20 20  tabase file .   
2b060 20 20 20 20 20 2a 2a 20 61 66 74 65 72 20 61 20       ** after a 
2b070 73 75 63 63 65 73 73 66 75 6c 20 72 65 74 75 72  successful retur
2b080 6e 2e 20 0a 20 20 20 20 20 20 20 20 2a 2f 0a 20  n. .        */. 
2b090 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69         rc = sqli
2b0a0 74 65 33 50 61 67 65 72 43 6c 6f 73 65 57 61 6c  te3PagerCloseWal
2b0b0 28 70 50 61 67 65 72 29 3b 0a 20 20 20 20 20 20  (pPager);.      
2b0c0 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
2b0d0 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20  _OK ){.         
2b0e0 20 73 71 6c 69 74 65 33 50 61 67 65 72 53 65 74   sqlite3PagerSet
2b0f0 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67  JournalMode(pPag
2b100 65 72 2c 20 65 4e 65 77 29 3b 0a 20 20 20 20 20  er, eNew);.     
2b110 20 20 20 7d 0a 20 20 20 20 20 20 7d 65 6c 73 65     }.      }else
2b120 20 69 66 28 20 65 4f 6c 64 3d 3d 50 41 47 45 52   if( eOld==PAGER
2b130 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4d 45 4d  _JOURNALMODE_MEM
2b140 4f 52 59 20 29 7b 0a 20 20 20 20 20 20 20 20 2f  ORY ){.        /
2b150 2a 20 43 61 6e 6e 6f 74 20 74 72 61 6e 73 69 74  * Cannot transit
2b160 69 6f 6e 20 64 69 72 65 63 74 6c 79 20 66 72 6f  ion directly fro
2b170 6d 20 4d 45 4d 4f 52 59 20 74 6f 20 57 41 4c 2e  m MEMORY to WAL.
2b180 20 20 55 73 65 20 6d 6f 64 65 20 4f 46 46 0a 20    Use mode OFF. 
2b190 20 20 20 20 20 20 20 2a 2a 20 61 73 20 61 6e 20         ** as an 
2b1a0 69 6e 74 65 72 6d 65 64 69 61 74 65 20 2a 2f 0a  intermediate */.
2b1b0 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 50          sqlite3P
2b1c0 61 67 65 72 53 65 74 4a 6f 75 72 6e 61 6c 4d 6f  agerSetJournalMo
2b1d0 64 65 28 70 50 61 67 65 72 2c 20 50 41 47 45 52  de(pPager, PAGER
2b1e0 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4f 46 46  _JOURNALMODE_OFF
2b1f0 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 0a 20 20  );.      }.  .  
2b200 20 20 20 20 2f 2a 20 4f 70 65 6e 20 61 20 74 72      /* Open a tr
2b210 61 6e 73 61 63 74 69 6f 6e 20 6f 6e 20 74 68 65  ansaction on the
2b220 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20   database file. 
2b230 52 65 67 61 72 64 6c 65 73 73 20 6f 66 20 74 68  Regardless of th
2b240 65 20 6a 6f 75 72 6e 61 6c 0a 20 20 20 20 20 20  e journal.      
2b250 2a 2a 20 6d 6f 64 65 2c 20 74 68 69 73 20 74 72  ** mode, this tr
2b260 61 6e 73 61 63 74 69 6f 6e 20 61 6c 77 61 79 73  ansaction always
2b270 20 75 73 65 73 20 61 20 72 6f 6c 6c 62 61 63 6b   uses a rollback
2b280 20 6a 6f 75 72 6e 61 6c 2e 0a 20 20 20 20 20 20   journal..      
2b290 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  */.      assert(
2b2a0 20 73 71 6c 69 74 65 33 42 74 72 65 65 49 73 49   sqlite3BtreeIsI
2b2b0 6e 54 72 61 6e 73 28 70 42 74 29 3d 3d 30 20 29  nTrans(pBt)==0 )
2b2c0 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d  ;.      if( rc==
2b2d0 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
2b2e0 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
2b2f0 33 42 74 72 65 65 53 65 74 56 65 72 73 69 6f 6e  3BtreeSetVersion
2b300 28 70 42 74 2c 20 28 65 4e 65 77 3d 3d 50 41 47  (pBt, (eNew==PAG
2b310 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57  ER_JOURNALMODE_W
2b320 41 4c 20 3f 20 32 20 3a 20 31 29 29 3b 0a 20 20  AL ? 2 : 1));.  
2b330 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a      }.    }.  }.
2b340 23 65 6e 64 69 66 20 2f 2a 20 69 66 6e 64 65 66  #endif /* ifndef
2b350 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c   SQLITE_OMIT_WAL
2b360 20 2a 2f 0a 0a 20 20 69 66 28 20 72 63 20 29 7b   */..  if( rc ){
2b370 0a 20 20 20 20 65 4e 65 77 20 3d 20 65 4f 6c 64  .    eNew = eOld
2b380 3b 0a 20 20 7d 0a 20 20 65 4e 65 77 20 3d 20 73  ;.  }.  eNew = s
2b390 71 6c 69 74 65 33 50 61 67 65 72 53 65 74 4a 6f  qlite3PagerSetJo
2b3a0 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65 72  urnalMode(pPager
2b3b0 2c 20 65 4e 65 77 29 3b 0a 0a 20 20 70 4f 75 74  , eNew);..  pOut
2b3c0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
2b3d0 5d 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  ];.  pOut->flags
2b3e0 20 3d 20 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 53   = MEM_Str|MEM_S
2b3f0 74 61 74 69 63 7c 4d 45 4d 5f 54 65 72 6d 3b 0a  tatic|MEM_Term;.
2b400 20 20 70 4f 75 74 2d 3e 7a 20 3d 20 28 63 68 61    pOut->z = (cha
2b410 72 20 2a 29 73 71 6c 69 74 65 33 4a 6f 75 72 6e  r *)sqlite3Journ
2b420 61 6c 4d 6f 64 65 6e 61 6d 65 28 65 4e 65 77 29  alModename(eNew)
2b430 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 73 71  ;.  pOut->n = sq
2b440 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 70 4f  lite3Strlen30(pO
2b450 75 74 2d 3e 7a 29 3b 0a 20 20 70 4f 75 74 2d 3e  ut->z);.  pOut->
2b460 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55 54 46  enc = SQLITE_UTF
2b470 38 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  8;.  sqlite3Vdbe
2b480 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70  ChangeEncoding(p
2b490 4f 75 74 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a  Out, encoding);.
2b4a0 20 20 62 72 65 61 6b 3b 0a 7d 3b 0a 23 65 6e 64    break;.};.#end
2b4b0 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
2b4c0 54 5f 50 52 41 47 4d 41 20 2a 2f 0a 0a 23 69 66  T_PRAGMA */..#if
2b4d0 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
2b4e0 5f 4f 4d 49 54 5f 56 41 43 55 55 4d 29 20 26 26  _OMIT_VACUUM) &&
2b4f0 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
2b500 5f 4f 4d 49 54 5f 41 54 54 41 43 48 29 0a 2f 2a  _OMIT_ATTACH)./*
2b510 20 4f 70 63 6f 64 65 3a 20 56 61 63 75 75 6d 20   Opcode: Vacuum 
2b520 2a 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  * * * * *.**.** 
2b530 56 61 63 75 75 6d 20 74 68 65 20 65 6e 74 69 72  Vacuum the entir
2b540 65 20 64 61 74 61 62 61 73 65 2e 20 20 54 68 69  e database.  Thi
2b550 73 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 63 61  s opcode will ca
2b560 75 73 65 20 6f 74 68 65 72 20 76 69 72 74 75 61  use other virtua
2b570 6c 0a 2a 2a 20 6d 61 63 68 69 6e 65 73 20 74 6f  l.** machines to
2b580 20 62 65 20 63 72 65 61 74 65 64 20 61 6e 64 20   be created and 
2b590 72 75 6e 2e 20 20 49 74 20 6d 61 79 20 6e 6f 74  run.  It may not
2b5a0 20 62 65 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20   be called from 
2b5b0 77 69 74 68 69 6e 0a 2a 2a 20 61 20 74 72 61 6e  within.** a tran
2b5c0 73 61 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65  saction..*/.case
2b5d0 20 4f 50 5f 56 61 63 75 75 6d 3a 20 7b 0a 20 20   OP_Vacuum: {.  
2b5e0 72 63 20 3d 20 73 71 6c 69 74 65 33 52 75 6e 56  rc = sqlite3RunV
2b5f0 61 63 75 75 6d 28 26 70 2d 3e 7a 45 72 72 4d 73  acuum(&p->zErrMs
2b600 67 2c 20 64 62 29 3b 0a 20 20 62 72 65 61 6b 3b  g, db);.  break;
2b610 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 21  .}.#endif..#if !
2b620 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
2b630 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 29 0a  MIT_AUTOVACUUM).
2b640 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 63 72 56  /* Opcode: IncrV
2b650 61 63 75 75 6d 20 50 31 20 50 32 20 2a 20 2a 20  acuum P1 P2 * * 
2b660 2a 0a 2a 2a 0a 2a 2a 20 50 65 72 66 6f 72 6d 20  *.**.** Perform 
2b670 61 20 73 69 6e 67 6c 65 20 73 74 65 70 20 6f 66  a single step of
2b680 20 74 68 65 20 69 6e 63 72 65 6d 65 6e 74 61 6c   the incremental
2b690 20 76 61 63 75 75 6d 20 70 72 6f 63 65 64 75 72   vacuum procedur
2b6a0 65 20 6f 6e 0a 2a 2a 20 74 68 65 20 50 31 20 64  e on.** the P1 d
2b6b0 61 74 61 62 61 73 65 2e 20 49 66 20 74 68 65 20  atabase. If the 
2b6c0 76 61 63 75 75 6d 20 68 61 73 20 66 69 6e 69 73  vacuum has finis
2b6d0 68 65 64 2c 20 6a 75 6d 70 20 74 6f 20 69 6e 73  hed, jump to ins
2b6e0 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 50 32 2e 20  truction.** P2. 
2b6f0 4f 74 68 65 72 77 69 73 65 2c 20 66 61 6c 6c 20  Otherwise, fall 
2b700 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e  through to the n
2b710 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ext instruction.
2b720 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 63 72  .*/.case OP_Incr
2b730 56 61 63 75 75 6d 3a 20 7b 20 20 20 20 20 20 20  Vacuum: {       
2b740 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 42 74   /* jump */.  Bt
2b750 72 65 65 20 2a 70 42 74 3b 0a 0a 20 20 61 73 73  ree *pBt;..  ass
2b760 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
2b770 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e  && pOp->p1<db->n
2b780 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  Db );.  assert( 
2b790 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20  (p->btreeMask & 
2b7a0 28 31 3c 3c 70 4f 70 2d 3e 70 31 29 29 21 3d 30  (1<<pOp->p1))!=0
2b7b0 20 29 3b 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e   );.  pBt = db->
2b7c0 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74  aDb[pOp->p1].pBt
2b7d0 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
2b7e0 42 74 72 65 65 49 6e 63 72 56 61 63 75 75 6d 28  BtreeIncrVacuum(
2b7f0 70 42 74 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d  pBt);.  if( rc==
2b800 53 51 4c 49 54 45 5f 44 4f 4e 45 20 29 7b 0a 20  SQLITE_DONE ){. 
2b810 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
2b820 2d 20 31 3b 0a 20 20 20 20 72 63 20 3d 20 53 51  - 1;.    rc = SQ
2b830 4c 49 54 45 5f 4f 4b 3b 0a 20 20 7d 0a 20 20 62  LITE_OK;.  }.  b
2b840 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a  reak;.}.#endif..
2b850 2f 2a 20 4f 70 63 6f 64 65 3a 20 45 78 70 69 72  /* Opcode: Expir
2b860 65 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a  e P1 * * * *.**.
2b870 2a 2a 20 43 61 75 73 65 20 70 72 65 63 6f 6d 70  ** Cause precomp
2b880 69 6c 65 64 20 73 74 61 74 65 6d 65 6e 74 73 20  iled statements 
2b890 74 6f 20 62 65 63 6f 6d 65 20 65 78 70 69 72 65  to become expire
2b8a0 64 2e 20 41 6e 20 65 78 70 69 72 65 64 20 73 74  d. An expired st
2b8b0 61 74 65 6d 65 6e 74 0a 2a 2a 20 66 61 69 6c 73  atement.** fails
2b8c0 20 77 69 74 68 20 61 6e 20 65 72 72 6f 72 20 63   with an error c
2b8d0 6f 64 65 20 6f 66 20 53 51 4c 49 54 45 5f 53 43  ode of SQLITE_SC
2b8e0 48 45 4d 41 20 69 66 20 69 74 20 69 73 20 65 76  HEMA if it is ev
2b8f0 65 72 20 65 78 65 63 75 74 65 64 20 0a 2a 2a 20  er executed .** 
2b900 28 76 69 61 20 73 71 6c 69 74 65 33 5f 73 74 65  (via sqlite3_ste
2b910 70 28 29 29 2e 0a 2a 2a 20 0a 2a 2a 20 49 66 20  p())..** .** If 
2b920 50 31 20 69 73 20 30 2c 20 74 68 65 6e 20 61 6c  P1 is 0, then al
2b930 6c 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73  l SQL statements
2b940 20 62 65 63 6f 6d 65 20 65 78 70 69 72 65 64 2e   become expired.
2b950 20 49 66 20 50 31 20 69 73 20 6e 6f 6e 2d 7a 65   If P1 is non-ze
2b960 72 6f 2c 0a 2a 2a 20 74 68 65 6e 20 6f 6e 6c 79  ro,.** then only
2b970 20 74 68 65 20 63 75 72 72 65 6e 74 6c 79 20 65   the currently e
2b980 78 65 63 75 74 69 6e 67 20 73 74 61 74 65 6d 65  xecuting stateme
2b990 6e 74 20 69 73 20 61 66 66 65 63 74 65 64 2e 20  nt is affected. 
2b9a0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 45 78 70 69  .*/.case OP_Expi
2b9b0 72 65 3a 20 7b 0a 20 20 69 66 28 20 21 70 4f 70  re: {.  if( !pOp
2b9c0 2d 3e 70 31 20 29 7b 0a 20 20 20 20 73 71 6c 69  ->p1 ){.    sqli
2b9d0 74 65 33 45 78 70 69 72 65 50 72 65 70 61 72 65  te3ExpirePrepare
2b9e0 64 53 74 61 74 65 6d 65 6e 74 73 28 64 62 29 3b  dStatements(db);
2b9f0 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 2d  .  }else{.    p-
2ba00 3e 65 78 70 69 72 65 64 20 3d 20 31 3b 0a 20 20  >expired = 1;.  
2ba10 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69  }.  break;.}..#i
2ba20 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2ba30 54 5f 53 48 41 52 45 44 5f 43 41 43 48 45 0a 2f  T_SHARED_CACHE./
2ba40 2a 20 4f 70 63 6f 64 65 3a 20 54 61 62 6c 65 4c  * Opcode: TableL
2ba50 6f 63 6b 20 50 31 20 50 32 20 50 33 20 50 34 20  ock P1 P2 P3 P4 
2ba60 2a 0a 2a 2a 0a 2a 2a 20 4f 62 74 61 69 6e 20 61  *.**.** Obtain a
2ba70 20 6c 6f 63 6b 20 6f 6e 20 61 20 70 61 72 74 69   lock on a parti
2ba80 63 75 6c 61 72 20 74 61 62 6c 65 2e 20 54 68 69  cular table. Thi
2ba90 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73  s instruction is
2baa0 20 6f 6e 6c 79 20 75 73 65 64 20 77 68 65 6e 0a   only used when.
2bab0 2a 2a 20 74 68 65 20 73 68 61 72 65 64 2d 63 61  ** the shared-ca
2bac0 63 68 65 20 66 65 61 74 75 72 65 20 69 73 20 65  che feature is e
2bad0 6e 61 62 6c 65 64 2e 20 0a 2a 2a 0a 2a 2a 20 50  nabled. .**.** P
2bae0 31 20 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f  1 is the index o
2baf0 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69  f the database i
2bb00 6e 20 73 71 6c 69 74 65 33 2e 61 44 62 5b 5d 20  n sqlite3.aDb[] 
2bb10 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 0a  of the database.
2bb20 2a 2a 20 6f 6e 20 77 68 69 63 68 20 74 68 65 20  ** on which the 
2bb30 6c 6f 63 6b 20 69 73 20 61 63 71 75 69 72 65 64  lock is acquired
2bb40 2e 20 20 41 20 72 65 61 64 6c 6f 63 6b 20 69 73  .  A readlock is
2bb50 20 6f 62 74 61 69 6e 65 64 20 69 66 20 50 33 3d   obtained if P3=
2bb60 3d 30 20 6f 72 0a 2a 2a 20 61 20 77 72 69 74 65  =0 or.** a write
2bb70 20 6c 6f 63 6b 20 69 66 20 50 33 3d 3d 31 2e 0a   lock if P3==1..
2bb80 2a 2a 0a 2a 2a 20 50 32 20 63 6f 6e 74 61 69 6e  **.** P2 contain
2bb90 73 20 74 68 65 20 72 6f 6f 74 2d 70 61 67 65 20  s the root-page 
2bba0 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20  of the table to 
2bbb0 6c 6f 63 6b 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 63  lock..**.** P4 c
2bbc0 6f 6e 74 61 69 6e 73 20 61 20 70 6f 69 6e 74 65  ontains a pointe
2bbd0 72 20 74 6f 20 74 68 65 20 6e 61 6d 65 20 6f 66  r to the name of
2bbe0 20 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67   the table being
2bbf0 20 6c 6f 63 6b 65 64 2e 20 54 68 69 73 20 69 73   locked. This is
2bc00 20 6f 6e 6c 79 0a 2a 2a 20 75 73 65 64 20 74 6f   only.** used to
2bc10 20 67 65 6e 65 72 61 74 65 20 61 6e 20 65 72 72   generate an err
2bc20 6f 72 20 6d 65 73 73 61 67 65 20 69 66 20 74 68  or message if th
2bc30 65 20 6c 6f 63 6b 20 63 61 6e 6e 6f 74 20 62 65  e lock cannot be
2bc40 20 6f 62 74 61 69 6e 65 64 2e 0a 2a 2f 0a 63 61   obtained..*/.ca
2bc50 73 65 20 4f 50 5f 54 61 62 6c 65 4c 6f 63 6b 3a  se OP_TableLock:
2bc60 20 7b 0a 20 20 75 38 20 69 73 57 72 69 74 65 4c   {.  u8 isWriteL
2bc70 6f 63 6b 20 3d 20 28 75 38 29 70 4f 70 2d 3e 70  ock = (u8)pOp->p
2bc80 33 3b 0a 20 20 69 66 28 20 69 73 57 72 69 74 65  3;.  if( isWrite
2bc90 4c 6f 63 6b 20 7c 7c 20 30 3d 3d 28 64 62 2d 3e  Lock || 0==(db->
2bca0 66 6c 61 67 73 26 53 51 4c 49 54 45 5f 52 65 61  flags&SQLITE_Rea
2bcb0 64 55 6e 63 6f 6d 6d 69 74 74 65 64 29 20 29 7b  dUncommitted) ){
2bcc0 0a 20 20 20 20 69 6e 74 20 70 31 20 3d 20 70 4f  .    int p1 = pO
2bcd0 70 2d 3e 70 31 3b 20 0a 20 20 20 20 61 73 73 65  p->p1; .    asse
2bce0 72 74 28 20 70 31 3e 3d 30 20 26 26 20 70 31 3c  rt( p1>=0 && p1<
2bcf0 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 20 20 61  db->nDb );.    a
2bd00 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65  ssert( (p->btree
2bd10 4d 61 73 6b 20 26 20 28 31 3c 3c 70 31 29 29 21  Mask & (1<<p1))!
2bd20 3d 30 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  =0 );.    assert
2bd30 28 20 69 73 57 72 69 74 65 4c 6f 63 6b 3d 3d 30  ( isWriteLock==0
2bd40 20 7c 7c 20 69 73 57 72 69 74 65 4c 6f 63 6b 3d   || isWriteLock=
2bd50 3d 31 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 73  =1 );.    rc = s
2bd60 71 6c 69 74 65 33 42 74 72 65 65 4c 6f 63 6b 54  qlite3BtreeLockT
2bd70 61 62 6c 65 28 64 62 2d 3e 61 44 62 5b 70 31 5d  able(db->aDb[p1]
2bd80 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 32 2c 20 69  .pBt, pOp->p2, i
2bd90 73 57 72 69 74 65 4c 6f 63 6b 29 3b 0a 20 20 20  sWriteLock);.   
2bda0 20 69 66 28 20 28 72 63 26 30 78 46 46 29 3d 3d   if( (rc&0xFF)==
2bdb0 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20 29 7b  SQLITE_LOCKED ){
2bdc0 0a 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61  .      const cha
2bdd0 72 20 2a 7a 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a  r *z = pOp->p4.z
2bde0 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 53  ;.      sqlite3S
2bdf0 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72  etString(&p->zEr
2be00 72 4d 73 67 2c 20 64 62 2c 20 22 64 61 74 61 62  rMsg, db, "datab
2be10 61 73 65 20 74 61 62 6c 65 20 69 73 20 6c 6f 63  ase table is loc
2be20 6b 65 64 3a 20 25 73 22 2c 20 7a 29 3b 0a 20 20  ked: %s", z);.  
2be30 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b    }.  }.  break;
2be40 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
2be50 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f  ITE_OMIT_SHARED_
2be60 43 41 43 48 45 20 2a 2f 0a 0a 23 69 66 6e 64 65  CACHE */..#ifnde
2be70 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
2be80 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70  RTUALTABLE./* Op
2be90 63 6f 64 65 3a 20 56 42 65 67 69 6e 20 2a 20 2a  code: VBegin * *
2bea0 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34   * P4 *.**.** P4
2beb0 20 6d 61 79 20 62 65 20 61 20 70 6f 69 6e 74 65   may be a pointe
2bec0 72 20 74 6f 20 61 6e 20 73 71 6c 69 74 65 33 5f  r to an sqlite3_
2bed0 76 74 61 62 20 73 74 72 75 63 74 75 72 65 2e 20  vtab structure. 
2bee0 49 66 20 73 6f 2c 20 63 61 6c 6c 20 74 68 65 20  If so, call the 
2bef0 0a 2a 2a 20 78 42 65 67 69 6e 20 6d 65 74 68 6f  .** xBegin metho
2bf00 64 20 66 6f 72 20 74 68 61 74 20 74 61 62 6c 65  d for that table
2bf10 2e 0a 2a 2a 0a 2a 2a 20 41 6c 73 6f 2c 20 77 68  ..**.** Also, wh
2bf20 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 50 34 20  ether or not P4 
2bf30 69 73 20 73 65 74 2c 20 63 68 65 63 6b 20 74 68  is set, check th
2bf40 61 74 20 74 68 69 73 20 69 73 20 6e 6f 74 20 62  at this is not b
2bf50 65 69 6e 67 20 63 61 6c 6c 65 64 20 66 72 6f 6d  eing called from
2bf60 0a 2a 2a 20 77 69 74 68 69 6e 20 61 20 63 61 6c  .** within a cal
2bf70 6c 62 61 63 6b 20 74 6f 20 61 20 76 69 72 74 75  lback to a virtu
2bf80 61 6c 20 74 61 62 6c 65 20 78 53 79 6e 63 28 29  al table xSync()
2bf90 20 6d 65 74 68 6f 64 2e 20 49 66 20 69 74 20 69   method. If it i
2bfa0 73 2c 20 74 68 65 20 65 72 72 6f 72 0a 2a 2a 20  s, the error.** 
2bfb0 63 6f 64 65 20 77 69 6c 6c 20 62 65 20 73 65 74  code will be set
2bfc0 20 74 6f 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45   to SQLITE_LOCKE
2bfd0 44 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 42  D..*/.case OP_VB
2bfe0 65 67 69 6e 3a 20 7b 0a 20 20 56 54 61 62 6c 65  egin: {.  VTable
2bff0 20 2a 70 56 54 61 62 3b 0a 20 20 70 56 54 61 62   *pVTab;.  pVTab
2c000 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62   = pOp->p4.pVtab
2c010 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
2c020 56 74 61 62 42 65 67 69 6e 28 64 62 2c 20 70 56  VtabBegin(db, pV
2c030 54 61 62 29 3b 0a 20 20 69 66 28 20 70 56 54 61  Tab);.  if( pVTa
2c040 62 20 29 20 69 6d 70 6f 72 74 56 74 61 62 45 72  b ) importVtabEr
2c050 72 4d 73 67 28 70 2c 20 70 56 54 61 62 2d 3e 70  rMsg(p, pVTab->p
2c060 56 74 61 62 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  Vtab);.  break;.
2c070 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
2c080 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
2c090 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  ABLE */..#ifndef
2c0a0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
2c0b0 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63  TUALTABLE./* Opc
2c0c0 6f 64 65 3a 20 56 43 72 65 61 74 65 20 50 31 20  ode: VCreate P1 
2c0d0 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50  * * P4 *.**.** P
2c0e0 34 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66  4 is the name of
2c0f0 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65   a virtual table
2c100 20 69 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e   in database P1.
2c110 20 43 61 6c 6c 20 74 68 65 20 78 43 72 65 61 74   Call the xCreat
2c120 65 20 6d 65 74 68 6f 64 0a 2a 2a 20 66 6f 72 20  e method.** for 
2c130 74 68 61 74 20 74 61 62 6c 65 2e 0a 2a 2f 0a 63  that table..*/.c
2c140 61 73 65 20 4f 50 5f 56 43 72 65 61 74 65 3a 20  ase OP_VCreate: 
2c150 7b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  {.  rc = sqlite3
2c160 56 74 61 62 43 61 6c 6c 43 72 65 61 74 65 28 64  VtabCallCreate(d
2c170 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d  b, pOp->p1, pOp-
2c180 3e 70 34 2e 7a 2c 20 26 70 2d 3e 7a 45 72 72 4d  >p4.z, &p->zErrM
2c190 73 67 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  sg);.  break;.}.
2c1a0 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
2c1b0 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
2c1c0 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  LE */..#ifndef S
2c1d0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
2c1e0 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64  ALTABLE./* Opcod
2c1f0 65 3a 20 56 44 65 73 74 72 6f 79 20 50 31 20 2a  e: VDestroy P1 *
2c200 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34   * P4 *.**.** P4
2c210 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20   is the name of 
2c220 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  a virtual table 
2c230 69 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e 20  in database P1. 
2c240 20 43 61 6c 6c 20 74 68 65 20 78 44 65 73 74 72   Call the xDestr
2c250 6f 79 20 6d 65 74 68 6f 64 0a 2a 2a 20 6f 66 20  oy method.** of 
2c260 74 68 61 74 20 74 61 62 6c 65 2e 0a 2a 2f 0a 63  that table..*/.c
2c270 61 73 65 20 4f 50 5f 56 44 65 73 74 72 6f 79 3a  ase OP_VDestroy:
2c280 20 7b 0a 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65   {.  p->inVtabMe
2c290 74 68 6f 64 20 3d 20 32 3b 0a 20 20 72 63 20 3d  thod = 2;.  rc =
2c2a0 20 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c   sqlite3VtabCall
2c2b0 44 65 73 74 72 6f 79 28 64 62 2c 20 70 4f 70 2d  Destroy(db, pOp-
2c2c0 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b  >p1, pOp->p4.z);
2c2d0 0a 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68  .  p->inVtabMeth
2c2e0 6f 64 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b  od = 0;.  break;
2c2f0 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
2c300 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
2c310 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65  TABLE */..#ifnde
2c320 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
2c330 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70  RTUALTABLE./* Op
2c340 63 6f 64 65 3a 20 56 4f 70 65 6e 20 50 31 20 2a  code: VOpen P1 *
2c350 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34   * P4 *.**.** P4
2c360 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
2c370 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65   a virtual table
2c380 20 6f 62 6a 65 63 74 2c 20 61 6e 20 73 71 6c 69   object, an sqli
2c390 74 65 33 5f 76 74 61 62 20 73 74 72 75 63 74 75  te3_vtab structu
2c3a0 72 65 2e 0a 2a 2a 20 50 31 20 69 73 20 61 20 63  re..** P1 is a c
2c3b0 75 72 73 6f 72 20 6e 75 6d 62 65 72 2e 20 20 54  ursor number.  T
2c3c0 68 69 73 20 6f 70 63 6f 64 65 20 6f 70 65 6e 73  his opcode opens
2c3d0 20 61 20 63 75 72 73 6f 72 20 74 6f 20 74 68 65   a cursor to the
2c3e0 20 76 69 72 74 75 61 6c 0a 2a 2a 20 74 61 62 6c   virtual.** tabl
2c3f0 65 20 61 6e 64 20 73 74 6f 72 65 73 20 74 68 61  e and stores tha
2c400 74 20 63 75 72 73 6f 72 20 69 6e 20 50 31 2e 0a  t cursor in P1..
2c410 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 4f 70 65 6e  */.case OP_VOpen
2c420 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  : {.  VdbeCursor
2c430 20 2a 70 43 75 72 3b 0a 20 20 73 71 6c 69 74 65   *pCur;.  sqlite
2c440 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 2a 70  3_vtab_cursor *p
2c450 56 74 61 62 43 75 72 73 6f 72 3b 0a 20 20 73 71  VtabCursor;.  sq
2c460 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61  lite3_vtab *pVta
2c470 62 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 6f 64  b;.  sqlite3_mod
2c480 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 0a 20  ule *pModule;.. 
2c490 20 70 43 75 72 20 3d 20 30 3b 0a 20 20 70 56 74   pCur = 0;.  pVt
2c4a0 61 62 43 75 72 73 6f 72 20 3d 20 30 3b 0a 20 20  abCursor = 0;.  
2c4b0 70 56 74 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e  pVtab = pOp->p4.
2c4c0 70 56 74 61 62 2d 3e 70 56 74 61 62 3b 0a 20 20  pVtab->pVtab;.  
2c4d0 70 4d 6f 64 75 6c 65 20 3d 20 28 73 71 6c 69 74  pModule = (sqlit
2c4e0 65 33 5f 6d 6f 64 75 6c 65 20 2a 29 70 56 74 61  e3_module *)pVta
2c4f0 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 61 73  b->pModule;.  as
2c500 73 65 72 74 28 70 56 74 61 62 20 26 26 20 70 4d  sert(pVtab && pM
2c510 6f 64 75 6c 65 29 3b 0a 20 20 72 63 20 3d 20 70  odule);.  rc = p
2c520 4d 6f 64 75 6c 65 2d 3e 78 4f 70 65 6e 28 70 56  Module->xOpen(pV
2c530 74 61 62 2c 20 26 70 56 74 61 62 43 75 72 73 6f  tab, &pVtabCurso
2c540 72 29 3b 0a 20 20 69 6d 70 6f 72 74 56 74 61 62  r);.  importVtab
2c550 45 72 72 4d 73 67 28 70 2c 20 70 56 74 61 62 29  ErrMsg(p, pVtab)
2c560 3b 0a 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4f  ;.  if( SQLITE_O
2c570 4b 3d 3d 72 63 20 29 7b 0a 20 20 20 20 2f 2a 20  K==rc ){.    /* 
2c580 49 6e 69 74 69 61 6c 69 7a 65 20 73 71 6c 69 74  Initialize sqlit
2c590 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 62  e3_vtab_cursor b
2c5a0 61 73 65 20 63 6c 61 73 73 20 2a 2f 0a 20 20 20  ase class */.   
2c5b0 20 70 56 74 61 62 43 75 72 73 6f 72 2d 3e 70 56   pVtabCursor->pV
2c5c0 74 61 62 20 3d 20 70 56 74 61 62 3b 0a 0a 20 20  tab = pVtab;..  
2c5d0 20 20 2f 2a 20 49 6e 69 74 69 61 6c 69 73 65 20    /* Initialise 
2c5e0 76 64 62 65 20 63 75 72 73 6f 72 20 6f 62 6a 65  vdbe cursor obje
2c5f0 63 74 20 2a 2f 0a 20 20 20 20 70 43 75 72 20 3d  ct */.    pCur =
2c600 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28   allocateCursor(
2c610 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 30 2c 20 2d  p, pOp->p1, 0, -
2c620 31 2c 20 30 29 3b 0a 20 20 20 20 69 66 28 20 70  1, 0);.    if( p
2c630 43 75 72 20 29 7b 0a 20 20 20 20 20 20 70 43 75  Cur ){.      pCu
2c640 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 20 3d  r->pVtabCursor =
2c650 20 70 56 74 61 62 43 75 72 73 6f 72 3b 0a 20 20   pVtabCursor;.  
2c660 20 20 20 20 70 43 75 72 2d 3e 70 4d 6f 64 75 6c      pCur->pModul
2c670 65 20 3d 20 70 56 74 61 62 43 75 72 73 6f 72 2d  e = pVtabCursor-
2c680 3e 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b  >pVtab->pModule;
2c690 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
2c6a0 20 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c    db->mallocFail
2c6b0 65 64 20 3d 20 31 3b 0a 20 20 20 20 20 20 70 4d  ed = 1;.      pM
2c6c0 6f 64 75 6c 65 2d 3e 78 43 6c 6f 73 65 28 70 56  odule->xClose(pV
2c6d0 74 61 62 43 75 72 73 6f 72 29 3b 0a 20 20 20 20  tabCursor);.    
2c6e0 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  }.  }.  break;.}
2c6f0 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
2c700 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
2c710 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20  BLE */..#ifndef 
2c720 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
2c730 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f  UALTABLE./* Opco
2c740 64 65 3a 20 56 46 69 6c 74 65 72 20 50 31 20 50  de: VFilter P1 P
2c750 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20  2 P3 P4 *.**.** 
2c760 50 31 20 69 73 20 61 20 63 75 72 73 6f 72 20 6f  P1 is a cursor o
2c770 70 65 6e 65 64 20 75 73 69 6e 67 20 56 4f 70 65  pened using VOpe
2c780 6e 2e 20 20 50 32 20 69 73 20 61 6e 20 61 64 64  n.  P2 is an add
2c790 72 65 73 73 20 74 6f 20 6a 75 6d 70 20 74 6f 20  ress to jump to 
2c7a0 69 66 0a 2a 2a 20 74 68 65 20 66 69 6c 74 65 72  if.** the filter
2c7b0 65 64 20 72 65 73 75 6c 74 20 73 65 74 20 69 73  ed result set is
2c7c0 20 65 6d 70 74 79 2e 0a 2a 2a 0a 2a 2a 20 50 34   empty..**.** P4
2c7d0 20 69 73 20 65 69 74 68 65 72 20 4e 55 4c 4c 20   is either NULL 
2c7e0 6f 72 20 61 20 73 74 72 69 6e 67 20 74 68 61 74  or a string that
2c7f0 20 77 61 73 20 67 65 6e 65 72 61 74 65 64 20 62   was generated b
2c800 79 20 74 68 65 20 78 42 65 73 74 49 6e 64 65 78  y the xBestIndex
2c810 0a 2a 2a 20 6d 65 74 68 6f 64 20 6f 66 20 74 68  .** method of th
2c820 65 20 6d 6f 64 75 6c 65 2e 20 20 54 68 65 20 69  e module.  The i
2c830 6e 74 65 72 70 72 65 74 61 74 69 6f 6e 20 6f 66  nterpretation of
2c840 20 74 68 65 20 50 34 20 73 74 72 69 6e 67 20 69   the P4 string i
2c850 73 20 6c 65 66 74 0a 2a 2a 20 74 6f 20 74 68 65  s left.** to the
2c860 20 6d 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e   module implemen
2c870 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68  tation..**.** Th
2c880 69 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65  is opcode invoke
2c890 73 20 74 68 65 20 78 46 69 6c 74 65 72 20 6d 65  s the xFilter me
2c8a0 74 68 6f 64 20 6f 6e 20 74 68 65 20 76 69 72 74  thod on the virt
2c8b0 75 61 6c 20 74 61 62 6c 65 20 73 70 65 63 69 66  ual table specif
2c8c0 69 65 64 0a 2a 2a 20 62 79 20 50 31 2e 20 20 54  ied.** by P1.  T
2c8d0 68 65 20 69 6e 74 65 67 65 72 20 71 75 65 72 79  he integer query
2c8e0 20 70 6c 61 6e 20 70 61 72 61 6d 65 74 65 72 20   plan parameter 
2c8f0 74 6f 20 78 46 69 6c 74 65 72 20 69 73 20 73 74  to xFilter is st
2c900 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
2c910 0a 2a 2a 20 50 33 2e 20 52 65 67 69 73 74 65 72  .** P3. Register
2c920 20 50 33 2b 31 20 73 74 6f 72 65 73 20 74 68 65   P3+1 stores the
2c930 20 61 72 67 63 20 70 61 72 61 6d 65 74 65 72 20   argc parameter 
2c940 74 6f 20 62 65 20 70 61 73 73 65 64 20 74 6f 20  to be passed to 
2c950 74 68 65 0a 2a 2a 20 78 46 69 6c 74 65 72 20 6d  the.** xFilter m
2c960 65 74 68 6f 64 2e 20 52 65 67 69 73 74 65 72 73  ethod. Registers
2c970 20 50 33 2b 32 2e 2e 50 33 2b 31 2b 61 72 67 63   P3+2..P3+1+argc
2c980 20 61 72 65 20 74 68 65 20 61 72 67 63 0a 2a 2a   are the argc.**
2c990 20 61 64 64 69 74 69 6f 6e 61 6c 20 70 61 72 61   additional para
2c9a0 6d 65 74 65 72 73 20 77 68 69 63 68 20 61 72 65  meters which are
2c9b0 20 70 61 73 73 65 64 20 74 6f 0a 2a 2a 20 78 46   passed to.** xF
2c9c0 69 6c 74 65 72 20 61 73 20 61 72 67 76 2e 20 52  ilter as argv. R
2c9d0 65 67 69 73 74 65 72 20 50 33 2b 32 20 62 65 63  egister P3+2 bec
2c9e0 6f 6d 65 73 20 61 72 67 76 5b 30 5d 20 77 68 65  omes argv[0] whe
2c9f0 6e 20 70 61 73 73 65 64 20 74 6f 20 78 46 69 6c  n passed to xFil
2ca00 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 41 20 6a 75 6d  ter..**.** A jum
2ca10 70 20 69 73 20 6d 61 64 65 20 74 6f 20 50 32 20  p is made to P2 
2ca20 69 66 20 74 68 65 20 72 65 73 75 6c 74 20 73 65  if the result se
2ca30 74 20 61 66 74 65 72 20 66 69 6c 74 65 72 69 6e  t after filterin
2ca40 67 20 77 6f 75 6c 64 20 62 65 20 65 6d 70 74 79  g would be empty
2ca50 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 46 69  ..*/.case OP_VFi
2ca60 6c 74 65 72 3a 20 7b 20 20 20 2f 2a 20 6a 75 6d  lter: {   /* jum
2ca70 70 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 72 67 3b  p */.  int nArg;
2ca80 0a 20 20 69 6e 74 20 69 51 75 65 72 79 3b 0a 20  .  int iQuery;. 
2ca90 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d   const sqlite3_m
2caa0 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a  odule *pModule;.
2cab0 20 20 4d 65 6d 20 2a 70 51 75 65 72 79 3b 0a 20    Mem *pQuery;. 
2cac0 20 4d 65 6d 20 2a 70 41 72 67 63 3b 0a 20 20 73   Mem *pArgc;.  s
2cad0 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73  qlite3_vtab_curs
2cae0 6f 72 20 2a 70 56 74 61 62 43 75 72 73 6f 72 3b  or *pVtabCursor;
2caf0 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  .  sqlite3_vtab 
2cb00 2a 70 56 74 61 62 3b 0a 20 20 56 64 62 65 43 75  *pVtab;.  VdbeCu
2cb10 72 73 6f 72 20 2a 70 43 75 72 3b 0a 20 20 69 6e  rsor *pCur;.  in
2cb20 74 20 72 65 73 3b 0a 20 20 69 6e 74 20 69 3b 0a  t res;.  int i;.
2cb30 20 20 4d 65 6d 20 2a 2a 61 70 41 72 67 3b 0a 0a    Mem **apArg;..
2cb40 20 20 70 51 75 65 72 79 20 3d 20 26 61 4d 65 6d    pQuery = &aMem
2cb50 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 70 41 72  [pOp->p3];.  pAr
2cb60 67 63 20 3d 20 26 70 51 75 65 72 79 5b 31 5d 3b  gc = &pQuery[1];
2cb70 0a 20 20 70 43 75 72 20 3d 20 70 2d 3e 61 70 43  .  pCur = p->apC
2cb80 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
2cb90 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
2cba0 64 28 70 51 75 65 72 79 29 20 29 3b 0a 20 20 52  d(pQuery) );.  R
2cbb0 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
2cbc0 70 2d 3e 70 33 2c 20 70 51 75 65 72 79 29 3b 0a  p->p3, pQuery);.
2cbd0 20 20 61 73 73 65 72 74 28 20 70 43 75 72 2d 3e    assert( pCur->
2cbe0 70 56 74 61 62 43 75 72 73 6f 72 20 29 3b 0a 20  pVtabCursor );. 
2cbf0 20 70 56 74 61 62 43 75 72 73 6f 72 20 3d 20 70   pVtabCursor = p
2cc00 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72  Cur->pVtabCursor
2cc10 3b 0a 20 20 70 56 74 61 62 20 3d 20 70 56 74 61  ;.  pVtab = pVta
2cc20 62 43 75 72 73 6f 72 2d 3e 70 56 74 61 62 3b 0a  bCursor->pVtab;.
2cc30 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61    pModule = pVta
2cc40 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20 2f  b->pModule;..  /
2cc50 2a 20 47 72 61 62 20 74 68 65 20 69 6e 64 65 78  * Grab the index
2cc60 20 6e 75 6d 62 65 72 20 61 6e 64 20 61 72 67 63   number and argc
2cc70 20 70 61 72 61 6d 65 74 65 72 73 20 2a 2f 0a 20   parameters */. 
2cc80 20 61 73 73 65 72 74 28 20 28 70 51 75 65 72 79   assert( (pQuery
2cc90 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 29  ->flags&MEM_Int)
2cca0 21 3d 30 20 26 26 20 70 41 72 67 63 2d 3e 66 6c  !=0 && pArgc->fl
2ccb0 61 67 73 3d 3d 4d 45 4d 5f 49 6e 74 20 29 3b 0a  ags==MEM_Int );.
2ccc0 20 20 6e 41 72 67 20 3d 20 28 69 6e 74 29 70 41    nArg = (int)pA
2ccd0 72 67 63 2d 3e 75 2e 69 3b 0a 20 20 69 51 75 65  rgc->u.i;.  iQue
2cce0 72 79 20 3d 20 28 69 6e 74 29 70 51 75 65 72 79  ry = (int)pQuery
2ccf0 2d 3e 75 2e 69 3b 0a 0a 20 20 2f 2a 20 49 6e 76  ->u.i;..  /* Inv
2cd00 6f 6b 65 20 74 68 65 20 78 46 69 6c 74 65 72 20  oke the xFilter 
2cd10 6d 65 74 68 6f 64 20 2a 2f 0a 20 20 7b 0a 20 20  method */.  {.  
2cd20 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 20 20 61    res = 0;.    a
2cd30 70 41 72 67 20 3d 20 70 2d 3e 61 70 41 72 67 3b  pArg = p->apArg;
2cd40 0a 20 20 20 20 66 6f 72 28 69 20 3d 20 30 3b 20  .    for(i = 0; 
2cd50 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20  i<nArg; i++){.  
2cd60 20 20 20 20 61 70 41 72 67 5b 69 5d 20 3d 20 26      apArg[i] = &
2cd70 70 41 72 67 63 5b 69 2b 31 5d 3b 0a 20 20 20 20  pArgc[i+1];.    
2cd80 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
2cd90 53 74 6f 72 65 54 79 70 65 28 61 70 41 72 67 5b  StoreType(apArg[
2cda0 69 5d 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20  i]);.    }..    
2cdb0 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64 20  p->inVtabMethod 
2cdc0 3d 20 31 3b 0a 20 20 20 20 72 63 20 3d 20 70 4d  = 1;.    rc = pM
2cdd0 6f 64 75 6c 65 2d 3e 78 46 69 6c 74 65 72 28 70  odule->xFilter(p
2cde0 56 74 61 62 43 75 72 73 6f 72 2c 20 69 51 75 65  VtabCursor, iQue
2cdf0 72 79 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 6e  ry, pOp->p4.z, n
2ce00 41 72 67 2c 20 61 70 41 72 67 29 3b 0a 20 20 20  Arg, apArg);.   
2ce10 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64   p->inVtabMethod
2ce20 20 3d 20 30 3b 0a 20 20 20 20 69 6d 70 6f 72 74   = 0;.    import
2ce30 56 74 61 62 45 72 72 4d 73 67 28 70 2c 20 70 56  VtabErrMsg(p, pV
2ce40 74 61 62 29 3b 0a 20 20 20 20 69 66 28 20 72 63  tab);.    if( rc
2ce50 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
2ce60 20 20 20 20 20 72 65 73 20 3d 20 70 4d 6f 64 75       res = pModu
2ce70 6c 65 2d 3e 78 45 6f 66 28 70 56 74 61 62 43 75  le->xEof(pVtabCu
2ce80 72 73 6f 72 29 3b 0a 20 20 20 20 7d 0a 0a 20 20  rsor);.    }..  
2ce90 20 20 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20    if( res ){.   
2cea0 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
2ceb0 2d 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  - 1;.    }.  }. 
2cec0 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 3d   pCur->nullRow =
2ced0 20 30 3b 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a   0;..  break;.}.
2cee0 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
2cef0 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
2cf00 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  LE */..#ifndef S
2cf10 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
2cf20 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64  ALTABLE./* Opcod
2cf30 65 3a 20 56 43 6f 6c 75 6d 6e 20 50 31 20 50 32  e: VColumn P1 P2
2cf40 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 74   P3 * *.**.** St
2cf50 6f 72 65 20 74 68 65 20 76 61 6c 75 65 20 6f 66  ore the value of
2cf60 20 74 68 65 20 50 32 2d 74 68 20 63 6f 6c 75 6d   the P2-th colum
2cf70 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 72 6f 77 20  n of.** the row 
2cf80 6f 66 20 74 68 65 20 76 69 72 74 75 61 6c 2d 74  of the virtual-t
2cf90 61 62 6c 65 20 74 68 61 74 20 74 68 65 20 0a 2a  able that the .*
2cfa0 2a 20 50 31 20 63 75 72 73 6f 72 20 69 73 20 70  * P1 cursor is p
2cfb0 6f 69 6e 74 69 6e 67 20 74 6f 20 69 6e 74 6f 20  ointing to into 
2cfc0 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2f 0a  register P3..*/.
2cfd0 63 61 73 65 20 4f 50 5f 56 43 6f 6c 75 6d 6e 3a  case OP_VColumn:
2cfe0 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61   {.  sqlite3_vta
2cff0 62 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f 6e 73  b *pVtab;.  cons
2d000 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65  t sqlite3_module
2d010 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 4d 65 6d   *pModule;.  Mem
2d020 20 2a 70 44 65 73 74 3b 0a 20 20 73 71 6c 69 74   *pDest;.  sqlit
2d030 65 33 5f 63 6f 6e 74 65 78 74 20 73 43 6f 6e 74  e3_context sCont
2d040 65 78 74 3b 0a 0a 20 20 56 64 62 65 43 75 72 73  ext;..  VdbeCurs
2d050 6f 72 20 2a 70 43 75 72 20 3d 20 70 2d 3e 61 70  or *pCur = p->ap
2d060 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
2d070 61 73 73 65 72 74 28 20 70 43 75 72 2d 3e 70 56  assert( pCur->pV
2d080 74 61 62 43 75 72 73 6f 72 20 29 3b 0a 20 20 61  tabCursor );.  a
2d090 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30  ssert( pOp->p3>0
2d0a0 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e   && pOp->p3<=p->
2d0b0 6e 4d 65 6d 20 29 3b 0a 20 20 70 44 65 73 74 20  nMem );.  pDest 
2d0c0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
2d0d0 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68  ;.  memAboutToCh
2d0e0 61 6e 67 65 28 70 2c 20 70 44 65 73 74 29 3b 0a  ange(p, pDest);.
2d0f0 20 20 69 66 28 20 70 43 75 72 2d 3e 6e 75 6c 6c    if( pCur->null
2d100 52 6f 77 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  Row ){.    sqlit
2d110 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c  e3VdbeMemSetNull
2d120 28 70 44 65 73 74 29 3b 0a 20 20 20 20 62 72 65  (pDest);.    bre
2d130 61 6b 3b 0a 20 20 7d 0a 20 20 70 56 74 61 62 20  ak;.  }.  pVtab 
2d140 3d 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72  = pCur->pVtabCur
2d150 73 6f 72 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4d  sor->pVtab;.  pM
2d160 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70  odule = pVtab->p
2d170 4d 6f 64 75 6c 65 3b 0a 20 20 61 73 73 65 72 74  Module;.  assert
2d180 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 43 6f 6c 75  ( pModule->xColu
2d190 6d 6e 20 29 3b 0a 20 20 6d 65 6d 73 65 74 28 26  mn );.  memset(&
2d1a0 73 43 6f 6e 74 65 78 74 2c 20 30 2c 20 73 69 7a  sContext, 0, siz
2d1b0 65 6f 66 28 73 43 6f 6e 74 65 78 74 29 29 3b 0a  eof(sContext));.
2d1c0 0a 20 20 2f 2a 20 54 68 65 20 6f 75 74 70 75 74  .  /* The output
2d1d0 20 63 65 6c 6c 20 6d 61 79 20 61 6c 72 65 61 64   cell may alread
2d1e0 79 20 68 61 76 65 20 61 20 62 75 66 66 65 72 20  y have a buffer 
2d1f0 61 6c 6c 6f 63 61 74 65 64 2e 20 4d 6f 76 65 0a  allocated. Move.
2d200 20 20 2a 2a 20 74 68 65 20 63 75 72 72 65 6e 74    ** the current
2d210 20 63 6f 6e 74 65 6e 74 73 20 74 6f 20 73 43 6f   contents to sCo
2d220 6e 74 65 78 74 2e 73 20 73 6f 20 69 6e 20 63 61  ntext.s so in ca
2d230 73 65 20 74 68 65 20 75 73 65 72 2d 66 75 6e 63  se the user-func
2d240 74 69 6f 6e 20 0a 20 20 2a 2a 20 63 61 6e 20 75  tion .  ** can u
2d250 73 65 20 74 68 65 20 61 6c 72 65 61 64 79 20 61  se the already a
2d260 6c 6c 6f 63 61 74 65 64 20 62 75 66 66 65 72 20  llocated buffer 
2d270 69 6e 73 74 65 61 64 20 6f 66 20 61 6c 6c 6f 63  instead of alloc
2d280 61 74 69 6e 67 20 61 20 0a 20 20 2a 2a 20 6e 65  ating a .  ** ne
2d290 77 20 6f 6e 65 2e 0a 20 20 2a 2f 0a 20 20 73 71  w one..  */.  sq
2d2a0 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65  lite3VdbeMemMove
2d2b0 28 26 73 43 6f 6e 74 65 78 74 2e 73 2c 20 70 44  (&sContext.s, pD
2d2c0 65 73 74 29 3b 0a 20 20 4d 65 6d 53 65 74 54 79  est);.  MemSetTy
2d2d0 70 65 46 6c 61 67 28 26 73 43 6f 6e 74 65 78 74  peFlag(&sContext
2d2e0 2e 73 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 0a  .s, MEM_Null);..
2d2f0 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e    rc = pModule->
2d300 78 43 6f 6c 75 6d 6e 28 70 43 75 72 2d 3e 70 56  xColumn(pCur->pV
2d310 74 61 62 43 75 72 73 6f 72 2c 20 26 73 43 6f 6e  tabCursor, &sCon
2d320 74 65 78 74 2c 20 70 4f 70 2d 3e 70 32 29 3b 0a  text, pOp->p2);.
2d330 20 20 69 6d 70 6f 72 74 56 74 61 62 45 72 72 4d    importVtabErrM
2d340 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20  sg(p, pVtab);.  
2d350 69 66 28 20 73 43 6f 6e 74 65 78 74 2e 69 73 45  if( sContext.isE
2d360 72 72 6f 72 20 29 7b 0a 20 20 20 20 72 63 20 3d  rror ){.    rc =
2d370 20 73 43 6f 6e 74 65 78 74 2e 69 73 45 72 72 6f   sContext.isErro
2d380 72 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 43 6f 70  r;.  }..  /* Cop
2d390 79 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20  y the result of 
2d3a0 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20  the function to 
2d3b0 74 68 65 20 50 33 20 72 65 67 69 73 74 65 72 2e  the P3 register.
2d3c0 20 57 65 0a 20 20 2a 2a 20 64 6f 20 74 68 69 73   We.  ** do this
2d3d0 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 77   regardless of w
2d3e0 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 61 6e  hether or not an
2d3f0 20 65 72 72 6f 72 20 6f 63 63 75 72 72 65 64 20   error occurred 
2d400 74 6f 20 65 6e 73 75 72 65 20 61 6e 79 0a 20 20  to ensure any.  
2d410 2a 2a 20 64 79 6e 61 6d 69 63 20 61 6c 6c 6f 63  ** dynamic alloc
2d420 61 74 69 6f 6e 20 69 6e 20 73 43 6f 6e 74 65 78  ation in sContex
2d430 74 2e 73 20 28 61 20 4d 65 6d 20 73 74 72 75 63  t.s (a Mem struc
2d440 74 29 20 69 73 20 20 72 65 6c 65 61 73 65 64 2e  t) is  released.
2d450 0a 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56  .  */.  sqlite3V
2d460 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e  dbeChangeEncodin
2d470 67 28 26 73 43 6f 6e 74 65 78 74 2e 73 2c 20 65  g(&sContext.s, e
2d480 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 73 71 6c 69  ncoding);.  sqli
2d490 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28 70  te3VdbeMemMove(p
2d4a0 44 65 73 74 2c 20 26 73 43 6f 6e 74 65 78 74 2e  Dest, &sContext.
2d4b0 73 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54  s);.  REGISTER_T
2d4c0 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 44  RACE(pOp->p3, pD
2d4d0 65 73 74 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d  est);.  UPDATE_M
2d4e0 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 44 65 73  AX_BLOBSIZE(pDes
2d4f0 74 29 3b 0a 0a 20 20 69 66 28 20 73 71 6c 69 74  t);..  if( sqlit
2d500 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28  e3VdbeMemTooBig(
2d510 70 44 65 73 74 29 20 29 7b 0a 20 20 20 20 67 6f  pDest) ){.    go
2d520 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a  to too_big;.  }.
2d530 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
2d540 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
2d550 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f  _VIRTUALTABLE */
2d560 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
2d570 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
2d580 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 4e  LE./* Opcode: VN
2d590 65 78 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ext P1 P2 * * *.
2d5a0 2a 2a 0a 2a 2a 20 41 64 76 61 6e 63 65 20 76 69  **.** Advance vi
2d5b0 72 74 75 61 6c 20 74 61 62 6c 65 20 50 31 20 74  rtual table P1 t
2d5c0 6f 20 74 68 65 20 6e 65 78 74 20 72 6f 77 20 69  o the next row i
2d5d0 6e 20 69 74 73 20 72 65 73 75 6c 74 20 73 65 74  n its result set
2d5e0 20 61 6e 64 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20   and.** jump to 
2d5f0 69 6e 73 74 72 75 63 74 69 6f 6e 20 50 32 2e 20  instruction P2. 
2d600 20 4f 72 2c 20 69 66 20 74 68 65 20 76 69 72 74   Or, if the virt
2d610 75 61 6c 20 74 61 62 6c 65 20 68 61 73 20 72 65  ual table has re
2d620 61 63 68 65 64 0a 2a 2a 20 74 68 65 20 65 6e 64  ached.** the end
2d630 20 6f 66 20 69 74 73 20 72 65 73 75 6c 74 20 73   of its result s
2d640 65 74 2c 20 74 68 65 6e 20 66 61 6c 6c 20 74 68  et, then fall th
2d650 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78  rough to the nex
2d660 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  t instruction..*
2d670 2f 0a 63 61 73 65 20 4f 50 5f 56 4e 65 78 74 3a  /.case OP_VNext:
2d680 20 7b 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a   {   /* jump */.
2d690 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a    sqlite3_vtab *
2d6a0 70 56 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73  pVtab;.  const s
2d6b0 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70  qlite3_module *p
2d6c0 4d 6f 64 75 6c 65 3b 0a 20 20 69 6e 74 20 72 65  Module;.  int re
2d6d0 73 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  s;.  VdbeCursor 
2d6e0 2a 70 43 75 72 3b 0a 0a 20 20 72 65 73 20 3d 20  *pCur;..  res = 
2d6f0 30 3b 0a 20 20 70 43 75 72 20 3d 20 70 2d 3e 61  0;.  pCur = p->a
2d700 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
2d710 20 61 73 73 65 72 74 28 20 70 43 75 72 2d 3e 70   assert( pCur->p
2d720 56 74 61 62 43 75 72 73 6f 72 20 29 3b 0a 20 20  VtabCursor );.  
2d730 69 66 28 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f  if( pCur->nullRo
2d740 77 20 29 7b 0a 20 20 20 20 62 72 65 61 6b 3b 0a  w ){.    break;.
2d750 20 20 7d 0a 20 20 70 56 74 61 62 20 3d 20 70 43    }.  pVtab = pC
2d760 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 2d  ur->pVtabCursor-
2d770 3e 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c  >pVtab;.  pModul
2d780 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75  e = pVtab->pModu
2d790 6c 65 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4d  le;.  assert( pM
2d7a0 6f 64 75 6c 65 2d 3e 78 4e 65 78 74 20 29 3b 0a  odule->xNext );.
2d7b0 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65  .  /* Invoke the
2d7c0 20 78 4e 65 78 74 28 29 20 6d 65 74 68 6f 64 20   xNext() method 
2d7d0 6f 66 20 74 68 65 20 6d 6f 64 75 6c 65 2e 20 54  of the module. T
2d7e0 68 65 72 65 20 69 73 20 6e 6f 20 77 61 79 20 66  here is no way f
2d7f0 6f 72 20 74 68 65 0a 20 20 2a 2a 20 75 6e 64 65  or the.  ** unde
2d800 72 6c 79 69 6e 67 20 69 6d 70 6c 65 6d 65 6e 74  rlying implement
2d810 61 74 69 6f 6e 20 74 6f 20 72 65 74 75 72 6e 20  ation to return 
2d820 61 6e 20 65 72 72 6f 72 20 69 66 20 6f 6e 65 20  an error if one 
2d830 6f 63 63 75 72 73 20 64 75 72 69 6e 67 0a 20 20  occurs during.  
2d840 2a 2a 20 78 4e 65 78 74 28 29 2e 20 49 6e 73 74  ** xNext(). Inst
2d850 65 61 64 2c 20 69 66 20 61 6e 20 65 72 72 6f 72  ead, if an error
2d860 20 6f 63 63 75 72 73 2c 20 74 72 75 65 20 69 73   occurs, true is
2d870 20 72 65 74 75 72 6e 65 64 20 28 69 6e 64 69 63   returned (indic
2d880 61 74 69 6e 67 20 74 68 61 74 20 0a 20 20 2a 2a  ating that .  **
2d890 20 64 61 74 61 20 69 73 20 61 76 61 69 6c 61 62   data is availab
2d8a0 6c 65 29 20 61 6e 64 20 74 68 65 20 65 72 72 6f  le) and the erro
2d8b0 72 20 63 6f 64 65 20 72 65 74 75 72 6e 65 64 20  r code returned 
2d8c0 77 68 65 6e 20 78 43 6f 6c 75 6d 6e 20 6f 72 0a  when xColumn or.
2d8d0 20 20 2a 2a 20 73 6f 6d 65 20 6f 74 68 65 72 20    ** some other 
2d8e0 6d 65 74 68 6f 64 20 69 73 20 6e 65 78 74 20 69  method is next i
2d8f0 6e 76 6f 6b 65 64 20 6f 6e 20 74 68 65 20 73 61  nvoked on the sa
2d900 76 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  ve virtual table
2d910 20 63 75 72 73 6f 72 2e 0a 20 20 2a 2f 0a 20 20   cursor..  */.  
2d920 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64 20  p->inVtabMethod 
2d930 3d 20 31 3b 0a 20 20 72 63 20 3d 20 70 4d 6f 64  = 1;.  rc = pMod
2d940 75 6c 65 2d 3e 78 4e 65 78 74 28 70 43 75 72 2d  ule->xNext(pCur-
2d950 3e 70 56 74 61 62 43 75 72 73 6f 72 29 3b 0a 20  >pVtabCursor);. 
2d960 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64   p->inVtabMethod
2d970 20 3d 20 30 3b 0a 20 20 69 6d 70 6f 72 74 56 74   = 0;.  importVt
2d980 61 62 45 72 72 4d 73 67 28 70 2c 20 70 56 74 61  abErrMsg(p, pVta
2d990 62 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51  b);.  if( rc==SQ
2d9a0 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72  LITE_OK ){.    r
2d9b0 65 73 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 45  es = pModule->xE
2d9c0 6f 66 28 70 43 75 72 2d 3e 70 56 74 61 62 43 75  of(pCur->pVtabCu
2d9d0 72 73 6f 72 29 3b 0a 20 20 7d 0a 0a 20 20 69 66  rsor);.  }..  if
2d9e0 28 20 21 72 65 73 20 29 7b 0a 20 20 20 20 2f 2a  ( !res ){.    /*
2d9f0 20 49 66 20 74 68 65 72 65 20 69 73 20 64 61 74   If there is dat
2da00 61 2c 20 6a 75 6d 70 20 74 6f 20 50 32 20 2a 2f  a, jump to P2 */
2da10 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70  .    pc = pOp->p
2da20 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65  2 - 1;.  }.  bre
2da30 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ak;.}.#endif /* 
2da40 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
2da50 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66  UALTABLE */..#if
2da60 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
2da70 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a  _VIRTUALTABLE./*
2da80 20 4f 70 63 6f 64 65 3a 20 56 52 65 6e 61 6d 65   Opcode: VRename
2da90 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a   P1 * * P4 *.**.
2daa0 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74  ** P4 is a point
2dab0 65 72 20 74 6f 20 61 20 76 69 72 74 75 61 6c 20  er to a virtual 
2dac0 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20 61 6e  table object, an
2dad0 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74   sqlite3_vtab st
2dae0 72 75 63 74 75 72 65 2e 0a 2a 2a 20 54 68 69 73  ructure..** This
2daf0 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20   opcode invokes 
2db00 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  the correspondin
2db10 67 20 78 52 65 6e 61 6d 65 20 6d 65 74 68 6f 64  g xRename method
2db20 2e 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69  . The value.** i
2db30 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  n register P1 is
2db40 20 70 61 73 73 65 64 20 61 73 20 74 68 65 20 7a   passed as the z
2db50 4e 61 6d 65 20 61 72 67 75 6d 65 6e 74 20 74 6f  Name argument to
2db60 20 74 68 65 20 78 52 65 6e 61 6d 65 20 6d 65 74   the xRename met
2db70 68 6f 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  hod..*/.case OP_
2db80 56 52 65 6e 61 6d 65 3a 20 7b 0a 20 20 73 71 6c  VRename: {.  sql
2db90 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62  ite3_vtab *pVtab
2dba0 3b 0a 20 20 4d 65 6d 20 2a 70 4e 61 6d 65 3b 0a  ;.  Mem *pName;.
2dbb0 0a 20 20 70 56 74 61 62 20 3d 20 70 4f 70 2d 3e  .  pVtab = pOp->
2dbc0 70 34 2e 70 56 74 61 62 2d 3e 70 56 74 61 62 3b  p4.pVtab->pVtab;
2dbd0 0a 20 20 70 4e 61 6d 65 20 3d 20 26 61 4d 65 6d  .  pName = &aMem
2dbe0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
2dbf0 65 72 74 28 20 70 56 74 61 62 2d 3e 70 4d 6f 64  ert( pVtab->pMod
2dc00 75 6c 65 2d 3e 78 52 65 6e 61 6d 65 20 29 3b 0a  ule->xRename );.
2dc10 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
2dc20 61 6c 69 64 28 70 4e 61 6d 65 29 20 29 3b 0a 20  alid(pName) );. 
2dc30 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
2dc40 70 4f 70 2d 3e 70 31 2c 20 70 4e 61 6d 65 29 3b  pOp->p1, pName);
2dc50 0a 20 20 61 73 73 65 72 74 28 20 70 4e 61 6d 65  .  assert( pName
2dc60 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74  ->flags & MEM_St
2dc70 72 20 29 3b 0a 20 20 72 63 20 3d 20 70 56 74 61  r );.  rc = pVta
2dc80 62 2d 3e 70 4d 6f 64 75 6c 65 2d 3e 78 52 65 6e  b->pModule->xRen
2dc90 61 6d 65 28 70 56 74 61 62 2c 20 70 4e 61 6d 65  ame(pVtab, pName
2dca0 2d 3e 7a 29 3b 0a 20 20 69 6d 70 6f 72 74 56 74  ->z);.  importVt
2dcb0 61 62 45 72 72 4d 73 67 28 70 2c 20 70 56 74 61  abErrMsg(p, pVta
2dcc0 62 29 3b 0a 20 20 70 2d 3e 65 78 70 69 72 65 64  b);.  p->expired
2dcd0 20 3d 20 30 3b 0a 0a 20 20 62 72 65 61 6b 3b 0a   = 0;..  break;.
2dce0 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65  }.#endif..#ifnde
2dcf0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
2dd00 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70  RTUALTABLE./* Op
2dd10 63 6f 64 65 3a 20 56 55 70 64 61 74 65 20 50 31  code: VUpdate P1
2dd20 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a   P2 P3 P4 *.**.*
2dd30 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65  * P4 is a pointe
2dd40 72 20 74 6f 20 61 20 76 69 72 74 75 61 6c 20 74  r to a virtual t
2dd50 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20 61 6e 20  able object, an 
2dd60 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74 72  sqlite3_vtab str
2dd70 75 63 74 75 72 65 2e 0a 2a 2a 20 54 68 69 73 20  ucture..** This 
2dd80 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74  opcode invokes t
2dd90 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  he corresponding
2dda0 20 78 55 70 64 61 74 65 20 6d 65 74 68 6f 64 2e   xUpdate method.
2ddb0 20 50 32 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72   P2 values.** ar
2ddc0 65 20 63 6f 6e 74 69 67 75 6f 75 73 20 6d 65 6d  e contiguous mem
2ddd0 6f 72 79 20 63 65 6c 6c 73 20 73 74 61 72 74 69  ory cells starti
2dde0 6e 67 20 61 74 20 50 33 20 74 6f 20 70 61 73 73  ng at P3 to pass
2ddf0 20 74 6f 20 74 68 65 20 78 55 70 64 61 74 65 20   to the xUpdate 
2de00 0a 2a 2a 20 69 6e 76 6f 63 61 74 69 6f 6e 2e 20  .** invocation. 
2de10 54 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  The value in reg
2de20 69 73 74 65 72 20 28 50 33 2b 50 32 2d 31 29 20  ister (P3+P2-1) 
2de30 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74  corresponds to t
2de40 68 65 20 0a 2a 2a 20 70 32 74 68 20 65 6c 65 6d  he .** p2th elem
2de50 65 6e 74 20 6f 66 20 74 68 65 20 61 72 67 76 20  ent of the argv 
2de60 61 72 72 61 79 20 70 61 73 73 65 64 20 74 6f 20  array passed to 
2de70 78 55 70 64 61 74 65 2e 0a 2a 2a 0a 2a 2a 20 54  xUpdate..**.** T
2de80 68 65 20 78 55 70 64 61 74 65 20 6d 65 74 68 6f  he xUpdate metho
2de90 64 20 77 69 6c 6c 20 64 6f 20 61 20 44 45 4c 45  d will do a DELE
2dea0 54 45 20 6f 72 20 61 6e 20 49 4e 53 45 52 54 20  TE or an INSERT 
2deb0 6f 72 20 62 6f 74 68 2e 0a 2a 2a 20 54 68 65 20  or both..** The 
2dec0 61 72 67 76 5b 30 5d 20 65 6c 65 6d 65 6e 74 20  argv[0] element 
2ded0 28 77 68 69 63 68 20 63 6f 72 72 65 73 70 6f 6e  (which correspon
2dee0 64 73 20 74 6f 20 6d 65 6d 6f 72 79 20 63 65 6c  ds to memory cel
2def0 6c 20 50 33 29 0a 2a 2a 20 69 73 20 74 68 65 20  l P3).** is the 
2df00 72 6f 77 69 64 20 6f 66 20 61 20 72 6f 77 20 74  rowid of a row t
2df10 6f 20 64 65 6c 65 74 65 2e 20 20 49 66 20 61 72  o delete.  If ar
2df20 67 76 5b 30 5d 20 69 73 20 4e 55 4c 4c 20 74 68  gv[0] is NULL th
2df30 65 6e 20 6e 6f 20 0a 2a 2a 20 64 65 6c 65 74 69  en no .** deleti
2df40 6f 6e 20 6f 63 63 75 72 73 2e 20 20 54 68 65 20  on occurs.  The 
2df50 61 72 67 76 5b 31 5d 20 65 6c 65 6d 65 6e 74 20  argv[1] element 
2df60 69 73 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20  is the rowid of 
2df70 74 68 65 20 6e 65 77 20 0a 2a 2a 20 72 6f 77 2e  the new .** row.
2df80 20 20 54 68 69 73 20 63 61 6e 20 62 65 20 4e 55    This can be NU
2df90 4c 4c 20 74 6f 20 68 61 76 65 20 74 68 65 20 76  LL to have the v
2dfa0 69 72 74 75 61 6c 20 74 61 62 6c 65 20 73 65 6c  irtual table sel
2dfb0 65 63 74 20 74 68 65 20 6e 65 77 20 0a 2a 2a 20  ect the new .** 
2dfc0 72 6f 77 69 64 20 66 6f 72 20 69 74 73 65 6c 66  rowid for itself
2dfd0 2e 20 20 54 68 65 20 73 75 62 73 65 71 75 65 6e  .  The subsequen
2dfe0 74 20 65 6c 65 6d 65 6e 74 73 20 69 6e 20 74 68  t elements in th
2dff0 65 20 61 72 72 61 79 20 61 72 65 20 0a 2a 2a 20  e array are .** 
2e000 74 68 65 20 76 61 6c 75 65 73 20 6f 66 20 63 6f  the values of co
2e010 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 6e 65 77  lumns in the new
2e020 20 72 6f 77 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50   row..**.** If P
2e030 32 3d 3d 31 20 74 68 65 6e 20 6e 6f 20 69 6e 73  2==1 then no ins
2e040 65 72 74 20 69 73 20 70 65 72 66 6f 72 6d 65 64  ert is performed
2e050 2e 20 20 61 72 67 76 5b 30 5d 20 69 73 20 74 68  .  argv[0] is th
2e060 65 20 72 6f 77 69 64 20 6f 66 0a 2a 2a 20 61 20  e rowid of.** a 
2e070 72 6f 77 20 74 6f 20 64 65 6c 65 74 65 2e 0a 2a  row to delete..*
2e080 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 62 6f 6f  *.** P1 is a boo
2e090 6c 65 61 6e 20 66 6c 61 67 2e 20 49 66 20 69 74  lean flag. If it
2e0a0 20 69 73 20 73 65 74 20 74 6f 20 74 72 75 65 20   is set to true 
2e0b0 61 6e 64 20 74 68 65 20 78 55 70 64 61 74 65 20  and the xUpdate 
2e0c0 63 61 6c 6c 0a 2a 2a 20 69 73 20 73 75 63 63 65  call.** is succe
2e0d0 73 73 66 75 6c 2c 20 74 68 65 6e 20 74 68 65 20  ssful, then the 
2e0e0 76 61 6c 75 65 20 72 65 74 75 72 6e 65 64 20 62  value returned b
2e0f0 79 20 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69  y sqlite3_last_i
2e100 6e 73 65 72 74 5f 72 6f 77 69 64 28 29 20 0a 2a  nsert_rowid() .*
2e110 2a 20 69 73 20 73 65 74 20 74 6f 20 74 68 65 20  * is set to the 
2e120 76 61 6c 75 65 20 6f 66 20 74 68 65 20 72 6f 77  value of the row
2e130 69 64 20 66 6f 72 20 74 68 65 20 72 6f 77 20 6a  id for the row j
2e140 75 73 74 20 69 6e 73 65 72 74 65 64 2e 0a 2a 2f  ust inserted..*/
2e150 0a 63 61 73 65 20 4f 50 5f 56 55 70 64 61 74 65  .case OP_VUpdate
2e160 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74  : {.  sqlite3_vt
2e170 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 73 71 6c  ab *pVtab;.  sql
2e180 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f  ite3_module *pMo
2e190 64 75 6c 65 3b 0a 20 20 69 6e 74 20 6e 41 72 67  dule;.  int nArg
2e1a0 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 73 71 6c  ;.  int i;.  sql
2e1b0 69 74 65 5f 69 6e 74 36 34 20 72 6f 77 69 64 3b  ite_int64 rowid;
2e1c0 0a 20 20 4d 65 6d 20 2a 2a 61 70 41 72 67 3b 0a  .  Mem **apArg;.
2e1d0 20 20 4d 65 6d 20 2a 70 58 3b 0a 0a 20 20 70 56    Mem *pX;..  pV
2e1e0 74 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 56  tab = pOp->p4.pV
2e1f0 74 61 62 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4d  tab->pVtab;.  pM
2e200 6f 64 75 6c 65 20 3d 20 28 73 71 6c 69 74 65 33  odule = (sqlite3
2e210 5f 6d 6f 64 75 6c 65 20 2a 29 70 56 74 61 62 2d  _module *)pVtab-
2e220 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 6e 41 72 67  >pModule;.  nArg
2e230 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73   = pOp->p2;.  as
2e240 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70  sert( pOp->p4typ
2e250 65 3d 3d 50 34 5f 56 54 41 42 20 29 3b 0a 20 20  e==P4_VTAB );.  
2e260 69 66 28 20 41 4c 57 41 59 53 28 70 4d 6f 64 75  if( ALWAYS(pModu
2e270 6c 65 2d 3e 78 55 70 64 61 74 65 29 20 29 7b 0a  le->xUpdate) ){.
2e280 20 20 20 20 61 70 41 72 67 20 3d 20 70 2d 3e 61      apArg = p->a
2e290 70 41 72 67 3b 0a 20 20 20 20 70 58 20 3d 20 26  pArg;.    pX = &
2e2a0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
2e2b0 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 41     for(i=0; i<nA
2e2c0 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20  rg; i++){.      
2e2d0 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
2e2e0 69 64 28 70 58 29 20 29 3b 0a 20 20 20 20 20 20  id(pX) );.      
2e2f0 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
2e300 28 70 2c 20 70 58 29 3b 0a 20 20 20 20 20 20 73  (p, pX);.      s
2e310 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74 6f  qlite3VdbeMemSto
2e320 72 65 54 79 70 65 28 70 58 29 3b 0a 20 20 20 20  reType(pX);.    
2e330 20 20 61 70 41 72 67 5b 69 5d 20 3d 20 70 58 3b    apArg[i] = pX;
2e340 0a 20 20 20 20 20 20 70 58 2b 2b 3b 0a 20 20 20  .      pX++;.   
2e350 20 7d 0a 20 20 20 20 72 63 20 3d 20 70 4d 6f 64   }.    rc = pMod
2e360 75 6c 65 2d 3e 78 55 70 64 61 74 65 28 70 56 74  ule->xUpdate(pVt
2e370 61 62 2c 20 6e 41 72 67 2c 20 61 70 41 72 67 2c  ab, nArg, apArg,
2e380 20 26 72 6f 77 69 64 29 3b 0a 20 20 20 20 69 6d   &rowid);.    im
2e390 70 6f 72 74 56 74 61 62 45 72 72 4d 73 67 28 70  portVtabErrMsg(p
2e3a0 2c 20 70 56 74 61 62 29 3b 0a 20 20 20 20 69 66  , pVtab);.    if
2e3b0 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
2e3c0 26 26 20 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20  && pOp->p1 ){.  
2e3d0 20 20 20 20 61 73 73 65 72 74 28 20 6e 41 72 67      assert( nArg
2e3e0 3e 31 20 26 26 20 61 70 41 72 67 5b 30 5d 20 26  >1 && apArg[0] &
2e3f0 26 20 28 61 70 41 72 67 5b 30 5d 2d 3e 66 6c 61  & (apArg[0]->fla
2e400 67 73 26 4d 45 4d 5f 4e 75 6c 6c 29 20 29 3b 0a  gs&MEM_Null) );.
2e410 20 20 20 20 20 20 64 62 2d 3e 6c 61 73 74 52 6f        db->lastRo
2e420 77 69 64 20 3d 20 72 6f 77 69 64 3b 0a 20 20 20  wid = rowid;.   
2e430 20 7d 0a 20 20 20 20 70 2d 3e 6e 43 68 61 6e 67   }.    p->nChang
2e440 65 2b 2b 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  e++;.  }.  break
2e450 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ;.}.#endif /* SQ
2e460 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
2e470 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64  LTABLE */..#ifnd
2e480 65 66 20 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ef  SQLITE_OMIT_
2e490 50 41 47 45 52 5f 50 52 41 47 4d 41 53 0a 2f 2a  PAGER_PRAGMAS./*
2e4a0 20 4f 70 63 6f 64 65 3a 20 50 61 67 65 63 6f 75   Opcode: Pagecou
2e4b0 6e 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  nt P1 P2 * * *.*
2e4c0 2a 0a 2a 2a 20 57 72 69 74 65 20 74 68 65 20 63  *.** Write the c
2e4d0 75 72 72 65 6e 74 20 6e 75 6d 62 65 72 20 6f 66  urrent number of
2e4e0 20 70 61 67 65 73 20 69 6e 20 64 61 74 61 62 61   pages in databa
2e4f0 73 65 20 50 31 20 74 6f 20 6d 65 6d 6f 72 79 20  se P1 to memory 
2e500 63 65 6c 6c 20 50 32 2e 0a 2a 2f 0a 63 61 73 65  cell P2..*/.case
2e510 20 4f 50 5f 50 61 67 65 63 6f 75 6e 74 3a 20 7b   OP_Pagecount: {
2e520 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f              /* o
2e530 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a  ut2-prerelease *
2e540 2f 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20  /.  pOut->u.i = 
2e550 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74  sqlite3BtreeLast
2e560 50 61 67 65 28 64 62 2d 3e 61 44 62 5b 70 4f 70  Page(db->aDb[pOp
2e570 2d 3e 70 31 5d 2e 70 42 74 29 3b 0a 20 20 62 72  ->p1].pBt);.  br
2e580 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23  eak;.}.#endif..#
2e590 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2e5a0 49 54 5f 54 52 41 43 45 0a 2f 2a 20 4f 70 63 6f  IT_TRACE./* Opco
2e5b0 64 65 3a 20 54 72 61 63 65 20 2a 20 2a 20 2a 20  de: Trace * * * 
2e5c0 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 74 72  P4 *.**.** If tr
2e5d0 61 63 69 6e 67 20 69 73 20 65 6e 61 62 6c 65 64  acing is enabled
2e5e0 20 28 62 79 20 74 68 65 20 73 71 6c 69 74 65 33   (by the sqlite3
2e5f0 5f 74 72 61 63 65 28 29 29 20 69 6e 74 65 72 66  _trace()) interf
2e600 61 63 65 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 65  ace, then.** the
2e610 20 55 54 46 2d 38 20 73 74 72 69 6e 67 20 63 6f   UTF-8 string co
2e620 6e 74 61 69 6e 65 64 20 69 6e 20 50 34 20 69 73  ntained in P4 is
2e630 20 65 6d 69 74 74 65 64 20 6f 6e 20 74 68 65 20   emitted on the 
2e640 74 72 61 63 65 20 63 61 6c 6c 62 61 63 6b 2e 0a  trace callback..
2e650 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 72 61 63 65  */.case OP_Trace
2e660 3a 20 7b 0a 20 20 63 68 61 72 20 2a 7a 54 72 61  : {.  char *zTra
2e670 63 65 3b 0a 0a 20 20 7a 54 72 61 63 65 20 3d 20  ce;..  zTrace = 
2e680 28 70 4f 70 2d 3e 70 34 2e 7a 20 3f 20 70 4f 70  (pOp->p4.z ? pOp
2e690 2d 3e 70 34 2e 7a 20 3a 20 70 2d 3e 7a 53 71 6c  ->p4.z : p->zSql
2e6a0 29 3b 0a 20 20 69 66 28 20 7a 54 72 61 63 65 20  );.  if( zTrace 
2e6b0 29 7b 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 78  ){.    if( db->x
2e6c0 54 72 61 63 65 20 29 7b 0a 20 20 20 20 20 20 63  Trace ){.      c
2e6d0 68 61 72 20 2a 7a 20 3d 20 73 71 6c 69 74 65 33  har *z = sqlite3
2e6e0 56 64 62 65 45 78 70 61 6e 64 53 71 6c 28 70 2c  VdbeExpandSql(p,
2e6f0 20 7a 54 72 61 63 65 29 3b 0a 20 20 20 20 20 20   zTrace);.      
2e700 64 62 2d 3e 78 54 72 61 63 65 28 64 62 2d 3e 70  db->xTrace(db->p
2e710 54 72 61 63 65 41 72 67 2c 20 7a 29 3b 0a 20 20  TraceArg, z);.  
2e720 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65      sqlite3DbFre
2e730 65 28 64 62 2c 20 7a 29 3b 0a 20 20 20 20 7d 0a  e(db, z);.    }.
2e740 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
2e750 42 55 47 0a 20 20 20 20 69 66 28 20 28 64 62 2d  BUG.    if( (db-
2e760 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f  >flags & SQLITE_
2e770 53 71 6c 54 72 61 63 65 29 21 3d 30 20 29 7b 0a  SqlTrace)!=0 ){.
2e780 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 65 62        sqlite3Deb
2e790 75 67 50 72 69 6e 74 66 28 22 53 51 4c 2d 74 72  ugPrintf("SQL-tr
2e7a0 61 63 65 3a 20 25 73 5c 6e 22 2c 20 7a 54 72 61  ace: %s\n", zTra
2e7b0 63 65 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69  ce);.    }.#endi
2e7c0 66 20 2f 2a 20 53 51 4c 49 54 45 5f 44 45 42 55  f /* SQLITE_DEBU
2e7d0 47 20 2a 2f 0a 20 20 7d 0a 20 20 62 72 65 61 6b  G */.  }.  break
2e7e0 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 20  ;.}.#endif.../* 
2e7f0 4f 70 63 6f 64 65 3a 20 4e 6f 6f 70 20 2a 20 2a  Opcode: Noop * *
2e800 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 6f 20   * * *.**.** Do 
2e810 6e 6f 74 68 69 6e 67 2e 20 20 54 68 69 73 20 69  nothing.  This i
2e820 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 6f 66  nstruction is of
2e830 74 65 6e 20 75 73 65 66 75 6c 20 61 73 20 61 20  ten useful as a 
2e840 6a 75 6d 70 0a 2a 2a 20 64 65 73 74 69 6e 61 74  jump.** destinat
2e850 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 0a 2a 2a 20 54 68  ion..*/./*.** Th
2e860 65 20 6d 61 67 69 63 20 45 78 70 6c 61 69 6e 20  e magic Explain 
2e870 6f 70 63 6f 64 65 20 61 72 65 20 6f 6e 6c 79 20  opcode are only 
2e880 69 6e 73 65 72 74 65 64 20 77 68 65 6e 20 65 78  inserted when ex
2e890 70 6c 61 69 6e 3d 3d 32 20 28 77 68 69 63 68 0a  plain==2 (which.
2e8a0 2a 2a 20 69 73 20 74 6f 20 73 61 79 20 77 68 65  ** is to say whe
2e8b0 6e 20 74 68 65 20 45 58 50 4c 41 49 4e 20 51 55  n the EXPLAIN QU
2e8c0 45 52 59 20 50 4c 41 4e 20 73 79 6e 74 61 78 20  ERY PLAN syntax 
2e8d0 69 73 20 75 73 65 64 2e 29 0a 2a 2a 20 54 68 69  is used.).** Thi
2e8e0 73 20 6f 70 63 6f 64 65 20 72 65 63 6f 72 64 73  s opcode records
2e8f0 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 72 6f   information fro
2e900 6d 20 74 68 65 20 6f 70 74 69 6d 69 7a 65 72 2e  m the optimizer.
2e910 20 20 49 74 20 69 73 20 74 68 65 0a 2a 2a 20 74    It is the.** t
2e920 68 65 20 73 61 6d 65 20 61 73 20 61 20 6e 6f 2d  he same as a no-
2e930 6f 70 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65  op.  This opcode
2e940 73 6e 65 76 65 72 20 61 70 70 65 61 72 73 20 69  snever appears i
2e950 6e 20 61 20 72 65 61 6c 20 56 4d 20 70 72 6f 67  n a real VM prog
2e960 72 61 6d 2e 0a 2a 2f 0a 64 65 66 61 75 6c 74 3a  ram..*/.default:
2e970 20 7b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54   {          /* T
2e980 68 69 73 20 69 73 20 72 65 61 6c 6c 79 20 4f 50  his is really OP
2e990 5f 4e 6f 6f 70 20 61 6e 64 20 4f 50 5f 45 78 70  _Noop and OP_Exp
2e9a0 6c 61 69 6e 20 2a 2f 0a 20 20 61 73 73 65 72 74  lain */.  assert
2e9b0 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
2e9c0 50 5f 4e 6f 6f 70 20 7c 7c 20 70 4f 70 2d 3e 6f  P_Noop || pOp->o
2e9d0 70 63 6f 64 65 3d 3d 4f 50 5f 45 78 70 6c 61 69  pcode==OP_Explai
2e9e0 6e 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  n );.  break;.}.
2e9f0 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ./**************
2ea00 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2ea10 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2ea20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2ea30 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a  ***************.
2ea40 2a 2a 20 54 68 65 20 63 61 73 65 73 20 6f 66 20  ** The cases of 
2ea50 74 68 65 20 73 77 69 74 63 68 20 73 74 61 74 65  the switch state
2ea60 6d 65 6e 74 20 61 62 6f 76 65 20 74 68 69 73 20  ment above this 
2ea70 6c 69 6e 65 20 73 68 6f 75 6c 64 20 61 6c 6c 20  line should all 
2ea80 62 65 20 69 6e 64 65 6e 74 65 64 0a 2a 2a 20 62  be indented.** b
2ea90 79 20 36 20 73 70 61 63 65 73 2e 20 20 42 75 74  y 6 spaces.  But
2eaa0 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20 36   the left-most 6
2eab0 20 73 70 61 63 65 73 20 68 61 76 65 20 62 65 65   spaces have bee
2eac0 6e 20 72 65 6d 6f 76 65 64 20 74 6f 20 69 6d 70  n removed to imp
2ead0 72 6f 76 65 20 74 68 65 0a 2a 2a 20 72 65 61 64  rove the.** read
2eae0 61 62 69 6c 69 74 79 2e 20 20 46 72 6f 6d 20 74  ability.  From t
2eaf0 68 69 73 20 70 6f 69 6e 74 20 6f 6e 20 64 6f 77  his point on dow
2eb00 6e 2c 20 74 68 65 20 6e 6f 72 6d 61 6c 20 69 6e  n, the normal in
2eb10 64 65 6e 74 61 74 69 6f 6e 20 72 75 6c 65 73 20  dentation rules 
2eb20 61 72 65 0a 2a 2a 20 72 65 73 74 6f 72 65 64 2e  are.** restored.
2eb30 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .***************
2eb40 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2eb50 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2eb60 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2eb70 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a  **************/.
2eb80 20 20 20 20 7d 0a 0a 23 69 66 64 65 66 20 56 44      }..#ifdef VD
2eb90 42 45 5f 50 52 4f 46 49 4c 45 0a 20 20 20 20 7b  BE_PROFILE.    {
2eba0 0a 20 20 20 20 20 20 75 36 34 20 65 6c 61 70 73  .      u64 elaps
2ebb0 65 64 20 3d 20 73 71 6c 69 74 65 33 48 77 74 69  ed = sqlite3Hwti
2ebc0 6d 65 28 29 20 2d 20 73 74 61 72 74 3b 0a 20 20  me() - start;.  
2ebd0 20 20 20 20 70 4f 70 2d 3e 63 79 63 6c 65 73 20      pOp->cycles 
2ebe0 2b 3d 20 65 6c 61 70 73 65 64 3b 0a 20 20 20 20  += elapsed;.    
2ebf0 20 20 70 4f 70 2d 3e 63 6e 74 2b 2b 3b 0a 23 69    pOp->cnt++;.#i
2ec00 66 20 30 0a 20 20 20 20 20 20 20 20 66 70 72 69  f 0.        fpri
2ec10 6e 74 66 28 73 74 64 6f 75 74 2c 20 22 25 31 30  ntf(stdout, "%10
2ec20 6c 6c 75 20 22 2c 20 65 6c 61 70 73 65 64 29 3b  llu ", elapsed);
2ec30 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
2ec40 56 64 62 65 50 72 69 6e 74 4f 70 28 73 74 64 6f  VdbePrintOp(stdo
2ec50 75 74 2c 20 6f 72 69 67 50 63 2c 20 26 61 4f 70  ut, origPc, &aOp
2ec60 5b 6f 72 69 67 50 63 5d 29 3b 0a 23 65 6e 64 69  [origPc]);.#endi
2ec70 66 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 0a  f.    }.#endif..
2ec80 20 20 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f      /* The follo
2ec90 77 69 6e 67 20 63 6f 64 65 20 61 64 64 73 20 6e  wing code adds n
2eca0 6f 74 68 69 6e 67 20 74 6f 20 74 68 65 20 61 63  othing to the ac
2ecb0 74 75 61 6c 20 66 75 6e 63 74 69 6f 6e 61 6c 69  tual functionali
2ecc0 74 79 0a 20 20 20 20 2a 2a 20 6f 66 20 74 68 65  ty.    ** of the
2ecd0 20 70 72 6f 67 72 61 6d 2e 20 20 49 74 20 69 73   program.  It is
2ece0 20 6f 6e 6c 79 20 68 65 72 65 20 66 6f 72 20 74   only here for t
2ecf0 65 73 74 69 6e 67 20 61 6e 64 20 64 65 62 75 67  esting and debug
2ed00 67 69 6e 67 2e 0a 20 20 20 20 2a 2a 20 4f 6e 20  ging..    ** On 
2ed10 74 68 65 20 6f 74 68 65 72 20 68 61 6e 64 2c 20  the other hand, 
2ed20 69 74 20 64 6f 65 73 20 62 75 72 6e 20 43 50 55  it does burn CPU
2ed30 20 63 79 63 6c 65 73 20 65 76 65 72 79 20 74 69   cycles every ti
2ed40 6d 65 20 74 68 72 6f 75 67 68 0a 20 20 20 20 2a  me through.    *
2ed50 2a 20 74 68 65 20 65 76 61 6c 75 61 74 6f 72 20  * the evaluator 
2ed60 6c 6f 6f 70 2e 20 20 53 6f 20 77 65 20 63 61 6e  loop.  So we can
2ed70 20 6c 65 61 76 65 20 69 74 20 6f 75 74 20 77 68   leave it out wh
2ed80 65 6e 20 4e 44 45 42 55 47 20 69 73 20 64 65 66  en NDEBUG is def
2ed90 69 6e 65 64 2e 0a 20 20 20 20 2a 2f 0a 23 69 66  ined..    */.#if
2eda0 6e 64 65 66 20 4e 44 45 42 55 47 0a 20 20 20 20  ndef NDEBUG.    
2edb0 61 73 73 65 72 74 28 20 70 63 3e 3d 2d 31 20 26  assert( pc>=-1 &
2edc0 26 20 70 63 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 0a  & pc<p->nOp );..
2edd0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
2ede0 42 55 47 0a 20 20 20 20 69 66 28 20 70 2d 3e 74  BUG.    if( p->t
2edf0 72 61 63 65 20 29 7b 0a 20 20 20 20 20 20 69 66  race ){.      if
2ee00 28 20 72 63 21 3d 30 20 29 20 66 70 72 69 6e 74  ( rc!=0 ) fprint
2ee10 66 28 70 2d 3e 74 72 61 63 65 2c 22 72 63 3d 25  f(p->trace,"rc=%
2ee20 64 5c 6e 22 2c 72 63 29 3b 0a 20 20 20 20 20 20  d\n",rc);.      
2ee30 69 66 28 20 70 4f 70 2d 3e 6f 70 66 6c 61 67 73  if( pOp->opflags
2ee40 20 26 20 28 4f 50 46 4c 47 5f 4f 55 54 32 5f 50   & (OPFLG_OUT2_P
2ee50 52 45 52 45 4c 45 41 53 45 7c 4f 50 46 4c 47 5f  RERELEASE|OPFLG_
2ee60 4f 55 54 32 29 20 29 7b 0a 20 20 20 20 20 20 20  OUT2) ){.       
2ee70 20 72 65 67 69 73 74 65 72 54 72 61 63 65 28 70   registerTrace(p
2ee80 2d 3e 74 72 61 63 65 2c 20 70 4f 70 2d 3e 70 32  ->trace, pOp->p2
2ee90 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  , &aMem[pOp->p2]
2eea0 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  );.      }.     
2eeb0 20 69 66 28 20 70 4f 70 2d 3e 6f 70 66 6c 61 67   if( pOp->opflag
2eec0 73 20 26 20 4f 50 46 4c 47 5f 4f 55 54 33 20 29  s & OPFLG_OUT3 )
2eed0 7b 0a 20 20 20 20 20 20 20 20 72 65 67 69 73 74  {.        regist
2eee0 65 72 54 72 61 63 65 28 70 2d 3e 74 72 61 63 65  erTrace(p->trace
2eef0 2c 20 70 4f 70 2d 3e 70 33 2c 20 26 61 4d 65 6d  , pOp->p3, &aMem
2ef00 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20 20 20 20  [pOp->p3]);.    
2ef10 20 20 7d 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66    }.    }.#endif
2ef20 20 20 2f 2a 20 53 51 4c 49 54 45 5f 44 45 42 55    /* SQLITE_DEBU
2ef30 47 20 2a 2f 0a 23 65 6e 64 69 66 20 20 2f 2a 20  G */.#endif  /* 
2ef40 4e 44 45 42 55 47 20 2a 2f 0a 20 20 7d 20 20 2f  NDEBUG */.  }  /
2ef50 2a 20 54 68 65 20 65 6e 64 20 6f 66 20 74 68 65  * The end of the
2ef60 20 66 6f 72 28 3b 3b 29 20 6c 6f 6f 70 20 74 68   for(;;) loop th
2ef70 65 20 6c 6f 6f 70 73 20 74 68 72 6f 75 67 68 20  e loops through 
2ef80 6f 70 63 6f 64 65 73 20 2a 2f 0a 0a 20 20 2f 2a  opcodes */..  /*
2ef90 20 49 66 20 77 65 20 72 65 61 63 68 20 74 68 69   If we reach thi
2efa0 73 20 70 6f 69 6e 74 2c 20 69 74 20 6d 65 61 6e  s point, it mean
2efb0 73 20 74 68 61 74 20 65 78 65 63 75 74 69 6f 6e  s that execution
2efc0 20 69 73 20 66 69 6e 69 73 68 65 64 20 77 69 74   is finished wit
2efd0 68 0a 20 20 2a 2a 20 61 6e 20 65 72 72 6f 72 20  h.  ** an error 
2efe0 6f 66 20 73 6f 6d 65 20 6b 69 6e 64 2e 0a 20 20  of some kind..  
2eff0 2a 2f 0a 76 64 62 65 5f 65 72 72 6f 72 5f 68 61  */.vdbe_error_ha
2f000 6c 74 3a 0a 20 20 61 73 73 65 72 74 28 20 72 63  lt:.  assert( rc
2f010 20 29 3b 0a 20 20 70 2d 3e 72 63 20 3d 20 72 63   );.  p->rc = rc
2f020 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 73 71  ;.  testcase( sq
2f030 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69  lite3GlobalConfi
2f040 67 2e 78 4c 6f 67 21 3d 30 20 29 3b 0a 20 20 73  g.xLog!=0 );.  s
2f050 71 6c 69 74 65 33 5f 6c 6f 67 28 72 63 2c 20 22  qlite3_log(rc, "
2f060 73 74 61 74 65 6d 65 6e 74 20 61 62 6f 72 74 73  statement aborts
2f070 20 61 74 20 25 64 3a 20 5b 25 73 5d 20 25 73 22   at %d: [%s] %s"
2f080 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  , .             
2f090 20 20 20 20 20 20 70 63 2c 20 70 2d 3e 7a 53 71        pc, p->zSq
2f0a0 6c 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a  l, p->zErrMsg);.
2f0b0 20 20 73 71 6c 69 74 65 33 56 64 62 65 48 61 6c    sqlite3VdbeHal
2f0c0 74 28 70 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d  t(p);.  if( rc==
2f0d0 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d  SQLITE_IOERR_NOM
2f0e0 45 4d 20 29 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46  EM ) db->mallocF
2f0f0 61 69 6c 65 64 20 3d 20 31 3b 0a 20 20 72 63 20  ailed = 1;.  rc 
2f100 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a  = SQLITE_ERROR;.
2f110 20 20 69 66 28 20 72 65 73 65 74 53 63 68 65 6d    if( resetSchem
2f120 61 4f 6e 46 61 75 6c 74 20 29 20 73 71 6c 69 74  aOnFault ) sqlit
2f130 65 33 52 65 73 65 74 49 6e 74 65 72 6e 61 6c 53  e3ResetInternalS
2f140 63 68 65 6d 61 28 64 62 2c 20 30 29 3b 0a 0a 20  chema(db, 0);.. 
2f150 20 2f 2a 20 54 68 69 73 20 69 73 20 74 68 65 20   /* This is the 
2f160 6f 6e 6c 79 20 77 61 79 20 6f 75 74 20 6f 66 20  only way out of 
2f170 74 68 69 73 20 70 72 6f 63 65 64 75 72 65 2e 20  this procedure. 
2f180 20 57 65 20 68 61 76 65 20 74 6f 0a 20 20 2a 2a   We have to.  **
2f190 20 72 65 6c 65 61 73 65 20 74 68 65 20 6d 75 74   release the mut
2f1a0 65 78 65 73 20 6f 6e 20 62 74 72 65 65 73 20 74  exes on btrees t
2f1b0 68 61 74 20 77 65 72 65 20 61 63 71 75 69 72 65  hat were acquire
2f1c0 64 20 61 74 20 74 68 65 0a 20 20 2a 2a 20 74 6f  d at the.  ** to
2f1d0 70 2e 20 2a 2f 0a 76 64 62 65 5f 72 65 74 75 72  p. */.vdbe_retur
2f1e0 6e 3a 0a 20 20 73 71 6c 69 74 65 33 42 74 72 65  n:.  sqlite3Btre
2f1f0 65 4d 75 74 65 78 41 72 72 61 79 4c 65 61 76 65  eMutexArrayLeave
2f200 28 26 70 2d 3e 61 4d 75 74 65 78 29 3b 0a 20 20  (&p->aMutex);.  
2f210 72 65 74 75 72 6e 20 72 63 3b 0a 0a 20 20 2f 2a  return rc;..  /*
2f220 20 4a 75 6d 70 20 74 6f 20 68 65 72 65 20 69 66   Jump to here if
2f230 20 61 20 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f   a string or blo
2f240 62 20 6c 61 72 67 65 72 20 74 68 61 6e 20 53 51  b larger than SQ
2f250 4c 49 54 45 5f 4d 41 58 5f 4c 45 4e 47 54 48 0a  LITE_MAX_LENGTH.
2f260 20 20 2a 2a 20 69 73 20 65 6e 63 6f 75 6e 74 65    ** is encounte
2f270 72 65 64 2e 0a 20 20 2a 2f 0a 74 6f 6f 5f 62 69  red..  */.too_bi
2f280 67 3a 0a 20 20 73 71 6c 69 74 65 33 53 65 74 53  g:.  sqlite3SetS
2f290 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73  tring(&p->zErrMs
2f2a0 67 2c 20 64 62 2c 20 22 73 74 72 69 6e 67 20 6f  g, db, "string o
2f2b0 72 20 62 6c 6f 62 20 74 6f 6f 20 62 69 67 22 29  r blob too big")
2f2c0 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f  ;.  rc = SQLITE_
2f2d0 54 4f 4f 42 49 47 3b 0a 20 20 67 6f 74 6f 20 76  TOOBIG;.  goto v
2f2e0 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a  dbe_error_halt;.
2f2f0 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65  .  /* Jump to he
2f300 72 65 20 69 66 20 61 20 6d 61 6c 6c 6f 63 28 29  re if a malloc()
2f310 20 66 61 69 6c 73 2e 0a 20 20 2a 2f 0a 6e 6f 5f   fails..  */.no_
2f320 6d 65 6d 3a 0a 20 20 64 62 2d 3e 6d 61 6c 6c 6f  mem:.  db->mallo
2f330 63 46 61 69 6c 65 64 20 3d 20 31 3b 0a 20 20 73  cFailed = 1;.  s
2f340 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28  qlite3SetString(
2f350 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c  &p->zErrMsg, db,
2f360 20 22 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79 22   "out of memory"
2f370 29 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45  );.  rc = SQLITE
2f380 5f 4e 4f 4d 45 4d 3b 0a 20 20 67 6f 74 6f 20 76  _NOMEM;.  goto v
2f390 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a  dbe_error_halt;.
2f3a0 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65  .  /* Jump to he
2f3b0 72 65 20 66 6f 72 20 61 6e 79 20 6f 74 68 65 72  re for any other
2f3c0 20 6b 69 6e 64 20 6f 66 20 66 61 74 61 6c 20 65   kind of fatal e
2f3d0 72 72 6f 72 2e 20 20 54 68 65 20 22 72 63 22 20  rror.  The "rc" 
2f3e0 76 61 72 69 61 62 6c 65 0a 20 20 2a 2a 20 73 68  variable.  ** sh
2f3f0 6f 75 6c 64 20 68 6f 6c 64 20 74 68 65 20 65 72  ould hold the er
2f400 72 6f 72 20 6e 75 6d 62 65 72 2e 0a 20 20 2a 2f  ror number..  */
2f410 0a 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72  .abort_due_to_er
2f420 72 6f 72 3a 0a 20 20 61 73 73 65 72 74 28 20 70  ror:.  assert( p
2f430 2d 3e 7a 45 72 72 4d 73 67 3d 3d 30 20 29 3b 0a  ->zErrMsg==0 );.
2f440 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63    if( db->malloc
2f450 46 61 69 6c 65 64 20 29 20 72 63 20 3d 20 53 51  Failed ) rc = SQ
2f460 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 69 66  LITE_NOMEM;.  if
2f470 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 49 4f 45  ( rc!=SQLITE_IOE
2f480 52 52 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20 20  RR_NOMEM ){.    
2f490 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67  sqlite3SetString
2f4a0 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62  (&p->zErrMsg, db
2f4b0 2c 20 22 25 73 22 2c 20 73 71 6c 69 74 65 33 45  , "%s", sqlite3E
2f4c0 72 72 53 74 72 28 72 63 29 29 3b 0a 20 20 7d 0a  rrStr(rc));.  }.
2f4d0 20 20 67 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f    goto vdbe_erro
2f4e0 72 5f 68 61 6c 74 3b 0a 0a 20 20 2f 2a 20 4a 75  r_halt;..  /* Ju
2f4f0 6d 70 20 74 6f 20 68 65 72 65 20 69 66 20 74 68  mp to here if th
2f500 65 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72  e sqlite3_interr
2f510 75 70 74 28 29 20 41 50 49 20 73 65 74 73 20 74  upt() API sets t
2f520 68 65 20 69 6e 74 65 72 72 75 70 74 0a 20 20 2a  he interrupt.  *
2f530 2a 20 66 6c 61 67 2e 0a 20 20 2a 2f 0a 61 62 6f  * flag..  */.abo
2f540 72 74 5f 64 75 65 5f 74 6f 5f 69 6e 74 65 72 72  rt_due_to_interr
2f550 75 70 74 3a 0a 20 20 61 73 73 65 72 74 28 20 64  upt:.  assert( d
2f560 62 2d 3e 75 31 2e 69 73 49 6e 74 65 72 72 75 70  b->u1.isInterrup
2f570 74 65 64 20 29 3b 0a 20 20 72 63 20 3d 20 53 51  ted );.  rc = SQ
2f580 4c 49 54 45 5f 49 4e 54 45 52 52 55 50 54 3b 0a  LITE_INTERRUPT;.
2f590 20 20 70 2d 3e 72 63 20 3d 20 72 63 3b 0a 20 20    p->rc = rc;.  
2f5a0 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67  sqlite3SetString
2f5b0 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62  (&p->zErrMsg, db
2f5c0 2c 20 22 25 73 22 2c 20 73 71 6c 69 74 65 33 45  , "%s", sqlite3E
2f5d0 72 72 53 74 72 28 72 63 29 29 3b 0a 20 20 67 6f  rrStr(rc));.  go
2f5e0 74 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f 68 61  to vdbe_error_ha
2f5f0 6c 74 3b 0a 7d 0a                                lt;.}.