/ Hex Artifact Content
Login

Artifact d975adcef86051b6b51c5d2394dd2288e0b0ca81:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f  ******.** The co
0180: 64 65 20 69 6e 20 74 68 69 73 20 66 69 6c 65 20  de in this file 
0190: 69 6d 70 6c 65 6d 65 6e 74 73 20 65 78 65 63 75  implements execu
01a0: 74 69 6f 6e 20 6d 65 74 68 6f 64 20 6f 66 20 74  tion method of t
01b0: 68 65 20 0a 2a 2a 20 56 69 72 74 75 61 6c 20 44  he .** Virtual D
01c0: 61 74 61 62 61 73 65 20 45 6e 67 69 6e 65 20 28  atabase Engine (
01d0: 56 44 42 45 29 2e 20 20 41 20 73 65 70 61 72 61  VDBE).  A separa
01e0: 74 65 20 66 69 6c 65 20 28 22 76 64 62 65 61 75  te file ("vdbeau
01f0: 78 2e 63 22 29 0a 2a 2a 20 68 61 6e 64 6c 65 73  x.c").** handles
0200: 20 68 6f 75 73 65 6b 65 65 70 69 6e 67 20 64 65   housekeeping de
0210: 74 61 69 6c 73 20 73 75 63 68 20 61 73 20 63 72  tails such as cr
0220: 65 61 74 69 6e 67 20 61 6e 64 20 64 65 6c 65 74  eating and delet
0230: 69 6e 67 0a 2a 2a 20 56 44 42 45 20 69 6e 73 74  ing.** VDBE inst
0240: 61 6e 63 65 73 2e 20 20 54 68 69 73 20 66 69 6c  ances.  This fil
0250: 65 20 69 73 20 73 6f 6c 65 6c 79 20 69 6e 74 65  e is solely inte
0260: 72 65 73 74 65 64 20 69 6e 20 65 78 65 63 75 74  rested in execut
0270: 69 6e 67 0a 2a 2a 20 74 68 65 20 56 44 42 45 20  ing.** the VDBE 
0280: 70 72 6f 67 72 61 6d 2e 0a 2a 2a 0a 2a 2a 20 49  program..**.** I
0290: 6e 20 74 68 65 20 65 78 74 65 72 6e 61 6c 20 69  n the external i
02a0: 6e 74 65 72 66 61 63 65 2c 20 61 6e 20 22 73 71  nterface, an "sq
02b0: 6c 69 74 65 33 5f 73 74 6d 74 2a 22 20 69 73 20  lite3_stmt*" is 
02c0: 61 6e 20 6f 70 61 71 75 65 20 70 6f 69 6e 74 65  an opaque pointe
02d0: 72 0a 2a 2a 20 74 6f 20 61 20 56 44 42 45 2e 0a  r.** to a VDBE..
02e0: 2a 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 20 70 61  **.** The SQL pa
02f0: 72 73 65 72 20 67 65 6e 65 72 61 74 65 73 20 61  rser generates a
0300: 20 70 72 6f 67 72 61 6d 20 77 68 69 63 68 20 69   program which i
0310: 73 20 74 68 65 6e 20 65 78 65 63 75 74 65 64 20  s then executed 
0320: 62 79 0a 2a 2a 20 74 68 65 20 56 44 42 45 20 74  by.** the VDBE t
0330: 6f 20 64 6f 20 74 68 65 20 77 6f 72 6b 20 6f 66  o do the work of
0340: 20 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65   the SQL stateme
0350: 6e 74 2e 20 20 56 44 42 45 20 70 72 6f 67 72 61  nt.  VDBE progra
0360: 6d 73 20 61 72 65 20 0a 2a 2a 20 73 69 6d 69 6c  ms are .** simil
0370: 61 72 20 69 6e 20 66 6f 72 6d 20 74 6f 20 61 73  ar in form to as
0380: 73 65 6d 62 6c 79 20 6c 61 6e 67 75 61 67 65 2e  sembly language.
0390: 20 20 54 68 65 20 70 72 6f 67 72 61 6d 20 63 6f    The program co
03a0: 6e 73 69 73 74 73 20 6f 66 0a 2a 2a 20 61 20 6c  nsists of.** a l
03b0: 69 6e 65 61 72 20 73 65 71 75 65 6e 63 65 20 6f  inear sequence o
03c0: 66 20 6f 70 65 72 61 74 69 6f 6e 73 2e 20 20 45  f operations.  E
03d0: 61 63 68 20 6f 70 65 72 61 74 69 6f 6e 20 68 61  ach operation ha
03e0: 73 20 61 6e 20 6f 70 63 6f 64 65 20 0a 2a 2a 20  s an opcode .** 
03f0: 61 6e 64 20 35 20 6f 70 65 72 61 6e 64 73 2e 20  and 5 operands. 
0400: 20 4f 70 65 72 61 6e 64 73 20 50 31 2c 20 50 32   Operands P1, P2
0410: 2c 20 61 6e 64 20 50 33 20 61 72 65 20 69 6e 74  , and P3 are int
0420: 65 67 65 72 73 2e 20 20 4f 70 65 72 61 6e 64 20  egers.  Operand 
0430: 50 34 20 0a 2a 2a 20 69 73 20 61 20 6e 75 6c 6c  P4 .** is a null
0440: 2d 74 65 72 6d 69 6e 61 74 65 64 20 73 74 72 69  -terminated stri
0450: 6e 67 2e 20 20 4f 70 65 72 61 6e 64 20 50 35 20  ng.  Operand P5 
0460: 69 73 20 61 6e 20 75 6e 73 69 67 6e 65 64 20 63  is an unsigned c
0470: 68 61 72 61 63 74 65 72 2e 0a 2a 2a 20 46 65 77  haracter..** Few
0480: 20 6f 70 63 6f 64 65 73 20 75 73 65 20 61 6c 6c   opcodes use all
0490: 20 35 20 6f 70 65 72 61 6e 64 73 2e 0a 2a 2a 0a   5 operands..**.
04a0: 2a 2a 20 43 6f 6d 70 75 74 61 74 69 6f 6e 20 72  ** Computation r
04b0: 65 73 75 6c 74 73 20 61 72 65 20 73 74 6f 72 65  esults are store
04c0: 64 20 6f 6e 20 61 20 73 65 74 20 6f 66 20 72 65  d on a set of re
04d0: 67 69 73 74 65 72 73 20 6e 75 6d 62 65 72 65 64  gisters numbered
04e0: 20 62 65 67 69 6e 6e 69 6e 67 0a 2a 2a 20 77 69   beginning.** wi
04f0: 74 68 20 31 20 61 6e 64 20 67 6f 69 6e 67 20 75  th 1 and going u
0500: 70 20 74 6f 20 56 64 62 65 2e 6e 4d 65 6d 2e 20  p to Vdbe.nMem. 
0510: 20 45 61 63 68 20 72 65 67 69 73 74 65 72 20 63   Each register c
0520: 61 6e 20 73 74 6f 72 65 0a 2a 2a 20 65 69 74 68  an store.** eith
0530: 65 72 20 61 6e 20 69 6e 74 65 67 65 72 2c 20 61  er an integer, a
0540: 20 6e 75 6c 6c 2d 74 65 72 6d 69 6e 61 74 65 64   null-terminated
0550: 20 73 74 72 69 6e 67 2c 20 61 20 66 6c 6f 61 74   string, a float
0560: 69 6e 67 20 70 6f 69 6e 74 0a 2a 2a 20 6e 75 6d  ing point.** num
0570: 62 65 72 2c 20 6f 72 20 74 68 65 20 53 51 4c 20  ber, or the SQL 
0580: 22 4e 55 4c 4c 22 20 76 61 6c 75 65 2e 20 20 41  "NULL" value.  A
0590: 6e 20 69 6d 70 6c 69 63 69 74 20 63 6f 6e 76 65  n implicit conve
05a0: 72 73 69 6f 6e 20 66 72 6f 6d 20 6f 6e 65 0a 2a  rsion from one.*
05b0: 2a 20 74 79 70 65 20 74 6f 20 74 68 65 20 6f 74  * type to the ot
05c0: 68 65 72 20 6f 63 63 75 72 73 20 61 73 20 6e 65  her occurs as ne
05d0: 63 65 73 73 61 72 79 2e 0a 2a 2a 20 0a 2a 2a 20  cessary..** .** 
05e0: 4d 6f 73 74 20 6f 66 20 74 68 65 20 63 6f 64 65  Most of the code
05f0: 20 69 6e 20 74 68 69 73 20 66 69 6c 65 20 69 73   in this file is
0600: 20 74 61 6b 65 6e 20 75 70 20 62 79 20 74 68 65   taken up by the
0610: 20 73 71 6c 69 74 65 33 56 64 62 65 45 78 65 63   sqlite3VdbeExec
0620: 28 29 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 20 77  ().** function w
0630: 68 69 63 68 20 64 6f 65 73 20 74 68 65 20 77 6f  hich does the wo
0640: 72 6b 20 6f 66 20 69 6e 74 65 72 70 72 65 74 69  rk of interpreti
0650: 6e 67 20 61 20 56 44 42 45 20 70 72 6f 67 72 61  ng a VDBE progra
0660: 6d 2e 0a 2a 2a 20 42 75 74 20 6f 74 68 65 72 20  m..** But other 
0670: 72 6f 75 74 69 6e 65 73 20 61 72 65 20 61 6c 73  routines are als
0680: 6f 20 70 72 6f 76 69 64 65 64 20 74 6f 20 68 65  o provided to he
0690: 6c 70 20 69 6e 20 62 75 69 6c 64 69 6e 67 20 75  lp in building u
06a0: 70 0a 2a 2a 20 61 20 70 72 6f 67 72 61 6d 20 69  p.** a program i
06b0: 6e 73 74 72 75 63 74 69 6f 6e 20 62 79 20 69 6e  nstruction by in
06c0: 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  struction..**.**
06d0: 20 56 61 72 69 6f 75 73 20 73 63 72 69 70 74 73   Various scripts
06e0: 20 73 63 61 6e 20 74 68 69 73 20 73 6f 75 72 63   scan this sourc
06f0: 65 20 66 69 6c 65 20 69 6e 20 6f 72 64 65 72 20  e file in order 
0700: 74 6f 20 67 65 6e 65 72 61 74 65 20 48 54 4d 4c  to generate HTML
0710: 0a 2a 2a 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  .** documentatio
0720: 6e 2c 20 68 65 61 64 65 72 73 20 66 69 6c 65 73  n, headers files
0730: 2c 20 6f 72 20 6f 74 68 65 72 20 64 65 72 69 76  , or other deriv
0740: 65 64 20 66 69 6c 65 73 2e 20 20 54 68 65 20 66  ed files.  The f
0750: 6f 72 6d 61 74 74 69 6e 67 0a 2a 2a 20 6f 66 20  ormatting.** of 
0760: 74 68 65 20 63 6f 64 65 20 69 6e 20 74 68 69 73  the code in this
0770: 20 66 69 6c 65 20 69 73 2c 20 74 68 65 72 65 66   file is, theref
0780: 6f 72 65 2c 20 69 6d 70 6f 72 74 61 6e 74 2e 20  ore, important. 
0790: 20 53 65 65 20 6f 74 68 65 72 20 63 6f 6d 6d 65   See other comme
07a0: 6e 74 73 0a 2a 2a 20 69 6e 20 74 68 69 73 20 66  nts.** in this f
07b0: 69 6c 65 20 66 6f 72 20 64 65 74 61 69 6c 73 2e  ile for details.
07c0: 20 20 49 66 20 69 6e 20 64 6f 75 62 74 2c 20 64    If in doubt, d
07d0: 6f 20 6e 6f 74 20 64 65 76 69 61 74 65 20 66 72  o not deviate fr
07e0: 6f 6d 20 65 78 69 73 74 69 6e 67 0a 2a 2a 20 63  om existing.** c
07f0: 6f 6d 6d 65 6e 74 69 6e 67 20 61 6e 64 20 69 6e  ommenting and in
0800: 64 65 6e 74 61 74 69 6f 6e 20 70 72 61 63 74 69  dentation practi
0810: 63 65 73 20 77 68 65 6e 20 63 68 61 6e 67 69 6e  ces when changin
0820: 67 20 6f 72 20 61 64 64 69 6e 67 20 63 6f 64 65  g or adding code
0830: 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 73  ..*/.#include "s
0840: 71 6c 69 74 65 49 6e 74 2e 68 22 0a 23 69 6e 63  qliteInt.h".#inc
0850: 6c 75 64 65 20 22 76 64 62 65 49 6e 74 2e 68 22  lude "vdbeInt.h"
0860: 0a 0a 2f 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 74  ../*.** Invoke t
0870: 68 69 73 20 6d 61 63 72 6f 20 6f 6e 20 6d 65 6d  his macro on mem
0880: 6f 72 79 20 63 65 6c 6c 73 20 6a 75 73 74 20 70  ory cells just p
0890: 72 69 6f 72 20 74 6f 20 63 68 61 6e 67 69 6e 67  rior to changing
08a0: 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 6f 66   the.** value of
08b0: 20 74 68 65 20 63 65 6c 6c 2e 20 20 54 68 69 73   the cell.  This
08c0: 20 6d 61 63 72 6f 20 76 65 72 69 66 69 65 73 20   macro verifies 
08d0: 74 68 61 74 20 73 68 61 6c 6c 6f 77 20 63 6f 70  that shallow cop
08e0: 69 65 73 20 61 72 65 0a 2a 2a 20 6e 6f 74 20 6d  ies are.** not m
08f0: 69 73 75 73 65 64 2e 0a 2a 2f 0a 23 69 66 64 65  isused..*/.#ifde
0900: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 23  f SQLITE_DEBUG.#
0910: 20 64 65 66 69 6e 65 20 6d 65 6d 41 62 6f 75 74   define memAbout
0920: 54 6f 43 68 61 6e 67 65 28 50 2c 4d 29 20 73 71  ToChange(P,M) sq
0930: 6c 69 74 65 33 56 64 62 65 4d 65 6d 50 72 65 70  lite3VdbeMemPrep
0940: 61 72 65 54 6f 43 68 61 6e 67 65 28 50 2c 4d 29  areToChange(P,M)
0950: 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
0960: 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
0970: 28 50 2c 4d 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  (P,M).#endif../*
0980: 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
0990: 67 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c  g global variabl
09a0: 65 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64  e is incremented
09b0: 20 65 76 65 72 79 20 74 69 6d 65 20 61 20 63 75   every time a cu
09c0: 72 73 6f 72 0a 2a 2a 20 6d 6f 76 65 73 2c 20 65  rsor.** moves, e
09d0: 69 74 68 65 72 20 62 79 20 74 68 65 20 4f 50 5f  ither by the OP_
09e0: 53 65 65 6b 58 58 2c 20 4f 50 5f 4e 65 78 74 2c  SeekXX, OP_Next,
09f0: 20 6f 72 20 4f 50 5f 50 72 65 76 20 6f 70 63 6f   or OP_Prev opco
0a00: 64 65 73 2e 20 20 54 68 65 20 74 65 73 74 0a 2a  des.  The test.*
0a10: 2a 20 70 72 6f 63 65 64 75 72 65 73 20 75 73 65  * procedures use
0a20: 20 74 68 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f   this informatio
0a30: 6e 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 74  n to make sure t
0a40: 68 61 74 20 69 6e 64 69 63 65 73 20 61 72 65 0a  hat indices are.
0a50: 2a 2a 20 77 6f 72 6b 69 6e 67 20 63 6f 72 72 65  ** working corre
0a60: 63 74 6c 79 2e 20 20 54 68 69 73 20 76 61 72 69  ctly.  This vari
0a70: 61 62 6c 65 20 68 61 73 20 6e 6f 20 66 75 6e 63  able has no func
0a80: 74 69 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20  tion other than 
0a90: 74 6f 0a 2a 2a 20 68 65 6c 70 20 76 65 72 69 66  to.** help verif
0aa0: 79 20 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70  y the correct op
0ab0: 65 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c  eration of the l
0ac0: 69 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65  ibrary..*/.#ifde
0ad0: 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e  f SQLITE_TEST.in
0ae0: 74 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68  t sqlite3_search
0af0: 5f 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64  _count = 0;.#end
0b00: 69 66 0a 0a 2f 2a 0a 2a 2a 20 57 68 65 6e 20 74  if../*.** When t
0b10: 68 69 73 20 67 6c 6f 62 61 6c 20 76 61 72 69 61  his global varia
0b20: 62 6c 65 20 69 73 20 70 6f 73 69 74 69 76 65 2c  ble is positive,
0b30: 20 69 74 20 67 65 74 73 20 64 65 63 72 65 6d 65   it gets decreme
0b40: 6e 74 65 64 20 6f 6e 63 65 20 62 65 66 6f 72 65  nted once before
0b50: 0a 2a 2a 20 65 61 63 68 20 69 6e 73 74 72 75 63  .** each instruc
0b60: 74 69 6f 6e 20 69 6e 20 74 68 65 20 56 44 42 45  tion in the VDBE
0b70: 2e 20 20 57 68 65 6e 20 72 65 61 63 68 65 73 20  .  When reaches 
0b80: 7a 65 72 6f 2c 20 74 68 65 20 75 31 2e 69 73 49  zero, the u1.isI
0b90: 6e 74 65 72 72 75 70 74 65 64 0a 2a 2a 20 66 69  nterrupted.** fi
0ba0: 65 6c 64 20 6f 66 20 74 68 65 20 73 71 6c 69 74  eld of the sqlit
0bb0: 65 33 20 73 74 72 75 63 74 75 72 65 20 69 73 20  e3 structure is 
0bc0: 73 65 74 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  set in order to 
0bd0: 73 69 6d 75 6c 61 74 65 20 61 6e 64 20 69 6e 74  simulate and int
0be0: 65 72 72 75 70 74 2e 0a 2a 2a 0a 2a 2a 20 54 68  errupt..**.** Th
0bf0: 69 73 20 66 61 63 69 6c 69 74 79 20 69 73 20 75  is facility is u
0c00: 73 65 64 20 66 6f 72 20 74 65 73 74 69 6e 67 20  sed for testing 
0c10: 70 75 72 70 6f 73 65 73 20 6f 6e 6c 79 2e 20 20  purposes only.  
0c20: 49 74 20 64 6f 65 73 20 6e 6f 74 20 66 75 6e 63  It does not func
0c30: 74 69 6f 6e 0a 2a 2a 20 69 6e 20 61 6e 20 6f 72  tion.** in an or
0c40: 64 69 6e 61 72 79 20 62 75 69 6c 64 2e 0a 2a 2f  dinary build..*/
0c50: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54  .#ifdef SQLITE_T
0c60: 45 53 54 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f  EST.int sqlite3_
0c70: 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74 20  interrupt_count 
0c80: 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  = 0;.#endif../*.
0c90: 2a 2a 20 54 68 65 20 6e 65 78 74 20 67 6c 6f 62  ** The next glob
0ca0: 61 6c 20 76 61 72 69 61 62 6c 65 20 69 73 20 69  al variable is i
0cb0: 6e 63 72 65 6d 65 6e 74 65 64 20 65 61 63 68 20  ncremented each 
0cc0: 74 79 70 65 20 74 68 65 20 4f 50 5f 53 6f 72 74  type the OP_Sort
0cd0: 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 65 78   opcode.** is ex
0ce0: 65 63 75 74 65 64 2e 20 20 54 68 65 20 74 65 73  ecuted.  The tes
0cf0: 74 20 70 72 6f 63 65 64 75 72 65 73 20 75 73 65  t procedures use
0d00: 20 74 68 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f   this informatio
0d10: 6e 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 74  n to make sure t
0d20: 68 61 74 0a 2a 2a 20 73 6f 72 74 69 6e 67 20 69  hat.** sorting i
0d30: 73 20 6f 63 63 75 72 72 69 6e 67 20 6f 72 20 6e  s occurring or n
0d40: 6f 74 20 6f 63 63 75 72 72 69 6e 67 20 61 74 20  ot occurring at 
0d50: 61 70 70 72 6f 70 72 69 61 74 65 20 74 69 6d 65  appropriate time
0d60: 73 2e 20 20 20 54 68 69 73 20 76 61 72 69 61 62  s.   This variab
0d70: 6c 65 0a 2a 2a 20 68 61 73 20 6e 6f 20 66 75 6e  le.** has no fun
0d80: 63 74 69 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e  ction other than
0d90: 20 74 6f 20 68 65 6c 70 20 76 65 72 69 66 79 20   to help verify 
0da0: 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65 72  the correct oper
0db0: 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20  ation of the.** 
0dc0: 6c 69 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64  library..*/.#ifd
0dd0: 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 69  ef SQLITE_TEST.i
0de0: 6e 74 20 73 71 6c 69 74 65 33 5f 73 6f 72 74 5f  nt sqlite3_sort_
0df0: 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64 69  count = 0;.#endi
0e00: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 65 78  f../*.** The nex
0e10: 74 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c  t global variabl
0e20: 65 20 72 65 63 6f 72 64 73 20 74 68 65 20 73 69  e records the si
0e30: 7a 65 20 6f 66 20 74 68 65 20 6c 61 72 67 65 73  ze of the larges
0e40: 74 20 4d 45 4d 5f 42 6c 6f 62 0a 2a 2a 20 6f 72  t MEM_Blob.** or
0e50: 20 4d 45 4d 5f 53 74 72 20 74 68 61 74 20 68 61   MEM_Str that ha
0e60: 73 20 62 65 65 6e 20 75 73 65 64 20 62 79 20 61  s been used by a
0e70: 20 56 44 42 45 20 6f 70 63 6f 64 65 2e 20 20 54   VDBE opcode.  T
0e80: 68 65 20 74 65 73 74 20 70 72 6f 63 65 64 75 72  he test procedur
0e90: 65 73 0a 2a 2a 20 75 73 65 20 74 68 69 73 20 69  es.** use this i
0ea0: 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 6f 20 6d 61  nformation to ma
0eb0: 6b 65 20 73 75 72 65 20 74 68 61 74 20 74 68 65  ke sure that the
0ec0: 20 7a 65 72 6f 2d 62 6c 6f 62 20 66 75 6e 63 74   zero-blob funct
0ed0: 69 6f 6e 61 6c 69 74 79 0a 2a 2a 20 69 73 20 77  ionality.** is w
0ee0: 6f 72 6b 69 6e 67 20 63 6f 72 72 65 63 74 6c 79  orking correctly
0ef0: 2e 20 20 20 54 68 69 73 20 76 61 72 69 61 62 6c  .   This variabl
0f00: 65 20 68 61 73 20 6e 6f 20 66 75 6e 63 74 69 6f  e has no functio
0f10: 6e 20 6f 74 68 65 72 20 74 68 61 6e 20 74 6f 0a  n other than to.
0f20: 2a 2a 20 68 65 6c 70 20 76 65 72 69 66 79 20 74  ** help verify t
0f30: 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65 72 61  he correct opera
0f40: 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c 69 62 72  tion of the libr
0f50: 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  ary..*/.#ifdef S
0f60: 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74 20 73  QLITE_TEST.int s
0f70: 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62 73  qlite3_max_blobs
0f80: 69 7a 65 20 3d 20 30 3b 0a 73 74 61 74 69 63 20  ize = 0;.static 
0f90: 76 6f 69 64 20 75 70 64 61 74 65 4d 61 78 42 6c  void updateMaxBl
0fa0: 6f 62 73 69 7a 65 28 4d 65 6d 20 2a 70 29 7b 0a  obsize(Mem *p){.
0fb0: 20 20 69 66 28 20 28 70 2d 3e 66 6c 61 67 73 20    if( (p->flags 
0fc0: 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42  & (MEM_Str|MEM_B
0fd0: 6c 6f 62 29 29 21 3d 30 20 26 26 20 70 2d 3e 6e  lob))!=0 && p->n
0fe0: 3e 73 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f  >sqlite3_max_blo
0ff0: 62 73 69 7a 65 20 29 7b 0a 20 20 20 20 73 71 6c  bsize ){.    sql
1000: 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62 73 69 7a  ite3_max_blobsiz
1010: 65 20 3d 20 70 2d 3e 6e 3b 0a 20 20 7d 0a 7d 0a  e = p->n;.  }.}.
1020: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
1030: 65 20 6e 65 78 74 20 67 6c 6f 62 61 6c 20 76 61  e next global va
1040: 72 69 61 62 6c 65 20 69 73 20 69 6e 63 72 65 6d  riable is increm
1050: 65 6e 74 65 64 20 65 61 63 68 20 74 79 70 65 20  ented each type 
1060: 74 68 65 20 4f 50 5f 46 6f 75 6e 64 20 6f 70 63  the OP_Found opc
1070: 6f 64 65 0a 2a 2a 20 69 73 20 65 78 65 63 75 74  ode.** is execut
1080: 65 64 2e 20 54 68 69 73 20 69 73 20 75 73 65 64  ed. This is used
1090: 20 74 6f 20 74 65 73 74 20 77 68 65 74 68 65 72   to test whether
10a0: 20 6f 72 20 6e 6f 74 20 74 68 65 20 66 6f 72 65   or not the fore
10b0: 69 67 6e 20 6b 65 79 0a 2a 2a 20 6f 70 65 72 61  ign key.** opera
10c0: 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 65 64  tion implemented
10d0: 20 75 73 69 6e 67 20 4f 50 5f 46 6b 49 73 5a 65   using OP_FkIsZe
10e0: 72 6f 20 69 73 20 77 6f 72 6b 69 6e 67 2e 20 54  ro is working. T
10f0: 68 69 73 20 76 61 72 69 61 62 6c 65 0a 2a 2a 20  his variable.** 
1100: 68 61 73 20 6e 6f 20 66 75 6e 63 74 69 6f 6e 20  has no function 
1110: 6f 74 68 65 72 20 74 68 61 6e 20 74 6f 20 68 65  other than to he
1120: 6c 70 20 76 65 72 69 66 79 20 74 68 65 20 63 6f  lp verify the co
1130: 72 72 65 63 74 20 6f 70 65 72 61 74 69 6f 6e 20  rrect operation 
1140: 6f 66 20 74 68 65 0a 2a 2a 20 6c 69 62 72 61 72  of the.** librar
1150: 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  y..*/.#ifdef SQL
1160: 49 54 45 5f 54 45 53 54 0a 69 6e 74 20 73 71 6c  ITE_TEST.int sql
1170: 69 74 65 33 5f 66 6f 75 6e 64 5f 63 6f 75 6e 74  ite3_found_count
1180: 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a   = 0;.#endif../*
1190: 0a 2a 2a 20 54 65 73 74 20 61 20 72 65 67 69 73  .** Test a regis
11a0: 74 65 72 20 74 6f 20 73 65 65 20 69 66 20 69 74  ter to see if it
11b0: 20 65 78 63 65 65 64 73 20 74 68 65 20 63 75 72   exceeds the cur
11c0: 72 65 6e 74 20 6d 61 78 69 6d 75 6d 20 62 6c 6f  rent maximum blo
11d0: 62 20 73 69 7a 65 2e 0a 2a 2a 20 49 66 20 69 74  b size..** If it
11e0: 20 64 6f 65 73 2c 20 72 65 63 6f 72 64 20 74 68   does, record th
11f0: 65 20 6e 65 77 20 6d 61 78 69 6d 75 6d 20 62 6c  e new maximum bl
1200: 6f 62 20 73 69 7a 65 2e 0a 2a 2f 0a 23 69 66 20  ob size..*/.#if 
1210: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54  defined(SQLITE_T
1220: 45 53 54 29 20 26 26 20 21 64 65 66 69 6e 65 64  EST) && !defined
1230: 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49  (SQLITE_OMIT_BUI
1240: 4c 54 49 4e 5f 54 45 53 54 29 0a 23 20 64 65 66  LTIN_TEST).# def
1250: 69 6e 65 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  ine UPDATE_MAX_B
1260: 4c 4f 42 53 49 5a 45 28 50 29 20 20 75 70 64 61  LOBSIZE(P)  upda
1270: 74 65 4d 61 78 42 6c 6f 62 73 69 7a 65 28 50 29  teMaxBlobsize(P)
1280: 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
1290: 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53  UPDATE_MAX_BLOBS
12a0: 49 5a 45 28 50 29 0a 23 65 6e 64 69 66 0a 0a 2f  IZE(P).#endif../
12b0: 2a 0a 2a 2a 20 43 6f 6e 76 65 72 74 20 74 68 65  *.** Convert the
12c0: 20 67 69 76 65 6e 20 72 65 67 69 73 74 65 72 20   given register 
12d0: 69 6e 74 6f 20 61 20 73 74 72 69 6e 67 20 69 66  into a string if
12e0: 20 69 74 20 69 73 6e 27 74 20 6f 6e 65 0a 2a 2a   it isn't one.**
12f0: 20 61 6c 72 65 61 64 79 2e 20 52 65 74 75 72 6e   already. Return
1300: 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 61 20 6d   non-zero if a m
1310: 61 6c 6c 6f 63 28 29 20 66 61 69 6c 73 2e 0a 2a  alloc() fails..*
1320: 2f 0a 23 64 65 66 69 6e 65 20 53 74 72 69 6e 67  /.#define String
1330: 69 66 79 28 50 2c 20 65 6e 63 29 20 5c 0a 20 20  ify(P, enc) \.  
1340: 20 69 66 28 28 28 50 29 2d 3e 66 6c 61 67 73 26   if(((P)->flags&
1350: 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f  (MEM_Str|MEM_Blo
1360: 62 29 29 3d 3d 30 20 26 26 20 73 71 6c 69 74 65  b))==0 && sqlite
1370: 33 56 64 62 65 4d 65 6d 53 74 72 69 6e 67 69 66  3VdbeMemStringif
1380: 79 28 50 2c 65 6e 63 29 29 20 5c 0a 20 20 20 20  y(P,enc)) \.    
1390: 20 7b 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 20   { goto no_mem; 
13a0: 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 65 70 68 65  }../*.** An ephe
13b0: 6d 65 72 61 6c 20 73 74 72 69 6e 67 20 76 61 6c  meral string val
13c0: 75 65 20 28 73 69 67 6e 69 66 69 65 64 20 62 79  ue (signified by
13d0: 20 74 68 65 20 4d 45 4d 5f 45 70 68 65 6d 20 66   the MEM_Ephem f
13e0: 6c 61 67 29 20 63 6f 6e 74 61 69 6e 73 0a 2a 2a  lag) contains.**
13f0: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20   a pointer to a 
1400: 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f  dynamically allo
1410: 63 61 74 65 64 20 73 74 72 69 6e 67 20 77 68 65  cated string whe
1420: 72 65 20 73 6f 6d 65 20 6f 74 68 65 72 20 65 6e  re some other en
1430: 74 69 74 79 0a 2a 2a 20 69 73 20 72 65 73 70 6f  tity.** is respo
1440: 6e 73 69 62 6c 65 20 66 6f 72 20 64 65 61 6c 6c  nsible for deall
1450: 6f 63 61 74 69 6e 67 20 74 68 61 74 20 73 74 72  ocating that str
1460: 69 6e 67 2e 20 20 42 65 63 61 75 73 65 20 74 68  ing.  Because th
1470: 65 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 64 6f  e register.** do
1480: 65 73 20 6e 6f 74 20 63 6f 6e 74 72 6f 6c 20 74  es not control t
1490: 68 65 20 73 74 72 69 6e 67 2c 20 69 74 20 6d 69  he string, it mi
14a0: 67 68 74 20 62 65 20 64 65 6c 65 74 65 64 20 77  ght be deleted w
14b0: 69 74 68 6f 75 74 20 74 68 65 20 72 65 67 69 73  ithout the regis
14c0: 74 65 72 0a 2a 2a 20 6b 6e 6f 77 69 6e 67 20 69  ter.** knowing i
14d0: 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 72 6f  t..**.** This ro
14e0: 75 74 69 6e 65 20 63 6f 6e 76 65 72 74 73 20 61  utine converts a
14f0: 6e 20 65 70 68 65 6d 65 72 61 6c 20 73 74 72 69  n ephemeral stri
1500: 6e 67 20 69 6e 74 6f 20 61 20 64 79 6e 61 6d 69  ng into a dynami
1510: 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 0a  cally allocated.
1520: 2a 2a 20 73 74 72 69 6e 67 20 74 68 61 74 20 74  ** string that t
1530: 68 65 20 72 65 67 69 73 74 65 72 20 69 74 73 65  he register itse
1540: 6c 66 20 63 6f 6e 74 72 6f 6c 73 2e 20 20 49 6e  lf controls.  In
1550: 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 69 74   other words, it
1560: 0a 2a 2a 20 63 6f 6e 76 65 72 74 73 20 61 6e 20  .** converts an 
1570: 4d 45 4d 5f 45 70 68 65 6d 20 73 74 72 69 6e 67  MEM_Ephem string
1580: 20 69 6e 74 6f 20 61 6e 20 4d 45 4d 5f 44 79 6e   into an MEM_Dyn
1590: 20 73 74 72 69 6e 67 2e 0a 2a 2f 0a 23 64 65 66   string..*/.#def
15a0: 69 6e 65 20 44 65 65 70 68 65 6d 65 72 61 6c 69  ine Deephemerali
15b0: 7a 65 28 50 29 20 5c 0a 20 20 20 69 66 28 20 28  ze(P) \.   if( (
15c0: 28 50 29 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 45  (P)->flags&MEM_E
15d0: 70 68 65 6d 29 21 3d 30 20 5c 0a 20 20 20 20 20  phem)!=0 \.     
15e0: 20 20 26 26 20 73 71 6c 69 74 65 33 56 64 62 65    && sqlite3Vdbe
15f0: 4d 65 6d 4d 61 6b 65 57 72 69 74 65 61 62 6c 65  MemMakeWriteable
1600: 28 50 29 20 29 7b 20 67 6f 74 6f 20 6e 6f 5f 6d  (P) ){ goto no_m
1610: 65 6d 3b 7d 0a 0a 2f 2a 0a 2a 2a 20 43 61 6c 6c  em;}../*.** Call
1620: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 45   sqlite3VdbeMemE
1630: 78 70 61 6e 64 42 6c 6f 62 28 29 20 6f 6e 20 74  xpandBlob() on t
1640: 68 65 20 73 75 70 70 6c 69 65 64 20 76 61 6c 75  he supplied valu
1650: 65 20 28 74 79 70 65 20 4d 65 6d 2a 29 0a 2a 2a  e (type Mem*).**
1660: 20 50 20 69 66 20 72 65 71 75 69 72 65 64 2e 0a   P if required..
1670: 2a 2f 0a 23 64 65 66 69 6e 65 20 45 78 70 61 6e  */.#define Expan
1680: 64 42 6c 6f 62 28 50 29 20 28 28 28 50 29 2d 3e  dBlob(P) (((P)->
1690: 66 6c 61 67 73 26 4d 45 4d 5f 5a 65 72 6f 29 3f  flags&MEM_Zero)?
16a0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 45 78  sqlite3VdbeMemEx
16b0: 70 61 6e 64 42 6c 6f 62 28 50 29 3a 30 29 0a 0a  pandBlob(P):0)..
16c0: 2f 2a 0a 2a 2a 20 41 72 67 75 6d 65 6e 74 20 70  /*.** Argument p
16d0: 4d 65 6d 20 70 6f 69 6e 74 73 20 61 74 20 61 20  Mem points at a 
16e0: 72 65 67 69 73 74 65 72 20 74 68 61 74 20 77 69  register that wi
16f0: 6c 6c 20 62 65 20 70 61 73 73 65 64 20 74 6f 20  ll be passed to 
1700: 61 0a 2a 2a 20 75 73 65 72 2d 64 65 66 69 6e 65  a.** user-define
1710: 64 20 66 75 6e 63 74 69 6f 6e 20 6f 72 20 72 65  d function or re
1720: 74 75 72 6e 65 64 20 74 6f 20 74 68 65 20 75 73  turned to the us
1730: 65 72 20 61 73 20 74 68 65 20 72 65 73 75 6c 74  er as the result
1740: 20 6f 66 20 61 20 71 75 65 72 79 2e 0a 2a 2a 20   of a query..** 
1750: 54 68 69 73 20 72 6f 75 74 69 6e 65 20 73 65 74  This routine set
1760: 73 20 74 68 65 20 70 4d 65 6d 2d 3e 74 79 70 65  s the pMem->type
1770: 20 76 61 72 69 61 62 6c 65 20 75 73 65 64 20 62   variable used b
1780: 79 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 61  y the sqlite3_va
1790: 6c 75 65 5f 2a 28 29 20 0a 2a 2a 20 72 6f 75 74  lue_*() .** rout
17a0: 69 6e 65 73 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71  ines..*/.void sq
17b0: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74 6f 72  lite3VdbeMemStor
17c0: 65 54 79 70 65 28 4d 65 6d 20 2a 70 4d 65 6d 29  eType(Mem *pMem)
17d0: 7b 0a 20 20 69 6e 74 20 66 6c 61 67 73 20 3d 20  {.  int flags = 
17e0: 70 4d 65 6d 2d 3e 66 6c 61 67 73 3b 0a 20 20 69  pMem->flags;.  i
17f0: 66 28 20 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  f( flags & MEM_N
1800: 75 6c 6c 20 29 7b 0a 20 20 20 20 70 4d 65 6d 2d  ull ){.    pMem-
1810: 3e 74 79 70 65 20 3d 20 53 51 4c 49 54 45 5f 4e  >type = SQLITE_N
1820: 55 4c 4c 3b 0a 20 20 7d 0a 20 20 65 6c 73 65 20  ULL;.  }.  else 
1830: 69 66 28 20 66 6c 61 67 73 20 26 20 4d 45 4d 5f  if( flags & MEM_
1840: 49 6e 74 20 29 7b 0a 20 20 20 20 70 4d 65 6d 2d  Int ){.    pMem-
1850: 3e 74 79 70 65 20 3d 20 53 51 4c 49 54 45 5f 49  >type = SQLITE_I
1860: 4e 54 45 47 45 52 3b 0a 20 20 7d 0a 20 20 65 6c  NTEGER;.  }.  el
1870: 73 65 20 69 66 28 20 66 6c 61 67 73 20 26 20 4d  se if( flags & M
1880: 45 4d 5f 52 65 61 6c 20 29 7b 0a 20 20 20 20 70  EM_Real ){.    p
1890: 4d 65 6d 2d 3e 74 79 70 65 20 3d 20 53 51 4c 49  Mem->type = SQLI
18a0: 54 45 5f 46 4c 4f 41 54 3b 0a 20 20 7d 0a 20 20  TE_FLOAT;.  }.  
18b0: 65 6c 73 65 20 69 66 28 20 66 6c 61 67 73 20 26  else if( flags &
18c0: 20 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20 20   MEM_Str ){.    
18d0: 70 4d 65 6d 2d 3e 74 79 70 65 20 3d 20 53 51 4c  pMem->type = SQL
18e0: 49 54 45 5f 54 45 58 54 3b 0a 20 20 7d 65 6c 73  ITE_TEXT;.  }els
18f0: 65 7b 0a 20 20 20 20 70 4d 65 6d 2d 3e 74 79 70  e{.    pMem->typ
1900: 65 20 3d 20 53 51 4c 49 54 45 5f 42 4c 4f 42 3b  e = SQLITE_BLOB;
1910: 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6c  .  }.}../*.** Al
1920: 6c 6f 63 61 74 65 20 56 64 62 65 43 75 72 73 6f  locate VdbeCurso
1930: 72 20 6e 75 6d 62 65 72 20 69 43 75 72 2e 20 20  r number iCur.  
1940: 52 65 74 75 72 6e 20 61 20 70 6f 69 6e 74 65 72  Return a pointer
1950: 20 74 6f 20 69 74 2e 20 20 52 65 74 75 72 6e 20   to it.  Return 
1960: 4e 55 4c 4c 0a 2a 2a 20 69 66 20 77 65 20 72 75  NULL.** if we ru
1970: 6e 20 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79 2e  n out of memory.
1980: 0a 2a 2f 0a 73 74 61 74 69 63 20 56 64 62 65 43  .*/.static VdbeC
1990: 75 72 73 6f 72 20 2a 61 6c 6c 6f 63 61 74 65 43  ursor *allocateC
19a0: 75 72 73 6f 72 28 0a 20 20 56 64 62 65 20 2a 70  ursor(.  Vdbe *p
19b0: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ,              /
19c0: 2a 20 54 68 65 20 76 69 72 74 75 61 6c 20 6d 61  * The virtual ma
19d0: 63 68 69 6e 65 20 2a 2f 0a 20 20 69 6e 74 20 69  chine */.  int i
19e0: 43 75 72 2c 20 20 20 20 20 20 20 20 20 20 20 20  Cur,            
19f0: 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20 74 68 65   /* Index of the
1a00: 20 6e 65 77 20 56 64 62 65 43 75 72 73 6f 72 20   new VdbeCursor 
1a10: 2a 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 2c  */.  int nField,
1a20: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1a30: 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20 69  mber of fields i
1a40: 6e 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69  n the table or i
1a50: 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 69 44  ndex */.  int iD
1a60: 62 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  b,              
1a70: 2f 2a 20 57 68 65 6e 20 64 61 74 61 62 61 73 65  /* When database
1a80: 20 74 68 65 20 63 75 72 73 6f 72 20 62 65 6c 6f   the cursor belo
1a90: 6e 67 73 20 74 6f 2c 20 6f 72 20 2d 31 20 2a 2f  ngs to, or -1 */
1aa0: 0a 20 20 69 6e 74 20 69 73 42 74 72 65 65 43 75  .  int isBtreeCu
1ab0: 72 73 6f 72 20 20 20 20 20 2f 2a 20 54 72 75 65  rsor     /* True
1ac0: 20 66 6f 72 20 42 2d 54 72 65 65 2e 20 20 46 61   for B-Tree.  Fa
1ad0: 6c 73 65 20 66 6f 72 20 70 73 65 75 64 6f 2d 74  lse for pseudo-t
1ae0: 61 62 6c 65 20 6f 72 20 76 74 61 62 20 2a 2f 0a  able or vtab */.
1af0: 29 7b 0a 20 20 2f 2a 20 46 69 6e 64 20 74 68 65  ){.  /* Find the
1b00: 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74 68 61   memory cell tha
1b10: 74 20 77 69 6c 6c 20 62 65 20 75 73 65 64 20 74  t will be used t
1b20: 6f 20 73 74 6f 72 65 20 74 68 65 20 62 6c 6f 62  o store the blob
1b30: 20 6f 66 20 6d 65 6d 6f 72 79 0a 20 20 2a 2a 20   of memory.  ** 
1b40: 72 65 71 75 69 72 65 64 20 66 6f 72 20 74 68 69  required for thi
1b50: 73 20 56 64 62 65 43 75 72 73 6f 72 20 73 74 72  s VdbeCursor str
1b60: 75 63 74 75 72 65 2e 20 49 74 20 69 73 20 63 6f  ucture. It is co
1b70: 6e 76 65 6e 69 65 6e 74 20 74 6f 20 75 73 65 20  nvenient to use 
1b80: 61 20 0a 20 20 2a 2a 20 76 64 62 65 20 6d 65 6d  a .  ** vdbe mem
1b90: 6f 72 79 20 63 65 6c 6c 20 74 6f 20 6d 61 6e 61  ory cell to mana
1ba0: 67 65 20 74 68 65 20 6d 65 6d 6f 72 79 20 61 6c  ge the memory al
1bb0: 6c 6f 63 61 74 69 6f 6e 20 72 65 71 75 69 72 65  location require
1bc0: 64 20 66 6f 72 20 61 0a 20 20 2a 2a 20 56 64 62  d for a.  ** Vdb
1bd0: 65 43 75 72 73 6f 72 20 73 74 72 75 63 74 75 72  eCursor structur
1be0: 65 20 66 6f 72 20 74 68 65 20 66 6f 6c 6c 6f 77  e for the follow
1bf0: 69 6e 67 20 72 65 61 73 6f 6e 73 3a 0a 20 20 2a  ing reasons:.  *
1c00: 2a 0a 20 20 2a 2a 20 20 20 2a 20 53 6f 6d 65 74  *.  **   * Somet
1c10: 69 6d 65 73 20 63 75 72 73 6f 72 20 6e 75 6d 62  imes cursor numb
1c20: 65 72 73 20 61 72 65 20 75 73 65 64 20 66 6f 72  ers are used for
1c30: 20 61 20 63 6f 75 70 6c 65 20 6f 66 20 64 69 66   a couple of dif
1c40: 66 65 72 65 6e 74 0a 20 20 2a 2a 20 20 20 20 20  ferent.  **     
1c50: 70 75 72 70 6f 73 65 73 20 69 6e 20 61 20 76 64  purposes in a vd
1c60: 62 65 20 70 72 6f 67 72 61 6d 2e 20 54 68 65 20  be program. The 
1c70: 64 69 66 66 65 72 65 6e 74 20 75 73 65 73 20 6d  different uses m
1c80: 69 67 68 74 20 72 65 71 75 69 72 65 0a 20 20 2a  ight require.  *
1c90: 2a 20 20 20 20 20 64 69 66 66 65 72 65 6e 74 20  *     different 
1ca0: 73 69 7a 65 64 20 61 6c 6c 6f 63 61 74 69 6f 6e  sized allocation
1cb0: 73 2e 20 4d 65 6d 6f 72 79 20 63 65 6c 6c 73 20  s. Memory cells 
1cc0: 70 72 6f 76 69 64 65 20 67 72 6f 77 61 62 6c 65  provide growable
1cd0: 0a 20 20 2a 2a 20 20 20 20 20 61 6c 6c 6f 63 61  .  **     alloca
1ce0: 74 69 6f 6e 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a  tions..  **.  **
1cf0: 20 20 20 2a 20 57 68 65 6e 20 75 73 69 6e 67 20     * When using 
1d00: 45 4e 41 42 4c 45 5f 4d 45 4d 4f 52 59 5f 4d 41  ENABLE_MEMORY_MA
1d10: 4e 41 47 45 4d 45 4e 54 2c 20 6d 65 6d 6f 72 79  NAGEMENT, memory
1d20: 20 63 65 6c 6c 20 62 75 66 66 65 72 73 20 63 61   cell buffers ca
1d30: 6e 0a 20 20 2a 2a 20 20 20 20 20 62 65 20 66 72  n.  **     be fr
1d40: 65 65 64 20 6c 61 7a 69 6c 79 20 76 69 61 20 74  eed lazily via t
1d50: 68 65 20 73 71 6c 69 74 65 33 5f 72 65 6c 65 61  he sqlite3_relea
1d60: 73 65 5f 6d 65 6d 6f 72 79 28 29 20 41 50 49 2e  se_memory() API.
1d70: 20 54 68 69 73 0a 20 20 2a 2a 20 20 20 20 20 6d   This.  **     m
1d80: 69 6e 69 6d 69 7a 65 73 20 74 68 65 20 6e 75 6d  inimizes the num
1d90: 62 65 72 20 6f 66 20 6d 61 6c 6c 6f 63 20 63 61  ber of malloc ca
1da0: 6c 6c 73 20 6d 61 64 65 20 62 79 20 74 68 65 20  lls made by the 
1db0: 73 79 73 74 65 6d 2e 0a 20 20 2a 2a 0a 20 20 2a  system..  **.  *
1dc0: 2a 20 4d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 66  * Memory cells f
1dd0: 6f 72 20 63 75 72 73 6f 72 73 20 61 72 65 20 61  or cursors are a
1de0: 6c 6c 6f 63 61 74 65 64 20 61 74 20 74 68 65 20  llocated at the 
1df0: 74 6f 70 20 6f 66 20 74 68 65 20 61 64 64 72 65  top of the addre
1e00: 73 73 0a 20 20 2a 2a 20 73 70 61 63 65 2e 20 4d  ss.  ** space. M
1e10: 65 6d 6f 72 79 20 63 65 6c 6c 20 28 70 2d 3e 6e  emory cell (p->n
1e20: 4d 65 6d 29 20 63 6f 72 72 65 73 70 6f 6e 64 73  Mem) corresponds
1e30: 20 74 6f 20 63 75 72 73 6f 72 20 30 2e 20 53 70   to cursor 0. Sp
1e40: 61 63 65 20 66 6f 72 0a 20 20 2a 2a 20 63 75 72  ace for.  ** cur
1e50: 73 6f 72 20 31 20 69 73 20 6d 61 6e 61 67 65 64  sor 1 is managed
1e60: 20 62 79 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20   by memory cell 
1e70: 28 70 2d 3e 6e 4d 65 6d 2d 31 29 2c 20 65 74 63  (p->nMem-1), etc
1e80: 2e 0a 20 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d  ..  */.  Mem *pM
1e90: 65 6d 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 2d  em = &p->aMem[p-
1ea0: 3e 6e 4d 65 6d 2d 69 43 75 72 5d 3b 0a 0a 20 20  >nMem-iCur];..  
1eb0: 69 6e 74 20 6e 42 79 74 65 3b 0a 20 20 56 64 62  int nByte;.  Vdb
1ec0: 65 43 75 72 73 6f 72 20 2a 70 43 78 20 3d 20 30  eCursor *pCx = 0
1ed0: 3b 0a 20 20 6e 42 79 74 65 20 3d 20 0a 20 20 20  ;.  nByte = .   
1ee0: 20 20 20 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66     ROUND8(sizeof
1ef0: 28 56 64 62 65 43 75 72 73 6f 72 29 29 20 2b 20  (VdbeCursor)) + 
1f00: 0a 20 20 20 20 20 20 28 69 73 42 74 72 65 65 43  .      (isBtreeC
1f10: 75 72 73 6f 72 3f 73 71 6c 69 74 65 33 42 74 72  ursor?sqlite3Btr
1f20: 65 65 43 75 72 73 6f 72 53 69 7a 65 28 29 3a 30  eeCursorSize():0
1f30: 29 20 2b 20 0a 20 20 20 20 20 20 32 2a 6e 46 69  ) + .      2*nFi
1f40: 65 6c 64 2a 73 69 7a 65 6f 66 28 75 33 32 29 3b  eld*sizeof(u32);
1f50: 0a 0a 20 20 61 73 73 65 72 74 28 20 69 43 75 72  ..  assert( iCur
1f60: 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
1f70: 20 69 66 28 20 70 2d 3e 61 70 43 73 72 5b 69 43   if( p->apCsr[iC
1f80: 75 72 5d 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  ur] ){.    sqlit
1f90: 65 33 56 64 62 65 46 72 65 65 43 75 72 73 6f 72  e3VdbeFreeCursor
1fa0: 28 70 2c 20 70 2d 3e 61 70 43 73 72 5b 69 43 75  (p, p->apCsr[iCu
1fb0: 72 5d 29 3b 0a 20 20 20 20 70 2d 3e 61 70 43 73  r]);.    p->apCs
1fc0: 72 5b 69 43 75 72 5d 20 3d 20 30 3b 0a 20 20 7d  r[iCur] = 0;.  }
1fd0: 0a 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b  .  if( SQLITE_OK
1fe0: 3d 3d 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  ==sqlite3VdbeMem
1ff0: 47 72 6f 77 28 70 4d 65 6d 2c 20 6e 42 79 74 65  Grow(pMem, nByte
2000: 2c 20 30 29 20 29 7b 0a 20 20 20 20 70 2d 3e 61  , 0) ){.    p->a
2010: 70 43 73 72 5b 69 43 75 72 5d 20 3d 20 70 43 78  pCsr[iCur] = pCx
2020: 20 3d 20 28 56 64 62 65 43 75 72 73 6f 72 2a 29   = (VdbeCursor*)
2030: 70 4d 65 6d 2d 3e 7a 3b 0a 20 20 20 20 6d 65 6d  pMem->z;.    mem
2040: 73 65 74 28 70 43 78 2c 20 30 2c 20 73 69 7a 65  set(pCx, 0, size
2050: 6f 66 28 56 64 62 65 43 75 72 73 6f 72 29 29 3b  of(VdbeCursor));
2060: 0a 20 20 20 20 70 43 78 2d 3e 69 44 62 20 3d 20  .    pCx->iDb = 
2070: 69 44 62 3b 0a 20 20 20 20 70 43 78 2d 3e 6e 46  iDb;.    pCx->nF
2080: 69 65 6c 64 20 3d 20 6e 46 69 65 6c 64 3b 0a 20  ield = nField;. 
2090: 20 20 20 69 66 28 20 6e 46 69 65 6c 64 20 29 7b     if( nField ){
20a0: 0a 20 20 20 20 20 20 70 43 78 2d 3e 61 54 79 70  .      pCx->aTyp
20b0: 65 20 3d 20 28 75 33 32 20 2a 29 26 70 4d 65 6d  e = (u32 *)&pMem
20c0: 2d 3e 7a 5b 52 4f 55 4e 44 38 28 73 69 7a 65 6f  ->z[ROUND8(sizeo
20d0: 66 28 56 64 62 65 43 75 72 73 6f 72 29 29 5d 3b  f(VdbeCursor))];
20e0: 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 69  .    }.    if( i
20f0: 73 42 74 72 65 65 43 75 72 73 6f 72 20 29 7b 0a  sBtreeCursor ){.
2100: 20 20 20 20 20 20 70 43 78 2d 3e 70 43 75 72 73        pCx->pCurs
2110: 6f 72 20 3d 20 28 42 74 43 75 72 73 6f 72 2a 29  or = (BtCursor*)
2120: 0a 20 20 20 20 20 20 20 20 20 20 26 70 4d 65 6d  .          &pMem
2130: 2d 3e 7a 5b 52 4f 55 4e 44 38 28 73 69 7a 65 6f  ->z[ROUND8(sizeo
2140: 66 28 56 64 62 65 43 75 72 73 6f 72 29 29 2b 32  f(VdbeCursor))+2
2150: 2a 6e 46 69 65 6c 64 2a 73 69 7a 65 6f 66 28 75  *nField*sizeof(u
2160: 33 32 29 5d 3b 0a 20 20 20 20 20 20 73 71 6c 69  32)];.      sqli
2170: 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 5a 65  te3BtreeCursorZe
2180: 72 6f 28 70 43 78 2d 3e 70 43 75 72 73 6f 72 29  ro(pCx->pCursor)
2190: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65  ;.    }.  }.  re
21a0: 74 75 72 6e 20 70 43 78 3b 0a 7d 0a 0a 2f 2a 0a  turn pCx;.}../*.
21b0: 2a 2a 20 54 72 79 20 74 6f 20 63 6f 6e 76 65 72  ** Try to conver
21c0: 74 20 61 20 76 61 6c 75 65 20 69 6e 74 6f 20 61  t a value into a
21d0: 20 6e 75 6d 65 72 69 63 20 72 65 70 72 65 73 65   numeric represe
21e0: 6e 74 61 74 69 6f 6e 20 69 66 20 77 65 20 63 61  ntation if we ca
21f0: 6e 0a 2a 2a 20 64 6f 20 73 6f 20 77 69 74 68 6f  n.** do so witho
2200: 75 74 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72  ut loss of infor
2210: 6d 61 74 69 6f 6e 2e 20 20 49 6e 20 6f 74 68 65  mation.  In othe
2220: 72 20 77 6f 72 64 73 2c 20 69 66 20 74 68 65 20  r words, if the 
2230: 73 74 72 69 6e 67 0a 2a 2a 20 6c 6f 6f 6b 73 20  string.** looks 
2240: 6c 69 6b 65 20 61 20 6e 75 6d 62 65 72 2c 20 63  like a number, c
2250: 6f 6e 76 65 72 74 20 69 74 20 69 6e 74 6f 20 61  onvert it into a
2260: 20 6e 75 6d 62 65 72 2e 20 20 49 66 20 69 74 20   number.  If it 
2270: 64 6f 65 73 20 6e 6f 74 0a 2a 2a 20 6c 6f 6f 6b  does not.** look
2280: 20 6c 69 6b 65 20 61 20 6e 75 6d 62 65 72 2c 20   like a number, 
2290: 6c 65 61 76 65 20 69 74 20 61 6c 6f 6e 65 2e 0a  leave it alone..
22a0: 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 61  */.static void a
22b0: 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e  pplyNumericAffin
22c0: 69 74 79 28 4d 65 6d 20 2a 70 52 65 63 29 7b 0a  ity(Mem *pRec){.
22d0: 20 20 69 66 28 20 28 70 52 65 63 2d 3e 66 6c 61    if( (pRec->fla
22e0: 67 73 20 26 20 28 4d 45 4d 5f 52 65 61 6c 7c 4d  gs & (MEM_Real|M
22f0: 45 4d 5f 49 6e 74 29 29 3d 3d 30 20 29 7b 0a 20  EM_Int))==0 ){. 
2300: 20 20 20 64 6f 75 62 6c 65 20 72 56 61 6c 75 65     double rValue
2310: 3b 0a 20 20 20 20 69 36 34 20 69 56 61 6c 75 65  ;.    i64 iValue
2320: 3b 0a 20 20 20 20 75 38 20 65 6e 63 20 3d 20 70  ;.    u8 enc = p
2330: 52 65 63 2d 3e 65 6e 63 3b 0a 20 20 20 20 69 66  Rec->enc;.    if
2340: 28 20 28 70 52 65 63 2d 3e 66 6c 61 67 73 26 4d  ( (pRec->flags&M
2350: 45 4d 5f 53 74 72 29 3d 3d 30 20 29 20 72 65 74  EM_Str)==0 ) ret
2360: 75 72 6e 3b 0a 20 20 20 20 69 66 28 20 73 71 6c  urn;.    if( sql
2370: 69 74 65 33 41 74 6f 46 28 70 52 65 63 2d 3e 7a  ite3AtoF(pRec->z
2380: 2c 20 26 72 56 61 6c 75 65 2c 20 70 52 65 63 2d  , &rValue, pRec-
2390: 3e 6e 2c 20 65 6e 63 29 3d 3d 30 20 29 20 72 65  >n, enc)==0 ) re
23a0: 74 75 72 6e 3b 0a 20 20 20 20 69 66 28 20 30 3d  turn;.    if( 0=
23b0: 3d 73 71 6c 69 74 65 33 41 74 6f 69 36 34 28 70  =sqlite3Atoi64(p
23c0: 52 65 63 2d 3e 7a 2c 20 26 69 56 61 6c 75 65 2c  Rec->z, &iValue,
23d0: 20 70 52 65 63 2d 3e 6e 2c 20 65 6e 63 29 20 29   pRec->n, enc) )
23e0: 7b 0a 20 20 20 20 20 20 70 52 65 63 2d 3e 75 2e  {.      pRec->u.
23f0: 69 20 3d 20 69 56 61 6c 75 65 3b 0a 20 20 20 20  i = iValue;.    
2400: 20 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 7c 3d    pRec->flags |=
2410: 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 7d 65   MEM_Int;.    }e
2420: 6c 73 65 7b 0a 20 20 20 20 20 20 70 52 65 63 2d  lse{.      pRec-
2430: 3e 72 20 3d 20 72 56 61 6c 75 65 3b 0a 20 20 20  >r = rValue;.   
2440: 20 20 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 7c     pRec->flags |
2450: 3d 20 4d 45 4d 5f 52 65 61 6c 3b 0a 20 20 20 20  = MEM_Real;.    
2460: 7d 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 50  }.  }.}../*.** P
2470: 72 6f 63 65 73 73 69 6e 67 20 69 73 20 64 65 74  rocessing is det
2480: 65 72 6d 69 6e 65 20 62 79 20 74 68 65 20 61 66  ermine by the af
2490: 66 69 6e 69 74 79 20 70 61 72 61 6d 65 74 65 72  finity parameter
24a0: 3a 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41  :.**.** SQLITE_A
24b0: 46 46 5f 49 4e 54 45 47 45 52 3a 0a 2a 2a 20 53  FF_INTEGER:.** S
24c0: 51 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c 3a 0a  QLITE_AFF_REAL:.
24d0: 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55  ** SQLITE_AFF_NU
24e0: 4d 45 52 49 43 3a 0a 2a 2a 20 20 20 20 54 72 79  MERIC:.**    Try
24f0: 20 74 6f 20 63 6f 6e 76 65 72 74 20 70 52 65 63   to convert pRec
2500: 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 72   to an integer r
2510: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 72  epresentation or
2520: 20 61 20 0a 2a 2a 20 20 20 20 66 6c 6f 61 74 69   a .**    floati
2530: 6e 67 2d 70 6f 69 6e 74 20 72 65 70 72 65 73 65  ng-point represe
2540: 6e 74 61 74 69 6f 6e 20 69 66 20 61 6e 20 69 6e  ntation if an in
2550: 74 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 61  teger representa
2560: 74 69 6f 6e 0a 2a 2a 20 20 20 20 69 73 20 6e 6f  tion.**    is no
2570: 74 20 70 6f 73 73 69 62 6c 65 2e 20 20 4e 6f 74  t possible.  Not
2580: 65 20 74 68 61 74 20 74 68 65 20 69 6e 74 65 67  e that the integ
2590: 65 72 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  er representatio
25a0: 6e 20 69 73 0a 2a 2a 20 20 20 20 61 6c 77 61 79  n is.**    alway
25b0: 73 20 70 72 65 66 65 72 72 65 64 2c 20 65 76 65  s preferred, eve
25c0: 6e 20 69 66 20 74 68 65 20 61 66 66 69 6e 69 74  n if the affinit
25d0: 79 20 69 73 20 52 45 41 4c 2c 20 62 65 63 61 75  y is REAL, becau
25e0: 73 65 0a 2a 2a 20 20 20 20 61 6e 20 69 6e 74 65  se.**    an inte
25f0: 67 65 72 20 72 65 70 72 65 73 65 6e 74 61 74 69  ger representati
2600: 6f 6e 20 69 73 20 6d 6f 72 65 20 73 70 61 63 65  on is more space
2610: 20 65 66 66 69 63 69 65 6e 74 20 6f 6e 20 64 69   efficient on di
2620: 73 6b 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45  sk..**.** SQLITE
2630: 5f 41 46 46 5f 54 45 58 54 3a 0a 2a 2a 20 20 20  _AFF_TEXT:.**   
2640: 20 43 6f 6e 76 65 72 74 20 70 52 65 63 20 74 6f   Convert pRec to
2650: 20 61 20 74 65 78 74 20 72 65 70 72 65 73 65 6e   a text represen
2660: 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 51  tation..**.** SQ
2670: 4c 49 54 45 5f 41 46 46 5f 4e 4f 4e 45 3a 0a 2a  LITE_AFF_NONE:.*
2680: 2a 20 20 20 20 4e 6f 2d 6f 70 2e 20 20 70 52 65  *    No-op.  pRe
2690: 63 20 69 73 20 75 6e 63 68 61 6e 67 65 64 2e 0a  c is unchanged..
26a0: 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 61  */.static void a
26b0: 70 70 6c 79 41 66 66 69 6e 69 74 79 28 0a 20 20  pplyAffinity(.  
26c0: 4d 65 6d 20 2a 70 52 65 63 2c 20 20 20 20 20 20  Mem *pRec,      
26d0: 20 20 20 20 2f 2a 20 54 68 65 20 76 61 6c 75 65      /* The value
26e0: 20 74 6f 20 61 70 70 6c 79 20 61 66 66 69 6e 69   to apply affini
26f0: 74 79 20 74 6f 20 2a 2f 0a 20 20 63 68 61 72 20  ty to */.  char 
2700: 61 66 66 69 6e 69 74 79 2c 20 20 20 20 20 20 2f  affinity,      /
2710: 2a 20 54 68 65 20 61 66 66 69 6e 69 74 79 20 74  * The affinity t
2720: 6f 20 62 65 20 61 70 70 6c 69 65 64 20 2a 2f 0a  o be applied */.
2730: 20 20 75 38 20 65 6e 63 20 20 20 20 20 20 20 20    u8 enc        
2740: 20 20 20 20 20 20 2f 2a 20 55 73 65 20 74 68 69        /* Use thi
2750: 73 20 74 65 78 74 20 65 6e 63 6f 64 69 6e 67 20  s text encoding 
2760: 2a 2f 0a 29 7b 0a 20 20 69 66 28 20 61 66 66 69  */.){.  if( affi
2770: 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46  nity==SQLITE_AFF
2780: 5f 54 45 58 54 20 29 7b 0a 20 20 20 20 2f 2a 20  _TEXT ){.    /* 
2790: 4f 6e 6c 79 20 61 74 74 65 6d 70 74 20 74 68 65  Only attempt the
27a0: 20 63 6f 6e 76 65 72 73 69 6f 6e 20 74 6f 20 54   conversion to T
27b0: 45 58 54 20 69 66 20 74 68 65 72 65 20 69 73 20  EXT if there is 
27c0: 61 6e 20 69 6e 74 65 67 65 72 20 6f 72 20 72 65  an integer or re
27d0: 61 6c 0a 20 20 20 20 2a 2a 20 72 65 70 72 65 73  al.    ** repres
27e0: 65 6e 74 61 74 69 6f 6e 20 28 62 6c 6f 62 20 61  entation (blob a
27f0: 6e 64 20 4e 55 4c 4c 20 64 6f 20 6e 6f 74 20 67  nd NULL do not g
2800: 65 74 20 63 6f 6e 76 65 72 74 65 64 29 20 62 75  et converted) bu
2810: 74 20 6e 6f 20 73 74 72 69 6e 67 0a 20 20 20 20  t no string.    
2820: 2a 2a 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  ** representatio
2830: 6e 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66  n..    */.    if
2840: 28 20 30 3d 3d 28 70 52 65 63 2d 3e 66 6c 61 67  ( 0==(pRec->flag
2850: 73 26 4d 45 4d 5f 53 74 72 29 20 26 26 20 28 70  s&MEM_Str) && (p
2860: 52 65 63 2d 3e 66 6c 61 67 73 26 28 4d 45 4d 5f  Rec->flags&(MEM_
2870: 52 65 61 6c 7c 4d 45 4d 5f 49 6e 74 29 29 20 29  Real|MEM_Int)) )
2880: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  {.      sqlite3V
2890: 64 62 65 4d 65 6d 53 74 72 69 6e 67 69 66 79 28  dbeMemStringify(
28a0: 70 52 65 63 2c 20 65 6e 63 29 3b 0a 20 20 20 20  pRec, enc);.    
28b0: 7d 0a 20 20 20 20 70 52 65 63 2d 3e 66 6c 61 67  }.    pRec->flag
28c0: 73 20 26 3d 20 7e 28 4d 45 4d 5f 52 65 61 6c 7c  s &= ~(MEM_Real|
28d0: 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d 65 6c 73  MEM_Int);.  }els
28e0: 65 20 69 66 28 20 61 66 66 69 6e 69 74 79 21 3d  e if( affinity!=
28f0: 53 51 4c 49 54 45 5f 41 46 46 5f 4e 4f 4e 45 20  SQLITE_AFF_NONE 
2900: 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 61  ){.    assert( a
2910: 66 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f  ffinity==SQLITE_
2920: 41 46 46 5f 49 4e 54 45 47 45 52 20 7c 7c 20 61  AFF_INTEGER || a
2930: 66 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f  ffinity==SQLITE_
2940: 41 46 46 5f 52 45 41 4c 0a 20 20 20 20 20 20 20  AFF_REAL.       
2950: 20 20 20 20 20 20 7c 7c 20 61 66 66 69 6e 69 74        || affinit
2960: 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55  y==SQLITE_AFF_NU
2970: 4d 45 52 49 43 20 29 3b 0a 20 20 20 20 61 70 70  MERIC );.    app
2980: 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74  lyNumericAffinit
2990: 79 28 70 52 65 63 29 3b 0a 20 20 20 20 69 66 28  y(pRec);.    if(
29a0: 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d   pRec->flags & M
29b0: 45 4d 5f 52 65 61 6c 20 29 7b 0a 20 20 20 20 20  EM_Real ){.     
29c0: 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 65   sqlite3VdbeInte
29d0: 67 65 72 41 66 66 69 6e 69 74 79 28 70 52 65 63  gerAffinity(pRec
29e0: 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a 0a  );.    }.  }.}..
29f0: 2f 2a 0a 2a 2a 20 54 72 79 20 74 6f 20 63 6f 6e  /*.** Try to con
2a00: 76 65 72 74 20 74 68 65 20 74 79 70 65 20 6f 66  vert the type of
2a10: 20 61 20 66 75 6e 63 74 69 6f 6e 20 61 72 67 75   a function argu
2a20: 6d 65 6e 74 20 6f 72 20 61 20 72 65 73 75 6c 74  ment or a result
2a30: 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 69 6e 74 6f 20   column.** into 
2a40: 61 20 6e 75 6d 65 72 69 63 20 72 65 70 72 65 73  a numeric repres
2a50: 65 6e 74 61 74 69 6f 6e 2e 20 20 55 73 65 20 65  entation.  Use e
2a60: 69 74 68 65 72 20 49 4e 54 45 47 45 52 20 6f 72  ither INTEGER or
2a70: 20 52 45 41 4c 20 77 68 69 63 68 65 76 65 72 0a   REAL whichever.
2a80: 2a 2a 20 69 73 20 61 70 70 72 6f 70 72 69 61 74  ** is appropriat
2a90: 65 2e 20 20 42 75 74 20 6f 6e 6c 79 20 64 6f 20  e.  But only do 
2aa0: 74 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69  the conversion i
2ab0: 66 20 69 74 20 69 73 20 70 6f 73 73 69 62 6c 65  f it is possible
2ac0: 20 77 69 74 68 6f 75 74 0a 2a 2a 20 6c 6f 73 73   without.** loss
2ad0: 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20   of information 
2ae0: 61 6e 64 20 72 65 74 75 72 6e 20 74 68 65 20 72  and return the r
2af0: 65 76 69 73 65 64 20 74 79 70 65 20 6f 66 20 74  evised type of t
2b00: 68 65 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a  he argument..*/.
2b10: 69 6e 74 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  int sqlite3_valu
2b20: 65 5f 6e 75 6d 65 72 69 63 5f 74 79 70 65 28 73  e_numeric_type(s
2b30: 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 56  qlite3_value *pV
2b40: 61 6c 29 7b 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d  al){.  Mem *pMem
2b50: 20 3d 20 28 4d 65 6d 2a 29 70 56 61 6c 3b 0a 20   = (Mem*)pVal;. 
2b60: 20 69 66 28 20 70 4d 65 6d 2d 3e 74 79 70 65 3d   if( pMem->type=
2b70: 3d 53 51 4c 49 54 45 5f 54 45 58 54 20 29 7b 0a  =SQLITE_TEXT ){.
2b80: 20 20 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63      applyNumeric
2b90: 41 66 66 69 6e 69 74 79 28 70 4d 65 6d 29 3b 0a  Affinity(pMem);.
2ba0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
2bb0: 65 6d 53 74 6f 72 65 54 79 70 65 28 70 4d 65 6d  emStoreType(pMem
2bc0: 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20  );.  }.  return 
2bd0: 70 4d 65 6d 2d 3e 74 79 70 65 3b 0a 7d 0a 0a 2f  pMem->type;.}../
2be0: 2a 0a 2a 2a 20 45 78 70 6f 72 74 65 64 20 76 65  *.** Exported ve
2bf0: 72 73 69 6f 6e 20 6f 66 20 61 70 70 6c 79 41 66  rsion of applyAf
2c00: 66 69 6e 69 74 79 28 29 2e 20 54 68 69 73 20 6f  finity(). This o
2c10: 6e 65 20 77 6f 72 6b 73 20 6f 6e 20 73 71 6c 69  ne works on sqli
2c20: 74 65 33 5f 76 61 6c 75 65 2a 2c 20 0a 2a 2a 20  te3_value*, .** 
2c30: 6e 6f 74 20 74 68 65 20 69 6e 74 65 72 6e 61 6c  not the internal
2c40: 20 4d 65 6d 2a 20 74 79 70 65 2e 0a 2a 2f 0a 76   Mem* type..*/.v
2c50: 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65  oid sqlite3Value
2c60: 41 70 70 6c 79 41 66 66 69 6e 69 74 79 28 0a 20  ApplyAffinity(. 
2c70: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a   sqlite3_value *
2c80: 70 56 61 6c 2c 20 0a 20 20 75 38 20 61 66 66 69  pVal, .  u8 affi
2c90: 6e 69 74 79 2c 20 0a 20 20 75 38 20 65 6e 63 0a  nity, .  u8 enc.
2ca0: 29 7b 0a 20 20 61 70 70 6c 79 41 66 66 69 6e 69  ){.  applyAffini
2cb0: 74 79 28 28 4d 65 6d 20 2a 29 70 56 61 6c 2c 20  ty((Mem *)pVal, 
2cc0: 61 66 66 69 6e 69 74 79 2c 20 65 6e 63 29 3b 0a  affinity, enc);.
2cd0: 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  }..#ifdef SQLITE
2ce0: 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20 57 72 69  _DEBUG./*.** Wri
2cf0: 74 65 20 61 20 6e 69 63 65 20 73 74 72 69 6e 67  te a nice string
2d00: 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   representation 
2d10: 6f 66 20 74 68 65 20 63 6f 6e 74 65 6e 74 73 20  of the contents 
2d20: 6f 66 20 63 65 6c 6c 20 70 4d 65 6d 0a 2a 2a 20  of cell pMem.** 
2d30: 69 6e 74 6f 20 62 75 66 66 65 72 20 7a 42 75 66  into buffer zBuf
2d40: 2c 20 6c 65 6e 67 74 68 20 6e 42 75 66 2e 0a 2a  , length nBuf..*
2d50: 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64  /.void sqlite3Vd
2d60: 62 65 4d 65 6d 50 72 65 74 74 79 50 72 69 6e 74  beMemPrettyPrint
2d70: 28 4d 65 6d 20 2a 70 4d 65 6d 2c 20 63 68 61 72  (Mem *pMem, char
2d80: 20 2a 7a 42 75 66 29 7b 0a 20 20 63 68 61 72 20   *zBuf){.  char 
2d90: 2a 7a 43 73 72 20 3d 20 7a 42 75 66 3b 0a 20 20  *zCsr = zBuf;.  
2da0: 69 6e 74 20 66 20 3d 20 70 4d 65 6d 2d 3e 66 6c  int f = pMem->fl
2db0: 61 67 73 3b 0a 0a 20 20 73 74 61 74 69 63 20 63  ags;..  static c
2dc0: 6f 6e 73 74 20 63 68 61 72 20 2a 63 6f 6e 73 74  onst char *const
2dd0: 20 65 6e 63 6e 61 6d 65 73 5b 5d 20 3d 20 7b 22   encnames[] = {"
2de0: 28 58 29 22 2c 20 22 28 38 29 22 2c 20 22 28 31  (X)", "(8)", "(1
2df0: 36 4c 45 29 22 2c 20 22 28 31 36 42 45 29 22 7d  6LE)", "(16BE)"}
2e00: 3b 0a 0a 20 20 69 66 28 20 66 26 4d 45 4d 5f 42  ;..  if( f&MEM_B
2e10: 6c 6f 62 20 29 7b 0a 20 20 20 20 69 6e 74 20 69  lob ){.    int i
2e20: 3b 0a 20 20 20 20 63 68 61 72 20 63 3b 0a 20 20  ;.    char c;.  
2e30: 20 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 44 79    if( f & MEM_Dy
2e40: 6e 20 29 7b 0a 20 20 20 20 20 20 63 20 3d 20 27  n ){.      c = '
2e50: 7a 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  z';.      assert
2e60: 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74 61 74  ( (f & (MEM_Stat
2e70: 69 63 7c 4d 45 4d 5f 45 70 68 65 6d 29 29 3d 3d  ic|MEM_Ephem))==
2e80: 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69  0 );.    }else i
2e90: 66 28 20 66 20 26 20 4d 45 4d 5f 53 74 61 74 69  f( f & MEM_Stati
2ea0: 63 20 29 7b 0a 20 20 20 20 20 20 63 20 3d 20 27  c ){.      c = '
2eb0: 74 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  t';.      assert
2ec0: 28 20 28 66 20 26 20 28 4d 45 4d 5f 44 79 6e 7c  ( (f & (MEM_Dyn|
2ed0: 4d 45 4d 5f 45 70 68 65 6d 29 29 3d 3d 30 20 29  MEM_Ephem))==0 )
2ee0: 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
2ef0: 66 20 26 20 4d 45 4d 5f 45 70 68 65 6d 20 29 7b  f & MEM_Ephem ){
2f00: 0a 20 20 20 20 20 20 63 20 3d 20 27 65 27 3b 0a  .      c = 'e';.
2f10: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28 66        assert( (f
2f20: 20 26 20 28 4d 45 4d 5f 53 74 61 74 69 63 7c 4d   & (MEM_Static|M
2f30: 45 4d 5f 44 79 6e 29 29 3d 3d 30 20 29 3b 0a 20  EM_Dyn))==0 );. 
2f40: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
2f50: 63 20 3d 20 27 73 27 3b 0a 20 20 20 20 7d 0a 0a  c = 's';.    }..
2f60: 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72      sqlite3_snpr
2f70: 69 6e 74 66 28 31 30 30 2c 20 7a 43 73 72 2c 20  intf(100, zCsr, 
2f80: 22 25 63 22 2c 20 63 29 3b 0a 20 20 20 20 7a 43  "%c", c);.    zC
2f90: 73 72 20 2b 3d 20 73 71 6c 69 74 65 33 53 74 72  sr += sqlite3Str
2fa0: 6c 65 6e 33 30 28 7a 43 73 72 29 3b 0a 20 20 20  len30(zCsr);.   
2fb0: 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74   sqlite3_snprint
2fc0: 66 28 31 30 30 2c 20 7a 43 73 72 2c 20 22 25 64  f(100, zCsr, "%d
2fd0: 5b 22 2c 20 70 4d 65 6d 2d 3e 6e 29 3b 0a 20 20  [", pMem->n);.  
2fe0: 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74 65    zCsr += sqlite
2ff0: 33 53 74 72 6c 65 6e 33 30 28 7a 43 73 72 29 3b  3Strlen30(zCsr);
3000: 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  .    for(i=0; i<
3010: 31 36 20 26 26 20 69 3c 70 4d 65 6d 2d 3e 6e 3b  16 && i<pMem->n;
3020: 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 73 71 6c   i++){.      sql
3030: 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30  ite3_snprintf(10
3040: 30 2c 20 7a 43 73 72 2c 20 22 25 30 32 58 22 2c  0, zCsr, "%02X",
3050: 20 28 28 69 6e 74 29 70 4d 65 6d 2d 3e 7a 5b 69   ((int)pMem->z[i
3060: 5d 20 26 20 30 78 46 46 29 29 3b 0a 20 20 20 20  ] & 0xFF));.    
3070: 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74 65    zCsr += sqlite
3080: 33 53 74 72 6c 65 6e 33 30 28 7a 43 73 72 29 3b  3Strlen30(zCsr);
3090: 0a 20 20 20 20 7d 0a 20 20 20 20 66 6f 72 28 69  .    }.    for(i
30a0: 3d 30 3b 20 69 3c 31 36 20 26 26 20 69 3c 70 4d  =0; i<16 && i<pM
30b0: 65 6d 2d 3e 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20  em->n; i++){.   
30c0: 20 20 20 63 68 61 72 20 7a 20 3d 20 70 4d 65 6d     char z = pMem
30d0: 2d 3e 7a 5b 69 5d 3b 0a 20 20 20 20 20 20 69 66  ->z[i];.      if
30e0: 28 20 7a 3c 33 32 20 7c 7c 20 7a 3e 31 32 36 20  ( z<32 || z>126 
30f0: 29 20 2a 7a 43 73 72 2b 2b 20 3d 20 27 2e 27 3b  ) *zCsr++ = '.';
3100: 0a 20 20 20 20 20 20 65 6c 73 65 20 2a 7a 43 73  .      else *zCs
3110: 72 2b 2b 20 3d 20 7a 3b 0a 20 20 20 20 7d 0a 0a  r++ = z;.    }..
3120: 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72      sqlite3_snpr
3130: 69 6e 74 66 28 31 30 30 2c 20 7a 43 73 72 2c 20  intf(100, zCsr, 
3140: 22 5d 25 73 22 2c 20 65 6e 63 6e 61 6d 65 73 5b  "]%s", encnames[
3150: 70 4d 65 6d 2d 3e 65 6e 63 5d 29 3b 0a 20 20 20  pMem->enc]);.   
3160: 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74 65 33   zCsr += sqlite3
3170: 53 74 72 6c 65 6e 33 30 28 7a 43 73 72 29 3b 0a  Strlen30(zCsr);.
3180: 20 20 20 20 69 66 28 20 66 20 26 20 4d 45 4d 5f      if( f & MEM_
3190: 5a 65 72 6f 20 29 7b 0a 20 20 20 20 20 20 73 71  Zero ){.      sq
31a0: 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31  lite3_snprintf(1
31b0: 30 30 2c 20 7a 43 73 72 2c 22 2b 25 64 7a 22 2c  00, zCsr,"+%dz",
31c0: 70 4d 65 6d 2d 3e 75 2e 6e 5a 65 72 6f 29 3b 0a  pMem->u.nZero);.
31d0: 20 20 20 20 20 20 7a 43 73 72 20 2b 3d 20 73 71        zCsr += sq
31e0: 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 43  lite3Strlen30(zC
31f0: 73 72 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 2a  sr);.    }.    *
3200: 7a 43 73 72 20 3d 20 27 5c 30 27 3b 0a 20 20 7d  zCsr = '\0';.  }
3210: 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d  else if( f & MEM
3220: 5f 53 74 72 20 29 7b 0a 20 20 20 20 69 6e 74 20  _Str ){.    int 
3230: 6a 2c 20 6b 3b 0a 20 20 20 20 7a 42 75 66 5b 30  j, k;.    zBuf[0
3240: 5d 20 3d 20 27 20 27 3b 0a 20 20 20 20 69 66 28  ] = ' ';.    if(
3250: 20 66 20 26 20 4d 45 4d 5f 44 79 6e 20 29 7b 0a   f & MEM_Dyn ){.
3260: 20 20 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20        zBuf[1] = 
3270: 27 7a 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72  'z';.      asser
3280: 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74 61  t( (f & (MEM_Sta
3290: 74 69 63 7c 4d 45 4d 5f 45 70 68 65 6d 29 29 3d  tic|MEM_Ephem))=
32a0: 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20  =0 );.    }else 
32b0: 69 66 28 20 66 20 26 20 4d 45 4d 5f 53 74 61 74  if( f & MEM_Stat
32c0: 69 63 20 29 7b 0a 20 20 20 20 20 20 7a 42 75 66  ic ){.      zBuf
32d0: 5b 31 5d 20 3d 20 27 74 27 3b 0a 20 20 20 20 20  [1] = 't';.     
32e0: 20 61 73 73 65 72 74 28 20 28 66 20 26 20 28 4d   assert( (f & (M
32f0: 45 4d 5f 44 79 6e 7c 4d 45 4d 5f 45 70 68 65 6d  EM_Dyn|MEM_Ephem
3300: 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c  ))==0 );.    }el
3310: 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 45  se if( f & MEM_E
3320: 70 68 65 6d 20 29 7b 0a 20 20 20 20 20 20 7a 42  phem ){.      zB
3330: 75 66 5b 31 5d 20 3d 20 27 65 27 3b 0a 20 20 20  uf[1] = 'e';.   
3340: 20 20 20 61 73 73 65 72 74 28 20 28 66 20 26 20     assert( (f & 
3350: 28 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f  (MEM_Static|MEM_
3360: 44 79 6e 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20  Dyn))==0 );.    
3370: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 7a 42 75  }else{.      zBu
3380: 66 5b 31 5d 20 3d 20 27 73 27 3b 0a 20 20 20 20  f[1] = 's';.    
3390: 7d 0a 20 20 20 20 6b 20 3d 20 32 3b 0a 20 20 20  }.    k = 2;.   
33a0: 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74   sqlite3_snprint
33b0: 66 28 31 30 30 2c 20 26 7a 42 75 66 5b 6b 5d 2c  f(100, &zBuf[k],
33c0: 20 22 25 64 22 2c 20 70 4d 65 6d 2d 3e 6e 29 3b   "%d", pMem->n);
33d0: 0a 20 20 20 20 6b 20 2b 3d 20 73 71 6c 69 74 65  .    k += sqlite
33e0: 33 53 74 72 6c 65 6e 33 30 28 26 7a 42 75 66 5b  3Strlen30(&zBuf[
33f0: 6b 5d 29 3b 0a 20 20 20 20 7a 42 75 66 5b 6b 2b  k]);.    zBuf[k+
3400: 2b 5d 20 3d 20 27 5b 27 3b 0a 20 20 20 20 66 6f  +] = '[';.    fo
3410: 72 28 6a 3d 30 3b 20 6a 3c 31 35 20 26 26 20 6a  r(j=0; j<15 && j
3420: 3c 70 4d 65 6d 2d 3e 6e 3b 20 6a 2b 2b 29 7b 0a  <pMem->n; j++){.
3430: 20 20 20 20 20 20 75 38 20 63 20 3d 20 70 4d 65        u8 c = pMe
3440: 6d 2d 3e 7a 5b 6a 5d 3b 0a 20 20 20 20 20 20 69  m->z[j];.      i
3450: 66 28 20 63 3e 3d 30 78 32 30 20 26 26 20 63 3c  f( c>=0x20 && c<
3460: 30 78 37 66 20 29 7b 0a 20 20 20 20 20 20 20 20  0x7f ){.        
3470: 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 63 3b 0a 20  zBuf[k++] = c;. 
3480: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
3490: 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20      zBuf[k++] = 
34a0: 27 2e 27 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  '.';.      }.   
34b0: 20 7d 0a 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d   }.    zBuf[k++]
34c0: 20 3d 20 27 5d 27 3b 0a 20 20 20 20 73 71 6c 69   = ']';.    sqli
34d0: 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30  te3_snprintf(100
34e0: 2c 26 7a 42 75 66 5b 6b 5d 2c 20 65 6e 63 6e 61  ,&zBuf[k], encna
34f0: 6d 65 73 5b 70 4d 65 6d 2d 3e 65 6e 63 5d 29 3b  mes[pMem->enc]);
3500: 0a 20 20 20 20 6b 20 2b 3d 20 73 71 6c 69 74 65  .    k += sqlite
3510: 33 53 74 72 6c 65 6e 33 30 28 26 7a 42 75 66 5b  3Strlen30(&zBuf[
3520: 6b 5d 29 3b 0a 20 20 20 20 7a 42 75 66 5b 6b 2b  k]);.    zBuf[k+
3530: 2b 5d 20 3d 20 30 3b 0a 20 20 7d 0a 7d 0a 23 65  +] = 0;.  }.}.#e
3540: 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c  ndif..#ifdef SQL
3550: 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20  ITE_DEBUG./*.** 
3560: 50 72 69 6e 74 20 74 68 65 20 76 61 6c 75 65 20  Print the value 
3570: 6f 66 20 61 20 72 65 67 69 73 74 65 72 20 66 6f  of a register fo
3580: 72 20 74 72 61 63 69 6e 67 20 70 75 72 70 6f 73  r tracing purpos
3590: 65 73 3a 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f  es:.*/.static vo
35a0: 69 64 20 6d 65 6d 54 72 61 63 65 50 72 69 6e 74  id memTracePrint
35b0: 28 46 49 4c 45 20 2a 6f 75 74 2c 20 4d 65 6d 20  (FILE *out, Mem 
35c0: 2a 70 29 7b 0a 20 20 69 66 28 20 70 2d 3e 66 6c  *p){.  if( p->fl
35d0: 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29  ags & MEM_Null )
35e0: 7b 0a 20 20 20 20 66 70 72 69 6e 74 66 28 6f 75  {.    fprintf(ou
35f0: 74 2c 20 22 20 4e 55 4c 4c 22 29 3b 0a 20 20 7d  t, " NULL");.  }
3600: 65 6c 73 65 20 69 66 28 20 28 70 2d 3e 66 6c 61  else if( (p->fla
3610: 67 73 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45  gs & (MEM_Int|ME
3620: 4d 5f 53 74 72 29 29 3d 3d 28 4d 45 4d 5f 49 6e  M_Str))==(MEM_In
3630: 74 7c 4d 45 4d 5f 53 74 72 29 20 29 7b 0a 20 20  t|MEM_Str) ){.  
3640: 20 20 66 70 72 69 6e 74 66 28 6f 75 74 2c 20 22    fprintf(out, "
3650: 20 73 69 3a 25 6c 6c 64 22 2c 20 70 2d 3e 75 2e   si:%lld", p->u.
3660: 69 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  i);.  }else if( 
3670: 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  p->flags & MEM_I
3680: 6e 74 20 29 7b 0a 20 20 20 20 66 70 72 69 6e 74  nt ){.    fprint
3690: 66 28 6f 75 74 2c 20 22 20 69 3a 25 6c 6c 64 22  f(out, " i:%lld"
36a0: 2c 20 70 2d 3e 75 2e 69 29 3b 0a 23 69 66 6e 64  , p->u.i);.#ifnd
36b0: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ef SQLITE_OMIT_F
36c0: 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20  LOATING_POINT.  
36d0: 7d 65 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c 61  }else if( p->fla
36e0: 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 20 29 7b  gs & MEM_Real ){
36f0: 0a 20 20 20 20 66 70 72 69 6e 74 66 28 6f 75 74  .    fprintf(out
3700: 2c 20 22 20 72 3a 25 67 22 2c 20 70 2d 3e 72 29  , " r:%g", p->r)
3710: 3b 0a 23 65 6e 64 69 66 0a 20 20 7d 65 6c 73 65  ;.#endif.  }else
3720: 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20   if( p->flags & 
3730: 4d 45 4d 5f 52 6f 77 53 65 74 20 29 7b 0a 20 20  MEM_RowSet ){.  
3740: 20 20 66 70 72 69 6e 74 66 28 6f 75 74 2c 20 22    fprintf(out, "
3750: 20 28 72 6f 77 73 65 74 29 22 29 3b 0a 20 20 7d   (rowset)");.  }
3760: 65 6c 73 65 7b 0a 20 20 20 20 63 68 61 72 20 7a  else{.    char z
3770: 42 75 66 5b 32 30 30 5d 3b 0a 20 20 20 20 73 71  Buf[200];.    sq
3780: 6c 69 74 65 33 56 64 62 65 4d 65 6d 50 72 65 74  lite3VdbeMemPret
3790: 74 79 50 72 69 6e 74 28 70 2c 20 7a 42 75 66 29  tyPrint(p, zBuf)
37a0: 3b 0a 20 20 20 20 66 70 72 69 6e 74 66 28 6f 75  ;.    fprintf(ou
37b0: 74 2c 20 22 20 22 29 3b 0a 20 20 20 20 66 70 72  t, " ");.    fpr
37c0: 69 6e 74 66 28 6f 75 74 2c 20 22 25 73 22 2c 20  intf(out, "%s", 
37d0: 7a 42 75 66 29 3b 0a 20 20 7d 0a 7d 0a 73 74 61  zBuf);.  }.}.sta
37e0: 74 69 63 20 76 6f 69 64 20 72 65 67 69 73 74 65  tic void registe
37f0: 72 54 72 61 63 65 28 46 49 4c 45 20 2a 6f 75 74  rTrace(FILE *out
3800: 2c 20 69 6e 74 20 69 52 65 67 2c 20 4d 65 6d 20  , int iReg, Mem 
3810: 2a 70 29 7b 0a 20 20 66 70 72 69 6e 74 66 28 6f  *p){.  fprintf(o
3820: 75 74 2c 20 22 52 45 47 5b 25 64 5d 20 3d 20 22  ut, "REG[%d] = "
3830: 2c 20 69 52 65 67 29 3b 0a 20 20 6d 65 6d 54 72  , iReg);.  memTr
3840: 61 63 65 50 72 69 6e 74 28 6f 75 74 2c 20 70 29  acePrint(out, p)
3850: 3b 0a 20 20 66 70 72 69 6e 74 66 28 6f 75 74 2c  ;.  fprintf(out,
3860: 20 22 5c 6e 22 29 3b 0a 7d 0a 23 65 6e 64 69 66   "\n");.}.#endif
3870: 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
3880: 44 45 42 55 47 0a 23 20 20 64 65 66 69 6e 65 20  DEBUG.#  define 
3890: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 52  REGISTER_TRACE(R
38a0: 2c 4d 29 20 69 66 28 70 2d 3e 74 72 61 63 65 29  ,M) if(p->trace)
38b0: 72 65 67 69 73 74 65 72 54 72 61 63 65 28 70 2d  registerTrace(p-
38c0: 3e 74 72 61 63 65 2c 52 2c 4d 29 0a 23 65 6c 73  >trace,R,M).#els
38d0: 65 0a 23 20 20 64 65 66 69 6e 65 20 52 45 47 49  e.#  define REGI
38e0: 53 54 45 52 5f 54 52 41 43 45 28 52 2c 4d 29 0a  STER_TRACE(R,M).
38f0: 23 65 6e 64 69 66 0a 0a 0a 23 69 66 64 65 66 20  #endif...#ifdef 
3900: 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 0a 2f 2a  VDBE_PROFILE../*
3910: 20 0a 2a 2a 20 68 77 74 69 6d 65 2e 68 20 63 6f   .** hwtime.h co
3920: 6e 74 61 69 6e 73 20 69 6e 6c 69 6e 65 20 61 73  ntains inline as
3930: 73 65 6d 62 6c 65 72 20 63 6f 64 65 20 66 6f 72  sembler code for
3940: 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 0a 2a   implementing .*
3950: 2a 20 68 69 67 68 2d 70 65 72 66 6f 72 6d 61 6e  * high-performan
3960: 63 65 20 74 69 6d 69 6e 67 20 72 6f 75 74 69 6e  ce timing routin
3970: 65 73 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20  es..*/.#include 
3980: 22 68 77 74 69 6d 65 2e 68 22 0a 0a 23 65 6e 64  "hwtime.h"..#end
3990: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 43 48  if../*.** The CH
39a0: 45 43 4b 5f 46 4f 52 5f 49 4e 54 45 52 52 55 50  ECK_FOR_INTERRUP
39b0: 54 20 6d 61 63 72 6f 20 64 65 66 69 6e 65 64 20  T macro defined 
39c0: 68 65 72 65 20 6c 6f 6f 6b 73 20 74 6f 20 73 65  here looks to se
39d0: 65 20 69 66 20 74 68 65 0a 2a 2a 20 73 71 6c 69  e if the.** sqli
39e0: 74 65 33 5f 69 6e 74 65 72 72 75 70 74 28 29 20  te3_interrupt() 
39f0: 72 6f 75 74 69 6e 65 20 68 61 73 20 62 65 65 6e  routine has been
3a00: 20 63 61 6c 6c 65 64 2e 20 20 49 66 20 69 74 20   called.  If it 
3a10: 68 61 73 20 62 65 65 6e 2c 20 74 68 65 6e 0a 2a  has been, then.*
3a20: 2a 20 70 72 6f 63 65 73 73 69 6e 67 20 6f 66 20  * processing of 
3a30: 74 68 65 20 56 44 42 45 20 70 72 6f 67 72 61 6d  the VDBE program
3a40: 20 69 73 20 69 6e 74 65 72 72 75 70 74 65 64 2e   is interrupted.
3a50: 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6d 61 63 72  .**.** This macr
3a60: 6f 20 61 64 64 65 64 20 74 6f 20 65 76 65 72 79  o added to every
3a70: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 74 68 61   instruction tha
3a80: 74 20 64 6f 65 73 20 61 20 6a 75 6d 70 20 69 6e  t does a jump in
3a90: 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 69 6d 70   order to.** imp
3aa0: 6c 65 6d 65 6e 74 20 61 20 6c 6f 6f 70 2e 20 20  lement a loop.  
3ab0: 54 68 69 73 20 74 65 73 74 20 75 73 65 64 20 74  This test used t
3ac0: 6f 20 62 65 20 6f 6e 20 65 76 65 72 79 20 73 69  o be on every si
3ad0: 6e 67 6c 65 20 69 6e 73 74 72 75 63 74 69 6f 6e  ngle instruction
3ae0: 2c 0a 2a 2a 20 62 75 74 20 74 68 61 74 20 6d 65  ,.** but that me
3af0: 61 6e 74 20 77 65 20 6d 6f 72 65 20 74 65 73 74  ant we more test
3b00: 69 6e 67 20 74 68 61 74 20 77 65 20 6e 65 65 64  ing that we need
3b10: 65 64 2e 20 20 42 79 20 6f 6e 6c 79 20 74 65 73  ed.  By only tes
3b20: 74 69 6e 67 20 74 68 65 0a 2a 2a 20 66 6c 61 67  ting the.** flag
3b30: 20 6f 6e 20 6a 75 6d 70 20 69 6e 73 74 72 75 63   on jump instruc
3b40: 74 69 6f 6e 73 2c 20 77 65 20 67 65 74 20 61 20  tions, we get a 
3b50: 28 73 6d 61 6c 6c 29 20 73 70 65 65 64 20 69 6d  (small) speed im
3b60: 70 72 6f 76 65 6d 65 6e 74 2e 0a 2a 2f 0a 23 64  provement..*/.#d
3b70: 65 66 69 6e 65 20 43 48 45 43 4b 5f 46 4f 52 5f  efine CHECK_FOR_
3b80: 49 4e 54 45 52 52 55 50 54 20 5c 0a 20 20 20 69  INTERRUPT \.   i
3b90: 66 28 20 64 62 2d 3e 75 31 2e 69 73 49 6e 74 65  f( db->u1.isInte
3ba0: 72 72 75 70 74 65 64 20 29 20 67 6f 74 6f 20 61  rrupted ) goto a
3bb0: 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 69 6e 74 65  bort_due_to_inte
3bc0: 72 72 75 70 74 3b 0a 0a 0a 23 69 66 6e 64 65 66  rrupt;...#ifndef
3bd0: 20 4e 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20 54 68   NDEBUG./*.** Th
3be0: 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 6f  is function is o
3bf0: 6e 6c 79 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20  nly called from 
3c00: 77 69 74 68 69 6e 20 61 6e 20 61 73 73 65 72 74  within an assert
3c10: 28 29 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 49  () expression. I
3c20: 74 0a 2a 2a 20 63 68 65 63 6b 73 20 74 68 61 74  t.** checks that
3c30: 20 74 68 65 20 73 71 6c 69 74 65 33 2e 6e 54 72   the sqlite3.nTr
3c40: 61 6e 73 61 63 74 69 6f 6e 20 76 61 72 69 61 62  ansaction variab
3c50: 6c 65 20 69 73 20 63 6f 72 72 65 63 74 6c 79 20  le is correctly 
3c60: 73 65 74 20 74 6f 0a 2a 2a 20 74 68 65 20 6e 75  set to.** the nu
3c70: 6d 62 65 72 20 6f 66 20 6e 6f 6e 2d 74 72 61 6e  mber of non-tran
3c80: 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e  saction savepoin
3c90: 74 73 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20  ts currently in 
3ca0: 74 68 65 20 0a 2a 2a 20 6c 69 6e 6b 65 64 20 6c  the .** linked l
3cb0: 69 73 74 20 73 74 61 72 74 69 6e 67 20 61 74 20  ist starting at 
3cc0: 73 71 6c 69 74 65 33 2e 70 53 61 76 65 70 6f 69  sqlite3.pSavepoi
3cd0: 6e 74 2e 0a 2a 2a 20 0a 2a 2a 20 55 73 61 67 65  nt..** .** Usage
3ce0: 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 61 73 73 65  :.**.**     asse
3cf0: 72 74 28 20 63 68 65 63 6b 53 61 76 65 70 6f 69  rt( checkSavepoi
3d00: 6e 74 43 6f 75 6e 74 28 64 62 29 20 29 3b 0a 2a  ntCount(db) );.*
3d10: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 63 68 65  /.static int che
3d20: 63 6b 53 61 76 65 70 6f 69 6e 74 43 6f 75 6e 74  ckSavepointCount
3d30: 28 73 71 6c 69 74 65 33 20 2a 64 62 29 7b 0a 20  (sqlite3 *db){. 
3d40: 20 69 6e 74 20 6e 20 3d 20 30 3b 0a 20 20 53 61   int n = 0;.  Sa
3d50: 76 65 70 6f 69 6e 74 20 2a 70 3b 0a 20 20 66 6f  vepoint *p;.  fo
3d60: 72 28 70 3d 64 62 2d 3e 70 53 61 76 65 70 6f 69  r(p=db->pSavepoi
3d70: 6e 74 3b 20 70 3b 20 70 3d 70 2d 3e 70 4e 65 78  nt; p; p=p->pNex
3d80: 74 29 20 6e 2b 2b 3b 0a 20 20 61 73 73 65 72 74  t) n++;.  assert
3d90: 28 20 6e 3d 3d 28 64 62 2d 3e 6e 53 61 76 65 70  ( n==(db->nSavep
3da0: 6f 69 6e 74 20 2b 20 64 62 2d 3e 69 73 54 72 61  oint + db->isTra
3db0: 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e  nsactionSavepoin
3dc0: 74 29 20 29 3b 0a 20 20 72 65 74 75 72 6e 20 31  t) );.  return 1
3dd0: 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  ;.}.#endif../*.*
3de0: 2a 20 54 72 61 6e 73 66 65 72 20 65 72 72 6f 72  * Transfer error
3df0: 20 6d 65 73 73 61 67 65 20 74 65 78 74 20 66 72   message text fr
3e00: 6f 6d 20 61 6e 20 73 71 6c 69 74 65 33 5f 76 74  om an sqlite3_vt
3e10: 61 62 2e 7a 45 72 72 4d 73 67 20 28 74 65 78 74  ab.zErrMsg (text
3e20: 20 73 74 6f 72 65 64 0a 2a 2a 20 69 6e 20 6d 65   stored.** in me
3e30: 6d 6f 72 79 20 6f 62 74 61 69 6e 65 64 20 66 72  mory obtained fr
3e40: 6f 6d 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f  om sqlite3_mallo
3e50: 63 29 20 69 6e 74 6f 20 61 20 56 64 62 65 2e 7a  c) into a Vdbe.z
3e60: 45 72 72 4d 73 67 20 28 74 65 78 74 20 73 74 6f  ErrMsg (text sto
3e70: 72 65 64 0a 2a 2a 20 69 6e 20 6d 65 6d 6f 72 79  red.** in memory
3e80: 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 73   obtained from s
3e90: 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 29 2e  qlite3DbMalloc).
3ea0: 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20  .*/.static void 
3eb0: 69 6d 70 6f 72 74 56 74 61 62 45 72 72 4d 73 67  importVtabErrMsg
3ec0: 28 56 64 62 65 20 2a 70 2c 20 73 71 6c 69 74 65  (Vdbe *p, sqlite
3ed0: 33 5f 76 74 61 62 20 2a 70 56 74 61 62 29 7b 0a  3_vtab *pVtab){.
3ee0: 20 20 73 71 6c 69 74 65 33 20 2a 64 62 20 3d 20    sqlite3 *db = 
3ef0: 70 2d 3e 64 62 3b 0a 20 20 73 71 6c 69 74 65 33  p->db;.  sqlite3
3f00: 44 62 46 72 65 65 28 64 62 2c 20 70 2d 3e 7a 45  DbFree(db, p->zE
3f10: 72 72 4d 73 67 29 3b 0a 20 20 70 2d 3e 7a 45 72  rrMsg);.  p->zEr
3f20: 72 4d 73 67 20 3d 20 73 71 6c 69 74 65 33 44 62  rMsg = sqlite3Db
3f30: 53 74 72 44 75 70 28 64 62 2c 20 70 56 74 61 62  StrDup(db, pVtab
3f40: 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 73 71  ->zErrMsg);.  sq
3f50: 6c 69 74 65 33 5f 66 72 65 65 28 70 56 74 61 62  lite3_free(pVtab
3f60: 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 70 56  ->zErrMsg);.  pV
3f70: 74 61 62 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 30  tab->zErrMsg = 0
3f80: 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 45 78 65 63  ;.}.../*.** Exec
3f90: 75 74 65 20 61 73 20 6d 75 63 68 20 6f 66 20 61  ute as much of a
3fa0: 20 56 44 42 45 20 70 72 6f 67 72 61 6d 20 61 73   VDBE program as
3fb0: 20 77 65 20 63 61 6e 20 74 68 65 6e 20 72 65 74   we can then ret
3fc0: 75 72 6e 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74  urn..**.** sqlit
3fd0: 65 33 56 64 62 65 4d 61 6b 65 52 65 61 64 79 28  e3VdbeMakeReady(
3fe0: 29 20 6d 75 73 74 20 62 65 20 63 61 6c 6c 65 64  ) must be called
3ff0: 20 62 65 66 6f 72 65 20 74 68 69 73 20 72 6f 75   before this rou
4000: 74 69 6e 65 20 69 6e 20 6f 72 64 65 72 20 74 6f  tine in order to
4010: 0a 2a 2a 20 63 6c 6f 73 65 20 74 68 65 20 70 72  .** close the pr
4020: 6f 67 72 61 6d 20 77 69 74 68 20 61 20 66 69 6e  ogram with a fin
4030: 61 6c 20 4f 50 5f 48 61 6c 74 20 61 6e 64 20 74  al OP_Halt and t
4040: 6f 20 73 65 74 20 75 70 20 74 68 65 20 63 61 6c  o set up the cal
4050: 6c 62 61 63 6b 73 0a 2a 2a 20 61 6e 64 20 74 68  lbacks.** and th
4060: 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20  e error message 
4070: 70 6f 69 6e 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 57  pointer..**.** W
4080: 68 65 6e 65 76 65 72 20 61 20 72 6f 77 20 6f 72  henever a row or
4090: 20 72 65 73 75 6c 74 20 64 61 74 61 20 69 73 20   result data is 
40a0: 61 76 61 69 6c 61 62 6c 65 2c 20 74 68 69 73 20  available, this 
40b0: 72 6f 75 74 69 6e 65 20 77 69 6c 6c 20 65 69 74  routine will eit
40c0: 68 65 72 0a 2a 2a 20 69 6e 76 6f 6b 65 20 74 68  her.** invoke th
40d0: 65 20 72 65 73 75 6c 74 20 63 61 6c 6c 62 61 63  e result callbac
40e0: 6b 20 28 69 66 20 74 68 65 72 65 20 69 73 20 6f  k (if there is o
40f0: 6e 65 29 20 6f 72 20 72 65 74 75 72 6e 20 77 69  ne) or return wi
4100: 74 68 0a 2a 2a 20 53 51 4c 49 54 45 5f 52 4f 57  th.** SQLITE_ROW
4110: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 61 6e 20 61 74  ..**.** If an at
4120: 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20 74 6f  tempt is made to
4130: 20 6f 70 65 6e 20 61 20 6c 6f 63 6b 65 64 20 64   open a locked d
4140: 61 74 61 62 61 73 65 2c 20 74 68 65 6e 20 74 68  atabase, then th
4150: 69 73 20 72 6f 75 74 69 6e 65 0a 2a 2a 20 77 69  is routine.** wi
4160: 6c 6c 20 65 69 74 68 65 72 20 69 6e 76 6f 6b 65  ll either invoke
4170: 20 74 68 65 20 62 75 73 79 20 63 61 6c 6c 62 61   the busy callba
4180: 63 6b 20 28 69 66 20 74 68 65 72 65 20 69 73 20  ck (if there is 
4190: 6f 6e 65 29 20 6f 72 20 69 74 20 77 69 6c 6c 0a  one) or it will.
41a0: 2a 2a 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45  ** return SQLITE
41b0: 5f 42 55 53 59 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  _BUSY..**.** If 
41c0: 61 6e 20 65 72 72 6f 72 20 6f 63 63 75 72 73 2c  an error occurs,
41d0: 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67   an error messag
41e0: 65 20 69 73 20 77 72 69 74 74 65 6e 20 74 6f 20  e is written to 
41f0: 6d 65 6d 6f 72 79 20 6f 62 74 61 69 6e 65 64 0a  memory obtained.
4200: 2a 2a 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 5f  ** from sqlite3_
4210: 6d 61 6c 6c 6f 63 28 29 20 61 6e 64 20 70 2d 3e  malloc() and p->
4220: 7a 45 72 72 4d 73 67 20 69 73 20 6d 61 64 65 20  zErrMsg is made 
4230: 74 6f 20 70 6f 69 6e 74 20 74 6f 20 74 68 61 74  to point to that
4240: 20 6d 65 6d 6f 72 79 2e 0a 2a 2a 20 54 68 65 20   memory..** The 
4250: 65 72 72 6f 72 20 63 6f 64 65 20 69 73 20 73 74  error code is st
4260: 6f 72 65 64 20 69 6e 20 70 2d 3e 72 63 20 61 6e  ored in p->rc an
4270: 64 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 72  d this routine r
4280: 65 74 75 72 6e 73 20 53 51 4c 49 54 45 5f 45 52  eturns SQLITE_ER
4290: 52 4f 52 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ROR..**.** If th
42a0: 65 20 63 61 6c 6c 62 61 63 6b 20 65 76 65 72 20  e callback ever 
42b0: 72 65 74 75 72 6e 73 20 6e 6f 6e 2d 7a 65 72 6f  returns non-zero
42c0: 2c 20 74 68 65 6e 20 74 68 65 20 70 72 6f 67 72  , then the progr
42d0: 61 6d 20 65 78 69 74 73 0a 2a 2a 20 69 6d 6d 65  am exits.** imme
42e0: 64 69 61 74 65 6c 79 2e 20 20 54 68 65 72 65 20  diately.  There 
42f0: 77 69 6c 6c 20 62 65 20 6e 6f 20 65 72 72 6f 72  will be no error
4300: 20 6d 65 73 73 61 67 65 20 62 75 74 20 74 68 65   message but the
4310: 20 70 2d 3e 72 63 20 66 69 65 6c 64 20 69 73 0a   p->rc field is.
4320: 2a 2a 20 73 65 74 20 74 6f 20 53 51 4c 49 54 45  ** set to SQLITE
4330: 5f 41 42 4f 52 54 20 61 6e 64 20 74 68 69 73 20  _ABORT and this 
4340: 72 6f 75 74 69 6e 65 20 77 69 6c 6c 20 72 65 74  routine will ret
4350: 75 72 6e 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  urn SQLITE_ERROR
4360: 2e 0a 2a 2a 0a 2a 2a 20 41 20 6d 65 6d 6f 72 79  ..**.** A memory
4370: 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 65 72 72 6f   allocation erro
4380: 72 20 63 61 75 73 65 73 20 70 2d 3e 72 63 20 74  r causes p->rc t
4390: 6f 20 62 65 20 73 65 74 20 74 6f 20 53 51 4c 49  o be set to SQLI
43a0: 54 45 5f 4e 4f 4d 45 4d 20 61 6e 64 20 74 68 69  TE_NOMEM and thi
43b0: 73 0a 2a 2a 20 72 6f 75 74 69 6e 65 20 74 6f 20  s.** routine to 
43c0: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 45 52  return SQLITE_ER
43d0: 52 4f 52 2e 0a 2a 2a 0a 2a 2a 20 4f 74 68 65 72  ROR..**.** Other
43e0: 20 66 61 74 61 6c 20 65 72 72 6f 72 73 20 72 65   fatal errors re
43f0: 74 75 72 6e 20 53 51 4c 49 54 45 5f 45 52 52 4f  turn SQLITE_ERRO
4400: 52 2e 0a 2a 2a 0a 2a 2a 20 41 66 74 65 72 20 74  R..**.** After t
4410: 68 69 73 20 72 6f 75 74 69 6e 65 20 68 61 73 20  his routine has 
4420: 66 69 6e 69 73 68 65 64 2c 20 73 71 6c 69 74 65  finished, sqlite
4430: 33 56 64 62 65 46 69 6e 61 6c 69 7a 65 28 29 20  3VdbeFinalize() 
4440: 73 68 6f 75 6c 64 20 62 65 0a 2a 2a 20 75 73 65  should be.** use
4450: 64 20 74 6f 20 63 6c 65 61 6e 20 75 70 20 74 68  d to clean up th
4460: 65 20 6d 65 73 73 20 74 68 61 74 20 77 61 73 20  e mess that was 
4470: 6c 65 66 74 20 62 65 68 69 6e 64 2e 0a 2a 2f 0a  left behind..*/.
4480: 69 6e 74 20 73 71 6c 69 74 65 33 56 64 62 65 45  int sqlite3VdbeE
4490: 78 65 63 28 0a 20 20 56 64 62 65 20 2a 70 20 20  xec(.  Vdbe *p  
44a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
44b0: 20 20 2f 2a 20 54 68 65 20 56 44 42 45 20 2a 2f    /* The VDBE */
44c0: 0a 29 7b 0a 20 20 69 6e 74 20 70 63 3d 30 3b 20  .){.  int pc=0; 
44d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
44e0: 20 2f 2a 20 54 68 65 20 70 72 6f 67 72 61 6d 20   /* The program 
44f0: 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 4f 70 20  counter */.  Op 
4500: 2a 61 4f 70 20 3d 20 70 2d 3e 61 4f 70 3b 20 20  *aOp = p->aOp;  
4510: 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 70 79 20          /* Copy 
4520: 6f 66 20 70 2d 3e 61 4f 70 20 2a 2f 0a 20 20 4f  of p->aOp */.  O
4530: 70 20 2a 70 4f 70 3b 20 20 20 20 20 20 20 20 20  p *pOp;         
4540: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72            /* Cur
4550: 72 65 6e 74 20 6f 70 65 72 61 74 69 6f 6e 20 2a  rent operation *
4560: 2f 0a 20 20 69 6e 74 20 72 63 20 3d 20 53 51 4c  /.  int rc = SQL
4570: 49 54 45 5f 4f 4b 3b 20 20 20 20 20 20 20 20 2f  ITE_OK;        /
4580: 2a 20 56 61 6c 75 65 20 74 6f 20 72 65 74 75 72  * Value to retur
4590: 6e 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a  n */.  sqlite3 *
45a0: 64 62 20 3d 20 70 2d 3e 64 62 3b 20 20 20 20 20  db = p->db;     
45b0: 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73    /* The databas
45c0: 65 20 2a 2f 0a 20 20 75 38 20 72 65 73 65 74 53  e */.  u8 resetS
45d0: 63 68 65 6d 61 4f 6e 46 61 75 6c 74 20 3d 20 30  chemaOnFault = 0
45e0: 3b 20 2f 2a 20 52 65 73 65 74 20 73 63 68 65 6d  ; /* Reset schem
45f0: 61 20 61 66 74 65 72 20 61 6e 20 65 72 72 6f 72  a after an error
4600: 20 69 66 20 74 72 75 65 20 2a 2f 0a 20 20 75 38   if true */.  u8
4610: 20 65 6e 63 6f 64 69 6e 67 20 3d 20 45 4e 43 28   encoding = ENC(
4620: 64 62 29 3b 20 20 20 20 20 2f 2a 20 54 68 65 20  db);     /* The 
4630: 64 61 74 61 62 61 73 65 20 65 6e 63 6f 64 69 6e  database encodin
4640: 67 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  g */.#ifndef SQL
4650: 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53  ITE_OMIT_PROGRES
4660: 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 69 6e 74  S_CALLBACK.  int
4670: 20 63 68 65 63 6b 50 72 6f 67 72 65 73 73 3b 20   checkProgress; 
4680: 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
4690: 69 66 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c  if progress call
46a0: 62 61 63 6b 73 20 61 72 65 20 65 6e 61 62 6c 65  backs are enable
46b0: 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 50 72 6f 67  d */.  int nProg
46c0: 72 65 73 73 4f 70 73 20 3d 20 30 3b 20 20 20 20  ressOps = 0;    
46d0: 20 20 2f 2a 20 4f 70 63 6f 64 65 73 20 65 78 65    /* Opcodes exe
46e0: 63 75 74 65 64 20 73 69 6e 63 65 20 70 72 6f 67  cuted since prog
46f0: 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 2e 20 2a  ress callback. *
4700: 2f 0a 23 65 6e 64 69 66 0a 20 20 4d 65 6d 20 2a  /.#endif.  Mem *
4710: 61 4d 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b 20  aMem = p->aMem; 
4720: 20 20 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66        /* Copy of
4730: 20 70 2d 3e 61 4d 65 6d 20 2a 2f 0a 20 20 4d 65   p->aMem */.  Me
4740: 6d 20 2a 70 49 6e 31 20 3d 20 30 3b 20 20 20 20  m *pIn1 = 0;    
4750: 20 20 20 20 20 20 20 20 20 2f 2a 20 31 73 74 20           /* 1st 
4760: 69 6e 70 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f  input operand */
4770: 0a 20 20 4d 65 6d 20 2a 70 49 6e 32 20 3d 20 30  .  Mem *pIn2 = 0
4780: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
4790: 20 32 6e 64 20 69 6e 70 75 74 20 6f 70 65 72 61   2nd input opera
47a0: 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e  nd */.  Mem *pIn
47b0: 33 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20  3 = 0;          
47c0: 20 20 20 2f 2a 20 33 72 64 20 69 6e 70 75 74 20     /* 3rd input 
47d0: 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d  operand */.  Mem
47e0: 20 2a 70 4f 75 74 20 3d 20 30 3b 20 20 20 20 20   *pOut = 0;     
47f0: 20 20 20 20 20 20 20 20 2f 2a 20 4f 75 74 70 75          /* Outpu
4800: 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 69  t operand */.  i
4810: 6e 74 20 69 43 6f 6d 70 61 72 65 20 3d 20 30 3b  nt iCompare = 0;
4820: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73            /* Res
4830: 75 6c 74 20 6f 66 20 6c 61 73 74 20 4f 50 5f 43  ult of last OP_C
4840: 6f 6d 70 61 72 65 20 6f 70 65 72 61 74 69 6f 6e  ompare operation
4850: 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 50 65 72 6d   */.  int *aPerm
4860: 75 74 65 20 3d 20 30 3b 20 20 20 20 20 20 20 20  ute = 0;        
4870: 20 2f 2a 20 50 65 72 6d 75 74 61 74 69 6f 6e 20   /* Permutation 
4880: 6f 66 20 63 6f 6c 75 6d 6e 73 20 66 6f 72 20 4f  of columns for O
4890: 50 5f 43 6f 6d 70 61 72 65 20 2a 2f 0a 23 69 66  P_Compare */.#if
48a0: 64 65 66 20 56 44 42 45 5f 50 52 4f 46 49 4c 45  def VDBE_PROFILE
48b0: 0a 20 20 75 36 34 20 73 74 61 72 74 3b 20 20 20  .  u64 start;   
48c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
48d0: 20 43 50 55 20 63 6c 6f 63 6b 20 63 6f 75 6e 74   CPU clock count
48e0: 20 61 74 20 73 74 61 72 74 20 6f 66 20 6f 70 63   at start of opc
48f0: 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20 6f 72 69  ode */.  int ori
4900: 67 50 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  gPc;            
4910: 20 20 20 20 2f 2a 20 50 72 6f 67 72 61 6d 20 63      /* Program c
4920: 6f 75 6e 74 65 72 20 61 74 20 73 74 61 72 74 20  ounter at start 
4930: 6f 66 20 6f 70 63 6f 64 65 20 2a 2f 0a 23 65 6e  of opcode */.#en
4940: 64 69 66 0a 20 20 2f 2a 2a 2a 20 49 4e 53 45 52  dif.  /*** INSER
4950: 54 20 53 54 41 43 4b 20 55 4e 49 4f 4e 20 48 45  T STACK UNION HE
4960: 52 45 20 2a 2a 2a 2f 0a 0a 20 20 61 73 73 65 72  RE ***/..  asser
4970: 74 28 20 70 2d 3e 6d 61 67 69 63 3d 3d 56 44 42  t( p->magic==VDB
4980: 45 5f 4d 41 47 49 43 5f 52 55 4e 20 29 3b 20 20  E_MAGIC_RUN );  
4990: 2f 2a 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28  /* sqlite3_step(
49a0: 29 20 76 65 72 69 66 69 65 73 20 74 68 69 73 20  ) verifies this 
49b0: 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  */.  sqlite3Vdbe
49c0: 4d 75 74 65 78 41 72 72 61 79 45 6e 74 65 72 28  MutexArrayEnter(
49d0: 70 29 3b 0a 20 20 69 66 28 20 70 2d 3e 72 63 3d  p);.  if( p->rc=
49e0: 3d 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 29 7b  =SQLITE_NOMEM ){
49f0: 0a 20 20 20 20 2f 2a 20 54 68 69 73 20 68 61 70  .    /* This hap
4a00: 70 65 6e 73 20 69 66 20 61 20 6d 61 6c 6c 6f 63  pens if a malloc
4a10: 28 29 20 69 6e 73 69 64 65 20 61 20 63 61 6c 6c  () inside a call
4a20: 20 74 6f 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75   to sqlite3_colu
4a30: 6d 6e 5f 74 65 78 74 28 29 20 6f 72 0a 20 20 20  mn_text() or.   
4a40: 20 2a 2a 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75   ** sqlite3_colu
4a50: 6d 6e 5f 74 65 78 74 31 36 28 29 20 66 61 69 6c  mn_text16() fail
4a60: 65 64 2e 20 20 2a 2f 0a 20 20 20 20 67 6f 74 6f  ed.  */.    goto
4a70: 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 61   no_mem;.  }.  a
4a80: 73 73 65 72 74 28 20 70 2d 3e 72 63 3d 3d 53 51  ssert( p->rc==SQ
4a90: 4c 49 54 45 5f 4f 4b 20 7c 7c 20 70 2d 3e 72 63  LITE_OK || p->rc
4aa0: 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29 3b  ==SQLITE_BUSY );
4ab0: 0a 20 20 70 2d 3e 72 63 20 3d 20 53 51 4c 49 54  .  p->rc = SQLIT
4ac0: 45 5f 4f 4b 3b 0a 20 20 61 73 73 65 72 74 28 20  E_OK;.  assert( 
4ad0: 70 2d 3e 65 78 70 6c 61 69 6e 3d 3d 30 20 29 3b  p->explain==0 );
4ae0: 0a 20 20 70 2d 3e 70 52 65 73 75 6c 74 53 65 74  .  p->pResultSet
4af0: 20 3d 20 30 3b 0a 20 20 64 62 2d 3e 62 75 73 79   = 0;.  db->busy
4b00: 48 61 6e 64 6c 65 72 2e 6e 42 75 73 79 20 3d 20  Handler.nBusy = 
4b10: 30 3b 0a 20 20 43 48 45 43 4b 5f 46 4f 52 5f 49  0;.  CHECK_FOR_I
4b20: 4e 54 45 52 52 55 50 54 3b 0a 20 20 73 71 6c 69  NTERRUPT;.  sqli
4b30: 74 65 33 56 64 62 65 49 4f 54 72 61 63 65 53 71  te3VdbeIOTraceSq
4b40: 6c 28 70 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  l(p);.#ifndef SQ
4b50: 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45  LITE_OMIT_PROGRE
4b60: 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 63 68  SS_CALLBACK.  ch
4b70: 65 63 6b 50 72 6f 67 72 65 73 73 20 3d 20 64 62  eckProgress = db
4b80: 2d 3e 78 50 72 6f 67 72 65 73 73 21 3d 30 3b 0a  ->xProgress!=0;.
4b90: 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51  #endif.#ifdef SQ
4ba0: 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 73 71 6c  LITE_DEBUG.  sql
4bb0: 69 74 65 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d  ite3BeginBenignM
4bc0: 61 6c 6c 6f 63 28 29 3b 0a 20 20 69 66 28 20 70  alloc();.  if( p
4bd0: 2d 3e 70 63 3d 3d 30 20 20 26 26 20 28 70 2d 3e  ->pc==0  && (p->
4be0: 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49  db->flags & SQLI
4bf0: 54 45 5f 56 64 62 65 4c 69 73 74 69 6e 67 29 21  TE_VdbeListing)!
4c00: 3d 30 20 29 7b 0a 20 20 20 20 69 6e 74 20 69 3b  =0 ){.    int i;
4c10: 0a 20 20 20 20 70 72 69 6e 74 66 28 22 56 44 42  .    printf("VDB
4c20: 45 20 50 72 6f 67 72 61 6d 20 4c 69 73 74 69 6e  E Program Listin
4c30: 67 3a 5c 6e 22 29 3b 0a 20 20 20 20 73 71 6c 69  g:\n");.    sqli
4c40: 74 65 33 56 64 62 65 50 72 69 6e 74 53 71 6c 28  te3VdbePrintSql(
4c50: 70 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b  p);.    for(i=0;
4c60: 20 69 3c 70 2d 3e 6e 4f 70 3b 20 69 2b 2b 29 7b   i<p->nOp; i++){
4c70: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
4c80: 62 65 50 72 69 6e 74 4f 70 28 73 74 64 6f 75 74  bePrintOp(stdout
4c90: 2c 20 69 2c 20 26 61 4f 70 5b 69 5d 29 3b 0a 20  , i, &aOp[i]);. 
4ca0: 20 20 20 7d 0a 20 20 7d 0a 20 20 73 71 6c 69 74     }.  }.  sqlit
4cb0: 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f  e3EndBenignMallo
4cc0: 63 28 29 3b 0a 23 65 6e 64 69 66 0a 20 20 66 6f  c();.#endif.  fo
4cd0: 72 28 70 63 3d 70 2d 3e 70 63 3b 20 72 63 3d 3d  r(pc=p->pc; rc==
4ce0: 53 51 4c 49 54 45 5f 4f 4b 3b 20 70 63 2b 2b 29  SQLITE_OK; pc++)
4cf0: 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 63  {.    assert( pc
4d00: 3e 3d 30 20 26 26 20 70 63 3c 70 2d 3e 6e 4f 70  >=0 && pc<p->nOp
4d10: 20 29 3b 0a 20 20 20 20 69 66 28 20 64 62 2d 3e   );.    if( db->
4d20: 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 20 67  mallocFailed ) g
4d30: 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 23 69 66 64  oto no_mem;.#ifd
4d40: 65 66 20 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a  ef VDBE_PROFILE.
4d50: 20 20 20 20 6f 72 69 67 50 63 20 3d 20 70 63 3b      origPc = pc;
4d60: 0a 20 20 20 20 73 74 61 72 74 20 3d 20 73 71 6c  .    start = sql
4d70: 69 74 65 33 48 77 74 69 6d 65 28 29 3b 0a 23 65  ite3Hwtime();.#e
4d80: 6e 64 69 66 0a 20 20 20 20 70 4f 70 20 3d 20 26  ndif.    pOp = &
4d90: 61 4f 70 5b 70 63 5d 3b 0a 0a 20 20 20 20 2f 2a  aOp[pc];..    /*
4da0: 20 4f 6e 6c 79 20 61 6c 6c 6f 77 20 74 72 61 63   Only allow trac
4db0: 69 6e 67 20 69 66 20 53 51 4c 49 54 45 5f 44 45  ing if SQLITE_DE
4dc0: 42 55 47 20 69 73 20 64 65 66 69 6e 65 64 2e 0a  BUG is defined..
4dd0: 20 20 20 20 2a 2f 0a 23 69 66 64 65 66 20 53 51      */.#ifdef SQ
4de0: 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20 69  LITE_DEBUG.    i
4df0: 66 28 20 70 2d 3e 74 72 61 63 65 20 29 7b 0a 20  f( p->trace ){. 
4e00: 20 20 20 20 20 69 66 28 20 70 63 3d 3d 30 20 29       if( pc==0 )
4e10: 7b 0a 20 20 20 20 20 20 20 20 70 72 69 6e 74 66  {.        printf
4e20: 28 22 56 44 42 45 20 45 78 65 63 75 74 69 6f 6e  ("VDBE Execution
4e30: 20 54 72 61 63 65 3a 5c 6e 22 29 3b 0a 20 20 20   Trace:\n");.   
4e40: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
4e50: 50 72 69 6e 74 53 71 6c 28 70 29 3b 0a 20 20 20  PrintSql(p);.   
4e60: 20 20 20 7d 0a 20 20 20 20 20 20 73 71 6c 69 74     }.      sqlit
4e70: 65 33 56 64 62 65 50 72 69 6e 74 4f 70 28 70 2d  e3VdbePrintOp(p-
4e80: 3e 74 72 61 63 65 2c 20 70 63 2c 20 70 4f 70 29  >trace, pc, pOp)
4e90: 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20  ;.    }.#endif. 
4ea0: 20 20 20 20 20 0a 0a 20 20 20 20 2f 2a 20 43 68       ..    /* Ch
4eb0: 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 77 65  eck to see if we
4ec0: 20 6e 65 65 64 20 74 6f 20 73 69 6d 75 6c 61 74   need to simulat
4ed0: 65 20 61 6e 20 69 6e 74 65 72 72 75 70 74 2e 20  e an interrupt. 
4ee0: 20 54 68 69 73 20 6f 6e 6c 79 20 68 61 70 70 65   This only happe
4ef0: 6e 73 0a 20 20 20 20 2a 2a 20 69 66 20 77 65 20  ns.    ** if we 
4f00: 68 61 76 65 20 61 20 73 70 65 63 69 61 6c 20 74  have a special t
4f10: 65 73 74 20 62 75 69 6c 64 2e 0a 20 20 20 20 2a  est build..    *
4f20: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
4f30: 54 45 53 54 0a 20 20 20 20 69 66 28 20 73 71 6c  TEST.    if( sql
4f40: 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 5f 63  ite3_interrupt_c
4f50: 6f 75 6e 74 3e 30 20 29 7b 0a 20 20 20 20 20 20  ount>0 ){.      
4f60: 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70  sqlite3_interrup
4f70: 74 5f 63 6f 75 6e 74 2d 2d 3b 0a 20 20 20 20 20  t_count--;.     
4f80: 20 69 66 28 20 73 71 6c 69 74 65 33 5f 69 6e 74   if( sqlite3_int
4f90: 65 72 72 75 70 74 5f 63 6f 75 6e 74 3d 3d 30 20  errupt_count==0 
4fa0: 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  ){.        sqlit
4fb0: 65 33 5f 69 6e 74 65 72 72 75 70 74 28 64 62 29  e3_interrupt(db)
4fc0: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
4fd0: 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20  #endif..#ifndef 
4fe0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47  SQLITE_OMIT_PROG
4ff0: 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20  RESS_CALLBACK.  
5000: 20 20 2f 2a 20 43 61 6c 6c 20 74 68 65 20 70 72    /* Call the pr
5010: 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20  ogress callback 
5020: 69 66 20 69 74 20 69 73 20 63 6f 6e 66 69 67 75  if it is configu
5030: 72 65 64 20 61 6e 64 20 74 68 65 20 72 65 71 75  red and the requ
5040: 69 72 65 64 20 6e 75 6d 62 65 72 0a 20 20 20 20  ired number.    
5050: 2a 2a 20 6f 66 20 56 44 42 45 20 6f 70 73 20 68  ** of VDBE ops h
5060: 61 76 65 20 62 65 65 6e 20 65 78 65 63 75 74 65  ave been execute
5070: 64 20 28 65 69 74 68 65 72 20 73 69 6e 63 65 20  d (either since 
5080: 74 68 69 73 20 69 6e 76 6f 63 61 74 69 6f 6e 20  this invocation 
5090: 6f 66 0a 20 20 20 20 2a 2a 20 73 71 6c 69 74 65  of.    ** sqlite
50a0: 33 56 64 62 65 45 78 65 63 28 29 20 6f 72 20 73  3VdbeExec() or s
50b0: 69 6e 63 65 20 6c 61 73 74 20 74 69 6d 65 20 74  ince last time t
50c0: 68 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c  he progress call
50d0: 62 61 63 6b 20 77 61 73 20 63 61 6c 6c 65 64 29  back was called)
50e0: 2e 0a 20 20 20 20 2a 2a 20 49 66 20 74 68 65 20  ..    ** If the 
50f0: 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63  progress callbac
5100: 6b 20 72 65 74 75 72 6e 73 20 6e 6f 6e 2d 7a 65  k returns non-ze
5110: 72 6f 2c 20 65 78 69 74 20 74 68 65 20 76 69 72  ro, exit the vir
5120: 74 75 61 6c 20 6d 61 63 68 69 6e 65 20 77 69 74  tual machine wit
5130: 68 0a 20 20 20 20 2a 2a 20 61 20 72 65 74 75 72  h.    ** a retur
5140: 6e 20 63 6f 64 65 20 53 51 4c 49 54 45 5f 41 42  n code SQLITE_AB
5150: 4f 52 54 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  ORT..    */.    
5160: 69 66 28 20 63 68 65 63 6b 50 72 6f 67 72 65 73  if( checkProgres
5170: 73 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 64  s ){.      if( d
5180: 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 3d  b->nProgressOps=
5190: 3d 6e 50 72 6f 67 72 65 73 73 4f 70 73 20 29 7b  =nProgressOps ){
51a0: 0a 20 20 20 20 20 20 20 20 69 6e 74 20 70 72 63  .        int prc
51b0: 3b 0a 20 20 20 20 20 20 20 20 70 72 63 20 3d 20  ;.        prc = 
51c0: 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 28 64 62  db->xProgress(db
51d0: 2d 3e 70 50 72 6f 67 72 65 73 73 41 72 67 29 3b  ->pProgressArg);
51e0: 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 72 63  .        if( prc
51f0: 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20  !=0 ){.         
5200: 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54   rc = SQLITE_INT
5210: 45 52 52 55 50 54 3b 0a 20 20 20 20 20 20 20 20  ERRUPT;.        
5220: 20 20 67 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f    goto vdbe_erro
5230: 72 5f 68 61 6c 74 3b 0a 20 20 20 20 20 20 20 20  r_halt;.        
5240: 7d 0a 20 20 20 20 20 20 20 20 6e 50 72 6f 67 72  }.        nProgr
5250: 65 73 73 4f 70 73 20 3d 20 30 3b 0a 20 20 20 20  essOps = 0;.    
5260: 20 20 7d 0a 20 20 20 20 20 20 6e 50 72 6f 67 72    }.      nProgr
5270: 65 73 73 4f 70 73 2b 2b 3b 0a 20 20 20 20 7d 0a  essOps++;.    }.
5280: 23 65 6e 64 69 66 0a 0a 20 20 20 20 2f 2a 20 4f  #endif..    /* O
5290: 6e 20 61 6e 79 20 6f 70 63 6f 64 65 20 77 69 74  n any opcode wit
52a0: 68 20 74 68 65 20 22 6f 75 74 32 2d 70 72 65 72  h the "out2-prer
52b0: 65 6c 61 73 65 22 20 74 61 67 2c 20 66 72 65 65  elase" tag, free
52c0: 20 61 6e 79 0a 20 20 20 20 2a 2a 20 65 78 74 65   any.    ** exte
52d0: 72 6e 61 6c 20 61 6c 6c 6f 63 61 74 69 6f 6e 73  rnal allocations
52e0: 20 6f 75 74 20 6f 66 20 6d 65 6d 5b 70 32 5d 20   out of mem[p2] 
52f0: 61 6e 64 20 73 65 74 20 6d 65 6d 5b 70 32 5d 20  and set mem[p2] 
5300: 74 6f 20 62 65 0a 20 20 20 20 2a 2a 20 61 6e 20  to be.    ** an 
5310: 75 6e 64 65 66 69 6e 65 64 20 69 6e 74 65 67 65  undefined intege
5320: 72 2e 20 20 4f 70 63 6f 64 65 73 20 77 69 6c 6c  r.  Opcodes will
5330: 20 65 69 74 68 65 72 20 66 69 6c 6c 20 69 6e 20   either fill in 
5340: 74 68 65 20 69 6e 74 65 67 65 72 0a 20 20 20 20  the integer.    
5350: 2a 2a 20 76 61 6c 75 65 20 6f 72 20 63 6f 6e 76  ** value or conv
5360: 65 72 74 20 6d 65 6d 5b 70 32 5d 20 74 6f 20 61  ert mem[p2] to a
5370: 20 64 69 66 66 65 72 65 6e 74 20 74 79 70 65 2e   different type.
5380: 0a 20 20 20 20 2a 2f 0a 20 20 20 20 61 73 73 65  .    */.    asse
5390: 72 74 28 20 70 4f 70 2d 3e 6f 70 66 6c 61 67 73  rt( pOp->opflags
53a0: 3d 3d 73 71 6c 69 74 65 33 4f 70 63 6f 64 65 50  ==sqlite3OpcodeP
53b0: 72 6f 70 65 72 74 79 5b 70 4f 70 2d 3e 6f 70 63  roperty[pOp->opc
53c0: 6f 64 65 5d 20 29 3b 0a 20 20 20 20 69 66 28 20  ode] );.    if( 
53d0: 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f  pOp->opflags & O
53e0: 50 46 4c 47 5f 4f 55 54 32 5f 50 52 45 52 45 4c  PFLG_OUT2_PREREL
53f0: 45 41 53 45 20 29 7b 0a 20 20 20 20 20 20 61 73  EASE ){.      as
5400: 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20  sert( pOp->p2>0 
5410: 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
5420: 20 70 4f 70 2d 3e 70 32 3c 3d 70 2d 3e 6e 4d 65   pOp->p2<=p->nMe
5430: 6d 20 29 3b 0a 20 20 20 20 20 20 70 4f 75 74 20  m );.      pOut 
5440: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
5450: 3b 0a 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74  ;.      memAbout
5460: 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74  ToChange(p, pOut
5470: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
5480: 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 45 78  VdbeMemReleaseEx
5490: 74 65 72 6e 61 6c 28 70 4f 75 74 29 3b 0a 20 20  ternal(pOut);.  
54a0: 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20      pOut->flags 
54b0: 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 7d  = MEM_Int;.    }
54c0: 0a 0a 20 20 20 20 2f 2a 20 53 61 6e 69 74 79 20  ..    /* Sanity 
54d0: 63 68 65 63 6b 69 6e 67 20 6f 6e 20 6f 74 68 65  checking on othe
54e0: 72 20 6f 70 65 72 61 6e 64 73 20 2a 2f 0a 23 69  r operands */.#i
54f0: 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
5500: 47 0a 20 20 20 20 69 66 28 20 28 70 4f 70 2d 3e  G.    if( (pOp->
5510: 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f  opflags & OPFLG_
5520: 49 4e 31 29 21 3d 30 20 29 7b 0a 20 20 20 20 20  IN1)!=0 ){.     
5530: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
5540: 3e 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  >0 );.      asse
5550: 72 74 28 20 70 4f 70 2d 3e 70 31 3c 3d 70 2d 3e  rt( pOp->p1<=p->
5560: 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20 61 73  nMem );.      as
5570: 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
5580: 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 29  (&aMem[pOp->p1])
5590: 20 29 3b 0a 20 20 20 20 20 20 52 45 47 49 53 54   );.      REGIST
55a0: 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31  ER_TRACE(pOp->p1
55b0: 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  , &aMem[pOp->p1]
55c0: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  );.    }.    if(
55d0: 20 28 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26   (pOp->opflags &
55e0: 20 4f 50 46 4c 47 5f 49 4e 32 29 21 3d 30 20 29   OPFLG_IN2)!=0 )
55f0: 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  {.      assert( 
5600: 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 20  pOp->p2>0 );.   
5610: 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
5620: 70 32 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20  p2<=p->nMem );. 
5630: 20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d       assert( mem
5640: 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f  IsValid(&aMem[pO
5650: 70 2d 3e 70 32 5d 29 20 29 3b 0a 20 20 20 20 20  p->p2]) );.     
5660: 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
5670: 70 4f 70 2d 3e 70 32 2c 20 26 61 4d 65 6d 5b 70  pOp->p2, &aMem[p
5680: 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20 20 20 7d 0a  Op->p2]);.    }.
5690: 20 20 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70      if( (pOp->op
56a0: 66 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f 49 4e  flags & OPFLG_IN
56b0: 33 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 61  3)!=0 ){.      a
56c0: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30  ssert( pOp->p3>0
56d0: 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
56e0: 28 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d  ( pOp->p3<=p->nM
56f0: 65 6d 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  em );.      asse
5700: 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26  rt( memIsValid(&
5710: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 20 29  aMem[pOp->p3]) )
5720: 3b 0a 20 20 20 20 20 20 52 45 47 49 53 54 45 52  ;.      REGISTER
5730: 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20  _TRACE(pOp->p3, 
5740: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b  &aMem[pOp->p3]);
5750: 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 28  .    }.    if( (
5760: 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f  pOp->opflags & O
5770: 50 46 4c 47 5f 4f 55 54 32 29 21 3d 30 20 29 7b  PFLG_OUT2)!=0 ){
5780: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
5790: 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 20 20  Op->p2>0 );.    
57a0: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
57b0: 32 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20  2<=p->nMem );.  
57c0: 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68      memAboutToCh
57d0: 61 6e 67 65 28 70 2c 20 26 61 4d 65 6d 5b 70 4f  ange(p, &aMem[pO
57e0: 70 2d 3e 70 32 5d 29 3b 0a 20 20 20 20 7d 0a 20  p->p2]);.    }. 
57f0: 20 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70 66     if( (pOp->opf
5800: 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f 4f 55 54  lags & OPFLG_OUT
5810: 33 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 61  3)!=0 ){.      a
5820: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30  ssert( pOp->p3>0
5830: 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
5840: 28 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d  ( pOp->p3<=p->nM
5850: 65 6d 20 29 3b 0a 20 20 20 20 20 20 6d 65 6d 41  em );.      memA
5860: 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
5870: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b  &aMem[pOp->p3]);
5880: 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20  .    }.#endif.  
5890: 0a 20 20 20 20 73 77 69 74 63 68 28 20 70 4f 70  .    switch( pOp
58a0: 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 0a 2f 2a 2a  ->opcode ){../**
58b0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
58c0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
58d0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
58e0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
58f0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 57  ***********.** W
5900: 68 61 74 20 66 6f 6c 6c 6f 77 73 20 69 73 20 61  hat follows is a
5910: 20 6d 61 73 73 69 76 65 20 73 77 69 74 63 68 20   massive switch 
5920: 73 74 61 74 65 6d 65 6e 74 20 77 68 65 72 65 20  statement where 
5930: 65 61 63 68 20 63 61 73 65 20 69 6d 70 6c 65 6d  each case implem
5940: 65 6e 74 73 20 61 0a 2a 2a 20 73 65 70 61 72 61  ents a.** separa
5950: 74 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69  te instruction i
5960: 6e 20 74 68 65 20 76 69 72 74 75 61 6c 20 6d 61  n the virtual ma
5970: 63 68 69 6e 65 2e 20 20 49 66 20 77 65 20 66 6f  chine.  If we fo
5980: 6c 6c 6f 77 20 74 68 65 20 75 73 75 61 6c 0a 2a  llow the usual.*
5990: 2a 20 69 6e 64 65 6e 74 61 74 69 6f 6e 20 63 6f  * indentation co
59a0: 6e 76 65 6e 74 69 6f 6e 73 2c 20 65 61 63 68 20  nventions, each 
59b0: 63 61 73 65 20 73 68 6f 75 6c 64 20 62 65 20 69  case should be i
59c0: 6e 64 65 6e 74 65 64 20 62 79 20 36 20 73 70 61  ndented by 6 spa
59d0: 63 65 73 2e 20 20 42 75 74 0a 2a 2a 20 74 68 61  ces.  But.** tha
59e0: 74 20 69 73 20 61 20 6c 6f 74 20 6f 66 20 77 61  t is a lot of wa
59f0: 73 74 65 64 20 73 70 61 63 65 20 6f 6e 20 74 68  sted space on th
5a00: 65 20 6c 65 66 74 20 6d 61 72 67 69 6e 2e 20 20  e left margin.  
5a10: 53 6f 20 74 68 65 20 63 6f 64 65 20 77 69 74 68  So the code with
5a20: 69 6e 0a 2a 2a 20 74 68 65 20 73 77 69 74 63 68  in.** the switch
5a30: 20 73 74 61 74 65 6d 65 6e 74 20 77 69 6c 6c 20   statement will 
5a40: 62 72 65 61 6b 20 77 69 74 68 20 63 6f 6e 76 65  break with conve
5a50: 6e 74 69 6f 6e 20 61 6e 64 20 62 65 20 66 6c 75  ntion and be flu
5a60: 73 68 2d 6c 65 66 74 2e 20 41 6e 6f 74 68 65 72  sh-left. Another
5a70: 0a 2a 2a 20 62 69 67 20 63 6f 6d 6d 65 6e 74 20  .** big comment 
5a80: 28 73 69 6d 69 6c 61 72 20 74 6f 20 74 68 69 73  (similar to this
5a90: 20 6f 6e 65 29 20 77 69 6c 6c 20 6d 61 72 6b 20   one) will mark 
5aa0: 74 68 65 20 70 6f 69 6e 74 20 69 6e 20 74 68 65  the point in the
5ab0: 20 63 6f 64 65 20 77 68 65 72 65 0a 2a 2a 20 77   code where.** w
5ac0: 65 20 74 72 61 6e 73 69 74 69 6f 6e 20 62 61 63  e transition bac
5ad0: 6b 20 74 6f 20 6e 6f 72 6d 61 6c 20 69 6e 64 65  k to normal inde
5ae0: 6e 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54  ntation..**.** T
5af0: 68 65 20 66 6f 72 6d 61 74 74 69 6e 67 20 6f 66  he formatting of
5b00: 20 65 61 63 68 20 63 61 73 65 20 69 73 20 69 6d   each case is im
5b10: 70 6f 72 74 61 6e 74 2e 20 20 54 68 65 20 6d 61  portant.  The ma
5b20: 6b 65 66 69 6c 65 20 66 6f 72 20 53 51 4c 69 74  kefile for SQLit
5b30: 65 0a 2a 2a 20 67 65 6e 65 72 61 74 65 73 20 74  e.** generates t
5b40: 77 6f 20 43 20 66 69 6c 65 73 20 22 6f 70 63 6f  wo C files "opco
5b50: 64 65 73 2e 68 22 20 61 6e 64 20 22 6f 70 63 6f  des.h" and "opco
5b60: 64 65 73 2e 63 22 20 62 79 20 73 63 61 6e 6e 69  des.c" by scanni
5b70: 6e 67 20 74 68 69 73 0a 2a 2a 20 66 69 6c 65 20  ng this.** file 
5b80: 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20 6c 69 6e 65  looking for line
5b90: 73 20 74 68 61 74 20 62 65 67 69 6e 20 77 69 74  s that begin wit
5ba0: 68 20 22 63 61 73 65 20 4f 50 5f 22 2e 20 20 54  h "case OP_".  T
5bb0: 68 65 20 6f 70 63 6f 64 65 73 2e 68 20 66 69 6c  he opcodes.h fil
5bc0: 65 73 0a 2a 2a 20 77 69 6c 6c 20 62 65 20 66 69  es.** will be fi
5bd0: 6c 6c 65 64 20 77 69 74 68 20 23 64 65 66 69 6e  lled with #defin
5be0: 65 73 20 74 68 61 74 20 67 69 76 65 20 75 6e 69  es that give uni
5bf0: 71 75 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75  que integer valu
5c00: 65 73 20 74 6f 20 65 61 63 68 0a 2a 2a 20 6f 70  es to each.** op
5c10: 63 6f 64 65 20 61 6e 64 20 74 68 65 20 6f 70 63  code and the opc
5c20: 6f 64 65 73 2e 63 20 66 69 6c 65 20 69 73 20 66  odes.c file is f
5c30: 69 6c 6c 65 64 20 77 69 74 68 20 61 6e 20 61 72  illed with an ar
5c40: 72 61 79 20 6f 66 20 73 74 72 69 6e 67 73 20 77  ray of strings w
5c50: 68 65 72 65 0a 2a 2a 20 65 61 63 68 20 73 74 72  here.** each str
5c60: 69 6e 67 20 69 73 20 74 68 65 20 73 79 6d 62 6f  ing is the symbo
5c70: 6c 69 63 20 6e 61 6d 65 20 66 6f 72 20 74 68 65  lic name for the
5c80: 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 6f   corresponding o
5c90: 70 63 6f 64 65 2e 20 20 49 66 20 74 68 65 0a 2a  pcode.  If the.*
5ca0: 2a 20 63 61 73 65 20 73 74 61 74 65 6d 65 6e 74  * case statement
5cb0: 20 69 73 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20   is followed by 
5cc0: 61 20 63 6f 6d 6d 65 6e 74 20 6f 66 20 74 68 65  a comment of the
5cd0: 20 66 6f 72 6d 20 22 2f 23 20 73 61 6d 65 20 61   form "/# same a
5ce0: 73 20 2e 2e 2e 20 23 2f 22 0a 2a 2a 20 74 68 61  s ... #/".** tha
5cf0: 74 20 63 6f 6d 6d 65 6e 74 20 69 73 20 75 73 65  t comment is use
5d00: 64 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74  d to determine t
5d10: 68 65 20 70 61 72 74 69 63 75 6c 61 72 20 76 61  he particular va
5d20: 6c 75 65 20 6f 66 20 74 68 65 20 6f 70 63 6f 64  lue of the opcod
5d30: 65 2e 0a 2a 2a 0a 2a 2a 20 4f 74 68 65 72 20 6b  e..**.** Other k
5d40: 65 79 77 6f 72 64 73 20 69 6e 20 74 68 65 20 63  eywords in the c
5d50: 6f 6d 6d 65 6e 74 20 74 68 61 74 20 66 6f 6c 6c  omment that foll
5d60: 6f 77 73 20 65 61 63 68 20 63 61 73 65 20 61 72  ows each case ar
5d70: 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 63 6f 6e  e used to.** con
5d80: 73 74 72 75 63 74 20 74 68 65 20 4f 50 46 4c 47  struct the OPFLG
5d90: 5f 49 4e 49 54 49 41 4c 49 5a 45 52 20 76 61 6c  _INITIALIZER val
5da0: 75 65 20 74 68 61 74 20 69 6e 69 74 69 61 6c 69  ue that initiali
5db0: 7a 65 73 20 6f 70 63 6f 64 65 50 72 6f 70 65 72  zes opcodeProper
5dc0: 74 79 5b 5d 2e 0a 2a 2a 20 4b 65 79 77 6f 72 64  ty[]..** Keyword
5dd0: 73 20 69 6e 63 6c 75 64 65 3a 20 69 6e 31 2c 20  s include: in1, 
5de0: 69 6e 32 2c 20 69 6e 33 2c 20 6f 75 74 32 5f 70  in2, in3, out2_p
5df0: 72 65 72 65 6c 65 61 73 65 2c 20 6f 75 74 32 2c  rerelease, out2,
5e00: 20 6f 75 74 33 2e 20 20 53 65 65 0a 2a 2a 20 74   out3.  See.** t
5e10: 68 65 20 6d 6b 6f 70 63 6f 64 65 68 2e 61 77 6b  he mkopcodeh.awk
5e20: 20 73 63 72 69 70 74 20 66 6f 72 20 61 64 64 69   script for addi
5e30: 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69  tional informati
5e40: 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 44 6f 63 75 6d 65  on..**.** Docume
5e50: 6e 74 61 74 69 6f 6e 20 61 62 6f 75 74 20 56 44  ntation about VD
5e60: 42 45 20 6f 70 63 6f 64 65 73 20 69 73 20 67 65  BE opcodes is ge
5e70: 6e 65 72 61 74 65 64 20 62 79 20 73 63 61 6e 6e  nerated by scann
5e80: 69 6e 67 20 74 68 69 73 20 66 69 6c 65 0a 2a 2a  ing this file.**
5e90: 20 66 6f 72 20 6c 69 6e 65 73 20 6f 66 20 74 68   for lines of th
5ea0: 61 74 20 63 6f 6e 74 61 69 6e 20 22 4f 70 63 6f  at contain "Opco
5eb0: 64 65 3a 22 2e 20 20 54 68 61 74 20 6c 69 6e 65  de:".  That line
5ec0: 20 61 6e 64 20 61 6c 6c 20 73 75 62 73 65 71 75   and all subsequ
5ed0: 65 6e 74 0a 2a 2a 20 63 6f 6d 6d 65 6e 74 20 6c  ent.** comment l
5ee0: 69 6e 65 73 20 61 72 65 20 75 73 65 64 20 69 6e  ines are used in
5ef0: 20 74 68 65 20 67 65 6e 65 72 61 74 69 6f 6e 20   the generation 
5f00: 6f 66 20 74 68 65 20 6f 70 63 6f 64 65 2e 68 74  of the opcode.ht
5f10: 6d 6c 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e  ml documentation
5f20: 0a 2a 2a 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20  .** file..**.** 
5f30: 53 55 4d 4d 41 52 59 3a 0a 2a 2a 0a 2a 2a 20 20  SUMMARY:.**.**  
5f40: 20 20 20 46 6f 72 6d 61 74 74 69 6e 67 20 69 73     Formatting is
5f50: 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20 73 63   important to sc
5f60: 72 69 70 74 73 20 74 68 61 74 20 73 63 61 6e 20  ripts that scan 
5f70: 74 68 69 73 20 66 69 6c 65 2e 0a 2a 2a 20 20 20  this file..**   
5f80: 20 20 44 6f 20 6e 6f 74 20 64 65 76 69 61 74 65    Do not deviate
5f90: 20 66 72 6f 6d 20 74 68 65 20 66 6f 72 6d 61 74   from the format
5fa0: 74 69 6e 67 20 73 74 79 6c 65 20 63 75 72 72 65  ting style curre
5fb0: 6e 74 6c 79 20 69 6e 20 75 73 65 2e 0a 2a 2a 0a  ntly in use..**.
5fc0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5fd0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5fe0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5ff0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6000: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a  *************/..
6010: 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 47 6f 74 6f  /* Opcode:  Goto
6020: 20 2a 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   * P2 * * *.**.*
6030: 2a 20 41 6e 20 75 6e 63 6f 6e 64 69 74 69 6f 6e  * An uncondition
6040: 61 6c 20 6a 75 6d 70 20 74 6f 20 61 64 64 72 65  al jump to addre
6050: 73 73 20 50 32 2e 0a 2a 2a 20 54 68 65 20 6e 65  ss P2..** The ne
6060: 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 65  xt instruction e
6070: 78 65 63 75 74 65 64 20 77 69 6c 6c 20 62 65 20  xecuted will be 
6080: 0a 2a 2a 20 74 68 65 20 6f 6e 65 20 61 74 20 69  .** the one at i
6090: 6e 64 65 78 20 50 32 20 66 72 6f 6d 20 74 68 65  ndex P2 from the
60a0: 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 0a 2a 2a   beginning of.**
60b0: 20 74 68 65 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f   the program..*/
60c0: 0a 63 61 73 65 20 4f 50 5f 47 6f 74 6f 3a 20 7b  .case OP_Goto: {
60d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
60e0: 6a 75 6d 70 20 2a 2f 0a 20 20 43 48 45 43 4b 5f  jump */.  CHECK_
60f0: 46 4f 52 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20  FOR_INTERRUPT;. 
6100: 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
6110: 31 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  1;.  break;.}../
6120: 2a 20 4f 70 63 6f 64 65 3a 20 20 47 6f 73 75 62  * Opcode:  Gosub
6130: 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
6140: 2a 2a 20 57 72 69 74 65 20 74 68 65 20 63 75 72  ** Write the cur
6150: 72 65 6e 74 20 61 64 64 72 65 73 73 20 6f 6e 74  rent address ont
6160: 6f 20 72 65 67 69 73 74 65 72 20 50 31 0a 2a 2a  o register P1.**
6170: 20 61 6e 64 20 74 68 65 6e 20 6a 75 6d 70 20 74   and then jump t
6180: 6f 20 61 64 64 72 65 73 73 20 50 32 2e 0a 2a 2f  o address P2..*/
6190: 0a 63 61 73 65 20 4f 50 5f 47 6f 73 75 62 3a 20  .case OP_Gosub: 
61a0: 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  {            /* 
61b0: 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70  jump, in1 */.  p
61c0: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
61d0: 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
61e0: 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn1->flags & M
61f0: 45 4d 5f 44 79 6e 29 3d 3d 30 20 29 3b 0a 20 20  EM_Dyn)==0 );.  
6200: 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
6210: 28 70 2c 20 70 49 6e 31 29 3b 0a 20 20 70 49 6e  (p, pIn1);.  pIn
6220: 31 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49  1->flags = MEM_I
6230: 6e 74 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 20  nt;.  pIn1->u.i 
6240: 3d 20 70 63 3b 0a 20 20 52 45 47 49 53 54 45 52  = pc;.  REGISTER
6250: 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20  _TRACE(pOp->p1, 
6260: 70 49 6e 31 29 3b 0a 20 20 70 63 20 3d 20 70 4f  pIn1);.  pc = pO
6270: 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 62 72 65  p->p2 - 1;.  bre
6280: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
6290: 3a 20 20 52 65 74 75 72 6e 20 50 31 20 2a 20 2a  :  Return P1 * *
62a0: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20   * *.**.** Jump 
62b0: 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74  to the next inst
62c0: 72 75 63 74 69 6f 6e 20 61 66 74 65 72 20 74 68  ruction after th
62d0: 65 20 61 64 64 72 65 73 73 20 69 6e 20 72 65 67  e address in reg
62e0: 69 73 74 65 72 20 50 31 2e 0a 2a 2f 0a 63 61 73  ister P1..*/.cas
62f0: 65 20 4f 50 5f 52 65 74 75 72 6e 3a 20 7b 20 20  e OP_Return: {  
6300: 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20           /* in1 
6310: 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
6320: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  m[pOp->p1];.  as
6330: 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67  sert( pIn1->flag
6340: 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20  s & MEM_Int );. 
6350: 20 70 63 20 3d 20 28 69 6e 74 29 70 49 6e 31 2d   pc = (int)pIn1-
6360: 3e 75 2e 69 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  >u.i;.  break;.}
6370: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 59 69  ../* Opcode:  Yi
6380: 65 6c 64 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a  eld P1 * * * *.*
6390: 2a 0a 2a 2a 20 53 77 61 70 20 74 68 65 20 70 72  *.** Swap the pr
63a0: 6f 67 72 61 6d 20 63 6f 75 6e 74 65 72 20 77 69  ogram counter wi
63b0: 74 68 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  th the value in 
63c0: 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2f 0a  register P1..*/.
63d0: 63 61 73 65 20 4f 50 5f 59 69 65 6c 64 3a 20 7b  case OP_Yield: {
63e0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69              /* i
63f0: 6e 31 20 2a 2f 0a 20 20 69 6e 74 20 70 63 44 65  n1 */.  int pcDe
6400: 73 74 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d  st;.  pIn1 = &aM
6410: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  em[pOp->p1];.  a
6420: 73 73 65 72 74 28 20 28 70 49 6e 31 2d 3e 66 6c  ssert( (pIn1->fl
6430: 61 67 73 20 26 20 4d 45 4d 5f 44 79 6e 29 3d 3d  ags & MEM_Dyn)==
6440: 30 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61  0 );.  pIn1->fla
6450: 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20  gs = MEM_Int;.  
6460: 70 63 44 65 73 74 20 3d 20 28 69 6e 74 29 70 49  pcDest = (int)pI
6470: 6e 31 2d 3e 75 2e 69 3b 0a 20 20 70 49 6e 31 2d  n1->u.i;.  pIn1-
6480: 3e 75 2e 69 20 3d 20 70 63 3b 0a 20 20 52 45 47  >u.i = pc;.  REG
6490: 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
64a0: 3e 70 31 2c 20 70 49 6e 31 29 3b 0a 20 20 70 63  >p1, pIn1);.  pc
64b0: 20 3d 20 70 63 44 65 73 74 3b 0a 20 20 62 72 65   = pcDest;.  bre
64c0: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
64d0: 3a 20 20 48 61 6c 74 49 66 4e 75 6c 6c 20 20 50  :  HaltIfNull  P
64e0: 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a  1 P2 P3 P4 *.**.
64f0: 2a 2a 20 43 68 65 63 6b 20 74 68 65 20 76 61 6c  ** Check the val
6500: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
6510: 33 2e 20 20 49 66 20 69 73 20 69 73 20 4e 55 4c  3.  If is is NUL
6520: 4c 20 74 68 65 6e 20 48 61 6c 74 20 75 73 69 6e  L then Halt usin
6530: 67 0a 2a 2a 20 70 61 72 61 6d 65 74 65 72 20 50  g.** parameter P
6540: 31 2c 20 50 32 2c 20 61 6e 64 20 50 34 20 61 73  1, P2, and P4 as
6550: 20 69 66 20 74 68 69 73 20 77 65 72 65 20 61 20   if this were a 
6560: 48 61 6c 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  Halt instruction
6570: 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 76 61 6c  .  If the.** val
6580: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
6590: 33 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 74  3 is not NULL, t
65a0: 68 65 6e 20 74 68 69 73 20 72 6f 75 74 69 6e 65  hen this routine
65b0: 20 69 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a   is a no-op..*/.
65c0: 63 61 73 65 20 4f 50 5f 48 61 6c 74 49 66 4e 75  case OP_HaltIfNu
65d0: 6c 6c 3a 20 7b 20 20 20 20 20 20 2f 2a 20 69 6e  ll: {      /* in
65e0: 33 20 2a 2f 0a 20 20 70 49 6e 33 20 3d 20 26 61  3 */.  pIn3 = &a
65f0: 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
6600: 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73  if( (pIn3->flags
6610: 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20   & MEM_Null)==0 
6620: 29 20 62 72 65 61 6b 3b 0a 20 20 2f 2a 20 46 61  ) break;.  /* Fa
6630: 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e 74 6f 20  ll through into 
6640: 4f 50 5f 48 61 6c 74 20 2a 2f 0a 7d 0a 0a 2f 2a  OP_Halt */.}../*
6650: 20 4f 70 63 6f 64 65 3a 20 20 48 61 6c 74 20 50   Opcode:  Halt P
6660: 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a  1 P2 * P4 *.**.*
6670: 2a 20 45 78 69 74 20 69 6d 6d 65 64 69 61 74 65  * Exit immediate
6680: 6c 79 2e 20 20 41 6c 6c 20 6f 70 65 6e 20 63 75  ly.  All open cu
6690: 72 73 6f 72 73 2c 20 65 74 63 20 61 72 65 20 63  rsors, etc are c
66a0: 6c 6f 73 65 64 0a 2a 2a 20 61 75 74 6f 6d 61 74  losed.** automat
66b0: 69 63 61 6c 6c 79 2e 0a 2a 2a 0a 2a 2a 20 50 31  ically..**.** P1
66c0: 20 69 73 20 74 68 65 20 72 65 73 75 6c 74 20 63   is the result c
66d0: 6f 64 65 20 72 65 74 75 72 6e 65 64 20 62 79 20  ode returned by 
66e0: 73 71 6c 69 74 65 33 5f 65 78 65 63 28 29 2c 20  sqlite3_exec(), 
66f0: 73 71 6c 69 74 65 33 5f 72 65 73 65 74 28 29 2c  sqlite3_reset(),
6700: 0a 2a 2a 20 6f 72 20 73 71 6c 69 74 65 33 5f 66  .** or sqlite3_f
6710: 69 6e 61 6c 69 7a 65 28 29 2e 20 20 46 6f 72 20  inalize().  For 
6720: 61 20 6e 6f 72 6d 61 6c 20 68 61 6c 74 2c 20 74  a normal halt, t
6730: 68 69 73 20 73 68 6f 75 6c 64 20 62 65 20 53 51  his should be SQ
6740: 4c 49 54 45 5f 4f 4b 20 28 30 29 2e 0a 2a 2a 20  LITE_OK (0)..** 
6750: 46 6f 72 20 65 72 72 6f 72 73 2c 20 69 74 20 63  For errors, it c
6760: 61 6e 20 62 65 20 73 6f 6d 65 20 6f 74 68 65 72  an be some other
6770: 20 76 61 6c 75 65 2e 20 20 49 66 20 50 31 21 3d   value.  If P1!=
6780: 30 20 74 68 65 6e 20 50 32 20 77 69 6c 6c 20 64  0 then P2 will d
6790: 65 74 65 72 6d 69 6e 65 0a 2a 2a 20 77 68 65 74  etermine.** whet
67a0: 68 65 72 20 6f 72 20 6e 6f 74 20 74 6f 20 72 6f  her or not to ro
67b0: 6c 6c 62 61 63 6b 20 74 68 65 20 63 75 72 72 65  llback the curre
67c0: 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20  nt transaction. 
67d0: 20 44 6f 20 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b   Do not rollback
67e0: 0a 2a 2a 20 69 66 20 50 32 3d 3d 4f 45 5f 46 61  .** if P2==OE_Fa
67f0: 69 6c 2e 20 44 6f 20 74 68 65 20 72 6f 6c 6c 62  il. Do the rollb
6800: 61 63 6b 20 69 66 20 50 32 3d 3d 4f 45 5f 52 6f  ack if P2==OE_Ro
6810: 6c 6c 62 61 63 6b 2e 20 20 49 66 20 50 32 3d 3d  llback.  If P2==
6820: 4f 45 5f 41 62 6f 72 74 2c 0a 2a 2a 20 74 68 65  OE_Abort,.** the
6830: 6e 20 62 61 63 6b 20 6f 75 74 20 61 6c 6c 20 63  n back out all c
6840: 68 61 6e 67 65 73 20 74 68 61 74 20 68 61 76 65  hanges that have
6850: 20 6f 63 63 75 72 72 65 64 20 64 75 72 69 6e 67   occurred during
6860: 20 74 68 69 73 20 65 78 65 63 75 74 69 6f 6e 20   this execution 
6870: 6f 66 20 74 68 65 0a 2a 2a 20 56 44 42 45 2c 20  of the.** VDBE, 
6880: 62 75 74 20 64 6f 20 6e 6f 74 20 72 6f 6c 6c 62  but do not rollb
6890: 61 63 6b 20 74 68 65 20 74 72 61 6e 73 61 63 74  ack the transact
68a0: 69 6f 6e 2e 20 0a 2a 2a 0a 2a 2a 20 49 66 20 50  ion. .**.** If P
68b0: 34 20 69 73 20 6e 6f 74 20 6e 75 6c 6c 20 74 68  4 is not null th
68c0: 65 6e 20 69 74 20 69 73 20 61 6e 20 65 72 72 6f  en it is an erro
68d0: 72 20 6d 65 73 73 61 67 65 20 73 74 72 69 6e 67  r message string
68e0: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 69 73  ..**.** There is
68f0: 20 61 6e 20 69 6d 70 6c 69 65 64 20 22 48 61 6c   an implied "Hal
6900: 74 20 30 20 30 20 30 22 20 69 6e 73 74 72 75 63  t 0 0 0" instruc
6910: 74 69 6f 6e 20 69 6e 73 65 72 74 65 64 20 61 74  tion inserted at
6920: 20 74 68 65 20 76 65 72 79 20 65 6e 64 20 6f 66   the very end of
6930: 0a 2a 2a 20 65 76 65 72 79 20 70 72 6f 67 72 61  .** every progra
6940: 6d 2e 20 20 53 6f 20 61 20 6a 75 6d 70 20 70 61  m.  So a jump pa
6950: 73 74 20 74 68 65 20 6c 61 73 74 20 69 6e 73 74  st the last inst
6960: 72 75 63 74 69 6f 6e 20 6f 66 20 74 68 65 20 70  ruction of the p
6970: 72 6f 67 72 61 6d 0a 2a 2a 20 69 73 20 74 68 65  rogram.** is the
6980: 20 73 61 6d 65 20 61 73 20 65 78 65 63 75 74 69   same as executi
6990: 6e 67 20 48 61 6c 74 2e 0a 2a 2f 0a 63 61 73 65  ng Halt..*/.case
69a0: 20 4f 50 5f 48 61 6c 74 3a 20 7b 0a 20 20 69 66   OP_Halt: {.  if
69b0: 28 20 70 4f 70 2d 3e 70 31 3d 3d 53 51 4c 49 54  ( pOp->p1==SQLIT
69c0: 45 5f 4f 4b 20 26 26 20 70 2d 3e 70 46 72 61 6d  E_OK && p->pFram
69d0: 65 20 29 7b 0a 20 20 20 20 2f 2a 20 48 61 6c 74  e ){.    /* Halt
69e0: 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d   the sub-program
69f0: 2e 20 52 65 74 75 72 6e 20 63 6f 6e 74 72 6f 6c  . Return control
6a00: 20 74 6f 20 74 68 65 20 70 61 72 65 6e 74 20 66   to the parent f
6a10: 72 61 6d 65 2e 20 2a 2f 0a 20 20 20 20 56 64 62  rame. */.    Vdb
6a20: 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 20 3d  eFrame *pFrame =
6a30: 20 70 2d 3e 70 46 72 61 6d 65 3b 0a 20 20 20 20   p->pFrame;.    
6a40: 70 2d 3e 70 46 72 61 6d 65 20 3d 20 70 46 72 61  p->pFrame = pFra
6a50: 6d 65 2d 3e 70 50 61 72 65 6e 74 3b 0a 20 20 20  me->pParent;.   
6a60: 20 70 2d 3e 6e 46 72 61 6d 65 2d 2d 3b 0a 20 20   p->nFrame--;.  
6a70: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
6a80: 43 68 61 6e 67 65 73 28 64 62 2c 20 70 2d 3e 6e  Changes(db, p->n
6a90: 43 68 61 6e 67 65 29 3b 0a 20 20 20 20 70 63 20  Change);.    pc 
6aa0: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 46 72 61  = sqlite3VdbeFra
6ab0: 6d 65 52 65 73 74 6f 72 65 28 70 46 72 61 6d 65  meRestore(pFrame
6ac0: 29 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  );.    if( pOp->
6ad0: 70 32 3d 3d 4f 45 5f 49 67 6e 6f 72 65 20 29 7b  p2==OE_Ignore ){
6ae0: 0a 20 20 20 20 20 20 2f 2a 20 49 6e 73 74 72 75  .      /* Instru
6af0: 63 74 69 6f 6e 20 70 63 20 69 73 20 74 68 65 20  ction pc is the 
6b00: 4f 50 5f 50 72 6f 67 72 61 6d 20 74 68 61 74 20  OP_Program that 
6b10: 69 6e 76 6f 6b 65 64 20 74 68 65 20 73 75 62 2d  invoked the sub-
6b20: 70 72 6f 67 72 61 6d 20 0a 20 20 20 20 20 20 2a  program .      *
6b30: 2a 20 63 75 72 72 65 6e 74 6c 79 20 62 65 69 6e  * currently bein
6b40: 67 20 68 61 6c 74 65 64 2e 20 49 66 20 74 68 65  g halted. If the
6b50: 20 70 32 20 69 6e 73 74 72 75 63 74 69 6f 6e 20   p2 instruction 
6b60: 6f 66 20 74 68 69 73 20 4f 50 5f 48 61 6c 74 0a  of this OP_Halt.
6b70: 20 20 20 20 20 20 2a 2a 20 69 6e 73 74 72 75 63        ** instruc
6b80: 74 69 6f 6e 20 69 73 20 73 65 74 20 74 6f 20 4f  tion is set to O
6b90: 45 5f 49 67 6e 6f 72 65 2c 20 74 68 65 6e 20 74  E_Ignore, then t
6ba0: 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 69  he sub-program i
6bb0: 73 20 74 68 72 6f 77 69 6e 67 0a 20 20 20 20 20  s throwing.     
6bc0: 20 2a 2a 20 61 6e 20 49 47 4e 4f 52 45 20 65 78   ** an IGNORE ex
6bd0: 63 65 70 74 69 6f 6e 2e 20 49 6e 20 74 68 69 73  ception. In this
6be0: 20 63 61 73 65 20 6a 75 6d 70 20 74 6f 20 74 68   case jump to th
6bf0: 65 20 61 64 64 72 65 73 73 20 73 70 65 63 69 66  e address specif
6c00: 69 65 64 0a 20 20 20 20 20 20 2a 2a 20 61 73 20  ied.      ** as 
6c10: 74 68 65 20 70 32 20 6f 66 20 74 68 65 20 63 61  the p2 of the ca
6c20: 6c 6c 69 6e 67 20 4f 50 5f 50 72 6f 67 72 61 6d  lling OP_Program
6c30: 2e 20 20 2a 2f 0a 20 20 20 20 20 20 70 63 20 3d  .  */.      pc =
6c40: 20 70 2d 3e 61 4f 70 5b 70 63 5d 2e 70 32 2d 31   p->aOp[pc].p2-1
6c50: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 61 4f 70 20  ;.    }.    aOp 
6c60: 3d 20 70 2d 3e 61 4f 70 3b 0a 20 20 20 20 61 4d  = p->aOp;.    aM
6c70: 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b 0a 20 20  em = p->aMem;.  
6c80: 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20    break;.  }..  
6c90: 70 2d 3e 72 63 20 3d 20 70 4f 70 2d 3e 70 31 3b  p->rc = pOp->p1;
6ca0: 0a 20 20 70 2d 3e 65 72 72 6f 72 41 63 74 69 6f  .  p->errorActio
6cb0: 6e 20 3d 20 28 75 38 29 70 4f 70 2d 3e 70 32 3b  n = (u8)pOp->p2;
6cc0: 0a 20 20 70 2d 3e 70 63 20 3d 20 70 63 3b 0a 20  .  p->pc = pc;. 
6cd0: 20 69 66 28 20 70 4f 70 2d 3e 70 34 2e 7a 20 29   if( pOp->p4.z )
6ce0: 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 2d  {.    assert( p-
6cf0: 3e 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29  >rc!=SQLITE_OK )
6d00: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65 74  ;.    sqlite3Set
6d10: 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d  String(&p->zErrM
6d20: 73 67 2c 20 64 62 2c 20 22 25 73 22 2c 20 70 4f  sg, db, "%s", pO
6d30: 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 74 65  p->p4.z);.    te
6d40: 73 74 63 61 73 65 28 20 73 71 6c 69 74 65 33 47  stcase( sqlite3G
6d50: 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 78 4c 6f 67  lobalConfig.xLog
6d60: 21 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c 69 74  !=0 );.    sqlit
6d70: 65 33 5f 6c 6f 67 28 70 4f 70 2d 3e 70 31 2c 20  e3_log(pOp->p1, 
6d80: 22 61 62 6f 72 74 20 61 74 20 25 64 20 69 6e 20  "abort at %d in 
6d90: 5b 25 73 5d 3a 20 25 73 22 2c 20 70 63 2c 20 70  [%s]: %s", pc, p
6da0: 2d 3e 7a 53 71 6c 2c 20 70 4f 70 2d 3e 70 34 2e  ->zSql, pOp->p4.
6db0: 7a 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  z);.  }else if( 
6dc0: 70 2d 3e 72 63 20 29 7b 0a 20 20 20 20 74 65 73  p->rc ){.    tes
6dd0: 74 63 61 73 65 28 20 73 71 6c 69 74 65 33 47 6c  tcase( sqlite3Gl
6de0: 6f 62 61 6c 43 6f 6e 66 69 67 2e 78 4c 6f 67 21  obalConfig.xLog!
6df0: 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  =0 );.    sqlite
6e00: 33 5f 6c 6f 67 28 70 4f 70 2d 3e 70 31 2c 20 22  3_log(pOp->p1, "
6e10: 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65  constraint faile
6e20: 64 20 61 74 20 25 64 20 69 6e 20 5b 25 73 5d 22  d at %d in [%s]"
6e30: 2c 20 70 63 2c 20 70 2d 3e 7a 53 71 6c 29 3b 0a  , pc, p->zSql);.
6e40: 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74    }.  rc = sqlit
6e50: 65 33 56 64 62 65 48 61 6c 74 28 70 29 3b 0a 20  e3VdbeHalt(p);. 
6e60: 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c   assert( rc==SQL
6e70: 49 54 45 5f 42 55 53 59 20 7c 7c 20 72 63 3d 3d  ITE_BUSY || rc==
6e80: 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 72 63 3d  SQLITE_OK || rc=
6e90: 3d 53 51 4c 49 54 45 5f 45 52 52 4f 52 20 29 3b  =SQLITE_ERROR );
6ea0: 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54  .  if( rc==SQLIT
6eb0: 45 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 70 2d  E_BUSY ){.    p-
6ec0: 3e 72 63 20 3d 20 72 63 20 3d 20 53 51 4c 49 54  >rc = rc = SQLIT
6ed0: 45 5f 42 55 53 59 3b 0a 20 20 7d 65 6c 73 65 7b  E_BUSY;.  }else{
6ee0: 0a 20 20 20 20 61 73 73 65 72 74 28 20 72 63 3d  .    assert( rc=
6ef0: 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 70 2d  =SQLITE_OK || p-
6f00: 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 43 4f 4e 53  >rc==SQLITE_CONS
6f10: 54 52 41 49 4e 54 20 29 3b 0a 20 20 20 20 61 73  TRAINT );.    as
6f20: 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45  sert( rc==SQLITE
6f30: 5f 4f 4b 20 7c 7c 20 64 62 2d 3e 6e 44 65 66 65  _OK || db->nDefe
6f40: 72 72 65 64 43 6f 6e 73 3e 30 20 29 3b 0a 20 20  rredCons>0 );.  
6f50: 20 20 72 63 20 3d 20 70 2d 3e 72 63 20 3f 20 53    rc = p->rc ? S
6f60: 51 4c 49 54 45 5f 45 52 52 4f 52 20 3a 20 53 51  QLITE_ERROR : SQ
6f70: 4c 49 54 45 5f 44 4f 4e 45 3b 0a 20 20 7d 0a 20  LITE_DONE;.  }. 
6f80: 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72   goto vdbe_retur
6f90: 6e 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  n;.}../* Opcode:
6fa0: 20 49 6e 74 65 67 65 72 20 50 31 20 50 32 20 2a   Integer P1 P2 *
6fb0: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 33   * *.**.** The 3
6fc0: 32 2d 62 69 74 20 69 6e 74 65 67 65 72 20 76 61  2-bit integer va
6fd0: 6c 75 65 20 50 31 20 69 73 20 77 72 69 74 74 65  lue P1 is writte
6fe0: 6e 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  n into register 
6ff0: 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  P2..*/.case OP_I
7000: 6e 74 65 67 65 72 3a 20 7b 20 20 20 20 20 20 20  nteger: {       
7010: 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c    /* out2-prerel
7020: 65 61 73 65 20 2a 2f 0a 20 20 70 4f 75 74 2d 3e  ease */.  pOut->
7030: 75 2e 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20  u.i = pOp->p1;. 
7040: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
7050: 63 6f 64 65 3a 20 49 6e 74 36 34 20 2a 20 50 32  code: Int64 * P2
7060: 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34   * P4 *.**.** P4
7070: 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
7080: 20 61 20 36 34 2d 62 69 74 20 69 6e 74 65 67 65   a 64-bit intege
7090: 72 20 76 61 6c 75 65 2e 0a 2a 2a 20 57 72 69 74  r value..** Writ
70a0: 65 20 74 68 61 74 20 76 61 6c 75 65 20 69 6e 74  e that value int
70b0: 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  o register P2..*
70c0: 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74 36 34 3a  /.case OP_Int64:
70d0: 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20   {           /* 
70e0: 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20  out2-prerelease 
70f0: 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  */.  assert( pOp
7100: 2d 3e 70 34 2e 70 49 36 34 21 3d 30 20 29 3b 0a  ->p4.pI64!=0 );.
7110: 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 2a 70    pOut->u.i = *p
7120: 4f 70 2d 3e 70 34 2e 70 49 36 34 3b 0a 20 20 62  Op->p4.pI64;.  b
7130: 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66  reak;.}..#ifndef
7140: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f   SQLITE_OMIT_FLO
7150: 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 2f 2a 20 4f  ATING_POINT./* O
7160: 70 63 6f 64 65 3a 20 52 65 61 6c 20 2a 20 50 32  pcode: Real * P2
7170: 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34   * P4 *.**.** P4
7180: 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
7190: 20 61 20 36 34 2d 62 69 74 20 66 6c 6f 61 74 69   a 64-bit floati
71a0: 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75 65 2e 0a  ng point value..
71b0: 2a 2a 20 57 72 69 74 65 20 74 68 61 74 20 76 61  ** Write that va
71c0: 6c 75 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65  lue into registe
71d0: 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  r P2..*/.case OP
71e0: 5f 52 65 61 6c 3a 20 7b 20 20 20 20 20 20 20 20  _Real: {        
71f0: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
7200: 4b 5f 46 4c 4f 41 54 2c 20 6f 75 74 32 2d 70 72  K_FLOAT, out2-pr
7210: 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 70 4f  erelease */.  pO
7220: 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  ut->flags = MEM_
7230: 52 65 61 6c 3b 0a 20 20 61 73 73 65 72 74 28 20  Real;.  assert( 
7240: 21 73 71 6c 69 74 65 33 49 73 4e 61 4e 28 2a 70  !sqlite3IsNaN(*p
7250: 4f 70 2d 3e 70 34 2e 70 52 65 61 6c 29 20 29 3b  Op->p4.pReal) );
7260: 0a 20 20 70 4f 75 74 2d 3e 72 20 3d 20 2a 70 4f  .  pOut->r = *pO
7270: 70 2d 3e 70 34 2e 70 52 65 61 6c 3b 0a 20 20 62  p->p4.pReal;.  b
7280: 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a  reak;.}.#endif..
7290: 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 74 72 69 6e  /* Opcode: Strin
72a0: 67 38 20 2a 20 50 32 20 2a 20 50 34 20 2a 0a 2a  g8 * P2 * P4 *.*
72b0: 2a 0a 2a 2a 20 50 34 20 70 6f 69 6e 74 73 20 74  *.** P4 points t
72c0: 6f 20 61 20 6e 75 6c 20 74 65 72 6d 69 6e 61 74  o a nul terminat
72d0: 65 64 20 55 54 46 2d 38 20 73 74 72 69 6e 67 2e  ed UTF-8 string.
72e0: 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20   This opcode is 
72f0: 74 72 61 6e 73 66 6f 72 6d 65 64 20 0a 2a 2a 20  transformed .** 
7300: 69 6e 74 6f 20 61 6e 20 4f 50 5f 53 74 72 69 6e  into an OP_Strin
7310: 67 20 62 65 66 6f 72 65 20 69 74 20 69 73 20 65  g before it is e
7320: 78 65 63 75 74 65 64 20 66 6f 72 20 74 68 65 20  xecuted for the 
7330: 66 69 72 73 74 20 74 69 6d 65 2e 0a 2a 2f 0a 63  first time..*/.c
7340: 61 73 65 20 4f 50 5f 53 74 72 69 6e 67 38 3a 20  ase OP_String8: 
7350: 7b 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d  {         /* sam
7360: 65 20 61 73 20 54 4b 5f 53 54 52 49 4e 47 2c 20  e as TK_STRING, 
7370: 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20  out2-prerelease 
7380: 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  */.  assert( pOp
7390: 2d 3e 70 34 2e 7a 21 3d 30 20 29 3b 0a 20 20 70  ->p4.z!=0 );.  p
73a0: 4f 70 2d 3e 6f 70 63 6f 64 65 20 3d 20 4f 50 5f  Op->opcode = OP_
73b0: 53 74 72 69 6e 67 3b 0a 20 20 70 4f 70 2d 3e 70  String;.  pOp->p
73c0: 31 20 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65  1 = sqlite3Strle
73d0: 6e 33 30 28 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a  n30(pOp->p4.z);.
73e0: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
73f0: 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20 69 66 28  OMIT_UTF16.  if(
7400: 20 65 6e 63 6f 64 69 6e 67 21 3d 53 51 4c 49 54   encoding!=SQLIT
7410: 45 5f 55 54 46 38 20 29 7b 0a 20 20 20 20 72 63  E_UTF8 ){.    rc
7420: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65   = sqlite3VdbeMe
7430: 6d 53 65 74 53 74 72 28 70 4f 75 74 2c 20 70 4f  mSetStr(pOut, pO
7440: 70 2d 3e 70 34 2e 7a 2c 20 2d 31 2c 20 53 51 4c  p->p4.z, -1, SQL
7450: 49 54 45 5f 55 54 46 38 2c 20 53 51 4c 49 54 45  ITE_UTF8, SQLITE
7460: 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 69 66  _STATIC);.    if
7470: 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 54 4f 4f  ( rc==SQLITE_TOO
7480: 42 49 47 20 29 20 67 6f 74 6f 20 74 6f 6f 5f 62  BIG ) goto too_b
7490: 69 67 3b 0a 20 20 20 20 69 66 28 20 53 51 4c 49  ig;.    if( SQLI
74a0: 54 45 5f 4f 4b 21 3d 73 71 6c 69 74 65 33 56 64  TE_OK!=sqlite3Vd
74b0: 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67  beChangeEncoding
74c0: 28 70 4f 75 74 2c 20 65 6e 63 6f 64 69 6e 67 29  (pOut, encoding)
74d0: 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
74e0: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 75 74      assert( pOut
74f0: 2d 3e 7a 4d 61 6c 6c 6f 63 3d 3d 70 4f 75 74 2d  ->zMalloc==pOut-
7500: 3e 7a 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  >z );.    assert
7510: 28 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 26 20  ( pOut->flags & 
7520: 4d 45 4d 5f 44 79 6e 20 29 3b 0a 20 20 20 20 70  MEM_Dyn );.    p
7530: 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d 20 30  Out->zMalloc = 0
7540: 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67  ;.    pOut->flag
7550: 73 20 7c 3d 20 4d 45 4d 5f 53 74 61 74 69 63 3b  s |= MEM_Static;
7560: 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  .    pOut->flags
7570: 20 26 3d 20 7e 4d 45 4d 5f 44 79 6e 3b 0a 20 20   &= ~MEM_Dyn;.  
7580: 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70    if( pOp->p4typ
7590: 65 3d 3d 50 34 5f 44 59 4e 41 4d 49 43 20 29 7b  e==P4_DYNAMIC ){
75a0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 62  .      sqlite3Db
75b0: 46 72 65 65 28 64 62 2c 20 70 4f 70 2d 3e 70 34  Free(db, pOp->p4
75c0: 2e 7a 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70  .z);.    }.    p
75d0: 4f 70 2d 3e 70 34 74 79 70 65 20 3d 20 50 34 5f  Op->p4type = P4_
75e0: 44 59 4e 41 4d 49 43 3b 0a 20 20 20 20 70 4f 70  DYNAMIC;.    pOp
75f0: 2d 3e 70 34 2e 7a 20 3d 20 70 4f 75 74 2d 3e 7a  ->p4.z = pOut->z
7600: 3b 0a 20 20 20 20 70 4f 70 2d 3e 70 31 20 3d 20  ;.    pOp->p1 = 
7610: 70 4f 75 74 2d 3e 6e 3b 0a 20 20 7d 0a 23 65 6e  pOut->n;.  }.#en
7620: 64 69 66 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70  dif.  if( pOp->p
7630: 31 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c  1>db->aLimit[SQL
7640: 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48  ITE_LIMIT_LENGTH
7650: 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f  ] ){.    goto to
7660: 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 2f 2a 20  o_big;.  }.  /* 
7670: 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  Fall through to 
7680: 74 68 65 20 6e 65 78 74 20 63 61 73 65 2c 20 4f  the next case, O
7690: 50 5f 53 74 72 69 6e 67 20 2a 2f 0a 7d 0a 20 20  P_String */.}.  
76a0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 74 72 69  ./* Opcode: Stri
76b0: 6e 67 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a  ng P1 P2 * P4 *.
76c0: 2a 2a 0a 2a 2a 20 54 68 65 20 73 74 72 69 6e 67  **.** The string
76d0: 20 76 61 6c 75 65 20 50 34 20 6f 66 20 6c 65 6e   value P4 of len
76e0: 67 74 68 20 50 31 20 28 62 79 74 65 73 29 20 69  gth P1 (bytes) i
76f0: 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  s stored in regi
7700: 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65  ster P2..*/.case
7710: 20 4f 50 5f 53 74 72 69 6e 67 3a 20 7b 20 20 20   OP_String: {   
7720: 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70         /* out2-p
7730: 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 61  rerelease */.  a
7740: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 7a  ssert( pOp->p4.z
7750: 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 66  !=0 );.  pOut->f
7760: 6c 61 67 73 20 3d 20 4d 45 4d 5f 53 74 72 7c 4d  lags = MEM_Str|M
7770: 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 54 65  EM_Static|MEM_Te
7780: 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e 7a 20 3d 20  rm;.  pOut->z = 
7790: 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 70 4f 75  pOp->p4.z;.  pOu
77a0: 74 2d 3e 6e 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a  t->n = pOp->p1;.
77b0: 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e    pOut->enc = en
77c0: 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44 41 54 45  coding;.  UPDATE
77d0: 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f  _MAX_BLOBSIZE(pO
77e0: 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ut);.  break;.}.
77f0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 75 6c 6c  ./* Opcode: Null
7800: 20 2a 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   * P2 * * *.**.*
7810: 2a 20 57 72 69 74 65 20 61 20 4e 55 4c 4c 20 69  * Write a NULL i
7820: 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e  nto register P2.
7830: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 75 6c 6c  .*/.case OP_Null
7840: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  : {           /*
7850: 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65   out2-prerelease
7860: 20 2a 2f 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67   */.  pOut->flag
7870: 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20  s = MEM_Null;.  
7880: 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70  break;.}.../* Op
7890: 63 6f 64 65 3a 20 42 6c 6f 62 20 50 31 20 50 32  code: Blob P1 P2
78a0: 20 2a 20 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20 70   * P4.**.** P4 p
78b0: 6f 69 6e 74 73 20 74 6f 20 61 20 62 6c 6f 62 20  oints to a blob 
78c0: 6f 66 20 64 61 74 61 20 50 31 20 62 79 74 65 73  of data P1 bytes
78d0: 20 6c 6f 6e 67 2e 20 20 53 74 6f 72 65 20 74 68   long.  Store th
78e0: 69 73 0a 2a 2a 20 62 6c 6f 62 20 69 6e 20 72 65  is.** blob in re
78f0: 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61  gister P2..*/.ca
7900: 73 65 20 4f 50 5f 42 6c 6f 62 3a 20 7b 20 20 20  se OP_Blob: {   
7910: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
7920: 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20  out2-prerelease 
7930: 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  */.  assert( pOp
7940: 2d 3e 70 31 20 3c 3d 20 53 51 4c 49 54 45 5f 4d  ->p1 <= SQLITE_M
7950: 41 58 5f 4c 45 4e 47 54 48 20 29 3b 0a 20 20 73  AX_LENGTH );.  s
7960: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
7970: 53 74 72 28 70 4f 75 74 2c 20 70 4f 70 2d 3e 70  Str(pOut, pOp->p
7980: 34 2e 7a 2c 20 70 4f 70 2d 3e 70 31 2c 20 30 2c  4.z, pOp->p1, 0,
7990: 20 30 29 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63   0);.  pOut->enc
79a0: 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55   = encoding;.  U
79b0: 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49  PDATE_MAX_BLOBSI
79c0: 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61  ZE(pOut);.  brea
79d0: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
79e0: 20 56 61 72 69 61 62 6c 65 20 50 31 20 50 32 20   Variable P1 P2 
79f0: 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 54 72 61  * P4 *.**.** Tra
7a00: 6e 73 66 65 72 20 74 68 65 20 76 61 6c 75 65 73  nsfer the values
7a10: 20 6f 66 20 62 6f 75 6e 64 20 70 61 72 61 6d 65   of bound parame
7a20: 74 65 72 20 50 31 20 69 6e 74 6f 20 72 65 67 69  ter P1 into regi
7a30: 73 74 65 72 20 50 32 0a 2a 2a 0a 2a 2a 20 49 66  ster P2.**.** If
7a40: 20 74 68 65 20 70 61 72 61 6d 65 74 65 72 20 69   the parameter i
7a50: 73 20 6e 61 6d 65 64 2c 20 74 68 65 6e 20 69 74  s named, then it
7a60: 73 20 6e 61 6d 65 20 61 70 70 65 61 72 73 20 69  s name appears i
7a70: 6e 20 50 34 20 61 6e 64 20 50 33 3d 3d 31 2e 0a  n P4 and P3==1..
7a80: 2a 2a 20 54 68 65 20 50 34 20 76 61 6c 75 65 20  ** The P4 value 
7a90: 69 73 20 75 73 65 64 20 62 79 20 73 71 6c 69 74  is used by sqlit
7aa0: 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65  e3_bind_paramete
7ab0: 72 5f 6e 61 6d 65 28 29 2e 0a 2a 2f 0a 63 61 73  r_name()..*/.cas
7ac0: 65 20 4f 50 5f 56 61 72 69 61 62 6c 65 3a 20 7b  e OP_Variable: {
7ad0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f              /* o
7ae0: 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a  ut2-prerelease *
7af0: 2f 0a 20 20 4d 65 6d 20 2a 70 56 61 72 3b 20 20  /.  Mem *pVar;  
7b00: 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 62 65       /* Value be
7b10: 69 6e 67 20 74 72 61 6e 73 66 65 72 72 65 64 20  ing transferred 
7b20: 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  */..  assert( pO
7b30: 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p1>0 && pOp->
7b40: 70 31 3c 3d 70 2d 3e 6e 56 61 72 20 29 3b 0a 20  p1<=p->nVar );. 
7b50: 20 70 56 61 72 20 3d 20 26 70 2d 3e 61 56 61 72   pVar = &p->aVar
7b60: 5b 70 4f 70 2d 3e 70 31 20 2d 20 31 5d 3b 0a 20  [pOp->p1 - 1];. 
7b70: 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65   if( sqlite3Vdbe
7b80: 4d 65 6d 54 6f 6f 42 69 67 28 70 56 61 72 29 20  MemTooBig(pVar) 
7b90: 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f  ){.    goto too_
7ba0: 62 69 67 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74  big;.  }.  sqlit
7bb0: 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77  e3VdbeMemShallow
7bc0: 43 6f 70 79 28 70 4f 75 74 2c 20 70 56 61 72 2c  Copy(pOut, pVar,
7bd0: 20 4d 45 4d 5f 53 74 61 74 69 63 29 3b 0a 20 20   MEM_Static);.  
7be0: 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53  UPDATE_MAX_BLOBS
7bf0: 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65  IZE(pOut);.  bre
7c00: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
7c10: 3a 20 4d 6f 76 65 20 50 31 20 50 32 20 50 33 20  : Move P1 P2 P3 
7c20: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4d 6f 76 65 20 74  * *.**.** Move t
7c30: 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67  he values in reg
7c40: 69 73 74 65 72 20 50 31 2e 2e 50 31 2b 50 33 2d  ister P1..P1+P3-
7c50: 31 20 6f 76 65 72 20 69 6e 74 6f 0a 2a 2a 20 72  1 over into.** r
7c60: 65 67 69 73 74 65 72 73 20 50 32 2e 2e 50 32 2b  egisters P2..P2+
7c70: 50 33 2d 31 2e 20 20 52 65 67 69 73 74 65 72 73  P3-1.  Registers
7c80: 20 50 31 2e 2e 50 31 2b 50 31 2d 31 20 61 72 65   P1..P1+P1-1 are
7c90: 0a 2a 2a 20 6c 65 66 74 20 68 6f 6c 64 69 6e 67  .** left holding
7ca0: 20 61 20 4e 55 4c 4c 2e 20 20 49 74 20 69 73 20   a NULL.  It is 
7cb0: 61 6e 20 65 72 72 6f 72 20 66 6f 72 20 72 65 67  an error for reg
7cc0: 69 73 74 65 72 20 72 61 6e 67 65 73 0a 2a 2a 20  ister ranges.** 
7cd0: 50 31 2e 2e 50 31 2b 50 33 2d 31 20 61 6e 64 20  P1..P1+P3-1 and 
7ce0: 50 32 2e 2e 50 32 2b 50 33 2d 31 20 74 6f 20 6f  P2..P2+P3-1 to o
7cf0: 76 65 72 6c 61 70 2e 0a 2a 2f 0a 63 61 73 65 20  verlap..*/.case 
7d00: 4f 50 5f 4d 6f 76 65 3a 20 7b 0a 20 20 63 68 61  OP_Move: {.  cha
7d10: 72 20 2a 7a 4d 61 6c 6c 6f 63 3b 20 20 20 2f 2a  r *zMalloc;   /*
7d20: 20 48 6f 6c 64 69 6e 67 20 76 61 72 69 61 62 6c   Holding variabl
7d30: 65 20 66 6f 72 20 61 6c 6c 6f 63 61 74 65 64 20  e for allocated 
7d40: 6d 65 6d 6f 72 79 20 2a 2f 0a 20 20 69 6e 74 20  memory */.  int 
7d50: 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  n;           /* 
7d60: 4e 75 6d 62 65 72 20 6f 66 20 72 65 67 69 73 74  Number of regist
7d70: 65 72 73 20 6c 65 66 74 20 74 6f 20 63 6f 70 79  ers left to copy
7d80: 20 2a 2f 0a 20 20 69 6e 74 20 70 31 3b 20 20 20   */.  int p1;   
7d90: 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74         /* Regist
7da0: 65 72 20 74 6f 20 63 6f 70 79 20 66 72 6f 6d 20  er to copy from 
7db0: 2a 2f 0a 20 20 69 6e 74 20 70 32 3b 20 20 20 20  */.  int p2;    
7dc0: 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65        /* Registe
7dd0: 72 20 74 6f 20 63 6f 70 79 20 74 6f 20 2a 2f 0a  r to copy to */.
7de0: 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a  .  n = pOp->p3;.
7df0: 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a    p1 = pOp->p1;.
7e00: 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a    p2 = pOp->p2;.
7e10: 20 20 61 73 73 65 72 74 28 20 6e 3e 30 20 26 26    assert( n>0 &&
7e20: 20 70 31 3e 30 20 26 26 20 70 32 3e 30 20 29 3b   p1>0 && p2>0 );
7e30: 0a 20 20 61 73 73 65 72 74 28 20 70 31 2b 6e 3c  .  assert( p1+n<
7e40: 3d 70 32 20 7c 7c 20 70 32 2b 6e 3c 3d 70 31 20  =p2 || p2+n<=p1 
7e50: 29 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d  );..  pIn1 = &aM
7e60: 65 6d 5b 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d  em[p1];.  pOut =
7e70: 20 26 61 4d 65 6d 5b 70 32 5d 3b 0a 20 20 77 68   &aMem[p2];.  wh
7e80: 69 6c 65 28 20 6e 2d 2d 20 29 7b 0a 20 20 20 20  ile( n-- ){.    
7e90: 61 73 73 65 72 74 28 20 70 4f 75 74 3c 3d 26 61  assert( pOut<=&a
7ea0: 4d 65 6d 5b 70 2d 3e 6e 4d 65 6d 5d 20 29 3b 0a  Mem[p->nMem] );.
7eb0: 20 20 20 20 61 73 73 65 72 74 28 20 70 49 6e 31      assert( pIn1
7ec0: 3c 3d 26 61 4d 65 6d 5b 70 2d 3e 6e 4d 65 6d 5d  <=&aMem[p->nMem]
7ed0: 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
7ee0: 6d 65 6d 49 73 56 61 6c 69 64 28 70 49 6e 31 29  memIsValid(pIn1)
7ef0: 20 29 3b 0a 20 20 20 20 6d 65 6d 41 62 6f 75 74   );.    memAbout
7f00: 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74  ToChange(p, pOut
7f10: 29 3b 0a 20 20 20 20 7a 4d 61 6c 6c 6f 63 20 3d  );.    zMalloc =
7f20: 20 70 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f 63 3b 0a   pOut->zMalloc;.
7f30: 20 20 20 20 70 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f      pOut->zMallo
7f40: 63 20 3d 20 30 3b 0a 20 20 20 20 73 71 6c 69 74  c = 0;.    sqlit
7f50: 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28 70 4f  e3VdbeMemMove(pO
7f60: 75 74 2c 20 70 49 6e 31 29 3b 0a 20 20 20 20 70  ut, pIn1);.    p
7f70: 49 6e 31 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d 20 7a  In1->zMalloc = z
7f80: 4d 61 6c 6c 6f 63 3b 0a 20 20 20 20 52 45 47 49  Malloc;.    REGI
7f90: 53 54 45 52 5f 54 52 41 43 45 28 70 32 2b 2b 2c  STER_TRACE(p2++,
7fa0: 20 70 4f 75 74 29 3b 0a 20 20 20 20 70 49 6e 31   pOut);.    pIn1
7fb0: 2b 2b 3b 0a 20 20 20 20 70 4f 75 74 2b 2b 3b 0a  ++;.    pOut++;.
7fc0: 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
7fd0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 70 79 20  /* Opcode: Copy 
7fe0: 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
7ff0: 2a 20 4d 61 6b 65 20 61 20 63 6f 70 79 20 6f 66  * Make a copy of
8000: 20 72 65 67 69 73 74 65 72 20 50 31 20 69 6e 74   register P1 int
8010: 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  o register P2..*
8020: 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75  *.** This instru
8030: 63 74 69 6f 6e 20 6d 61 6b 65 73 20 61 20 64 65  ction makes a de
8040: 65 70 20 63 6f 70 79 20 6f 66 20 74 68 65 20 76  ep copy of the v
8050: 61 6c 75 65 2e 20 20 41 20 64 75 70 6c 69 63 61  alue.  A duplica
8060: 74 65 0a 2a 2a 20 69 73 20 6d 61 64 65 20 6f 66  te.** is made of
8070: 20 61 6e 79 20 73 74 72 69 6e 67 20 6f 72 20 62   any string or b
8080: 6c 6f 62 20 63 6f 6e 73 74 61 6e 74 2e 20 20 53  lob constant.  S
8090: 65 65 20 61 6c 73 6f 20 4f 50 5f 53 43 6f 70 79  ee also OP_SCopy
80a0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 70  ..*/.case OP_Cop
80b0: 79 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  y: {            
80c0: 20 2f 2a 20 69 6e 31 2c 20 6f 75 74 32 20 2a 2f   /* in1, out2 */
80d0: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
80e0: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74  pOp->p1];.  pOut
80f0: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
8100: 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 75  ];.  assert( pOu
8110: 74 21 3d 70 49 6e 31 20 29 3b 0a 20 20 73 71 6c  t!=pIn1 );.  sql
8120: 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c  ite3VdbeMemShall
8130: 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20 70 49 6e  owCopy(pOut, pIn
8140: 31 2c 20 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a 20  1, MEM_Ephem);. 
8150: 20 44 65 65 70 68 65 6d 65 72 61 6c 69 7a 65 28   Deephemeralize(
8160: 70 4f 75 74 29 3b 0a 20 20 52 45 47 49 53 54 45  pOut);.  REGISTE
8170: 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c  R_TRACE(pOp->p2,
8180: 20 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b   pOut);.  break;
8190: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .}../* Opcode: S
81a0: 43 6f 70 79 20 50 31 20 50 32 20 2a 20 2a 20 2a  Copy P1 P2 * * *
81b0: 0a 2a 2a 0a 2a 2a 20 4d 61 6b 65 20 61 20 73 68  .**.** Make a sh
81c0: 61 6c 6c 6f 77 20 63 6f 70 79 20 6f 66 20 72 65  allow copy of re
81d0: 67 69 73 74 65 72 20 50 31 20 69 6e 74 6f 20 72  gister P1 into r
81e0: 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a  egister P2..**.*
81f0: 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69  * This instructi
8200: 6f 6e 20 6d 61 6b 65 73 20 61 20 73 68 61 6c 6c  on makes a shall
8210: 6f 77 20 63 6f 70 79 20 6f 66 20 74 68 65 20 76  ow copy of the v
8220: 61 6c 75 65 2e 20 20 49 66 20 74 68 65 20 76 61  alue.  If the va
8230: 6c 75 65 0a 2a 2a 20 69 73 20 61 20 73 74 72 69  lue.** is a stri
8240: 6e 67 20 6f 72 20 62 6c 6f 62 2c 20 74 68 65 6e  ng or blob, then
8250: 20 74 68 65 20 63 6f 70 79 20 69 73 20 6f 6e 6c   the copy is onl
8260: 79 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  y a pointer to t
8270: 68 65 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c 20 61  he.** original a
8280: 6e 64 20 68 65 6e 63 65 20 69 66 20 74 68 65 20  nd hence if the 
8290: 6f 72 69 67 69 6e 61 6c 20 63 68 61 6e 67 65 73  original changes
82a0: 20 73 6f 20 77 69 6c 6c 20 74 68 65 20 63 6f 70   so will the cop
82b0: 79 2e 0a 2a 2a 20 57 6f 72 73 65 2c 20 69 66 20  y..** Worse, if 
82c0: 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 69 73 20  the original is 
82d0: 64 65 61 6c 6c 6f 63 61 74 65 64 2c 20 74 68 65  deallocated, the
82e0: 20 63 6f 70 79 20 62 65 63 6f 6d 65 73 20 69 6e   copy becomes in
82f0: 76 61 6c 69 64 2e 0a 2a 2a 20 54 68 75 73 20 74  valid..** Thus t
8300: 68 65 20 70 72 6f 67 72 61 6d 20 6d 75 73 74 20  he program must 
8310: 67 75 61 72 61 6e 74 65 65 20 74 68 61 74 20 74  guarantee that t
8320: 68 65 20 6f 72 69 67 69 6e 61 6c 20 77 69 6c 6c  he original will
8330: 20 6e 6f 74 20 63 68 61 6e 67 65 0a 2a 2a 20 64   not change.** d
8340: 75 72 69 6e 67 20 74 68 65 20 6c 69 66 65 74 69  uring the lifeti
8350: 6d 65 20 6f 66 20 74 68 65 20 63 6f 70 79 2e 20  me of the copy. 
8360: 20 55 73 65 20 4f 50 5f 43 6f 70 79 20 74 6f 20   Use OP_Copy to 
8370: 6d 61 6b 65 20 61 20 63 6f 6d 70 6c 65 74 65 0a  make a complete.
8380: 2a 2a 20 63 6f 70 79 2e 0a 2a 2f 0a 63 61 73 65  ** copy..*/.case
8390: 20 4f 50 5f 53 43 6f 70 79 3a 20 7b 20 20 20 20   OP_SCopy: {    
83a0: 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 2c 20          /* in1, 
83b0: 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d  out2 */.  pIn1 =
83c0: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
83d0: 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b  .  pOut = &aMem[
83e0: 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65  pOp->p2];.  asse
83f0: 72 74 28 20 70 4f 75 74 21 3d 70 49 6e 31 20 29  rt( pOut!=pIn1 )
8400: 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
8410: 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f  emShallowCopy(pO
8420: 75 74 2c 20 70 49 6e 31 2c 20 4d 45 4d 5f 45 70  ut, pIn1, MEM_Ep
8430: 68 65 6d 29 3b 0a 23 69 66 64 65 66 20 53 51 4c  hem);.#ifdef SQL
8440: 49 54 45 5f 44 45 42 55 47 0a 20 20 69 66 28 20  ITE_DEBUG.  if( 
8450: 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d  pOut->pScopyFrom
8460: 3d 3d 30 20 29 20 70 4f 75 74 2d 3e 70 53 63 6f  ==0 ) pOut->pSco
8470: 70 79 46 72 6f 6d 20 3d 20 70 49 6e 31 3b 0a 23  pyFrom = pIn1;.#
8480: 65 6e 64 69 66 0a 20 20 52 45 47 49 53 54 45 52  endif.  REGISTER
8490: 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20  _TRACE(pOp->p2, 
84a0: 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  pOut);.  break;.
84b0: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65  }../* Opcode: Re
84c0: 73 75 6c 74 52 6f 77 20 50 31 20 50 32 20 2a 20  sultRow P1 P2 * 
84d0: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 65  * *.**.** The re
84e0: 67 69 73 74 65 72 73 20 50 31 20 74 68 72 6f 75  gisters P1 throu
84f0: 67 68 20 50 31 2b 50 32 2d 31 20 63 6f 6e 74 61  gh P1+P2-1 conta
8500: 69 6e 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20  in a single row 
8510: 6f 66 0a 2a 2a 20 72 65 73 75 6c 74 73 2e 20 54  of.** results. T
8520: 68 69 73 20 6f 70 63 6f 64 65 20 63 61 75 73 65  his opcode cause
8530: 73 20 74 68 65 20 73 71 6c 69 74 65 33 5f 73 74  s the sqlite3_st
8540: 65 70 28 29 20 63 61 6c 6c 20 74 6f 20 74 65 72  ep() call to ter
8550: 6d 69 6e 61 74 65 0a 2a 2a 20 77 69 74 68 20 61  minate.** with a
8560: 6e 20 53 51 4c 49 54 45 5f 52 4f 57 20 72 65 74  n SQLITE_ROW ret
8570: 75 72 6e 20 63 6f 64 65 20 61 6e 64 20 69 74 20  urn code and it 
8580: 73 65 74 73 20 75 70 20 74 68 65 20 73 71 6c 69  sets up the sqli
8590: 74 65 33 5f 73 74 6d 74 0a 2a 2a 20 73 74 72 75  te3_stmt.** stru
85a0: 63 74 75 72 65 20 74 6f 20 70 72 6f 76 69 64 65  cture to provide
85b0: 20 61 63 63 65 73 73 20 74 6f 20 74 68 65 20 74   access to the t
85c0: 6f 70 20 50 31 20 76 61 6c 75 65 73 20 61 73 20  op P1 values as 
85d0: 74 68 65 20 72 65 73 75 6c 74 0a 2a 2a 20 72 6f  the result.** ro
85e0: 77 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65  w..*/.case OP_Re
85f0: 73 75 6c 74 52 6f 77 3a 20 7b 0a 20 20 4d 65 6d  sultRow: {.  Mem
8600: 20 2a 70 4d 65 6d 3b 0a 20 20 69 6e 74 20 69 3b   *pMem;.  int i;
8610: 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 6e 52  .  assert( p->nR
8620: 65 73 43 6f 6c 75 6d 6e 3d 3d 70 4f 70 2d 3e 70  esColumn==pOp->p
8630: 32 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  2 );.  assert( p
8640: 4f 70 2d 3e 70 31 3e 30 20 29 3b 0a 20 20 61 73  Op->p1>0 );.  as
8650: 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 2b 70 4f  sert( pOp->p1+pO
8660: 70 2d 3e 70 32 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31  p->p2<=p->nMem+1
8670: 20 29 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 69   );..  /* If thi
8680: 73 20 73 74 61 74 65 6d 65 6e 74 20 68 61 73 20  s statement has 
8690: 76 69 6f 6c 61 74 65 64 20 69 6d 6d 65 64 69 61  violated immedia
86a0: 74 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63  te foreign key c
86b0: 6f 6e 73 74 72 61 69 6e 74 73 2c 20 64 6f 0a 20  onstraints, do. 
86c0: 20 2a 2a 20 6e 6f 74 20 72 65 74 75 72 6e 20 74   ** not return t
86d0: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77  he number of row
86e0: 73 20 6d 6f 64 69 66 69 65 64 2e 20 41 6e 64 20  s modified. And 
86f0: 64 6f 20 6e 6f 74 20 52 45 4c 45 41 53 45 20 74  do not RELEASE t
8700: 68 65 20 73 74 61 74 65 6d 65 6e 74 0a 20 20 2a  he statement.  *
8710: 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 49  * transaction. I
8720: 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20 72 6f  t needs to be ro
8730: 6c 6c 65 64 20 62 61 63 6b 2e 20 20 2a 2f 0a 20  lled back.  */. 
8740: 20 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b 21 3d   if( SQLITE_OK!=
8750: 28 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62  (rc = sqlite3Vdb
8760: 65 43 68 65 63 6b 46 6b 28 70 2c 20 30 29 29 20  eCheckFk(p, 0)) 
8770: 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 64  ){.    assert( d
8780: 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54 45 5f  b->flags&SQLITE_
8790: 43 6f 75 6e 74 52 6f 77 73 20 29 3b 0a 20 20 20  CountRows );.   
87a0: 20 61 73 73 65 72 74 28 20 70 2d 3e 75 73 65 73   assert( p->uses
87b0: 53 74 6d 74 4a 6f 75 72 6e 61 6c 20 29 3b 0a 20  StmtJournal );. 
87c0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20     break;.  }.. 
87d0: 20 2f 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54   /* If the SQLIT
87e0: 45 5f 43 6f 75 6e 74 52 6f 77 73 20 66 6c 61 67  E_CountRows flag
87f0: 20 69 73 20 73 65 74 20 69 6e 20 73 71 6c 69 74   is set in sqlit
8800: 65 33 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74  e3.flags mask, t
8810: 68 65 6e 20 0a 20 20 2a 2a 20 44 4d 4c 20 73 74  hen .  ** DML st
8820: 61 74 65 6d 65 6e 74 73 20 69 6e 76 6f 6b 65 20  atements invoke 
8830: 74 68 69 73 20 6f 70 63 6f 64 65 20 74 6f 20 72  this opcode to r
8840: 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72  eturn the number
8850: 20 6f 66 20 72 6f 77 73 20 0a 20 20 2a 2a 20 6d   of rows .  ** m
8860: 6f 64 69 66 69 65 64 20 74 6f 20 74 68 65 20 75  odified to the u
8870: 73 65 72 2e 20 54 68 69 73 20 69 73 20 74 68 65  ser. This is the
8880: 20 6f 6e 6c 79 20 77 61 79 20 74 68 61 74 20 61   only way that a
8890: 20 56 4d 20 74 68 61 74 0a 20 20 2a 2a 20 6f 70   VM that.  ** op
88a0: 65 6e 73 20 61 20 73 74 61 74 65 6d 65 6e 74 20  ens a statement 
88b0: 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 61 79 20  transaction may 
88c0: 69 6e 76 6f 6b 65 20 74 68 69 73 20 6f 70 63 6f  invoke this opco
88d0: 64 65 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49 6e  de..  **.  ** In
88e0: 20 63 61 73 65 20 74 68 69 73 20 69 73 20 73 75   case this is su
88f0: 63 68 20 61 20 73 74 61 74 65 6d 65 6e 74 2c 20  ch a statement, 
8900: 63 6c 6f 73 65 20 61 6e 79 20 73 74 61 74 65 6d  close any statem
8910: 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a  ent transaction.
8920: 20 20 2a 2a 20 6f 70 65 6e 65 64 20 62 79 20 74    ** opened by t
8930: 68 69 73 20 56 4d 20 62 65 66 6f 72 65 20 72 65  his VM before re
8940: 74 75 72 6e 69 6e 67 20 63 6f 6e 74 72 6f 6c 20  turning control 
8950: 74 6f 20 74 68 65 20 75 73 65 72 2e 20 54 68 69  to the user. Thi
8960: 73 20 69 73 20 74 6f 0a 20 20 2a 2a 20 65 6e 73  s is to.  ** ens
8970: 75 72 65 20 74 68 61 74 20 73 74 61 74 65 6d 65  ure that stateme
8980: 6e 74 2d 74 72 61 6e 73 61 63 74 69 6f 6e 73 20  nt-transactions 
8990: 61 72 65 20 61 6c 77 61 79 73 20 6e 65 73 74 65  are always neste
89a0: 64 2c 20 6e 6f 74 20 6f 76 65 72 6c 61 70 70 69  d, not overlappi
89b0: 6e 67 2e 0a 20 20 2a 2a 20 49 66 20 74 68 65 20  ng..  ** If the 
89c0: 6f 70 65 6e 20 73 74 61 74 65 6d 65 6e 74 2d 74  open statement-t
89d0: 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e 6f  ransaction is no
89e0: 74 20 63 6c 6f 73 65 64 20 68 65 72 65 2c 20 74  t closed here, t
89f0: 68 65 6e 20 74 68 65 20 75 73 65 72 0a 20 20 2a  hen the user.  *
8a00: 2a 20 6d 61 79 20 73 74 65 70 20 61 6e 6f 74 68  * may step anoth
8a10: 65 72 20 56 4d 20 74 68 61 74 20 6f 70 65 6e 73  er VM that opens
8a20: 20 69 74 73 20 6f 77 6e 20 73 74 61 74 65 6d 65   its own stateme
8a30: 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20  nt transaction. 
8a40: 54 68 69 73 0a 20 20 2a 2a 20 6d 61 79 20 6c 65  This.  ** may le
8a50: 61 64 20 74 6f 20 6f 76 65 72 6c 61 70 70 69 6e  ad to overlappin
8a60: 67 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e  g statement tran
8a70: 73 61 63 74 69 6f 6e 73 2e 0a 20 20 2a 2a 0a 20  sactions..  **. 
8a80: 20 2a 2a 20 54 68 65 20 73 74 61 74 65 6d 65 6e   ** The statemen
8a90: 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  t transaction is
8aa0: 20 6e 65 76 65 72 20 61 20 74 6f 70 2d 6c 65 76   never a top-lev
8ab0: 65 6c 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20  el transaction. 
8ac0: 20 48 65 6e 63 65 0a 20 20 2a 2a 20 74 68 65 20   Hence.  ** the 
8ad0: 52 45 4c 45 41 53 45 20 63 61 6c 6c 20 62 65 6c  RELEASE call bel
8ae0: 6f 77 20 63 61 6e 20 6e 65 76 65 72 20 66 61 69  ow can never fai
8af0: 6c 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74  l..  */.  assert
8b00: 28 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 3d  ( p->iStatement=
8b10: 3d 30 20 7c 7c 20 64 62 2d 3e 66 6c 61 67 73 26  =0 || db->flags&
8b20: 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73  SQLITE_CountRows
8b30: 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   );.  rc = sqlit
8b40: 65 33 56 64 62 65 43 6c 6f 73 65 53 74 61 74 65  e3VdbeCloseState
8b50: 6d 65 6e 74 28 70 2c 20 53 41 56 45 50 4f 49 4e  ment(p, SAVEPOIN
8b60: 54 5f 52 45 4c 45 41 53 45 29 3b 0a 20 20 69 66  T_RELEASE);.  if
8b70: 28 20 4e 45 56 45 52 28 72 63 21 3d 53 51 4c 49  ( NEVER(rc!=SQLI
8b80: 54 45 5f 4f 4b 29 20 29 7b 0a 20 20 20 20 62 72  TE_OK) ){.    br
8b90: 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49  eak;.  }..  /* I
8ba0: 6e 76 61 6c 69 64 61 74 65 20 61 6c 6c 20 65 70  nvalidate all ep
8bb0: 68 65 6d 65 72 61 6c 20 63 75 72 73 6f 72 20 72  hemeral cursor r
8bc0: 6f 77 20 63 61 63 68 65 73 20 2a 2f 0a 20 20 70  ow caches */.  p
8bd0: 2d 3e 63 61 63 68 65 43 74 72 20 3d 20 28 70 2d  ->cacheCtr = (p-
8be0: 3e 63 61 63 68 65 43 74 72 20 2b 20 32 29 7c 31  >cacheCtr + 2)|1
8bf0: 3b 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72  ;..  /* Make sur
8c00: 65 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66  e the results of
8c10: 20 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77   the current row
8c20: 20 61 72 65 20 5c 30 30 30 20 74 65 72 6d 69 6e   are \000 termin
8c30: 61 74 65 64 0a 20 20 2a 2a 20 61 6e 64 20 68 61  ated.  ** and ha
8c40: 76 65 20 61 6e 20 61 73 73 69 67 6e 65 64 20 74  ve an assigned t
8c50: 79 70 65 2e 20 20 54 68 65 20 72 65 73 75 6c 74  ype.  The result
8c60: 73 20 61 72 65 20 64 65 2d 65 70 68 65 6d 65 72  s are de-ephemer
8c70: 61 6c 69 7a 65 64 20 61 73 0a 20 20 2a 2a 20 61  alized as.  ** a
8c80: 73 20 73 69 64 65 20 65 66 66 65 63 74 2e 0a 20  s side effect.. 
8c90: 20 2a 2f 0a 20 20 70 4d 65 6d 20 3d 20 70 2d 3e   */.  pMem = p->
8ca0: 70 52 65 73 75 6c 74 53 65 74 20 3d 20 26 61 4d  pResultSet = &aM
8cb0: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 66  em[pOp->p1];.  f
8cc0: 6f 72 28 69 3d 30 3b 20 69 3c 70 4f 70 2d 3e 70  or(i=0; i<pOp->p
8cd0: 32 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 61 73 73  2; i++){.    ass
8ce0: 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
8cf0: 26 70 4d 65 6d 5b 69 5d 29 20 29 3b 0a 20 20 20  &pMem[i]) );.   
8d00: 20 44 65 65 70 68 65 6d 65 72 61 6c 69 7a 65 28   Deephemeralize(
8d10: 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 20 20 61  &pMem[i]);.    a
8d20: 73 73 65 72 74 28 20 28 70 4d 65 6d 5b 69 5d 2e  ssert( (pMem[i].
8d30: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 45 70 68 65  flags & MEM_Ephe
8d40: 6d 29 3d 3d 30 0a 20 20 20 20 20 20 20 20 20 20  m)==0.          
8d50: 20 20 7c 7c 20 28 70 4d 65 6d 5b 69 5d 2e 66 6c    || (pMem[i].fl
8d60: 61 67 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d  ags & (MEM_Str|M
8d70: 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 29 3b 0a  EM_Blob))==0 );.
8d80: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
8d90: 65 6d 4e 75 6c 54 65 72 6d 69 6e 61 74 65 28 26  emNulTerminate(&
8da0: 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 20 20 73 71  pMem[i]);.    sq
8db0: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74 6f 72  lite3VdbeMemStor
8dc0: 65 54 79 70 65 28 26 70 4d 65 6d 5b 69 5d 29 3b  eType(&pMem[i]);
8dd0: 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52  .    REGISTER_TR
8de0: 41 43 45 28 70 4f 70 2d 3e 70 31 2b 69 2c 20 26  ACE(pOp->p1+i, &
8df0: 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 7d 0a 20 20  pMem[i]);.  }.  
8e00: 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61  if( db->mallocFa
8e10: 69 6c 65 64 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  iled ) goto no_m
8e20: 65 6d 3b 0a 0a 20 20 2f 2a 20 52 65 74 75 72 6e  em;..  /* Return
8e30: 20 53 51 4c 49 54 45 5f 52 4f 57 0a 20 20 2a 2f   SQLITE_ROW.  */
8e40: 0a 20 20 70 2d 3e 70 63 20 3d 20 70 63 20 2b 20  .  p->pc = pc + 
8e50: 31 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45  1;.  rc = SQLITE
8e60: 5f 52 4f 57 3b 0a 20 20 67 6f 74 6f 20 76 64 62  _ROW;.  goto vdb
8e70: 65 5f 72 65 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a 20  e_return;.}../* 
8e80: 4f 70 63 6f 64 65 3a 20 43 6f 6e 63 61 74 20 50  Opcode: Concat P
8e90: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
8ea0: 2a 20 41 64 64 20 74 68 65 20 74 65 78 74 20 69  * Add the text i
8eb0: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 6f 6e  n register P1 on
8ec0: 74 6f 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  to the end of th
8ed0: 65 20 74 65 78 74 20 69 6e 0a 2a 2a 20 72 65 67  e text in.** reg
8ee0: 69 73 74 65 72 20 50 32 20 61 6e 64 20 73 74 6f  ister P2 and sto
8ef0: 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e  re the result in
8f00: 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a   register P3..**
8f10: 20 49 66 20 65 69 74 68 65 72 20 74 68 65 20 50   If either the P
8f20: 31 20 6f 72 20 50 32 20 74 65 78 74 20 61 72 65  1 or P2 text are
8f30: 20 4e 55 4c 4c 20 74 68 65 6e 20 73 74 6f 72 65   NULL then store
8f40: 20 4e 55 4c 4c 20 69 6e 20 50 33 2e 0a 2a 2a 0a   NULL in P3..**.
8f50: 2a 2a 20 20 20 50 33 20 3d 20 50 32 20 7c 7c 20  **   P3 = P2 || 
8f60: 50 31 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69  P1.**.** It is i
8f70: 6c 6c 65 67 61 6c 20 66 6f 72 20 50 31 20 61 6e  llegal for P1 an
8f80: 64 20 50 33 20 74 6f 20 62 65 20 74 68 65 20 73  d P3 to be the s
8f90: 61 6d 65 20 72 65 67 69 73 74 65 72 2e 20 53 6f  ame register. So
8fa0: 6d 65 74 69 6d 65 73 2c 0a 2a 2a 20 69 66 20 50  metimes,.** if P
8fb0: 33 20 69 73 20 74 68 65 20 73 61 6d 65 20 72 65  3 is the same re
8fc0: 67 69 73 74 65 72 20 61 73 20 50 32 2c 20 74 68  gister as P2, th
8fd0: 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
8fe0: 20 69 73 20 61 62 6c 65 0a 2a 2a 20 74 6f 20 61   is able.** to a
8ff0: 76 6f 69 64 20 61 20 6d 65 6d 63 70 79 28 29 2e  void a memcpy().
9000: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6e 63  .*/.case OP_Conc
9010: 61 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  at: {           
9020: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 43 4f  /* same as TK_CO
9030: 4e 43 41 54 2c 20 69 6e 31 2c 20 69 6e 32 2c 20  NCAT, in1, in2, 
9040: 6f 75 74 33 20 2a 2f 0a 20 20 69 36 34 20 6e 42  out3 */.  i64 nB
9050: 79 74 65 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26  yte;..  pIn1 = &
9060: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
9070: 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn2 = &aMem[pO
9080: 70 2d 3e 70 32 5d 3b 0a 20 20 70 4f 75 74 20 3d  p->p2];.  pOut =
9090: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
90a0: 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 21  .  assert( pIn1!
90b0: 3d 70 4f 75 74 20 29 3b 0a 20 20 69 66 28 20 28  =pOut );.  if( (
90c0: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49  pIn1->flags | pI
90d0: 6e 32 2d 3e 66 6c 61 67 73 29 20 26 20 4d 45 4d  n2->flags) & MEM
90e0: 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 73 71 6c  _Null ){.    sql
90f0: 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75  ite3VdbeMemSetNu
9100: 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 20 20 62 72  ll(pOut);.    br
9110: 65 61 6b 3b 0a 20 20 7d 0a 20 20 69 66 28 20 45  eak;.  }.  if( E
9120: 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 31 29 20  xpandBlob(pIn1) 
9130: 7c 7c 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49  || ExpandBlob(pI
9140: 6e 32 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  n2) ) goto no_me
9150: 6d 3b 0a 20 20 53 74 72 69 6e 67 69 66 79 28 70  m;.  Stringify(p
9160: 49 6e 31 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a  In1, encoding);.
9170: 20 20 53 74 72 69 6e 67 69 66 79 28 70 49 6e 32    Stringify(pIn2
9180: 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 6e  , encoding);.  n
9190: 42 79 74 65 20 3d 20 70 49 6e 31 2d 3e 6e 20 2b  Byte = pIn1->n +
91a0: 20 70 49 6e 32 2d 3e 6e 3b 0a 20 20 69 66 28 20   pIn2->n;.  if( 
91b0: 6e 42 79 74 65 3e 64 62 2d 3e 61 4c 69 6d 69 74  nByte>db->aLimit
91c0: 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45  [SQLITE_LIMIT_LE
91d0: 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74  NGTH] ){.    got
91e0: 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20  o too_big;.  }. 
91f0: 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
9200: 70 4f 75 74 2c 20 4d 45 4d 5f 53 74 72 29 3b 0a  pOut, MEM_Str);.
9210: 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62    if( sqlite3Vdb
9220: 65 4d 65 6d 47 72 6f 77 28 70 4f 75 74 2c 20 28  eMemGrow(pOut, (
9230: 69 6e 74 29 6e 42 79 74 65 2b 32 2c 20 70 4f 75  int)nByte+2, pOu
9240: 74 3d 3d 70 49 6e 32 29 20 29 7b 0a 20 20 20 20  t==pIn2) ){.    
9250: 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d  goto no_mem;.  }
9260: 0a 20 20 69 66 28 20 70 4f 75 74 21 3d 70 49 6e  .  if( pOut!=pIn
9270: 32 20 29 7b 0a 20 20 20 20 6d 65 6d 63 70 79 28  2 ){.    memcpy(
9280: 70 4f 75 74 2d 3e 7a 2c 20 70 49 6e 32 2d 3e 7a  pOut->z, pIn2->z
9290: 2c 20 70 49 6e 32 2d 3e 6e 29 3b 0a 20 20 7d 0a  , pIn2->n);.  }.
92a0: 20 20 6d 65 6d 63 70 79 28 26 70 4f 75 74 2d 3e    memcpy(&pOut->
92b0: 7a 5b 70 49 6e 32 2d 3e 6e 5d 2c 20 70 49 6e 31  z[pIn2->n], pIn1
92c0: 2d 3e 7a 2c 20 70 49 6e 31 2d 3e 6e 29 3b 0a 20  ->z, pIn1->n);. 
92d0: 20 70 4f 75 74 2d 3e 7a 5b 6e 42 79 74 65 5d 20   pOut->z[nByte] 
92e0: 3d 20 30 3b 0a 20 20 70 4f 75 74 2d 3e 7a 5b 6e  = 0;.  pOut->z[n
92f0: 42 79 74 65 2b 31 5d 20 3d 20 30 3b 0a 20 20 70  Byte+1] = 0;.  p
9300: 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45  Out->flags |= ME
9310: 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e  M_Term;.  pOut->
9320: 6e 20 3d 20 28 69 6e 74 29 6e 42 79 74 65 3b 0a  n = (int)nByte;.
9330: 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e    pOut->enc = en
9340: 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44 41 54 45  coding;.  UPDATE
9350: 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f  _MAX_BLOBSIZE(pO
9360: 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ut);.  break;.}.
9370: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 64 64 20  ./* Opcode: Add 
9380: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
9390: 2a 2a 20 41 64 64 20 74 68 65 20 76 61 6c 75 65  ** Add the value
93a0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
93b0: 74 6f 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  to the value in 
93c0: 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 61  register P2.** a
93d0: 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73  nd store the res
93e0: 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ult in register 
93f0: 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  P3..** If either
9400: 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20   input is NULL, 
9410: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
9420: 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  LL..*/./* Opcode
9430: 3a 20 4d 75 6c 74 69 70 6c 79 20 50 31 20 50 32  : Multiply P1 P2
9440: 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 0a 2a 2a   P3 * *.**.**.**
9450: 20 4d 75 6c 74 69 70 6c 79 20 74 68 65 20 76 61   Multiply the va
9460: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
9470: 50 31 20 62 79 20 74 68 65 20 76 61 6c 75 65 20  P1 by the value 
9480: 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a  in register P2.*
9490: 2a 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20  * and store the 
94a0: 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74  result in regist
94b0: 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74  er P3..** If eit
94c0: 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c  her input is NUL
94d0: 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  L, the result is
94e0: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63   NULL..*/./* Opc
94f0: 6f 64 65 3a 20 53 75 62 74 72 61 63 74 20 50 31  ode: Subtract P1
9500: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
9510: 20 53 75 62 74 72 61 63 74 20 74 68 65 20 76 61   Subtract the va
9520: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
9530: 50 31 20 66 72 6f 6d 20 74 68 65 20 76 61 6c 75  P1 from the valu
9540: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  e in register P2
9550: 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20 74 68  .** and store th
9560: 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69  e result in regi
9570: 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65  ster P3..** If e
9580: 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e  ither input is N
9590: 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20  ULL, the result 
95a0: 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f  is NULL..*/./* O
95b0: 70 63 6f 64 65 3a 20 44 69 76 69 64 65 20 50 31  pcode: Divide P1
95c0: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
95d0: 20 44 69 76 69 64 65 20 74 68 65 20 76 61 6c 75   Divide the valu
95e0: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
95f0: 20 62 79 20 74 68 65 20 76 61 6c 75 65 20 69 6e   by the value in
9600: 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20   register P2.** 
9610: 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65  and store the re
9620: 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72  sult in register
9630: 20 50 33 20 28 50 33 3d 50 32 2f 50 31 29 2e 20   P3 (P3=P2/P1). 
9640: 49 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  If the value in 
9650: 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31 20  .** register P1 
9660: 69 73 20 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68  is zero, then th
9670: 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  e result is NULL
9680: 2e 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75  . If either inpu
9690: 74 20 69 73 20 0a 2a 2a 20 4e 55 4c 4c 2c 20 74  t is .** NULL, t
96a0: 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c  he result is NUL
96b0: 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  L..*/./* Opcode:
96c0: 20 52 65 6d 61 69 6e 64 65 72 20 50 31 20 50 32   Remainder P1 P2
96d0: 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 6f   P3 * *.**.** Co
96e0: 6d 70 75 74 65 20 74 68 65 20 72 65 6d 61 69 6e  mpute the remain
96f0: 64 65 72 20 61 66 74 65 72 20 69 6e 74 65 67 65  der after intege
9700: 72 20 64 69 76 69 73 69 6f 6e 20 6f 66 20 74 68  r division of th
9710: 65 20 76 61 6c 75 65 20 69 6e 0a 2a 2a 20 72 65  e value in.** re
9720: 67 69 73 74 65 72 20 50 31 20 62 79 20 74 68 65  gister P1 by the
9730: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
9740: 65 72 20 50 32 20 61 6e 64 20 73 74 6f 72 65 20  er P2 and store 
9750: 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 50 33  the result in P3
9760: 2e 20 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c  . .** If the val
9770: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
9780: 32 20 69 73 20 7a 65 72 6f 20 74 68 65 20 72 65  2 is zero the re
9790: 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a  sult is NULL..**
97a0: 20 49 66 20 65 69 74 68 65 72 20 6f 70 65 72 61   If either opera
97b0: 6e 64 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20  nd is NULL, the 
97c0: 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a  result is NULL..
97d0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 64 64 3a 20  */.case OP_Add: 
97e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
97f0: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
9800: 50 4c 55 53 2c 20 69 6e 31 2c 20 69 6e 32 2c 20  PLUS, in1, in2, 
9810: 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  out3 */.case OP_
9820: 53 75 62 74 72 61 63 74 3a 20 20 20 20 20 20 20  Subtract:       
9830: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
9840: 73 20 54 4b 5f 4d 49 4e 55 53 2c 20 69 6e 31 2c  s TK_MINUS, in1,
9850: 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61   in2, out3 */.ca
9860: 73 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a 20  se OP_Multiply: 
9870: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
9880: 73 61 6d 65 20 61 73 20 54 4b 5f 53 54 41 52 2c  same as TK_STAR,
9890: 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20   in1, in2, out3 
98a0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 69 76 69 64  */.case OP_Divid
98b0: 65 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e:              
98c0: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
98d0: 53 4c 41 53 48 2c 20 69 6e 31 2c 20 69 6e 32 2c  SLASH, in1, in2,
98e0: 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50   out3 */.case OP
98f0: 5f 52 65 6d 61 69 6e 64 65 72 3a 20 7b 20 20 20  _Remainder: {   
9900: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
9910: 61 73 20 54 4b 5f 52 45 4d 2c 20 69 6e 31 2c 20  as TK_REM, in1, 
9920: 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69  in2, out3 */.  i
9930: 6e 74 20 66 6c 61 67 73 3b 20 20 20 20 20 20 2f  nt flags;      /
9940: 2a 20 43 6f 6d 62 69 6e 65 64 20 4d 45 4d 5f 2a  * Combined MEM_*
9950: 20 66 6c 61 67 73 20 66 72 6f 6d 20 62 6f 74 68   flags from both
9960: 20 69 6e 70 75 74 73 20 2a 2f 0a 20 20 69 36 34   inputs */.  i64
9970: 20 69 41 3b 20 20 20 20 20 20 20 20 20 2f 2a 20   iA;         /* 
9980: 49 6e 74 65 67 65 72 20 76 61 6c 75 65 20 6f 66  Integer value of
9990: 20 6c 65 66 74 20 6f 70 65 72 61 6e 64 20 2a 2f   left operand */
99a0: 0a 20 20 69 36 34 20 69 42 3b 20 20 20 20 20 20  .  i64 iB;      
99b0: 20 20 20 2f 2a 20 49 6e 74 65 67 65 72 20 76 61     /* Integer va
99c0: 6c 75 65 20 6f 66 20 72 69 67 68 74 20 6f 70 65  lue of right ope
99d0: 72 61 6e 64 20 2a 2f 0a 20 20 64 6f 75 62 6c 65  rand */.  double
99e0: 20 72 41 3b 20 20 20 20 20 20 2f 2a 20 52 65 61   rA;      /* Rea
99f0: 6c 20 76 61 6c 75 65 20 6f 66 20 6c 65 66 74 20  l value of left 
9a00: 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 64 6f 75  operand */.  dou
9a10: 62 6c 65 20 72 42 3b 20 20 20 20 20 20 2f 2a 20  ble rB;      /* 
9a20: 52 65 61 6c 20 76 61 6c 75 65 20 6f 66 20 72 69  Real value of ri
9a30: 67 68 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 0a  ght operand */..
9a40: 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
9a50: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 70 70 6c 79  Op->p1];.  apply
9a60: 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28  NumericAffinity(
9a70: 70 49 6e 31 29 3b 0a 20 20 70 49 6e 32 20 3d 20  pIn1);.  pIn2 = 
9a80: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
9a90: 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66    applyNumericAf
9aa0: 66 69 6e 69 74 79 28 70 49 6e 32 29 3b 0a 20 20  finity(pIn2);.  
9ab0: 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
9ac0: 2d 3e 70 33 5d 3b 0a 20 20 66 6c 61 67 73 20 3d  ->p3];.  flags =
9ad0: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70   pIn1->flags | p
9ae0: 49 6e 32 2d 3e 66 6c 61 67 73 3b 0a 20 20 69 66  In2->flags;.  if
9af0: 28 20 28 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  ( (flags & MEM_N
9b00: 75 6c 6c 29 21 3d 30 20 29 20 67 6f 74 6f 20 61  ull)!=0 ) goto a
9b10: 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74  rithmetic_result
9b20: 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 69 66 28 20  _is_null;.  if( 
9b30: 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 70  (pIn1->flags & p
9b40: 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In2->flags & MEM
9b50: 5f 49 6e 74 29 3d 3d 4d 45 4d 5f 49 6e 74 20 29  _Int)==MEM_Int )
9b60: 7b 0a 20 20 20 20 69 41 20 3d 20 70 49 6e 31 2d  {.    iA = pIn1-
9b70: 3e 75 2e 69 3b 0a 20 20 20 20 69 42 20 3d 20 70  >u.i;.    iB = p
9b80: 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20 20 20 73 77  In2->u.i;.    sw
9b90: 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  itch( pOp->opcod
9ba0: 65 20 29 7b 0a 20 20 20 20 20 20 63 61 73 65 20  e ){.      case 
9bb0: 4f 50 5f 41 64 64 3a 20 20 20 20 20 20 20 69 66  OP_Add:       if
9bc0: 28 20 73 71 6c 69 74 65 33 41 64 64 49 6e 74 36  ( sqlite3AddInt6
9bd0: 34 28 26 69 42 2c 69 41 29 20 29 20 67 6f 74 6f  4(&iB,iA) ) goto
9be0: 20 66 70 5f 6d 61 74 68 3b 20 20 62 72 65 61 6b   fp_math;  break
9bf0: 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f  ;.      case OP_
9c00: 53 75 62 74 72 61 63 74 3a 20 20 69 66 28 20 73  Subtract:  if( s
9c10: 71 6c 69 74 65 33 53 75 62 49 6e 74 36 34 28 26  qlite3SubInt64(&
9c20: 69 42 2c 69 41 29 20 29 20 67 6f 74 6f 20 66 70  iB,iA) ) goto fp
9c30: 5f 6d 61 74 68 3b 20 20 62 72 65 61 6b 3b 0a 20  _math;  break;. 
9c40: 20 20 20 20 20 63 61 73 65 20 4f 50 5f 4d 75 6c       case OP_Mul
9c50: 74 69 70 6c 79 3a 20 20 69 66 28 20 73 71 6c 69  tiply:  if( sqli
9c60: 74 65 33 4d 75 6c 49 6e 74 36 34 28 26 69 42 2c  te3MulInt64(&iB,
9c70: 69 41 29 20 29 20 67 6f 74 6f 20 66 70 5f 6d 61  iA) ) goto fp_ma
9c80: 74 68 3b 20 20 62 72 65 61 6b 3b 0a 20 20 20 20  th;  break;.    
9c90: 20 20 63 61 73 65 20 4f 50 5f 44 69 76 69 64 65    case OP_Divide
9ca0: 3a 20 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20  : {.        if( 
9cb0: 69 41 3d 3d 30 20 29 20 67 6f 74 6f 20 61 72 69  iA==0 ) goto ari
9cc0: 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69  thmetic_result_i
9cd0: 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20  s_null;.        
9ce0: 69 66 28 20 69 41 3d 3d 2d 31 20 26 26 20 69 42  if( iA==-1 && iB
9cf0: 3d 3d 53 4d 41 4c 4c 45 53 54 5f 49 4e 54 36 34  ==SMALLEST_INT64
9d00: 20 29 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68 3b   ) goto fp_math;
9d10: 0a 20 20 20 20 20 20 20 20 69 42 20 2f 3d 20 69  .        iB /= i
9d20: 41 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b  A;.        break
9d30: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
9d40: 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20 20 20 20  default: {.     
9d50: 20 20 20 69 66 28 20 69 41 3d 3d 30 20 29 20 67     if( iA==0 ) g
9d60: 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72  oto arithmetic_r
9d70: 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20  esult_is_null;. 
9d80: 20 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d 2d         if( iA==-
9d90: 31 20 29 20 69 41 20 3d 20 31 3b 0a 20 20 20 20  1 ) iA = 1;.    
9da0: 20 20 20 20 69 42 20 25 3d 20 69 41 3b 0a 20 20      iB %= iA;.  
9db0: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
9dc0: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 70     }.    }.    p
9dd0: 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 42 3b 0a 20  Out->u.i = iB;. 
9de0: 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61     MemSetTypeFla
9df0: 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29  g(pOut, MEM_Int)
9e00: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 66 70 5f 6d 61  ;.  }else{.fp_ma
9e10: 74 68 3a 0a 20 20 20 20 72 41 20 3d 20 73 71 6c  th:.    rA = sql
9e20: 69 74 65 33 56 64 62 65 52 65 61 6c 56 61 6c 75  ite3VdbeRealValu
9e30: 65 28 70 49 6e 31 29 3b 0a 20 20 20 20 72 42 20  e(pIn1);.    rB 
9e40: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 52 65 61  = sqlite3VdbeRea
9e50: 6c 56 61 6c 75 65 28 70 49 6e 32 29 3b 0a 20 20  lValue(pIn2);.  
9e60: 20 20 73 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f    switch( pOp->o
9e70: 70 63 6f 64 65 20 29 7b 0a 20 20 20 20 20 20 63  pcode ){.      c
9e80: 61 73 65 20 4f 50 5f 41 64 64 3a 20 20 20 20 20  ase OP_Add:     
9e90: 20 20 20 20 72 42 20 2b 3d 20 72 41 3b 20 20 20      rB += rA;   
9ea0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
9eb0: 20 63 61 73 65 20 4f 50 5f 53 75 62 74 72 61 63   case OP_Subtrac
9ec0: 74 3a 20 20 20 20 72 42 20 2d 3d 20 72 41 3b 20  t:    rB -= rA; 
9ed0: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
9ee0: 20 20 20 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69     case OP_Multi
9ef0: 70 6c 79 3a 20 20 20 20 72 42 20 2a 3d 20 72 41  ply:    rB *= rA
9f00: 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  ;       break;. 
9f10: 20 20 20 20 20 63 61 73 65 20 4f 50 5f 44 69 76       case OP_Div
9f20: 69 64 65 3a 20 7b 0a 20 20 20 20 20 20 20 20 2f  ide: {.        /
9f30: 2a 20 28 64 6f 75 62 6c 65 29 30 20 49 6e 20 63  * (double)0 In c
9f40: 61 73 65 20 6f 66 20 53 51 4c 49 54 45 5f 4f 4d  ase of SQLITE_OM
9f50: 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e  IT_FLOATING_POIN
9f60: 54 2e 2e 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20  T... */.        
9f70: 69 66 28 20 72 41 3d 3d 28 64 6f 75 62 6c 65 29  if( rA==(double)
9f80: 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d 65  0 ) goto arithme
9f90: 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75  tic_result_is_nu
9fa0: 6c 6c 3b 0a 20 20 20 20 20 20 20 20 72 42 20 2f  ll;.        rB /
9fb0: 3d 20 72 41 3b 0a 20 20 20 20 20 20 20 20 62 72  = rA;.        br
9fc0: 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  eak;.      }.   
9fd0: 20 20 20 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20     default: {.  
9fe0: 20 20 20 20 20 20 69 41 20 3d 20 28 69 36 34 29        iA = (i64)
9ff0: 72 41 3b 0a 20 20 20 20 20 20 20 20 69 42 20 3d  rA;.        iB =
a000: 20 28 69 36 34 29 72 42 3b 0a 20 20 20 20 20 20   (i64)rB;.      
a010: 20 20 69 66 28 20 69 41 3d 3d 30 20 29 20 67 6f    if( iA==0 ) go
a020: 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65  to arithmetic_re
a030: 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20  sult_is_null;.  
a040: 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d 2d 31        if( iA==-1
a050: 20 29 20 69 41 20 3d 20 31 3b 0a 20 20 20 20 20   ) iA = 1;.     
a060: 20 20 20 72 42 20 3d 20 28 64 6f 75 62 6c 65 29     rB = (double)
a070: 28 69 42 20 25 20 69 41 29 3b 0a 20 20 20 20 20  (iB % iA);.     
a080: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
a090: 7d 0a 20 20 20 20 7d 0a 23 69 66 64 65 66 20 53  }.    }.#ifdef S
a0a0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54  QLITE_OMIT_FLOAT
a0b0: 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 20 20 70 4f  ING_POINT.    pO
a0c0: 75 74 2d 3e 75 2e 69 20 3d 20 72 42 3b 0a 20 20  ut->u.i = rB;.  
a0d0: 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
a0e0: 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b  (pOut, MEM_Int);
a0f0: 0a 23 65 6c 73 65 0a 20 20 20 20 69 66 28 20 73  .#else.    if( s
a100: 71 6c 69 74 65 33 49 73 4e 61 4e 28 72 42 29 20  qlite3IsNaN(rB) 
a110: 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 72  ){.      goto ar
a120: 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f  ithmetic_result_
a130: 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 7d 0a 20  is_null;.    }. 
a140: 20 20 20 70 4f 75 74 2d 3e 72 20 3d 20 72 42 3b     pOut->r = rB;
a150: 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46  .    MemSetTypeF
a160: 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 52 65  lag(pOut, MEM_Re
a170: 61 6c 29 3b 0a 20 20 20 20 69 66 28 20 28 66 6c  al);.    if( (fl
a180: 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 29 3d  ags & MEM_Real)=
a190: 3d 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  =0 ){.      sqli
a1a0: 74 65 33 56 64 62 65 49 6e 74 65 67 65 72 41 66  te3VdbeIntegerAf
a1b0: 66 69 6e 69 74 79 28 70 4f 75 74 29 3b 0a 20 20  finity(pOut);.  
a1c0: 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 7d 0a 20    }.#endif.  }. 
a1d0: 20 62 72 65 61 6b 3b 0a 0a 61 72 69 74 68 6d 65   break;..arithme
a1e0: 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75  tic_result_is_nu
a1f0: 6c 6c 3a 0a 20 20 73 71 6c 69 74 65 33 56 64 62  ll:.  sqlite3Vdb
a200: 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74  eMemSetNull(pOut
a210: 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
a220: 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6c 6c 53 65  * Opcode: CollSe
a230: 71 20 2a 20 2a 20 50 34 0a 2a 2a 0a 2a 2a 20 50  q * * P4.**.** P
a240: 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  4 is a pointer t
a250: 6f 20 61 20 43 6f 6c 6c 53 65 71 20 73 74 72 75  o a CollSeq stru
a260: 63 74 2e 20 49 66 20 74 68 65 20 6e 65 78 74 20  ct. If the next 
a270: 63 61 6c 6c 20 74 6f 20 61 20 75 73 65 72 20 66  call to a user f
a280: 75 6e 63 74 69 6f 6e 0a 2a 2a 20 6f 72 20 61 67  unction.** or ag
a290: 67 72 65 67 61 74 65 20 63 61 6c 6c 73 20 73 71  gregate calls sq
a2a0: 6c 69 74 65 33 47 65 74 46 75 6e 63 43 6f 6c 6c  lite3GetFuncColl
a2b0: 53 65 71 28 29 2c 20 74 68 69 73 20 63 6f 6c 6c  Seq(), this coll
a2c0: 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 77  ation sequence w
a2d0: 69 6c 6c 0a 2a 2a 20 62 65 20 72 65 74 75 72 6e  ill.** be return
a2e0: 65 64 2e 20 54 68 69 73 20 69 73 20 75 73 65 64  ed. This is used
a2f0: 20 62 79 20 74 68 65 20 62 75 69 6c 74 2d 69 6e   by the built-in
a300: 20 6d 69 6e 28 29 2c 20 6d 61 78 28 29 20 61 6e   min(), max() an
a310: 64 20 6e 75 6c 6c 69 66 28 29 0a 2a 2a 20 66 75  d nullif().** fu
a320: 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 54  nctions..**.** T
a330: 68 65 20 69 6e 74 65 72 66 61 63 65 20 75 73 65  he interface use
a340: 64 20 62 79 20 74 68 65 20 69 6d 70 6c 65 6d 65  d by the impleme
a350: 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 61  ntation of the a
a360: 66 6f 72 65 6d 65 6e 74 69 6f 6e 65 64 20 66 75  forementioned fu
a370: 6e 63 74 69 6f 6e 73 0a 2a 2a 20 74 6f 20 72 65  nctions.** to re
a380: 74 72 69 65 76 65 20 74 68 65 20 63 6f 6c 6c 61  trieve the colla
a390: 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 73 65  tion sequence se
a3a0: 74 20 62 79 20 74 68 69 73 20 6f 70 63 6f 64 65  t by this opcode
a3b0: 20 69 73 20 6e 6f 74 20 61 76 61 69 6c 61 62 6c   is not availabl
a3c0: 65 0a 2a 2a 20 70 75 62 6c 69 63 6c 79 2c 20 6f  e.** publicly, o
a3d0: 6e 6c 79 20 74 6f 20 75 73 65 72 20 66 75 6e 63  nly to user func
a3e0: 74 69 6f 6e 73 20 64 65 66 69 6e 65 64 20 69 6e  tions defined in
a3f0: 20 66 75 6e 63 2e 63 2e 0a 2a 2f 0a 63 61 73 65   func.c..*/.case
a400: 20 4f 50 5f 43 6f 6c 6c 53 65 71 3a 20 7b 0a 20   OP_CollSeq: {. 
a410: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
a420: 74 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51  type==P4_COLLSEQ
a430: 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a   );.  break;.}..
a440: 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 75 6e 63 74  /* Opcode: Funct
a450: 69 6f 6e 20 50 31 20 50 32 20 50 33 20 50 34 20  ion P1 P2 P3 P4 
a460: 50 35 0a 2a 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20  P5.**.** Invoke 
a470: 61 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20  a user function 
a480: 28 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72  (P4 is a pointer
a490: 20 74 6f 20 61 20 46 75 6e 63 74 69 6f 6e 20 73   to a Function s
a4a0: 74 72 75 63 74 75 72 65 20 74 68 61 74 0a 2a 2a  tructure that.**
a4b0: 20 64 65 66 69 6e 65 73 20 74 68 65 20 66 75 6e   defines the fun
a4c0: 63 74 69 6f 6e 29 20 77 69 74 68 20 50 35 20 61  ction) with P5 a
a4d0: 72 67 75 6d 65 6e 74 73 20 74 61 6b 65 6e 20 66  rguments taken f
a4e0: 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50 32 20  rom register P2 
a4f0: 61 6e 64 0a 2a 2a 20 73 75 63 63 65 73 73 6f 72  and.** successor
a500: 73 2e 20 20 54 68 65 20 72 65 73 75 6c 74 20 6f  s.  The result o
a510: 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 69  f the function i
a520: 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  s stored in regi
a530: 73 74 65 72 20 50 33 2e 0a 2a 2a 20 52 65 67 69  ster P3..** Regi
a540: 73 74 65 72 20 50 33 20 6d 75 73 74 20 6e 6f 74  ster P3 must not
a550: 20 62 65 20 6f 6e 65 20 6f 66 20 74 68 65 20 66   be one of the f
a560: 75 6e 63 74 69 6f 6e 20 69 6e 70 75 74 73 2e 0a  unction inputs..
a570: 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 33 32  **.** P1 is a 32
a580: 2d 62 69 74 20 62 69 74 6d 61 73 6b 20 69 6e 64  -bit bitmask ind
a590: 69 63 61 74 69 6e 67 20 77 68 65 74 68 65 72 20  icating whether 
a5a0: 6f 72 20 6e 6f 74 20 65 61 63 68 20 61 72 67 75  or not each argu
a5b0: 6d 65 6e 74 20 74 6f 20 74 68 65 20 0a 2a 2a 20  ment to the .** 
a5c0: 66 75 6e 63 74 69 6f 6e 20 77 61 73 20 64 65 74  function was det
a5d0: 65 72 6d 69 6e 65 64 20 74 6f 20 62 65 20 63 6f  ermined to be co
a5e0: 6e 73 74 61 6e 74 20 61 74 20 63 6f 6d 70 69 6c  nstant at compil
a5f0: 65 20 74 69 6d 65 2e 20 49 66 20 74 68 65 20 66  e time. If the f
a600: 69 72 73 74 0a 2a 2a 20 61 72 67 75 6d 65 6e 74  irst.** argument
a610: 20 77 61 73 20 63 6f 6e 73 74 61 6e 74 20 74 68   was constant th
a620: 65 6e 20 62 69 74 20 30 20 6f 66 20 50 31 20 69  en bit 0 of P1 i
a630: 73 20 73 65 74 2e 20 54 68 69 73 20 69 73 20 75  s set. This is u
a640: 73 65 64 20 74 6f 20 64 65 74 65 72 6d 69 6e 65  sed to determine
a650: 0a 2a 2a 20 77 68 65 74 68 65 72 20 6d 65 74 61  .** whether meta
a660: 20 64 61 74 61 20 61 73 73 6f 63 69 61 74 65 64   data associated
a670: 20 77 69 74 68 20 61 20 75 73 65 72 20 66 75 6e   with a user fun
a680: 63 74 69 6f 6e 20 61 72 67 75 6d 65 6e 74 20 75  ction argument u
a690: 73 69 6e 67 20 74 68 65 0a 2a 2a 20 73 71 6c 69  sing the.** sqli
a6a0: 74 65 33 5f 73 65 74 5f 61 75 78 64 61 74 61 28  te3_set_auxdata(
a6b0: 29 20 41 50 49 20 6d 61 79 20 62 65 20 73 61 66  ) API may be saf
a6c0: 65 6c 79 20 72 65 74 61 69 6e 65 64 20 75 6e 74  ely retained unt
a6d0: 69 6c 20 74 68 65 20 6e 65 78 74 0a 2a 2a 20 69  il the next.** i
a6e0: 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 69  nvocation of thi
a6f0: 73 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20  s opcode..**.** 
a700: 53 65 65 20 61 6c 73 6f 3a 20 41 67 67 53 74 65  See also: AggSte
a710: 70 20 61 6e 64 20 41 67 67 46 69 6e 61 6c 0a 2a  p and AggFinal.*
a720: 2f 0a 63 61 73 65 20 4f 50 5f 46 75 6e 63 74 69  /.case OP_Functi
a730: 6f 6e 3a 20 7b 0a 20 20 69 6e 74 20 69 3b 0a 20  on: {.  int i;. 
a740: 20 4d 65 6d 20 2a 70 41 72 67 3b 0a 20 20 73 71   Mem *pArg;.  sq
a750: 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 63 74  lite3_context ct
a760: 78 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c  x;.  sqlite3_val
a770: 75 65 20 2a 2a 61 70 56 61 6c 3b 0a 20 20 69 6e  ue **apVal;.  in
a780: 74 20 6e 3b 0a 0a 20 20 6e 20 3d 20 70 4f 70 2d  t n;..  n = pOp-
a790: 3e 70 35 3b 0a 20 20 61 70 56 61 6c 20 3d 20 70  >p5;.  apVal = p
a7a0: 2d 3e 61 70 41 72 67 3b 0a 20 20 61 73 73 65 72  ->apArg;.  asser
a7b0: 74 28 20 61 70 56 61 6c 20 7c 7c 20 6e 3d 3d 30  t( apVal || n==0
a7c0: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
a7d0: 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p3>0 && pOp->
a7e0: 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20  p3<=p->nMem );. 
a7f0: 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f   pOut = &aMem[pO
a800: 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41 62 6f  p->p3];.  memAbo
a810: 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f  utToChange(p, pO
a820: 75 74 29 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  ut);..  assert( 
a830: 6e 3d 3d 30 20 7c 7c 20 28 70 4f 70 2d 3e 70 32  n==0 || (pOp->p2
a840: 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 6e 3c  >0 && pOp->p2+n<
a850: 3d 70 2d 3e 6e 4d 65 6d 2b 31 29 20 29 3b 0a 20  =p->nMem+1) );. 
a860: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
a870: 3c 70 4f 70 2d 3e 70 32 20 7c 7c 20 70 4f 70 2d  <pOp->p2 || pOp-
a880: 3e 70 33 3e 3d 70 4f 70 2d 3e 70 32 2b 6e 20 29  >p3>=pOp->p2+n )
a890: 3b 0a 20 20 70 41 72 67 20 3d 20 26 61 4d 65 6d  ;.  pArg = &aMem
a8a0: 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 66 6f 72  [pOp->p2];.  for
a8b0: 28 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b 2b 2c 20  (i=0; i<n; i++, 
a8c0: 70 41 72 67 2b 2b 29 7b 0a 20 20 20 20 61 73 73  pArg++){.    ass
a8d0: 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
a8e0: 70 41 72 67 29 20 29 3b 0a 20 20 20 20 61 70 56  pArg) );.    apV
a8f0: 61 6c 5b 69 5d 20 3d 20 70 41 72 67 3b 0a 20 20  al[i] = pArg;.  
a900: 20 20 44 65 65 70 68 65 6d 65 72 61 6c 69 7a 65    Deephemeralize
a910: 28 70 41 72 67 29 3b 0a 20 20 20 20 73 71 6c 69  (pArg);.    sqli
a920: 74 65 33 56 64 62 65 4d 65 6d 53 74 6f 72 65 54  te3VdbeMemStoreT
a930: 79 70 65 28 70 41 72 67 29 3b 0a 20 20 20 20 52  ype(pArg);.    R
a940: 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
a950: 70 2d 3e 70 32 2b 69 2c 20 70 41 72 67 29 3b 0a  p->p2+i, pArg);.
a960: 20 20 7d 0a 0a 20 20 61 73 73 65 72 74 28 20 70    }..  assert( p
a970: 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 46  Op->p4type==P4_F
a980: 55 4e 43 44 45 46 20 7c 7c 20 70 4f 70 2d 3e 70  UNCDEF || pOp->p
a990: 34 74 79 70 65 3d 3d 50 34 5f 56 44 42 45 46 55  4type==P4_VDBEFU
a9a0: 4e 43 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d  NC );.  if( pOp-
a9b0: 3e 70 34 74 79 70 65 3d 3d 50 34 5f 46 55 4e 43  >p4type==P4_FUNC
a9c0: 44 45 46 20 29 7b 0a 20 20 20 20 63 74 78 2e 70  DEF ){.    ctx.p
a9d0: 46 75 6e 63 20 3d 20 70 4f 70 2d 3e 70 34 2e 70  Func = pOp->p4.p
a9e0: 46 75 6e 63 3b 0a 20 20 20 20 63 74 78 2e 70 56  Func;.    ctx.pV
a9f0: 64 62 65 46 75 6e 63 20 3d 20 30 3b 0a 20 20 7d  dbeFunc = 0;.  }
aa00: 65 6c 73 65 7b 0a 20 20 20 20 63 74 78 2e 70 56  else{.    ctx.pV
aa10: 64 62 65 46 75 6e 63 20 3d 20 28 56 64 62 65 46  dbeFunc = (VdbeF
aa20: 75 6e 63 2a 29 70 4f 70 2d 3e 70 34 2e 70 56 64  unc*)pOp->p4.pVd
aa30: 62 65 46 75 6e 63 3b 0a 20 20 20 20 63 74 78 2e  beFunc;.    ctx.
aa40: 70 46 75 6e 63 20 3d 20 63 74 78 2e 70 56 64 62  pFunc = ctx.pVdb
aa50: 65 46 75 6e 63 2d 3e 70 46 75 6e 63 3b 0a 20 20  eFunc->pFunc;.  
aa60: 7d 0a 0a 20 20 63 74 78 2e 73 2e 66 6c 61 67 73  }..  ctx.s.flags
aa70: 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 63   = MEM_Null;.  c
aa80: 74 78 2e 73 2e 64 62 20 3d 20 64 62 3b 0a 20 20  tx.s.db = db;.  
aa90: 63 74 78 2e 73 2e 78 44 65 6c 20 3d 20 30 3b 0a  ctx.s.xDel = 0;.
aaa0: 20 20 63 74 78 2e 73 2e 7a 4d 61 6c 6c 6f 63 20    ctx.s.zMalloc 
aab0: 3d 20 30 3b 0a 0a 20 20 2f 2a 20 54 68 65 20 6f  = 0;..  /* The o
aac0: 75 74 70 75 74 20 63 65 6c 6c 20 6d 61 79 20 61  utput cell may a
aad0: 6c 72 65 61 64 79 20 68 61 76 65 20 61 20 62 75  lready have a bu
aae0: 66 66 65 72 20 61 6c 6c 6f 63 61 74 65 64 2e 20  ffer allocated. 
aaf0: 4d 6f 76 65 0a 20 20 2a 2a 20 74 68 65 20 70 6f  Move.  ** the po
ab00: 69 6e 74 65 72 20 74 6f 20 63 74 78 2e 73 20 73  inter to ctx.s s
ab10: 6f 20 69 6e 20 63 61 73 65 20 74 68 65 20 75 73  o in case the us
ab20: 65 72 2d 66 75 6e 63 74 69 6f 6e 20 63 61 6e 20  er-function can 
ab30: 75 73 65 0a 20 20 2a 2a 20 74 68 65 20 61 6c 72  use.  ** the alr
ab40: 65 61 64 79 20 61 6c 6c 6f 63 61 74 65 64 20 62  eady allocated b
ab50: 75 66 66 65 72 20 69 6e 73 74 65 61 64 20 6f 66  uffer instead of
ab60: 20 61 6c 6c 6f 63 61 74 69 6e 67 20 61 20 6e 65   allocating a ne
ab70: 77 20 6f 6e 65 2e 0a 20 20 2a 2f 0a 20 20 73 71  w one..  */.  sq
ab80: 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65  lite3VdbeMemMove
ab90: 28 26 63 74 78 2e 73 2c 20 70 4f 75 74 29 3b 0a  (&ctx.s, pOut);.
aba0: 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
abb0: 28 26 63 74 78 2e 73 2c 20 4d 45 4d 5f 4e 75 6c  (&ctx.s, MEM_Nul
abc0: 6c 29 3b 0a 0a 20 20 63 74 78 2e 69 73 45 72 72  l);..  ctx.isErr
abd0: 6f 72 20 3d 20 30 3b 0a 20 20 69 66 28 20 63 74  or = 0;.  if( ct
abe0: 78 2e 70 46 75 6e 63 2d 3e 66 6c 61 67 73 20 26  x.pFunc->flags &
abf0: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45   SQLITE_FUNC_NEE
ac00: 44 43 4f 4c 4c 20 29 7b 0a 20 20 20 20 61 73 73  DCOLL ){.    ass
ac10: 65 72 74 28 20 70 4f 70 3e 61 4f 70 20 29 3b 0a  ert( pOp>aOp );.
ac20: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b      assert( pOp[
ac30: 2d 31 5d 2e 70 34 74 79 70 65 3d 3d 50 34 5f 43  -1].p4type==P4_C
ac40: 4f 4c 4c 53 45 51 20 29 3b 0a 20 20 20 20 61 73  OLLSEQ );.    as
ac50: 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 6f 70  sert( pOp[-1].op
ac60: 63 6f 64 65 3d 3d 4f 50 5f 43 6f 6c 6c 53 65 71  code==OP_CollSeq
ac70: 20 29 3b 0a 20 20 20 20 63 74 78 2e 70 43 6f 6c   );.    ctx.pCol
ac80: 6c 20 3d 20 70 4f 70 5b 2d 31 5d 2e 70 34 2e 70  l = pOp[-1].p4.p
ac90: 43 6f 6c 6c 3b 0a 20 20 7d 0a 20 20 28 2a 63 74  Coll;.  }.  (*ct
aca0: 78 2e 70 46 75 6e 63 2d 3e 78 46 75 6e 63 29 28  x.pFunc->xFunc)(
acb0: 26 63 74 78 2c 20 6e 2c 20 61 70 56 61 6c 29 3b  &ctx, n, apVal);
acc0: 20 2f 2a 20 49 4d 50 3a 20 52 2d 32 34 35 30 35   /* IMP: R-24505
acd0: 2d 32 33 32 33 30 20 2a 2f 0a 20 20 69 66 28 20  -23230 */.  if( 
ace0: 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64  db->mallocFailed
acf0: 20 29 7b 0a 20 20 20 20 2f 2a 20 45 76 65 6e 20   ){.    /* Even 
ad00: 74 68 6f 75 67 68 20 61 20 6d 61 6c 6c 6f 63 28  though a malloc(
ad10: 29 20 68 61 73 20 66 61 69 6c 65 64 2c 20 74 68  ) has failed, th
ad20: 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
ad30: 20 6f 66 20 74 68 65 0a 20 20 20 20 2a 2a 20 75   of the.    ** u
ad40: 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 6d 61 79  ser function may
ad50: 20 68 61 76 65 20 63 61 6c 6c 65 64 20 61 6e 20   have called an 
ad60: 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 58  sqlite3_result_X
ad70: 58 58 28 29 20 66 75 6e 63 74 69 6f 6e 0a 20 20  XX() function.  
ad80: 20 20 2a 2a 20 74 6f 20 72 65 74 75 72 6e 20 61    ** to return a
ad90: 20 76 61 6c 75 65 2e 20 54 68 65 20 66 6f 6c 6c   value. The foll
ada0: 6f 77 69 6e 67 20 63 61 6c 6c 20 72 65 6c 65 61  owing call relea
adb0: 73 65 73 20 61 6e 79 20 72 65 73 6f 75 72 63 65  ses any resource
adc0: 73 0a 20 20 20 20 2a 2a 20 61 73 73 6f 63 69 61  s.    ** associa
add0: 74 65 64 20 77 69 74 68 20 73 75 63 68 20 61 20  ted with such a 
ade0: 76 61 6c 75 65 2e 0a 20 20 20 20 2a 2f 0a 20 20  value..    */.  
adf0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
ae00: 52 65 6c 65 61 73 65 28 26 63 74 78 2e 73 29 3b  Release(&ctx.s);
ae10: 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  .    goto no_mem
ae20: 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20 61  ;.  }..  /* If a
ae30: 6e 79 20 61 75 78 69 6c 69 61 72 79 20 64 61 74  ny auxiliary dat
ae40: 61 20 66 75 6e 63 74 69 6f 6e 73 20 68 61 76 65  a functions have
ae50: 20 62 65 65 6e 20 63 61 6c 6c 65 64 20 62 79 20   been called by 
ae60: 74 68 69 73 20 75 73 65 72 20 66 75 6e 63 74 69  this user functi
ae70: 6f 6e 2c 0a 20 20 2a 2a 20 69 6d 6d 65 64 69 61  on,.  ** immedia
ae80: 74 65 6c 79 20 63 61 6c 6c 20 74 68 65 20 64 65  tely call the de
ae90: 73 74 72 75 63 74 6f 72 20 66 6f 72 20 61 6e 79  structor for any
aea0: 20 6e 6f 6e 2d 73 74 61 74 69 63 20 76 61 6c 75   non-static valu
aeb0: 65 73 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 63  es..  */.  if( c
aec0: 74 78 2e 70 56 64 62 65 46 75 6e 63 20 29 7b 0a  tx.pVdbeFunc ){.
aed0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 44      sqlite3VdbeD
aee0: 65 6c 65 74 65 41 75 78 44 61 74 61 28 63 74 78  eleteAuxData(ctx
aef0: 2e 70 56 64 62 65 46 75 6e 63 2c 20 70 4f 70 2d  .pVdbeFunc, pOp-
af00: 3e 70 31 29 3b 0a 20 20 20 20 70 4f 70 2d 3e 70  >p1);.    pOp->p
af10: 34 2e 70 56 64 62 65 46 75 6e 63 20 3d 20 63 74  4.pVdbeFunc = ct
af20: 78 2e 70 56 64 62 65 46 75 6e 63 3b 0a 20 20 20  x.pVdbeFunc;.   
af30: 20 70 4f 70 2d 3e 70 34 74 79 70 65 20 3d 20 50   pOp->p4type = P
af40: 34 5f 56 44 42 45 46 55 4e 43 3b 0a 20 20 7d 0a  4_VDBEFUNC;.  }.
af50: 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 66 75 6e  .  /* If the fun
af60: 63 74 69 6f 6e 20 72 65 74 75 72 6e 65 64 20 61  ction returned a
af70: 6e 20 65 72 72 6f 72 2c 20 74 68 72 6f 77 20 61  n error, throw a
af80: 6e 20 65 78 63 65 70 74 69 6f 6e 20 2a 2f 0a 20  n exception */. 
af90: 20 69 66 28 20 63 74 78 2e 69 73 45 72 72 6f 72   if( ctx.isError
afa0: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 53   ){.    sqlite3S
afb0: 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72  etString(&p->zEr
afc0: 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 22 2c 20  rMsg, db, "%s", 
afd0: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65  sqlite3_value_te
afe0: 78 74 28 26 63 74 78 2e 73 29 29 3b 0a 20 20 20  xt(&ctx.s));.   
aff0: 20 72 63 20 3d 20 63 74 78 2e 69 73 45 72 72 6f   rc = ctx.isErro
b000: 72 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 43 6f 70  r;.  }..  /* Cop
b010: 79 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20  y the result of 
b020: 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 69 6e 74  the function int
b030: 6f 20 72 65 67 69 73 74 65 72 20 50 33 20 2a 2f  o register P3 */
b040: 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68  .  sqlite3VdbeCh
b050: 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 26 63 74  angeEncoding(&ct
b060: 78 2e 73 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a  x.s, encoding);.
b070: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
b080: 4d 6f 76 65 28 70 4f 75 74 2c 20 26 63 74 78 2e  Move(pOut, &ctx.
b090: 73 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65  s);.  if( sqlite
b0a0: 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28 70  3VdbeMemTooBig(p
b0b0: 4f 75 74 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f  Out) ){.    goto
b0c0: 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20   too_big;.  }.  
b0d0: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
b0e0: 4f 70 2d 3e 70 33 2c 20 70 4f 75 74 29 3b 0a 20  Op->p3, pOut);. 
b0f0: 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42   UPDATE_MAX_BLOB
b100: 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72  SIZE(pOut);.  br
b110: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
b120: 65 3a 20 42 69 74 41 6e 64 20 50 31 20 50 32 20  e: BitAnd P1 P2 
b130: 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 61 6b  P3 * *.**.** Tak
b140: 65 20 74 68 65 20 62 69 74 2d 77 69 73 65 20 41  e the bit-wise A
b150: 4e 44 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73  ND of the values
b160: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
b170: 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20 73 74  and P2 and.** st
b180: 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69  ore the result i
b190: 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  n register P3..*
b1a0: 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75  * If either inpu
b1b0: 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72  t is NULL, the r
b1c0: 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a  esult is NULL..*
b1d0: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 69 74  /./* Opcode: Bit
b1e0: 4f 72 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  Or P1 P2 P3 * *.
b1f0: 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20 62  **.** Take the b
b200: 69 74 2d 77 69 73 65 20 4f 52 20 6f 66 20 74 68  it-wise OR of th
b210: 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69  e values in regi
b220: 73 74 65 72 20 50 31 20 61 6e 64 20 50 32 20 61  ster P1 and P2 a
b230: 6e 64 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65 20  nd.** store the 
b240: 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74  result in regist
b250: 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74  er P3..** If eit
b260: 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c  her input is NUL
b270: 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  L, the result is
b280: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63   NULL..*/./* Opc
b290: 6f 64 65 3a 20 53 68 69 66 74 4c 65 66 74 20 50  ode: ShiftLeft P
b2a0: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
b2b0: 2a 20 53 68 69 66 74 20 74 68 65 20 69 6e 74 65  * Shift the inte
b2c0: 67 65 72 20 76 61 6c 75 65 20 69 6e 20 72 65 67  ger value in reg
b2d0: 69 73 74 65 72 20 50 32 20 74 6f 20 74 68 65 20  ister P2 to the 
b2e0: 6c 65 66 74 20 62 79 20 74 68 65 0a 2a 2a 20 6e  left by the.** n
b2f0: 75 6d 62 65 72 20 6f 66 20 62 69 74 73 20 73 70  umber of bits sp
b300: 65 63 69 66 69 65 64 20 62 79 20 74 68 65 20 69  ecified by the i
b310: 6e 74 65 67 65 72 20 69 6e 20 72 65 67 69 73 74  nteger in regist
b320: 65 72 20 50 31 2e 0a 2a 2a 20 53 74 6f 72 65 20  er P1..** Store 
b330: 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65  the result in re
b340: 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66  gister P3..** If
b350: 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73   either input is
b360: 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c   NULL, the resul
b370: 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a  t is NULL..*/./*
b380: 20 4f 70 63 6f 64 65 3a 20 53 68 69 66 74 52 69   Opcode: ShiftRi
b390: 67 68 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a  ght P1 P2 P3 * *
b3a0: 0a 2a 2a 0a 2a 2a 20 53 68 69 66 74 20 74 68 65  .**.** Shift the
b3b0: 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69   integer value i
b3c0: 6e 20 72 65 67 69 73 74 65 72 20 50 32 20 74 6f  n register P2 to
b3d0: 20 74 68 65 20 72 69 67 68 74 20 62 79 20 74 68   the right by th
b3e0: 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 62  e.** number of b
b3f0: 69 74 73 20 73 70 65 63 69 66 69 65 64 20 62 79  its specified by
b400: 20 74 68 65 20 69 6e 74 65 67 65 72 20 69 6e 20   the integer in 
b410: 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 20  register P1..** 
b420: 53 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74  Store the result
b430: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e   in register P3.
b440: 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e  .** If either in
b450: 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65  put is NULL, the
b460: 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e   result is NULL.
b470: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 69 74 41  .*/.case OP_BitA
b480: 6e 64 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  nd:             
b490: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
b4a0: 4b 5f 42 49 54 41 4e 44 2c 20 69 6e 31 2c 20 69  K_BITAND, in1, i
b4b0: 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65  n2, out3 */.case
b4c0: 20 4f 50 5f 42 69 74 4f 72 3a 20 20 20 20 20 20   OP_BitOr:      
b4d0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
b4e0: 61 6d 65 20 61 73 20 54 4b 5f 42 49 54 4f 52 2c  ame as TK_BITOR,
b4f0: 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20   in1, in2, out3 
b500: 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 68 69 66 74  */.case OP_Shift
b510: 4c 65 66 74 3a 20 20 20 20 20 20 20 20 20 20 20  Left:           
b520: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
b530: 5f 4c 53 48 49 46 54 2c 20 69 6e 31 2c 20 69 6e  _LSHIFT, in1, in
b540: 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20  2, out3 */.case 
b550: 4f 50 5f 53 68 69 66 74 52 69 67 68 74 3a 20 7b  OP_ShiftRight: {
b560: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
b570: 6d 65 20 61 73 20 54 4b 5f 52 53 48 49 46 54 2c  me as TK_RSHIFT,
b580: 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20   in1, in2, out3 
b590: 2a 2f 0a 20 20 69 36 34 20 69 41 3b 0a 20 20 75  */.  i64 iA;.  u
b5a0: 36 34 20 75 41 3b 0a 20 20 69 36 34 20 69 42 3b  64 uA;.  i64 iB;
b5b0: 0a 20 20 75 38 20 6f 70 3b 0a 0a 20 20 70 49 6e  .  u8 op;..  pIn
b5c0: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
b5d0: 31 5d 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d  1];.  pIn2 = &aM
b5e0: 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70  em[pOp->p2];.  p
b5f0: 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
b600: 3e 70 33 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e  >p3];.  if( (pIn
b610: 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49 6e 32 2d  1->flags | pIn2-
b620: 3e 66 6c 61 67 73 29 20 26 20 4d 45 4d 5f 4e 75  >flags) & MEM_Nu
b630: 6c 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  ll ){.    sqlite
b640: 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28  3VdbeMemSetNull(
b650: 70 4f 75 74 29 3b 0a 20 20 20 20 62 72 65 61 6b  pOut);.    break
b660: 3b 0a 20 20 7d 0a 20 20 69 41 20 3d 20 73 71 6c  ;.  }.  iA = sql
b670: 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65  ite3VdbeIntValue
b680: 28 70 49 6e 32 29 3b 0a 20 20 69 42 20 3d 20 73  (pIn2);.  iB = s
b690: 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c  qlite3VdbeIntVal
b6a0: 75 65 28 70 49 6e 31 29 3b 0a 20 20 6f 70 20 3d  ue(pIn1);.  op =
b6b0: 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a 20 20   pOp->opcode;.  
b6c0: 69 66 28 20 6f 70 3d 3d 4f 50 5f 42 69 74 41 6e  if( op==OP_BitAn
b6d0: 64 20 29 7b 0a 20 20 20 20 69 41 20 26 3d 20 69  d ){.    iA &= i
b6e0: 42 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 6f  B;.  }else if( o
b6f0: 70 3d 3d 4f 50 5f 42 69 74 4f 72 20 29 7b 0a 20  p==OP_BitOr ){. 
b700: 20 20 20 69 41 20 7c 3d 20 69 42 3b 0a 20 20 7d     iA |= iB;.  }
b710: 65 6c 73 65 20 69 66 28 20 69 42 21 3d 30 20 29  else if( iB!=0 )
b720: 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6f 70  {.    assert( op
b730: 3d 3d 4f 50 5f 53 68 69 66 74 52 69 67 68 74 20  ==OP_ShiftRight 
b740: 7c 7c 20 6f 70 3d 3d 4f 50 5f 53 68 69 66 74 4c  || op==OP_ShiftL
b750: 65 66 74 20 29 3b 0a 0a 20 20 20 20 2f 2a 20 49  eft );..    /* I
b760: 66 20 73 68 69 66 74 69 6e 67 20 62 79 20 61 20  f shifting by a 
b770: 6e 65 67 61 74 69 76 65 20 61 6d 6f 75 6e 74 2c  negative amount,
b780: 20 73 68 69 66 74 20 69 6e 20 74 68 65 20 6f 74   shift in the ot
b790: 68 65 72 20 64 69 72 65 63 74 69 6f 6e 20 2a 2f  her direction */
b7a0: 0a 20 20 20 20 69 66 28 20 69 42 3c 30 20 29 7b  .    if( iB<0 ){
b7b0: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 4f  .      assert( O
b7c0: 50 5f 53 68 69 66 74 52 69 67 68 74 3d 3d 4f 50  P_ShiftRight==OP
b7d0: 5f 53 68 69 66 74 4c 65 66 74 2b 31 20 29 3b 0a  _ShiftLeft+1 );.
b7e0: 20 20 20 20 20 20 6f 70 20 3d 20 32 2a 4f 50 5f        op = 2*OP_
b7f0: 53 68 69 66 74 4c 65 66 74 20 2b 20 31 20 2d 20  ShiftLeft + 1 - 
b800: 6f 70 3b 0a 20 20 20 20 20 20 69 42 20 3d 20 69  op;.      iB = i
b810: 42 3e 28 2d 36 34 29 20 3f 20 2d 69 42 20 3a 20  B>(-64) ? -iB : 
b820: 36 34 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69  64;.    }..    i
b830: 66 28 20 69 42 3e 3d 36 34 20 29 7b 0a 20 20 20  f( iB>=64 ){.   
b840: 20 20 20 69 41 20 3d 20 28 69 41 3e 3d 30 20 7c     iA = (iA>=0 |
b850: 7c 20 6f 70 3d 3d 4f 50 5f 53 68 69 66 74 4c 65  | op==OP_ShiftLe
b860: 66 74 29 20 3f 20 30 20 3a 20 2d 31 3b 0a 20 20  ft) ? 0 : -1;.  
b870: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 6d    }else{.      m
b880: 65 6d 63 70 79 28 26 75 41 2c 20 26 69 41 2c 20  emcpy(&uA, &iA, 
b890: 73 69 7a 65 6f 66 28 75 41 29 29 3b 0a 20 20 20  sizeof(uA));.   
b8a0: 20 20 20 69 66 28 20 6f 70 3d 3d 4f 50 5f 53 68     if( op==OP_Sh
b8b0: 69 66 74 4c 65 66 74 20 29 7b 0a 20 20 20 20 20  iftLeft ){.     
b8c0: 20 20 20 75 41 20 3c 3c 3d 20 69 42 3b 0a 20 20     uA <<= iB;.  
b8d0: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
b8e0: 20 20 20 75 41 20 3e 3e 3d 20 69 42 3b 0a 20 20     uA >>= iB;.  
b8f0: 20 20 20 20 20 20 2f 2a 20 53 69 67 6e 2d 65 78        /* Sign-ex
b900: 74 65 6e 64 20 6f 6e 20 61 20 72 69 67 68 74 20  tend on a right 
b910: 73 68 69 66 74 20 6f 66 20 61 20 6e 65 67 61 74  shift of a negat
b920: 69 76 65 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20  ive number */.  
b930: 20 20 20 20 20 20 69 66 28 20 69 41 3c 30 20 29        if( iA<0 )
b940: 20 75 41 20 7c 3d 20 28 28 28 28 75 36 34 29 30   uA |= ((((u64)0
b950: 78 66 66 66 66 66 66 66 66 29 3c 3c 33 32 29 7c  xffffffff)<<32)|
b960: 30 78 66 66 66 66 66 66 66 66 29 20 3c 3c 20 28  0xffffffff) << (
b970: 36 34 2d 69 42 29 3b 0a 20 20 20 20 20 20 7d 0a  64-iB);.      }.
b980: 20 20 20 20 20 20 6d 65 6d 63 70 79 28 26 69 41        memcpy(&iA
b990: 2c 20 26 75 41 2c 20 73 69 7a 65 6f 66 28 69 41  , &uA, sizeof(iA
b9a0: 29 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  ));.    }.  }.  
b9b0: 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 41 3b 0a  pOut->u.i = iA;.
b9c0: 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
b9d0: 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b  (pOut, MEM_Int);
b9e0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
b9f0: 4f 70 63 6f 64 65 3a 20 41 64 64 49 6d 6d 20 20  Opcode: AddImm  
ba00: 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 0a  P1 P2 * * *.** .
ba10: 2a 2a 20 41 64 64 20 74 68 65 20 63 6f 6e 73 74  ** Add the const
ba20: 61 6e 74 20 50 32 20 74 6f 20 74 68 65 20 76 61  ant P2 to the va
ba30: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
ba40: 50 31 2e 0a 2a 2a 20 54 68 65 20 72 65 73 75 6c  P1..** The resul
ba50: 74 20 69 73 20 61 6c 77 61 79 73 20 61 6e 20 69  t is always an i
ba60: 6e 74 65 67 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 6f  nteger..**.** To
ba70: 20 66 6f 72 63 65 20 61 6e 79 20 72 65 67 69 73   force any regis
ba80: 74 65 72 20 74 6f 20 62 65 20 61 6e 20 69 6e 74  ter to be an int
ba90: 65 67 65 72 2c 20 6a 75 73 74 20 61 64 64 20 30  eger, just add 0
baa0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 64 64  ..*/.case OP_Add
bab0: 49 6d 6d 3a 20 7b 20 20 20 20 20 20 20 20 20 20  Imm: {          
bac0: 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 70 49    /* in1 */.  pI
bad0: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
bae0: 70 31 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54  p1];.  memAboutT
baf0: 6f 43 68 61 6e 67 65 28 70 2c 20 70 49 6e 31 29  oChange(p, pIn1)
bb00: 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
bb10: 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e  emIntegerify(pIn
bb20: 31 29 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 20  1);.  pIn1->u.i 
bb30: 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 62 72  += pOp->p2;.  br
bb40: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
bb50: 65 3a 20 4d 75 73 74 42 65 49 6e 74 20 50 31 20  e: MustBeInt P1 
bb60: 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 0a 2a 2a 20  P2 * * *.** .** 
bb70: 46 6f 72 63 65 20 74 68 65 20 76 61 6c 75 65 20  Force the value 
bb80: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 74  in register P1 t
bb90: 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72 2e  o be an integer.
bba0: 20 20 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a    If the value.*
bbb0: 2a 20 69 6e 20 50 31 20 69 73 20 6e 6f 74 20 61  * in P1 is not a
bbc0: 6e 20 69 6e 74 65 67 65 72 20 61 6e 64 20 63 61  n integer and ca
bbd0: 6e 6e 6f 74 20 62 65 20 63 6f 6e 76 65 72 74 65  nnot be converte
bbe0: 64 20 69 6e 74 6f 20 61 6e 20 69 6e 74 65 67 65  d into an intege
bbf0: 72 0a 2a 2a 20 77 69 74 68 6f 75 74 20 64 61 74  r.** without dat
bc00: 61 20 6c 6f 73 73 2c 20 74 68 65 6e 20 6a 75 6d  a loss, then jum
bc10: 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f  p immediately to
bc20: 20 50 32 2c 20 6f 72 20 69 66 20 50 32 3d 3d 30   P2, or if P2==0
bc30: 0a 2a 2a 20 72 61 69 73 65 20 61 6e 20 53 51 4c  .** raise an SQL
bc40: 49 54 45 5f 4d 49 53 4d 41 54 43 48 20 65 78 63  ITE_MISMATCH exc
bc50: 65 70 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20  eption..*/.case 
bc60: 4f 50 5f 4d 75 73 74 42 65 49 6e 74 3a 20 7b 20  OP_MustBeInt: { 
bc70: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75             /* ju
bc80: 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e  mp, in1 */.  pIn
bc90: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
bca0: 31 5d 3b 0a 20 20 61 70 70 6c 79 41 66 66 69 6e  1];.  applyAffin
bcb0: 69 74 79 28 70 49 6e 31 2c 20 53 51 4c 49 54 45  ity(pIn1, SQLITE
bcc0: 5f 41 46 46 5f 4e 55 4d 45 52 49 43 2c 20 65 6e  _AFF_NUMERIC, en
bcd0: 63 6f 64 69 6e 67 29 3b 0a 20 20 69 66 28 20 28  coding);.  if( (
bce0: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
bcf0: 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20  M_Int)==0 ){.   
bd00: 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 30 20   if( pOp->p2==0 
bd10: 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51  ){.      rc = SQ
bd20: 4c 49 54 45 5f 4d 49 53 4d 41 54 43 48 3b 0a 20  LITE_MISMATCH;. 
bd30: 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
bd40: 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
bd50: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 70    }else{.      p
bd60: 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
bd70: 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a  .    }.  }else{.
bd80: 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c      MemSetTypeFl
bd90: 61 67 28 70 49 6e 31 2c 20 4d 45 4d 5f 49 6e 74  ag(pIn1, MEM_Int
bda0: 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
bdb0: 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  }..#ifndef SQLIT
bdc0: 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f  E_OMIT_FLOATING_
bdd0: 50 4f 49 4e 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a  POINT./* Opcode:
bde0: 20 52 65 61 6c 41 66 66 69 6e 69 74 79 20 50 31   RealAffinity P1
bdf0: 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49   * * * *.**.** I
be00: 66 20 72 65 67 69 73 74 65 72 20 50 31 20 68 6f  f register P1 ho
be10: 6c 64 73 20 61 6e 20 69 6e 74 65 67 65 72 20 63  lds an integer c
be20: 6f 6e 76 65 72 74 20 69 74 20 74 6f 20 61 20 72  onvert it to a r
be30: 65 61 6c 20 76 61 6c 75 65 2e 0a 2a 2a 0a 2a 2a  eal value..**.**
be40: 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20   This opcode is 
be50: 75 73 65 64 20 77 68 65 6e 20 65 78 74 72 61 63  used when extrac
be60: 74 69 6e 67 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  ting information
be70: 20 66 72 6f 6d 20 61 20 63 6f 6c 75 6d 6e 20 74   from a column t
be80: 68 61 74 0a 2a 2a 20 68 61 73 20 52 45 41 4c 20  hat.** has REAL 
be90: 61 66 66 69 6e 69 74 79 2e 20 20 53 75 63 68 20  affinity.  Such 
bea0: 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 73 20 6d 61  column values ma
beb0: 79 20 73 74 69 6c 6c 20 62 65 20 73 74 6f 72 65  y still be store
bec0: 64 20 61 73 0a 2a 2a 20 69 6e 74 65 67 65 72 73  d as.** integers
bed0: 2c 20 66 6f 72 20 73 70 61 63 65 20 65 66 66 69  , for space effi
bee0: 63 69 65 6e 63 79 2c 20 62 75 74 20 61 66 74 65  ciency, but afte
bef0: 72 20 65 78 74 72 61 63 74 69 6f 6e 20 77 65 20  r extraction we 
bf00: 77 61 6e 74 20 74 68 65 6d 0a 2a 2a 20 74 6f 20  want them.** to 
bf10: 68 61 76 65 20 6f 6e 6c 79 20 61 20 72 65 61 6c  have only a real
bf20: 20 76 61 6c 75 65 2e 0a 2a 2f 0a 63 61 73 65 20   value..*/.case 
bf30: 4f 50 5f 52 65 61 6c 41 66 66 69 6e 69 74 79 3a  OP_RealAffinity:
bf40: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
bf50: 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20      /* in1 */.  
bf60: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
bf70: 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70 49 6e  ->p1];.  if( pIn
bf80: 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  1->flags & MEM_I
bf90: 6e 74 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  nt ){.    sqlite
bfa0: 33 56 64 62 65 4d 65 6d 52 65 61 6c 69 66 79 28  3VdbeMemRealify(
bfb0: 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65  pIn1);.  }.  bre
bfc0: 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69  ak;.}.#endif..#i
bfd0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
bfe0: 54 5f 43 41 53 54 0a 2f 2a 20 4f 70 63 6f 64 65  T_CAST./* Opcode
bff0: 3a 20 54 6f 54 65 78 74 20 50 31 20 2a 20 2a 20  : ToText P1 * * 
c000: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20  * *.**.** Force 
c010: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
c020: 69 73 74 65 72 20 50 31 20 74 6f 20 62 65 20 74  ister P1 to be t
c030: 65 78 74 2e 0a 2a 2a 20 49 66 20 74 68 65 20 76  ext..** If the v
c040: 61 6c 75 65 20 69 73 20 6e 75 6d 65 72 69 63 2c  alue is numeric,
c050: 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f 20 61   convert it to a
c060: 20 73 74 72 69 6e 67 20 75 73 69 6e 67 20 74 68   string using th
c070: 65 0a 2a 2a 20 65 71 75 69 76 61 6c 65 6e 74 20  e.** equivalent 
c080: 6f 66 20 70 72 69 6e 74 66 28 29 2e 20 20 42 6c  of printf().  Bl
c090: 6f 62 20 76 61 6c 75 65 73 20 61 72 65 20 75 6e  ob values are un
c0a0: 63 68 61 6e 67 65 64 20 61 6e 64 0a 2a 2a 20 61  changed and.** a
c0b0: 72 65 20 61 66 74 65 72 77 61 72 64 73 20 73 69  re afterwards si
c0c0: 6d 70 6c 79 20 69 6e 74 65 72 70 72 65 74 65 64  mply interpreted
c0d0: 20 61 73 20 74 65 78 74 2e 0a 2a 2a 0a 2a 2a 20   as text..**.** 
c0e0: 41 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69 73 20  A NULL value is 
c0f0: 6e 6f 74 20 63 68 61 6e 67 65 64 20 62 79 20 74  not changed by t
c100: 68 69 73 20 72 6f 75 74 69 6e 65 2e 20 20 49 74  his routine.  It
c110: 20 72 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a   remains NULL..*
c120: 2f 0a 63 61 73 65 20 4f 50 5f 54 6f 54 65 78 74  /.case OP_ToText
c130: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
c140: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
c150: 54 4b 5f 54 4f 5f 54 45 58 54 2c 20 69 6e 31 20  TK_TO_TEXT, in1 
c160: 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
c170: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 6d 65  m[pOp->p1];.  me
c180: 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
c190: 2c 20 70 49 6e 31 29 3b 0a 20 20 69 66 28 20 70  , pIn1);.  if( p
c1a0: 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
c1b0: 5f 4e 75 6c 6c 20 29 20 62 72 65 61 6b 3b 0a 20  _Null ) break;. 
c1c0: 20 61 73 73 65 72 74 28 20 4d 45 4d 5f 53 74 72   assert( MEM_Str
c1d0: 3d 3d 28 4d 45 4d 5f 42 6c 6f 62 3e 3e 33 29 20  ==(MEM_Blob>>3) 
c1e0: 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73  );.  pIn1->flags
c1f0: 20 7c 3d 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73   |= (pIn1->flags
c200: 26 4d 45 4d 5f 42 6c 6f 62 29 3e 3e 33 3b 0a 20  &MEM_Blob)>>3;. 
c210: 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70   applyAffinity(p
c220: 49 6e 31 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f  In1, SQLITE_AFF_
c230: 54 45 58 54 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  TEXT, encoding);
c240: 0a 20 20 72 63 20 3d 20 45 78 70 61 6e 64 42 6c  .  rc = ExpandBl
c250: 6f 62 28 70 49 6e 31 29 3b 0a 20 20 61 73 73 65  ob(pIn1);.  asse
c260: 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20  rt( pIn1->flags 
c270: 26 20 4d 45 4d 5f 53 74 72 20 7c 7c 20 64 62 2d  & MEM_Str || db-
c280: 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 3b  >mallocFailed );
c290: 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  .  pIn1->flags &
c2a0: 3d 20 7e 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f  = ~(MEM_Int|MEM_
c2b0: 52 65 61 6c 7c 4d 45 4d 5f 42 6c 6f 62 7c 4d 45  Real|MEM_Blob|ME
c2c0: 4d 5f 5a 65 72 6f 29 3b 0a 20 20 55 50 44 41 54  M_Zero);.  UPDAT
c2d0: 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70  E_MAX_BLOBSIZE(p
c2e0: 49 6e 31 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  In1);.  break;.}
c2f0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 6f 42  ../* Opcode: ToB
c300: 6c 6f 62 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a  lob P1 * * * *.*
c310: 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65 20 76  *.** Force the v
c320: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
c330: 20 50 31 20 74 6f 20 62 65 20 61 20 42 4c 4f 42   P1 to be a BLOB
c340: 2e 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75  ..** If the valu
c350: 65 20 69 73 20 6e 75 6d 65 72 69 63 2c 20 63 6f  e is numeric, co
c360: 6e 76 65 72 74 20 69 74 20 74 6f 20 61 20 73 74  nvert it to a st
c370: 72 69 6e 67 20 66 69 72 73 74 2e 0a 2a 2a 20 53  ring first..** S
c380: 74 72 69 6e 67 73 20 61 72 65 20 73 69 6d 70 6c  trings are simpl
c390: 79 20 72 65 69 6e 74 65 72 70 72 65 74 65 64 20  y reinterpreted 
c3a0: 61 73 20 62 6c 6f 62 73 20 77 69 74 68 20 6e 6f  as blobs with no
c3b0: 20 63 68 61 6e 67 65 0a 2a 2a 20 74 6f 20 74 68   change.** to th
c3c0: 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 64 61 74  e underlying dat
c3d0: 61 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20  a..**.** A NULL 
c3e0: 76 61 6c 75 65 20 69 73 20 6e 6f 74 20 63 68 61  value is not cha
c3f0: 6e 67 65 64 20 62 79 20 74 68 69 73 20 72 6f 75  nged by this rou
c400: 74 69 6e 65 2e 20 20 49 74 20 72 65 6d 61 69 6e  tine.  It remain
c410: 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20  s NULL..*/.case 
c420: 4f 50 5f 54 6f 42 6c 6f 62 3a 20 7b 20 20 20 20  OP_ToBlob: {    
c430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
c440: 20 73 61 6d 65 20 61 73 20 54 4b 5f 54 4f 5f 42   same as TK_TO_B
c450: 4c 4f 42 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49  LOB, in1 */.  pI
c460: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
c470: 70 31 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d  p1];.  if( pIn1-
c480: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
c490: 6c 20 29 20 62 72 65 61 6b 3b 0a 20 20 69 66 28  l ) break;.  if(
c4a0: 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
c4b0: 4d 45 4d 5f 42 6c 6f 62 29 3d 3d 30 20 29 7b 0a  MEM_Blob)==0 ){.
c4c0: 20 20 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74      applyAffinit
c4d0: 79 28 70 49 6e 31 2c 20 53 51 4c 49 54 45 5f 41  y(pIn1, SQLITE_A
c4e0: 46 46 5f 54 45 58 54 2c 20 65 6e 63 6f 64 69 6e  FF_TEXT, encodin
c4f0: 67 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  g);.    assert( 
c500: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
c510: 4d 5f 53 74 72 20 7c 7c 20 64 62 2d 3e 6d 61 6c  M_Str || db->mal
c520: 6c 6f 63 46 61 69 6c 65 64 20 29 3b 0a 20 20 20  locFailed );.   
c530: 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
c540: 70 49 6e 31 2c 20 4d 45 4d 5f 42 6c 6f 62 29 3b  pIn1, MEM_Blob);
c550: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 49  .  }else{.    pI
c560: 6e 31 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 28 4d  n1->flags &= ~(M
c570: 45 4d 5f 54 79 70 65 4d 61 73 6b 26 7e 4d 45 4d  EM_TypeMask&~MEM
c580: 5f 42 6c 6f 62 29 3b 0a 20 20 7d 0a 20 20 55 50  _Blob);.  }.  UP
c590: 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
c5a0: 45 28 70 49 6e 31 29 3b 0a 20 20 62 72 65 61 6b  E(pIn1);.  break
c5b0: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
c5c0: 54 6f 4e 75 6d 65 72 69 63 20 50 31 20 2a 20 2a  ToNumeric P1 * *
c5d0: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65   * *.**.** Force
c5e0: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
c5f0: 67 69 73 74 65 72 20 50 31 20 74 6f 20 62 65 20  gister P1 to be 
c600: 6e 75 6d 65 72 69 63 20 28 65 69 74 68 65 72 20  numeric (either 
c610: 61 6e 0a 2a 2a 20 69 6e 74 65 67 65 72 20 6f 72  an.** integer or
c620: 20 61 20 66 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e   a floating-poin
c630: 74 20 6e 75 6d 62 65 72 2e 29 0a 2a 2a 20 49 66  t number.).** If
c640: 20 74 68 65 20 76 61 6c 75 65 20 69 73 20 74 65   the value is te
c650: 78 74 20 6f 72 20 62 6c 6f 62 2c 20 74 72 79 20  xt or blob, try 
c660: 74 6f 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f  to convert it to
c670: 20 61 6e 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a   an using the.**
c680: 20 65 71 75 69 76 61 6c 65 6e 74 20 6f 66 20 61   equivalent of a
c690: 74 6f 69 28 29 20 6f 72 20 61 74 6f 66 28 29 20  toi() or atof() 
c6a0: 61 6e 64 20 73 74 6f 72 65 20 30 20 69 66 20 6e  and store 0 if n
c6b0: 6f 20 73 75 63 68 20 63 6f 6e 76 65 72 73 69 6f  o such conversio
c6c0: 6e 20 0a 2a 2a 20 69 73 20 70 6f 73 73 69 62 6c  n .** is possibl
c6d0: 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20  e..**.** A NULL 
c6e0: 76 61 6c 75 65 20 69 73 20 6e 6f 74 20 63 68 61  value is not cha
c6f0: 6e 67 65 64 20 62 79 20 74 68 69 73 20 72 6f 75  nged by this rou
c700: 74 69 6e 65 2e 20 20 49 74 20 72 65 6d 61 69 6e  tine.  It remain
c710: 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20  s NULL..*/.case 
c720: 4f 50 5f 54 6f 4e 75 6d 65 72 69 63 3a 20 7b 20  OP_ToNumeric: { 
c730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c740: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 54   /* same as TK_T
c750: 4f 5f 4e 55 4d 45 52 49 43 2c 20 69 6e 31 20 2a  O_NUMERIC, in1 *
c760: 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
c770: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 73 71 6c  [pOp->p1];.  sql
c780: 69 74 65 33 56 64 62 65 4d 65 6d 4e 75 6d 65 72  ite3VdbeMemNumer
c790: 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 62 72 65  ify(pIn1);.  bre
c7a0: 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ak;.}.#endif /* 
c7b0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 41 53 54  SQLITE_OMIT_CAST
c7c0: 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20   */../* Opcode: 
c7d0: 54 6f 49 6e 74 20 50 31 20 2a 20 2a 20 2a 20 2a  ToInt P1 * * * *
c7e0: 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65  .**.** Force the
c7f0: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
c800: 65 72 20 50 31 20 74 6f 20 62 65 20 61 6e 20 69  er P1 to be an i
c810: 6e 74 65 67 65 72 2e 20 20 49 66 0a 2a 2a 20 54  nteger.  If.** T
c820: 68 65 20 76 61 6c 75 65 20 69 73 20 63 75 72 72  he value is curr
c830: 65 6e 74 6c 79 20 61 20 72 65 61 6c 20 6e 75 6d  ently a real num
c840: 62 65 72 2c 20 64 72 6f 70 20 69 74 73 20 66 72  ber, drop its fr
c850: 61 63 74 69 6f 6e 61 6c 20 70 61 72 74 2e 0a 2a  actional part..*
c860: 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 69  * If the value i
c870: 73 20 74 65 78 74 20 6f 72 20 62 6c 6f 62 2c 20  s text or blob, 
c880: 74 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20 69  try to convert i
c890: 74 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20  t to an integer 
c8a0: 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 65 71 75  using the.** equ
c8b0: 69 76 61 6c 65 6e 74 20 6f 66 20 61 74 6f 69 28  ivalent of atoi(
c8c0: 29 20 61 6e 64 20 73 74 6f 72 65 20 30 20 69 66  ) and store 0 if
c8d0: 20 6e 6f 20 73 75 63 68 20 63 6f 6e 76 65 72 73   no such convers
c8e0: 69 6f 6e 20 69 73 20 70 6f 73 73 69 62 6c 65 2e  ion is possible.
c8f0: 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76 61  .**.** A NULL va
c900: 6c 75 65 20 69 73 20 6e 6f 74 20 63 68 61 6e 67  lue is not chang
c910: 65 64 20 62 79 20 74 68 69 73 20 72 6f 75 74 69  ed by this routi
c920: 6e 65 2e 20 20 49 74 20 72 65 6d 61 69 6e 73 20  ne.  It remains 
c930: 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  NULL..*/.case OP
c940: 5f 54 6f 49 6e 74 3a 20 7b 20 20 20 20 20 20 20  _ToInt: {       
c950: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
c960: 6d 65 20 61 73 20 54 4b 5f 54 4f 5f 49 4e 54 2c  me as TK_TO_INT,
c970: 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d   in1 */.  pIn1 =
c980: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
c990: 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c  .  if( (pIn1->fl
c9a0: 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d  ags & MEM_Null)=
c9b0: 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  =0 ){.    sqlite
c9c0: 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69  3VdbeMemIntegeri
c9d0: 66 79 28 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20  fy(pIn1);.  }.  
c9e0: 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 20 21 64  break;.}..#if !d
c9f0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
ca00: 49 54 5f 43 41 53 54 29 20 26 26 20 21 64 65 66  IT_CAST) && !def
ca10: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
ca20: 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 29  _FLOATING_POINT)
ca30: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 6f 52 65  ./* Opcode: ToRe
ca40: 61 6c 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a  al P1 * * * *.**
ca50: 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65 20 76 61  .** Force the va
ca60: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
ca70: 50 31 20 74 6f 20 62 65 20 61 20 66 6c 6f 61 74  P1 to be a float
ca80: 69 6e 67 20 70 6f 69 6e 74 20 6e 75 6d 62 65 72  ing point number
ca90: 2e 0a 2a 2a 20 49 66 20 54 68 65 20 76 61 6c 75  ..** If The valu
caa0: 65 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 61  e is currently a
cab0: 6e 20 69 6e 74 65 67 65 72 2c 20 63 6f 6e 76 65  n integer, conve
cac0: 72 74 20 69 74 2e 0a 2a 2a 20 49 66 20 74 68 65  rt it..** If the
cad0: 20 76 61 6c 75 65 20 69 73 20 74 65 78 74 20 6f   value is text o
cae0: 72 20 62 6c 6f 62 2c 20 74 72 79 20 74 6f 20 63  r blob, try to c
caf0: 6f 6e 76 65 72 74 20 69 74 20 74 6f 20 61 6e 20  onvert it to an 
cb00: 69 6e 74 65 67 65 72 20 75 73 69 6e 67 20 74 68  integer using th
cb10: 65 0a 2a 2a 20 65 71 75 69 76 61 6c 65 6e 74 20  e.** equivalent 
cb20: 6f 66 20 61 74 6f 69 28 29 20 61 6e 64 20 73 74  of atoi() and st
cb30: 6f 72 65 20 30 2e 30 20 69 66 20 6e 6f 20 73 75  ore 0.0 if no su
cb40: 63 68 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69 73  ch conversion is
cb50: 20 70 6f 73 73 69 62 6c 65 2e 0a 2a 2a 0a 2a 2a   possible..**.**
cb60: 20 41 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69 73   A NULL value is
cb70: 20 6e 6f 74 20 63 68 61 6e 67 65 64 20 62 79 20   not changed by 
cb80: 74 68 69 73 20 72 6f 75 74 69 6e 65 2e 20 20 49  this routine.  I
cb90: 74 20 72 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a  t remains NULL..
cba0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 6f 52 65 61  */.case OP_ToRea
cbb0: 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  l: {            
cbc0: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
cbd0: 20 54 4b 5f 54 4f 5f 52 45 41 4c 2c 20 69 6e 31   TK_TO_REAL, in1
cbe0: 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   */.  pIn1 = &aM
cbf0: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 6d  em[pOp->p1];.  m
cc00: 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
cc10: 70 2c 20 70 49 6e 31 29 3b 0a 20 20 69 66 28 20  p, pIn1);.  if( 
cc20: 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn1->flags & M
cc30: 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20  EM_Null)==0 ){. 
cc40: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
cc50: 6d 52 65 61 6c 69 66 79 28 70 49 6e 31 29 3b 0a  mRealify(pIn1);.
cc60: 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23    }.  break;.}.#
cc70: 65 6e 64 69 66 20 2f 2a 20 21 64 65 66 69 6e 65  endif /* !define
cc80: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 41  d(SQLITE_OMIT_CA
cc90: 53 54 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  ST) && !defined(
cca0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41  SQLITE_OMIT_FLOA
ccb0: 54 49 4e 47 5f 50 4f 49 4e 54 29 20 2a 2f 0a 0a  TING_POINT) */..
ccc0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 74 20 50 31  /* Opcode: Lt P1
ccd0: 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a   P2 P3 P4 P5.**.
cce0: 2a 2a 20 43 6f 6d 70 61 72 65 20 74 68 65 20 76  ** Compare the v
ccf0: 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74 65  alues in registe
cd00: 72 20 50 31 20 61 6e 64 20 50 33 2e 20 20 49 66  r P1 and P3.  If
cd10: 20 72 65 67 28 50 33 29 3c 72 65 67 28 50 31 29   reg(P3)<reg(P1)
cd20: 20 74 68 65 6e 0a 2a 2a 20 6a 75 6d 70 20 74 6f   then.** jump to
cd30: 20 61 64 64 72 65 73 73 20 50 32 2e 20 20 0a 2a   address P2.  .*
cd40: 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53 51 4c 49  *.** If the SQLI
cd50: 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 62 69  TE_JUMPIFNULL bi
cd60: 74 20 6f 66 20 50 35 20 69 73 20 73 65 74 20 61  t of P5 is set a
cd70: 6e 64 20 65 69 74 68 65 72 20 72 65 67 28 50 31  nd either reg(P1
cd80: 29 20 6f 72 0a 2a 2a 20 72 65 67 28 50 33 29 20  ) or.** reg(P3) 
cd90: 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 61 6b  is NULL then tak
cda0: 65 20 74 68 65 20 6a 75 6d 70 2e 20 20 49 66 20  e the jump.  If 
cdb0: 74 68 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49  the SQLITE_JUMPI
cdc0: 46 4e 55 4c 4c 20 0a 2a 2a 20 62 69 74 20 69 73  FNULL .** bit is
cdd0: 20 63 6c 65 61 72 20 74 68 65 6e 20 66 61 6c 6c   clear then fall
cde0: 20 74 68 72 6f 75 67 68 20 69 66 20 65 69 74 68   through if eith
cdf0: 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55  er operand is NU
ce00: 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 53 51  LL..**.** The SQ
ce10: 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 70 6f  LITE_AFF_MASK po
ce20: 72 74 69 6f 6e 20 6f 66 20 50 35 20 6d 75 73 74  rtion of P5 must
ce30: 20 62 65 20 61 6e 20 61 66 66 69 6e 69 74 79 20   be an affinity 
ce40: 63 68 61 72 61 63 74 65 72 20 2d 0a 2a 2a 20 53  character -.** S
ce50: 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 2c 20  QLITE_AFF_TEXT, 
ce60: 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47  SQLITE_AFF_INTEG
ce70: 45 52 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68  ER, and so forth
ce80: 2e 20 41 6e 20 61 74 74 65 6d 70 74 20 69 73 20  . An attempt is 
ce90: 6d 61 64 65 20 0a 2a 2a 20 74 6f 20 63 6f 65 72  made .** to coer
cea0: 63 65 20 62 6f 74 68 20 69 6e 70 75 74 73 20 61  ce both inputs a
ceb0: 63 63 6f 72 64 69 6e 67 20 74 6f 20 74 68 69 73  ccording to this
cec0: 20 61 66 66 69 6e 69 74 79 20 62 65 66 6f 72 65   affinity before
ced0: 20 74 68 65 0a 2a 2a 20 63 6f 6d 70 61 72 69 73   the.** comparis
cee0: 6f 6e 20 69 73 20 6d 61 64 65 2e 20 49 66 20 74  on is made. If t
cef0: 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41  he SQLITE_AFF_MA
cf00: 53 4b 20 69 73 20 30 78 30 30 2c 20 74 68 65 6e  SK is 0x00, then
cf10: 20 6e 75 6d 65 72 69 63 0a 2a 2a 20 61 66 66 69   numeric.** affi
cf20: 6e 69 74 79 20 69 73 20 75 73 65 64 2e 20 4e 6f  nity is used. No
cf30: 74 65 20 74 68 61 74 20 74 68 65 20 61 66 66 69  te that the affi
cf40: 6e 69 74 79 20 63 6f 6e 76 65 72 73 69 6f 6e 73  nity conversions
cf50: 20 61 72 65 20 73 74 6f 72 65 64 0a 2a 2a 20 62   are stored.** b
cf60: 61 63 6b 20 69 6e 74 6f 20 74 68 65 20 69 6e 70  ack into the inp
cf70: 75 74 20 72 65 67 69 73 74 65 72 73 20 50 31 20  ut registers P1 
cf80: 61 6e 64 20 50 33 2e 20 20 53 6f 20 74 68 69 73  and P3.  So this
cf90: 20 6f 70 63 6f 64 65 20 63 61 6e 20 63 61 75 73   opcode can caus
cfa0: 65 0a 2a 2a 20 70 65 72 73 69 73 74 65 6e 74 20  e.** persistent 
cfb0: 63 68 61 6e 67 65 73 20 74 6f 20 72 65 67 69 73  changes to regis
cfc0: 74 65 72 73 20 50 31 20 61 6e 64 20 50 33 2e 0a  ters P1 and P3..
cfd0: 2a 2a 0a 2a 2a 20 4f 6e 63 65 20 61 6e 79 20 63  **.** Once any c
cfe0: 6f 6e 76 65 72 73 69 6f 6e 73 20 68 61 76 65 20  onversions have 
cff0: 74 61 6b 65 6e 20 70 6c 61 63 65 2c 20 61 6e 64  taken place, and
d000: 20 6e 65 69 74 68 65 72 20 76 61 6c 75 65 20 69   neither value i
d010: 73 20 4e 55 4c 4c 2c 20 0a 2a 2a 20 74 68 65 20  s NULL, .** the 
d020: 76 61 6c 75 65 73 20 61 72 65 20 63 6f 6d 70 61  values are compa
d030: 72 65 64 2e 20 49 66 20 62 6f 74 68 20 76 61 6c  red. If both val
d040: 75 65 73 20 61 72 65 20 62 6c 6f 62 73 20 74 68  ues are blobs th
d050: 65 6e 20 6d 65 6d 63 6d 70 28 29 20 69 73 0a 2a  en memcmp() is.*
d060: 2a 20 75 73 65 64 20 74 6f 20 64 65 74 65 72 6d  * used to determ
d070: 69 6e 65 20 74 68 65 20 72 65 73 75 6c 74 73 20  ine the results 
d080: 6f 66 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f  of the compariso
d090: 6e 2e 20 20 49 66 20 62 6f 74 68 20 76 61 6c 75  n.  If both valu
d0a0: 65 73 0a 2a 2a 20 61 72 65 20 74 65 78 74 2c 20  es.** are text, 
d0b0: 74 68 65 6e 20 74 68 65 20 61 70 70 72 6f 70 72  then the appropr
d0c0: 69 61 74 65 20 63 6f 6c 6c 61 74 69 6e 67 20 66  iate collating f
d0d0: 75 6e 63 74 69 6f 6e 20 73 70 65 63 69 66 69 65  unction specifie
d0e0: 64 20 69 6e 0a 2a 2a 20 50 34 20 69 73 20 20 75  d in.** P4 is  u
d0f0: 73 65 64 20 74 6f 20 64 6f 20 74 68 65 20 63 6f  sed to do the co
d100: 6d 70 61 72 69 73 6f 6e 2e 20 20 49 66 20 50 34  mparison.  If P4
d110: 20 69 73 20 6e 6f 74 20 73 70 65 63 69 66 69 65   is not specifie
d120: 64 20 74 68 65 6e 0a 2a 2a 20 6d 65 6d 63 6d 70  d then.** memcmp
d130: 28 29 20 69 73 20 75 73 65 64 20 74 6f 20 63 6f  () is used to co
d140: 6d 70 61 72 65 20 74 65 78 74 20 73 74 72 69 6e  mpare text strin
d150: 67 2e 20 20 49 66 20 62 6f 74 68 20 76 61 6c 75  g.  If both valu
d160: 65 73 20 61 72 65 0a 2a 2a 20 6e 75 6d 65 72 69  es are.** numeri
d170: 63 2c 20 74 68 65 6e 20 61 20 6e 75 6d 65 72 69  c, then a numeri
d180: 63 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20  c comparison is 
d190: 75 73 65 64 2e 20 49 66 20 74 68 65 20 74 77 6f  used. If the two
d1a0: 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72 65 20 6f   values.** are o
d1b0: 66 20 64 69 66 66 65 72 65 6e 74 20 74 79 70 65  f different type
d1c0: 73 2c 20 74 68 65 6e 20 6e 75 6d 62 65 72 73 20  s, then numbers 
d1d0: 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20 6c  are considered l
d1e0: 65 73 73 20 74 68 61 6e 0a 2a 2a 20 73 74 72 69  ess than.** stri
d1f0: 6e 67 73 20 61 6e 64 20 73 74 72 69 6e 67 73 20  ngs and strings 
d200: 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20 6c  are considered l
d210: 65 73 73 20 74 68 61 6e 20 62 6c 6f 62 73 2e 0a  ess than blobs..
d220: 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53 51 4c  **.** If the SQL
d230: 49 54 45 5f 53 54 4f 52 45 50 32 20 62 69 74 20  ITE_STOREP2 bit 
d240: 6f 66 20 50 35 20 69 73 20 73 65 74 2c 20 74 68  of P5 is set, th
d250: 65 6e 20 64 6f 20 6e 6f 74 20 6a 75 6d 70 2e 20  en do not jump. 
d260: 20 49 6e 73 74 65 61 64 2c 0a 2a 2a 20 73 74 6f   Instead,.** sto
d270: 72 65 20 61 20 62 6f 6f 6c 65 61 6e 20 72 65 73  re a boolean res
d280: 75 6c 74 20 28 65 69 74 68 65 72 20 30 2c 20 6f  ult (either 0, o
d290: 72 20 31 2c 20 6f 72 20 4e 55 4c 4c 29 20 69 6e  r 1, or NULL) in
d2a0: 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f   register P2..*/
d2b0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 20 50  ./* Opcode: Ne P
d2c0: 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
d2d0: 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a  .** This works j
d2e0: 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20  ust like the Lt 
d2f0: 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20 74 68  opcode except th
d300: 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74  at the jump is t
d310: 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 6f  aken if.** the o
d320: 70 65 72 61 6e 64 73 20 69 6e 20 72 65 67 69 73  perands in regis
d330: 74 65 72 73 20 50 31 20 61 6e 64 20 50 33 20 61  ters P1 and P3 a
d340: 72 65 20 6e 6f 74 20 65 71 75 61 6c 2e 20 20 53  re not equal.  S
d350: 65 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65  ee the Lt opcode
d360: 20 66 6f 72 0a 2a 2a 20 61 64 64 69 74 69 6f 6e   for.** addition
d370: 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a  al information..
d380: 2a 2a 0a 2a 2a 20 49 66 20 53 51 4c 49 54 45 5f  **.** If SQLITE_
d390: 4e 55 4c 4c 45 51 20 69 73 20 73 65 74 20 69 6e  NULLEQ is set in
d3a0: 20 50 35 20 74 68 65 6e 20 74 68 65 20 72 65 73   P5 then the res
d3b0: 75 6c 74 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f  ult of compariso
d3c0: 6e 20 69 73 20 61 6c 77 61 79 73 20 65 69 74 68  n is always eith
d3d0: 65 72 0a 2a 2a 20 74 72 75 65 20 6f 72 20 66 61  er.** true or fa
d3e0: 6c 73 65 20 61 6e 64 20 69 73 20 6e 65 76 65 72  lse and is never
d3f0: 20 4e 55 4c 4c 2e 20 20 49 66 20 62 6f 74 68 20   NULL.  If both 
d400: 6f 70 65 72 61 6e 64 73 20 61 72 65 20 4e 55 4c  operands are NUL
d410: 4c 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c  L then the resul
d420: 74 0a 2a 2a 20 6f 66 20 63 6f 6d 70 61 72 69 73  t.** of comparis
d430: 6f 6e 20 69 73 20 66 61 6c 73 65 2e 20 20 49 66  on is false.  If
d440: 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20   either operand 
d450: 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65  is NULL then the
d460: 20 72 65 73 75 6c 74 20 69 73 20 74 72 75 65 2e   result is true.
d470: 0a 2a 2a 20 49 66 20 6e 65 69 74 68 65 72 20 6f  .** If neither o
d480: 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20 74  perand is NULL t
d490: 68 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  he the result is
d4a0: 20 74 68 65 20 73 61 6d 65 20 61 73 20 69 74 20   the same as it 
d4b0: 77 6f 75 6c 64 20 62 65 20 69 66 0a 2a 2a 20 74  would be if.** t
d4c0: 68 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51  he SQLITE_NULLEQ
d4d0: 20 66 6c 61 67 20 77 65 72 65 20 6f 6d 69 74 74   flag were omitt
d4e0: 65 64 20 66 72 6f 6d 20 50 35 2e 0a 2a 2f 0a 2f  ed from P5..*/./
d4f0: 2a 20 4f 70 63 6f 64 65 3a 20 45 71 20 50 31 20  * Opcode: Eq P1 
d500: 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a  P2 P3 P4 P5.**.*
d510: 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73  * This works jus
d520: 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70  t like the Lt op
d530: 63 6f 64 65 20 65 78 63 65 70 74 20 74 68 61 74  code except that
d540: 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b   the jump is tak
d550: 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 6f 70 65  en if.** the ope
d560: 72 61 6e 64 73 20 69 6e 20 72 65 67 69 73 74 65  rands in registe
d570: 72 73 20 50 31 20 61 6e 64 20 50 33 20 61 72 65  rs P1 and P3 are
d580: 20 65 71 75 61 6c 2e 0a 2a 2a 20 53 65 65 20 74   equal..** See t
d590: 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72  he Lt opcode for
d5a0: 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
d5b0: 72 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49  rmation..**.** I
d5c0: 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20  f SQLITE_NULLEQ 
d5d0: 69 73 20 73 65 74 20 69 6e 20 50 35 20 74 68 65  is set in P5 the
d5e0: 6e 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20  n the result of 
d5f0: 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 61 6c  comparison is al
d600: 77 61 79 73 20 65 69 74 68 65 72 0a 2a 2a 20 74  ways either.** t
d610: 72 75 65 20 6f 72 20 66 61 6c 73 65 20 61 6e 64  rue or false and
d620: 20 69 73 20 6e 65 76 65 72 20 4e 55 4c 4c 2e 20   is never NULL. 
d630: 20 49 66 20 62 6f 74 68 20 6f 70 65 72 61 6e 64   If both operand
d640: 73 20 61 72 65 20 4e 55 4c 4c 20 74 68 65 6e 20  s are NULL then 
d650: 74 68 65 20 72 65 73 75 6c 74 0a 2a 2a 20 6f 66  the result.** of
d660: 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 74   comparison is t
d670: 72 75 65 2e 20 20 49 66 20 65 69 74 68 65 72 20  rue.  If either 
d680: 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20  operand is NULL 
d690: 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20  then the result 
d6a0: 69 73 20 66 61 6c 73 65 2e 0a 2a 2a 20 49 66 20  is false..** If 
d6b0: 6e 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20  neither operand 
d6c0: 69 73 20 4e 55 4c 4c 20 74 68 65 20 74 68 65 20  is NULL the the 
d6d0: 72 65 73 75 6c 74 20 69 73 20 74 68 65 20 73 61  result is the sa
d6e0: 6d 65 20 61 73 20 69 74 20 77 6f 75 6c 64 20 62  me as it would b
d6f0: 65 20 69 66 0a 2a 2a 20 74 68 65 20 53 51 4c 49  e if.** the SQLI
d700: 54 45 5f 4e 55 4c 4c 45 51 20 66 6c 61 67 20 77  TE_NULLEQ flag w
d710: 65 72 65 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d  ere omitted from
d720: 20 50 35 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64   P5..*/./* Opcod
d730: 65 3a 20 4c 65 20 50 31 20 50 32 20 50 33 20 50  e: Le P1 P2 P3 P
d740: 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  4 P5.**.** This 
d750: 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20  works just like 
d760: 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78  the Lt opcode ex
d770: 63 65 70 74 20 74 68 61 74 20 74 68 65 20 6a 75  cept that the ju
d780: 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a  mp is taken if.*
d790: 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  * the content of
d7a0: 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20   register P3 is 
d7b0: 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75  less than or equ
d7c0: 61 6c 20 74 6f 20 74 68 65 20 63 6f 6e 74 65 6e  al to the conten
d7d0: 74 20 6f 66 0a 2a 2a 20 72 65 67 69 73 74 65 72  t of.** register
d7e0: 20 50 31 2e 20 20 53 65 65 20 74 68 65 20 4c 74   P1.  See the Lt
d7f0: 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64 64 69   opcode for addi
d800: 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69  tional informati
d810: 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  on..*/./* Opcode
d820: 3a 20 47 74 20 50 31 20 50 32 20 50 33 20 50 34  : Gt P1 P2 P3 P4
d830: 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77   P5.**.** This w
d840: 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 74  orks just like t
d850: 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78 63  he Lt opcode exc
d860: 65 70 74 20 74 68 61 74 20 74 68 65 20 6a 75 6d  ept that the jum
d870: 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a  p is taken if.**
d880: 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
d890: 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20 67  register P3 is g
d8a0: 72 65 61 74 65 72 20 74 68 61 6e 20 74 68 65 20  reater than the 
d8b0: 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 72 65  content of.** re
d8c0: 67 69 73 74 65 72 20 50 31 2e 20 20 53 65 65 20  gister P1.  See 
d8d0: 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f  the Lt opcode fo
d8e0: 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66  r additional inf
d8f0: 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20  ormation..*/./* 
d900: 4f 70 63 6f 64 65 3a 20 47 65 20 50 31 20 50 32  Opcode: Ge P1 P2
d910: 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20   P3 P4 P5.**.** 
d920: 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20  This works just 
d930: 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f  like the Lt opco
d940: 64 65 20 65 78 63 65 70 74 20 74 68 61 74 20 74  de except that t
d950: 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e  he jump is taken
d960: 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65   if.** the conte
d970: 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  nt of register P
d980: 33 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61  3 is greater tha
d990: 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68  n or equal to th
d9a0: 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20  e content of.** 
d9b0: 72 65 67 69 73 74 65 72 20 50 31 2e 20 20 53 65  register P1.  Se
d9c0: 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20  e the Lt opcode 
d9d0: 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69  for additional i
d9e0: 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 63  nformation..*/.c
d9f0: 61 73 65 20 4f 50 5f 45 71 3a 20 20 20 20 20 20  ase OP_Eq:      
da00: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
da10: 20 61 73 20 54 4b 5f 45 51 2c 20 6a 75 6d 70 2c   as TK_EQ, jump,
da20: 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73   in1, in3 */.cas
da30: 65 20 4f 50 5f 4e 65 3a 20 20 20 20 20 20 20 20  e OP_Ne:        
da40: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
da50: 73 20 54 4b 5f 4e 45 2c 20 6a 75 6d 70 2c 20 69  s TK_NE, jump, i
da60: 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20  n1, in3 */.case 
da70: 4f 50 5f 4c 74 3a 20 20 20 20 20 20 20 20 20 20  OP_Lt:          
da80: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
da90: 54 4b 5f 4c 54 2c 20 6a 75 6d 70 2c 20 69 6e 31  TK_LT, jump, in1
daa0: 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50  , in3 */.case OP
dab0: 5f 4c 65 3a 20 20 20 20 20 20 20 20 20 20 20 20  _Le:            
dac0: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
dad0: 5f 4c 45 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20  _LE, jump, in1, 
dae0: 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 47  in3 */.case OP_G
daf0: 74 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t:              
db00: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 47   /* same as TK_G
db10: 54 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e  T, jump, in1, in
db20: 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 65 3a  3 */.case OP_Ge:
db30: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f   {             /
db40: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 47 45 2c  * same as TK_GE,
db50: 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20   jump, in1, in3 
db60: 2a 2f 0a 20 20 69 6e 74 20 72 65 73 3b 20 20 20  */.  int res;   
db70: 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75           /* Resu
db80: 6c 74 20 6f 66 20 74 68 65 20 63 6f 6d 70 61 72  lt of the compar
db90: 69 73 6f 6e 20 6f 66 20 70 49 6e 31 20 61 67 61  ison of pIn1 aga
dba0: 69 6e 73 74 20 70 49 6e 33 20 2a 2f 0a 20 20 63  inst pIn3 */.  c
dbb0: 68 61 72 20 61 66 66 69 6e 69 74 79 3b 20 20 20  har affinity;   
dbc0: 20 20 20 2f 2a 20 41 66 66 69 6e 69 74 79 20 74     /* Affinity t
dbd0: 6f 20 75 73 65 20 66 6f 72 20 63 6f 6d 70 61 72  o use for compar
dbe0: 69 73 6f 6e 20 2a 2f 0a 20 20 75 31 36 20 66 6c  ison */.  u16 fl
dbf0: 61 67 73 31 3b 20 20 20 20 20 20 20 20 20 2f 2a  ags1;         /*
dc00: 20 43 6f 70 79 20 6f 66 20 69 6e 69 74 69 61 6c   Copy of initial
dc10: 20 76 61 6c 75 65 20 6f 66 20 70 49 6e 31 2d 3e   value of pIn1->
dc20: 66 6c 61 67 73 20 2a 2f 0a 20 20 75 31 36 20 66  flags */.  u16 f
dc30: 6c 61 67 73 33 3b 20 20 20 20 20 20 20 20 20 2f  lags3;         /
dc40: 2a 20 43 6f 70 79 20 6f 66 20 69 6e 69 74 69 61  * Copy of initia
dc50: 6c 20 76 61 6c 75 65 20 6f 66 20 70 49 6e 33 2d  l value of pIn3-
dc60: 3e 66 6c 61 67 73 20 2a 2f 0a 0a 20 20 70 49 6e  >flags */..  pIn
dc70: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
dc80: 31 5d 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d  1];.  pIn3 = &aM
dc90: 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 66  em[pOp->p3];.  f
dca0: 6c 61 67 73 31 20 3d 20 70 49 6e 31 2d 3e 66 6c  lags1 = pIn1->fl
dcb0: 61 67 73 3b 0a 20 20 66 6c 61 67 73 33 20 3d 20  ags;.  flags3 = 
dcc0: 70 49 6e 33 2d 3e 66 6c 61 67 73 3b 0a 20 20 69  pIn3->flags;.  i
dcd0: 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
dce0: 7c 20 70 49 6e 33 2d 3e 66 6c 61 67 73 29 26 4d  | pIn3->flags)&M
dcf0: 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 2f  EM_Null ){.    /
dd00: 2a 20 4f 6e 65 20 6f 72 20 62 6f 74 68 20 6f 70  * One or both op
dd10: 65 72 61 6e 64 73 20 61 72 65 20 4e 55 4c 4c 20  erands are NULL 
dd20: 2a 2f 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  */.    if( pOp->
dd30: 70 35 20 26 20 53 51 4c 49 54 45 5f 4e 55 4c 4c  p5 & SQLITE_NULL
dd40: 45 51 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49  EQ ){.      /* I
dd50: 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20  f SQLITE_NULLEQ 
dd60: 69 73 20 73 65 74 20 28 77 68 69 63 68 20 77 69  is set (which wi
dd70: 6c 6c 20 6f 6e 6c 79 20 68 61 70 70 65 6e 20 69  ll only happen i
dd80: 66 20 74 68 65 20 6f 70 65 72 61 74 6f 72 20 69  f the operator i
dd90: 73 0a 20 20 20 20 20 20 2a 2a 20 4f 50 5f 45 71  s.      ** OP_Eq
dda0: 20 6f 72 20 4f 50 5f 4e 65 29 20 74 68 65 6e 20   or OP_Ne) then 
ddb0: 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 20 6f 72  take the jump or
ddc0: 20 6e 6f 74 20 64 65 70 65 6e 64 69 6e 67 20 6f   not depending o
ddd0: 6e 20 77 68 65 74 68 65 72 0a 20 20 20 20 20 20  n whether.      
dde0: 2a 2a 20 6f 72 20 6e 6f 74 20 62 6f 74 68 20 6f  ** or not both o
ddf0: 70 65 72 61 6e 64 73 20 61 72 65 20 6e 75 6c 6c  perands are null
de00: 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
de10: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70   assert( pOp->op
de20: 63 6f 64 65 3d 3d 4f 50 5f 45 71 20 7c 7c 20 70  code==OP_Eq || p
de30: 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e  Op->opcode==OP_N
de40: 65 20 29 3b 0a 20 20 20 20 20 20 72 65 73 20 3d  e );.      res =
de50: 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
de60: 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn3->flags & ME
de70: 4d 5f 4e 75 6c 6c 29 3d 3d 30 3b 0a 20 20 20 20  M_Null)==0;.    
de80: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20  }else{.      /* 
de90: 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73  SQLITE_NULLEQ is
dea0: 20 63 6c 65 61 72 20 61 6e 64 20 61 74 20 6c 65   clear and at le
deb0: 61 73 74 20 6f 6e 65 20 6f 70 65 72 61 6e 64 20  ast one operand 
dec0: 69 73 20 4e 55 4c 4c 2c 0a 20 20 20 20 20 20 2a  is NULL,.      *
ded0: 2a 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c  * then the resul
dee0: 74 20 69 73 20 61 6c 77 61 79 73 20 4e 55 4c 4c  t is always NULL
def0: 2e 0a 20 20 20 20 20 20 2a 2a 20 54 68 65 20 6a  ..      ** The j
df00: 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 20  ump is taken if 
df10: 74 68 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49  the SQLITE_JUMPI
df20: 46 4e 55 4c 4c 20 62 69 74 20 69 73 20 73 65 74  FNULL bit is set
df30: 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
df40: 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 53   if( pOp->p5 & S
df50: 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 29 7b  QLITE_STOREP2 ){
df60: 0a 20 20 20 20 20 20 20 20 70 4f 75 74 20 3d 20  .        pOut = 
df70: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
df80: 20 20 20 20 20 20 20 20 4d 65 6d 53 65 74 54 79          MemSetTy
df90: 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d  peFlag(pOut, MEM
dfa0: 5f 4e 75 6c 6c 29 3b 0a 20 20 20 20 20 20 20 20  _Null);.        
dfb0: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
dfc0: 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20  Op->p2, pOut);. 
dfd0: 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 70       }else if( p
dfe0: 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f  Op->p5 & SQLITE_
dff0: 4a 55 4d 50 49 46 4e 55 4c 4c 20 29 7b 0a 20 20  JUMPIFNULL ){.  
e000: 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e        pc = pOp->
e010: 70 32 2d 31 3b 0a 20 20 20 20 20 20 7d 0a 20 20  p2-1;.      }.  
e020: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d      break;.    }
e030: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a  .  }else{.    /*
e040: 20 4e 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64   Neither operand
e050: 20 69 73 20 4e 55 4c 4c 2e 20 20 44 6f 20 61 20   is NULL.  Do a 
e060: 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 2a 2f 0a 20  comparison. */. 
e070: 20 20 20 61 66 66 69 6e 69 74 79 20 3d 20 70 4f     affinity = pO
e080: 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 41  p->p5 & SQLITE_A
e090: 46 46 5f 4d 41 53 4b 3b 0a 20 20 20 20 69 66 28  FF_MASK;.    if(
e0a0: 20 61 66 66 69 6e 69 74 79 20 29 7b 0a 20 20 20   affinity ){.   
e0b0: 20 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79     applyAffinity
e0c0: 28 70 49 6e 31 2c 20 61 66 66 69 6e 69 74 79 2c  (pIn1, affinity,
e0d0: 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20   encoding);.    
e0e0: 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28    applyAffinity(
e0f0: 70 49 6e 33 2c 20 61 66 66 69 6e 69 74 79 2c 20  pIn3, affinity, 
e100: 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 20  encoding);.     
e110: 20 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46   if( db->mallocF
e120: 61 69 6c 65 64 20 29 20 67 6f 74 6f 20 6e 6f 5f  ailed ) goto no_
e130: 6d 65 6d 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20  mem;.    }..    
e140: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
e150: 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51 20  ype==P4_COLLSEQ 
e160: 7c 7c 20 70 4f 70 2d 3e 70 34 2e 70 43 6f 6c 6c  || pOp->p4.pColl
e170: 3d 3d 30 20 29 3b 0a 20 20 20 20 45 78 70 61 6e  ==0 );.    Expan
e180: 64 42 6c 6f 62 28 70 49 6e 31 29 3b 0a 20 20 20  dBlob(pIn1);.   
e190: 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 33   ExpandBlob(pIn3
e1a0: 29 3b 0a 20 20 20 20 72 65 73 20 3d 20 73 71 6c  );.    res = sql
e1b0: 69 74 65 33 4d 65 6d 43 6f 6d 70 61 72 65 28 70  ite3MemCompare(p
e1c0: 49 6e 33 2c 20 70 49 6e 31 2c 20 70 4f 70 2d 3e  In3, pIn1, pOp->
e1d0: 70 34 2e 70 43 6f 6c 6c 29 3b 0a 20 20 7d 0a 20  p4.pColl);.  }. 
e1e0: 20 73 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70   switch( pOp->op
e1f0: 63 6f 64 65 20 29 7b 0a 20 20 20 20 63 61 73 65  code ){.    case
e200: 20 4f 50 5f 45 71 3a 20 20 20 20 72 65 73 20 3d   OP_Eq:    res =
e210: 20 72 65 73 3d 3d 30 3b 20 20 20 20 20 62 72 65   res==0;     bre
e220: 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f  ak;.    case OP_
e230: 4e 65 3a 20 20 20 20 72 65 73 20 3d 20 72 65 73  Ne:    res = res
e240: 21 3d 30 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a  !=0;     break;.
e250: 20 20 20 20 63 61 73 65 20 4f 50 5f 4c 74 3a 20      case OP_Lt: 
e260: 20 20 20 72 65 73 20 3d 20 72 65 73 3c 30 3b 20     res = res<0; 
e270: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
e280: 63 61 73 65 20 4f 50 5f 4c 65 3a 20 20 20 20 72  case OP_Le:    r
e290: 65 73 20 3d 20 72 65 73 3c 3d 30 3b 20 20 20 20  es = res<=0;    
e2a0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65   break;.    case
e2b0: 20 4f 50 5f 47 74 3a 20 20 20 20 72 65 73 20 3d   OP_Gt:    res =
e2c0: 20 72 65 73 3e 30 3b 20 20 20 20 20 20 62 72 65   res>0;      bre
e2d0: 61 6b 3b 0a 20 20 20 20 64 65 66 61 75 6c 74 3a  ak;.    default:
e2e0: 20 20 20 20 20 20 20 72 65 73 20 3d 20 72 65 73         res = res
e2f0: 3e 3d 30 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a  >=0;     break;.
e300: 20 20 7d 0a 0a 20 20 69 66 28 20 70 4f 70 2d 3e    }..  if( pOp->
e310: 70 35 20 26 20 53 51 4c 49 54 45 5f 53 54 4f 52  p5 & SQLITE_STOR
e320: 45 50 32 20 29 7b 0a 20 20 20 20 70 4f 75 74 20  EP2 ){.    pOut 
e330: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
e340: 3b 0a 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f  ;.    memAboutTo
e350: 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b  Change(p, pOut);
e360: 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46  .    MemSetTypeF
e370: 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e  lag(pOut, MEM_In
e380: 74 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e  t);.    pOut->u.
e390: 69 20 3d 20 72 65 73 3b 0a 20 20 20 20 52 45 47  i = res;.    REG
e3a0: 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
e3b0: 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20 20 7d 65  >p2, pOut);.  }e
e3c0: 6c 73 65 20 69 66 28 20 72 65 73 20 29 7b 0a 20  lse if( res ){. 
e3d0: 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d     pc = pOp->p2-
e3e0: 31 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 55 6e 64  1;.  }..  /* Und
e3f0: 6f 20 61 6e 79 20 63 68 61 6e 67 65 73 20 6d 61  o any changes ma
e400: 64 65 20 62 79 20 61 70 70 6c 79 41 66 66 69 6e  de by applyAffin
e410: 69 74 79 28 29 20 74 6f 20 74 68 65 20 69 6e 70  ity() to the inp
e420: 75 74 20 72 65 67 69 73 74 65 72 73 2e 20 2a 2f  ut registers. */
e430: 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d  .  pIn1->flags =
e440: 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 26 7e 4d   (pIn1->flags&~M
e450: 45 4d 5f 54 79 70 65 4d 61 73 6b 29 20 7c 20 28  EM_TypeMask) | (
e460: 66 6c 61 67 73 31 26 4d 45 4d 5f 54 79 70 65 4d  flags1&MEM_TypeM
e470: 61 73 6b 29 3b 0a 20 20 70 49 6e 33 2d 3e 66 6c  ask);.  pIn3->fl
e480: 61 67 73 20 3d 20 28 70 49 6e 33 2d 3e 66 6c 61  ags = (pIn3->fla
e490: 67 73 26 7e 4d 45 4d 5f 54 79 70 65 4d 61 73 6b  gs&~MEM_TypeMask
e4a0: 29 20 7c 20 28 66 6c 61 67 73 33 26 4d 45 4d 5f  ) | (flags3&MEM_
e4b0: 54 79 70 65 4d 61 73 6b 29 3b 0a 20 20 62 72 65  TypeMask);.  bre
e4c0: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
e4d0: 3a 20 50 65 72 6d 75 74 61 74 69 6f 6e 20 2a 20  : Permutation * 
e4e0: 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 53  * * P4 *.**.** S
e4f0: 65 74 20 74 68 65 20 70 65 72 6d 75 74 61 74 69  et the permutati
e500: 6f 6e 20 75 73 65 64 20 62 79 20 74 68 65 20 4f  on used by the O
e510: 50 5f 43 6f 6d 70 61 72 65 20 6f 70 65 72 61 74  P_Compare operat
e520: 6f 72 20 74 6f 20 62 65 20 74 68 65 20 61 72 72  or to be the arr
e530: 61 79 0a 2a 2a 20 6f 66 20 69 6e 74 65 67 65 72  ay.** of integer
e540: 73 20 69 6e 20 50 34 2e 0a 2a 2a 0a 2a 2a 20 54  s in P4..**.** T
e550: 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e 20 69  he permutation i
e560: 73 20 6f 6e 6c 79 20 76 61 6c 69 64 20 75 6e 74  s only valid unt
e570: 69 6c 20 74 68 65 20 6e 65 78 74 20 4f 50 5f 50  il the next OP_P
e580: 65 72 6d 75 74 61 74 69 6f 6e 2c 20 4f 50 5f 43  ermutation, OP_C
e590: 6f 6d 70 61 72 65 2c 0a 2a 2a 20 4f 50 5f 48 61  ompare,.** OP_Ha
e5a0: 6c 74 2c 20 6f 72 20 4f 50 5f 52 65 73 75 6c 74  lt, or OP_Result
e5b0: 52 6f 77 2e 20 20 54 79 70 69 63 61 6c 6c 79 20  Row.  Typically 
e5c0: 74 68 65 20 4f 50 5f 50 65 72 6d 75 74 61 74 69  the OP_Permutati
e5d0: 6f 6e 20 73 68 6f 75 6c 64 20 6f 63 63 75 72 0a  on should occur.
e5e0: 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 70  ** immediately p
e5f0: 72 69 6f 72 20 74 6f 20 74 68 65 20 4f 50 5f 43  rior to the OP_C
e600: 6f 6d 70 61 72 65 2e 0a 2a 2f 0a 63 61 73 65 20  ompare..*/.case 
e610: 4f 50 5f 50 65 72 6d 75 74 61 74 69 6f 6e 3a 20  OP_Permutation: 
e620: 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  {.  assert( pOp-
e630: 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 41  >p4type==P4_INTA
e640: 52 52 41 59 20 29 3b 0a 20 20 61 73 73 65 72 74  RRAY );.  assert
e650: 28 20 70 4f 70 2d 3e 70 34 2e 61 69 20 29 3b 0a  ( pOp->p4.ai );.
e660: 20 20 61 50 65 72 6d 75 74 65 20 3d 20 70 4f 70    aPermute = pOp
e670: 2d 3e 70 34 2e 61 69 3b 0a 20 20 62 72 65 61 6b  ->p4.ai;.  break
e680: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
e690: 43 6f 6d 70 61 72 65 20 50 31 20 50 32 20 50 33  Compare P1 P2 P3
e6a0: 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70   P4 *.**.** Comp
e6b0: 61 72 65 20 74 77 6f 20 76 65 63 74 6f 72 73 20  are two vectors 
e6c0: 6f 66 20 72 65 67 69 73 74 65 72 73 20 69 6e 20  of registers in 
e6d0: 72 65 67 28 50 31 29 2e 2e 72 65 67 28 50 31 2b  reg(P1)..reg(P1+
e6e0: 50 33 2d 31 29 20 28 63 61 6c 6c 20 74 68 69 73  P3-1) (call this
e6f0: 0a 2a 2a 20 76 65 63 74 6f 72 20 22 41 22 29 20  .** vector "A") 
e700: 61 6e 64 20 69 6e 20 72 65 67 28 50 32 29 2e 2e  and in reg(P2)..
e710: 72 65 67 28 50 32 2b 50 33 2d 31 29 20 28 22 42  reg(P2+P3-1) ("B
e720: 22 29 2e 20 20 53 61 76 65 20 74 68 65 20 72 65  ").  Save the re
e730: 73 75 6c 74 20 6f 66 0a 2a 2a 20 74 68 65 20 63  sult of.** the c
e740: 6f 6d 70 61 72 69 73 6f 6e 20 66 6f 72 20 75 73  omparison for us
e750: 65 20 62 79 20 74 68 65 20 6e 65 78 74 20 4f 50  e by the next OP
e760: 5f 4a 75 6d 70 20 69 6e 73 74 72 75 63 74 2e 0a  _Jump instruct..
e770: 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 4b 65  **.** P4 is a Ke
e780: 79 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65 20  yInfo structure 
e790: 74 68 61 74 20 64 65 66 69 6e 65 73 20 63 6f 6c  that defines col
e7a0: 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73  lating sequences
e7b0: 20 61 6e 64 20 73 6f 72 74 0a 2a 2a 20 6f 72 64   and sort.** ord
e7c0: 65 72 73 20 66 6f 72 20 74 68 65 20 63 6f 6d 70  ers for the comp
e7d0: 61 72 69 73 6f 6e 2e 20 20 54 68 65 20 70 65 72  arison.  The per
e7e0: 6d 75 74 61 74 69 6f 6e 20 61 70 70 6c 69 65 73  mutation applies
e7f0: 20 74 6f 20 72 65 67 69 73 74 65 72 73 0a 2a 2a   to registers.**
e800: 20 6f 6e 6c 79 2e 20 20 54 68 65 20 4b 65 79 49   only.  The KeyI
e810: 6e 66 6f 20 65 6c 65 6d 65 6e 74 73 20 61 72 65  nfo elements are
e820: 20 75 73 65 64 20 73 65 71 75 65 6e 74 69 61 6c   used sequential
e830: 6c 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f  ly..**.** The co
e840: 6d 70 61 72 69 73 6f 6e 20 69 73 20 61 20 73 6f  mparison is a so
e850: 72 74 20 63 6f 6d 70 61 72 69 73 6f 6e 2c 20 73  rt comparison, s
e860: 6f 20 4e 55 4c 4c 73 20 63 6f 6d 70 61 72 65 20  o NULLs compare 
e870: 65 71 75 61 6c 2c 0a 2a 2a 20 4e 55 4c 4c 73 20  equal,.** NULLs 
e880: 61 72 65 20 6c 65 73 73 20 74 68 61 6e 20 6e 75  are less than nu
e890: 6d 62 65 72 73 2c 20 6e 75 6d 62 65 72 73 20 61  mbers, numbers a
e8a0: 72 65 20 6c 65 73 73 20 74 68 61 6e 20 73 74 72  re less than str
e8b0: 69 6e 67 73 2c 0a 2a 2a 20 61 6e 64 20 73 74 72  ings,.** and str
e8c0: 69 6e 67 73 20 61 72 65 20 6c 65 73 73 20 74 68  ings are less th
e8d0: 61 6e 20 62 6c 6f 62 73 2e 0a 2a 2f 0a 63 61 73  an blobs..*/.cas
e8e0: 65 20 4f 50 5f 43 6f 6d 70 61 72 65 3a 20 7b 0a  e OP_Compare: {.
e8f0: 20 20 69 6e 74 20 6e 3b 0a 20 20 69 6e 74 20 69    int n;.  int i
e900: 3b 0a 20 20 69 6e 74 20 70 31 3b 0a 20 20 69 6e  ;.  int p1;.  in
e910: 74 20 70 32 3b 0a 20 20 63 6f 6e 73 74 20 4b 65  t p2;.  const Ke
e920: 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b  yInfo *pKeyInfo;
e930: 0a 20 20 69 6e 74 20 69 64 78 3b 0a 20 20 43 6f  .  int idx;.  Co
e940: 6c 6c 53 65 71 20 2a 70 43 6f 6c 6c 3b 20 20 20  llSeq *pColl;   
e950: 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65   /* Collating se
e960: 71 75 65 6e 63 65 20 74 6f 20 75 73 65 20 6f 6e  quence to use on
e970: 20 74 68 69 73 20 74 65 72 6d 20 2a 2f 0a 20 20   this term */.  
e980: 69 6e 74 20 62 52 65 76 3b 20 20 20 20 20 20 20  int bRev;       
e990: 20 20 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 44     /* True for D
e9a0: 45 53 43 45 4e 44 49 4e 47 20 73 6f 72 74 20 6f  ESCENDING sort o
e9b0: 72 64 65 72 20 2a 2f 0a 0a 20 20 6e 20 3d 20 70  rder */..  n = p
e9c0: 4f 70 2d 3e 70 33 3b 0a 20 20 70 4b 65 79 49 6e  Op->p3;.  pKeyIn
e9d0: 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65  fo = pOp->p4.pKe
e9e0: 79 49 6e 66 6f 3b 0a 20 20 61 73 73 65 72 74 28  yInfo;.  assert(
e9f0: 20 6e 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74   n>0 );.  assert
ea00: 28 20 70 4b 65 79 49 6e 66 6f 21 3d 30 20 29 3b  ( pKeyInfo!=0 );
ea10: 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b  .  p1 = pOp->p1;
ea20: 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b  .  p2 = pOp->p2;
ea30: 0a 23 69 66 20 53 51 4c 49 54 45 5f 44 45 42 55  .#if SQLITE_DEBU
ea40: 47 0a 20 20 69 66 28 20 61 50 65 72 6d 75 74 65  G.  if( aPermute
ea50: 20 29 7b 0a 20 20 20 20 69 6e 74 20 6b 2c 20 6d   ){.    int k, m
ea60: 78 20 3d 20 30 3b 0a 20 20 20 20 66 6f 72 28 6b  x = 0;.    for(k
ea70: 3d 30 3b 20 6b 3c 6e 3b 20 6b 2b 2b 29 20 69 66  =0; k<n; k++) if
ea80: 28 20 61 50 65 72 6d 75 74 65 5b 6b 5d 3e 6d 78  ( aPermute[k]>mx
ea90: 20 29 20 6d 78 20 3d 20 61 50 65 72 6d 75 74 65   ) mx = aPermute
eaa0: 5b 6b 5d 3b 0a 20 20 20 20 61 73 73 65 72 74 28  [k];.    assert(
eab0: 20 70 31 3e 30 20 26 26 20 70 31 2b 6d 78 3c 3d   p1>0 && p1+mx<=
eac0: 70 2d 3e 6e 4d 65 6d 2b 31 20 29 3b 0a 20 20 20  p->nMem+1 );.   
ead0: 20 61 73 73 65 72 74 28 20 70 32 3e 30 20 26 26   assert( p2>0 &&
eae0: 20 70 32 2b 6d 78 3c 3d 70 2d 3e 6e 4d 65 6d 2b   p2+mx<=p->nMem+
eaf0: 31 20 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  1 );.  }else{.  
eb00: 20 20 61 73 73 65 72 74 28 20 70 31 3e 30 20 26    assert( p1>0 &
eb10: 26 20 70 31 2b 6e 3c 3d 70 2d 3e 6e 4d 65 6d 2b  & p1+n<=p->nMem+
eb20: 31 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  1 );.    assert(
eb30: 20 70 32 3e 30 20 26 26 20 70 32 2b 6e 3c 3d 70   p2>0 && p2+n<=p
eb40: 2d 3e 6e 4d 65 6d 2b 31 20 29 3b 0a 20 20 7d 0a  ->nMem+1 );.  }.
eb50: 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
eb60: 5f 44 45 42 55 47 20 2a 2f 0a 20 20 66 6f 72 28  _DEBUG */.  for(
eb70: 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b 2b 29 7b 0a  i=0; i<n; i++){.
eb80: 20 20 20 20 69 64 78 20 3d 20 61 50 65 72 6d 75      idx = aPermu
eb90: 74 65 20 3f 20 61 50 65 72 6d 75 74 65 5b 69 5d  te ? aPermute[i]
eba0: 20 3a 20 69 3b 0a 20 20 20 20 61 73 73 65 72 74   : i;.    assert
ebb0: 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d  ( memIsValid(&aM
ebc0: 65 6d 5b 70 31 2b 69 64 78 5d 29 20 29 3b 0a 20  em[p1+idx]) );. 
ebd0: 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
ebe0: 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 32 2b 69  Valid(&aMem[p2+i
ebf0: 64 78 5d 29 20 29 3b 0a 20 20 20 20 52 45 47 49  dx]) );.    REGI
ec00: 53 54 45 52 5f 54 52 41 43 45 28 70 31 2b 69 64  STER_TRACE(p1+id
ec10: 78 2c 20 26 61 4d 65 6d 5b 70 31 2b 69 64 78 5d  x, &aMem[p1+idx]
ec20: 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f  );.    REGISTER_
ec30: 54 52 41 43 45 28 70 32 2b 69 64 78 2c 20 26 61  TRACE(p2+idx, &a
ec40: 4d 65 6d 5b 70 32 2b 69 64 78 5d 29 3b 0a 20 20  Mem[p2+idx]);.  
ec50: 20 20 61 73 73 65 72 74 28 20 69 3c 70 4b 65 79    assert( i<pKey
ec60: 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64 20 29 3b 0a  Info->nField );.
ec70: 20 20 20 20 70 43 6f 6c 6c 20 3d 20 70 4b 65 79      pColl = pKey
ec80: 49 6e 66 6f 2d 3e 61 43 6f 6c 6c 5b 69 5d 3b 0a  Info->aColl[i];.
ec90: 20 20 20 20 62 52 65 76 20 3d 20 70 4b 65 79 49      bRev = pKeyI
eca0: 6e 66 6f 2d 3e 61 53 6f 72 74 4f 72 64 65 72 5b  nfo->aSortOrder[
ecb0: 69 5d 3b 0a 20 20 20 20 69 43 6f 6d 70 61 72 65  i];.    iCompare
ecc0: 20 3d 20 73 71 6c 69 74 65 33 4d 65 6d 43 6f 6d   = sqlite3MemCom
ecd0: 70 61 72 65 28 26 61 4d 65 6d 5b 70 31 2b 69 64  pare(&aMem[p1+id
ece0: 78 5d 2c 20 26 61 4d 65 6d 5b 70 32 2b 69 64 78  x], &aMem[p2+idx
ecf0: 5d 2c 20 70 43 6f 6c 6c 29 3b 0a 20 20 20 20 69  ], pColl);.    i
ed00: 66 28 20 69 43 6f 6d 70 61 72 65 20 29 7b 0a 20  f( iCompare ){. 
ed10: 20 20 20 20 20 69 66 28 20 62 52 65 76 20 29 20       if( bRev ) 
ed20: 69 43 6f 6d 70 61 72 65 20 3d 20 2d 69 43 6f 6d  iCompare = -iCom
ed30: 70 61 72 65 3b 0a 20 20 20 20 20 20 62 72 65 61  pare;.      brea
ed40: 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 61  k;.    }.  }.  a
ed50: 50 65 72 6d 75 74 65 20 3d 20 30 3b 0a 20 20 62  Permute = 0;.  b
ed60: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
ed70: 64 65 3a 20 4a 75 6d 70 20 50 31 20 50 32 20 50  de: Jump P1 P2 P
ed80: 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70  3 * *.**.** Jump
ed90: 20 74 6f 20 74 68 65 20 69 6e 73 74 72 75 63 74   to the instruct
eda0: 69 6f 6e 20 61 74 20 61 64 64 72 65 73 73 20 50  ion at address P
edb0: 31 2c 20 50 32 2c 20 6f 72 20 50 33 20 64 65 70  1, P2, or P3 dep
edc0: 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65  ending on whethe
edd0: 72 0a 2a 2a 20 69 6e 20 74 68 65 20 6d 6f 73 74  r.** in the most
ede0: 20 72 65 63 65 6e 74 20 4f 50 5f 43 6f 6d 70 61   recent OP_Compa
edf0: 72 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 74  re instruction t
ee00: 68 65 20 50 31 20 76 65 63 74 6f 72 20 77 61 73  he P1 vector was
ee10: 20 6c 65 73 73 20 74 68 61 6e 0a 2a 2a 20 65 71   less than.** eq
ee20: 75 61 6c 20 74 6f 2c 20 6f 72 20 67 72 65 61 74  ual to, or great
ee30: 65 72 20 74 68 61 6e 20 74 68 65 20 50 32 20 76  er than the P2 v
ee40: 65 63 74 6f 72 2c 20 72 65 73 70 65 63 74 69 76  ector, respectiv
ee50: 65 6c 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ely..*/.case OP_
ee60: 4a 75 6d 70 3a 20 7b 20 20 20 20 20 20 20 20 20  Jump: {         
ee70: 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20      /* jump */. 
ee80: 20 69 66 28 20 69 43 6f 6d 70 61 72 65 3c 30 20   if( iCompare<0 
ee90: 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  ){.    pc = pOp-
eea0: 3e 70 31 20 2d 20 31 3b 0a 20 20 7d 65 6c 73 65  >p1 - 1;.  }else
eeb0: 20 69 66 28 20 69 43 6f 6d 70 61 72 65 3d 3d 30   if( iCompare==0
eec0: 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70   ){.    pc = pOp
eed0: 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 65 6c 73  ->p2 - 1;.  }els
eee0: 65 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  e{.    pc = pOp-
eef0: 3e 70 33 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62  >p3 - 1;.  }.  b
ef00: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
ef10: 64 65 3a 20 41 6e 64 20 50 31 20 50 32 20 50 33  de: And P1 P2 P3
ef20: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20   * *.**.** Take 
ef30: 74 68 65 20 6c 6f 67 69 63 61 6c 20 41 4e 44 20  the logical AND 
ef40: 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e  of the values in
ef50: 20 72 65 67 69 73 74 65 72 73 20 50 31 20 61 6e   registers P1 an
ef60: 64 20 50 32 20 61 6e 64 0a 2a 2a 20 77 72 69 74  d P2 and.** writ
ef70: 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 74  e the result int
ef80: 6f 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  o register P3..*
ef90: 2a 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 50  *.** If either P
efa0: 31 20 6f 72 20 50 32 20 69 73 20 30 20 28 66 61  1 or P2 is 0 (fa
efb0: 6c 73 65 29 20 74 68 65 6e 20 74 68 65 20 72 65  lse) then the re
efc0: 73 75 6c 74 20 69 73 20 30 20 65 76 65 6e 20 69  sult is 0 even i
efd0: 66 0a 2a 2a 20 74 68 65 20 6f 74 68 65 72 20 69  f.** the other i
efe0: 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2e 20 20 41  nput is NULL.  A
eff0: 20 4e 55 4c 4c 20 61 6e 64 20 74 72 75 65 20 6f   NULL and true o
f000: 72 20 74 77 6f 20 4e 55 4c 4c 73 20 67 69 76 65  r two NULLs give
f010: 0a 2a 2a 20 61 20 4e 55 4c 4c 20 6f 75 74 70 75  .** a NULL outpu
f020: 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  t..*/./* Opcode:
f030: 20 4f 72 20 50 31 20 50 32 20 50 33 20 2a 20 2a   Or P1 P2 P3 * *
f040: 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20  .**.** Take the 
f050: 6c 6f 67 69 63 61 6c 20 4f 52 20 6f 66 20 74 68  logical OR of th
f060: 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69  e values in regi
f070: 73 74 65 72 20 50 31 20 61 6e 64 20 50 32 20 61  ster P1 and P2 a
f080: 6e 64 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65 20  nd.** store the 
f090: 61 6e 73 77 65 72 20 69 6e 20 72 65 67 69 73 74  answer in regist
f0a0: 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  er P3..**.** If 
f0b0: 65 69 74 68 65 72 20 50 31 20 6f 72 20 50 32 20  either P1 or P2 
f0c0: 69 73 20 6e 6f 6e 7a 65 72 6f 20 28 74 72 75 65  is nonzero (true
f0d0: 29 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c  ) then the resul
f0e0: 74 20 69 73 20 31 20 28 74 72 75 65 29 0a 2a 2a  t is 1 (true).**
f0f0: 20 65 76 65 6e 20 69 66 20 74 68 65 20 6f 74 68   even if the oth
f100: 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c  er input is NULL
f110: 2e 20 20 41 20 4e 55 4c 4c 20 61 6e 64 20 66 61  .  A NULL and fa
f120: 6c 73 65 20 6f 72 20 74 77 6f 20 4e 55 4c 4c 73  lse or two NULLs
f130: 0a 2a 2a 20 67 69 76 65 20 61 20 4e 55 4c 4c 20  .** give a NULL 
f140: 6f 75 74 70 75 74 2e 0a 2a 2f 0a 63 61 73 65 20  output..*/.case 
f150: 4f 50 5f 41 6e 64 3a 20 20 20 20 20 20 20 20 20  OP_And:         
f160: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
f170: 54 4b 5f 41 4e 44 2c 20 69 6e 31 2c 20 69 6e 32  TK_AND, in1, in2
f180: 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f  , out3 */.case O
f190: 50 5f 4f 72 3a 20 7b 20 20 20 20 20 20 20 20 20  P_Or: {         
f1a0: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
f1b0: 4b 5f 4f 52 2c 20 69 6e 31 2c 20 69 6e 32 2c 20  K_OR, in1, in2, 
f1c0: 6f 75 74 33 20 2a 2f 0a 20 20 69 6e 74 20 76 31  out3 */.  int v1
f1d0: 3b 20 20 20 20 2f 2a 20 4c 65 66 74 20 6f 70 65  ;    /* Left ope
f1e0: 72 61 6e 64 3a 20 20 30 3d 3d 46 41 4c 53 45 2c  rand:  0==FALSE,
f1f0: 20 31 3d 3d 54 52 55 45 2c 20 32 3d 3d 55 4e 4b   1==TRUE, 2==UNK
f200: 4e 4f 57 4e 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a  NOWN or NULL */.
f210: 20 20 69 6e 74 20 76 32 3b 20 20 20 20 2f 2a 20    int v2;    /* 
f220: 52 69 67 68 74 20 6f 70 65 72 61 6e 64 3a 20 30  Right operand: 0
f230: 3d 3d 46 41 4c 53 45 2c 20 31 3d 3d 54 52 55 45  ==FALSE, 1==TRUE
f240: 2c 20 32 3d 3d 55 4e 4b 4e 4f 57 4e 20 6f 72 20  , 2==UNKNOWN or 
f250: 4e 55 4c 4c 20 2a 2f 0a 0a 20 20 70 49 6e 31 20  NULL */..  pIn1 
f260: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
f270: 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c  ;.  if( pIn1->fl
f280: 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29  ags & MEM_Null )
f290: 7b 0a 20 20 20 20 76 31 20 3d 20 32 3b 0a 20 20  {.    v1 = 2;.  
f2a0: 7d 65 6c 73 65 7b 0a 20 20 20 20 76 31 20 3d 20  }else{.    v1 = 
f2b0: 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61  sqlite3VdbeIntVa
f2c0: 6c 75 65 28 70 49 6e 31 29 21 3d 30 3b 0a 20 20  lue(pIn1)!=0;.  
f2d0: 7d 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d  }.  pIn2 = &aMem
f2e0: 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 69 66 28  [pOp->p2];.  if(
f2f0: 20 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn2->flags & M
f300: 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 76  EM_Null ){.    v
f310: 32 20 3d 20 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a  2 = 2;.  }else{.
f320: 20 20 20 20 76 32 20 3d 20 73 71 6c 69 74 65 33      v2 = sqlite3
f330: 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e  VdbeIntValue(pIn
f340: 32 29 21 3d 30 3b 0a 20 20 7d 0a 20 20 69 66 28  2)!=0;.  }.  if(
f350: 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
f360: 5f 41 6e 64 20 29 7b 0a 20 20 20 20 73 74 61 74  _And ){.    stat
f370: 69 63 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65  ic const unsigne
f380: 64 20 63 68 61 72 20 61 6e 64 5f 6c 6f 67 69 63  d char and_logic
f390: 5b 5d 20 3d 20 7b 20 30 2c 20 30 2c 20 30 2c 20  [] = { 0, 0, 0, 
f3a0: 30 2c 20 31 2c 20 32 2c 20 30 2c 20 32 2c 20 32  0, 1, 2, 0, 2, 2
f3b0: 20 7d 3b 0a 20 20 20 20 76 31 20 3d 20 61 6e 64   };.    v1 = and
f3c0: 5f 6c 6f 67 69 63 5b 76 31 2a 33 2b 76 32 5d 3b  _logic[v1*3+v2];
f3d0: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 74  .  }else{.    st
f3e0: 61 74 69 63 20 63 6f 6e 73 74 20 75 6e 73 69 67  atic const unsig
f3f0: 6e 65 64 20 63 68 61 72 20 6f 72 5f 6c 6f 67 69  ned char or_logi
f400: 63 5b 5d 20 3d 20 7b 20 30 2c 20 31 2c 20 32 2c  c[] = { 0, 1, 2,
f410: 20 31 2c 20 31 2c 20 31 2c 20 32 2c 20 31 2c 20   1, 1, 1, 2, 1, 
f420: 32 20 7d 3b 0a 20 20 20 20 76 31 20 3d 20 6f 72  2 };.    v1 = or
f430: 5f 6c 6f 67 69 63 5b 76 31 2a 33 2b 76 32 5d 3b  _logic[v1*3+v2];
f440: 0a 20 20 7d 0a 20 20 70 4f 75 74 20 3d 20 26 61  .  }.  pOut = &a
f450: 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
f460: 69 66 28 20 76 31 3d 3d 32 20 29 7b 0a 20 20 20  if( v1==2 ){.   
f470: 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
f480: 70 4f 75 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b  pOut, MEM_Null);
f490: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 4f  .  }else{.    pO
f4a0: 75 74 2d 3e 75 2e 69 20 3d 20 76 31 3b 0a 20 20  ut->u.i = v1;.  
f4b0: 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
f4c0: 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b  (pOut, MEM_Int);
f4d0: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
f4e0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 20  ./* Opcode: Not 
f4f0: 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
f500: 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68 65 20  * Interpret the 
f510: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
f520: 72 20 50 31 20 61 73 20 61 20 62 6f 6f 6c 65 61  r P1 as a boolea
f530: 6e 20 76 61 6c 75 65 2e 20 20 53 74 6f 72 65 20  n value.  Store 
f540: 74 68 65 0a 2a 2a 20 62 6f 6f 6c 65 61 6e 20 63  the.** boolean c
f550: 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e 20 72 65 67  omplement in reg
f560: 69 73 74 65 72 20 50 32 2e 20 20 49 66 20 74 68  ister P2.  If th
f570: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
f580: 74 65 72 20 50 31 20 69 73 20 0a 2a 2a 20 4e 55  ter P1 is .** NU
f590: 4c 4c 2c 20 74 68 65 6e 20 61 20 4e 55 4c 4c 20  LL, then a NULL 
f5a0: 69 73 20 73 74 6f 72 65 64 20 69 6e 20 50 32 2e  is stored in P2.
f5b0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 3a  .*/.case OP_Not:
f5c0: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
f5d0: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
f5e0: 4e 4f 54 2c 20 69 6e 31 2c 20 6f 75 74 32 20 2a  NOT, in1, out2 *
f5f0: 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
f600: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75  [pOp->p1];.  pOu
f610: 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
f620: 32 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e  2];.  if( pIn1->
f630: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
f640: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
f650: 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f  dbeMemSetNull(pO
f660: 75 74 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  ut);.  }else{.  
f670: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
f680: 53 65 74 49 6e 74 36 34 28 70 4f 75 74 2c 20 21  SetInt64(pOut, !
f690: 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61  sqlite3VdbeIntVa
f6a0: 6c 75 65 28 70 49 6e 31 29 29 3b 0a 20 20 7d 0a  lue(pIn1));.  }.
f6b0: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
f6c0: 70 63 6f 64 65 3a 20 42 69 74 4e 6f 74 20 50 31  pcode: BitNot P1
f6d0: 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
f6e0: 49 6e 74 65 72 70 72 65 74 20 74 68 65 20 63 6f  Interpret the co
f6f0: 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65  ntent of registe
f700: 72 20 50 31 20 61 73 20 61 6e 20 69 6e 74 65 67  r P1 as an integ
f710: 65 72 2e 20 20 53 74 6f 72 65 20 74 68 65 0a 2a  er.  Store the.*
f720: 2a 20 6f 6e 65 73 2d 63 6f 6d 70 6c 65 6d 65 6e  * ones-complemen
f730: 74 20 6f 66 20 74 68 65 20 50 31 20 76 61 6c 75  t of the P1 valu
f740: 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  e into register 
f750: 50 32 2e 20 20 49 66 20 50 31 20 68 6f 6c 64 73  P2.  If P1 holds
f760: 0a 2a 2a 20 61 20 4e 55 4c 4c 20 74 68 65 6e 20  .** a NULL then 
f770: 73 74 6f 72 65 20 61 20 4e 55 4c 4c 20 69 6e 20  store a NULL in 
f780: 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 42  P2..*/.case OP_B
f790: 69 74 4e 6f 74 3a 20 7b 20 20 20 20 20 20 20 20  itNot: {        
f7a0: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
f7b0: 54 4b 5f 42 49 54 4e 4f 54 2c 20 69 6e 31 2c 20  TK_BITNOT, in1, 
f7c0: 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d  out2 */.  pIn1 =
f7d0: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
f7e0: 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b  .  pOut = &aMem[
f7f0: 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 69 66 28 20  pOp->p2];.  if( 
f800: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
f810: 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 73 71  M_Null ){.    sq
f820: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e  lite3VdbeMemSetN
f830: 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 7d 65 6c  ull(pOut);.  }el
f840: 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  se{.    sqlite3V
f850: 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 70  dbeMemSetInt64(p
f860: 4f 75 74 2c 20 7e 73 71 6c 69 74 65 33 56 64 62  Out, ~sqlite3Vdb
f870: 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 29  eIntValue(pIn1))
f880: 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
f890: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 20  ../* Opcode: If 
f8a0: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
f8b0: 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66  ** Jump to P2 if
f8c0: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
f8d0: 67 69 73 74 65 72 20 50 31 20 69 73 20 74 72 75  gister P1 is tru
f8e0: 65 2e 20 20 54 68 65 20 76 61 6c 75 65 20 69 73  e.  The value is
f8f0: 0a 2a 2a 20 69 73 20 63 6f 6e 73 69 64 65 72 65  .** is considere
f900: 64 20 74 72 75 65 20 69 66 20 69 74 20 69 73 20  d true if it is 
f910: 6e 75 6d 65 72 69 63 20 61 6e 64 20 6e 6f 6e 2d  numeric and non-
f920: 7a 65 72 6f 2e 20 20 49 66 20 74 68 65 20 76 61  zero.  If the va
f930: 6c 75 65 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20  lue.** in P1 is 
f940: 4e 55 4c 4c 20 74 68 65 6e 20 74 61 6b 65 20 74  NULL then take t
f950: 68 65 20 6a 75 6d 70 20 69 66 20 50 33 20 69 73  he jump if P3 is
f960: 20 74 72 75 65 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63   true..*/./* Opc
f970: 6f 64 65 3a 20 49 66 4e 6f 74 20 50 31 20 50 32  ode: IfNot P1 P2
f980: 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75   P3 * *.**.** Ju
f990: 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68 65 20  mp to P2 if the 
f9a0: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
f9b0: 72 20 50 31 20 69 73 20 46 61 6c 73 65 2e 20 20  r P1 is False.  
f9c0: 54 68 65 20 76 61 6c 75 65 20 69 73 0a 2a 2a 20  The value is.** 
f9d0: 69 73 20 63 6f 6e 73 69 64 65 72 65 64 20 74 72  is considered tr
f9e0: 75 65 20 69 66 20 69 74 20 68 61 73 20 61 20 6e  ue if it has a n
f9f0: 75 6d 65 72 69 63 20 76 61 6c 75 65 20 6f 66 20  umeric value of 
fa00: 7a 65 72 6f 2e 20 20 49 66 20 74 68 65 20 76 61  zero.  If the va
fa10: 6c 75 65 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20  lue.** in P1 is 
fa20: 4e 55 4c 4c 20 74 68 65 6e 20 74 61 6b 65 20 74  NULL then take t
fa30: 68 65 20 6a 75 6d 70 20 69 66 20 50 33 20 69 73  he jump if P3 is
fa40: 20 74 72 75 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f   true..*/.case O
fa50: 50 5f 49 66 3a 20 20 20 20 20 20 20 20 20 20 20  P_If:           
fa60: 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
fa70: 6e 31 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66  n1 */.case OP_If
fa80: 4e 6f 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20  Not: {          
fa90: 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a    /* jump, in1 *
faa0: 2f 0a 20 20 69 6e 74 20 63 3b 0a 20 20 70 49 6e  /.  int c;.  pIn
fab0: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
fac0: 31 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e  1];.  if( pIn1->
fad0: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
fae0: 20 29 7b 0a 20 20 20 20 63 20 3d 20 70 4f 70 2d   ){.    c = pOp-
faf0: 3e 70 33 3b 0a 20 20 7d 65 6c 73 65 7b 0a 23 69  >p3;.  }else{.#i
fb00: 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fdef SQLITE_OMIT
fb10: 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a  _FLOATING_POINT.
fb20: 20 20 20 20 63 20 3d 20 73 71 6c 69 74 65 33 56      c = sqlite3V
fb30: 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31  dbeIntValue(pIn1
fb40: 29 21 3d 30 3b 0a 23 65 6c 73 65 0a 20 20 20 20  )!=0;.#else.    
fb50: 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 52  c = sqlite3VdbeR
fb60: 65 61 6c 56 61 6c 75 65 28 70 49 6e 31 29 21 3d  ealValue(pIn1)!=
fb70: 30 2e 30 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20  0.0;.#endif.    
fb80: 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  if( pOp->opcode=
fb90: 3d 4f 50 5f 49 66 4e 6f 74 20 29 20 63 20 3d 20  =OP_IfNot ) c = 
fba0: 21 63 3b 0a 20 20 7d 0a 20 20 69 66 28 20 63 20  !c;.  }.  if( c 
fbb0: 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  ){.    pc = pOp-
fbc0: 3e 70 32 2d 31 3b 0a 20 20 7d 0a 20 20 62 72 65  >p2-1;.  }.  bre
fbd0: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
fbe0: 3a 20 49 73 4e 75 6c 6c 20 50 31 20 50 32 20 2a  : IsNull P1 P2 *
fbf0: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20   * *.**.** Jump 
fc00: 74 6f 20 50 32 20 69 66 20 74 68 65 20 76 61 6c  to P2 if the val
fc10: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
fc20: 31 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61  1 is NULL..*/.ca
fc30: 73 65 20 4f 50 5f 49 73 4e 75 6c 6c 3a 20 7b 20  se OP_IsNull: { 
fc40: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
fc50: 6d 65 20 61 73 20 54 4b 5f 49 53 4e 55 4c 4c 2c  me as TK_ISNULL,
fc60: 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20   jump, in1 */.  
fc70: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
fc80: 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 28 70 49  ->p1];.  if( (pI
fc90: 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
fca0: 4e 75 6c 6c 29 21 3d 30 20 29 7b 0a 20 20 20 20  Null)!=0 ){.    
fcb0: 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
fcc0: 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
fcd0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74  ../* Opcode: Not
fce0: 4e 75 6c 6c 20 50 31 20 50 32 20 2a 20 2a 20 2a  Null P1 P2 * * *
fcf0: 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50  .**.** Jump to P
fd00: 32 20 69 66 20 74 68 65 20 76 61 6c 75 65 20 69  2 if the value i
fd10: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  n register P1 is
fd20: 20 6e 6f 74 20 4e 55 4c 4c 2e 20 20 0a 2a 2f 0a   not NULL.  .*/.
fd30: 63 61 73 65 20 4f 50 5f 4e 6f 74 4e 75 6c 6c 3a  case OP_NotNull:
fd40: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
fd50: 20 73 61 6d 65 20 61 73 20 54 4b 5f 4e 4f 54 4e   same as TK_NOTN
fd60: 55 4c 4c 2c 20 6a 75 6d 70 2c 20 69 6e 31 20 2a  ULL, jump, in1 *
fd70: 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
fd80: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28  [pOp->p1];.  if(
fd90: 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
fda0: 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a  MEM_Null)==0 ){.
fdb0: 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
fdc0: 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61   - 1;.  }.  brea
fdd0: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
fde0: 20 43 6f 6c 75 6d 6e 20 50 31 20 50 32 20 50 33   Column P1 P2 P3
fdf0: 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 49 6e 74   P4 P5.**.** Int
fe00: 65 72 70 72 65 74 20 74 68 65 20 64 61 74 61 20  erpret the data 
fe10: 74 68 61 74 20 63 75 72 73 6f 72 20 50 31 20 70  that cursor P1 p
fe20: 6f 69 6e 74 73 20 74 6f 20 61 73 20 61 20 73 74  oints to as a st
fe30: 72 75 63 74 75 72 65 20 62 75 69 6c 74 20 75 73  ructure built us
fe40: 69 6e 67 0a 2a 2a 20 74 68 65 20 4d 61 6b 65 52  ing.** the MakeR
fe50: 65 63 6f 72 64 20 69 6e 73 74 72 75 63 74 69 6f  ecord instructio
fe60: 6e 2e 20 20 28 53 65 65 20 74 68 65 20 4d 61 6b  n.  (See the Mak
fe70: 65 52 65 63 6f 72 64 20 6f 70 63 6f 64 65 20 66  eRecord opcode f
fe80: 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 0a 2a 2a  or additional.**
fe90: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   information abo
fea0: 75 74 20 74 68 65 20 66 6f 72 6d 61 74 20 6f 66  ut the format of
feb0: 20 74 68 65 20 64 61 74 61 2e 29 20 20 45 78 74   the data.)  Ext
fec0: 72 61 63 74 20 74 68 65 20 50 32 2d 74 68 20 63  ract the P2-th c
fed0: 6f 6c 75 6d 6e 0a 2a 2a 20 66 72 6f 6d 20 74 68  olumn.** from th
fee0: 69 73 20 72 65 63 6f 72 64 2e 20 20 49 66 20 74  is record.  If t
fef0: 68 65 72 65 20 61 72 65 20 6c 65 73 73 20 74 68  here are less th
ff00: 61 74 20 28 50 32 2b 31 29 20 0a 2a 2a 20 76 61  at (P2+1) .** va
ff10: 6c 75 65 73 20 69 6e 20 74 68 65 20 72 65 63 6f  lues in the reco
ff20: 72 64 2c 20 65 78 74 72 61 63 74 20 61 20 4e 55  rd, extract a NU
ff30: 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 76 61  LL..**.** The va
ff40: 6c 75 65 20 65 78 74 72 61 63 74 65 64 20 69 73  lue extracted is
ff50: 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73   stored in regis
ff60: 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66  ter P3..**.** If
ff70: 20 74 68 65 20 63 6f 6c 75 6d 6e 20 63 6f 6e 74   the column cont
ff80: 61 69 6e 73 20 66 65 77 65 72 20 74 68 61 6e 20  ains fewer than 
ff90: 50 32 20 66 69 65 6c 64 73 2c 20 74 68 65 6e 20  P2 fields, then 
ffa0: 65 78 74 72 61 63 74 20 61 20 4e 55 4c 4c 2e 20  extract a NULL. 
ffb0: 20 4f 72 2c 0a 2a 2a 20 69 66 20 74 68 65 20 50   Or,.** if the P
ffc0: 34 20 61 72 67 75 6d 65 6e 74 20 69 73 20 61 20  4 argument is a 
ffd0: 50 34 5f 4d 45 4d 20 75 73 65 20 74 68 65 20 76  P4_MEM use the v
ffe0: 61 6c 75 65 20 6f 66 20 74 68 65 20 50 34 20 61  alue of the P4 a
fff0: 72 67 75 6d 65 6e 74 20 61 73 0a 2a 2a 20 74 68  rgument as.** th
10000 65 20 72 65 73 75 6c 74 2e 0a 2a 2a 0a 2a 2a 20  e result..**.** 
10010 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 43 4c  If the OPFLAG_CL
10020 45 41 52 43 41 43 48 45 20 62 69 74 20 69 73 20  EARCACHE bit is 
10030 73 65 74 20 6f 6e 20 50 35 20 61 6e 64 20 50 31  set on P5 and P1
10040 20 69 73 20 61 20 70 73 65 75 64 6f 2d 74 61 62   is a pseudo-tab
10050 6c 65 20 63 75 72 73 6f 72 2c 0a 2a 2a 20 74 68  le cursor,.** th
10060 65 6e 20 74 68 65 20 63 61 63 68 65 20 6f 66 20  en the cache of 
10070 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 72 65  the cursor is re
10080 73 65 74 20 70 72 69 6f 72 20 74 6f 20 65 78 74  set prior to ext
10090 72 61 63 74 69 6e 67 20 74 68 65 20 63 6f 6c 75  racting the colu
100a0 6d 6e 2e 0a 2a 2a 20 54 68 65 20 66 69 72 73 74  mn..** The first
100b0 20 4f 50 5f 43 6f 6c 75 6d 6e 20 61 67 61 69 6e   OP_Column again
100c0 73 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c  st a pseudo-tabl
100d0 65 20 61 66 74 65 72 20 74 68 65 20 76 61 6c 75  e after the valu
100e0 65 20 6f 66 20 74 68 65 20 63 6f 6e 74 65 6e 74  e of the content
100f0 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 68 61 73  .** register has
10100 20 63 68 61 6e 67 65 64 20 73 68 6f 75 6c 64 20   changed should 
10110 68 61 76 65 20 74 68 69 73 20 62 69 74 20 73 65  have this bit se
10120 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f  t..*/.case OP_Co
10130 6c 75 6d 6e 3a 20 7b 0a 20 20 75 33 32 20 70 61  lumn: {.  u32 pa
10140 79 6c 6f 61 64 53 69 7a 65 3b 20 20 20 2f 2a 20  yloadSize;   /* 
10150 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20  Number of bytes 
10160 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f  in the record */
10170 0a 20 20 69 36 34 20 70 61 79 6c 6f 61 64 53 69  .  i64 payloadSi
10180 7a 65 36 34 3b 20 2f 2a 20 4e 75 6d 62 65 72 20  ze64; /* Number 
10190 6f 66 20 62 79 74 65 73 20 69 6e 20 74 68 65 20  of bytes in the 
101a0 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20  record */.  int 
101b0 70 31 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  p1;            /
101c0 2a 20 50 31 20 76 61 6c 75 65 20 6f 66 20 74 68  * P1 value of th
101d0 65 20 6f 70 63 6f 64 65 20 2a 2f 0a 20 20 69 6e  e opcode */.  in
101e0 74 20 70 32 3b 20 20 20 20 20 20 20 20 20 20 20  t p2;           
101f0 20 2f 2a 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65   /* column numbe
10200 72 20 74 6f 20 72 65 74 72 69 65 76 65 20 2a 2f  r to retrieve */
10210 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
10220 43 3b 20 20 20 20 2f 2a 20 54 68 65 20 56 44 42  C;    /* The VDB
10230 45 20 63 75 72 73 6f 72 20 2a 2f 0a 20 20 63 68  E cursor */.  ch
10240 61 72 20 2a 7a 52 65 63 3b 20 20 20 20 20 20 20  ar *zRec;       
10250 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 63   /* Pointer to c
10260 6f 6d 70 6c 65 74 65 20 72 65 63 6f 72 64 2d 64  omplete record-d
10270 61 74 61 20 2a 2f 0a 20 20 42 74 43 75 72 73 6f  ata */.  BtCurso
10280 72 20 2a 70 43 72 73 72 3b 20 20 20 2f 2a 20 54  r *pCrsr;   /* T
10290 68 65 20 42 54 72 65 65 20 63 75 72 73 6f 72 20  he BTree cursor 
102a0 2a 2f 0a 20 20 75 33 32 20 2a 61 54 79 70 65 3b  */.  u32 *aType;
102b0 20 20 20 20 20 20 20 20 2f 2a 20 61 54 79 70 65          /* aType
102c0 5b 69 5d 20 68 6f 6c 64 73 20 74 68 65 20 6e 75  [i] holds the nu
102d0 6d 65 72 69 63 20 74 79 70 65 20 6f 66 20 74 68  meric type of th
102e0 65 20 69 2d 74 68 20 63 6f 6c 75 6d 6e 20 2a 2f  e i-th column */
102f0 0a 20 20 75 33 32 20 2a 61 4f 66 66 73 65 74 3b  .  u32 *aOffset;
10300 20 20 20 20 20 20 2f 2a 20 61 4f 66 66 73 65 74        /* aOffset
10310 5b 69 5d 20 69 73 20 6f 66 66 73 65 74 20 74 6f  [i] is offset to
10320 20 73 74 61 72 74 20 6f 66 20 64 61 74 61 20 66   start of data f
10330 6f 72 20 69 2d 74 68 20 63 6f 6c 75 6d 6e 20 2a  or i-th column *
10340 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b 20  /.  int nField; 
10350 20 20 20 20 20 20 20 2f 2a 20 6e 75 6d 62 65 72         /* number
10360 20 6f 66 20 66 69 65 6c 64 73 20 69 6e 20 74 68   of fields in th
10370 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e  e record */.  in
10380 74 20 6c 65 6e 3b 20 20 20 20 20 20 20 20 20 20  t len;          
10390 20 2f 2a 20 54 68 65 20 6c 65 6e 67 74 68 20 6f   /* The length o
103a0 66 20 74 68 65 20 73 65 72 69 61 6c 69 7a 65 64  f the serialized
103b0 20 64 61 74 61 20 66 6f 72 20 74 68 65 20 63 6f   data for the co
103c0 6c 75 6d 6e 20 2a 2f 0a 20 20 69 6e 74 20 69 3b  lumn */.  int i;
103d0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
103e0 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a  Loop counter */.
103f0 20 20 63 68 61 72 20 2a 7a 44 61 74 61 3b 20 20    char *zData;  
10400 20 20 20 20 20 2f 2a 20 50 61 72 74 20 6f 66 20       /* Part of 
10410 74 68 65 20 72 65 63 6f 72 64 20 62 65 69 6e 67  the record being
10420 20 64 65 63 6f 64 65 64 20 2a 2f 0a 20 20 4d 65   decoded */.  Me
10430 6d 20 2a 70 44 65 73 74 3b 20 20 20 20 20 20 20  m *pDest;       
10440 20 2f 2a 20 57 68 65 72 65 20 74 6f 20 77 72 69   /* Where to wri
10450 74 65 20 74 68 65 20 65 78 74 72 61 63 74 65 64  te the extracted
10460 20 76 61 6c 75 65 20 2a 2f 0a 20 20 4d 65 6d 20   value */.  Mem 
10470 73 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 2f  sMem;          /
10480 2a 20 46 6f 72 20 73 74 6f 72 69 6e 67 20 74 68  * For storing th
10490 65 20 72 65 63 6f 72 64 20 62 65 69 6e 67 20 64  e record being d
104a0 65 63 6f 64 65 64 20 2a 2f 0a 20 20 75 38 20 2a  ecoded */.  u8 *
104b0 7a 49 64 78 3b 20 20 20 20 20 20 20 20 20 20 2f  zIdx;          /
104c0 2a 20 49 6e 64 65 78 20 69 6e 74 6f 20 68 65 61  * Index into hea
104d0 64 65 72 20 2a 2f 0a 20 20 75 38 20 2a 7a 45 6e  der */.  u8 *zEn
104e0 64 48 64 72 3b 20 20 20 20 20 20 20 2f 2a 20 50  dHdr;       /* P
104f0 6f 69 6e 74 65 72 20 74 6f 20 66 69 72 73 74 20  ointer to first 
10500 62 79 74 65 20 61 66 74 65 72 20 74 68 65 20 68  byte after the h
10510 65 61 64 65 72 20 2a 2f 0a 20 20 75 33 32 20 6f  eader */.  u32 o
10520 66 66 73 65 74 3b 20 20 20 20 20 20 20 20 2f 2a  ffset;        /*
10530 20 4f 66 66 73 65 74 20 69 6e 74 6f 20 74 68 65   Offset into the
10540 20 64 61 74 61 20 2a 2f 0a 20 20 75 33 32 20 73   data */.  u32 s
10550 7a 46 69 65 6c 64 3b 20 20 20 20 20 20 20 2f 2a  zField;       /*
10560 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   Number of bytes
10570 20 69 6e 20 74 68 65 20 63 6f 6e 74 65 6e 74 20   in the content 
10580 6f 66 20 61 20 66 69 65 6c 64 20 2a 2f 0a 20 20  of a field */.  
10590 69 6e 74 20 73 7a 48 64 72 3b 20 20 20 20 20 20  int szHdr;      
105a0 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 74 68     /* Size of th
105b0 65 20 68 65 61 64 65 72 20 73 69 7a 65 20 66 69  e header size fi
105c0 65 6c 64 20 61 74 20 73 74 61 72 74 20 6f 66 20  eld at start of 
105d0 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20  record */.  int 
105e0 61 76 61 69 6c 3b 20 20 20 20 20 20 20 20 20 2f  avail;         /
105f0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  * Number of byte
10600 73 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 64  s of available d
10610 61 74 61 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 52  ata */.  Mem *pR
10620 65 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 50  eg;         /* P
10630 73 65 75 64 6f 54 61 62 6c 65 20 69 6e 70 75 74  seudoTable input
10640 20 72 65 67 69 73 74 65 72 20 2a 2f 0a 0a 0a 20   register */... 
10650 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20   p1 = pOp->p1;. 
10660 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20   p2 = pOp->p2;. 
10670 20 70 43 20 3d 20 30 3b 0a 20 20 6d 65 6d 73 65   pC = 0;.  memse
10680 74 28 26 73 4d 65 6d 2c 20 30 2c 20 73 69 7a 65  t(&sMem, 0, size
10690 6f 66 28 73 4d 65 6d 29 29 3b 0a 20 20 61 73 73  of(sMem));.  ass
106a0 65 72 74 28 20 70 31 3c 70 2d 3e 6e 43 75 72 73  ert( p1<p->nCurs
106b0 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  or );.  assert( 
106c0 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70  pOp->p3>0 && pOp
106d0 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b  ->p3<=p->nMem );
106e0 0a 20 20 70 44 65 73 74 20 3d 20 26 61 4d 65 6d  .  pDest = &aMem
106f0 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d  [pOp->p3];.  mem
10700 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
10710 20 70 44 65 73 74 29 3b 0a 20 20 4d 65 6d 53 65   pDest);.  MemSe
10720 74 54 79 70 65 46 6c 61 67 28 70 44 65 73 74 2c  tTypeFlag(pDest,
10730 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 7a 52   MEM_Null);.  zR
10740 65 63 20 3d 20 30 3b 0a 0a 20 20 2f 2a 20 54 68  ec = 0;..  /* Th
10750 69 73 20 62 6c 6f 63 6b 20 73 65 74 73 20 74 68  is block sets th
10760 65 20 76 61 72 69 61 62 6c 65 20 70 61 79 6c 6f  e variable paylo
10770 61 64 53 69 7a 65 20 74 6f 20 62 65 20 74 68 65  adSize to be the
10780 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66   total number of
10790 0a 20 20 2a 2a 20 62 79 74 65 73 20 69 6e 20 74  .  ** bytes in t
107a0 68 65 20 72 65 63 6f 72 64 2e 0a 20 20 2a 2a 0a  he record..  **.
107b0 20 20 2a 2a 20 7a 52 65 63 20 69 73 20 73 65 74    ** zRec is set
107c0 20 74 6f 20 62 65 20 74 68 65 20 63 6f 6d 70 6c   to be the compl
107d0 65 74 65 20 74 65 78 74 20 6f 66 20 74 68 65 20  ete text of the 
107e0 72 65 63 6f 72 64 20 69 66 20 69 74 20 69 73 20  record if it is 
107f0 61 76 61 69 6c 61 62 6c 65 2e 0a 20 20 2a 2a 20  available..  ** 
10800 54 68 65 20 63 6f 6d 70 6c 65 74 65 20 72 65 63  The complete rec
10810 6f 72 64 20 74 65 78 74 20 69 73 20 61 6c 77 61  ord text is alwa
10820 79 73 20 61 76 61 69 6c 61 62 6c 65 20 66 6f 72  ys available for
10830 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 73 0a 20   pseudo-tables. 
10840 20 2a 2a 20 49 66 20 74 68 65 20 72 65 63 6f 72   ** If the recor
10850 64 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 61  d is stored in a
10860 20 63 75 72 73 6f 72 2c 20 74 68 65 20 63 6f 6d   cursor, the com
10870 70 6c 65 74 65 20 72 65 63 6f 72 64 20 74 65 78  plete record tex
10880 74 0a 20 20 2a 2a 20 6d 69 67 68 74 20 62 65 20  t.  ** might be 
10890 61 76 61 69 6c 61 62 6c 65 20 69 6e 20 74 68 65  available in the
108a0 20 20 70 43 2d 3e 61 52 6f 77 20 63 61 63 68 65    pC->aRow cache
108b0 2e 20 20 4f 72 20 69 74 20 6d 69 67 68 74 20 6e  .  Or it might n
108c0 6f 74 20 62 65 2e 0a 20 20 2a 2a 20 49 66 20 74  ot be..  ** If t
108d0 68 65 20 64 61 74 61 20 69 73 20 75 6e 61 76 61  he data is unava
108e0 69 6c 61 62 6c 65 2c 20 20 7a 52 65 63 20 69 73  ilable,  zRec is
108f0 20 73 65 74 20 74 6f 20 4e 55 4c 4c 2e 0a 20 20   set to NULL..  
10900 2a 2a 0a 20 20 2a 2a 20 57 65 20 61 6c 73 6f 20  **.  ** We also 
10910 63 6f 6d 70 75 74 65 20 74 68 65 20 6e 75 6d 62  compute the numb
10920 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
10930 20 74 68 65 20 72 65 63 6f 72 64 2e 20 20 46 6f   the record.  Fo
10940 72 20 63 75 72 73 6f 72 73 2c 0a 20 20 2a 2a 20  r cursors,.  ** 
10950 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f  the number of co
10960 6c 75 6d 6e 73 20 69 73 20 73 74 6f 72 65 64 20  lumns is stored 
10970 69 6e 20 74 68 65 20 56 64 62 65 43 75 72 73 6f  in the VdbeCurso
10980 72 2e 6e 46 69 65 6c 64 20 65 6c 65 6d 65 6e 74  r.nField element
10990 2e 0a 20 20 2a 2f 0a 20 20 70 43 20 3d 20 70 2d  ..  */.  pC = p-
109a0 3e 61 70 43 73 72 5b 70 31 5d 3b 0a 20 20 61 73  >apCsr[p1];.  as
109b0 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 23  sert( pC!=0 );.#
109c0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
109d0 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
109e0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 56    assert( pC->pV
109f0 74 61 62 43 75 72 73 6f 72 3d 3d 30 20 29 3b 0a  tabCursor==0 );.
10a00 23 65 6e 64 69 66 0a 20 20 70 43 72 73 72 20 3d  #endif.  pCrsr =
10a10 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20   pC->pCursor;.  
10a20 69 66 28 20 70 43 72 73 72 21 3d 30 20 29 7b 0a  if( pCrsr!=0 ){.
10a30 20 20 20 20 2f 2a 20 54 68 65 20 72 65 63 6f 72      /* The recor
10a40 64 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 61  d is stored in a
10a50 20 42 2d 54 72 65 65 20 2a 2f 0a 20 20 20 20 72   B-Tree */.    r
10a60 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43  c = sqlite3VdbeC
10a70 75 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b  ursorMoveto(pC);
10a80 0a 20 20 20 20 69 66 28 20 72 63 20 29 20 67 6f  .    if( rc ) go
10a90 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
10aa0 65 72 72 6f 72 3b 0a 20 20 20 20 69 66 28 20 70  error;.    if( p
10ab0 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20  C->nullRow ){.  
10ac0 20 20 20 20 70 61 79 6c 6f 61 64 53 69 7a 65 20      payloadSize 
10ad0 3d 20 30 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69  = 0;.    }else i
10ae0 66 28 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74  f( pC->cacheStat
10af0 75 73 3d 3d 70 2d 3e 63 61 63 68 65 43 74 72 20  us==p->cacheCtr 
10b00 29 7b 0a 20 20 20 20 20 20 70 61 79 6c 6f 61 64  ){.      payload
10b10 53 69 7a 65 20 3d 20 70 43 2d 3e 70 61 79 6c 6f  Size = pC->paylo
10b20 61 64 53 69 7a 65 3b 0a 20 20 20 20 20 20 7a 52  adSize;.      zR
10b30 65 63 20 3d 20 28 63 68 61 72 2a 29 70 43 2d 3e  ec = (char*)pC->
10b40 61 52 6f 77 3b 0a 20 20 20 20 7d 65 6c 73 65 20  aRow;.    }else 
10b50 69 66 28 20 70 43 2d 3e 69 73 49 6e 64 65 78 20  if( pC->isIndex 
10b60 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ){.      assert(
10b70 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72   sqlite3BtreeCur
10b80 73 6f 72 49 73 56 61 6c 69 64 28 70 43 72 73 72  sorIsValid(pCrsr
10b90 29 20 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  ) );.      rc = 
10ba0 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79 53  sqlite3BtreeKeyS
10bb0 69 7a 65 28 70 43 72 73 72 2c 20 26 70 61 79 6c  ize(pCrsr, &payl
10bc0 6f 61 64 53 69 7a 65 36 34 29 3b 0a 20 20 20 20  oadSize64);.    
10bd0 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51    assert( rc==SQ
10be0 4c 49 54 45 5f 4f 4b 20 29 3b 20 20 20 2f 2a 20  LITE_OK );   /* 
10bf0 54 72 75 65 20 62 65 63 61 75 73 65 20 6f 66 20  True because of 
10c00 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29 20 63  CursorMoveto() c
10c10 61 6c 6c 20 61 62 6f 76 65 20 2a 2f 0a 20 20 20  all above */.   
10c20 20 20 20 2f 2a 20 73 71 6c 69 74 65 33 42 74 72     /* sqlite3Btr
10c30 65 65 50 61 72 73 65 43 65 6c 6c 50 74 72 28 29  eeParseCellPtr()
10c40 20 75 73 65 73 20 67 65 74 56 61 72 69 6e 74 33   uses getVarint3
10c50 32 28 29 20 74 6f 20 65 78 74 72 61 63 74 20 74  2() to extract t
10c60 68 65 0a 20 20 20 20 20 20 2a 2a 20 70 61 79 6c  he.      ** payl
10c70 6f 61 64 20 73 69 7a 65 2c 20 73 6f 20 69 74 20  oad size, so it 
10c80 69 73 20 69 6d 70 6f 73 73 69 62 6c 65 20 66 6f  is impossible fo
10c90 72 20 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 20  r payloadSize64 
10ca0 74 6f 20 62 65 0a 20 20 20 20 20 20 2a 2a 20 6c  to be.      ** l
10cb0 61 72 67 65 72 20 74 68 61 6e 20 33 32 20 62 69  arger than 32 bi
10cc0 74 73 2e 20 2a 2f 0a 20 20 20 20 20 20 61 73 73  ts. */.      ass
10cd0 65 72 74 28 20 28 70 61 79 6c 6f 61 64 53 69 7a  ert( (payloadSiz
10ce0 65 36 34 20 26 20 53 51 4c 49 54 45 5f 4d 41 58  e64 & SQLITE_MAX
10cf0 5f 55 33 32 29 3d 3d 28 75 36 34 29 70 61 79 6c  _U32)==(u64)payl
10d00 6f 61 64 53 69 7a 65 36 34 20 29 3b 0a 20 20 20  oadSize64 );.   
10d10 20 20 20 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d     payloadSize =
10d20 20 28 75 33 32 29 70 61 79 6c 6f 61 64 53 69 7a   (u32)payloadSiz
10d30 65 36 34 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  e64;.    }else{.
10d40 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71        assert( sq
10d50 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72  lite3BtreeCursor
10d60 49 73 56 61 6c 69 64 28 70 43 72 73 72 29 20 29  IsValid(pCrsr) )
10d70 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  ;.      rc = sql
10d80 69 74 65 33 42 74 72 65 65 44 61 74 61 53 69 7a  ite3BtreeDataSiz
10d90 65 28 70 43 72 73 72 2c 20 26 70 61 79 6c 6f 61  e(pCrsr, &payloa
10da0 64 53 69 7a 65 29 3b 0a 20 20 20 20 20 20 61 73  dSize);.      as
10db0 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45  sert( rc==SQLITE
10dc0 5f 4f 4b 20 29 3b 20 20 20 2f 2a 20 44 61 74 61  _OK );   /* Data
10dd0 53 69 7a 65 28 29 20 63 61 6e 6e 6f 74 20 66 61  Size() cannot fa
10de0 69 6c 20 2a 2f 0a 20 20 20 20 7d 0a 20 20 7d 65  il */.    }.  }e
10df0 6c 73 65 20 69 66 28 20 70 43 2d 3e 70 73 65 75  lse if( pC->pseu
10e00 64 6f 54 61 62 6c 65 52 65 67 3e 30 20 29 7b 0a  doTableReg>0 ){.
10e10 20 20 20 20 70 52 65 67 20 3d 20 26 61 4d 65 6d      pReg = &aMem
10e20 5b 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65  [pC->pseudoTable
10e30 52 65 67 5d 3b 0a 20 20 20 20 61 73 73 65 72 74  Reg];.    assert
10e40 28 20 70 52 65 67 2d 3e 66 6c 61 67 73 20 26 20  ( pReg->flags & 
10e50 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20 20 20  MEM_Blob );.    
10e60 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
10e70 69 64 28 70 52 65 67 29 20 29 3b 0a 20 20 20 20  id(pReg) );.    
10e80 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20 70 52  payloadSize = pR
10e90 65 67 2d 3e 6e 3b 0a 20 20 20 20 7a 52 65 63 20  eg->n;.    zRec 
10ea0 3d 20 70 52 65 67 2d 3e 7a 3b 0a 20 20 20 20 70  = pReg->z;.    p
10eb0 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
10ec0 20 28 70 4f 70 2d 3e 70 35 26 4f 50 46 4c 41 47   (pOp->p5&OPFLAG
10ed0 5f 43 4c 45 41 52 43 41 43 48 45 29 20 3f 20 43  _CLEARCACHE) ? C
10ee0 41 43 48 45 5f 53 54 41 4c 45 20 3a 20 70 2d 3e  ACHE_STALE : p->
10ef0 63 61 63 68 65 43 74 72 3b 0a 20 20 20 20 61 73  cacheCtr;.    as
10f00 73 65 72 74 28 20 70 61 79 6c 6f 61 64 53 69 7a  sert( payloadSiz
10f10 65 3d 3d 30 20 7c 7c 20 7a 52 65 63 21 3d 30 20  e==0 || zRec!=0 
10f20 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
10f30 2f 2a 20 43 6f 6e 73 69 64 65 72 20 74 68 65 20  /* Consider the 
10f40 72 6f 77 20 74 6f 20 62 65 20 4e 55 4c 4c 20 2a  row to be NULL *
10f50 2f 0a 20 20 20 20 70 61 79 6c 6f 61 64 53 69 7a  /.    payloadSiz
10f60 65 20 3d 20 30 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  e = 0;.  }..  /*
10f70 20 49 66 20 70 61 79 6c 6f 61 64 53 69 7a 65 20   If payloadSize 
10f80 69 73 20 30 2c 20 74 68 65 6e 20 6a 75 73 74 20  is 0, then just 
10f90 73 74 6f 72 65 20 61 20 4e 55 4c 4c 20 2a 2f 0a  store a NULL */.
10fa0 20 20 69 66 28 20 70 61 79 6c 6f 61 64 53 69 7a    if( payloadSiz
10fb0 65 3d 3d 30 20 29 7b 0a 20 20 20 20 61 73 73 65  e==0 ){.    asse
10fc0 72 74 28 20 70 44 65 73 74 2d 3e 66 6c 61 67 73  rt( pDest->flags
10fd0 26 4d 45 4d 5f 4e 75 6c 6c 20 29 3b 0a 20 20 20  &MEM_Null );.   
10fe0 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f   goto op_column_
10ff0 6f 75 74 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72  out;.  }.  asser
11000 74 28 20 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51  t( db->aLimit[SQ
11010 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54  LITE_LIMIT_LENGT
11020 48 5d 3e 3d 30 20 29 3b 0a 20 20 69 66 28 20 70  H]>=0 );.  if( p
11030 61 79 6c 6f 61 64 53 69 7a 65 20 3e 20 28 75 33  ayloadSize > (u3
11040 32 29 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c  2)db->aLimit[SQL
11050 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48  ITE_LIMIT_LENGTH
11060 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f  ] ){.    goto to
11070 6f 5f 62 69 67 3b 0a 20 20 7d 0a 0a 20 20 6e 46  o_big;.  }..  nF
11080 69 65 6c 64 20 3d 20 70 43 2d 3e 6e 46 69 65 6c  ield = pC->nFiel
11090 64 3b 0a 20 20 61 73 73 65 72 74 28 20 70 32 3c  d;.  assert( p2<
110a0 6e 46 69 65 6c 64 20 29 3b 0a 0a 20 20 2f 2a 20  nField );..  /* 
110b0 52 65 61 64 20 61 6e 64 20 70 61 72 73 65 20 74  Read and parse t
110c0 68 65 20 74 61 62 6c 65 20 68 65 61 64 65 72 2e  he table header.
110d0 20 20 53 74 6f 72 65 20 74 68 65 20 72 65 73 75    Store the resu
110e0 6c 74 73 20 6f 66 20 74 68 65 20 70 61 72 73 65  lts of the parse
110f0 0a 20 20 2a 2a 20 69 6e 74 6f 20 74 68 65 20 72  .  ** into the r
11100 65 63 6f 72 64 20 68 65 61 64 65 72 20 63 61 63  ecord header cac
11110 68 65 20 66 69 65 6c 64 73 20 6f 66 20 74 68 65  he fields of the
11120 20 63 75 72 73 6f 72 2e 0a 20 20 2a 2f 0a 20 20   cursor..  */.  
11130 61 54 79 70 65 20 3d 20 70 43 2d 3e 61 54 79 70  aType = pC->aTyp
11140 65 3b 0a 20 20 69 66 28 20 70 43 2d 3e 63 61 63  e;.  if( pC->cac
11150 68 65 53 74 61 74 75 73 3d 3d 70 2d 3e 63 61 63  heStatus==p->cac
11160 68 65 43 74 72 20 29 7b 0a 20 20 20 20 61 4f 66  heCtr ){.    aOf
11170 66 73 65 74 20 3d 20 70 43 2d 3e 61 4f 66 66 73  fset = pC->aOffs
11180 65 74 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  et;.  }else{.   
11190 20 61 73 73 65 72 74 28 61 54 79 70 65 29 3b 0a   assert(aType);.
111a0 20 20 20 20 61 76 61 69 6c 20 3d 20 30 3b 0a 20      avail = 0;. 
111b0 20 20 20 70 43 2d 3e 61 4f 66 66 73 65 74 20 3d     pC->aOffset =
111c0 20 61 4f 66 66 73 65 74 20 3d 20 26 61 54 79 70   aOffset = &aTyp
111d0 65 5b 6e 46 69 65 6c 64 5d 3b 0a 20 20 20 20 70  e[nField];.    p
111e0 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d  C->payloadSize =
111f0 20 70 61 79 6c 6f 61 64 53 69 7a 65 3b 0a 20 20   payloadSize;.  
11200 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
11210 73 20 3d 20 70 2d 3e 63 61 63 68 65 43 74 72 3b  s = p->cacheCtr;
11220 0a 0a 20 20 20 20 2f 2a 20 46 69 67 75 72 65 20  ..    /* Figure 
11230 6f 75 74 20 68 6f 77 20 6d 61 6e 79 20 62 79 74  out how many byt
11240 65 73 20 61 72 65 20 69 6e 20 74 68 65 20 68 65  es are in the he
11250 61 64 65 72 20 2a 2f 0a 20 20 20 20 69 66 28 20  ader */.    if( 
11260 7a 52 65 63 20 29 7b 0a 20 20 20 20 20 20 7a 44  zRec ){.      zD
11270 61 74 61 20 3d 20 7a 52 65 63 3b 0a 20 20 20 20  ata = zRec;.    
11280 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 69 66 28  }else{.      if(
11290 20 70 43 2d 3e 69 73 49 6e 64 65 78 20 29 7b 0a   pC->isIndex ){.
112a0 20 20 20 20 20 20 20 20 7a 44 61 74 61 20 3d 20          zData = 
112b0 28 63 68 61 72 2a 29 73 71 6c 69 74 65 33 42 74  (char*)sqlite3Bt
112c0 72 65 65 4b 65 79 46 65 74 63 68 28 70 43 72 73  reeKeyFetch(pCrs
112d0 72 2c 20 26 61 76 61 69 6c 29 3b 0a 20 20 20 20  r, &avail);.    
112e0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
112f0 20 7a 44 61 74 61 20 3d 20 28 63 68 61 72 2a 29   zData = (char*)
11300 73 71 6c 69 74 65 33 42 74 72 65 65 44 61 74 61  sqlite3BtreeData
11310 46 65 74 63 68 28 70 43 72 73 72 2c 20 26 61 76  Fetch(pCrsr, &av
11320 61 69 6c 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  ail);.      }.  
11330 20 20 20 20 2f 2a 20 49 66 20 4b 65 79 46 65 74      /* If KeyFet
11340 63 68 28 29 2f 44 61 74 61 46 65 74 63 68 28 29  ch()/DataFetch()
11350 20 6d 61 6e 61 67 65 64 20 74 6f 20 67 65 74 20   managed to get 
11360 74 68 65 20 65 6e 74 69 72 65 20 70 61 79 6c 6f  the entire paylo
11370 61 64 2c 0a 20 20 20 20 20 20 2a 2a 20 73 61 76  ad,.      ** sav
11380 65 20 74 68 65 20 70 61 79 6c 6f 61 64 20 69 6e  e the payload in
11390 20 74 68 65 20 70 43 2d 3e 61 52 6f 77 20 63 61   the pC->aRow ca
113a0 63 68 65 2e 20 20 54 68 61 74 20 77 69 6c 6c 20  che.  That will 
113b0 73 61 76 65 20 75 73 20 66 72 6f 6d 0a 20 20 20  save us from.   
113c0 20 20 20 2a 2a 20 68 61 76 69 6e 67 20 74 6f 20     ** having to 
113d0 6d 61 6b 65 20 61 64 64 69 74 69 6f 6e 61 6c 20  make additional 
113e0 63 61 6c 6c 73 20 74 6f 20 66 65 74 63 68 20 74  calls to fetch t
113f0 68 65 20 63 6f 6e 74 65 6e 74 20 70 6f 72 74 69  he content porti
11400 6f 6e 20 6f 66 0a 20 20 20 20 20 20 2a 2a 20 74  on of.      ** t
11410 68 65 20 72 65 63 6f 72 64 2e 0a 20 20 20 20 20  he record..     
11420 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74   */.      assert
11430 28 20 61 76 61 69 6c 3e 3d 30 20 29 3b 0a 20 20  ( avail>=0 );.  
11440 20 20 20 20 69 66 28 20 70 61 79 6c 6f 61 64 53      if( payloadS
11450 69 7a 65 20 3c 3d 20 28 75 33 32 29 61 76 61 69  ize <= (u32)avai
11460 6c 20 29 7b 0a 20 20 20 20 20 20 20 20 7a 52 65  l ){.        zRe
11470 63 20 3d 20 7a 44 61 74 61 3b 0a 20 20 20 20 20  c = zData;.     
11480 20 20 20 70 43 2d 3e 61 52 6f 77 20 3d 20 28 75     pC->aRow = (u
11490 38 2a 29 7a 44 61 74 61 3b 0a 20 20 20 20 20 20  8*)zData;.      
114a0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 70  }else{.        p
114b0 43 2d 3e 61 52 6f 77 20 3d 20 30 3b 0a 20 20 20  C->aRow = 0;.   
114c0 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 2f     }.    }.    /
114d0 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
114e0 61 73 73 65 72 74 20 69 73 20 74 72 75 65 20 69  assert is true i
114f0 6e 20 61 6c 6c 20 63 61 73 65 73 20 61 63 63 65  n all cases acce
11500 70 74 20 77 68 65 6e 0a 20 20 20 20 2a 2a 20 74  pt when.    ** t
11510 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
11520 20 68 61 73 20 62 65 65 6e 20 63 6f 72 72 75 70   has been corrup
11530 74 65 64 20 65 78 74 65 72 6e 61 6c 6c 79 2e 0a  ted externally..
11540 20 20 20 20 2a 2a 20 20 20 20 61 73 73 65 72 74      **    assert
11550 28 20 7a 52 65 63 21 3d 30 20 7c 7c 20 61 76 61  ( zRec!=0 || ava
11560 69 6c 3e 3d 70 61 79 6c 6f 61 64 53 69 7a 65 20  il>=payloadSize 
11570 7c 7c 20 61 76 61 69 6c 3e 3d 39 20 29 3b 20 2a  || avail>=9 ); *
11580 2f 0a 20 20 20 20 73 7a 48 64 72 20 3d 20 67 65  /.    szHdr = ge
11590 74 56 61 72 69 6e 74 33 32 28 28 75 38 2a 29 7a  tVarint32((u8*)z
115a0 44 61 74 61 2c 20 6f 66 66 73 65 74 29 3b 0a 0a  Data, offset);..
115b0 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65      /* Make sure
115c0 20 61 20 63 6f 72 72 75 70 74 20 64 61 74 61 62   a corrupt datab
115d0 61 73 65 20 68 61 73 20 6e 6f 74 20 67 69 76 65  ase has not give
115e0 6e 20 75 73 20 61 6e 20 6f 76 65 72 73 69 7a 65  n us an oversize
115f0 20 68 65 61 64 65 72 2e 0a 20 20 20 20 2a 2a 20   header..    ** 
11600 44 6f 20 74 68 69 73 20 6e 6f 77 20 74 6f 20 61  Do this now to a
11610 76 6f 69 64 20 61 6e 20 6f 76 65 72 73 69 7a 65  void an oversize
11620 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
11630 6f 6e 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a  on..    **.    *
11640 2a 20 54 79 70 65 20 65 6e 74 72 69 65 73 20 63  * Type entries c
11650 61 6e 20 62 65 20 62 65 74 77 65 65 6e 20 31 20  an be between 1 
11660 61 6e 64 20 35 20 62 79 74 65 73 20 65 61 63 68  and 5 bytes each
11670 2e 20 20 42 75 74 20 34 20 61 6e 64 20 35 20 62  .  But 4 and 5 b
11680 79 74 65 0a 20 20 20 20 2a 2a 20 74 79 70 65 73  yte.    ** types
11690 20 75 73 65 20 73 6f 20 6d 75 63 68 20 64 61 74   use so much dat
116a0 61 20 73 70 61 63 65 20 74 68 61 74 20 74 68 65  a space that the
116b0 72 65 20 63 61 6e 20 6f 6e 6c 79 20 62 65 20 34  re can only be 4
116c0 30 39 36 20 61 6e 64 20 33 32 20 6f 66 0a 20 20  096 and 32 of.  
116d0 20 20 2a 2a 20 74 68 65 6d 2c 20 72 65 73 70 65    ** them, respe
116e0 63 74 69 76 65 6c 79 2e 20 20 53 6f 20 74 68 65  ctively.  So the
116f0 20 6d 61 78 69 6d 75 6d 20 68 65 61 64 65 72 20   maximum header 
11700 6c 65 6e 67 74 68 20 72 65 73 75 6c 74 73 20 66  length results f
11710 72 6f 6d 20 61 0a 20 20 20 20 2a 2a 20 33 2d 62  rom a.    ** 3-b
11720 79 74 65 20 74 79 70 65 20 66 6f 72 20 65 61 63  yte type for eac
11730 68 20 6f 66 20 74 68 65 20 6d 61 78 69 6d 75 6d  h of the maximum
11740 20 6f 66 20 33 32 37 36 38 20 63 6f 6c 75 6d 6e   of 32768 column
11750 73 20 70 6c 75 73 20 74 68 72 65 65 0a 20 20 20  s plus three.   
11760 20 2a 2a 20 65 78 74 72 61 20 62 79 74 65 73 20   ** extra bytes 
11770 66 6f 72 20 74 68 65 20 68 65 61 64 65 72 20 6c  for the header l
11780 65 6e 67 74 68 20 69 74 73 65 6c 66 2e 20 20 33  ength itself.  3
11790 32 37 36 38 2a 33 20 2b 20 33 20 3d 20 39 38 33  2768*3 + 3 = 983
117a0 30 37 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69  07..    */.    i
117b0 66 28 20 6f 66 66 73 65 74 20 3e 20 39 38 33 30  f( offset > 9830
117c0 37 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20  7 ){.      rc = 
117d0 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 42  SQLITE_CORRUPT_B
117e0 4b 50 54 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20  KPT;.      goto 
117f0 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20  op_column_out;. 
11800 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 20 43 6f 6d     }..    /* Com
11810 70 75 74 65 20 69 6e 20 6c 65 6e 20 74 68 65 20  pute in len the 
11820 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20  number of bytes 
11830 6f 66 20 64 61 74 61 20 77 65 20 6e 65 65 64 20  of data we need 
11840 74 6f 20 72 65 61 64 20 69 6e 20 6f 72 64 65 72  to read in order
11850 0a 20 20 20 20 2a 2a 20 74 6f 20 67 65 74 20 6e  .    ** to get n
11860 46 69 65 6c 64 20 74 79 70 65 20 76 61 6c 75 65  Field type value
11870 73 2e 20 20 6f 66 66 73 65 74 20 69 73 20 61 6e  s.  offset is an
11880 20 75 70 70 65 72 20 62 6f 75 6e 64 20 6f 6e 20   upper bound on 
11890 74 68 69 73 2e 20 20 42 75 74 0a 20 20 20 20 2a  this.  But.    *
118a0 2a 20 6e 46 69 65 6c 64 20 6d 69 67 68 74 20 62  * nField might b
118b0 65 20 73 69 67 6e 69 66 69 63 61 6e 74 6c 79 20  e significantly 
118c0 6c 65 73 73 20 74 68 61 6e 20 74 68 65 20 74 72  less than the tr
118d0 75 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  ue number of col
118e0 75 6d 6e 73 0a 20 20 20 20 2a 2a 20 69 6e 20 74  umns.    ** in t
118f0 68 65 20 74 61 62 6c 65 2c 20 61 6e 64 20 69 6e  he table, and in
11900 20 74 68 61 74 20 63 61 73 65 2c 20 35 2a 6e 46   that case, 5*nF
11910 69 65 6c 64 2b 33 20 6d 69 67 68 74 20 62 65 20  ield+3 might be 
11920 73 6d 61 6c 6c 65 72 20 74 68 61 6e 20 6f 66 66  smaller than off
11930 73 65 74 2e 0a 20 20 20 20 2a 2a 20 57 65 20 77  set..    ** We w
11940 61 6e 74 20 74 6f 20 6d 69 6e 69 6d 69 7a 65 20  ant to minimize 
11950 6c 65 6e 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  len in order to 
11960 6c 69 6d 69 74 20 74 68 65 20 73 69 7a 65 20 6f  limit the size o
11970 66 20 74 68 65 20 6d 65 6d 6f 72 79 0a 20 20 20  f the memory.   
11980 20 2a 2a 20 61 6c 6c 6f 63 61 74 69 6f 6e 2c 20   ** allocation, 
11990 65 73 70 65 63 69 61 6c 6c 79 20 69 66 20 61 20  especially if a 
119a0 63 6f 72 72 75 70 74 20 64 61 74 61 62 61 73 65  corrupt database
119b0 20 66 69 6c 65 20 68 61 73 20 63 61 75 73 65 64   file has caused
119c0 20 6f 66 66 73 65 74 0a 20 20 20 20 2a 2a 20 74   offset.    ** t
119d0 6f 20 62 65 20 6f 76 65 72 73 69 7a 65 64 2e 20  o be oversized. 
119e0 4f 66 66 73 65 74 20 69 73 20 6c 69 6d 69 74 65  Offset is limite
119f0 64 20 74 6f 20 39 38 33 30 37 20 61 62 6f 76 65  d to 98307 above
11a00 2e 20 20 42 75 74 20 39 38 33 30 37 20 6d 69 67  .  But 98307 mig
11a10 68 74 0a 20 20 20 20 2a 2a 20 73 74 69 6c 6c 20  ht.    ** still 
11a20 65 78 63 65 65 64 20 52 6f 62 73 6f 6e 20 6d 65  exceed Robson me
11a30 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20  mory allocation 
11a40 6c 69 6d 69 74 73 20 6f 6e 20 73 6f 6d 65 20 63  limits on some c
11a50 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73 2e 0a 20  onfigurations.. 
11a60 20 20 20 2a 2a 20 4f 6e 20 73 79 73 74 65 6d 73     ** On systems
11a70 20 74 68 61 74 20 63 61 6e 6e 6f 74 20 74 6f 6c   that cannot tol
11a80 65 72 61 74 65 20 6c 61 72 67 65 20 6d 65 6d 6f  erate large memo
11a90 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 2c 20  ry allocations, 
11aa0 6e 46 69 65 6c 64 2a 35 2b 33 0a 20 20 20 20 2a  nField*5+3.    *
11ab0 2a 20 77 69 6c 6c 20 6c 69 6b 65 6c 79 20 62 65  * will likely be
11ac0 20 6d 75 63 68 20 73 6d 61 6c 6c 65 72 20 73 69   much smaller si
11ad0 6e 63 65 20 6e 46 69 65 6c 64 20 77 69 6c 6c 20  nce nField will 
11ae0 6c 69 6b 65 6c 79 20 62 65 20 6c 65 73 73 20 74  likely be less t
11af0 68 61 6e 0a 20 20 20 20 2a 2a 20 32 30 20 6f 72  han.    ** 20 or
11b00 20 73 6f 2e 20 20 54 68 69 73 20 69 6e 73 75 72   so.  This insur
11b10 65 73 20 74 68 61 74 20 52 6f 62 73 6f 6e 20 6d  es that Robson m
11b20 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e  emory allocation
11b30 20 6c 69 6d 69 74 73 20 61 72 65 0a 20 20 20 20   limits are.    
11b40 2a 2a 20 6e 6f 74 20 65 78 63 65 65 64 65 64 20  ** not exceeded 
11b50 65 76 65 6e 20 66 6f 72 20 63 6f 72 72 75 70 74  even for corrupt
11b60 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 73 2e   database files.
11b70 0a 20 20 20 20 2a 2f 0a 20 20 20 20 6c 65 6e 20  .    */.    len 
11b80 3d 20 6e 46 69 65 6c 64 2a 35 20 2b 20 33 3b 0a  = nField*5 + 3;.
11b90 20 20 20 20 69 66 28 20 6c 65 6e 20 3e 20 28 69      if( len > (i
11ba0 6e 74 29 6f 66 66 73 65 74 20 29 20 6c 65 6e 20  nt)offset ) len 
11bb0 3d 20 28 69 6e 74 29 6f 66 66 73 65 74 3b 0a 0a  = (int)offset;..
11bc0 20 20 20 20 2f 2a 20 54 68 65 20 4b 65 79 46 65      /* The KeyFe
11bd0 74 63 68 28 29 20 6f 72 20 44 61 74 61 46 65 74  tch() or DataFet
11be0 63 68 28 29 20 61 62 6f 76 65 20 61 72 65 20 66  ch() above are f
11bf0 61 73 74 20 61 6e 64 20 77 69 6c 6c 20 67 65 74  ast and will get
11c00 20 74 68 65 20 65 6e 74 69 72 65 0a 20 20 20 20   the entire.    
11c10 2a 2a 20 72 65 63 6f 72 64 20 68 65 61 64 65 72  ** record header
11c20 20 69 6e 20 6d 6f 73 74 20 63 61 73 65 73 2e 20   in most cases. 
11c30 20 42 75 74 20 74 68 65 79 20 77 69 6c 6c 20 66   But they will f
11c40 61 69 6c 20 74 6f 20 67 65 74 20 74 68 65 20 63  ail to get the c
11c50 6f 6d 70 6c 65 74 65 0a 20 20 20 20 2a 2a 20 72  omplete.    ** r
11c60 65 63 6f 72 64 20 68 65 61 64 65 72 20 69 66 20  ecord header if 
11c70 74 68 65 20 72 65 63 6f 72 64 20 68 65 61 64 65  the record heade
11c80 72 20 64 6f 65 73 20 6e 6f 74 20 66 69 74 20 6f  r does not fit o
11c90 6e 20 61 20 73 69 6e 67 6c 65 20 70 61 67 65 0a  n a single page.
11ca0 20 20 20 20 2a 2a 20 69 6e 20 74 68 65 20 42 2d      ** in the B-
11cb0 54 72 65 65 2e 20 20 57 68 65 6e 20 74 68 61 74  Tree.  When that
11cc0 20 68 61 70 70 65 6e 73 2c 20 75 73 65 20 73 71   happens, use sq
11cd0 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d  lite3VdbeMemFrom
11ce0 42 74 72 65 65 28 29 20 74 6f 0a 20 20 20 20 2a  Btree() to.    *
11cf0 2a 20 61 63 71 75 69 72 65 20 74 68 65 20 63 6f  * acquire the co
11d00 6d 70 6c 65 74 65 20 68 65 61 64 65 72 20 74 65  mplete header te
11d10 78 74 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69  xt..    */.    i
11d20 66 28 20 21 7a 52 65 63 20 26 26 20 61 76 61 69  f( !zRec && avai
11d30 6c 3c 6c 65 6e 20 29 7b 0a 20 20 20 20 20 20 73  l<len ){.      s
11d40 4d 65 6d 2e 66 6c 61 67 73 20 3d 20 30 3b 0a 20  Mem.flags = 0;. 
11d50 20 20 20 20 20 73 4d 65 6d 2e 64 62 20 3d 20 30       sMem.db = 0
11d60 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  ;.      rc = sql
11d70 69 74 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d 42  ite3VdbeMemFromB
11d80 74 72 65 65 28 70 43 72 73 72 2c 20 30 2c 20 6c  tree(pCrsr, 0, l
11d90 65 6e 2c 20 70 43 2d 3e 69 73 49 6e 64 65 78 2c  en, pC->isIndex,
11da0 20 26 73 4d 65 6d 29 3b 0a 20 20 20 20 20 20 69   &sMem);.      i
11db0 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
11dc0 20 29 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f   ){.        goto
11dd0 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a   op_column_out;.
11de0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7a 44        }.      zD
11df0 61 74 61 20 3d 20 73 4d 65 6d 2e 7a 3b 0a 20 20  ata = sMem.z;.  
11e00 20 20 7d 0a 20 20 20 20 7a 45 6e 64 48 64 72 20    }.    zEndHdr 
11e10 3d 20 28 75 38 20 2a 29 26 7a 44 61 74 61 5b 6c  = (u8 *)&zData[l
11e20 65 6e 5d 3b 0a 20 20 20 20 7a 49 64 78 20 3d 20  en];.    zIdx = 
11e30 28 75 38 20 2a 29 26 7a 44 61 74 61 5b 73 7a 48  (u8 *)&zData[szH
11e40 64 72 5d 3b 0a 0a 20 20 20 20 2f 2a 20 53 63 61  dr];..    /* Sca
11e50 6e 20 74 68 65 20 68 65 61 64 65 72 20 61 6e 64  n the header and
11e60 20 75 73 65 20 69 74 20 74 6f 20 66 69 6c 6c 20   use it to fill 
11e70 69 6e 20 74 68 65 20 61 54 79 70 65 5b 5d 20 61  in the aType[] a
11e80 6e 64 20 61 4f 66 66 73 65 74 5b 5d 0a 20 20 20  nd aOffset[].   
11e90 20 2a 2a 20 61 72 72 61 79 73 2e 20 20 61 54 79   ** arrays.  aTy
11ea0 70 65 5b 69 5d 20 77 69 6c 6c 20 63 6f 6e 74 61  pe[i] will conta
11eb0 69 6e 20 74 68 65 20 74 79 70 65 20 69 6e 74 65  in the type inte
11ec0 67 65 72 20 66 6f 72 20 74 68 65 20 69 2d 74 68  ger for the i-th
11ed0 0a 20 20 20 20 2a 2a 20 63 6f 6c 75 6d 6e 20 61  .    ** column a
11ee0 6e 64 20 61 4f 66 66 73 65 74 5b 69 5d 20 77 69  nd aOffset[i] wi
11ef0 6c 6c 20 63 6f 6e 74 61 69 6e 20 74 68 65 20 6f  ll contain the o
11f00 66 66 73 65 74 20 66 72 6f 6d 20 74 68 65 20 62  ffset from the b
11f10 65 67 69 6e 6e 69 6e 67 0a 20 20 20 20 2a 2a 20  eginning.    ** 
11f20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f  of the record to
11f30 20 74 68 65 20 73 74 61 72 74 20 6f 66 20 74 68   the start of th
11f40 65 20 64 61 74 61 20 66 6f 72 20 74 68 65 20 69  e data for the i
11f50 2d 74 68 20 63 6f 6c 75 6d 6e 0a 20 20 20 20 2a  -th column.    *
11f60 2f 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69  /.    for(i=0; i
11f70 3c 6e 46 69 65 6c 64 3b 20 69 2b 2b 29 7b 0a 20  <nField; i++){. 
11f80 20 20 20 20 20 69 66 28 20 7a 49 64 78 3c 7a 45       if( zIdx<zE
11f90 6e 64 48 64 72 20 29 7b 0a 20 20 20 20 20 20 20  ndHdr ){.       
11fa0 20 61 4f 66 66 73 65 74 5b 69 5d 20 3d 20 6f 66   aOffset[i] = of
11fb0 66 73 65 74 3b 0a 20 20 20 20 20 20 20 20 7a 49  fset;.        zI
11fc0 64 78 20 2b 3d 20 67 65 74 56 61 72 69 6e 74 33  dx += getVarint3
11fd0 32 28 7a 49 64 78 2c 20 61 54 79 70 65 5b 69 5d  2(zIdx, aType[i]
11fe0 29 3b 0a 20 20 20 20 20 20 20 20 73 7a 46 69 65  );.        szFie
11ff0 6c 64 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  ld = sqlite3Vdbe
12000 53 65 72 69 61 6c 54 79 70 65 4c 65 6e 28 61 54  SerialTypeLen(aT
12010 79 70 65 5b 69 5d 29 3b 0a 20 20 20 20 20 20 20  ype[i]);.       
12020 20 6f 66 66 73 65 74 20 2b 3d 20 73 7a 46 69 65   offset += szFie
12030 6c 64 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  ld;.        if( 
12040 6f 66 66 73 65 74 3c 73 7a 46 69 65 6c 64 20 29  offset<szField )
12050 7b 20 20 2f 2a 20 54 72 75 65 20 69 66 20 6f 66  {  /* True if of
12060 66 73 65 74 20 6f 76 65 72 66 6c 6f 77 73 20 2a  fset overflows *
12070 2f 0a 20 20 20 20 20 20 20 20 20 20 7a 49 64 78  /.          zIdx
12080 20 3d 20 26 7a 45 6e 64 48 64 72 5b 31 5d 3b 20   = &zEndHdr[1]; 
12090 20 2f 2a 20 46 6f 72 63 65 73 20 53 51 4c 49 54   /* Forces SQLIT
120a0 45 5f 43 4f 52 52 55 50 54 20 72 65 74 75 72 6e  E_CORRUPT return
120b0 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 20 20 20 20   below */.      
120c0 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
120d0 20 20 20 7d 0a 20 20 20 20 20 20 7d 65 6c 73 65     }.      }else
120e0 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20  {.        /* If 
120f0 69 20 69 73 20 6c 65 73 73 20 74 68 61 74 20 6e  i is less that n
12100 46 69 65 6c 64 2c 20 74 68 65 6e 20 74 68 65 72  Field, then ther
12110 65 20 61 72 65 20 6c 65 73 73 20 66 69 65 6c 64  e are less field
12120 73 20 69 6e 20 74 68 69 73 0a 20 20 20 20 20 20  s in this.      
12130 20 20 2a 2a 20 72 65 63 6f 72 64 20 74 68 61 6e    ** record than
12140 20 53 65 74 4e 75 6d 43 6f 6c 75 6d 6e 73 20 69   SetNumColumns i
12150 6e 64 69 63 61 74 65 64 20 74 68 65 72 65 20 61  ndicated there a
12160 72 65 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  re columns in th
12170 65 0a 20 20 20 20 20 20 20 20 2a 2a 20 74 61 62  e.        ** tab
12180 6c 65 2e 20 53 65 74 20 74 68 65 20 6f 66 66 73  le. Set the offs
12190 65 74 20 66 6f 72 20 61 6e 79 20 65 78 74 72 61  et for any extra
121a0 20 63 6f 6c 75 6d 6e 73 20 6e 6f 74 20 70 72 65   columns not pre
121b0 73 65 6e 74 20 69 6e 0a 20 20 20 20 20 20 20 20  sent in.        
121c0 2a 2a 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f  ** the record to
121d0 20 30 2e 20 54 68 69 73 20 74 65 6c 6c 73 20 63   0. This tells c
121e0 6f 64 65 20 62 65 6c 6f 77 20 74 6f 20 73 74 6f  ode below to sto
121f0 72 65 20 61 20 4e 55 4c 4c 0a 20 20 20 20 20 20  re a NULL.      
12200 20 20 2a 2a 20 69 6e 73 74 65 61 64 20 6f 66 20    ** instead of 
12210 64 65 73 65 72 69 61 6c 69 7a 69 6e 67 20 61 20  deserializing a 
12220 76 61 6c 75 65 20 66 72 6f 6d 20 74 68 65 20 72  value from the r
12230 65 63 6f 72 64 2e 0a 20 20 20 20 20 20 20 20 2a  ecord..        *
12240 2f 0a 20 20 20 20 20 20 20 20 61 4f 66 66 73 65  /.        aOffse
12250 74 5b 69 5d 20 3d 20 30 3b 0a 20 20 20 20 20 20  t[i] = 0;.      
12260 7d 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69  }.    }.    sqli
12270 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73  te3VdbeMemReleas
12280 65 28 26 73 4d 65 6d 29 3b 0a 20 20 20 20 73 4d  e(&sMem);.    sM
12290 65 6d 2e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e  em.flags = MEM_N
122a0 75 6c 6c 3b 0a 0a 20 20 20 20 2f 2a 20 49 66 20  ull;..    /* If 
122b0 77 65 20 68 61 76 65 20 72 65 61 64 20 6d 6f 72  we have read mor
122c0 65 20 68 65 61 64 65 72 20 64 61 74 61 20 74 68  e header data th
122d0 61 6e 20 77 61 73 20 63 6f 6e 74 61 69 6e 65 64  an was contained
122e0 20 69 6e 20 74 68 65 20 68 65 61 64 65 72 2c 0a   in the header,.
122f0 20 20 20 20 2a 2a 20 6f 72 20 69 66 20 74 68 65      ** or if the
12300 20 65 6e 64 20 6f 66 20 74 68 65 20 6c 61 73 74   end of the last
12310 20 66 69 65 6c 64 20 61 70 70 65 61 72 73 20 74   field appears t
12320 6f 20 62 65 20 70 61 73 74 20 74 68 65 20 65 6e  o be past the en
12330 64 20 6f 66 20 74 68 65 0a 20 20 20 20 2a 2a 20  d of the.    ** 
12340 72 65 63 6f 72 64 2c 20 6f 72 20 69 66 20 74 68  record, or if th
12350 65 20 65 6e 64 20 6f 66 20 74 68 65 20 6c 61 73  e end of the las
12360 74 20 66 69 65 6c 64 20 61 70 70 65 61 72 73 20  t field appears 
12370 74 6f 20 62 65 20 62 65 66 6f 72 65 20 74 68 65  to be before the
12380 20 65 6e 64 0a 20 20 20 20 2a 2a 20 6f 66 20 74   end.    ** of t
12390 68 65 20 72 65 63 6f 72 64 20 28 77 68 65 6e 20  he record (when 
123a0 61 6c 6c 20 66 69 65 6c 64 73 20 70 72 65 73 65  all fields prese
123b0 6e 74 29 2c 20 74 68 65 6e 20 77 65 20 6d 75 73  nt), then we mus
123c0 74 20 62 65 20 64 65 61 6c 69 6e 67 20 0a 20 20  t be dealing .  
123d0 20 20 2a 2a 20 77 69 74 68 20 61 20 63 6f 72 72    ** with a corr
123e0 75 70 74 20 64 61 74 61 62 61 73 65 2e 0a 20 20  upt database..  
123f0 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 28 7a 49    */.    if( (zI
12400 64 78 20 3e 20 7a 45 6e 64 48 64 72 29 20 7c 7c  dx > zEndHdr) ||
12410 20 28 6f 66 66 73 65 74 20 3e 20 70 61 79 6c 6f   (offset > paylo
12420 61 64 53 69 7a 65 29 0a 20 20 20 20 20 20 20 20  adSize).        
12430 20 7c 7c 20 28 7a 49 64 78 3d 3d 7a 45 6e 64 48   || (zIdx==zEndH
12440 64 72 20 26 26 20 6f 66 66 73 65 74 21 3d 70 61  dr && offset!=pa
12450 79 6c 6f 61 64 53 69 7a 65 29 20 29 7b 0a 20 20  yloadSize) ){.  
12460 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
12470 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20  CORRUPT_BKPT;.  
12480 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75      goto op_colu
12490 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20 7d 0a 20 20  mn_out;.    }.  
124a0 7d 0a 0a 20 20 2f 2a 20 47 65 74 20 74 68 65 20  }..  /* Get the 
124b0 63 6f 6c 75 6d 6e 20 69 6e 66 6f 72 6d 61 74 69  column informati
124c0 6f 6e 2e 20 49 66 20 61 4f 66 66 73 65 74 5b 70  on. If aOffset[p
124d0 32 5d 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20  2] is non-zero, 
124e0 74 68 65 6e 20 0a 20 20 2a 2a 20 64 65 73 65 72  then .  ** deser
124f0 69 61 6c 69 7a 65 20 74 68 65 20 76 61 6c 75 65  ialize the value
12500 20 66 72 6f 6d 20 74 68 65 20 72 65 63 6f 72 64   from the record
12510 2e 20 49 66 20 61 4f 66 66 73 65 74 5b 70 32 5d  . If aOffset[p2]
12520 20 69 73 20 7a 65 72 6f 2c 0a 20 20 2a 2a 20 74   is zero,.  ** t
12530 68 65 6e 20 74 68 65 72 65 20 61 72 65 20 6e 6f  hen there are no
12540 74 20 65 6e 6f 75 67 68 20 66 69 65 6c 64 73 20  t enough fields 
12550 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f  in the record to
12560 20 73 61 74 69 73 66 79 20 74 68 65 0a 20 20 2a   satisfy the.  *
12570 2a 20 72 65 71 75 65 73 74 2e 20 20 49 6e 20 74  * request.  In t
12580 68 69 73 20 63 61 73 65 2c 20 73 65 74 20 74 68  his case, set th
12590 65 20 76 61 6c 75 65 20 4e 55 4c 4c 20 6f 72 20  e value NULL or 
125a0 74 6f 20 50 34 20 69 66 20 50 34 20 69 73 0a 20  to P4 if P4 is. 
125b0 20 2a 2a 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   ** a pointer to
125c0 20 61 20 4d 65 6d 20 6f 62 6a 65 63 74 2e 0a 20   a Mem object.. 
125d0 20 2a 2f 0a 20 20 69 66 28 20 61 4f 66 66 73 65   */.  if( aOffse
125e0 74 5b 70 32 5d 20 29 7b 0a 20 20 20 20 61 73 73  t[p2] ){.    ass
125f0 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f  ert( rc==SQLITE_
12600 4f 4b 20 29 3b 0a 20 20 20 20 69 66 28 20 7a 52  OK );.    if( zR
12610 65 63 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  ec ){.      sqli
12620 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73  te3VdbeMemReleas
12630 65 45 78 74 65 72 6e 61 6c 28 70 44 65 73 74 29  eExternal(pDest)
12640 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
12650 64 62 65 53 65 72 69 61 6c 47 65 74 28 28 75 38  dbeSerialGet((u8
12660 20 2a 29 26 7a 52 65 63 5b 61 4f 66 66 73 65 74   *)&zRec[aOffset
12670 5b 70 32 5d 5d 2c 20 61 54 79 70 65 5b 70 32 5d  [p2]], aType[p2]
12680 2c 20 70 44 65 73 74 29 3b 0a 20 20 20 20 7d 65  , pDest);.    }e
12690 6c 73 65 7b 0a 20 20 20 20 20 20 6c 65 6e 20 3d  lse{.      len =
126a0 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69   sqlite3VdbeSeri
126b0 61 6c 54 79 70 65 4c 65 6e 28 61 54 79 70 65 5b  alTypeLen(aType[
126c0 70 32 5d 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  p2]);.      sqli
126d0 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28 26  te3VdbeMemMove(&
126e0 73 4d 65 6d 2c 20 70 44 65 73 74 29 3b 0a 20 20  sMem, pDest);.  
126f0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
12700 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65  VdbeMemFromBtree
12710 28 70 43 72 73 72 2c 20 61 4f 66 66 73 65 74 5b  (pCrsr, aOffset[
12720 70 32 5d 2c 20 6c 65 6e 2c 20 70 43 2d 3e 69 73  p2], len, pC->is
12730 49 6e 64 65 78 2c 20 26 73 4d 65 6d 29 3b 0a 20  Index, &sMem);. 
12740 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c       if( rc!=SQL
12750 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
12760 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e    goto op_column
12770 5f 6f 75 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20  _out;.      }.  
12780 20 20 20 20 7a 44 61 74 61 20 3d 20 73 4d 65 6d      zData = sMem
12790 2e 7a 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  .z;.      sqlite
127a0 33 56 64 62 65 53 65 72 69 61 6c 47 65 74 28 28  3VdbeSerialGet((
127b0 75 38 2a 29 7a 44 61 74 61 2c 20 61 54 79 70 65  u8*)zData, aType
127c0 5b 70 32 5d 2c 20 70 44 65 73 74 29 3b 0a 20 20  [p2], pDest);.  
127d0 20 20 7d 0a 20 20 20 20 70 44 65 73 74 2d 3e 65    }.    pDest->e
127e0 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 20  nc = encoding;. 
127f0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69 66 28 20   }else{.    if( 
12800 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
12810 4d 45 4d 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  MEM ){.      sql
12820 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c  ite3VdbeMemShall
12830 6f 77 43 6f 70 79 28 70 44 65 73 74 2c 20 70 4f  owCopy(pDest, pO
12840 70 2d 3e 70 34 2e 70 4d 65 6d 2c 20 4d 45 4d 5f  p->p4.pMem, MEM_
12850 53 74 61 74 69 63 29 3b 0a 20 20 20 20 7d 65 6c  Static);.    }el
12860 73 65 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74  se{.      assert
12870 28 20 70 44 65 73 74 2d 3e 66 6c 61 67 73 26 4d  ( pDest->flags&M
12880 45 4d 5f 4e 75 6c 6c 20 29 3b 0a 20 20 20 20 7d  EM_Null );.    }
12890 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20 77 65  .  }..  /* If we
128a0 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c   dynamically all
128b0 6f 63 61 74 65 64 20 73 70 61 63 65 20 74 6f 20  ocated space to 
128c0 68 6f 6c 64 20 74 68 65 20 64 61 74 61 20 28 69  hold the data (i
128d0 6e 20 74 68 65 0a 20 20 2a 2a 20 73 71 6c 69 74  n the.  ** sqlit
128e0 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72  e3VdbeMemFromBtr
128f0 65 65 28 29 20 63 61 6c 6c 20 61 62 6f 76 65 29  ee() call above)
12900 20 74 68 65 6e 20 74 72 61 6e 73 66 65 72 20 63   then transfer c
12910 6f 6e 74 72 6f 6c 20 6f 66 20 74 68 61 74 0a 20  ontrol of that. 
12920 20 2a 2a 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20   ** dynamically 
12930 61 6c 6c 6f 63 61 74 65 64 20 73 70 61 63 65 20  allocated space 
12940 6f 76 65 72 20 74 6f 20 74 68 65 20 70 44 65 73  over to the pDes
12950 74 20 73 74 72 75 63 74 75 72 65 2e 0a 20 20 2a  t structure..  *
12960 2a 20 54 68 69 73 20 70 72 65 76 65 6e 74 73 20  * This prevents 
12970 61 20 6d 65 6d 6f 72 79 20 63 6f 70 79 2e 0a 20  a memory copy.. 
12980 20 2a 2f 0a 20 20 69 66 28 20 73 4d 65 6d 2e 7a   */.  if( sMem.z
12990 4d 61 6c 6c 6f 63 20 29 7b 0a 20 20 20 20 61 73  Malloc ){.    as
129a0 73 65 72 74 28 20 73 4d 65 6d 2e 7a 3d 3d 73 4d  sert( sMem.z==sM
129b0 65 6d 2e 7a 4d 61 6c 6c 6f 63 20 29 3b 0a 20 20  em.zMalloc );.  
129c0 20 20 61 73 73 65 72 74 28 20 21 28 70 44 65 73    assert( !(pDes
129d0 74 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 44  t->flags & MEM_D
129e0 79 6e 29 20 29 3b 0a 20 20 20 20 61 73 73 65 72  yn) );.    asser
129f0 74 28 20 21 28 70 44 65 73 74 2d 3e 66 6c 61 67  t( !(pDest->flag
12a00 73 20 26 20 28 4d 45 4d 5f 42 6c 6f 62 7c 4d 45  s & (MEM_Blob|ME
12a10 4d 5f 53 74 72 29 29 20 7c 7c 20 70 44 65 73 74  M_Str)) || pDest
12a20 2d 3e 7a 3d 3d 73 4d 65 6d 2e 7a 20 29 3b 0a 20  ->z==sMem.z );. 
12a30 20 20 20 70 44 65 73 74 2d 3e 66 6c 61 67 73 20     pDest->flags 
12a40 26 3d 20 7e 28 4d 45 4d 5f 45 70 68 65 6d 7c 4d  &= ~(MEM_Ephem|M
12a50 45 4d 5f 53 74 61 74 69 63 29 3b 0a 20 20 20 20  EM_Static);.    
12a60 70 44 65 73 74 2d 3e 66 6c 61 67 73 20 7c 3d 20  pDest->flags |= 
12a70 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 20 20 70 44  MEM_Term;.    pD
12a80 65 73 74 2d 3e 7a 20 3d 20 73 4d 65 6d 2e 7a 3b  est->z = sMem.z;
12a90 0a 20 20 20 20 70 44 65 73 74 2d 3e 7a 4d 61 6c  .    pDest->zMal
12aa0 6c 6f 63 20 3d 20 73 4d 65 6d 2e 7a 4d 61 6c 6c  loc = sMem.zMall
12ab0 6f 63 3b 0a 20 20 7d 0a 0a 20 20 72 63 20 3d 20  oc;.  }..  rc = 
12ac0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d 61  sqlite3VdbeMemMa
12ad0 6b 65 57 72 69 74 65 61 62 6c 65 28 70 44 65 73  keWriteable(pDes
12ae0 74 29 3b 0a 0a 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f  t);..op_column_o
12af0 75 74 3a 0a 20 20 55 50 44 41 54 45 5f 4d 41 58  ut:.  UPDATE_MAX
12b00 5f 42 4c 4f 42 53 49 5a 45 28 70 44 65 73 74 29  _BLOBSIZE(pDest)
12b10 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41  ;.  REGISTER_TRA
12b20 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 44 65 73  CE(pOp->p3, pDes
12b30 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
12b40 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 66 66 69 6e  /* Opcode: Affin
12b50 69 74 79 20 50 31 20 50 32 20 2a 20 50 34 20 2a  ity P1 P2 * P4 *
12b60 0a 2a 2a 0a 2a 2a 20 41 70 70 6c 79 20 61 66 66  .**.** Apply aff
12b70 69 6e 69 74 69 65 73 20 74 6f 20 61 20 72 61 6e  inities to a ran
12b80 67 65 20 6f 66 20 50 32 20 72 65 67 69 73 74 65  ge of P2 registe
12b90 72 73 20 73 74 61 72 74 69 6e 67 20 77 69 74 68  rs starting with
12ba0 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73   P1..**.** P4 is
12bb0 20 61 20 73 74 72 69 6e 67 20 74 68 61 74 20 69   a string that i
12bc0 73 20 50 32 20 63 68 61 72 61 63 74 65 72 73 20  s P2 characters 
12bd0 6c 6f 6e 67 2e 20 54 68 65 20 6e 74 68 20 63 68  long. The nth ch
12be0 61 72 61 63 74 65 72 20 6f 66 20 74 68 65 0a 2a  aracter of the.*
12bf0 2a 20 73 74 72 69 6e 67 20 69 6e 64 69 63 61 74  * string indicat
12c00 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61 66  es the column af
12c10 66 69 6e 69 74 79 20 74 68 61 74 20 73 68 6f 75  finity that shou
12c20 6c 64 20 62 65 20 75 73 65 64 20 66 6f 72 20 74  ld be used for t
12c30 68 65 20 6e 74 68 0a 2a 2a 20 6d 65 6d 6f 72 79  he nth.** memory
12c40 20 63 65 6c 6c 20 69 6e 20 74 68 65 20 72 61 6e   cell in the ran
12c50 67 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41  ge..*/.case OP_A
12c60 66 66 69 6e 69 74 79 3a 20 7b 0a 20 20 63 6f 6e  ffinity: {.  con
12c70 73 74 20 63 68 61 72 20 2a 7a 41 66 66 69 6e 69  st char *zAffini
12c80 74 79 3b 20 20 20 2f 2a 20 54 68 65 20 61 66 66  ty;   /* The aff
12c90 69 6e 69 74 79 20 74 6f 20 62 65 20 61 70 70 6c  inity to be appl
12ca0 69 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 63 41  ied */.  char cA
12cb0 66 66 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ff;             
12cc0 20 20 2f 2a 20 41 20 73 69 6e 67 6c 65 20 63 68    /* A single ch
12cd0 61 72 61 63 74 65 72 20 6f 66 20 61 66 66 69 6e  aracter of affin
12ce0 69 74 79 20 2a 2f 0a 0a 20 20 7a 41 66 66 69 6e  ity */..  zAffin
12cf0 69 74 79 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b  ity = pOp->p4.z;
12d00 0a 20 20 61 73 73 65 72 74 28 20 7a 41 66 66 69  .  assert( zAffi
12d10 6e 69 74 79 21 3d 30 20 29 3b 0a 20 20 61 73 73  nity!=0 );.  ass
12d20 65 72 74 28 20 7a 41 66 66 69 6e 69 74 79 5b 70  ert( zAffinity[p
12d30 4f 70 2d 3e 70 32 5d 3d 3d 30 20 29 3b 0a 20 20  Op->p2]==0 );.  
12d40 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
12d50 2d 3e 70 31 5d 3b 0a 20 20 77 68 69 6c 65 28 20  ->p1];.  while( 
12d60 28 63 41 66 66 20 3d 20 2a 28 7a 41 66 66 69 6e  (cAff = *(zAffin
12d70 69 74 79 2b 2b 29 29 21 3d 30 20 29 7b 0a 20 20  ity++))!=0 ){.  
12d80 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 20 3c    assert( pIn1 <
12d90 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 2d 3e 6e 4d  = &p->aMem[p->nM
12da0 65 6d 5d 20 29 3b 0a 20 20 20 20 61 73 73 65 72  em] );.    asser
12db0 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 49  t( memIsValid(pI
12dc0 6e 31 29 20 29 3b 0a 20 20 20 20 45 78 70 61 6e  n1) );.    Expan
12dd0 64 42 6c 6f 62 28 70 49 6e 31 29 3b 0a 20 20 20  dBlob(pIn1);.   
12de0 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70   applyAffinity(p
12df0 49 6e 31 2c 20 63 41 66 66 2c 20 65 6e 63 6f 64  In1, cAff, encod
12e00 69 6e 67 29 3b 0a 20 20 20 20 70 49 6e 31 2b 2b  ing);.    pIn1++
12e10 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
12e20 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 61 6b  ../* Opcode: Mak
12e30 65 52 65 63 6f 72 64 20 50 31 20 50 32 20 50 33  eRecord P1 P2 P3
12e40 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 43 6f 6e 76   P4 *.**.** Conv
12e50 65 72 74 20 50 32 20 72 65 67 69 73 74 65 72 73  ert P2 registers
12e60 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20   beginning with 
12e70 50 31 20 69 6e 74 6f 20 74 68 65 20 5b 72 65 63  P1 into the [rec
12e80 6f 72 64 20 66 6f 72 6d 61 74 5d 0a 2a 2a 20 75  ord format].** u
12e90 73 65 20 61 73 20 61 20 64 61 74 61 20 72 65 63  se as a data rec
12ea0 6f 72 64 20 69 6e 20 61 20 64 61 74 61 62 61 73  ord in a databas
12eb0 65 20 74 61 62 6c 65 20 6f 72 20 61 73 20 61 20  e table or as a 
12ec0 6b 65 79 0a 2a 2a 20 69 6e 20 61 6e 20 69 6e 64  key.** in an ind
12ed0 65 78 2e 20 20 54 68 65 20 4f 50 5f 43 6f 6c 75  ex.  The OP_Colu
12ee0 6d 6e 20 6f 70 63 6f 64 65 20 63 61 6e 20 64 65  mn opcode can de
12ef0 63 6f 64 65 20 74 68 65 20 72 65 63 6f 72 64 20  code the record 
12f00 6c 61 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 50 34 20  later..**.** P4 
12f10 6d 61 79 20 62 65 20 61 20 73 74 72 69 6e 67 20  may be a string 
12f20 74 68 61 74 20 69 73 20 50 32 20 63 68 61 72 61  that is P2 chara
12f30 63 74 65 72 73 20 6c 6f 6e 67 2e 20 20 54 68 65  cters long.  The
12f40 20 6e 74 68 20 63 68 61 72 61 63 74 65 72 20 6f   nth character o
12f50 66 20 74 68 65 0a 2a 2a 20 73 74 72 69 6e 67 20  f the.** string 
12f60 69 6e 64 69 63 61 74 65 73 20 74 68 65 20 63 6f  indicates the co
12f70 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 20 74 68  lumn affinity th
12f80 61 74 20 73 68 6f 75 6c 64 20 62 65 20 75 73 65  at should be use
12f90 64 20 66 6f 72 20 74 68 65 20 6e 74 68 0a 2a 2a  d for the nth.**
12fa0 20 66 69 65 6c 64 20 6f 66 20 74 68 65 20 69 6e   field of the in
12fb0 64 65 78 20 6b 65 79 2e 0a 2a 2a 0a 2a 2a 20 54  dex key..**.** T
12fc0 68 65 20 6d 61 70 70 69 6e 67 20 66 72 6f 6d 20  he mapping from 
12fd0 63 68 61 72 61 63 74 65 72 20 74 6f 20 61 66 66  character to aff
12fe0 69 6e 69 74 79 20 69 73 20 67 69 76 65 6e 20 62  inity is given b
12ff0 79 20 74 68 65 20 53 51 4c 49 54 45 5f 41 46 46  y the SQLITE_AFF
13000 5f 0a 2a 2a 20 6d 61 63 72 6f 73 20 64 65 66 69  _.** macros defi
13010 6e 65 64 20 69 6e 20 73 71 6c 69 74 65 49 6e 74  ned in sqliteInt
13020 2e 68 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20  .h..**.** If P4 
13030 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 61 6c 6c  is NULL then all
13040 20 69 6e 64 65 78 20 66 69 65 6c 64 73 20 68 61   index fields ha
13050 76 65 20 74 68 65 20 61 66 66 69 6e 69 74 79 20  ve the affinity 
13060 4e 4f 4e 45 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  NONE..*/.case OP
13070 5f 4d 61 6b 65 52 65 63 6f 72 64 3a 20 7b 0a 20  _MakeRecord: {. 
13080 20 75 38 20 2a 7a 4e 65 77 52 65 63 6f 72 64 3b   u8 *zNewRecord;
13090 20 20 20 20 20 20 20 20 2f 2a 20 41 20 62 75 66          /* A buf
130a0 66 65 72 20 74 6f 20 68 6f 6c 64 20 74 68 65 20  fer to hold the 
130b0 64 61 74 61 20 66 6f 72 20 74 68 65 20 6e 65 77  data for the new
130c0 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 4d 65 6d   record */.  Mem
130d0 20 2a 70 52 65 63 3b 20 20 20 20 20 20 20 20 20   *pRec;         
130e0 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 77 20 72      /* The new r
130f0 65 63 6f 72 64 20 2a 2f 0a 20 20 75 36 34 20 6e  ecord */.  u64 n
13100 44 61 74 61 3b 20 20 20 20 20 20 20 20 20 20 20  Data;           
13110 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62    /* Number of b
13120 79 74 65 73 20 6f 66 20 64 61 74 61 20 73 70 61  ytes of data spa
13130 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 48 64 72  ce */.  int nHdr
13140 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
13150 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  * Number of byte
13160 73 20 6f 66 20 68 65 61 64 65 72 20 73 70 61 63  s of header spac
13170 65 20 2a 2f 0a 20 20 69 36 34 20 6e 42 79 74 65  e */.  i64 nByte
13180 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
13190 20 44 61 74 61 20 73 70 61 63 65 20 72 65 71 75   Data space requ
131a0 69 72 65 64 20 66 6f 72 20 74 68 69 73 20 72 65  ired for this re
131b0 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 5a  cord */.  int nZ
131c0 65 72 6f 3b 20 20 20 20 20 20 20 20 20 20 20 20  ero;            
131d0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 7a 65   /* Number of ze
131e0 72 6f 20 62 79 74 65 73 20 61 74 20 74 68 65 20  ro bytes at the 
131f0 65 6e 64 20 6f 66 20 74 68 65 20 72 65 63 6f 72  end of the recor
13200 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 61 72 69  d */.  int nVari
13210 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  nt;           /*
13220 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   Number of bytes
13230 20 69 6e 20 61 20 76 61 72 69 6e 74 20 2a 2f 0a   in a varint */.
13240 20 20 75 33 32 20 73 65 72 69 61 6c 5f 74 79 70    u32 serial_typ
13250 65 3b 20 20 20 20 20 20 20 2f 2a 20 54 79 70 65  e;       /* Type
13260 20 66 69 65 6c 64 20 2a 2f 0a 20 20 4d 65 6d 20   field */.  Mem 
13270 2a 70 44 61 74 61 30 3b 20 20 20 20 20 20 20 20  *pData0;        
13280 20 20 20 2f 2a 20 46 69 72 73 74 20 66 69 65 6c     /* First fiel
13290 64 20 74 6f 20 62 65 20 63 6f 6d 62 69 6e 65 64  d to be combined
132a0 20 69 6e 74 6f 20 74 68 65 20 72 65 63 6f 72 64   into the record
132b0 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4c 61 73 74   */.  Mem *pLast
132c0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
132d0 4c 61 73 74 20 66 69 65 6c 64 20 6f 66 20 74 68  Last field of th
132e0 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e  e record */.  in
132f0 74 20 6e 46 69 65 6c 64 3b 20 20 20 20 20 20 20  t nField;       
13300 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
13310 66 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20  f fields in the 
13320 72 65 63 6f 72 64 20 2a 2f 0a 20 20 63 68 61 72  record */.  char
13330 20 2a 7a 41 66 66 69 6e 69 74 79 3b 20 20 20 20   *zAffinity;    
13340 20 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69     /* The affini
13350 74 79 20 73 74 72 69 6e 67 20 66 6f 72 20 74 68  ty string for th
13360 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e  e record */.  in
13370 74 20 66 69 6c 65 5f 66 6f 72 6d 61 74 3b 20 20  t file_format;  
13380 20 20 20 20 20 2f 2a 20 46 69 6c 65 20 66 6f 72       /* File for
13390 6d 61 74 20 74 6f 20 75 73 65 20 66 6f 72 20 65  mat to use for e
133a0 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20 20 69 6e 74  ncoding */.  int
133b0 20 69 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   i;             
133c0 20 20 20 20 2f 2a 20 53 70 61 63 65 20 75 73 65      /* Space use
133d0 64 20 69 6e 20 7a 4e 65 77 52 65 63 6f 72 64 5b  d in zNewRecord[
133e0 5d 20 2a 2f 0a 20 20 69 6e 74 20 6c 65 6e 3b 20  ] */.  int len; 
133f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
13400 20 4c 65 6e 67 74 68 20 6f 66 20 61 20 66 69 65   Length of a fie
13410 6c 64 20 2a 2f 0a 0a 20 20 2f 2a 20 41 73 73 75  ld */..  /* Assu
13420 6d 69 6e 67 20 74 68 65 20 72 65 63 6f 72 64 20  ming the record 
13430 63 6f 6e 74 61 69 6e 73 20 4e 20 66 69 65 6c 64  contains N field
13440 73 2c 20 74 68 65 20 72 65 63 6f 72 64 20 66 6f  s, the record fo
13450 72 6d 61 74 20 6c 6f 6f 6b 73 0a 20 20 2a 2a 20  rmat looks.  ** 
13460 6c 69 6b 65 20 74 68 69 73 3a 0a 20 20 2a 2a 0a  like this:.  **.
13470 20 20 2a 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d    ** -----------
13480 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13490 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
134a0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
134b0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20  -------------.  
134c0 2a 2a 20 7c 20 68 64 72 2d 73 69 7a 65 20 7c 20  ** | hdr-size | 
134d0 74 79 70 65 20 30 20 7c 20 74 79 70 65 20 31 20  type 0 | type 1 
134e0 7c 20 2e 2e 2e 20 7c 20 74 79 70 65 20 4e 2d 31  | ... | type N-1
134f0 20 7c 20 64 61 74 61 30 20 7c 20 2e 2e 2e 20 7c   | data0 | ... |
13500 20 64 61 74 61 20 4e 2d 31 20 7c 20 0a 20 20 2a   data N-1 | .  *
13510 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  * --------------
13520 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13530 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13540 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13550 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2a 0a  ----------.  **.
13560 20 20 2a 2a 20 44 61 74 61 28 30 29 20 69 73 20    ** Data(0) is 
13570 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69 73  taken from regis
13580 74 65 72 20 50 31 2e 20 20 44 61 74 61 28 31 29  ter P1.  Data(1)
13590 20 63 6f 6d 65 73 20 66 72 6f 6d 20 72 65 67 69   comes from regi
135a0 73 74 65 72 20 50 31 2b 31 0a 20 20 2a 2a 20 61  ster P1+1.  ** a
135b0 6e 64 20 73 6f 20 66 72 6f 74 68 2e 0a 20 20 2a  nd so froth..  *
135c0 2a 0a 20 20 2a 2a 20 45 61 63 68 20 74 79 70 65  *.  ** Each type
135d0 20 66 69 65 6c 64 20 69 73 20 61 20 76 61 72 69   field is a vari
135e0 6e 74 20 72 65 70 72 65 73 65 6e 74 69 6e 67 20  nt representing 
135f0 74 68 65 20 73 65 72 69 61 6c 20 74 79 70 65 20  the serial type 
13600 6f 66 20 74 68 65 20 0a 20 20 2a 2a 20 63 6f 72  of the .  ** cor
13610 72 65 73 70 6f 6e 64 69 6e 67 20 64 61 74 61 20  responding data 
13620 65 6c 65 6d 65 6e 74 20 28 73 65 65 20 73 71 6c  element (see sql
13630 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 54 79  ite3VdbeSerialTy
13640 70 65 28 29 29 2e 20 54 68 65 0a 20 20 2a 2a 20  pe()). The.  ** 
13650 68 64 72 2d 73 69 7a 65 20 66 69 65 6c 64 20 69  hdr-size field i
13660 73 20 61 6c 73 6f 20 61 20 76 61 72 69 6e 74 20  s also a varint 
13670 77 68 69 63 68 20 69 73 20 74 68 65 20 6f 66 66  which is the off
13680 73 65 74 20 66 72 6f 6d 20 74 68 65 20 62 65 67  set from the beg
13690 69 6e 6e 69 6e 67 0a 20 20 2a 2a 20 6f 66 20 74  inning.  ** of t
136a0 68 65 20 72 65 63 6f 72 64 20 74 6f 20 64 61 74  he record to dat
136b0 61 30 2e 0a 20 20 2a 2f 0a 20 20 6e 44 61 74 61  a0..  */.  nData
136c0 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 2f 2a   = 0;         /*
136d0 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   Number of bytes
136e0 20 6f 66 20 64 61 74 61 20 73 70 61 63 65 20 2a   of data space *
136f0 2f 0a 20 20 6e 48 64 72 20 3d 20 30 3b 20 20 20  /.  nHdr = 0;   
13700 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
13710 20 6f 66 20 62 79 74 65 73 20 6f 66 20 68 65 61   of bytes of hea
13720 64 65 72 20 73 70 61 63 65 20 2a 2f 0a 20 20 6e  der space */.  n
13730 5a 65 72 6f 20 3d 20 30 3b 20 20 20 20 20 20 20  Zero = 0;       
13740 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 7a    /* Number of z
13750 65 72 6f 20 62 79 74 65 73 20 61 74 20 74 68 65  ero bytes at the
13760 20 65 6e 64 20 6f 66 20 74 68 65 20 72 65 63 6f   end of the reco
13770 72 64 20 2a 2f 0a 20 20 6e 46 69 65 6c 64 20 3d  rd */.  nField =
13780 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 7a 41 66 66   pOp->p1;.  zAff
13790 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70 34 2e  inity = pOp->p4.
137a0 7a 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 46 69  z;.  assert( nFi
137b0 65 6c 64 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32  eld>0 && pOp->p2
137c0 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 6e 46  >0 && pOp->p2+nF
137d0 69 65 6c 64 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31 20  ield<=p->nMem+1 
137e0 29 3b 0a 20 20 70 44 61 74 61 30 20 3d 20 26 61  );.  pData0 = &a
137f0 4d 65 6d 5b 6e 46 69 65 6c 64 5d 3b 0a 20 20 6e  Mem[nField];.  n
13800 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 32 3b  Field = pOp->p2;
13810 0a 20 20 70 4c 61 73 74 20 3d 20 26 70 44 61 74  .  pLast = &pDat
13820 61 30 5b 6e 46 69 65 6c 64 2d 31 5d 3b 0a 20 20  a0[nField-1];.  
13830 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3d 20 70 2d  file_format = p-
13840 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65 46 6f 72  >minWriteFileFor
13850 6d 61 74 3b 0a 0a 20 20 2f 2a 20 49 64 65 6e 74  mat;..  /* Ident
13860 69 66 79 20 74 68 65 20 6f 75 74 70 75 74 20 72  ify the output r
13870 65 67 69 73 74 65 72 20 2a 2f 0a 20 20 61 73 73  egister */.  ass
13880 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 70 4f 70  ert( pOp->p3<pOp
13890 2d 3e 70 31 20 7c 7c 20 70 4f 70 2d 3e 70 33 3e  ->p1 || pOp->p3>
138a0 3d 70 4f 70 2d 3e 70 31 2b 70 4f 70 2d 3e 70 32  =pOp->p1+pOp->p2
138b0 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d   );.  pOut = &aM
138c0 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d  em[pOp->p3];.  m
138d0 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
138e0 70 2c 20 70 4f 75 74 29 3b 0a 0a 20 20 2f 2a 20  p, pOut);..  /* 
138f0 4c 6f 6f 70 20 74 68 72 6f 75 67 68 20 74 68 65  Loop through the
13900 20 65 6c 65 6d 65 6e 74 73 20 74 68 61 74 20 77   elements that w
13910 69 6c 6c 20 6d 61 6b 65 20 75 70 20 74 68 65 20  ill make up the 
13920 72 65 63 6f 72 64 20 74 6f 20 66 69 67 75 72 65  record to figure
13930 0a 20 20 2a 2a 20 6f 75 74 20 68 6f 77 20 6d 75  .  ** out how mu
13940 63 68 20 73 70 61 63 65 20 69 73 20 72 65 71 75  ch space is requ
13950 69 72 65 64 20 66 6f 72 20 74 68 65 20 6e 65 77  ired for the new
13960 20 72 65 63 6f 72 64 2e 0a 20 20 2a 2f 0a 20 20   record..  */.  
13970 66 6f 72 28 70 52 65 63 3d 70 44 61 74 61 30 3b  for(pRec=pData0;
13980 20 70 52 65 63 3c 3d 70 4c 61 73 74 3b 20 70 52   pRec<=pLast; pR
13990 65 63 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72  ec++){.    asser
139a0 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 52  t( memIsValid(pR
139b0 65 63 29 20 29 3b 0a 20 20 20 20 69 66 28 20 7a  ec) );.    if( z
139c0 41 66 66 69 6e 69 74 79 20 29 7b 0a 20 20 20 20  Affinity ){.    
139d0 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28    applyAffinity(
139e0 70 52 65 63 2c 20 7a 41 66 66 69 6e 69 74 79 5b  pRec, zAffinity[
139f0 70 52 65 63 2d 70 44 61 74 61 30 5d 2c 20 65 6e  pRec-pData0], en
13a00 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 7d 0a 20  coding);.    }. 
13a10 20 20 20 69 66 28 20 70 52 65 63 2d 3e 66 6c 61     if( pRec->fla
13a20 67 73 26 4d 45 4d 5f 5a 65 72 6f 20 26 26 20 70  gs&MEM_Zero && p
13a30 52 65 63 2d 3e 6e 3e 30 20 29 7b 0a 20 20 20 20  Rec->n>0 ){.    
13a40 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
13a50 45 78 70 61 6e 64 42 6c 6f 62 28 70 52 65 63 29  ExpandBlob(pRec)
13a60 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 65 72 69  ;.    }.    seri
13a70 61 6c 5f 74 79 70 65 20 3d 20 73 71 6c 69 74 65  al_type = sqlite
13a80 33 56 64 62 65 53 65 72 69 61 6c 54 79 70 65 28  3VdbeSerialType(
13a90 70 52 65 63 2c 20 66 69 6c 65 5f 66 6f 72 6d 61  pRec, file_forma
13aa0 74 29 3b 0a 20 20 20 20 6c 65 6e 20 3d 20 73 71  t);.    len = sq
13ab0 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 54  lite3VdbeSerialT
13ac0 79 70 65 4c 65 6e 28 73 65 72 69 61 6c 5f 74 79  ypeLen(serial_ty
13ad0 70 65 29 3b 0a 20 20 20 20 6e 44 61 74 61 20 2b  pe);.    nData +
13ae0 3d 20 6c 65 6e 3b 0a 20 20 20 20 6e 48 64 72 20  = len;.    nHdr 
13af0 2b 3d 20 73 71 6c 69 74 65 33 56 61 72 69 6e 74  += sqlite3Varint
13b00 4c 65 6e 28 73 65 72 69 61 6c 5f 74 79 70 65 29  Len(serial_type)
13b10 3b 0a 20 20 20 20 69 66 28 20 70 52 65 63 2d 3e  ;.    if( pRec->
13b20 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a 65 72 6f  flags & MEM_Zero
13b30 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 4f 6e 6c   ){.      /* Onl
13b40 79 20 70 75 72 65 20 7a 65 72 6f 2d 66 69 6c 6c  y pure zero-fill
13b50 65 64 20 42 4c 4f 42 73 20 63 61 6e 20 62 65 20  ed BLOBs can be 
13b60 69 6e 70 75 74 20 74 6f 20 74 68 69 73 20 4f 70  input to this Op
13b70 63 6f 64 65 2e 0a 20 20 20 20 20 20 2a 2a 20 57  code..      ** W
13b80 65 20 64 6f 20 6e 6f 74 20 61 6c 6c 6f 77 20 62  e do not allow b
13b90 6c 6f 62 73 20 77 69 74 68 20 61 20 70 72 65 66  lobs with a pref
13ba0 69 78 20 61 6e 64 20 61 20 7a 65 72 6f 2d 66 69  ix and a zero-fi
13bb0 6c 6c 65 64 20 74 61 69 6c 2e 20 2a 2f 0a 20 20  lled tail. */.  
13bc0 20 20 20 20 6e 5a 65 72 6f 20 2b 3d 20 70 52 65      nZero += pRe
13bd0 63 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a 20 20 20 20  c->u.nZero;.    
13be0 7d 65 6c 73 65 20 69 66 28 20 6c 65 6e 20 29 7b  }else if( len ){
13bf0 0a 20 20 20 20 20 20 6e 5a 65 72 6f 20 3d 20 30  .      nZero = 0
13c00 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 2f  ;.    }.  }..  /
13c10 2a 20 41 64 64 20 74 68 65 20 69 6e 69 74 69 61  * Add the initia
13c20 6c 20 68 65 61 64 65 72 20 76 61 72 69 6e 74 20  l header varint 
13c30 61 6e 64 20 74 6f 74 61 6c 20 74 68 65 20 73 69  and total the si
13c40 7a 65 20 2a 2f 0a 20 20 6e 48 64 72 20 2b 3d 20  ze */.  nHdr += 
13c50 6e 56 61 72 69 6e 74 20 3d 20 73 71 6c 69 74 65  nVarint = sqlite
13c60 33 56 61 72 69 6e 74 4c 65 6e 28 6e 48 64 72 29  3VarintLen(nHdr)
13c70 3b 0a 20 20 69 66 28 20 6e 56 61 72 69 6e 74 3c  ;.  if( nVarint<
13c80 73 71 6c 69 74 65 33 56 61 72 69 6e 74 4c 65 6e  sqlite3VarintLen
13c90 28 6e 48 64 72 29 20 29 7b 0a 20 20 20 20 6e 48  (nHdr) ){.    nH
13ca0 64 72 2b 2b 3b 0a 20 20 7d 0a 20 20 6e 42 79 74  dr++;.  }.  nByt
13cb0 65 20 3d 20 6e 48 64 72 2b 6e 44 61 74 61 2d 6e  e = nHdr+nData-n
13cc0 5a 65 72 6f 3b 0a 20 20 69 66 28 20 6e 42 79 74  Zero;.  if( nByt
13cd0 65 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c  e>db->aLimit[SQL
13ce0 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48  ITE_LIMIT_LENGTH
13cf0 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f  ] ){.    goto to
13d00 6f 5f 62 69 67 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  o_big;.  }..  /*
13d10 20 4d 61 6b 65 20 73 75 72 65 20 74 68 65 20 6f   Make sure the o
13d20 75 74 70 75 74 20 72 65 67 69 73 74 65 72 20 68  utput register h
13d30 61 73 20 61 20 62 75 66 66 65 72 20 6c 61 72 67  as a buffer larg
13d40 65 20 65 6e 6f 75 67 68 20 74 6f 20 73 74 6f 72  e enough to stor
13d50 65 20 0a 20 20 2a 2a 20 74 68 65 20 6e 65 77 20  e .  ** the new 
13d60 72 65 63 6f 72 64 2e 20 54 68 65 20 6f 75 74 70  record. The outp
13d70 75 74 20 72 65 67 69 73 74 65 72 20 28 70 4f 70  ut register (pOp
13d80 2d 3e 70 33 29 20 69 73 20 6e 6f 74 20 61 6c 6c  ->p3) is not all
13d90 6f 77 65 64 20 74 6f 0a 20 20 2a 2a 20 62 65 20  owed to.  ** be 
13da0 6f 6e 65 20 6f 66 20 74 68 65 20 69 6e 70 75 74  one of the input
13db0 20 72 65 67 69 73 74 65 72 73 20 28 62 65 63 61   registers (beca
13dc0 75 73 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  use the followin
13dd0 67 20 63 61 6c 6c 20 74 6f 0a 20 20 2a 2a 20 73  g call to.  ** s
13de0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 47 72 6f  qlite3VdbeMemGro
13df0 77 28 29 20 63 6f 75 6c 64 20 63 6c 6f 62 62 65  w() could clobbe
13e00 72 20 74 68 65 20 76 61 6c 75 65 20 62 65 66 6f  r the value befo
13e10 72 65 20 69 74 20 69 73 20 75 73 65 64 29 2e 0a  re it is used)..
13e20 20 20 2a 2f 0a 20 20 69 66 28 20 73 71 6c 69 74    */.  if( sqlit
13e30 65 33 56 64 62 65 4d 65 6d 47 72 6f 77 28 70 4f  e3VdbeMemGrow(pO
13e40 75 74 2c 20 28 69 6e 74 29 6e 42 79 74 65 2c 20  ut, (int)nByte, 
13e50 30 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e  0) ){.    goto n
13e60 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 7a 4e 65  o_mem;.  }.  zNe
13e70 77 52 65 63 6f 72 64 20 3d 20 28 75 38 20 2a 29  wRecord = (u8 *)
13e80 70 4f 75 74 2d 3e 7a 3b 0a 0a 20 20 2f 2a 20 57  pOut->z;..  /* W
13e90 72 69 74 65 20 74 68 65 20 72 65 63 6f 72 64 20  rite the record 
13ea0 2a 2f 0a 20 20 69 20 3d 20 70 75 74 56 61 72 69  */.  i = putVari
13eb0 6e 74 33 32 28 7a 4e 65 77 52 65 63 6f 72 64 2c  nt32(zNewRecord,
13ec0 20 6e 48 64 72 29 3b 0a 20 20 66 6f 72 28 70 52   nHdr);.  for(pR
13ed0 65 63 3d 70 44 61 74 61 30 3b 20 70 52 65 63 3c  ec=pData0; pRec<
13ee0 3d 70 4c 61 73 74 3b 20 70 52 65 63 2b 2b 29 7b  =pLast; pRec++){
13ef0 0a 20 20 20 20 73 65 72 69 61 6c 5f 74 79 70 65  .    serial_type
13f00 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 65   = sqlite3VdbeSe
13f10 72 69 61 6c 54 79 70 65 28 70 52 65 63 2c 20 66  rialType(pRec, f
13f20 69 6c 65 5f 66 6f 72 6d 61 74 29 3b 0a 20 20 20  ile_format);.   
13f30 20 69 20 2b 3d 20 70 75 74 56 61 72 69 6e 74 33   i += putVarint3
13f40 32 28 26 7a 4e 65 77 52 65 63 6f 72 64 5b 69 5d  2(&zNewRecord[i]
13f50 2c 20 73 65 72 69 61 6c 5f 74 79 70 65 29 3b 20  , serial_type); 
13f60 20 20 20 20 20 2f 2a 20 73 65 72 69 61 6c 20 74       /* serial t
13f70 79 70 65 20 2a 2f 0a 20 20 7d 0a 20 20 66 6f 72  ype */.  }.  for
13f80 28 70 52 65 63 3d 70 44 61 74 61 30 3b 20 70 52  (pRec=pData0; pR
13f90 65 63 3c 3d 70 4c 61 73 74 3b 20 70 52 65 63 2b  ec<=pLast; pRec+
13fa0 2b 29 7b 20 20 2f 2a 20 73 65 72 69 61 6c 20 64  +){  /* serial d
13fb0 61 74 61 20 2a 2f 0a 20 20 20 20 69 20 2b 3d 20  ata */.    i += 
13fc0 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61  sqlite3VdbeSeria
13fd0 6c 50 75 74 28 26 7a 4e 65 77 52 65 63 6f 72 64  lPut(&zNewRecord
13fe0 5b 69 5d 2c 20 28 69 6e 74 29 28 6e 42 79 74 65  [i], (int)(nByte
13ff0 2d 69 29 2c 20 70 52 65 63 2c 66 69 6c 65 5f 66  -i), pRec,file_f
14000 6f 72 6d 61 74 29 3b 0a 20 20 7d 0a 20 20 61 73  ormat);.  }.  as
14010 73 65 72 74 28 20 69 3d 3d 6e 42 79 74 65 20 29  sert( i==nByte )
14020 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
14030 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p3>0 && pOp->p
14040 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20  3<=p->nMem );.  
14050 70 4f 75 74 2d 3e 6e 20 3d 20 28 69 6e 74 29 6e  pOut->n = (int)n
14060 42 79 74 65 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c  Byte;.  pOut->fl
14070 61 67 73 20 3d 20 4d 45 4d 5f 42 6c 6f 62 20 7c  ags = MEM_Blob |
14080 20 4d 45 4d 5f 44 79 6e 3b 0a 20 20 70 4f 75 74   MEM_Dyn;.  pOut
14090 2d 3e 78 44 65 6c 20 3d 20 30 3b 0a 20 20 69 66  ->xDel = 0;.  if
140a0 28 20 6e 5a 65 72 6f 20 29 7b 0a 20 20 20 20 70  ( nZero ){.    p
140b0 4f 75 74 2d 3e 75 2e 6e 5a 65 72 6f 20 3d 20 6e  Out->u.nZero = n
140c0 5a 65 72 6f 3b 0a 20 20 20 20 70 4f 75 74 2d 3e  Zero;.    pOut->
140d0 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 5a 65 72  flags |= MEM_Zer
140e0 6f 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 65  o;.  }.  pOut->e
140f0 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55 54 46 38  nc = SQLITE_UTF8
14100 3b 20 20 2f 2a 20 49 6e 20 63 61 73 65 20 74 68  ;  /* In case th
14110 65 20 62 6c 6f 62 20 69 73 20 65 76 65 72 20 63  e blob is ever c
14120 6f 6e 76 65 72 74 65 64 20 74 6f 20 74 65 78 74  onverted to text
14130 20 2a 2f 0a 20 20 52 45 47 49 53 54 45 52 5f 54   */.  REGISTER_T
14140 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4f  RACE(pOp->p3, pO
14150 75 74 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41  ut);.  UPDATE_MA
14160 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29  X_BLOBSIZE(pOut)
14170 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
14180 20 4f 70 63 6f 64 65 3a 20 43 6f 75 6e 74 20 50   Opcode: Count P
14190 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
141a0 20 53 74 6f 72 65 20 74 68 65 20 6e 75 6d 62 65   Store the numbe
141b0 72 20 6f 66 20 65 6e 74 72 69 65 73 20 28 61 6e  r of entries (an
141c0 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 29 20   integer value) 
141d0 69 6e 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20  in the table or 
141e0 69 6e 64 65 78 20 0a 2a 2a 20 6f 70 65 6e 65 64  index .** opened
141f0 20 62 79 20 63 75 72 73 6f 72 20 50 31 20 69 6e   by cursor P1 in
14200 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2f 0a   register P2.*/.
14210 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
14220 4d 49 54 5f 42 54 52 45 45 43 4f 55 4e 54 0a 63  MIT_BTREECOUNT.c
14230 61 73 65 20 4f 50 5f 43 6f 75 6e 74 3a 20 7b 20  ase OP_Count: { 
14240 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d          /* out2-
14250 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20  prerelease */.  
14260 69 36 34 20 6e 45 6e 74 72 79 3b 0a 20 20 42 74  i64 nEntry;.  Bt
14270 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 0a  Cursor *pCrsr;..
14280 20 20 70 43 72 73 72 20 3d 20 70 2d 3e 61 70 43    pCrsr = p->apC
14290 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 70 43 75  sr[pOp->p1]->pCu
142a0 72 73 6f 72 3b 0a 20 20 69 66 28 20 70 43 72 73  rsor;.  if( pCrs
142b0 72 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71  r ){.    rc = sq
142c0 6c 69 74 65 33 42 74 72 65 65 43 6f 75 6e 74 28  lite3BtreeCount(
142d0 70 43 72 73 72 2c 20 26 6e 45 6e 74 72 79 29 3b  pCrsr, &nEntry);
142e0 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 6e 45  .  }else{.    nE
142f0 6e 74 72 79 20 3d 20 30 3b 0a 20 20 7d 0a 20 20  ntry = 0;.  }.  
14300 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 6e 45 6e 74  pOut->u.i = nEnt
14310 72 79 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23  ry;.  break;.}.#
14320 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65  endif../* Opcode
14330 3a 20 53 61 76 65 70 6f 69 6e 74 20 50 31 20 2a  : Savepoint P1 *
14340 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 4f 70   * P4 *.**.** Op
14350 65 6e 2c 20 72 65 6c 65 61 73 65 20 6f 72 20 72  en, release or r
14360 6f 6c 6c 62 61 63 6b 20 74 68 65 20 73 61 76 65  ollback the save
14370 70 6f 69 6e 74 20 6e 61 6d 65 64 20 62 79 20 70  point named by p
14380 61 72 61 6d 65 74 65 72 20 50 34 2c 20 64 65 70  arameter P4, dep
14390 65 6e 64 69 6e 67 0a 2a 2a 20 6f 6e 20 74 68 65  ending.** on the
143a0 20 76 61 6c 75 65 20 6f 66 20 50 31 2e 20 54 6f   value of P1. To
143b0 20 6f 70 65 6e 20 61 20 6e 65 77 20 73 61 76 65   open a new save
143c0 70 6f 69 6e 74 2c 20 50 31 3d 3d 30 2e 20 54 6f  point, P1==0. To
143d0 20 72 65 6c 65 61 73 65 20 28 63 6f 6d 6d 69 74   release (commit
143e0 29 20 61 6e 0a 2a 2a 20 65 78 69 73 74 69 6e 67  ) an.** existing
143f0 20 73 61 76 65 70 6f 69 6e 74 2c 20 50 31 3d 3d   savepoint, P1==
14400 31 2c 20 6f 72 20 74 6f 20 72 6f 6c 6c 62 61 63  1, or to rollbac
14410 6b 20 61 6e 20 65 78 69 73 74 69 6e 67 20 73 61  k an existing sa
14420 76 65 70 6f 69 6e 74 20 50 31 3d 3d 32 2e 0a 2a  vepoint P1==2..*
14430 2f 0a 63 61 73 65 20 4f 50 5f 53 61 76 65 70 6f  /.case OP_Savepo
14440 69 6e 74 3a 20 7b 0a 20 20 69 6e 74 20 70 31 3b  int: {.  int p1;
14450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14460 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75           /* Valu
14470 65 20 6f 66 20 50 31 20 6f 70 65 72 61 6e 64 20  e of P1 operand 
14480 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65  */.  char *zName
14490 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
144a0 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
144b0 73 61 76 65 70 6f 69 6e 74 20 2a 2f 0a 20 20 69  savepoint */.  i
144c0 6e 74 20 6e 4e 61 6d 65 3b 0a 20 20 53 61 76 65  nt nName;.  Save
144d0 70 6f 69 6e 74 20 2a 70 4e 65 77 3b 0a 20 20 53  point *pNew;.  S
144e0 61 76 65 70 6f 69 6e 74 20 2a 70 53 61 76 65 70  avepoint *pSavep
144f0 6f 69 6e 74 3b 0a 20 20 53 61 76 65 70 6f 69 6e  oint;.  Savepoin
14500 74 20 2a 70 54 6d 70 3b 0a 20 20 69 6e 74 20 69  t *pTmp;.  int i
14510 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 69 6e 74  Savepoint;.  int
14520 20 69 69 3b 0a 0a 20 20 70 31 20 3d 20 70 4f 70   ii;..  p1 = pOp
14530 2d 3e 70 31 3b 0a 20 20 7a 4e 61 6d 65 20 3d 20  ->p1;.  zName = 
14540 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 0a 20 20 2f 2a  pOp->p4.z;..  /*
14550 20 41 73 73 65 72 74 20 74 68 61 74 20 74 68 65   Assert that the
14560 20 70 31 20 70 61 72 61 6d 65 74 65 72 20 69 73   p1 parameter is
14570 20 76 61 6c 69 64 2e 20 41 6c 73 6f 20 74 68 61   valid. Also tha
14580 74 20 69 66 20 74 68 65 72 65 20 69 73 20 6e 6f  t if there is no
14590 20 6f 70 65 6e 0a 20 20 2a 2a 20 74 72 61 6e 73   open.  ** trans
145a0 61 63 74 69 6f 6e 2c 20 74 68 65 6e 20 74 68 65  action, then the
145b0 72 65 20 63 61 6e 6e 6f 74 20 62 65 20 61 6e 79  re cannot be any
145c0 20 73 61 76 65 70 6f 69 6e 74 73 2e 20 0a 20 20   savepoints. .  
145d0 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d  */.  assert( db-
145e0 3e 70 53 61 76 65 70 6f 69 6e 74 3d 3d 30 20 7c  >pSavepoint==0 |
145f0 7c 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74  | db->autoCommit
14600 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==0 );.  assert(
14610 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 42   p1==SAVEPOINT_B
14620 45 47 49 4e 7c 7c 70 31 3d 3d 53 41 56 45 50 4f  EGIN||p1==SAVEPO
14630 49 4e 54 5f 52 45 4c 45 41 53 45 7c 7c 70 31 3d  INT_RELEASE||p1=
14640 3d 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42  =SAVEPOINT_ROLLB
14650 41 43 4b 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ACK );.  assert(
14660 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20   db->pSavepoint 
14670 7c 7c 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63  || db->isTransac
14680 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3d 3d 30  tionSavepoint==0
14690 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 63 68   );.  assert( ch
146a0 65 63 6b 53 61 76 65 70 6f 69 6e 74 43 6f 75 6e  eckSavepointCoun
146b0 74 28 64 62 29 20 29 3b 0a 0a 20 20 69 66 28 20  t(db) );..  if( 
146c0 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 42 45  p1==SAVEPOINT_BE
146d0 47 49 4e 20 29 7b 0a 20 20 20 20 69 66 28 20 64  GIN ){.    if( d
146e0 62 2d 3e 77 72 69 74 65 56 64 62 65 43 6e 74 3e  b->writeVdbeCnt>
146f0 30 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 41 20  0 ){.      /* A 
14700 6e 65 77 20 73 61 76 65 70 6f 69 6e 74 20 63 61  new savepoint ca
14710 6e 6e 6f 74 20 62 65 20 63 72 65 61 74 65 64 20  nnot be created 
14720 69 66 20 74 68 65 72 65 20 61 72 65 20 61 63 74  if there are act
14730 69 76 65 20 77 72 69 74 65 20 0a 20 20 20 20 20  ive write .     
14740 20 2a 2a 20 73 74 61 74 65 6d 65 6e 74 73 20 28   ** statements (
14750 69 2e 65 2e 20 6f 70 65 6e 20 72 65 61 64 2f 77  i.e. open read/w
14760 72 69 74 65 20 69 6e 63 72 65 6d 65 6e 74 61 6c  rite incremental
14770 20 62 6c 6f 62 20 68 61 6e 64 6c 65 73 29 2e 0a   blob handles)..
14780 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 73        */.      s
14790 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28  qlite3SetString(
147a0 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c  &p->zErrMsg, db,
147b0 20 22 63 61 6e 6e 6f 74 20 6f 70 65 6e 20 73 61   "cannot open sa
147c0 76 65 70 6f 69 6e 74 20 2d 20 22 0a 20 20 20 20  vepoint - ".    
147d0 20 20 20 20 22 53 51 4c 20 73 74 61 74 65 6d 65      "SQL stateme
147e0 6e 74 73 20 69 6e 20 70 72 6f 67 72 65 73 73 22  nts in progress"
147f0 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51  );.      rc = SQ
14800 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 7d  LITE_BUSY;.    }
14810 65 6c 73 65 7b 0a 20 20 20 20 20 20 6e 4e 61 6d  else{.      nNam
14820 65 20 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65  e = sqlite3Strle
14830 6e 33 30 28 7a 4e 61 6d 65 29 3b 0a 0a 20 20 20  n30(zName);..   
14840 20 20 20 2f 2a 20 43 72 65 61 74 65 20 61 20 6e     /* Create a n
14850 65 77 20 73 61 76 65 70 6f 69 6e 74 20 73 74 72  ew savepoint str
14860 75 63 74 75 72 65 2e 20 2a 2f 0a 20 20 20 20 20  ucture. */.     
14870 20 70 4e 65 77 20 3d 20 73 71 6c 69 74 65 33 44   pNew = sqlite3D
14880 62 4d 61 6c 6c 6f 63 52 61 77 28 64 62 2c 20 73  bMallocRaw(db, s
14890 69 7a 65 6f 66 28 53 61 76 65 70 6f 69 6e 74 29  izeof(Savepoint)
148a0 2b 6e 4e 61 6d 65 2b 31 29 3b 0a 20 20 20 20 20  +nName+1);.     
148b0 20 69 66 28 20 70 4e 65 77 20 29 7b 0a 20 20 20   if( pNew ){.   
148c0 20 20 20 20 20 70 4e 65 77 2d 3e 7a 4e 61 6d 65       pNew->zName
148d0 20 3d 20 28 63 68 61 72 20 2a 29 26 70 4e 65 77   = (char *)&pNew
148e0 5b 31 5d 3b 0a 20 20 20 20 20 20 20 20 6d 65 6d  [1];.        mem
148f0 63 70 79 28 70 4e 65 77 2d 3e 7a 4e 61 6d 65 2c  cpy(pNew->zName,
14900 20 7a 4e 61 6d 65 2c 20 6e 4e 61 6d 65 2b 31 29   zName, nName+1)
14910 3b 0a 20 20 20 20 0a 20 20 20 20 20 20 20 20 2f  ;.    .        /
14920 2a 20 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f  * If there is no
14930 20 6f 70 65 6e 20 74 72 61 6e 73 61 63 74 69 6f   open transactio
14940 6e 2c 20 74 68 65 6e 20 6d 61 72 6b 20 74 68 69  n, then mark thi
14950 73 20 61 73 20 61 20 73 70 65 63 69 61 6c 0a 20  s as a special. 
14960 20 20 20 20 20 20 20 2a 2a 20 22 74 72 61 6e 73         ** "trans
14970 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74  action savepoint
14980 22 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66  ". */.        if
14990 28 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74  ( db->autoCommit
149a0 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 64 62   ){.          db
149b0 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 30  ->autoCommit = 0
149c0 3b 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e  ;.          db->
149d0 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76  isTransactionSav
149e0 65 70 6f 69 6e 74 20 3d 20 31 3b 0a 20 20 20 20  epoint = 1;.    
149f0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
14a00 20 20 20 20 20 64 62 2d 3e 6e 53 61 76 65 70 6f       db->nSavepo
14a10 69 6e 74 2b 2b 3b 0a 20 20 20 20 20 20 20 20 7d  int++;.        }
14a20 0a 20 20 20 20 0a 20 20 20 20 20 20 20 20 2f 2a  .    .        /*
14a30 20 4c 69 6e 6b 20 74 68 65 20 6e 65 77 20 73 61   Link the new sa
14a40 76 65 70 6f 69 6e 74 20 69 6e 74 6f 20 74 68 65  vepoint into the
14a50 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65   database handle
14a60 27 73 20 6c 69 73 74 2e 20 2a 2f 0a 20 20 20 20  's list. */.    
14a70 20 20 20 20 70 4e 65 77 2d 3e 70 4e 65 78 74 20      pNew->pNext 
14a80 3d 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74  = db->pSavepoint
14a90 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 70 53  ;.        db->pS
14aa0 61 76 65 70 6f 69 6e 74 20 3d 20 70 4e 65 77 3b  avepoint = pNew;
14ab0 0a 20 20 20 20 20 20 20 20 70 4e 65 77 2d 3e 6e  .        pNew->n
14ac0 44 65 66 65 72 72 65 64 43 6f 6e 73 20 3d 20 64  DeferredCons = d
14ad0 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73  b->nDeferredCons
14ae0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
14af0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69 53 61    }else{.    iSa
14b00 76 65 70 6f 69 6e 74 20 3d 20 30 3b 0a 0a 20 20  vepoint = 0;..  
14b10 20 20 2f 2a 20 46 69 6e 64 20 74 68 65 20 6e 61    /* Find the na
14b20 6d 65 64 20 73 61 76 65 70 6f 69 6e 74 2e 20 49  med savepoint. I
14b30 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 73 75  f there is no su
14b40 63 68 20 73 61 76 65 70 6f 69 6e 74 2c 20 74 68  ch savepoint, th
14b50 65 6e 20 61 6e 0a 20 20 20 20 2a 2a 20 61 6e 20  en an.    ** an 
14b60 65 72 72 6f 72 20 69 73 20 72 65 74 75 72 6e 65  error is returne
14b70 64 20 74 6f 20 74 68 65 20 75 73 65 72 2e 20 20  d to the user.  
14b80 2a 2f 0a 20 20 20 20 66 6f 72 28 0a 20 20 20 20  */.    for(.    
14b90 20 20 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 64    pSavepoint = d
14ba0 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b 20 0a  b->pSavepoint; .
14bb0 20 20 20 20 20 20 70 53 61 76 65 70 6f 69 6e 74        pSavepoint
14bc0 20 26 26 20 73 71 6c 69 74 65 33 53 74 72 49 43   && sqlite3StrIC
14bd0 6d 70 28 70 53 61 76 65 70 6f 69 6e 74 2d 3e 7a  mp(pSavepoint->z
14be0 4e 61 6d 65 2c 20 7a 4e 61 6d 65 29 3b 0a 20 20  Name, zName);.  
14bf0 20 20 20 20 70 53 61 76 65 70 6f 69 6e 74 20 3d      pSavepoint =
14c00 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 70 4e 65   pSavepoint->pNe
14c10 78 74 0a 20 20 20 20 29 7b 0a 20 20 20 20 20 20  xt.    ){.      
14c20 69 53 61 76 65 70 6f 69 6e 74 2b 2b 3b 0a 20 20  iSavepoint++;.  
14c30 20 20 7d 0a 20 20 20 20 69 66 28 20 21 70 53 61    }.    if( !pSa
14c40 76 65 70 6f 69 6e 74 20 29 7b 0a 20 20 20 20 20  vepoint ){.     
14c50 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
14c60 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64  g(&p->zErrMsg, d
14c70 62 2c 20 22 6e 6f 20 73 75 63 68 20 73 61 76 65  b, "no such save
14c80 70 6f 69 6e 74 3a 20 25 73 22 2c 20 7a 4e 61 6d  point: %s", zNam
14c90 65 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 53  e);.      rc = S
14ca0 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20  QLITE_ERROR;.   
14cb0 20 7d 65 6c 73 65 20 69 66 28 20 0a 20 20 20 20   }else if( .    
14cc0 20 20 20 20 64 62 2d 3e 77 72 69 74 65 56 64 62      db->writeVdb
14cd0 65 43 6e 74 3e 30 20 7c 7c 20 28 70 31 3d 3d 53  eCnt>0 || (p1==S
14ce0 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43  AVEPOINT_ROLLBAC
14cf0 4b 20 26 26 20 64 62 2d 3e 61 63 74 69 76 65 56  K && db->activeV
14d00 64 62 65 43 6e 74 3e 31 29 20 0a 20 20 20 20 29  dbeCnt>1) .    )
14d10 7b 0a 20 20 20 20 20 20 2f 2a 20 49 74 20 69 73  {.      /* It is
14d20 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65 20 74 6f   not possible to
14d30 20 72 65 6c 65 61 73 65 20 28 63 6f 6d 6d 69 74   release (commit
14d40 29 20 61 20 73 61 76 65 70 6f 69 6e 74 20 69 66  ) a savepoint if
14d50 20 74 68 65 72 65 20 61 72 65 20 0a 20 20 20 20   there are .    
14d60 20 20 2a 2a 20 61 63 74 69 76 65 20 77 72 69 74    ** active writ
14d70 65 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 49 74  e statements. It
14d80 20 69 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65   is not possible
14d90 20 74 6f 20 72 6f 6c 6c 62 61 63 6b 20 61 20 73   to rollback a s
14da0 61 76 65 70 6f 69 6e 74 0a 20 20 20 20 20 20 2a  avepoint.      *
14db0 2a 20 69 66 20 74 68 65 72 65 20 61 72 65 20 61  * if there are a
14dc0 6e 79 20 61 63 74 69 76 65 20 73 74 61 74 65 6d  ny active statem
14dd0 65 6e 74 73 20 61 74 20 61 6c 6c 2e 0a 20 20 20  ents at all..   
14de0 20 20 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69     */.      sqli
14df0 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d  te3SetString(&p-
14e00 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 0a 20  >zErrMsg, db, . 
14e10 20 20 20 20 20 20 20 22 63 61 6e 6e 6f 74 20 25         "cannot %
14e20 73 20 73 61 76 65 70 6f 69 6e 74 20 2d 20 53 51  s savepoint - SQ
14e30 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20  L statements in 
14e40 70 72 6f 67 72 65 73 73 22 2c 0a 20 20 20 20 20  progress",.     
14e50 20 20 20 28 70 31 3d 3d 53 41 56 45 50 4f 49 4e     (p1==SAVEPOIN
14e60 54 5f 52 4f 4c 4c 42 41 43 4b 20 3f 20 22 72 6f  T_ROLLBACK ? "ro
14e70 6c 6c 62 61 63 6b 22 3a 20 22 72 65 6c 65 61 73  llback": "releas
14e80 65 22 29 0a 20 20 20 20 20 20 29 3b 0a 20 20 20  e").      );.   
14e90 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42     rc = SQLITE_B
14ea0 55 53 59 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  USY;.    }else{.
14eb0 0a 20 20 20 20 20 20 2f 2a 20 44 65 74 65 72 6d  .      /* Determ
14ec0 69 6e 65 20 77 68 65 74 68 65 72 20 6f 72 20 6e  ine whether or n
14ed0 6f 74 20 74 68 69 73 20 69 73 20 61 20 74 72 61  ot this is a tra
14ee0 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69  nsaction savepoi
14ef0 6e 74 2e 20 49 66 20 73 6f 2c 0a 20 20 20 20 20  nt. If so,.     
14f00 20 2a 2a 20 61 6e 64 20 74 68 69 73 20 69 73 20   ** and this is 
14f10 61 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e  a RELEASE comman
14f20 64 2c 20 74 68 65 6e 20 74 68 65 20 63 75 72 72  d, then the curr
14f30 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ent transaction 
14f40 0a 20 20 20 20 20 20 2a 2a 20 69 73 20 63 6f 6d  .      ** is com
14f50 6d 69 74 74 65 64 2e 20 0a 20 20 20 20 20 20 2a  mitted. .      *
14f60 2f 0a 20 20 20 20 20 20 69 6e 74 20 69 73 54 72  /.      int isTr
14f70 61 6e 73 61 63 74 69 6f 6e 20 3d 20 70 53 61 76  ansaction = pSav
14f80 65 70 6f 69 6e 74 2d 3e 70 4e 65 78 74 3d 3d 30  epoint->pNext==0
14f90 20 26 26 20 64 62 2d 3e 69 73 54 72 61 6e 73 61   && db->isTransa
14fa0 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3b 0a  ctionSavepoint;.
14fb0 20 20 20 20 20 20 69 66 28 20 69 73 54 72 61 6e        if( isTran
14fc0 73 61 63 74 69 6f 6e 20 26 26 20 70 31 3d 3d 53  saction && p1==S
14fd0 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45  AVEPOINT_RELEASE
14fe0 20 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20   ){.        if( 
14ff0 28 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62  (rc = sqlite3Vdb
15000 65 43 68 65 63 6b 46 6b 28 70 2c 20 31 29 29 21  eCheckFk(p, 1))!
15010 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
15020 20 20 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62          goto vdb
15030 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20  e_return;.      
15040 20 20 7d 0a 20 20 20 20 20 20 20 20 64 62 2d 3e    }.        db->
15050 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 31 3b 0a  autoCommit = 1;.
15060 20 20 20 20 20 20 20 20 69 66 28 20 73 71 6c 69          if( sqli
15070 74 65 33 56 64 62 65 48 61 6c 74 28 70 29 3d 3d  te3VdbeHalt(p)==
15080 53 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20  SQLITE_BUSY ){. 
15090 20 20 20 20 20 20 20 20 20 70 2d 3e 70 63 20 3d           p->pc =
150a0 20 70 63 3b 0a 20 20 20 20 20 20 20 20 20 20 64   pc;.          d
150b0 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20  b->autoCommit = 
150c0 30 3b 0a 20 20 20 20 20 20 20 20 20 20 70 2d 3e  0;.          p->
150d0 72 63 20 3d 20 72 63 20 3d 20 53 51 4c 49 54 45  rc = rc = SQLITE
150e0 5f 42 55 53 59 3b 0a 20 20 20 20 20 20 20 20 20  _BUSY;.         
150f0 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72   goto vdbe_retur
15100 6e 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  n;.        }.   
15110 20 20 20 20 20 64 62 2d 3e 69 73 54 72 61 6e 73       db->isTrans
15120 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 20  actionSavepoint 
15130 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 72 63 20  = 0;.        rc 
15140 3d 20 70 2d 3e 72 63 3b 0a 20 20 20 20 20 20 7d  = p->rc;.      }
15150 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 69 53  else{.        iS
15160 61 76 65 70 6f 69 6e 74 20 3d 20 64 62 2d 3e 6e  avepoint = db->n
15170 53 61 76 65 70 6f 69 6e 74 20 2d 20 69 53 61 76  Savepoint - iSav
15180 65 70 6f 69 6e 74 20 2d 20 31 3b 0a 20 20 20 20  epoint - 1;.    
15190 20 20 20 20 66 6f 72 28 69 69 3d 30 3b 20 69 69      for(ii=0; ii
151a0 3c 64 62 2d 3e 6e 44 62 3b 20 69 69 2b 2b 29 7b  <db->nDb; ii++){
151b0 0a 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20  .          rc = 
151c0 73 71 6c 69 74 65 33 42 74 72 65 65 53 61 76 65  sqlite3BtreeSave
151d0 70 6f 69 6e 74 28 64 62 2d 3e 61 44 62 5b 69 69  point(db->aDb[ii
151e0 5d 2e 70 42 74 2c 20 70 31 2c 20 69 53 61 76 65  ].pBt, p1, iSave
151f0 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20 20 20  point);.        
15200 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
15210 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20  _OK ){.         
15220 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
15230 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
15240 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
15250 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 31  }.        if( p1
15260 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c  ==SAVEPOINT_ROLL
15270 42 41 43 4b 20 26 26 20 28 64 62 2d 3e 66 6c 61  BACK && (db->fla
15280 67 73 26 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e  gs&SQLITE_Intern
15290 43 68 61 6e 67 65 73 29 21 3d 30 20 29 7b 0a 20  Changes)!=0 ){. 
152a0 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
152b0 45 78 70 69 72 65 50 72 65 70 61 72 65 64 53 74  ExpirePreparedSt
152c0 61 74 65 6d 65 6e 74 73 28 64 62 29 3b 0a 20 20  atements(db);.  
152d0 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 52          sqlite3R
152e0 65 73 65 74 49 6e 74 65 72 6e 61 6c 53 63 68 65  esetInternalSche
152f0 6d 61 28 64 62 2c 20 30 29 3b 0a 20 20 20 20 20  ma(db, 0);.     
15300 20 20 20 20 20 64 62 2d 3e 66 6c 61 67 73 20 3d       db->flags =
15310 20 28 64 62 2d 3e 66 6c 61 67 73 20 7c 20 53 51   (db->flags | SQ
15320 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68 61 6e 67  LITE_InternChang
15330 65 73 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  es);.        }. 
15340 20 20 20 20 20 7d 0a 20 20 0a 20 20 20 20 20 20       }.  .      
15350 2f 2a 20 52 65 67 61 72 64 6c 65 73 73 20 6f 66  /* Regardless of
15360 20 77 68 65 74 68 65 72 20 74 68 69 73 20 69 73   whether this is
15370 20 61 20 52 45 4c 45 41 53 45 20 6f 72 20 52 4f   a RELEASE or RO
15380 4c 4c 42 41 43 4b 2c 20 64 65 73 74 72 6f 79 20  LLBACK, destroy 
15390 61 6c 6c 20 0a 20 20 20 20 20 20 2a 2a 20 73 61  all .      ** sa
153a0 76 65 70 6f 69 6e 74 73 20 6e 65 73 74 65 64 20  vepoints nested 
153b0 69 6e 73 69 64 65 20 6f 66 20 74 68 65 20 73 61  inside of the sa
153c0 76 65 70 6f 69 6e 74 20 62 65 69 6e 67 20 6f 70  vepoint being op
153d0 65 72 61 74 65 64 20 6f 6e 2e 20 2a 2f 0a 20 20  erated on. */.  
153e0 20 20 20 20 77 68 69 6c 65 28 20 64 62 2d 3e 70      while( db->p
153f0 53 61 76 65 70 6f 69 6e 74 21 3d 70 53 61 76 65  Savepoint!=pSave
15400 70 6f 69 6e 74 20 29 7b 0a 20 20 20 20 20 20 20  point ){.       
15410 20 70 54 6d 70 20 3d 20 64 62 2d 3e 70 53 61 76   pTmp = db->pSav
15420 65 70 6f 69 6e 74 3b 0a 20 20 20 20 20 20 20 20  epoint;.        
15430 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 3d  db->pSavepoint =
15440 20 70 54 6d 70 2d 3e 70 4e 65 78 74 3b 0a 20 20   pTmp->pNext;.  
15450 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 62 46        sqlite3DbF
15460 72 65 65 28 64 62 2c 20 70 54 6d 70 29 3b 0a 20  ree(db, pTmp);. 
15470 20 20 20 20 20 20 20 64 62 2d 3e 6e 53 61 76 65         db->nSave
15480 70 6f 69 6e 74 2d 2d 3b 0a 20 20 20 20 20 20 7d  point--;.      }
15490 0a 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 69 74  ..      /* If it
154a0 20 69 73 20 61 20 52 45 4c 45 41 53 45 2c 20 74   is a RELEASE, t
154b0 68 65 6e 20 64 65 73 74 72 6f 79 20 74 68 65 20  hen destroy the 
154c0 73 61 76 65 70 6f 69 6e 74 20 62 65 69 6e 67 20  savepoint being 
154d0 6f 70 65 72 61 74 65 64 20 6f 6e 20 0a 20 20 20  operated on .   
154e0 20 20 20 2a 2a 20 74 6f 6f 2e 20 49 66 20 69 74     ** too. If it
154f0 20 69 73 20 61 20 52 4f 4c 4c 42 41 43 4b 20 54   is a ROLLBACK T
15500 4f 2c 20 74 68 65 6e 20 73 65 74 20 74 68 65 20  O, then set the 
15510 6e 75 6d 62 65 72 20 6f 66 20 64 65 66 65 72 72  number of deferr
15520 65 64 20 0a 20 20 20 20 20 20 2a 2a 20 63 6f 6e  ed .      ** con
15530 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f  straint violatio
15540 6e 73 20 70 72 65 73 65 6e 74 20 69 6e 20 74 68  ns present in th
15550 65 20 64 61 74 61 62 61 73 65 20 74 6f 20 74 68  e database to th
15560 65 20 76 61 6c 75 65 20 73 74 6f 72 65 64 0a 20  e value stored. 
15570 20 20 20 20 20 2a 2a 20 77 68 65 6e 20 74 68 65       ** when the
15580 20 73 61 76 65 70 6f 69 6e 74 20 77 61 73 20 63   savepoint was c
15590 72 65 61 74 65 64 2e 20 20 2a 2f 0a 20 20 20 20  reated.  */.    
155a0 20 20 69 66 28 20 70 31 3d 3d 53 41 56 45 50 4f    if( p1==SAVEPO
155b0 49 4e 54 5f 52 45 4c 45 41 53 45 20 29 7b 0a 20  INT_RELEASE ){. 
155c0 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
155d0 53 61 76 65 70 6f 69 6e 74 3d 3d 64 62 2d 3e 70  Savepoint==db->p
155e0 53 61 76 65 70 6f 69 6e 74 20 29 3b 0a 20 20 20  Savepoint );.   
155f0 20 20 20 20 20 64 62 2d 3e 70 53 61 76 65 70 6f       db->pSavepo
15600 69 6e 74 20 3d 20 70 53 61 76 65 70 6f 69 6e 74  int = pSavepoint
15610 2d 3e 70 4e 65 78 74 3b 0a 20 20 20 20 20 20 20  ->pNext;.       
15620 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64   sqlite3DbFree(d
15630 62 2c 20 70 53 61 76 65 70 6f 69 6e 74 29 3b 0a  b, pSavepoint);.
15640 20 20 20 20 20 20 20 20 69 66 28 20 21 69 73 54          if( !isT
15650 72 61 6e 73 61 63 74 69 6f 6e 20 29 7b 0a 20 20  ransaction ){.  
15660 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53 61 76          db->nSav
15670 65 70 6f 69 6e 74 2d 2d 3b 0a 20 20 20 20 20 20  epoint--;.      
15680 20 20 7d 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b    }.      }else{
15690 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 44 65  .        db->nDe
156a0 66 65 72 72 65 64 43 6f 6e 73 20 3d 20 70 53 61  ferredCons = pSa
156b0 76 65 70 6f 69 6e 74 2d 3e 6e 44 65 66 65 72 72  vepoint->nDeferr
156c0 65 64 43 6f 6e 73 3b 0a 20 20 20 20 20 20 7d 0a  edCons;.      }.
156d0 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 62 72 65      }.  }..  bre
156e0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
156f0 3a 20 41 75 74 6f 43 6f 6d 6d 69 74 20 50 31 20  : AutoCommit P1 
15700 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53  P2 * * *.**.** S
15710 65 74 20 74 68 65 20 64 61 74 61 62 61 73 65 20  et the database 
15720 61 75 74 6f 2d 63 6f 6d 6d 69 74 20 66 6c 61 67  auto-commit flag
15730 20 74 6f 20 50 31 20 28 31 20 6f 72 20 30 29 2e   to P1 (1 or 0).
15740 20 49 66 20 50 32 20 69 73 20 74 72 75 65 2c 20   If P2 is true, 
15750 72 6f 6c 6c 0a 2a 2a 20 62 61 63 6b 20 61 6e 79  roll.** back any
15760 20 63 75 72 72 65 6e 74 6c 79 20 61 63 74 69 76   currently activ
15770 65 20 62 74 72 65 65 20 74 72 61 6e 73 61 63 74  e btree transact
15780 69 6f 6e 73 2e 20 49 66 20 74 68 65 72 65 20 61  ions. If there a
15790 72 65 20 61 6e 79 20 61 63 74 69 76 65 0a 2a 2a  re any active.**
157a0 20 56 4d 73 20 28 61 70 61 72 74 20 66 72 6f 6d   VMs (apart from
157b0 20 74 68 69 73 20 6f 6e 65 29 2c 20 74 68 65 6e   this one), then
157c0 20 61 20 52 4f 4c 4c 42 41 43 4b 20 66 61 69 6c   a ROLLBACK fail
157d0 73 2e 20 20 41 20 43 4f 4d 4d 49 54 20 66 61 69  s.  A COMMIT fai
157e0 6c 73 20 69 66 0a 2a 2a 20 74 68 65 72 65 20 61  ls if.** there a
157f0 72 65 20 61 63 74 69 76 65 20 77 72 69 74 69 6e  re active writin
15800 67 20 56 4d 73 20 6f 72 20 61 63 74 69 76 65 20  g VMs or active 
15810 56 4d 73 20 74 68 61 74 20 75 73 65 20 73 68 61  VMs that use sha
15820 72 65 64 20 63 61 63 68 65 2e 0a 2a 2a 0a 2a 2a  red cache..**.**
15830 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   This instructio
15840 6e 20 63 61 75 73 65 73 20 74 68 65 20 56 4d 20  n causes the VM 
15850 74 6f 20 68 61 6c 74 2e 0a 2a 2f 0a 63 61 73 65  to halt..*/.case
15860 20 4f 50 5f 41 75 74 6f 43 6f 6d 6d 69 74 3a 20   OP_AutoCommit: 
15870 7b 0a 20 20 69 6e 74 20 64 65 73 69 72 65 64 41  {.  int desiredA
15880 75 74 6f 43 6f 6d 6d 69 74 3b 0a 20 20 69 6e 74  utoCommit;.  int
15890 20 69 52 6f 6c 6c 62 61 63 6b 3b 0a 20 20 69 6e   iRollback;.  in
158a0 74 20 74 75 72 6e 4f 6e 41 43 3b 0a 0a 20 20 64  t turnOnAC;..  d
158b0 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74  esiredAutoCommit
158c0 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 69 52   = pOp->p1;.  iR
158d0 6f 6c 6c 62 61 63 6b 20 3d 20 70 4f 70 2d 3e 70  ollback = pOp->p
158e0 32 3b 0a 20 20 74 75 72 6e 4f 6e 41 43 20 3d 20  2;.  turnOnAC = 
158f0 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69  desiredAutoCommi
15900 74 20 26 26 20 21 64 62 2d 3e 61 75 74 6f 43 6f  t && !db->autoCo
15910 6d 6d 69 74 3b 0a 20 20 61 73 73 65 72 74 28 20  mmit;.  assert( 
15920 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69  desiredAutoCommi
15930 74 3d 3d 31 20 7c 7c 20 64 65 73 69 72 65 64 41  t==1 || desiredA
15940 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 29 3b 0a  utoCommit==0 );.
15950 20 20 61 73 73 65 72 74 28 20 64 65 73 69 72 65    assert( desire
15960 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20 7c  dAutoCommit==1 |
15970 7c 20 69 52 6f 6c 6c 62 61 63 6b 3d 3d 30 20 29  | iRollback==0 )
15980 3b 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e  ;.  assert( db->
15990 61 63 74 69 76 65 56 64 62 65 43 6e 74 3e 30 20  activeVdbeCnt>0 
159a0 29 3b 20 20 2f 2a 20 41 74 20 6c 65 61 73 74 20  );  /* At least 
159b0 74 68 69 73 20 6f 6e 65 20 56 4d 20 69 73 20 61  this one VM is a
159c0 63 74 69 76 65 20 2a 2f 0a 0a 20 20 69 66 28 20  ctive */..  if( 
159d0 74 75 72 6e 4f 6e 41 43 20 26 26 20 69 52 6f 6c  turnOnAC && iRol
159e0 6c 62 61 63 6b 20 26 26 20 64 62 2d 3e 61 63 74  lback && db->act
159f0 69 76 65 56 64 62 65 43 6e 74 3e 31 20 29 7b 0a  iveVdbeCnt>1 ){.
15a00 20 20 20 20 2f 2a 20 49 66 20 74 68 69 73 20 69      /* If this i
15a10 6e 73 74 72 75 63 74 69 6f 6e 20 69 6d 70 6c 65  nstruction imple
15a20 6d 65 6e 74 73 20 61 20 52 4f 4c 4c 42 41 43 4b  ments a ROLLBACK
15a30 20 61 6e 64 20 6f 74 68 65 72 20 56 4d 73 20 61   and other VMs a
15a40 72 65 0a 20 20 20 20 2a 2a 20 73 74 69 6c 6c 20  re.    ** still 
15a50 72 75 6e 6e 69 6e 67 2c 20 61 6e 64 20 61 20 74  running, and a t
15a60 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 61 63  ransaction is ac
15a70 74 69 76 65 2c 20 72 65 74 75 72 6e 20 61 6e 20  tive, return an 
15a80 65 72 72 6f 72 20 69 6e 64 69 63 61 74 69 6e 67  error indicating
15a90 0a 20 20 20 20 2a 2a 20 74 68 61 74 20 74 68 65  .    ** that the
15aa0 20 6f 74 68 65 72 20 56 4d 73 20 6d 75 73 74 20   other VMs must 
15ab0 63 6f 6d 70 6c 65 74 65 20 66 69 72 73 74 2e 20  complete first. 
15ac0 0a 20 20 20 20 2a 2f 0a 20 20 20 20 73 71 6c 69  .    */.    sqli
15ad0 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d  te3SetString(&p-
15ae0 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 63  >zErrMsg, db, "c
15af0 61 6e 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 20 74  annot rollback t
15b00 72 61 6e 73 61 63 74 69 6f 6e 20 2d 20 22 0a 20  ransaction - ". 
15b10 20 20 20 20 20 20 20 22 53 51 4c 20 73 74 61 74         "SQL stat
15b20 65 6d 65 6e 74 73 20 69 6e 20 70 72 6f 67 72 65  ements in progre
15b30 73 73 22 29 3b 0a 20 20 20 20 72 63 20 3d 20 53  ss");.    rc = S
15b40 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 7d 65  QLITE_BUSY;.  }e
15b50 6c 73 65 20 69 66 28 20 74 75 72 6e 4f 6e 41 43  lse if( turnOnAC
15b60 20 26 26 20 21 69 52 6f 6c 6c 62 61 63 6b 20 26   && !iRollback &
15b70 26 20 64 62 2d 3e 77 72 69 74 65 56 64 62 65 43  & db->writeVdbeC
15b80 6e 74 3e 30 20 29 7b 0a 20 20 20 20 2f 2a 20 49  nt>0 ){.    /* I
15b90 66 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69  f this instructi
15ba0 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 73 20 61 20  on implements a 
15bb0 43 4f 4d 4d 49 54 20 61 6e 64 20 6f 74 68 65 72  COMMIT and other
15bc0 20 56 4d 73 20 61 72 65 20 77 72 69 74 69 6e 67   VMs are writing
15bd0 0a 20 20 20 20 2a 2a 20 72 65 74 75 72 6e 20 61  .    ** return a
15be0 6e 20 65 72 72 6f 72 20 69 6e 64 69 63 61 74 69  n error indicati
15bf0 6e 67 20 74 68 61 74 20 74 68 65 20 6f 74 68 65  ng that the othe
15c00 72 20 56 4d 73 20 6d 75 73 74 20 63 6f 6d 70 6c  r VMs must compl
15c10 65 74 65 20 66 69 72 73 74 2e 20 0a 20 20 20 20  ete first. .    
15c20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65  */.    sqlite3Se
15c30 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72  tString(&p->zErr
15c40 4d 73 67 2c 20 64 62 2c 20 22 63 61 6e 6e 6f 74  Msg, db, "cannot
15c50 20 63 6f 6d 6d 69 74 20 74 72 61 6e 73 61 63 74   commit transact
15c60 69 6f 6e 20 2d 20 22 0a 20 20 20 20 20 20 20 20  ion - ".        
15c70 22 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20  "SQL statements 
15c80 69 6e 20 70 72 6f 67 72 65 73 73 22 29 3b 0a 20  in progress");. 
15c90 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42     rc = SQLITE_B
15ca0 55 53 59 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  USY;.  }else if(
15cb0 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d   desiredAutoComm
15cc0 69 74 21 3d 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d  it!=db->autoComm
15cd0 69 74 20 29 7b 0a 20 20 20 20 69 66 28 20 69 52  it ){.    if( iR
15ce0 6f 6c 6c 62 61 63 6b 20 29 7b 0a 20 20 20 20 20  ollback ){.     
15cf0 20 61 73 73 65 72 74 28 20 64 65 73 69 72 65 64   assert( desired
15d00 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20 29 3b  AutoCommit==1 );
15d10 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 52 6f  .      sqlite3Ro
15d20 6c 6c 62 61 63 6b 41 6c 6c 28 64 62 29 3b 0a 20  llbackAll(db);. 
15d30 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d       db->autoCom
15d40 6d 69 74 20 3d 20 31 3b 0a 20 20 20 20 7d 65 6c  mit = 1;.    }el
15d50 73 65 20 69 66 28 20 28 72 63 20 3d 20 73 71 6c  se if( (rc = sql
15d60 69 74 65 33 56 64 62 65 43 68 65 63 6b 46 6b 28  ite3VdbeCheckFk(
15d70 70 2c 20 31 29 29 21 3d 53 51 4c 49 54 45 5f 4f  p, 1))!=SQLITE_O
15d80 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20  K ){.      goto 
15d90 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20  vdbe_return;.   
15da0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 64 62   }else{.      db
15db0 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 28  ->autoCommit = (
15dc0 75 38 29 64 65 73 69 72 65 64 41 75 74 6f 43 6f  u8)desiredAutoCo
15dd0 6d 6d 69 74 3b 0a 20 20 20 20 20 20 69 66 28 20  mmit;.      if( 
15de0 73 71 6c 69 74 65 33 56 64 62 65 48 61 6c 74 28  sqlite3VdbeHalt(
15df0 70 29 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20  p)==SQLITE_BUSY 
15e00 29 7b 0a 20 20 20 20 20 20 20 20 70 2d 3e 70 63  ){.        p->pc
15e10 20 3d 20 70 63 3b 0a 20 20 20 20 20 20 20 20 64   = pc;.        d
15e20 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20  b->autoCommit = 
15e30 28 75 38 29 28 31 2d 64 65 73 69 72 65 64 41 75  (u8)(1-desiredAu
15e40 74 6f 43 6f 6d 6d 69 74 29 3b 0a 20 20 20 20 20  toCommit);.     
15e50 20 20 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20     p->rc = rc = 
15e60 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20  SQLITE_BUSY;.   
15e70 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72       goto vdbe_r
15e80 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 7d 0a 20  eturn;.      }. 
15e90 20 20 20 7d 0a 20 20 20 20 61 73 73 65 72 74 28     }.    assert(
15ea0 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 3d   db->nStatement=
15eb0 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  =0 );.    sqlite
15ec0 33 43 6c 6f 73 65 53 61 76 65 70 6f 69 6e 74 73  3CloseSavepoints
15ed0 28 64 62 29 3b 0a 20 20 20 20 69 66 28 20 70 2d  (db);.    if( p-
15ee0 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29  >rc==SQLITE_OK )
15ef0 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c  {.      rc = SQL
15f00 49 54 45 5f 44 4f 4e 45 3b 0a 20 20 20 20 7d 65  ITE_DONE;.    }e
15f10 6c 73 65 7b 0a 20 20 20 20 20 20 72 63 20 3d 20  lse{.      rc = 
15f20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20  SQLITE_ERROR;.  
15f30 20 20 7d 0a 20 20 20 20 67 6f 74 6f 20 76 64 62    }.    goto vdb
15f40 65 5f 72 65 74 75 72 6e 3b 0a 20 20 7d 65 6c 73  e_return;.  }els
15f50 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65  e{.    sqlite3Se
15f60 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72  tString(&p->zErr
15f70 4d 73 67 2c 20 64 62 2c 0a 20 20 20 20 20 20 20  Msg, db,.       
15f80 20 28 21 64 65 73 69 72 65 64 41 75 74 6f 43 6f   (!desiredAutoCo
15f90 6d 6d 69 74 29 3f 22 63 61 6e 6e 6f 74 20 73 74  mmit)?"cannot st
15fa0 61 72 74 20 61 20 74 72 61 6e 73 61 63 74 69 6f  art a transactio
15fb0 6e 20 77 69 74 68 69 6e 20 61 20 74 72 61 6e 73  n within a trans
15fc0 61 63 74 69 6f 6e 22 3a 28 0a 20 20 20 20 20 20  action":(.      
15fd0 20 20 28 69 52 6f 6c 6c 62 61 63 6b 29 3f 22 63    (iRollback)?"c
15fe0 61 6e 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 20 2d  annot rollback -
15ff0 20 6e 6f 20 74 72 61 6e 73 61 63 74 69 6f 6e 20   no transaction 
16000 69 73 20 61 63 74 69 76 65 22 3a 0a 20 20 20 20  is active":.    
16010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
16020 63 61 6e 6e 6f 74 20 63 6f 6d 6d 69 74 20 2d 20  cannot commit - 
16030 6e 6f 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  no transaction i
16040 73 20 61 63 74 69 76 65 22 29 29 3b 0a 20 20 20  s active"));.   
16050 20 20 20 20 20 20 0a 20 20 20 20 72 63 20 3d 20        .    rc = 
16060 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20  SQLITE_ERROR;.  
16070 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
16080 20 4f 70 63 6f 64 65 3a 20 54 72 61 6e 73 61 63   Opcode: Transac
16090 74 69 6f 6e 20 50 31 20 50 32 20 2a 20 2a 20 2a  tion P1 P2 * * *
160a0 0a 2a 2a 0a 2a 2a 20 42 65 67 69 6e 20 61 20 74  .**.** Begin a t
160b0 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 54 68 65  ransaction.  The
160c0 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 65 6e 64   transaction end
160d0 73 20 77 68 65 6e 20 61 20 43 6f 6d 6d 69 74 20  s when a Commit 
160e0 6f 72 20 52 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 6f  or Rollback.** o
160f0 70 63 6f 64 65 20 69 73 20 65 6e 63 6f 75 6e 74  pcode is encount
16100 65 72 65 64 2e 20 20 44 65 70 65 6e 64 69 6e 67  ered.  Depending
16110 20 6f 6e 20 74 68 65 20 4f 4e 20 43 4f 4e 46 4c   on the ON CONFL
16120 49 43 54 20 73 65 74 74 69 6e 67 2c 20 74 68 65  ICT setting, the
16130 0a 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  .** transaction 
16140 6d 69 67 68 74 20 61 6c 73 6f 20 62 65 20 72 6f  might also be ro
16150 6c 6c 65 64 20 62 61 63 6b 20 69 66 20 61 6e 20  lled back if an 
16160 65 72 72 6f 72 20 69 73 20 65 6e 63 6f 75 6e 74  error is encount
16170 65 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69  ered..**.** P1 i
16180 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20 74  s the index of t
16190 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
161a0 20 6f 6e 20 77 68 69 63 68 20 74 68 65 20 74 72   on which the tr
161b0 61 6e 73 61 63 74 69 6f 6e 20 69 73 0a 2a 2a 20  ansaction is.** 
161c0 73 74 61 72 74 65 64 2e 20 20 49 6e 64 65 78 20  started.  Index 
161d0 30 20 69 73 20 74 68 65 20 6d 61 69 6e 20 64 61  0 is the main da
161e0 74 61 62 61 73 65 20 66 69 6c 65 20 61 6e 64 20  tabase file and 
161f0 69 6e 64 65 78 20 31 20 69 73 20 74 68 65 0a 2a  index 1 is the.*
16200 2a 20 66 69 6c 65 20 75 73 65 64 20 66 6f 72 20  * file used for 
16210 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73  temporary tables
16220 2e 20 20 49 6e 64 69 63 65 73 20 6f 66 20 32 20  .  Indices of 2 
16230 6f 72 20 6d 6f 72 65 20 61 72 65 20 75 73 65 64  or more are used
16240 20 66 6f 72 0a 2a 2a 20 61 74 74 61 63 68 65 64   for.** attached
16250 20 64 61 74 61 62 61 73 65 73 2e 0a 2a 2a 0a 2a   databases..**.*
16260 2a 20 49 66 20 50 32 20 69 73 20 6e 6f 6e 2d 7a  * If P2 is non-z
16270 65 72 6f 2c 20 74 68 65 6e 20 61 20 77 72 69 74  ero, then a writ
16280 65 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  e-transaction is
16290 20 73 74 61 72 74 65 64 2e 20 20 41 20 52 45 53   started.  A RES
162a0 45 52 56 45 44 20 6c 6f 63 6b 20 69 73 0a 2a 2a  ERVED lock is.**
162b0 20 6f 62 74 61 69 6e 65 64 20 6f 6e 20 74 68 65   obtained on the
162c0 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 77   database file w
162d0 68 65 6e 20 61 20 77 72 69 74 65 2d 74 72 61 6e  hen a write-tran
162e0 73 61 63 74 69 6f 6e 20 69 73 20 73 74 61 72 74  saction is start
162f0 65 64 2e 20 20 4e 6f 0a 2a 2a 20 6f 74 68 65 72  ed.  No.** other
16300 20 70 72 6f 63 65 73 73 20 63 61 6e 20 73 74 61   process can sta
16310 72 74 20 61 6e 6f 74 68 65 72 20 77 72 69 74 65  rt another write
16320 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 77 68 69   transaction whi
16330 6c 65 20 74 68 69 73 20 74 72 61 6e 73 61 63 74  le this transact
16340 69 6f 6e 20 69 73 0a 2a 2a 20 75 6e 64 65 72 77  ion is.** underw
16350 61 79 2e 20 20 53 74 61 72 74 69 6e 67 20 61 20  ay.  Starting a 
16360 77 72 69 74 65 20 74 72 61 6e 73 61 63 74 69 6f  write transactio
16370 6e 20 61 6c 73 6f 20 63 72 65 61 74 65 73 20 61  n also creates a
16380 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61   rollback journa
16390 6c 2e 20 41 0a 2a 2a 20 77 72 69 74 65 20 74 72  l. A.** write tr
163a0 61 6e 73 61 63 74 69 6f 6e 20 6d 75 73 74 20 62  ansaction must b
163b0 65 20 73 74 61 72 74 65 64 20 62 65 66 6f 72 65  e started before
163c0 20 61 6e 79 20 63 68 61 6e 67 65 73 20 63 61 6e   any changes can
163d0 20 62 65 20 6d 61 64 65 20 74 6f 20 74 68 65 0a   be made to the.
163e0 2a 2a 20 64 61 74 61 62 61 73 65 2e 20 20 49 66  ** database.  If
163f0 20 50 32 20 69 73 20 32 20 6f 72 20 67 72 65 61   P2 is 2 or grea
16400 74 65 72 20 74 68 65 6e 20 61 6e 20 45 58 43 4c  ter then an EXCL
16410 55 53 49 56 45 20 6c 6f 63 6b 20 69 73 20 61 6c  USIVE lock is al
16420 73 6f 20 6f 62 74 61 69 6e 65 64 0a 2a 2a 20 6f  so obtained.** o
16430 6e 20 74 68 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a  n the file..**.*
16440 2a 20 49 66 20 61 20 77 72 69 74 65 2d 74 72 61  * If a write-tra
16450 6e 73 61 63 74 69 6f 6e 20 69 73 20 73 74 61 72  nsaction is star
16460 74 65 64 20 61 6e 64 20 74 68 65 20 56 64 62 65  ted and the Vdbe
16470 2e 75 73 65 73 53 74 6d 74 4a 6f 75 72 6e 61 6c  .usesStmtJournal
16480 20 66 6c 61 67 20 69 73 0a 2a 2a 20 74 72 75 65   flag is.** true
16490 20 28 74 68 69 73 20 66 6c 61 67 20 69 73 20 73   (this flag is s
164a0 65 74 20 69 66 20 74 68 65 20 56 64 62 65 20 6d  et if the Vdbe m
164b0 61 79 20 6d 6f 64 69 66 79 20 6d 6f 72 65 20 74  ay modify more t
164c0 68 61 6e 20 6f 6e 65 20 72 6f 77 20 61 6e 64 20  han one row and 
164d0 6d 61 79 0a 2a 2a 20 74 68 72 6f 77 20 61 6e 20  may.** throw an 
164e0 41 42 4f 52 54 20 65 78 63 65 70 74 69 6f 6e 29  ABORT exception)
164f0 2c 20 61 20 73 74 61 74 65 6d 65 6e 74 20 74 72  , a statement tr
16500 61 6e 73 61 63 74 69 6f 6e 20 6d 61 79 20 61 6c  ansaction may al
16510 73 6f 20 62 65 20 6f 70 65 6e 65 64 2e 0a 2a 2a  so be opened..**
16520 20 4d 6f 72 65 20 73 70 65 63 69 66 69 63 61 6c   More specifical
16530 6c 79 2c 20 61 20 73 74 61 74 65 6d 65 6e 74 20  ly, a statement 
16540 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6f  transaction is o
16550 70 65 6e 65 64 20 69 66 66 20 74 68 65 20 64 61  pened iff the da
16560 74 61 62 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63  tabase.** connec
16570 74 69 6f 6e 20 69 73 20 63 75 72 72 65 6e 74 6c  tion is currentl
16580 79 20 6e 6f 74 20 69 6e 20 61 75 74 6f 63 6f 6d  y not in autocom
16590 6d 69 74 20 6d 6f 64 65 2c 20 6f 72 20 69 66 20  mit mode, or if 
165a0 74 68 65 72 65 20 61 72 65 20 6f 74 68 65 72 0a  there are other.
165b0 2a 2a 20 61 63 74 69 76 65 20 73 74 61 74 65 6d  ** active statem
165c0 65 6e 74 73 2e 20 41 20 73 74 61 74 65 6d 65 6e  ents. A statemen
165d0 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61 6c  t transaction al
165e0 6c 6f 77 73 20 74 68 65 20 61 66 66 65 63 74 73  lows the affects
165f0 20 6f 66 20 74 68 69 73 0a 2a 2a 20 56 44 42 45   of this.** VDBE
16600 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61   to be rolled ba
16610 63 6b 20 61 66 74 65 72 20 61 6e 20 65 72 72 6f  ck after an erro
16620 72 20 77 69 74 68 6f 75 74 20 68 61 76 69 6e 67  r without having
16630 20 74 6f 20 72 6f 6c 6c 20 62 61 63 6b 20 74 68   to roll back th
16640 65 0a 2a 2a 20 65 6e 74 69 72 65 20 74 72 61 6e  e.** entire tran
16650 73 61 63 74 69 6f 6e 2e 20 49 66 20 6e 6f 20 65  saction. If no e
16660 72 72 6f 72 20 69 73 20 65 6e 63 6f 75 6e 74 65  rror is encounte
16670 72 65 64 2c 20 74 68 65 20 73 74 61 74 65 6d 65  red, the stateme
16680 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a  nt transaction.*
16690 2a 20 77 69 6c 6c 20 61 75 74 6f 6d 61 74 69 63  * will automatic
166a0 61 6c 6c 79 20 63 6f 6d 6d 69 74 20 77 68 65 6e  ally commit when
166b0 20 74 68 65 20 56 44 42 45 20 68 61 6c 74 73 2e   the VDBE halts.
166c0 0a 2a 2a 0a 2a 2a 20 49 66 20 50 32 20 69 73 20  .**.** If P2 is 
166d0 7a 65 72 6f 2c 20 74 68 65 6e 20 61 20 72 65 61  zero, then a rea
166e0 64 2d 6c 6f 63 6b 20 69 73 20 6f 62 74 61 69 6e  d-lock is obtain
166f0 65 64 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61  ed on the databa
16700 73 65 20 66 69 6c 65 2e 0a 2a 2f 0a 63 61 73 65  se file..*/.case
16710 20 4f 50 5f 54 72 61 6e 73 61 63 74 69 6f 6e 3a   OP_Transaction:
16720 20 7b 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b   {.  Btree *pBt;
16730 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
16740 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
16750 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61  1<db->nDb );.  a
16760 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65  ssert( (p->btree
16770 4d 61 73 6b 20 26 20 28 28 28 79 44 62 4d 61 73  Mask & (((yDbMas
16780 6b 29 31 29 3c 3c 70 4f 70 2d 3e 70 31 29 29 21  k)1)<<pOp->p1))!
16790 3d 30 20 29 3b 0a 20 20 70 42 74 20 3d 20 64 62  =0 );.  pBt = db
167a0 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70  ->aDb[pOp->p1].p
167b0 42 74 3b 0a 0a 20 20 69 66 28 20 70 42 74 20 29  Bt;..  if( pBt )
167c0 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  {.    rc = sqlit
167d0 65 33 42 74 72 65 65 42 65 67 69 6e 54 72 61 6e  e3BtreeBeginTran
167e0 73 28 70 42 74 2c 20 70 4f 70 2d 3e 70 32 29 3b  s(pBt, pOp->p2);
167f0 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  .    if( rc==SQL
16800 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20 20  ITE_BUSY ){.    
16810 20 20 70 2d 3e 70 63 20 3d 20 70 63 3b 0a 20 20    p->pc = pc;.  
16820 20 20 20 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d      p->rc = rc =
16830 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20   SQLITE_BUSY;.  
16840 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65      goto vdbe_re
16850 74 75 72 6e 3b 0a 20 20 20 20 7d 0a 20 20 20 20  turn;.    }.    
16860 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
16870 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20  K ){.      goto 
16880 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
16890 6f 72 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69  or;.    }..    i
168a0 66 28 20 70 4f 70 2d 3e 70 32 20 26 26 20 70 2d  f( pOp->p2 && p-
168b0 3e 75 73 65 73 53 74 6d 74 4a 6f 75 72 6e 61 6c  >usesStmtJournal
168c0 20 0a 20 20 20 20 20 26 26 20 28 64 62 2d 3e 61   .     && (db->a
168d0 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 7c 7c 20  utoCommit==0 || 
168e0 64 62 2d 3e 61 63 74 69 76 65 56 64 62 65 43 6e  db->activeVdbeCn
168f0 74 3e 31 29 20 0a 20 20 20 20 29 7b 0a 20 20 20  t>1) .    ){.   
16900 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74     assert( sqlit
16910 65 33 42 74 72 65 65 49 73 49 6e 54 72 61 6e 73  e3BtreeIsInTrans
16920 28 70 42 74 29 20 29 3b 0a 20 20 20 20 20 20 69  (pBt) );.      i
16930 66 28 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74  f( p->iStatement
16940 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 61  ==0 ){.        a
16950 73 73 65 72 74 28 20 64 62 2d 3e 6e 53 74 61 74  ssert( db->nStat
16960 65 6d 65 6e 74 3e 3d 30 20 26 26 20 64 62 2d 3e  ement>=0 && db->
16970 6e 53 61 76 65 70 6f 69 6e 74 3e 3d 30 20 29 3b  nSavepoint>=0 );
16980 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53 74  .        db->nSt
16990 61 74 65 6d 65 6e 74 2b 2b 3b 20 0a 20 20 20 20  atement++; .    
169a0 20 20 20 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e      p->iStatemen
169b0 74 20 3d 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69  t = db->nSavepoi
169c0 6e 74 20 2b 20 64 62 2d 3e 6e 53 74 61 74 65 6d  nt + db->nStatem
169d0 65 6e 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  ent;.      }.   
169e0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
169f0 74 72 65 65 42 65 67 69 6e 53 74 6d 74 28 70 42  treeBeginStmt(pB
16a00 74 2c 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74  t, p->iStatement
16a10 29 3b 0a 0a 20 20 20 20 20 20 2f 2a 20 53 74 6f  );..      /* Sto
16a20 72 65 20 74 68 65 20 63 75 72 72 65 6e 74 20 76  re the current v
16a30 61 6c 75 65 20 6f 66 20 74 68 65 20 64 61 74 61  alue of the data
16a40 62 61 73 65 20 68 61 6e 64 6c 65 73 20 64 65 66  base handles def
16a50 65 72 72 65 64 20 63 6f 6e 73 74 72 61 69 6e 74  erred constraint
16a60 0a 20 20 20 20 20 20 2a 2a 20 63 6f 75 6e 74 65  .      ** counte
16a70 72 2e 20 49 66 20 74 68 65 20 73 74 61 74 65 6d  r. If the statem
16a80 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ent transaction 
16a90 6e 65 65 64 73 20 74 6f 20 62 65 20 72 6f 6c 6c  needs to be roll
16aa0 65 64 20 62 61 63 6b 2c 0a 20 20 20 20 20 20 2a  ed back,.      *
16ab0 2a 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74  * the value of t
16ac0 68 69 73 20 63 6f 75 6e 74 65 72 20 6e 65 65 64  his counter need
16ad0 73 20 74 6f 20 62 65 20 72 65 73 74 6f 72 65 64  s to be restored
16ae0 20 74 6f 6f 2e 20 20 2a 2f 0a 20 20 20 20 20 20   too.  */.      
16af0 70 2d 3e 6e 53 74 6d 74 44 65 66 43 6f 6e 73 20  p->nStmtDefCons 
16b00 3d 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43  = db->nDeferredC
16b10 6f 6e 73 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  ons;.    }.  }. 
16b20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
16b30 63 6f 64 65 3a 20 52 65 61 64 43 6f 6f 6b 69 65  code: ReadCookie
16b40 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
16b50 0a 2a 2a 20 52 65 61 64 20 63 6f 6f 6b 69 65 20  .** Read cookie 
16b60 6e 75 6d 62 65 72 20 50 33 20 66 72 6f 6d 20 64  number P3 from d
16b70 61 74 61 62 61 73 65 20 50 31 20 61 6e 64 20 77  atabase P1 and w
16b80 72 69 74 65 20 69 74 20 69 6e 74 6f 20 72 65 67  rite it into reg
16b90 69 73 74 65 72 20 50 32 2e 0a 2a 2a 20 50 33 3d  ister P2..** P3=
16ba0 3d 31 20 69 73 20 74 68 65 20 73 63 68 65 6d 61  =1 is the schema
16bb0 20 76 65 72 73 69 6f 6e 2e 20 20 50 33 3d 3d 32   version.  P3==2
16bc0 20 69 73 20 74 68 65 20 64 61 74 61 62 61 73 65   is the database
16bd0 20 66 6f 72 6d 61 74 2e 0a 2a 2a 20 50 33 3d 3d   format..** P3==
16be0 33 20 69 73 20 74 68 65 20 72 65 63 6f 6d 6d 65  3 is the recomme
16bf0 6e 64 65 64 20 70 61 67 65 72 20 63 61 63 68 65  nded pager cache
16c00 20 73 69 7a 65 2c 20 61 6e 64 20 73 6f 20 66 6f   size, and so fo
16c10 72 74 68 2e 20 20 50 31 3d 3d 30 20 69 73 0a 2a  rth.  P1==0 is.*
16c20 2a 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  * the main datab
16c30 61 73 65 20 66 69 6c 65 20 61 6e 64 20 50 31 3d  ase file and P1=
16c40 3d 31 20 69 73 20 74 68 65 20 64 61 74 61 62 61  =1 is the databa
16c50 73 65 20 66 69 6c 65 20 75 73 65 64 20 74 6f 20  se file used to 
16c60 73 74 6f 72 65 0a 2a 2a 20 74 65 6d 70 6f 72 61  store.** tempora
16c70 72 79 20 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a  ry tables..**.**
16c80 20 54 68 65 72 65 20 6d 75 73 74 20 62 65 20 61   There must be a
16c90 20 72 65 61 64 2d 6c 6f 63 6b 20 6f 6e 20 74 68   read-lock on th
16ca0 65 20 64 61 74 61 62 61 73 65 20 28 65 69 74 68  e database (eith
16cb0 65 72 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  er a transaction
16cc0 0a 2a 2a 20 6d 75 73 74 20 62 65 20 73 74 61 72  .** must be star
16cd0 74 65 64 20 6f 72 20 74 68 65 72 65 20 6d 75 73  ted or there mus
16ce0 74 20 62 65 20 61 6e 20 6f 70 65 6e 20 63 75 72  t be an open cur
16cf0 73 6f 72 29 20 62 65 66 6f 72 65 0a 2a 2a 20 65  sor) before.** e
16d00 78 65 63 75 74 69 6e 67 20 74 68 69 73 20 69 6e  xecuting this in
16d10 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61  struction..*/.ca
16d20 73 65 20 4f 50 5f 52 65 61 64 43 6f 6f 6b 69 65  se OP_ReadCookie
16d30 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
16d40 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c    /* out2-prerel
16d50 65 61 73 65 20 2a 2f 0a 20 20 69 6e 74 20 69 4d  ease */.  int iM
16d60 65 74 61 3b 0a 20 20 69 6e 74 20 69 44 62 3b 0a  eta;.  int iDb;.
16d70 20 20 69 6e 74 20 69 43 6f 6f 6b 69 65 3b 0a 0a    int iCookie;..
16d80 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70 31 3b    iDb = pOp->p1;
16d90 0a 20 20 69 43 6f 6f 6b 69 65 20 3d 20 70 4f 70  .  iCookie = pOp
16da0 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72 74 28 20  ->p3;.  assert( 
16db0 70 4f 70 2d 3e 70 33 3c 53 51 4c 49 54 45 5f 4e  pOp->p3<SQLITE_N
16dc0 5f 42 54 52 45 45 5f 4d 45 54 41 20 29 3b 0a 20  _BTREE_META );. 
16dd0 20 61 73 73 65 72 74 28 20 69 44 62 3e 3d 30 20   assert( iDb>=0 
16de0 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29  && iDb<db->nDb )
16df0 3b 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e  ;.  assert( db->
16e00 61 44 62 5b 69 44 62 5d 2e 70 42 74 21 3d 30 20  aDb[iDb].pBt!=0 
16e10 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d  );.  assert( (p-
16e20 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28 28 28  >btreeMask & (((
16e30 79 44 62 4d 61 73 6b 29 31 29 3c 3c 69 44 62 29  yDbMask)1)<<iDb)
16e40 29 21 3d 30 20 29 3b 0a 0a 20 20 73 71 6c 69 74  )!=0 );..  sqlit
16e50 65 33 42 74 72 65 65 47 65 74 4d 65 74 61 28 64  e3BtreeGetMeta(d
16e60 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 2c  b->aDb[iDb].pBt,
16e70 20 69 43 6f 6f 6b 69 65 2c 20 28 75 33 32 20 2a   iCookie, (u32 *
16e80 29 26 69 4d 65 74 61 29 3b 0a 20 20 70 4f 75 74  )&iMeta);.  pOut
16e90 2d 3e 75 2e 69 20 3d 20 69 4d 65 74 61 3b 0a 20  ->u.i = iMeta;. 
16ea0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
16eb0 63 6f 64 65 3a 20 53 65 74 43 6f 6f 6b 69 65 20  code: SetCookie 
16ec0 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
16ed0 2a 2a 20 57 72 69 74 65 20 74 68 65 20 63 6f 6e  ** Write the con
16ee0 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72  tent of register
16ef0 20 50 33 20 28 69 6e 74 65 72 70 72 65 74 65 64   P3 (interpreted
16f00 20 61 73 20 61 6e 20 69 6e 74 65 67 65 72 29 0a   as an integer).
16f10 2a 2a 20 69 6e 74 6f 20 63 6f 6f 6b 69 65 20 6e  ** into cookie n
16f20 75 6d 62 65 72 20 50 32 20 6f 66 20 64 61 74 61  umber P2 of data
16f30 62 61 73 65 20 50 31 2e 20 20 50 32 3d 3d 31 20  base P1.  P2==1 
16f40 69 73 20 74 68 65 20 73 63 68 65 6d 61 20 76 65  is the schema ve
16f50 72 73 69 6f 6e 2e 20 20 0a 2a 2a 20 50 32 3d 3d  rsion.  .** P2==
16f60 32 20 69 73 20 74 68 65 20 64 61 74 61 62 61 73  2 is the databas
16f70 65 20 66 6f 72 6d 61 74 2e 20 50 32 3d 3d 33 20  e format. P2==3 
16f80 69 73 20 74 68 65 20 72 65 63 6f 6d 6d 65 6e 64  is the recommend
16f90 65 64 20 70 61 67 65 72 20 63 61 63 68 65 20 0a  ed pager cache .
16fa0 2a 2a 20 73 69 7a 65 2c 20 61 6e 64 20 73 6f 20  ** size, and so 
16fb0 66 6f 72 74 68 2e 20 20 50 31 3d 3d 30 20 69 73  forth.  P1==0 is
16fc0 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
16fd0 73 65 20 66 69 6c 65 20 61 6e 64 20 50 31 3d 3d  se file and P1==
16fe0 31 20 69 73 20 74 68 65 20 0a 2a 2a 20 64 61 74  1 is the .** dat
16ff0 61 62 61 73 65 20 66 69 6c 65 20 75 73 65 64 20  abase file used 
17000 74 6f 20 73 74 6f 72 65 20 74 65 6d 70 6f 72 61  to store tempora
17010 72 79 20 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a  ry tables..**.**
17020 20 41 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d   A transaction m
17030 75 73 74 20 62 65 20 73 74 61 72 74 65 64 20 62  ust be started b
17040 65 66 6f 72 65 20 65 78 65 63 75 74 69 6e 67 20  efore executing 
17050 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a  this opcode..*/.
17060 63 61 73 65 20 4f 50 5f 53 65 74 43 6f 6f 6b 69  case OP_SetCooki
17070 65 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20 69 6e  e: {       /* in
17080 33 20 2a 2f 0a 20 20 44 62 20 2a 70 44 62 3b 0a  3 */.  Db *pDb;.
17090 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
170a0 32 3c 53 51 4c 49 54 45 5f 4e 5f 42 54 52 45 45  2<SQLITE_N_BTREE
170b0 5f 4d 45 54 41 20 29 3b 0a 20 20 61 73 73 65 72  _META );.  asser
170c0 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
170d0 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62   pOp->p1<db->nDb
170e0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70   );.  assert( (p
170f0 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28 28  ->btreeMask & ((
17100 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c 70 4f 70  (yDbMask)1)<<pOp
17110 2d 3e 70 31 29 29 21 3d 30 20 29 3b 0a 20 20 70  ->p1))!=0 );.  p
17120 44 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b 70 4f  Db = &db->aDb[pO
17130 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
17140 28 20 70 44 62 2d 3e 70 42 74 21 3d 30 20 29 3b  ( pDb->pBt!=0 );
17150 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b  .  pIn3 = &aMem[
17160 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 73 71 6c 69  pOp->p3];.  sqli
17170 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65  te3VdbeMemIntege
17180 72 69 66 79 28 70 49 6e 33 29 3b 0a 20 20 2f 2a  rify(pIn3);.  /*
17190 20 53 65 65 20 6e 6f 74 65 20 61 62 6f 75 74 20   See note about 
171a0 69 6e 64 65 78 20 73 68 69 66 74 69 6e 67 20 6f  index shifting o
171b0 6e 20 4f 50 5f 52 65 61 64 43 6f 6f 6b 69 65 20  n OP_ReadCookie 
171c0 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  */.  rc = sqlite
171d0 33 42 74 72 65 65 55 70 64 61 74 65 4d 65 74 61  3BtreeUpdateMeta
171e0 28 70 44 62 2d 3e 70 42 74 2c 20 70 4f 70 2d 3e  (pDb->pBt, pOp->
171f0 70 32 2c 20 28 69 6e 74 29 70 49 6e 33 2d 3e 75  p2, (int)pIn3->u
17200 2e 69 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e  .i);.  if( pOp->
17210 70 32 3d 3d 42 54 52 45 45 5f 53 43 48 45 4d 41  p2==BTREE_SCHEMA
17220 5f 56 45 52 53 49 4f 4e 20 29 7b 0a 20 20 20 20  _VERSION ){.    
17230 2f 2a 20 57 68 65 6e 20 74 68 65 20 73 63 68 65  /* When the sche
17240 6d 61 20 63 6f 6f 6b 69 65 20 63 68 61 6e 67 65  ma cookie change
17250 73 2c 20 72 65 63 6f 72 64 20 74 68 65 20 6e 65  s, record the ne
17260 77 20 63 6f 6f 6b 69 65 20 69 6e 74 65 72 6e 61  w cookie interna
17270 6c 6c 79 20 2a 2f 0a 20 20 20 20 70 44 62 2d 3e  lly */.    pDb->
17280 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 5f  pSchema->schema_
17290 63 6f 6f 6b 69 65 20 3d 20 28 69 6e 74 29 70 49  cookie = (int)pI
172a0 6e 33 2d 3e 75 2e 69 3b 0a 20 20 20 20 64 62 2d  n3->u.i;.    db-
172b0 3e 66 6c 61 67 73 20 7c 3d 20 53 51 4c 49 54 45  >flags |= SQLITE
172c0 5f 49 6e 74 65 72 6e 43 68 61 6e 67 65 73 3b 0a  _InternChanges;.
172d0 20 20 7d 65 6c 73 65 20 69 66 28 20 70 4f 70 2d    }else if( pOp-
172e0 3e 70 32 3d 3d 42 54 52 45 45 5f 46 49 4c 45 5f  >p2==BTREE_FILE_
172f0 46 4f 52 4d 41 54 20 29 7b 0a 20 20 20 20 2f 2a  FORMAT ){.    /*
17300 20 52 65 63 6f 72 64 20 63 68 61 6e 67 65 73 20   Record changes 
17310 69 6e 20 74 68 65 20 66 69 6c 65 20 66 6f 72 6d  in the file form
17320 61 74 20 2a 2f 0a 20 20 20 20 70 44 62 2d 3e 70  at */.    pDb->p
17330 53 63 68 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72  Schema->file_for
17340 6d 61 74 20 3d 20 28 75 38 29 70 49 6e 33 2d 3e  mat = (u8)pIn3->
17350 75 2e 69 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70  u.i;.  }.  if( p
17360 4f 70 2d 3e 70 31 3d 3d 31 20 29 7b 0a 20 20 20  Op->p1==1 ){.   
17370 20 2f 2a 20 49 6e 76 61 6c 69 64 61 74 65 20 61   /* Invalidate a
17380 6c 6c 20 70 72 65 70 61 72 65 64 20 73 74 61 74  ll prepared stat
17390 65 6d 65 6e 74 73 20 77 68 65 6e 65 76 65 72 20  ements whenever 
173a0 74 68 65 20 54 45 4d 50 20 64 61 74 61 62 61 73  the TEMP databas
173b0 65 0a 20 20 20 20 2a 2a 20 73 63 68 65 6d 61 20  e.    ** schema 
173c0 69 73 20 63 68 61 6e 67 65 64 2e 20 20 54 69 63  is changed.  Tic
173d0 6b 65 74 20 23 31 36 34 34 20 2a 2f 0a 20 20 20  ket #1644 */.   
173e0 20 73 71 6c 69 74 65 33 45 78 70 69 72 65 50 72   sqlite3ExpirePr
173f0 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73  eparedStatements
17400 28 64 62 29 3b 0a 20 20 20 20 70 2d 3e 65 78 70  (db);.    p->exp
17410 69 72 65 64 20 3d 20 30 3b 0a 20 20 7d 0a 20 20  ired = 0;.  }.  
17420 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
17430 6f 64 65 3a 20 56 65 72 69 66 79 43 6f 6f 6b 69  ode: VerifyCooki
17440 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  e P1 P2 P3 * *.*
17450 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 68 65 20 76  *.** Check the v
17460 61 6c 75 65 20 6f 66 20 67 6c 6f 62 61 6c 20 64  alue of global d
17470 61 74 61 62 61 73 65 20 70 61 72 61 6d 65 74 65  atabase paramete
17480 72 20 6e 75 6d 62 65 72 20 30 20 28 74 68 65 0a  r number 0 (the.
17490 2a 2a 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f  ** schema versio
174a0 6e 29 20 61 6e 64 20 6d 61 6b 65 20 73 75 72 65  n) and make sure
174b0 20 69 74 20 69 73 20 65 71 75 61 6c 20 74 6f 20   it is equal to 
174c0 50 32 20 61 6e 64 20 74 68 61 74 20 74 68 65 0a  P2 and that the.
174d0 2a 2a 20 67 65 6e 65 72 61 74 69 6f 6e 20 63 6f  ** generation co
174e0 75 6e 74 65 72 20 6f 6e 20 74 68 65 20 6c 6f 63  unter on the loc
174f0 61 6c 20 73 63 68 65 6d 61 20 70 61 72 73 65 20  al schema parse 
17500 65 71 75 61 6c 73 20 50 33 2e 0a 2a 2a 0a 2a 2a  equals P3..**.**
17510 20 50 31 20 69 73 20 74 68 65 20 64 61 74 61 62   P1 is the datab
17520 61 73 65 20 6e 75 6d 62 65 72 20 77 68 69 63 68  ase number which
17530 20 69 73 20 30 20 66 6f 72 20 74 68 65 20 6d 61   is 0 for the ma
17540 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  in database file
17550 0a 2a 2a 20 61 6e 64 20 31 20 66 6f 72 20 74 68  .** and 1 for th
17560 65 20 66 69 6c 65 20 68 6f 6c 64 69 6e 67 20 74  e file holding t
17570 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 20  emporary tables 
17580 61 6e 64 20 73 6f 6d 65 20 68 69 67 68 65 72 20  and some higher 
17590 6e 75 6d 62 65 72 0a 2a 2a 20 66 6f 72 20 61 75  number.** for au
175a0 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73 65  xiliary database
175b0 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6f  s..**.** The coo
175c0 6b 69 65 20 63 68 61 6e 67 65 73 20 69 74 73 20  kie changes its 
175d0 76 61 6c 75 65 20 77 68 65 6e 65 76 65 72 20 74  value whenever t
175e0 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65  he database sche
175f0 6d 61 20 63 68 61 6e 67 65 73 2e 0a 2a 2a 20 54  ma changes..** T
17600 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 20 69 73  his operation is
17610 20 75 73 65 64 20 74 6f 20 64 65 74 65 63 74 20   used to detect 
17620 77 68 65 6e 20 74 68 61 74 20 74 68 65 20 63 6f  when that the co
17630 6f 6b 69 65 20 68 61 73 20 63 68 61 6e 67 65 64  okie has changed
17640 0a 2a 2a 20 61 6e 64 20 74 68 61 74 20 74 68 65  .** and that the
17650 20 63 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73   current process
17660 20 6e 65 65 64 73 20 74 6f 20 72 65 72 65 61 64   needs to reread
17670 20 74 68 65 20 73 63 68 65 6d 61 2e 0a 2a 2a 0a   the schema..**.
17680 2a 2a 20 45 69 74 68 65 72 20 61 20 74 72 61 6e  ** Either a tran
17690 73 61 63 74 69 6f 6e 20 6e 65 65 64 73 20 74 6f  saction needs to
176a0 20 68 61 76 65 20 62 65 65 6e 20 73 74 61 72 74   have been start
176b0 65 64 20 6f 72 20 61 6e 20 4f 50 5f 4f 70 65 6e  ed or an OP_Open
176c0 20 6e 65 65 64 73 0a 2a 2a 20 74 6f 20 62 65 20   needs.** to be 
176d0 65 78 65 63 75 74 65 64 20 28 74 6f 20 65 73 74  executed (to est
176e0 61 62 6c 69 73 68 20 61 20 72 65 61 64 20 6c 6f  ablish a read lo
176f0 63 6b 29 20 62 65 66 6f 72 65 20 74 68 69 73 20  ck) before this 
17700 6f 70 63 6f 64 65 20 69 73 0a 2a 2a 20 69 6e 76  opcode is.** inv
17710 6f 6b 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  oked..*/.case OP
17720 5f 56 65 72 69 66 79 43 6f 6f 6b 69 65 3a 20 7b  _VerifyCookie: {
17730 0a 20 20 69 6e 74 20 69 4d 65 74 61 3b 0a 20 20  .  int iMeta;.  
17740 69 6e 74 20 69 47 65 6e 3b 0a 20 20 42 74 72 65  int iGen;.  Btre
17750 65 20 2a 70 42 74 3b 0a 0a 20 20 61 73 73 65 72  e *pBt;..  asser
17760 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
17770 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62   pOp->p1<db->nDb
17780 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70   );.  assert( (p
17790 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28 28  ->btreeMask & ((
177a0 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c 70 4f 70  (yDbMask)1)<<pOp
177b0 2d 3e 70 31 29 29 21 3d 30 20 29 3b 0a 20 20 70  ->p1))!=0 );.  p
177c0 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70  Bt = db->aDb[pOp
177d0 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20 20 69 66 28  ->p1].pBt;.  if(
177e0 20 70 42 74 20 29 7b 0a 20 20 20 20 73 71 6c 69   pBt ){.    sqli
177f0 74 65 33 42 74 72 65 65 47 65 74 4d 65 74 61 28  te3BtreeGetMeta(
17800 70 42 74 2c 20 42 54 52 45 45 5f 53 43 48 45 4d  pBt, BTREE_SCHEM
17810 41 5f 56 45 52 53 49 4f 4e 2c 20 28 75 33 32 20  A_VERSION, (u32 
17820 2a 29 26 69 4d 65 74 61 29 3b 0a 20 20 20 20 69  *)&iMeta);.    i
17830 47 65 6e 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f  Gen = db->aDb[pO
17840 70 2d 3e 70 31 5d 2e 70 53 63 68 65 6d 61 2d 3e  p->p1].pSchema->
17850 69 47 65 6e 65 72 61 74 69 6f 6e 3b 0a 20 20 7d  iGeneration;.  }
17860 65 6c 73 65 7b 0a 20 20 20 20 69 4d 65 74 61 20  else{.    iMeta 
17870 3d 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 69  = 0;.  }.  if( i
17880 4d 65 74 61 21 3d 70 4f 70 2d 3e 70 32 20 7c 7c  Meta!=pOp->p2 ||
17890 20 69 47 65 6e 21 3d 70 4f 70 2d 3e 70 33 20 29   iGen!=pOp->p3 )
178a0 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 44 62 46  {.    sqlite3DbF
178b0 72 65 65 28 64 62 2c 20 70 2d 3e 7a 45 72 72 4d  ree(db, p->zErrM
178c0 73 67 29 3b 0a 20 20 20 20 70 2d 3e 7a 45 72 72  sg);.    p->zErr
178d0 4d 73 67 20 3d 20 73 71 6c 69 74 65 33 44 62 53  Msg = sqlite3DbS
178e0 74 72 44 75 70 28 64 62 2c 20 22 64 61 74 61 62  trDup(db, "datab
178f0 61 73 65 20 73 63 68 65 6d 61 20 68 61 73 20 63  ase schema has c
17900 68 61 6e 67 65 64 22 29 3b 0a 20 20 20 20 2f 2a  hanged");.    /*
17910 20 49 66 20 74 68 65 20 73 63 68 65 6d 61 2d 63   If the schema-c
17920 6f 6f 6b 69 65 20 66 72 6f 6d 20 74 68 65 20 64  ookie from the d
17930 61 74 61 62 61 73 65 20 66 69 6c 65 20 6d 61 74  atabase file mat
17940 63 68 65 73 20 74 68 65 20 63 6f 6f 6b 69 65 20  ches the cookie 
17950 0a 20 20 20 20 2a 2a 20 73 74 6f 72 65 64 20 77  .    ** stored w
17960 69 74 68 20 74 68 65 20 69 6e 2d 6d 65 6d 6f 72  ith the in-memor
17970 79 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  y representation
17980 20 6f 66 20 74 68 65 20 73 63 68 65 6d 61 2c 20   of the schema, 
17990 64 6f 0a 20 20 20 20 2a 2a 20 6e 6f 74 20 72 65  do.    ** not re
179a0 6c 6f 61 64 20 74 68 65 20 73 63 68 65 6d 61 20  load the schema 
179b0 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73  from the databas
179c0 65 20 66 69 6c 65 2e 0a 20 20 20 20 2a 2a 0a 20  e file..    **. 
179d0 20 20 20 2a 2a 20 49 66 20 76 69 72 74 75 61 6c     ** If virtual
179e0 2d 74 61 62 6c 65 73 20 61 72 65 20 69 6e 20 75  -tables are in u
179f0 73 65 2c 20 74 68 69 73 20 69 73 20 6e 6f 74 20  se, this is not 
17a00 6a 75 73 74 20 61 6e 20 6f 70 74 69 6d 69 7a 61  just an optimiza
17a10 74 69 6f 6e 2e 0a 20 20 20 20 2a 2a 20 4f 66 74  tion..    ** Oft
17a20 65 6e 2c 20 76 2d 74 61 62 6c 65 73 20 73 74 6f  en, v-tables sto
17a30 72 65 20 74 68 65 69 72 20 64 61 74 61 20 69 6e  re their data in
17a40 20 6f 74 68 65 72 20 53 51 4c 69 74 65 20 74 61   other SQLite ta
17a50 62 6c 65 73 2c 20 77 68 69 63 68 0a 20 20 20 20  bles, which.    
17a60 2a 2a 20 61 72 65 20 71 75 65 72 69 65 64 20 66  ** are queried f
17a70 72 6f 6d 20 77 69 74 68 69 6e 20 78 4e 65 78 74  rom within xNext
17a80 28 29 20 61 6e 64 20 6f 74 68 65 72 20 76 2d 74  () and other v-t
17a90 61 62 6c 65 20 6d 65 74 68 6f 64 73 20 75 73 69  able methods usi
17aa0 6e 67 0a 20 20 20 20 2a 2a 20 70 72 65 70 61 72  ng.    ** prepar
17ab0 65 64 20 71 75 65 72 69 65 73 2e 20 49 66 20 73  ed queries. If s
17ac0 75 63 68 20 61 20 71 75 65 72 79 20 69 73 20 6f  uch a query is o
17ad0 75 74 2d 6f 66 2d 64 61 74 65 2c 20 77 65 20 64  ut-of-date, we d
17ae0 6f 20 6e 6f 74 20 77 61 6e 74 20 74 6f 0a 20 20  o not want to.  
17af0 20 20 2a 2a 20 64 69 73 63 61 72 64 20 74 68 65    ** discard the
17b00 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
17b10 2c 20 61 73 20 74 68 65 20 75 73 65 72 20 63 6f  , as the user co
17b20 64 65 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20  de implementing 
17b30 74 68 65 0a 20 20 20 20 2a 2a 20 76 2d 74 61 62  the.    ** v-tab
17b40 6c 65 20 77 6f 75 6c 64 20 68 61 76 65 20 74 6f  le would have to
17b50 20 62 65 20 72 65 61 64 79 20 66 6f 72 20 74 68   be ready for th
17b60 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73  e sqlite3_vtab s
17b70 74 72 75 63 74 75 72 65 20 69 74 73 65 6c 66 0a  tructure itself.
17b80 20 20 20 20 2a 2a 20 74 6f 20 62 65 20 69 6e 76      ** to be inv
17b90 61 6c 69 64 61 74 65 64 20 77 68 65 6e 65 76 65  alidated wheneve
17ba0 72 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29  r sqlite3_step()
17bb0 20 69 73 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20   is called from 
17bc0 77 69 74 68 69 6e 20 0a 20 20 20 20 2a 2a 20 61  within .    ** a
17bd0 20 76 2d 74 61 62 6c 65 20 6d 65 74 68 6f 64 2e   v-table method.
17be0 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20  .    */.    if( 
17bf0 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d  db->aDb[pOp->p1]
17c00 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61  .pSchema->schema
17c10 5f 63 6f 6f 6b 69 65 21 3d 69 4d 65 74 61 20 29  _cookie!=iMeta )
17c20 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 52  {.      sqlite3R
17c30 65 73 65 74 49 6e 74 65 72 6e 61 6c 53 63 68 65  esetInternalSche
17c40 6d 61 28 64 62 2c 20 70 4f 70 2d 3e 70 31 29 3b  ma(db, pOp->p1);
17c50 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 2d 3e 65  .    }..    p->e
17c60 78 70 69 72 65 64 20 3d 20 31 3b 0a 20 20 20 20  xpired = 1;.    
17c70 72 63 20 3d 20 53 51 4c 49 54 45 5f 53 43 48 45  rc = SQLITE_SCHE
17c80 4d 41 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  MA;.  }.  break;
17c90 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f  .}../* Opcode: O
17ca0 70 65 6e 52 65 61 64 20 50 31 20 50 32 20 50 33  penRead P1 P2 P3
17cb0 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 4f 70 65   P4 P5.**.** Ope
17cc0 6e 20 61 20 72 65 61 64 2d 6f 6e 6c 79 20 63 75  n a read-only cu
17cd0 72 73 6f 72 20 66 6f 72 20 74 68 65 20 64 61 74  rsor for the dat
17ce0 61 62 61 73 65 20 74 61 62 6c 65 20 77 68 6f 73  abase table whos
17cf0 65 20 72 6f 6f 74 20 70 61 67 65 20 69 73 0a 2a  e root page is.*
17d00 2a 20 50 32 20 69 6e 20 61 20 64 61 74 61 62 61  * P2 in a databa
17d10 73 65 20 66 69 6c 65 2e 20 20 54 68 65 20 64 61  se file.  The da
17d20 74 61 62 61 73 65 20 66 69 6c 65 20 69 73 20 64  tabase file is d
17d30 65 74 65 72 6d 69 6e 65 64 20 62 79 20 50 33 2e  etermined by P3.
17d40 20 0a 2a 2a 20 50 33 3d 3d 30 20 6d 65 61 6e 73   .** P3==0 means
17d50 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
17d60 73 65 2c 20 50 33 3d 3d 31 20 6d 65 61 6e 73 20  se, P3==1 means 
17d70 74 68 65 20 64 61 74 61 62 61 73 65 20 75 73 65  the database use
17d80 64 20 66 6f 72 20 0a 2a 2a 20 74 65 6d 70 6f 72  d for .** tempor
17d90 61 72 79 20 74 61 62 6c 65 73 2c 20 61 6e 64 20  ary tables, and 
17da0 50 33 3e 31 20 6d 65 61 6e 73 20 75 73 65 64 20  P3>1 means used 
17db0 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  the correspondin
17dc0 67 20 61 74 74 61 63 68 65 64 0a 2a 2a 20 64 61  g attached.** da
17dd0 74 61 62 61 73 65 2e 20 20 47 69 76 65 20 74 68  tabase.  Give th
17de0 65 20 6e 65 77 20 63 75 72 73 6f 72 20 61 6e 20  e new cursor an 
17df0 69 64 65 6e 74 69 66 69 65 72 20 6f 66 20 50 31  identifier of P1
17e00 2e 20 20 54 68 65 20 50 31 0a 2a 2a 20 76 61 6c  .  The P1.** val
17e10 75 65 73 20 6e 65 65 64 20 6e 6f 74 20 62 65 20  ues need not be 
17e20 63 6f 6e 74 69 67 75 6f 75 73 20 62 75 74 20 61  contiguous but a
17e30 6c 6c 20 50 31 20 76 61 6c 75 65 73 20 73 68 6f  ll P1 values sho
17e40 75 6c 64 20 62 65 20 73 6d 61 6c 6c 20 69 6e 74  uld be small int
17e50 65 67 65 72 73 2e 0a 2a 2a 20 49 74 20 69 73 20  egers..** It is 
17e60 61 6e 20 65 72 72 6f 72 20 66 6f 72 20 50 31 20  an error for P1 
17e70 74 6f 20 62 65 20 6e 65 67 61 74 69 76 65 2e 0a  to be negative..
17e80 2a 2a 0a 2a 2a 20 49 66 20 50 35 21 3d 30 20 74  **.** If P5!=0 t
17e90 68 65 6e 20 75 73 65 20 74 68 65 20 63 6f 6e 74  hen use the cont
17ea0 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20  ent of register 
17eb0 50 32 20 61 73 20 74 68 65 20 72 6f 6f 74 20 70  P2 as the root p
17ec0 61 67 65 2c 20 6e 6f 74 0a 2a 2a 20 74 68 65 20  age, not.** the 
17ed0 76 61 6c 75 65 20 6f 66 20 50 32 20 69 74 73 65  value of P2 itse
17ee0 6c 66 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20  lf..**.** There 
17ef0 77 69 6c 6c 20 62 65 20 61 20 72 65 61 64 20 6c  will be a read l
17f00 6f 63 6b 20 6f 6e 20 74 68 65 20 64 61 74 61 62  ock on the datab
17f10 61 73 65 20 77 68 65 6e 65 76 65 72 20 74 68 65  ase whenever the
17f20 72 65 20 69 73 20 61 6e 0a 2a 2a 20 6f 70 65 6e  re is an.** open
17f30 20 63 75 72 73 6f 72 2e 20 20 49 66 20 74 68 65   cursor.  If the
17f40 20 64 61 74 61 62 61 73 65 20 77 61 73 20 75 6e   database was un
17f50 6c 6f 63 6b 65 64 20 70 72 69 6f 72 20 74 6f 20  locked prior to 
17f60 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
17f70 0a 2a 2a 20 74 68 65 6e 20 61 20 72 65 61 64 20  .** then a read 
17f80 6c 6f 63 6b 20 69 73 20 61 63 71 75 69 72 65 64  lock is acquired
17f90 20 61 73 20 70 61 72 74 20 6f 66 20 74 68 69 73   as part of this
17fa0 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 41   instruction.  A
17fb0 20 72 65 61 64 0a 2a 2a 20 6c 6f 63 6b 20 61 6c   read.** lock al
17fc0 6c 6f 77 73 20 6f 74 68 65 72 20 70 72 6f 63 65  lows other proce
17fd0 73 73 65 73 20 74 6f 20 72 65 61 64 20 74 68 65  sses to read the
17fe0 20 64 61 74 61 62 61 73 65 20 62 75 74 20 70 72   database but pr
17ff0 6f 68 69 62 69 74 73 0a 2a 2a 20 61 6e 79 20 6f  ohibits.** any o
18000 74 68 65 72 20 70 72 6f 63 65 73 73 20 66 72 6f  ther process fro
18010 6d 20 6d 6f 64 69 66 79 69 6e 67 20 74 68 65 20  m modifying the 
18020 64 61 74 61 62 61 73 65 2e 20 20 54 68 65 20 72  database.  The r
18030 65 61 64 20 6c 6f 63 6b 20 69 73 0a 2a 2a 20 72  ead lock is.** r
18040 65 6c 65 61 73 65 64 20 77 68 65 6e 20 61 6c 6c  eleased when all
18050 20 63 75 72 73 6f 72 73 20 61 72 65 20 63 6c 6f   cursors are clo
18060 73 65 64 2e 20 20 49 66 20 74 68 69 73 20 69 6e  sed.  If this in
18070 73 74 72 75 63 74 69 6f 6e 20 61 74 74 65 6d 70  struction attemp
18080 74 73 0a 2a 2a 20 74 6f 20 67 65 74 20 61 20 72  ts.** to get a r
18090 65 61 64 20 6c 6f 63 6b 20 62 75 74 20 66 61 69  ead lock but fai
180a0 6c 73 2c 20 74 68 65 20 73 63 72 69 70 74 20 74  ls, the script t
180b0 65 72 6d 69 6e 61 74 65 73 20 77 69 74 68 20 61  erminates with a
180c0 6e 0a 2a 2a 20 53 51 4c 49 54 45 5f 42 55 53 59  n.** SQLITE_BUSY
180d0 20 65 72 72 6f 72 20 63 6f 64 65 2e 0a 2a 2a 0a   error code..**.
180e0 2a 2a 20 54 68 65 20 50 34 20 76 61 6c 75 65 20  ** The P4 value 
180f0 6d 61 79 20 62 65 20 65 69 74 68 65 72 20 61 6e  may be either an
18100 20 69 6e 74 65 67 65 72 20 28 50 34 5f 49 4e 54   integer (P4_INT
18110 33 32 29 20 6f 72 20 61 20 70 6f 69 6e 74 65 72  32) or a pointer
18120 20 74 6f 0a 2a 2a 20 61 20 4b 65 79 49 6e 66 6f   to.** a KeyInfo
18130 20 73 74 72 75 63 74 75 72 65 20 28 50 34 5f 4b   structure (P4_K
18140 45 59 49 4e 46 4f 29 2e 20 49 66 20 69 74 20 69  EYINFO). If it i
18150 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  s a pointer to a
18160 20 4b 65 79 49 6e 66 6f 20 0a 2a 2a 20 73 74 72   KeyInfo .** str
18170 75 63 74 75 72 65 2c 20 74 68 65 6e 20 73 61 69  ucture, then sai
18180 64 20 73 74 72 75 63 74 75 72 65 20 64 65 66 69  d structure defi
18190 6e 65 73 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  nes the content 
181a0 61 6e 64 20 63 6f 6c 6c 61 74 69 6e 67 20 0a 2a  and collating .*
181b0 2a 20 73 65 71 75 65 6e 63 65 20 6f 66 20 74 68  * sequence of th
181c0 65 20 69 6e 64 65 78 20 62 65 69 6e 67 20 6f 70  e index being op
181d0 65 6e 65 64 2e 20 4f 74 68 65 72 77 69 73 65 2c  ened. Otherwise,
181e0 20 69 66 20 50 34 20 69 73 20 61 6e 20 69 6e 74   if P4 is an int
181f0 65 67 65 72 20 0a 2a 2a 20 76 61 6c 75 65 2c 20  eger .** value, 
18200 69 74 20 69 73 20 73 65 74 20 74 6f 20 74 68 65  it is set to the
18210 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   number of colum
18220 6e 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e  ns in the table.
18230 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 20  .**.** See also 
18240 4f 70 65 6e 57 72 69 74 65 2e 0a 2a 2f 0a 2f 2a  OpenWrite..*/./*
18250 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 57 72 69   Opcode: OpenWri
18260 74 65 20 50 31 20 50 32 20 50 33 20 50 34 20 50  te P1 P2 P3 P4 P
18270 35 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 72  5.**.** Open a r
18280 65 61 64 2f 77 72 69 74 65 20 63 75 72 73 6f 72  ead/write cursor
18290 20 6e 61 6d 65 64 20 50 31 20 6f 6e 20 74 68 65   named P1 on the
182a0 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20   table or index 
182b0 77 68 6f 73 65 20 72 6f 6f 74 0a 2a 2a 20 70 61  whose root.** pa
182c0 67 65 20 69 73 20 50 32 2e 20 20 4f 72 20 69 66  ge is P2.  Or if
182d0 20 50 35 21 3d 30 20 75 73 65 20 74 68 65 20 63   P5!=0 use the c
182e0 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74  ontent of regist
182f0 65 72 20 50 32 20 74 6f 20 66 69 6e 64 20 74 68  er P2 to find th
18300 65 0a 2a 2a 20 72 6f 6f 74 20 70 61 67 65 2e 0a  e.** root page..
18310 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 76 61 6c  **.** The P4 val
18320 75 65 20 6d 61 79 20 62 65 20 65 69 74 68 65 72  ue may be either
18330 20 61 6e 20 69 6e 74 65 67 65 72 20 28 50 34 5f   an integer (P4_
18340 49 4e 54 33 32 29 20 6f 72 20 61 20 70 6f 69 6e  INT32) or a poin
18350 74 65 72 20 74 6f 0a 2a 2a 20 61 20 4b 65 79 49  ter to.** a KeyI
18360 6e 66 6f 20 73 74 72 75 63 74 75 72 65 20 28 50  nfo structure (P
18370 34 5f 4b 45 59 49 4e 46 4f 29 2e 20 49 66 20 69  4_KEYINFO). If i
18380 74 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  t is a pointer t
18390 6f 20 61 20 4b 65 79 49 6e 66 6f 20 0a 2a 2a 20  o a KeyInfo .** 
183a0 73 74 72 75 63 74 75 72 65 2c 20 74 68 65 6e 20  structure, then 
183b0 73 61 69 64 20 73 74 72 75 63 74 75 72 65 20 64  said structure d
183c0 65 66 69 6e 65 73 20 74 68 65 20 63 6f 6e 74 65  efines the conte
183d0 6e 74 20 61 6e 64 20 63 6f 6c 6c 61 74 69 6e 67  nt and collating
183e0 20 0a 2a 2a 20 73 65 71 75 65 6e 63 65 20 6f 66   .** sequence of
183f0 20 74 68 65 20 69 6e 64 65 78 20 62 65 69 6e 67   the index being
18400 20 6f 70 65 6e 65 64 2e 20 4f 74 68 65 72 77 69   opened. Otherwi
18410 73 65 2c 20 69 66 20 50 34 20 69 73 20 61 6e 20  se, if P4 is an 
18420 69 6e 74 65 67 65 72 20 0a 2a 2a 20 76 61 6c 75  integer .** valu
18430 65 2c 20 69 74 20 69 73 20 73 65 74 20 74 6f 20  e, it is set to 
18440 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f  the number of co
18450 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61 62  lumns in the tab
18460 6c 65 2c 20 6f 72 20 74 6f 20 74 68 65 0a 2a 2a  le, or to the.**
18470 20 6c 61 72 67 65 73 74 20 69 6e 64 65 78 20 6f   largest index o
18480 66 20 61 6e 79 20 63 6f 6c 75 6d 6e 20 6f 66 20  f any column of 
18490 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 69  the table that i
184a0 73 20 61 63 74 75 61 6c 6c 79 20 75 73 65 64 2e  s actually used.
184b0 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74  .**.** This inst
184c0 72 75 63 74 69 6f 6e 20 77 6f 72 6b 73 20 6a 75  ruction works ju
184d0 73 74 20 6c 69 6b 65 20 4f 70 65 6e 52 65 61 64  st like OpenRead
184e0 20 65 78 63 65 70 74 20 74 68 61 74 20 69 74 20   except that it 
184f0 6f 70 65 6e 73 20 74 68 65 20 63 75 72 73 6f 72  opens the cursor
18500 0a 2a 2a 20 69 6e 20 72 65 61 64 2f 77 72 69 74  .** in read/writ
18510 65 20 6d 6f 64 65 2e 20 20 46 6f 72 20 61 20 67  e mode.  For a g
18520 69 76 65 6e 20 74 61 62 6c 65 2c 20 74 68 65 72  iven table, ther
18530 65 20 63 61 6e 20 62 65 20 6f 6e 65 20 6f 72 20  e can be one or 
18540 6d 6f 72 65 20 72 65 61 64 2d 6f 6e 6c 79 0a 2a  more read-only.*
18550 2a 20 63 75 72 73 6f 72 73 20 6f 72 20 61 20 73  * cursors or a s
18560 69 6e 67 6c 65 20 72 65 61 64 2f 77 72 69 74 65  ingle read/write
18570 20 63 75 72 73 6f 72 20 62 75 74 20 6e 6f 74 20   cursor but not 
18580 62 6f 74 68 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  both..**.** See 
18590 61 6c 73 6f 20 4f 70 65 6e 52 65 61 64 2e 0a 2a  also OpenRead..*
185a0 2f 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 52 65  /.case OP_OpenRe
185b0 61 64 3a 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e  ad:.case OP_Open
185c0 57 72 69 74 65 3a 20 7b 0a 20 20 69 6e 74 20 6e  Write: {.  int n
185d0 46 69 65 6c 64 3b 0a 20 20 4b 65 79 49 6e 66 6f  Field;.  KeyInfo
185e0 20 2a 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 69 6e   *pKeyInfo;.  in
185f0 74 20 70 32 3b 0a 20 20 69 6e 74 20 69 44 62 3b  t p2;.  int iDb;
18600 0a 20 20 69 6e 74 20 77 72 46 6c 61 67 3b 0a 20  .  int wrFlag;. 
18610 20 42 74 72 65 65 20 2a 70 58 3b 0a 20 20 56 64   Btree *pX;.  Vd
18620 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a  beCursor *pCur;.
18630 20 20 44 62 20 2a 70 44 62 3b 0a 0a 20 20 69 66    Db *pDb;..  if
18640 28 20 70 2d 3e 65 78 70 69 72 65 64 20 29 7b 0a  ( p->expired ){.
18650 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
18660 41 42 4f 52 54 3b 0a 20 20 20 20 62 72 65 61 6b  ABORT;.    break
18670 3b 0a 20 20 7d 0a 0a 20 20 6e 46 69 65 6c 64 20  ;.  }..  nField 
18680 3d 20 30 3b 0a 20 20 70 4b 65 79 49 6e 66 6f 20  = 0;.  pKeyInfo 
18690 3d 20 30 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d  = 0;.  p2 = pOp-
186a0 3e 70 32 3b 0a 20 20 69 44 62 20 3d 20 70 4f 70  >p2;.  iDb = pOp
186b0 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72 74 28 20  ->p3;.  assert( 
186c0 69 44 62 3e 3d 30 20 26 26 20 69 44 62 3c 64 62  iDb>=0 && iDb<db
186d0 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72  ->nDb );.  asser
186e0 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b  t( (p->btreeMask
186f0 20 26 20 28 28 28 79 44 62 4d 61 73 6b 29 31 29   & (((yDbMask)1)
18700 3c 3c 69 44 62 29 29 21 3d 30 20 29 3b 0a 20 20  <<iDb))!=0 );.  
18710 70 44 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b 69  pDb = &db->aDb[i
18720 44 62 5d 3b 0a 20 20 70 58 20 3d 20 70 44 62 2d  Db];.  pX = pDb-
18730 3e 70 42 74 3b 0a 20 20 61 73 73 65 72 74 28 20  >pBt;.  assert( 
18740 70 58 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 70  pX!=0 );.  if( p
18750 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f  Op->opcode==OP_O
18760 70 65 6e 57 72 69 74 65 20 29 7b 0a 20 20 20 20  penWrite ){.    
18770 77 72 46 6c 61 67 20 3d 20 31 3b 0a 20 20 20 20  wrFlag = 1;.    
18780 69 66 28 20 70 44 62 2d 3e 70 53 63 68 65 6d 61  if( pDb->pSchema
18790 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3c 20  ->file_format < 
187a0 70 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65 46  p->minWriteFileF
187b0 6f 72 6d 61 74 20 29 7b 0a 20 20 20 20 20 20 70  ormat ){.      p
187c0 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65 46 6f  ->minWriteFileFo
187d0 72 6d 61 74 20 3d 20 70 44 62 2d 3e 70 53 63 68  rmat = pDb->pSch
187e0 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74  ema->file_format
187f0 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b  ;.    }.  }else{
18800 0a 20 20 20 20 77 72 46 6c 61 67 20 3d 20 30 3b  .    wrFlag = 0;
18810 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e  .  }.  if( pOp->
18820 70 35 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  p5 ){.    assert
18830 28 20 70 32 3e 30 20 29 3b 0a 20 20 20 20 61 73  ( p2>0 );.    as
18840 73 65 72 74 28 20 70 32 3c 3d 70 2d 3e 6e 4d 65  sert( p2<=p->nMe
18850 6d 20 29 3b 0a 20 20 20 20 70 49 6e 32 20 3d 20  m );.    pIn2 = 
18860 26 61 4d 65 6d 5b 70 32 5d 3b 0a 20 20 20 20 61  &aMem[p2];.    a
18870 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
18880 64 28 70 49 6e 32 29 20 29 3b 0a 20 20 20 20 61  d(pIn2) );.    a
18890 73 73 65 72 74 28 20 28 70 49 6e 32 2d 3e 66 6c  ssert( (pIn2->fl
188a0 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d  ags & MEM_Int)!=
188b0 30 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  0 );.    sqlite3
188c0 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66  VdbeMemIntegerif
188d0 79 28 70 49 6e 32 29 3b 0a 20 20 20 20 70 32 20  y(pIn2);.    p2 
188e0 3d 20 28 69 6e 74 29 70 49 6e 32 2d 3e 75 2e 69  = (int)pIn2->u.i
188f0 3b 0a 20 20 20 20 2f 2a 20 54 68 65 20 70 32 20  ;.    /* The p2 
18900 76 61 6c 75 65 20 61 6c 77 61 79 73 20 63 6f 6d  value always com
18910 65 73 20 66 72 6f 6d 20 61 20 70 72 69 6f 72 20  es from a prior 
18920 4f 50 5f 43 72 65 61 74 65 54 61 62 6c 65 20 6f  OP_CreateTable o
18930 70 63 6f 64 65 20 61 6e 64 0a 20 20 20 20 2a 2a  pcode and.    **
18940 20 74 68 61 74 20 6f 70 63 6f 64 65 20 77 69 6c   that opcode wil
18950 6c 20 61 6c 77 61 79 73 20 73 65 74 20 74 68 65  l always set the
18960 20 70 32 20 76 61 6c 75 65 20 74 6f 20 32 20 6f   p2 value to 2 o
18970 72 20 6d 6f 72 65 20 6f 72 20 65 6c 73 65 20 66  r more or else f
18980 61 69 6c 2e 0a 20 20 20 20 2a 2a 20 49 66 20 74  ail..    ** If t
18990 68 65 72 65 20 77 65 72 65 20 61 20 66 61 69 6c  here were a fail
189a0 75 72 65 2c 20 74 68 65 20 70 72 65 70 61 72 65  ure, the prepare
189b0 64 20 73 74 61 74 65 6d 65 6e 74 20 77 6f 75 6c  d statement woul
189c0 64 20 68 61 76 65 20 68 61 6c 74 65 64 0a 20 20  d have halted.  
189d0 20 20 2a 2a 20 62 65 66 6f 72 65 20 72 65 61 63    ** before reac
189e0 68 69 6e 67 20 74 68 69 73 20 69 6e 73 74 72 75  hing this instru
189f0 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 20 20 69 66  ction. */.    if
18a00 28 20 4e 45 56 45 52 28 70 32 3c 32 29 20 29 20  ( NEVER(p2<2) ) 
18a10 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c  {.      rc = SQL
18a20 49 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54  ITE_CORRUPT_BKPT
18a30 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f  ;.      goto abo
18a40 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
18a50 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28  .    }.  }.  if(
18a60 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
18a70 5f 4b 45 59 49 4e 46 4f 20 29 7b 0a 20 20 20 20  _KEYINFO ){.    
18a80 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e  pKeyInfo = pOp->
18a90 70 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20  p4.pKeyInfo;.   
18aa0 20 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63 20 3d   pKeyInfo->enc =
18ab0 20 45 4e 43 28 70 2d 3e 64 62 29 3b 0a 20 20 20   ENC(p->db);.   
18ac0 20 6e 46 69 65 6c 64 20 3d 20 70 4b 65 79 49 6e   nField = pKeyIn
18ad0 66 6f 2d 3e 6e 46 69 65 6c 64 2b 31 3b 0a 20 20  fo->nField+1;.  
18ae0 7d 65 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e 70  }else if( pOp->p
18af0 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20  4type==P4_INT32 
18b00 29 7b 0a 20 20 20 20 6e 46 69 65 6c 64 20 3d 20  ){.    nField = 
18b10 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 7d 0a 20  pOp->p4.i;.  }. 
18b20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
18b30 3e 3d 30 20 29 3b 0a 20 20 70 43 75 72 20 3d 20  >=0 );.  pCur = 
18b40 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70  allocateCursor(p
18b50 2c 20 70 4f 70 2d 3e 70 31 2c 20 6e 46 69 65 6c  , pOp->p1, nFiel
18b60 64 2c 20 69 44 62 2c 20 31 29 3b 0a 20 20 69 66  d, iDb, 1);.  if
18b70 28 20 70 43 75 72 3d 3d 30 20 29 20 67 6f 74 6f  ( pCur==0 ) goto
18b80 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 75 72 2d   no_mem;.  pCur-
18b90 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20  >nullRow = 1;.  
18ba0 70 43 75 72 2d 3e 69 73 4f 72 64 65 72 65 64 20  pCur->isOrdered 
18bb0 3d 20 31 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  = 1;.  rc = sqli
18bc0 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 28 70  te3BtreeCursor(p
18bd0 58 2c 20 70 32 2c 20 77 72 46 6c 61 67 2c 20 70  X, p2, wrFlag, p
18be0 4b 65 79 49 6e 66 6f 2c 20 70 43 75 72 2d 3e 70  KeyInfo, pCur->p
18bf0 43 75 72 73 6f 72 29 3b 0a 20 20 70 43 75 72 2d  Cursor);.  pCur-
18c00 3e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4b 65 79  >pKeyInfo = pKey
18c10 49 6e 66 6f 3b 0a 0a 20 20 2f 2a 20 53 69 6e 63  Info;..  /* Sinc
18c20 65 20 69 74 20 70 65 72 66 6f 72 6d 73 20 6e 6f  e it performs no
18c30 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
18c40 6f 6e 20 6f 72 20 49 4f 2c 20 74 68 65 20 6f 6e  on or IO, the on
18c50 6c 79 20 76 61 6c 75 65 73 20 74 68 61 74 0a 20  ly values that. 
18c60 20 2a 2a 20 73 71 6c 69 74 65 33 42 74 72 65 65   ** sqlite3Btree
18c70 43 75 72 73 6f 72 28 29 20 6d 61 79 20 72 65 74  Cursor() may ret
18c80 75 72 6e 20 61 72 65 20 53 51 4c 49 54 45 5f 45  urn are SQLITE_E
18c90 4d 50 54 59 20 61 6e 64 20 53 51 4c 49 54 45 5f  MPTY and SQLITE_
18ca0 4f 4b 2e 20 0a 20 20 2a 2a 20 53 51 4c 49 54 45  OK. .  ** SQLITE
18cb0 5f 45 4d 50 54 59 20 69 73 20 6f 6e 6c 79 20 72  _EMPTY is only r
18cc0 65 74 75 72 6e 65 64 20 77 68 65 6e 20 61 74 74  eturned when att
18cd0 65 6d 70 74 69 6e 67 20 74 6f 20 6f 70 65 6e 20  empting to open 
18ce0 74 68 65 20 74 61 62 6c 65 0a 20 20 2a 2a 20 72  the table.  ** r
18cf0 6f 6f 74 65 64 20 61 74 20 70 61 67 65 20 31 20  ooted at page 1 
18d00 6f 66 20 61 20 7a 65 72 6f 2d 62 79 74 65 20 64  of a zero-byte d
18d10 61 74 61 62 61 73 65 2e 20 20 2a 2f 0a 20 20 61  atabase.  */.  a
18d20 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54  ssert( rc==SQLIT
18d30 45 5f 45 4d 50 54 59 20 7c 7c 20 72 63 3d 3d 53  E_EMPTY || rc==S
18d40 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 20 20 69 66  QLITE_OK );.  if
18d50 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 45 4d 50  ( rc==SQLITE_EMP
18d60 54 59 20 29 7b 0a 20 20 20 20 70 43 75 72 2d 3e  TY ){.    pCur->
18d70 70 43 75 72 73 6f 72 20 3d 20 30 3b 0a 20 20 20  pCursor = 0;.   
18d80 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b   rc = SQLITE_OK;
18d90 0a 20 20 7d 0a 0a 20 20 2f 2a 20 53 65 74 20 74  .  }..  /* Set t
18da0 68 65 20 56 64 62 65 43 75 72 73 6f 72 2e 69 73  he VdbeCursor.is
18db0 54 61 62 6c 65 20 61 6e 64 20 69 73 49 6e 64 65  Table and isInde
18dc0 78 20 76 61 72 69 61 62 6c 65 73 2e 20 50 72 65  x variables. Pre
18dd0 76 69 6f 75 73 20 76 65 72 73 69 6f 6e 73 20 6f  vious versions o
18de0 66 0a 20 20 2a 2a 20 53 51 4c 69 74 65 20 75 73  f.  ** SQLite us
18df0 65 64 20 74 6f 20 63 68 65 63 6b 20 69 66 20 74  ed to check if t
18e00 68 65 20 72 6f 6f 74 2d 70 61 67 65 20 66 6c 61  he root-page fla
18e10 67 73 20 77 65 72 65 20 73 61 6e 65 20 61 74 20  gs were sane at 
18e20 74 68 69 73 20 70 6f 69 6e 74 0a 20 20 2a 2a 20  this point.  ** 
18e30 61 6e 64 20 72 65 70 6f 72 74 20 64 61 74 61 62  and report datab
18e40 61 73 65 20 63 6f 72 72 75 70 74 69 6f 6e 20 69  ase corruption i
18e50 66 20 74 68 65 79 20 77 65 72 65 20 6e 6f 74 2c  f they were not,
18e60 20 62 75 74 20 74 68 69 73 20 63 68 65 63 6b 20   but this check 
18e70 68 61 73 0a 20 20 2a 2a 20 73 69 6e 63 65 20 6d  has.  ** since m
18e80 6f 76 65 64 20 69 6e 74 6f 20 74 68 65 20 62 74  oved into the bt
18e90 72 65 65 20 6c 61 79 65 72 2e 20 20 2a 2f 20 20  ree layer.  */  
18ea0 0a 20 20 70 43 75 72 2d 3e 69 73 54 61 62 6c 65  .  pCur->isTable
18eb0 20 3d 20 70 4f 70 2d 3e 70 34 74 79 70 65 21 3d   = pOp->p4type!=
18ec0 50 34 5f 4b 45 59 49 4e 46 4f 3b 0a 20 20 70 43  P4_KEYINFO;.  pC
18ed0 75 72 2d 3e 69 73 49 6e 64 65 78 20 3d 20 21 70  ur->isIndex = !p
18ee0 43 75 72 2d 3e 69 73 54 61 62 6c 65 3b 0a 20 20  Cur->isTable;.  
18ef0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
18f00 6f 64 65 3a 20 4f 70 65 6e 45 70 68 65 6d 65 72  ode: OpenEphemer
18f10 61 6c 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a  al P1 P2 * P4 *.
18f20 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 6e 65 77  **.** Open a new
18f30 20 63 75 72 73 6f 72 20 50 31 20 74 6f 20 61 20   cursor P1 to a 
18f40 74 72 61 6e 73 69 65 6e 74 20 74 61 62 6c 65 2e  transient table.
18f50 0a 2a 2a 20 54 68 65 20 63 75 72 73 6f 72 20 69  .** The cursor i
18f60 73 20 61 6c 77 61 79 73 20 6f 70 65 6e 65 64 20  s always opened 
18f70 72 65 61 64 2f 77 72 69 74 65 20 65 76 65 6e 20  read/write even 
18f80 69 66 20 0a 2a 2a 20 74 68 65 20 6d 61 69 6e 20  if .** the main 
18f90 64 61 74 61 62 61 73 65 20 69 73 20 72 65 61 64  database is read
18fa0 2d 6f 6e 6c 79 2e 20 20 54 68 65 20 65 70 68 65  -only.  The ephe
18fb0 6d 65 72 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 69  meral.** table i
18fc0 73 20 64 65 6c 65 74 65 64 20 61 75 74 6f 6d 61  s deleted automa
18fd0 74 69 63 61 6c 6c 79 20 77 68 65 6e 20 74 68 65  tically when the
18fe0 20 63 75 72 73 6f 72 20 69 73 20 63 6c 6f 73 65   cursor is close
18ff0 64 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73 20 74  d..**.** P2 is t
19000 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  he number of col
19010 75 6d 6e 73 20 69 6e 20 74 68 65 20 65 70 68 65  umns in the ephe
19020 6d 65 72 61 6c 20 74 61 62 6c 65 2e 0a 2a 2a 20  meral table..** 
19030 54 68 65 20 63 75 72 73 6f 72 20 70 6f 69 6e 74  The cursor point
19040 73 20 74 6f 20 61 20 42 54 72 65 65 20 74 61 62  s to a BTree tab
19050 6c 65 20 69 66 20 50 34 3d 3d 30 20 61 6e 64 20  le if P4==0 and 
19060 74 6f 20 61 20 42 54 72 65 65 20 69 6e 64 65 78  to a BTree index
19070 0a 2a 2a 20 69 66 20 50 34 20 69 73 20 6e 6f 74  .** if P4 is not
19080 20 30 2e 20 20 49 66 20 50 34 20 69 73 20 6e 6f   0.  If P4 is no
19090 74 20 4e 55 4c 4c 2c 20 69 74 20 70 6f 69 6e 74  t NULL, it point
190a0 73 20 74 6f 20 61 20 4b 65 79 49 6e 66 6f 20 73  s to a KeyInfo s
190b0 74 72 75 63 74 75 72 65 0a 2a 2a 20 74 68 61 74  tructure.** that
190c0 20 64 65 66 69 6e 65 73 20 74 68 65 20 66 6f 72   defines the for
190d0 6d 61 74 20 6f 66 20 6b 65 79 73 20 69 6e 20 74  mat of keys in t
190e0 68 65 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20  he index..**.** 
190f0 54 68 69 73 20 6f 70 63 6f 64 65 20 77 61 73 20  This opcode was 
19100 6f 6e 63 65 20 63 61 6c 6c 65 64 20 4f 70 65 6e  once called Open
19110 54 65 6d 70 2e 20 20 42 75 74 20 74 68 61 74 20  Temp.  But that 
19120 63 72 65 61 74 65 64 0a 2a 2a 20 63 6f 6e 66 75  created.** confu
19130 73 69 6f 6e 20 62 65 63 61 75 73 65 20 74 68 65  sion because the
19140 20 74 65 72 6d 20 22 74 65 6d 70 20 74 61 62 6c   term "temp tabl
19150 65 22 2c 20 6d 69 67 68 74 20 72 65 66 65 72 20  e", might refer 
19160 65 69 74 68 65 72 0a 2a 2a 20 74 6f 20 61 20 54  either.** to a T
19170 45 4d 50 20 74 61 62 6c 65 20 61 74 20 74 68 65  EMP table at the
19180 20 53 51 4c 20 6c 65 76 65 6c 2c 20 6f 72 20 74   SQL level, or t
19190 6f 20 61 20 74 61 62 6c 65 20 6f 70 65 6e 65 64  o a table opened
191a0 20 62 79 0a 2a 2a 20 74 68 69 73 20 6f 70 63 6f   by.** this opco
191b0 64 65 2e 20 20 54 68 65 6e 20 74 68 69 73 20 6f  de.  Then this o
191c0 70 63 6f 64 65 20 77 61 73 20 63 61 6c 6c 20 4f  pcode was call O
191d0 70 65 6e 56 69 72 74 75 61 6c 2e 20 20 42 75 74  penVirtual.  But
191e0 0a 2a 2a 20 74 68 61 74 20 63 72 65 61 74 65 64  .** that created
191f0 20 63 6f 6e 66 75 73 69 6f 6e 20 77 69 74 68 20   confusion with 
19200 74 68 65 20 77 68 6f 6c 65 20 76 69 72 74 75 61  the whole virtua
19210 6c 2d 74 61 62 6c 65 20 69 64 65 61 2e 0a 2a 2f  l-table idea..*/
19220 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e  ./* Opcode: Open
19230 41 75 74 6f 69 6e 64 65 78 20 50 31 20 50 32 20  Autoindex P1 P2 
19240 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69  * P4 *.**.** Thi
19250 73 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 74  s opcode works t
19260 68 65 20 73 61 6d 65 20 61 73 20 4f 50 5f 4f 70  he same as OP_Op
19270 65 6e 45 70 68 65 6d 65 72 61 6c 2e 20 20 49 74  enEphemeral.  It
19280 20 68 61 73 20 61 0a 2a 2a 20 64 69 66 66 65 72   has a.** differ
19290 65 6e 74 20 6e 61 6d 65 20 74 6f 20 64 69 73 74  ent name to dist
192a0 69 6e 67 75 69 73 68 20 69 74 73 20 75 73 65 2e  inguish its use.
192b0 20 20 54 61 62 6c 65 73 20 63 72 65 61 74 65 64    Tables created
192c0 20 75 73 69 6e 67 0a 2a 2a 20 62 79 20 74 68 69   using.** by thi
192d0 73 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 62 65  s opcode will be
192e0 20 75 73 65 64 20 66 6f 72 20 61 75 74 6f 6d 61   used for automa
192f0 74 69 63 61 6c 6c 79 20 63 72 65 61 74 65 64 20  tically created 
19300 74 72 61 6e 73 69 65 6e 74 0a 2a 2a 20 69 6e 64  transient.** ind
19310 69 63 65 73 20 69 6e 20 6a 6f 69 6e 73 2e 0a 2a  ices in joins..*
19320 2f 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 41 75  /.case OP_OpenAu
19330 74 6f 69 6e 64 65 78 3a 20 0a 63 61 73 65 20 4f  toindex: .case O
19340 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 3a  P_OpenEphemeral:
19350 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20   {.  VdbeCursor 
19360 2a 70 43 78 3b 0a 20 20 73 74 61 74 69 63 20 63  *pCx;.  static c
19370 6f 6e 73 74 20 69 6e 74 20 76 66 73 46 6c 61 67  onst int vfsFlag
19380 73 20 3d 20 0a 20 20 20 20 20 20 53 51 4c 49 54  s = .      SQLIT
19390 45 5f 4f 50 45 4e 5f 52 45 41 44 57 52 49 54 45  E_OPEN_READWRITE
193a0 20 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f   |.      SQLITE_
193b0 4f 50 45 4e 5f 43 52 45 41 54 45 20 7c 0a 20 20  OPEN_CREATE |.  
193c0 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f      SQLITE_OPEN_
193d0 45 58 43 4c 55 53 49 56 45 20 7c 0a 20 20 20 20  EXCLUSIVE |.    
193e0 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 44 45    SQLITE_OPEN_DE
193f0 4c 45 54 45 4f 4e 43 4c 4f 53 45 20 7c 0a 20 20  LETEONCLOSE |.  
19400 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f      SQLITE_OPEN_
19410 54 52 41 4e 53 49 45 4e 54 5f 44 42 3b 0a 0a 20  TRANSIENT_DB;.. 
19420 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
19430 3e 3d 30 20 29 3b 0a 20 20 70 43 78 20 3d 20 61  >=0 );.  pCx = a
19440 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70 2c  llocateCursor(p,
19450 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70   pOp->p1, pOp->p
19460 32 2c 20 2d 31 2c 20 31 29 3b 0a 20 20 69 66 28  2, -1, 1);.  if(
19470 20 70 43 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e   pCx==0 ) goto n
19480 6f 5f 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e 6e 75  o_mem;.  pCx->nu
19490 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 72 63 20  llRow = 1;.  rc 
194a0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4f 70  = sqlite3BtreeOp
194b0 65 6e 28 30 2c 20 64 62 2c 20 26 70 43 78 2d 3e  en(0, db, &pCx->
194c0 70 42 74 2c 20 0a 20 20 20 20 20 20 20 20 20 20  pBt, .          
194d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 42 54                BT
194e0 52 45 45 5f 4f 4d 49 54 5f 4a 4f 55 52 4e 41 4c  REE_OMIT_JOURNAL
194f0 20 7c 20 42 54 52 45 45 5f 53 49 4e 47 4c 45 20   | BTREE_SINGLE 
19500 7c 20 70 4f 70 2d 3e 70 35 2c 20 76 66 73 46 6c  | pOp->p5, vfsFl
19510 61 67 73 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d  ags);.  if( rc==
19520 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
19530 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
19540 65 65 42 65 67 69 6e 54 72 61 6e 73 28 70 43 78  eeBeginTrans(pCx
19550 2d 3e 70 42 74 2c 20 31 29 3b 0a 20 20 7d 0a 20  ->pBt, 1);.  }. 
19560 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
19570 4f 4b 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20  OK ){.    /* If 
19580 61 20 74 72 61 6e 73 69 65 6e 74 20 69 6e 64 65  a transient inde
19590 78 20 69 73 20 72 65 71 75 69 72 65 64 2c 20 63  x is required, c
195a0 72 65 61 74 65 20 69 74 20 62 79 20 63 61 6c 6c  reate it by call
195b0 69 6e 67 0a 20 20 20 20 2a 2a 20 73 71 6c 69 74  ing.    ** sqlit
195c0 65 33 42 74 72 65 65 43 72 65 61 74 65 54 61 62  e3BtreeCreateTab
195d0 6c 65 28 29 20 77 69 74 68 20 74 68 65 20 42 54  le() with the BT
195e0 52 45 45 5f 42 4c 4f 42 4b 45 59 20 66 6c 61 67  REE_BLOBKEY flag
195f0 20 62 65 66 6f 72 65 0a 20 20 20 20 2a 2a 20 6f   before.    ** o
19600 70 65 6e 69 6e 67 20 69 74 2e 20 49 66 20 61 20  pening it. If a 
19610 74 72 61 6e 73 69 65 6e 74 20 74 61 62 6c 65 20  transient table 
19620 69 73 20 72 65 71 75 69 72 65 64 2c 20 6a 75 73  is required, jus
19630 74 20 75 73 65 20 74 68 65 0a 20 20 20 20 2a 2a  t use the.    **
19640 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63   automatically c
19650 72 65 61 74 65 64 20 74 61 62 6c 65 20 77 69 74  reated table wit
19660 68 20 72 6f 6f 74 2d 70 61 67 65 20 31 20 28 61  h root-page 1 (a
19670 6e 20 42 4c 4f 42 5f 49 4e 54 4b 45 59 20 74 61  n BLOB_INTKEY ta
19680 62 6c 65 29 2e 0a 20 20 20 20 2a 2f 0a 20 20 20  ble)..    */.   
19690 20 69 66 28 20 70 4f 70 2d 3e 70 34 2e 70 4b 65   if( pOp->p4.pKe
196a0 79 49 6e 66 6f 20 29 7b 0a 20 20 20 20 20 20 69  yInfo ){.      i
196b0 6e 74 20 70 67 6e 6f 3b 0a 20 20 20 20 20 20 61  nt pgno;.      a
196c0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79  ssert( pOp->p4ty
196d0 70 65 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f 20 29  pe==P4_KEYINFO )
196e0 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  ;.      rc = sql
196f0 69 74 65 33 42 74 72 65 65 43 72 65 61 74 65 54  ite3BtreeCreateT
19700 61 62 6c 65 28 70 43 78 2d 3e 70 42 74 2c 20 26  able(pCx->pBt, &
19710 70 67 6e 6f 2c 20 42 54 52 45 45 5f 42 4c 4f 42  pgno, BTREE_BLOB
19720 4b 45 59 29 3b 20 0a 20 20 20 20 20 20 69 66 28  KEY); .      if(
19730 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
19740 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  {.        assert
19750 28 20 70 67 6e 6f 3d 3d 4d 41 53 54 45 52 5f 52  ( pgno==MASTER_R
19760 4f 4f 54 2b 31 20 29 3b 0a 20 20 20 20 20 20 20  OOT+1 );.       
19770 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
19780 65 65 43 75 72 73 6f 72 28 70 43 78 2d 3e 70 42  eeCursor(pCx->pB
19790 74 2c 20 70 67 6e 6f 2c 20 31 2c 20 0a 20 20 20  t, pgno, 1, .   
197a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
197b0 20 20 20 20 20 20 20 20 20 20 20 20 20 28 4b 65               (Ke
197c0 79 49 6e 66 6f 2a 29 70 4f 70 2d 3e 70 34 2e 7a  yInfo*)pOp->p4.z
197d0 2c 20 70 43 78 2d 3e 70 43 75 72 73 6f 72 29 3b  , pCx->pCursor);
197e0 0a 20 20 20 20 20 20 20 20 70 43 78 2d 3e 70 4b  .        pCx->pK
197f0 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34  eyInfo = pOp->p4
19800 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 20  .pKeyInfo;.     
19810 20 20 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f     pCx->pKeyInfo
19820 2d 3e 65 6e 63 20 3d 20 45 4e 43 28 70 2d 3e 64  ->enc = ENC(p->d
19830 62 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  b);.      }.    
19840 20 20 70 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d    pCx->isTable =
19850 20 30 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20   0;.    }else{. 
19860 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
19870 33 42 74 72 65 65 43 75 72 73 6f 72 28 70 43 78  3BtreeCursor(pCx
19880 2d 3e 70 42 74 2c 20 4d 41 53 54 45 52 5f 52 4f  ->pBt, MASTER_RO
19890 4f 54 2c 20 31 2c 20 30 2c 20 70 43 78 2d 3e 70  OT, 1, 0, pCx->p
198a0 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 20 20 70  Cursor);.      p
198b0 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d 20 31 3b  Cx->isTable = 1;
198c0 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 70 43 78  .    }.  }.  pCx
198d0 2d 3e 69 73 4f 72 64 65 72 65 64 20 3d 20 28 70  ->isOrdered = (p
198e0 4f 70 2d 3e 70 35 21 3d 42 54 52 45 45 5f 55 4e  Op->p5!=BTREE_UN
198f0 4f 52 44 45 52 45 44 29 3b 0a 20 20 70 43 78 2d  ORDERED);.  pCx-
19900 3e 69 73 49 6e 64 65 78 20 3d 20 21 70 43 78 2d  >isIndex = !pCx-
19910 3e 69 73 54 61 62 6c 65 3b 0a 20 20 62 72 65 61  >isTable;.  brea
19920 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
19930 20 4f 70 65 6e 50 73 65 75 64 6f 20 50 31 20 50   OpenPseudo P1 P
19940 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4f  2 P3 * *.**.** O
19950 70 65 6e 20 61 20 6e 65 77 20 63 75 72 73 6f 72  pen a new cursor
19960 20 74 68 61 74 20 70 6f 69 6e 74 73 20 74 6f 20   that points to 
19970 61 20 66 61 6b 65 20 74 61 62 6c 65 20 74 68 61  a fake table tha
19980 74 20 63 6f 6e 74 61 69 6e 73 20 61 20 73 69 6e  t contains a sin
19990 67 6c 65 0a 2a 2a 20 72 6f 77 20 6f 66 20 64 61  gle.** row of da
199a0 74 61 2e 20 20 54 68 65 20 63 6f 6e 74 65 6e 74  ta.  The content
199b0 20 6f 66 20 74 68 61 74 20 6f 6e 65 20 72 6f 77   of that one row
199c0 20 69 6e 20 74 68 65 20 63 6f 6e 74 65 6e 74 20   in the content 
199d0 6f 66 20 6d 65 6d 6f 72 79 0a 2a 2a 20 72 65 67  of memory.** reg
199e0 69 73 74 65 72 20 50 32 2e 20 20 49 6e 20 6f 74  ister P2.  In ot
199f0 68 65 72 20 77 6f 72 64 73 2c 20 63 75 72 73 6f  her words, curso
19a00 72 20 50 31 20 62 65 63 6f 6d 65 73 20 61 6e 20  r P1 becomes an 
19a10 61 6c 69 61 73 20 66 6f 72 20 74 68 65 20 0a 2a  alias for the .*
19a20 2a 20 4d 45 4d 5f 42 6c 6f 62 20 63 6f 6e 74 65  * MEM_Blob conte
19a30 6e 74 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20  nt contained in 
19a40 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a  register P2..**.
19a50 2a 2a 20 41 20 70 73 65 75 64 6f 2d 74 61 62 6c  ** A pseudo-tabl
19a60 65 20 63 72 65 61 74 65 64 20 62 79 20 74 68 69  e created by thi
19a70 73 20 6f 70 63 6f 64 65 20 69 73 20 75 73 65 64  s opcode is used
19a80 20 74 6f 20 68 6f 6c 64 20 61 20 73 69 6e 67 6c   to hold a singl
19a90 65 0a 2a 2a 20 72 6f 77 20 6f 75 74 70 75 74 20  e.** row output 
19aa0 66 72 6f 6d 20 74 68 65 20 73 6f 72 74 65 72 20  from the sorter 
19ab0 73 6f 20 74 68 61 74 20 74 68 65 20 72 6f 77 20  so that the row 
19ac0 63 61 6e 20 62 65 20 64 65 63 6f 6d 70 6f 73 65  can be decompose
19ad0 64 20 69 6e 74 6f 0a 2a 2a 20 69 6e 64 69 76 69  d into.** indivi
19ae0 64 75 61 6c 20 63 6f 6c 75 6d 6e 73 20 75 73 69  dual columns usi
19af0 6e 67 20 74 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e  ng the OP_Column
19b00 20 6f 70 63 6f 64 65 2e 20 20 54 68 65 20 4f 50   opcode.  The OP
19b10 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 0a 2a  _Column opcode.*
19b20 2a 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 63 75  * is the only cu
19b30 72 73 6f 72 20 6f 70 63 6f 64 65 20 74 68 61 74  rsor opcode that
19b40 20 77 6f 72 6b 73 20 77 69 74 68 20 61 20 70 73   works with a ps
19b50 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2a 0a 2a  eudo-table..**.*
19b60 2a 20 50 33 20 69 73 20 74 68 65 20 6e 75 6d 62  * P3 is the numb
19b70 65 72 20 6f 66 20 66 69 65 6c 64 73 20 69 6e 20  er of fields in 
19b80 74 68 65 20 72 65 63 6f 72 64 73 20 74 68 61 74  the records that
19b90 20 77 69 6c 6c 20 62 65 20 73 74 6f 72 65 64 20   will be stored 
19ba0 62 79 0a 2a 2a 20 74 68 65 20 70 73 65 75 64 6f  by.** the pseudo
19bb0 2d 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20  -table..*/.case 
19bc0 4f 50 5f 4f 70 65 6e 50 73 65 75 64 6f 3a 20 7b  OP_OpenPseudo: {
19bd0 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
19be0 43 78 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  Cx;..  assert( p
19bf0 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 70  Op->p1>=0 );.  p
19c00 43 78 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72  Cx = allocateCur
19c10 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20  sor(p, pOp->p1, 
19c20 70 4f 70 2d 3e 70 33 2c 20 2d 31 2c 20 30 29 3b  pOp->p3, -1, 0);
19c30 0a 20 20 69 66 28 20 70 43 78 3d 3d 30 20 29 20  .  if( pCx==0 ) 
19c40 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70  goto no_mem;.  p
19c50 43 78 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b  Cx->nullRow = 1;
19c60 0a 20 20 70 43 78 2d 3e 70 73 65 75 64 6f 54 61  .  pCx->pseudoTa
19c70 62 6c 65 52 65 67 20 3d 20 70 4f 70 2d 3e 70 32  bleReg = pOp->p2
19c80 3b 0a 20 20 70 43 78 2d 3e 69 73 54 61 62 6c 65  ;.  pCx->isTable
19c90 20 3d 20 31 3b 0a 20 20 70 43 78 2d 3e 69 73 49   = 1;.  pCx->isI
19ca0 6e 64 65 78 20 3d 20 30 3b 0a 20 20 62 72 65 61  ndex = 0;.  brea
19cb0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
19cc0 20 43 6c 6f 73 65 20 50 31 20 2a 20 2a 20 2a 20   Close P1 * * * 
19cd0 2a 0a 2a 2a 0a 2a 2a 20 43 6c 6f 73 65 20 61 20  *.**.** Close a 
19ce0 63 75 72 73 6f 72 20 70 72 65 76 69 6f 75 73 6c  cursor previousl
19cf0 79 20 6f 70 65 6e 65 64 20 61 73 20 50 31 2e 20  y opened as P1. 
19d00 20 49 66 20 50 31 20 69 73 20 6e 6f 74 0a 2a 2a   If P1 is not.**
19d10 20 63 75 72 72 65 6e 74 6c 79 20 6f 70 65 6e 2c   currently open,
19d20 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
19d30 6e 20 69 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f  n is a no-op..*/
19d40 0a 63 61 73 65 20 4f 50 5f 43 6c 6f 73 65 3a 20  .case OP_Close: 
19d50 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  {.  assert( pOp-
19d60 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
19d70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
19d80 20 20 73 71 6c 69 74 65 33 56 64 62 65 46 72 65    sqlite3VdbeFre
19d90 65 43 75 72 73 6f 72 28 70 2c 20 70 2d 3e 61 70  eCursor(p, p->ap
19da0 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 29 3b 0a 20  Csr[pOp->p1]);. 
19db0 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
19dc0 31 5d 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b  1] = 0;.  break;
19dd0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .}../* Opcode: S
19de0 65 65 6b 47 65 20 50 31 20 50 32 20 50 33 20 50  eekGe P1 P2 P3 P
19df0 34 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72  4 *.**.** If cur
19e00 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 74 6f  sor P1 refers to
19e10 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42   an SQL table (B
19e20 2d 54 72 65 65 20 74 68 61 74 20 75 73 65 73 20  -Tree that uses 
19e30 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a  integer keys), .
19e40 2a 2a 20 75 73 65 20 74 68 65 20 76 61 6c 75 65  ** use the value
19e50 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20   in register P3 
19e60 61 73 20 74 68 65 20 6b 65 79 2e 20 20 49 66 20  as the key.  If 
19e70 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73  cursor P1 refers
19e80 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69   .** to an SQL i
19e90 6e 64 65 78 2c 20 74 68 65 6e 20 50 33 20 69 73  ndex, then P3 is
19ea0 20 74 68 65 20 66 69 72 73 74 20 69 6e 20 61 6e   the first in an
19eb0 20 61 72 72 61 79 20 6f 66 20 50 34 20 72 65 67   array of P4 reg
19ec0 69 73 74 65 72 73 20 0a 2a 2a 20 74 68 61 74 20  isters .** that 
19ed0 61 72 65 20 75 73 65 64 20 61 73 20 61 6e 20 75  are used as an u
19ee0 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65  npacked index ke
19ef0 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69  y. .**.** Reposi
19f00 74 69 6f 6e 20 63 75 72 73 6f 72 20 50 31 20 73  tion cursor P1 s
19f10 6f 20 74 68 61 74 20 20 69 74 20 70 6f 69 6e 74  o that  it point
19f20 73 20 74 6f 20 74 68 65 20 73 6d 61 6c 6c 65 73  s to the smalles
19f30 74 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a  t entry that .**
19f40 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e   is greater than
19f50 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65   or equal to the
19f60 20 6b 65 79 20 76 61 6c 75 65 2e 20 49 66 20 74   key value. If t
19f70 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f  here are no reco
19f80 72 64 73 20 0a 2a 2a 20 67 72 65 61 74 65 72 20  rds .** greater 
19f90 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f  than or equal to
19fa0 20 74 68 65 20 6b 65 79 20 61 6e 64 20 50 32 20   the key and P2 
19fb0 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65  is not zero, the
19fc0 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a  n jump to P2..**
19fd0 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f  .** See also: Fo
19fe0 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 44  und, NotFound, D
19ff0 69 73 74 69 6e 63 74 2c 20 53 65 65 6b 4c 74 2c  istinct, SeekLt,
1a000 20 53 65 65 6b 47 74 2c 20 53 65 65 6b 4c 65 0a   SeekGt, SeekLe.
1a010 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65  */./* Opcode: Se
1a020 65 6b 47 74 20 50 31 20 50 32 20 50 33 20 50 34  ekGt P1 P2 P3 P4
1a030 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73   *.**.** If curs
1a040 6f 72 20 50 31 20 72 65 66 65 72 73 20 74 6f 20  or P1 refers to 
1a050 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d  an SQL table (B-
1a060 54 72 65 65 20 74 68 61 74 20 75 73 65 73 20 69  Tree that uses i
1a070 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a  nteger keys), .*
1a080 2a 20 75 73 65 20 74 68 65 20 76 61 6c 75 65 20  * use the value 
1a090 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 61  in register P3 a
1a0a0 73 20 61 20 6b 65 79 2e 20 49 66 20 63 75 72 73  s a key. If curs
1a0b0 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a  or P1 refers .**
1a0c0 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78   to an SQL index
1a0d0 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74 68 65  , then P3 is the
1a0e0 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72   first in an arr
1a0f0 61 79 20 6f 66 20 50 34 20 72 65 67 69 73 74 65  ay of P4 registe
1a100 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20  rs .** that are 
1a110 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63  used as an unpac
1a120 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a  ked index key. .
1a130 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e  **.** Reposition
1a140 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68   cursor P1 so th
1a150 61 74 20 20 69 74 20 70 6f 69 6e 74 73 20 74 6f  at  it points to
1a160 20 74 68 65 20 73 6d 61 6c 6c 65 73 74 20 65 6e   the smallest en
1a170 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20  try that .** is 
1a180 67 72 65 61 74 65 72 20 74 68 61 6e 20 74 68 65  greater than the
1a190 20 6b 65 79 20 76 61 6c 75 65 2e 20 49 66 20 74   key value. If t
1a1a0 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f  here are no reco
1a1b0 72 64 73 20 67 72 65 61 74 65 72 20 74 68 61 6e  rds greater than
1a1c0 20 0a 2a 2a 20 74 68 65 20 6b 65 79 20 61 6e 64   .** the key and
1a1d0 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c   P2 is not zero,
1a1e0 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32   then jump to P2
1a1f0 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
1a200 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e  : Found, NotFoun
1a210 64 2c 20 44 69 73 74 69 6e 63 74 2c 20 53 65 65  d, Distinct, See
1a220 6b 4c 74 2c 20 53 65 65 6b 47 65 2c 20 53 65 65  kLt, SeekGe, See
1a230 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  kLe.*/./* Opcode
1a240 3a 20 53 65 65 6b 4c 74 20 50 31 20 50 32 20 50  : SeekLt P1 P2 P
1a250 33 20 50 34 20 2a 20 0a 2a 2a 0a 2a 2a 20 49 66  3 P4 * .**.** If
1a260 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72   cursor P1 refer
1a270 73 20 74 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c  s to an SQL tabl
1a280 65 20 28 42 2d 54 72 65 65 20 74 68 61 74 20 75  e (B-Tree that u
1a290 73 65 73 20 69 6e 74 65 67 65 72 20 6b 65 79 73  ses integer keys
1a2a0 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65 20 76  ), .** use the v
1a2b0 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
1a2c0 20 50 33 20 61 73 20 61 20 6b 65 79 2e 20 49 66   P3 as a key. If
1a2d0 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72   cursor P1 refer
1a2e0 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20  s .** to an SQL 
1a2f0 69 6e 64 65 78 2c 20 74 68 65 6e 20 50 33 20 69  index, then P3 i
1a300 73 20 74 68 65 20 66 69 72 73 74 20 69 6e 20 61  s the first in a
1a310 6e 20 61 72 72 61 79 20 6f 66 20 50 34 20 72 65  n array of P4 re
1a320 67 69 73 74 65 72 73 20 0a 2a 2a 20 74 68 61 74  gisters .** that
1a330 20 61 72 65 20 75 73 65 64 20 61 73 20 61 6e 20   are used as an 
1a340 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b  unpacked index k
1a350 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73  ey. .**.** Repos
1a360 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50 31 20  ition cursor P1 
1a370 73 6f 20 74 68 61 74 20 20 69 74 20 70 6f 69 6e  so that  it poin
1a380 74 73 20 74 6f 20 74 68 65 20 6c 61 72 67 65 73  ts to the larges
1a390 74 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a  t entry that .**
1a3a0 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68   is less than th
1a3b0 65 20 6b 65 79 20 76 61 6c 75 65 2e 20 49 66 20  e key value. If 
1a3c0 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63  there are no rec
1a3d0 6f 72 64 73 20 6c 65 73 73 20 74 68 61 6e 20 0a  ords less than .
1a3e0 2a 2a 20 74 68 65 20 6b 65 79 20 61 6e 64 20 50  ** the key and P
1a3f0 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74  2 is not zero, t
1a400 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a  hen jump to P2..
1a410 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
1a420 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c  Found, NotFound,
1a430 20 44 69 73 74 69 6e 63 74 2c 20 53 65 65 6b 47   Distinct, SeekG
1a440 74 2c 20 53 65 65 6b 47 65 2c 20 53 65 65 6b 4c  t, SeekGe, SeekL
1a450 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  e.*/./* Opcode: 
1a460 53 65 65 6b 4c 65 20 50 31 20 50 32 20 50 33 20  SeekLe P1 P2 P3 
1a470 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75  P4 *.**.** If cu
1a480 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 74  rsor P1 refers t
1a490 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28  o an SQL table (
1a4a0 42 2d 54 72 65 65 20 74 68 61 74 20 75 73 65 73  B-Tree that uses
1a4b0 20 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20   integer keys), 
1a4c0 0a 2a 2a 20 75 73 65 20 74 68 65 20 76 61 6c 75  .** use the valu
1a4d0 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  e in register P3
1a4e0 20 61 73 20 61 20 6b 65 79 2e 20 49 66 20 63 75   as a key. If cu
1a4f0 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a  rsor P1 refers .
1a500 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64  ** to an SQL ind
1a510 65 78 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74  ex, then P3 is t
1a520 68 65 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61  he first in an a
1a530 72 72 61 79 20 6f 66 20 50 34 20 72 65 67 69 73  rray of P4 regis
1a540 74 65 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72  ters .** that ar
1a550 65 20 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70  e used as an unp
1a560 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e  acked index key.
1a570 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69   .**.** Repositi
1a580 6f 6e 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20  on cursor P1 so 
1a590 74 68 61 74 20 69 74 20 70 6f 69 6e 74 73 20 74  that it points t
1a5a0 6f 20 74 68 65 20 6c 61 72 67 65 73 74 20 65 6e  o the largest en
1a5b0 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20  try that .** is 
1a5c0 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75  less than or equ
1a5d0 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 76 61  al to the key va
1a5e0 6c 75 65 2e 20 49 66 20 74 68 65 72 65 20 61 72  lue. If there ar
1a5f0 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 0a 2a 2a  e no records .**
1a600 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71   less than or eq
1a610 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 61  ual to the key a
1a620 6e 64 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72  nd P2 is not zer
1a630 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20  o, then jump to 
1a640 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  P2..**.** See al
1a650 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f  so: Found, NotFo
1a660 75 6e 64 2c 20 44 69 73 74 69 6e 63 74 2c 20 53  und, Distinct, S
1a670 65 65 6b 47 74 2c 20 53 65 65 6b 47 65 2c 20 53  eekGt, SeekGe, S
1a680 65 65 6b 4c 74 0a 2a 2f 0a 63 61 73 65 20 4f 50  eekLt.*/.case OP
1a690 5f 53 65 65 6b 4c 74 3a 20 20 20 20 20 20 20 20  _SeekLt:        
1a6a0 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f   /* jump, in3 */
1a6b0 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 4c 65 3a  .case OP_SeekLe:
1a6c0 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
1a6d0 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50  , in3 */.case OP
1a6e0 5f 53 65 65 6b 47 65 3a 20 20 20 20 20 20 20 20  _SeekGe:        
1a6f0 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f   /* jump, in3 */
1a700 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 47 74 3a  .case OP_SeekGt:
1a710 20 7b 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70   {       /* jump
1a720 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 72  , in3 */.  int r
1a730 65 73 3b 0a 20 20 69 6e 74 20 6f 63 3b 0a 20 20  es;.  int oc;.  
1a740 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
1a750 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64    UnpackedRecord
1a760 20 72 3b 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64   r;.  int nField
1a770 3b 0a 20 20 69 36 34 20 69 4b 65 79 3b 20 20 20  ;.  i64 iKey;   
1a780 20 20 20 2f 2a 20 54 68 65 20 72 6f 77 69 64 20     /* The rowid 
1a790 77 65 20 61 72 65 20 74 6f 20 73 65 65 6b 20 74  we are to seek t
1a7a0 6f 20 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20  o */..  assert( 
1a7b0 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
1a7c0 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
1a7d0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
1a7e0 70 2d 3e 70 32 21 3d 30 20 29 3b 0a 20 20 70 43  p->p2!=0 );.  pC
1a7f0 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
1a800 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
1a810 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  pC!=0 );.  asser
1a820 74 28 20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62  t( pC->pseudoTab
1a830 6c 65 52 65 67 3d 3d 30 20 29 3b 0a 20 20 61 73  leReg==0 );.  as
1a840 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 4c 65 20  sert( OP_SeekLe 
1a850 3d 3d 20 4f 50 5f 53 65 65 6b 4c 74 2b 31 20 29  == OP_SeekLt+1 )
1a860 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53  ;.  assert( OP_S
1a870 65 65 6b 47 65 20 3d 3d 20 4f 50 5f 53 65 65 6b  eekGe == OP_Seek
1a880 4c 74 2b 32 20 29 3b 0a 20 20 61 73 73 65 72 74  Lt+2 );.  assert
1a890 28 20 4f 50 5f 53 65 65 6b 47 74 20 3d 3d 20 4f  ( OP_SeekGt == O
1a8a0 50 5f 53 65 65 6b 4c 74 2b 33 20 29 3b 0a 20 20  P_SeekLt+3 );.  
1a8b0 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 4f 72  assert( pC->isOr
1a8c0 64 65 72 65 64 20 29 3b 0a 20 20 69 66 28 20 70  dered );.  if( p
1a8d0 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20 29 7b  C->pCursor!=0 ){
1a8e0 0a 20 20 20 20 6f 63 20 3d 20 70 4f 70 2d 3e 6f  .    oc = pOp->o
1a8f0 70 63 6f 64 65 3b 0a 20 20 20 20 70 43 2d 3e 6e  pcode;.    pC->n
1a900 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20  ullRow = 0;.    
1a910 69 66 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20  if( pC->isTable 
1a920 29 7b 0a 20 20 20 20 20 20 2f 2a 20 54 68 65 20  ){.      /* The 
1a930 69 6e 70 75 74 20 76 61 6c 75 65 20 69 6e 20 50  input value in P
1a940 33 20 6d 69 67 68 74 20 62 65 20 6f 66 20 61 6e  3 might be of an
1a950 79 20 74 79 70 65 3a 20 69 6e 74 65 67 65 72 2c  y type: integer,
1a960 20 72 65 61 6c 2c 20 73 74 72 69 6e 67 2c 0a 20   real, string,. 
1a970 20 20 20 20 20 2a 2a 20 62 6c 6f 62 2c 20 6f 72       ** blob, or
1a980 20 4e 55 4c 4c 2e 20 20 42 75 74 20 69 74 20 6e   NULL.  But it n
1a990 65 65 64 73 20 74 6f 20 62 65 20 61 6e 20 69 6e  eeds to be an in
1a9a0 74 65 67 65 72 20 62 65 66 6f 72 65 20 77 65 20  teger before we 
1a9b0 63 61 6e 20 64 6f 0a 20 20 20 20 20 20 2a 2a 20  can do.      ** 
1a9c0 74 68 65 20 73 65 65 6b 2c 20 73 6f 20 63 6f 76  the seek, so cov
1a9d0 65 72 74 20 69 74 2e 20 2a 2f 0a 20 20 20 20 20  ert it. */.     
1a9e0 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn3 = &aMem[pO
1a9f0 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 20 20 61 70  p->p3];.      ap
1aa00 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69  plyNumericAffini
1aa10 74 79 28 70 49 6e 33 29 3b 0a 20 20 20 20 20 20  ty(pIn3);.      
1aa20 69 4b 65 79 20 3d 20 73 71 6c 69 74 65 33 56 64  iKey = sqlite3Vd
1aa30 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 33 29  beIntValue(pIn3)
1aa40 3b 0a 20 20 20 20 20 20 70 43 2d 3e 72 6f 77 69  ;.      pC->rowi
1aa50 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 0a 20  dIsValid = 0;.. 
1aa60 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20 50       /* If the P
1aa70 33 20 76 61 6c 75 65 20 63 6f 75 6c 64 20 6e 6f  3 value could no
1aa80 74 20 62 65 20 63 6f 6e 76 65 72 74 65 64 20 69  t be converted i
1aa90 6e 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 77  nto an integer w
1aaa0 69 74 68 6f 75 74 0a 20 20 20 20 20 20 2a 2a 20  ithout.      ** 
1aab0 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72 6d 61 74  loss of informat
1aac0 69 6f 6e 2c 20 74 68 65 6e 20 73 70 65 63 69 61  ion, then specia
1aad0 6c 20 70 72 6f 63 65 73 73 69 6e 67 20 69 73 20  l processing is 
1aae0 72 65 71 75 69 72 65 64 2e 2e 2e 20 2a 2f 0a 20  required... */. 
1aaf0 20 20 20 20 20 69 66 28 20 28 70 49 6e 33 2d 3e       if( (pIn3->
1ab00 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29  flags & MEM_Int)
1ab10 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 69  ==0 ){.        i
1ab20 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20  f( (pIn3->flags 
1ab30 26 20 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30 20 29  & MEM_Real)==0 )
1ab40 7b 0a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49  {.          /* I
1ab50 66 20 74 68 65 20 50 33 20 76 61 6c 75 65 20 63  f the P3 value c
1ab60 61 6e 6e 6f 74 20 62 65 20 63 6f 6e 76 65 72 74  annot be convert
1ab70 65 64 20 69 6e 74 6f 20 61 6e 79 20 6b 69 6e 64  ed into any kind
1ab80 20 6f 66 20 61 20 6e 75 6d 62 65 72 2c 0a 20 20   of a number,.  
1ab90 20 20 20 20 20 20 20 20 2a 2a 20 74 68 65 6e 20          ** then 
1aba0 74 68 65 20 73 65 65 6b 20 69 73 20 6e 6f 74 20  the seek is not 
1abb0 70 6f 73 73 69 62 6c 65 2c 20 73 6f 20 6a 75 6d  possible, so jum
1abc0 70 20 74 6f 20 50 32 20 2a 2f 0a 20 20 20 20 20  p to P2 */.     
1abd0 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70       pc = pOp->p
1abe0 32 20 2d 20 31 3b 0a 20 20 20 20 20 20 20 20 20  2 - 1;.         
1abf0 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20   break;.        
1ac00 7d 0a 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20  }.        /* If 
1ac10 77 65 20 72 65 61 63 68 20 74 68 69 73 20 70 6f  we reach this po
1ac20 69 6e 74 2c 20 74 68 65 6e 20 74 68 65 20 50 33  int, then the P3
1ac30 20 76 61 6c 75 65 20 6d 75 73 74 20 62 65 20 61   value must be a
1ac40 20 66 6c 6f 61 74 69 6e 67 0a 20 20 20 20 20 20   floating.      
1ac50 20 20 2a 2a 20 70 6f 69 6e 74 20 6e 75 6d 62 65    ** point numbe
1ac60 72 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 61 73  r. */.        as
1ac70 73 65 72 74 28 20 28 70 49 6e 33 2d 3e 66 6c 61  sert( (pIn3->fla
1ac80 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 29 21 3d  gs & MEM_Real)!=
1ac90 30 20 29 3b 0a 0a 20 20 20 20 20 20 20 20 69 66  0 );..        if
1aca0 28 20 69 4b 65 79 3d 3d 53 4d 41 4c 4c 45 53 54  ( iKey==SMALLEST
1acb0 5f 49 4e 54 36 34 20 26 26 20 28 70 49 6e 33 2d  _INT64 && (pIn3-
1acc0 3e 72 3c 28 64 6f 75 62 6c 65 29 69 4b 65 79 20  >r<(double)iKey 
1acd0 7c 7c 20 70 49 6e 33 2d 3e 72 3e 30 29 20 29 7b  || pIn3->r>0) ){
1ace0 0a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  .          /* Th
1acf0 65 20 50 33 20 76 61 6c 75 65 20 69 73 20 74 6f  e P3 value is to
1ad00 6f 20 6c 61 72 67 65 20 69 6e 20 6d 61 67 6e 69  o large in magni
1ad10 74 75 64 65 20 74 6f 20 62 65 20 65 78 70 72 65  tude to be expre
1ad20 73 73 65 64 20 61 73 20 61 6e 0a 20 20 20 20 20  ssed as an.     
1ad30 20 20 20 20 20 2a 2a 20 69 6e 74 65 67 65 72 2e       ** integer.
1ad40 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 72 65   */.          re
1ad50 73 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 20  s = 1;.         
1ad60 20 69 66 28 20 70 49 6e 33 2d 3e 72 3c 30 20 29   if( pIn3->r<0 )
1ad70 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  {.            if
1ad80 28 20 6f 63 3e 3d 4f 50 5f 53 65 65 6b 47 65 20  ( oc>=OP_SeekGe 
1ad90 29 7b 20 20 61 73 73 65 72 74 28 20 6f 63 3d 3d  ){  assert( oc==
1ada0 4f 50 5f 53 65 65 6b 47 65 20 7c 7c 20 6f 63 3d  OP_SeekGe || oc=
1adb0 3d 4f 50 5f 53 65 65 6b 47 74 20 29 3b 0a 20 20  =OP_SeekGt );.  
1adc0 20 20 20 20 20 20 20 20 20 20 20 20 72 63 20 3d              rc =
1add0 20 73 71 6c 69 74 65 33 42 74 72 65 65 46 69 72   sqlite3BtreeFir
1ade0 73 74 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20  st(pC->pCursor, 
1adf0 26 72 65 73 29 3b 0a 20 20 20 20 20 20 20 20 20  &res);.         
1ae00 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c       if( rc!=SQL
1ae10 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62  ITE_OK ) goto ab
1ae20 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
1ae30 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a  ;.            }.
1ae40 20 20 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b            }else{
1ae50 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 28  .            if(
1ae60 20 6f 63 3c 3d 4f 50 5f 53 65 65 6b 4c 65 20 29   oc<=OP_SeekLe )
1ae70 7b 20 20 61 73 73 65 72 74 28 20 6f 63 3d 3d 4f  {  assert( oc==O
1ae80 50 5f 53 65 65 6b 4c 74 20 7c 7c 20 6f 63 3d 3d  P_SeekLt || oc==
1ae90 4f 50 5f 53 65 65 6b 4c 65 20 29 3b 0a 20 20 20  OP_SeekLe );.   
1aea0 20 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20             rc = 
1aeb0 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74  sqlite3BtreeLast
1aec0 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72  (pC->pCursor, &r
1aed0 65 73 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  es);.           
1aee0 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
1aef0 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72  E_OK ) goto abor
1af00 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
1af10 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20              }.  
1af20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
1af30 20 20 20 20 69 66 28 20 72 65 73 20 29 7b 0a 20      if( res ){. 
1af40 20 20 20 20 20 20 20 20 20 20 20 70 63 20 3d 20             pc = 
1af50 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20  pOp->p2 - 1;.   
1af60 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
1af70 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
1af80 20 20 7d 65 6c 73 65 20 69 66 28 20 6f 63 3d 3d    }else if( oc==
1af90 4f 50 5f 53 65 65 6b 4c 74 20 7c 7c 20 6f 63 3d  OP_SeekLt || oc=
1afa0 3d 4f 50 5f 53 65 65 6b 47 65 20 29 7b 0a 20 20  =OP_SeekGe ){.  
1afb0 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 20 74          /* Use t
1afc0 68 65 20 63 65 69 6c 69 6e 67 28 29 20 66 75 6e  he ceiling() fun
1afd0 63 74 69 6f 6e 20 74 6f 20 63 6f 6e 76 65 72 74  ction to convert
1afe0 20 72 65 61 6c 2d 3e 69 6e 74 20 2a 2f 0a 20 20   real->int */.  
1aff0 20 20 20 20 20 20 20 20 69 66 28 20 70 49 6e 33          if( pIn3
1b000 2d 3e 72 20 3e 20 28 64 6f 75 62 6c 65 29 69 4b  ->r > (double)iK
1b010 65 79 20 29 20 69 4b 65 79 2b 2b 3b 0a 20 20 20  ey ) iKey++;.   
1b020 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
1b030 20 20 20 20 20 20 2f 2a 20 55 73 65 20 74 68 65        /* Use the
1b040 20 66 6c 6f 6f 72 28 29 20 66 75 6e 63 74 69 6f   floor() functio
1b050 6e 20 74 6f 20 63 6f 6e 76 65 72 74 20 72 65 61  n to convert rea
1b060 6c 2d 3e 69 6e 74 20 2a 2f 0a 20 20 20 20 20 20  l->int */.      
1b070 20 20 20 20 61 73 73 65 72 74 28 20 6f 63 3d 3d      assert( oc==
1b080 4f 50 5f 53 65 65 6b 4c 65 20 7c 7c 20 6f 63 3d  OP_SeekLe || oc=
1b090 3d 4f 50 5f 53 65 65 6b 47 74 20 29 3b 0a 20 20  =OP_SeekGt );.  
1b0a0 20 20 20 20 20 20 20 20 69 66 28 20 70 49 6e 33          if( pIn3
1b0b0 2d 3e 72 20 3c 20 28 64 6f 75 62 6c 65 29 69 4b  ->r < (double)iK
1b0c0 65 79 20 29 20 69 4b 65 79 2d 2d 3b 0a 20 20 20  ey ) iKey--;.   
1b0d0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 20 0a       }.      } .
1b0e0 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
1b0f0 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70  e3BtreeMovetoUnp
1b100 61 63 6b 65 64 28 70 43 2d 3e 70 43 75 72 73 6f  acked(pC->pCurso
1b110 72 2c 20 30 2c 20 28 75 36 34 29 69 4b 65 79 2c  r, 0, (u64)iKey,
1b120 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20   0, &res);.     
1b130 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
1b140 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 67 6f  OK ){.        go
1b150 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
1b160 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20  error;.      }. 
1b170 20 20 20 20 20 69 66 28 20 72 65 73 3d 3d 30 20       if( res==0 
1b180 29 7b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 72  ){.        pC->r
1b190 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 31 3b  owidIsValid = 1;
1b1a0 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 6c 61 73  .        pC->las
1b1b0 74 52 6f 77 69 64 20 3d 20 69 4b 65 79 3b 0a 20  tRowid = iKey;. 
1b1c0 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65       }.    }else
1b1d0 7b 0a 20 20 20 20 20 20 6e 46 69 65 6c 64 20 3d  {.      nField =
1b1e0 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 20 20   pOp->p4.i;.    
1b1f0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1b200 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20  4type==P4_INT32 
1b210 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
1b220 20 6e 46 69 65 6c 64 3e 30 20 29 3b 0a 20 20 20   nField>0 );.   
1b230 20 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20     r.pKeyInfo = 
1b240 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20  pC->pKeyInfo;.  
1b250 20 20 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28      r.nField = (
1b260 75 31 36 29 6e 46 69 65 6c 64 3b 0a 0a 20 20 20  u16)nField;..   
1b270 20 20 20 2f 2a 20 54 68 65 20 6e 65 78 74 20 6c     /* The next l
1b280 69 6e 65 20 6f 66 20 63 6f 64 65 20 63 6f 6d 70  ine of code comp
1b290 75 74 65 73 20 61 73 20 66 6f 6c 6c 6f 77 73 2c  utes as follows,
1b2a0 20 6f 6e 6c 79 20 66 61 73 74 65 72 3a 0a 20 20   only faster:.  
1b2b0 20 20 20 20 2a 2a 20 20 20 69 66 28 20 6f 63 3d      **   if( oc=
1b2c0 3d 4f 50 5f 53 65 65 6b 47 74 20 7c 7c 20 6f 63  =OP_SeekGt || oc
1b2d0 3d 3d 4f 50 5f 53 65 65 6b 4c 65 20 29 7b 0a 20  ==OP_SeekLe ){. 
1b2e0 20 20 20 20 20 2a 2a 20 20 20 20 20 72 2e 66 6c       **     r.fl
1b2f0 61 67 73 20 3d 20 55 4e 50 41 43 4b 45 44 5f 49  ags = UNPACKED_I
1b300 4e 43 52 4b 45 59 3b 0a 20 20 20 20 20 20 2a 2a  NCRKEY;.      **
1b310 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
1b320 2a 2a 20 20 20 20 20 72 2e 66 6c 61 67 73 20 3d  **     r.flags =
1b330 20 30 3b 0a 20 20 20 20 20 20 2a 2a 20 20 20 7d   0;.      **   }
1b340 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20  .      */.      
1b350 72 2e 66 6c 61 67 73 20 3d 20 28 75 31 36 29 28  r.flags = (u16)(
1b360 55 4e 50 41 43 4b 45 44 5f 49 4e 43 52 4b 45 59  UNPACKED_INCRKEY
1b370 20 2a 20 28 31 20 26 20 28 6f 63 20 2d 20 4f 50   * (1 & (oc - OP
1b380 5f 53 65 65 6b 4c 74 29 29 29 3b 0a 20 20 20 20  _SeekLt)));.    
1b390 20 20 61 73 73 65 72 74 28 20 6f 63 21 3d 4f 50    assert( oc!=OP
1b3a0 5f 53 65 65 6b 47 74 20 7c 7c 20 72 2e 66 6c 61  _SeekGt || r.fla
1b3b0 67 73 3d 3d 55 4e 50 41 43 4b 45 44 5f 49 4e 43  gs==UNPACKED_INC
1b3c0 52 4b 45 59 20 29 3b 0a 20 20 20 20 20 20 61 73  RKEY );.      as
1b3d0 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65  sert( oc!=OP_See
1b3e0 6b 4c 65 20 7c 7c 20 72 2e 66 6c 61 67 73 3d 3d  kLe || r.flags==
1b3f0 55 4e 50 41 43 4b 45 44 5f 49 4e 43 52 4b 45 59  UNPACKED_INCRKEY
1b400 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
1b410 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 47 65 20  ( oc!=OP_SeekGe 
1b420 7c 7c 20 72 2e 66 6c 61 67 73 3d 3d 30 20 29 3b  || r.flags==0 );
1b430 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6f  .      assert( o
1b440 63 21 3d 4f 50 5f 53 65 65 6b 4c 74 20 7c 7c 20  c!=OP_SeekLt || 
1b450 72 2e 66 6c 61 67 73 3d 3d 30 20 29 3b 0a 0a 20  r.flags==0 );.. 
1b460 20 20 20 20 20 72 2e 61 4d 65 6d 20 3d 20 26 61       r.aMem = &a
1b470 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 23 69  Mem[pOp->p3];.#i
1b480 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
1b490 47 0a 20 20 20 20 20 20 7b 20 69 6e 74 20 69 3b  G.      { int i;
1b4a0 20 66 6f 72 28 69 3d 30 3b 20 69 3c 72 2e 6e 46   for(i=0; i<r.nF
1b4b0 69 65 6c 64 3b 20 69 2b 2b 29 20 61 73 73 65 72  ield; i++) asser
1b4c0 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 72  t( memIsValid(&r
1b4d0 2e 61 4d 65 6d 5b 69 5d 29 20 29 3b 20 7d 0a 23  .aMem[i]) ); }.#
1b4e0 65 6e 64 69 66 0a 20 20 20 20 20 20 45 78 70 61  endif.      Expa
1b4f0 6e 64 42 6c 6f 62 28 72 2e 61 4d 65 6d 29 3b 0a  ndBlob(r.aMem);.
1b500 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
1b510 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70  e3BtreeMovetoUnp
1b520 61 63 6b 65 64 28 70 43 2d 3e 70 43 75 72 73 6f  acked(pC->pCurso
1b530 72 2c 20 26 72 2c 20 30 2c 20 30 2c 20 26 72 65  r, &r, 0, 0, &re
1b540 73 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63  s);.      if( rc
1b550 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
1b560 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72         goto abor
1b570 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
1b580 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 70 43        }.      pC
1b590 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d  ->rowidIsValid =
1b5a0 20 30 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 43   0;.    }.    pC
1b5b0 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
1b5c0 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e 63 61   = 0;.    pC->ca
1b5d0 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
1b5e0 45 5f 53 54 41 4c 45 3b 0a 23 69 66 64 65 66 20  E_STALE;.#ifdef 
1b5f0 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 20 20  SQLITE_TEST.    
1b600 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f 63  sqlite3_search_c
1b610 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a 20  ount++;.#endif. 
1b620 20 20 20 69 66 28 20 6f 63 3e 3d 4f 50 5f 53 65     if( oc>=OP_Se
1b630 65 6b 47 65 20 29 7b 20 20 61 73 73 65 72 74 28  ekGe ){  assert(
1b640 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 65 20 7c   oc==OP_SeekGe |
1b650 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 74 20  | oc==OP_SeekGt 
1b660 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 65 73  );.      if( res
1b670 3c 30 20 7c 7c 20 28 72 65 73 3d 3d 30 20 26 26  <0 || (res==0 &&
1b680 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 74 29 20   oc==OP_SeekGt) 
1b690 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  ){.        rc = 
1b6a0 73 71 6c 69 74 65 33 42 74 72 65 65 4e 65 78 74  sqlite3BtreeNext
1b6b0 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72  (pC->pCursor, &r
1b6c0 65 73 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28  es);.        if(
1b6d0 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
1b6e0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
1b6f0 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20  to_error;.      
1b700 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c    pC->rowidIsVal
1b710 69 64 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 65  id = 0;.      }e
1b720 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 72 65 73  lse{.        res
1b730 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20   = 0;.      }.  
1b740 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 61    }else{.      a
1b750 73 73 65 72 74 28 20 6f 63 3d 3d 4f 50 5f 53 65  ssert( oc==OP_Se
1b760 65 6b 4c 74 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53  ekLt || oc==OP_S
1b770 65 65 6b 4c 65 20 29 3b 0a 20 20 20 20 20 20 69  eekLe );.      i
1b780 66 28 20 72 65 73 3e 30 20 7c 7c 20 28 72 65 73  f( res>0 || (res
1b790 3d 3d 30 20 26 26 20 6f 63 3d 3d 4f 50 5f 53 65  ==0 && oc==OP_Se
1b7a0 65 6b 4c 74 29 20 29 7b 0a 20 20 20 20 20 20 20  ekLt) ){.       
1b7b0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
1b7c0 65 65 50 72 65 76 69 6f 75 73 28 70 43 2d 3e 70  eePrevious(pC->p
1b7d0 43 75 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20  Cursor, &res);. 
1b7e0 20 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53         if( rc!=S
1b7f0 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20  QLITE_OK ) goto 
1b800 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
1b810 6f 72 3b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e  or;.        pC->
1b820 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30  rowidIsValid = 0
1b830 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
1b840 20 20 20 20 20 20 20 2f 2a 20 72 65 73 20 6d 69         /* res mi
1b850 67 68 74 20 62 65 20 6e 65 67 61 74 69 76 65 20  ght be negative 
1b860 62 65 63 61 75 73 65 20 74 68 65 20 74 61 62 6c  because the tabl
1b870 65 20 69 73 20 65 6d 70 74 79 2e 20 20 43 68 65  e is empty.  Che
1b880 63 6b 20 74 6f 0a 20 20 20 20 20 20 20 20 2a 2a  ck to.        **
1b890 20 73 65 65 20 69 66 20 74 68 69 73 20 69 73 20   see if this is 
1b8a0 74 68 65 20 63 61 73 65 2e 0a 20 20 20 20 20 20  the case..      
1b8b0 20 20 2a 2f 0a 20 20 20 20 20 20 20 20 72 65 73    */.        res
1b8c0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 45   = sqlite3BtreeE
1b8d0 6f 66 28 70 43 2d 3e 70 43 75 72 73 6f 72 29 3b  of(pC->pCursor);
1b8e0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
1b8f0 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
1b900 70 32 3e 30 20 29 3b 0a 20 20 20 20 69 66 28 20  p2>0 );.    if( 
1b910 72 65 73 20 29 7b 0a 20 20 20 20 20 20 70 63 20  res ){.      pc 
1b920 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
1b930 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20     }.  }else{.  
1b940 20 20 2f 2a 20 54 68 69 73 20 68 61 70 70 65 6e    /* This happen
1b950 73 20 77 68 65 6e 20 61 74 74 65 6d 70 74 69 6e  s when attemptin
1b960 67 20 74 6f 20 6f 70 65 6e 20 74 68 65 20 73 71  g to open the sq
1b970 6c 69 74 65 33 5f 6d 61 73 74 65 72 20 74 61 62  lite3_master tab
1b980 6c 65 0a 20 20 20 20 2a 2a 20 66 6f 72 20 72 65  le.    ** for re
1b990 61 64 20 61 63 63 65 73 73 20 72 65 74 75 72 6e  ad access return
1b9a0 73 20 53 51 4c 49 54 45 5f 45 4d 50 54 59 2e 20  s SQLITE_EMPTY. 
1b9b0 49 6e 20 74 68 69 73 20 63 61 73 65 20 61 6c 77  In this case alw
1b9c0 61 79 73 0a 20 20 20 20 2a 2a 20 74 61 6b 65 20  ays.    ** take 
1b9d0 74 68 65 20 6a 75 6d 70 20 28 73 69 6e 63 65 20  the jump (since 
1b9e0 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63  there are no rec
1b9f0 6f 72 64 73 20 69 6e 20 74 68 65 20 74 61 62 6c  ords in the tabl
1ba00 65 29 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 70  e)..    */.    p
1ba10 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
1ba20 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
1ba30 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b  ./* Opcode: Seek
1ba40 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
1ba50 2a 2a 20 50 31 20 69 73 20 61 6e 20 6f 70 65 6e  ** P1 is an open
1ba60 20 74 61 62 6c 65 20 63 75 72 73 6f 72 20 61 6e   table cursor an
1ba70 64 20 50 32 20 69 73 20 61 20 72 6f 77 69 64 20  d P2 is a rowid 
1ba80 69 6e 74 65 67 65 72 2e 20 20 41 72 72 61 6e 67  integer.  Arrang
1ba90 65 0a 2a 2a 20 66 6f 72 20 50 31 20 74 6f 20 6d  e.** for P1 to m
1baa0 6f 76 65 20 73 6f 20 74 68 61 74 20 69 74 20 70  ove so that it p
1bab0 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 72 6f 77  oints to the row
1bac0 69 64 20 67 69 76 65 6e 20 62 79 20 50 32 2e 0a  id given by P2..
1bad0 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20 61 63  **.** This is ac
1bae0 74 75 61 6c 6c 79 20 61 20 64 65 66 65 72 72 65  tually a deferre
1baf0 64 20 73 65 65 6b 2e 20 20 4e 6f 74 68 69 6e 67  d seek.  Nothing
1bb00 20 61 63 74 75 61 6c 6c 79 20 68 61 70 70 65 6e   actually happen
1bb10 73 20 75 6e 74 69 6c 0a 2a 2a 20 74 68 65 20 63  s until.** the c
1bb20 75 72 73 6f 72 20 69 73 20 75 73 65 64 20 74 6f  ursor is used to
1bb30 20 72 65 61 64 20 61 20 72 65 63 6f 72 64 2e 20   read a record. 
1bb40 20 54 68 61 74 20 77 61 79 2c 20 69 66 20 6e 6f   That way, if no
1bb50 20 72 65 61 64 73 0a 2a 2a 20 6f 63 63 75 72 2c   reads.** occur,
1bb60 20 6e 6f 20 75 6e 6e 65 63 65 73 73 61 72 79 20   no unnecessary 
1bb70 49 2f 4f 20 68 61 70 70 65 6e 73 2e 0a 2a 2f 0a  I/O happens..*/.
1bb80 63 61 73 65 20 4f 50 5f 53 65 65 6b 3a 20 7b 20  case OP_Seek: { 
1bb90 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20 56     /* in2 */.  V
1bba0 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a  dbeCursor *pC;..
1bbb0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1bbc0 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
1bbd0 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
1bbe0 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
1bbf0 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
1bc00 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 69 66 28  ( pC!=0 );.  if(
1bc10 20 41 4c 57 41 59 53 28 70 43 2d 3e 70 43 75 72   ALWAYS(pC->pCur
1bc20 73 6f 72 21 3d 30 29 20 29 7b 0a 20 20 20 20 61  sor!=0) ){.    a
1bc30 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62  ssert( pC->isTab
1bc40 6c 65 20 29 3b 0a 20 20 20 20 70 43 2d 3e 6e 75  le );.    pC->nu
1bc50 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20 70  llRow = 0;.    p
1bc60 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In2 = &aMem[pOp-
1bc70 3e 70 32 5d 3b 0a 20 20 20 20 70 43 2d 3e 6d 6f  >p2];.    pC->mo
1bc80 76 65 74 6f 54 61 72 67 65 74 20 3d 20 73 71 6c  vetoTarget = sql
1bc90 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65  ite3VdbeIntValue
1bca0 28 70 49 6e 32 29 3b 0a 20 20 20 20 70 43 2d 3e  (pIn2);.    pC->
1bcb0 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30  rowidIsValid = 0
1bcc0 3b 0a 20 20 20 20 70 43 2d 3e 64 65 66 65 72 72  ;.    pC->deferr
1bcd0 65 64 4d 6f 76 65 74 6f 20 3d 20 31 3b 0a 20 20  edMoveto = 1;.  
1bce0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 20 20 0a  }.  break;.}.  .
1bcf0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 6f 75 6e  ./* Opcode: Foun
1bd00 64 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a  d P1 P2 P3 P4 *.
1bd10 2a 2a 0a 2a 2a 20 49 66 20 50 34 3d 3d 30 20 74  **.** If P4==0 t
1bd20 68 65 6e 20 72 65 67 69 73 74 65 72 20 50 33 20  hen register P3 
1bd30 68 6f 6c 64 73 20 61 20 62 6c 6f 62 20 63 6f 6e  holds a blob con
1bd40 73 74 72 75 63 74 65 64 20 62 79 20 4d 61 6b 65  structed by Make
1bd50 52 65 63 6f 72 64 2e 20 20 49 66 0a 2a 2a 20 50  Record.  If.** P
1bd60 34 3e 30 20 74 68 65 6e 20 72 65 67 69 73 74 65  4>0 then registe
1bd70 72 20 50 33 20 69 73 20 74 68 65 20 66 69 72 73  r P3 is the firs
1bd80 74 20 6f 66 20 50 34 20 72 65 67 69 73 74 65 72  t of P4 register
1bd90 73 20 74 68 61 74 20 66 6f 72 6d 20 61 6e 20 75  s that form an u
1bda0 6e 70 61 63 6b 65 64 0a 2a 2a 20 72 65 63 6f 72  npacked.** recor
1bdb0 64 2e 0a 2a 2a 0a 2a 2a 20 43 75 72 73 6f 72 20  d..**.** Cursor 
1bdc0 50 31 20 69 73 20 6f 6e 20 61 6e 20 69 6e 64 65  P1 is on an inde
1bdd0 78 20 62 74 72 65 65 2e 20 20 49 66 20 74 68 65  x btree.  If the
1bde0 20 72 65 63 6f 72 64 20 69 64 65 6e 74 69 66 69   record identifi
1bdf0 65 64 20 62 79 20 50 33 20 61 6e 64 20 50 34 0a  ed by P3 and P4.
1be00 2a 2a 20 69 73 20 61 20 70 72 65 66 69 78 20 6f  ** is a prefix o
1be10 66 20 61 6e 79 20 65 6e 74 72 79 20 69 6e 20 50  f any entry in P
1be20 31 20 74 68 65 6e 20 61 20 6a 75 6d 70 20 69 73  1 then a jump is
1be30 20 6d 61 64 65 20 74 6f 20 50 32 20 61 6e 64 0a   made to P2 and.
1be40 2a 2a 20 50 31 20 69 73 20 6c 65 66 74 20 70 6f  ** P1 is left po
1be50 69 6e 74 69 6e 67 20 61 74 20 74 68 65 20 6d 61  inting at the ma
1be60 74 63 68 69 6e 67 20 65 6e 74 72 79 2e 0a 2a 2f  tching entry..*/
1be70 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 46  ./* Opcode: NotF
1be80 6f 75 6e 64 20 50 31 20 50 32 20 50 33 20 50 34  ound P1 P2 P3 P4
1be90 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 3d 3d   *.**.** If P4==
1bea0 30 20 74 68 65 6e 20 72 65 67 69 73 74 65 72 20  0 then register 
1beb0 50 33 20 68 6f 6c 64 73 20 61 20 62 6c 6f 62 20  P3 holds a blob 
1bec0 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79 20 4d  constructed by M
1bed0 61 6b 65 52 65 63 6f 72 64 2e 20 20 49 66 0a 2a  akeRecord.  If.*
1bee0 2a 20 50 34 3e 30 20 74 68 65 6e 20 72 65 67 69  * P4>0 then regi
1bef0 73 74 65 72 20 50 33 20 69 73 20 74 68 65 20 66  ster P3 is the f
1bf00 69 72 73 74 20 6f 66 20 50 34 20 72 65 67 69 73  irst of P4 regis
1bf10 74 65 72 73 20 74 68 61 74 20 66 6f 72 6d 20 61  ters that form a
1bf20 6e 20 75 6e 70 61 63 6b 65 64 0a 2a 2a 20 72 65  n unpacked.** re
1bf30 63 6f 72 64 2e 0a 2a 2a 20 0a 2a 2a 20 43 75 72  cord..** .** Cur
1bf40 73 6f 72 20 50 31 20 69 73 20 6f 6e 20 61 6e 20  sor P1 is on an 
1bf50 69 6e 64 65 78 20 62 74 72 65 65 2e 20 20 49 66  index btree.  If
1bf60 20 74 68 65 20 72 65 63 6f 72 64 20 69 64 65 6e   the record iden
1bf70 74 69 66 69 65 64 20 62 79 20 50 33 20 61 6e 64  tified by P3 and
1bf80 20 50 34 0a 2a 2a 20 69 73 20 6e 6f 74 20 74 68   P4.** is not th
1bf90 65 20 70 72 65 66 69 78 20 6f 66 20 61 6e 79 20  e prefix of any 
1bfa0 65 6e 74 72 79 20 69 6e 20 50 31 20 74 68 65 6e  entry in P1 then
1bfb0 20 61 20 6a 75 6d 70 20 69 73 20 6d 61 64 65 20   a jump is made 
1bfc0 74 6f 20 50 32 2e 20 20 49 66 20 50 31 20 0a 2a  to P2.  If P1 .*
1bfd0 2a 20 64 6f 65 73 20 63 6f 6e 74 61 69 6e 20 61  * does contain a
1bfe0 6e 20 65 6e 74 72 79 20 77 68 6f 73 65 20 70 72  n entry whose pr
1bff0 65 66 69 78 20 6d 61 74 63 68 65 73 20 74 68 65  efix matches the
1c000 20 50 33 2f 50 34 20 72 65 63 6f 72 64 20 74 68   P3/P4 record th
1c010 65 6e 20 63 6f 6e 74 72 6f 6c 0a 2a 2a 20 66 61  en control.** fa
1c020 6c 6c 73 20 74 68 72 6f 75 67 68 20 74 6f 20 74  lls through to t
1c030 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74  he next instruct
1c040 69 6f 6e 20 61 6e 64 20 50 31 20 69 73 20 6c 65  ion and P1 is le
1c050 66 74 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74  ft pointing at t
1c060 68 65 0a 2a 2a 20 6d 61 74 63 68 69 6e 67 20 65  he.** matching e
1c070 6e 74 72 79 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  ntry..**.** See 
1c080 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74  also: Found, Not
1c090 45 78 69 73 74 73 2c 20 49 73 55 6e 69 71 75 65  Exists, IsUnique
1c0a0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 46  .*/.case OP_NotF
1c0b0 6f 75 6e 64 3a 20 20 20 20 20 20 20 2f 2a 20 6a  ound:       /* j
1c0c0 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65  ump, in3 */.case
1c0d0 20 4f 50 5f 46 6f 75 6e 64 3a 20 7b 20 20 20 20   OP_Found: {    
1c0e0 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33      /* jump, in3
1c0f0 20 2a 2f 0a 20 20 69 6e 74 20 61 6c 72 65 61 64   */.  int alread
1c100 79 45 78 69 73 74 73 3b 0a 20 20 56 64 62 65 43  yExists;.  VdbeC
1c110 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e 74  ursor *pC;.  int
1c120 20 72 65 73 3b 0a 20 20 55 6e 70 61 63 6b 65 64   res;.  Unpacked
1c130 52 65 63 6f 72 64 20 2a 70 49 64 78 4b 65 79 3b  Record *pIdxKey;
1c140 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72  .  UnpackedRecor
1c150 64 20 72 3b 0a 20 20 63 68 61 72 20 61 54 65 6d  d r;.  char aTem
1c160 70 52 65 63 5b 52 4f 55 4e 44 38 28 73 69 7a 65  pRec[ROUND8(size
1c170 6f 66 28 55 6e 70 61 63 6b 65 64 52 65 63 6f 72  of(UnpackedRecor
1c180 64 29 29 20 2b 20 73 69 7a 65 6f 66 28 4d 65 6d  d)) + sizeof(Mem
1c190 29 2a 33 20 2b 20 37 5d 3b 0a 0a 23 69 66 64 65  )*3 + 7];..#ifde
1c1a0 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20  f SQLITE_TEST.  
1c1b0 73 71 6c 69 74 65 33 5f 66 6f 75 6e 64 5f 63 6f  sqlite3_found_co
1c1c0 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a 0a 20  unt++;.#endif.. 
1c1d0 20 61 6c 72 65 61 64 79 45 78 69 73 74 73 20 3d   alreadyExists =
1c1e0 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   0;.  assert( pO
1c1f0 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
1c200 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
1c210 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
1c220 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33  >p4type==P4_INT3
1c230 32 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  2 );.  pC = p->a
1c240 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
1c250 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
1c260 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d  ;.  pIn3 = &aMem
1c270 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28  [pOp->p3];.  if(
1c280 20 41 4c 57 41 59 53 28 70 43 2d 3e 70 43 75 72   ALWAYS(pC->pCur
1c290 73 6f 72 21 3d 30 29 20 29 7b 0a 0a 20 20 20 20  sor!=0) ){..    
1c2a0 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61  assert( pC->isTa
1c2b0 62 6c 65 3d 3d 30 20 29 3b 0a 20 20 20 20 69 66  ble==0 );.    if
1c2c0 28 20 70 4f 70 2d 3e 70 34 2e 69 3e 30 20 29 7b  ( pOp->p4.i>0 ){
1c2d0 0a 20 20 20 20 20 20 72 2e 70 4b 65 79 49 6e 66  .      r.pKeyInf
1c2e0 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f  o = pC->pKeyInfo
1c2f0 3b 0a 20 20 20 20 20 20 72 2e 6e 46 69 65 6c 64  ;.      r.nField
1c300 20 3d 20 28 75 31 36 29 70 4f 70 2d 3e 70 34 2e   = (u16)pOp->p4.
1c310 69 3b 0a 20 20 20 20 20 20 72 2e 61 4d 65 6d 20  i;.      r.aMem 
1c320 3d 20 70 49 6e 33 3b 0a 23 69 66 64 65 66 20 53  = pIn3;.#ifdef S
1c330 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20  QLITE_DEBUG.    
1c340 20 20 7b 20 69 6e 74 20 69 3b 20 66 6f 72 28 69    { int i; for(i
1c350 3d 30 3b 20 69 3c 72 2e 6e 46 69 65 6c 64 3b 20  =0; i<r.nField; 
1c360 69 2b 2b 29 20 61 73 73 65 72 74 28 20 6d 65 6d  i++) assert( mem
1c370 49 73 56 61 6c 69 64 28 26 72 2e 61 4d 65 6d 5b  IsValid(&r.aMem[
1c380 69 5d 29 20 29 3b 20 7d 0a 23 65 6e 64 69 66 0a  i]) ); }.#endif.
1c390 20 20 20 20 20 20 72 2e 66 6c 61 67 73 20 3d 20        r.flags = 
1c3a0 55 4e 50 41 43 4b 45 44 5f 50 52 45 46 49 58 5f  UNPACKED_PREFIX_
1c3b0 4d 41 54 43 48 3b 0a 20 20 20 20 20 20 70 49 64  MATCH;.      pId
1c3c0 78 4b 65 79 20 3d 20 26 72 3b 0a 20 20 20 20 7d  xKey = &r;.    }
1c3d0 65 6c 73 65 7b 0a 20 20 20 20 20 20 61 73 73 65  else{.      asse
1c3e0 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20  rt( pIn3->flags 
1c3f0 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20  & MEM_Blob );.  
1c400 20 20 20 20 61 73 73 65 72 74 28 20 28 70 49 6e      assert( (pIn
1c410 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a  3->flags & MEM_Z
1c420 65 72 6f 29 3d 3d 30 20 29 3b 20 20 2f 2a 20 7a  ero)==0 );  /* z
1c430 65 72 6f 62 6c 6f 62 73 20 61 6c 72 65 61 64 79  eroblobs already
1c440 20 65 78 70 61 6e 64 65 64 20 2a 2f 0a 20 20 20   expanded */.   
1c450 20 20 20 70 49 64 78 4b 65 79 20 3d 20 73 71 6c     pIdxKey = sql
1c460 69 74 65 33 56 64 62 65 52 65 63 6f 72 64 55 6e  ite3VdbeRecordUn
1c470 70 61 63 6b 28 70 43 2d 3e 70 4b 65 79 49 6e 66  pack(pC->pKeyInf
1c480 6f 2c 20 70 49 6e 33 2d 3e 6e 2c 20 70 49 6e 33  o, pIn3->n, pIn3
1c490 2d 3e 7a 2c 0a 20 20 20 20 20 20 20 20 20 20 20  ->z,.           
1c4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c4b0 20 20 20 20 20 20 20 20 20 20 20 20 20 61 54 65               aTe
1c4c0 6d 70 52 65 63 2c 20 73 69 7a 65 6f 66 28 61 54  mpRec, sizeof(aT
1c4d0 65 6d 70 52 65 63 29 29 3b 0a 20 20 20 20 20 20  empRec));.      
1c4e0 69 66 28 20 70 49 64 78 4b 65 79 3d 3d 30 20 29  if( pIdxKey==0 )
1c4f0 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6e  {.        goto n
1c500 6f 5f 6d 65 6d 3b 0a 20 20 20 20 20 20 7d 0a 20  o_mem;.      }. 
1c510 20 20 20 20 20 70 49 64 78 4b 65 79 2d 3e 66 6c       pIdxKey->fl
1c520 61 67 73 20 7c 3d 20 55 4e 50 41 43 4b 45 44 5f  ags |= UNPACKED_
1c530 50 52 45 46 49 58 5f 4d 41 54 43 48 3b 0a 20 20  PREFIX_MATCH;.  
1c540 20 20 7d 0a 20 20 20 20 72 63 20 3d 20 73 71 6c    }.    rc = sql
1c550 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55  ite3BtreeMovetoU
1c560 6e 70 61 63 6b 65 64 28 70 43 2d 3e 70 43 75 72  npacked(pC->pCur
1c570 73 6f 72 2c 20 70 49 64 78 4b 65 79 2c 20 30 2c  sor, pIdxKey, 0,
1c580 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 69   0, &res);.    i
1c590 66 28 20 70 4f 70 2d 3e 70 34 2e 69 3d 3d 30 20  f( pOp->p4.i==0 
1c5a0 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
1c5b0 56 64 62 65 44 65 6c 65 74 65 55 6e 70 61 63 6b  VdbeDeleteUnpack
1c5c0 65 64 52 65 63 6f 72 64 28 70 49 64 78 4b 65 79  edRecord(pIdxKey
1c5d0 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  );.    }.    if(
1c5e0 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
1c5f0 7b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  {.      break;. 
1c600 20 20 20 7d 0a 20 20 20 20 61 6c 72 65 61 64 79     }.    already
1c610 45 78 69 73 74 73 20 3d 20 28 72 65 73 3d 3d 30  Exists = (res==0
1c620 29 3b 0a 20 20 20 20 70 43 2d 3e 64 65 66 65 72  );.    pC->defer
1c630 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20  redMoveto = 0;. 
1c640 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74     pC->cacheStat
1c650 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45  us = CACHE_STALE
1c660 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d  ;.  }.  if( pOp-
1c670 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 46 6f 75 6e  >opcode==OP_Foun
1c680 64 20 29 7b 0a 20 20 20 20 69 66 28 20 61 6c 72  d ){.    if( alr
1c690 65 61 64 79 45 78 69 73 74 73 20 29 20 70 63 20  eadyExists ) pc 
1c6a0 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
1c6b0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69 66 28 20   }else{.    if( 
1c6c0 21 61 6c 72 65 61 64 79 45 78 69 73 74 73 20 29  !alreadyExists )
1c6d0 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
1c6e0 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  1;.  }.  break;.
1c6f0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 73  }../* Opcode: Is
1c700 55 6e 69 71 75 65 20 50 31 20 50 32 20 50 33 20  Unique P1 P2 P3 
1c710 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 43 75 72 73 6f  P4 *.**.** Curso
1c720 72 20 50 31 20 69 73 20 6f 70 65 6e 20 6f 6e 20  r P1 is open on 
1c730 61 6e 20 69 6e 64 65 78 20 62 2d 74 72 65 65 20  an index b-tree 
1c740 2d 20 74 68 61 74 20 69 73 20 74 6f 20 73 61 79  - that is to say
1c750 2c 20 61 20 62 74 72 65 65 20 77 68 69 63 68 0a  , a btree which.
1c760 2a 2a 20 6e 6f 20 64 61 74 61 20 61 6e 64 20 77  ** no data and w
1c770 68 65 72 65 20 74 68 65 20 6b 65 79 20 61 72 65  here the key are
1c780 20 72 65 63 6f 72 64 73 20 67 65 6e 65 72 61 74   records generat
1c790 65 64 20 62 79 20 4f 50 5f 4d 61 6b 65 52 65 63  ed by OP_MakeRec
1c7a0 6f 72 64 20 77 69 74 68 0a 2a 2a 20 74 68 65 20  ord with.** the 
1c7b0 6c 69 73 74 20 66 69 65 6c 64 20 62 65 69 6e 67  list field being
1c7c0 20 74 68 65 20 69 6e 74 65 67 65 72 20 52 4f 57   the integer ROW
1c7d0 49 44 20 6f 66 20 74 68 65 20 65 6e 74 72 79 20  ID of the entry 
1c7e0 74 68 61 74 20 74 68 65 20 69 6e 64 65 78 0a 2a  that the index.*
1c7f0 2a 20 65 6e 74 72 79 20 72 65 66 65 72 73 20 74  * entry refers t
1c800 6f 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 33 20  o..**.** The P3 
1c810 72 65 67 69 73 74 65 72 20 63 6f 6e 74 61 69 6e  register contain
1c820 73 20 61 6e 20 69 6e 74 65 67 65 72 20 72 65 63  s an integer rec
1c830 6f 72 64 20 6e 75 6d 62 65 72 2e 20 43 61 6c 6c  ord number. Call
1c840 20 74 68 69 73 20 72 65 63 6f 72 64 20 0a 2a 2a   this record .**
1c850 20 6e 75 6d 62 65 72 20 52 2e 20 52 65 67 69 73   number R. Regis
1c860 74 65 72 20 50 34 20 69 73 20 74 68 65 20 66 69  ter P4 is the fi
1c870 72 73 74 20 69 6e 20 61 20 73 65 74 20 6f 66 20  rst in a set of 
1c880 4e 20 63 6f 6e 74 69 67 75 6f 75 73 20 72 65 67  N contiguous reg
1c890 69 73 74 65 72 73 0a 2a 2a 20 74 68 61 74 20 6d  isters.** that m
1c8a0 61 6b 65 20 75 70 20 61 6e 20 75 6e 70 61 63 6b  ake up an unpack
1c8b0 65 64 20 69 6e 64 65 78 20 6b 65 79 20 74 68 61  ed index key tha
1c8c0 74 20 63 61 6e 20 62 65 20 75 73 65 64 20 77 69  t can be used wi
1c8d0 74 68 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a  th cursor P1..**
1c8e0 20 54 68 65 20 76 61 6c 75 65 20 6f 66 20 4e 20   The value of N 
1c8f0 63 61 6e 20 62 65 20 69 6e 66 65 72 72 65 64 20  can be inferred 
1c900 66 72 6f 6d 20 74 68 65 20 63 75 72 73 6f 72 2e  from the cursor.
1c910 20 4e 20 69 6e 63 6c 75 64 65 73 20 74 68 65 20   N includes the 
1c920 72 6f 77 69 64 0a 2a 2a 20 76 61 6c 75 65 20 61  rowid.** value a
1c930 70 70 65 6e 64 65 64 20 74 6f 20 74 68 65 20 65  ppended to the e
1c940 6e 64 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20  nd of the index 
1c950 72 65 63 6f 72 64 2e 20 54 68 69 73 20 72 6f 77  record. This row
1c960 69 64 20 76 61 6c 75 65 20 6d 61 79 0a 2a 2a 20  id value may.** 
1c970 6f 72 20 6d 61 79 20 6e 6f 74 20 62 65 20 74 68  or may not be th
1c980 65 20 73 61 6d 65 20 61 73 20 52 2e 0a 2a 2a 0a  e same as R..**.
1c990 2a 2a 20 49 66 20 61 6e 79 20 6f 66 20 74 68 65  ** If any of the
1c9a0 20 4e 20 72 65 67 69 73 74 65 72 73 20 62 65 67   N registers beg
1c9b0 69 6e 6e 69 6e 67 20 77 69 74 68 20 72 65 67 69  inning with regi
1c9c0 73 74 65 72 20 50 34 20 63 6f 6e 74 61 69 6e 73  ster P4 contains
1c9d0 20 61 20 4e 55 4c 4c 0a 2a 2a 20 76 61 6c 75 65   a NULL.** value
1c9e0 2c 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65  , jump immediate
1c9f0 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  ly to P2..**.** 
1ca00 4f 74 68 65 72 77 69 73 65 2c 20 74 68 69 73 20  Otherwise, this 
1ca10 69 6e 73 74 72 75 63 74 69 6f 6e 20 63 68 65 63  instruction chec
1ca20 6b 73 20 69 66 20 63 75 72 73 6f 72 20 50 31 20  ks if cursor P1 
1ca30 63 6f 6e 74 61 69 6e 73 20 61 6e 20 65 6e 74 72  contains an entr
1ca40 79 0a 2a 2a 20 77 68 65 72 65 20 74 68 65 20 66  y.** where the f
1ca50 69 72 73 74 20 28 4e 2d 31 29 20 66 69 65 6c 64  irst (N-1) field
1ca60 73 20 6d 61 74 63 68 20 62 75 74 20 74 68 65 20  s match but the 
1ca70 72 6f 77 69 64 20 76 61 6c 75 65 20 61 74 20 74  rowid value at t
1ca80 68 65 20 65 6e 64 0a 2a 2a 20 6f 66 20 74 68 65  he end.** of the
1ca90 20 69 6e 64 65 78 20 65 6e 74 72 79 20 69 73 20   index entry is 
1caa0 6e 6f 74 20 52 2e 20 49 66 20 74 68 65 72 65 20  not R. If there 
1cab0 69 73 20 6e 6f 20 73 75 63 68 20 65 6e 74 72 79  is no such entry
1cac0 2c 20 63 6f 6e 74 72 6f 6c 20 6a 75 6d 70 73 0a  , control jumps.
1cad0 2a 2a 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f  ** to instructio
1cae0 6e 20 50 32 2e 20 4f 74 68 65 72 77 69 73 65 2c  n P2. Otherwise,
1caf0 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68   the rowid of th
1cb00 65 20 63 6f 6e 66 6c 69 63 74 69 6e 67 20 69 6e  e conflicting in
1cb10 64 65 78 0a 2a 2a 20 65 6e 74 72 79 20 69 73 20  dex.** entry is 
1cb20 63 6f 70 69 65 64 20 74 6f 20 72 65 67 69 73 74  copied to regist
1cb30 65 72 20 50 33 20 61 6e 64 20 63 6f 6e 74 72 6f  er P3 and contro
1cb40 6c 20 66 61 6c 6c 73 20 74 68 72 6f 75 67 68 20  l falls through 
1cb50 74 6f 20 74 68 65 20 6e 65 78 74 0a 2a 2a 20 69  to the next.** i
1cb60 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a  nstruction..**.*
1cb70 2a 20 53 65 65 20 61 6c 73 6f 3a 20 4e 6f 74 46  * See also: NotF
1cb80 6f 75 6e 64 2c 20 4e 6f 74 45 78 69 73 74 73 2c  ound, NotExists,
1cb90 20 46 6f 75 6e 64 0a 2a 2f 0a 63 61 73 65 20 4f   Found.*/.case O
1cba0 50 5f 49 73 55 6e 69 71 75 65 3a 20 7b 20 20 20  P_IsUnique: {   
1cbb0 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
1cbc0 33 20 2a 2f 0a 20 20 75 31 36 20 69 69 3b 0a 20  3 */.  u16 ii;. 
1cbd0 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 78   VdbeCursor *pCx
1cbe0 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43  ;.  BtCursor *pC
1cbf0 72 73 72 3b 0a 20 20 75 31 36 20 6e 46 69 65 6c  rsr;.  u16 nFiel
1cc00 64 3b 0a 20 20 4d 65 6d 20 2a 61 4d 78 3b 0a 20  d;.  Mem *aMx;. 
1cc10 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20   UnpackedRecord 
1cc20 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r;              
1cc30 20 20 20 20 2f 2a 20 42 2d 54 72 65 65 20 69 6e      /* B-Tree in
1cc40 64 65 78 20 73 65 61 72 63 68 20 6b 65 79 20 2a  dex search key *
1cc50 2f 0a 20 20 69 36 34 20 52 3b 20 20 20 20 20 20  /.  i64 R;      
1cc60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cc70 20 20 20 20 20 20 20 2f 2a 20 52 6f 77 69 64 20         /* Rowid 
1cc80 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74  stored in regist
1cc90 65 72 20 50 33 20 2a 2f 0a 0a 20 20 70 49 6e 33  er P3 */..  pIn3
1cca0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
1ccb0 5d 3b 0a 20 20 61 4d 78 20 3d 20 26 61 4d 65 6d  ];.  aMx = &aMem
1ccc0 5b 70 4f 70 2d 3e 70 34 2e 69 5d 3b 0a 20 20 2f  [pOp->p4.i];.  /
1ccd0 2a 20 41 73 73 65 72 74 20 74 68 61 74 20 74 68  * Assert that th
1cce0 65 20 76 61 6c 75 65 73 20 6f 66 20 70 61 72 61  e values of para
1ccf0 6d 65 74 65 72 73 20 50 31 20 61 6e 64 20 50 34  meters P1 and P4
1cd00 20 61 72 65 20 69 6e 20 72 61 6e 67 65 2e 20 2a   are in range. *
1cd10 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  /.  assert( pOp-
1cd20 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33  >p4type==P4_INT3
1cd30 32 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  2 );.  assert( p
1cd40 4f 70 2d 3e 70 34 2e 69 3e 30 20 26 26 20 70 4f  Op->p4.i>0 && pO
1cd50 70 2d 3e 70 34 2e 69 3c 3d 70 2d 3e 6e 4d 65 6d  p->p4.i<=p->nMem
1cd60 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
1cd70 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
1cd80 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
1cd90 3b 0a 0a 20 20 2f 2a 20 46 69 6e 64 20 74 68 65  ;..  /* Find the
1cda0 20 69 6e 64 65 78 20 63 75 72 73 6f 72 2e 20 2a   index cursor. *
1cdb0 2f 0a 20 20 70 43 78 20 3d 20 70 2d 3e 61 70 43  /.  pCx = p->apC
1cdc0 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
1cdd0 73 73 65 72 74 28 20 70 43 78 2d 3e 64 65 66 65  ssert( pCx->defe
1cde0 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b  rredMoveto==0 );
1cdf0 0a 20 20 70 43 78 2d 3e 73 65 65 6b 52 65 73 75  .  pCx->seekResu
1ce00 6c 74 20 3d 20 30 3b 0a 20 20 70 43 78 2d 3e 63  lt = 0;.  pCx->c
1ce10 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
1ce20 48 45 5f 53 54 41 4c 45 3b 0a 20 20 70 43 72 73  HE_STALE;.  pCrs
1ce30 72 20 3d 20 70 43 78 2d 3e 70 43 75 72 73 6f 72  r = pCx->pCursor
1ce40 3b 0a 0a 20 20 2f 2a 20 49 66 20 61 6e 79 20 6f  ;..  /* If any o
1ce50 66 20 74 68 65 20 76 61 6c 75 65 73 20 61 72 65  f the values are
1ce60 20 4e 55 4c 4c 2c 20 74 61 6b 65 20 74 68 65 20   NULL, take the 
1ce70 6a 75 6d 70 2e 20 2a 2f 0a 20 20 6e 46 69 65 6c  jump. */.  nFiel
1ce80 64 20 3d 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66  d = pCx->pKeyInf
1ce90 6f 2d 3e 6e 46 69 65 6c 64 3b 0a 20 20 66 6f 72  o->nField;.  for
1cea0 28 69 69 3d 30 3b 20 69 69 3c 6e 46 69 65 6c 64  (ii=0; ii<nField
1ceb0 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20 69 66 28  ; ii++){.    if(
1cec0 20 61 4d 78 5b 69 69 5d 2e 66 6c 61 67 73 20 26   aMx[ii].flags &
1ced0 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20   MEM_Null ){.   
1cee0 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
1cef0 2d 20 31 3b 0a 20 20 20 20 20 20 70 43 72 73 72  - 1;.      pCrsr
1cf00 20 3d 20 30 3b 0a 20 20 20 20 20 20 62 72 65 61   = 0;.      brea
1cf10 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 61  k;.    }.  }.  a
1cf20 73 73 65 72 74 28 20 28 61 4d 78 5b 6e 46 69 65  ssert( (aMx[nFie
1cf30 6c 64 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  ld].flags & MEM_
1cf40 4e 75 6c 6c 29 3d 3d 30 20 29 3b 0a 0a 20 20 69  Null)==0 );..  i
1cf50 66 28 20 70 43 72 73 72 21 3d 30 20 29 7b 0a 20  f( pCrsr!=0 ){. 
1cf60 20 20 20 2f 2a 20 50 6f 70 75 6c 61 74 65 20 74     /* Populate t
1cf70 68 65 20 69 6e 64 65 78 20 73 65 61 72 63 68 20  he index search 
1cf80 6b 65 79 2e 20 2a 2f 0a 20 20 20 20 72 2e 70 4b  key. */.    r.pK
1cf90 65 79 49 6e 66 6f 20 3d 20 70 43 78 2d 3e 70 4b  eyInfo = pCx->pK
1cfa0 65 79 49 6e 66 6f 3b 0a 20 20 20 20 72 2e 6e 46  eyInfo;.    r.nF
1cfb0 69 65 6c 64 20 3d 20 6e 46 69 65 6c 64 20 2b 20  ield = nField + 
1cfc0 31 3b 0a 20 20 20 20 72 2e 66 6c 61 67 73 20 3d  1;.    r.flags =
1cfd0 20 55 4e 50 41 43 4b 45 44 5f 50 52 45 46 49 58   UNPACKED_PREFIX
1cfe0 5f 53 45 41 52 43 48 3b 0a 20 20 20 20 72 2e 61  _SEARCH;.    r.a
1cff0 4d 65 6d 20 3d 20 61 4d 78 3b 0a 23 69 66 64 65  Mem = aMx;.#ifde
1d000 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
1d010 20 20 20 7b 20 69 6e 74 20 69 3b 20 66 6f 72 28     { int i; for(
1d020 69 3d 30 3b 20 69 3c 72 2e 6e 46 69 65 6c 64 3b  i=0; i<r.nField;
1d030 20 69 2b 2b 29 20 61 73 73 65 72 74 28 20 6d 65   i++) assert( me
1d040 6d 49 73 56 61 6c 69 64 28 26 72 2e 61 4d 65 6d  mIsValid(&r.aMem
1d050 5b 69 5d 29 20 29 3b 20 7d 0a 23 65 6e 64 69 66  [i]) ); }.#endif
1d060 0a 0a 20 20 20 20 2f 2a 20 45 78 74 72 61 63 74  ..    /* Extract
1d070 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 52 20   the value of R 
1d080 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50 33  from register P3
1d090 2e 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33  . */.    sqlite3
1d0a0 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66  VdbeMemIntegerif
1d0b0 79 28 70 49 6e 33 29 3b 0a 20 20 20 20 52 20 3d  y(pIn3);.    R =
1d0c0 20 70 49 6e 33 2d 3e 75 2e 69 3b 0a 0a 20 20 20   pIn3->u.i;..   
1d0d0 20 2f 2a 20 53 65 61 72 63 68 20 74 68 65 20 42   /* Search the B
1d0e0 2d 54 72 65 65 20 69 6e 64 65 78 2e 20 49 66 20  -Tree index. If 
1d0f0 6e 6f 20 63 6f 6e 66 6c 69 63 74 69 6e 67 20 72  no conflicting r
1d100 65 63 6f 72 64 20 69 73 20 66 6f 75 6e 64 2c 20  ecord is found, 
1d110 6a 75 6d 70 0a 20 20 20 20 2a 2a 20 74 6f 20 50  jump.    ** to P
1d120 32 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 63 6f  2. Otherwise, co
1d130 70 79 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20  py the rowid of 
1d140 74 68 65 20 63 6f 6e 66 6c 69 63 74 69 6e 67 20  the conflicting 
1d150 72 65 63 6f 72 64 20 74 6f 0a 20 20 20 20 2a 2a  record to.    **
1d160 20 72 65 67 69 73 74 65 72 20 50 33 20 61 6e 64   register P3 and
1d170 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f   fall through to
1d180 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75   the next instru
1d190 63 74 69 6f 6e 2e 20 20 2a 2f 0a 20 20 20 20 72  ction.  */.    r
1d1a0 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
1d1b0 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70  MovetoUnpacked(p
1d1c0 43 72 73 72 2c 20 26 72 2c 20 30 2c 20 30 2c 20  Crsr, &r, 0, 0, 
1d1d0 26 70 43 78 2d 3e 73 65 65 6b 52 65 73 75 6c 74  &pCx->seekResult
1d1e0 29 3b 0a 20 20 20 20 69 66 28 20 28 72 2e 66 6c  );.    if( (r.fl
1d1f0 61 67 73 20 26 20 55 4e 50 41 43 4b 45 44 5f 50  ags & UNPACKED_P
1d200 52 45 46 49 58 5f 53 45 41 52 43 48 29 20 7c 7c  REFIX_SEARCH) ||
1d210 20 72 2e 72 6f 77 69 64 3d 3d 52 20 29 7b 0a 20   r.rowid==R ){. 
1d220 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70       pc = pOp->p
1d230 32 20 2d 20 31 3b 0a 20 20 20 20 7d 65 6c 73 65  2 - 1;.    }else
1d240 7b 0a 20 20 20 20 20 20 70 49 6e 33 2d 3e 75 2e  {.      pIn3->u.
1d250 69 20 3d 20 72 2e 72 6f 77 69 64 3b 0a 20 20 20  i = r.rowid;.   
1d260 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a   }.  }.  break;.
1d270 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f  }../* Opcode: No
1d280 74 45 78 69 73 74 73 20 50 31 20 50 32 20 50 33  tExists P1 P2 P3
1d290 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 55 73 65 20 74   * *.**.** Use t
1d2a0 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65  he content of re
1d2b0 67 69 73 74 65 72 20 50 33 20 61 73 20 61 20 69  gister P3 as a i
1d2c0 6e 74 65 67 65 72 20 6b 65 79 2e 20 20 49 66 20  nteger key.  If 
1d2d0 61 20 72 65 63 6f 72 64 20 0a 2a 2a 20 77 69 74  a record .** wit
1d2e0 68 20 74 68 61 74 20 6b 65 79 20 64 6f 65 73 20  h that key does 
1d2f0 6e 6f 74 20 65 78 69 73 74 20 69 6e 20 74 61 62  not exist in tab
1d300 6c 65 20 6f 66 20 50 31 2c 20 74 68 65 6e 20 6a  le of P1, then j
1d310 75 6d 70 20 74 6f 20 50 32 2e 20 0a 2a 2a 20 49  ump to P2. .** I
1d320 66 20 74 68 65 20 72 65 63 6f 72 64 20 64 6f 65  f the record doe
1d330 73 20 65 78 69 73 74 2c 20 74 68 65 6e 20 66 61  s exist, then fa
1d340 6c 6c 20 74 68 72 6f 75 67 68 2e 20 20 54 68 65  ll through.  The
1d350 20 63 75 72 73 6f 72 20 69 73 20 6c 65 66 74 20   cursor is left 
1d360 0a 2a 2a 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20  .** pointing to 
1d370 74 68 65 20 72 65 63 6f 72 64 20 69 66 20 69 74  the record if it
1d380 20 65 78 69 73 74 73 2e 0a 2a 2a 0a 2a 2a 20 54   exists..**.** T
1d390 68 65 20 64 69 66 66 65 72 65 6e 63 65 20 62 65  he difference be
1d3a0 74 77 65 65 6e 20 74 68 69 73 20 6f 70 65 72 61  tween this opera
1d3b0 74 69 6f 6e 20 61 6e 64 20 4e 6f 74 46 6f 75 6e  tion and NotFoun
1d3c0 64 20 69 73 20 74 68 61 74 20 74 68 69 73 0a 2a  d is that this.*
1d3d0 2a 20 6f 70 65 72 61 74 69 6f 6e 20 61 73 73 75  * operation assu
1d3e0 6d 65 73 20 74 68 65 20 6b 65 79 20 69 73 20 61  mes the key is a
1d3f0 6e 20 69 6e 74 65 67 65 72 20 61 6e 64 20 74 68  n integer and th
1d400 61 74 20 50 31 20 69 73 20 61 20 74 61 62 6c 65  at P1 is a table
1d410 20 77 68 65 72 65 61 73 0a 2a 2a 20 4e 6f 74 46   whereas.** NotF
1d420 6f 75 6e 64 20 61 73 73 75 6d 65 73 20 6b 65 79  ound assumes key
1d430 20 69 73 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74   is a blob const
1d440 72 75 63 74 65 64 20 66 72 6f 6d 20 4d 61 6b 65  ructed from Make
1d450 52 65 63 6f 72 64 20 61 6e 64 0a 2a 2a 20 50 31  Record and.** P1
1d460 20 69 73 20 61 6e 20 69 6e 64 65 78 2e 0a 2a 2a   is an index..**
1d470 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f  .** See also: Fo
1d480 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 49  und, NotFound, I
1d490 73 55 6e 69 71 75 65 0a 2a 2f 0a 63 61 73 65 20  sUnique.*/.case 
1d4a0 4f 50 5f 4e 6f 74 45 78 69 73 74 73 3a 20 7b 20  OP_NotExists: { 
1d4b0 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
1d4c0 69 6e 33 20 2a 2f 0a 20 20 56 64 62 65 43 75 72  in3 */.  VdbeCur
1d4d0 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72  sor *pC;.  BtCur
1d4e0 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e  sor *pCrsr;.  in
1d4f0 74 20 72 65 73 3b 0a 20 20 75 36 34 20 69 4b 65  t res;.  u64 iKe
1d500 79 3b 0a 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d  y;..  pIn3 = &aM
1d510 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61  em[pOp->p3];.  a
1d520 73 73 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61  ssert( pIn3->fla
1d530 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a  gs & MEM_Int );.
1d540 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1d550 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
1d560 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
1d570 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
1d580 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
1d590 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73  ( pC!=0 );.  ass
1d5a0 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65  ert( pC->isTable
1d5b0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
1d5c0 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67  ->pseudoTableReg
1d5d0 3d 3d 30 20 29 3b 0a 20 20 70 43 72 73 72 20 3d  ==0 );.  pCrsr =
1d5e0 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20   pC->pCursor;.  
1d5f0 69 66 28 20 70 43 72 73 72 21 3d 30 20 29 7b 0a  if( pCrsr!=0 ){.
1d600 20 20 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 20      res = 0;.   
1d610 20 69 4b 65 79 20 3d 20 70 49 6e 33 2d 3e 75 2e   iKey = pIn3->u.
1d620 69 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  i;.    rc = sqli
1d630 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e  te3BtreeMovetoUn
1d640 70 61 63 6b 65 64 28 70 43 72 73 72 2c 20 30 2c  packed(pCrsr, 0,
1d650 20 69 4b 65 79 2c 20 30 2c 20 26 72 65 73 29 3b   iKey, 0, &res);
1d660 0a 20 20 20 20 70 43 2d 3e 6c 61 73 74 52 6f 77  .    pC->lastRow
1d670 69 64 20 3d 20 70 49 6e 33 2d 3e 75 2e 69 3b 0a  id = pIn3->u.i;.
1d680 20 20 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56      pC->rowidIsV
1d690 61 6c 69 64 20 3d 20 72 65 73 3d 3d 30 20 3f 31  alid = res==0 ?1
1d6a0 3a 30 3b 0a 20 20 20 20 70 43 2d 3e 6e 75 6c 6c  :0;.    pC->null
1d6b0 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d  Row = 0;.    pC-
1d6c0 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
1d6d0 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 20 20  ACHE_STALE;.    
1d6e0 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
1d6f0 74 6f 20 3d 20 30 3b 0a 20 20 20 20 69 66 28 20  to = 0;.    if( 
1d700 72 65 73 21 3d 30 20 29 7b 0a 20 20 20 20 20 20  res!=0 ){.      
1d710 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
1d720 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
1d730 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64  pC->rowidIsValid
1d740 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 0a 20 20 20  ==0 );.    }.   
1d750 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20   pC->seekResult 
1d760 3d 20 72 65 73 3b 0a 20 20 7d 65 6c 73 65 7b 0a  = res;.  }else{.
1d770 20 20 20 20 2f 2a 20 54 68 69 73 20 68 61 70 70      /* This happ
1d780 65 6e 73 20 77 68 65 6e 20 61 6e 20 61 74 74 65  ens when an atte
1d790 6d 70 74 20 74 6f 20 6f 70 65 6e 20 61 20 72 65  mpt to open a re
1d7a0 61 64 20 63 75 72 73 6f 72 20 6f 6e 20 74 68 65  ad cursor on the
1d7b0 20 0a 20 20 20 20 2a 2a 20 73 71 6c 69 74 65 5f   .    ** sqlite_
1d7c0 6d 61 73 74 65 72 20 74 61 62 6c 65 20 72 65 74  master table ret
1d7d0 75 72 6e 73 20 53 51 4c 49 54 45 5f 45 4d 50 54  urns SQLITE_EMPT
1d7e0 59 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 70 63  Y..    */.    pc
1d7f0 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
1d800 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
1d810 72 6f 77 69 64 49 73 56 61 6c 69 64 3d 3d 30 20  rowidIsValid==0 
1d820 29 3b 0a 20 20 20 20 70 43 2d 3e 73 65 65 6b 52  );.    pC->seekR
1d830 65 73 75 6c 74 20 3d 20 30 3b 0a 20 20 7d 0a 20  esult = 0;.  }. 
1d840 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
1d850 63 6f 64 65 3a 20 53 65 71 75 65 6e 63 65 20 50  code: Sequence P
1d860 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
1d870 20 46 69 6e 64 20 74 68 65 20 6e 65 78 74 20 61   Find the next a
1d880 76 61 69 6c 61 62 6c 65 20 73 65 71 75 65 6e 63  vailable sequenc
1d890 65 20 6e 75 6d 62 65 72 20 66 6f 72 20 63 75 72  e number for cur
1d8a0 73 6f 72 20 50 31 2e 0a 2a 2a 20 57 72 69 74 65  sor P1..** Write
1d8b0 20 74 68 65 20 73 65 71 75 65 6e 63 65 20 6e 75   the sequence nu
1d8c0 6d 62 65 72 20 69 6e 74 6f 20 72 65 67 69 73 74  mber into regist
1d8d0 65 72 20 50 32 2e 0a 2a 2a 20 54 68 65 20 73 65  er P2..** The se
1d8e0 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20 6f 6e  quence number on
1d8f0 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 69   the cursor is i
1d900 6e 63 72 65 6d 65 6e 74 65 64 20 61 66 74 65 72  ncremented after
1d910 20 74 68 69 73 0a 2a 2a 20 69 6e 73 74 72 75 63   this.** instruc
1d920 74 69 6f 6e 2e 20 20 0a 2a 2f 0a 63 61 73 65 20  tion.  .*/.case 
1d930 4f 50 5f 53 65 71 75 65 6e 63 65 3a 20 7b 20 20  OP_Sequence: {  
1d940 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
1d950 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20  -prerelease */. 
1d960 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
1d970 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
1d980 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61  ->nCursor );.  a
1d990 73 73 65 72 74 28 20 70 2d 3e 61 70 43 73 72 5b  ssert( p->apCsr[
1d9a0 70 4f 70 2d 3e 70 31 5d 21 3d 30 20 29 3b 0a 20  pOp->p1]!=0 );. 
1d9b0 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 2d 3e   pOut->u.i = p->
1d9c0 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e  apCsr[pOp->p1]->
1d9d0 73 65 71 43 6f 75 6e 74 2b 2b 3b 0a 20 20 62 72  seqCount++;.  br
1d9e0 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f  eak;.}.../* Opco
1d9f0 64 65 3a 20 4e 65 77 52 6f 77 69 64 20 50 31 20  de: NewRowid P1 
1da00 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
1da10 47 65 74 20 61 20 6e 65 77 20 69 6e 74 65 67 65  Get a new intege
1da20 72 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 20  r record number 
1da30 28 61 2e 6b 2e 61 20 22 72 6f 77 69 64 22 29 20  (a.k.a "rowid") 
1da40 75 73 65 64 20 61 73 20 74 68 65 20 6b 65 79 20  used as the key 
1da50 74 6f 20 61 20 74 61 62 6c 65 2e 0a 2a 2a 20 54  to a table..** T
1da60 68 65 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72  he record number
1da70 20 69 73 20 6e 6f 74 20 70 72 65 76 69 6f 75 73   is not previous
1da80 6c 79 20 75 73 65 64 20 61 73 20 61 20 6b 65 79  ly used as a key
1da90 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
1daa0 0a 2a 2a 20 74 61 62 6c 65 20 74 68 61 74 20 63  .** table that c
1dab0 75 72 73 6f 72 20 50 31 20 70 6f 69 6e 74 73 20  ursor P1 points 
1dac0 74 6f 2e 20 20 54 68 65 20 6e 65 77 20 72 65 63  to.  The new rec
1dad0 6f 72 64 20 6e 75 6d 62 65 72 20 69 73 20 77 72  ord number is wr
1dae0 69 74 74 65 6e 0a 2a 2a 20 77 72 69 74 74 65 6e  itten.** written
1daf0 20 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e   to register P2.
1db00 0a 2a 2a 0a 2a 2a 20 49 66 20 50 33 3e 30 20 74  .**.** If P3>0 t
1db10 68 65 6e 20 50 33 20 69 73 20 61 20 72 65 67 69  hen P3 is a regi
1db20 73 74 65 72 20 69 6e 20 74 68 65 20 72 6f 6f 74  ster in the root
1db30 20 66 72 61 6d 65 20 6f 66 20 74 68 69 73 20 56   frame of this V
1db40 44 42 45 20 74 68 61 74 20 68 6f 6c 64 73 20 0a  DBE that holds .
1db50 2a 2a 20 74 68 65 20 6c 61 72 67 65 73 74 20 70  ** the largest p
1db60 72 65 76 69 6f 75 73 6c 79 20 67 65 6e 65 72 61  reviously genera
1db70 74 65 64 20 72 65 63 6f 72 64 20 6e 75 6d 62 65  ted record numbe
1db80 72 2e 20 4e 6f 20 6e 65 77 20 72 65 63 6f 72 64  r. No new record
1db90 20 6e 75 6d 62 65 72 73 20 61 72 65 0a 2a 2a 20   numbers are.** 
1dba0 61 6c 6c 6f 77 65 64 20 74 6f 20 62 65 20 6c 65  allowed to be le
1dbb0 73 73 20 74 68 61 6e 20 74 68 69 73 20 76 61 6c  ss than this val
1dbc0 75 65 2e 20 57 68 65 6e 20 74 68 69 73 20 76 61  ue. When this va
1dbd0 6c 75 65 20 72 65 61 63 68 65 73 20 69 74 73 20  lue reaches its 
1dbe0 6d 61 78 69 6d 75 6d 2c 20 0a 2a 2a 20 61 20 53  maximum, .** a S
1dbf0 51 4c 49 54 45 5f 46 55 4c 4c 20 65 72 72 6f 72  QLITE_FULL error
1dc00 20 69 73 20 67 65 6e 65 72 61 74 65 64 2e 20 54   is generated. T
1dc10 68 65 20 50 33 20 72 65 67 69 73 74 65 72 20 69  he P3 register i
1dc20 73 20 75 70 64 61 74 65 64 20 77 69 74 68 20 74  s updated with t
1dc30 68 65 20 27 0a 2a 2a 20 67 65 6e 65 72 61 74 65  he '.** generate
1dc40 64 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 2e  d record number.
1dc50 20 54 68 69 73 20 50 33 20 6d 65 63 68 61 6e 69   This P3 mechani
1dc60 73 6d 20 69 73 20 75 73 65 64 20 74 6f 20 68 65  sm is used to he
1dc70 6c 70 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65  lp implement the
1dc80 0a 2a 2a 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e  .** AUTOINCREMEN
1dc90 54 20 66 65 61 74 75 72 65 2e 0a 2a 2f 0a 63 61  T feature..*/.ca
1dca0 73 65 20 4f 50 5f 4e 65 77 52 6f 77 69 64 3a 20  se OP_NewRowid: 
1dcb0 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f  {           /* o
1dcc0 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a  ut2-prerelease *
1dcd0 2f 0a 20 20 69 36 34 20 76 3b 20 20 20 20 20 20  /.  i64 v;      
1dce0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
1dcf0 65 20 6e 65 77 20 72 6f 77 69 64 20 2a 2f 0a 20  e new rowid */. 
1dd00 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
1dd10 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 73 6f          /* Curso
1dd20 72 20 6f 66 20 74 61 62 6c 65 20 74 6f 20 67 65  r of table to ge
1dd30 74 20 74 68 65 20 6e 65 77 20 72 6f 77 69 64 20  t the new rowid 
1dd40 2a 2f 0a 20 20 69 6e 74 20 72 65 73 3b 20 20 20  */.  int res;   
1dd50 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52              /* R
1dd60 65 73 75 6c 74 20 6f 66 20 61 6e 20 73 71 6c 69  esult of an sqli
1dd70 74 65 33 42 74 72 65 65 4c 61 73 74 28 29 20 2a  te3BtreeLast() *
1dd80 2f 0a 20 20 69 6e 74 20 63 6e 74 3b 20 20 20 20  /.  int cnt;    
1dd90 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f             /* Co
1dda0 75 6e 74 65 72 20 74 6f 20 6c 69 6d 69 74 20 74  unter to limit t
1ddb0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 73 65 61  he number of sea
1ddc0 72 63 68 65 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a  rches */.  Mem *
1ddd0 70 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20  pMem;           
1dde0 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f    /* Register ho
1ddf0 6c 64 69 6e 67 20 6c 61 72 67 65 73 74 20 72 6f  lding largest ro
1de00 77 69 64 20 66 6f 72 20 41 55 54 4f 49 4e 43 52  wid for AUTOINCR
1de10 45 4d 45 4e 54 20 2a 2f 0a 20 20 56 64 62 65 46  EMENT */.  VdbeF
1de20 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b 20 20 20  rame *pFrame;   
1de30 20 20 2f 2a 20 52 6f 6f 74 20 66 72 61 6d 65 20    /* Root frame 
1de40 6f 66 20 56 44 42 45 20 2a 2f 0a 0a 20 20 76 20  of VDBE */..  v 
1de50 3d 20 30 3b 0a 20 20 72 65 73 20 3d 20 30 3b 0a  = 0;.  res = 0;.
1de60 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1de70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
1de80 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
1de90 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
1dea0 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
1deb0 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 69 66 28  ( pC!=0 );.  if(
1dec0 20 4e 45 56 45 52 28 70 43 2d 3e 70 43 75 72 73   NEVER(pC->pCurs
1ded0 6f 72 3d 3d 30 29 20 29 7b 0a 20 20 20 20 2f 2a  or==0) ){.    /*
1dee0 20 54 68 65 20 7a 65 72 6f 20 69 6e 69 74 69 61   The zero initia
1def0 6c 69 7a 61 74 69 6f 6e 20 61 62 6f 76 65 20 69  lization above i
1df00 73 20 61 6c 6c 20 74 68 61 74 20 69 73 20 6e 65  s all that is ne
1df10 65 64 65 64 20 2a 2f 0a 20 20 7d 65 6c 73 65 7b  eded */.  }else{
1df20 0a 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 78 74  .    /* The next
1df30 20 72 6f 77 69 64 20 6f 72 20 72 65 63 6f 72 64   rowid or record
1df40 20 6e 75 6d 62 65 72 20 28 64 69 66 66 65 72 65   number (differe
1df50 6e 74 20 74 65 72 6d 73 20 66 6f 72 20 74 68 65  nt terms for the
1df60 20 73 61 6d 65 0a 20 20 20 20 2a 2a 20 74 68 69   same.    ** thi
1df70 6e 67 29 20 69 73 20 6f 62 74 61 69 6e 65 64 20  ng) is obtained 
1df80 69 6e 20 61 20 74 77 6f 2d 73 74 65 70 20 61 6c  in a two-step al
1df90 67 6f 72 69 74 68 6d 2e 0a 20 20 20 20 2a 2a 0a  gorithm..    **.
1dfa0 20 20 20 20 2a 2a 20 46 69 72 73 74 20 77 65 20      ** First we 
1dfb0 61 74 74 65 6d 70 74 20 74 6f 20 66 69 6e 64 20  attempt to find 
1dfc0 74 68 65 20 6c 61 72 67 65 73 74 20 65 78 69 73  the largest exis
1dfd0 74 69 6e 67 20 72 6f 77 69 64 20 61 6e 64 20 61  ting rowid and a
1dfe0 64 64 20 6f 6e 65 0a 20 20 20 20 2a 2a 20 74 6f  dd one.    ** to
1dff0 20 74 68 61 74 2e 20 20 42 75 74 20 69 66 20 74   that.  But if t
1e000 68 65 20 6c 61 72 67 65 73 74 20 65 78 69 73 74  he largest exist
1e010 69 6e 67 20 72 6f 77 69 64 20 69 73 20 61 6c 72  ing rowid is alr
1e020 65 61 64 79 20 74 68 65 20 6d 61 78 69 6d 75 6d  eady the maximum
1e030 0a 20 20 20 20 2a 2a 20 70 6f 73 69 74 69 76 65  .    ** positive
1e040 20 69 6e 74 65 67 65 72 2c 20 77 65 20 68 61 76   integer, we hav
1e050 65 20 74 6f 20 66 61 6c 6c 20 74 68 72 6f 75 67  e to fall throug
1e060 68 20 74 6f 20 74 68 65 20 73 65 63 6f 6e 64 0a  h to the second.
1e070 20 20 20 20 2a 2a 20 70 72 6f 62 61 62 69 6c 69      ** probabili
1e080 73 74 69 63 20 61 6c 67 6f 72 69 74 68 6d 0a 20  stic algorithm. 
1e090 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 54 68 65     **.    ** The
1e0a0 20 73 65 63 6f 6e 64 20 61 6c 67 6f 72 69 74 68   second algorith
1e0b0 6d 20 69 73 20 74 6f 20 73 65 6c 65 63 74 20 61  m is to select a
1e0c0 20 72 6f 77 69 64 20 61 74 20 72 61 6e 64 6f 6d   rowid at random
1e0d0 20 61 6e 64 20 73 65 65 20 69 66 0a 20 20 20 20   and see if.    
1e0e0 2a 2a 20 69 74 20 61 6c 72 65 61 64 79 20 65 78  ** it already ex
1e0f0 69 73 74 73 20 69 6e 20 74 68 65 20 74 61 62 6c  ists in the tabl
1e100 65 2e 20 20 49 66 20 69 74 20 64 6f 65 73 20 6e  e.  If it does n
1e110 6f 74 20 65 78 69 73 74 2c 20 77 65 20 68 61 76  ot exist, we hav
1e120 65 0a 20 20 20 20 2a 2a 20 73 75 63 63 65 65 64  e.    ** succeed
1e130 65 64 2e 20 20 49 66 20 74 68 65 20 72 61 6e 64  ed.  If the rand
1e140 6f 6d 20 72 6f 77 69 64 20 64 6f 65 73 20 65 78  om rowid does ex
1e150 69 73 74 2c 20 77 65 20 73 65 6c 65 63 74 20 61  ist, we select a
1e160 20 6e 65 77 20 6f 6e 65 0a 20 20 20 20 2a 2a 20   new one.    ** 
1e170 61 6e 64 20 74 72 79 20 61 67 61 69 6e 2c 20 75  and try again, u
1e180 70 20 74 6f 20 31 30 30 20 74 69 6d 65 73 2e 0a  p to 100 times..
1e190 20 20 20 20 2a 2f 0a 20 20 20 20 61 73 73 65 72      */.    asser
1e1a0 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29  t( pC->isTable )
1e1b0 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  ;..#ifdef SQLITE
1e1c0 5f 33 32 42 49 54 5f 52 4f 57 49 44 0a 23 20 20  _32BIT_ROWID.#  
1e1d0 20 64 65 66 69 6e 65 20 4d 41 58 5f 52 4f 57 49   define MAX_ROWI
1e1e0 44 20 30 78 37 66 66 66 66 66 66 66 0a 23 65 6c  D 0x7fffffff.#el
1e1f0 73 65 0a 20 20 20 20 2f 2a 20 53 6f 6d 65 20 63  se.    /* Some c
1e200 6f 6d 70 69 6c 65 72 73 20 63 6f 6d 70 6c 61 69  ompilers complai
1e210 6e 20 61 62 6f 75 74 20 63 6f 6e 73 74 61 6e 74  n about constant
1e220 73 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 30 78  s of the form 0x
1e230 37 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66  7fffffffffffffff
1e240 2e 0a 20 20 20 20 2a 2a 20 4f 74 68 65 72 73 20  ..    ** Others 
1e250 63 6f 6d 70 6c 61 69 6e 20 61 62 6f 75 74 20 30  complain about 0
1e260 78 37 66 66 66 66 66 66 66 66 66 66 66 66 66 66  x7ffffffffffffff
1e270 66 66 4c 4c 2e 20 20 54 68 65 20 66 6f 6c 6c 6f  ffLL.  The follo
1e280 77 69 6e 67 20 6d 61 63 72 6f 20 73 65 65 6d 73  wing macro seems
1e290 0a 20 20 20 20 2a 2a 20 74 6f 20 70 72 6f 76 69  .    ** to provi
1e2a0 64 65 20 74 68 65 20 63 6f 6e 73 74 61 6e 74 20  de the constant 
1e2b0 77 68 69 6c 65 20 6d 61 6b 69 6e 67 20 61 6c 6c  while making all
1e2c0 20 63 6f 6d 70 69 6c 65 72 73 20 68 61 70 70 79   compilers happy
1e2d0 2e 0a 20 20 20 20 2a 2f 0a 23 20 20 20 64 65 66  ..    */.#   def
1e2e0 69 6e 65 20 4d 41 58 5f 52 4f 57 49 44 20 20 28  ine MAX_ROWID  (
1e2f0 69 36 34 29 28 20 28 28 28 75 36 34 29 30 78 37  i64)( (((u64)0x7
1e300 66 66 66 66 66 66 66 29 3c 3c 33 32 29 20 7c 20  fffffff)<<32) | 
1e310 28 75 36 34 29 30 78 66 66 66 66 66 66 66 66 20  (u64)0xffffffff 
1e320 29 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 69 66  ).#endif..    if
1e330 28 20 21 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d  ( !pC->useRandom
1e340 52 6f 77 69 64 20 29 7b 0a 20 20 20 20 20 20 76  Rowid ){.      v
1e350 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 47   = sqlite3BtreeG
1e360 65 74 43 61 63 68 65 64 52 6f 77 69 64 28 70 43  etCachedRowid(pC
1e370 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20  ->pCursor);.    
1e380 20 20 69 66 28 20 76 3d 3d 30 20 29 7b 0a 20 20    if( v==0 ){.  
1e390 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
1e3a0 65 33 42 74 72 65 65 4c 61 73 74 28 70 43 2d 3e  e3BtreeLast(pC->
1e3b0 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a  pCursor, &res);.
1e3c0 20 20 20 20 20 20 20 20 69 66 28 20 72 63 21 3d          if( rc!=
1e3d0 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
1e3e0 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72         goto abor
1e3f0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
1e400 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
1e410 20 20 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20    if( res ){.   
1e420 20 20 20 20 20 20 20 76 20 3d 20 31 3b 20 20 20         v = 1;   
1e430 2f 2a 20 49 4d 50 3a 20 52 2d 36 31 39 31 34 2d  /* IMP: R-61914-
1e440 34 38 30 37 34 20 2a 2f 0a 20 20 20 20 20 20 20  48074 */.       
1e450 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
1e460 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
1e470 33 42 74 72 65 65 43 75 72 73 6f 72 49 73 56 61  3BtreeCursorIsVa
1e480 6c 69 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 29  lid(pC->pCursor)
1e490 20 29 3b 0a 20 20 20 20 20 20 20 20 20 20 72 63   );.          rc
1e4a0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4b   = sqlite3BtreeK
1e4b0 65 79 53 69 7a 65 28 70 43 2d 3e 70 43 75 72 73  eySize(pC->pCurs
1e4c0 6f 72 2c 20 26 76 29 3b 0a 20 20 20 20 20 20 20  or, &v);.       
1e4d0 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53     assert( rc==S
1e4e0 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 20 20 2f 2a  QLITE_OK );   /*
1e4f0 20 43 61 6e 6e 6f 74 20 66 61 69 6c 20 66 6f 6c   Cannot fail fol
1e500 6c 6f 77 69 6e 67 20 42 74 72 65 65 4c 61 73 74  lowing BtreeLast
1e510 28 29 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  () */.          
1e520 69 66 28 20 76 3d 3d 4d 41 58 5f 52 4f 57 49 44  if( v==MAX_ROWID
1e530 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20   ){.            
1e540 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77  pC->useRandomRow
1e550 69 64 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20  id = 1;.        
1e560 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
1e570 20 20 20 20 20 76 2b 2b 3b 20 20 20 2f 2a 20 49       v++;   /* I
1e580 4d 50 3a 20 52 2d 32 39 35 33 38 2d 33 34 39 38  MP: R-29538-3498
1e590 37 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 7d  7 */.          }
1e5a0 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
1e5b0 20 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   }..#ifndef SQLI
1e5c0 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52  TE_OMIT_AUTOINCR
1e5d0 45 4d 45 4e 54 0a 20 20 20 20 20 20 69 66 28 20  EMENT.      if( 
1e5e0 70 4f 70 2d 3e 70 33 20 29 7b 0a 20 20 20 20 20  pOp->p3 ){.     
1e5f0 20 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68 61     /* Assert tha
1e600 74 20 50 33 20 69 73 20 61 20 76 61 6c 69 64 20  t P3 is a valid 
1e610 6d 65 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a  memory cell. */.
1e620 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
1e630 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 20  pOp->p3>0 );.   
1e640 20 20 20 20 20 69 66 28 20 70 2d 3e 70 46 72 61       if( p->pFra
1e650 6d 65 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  me ){.          
1e660 66 6f 72 28 70 46 72 61 6d 65 3d 70 2d 3e 70 46  for(pFrame=p->pF
1e670 72 61 6d 65 3b 20 70 46 72 61 6d 65 2d 3e 70 50  rame; pFrame->pP
1e680 61 72 65 6e 74 3b 20 70 46 72 61 6d 65 3d 70 46  arent; pFrame=pF
1e690 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 29 3b 0a  rame->pParent);.
1e6a0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 73 73            /* Ass
1e6b0 65 72 74 20 74 68 61 74 20 50 33 20 69 73 20 61  ert that P3 is a
1e6c0 20 76 61 6c 69 64 20 6d 65 6d 6f 72 79 20 63 65   valid memory ce
1e6d0 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  ll. */.         
1e6e0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
1e6f0 3c 3d 70 46 72 61 6d 65 2d 3e 6e 4d 65 6d 20 29  <=pFrame->nMem )
1e700 3b 0a 20 20 20 20 20 20 20 20 20 20 70 4d 65 6d  ;.          pMem
1e710 20 3d 20 26 70 46 72 61 6d 65 2d 3e 61 4d 65 6d   = &pFrame->aMem
1e720 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 20  [pOp->p3];.     
1e730 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
1e740 20 20 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68      /* Assert th
1e750 61 74 20 50 33 20 69 73 20 61 20 76 61 6c 69 64  at P3 is a valid
1e760 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f   memory cell. */
1e770 0a 20 20 20 20 20 20 20 20 20 20 61 73 73 65 72  .          asser
1e780 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e  t( pOp->p3<=p->n
1e790 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20 20 20 20  Mem );.         
1e7a0 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f   pMem = &aMem[pO
1e7b0 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 20 20 20 20  p->p3];.        
1e7c0 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
1e7d0 67 65 28 70 2c 20 70 4d 65 6d 29 3b 0a 20 20 20  ge(p, pMem);.   
1e7e0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 61       }.        a
1e7f0 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
1e800 64 28 70 4d 65 6d 29 20 29 3b 0a 0a 20 20 20 20  d(pMem) );..    
1e810 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41      REGISTER_TRA
1e820 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4d 65 6d  CE(pOp->p3, pMem
1e830 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
1e840 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72  e3VdbeMemInteger
1e850 69 66 79 28 70 4d 65 6d 29 3b 0a 20 20 20 20 20  ify(pMem);.     
1e860 20 20 20 61 73 73 65 72 74 28 20 28 70 4d 65 6d     assert( (pMem
1e870 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
1e880 74 29 21 3d 30 20 29 3b 20 20 2f 2a 20 6d 65 6d  t)!=0 );  /* mem
1e890 28 50 33 29 20 68 6f 6c 64 73 20 61 6e 20 69 6e  (P3) holds an in
1e8a0 74 65 67 65 72 20 2a 2f 0a 20 20 20 20 20 20 20  teger */.       
1e8b0 20 69 66 28 20 70 4d 65 6d 2d 3e 75 2e 69 3d 3d   if( pMem->u.i==
1e8c0 4d 41 58 5f 52 4f 57 49 44 20 7c 7c 20 70 43 2d  MAX_ROWID || pC-
1e8d0 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20  >useRandomRowid 
1e8e0 29 7b 0a 20 20 20 20 20 20 20 20 20 20 72 63 20  ){.          rc 
1e8f0 3d 20 53 51 4c 49 54 45 5f 46 55 4c 4c 3b 20 20  = SQLITE_FULL;  
1e900 20 2f 2a 20 49 4d 50 3a 20 52 2d 31 32 32 37 35   /* IMP: R-12275
1e910 2d 36 31 33 33 38 20 2a 2f 0a 20 20 20 20 20 20  -61338 */.      
1e920 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
1e930 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
1e940 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69       }.        i
1e950 66 28 20 76 3c 70 4d 65 6d 2d 3e 75 2e 69 2b 31  f( v<pMem->u.i+1
1e960 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 76 20   ){.          v 
1e970 3d 20 70 4d 65 6d 2d 3e 75 2e 69 20 2b 20 31 3b  = pMem->u.i + 1;
1e980 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
1e990 20 20 20 70 4d 65 6d 2d 3e 75 2e 69 20 3d 20 76     pMem->u.i = v
1e9a0 3b 0a 20 20 20 20 20 20 7d 0a 23 65 6e 64 69 66  ;.      }.#endif
1e9b0 0a 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 42  ..      sqlite3B
1e9c0 74 72 65 65 53 65 74 43 61 63 68 65 64 52 6f 77  treeSetCachedRow
1e9d0 69 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20  id(pC->pCursor, 
1e9e0 76 3c 4d 41 58 5f 52 4f 57 49 44 20 3f 20 76 2b  v<MAX_ROWID ? v+
1e9f0 31 20 3a 20 30 29 3b 0a 20 20 20 20 7d 0a 20 20  1 : 0);.    }.  
1ea00 20 20 69 66 28 20 70 43 2d 3e 75 73 65 52 61 6e    if( pC->useRan
1ea10 64 6f 6d 52 6f 77 69 64 20 29 7b 0a 20 20 20 20  domRowid ){.    
1ea20 20 20 2f 2a 20 49 4d 50 4c 45 4d 45 4e 54 41 54    /* IMPLEMENTAT
1ea30 49 4f 4e 2d 4f 46 3a 20 52 2d 30 37 36 37 37 2d  ION-OF: R-07677-
1ea40 34 31 38 38 31 20 49 66 20 74 68 65 20 6c 61 72  41881 If the lar
1ea50 67 65 73 74 20 52 4f 57 49 44 20 69 73 20 65 71  gest ROWID is eq
1ea60 75 61 6c 20 74 6f 20 74 68 65 0a 20 20 20 20 20  ual to the.     
1ea70 20 2a 2a 20 6c 61 72 67 65 73 74 20 70 6f 73 73   ** largest poss
1ea80 69 62 6c 65 20 69 6e 74 65 67 65 72 20 28 39 32  ible integer (92
1ea90 32 33 33 37 32 30 33 36 38 35 34 37 37 35 38 30  2337203685477580
1eaa0 37 29 20 74 68 65 6e 20 74 68 65 20 64 61 74 61  7) then the data
1eab0 62 61 73 65 0a 20 20 20 20 20 20 2a 2a 20 65 6e  base.      ** en
1eac0 67 69 6e 65 20 73 74 61 72 74 73 20 70 69 63 6b  gine starts pick
1ead0 69 6e 67 20 70 6f 73 69 74 69 76 65 20 63 61 6e  ing positive can
1eae0 64 69 64 61 74 65 20 52 4f 57 49 44 73 20 61 74  didate ROWIDs at
1eaf0 20 72 61 6e 64 6f 6d 20 75 6e 74 69 6c 0a 20 20   random until.  
1eb00 20 20 20 20 2a 2a 20 69 74 20 66 69 6e 64 73 20      ** it finds 
1eb10 6f 6e 65 20 74 68 61 74 20 69 73 20 6e 6f 74 20  one that is not 
1eb20 70 72 65 76 69 6f 75 73 6c 79 20 75 73 65 64 2e  previously used.
1eb30 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74   */.      assert
1eb40 28 20 70 4f 70 2d 3e 70 33 3d 3d 30 20 29 3b 20  ( pOp->p3==0 ); 
1eb50 20 2f 2a 20 57 65 20 63 61 6e 6e 6f 74 20 62 65   /* We cannot be
1eb60 20 69 6e 20 72 61 6e 64 6f 6d 20 72 6f 77 69 64   in random rowid
1eb70 20 6d 6f 64 65 20 69 66 20 74 68 69 73 20 69 73   mode if this is
1eb80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1eb90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
1eba0 20 61 6e 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e   an AUTOINCREMEN
1ebb0 54 20 74 61 62 6c 65 2e 20 2a 2f 0a 20 20 20 20  T table. */.    
1ebc0 20 20 2f 2a 20 6f 6e 20 74 68 65 20 66 69 72 73    /* on the firs
1ebd0 74 20 61 74 74 65 6d 70 74 2c 20 73 69 6d 70 6c  t attempt, simpl
1ebe0 79 20 64 6f 20 6f 6e 65 20 6d 6f 72 65 20 74 68  y do one more th
1ebf0 61 6e 20 70 72 65 76 69 6f 75 73 20 2a 2f 0a 20  an previous */. 
1ec00 20 20 20 20 20 76 20 3d 20 64 62 2d 3e 6c 61 73       v = db->las
1ec10 74 52 6f 77 69 64 3b 0a 20 20 20 20 20 20 76 20  tRowid;.      v 
1ec20 26 3d 20 28 4d 41 58 5f 52 4f 57 49 44 3e 3e 31  &= (MAX_ROWID>>1
1ec30 29 3b 20 2f 2a 20 65 6e 73 75 72 65 20 64 6f 65  ); /* ensure doe
1ec40 73 6e 27 74 20 67 6f 20 6e 65 67 61 74 69 76 65  sn't go negative
1ec50 20 2a 2f 0a 20 20 20 20 20 20 76 2b 2b 3b 20 2f   */.      v++; /
1ec60 2a 20 65 6e 73 75 72 65 20 6e 6f 6e 2d 7a 65 72  * ensure non-zer
1ec70 6f 20 2a 2f 0a 20 20 20 20 20 20 63 6e 74 20 3d  o */.      cnt =
1ec80 20 30 3b 0a 20 20 20 20 20 20 77 68 69 6c 65 28   0;.      while(
1ec90 20 20 20 28 28 72 63 20 3d 20 73 71 6c 69 74 65     ((rc = sqlite
1eca0 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61  3BtreeMovetoUnpa
1ecb0 63 6b 65 64 28 70 43 2d 3e 70 43 75 72 73 6f 72  cked(pC->pCursor
1ecc0 2c 20 30 2c 20 28 75 36 34 29 76 2c 0a 20 20 20  , 0, (u64)v,.   
1ecd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ece0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ecf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 30 2c                0,
1ed00 20 26 72 65 73 29 29 3d 3d 53 51 4c 49 54 45 5f   &res))==SQLITE_
1ed10 4f 4b 29 0a 20 20 20 20 20 20 20 20 20 20 20 20  OK).            
1ed20 26 26 20 28 72 65 73 3d 3d 30 29 0a 20 20 20 20  && (res==0).    
1ed30 20 20 20 20 20 20 20 20 26 26 20 28 2b 2b 63 6e          && (++cn
1ed40 74 3c 31 30 30 29 29 7b 0a 20 20 20 20 20 20 20  t<100)){.       
1ed50 20 2f 2a 20 63 6f 6c 6c 69 73 69 6f 6e 20 2d 20   /* collision - 
1ed60 74 72 79 20 61 6e 6f 74 68 65 72 20 72 61 6e 64  try another rand
1ed70 6f 6d 20 72 6f 77 69 64 20 2a 2f 0a 20 20 20 20  om rowid */.    
1ed80 20 20 20 20 73 71 6c 69 74 65 33 5f 72 61 6e 64      sqlite3_rand
1ed90 6f 6d 6e 65 73 73 28 73 69 7a 65 6f 66 28 76 29  omness(sizeof(v)
1eda0 2c 20 26 76 29 3b 0a 20 20 20 20 20 20 20 20 69  , &v);.        i
1edb0 66 28 20 63 6e 74 3c 35 20 29 7b 0a 20 20 20 20  f( cnt<5 ){.    
1edc0 20 20 20 20 20 20 2f 2a 20 74 72 79 20 22 73 6d        /* try "sm
1edd0 61 6c 6c 22 20 72 61 6e 64 6f 6d 20 72 6f 77 69  all" random rowi
1ede0 64 73 20 66 6f 72 20 74 68 65 20 69 6e 69 74 69  ds for the initi
1edf0 61 6c 20 61 74 74 65 6d 70 74 73 20 2a 2f 0a 20  al attempts */. 
1ee00 20 20 20 20 20 20 20 20 20 76 20 26 3d 20 30 78           v &= 0x
1ee10 66 66 66 66 66 66 3b 0a 20 20 20 20 20 20 20 20  ffffff;.        
1ee20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20  }else{.         
1ee30 20 76 20 26 3d 20 28 4d 41 58 5f 52 4f 57 49 44   v &= (MAX_ROWID
1ee40 3e 3e 31 29 3b 20 2f 2a 20 65 6e 73 75 72 65 20  >>1); /* ensure 
1ee50 64 6f 65 73 6e 27 74 20 67 6f 20 6e 65 67 61 74  doesn't go negat
1ee60 69 76 65 20 2a 2f 0a 20 20 20 20 20 20 20 20 7d  ive */.        }
1ee70 0a 20 20 20 20 20 20 20 20 76 2b 2b 3b 20 2f 2a  .        v++; /*
1ee80 20 65 6e 73 75 72 65 20 6e 6f 6e 2d 7a 65 72 6f   ensure non-zero
1ee90 20 2a 2f 0a 20 20 20 20 20 20 7d 0a 20 20 20 20   */.      }.    
1eea0 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
1eeb0 5f 4f 4b 20 26 26 20 72 65 73 3d 3d 30 20 29 7b  _OK && res==0 ){
1eec0 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 53 51  .        rc = SQ
1eed0 4c 49 54 45 5f 46 55 4c 4c 3b 20 20 20 2f 2a 20  LITE_FULL;   /* 
1eee0 49 4d 50 3a 20 52 2d 33 38 32 31 39 2d 35 33 30  IMP: R-38219-530
1eef0 30 32 20 2a 2f 0a 20 20 20 20 20 20 20 20 67 6f  02 */.        go
1ef00 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
1ef10 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20  error;.      }. 
1ef20 20 20 20 20 20 61 73 73 65 72 74 28 20 76 3e 30       assert( v>0
1ef30 20 29 3b 20 20 2f 2a 20 45 56 3a 20 52 2d 34 30   );  /* EV: R-40
1ef40 38 31 32 2d 30 33 35 37 30 20 2a 2f 0a 20 20 20  812-03570 */.   
1ef50 20 7d 0a 20 20 20 20 70 43 2d 3e 72 6f 77 69 64   }.    pC->rowid
1ef60 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 20  IsValid = 0;.   
1ef70 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
1ef80 65 74 6f 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d  eto = 0;.    pC-
1ef90 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
1efa0 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 7d 0a  ACHE_STALE;.  }.
1efb0 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 76 3b    pOut->u.i = v;
1efc0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
1efd0 4f 70 63 6f 64 65 3a 20 49 6e 73 65 72 74 20 50  Opcode: Insert P
1efe0 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
1eff0 0a 2a 2a 20 57 72 69 74 65 20 61 6e 20 65 6e 74  .** Write an ent
1f000 72 79 20 69 6e 74 6f 20 74 68 65 20 74 61 62 6c  ry into the tabl
1f010 65 20 6f 66 20 63 75 72 73 6f 72 20 50 31 2e 20  e of cursor P1. 
1f020 20 41 20 6e 65 77 20 65 6e 74 72 79 20 69 73 0a   A new entry is.
1f030 2a 2a 20 63 72 65 61 74 65 64 20 69 66 20 69 74  ** created if it
1f040 20 64 6f 65 73 6e 27 74 20 61 6c 72 65 61 64 79   doesn't already
1f050 20 65 78 69 73 74 20 6f 72 20 74 68 65 20 64 61   exist or the da
1f060 74 61 20 66 6f 72 20 61 6e 20 65 78 69 73 74 69  ta for an existi
1f070 6e 67 0a 2a 2a 20 65 6e 74 72 79 20 69 73 20 6f  ng.** entry is o
1f080 76 65 72 77 72 69 74 74 65 6e 2e 20 20 54 68 65  verwritten.  The
1f090 20 64 61 74 61 20 69 73 20 74 68 65 20 76 61 6c   data is the val
1f0a0 75 65 20 4d 45 4d 5f 42 6c 6f 62 20 73 74 6f 72  ue MEM_Blob stor
1f0b0 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 0a 2a  ed in register.*
1f0c0 2a 20 6e 75 6d 62 65 72 20 50 32 2e 20 54 68 65  * number P2. The
1f0d0 20 6b 65 79 20 69 73 20 73 74 6f 72 65 64 20 69   key is stored i
1f0e0 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 20 54  n register P3. T
1f0f0 68 65 20 6b 65 79 20 6d 75 73 74 0a 2a 2a 20 62  he key must.** b
1f100 65 20 61 20 4d 45 4d 5f 49 6e 74 2e 0a 2a 2a 0a  e a MEM_Int..**.
1f110 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47  ** If the OPFLAG
1f120 5f 4e 43 48 41 4e 47 45 20 66 6c 61 67 20 6f 66  _NCHANGE flag of
1f130 20 50 35 20 69 73 20 73 65 74 2c 20 74 68 65 6e   P5 is set, then
1f140 20 74 68 65 20 72 6f 77 20 63 68 61 6e 67 65 20   the row change 
1f150 63 6f 75 6e 74 20 69 73 0a 2a 2a 20 69 6e 63 72  count is.** incr
1f160 65 6d 65 6e 74 65 64 20 28 6f 74 68 65 72 77 69  emented (otherwi
1f170 73 65 20 6e 6f 74 29 2e 20 20 49 66 20 74 68 65  se not).  If the
1f180 20 4f 50 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49   OPFLAG_LASTROWI
1f190 44 20 66 6c 61 67 20 6f 66 20 50 35 20 69 73 20  D flag of P5 is 
1f1a0 73 65 74 2c 0a 2a 2a 20 74 68 65 6e 20 72 6f 77  set,.** then row
1f1b0 69 64 20 69 73 20 73 74 6f 72 65 64 20 66 6f 72  id is stored for
1f1c0 20 73 75 62 73 65 71 75 65 6e 74 20 72 65 74 75   subsequent retu
1f1d0 72 6e 20 62 79 20 74 68 65 0a 2a 2a 20 73 71 6c  rn by the.** sql
1f1e0 69 74 65 33 5f 6c 61 73 74 5f 69 6e 73 65 72 74  ite3_last_insert
1f1f0 5f 72 6f 77 69 64 28 29 20 66 75 6e 63 74 69 6f  _rowid() functio
1f200 6e 20 28 6f 74 68 65 72 77 69 73 65 20 69 74 20  n (otherwise it 
1f210 69 73 20 75 6e 6d 6f 64 69 66 69 65 64 29 2e 0a  is unmodified)..
1f220 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46  **.** If the OPF
1f230 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c  LAG_USESEEKRESUL
1f240 54 20 66 6c 61 67 20 6f 66 20 50 35 20 69 73 20  T flag of P5 is 
1f250 73 65 74 20 61 6e 64 20 69 66 20 74 68 65 20 72  set and if the r
1f260 65 73 75 6c 74 20 6f 66 0a 2a 2a 20 74 68 65 20  esult of.** the 
1f270 6c 61 73 74 20 73 65 65 6b 20 6f 70 65 72 61 74  last seek operat
1f280 69 6f 6e 20 28 4f 50 5f 4e 6f 74 45 78 69 73 74  ion (OP_NotExist
1f290 73 29 20 77 61 73 20 61 20 73 75 63 63 65 73 73  s) was a success
1f2a0 2c 20 74 68 65 6e 20 74 68 69 73 0a 2a 2a 20 6f  , then this.** o
1f2b0 70 65 72 61 74 69 6f 6e 20 77 69 6c 6c 20 6e 6f  peration will no
1f2c0 74 20 61 74 74 65 6d 70 74 20 74 6f 20 66 69 6e  t attempt to fin
1f2d0 64 20 74 68 65 20 61 70 70 72 6f 70 72 69 61 74  d the appropriat
1f2e0 65 20 72 6f 77 20 62 65 66 6f 72 65 20 64 6f 69  e row before doi
1f2f0 6e 67 0a 2a 2a 20 74 68 65 20 69 6e 73 65 72 74  ng.** the insert
1f300 20 62 75 74 20 77 69 6c 6c 20 69 6e 73 74 65 61   but will instea
1f310 64 20 6f 76 65 72 77 72 69 74 65 20 74 68 65 20  d overwrite the 
1f320 72 6f 77 20 74 68 61 74 20 74 68 65 20 63 75 72  row that the cur
1f330 73 6f 72 20 69 73 0a 2a 2a 20 63 75 72 72 65 6e  sor is.** curren
1f340 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2e  tly pointing to.
1f350 20 20 50 72 65 73 75 6d 61 62 6c 79 2c 20 74 68    Presumably, th
1f360 65 20 70 72 69 6f 72 20 4f 50 5f 4e 6f 74 45 78  e prior OP_NotEx
1f370 69 73 74 73 20 6f 70 63 6f 64 65 0a 2a 2a 20 68  ists opcode.** h
1f380 61 73 20 61 6c 72 65 61 64 79 20 70 6f 73 69 74  as already posit
1f390 69 6f 6e 65 64 20 74 68 65 20 63 75 72 73 6f 72  ioned the cursor
1f3a0 20 63 6f 72 72 65 63 74 6c 79 2e 20 20 54 68 69   correctly.  Thi
1f3b0 73 20 69 73 20 61 6e 20 6f 70 74 69 6d 69 7a 61  s is an optimiza
1f3c0 74 69 6f 6e 0a 2a 2a 20 74 68 61 74 20 62 6f 6f  tion.** that boo
1f3d0 73 74 73 20 70 65 72 66 6f 72 6d 61 6e 63 65 20  sts performance 
1f3e0 62 79 20 61 76 6f 69 64 69 6e 67 20 72 65 64 75  by avoiding redu
1f3f0 6e 64 61 6e 74 20 73 65 65 6b 73 2e 0a 2a 2a 0a  ndant seeks..**.
1f400 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47  ** If the OPFLAG
1f410 5f 49 53 55 50 44 41 54 45 20 66 6c 61 67 20 69  _ISUPDATE flag i
1f420 73 20 73 65 74 2c 20 74 68 65 6e 20 74 68 69 73  s set, then this
1f430 20 6f 70 63 6f 64 65 20 69 73 20 70 61 72 74 20   opcode is part 
1f440 6f 66 20 61 6e 0a 2a 2a 20 55 50 44 41 54 45 20  of an.** UPDATE 
1f450 6f 70 65 72 61 74 69 6f 6e 2e 20 20 4f 74 68 65  operation.  Othe
1f460 72 77 69 73 65 20 28 69 66 20 74 68 65 20 66 6c  rwise (if the fl
1f470 61 67 20 69 73 20 63 6c 65 61 72 29 20 74 68 65  ag is clear) the
1f480 6e 20 74 68 69 73 20 6f 70 63 6f 64 65 0a 2a 2a  n this opcode.**
1f490 20 69 73 20 70 61 72 74 20 6f 66 20 61 6e 20 49   is part of an I
1f4a0 4e 53 45 52 54 20 6f 70 65 72 61 74 69 6f 6e 2e  NSERT operation.
1f4b0 20 20 54 68 65 20 64 69 66 66 65 72 65 6e 63 65    The difference
1f4c0 20 69 73 20 6f 6e 6c 79 20 69 6d 70 6f 72 74 61   is only importa
1f4d0 6e 74 20 74 6f 0a 2a 2a 20 74 68 65 20 75 70 64  nt to.** the upd
1f4e0 61 74 65 20 68 6f 6f 6b 2e 0a 2a 2a 0a 2a 2a 20  ate hook..**.** 
1f4f0 50 61 72 61 6d 65 74 65 72 20 50 34 20 6d 61 79  Parameter P4 may
1f500 20 70 6f 69 6e 74 20 74 6f 20 61 20 73 74 72 69   point to a stri
1f510 6e 67 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  ng containing th
1f520 65 20 74 61 62 6c 65 2d 6e 61 6d 65 2c 20 6f 72  e table-name, or
1f530 0a 2a 2a 20 6d 61 79 20 62 65 20 4e 55 4c 4c 2e  .** may be NULL.
1f540 20 49 66 20 69 74 20 69 73 20 6e 6f 74 20 4e 55   If it is not NU
1f550 4c 4c 2c 20 74 68 65 6e 20 74 68 65 20 75 70 64  LL, then the upd
1f560 61 74 65 2d 68 6f 6f 6b 20 0a 2a 2a 20 28 73 71  ate-hook .** (sq
1f570 6c 69 74 65 33 2e 78 55 70 64 61 74 65 43 61 6c  lite3.xUpdateCal
1f580 6c 62 61 63 6b 29 20 69 73 20 69 6e 76 6f 6b 65  lback) is invoke
1f590 64 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 20 73 75  d following a su
1f5a0 63 63 65 73 73 66 75 6c 20 69 6e 73 65 72 74 2e  ccessful insert.
1f5b0 0a 2a 2a 0a 2a 2a 20 28 57 41 52 4e 49 4e 47 2f  .**.** (WARNING/
1f5c0 54 4f 44 4f 3a 20 49 66 20 50 31 20 69 73 20 61  TODO: If P1 is a
1f5d0 20 70 73 65 75 64 6f 2d 63 75 72 73 6f 72 20 61   pseudo-cursor a
1f5e0 6e 64 20 50 32 20 69 73 20 64 79 6e 61 6d 69 63  nd P2 is dynamic
1f5f0 61 6c 6c 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 65  ally.** allocate
1f600 64 2c 20 74 68 65 6e 20 6f 77 6e 65 72 73 68 69  d, then ownershi
1f610 70 20 6f 66 20 50 32 20 69 73 20 74 72 61 6e 73  p of P2 is trans
1f620 66 65 72 72 65 64 20 74 6f 20 74 68 65 20 70 73  ferred to the ps
1f630 65 75 64 6f 2d 63 75 72 73 6f 72 0a 2a 2a 20 61  eudo-cursor.** a
1f640 6e 64 20 72 65 67 69 73 74 65 72 20 50 32 20 62  nd register P2 b
1f650 65 63 6f 6d 65 73 20 65 70 68 65 6d 65 72 61 6c  ecomes ephemeral
1f660 2e 20 20 49 66 20 74 68 65 20 63 75 72 73 6f 72  .  If the cursor
1f670 20 69 73 20 63 68 61 6e 67 65 64 2c 20 74 68 65   is changed, the
1f680 0a 2a 2a 20 76 61 6c 75 65 20 6f 66 20 72 65 67  .** value of reg
1f690 69 73 74 65 72 20 50 32 20 77 69 6c 6c 20 74 68  ister P2 will th
1f6a0 65 6e 20 63 68 61 6e 67 65 2e 20 20 4d 61 6b 65  en change.  Make
1f6b0 20 73 75 72 65 20 74 68 69 73 20 64 6f 65 73 20   sure this does 
1f6c0 6e 6f 74 0a 2a 2a 20 63 61 75 73 65 20 61 6e 79  not.** cause any
1f6d0 20 70 72 6f 62 6c 65 6d 73 2e 29 0a 2a 2a 0a 2a   problems.).**.*
1f6e0 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69  * This instructi
1f6f0 6f 6e 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 6f 6e  on only works on
1f700 20 74 61 62 6c 65 73 2e 20 20 54 68 65 20 65 71   tables.  The eq
1f710 75 69 76 61 6c 65 6e 74 20 69 6e 73 74 72 75 63  uivalent instruc
1f720 74 69 6f 6e 0a 2a 2a 20 66 6f 72 20 69 6e 64 69  tion.** for indi
1f730 63 65 73 20 69 73 20 4f 50 5f 49 64 78 49 6e 73  ces is OP_IdxIns
1f740 65 72 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ert..*/./* Opcod
1f750 65 3a 20 49 6e 73 65 72 74 49 6e 74 20 50 31 20  e: InsertInt P1 
1f760 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a  P2 P3 P4 P5.**.*
1f770 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 65 78 61  * This works exa
1f780 63 74 6c 79 20 6c 69 6b 65 20 4f 50 5f 49 6e 73  ctly like OP_Ins
1f790 65 72 74 20 65 78 63 65 70 74 20 74 68 61 74 20  ert except that 
1f7a0 74 68 65 20 6b 65 79 20 69 73 20 74 68 65 0a 2a  the key is the.*
1f7b0 2a 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20  * integer value 
1f7c0 50 33 2c 20 6e 6f 74 20 74 68 65 20 76 61 6c 75  P3, not the valu
1f7d0 65 20 6f 66 20 74 68 65 20 69 6e 74 65 67 65 72  e of the integer
1f7e0 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73   stored in regis
1f7f0 74 65 72 20 50 33 2e 0a 2a 2f 0a 63 61 73 65 20  ter P3..*/.case 
1f800 4f 50 5f 49 6e 73 65 72 74 3a 20 0a 63 61 73 65  OP_Insert: .case
1f810 20 4f 50 5f 49 6e 73 65 72 74 49 6e 74 3a 20 7b   OP_InsertInt: {
1f820 0a 20 20 4d 65 6d 20 2a 70 44 61 74 61 3b 20 20  .  Mem *pData;  
1f830 20 20 20 20 20 2f 2a 20 4d 45 4d 20 63 65 6c 6c       /* MEM cell
1f840 20 68 6f 6c 64 69 6e 67 20 64 61 74 61 20 66 6f   holding data fo
1f850 72 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20  r the record to 
1f860 62 65 20 69 6e 73 65 72 74 65 64 20 2a 2f 0a 20  be inserted */. 
1f870 20 4d 65 6d 20 2a 70 4b 65 79 3b 20 20 20 20 20   Mem *pKey;     
1f880 20 20 20 2f 2a 20 4d 45 4d 20 63 65 6c 6c 20 68     /* MEM cell h
1f890 6f 6c 64 69 6e 67 20 6b 65 79 20 20 66 6f 72 20  olding key  for 
1f8a0 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20  the record */.  
1f8b0 69 36 34 20 69 4b 65 79 3b 20 20 20 20 20 20 20  i64 iKey;       
1f8c0 20 20 2f 2a 20 54 68 65 20 69 6e 74 65 67 65 72    /* The integer
1f8d0 20 52 4f 57 49 44 20 6f 72 20 6b 65 79 20 66 6f   ROWID or key fo
1f8e0 72 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20  r the record to 
1f8f0 62 65 20 69 6e 73 65 72 74 65 64 20 2a 2f 0a 20  be inserted */. 
1f900 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
1f910 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 74 6f 20     /* Cursor to 
1f920 74 61 62 6c 65 20 69 6e 74 6f 20 77 68 69 63 68  table into which
1f930 20 69 6e 73 65 72 74 20 69 73 20 77 72 69 74 74   insert is writt
1f940 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 5a 65 72  en */.  int nZer
1f950 6f 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  o;        /* Num
1f960 62 65 72 20 6f 66 20 7a 65 72 6f 2d 62 79 74 65  ber of zero-byte
1f970 73 20 74 6f 20 61 70 70 65 6e 64 20 2a 2f 0a 20  s to append */. 
1f980 20 69 6e 74 20 73 65 65 6b 52 65 73 75 6c 74 3b   int seekResult;
1f990 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20     /* Result of 
1f9a0 70 72 69 6f 72 20 73 65 65 6b 20 6f 72 20 30 20  prior seek or 0 
1f9b0 69 66 20 6e 6f 20 55 53 45 53 45 45 4b 52 45 53  if no USESEEKRES
1f9c0 55 4c 54 20 66 6c 61 67 20 2a 2f 0a 20 20 63 6f  ULT flag */.  co
1f9d0 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 3b 20 20  nst char *zDb;  
1f9e0 2f 2a 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65  /* database name
1f9f0 20 2d 20 75 73 65 64 20 62 79 20 74 68 65 20 75   - used by the u
1fa00 70 64 61 74 65 20 68 6f 6f 6b 20 2a 2f 0a 20 20  pdate hook */.  
1fa10 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 62 6c  const char *zTbl
1fa20 3b 20 2f 2a 20 54 61 62 6c 65 20 6e 61 6d 65 20  ; /* Table name 
1fa30 2d 20 75 73 65 64 20 62 79 20 74 68 65 20 6f 70  - used by the op
1fa40 64 61 74 65 20 68 6f 6f 6b 20 2a 2f 0a 20 20 69  date hook */.  i
1fa50 6e 74 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20  nt op;          
1fa60 20 2f 2a 20 4f 70 63 6f 64 65 20 66 6f 72 20 75   /* Opcode for u
1fa70 70 64 61 74 65 20 68 6f 6f 6b 3a 20 53 51 4c 49  pdate hook: SQLI
1fa80 54 45 5f 55 50 44 41 54 45 20 6f 72 20 53 51 4c  TE_UPDATE or SQL
1fa90 49 54 45 5f 49 4e 53 45 52 54 20 2a 2f 0a 0a 20  ITE_INSERT */.. 
1faa0 20 70 44 61 74 61 20 3d 20 26 61 4d 65 6d 5b 70   pData = &aMem[p
1fab0 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72  Op->p2];.  asser
1fac0 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
1fad0 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
1fae0 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28  sor );.  assert(
1faf0 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 44 61 74   memIsValid(pDat
1fb00 61 29 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  a) );.  pC = p->
1fb10 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
1fb20 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
1fb30 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
1fb40 3e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20  >pCursor!=0 );. 
1fb50 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 73 65   assert( pC->pse
1fb60 75 64 6f 54 61 62 6c 65 52 65 67 3d 3d 30 20 29  udoTableReg==0 )
1fb70 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
1fb80 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 52 45 47  isTable );.  REG
1fb90 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
1fba0 3e 70 32 2c 20 70 44 61 74 61 29 3b 0a 0a 20 20  >p2, pData);..  
1fbb0 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  if( pOp->opcode=
1fbc0 3d 4f 50 5f 49 6e 73 65 72 74 20 29 7b 0a 20 20  =OP_Insert ){.  
1fbd0 20 20 70 4b 65 79 20 3d 20 26 61 4d 65 6d 5b 70    pKey = &aMem[p
1fbe0 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 61 73 73  Op->p3];.    ass
1fbf0 65 72 74 28 20 70 4b 65 79 2d 3e 66 6c 61 67 73  ert( pKey->flags
1fc00 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20   & MEM_Int );.  
1fc10 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
1fc20 61 6c 69 64 28 70 4b 65 79 29 20 29 3b 0a 20 20  alid(pKey) );.  
1fc30 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
1fc40 28 70 4f 70 2d 3e 70 33 2c 20 70 4b 65 79 29 3b  (pOp->p3, pKey);
1fc50 0a 20 20 20 20 69 4b 65 79 20 3d 20 70 4b 65 79  .    iKey = pKey
1fc60 2d 3e 75 2e 69 3b 0a 20 20 7d 65 6c 73 65 7b 0a  ->u.i;.  }else{.
1fc70 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
1fc80 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 6e 73 65  >opcode==OP_Inse
1fc90 72 74 49 6e 74 20 29 3b 0a 20 20 20 20 69 4b 65  rtInt );.    iKe
1fca0 79 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 7d  y = pOp->p3;.  }
1fcb0 0a 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20  ..  if( pOp->p5 
1fcc0 26 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45  & OPFLAG_NCHANGE
1fcd0 20 29 20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b   ) p->nChange++;
1fce0 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26  .  if( pOp->p5 &
1fcf0 20 4f 50 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49   OPFLAG_LASTROWI
1fd00 44 20 29 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69  D ) db->lastRowi
1fd10 64 20 3d 20 69 4b 65 79 3b 0a 20 20 69 66 28 20  d = iKey;.  if( 
1fd20 70 44 61 74 61 2d 3e 66 6c 61 67 73 20 26 20 4d  pData->flags & M
1fd30 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 70  EM_Null ){.    p
1fd40 44 61 74 61 2d 3e 7a 20 3d 20 30 3b 0a 20 20 20  Data->z = 0;.   
1fd50 20 70 44 61 74 61 2d 3e 6e 20 3d 20 30 3b 0a 20   pData->n = 0;. 
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 44 61 74 61 2d 3e 66 6c 61 67 73  rt( pData->flags
1fd80 20 26 20 28 4d 45 4d 5f 42 6c 6f 62 7c 4d 45 4d   & (MEM_Blob|MEM
1fd90 5f 53 74 72 29 20 29 3b 0a 20 20 7d 0a 20 20 73  _Str) );.  }.  s
1fda0 65 65 6b 52 65 73 75 6c 74 20 3d 20 28 28 70 4f  eekResult = ((pO
1fdb0 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 55  p->p5 & OPFLAG_U
1fdc0 53 45 53 45 45 4b 52 45 53 55 4c 54 29 20 3f 20  SESEEKRESULT) ? 
1fdd0 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3a  pC->seekResult :
1fde0 20 30 29 3b 0a 20 20 69 66 28 20 70 44 61 74 61   0);.  if( pData
1fdf0 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a 65  ->flags & MEM_Ze
1fe00 72 6f 20 29 7b 0a 20 20 20 20 6e 5a 65 72 6f 20  ro ){.    nZero 
1fe10 3d 20 70 44 61 74 61 2d 3e 75 2e 6e 5a 65 72 6f  = pData->u.nZero
1fe20 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 6e  ;.  }else{.    n
1fe30 5a 65 72 6f 20 3d 20 30 3b 0a 20 20 7d 0a 20 20  Zero = 0;.  }.  
1fe40 73 71 6c 69 74 65 33 42 74 72 65 65 53 65 74 43  sqlite3BtreeSetC
1fe50 61 63 68 65 64 52 6f 77 69 64 28 70 43 2d 3e 70  achedRowid(pC->p
1fe60 43 75 72 73 6f 72 2c 20 30 29 3b 0a 20 20 72 63  Cursor, 0);.  rc
1fe70 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 49   = sqlite3BtreeI
1fe80 6e 73 65 72 74 28 70 43 2d 3e 70 43 75 72 73 6f  nsert(pC->pCurso
1fe90 72 2c 20 30 2c 20 69 4b 65 79 2c 0a 20 20 20 20  r, 0, iKey,.    
1fea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1feb0 20 20 20 20 20 20 70 44 61 74 61 2d 3e 7a 2c 20        pData->z, 
1fec0 70 44 61 74 61 2d 3e 6e 2c 20 6e 5a 65 72 6f 2c  pData->n, nZero,
1fed0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1fee0 20 20 20 20 20 20 20 20 20 20 20 70 4f 70 2d 3e             pOp->
1fef0 70 35 20 26 20 4f 50 46 4c 41 47 5f 41 50 50 45  p5 & OPFLAG_APPE
1ff00 4e 44 2c 20 73 65 65 6b 52 65 73 75 6c 74 0a 20  ND, seekResult. 
1ff10 20 29 3b 0a 20 20 70 43 2d 3e 72 6f 77 69 64 49   );.  pC->rowidI
1ff20 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 70 43  sValid = 0;.  pC
1ff30 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
1ff40 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68   = 0;.  pC->cach
1ff50 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
1ff60 53 54 41 4c 45 3b 0a 0a 20 20 2f 2a 20 49 6e 76  STALE;..  /* Inv
1ff70 6f 6b 65 20 74 68 65 20 75 70 64 61 74 65 2d 68  oke the update-h
1ff80 6f 6f 6b 20 69 66 20 72 65 71 75 69 72 65 64 2e  ook if required.
1ff90 20 2a 2f 0a 20 20 69 66 28 20 72 63 3d 3d 53 51   */.  if( rc==SQ
1ffa0 4c 49 54 45 5f 4f 4b 20 26 26 20 64 62 2d 3e 78  LITE_OK && db->x
1ffb0 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20 26  UpdateCallback &
1ffc0 26 20 70 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20  & pOp->p4.z ){. 
1ffd0 20 20 20 7a 44 62 20 3d 20 64 62 2d 3e 61 44 62     zDb = db->aDb
1ffe0 5b 70 43 2d 3e 69 44 62 5d 2e 7a 4e 61 6d 65 3b  [pC->iDb].zName;
1fff0 0a 20 20 20 20 7a 54 62 6c 20 3d 20 70 4f 70 2d  .    zTbl = pOp-
20000 3e 70 34 2e 7a 3b 0a 20 20 20 20 6f 70 20 3d 20  >p4.z;.    op = 
20010 28 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c  ((pOp->p5 & OPFL
20020 41 47 5f 49 53 55 50 44 41 54 45 29 20 3f 20 53  AG_ISUPDATE) ? S
20030 51 4c 49 54 45 5f 55 50 44 41 54 45 20 3a 20 53  QLITE_UPDATE : S
20040 51 4c 49 54 45 5f 49 4e 53 45 52 54 29 3b 0a 20  QLITE_INSERT);. 
20050 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69     assert( pC->i
20060 73 54 61 62 6c 65 20 29 3b 0a 20 20 20 20 64 62  sTable );.    db
20070 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63  ->xUpdateCallbac
20080 6b 28 64 62 2d 3e 70 55 70 64 61 74 65 41 72 67  k(db->pUpdateArg
20090 2c 20 6f 70 2c 20 7a 44 62 2c 20 7a 54 62 6c 2c  , op, zDb, zTbl,
200a0 20 69 4b 65 79 29 3b 0a 20 20 20 20 61 73 73 65   iKey);.    asse
200b0 72 74 28 20 70 43 2d 3e 69 44 62 3e 3d 30 20 29  rt( pC->iDb>=0 )
200c0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
200d0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 65 6c  ../* Opcode: Del
200e0 65 74 65 20 50 31 20 50 32 20 2a 20 50 34 20 2a  ete P1 P2 * P4 *
200f0 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 74 68  .**.** Delete th
20100 65 20 72 65 63 6f 72 64 20 61 74 20 77 68 69 63  e record at whic
20110 68 20 74 68 65 20 50 31 20 63 75 72 73 6f 72 20  h the P1 cursor 
20120 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69  is currently poi
20130 6e 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  nting..**.** The
20140 20 63 75 72 73 6f 72 20 77 69 6c 6c 20 62 65 20   cursor will be 
20150 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67 20 61 74  left pointing at
20160 20 65 69 74 68 65 72 20 74 68 65 20 6e 65 78 74   either the next
20170 20 6f 72 20 74 68 65 20 70 72 65 76 69 6f 75 73   or the previous
20180 0a 2a 2a 20 72 65 63 6f 72 64 20 69 6e 20 74 68  .** record in th
20190 65 20 74 61 62 6c 65 2e 20 49 66 20 69 74 20 69  e table. If it i
201a0 73 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67 20  s left pointing 
201b0 61 74 20 74 68 65 20 6e 65 78 74 20 72 65 63 6f  at the next reco
201c0 72 64 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20  rd, then.** the 
201d0 6e 65 78 74 20 4e 65 78 74 20 69 6e 73 74 72 75  next Next instru
201e0 63 74 69 6f 6e 20 77 69 6c 6c 20 62 65 20 61 20  ction will be a 
201f0 6e 6f 2d 6f 70 2e 20 20 48 65 6e 63 65 20 69 74  no-op.  Hence it
20200 20 69 73 20 4f 4b 20 74 6f 20 64 65 6c 65 74 65   is OK to delete
20210 0a 2a 2a 20 61 20 72 65 63 6f 72 64 20 66 72 6f  .** a record fro
20220 6d 20 77 69 74 68 69 6e 20 61 6e 20 4e 65 78 74  m within an Next
20230 20 6c 6f 6f 70 2e 0a 2a 2a 0a 2a 2a 20 49 66 20   loop..**.** If 
20240 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e  the OPFLAG_NCHAN
20250 47 45 20 66 6c 61 67 20 6f 66 20 50 32 20 69 73  GE flag of P2 is
20260 20 73 65 74 2c 20 74 68 65 6e 20 74 68 65 20 72   set, then the r
20270 6f 77 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 20  ow change count 
20280 69 73 0a 2a 2a 20 69 6e 63 72 65 6d 65 6e 74 65  is.** incremente
20290 64 20 28 6f 74 68 65 72 77 69 73 65 20 6e 6f 74  d (otherwise not
202a0 29 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 6d 75 73 74  )..**.** P1 must
202b0 20 6e 6f 74 20 62 65 20 70 73 65 75 64 6f 2d 74   not be pseudo-t
202c0 61 62 6c 65 2e 20 20 49 74 20 68 61 73 20 74 6f  able.  It has to
202d0 20 62 65 20 61 20 72 65 61 6c 20 74 61 62 6c 65   be a real table
202e0 20 77 69 74 68 0a 2a 2a 20 6d 75 6c 74 69 70 6c   with.** multipl
202f0 65 20 72 6f 77 73 2e 0a 2a 2a 0a 2a 2a 20 49 66  e rows..**.** If
20300 20 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c   P4 is not NULL,
20310 20 74 68 65 6e 20 69 74 20 69 73 20 74 68 65 20   then it is the 
20320 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c  name of the tabl
20330 65 20 74 68 61 74 20 50 31 20 69 73 0a 2a 2a 20  e that P1 is.** 
20340 70 6f 69 6e 74 69 6e 67 20 74 6f 2e 20 20 54 68  pointing to.  Th
20350 65 20 75 70 64 61 74 65 20 68 6f 6f 6b 20 77 69  e update hook wi
20360 6c 6c 20 62 65 20 69 6e 76 6f 6b 65 64 2c 20 69  ll be invoked, i
20370 66 20 69 74 20 65 78 69 73 74 73 2e 0a 2a 2a 20  f it exists..** 
20380 49 66 20 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c  If P4 is not NUL
20390 4c 20 74 68 65 6e 20 74 68 65 20 50 31 20 63 75  L then the P1 cu
203a0 72 73 6f 72 20 6d 75 73 74 20 68 61 76 65 20 62  rsor must have b
203b0 65 65 6e 20 70 6f 73 69 74 69 6f 6e 65 64 0a 2a  een positioned.*
203c0 2a 20 75 73 69 6e 67 20 4f 50 5f 4e 6f 74 46 6f  * using OP_NotFo
203d0 75 6e 64 20 70 72 69 6f 72 20 74 6f 20 69 6e 76  und prior to inv
203e0 6f 6b 69 6e 67 20 74 68 69 73 20 6f 70 63 6f 64  oking this opcod
203f0 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 65  e..*/.case OP_De
20400 6c 65 74 65 3a 20 7b 0a 20 20 69 36 34 20 69 4b  lete: {.  i64 iK
20410 65 79 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  ey;.  VdbeCursor
20420 20 2a 70 43 3b 0a 0a 20 20 69 4b 65 79 20 3d 20   *pC;..  iKey = 
20430 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  0;.  assert( pOp
20440 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
20450 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
20460 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
20470 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
20480 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
20490 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75 72  assert( pC->pCur
204a0 73 6f 72 21 3d 30 20 29 3b 20 20 2f 2a 20 4f 6e  sor!=0 );  /* On
204b0 6c 79 20 76 61 6c 69 64 20 66 6f 72 20 72 65 61  ly valid for rea
204c0 6c 20 74 61 62 6c 65 73 2c 20 6e 6f 20 70 73 65  l tables, no pse
204d0 75 64 6f 74 61 62 6c 65 73 20 2a 2f 0a 0a 20 20  udotables */..  
204e0 2f 2a 20 49 66 20 74 68 65 20 75 70 64 61 74 65  /* If the update
204f0 2d 68 6f 6f 6b 20 77 69 6c 6c 20 62 65 20 69 6e  -hook will be in
20500 76 6f 6b 65 64 2c 20 73 65 74 20 69 4b 65 79 20  voked, set iKey 
20510 74 6f 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20  to the rowid of 
20520 74 68 65 0a 20 20 2a 2a 20 72 6f 77 20 62 65 69  the.  ** row bei
20530 6e 67 20 64 65 6c 65 74 65 64 2e 0a 20 20 2a 2f  ng deleted..  */
20540 0a 20 20 69 66 28 20 64 62 2d 3e 78 55 70 64 61  .  if( db->xUpda
20550 74 65 43 61 6c 6c 62 61 63 6b 20 26 26 20 70 4f  teCallback && pO
20560 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20 20 20 61  p->p4.z ){.    a
20570 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62  ssert( pC->isTab
20580 6c 65 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  le );.    assert
20590 28 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c  ( pC->rowidIsVal
205a0 69 64 20 29 3b 20 20 2f 2a 20 6c 61 73 74 52 6f  id );  /* lastRo
205b0 77 69 64 20 73 65 74 20 62 79 20 70 72 65 76 69  wid set by previ
205c0 6f 75 73 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20  ous OP_NotFound 
205d0 2a 2f 0a 20 20 20 20 69 4b 65 79 20 3d 20 70 43  */.    iKey = pC
205e0 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20 7d  ->lastRowid;.  }
205f0 0a 0a 20 20 2f 2a 20 54 68 65 20 4f 50 5f 44 65  ..  /* The OP_De
20600 6c 65 74 65 20 6f 70 63 6f 64 65 20 61 6c 77 61  lete opcode alwa
20610 79 73 20 66 6f 6c 6c 6f 77 73 20 61 6e 20 4f 50  ys follows an OP
20620 5f 4e 6f 74 45 78 69 73 74 73 20 6f 72 20 4f 50  _NotExists or OP
20630 5f 4c 61 73 74 20 6f 72 0a 20 20 2a 2a 20 4f 50  _Last or.  ** OP
20640 5f 43 6f 6c 75 6d 6e 20 6f 6e 20 74 68 65 20 73  _Column on the s
20650 61 6d 65 20 74 61 62 6c 65 20 77 69 74 68 6f 75  ame table withou
20660 74 20 61 6e 79 20 69 6e 74 65 72 76 65 6e 69 6e  t any intervenin
20670 67 20 6f 70 65 72 61 74 69 6f 6e 73 20 74 68 61  g operations tha
20680 74 0a 20 20 2a 2a 20 6d 69 67 68 74 20 6d 6f 76  t.  ** might mov
20690 65 20 6f 72 20 69 6e 76 61 6c 69 64 61 74 65 20  e or invalidate 
206a0 74 68 65 20 63 75 72 73 6f 72 2e 20 20 48 65 6e  the cursor.  Hen
206b0 63 65 20 63 75 72 73 6f 72 20 70 43 20 69 73 20  ce cursor pC is 
206c0 61 6c 77 61 79 73 20 70 6f 69 6e 74 69 6e 67 0a  always pointing.
206d0 20 20 2a 2a 20 74 6f 20 74 68 65 20 72 6f 77 20    ** to the row 
206e0 74 6f 20 62 65 20 64 65 6c 65 74 65 64 20 61 6e  to be deleted an
206f0 64 20 74 68 65 20 73 71 6c 69 74 65 33 56 64 62  d the sqlite3Vdb
20700 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29 20  eCursorMoveto() 
20710 6f 70 65 72 61 74 69 6f 6e 0a 20 20 2a 2a 20 62  operation.  ** b
20720 65 6c 6f 77 20 69 73 20 61 6c 77 61 79 73 20 61  elow is always a
20730 20 6e 6f 2d 6f 70 20 61 6e 64 20 63 61 6e 6e 6f   no-op and canno
20740 74 20 66 61 69 6c 2e 20 20 57 65 20 77 69 6c 6c  t fail.  We will
20750 20 72 75 6e 20 69 74 20 61 6e 79 68 6f 77 2c 20   run it anyhow, 
20760 74 68 6f 75 67 68 2c 0a 20 20 2a 2a 20 74 6f 20  though,.  ** to 
20770 67 75 61 72 64 20 61 67 61 69 6e 73 74 20 66 75  guard against fu
20780 74 75 72 65 20 63 68 61 6e 67 65 73 20 74 6f 20  ture changes to 
20790 74 68 65 20 63 6f 64 65 20 67 65 6e 65 72 61 74  the code generat
207a0 6f 72 2e 0a 20 20 2a 2a 2f 0a 20 20 61 73 73 65  or..  **/.  asse
207b0 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64  rt( pC->deferred
207c0 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 72  Moveto==0 );.  r
207d0 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43  c = sqlite3VdbeC
207e0 75 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b  ursorMoveto(pC);
207f0 0a 20 20 69 66 28 20 4e 45 56 45 52 28 72 63 21  .  if( NEVER(rc!
20800 3d 53 51 4c 49 54 45 5f 4f 4b 29 20 29 20 67 6f  =SQLITE_OK) ) go
20810 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
20820 65 72 72 6f 72 3b 0a 0a 20 20 73 71 6c 69 74 65  error;..  sqlite
20830 33 42 74 72 65 65 53 65 74 43 61 63 68 65 64 52  3BtreeSetCachedR
20840 6f 77 69 64 28 70 43 2d 3e 70 43 75 72 73 6f 72  owid(pC->pCursor
20850 2c 20 30 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c  , 0);.  rc = sql
20860 69 74 65 33 42 74 72 65 65 44 65 6c 65 74 65 28  ite3BtreeDelete(
20870 70 43 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20  pC->pCursor);.  
20880 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20  pC->cacheStatus 
20890 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 0a  = CACHE_STALE;..
208a0 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20    /* Invoke the 
208b0 75 70 64 61 74 65 2d 68 6f 6f 6b 20 69 66 20 72  update-hook if r
208c0 65 71 75 69 72 65 64 2e 20 2a 2f 0a 20 20 69 66  equired. */.  if
208d0 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
208e0 26 26 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61  && db->xUpdateCa
208f0 6c 6c 62 61 63 6b 20 26 26 20 70 4f 70 2d 3e 70  llback && pOp->p
20900 34 2e 7a 20 29 7b 0a 20 20 20 20 63 6f 6e 73 74  4.z ){.    const
20910 20 63 68 61 72 20 2a 7a 44 62 20 3d 20 64 62 2d   char *zDb = db-
20920 3e 61 44 62 5b 70 43 2d 3e 69 44 62 5d 2e 7a 4e  >aDb[pC->iDb].zN
20930 61 6d 65 3b 0a 20 20 20 20 63 6f 6e 73 74 20 63  ame;.    const c
20940 68 61 72 20 2a 7a 54 62 6c 20 3d 20 70 4f 70 2d  har *zTbl = pOp-
20950 3e 70 34 2e 7a 3b 0a 20 20 20 20 64 62 2d 3e 78  >p4.z;.    db->x
20960 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 28 64  UpdateCallback(d
20970 62 2d 3e 70 55 70 64 61 74 65 41 72 67 2c 20 53  b->pUpdateArg, S
20980 51 4c 49 54 45 5f 44 45 4c 45 54 45 2c 20 7a 44  QLITE_DELETE, zD
20990 62 2c 20 7a 54 62 6c 2c 20 69 4b 65 79 29 3b 0a  b, zTbl, iKey);.
209a0 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
209b0 69 44 62 3e 3d 30 20 29 3b 0a 20 20 7d 0a 20 20  iDb>=0 );.  }.  
209c0 69 66 28 20 70 4f 70 2d 3e 70 32 20 26 20 4f 50  if( pOp->p2 & OP
209d0 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29 20 70  FLAG_NCHANGE ) p
209e0 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 62  ->nChange++;.  b
209f0 72 65 61 6b 3b 0a 7d 0a 2f 2a 20 4f 70 63 6f 64  reak;.}./* Opcod
20a00 65 3a 20 52 65 73 65 74 43 6f 75 6e 74 20 2a 20  e: ResetCount * 
20a10 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68  * * * *.**.** Th
20a20 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 63  e value of the c
20a30 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 69 73  hange counter is
20a40 20 63 6f 70 69 65 64 20 74 6f 20 74 68 65 20 64   copied to the d
20a50 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 0a 2a  atabase handle.*
20a60 2a 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72  * change counter
20a70 20 28 72 65 74 75 72 6e 65 64 20 62 79 20 73 75   (returned by su
20a80 62 73 65 71 75 65 6e 74 20 63 61 6c 6c 73 20 74  bsequent calls t
20a90 6f 20 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65  o sqlite3_change
20aa0 73 28 29 29 2e 0a 2a 2a 20 54 68 65 6e 20 74 68  s())..** Then th
20ab0 65 20 56 4d 73 20 69 6e 74 65 72 6e 61 6c 20 63  e VMs internal c
20ac0 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 72 65  hange counter re
20ad0 73 65 74 73 20 74 6f 20 30 2e 0a 2a 2a 20 54 68  sets to 0..** Th
20ae0 69 73 20 69 73 20 75 73 65 64 20 62 79 20 74 72  is is used by tr
20af0 69 67 67 65 72 20 70 72 6f 67 72 61 6d 73 2e 0a  igger programs..
20b00 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 73 65 74  */.case OP_Reset
20b10 43 6f 75 6e 74 3a 20 7b 0a 20 20 73 71 6c 69 74  Count: {.  sqlit
20b20 65 33 56 64 62 65 53 65 74 43 68 61 6e 67 65 73  e3VdbeSetChanges
20b30 28 64 62 2c 20 70 2d 3e 6e 43 68 61 6e 67 65 29  (db, p->nChange)
20b40 3b 0a 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20 3d  ;.  p->nChange =
20b50 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a   0;.  break;.}..
20b60 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 44 61  /* Opcode: RowDa
20b70 74 61 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  ta P1 P2 * * *.*
20b80 2a 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f 20  *.** Write into 
20b90 72 65 67 69 73 74 65 72 20 50 32 20 74 68 65 20  register P2 the 
20ba0 63 6f 6d 70 6c 65 74 65 20 72 6f 77 20 64 61 74  complete row dat
20bb0 61 20 66 6f 72 20 63 75 72 73 6f 72 20 50 31 2e  a for cursor P1.
20bc0 0a 2a 2a 20 54 68 65 72 65 20 69 73 20 6e 6f 20  .** There is no 
20bd0 69 6e 74 65 72 70 72 65 74 61 74 69 6f 6e 20 6f  interpretation o
20be0 66 20 74 68 65 20 64 61 74 61 2e 20 20 0a 2a 2a  f the data.  .**
20bf0 20 49 74 20 69 73 20 6a 75 73 74 20 63 6f 70 69   It is just copi
20c00 65 64 20 6f 6e 74 6f 20 74 68 65 20 50 32 20 72  ed onto the P2 r
20c10 65 67 69 73 74 65 72 20 65 78 61 63 74 6c 79 20  egister exactly 
20c20 61 73 20 0a 2a 2a 20 69 74 20 69 73 20 66 6f 75  as .** it is fou
20c30 6e 64 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  nd in the databa
20c40 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49  se file..**.** I
20c50 66 20 74 68 65 20 50 31 20 63 75 72 73 6f 72 20  f the P1 cursor 
20c60 6d 75 73 74 20 62 65 20 70 6f 69 6e 74 69 6e 67  must be pointing
20c70 20 74 6f 20 61 20 76 61 6c 69 64 20 72 6f 77 20   to a valid row 
20c80 28 6e 6f 74 20 61 20 4e 55 4c 4c 20 72 6f 77 29  (not a NULL row)
20c90 0a 2a 2a 20 6f 66 20 61 20 72 65 61 6c 20 74 61  .** of a real ta
20ca0 62 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65 75 64  ble, not a pseud
20cb0 6f 2d 74 61 62 6c 65 2e 0a 2a 2f 0a 2f 2a 20 4f  o-table..*/./* O
20cc0 70 63 6f 64 65 3a 20 52 6f 77 4b 65 79 20 50 31  pcode: RowKey P1
20cd0 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
20ce0 57 72 69 74 65 20 69 6e 74 6f 20 72 65 67 69 73  Write into regis
20cf0 74 65 72 20 50 32 20 74 68 65 20 63 6f 6d 70 6c  ter P2 the compl
20d00 65 74 65 20 72 6f 77 20 6b 65 79 20 66 6f 72 20  ete row key for 
20d10 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 54 68  cursor P1..** Th
20d20 65 72 65 20 69 73 20 6e 6f 20 69 6e 74 65 72 70  ere is no interp
20d30 72 65 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  retation of the 
20d40 64 61 74 61 2e 20 20 0a 2a 2a 20 54 68 65 20 6b  data.  .** The k
20d50 65 79 20 69 73 20 63 6f 70 69 65 64 20 6f 6e 74  ey is copied ont
20d60 6f 20 74 68 65 20 50 33 20 72 65 67 69 73 74 65  o the P3 registe
20d70 72 20 65 78 61 63 74 6c 79 20 61 73 20 0a 2a 2a  r exactly as .**
20d80 20 69 74 20 69 73 20 66 6f 75 6e 64 20 69 6e 20   it is found in 
20d90 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
20da0 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  e..**.** If the 
20db0 50 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62  P1 cursor must b
20dc0 65 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 61 20  e pointing to a 
20dd0 76 61 6c 69 64 20 72 6f 77 20 28 6e 6f 74 20 61  valid row (not a
20de0 20 4e 55 4c 4c 20 72 6f 77 29 0a 2a 2a 20 6f 66   NULL row).** of
20df0 20 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e   a real table, n
20e00 6f 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c  ot a pseudo-tabl
20e10 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f  e..*/.case OP_Ro
20e20 77 4b 65 79 3a 0a 63 61 73 65 20 4f 50 5f 52 6f  wKey:.case OP_Ro
20e30 77 44 61 74 61 3a 20 7b 0a 20 20 56 64 62 65 43  wData: {.  VdbeC
20e40 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43  ursor *pC;.  BtC
20e50 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20  ursor *pCrsr;.  
20e60 75 33 32 20 6e 3b 0a 20 20 69 36 34 20 6e 36 34  u32 n;.  i64 n64
20e70 3b 0a 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65  ;..  pOut = &aMe
20e80 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 6d 65  m[pOp->p2];.  me
20e90 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
20ea0 2c 20 70 4f 75 74 29 3b 0a 0a 20 20 2f 2a 20 4e  , pOut);..  /* N
20eb0 6f 74 65 20 74 68 61 74 20 52 6f 77 4b 65 79 20  ote that RowKey 
20ec0 61 6e 64 20 52 6f 77 44 61 74 61 20 61 72 65 20  and RowData are 
20ed0 72 65 61 6c 6c 79 20 65 78 61 63 74 6c 79 20 74  really exactly t
20ee0 68 65 20 73 61 6d 65 20 69 6e 73 74 72 75 63 74  he same instruct
20ef0 69 6f 6e 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ion */.  assert(
20f00 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
20f10 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
20f20 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
20f30 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
20f40 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54   assert( pC->isT
20f50 61 62 6c 65 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63  able || pOp->opc
20f60 6f 64 65 3d 3d 4f 50 5f 52 6f 77 4b 65 79 20 29  ode==OP_RowKey )
20f70 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
20f80 69 73 49 6e 64 65 78 20 7c 7c 20 70 4f 70 2d 3e  isIndex || pOp->
20f90 6f 70 63 6f 64 65 3d 3d 4f 50 5f 52 6f 77 44 61  opcode==OP_RowDa
20fa0 74 61 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  ta );.  assert( 
20fb0 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  pC!=0 );.  asser
20fc0 74 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 3d 3d  t( pC->nullRow==
20fd0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
20fe0 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65  C->pseudoTableRe
20ff0 67 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  g==0 );.  assert
21000 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30  ( pC->pCursor!=0
21010 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43   );.  pCrsr = pC
21020 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 61 73 73  ->pCursor;.  ass
21030 65 72 74 28 20 73 71 6c 69 74 65 33 42 74 72 65  ert( sqlite3Btre
21040 65 43 75 72 73 6f 72 49 73 56 61 6c 69 64 28 70  eCursorIsValid(p
21050 43 72 73 72 29 20 29 3b 0a 0a 20 20 2f 2a 20 54  Crsr) );..  /* T
21060 68 65 20 4f 50 5f 52 6f 77 4b 65 79 20 61 6e 64  he OP_RowKey and
21070 20 4f 50 5f 52 6f 77 44 61 74 61 20 6f 70 63 6f   OP_RowData opco
21080 64 65 73 20 61 6c 77 61 79 73 20 66 6f 6c 6c 6f  des always follo
21090 77 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 20 6f  w OP_NotExists o
210a0 72 0a 20 20 2a 2a 20 4f 50 5f 52 65 77 69 6e 64  r.  ** OP_Rewind
210b0 2f 4f 70 5f 4e 65 78 74 20 77 69 74 68 20 6e 6f  /Op_Next with no
210c0 20 69 6e 74 65 72 76 65 6e 69 6e 67 20 69 6e 73   intervening ins
210d0 74 72 75 63 74 69 6f 6e 73 20 74 68 61 74 20 6d  tructions that m
210e0 69 67 68 74 20 69 6e 76 61 6c 69 64 61 74 65 0a  ight invalidate.
210f0 20 20 2a 2a 20 74 68 65 20 63 75 72 73 6f 72 2e    ** the cursor.
21100 20 20 48 65 6e 63 65 20 74 68 65 20 66 6f 6c 6c    Hence the foll
21110 6f 77 69 6e 67 20 73 71 6c 69 74 65 33 56 64 62  owing sqlite3Vdb
21120 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29 20  eCursorMoveto() 
21130 63 61 6c 6c 20 69 73 20 61 6c 77 61 79 73 0a 20  call is always. 
21140 20 2a 2a 20 61 20 6e 6f 2d 6f 70 20 61 6e 64 20   ** a no-op and 
21150 63 61 6e 20 6e 65 76 65 72 20 66 61 69 6c 2e 20  can never fail. 
21160 20 42 75 74 20 77 65 20 6c 65 61 76 65 20 69 74   But we leave it
21170 20 69 6e 20 70 6c 61 63 65 20 61 73 20 61 20 73   in place as a s
21180 61 66 65 74 79 2e 0a 20 20 2a 2f 0a 20 20 61 73  afety..  */.  as
21190 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72  sert( pC->deferr
211a0 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20  edMoveto==0 );. 
211b0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
211c0 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43  eCursorMoveto(pC
211d0 29 3b 0a 20 20 69 66 28 20 4e 45 56 45 52 28 72  );.  if( NEVER(r
211e0 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 29 20 29 20  c!=SQLITE_OK) ) 
211f0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
21200 6f 5f 65 72 72 6f 72 3b 0a 0a 20 20 69 66 28 20  o_error;..  if( 
21210 70 43 2d 3e 69 73 49 6e 64 65 78 20 29 7b 0a 20  pC->isIndex ){. 
21220 20 20 20 61 73 73 65 72 74 28 20 21 70 43 2d 3e     assert( !pC->
21230 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 20 20 72  isTable );.    r
21240 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
21250 4b 65 79 53 69 7a 65 28 70 43 72 73 72 2c 20 26  KeySize(pCrsr, &
21260 6e 36 34 29 3b 0a 20 20 20 20 61 73 73 65 72 74  n64);.    assert
21270 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
21280 29 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 62 65  );    /* True be
21290 63 61 75 73 65 20 6f 66 20 43 75 72 73 6f 72 4d  cause of CursorM
212a0 6f 76 65 74 6f 28 29 20 63 61 6c 6c 20 61 62 6f  oveto() call abo
212b0 76 65 20 2a 2f 0a 20 20 20 20 69 66 28 20 6e 36  ve */.    if( n6
212c0 34 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c  4>db->aLimit[SQL
212d0 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48  ITE_LIMIT_LENGTH
212e0 5d 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20  ] ){.      goto 
212f0 74 6f 6f 5f 62 69 67 3b 0a 20 20 20 20 7d 0a 20  too_big;.    }. 
21300 20 20 20 6e 20 3d 20 28 75 33 32 29 6e 36 34 3b     n = (u32)n64;
21310 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72 63  .  }else{.    rc
21320 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 44   = sqlite3BtreeD
21330 61 74 61 53 69 7a 65 28 70 43 72 73 72 2c 20 26  ataSize(pCrsr, &
21340 6e 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  n);.    assert( 
21350 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b  rc==SQLITE_OK );
21360 20 20 20 20 2f 2a 20 44 61 74 61 53 69 7a 65 28      /* DataSize(
21370 29 20 63 61 6e 6e 6f 74 20 66 61 69 6c 20 2a 2f  ) cannot fail */
21380 0a 20 20 20 20 69 66 28 20 6e 3e 28 75 33 32 29  .    if( n>(u32)
21390 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54  db->aLimit[SQLIT
213a0 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20  E_LIMIT_LENGTH] 
213b0 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 74 6f  ){.      goto to
213c0 6f 5f 62 69 67 3b 0a 20 20 20 20 7d 0a 20 20 7d  o_big;.    }.  }
213d0 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64  .  if( sqlite3Vd
213e0 62 65 4d 65 6d 47 72 6f 77 28 70 4f 75 74 2c 20  beMemGrow(pOut, 
213f0 6e 2c 20 30 29 20 29 7b 0a 20 20 20 20 67 6f 74  n, 0) ){.    got
21400 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20  o no_mem;.  }.  
21410 70 4f 75 74 2d 3e 6e 20 3d 20 6e 3b 0a 20 20 4d  pOut->n = n;.  M
21420 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f  emSetTypeFlag(pO
21430 75 74 2c 20 4d 45 4d 5f 42 6c 6f 62 29 3b 0a 20  ut, MEM_Blob);. 
21440 20 69 66 28 20 70 43 2d 3e 69 73 49 6e 64 65 78   if( pC->isIndex
21450 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   ){.    rc = sql
21460 69 74 65 33 42 74 72 65 65 4b 65 79 28 70 43 72  ite3BtreeKey(pCr
21470 73 72 2c 20 30 2c 20 6e 2c 20 70 4f 75 74 2d 3e  sr, 0, n, pOut->
21480 7a 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  z);.  }else{.   
21490 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
214a0 65 65 44 61 74 61 28 70 43 72 73 72 2c 20 30 2c  eeData(pCrsr, 0,
214b0 20 6e 2c 20 70 4f 75 74 2d 3e 7a 29 3b 0a 20 20   n, pOut->z);.  
214c0 7d 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20  }.  pOut->enc = 
214d0 53 51 4c 49 54 45 5f 55 54 46 38 3b 20 20 2f 2a  SQLITE_UTF8;  /*
214e0 20 49 6e 20 63 61 73 65 20 74 68 65 20 62 6c 6f   In case the blo
214f0 62 20 69 73 20 65 76 65 72 20 63 61 73 74 20 74  b is ever cast t
21500 6f 20 74 65 78 74 20 2a 2f 0a 20 20 55 50 44 41  o text */.  UPDA
21510 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
21520 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  pOut);.  break;.
21530 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f  }../* Opcode: Ro
21540 77 69 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  wid P1 P2 * * *.
21550 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 69 6e 20 72  **.** Store in r
21560 65 67 69 73 74 65 72 20 50 32 20 61 6e 20 69 6e  egister P2 an in
21570 74 65 67 65 72 20 77 68 69 63 68 20 69 73 20 74  teger which is t
21580 68 65 20 6b 65 79 20 6f 66 20 74 68 65 20 74 61  he key of the ta
21590 62 6c 65 20 65 6e 74 72 79 20 74 68 61 74 0a 2a  ble entry that.*
215a0 2a 20 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c  * P1 is currentl
215b0 79 20 70 6f 69 6e 74 20 74 6f 2e 0a 2a 2a 0a 2a  y point to..**.*
215c0 2a 20 50 31 20 63 61 6e 20 62 65 20 65 69 74 68  * P1 can be eith
215d0 65 72 20 61 6e 20 6f 72 64 69 6e 61 72 79 20 74  er an ordinary t
215e0 61 62 6c 65 20 6f 72 20 61 20 76 69 72 74 75 61  able or a virtua
215f0 6c 20 74 61 62 6c 65 2e 20 20 54 68 65 72 65 20  l table.  There 
21600 75 73 65 64 20 74 6f 0a 2a 2a 20 62 65 20 61 20  used to.** be a 
21610 73 65 70 61 72 61 74 65 20 4f 50 5f 56 52 6f 77  separate OP_VRow
21620 69 64 20 6f 70 63 6f 64 65 20 66 6f 72 20 75 73  id opcode for us
21630 65 20 77 69 74 68 20 76 69 72 74 75 61 6c 20 74  e with virtual t
21640 61 62 6c 65 73 2c 20 62 75 74 20 74 68 69 73 0a  ables, but this.
21650 2a 2a 20 6f 6e 65 20 6f 70 63 6f 64 65 20 6e 6f  ** one opcode no
21660 77 20 77 6f 72 6b 73 20 66 6f 72 20 62 6f 74 68  w works for both
21670 20 74 61 62 6c 65 20 74 79 70 65 73 2e 0a 2a 2f   table types..*/
21680 0a 63 61 73 65 20 4f 50 5f 52 6f 77 69 64 3a 20  .case OP_Rowid: 
21690 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
216a0 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c    /* out2-prerel
216b0 65 61 73 65 20 2a 2f 0a 20 20 56 64 62 65 43 75  ease */.  VdbeCu
216c0 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 36 34 20  rsor *pC;.  i64 
216d0 76 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61  v;.  sqlite3_vta
216e0 62 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f 6e 73  b *pVtab;.  cons
216f0 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65  t sqlite3_module
21700 20 2a 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20 61 73   *pModule;..  as
21710 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
21720 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
21730 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
21740 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
21750 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
21760 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
21770 20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65   pC->pseudoTable
21780 52 65 67 3d 3d 30 20 29 3b 0a 20 20 69 66 28 20  Reg==0 );.  if( 
21790 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20  pC->nullRow ){. 
217a0 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d     pOut->flags =
217b0 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20 62   MEM_Null;.    b
217c0 72 65 61 6b 3b 0a 20 20 7d 65 6c 73 65 20 69 66  reak;.  }else if
217d0 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f  ( pC->deferredMo
217e0 76 65 74 6f 20 29 7b 0a 20 20 20 20 76 20 3d 20  veto ){.    v = 
217f0 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74  pC->movetoTarget
21800 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
21810 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
21820 4c 45 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70  LE.  }else if( p
21830 43 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 20 29  C->pVtabCursor )
21840 7b 0a 20 20 20 20 70 56 74 61 62 20 3d 20 70 43  {.    pVtab = pC
21850 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 2d 3e 70  ->pVtabCursor->p
21860 56 74 61 62 3b 0a 20 20 20 20 70 4d 6f 64 75 6c  Vtab;.    pModul
21870 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75  e = pVtab->pModu
21880 6c 65 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  le;.    assert( 
21890 70 4d 6f 64 75 6c 65 2d 3e 78 52 6f 77 69 64 20  pModule->xRowid 
218a0 29 3b 0a 20 20 20 20 72 63 20 3d 20 70 4d 6f 64  );.    rc = pMod
218b0 75 6c 65 2d 3e 78 52 6f 77 69 64 28 70 43 2d 3e  ule->xRowid(pC->
218c0 70 56 74 61 62 43 75 72 73 6f 72 2c 20 26 76 29  pVtabCursor, &v)
218d0 3b 0a 20 20 20 20 69 6d 70 6f 72 74 56 74 61 62  ;.    importVtab
218e0 45 72 72 4d 73 67 28 70 2c 20 70 56 74 61 62 29  ErrMsg(p, pVtab)
218f0 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  ;.#endif /* SQLI
21900 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
21910 41 42 4c 45 20 2a 2f 0a 20 20 7d 65 6c 73 65 7b  ABLE */.  }else{
21920 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d  .    assert( pC-
21930 3e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20  >pCursor!=0 );. 
21940 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56     rc = sqlite3V
21950 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28  dbeCursorMoveto(
21960 70 43 29 3b 0a 20 20 20 20 69 66 28 20 72 63 20  pC);.    if( rc 
21970 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
21980 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 69  _to_error;.    i
21990 66 28 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61  f( pC->rowidIsVa
219a0 6c 69 64 20 29 7b 0a 20 20 20 20 20 20 76 20 3d  lid ){.      v =
219b0 20 70 43 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 0a   pC->lastRowid;.
219c0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
219d0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
219e0 65 65 4b 65 79 53 69 7a 65 28 70 43 2d 3e 70 43  eeKeySize(pC->pC
219f0 75 72 73 6f 72 2c 20 26 76 29 3b 0a 20 20 20 20  ursor, &v);.    
21a00 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51    assert( rc==SQ
21a10 4c 49 54 45 5f 4f 4b 20 29 3b 20 20 2f 2a 20 41  LITE_OK );  /* A
21a20 6c 77 61 79 73 20 73 6f 20 62 65 63 61 75 73 65  lways so because
21a30 20 6f 66 20 43 75 72 73 6f 72 4d 6f 76 65 74 6f   of CursorMoveto
21a40 28 29 20 61 62 6f 76 65 20 2a 2f 0a 20 20 20 20  () above */.    
21a50 7d 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e  }.  }.  pOut->u.
21a60 69 20 3d 20 76 3b 0a 20 20 62 72 65 61 6b 3b 0a  i = v;.  break;.
21a70 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 75  }../* Opcode: Nu
21a80 6c 6c 52 6f 77 20 50 31 20 2a 20 2a 20 2a 20 2a  llRow P1 * * * *
21a90 0a 2a 2a 0a 2a 2a 20 4d 6f 76 65 20 74 68 65 20  .**.** Move the 
21aa0 63 75 72 73 6f 72 20 50 31 20 74 6f 20 61 20 6e  cursor P1 to a n
21ab0 75 6c 6c 20 72 6f 77 2e 20 20 41 6e 79 20 4f 50  ull row.  Any OP
21ac0 5f 43 6f 6c 75 6d 6e 20 6f 70 65 72 61 74 69 6f  _Column operatio
21ad0 6e 73 0a 2a 2a 20 74 68 61 74 20 6f 63 63 75 72  ns.** that occur
21ae0 20 77 68 69 6c 65 20 74 68 65 20 63 75 72 73 6f   while the curso
21af0 72 20 69 73 20 6f 6e 20 74 68 65 20 6e 75 6c 6c  r is on the null
21b00 20 72 6f 77 20 77 69 6c 6c 20 61 6c 77 61 79 73   row will always
21b10 0a 2a 2a 20 77 72 69 74 65 20 61 20 4e 55 4c 4c  .** write a NULL
21b20 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 75 6c  ..*/.case OP_Nul
21b30 6c 52 6f 77 3a 20 7b 0a 20 20 56 64 62 65 43 75  lRow: {.  VdbeCu
21b40 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 61 73 73  rsor *pC;..  ass
21b50 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
21b60 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
21b70 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
21b80 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
21b90 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
21ba0 3d 30 20 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c  =0 );.  pC->null
21bb0 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43 2d 3e 72  Row = 1;.  pC->r
21bc0 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b  owidIsValid = 0;
21bd0 0a 20 20 69 66 28 20 70 43 2d 3e 70 43 75 72 73  .  if( pC->pCurs
21be0 6f 72 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  or ){.    sqlite
21bf0 33 42 74 72 65 65 43 6c 65 61 72 43 75 72 73 6f  3BtreeClearCurso
21c00 72 28 70 43 2d 3e 70 43 75 72 73 6f 72 29 3b 0a  r(pC->pCursor);.
21c10 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
21c20 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 61 73 74 20  /* Opcode: Last 
21c30 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
21c40 2a 20 54 68 65 20 6e 65 78 74 20 75 73 65 20 6f  * The next use o
21c50 66 20 74 68 65 20 52 6f 77 69 64 20 6f 72 20 43  f the Rowid or C
21c60 6f 6c 75 6d 6e 20 6f 72 20 4e 65 78 74 20 69 6e  olumn or Next in
21c70 73 74 72 75 63 74 69 6f 6e 20 66 6f 72 20 50 31  struction for P1
21c80 20 0a 2a 2a 20 77 69 6c 6c 20 72 65 66 65 72 20   .** will refer 
21c90 74 6f 20 74 68 65 20 6c 61 73 74 20 65 6e 74 72  to the last entr
21ca0 79 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  y in the databas
21cb0 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  e table or index
21cc0 2e 0a 2a 2a 20 49 66 20 74 68 65 20 74 61 62 6c  ..** If the tabl
21cd0 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20 65 6d  e or index is em
21ce0 70 74 79 20 61 6e 64 20 50 32 3e 30 2c 20 74 68  pty and P2>0, th
21cf0 65 6e 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74  en jump immediat
21d00 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 20 49 66  ely to P2..** If
21d10 20 50 32 20 69 73 20 30 20 6f 72 20 69 66 20 74   P2 is 0 or if t
21d20 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  he table or inde
21d30 78 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 2c 20  x is not empty, 
21d40 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20  fall through.** 
21d50 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  to the following
21d60 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f   instruction..*/
21d70 0a 63 61 73 65 20 4f 50 5f 4c 61 73 74 3a 20 7b  .case OP_Last: {
21d80 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
21d90 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  */.  VdbeCursor 
21da0 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20  *pC;.  BtCursor 
21db0 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65  *pCrsr;.  int re
21dc0 73 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  s;..  assert( pO
21dd0 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
21de0 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
21df0 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
21e00 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
21e10 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
21e20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75   pCrsr = pC->pCu
21e30 72 73 6f 72 3b 0a 20 20 69 66 28 20 70 43 72 73  rsor;.  if( pCrs
21e40 72 3d 3d 30 20 29 7b 0a 20 20 20 20 72 65 73 20  r==0 ){.    res 
21e50 3d 20 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  = 1;.  }else{.  
21e60 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
21e70 72 65 65 4c 61 73 74 28 70 43 72 73 72 2c 20 26  reeLast(pCrsr, &
21e80 72 65 73 29 3b 0a 20 20 7d 0a 20 20 70 43 2d 3e  res);.  }.  pC->
21e90 6e 75 6c 6c 52 6f 77 20 3d 20 28 75 38 29 72 65  nullRow = (u8)re
21ea0 73 3b 0a 20 20 70 43 2d 3e 64 65 66 65 72 72 65  s;.  pC->deferre
21eb0 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 70  dMoveto = 0;.  p
21ec0 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20  C->rowidIsValid 
21ed0 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65  = 0;.  pC->cache
21ee0 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53  Status = CACHE_S
21ef0 54 41 4c 45 3b 0a 20 20 69 66 28 20 70 4f 70 2d  TALE;.  if( pOp-
21f00 3e 70 32 3e 30 20 26 26 20 72 65 73 20 29 7b 0a  >p2>0 && res ){.
21f10 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
21f20 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61   - 1;.  }.  brea
21f30 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65  k;.}.../* Opcode
21f40 3a 20 53 6f 72 74 20 50 31 20 50 32 20 2a 20 2a  : Sort P1 P2 * *
21f50 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70   *.**.** This op
21f60 63 6f 64 65 20 64 6f 65 73 20 65 78 61 63 74 6c  code does exactl
21f70 79 20 74 68 65 20 73 61 6d 65 20 74 68 69 6e 67  y the same thing
21f80 20 61 73 20 4f 50 5f 52 65 77 69 6e 64 20 65 78   as OP_Rewind ex
21f90 63 65 70 74 20 74 68 61 74 0a 2a 2a 20 69 74 20  cept that.** it 
21fa0 69 6e 63 72 65 6d 65 6e 74 73 20 61 6e 20 75 6e  increments an un
21fb0 64 6f 63 75 6d 65 6e 74 65 64 20 67 6c 6f 62 61  documented globa
21fc0 6c 20 76 61 72 69 61 62 6c 65 20 75 73 65 64 20  l variable used 
21fd0 66 6f 72 20 74 65 73 74 69 6e 67 2e 0a 2a 2a 0a  for testing..**.
21fe0 2a 2a 20 53 6f 72 74 69 6e 67 20 69 73 20 61 63  ** Sorting is ac
21ff0 63 6f 6d 70 6c 69 73 68 65 64 20 62 79 20 77 72  complished by wr
22000 69 74 69 6e 67 20 72 65 63 6f 72 64 73 20 69 6e  iting records in
22010 74 6f 20 61 20 73 6f 72 74 69 6e 67 20 69 6e 64  to a sorting ind
22020 65 78 2c 0a 2a 2a 20 74 68 65 6e 20 72 65 77 69  ex,.** then rewi
22030 6e 64 69 6e 67 20 74 68 61 74 20 69 6e 64 65 78  nding that index
22040 20 61 6e 64 20 70 6c 61 79 69 6e 67 20 69 74 20   and playing it 
22050 62 61 63 6b 20 66 72 6f 6d 20 62 65 67 69 6e 6e  back from beginn
22060 69 6e 67 20 74 6f 0a 2a 2a 20 65 6e 64 2e 20 20  ing to.** end.  
22070 57 65 20 75 73 65 20 74 68 65 20 4f 50 5f 53 6f  We use the OP_So
22080 72 74 20 6f 70 63 6f 64 65 20 69 6e 73 74 65 61  rt opcode instea
22090 64 20 6f 66 20 4f 50 5f 52 65 77 69 6e 64 20 74  d of OP_Rewind t
220a0 6f 20 64 6f 20 74 68 65 0a 2a 2a 20 72 65 77 69  o do the.** rewi
220b0 6e 64 69 6e 67 20 73 6f 20 74 68 61 74 20 74 68  nding so that th
220c0 65 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c  e global variabl
220d0 65 20 77 69 6c 6c 20 62 65 20 69 6e 63 72 65 6d  e will be increm
220e0 65 6e 74 65 64 20 61 6e 64 0a 2a 2a 20 72 65 67  ented and.** reg
220f0 72 65 73 73 69 6f 6e 20 74 65 73 74 73 20 63 61  ression tests ca
22100 6e 20 64 65 74 65 72 6d 69 6e 65 20 77 68 65 74  n determine whet
22110 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 6f  her or not the o
22120 70 74 69 6d 69 7a 65 72 20 69 73 0a 2a 2a 20 63  ptimizer is.** c
22130 6f 72 72 65 63 74 6c 79 20 6f 70 74 69 6d 69 7a  orrectly optimiz
22140 69 6e 67 20 6f 75 74 20 73 6f 72 74 73 2e 0a 2a  ing out sorts..*
22150 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 3a 20  /.case OP_Sort: 
22160 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70  {        /* jump
22170 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54   */.#ifdef SQLIT
22180 45 5f 54 45 53 54 0a 20 20 73 71 6c 69 74 65 33  E_TEST.  sqlite3
22190 5f 73 6f 72 74 5f 63 6f 75 6e 74 2b 2b 3b 0a 20  _sort_count++;. 
221a0 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f   sqlite3_search_
221b0 63 6f 75 6e 74 2d 2d 3b 0a 23 65 6e 64 69 66 0a  count--;.#endif.
221c0 20 20 70 2d 3e 61 43 6f 75 6e 74 65 72 5b 53 51    p->aCounter[SQ
221d0 4c 49 54 45 5f 53 54 4d 54 53 54 41 54 55 53 5f  LITE_STMTSTATUS_
221e0 53 4f 52 54 2d 31 5d 2b 2b 3b 0a 20 20 2f 2a 20  SORT-1]++;.  /* 
221f0 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e 74  Fall through int
22200 6f 20 4f 50 5f 52 65 77 69 6e 64 20 2a 2f 0a 7d  o OP_Rewind */.}
22210 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 77 69  ./* Opcode: Rewi
22220 6e 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  nd P1 P2 * * *.*
22230 2a 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 75 73  *.** The next us
22240 65 20 6f 66 20 74 68 65 20 52 6f 77 69 64 20 6f  e of the Rowid o
22250 72 20 43 6f 6c 75 6d 6e 20 6f 72 20 4e 65 78 74  r Column or Next
22260 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 66 6f 72   instruction for
22270 20 50 31 20 0a 2a 2a 20 77 69 6c 6c 20 72 65 66   P1 .** will ref
22280 65 72 20 74 6f 20 74 68 65 20 66 69 72 73 74 20  er to the first 
22290 65 6e 74 72 79 20 69 6e 20 74 68 65 20 64 61 74  entry in the dat
222a0 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20 69  abase table or i
222b0 6e 64 65 78 2e 0a 2a 2a 20 49 66 20 74 68 65 20  ndex..** If the 
222c0 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 69  table or index i
222d0 73 20 65 6d 70 74 79 20 61 6e 64 20 50 32 3e 30  s empty and P2>0
222e0 2c 20 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65  , then jump imme
222f0 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a  diately to P2..*
22300 2a 20 49 66 20 50 32 20 69 73 20 30 20 6f 72 20  * If P2 is 0 or 
22310 69 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20  if the table or 
22320 69 6e 64 65 78 20 69 73 20 6e 6f 74 20 65 6d 70  index is not emp
22330 74 79 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  ty, fall through
22340 0a 2a 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f  .** to the follo
22350 77 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e  wing instruction
22360 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 77  ..*/.case OP_Rew
22370 69 6e 64 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  ind: {        /*
22380 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43   jump */.  VdbeC
22390 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43  ursor *pC;.  BtC
223a0 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20  ursor *pCrsr;.  
223b0 69 6e 74 20 72 65 73 3b 0a 0a 20 20 61 73 73 65  int res;..  asse
223c0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
223d0 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
223e0 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
223f0 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
22400 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
22410 30 20 29 3b 0a 20 20 72 65 73 20 3d 20 31 3b 0a  0 );.  res = 1;.
22420 20 20 69 66 28 20 28 70 43 72 73 72 20 3d 20 70    if( (pCrsr = p
22430 43 2d 3e 70 43 75 72 73 6f 72 29 21 3d 30 20 29  C->pCursor)!=0 )
22440 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  {.    rc = sqlit
22450 65 33 42 74 72 65 65 46 69 72 73 74 28 70 43 72  e3BtreeFirst(pCr
22460 73 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 70  sr, &res);.    p
22470 43 2d 3e 61 74 46 69 72 73 74 20 3d 20 72 65 73  C->atFirst = res
22480 3d 3d 30 20 3f 31 3a 30 3b 0a 20 20 20 20 70 43  ==0 ?1:0;.    pC
22490 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
224a0 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e 63 61   = 0;.    pC->ca
224b0 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
224c0 45 5f 53 54 41 4c 45 3b 0a 20 20 20 20 70 43 2d  E_STALE;.    pC-
224d0 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20  >rowidIsValid = 
224e0 30 3b 0a 20 20 7d 0a 20 20 70 43 2d 3e 6e 75 6c  0;.  }.  pC->nul
224f0 6c 52 6f 77 20 3d 20 28 75 38 29 72 65 73 3b 0a  lRow = (u8)res;.
22500 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
22510 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 3c 70  2>0 && pOp->p2<p
22520 2d 3e 6e 4f 70 20 29 3b 0a 20 20 69 66 28 20 72  ->nOp );.  if( r
22530 65 73 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70  es ){.    pc = p
22540 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a  Op->p2 - 1;.  }.
22550 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
22560 70 63 6f 64 65 3a 20 4e 65 78 74 20 50 31 20 50  pcode: Next P1 P
22570 32 20 2a 20 2a 20 50 35 0a 2a 2a 0a 2a 2a 20 41  2 * * P5.**.** A
22580 64 76 61 6e 63 65 20 63 75 72 73 6f 72 20 50 31  dvance cursor P1
22590 20 73 6f 20 74 68 61 74 20 69 74 20 70 6f 69 6e   so that it poin
225a0 74 73 20 74 6f 20 74 68 65 20 6e 65 78 74 20 6b  ts to the next k
225b0 65 79 2f 64 61 74 61 20 70 61 69 72 20 69 6e 20  ey/data pair in 
225c0 69 74 73 0a 2a 2a 20 74 61 62 6c 65 20 6f 72 20  its.** table or 
225d0 69 6e 64 65 78 2e 20 20 49 66 20 74 68 65 72 65  index.  If there
225e0 20 61 72 65 20 6e 6f 20 6d 6f 72 65 20 6b 65 79   are no more key
225f0 2f 76 61 6c 75 65 20 70 61 69 72 73 20 74 68 65  /value pairs the
22600 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a  n fall through.*
22610 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69  * to the followi
22620 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20  ng instruction. 
22630 20 42 75 74 20 69 66 20 74 68 65 20 63 75 72 73   But if the curs
22640 6f 72 20 61 64 76 61 6e 63 65 20 77 61 73 20 73  or advance was s
22650 75 63 63 65 73 73 66 75 6c 2c 0a 2a 2a 20 6a 75  uccessful,.** ju
22660 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74  mp immediately t
22670 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  o P2..**.** The 
22680 50 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62  P1 cursor must b
22690 65 20 66 6f 72 20 61 20 72 65 61 6c 20 74 61 62  e for a real tab
226a0 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65 75 64 6f  le, not a pseudo
226b0 2d 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66  -table..**.** If
226c0 20 50 35 20 69 73 20 70 6f 73 69 74 69 76 65 20   P5 is positive 
226d0 61 6e 64 20 74 68 65 20 6a 75 6d 70 20 69 73 20  and the jump is 
226e0 74 61 6b 65 6e 2c 20 74 68 65 6e 20 65 76 65 6e  taken, then even
226f0 74 20 63 6f 75 6e 74 65 72 0a 2a 2a 20 6e 75 6d  t counter.** num
22700 62 65 72 20 50 35 2d 31 20 69 6e 20 74 68 65 20  ber P5-1 in the 
22710 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65  prepared stateme
22720 6e 74 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65  nt is incremente
22730 64 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  d..**.** See als
22740 6f 3a 20 50 72 65 76 0a 2a 2f 0a 2f 2a 20 4f 70  o: Prev.*/./* Op
22750 63 6f 64 65 3a 20 50 72 65 76 20 50 31 20 50 32  code: Prev P1 P2
22760 20 2a 20 2a 20 50 35 0a 2a 2a 0a 2a 2a 20 42 61   * * P5.**.** Ba
22770 63 6b 20 75 70 20 63 75 72 73 6f 72 20 50 31 20  ck up cursor P1 
22780 73 6f 20 74 68 61 74 20 69 74 20 70 6f 69 6e 74  so that it point
22790 73 20 74 6f 20 74 68 65 20 70 72 65 76 69 6f 75  s to the previou
227a0 73 20 6b 65 79 2f 64 61 74 61 20 70 61 69 72 20  s key/data pair 
227b0 69 6e 20 69 74 73 0a 2a 2a 20 74 61 62 6c 65 20  in its.** table 
227c0 6f 72 20 69 6e 64 65 78 2e 20 20 49 66 20 74 68  or index.  If th
227d0 65 72 65 20 69 73 20 6e 6f 20 70 72 65 76 69 6f  ere is no previo
227e0 75 73 20 6b 65 79 2f 76 61 6c 75 65 20 70 61 69  us key/value pai
227f0 72 73 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72  rs then fall thr
22800 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66  ough.** to the f
22810 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75 63  ollowing instruc
22820 74 69 6f 6e 2e 20 20 42 75 74 20 69 66 20 74 68  tion.  But if th
22830 65 20 63 75 72 73 6f 72 20 62 61 63 6b 75 70 20  e cursor backup 
22840 77 61 73 20 73 75 63 63 65 73 73 66 75 6c 2c 0a  was successful,.
22850 2a 2a 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74  ** jump immediat
22860 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a  ely to P2..**.**
22870 20 54 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d   The P1 cursor m
22880 75 73 74 20 62 65 20 66 6f 72 20 61 20 72 65 61  ust be for a rea
22890 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20 70  l table, not a p
228a0 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2a 0a  seudo-table..**.
228b0 2a 2a 20 49 66 20 50 35 20 69 73 20 70 6f 73 69  ** If P5 is posi
228c0 74 69 76 65 20 61 6e 64 20 74 68 65 20 6a 75 6d  tive and the jum
228d0 70 20 69 73 20 74 61 6b 65 6e 2c 20 74 68 65 6e  p is taken, then
228e0 20 65 76 65 6e 74 20 63 6f 75 6e 74 65 72 0a 2a   event counter.*
228f0 2a 20 6e 75 6d 62 65 72 20 50 35 2d 31 20 69 6e  * number P5-1 in
22900 20 74 68 65 20 70 72 65 70 61 72 65 64 20 73 74   the prepared st
22910 61 74 65 6d 65 6e 74 20 69 73 20 69 6e 63 72 65  atement is incre
22920 6d 65 6e 74 65 64 2e 0a 2a 2f 0a 63 61 73 65 20  mented..*/.case 
22930 4f 50 5f 50 72 65 76 3a 20 20 20 20 20 20 20 20  OP_Prev:        
22940 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73    /* jump */.cas
22950 65 20 4f 50 5f 4e 65 78 74 3a 20 7b 20 20 20 20  e OP_Next: {    
22960 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20      /* jump */. 
22970 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
22980 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72  .  BtCursor *pCr
22990 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 0a  sr;.  int res;..
229a0 20 20 43 48 45 43 4b 5f 46 4f 52 5f 49 4e 54 45    CHECK_FOR_INTE
229b0 52 52 55 50 54 3b 0a 20 20 61 73 73 65 72 74 28  RRUPT;.  assert(
229c0 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
229d0 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
229e0 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  r );.  assert( p
229f0 4f 70 2d 3e 70 35 3c 3d 41 72 72 61 79 53 69 7a  Op->p5<=ArraySiz
22a00 65 28 70 2d 3e 61 43 6f 75 6e 74 65 72 29 20 29  e(p->aCounter) )
22a10 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
22a20 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66  r[pOp->p1];.  if
22a30 28 20 70 43 3d 3d 30 20 29 7b 0a 20 20 20 20 62  ( pC==0 ){.    b
22a40 72 65 61 6b 3b 20 20 2f 2a 20 53 65 65 20 74 69  reak;  /* See ti
22a50 63 6b 65 74 20 23 32 32 37 33 20 2a 2f 0a 20 20  cket #2273 */.  
22a60 7d 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e  }.  pCrsr = pC->
22a70 70 43 75 72 73 6f 72 3b 0a 20 20 69 66 28 20 70  pCursor;.  if( p
22a80 43 72 73 72 3d 3d 30 20 29 7b 0a 20 20 20 20 70  Crsr==0 ){.    p
22a90 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a  C->nullRow = 1;.
22aa0 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20      break;.  }. 
22ab0 20 72 65 73 20 3d 20 31 3b 0a 20 20 61 73 73 65   res = 1;.  asse
22ac0 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64  rt( pC->deferred
22ad0 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 72  Moveto==0 );.  r
22ae0 63 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  c = pOp->opcode=
22af0 3d 4f 50 5f 4e 65 78 74 20 3f 20 73 71 6c 69 74  =OP_Next ? sqlit
22b00 65 33 42 74 72 65 65 4e 65 78 74 28 70 43 72 73  e3BtreeNext(pCrs
22b10 72 2c 20 26 72 65 73 29 20 3a 0a 20 20 20 20 20  r, &res) :.     
22b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22b30 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
22b40 42 74 72 65 65 50 72 65 76 69 6f 75 73 28 70 43  BtreePrevious(pC
22b50 72 73 72 2c 20 26 72 65 73 29 3b 0a 20 20 70 43  rsr, &res);.  pC
22b60 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 28 75 38 29  ->nullRow = (u8)
22b70 72 65 73 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65  res;.  pC->cache
22b80 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53  Status = CACHE_S
22b90 54 41 4c 45 3b 0a 20 20 69 66 28 20 72 65 73 3d  TALE;.  if( res=
22ba0 3d 30 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70  =0 ){.    pc = p
22bb0 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20  Op->p2 - 1;.    
22bc0 69 66 28 20 70 4f 70 2d 3e 70 35 20 29 20 70 2d  if( pOp->p5 ) p-
22bd0 3e 61 43 6f 75 6e 74 65 72 5b 70 4f 70 2d 3e 70  >aCounter[pOp->p
22be0 35 2d 31 5d 2b 2b 3b 0a 23 69 66 64 65 66 20 53  5-1]++;.#ifdef S
22bf0 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 20 20 73  QLITE_TEST.    s
22c00 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f 63 6f  qlite3_search_co
22c10 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a 20 20  unt++;.#endif.  
22c20 7d 0a 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56  }.  pC->rowidIsV
22c30 61 6c 69 64 20 3d 20 30 3b 0a 20 20 62 72 65 61  alid = 0;.  brea
22c40 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
22c50 20 49 64 78 49 6e 73 65 72 74 20 50 31 20 50 32   IdxInsert P1 P2
22c60 20 50 33 20 2a 20 50 35 0a 2a 2a 0a 2a 2a 20 52   P3 * P5.**.** R
22c70 65 67 69 73 74 65 72 20 50 32 20 68 6f 6c 64 73  egister P2 holds
22c80 20 61 20 53 51 4c 20 69 6e 64 65 78 20 6b 65 79   a SQL index key
22c90 20 6d 61 64 65 20 75 73 69 6e 67 20 74 68 65 0a   made using the.
22ca0 2a 2a 20 4d 61 6b 65 52 65 63 6f 72 64 20 69 6e  ** MakeRecord in
22cb0 73 74 72 75 63 74 69 6f 6e 73 2e 20 20 54 68 69  structions.  Thi
22cc0 73 20 6f 70 63 6f 64 65 20 77 72 69 74 65 73 20  s opcode writes 
22cd0 74 68 61 74 20 6b 65 79 0a 2a 2a 20 69 6e 74 6f  that key.** into
22ce0 20 74 68 65 20 69 6e 64 65 78 20 50 31 2e 20 20   the index P1.  
22cf0 44 61 74 61 20 66 6f 72 20 74 68 65 20 65 6e 74  Data for the ent
22d00 72 79 20 69 73 20 6e 69 6c 2e 0a 2a 2a 0a 2a 2a  ry is nil..**.**
22d10 20 50 33 20 69 73 20 61 20 66 6c 61 67 20 74 68   P3 is a flag th
22d20 61 74 20 70 72 6f 76 69 64 65 73 20 61 20 68 69  at provides a hi
22d30 6e 74 20 74 6f 20 74 68 65 20 62 2d 74 72 65 65  nt to the b-tree
22d40 20 6c 61 79 65 72 20 74 68 61 74 20 74 68 69 73   layer that this
22d50 0a 2a 2a 20 69 6e 73 65 72 74 20 69 73 20 6c 69  .** insert is li
22d60 6b 65 6c 79 20 74 6f 20 62 65 20 61 6e 20 61 70  kely to be an ap
22d70 70 65 6e 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  pend..**.** This
22d80 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 6c   instruction onl
22d90 79 20 77 6f 72 6b 73 20 66 6f 72 20 69 6e 64 69  y works for indi
22da0 63 65 73 2e 20 20 54 68 65 20 65 71 75 69 76 61  ces.  The equiva
22db0 6c 65 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  lent instruction
22dc0 0a 2a 2a 20 66 6f 72 20 74 61 62 6c 65 73 20 69  .** for tables i
22dd0 73 20 4f 50 5f 49 6e 73 65 72 74 2e 0a 2a 2f 0a  s OP_Insert..*/.
22de0 63 61 73 65 20 4f 50 5f 49 64 78 49 6e 73 65 72  case OP_IdxInser
22df0 74 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 69  t: {        /* i
22e00 6e 32 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73  n2 */.  VdbeCurs
22e10 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73  or *pC;.  BtCurs
22e20 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74  or *pCrsr;.  int
22e30 20 6e 4b 65 79 3b 0a 20 20 63 6f 6e 73 74 20 63   nKey;.  const c
22e40 68 61 72 20 2a 7a 4b 65 79 3b 0a 0a 20 20 61 73  har *zKey;..  as
22e50 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
22e60 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
22e70 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
22e80 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
22e90 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
22ea0 21 3d 30 20 29 3b 0a 20 20 70 49 6e 32 20 3d 20  !=0 );.  pIn2 = 
22eb0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
22ec0 20 20 61 73 73 65 72 74 28 20 70 49 6e 32 2d 3e    assert( pIn2->
22ed0 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62  flags & MEM_Blob
22ee0 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43   );.  pCrsr = pC
22ef0 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 69 66 28  ->pCursor;.  if(
22f00 20 41 4c 57 41 59 53 28 70 43 72 73 72 21 3d 30   ALWAYS(pCrsr!=0
22f10 29 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  ) ){.    assert(
22f20 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20   pC->isTable==0 
22f30 29 3b 0a 20 20 20 20 72 63 20 3d 20 45 78 70 61  );.    rc = Expa
22f40 6e 64 42 6c 6f 62 28 70 49 6e 32 29 3b 0a 20 20  ndBlob(pIn2);.  
22f50 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
22f60 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 6e 4b 65  _OK ){.      nKe
22f70 79 20 3d 20 70 49 6e 32 2d 3e 6e 3b 0a 20 20 20  y = pIn2->n;.   
22f80 20 20 20 7a 4b 65 79 20 3d 20 70 49 6e 32 2d 3e     zKey = pIn2->
22f90 7a 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71  z;.      rc = sq
22fa0 6c 69 74 65 33 42 74 72 65 65 49 6e 73 65 72 74  lite3BtreeInsert
22fb0 28 70 43 72 73 72 2c 20 7a 4b 65 79 2c 20 6e 4b  (pCrsr, zKey, nK
22fc0 65 79 2c 20 22 22 2c 20 30 2c 20 30 2c 20 70 4f  ey, "", 0, 0, pO
22fd0 70 2d 3e 70 33 2c 20 0a 20 20 20 20 20 20 20 20  p->p3, .        
22fe0 20 20 28 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50    ((pOp->p5 & OP
22ff0 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55  FLAG_USESEEKRESU
23000 4c 54 29 20 3f 20 70 43 2d 3e 73 65 65 6b 52 65  LT) ? pC->seekRe
23010 73 75 6c 74 20 3a 20 30 29 0a 20 20 20 20 20 20  sult : 0).      
23020 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
23030 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
23040 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20  eto==0 );.      
23050 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20  pC->cacheStatus 
23060 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20  = CACHE_STALE;. 
23070 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b     }.  }.  break
23080 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
23090 49 64 78 44 65 6c 65 74 65 20 50 31 20 50 32 20  IdxDelete P1 P2 
230a0 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65  P3 * *.**.** The
230b0 20 63 6f 6e 74 65 6e 74 20 6f 66 20 50 33 20 72   content of P3 r
230c0 65 67 69 73 74 65 72 73 20 73 74 61 72 74 69 6e  egisters startin
230d0 67 20 61 74 20 72 65 67 69 73 74 65 72 20 50 32  g at register P2
230e0 20 66 6f 72 6d 0a 2a 2a 20 61 6e 20 75 6e 70 61   form.** an unpa
230f0 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20  cked index key. 
23100 54 68 69 73 20 6f 70 63 6f 64 65 20 72 65 6d 6f  This opcode remo
23110 76 65 73 20 74 68 61 74 20 65 6e 74 72 79 20 66  ves that entry f
23120 72 6f 6d 20 74 68 65 20 0a 2a 2a 20 69 6e 64 65  rom the .** inde
23130 78 20 6f 70 65 6e 65 64 20 62 79 20 63 75 72 73  x opened by curs
23140 6f 72 20 50 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f  or P1..*/.case O
23150 50 5f 49 64 78 44 65 6c 65 74 65 3a 20 7b 0a 20  P_IdxDelete: {. 
23160 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
23170 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72  .  BtCursor *pCr
23180 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20  sr;.  int res;. 
23190 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20   UnpackedRecord 
231a0 72 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  r;..  assert( pO
231b0 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 61 73 73  p->p3>0 );.  ass
231c0 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 26  ert( pOp->p2>0 &
231d0 26 20 70 4f 70 2d 3e 70 32 2b 70 4f 70 2d 3e 70  & pOp->p2+pOp->p
231e0 33 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31 20 29 3b 0a  3<=p->nMem+1 );.
231f0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
23200 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
23210 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
23220 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
23230 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
23240 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 70 43 72  ( pC!=0 );.  pCr
23250 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72  sr = pC->pCursor
23260 3b 0a 20 20 69 66 28 20 41 4c 57 41 59 53 28 70  ;.  if( ALWAYS(p
23270 43 72 73 72 21 3d 30 29 20 29 7b 0a 20 20 20 20  Crsr!=0) ){.    
23280 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d  r.pKeyInfo = pC-
23290 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 72  >pKeyInfo;.    r
232a0 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31 36 29 70  .nField = (u16)p
232b0 4f 70 2d 3e 70 33 3b 0a 20 20 20 20 72 2e 66 6c  Op->p3;.    r.fl
232c0 61 67 73 20 3d 20 30 3b 0a 20 20 20 20 72 2e 61  ags = 0;.    r.a
232d0 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Mem = &aMem[pOp-
232e0 3e 70 32 5d 3b 0a 23 69 66 64 65 66 20 53 51 4c  >p2];.#ifdef SQL
232f0 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20 7b 20  ITE_DEBUG.    { 
23300 69 6e 74 20 69 3b 20 66 6f 72 28 69 3d 30 3b 20  int i; for(i=0; 
23310 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b 29  i<r.nField; i++)
23320 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
23330 6c 69 64 28 26 72 2e 61 4d 65 6d 5b 69 5d 29 20  lid(&r.aMem[i]) 
23340 29 3b 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20  ); }.#endif.    
23350 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
23360 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28  eMovetoUnpacked(
23370 70 43 72 73 72 2c 20 26 72 2c 20 30 2c 20 30 2c  pCrsr, &r, 0, 0,
23380 20 26 72 65 73 29 3b 0a 20 20 20 20 69 66 28 20   &res);.    if( 
23390 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26  rc==SQLITE_OK &&
233a0 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 20   res==0 ){.     
233b0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
233c0 65 65 44 65 6c 65 74 65 28 70 43 72 73 72 29 3b  eeDelete(pCrsr);
233d0 0a 20 20 20 20 7d 0a 20 20 20 20 61 73 73 65 72  .    }.    asser
233e0 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d  t( pC->deferredM
233f0 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 20 20  oveto==0 );.    
23400 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20  pC->cacheStatus 
23410 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20  = CACHE_STALE;. 
23420 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
23430 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 52 6f 77  * Opcode: IdxRow
23440 69 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  id P1 P2 * * *.*
23450 2a 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f 20  *.** Write into 
23460 72 65 67 69 73 74 65 72 20 50 32 20 61 6e 20 69  register P2 an i
23470 6e 74 65 67 65 72 20 77 68 69 63 68 20 69 73 20  nteger which is 
23480 74 68 65 20 6c 61 73 74 20 65 6e 74 72 79 20 69  the last entry i
23490 6e 20 74 68 65 20 72 65 63 6f 72 64 20 61 74 0a  n the record at.
234a0 2a 2a 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  ** the end of th
234b0 65 20 69 6e 64 65 78 20 6b 65 79 20 70 6f 69 6e  e index key poin
234c0 74 65 64 20 74 6f 20 62 79 20 63 75 72 73 6f 72  ted to by cursor
234d0 20 50 31 2e 20 20 54 68 69 73 20 69 6e 74 65 67   P1.  This integ
234e0 65 72 20 73 68 6f 75 6c 64 20 62 65 0a 2a 2a 20  er should be.** 
234f0 74 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68 65  the rowid of the
23500 20 74 61 62 6c 65 20 65 6e 74 72 79 20 74 6f 20   table entry to 
23510 77 68 69 63 68 20 74 68 69 73 20 69 6e 64 65 78  which this index
23520 20 65 6e 74 72 79 20 70 6f 69 6e 74 73 2e 0a 2a   entry points..*
23530 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 52  *.** See also: R
23540 6f 77 69 64 2c 20 4d 61 6b 65 52 65 63 6f 72 64  owid, MakeRecord
23550 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78  ..*/.case OP_Idx
23560 52 6f 77 69 64 3a 20 7b 20 20 20 20 20 20 20 20  Rowid: {        
23570 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72        /* out2-pr
23580 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 42 74  erelease */.  Bt
23590 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20  Cursor *pCrsr;. 
235a0 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
235b0 0a 20 20 69 36 34 20 72 6f 77 69 64 3b 0a 0a 20  .  i64 rowid;.. 
235c0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
235d0 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
235e0 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  ->nCursor );.  p
235f0 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
23600 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
23610 20 70 43 21 3d 30 20 29 3b 0a 20 20 70 43 72 73   pC!=0 );.  pCrs
23620 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b  r = pC->pCursor;
23630 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d  .  pOut->flags =
23640 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 69 66 28   MEM_Null;.  if(
23650 20 41 4c 57 41 59 53 28 70 43 72 73 72 21 3d 30   ALWAYS(pCrsr!=0
23660 29 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71  ) ){.    rc = sq
23670 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d  lite3VdbeCursorM
23680 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20 20 20 69  oveto(pC);.    i
23690 66 28 20 4e 45 56 45 52 28 72 63 29 20 29 20 67  f( NEVER(rc) ) g
236a0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
236b0 5f 65 72 72 6f 72 3b 0a 20 20 20 20 61 73 73 65  _error;.    asse
236c0 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64  rt( pC->deferred
236d0 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 20  Moveto==0 );.   
236e0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54   assert( pC->isT
236f0 61 62 6c 65 3d 3d 30 20 29 3b 0a 20 20 20 20 69  able==0 );.    i
23700 66 28 20 21 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20  f( !pC->nullRow 
23710 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71  ){.      rc = sq
23720 6c 69 74 65 33 56 64 62 65 49 64 78 52 6f 77 69  lite3VdbeIdxRowi
23730 64 28 64 62 2c 20 70 43 72 73 72 2c 20 26 72 6f  d(db, pCrsr, &ro
23740 77 69 64 29 3b 0a 20 20 20 20 20 20 69 66 28 20  wid);.      if( 
23750 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc!=SQLITE_OK ){
23760 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62  .        goto ab
23770 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
23780 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
23790 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 72 6f 77 69  pOut->u.i = rowi
237a0 64 3b 0a 20 20 20 20 20 20 70 4f 75 74 2d 3e 66  d;.      pOut->f
237b0 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a  lags = MEM_Int;.
237c0 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61      }.  }.  brea
237d0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
237e0 20 49 64 78 47 45 20 50 31 20 50 32 20 50 33 20   IdxGE P1 P2 P3 
237f0 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 65 20  P4 P5.**.** The 
23800 50 34 20 72 65 67 69 73 74 65 72 20 76 61 6c 75  P4 register valu
23810 65 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74  es beginning wit
23820 68 20 50 33 20 66 6f 72 6d 20 61 6e 20 75 6e 70  h P3 form an unp
23830 61 63 6b 65 64 20 69 6e 64 65 78 20 0a 2a 2a 20  acked index .** 
23840 6b 65 79 20 74 68 61 74 20 6f 6d 69 74 73 20 74  key that omits t
23850 68 65 20 52 4f 57 49 44 2e 20 20 43 6f 6d 70 61  he ROWID.  Compa
23860 72 65 20 74 68 69 73 20 6b 65 79 20 76 61 6c 75  re this key valu
23870 65 20 61 67 61 69 6e 73 74 20 74 68 65 20 69 6e  e against the in
23880 64 65 78 20 0a 2a 2a 20 74 68 61 74 20 50 31 20  dex .** that P1 
23890 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69  is currently poi
238a0 6e 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69  nting to, ignori
238b0 6e 67 20 74 68 65 20 52 4f 57 49 44 20 6f 6e 20  ng the ROWID on 
238c0 74 68 65 20 50 31 20 69 6e 64 65 78 2e 0a 2a 2a  the P1 index..**
238d0 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20 69 6e  .** If the P1 in
238e0 64 65 78 20 65 6e 74 72 79 20 69 73 20 67 72 65  dex entry is gre
238f0 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75  ater than or equ
23900 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 76 61  al to the key va
23910 6c 75 65 0a 2a 2a 20 74 68 65 6e 20 6a 75 6d 70  lue.** then jump
23920 20 74 6f 20 50 32 2e 20 20 4f 74 68 65 72 77 69   to P2.  Otherwi
23930 73 65 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20  se fall through 
23940 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74  to the next inst
23950 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49  ruction..**.** I
23960 66 20 50 35 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f  f P5 is non-zero
23970 20 74 68 65 6e 20 74 68 65 20 6b 65 79 20 76 61   then the key va
23980 6c 75 65 20 69 73 20 69 6e 63 72 65 61 73 65 64  lue is increased
23990 20 62 79 20 61 6e 20 65 70 73 69 6c 6f 6e 20 0a   by an epsilon .
239a0 2a 2a 20 70 72 69 6f 72 20 74 6f 20 74 68 65 20  ** prior to the 
239b0 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 54 68 69  comparison.  Thi
239c0 73 20 6d 61 6b 65 20 74 68 65 20 6f 70 63 6f 64  s make the opcod
239d0 65 20 77 6f 72 6b 20 6c 69 6b 65 20 49 64 78 47  e work like IdxG
239e0 54 20 65 78 63 65 70 74 0a 2a 2a 20 74 68 61 74  T except.** that
239f0 20 69 66 20 74 68 65 20 6b 65 79 20 66 72 6f 6d   if the key from
23a00 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20   register P3 is 
23a10 61 20 70 72 65 66 69 78 20 6f 66 20 74 68 65 20  a prefix of the 
23a20 6b 65 79 20 69 6e 20 74 68 65 20 63 75 72 73 6f  key in the curso
23a30 72 2c 0a 2a 2a 20 74 68 65 20 72 65 73 75 6c 74  r,.** the result
23a40 20 69 73 20 66 61 6c 73 65 20 77 68 65 72 65 61   is false wherea
23a50 73 20 69 74 20 77 6f 75 6c 64 20 62 65 20 74 72  s it would be tr
23a60 75 65 20 77 69 74 68 20 49 64 78 47 54 2e 0a 2a  ue with IdxGT..*
23a70 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78  /./* Opcode: Idx
23a80 4c 54 20 50 31 20 50 32 20 50 33 20 50 34 20 50  LT P1 P2 P3 P4 P
23a90 35 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 72  5.**.** The P4 r
23aa0 65 67 69 73 74 65 72 20 76 61 6c 75 65 73 20 62  egister values b
23ab0 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 50 33  eginning with P3
23ac0 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65   form an unpacke
23ad0 64 20 69 6e 64 65 78 20 0a 2a 2a 20 6b 65 79 20  d index .** key 
23ae0 74 68 61 74 20 6f 6d 69 74 73 20 74 68 65 20 52  that omits the R
23af0 4f 57 49 44 2e 20 20 43 6f 6d 70 61 72 65 20 74  OWID.  Compare t
23b00 68 69 73 20 6b 65 79 20 76 61 6c 75 65 20 61 67  his key value ag
23b10 61 69 6e 73 74 20 74 68 65 20 69 6e 64 65 78 20  ainst the index 
23b20 0a 2a 2a 20 74 68 61 74 20 50 31 20 69 73 20 63  .** that P1 is c
23b30 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e  urrently pointin
23b40 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e 67 20 74  g to, ignoring t
23b50 68 65 20 52 4f 57 49 44 20 6f 6e 20 74 68 65 20  he ROWID on the 
23b60 50 31 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20  P1 index..**.** 
23b70 49 66 20 74 68 65 20 50 31 20 69 6e 64 65 78 20  If the P1 index 
23b80 65 6e 74 72 79 20 69 73 20 6c 65 73 73 20 74 68  entry is less th
23b90 61 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65  an the key value
23ba0 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32   then jump to P2
23bb0 2e 0a 2a 2a 20 4f 74 68 65 72 77 69 73 65 20 66  ..** Otherwise f
23bc0 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74  all through to t
23bd0 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74  he next instruct
23be0 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35  ion..**.** If P5
23bf0 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 20 74 68 65   is non-zero the
23c00 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 20  n the key value 
23c10 69 73 20 69 6e 63 72 65 61 73 65 64 20 62 79 20  is increased by 
23c20 61 6e 20 65 70 73 69 6c 6f 6e 20 70 72 69 6f 72  an epsilon prior
23c30 20 0a 2a 2a 20 74 6f 20 74 68 65 20 63 6f 6d 70   .** to the comp
23c40 61 72 69 73 6f 6e 2e 20 20 54 68 69 73 20 6d 61  arison.  This ma
23c50 6b 65 73 20 74 68 65 20 6f 70 63 6f 64 65 20 77  kes the opcode w
23c60 6f 72 6b 20 6c 69 6b 65 20 49 64 78 4c 45 2e 0a  ork like IdxLE..
23c70 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 4c 54  */.case OP_IdxLT
23c80 3a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  :          /* ju
23c90 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64  mp */.case OP_Id
23ca0 78 47 45 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  xGE: {        /*
23cb0 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43   jump */.  VdbeC
23cc0 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e 74  ursor *pC;.  int
23cd0 20 72 65 73 3b 0a 20 20 55 6e 70 61 63 6b 65 64   res;.  Unpacked
23ce0 52 65 63 6f 72 64 20 72 3b 0a 0a 20 20 61 73 73  Record r;..  ass
23cf0 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
23d00 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
23d10 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
23d20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
23d30 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
23d40 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
23d50 70 43 2d 3e 69 73 4f 72 64 65 72 65 64 20 29 3b  pC->isOrdered );
23d60 0a 20 20 69 66 28 20 41 4c 57 41 59 53 28 70 43  .  if( ALWAYS(pC
23d70 2d 3e 70 43 75 72 73 6f 72 21 3d 30 29 20 29 7b  ->pCursor!=0) ){
23d80 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d  .    assert( pC-
23d90 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d  >deferredMoveto=
23da0 3d 30 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  =0 );.    assert
23db0 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c 20  ( pOp->p5==0 || 
23dc0 70 4f 70 2d 3e 70 35 3d 3d 31 20 29 3b 0a 20 20  pOp->p5==1 );.  
23dd0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
23de0 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20  4type==P4_INT32 
23df0 29 3b 0a 20 20 20 20 72 2e 70 4b 65 79 49 6e 66  );.    r.pKeyInf
23e00 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f  o = pC->pKeyInfo
23e10 3b 0a 20 20 20 20 72 2e 6e 46 69 65 6c 64 20 3d  ;.    r.nField =
23e20 20 28 75 31 36 29 70 4f 70 2d 3e 70 34 2e 69 3b   (u16)pOp->p4.i;
23e30 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35  .    if( pOp->p5
23e40 20 29 7b 0a 20 20 20 20 20 20 72 2e 66 6c 61 67   ){.      r.flag
23e50 73 20 3d 20 55 4e 50 41 43 4b 45 44 5f 49 4e 43  s = UNPACKED_INC
23e60 52 4b 45 59 20 7c 20 55 4e 50 41 43 4b 45 44 5f  RKEY | UNPACKED_
23e70 49 47 4e 4f 52 45 5f 52 4f 57 49 44 3b 0a 20 20  IGNORE_ROWID;.  
23e80 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72    }else{.      r
23e90 2e 66 6c 61 67 73 20 3d 20 55 4e 50 41 43 4b 45  .flags = UNPACKE
23ea0 44 5f 49 47 4e 4f 52 45 5f 52 4f 57 49 44 3b 0a  D_IGNORE_ROWID;.
23eb0 20 20 20 20 7d 0a 20 20 20 20 72 2e 61 4d 65 6d      }.    r.aMem
23ec0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
23ed0 5d 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  ];.#ifdef SQLITE
23ee0 5f 44 45 42 55 47 0a 20 20 20 20 7b 20 69 6e 74  _DEBUG.    { int
23ef0 20 69 3b 20 66 6f 72 28 69 3d 30 3b 20 69 3c 72   i; for(i=0; i<r
23f00 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b 29 20 61 73  .nField; i++) as
23f10 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
23f20 28 26 72 2e 61 4d 65 6d 5b 69 5d 29 20 29 3b 20  (&r.aMem[i]) ); 
23f30 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 72 63 20  }.#endif.    rc 
23f40 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 64 78  = sqlite3VdbeIdx
23f50 4b 65 79 43 6f 6d 70 61 72 65 28 70 43 2c 20 26  KeyCompare(pC, &
23f60 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 69 66  r, &res);.    if
23f70 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
23f80 50 5f 49 64 78 4c 54 20 29 7b 0a 20 20 20 20 20  P_IdxLT ){.     
23f90 20 72 65 73 20 3d 20 2d 72 65 73 3b 0a 20 20 20   res = -res;.   
23fa0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 61 73   }else{.      as
23fb0 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
23fc0 65 3d 3d 4f 50 5f 49 64 78 47 45 20 29 3b 0a 20  e==OP_IdxGE );. 
23fd0 20 20 20 20 20 72 65 73 2b 2b 3b 0a 20 20 20 20       res++;.    
23fe0 7d 0a 20 20 20 20 69 66 28 20 72 65 73 3e 30 20  }.    if( res>0 
23ff0 29 7b 0a 20 20 20 20 20 20 70 63 20 3d 20 70 4f  ){.      pc = pO
24000 70 2d 3e 70 32 20 2d 20 31 20 3b 0a 20 20 20 20  p->p2 - 1 ;.    
24010 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  }.  }.  break;.}
24020 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 65 73  ../* Opcode: Des
24030 74 72 6f 79 20 50 31 20 50 32 20 50 33 20 2a 20  troy P1 P2 P3 * 
24040 2a 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 61  *.**.** Delete a
24050 6e 20 65 6e 74 69 72 65 20 64 61 74 61 62 61 73  n entire databas
24060 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  e table or index
24070 20 77 68 6f 73 65 20 72 6f 6f 74 20 70 61 67 65   whose root page
24080 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
24090 0a 2a 2a 20 66 69 6c 65 20 69 73 20 67 69 76 65  .** file is give
240a0 6e 20 62 79 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54  n by P1..**.** T
240b0 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 64  he table being d
240c0 65 73 74 72 6f 79 65 64 20 69 73 20 69 6e 20 74  estroyed is in t
240d0 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
240e0 20 66 69 6c 65 20 69 66 20 50 33 3d 3d 30 2e 20   file if P3==0. 
240f0 20 49 66 0a 2a 2a 20 50 33 3d 3d 31 20 74 68 65   If.** P3==1 the
24100 6e 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 62  n the table to b
24110 65 20 63 6c 65 61 72 20 69 73 20 69 6e 20 74 68  e clear is in th
24120 65 20 61 75 78 69 6c 69 61 72 79 20 64 61 74 61  e auxiliary data
24130 62 61 73 65 20 66 69 6c 65 0a 2a 2a 20 74 68 61  base file.** tha
24140 74 20 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f  t is used to sto
24150 72 65 20 74 61 62 6c 65 73 20 63 72 65 61 74 65  re tables create
24160 20 75 73 69 6e 67 20 43 52 45 41 54 45 20 54 45   using CREATE TE
24170 4d 50 4f 52 41 52 59 20 54 41 42 4c 45 2e 0a 2a  MPORARY TABLE..*
24180 2a 0a 2a 2a 20 49 66 20 41 55 54 4f 56 41 43 55  *.** If AUTOVACU
24190 55 4d 20 69 73 20 65 6e 61 62 6c 65 64 20 74 68  UM is enabled th
241a0 65 6e 20 69 74 20 69 73 20 70 6f 73 73 69 62 6c  en it is possibl
241b0 65 20 74 68 61 74 20 61 6e 6f 74 68 65 72 20 72  e that another r
241c0 6f 6f 74 20 70 61 67 65 0a 2a 2a 20 6d 69 67 68  oot page.** migh
241d0 74 20 62 65 20 6d 6f 76 65 64 20 69 6e 74 6f 20  t be moved into 
241e0 74 68 65 20 6e 65 77 6c 79 20 64 65 6c 65 74 65  the newly delete
241f0 64 20 72 6f 6f 74 20 70 61 67 65 20 69 6e 20 6f  d root page in o
24200 72 64 65 72 20 74 6f 20 6b 65 65 70 20 61 6c 6c  rder to keep all
24210 0a 2a 2a 20 72 6f 6f 74 20 70 61 67 65 73 20 63  .** root pages c
24220 6f 6e 74 69 67 75 6f 75 73 20 61 74 20 74 68 65  ontiguous at the
24230 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68   beginning of th
24240 65 20 64 61 74 61 62 61 73 65 2e 20 20 54 68 65  e database.  The
24250 20 66 6f 72 6d 65 72 0a 2a 2a 20 76 61 6c 75 65   former.** value
24260 20 6f 66 20 74 68 65 20 72 6f 6f 74 20 70 61 67   of the root pag
24270 65 20 74 68 61 74 20 6d 6f 76 65 64 20 2d 20 69  e that moved - i
24280 74 73 20 76 61 6c 75 65 20 62 65 66 6f 72 65 20  ts value before 
24290 74 68 65 20 6d 6f 76 65 20 6f 63 63 75 72 72 65  the move occurre
242a0 64 20 2d 0a 2a 2a 20 69 73 20 73 74 6f 72 65 64  d -.** is stored
242b0 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e   in register P2.
242c0 20 20 49 66 20 6e 6f 20 70 61 67 65 20 0a 2a 2a    If no page .**
242d0 20 6d 6f 76 65 6d 65 6e 74 20 77 61 73 20 72 65   movement was re
242e0 71 75 69 72 65 64 20 28 62 65 63 61 75 73 65 20  quired (because 
242f0 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20  the table being 
24300 64 72 6f 70 70 65 64 20 77 61 73 20 61 6c 72 65  dropped was alre
24310 61 64 79 20 0a 2a 2a 20 74 68 65 20 6c 61 73 74  ady .** the last
24320 20 6f 6e 65 20 69 6e 20 74 68 65 20 64 61 74 61   one in the data
24330 62 61 73 65 29 20 74 68 65 6e 20 61 20 7a 65 72  base) then a zer
24340 6f 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72  o is stored in r
24350 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 20 49  egister P2..** I
24360 66 20 41 55 54 4f 56 41 43 55 55 4d 20 69 73 20  f AUTOVACUUM is 
24370 64 69 73 61 62 6c 65 64 20 74 68 65 6e 20 61 20  disabled then a 
24380 7a 65 72 6f 20 69 73 20 73 74 6f 72 65 64 20 69  zero is stored i
24390 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  n register P2..*
243a0 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 43  *.** See also: C
243b0 6c 65 61 72 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  lear.*/.case OP_
243c0 44 65 73 74 72 6f 79 3a 20 7b 20 20 20 20 20 2f  Destroy: {     /
243d0 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73  * out2-prereleas
243e0 65 20 2a 2f 0a 20 20 69 6e 74 20 69 4d 6f 76 65  e */.  int iMove
243f0 64 3b 0a 20 20 69 6e 74 20 69 43 6e 74 3b 0a 20  d;.  int iCnt;. 
24400 20 56 64 62 65 20 2a 70 56 64 62 65 3b 0a 20 20   Vdbe *pVdbe;.  
24410 69 6e 74 20 69 44 62 3b 0a 23 69 66 6e 64 65 66  int iDb;.#ifndef
24420 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
24430 54 55 41 4c 54 41 42 4c 45 0a 20 20 69 43 6e 74  TUALTABLE.  iCnt
24440 20 3d 20 30 3b 0a 20 20 66 6f 72 28 70 56 64 62   = 0;.  for(pVdb
24450 65 3d 64 62 2d 3e 70 56 64 62 65 3b 20 70 56 64  e=db->pVdbe; pVd
24460 62 65 3b 20 70 56 64 62 65 20 3d 20 70 56 64 62  be; pVdbe = pVdb
24470 65 2d 3e 70 4e 65 78 74 29 7b 0a 20 20 20 20 69  e->pNext){.    i
24480 66 28 20 70 56 64 62 65 2d 3e 6d 61 67 69 63 3d  f( pVdbe->magic=
24490 3d 56 44 42 45 5f 4d 41 47 49 43 5f 52 55 4e 20  =VDBE_MAGIC_RUN 
244a0 26 26 20 70 56 64 62 65 2d 3e 69 6e 56 74 61 62  && pVdbe->inVtab
244b0 4d 65 74 68 6f 64 3c 32 20 26 26 20 70 56 64 62  Method<2 && pVdb
244c0 65 2d 3e 70 63 3e 3d 30 20 29 7b 0a 20 20 20 20  e->pc>=0 ){.    
244d0 20 20 69 43 6e 74 2b 2b 3b 0a 20 20 20 20 7d 0a    iCnt++;.    }.
244e0 20 20 7d 0a 23 65 6c 73 65 0a 20 20 69 43 6e 74    }.#else.  iCnt
244f0 20 3d 20 64 62 2d 3e 61 63 74 69 76 65 56 64 62   = db->activeVdb
24500 65 43 6e 74 3b 0a 23 65 6e 64 69 66 0a 20 20 70  eCnt;.#endif.  p
24510 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
24520 5f 4e 75 6c 6c 3b 0a 20 20 69 66 28 20 69 43 6e  _Null;.  if( iCn
24530 74 3e 31 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  t>1 ){.    rc = 
24540 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 3b 0a 20  SQLITE_LOCKED;. 
24550 20 20 20 70 2d 3e 65 72 72 6f 72 41 63 74 69 6f     p->errorActio
24560 6e 20 3d 20 4f 45 5f 41 62 6f 72 74 3b 0a 20 20  n = OE_Abort;.  
24570 7d 65 6c 73 65 7b 0a 20 20 20 20 69 44 62 20 3d  }else{.    iDb =
24580 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 20 20 61 73   pOp->p3;.    as
24590 73 65 72 74 28 20 69 43 6e 74 3d 3d 31 20 29 3b  sert( iCnt==1 );
245a0 0a 20 20 20 20 61 73 73 65 72 74 28 20 28 70 2d  .    assert( (p-
245b0 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28 28 28  >btreeMask & (((
245c0 79 44 62 4d 61 73 6b 29 31 29 3c 3c 69 44 62 29  yDbMask)1)<<iDb)
245d0 29 21 3d 30 20 29 3b 0a 20 20 20 20 72 63 20 3d  )!=0 );.    rc =
245e0 20 73 71 6c 69 74 65 33 42 74 72 65 65 44 72 6f   sqlite3BtreeDro
245f0 70 54 61 62 6c 65 28 64 62 2d 3e 61 44 62 5b 69  pTable(db->aDb[i
24600 44 62 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 31  Db].pBt, pOp->p1
24610 2c 20 26 69 4d 6f 76 65 64 29 3b 0a 20 20 20 20  , &iMoved);.    
24620 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pOut->flags = ME
24630 4d 5f 49 6e 74 3b 0a 20 20 20 20 70 4f 75 74 2d  M_Int;.    pOut-
24640 3e 75 2e 69 20 3d 20 69 4d 6f 76 65 64 3b 0a 23  >u.i = iMoved;.#
24650 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
24660 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 0a 20 20  IT_AUTOVACUUM.  
24670 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
24680 5f 4f 4b 20 26 26 20 69 4d 6f 76 65 64 21 3d 30  _OK && iMoved!=0
24690 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
246a0 33 52 6f 6f 74 50 61 67 65 4d 6f 76 65 64 28 26  3RootPageMoved(&
246b0 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2c 20 69 4d  db->aDb[iDb], iM
246c0 6f 76 65 64 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a  oved, pOp->p1);.
246d0 20 20 20 20 20 20 72 65 73 65 74 53 63 68 65 6d        resetSchem
246e0 61 4f 6e 46 61 75 6c 74 20 3d 20 31 3b 0a 20 20  aOnFault = 1;.  
246f0 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 7d 0a 20    }.#endif.  }. 
24700 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
24710 63 6f 64 65 3a 20 43 6c 65 61 72 20 50 31 20 50  code: Clear P1 P
24720 32 20 50 33 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74  2 P3.**.** Delet
24730 65 20 61 6c 6c 20 63 6f 6e 74 65 6e 74 73 20 6f  e all contents o
24740 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74  f the database t
24750 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 77 68  able or index wh
24760 6f 73 65 20 72 6f 6f 74 20 70 61 67 65 0a 2a 2a  ose root page.**
24770 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
24780 20 66 69 6c 65 20 69 73 20 67 69 76 65 6e 20 62   file is given b
24790 79 20 50 31 2e 20 20 42 75 74 2c 20 75 6e 6c 69  y P1.  But, unli
247a0 6b 65 20 44 65 73 74 72 6f 79 2c 20 64 6f 20 6e  ke Destroy, do n
247b0 6f 74 0a 2a 2a 20 72 65 6d 6f 76 65 20 74 68 65  ot.** remove the
247c0 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20   table or index 
247d0 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73  from the databas
247e0 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68  e file..**.** Th
247f0 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 63 6c  e table being cl
24800 65 61 72 20 69 73 20 69 6e 20 74 68 65 20 6d 61  ear is in the ma
24810 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  in database file
24820 20 69 66 20 50 32 3d 3d 30 2e 20 20 49 66 0a 2a   if P2==0.  If.*
24830 2a 20 50 32 3d 3d 31 20 74 68 65 6e 20 74 68 65  * P2==1 then the
24840 20 74 61 62 6c 65 20 74 6f 20 62 65 20 63 6c 65   table to be cle
24850 61 72 20 69 73 20 69 6e 20 74 68 65 20 61 75 78  ar is in the aux
24860 69 6c 69 61 72 79 20 64 61 74 61 62 61 73 65 20  iliary database 
24870 66 69 6c 65 0a 2a 2a 20 74 68 61 74 20 69 73 20  file.** that is 
24880 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 61  used to store ta
24890 62 6c 65 73 20 63 72 65 61 74 65 20 75 73 69 6e  bles create usin
248a0 67 20 43 52 45 41 54 45 20 54 45 4d 50 4f 52 41  g CREATE TEMPORA
248b0 52 59 20 54 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a 20  RY TABLE..**.** 
248c0 49 66 20 74 68 65 20 50 33 20 76 61 6c 75 65 20  If the P3 value 
248d0 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65  is non-zero, the
248e0 6e 20 74 68 65 20 74 61 62 6c 65 20 72 65 66 65  n the table refe
248f0 72 72 65 64 20 74 6f 20 6d 75 73 74 20 62 65 20  rred to must be 
24900 61 6e 0a 2a 2a 20 69 6e 74 6b 65 79 20 74 61 62  an.** intkey tab
24910 6c 65 20 28 61 6e 20 53 51 4c 20 74 61 62 6c 65  le (an SQL table
24920 2c 20 6e 6f 74 20 61 6e 20 69 6e 64 65 78 29 2e  , not an index).
24930 20 49 6e 20 74 68 69 73 20 63 61 73 65 20 74 68   In this case th
24940 65 20 72 6f 77 20 63 68 61 6e 67 65 20 0a 2a 2a  e row change .**
24950 20 63 6f 75 6e 74 20 69 73 20 69 6e 63 72 65 6d   count is increm
24960 65 6e 74 65 64 20 62 79 20 74 68 65 20 6e 75 6d  ented by the num
24970 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74  ber of rows in t
24980 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 63  he table being c
24990 6c 65 61 72 65 64 2e 20 0a 2a 2a 20 49 66 20 50  leared. .** If P
249a0 33 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61  3 is greater tha
249b0 6e 20 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65  n zero, then the
249c0 20 76 61 6c 75 65 20 73 74 6f 72 65 64 20 69 6e   value stored in
249d0 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73 0a   register P3 is.
249e0 2a 2a 20 61 6c 73 6f 20 69 6e 63 72 65 6d 65 6e  ** also incremen
249f0 74 65 64 20 62 79 20 74 68 65 20 6e 75 6d 62 65  ted by the numbe
24a00 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68 65  r of rows in the
24a10 20 74 61 62 6c 65 20 62 65 69 6e 67 20 63 6c 65   table being cle
24a20 61 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  ared..**.** See 
24a30 61 6c 73 6f 3a 20 44 65 73 74 72 6f 79 0a 2a 2f  also: Destroy.*/
24a40 0a 63 61 73 65 20 4f 50 5f 43 6c 65 61 72 3a 20  .case OP_Clear: 
24a50 7b 0a 20 20 69 6e 74 20 6e 43 68 61 6e 67 65 3b  {.  int nChange;
24a60 0a 20 0a 20 20 6e 43 68 61 6e 67 65 20 3d 20 30  . .  nChange = 0
24a70 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e  ;.  assert( (p->
24a80 62 74 72 65 65 4d 61 73 6b 20 26 20 28 28 28 79  btreeMask & (((y
24a90 44 62 4d 61 73 6b 29 31 29 3c 3c 70 4f 70 2d 3e  DbMask)1)<<pOp->
24aa0 70 32 29 29 21 3d 30 20 29 3b 0a 20 20 72 63 20  p2))!=0 );.  rc 
24ab0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 6c  = sqlite3BtreeCl
24ac0 65 61 72 54 61 62 6c 65 28 0a 20 20 20 20 20 20  earTable(.      
24ad0 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 32 5d  db->aDb[pOp->p2]
24ae0 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 31 2c 20 28  .pBt, pOp->p1, (
24af0 70 4f 70 2d 3e 70 33 20 3f 20 26 6e 43 68 61 6e  pOp->p3 ? &nChan
24b00 67 65 20 3a 20 30 29 0a 20 20 29 3b 0a 20 20 69  ge : 0).  );.  i
24b10 66 28 20 70 4f 70 2d 3e 70 33 20 29 7b 0a 20 20  f( pOp->p3 ){.  
24b20 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20 2b 3d 20    p->nChange += 
24b30 6e 43 68 61 6e 67 65 3b 0a 20 20 20 20 69 66 28  nChange;.    if(
24b40 20 70 4f 70 2d 3e 70 33 3e 30 20 29 7b 0a 20 20   pOp->p3>0 ){.  
24b50 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
24b60 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70  sValid(&aMem[pOp
24b70 2d 3e 70 33 5d 29 20 29 3b 0a 20 20 20 20 20 20  ->p3]) );.      
24b80 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
24b90 28 70 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  (p, &aMem[pOp->p
24ba0 33 5d 29 3b 0a 20 20 20 20 20 20 61 4d 65 6d 5b  3]);.      aMem[
24bb0 70 4f 70 2d 3e 70 33 5d 2e 75 2e 69 20 2b 3d 20  pOp->p3].u.i += 
24bc0 6e 43 68 61 6e 67 65 3b 0a 20 20 20 20 7d 0a 20  nChange;.    }. 
24bd0 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
24be0 2a 20 4f 70 63 6f 64 65 3a 20 43 72 65 61 74 65  * Opcode: Create
24bf0 54 61 62 6c 65 20 50 31 20 50 32 20 2a 20 2a 20  Table P1 P2 * * 
24c00 2a 0a 2a 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65  *.**.** Allocate
24c10 20 61 20 6e 65 77 20 74 61 62 6c 65 20 69 6e 20   a new table in 
24c20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
24c30 65 20 66 69 6c 65 20 69 66 20 50 31 3d 3d 30 20  e file if P1==0 
24c40 6f 72 20 69 6e 20 74 68 65 0a 2a 2a 20 61 75 78  or in the.** aux
24c50 69 6c 69 61 72 79 20 64 61 74 61 62 61 73 65 20  iliary database 
24c60 66 69 6c 65 20 69 66 20 50 31 3d 3d 31 20 6f 72  file if P1==1 or
24c70 20 69 6e 20 61 6e 20 61 74 74 61 63 68 65 64 20   in an attached 
24c80 64 61 74 61 62 61 73 65 20 69 66 0a 2a 2a 20 50  database if.** P
24c90 31 3e 31 2e 20 20 57 72 69 74 65 20 74 68 65 20  1>1.  Write the 
24ca0 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72  root page number
24cb0 20 6f 66 20 74 68 65 20 6e 65 77 20 74 61 62 6c   of the new tabl
24cc0 65 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74  e into.** regist
24cd0 65 72 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 65 20  er P2.**.** The 
24ce0 64 69 66 66 65 72 65 6e 63 65 20 62 65 74 77 65  difference betwe
24cf0 65 6e 20 61 20 74 61 62 6c 65 20 61 6e 64 20 61  en a table and a
24d00 6e 20 69 6e 64 65 78 20 69 73 20 74 68 69 73 3a  n index is this:
24d10 20 20 41 20 74 61 62 6c 65 20 6d 75 73 74 0a 2a    A table must.*
24d20 2a 20 68 61 76 65 20 61 20 34 2d 62 79 74 65 20  * have a 4-byte 
24d30 69 6e 74 65 67 65 72 20 6b 65 79 20 61 6e 64 20  integer key and 
24d40 63 61 6e 20 68 61 76 65 20 61 72 62 69 74 72 61  can have arbitra
24d50 72 79 20 64 61 74 61 2e 20 20 41 6e 20 69 6e 64  ry data.  An ind
24d60 65 78 0a 2a 2a 20 68 61 73 20 61 6e 20 61 72 62  ex.** has an arb
24d70 69 74 72 61 72 79 20 6b 65 79 20 62 75 74 20 6e  itrary key but n
24d80 6f 20 64 61 74 61 2e 0a 2a 2a 0a 2a 2a 20 53 65  o data..**.** Se
24d90 65 20 61 6c 73 6f 3a 20 43 72 65 61 74 65 49 6e  e also: CreateIn
24da0 64 65 78 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  dex.*/./* Opcode
24db0 3a 20 43 72 65 61 74 65 49 6e 64 65 78 20 50 31  : CreateIndex P1
24dc0 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
24dd0 41 6c 6c 6f 63 61 74 65 20 61 20 6e 65 77 20 69  Allocate a new i
24de0 6e 64 65 78 20 69 6e 20 74 68 65 20 6d 61 69 6e  ndex in the main
24df0 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69   database file i
24e00 66 20 50 31 3d 3d 30 20 6f 72 20 69 6e 20 74 68  f P1==0 or in th
24e10 65 0a 2a 2a 20 61 75 78 69 6c 69 61 72 79 20 64  e.** auxiliary d
24e20 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66 20  atabase file if 
24e30 50 31 3d 3d 31 20 6f 72 20 69 6e 20 61 6e 20 61  P1==1 or in an a
24e40 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65  ttached database
24e50 20 69 66 0a 2a 2a 20 50 31 3e 31 2e 20 20 57 72   if.** P1>1.  Wr
24e60 69 74 65 20 74 68 65 20 72 6f 6f 74 20 70 61 67  ite the root pag
24e70 65 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20  e number of the 
24e80 6e 65 77 20 74 61 62 6c 65 20 69 6e 74 6f 0a 2a  new table into.*
24e90 2a 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  * register P2..*
24ea0 2a 0a 2a 2a 20 53 65 65 20 64 6f 63 75 6d 65 6e  *.** See documen
24eb0 74 61 74 69 6f 6e 20 6f 6e 20 4f 50 5f 43 72 65  tation on OP_Cre
24ec0 61 74 65 54 61 62 6c 65 20 66 6f 72 20 61 64 64  ateTable for add
24ed0 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74  itional informat
24ee0 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ion..*/.case OP_
24ef0 43 72 65 61 74 65 49 6e 64 65 78 3a 20 20 20 20  CreateIndex:    
24f00 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d          /* out2-
24f10 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 63 61  prerelease */.ca
24f20 73 65 20 4f 50 5f 43 72 65 61 74 65 54 61 62 6c  se OP_CreateTabl
24f30 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20 2f 2a  e: {          /*
24f40 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65   out2-prerelease
24f50 20 2a 2f 0a 20 20 69 6e 74 20 70 67 6e 6f 3b 0a   */.  int pgno;.
24f60 20 20 69 6e 74 20 66 6c 61 67 73 3b 0a 20 20 44    int flags;.  D
24f70 62 20 2a 70 44 62 3b 0a 0a 20 20 70 67 6e 6f 20  b *pDb;..  pgno 
24f80 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70  = 0;.  assert( p
24f90 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
24fa0 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a  ->p1<db->nDb );.
24fb0 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74    assert( (p->bt
24fc0 72 65 65 4d 61 73 6b 20 26 20 28 28 28 79 44 62  reeMask & (((yDb
24fd0 4d 61 73 6b 29 31 29 3c 3c 70 4f 70 2d 3e 70 31  Mask)1)<<pOp->p1
24fe0 29 29 21 3d 30 20 29 3b 0a 20 20 70 44 62 20 3d  ))!=0 );.  pDb =
24ff0 20 26 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70   &db->aDb[pOp->p
25000 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 44  1];.  assert( pD
25010 62 2d 3e 70 42 74 21 3d 30 20 29 3b 0a 20 20 69  b->pBt!=0 );.  i
25020 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  f( pOp->opcode==
25030 4f 50 5f 43 72 65 61 74 65 54 61 62 6c 65 20 29  OP_CreateTable )
25040 7b 0a 20 20 20 20 2f 2a 20 66 6c 61 67 73 20 3d  {.    /* flags =
25050 20 42 54 52 45 45 5f 49 4e 54 4b 45 59 3b 20 2a   BTREE_INTKEY; *
25060 2f 0a 20 20 20 20 66 6c 61 67 73 20 3d 20 42 54  /.    flags = BT
25070 52 45 45 5f 49 4e 54 4b 45 59 3b 0a 20 20 7d 65  REE_INTKEY;.  }e
25080 6c 73 65 7b 0a 20 20 20 20 66 6c 61 67 73 20 3d  lse{.    flags =
25090 20 42 54 52 45 45 5f 42 4c 4f 42 4b 45 59 3b 0a   BTREE_BLOBKEY;.
250a0 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74    }.  rc = sqlit
250b0 65 33 42 74 72 65 65 43 72 65 61 74 65 54 61 62  e3BtreeCreateTab
250c0 6c 65 28 70 44 62 2d 3e 70 42 74 2c 20 26 70 67  le(pDb->pBt, &pg
250d0 6e 6f 2c 20 66 6c 61 67 73 29 3b 0a 20 20 70 4f  no, flags);.  pO
250e0 75 74 2d 3e 75 2e 69 20 3d 20 70 67 6e 6f 3b 0a  ut->u.i = pgno;.
250f0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
25100 70 63 6f 64 65 3a 20 50 61 72 73 65 53 63 68 65  pcode: ParseSche
25110 6d 61 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a  ma P1 * * P4 *.*
25120 2a 0a 2a 2a 20 52 65 61 64 20 61 6e 64 20 70 61  *.** Read and pa
25130 72 73 65 20 61 6c 6c 20 65 6e 74 72 69 65 73 20  rse all entries 
25140 66 72 6f 6d 20 74 68 65 20 53 51 4c 49 54 45 5f  from the SQLITE_
25150 4d 41 53 54 45 52 20 74 61 62 6c 65 20 6f 66 20  MASTER table of 
25160 64 61 74 61 62 61 73 65 20 50 31 0a 2a 2a 20 74  database P1.** t
25170 68 61 74 20 6d 61 74 63 68 20 74 68 65 20 57 48  hat match the WH
25180 45 52 45 20 63 6c 61 75 73 65 20 50 34 2e 20 0a  ERE clause P4. .
25190 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
251a0 65 20 69 6e 76 6f 6b 65 73 20 74 68 65 20 70 61  e invokes the pa
251b0 72 73 65 72 20 74 6f 20 63 72 65 61 74 65 20 61  rser to create a
251c0 20 6e 65 77 20 76 69 72 74 75 61 6c 20 6d 61 63   new virtual mac
251d0 68 69 6e 65 2c 0a 2a 2a 20 74 68 65 6e 20 72 75  hine,.** then ru
251e0 6e 73 20 74 68 65 20 6e 65 77 20 76 69 72 74 75  ns the new virtu
251f0 61 6c 20 6d 61 63 68 69 6e 65 2e 20 20 49 74 20  al machine.  It 
25200 69 73 20 74 68 75 73 20 61 20 72 65 2d 65 6e 74  is thus a re-ent
25210 72 61 6e 74 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a  rant opcode..*/.
25220 63 61 73 65 20 4f 50 5f 50 61 72 73 65 53 63 68  case OP_ParseSch
25230 65 6d 61 3a 20 7b 0a 20 20 69 6e 74 20 69 44 62  ema: {.  int iDb
25240 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  ;.  const char *
25250 7a 4d 61 73 74 65 72 3b 0a 20 20 63 68 61 72 20  zMaster;.  char 
25260 2a 7a 53 71 6c 3b 0a 20 20 49 6e 69 74 44 61 74  *zSql;.  InitDat
25270 61 20 69 6e 69 74 44 61 74 61 3b 0a 0a 20 20 69  a initData;..  i
25280 44 62 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20  Db = pOp->p1;.  
25290 61 73 73 65 72 74 28 20 69 44 62 3e 3d 30 20 26  assert( iDb>=0 &
252a0 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29 3b  & iDb<db->nDb );
252b0 0a 0a 20 20 2f 2a 20 57 68 65 6e 20 74 68 69 73  ..  /* When this
252c0 20 6f 70 63 6f 64 65 20 69 73 20 69 6e 76 6f 6b   opcode is invok
252d0 65 64 2c 20 69 74 20 69 73 20 67 75 61 72 61 6e  ed, it is guaran
252e0 74 65 65 64 20 74 68 61 74 20 74 68 65 20 62 2d  teed that the b-
252f0 74 72 65 65 20 6d 75 74 65 78 0a 20 20 2a 2a 20  tree mutex.  ** 
25300 69 73 20 68 65 6c 64 20 61 6e 64 20 74 68 65 20  is held and the 
25310 73 63 68 65 6d 61 20 69 73 20 6c 6f 61 64 65 64  schema is loaded
25320 20 66 6f 72 20 64 61 74 61 62 61 73 65 20 69 44   for database iD
25330 62 2e 20 48 6f 77 65 76 65 72 2c 20 61 74 20 74  b. However, at t
25340 68 65 20 0a 20 20 2a 2a 20 73 74 61 72 74 20 6f  he .  ** start o
25350 66 20 74 68 65 20 73 71 6c 69 74 65 33 5f 65 78  f the sqlite3_ex
25360 65 63 28 29 20 63 61 6c 6c 20 62 65 6c 6f 77 2c  ec() call below,
25370 20 53 51 4c 69 74 65 20 77 69 6c 6c 20 69 6e 76   SQLite will inv
25380 6f 6b 65 20 0a 20 20 2a 2a 20 73 71 6c 69 74 65  oke .  ** sqlite
25390 33 42 74 72 65 65 45 6e 74 65 72 41 6c 6c 28 29  3BtreeEnterAll()
253a0 2e 20 49 66 20 61 6c 6c 20 6d 75 74 65 78 65 73  . If all mutexes
253b0 20 61 72 65 20 6e 6f 74 20 61 6c 72 65 61 64 79   are not already
253c0 20 68 65 6c 64 2c 20 74 68 65 20 69 44 62 20 0a   held, the iDb .
253d0 20 20 2a 2a 20 6d 75 74 65 78 20 6d 61 79 20 62    ** mutex may b
253e0 65 20 74 65 6d 70 6f 72 61 72 69 6c 79 20 72 65  e temporarily re
253f0 6c 65 61 73 65 64 20 74 6f 20 61 76 6f 69 64 20  leased to avoid 
25400 64 65 61 64 6c 6f 63 6b 2e 20 49 66 20 74 68 69  deadlock. If thi
25410 73 20 68 61 70 70 65 6e 73 2c 20 0a 20 20 2a 2a  s happens, .  **
25420 20 74 68 65 6e 20 73 6f 6d 65 20 6f 74 68 65 72   then some other
25430 20 74 68 72 65 61 64 20 6d 61 79 20 64 65 6c 65   thread may dele
25440 74 65 20 74 68 65 20 69 6e 2d 6d 65 6d 6f 72 79  te the in-memory
25450 20 73 63 68 65 6d 61 20 6f 66 20 64 61 74 61 62   schema of datab
25460 61 73 65 20 69 44 62 20 0a 20 20 2a 2a 20 62 65  ase iDb .  ** be
25470 66 6f 72 65 20 74 68 65 20 53 51 4c 20 73 74 61  fore the SQL sta
25480 74 65 6d 65 6e 74 20 72 75 6e 73 2e 20 54 68 65  tement runs. The
25490 20 73 63 68 65 6d 61 20 77 69 6c 6c 20 6e 6f 74   schema will not
254a0 20 62 65 20 72 65 6c 6f 61 64 65 64 20 62 65 63   be reloaded bec
254b0 61 75 73 65 20 0a 20 20 2a 2a 20 74 68 65 20 64  ause .  ** the d
254c0 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20 66 6c 61  b->init.busy fla
254d0 67 20 69 73 20 73 65 74 2e 20 54 68 69 73 20 63  g is set. This c
254e0 61 6e 20 72 65 73 75 6c 74 20 69 6e 20 61 20 22  an result in a "
254f0 6e 6f 20 73 75 63 68 20 74 61 62 6c 65 3a 20 0a  no such table: .
25500 20 20 2a 2a 20 73 71 6c 69 74 65 5f 6d 61 73 74    ** sqlite_mast
25510 65 72 22 20 6f 72 20 22 6d 61 6c 66 6f 72 6d 65  er" or "malforme
25520 64 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  d database schem
25530 61 22 20 65 72 72 6f 72 20 62 65 69 6e 67 20 72  a" error being r
25540 65 74 75 72 6e 65 64 20 74 6f 20 0a 20 20 2a 2a  eturned to .  **
25550 20 74 68 65 20 75 73 65 72 2e 20 0a 20 20 2a 2a   the user. .  **
25560 0a 20 20 2a 2a 20 54 6f 20 61 76 6f 69 64 20 74  .  ** To avoid t
25570 68 69 73 2c 20 6f 62 74 61 69 6e 20 61 6c 6c 20  his, obtain all 
25580 6d 75 74 65 78 65 73 20 61 6e 64 20 63 68 65 63  mutexes and chec
25590 6b 20 74 68 61 74 20 6e 6f 20 6f 74 68 65 72 20  k that no other 
255a0 74 68 72 65 61 64 20 68 61 73 0a 20 20 2a 2a 20  thread has.  ** 
255b0 64 65 6c 65 74 65 64 20 74 68 65 20 73 63 68 65  deleted the sche
255c0 6d 61 20 62 65 66 6f 72 65 20 63 61 6c 6c 69 6e  ma before callin
255d0 67 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28 29  g sqlite3_exec()
255e0 2e 20 49 66 20 77 65 20 66 69 6e 64 20 74 68 61  . If we find tha
255f0 74 20 74 68 65 0a 20 20 2a 2a 20 61 6e 6f 74 68  t the.  ** anoth
25600 65 72 20 74 68 72 65 61 64 20 68 61 73 20 64 65  er thread has de
25610 6c 65 74 65 64 20 74 68 65 20 73 63 68 65 6d 61  leted the schema
25620 2c 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6e 65  , there is no ne
25630 65 64 20 74 6f 20 75 70 64 61 74 65 20 69 74 2e  ed to update it.
25640 0a 20 20 2a 2a 20 54 68 65 20 75 70 64 61 74 65  .  ** The update
25650 64 20 73 63 68 65 6d 61 20 77 69 6c 6c 20 62 65  d schema will be
25660 20 6c 6f 61 64 65 64 20 66 72 6f 6d 20 64 69 73   loaded from dis
25670 6b 20 77 68 65 6e 20 69 74 20 69 73 20 6e 65 78  k when it is nex
25680 74 20 72 65 71 75 69 72 65 64 2e 0a 20 20 2a 2f  t required..  */
25690 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74  .  assert( sqlit
256a0 65 33 42 74 72 65 65 48 6f 6c 64 73 4d 75 74 65  e3BtreeHoldsMute
256b0 78 28 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70  x(db->aDb[iDb].p
256c0 42 74 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28  Bt) );.  assert(
256d0 20 44 62 48 61 73 50 72 6f 70 65 72 74 79 28 64   DbHasProperty(d
256e0 62 2c 20 69 44 62 2c 20 44 42 5f 53 63 68 65 6d  b, iDb, DB_Schem
256f0 61 4c 6f 61 64 65 64 29 20 29 3b 0a 20 20 73 71  aLoaded) );.  sq
25700 6c 69 74 65 33 42 74 72 65 65 45 6e 74 65 72 41  lite3BtreeEnterA
25710 6c 6c 28 64 62 29 3b 0a 20 20 69 66 28 20 44 62  ll(db);.  if( Db
25720 48 61 73 50 72 6f 70 65 72 74 79 28 64 62 2c 20  HasProperty(db, 
25730 69 44 62 2c 20 44 42 5f 53 63 68 65 6d 61 4c 6f  iDb, DB_SchemaLo
25740 61 64 65 64 29 20 29 7b 0a 20 20 20 20 7a 4d 61  aded) ){.    zMa
25750 73 74 65 72 20 3d 20 53 43 48 45 4d 41 5f 54 41  ster = SCHEMA_TA
25760 42 4c 45 28 69 44 62 29 3b 0a 20 20 20 20 69 6e  BLE(iDb);.    in
25770 69 74 44 61 74 61 2e 64 62 20 3d 20 64 62 3b 0a  itData.db = db;.
25780 20 20 20 20 69 6e 69 74 44 61 74 61 2e 69 44 62      initData.iDb
25790 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 20 20   = pOp->p1;.    
257a0 69 6e 69 74 44 61 74 61 2e 70 7a 45 72 72 4d 73  initData.pzErrMs
257b0 67 20 3d 20 26 70 2d 3e 7a 45 72 72 4d 73 67 3b  g = &p->zErrMsg;
257c0 0a 20 20 20 20 7a 53 71 6c 20 3d 20 73 71 6c 69  .    zSql = sqli
257d0 74 65 33 4d 50 72 69 6e 74 66 28 64 62 2c 0a 20  te3MPrintf(db,. 
257e0 20 20 20 20 20 20 22 53 45 4c 45 43 54 20 6e 61        "SELECT na
257f0 6d 65 2c 20 72 6f 6f 74 70 61 67 65 2c 20 73 71  me, rootpage, sq
25800 6c 20 46 52 4f 4d 20 27 25 71 27 2e 25 73 20 57  l FROM '%q'.%s W
25810 48 45 52 45 20 25 73 20 4f 52 44 45 52 20 42 59  HERE %s ORDER BY
25820 20 72 6f 77 69 64 22 2c 0a 20 20 20 20 20 20 20   rowid",.       
25830 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 7a 4e 61  db->aDb[iDb].zNa
25840 6d 65 2c 20 7a 4d 61 73 74 65 72 2c 20 70 4f 70  me, zMaster, pOp
25850 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 69 66 28  ->p4.z);.    if(
25860 20 7a 53 71 6c 3d 3d 30 20 29 7b 0a 20 20 20 20   zSql==0 ){.    
25870 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f    rc = SQLITE_NO
25880 4d 45 4d 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  MEM;.    }else{.
25890 20 20 20 20 20 20 61 73 73 65 72 74 28 20 64 62        assert( db
258a0 2d 3e 69 6e 69 74 2e 62 75 73 79 3d 3d 30 20 29  ->init.busy==0 )
258b0 3b 0a 20 20 20 20 20 20 64 62 2d 3e 69 6e 69 74  ;.      db->init
258c0 2e 62 75 73 79 20 3d 20 31 3b 0a 20 20 20 20 20  .busy = 1;.     
258d0 20 69 6e 69 74 44 61 74 61 2e 72 63 20 3d 20 53   initData.rc = S
258e0 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 20 20  QLITE_OK;.      
258f0 61 73 73 65 72 74 28 20 21 64 62 2d 3e 6d 61 6c  assert( !db->mal
25900 6c 6f 63 46 61 69 6c 65 64 20 29 3b 0a 20 20 20  locFailed );.   
25910 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f     rc = sqlite3_
25920 65 78 65 63 28 64 62 2c 20 7a 53 71 6c 2c 20 73  exec(db, zSql, s
25930 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61  qlite3InitCallba
25940 63 6b 2c 20 26 69 6e 69 74 44 61 74 61 2c 20 30  ck, &initData, 0
25950 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d  );.      if( rc=
25960 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 72 63 20  =SQLITE_OK ) rc 
25970 3d 20 69 6e 69 74 44 61 74 61 2e 72 63 3b 0a 20  = initData.rc;. 
25980 20 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72       sqlite3DbFr
25990 65 65 28 64 62 2c 20 7a 53 71 6c 29 3b 0a 20 20  ee(db, zSql);.  
259a0 20 20 20 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73      db->init.bus
259b0 79 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 7d  y = 0;.    }.  }
259c0 0a 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c  .  sqlite3BtreeL
259d0 65 61 76 65 41 6c 6c 28 64 62 29 3b 0a 20 20 69  eaveAll(db);.  i
259e0 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4e 4f  f( rc==SQLITE_NO
259f0 4d 45 4d 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  MEM ){.    goto 
25a00 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 62 72  no_mem;.  }.  br
25a10 65 61 6b 3b 20 20 0a 7d 0a 0a 23 69 66 20 21 64  eak;  .}..#if !d
25a20 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
25a30 49 54 5f 41 4e 41 4c 59 5a 45 29 0a 2f 2a 20 4f  IT_ANALYZE)./* O
25a40 70 63 6f 64 65 3a 20 4c 6f 61 64 41 6e 61 6c 79  pcode: LoadAnaly
25a50 73 69 73 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a  sis P1 * * * *.*
25a60 2a 0a 2a 2a 20 52 65 61 64 20 74 68 65 20 73 71  *.** Read the sq
25a70 6c 69 74 65 5f 73 74 61 74 31 20 74 61 62 6c 65  lite_stat1 table
25a80 20 66 6f 72 20 64 61 74 61 62 61 73 65 20 50 31   for database P1
25a90 20 61 6e 64 20 6c 6f 61 64 20 74 68 65 20 63 6f   and load the co
25aa0 6e 74 65 6e 74 0a 2a 2a 20 6f 66 20 74 68 61 74  ntent.** of that
25ab0 20 74 61 62 6c 65 20 69 6e 74 6f 20 74 68 65 20   table into the 
25ac0 69 6e 74 65 72 6e 61 6c 20 69 6e 64 65 78 20 68  internal index h
25ad0 61 73 68 20 74 61 62 6c 65 2e 20 20 54 68 69 73  ash table.  This
25ae0 20 77 69 6c 6c 20 63 61 75 73 65 0a 2a 2a 20 74   will cause.** t
25af0 68 65 20 61 6e 61 6c 79 73 69 73 20 74 6f 20 62  he analysis to b
25b00 65 20 75 73 65 64 20 77 68 65 6e 20 70 72 65 70  e used when prep
25b10 61 72 69 6e 67 20 61 6c 6c 20 73 75 62 73 65 71  aring all subseq
25b20 75 65 6e 74 20 71 75 65 72 69 65 73 2e 0a 2a 2f  uent queries..*/
25b30 0a 63 61 73 65 20 4f 50 5f 4c 6f 61 64 41 6e 61  .case OP_LoadAna
25b40 6c 79 73 69 73 3a 20 7b 0a 20 20 61 73 73 65 72  lysis: {.  asser
25b50 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
25b60 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62   pOp->p1<db->nDb
25b70 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   );.  rc = sqlit
25b80 65 33 41 6e 61 6c 79 73 69 73 4c 6f 61 64 28 64  e3AnalysisLoad(d
25b90 62 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 62  b, pOp->p1);.  b
25ba0 72 65 61 6b 3b 20 20 0a 7d 0a 23 65 6e 64 69 66  reak;  .}.#endif
25bb0 20 2f 2a 20 21 64 65 66 69 6e 65 64 28 53 51 4c   /* !defined(SQL
25bc0 49 54 45 5f 4f 4d 49 54 5f 41 4e 41 4c 59 5a 45  ITE_OMIT_ANALYZE
25bd0 29 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  ) */../* Opcode:
25be0 20 44 72 6f 70 54 61 62 6c 65 20 50 31 20 2a 20   DropTable P1 * 
25bf0 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d  * P4 *.**.** Rem
25c00 6f 76 65 20 74 68 65 20 69 6e 74 65 72 6e 61 6c  ove the internal
25c10 20 28 69 6e 2d 6d 65 6d 6f 72 79 29 20 64 61 74   (in-memory) dat
25c20 61 20 73 74 72 75 63 74 75 72 65 73 20 74 68 61  a structures tha
25c30 74 20 64 65 73 63 72 69 62 65 0a 2a 2a 20 74 68  t describe.** th
25c40 65 20 74 61 62 6c 65 20 6e 61 6d 65 64 20 50 34  e table named P4
25c50 20 69 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e   in database P1.
25c60 20 20 54 68 69 73 20 69 73 20 63 61 6c 6c 65 64    This is called
25c70 20 61 66 74 65 72 20 61 20 74 61 62 6c 65 0a 2a   after a table.*
25c80 2a 20 69 73 20 64 72 6f 70 70 65 64 20 69 6e 20  * is dropped in 
25c90 6f 72 64 65 72 20 74 6f 20 6b 65 65 70 20 74 68  order to keep th
25ca0 65 20 69 6e 74 65 72 6e 61 6c 20 72 65 70 72 65  e internal repre
25cb0 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65  sentation of the
25cc0 0a 2a 2a 20 73 63 68 65 6d 61 20 63 6f 6e 73 69  .** schema consi
25cd0 73 74 65 6e 74 20 77 69 74 68 20 77 68 61 74 20  stent with what 
25ce0 69 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63  is on disk..*/.c
25cf0 61 73 65 20 4f 50 5f 44 72 6f 70 54 61 62 6c 65  ase OP_DropTable
25d00 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 55 6e 6c  : {.  sqlite3Unl
25d10 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 61 62 6c  inkAndDeleteTabl
25d20 65 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70  e(db, pOp->p1, p
25d30 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62 72 65  Op->p4.z);.  bre
25d40 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
25d50 3a 20 44 72 6f 70 49 6e 64 65 78 20 50 31 20 2a  : DropIndex P1 *
25d60 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65   * P4 *.**.** Re
25d70 6d 6f 76 65 20 74 68 65 20 69 6e 74 65 72 6e 61  move the interna
25d80 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79 29 20 64 61  l (in-memory) da
25d90 74 61 20 73 74 72 75 63 74 75 72 65 73 20 74 68  ta structures th
25da0 61 74 20 64 65 73 63 72 69 62 65 0a 2a 2a 20 74  at describe.** t
25db0 68 65 20 69 6e 64 65 78 20 6e 61 6d 65 64 20 50  he index named P
25dc0 34 20 69 6e 20 64 61 74 61 62 61 73 65 20 50 31  4 in database P1
25dd0 2e 20 20 54 68 69 73 20 69 73 20 63 61 6c 6c 65  .  This is calle
25de0 64 20 61 66 74 65 72 20 61 6e 20 69 6e 64 65 78  d after an index
25df0 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65 64 20 69  .** is dropped i
25e00 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65 70 20  n order to keep 
25e10 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 72 65 70  the internal rep
25e20 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74  resentation of t
25e30 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 63 6f 6e  he.** schema con
25e40 73 69 73 74 65 6e 74 20 77 69 74 68 20 77 68 61  sistent with wha
25e50 74 20 69 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f  t is on disk..*/
25e60 0a 63 61 73 65 20 4f 50 5f 44 72 6f 70 49 6e 64  .case OP_DropInd
25e70 65 78 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 55  ex: {.  sqlite3U
25e80 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 49 6e  nlinkAndDeleteIn
25e90 64 65 78 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c  dex(db, pOp->p1,
25ea0 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62   pOp->p4.z);.  b
25eb0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
25ec0 64 65 3a 20 44 72 6f 70 54 72 69 67 67 65 72 20  de: DropTrigger 
25ed0 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a  P1 * * P4 *.**.*
25ee0 2a 20 52 65 6d 6f 76 65 20 74 68 65 20 69 6e 74  * Remove the int
25ef0 65 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79  ernal (in-memory
25f00 29 20 64 61 74 61 20 73 74 72 75 63 74 75 72 65  ) data structure
25f10 73 20 74 68 61 74 20 64 65 73 63 72 69 62 65 0a  s that describe.
25f20 2a 2a 20 74 68 65 20 74 72 69 67 67 65 72 20 6e  ** the trigger n
25f30 61 6d 65 64 20 50 34 20 69 6e 20 64 61 74 61 62  amed P4 in datab
25f40 61 73 65 20 50 31 2e 20 20 54 68 69 73 20 69 73  ase P1.  This is
25f50 20 63 61 6c 6c 65 64 20 61 66 74 65 72 20 61 20   called after a 
25f60 74 72 69 67 67 65 72 0a 2a 2a 20 69 73 20 64 72  trigger.** is dr
25f70 6f 70 70 65 64 20 69 6e 20 6f 72 64 65 72 20 74  opped in order t
25f80 6f 20 6b 65 65 70 20 74 68 65 20 69 6e 74 65 72  o keep the inter
25f90 6e 61 6c 20 72 65 70 72 65 73 65 6e 74 61 74 69  nal representati
25fa0 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68  on of the.** sch
25fb0 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74 20 77  ema consistent w
25fc0 69 74 68 20 77 68 61 74 20 69 73 20 6f 6e 20 64  ith what is on d
25fd0 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  isk..*/.case OP_
25fe0 44 72 6f 70 54 72 69 67 67 65 72 3a 20 7b 0a 20  DropTrigger: {. 
25ff0 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e   sqlite3UnlinkAn
26000 64 44 65 6c 65 74 65 54 72 69 67 67 65 72 28 64  dDeleteTrigger(d
26010 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d  b, pOp->p1, pOp-
26020 3e 70 34 2e 7a 29 3b 0a 20 20 62 72 65 61 6b 3b  >p4.z);.  break;
26030 0a 7d 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  .}...#ifndef SQL
26040 49 54 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49  ITE_OMIT_INTEGRI
26050 54 59 5f 43 48 45 43 4b 0a 2f 2a 20 4f 70 63 6f  TY_CHECK./* Opco
26060 64 65 3a 20 49 6e 74 65 67 72 69 74 79 43 6b 20  de: IntegrityCk 
26070 50 31 20 50 32 20 50 33 20 2a 20 50 35 0a 2a 2a  P1 P2 P3 * P5.**
26080 0a 2a 2a 20 44 6f 20 61 6e 20 61 6e 61 6c 79 73  .** Do an analys
26090 69 73 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e  is of the curren
260a0 74 6c 79 20 6f 70 65 6e 20 64 61 74 61 62 61 73  tly open databas
260b0 65 2e 20 20 53 74 6f 72 65 20 69 6e 0a 2a 2a 20  e.  Store in.** 
260c0 72 65 67 69 73 74 65 72 20 50 31 20 74 68 65 20  register P1 the 
260d0 74 65 78 74 20 6f 66 20 61 6e 20 65 72 72 6f 72  text of an error
260e0 20 6d 65 73 73 61 67 65 20 64 65 73 63 72 69 62   message describ
260f0 69 6e 67 20 61 6e 79 20 70 72 6f 62 6c 65 6d 73  ing any problems
26100 2e 0a 2a 2a 20 49 66 20 6e 6f 20 70 72 6f 62 6c  ..** If no probl
26110 65 6d 73 20 61 72 65 20 66 6f 75 6e 64 2c 20 73  ems are found, s
26120 74 6f 72 65 20 61 20 4e 55 4c 4c 20 69 6e 20 72  tore a NULL in r
26130 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 0a 2a  egister P1..**.*
26140 2a 20 54 68 65 20 72 65 67 69 73 74 65 72 20 50  * The register P
26150 33 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 6d  3 contains the m
26160 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f 66  aximum number of
26170 20 61 6c 6c 6f 77 65 64 20 65 72 72 6f 72 73 2e   allowed errors.
26180 0a 2a 2a 20 41 74 20 6d 6f 73 74 20 72 65 67 28  .** At most reg(
26190 50 33 29 20 65 72 72 6f 72 73 20 77 69 6c 6c 20  P3) errors will 
261a0 62 65 20 72 65 70 6f 72 74 65 64 2e 0a 2a 2a 20  be reported..** 
261b0 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
261c0 74 68 65 20 61 6e 61 6c 79 73 69 73 20 73 74 6f  the analysis sto
261d0 70 73 20 61 73 20 73 6f 6f 6e 20 61 73 20 72 65  ps as soon as re
261e0 67 28 50 31 29 20 65 72 72 6f 72 73 20 61 72 65  g(P1) errors are
261f0 20 0a 2a 2a 20 73 65 65 6e 2e 20 20 52 65 67 28   .** seen.  Reg(
26200 50 31 29 20 69 73 20 75 70 64 61 74 65 64 20 77  P1) is updated w
26210 69 74 68 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  ith the number o
26220 66 20 65 72 72 6f 72 73 20 72 65 6d 61 69 6e 69  f errors remaini
26230 6e 67 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 6f  ng..**.** The ro
26240 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72 73 20  ot page numbers 
26250 6f 66 20 61 6c 6c 20 74 61 62 6c 65 73 20 69 6e  of all tables in
26260 20 74 68 65 20 64 61 74 61 62 61 73 65 20 61 72   the database ar
26270 65 20 69 6e 74 65 67 65 72 0a 2a 2a 20 73 74 6f  e integer.** sto
26280 72 65 64 20 69 6e 20 72 65 67 28 50 31 29 2c 20  red in reg(P1), 
26290 72 65 67 28 50 31 2b 31 29 2c 20 72 65 67 28 50  reg(P1+1), reg(P
262a0 31 2b 32 29 2c 20 2e 2e 2e 2e 20 20 54 68 65 72  1+2), ....  Ther
262b0 65 20 61 72 65 20 50 32 20 74 61 62 6c 65 73 0a  e are P2 tables.
262c0 2a 2a 20 74 6f 74 61 6c 2e 0a 2a 2a 0a 2a 2a 20  ** total..**.** 
262d0 49 66 20 50 35 20 69 73 20 6e 6f 74 20 7a 65 72  If P5 is not zer
262e0 6f 2c 20 74 68 65 20 63 68 65 63 6b 20 69 73 20  o, the check is 
262f0 64 6f 6e 65 20 6f 6e 20 74 68 65 20 61 75 78 69  done on the auxi
26300 6c 69 61 72 79 20 64 61 74 61 62 61 73 65 0a 2a  liary database.*
26310 2a 20 66 69 6c 65 2c 20 6e 6f 74 20 74 68 65 20  * file, not the 
26320 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69  main database fi
26330 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  le..**.** This o
26340 70 63 6f 64 65 20 69 73 20 75 73 65 64 20 74 6f  pcode is used to
26350 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65 20 69   implement the i
26360 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 20 70  ntegrity_check p
26370 72 61 67 6d 61 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ragma..*/.case O
26380 50 5f 49 6e 74 65 67 72 69 74 79 43 6b 3a 20 7b  P_IntegrityCk: {
26390 0a 20 20 69 6e 74 20 6e 52 6f 6f 74 3b 20 20 20  .  int nRoot;   
263a0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
263b0 74 61 62 6c 65 73 20 74 6f 20 63 68 65 63 6b 2e  tables to check.
263c0 20 20 28 4e 75 6d 62 65 72 20 6f 66 20 72 6f 6f    (Number of roo
263d0 74 20 70 61 67 65 73 2e 29 20 2a 2f 0a 20 20 69  t pages.) */.  i
263e0 6e 74 20 2a 61 52 6f 6f 74 3b 20 20 20 20 20 2f  nt *aRoot;     /
263f0 2a 20 41 72 72 61 79 20 6f 66 20 72 6f 6f 74 70  * Array of rootp
26400 61 67 65 20 6e 75 6d 62 65 72 73 20 66 6f 72 20  age numbers for 
26410 74 61 62 6c 65 73 20 74 6f 20 62 65 20 63 68 65  tables to be che
26420 63 6b 65 64 20 2a 2f 0a 20 20 69 6e 74 20 6a 3b  cked */.  int j;
26430 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f            /* Loo
26440 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 69  p counter */.  i
26450 6e 74 20 6e 45 72 72 3b 20 20 20 20 20 20 20 2f  nt nErr;       /
26460 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f  * Number of erro
26470 72 73 20 72 65 70 6f 72 74 65 64 20 2a 2f 0a 20  rs reported */. 
26480 20 63 68 61 72 20 2a 7a 3b 20 20 20 20 20 20 20   char *z;       
26490 20 2f 2a 20 54 65 78 74 20 6f 66 20 74 68 65 20   /* Text of the 
264a0 65 72 72 6f 72 20 72 65 70 6f 72 74 20 2a 2f 0a  error report */.
264b0 20 20 4d 65 6d 20 2a 70 6e 45 72 72 3b 20 20 20    Mem *pnErr;   
264c0 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 6b 65    /* Register ke
264d0 65 70 69 6e 67 20 74 72 61 63 6b 20 6f 66 20 65  eping track of e
264e0 72 72 6f 72 73 20 72 65 6d 61 69 6e 69 6e 67 20  rrors remaining 
264f0 2a 2f 0a 20 20 0a 20 20 6e 52 6f 6f 74 20 3d 20  */.  .  nRoot = 
26500 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72  pOp->p2;.  asser
26510 74 28 20 6e 52 6f 6f 74 3e 30 20 29 3b 0a 20 20  t( nRoot>0 );.  
26520 61 52 6f 6f 74 20 3d 20 73 71 6c 69 74 65 33 44  aRoot = sqlite3D
26530 62 4d 61 6c 6c 6f 63 52 61 77 28 64 62 2c 20 73  bMallocRaw(db, s
26540 69 7a 65 6f 66 28 69 6e 74 29 2a 28 6e 52 6f 6f  izeof(int)*(nRoo
26550 74 2b 31 29 20 29 3b 0a 20 20 69 66 28 20 61 52  t+1) );.  if( aR
26560 6f 6f 74 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f  oot==0 ) goto no
26570 5f 6d 65 6d 3b 0a 20 20 61 73 73 65 72 74 28 20  _mem;.  assert( 
26580 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70  pOp->p3>0 && pOp
26590 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b  ->p3<=p->nMem );
265a0 0a 20 20 70 6e 45 72 72 20 3d 20 26 61 4d 65 6d  .  pnErr = &aMem
265b0 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73  [pOp->p3];.  ass
265c0 65 72 74 28 20 28 70 6e 45 72 72 2d 3e 66 6c 61  ert( (pnErr->fla
265d0 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30  gs & MEM_Int)!=0
265e0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70   );.  assert( (p
265f0 6e 45 72 72 2d 3e 66 6c 61 67 73 20 26 20 28 4d  nErr->flags & (M
26600 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29  EM_Str|MEM_Blob)
26610 29 3d 3d 30 20 29 3b 0a 20 20 70 49 6e 31 20 3d  )==0 );.  pIn1 =
26620 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
26630 0a 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c 6e 52  .  for(j=0; j<nR
26640 6f 6f 74 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 61  oot; j++){.    a
26650 52 6f 6f 74 5b 6a 5d 20 3d 20 28 69 6e 74 29 73  Root[j] = (int)s
26660 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c  qlite3VdbeIntVal
26670 75 65 28 26 70 49 6e 31 5b 6a 5d 29 3b 0a 20 20  ue(&pIn1[j]);.  
26680 7d 0a 20 20 61 52 6f 6f 74 5b 6a 5d 20 3d 20 30  }.  aRoot[j] = 0
26690 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
266a0 3e 70 35 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20  >p5<db->nDb );. 
266b0 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72   assert( (p->btr
266c0 65 65 4d 61 73 6b 20 26 20 28 28 28 79 44 62 4d  eeMask & (((yDbM
266d0 61 73 6b 29 31 29 3c 3c 70 4f 70 2d 3e 70 35 29  ask)1)<<pOp->p5)
266e0 29 21 3d 30 20 29 3b 0a 20 20 7a 20 3d 20 73 71  )!=0 );.  z = sq
266f0 6c 69 74 65 33 42 74 72 65 65 49 6e 74 65 67 72  lite3BtreeIntegr
26700 69 74 79 43 68 65 63 6b 28 64 62 2d 3e 61 44 62  ityCheck(db->aDb
26710 5b 70 4f 70 2d 3e 70 35 5d 2e 70 42 74 2c 20 61  [pOp->p5].pBt, a
26720 52 6f 6f 74 2c 20 6e 52 6f 6f 74 2c 0a 20 20 20  Root, nRoot,.   
26730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 69                (i
26750 6e 74 29 70 6e 45 72 72 2d 3e 75 2e 69 2c 20 26  nt)pnErr->u.i, &
26760 6e 45 72 72 29 3b 0a 20 20 73 71 6c 69 74 65 33  nErr);.  sqlite3
26770 44 62 46 72 65 65 28 64 62 2c 20 61 52 6f 6f 74  DbFree(db, aRoot
26780 29 3b 0a 20 20 70 6e 45 72 72 2d 3e 75 2e 69 20  );.  pnErr->u.i 
26790 2d 3d 20 6e 45 72 72 3b 0a 20 20 73 71 6c 69 74  -= nErr;.  sqlit
267a0 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c  e3VdbeMemSetNull
267b0 28 70 49 6e 31 29 3b 0a 20 20 69 66 28 20 6e 45  (pIn1);.  if( nE
267c0 72 72 3d 3d 30 20 29 7b 0a 20 20 20 20 61 73 73  rr==0 ){.    ass
267d0 65 72 74 28 20 7a 3d 3d 30 20 29 3b 0a 20 20 7d  ert( z==0 );.  }
267e0 65 6c 73 65 20 69 66 28 20 7a 3d 3d 30 20 29 7b  else if( z==0 ){
267f0 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  .    goto no_mem
26800 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73  ;.  }else{.    s
26810 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
26820 53 74 72 28 70 49 6e 31 2c 20 7a 2c 20 2d 31 2c  Str(pIn1, z, -1,
26830 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 73 71   SQLITE_UTF8, sq
26840 6c 69 74 65 33 5f 66 72 65 65 29 3b 0a 20 20 7d  lite3_free);.  }
26850 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c  .  UPDATE_MAX_BL
26860 4f 42 53 49 5a 45 28 70 49 6e 31 29 3b 0a 20 20  OBSIZE(pIn1);.  
26870 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67  sqlite3VdbeChang
26880 65 45 6e 63 6f 64 69 6e 67 28 70 49 6e 31 2c 20  eEncoding(pIn1, 
26890 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 62 72 65  encoding);.  bre
268a0 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ak;.}.#endif /* 
268b0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 54 45  SQLITE_OMIT_INTE
268c0 47 52 49 54 59 5f 43 48 45 43 4b 20 2a 2f 0a 0a  GRITY_CHECK */..
268d0 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 53 65  /* Opcode: RowSe
268e0 74 41 64 64 20 50 31 20 50 32 20 2a 20 2a 20 2a  tAdd P1 P2 * * *
268f0 0a 2a 2a 0a 2a 2a 20 49 6e 73 65 72 74 20 74 68  .**.** Insert th
26900 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20  e integer value 
26910 68 65 6c 64 20 62 79 20 72 65 67 69 73 74 65 72  held by register
26920 20 50 32 20 69 6e 74 6f 20 61 20 62 6f 6f 6c 65   P2 into a boole
26930 61 6e 20 69 6e 64 65 78 0a 2a 2a 20 68 65 6c 64  an index.** held
26940 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e   in register P1.
26950 0a 2a 2a 0a 2a 2a 20 41 6e 20 61 73 73 65 72 74  .**.** An assert
26960 69 6f 6e 20 66 61 69 6c 73 20 69 66 20 50 32 20  ion fails if P2 
26970 69 73 20 6e 6f 74 20 61 6e 20 69 6e 74 65 67 65  is not an intege
26980 72 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f  r..*/.case OP_Ro
26990 77 53 65 74 41 64 64 3a 20 7b 20 20 20 20 20 20  wSetAdd: {      
269a0 20 2f 2a 20 69 6e 31 2c 20 69 6e 32 20 2a 2f 0a   /* in1, in2 */.
269b0 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
269c0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 32 20  Op->p1];.  pIn2 
269d0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
269e0 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 49 6e  ;.  assert( (pIn
269f0 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  2->flags & MEM_I
26a00 6e 74 29 21 3d 30 20 29 3b 0a 20 20 69 66 28 20  nt)!=0 );.  if( 
26a10 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn1->flags & M
26a20 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29 7b  EM_RowSet)==0 ){
26a30 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
26a40 4d 65 6d 53 65 74 52 6f 77 53 65 74 28 70 49 6e  MemSetRowSet(pIn
26a50 31 29 3b 0a 20 20 20 20 69 66 28 20 28 70 49 6e  1);.    if( (pIn
26a60 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52  1->flags & MEM_R
26a70 6f 77 53 65 74 29 3d 3d 30 20 29 20 67 6f 74 6f  owSet)==0 ) goto
26a80 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 73   no_mem;.  }.  s
26a90 71 6c 69 74 65 33 52 6f 77 53 65 74 49 6e 73 65  qlite3RowSetInse
26aa0 72 74 28 70 49 6e 31 2d 3e 75 2e 70 52 6f 77 53  rt(pIn1->u.pRowS
26ab0 65 74 2c 20 70 49 6e 32 2d 3e 75 2e 69 29 3b 0a  et, pIn2->u.i);.
26ac0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
26ad0 70 63 6f 64 65 3a 20 52 6f 77 53 65 74 52 65 61  pcode: RowSetRea
26ae0 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  d P1 P2 P3 * *.*
26af0 2a 0a 2a 2a 20 45 78 74 72 61 63 74 20 74 68 65  *.** Extract the
26b00 20 73 6d 61 6c 6c 65 73 74 20 76 61 6c 75 65 20   smallest value 
26b10 66 72 6f 6d 20 62 6f 6f 6c 65 61 6e 20 69 6e 64  from boolean ind
26b20 65 78 20 50 31 20 61 6e 64 20 70 75 74 20 74 68  ex P1 and put th
26b30 61 74 20 76 61 6c 75 65 20 69 6e 74 6f 0a 2a 2a  at value into.**
26b40 20 72 65 67 69 73 74 65 72 20 50 33 2e 20 20 4f   register P3.  O
26b50 72 2c 20 69 66 20 62 6f 6f 6c 65 61 6e 20 69 6e  r, if boolean in
26b60 64 65 78 20 50 31 20 69 73 20 69 6e 69 74 69 61  dex P1 is initia
26b70 6c 6c 79 20 65 6d 70 74 79 2c 20 6c 65 61 76 65  lly empty, leave
26b80 20 50 33 0a 2a 2a 20 75 6e 63 68 61 6e 67 65 64   P3.** unchanged
26b90 20 61 6e 64 20 6a 75 6d 70 20 74 6f 20 69 6e 73   and jump to ins
26ba0 74 72 75 63 74 69 6f 6e 20 50 32 2e 0a 2a 2f 0a  truction P2..*/.
26bb0 63 61 73 65 20 4f 50 5f 52 6f 77 53 65 74 52 65  case OP_RowSetRe
26bc0 61 64 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20 6a  ad: {       /* j
26bd0 75 6d 70 2c 20 69 6e 31 2c 20 6f 75 74 33 20 2a  ump, in1, out3 *
26be0 2f 0a 20 20 69 36 34 20 76 61 6c 3b 0a 20 20 43  /.  i64 val;.  C
26bf0 48 45 43 4b 5f 46 4f 52 5f 49 4e 54 45 52 52 55  HECK_FOR_INTERRU
26c00 50 54 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d  PT;.  pIn1 = &aM
26c10 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69  em[pOp->p1];.  i
26c20 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
26c30 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30  & MEM_RowSet)==0
26c40 20 0a 20 20 20 7c 7c 20 73 71 6c 69 74 65 33 52   .   || sqlite3R
26c50 6f 77 53 65 74 4e 65 78 74 28 70 49 6e 31 2d 3e  owSetNext(pIn1->
26c60 75 2e 70 52 6f 77 53 65 74 2c 20 26 76 61 6c 29  u.pRowSet, &val)
26c70 3d 3d 30 0a 20 20 29 7b 0a 20 20 20 20 2f 2a 20  ==0.  ){.    /* 
26c80 54 68 65 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65  The boolean inde
26c90 78 20 69 73 20 65 6d 70 74 79 20 2a 2f 0a 20 20  x is empty */.  
26ca0 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
26cb0 53 65 74 4e 75 6c 6c 28 70 49 6e 31 29 3b 0a 20  SetNull(pIn1);. 
26cc0 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
26cd0 2d 20 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  - 1;.  }else{.  
26ce0 20 20 2f 2a 20 41 20 76 61 6c 75 65 20 77 61 73    /* A value was
26cf0 20 70 75 6c 6c 65 64 20 66 72 6f 6d 20 74 68 65   pulled from the
26d00 20 69 6e 64 65 78 20 2a 2f 0a 20 20 20 20 73 71   index */.    sq
26d10 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49  lite3VdbeMemSetI
26d20 6e 74 36 34 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e  nt64(&aMem[pOp->
26d30 70 33 5d 2c 20 76 61 6c 29 3b 0a 20 20 7d 0a 20  p3], val);.  }. 
26d40 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
26d50 63 6f 64 65 3a 20 52 6f 77 53 65 74 54 65 73 74  code: RowSetTest
26d60 20 50 31 20 50 32 20 50 33 20 50 34 0a 2a 2a 0a   P1 P2 P3 P4.**.
26d70 2a 2a 20 52 65 67 69 73 74 65 72 20 50 33 20 69  ** Register P3 i
26d80 73 20 61 73 73 75 6d 65 64 20 74 6f 20 68 6f 6c  s assumed to hol
26d90 64 20 61 20 36 34 2d 62 69 74 20 69 6e 74 65 67  d a 64-bit integ
26da0 65 72 20 76 61 6c 75 65 2e 20 49 66 20 72 65 67  er value. If reg
26db0 69 73 74 65 72 20 50 31 0a 2a 2a 20 63 6f 6e 74  ister P1.** cont
26dc0 61 69 6e 73 20 61 20 52 6f 77 53 65 74 20 6f 62  ains a RowSet ob
26dd0 6a 65 63 74 20 61 6e 64 20 74 68 61 74 20 52 6f  ject and that Ro
26de0 77 53 65 74 20 6f 62 6a 65 63 74 20 63 6f 6e 74  wSet object cont
26df0 61 69 6e 73 0a 2a 2a 20 74 68 65 20 76 61 6c 75  ains.** the valu
26e00 65 20 68 65 6c 64 20 69 6e 20 50 33 2c 20 6a 75  e held in P3, ju
26e10 6d 70 20 74 6f 20 72 65 67 69 73 74 65 72 20 50  mp to register P
26e20 32 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69 6e  2. Otherwise, in
26e30 73 65 72 74 20 74 68 65 0a 2a 2a 20 69 6e 74 65  sert the.** inte
26e40 67 65 72 20 69 6e 20 50 33 20 69 6e 74 6f 20 74  ger in P3 into t
26e50 68 65 20 52 6f 77 53 65 74 20 61 6e 64 20 63 6f  he RowSet and co
26e60 6e 74 69 6e 75 65 20 6f 6e 20 74 6f 20 74 68 65  ntinue on to the
26e70 0a 2a 2a 20 6e 65 78 74 20 6f 70 63 6f 64 65 2e  .** next opcode.
26e80 0a 2a 2a 0a 2a 2a 20 54 68 65 20 52 6f 77 53 65  .**.** The RowSe
26e90 74 20 6f 62 6a 65 63 74 20 69 73 20 6f 70 74 69  t object is opti
26ea0 6d 69 7a 65 64 20 66 6f 72 20 74 68 65 20 63 61  mized for the ca
26eb0 73 65 20 77 68 65 72 65 20 73 75 63 63 65 73 73  se where success
26ec0 69 76 65 20 73 65 74 73 0a 2a 2a 20 6f 66 20 69  ive sets.** of i
26ed0 6e 74 65 67 65 72 73 2c 20 77 68 65 72 65 20 65  ntegers, where e
26ee0 61 63 68 20 73 65 74 20 63 6f 6e 74 61 69 6e 73  ach set contains
26ef0 20 6e 6f 20 64 75 70 6c 69 63 61 74 65 73 2e 20   no duplicates. 
26f00 45 61 63 68 20 73 65 74 0a 2a 2a 20 6f 66 20 76  Each set.** of v
26f10 61 6c 75 65 73 20 69 73 20 69 64 65 6e 74 69 66  alues is identif
26f20 69 65 64 20 62 79 20 61 20 75 6e 69 71 75 65 20  ied by a unique 
26f30 50 34 20 76 61 6c 75 65 2e 20 54 68 65 20 66 69  P4 value. The fi
26f40 72 73 74 20 73 65 74 0a 2a 2a 20 6d 75 73 74 20  rst set.** must 
26f50 68 61 76 65 20 50 34 3d 3d 30 2c 20 74 68 65 20  have P4==0, the 
26f60 66 69 6e 61 6c 20 73 65 74 20 50 34 3d 2d 31 2e  final set P4=-1.
26f70 20 20 50 34 20 6d 75 73 74 20 62 65 20 65 69 74    P4 must be eit
26f80 68 65 72 20 2d 31 20 6f 72 0a 2a 2a 20 6e 6f 6e  her -1 or.** non
26f90 2d 6e 65 67 61 74 69 76 65 2e 20 20 46 6f 72 20  -negative.  For 
26fa0 6e 6f 6e 2d 6e 65 67 61 74 69 76 65 20 76 61 6c  non-negative val
26fb0 75 65 73 20 6f 66 20 50 34 20 6f 6e 6c 79 20 74  ues of P4 only t
26fc0 68 65 20 6c 6f 77 65 72 20 34 0a 2a 2a 20 62 69  he lower 4.** bi
26fd0 74 73 20 61 72 65 20 73 69 67 6e 69 66 69 63 61  ts are significa
26fe0 6e 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 61  nt..**.** This a
26ff0 6c 6c 6f 77 73 20 6f 70 74 69 6d 69 7a 61 74 69  llows optimizati
27000 6f 6e 73 3a 20 28 61 29 20 77 68 65 6e 20 50 34  ons: (a) when P4
27010 3d 3d 30 20 74 68 65 72 65 20 69 73 20 6e 6f 20  ==0 there is no 
27020 6e 65 65 64 20 74 6f 20 74 65 73 74 0a 2a 2a 20  need to test.** 
27030 74 68 65 20 72 6f 77 73 65 74 20 6f 62 6a 65 63  the rowset objec
27040 74 20 66 6f 72 20 50 33 2c 20 61 73 20 69 74 20  t for P3, as it 
27050 69 73 20 67 75 61 72 61 6e 74 65 65 64 20 6e 6f  is guaranteed no
27060 74 20 74 6f 20 63 6f 6e 74 61 69 6e 20 69 74 2c  t to contain it,
27070 0a 2a 2a 20 28 62 29 20 77 68 65 6e 20 50 34 3d  .** (b) when P4=
27080 3d 2d 31 20 74 68 65 72 65 20 69 73 20 6e 6f 20  =-1 there is no 
27090 6e 65 65 64 20 74 6f 20 69 6e 73 65 72 74 20 74  need to insert t
270a0 68 65 20 76 61 6c 75 65 2c 20 61 73 20 69 74 20  he value, as it 
270b0 77 69 6c 6c 0a 2a 2a 20 6e 65 76 65 72 20 62 65  will.** never be
270c0 20 74 65 73 74 65 64 20 66 6f 72 2c 20 61 6e 64   tested for, and
270d0 20 28 63 29 20 77 68 65 6e 20 61 20 76 61 6c 75   (c) when a valu
270e0 65 20 74 68 61 74 20 69 73 20 70 61 72 74 20 6f  e that is part o
270f0 66 20 73 65 74 20 58 20 69 73 0a 2a 2a 20 69 6e  f set X is.** in
27100 73 65 72 74 65 64 2c 20 74 68 65 72 65 20 69 73  serted, there is
27110 20 6e 6f 20 6e 65 65 64 20 74 6f 20 73 65 61 72   no need to sear
27120 63 68 20 74 6f 20 73 65 65 20 69 66 20 74 68 65  ch to see if the
27130 20 73 61 6d 65 20 76 61 6c 75 65 20 77 61 73 0a   same value was.
27140 2a 2a 20 70 72 65 76 69 6f 75 73 6c 79 20 69 6e  ** previously in
27150 73 65 72 74 65 64 20 61 73 20 70 61 72 74 20 6f  serted as part o
27160 66 20 73 65 74 20 58 20 28 6f 6e 6c 79 20 69 66  f set X (only if
27170 20 69 74 20 77 61 73 20 70 72 65 76 69 6f 75 73   it was previous
27180 6c 79 0a 2a 2a 20 69 6e 73 65 72 74 65 64 20 61  ly.** inserted a
27190 73 20 70 61 72 74 20 6f 66 20 73 6f 6d 65 20 6f  s part of some o
271a0 74 68 65 72 20 73 65 74 29 2e 0a 2a 2f 0a 63 61  ther set)..*/.ca
271b0 73 65 20 4f 50 5f 52 6f 77 53 65 74 54 65 73 74  se OP_RowSetTest
271c0 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
271d0 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
271e0 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 20 20 69   in1, in3 */.  i
271f0 6e 74 20 69 53 65 74 3b 0a 20 20 69 6e 74 20 65  nt iSet;.  int e
27200 78 69 73 74 73 3b 0a 0a 20 20 70 49 6e 31 20 3d  xists;..  pIn1 =
27210 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
27220 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b  .  pIn3 = &aMem[
27230 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 53 65 74  pOp->p3];.  iSet
27240 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20   = pOp->p4.i;.  
27250 61 73 73 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c  assert( pIn3->fl
27260 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 0a  ags&MEM_Int );..
27270 20 20 2f 2a 20 49 66 20 74 68 65 72 65 20 69 73    /* If there is
27280 20 61 6e 79 74 68 69 6e 67 20 6f 74 68 65 72 20   anything other 
27290 74 68 61 6e 20 61 20 72 6f 77 73 65 74 20 6f 62  than a rowset ob
272a0 6a 65 63 74 20 69 6e 20 6d 65 6d 6f 72 79 20 63  ject in memory c
272b0 65 6c 6c 20 50 31 2c 0a 20 20 2a 2a 20 64 65 6c  ell P1,.  ** del
272c0 65 74 65 20 69 74 20 6e 6f 77 20 61 6e 64 20 69  ete it now and i
272d0 6e 69 74 69 61 6c 69 7a 65 20 50 31 20 77 69 74  nitialize P1 wit
272e0 68 20 61 6e 20 65 6d 70 74 79 20 72 6f 77 73 65  h an empty rowse
272f0 74 0a 20 20 2a 2f 0a 20 20 69 66 28 20 28 70 49  t.  */.  if( (pI
27300 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
27310 52 6f 77 53 65 74 29 3d 3d 30 20 29 7b 0a 20 20  RowSet)==0 ){.  
27320 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
27330 53 65 74 52 6f 77 53 65 74 28 70 49 6e 31 29 3b  SetRowSet(pIn1);
27340 0a 20 20 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  .    if( (pIn1->
27350 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53  flags & MEM_RowS
27360 65 74 29 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f  et)==0 ) goto no
27370 5f 6d 65 6d 3b 0a 20 20 7d 0a 0a 20 20 61 73 73  _mem;.  }..  ass
27380 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65  ert( pOp->p4type
27390 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20  ==P4_INT32 );.  
273a0 61 73 73 65 72 74 28 20 69 53 65 74 3d 3d 2d 31  assert( iSet==-1
273b0 20 7c 7c 20 69 53 65 74 3e 3d 30 20 29 3b 0a 20   || iSet>=0 );. 
273c0 20 69 66 28 20 69 53 65 74 20 29 7b 0a 20 20 20   if( iSet ){.   
273d0 20 65 78 69 73 74 73 20 3d 20 73 71 6c 69 74 65   exists = sqlite
273e0 33 52 6f 77 53 65 74 54 65 73 74 28 70 49 6e 31  3RowSetTest(pIn1
273f0 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20 0a 20 20  ->u.pRowSet, .  
27400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27410 20 20 20 20 20 20 20 20 20 20 20 20 20 28 75 38               (u8
27420 29 28 69 53 65 74 3e 3d 30 20 3f 20 69 53 65 74  )(iSet>=0 ? iSet
27430 20 26 20 30 78 66 20 3a 20 30 78 66 66 29 2c 0a   & 0xf : 0xff),.
27440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
27460 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20 20 20 20 69  In3->u.i);.    i
27470 66 28 20 65 78 69 73 74 73 20 29 7b 0a 20 20 20  f( exists ){.   
27480 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
27490 2d 20 31 3b 0a 20 20 20 20 20 20 62 72 65 61 6b  - 1;.      break
274a0 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66  ;.    }.  }.  if
274b0 28 20 69 53 65 74 3e 3d 30 20 29 7b 0a 20 20 20  ( iSet>=0 ){.   
274c0 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 49 6e   sqlite3RowSetIn
274d0 73 65 72 74 28 70 49 6e 31 2d 3e 75 2e 70 52 6f  sert(pIn1->u.pRo
274e0 77 53 65 74 2c 20 70 49 6e 33 2d 3e 75 2e 69 29  wSet, pIn3->u.i)
274f0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
27500 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  ...#ifndef SQLIT
27510 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 0a 0a  E_OMIT_TRIGGER..
27520 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 72 6f 67 72  /* Opcode: Progr
27530 61 6d 20 50 31 20 50 32 20 50 33 20 50 34 20 2a  am P1 P2 P3 P4 *
27540 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20 74  .**.** Execute t
27550 68 65 20 74 72 69 67 67 65 72 20 70 72 6f 67 72  he trigger progr
27560 61 6d 20 70 61 73 73 65 64 20 61 73 20 50 34 20  am passed as P4 
27570 28 74 79 70 65 20 50 34 5f 53 55 42 50 52 4f 47  (type P4_SUBPROG
27580 52 41 4d 29 2e 20 0a 2a 2a 0a 2a 2a 20 50 31 20  RAM). .**.** P1 
27590 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 61 64 64  contains the add
275a0 72 65 73 73 20 6f 66 20 74 68 65 20 6d 65 6d 6f  ress of the memo
275b0 72 79 20 63 65 6c 6c 20 74 68 61 74 20 63 6f 6e  ry cell that con
275c0 74 61 69 6e 73 20 74 68 65 20 66 69 72 73 74 20  tains the first 
275d0 6d 65 6d 6f 72 79 20 0a 2a 2a 20 63 65 6c 6c 20  memory .** cell 
275e0 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20 76  in an array of v
275f0 61 6c 75 65 73 20 75 73 65 64 20 61 73 20 61 72  alues used as ar
27600 67 75 6d 65 6e 74 73 20 74 6f 20 74 68 65 20 73  guments to the s
27610 75 62 2d 70 72 6f 67 72 61 6d 2e 20 50 32 20 0a  ub-program. P2 .
27620 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20  ** contains the 
27630 61 64 64 72 65 73 73 20 74 6f 20 6a 75 6d 70 20  address to jump 
27640 74 6f 20 69 66 20 74 68 65 20 73 75 62 2d 70 72  to if the sub-pr
27650 6f 67 72 61 6d 20 74 68 72 6f 77 73 20 61 6e 20  ogram throws an 
27660 49 47 4e 4f 52 45 20 0a 2a 2a 20 65 78 63 65 70  IGNORE .** excep
27670 74 69 6f 6e 20 75 73 69 6e 67 20 74 68 65 20 52  tion using the R
27680 41 49 53 45 28 29 20 66 75 6e 63 74 69 6f 6e 2e  AISE() function.
27690 20 52 65 67 69 73 74 65 72 20 50 33 20 63 6f 6e   Register P3 con
276a0 74 61 69 6e 73 20 74 68 65 20 61 64 64 72 65 73  tains the addres
276b0 73 20 0a 2a 2a 20 6f 66 20 61 20 6d 65 6d 6f 72  s .** of a memor
276c0 79 20 63 65 6c 6c 20 69 6e 20 74 68 69 73 20 28  y cell in this (
276d0 74 68 65 20 70 61 72 65 6e 74 29 20 56 4d 20 74  the parent) VM t
276e0 68 61 74 20 69 73 20 75 73 65 64 20 74 6f 20 61  hat is used to a
276f0 6c 6c 6f 63 61 74 65 20 74 68 65 20 0a 2a 2a 20  llocate the .** 
27700 6d 65 6d 6f 72 79 20 72 65 71 75 69 72 65 64 20  memory required 
27710 62 79 20 74 68 65 20 73 75 62 2d 76 64 62 65 20  by the sub-vdbe 
27720 61 74 20 72 75 6e 74 69 6d 65 2e 0a 2a 2a 0a 2a  at runtime..**.*
27730 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65  * P4 is a pointe
27740 72 20 74 6f 20 74 68 65 20 56 4d 20 63 6f 6e 74  r to the VM cont
27750 61 69 6e 69 6e 67 20 74 68 65 20 74 72 69 67 67  aining the trigg
27760 65 72 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f 0a 63  er program..*/.c
27770 61 73 65 20 4f 50 5f 50 72 6f 67 72 61 6d 3a 20  ase OP_Program: 
27780 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70  {        /* jump
27790 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 65 6d 3b 20   */.  int nMem; 
277a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
277b0 20 4e 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72   Number of memor
277c0 79 20 72 65 67 69 73 74 65 72 73 20 66 6f 72 20  y registers for 
277d0 73 75 62 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a 20  sub-program */. 
277e0 20 69 6e 74 20 6e 42 79 74 65 3b 20 20 20 20 20   int nByte;     
277f0 20 20 20 20 20 20 20 20 20 2f 2a 20 42 79 74 65           /* Byte
27800 73 20 6f 66 20 72 75 6e 74 69 6d 65 20 73 70 61  s of runtime spa
27810 63 65 20 72 65 71 75 69 72 65 64 20 66 6f 72 20  ce required for 
27820 73 75 62 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a 20  sub-program */. 
27830 20 4d 65 6d 20 2a 70 52 74 3b 20 20 20 20 20 20   Mem *pRt;      
27840 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69           /* Regi
27850 73 74 65 72 20 74 6f 20 61 6c 6c 6f 63 61 74 65  ster to allocate
27860 20 72 75 6e 74 69 6d 65 20 73 70 61 63 65 20 2a   runtime space *
27870 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20  /.  Mem *pMem;  
27880 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55              /* U
27890 73 65 64 20 74 6f 20 69 74 65 72 61 74 65 20 74  sed to iterate t
278a0 68 72 6f 75 67 68 20 6d 65 6d 6f 72 79 20 63 65  hrough memory ce
278b0 6c 6c 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 45  lls */.  Mem *pE
278c0 6e 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nd;             
278d0 20 2f 2a 20 4c 61 73 74 20 6d 65 6d 6f 72 79 20   /* Last memory 
278e0 63 65 6c 6c 20 69 6e 20 6e 65 77 20 61 72 72 61  cell in new arra
278f0 79 20 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d 65  y */.  VdbeFrame
27900 20 2a 70 46 72 61 6d 65 3b 20 20 20 20 20 20 2f   *pFrame;      /
27910 2a 20 4e 65 77 20 76 64 62 65 20 66 72 61 6d 65  * New vdbe frame
27920 20 74 6f 20 65 78 65 63 75 74 65 20 69 6e 20 2a   to execute in *
27930 2f 0a 20 20 53 75 62 50 72 6f 67 72 61 6d 20 2a  /.  SubProgram *
27940 70 50 72 6f 67 72 61 6d 3b 20 20 20 2f 2a 20 53  pProgram;   /* S
27950 75 62 2d 70 72 6f 67 72 61 6d 20 74 6f 20 65 78  ub-program to ex
27960 65 63 75 74 65 20 2a 2f 0a 20 20 76 6f 69 64 20  ecute */.  void 
27970 2a 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  *t;             
27980 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 69 64 65 6e     /* Token iden
27990 74 69 66 79 69 6e 67 20 74 72 69 67 67 65 72 20  tifying trigger 
279a0 2a 2f 0a 0a 20 20 70 50 72 6f 67 72 61 6d 20 3d  */..  pProgram =
279b0 20 70 4f 70 2d 3e 70 34 2e 70 50 72 6f 67 72 61   pOp->p4.pProgra
279c0 6d 3b 0a 20 20 70 52 74 20 3d 20 26 61 4d 65 6d  m;.  pRt = &aMem
279d0 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73  [pOp->p3];.  ass
279e0 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
279f0 70 52 74 29 20 29 3b 0a 20 20 61 73 73 65 72 74  pRt) );.  assert
27a00 28 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f 70 3e  ( pProgram->nOp>
27a10 30 20 29 3b 0a 20 20 0a 20 20 2f 2a 20 49 66 20  0 );.  .  /* If 
27a20 74 68 65 20 70 35 20 66 6c 61 67 20 69 73 20 63  the p5 flag is c
27a30 6c 65 61 72 2c 20 74 68 65 6e 20 72 65 63 75 72  lear, then recur
27a40 73 69 76 65 20 69 6e 76 6f 63 61 74 69 6f 6e 20  sive invocation 
27a50 6f 66 20 74 72 69 67 67 65 72 73 20 69 73 20 0a  of triggers is .
27a60 20 20 2a 2a 20 64 69 73 61 62 6c 65 64 20 66 6f    ** disabled fo
27a70 72 20 62 61 63 6b 77 61 72 64 73 20 63 6f 6d 70  r backwards comp
27a80 61 74 69 62 69 6c 69 74 79 20 28 70 35 20 69 73  atibility (p5 is
27a90 20 73 65 74 20 69 66 20 74 68 69 73 20 73 75 62   set if this sub
27aa0 2d 70 72 6f 67 72 61 6d 0a 20 20 2a 2a 20 69 73  -program.  ** is
27ab0 20 72 65 61 6c 6c 79 20 61 20 74 72 69 67 67 65   really a trigge
27ac0 72 2c 20 6e 6f 74 20 61 20 66 6f 72 65 69 67 6e  r, not a foreign
27ad0 20 6b 65 79 20 61 63 74 69 6f 6e 2c 20 61 6e 64   key action, and
27ae0 20 74 68 65 20 66 6c 61 67 20 73 65 74 0a 20 20   the flag set.  
27af0 2a 2a 20 61 6e 64 20 63 6c 65 61 72 65 64 20 62  ** and cleared b
27b00 79 20 74 68 65 20 22 50 52 41 47 4d 41 20 72 65  y the "PRAGMA re
27b10 63 75 72 73 69 76 65 5f 74 72 69 67 67 65 72 73  cursive_triggers
27b20 22 20 63 6f 6d 6d 61 6e 64 20 69 73 20 63 6c 65  " command is cle
27b30 61 72 29 2e 0a 20 20 2a 2a 20 0a 20 20 2a 2a 20  ar)..  ** .  ** 
27b40 49 74 20 69 73 20 72 65 63 75 72 73 69 76 65 20  It is recursive 
27b50 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74 72  invocation of tr
27b60 69 67 67 65 72 73 2c 20 61 74 20 74 68 65 20 53  iggers, at the S
27b70 51 4c 20 6c 65 76 65 6c 2c 20 74 68 61 74 20 69  QL level, that i
27b80 73 20 0a 20 20 2a 2a 20 64 69 73 61 62 6c 65 64  s .  ** disabled
27b90 2e 20 49 6e 20 73 6f 6d 65 20 63 61 73 65 73 20  . In some cases 
27ba0 61 20 73 69 6e 67 6c 65 20 74 72 69 67 67 65 72  a single trigger
27bb0 20 6d 61 79 20 67 65 6e 65 72 61 74 65 20 6d 6f   may generate mo
27bc0 72 65 20 74 68 61 6e 20 6f 6e 65 20 0a 20 20 2a  re than one .  *
27bd0 2a 20 53 75 62 50 72 6f 67 72 61 6d 20 28 69 66  * SubProgram (if
27be0 20 74 68 65 20 74 72 69 67 67 65 72 20 6d 61 79   the trigger may
27bf0 20 62 65 20 65 78 65 63 75 74 65 64 20 77 69 74   be executed wit
27c00 68 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20  h more than one 
27c10 64 69 66 66 65 72 65 6e 74 20 0a 20 20 2a 2a 20  different .  ** 
27c20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 61 6c 67 6f  ON CONFLICT algo
27c30 72 69 74 68 6d 29 2e 20 53 75 62 50 72 6f 67 72  rithm). SubProgr
27c40 61 6d 20 73 74 72 75 63 74 75 72 65 73 20 61 73  am structures as
27c50 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 0a  sociated with a.
27c60 20 20 2a 2a 20 73 69 6e 67 6c 65 20 74 72 69 67    ** single trig
27c70 67 65 72 20 61 6c 6c 20 68 61 76 65 20 74 68 65  ger all have the
27c80 20 73 61 6d 65 20 76 61 6c 75 65 20 66 6f 72 20   same value for 
27c90 74 68 65 20 53 75 62 50 72 6f 67 72 61 6d 2e 74  the SubProgram.t
27ca0 6f 6b 65 6e 20 0a 20 20 2a 2a 20 76 61 72 69 61  oken .  ** varia
27cb0 62 6c 65 2e 20 20 2a 2f 0a 20 20 69 66 28 20 70  ble.  */.  if( p
27cc0 4f 70 2d 3e 70 35 20 29 7b 0a 20 20 20 20 74 20  Op->p5 ){.    t 
27cd0 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 74 6f 6b 65  = pProgram->toke
27ce0 6e 3b 0a 20 20 20 20 66 6f 72 28 70 46 72 61 6d  n;.    for(pFram
27cf0 65 3d 70 2d 3e 70 46 72 61 6d 65 3b 20 70 46 72  e=p->pFrame; pFr
27d00 61 6d 65 20 26 26 20 70 46 72 61 6d 65 2d 3e 74  ame && pFrame->t
27d10 6f 6b 65 6e 21 3d 74 3b 20 70 46 72 61 6d 65 3d  oken!=t; pFrame=
27d20 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 29  pFrame->pParent)
27d30 3b 0a 20 20 20 20 69 66 28 20 70 46 72 61 6d 65  ;.    if( pFrame
27d40 20 29 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20   ) break;.  }.. 
27d50 20 69 66 28 20 70 2d 3e 6e 46 72 61 6d 65 3e 3d   if( p->nFrame>=
27d60 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54  db->aLimit[SQLIT
27d70 45 5f 4c 49 4d 49 54 5f 54 52 49 47 47 45 52 5f  E_LIMIT_TRIGGER_
27d80 44 45 50 54 48 5d 20 29 7b 0a 20 20 20 20 72 63  DEPTH] ){.    rc
27d90 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b   = SQLITE_ERROR;
27da0 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53  .    sqlite3SetS
27db0 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73  tring(&p->zErrMs
27dc0 67 2c 20 64 62 2c 20 22 74 6f 6f 20 6d 61 6e 79  g, db, "too many
27dd0 20 6c 65 76 65 6c 73 20 6f 66 20 74 72 69 67 67   levels of trigg
27de0 65 72 20 72 65 63 75 72 73 69 6f 6e 22 29 3b 0a  er recursion");.
27df0 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a      break;.  }..
27e00 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 70 52    /* Register pR
27e10 74 20 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f  t is used to sto
27e20 72 65 20 74 68 65 20 6d 65 6d 6f 72 79 20 72 65  re the memory re
27e30 71 75 69 72 65 64 20 74 6f 20 73 61 76 65 20 74  quired to save t
27e40 68 65 20 73 74 61 74 65 0a 20 20 2a 2a 20 6f 66  he state.  ** of
27e50 20 74 68 65 20 63 75 72 72 65 6e 74 20 70 72 6f   the current pro
27e60 67 72 61 6d 2c 20 61 6e 64 20 74 68 65 20 6d 65  gram, and the me
27e70 6d 6f 72 79 20 72 65 71 75 69 72 65 64 20 61 74  mory required at
27e80 20 72 75 6e 74 69 6d 65 20 74 6f 20 65 78 65 63   runtime to exec
27e90 75 74 65 0a 20 20 2a 2a 20 74 68 65 20 74 72 69  ute.  ** the tri
27ea0 67 67 65 72 20 70 72 6f 67 72 61 6d 2e 20 49 66  gger program. If
27eb0 20 74 68 69 73 20 74 72 69 67 67 65 72 20 68 61   this trigger ha
27ec0 73 20 62 65 65 6e 20 66 69 72 65 64 20 62 65 66  s been fired bef
27ed0 6f 72 65 2c 20 74 68 65 6e 20 70 52 74 20 0a 20  ore, then pRt . 
27ee0 20 2a 2a 20 69 73 20 61 6c 72 65 61 64 79 20 61   ** is already a
27ef0 6c 6c 6f 63 61 74 65 64 2e 20 4f 74 68 65 72 77  llocated. Otherw
27f00 69 73 65 2c 20 69 74 20 6d 75 73 74 20 62 65 20  ise, it must be 
27f10 69 6e 69 74 69 61 6c 69 7a 65 64 2e 20 20 2a 2f  initialized.  */
27f20 0a 20 20 69 66 28 20 28 70 52 74 2d 3e 66 6c 61  .  if( (pRt->fla
27f30 67 73 26 4d 45 4d 5f 46 72 61 6d 65 29 3d 3d 30  gs&MEM_Frame)==0
27f40 20 29 7b 0a 20 20 20 20 2f 2a 20 53 75 62 50 72   ){.    /* SubPr
27f50 6f 67 72 61 6d 2e 6e 4d 65 6d 20 69 73 20 73 65  ogram.nMem is se
27f60 74 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72 20  t to the number 
27f70 6f 66 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20  of memory cells 
27f80 75 73 65 64 20 62 79 20 74 68 65 20 0a 20 20 20  used by the .   
27f90 20 2a 2a 20 70 72 6f 67 72 61 6d 20 73 74 6f 72   ** program stor
27fa0 65 64 20 69 6e 20 53 75 62 50 72 6f 67 72 61 6d  ed in SubProgram
27fb0 2e 61 4f 70 2e 20 41 73 20 77 65 6c 6c 20 61 73  .aOp. As well as
27fc0 20 74 68 65 73 65 2c 20 6f 6e 65 20 6d 65 6d 6f   these, one memo
27fd0 72 79 0a 20 20 20 20 2a 2a 20 63 65 6c 6c 20 69  ry.    ** cell i
27fe0 73 20 72 65 71 75 69 72 65 64 20 66 6f 72 20 65  s required for e
27ff0 61 63 68 20 63 75 72 73 6f 72 20 75 73 65 64 20  ach cursor used 
28000 62 79 20 74 68 65 20 70 72 6f 67 72 61 6d 2e 20  by the program. 
28010 53 65 74 20 6c 6f 63 61 6c 0a 20 20 20 20 2a 2a  Set local.    **
28020 20 76 61 72 69 61 62 6c 65 20 6e 4d 65 6d 20 28   variable nMem (
28030 61 6e 64 20 6c 61 74 65 72 2c 20 56 64 62 65 46  and later, VdbeF
28040 72 61 6d 65 2e 6e 43 68 69 6c 64 4d 65 6d 29 20  rame.nChildMem) 
28050 74 6f 20 74 68 69 73 20 76 61 6c 75 65 2e 0a 20  to this value.. 
28060 20 20 20 2a 2f 0a 20 20 20 20 6e 4d 65 6d 20 3d     */.    nMem =
28070 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4d 65 6d 20   pProgram->nMem 
28080 2b 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72  + pProgram->nCsr
28090 3b 0a 20 20 20 20 6e 42 79 74 65 20 3d 20 52 4f  ;.    nByte = RO
280a0 55 4e 44 38 28 73 69 7a 65 6f 66 28 56 64 62 65  UND8(sizeof(Vdbe
280b0 46 72 61 6d 65 29 29 0a 20 20 20 20 20 20 20 20  Frame)).        
280c0 20 20 20 20 20 20 2b 20 6e 4d 65 6d 20 2a 20 73        + nMem * s
280d0 69 7a 65 6f 66 28 4d 65 6d 29 0a 20 20 20 20 20  izeof(Mem).     
280e0 20 20 20 20 20 20 20 20 20 2b 20 70 50 72 6f 67           + pProg
280f0 72 61 6d 2d 3e 6e 43 73 72 20 2a 20 73 69 7a 65  ram->nCsr * size
28100 6f 66 28 56 64 62 65 43 75 72 73 6f 72 20 2a 29  of(VdbeCursor *)
28110 3b 0a 20 20 20 20 70 46 72 61 6d 65 20 3d 20 73  ;.    pFrame = s
28120 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65  qlite3DbMallocZe
28130 72 6f 28 64 62 2c 20 6e 42 79 74 65 29 3b 0a 20  ro(db, nByte);. 
28140 20 20 20 69 66 28 20 21 70 46 72 61 6d 65 20 29     if( !pFrame )
28150 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6e 6f 5f  {.      goto no_
28160 6d 65 6d 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73  mem;.    }.    s
28170 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c  qlite3VdbeMemRel
28180 65 61 73 65 28 70 52 74 29 3b 0a 20 20 20 20 70  ease(pRt);.    p
28190 52 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  Rt->flags = MEM_
281a0 46 72 61 6d 65 3b 0a 20 20 20 20 70 52 74 2d 3e  Frame;.    pRt->
281b0 75 2e 70 46 72 61 6d 65 20 3d 20 70 46 72 61 6d  u.pFrame = pFram
281c0 65 3b 0a 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e  e;..    pFrame->
281d0 76 20 3d 20 70 3b 0a 20 20 20 20 70 46 72 61 6d  v = p;.    pFram
281e0 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 20 3d 20 6e  e->nChildMem = n
281f0 4d 65 6d 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d  Mem;.    pFrame-
28200 3e 6e 43 68 69 6c 64 43 73 72 20 3d 20 70 50 72  >nChildCsr = pPr
28210 6f 67 72 61 6d 2d 3e 6e 43 73 72 3b 0a 20 20 20  ogram->nCsr;.   
28220 20 70 46 72 61 6d 65 2d 3e 70 63 20 3d 20 70 63   pFrame->pc = pc
28230 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 61 4d  ;.    pFrame->aM
28240 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b 0a 20 20  em = p->aMem;.  
28250 20 20 70 46 72 61 6d 65 2d 3e 6e 4d 65 6d 20 3d    pFrame->nMem =
28260 20 70 2d 3e 6e 4d 65 6d 3b 0a 20 20 20 20 70 46   p->nMem;.    pF
28270 72 61 6d 65 2d 3e 61 70 43 73 72 20 3d 20 70 2d  rame->apCsr = p-
28280 3e 61 70 43 73 72 3b 0a 20 20 20 20 70 46 72 61  >apCsr;.    pFra
28290 6d 65 2d 3e 6e 43 75 72 73 6f 72 20 3d 20 70 2d  me->nCursor = p-
282a0 3e 6e 43 75 72 73 6f 72 3b 0a 20 20 20 20 70 46  >nCursor;.    pF
282b0 72 61 6d 65 2d 3e 61 4f 70 20 3d 20 70 2d 3e 61  rame->aOp = p->a
282c0 4f 70 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e  Op;.    pFrame->
282d0 6e 4f 70 20 3d 20 70 2d 3e 6e 4f 70 3b 0a 20 20  nOp = p->nOp;.  
282e0 20 20 70 46 72 61 6d 65 2d 3e 74 6f 6b 65 6e 20    pFrame->token 
282f0 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 74 6f 6b 65  = pProgram->toke
28300 6e 3b 0a 0a 20 20 20 20 70 45 6e 64 20 3d 20 26  n;..    pEnd = &
28310 56 64 62 65 46 72 61 6d 65 4d 65 6d 28 70 46 72  VdbeFrameMem(pFr
28320 61 6d 65 29 5b 70 46 72 61 6d 65 2d 3e 6e 43 68  ame)[pFrame->nCh
28330 69 6c 64 4d 65 6d 5d 3b 0a 20 20 20 20 66 6f 72  ildMem];.    for
28340 28 70 4d 65 6d 3d 56 64 62 65 46 72 61 6d 65 4d  (pMem=VdbeFrameM
28350 65 6d 28 70 46 72 61 6d 65 29 3b 20 70 4d 65 6d  em(pFrame); pMem
28360 21 3d 70 45 6e 64 3b 20 70 4d 65 6d 2b 2b 29 7b  !=pEnd; pMem++){
28370 0a 20 20 20 20 20 20 70 4d 65 6d 2d 3e 66 6c 61  .      pMem->fla
28380 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20  gs = MEM_Null;. 
28390 20 20 20 20 20 70 4d 65 6d 2d 3e 64 62 20 3d 20       pMem->db = 
283a0 64 62 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73  db;.    }.  }els
283b0 65 7b 0a 20 20 20 20 70 46 72 61 6d 65 20 3d 20  e{.    pFrame = 
283c0 70 52 74 2d 3e 75 2e 70 46 72 61 6d 65 3b 0a 20  pRt->u.pFrame;. 
283d0 20 20 20 61 73 73 65 72 74 28 20 70 50 72 6f 67     assert( pProg
283e0 72 61 6d 2d 3e 6e 4d 65 6d 2b 70 50 72 6f 67 72  ram->nMem+pProgr
283f0 61 6d 2d 3e 6e 43 73 72 3d 3d 70 46 72 61 6d 65  am->nCsr==pFrame
28400 2d 3e 6e 43 68 69 6c 64 4d 65 6d 20 29 3b 0a 20  ->nChildMem );. 
28410 20 20 20 61 73 73 65 72 74 28 20 70 50 72 6f 67     assert( pProg
28420 72 61 6d 2d 3e 6e 43 73 72 3d 3d 70 46 72 61 6d  ram->nCsr==pFram
28430 65 2d 3e 6e 43 68 69 6c 64 43 73 72 20 29 3b 0a  e->nChildCsr );.
28440 20 20 20 20 61 73 73 65 72 74 28 20 70 63 3d 3d      assert( pc==
28450 70 46 72 61 6d 65 2d 3e 70 63 20 29 3b 0a 20 20  pFrame->pc );.  
28460 7d 0a 0a 20 20 70 2d 3e 6e 46 72 61 6d 65 2b 2b  }..  p->nFrame++
28470 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 70 50 61 72  ;.  pFrame->pPar
28480 65 6e 74 20 3d 20 70 2d 3e 70 46 72 61 6d 65 3b  ent = p->pFrame;
28490 0a 20 20 70 46 72 61 6d 65 2d 3e 6c 61 73 74 52  .  pFrame->lastR
284a0 6f 77 69 64 20 3d 20 64 62 2d 3e 6c 61 73 74 52  owid = db->lastR
284b0 6f 77 69 64 3b 0a 20 20 70 46 72 61 6d 65 2d 3e  owid;.  pFrame->
284c0 6e 43 68 61 6e 67 65 20 3d 20 70 2d 3e 6e 43 68  nChange = p->nCh
284d0 61 6e 67 65 3b 0a 20 20 70 2d 3e 6e 43 68 61 6e  ange;.  p->nChan
284e0 67 65 20 3d 20 30 3b 0a 20 20 70 2d 3e 70 46 72  ge = 0;.  p->pFr
284f0 61 6d 65 20 3d 20 70 46 72 61 6d 65 3b 0a 20 20  ame = pFrame;.  
28500 70 2d 3e 61 4d 65 6d 20 3d 20 61 4d 65 6d 20 3d  p->aMem = aMem =
28510 20 26 56 64 62 65 46 72 61 6d 65 4d 65 6d 28 70   &VdbeFrameMem(p
28520 46 72 61 6d 65 29 5b 2d 31 5d 3b 0a 20 20 70 2d  Frame)[-1];.  p-
28530 3e 6e 4d 65 6d 20 3d 20 70 46 72 61 6d 65 2d 3e  >nMem = pFrame->
28540 6e 43 68 69 6c 64 4d 65 6d 3b 0a 20 20 70 2d 3e  nChildMem;.  p->
28550 6e 43 75 72 73 6f 72 20 3d 20 28 75 31 36 29 70  nCursor = (u16)p
28560 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 43 73 72  Frame->nChildCsr
28570 3b 0a 20 20 70 2d 3e 61 70 43 73 72 20 3d 20 28  ;.  p->apCsr = (
28580 56 64 62 65 43 75 72 73 6f 72 20 2a 2a 29 26 61  VdbeCursor **)&a
28590 4d 65 6d 5b 70 2d 3e 6e 4d 65 6d 2b 31 5d 3b 0a  Mem[p->nMem+1];.
285a0 20 20 70 2d 3e 61 4f 70 20 3d 20 61 4f 70 20 3d    p->aOp = aOp =
285b0 20 70 50 72 6f 67 72 61 6d 2d 3e 61 4f 70 3b 0a   pProgram->aOp;.
285c0 20 20 70 2d 3e 6e 4f 70 20 3d 20 70 50 72 6f 67    p->nOp = pProg
285d0 72 61 6d 2d 3e 6e 4f 70 3b 0a 20 20 70 63 20 3d  ram->nOp;.  pc =
285e0 20 2d 31 3b 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d   -1;..  break;.}
285f0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 61 72  ../* Opcode: Par
28600 61 6d 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  am P1 P2 * * *.*
28610 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
28620 20 69 73 20 6f 6e 6c 79 20 65 76 65 72 20 70 72   is only ever pr
28630 65 73 65 6e 74 20 69 6e 20 73 75 62 2d 70 72 6f  esent in sub-pro
28640 67 72 61 6d 73 20 63 61 6c 6c 65 64 20 76 69 61  grams called via
28650 20 74 68 65 20 0a 2a 2a 20 4f 50 5f 50 72 6f 67   the .** OP_Prog
28660 72 61 6d 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ram instruction.
28670 20 43 6f 70 79 20 61 20 76 61 6c 75 65 20 63 75   Copy a value cu
28680 72 72 65 6e 74 6c 79 20 73 74 6f 72 65 64 20 69  rrently stored i
28690 6e 20 61 20 6d 65 6d 6f 72 79 20 0a 2a 2a 20 63  n a memory .** c
286a0 65 6c 6c 20 6f 66 20 74 68 65 20 63 61 6c 6c 69  ell of the calli
286b0 6e 67 20 28 70 61 72 65 6e 74 29 20 66 72 61 6d  ng (parent) fram
286c0 65 20 74 6f 20 63 65 6c 6c 20 50 32 20 69 6e 20  e to cell P2 in 
286d0 74 68 65 20 63 75 72 72 65 6e 74 20 66 72 61 6d  the current fram
286e0 65 73 20 0a 2a 2a 20 61 64 64 72 65 73 73 20 73  es .** address s
286f0 70 61 63 65 2e 20 54 68 69 73 20 69 73 20 75 73  pace. This is us
28700 65 64 20 62 79 20 74 72 69 67 67 65 72 20 70 72  ed by trigger pr
28710 6f 67 72 61 6d 73 20 74 6f 20 61 63 63 65 73 73  ograms to access
28720 20 74 68 65 20 6e 65 77 2e 2a 20 0a 2a 2a 20 61   the new.* .** a
28730 6e 64 20 6f 6c 64 2e 2a 20 76 61 6c 75 65 73 2e  nd old.* values.
28740 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 64 64 72 65  .**.** The addre
28750 73 73 20 6f 66 20 74 68 65 20 63 65 6c 6c 20 69  ss of the cell i
28760 6e 20 74 68 65 20 70 61 72 65 6e 74 20 66 72 61  n the parent fra
28770 6d 65 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64  me is determined
28780 20 62 79 20 61 64 64 69 6e 67 0a 2a 2a 20 74 68   by adding.** th
28790 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 50  e value of the P
287a0 31 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68  1 argument to th
287b0 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 50  e value of the P
287c0 31 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68  1 argument to th
287d0 65 0a 2a 2a 20 63 61 6c 6c 69 6e 67 20 4f 50 5f  e.** calling OP_
287e0 50 72 6f 67 72 61 6d 20 69 6e 73 74 72 75 63 74  Program instruct
287f0 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ion..*/.case OP_
28800 50 61 72 61 6d 3a 20 7b 20 20 20 20 20 20 20 20  Param: {        
28810 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65     /* out2-prere
28820 6c 65 61 73 65 20 2a 2f 0a 20 20 56 64 62 65 46  lease */.  VdbeF
28830 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b 0a 20 20  rame *pFrame;.  
28840 4d 65 6d 20 2a 70 49 6e 3b 0a 20 20 70 46 72 61  Mem *pIn;.  pFra
28850 6d 65 20 3d 20 70 2d 3e 70 46 72 61 6d 65 3b 0a  me = p->pFrame;.
28860 20 20 70 49 6e 20 3d 20 26 70 46 72 61 6d 65 2d    pIn = &pFrame-
28870 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 20 2b 20  >aMem[pOp->p1 + 
28880 70 46 72 61 6d 65 2d 3e 61 4f 70 5b 70 46 72 61  pFrame->aOp[pFra
28890 6d 65 2d 3e 70 63 5d 2e 70 31 5d 3b 20 20 20 0a  me->pc].p1];   .
288a0 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
288b0 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74  ShallowCopy(pOut
288c0 2c 20 70 49 6e 2c 20 4d 45 4d 5f 45 70 68 65 6d  , pIn, MEM_Ephem
288d0 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23  );.  break;.}..#
288e0 65 6e 64 69 66 20 2f 2a 20 23 69 66 6e 64 65 66  endif /* #ifndef
288f0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49   SQLITE_OMIT_TRI
28900 47 47 45 52 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  GGER */..#ifndef
28910 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52   SQLITE_OMIT_FOR
28920 45 49 47 4e 5f 4b 45 59 0a 2f 2a 20 4f 70 63 6f  EIGN_KEY./* Opco
28930 64 65 3a 20 46 6b 43 6f 75 6e 74 65 72 20 50 31  de: FkCounter P1
28940 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
28950 49 6e 63 72 65 6d 65 6e 74 20 61 20 22 63 6f 6e  Increment a "con
28960 73 74 72 61 69 6e 74 20 63 6f 75 6e 74 65 72 22  straint counter"
28970 20 62 79 20 50 32 20 28 50 32 20 6d 61 79 20 62   by P2 (P2 may b
28980 65 20 6e 65 67 61 74 69 76 65 20 6f 72 20 70 6f  e negative or po
28990 73 69 74 69 76 65 29 2e 0a 2a 2a 20 49 66 20 50  sitive)..** If P
289a0 31 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74  1 is non-zero, t
289b0 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 73  he database cons
289c0 74 72 61 69 6e 74 20 63 6f 75 6e 74 65 72 20 69  traint counter i
289d0 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 0a 2a  s incremented .*
289e0 2a 20 28 64 65 66 65 72 72 65 64 20 66 6f 72 65  * (deferred fore
289f0 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69  ign key constrai
28a00 6e 74 73 29 2e 20 4f 74 68 65 72 77 69 73 65 2c  nts). Otherwise,
28a10 20 69 66 20 50 31 20 69 73 20 7a 65 72 6f 2c 20   if P1 is zero, 
28a20 74 68 65 20 0a 2a 2a 20 73 74 61 74 65 6d 65 6e  the .** statemen
28a30 74 20 63 6f 75 6e 74 65 72 20 69 73 20 69 6e 63  t counter is inc
28a40 72 65 6d 65 6e 74 65 64 20 28 69 6d 6d 65 64 69  remented (immedi
28a50 61 74 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  ate foreign key 
28a60 63 6f 6e 73 74 72 61 69 6e 74 73 29 2e 0a 2a 2f  constraints)..*/
28a70 0a 63 61 73 65 20 4f 50 5f 46 6b 43 6f 75 6e 74  .case OP_FkCount
28a80 65 72 3a 20 7b 0a 20 20 69 66 28 20 70 4f 70 2d  er: {.  if( pOp-
28a90 3e 70 31 20 29 7b 0a 20 20 20 20 64 62 2d 3e 6e  >p1 ){.    db->n
28aa0 44 65 66 65 72 72 65 64 43 6f 6e 73 20 2b 3d 20  DeferredCons += 
28ab0 70 4f 70 2d 3e 70 32 3b 0a 20 20 7d 65 6c 73 65  pOp->p2;.  }else
28ac0 7b 0a 20 20 20 20 70 2d 3e 6e 46 6b 43 6f 6e 73  {.    p->nFkCons
28ad0 74 72 61 69 6e 74 20 2b 3d 20 70 4f 70 2d 3e 70  traint += pOp->p
28ae0 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  2;.  }.  break;.
28af0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 6b  }../* Opcode: Fk
28b00 49 66 5a 65 72 6f 20 50 31 20 50 32 20 2a 20 2a  IfZero P1 P2 * *
28b10 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70   *.**.** This op
28b20 63 6f 64 65 20 74 65 73 74 73 20 69 66 20 61 20  code tests if a 
28b30 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73  foreign key cons
28b40 74 72 61 69 6e 74 2d 63 6f 75 6e 74 65 72 20 69  traint-counter i
28b50 73 20 63 75 72 72 65 6e 74 6c 79 20 7a 65 72 6f  s currently zero
28b60 2e 0a 2a 2a 20 49 66 20 73 6f 2c 20 6a 75 6d 70  ..** If so, jump
28b70 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 20   to instruction 
28b80 50 32 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 66  P2. Otherwise, f
28b90 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74  all through to t
28ba0 68 65 20 6e 65 78 74 20 0a 2a 2a 20 69 6e 73 74  he next .** inst
28bb0 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49  ruction..**.** I
28bc0 66 20 50 31 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f  f P1 is non-zero
28bd0 2c 20 74 68 65 6e 20 74 68 65 20 6a 75 6d 70 20  , then the jump 
28be0 69 73 20 74 61 6b 65 6e 20 69 66 20 74 68 65 20  is taken if the 
28bf0 64 61 74 61 62 61 73 65 20 63 6f 6e 73 74 72 61  database constra
28c00 69 6e 74 2d 63 6f 75 6e 74 65 72 0a 2a 2a 20 69  int-counter.** i
28c10 73 20 7a 65 72 6f 20 28 74 68 65 20 6f 6e 65 20  s zero (the one 
28c20 74 68 61 74 20 63 6f 75 6e 74 73 20 64 65 66 65  that counts defe
28c30 72 72 65 64 20 63 6f 6e 73 74 72 61 69 6e 74 20  rred constraint 
28c40 76 69 6f 6c 61 74 69 6f 6e 73 29 2e 20 49 66 20  violations). If 
28c50 50 31 20 69 73 0a 2a 2a 20 7a 65 72 6f 2c 20 74  P1 is.** zero, t
28c60 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e  he jump is taken
28c70 20 69 66 20 74 68 65 20 73 74 61 74 65 6d 65 6e   if the statemen
28c80 74 20 63 6f 6e 73 74 72 61 69 6e 74 2d 63 6f 75  t constraint-cou
28c90 6e 74 65 72 20 69 73 20 7a 65 72 6f 0a 2a 2a 20  nter is zero.** 
28ca0 28 69 6d 6d 65 64 69 61 74 65 20 66 6f 72 65 69  (immediate forei
28cb0 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e  gn key constrain
28cc0 74 20 76 69 6f 6c 61 74 69 6f 6e 73 29 2e 0a 2a  t violations)..*
28cd0 2f 0a 63 61 73 65 20 4f 50 5f 46 6b 49 66 5a 65  /.case OP_FkIfZe
28ce0 72 6f 3a 20 7b 20 20 20 20 20 20 20 20 20 2f 2a  ro: {         /*
28cf0 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 66 28 20 70   jump */.  if( p
28d00 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 69 66  Op->p1 ){.    if
28d10 28 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43  ( db->nDeferredC
28d20 6f 6e 73 3d 3d 30 20 29 20 70 63 20 3d 20 70 4f  ons==0 ) pc = pO
28d30 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d 65 6c 73 65  p->p2-1;.  }else
28d40 7b 0a 20 20 20 20 69 66 28 20 70 2d 3e 6e 46 6b  {.    if( p->nFk
28d50 43 6f 6e 73 74 72 61 69 6e 74 3d 3d 30 20 29 20  Constraint==0 ) 
28d60 70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a  pc = pOp->p2-1;.
28d70 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23    }.  break;.}.#
28d80 65 6e 64 69 66 20 2f 2a 20 23 69 66 6e 64 65 66  endif /* #ifndef
28d90 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52   SQLITE_OMIT_FOR
28da0 45 49 47 4e 5f 4b 45 59 20 2a 2f 0a 0a 23 69 66  EIGN_KEY */..#if
28db0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
28dc0 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 2f  _AUTOINCREMENT./
28dd0 2a 20 4f 70 63 6f 64 65 3a 20 4d 65 6d 4d 61 78  * Opcode: MemMax
28de0 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
28df0 2a 2a 20 50 31 20 69 73 20 61 20 72 65 67 69 73  ** P1 is a regis
28e00 74 65 72 20 69 6e 20 74 68 65 20 72 6f 6f 74 20  ter in the root 
28e10 66 72 61 6d 65 20 6f 66 20 74 68 69 73 20 56 4d  frame of this VM
28e20 20 28 74 68 65 20 72 6f 6f 74 20 66 72 61 6d 65   (the root frame
28e30 20 69 73 0a 2a 2a 20 64 69 66 66 65 72 65 6e 74   is.** different
28e40 20 66 72 6f 6d 20 74 68 65 20 63 75 72 72 65 6e   from the curren
28e50 74 20 66 72 61 6d 65 20 69 66 20 74 68 69 73 20  t frame if this 
28e60 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 62  instruction is b
28e70 65 69 6e 67 20 65 78 65 63 75 74 65 64 0a 2a 2a  eing executed.**
28e80 20 77 69 74 68 69 6e 20 61 20 73 75 62 2d 70 72   within a sub-pr
28e90 6f 67 72 61 6d 29 2e 20 53 65 74 20 74 68 65 20  ogram). Set the 
28ea0 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65  value of registe
28eb0 72 20 50 31 20 74 6f 20 74 68 65 20 6d 61 78 69  r P1 to the maxi
28ec0 6d 75 6d 20 6f 66 20 0a 2a 2a 20 69 74 73 20 63  mum of .** its c
28ed0 75 72 72 65 6e 74 20 76 61 6c 75 65 20 61 6e 64  urrent value and
28ee0 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
28ef0 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a  gister P2..**.**
28f00 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   This instructio
28f10 6e 20 74 68 72 6f 77 73 20 61 6e 20 65 72 72 6f  n throws an erro
28f20 72 20 69 66 20 74 68 65 20 6d 65 6d 6f 72 79 20  r if the memory 
28f30 63 65 6c 6c 20 69 73 20 6e 6f 74 20 69 6e 69 74  cell is not init
28f40 69 61 6c 6c 79 0a 2a 2a 20 61 6e 20 69 6e 74 65  ially.** an inte
28f50 67 65 72 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ger..*/.case OP_
28f60 4d 65 6d 4d 61 78 3a 20 7b 20 20 20 20 20 20 20  MemMax: {       
28f70 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20 4d 65 6d   /* in2 */.  Mem
28f80 20 2a 70 49 6e 31 3b 0a 20 20 56 64 62 65 46 72   *pIn1;.  VdbeFr
28f90 61 6d 65 20 2a 70 46 72 61 6d 65 3b 0a 20 20 69  ame *pFrame;.  i
28fa0 66 28 20 70 2d 3e 70 46 72 61 6d 65 20 29 7b 0a  f( p->pFrame ){.
28fb0 20 20 20 20 66 6f 72 28 70 46 72 61 6d 65 3d 70      for(pFrame=p
28fc0 2d 3e 70 46 72 61 6d 65 3b 20 70 46 72 61 6d 65  ->pFrame; pFrame
28fd0 2d 3e 70 50 61 72 65 6e 74 3b 20 70 46 72 61 6d  ->pParent; pFram
28fe0 65 3d 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e  e=pFrame->pParen
28ff0 74 29 3b 0a 20 20 20 20 70 49 6e 31 20 3d 20 26  t);.    pIn1 = &
29000 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70  pFrame->aMem[pOp
29010 2d 3e 70 31 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a  ->p1];.  }else{.
29020 20 20 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d      pIn1 = &aMem
29030 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 7d 0a 20  [pOp->p1];.  }. 
29040 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
29050 6c 69 64 28 70 49 6e 31 29 20 29 3b 0a 20 20 73  lid(pIn1) );.  s
29060 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74  qlite3VdbeMemInt
29070 65 67 65 72 69 66 79 28 70 49 6e 31 29 3b 0a 20  egerify(pIn1);. 
29080 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn2 = &aMem[pO
29090 70 2d 3e 70 32 5d 3b 0a 20 20 73 71 6c 69 74 65  p->p2];.  sqlite
290a0 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69  3VdbeMemIntegeri
290b0 66 79 28 70 49 6e 32 29 3b 0a 20 20 69 66 28 20  fy(pIn2);.  if( 
290c0 70 49 6e 31 2d 3e 75 2e 69 3c 70 49 6e 32 2d 3e  pIn1->u.i<pIn2->
290d0 75 2e 69 29 7b 0a 20 20 20 20 70 49 6e 31 2d 3e  u.i){.    pIn1->
290e0 75 2e 69 20 3d 20 70 49 6e 32 2d 3e 75 2e 69 3b  u.i = pIn2->u.i;
290f0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
29100 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
29110 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d  _OMIT_AUTOINCREM
29120 45 4e 54 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64  ENT */../* Opcod
29130 65 3a 20 49 66 50 6f 73 20 50 31 20 50 32 20 2a  e: IfPos P1 P2 *
29140 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68   * *.**.** If th
29150 65 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73  e value of regis
29160 74 65 72 20 50 31 20 69 73 20 31 20 6f 72 20 67  ter P1 is 1 or g
29170 72 65 61 74 65 72 2c 20 6a 75 6d 70 20 74 6f 20  reater, jump to 
29180 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73 20  P2..**.** It is 
29190 69 6c 6c 65 67 61 6c 20 74 6f 20 75 73 65 20 74  illegal to use t
291a0 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
291b0 6f 6e 20 61 20 72 65 67 69 73 74 65 72 20 74 68  on a register th
291c0 61 74 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 63  at does.** not c
291d0 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65 67 65  ontain an intege
291e0 72 2e 20 20 41 6e 20 61 73 73 65 72 74 69 6f 6e  r.  An assertion
291f0 20 66 61 75 6c 74 20 77 69 6c 6c 20 72 65 73 75   fault will resu
29200 6c 74 20 69 66 20 79 6f 75 20 74 72 79 2e 0a 2a  lt if you try..*
29210 2f 0a 63 61 73 65 20 4f 50 5f 49 66 50 6f 73 3a  /.case OP_IfPos:
29220 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d   {        /* jum
29230 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31  p, in1 */.  pIn1
29240 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
29250 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e  ];.  assert( pIn
29260 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74  1->flags&MEM_Int
29270 20 29 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e   );.  if( pIn1->
29280 75 2e 69 3e 30 20 29 7b 0a 20 20 20 20 20 70 63  u.i>0 ){.     pc
29290 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
292a0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
292b0 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 4e 65 67  /* Opcode: IfNeg
292c0 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
292d0 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65 20  ** If the value 
292e0 6f 66 20 72 65 67 69 73 74 65 72 20 50 31 20 69  of register P1 i
292f0 73 20 6c 65 73 73 20 74 68 61 6e 20 7a 65 72 6f  s less than zero
29300 2c 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 0a 2a  , jump to P2. .*
29310 2a 0a 2a 2a 20 49 74 20 69 73 20 69 6c 6c 65 67  *.** It is illeg
29320 61 6c 20 74 6f 20 75 73 65 20 74 68 69 73 20 69  al to use this i
29330 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 20 61 20  nstruction on a 
29340 72 65 67 69 73 74 65 72 20 74 68 61 74 20 64 6f  register that do
29350 65 73 0a 2a 2a 20 6e 6f 74 20 63 6f 6e 74 61 69  es.** not contai
29360 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 41  n an integer.  A
29370 6e 20 61 73 73 65 72 74 69 6f 6e 20 66 61 75 6c  n assertion faul
29380 74 20 77 69 6c 6c 20 72 65 73 75 6c 74 20 69 66  t will result if
29390 20 79 6f 75 20 74 72 79 2e 0a 2a 2f 0a 63 61 73   you try..*/.cas
293a0 65 20 4f 50 5f 49 66 4e 65 67 3a 20 7b 20 20 20  e OP_IfNeg: {   
293b0 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
293c0 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  1 */.  pIn1 = &a
293d0 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
293e0 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c  assert( pIn1->fl
293f0 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20  ags&MEM_Int );. 
29400 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3c 30   if( pIn1->u.i<0
29410 20 29 7b 0a 20 20 20 20 20 70 63 20 3d 20 70 4f   ){.     pc = pO
29420 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20  p->p2 - 1;.  }. 
29430 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
29440 63 6f 64 65 3a 20 49 66 5a 65 72 6f 20 50 31 20  code: IfZero P1 
29450 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
29460 54 68 65 20 72 65 67 69 73 74 65 72 20 50 31 20  The register P1 
29470 6d 75 73 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20  must contain an 
29480 69 6e 74 65 67 65 72 2e 20 20 41 64 64 20 6c 69  integer.  Add li
29490 74 65 72 61 6c 20 50 33 20 74 6f 20 74 68 65 0a  teral P3 to the.
294a0 2a 2a 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  ** value in regi
294b0 73 74 65 72 20 50 31 2e 20 20 49 66 20 74 68 65  ster P1.  If the
294c0 20 72 65 73 75 6c 74 20 69 73 20 65 78 61 63 74   result is exact
294d0 6c 79 20 30 2c 20 6a 75 6d 70 20 74 6f 20 50 32  ly 0, jump to P2
294e0 2e 20 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69  . .**.** It is i
294f0 6c 6c 65 67 61 6c 20 74 6f 20 75 73 65 20 74 68  llegal to use th
29500 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f  is instruction o
29510 6e 20 61 20 72 65 67 69 73 74 65 72 20 74 68 61  n a register tha
29520 74 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 63 6f  t does.** not co
29530 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72  ntain an integer
29540 2e 20 20 41 6e 20 61 73 73 65 72 74 69 6f 6e 20  .  An assertion 
29550 66 61 75 6c 74 20 77 69 6c 6c 20 72 65 73 75 6c  fault will resul
29560 74 20 69 66 20 79 6f 75 20 74 72 79 2e 0a 2a 2f  t if you try..*/
29570 0a 63 61 73 65 20 4f 50 5f 49 66 5a 65 72 6f 3a  .case OP_IfZero:
29580 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d   {        /* jum
29590 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31  p, in1 */.  pIn1
295a0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
295b0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e  ];.  assert( pIn
295c0 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74  1->flags&MEM_Int
295d0 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 20   );.  pIn1->u.i 
295e0 2b 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 69 66  += pOp->p3;.  if
295f0 28 20 70 49 6e 31 2d 3e 75 2e 69 3d 3d 30 20 29  ( pIn1->u.i==0 )
29600 7b 0a 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  {.     pc = pOp-
29610 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62  >p2 - 1;.  }.  b
29620 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
29630 64 65 3a 20 41 67 67 53 74 65 70 20 2a 20 50 32  de: AggStep * P2
29640 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20   P3 P4 P5.**.** 
29650 45 78 65 63 75 74 65 20 74 68 65 20 73 74 65 70  Execute the step
29660 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6e   function for an
29670 20 61 67 67 72 65 67 61 74 65 2e 20 20 54 68 65   aggregate.  The
29680 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 20 68 61 73  .** function has
29690 20 50 35 20 61 72 67 75 6d 65 6e 74 73 2e 20 20   P5 arguments.  
296a0 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72   P4 is a pointer
296b0 20 74 6f 20 74 68 65 20 46 75 6e 63 44 65 66 0a   to the FuncDef.
296c0 2a 2a 20 73 74 72 75 63 74 75 72 65 20 74 68 61  ** structure tha
296d0 74 20 73 70 65 63 69 66 69 65 73 20 74 68 65 20  t specifies the 
296e0 66 75 6e 63 74 69 6f 6e 2e 20 20 55 73 65 20 72  function.  Use r
296f0 65 67 69 73 74 65 72 0a 2a 2a 20 50 33 20 61 73  egister.** P3 as
29700 20 74 68 65 20 61 63 63 75 6d 75 6c 61 74 6f 72   the accumulator
29710 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 35 20 61  ..**.** The P5 a
29720 72 67 75 6d 65 6e 74 73 20 61 72 65 20 74 61 6b  rguments are tak
29730 65 6e 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72  en from register
29740 20 50 32 20 61 6e 64 20 69 74 73 0a 2a 2a 20 73   P2 and its.** s
29750 75 63 63 65 73 73 6f 72 73 2e 0a 2a 2f 0a 63 61  uccessors..*/.ca
29760 73 65 20 4f 50 5f 41 67 67 53 74 65 70 3a 20 7b  se OP_AggStep: {
29770 0a 20 20 69 6e 74 20 6e 3b 0a 20 20 69 6e 74 20  .  int n;.  int 
29780 69 3b 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a  i;.  Mem *pMem;.
29790 20 20 4d 65 6d 20 2a 70 52 65 63 3b 0a 20 20 73    Mem *pRec;.  s
297a0 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 63  qlite3_context c
297b0 74 78 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 61  tx;.  sqlite3_va
297c0 6c 75 65 20 2a 2a 61 70 56 61 6c 3b 0a 0a 20 20  lue **apVal;..  
297d0 6e 20 3d 20 70 4f 70 2d 3e 70 35 3b 0a 20 20 61  n = pOp->p5;.  a
297e0 73 73 65 72 74 28 20 6e 3e 3d 30 20 29 3b 0a 20  ssert( n>=0 );. 
297f0 20 70 52 65 63 20 3d 20 26 61 4d 65 6d 5b 70 4f   pRec = &aMem[pO
29800 70 2d 3e 70 32 5d 3b 0a 20 20 61 70 56 61 6c 20  p->p2];.  apVal 
29810 3d 20 70 2d 3e 61 70 41 72 67 3b 0a 20 20 61 73  = p->apArg;.  as
29820 73 65 72 74 28 20 61 70 56 61 6c 20 7c 7c 20 6e  sert( apVal || n
29830 3d 3d 30 20 29 3b 0a 20 20 66 6f 72 28 69 3d 30  ==0 );.  for(i=0
29840 3b 20 69 3c 6e 3b 20 69 2b 2b 2c 20 70 52 65 63  ; i<n; i++, pRec
29850 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  ++){.    assert(
29860 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 52 65 63   memIsValid(pRec
29870 29 20 29 3b 0a 20 20 20 20 61 70 56 61 6c 5b 69  ) );.    apVal[i
29880 5d 20 3d 20 70 52 65 63 3b 0a 20 20 20 20 6d 65  ] = pRec;.    me
29890 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
298a0 2c 20 70 52 65 63 29 3b 0a 20 20 20 20 73 71 6c  , pRec);.    sql
298b0 69 74 65 33 56 64 62 65 4d 65 6d 53 74 6f 72 65  ite3VdbeMemStore
298c0 54 79 70 65 28 70 52 65 63 29 3b 0a 20 20 7d 0a  Type(pRec);.  }.
298d0 20 20 63 74 78 2e 70 46 75 6e 63 20 3d 20 70 4f    ctx.pFunc = pO
298e0 70 2d 3e 70 34 2e 70 46 75 6e 63 3b 0a 20 20 61  p->p4.pFunc;.  a
298f0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30  ssert( pOp->p3>0
29900 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e   && pOp->p3<=p->
29910 6e 4d 65 6d 20 29 3b 0a 20 20 63 74 78 2e 70 4d  nMem );.  ctx.pM
29920 65 6d 20 3d 20 70 4d 65 6d 20 3d 20 26 61 4d 65  em = pMem = &aMe
29930 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 70 4d  m[pOp->p3];.  pM
29940 65 6d 2d 3e 6e 2b 2b 3b 0a 20 20 63 74 78 2e 73  em->n++;.  ctx.s
29950 2e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c  .flags = MEM_Nul
29960 6c 3b 0a 20 20 63 74 78 2e 73 2e 7a 20 3d 20 30  l;.  ctx.s.z = 0
29970 3b 0a 20 20 63 74 78 2e 73 2e 7a 4d 61 6c 6c 6f  ;.  ctx.s.zMallo
29980 63 20 3d 20 30 3b 0a 20 20 63 74 78 2e 73 2e 78  c = 0;.  ctx.s.x
29990 44 65 6c 20 3d 20 30 3b 0a 20 20 63 74 78 2e 73  Del = 0;.  ctx.s
299a0 2e 64 62 20 3d 20 64 62 3b 0a 20 20 63 74 78 2e  .db = db;.  ctx.
299b0 69 73 45 72 72 6f 72 20 3d 20 30 3b 0a 20 20 63  isError = 0;.  c
299c0 74 78 2e 70 43 6f 6c 6c 20 3d 20 30 3b 0a 20 20  tx.pColl = 0;.  
299d0 69 66 28 20 63 74 78 2e 70 46 75 6e 63 2d 3e 66  if( ctx.pFunc->f
299e0 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 46 55  lags & SQLITE_FU
299f0 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20 29 7b 0a 20  NC_NEEDCOLL ){. 
29a00 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 3e 70     assert( pOp>p
29a10 2d 3e 61 4f 70 20 29 3b 0a 20 20 20 20 61 73 73  ->aOp );.    ass
29a20 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 70 34 74  ert( pOp[-1].p4t
29a30 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51 20  ype==P4_COLLSEQ 
29a40 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
29a50 4f 70 5b 2d 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f  Op[-1].opcode==O
29a60 50 5f 43 6f 6c 6c 53 65 71 20 29 3b 0a 20 20 20  P_CollSeq );.   
29a70 20 63 74 78 2e 70 43 6f 6c 6c 20 3d 20 70 4f 70   ctx.pColl = pOp
29a80 5b 2d 31 5d 2e 70 34 2e 70 43 6f 6c 6c 3b 0a 20  [-1].p4.pColl;. 
29a90 20 7d 0a 20 20 28 63 74 78 2e 70 46 75 6e 63 2d   }.  (ctx.pFunc-
29aa0 3e 78 53 74 65 70 29 28 26 63 74 78 2c 20 6e 2c  >xStep)(&ctx, n,
29ab0 20 61 70 56 61 6c 29 3b 20 2f 2a 20 49 4d 50 3a   apVal); /* IMP:
29ac0 20 52 2d 32 34 35 30 35 2d 32 33 32 33 30 20 2a   R-24505-23230 *
29ad0 2f 0a 20 20 69 66 28 20 63 74 78 2e 69 73 45 72  /.  if( ctx.isEr
29ae0 72 6f 72 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  ror ){.    sqlit
29af0 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e  e3SetString(&p->
29b00 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73  zErrMsg, db, "%s
29b10 22 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  ", sqlite3_value
29b20 5f 74 65 78 74 28 26 63 74 78 2e 73 29 29 3b 0a  _text(&ctx.s));.
29b30 20 20 20 20 72 63 20 3d 20 63 74 78 2e 69 73 45      rc = ctx.isE
29b40 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 73 71 6c 69  rror;.  }.  sqli
29b50 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73  te3VdbeMemReleas
29b60 65 28 26 63 74 78 2e 73 29 3b 0a 20 20 62 72 65  e(&ctx.s);.  bre
29b70 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
29b80 3a 20 41 67 67 46 69 6e 61 6c 20 50 31 20 50 32  : AggFinal P1 P2
29b90 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 45 78   * P4 *.**.** Ex
29ba0 65 63 75 74 65 20 74 68 65 20 66 69 6e 61 6c 69  ecute the finali
29bb0 7a 65 72 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72  zer function for
29bc0 20 61 6e 20 61 67 67 72 65 67 61 74 65 2e 20 20   an aggregate.  
29bd0 50 31 20 69 73 0a 2a 2a 20 74 68 65 20 6d 65 6d  P1 is.** the mem
29be0 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61  ory location tha
29bf0 74 20 69 73 20 74 68 65 20 61 63 63 75 6d 75 6c  t is the accumul
29c00 61 74 6f 72 20 66 6f 72 20 74 68 65 20 61 67 67  ator for the agg
29c10 72 65 67 61 74 65 2e 0a 2a 2a 0a 2a 2a 20 50 32  regate..**.** P2
29c20 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   is the number o
29c30 66 20 61 72 67 75 6d 65 6e 74 73 20 74 68 61 74  f arguments that
29c40 20 74 68 65 20 73 74 65 70 20 66 75 6e 63 74 69   the step functi
29c50 6f 6e 20 74 61 6b 65 73 20 61 6e 64 0a 2a 2a 20  on takes and.** 
29c60 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20  P4 is a pointer 
29c70 74 6f 20 74 68 65 20 46 75 6e 63 44 65 66 20 66  to the FuncDef f
29c80 6f 72 20 74 68 69 73 20 66 75 6e 63 74 69 6f 6e  or this function
29c90 2e 20 20 54 68 65 20 50 32 0a 2a 2a 20 61 72 67  .  The P2.** arg
29ca0 75 6d 65 6e 74 20 69 73 20 6e 6f 74 20 75 73 65  ument is not use
29cb0 64 20 62 79 20 74 68 69 73 20 6f 70 63 6f 64 65  d by this opcode
29cc0 2e 20 20 49 74 20 69 73 20 6f 6e 6c 79 20 74 68  .  It is only th
29cd0 65 72 65 20 74 6f 20 64 69 73 61 6d 62 69 67 75  ere to disambigu
29ce0 61 74 65 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73  ate.** functions
29cf0 20 74 68 61 74 20 63 61 6e 20 74 61 6b 65 20 76   that can take v
29d00 61 72 79 69 6e 67 20 6e 75 6d 62 65 72 73 20 6f  arying numbers o
29d10 66 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 54 68  f arguments.  Th
29d20 65 0a 2a 2a 20 50 34 20 61 72 67 75 6d 65 6e 74  e.** P4 argument
29d30 20 69 73 20 6f 6e 6c 79 20 6e 65 65 64 65 64 20   is only needed 
29d40 66 6f 72 20 74 68 65 20 64 65 67 65 6e 65 72 61  for the degenera
29d50 74 65 20 63 61 73 65 20 77 68 65 72 65 0a 2a 2a  te case where.**
29d60 20 74 68 65 20 73 74 65 70 20 66 75 6e 63 74 69   the step functi
29d70 6f 6e 20 77 61 73 20 6e 6f 74 20 70 72 65 76 69  on was not previ
29d80 6f 75 73 6c 79 20 63 61 6c 6c 65 64 2e 0a 2a 2f  ously called..*/
29d90 0a 63 61 73 65 20 4f 50 5f 41 67 67 46 69 6e 61  .case OP_AggFina
29da0 6c 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d  l: {.  Mem *pMem
29db0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
29dc0 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e 70 31  >p1>0 && pOp->p1
29dd0 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70  <=p->nMem );.  p
29de0 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Mem = &aMem[pOp-
29df0 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
29e00 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 7e  (pMem->flags & ~
29e10 28 4d 45 4d 5f 4e 75 6c 6c 7c 4d 45 4d 5f 41 67  (MEM_Null|MEM_Ag
29e20 67 29 29 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d  g))==0 );.  rc =
29e30 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 46   sqlite3VdbeMemF
29e40 69 6e 61 6c 69 7a 65 28 70 4d 65 6d 2c 20 70 4f  inalize(pMem, pO
29e50 70 2d 3e 70 34 2e 70 46 75 6e 63 29 3b 0a 20 20  p->p4.pFunc);.  
29e60 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20 73 71  if( rc ){.    sq
29e70 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26  lite3SetString(&
29e80 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20  p->zErrMsg, db, 
29e90 22 25 73 22 2c 20 73 71 6c 69 74 65 33 5f 76 61  "%s", sqlite3_va
29ea0 6c 75 65 5f 74 65 78 74 28 70 4d 65 6d 29 29 3b  lue_text(pMem));
29eb0 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 56 64  .  }.  sqlite3Vd
29ec0 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67  beChangeEncoding
29ed0 28 70 4d 65 6d 2c 20 65 6e 63 6f 64 69 6e 67 29  (pMem, encoding)
29ee0 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  ;.  UPDATE_MAX_B
29ef0 4c 4f 42 53 49 5a 45 28 70 4d 65 6d 29 3b 0a 20  LOBSIZE(pMem);. 
29f00 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65   if( sqlite3Vdbe
29f10 4d 65 6d 54 6f 6f 42 69 67 28 70 4d 65 6d 29 20  MemTooBig(pMem) 
29f20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f  ){.    goto too_
29f30 62 69 67 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  big;.  }.  break
29f40 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  ;.}..#ifndef SQL
29f50 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 2f 2a 20  ITE_OMIT_WAL./* 
29f60 4f 70 63 6f 64 65 3a 20 43 68 65 63 6b 70 6f 69  Opcode: Checkpoi
29f70 6e 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  nt P1 P2 P3 * *.
29f80 2a 2a 0a 2a 2a 20 43 68 65 63 6b 70 6f 69 6e 74  **.** Checkpoint
29f90 20 64 61 74 61 62 61 73 65 20 50 31 2e 20 54 68   database P1. Th
29fa0 69 73 20 69 73 20 61 20 6e 6f 2d 6f 70 20 69 66  is is a no-op if
29fb0 20 50 31 20 69 73 20 6e 6f 74 20 63 75 72 72 65   P1 is not curre
29fc0 6e 74 6c 79 20 69 6e 0a 2a 2a 20 57 41 4c 20 6d  ntly in.** WAL m
29fd0 6f 64 65 2e 20 50 61 72 61 6d 65 74 65 72 20 50  ode. Parameter P
29fe0 32 20 69 73 20 6f 6e 65 20 6f 66 20 53 51 4c 49  2 is one of SQLI
29ff0 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 50 41  TE_CHECKPOINT_PA
2a000 53 53 49 56 45 2c 20 46 55 4c 4c 0a 2a 2a 20 6f  SSIVE, FULL.** o
2a010 72 20 52 45 53 54 41 52 54 2e 20 20 57 72 69 74  r RESTART.  Writ
2a020 65 20 31 20 6f 72 20 30 20 69 6e 74 6f 20 6d 65  e 1 or 0 into me
2a030 6d 5b 50 33 5d 20 69 66 20 74 68 65 20 63 68 65  m[P3] if the che
2a040 63 6b 70 6f 69 6e 74 20 72 65 74 75 72 6e 73 0a  ckpoint returns.
2a050 2a 2a 20 53 51 4c 49 54 45 5f 42 55 53 59 20 6f  ** SQLITE_BUSY o
2a060 72 20 6e 6f 74 2c 20 72 65 73 70 65 63 74 69 76  r not, respectiv
2a070 65 6c 79 2e 20 20 57 72 69 74 65 20 74 68 65 20  ely.  Write the 
2a080 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20  number of pages 
2a090 69 6e 20 74 68 65 0a 2a 2a 20 57 41 4c 20 61 66  in the.** WAL af
2a0a0 74 65 72 20 74 68 65 20 63 68 65 63 6b 70 6f 69  ter the checkpoi
2a0b0 6e 74 20 69 6e 74 6f 20 6d 65 6d 5b 50 33 2b 31  nt into mem[P3+1
2a0c0 5d 20 61 6e 64 20 74 68 65 20 6e 75 6d 62 65 72  ] and the number
2a0d0 20 6f 66 20 70 61 67 65 73 0a 2a 2a 20 69 6e 20   of pages.** in 
2a0e0 74 68 65 20 57 41 4c 20 74 68 61 74 20 68 61 76  the WAL that hav
2a0f0 65 20 62 65 65 6e 20 63 68 65 63 6b 70 6f 69 6e  e been checkpoin
2a100 74 65 64 20 61 66 74 65 72 20 74 68 65 20 63 68  ted after the ch
2a110 65 63 6b 70 6f 69 6e 74 0a 2a 2a 20 63 6f 6d 70  eckpoint.** comp
2a120 6c 65 74 65 73 20 69 6e 74 6f 20 6d 65 6d 5b 50  letes into mem[P
2a130 33 2b 32 5d 2e 20 20 48 6f 77 65 76 65 72 20 6f  3+2].  However o
2a140 6e 20 61 6e 20 65 72 72 6f 72 2c 20 6d 65 6d 5b  n an error, mem[
2a150 50 33 2b 31 5d 20 61 6e 64 0a 2a 2a 20 6d 65 6d  P3+1] and.** mem
2a160 5b 50 33 2b 32 5d 20 61 72 65 20 69 6e 69 74 69  [P3+2] are initi
2a170 61 6c 69 7a 65 64 20 74 6f 20 2d 31 2e 0a 2a 2f  alized to -1..*/
2a180 0a 63 61 73 65 20 4f 50 5f 43 68 65 63 6b 70 6f  .case OP_Checkpo
2a190 69 6e 74 3a 20 7b 0a 20 20 69 6e 74 20 69 3b 20  int: {.  int i; 
2a1a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a1b0 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70           /* Loop
2a1c0 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 69 6e   counter */.  in
2a1d0 74 20 61 52 65 73 5b 33 5d 3b 20 20 20 20 20 20  t aRes[3];      
2a1e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
2a1f0 20 52 65 73 75 6c 74 73 20 2a 2f 0a 20 20 4d 65   Results */.  Me
2a200 6d 20 2a 70 4d 65 6d 3b 20 20 20 20 20 20 20 20  m *pMem;        
2a210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
2a220 20 57 72 69 74 65 20 72 65 73 75 6c 74 73 20 68   Write results h
2a230 65 72 65 20 2a 2f 0a 0a 20 20 61 52 65 73 5b 30  ere */..  aRes[0
2a240 5d 20 3d 20 30 3b 0a 20 20 61 52 65 73 5b 31 5d  ] = 0;.  aRes[1]
2a250 20 3d 20 61 52 65 73 5b 32 5d 20 3d 20 2d 31 3b   = aRes[2] = -1;
2a260 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
2a270 70 32 3d 3d 53 51 4c 49 54 45 5f 43 48 45 43 4b  p2==SQLITE_CHECK
2a280 50 4f 49 4e 54 5f 50 41 53 53 49 56 45 0a 20 20  POINT_PASSIVE.  
2a290 20 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d       || pOp->p2=
2a2a0 3d 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49  =SQLITE_CHECKPOI
2a2b0 4e 54 5f 46 55 4c 4c 0a 20 20 20 20 20 20 20 7c  NT_FULL.       |
2a2c0 7c 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54  | pOp->p2==SQLIT
2a2d0 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 52 45 53  E_CHECKPOINT_RES
2a2e0 54 41 52 54 0a 20 20 29 3b 0a 20 20 72 63 20 3d  TART.  );.  rc =
2a2f0 20 73 71 6c 69 74 65 33 43 68 65 63 6b 70 6f 69   sqlite3Checkpoi
2a300 6e 74 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20  nt(db, pOp->p1, 
2a310 70 4f 70 2d 3e 70 32 2c 20 26 61 52 65 73 5b 31  pOp->p2, &aRes[1
2a320 5d 2c 20 26 61 52 65 73 5b 32 5d 29 3b 0a 20 20  ], &aRes[2]);.  
2a330 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42  if( rc==SQLITE_B
2a340 55 53 59 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  USY ){.    rc = 
2a350 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 61  SQLITE_OK;.    a
2a360 52 65 73 5b 30 5d 20 3d 20 31 3b 0a 20 20 7d 0a  Res[0] = 1;.  }.
2a370 20 20 66 6f 72 28 69 3d 30 2c 20 70 4d 65 6d 20    for(i=0, pMem 
2a380 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
2a390 3b 20 69 3c 33 3b 20 69 2b 2b 2c 20 70 4d 65 6d  ; i<3; i++, pMem
2a3a0 2b 2b 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  ++){.    sqlite3
2a3b0 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28  VdbeMemSetInt64(
2a3c0 70 4d 65 6d 2c 20 28 69 36 34 29 61 52 65 73 5b  pMem, (i64)aRes[
2a3d0 69 5d 29 3b 0a 20 20 7d 20 20 20 20 0a 20 20 62  i]);.  }    .  b
2a3e0 72 65 61 6b 3b 0a 7d 3b 20 20 0a 23 65 6e 64 69  reak;.};  .#endi
2a3f0 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  f..#ifndef SQLIT
2a400 45 5f 4f 4d 49 54 5f 50 52 41 47 4d 41 0a 2f 2a  E_OMIT_PRAGMA./*
2a410 20 4f 70 63 6f 64 65 3a 20 4a 6f 75 72 6e 61 6c   Opcode: Journal
2a420 4d 6f 64 65 20 50 31 20 50 32 20 50 33 20 2a 20  Mode P1 P2 P3 * 
2a430 50 35 0a 2a 2a 0a 2a 2a 20 43 68 61 6e 67 65 20  P5.**.** Change 
2a440 74 68 65 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65  the journal mode
2a450 20 6f 66 20 64 61 74 61 62 61 73 65 20 50 31 20   of database P1 
2a460 74 6f 20 50 33 2e 20 50 33 20 6d 75 73 74 20 62  to P3. P3 must b
2a470 65 20 6f 6e 65 20 6f 66 20 74 68 65 0a 2a 2a 20  e one of the.** 
2a480 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
2a490 45 5f 58 58 58 20 76 61 6c 75 65 73 2e 20 49 66  E_XXX values. If
2a4a0 20 63 68 61 6e 67 69 6e 67 20 62 65 74 77 65 65   changing betwee
2a4b0 6e 20 74 68 65 20 76 61 72 69 6f 75 73 20 72 6f  n the various ro
2a4c0 6c 6c 62 61 63 6b 0a 2a 2a 20 6d 6f 64 65 73 20  llback.** modes 
2a4d0 28 64 65 6c 65 74 65 2c 20 74 72 75 6e 63 61 74  (delete, truncat
2a4e0 65 2c 20 70 65 72 73 69 73 74 2c 20 6f 66 66 20  e, persist, off 
2a4f0 61 6e 64 20 6d 65 6d 6f 72 79 29 2c 20 74 68 69  and memory), thi
2a500 73 20 69 73 20 61 20 73 69 6d 70 6c 65 0a 2a 2a  s is a simple.**
2a510 20 6f 70 65 72 61 74 69 6f 6e 2e 20 4e 6f 20 49   operation. No I
2a520 4f 20 69 73 20 72 65 71 75 69 72 65 64 2e 0a 2a  O is required..*
2a530 2a 0a 2a 2a 20 49 66 20 63 68 61 6e 67 69 6e 67  *.** If changing
2a540 20 69 6e 74 6f 20 6f 72 20 6f 75 74 20 6f 66 20   into or out of 
2a550 57 41 4c 20 6d 6f 64 65 20 74 68 65 20 70 72 6f  WAL mode the pro
2a560 63 65 64 75 72 65 20 69 73 20 6d 6f 72 65 20 63  cedure is more c
2a570 6f 6d 70 6c 69 63 61 74 65 64 2e 0a 2a 2a 0a 2a  omplicated..**.*
2a580 2a 20 57 72 69 74 65 20 61 20 73 74 72 69 6e 67  * Write a string
2a590 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
2a5a0 66 69 6e 61 6c 20 6a 6f 75 72 6e 61 6c 2d 6d 6f  final journal-mo
2a5b0 64 65 20 74 6f 20 72 65 67 69 73 74 65 72 20 50  de to register P
2a5c0 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4a 6f  2..*/.case OP_Jo
2a5d0 75 72 6e 61 6c 4d 6f 64 65 3a 20 7b 20 20 20 20  urnalMode: {    
2a5e0 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61  /* out2-prerelea
2a5f0 73 65 20 2a 2f 0a 20 20 42 74 72 65 65 20 2a 70  se */.  Btree *p
2a600 42 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  Bt;             
2a610 20 20 20 20 20 20 20 20 2f 2a 20 42 74 72 65 65          /* Btree
2a620 20 74 6f 20 63 68 61 6e 67 65 20 6a 6f 75 72 6e   to change journ
2a630 61 6c 20 6d 6f 64 65 20 6f 66 20 2a 2f 0a 20 20  al mode of */.  
2a640 50 61 67 65 72 20 2a 70 50 61 67 65 72 3b 20 20  Pager *pPager;  
2a650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a660 2f 2a 20 50 61 67 65 72 20 61 73 73 6f 63 69 61  /* Pager associa
2a670 74 65 64 20 77 69 74 68 20 70 42 74 20 2a 2f 0a  ted with pBt */.
2a680 20 20 69 6e 74 20 65 4e 65 77 3b 20 20 20 20 20    int eNew;     
2a690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a6a0 20 20 2f 2a 20 4e 65 77 20 6a 6f 75 72 6e 61 6c    /* New journal
2a6b0 20 6d 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20 65   mode */.  int e
2a6c0 4f 6c 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  Old;            
2a6d0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
2a6e0 65 20 6f 6c 64 20 6a 6f 75 72 6e 61 6c 20 6d 6f  e old journal mo
2a6f0 64 65 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  de */.  const ch
2a700 61 72 20 2a 7a 46 69 6c 65 6e 61 6d 65 3b 20 20  ar *zFilename;  
2a710 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20          /* Name 
2a720 6f 66 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  of database file
2a730 20 66 6f 72 20 70 50 61 67 65 72 20 2a 2f 0a 0a   for pPager */..
2a740 20 20 65 4e 65 77 20 3d 20 70 4f 70 2d 3e 70 33    eNew = pOp->p3
2a750 3b 0a 20 20 61 73 73 65 72 74 28 20 65 4e 65 77  ;.  assert( eNew
2a760 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
2a770 4f 44 45 5f 44 45 4c 45 54 45 20 0a 20 20 20 20  ODE_DELETE .    
2a780 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45     || eNew==PAGE
2a790 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 54 52  R_JOURNALMODE_TR
2a7a0 55 4e 43 41 54 45 20 0a 20 20 20 20 20 20 20 7c  UNCATE .       |
2a7b0 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f  | eNew==PAGER_JO
2a7c0 55 52 4e 41 4c 4d 4f 44 45 5f 50 45 52 53 49 53  URNALMODE_PERSIS
2a7d0 54 20 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65  T .       || eNe
2a7e0 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  w==PAGER_JOURNAL
2a7f0 4d 4f 44 45 5f 4f 46 46 0a 20 20 20 20 20 20 20  MODE_OFF.       
2a800 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a  || eNew==PAGER_J
2a810 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4d 45 4d 4f 52  OURNALMODE_MEMOR
2a820 59 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77  Y.       || eNew
2a830 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
2a840 4f 44 45 5f 57 41 4c 0a 20 20 20 20 20 20 20 7c  ODE_WAL.       |
2a850 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f  | eNew==PAGER_JO
2a860 55 52 4e 41 4c 4d 4f 44 45 5f 51 55 45 52 59 0a  URNALMODE_QUERY.
2a870 20 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70    );.  assert( p
2a880 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
2a890 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a  ->p1<db->nDb );.
2a8a0 0a 20 20 2f 2a 20 54 68 69 73 20 6f 70 63 6f 64  .  /* This opcod
2a8b0 65 20 69 73 20 75 73 65 64 20 69 6e 20 74 77 6f  e is used in two
2a8c0 20 70 6c 61 63 65 73 3a 20 50 52 41 47 4d 41 20   places: PRAGMA 
2a8d0 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 20 61 6e 64  journal_mode and
2a8e0 20 41 54 54 41 43 48 2e 0a 20 20 2a 2a 20 49 6e   ATTACH..  ** In
2a8f0 20 50 52 41 47 4d 41 20 6a 6f 75 72 6e 61 6c 5f   PRAGMA journal_
2a900 6d 6f 64 65 2c 20 74 68 65 20 73 71 6c 69 74 65  mode, the sqlite
2a910 33 56 64 62 65 55 73 65 73 42 74 72 65 65 28 29  3VdbeUsesBtree()
2a920 20 72 6f 75 74 69 6e 65 20 69 73 20 63 61 6c 6c   routine is call
2a930 65 64 0a 20 20 2a 2a 20 77 68 65 6e 20 74 68 65  ed.  ** when the
2a940 20 73 74 61 74 6d 65 6e 74 20 69 73 20 70 72 65   statment is pre
2a950 70 61 72 65 64 20 61 6e 64 20 73 6f 20 70 2d 3e  pared and so p->
2a960 61 4d 75 74 65 78 2e 6e 4d 75 74 65 78 3e 30 2e  aMutex.nMutex>0.
2a970 20 20 41 6c 6c 20 6d 75 74 65 78 65 73 0a 20 20    All mutexes.  
2a980 2a 2a 20 61 72 65 20 61 6c 72 65 61 64 79 20 61  ** are already a
2a990 63 71 75 69 72 65 64 2e 20 20 42 75 74 20 77 68  cquired.  But wh
2a9a0 65 6e 20 75 73 65 64 20 69 6e 20 41 54 54 41 43  en used in ATTAC
2a9b0 48 2c 20 73 71 6c 69 74 65 33 56 64 62 65 55 73  H, sqlite3VdbeUs
2a9c0 65 73 42 74 72 65 65 28 29 0a 20 20 2a 2a 20 69  esBtree().  ** i
2a9d0 73 20 6e 6f 74 20 63 61 6c 6c 65 64 20 77 68 65  s not called whe
2a9e0 6e 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20  n the statement 
2a9f0 69 73 20 70 72 65 70 61 72 65 64 20 62 65 63 61  is prepared beca
2aa00 75 73 65 20 69 74 20 72 65 71 75 69 72 65 73 20  use it requires 
2aa10 74 68 65 0a 20 20 2a 2a 20 69 44 62 20 69 6e 64  the.  ** iDb ind
2aa20 65 78 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  ex of the databa
2aa30 73 65 20 61 73 20 61 20 70 61 72 61 6d 65 74 65  se as a paramete
2aa40 72 2c 20 61 6e 64 20 74 68 65 20 64 61 74 61 62  r, and the datab
2aa50 61 73 65 20 68 61 73 20 6e 6f 74 0a 20 20 2a 2a  ase has not.  **
2aa60 20 79 65 74 20 62 65 65 6e 20 61 74 74 61 63 68   yet been attach
2aa70 65 64 20 73 6f 20 74 68 61 74 20 69 6e 64 65 78  ed so that index
2aa80 20 69 73 20 75 6e 61 76 61 69 6c 61 62 6c 65 2e   is unavailable.
2aa90 20 20 57 65 20 68 61 76 65 20 74 6f 20 77 61 69    We have to wai
2aaa0 74 0a 20 20 2a 2a 20 75 6e 74 69 6c 20 72 75 6e  t.  ** until run
2aab0 74 69 6d 65 20 28 6e 6f 77 29 20 74 6f 20 67 65  time (now) to ge
2aac0 74 20 74 68 65 20 6d 75 74 65 78 20 6f 6e 20 74  t the mutex on t
2aad0 68 65 20 6e 65 77 6c 79 20 61 74 74 61 63 68 65  he newly attache
2aae0 64 20 64 61 74 61 62 61 73 65 2e 0a 20 20 2a 2a  d database..  **
2aaf0 20 4e 6f 20 6f 74 68 65 72 20 6d 75 74 65 78 65   No other mutexe
2ab00 73 20 61 72 65 20 72 65 71 75 69 72 65 64 20 62  s are required b
2ab10 79 20 74 68 65 20 41 54 54 41 43 48 20 63 6f 6d  y the ATTACH com
2ab20 6d 61 6e 64 20 73 6f 20 74 68 69 73 20 69 73 20  mand so this is 
2ab30 73 61 66 65 0a 20 20 2a 2a 20 74 6f 20 64 6f 2e  safe.  ** to do.
2ab40 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  .  */.  assert( 
2ab50 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20  (p->btreeMask & 
2ab60 28 28 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c 70  (((yDbMask)1)<<p
2ab70 4f 70 2d 3e 70 31 29 29 21 3d 30 20 7c 7c 20 70  Op->p1))!=0 || p
2ab80 2d 3e 61 4d 75 74 65 78 2e 6e 4d 75 74 65 78 3d  ->aMutex.nMutex=
2ab90 3d 30 20 29 3b 0a 20 20 69 66 28 20 70 2d 3e 61  =0 );.  if( p->a
2aba0 4d 75 74 65 78 2e 6e 4d 75 74 65 78 3d 3d 30 20  Mutex.nMutex==0 
2abb0 29 7b 0a 20 20 20 20 2f 2a 20 54 68 69 73 20 6f  ){.    /* This o
2abc0 63 63 75 72 73 20 72 69 67 68 74 20 61 66 74 65  ccurs right afte
2abd0 72 20 41 54 54 41 43 48 2e 20 20 47 65 74 20 61  r ATTACH.  Get a
2abe0 20 6d 75 74 65 78 20 6f 6e 20 74 68 65 20 6e 65   mutex on the ne
2abf0 77 6c 79 20 41 54 54 41 43 48 65 64 0a 20 20 20  wly ATTACHed.   
2ac00 20 2a 2a 20 64 61 74 61 62 61 73 65 2e 20 2a 2f   ** database. */
2ac10 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
2ac20 55 73 65 73 42 74 72 65 65 28 70 2c 20 70 4f 70  UsesBtree(p, pOp
2ac30 2d 3e 70 31 29 3b 0a 20 20 20 20 73 71 6c 69 74  ->p1);.    sqlit
2ac40 65 33 56 64 62 65 4d 75 74 65 78 41 72 72 61 79  e3VdbeMutexArray
2ac50 45 6e 74 65 72 28 70 29 3b 0a 20 20 7d 0a 0a 20  Enter(p);.  }.. 
2ac60 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70   pBt = db->aDb[p
2ac70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20 20 70  Op->p1].pBt;.  p
2ac80 50 61 67 65 72 20 3d 20 73 71 6c 69 74 65 33 42  Pager = sqlite3B
2ac90 74 72 65 65 50 61 67 65 72 28 70 42 74 29 3b 0a  treePager(pBt);.
2aca0 20 20 65 4f 6c 64 20 3d 20 73 71 6c 69 74 65 33    eOld = sqlite3
2acb0 50 61 67 65 72 47 65 74 4a 6f 75 72 6e 61 6c 4d  PagerGetJournalM
2acc0 6f 64 65 28 70 50 61 67 65 72 29 3b 0a 20 20 69  ode(pPager);.  i
2acd0 66 28 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a  f( eNew==PAGER_J
2ace0 4f 55 52 4e 41 4c 4d 4f 44 45 5f 51 55 45 52 59  OURNALMODE_QUERY
2acf0 20 29 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a   ) eNew = eOld;.
2ad00 20 20 69 66 28 20 21 73 71 6c 69 74 65 33 50 61    if( !sqlite3Pa
2ad10 67 65 72 4f 6b 54 6f 43 68 61 6e 67 65 4a 6f 75  gerOkToChangeJou
2ad20 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65 72 29  rnalMode(pPager)
2ad30 20 29 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a   ) eNew = eOld;.
2ad40 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2ad50 4f 4d 49 54 5f 57 41 4c 0a 20 20 7a 46 69 6c 65  OMIT_WAL.  zFile
2ad60 6e 61 6d 65 20 3d 20 73 71 6c 69 74 65 33 50 61  name = sqlite3Pa
2ad70 67 65 72 46 69 6c 65 6e 61 6d 65 28 70 50 61 67  gerFilename(pPag
2ad80 65 72 29 3b 0a 0a 20 20 2f 2a 20 44 6f 20 6e 6f  er);..  /* Do no
2ad90 74 20 61 6c 6c 6f 77 20 61 20 74 72 61 6e 73 69  t allow a transi
2ada0 74 69 6f 6e 20 74 6f 20 6a 6f 75 72 6e 61 6c 5f  tion to journal_
2adb0 6d 6f 64 65 3d 57 41 4c 20 66 6f 72 20 61 20 64  mode=WAL for a d
2adc0 61 74 61 62 61 73 65 0a 20 20 2a 2a 20 69 6e 20  atabase.  ** in 
2add0 74 65 6d 70 6f 72 61 72 79 20 73 74 6f 72 61 67  temporary storag
2ade0 65 20 6f 72 20 69 66 20 74 68 65 20 56 46 53 20  e or if the VFS 
2adf0 64 6f 65 73 20 6e 6f 74 20 73 75 70 70 6f 72 74  does not support
2ae00 20 73 68 61 72 65 64 20 6d 65 6d 6f 72 79 20 0a   shared memory .
2ae10 20 20 2a 2f 0a 20 20 69 66 28 20 65 4e 65 77 3d    */.  if( eNew=
2ae20 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f  =PAGER_JOURNALMO
2ae30 44 45 5f 57 41 4c 0a 20 20 20 26 26 20 28 7a 46  DE_WAL.   && (zF
2ae40 69 6c 65 6e 61 6d 65 5b 30 5d 3d 3d 30 20 20 20  ilename[0]==0   
2ae50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ae60 20 20 20 20 20 20 2f 2a 20 54 65 6d 70 20 66 69        /* Temp fi
2ae70 6c 65 20 2a 2f 0a 20 20 20 20 20 20 20 7c 7c 20  le */.       || 
2ae80 21 73 71 6c 69 74 65 33 50 61 67 65 72 57 61 6c  !sqlite3PagerWal
2ae90 53 75 70 70 6f 72 74 65 64 28 70 50 61 67 65 72  Supported(pPager
2aea0 29 29 20 20 20 2f 2a 20 4e 6f 20 73 68 61 72 65  ))   /* No share
2aeb0 64 2d 6d 65 6d 6f 72 79 20 73 75 70 70 6f 72 74  d-memory support
2aec0 20 2a 2f 0a 20 20 29 7b 0a 20 20 20 20 65 4e 65   */.  ){.    eNe
2aed0 77 20 3d 20 65 4f 6c 64 3b 0a 20 20 7d 0a 0a 20  w = eOld;.  }.. 
2aee0 20 69 66 28 20 28 65 4e 65 77 21 3d 65 4f 6c 64   if( (eNew!=eOld
2aef0 29 0a 20 20 20 26 26 20 28 65 4f 6c 64 3d 3d 50  ).   && (eOld==P
2af00 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
2af10 5f 57 41 4c 20 7c 7c 20 65 4e 65 77 3d 3d 50 41  _WAL || eNew==PA
2af20 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
2af30 57 41 4c 29 0a 20 20 29 7b 0a 20 20 20 20 69 66  WAL).  ){.    if
2af40 28 20 21 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69  ( !db->autoCommi
2af50 74 20 7c 7c 20 64 62 2d 3e 61 63 74 69 76 65 56  t || db->activeV
2af60 64 62 65 43 6e 74 3e 31 20 29 7b 0a 20 20 20 20  dbeCnt>1 ){.    
2af70 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52    rc = SQLITE_ER
2af80 52 4f 52 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  ROR;.      sqlit
2af90 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e  e3SetString(&p->
2afa0 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 0a 20 20  zErrMsg, db, .  
2afb0 20 20 20 20 20 20 20 20 22 63 61 6e 6e 6f 74 20          "cannot 
2afc0 63 68 61 6e 67 65 20 25 73 20 77 61 6c 20 6d 6f  change %s wal mo
2afd0 64 65 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 61  de from within a
2afe0 20 74 72 61 6e 73 61 63 74 69 6f 6e 22 2c 0a 20   transaction",. 
2aff0 20 20 20 20 20 20 20 20 20 28 65 4e 65 77 3d 3d           (eNew==
2b000 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
2b010 45 5f 57 41 4c 20 3f 20 22 69 6e 74 6f 22 20 3a  E_WAL ? "into" :
2b020 20 22 6f 75 74 20 6f 66 22 29 0a 20 20 20 20 20   "out of").     
2b030 20 29 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b   );.      break;
2b040 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 0a 20 20  .    }else{. .  
2b050 20 20 20 20 69 66 28 20 65 4f 6c 64 3d 3d 50 41      if( eOld==PA
2b060 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
2b070 57 41 4c 20 29 7b 0a 20 20 20 20 20 20 20 20 2f  WAL ){.        /
2b080 2a 20 49 66 20 6c 65 61 76 69 6e 67 20 57 41 4c  * If leaving WAL
2b090 20 6d 6f 64 65 2c 20 63 6c 6f 73 65 20 74 68 65   mode, close the
2b0a0 20 6c 6f 67 20 66 69 6c 65 2e 20 49 66 20 73 75   log file. If su
2b0b0 63 63 65 73 73 66 75 6c 2c 20 74 68 65 20 63 61  ccessful, the ca
2b0c0 6c 6c 0a 20 20 20 20 20 20 20 20 2a 2a 20 74 6f  ll.        ** to
2b0d0 20 50 61 67 65 72 43 6c 6f 73 65 57 61 6c 28 29   PagerCloseWal()
2b0e0 20 63 68 65 63 6b 70 6f 69 6e 74 73 20 61 6e 64   checkpoints and
2b0f0 20 64 65 6c 65 74 65 73 20 74 68 65 20 77 72 69   deletes the wri
2b100 74 65 2d 61 68 65 61 64 2d 6c 6f 67 20 0a 20 20  te-ahead-log .  
2b110 20 20 20 20 20 20 2a 2a 20 66 69 6c 65 2e 20 41        ** file. A
2b120 6e 20 45 58 43 4c 55 53 49 56 45 20 6c 6f 63 6b  n EXCLUSIVE lock
2b130 20 6d 61 79 20 73 74 69 6c 6c 20 62 65 20 68 65   may still be he
2b140 6c 64 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61  ld on the databa
2b150 73 65 20 66 69 6c 65 20 0a 20 20 20 20 20 20 20  se file .       
2b160 20 2a 2a 20 61 66 74 65 72 20 61 20 73 75 63 63   ** after a succ
2b170 65 73 73 66 75 6c 20 72 65 74 75 72 6e 2e 20 0a  essful return. .
2b180 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20          */.     
2b190 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 50     rc = sqlite3P
2b1a0 61 67 65 72 43 6c 6f 73 65 57 61 6c 28 70 50 61  agerCloseWal(pPa
2b1b0 67 65 72 29 3b 0a 20 20 20 20 20 20 20 20 69 66  ger);.        if
2b1c0 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
2b1d0 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  ){.          sql
2b1e0 69 74 65 33 50 61 67 65 72 53 65 74 4a 6f 75 72  ite3PagerSetJour
2b1f0 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65 72 2c 20  nalMode(pPager, 
2b200 65 4e 65 77 29 3b 0a 20 20 20 20 20 20 20 20 7d  eNew);.        }
2b210 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28  .      }else if(
2b220 20 65 4f 6c 64 3d 3d 50 41 47 45 52 5f 4a 4f 55   eOld==PAGER_JOU
2b230 52 4e 41 4c 4d 4f 44 45 5f 4d 45 4d 4f 52 59 20  RNALMODE_MEMORY 
2b240 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 43 61  ){.        /* Ca
2b250 6e 6e 6f 74 20 74 72 61 6e 73 69 74 69 6f 6e 20  nnot transition 
2b260 64 69 72 65 63 74 6c 79 20 66 72 6f 6d 20 4d 45  directly from ME
2b270 4d 4f 52 59 20 74 6f 20 57 41 4c 2e 20 20 55 73  MORY to WAL.  Us
2b280 65 20 6d 6f 64 65 20 4f 46 46 0a 20 20 20 20 20  e mode OFF.     
2b290 20 20 20 2a 2a 20 61 73 20 61 6e 20 69 6e 74 65     ** as an inte
2b2a0 72 6d 65 64 69 61 74 65 20 2a 2f 0a 20 20 20 20  rmediate */.    
2b2b0 20 20 20 20 73 71 6c 69 74 65 33 50 61 67 65 72      sqlite3Pager
2b2c0 53 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70  SetJournalMode(p
2b2d0 50 61 67 65 72 2c 20 50 41 47 45 52 5f 4a 4f 55  Pager, PAGER_JOU
2b2e0 52 4e 41 4c 4d 4f 44 45 5f 4f 46 46 29 3b 0a 20  RNALMODE_OFF);. 
2b2f0 20 20 20 20 20 7d 0a 20 20 0a 20 20 20 20 20 20       }.  .      
2b300 2f 2a 20 4f 70 65 6e 20 61 20 74 72 61 6e 73 61  /* Open a transa
2b310 63 74 69 6f 6e 20 6f 6e 20 74 68 65 20 64 61 74  ction on the dat
2b320 61 62 61 73 65 20 66 69 6c 65 2e 20 52 65 67 61  abase file. Rega
2b330 72 64 6c 65 73 73 20 6f 66 20 74 68 65 20 6a 6f  rdless of the jo
2b340 75 72 6e 61 6c 0a 20 20 20 20 20 20 2a 2a 20 6d  urnal.      ** m
2b350 6f 64 65 2c 20 74 68 69 73 20 74 72 61 6e 73 61  ode, this transa
2b360 63 74 69 6f 6e 20 61 6c 77 61 79 73 20 75 73 65  ction always use
2b370 73 20 61 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75  s a rollback jou
2b380 72 6e 61 6c 2e 0a 20 20 20 20 20 20 2a 2f 0a 20  rnal..      */. 
2b390 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c       assert( sql
2b3a0 69 74 65 33 42 74 72 65 65 49 73 49 6e 54 72 61  ite3BtreeIsInTra
2b3b0 6e 73 28 70 42 74 29 3d 3d 30 20 29 3b 0a 20 20  ns(pBt)==0 );.  
2b3c0 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
2b3d0 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20  TE_OK ){.       
2b3e0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
2b3f0 65 65 53 65 74 56 65 72 73 69 6f 6e 28 70 42 74  eeSetVersion(pBt
2b400 2c 20 28 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a  , (eNew==PAGER_J
2b410 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 3f  OURNALMODE_WAL ?
2b420 20 32 20 3a 20 31 29 29 3b 0a 20 20 20 20 20 20   2 : 1));.      
2b430 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64  }.    }.  }.#end
2b440 69 66 20 2f 2a 20 69 66 6e 64 65 66 20 53 51 4c  if /* ifndef SQL
2b450 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 20 2a 2f 0a  ITE_OMIT_WAL */.
2b460 0a 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20  .  if( rc ){.   
2b470 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a 20 20   eNew = eOld;.  
2b480 7d 0a 20 20 65 4e 65 77 20 3d 20 73 71 6c 69 74  }.  eNew = sqlit
2b490 65 33 50 61 67 65 72 53 65 74 4a 6f 75 72 6e 61  e3PagerSetJourna
2b4a0 6c 4d 6f 64 65 28 70 50 61 67 65 72 2c 20 65 4e  lMode(pPager, eN
2b4b0 65 77 29 3b 0a 0a 20 20 70 4f 75 74 20 3d 20 26  ew);..  pOut = &
2b4c0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
2b4d0 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
2b4e0 45 4d 5f 53 74 72 7c 4d 45 4d 5f 53 74 61 74 69  EM_Str|MEM_Stati
2b4f0 63 7c 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f  c|MEM_Term;.  pO
2b500 75 74 2d 3e 7a 20 3d 20 28 63 68 61 72 20 2a 29  ut->z = (char *)
2b510 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4d 6f  sqlite3JournalMo
2b520 64 65 6e 61 6d 65 28 65 4e 65 77 29 3b 0a 20 20  dename(eNew);.  
2b530 70 4f 75 74 2d 3e 6e 20 3d 20 73 71 6c 69 74 65  pOut->n = sqlite
2b540 33 53 74 72 6c 65 6e 33 30 28 70 4f 75 74 2d 3e  3Strlen30(pOut->
2b550 7a 29 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20  z);.  pOut->enc 
2b560 3d 20 53 51 4c 49 54 45 5f 55 54 46 38 3b 0a 20  = SQLITE_UTF8;. 
2b570 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e   sqlite3VdbeChan
2b580 67 65 45 6e 63 6f 64 69 6e 67 28 70 4f 75 74 2c  geEncoding(pOut,
2b590 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 62 72   encoding);.  br
2b5a0 65 61 6b 3b 0a 7d 3b 0a 23 65 6e 64 69 66 20 2f  eak;.};.#endif /
2b5b0 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52  * SQLITE_OMIT_PR
2b5c0 41 47 4d 41 20 2a 2f 0a 0a 23 69 66 20 21 64 65  AGMA */..#if !de
2b5d0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
2b5e0 54 5f 56 41 43 55 55 4d 29 20 26 26 20 21 64 65  T_VACUUM) && !de
2b5f0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
2b600 54 5f 41 54 54 41 43 48 29 0a 2f 2a 20 4f 70 63  T_ATTACH)./* Opc
2b610 6f 64 65 3a 20 56 61 63 75 75 6d 20 2a 20 2a 20  ode: Vacuum * * 
2b620 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 56 61 63 75  * * *.**.** Vacu
2b630 75 6d 20 74 68 65 20 65 6e 74 69 72 65 20 64 61  um the entire da
2b640 74 61 62 61 73 65 2e 20 20 54 68 69 73 20 6f 70  tabase.  This op
2b650 63 6f 64 65 20 77 69 6c 6c 20 63 61 75 73 65 20  code will cause 
2b660 6f 74 68 65 72 20 76 69 72 74 75 61 6c 0a 2a 2a  other virtual.**
2b670 20 6d 61 63 68 69 6e 65 73 20 74 6f 20 62 65 20   machines to be 
2b680 63 72 65 61 74 65 64 20 61 6e 64 20 72 75 6e 2e  created and run.
2b690 20 20 49 74 20 6d 61 79 20 6e 6f 74 20 62 65 20    It may not be 
2b6a0 63 61 6c 6c 65 64 20 66 72 6f 6d 20 77 69 74 68  called from with
2b6b0 69 6e 0a 2a 2a 20 61 20 74 72 61 6e 73 61 63 74  in.** a transact
2b6c0 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ion..*/.case OP_
2b6d0 56 61 63 75 75 6d 3a 20 7b 0a 20 20 72 63 20 3d  Vacuum: {.  rc =
2b6e0 20 73 71 6c 69 74 65 33 52 75 6e 56 61 63 75 75   sqlite3RunVacuu
2b6f0 6d 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64  m(&p->zErrMsg, d
2b700 62 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23  b);.  break;.}.#
2b710 65 6e 64 69 66 0a 0a 23 69 66 20 21 64 65 66 69  endif..#if !defi
2b720 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
2b730 41 55 54 4f 56 41 43 55 55 4d 29 0a 2f 2a 20 4f  AUTOVACUUM)./* O
2b740 70 63 6f 64 65 3a 20 49 6e 63 72 56 61 63 75 75  pcode: IncrVacuu
2b750 6d 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  m P1 P2 * * *.**
2b760 0a 2a 2a 20 50 65 72 66 6f 72 6d 20 61 20 73 69  .** Perform a si
2b770 6e 67 6c 65 20 73 74 65 70 20 6f 66 20 74 68 65  ngle step of the
2b780 20 69 6e 63 72 65 6d 65 6e 74 61 6c 20 76 61 63   incremental vac
2b790 75 75 6d 20 70 72 6f 63 65 64 75 72 65 20 6f 6e  uum procedure on
2b7a0 0a 2a 2a 20 74 68 65 20 50 31 20 64 61 74 61 62  .** the P1 datab
2b7b0 61 73 65 2e 20 49 66 20 74 68 65 20 76 61 63 75  ase. If the vacu
2b7c0 75 6d 20 68 61 73 20 66 69 6e 69 73 68 65 64 2c  um has finished,
2b7d0 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63   jump to instruc
2b7e0 74 69 6f 6e 0a 2a 2a 20 50 32 2e 20 4f 74 68 65  tion.** P2. Othe
2b7f0 72 77 69 73 65 2c 20 66 61 6c 6c 20 74 68 72 6f  rwise, fall thro
2b800 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ugh to the next 
2b810 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a  instruction..*/.
2b820 63 61 73 65 20 4f 50 5f 49 6e 63 72 56 61 63 75  case OP_IncrVacu
2b830 75 6d 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20  um: {        /* 
2b840 6a 75 6d 70 20 2a 2f 0a 20 20 42 74 72 65 65 20  jump */.  Btree 
2b850 2a 70 42 74 3b 0a 0a 20 20 61 73 73 65 72 74 28  *pBt;..  assert(
2b860 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
2b870 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29  Op->p1<db->nDb )
2b880 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e  ;.  assert( (p->
2b890 62 74 72 65 65 4d 61 73 6b 20 26 20 28 28 28 79  btreeMask & (((y
2b8a0 44 62 4d 61 73 6b 29 31 29 3c 3c 70 4f 70 2d 3e  DbMask)1)<<pOp->
2b8b0 70 31 29 29 21 3d 30 20 29 3b 0a 20 20 70 42 74  p1))!=0 );.  pBt
2b8c0 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e   = db->aDb[pOp->
2b8d0 70 31 5d 2e 70 42 74 3b 0a 20 20 72 63 20 3d 20  p1].pBt;.  rc = 
2b8e0 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e 63 72  sqlite3BtreeIncr
2b8f0 56 61 63 75 75 6d 28 70 42 74 29 3b 0a 20 20 69  Vacuum(pBt);.  i
2b900 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 44 4f  f( rc==SQLITE_DO
2b910 4e 45 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70  NE ){.    pc = p
2b920 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20  Op->p2 - 1;.    
2b930 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a  rc = SQLITE_OK;.
2b940 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23    }.  break;.}.#
2b950 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65  endif../* Opcode
2b960 3a 20 45 78 70 69 72 65 20 50 31 20 2a 20 2a 20  : Expire P1 * * 
2b970 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 61 75 73 65 20  * *.**.** Cause 
2b980 70 72 65 63 6f 6d 70 69 6c 65 64 20 73 74 61 74  precompiled stat
2b990 65 6d 65 6e 74 73 20 74 6f 20 62 65 63 6f 6d 65  ements to become
2b9a0 20 65 78 70 69 72 65 64 2e 20 41 6e 20 65 78 70   expired. An exp
2b9b0 69 72 65 64 20 73 74 61 74 65 6d 65 6e 74 0a 2a  ired statement.*
2b9c0 2a 20 66 61 69 6c 73 20 77 69 74 68 20 61 6e 20  * fails with an 
2b9d0 65 72 72 6f 72 20 63 6f 64 65 20 6f 66 20 53 51  error code of SQ
2b9e0 4c 49 54 45 5f 53 43 48 45 4d 41 20 69 66 20 69  LITE_SCHEMA if i
2b9f0 74 20 69 73 20 65 76 65 72 20 65 78 65 63 75 74  t is ever execut
2ba00 65 64 20 0a 2a 2a 20 28 76 69 61 20 73 71 6c 69  ed .** (via sqli
2ba10 74 65 33 5f 73 74 65 70 28 29 29 2e 0a 2a 2a 20  te3_step())..** 
2ba20 0a 2a 2a 20 49 66 20 50 31 20 69 73 20 30 2c 20  .** If P1 is 0, 
2ba30 74 68 65 6e 20 61 6c 6c 20 53 51 4c 20 73 74 61  then all SQL sta
2ba40 74 65 6d 65 6e 74 73 20 62 65 63 6f 6d 65 20 65  tements become e
2ba50 78 70 69 72 65 64 2e 20 49 66 20 50 31 20 69 73  xpired. If P1 is
2ba60 20 6e 6f 6e 2d 7a 65 72 6f 2c 0a 2a 2a 20 74 68   non-zero,.** th
2ba70 65 6e 20 6f 6e 6c 79 20 74 68 65 20 63 75 72 72  en only the curr
2ba80 65 6e 74 6c 79 20 65 78 65 63 75 74 69 6e 67 20  ently executing 
2ba90 73 74 61 74 65 6d 65 6e 74 20 69 73 20 61 66 66  statement is aff
2baa0 65 63 74 65 64 2e 20 0a 2a 2f 0a 63 61 73 65 20  ected. .*/.case 
2bab0 4f 50 5f 45 78 70 69 72 65 3a 20 7b 0a 20 20 69  OP_Expire: {.  i
2bac0 66 28 20 21 70 4f 70 2d 3e 70 31 20 29 7b 0a 20  f( !pOp->p1 ){. 
2bad0 20 20 20 73 71 6c 69 74 65 33 45 78 70 69 72 65     sqlite3Expire
2bae0 50 72 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e  PreparedStatemen
2baf0 74 73 28 64 62 29 3b 0a 20 20 7d 65 6c 73 65 7b  ts(db);.  }else{
2bb00 0a 20 20 20 20 70 2d 3e 65 78 70 69 72 65 64 20  .    p->expired 
2bb10 3d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  = 1;.  }.  break
2bb20 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  ;.}..#ifndef SQL
2bb30 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f  ITE_OMIT_SHARED_
2bb40 43 41 43 48 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a  CACHE./* Opcode:
2bb50 20 54 61 62 6c 65 4c 6f 63 6b 20 50 31 20 50 32   TableLock P1 P2
2bb60 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 4f   P3 P4 *.**.** O
2bb70 62 74 61 69 6e 20 61 20 6c 6f 63 6b 20 6f 6e 20  btain a lock on 
2bb80 61 20 70 61 72 74 69 63 75 6c 61 72 20 74 61 62  a particular tab
2bb90 6c 65 2e 20 54 68 69 73 20 69 6e 73 74 72 75 63  le. This instruc
2bba0 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 75 73 65  tion is only use
2bbb0 64 20 77 68 65 6e 0a 2a 2a 20 74 68 65 20 73 68  d when.** the sh
2bbc0 61 72 65 64 2d 63 61 63 68 65 20 66 65 61 74 75  ared-cache featu
2bbd0 72 65 20 69 73 20 65 6e 61 62 6c 65 64 2e 20 0a  re is enabled. .
2bbe0 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68 65 20  **.** P1 is the 
2bbf0 69 6e 64 65 78 20 6f 66 20 74 68 65 20 64 61 74  index of the dat
2bc00 61 62 61 73 65 20 69 6e 20 73 71 6c 69 74 65 33  abase in sqlite3
2bc10 2e 61 44 62 5b 5d 20 6f 66 20 74 68 65 20 64 61  .aDb[] of the da
2bc20 74 61 62 61 73 65 0a 2a 2a 20 6f 6e 20 77 68 69  tabase.** on whi
2bc30 63 68 20 74 68 65 20 6c 6f 63 6b 20 69 73 20 61  ch the lock is a
2bc40 63 71 75 69 72 65 64 2e 20 20 41 20 72 65 61 64  cquired.  A read
2bc50 6c 6f 63 6b 20 69 73 20 6f 62 74 61 69 6e 65 64  lock is obtained
2bc60 20 69 66 20 50 33 3d 3d 30 20 6f 72 0a 2a 2a 20   if P3==0 or.** 
2bc70 61 20 77 72 69 74 65 20 6c 6f 63 6b 20 69 66 20  a write lock if 
2bc80 50 33 3d 3d 31 2e 0a 2a 2a 0a 2a 2a 20 50 32 20  P3==1..**.** P2 
2bc90 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 72 6f 6f  contains the roo
2bca0 74 2d 70 61 67 65 20 6f 66 20 74 68 65 20 74 61  t-page of the ta
2bcb0 62 6c 65 20 74 6f 20 6c 6f 63 6b 2e 0a 2a 2a 0a  ble to lock..**.
2bcc0 2a 2a 20 50 34 20 63 6f 6e 74 61 69 6e 73 20 61  ** P4 contains a
2bcd0 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20   pointer to the 
2bce0 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c  name of the tabl
2bcf0 65 20 62 65 69 6e 67 20 6c 6f 63 6b 65 64 2e 20  e being locked. 
2bd00 54 68 69 73 20 69 73 20 6f 6e 6c 79 0a 2a 2a 20  This is only.** 
2bd10 75 73 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65  used to generate
2bd20 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67   an error messag
2bd30 65 20 69 66 20 74 68 65 20 6c 6f 63 6b 20 63 61  e if the lock ca
2bd40 6e 6e 6f 74 20 62 65 20 6f 62 74 61 69 6e 65 64  nnot be obtained
2bd50 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 61 62  ..*/.case OP_Tab
2bd60 6c 65 4c 6f 63 6b 3a 20 7b 0a 20 20 75 38 20 69  leLock: {.  u8 i
2bd70 73 57 72 69 74 65 4c 6f 63 6b 20 3d 20 28 75 38  sWriteLock = (u8
2bd80 29 70 4f 70 2d 3e 70 33 3b 0a 20 20 69 66 28 20  )pOp->p3;.  if( 
2bd90 69 73 57 72 69 74 65 4c 6f 63 6b 20 7c 7c 20 30  isWriteLock || 0
2bda0 3d 3d 28 64 62 2d 3e 66 6c 61 67 73 26 53 51 4c  ==(db->flags&SQL
2bdb0 49 54 45 5f 52 65 61 64 55 6e 63 6f 6d 6d 69 74  ITE_ReadUncommit
2bdc0 74 65 64 29 20 29 7b 0a 20 20 20 20 69 6e 74 20  ted) ){.    int 
2bdd0 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 20 0a 20  p1 = pOp->p1; . 
2bde0 20 20 20 61 73 73 65 72 74 28 20 70 31 3e 3d 30     assert( p1>=0
2bdf0 20 26 26 20 70 31 3c 64 62 2d 3e 6e 44 62 20 29   && p1<db->nDb )
2be00 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 28 70  ;.    assert( (p
2be10 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28 28  ->btreeMask & ((
2be20 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c 70 31 29  (yDbMask)1)<<p1)
2be30 29 21 3d 30 20 29 3b 0a 20 20 20 20 61 73 73 65  )!=0 );.    asse
2be40 72 74 28 20 69 73 57 72 69 74 65 4c 6f 63 6b 3d  rt( isWriteLock=
2be50 3d 30 20 7c 7c 20 69 73 57 72 69 74 65 4c 6f 63  =0 || isWriteLoc
2be60 6b 3d 3d 31 20 29 3b 0a 20 20 20 20 72 63 20 3d  k==1 );.    rc =
2be70 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c 6f 63   sqlite3BtreeLoc
2be80 6b 54 61 62 6c 65 28 64 62 2d 3e 61 44 62 5b 70  kTable(db->aDb[p
2be90 31 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 32 2c  1].pBt, pOp->p2,
2bea0 20 69 73 57 72 69 74 65 4c 6f 63 6b 29 3b 0a 20   isWriteLock);. 
2beb0 20 20 20 69 66 28 20 28 72 63 26 30 78 46 46 29     if( (rc&0xFF)
2bec0 3d 3d 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20  ==SQLITE_LOCKED 
2bed0 29 7b 0a 20 20 20 20 20 20 63 6f 6e 73 74 20 63  ){.      const c
2bee0 68 61 72 20 2a 7a 20 3d 20 70 4f 70 2d 3e 70 34  har *z = pOp->p4
2bef0 2e 7a 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  .z;.      sqlite
2bf00 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a  3SetString(&p->z
2bf10 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 64 61 74  ErrMsg, db, "dat
2bf20 61 62 61 73 65 20 74 61 62 6c 65 20 69 73 20 6c  abase table is l
2bf30 6f 63 6b 65 64 3a 20 25 73 22 2c 20 7a 29 3b 0a  ocked: %s", z);.
2bf40 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61      }.  }.  brea
2bf50 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k;.}.#endif /* S
2bf60 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45  QLITE_OMIT_SHARE
2bf70 44 5f 43 41 43 48 45 20 2a 2f 0a 0a 23 69 66 6e  D_CACHE */..#ifn
2bf80 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2bf90 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20  VIRTUALTABLE./* 
2bfa0 4f 70 63 6f 64 65 3a 20 56 42 65 67 69 6e 20 2a  Opcode: VBegin *
2bfb0 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20   * * P4 *.**.** 
2bfc0 50 34 20 6d 61 79 20 62 65 20 61 20 70 6f 69 6e  P4 may be a poin
2bfd0 74 65 72 20 74 6f 20 61 6e 20 73 71 6c 69 74 65  ter to an sqlite
2bfe0 33 5f 76 74 61 62 20 73 74 72 75 63 74 75 72 65  3_vtab structure
2bff0 2e 20 49 66 20 73 6f 2c 20 63 61 6c 6c 20 74 68  . If so, call th
2c000 65 20 0a 2a 2a 20 78 42 65 67 69 6e 20 6d 65 74  e .** xBegin met
2c010 68 6f 64 20 66 6f 72 20 74 68 61 74 20 74 61 62  hod for that tab
2c020 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 6c 73 6f 2c 20  le..**.** Also, 
2c030 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 50  whether or not P
2c040 34 20 69 73 20 73 65 74 2c 20 63 68 65 63 6b 20  4 is set, check 
2c050 74 68 61 74 20 74 68 69 73 20 69 73 20 6e 6f 74  that this is not
2c060 20 62 65 69 6e 67 20 63 61 6c 6c 65 64 20 66 72   being called fr
2c070 6f 6d 0a 2a 2a 20 77 69 74 68 69 6e 20 61 20 63  om.** within a c
2c080 61 6c 6c 62 61 63 6b 20 74 6f 20 61 20 76 69 72  allback to a vir
2c090 74 75 61 6c 20 74 61 62 6c 65 20 78 53 79 6e 63  tual table xSync
2c0a0 28 29 20 6d 65 74 68 6f 64 2e 20 49 66 20 69 74  () method. If it
2c0b0 20 69 73 2c 20 74 68 65 20 65 72 72 6f 72 0a 2a   is, the error.*
2c0c0 2a 20 63 6f 64 65 20 77 69 6c 6c 20 62 65 20 73  * code will be s
2c0d0 65 74 20 74 6f 20 53 51 4c 49 54 45 5f 4c 4f 43  et to SQLITE_LOC
2c0e0 4b 45 44 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  KED..*/.case OP_
2c0f0 56 42 65 67 69 6e 3a 20 7b 0a 20 20 56 54 61 62  VBegin: {.  VTab
2c100 6c 65 20 2a 70 56 54 61 62 3b 0a 20 20 70 56 54  le *pVTab;.  pVT
2c110 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74  ab = pOp->p4.pVt
2c120 61 62 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74  ab;.  rc = sqlit
2c130 65 33 56 74 61 62 42 65 67 69 6e 28 64 62 2c 20  e3VtabBegin(db, 
2c140 70 56 54 61 62 29 3b 0a 20 20 69 66 28 20 70 56  pVTab);.  if( pV
2c150 54 61 62 20 29 20 69 6d 70 6f 72 74 56 74 61 62  Tab ) importVtab
2c160 45 72 72 4d 73 67 28 70 2c 20 70 56 54 61 62 2d  ErrMsg(p, pVTab-
2c170 3e 70 56 74 61 62 29 3b 0a 20 20 62 72 65 61 6b  >pVtab);.  break
2c180 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ;.}.#endif /* SQ
2c190 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
2c1a0 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64  LTABLE */..#ifnd
2c1b0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
2c1c0 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f  IRTUALTABLE./* O
2c1d0 70 63 6f 64 65 3a 20 56 43 72 65 61 74 65 20 50  pcode: VCreate P
2c1e0 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  1 * * P4 *.**.**
2c1f0 20 50 34 20 69 73 20 74 68 65 20 6e 61 6d 65 20   P4 is the name 
2c200 6f 66 20 61 20 76 69 72 74 75 61 6c 20 74 61 62  of a virtual tab
2c210 6c 65 20 69 6e 20 64 61 74 61 62 61 73 65 20 50  le in database P
2c220 31 2e 20 43 61 6c 6c 20 74 68 65 20 78 43 72 65  1. Call the xCre
2c230 61 74 65 20 6d 65 74 68 6f 64 0a 2a 2a 20 66 6f  ate method.** fo
2c240 72 20 74 68 61 74 20 74 61 62 6c 65 2e 0a 2a 2f  r that table..*/
2c250 0a 63 61 73 65 20 4f 50 5f 56 43 72 65 61 74 65  .case OP_VCreate
2c260 3a 20 7b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74  : {.  rc = sqlit
2c270 65 33 56 74 61 62 43 61 6c 6c 43 72 65 61 74 65  e3VtabCallCreate
2c280 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f  (db, pOp->p1, pO
2c290 70 2d 3e 70 34 2e 7a 2c 20 26 70 2d 3e 7a 45 72  p->p4.z, &p->zEr
2c2a0 72 4d 73 67 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  rMsg);.  break;.
2c2b0 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
2c2c0 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
2c2d0 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  ABLE */..#ifndef
2c2e0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
2c2f0 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63  TUALTABLE./* Opc
2c300 6f 64 65 3a 20 56 44 65 73 74 72 6f 79 20 50 31  ode: VDestroy P1
2c310 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20   * * P4 *.**.** 
2c320 50 34 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f  P4 is the name o
2c330 66 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c  f a virtual tabl
2c340 65 20 69 6e 20 64 61 74 61 62 61 73 65 20 50 31  e in database P1
2c350 2e 20 20 43 61 6c 6c 20 74 68 65 20 78 44 65 73  .  Call the xDes
2c360 74 72 6f 79 20 6d 65 74 68 6f 64 0a 2a 2a 20 6f  troy method.** o
2c370 66 20 74 68 61 74 20 74 61 62 6c 65 2e 0a 2a 2f  f that table..*/
2c380 0a 63 61 73 65 20 4f 50 5f 56 44 65 73 74 72 6f  .case OP_VDestro
2c390 79 3a 20 7b 0a 20 20 70 2d 3e 69 6e 56 74 61 62  y: {.  p->inVtab
2c3a0 4d 65 74 68 6f 64 20 3d 20 32 3b 0a 20 20 72 63  Method = 2;.  rc
2c3b0 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62 43 61   = sqlite3VtabCa
2c3c0 6c 6c 44 65 73 74 72 6f 79 28 64 62 2c 20 70 4f  llDestroy(db, pO
2c3d0 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a  p->p1, pOp->p4.z
2c3e0 29 3b 0a 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65  );.  p->inVtabMe
2c3f0 74 68 6f 64 20 3d 20 30 3b 0a 20 20 62 72 65 61  thod = 0;.  brea
2c400 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k;.}.#endif /* S
2c410 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
2c420 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e  ALTABLE */..#ifn
2c430 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2c440 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20  VIRTUALTABLE./* 
2c450 4f 70 63 6f 64 65 3a 20 56 4f 70 65 6e 20 50 31  Opcode: VOpen P1
2c460 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20   * * P4 *.**.** 
2c470 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20  P4 is a pointer 
2c480 74 6f 20 61 20 76 69 72 74 75 61 6c 20 74 61 62  to a virtual tab
2c490 6c 65 20 6f 62 6a 65 63 74 2c 20 61 6e 20 73 71  le object, an sq
2c4a0 6c 69 74 65 33 5f 76 74 61 62 20 73 74 72 75 63  lite3_vtab struc
2c4b0 74 75 72 65 2e 0a 2a 2a 20 50 31 20 69 73 20 61  ture..** P1 is a
2c4c0 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 2e 20   cursor number. 
2c4d0 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6f 70 65   This opcode ope
2c4e0 6e 73 20 61 20 63 75 72 73 6f 72 20 74 6f 20 74  ns a cursor to t
2c4f0 68 65 20 76 69 72 74 75 61 6c 0a 2a 2a 20 74 61  he virtual.** ta
2c500 62 6c 65 20 61 6e 64 20 73 74 6f 72 65 73 20 74  ble and stores t
2c510 68 61 74 20 63 75 72 73 6f 72 20 69 6e 20 50 31  hat cursor in P1
2c520 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 4f 70  ..*/.case OP_VOp
2c530 65 6e 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73  en: {.  VdbeCurs
2c540 6f 72 20 2a 70 43 75 72 3b 0a 20 20 73 71 6c 69  or *pCur;.  sqli
2c550 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20  te3_vtab_cursor 
2c560 2a 70 56 74 61 62 43 75 72 73 6f 72 3b 0a 20 20  *pVtabCursor;.  
2c570 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56  sqlite3_vtab *pV
2c580 74 61 62 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d  tab;.  sqlite3_m
2c590 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a  odule *pModule;.
2c5a0 0a 20 20 70 43 75 72 20 3d 20 30 3b 0a 20 20 70  .  pCur = 0;.  p
2c5b0 56 74 61 62 43 75 72 73 6f 72 20 3d 20 30 3b 0a  VtabCursor = 0;.
2c5c0 20 20 70 56 74 61 62 20 3d 20 70 4f 70 2d 3e 70    pVtab = pOp->p
2c5d0 34 2e 70 56 74 61 62 2d 3e 70 56 74 61 62 3b 0a  4.pVtab->pVtab;.
2c5e0 20 20 70 4d 6f 64 75 6c 65 20 3d 20 28 73 71 6c    pModule = (sql
2c5f0 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 29 70 56  ite3_module *)pV
2c600 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20  tab->pModule;.  
2c610 61 73 73 65 72 74 28 70 56 74 61 62 20 26 26 20  assert(pVtab && 
2c620 70 4d 6f 64 75 6c 65 29 3b 0a 20 20 72 63 20 3d  pModule);.  rc =
2c630 20 70 4d 6f 64 75 6c 65 2d 3e 78 4f 70 65 6e 28   pModule->xOpen(
2c640 70 56 74 61 62 2c 20 26 70 56 74 61 62 43 75 72  pVtab, &pVtabCur
2c650 73 6f 72 29 3b 0a 20 20 69 6d 70 6f 72 74 56 74  sor);.  importVt
2c660 61 62 45 72 72 4d 73 67 28 70 2c 20 70 56 74 61  abErrMsg(p, pVta
2c670 62 29 3b 0a 20 20 69 66 28 20 53 51 4c 49 54 45  b);.  if( SQLITE
2c680 5f 4f 4b 3d 3d 72 63 20 29 7b 0a 20 20 20 20 2f  _OK==rc ){.    /
2c690 2a 20 49 6e 69 74 69 61 6c 69 7a 65 20 73 71 6c  * Initialize sql
2c6a0 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72  ite3_vtab_cursor
2c6b0 20 62 61 73 65 20 63 6c 61 73 73 20 2a 2f 0a 20   base class */. 
2c6c0 20 20 20 70 56 74 61 62 43 75 72 73 6f 72 2d 3e     pVtabCursor->
2c6d0 70 56 74 61 62 20 3d 20 70 56 74 61 62 3b 0a 0a  pVtab = pVtab;..
2c6e0 20 20 20 20 2f 2a 20 49 6e 69 74 69 61 6c 69 73      /* Initialis
2c6f0 65 20 76 64 62 65 20 63 75 72 73 6f 72 20 6f 62  e vdbe cursor ob
2c700 6a 65 63 74 20 2a 2f 0a 20 20 20 20 70 43 75 72  ject */.    pCur
2c710 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f   = allocateCurso
2c720 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 30 2c  r(p, pOp->p1, 0,
2c730 20 2d 31 2c 20 30 29 3b 0a 20 20 20 20 69 66 28   -1, 0);.    if(
2c740 20 70 43 75 72 20 29 7b 0a 20 20 20 20 20 20 70   pCur ){.      p
2c750 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72  Cur->pVtabCursor
2c760 20 3d 20 70 56 74 61 62 43 75 72 73 6f 72 3b 0a   = pVtabCursor;.
2c770 20 20 20 20 20 20 70 43 75 72 2d 3e 70 4d 6f 64        pCur->pMod
2c780 75 6c 65 20 3d 20 70 56 74 61 62 43 75 72 73 6f  ule = pVtabCurso
2c790 72 2d 3e 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c  r->pVtab->pModul
2c7a0 65 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  e;.    }else{.  
2c7b0 20 20 20 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61      db->mallocFa
2c7c0 69 6c 65 64 20 3d 20 31 3b 0a 20 20 20 20 20 20  iled = 1;.      
2c7d0 70 4d 6f 64 75 6c 65 2d 3e 78 43 6c 6f 73 65 28  pModule->xClose(
2c7e0 70 56 74 61 62 43 75 72 73 6f 72 29 3b 0a 20 20  pVtabCursor);.  
2c7f0 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b    }.  }.  break;
2c800 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
2c810 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
2c820 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65  TABLE */..#ifnde
2c830 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
2c840 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70  RTUALTABLE./* Op
2c850 63 6f 64 65 3a 20 56 46 69 6c 74 65 72 20 50 31  code: VFilter P1
2c860 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a   P2 P3 P4 *.**.*
2c870 2a 20 50 31 20 69 73 20 61 20 63 75 72 73 6f 72  * P1 is a cursor
2c880 20 6f 70 65 6e 65 64 20 75 73 69 6e 67 20 56 4f   opened using VO
2c890 70 65 6e 2e 20 20 50 32 20 69 73 20 61 6e 20 61  pen.  P2 is an a
2c8a0 64 64 72 65 73 73 20 74 6f 20 6a 75 6d 70 20 74  ddress to jump t
2c8b0 6f 20 69 66 0a 2a 2a 20 74 68 65 20 66 69 6c 74  o if.** the filt
2c8c0 65 72 65 64 20 72 65 73 75 6c 74 20 73 65 74 20  ered result set 
2c8d0 69 73 20 65 6d 70 74 79 2e 0a 2a 2a 0a 2a 2a 20  is empty..**.** 
2c8e0 50 34 20 69 73 20 65 69 74 68 65 72 20 4e 55 4c  P4 is either NUL
2c8f0 4c 20 6f 72 20 61 20 73 74 72 69 6e 67 20 74 68  L or a string th
2c900 61 74 20 77 61 73 20 67 65 6e 65 72 61 74 65 64  at was generated
2c910 20 62 79 20 74 68 65 20 78 42 65 73 74 49 6e 64   by the xBestInd
2c920 65 78 0a 2a 2a 20 6d 65 74 68 6f 64 20 6f 66 20  ex.** method of 
2c930 74 68 65 20 6d 6f 64 75 6c 65 2e 20 20 54 68 65  the module.  The
2c940 20 69 6e 74 65 72 70 72 65 74 61 74 69 6f 6e 20   interpretation 
2c950 6f 66 20 74 68 65 20 50 34 20 73 74 72 69 6e 67  of the P4 string
2c960 20 69 73 20 6c 65 66 74 0a 2a 2a 20 74 6f 20 74   is left.** to t
2c970 68 65 20 6d 6f 64 75 6c 65 20 69 6d 70 6c 65 6d  he module implem
2c980 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  entation..**.** 
2c990 54 68 69 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f  This opcode invo
2c9a0 6b 65 73 20 74 68 65 20 78 46 69 6c 74 65 72 20  kes the xFilter 
2c9b0 6d 65 74 68 6f 64 20 6f 6e 20 74 68 65 20 76 69  method on the vi
2c9c0 72 74 75 61 6c 20 74 61 62 6c 65 20 73 70 65 63  rtual table spec
2c9d0 69 66 69 65 64 0a 2a 2a 20 62 79 20 50 31 2e 20  ified.** by P1. 
2c9e0 20 54 68 65 20 69 6e 74 65 67 65 72 20 71 75 65   The integer que
2c9f0 72 79 20 70 6c 61 6e 20 70 61 72 61 6d 65 74 65  ry plan paramete
2ca00 72 20 74 6f 20 78 46 69 6c 74 65 72 20 69 73 20  r to xFilter is 
2ca10 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74  stored in regist
2ca20 65 72 0a 2a 2a 20 50 33 2e 20 52 65 67 69 73 74  er.** P3. Regist
2ca30 65 72 20 50 33 2b 31 20 73 74 6f 72 65 73 20 74  er P3+1 stores t
2ca40 68 65 20 61 72 67 63 20 70 61 72 61 6d 65 74 65  he argc paramete
2ca50 72 20 74 6f 20 62 65 20 70 61 73 73 65 64 20 74  r to be passed t
2ca60 6f 20 74 68 65 0a 2a 2a 20 78 46 69 6c 74 65 72  o the.** xFilter
2ca70 20 6d 65 74 68 6f 64 2e 20 52 65 67 69 73 74 65   method. Registe
2ca80 72 73 20 50 33 2b 32 2e 2e 50 33 2b 31 2b 61 72  rs P3+2..P3+1+ar
2ca90 67 63 20 61 72 65 20 74 68 65 20 61 72 67 63 0a  gc are the argc.
2caa0 2a 2a 20 61 64 64 69 74 69 6f 6e 61 6c 20 70 61  ** additional pa
2cab0 72 61 6d 65 74 65 72 73 20 77 68 69 63 68 20 61  rameters which a
2cac0 72 65 20 70 61 73 73 65 64 20 74 6f 0a 2a 2a 20  re passed to.** 
2cad0 78 46 69 6c 74 65 72 20 61 73 20 61 72 67 76 2e  xFilter as argv.
2cae0 20 52 65 67 69 73 74 65 72 20 50 33 2b 32 20 62   Register P3+2 b
2caf0 65 63 6f 6d 65 73 20 61 72 67 76 5b 30 5d 20 77  ecomes argv[0] w
2cb00 68 65 6e 20 70 61 73 73 65 64 20 74 6f 20 78 46  hen passed to xF
2cb10 69 6c 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 41 20 6a  ilter..**.** A j
2cb20 75 6d 70 20 69 73 20 6d 61 64 65 20 74 6f 20 50  ump is made to P
2cb30 32 20 69 66 20 74 68 65 20 72 65 73 75 6c 74 20  2 if the result 
2cb40 73 65 74 20 61 66 74 65 72 20 66 69 6c 74 65 72  set after filter
2cb50 69 6e 67 20 77 6f 75 6c 64 20 62 65 20 65 6d 70  ing would be emp
2cb60 74 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56  ty..*/.case OP_V
2cb70 46 69 6c 74 65 72 3a 20 7b 20 20 20 2f 2a 20 6a  Filter: {   /* j
2cb80 75 6d 70 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 72  ump */.  int nAr
2cb90 67 3b 0a 20 20 69 6e 74 20 69 51 75 65 72 79 3b  g;.  int iQuery;
2cba0 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33  .  const sqlite3
2cbb0 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65  _module *pModule
2cbc0 3b 0a 20 20 4d 65 6d 20 2a 70 51 75 65 72 79 3b  ;.  Mem *pQuery;
2cbd0 0a 20 20 4d 65 6d 20 2a 70 41 72 67 63 3b 0a 20  .  Mem *pArgc;. 
2cbe0 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75   sqlite3_vtab_cu
2cbf0 72 73 6f 72 20 2a 70 56 74 61 62 43 75 72 73 6f  rsor *pVtabCurso
2cc00 72 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61  r;.  sqlite3_vta
2cc10 62 20 2a 70 56 74 61 62 3b 0a 20 20 56 64 62 65  b *pVtab;.  Vdbe
2cc20 43 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a 20 20  Cursor *pCur;.  
2cc30 69 6e 74 20 72 65 73 3b 0a 20 20 69 6e 74 20 69  int res;.  int i
2cc40 3b 0a 20 20 4d 65 6d 20 2a 2a 61 70 41 72 67 3b  ;.  Mem **apArg;
2cc50 0a 0a 20 20 70 51 75 65 72 79 20 3d 20 26 61 4d  ..  pQuery = &aM
2cc60 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 70  em[pOp->p3];.  p
2cc70 41 72 67 63 20 3d 20 26 70 51 75 65 72 79 5b 31  Argc = &pQuery[1
2cc80 5d 3b 0a 20 20 70 43 75 72 20 3d 20 70 2d 3e 61  ];.  pCur = p->a
2cc90 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
2cca0 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
2ccb0 6c 69 64 28 70 51 75 65 72 79 29 20 29 3b 0a 20  lid(pQuery) );. 
2ccc0 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
2ccd0 70 4f 70 2d 3e 70 33 2c 20 70 51 75 65 72 79 29  pOp->p3, pQuery)
2cce0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 75 72  ;.  assert( pCur
2ccf0 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 20 29 3b  ->pVtabCursor );
2cd00 0a 20 20 70 56 74 61 62 43 75 72 73 6f 72 20 3d  .  pVtabCursor =
2cd10 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73   pCur->pVtabCurs
2cd20 6f 72 3b 0a 20 20 70 56 74 61 62 20 3d 20 70 56  or;.  pVtab = pV
2cd30 74 61 62 43 75 72 73 6f 72 2d 3e 70 56 74 61 62  tabCursor->pVtab
2cd40 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56  ;.  pModule = pV
2cd50 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 0a 20  tab->pModule;.. 
2cd60 20 2f 2a 20 47 72 61 62 20 74 68 65 20 69 6e 64   /* Grab the ind
2cd70 65 78 20 6e 75 6d 62 65 72 20 61 6e 64 20 61 72  ex number and ar
2cd80 67 63 20 70 61 72 61 6d 65 74 65 72 73 20 2a 2f  gc parameters */
2cd90 0a 20 20 61 73 73 65 72 74 28 20 28 70 51 75 65  .  assert( (pQue
2cda0 72 79 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e  ry->flags&MEM_In
2cdb0 74 29 21 3d 30 20 26 26 20 70 41 72 67 63 2d 3e  t)!=0 && pArgc->
2cdc0 66 6c 61 67 73 3d 3d 4d 45 4d 5f 49 6e 74 20 29  flags==MEM_Int )
2cdd0 3b 0a 20 20 6e 41 72 67 20 3d 20 28 69 6e 74 29  ;.  nArg = (int)
2cde0 70 41 72 67 63 2d 3e 75 2e 69 3b 0a 20 20 69 51  pArgc->u.i;.  iQ
2cdf0 75 65 72 79 20 3d 20 28 69 6e 74 29 70 51 75 65  uery = (int)pQue
2ce00 72 79 2d 3e 75 2e 69 3b 0a 0a 20 20 2f 2a 20 49  ry->u.i;..  /* I
2ce10 6e 76 6f 6b 65 20 74 68 65 20 78 46 69 6c 74 65  nvoke the xFilte
2ce20 72 20 6d 65 74 68 6f 64 20 2a 2f 0a 20 20 7b 0a  r method */.  {.
2ce30 20 20 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 20      res = 0;.   
2ce40 20 61 70 41 72 67 20 3d 20 70 2d 3e 61 70 41 72   apArg = p->apAr
2ce50 67 3b 0a 20 20 20 20 66 6f 72 28 69 20 3d 20 30  g;.    for(i = 0
2ce60 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a  ; i<nArg; i++){.
2ce70 20 20 20 20 20 20 61 70 41 72 67 5b 69 5d 20 3d        apArg[i] =
2ce80 20 26 70 41 72 67 63 5b 69 2b 31 5d 3b 0a 20 20   &pArgc[i+1];.  
2ce90 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
2cea0 65 6d 53 74 6f 72 65 54 79 70 65 28 61 70 41 72  emStoreType(apAr
2ceb0 67 5b 69 5d 29 3b 0a 20 20 20 20 7d 0a 0a 20 20  g[i]);.    }..  
2cec0 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f    p->inVtabMetho
2ced0 64 20 3d 20 31 3b 0a 20 20 20 20 72 63 20 3d 20  d = 1;.    rc = 
2cee0 70 4d 6f 64 75 6c 65 2d 3e 78 46 69 6c 74 65 72  pModule->xFilter
2cef0 28 70 56 74 61 62 43 75 72 73 6f 72 2c 20 69 51  (pVtabCursor, iQ
2cf00 75 65 72 79 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c  uery, pOp->p4.z,
2cf10 20 6e 41 72 67 2c 20 61 70 41 72 67 29 3b 0a 20   nArg, apArg);. 
2cf20 20 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68     p->inVtabMeth
2cf30 6f 64 20 3d 20 30 3b 0a 20 20 20 20 69 6d 70 6f  od = 0;.    impo
2cf40 72 74 56 74 61 62 45 72 72 4d 73 67 28 70 2c 20  rtVtabErrMsg(p, 
2cf50 70 56 74 61 62 29 3b 0a 20 20 20 20 69 66 28 20  pVtab);.    if( 
2cf60 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc==SQLITE_OK ){
2cf70 0a 20 20 20 20 20 20 72 65 73 20 3d 20 70 4d 6f  .      res = pMo
2cf80 64 75 6c 65 2d 3e 78 45 6f 66 28 70 56 74 61 62  dule->xEof(pVtab
2cf90 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 7d 0a 0a  Cursor);.    }..
2cfa0 20 20 20 20 69 66 28 20 72 65 73 20 29 7b 0a 20      if( res ){. 
2cfb0 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70       pc = pOp->p
2cfc0 32 20 2d 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d  2 - 1;.    }.  }
2cfd0 0a 20 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77  .  pCur->nullRow
2cfe0 20 3d 20 30 3b 0a 0a 20 20 62 72 65 61 6b 3b 0a   = 0;..  break;.
2cff0 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
2d000 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
2d010 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  ABLE */..#ifndef
2d020 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
2d030 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63  TUALTABLE./* Opc
2d040 6f 64 65 3a 20 56 43 6f 6c 75 6d 6e 20 50 31 20  ode: VColumn P1 
2d050 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
2d060 53 74 6f 72 65 20 74 68 65 20 76 61 6c 75 65 20  Store the value 
2d070 6f 66 20 74 68 65 20 50 32 2d 74 68 20 63 6f 6c  of the P2-th col
2d080 75 6d 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 72 6f  umn of.** the ro
2d090 77 20 6f 66 20 74 68 65 20 76 69 72 74 75 61 6c  w of the virtual
2d0a0 2d 74 61 62 6c 65 20 74 68 61 74 20 74 68 65 20  -table that the 
2d0b0 0a 2a 2a 20 50 31 20 63 75 72 73 6f 72 20 69 73  .** P1 cursor is
2d0c0 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 69 6e 74   pointing to int
2d0d0 6f 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  o register P3..*
2d0e0 2f 0a 63 61 73 65 20 4f 50 5f 56 43 6f 6c 75 6d  /.case OP_VColum
2d0f0 6e 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76  n: {.  sqlite3_v
2d100 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f  tab *pVtab;.  co
2d110 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75  nst sqlite3_modu
2d120 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 4d  le *pModule;.  M
2d130 65 6d 20 2a 70 44 65 73 74 3b 0a 20 20 73 71 6c  em *pDest;.  sql
2d140 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 73 43 6f  ite3_context sCo
2d150 6e 74 65 78 74 3b 0a 0a 20 20 56 64 62 65 43 75  ntext;..  VdbeCu
2d160 72 73 6f 72 20 2a 70 43 75 72 20 3d 20 70 2d 3e  rsor *pCur = p->
2d170 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
2d180 20 20 61 73 73 65 72 74 28 20 70 43 75 72 2d 3e    assert( pCur->
2d190 70 56 74 61 62 43 75 72 73 6f 72 20 29 3b 0a 20  pVtabCursor );. 
2d1a0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
2d1b0 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 70  >0 && pOp->p3<=p
2d1c0 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 44 65 73  ->nMem );.  pDes
2d1d0 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
2d1e0 33 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f  3];.  memAboutTo
2d1f0 43 68 61 6e 67 65 28 70 2c 20 70 44 65 73 74 29  Change(p, pDest)
2d200 3b 0a 20 20 69 66 28 20 70 43 75 72 2d 3e 6e 75  ;.  if( pCur->nu
2d210 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 73 71 6c  llRow ){.    sql
2d220 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75  ite3VdbeMemSetNu
2d230 6c 6c 28 70 44 65 73 74 29 3b 0a 20 20 20 20 62  ll(pDest);.    b
2d240 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 56 74 61  reak;.  }.  pVta
2d250 62 20 3d 20 70 43 75 72 2d 3e 70 56 74 61 62 43  b = pCur->pVtabC
2d260 75 72 73 6f 72 2d 3e 70 56 74 61 62 3b 0a 20 20  ursor->pVtab;.  
2d270 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d  pModule = pVtab-
2d280 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 61 73 73 65  >pModule;.  asse
2d290 72 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 43 6f  rt( pModule->xCo
2d2a0 6c 75 6d 6e 20 29 3b 0a 20 20 6d 65 6d 73 65 74  lumn );.  memset
2d2b0 28 26 73 43 6f 6e 74 65 78 74 2c 20 30 2c 20 73  (&sContext, 0, s
2d2c0 69 7a 65 6f 66 28 73 43 6f 6e 74 65 78 74 29 29  izeof(sContext))
2d2d0 3b 0a 0a 20 20 2f 2a 20 54 68 65 20 6f 75 74 70  ;..  /* The outp
2d2e0 75 74 20 63 65 6c 6c 20 6d 61 79 20 61 6c 72 65  ut cell may alre
2d2f0 61 64 79 20 68 61 76 65 20 61 20 62 75 66 66 65  ady have a buffe
2d300 72 20 61 6c 6c 6f 63 61 74 65 64 2e 20 4d 6f 76  r allocated. Mov
2d310 65 0a 20 20 2a 2a 20 74 68 65 20 63 75 72 72 65  e.  ** the curre
2d320 6e 74 20 63 6f 6e 74 65 6e 74 73 20 74 6f 20 73  nt contents to s
2d330 43 6f 6e 74 65 78 74 2e 73 20 73 6f 20 69 6e 20  Context.s so in 
2d340 63 61 73 65 20 74 68 65 20 75 73 65 72 2d 66 75  case the user-fu
2d350 6e 63 74 69 6f 6e 20 0a 20 20 2a 2a 20 63 61 6e  nction .  ** can
2d360 20 75 73 65 20 74 68 65 20 61 6c 72 65 61 64 79   use the already
2d370 20 61 6c 6c 6f 63 61 74 65 64 20 62 75 66 66 65   allocated buffe
2d380 72 20 69 6e 73 74 65 61 64 20 6f 66 20 61 6c 6c  r instead of all
2d390 6f 63 61 74 69 6e 67 20 61 20 0a 20 20 2a 2a 20  ocating a .  ** 
2d3a0 6e 65 77 20 6f 6e 65 2e 0a 20 20 2a 2f 0a 20 20  new one..  */.  
2d3b0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d 6f  sqlite3VdbeMemMo
2d3c0 76 65 28 26 73 43 6f 6e 74 65 78 74 2e 73 2c 20  ve(&sContext.s, 
2d3d0 70 44 65 73 74 29 3b 0a 20 20 4d 65 6d 53 65 74  pDest);.  MemSet
2d3e0 54 79 70 65 46 6c 61 67 28 26 73 43 6f 6e 74 65  TypeFlag(&sConte
2d3f0 78 74 2e 73 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b  xt.s, MEM_Null);
2d400 0a 0a 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65  ..  rc = pModule
2d410 2d 3e 78 43 6f 6c 75 6d 6e 28 70 43 75 72 2d 3e  ->xColumn(pCur->
2d420 70 56 74 61 62 43 75 72 73 6f 72 2c 20 26 73 43  pVtabCursor, &sC
2d430 6f 6e 74 65 78 74 2c 20 70 4f 70 2d 3e 70 32 29  ontext, pOp->p2)
2d440 3b 0a 20 20 69 6d 70 6f 72 74 56 74 61 62 45 72  ;.  importVtabEr
2d450 72 4d 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a  rMsg(p, pVtab);.
2d460 20 20 69 66 28 20 73 43 6f 6e 74 65 78 74 2e 69    if( sContext.i
2d470 73 45 72 72 6f 72 20 29 7b 0a 20 20 20 20 72 63  sError ){.    rc
2d480 20 3d 20 73 43 6f 6e 74 65 78 74 2e 69 73 45 72   = sContext.isEr
2d490 72 6f 72 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 43  ror;.  }..  /* C
2d4a0 6f 70 79 20 74 68 65 20 72 65 73 75 6c 74 20 6f  opy the result o
2d4b0 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 74  f the function t
2d4c0 6f 20 74 68 65 20 50 33 20 72 65 67 69 73 74 65  o the P3 registe
2d4d0 72 2e 20 57 65 0a 20 20 2a 2a 20 64 6f 20 74 68  r. We.  ** do th
2d4e0 69 73 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66  is regardless of
2d4f0 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
2d500 61 6e 20 65 72 72 6f 72 20 6f 63 63 75 72 72 65  an error occurre
2d510 64 20 74 6f 20 65 6e 73 75 72 65 20 61 6e 79 0a  d to ensure any.
2d520 20 20 2a 2a 20 64 79 6e 61 6d 69 63 20 61 6c 6c    ** dynamic all
2d530 6f 63 61 74 69 6f 6e 20 69 6e 20 73 43 6f 6e 74  ocation in sCont
2d540 65 78 74 2e 73 20 28 61 20 4d 65 6d 20 73 74 72  ext.s (a Mem str
2d550 75 63 74 29 20 69 73 20 20 72 65 6c 65 61 73 65  uct) is  release
2d560 64 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65  d..  */.  sqlite
2d570 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64  3VdbeChangeEncod
2d580 69 6e 67 28 26 73 43 6f 6e 74 65 78 74 2e 73 2c  ing(&sContext.s,
2d590 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 73 71   encoding);.  sq
2d5a0 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65  lite3VdbeMemMove
2d5b0 28 70 44 65 73 74 2c 20 26 73 43 6f 6e 74 65 78  (pDest, &sContex
2d5c0 74 2e 73 29 3b 0a 20 20 52 45 47 49 53 54 45 52  t.s);.  REGISTER
2d5d0 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20  _TRACE(pOp->p3, 
2d5e0 70 44 65 73 74 29 3b 0a 20 20 55 50 44 41 54 45  pDest);.  UPDATE
2d5f0 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 44  _MAX_BLOBSIZE(pD
2d600 65 73 74 29 3b 0a 0a 20 20 69 66 28 20 73 71 6c  est);..  if( sql
2d610 69 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69  ite3VdbeMemTooBi
2d620 67 28 70 44 65 73 74 29 20 29 7b 0a 20 20 20 20  g(pDest) ){.    
2d630 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20  goto too_big;.  
2d640 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  }.  break;.}.#en
2d650 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
2d660 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20  IT_VIRTUALTABLE 
2d670 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
2d680 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
2d690 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ABLE./* Opcode: 
2d6a0 56 4e 65 78 74 20 50 31 20 50 32 20 2a 20 2a 20  VNext P1 P2 * * 
2d6b0 2a 0a 2a 2a 0a 2a 2a 20 41 64 76 61 6e 63 65 20  *.**.** Advance 
2d6c0 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 50 31  virtual table P1
2d6d0 20 74 6f 20 74 68 65 20 6e 65 78 74 20 72 6f 77   to the next row
2d6e0 20 69 6e 20 69 74 73 20 72 65 73 75 6c 74 20 73   in its result s
2d6f0 65 74 20 61 6e 64 0a 2a 2a 20 6a 75 6d 70 20 74  et and.** jump t
2d700 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 50 32  o instruction P2
2d710 2e 20 20 4f 72 2c 20 69 66 20 74 68 65 20 76 69  .  Or, if the vi
2d720 72 74 75 61 6c 20 74 61 62 6c 65 20 68 61 73 20  rtual table has 
2d730 72 65 61 63 68 65 64 0a 2a 2a 20 74 68 65 20 65  reached.** the e
2d740 6e 64 20 6f 66 20 69 74 73 20 72 65 73 75 6c 74  nd of its result
2d750 20 73 65 74 2c 20 74 68 65 6e 20 66 61 6c 6c 20   set, then fall 
2d760 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e  through to the n
2d770 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ext instruction.
2d780 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 4e 65 78  .*/.case OP_VNex
2d790 74 3a 20 7b 20 20 20 2f 2a 20 6a 75 6d 70 20 2a  t: {   /* jump *
2d7a0 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62  /.  sqlite3_vtab
2d7b0 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f 6e 73 74   *pVtab;.  const
2d7c0 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20   sqlite3_module 
2d7d0 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 69 6e 74 20  *pModule;.  int 
2d7e0 72 65 73 3b 0a 20 20 56 64 62 65 43 75 72 73 6f  res;.  VdbeCurso
2d7f0 72 20 2a 70 43 75 72 3b 0a 0a 20 20 72 65 73 20  r *pCur;..  res 
2d800 3d 20 30 3b 0a 20 20 70 43 75 72 20 3d 20 70 2d  = 0;.  pCur = p-
2d810 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
2d820 0a 20 20 61 73 73 65 72 74 28 20 70 43 75 72 2d  .  assert( pCur-
2d830 3e 70 56 74 61 62 43 75 72 73 6f 72 20 29 3b 0a  >pVtabCursor );.
2d840 20 20 69 66 28 20 70 43 75 72 2d 3e 6e 75 6c 6c    if( pCur->null
2d850 52 6f 77 20 29 7b 0a 20 20 20 20 62 72 65 61 6b  Row ){.    break
2d860 3b 0a 20 20 7d 0a 20 20 70 56 74 61 62 20 3d 20  ;.  }.  pVtab = 
2d870 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f  pCur->pVtabCurso
2d880 72 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64  r->pVtab;.  pMod
2d890 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f  ule = pVtab->pMo
2d8a0 64 75 6c 65 3b 0a 20 20 61 73 73 65 72 74 28 20  dule;.  assert( 
2d8b0 70 4d 6f 64 75 6c 65 2d 3e 78 4e 65 78 74 20 29  pModule->xNext )
2d8c0 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74  ;..  /* Invoke t
2d8d0 68 65 20 78 4e 65 78 74 28 29 20 6d 65 74 68 6f  he xNext() metho
2d8e0 64 20 6f 66 20 74 68 65 20 6d 6f 64 75 6c 65 2e  d of the module.
2d8f0 20 54 68 65 72 65 20 69 73 20 6e 6f 20 77 61 79   There is no way
2d900 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20 75 6e   for the.  ** un
2d910 64 65 72 6c 79 69 6e 67 20 69 6d 70 6c 65 6d 65  derlying impleme
2d920 6e 74 61 74 69 6f 6e 20 74 6f 20 72 65 74 75 72  ntation to retur
2d930 6e 20 61 6e 20 65 72 72 6f 72 20 69 66 20 6f 6e  n an error if on
2d940 65 20 6f 63 63 75 72 73 20 64 75 72 69 6e 67 0a  e occurs during.
2d950 20 20 2a 2a 20 78 4e 65 78 74 28 29 2e 20 49 6e    ** xNext(). In
2d960 73 74 65 61 64 2c 20 69 66 20 61 6e 20 65 72 72  stead, if an err
2d970 6f 72 20 6f 63 63 75 72 73 2c 20 74 72 75 65 20  or occurs, true 
2d980 69 73 20 72 65 74 75 72 6e 65 64 20 28 69 6e 64  is returned (ind
2d990 69 63 61 74 69 6e 67 20 74 68 61 74 20 0a 20 20  icating that .  
2d9a0 2a 2a 20 64 61 74 61 20 69 73 20 61 76 61 69 6c  ** data is avail
2d9b0 61 62 6c 65 29 20 61 6e 64 20 74 68 65 20 65 72  able) and the er
2d9c0 72 6f 72 20 63 6f 64 65 20 72 65 74 75 72 6e 65  ror code returne
2d9d0 64 20 77 68 65 6e 20 78 43 6f 6c 75 6d 6e 20 6f  d when xColumn o
2d9e0 72 0a 20 20 2a 2a 20 73 6f 6d 65 20 6f 74 68 65  r.  ** some othe
2d9f0 72 20 6d 65 74 68 6f 64 20 69 73 20 6e 65 78 74  r method is next
2da00 20 69 6e 76 6f 6b 65 64 20 6f 6e 20 74 68 65 20   invoked on the 
2da10 73 61 76 65 20 76 69 72 74 75 61 6c 20 74 61 62  save virtual tab
2da20 6c 65 20 63 75 72 73 6f 72 2e 0a 20 20 2a 2f 0a  le cursor..  */.
2da30 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f    p->inVtabMetho
2da40 64 20 3d 20 31 3b 0a 20 20 72 63 20 3d 20 70 4d  d = 1;.  rc = pM
2da50 6f 64 75 6c 65 2d 3e 78 4e 65 78 74 28 70 43 75  odule->xNext(pCu
2da60 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 29 3b  r->pVtabCursor);
2da70 0a 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68  .  p->inVtabMeth
2da80 6f 64 20 3d 20 30 3b 0a 20 20 69 6d 70 6f 72 74  od = 0;.  import
2da90 56 74 61 62 45 72 72 4d 73 67 28 70 2c 20 70 56  VtabErrMsg(p, pV
2daa0 74 61 62 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d  tab);.  if( rc==
2dab0 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
2dac0 20 72 65 73 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e   res = pModule->
2dad0 78 45 6f 66 28 70 43 75 72 2d 3e 70 56 74 61 62  xEof(pCur->pVtab
2dae0 43 75 72 73 6f 72 29 3b 0a 20 20 7d 0a 0a 20 20  Cursor);.  }..  
2daf0 69 66 28 20 21 72 65 73 20 29 7b 0a 20 20 20 20  if( !res ){.    
2db00 2f 2a 20 49 66 20 74 68 65 72 65 20 69 73 20 64  /* If there is d
2db10 61 74 61 2c 20 6a 75 6d 70 20 74 6f 20 50 32 20  ata, jump to P2 
2db20 2a 2f 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  */.    pc = pOp-
2db30 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62  >p2 - 1;.  }.  b
2db40 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  reak;.}.#endif /
2db50 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  * SQLITE_OMIT_VI
2db60 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23  RTUALTABLE */..#
2db70 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2db80 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
2db90 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 52 65 6e 61  /* Opcode: VRena
2dba0 6d 65 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a  me P1 * * P4 *.*
2dbb0 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69  *.** P4 is a poi
2dbc0 6e 74 65 72 20 74 6f 20 61 20 76 69 72 74 75 61  nter to a virtua
2dbd0 6c 20 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20  l table object, 
2dbe0 61 6e 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  an sqlite3_vtab 
2dbf0 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 20 54 68  structure..** Th
2dc00 69 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65  is opcode invoke
2dc10 73 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64  s the correspond
2dc20 69 6e 67 20 78 52 65 6e 61 6d 65 20 6d 65 74 68  ing xRename meth
2dc30 6f 64 2e 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a  od. The value.**
2dc40 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
2dc50 69 73 20 70 61 73 73 65 64 20 61 73 20 74 68 65  is passed as the
2dc60 20 7a 4e 61 6d 65 20 61 72 67 75 6d 65 6e 74 20   zName argument 
2dc70 74 6f 20 74 68 65 20 78 52 65 6e 61 6d 65 20 6d  to the xRename m
2dc80 65 74 68 6f 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ethod..*/.case O
2dc90 50 5f 56 52 65 6e 61 6d 65 3a 20 7b 0a 20 20 73  P_VRename: {.  s
2dca0 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74  qlite3_vtab *pVt
2dcb0 61 62 3b 0a 20 20 4d 65 6d 20 2a 70 4e 61 6d 65  ab;.  Mem *pName
2dcc0 3b 0a 0a 20 20 70 56 74 61 62 20 3d 20 70 4f 70  ;..  pVtab = pOp
2dcd0 2d 3e 70 34 2e 70 56 74 61 62 2d 3e 70 56 74 61  ->p4.pVtab->pVta
2dce0 62 3b 0a 20 20 70 4e 61 6d 65 20 3d 20 26 61 4d  b;.  pName = &aM
2dcf0 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  em[pOp->p1];.  a
2dd00 73 73 65 72 74 28 20 70 56 74 61 62 2d 3e 70 4d  ssert( pVtab->pM
2dd10 6f 64 75 6c 65 2d 3e 78 52 65 6e 61 6d 65 20 29  odule->xRename )
2dd20 3b 0a 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49  ;.  assert( memI
2dd30 73 56 61 6c 69 64 28 70 4e 61 6d 65 29 20 29 3b  sValid(pName) );
2dd40 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43  .  REGISTER_TRAC
2dd50 45 28 70 4f 70 2d 3e 70 31 2c 20 70 4e 61 6d 65  E(pOp->p1, pName
2dd60 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4e 61  );.  assert( pNa
2dd70 6d 65 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  me->flags & MEM_
2dd80 53 74 72 20 29 3b 0a 20 20 72 63 20 3d 20 70 56  Str );.  rc = pV
2dd90 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 2d 3e 78 52  tab->pModule->xR
2dda0 65 6e 61 6d 65 28 70 56 74 61 62 2c 20 70 4e 61  ename(pVtab, pNa
2ddb0 6d 65 2d 3e 7a 29 3b 0a 20 20 69 6d 70 6f 72 74  me->z);.  import
2ddc0 56 74 61 62 45 72 72 4d 73 67 28 70 2c 20 70 56  VtabErrMsg(p, pV
2ddd0 74 61 62 29 3b 0a 20 20 70 2d 3e 65 78 70 69 72  tab);.  p->expir
2dde0 65 64 20 3d 20 30 3b 0a 0a 20 20 62 72 65 61 6b  ed = 0;..  break
2ddf0 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e  ;.}.#endif..#ifn
2de00 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2de10 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20  VIRTUALTABLE./* 
2de20 4f 70 63 6f 64 65 3a 20 56 55 70 64 61 74 65 20  Opcode: VUpdate 
2de30 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a  P1 P2 P3 P4 *.**
2de40 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e  .** P4 is a poin
2de50 74 65 72 20 74 6f 20 61 20 76 69 72 74 75 61 6c  ter to a virtual
2de60 20 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20 61   table object, a
2de70 6e 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73  n sqlite3_vtab s
2de80 74 72 75 63 74 75 72 65 2e 0a 2a 2a 20 54 68 69  tructure..** Thi
2de90 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73  s opcode invokes
2dea0 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69   the correspondi
2deb0 6e 67 20 78 55 70 64 61 74 65 20 6d 65 74 68 6f  ng xUpdate metho
2dec0 64 2e 20 50 32 20 76 61 6c 75 65 73 0a 2a 2a 20  d. P2 values.** 
2ded0 61 72 65 20 63 6f 6e 74 69 67 75 6f 75 73 20 6d  are contiguous m
2dee0 65 6d 6f 72 79 20 63 65 6c 6c 73 20 73 74 61 72  emory cells star
2def0 74 69 6e 67 20 61 74 20 50 33 20 74 6f 20 70 61  ting at P3 to pa
2df00 73 73 20 74 6f 20 74 68 65 20 78 55 70 64 61 74  ss to the xUpdat
2df10 65 20 0a 2a 2a 20 69 6e 76 6f 63 61 74 69 6f 6e  e .** invocation
2df20 2e 20 54 68 65 20 76 61 6c 75 65 20 69 6e 20 72  . The value in r
2df30 65 67 69 73 74 65 72 20 28 50 33 2b 50 32 2d 31  egister (P3+P2-1
2df40 29 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f  ) corresponds to
2df50 20 74 68 65 20 0a 2a 2a 20 70 32 74 68 20 65 6c   the .** p2th el
2df60 65 6d 65 6e 74 20 6f 66 20 74 68 65 20 61 72 67  ement of the arg
2df70 76 20 61 72 72 61 79 20 70 61 73 73 65 64 20 74  v array passed t
2df80 6f 20 78 55 70 64 61 74 65 2e 0a 2a 2a 0a 2a 2a  o xUpdate..**.**
2df90 20 54 68 65 20 78 55 70 64 61 74 65 20 6d 65 74   The xUpdate met
2dfa0 68 6f 64 20 77 69 6c 6c 20 64 6f 20 61 20 44 45  hod will do a DE
2dfb0 4c 45 54 45 20 6f 72 20 61 6e 20 49 4e 53 45 52  LETE or an INSER
2dfc0 54 20 6f 72 20 62 6f 74 68 2e 0a 2a 2a 20 54 68  T or both..** Th
2dfd0 65 20 61 72 67 76 5b 30 5d 20 65 6c 65 6d 65 6e  e argv[0] elemen
2dfe0 74 20 28 77 68 69 63 68 20 63 6f 72 72 65 73 70  t (which corresp
2dff0 6f 6e 64 73 20 74 6f 20 6d 65 6d 6f 72 79 20 63  onds to memory c
2e000 65 6c 6c 20 50 33 29 0a 2a 2a 20 69 73 20 74 68  ell P3).** is th
2e010 65 20 72 6f 77 69 64 20 6f 66 20 61 20 72 6f 77  e rowid of a row
2e020 20 74 6f 20 64 65 6c 65 74 65 2e 20 20 49 66 20   to delete.  If 
2e030 61 72 67 76 5b 30 5d 20 69 73 20 4e 55 4c 4c 20  argv[0] is NULL 
2e040 74 68 65 6e 20 6e 6f 20 0a 2a 2a 20 64 65 6c 65  then no .** dele
2e050 74 69 6f 6e 20 6f 63 63 75 72 73 2e 20 20 54 68  tion occurs.  Th
2e060 65 20 61 72 67 76 5b 31 5d 20 65 6c 65 6d 65 6e  e argv[1] elemen
2e070 74 20 69 73 20 74 68 65 20 72 6f 77 69 64 20 6f  t is the rowid o
2e080 66 20 74 68 65 20 6e 65 77 20 0a 2a 2a 20 72 6f  f the new .** ro
2e090 77 2e 20 20 54 68 69 73 20 63 61 6e 20 62 65 20  w.  This can be 
2e0a0 4e 55 4c 4c 20 74 6f 20 68 61 76 65 20 74 68 65  NULL to have the
2e0b0 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 73   virtual table s
2e0c0 65 6c 65 63 74 20 74 68 65 20 6e 65 77 20 0a 2a  elect the new .*
2e0d0 2a 20 72 6f 77 69 64 20 66 6f 72 20 69 74 73 65  * rowid for itse
2e0e0 6c 66 2e 20 20 54 68 65 20 73 75 62 73 65 71 75  lf.  The subsequ
2e0f0 65 6e 74 20 65 6c 65 6d 65 6e 74 73 20 69 6e 20  ent elements in 
2e100 74 68 65 20 61 72 72 61 79 20 61 72 65 20 0a 2a  the array are .*
2e110 2a 20 74 68 65 20 76 61 6c 75 65 73 20 6f 66 20  * the values of 
2e120 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 6e  columns in the n
2e130 65 77 20 72 6f 77 2e 0a 2a 2a 0a 2a 2a 20 49 66  ew row..**.** If
2e140 20 50 32 3d 3d 31 20 74 68 65 6e 20 6e 6f 20 69   P2==1 then no i
2e150 6e 73 65 72 74 20 69 73 20 70 65 72 66 6f 72 6d  nsert is perform
2e160 65 64 2e 20 20 61 72 67 76 5b 30 5d 20 69 73 20  ed.  argv[0] is 
2e170 74 68 65 20 72 6f 77 69 64 20 6f 66 0a 2a 2a 20  the rowid of.** 
2e180 61 20 72 6f 77 20 74 6f 20 64 65 6c 65 74 65 2e  a row to delete.
2e190 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 62  .**.** P1 is a b
2e1a0 6f 6f 6c 65 61 6e 20 66 6c 61 67 2e 20 49 66 20  oolean flag. If 
2e1b0 69 74 20 69 73 20 73 65 74 20 74 6f 20 74 72 75  it is set to tru
2e1c0 65 20 61 6e 64 20 74 68 65 20 78 55 70 64 61 74  e and the xUpdat
2e1d0 65 20 63 61 6c 6c 0a 2a 2a 20 69 73 20 73 75 63  e call.** is suc
2e1e0 63 65 73 73 66 75 6c 2c 20 74 68 65 6e 20 74 68  cessful, then th
2e1f0 65 20 76 61 6c 75 65 20 72 65 74 75 72 6e 65 64  e value returned
2e200 20 62 79 20 73 71 6c 69 74 65 33 5f 6c 61 73 74   by sqlite3_last
2e210 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 29 20  _insert_rowid() 
2e220 0a 2a 2a 20 69 73 20 73 65 74 20 74 6f 20 74 68  .** is set to th
2e230 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 72  e value of the r
2e240 6f 77 69 64 20 66 6f 72 20 74 68 65 20 72 6f 77  owid for the row
2e250 20 6a 75 73 74 20 69 6e 73 65 72 74 65 64 2e 0a   just inserted..
2e260 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 55 70 64 61  */.case OP_VUpda
2e270 74 65 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  te: {.  sqlite3_
2e280 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 73  vtab *pVtab;.  s
2e290 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70  qlite3_module *p
2e2a0 4d 6f 64 75 6c 65 3b 0a 20 20 69 6e 74 20 6e 41  Module;.  int nA
2e2b0 72 67 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 73  rg;.  int i;.  s
2e2c0 71 6c 69 74 65 5f 69 6e 74 36 34 20 72 6f 77 69  qlite_int64 rowi
2e2d0 64 3b 0a 20 20 4d 65 6d 20 2a 2a 61 70 41 72 67  d;.  Mem **apArg
2e2e0 3b 0a 20 20 4d 65 6d 20 2a 70 58 3b 0a 0a 20 20  ;.  Mem *pX;..  
2e2f0 70 56 74 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e  pVtab = pOp->p4.
2e300 70 56 74 61 62 2d 3e 70 56 74 61 62 3b 0a 20 20  pVtab->pVtab;.  
2e310 70 4d 6f 64 75 6c 65 20 3d 20 28 73 71 6c 69 74  pModule = (sqlit
2e320 65 33 5f 6d 6f 64 75 6c 65 20 2a 29 70 56 74 61  e3_module *)pVta
2e330 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 6e 41  b->pModule;.  nA
2e340 72 67 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  rg = pOp->p2;.  
2e350 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
2e360 79 70 65 3d 3d 50 34 5f 56 54 41 42 20 29 3b 0a  ype==P4_VTAB );.
2e370 20 20 69 66 28 20 41 4c 57 41 59 53 28 70 4d 6f    if( ALWAYS(pMo
2e380 64 75 6c 65 2d 3e 78 55 70 64 61 74 65 29 20 29  dule->xUpdate) )
2e390 7b 0a 20 20 20 20 61 70 41 72 67 20 3d 20 70 2d  {.    apArg = p-
2e3a0 3e 61 70 41 72 67 3b 0a 20 20 20 20 70 58 20 3d  >apArg;.    pX =
2e3b0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
2e3c0 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  .    for(i=0; i<
2e3d0 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  nArg; i++){.    
2e3e0 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
2e3f0 61 6c 69 64 28 70 58 29 20 29 3b 0a 20 20 20 20  alid(pX) );.    
2e400 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
2e410 67 65 28 70 2c 20 70 58 29 3b 0a 20 20 20 20 20  ge(p, pX);.     
2e420 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
2e430 74 6f 72 65 54 79 70 65 28 70 58 29 3b 0a 20 20  toreType(pX);.  
2e440 20 20 20 20 61 70 41 72 67 5b 69 5d 20 3d 20 70      apArg[i] = p
2e450 58 3b 0a 20 20 20 20 20 20 70 58 2b 2b 3b 0a 20  X;.      pX++;. 
2e460 20 20 20 7d 0a 20 20 20 20 72 63 20 3d 20 70 4d     }.    rc = pM
2e470 6f 64 75 6c 65 2d 3e 78 55 70 64 61 74 65 28 70  odule->xUpdate(p
2e480 56 74 61 62 2c 20 6e 41 72 67 2c 20 61 70 41 72  Vtab, nArg, apAr
2e490 67 2c 20 26 72 6f 77 69 64 29 3b 0a 20 20 20 20  g, &rowid);.    
2e4a0 69 6d 70 6f 72 74 56 74 61 62 45 72 72 4d 73 67  importVtabErrMsg
2e4b0 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 20 20  (p, pVtab);.    
2e4c0 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
2e4d0 4b 20 26 26 20 70 4f 70 2d 3e 70 31 20 29 7b 0a  K && pOp->p1 ){.
2e4e0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6e 41        assert( nA
2e4f0 72 67 3e 31 20 26 26 20 61 70 41 72 67 5b 30 5d  rg>1 && apArg[0]
2e500 20 26 26 20 28 61 70 41 72 67 5b 30 5d 2d 3e 66   && (apArg[0]->f
2e510 6c 61 67 73 26 4d 45 4d 5f 4e 75 6c 6c 29 20 29  lags&MEM_Null) )
2e520 3b 0a 20 20 20 20 20 20 64 62 2d 3e 6c 61 73 74  ;.      db->last
2e530 52 6f 77 69 64 20 3d 20 72 6f 77 69 64 3b 0a 20  Rowid = rowid;. 
2e540 20 20 20 7d 0a 20 20 20 20 70 2d 3e 6e 43 68 61     }.    p->nCha
2e550 6e 67 65 2b 2b 3b 0a 20 20 7d 0a 20 20 62 72 65  nge++;.  }.  bre
2e560 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ak;.}.#endif /* 
2e570 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
2e580 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66  UALTABLE */..#if
2e590 6e 64 65 66 20 20 53 51 4c 49 54 45 5f 4f 4d 49  ndef  SQLITE_OMI
2e5a0 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53 0a  T_PAGER_PRAGMAS.
2e5b0 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 61 67 65 63  /* Opcode: Pagec
2e5c0 6f 75 6e 74 20 50 31 20 50 32 20 2a 20 2a 20 2a  ount P1 P2 * * *
2e5d0 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 74 68 65  .**.** Write the
2e5e0 20 63 75 72 72 65 6e 74 20 6e 75 6d 62 65 72 20   current number 
2e5f0 6f 66 20 70 61 67 65 73 20 69 6e 20 64 61 74 61  of pages in data
2e600 62 61 73 65 20 50 31 20 74 6f 20 6d 65 6d 6f 72  base P1 to memor
2e610 79 20 63 65 6c 6c 20 50 32 2e 0a 2a 2f 0a 63 61  y cell P2..*/.ca
2e620 73 65 20 4f 50 5f 50 61 67 65 63 6f 75 6e 74 3a  se OP_Pagecount:
2e630 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
2e640 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65   out2-prerelease
2e650 20 2a 2f 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20   */.  pOut->u.i 
2e660 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61  = sqlite3BtreeLa
2e670 73 74 50 61 67 65 28 64 62 2d 3e 61 44 62 5b 70  stPage(db->aDb[p
2e680 4f 70 2d 3e 70 31 5d 2e 70 42 74 29 3b 0a 20 20  Op->p1].pBt);.  
2e690 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a  break;.}.#endif.
2e6a0 0a 0a 23 69 66 6e 64 65 66 20 20 53 51 4c 49 54  ..#ifndef  SQLIT
2e6b0 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52 41  E_OMIT_PAGER_PRA
2e6c0 47 4d 41 53 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  GMAS./* Opcode: 
2e6d0 4d 61 78 50 67 63 6e 74 20 50 31 20 50 32 20 50  MaxPgcnt P1 P2 P
2e6e0 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 72 79 20  3 * *.**.** Try 
2e6f0 74 6f 20 73 65 74 20 74 68 65 20 6d 61 78 69 6d  to set the maxim
2e700 75 6d 20 70 61 67 65 20 63 6f 75 6e 74 20 66 6f  um page count fo
2e710 72 20 64 61 74 61 62 61 73 65 20 50 31 20 74 6f  r database P1 to
2e720 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 50 33   the value in P3
2e730 2e 0a 2a 2a 20 44 6f 20 6e 6f 74 20 6c 65 74 20  ..** Do not let 
2e740 74 68 65 20 6d 61 78 69 6d 75 6d 20 70 61 67 65  the maximum page
2e750 20 63 6f 75 6e 74 20 66 61 6c 6c 20 62 65 6c 6f   count fall belo
2e760 77 20 74 68 65 20 63 75 72 72 65 6e 74 20 70 61  w the current pa
2e770 67 65 20 63 6f 75 6e 74 20 61 6e 64 0a 2a 2a 20  ge count and.** 
2e780 64 6f 20 6e 6f 74 20 63 68 61 6e 67 65 20 74 68  do not change th
2e790 65 20 6d 61 78 69 6d 75 6d 20 70 61 67 65 20 63  e maximum page c
2e7a0 6f 75 6e 74 20 76 61 6c 75 65 20 69 66 20 50 33  ount value if P3
2e7b0 3d 3d 30 2e 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65  ==0..**.** Store
2e7c0 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 70 61 67   the maximum pag
2e7d0 65 20 63 6f 75 6e 74 20 61 66 74 65 72 20 74 68  e count after th
2e7e0 65 20 63 68 61 6e 67 65 20 69 6e 20 72 65 67 69  e change in regi
2e7f0 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65  ster P2..*/.case
2e800 20 4f 50 5f 4d 61 78 50 67 63 6e 74 3a 20 7b 20   OP_MaxPgcnt: { 
2e810 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
2e820 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f  t2-prerelease */
2e830 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20  .  unsigned int 
2e840 6e 65 77 4d 61 78 3b 0a 20 20 42 74 72 65 65 20  newMax;.  Btree 
2e850 2a 70 42 74 3b 0a 0a 20 20 70 42 74 20 3d 20 64  *pBt;..  pBt = d
2e860 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e  b->aDb[pOp->p1].
2e870 70 42 74 3b 0a 20 20 6e 65 77 4d 61 78 20 3d 20  pBt;.  newMax = 
2e880 30 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 33  0;.  if( pOp->p3
2e890 20 29 7b 0a 20 20 20 20 6e 65 77 4d 61 78 20 3d   ){.    newMax =
2e8a0 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73   sqlite3BtreeLas
2e8b0 74 50 61 67 65 28 70 42 74 29 3b 0a 20 20 20 20  tPage(pBt);.    
2e8c0 69 66 28 20 6e 65 77 4d 61 78 20 3c 20 28 75 6e  if( newMax < (un
2e8d0 73 69 67 6e 65 64 29 70 4f 70 2d 3e 70 33 20 29  signed)pOp->p3 )
2e8e0 20 6e 65 77 4d 61 78 20 3d 20 28 75 6e 73 69 67   newMax = (unsig
2e8f0 6e 65 64 29 70 4f 70 2d 3e 70 33 3b 0a 20 20 7d  ned)pOp->p3;.  }
2e900 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 73  .  pOut->u.i = s
2e910 71 6c 69 74 65 33 42 74 72 65 65 4d 61 78 50 61  qlite3BtreeMaxPa
2e920 67 65 43 6f 75 6e 74 28 70 42 74 2c 20 6e 65 77  geCount(pBt, new
2e930 4d 61 78 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Max);.  break;.}
2e940 0a 23 65 6e 64 69 66 0a 0a 0a 23 69 66 6e 64 65  .#endif...#ifnde
2e950 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52  f SQLITE_OMIT_TR
2e960 41 43 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54  ACE./* Opcode: T
2e970 72 61 63 65 20 2a 20 2a 20 2a 20 50 34 20 2a 0a  race * * * P4 *.
2e980 2a 2a 0a 2a 2a 20 49 66 20 74 72 61 63 69 6e 67  **.** If tracing
2e990 20 69 73 20 65 6e 61 62 6c 65 64 20 28 62 79 20   is enabled (by 
2e9a0 74 68 65 20 73 71 6c 69 74 65 33 5f 74 72 61 63  the sqlite3_trac
2e9b0 65 28 29 29 20 69 6e 74 65 72 66 61 63 65 2c 20  e()) interface, 
2e9c0 74 68 65 6e 0a 2a 2a 20 74 68 65 20 55 54 46 2d  then.** the UTF-
2e9d0 38 20 73 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e  8 string contain
2e9e0 65 64 20 69 6e 20 50 34 20 69 73 20 65 6d 69 74  ed in P4 is emit
2e9f0 74 65 64 20 6f 6e 20 74 68 65 20 74 72 61 63 65  ted on the trace
2ea00 20 63 61 6c 6c 62 61 63 6b 2e 0a 2a 2f 0a 63 61   callback..*/.ca
2ea10 73 65 20 4f 50 5f 54 72 61 63 65 3a 20 7b 0a 20  se OP_Trace: {. 
2ea20 20 63 68 61 72 20 2a 7a 54 72 61 63 65 3b 0a 0a   char *zTrace;..
2ea30 20 20 7a 54 72 61 63 65 20 3d 20 28 70 4f 70 2d    zTrace = (pOp-
2ea40 3e 70 34 2e 7a 20 3f 20 70 4f 70 2d 3e 70 34 2e  >p4.z ? pOp->p4.
2ea50 7a 20 3a 20 70 2d 3e 7a 53 71 6c 29 3b 0a 20 20  z : p->zSql);.  
2ea60 69 66 28 20 7a 54 72 61 63 65 20 29 7b 0a 20 20  if( zTrace ){.  
2ea70 20 20 69 66 28 20 64 62 2d 3e 78 54 72 61 63 65    if( db->xTrace
2ea80 20 29 7b 0a 20 20 20 20 20 20 63 68 61 72 20 2a   ){.      char *
2ea90 7a 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 45  z = sqlite3VdbeE
2eaa0 78 70 61 6e 64 53 71 6c 28 70 2c 20 7a 54 72 61  xpandSql(p, zTra
2eab0 63 65 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 78  ce);.      db->x
2eac0 54 72 61 63 65 28 64 62 2d 3e 70 54 72 61 63 65  Trace(db->pTrace
2ead0 41 72 67 2c 20 7a 29 3b 0a 20 20 20 20 20 20 73  Arg, z);.      s
2eae0 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c  qlite3DbFree(db,
2eaf0 20 7a 29 3b 0a 20 20 20 20 7d 0a 23 69 66 64 65   z);.    }.#ifde
2eb00 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
2eb10 20 20 20 69 66 28 20 28 64 62 2d 3e 66 6c 61 67     if( (db->flag
2eb20 73 20 26 20 53 51 4c 49 54 45 5f 53 71 6c 54 72  s & SQLITE_SqlTr
2eb30 61 63 65 29 21 3d 30 20 29 7b 0a 20 20 20 20 20  ace)!=0 ){.     
2eb40 20 73 71 6c 69 74 65 33 44 65 62 75 67 50 72 69   sqlite3DebugPri
2eb50 6e 74 66 28 22 53 51 4c 2d 74 72 61 63 65 3a 20  ntf("SQL-trace: 
2eb60 25 73 5c 6e 22 2c 20 7a 54 72 61 63 65 29 3b 0a  %s\n", zTrace);.
2eb70 20 20 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20      }.#endif /* 
2eb80 53 51 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a  SQLITE_DEBUG */.
2eb90 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23    }.  break;.}.#
2eba0 65 6e 64 69 66 0a 0a 0a 2f 2a 20 4f 70 63 6f 64  endif.../* Opcod
2ebb0 65 3a 20 4e 6f 6f 70 20 2a 20 2a 20 2a 20 2a 20  e: Noop * * * * 
2ebc0 2a 0a 2a 2a 0a 2a 2a 20 44 6f 20 6e 6f 74 68 69  *.**.** Do nothi
2ebd0 6e 67 2e 20 20 54 68 69 73 20 69 6e 73 74 72 75  ng.  This instru
2ebe0 63 74 69 6f 6e 20 69 73 20 6f 66 74 65 6e 20 75  ction is often u
2ebf0 73 65 66 75 6c 20 61 73 20 61 20 6a 75 6d 70 0a  seful as a jump.
2ec00 2a 2a 20 64 65 73 74 69 6e 61 74 69 6f 6e 2e 0a  ** destination..
2ec10 2a 2f 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6d 61 67  */./*.** The mag
2ec20 69 63 20 45 78 70 6c 61 69 6e 20 6f 70 63 6f 64  ic Explain opcod
2ec30 65 20 61 72 65 20 6f 6e 6c 79 20 69 6e 73 65 72  e are only inser
2ec40 74 65 64 20 77 68 65 6e 20 65 78 70 6c 61 69 6e  ted when explain
2ec50 3d 3d 32 20 28 77 68 69 63 68 0a 2a 2a 20 69 73  ==2 (which.** is
2ec60 20 74 6f 20 73 61 79 20 77 68 65 6e 20 74 68 65   to say when the
2ec70 20 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50   EXPLAIN QUERY P
2ec80 4c 41 4e 20 73 79 6e 74 61 78 20 69 73 20 75 73  LAN syntax is us
2ec90 65 64 2e 29 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ed.).** This opc
2eca0 6f 64 65 20 72 65 63 6f 72 64 73 20 69 6e 66 6f  ode records info
2ecb0 72 6d 61 74 69 6f 6e 20 66 72 6f 6d 20 74 68 65  rmation from the
2ecc0 20 6f 70 74 69 6d 69 7a 65 72 2e 20 20 49 74 20   optimizer.  It 
2ecd0 69 73 20 74 68 65 0a 2a 2a 20 74 68 65 20 73 61  is the.** the sa
2ece0 6d 65 20 61 73 20 61 20 6e 6f 2d 6f 70 2e 20 20  me as a no-op.  
2ecf0 54 68 69 73 20 6f 70 63 6f 64 65 73 6e 65 76 65  This opcodesneve
2ed00 72 20 61 70 70 65 61 72 73 20 69 6e 20 61 20 72  r appears in a r
2ed10 65 61 6c 20 56 4d 20 70 72 6f 67 72 61 6d 2e 0a  eal VM program..
2ed20 2a 2f 0a 64 65 66 61 75 6c 74 3a 20 7b 20 20 20  */.default: {   
2ed30 20 20 20 20 20 20 20 2f 2a 20 54 68 69 73 20 69         /* This i
2ed40 73 20 72 65 61 6c 6c 79 20 4f 50 5f 4e 6f 6f 70  s really OP_Noop
2ed50 20 61 6e 64 20 4f 50 5f 45 78 70 6c 61 69 6e 20   and OP_Explain 
2ed60 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  */.  assert( pOp
2ed70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 6f 6f  ->opcode==OP_Noo
2ed80 70 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  p || pOp->opcode
2ed90 3d 3d 4f 50 5f 45 78 70 6c 61 69 6e 20 29 3b 0a  ==OP_Explain );.
2eda0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 2a 2a    break;.}../***
2edb0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2edc0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2edd0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2ede0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2edf0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68  **********.** Th
2ee00 65 20 63 61 73 65 73 20 6f 66 20 74 68 65 20 73  e cases of the s
2ee10 77 69 74 63 68 20 73 74 61 74 65 6d 65 6e 74 20  witch statement 
2ee20 61 62 6f 76 65 20 74 68 69 73 20 6c 69 6e 65 20  above this line 
2ee30 73 68 6f 75 6c 64 20 61 6c 6c 20 62 65 20 69 6e  should all be in
2ee40 64 65 6e 74 65 64 0a 2a 2a 20 62 79 20 36 20 73  dented.** by 6 s
2ee50 70 61 63 65 73 2e 20 20 42 75 74 20 74 68 65 20  paces.  But the 
2ee60 6c 65 66 74 2d 6d 6f 73 74 20 36 20 73 70 61 63  left-most 6 spac
2ee70 65 73 20 68 61 76 65 20 62 65 65 6e 20 72 65 6d  es have been rem
2ee80 6f 76 65 64 20 74 6f 20 69 6d 70 72 6f 76 65 20  oved to improve 
2ee90 74 68 65 0a 2a 2a 20 72 65 61 64 61 62 69 6c 69  the.** readabili
2eea0 74 79 2e 20 20 46 72 6f 6d 20 74 68 69 73 20 70  ty.  From this p
2eeb0 6f 69 6e 74 20 6f 6e 20 64 6f 77 6e 2c 20 74 68  oint on down, th
2eec0 65 20 6e 6f 72 6d 61 6c 20 69 6e 64 65 6e 74 61  e normal indenta
2eed0 74 69 6f 6e 20 72 75 6c 65 73 20 61 72 65 0a 2a  tion rules are.*
2eee0 2a 20 72 65 73 74 6f 72 65 64 2e 0a 2a 2a 2a 2a  * restored..****
2eef0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2ef00 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2ef10 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2ef20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2ef30 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 20 20 20 20 7d  *********/.    }
2ef40 0a 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50 52  ..#ifdef VDBE_PR
2ef50 4f 46 49 4c 45 0a 20 20 20 20 7b 0a 20 20 20 20  OFILE.    {.    
2ef60 20 20 75 36 34 20 65 6c 61 70 73 65 64 20 3d 20    u64 elapsed = 
2ef70 73 71 6c 69 74 65 33 48 77 74 69 6d 65 28 29 20  sqlite3Hwtime() 
2ef80 2d 20 73 74 61 72 74 3b 0a 20 20 20 20 20 20 70  - start;.      p
2ef90 4f 70 2d 3e 63 79 63 6c 65 73 20 2b 3d 20 65 6c  Op->cycles += el
2efa0 61 70 73 65 64 3b 0a 20 20 20 20 20 20 70 4f 70  apsed;.      pOp
2efb0 2d 3e 63 6e 74 2b 2b 3b 0a 23 69 66 20 30 0a 20  ->cnt++;.#if 0. 
2efc0 20 20 20 20 20 20 20 66 70 72 69 6e 74 66 28 73         fprintf(s
2efd0 74 64 6f 75 74 2c 20 22 25 31 30 6c 6c 75 20 22  tdout, "%10llu "
2efe0 2c 20 65 6c 61 70 73 65 64 29 3b 0a 20 20 20 20  , elapsed);.    
2eff0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 50      sqlite3VdbeP
2f000 72 69 6e 74 4f 70 28 73 74 64 6f 75 74 2c 20 6f  rintOp(stdout, o
2f010 72 69 67 50 63 2c 20 26 61 4f 70 5b 6f 72 69 67  rigPc, &aOp[orig
2f020 50 63 5d 29 3b 0a 23 65 6e 64 69 66 0a 20 20 20  Pc]);.#endif.   
2f030 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 2f   }.#endif..    /
2f040 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
2f050 63 6f 64 65 20 61 64 64 73 20 6e 6f 74 68 69 6e  code adds nothin
2f060 67 20 74 6f 20 74 68 65 20 61 63 74 75 61 6c 20  g to the actual 
2f070 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 0a 20 20  functionality.  
2f080 20 20 2a 2a 20 6f 66 20 74 68 65 20 70 72 6f 67    ** of the prog
2f090 72 61 6d 2e 20 20 49 74 20 69 73 20 6f 6e 6c 79  ram.  It is only
2f0a0 20 68 65 72 65 20 66 6f 72 20 74 65 73 74 69 6e   here for testin
2f0b0 67 20 61 6e 64 20 64 65 62 75 67 67 69 6e 67 2e  g and debugging.
2f0c0 0a 20 20 20 20 2a 2a 20 4f 6e 20 74 68 65 20 6f  .    ** On the o
2f0d0 74 68 65 72 20 68 61 6e 64 2c 20 69 74 20 64 6f  ther hand, it do
2f0e0 65 73 20 62 75 72 6e 20 43 50 55 20 63 79 63 6c  es burn CPU cycl
2f0f0 65 73 20 65 76 65 72 79 20 74 69 6d 65 20 74 68  es every time th
2f100 72 6f 75 67 68 0a 20 20 20 20 2a 2a 20 74 68 65  rough.    ** the
2f110 20 65 76 61 6c 75 61 74 6f 72 20 6c 6f 6f 70 2e   evaluator loop.
2f120 20 20 53 6f 20 77 65 20 63 61 6e 20 6c 65 61 76    So we can leav
2f130 65 20 69 74 20 6f 75 74 20 77 68 65 6e 20 4e 44  e it out when ND
2f140 45 42 55 47 20 69 73 20 64 65 66 69 6e 65 64 2e  EBUG is defined.
2f150 0a 20 20 20 20 2a 2f 0a 23 69 66 6e 64 65 66 20  .    */.#ifndef 
2f160 4e 44 45 42 55 47 0a 20 20 20 20 61 73 73 65 72  NDEBUG.    asser
2f170 74 28 20 70 63 3e 3d 2d 31 20 26 26 20 70 63 3c  t( pc>=-1 && pc<
2f180 70 2d 3e 6e 4f 70 20 29 3b 0a 0a 23 69 66 64 65  p->nOp );..#ifde
2f190 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
2f1a0 20 20 20 69 66 28 20 70 2d 3e 74 72 61 63 65 20     if( p->trace 
2f1b0 29 7b 0a 20 20 20 20 20 20 69 66 28 20 72 63 21  ){.      if( rc!
2f1c0 3d 30 20 29 20 66 70 72 69 6e 74 66 28 70 2d 3e  =0 ) fprintf(p->
2f1d0 74 72 61 63 65 2c 22 72 63 3d 25 64 5c 6e 22 2c  trace,"rc=%d\n",
2f1e0 72 63 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70  rc);.      if( p
2f1f0 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 28 4f  Op->opflags & (O
2f200 50 46 4c 47 5f 4f 55 54 32 5f 50 52 45 52 45 4c  PFLG_OUT2_PREREL
2f210 45 41 53 45 7c 4f 50 46 4c 47 5f 4f 55 54 32 29  EASE|OPFLG_OUT2)
2f220 20 29 7b 0a 20 20 20 20 20 20 20 20 72 65 67 69   ){.        regi
2f230 73 74 65 72 54 72 61 63 65 28 70 2d 3e 74 72 61  sterTrace(p->tra
2f240 63 65 2c 20 70 4f 70 2d 3e 70 32 2c 20 26 61 4d  ce, pOp->p2, &aM
2f250 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20  em[pOp->p2]);.  
2f260 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20      }.      if( 
2f270 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f  pOp->opflags & O
2f280 50 46 4c 47 5f 4f 55 54 33 20 29 7b 0a 20 20 20  PFLG_OUT3 ){.   
2f290 20 20 20 20 20 72 65 67 69 73 74 65 72 54 72 61       registerTra
2f2a0 63 65 28 70 2d 3e 74 72 61 63 65 2c 20 70 4f 70  ce(p->trace, pOp
2f2b0 2d 3e 70 33 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d  ->p3, &aMem[pOp-
2f2c0 3e 70 33 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20  >p3]);.      }. 
2f2d0 20 20 20 7d 0a 23 65 6e 64 69 66 20 20 2f 2a 20     }.#endif  /* 
2f2e0 53 51 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a  SQLITE_DEBUG */.
2f2f0 23 65 6e 64 69 66 20 20 2f 2a 20 4e 44 45 42 55  #endif  /* NDEBU
2f300 47 20 2a 2f 0a 20 20 7d 20 20 2f 2a 20 54 68 65  G */.  }  /* The
2f310 20 65 6e 64 20 6f 66 20 74 68 65 20 66 6f 72 28   end of the for(
2f320 3b 3b 29 20 6c 6f 6f 70 20 74 68 65 20 6c 6f 6f  ;;) loop the loo
2f330 70 73 20 74 68 72 6f 75 67 68 20 6f 70 63 6f 64  ps through opcod
2f340 65 73 20 2a 2f 0a 0a 20 20 2f 2a 20 49 66 20 77  es */..  /* If w
2f350 65 20 72 65 61 63 68 20 74 68 69 73 20 70 6f 69  e reach this poi
2f360 6e 74 2c 20 69 74 20 6d 65 61 6e 73 20 74 68 61  nt, it means tha
2f370 74 20 65 78 65 63 75 74 69 6f 6e 20 69 73 20 66  t execution is f
2f380 69 6e 69 73 68 65 64 20 77 69 74 68 0a 20 20 2a  inished with.  *
2f390 2a 20 61 6e 20 65 72 72 6f 72 20 6f 66 20 73 6f  * an error of so
2f3a0 6d 65 20 6b 69 6e 64 2e 0a 20 20 2a 2f 0a 76 64  me kind..  */.vd
2f3b0 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3a 0a 20  be_error_halt:. 
2f3c0 20 61 73 73 65 72 74 28 20 72 63 20 29 3b 0a 20   assert( rc );. 
2f3d0 20 70 2d 3e 72 63 20 3d 20 72 63 3b 0a 20 20 74   p->rc = rc;.  t
2f3e0 65 73 74 63 61 73 65 28 20 73 71 6c 69 74 65 33  estcase( sqlite3
2f3f0 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 78 4c 6f  GlobalConfig.xLo
2f400 67 21 3d 30 20 29 3b 0a 20 20 73 71 6c 69 74 65  g!=0 );.  sqlite
2f410 33 5f 6c 6f 67 28 72 63 2c 20 22 73 74 61 74 65  3_log(rc, "state
2f420 6d 65 6e 74 20 61 62 6f 72 74 73 20 61 74 20 25  ment aborts at %
2f430 64 3a 20 5b 25 73 5d 20 25 73 22 2c 20 0a 20 20  d: [%s] %s", .  
2f440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f450 20 70 63 2c 20 70 2d 3e 7a 53 71 6c 2c 20 70 2d   pc, p->zSql, p-
2f460 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 73 71 6c  >zErrMsg);.  sql
2f470 69 74 65 33 56 64 62 65 48 61 6c 74 28 70 29 3b  ite3VdbeHalt(p);
2f480 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54  .  if( rc==SQLIT
2f490 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d 20 29 20  E_IOERR_NOMEM ) 
2f4a0 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64  db->mallocFailed
2f4b0 20 3d 20 31 3b 0a 20 20 72 63 20 3d 20 53 51 4c   = 1;.  rc = SQL
2f4c0 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28  ITE_ERROR;.  if(
2f4d0 20 72 65 73 65 74 53 63 68 65 6d 61 4f 6e 46 61   resetSchemaOnFa
2f4e0 75 6c 74 20 29 20 73 71 6c 69 74 65 33 52 65 73  ult ) sqlite3Res
2f4f0 65 74 49 6e 74 65 72 6e 61 6c 53 63 68 65 6d 61  etInternalSchema
2f500 28 64 62 2c 20 30 29 3b 0a 0a 20 20 2f 2a 20 54  (db, 0);..  /* T
2f510 68 69 73 20 69 73 20 74 68 65 20 6f 6e 6c 79 20  his is the only 
2f520 77 61 79 20 6f 75 74 20 6f 66 20 74 68 69 73 20  way out of this 
2f530 70 72 6f 63 65 64 75 72 65 2e 20 20 57 65 20 68  procedure.  We h
2f540 61 76 65 20 74 6f 0a 20 20 2a 2a 20 72 65 6c 65  ave to.  ** rele
2f550 61 73 65 20 74 68 65 20 6d 75 74 65 78 65 73 20  ase the mutexes 
2f560 6f 6e 20 62 74 72 65 65 73 20 74 68 61 74 20 77  on btrees that w
2f570 65 72 65 20 61 63 71 75 69 72 65 64 20 61 74 20  ere acquired at 
2f580 74 68 65 0a 20 20 2a 2a 20 74 6f 70 2e 20 2a 2f  the.  ** top. */
2f590 0a 76 64 62 65 5f 72 65 74 75 72 6e 3a 0a 20 20  .vdbe_return:.  
2f5a0 73 71 6c 69 74 65 33 42 74 72 65 65 4d 75 74 65  sqlite3BtreeMute
2f5b0 78 41 72 72 61 79 4c 65 61 76 65 28 26 70 2d 3e  xArrayLeave(&p->
2f5c0 61 4d 75 74 65 78 29 3b 0a 20 20 72 65 74 75 72  aMutex);.  retur
2f5d0 6e 20 72 63 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70  n rc;..  /* Jump
2f5e0 20 74 6f 20 68 65 72 65 20 69 66 20 61 20 73 74   to here if a st
2f5f0 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6c 61 72  ring or blob lar
2f600 67 65 72 20 74 68 61 6e 20 53 51 4c 49 54 45 5f  ger than SQLITE_
2f610 4d 41 58 5f 4c 45 4e 47 54 48 0a 20 20 2a 2a 20  MAX_LENGTH.  ** 
2f620 69 73 20 65 6e 63 6f 75 6e 74 65 72 65 64 2e 0a  is encountered..
2f630 20 20 2a 2f 0a 74 6f 6f 5f 62 69 67 3a 0a 20 20    */.too_big:.  
2f640 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67  sqlite3SetString
2f650 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62  (&p->zErrMsg, db
2f660 2c 20 22 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f  , "string or blo
2f670 62 20 74 6f 6f 20 62 69 67 22 29 3b 0a 20 20 72  b too big");.  r
2f680 63 20 3d 20 53 51 4c 49 54 45 5f 54 4f 4f 42 49  c = SQLITE_TOOBI
2f690 47 3b 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 65  G;.  goto vdbe_e
2f6a0 72 72 6f 72 5f 68 61 6c 74 3b 0a 0a 20 20 2f 2a  rror_halt;..  /*
2f6b0 20 4a 75 6d 70 20 74 6f 20 68 65 72 65 20 69 66   Jump to here if
2f6c0 20 61 20 6d 61 6c 6c 6f 63 28 29 20 66 61 69 6c   a malloc() fail
2f6d0 73 2e 0a 20 20 2a 2f 0a 6e 6f 5f 6d 65 6d 3a 0a  s..  */.no_mem:.
2f6e0 20 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c    db->mallocFail
2f6f0 65 64 20 3d 20 31 3b 0a 20 20 73 71 6c 69 74 65  ed = 1;.  sqlite
2f700 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a  3SetString(&p->z
2f710 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 6f 75 74  ErrMsg, db, "out
2f720 20 6f 66 20 6d 65 6d 6f 72 79 22 29 3b 0a 20 20   of memory");.  
2f730 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45  rc = SQLITE_NOME
2f740 4d 3b 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 65  M;.  goto vdbe_e
2f750 72 72 6f 72 5f 68 61 6c 74 3b 0a 0a 20 20 2f 2a  rror_halt;..  /*
2f760 20 4a 75 6d 70 20 74 6f 20 68 65 72 65 20 66 6f   Jump to here fo
2f770 72 20 61 6e 79 20 6f 74 68 65 72 20 6b 69 6e 64  r any other kind
2f780 20 6f 66 20 66 61 74 61 6c 20 65 72 72 6f 72 2e   of fatal error.
2f790 20 20 54 68 65 20 22 72 63 22 20 76 61 72 69 61    The "rc" varia
2f7a0 62 6c 65 0a 20 20 2a 2a 20 73 68 6f 75 6c 64 20  ble.  ** should 
2f7b0 68 6f 6c 64 20 74 68 65 20 65 72 72 6f 72 20 6e  hold the error n
2f7c0 75 6d 62 65 72 2e 0a 20 20 2a 2f 0a 61 62 6f 72  umber..  */.abor
2f7d0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3a 0a  t_due_to_error:.
2f7e0 20 20 61 73 73 65 72 74 28 20 70 2d 3e 7a 45 72    assert( p->zEr
2f7f0 72 4d 73 67 3d 3d 30 20 29 3b 0a 20 20 69 66 28  rMsg==0 );.  if(
2f800 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65   db->mallocFaile
2f810 64 20 29 20 72 63 20 3d 20 53 51 4c 49 54 45 5f  d ) rc = SQLITE_
2f820 4e 4f 4d 45 4d 3b 0a 20 20 69 66 28 20 72 63 21  NOMEM;.  if( rc!
2f830 3d 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f  =SQLITE_IOERR_NO
2f840 4d 45 4d 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  MEM ){.    sqlit
2f850 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e  e3SetString(&p->
2f860 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73  zErrMsg, db, "%s
2f870 22 2c 20 73 71 6c 69 74 65 33 45 72 72 53 74 72  ", sqlite3ErrStr
2f880 28 72 63 29 29 3b 0a 20 20 7d 0a 20 20 67 6f 74  (rc));.  }.  got
2f890 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c  o vdbe_error_hal
2f8a0 74 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f  t;..  /* Jump to
2f8b0 20 68 65 72 65 20 69 66 20 74 68 65 20 73 71 6c   here if the sql
2f8c0 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 28 29  ite3_interrupt()
2f8d0 20 41 50 49 20 73 65 74 73 20 74 68 65 20 69 6e   API sets the in
2f8e0 74 65 72 72 75 70 74 0a 20 20 2a 2a 20 66 6c 61  terrupt.  ** fla
2f8f0 67 2e 0a 20 20 2a 2f 0a 61 62 6f 72 74 5f 64 75  g..  */.abort_du
2f900 65 5f 74 6f 5f 69 6e 74 65 72 72 75 70 74 3a 0a  e_to_interrupt:.
2f910 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 75 31    assert( db->u1
2f920 2e 69 73 49 6e 74 65 72 72 75 70 74 65 64 20 29  .isInterrupted )
2f930 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f  ;.  rc = SQLITE_
2f940 49 4e 54 45 52 52 55 50 54 3b 0a 20 20 70 2d 3e  INTERRUPT;.  p->
2f950 72 63 20 3d 20 72 63 3b 0a 20 20 73 71 6c 69 74  rc = rc;.  sqlit
2f960 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e  e3SetString(&p->
2f970 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73  zErrMsg, db, "%s
2f980 22 2c 20 73 71 6c 69 74 65 33 45 72 72 53 74 72  ", sqlite3ErrStr
2f990 28 72 63 29 29 3b 0a 20 20 67 6f 74 6f 20 76 64  (rc));.  goto vd
2f9a0 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 7d  be_error_halt;.}
2f9b0 0a                                               .