/ Hex Artifact Content
Login

Artifact 2ed980c8b2e560ab0e50bdcaa8f3333c4dd763ae:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f  ******.** The co
0180: 64 65 20 69 6e 20 74 68 69 73 20 66 69 6c 65 20  de in this file 
0190: 69 6d 70 6c 65 6d 65 6e 74 73 20 65 78 65 63 75  implements execu
01a0: 74 69 6f 6e 20 6d 65 74 68 6f 64 20 6f 66 20 74  tion method of t
01b0: 68 65 20 0a 2a 2a 20 56 69 72 74 75 61 6c 20 44  he .** Virtual D
01c0: 61 74 61 62 61 73 65 20 45 6e 67 69 6e 65 20 28  atabase Engine (
01d0: 56 44 42 45 29 2e 20 20 41 20 73 65 70 61 72 61  VDBE).  A separa
01e0: 74 65 20 66 69 6c 65 20 28 22 76 64 62 65 61 75  te file ("vdbeau
01f0: 78 2e 63 22 29 0a 2a 2a 20 68 61 6e 64 6c 65 73  x.c").** handles
0200: 20 68 6f 75 73 65 6b 65 65 70 69 6e 67 20 64 65   housekeeping de
0210: 74 61 69 6c 73 20 73 75 63 68 20 61 73 20 63 72  tails such as cr
0220: 65 61 74 69 6e 67 20 61 6e 64 20 64 65 6c 65 74  eating and delet
0230: 69 6e 67 0a 2a 2a 20 56 44 42 45 20 69 6e 73 74  ing.** VDBE inst
0240: 61 6e 63 65 73 2e 20 20 54 68 69 73 20 66 69 6c  ances.  This fil
0250: 65 20 69 73 20 73 6f 6c 65 6c 79 20 69 6e 74 65  e is solely inte
0260: 72 65 73 74 65 64 20 69 6e 20 65 78 65 63 75 74  rested in execut
0270: 69 6e 67 0a 2a 2a 20 74 68 65 20 56 44 42 45 20  ing.** the VDBE 
0280: 70 72 6f 67 72 61 6d 2e 0a 2a 2a 0a 2a 2a 20 49  program..**.** I
0290: 6e 20 74 68 65 20 65 78 74 65 72 6e 61 6c 20 69  n the external i
02a0: 6e 74 65 72 66 61 63 65 2c 20 61 6e 20 22 73 71  nterface, an "sq
02b0: 6c 69 74 65 33 5f 73 74 6d 74 2a 22 20 69 73 20  lite3_stmt*" is 
02c0: 61 6e 20 6f 70 61 71 75 65 20 70 6f 69 6e 74 65  an opaque pointe
02d0: 72 0a 2a 2a 20 74 6f 20 61 20 56 44 42 45 2e 0a  r.** to a VDBE..
02e0: 2a 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 20 70 61  **.** The SQL pa
02f0: 72 73 65 72 20 67 65 6e 65 72 61 74 65 73 20 61  rser generates a
0300: 20 70 72 6f 67 72 61 6d 20 77 68 69 63 68 20 69   program which i
0310: 73 20 74 68 65 6e 20 65 78 65 63 75 74 65 64 20  s then executed 
0320: 62 79 0a 2a 2a 20 74 68 65 20 56 44 42 45 20 74  by.** the VDBE t
0330: 6f 20 64 6f 20 74 68 65 20 77 6f 72 6b 20 6f 66  o do the work of
0340: 20 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65   the SQL stateme
0350: 6e 74 2e 20 20 56 44 42 45 20 70 72 6f 67 72 61  nt.  VDBE progra
0360: 6d 73 20 61 72 65 20 0a 2a 2a 20 73 69 6d 69 6c  ms are .** simil
0370: 61 72 20 69 6e 20 66 6f 72 6d 20 74 6f 20 61 73  ar in form to as
0380: 73 65 6d 62 6c 79 20 6c 61 6e 67 75 61 67 65 2e  sembly language.
0390: 20 20 54 68 65 20 70 72 6f 67 72 61 6d 20 63 6f    The program co
03a0: 6e 73 69 73 74 73 20 6f 66 0a 2a 2a 20 61 20 6c  nsists of.** a l
03b0: 69 6e 65 61 72 20 73 65 71 75 65 6e 63 65 20 6f  inear sequence o
03c0: 66 20 6f 70 65 72 61 74 69 6f 6e 73 2e 20 20 45  f operations.  E
03d0: 61 63 68 20 6f 70 65 72 61 74 69 6f 6e 20 68 61  ach operation ha
03e0: 73 20 61 6e 20 6f 70 63 6f 64 65 20 0a 2a 2a 20  s an opcode .** 
03f0: 61 6e 64 20 35 20 6f 70 65 72 61 6e 64 73 2e 20  and 5 operands. 
0400: 20 4f 70 65 72 61 6e 64 73 20 50 31 2c 20 50 32   Operands P1, P2
0410: 2c 20 61 6e 64 20 50 33 20 61 72 65 20 69 6e 74  , and P3 are int
0420: 65 67 65 72 73 2e 20 20 4f 70 65 72 61 6e 64 20  egers.  Operand 
0430: 50 34 20 0a 2a 2a 20 69 73 20 61 20 6e 75 6c 6c  P4 .** is a null
0440: 2d 74 65 72 6d 69 6e 61 74 65 64 20 73 74 72 69  -terminated stri
0450: 6e 67 2e 20 20 4f 70 65 72 61 6e 64 20 50 35 20  ng.  Operand P5 
0460: 69 73 20 61 6e 20 75 6e 73 69 67 6e 65 64 20 63  is an unsigned c
0470: 68 61 72 61 63 74 65 72 2e 0a 2a 2a 20 46 65 77  haracter..** Few
0480: 20 6f 70 63 6f 64 65 73 20 75 73 65 20 61 6c 6c   opcodes use all
0490: 20 35 20 6f 70 65 72 61 6e 64 73 2e 0a 2a 2a 0a   5 operands..**.
04a0: 2a 2a 20 43 6f 6d 70 75 74 61 74 69 6f 6e 20 72  ** Computation r
04b0: 65 73 75 6c 74 73 20 61 72 65 20 73 74 6f 72 65  esults are store
04c0: 64 20 6f 6e 20 61 20 73 65 74 20 6f 66 20 72 65  d on a set of re
04d0: 67 69 73 74 65 72 73 20 6e 75 6d 62 65 72 65 64  gisters numbered
04e0: 20 62 65 67 69 6e 6e 69 6e 67 0a 2a 2a 20 77 69   beginning.** wi
04f0: 74 68 20 31 20 61 6e 64 20 67 6f 69 6e 67 20 75  th 1 and going u
0500: 70 20 74 6f 20 56 64 62 65 2e 6e 4d 65 6d 2e 20  p to Vdbe.nMem. 
0510: 20 45 61 63 68 20 72 65 67 69 73 74 65 72 20 63   Each register c
0520: 61 6e 20 73 74 6f 72 65 0a 2a 2a 20 65 69 74 68  an store.** eith
0530: 65 72 20 61 6e 20 69 6e 74 65 67 65 72 2c 20 61  er an integer, a
0540: 20 6e 75 6c 6c 2d 74 65 72 6d 69 6e 61 74 65 64   null-terminated
0550: 20 73 74 72 69 6e 67 2c 20 61 20 66 6c 6f 61 74   string, a float
0560: 69 6e 67 20 70 6f 69 6e 74 0a 2a 2a 20 6e 75 6d  ing point.** num
0570: 62 65 72 2c 20 6f 72 20 74 68 65 20 53 51 4c 20  ber, or the SQL 
0580: 22 4e 55 4c 4c 22 20 76 61 6c 75 65 2e 20 20 41  "NULL" value.  A
0590: 6e 20 69 6d 70 6c 69 63 69 74 20 63 6f 6e 76 65  n implicit conve
05a0: 72 73 69 6f 6e 20 66 72 6f 6d 20 6f 6e 65 0a 2a  rsion from one.*
05b0: 2a 20 74 79 70 65 20 74 6f 20 74 68 65 20 6f 74  * type to the ot
05c0: 68 65 72 20 6f 63 63 75 72 73 20 61 73 20 6e 65  her occurs as ne
05d0: 63 65 73 73 61 72 79 2e 0a 2a 2a 20 0a 2a 2a 20  cessary..** .** 
05e0: 4d 6f 73 74 20 6f 66 20 74 68 65 20 63 6f 64 65  Most of the code
05f0: 20 69 6e 20 74 68 69 73 20 66 69 6c 65 20 69 73   in this file is
0600: 20 74 61 6b 65 6e 20 75 70 20 62 79 20 74 68 65   taken up by the
0610: 20 73 71 6c 69 74 65 33 56 64 62 65 45 78 65 63   sqlite3VdbeExec
0620: 28 29 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 20 77  ().** function w
0630: 68 69 63 68 20 64 6f 65 73 20 74 68 65 20 77 6f  hich does the wo
0640: 72 6b 20 6f 66 20 69 6e 74 65 72 70 72 65 74 69  rk of interpreti
0650: 6e 67 20 61 20 56 44 42 45 20 70 72 6f 67 72 61  ng a VDBE progra
0660: 6d 2e 0a 2a 2a 20 42 75 74 20 6f 74 68 65 72 20  m..** But other 
0670: 72 6f 75 74 69 6e 65 73 20 61 72 65 20 61 6c 73  routines are als
0680: 6f 20 70 72 6f 76 69 64 65 64 20 74 6f 20 68 65  o provided to he
0690: 6c 70 20 69 6e 20 62 75 69 6c 64 69 6e 67 20 75  lp in building u
06a0: 70 0a 2a 2a 20 61 20 70 72 6f 67 72 61 6d 20 69  p.** a program i
06b0: 6e 73 74 72 75 63 74 69 6f 6e 20 62 79 20 69 6e  nstruction by in
06c0: 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  struction..**.**
06d0: 20 56 61 72 69 6f 75 73 20 73 63 72 69 70 74 73   Various scripts
06e0: 20 73 63 61 6e 20 74 68 69 73 20 73 6f 75 72 63   scan this sourc
06f0: 65 20 66 69 6c 65 20 69 6e 20 6f 72 64 65 72 20  e file in order 
0700: 74 6f 20 67 65 6e 65 72 61 74 65 20 48 54 4d 4c  to generate HTML
0710: 0a 2a 2a 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  .** documentatio
0720: 6e 2c 20 68 65 61 64 65 72 73 20 66 69 6c 65 73  n, headers files
0730: 2c 20 6f 72 20 6f 74 68 65 72 20 64 65 72 69 76  , or other deriv
0740: 65 64 20 66 69 6c 65 73 2e 20 20 54 68 65 20 66  ed files.  The f
0750: 6f 72 6d 61 74 74 69 6e 67 0a 2a 2a 20 6f 66 20  ormatting.** of 
0760: 74 68 65 20 63 6f 64 65 20 69 6e 20 74 68 69 73  the code in this
0770: 20 66 69 6c 65 20 69 73 2c 20 74 68 65 72 65 66   file is, theref
0780: 6f 72 65 2c 20 69 6d 70 6f 72 74 61 6e 74 2e 20  ore, important. 
0790: 20 53 65 65 20 6f 74 68 65 72 20 63 6f 6d 6d 65   See other comme
07a0: 6e 74 73 0a 2a 2a 20 69 6e 20 74 68 69 73 20 66  nts.** in this f
07b0: 69 6c 65 20 66 6f 72 20 64 65 74 61 69 6c 73 2e  ile for details.
07c0: 20 20 49 66 20 69 6e 20 64 6f 75 62 74 2c 20 64    If in doubt, d
07d0: 6f 20 6e 6f 74 20 64 65 76 69 61 74 65 20 66 72  o not deviate fr
07e0: 6f 6d 20 65 78 69 73 74 69 6e 67 0a 2a 2a 20 63  om existing.** c
07f0: 6f 6d 6d 65 6e 74 69 6e 67 20 61 6e 64 20 69 6e  ommenting and in
0800: 64 65 6e 74 61 74 69 6f 6e 20 70 72 61 63 74 69  dentation practi
0810: 63 65 73 20 77 68 65 6e 20 63 68 61 6e 67 69 6e  ces when changin
0820: 67 20 6f 72 20 61 64 64 69 6e 67 20 63 6f 64 65  g or adding code
0830: 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 73  ..*/.#include "s
0840: 71 6c 69 74 65 49 6e 74 2e 68 22 0a 23 69 6e 63  qliteInt.h".#inc
0850: 6c 75 64 65 20 22 76 64 62 65 49 6e 74 2e 68 22  lude "vdbeInt.h"
0860: 0a 0a 2f 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 74  ../*.** Invoke t
0870: 68 69 73 20 6d 61 63 72 6f 20 6f 6e 20 6d 65 6d  his macro on mem
0880: 6f 72 79 20 63 65 6c 6c 73 20 6a 75 73 74 20 70  ory cells just p
0890: 72 69 6f 72 20 74 6f 20 63 68 61 6e 67 69 6e 67  rior to changing
08a0: 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 6f 66   the.** value of
08b0: 20 74 68 65 20 63 65 6c 6c 2e 20 20 54 68 69 73   the cell.  This
08c0: 20 6d 61 63 72 6f 20 76 65 72 69 66 69 65 73 20   macro verifies 
08d0: 74 68 61 74 20 73 68 61 6c 6c 6f 77 20 63 6f 70  that shallow cop
08e0: 69 65 73 20 61 72 65 0a 2a 2a 20 6e 6f 74 20 6d  ies are.** not m
08f0: 69 73 75 73 65 64 2e 0a 2a 2f 0a 23 69 66 64 65  isused..*/.#ifde
0900: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 23  f SQLITE_DEBUG.#
0910: 20 64 65 66 69 6e 65 20 6d 65 6d 41 62 6f 75 74   define memAbout
0920: 54 6f 43 68 61 6e 67 65 28 50 2c 4d 29 20 73 71  ToChange(P,M) sq
0930: 6c 69 74 65 33 56 64 62 65 4d 65 6d 50 72 65 70  lite3VdbeMemPrep
0940: 61 72 65 54 6f 43 68 61 6e 67 65 28 50 2c 4d 29  areToChange(P,M)
0950: 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
0960: 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
0970: 28 50 2c 4d 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  (P,M).#endif../*
0980: 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
0990: 67 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c  g global variabl
09a0: 65 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64  e is incremented
09b0: 20 65 76 65 72 79 20 74 69 6d 65 20 61 20 63 75   every time a cu
09c0: 72 73 6f 72 0a 2a 2a 20 6d 6f 76 65 73 2c 20 65  rsor.** moves, e
09d0: 69 74 68 65 72 20 62 79 20 74 68 65 20 4f 50 5f  ither by the OP_
09e0: 53 65 65 6b 58 58 2c 20 4f 50 5f 4e 65 78 74 2c  SeekXX, OP_Next,
09f0: 20 6f 72 20 4f 50 5f 50 72 65 76 20 6f 70 63 6f   or OP_Prev opco
0a00: 64 65 73 2e 20 20 54 68 65 20 74 65 73 74 0a 2a  des.  The test.*
0a10: 2a 20 70 72 6f 63 65 64 75 72 65 73 20 75 73 65  * procedures use
0a20: 20 74 68 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f   this informatio
0a30: 6e 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 74  n to make sure t
0a40: 68 61 74 20 69 6e 64 69 63 65 73 20 61 72 65 0a  hat indices are.
0a50: 2a 2a 20 77 6f 72 6b 69 6e 67 20 63 6f 72 72 65  ** working corre
0a60: 63 74 6c 79 2e 20 20 54 68 69 73 20 76 61 72 69  ctly.  This vari
0a70: 61 62 6c 65 20 68 61 73 20 6e 6f 20 66 75 6e 63  able has no func
0a80: 74 69 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20  tion other than 
0a90: 74 6f 0a 2a 2a 20 68 65 6c 70 20 76 65 72 69 66  to.** help verif
0aa0: 79 20 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70  y the correct op
0ab0: 65 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c  eration of the l
0ac0: 69 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65  ibrary..*/.#ifde
0ad0: 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e  f SQLITE_TEST.in
0ae0: 74 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68  t sqlite3_search
0af0: 5f 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64  _count = 0;.#end
0b00: 69 66 0a 0a 2f 2a 0a 2a 2a 20 57 68 65 6e 20 74  if../*.** When t
0b10: 68 69 73 20 67 6c 6f 62 61 6c 20 76 61 72 69 61  his global varia
0b20: 62 6c 65 20 69 73 20 70 6f 73 69 74 69 76 65 2c  ble is positive,
0b30: 20 69 74 20 67 65 74 73 20 64 65 63 72 65 6d 65   it gets decreme
0b40: 6e 74 65 64 20 6f 6e 63 65 20 62 65 66 6f 72 65  nted once before
0b50: 0a 2a 2a 20 65 61 63 68 20 69 6e 73 74 72 75 63  .** each instruc
0b60: 74 69 6f 6e 20 69 6e 20 74 68 65 20 56 44 42 45  tion in the VDBE
0b70: 2e 20 20 57 68 65 6e 20 72 65 61 63 68 65 73 20  .  When reaches 
0b80: 7a 65 72 6f 2c 20 74 68 65 20 75 31 2e 69 73 49  zero, the u1.isI
0b90: 6e 74 65 72 72 75 70 74 65 64 0a 2a 2a 20 66 69  nterrupted.** fi
0ba0: 65 6c 64 20 6f 66 20 74 68 65 20 73 71 6c 69 74  eld of the sqlit
0bb0: 65 33 20 73 74 72 75 63 74 75 72 65 20 69 73 20  e3 structure is 
0bc0: 73 65 74 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  set in order to 
0bd0: 73 69 6d 75 6c 61 74 65 20 61 6e 64 20 69 6e 74  simulate and int
0be0: 65 72 72 75 70 74 2e 0a 2a 2a 0a 2a 2a 20 54 68  errupt..**.** Th
0bf0: 69 73 20 66 61 63 69 6c 69 74 79 20 69 73 20 75  is facility is u
0c00: 73 65 64 20 66 6f 72 20 74 65 73 74 69 6e 67 20  sed for testing 
0c10: 70 75 72 70 6f 73 65 73 20 6f 6e 6c 79 2e 20 20  purposes only.  
0c20: 49 74 20 64 6f 65 73 20 6e 6f 74 20 66 75 6e 63  It does not func
0c30: 74 69 6f 6e 0a 2a 2a 20 69 6e 20 61 6e 20 6f 72  tion.** in an or
0c40: 64 69 6e 61 72 79 20 62 75 69 6c 64 2e 0a 2a 2f  dinary build..*/
0c50: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54  .#ifdef SQLITE_T
0c60: 45 53 54 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f  EST.int sqlite3_
0c70: 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74 20  interrupt_count 
0c80: 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  = 0;.#endif../*.
0c90: 2a 2a 20 54 68 65 20 6e 65 78 74 20 67 6c 6f 62  ** The next glob
0ca0: 61 6c 20 76 61 72 69 61 62 6c 65 20 69 73 20 69  al variable is i
0cb0: 6e 63 72 65 6d 65 6e 74 65 64 20 65 61 63 68 20  ncremented each 
0cc0: 74 79 70 65 20 74 68 65 20 4f 50 5f 53 6f 72 74  type the OP_Sort
0cd0: 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 65 78   opcode.** is ex
0ce0: 65 63 75 74 65 64 2e 20 20 54 68 65 20 74 65 73  ecuted.  The tes
0cf0: 74 20 70 72 6f 63 65 64 75 72 65 73 20 75 73 65  t procedures use
0d00: 20 74 68 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f   this informatio
0d10: 6e 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 74  n to make sure t
0d20: 68 61 74 0a 2a 2a 20 73 6f 72 74 69 6e 67 20 69  hat.** sorting i
0d30: 73 20 6f 63 63 75 72 72 69 6e 67 20 6f 72 20 6e  s occurring or n
0d40: 6f 74 20 6f 63 63 75 72 72 69 6e 67 20 61 74 20  ot occurring at 
0d50: 61 70 70 72 6f 70 72 69 61 74 65 20 74 69 6d 65  appropriate time
0d60: 73 2e 20 20 20 54 68 69 73 20 76 61 72 69 61 62  s.   This variab
0d70: 6c 65 0a 2a 2a 20 68 61 73 20 6e 6f 20 66 75 6e  le.** has no fun
0d80: 63 74 69 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e  ction other than
0d90: 20 74 6f 20 68 65 6c 70 20 76 65 72 69 66 79 20   to help verify 
0da0: 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65 72  the correct oper
0db0: 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20  ation of the.** 
0dc0: 6c 69 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64  library..*/.#ifd
0dd0: 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 69  ef SQLITE_TEST.i
0de0: 6e 74 20 73 71 6c 69 74 65 33 5f 73 6f 72 74 5f  nt sqlite3_sort_
0df0: 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64 69  count = 0;.#endi
0e00: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 65 78  f../*.** The nex
0e10: 74 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c  t global variabl
0e20: 65 20 72 65 63 6f 72 64 73 20 74 68 65 20 73 69  e records the si
0e30: 7a 65 20 6f 66 20 74 68 65 20 6c 61 72 67 65 73  ze of the larges
0e40: 74 20 4d 45 4d 5f 42 6c 6f 62 0a 2a 2a 20 6f 72  t MEM_Blob.** or
0e50: 20 4d 45 4d 5f 53 74 72 20 74 68 61 74 20 68 61   MEM_Str that ha
0e60: 73 20 62 65 65 6e 20 75 73 65 64 20 62 79 20 61  s been used by a
0e70: 20 56 44 42 45 20 6f 70 63 6f 64 65 2e 20 20 54   VDBE opcode.  T
0e80: 68 65 20 74 65 73 74 20 70 72 6f 63 65 64 75 72  he test procedur
0e90: 65 73 0a 2a 2a 20 75 73 65 20 74 68 69 73 20 69  es.** use this i
0ea0: 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 6f 20 6d 61  nformation to ma
0eb0: 6b 65 20 73 75 72 65 20 74 68 61 74 20 74 68 65  ke sure that the
0ec0: 20 7a 65 72 6f 2d 62 6c 6f 62 20 66 75 6e 63 74   zero-blob funct
0ed0: 69 6f 6e 61 6c 69 74 79 0a 2a 2a 20 69 73 20 77  ionality.** is w
0ee0: 6f 72 6b 69 6e 67 20 63 6f 72 72 65 63 74 6c 79  orking correctly
0ef0: 2e 20 20 20 54 68 69 73 20 76 61 72 69 61 62 6c  .   This variabl
0f00: 65 20 68 61 73 20 6e 6f 20 66 75 6e 63 74 69 6f  e has no functio
0f10: 6e 20 6f 74 68 65 72 20 74 68 61 6e 20 74 6f 0a  n other than to.
0f20: 2a 2a 20 68 65 6c 70 20 76 65 72 69 66 79 20 74  ** help verify t
0f30: 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65 72 61  he correct opera
0f40: 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c 69 62 72  tion of the libr
0f50: 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  ary..*/.#ifdef S
0f60: 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74 20 73  QLITE_TEST.int s
0f70: 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62 73  qlite3_max_blobs
0f80: 69 7a 65 20 3d 20 30 3b 0a 73 74 61 74 69 63 20  ize = 0;.static 
0f90: 76 6f 69 64 20 75 70 64 61 74 65 4d 61 78 42 6c  void updateMaxBl
0fa0: 6f 62 73 69 7a 65 28 4d 65 6d 20 2a 70 29 7b 0a  obsize(Mem *p){.
0fb0: 20 20 69 66 28 20 28 70 2d 3e 66 6c 61 67 73 20    if( (p->flags 
0fc0: 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42  & (MEM_Str|MEM_B
0fd0: 6c 6f 62 29 29 21 3d 30 20 26 26 20 70 2d 3e 6e  lob))!=0 && p->n
0fe0: 3e 73 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f  >sqlite3_max_blo
0ff0: 62 73 69 7a 65 20 29 7b 0a 20 20 20 20 73 71 6c  bsize ){.    sql
1000: 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62 73 69 7a  ite3_max_blobsiz
1010: 65 20 3d 20 70 2d 3e 6e 3b 0a 20 20 7d 0a 7d 0a  e = p->n;.  }.}.
1020: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
1030: 65 20 6e 65 78 74 20 67 6c 6f 62 61 6c 20 76 61  e next global va
1040: 72 69 61 62 6c 65 20 69 73 20 69 6e 63 72 65 6d  riable is increm
1050: 65 6e 74 65 64 20 65 61 63 68 20 74 79 70 65 20  ented each type 
1060: 74 68 65 20 4f 50 5f 46 6f 75 6e 64 20 6f 70 63  the OP_Found opc
1070: 6f 64 65 0a 2a 2a 20 69 73 20 65 78 65 63 75 74  ode.** is execut
1080: 65 64 2e 20 54 68 69 73 20 69 73 20 75 73 65 64  ed. This is used
1090: 20 74 6f 20 74 65 73 74 20 77 68 65 74 68 65 72   to test whether
10a0: 20 6f 72 20 6e 6f 74 20 74 68 65 20 66 6f 72 65   or not the fore
10b0: 69 67 6e 20 6b 65 79 0a 2a 2a 20 6f 70 65 72 61  ign key.** opera
10c0: 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 65 64  tion implemented
10d0: 20 75 73 69 6e 67 20 4f 50 5f 46 6b 49 73 5a 65   using OP_FkIsZe
10e0: 72 6f 20 69 73 20 77 6f 72 6b 69 6e 67 2e 20 54  ro is working. T
10f0: 68 69 73 20 76 61 72 69 61 62 6c 65 0a 2a 2a 20  his variable.** 
1100: 68 61 73 20 6e 6f 20 66 75 6e 63 74 69 6f 6e 20  has no function 
1110: 6f 74 68 65 72 20 74 68 61 6e 20 74 6f 20 68 65  other than to he
1120: 6c 70 20 76 65 72 69 66 79 20 74 68 65 20 63 6f  lp verify the co
1130: 72 72 65 63 74 20 6f 70 65 72 61 74 69 6f 6e 20  rrect operation 
1140: 6f 66 20 74 68 65 0a 2a 2a 20 6c 69 62 72 61 72  of the.** librar
1150: 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  y..*/.#ifdef SQL
1160: 49 54 45 5f 54 45 53 54 0a 69 6e 74 20 73 71 6c  ITE_TEST.int sql
1170: 69 74 65 33 5f 66 6f 75 6e 64 5f 63 6f 75 6e 74  ite3_found_count
1180: 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a   = 0;.#endif../*
1190: 0a 2a 2a 20 54 65 73 74 20 61 20 72 65 67 69 73  .** Test a regis
11a0: 74 65 72 20 74 6f 20 73 65 65 20 69 66 20 69 74  ter to see if it
11b0: 20 65 78 63 65 65 64 73 20 74 68 65 20 63 75 72   exceeds the cur
11c0: 72 65 6e 74 20 6d 61 78 69 6d 75 6d 20 62 6c 6f  rent maximum blo
11d0: 62 20 73 69 7a 65 2e 0a 2a 2a 20 49 66 20 69 74  b size..** If it
11e0: 20 64 6f 65 73 2c 20 72 65 63 6f 72 64 20 74 68   does, record th
11f0: 65 20 6e 65 77 20 6d 61 78 69 6d 75 6d 20 62 6c  e new maximum bl
1200: 6f 62 20 73 69 7a 65 2e 0a 2a 2f 0a 23 69 66 20  ob size..*/.#if 
1210: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54  defined(SQLITE_T
1220: 45 53 54 29 20 26 26 20 21 64 65 66 69 6e 65 64  EST) && !defined
1230: 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49  (SQLITE_OMIT_BUI
1240: 4c 54 49 4e 5f 54 45 53 54 29 0a 23 20 64 65 66  LTIN_TEST).# def
1250: 69 6e 65 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  ine UPDATE_MAX_B
1260: 4c 4f 42 53 49 5a 45 28 50 29 20 20 75 70 64 61  LOBSIZE(P)  upda
1270: 74 65 4d 61 78 42 6c 6f 62 73 69 7a 65 28 50 29  teMaxBlobsize(P)
1280: 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
1290: 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53  UPDATE_MAX_BLOBS
12a0: 49 5a 45 28 50 29 0a 23 65 6e 64 69 66 0a 0a 2f  IZE(P).#endif../
12b0: 2a 0a 2a 2a 20 43 6f 6e 76 65 72 74 20 74 68 65  *.** Convert the
12c0: 20 67 69 76 65 6e 20 72 65 67 69 73 74 65 72 20   given register 
12d0: 69 6e 74 6f 20 61 20 73 74 72 69 6e 67 20 69 66  into a string if
12e0: 20 69 74 20 69 73 6e 27 74 20 6f 6e 65 0a 2a 2a   it isn't one.**
12f0: 20 61 6c 72 65 61 64 79 2e 20 52 65 74 75 72 6e   already. Return
1300: 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 61 20 6d   non-zero if a m
1310: 61 6c 6c 6f 63 28 29 20 66 61 69 6c 73 2e 0a 2a  alloc() fails..*
1320: 2f 0a 23 64 65 66 69 6e 65 20 53 74 72 69 6e 67  /.#define String
1330: 69 66 79 28 50 2c 20 65 6e 63 29 20 5c 0a 20 20  ify(P, enc) \.  
1340: 20 69 66 28 28 28 50 29 2d 3e 66 6c 61 67 73 26   if(((P)->flags&
1350: 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f  (MEM_Str|MEM_Blo
1360: 62 29 29 3d 3d 30 20 26 26 20 73 71 6c 69 74 65  b))==0 && sqlite
1370: 33 56 64 62 65 4d 65 6d 53 74 72 69 6e 67 69 66  3VdbeMemStringif
1380: 79 28 50 2c 65 6e 63 29 29 20 5c 0a 20 20 20 20  y(P,enc)) \.    
1390: 20 7b 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 20   { goto no_mem; 
13a0: 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 65 70 68 65  }../*.** An ephe
13b0: 6d 65 72 61 6c 20 73 74 72 69 6e 67 20 76 61 6c  meral string val
13c0: 75 65 20 28 73 69 67 6e 69 66 69 65 64 20 62 79  ue (signified by
13d0: 20 74 68 65 20 4d 45 4d 5f 45 70 68 65 6d 20 66   the MEM_Ephem f
13e0: 6c 61 67 29 20 63 6f 6e 74 61 69 6e 73 0a 2a 2a  lag) contains.**
13f0: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20   a pointer to a 
1400: 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f  dynamically allo
1410: 63 61 74 65 64 20 73 74 72 69 6e 67 20 77 68 65  cated string whe
1420: 72 65 20 73 6f 6d 65 20 6f 74 68 65 72 20 65 6e  re some other en
1430: 74 69 74 79 0a 2a 2a 20 69 73 20 72 65 73 70 6f  tity.** is respo
1440: 6e 73 69 62 6c 65 20 66 6f 72 20 64 65 61 6c 6c  nsible for deall
1450: 6f 63 61 74 69 6e 67 20 74 68 61 74 20 73 74 72  ocating that str
1460: 69 6e 67 2e 20 20 42 65 63 61 75 73 65 20 74 68  ing.  Because th
1470: 65 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 64 6f  e register.** do
1480: 65 73 20 6e 6f 74 20 63 6f 6e 74 72 6f 6c 20 74  es not control t
1490: 68 65 20 73 74 72 69 6e 67 2c 20 69 74 20 6d 69  he string, it mi
14a0: 67 68 74 20 62 65 20 64 65 6c 65 74 65 64 20 77  ght be deleted w
14b0: 69 74 68 6f 75 74 20 74 68 65 20 72 65 67 69 73  ithout the regis
14c0: 74 65 72 0a 2a 2a 20 6b 6e 6f 77 69 6e 67 20 69  ter.** knowing i
14d0: 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 72 6f  t..**.** This ro
14e0: 75 74 69 6e 65 20 63 6f 6e 76 65 72 74 73 20 61  utine converts a
14f0: 6e 20 65 70 68 65 6d 65 72 61 6c 20 73 74 72 69  n ephemeral stri
1500: 6e 67 20 69 6e 74 6f 20 61 20 64 79 6e 61 6d 69  ng into a dynami
1510: 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 0a  cally allocated.
1520: 2a 2a 20 73 74 72 69 6e 67 20 74 68 61 74 20 74  ** string that t
1530: 68 65 20 72 65 67 69 73 74 65 72 20 69 74 73 65  he register itse
1540: 6c 66 20 63 6f 6e 74 72 6f 6c 73 2e 20 20 49 6e  lf controls.  In
1550: 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 69 74   other words, it
1560: 0a 2a 2a 20 63 6f 6e 76 65 72 74 73 20 61 6e 20  .** converts an 
1570: 4d 45 4d 5f 45 70 68 65 6d 20 73 74 72 69 6e 67  MEM_Ephem string
1580: 20 69 6e 74 6f 20 61 6e 20 4d 45 4d 5f 44 79 6e   into an MEM_Dyn
1590: 20 73 74 72 69 6e 67 2e 0a 2a 2f 0a 23 64 65 66   string..*/.#def
15a0: 69 6e 65 20 44 65 65 70 68 65 6d 65 72 61 6c 69  ine Deephemerali
15b0: 7a 65 28 50 29 20 5c 0a 20 20 20 69 66 28 20 28  ze(P) \.   if( (
15c0: 28 50 29 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 45  (P)->flags&MEM_E
15d0: 70 68 65 6d 29 21 3d 30 20 5c 0a 20 20 20 20 20  phem)!=0 \.     
15e0: 20 20 26 26 20 73 71 6c 69 74 65 33 56 64 62 65    && sqlite3Vdbe
15f0: 4d 65 6d 4d 61 6b 65 57 72 69 74 65 61 62 6c 65  MemMakeWriteable
1600: 28 50 29 20 29 7b 20 67 6f 74 6f 20 6e 6f 5f 6d  (P) ){ goto no_m
1610: 65 6d 3b 7d 0a 0a 2f 2a 0a 2a 2a 20 43 61 6c 6c  em;}../*.** Call
1620: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 45   sqlite3VdbeMemE
1630: 78 70 61 6e 64 42 6c 6f 62 28 29 20 6f 6e 20 74  xpandBlob() on t
1640: 68 65 20 73 75 70 70 6c 69 65 64 20 76 61 6c 75  he supplied valu
1650: 65 20 28 74 79 70 65 20 4d 65 6d 2a 29 0a 2a 2a  e (type Mem*).**
1660: 20 50 20 69 66 20 72 65 71 75 69 72 65 64 2e 0a   P if required..
1670: 2a 2f 0a 23 64 65 66 69 6e 65 20 45 78 70 61 6e  */.#define Expan
1680: 64 42 6c 6f 62 28 50 29 20 28 28 28 50 29 2d 3e  dBlob(P) (((P)->
1690: 66 6c 61 67 73 26 4d 45 4d 5f 5a 65 72 6f 29 3f  flags&MEM_Zero)?
16a0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 45 78  sqlite3VdbeMemEx
16b0: 70 61 6e 64 42 6c 6f 62 28 50 29 3a 30 29 0a 0a  pandBlob(P):0)..
16c0: 2f 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20 69  /* Return true i
16d0: 66 20 74 68 65 20 63 75 72 73 6f 72 20 77 61 73  f the cursor was
16e0: 20 6f 70 65 6e 65 64 20 75 73 69 6e 67 20 74 68   opened using th
16f0: 65 20 4f 50 5f 4f 70 65 6e 53 6f 72 74 65 72 20  e OP_OpenSorter 
1700: 6f 70 63 6f 64 65 2e 20 2a 2f 0a 23 69 66 64 65  opcode. */.#ifde
1710: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 4d 45  f SQLITE_OMIT_ME
1720: 52 47 45 5f 53 4f 52 54 0a 23 20 64 65 66 69 6e  RGE_SORT.# defin
1730: 65 20 69 73 53 6f 72 74 65 72 28 78 29 20 30 0a  e isSorter(x) 0.
1740: 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 69  #else.# define i
1750: 73 53 6f 72 74 65 72 28 78 29 20 28 28 78 29 2d  sSorter(x) ((x)-
1760: 3e 70 53 6f 72 74 65 72 21 3d 30 29 0a 23 65 6e  >pSorter!=0).#en
1770: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 72 67 75 6d  dif../*.** Argum
1780: 65 6e 74 20 70 4d 65 6d 20 70 6f 69 6e 74 73 20  ent pMem points 
1790: 61 74 20 61 20 72 65 67 69 73 74 65 72 20 74 68  at a register th
17a0: 61 74 20 77 69 6c 6c 20 62 65 20 70 61 73 73 65  at will be passe
17b0: 64 20 74 6f 20 61 0a 2a 2a 20 75 73 65 72 2d 64  d to a.** user-d
17c0: 65 66 69 6e 65 64 20 66 75 6e 63 74 69 6f 6e 20  efined function 
17d0: 6f 72 20 72 65 74 75 72 6e 65 64 20 74 6f 20 74  or returned to t
17e0: 68 65 20 75 73 65 72 20 61 73 20 74 68 65 20 72  he user as the r
17f0: 65 73 75 6c 74 20 6f 66 20 61 20 71 75 65 72 79  esult of a query
1800: 2e 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e  ..** This routin
1810: 65 20 73 65 74 73 20 74 68 65 20 70 4d 65 6d 2d  e sets the pMem-
1820: 3e 74 79 70 65 20 76 61 72 69 61 62 6c 65 20 75  >type variable u
1830: 73 65 64 20 62 79 20 74 68 65 20 73 71 6c 69 74  sed by the sqlit
1840: 65 33 5f 76 61 6c 75 65 5f 2a 28 29 20 0a 2a 2a  e3_value_*() .**
1850: 20 72 6f 75 74 69 6e 65 73 2e 0a 2a 2f 0a 76 6f   routines..*/.vo
1860: 69 64 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  id sqlite3VdbeMe
1870: 6d 53 74 6f 72 65 54 79 70 65 28 4d 65 6d 20 2a  mStoreType(Mem *
1880: 70 4d 65 6d 29 7b 0a 20 20 69 6e 74 20 66 6c 61  pMem){.  int fla
1890: 67 73 20 3d 20 70 4d 65 6d 2d 3e 66 6c 61 67 73  gs = pMem->flags
18a0: 3b 0a 20 20 69 66 28 20 66 6c 61 67 73 20 26 20  ;.  if( flags & 
18b0: 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20  MEM_Null ){.    
18c0: 70 4d 65 6d 2d 3e 74 79 70 65 20 3d 20 53 51 4c  pMem->type = SQL
18d0: 49 54 45 5f 4e 55 4c 4c 3b 0a 20 20 7d 0a 20 20  ITE_NULL;.  }.  
18e0: 65 6c 73 65 20 69 66 28 20 66 6c 61 67 73 20 26  else if( flags &
18f0: 20 4d 45 4d 5f 49 6e 74 20 29 7b 0a 20 20 20 20   MEM_Int ){.    
1900: 70 4d 65 6d 2d 3e 74 79 70 65 20 3d 20 53 51 4c  pMem->type = SQL
1910: 49 54 45 5f 49 4e 54 45 47 45 52 3b 0a 20 20 7d  ITE_INTEGER;.  }
1920: 0a 20 20 65 6c 73 65 20 69 66 28 20 66 6c 61 67  .  else if( flag
1930: 73 20 26 20 4d 45 4d 5f 52 65 61 6c 20 29 7b 0a  s & MEM_Real ){.
1940: 20 20 20 20 70 4d 65 6d 2d 3e 74 79 70 65 20 3d      pMem->type =
1950: 20 53 51 4c 49 54 45 5f 46 4c 4f 41 54 3b 0a 20   SQLITE_FLOAT;. 
1960: 20 7d 0a 20 20 65 6c 73 65 20 69 66 28 20 66 6c   }.  else if( fl
1970: 61 67 73 20 26 20 4d 45 4d 5f 53 74 72 20 29 7b  ags & MEM_Str ){
1980: 0a 20 20 20 20 70 4d 65 6d 2d 3e 74 79 70 65 20  .    pMem->type 
1990: 3d 20 53 51 4c 49 54 45 5f 54 45 58 54 3b 0a 20  = SQLITE_TEXT;. 
19a0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 4d 65 6d   }else{.    pMem
19b0: 2d 3e 74 79 70 65 20 3d 20 53 51 4c 49 54 45 5f  ->type = SQLITE_
19c0: 42 4c 4f 42 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a  BLOB;.  }.}../*.
19d0: 2a 2a 20 41 6c 6c 6f 63 61 74 65 20 56 64 62 65  ** Allocate Vdbe
19e0: 43 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 69 43  Cursor number iC
19f0: 75 72 2e 20 20 52 65 74 75 72 6e 20 61 20 70 6f  ur.  Return a po
1a00: 69 6e 74 65 72 20 74 6f 20 69 74 2e 20 20 52 65  inter to it.  Re
1a10: 74 75 72 6e 20 4e 55 4c 4c 0a 2a 2a 20 69 66 20  turn NULL.** if 
1a20: 77 65 20 72 75 6e 20 6f 75 74 20 6f 66 20 6d 65  we run out of me
1a30: 6d 6f 72 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  mory..*/.static 
1a40: 56 64 62 65 43 75 72 73 6f 72 20 2a 61 6c 6c 6f  VdbeCursor *allo
1a50: 63 61 74 65 43 75 72 73 6f 72 28 0a 20 20 56 64  cateCursor(.  Vd
1a60: 62 65 20 2a 70 2c 20 20 20 20 20 20 20 20 20 20  be *p,          
1a70: 20 20 20 20 2f 2a 20 54 68 65 20 76 69 72 74 75      /* The virtu
1a80: 61 6c 20 6d 61 63 68 69 6e 65 20 2a 2f 0a 20 20  al machine */.  
1a90: 69 6e 74 20 69 43 75 72 2c 20 20 20 20 20 20 20  int iCur,       
1aa0: 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 6f        /* Index o
1ab0: 66 20 74 68 65 20 6e 65 77 20 56 64 62 65 43 75  f the new VdbeCu
1ac0: 72 73 6f 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 46  rsor */.  int nF
1ad0: 69 65 6c 64 2c 20 20 20 20 20 20 20 20 20 20 20  ield,           
1ae0: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 66 69 65  /* Number of fie
1af0: 6c 64 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65  lds in the table
1b00: 20 6f 72 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69   or index */.  i
1b10: 6e 74 20 69 44 62 2c 20 20 20 20 20 20 20 20 20  nt iDb,         
1b20: 20 20 20 20 20 2f 2a 20 57 68 65 6e 20 64 61 74       /* When dat
1b30: 61 62 61 73 65 20 74 68 65 20 63 75 72 73 6f 72  abase the cursor
1b40: 20 62 65 6c 6f 6e 67 73 20 74 6f 2c 20 6f 72 20   belongs to, or 
1b50: 2d 31 20 2a 2f 0a 20 20 69 6e 74 20 69 73 42 74  -1 */.  int isBt
1b60: 72 65 65 43 75 72 73 6f 72 20 20 20 20 20 2f 2a  reeCursor     /*
1b70: 20 54 72 75 65 20 66 6f 72 20 42 2d 54 72 65 65   True for B-Tree
1b80: 2e 20 20 46 61 6c 73 65 20 66 6f 72 20 70 73 65  .  False for pse
1b90: 75 64 6f 2d 74 61 62 6c 65 20 6f 72 20 76 74 61  udo-table or vta
1ba0: 62 20 2a 2f 0a 29 7b 0a 20 20 2f 2a 20 46 69 6e  b */.){.  /* Fin
1bb0: 64 20 74 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c  d the memory cel
1bc0: 6c 20 74 68 61 74 20 77 69 6c 6c 20 62 65 20 75  l that will be u
1bd0: 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65  sed to store the
1be0: 20 62 6c 6f 62 20 6f 66 20 6d 65 6d 6f 72 79 0a   blob of memory.
1bf0: 20 20 2a 2a 20 72 65 71 75 69 72 65 64 20 66 6f    ** required fo
1c00: 72 20 74 68 69 73 20 56 64 62 65 43 75 72 73 6f  r this VdbeCurso
1c10: 72 20 73 74 72 75 63 74 75 72 65 2e 20 49 74 20  r structure. It 
1c20: 69 73 20 63 6f 6e 76 65 6e 69 65 6e 74 20 74 6f  is convenient to
1c30: 20 75 73 65 20 61 20 0a 20 20 2a 2a 20 76 64 62   use a .  ** vdb
1c40: 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74 6f  e memory cell to
1c50: 20 6d 61 6e 61 67 65 20 74 68 65 20 6d 65 6d 6f   manage the memo
1c60: 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 72 65  ry allocation re
1c70: 71 75 69 72 65 64 20 66 6f 72 20 61 0a 20 20 2a  quired for a.  *
1c80: 2a 20 56 64 62 65 43 75 72 73 6f 72 20 73 74 72  * VdbeCursor str
1c90: 75 63 74 75 72 65 20 66 6f 72 20 74 68 65 20 66  ucture for the f
1ca0: 6f 6c 6c 6f 77 69 6e 67 20 72 65 61 73 6f 6e 73  ollowing reasons
1cb0: 3a 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 20 2a 20  :.  **.  **   * 
1cc0: 53 6f 6d 65 74 69 6d 65 73 20 63 75 72 73 6f 72  Sometimes cursor
1cd0: 20 6e 75 6d 62 65 72 73 20 61 72 65 20 75 73 65   numbers are use
1ce0: 64 20 66 6f 72 20 61 20 63 6f 75 70 6c 65 20 6f  d for a couple o
1cf0: 66 20 64 69 66 66 65 72 65 6e 74 0a 20 20 2a 2a  f different.  **
1d00: 20 20 20 20 20 70 75 72 70 6f 73 65 73 20 69 6e       purposes in
1d10: 20 61 20 76 64 62 65 20 70 72 6f 67 72 61 6d 2e   a vdbe program.
1d20: 20 54 68 65 20 64 69 66 66 65 72 65 6e 74 20 75   The different u
1d30: 73 65 73 20 6d 69 67 68 74 20 72 65 71 75 69 72  ses might requir
1d40: 65 0a 20 20 2a 2a 20 20 20 20 20 64 69 66 66 65  e.  **     diffe
1d50: 72 65 6e 74 20 73 69 7a 65 64 20 61 6c 6c 6f 63  rent sized alloc
1d60: 61 74 69 6f 6e 73 2e 20 4d 65 6d 6f 72 79 20 63  ations. Memory c
1d70: 65 6c 6c 73 20 70 72 6f 76 69 64 65 20 67 72 6f  ells provide gro
1d80: 77 61 62 6c 65 0a 20 20 2a 2a 20 20 20 20 20 61  wable.  **     a
1d90: 6c 6c 6f 63 61 74 69 6f 6e 73 2e 0a 20 20 2a 2a  llocations..  **
1da0: 0a 20 20 2a 2a 20 20 20 2a 20 57 68 65 6e 20 75  .  **   * When u
1db0: 73 69 6e 67 20 45 4e 41 42 4c 45 5f 4d 45 4d 4f  sing ENABLE_MEMO
1dc0: 52 59 5f 4d 41 4e 41 47 45 4d 45 4e 54 2c 20 6d  RY_MANAGEMENT, m
1dd0: 65 6d 6f 72 79 20 63 65 6c 6c 20 62 75 66 66 65  emory cell buffe
1de0: 72 73 20 63 61 6e 0a 20 20 2a 2a 20 20 20 20 20  rs can.  **     
1df0: 62 65 20 66 72 65 65 64 20 6c 61 7a 69 6c 79 20  be freed lazily 
1e00: 76 69 61 20 74 68 65 20 73 71 6c 69 74 65 33 5f  via the sqlite3_
1e10: 72 65 6c 65 61 73 65 5f 6d 65 6d 6f 72 79 28 29  release_memory()
1e20: 20 41 50 49 2e 20 54 68 69 73 0a 20 20 2a 2a 20   API. This.  ** 
1e30: 20 20 20 20 6d 69 6e 69 6d 69 7a 65 73 20 74 68      minimizes th
1e40: 65 20 6e 75 6d 62 65 72 20 6f 66 20 6d 61 6c 6c  e number of mall
1e50: 6f 63 20 63 61 6c 6c 73 20 6d 61 64 65 20 62 79  oc calls made by
1e60: 20 74 68 65 20 73 79 73 74 65 6d 2e 0a 20 20 2a   the system..  *
1e70: 2a 0a 20 20 2a 2a 20 4d 65 6d 6f 72 79 20 63 65  *.  ** Memory ce
1e80: 6c 6c 73 20 66 6f 72 20 63 75 72 73 6f 72 73 20  lls for cursors 
1e90: 61 72 65 20 61 6c 6c 6f 63 61 74 65 64 20 61 74  are allocated at
1ea0: 20 74 68 65 20 74 6f 70 20 6f 66 20 74 68 65 20   the top of the 
1eb0: 61 64 64 72 65 73 73 0a 20 20 2a 2a 20 73 70 61  address.  ** spa
1ec0: 63 65 2e 20 4d 65 6d 6f 72 79 20 63 65 6c 6c 20  ce. Memory cell 
1ed0: 28 70 2d 3e 6e 4d 65 6d 29 20 63 6f 72 72 65 73  (p->nMem) corres
1ee0: 70 6f 6e 64 73 20 74 6f 20 63 75 72 73 6f 72 20  ponds to cursor 
1ef0: 30 2e 20 53 70 61 63 65 20 66 6f 72 0a 20 20 2a  0. Space for.  *
1f00: 2a 20 63 75 72 73 6f 72 20 31 20 69 73 20 6d 61  * cursor 1 is ma
1f10: 6e 61 67 65 64 20 62 79 20 6d 65 6d 6f 72 79 20  naged by memory 
1f20: 63 65 6c 6c 20 28 70 2d 3e 6e 4d 65 6d 2d 31 29  cell (p->nMem-1)
1f30: 2c 20 65 74 63 2e 0a 20 20 2a 2f 0a 20 20 4d 65  , etc..  */.  Me
1f40: 6d 20 2a 70 4d 65 6d 20 3d 20 26 70 2d 3e 61 4d  m *pMem = &p->aM
1f50: 65 6d 5b 70 2d 3e 6e 4d 65 6d 2d 69 43 75 72 5d  em[p->nMem-iCur]
1f60: 3b 0a 0a 20 20 69 6e 74 20 6e 42 79 74 65 3b 0a  ;..  int nByte;.
1f70: 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
1f80: 78 20 3d 20 30 3b 0a 20 20 6e 42 79 74 65 20 3d  x = 0;.  nByte =
1f90: 20 0a 20 20 20 20 20 20 52 4f 55 4e 44 38 28 73   .      ROUND8(s
1fa0: 69 7a 65 6f 66 28 56 64 62 65 43 75 72 73 6f 72  izeof(VdbeCursor
1fb0: 29 29 20 2b 20 0a 20 20 20 20 20 20 28 69 73 42  )) + .      (isB
1fc0: 74 72 65 65 43 75 72 73 6f 72 3f 73 71 6c 69 74  treeCursor?sqlit
1fd0: 65 33 42 74 72 65 65 43 75 72 73 6f 72 53 69 7a  e3BtreeCursorSiz
1fe0: 65 28 29 3a 30 29 20 2b 20 0a 20 20 20 20 20 20  e():0) + .      
1ff0: 32 2a 6e 46 69 65 6c 64 2a 73 69 7a 65 6f 66 28  2*nField*sizeof(
2000: 75 33 32 29 3b 0a 0a 20 20 61 73 73 65 72 74 28  u32);..  assert(
2010: 20 69 43 75 72 3c 70 2d 3e 6e 43 75 72 73 6f 72   iCur<p->nCursor
2020: 20 29 3b 0a 20 20 69 66 28 20 70 2d 3e 61 70 43   );.  if( p->apC
2030: 73 72 5b 69 43 75 72 5d 20 29 7b 0a 20 20 20 20  sr[iCur] ){.    
2040: 73 71 6c 69 74 65 33 56 64 62 65 46 72 65 65 43  sqlite3VdbeFreeC
2050: 75 72 73 6f 72 28 70 2c 20 70 2d 3e 61 70 43 73  ursor(p, p->apCs
2060: 72 5b 69 43 75 72 5d 29 3b 0a 20 20 20 20 70 2d  r[iCur]);.    p-
2070: 3e 61 70 43 73 72 5b 69 43 75 72 5d 20 3d 20 30  >apCsr[iCur] = 0
2080: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 53 51 4c 49  ;.  }.  if( SQLI
2090: 54 45 5f 4f 4b 3d 3d 73 71 6c 69 74 65 33 56 64  TE_OK==sqlite3Vd
20a0: 62 65 4d 65 6d 47 72 6f 77 28 70 4d 65 6d 2c 20  beMemGrow(pMem, 
20b0: 6e 42 79 74 65 2c 20 30 29 20 29 7b 0a 20 20 20  nByte, 0) ){.   
20c0: 20 70 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 20   p->apCsr[iCur] 
20d0: 3d 20 70 43 78 20 3d 20 28 56 64 62 65 43 75 72  = pCx = (VdbeCur
20e0: 73 6f 72 2a 29 70 4d 65 6d 2d 3e 7a 3b 0a 20 20  sor*)pMem->z;.  
20f0: 20 20 6d 65 6d 73 65 74 28 70 43 78 2c 20 30 2c    memset(pCx, 0,
2100: 20 73 69 7a 65 6f 66 28 56 64 62 65 43 75 72 73   sizeof(VdbeCurs
2110: 6f 72 29 29 3b 0a 20 20 20 20 70 43 78 2d 3e 69  or));.    pCx->i
2120: 44 62 20 3d 20 69 44 62 3b 0a 20 20 20 20 70 43  Db = iDb;.    pC
2130: 78 2d 3e 6e 46 69 65 6c 64 20 3d 20 6e 46 69 65  x->nField = nFie
2140: 6c 64 3b 0a 20 20 20 20 69 66 28 20 6e 46 69 65  ld;.    if( nFie
2150: 6c 64 20 29 7b 0a 20 20 20 20 20 20 70 43 78 2d  ld ){.      pCx-
2160: 3e 61 54 79 70 65 20 3d 20 28 75 33 32 20 2a 29  >aType = (u32 *)
2170: 26 70 4d 65 6d 2d 3e 7a 5b 52 4f 55 4e 44 38 28  &pMem->z[ROUND8(
2180: 73 69 7a 65 6f 66 28 56 64 62 65 43 75 72 73 6f  sizeof(VdbeCurso
2190: 72 29 29 5d 3b 0a 20 20 20 20 7d 0a 20 20 20 20  r))];.    }.    
21a0: 69 66 28 20 69 73 42 74 72 65 65 43 75 72 73 6f  if( isBtreeCurso
21b0: 72 20 29 7b 0a 20 20 20 20 20 20 70 43 78 2d 3e  r ){.      pCx->
21c0: 70 43 75 72 73 6f 72 20 3d 20 28 42 74 43 75 72  pCursor = (BtCur
21d0: 73 6f 72 2a 29 0a 20 20 20 20 20 20 20 20 20 20  sor*).          
21e0: 26 70 4d 65 6d 2d 3e 7a 5b 52 4f 55 4e 44 38 28  &pMem->z[ROUND8(
21f0: 73 69 7a 65 6f 66 28 56 64 62 65 43 75 72 73 6f  sizeof(VdbeCurso
2200: 72 29 29 2b 32 2a 6e 46 69 65 6c 64 2a 73 69 7a  r))+2*nField*siz
2210: 65 6f 66 28 75 33 32 29 5d 3b 0a 20 20 20 20 20  eof(u32)];.     
2220: 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72   sqlite3BtreeCur
2230: 73 6f 72 5a 65 72 6f 28 70 43 78 2d 3e 70 43 75  sorZero(pCx->pCu
2240: 72 73 6f 72 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  rsor);.    }.  }
2250: 0a 20 20 72 65 74 75 72 6e 20 70 43 78 3b 0a 7d  .  return pCx;.}
2260: 0a 0a 2f 2a 0a 2a 2a 20 54 72 79 20 74 6f 20 63  ../*.** Try to c
2270: 6f 6e 76 65 72 74 20 61 20 76 61 6c 75 65 20 69  onvert a value i
2280: 6e 74 6f 20 61 20 6e 75 6d 65 72 69 63 20 72 65  nto a numeric re
2290: 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 69 66 20  presentation if 
22a0: 77 65 20 63 61 6e 0a 2a 2a 20 64 6f 20 73 6f 20  we can.** do so 
22b0: 77 69 74 68 6f 75 74 20 6c 6f 73 73 20 6f 66 20  without loss of 
22c0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 20 20 49 6e  information.  In
22d0: 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 69 66   other words, if
22e0: 20 74 68 65 20 73 74 72 69 6e 67 0a 2a 2a 20 6c   the string.** l
22f0: 6f 6f 6b 73 20 6c 69 6b 65 20 61 20 6e 75 6d 62  ooks like a numb
2300: 65 72 2c 20 63 6f 6e 76 65 72 74 20 69 74 20 69  er, convert it i
2310: 6e 74 6f 20 61 20 6e 75 6d 62 65 72 2e 20 20 49  nto a number.  I
2320: 66 20 69 74 20 64 6f 65 73 20 6e 6f 74 0a 2a 2a  f it does not.**
2330: 20 6c 6f 6f 6b 20 6c 69 6b 65 20 61 20 6e 75 6d   look like a num
2340: 62 65 72 2c 20 6c 65 61 76 65 20 69 74 20 61 6c  ber, leave it al
2350: 6f 6e 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76  one..*/.static v
2360: 6f 69 64 20 61 70 70 6c 79 4e 75 6d 65 72 69 63  oid applyNumeric
2370: 41 66 66 69 6e 69 74 79 28 4d 65 6d 20 2a 70 52  Affinity(Mem *pR
2380: 65 63 29 7b 0a 20 20 69 66 28 20 28 70 52 65 63  ec){.  if( (pRec
2390: 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 52  ->flags & (MEM_R
23a0: 65 61 6c 7c 4d 45 4d 5f 49 6e 74 29 29 3d 3d 30  eal|MEM_Int))==0
23b0: 20 29 7b 0a 20 20 20 20 64 6f 75 62 6c 65 20 72   ){.    double r
23c0: 56 61 6c 75 65 3b 0a 20 20 20 20 69 36 34 20 69  Value;.    i64 i
23d0: 56 61 6c 75 65 3b 0a 20 20 20 20 75 38 20 65 6e  Value;.    u8 en
23e0: 63 20 3d 20 70 52 65 63 2d 3e 65 6e 63 3b 0a 20  c = pRec->enc;. 
23f0: 20 20 20 69 66 28 20 28 70 52 65 63 2d 3e 66 6c     if( (pRec->fl
2400: 61 67 73 26 4d 45 4d 5f 53 74 72 29 3d 3d 30 20  ags&MEM_Str)==0 
2410: 29 20 72 65 74 75 72 6e 3b 0a 20 20 20 20 69 66  ) return;.    if
2420: 28 20 73 71 6c 69 74 65 33 41 74 6f 46 28 70 52  ( sqlite3AtoF(pR
2430: 65 63 2d 3e 7a 2c 20 26 72 56 61 6c 75 65 2c 20  ec->z, &rValue, 
2440: 70 52 65 63 2d 3e 6e 2c 20 65 6e 63 29 3d 3d 30  pRec->n, enc)==0
2450: 20 29 20 72 65 74 75 72 6e 3b 0a 20 20 20 20 69   ) return;.    i
2460: 66 28 20 30 3d 3d 73 71 6c 69 74 65 33 41 74 6f  f( 0==sqlite3Ato
2470: 69 36 34 28 70 52 65 63 2d 3e 7a 2c 20 26 69 56  i64(pRec->z, &iV
2480: 61 6c 75 65 2c 20 70 52 65 63 2d 3e 6e 2c 20 65  alue, pRec->n, e
2490: 6e 63 29 20 29 7b 0a 20 20 20 20 20 20 70 52 65  nc) ){.      pRe
24a0: 63 2d 3e 75 2e 69 20 3d 20 69 56 61 6c 75 65 3b  c->u.i = iValue;
24b0: 0a 20 20 20 20 20 20 70 52 65 63 2d 3e 66 6c 61  .      pRec->fla
24c0: 67 73 20 7c 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20  gs |= MEM_Int;. 
24d0: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
24e0: 70 52 65 63 2d 3e 72 20 3d 20 72 56 61 6c 75 65  pRec->r = rValue
24f0: 3b 0a 20 20 20 20 20 20 70 52 65 63 2d 3e 66 6c  ;.      pRec->fl
2500: 61 67 73 20 7c 3d 20 4d 45 4d 5f 52 65 61 6c 3b  ags |= MEM_Real;
2510: 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a 0a 2f 2a  .    }.  }.}../*
2520: 0a 2a 2a 20 50 72 6f 63 65 73 73 69 6e 67 20 69  .** Processing i
2530: 73 20 64 65 74 65 72 6d 69 6e 65 20 62 79 20 74  s determine by t
2540: 68 65 20 61 66 66 69 6e 69 74 79 20 70 61 72 61  he affinity para
2550: 6d 65 74 65 72 3a 0a 2a 2a 0a 2a 2a 20 53 51 4c  meter:.**.** SQL
2560: 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 3a  ITE_AFF_INTEGER:
2570: 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 52  .** SQLITE_AFF_R
2580: 45 41 4c 3a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41  EAL:.** SQLITE_A
2590: 46 46 5f 4e 55 4d 45 52 49 43 3a 0a 2a 2a 20 20  FF_NUMERIC:.**  
25a0: 20 20 54 72 79 20 74 6f 20 63 6f 6e 76 65 72 74    Try to convert
25b0: 20 70 52 65 63 20 74 6f 20 61 6e 20 69 6e 74 65   pRec to an inte
25c0: 67 65 72 20 72 65 70 72 65 73 65 6e 74 61 74 69  ger representati
25d0: 6f 6e 20 6f 72 20 61 20 0a 2a 2a 20 20 20 20 66  on or a .**    f
25e0: 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e 74 20 72 65  loating-point re
25f0: 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 69 66 20  presentation if 
2600: 61 6e 20 69 6e 74 65 67 65 72 20 72 65 70 72 65  an integer repre
2610: 73 65 6e 74 61 74 69 6f 6e 0a 2a 2a 20 20 20 20  sentation.**    
2620: 69 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65 2e  is not possible.
2630: 20 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20    Note that the 
2640: 69 6e 74 65 67 65 72 20 72 65 70 72 65 73 65 6e  integer represen
2650: 74 61 74 69 6f 6e 20 69 73 0a 2a 2a 20 20 20 20  tation is.**    
2660: 61 6c 77 61 79 73 20 70 72 65 66 65 72 72 65 64  always preferred
2670: 2c 20 65 76 65 6e 20 69 66 20 74 68 65 20 61 66  , even if the af
2680: 66 69 6e 69 74 79 20 69 73 20 52 45 41 4c 2c 20  finity is REAL, 
2690: 62 65 63 61 75 73 65 0a 2a 2a 20 20 20 20 61 6e  because.**    an
26a0: 20 69 6e 74 65 67 65 72 20 72 65 70 72 65 73 65   integer represe
26b0: 6e 74 61 74 69 6f 6e 20 69 73 20 6d 6f 72 65 20  ntation is more 
26c0: 73 70 61 63 65 20 65 66 66 69 63 69 65 6e 74 20  space efficient 
26d0: 6f 6e 20 64 69 73 6b 2e 0a 2a 2a 0a 2a 2a 20 53  on disk..**.** S
26e0: 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 3a 0a  QLITE_AFF_TEXT:.
26f0: 2a 2a 20 20 20 20 43 6f 6e 76 65 72 74 20 70 52  **    Convert pR
2700: 65 63 20 74 6f 20 61 20 74 65 78 74 20 72 65 70  ec to a text rep
2710: 72 65 73 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a 0a  resentation..**.
2720: 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 4f  ** SQLITE_AFF_NO
2730: 4e 45 3a 0a 2a 2a 20 20 20 20 4e 6f 2d 6f 70 2e  NE:.**    No-op.
2740: 20 20 70 52 65 63 20 69 73 20 75 6e 63 68 61 6e    pRec is unchan
2750: 67 65 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76  ged..*/.static v
2760: 6f 69 64 20 61 70 70 6c 79 41 66 66 69 6e 69 74  oid applyAffinit
2770: 79 28 0a 20 20 4d 65 6d 20 2a 70 52 65 63 2c 20  y(.  Mem *pRec, 
2780: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
2790: 76 61 6c 75 65 20 74 6f 20 61 70 70 6c 79 20 61  value to apply a
27a0: 66 66 69 6e 69 74 79 20 74 6f 20 2a 2f 0a 20 20  ffinity to */.  
27b0: 63 68 61 72 20 61 66 66 69 6e 69 74 79 2c 20 20  char affinity,  
27c0: 20 20 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e      /* The affin
27d0: 69 74 79 20 74 6f 20 62 65 20 61 70 70 6c 69 65  ity to be applie
27e0: 64 20 2a 2f 0a 20 20 75 38 20 65 6e 63 20 20 20  d */.  u8 enc   
27f0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73             /* Us
2800: 65 20 74 68 69 73 20 74 65 78 74 20 65 6e 63 6f  e this text enco
2810: 64 69 6e 67 20 2a 2f 0a 29 7b 0a 20 20 69 66 28  ding */.){.  if(
2820: 20 61 66 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54   affinity==SQLIT
2830: 45 5f 41 46 46 5f 54 45 58 54 20 29 7b 0a 20 20  E_AFF_TEXT ){.  
2840: 20 20 2f 2a 20 4f 6e 6c 79 20 61 74 74 65 6d 70    /* Only attemp
2850: 74 20 74 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e  t the conversion
2860: 20 74 6f 20 54 45 58 54 20 69 66 20 74 68 65 72   to TEXT if ther
2870: 65 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20  e is an integer 
2880: 6f 72 20 72 65 61 6c 0a 20 20 20 20 2a 2a 20 72  or real.    ** r
2890: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 28 62  epresentation (b
28a0: 6c 6f 62 20 61 6e 64 20 4e 55 4c 4c 20 64 6f 20  lob and NULL do 
28b0: 6e 6f 74 20 67 65 74 20 63 6f 6e 76 65 72 74 65  not get converte
28c0: 64 29 20 62 75 74 20 6e 6f 20 73 74 72 69 6e 67  d) but no string
28d0: 0a 20 20 20 20 2a 2a 20 72 65 70 72 65 73 65 6e  .    ** represen
28e0: 74 61 74 69 6f 6e 2e 0a 20 20 20 20 2a 2f 0a 20  tation..    */. 
28f0: 20 20 20 69 66 28 20 30 3d 3d 28 70 52 65 63 2d     if( 0==(pRec-
2900: 3e 66 6c 61 67 73 26 4d 45 4d 5f 53 74 72 29 20  >flags&MEM_Str) 
2910: 26 26 20 28 70 52 65 63 2d 3e 66 6c 61 67 73 26  && (pRec->flags&
2920: 28 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 49 6e  (MEM_Real|MEM_In
2930: 74 29 29 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  t)) ){.      sql
2940: 69 74 65 33 56 64 62 65 4d 65 6d 53 74 72 69 6e  ite3VdbeMemStrin
2950: 67 69 66 79 28 70 52 65 63 2c 20 65 6e 63 29 3b  gify(pRec, enc);
2960: 0a 20 20 20 20 7d 0a 20 20 20 20 70 52 65 63 2d  .    }.    pRec-
2970: 3e 66 6c 61 67 73 20 26 3d 20 7e 28 4d 45 4d 5f  >flags &= ~(MEM_
2980: 52 65 61 6c 7c 4d 45 4d 5f 49 6e 74 29 3b 0a 20  Real|MEM_Int);. 
2990: 20 7d 65 6c 73 65 20 69 66 28 20 61 66 66 69 6e   }else if( affin
29a0: 69 74 79 21 3d 53 51 4c 49 54 45 5f 41 46 46 5f  ity!=SQLITE_AFF_
29b0: 4e 4f 4e 45 20 29 7b 0a 20 20 20 20 61 73 73 65  NONE ){.    asse
29c0: 72 74 28 20 61 66 66 69 6e 69 74 79 3d 3d 53 51  rt( affinity==SQ
29d0: 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52  LITE_AFF_INTEGER
29e0: 20 7c 7c 20 61 66 66 69 6e 69 74 79 3d 3d 53 51   || affinity==SQ
29f0: 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c 0a 20 20  LITE_AFF_REAL.  
2a00: 20 20 20 20 20 20 20 20 20 20 20 7c 7c 20 61 66             || af
2a10: 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41  finity==SQLITE_A
2a20: 46 46 5f 4e 55 4d 45 52 49 43 20 29 3b 0a 20 20  FF_NUMERIC );.  
2a30: 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66    applyNumericAf
2a40: 66 69 6e 69 74 79 28 70 52 65 63 29 3b 0a 20 20  finity(pRec);.  
2a50: 20 20 69 66 28 20 70 52 65 63 2d 3e 66 6c 61 67    if( pRec->flag
2a60: 73 20 26 20 4d 45 4d 5f 52 65 61 6c 20 29 7b 0a  s & MEM_Real ){.
2a70: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
2a80: 65 49 6e 74 65 67 65 72 41 66 66 69 6e 69 74 79  eIntegerAffinity
2a90: 28 70 52 65 63 29 3b 0a 20 20 20 20 7d 0a 20 20  (pRec);.    }.  
2aa0: 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 72 79 20 74  }.}../*.** Try t
2ab0: 6f 20 63 6f 6e 76 65 72 74 20 74 68 65 20 74 79  o convert the ty
2ac0: 70 65 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e  pe of a function
2ad0: 20 61 72 67 75 6d 65 6e 74 20 6f 72 20 61 20 72   argument or a r
2ae0: 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 0a 2a 2a 20  esult column.** 
2af0: 69 6e 74 6f 20 61 20 6e 75 6d 65 72 69 63 20 72  into a numeric r
2b00: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e 20 20  epresentation.  
2b10: 55 73 65 20 65 69 74 68 65 72 20 49 4e 54 45 47  Use either INTEG
2b20: 45 52 20 6f 72 20 52 45 41 4c 20 77 68 69 63 68  ER or REAL which
2b30: 65 76 65 72 0a 2a 2a 20 69 73 20 61 70 70 72 6f  ever.** is appro
2b40: 70 72 69 61 74 65 2e 20 20 42 75 74 20 6f 6e 6c  priate.  But onl
2b50: 79 20 64 6f 20 74 68 65 20 63 6f 6e 76 65 72 73  y do the convers
2b60: 69 6f 6e 20 69 66 20 69 74 20 69 73 20 70 6f 73  ion if it is pos
2b70: 73 69 62 6c 65 20 77 69 74 68 6f 75 74 0a 2a 2a  sible without.**
2b80: 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72 6d 61   loss of informa
2b90: 74 69 6f 6e 20 61 6e 64 20 72 65 74 75 72 6e 20  tion and return 
2ba0: 74 68 65 20 72 65 76 69 73 65 64 20 74 79 70 65  the revised type
2bb0: 20 6f 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74   of the argument
2bc0: 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  ..*/.int sqlite3
2bd0: 5f 76 61 6c 75 65 5f 6e 75 6d 65 72 69 63 5f 74  _value_numeric_t
2be0: 79 70 65 28 73 71 6c 69 74 65 33 5f 76 61 6c 75  ype(sqlite3_valu
2bf0: 65 20 2a 70 56 61 6c 29 7b 0a 20 20 4d 65 6d 20  e *pVal){.  Mem 
2c00: 2a 70 4d 65 6d 20 3d 20 28 4d 65 6d 2a 29 70 56  *pMem = (Mem*)pV
2c10: 61 6c 3b 0a 20 20 69 66 28 20 70 4d 65 6d 2d 3e  al;.  if( pMem->
2c20: 74 79 70 65 3d 3d 53 51 4c 49 54 45 5f 54 45 58  type==SQLITE_TEX
2c30: 54 20 29 7b 0a 20 20 20 20 61 70 70 6c 79 4e 75  T ){.    applyNu
2c40: 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 70 4d  mericAffinity(pM
2c50: 65 6d 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  em);.    sqlite3
2c60: 56 64 62 65 4d 65 6d 53 74 6f 72 65 54 79 70 65  VdbeMemStoreType
2c70: 28 70 4d 65 6d 29 3b 0a 20 20 7d 0a 20 20 72 65  (pMem);.  }.  re
2c80: 74 75 72 6e 20 70 4d 65 6d 2d 3e 74 79 70 65 3b  turn pMem->type;
2c90: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 45 78 70 6f 72 74  .}../*.** Export
2ca0: 65 64 20 76 65 72 73 69 6f 6e 20 6f 66 20 61 70  ed version of ap
2cb0: 70 6c 79 41 66 66 69 6e 69 74 79 28 29 2e 20 54  plyAffinity(). T
2cc0: 68 69 73 20 6f 6e 65 20 77 6f 72 6b 73 20 6f 6e  his one works on
2cd0: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c   sqlite3_value*,
2ce0: 20 0a 2a 2a 20 6e 6f 74 20 74 68 65 20 69 6e 74   .** not the int
2cf0: 65 72 6e 61 6c 20 4d 65 6d 2a 20 74 79 70 65 2e  ernal Mem* type.
2d00: 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  .*/.void sqlite3
2d10: 56 61 6c 75 65 41 70 70 6c 79 41 66 66 69 6e 69  ValueApplyAffini
2d20: 74 79 28 0a 20 20 73 71 6c 69 74 65 33 5f 76 61  ty(.  sqlite3_va
2d30: 6c 75 65 20 2a 70 56 61 6c 2c 20 0a 20 20 75 38  lue *pVal, .  u8
2d40: 20 61 66 66 69 6e 69 74 79 2c 20 0a 20 20 75 38   affinity, .  u8
2d50: 20 65 6e 63 0a 29 7b 0a 20 20 61 70 70 6c 79 41   enc.){.  applyA
2d60: 66 66 69 6e 69 74 79 28 28 4d 65 6d 20 2a 29 70  ffinity((Mem *)p
2d70: 56 61 6c 2c 20 61 66 66 69 6e 69 74 79 2c 20 65  Val, affinity, e
2d80: 6e 63 29 3b 0a 7d 0a 0a 23 69 66 64 65 66 20 53  nc);.}..#ifdef S
2d90: 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a  QLITE_DEBUG./*.*
2da0: 2a 20 57 72 69 74 65 20 61 20 6e 69 63 65 20 73  * Write a nice s
2db0: 74 72 69 6e 67 20 72 65 70 72 65 73 65 6e 74 61  tring representa
2dc0: 74 69 6f 6e 20 6f 66 20 74 68 65 20 63 6f 6e 74  tion of the cont
2dd0: 65 6e 74 73 20 6f 66 20 63 65 6c 6c 20 70 4d 65  ents of cell pMe
2de0: 6d 0a 2a 2a 20 69 6e 74 6f 20 62 75 66 66 65 72  m.** into buffer
2df0: 20 7a 42 75 66 2c 20 6c 65 6e 67 74 68 20 6e 42   zBuf, length nB
2e00: 75 66 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69  uf..*/.void sqli
2e10: 74 65 33 56 64 62 65 4d 65 6d 50 72 65 74 74 79  te3VdbeMemPretty
2e20: 50 72 69 6e 74 28 4d 65 6d 20 2a 70 4d 65 6d 2c  Print(Mem *pMem,
2e30: 20 63 68 61 72 20 2a 7a 42 75 66 29 7b 0a 20 20   char *zBuf){.  
2e40: 63 68 61 72 20 2a 7a 43 73 72 20 3d 20 7a 42 75  char *zCsr = zBu
2e50: 66 3b 0a 20 20 69 6e 74 20 66 20 3d 20 70 4d 65  f;.  int f = pMe
2e60: 6d 2d 3e 66 6c 61 67 73 3b 0a 0a 20 20 73 74 61  m->flags;..  sta
2e70: 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  tic const char *
2e80: 63 6f 6e 73 74 20 65 6e 63 6e 61 6d 65 73 5b 5d  const encnames[]
2e90: 20 3d 20 7b 22 28 58 29 22 2c 20 22 28 38 29 22   = {"(X)", "(8)"
2ea0: 2c 20 22 28 31 36 4c 45 29 22 2c 20 22 28 31 36  , "(16LE)", "(16
2eb0: 42 45 29 22 7d 3b 0a 0a 20 20 69 66 28 20 66 26  BE)"};..  if( f&
2ec0: 4d 45 4d 5f 42 6c 6f 62 20 29 7b 0a 20 20 20 20  MEM_Blob ){.    
2ed0: 69 6e 74 20 69 3b 0a 20 20 20 20 63 68 61 72 20  int i;.    char 
2ee0: 63 3b 0a 20 20 20 20 69 66 28 20 66 20 26 20 4d  c;.    if( f & M
2ef0: 45 4d 5f 44 79 6e 20 29 7b 0a 20 20 20 20 20 20  EM_Dyn ){.      
2f00: 63 20 3d 20 27 7a 27 3b 0a 20 20 20 20 20 20 61  c = 'z';.      a
2f10: 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d  ssert( (f & (MEM
2f20: 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 45 70 68 65  _Static|MEM_Ephe
2f30: 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65  m))==0 );.    }e
2f40: 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f  lse if( f & MEM_
2f50: 53 74 61 74 69 63 20 29 7b 0a 20 20 20 20 20 20  Static ){.      
2f60: 63 20 3d 20 27 74 27 3b 0a 20 20 20 20 20 20 61  c = 't';.      a
2f70: 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d  ssert( (f & (MEM
2f80: 5f 44 79 6e 7c 4d 45 4d 5f 45 70 68 65 6d 29 29  _Dyn|MEM_Ephem))
2f90: 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65  ==0 );.    }else
2fa0: 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 45 70 68   if( f & MEM_Eph
2fb0: 65 6d 20 29 7b 0a 20 20 20 20 20 20 63 20 3d 20  em ){.      c = 
2fc0: 27 65 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72  'e';.      asser
2fd0: 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74 61  t( (f & (MEM_Sta
2fe0: 74 69 63 7c 4d 45 4d 5f 44 79 6e 29 29 3d 3d 30  tic|MEM_Dyn))==0
2ff0: 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20   );.    }else{. 
3000: 20 20 20 20 20 63 20 3d 20 27 73 27 3b 0a 20 20       c = 's';.  
3010: 20 20 7d 0a 0a 20 20 20 20 73 71 6c 69 74 65 33    }..    sqlite3
3020: 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a  _snprintf(100, z
3030: 43 73 72 2c 20 22 25 63 22 2c 20 63 29 3b 0a 20  Csr, "%c", c);. 
3040: 20 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74     zCsr += sqlit
3050: 65 33 53 74 72 6c 65 6e 33 30 28 7a 43 73 72 29  e3Strlen30(zCsr)
3060: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e  ;.    sqlite3_sn
3070: 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73 72  printf(100, zCsr
3080: 2c 20 22 25 64 5b 22 2c 20 70 4d 65 6d 2d 3e 6e  , "%d[", pMem->n
3090: 29 3b 0a 20 20 20 20 7a 43 73 72 20 2b 3d 20 73  );.    zCsr += s
30a0: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a  qlite3Strlen30(z
30b0: 43 73 72 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d  Csr);.    for(i=
30c0: 30 3b 20 69 3c 31 36 20 26 26 20 69 3c 70 4d 65  0; i<16 && i<pMe
30d0: 6d 2d 3e 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  m->n; i++){.    
30e0: 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e    sqlite3_snprin
30f0: 74 66 28 31 30 30 2c 20 7a 43 73 72 2c 20 22 25  tf(100, zCsr, "%
3100: 30 32 58 22 2c 20 28 28 69 6e 74 29 70 4d 65 6d  02X", ((int)pMem
3110: 2d 3e 7a 5b 69 5d 20 26 20 30 78 46 46 29 29 3b  ->z[i] & 0xFF));
3120: 0a 20 20 20 20 20 20 7a 43 73 72 20 2b 3d 20 73  .      zCsr += s
3130: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a  qlite3Strlen30(z
3140: 43 73 72 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  Csr);.    }.    
3150: 66 6f 72 28 69 3d 30 3b 20 69 3c 31 36 20 26 26  for(i=0; i<16 &&
3160: 20 69 3c 70 4d 65 6d 2d 3e 6e 3b 20 69 2b 2b 29   i<pMem->n; i++)
3170: 7b 0a 20 20 20 20 20 20 63 68 61 72 20 7a 20 3d  {.      char z =
3180: 20 70 4d 65 6d 2d 3e 7a 5b 69 5d 3b 0a 20 20 20   pMem->z[i];.   
3190: 20 20 20 69 66 28 20 7a 3c 33 32 20 7c 7c 20 7a     if( z<32 || z
31a0: 3e 31 32 36 20 29 20 2a 7a 43 73 72 2b 2b 20 3d  >126 ) *zCsr++ =
31b0: 20 27 2e 27 3b 0a 20 20 20 20 20 20 65 6c 73 65   '.';.      else
31c0: 20 2a 7a 43 73 72 2b 2b 20 3d 20 7a 3b 0a 20 20   *zCsr++ = z;.  
31d0: 20 20 7d 0a 0a 20 20 20 20 73 71 6c 69 74 65 33    }..    sqlite3
31e0: 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a  _snprintf(100, z
31f0: 43 73 72 2c 20 22 5d 25 73 22 2c 20 65 6e 63 6e  Csr, "]%s", encn
3200: 61 6d 65 73 5b 70 4d 65 6d 2d 3e 65 6e 63 5d 29  ames[pMem->enc])
3210: 3b 0a 20 20 20 20 7a 43 73 72 20 2b 3d 20 73 71  ;.    zCsr += sq
3220: 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 43  lite3Strlen30(zC
3230: 73 72 29 3b 0a 20 20 20 20 69 66 28 20 66 20 26  sr);.    if( f &
3240: 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20   MEM_Zero ){.   
3250: 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69     sqlite3_snpri
3260: 6e 74 66 28 31 30 30 2c 20 7a 43 73 72 2c 22 2b  ntf(100, zCsr,"+
3270: 25 64 7a 22 2c 70 4d 65 6d 2d 3e 75 2e 6e 5a 65  %dz",pMem->u.nZe
3280: 72 6f 29 3b 0a 20 20 20 20 20 20 7a 43 73 72 20  ro);.      zCsr 
3290: 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  += sqlite3Strlen
32a0: 33 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 7d 0a  30(zCsr);.    }.
32b0: 20 20 20 20 2a 7a 43 73 72 20 3d 20 27 5c 30 27      *zCsr = '\0'
32c0: 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20  ;.  }else if( f 
32d0: 26 20 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20  & MEM_Str ){.   
32e0: 20 69 6e 74 20 6a 2c 20 6b 3b 0a 20 20 20 20 7a   int j, k;.    z
32f0: 42 75 66 5b 30 5d 20 3d 20 27 20 27 3b 0a 20 20  Buf[0] = ' ';.  
3300: 20 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 44 79    if( f & MEM_Dy
3310: 6e 20 29 7b 0a 20 20 20 20 20 20 7a 42 75 66 5b  n ){.      zBuf[
3320: 31 5d 20 3d 20 27 7a 27 3b 0a 20 20 20 20 20 20  1] = 'z';.      
3330: 61 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45  assert( (f & (ME
3340: 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 45 70 68  M_Static|MEM_Eph
3350: 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d  em))==0 );.    }
3360: 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d  else if( f & MEM
3370: 5f 53 74 61 74 69 63 20 29 7b 0a 20 20 20 20 20  _Static ){.     
3380: 20 7a 42 75 66 5b 31 5d 20 3d 20 27 74 27 3b 0a   zBuf[1] = 't';.
3390: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28 66        assert( (f
33a0: 20 26 20 28 4d 45 4d 5f 44 79 6e 7c 4d 45 4d 5f   & (MEM_Dyn|MEM_
33b0: 45 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20  Ephem))==0 );.  
33c0: 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26 20    }else if( f & 
33d0: 4d 45 4d 5f 45 70 68 65 6d 20 29 7b 0a 20 20 20  MEM_Ephem ){.   
33e0: 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27 65 27     zBuf[1] = 'e'
33f0: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
3400: 28 66 20 26 20 28 4d 45 4d 5f 53 74 61 74 69 63  (f & (MEM_Static
3410: 7c 4d 45 4d 5f 44 79 6e 29 29 3d 3d 30 20 29 3b  |MEM_Dyn))==0 );
3420: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
3430: 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27 73 27 3b    zBuf[1] = 's';
3440: 0a 20 20 20 20 7d 0a 20 20 20 20 6b 20 3d 20 32  .    }.    k = 2
3450: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e  ;.    sqlite3_sn
3460: 70 72 69 6e 74 66 28 31 30 30 2c 20 26 7a 42 75  printf(100, &zBu
3470: 66 5b 6b 5d 2c 20 22 25 64 22 2c 20 70 4d 65 6d  f[k], "%d", pMem
3480: 2d 3e 6e 29 3b 0a 20 20 20 20 6b 20 2b 3d 20 73  ->n);.    k += s
3490: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 26  qlite3Strlen30(&
34a0: 7a 42 75 66 5b 6b 5d 29 3b 0a 20 20 20 20 7a 42  zBuf[k]);.    zB
34b0: 75 66 5b 6b 2b 2b 5d 20 3d 20 27 5b 27 3b 0a 20  uf[k++] = '[';. 
34c0: 20 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c 31 35     for(j=0; j<15
34d0: 20 26 26 20 6a 3c 70 4d 65 6d 2d 3e 6e 3b 20 6a   && j<pMem->n; j
34e0: 2b 2b 29 7b 0a 20 20 20 20 20 20 75 38 20 63 20  ++){.      u8 c 
34f0: 3d 20 70 4d 65 6d 2d 3e 7a 5b 6a 5d 3b 0a 20 20  = pMem->z[j];.  
3500: 20 20 20 20 69 66 28 20 63 3e 3d 30 78 32 30 20      if( c>=0x20 
3510: 26 26 20 63 3c 30 78 37 66 20 29 7b 0a 20 20 20  && c<0x7f ){.   
3520: 20 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d       zBuf[k++] =
3530: 20 63 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b   c;.      }else{
3540: 0a 20 20 20 20 20 20 20 20 7a 42 75 66 5b 6b 2b  .        zBuf[k+
3550: 2b 5d 20 3d 20 27 2e 27 3b 0a 20 20 20 20 20 20  +] = '.';.      
3560: 7d 0a 20 20 20 20 7d 0a 20 20 20 20 7a 42 75 66  }.    }.    zBuf
3570: 5b 6b 2b 2b 5d 20 3d 20 27 5d 27 3b 0a 20 20 20  [k++] = ']';.   
3580: 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74   sqlite3_snprint
3590: 66 28 31 30 30 2c 26 7a 42 75 66 5b 6b 5d 2c 20  f(100,&zBuf[k], 
35a0: 65 6e 63 6e 61 6d 65 73 5b 70 4d 65 6d 2d 3e 65  encnames[pMem->e
35b0: 6e 63 5d 29 3b 0a 20 20 20 20 6b 20 2b 3d 20 73  nc]);.    k += s
35c0: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 26  qlite3Strlen30(&
35d0: 7a 42 75 66 5b 6b 5d 29 3b 0a 20 20 20 20 7a 42  zBuf[k]);.    zB
35e0: 75 66 5b 6b 2b 2b 5d 20 3d 20 30 3b 0a 20 20 7d  uf[k++] = 0;.  }
35f0: 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65  .}.#endif..#ifde
3600: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f  f SQLITE_DEBUG./
3610: 2a 0a 2a 2a 20 50 72 69 6e 74 20 74 68 65 20 76  *.** Print the v
3620: 61 6c 75 65 20 6f 66 20 61 20 72 65 67 69 73 74  alue of a regist
3630: 65 72 20 66 6f 72 20 74 72 61 63 69 6e 67 20 70  er for tracing p
3640: 75 72 70 6f 73 65 73 3a 0a 2a 2f 0a 73 74 61 74  urposes:.*/.stat
3650: 69 63 20 76 6f 69 64 20 6d 65 6d 54 72 61 63 65  ic void memTrace
3660: 50 72 69 6e 74 28 46 49 4c 45 20 2a 6f 75 74 2c  Print(FILE *out,
3670: 20 4d 65 6d 20 2a 70 29 7b 0a 20 20 69 66 28 20   Mem *p){.  if( 
3680: 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  p->flags & MEM_N
3690: 75 6c 6c 20 29 7b 0a 20 20 20 20 66 70 72 69 6e  ull ){.    fprin
36a0: 74 66 28 6f 75 74 2c 20 22 20 4e 55 4c 4c 22 29  tf(out, " NULL")
36b0: 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 28 70  ;.  }else if( (p
36c0: 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49  ->flags & (MEM_I
36d0: 6e 74 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d 28 4d  nt|MEM_Str))==(M
36e0: 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 53 74 72 29 20  EM_Int|MEM_Str) 
36f0: 29 7b 0a 20 20 20 20 66 70 72 69 6e 74 66 28 6f  ){.    fprintf(o
3700: 75 74 2c 20 22 20 73 69 3a 25 6c 6c 64 22 2c 20  ut, " si:%lld", 
3710: 70 2d 3e 75 2e 69 29 3b 0a 20 20 7d 65 6c 73 65  p->u.i);.  }else
3720: 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20   if( p->flags & 
3730: 4d 45 4d 5f 49 6e 74 20 29 7b 0a 20 20 20 20 66  MEM_Int ){.    f
3740: 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 20 69 3a  printf(out, " i:
3750: 25 6c 6c 64 22 2c 20 70 2d 3e 75 2e 69 29 3b 0a  %lld", p->u.i);.
3760: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
3770: 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49  MIT_FLOATING_POI
3780: 4e 54 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70  NT.  }else if( p
3790: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65  ->flags & MEM_Re
37a0: 61 6c 20 29 7b 0a 20 20 20 20 66 70 72 69 6e 74  al ){.    fprint
37b0: 66 28 6f 75 74 2c 20 22 20 72 3a 25 67 22 2c 20  f(out, " r:%g", 
37c0: 70 2d 3e 72 29 3b 0a 23 65 6e 64 69 66 0a 20 20  p->r);.#endif.  
37d0: 7d 65 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c 61  }else if( p->fla
37e0: 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 20  gs & MEM_RowSet 
37f0: 29 7b 0a 20 20 20 20 66 70 72 69 6e 74 66 28 6f  ){.    fprintf(o
3800: 75 74 2c 20 22 20 28 72 6f 77 73 65 74 29 22 29  ut, " (rowset)")
3810: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 63  ;.  }else{.    c
3820: 68 61 72 20 7a 42 75 66 5b 32 30 30 5d 3b 0a 20  har zBuf[200];. 
3830: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
3840: 6d 50 72 65 74 74 79 50 72 69 6e 74 28 70 2c 20  mPrettyPrint(p, 
3850: 7a 42 75 66 29 3b 0a 20 20 20 20 66 70 72 69 6e  zBuf);.    fprin
3860: 74 66 28 6f 75 74 2c 20 22 20 22 29 3b 0a 20 20  tf(out, " ");.  
3870: 20 20 66 70 72 69 6e 74 66 28 6f 75 74 2c 20 22    fprintf(out, "
3880: 25 73 22 2c 20 7a 42 75 66 29 3b 0a 20 20 7d 0a  %s", zBuf);.  }.
3890: 7d 0a 73 74 61 74 69 63 20 76 6f 69 64 20 72 65  }.static void re
38a0: 67 69 73 74 65 72 54 72 61 63 65 28 46 49 4c 45  gisterTrace(FILE
38b0: 20 2a 6f 75 74 2c 20 69 6e 74 20 69 52 65 67 2c   *out, int iReg,
38c0: 20 4d 65 6d 20 2a 70 29 7b 0a 20 20 66 70 72 69   Mem *p){.  fpri
38d0: 6e 74 66 28 6f 75 74 2c 20 22 52 45 47 5b 25 64  ntf(out, "REG[%d
38e0: 5d 20 3d 20 22 2c 20 69 52 65 67 29 3b 0a 20 20  ] = ", iReg);.  
38f0: 6d 65 6d 54 72 61 63 65 50 72 69 6e 74 28 6f 75  memTracePrint(ou
3900: 74 2c 20 70 29 3b 0a 20 20 66 70 72 69 6e 74 66  t, p);.  fprintf
3910: 28 6f 75 74 2c 20 22 5c 6e 22 29 3b 0a 7d 0a 23  (out, "\n");.}.#
3920: 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51  endif..#ifdef SQ
3930: 4c 49 54 45 5f 44 45 42 55 47 0a 23 20 20 64 65  LITE_DEBUG.#  de
3940: 66 69 6e 65 20 52 45 47 49 53 54 45 52 5f 54 52  fine REGISTER_TR
3950: 41 43 45 28 52 2c 4d 29 20 69 66 28 70 2d 3e 74  ACE(R,M) if(p->t
3960: 72 61 63 65 29 72 65 67 69 73 74 65 72 54 72 61  race)registerTra
3970: 63 65 28 70 2d 3e 74 72 61 63 65 2c 52 2c 4d 29  ce(p->trace,R,M)
3980: 0a 23 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65  .#else.#  define
3990: 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
39a0: 52 2c 4d 29 0a 23 65 6e 64 69 66 0a 0a 0a 23 69  R,M).#endif...#i
39b0: 66 64 65 66 20 56 44 42 45 5f 50 52 4f 46 49 4c  fdef VDBE_PROFIL
39c0: 45 0a 0a 2f 2a 20 0a 2a 2a 20 68 77 74 69 6d 65  E../* .** hwtime
39d0: 2e 68 20 63 6f 6e 74 61 69 6e 73 20 69 6e 6c 69  .h contains inli
39e0: 6e 65 20 61 73 73 65 6d 62 6c 65 72 20 63 6f 64  ne assembler cod
39f0: 65 20 66 6f 72 20 69 6d 70 6c 65 6d 65 6e 74 69  e for implementi
3a00: 6e 67 20 0a 2a 2a 20 68 69 67 68 2d 70 65 72 66  ng .** high-perf
3a10: 6f 72 6d 61 6e 63 65 20 74 69 6d 69 6e 67 20 72  ormance timing r
3a20: 6f 75 74 69 6e 65 73 2e 0a 2a 2f 0a 23 69 6e 63  outines..*/.#inc
3a30: 6c 75 64 65 20 22 68 77 74 69 6d 65 2e 68 22 0a  lude "hwtime.h".
3a40: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
3a50: 68 65 20 43 48 45 43 4b 5f 46 4f 52 5f 49 4e 54  he CHECK_FOR_INT
3a60: 45 52 52 55 50 54 20 6d 61 63 72 6f 20 64 65 66  ERRUPT macro def
3a70: 69 6e 65 64 20 68 65 72 65 20 6c 6f 6f 6b 73 20  ined here looks 
3a80: 74 6f 20 73 65 65 20 69 66 20 74 68 65 0a 2a 2a  to see if the.**
3a90: 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75   sqlite3_interru
3aa0: 70 74 28 29 20 72 6f 75 74 69 6e 65 20 68 61 73  pt() routine has
3ab0: 20 62 65 65 6e 20 63 61 6c 6c 65 64 2e 20 20 49   been called.  I
3ac0: 66 20 69 74 20 68 61 73 20 62 65 65 6e 2c 20 74  f it has been, t
3ad0: 68 65 6e 0a 2a 2a 20 70 72 6f 63 65 73 73 69 6e  hen.** processin
3ae0: 67 20 6f 66 20 74 68 65 20 56 44 42 45 20 70 72  g of the VDBE pr
3af0: 6f 67 72 61 6d 20 69 73 20 69 6e 74 65 72 72 75  ogram is interru
3b00: 70 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  pted..**.** This
3b10: 20 6d 61 63 72 6f 20 61 64 64 65 64 20 74 6f 20   macro added to 
3b20: 65 76 65 72 79 20 69 6e 73 74 72 75 63 74 69 6f  every instructio
3b30: 6e 20 74 68 61 74 20 64 6f 65 73 20 61 20 6a 75  n that does a ju
3b40: 6d 70 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a  mp in order to.*
3b50: 2a 20 69 6d 70 6c 65 6d 65 6e 74 20 61 20 6c 6f  * implement a lo
3b60: 6f 70 2e 20 20 54 68 69 73 20 74 65 73 74 20 75  op.  This test u
3b70: 73 65 64 20 74 6f 20 62 65 20 6f 6e 20 65 76 65  sed to be on eve
3b80: 72 79 20 73 69 6e 67 6c 65 20 69 6e 73 74 72 75  ry single instru
3b90: 63 74 69 6f 6e 2c 0a 2a 2a 20 62 75 74 20 74 68  ction,.** but th
3ba0: 61 74 20 6d 65 61 6e 74 20 77 65 20 6d 6f 72 65  at meant we more
3bb0: 20 74 65 73 74 69 6e 67 20 74 68 61 74 20 77 65   testing that we
3bc0: 20 6e 65 65 64 65 64 2e 20 20 42 79 20 6f 6e 6c   needed.  By onl
3bd0: 79 20 74 65 73 74 69 6e 67 20 74 68 65 0a 2a 2a  y testing the.**
3be0: 20 66 6c 61 67 20 6f 6e 20 6a 75 6d 70 20 69 6e   flag on jump in
3bf0: 73 74 72 75 63 74 69 6f 6e 73 2c 20 77 65 20 67  structions, we g
3c00: 65 74 20 61 20 28 73 6d 61 6c 6c 29 20 73 70 65  et a (small) spe
3c10: 65 64 20 69 6d 70 72 6f 76 65 6d 65 6e 74 2e 0a  ed improvement..
3c20: 2a 2f 0a 23 64 65 66 69 6e 65 20 43 48 45 43 4b  */.#define CHECK
3c30: 5f 46 4f 52 5f 49 4e 54 45 52 52 55 50 54 20 5c  _FOR_INTERRUPT \
3c40: 0a 20 20 20 69 66 28 20 64 62 2d 3e 75 31 2e 69  .   if( db->u1.i
3c50: 73 49 6e 74 65 72 72 75 70 74 65 64 20 29 20 67  sInterrupted ) g
3c60: 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
3c70: 5f 69 6e 74 65 72 72 75 70 74 3b 0a 0a 0a 23 69  _interrupt;...#i
3c80: 66 6e 64 65 66 20 4e 44 45 42 55 47 0a 2f 2a 0a  fndef NDEBUG./*.
3c90: 2a 2a 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e  ** This function
3ca0: 20 69 73 20 6f 6e 6c 79 20 63 61 6c 6c 65 64 20   is only called 
3cb0: 66 72 6f 6d 20 77 69 74 68 69 6e 20 61 6e 20 61  from within an a
3cc0: 73 73 65 72 74 28 29 20 65 78 70 72 65 73 73 69  ssert() expressi
3cd0: 6f 6e 2e 20 49 74 0a 2a 2a 20 63 68 65 63 6b 73  on. It.** checks
3ce0: 20 74 68 61 74 20 74 68 65 20 73 71 6c 69 74 65   that the sqlite
3cf0: 33 2e 6e 54 72 61 6e 73 61 63 74 69 6f 6e 20 76  3.nTransaction v
3d00: 61 72 69 61 62 6c 65 20 69 73 20 63 6f 72 72 65  ariable is corre
3d10: 63 74 6c 79 20 73 65 74 20 74 6f 0a 2a 2a 20 74  ctly set to.** t
3d20: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6e 6f 6e  he number of non
3d30: 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61 76  -transaction sav
3d40: 65 70 6f 69 6e 74 73 20 63 75 72 72 65 6e 74 6c  epoints currentl
3d50: 79 20 69 6e 20 74 68 65 20 0a 2a 2a 20 6c 69 6e  y in the .** lin
3d60: 6b 65 64 20 6c 69 73 74 20 73 74 61 72 74 69 6e  ked list startin
3d70: 67 20 61 74 20 73 71 6c 69 74 65 33 2e 70 53 61  g at sqlite3.pSa
3d80: 76 65 70 6f 69 6e 74 2e 0a 2a 2a 20 0a 2a 2a 20  vepoint..** .** 
3d90: 55 73 61 67 65 3a 0a 2a 2a 0a 2a 2a 20 20 20 20  Usage:.**.**    
3da0: 20 61 73 73 65 72 74 28 20 63 68 65 63 6b 53 61   assert( checkSa
3db0: 76 65 70 6f 69 6e 74 43 6f 75 6e 74 28 64 62 29  vepointCount(db)
3dc0: 20 29 3b 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e   );.*/.static in
3dd0: 74 20 63 68 65 63 6b 53 61 76 65 70 6f 69 6e 74  t checkSavepoint
3de0: 43 6f 75 6e 74 28 73 71 6c 69 74 65 33 20 2a 64  Count(sqlite3 *d
3df0: 62 29 7b 0a 20 20 69 6e 74 20 6e 20 3d 20 30 3b  b){.  int n = 0;
3e00: 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 3b  .  Savepoint *p;
3e10: 0a 20 20 66 6f 72 28 70 3d 64 62 2d 3e 70 53 61  .  for(p=db->pSa
3e20: 76 65 70 6f 69 6e 74 3b 20 70 3b 20 70 3d 70 2d  vepoint; p; p=p-
3e30: 3e 70 4e 65 78 74 29 20 6e 2b 2b 3b 0a 20 20 61  >pNext) n++;.  a
3e40: 73 73 65 72 74 28 20 6e 3d 3d 28 64 62 2d 3e 6e  ssert( n==(db->n
3e50: 53 61 76 65 70 6f 69 6e 74 20 2b 20 64 62 2d 3e  Savepoint + db->
3e60: 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76  isTransactionSav
3e70: 65 70 6f 69 6e 74 29 20 29 3b 0a 20 20 72 65 74  epoint) );.  ret
3e80: 75 72 6e 20 31 3b 0a 7d 0a 23 65 6e 64 69 66 0a  urn 1;.}.#endif.
3e90: 0a 2f 2a 0a 2a 2a 20 54 72 61 6e 73 66 65 72 20  ./*.** Transfer 
3ea0: 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 74 65  error message te
3eb0: 78 74 20 66 72 6f 6d 20 61 6e 20 73 71 6c 69 74  xt from an sqlit
3ec0: 65 33 5f 76 74 61 62 2e 7a 45 72 72 4d 73 67 20  e3_vtab.zErrMsg 
3ed0: 28 74 65 78 74 20 73 74 6f 72 65 64 0a 2a 2a 20  (text stored.** 
3ee0: 69 6e 20 6d 65 6d 6f 72 79 20 6f 62 74 61 69 6e  in memory obtain
3ef0: 65 64 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 5f  ed from sqlite3_
3f00: 6d 61 6c 6c 6f 63 29 20 69 6e 74 6f 20 61 20 56  malloc) into a V
3f10: 64 62 65 2e 7a 45 72 72 4d 73 67 20 28 74 65 78  dbe.zErrMsg (tex
3f20: 74 20 73 74 6f 72 65 64 0a 2a 2a 20 69 6e 20 6d  t stored.** in m
3f30: 65 6d 6f 72 79 20 6f 62 74 61 69 6e 65 64 20 66  emory obtained f
3f40: 72 6f 6d 20 73 71 6c 69 74 65 33 44 62 4d 61 6c  rom sqlite3DbMal
3f50: 6c 6f 63 29 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  loc)..*/.static 
3f60: 76 6f 69 64 20 69 6d 70 6f 72 74 56 74 61 62 45  void importVtabE
3f70: 72 72 4d 73 67 28 56 64 62 65 20 2a 70 2c 20 73  rrMsg(Vdbe *p, s
3f80: 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74  qlite3_vtab *pVt
3f90: 61 62 29 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a  ab){.  sqlite3 *
3fa0: 64 62 20 3d 20 70 2d 3e 64 62 3b 0a 20 20 73 71  db = p->db;.  sq
3fb0: 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20  lite3DbFree(db, 
3fc0: 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 70  p->zErrMsg);.  p
3fd0: 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 73 71 6c 69  ->zErrMsg = sqli
3fe0: 74 65 33 44 62 53 74 72 44 75 70 28 64 62 2c 20  te3DbStrDup(db, 
3ff0: 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67 29 3b  pVtab->zErrMsg);
4000: 0a 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28  .  sqlite3_free(
4010: 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67 29 3b  pVtab->zErrMsg);
4020: 0a 20 20 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73  .  pVtab->zErrMs
4030: 67 20 3d 20 30 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a  g = 0;.}.../*.**
4040: 20 45 78 65 63 75 74 65 20 61 73 20 6d 75 63 68   Execute as much
4050: 20 6f 66 20 61 20 56 44 42 45 20 70 72 6f 67 72   of a VDBE progr
4060: 61 6d 20 61 73 20 77 65 20 63 61 6e 20 74 68 65  am as we can the
4070: 6e 20 72 65 74 75 72 6e 2e 0a 2a 2a 0a 2a 2a 20  n return..**.** 
4080: 73 71 6c 69 74 65 33 56 64 62 65 4d 61 6b 65 52  sqlite3VdbeMakeR
4090: 65 61 64 79 28 29 20 6d 75 73 74 20 62 65 20 63  eady() must be c
40a0: 61 6c 6c 65 64 20 62 65 66 6f 72 65 20 74 68 69  alled before thi
40b0: 73 20 72 6f 75 74 69 6e 65 20 69 6e 20 6f 72 64  s routine in ord
40c0: 65 72 20 74 6f 0a 2a 2a 20 63 6c 6f 73 65 20 74  er to.** close t
40d0: 68 65 20 70 72 6f 67 72 61 6d 20 77 69 74 68 20  he program with 
40e0: 61 20 66 69 6e 61 6c 20 4f 50 5f 48 61 6c 74 20  a final OP_Halt 
40f0: 61 6e 64 20 74 6f 20 73 65 74 20 75 70 20 74 68  and to set up th
4100: 65 20 63 61 6c 6c 62 61 63 6b 73 0a 2a 2a 20 61  e callbacks.** a
4110: 6e 64 20 74 68 65 20 65 72 72 6f 72 20 6d 65 73  nd the error mes
4120: 73 61 67 65 20 70 6f 69 6e 74 65 72 2e 0a 2a 2a  sage pointer..**
4130: 0a 2a 2a 20 57 68 65 6e 65 76 65 72 20 61 20 72  .** Whenever a r
4140: 6f 77 20 6f 72 20 72 65 73 75 6c 74 20 64 61 74  ow or result dat
4150: 61 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2c 20  a is available, 
4160: 74 68 69 73 20 72 6f 75 74 69 6e 65 20 77 69 6c  this routine wil
4170: 6c 20 65 69 74 68 65 72 0a 2a 2a 20 69 6e 76 6f  l either.** invo
4180: 6b 65 20 74 68 65 20 72 65 73 75 6c 74 20 63 61  ke the result ca
4190: 6c 6c 62 61 63 6b 20 28 69 66 20 74 68 65 72 65  llback (if there
41a0: 20 69 73 20 6f 6e 65 29 20 6f 72 20 72 65 74 75   is one) or retu
41b0: 72 6e 20 77 69 74 68 0a 2a 2a 20 53 51 4c 49 54  rn with.** SQLIT
41c0: 45 5f 52 4f 57 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  E_ROW..**.** If 
41d0: 61 6e 20 61 74 74 65 6d 70 74 20 69 73 20 6d 61  an attempt is ma
41e0: 64 65 20 74 6f 20 6f 70 65 6e 20 61 20 6c 6f 63  de to open a loc
41f0: 6b 65 64 20 64 61 74 61 62 61 73 65 2c 20 74 68  ked database, th
4200: 65 6e 20 74 68 69 73 20 72 6f 75 74 69 6e 65 0a  en this routine.
4210: 2a 2a 20 77 69 6c 6c 20 65 69 74 68 65 72 20 69  ** will either i
4220: 6e 76 6f 6b 65 20 74 68 65 20 62 75 73 79 20 63  nvoke the busy c
4230: 61 6c 6c 62 61 63 6b 20 28 69 66 20 74 68 65 72  allback (if ther
4240: 65 20 69 73 20 6f 6e 65 29 20 6f 72 20 69 74 20  e is one) or it 
4250: 77 69 6c 6c 0a 2a 2a 20 72 65 74 75 72 6e 20 53  will.** return S
4260: 51 4c 49 54 45 5f 42 55 53 59 2e 0a 2a 2a 0a 2a  QLITE_BUSY..**.*
4270: 2a 20 49 66 20 61 6e 20 65 72 72 6f 72 20 6f 63  * If an error oc
4280: 63 75 72 73 2c 20 61 6e 20 65 72 72 6f 72 20 6d  curs, an error m
4290: 65 73 73 61 67 65 20 69 73 20 77 72 69 74 74 65  essage is writte
42a0: 6e 20 74 6f 20 6d 65 6d 6f 72 79 20 6f 62 74 61  n to memory obta
42b0: 69 6e 65 64 0a 2a 2a 20 66 72 6f 6d 20 73 71 6c  ined.** from sql
42c0: 69 74 65 33 5f 6d 61 6c 6c 6f 63 28 29 20 61 6e  ite3_malloc() an
42d0: 64 20 70 2d 3e 7a 45 72 72 4d 73 67 20 69 73 20  d p->zErrMsg is 
42e0: 6d 61 64 65 20 74 6f 20 70 6f 69 6e 74 20 74 6f  made to point to
42f0: 20 74 68 61 74 20 6d 65 6d 6f 72 79 2e 0a 2a 2a   that memory..**
4300: 20 54 68 65 20 65 72 72 6f 72 20 63 6f 64 65 20   The error code 
4310: 69 73 20 73 74 6f 72 65 64 20 69 6e 20 70 2d 3e  is stored in p->
4320: 72 63 20 61 6e 64 20 74 68 69 73 20 72 6f 75 74  rc and this rout
4330: 69 6e 65 20 72 65 74 75 72 6e 73 20 53 51 4c 49  ine returns SQLI
4340: 54 45 5f 45 52 52 4f 52 2e 0a 2a 2a 0a 2a 2a 20  TE_ERROR..**.** 
4350: 49 66 20 74 68 65 20 63 61 6c 6c 62 61 63 6b 20  If the callback 
4360: 65 76 65 72 20 72 65 74 75 72 6e 73 20 6e 6f 6e  ever returns non
4370: 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20  -zero, then the 
4380: 70 72 6f 67 72 61 6d 20 65 78 69 74 73 0a 2a 2a  program exits.**
4390: 20 69 6d 6d 65 64 69 61 74 65 6c 79 2e 20 20 54   immediately.  T
43a0: 68 65 72 65 20 77 69 6c 6c 20 62 65 20 6e 6f 20  here will be no 
43b0: 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 62 75  error message bu
43c0: 74 20 74 68 65 20 70 2d 3e 72 63 20 66 69 65 6c  t the p->rc fiel
43d0: 64 20 69 73 0a 2a 2a 20 73 65 74 20 74 6f 20 53  d is.** set to S
43e0: 51 4c 49 54 45 5f 41 42 4f 52 54 20 61 6e 64 20  QLITE_ABORT and 
43f0: 74 68 69 73 20 72 6f 75 74 69 6e 65 20 77 69 6c  this routine wil
4400: 6c 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f  l return SQLITE_
4410: 45 52 52 4f 52 2e 0a 2a 2a 0a 2a 2a 20 41 20 6d  ERROR..**.** A m
4420: 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e  emory allocation
4430: 20 65 72 72 6f 72 20 63 61 75 73 65 73 20 70 2d   error causes p-
4440: 3e 72 63 20 74 6f 20 62 65 20 73 65 74 20 74 6f  >rc to be set to
4450: 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 61 6e   SQLITE_NOMEM an
4460: 64 20 74 68 69 73 0a 2a 2a 20 72 6f 75 74 69 6e  d this.** routin
4470: 65 20 74 6f 20 72 65 74 75 72 6e 20 53 51 4c 49  e to return SQLI
4480: 54 45 5f 45 52 52 4f 52 2e 0a 2a 2a 0a 2a 2a 20  TE_ERROR..**.** 
4490: 4f 74 68 65 72 20 66 61 74 61 6c 20 65 72 72 6f  Other fatal erro
44a0: 72 73 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45  rs return SQLITE
44b0: 5f 45 52 52 4f 52 2e 0a 2a 2a 0a 2a 2a 20 41 66  _ERROR..**.** Af
44c0: 74 65 72 20 74 68 69 73 20 72 6f 75 74 69 6e 65  ter this routine
44d0: 20 68 61 73 20 66 69 6e 69 73 68 65 64 2c 20 73   has finished, s
44e0: 71 6c 69 74 65 33 56 64 62 65 46 69 6e 61 6c 69  qlite3VdbeFinali
44f0: 7a 65 28 29 20 73 68 6f 75 6c 64 20 62 65 0a 2a  ze() should be.*
4500: 2a 20 75 73 65 64 20 74 6f 20 63 6c 65 61 6e 20  * used to clean 
4510: 75 70 20 74 68 65 20 6d 65 73 73 20 74 68 61 74  up the mess that
4520: 20 77 61 73 20 6c 65 66 74 20 62 65 68 69 6e 64   was left behind
4530: 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  ..*/.int sqlite3
4540: 56 64 62 65 45 78 65 63 28 0a 20 20 56 64 62 65  VdbeExec(.  Vdbe
4550: 20 2a 70 20 20 20 20 20 20 20 20 20 20 20 20 20   *p             
4560: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 56 44         /* The VD
4570: 42 45 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20 70  BE */.){.  int p
4580: 63 3d 30 3b 20 20 20 20 20 20 20 20 20 20 20 20  c=0;            
4590: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 70 72 6f        /* The pro
45a0: 67 72 61 6d 20 63 6f 75 6e 74 65 72 20 2a 2f 0a  gram counter */.
45b0: 20 20 4f 70 20 2a 61 4f 70 20 3d 20 70 2d 3e 61    Op *aOp = p->a
45c0: 4f 70 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  Op;          /* 
45d0: 43 6f 70 79 20 6f 66 20 70 2d 3e 61 4f 70 20 2a  Copy of p->aOp *
45e0: 2f 0a 20 20 4f 70 20 2a 70 4f 70 3b 20 20 20 20  /.  Op *pOp;    
45f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
4600: 2a 20 43 75 72 72 65 6e 74 20 6f 70 65 72 61 74  * Current operat
4610: 69 6f 6e 20 2a 2f 0a 20 20 69 6e 74 20 72 63 20  ion */.  int rc 
4620: 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 20 20 20 20  = SQLITE_OK;    
4630: 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20      /* Value to 
4640: 72 65 74 75 72 6e 20 2a 2f 0a 20 20 73 71 6c 69  return */.  sqli
4650: 74 65 33 20 2a 64 62 20 3d 20 70 2d 3e 64 62 3b  te3 *db = p->db;
4660: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61         /* The da
4670: 74 61 62 61 73 65 20 2a 2f 0a 20 20 75 38 20 72  tabase */.  u8 r
4680: 65 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c  esetSchemaOnFaul
4690: 74 20 3d 20 30 3b 20 2f 2a 20 52 65 73 65 74 20  t = 0; /* Reset 
46a0: 73 63 68 65 6d 61 20 61 66 74 65 72 20 61 6e 20  schema after an 
46b0: 65 72 72 6f 72 20 69 66 20 70 6f 73 69 74 69 76  error if positiv
46c0: 65 20 2a 2f 0a 20 20 75 38 20 65 6e 63 6f 64 69  e */.  u8 encodi
46d0: 6e 67 20 3d 20 45 4e 43 28 64 62 29 3b 20 20 20  ng = ENC(db);   
46e0: 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73    /* The databas
46f0: 65 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 23 69  e encoding */.#i
4700: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
4710: 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42  T_PROGRESS_CALLB
4720: 41 43 4b 0a 20 20 69 6e 74 20 63 68 65 63 6b 50  ACK.  int checkP
4730: 72 6f 67 72 65 73 73 3b 20 20 20 20 20 20 20 20  rogress;        
4740: 20 2f 2a 20 54 72 75 65 20 69 66 20 70 72 6f 67   /* True if prog
4750: 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 73 20 61  ress callbacks a
4760: 72 65 20 65 6e 61 62 6c 65 64 20 2a 2f 0a 20 20  re enabled */.  
4770: 69 6e 74 20 6e 50 72 6f 67 72 65 73 73 4f 70 73  int nProgressOps
4780: 20 3d 20 30 3b 20 20 20 20 20 20 2f 2a 20 4f 70   = 0;      /* Op
4790: 63 6f 64 65 73 20 65 78 65 63 75 74 65 64 20 73  codes executed s
47a0: 69 6e 63 65 20 70 72 6f 67 72 65 73 73 20 63 61  ince progress ca
47b0: 6c 6c 62 61 63 6b 2e 20 2a 2f 0a 23 65 6e 64 69  llback. */.#endi
47c0: 66 0a 20 20 4d 65 6d 20 2a 61 4d 65 6d 20 3d 20  f.  Mem *aMem = 
47d0: 70 2d 3e 61 4d 65 6d 3b 20 20 20 20 20 20 20 2f  p->aMem;       /
47e0: 2a 20 43 6f 70 79 20 6f 66 20 70 2d 3e 61 4d 65  * Copy of p->aMe
47f0: 6d 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e 31  m */.  Mem *pIn1
4800: 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 20   = 0;           
4810: 20 20 2f 2a 20 31 73 74 20 69 6e 70 75 74 20 6f    /* 1st input o
4820: 70 65 72 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20  perand */.  Mem 
4830: 2a 70 49 6e 32 20 3d 20 30 3b 20 20 20 20 20 20  *pIn2 = 0;      
4840: 20 20 20 20 20 20 20 2f 2a 20 32 6e 64 20 69 6e         /* 2nd in
4850: 70 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20  put operand */. 
4860: 20 4d 65 6d 20 2a 70 49 6e 33 20 3d 20 30 3b 20   Mem *pIn3 = 0; 
4870: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 33              /* 3
4880: 72 64 20 69 6e 70 75 74 20 6f 70 65 72 61 6e 64  rd input operand
4890: 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4f 75 74 20   */.  Mem *pOut 
48a0: 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 20 20  = 0;            
48b0: 20 2f 2a 20 4f 75 74 70 75 74 20 6f 70 65 72 61   /* Output opera
48c0: 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 69 43 6f 6d  nd */.  int iCom
48d0: 70 61 72 65 20 3d 20 30 3b 20 20 20 20 20 20 20  pare = 0;       
48e0: 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20     /* Result of 
48f0: 6c 61 73 74 20 4f 50 5f 43 6f 6d 70 61 72 65 20  last OP_Compare 
4900: 6f 70 65 72 61 74 69 6f 6e 20 2a 2f 0a 20 20 69  operation */.  i
4910: 6e 74 20 2a 61 50 65 72 6d 75 74 65 20 3d 20 30  nt *aPermute = 0
4920: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 50 65 72  ;         /* Per
4930: 6d 75 74 61 74 69 6f 6e 20 6f 66 20 63 6f 6c 75  mutation of colu
4940: 6d 6e 73 20 66 6f 72 20 4f 50 5f 43 6f 6d 70 61  mns for OP_Compa
4950: 72 65 20 2a 2f 0a 20 20 69 36 34 20 6c 61 73 74  re */.  i64 last
4960: 52 6f 77 69 64 20 3d 20 64 62 2d 3e 6c 61 73 74  Rowid = db->last
4970: 52 6f 77 69 64 3b 20 20 2f 2a 20 53 61 76 65 64  Rowid;  /* Saved
4980: 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 6c 61   value of the la
4990: 73 74 20 69 6e 73 65 72 74 20 52 4f 57 49 44 20  st insert ROWID 
49a0: 2a 2f 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50  */.#ifdef VDBE_P
49b0: 52 4f 46 49 4c 45 0a 20 20 75 36 34 20 73 74 61  ROFILE.  u64 sta
49c0: 72 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rt;             
49d0: 20 20 20 20 2f 2a 20 43 50 55 20 63 6c 6f 63 6b      /* CPU clock
49e0: 20 63 6f 75 6e 74 20 61 74 20 73 74 61 72 74 20   count at start 
49f0: 6f 66 20 6f 70 63 6f 64 65 20 2a 2f 0a 20 20 69  of opcode */.  i
4a00: 6e 74 20 6f 72 69 67 50 63 3b 20 20 20 20 20 20  nt origPc;      
4a10: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 72 6f            /* Pro
4a20: 67 72 61 6d 20 63 6f 75 6e 74 65 72 20 61 74 20  gram counter at 
4a30: 73 74 61 72 74 20 6f 66 20 6f 70 63 6f 64 65 20  start of opcode 
4a40: 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 2f 2a 2a 2a  */.#endif.  /***
4a50: 20 49 4e 53 45 52 54 20 53 54 41 43 4b 20 55 4e   INSERT STACK UN
4a60: 49 4f 4e 20 48 45 52 45 20 2a 2a 2a 2f 0a 0a 20  ION HERE ***/.. 
4a70: 20 61 73 73 65 72 74 28 20 70 2d 3e 6d 61 67 69   assert( p->magi
4a80: 63 3d 3d 56 44 42 45 5f 4d 41 47 49 43 5f 52 55  c==VDBE_MAGIC_RU
4a90: 4e 20 29 3b 20 20 2f 2a 20 73 71 6c 69 74 65 33  N );  /* sqlite3
4aa0: 5f 73 74 65 70 28 29 20 76 65 72 69 66 69 65 73  _step() verifies
4ab0: 20 74 68 69 73 20 2a 2f 0a 20 20 73 71 6c 69 74   this */.  sqlit
4ac0: 65 33 56 64 62 65 45 6e 74 65 72 28 70 29 3b 0a  e3VdbeEnter(p);.
4ad0: 20 20 69 66 28 20 70 2d 3e 72 63 3d 3d 53 51 4c    if( p->rc==SQL
4ae0: 49 54 45 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20  ITE_NOMEM ){.   
4af0: 20 2f 2a 20 54 68 69 73 20 68 61 70 70 65 6e 73   /* This happens
4b00: 20 69 66 20 61 20 6d 61 6c 6c 6f 63 28 29 20 69   if a malloc() i
4b10: 6e 73 69 64 65 20 61 20 63 61 6c 6c 20 74 6f 20  nside a call to 
4b20: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
4b30: 65 78 74 28 29 20 6f 72 0a 20 20 20 20 2a 2a 20  ext() or.    ** 
4b40: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
4b50: 65 78 74 31 36 28 29 20 66 61 69 6c 65 64 2e 20  ext16() failed. 
4b60: 20 2a 2f 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f   */.    goto no_
4b70: 6d 65 6d 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72  mem;.  }.  asser
4b80: 74 28 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45  t( p->rc==SQLITE
4b90: 5f 4f 4b 20 7c 7c 20 70 2d 3e 72 63 3d 3d 53 51  _OK || p->rc==SQ
4ba0: 4c 49 54 45 5f 42 55 53 59 20 7c 7c 20 28 28 70  LITE_BUSY || ((p
4bb0: 2d 3e 72 63 26 30 78 46 46 29 20 3d 3d 20 53 51  ->rc&0xFF) == SQ
4bc0: 4c 49 54 45 5f 4c 4f 43 4b 45 44 29 29 3b 0a 20  LITE_LOCKED));. 
4bd0: 20 70 2d 3e 72 63 20 3d 20 53 51 4c 49 54 45 5f   p->rc = SQLITE_
4be0: 4f 4b 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d  OK;.  assert( p-
4bf0: 3e 65 78 70 6c 61 69 6e 3d 3d 30 20 29 3b 0a 20  >explain==0 );. 
4c00: 20 70 2d 3e 70 52 65 73 75 6c 74 53 65 74 20 3d   p->pResultSet =
4c10: 20 30 3b 0a 20 20 64 62 2d 3e 62 75 73 79 48 61   0;.  db->busyHa
4c20: 6e 64 6c 65 72 2e 6e 42 75 73 79 20 3d 20 30 3b  ndler.nBusy = 0;
4c30: 0a 20 20 43 48 45 43 4b 5f 46 4f 52 5f 49 4e 54  .  CHECK_FOR_INT
4c40: 45 52 52 55 50 54 3b 0a 20 20 73 71 6c 69 74 65  ERRUPT;.  sqlite
4c50: 33 56 64 62 65 49 4f 54 72 61 63 65 53 71 6c 28  3VdbeIOTraceSql(
4c60: 70 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  p);.#ifndef SQLI
4c70: 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53  TE_OMIT_PROGRESS
4c80: 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 63 68 65 63  _CALLBACK.  chec
4c90: 6b 50 72 6f 67 72 65 73 73 20 3d 20 64 62 2d 3e  kProgress = db->
4ca0: 78 50 72 6f 67 72 65 73 73 21 3d 30 3b 0a 23 65  xProgress!=0;.#e
4cb0: 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49  ndif.#ifdef SQLI
4cc0: 54 45 5f 44 45 42 55 47 0a 20 20 73 71 6c 69 74  TE_DEBUG.  sqlit
4cd0: 65 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c  e3BeginBenignMal
4ce0: 6c 6f 63 28 29 3b 0a 20 20 69 66 28 20 70 2d 3e  loc();.  if( p->
4cf0: 70 63 3d 3d 30 20 20 26 26 20 28 70 2d 3e 64 62  pc==0  && (p->db
4d00: 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45  ->flags & SQLITE
4d10: 5f 56 64 62 65 4c 69 73 74 69 6e 67 29 21 3d 30  _VdbeListing)!=0
4d20: 20 29 7b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20   ){.    int i;. 
4d30: 20 20 20 70 72 69 6e 74 66 28 22 56 44 42 45 20     printf("VDBE 
4d40: 50 72 6f 67 72 61 6d 20 4c 69 73 74 69 6e 67 3a  Program Listing:
4d50: 5c 6e 22 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  \n");.    sqlite
4d60: 33 56 64 62 65 50 72 69 6e 74 53 71 6c 28 70 29  3VdbePrintSql(p)
4d70: 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69  ;.    for(i=0; i
4d80: 3c 70 2d 3e 6e 4f 70 3b 20 69 2b 2b 29 7b 0a 20  <p->nOp; i++){. 
4d90: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
4da0: 50 72 69 6e 74 4f 70 28 73 74 64 6f 75 74 2c 20  PrintOp(stdout, 
4db0: 69 2c 20 26 61 4f 70 5b 69 5d 29 3b 0a 20 20 20  i, &aOp[i]);.   
4dc0: 20 7d 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33   }.  }.  sqlite3
4dd0: 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28  EndBenignMalloc(
4de0: 29 3b 0a 23 65 6e 64 69 66 0a 20 20 66 6f 72 28  );.#endif.  for(
4df0: 70 63 3d 70 2d 3e 70 63 3b 20 72 63 3d 3d 53 51  pc=p->pc; rc==SQ
4e00: 4c 49 54 45 5f 4f 4b 3b 20 70 63 2b 2b 29 7b 0a  LITE_OK; pc++){.
4e10: 20 20 20 20 61 73 73 65 72 74 28 20 70 63 3e 3d      assert( pc>=
4e20: 30 20 26 26 20 70 63 3c 70 2d 3e 6e 4f 70 20 29  0 && pc<p->nOp )
4e30: 3b 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 6d 61  ;.    if( db->ma
4e40: 6c 6c 6f 63 46 61 69 6c 65 64 20 29 20 67 6f 74  llocFailed ) got
4e50: 6f 20 6e 6f 5f 6d 65 6d 3b 0a 23 69 66 64 65 66  o no_mem;.#ifdef
4e60: 20 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 20 20   VDBE_PROFILE.  
4e70: 20 20 6f 72 69 67 50 63 20 3d 20 70 63 3b 0a 20    origPc = pc;. 
4e80: 20 20 20 73 74 61 72 74 20 3d 20 73 71 6c 69 74     start = sqlit
4e90: 65 33 48 77 74 69 6d 65 28 29 3b 0a 23 65 6e 64  e3Hwtime();.#end
4ea0: 69 66 0a 20 20 20 20 70 4f 70 20 3d 20 26 61 4f  if.    pOp = &aO
4eb0: 70 5b 70 63 5d 3b 0a 0a 20 20 20 20 2f 2a 20 4f  p[pc];..    /* O
4ec0: 6e 6c 79 20 61 6c 6c 6f 77 20 74 72 61 63 69 6e  nly allow tracin
4ed0: 67 20 69 66 20 53 51 4c 49 54 45 5f 44 45 42 55  g if SQLITE_DEBU
4ee0: 47 20 69 73 20 64 65 66 69 6e 65 64 2e 0a 20 20  G is defined..  
4ef0: 20 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49    */.#ifdef SQLI
4f00: 54 45 5f 44 45 42 55 47 0a 20 20 20 20 69 66 28  TE_DEBUG.    if(
4f10: 20 70 2d 3e 74 72 61 63 65 20 29 7b 0a 20 20 20   p->trace ){.   
4f20: 20 20 20 69 66 28 20 70 63 3d 3d 30 20 29 7b 0a     if( pc==0 ){.
4f30: 20 20 20 20 20 20 20 20 70 72 69 6e 74 66 28 22          printf("
4f40: 56 44 42 45 20 45 78 65 63 75 74 69 6f 6e 20 54  VDBE Execution T
4f50: 72 61 63 65 3a 5c 6e 22 29 3b 0a 20 20 20 20 20  race:\n");.     
4f60: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 50 72     sqlite3VdbePr
4f70: 69 6e 74 53 71 6c 28 70 29 3b 0a 20 20 20 20 20  intSql(p);.     
4f80: 20 7d 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33   }.      sqlite3
4f90: 56 64 62 65 50 72 69 6e 74 4f 70 28 70 2d 3e 74  VdbePrintOp(p->t
4fa0: 72 61 63 65 2c 20 70 63 2c 20 70 4f 70 29 3b 0a  race, pc, pOp);.
4fb0: 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20      }.#endif.   
4fc0: 20 20 20 0a 0a 20 20 20 20 2f 2a 20 43 68 65 63     ..    /* Chec
4fd0: 6b 20 74 6f 20 73 65 65 20 69 66 20 77 65 20 6e  k to see if we n
4fe0: 65 65 64 20 74 6f 20 73 69 6d 75 6c 61 74 65 20  eed to simulate 
4ff0: 61 6e 20 69 6e 74 65 72 72 75 70 74 2e 20 20 54  an interrupt.  T
5000: 68 69 73 20 6f 6e 6c 79 20 68 61 70 70 65 6e 73  his only happens
5010: 0a 20 20 20 20 2a 2a 20 69 66 20 77 65 20 68 61  .    ** if we ha
5020: 76 65 20 61 20 73 70 65 63 69 61 6c 20 74 65 73  ve a special tes
5030: 74 20 62 75 69 6c 64 2e 0a 20 20 20 20 2a 2f 0a  t build..    */.
5040: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45  #ifdef SQLITE_TE
5050: 53 54 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74  ST.    if( sqlit
5060: 65 33 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75  e3_interrupt_cou
5070: 6e 74 3e 30 20 29 7b 0a 20 20 20 20 20 20 73 71  nt>0 ){.      sq
5080: 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 5f  lite3_interrupt_
5090: 63 6f 75 6e 74 2d 2d 3b 0a 20 20 20 20 20 20 69  count--;.      i
50a0: 66 28 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72  f( sqlite3_inter
50b0: 72 75 70 74 5f 63 6f 75 6e 74 3d 3d 30 20 29 7b  rupt_count==0 ){
50c0: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
50d0: 5f 69 6e 74 65 72 72 75 70 74 28 64 62 29 3b 0a  _interrupt(db);.
50e0: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 23 65        }.    }.#e
50f0: 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51  ndif..#ifndef SQ
5100: 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45  LITE_OMIT_PROGRE
5110: 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 20 20  SS_CALLBACK.    
5120: 2f 2a 20 43 61 6c 6c 20 74 68 65 20 70 72 6f 67  /* Call the prog
5130: 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 69 66  ress callback if
5140: 20 69 74 20 69 73 20 63 6f 6e 66 69 67 75 72 65   it is configure
5150: 64 20 61 6e 64 20 74 68 65 20 72 65 71 75 69 72  d and the requir
5160: 65 64 20 6e 75 6d 62 65 72 0a 20 20 20 20 2a 2a  ed number.    **
5170: 20 6f 66 20 56 44 42 45 20 6f 70 73 20 68 61 76   of VDBE ops hav
5180: 65 20 62 65 65 6e 20 65 78 65 63 75 74 65 64 20  e been executed 
5190: 28 65 69 74 68 65 72 20 73 69 6e 63 65 20 74 68  (either since th
51a0: 69 73 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66  is invocation of
51b0: 0a 20 20 20 20 2a 2a 20 73 71 6c 69 74 65 33 56  .    ** sqlite3V
51c0: 64 62 65 45 78 65 63 28 29 20 6f 72 20 73 69 6e  dbeExec() or sin
51d0: 63 65 20 6c 61 73 74 20 74 69 6d 65 20 74 68 65  ce last time the
51e0: 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61   progress callba
51f0: 63 6b 20 77 61 73 20 63 61 6c 6c 65 64 29 2e 0a  ck was called)..
5200: 20 20 20 20 2a 2a 20 49 66 20 74 68 65 20 70 72      ** If the pr
5210: 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20  ogress callback 
5220: 72 65 74 75 72 6e 73 20 6e 6f 6e 2d 7a 65 72 6f  returns non-zero
5230: 2c 20 65 78 69 74 20 74 68 65 20 76 69 72 74 75  , exit the virtu
5240: 61 6c 20 6d 61 63 68 69 6e 65 20 77 69 74 68 0a  al machine with.
5250: 20 20 20 20 2a 2a 20 61 20 72 65 74 75 72 6e 20      ** a return 
5260: 63 6f 64 65 20 53 51 4c 49 54 45 5f 41 42 4f 52  code SQLITE_ABOR
5270: 54 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66  T..    */.    if
5280: 28 20 63 68 65 63 6b 50 72 6f 67 72 65 73 73 20  ( checkProgress 
5290: 29 7b 0a 20 20 20 20 20 20 69 66 28 20 64 62 2d  ){.      if( db-
52a0: 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 3d 3d 6e  >nProgressOps==n
52b0: 50 72 6f 67 72 65 73 73 4f 70 73 20 29 7b 0a 20  ProgressOps ){. 
52c0: 20 20 20 20 20 20 20 69 6e 74 20 70 72 63 3b 0a         int prc;.
52d0: 20 20 20 20 20 20 20 20 70 72 63 20 3d 20 64 62          prc = db
52e0: 2d 3e 78 50 72 6f 67 72 65 73 73 28 64 62 2d 3e  ->xProgress(db->
52f0: 70 50 72 6f 67 72 65 73 73 41 72 67 29 3b 0a 20  pProgressArg);. 
5300: 20 20 20 20 20 20 20 69 66 28 20 70 72 63 21 3d         if( prc!=
5310: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 72  0 ){.          r
5320: 63 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45 52  c = SQLITE_INTER
5330: 52 55 50 54 3b 0a 20 20 20 20 20 20 20 20 20 20  RUPT;.          
5340: 67 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f  goto vdbe_error_
5350: 68 61 6c 74 3b 0a 20 20 20 20 20 20 20 20 7d 0a  halt;.        }.
5360: 20 20 20 20 20 20 20 20 6e 50 72 6f 67 72 65 73          nProgres
5370: 73 4f 70 73 20 3d 20 30 3b 0a 20 20 20 20 20 20  sOps = 0;.      
5380: 7d 0a 20 20 20 20 20 20 6e 50 72 6f 67 72 65 73  }.      nProgres
5390: 73 4f 70 73 2b 2b 3b 0a 20 20 20 20 7d 0a 23 65  sOps++;.    }.#e
53a0: 6e 64 69 66 0a 0a 20 20 20 20 2f 2a 20 4f 6e 20  ndif..    /* On 
53b0: 61 6e 79 20 6f 70 63 6f 64 65 20 77 69 74 68 20  any opcode with 
53c0: 74 68 65 20 22 6f 75 74 32 2d 70 72 65 72 65 6c  the "out2-prerel
53d0: 61 73 65 22 20 74 61 67 2c 20 66 72 65 65 20 61  ase" tag, free a
53e0: 6e 79 0a 20 20 20 20 2a 2a 20 65 78 74 65 72 6e  ny.    ** extern
53f0: 61 6c 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 6f  al allocations o
5400: 75 74 20 6f 66 20 6d 65 6d 5b 70 32 5d 20 61 6e  ut of mem[p2] an
5410: 64 20 73 65 74 20 6d 65 6d 5b 70 32 5d 20 74 6f  d set mem[p2] to
5420: 20 62 65 0a 20 20 20 20 2a 2a 20 61 6e 20 75 6e   be.    ** an un
5430: 64 65 66 69 6e 65 64 20 69 6e 74 65 67 65 72 2e  defined integer.
5440: 20 20 4f 70 63 6f 64 65 73 20 77 69 6c 6c 20 65    Opcodes will e
5450: 69 74 68 65 72 20 66 69 6c 6c 20 69 6e 20 74 68  ither fill in th
5460: 65 20 69 6e 74 65 67 65 72 0a 20 20 20 20 2a 2a  e integer.    **
5470: 20 76 61 6c 75 65 20 6f 72 20 63 6f 6e 76 65 72   value or conver
5480: 74 20 6d 65 6d 5b 70 32 5d 20 74 6f 20 61 20 64  t mem[p2] to a d
5490: 69 66 66 65 72 65 6e 74 20 74 79 70 65 2e 0a 20  ifferent type.. 
54a0: 20 20 20 2a 2f 0a 20 20 20 20 61 73 73 65 72 74     */.    assert
54b0: 28 20 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 3d 3d  ( pOp->opflags==
54c0: 73 71 6c 69 74 65 33 4f 70 63 6f 64 65 50 72 6f  sqlite3OpcodePro
54d0: 70 65 72 74 79 5b 70 4f 70 2d 3e 6f 70 63 6f 64  perty[pOp->opcod
54e0: 65 5d 20 29 3b 0a 20 20 20 20 69 66 28 20 70 4f  e] );.    if( pO
54f0: 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50 46  p->opflags & OPF
5500: 4c 47 5f 4f 55 54 32 5f 50 52 45 52 45 4c 45 41  LG_OUT2_PRERELEA
5510: 53 45 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65  SE ){.      asse
5520: 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b  rt( pOp->p2>0 );
5530: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
5540: 4f 70 2d 3e 70 32 3c 3d 70 2d 3e 6e 4d 65 6d 20  Op->p2<=p->nMem 
5550: 29 3b 0a 20 20 20 20 20 20 70 4f 75 74 20 3d 20  );.      pOut = 
5560: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
5570: 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f        memAboutTo
5580: 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b  Change(p, pOut);
5590: 0a 20 20 20 20 20 20 4d 65 6d 52 65 6c 65 61 73  .      MemReleas
55a0: 65 45 78 74 28 70 4f 75 74 29 3b 0a 20 20 20 20  eExt(pOut);.    
55b0: 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20    pOut->flags = 
55c0: 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 7d 0a 0a  MEM_Int;.    }..
55d0: 20 20 20 20 2f 2a 20 53 61 6e 69 74 79 20 63 68      /* Sanity ch
55e0: 65 63 6b 69 6e 67 20 6f 6e 20 6f 74 68 65 72 20  ecking on other 
55f0: 6f 70 65 72 61 6e 64 73 20 2a 2f 0a 23 69 66 64  operands */.#ifd
5600: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
5610: 20 20 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70      if( (pOp->op
5620: 66 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f 49 4e  flags & OPFLG_IN
5630: 31 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 61  1)!=0 ){.      a
5640: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30  ssert( pOp->p1>0
5650: 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
5660: 28 20 70 4f 70 2d 3e 70 31 3c 3d 70 2d 3e 6e 4d  ( pOp->p1<=p->nM
5670: 65 6d 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  em );.      asse
5680: 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26  rt( memIsValid(&
5690: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 29 20 29  aMem[pOp->p1]) )
56a0: 3b 0a 20 20 20 20 20 20 52 45 47 49 53 54 45 52  ;.      REGISTER
56b0: 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20  _TRACE(pOp->p1, 
56c0: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 29 3b  &aMem[pOp->p1]);
56d0: 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 28  .    }.    if( (
56e0: 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f  pOp->opflags & O
56f0: 50 46 4c 47 5f 49 4e 32 29 21 3d 30 20 29 7b 0a  PFLG_IN2)!=0 ){.
5700: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
5710: 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 20 20 20  p->p2>0 );.     
5720: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
5730: 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20  <=p->nMem );.   
5740: 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
5750: 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70 2d  Valid(&aMem[pOp-
5760: 3e 70 32 5d 29 20 29 3b 0a 20 20 20 20 20 20 52  >p2]) );.      R
5770: 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
5780: 70 2d 3e 70 32 2c 20 26 61 4d 65 6d 5b 70 4f 70  p->p2, &aMem[pOp
5790: 2d 3e 70 32 5d 29 3b 0a 20 20 20 20 7d 0a 20 20  ->p2]);.    }.  
57a0: 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70 66 6c    if( (pOp->opfl
57b0: 61 67 73 20 26 20 4f 50 46 4c 47 5f 49 4e 33 29  ags & OPFLG_IN3)
57c0: 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73  !=0 ){.      ass
57d0: 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29  ert( pOp->p3>0 )
57e0: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
57f0: 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d  pOp->p3<=p->nMem
5800: 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
5810: 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d  ( memIsValid(&aM
5820: 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 20 29 3b 0a  em[pOp->p3]) );.
5830: 20 20 20 20 20 20 52 45 47 49 53 54 45 52 5f 54        REGISTER_T
5840: 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 26 61  RACE(pOp->p3, &a
5850: 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20  Mem[pOp->p3]);. 
5860: 20 20 20 7d 0a 20 20 20 20 69 66 28 20 28 70 4f     }.    if( (pO
5870: 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50 46  p->opflags & OPF
5880: 4c 47 5f 4f 55 54 32 29 21 3d 30 20 29 7b 0a 20  LG_OUT2)!=0 ){. 
5890: 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
58a0: 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 20 20 20 20  ->p2>0 );.      
58b0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c  assert( pOp->p2<
58c0: 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20  =p->nMem );.    
58d0: 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
58e0: 67 65 28 70 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d  ge(p, &aMem[pOp-
58f0: 3e 70 32 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 20  >p2]);.    }.   
5900: 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70 66 6c 61   if( (pOp->opfla
5910: 67 73 20 26 20 4f 50 46 4c 47 5f 4f 55 54 33 29  gs & OPFLG_OUT3)
5920: 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73  !=0 ){.      ass
5930: 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29  ert( pOp->p3>0 )
5940: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
5950: 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d  pOp->p3<=p->nMem
5960: 20 29 3b 0a 20 20 20 20 20 20 6d 65 6d 41 62 6f   );.      memAbo
5970: 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 26 61  utToChange(p, &a
5980: 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20  Mem[pOp->p3]);. 
5990: 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 0a 20     }.#endif.  . 
59a0: 20 20 20 73 77 69 74 63 68 28 20 70 4f 70 2d 3e     switch( pOp->
59b0: 6f 70 63 6f 64 65 20 29 7b 0a 0a 2f 2a 2a 2a 2a  opcode ){../****
59c0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
59d0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
59e0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
59f0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5a00: 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 57 68 61  *********.** Wha
5a10: 74 20 66 6f 6c 6c 6f 77 73 20 69 73 20 61 20 6d  t follows is a m
5a20: 61 73 73 69 76 65 20 73 77 69 74 63 68 20 73 74  assive switch st
5a30: 61 74 65 6d 65 6e 74 20 77 68 65 72 65 20 65 61  atement where ea
5a40: 63 68 20 63 61 73 65 20 69 6d 70 6c 65 6d 65 6e  ch case implemen
5a50: 74 73 20 61 0a 2a 2a 20 73 65 70 61 72 61 74 65  ts a.** separate
5a60: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 6e 20   instruction in 
5a70: 74 68 65 20 76 69 72 74 75 61 6c 20 6d 61 63 68  the virtual mach
5a80: 69 6e 65 2e 20 20 49 66 20 77 65 20 66 6f 6c 6c  ine.  If we foll
5a90: 6f 77 20 74 68 65 20 75 73 75 61 6c 0a 2a 2a 20  ow the usual.** 
5aa0: 69 6e 64 65 6e 74 61 74 69 6f 6e 20 63 6f 6e 76  indentation conv
5ab0: 65 6e 74 69 6f 6e 73 2c 20 65 61 63 68 20 63 61  entions, each ca
5ac0: 73 65 20 73 68 6f 75 6c 64 20 62 65 20 69 6e 64  se should be ind
5ad0: 65 6e 74 65 64 20 62 79 20 36 20 73 70 61 63 65  ented by 6 space
5ae0: 73 2e 20 20 42 75 74 0a 2a 2a 20 74 68 61 74 20  s.  But.** that 
5af0: 69 73 20 61 20 6c 6f 74 20 6f 66 20 77 61 73 74  is a lot of wast
5b00: 65 64 20 73 70 61 63 65 20 6f 6e 20 74 68 65 20  ed space on the 
5b10: 6c 65 66 74 20 6d 61 72 67 69 6e 2e 20 20 53 6f  left margin.  So
5b20: 20 74 68 65 20 63 6f 64 65 20 77 69 74 68 69 6e   the code within
5b30: 0a 2a 2a 20 74 68 65 20 73 77 69 74 63 68 20 73  .** the switch s
5b40: 74 61 74 65 6d 65 6e 74 20 77 69 6c 6c 20 62 72  tatement will br
5b50: 65 61 6b 20 77 69 74 68 20 63 6f 6e 76 65 6e 74  eak with convent
5b60: 69 6f 6e 20 61 6e 64 20 62 65 20 66 6c 75 73 68  ion and be flush
5b70: 2d 6c 65 66 74 2e 20 41 6e 6f 74 68 65 72 0a 2a  -left. Another.*
5b80: 2a 20 62 69 67 20 63 6f 6d 6d 65 6e 74 20 28 73  * big comment (s
5b90: 69 6d 69 6c 61 72 20 74 6f 20 74 68 69 73 20 6f  imilar to this o
5ba0: 6e 65 29 20 77 69 6c 6c 20 6d 61 72 6b 20 74 68  ne) will mark th
5bb0: 65 20 70 6f 69 6e 74 20 69 6e 20 74 68 65 20 63  e point in the c
5bc0: 6f 64 65 20 77 68 65 72 65 0a 2a 2a 20 77 65 20  ode where.** we 
5bd0: 74 72 61 6e 73 69 74 69 6f 6e 20 62 61 63 6b 20  transition back 
5be0: 74 6f 20 6e 6f 72 6d 61 6c 20 69 6e 64 65 6e 74  to normal indent
5bf0: 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  ation..**.** The
5c00: 20 66 6f 72 6d 61 74 74 69 6e 67 20 6f 66 20 65   formatting of e
5c10: 61 63 68 20 63 61 73 65 20 69 73 20 69 6d 70 6f  ach case is impo
5c20: 72 74 61 6e 74 2e 20 20 54 68 65 20 6d 61 6b 65  rtant.  The make
5c30: 66 69 6c 65 20 66 6f 72 20 53 51 4c 69 74 65 0a  file for SQLite.
5c40: 2a 2a 20 67 65 6e 65 72 61 74 65 73 20 74 77 6f  ** generates two
5c50: 20 43 20 66 69 6c 65 73 20 22 6f 70 63 6f 64 65   C files "opcode
5c60: 73 2e 68 22 20 61 6e 64 20 22 6f 70 63 6f 64 65  s.h" and "opcode
5c70: 73 2e 63 22 20 62 79 20 73 63 61 6e 6e 69 6e 67  s.c" by scanning
5c80: 20 74 68 69 73 0a 2a 2a 20 66 69 6c 65 20 6c 6f   this.** file lo
5c90: 6f 6b 69 6e 67 20 66 6f 72 20 6c 69 6e 65 73 20  oking for lines 
5ca0: 74 68 61 74 20 62 65 67 69 6e 20 77 69 74 68 20  that begin with 
5cb0: 22 63 61 73 65 20 4f 50 5f 22 2e 20 20 54 68 65  "case OP_".  The
5cc0: 20 6f 70 63 6f 64 65 73 2e 68 20 66 69 6c 65 73   opcodes.h files
5cd0: 0a 2a 2a 20 77 69 6c 6c 20 62 65 20 66 69 6c 6c  .** will be fill
5ce0: 65 64 20 77 69 74 68 20 23 64 65 66 69 6e 65 73  ed with #defines
5cf0: 20 74 68 61 74 20 67 69 76 65 20 75 6e 69 71 75   that give uniqu
5d00: 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 73  e integer values
5d10: 20 74 6f 20 65 61 63 68 0a 2a 2a 20 6f 70 63 6f   to each.** opco
5d20: 64 65 20 61 6e 64 20 74 68 65 20 6f 70 63 6f 64  de and the opcod
5d30: 65 73 2e 63 20 66 69 6c 65 20 69 73 20 66 69 6c  es.c file is fil
5d40: 6c 65 64 20 77 69 74 68 20 61 6e 20 61 72 72 61  led with an arra
5d50: 79 20 6f 66 20 73 74 72 69 6e 67 73 20 77 68 65  y of strings whe
5d60: 72 65 0a 2a 2a 20 65 61 63 68 20 73 74 72 69 6e  re.** each strin
5d70: 67 20 69 73 20 74 68 65 20 73 79 6d 62 6f 6c 69  g is the symboli
5d80: 63 20 6e 61 6d 65 20 66 6f 72 20 74 68 65 20 63  c name for the c
5d90: 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 6f 70 63  orresponding opc
5da0: 6f 64 65 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20  ode.  If the.** 
5db0: 63 61 73 65 20 73 74 61 74 65 6d 65 6e 74 20 69  case statement i
5dc0: 73 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20  s followed by a 
5dd0: 63 6f 6d 6d 65 6e 74 20 6f 66 20 74 68 65 20 66  comment of the f
5de0: 6f 72 6d 20 22 2f 23 20 73 61 6d 65 20 61 73 20  orm "/# same as 
5df0: 2e 2e 2e 20 23 2f 22 0a 2a 2a 20 74 68 61 74 20  ... #/".** that 
5e00: 63 6f 6d 6d 65 6e 74 20 69 73 20 75 73 65 64 20  comment is used 
5e10: 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65  to determine the
5e20: 20 70 61 72 74 69 63 75 6c 61 72 20 76 61 6c 75   particular valu
5e30: 65 20 6f 66 20 74 68 65 20 6f 70 63 6f 64 65 2e  e of the opcode.
5e40: 0a 2a 2a 0a 2a 2a 20 4f 74 68 65 72 20 6b 65 79  .**.** Other key
5e50: 77 6f 72 64 73 20 69 6e 20 74 68 65 20 63 6f 6d  words in the com
5e60: 6d 65 6e 74 20 74 68 61 74 20 66 6f 6c 6c 6f 77  ment that follow
5e70: 73 20 65 61 63 68 20 63 61 73 65 20 61 72 65 20  s each case are 
5e80: 75 73 65 64 20 74 6f 0a 2a 2a 20 63 6f 6e 73 74  used to.** const
5e90: 72 75 63 74 20 74 68 65 20 4f 50 46 4c 47 5f 49  ruct the OPFLG_I
5ea0: 4e 49 54 49 41 4c 49 5a 45 52 20 76 61 6c 75 65  NITIALIZER value
5eb0: 20 74 68 61 74 20 69 6e 69 74 69 61 6c 69 7a 65   that initialize
5ec0: 73 20 6f 70 63 6f 64 65 50 72 6f 70 65 72 74 79  s opcodeProperty
5ed0: 5b 5d 2e 0a 2a 2a 20 4b 65 79 77 6f 72 64 73 20  []..** Keywords 
5ee0: 69 6e 63 6c 75 64 65 3a 20 69 6e 31 2c 20 69 6e  include: in1, in
5ef0: 32 2c 20 69 6e 33 2c 20 6f 75 74 32 5f 70 72 65  2, in3, out2_pre
5f00: 72 65 6c 65 61 73 65 2c 20 6f 75 74 32 2c 20 6f  release, out2, o
5f10: 75 74 33 2e 20 20 53 65 65 0a 2a 2a 20 74 68 65  ut3.  See.** the
5f20: 20 6d 6b 6f 70 63 6f 64 65 68 2e 61 77 6b 20 73   mkopcodeh.awk s
5f30: 63 72 69 70 74 20 66 6f 72 20 61 64 64 69 74 69  cript for additi
5f40: 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  onal information
5f50: 2e 0a 2a 2a 0a 2a 2a 20 44 6f 63 75 6d 65 6e 74  ..**.** Document
5f60: 61 74 69 6f 6e 20 61 62 6f 75 74 20 56 44 42 45  ation about VDBE
5f70: 20 6f 70 63 6f 64 65 73 20 69 73 20 67 65 6e 65   opcodes is gene
5f80: 72 61 74 65 64 20 62 79 20 73 63 61 6e 6e 69 6e  rated by scannin
5f90: 67 20 74 68 69 73 20 66 69 6c 65 0a 2a 2a 20 66  g this file.** f
5fa0: 6f 72 20 6c 69 6e 65 73 20 6f 66 20 74 68 61 74  or lines of that
5fb0: 20 63 6f 6e 74 61 69 6e 20 22 4f 70 63 6f 64 65   contain "Opcode
5fc0: 3a 22 2e 20 20 54 68 61 74 20 6c 69 6e 65 20 61  :".  That line a
5fd0: 6e 64 20 61 6c 6c 20 73 75 62 73 65 71 75 65 6e  nd all subsequen
5fe0: 74 0a 2a 2a 20 63 6f 6d 6d 65 6e 74 20 6c 69 6e  t.** comment lin
5ff0: 65 73 20 61 72 65 20 75 73 65 64 20 69 6e 20 74  es are used in t
6000: 68 65 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66  he generation of
6010: 20 74 68 65 20 6f 70 63 6f 64 65 2e 68 74 6d 6c   the opcode.html
6020: 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 0a 2a   documentation.*
6030: 2a 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53 55  * file..**.** SU
6040: 4d 4d 41 52 59 3a 0a 2a 2a 0a 2a 2a 20 20 20 20  MMARY:.**.**    
6050: 20 46 6f 72 6d 61 74 74 69 6e 67 20 69 73 20 69   Formatting is i
6060: 6d 70 6f 72 74 61 6e 74 20 74 6f 20 73 63 72 69  mportant to scri
6070: 70 74 73 20 74 68 61 74 20 73 63 61 6e 20 74 68  pts that scan th
6080: 69 73 20 66 69 6c 65 2e 0a 2a 2a 20 20 20 20 20  is file..**     
6090: 44 6f 20 6e 6f 74 20 64 65 76 69 61 74 65 20 66  Do not deviate f
60a0: 72 6f 6d 20 74 68 65 20 66 6f 72 6d 61 74 74 69  rom the formatti
60b0: 6e 67 20 73 74 79 6c 65 20 63 75 72 72 65 6e 74  ng style current
60c0: 6c 79 20 69 6e 20 75 73 65 2e 0a 2a 2a 0a 2a 2a  ly in use..**.**
60d0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
60e0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
60f0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6100: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6110: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 2f 2a  ***********/../*
6120: 20 4f 70 63 6f 64 65 3a 20 20 47 6f 74 6f 20 2a   Opcode:  Goto *
6130: 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
6140: 41 6e 20 75 6e 63 6f 6e 64 69 74 69 6f 6e 61 6c  An unconditional
6150: 20 6a 75 6d 70 20 74 6f 20 61 64 64 72 65 73 73   jump to address
6160: 20 50 32 2e 0a 2a 2a 20 54 68 65 20 6e 65 78 74   P2..** The next
6170: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 65 78 65   instruction exe
6180: 63 75 74 65 64 20 77 69 6c 6c 20 62 65 20 0a 2a  cuted will be .*
6190: 2a 20 74 68 65 20 6f 6e 65 20 61 74 20 69 6e 64  * the one at ind
61a0: 65 78 20 50 32 20 66 72 6f 6d 20 74 68 65 20 62  ex P2 from the b
61b0: 65 67 69 6e 6e 69 6e 67 20 6f 66 0a 2a 2a 20 74  eginning of.** t
61c0: 68 65 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f 0a 63  he program..*/.c
61d0: 61 73 65 20 4f 50 5f 47 6f 74 6f 3a 20 7b 20 20  ase OP_Goto: {  
61e0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75             /* ju
61f0: 6d 70 20 2a 2f 0a 20 20 43 48 45 43 4b 5f 46 4f  mp */.  CHECK_FO
6200: 52 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20 70  R_INTERRUPT;.  p
6210: 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
6220: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
6230: 4f 70 63 6f 64 65 3a 20 20 47 6f 73 75 62 20 50  Opcode:  Gosub P
6240: 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
6250: 20 57 72 69 74 65 20 74 68 65 20 63 75 72 72 65   Write the curre
6260: 6e 74 20 61 64 64 72 65 73 73 20 6f 6e 74 6f 20  nt address onto 
6270: 72 65 67 69 73 74 65 72 20 50 31 0a 2a 2a 20 61  register P1.** a
6280: 6e 64 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20  nd then jump to 
6290: 61 64 64 72 65 73 73 20 50 32 2e 0a 2a 2f 0a 63  address P2..*/.c
62a0: 61 73 65 20 4f 50 5f 47 6f 73 75 62 3a 20 7b 20  ase OP_Gosub: { 
62b0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75             /* ju
62c0: 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e  mp, in1 */.  pIn
62d0: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
62e0: 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70  1];.  assert( (p
62f0: 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
6300: 5f 44 79 6e 29 3d 3d 30 20 29 3b 0a 20 20 6d 65  _Dyn)==0 );.  me
6310: 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
6320: 2c 20 70 49 6e 31 29 3b 0a 20 20 70 49 6e 31 2d  , pIn1);.  pIn1-
6330: 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74  >flags = MEM_Int
6340: 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 20 3d 20  ;.  pIn1->u.i = 
6350: 70 63 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54  pc;.  REGISTER_T
6360: 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20 70 49  RACE(pOp->p1, pI
6370: 6e 31 29 3b 0a 20 20 70 63 20 3d 20 70 4f 70 2d  n1);.  pc = pOp-
6380: 3e 70 32 20 2d 20 31 3b 0a 20 20 62 72 65 61 6b  >p2 - 1;.  break
6390: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
63a0: 20 52 65 74 75 72 6e 20 50 31 20 2a 20 2a 20 2a   Return P1 * * *
63b0: 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f   *.**.** Jump to
63c0: 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75   the next instru
63d0: 63 74 69 6f 6e 20 61 66 74 65 72 20 74 68 65 20  ction after the 
63e0: 61 64 64 72 65 73 73 20 69 6e 20 72 65 67 69 73  address in regis
63f0: 74 65 72 20 50 31 2e 0a 2a 2f 0a 63 61 73 65 20  ter P1..*/.case 
6400: 4f 50 5f 52 65 74 75 72 6e 3a 20 7b 20 20 20 20  OP_Return: {    
6410: 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f         /* in1 */
6420: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
6430: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
6440: 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20  rt( pIn1->flags 
6450: 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 70  & MEM_Int );.  p
6460: 63 20 3d 20 28 69 6e 74 29 70 49 6e 31 2d 3e 75  c = (int)pIn1->u
6470: 2e 69 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  .i;.  break;.}..
6480: 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 59 69 65 6c  /* Opcode:  Yiel
6490: 64 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a  d P1 * * * *.**.
64a0: 2a 2a 20 53 77 61 70 20 74 68 65 20 70 72 6f 67  ** Swap the prog
64b0: 72 61 6d 20 63 6f 75 6e 74 65 72 20 77 69 74 68  ram counter with
64c0: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
64d0: 67 69 73 74 65 72 20 50 31 2e 0a 2a 2f 0a 63 61  gister P1..*/.ca
64e0: 73 65 20 4f 50 5f 59 69 65 6c 64 3a 20 7b 20 20  se OP_Yield: {  
64f0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31            /* in1
6500: 20 2a 2f 0a 20 20 69 6e 74 20 70 63 44 65 73 74   */.  int pcDest
6510: 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ;.  pIn1 = &aMem
6520: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
6530: 65 72 74 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67  ert( (pIn1->flag
6540: 73 20 26 20 4d 45 4d 5f 44 79 6e 29 3d 3d 30 20  s & MEM_Dyn)==0 
6550: 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73  );.  pIn1->flags
6560: 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 70 63   = MEM_Int;.  pc
6570: 44 65 73 74 20 3d 20 28 69 6e 74 29 70 49 6e 31  Dest = (int)pIn1
6580: 2d 3e 75 2e 69 3b 0a 20 20 70 49 6e 31 2d 3e 75  ->u.i;.  pIn1->u
6590: 2e 69 20 3d 20 70 63 3b 0a 20 20 52 45 47 49 53  .i = pc;.  REGIS
65a0: 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
65b0: 31 2c 20 70 49 6e 31 29 3b 0a 20 20 70 63 20 3d  1, pIn1);.  pc =
65c0: 20 70 63 44 65 73 74 3b 0a 20 20 62 72 65 61 6b   pcDest;.  break
65d0: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
65e0: 20 48 61 6c 74 49 66 4e 75 6c 6c 20 20 50 31 20   HaltIfNull  P1 
65f0: 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  P2 P3 P4 *.**.**
6600: 20 43 68 65 63 6b 20 74 68 65 20 76 61 6c 75 65   Check the value
6610: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e   in register P3.
6620: 20 20 49 66 20 69 74 20 69 73 20 4e 55 4c 4c 20    If it is NULL 
6630: 74 68 65 6e 20 48 61 6c 74 20 75 73 69 6e 67 0a  then Halt using.
6640: 2a 2a 20 70 61 72 61 6d 65 74 65 72 20 50 31 2c  ** parameter P1,
6650: 20 50 32 2c 20 61 6e 64 20 50 34 20 61 73 20 69   P2, and P4 as i
6660: 66 20 74 68 69 73 20 77 65 72 65 20 61 20 48 61  f this were a Ha
6670: 6c 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20  lt instruction. 
6680: 20 49 66 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65   If the.** value
6690: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20   in register P3 
66a0: 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68 65  is not NULL, the
66b0: 6e 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 69  n this routine i
66c0: 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 63 61  s a no-op..*/.ca
66d0: 73 65 20 4f 50 5f 48 61 6c 74 49 66 4e 75 6c 6c  se OP_HaltIfNull
66e0: 3a 20 7b 20 20 20 20 20 20 2f 2a 20 69 6e 33 20  : {      /* in3 
66f0: 2a 2f 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65  */.  pIn3 = &aMe
6700: 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66  m[pOp->p3];.  if
6710: 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26  ( (pIn3->flags &
6720: 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 20   MEM_Null)==0 ) 
6730: 62 72 65 61 6b 3b 0a 20 20 2f 2a 20 46 61 6c 6c  break;.  /* Fall
6740: 20 74 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50   through into OP
6750: 5f 48 61 6c 74 20 2a 2f 0a 7d 0a 0a 2f 2a 20 4f  _Halt */.}../* O
6760: 70 63 6f 64 65 3a 20 20 48 61 6c 74 20 50 31 20  pcode:  Halt P1 
6770: 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20  P2 * P4 *.**.** 
6780: 45 78 69 74 20 69 6d 6d 65 64 69 61 74 65 6c 79  Exit immediately
6790: 2e 20 20 41 6c 6c 20 6f 70 65 6e 20 63 75 72 73  .  All open curs
67a0: 6f 72 73 2c 20 65 74 63 20 61 72 65 20 63 6c 6f  ors, etc are clo
67b0: 73 65 64 0a 2a 2a 20 61 75 74 6f 6d 61 74 69 63  sed.** automatic
67c0: 61 6c 6c 79 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69  ally..**.** P1 i
67d0: 73 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f 64  s the result cod
67e0: 65 20 72 65 74 75 72 6e 65 64 20 62 79 20 73 71  e returned by sq
67f0: 6c 69 74 65 33 5f 65 78 65 63 28 29 2c 20 73 71  lite3_exec(), sq
6800: 6c 69 74 65 33 5f 72 65 73 65 74 28 29 2c 0a 2a  lite3_reset(),.*
6810: 2a 20 6f 72 20 73 71 6c 69 74 65 33 5f 66 69 6e  * or sqlite3_fin
6820: 61 6c 69 7a 65 28 29 2e 20 20 46 6f 72 20 61 20  alize().  For a 
6830: 6e 6f 72 6d 61 6c 20 68 61 6c 74 2c 20 74 68 69  normal halt, thi
6840: 73 20 73 68 6f 75 6c 64 20 62 65 20 53 51 4c 49  s should be SQLI
6850: 54 45 5f 4f 4b 20 28 30 29 2e 0a 2a 2a 20 46 6f  TE_OK (0)..** Fo
6860: 72 20 65 72 72 6f 72 73 2c 20 69 74 20 63 61 6e  r errors, it can
6870: 20 62 65 20 73 6f 6d 65 20 6f 74 68 65 72 20 76   be some other v
6880: 61 6c 75 65 2e 20 20 49 66 20 50 31 21 3d 30 20  alue.  If P1!=0 
6890: 74 68 65 6e 20 50 32 20 77 69 6c 6c 20 64 65 74  then P2 will det
68a0: 65 72 6d 69 6e 65 0a 2a 2a 20 77 68 65 74 68 65  ermine.** whethe
68b0: 72 20 6f 72 20 6e 6f 74 20 74 6f 20 72 6f 6c 6c  r or not to roll
68c0: 62 61 63 6b 20 74 68 65 20 63 75 72 72 65 6e 74  back the current
68d0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 44   transaction.  D
68e0: 6f 20 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 0a 2a  o not rollback.*
68f0: 2a 20 69 66 20 50 32 3d 3d 4f 45 5f 46 61 69 6c  * if P2==OE_Fail
6900: 2e 20 44 6f 20 74 68 65 20 72 6f 6c 6c 62 61 63  . Do the rollbac
6910: 6b 20 69 66 20 50 32 3d 3d 4f 45 5f 52 6f 6c 6c  k if P2==OE_Roll
6920: 62 61 63 6b 2e 20 20 49 66 20 50 32 3d 3d 4f 45  back.  If P2==OE
6930: 5f 41 62 6f 72 74 2c 0a 2a 2a 20 74 68 65 6e 20  _Abort,.** then 
6940: 62 61 63 6b 20 6f 75 74 20 61 6c 6c 20 63 68 61  back out all cha
6950: 6e 67 65 73 20 74 68 61 74 20 68 61 76 65 20 6f  nges that have o
6960: 63 63 75 72 72 65 64 20 64 75 72 69 6e 67 20 74  ccurred during t
6970: 68 69 73 20 65 78 65 63 75 74 69 6f 6e 20 6f 66  his execution of
6980: 20 74 68 65 0a 2a 2a 20 56 44 42 45 2c 20 62 75   the.** VDBE, bu
6990: 74 20 64 6f 20 6e 6f 74 20 72 6f 6c 6c 62 61 63  t do not rollbac
69a0: 6b 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f  k the transactio
69b0: 6e 2e 20 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20  n. .**.** If P4 
69c0: 69 73 20 6e 6f 74 20 6e 75 6c 6c 20 74 68 65 6e  is not null then
69d0: 20 69 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20   it is an error 
69e0: 6d 65 73 73 61 67 65 20 73 74 72 69 6e 67 2e 0a  message string..
69f0: 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 69 73 20 61  **.** There is a
6a00: 6e 20 69 6d 70 6c 69 65 64 20 22 48 61 6c 74 20  n implied "Halt 
6a10: 30 20 30 20 30 22 20 69 6e 73 74 72 75 63 74 69  0 0 0" instructi
6a20: 6f 6e 20 69 6e 73 65 72 74 65 64 20 61 74 20 74  on inserted at t
6a30: 68 65 20 76 65 72 79 20 65 6e 64 20 6f 66 0a 2a  he very end of.*
6a40: 2a 20 65 76 65 72 79 20 70 72 6f 67 72 61 6d 2e  * every program.
6a50: 20 20 53 6f 20 61 20 6a 75 6d 70 20 70 61 73 74    So a jump past
6a60: 20 74 68 65 20 6c 61 73 74 20 69 6e 73 74 72 75   the last instru
6a70: 63 74 69 6f 6e 20 6f 66 20 74 68 65 20 70 72 6f  ction of the pro
6a80: 67 72 61 6d 0a 2a 2a 20 69 73 20 74 68 65 20 73  gram.** is the s
6a90: 61 6d 65 20 61 73 20 65 78 65 63 75 74 69 6e 67  ame as executing
6aa0: 20 48 61 6c 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f   Halt..*/.case O
6ab0: 50 5f 48 61 6c 74 3a 20 7b 0a 20 20 69 66 28 20  P_Halt: {.  if( 
6ac0: 70 4f 70 2d 3e 70 31 3d 3d 53 51 4c 49 54 45 5f  pOp->p1==SQLITE_
6ad0: 4f 4b 20 26 26 20 70 2d 3e 70 46 72 61 6d 65 20  OK && p->pFrame 
6ae0: 29 7b 0a 20 20 20 20 2f 2a 20 48 61 6c 74 20 74  ){.    /* Halt t
6af0: 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 2e 20  he sub-program. 
6b00: 52 65 74 75 72 6e 20 63 6f 6e 74 72 6f 6c 20 74  Return control t
6b10: 6f 20 74 68 65 20 70 61 72 65 6e 74 20 66 72 61  o the parent fra
6b20: 6d 65 2e 20 2a 2f 0a 20 20 20 20 56 64 62 65 46  me. */.    VdbeF
6b30: 72 61 6d 65 20 2a 70 46 72 61 6d 65 20 3d 20 70  rame *pFrame = p
6b40: 2d 3e 70 46 72 61 6d 65 3b 0a 20 20 20 20 70 2d  ->pFrame;.    p-
6b50: 3e 70 46 72 61 6d 65 20 3d 20 70 46 72 61 6d 65  >pFrame = pFrame
6b60: 2d 3e 70 50 61 72 65 6e 74 3b 0a 20 20 20 20 70  ->pParent;.    p
6b70: 2d 3e 6e 46 72 61 6d 65 2d 2d 3b 0a 20 20 20 20  ->nFrame--;.    
6b80: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 68  sqlite3VdbeSetCh
6b90: 61 6e 67 65 73 28 64 62 2c 20 70 2d 3e 6e 43 68  anges(db, p->nCh
6ba0: 61 6e 67 65 29 3b 0a 20 20 20 20 70 63 20 3d 20  ange);.    pc = 
6bb0: 73 71 6c 69 74 65 33 56 64 62 65 46 72 61 6d 65  sqlite3VdbeFrame
6bc0: 52 65 73 74 6f 72 65 28 70 46 72 61 6d 65 29 3b  Restore(pFrame);
6bd0: 0a 20 20 20 20 6c 61 73 74 52 6f 77 69 64 20 3d  .    lastRowid =
6be0: 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 0a   db->lastRowid;.
6bf0: 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d      if( pOp->p2=
6c00: 3d 4f 45 5f 49 67 6e 6f 72 65 20 29 7b 0a 20 20  =OE_Ignore ){.  
6c10: 20 20 20 20 2f 2a 20 49 6e 73 74 72 75 63 74 69      /* Instructi
6c20: 6f 6e 20 70 63 20 69 73 20 74 68 65 20 4f 50 5f  on pc is the OP_
6c30: 50 72 6f 67 72 61 6d 20 74 68 61 74 20 69 6e 76  Program that inv
6c40: 6f 6b 65 64 20 74 68 65 20 73 75 62 2d 70 72 6f  oked the sub-pro
6c50: 67 72 61 6d 20 0a 20 20 20 20 20 20 2a 2a 20 63  gram .      ** c
6c60: 75 72 72 65 6e 74 6c 79 20 62 65 69 6e 67 20 68  urrently being h
6c70: 61 6c 74 65 64 2e 20 49 66 20 74 68 65 20 70 32  alted. If the p2
6c80: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 66 20   instruction of 
6c90: 74 68 69 73 20 4f 50 5f 48 61 6c 74 0a 20 20 20  this OP_Halt.   
6ca0: 20 20 20 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f     ** instructio
6cb0: 6e 20 69 73 20 73 65 74 20 74 6f 20 4f 45 5f 49  n is set to OE_I
6cc0: 67 6e 6f 72 65 2c 20 74 68 65 6e 20 74 68 65 20  gnore, then the 
6cd0: 73 75 62 2d 70 72 6f 67 72 61 6d 20 69 73 20 74  sub-program is t
6ce0: 68 72 6f 77 69 6e 67 0a 20 20 20 20 20 20 2a 2a  hrowing.      **
6cf0: 20 61 6e 20 49 47 4e 4f 52 45 20 65 78 63 65 70   an IGNORE excep
6d00: 74 69 6f 6e 2e 20 49 6e 20 74 68 69 73 20 63 61  tion. In this ca
6d10: 73 65 20 6a 75 6d 70 20 74 6f 20 74 68 65 20 61  se jump to the a
6d20: 64 64 72 65 73 73 20 73 70 65 63 69 66 69 65 64  ddress specified
6d30: 0a 20 20 20 20 20 20 2a 2a 20 61 73 20 74 68 65  .      ** as the
6d40: 20 70 32 20 6f 66 20 74 68 65 20 63 61 6c 6c 69   p2 of the calli
6d50: 6e 67 20 4f 50 5f 50 72 6f 67 72 61 6d 2e 20 20  ng OP_Program.  
6d60: 2a 2f 0a 20 20 20 20 20 20 70 63 20 3d 20 70 2d  */.      pc = p-
6d70: 3e 61 4f 70 5b 70 63 5d 2e 70 32 2d 31 3b 0a 20  >aOp[pc].p2-1;. 
6d80: 20 20 20 7d 0a 20 20 20 20 61 4f 70 20 3d 20 70     }.    aOp = p
6d90: 2d 3e 61 4f 70 3b 0a 20 20 20 20 61 4d 65 6d 20  ->aOp;.    aMem 
6da0: 3d 20 70 2d 3e 61 4d 65 6d 3b 0a 20 20 20 20 62  = p->aMem;.    b
6db0: 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 70 2d 3e  reak;.  }..  p->
6dc0: 72 63 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20  rc = pOp->p1;.  
6dd0: 70 2d 3e 65 72 72 6f 72 41 63 74 69 6f 6e 20 3d  p->errorAction =
6de0: 20 28 75 38 29 70 4f 70 2d 3e 70 32 3b 0a 20 20   (u8)pOp->p2;.  
6df0: 70 2d 3e 70 63 20 3d 20 70 63 3b 0a 20 20 69 66  p->pc = pc;.  if
6e00: 28 20 70 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20  ( pOp->p4.z ){. 
6e10: 20 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 63     assert( p->rc
6e20: 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 20  !=SQLITE_OK );. 
6e30: 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72     sqlite3SetStr
6e40: 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c  ing(&p->zErrMsg,
6e50: 20 64 62 2c 20 22 25 73 22 2c 20 70 4f 70 2d 3e   db, "%s", pOp->
6e60: 70 34 2e 7a 29 3b 0a 20 20 20 20 74 65 73 74 63  p4.z);.    testc
6e70: 61 73 65 28 20 73 71 6c 69 74 65 33 47 6c 6f 62  ase( sqlite3Glob
6e80: 61 6c 43 6f 6e 66 69 67 2e 78 4c 6f 67 21 3d 30  alConfig.xLog!=0
6e90: 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f   );.    sqlite3_
6ea0: 6c 6f 67 28 70 4f 70 2d 3e 70 31 2c 20 22 61 62  log(pOp->p1, "ab
6eb0: 6f 72 74 20 61 74 20 25 64 20 69 6e 20 5b 25 73  ort at %d in [%s
6ec0: 5d 3a 20 25 73 22 2c 20 70 63 2c 20 70 2d 3e 7a  ]: %s", pc, p->z
6ed0: 53 71 6c 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b  Sql, pOp->p4.z);
6ee0: 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70 2d 3e  .  }else if( p->
6ef0: 72 63 20 29 7b 0a 20 20 20 20 74 65 73 74 63 61  rc ){.    testca
6f00: 73 65 28 20 73 71 6c 69 74 65 33 47 6c 6f 62 61  se( sqlite3Globa
6f10: 6c 43 6f 6e 66 69 67 2e 78 4c 6f 67 21 3d 30 20  lConfig.xLog!=0 
6f20: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 6c  );.    sqlite3_l
6f30: 6f 67 28 70 4f 70 2d 3e 70 31 2c 20 22 63 6f 6e  og(pOp->p1, "con
6f40: 73 74 72 61 69 6e 74 20 66 61 69 6c 65 64 20 61  straint failed a
6f50: 74 20 25 64 20 69 6e 20 5b 25 73 5d 22 2c 20 70  t %d in [%s]", p
6f60: 63 2c 20 70 2d 3e 7a 53 71 6c 29 3b 0a 20 20 7d  c, p->zSql);.  }
6f70: 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
6f80: 64 62 65 48 61 6c 74 28 70 29 3b 0a 20 20 61 73  dbeHalt(p);.  as
6f90: 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45  sert( rc==SQLITE
6fa0: 5f 42 55 53 59 20 7c 7c 20 72 63 3d 3d 53 51 4c  _BUSY || rc==SQL
6fb0: 49 54 45 5f 4f 4b 20 7c 7c 20 72 63 3d 3d 53 51  ITE_OK || rc==SQ
6fc0: 4c 49 54 45 5f 45 52 52 4f 52 20 29 3b 0a 20 20  LITE_ERROR );.  
6fd0: 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42  if( rc==SQLITE_B
6fe0: 55 53 59 20 29 7b 0a 20 20 20 20 70 2d 3e 72 63  USY ){.    p->rc
6ff0: 20 3d 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42   = rc = SQLITE_B
7000: 55 53 59 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  USY;.  }else{.  
7010: 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51    assert( rc==SQ
7020: 4c 49 54 45 5f 4f 4b 20 7c 7c 20 70 2d 3e 72 63  LITE_OK || p->rc
7030: 3d 3d 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41  ==SQLITE_CONSTRA
7040: 49 4e 54 20 29 3b 0a 20 20 20 20 61 73 73 65 72  INT );.    asser
7050: 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  t( rc==SQLITE_OK
7060: 20 7c 7c 20 64 62 2d 3e 6e 44 65 66 65 72 72 65   || db->nDeferre
7070: 64 43 6f 6e 73 3e 30 20 29 3b 0a 20 20 20 20 72  dCons>0 );.    r
7080: 63 20 3d 20 70 2d 3e 72 63 20 3f 20 53 51 4c 49  c = p->rc ? SQLI
7090: 54 45 5f 45 52 52 4f 52 20 3a 20 53 51 4c 49 54  TE_ERROR : SQLIT
70a0: 45 5f 44 4f 4e 45 3b 0a 20 20 7d 0a 20 20 67 6f  E_DONE;.  }.  go
70b0: 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a  to vdbe_return;.
70c0: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e  }../* Opcode: In
70d0: 74 65 67 65 72 20 50 31 20 50 32 20 2a 20 2a 20  teger P1 P2 * * 
70e0: 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 33 32 2d 62  *.**.** The 32-b
70f0: 69 74 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  it integer value
7100: 20 50 31 20 69 73 20 77 72 69 74 74 65 6e 20 69   P1 is written i
7110: 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e  nto register P2.
7120: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74 65  .*/.case OP_Inte
7130: 67 65 72 3a 20 7b 20 20 20 20 20 20 20 20 20 2f  ger: {         /
7140: 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73  * out2-prereleas
7150: 65 20 2a 2f 0a 20 20 70 4f 75 74 2d 3e 75 2e 69  e */.  pOut->u.i
7160: 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 62 72   = pOp->p1;.  br
7170: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
7180: 65 3a 20 49 6e 74 36 34 20 2a 20 50 32 20 2a 20  e: Int64 * P2 * 
7190: 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73  P4 *.**.** P4 is
71a0: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20   a pointer to a 
71b0: 36 34 2d 62 69 74 20 69 6e 74 65 67 65 72 20 76  64-bit integer v
71c0: 61 6c 75 65 2e 0a 2a 2a 20 57 72 69 74 65 20 74  alue..** Write t
71d0: 68 61 74 20 76 61 6c 75 65 20 69 6e 74 6f 20 72  hat value into r
71e0: 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63  egister P2..*/.c
71f0: 61 73 65 20 4f 50 5f 49 6e 74 36 34 3a 20 7b 20  ase OP_Int64: { 
7200: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
7210: 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a  2-prerelease */.
7220: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
7230: 34 2e 70 49 36 34 21 3d 30 20 29 3b 0a 20 20 70  4.pI64!=0 );.  p
7240: 4f 75 74 2d 3e 75 2e 69 20 3d 20 2a 70 4f 70 2d  Out->u.i = *pOp-
7250: 3e 70 34 2e 70 49 36 34 3b 0a 20 20 62 72 65 61  >p4.pI64;.  brea
7260: 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51  k;.}..#ifndef SQ
7270: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49  LITE_OMIT_FLOATI
7280: 4e 47 5f 50 4f 49 4e 54 0a 2f 2a 20 4f 70 63 6f  NG_POINT./* Opco
7290: 64 65 3a 20 52 65 61 6c 20 2a 20 50 32 20 2a 20  de: Real * P2 * 
72a0: 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73  P4 *.**.** P4 is
72b0: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20   a pointer to a 
72c0: 36 34 2d 62 69 74 20 66 6c 6f 61 74 69 6e 67 20  64-bit floating 
72d0: 70 6f 69 6e 74 20 76 61 6c 75 65 2e 0a 2a 2a 20  point value..** 
72e0: 57 72 69 74 65 20 74 68 61 74 20 76 61 6c 75 65  Write that value
72f0: 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
7300: 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65  2..*/.case OP_Re
7310: 61 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  al: {           
7320: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 46   /* same as TK_F
7330: 4c 4f 41 54 2c 20 6f 75 74 32 2d 70 72 65 72 65  LOAT, out2-prere
7340: 6c 65 61 73 65 20 2a 2f 0a 20 20 70 4f 75 74 2d  lease */.  pOut-
7350: 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 52 65 61  >flags = MEM_Rea
7360: 6c 3b 0a 20 20 61 73 73 65 72 74 28 20 21 73 71  l;.  assert( !sq
7370: 6c 69 74 65 33 49 73 4e 61 4e 28 2a 70 4f 70 2d  lite3IsNaN(*pOp-
7380: 3e 70 34 2e 70 52 65 61 6c 29 20 29 3b 0a 20 20  >p4.pReal) );.  
7390: 70 4f 75 74 2d 3e 72 20 3d 20 2a 70 4f 70 2d 3e  pOut->r = *pOp->
73a0: 70 34 2e 70 52 65 61 6c 3b 0a 20 20 62 72 65 61  p4.pReal;.  brea
73b0: 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20  k;.}.#endif../* 
73c0: 4f 70 63 6f 64 65 3a 20 53 74 72 69 6e 67 38 20  Opcode: String8 
73d0: 2a 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a  * P2 * P4 *.**.*
73e0: 2a 20 50 34 20 70 6f 69 6e 74 73 20 74 6f 20 61  * P4 points to a
73f0: 20 6e 75 6c 20 74 65 72 6d 69 6e 61 74 65 64 20   nul terminated 
7400: 55 54 46 2d 38 20 73 74 72 69 6e 67 2e 20 54 68  UTF-8 string. Th
7410: 69 73 20 6f 70 63 6f 64 65 20 69 73 20 74 72 61  is opcode is tra
7420: 6e 73 66 6f 72 6d 65 64 20 0a 2a 2a 20 69 6e 74  nsformed .** int
7430: 6f 20 61 6e 20 4f 50 5f 53 74 72 69 6e 67 20 62  o an OP_String b
7440: 65 66 6f 72 65 20 69 74 20 69 73 20 65 78 65 63  efore it is exec
7450: 75 74 65 64 20 66 6f 72 20 74 68 65 20 66 69 72  uted for the fir
7460: 73 74 20 74 69 6d 65 2e 0a 2a 2f 0a 63 61 73 65  st time..*/.case
7470: 20 4f 50 5f 53 74 72 69 6e 67 38 3a 20 7b 20 20   OP_String8: {  
7480: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
7490: 73 20 54 4b 5f 53 54 52 49 4e 47 2c 20 6f 75 74  s TK_STRING, out
74a0: 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a  2-prerelease */.
74b0: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
74c0: 34 2e 7a 21 3d 30 20 29 3b 0a 20 20 70 4f 70 2d  4.z!=0 );.  pOp-
74d0: 3e 6f 70 63 6f 64 65 20 3d 20 4f 50 5f 53 74 72  >opcode = OP_Str
74e0: 69 6e 67 3b 0a 20 20 70 4f 70 2d 3e 70 31 20 3d  ing;.  pOp->p1 =
74f0: 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30   sqlite3Strlen30
7500: 28 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 0a 23 69  (pOp->p4.z);..#i
7510: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
7520: 54 5f 55 54 46 31 36 0a 20 20 69 66 28 20 65 6e  T_UTF16.  if( en
7530: 63 6f 64 69 6e 67 21 3d 53 51 4c 49 54 45 5f 55  coding!=SQLITE_U
7540: 54 46 38 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  TF8 ){.    rc = 
7550: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
7560: 74 53 74 72 28 70 4f 75 74 2c 20 70 4f 70 2d 3e  tStr(pOut, pOp->
7570: 70 34 2e 7a 2c 20 2d 31 2c 20 53 51 4c 49 54 45  p4.z, -1, SQLITE
7580: 5f 55 54 46 38 2c 20 53 51 4c 49 54 45 5f 53 54  _UTF8, SQLITE_ST
7590: 41 54 49 43 29 3b 0a 20 20 20 20 69 66 28 20 72  ATIC);.    if( r
75a0: 63 3d 3d 53 51 4c 49 54 45 5f 54 4f 4f 42 49 47  c==SQLITE_TOOBIG
75b0: 20 29 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b   ) goto too_big;
75c0: 0a 20 20 20 20 69 66 28 20 53 51 4c 49 54 45 5f  .    if( SQLITE_
75d0: 4f 4b 21 3d 73 71 6c 69 74 65 33 56 64 62 65 43  OK!=sqlite3VdbeC
75e0: 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 4f  hangeEncoding(pO
75f0: 75 74 2c 20 65 6e 63 6f 64 69 6e 67 29 20 29 20  ut, encoding) ) 
7600: 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20  goto no_mem;.   
7610: 20 61 73 73 65 72 74 28 20 70 4f 75 74 2d 3e 7a   assert( pOut->z
7620: 4d 61 6c 6c 6f 63 3d 3d 70 4f 75 74 2d 3e 7a 20  Malloc==pOut->z 
7630: 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
7640: 4f 75 74 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  Out->flags & MEM
7650: 5f 44 79 6e 20 29 3b 0a 20 20 20 20 70 4f 75 74  _Dyn );.    pOut
7660: 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20  ->zMalloc = 0;. 
7670: 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c     pOut->flags |
7680: 3d 20 4d 45 4d 5f 53 74 61 74 69 63 3b 0a 20 20  = MEM_Static;.  
7690: 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 26 3d    pOut->flags &=
76a0: 20 7e 4d 45 4d 5f 44 79 6e 3b 0a 20 20 20 20 69   ~MEM_Dyn;.    i
76b0: 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  f( pOp->p4type==
76c0: 50 34 5f 44 59 4e 41 4d 49 43 20 29 7b 0a 20 20  P4_DYNAMIC ){.  
76d0: 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65      sqlite3DbFre
76e0: 65 28 64 62 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29  e(db, pOp->p4.z)
76f0: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f 70 2d  ;.    }.    pOp-
7700: 3e 70 34 74 79 70 65 20 3d 20 50 34 5f 44 59 4e  >p4type = P4_DYN
7710: 41 4d 49 43 3b 0a 20 20 20 20 70 4f 70 2d 3e 70  AMIC;.    pOp->p
7720: 34 2e 7a 20 3d 20 70 4f 75 74 2d 3e 7a 3b 0a 20  4.z = pOut->z;. 
7730: 20 20 20 70 4f 70 2d 3e 70 31 20 3d 20 70 4f 75     pOp->p1 = pOu
7740: 74 2d 3e 6e 3b 0a 20 20 7d 0a 23 65 6e 64 69 66  t->n;.  }.#endif
7750: 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 3e 64  .  if( pOp->p1>d
7760: 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45  b->aLimit[SQLITE
7770: 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29  _LIMIT_LENGTH] )
7780: 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62  {.    goto too_b
7790: 69 67 3b 0a 20 20 7d 0a 20 20 2f 2a 20 46 61 6c  ig;.  }.  /* Fal
77a0: 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  l through to the
77b0: 20 6e 65 78 74 20 63 61 73 65 2c 20 4f 50 5f 53   next case, OP_S
77c0: 74 72 69 6e 67 20 2a 2f 0a 7d 0a 20 20 0a 2f 2a  tring */.}.  ./*
77d0: 20 4f 70 63 6f 64 65 3a 20 53 74 72 69 6e 67 20   Opcode: String 
77e0: 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a  P1 P2 * P4 *.**.
77f0: 2a 2a 20 54 68 65 20 73 74 72 69 6e 67 20 76 61  ** The string va
7800: 6c 75 65 20 50 34 20 6f 66 20 6c 65 6e 67 74 68  lue P4 of length
7810: 20 50 31 20 28 62 79 74 65 73 29 20 69 73 20 73   P1 (bytes) is s
7820: 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65  tored in registe
7830: 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  r P2..*/.case OP
7840: 5f 53 74 72 69 6e 67 3a 20 7b 20 20 20 20 20 20  _String: {      
7850: 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72      /* out2-prer
7860: 65 6c 65 61 73 65 20 2a 2f 0a 20 20 61 73 73 65  elease */.  asse
7870: 72 74 28 20 70 4f 70 2d 3e 70 34 2e 7a 21 3d 30  rt( pOp->p4.z!=0
7880: 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67   );.  pOut->flag
7890: 73 20 3d 20 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f  s = MEM_Str|MEM_
78a0: 53 74 61 74 69 63 7c 4d 45 4d 5f 54 65 72 6d 3b  Static|MEM_Term;
78b0: 0a 20 20 70 4f 75 74 2d 3e 7a 20 3d 20 70 4f 70  .  pOut->z = pOp
78c0: 2d 3e 70 34 2e 7a 3b 0a 20 20 70 4f 75 74 2d 3e  ->p4.z;.  pOut->
78d0: 6e 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70  n = pOp->p1;.  p
78e0: 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64  Out->enc = encod
78f0: 69 6e 67 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41  ing;.  UPDATE_MA
7900: 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29  X_BLOBSIZE(pOut)
7910: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
7920: 20 4f 70 63 6f 64 65 3a 20 4e 75 6c 6c 20 2a 20   Opcode: Null * 
7930: 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57  P2 * * *.**.** W
7940: 72 69 74 65 20 61 20 4e 55 4c 4c 20 69 6e 74 6f  rite a NULL into
7950: 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f   register P2..*/
7960: 0a 63 61 73 65 20 4f 50 5f 4e 75 6c 6c 3a 20 7b  .case OP_Null: {
7970: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
7980: 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f  t2-prerelease */
7990: 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d  .  pOut->flags =
79a0: 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 62 72 65   MEM_Null;.  bre
79b0: 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64  ak;.}.../* Opcod
79c0: 65 3a 20 42 6c 6f 62 20 50 31 20 50 32 20 2a 20  e: Blob P1 P2 * 
79d0: 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20 70 6f 69 6e  P4.**.** P4 poin
79e0: 74 73 20 74 6f 20 61 20 62 6c 6f 62 20 6f 66 20  ts to a blob of 
79f0: 64 61 74 61 20 50 31 20 62 79 74 65 73 20 6c 6f  data P1 bytes lo
7a00: 6e 67 2e 20 20 53 74 6f 72 65 20 74 68 69 73 0a  ng.  Store this.
7a10: 2a 2a 20 62 6c 6f 62 20 69 6e 20 72 65 67 69 73  ** blob in regis
7a20: 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20  ter P2..*/.case 
7a30: 4f 50 5f 42 6c 6f 62 3a 20 7b 20 20 20 20 20 20  OP_Blob: {      
7a40: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
7a50: 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a  2-prerelease */.
7a60: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
7a70: 31 20 3c 3d 20 53 51 4c 49 54 45 5f 4d 41 58 5f  1 <= SQLITE_MAX_
7a80: 4c 45 4e 47 54 48 20 29 3b 0a 20 20 73 71 6c 69  LENGTH );.  sqli
7a90: 74 65 33 56 64 62 65 4d 65 6d 53 65 74 53 74 72  te3VdbeMemSetStr
7aa0: 28 70 4f 75 74 2c 20 70 4f 70 2d 3e 70 34 2e 7a  (pOut, pOp->p4.z
7ab0: 2c 20 70 4f 70 2d 3e 70 31 2c 20 30 2c 20 30 29  , pOp->p1, 0, 0)
7ac0: 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20  ;.  pOut->enc = 
7ad0: 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44 41  encoding;.  UPDA
7ae0: 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
7af0: 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  pOut);.  break;.
7b00: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 61  }../* Opcode: Va
7b10: 72 69 61 62 6c 65 20 50 31 20 50 32 20 2a 20 50  riable P1 P2 * P
7b20: 34 20 2a 0a 2a 2a 0a 2a 2a 20 54 72 61 6e 73 66  4 *.**.** Transf
7b30: 65 72 20 74 68 65 20 76 61 6c 75 65 73 20 6f 66  er the values of
7b40: 20 62 6f 75 6e 64 20 70 61 72 61 6d 65 74 65 72   bound parameter
7b50: 20 50 31 20 69 6e 74 6f 20 72 65 67 69 73 74 65   P1 into registe
7b60: 72 20 50 32 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  r P2.**.** If th
7b70: 65 20 70 61 72 61 6d 65 74 65 72 20 69 73 20 6e  e parameter is n
7b80: 61 6d 65 64 2c 20 74 68 65 6e 20 69 74 73 20 6e  amed, then its n
7b90: 61 6d 65 20 61 70 70 65 61 72 73 20 69 6e 20 50  ame appears in P
7ba0: 34 20 61 6e 64 20 50 33 3d 3d 31 2e 0a 2a 2a 20  4 and P3==1..** 
7bb0: 54 68 65 20 50 34 20 76 61 6c 75 65 20 69 73 20  The P4 value is 
7bc0: 75 73 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f  used by sqlite3_
7bd0: 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e  bind_parameter_n
7be0: 61 6d 65 28 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ame()..*/.case O
7bf0: 50 5f 56 61 72 69 61 62 6c 65 3a 20 7b 20 20 20  P_Variable: {   
7c00: 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
7c10: 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20  -prerelease */. 
7c20: 20 4d 65 6d 20 2a 70 56 61 72 3b 20 20 20 20 20   Mem *pVar;     
7c30: 20 20 2f 2a 20 56 61 6c 75 65 20 62 65 69 6e 67    /* Value being
7c40: 20 74 72 61 6e 73 66 65 72 72 65 64 20 2a 2f 0a   transferred */.
7c50: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
7c60: 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  p1>0 && pOp->p1<
7c70: 3d 70 2d 3e 6e 56 61 72 20 29 3b 0a 20 20 61 73  =p->nVar );.  as
7c80: 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 7a 3d  sert( pOp->p4.z=
7c90: 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 7a 3d  =0 || pOp->p4.z=
7ca0: 3d 70 2d 3e 61 7a 56 61 72 5b 70 4f 70 2d 3e 70  =p->azVar[pOp->p
7cb0: 31 2d 31 5d 20 29 3b 0a 20 20 70 56 61 72 20 3d  1-1] );.  pVar =
7cc0: 20 26 70 2d 3e 61 56 61 72 5b 70 4f 70 2d 3e 70   &p->aVar[pOp->p
7cd0: 31 20 2d 20 31 5d 3b 0a 20 20 69 66 28 20 73 71  1 - 1];.  if( sq
7ce0: 6c 69 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42  lite3VdbeMemTooB
7cf0: 69 67 28 70 56 61 72 29 20 29 7b 0a 20 20 20 20  ig(pVar) ){.    
7d00: 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20  goto too_big;.  
7d10: 7d 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  }.  sqlite3VdbeM
7d20: 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f  emShallowCopy(pO
7d30: 75 74 2c 20 70 56 61 72 2c 20 4d 45 4d 5f 53 74  ut, pVar, MEM_St
7d40: 61 74 69 63 29 3b 0a 20 20 55 50 44 41 54 45 5f  atic);.  UPDATE_
7d50: 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75  MAX_BLOBSIZE(pOu
7d60: 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
7d70: 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 6f 76 65 20  /* Opcode: Move 
7d80: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
7d90: 2a 2a 20 4d 6f 76 65 20 74 68 65 20 76 61 6c 75  ** Move the valu
7da0: 65 73 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  es in register P
7db0: 31 2e 2e 50 31 2b 50 33 2d 31 20 6f 76 65 72 20  1..P1+P3-1 over 
7dc0: 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72  into.** register
7dd0: 73 20 50 32 2e 2e 50 32 2b 50 33 2d 31 2e 20 20  s P2..P2+P3-1.  
7de0: 52 65 67 69 73 74 65 72 73 20 50 31 2e 2e 50 31  Registers P1..P1
7df0: 2b 50 31 2d 31 20 61 72 65 0a 2a 2a 20 6c 65 66  +P1-1 are.** lef
7e00: 74 20 68 6f 6c 64 69 6e 67 20 61 20 4e 55 4c 4c  t holding a NULL
7e10: 2e 20 20 49 74 20 69 73 20 61 6e 20 65 72 72 6f  .  It is an erro
7e20: 72 20 66 6f 72 20 72 65 67 69 73 74 65 72 20 72  r for register r
7e30: 61 6e 67 65 73 0a 2a 2a 20 50 31 2e 2e 50 31 2b  anges.** P1..P1+
7e40: 50 33 2d 31 20 61 6e 64 20 50 32 2e 2e 50 32 2b  P3-1 and P2..P2+
7e50: 50 33 2d 31 20 74 6f 20 6f 76 65 72 6c 61 70 2e  P3-1 to overlap.
7e60: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 6f 76 65  .*/.case OP_Move
7e70: 3a 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4d 61 6c  : {.  char *zMal
7e80: 6c 6f 63 3b 20 20 20 2f 2a 20 48 6f 6c 64 69 6e  loc;   /* Holdin
7e90: 67 20 76 61 72 69 61 62 6c 65 20 66 6f 72 20 61  g variable for a
7ea0: 6c 6c 6f 63 61 74 65 64 20 6d 65 6d 6f 72 79 20  llocated memory 
7eb0: 2a 2f 0a 20 20 69 6e 74 20 6e 3b 20 20 20 20 20  */.  int n;     
7ec0: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
7ed0: 6f 66 20 72 65 67 69 73 74 65 72 73 20 6c 65 66  of registers lef
7ee0: 74 20 74 6f 20 63 6f 70 79 20 2a 2f 0a 20 20 69  t to copy */.  i
7ef0: 6e 74 20 70 31 3b 20 20 20 20 20 20 20 20 20 20  nt p1;          
7f00: 2f 2a 20 52 65 67 69 73 74 65 72 20 74 6f 20 63  /* Register to c
7f10: 6f 70 79 20 66 72 6f 6d 20 2a 2f 0a 20 20 69 6e  opy from */.  in
7f20: 74 20 70 32 3b 20 20 20 20 20 20 20 20 20 20 2f  t p2;          /
7f30: 2a 20 52 65 67 69 73 74 65 72 20 74 6f 20 63 6f  * Register to co
7f40: 70 79 20 74 6f 20 2a 2f 0a 0a 20 20 6e 20 3d 20  py to */..  n = 
7f50: 70 4f 70 2d 3e 70 33 3b 0a 20 20 70 31 20 3d 20  pOp->p3;.  p1 = 
7f60: 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 32 20 3d 20  pOp->p1;.  p2 = 
7f70: 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72  pOp->p2;.  asser
7f80: 74 28 20 6e 3e 30 20 26 26 20 70 31 3e 30 20 26  t( n>0 && p1>0 &
7f90: 26 20 70 32 3e 30 20 29 3b 0a 20 20 61 73 73 65  & p2>0 );.  asse
7fa0: 72 74 28 20 70 31 2b 6e 3c 3d 70 32 20 7c 7c 20  rt( p1+n<=p2 || 
7fb0: 70 32 2b 6e 3c 3d 70 31 20 29 3b 0a 0a 20 20 70  p2+n<=p1 );..  p
7fc0: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 31 5d 3b  In1 = &aMem[p1];
7fd0: 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b  .  pOut = &aMem[
7fe0: 70 32 5d 3b 0a 20 20 77 68 69 6c 65 28 20 6e 2d  p2];.  while( n-
7ff0: 2d 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  - ){.    assert(
8000: 20 70 4f 75 74 3c 3d 26 61 4d 65 6d 5b 70 2d 3e   pOut<=&aMem[p->
8010: 6e 4d 65 6d 5d 20 29 3b 0a 20 20 20 20 61 73 73  nMem] );.    ass
8020: 65 72 74 28 20 70 49 6e 31 3c 3d 26 61 4d 65 6d  ert( pIn1<=&aMem
8030: 5b 70 2d 3e 6e 4d 65 6d 5d 20 29 3b 0a 20 20 20  [p->nMem] );.   
8040: 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
8050: 6c 69 64 28 70 49 6e 31 29 20 29 3b 0a 20 20 20  lid(pIn1) );.   
8060: 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
8070: 65 28 70 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20  e(p, pOut);.    
8080: 7a 4d 61 6c 6c 6f 63 20 3d 20 70 4f 75 74 2d 3e  zMalloc = pOut->
8090: 7a 4d 61 6c 6c 6f 63 3b 0a 20 20 20 20 70 4f 75  zMalloc;.    pOu
80a0: 74 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a  t->zMalloc = 0;.
80b0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
80c0: 65 6d 4d 6f 76 65 28 70 4f 75 74 2c 20 70 49 6e  emMove(pOut, pIn
80d0: 31 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  1);.#ifdef SQLIT
80e0: 45 5f 44 45 42 55 47 0a 20 20 20 20 69 66 28 20  E_DEBUG.    if( 
80f0: 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d  pOut->pScopyFrom
8100: 3e 3d 26 61 4d 65 6d 5b 70 31 5d 20 26 26 20 70  >=&aMem[p1] && p
8110: 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 3c  Out->pScopyFrom<
8120: 26 61 4d 65 6d 5b 70 31 2b 70 4f 70 2d 3e 70 33  &aMem[p1+pOp->p3
8130: 5d 20 29 7b 0a 20 20 20 20 20 20 70 4f 75 74 2d  ] ){.      pOut-
8140: 3e 70 53 63 6f 70 79 46 72 6f 6d 20 2b 3d 20 70  >pScopyFrom += p
8150: 31 20 2d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 20  1 - pOp->p2;.   
8160: 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 70 49   }.#endif.    pI
8170: 6e 31 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d 20 7a 4d  n1->zMalloc = zM
8180: 61 6c 6c 6f 63 3b 0a 20 20 20 20 52 45 47 49 53  alloc;.    REGIS
8190: 54 45 52 5f 54 52 41 43 45 28 70 32 2b 2b 2c 20  TER_TRACE(p2++, 
81a0: 70 4f 75 74 29 3b 0a 20 20 20 20 70 49 6e 31 2b  pOut);.    pIn1+
81b0: 2b 3b 0a 20 20 20 20 70 4f 75 74 2b 2b 3b 0a 20  +;.    pOut++;. 
81c0: 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
81d0: 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 70 79 20 50  * Opcode: Copy P
81e0: 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
81f0: 20 4d 61 6b 65 20 61 20 63 6f 70 79 20 6f 66 20   Make a copy of 
8200: 72 65 67 69 73 74 65 72 20 50 31 20 69 6e 74 6f  register P1 into
8210: 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a   register P2..**
8220: 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63  .** This instruc
8230: 74 69 6f 6e 20 6d 61 6b 65 73 20 61 20 64 65 65  tion makes a dee
8240: 70 20 63 6f 70 79 20 6f 66 20 74 68 65 20 76 61  p copy of the va
8250: 6c 75 65 2e 20 20 41 20 64 75 70 6c 69 63 61 74  lue.  A duplicat
8260: 65 0a 2a 2a 20 69 73 20 6d 61 64 65 20 6f 66 20  e.** is made of 
8270: 61 6e 79 20 73 74 72 69 6e 67 20 6f 72 20 62 6c  any string or bl
8280: 6f 62 20 63 6f 6e 73 74 61 6e 74 2e 20 20 53 65  ob constant.  Se
8290: 65 20 61 6c 73 6f 20 4f 50 5f 53 43 6f 70 79 2e  e also OP_SCopy.
82a0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 70 79  .*/.case OP_Copy
82b0: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
82c0: 2f 2a 20 69 6e 31 2c 20 6f 75 74 32 20 2a 2f 0a  /* in1, out2 */.
82d0: 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
82e0: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20  Op->p1];.  pOut 
82f0: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
8300: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 75 74  ;.  assert( pOut
8310: 21 3d 70 49 6e 31 20 29 3b 0a 20 20 73 71 6c 69  !=pIn1 );.  sqli
8320: 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f  te3VdbeMemShallo
8330: 77 43 6f 70 79 28 70 4f 75 74 2c 20 70 49 6e 31  wCopy(pOut, pIn1
8340: 2c 20 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a 20 20  , MEM_Ephem);.  
8350: 44 65 65 70 68 65 6d 65 72 61 6c 69 7a 65 28 70  Deephemeralize(p
8360: 4f 75 74 29 3b 0a 20 20 52 45 47 49 53 54 45 52  Out);.  REGISTER
8370: 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20  _TRACE(pOp->p2, 
8380: 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  pOut);.  break;.
8390: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 43  }../* Opcode: SC
83a0: 6f 70 79 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  opy P1 P2 * * *.
83b0: 2a 2a 0a 2a 2a 20 4d 61 6b 65 20 61 20 73 68 61  **.** Make a sha
83c0: 6c 6c 6f 77 20 63 6f 70 79 20 6f 66 20 72 65 67  llow copy of reg
83d0: 69 73 74 65 72 20 50 31 20 69 6e 74 6f 20 72 65  ister P1 into re
83e0: 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a  gister P2..**.**
83f0: 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   This instructio
8400: 6e 20 6d 61 6b 65 73 20 61 20 73 68 61 6c 6c 6f  n makes a shallo
8410: 77 20 63 6f 70 79 20 6f 66 20 74 68 65 20 76 61  w copy of the va
8420: 6c 75 65 2e 20 20 49 66 20 74 68 65 20 76 61 6c  lue.  If the val
8430: 75 65 0a 2a 2a 20 69 73 20 61 20 73 74 72 69 6e  ue.** is a strin
8440: 67 20 6f 72 20 62 6c 6f 62 2c 20 74 68 65 6e 20  g or blob, then 
8450: 74 68 65 20 63 6f 70 79 20 69 73 20 6f 6e 6c 79  the copy is only
8460: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68   a pointer to th
8470: 65 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c 20 61 6e  e.** original an
8480: 64 20 68 65 6e 63 65 20 69 66 20 74 68 65 20 6f  d hence if the o
8490: 72 69 67 69 6e 61 6c 20 63 68 61 6e 67 65 73 20  riginal changes 
84a0: 73 6f 20 77 69 6c 6c 20 74 68 65 20 63 6f 70 79  so will the copy
84b0: 2e 0a 2a 2a 20 57 6f 72 73 65 2c 20 69 66 20 74  ..** Worse, if t
84c0: 68 65 20 6f 72 69 67 69 6e 61 6c 20 69 73 20 64  he original is d
84d0: 65 61 6c 6c 6f 63 61 74 65 64 2c 20 74 68 65 20  eallocated, the 
84e0: 63 6f 70 79 20 62 65 63 6f 6d 65 73 20 69 6e 76  copy becomes inv
84f0: 61 6c 69 64 2e 0a 2a 2a 20 54 68 75 73 20 74 68  alid..** Thus th
8500: 65 20 70 72 6f 67 72 61 6d 20 6d 75 73 74 20 67  e program must g
8510: 75 61 72 61 6e 74 65 65 20 74 68 61 74 20 74 68  uarantee that th
8520: 65 20 6f 72 69 67 69 6e 61 6c 20 77 69 6c 6c 20  e original will 
8530: 6e 6f 74 20 63 68 61 6e 67 65 0a 2a 2a 20 64 75  not change.** du
8540: 72 69 6e 67 20 74 68 65 20 6c 69 66 65 74 69 6d  ring the lifetim
8550: 65 20 6f 66 20 74 68 65 20 63 6f 70 79 2e 20 20  e of the copy.  
8560: 55 73 65 20 4f 50 5f 43 6f 70 79 20 74 6f 20 6d  Use OP_Copy to m
8570: 61 6b 65 20 61 20 63 6f 6d 70 6c 65 74 65 0a 2a  ake a complete.*
8580: 2a 20 63 6f 70 79 2e 0a 2a 2f 0a 63 61 73 65 20  * copy..*/.case 
8590: 4f 50 5f 53 43 6f 70 79 3a 20 7b 20 20 20 20 20  OP_SCopy: {     
85a0: 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 2c 20 6f         /* in1, o
85b0: 75 74 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  ut2 */.  pIn1 = 
85c0: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
85d0: 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
85e0: 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72  Op->p2];.  asser
85f0: 74 28 20 70 4f 75 74 21 3d 70 49 6e 31 20 29 3b  t( pOut!=pIn1 );
8600: 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
8610: 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75  mShallowCopy(pOu
8620: 74 2c 20 70 49 6e 31 2c 20 4d 45 4d 5f 45 70 68  t, pIn1, MEM_Eph
8630: 65 6d 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  em);.#ifdef SQLI
8640: 54 45 5f 44 45 42 55 47 0a 20 20 69 66 28 20 70  TE_DEBUG.  if( p
8650: 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 3d  Out->pScopyFrom=
8660: 3d 30 20 29 20 70 4f 75 74 2d 3e 70 53 63 6f 70  =0 ) pOut->pScop
8670: 79 46 72 6f 6d 20 3d 20 70 49 6e 31 3b 0a 23 65  yFrom = pIn1;.#e
8680: 6e 64 69 66 0a 20 20 52 45 47 49 53 54 45 52 5f  ndif.  REGISTER_
8690: 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70  TRACE(pOp->p2, p
86a0: 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Out);.  break;.}
86b0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 73  ../* Opcode: Res
86c0: 75 6c 74 52 6f 77 20 50 31 20 50 32 20 2a 20 2a  ultRow P1 P2 * *
86d0: 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 65 67   *.**.** The reg
86e0: 69 73 74 65 72 73 20 50 31 20 74 68 72 6f 75 67  isters P1 throug
86f0: 68 20 50 31 2b 50 32 2d 31 20 63 6f 6e 74 61 69  h P1+P2-1 contai
8700: 6e 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 6f  n a single row o
8710: 66 0a 2a 2a 20 72 65 73 75 6c 74 73 2e 20 54 68  f.** results. Th
8720: 69 73 20 6f 70 63 6f 64 65 20 63 61 75 73 65 73  is opcode causes
8730: 20 74 68 65 20 73 71 6c 69 74 65 33 5f 73 74 65   the sqlite3_ste
8740: 70 28 29 20 63 61 6c 6c 20 74 6f 20 74 65 72 6d  p() call to term
8750: 69 6e 61 74 65 0a 2a 2a 20 77 69 74 68 20 61 6e  inate.** with an
8760: 20 53 51 4c 49 54 45 5f 52 4f 57 20 72 65 74 75   SQLITE_ROW retu
8770: 72 6e 20 63 6f 64 65 20 61 6e 64 20 69 74 20 73  rn code and it s
8780: 65 74 73 20 75 70 20 74 68 65 20 73 71 6c 69 74  ets up the sqlit
8790: 65 33 5f 73 74 6d 74 0a 2a 2a 20 73 74 72 75 63  e3_stmt.** struc
87a0: 74 75 72 65 20 74 6f 20 70 72 6f 76 69 64 65 20  ture to provide 
87b0: 61 63 63 65 73 73 20 74 6f 20 74 68 65 20 74 6f  access to the to
87c0: 70 20 50 31 20 76 61 6c 75 65 73 20 61 73 20 74  p P1 values as t
87d0: 68 65 20 72 65 73 75 6c 74 0a 2a 2a 20 72 6f 77  he result.** row
87e0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 73  ..*/.case OP_Res
87f0: 75 6c 74 52 6f 77 3a 20 7b 0a 20 20 4d 65 6d 20  ultRow: {.  Mem 
8800: 2a 70 4d 65 6d 3b 0a 20 20 69 6e 74 20 69 3b 0a  *pMem;.  int i;.
8810: 20 20 61 73 73 65 72 74 28 20 70 2d 3e 6e 52 65    assert( p->nRe
8820: 73 43 6f 6c 75 6d 6e 3d 3d 70 4f 70 2d 3e 70 32  sColumn==pOp->p2
8830: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
8840: 70 2d 3e 70 31 3e 30 20 29 3b 0a 20 20 61 73 73  p->p1>0 );.  ass
8850: 65 72 74 28 20 70 4f 70 2d 3e 70 31 2b 70 4f 70  ert( pOp->p1+pOp
8860: 2d 3e 70 32 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31 20  ->p2<=p->nMem+1 
8870: 29 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 69 73  );..  /* If this
8880: 20 73 74 61 74 65 6d 65 6e 74 20 68 61 73 20 76   statement has v
8890: 69 6f 6c 61 74 65 64 20 69 6d 6d 65 64 69 61 74  iolated immediat
88a0: 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f  e foreign key co
88b0: 6e 73 74 72 61 69 6e 74 73 2c 20 64 6f 0a 20 20  nstraints, do.  
88c0: 2a 2a 20 6e 6f 74 20 72 65 74 75 72 6e 20 74 68  ** not return th
88d0: 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73  e number of rows
88e0: 20 6d 6f 64 69 66 69 65 64 2e 20 41 6e 64 20 64   modified. And d
88f0: 6f 20 6e 6f 74 20 52 45 4c 45 41 53 45 20 74 68  o not RELEASE th
8900: 65 20 73 74 61 74 65 6d 65 6e 74 0a 20 20 2a 2a  e statement.  **
8910: 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 49 74   transaction. It
8920: 20 6e 65 65 64 73 20 74 6f 20 62 65 20 72 6f 6c   needs to be rol
8930: 6c 65 64 20 62 61 63 6b 2e 20 20 2a 2f 0a 20 20  led back.  */.  
8940: 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b 21 3d 28  if( SQLITE_OK!=(
8950: 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
8960: 43 68 65 63 6b 46 6b 28 70 2c 20 30 29 29 20 29  CheckFk(p, 0)) )
8970: 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 64 62  {.    assert( db
8980: 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54 45 5f 43  ->flags&SQLITE_C
8990: 6f 75 6e 74 52 6f 77 73 20 29 3b 0a 20 20 20 20  ountRows );.    
89a0: 61 73 73 65 72 74 28 20 70 2d 3e 75 73 65 73 53  assert( p->usesS
89b0: 74 6d 74 4a 6f 75 72 6e 61 6c 20 29 3b 0a 20 20  tmtJournal );.  
89c0: 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20    break;.  }..  
89d0: 2f 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54 45  /* If the SQLITE
89e0: 5f 43 6f 75 6e 74 52 6f 77 73 20 66 6c 61 67 20  _CountRows flag 
89f0: 69 73 20 73 65 74 20 69 6e 20 73 71 6c 69 74 65  is set in sqlite
8a00: 33 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68  3.flags mask, th
8a10: 65 6e 20 0a 20 20 2a 2a 20 44 4d 4c 20 73 74 61  en .  ** DML sta
8a20: 74 65 6d 65 6e 74 73 20 69 6e 76 6f 6b 65 20 74  tements invoke t
8a30: 68 69 73 20 6f 70 63 6f 64 65 20 74 6f 20 72 65  his opcode to re
8a40: 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72 20  turn the number 
8a50: 6f 66 20 72 6f 77 73 20 0a 20 20 2a 2a 20 6d 6f  of rows .  ** mo
8a60: 64 69 66 69 65 64 20 74 6f 20 74 68 65 20 75 73  dified to the us
8a70: 65 72 2e 20 54 68 69 73 20 69 73 20 74 68 65 20  er. This is the 
8a80: 6f 6e 6c 79 20 77 61 79 20 74 68 61 74 20 61 20  only way that a 
8a90: 56 4d 20 74 68 61 74 0a 20 20 2a 2a 20 6f 70 65  VM that.  ** ope
8aa0: 6e 73 20 61 20 73 74 61 74 65 6d 65 6e 74 20 74  ns a statement t
8ab0: 72 61 6e 73 61 63 74 69 6f 6e 20 6d 61 79 20 69  ransaction may i
8ac0: 6e 76 6f 6b 65 20 74 68 69 73 20 6f 70 63 6f 64  nvoke this opcod
8ad0: 65 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49 6e 20  e..  **.  ** In 
8ae0: 63 61 73 65 20 74 68 69 73 20 69 73 20 73 75 63  case this is suc
8af0: 68 20 61 20 73 74 61 74 65 6d 65 6e 74 2c 20 63  h a statement, c
8b00: 6c 6f 73 65 20 61 6e 79 20 73 74 61 74 65 6d 65  lose any stateme
8b10: 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 20  nt transaction. 
8b20: 20 2a 2a 20 6f 70 65 6e 65 64 20 62 79 20 74 68   ** opened by th
8b30: 69 73 20 56 4d 20 62 65 66 6f 72 65 20 72 65 74  is VM before ret
8b40: 75 72 6e 69 6e 67 20 63 6f 6e 74 72 6f 6c 20 74  urning control t
8b50: 6f 20 74 68 65 20 75 73 65 72 2e 20 54 68 69 73  o the user. This
8b60: 20 69 73 20 74 6f 0a 20 20 2a 2a 20 65 6e 73 75   is to.  ** ensu
8b70: 72 65 20 74 68 61 74 20 73 74 61 74 65 6d 65 6e  re that statemen
8b80: 74 2d 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 61  t-transactions a
8b90: 72 65 20 61 6c 77 61 79 73 20 6e 65 73 74 65 64  re always nested
8ba0: 2c 20 6e 6f 74 20 6f 76 65 72 6c 61 70 70 69 6e  , not overlappin
8bb0: 67 2e 0a 20 20 2a 2a 20 49 66 20 74 68 65 20 6f  g..  ** If the o
8bc0: 70 65 6e 20 73 74 61 74 65 6d 65 6e 74 2d 74 72  pen statement-tr
8bd0: 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e 6f 74  ansaction is not
8be0: 20 63 6c 6f 73 65 64 20 68 65 72 65 2c 20 74 68   closed here, th
8bf0: 65 6e 20 74 68 65 20 75 73 65 72 0a 20 20 2a 2a  en the user.  **
8c00: 20 6d 61 79 20 73 74 65 70 20 61 6e 6f 74 68 65   may step anothe
8c10: 72 20 56 4d 20 74 68 61 74 20 6f 70 65 6e 73 20  r VM that opens 
8c20: 69 74 73 20 6f 77 6e 20 73 74 61 74 65 6d 65 6e  its own statemen
8c30: 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 54  t transaction. T
8c40: 68 69 73 0a 20 20 2a 2a 20 6d 61 79 20 6c 65 61  his.  ** may lea
8c50: 64 20 74 6f 20 6f 76 65 72 6c 61 70 70 69 6e 67  d to overlapping
8c60: 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73   statement trans
8c70: 61 63 74 69 6f 6e 73 2e 0a 20 20 2a 2a 0a 20 20  actions..  **.  
8c80: 2a 2a 20 54 68 65 20 73 74 61 74 65 6d 65 6e 74  ** The statement
8c90: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20   transaction is 
8ca0: 6e 65 76 65 72 20 61 20 74 6f 70 2d 6c 65 76 65  never a top-leve
8cb0: 6c 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20  l transaction.  
8cc0: 48 65 6e 63 65 0a 20 20 2a 2a 20 74 68 65 20 52  Hence.  ** the R
8cd0: 45 4c 45 41 53 45 20 63 61 6c 6c 20 62 65 6c 6f  ELEASE call belo
8ce0: 77 20 63 61 6e 20 6e 65 76 65 72 20 66 61 69 6c  w can never fail
8cf0: 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ..  */.  assert(
8d00: 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 3d 3d   p->iStatement==
8d10: 30 20 7c 7c 20 64 62 2d 3e 66 6c 61 67 73 26 53  0 || db->flags&S
8d20: 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20  QLITE_CountRows 
8d30: 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  );.  rc = sqlite
8d40: 33 56 64 62 65 43 6c 6f 73 65 53 74 61 74 65 6d  3VdbeCloseStatem
8d50: 65 6e 74 28 70 2c 20 53 41 56 45 50 4f 49 4e 54  ent(p, SAVEPOINT
8d60: 5f 52 45 4c 45 41 53 45 29 3b 0a 20 20 69 66 28  _RELEASE);.  if(
8d70: 20 4e 45 56 45 52 28 72 63 21 3d 53 51 4c 49 54   NEVER(rc!=SQLIT
8d80: 45 5f 4f 4b 29 20 29 7b 0a 20 20 20 20 62 72 65  E_OK) ){.    bre
8d90: 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 6e  ak;.  }..  /* In
8da0: 76 61 6c 69 64 61 74 65 20 61 6c 6c 20 65 70 68  validate all eph
8db0: 65 6d 65 72 61 6c 20 63 75 72 73 6f 72 20 72 6f  emeral cursor ro
8dc0: 77 20 63 61 63 68 65 73 20 2a 2f 0a 20 20 70 2d  w caches */.  p-
8dd0: 3e 63 61 63 68 65 43 74 72 20 3d 20 28 70 2d 3e  >cacheCtr = (p->
8de0: 63 61 63 68 65 43 74 72 20 2b 20 32 29 7c 31 3b  cacheCtr + 2)|1;
8df0: 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65  ..  /* Make sure
8e00: 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20   the results of 
8e10: 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77 20  the current row 
8e20: 61 72 65 20 5c 30 30 30 20 74 65 72 6d 69 6e 61  are \000 termina
8e30: 74 65 64 0a 20 20 2a 2a 20 61 6e 64 20 68 61 76  ted.  ** and hav
8e40: 65 20 61 6e 20 61 73 73 69 67 6e 65 64 20 74 79  e an assigned ty
8e50: 70 65 2e 20 20 54 68 65 20 72 65 73 75 6c 74 73  pe.  The results
8e60: 20 61 72 65 20 64 65 2d 65 70 68 65 6d 65 72 61   are de-ephemera
8e70: 6c 69 7a 65 64 20 61 73 0a 20 20 2a 2a 20 61 73  lized as.  ** as
8e80: 20 73 69 64 65 20 65 66 66 65 63 74 2e 0a 20 20   side effect..  
8e90: 2a 2f 0a 20 20 70 4d 65 6d 20 3d 20 70 2d 3e 70  */.  pMem = p->p
8ea0: 52 65 73 75 6c 74 53 65 74 20 3d 20 26 61 4d 65  ResultSet = &aMe
8eb0: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 66 6f  m[pOp->p1];.  fo
8ec0: 72 28 69 3d 30 3b 20 69 3c 70 4f 70 2d 3e 70 32  r(i=0; i<pOp->p2
8ed0: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65  ; i++){.    asse
8ee0: 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26  rt( memIsValid(&
8ef0: 70 4d 65 6d 5b 69 5d 29 20 29 3b 0a 20 20 20 20  pMem[i]) );.    
8f00: 44 65 65 70 68 65 6d 65 72 61 6c 69 7a 65 28 26  Deephemeralize(&
8f10: 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 20 20 61 73  pMem[i]);.    as
8f20: 73 65 72 74 28 20 28 70 4d 65 6d 5b 69 5d 2e 66  sert( (pMem[i].f
8f30: 6c 61 67 73 20 26 20 4d 45 4d 5f 45 70 68 65 6d  lags & MEM_Ephem
8f40: 29 3d 3d 30 0a 20 20 20 20 20 20 20 20 20 20 20  )==0.           
8f50: 20 7c 7c 20 28 70 4d 65 6d 5b 69 5d 2e 66 6c 61   || (pMem[i].fla
8f60: 67 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45  gs & (MEM_Str|ME
8f70: 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 29 3b 0a 20  M_Blob))==0 );. 
8f80: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
8f90: 6d 4e 75 6c 54 65 72 6d 69 6e 61 74 65 28 26 70  mNulTerminate(&p
8fa0: 4d 65 6d 5b 69 5d 29 3b 0a 20 20 20 20 73 71 6c  Mem[i]);.    sql
8fb0: 69 74 65 33 56 64 62 65 4d 65 6d 53 74 6f 72 65  ite3VdbeMemStore
8fc0: 54 79 70 65 28 26 70 4d 65 6d 5b 69 5d 29 3b 0a  Type(&pMem[i]);.
8fd0: 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41      REGISTER_TRA
8fe0: 43 45 28 70 4f 70 2d 3e 70 31 2b 69 2c 20 26 70  CE(pOp->p1+i, &p
8ff0: 4d 65 6d 5b 69 5d 29 3b 0a 20 20 7d 0a 20 20 69  Mem[i]);.  }.  i
9000: 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69  f( db->mallocFai
9010: 6c 65 64 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  led ) goto no_me
9020: 6d 3b 0a 0a 20 20 2f 2a 20 52 65 74 75 72 6e 20  m;..  /* Return 
9030: 53 51 4c 49 54 45 5f 52 4f 57 0a 20 20 2a 2f 0a  SQLITE_ROW.  */.
9040: 20 20 70 2d 3e 70 63 20 3d 20 70 63 20 2b 20 31    p->pc = pc + 1
9050: 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f  ;.  rc = SQLITE_
9060: 52 4f 57 3b 0a 20 20 67 6f 74 6f 20 76 64 62 65  ROW;.  goto vdbe
9070: 5f 72 65 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a 20 4f  _return;.}../* O
9080: 70 63 6f 64 65 3a 20 43 6f 6e 63 61 74 20 50 31  pcode: Concat P1
9090: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
90a0: 20 41 64 64 20 74 68 65 20 74 65 78 74 20 69 6e   Add the text in
90b0: 20 72 65 67 69 73 74 65 72 20 50 31 20 6f 6e 74   register P1 ont
90c0: 6f 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65  o the end of the
90d0: 20 74 65 78 74 20 69 6e 0a 2a 2a 20 72 65 67 69   text in.** regi
90e0: 73 74 65 72 20 50 32 20 61 6e 64 20 73 74 6f 72  ster P2 and stor
90f0: 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20  e the result in 
9100: 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20  register P3..** 
9110: 49 66 20 65 69 74 68 65 72 20 74 68 65 20 50 31  If either the P1
9120: 20 6f 72 20 50 32 20 74 65 78 74 20 61 72 65 20   or P2 text are 
9130: 4e 55 4c 4c 20 74 68 65 6e 20 73 74 6f 72 65 20  NULL then store 
9140: 4e 55 4c 4c 20 69 6e 20 50 33 2e 0a 2a 2a 0a 2a  NULL in P3..**.*
9150: 2a 20 20 20 50 33 20 3d 20 50 32 20 7c 7c 20 50  *   P3 = P2 || P
9160: 31 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69 6c  1.**.** It is il
9170: 6c 65 67 61 6c 20 66 6f 72 20 50 31 20 61 6e 64  legal for P1 and
9180: 20 50 33 20 74 6f 20 62 65 20 74 68 65 20 73 61   P3 to be the sa
9190: 6d 65 20 72 65 67 69 73 74 65 72 2e 20 53 6f 6d  me register. Som
91a0: 65 74 69 6d 65 73 2c 0a 2a 2a 20 69 66 20 50 33  etimes,.** if P3
91b0: 20 69 73 20 74 68 65 20 73 61 6d 65 20 72 65 67   is the same reg
91c0: 69 73 74 65 72 20 61 73 20 50 32 2c 20 74 68 65  ister as P2, the
91d0: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
91e0: 69 73 20 61 62 6c 65 0a 2a 2a 20 74 6f 20 61 76  is able.** to av
91f0: 6f 69 64 20 61 20 6d 65 6d 63 70 79 28 29 2e 0a  oid a memcpy()..
9200: 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6e 63 61  */.case OP_Conca
9210: 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f  t: {           /
9220: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 43 4f 4e  * same as TK_CON
9230: 43 41 54 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f  CAT, in1, in2, o
9240: 75 74 33 20 2a 2f 0a 20 20 69 36 34 20 6e 42 79  ut3 */.  i64 nBy
9250: 74 65 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61  te;..  pIn1 = &a
9260: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
9270: 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn2 = &aMem[pOp
9280: 2d 3e 70 32 5d 3b 0a 20 20 70 4f 75 74 20 3d 20  ->p2];.  pOut = 
9290: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
92a0: 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 21 3d    assert( pIn1!=
92b0: 70 4f 75 74 20 29 3b 0a 20 20 69 66 28 20 28 70  pOut );.  if( (p
92c0: 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49 6e  In1->flags | pIn
92d0: 32 2d 3e 66 6c 61 67 73 29 20 26 20 4d 45 4d 5f  2->flags) & MEM_
92e0: 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69  Null ){.    sqli
92f0: 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c  te3VdbeMemSetNul
9300: 6c 28 70 4f 75 74 29 3b 0a 20 20 20 20 62 72 65  l(pOut);.    bre
9310: 61 6b 3b 0a 20 20 7d 0a 20 20 69 66 28 20 45 78  ak;.  }.  if( Ex
9320: 70 61 6e 64 42 6c 6f 62 28 70 49 6e 31 29 20 7c  pandBlob(pIn1) |
9330: 7c 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e  | ExpandBlob(pIn
9340: 32 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  2) ) goto no_mem
9350: 3b 0a 20 20 53 74 72 69 6e 67 69 66 79 28 70 49  ;.  Stringify(pI
9360: 6e 31 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  n1, encoding);. 
9370: 20 53 74 72 69 6e 67 69 66 79 28 70 49 6e 32 2c   Stringify(pIn2,
9380: 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 6e 42   encoding);.  nB
9390: 79 74 65 20 3d 20 70 49 6e 31 2d 3e 6e 20 2b 20  yte = pIn1->n + 
93a0: 70 49 6e 32 2d 3e 6e 3b 0a 20 20 69 66 28 20 6e  pIn2->n;.  if( n
93b0: 42 79 74 65 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b  Byte>db->aLimit[
93c0: 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e  SQLITE_LIMIT_LEN
93d0: 47 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f  GTH] ){.    goto
93e0: 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20   too_big;.  }.  
93f0: 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
9400: 4f 75 74 2c 20 4d 45 4d 5f 53 74 72 29 3b 0a 20  Out, MEM_Str);. 
9410: 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65   if( sqlite3Vdbe
9420: 4d 65 6d 47 72 6f 77 28 70 4f 75 74 2c 20 28 69  MemGrow(pOut, (i
9430: 6e 74 29 6e 42 79 74 65 2b 32 2c 20 70 4f 75 74  nt)nByte+2, pOut
9440: 3d 3d 70 49 6e 32 29 20 29 7b 0a 20 20 20 20 67  ==pIn2) ){.    g
9450: 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a  oto no_mem;.  }.
9460: 20 20 69 66 28 20 70 4f 75 74 21 3d 70 49 6e 32    if( pOut!=pIn2
9470: 20 29 7b 0a 20 20 20 20 6d 65 6d 63 70 79 28 70   ){.    memcpy(p
9480: 4f 75 74 2d 3e 7a 2c 20 70 49 6e 32 2d 3e 7a 2c  Out->z, pIn2->z,
9490: 20 70 49 6e 32 2d 3e 6e 29 3b 0a 20 20 7d 0a 20   pIn2->n);.  }. 
94a0: 20 6d 65 6d 63 70 79 28 26 70 4f 75 74 2d 3e 7a   memcpy(&pOut->z
94b0: 5b 70 49 6e 32 2d 3e 6e 5d 2c 20 70 49 6e 31 2d  [pIn2->n], pIn1-
94c0: 3e 7a 2c 20 70 49 6e 31 2d 3e 6e 29 3b 0a 20 20  >z, pIn1->n);.  
94d0: 70 4f 75 74 2d 3e 7a 5b 6e 42 79 74 65 5d 20 3d  pOut->z[nByte] =
94e0: 20 30 3b 0a 20 20 70 4f 75 74 2d 3e 7a 5b 6e 42   0;.  pOut->z[nB
94f0: 79 74 65 2b 31 5d 20 3d 20 30 3b 0a 20 20 70 4f  yte+1] = 0;.  pO
9500: 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d  ut->flags |= MEM
9510: 5f 54 65 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e 6e  _Term;.  pOut->n
9520: 20 3d 20 28 69 6e 74 29 6e 42 79 74 65 3b 0a 20   = (int)nByte;. 
9530: 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e 63   pOut->enc = enc
9540: 6f 64 69 6e 67 3b 0a 20 20 55 50 44 41 54 45 5f  oding;.  UPDATE_
9550: 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75  MAX_BLOBSIZE(pOu
9560: 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
9570: 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 64 64 20 50  /* Opcode: Add P
9580: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
9590: 2a 20 41 64 64 20 74 68 65 20 76 61 6c 75 65 20  * Add the value 
95a0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 74  in register P1 t
95b0: 6f 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  o the value in r
95c0: 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e  egister P2.** an
95d0: 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75  d store the resu
95e0: 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  lt in register P
95f0: 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20  3..** If either 
9600: 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74  input is NULL, t
9610: 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c  he result is NUL
9620: 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  L..*/./* Opcode:
9630: 20 4d 75 6c 74 69 70 6c 79 20 50 31 20 50 32 20   Multiply P1 P2 
9640: 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 0a 2a 2a 20  P3 * *.**.**.** 
9650: 4d 75 6c 74 69 70 6c 79 20 74 68 65 20 76 61 6c  Multiply the val
9660: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
9670: 31 20 62 79 20 74 68 65 20 76 61 6c 75 65 20 69  1 by the value i
9680: 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a  n register P2.**
9690: 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72   and store the r
96a0: 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65  esult in registe
96b0: 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68  r P3..** If eith
96c0: 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c  er input is NULL
96d0: 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  , the result is 
96e0: 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  NULL..*/./* Opco
96f0: 64 65 3a 20 53 75 62 74 72 61 63 74 20 50 31 20  de: Subtract P1 
9700: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
9710: 53 75 62 74 72 61 63 74 20 74 68 65 20 76 61 6c  Subtract the val
9720: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
9730: 31 20 66 72 6f 6d 20 74 68 65 20 76 61 6c 75 65  1 from the value
9740: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a   in register P2.
9750: 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65  ** and store the
9760: 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73   result in regis
9770: 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69  ter P3..** If ei
9780: 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55  ther input is NU
9790: 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69  LL, the result i
97a0: 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70  s NULL..*/./* Op
97b0: 63 6f 64 65 3a 20 44 69 76 69 64 65 20 50 31 20  code: Divide P1 
97c0: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
97d0: 44 69 76 69 64 65 20 74 68 65 20 76 61 6c 75 65  Divide the value
97e0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
97f0: 62 79 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  by the value in 
9800: 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 61  register P2.** a
9810: 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73  nd store the res
9820: 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ult in register 
9830: 50 33 20 28 50 33 3d 50 32 2f 50 31 29 2e 20 49  P3 (P3=P2/P1). I
9840: 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 0a  f the value in .
9850: 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31 20 69  ** register P1 i
9860: 73 20 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65  s zero, then the
9870: 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e   result is NULL.
9880: 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74   If either input
9890: 20 69 73 20 0a 2a 2a 20 4e 55 4c 4c 2c 20 74 68   is .** NULL, th
98a0: 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  e result is NULL
98b0: 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
98c0: 52 65 6d 61 69 6e 64 65 72 20 50 31 20 50 32 20  Remainder P1 P2 
98d0: 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 6f 6d  P3 * *.**.** Com
98e0: 70 75 74 65 20 74 68 65 20 72 65 6d 61 69 6e 64  pute the remaind
98f0: 65 72 20 61 66 74 65 72 20 69 6e 74 65 67 65 72  er after integer
9900: 20 64 69 76 69 73 69 6f 6e 20 6f 66 20 74 68 65   division of the
9910: 20 76 61 6c 75 65 20 69 6e 0a 2a 2a 20 72 65 67   value in.** reg
9920: 69 73 74 65 72 20 50 31 20 62 79 20 74 68 65 20  ister P1 by the 
9930: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
9940: 72 20 50 32 20 61 6e 64 20 73 74 6f 72 65 20 74  r P2 and store t
9950: 68 65 20 72 65 73 75 6c 74 20 69 6e 20 50 33 2e  he result in P3.
9960: 20 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75   .** If the valu
9970: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  e in register P2
9980: 20 69 73 20 7a 65 72 6f 20 74 68 65 20 72 65 73   is zero the res
9990: 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 20  ult is NULL..** 
99a0: 49 66 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e  If either operan
99b0: 64 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72  d is NULL, the r
99c0: 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a  esult is NULL..*
99d0: 2f 0a 63 61 73 65 20 4f 50 5f 41 64 64 3a 20 20  /.case OP_Add:  
99e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
99f0: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 50   /* same as TK_P
9a00: 4c 55 53 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f  LUS, in1, in2, o
9a10: 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  ut3 */.case OP_S
9a20: 75 62 74 72 61 63 74 3a 20 20 20 20 20 20 20 20  ubtract:        
9a30: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
9a40: 20 54 4b 5f 4d 49 4e 55 53 2c 20 69 6e 31 2c 20   TK_MINUS, in1, 
9a50: 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73  in2, out3 */.cas
9a60: 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a 20 20  e OP_Multiply:  
9a70: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
9a80: 61 6d 65 20 61 73 20 54 4b 5f 53 54 41 52 2c 20  ame as TK_STAR, 
9a90: 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a  in1, in2, out3 *
9aa0: 2f 0a 63 61 73 65 20 4f 50 5f 44 69 76 69 64 65  /.case OP_Divide
9ab0: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :               
9ac0: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 53   /* same as TK_S
9ad0: 4c 41 53 48 2c 20 69 6e 31 2c 20 69 6e 32 2c 20  LASH, in1, in2, 
9ae0: 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  out3 */.case OP_
9af0: 52 65 6d 61 69 6e 64 65 72 3a 20 7b 20 20 20 20  Remainder: {    
9b00: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
9b10: 73 20 54 4b 5f 52 45 4d 2c 20 69 6e 31 2c 20 69  s TK_REM, in1, i
9b20: 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69 6e  n2, out3 */.  in
9b30: 74 20 66 6c 61 67 73 3b 20 20 20 20 20 20 2f 2a  t flags;      /*
9b40: 20 43 6f 6d 62 69 6e 65 64 20 4d 45 4d 5f 2a 20   Combined MEM_* 
9b50: 66 6c 61 67 73 20 66 72 6f 6d 20 62 6f 74 68 20  flags from both 
9b60: 69 6e 70 75 74 73 20 2a 2f 0a 20 20 69 36 34 20  inputs */.  i64 
9b70: 69 41 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 49  iA;         /* I
9b80: 6e 74 65 67 65 72 20 76 61 6c 75 65 20 6f 66 20  nteger value of 
9b90: 6c 65 66 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a  left operand */.
9ba0: 20 20 69 36 34 20 69 42 3b 20 20 20 20 20 20 20    i64 iB;       
9bb0: 20 20 2f 2a 20 49 6e 74 65 67 65 72 20 76 61 6c    /* Integer val
9bc0: 75 65 20 6f 66 20 72 69 67 68 74 20 6f 70 65 72  ue of right oper
9bd0: 61 6e 64 20 2a 2f 0a 20 20 64 6f 75 62 6c 65 20  and */.  double 
9be0: 72 41 3b 20 20 20 20 20 20 2f 2a 20 52 65 61 6c  rA;      /* Real
9bf0: 20 76 61 6c 75 65 20 6f 66 20 6c 65 66 74 20 6f   value of left o
9c00: 70 65 72 61 6e 64 20 2a 2f 0a 20 20 64 6f 75 62  perand */.  doub
9c10: 6c 65 20 72 42 3b 20 20 20 20 20 20 2f 2a 20 52  le rB;      /* R
9c20: 65 61 6c 20 76 61 6c 75 65 20 6f 66 20 72 69 67  eal value of rig
9c30: 68 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 0a 20  ht operand */.. 
9c40: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
9c50: 70 2d 3e 70 31 5d 3b 0a 20 20 61 70 70 6c 79 4e  p->p1];.  applyN
9c60: 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 70  umericAffinity(p
9c70: 49 6e 31 29 3b 0a 20 20 70 49 6e 32 20 3d 20 26  In1);.  pIn2 = &
9c80: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
9c90: 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66   applyNumericAff
9ca0: 69 6e 69 74 79 28 70 49 6e 32 29 3b 0a 20 20 70  inity(pIn2);.  p
9cb0: 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
9cc0: 3e 70 33 5d 3b 0a 20 20 66 6c 61 67 73 20 3d 20  >p3];.  flags = 
9cd0: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49  pIn1->flags | pI
9ce0: 6e 32 2d 3e 66 6c 61 67 73 3b 0a 20 20 69 66 28  n2->flags;.  if(
9cf0: 20 28 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75   (flags & MEM_Nu
9d00: 6c 6c 29 21 3d 30 20 29 20 67 6f 74 6f 20 61 72  ll)!=0 ) goto ar
9d10: 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f  ithmetic_result_
9d20: 69 73 5f 6e 75 6c 6c 3b 0a 20 20 69 66 28 20 28  is_null;.  if( (
9d30: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 70 49  pIn1->flags & pI
9d40: 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n2->flags & MEM_
9d50: 49 6e 74 29 3d 3d 4d 45 4d 5f 49 6e 74 20 29 7b  Int)==MEM_Int ){
9d60: 0a 20 20 20 20 69 41 20 3d 20 70 49 6e 31 2d 3e  .    iA = pIn1->
9d70: 75 2e 69 3b 0a 20 20 20 20 69 42 20 3d 20 70 49  u.i;.    iB = pI
9d80: 6e 32 2d 3e 75 2e 69 3b 0a 20 20 20 20 73 77 69  n2->u.i;.    swi
9d90: 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  tch( pOp->opcode
9da0: 20 29 7b 0a 20 20 20 20 20 20 63 61 73 65 20 4f   ){.      case O
9db0: 50 5f 41 64 64 3a 20 20 20 20 20 20 20 69 66 28  P_Add:       if(
9dc0: 20 73 71 6c 69 74 65 33 41 64 64 49 6e 74 36 34   sqlite3AddInt64
9dd0: 28 26 69 42 2c 69 41 29 20 29 20 67 6f 74 6f 20  (&iB,iA) ) goto 
9de0: 66 70 5f 6d 61 74 68 3b 20 20 62 72 65 61 6b 3b  fp_math;  break;
9df0: 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 53  .      case OP_S
9e00: 75 62 74 72 61 63 74 3a 20 20 69 66 28 20 73 71  ubtract:  if( sq
9e10: 6c 69 74 65 33 53 75 62 49 6e 74 36 34 28 26 69  lite3SubInt64(&i
9e20: 42 2c 69 41 29 20 29 20 67 6f 74 6f 20 66 70 5f  B,iA) ) goto fp_
9e30: 6d 61 74 68 3b 20 20 62 72 65 61 6b 3b 0a 20 20  math;  break;.  
9e40: 20 20 20 20 63 61 73 65 20 4f 50 5f 4d 75 6c 74      case OP_Mult
9e50: 69 70 6c 79 3a 20 20 69 66 28 20 73 71 6c 69 74  iply:  if( sqlit
9e60: 65 33 4d 75 6c 49 6e 74 36 34 28 26 69 42 2c 69  e3MulInt64(&iB,i
9e70: 41 29 20 29 20 67 6f 74 6f 20 66 70 5f 6d 61 74  A) ) goto fp_mat
9e80: 68 3b 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20  h;  break;.     
9e90: 20 63 61 73 65 20 4f 50 5f 44 69 76 69 64 65 3a   case OP_Divide:
9ea0: 20 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 69   {.        if( i
9eb0: 41 3d 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74  A==0 ) goto arit
9ec0: 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73  hmetic_result_is
9ed0: 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69  _null;.        i
9ee0: 66 28 20 69 41 3d 3d 2d 31 20 26 26 20 69 42 3d  f( iA==-1 && iB=
9ef0: 3d 53 4d 41 4c 4c 45 53 54 5f 49 4e 54 36 34 20  =SMALLEST_INT64 
9f00: 29 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68 3b 0a  ) goto fp_math;.
9f10: 20 20 20 20 20 20 20 20 69 42 20 2f 3d 20 69 41          iB /= iA
9f20: 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b  ;.        break;
9f30: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 64  .      }.      d
9f40: 65 66 61 75 6c 74 3a 20 7b 0a 20 20 20 20 20 20  efault: {.      
9f50: 20 20 69 66 28 20 69 41 3d 3d 30 20 29 20 67 6f    if( iA==0 ) go
9f60: 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65  to arithmetic_re
9f70: 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20  sult_is_null;.  
9f80: 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d 2d 31        if( iA==-1
9f90: 20 29 20 69 41 20 3d 20 31 3b 0a 20 20 20 20 20   ) iA = 1;.     
9fa0: 20 20 20 69 42 20 25 3d 20 69 41 3b 0a 20 20 20     iB %= iA;.   
9fb0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
9fc0: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f    }.    }.    pO
9fd0: 75 74 2d 3e 75 2e 69 20 3d 20 69 42 3b 0a 20 20  ut->u.i = iB;.  
9fe0: 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
9ff0: 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b  (pOut, MEM_Int);
a000: 0a 20 20 7d 65 6c 73 65 7b 0a 66 70 5f 6d 61 74  .  }else{.fp_mat
a010: 68 3a 0a 20 20 20 20 72 41 20 3d 20 73 71 6c 69  h:.    rA = sqli
a020: 74 65 33 56 64 62 65 52 65 61 6c 56 61 6c 75 65  te3VdbeRealValue
a030: 28 70 49 6e 31 29 3b 0a 20 20 20 20 72 42 20 3d  (pIn1);.    rB =
a040: 20 73 71 6c 69 74 65 33 56 64 62 65 52 65 61 6c   sqlite3VdbeReal
a050: 56 61 6c 75 65 28 70 49 6e 32 29 3b 0a 20 20 20  Value(pIn2);.   
a060: 20 73 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70   switch( pOp->op
a070: 63 6f 64 65 20 29 7b 0a 20 20 20 20 20 20 63 61  code ){.      ca
a080: 73 65 20 4f 50 5f 41 64 64 3a 20 20 20 20 20 20  se OP_Add:      
a090: 20 20 20 72 42 20 2b 3d 20 72 41 3b 20 20 20 20     rB += rA;    
a0a0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
a0b0: 63 61 73 65 20 4f 50 5f 53 75 62 74 72 61 63 74  case OP_Subtract
a0c0: 3a 20 20 20 20 72 42 20 2d 3d 20 72 41 3b 20 20  :    rB -= rA;  
a0d0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
a0e0: 20 20 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70    case OP_Multip
a0f0: 6c 79 3a 20 20 20 20 72 42 20 2a 3d 20 72 41 3b  ly:    rB *= rA;
a100: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
a110: 20 20 20 20 63 61 73 65 20 4f 50 5f 44 69 76 69      case OP_Divi
a120: 64 65 3a 20 7b 0a 20 20 20 20 20 20 20 20 2f 2a  de: {.        /*
a130: 20 28 64 6f 75 62 6c 65 29 30 20 49 6e 20 63 61   (double)0 In ca
a140: 73 65 20 6f 66 20 53 51 4c 49 54 45 5f 4f 4d 49  se of SQLITE_OMI
a150: 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54  T_FLOATING_POINT
a160: 2e 2e 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 69  ... */.        i
a170: 66 28 20 72 41 3d 3d 28 64 6f 75 62 6c 65 29 30  f( rA==(double)0
a180: 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74   ) goto arithmet
a190: 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c  ic_result_is_nul
a1a0: 6c 3b 0a 20 20 20 20 20 20 20 20 72 42 20 2f 3d  l;.        rB /=
a1b0: 20 72 41 3b 0a 20 20 20 20 20 20 20 20 62 72 65   rA;.        bre
a1c0: 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ak;.      }.    
a1d0: 20 20 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20 20    default: {.   
a1e0: 20 20 20 20 20 69 41 20 3d 20 28 69 36 34 29 72       iA = (i64)r
a1f0: 41 3b 0a 20 20 20 20 20 20 20 20 69 42 20 3d 20  A;.        iB = 
a200: 28 69 36 34 29 72 42 3b 0a 20 20 20 20 20 20 20  (i64)rB;.       
a210: 20 69 66 28 20 69 41 3d 3d 30 20 29 20 67 6f 74   if( iA==0 ) got
a220: 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73  o arithmetic_res
a230: 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20  ult_is_null;.   
a240: 20 20 20 20 20 69 66 28 20 69 41 3d 3d 2d 31 20       if( iA==-1 
a250: 29 20 69 41 20 3d 20 31 3b 0a 20 20 20 20 20 20  ) iA = 1;.      
a260: 20 20 72 42 20 3d 20 28 64 6f 75 62 6c 65 29 28    rB = (double)(
a270: 69 42 20 25 20 69 41 29 3b 0a 20 20 20 20 20 20  iB % iA);.      
a280: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d    break;.      }
a290: 0a 20 20 20 20 7d 0a 23 69 66 64 65 66 20 53 51  .    }.#ifdef SQ
a2a0: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49  LITE_OMIT_FLOATI
a2b0: 4e 47 5f 50 4f 49 4e 54 0a 20 20 20 20 70 4f 75  NG_POINT.    pOu
a2c0: 74 2d 3e 75 2e 69 20 3d 20 72 42 3b 0a 20 20 20  t->u.i = rB;.   
a2d0: 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
a2e0: 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a  pOut, MEM_Int);.
a2f0: 23 65 6c 73 65 0a 20 20 20 20 69 66 28 20 73 71  #else.    if( sq
a300: 6c 69 74 65 33 49 73 4e 61 4e 28 72 42 29 20 29  lite3IsNaN(rB) )
a310: 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 72 69  {.      goto ari
a320: 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69  thmetic_result_i
a330: 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 7d 0a 20 20  s_null;.    }.  
a340: 20 20 70 4f 75 74 2d 3e 72 20 3d 20 72 42 3b 0a    pOut->r = rB;.
a350: 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c      MemSetTypeFl
a360: 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 52 65 61  ag(pOut, MEM_Rea
a370: 6c 29 3b 0a 20 20 20 20 69 66 28 20 28 66 6c 61  l);.    if( (fla
a380: 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 29 3d 3d  gs & MEM_Real)==
a390: 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  0 ){.      sqlit
a3a0: 65 33 56 64 62 65 49 6e 74 65 67 65 72 41 66 66  e3VdbeIntegerAff
a3b0: 69 6e 69 74 79 28 70 4f 75 74 29 3b 0a 20 20 20  inity(pOut);.   
a3c0: 20 7d 0a 23 65 6e 64 69 66 0a 20 20 7d 0a 20 20   }.#endif.  }.  
a3d0: 62 72 65 61 6b 3b 0a 0a 61 72 69 74 68 6d 65 74  break;..arithmet
a3e0: 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c  ic_result_is_nul
a3f0: 6c 3a 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  l:.  sqlite3Vdbe
a400: 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29  MemSetNull(pOut)
a410: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
a420: 20 4f 70 63 6f 64 65 3a 20 43 6f 6c 6c 53 65 71   Opcode: CollSeq
a430: 20 2a 20 2a 20 50 34 0a 2a 2a 0a 2a 2a 20 50 34   * * P4.**.** P4
a440: 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
a450: 20 61 20 43 6f 6c 6c 53 65 71 20 73 74 72 75 63   a CollSeq struc
a460: 74 2e 20 49 66 20 74 68 65 20 6e 65 78 74 20 63  t. If the next c
a470: 61 6c 6c 20 74 6f 20 61 20 75 73 65 72 20 66 75  all to a user fu
a480: 6e 63 74 69 6f 6e 0a 2a 2a 20 6f 72 20 61 67 67  nction.** or agg
a490: 72 65 67 61 74 65 20 63 61 6c 6c 73 20 73 71 6c  regate calls sql
a4a0: 69 74 65 33 47 65 74 46 75 6e 63 43 6f 6c 6c 53  ite3GetFuncCollS
a4b0: 65 71 28 29 2c 20 74 68 69 73 20 63 6f 6c 6c 61  eq(), this colla
a4c0: 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 77 69  tion sequence wi
a4d0: 6c 6c 0a 2a 2a 20 62 65 20 72 65 74 75 72 6e 65  ll.** be returne
a4e0: 64 2e 20 54 68 69 73 20 69 73 20 75 73 65 64 20  d. This is used 
a4f0: 62 79 20 74 68 65 20 62 75 69 6c 74 2d 69 6e 20  by the built-in 
a500: 6d 69 6e 28 29 2c 20 6d 61 78 28 29 20 61 6e 64  min(), max() and
a510: 20 6e 75 6c 6c 69 66 28 29 0a 2a 2a 20 66 75 6e   nullif().** fun
a520: 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 54 68  ctions..**.** Th
a530: 65 20 69 6e 74 65 72 66 61 63 65 20 75 73 65 64  e interface used
a540: 20 62 79 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e   by the implemen
a550: 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 61 66  tation of the af
a560: 6f 72 65 6d 65 6e 74 69 6f 6e 65 64 20 66 75 6e  orementioned fun
a570: 63 74 69 6f 6e 73 0a 2a 2a 20 74 6f 20 72 65 74  ctions.** to ret
a580: 72 69 65 76 65 20 74 68 65 20 63 6f 6c 6c 61 74  rieve the collat
a590: 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 73 65 74  ion sequence set
a5a0: 20 62 79 20 74 68 69 73 20 6f 70 63 6f 64 65 20   by this opcode 
a5b0: 69 73 20 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65  is not available
a5c0: 0a 2a 2a 20 70 75 62 6c 69 63 6c 79 2c 20 6f 6e  .** publicly, on
a5d0: 6c 79 20 74 6f 20 75 73 65 72 20 66 75 6e 63 74  ly to user funct
a5e0: 69 6f 6e 73 20 64 65 66 69 6e 65 64 20 69 6e 20  ions defined in 
a5f0: 66 75 6e 63 2e 63 2e 0a 2a 2f 0a 63 61 73 65 20  func.c..*/.case 
a600: 4f 50 5f 43 6f 6c 6c 53 65 71 3a 20 7b 0a 20 20  OP_CollSeq: {.  
a610: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
a620: 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51 20  ype==P4_COLLSEQ 
a630: 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
a640: 2a 20 4f 70 63 6f 64 65 3a 20 46 75 6e 63 74 69  * Opcode: Functi
a650: 6f 6e 20 50 31 20 50 32 20 50 33 20 50 34 20 50  on P1 P2 P3 P4 P
a660: 35 0a 2a 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 61  5.**.** Invoke a
a670: 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 28   user function (
a680: 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20  P4 is a pointer 
a690: 74 6f 20 61 20 46 75 6e 63 74 69 6f 6e 20 73 74  to a Function st
a6a0: 72 75 63 74 75 72 65 20 74 68 61 74 0a 2a 2a 20  ructure that.** 
a6b0: 64 65 66 69 6e 65 73 20 74 68 65 20 66 75 6e 63  defines the func
a6c0: 74 69 6f 6e 29 20 77 69 74 68 20 50 35 20 61 72  tion) with P5 ar
a6d0: 67 75 6d 65 6e 74 73 20 74 61 6b 65 6e 20 66 72  guments taken fr
a6e0: 6f 6d 20 72 65 67 69 73 74 65 72 20 50 32 20 61  om register P2 a
a6f0: 6e 64 0a 2a 2a 20 73 75 63 63 65 73 73 6f 72 73  nd.** successors
a700: 2e 20 20 54 68 65 20 72 65 73 75 6c 74 20 6f 66  .  The result of
a710: 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 69 73   the function is
a720: 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73   stored in regis
a730: 74 65 72 20 50 33 2e 0a 2a 2a 20 52 65 67 69 73  ter P3..** Regis
a740: 74 65 72 20 50 33 20 6d 75 73 74 20 6e 6f 74 20  ter P3 must not 
a750: 62 65 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 75  be one of the fu
a760: 6e 63 74 69 6f 6e 20 69 6e 70 75 74 73 2e 0a 2a  nction inputs..*
a770: 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 33 32 2d  *.** P1 is a 32-
a780: 62 69 74 20 62 69 74 6d 61 73 6b 20 69 6e 64 69  bit bitmask indi
a790: 63 61 74 69 6e 67 20 77 68 65 74 68 65 72 20 6f  cating whether o
a7a0: 72 20 6e 6f 74 20 65 61 63 68 20 61 72 67 75 6d  r not each argum
a7b0: 65 6e 74 20 74 6f 20 74 68 65 20 0a 2a 2a 20 66  ent to the .** f
a7c0: 75 6e 63 74 69 6f 6e 20 77 61 73 20 64 65 74 65  unction was dete
a7d0: 72 6d 69 6e 65 64 20 74 6f 20 62 65 20 63 6f 6e  rmined to be con
a7e0: 73 74 61 6e 74 20 61 74 20 63 6f 6d 70 69 6c 65  stant at compile
a7f0: 20 74 69 6d 65 2e 20 49 66 20 74 68 65 20 66 69   time. If the fi
a800: 72 73 74 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20  rst.** argument 
a810: 77 61 73 20 63 6f 6e 73 74 61 6e 74 20 74 68 65  was constant the
a820: 6e 20 62 69 74 20 30 20 6f 66 20 50 31 20 69 73  n bit 0 of P1 is
a830: 20 73 65 74 2e 20 54 68 69 73 20 69 73 20 75 73   set. This is us
a840: 65 64 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 0a  ed to determine.
a850: 2a 2a 20 77 68 65 74 68 65 72 20 6d 65 74 61 20  ** whether meta 
a860: 64 61 74 61 20 61 73 73 6f 63 69 61 74 65 64 20  data associated 
a870: 77 69 74 68 20 61 20 75 73 65 72 20 66 75 6e 63  with a user func
a880: 74 69 6f 6e 20 61 72 67 75 6d 65 6e 74 20 75 73  tion argument us
a890: 69 6e 67 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74  ing the.** sqlit
a8a0: 65 33 5f 73 65 74 5f 61 75 78 64 61 74 61 28 29  e3_set_auxdata()
a8b0: 20 41 50 49 20 6d 61 79 20 62 65 20 73 61 66 65   API may be safe
a8c0: 6c 79 20 72 65 74 61 69 6e 65 64 20 75 6e 74 69  ly retained unti
a8d0: 6c 20 74 68 65 20 6e 65 78 74 0a 2a 2a 20 69 6e  l the next.** in
a8e0: 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 69 73  vocation of this
a8f0: 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 53   opcode..**.** S
a900: 65 65 20 61 6c 73 6f 3a 20 41 67 67 53 74 65 70  ee also: AggStep
a910: 20 61 6e 64 20 41 67 67 46 69 6e 61 6c 0a 2a 2f   and AggFinal.*/
a920: 0a 63 61 73 65 20 4f 50 5f 46 75 6e 63 74 69 6f  .case OP_Functio
a930: 6e 3a 20 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20  n: {.  int i;.  
a940: 4d 65 6d 20 2a 70 41 72 67 3b 0a 20 20 73 71 6c  Mem *pArg;.  sql
a950: 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 63 74 78  ite3_context ctx
a960: 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  ;.  sqlite3_valu
a970: 65 20 2a 2a 61 70 56 61 6c 3b 0a 20 20 69 6e 74  e **apVal;.  int
a980: 20 6e 3b 0a 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e   n;..  n = pOp->
a990: 70 35 3b 0a 20 20 61 70 56 61 6c 20 3d 20 70 2d  p5;.  apVal = p-
a9a0: 3e 61 70 41 72 67 3b 0a 20 20 61 73 73 65 72 74  >apArg;.  assert
a9b0: 28 20 61 70 56 61 6c 20 7c 7c 20 6e 3d 3d 30 20  ( apVal || n==0 
a9c0: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
a9d0: 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p3>0 && pOp->p
a9e0: 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20  3<=p->nMem );.  
a9f0: 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
aa00: 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75  ->p3];.  memAbou
aa10: 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75  tToChange(p, pOu
aa20: 74 29 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 6e  t);..  assert( n
aa30: 3d 3d 30 20 7c 7c 20 28 70 4f 70 2d 3e 70 32 3e  ==0 || (pOp->p2>
aa40: 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 6e 3c 3d  0 && pOp->p2+n<=
aa50: 70 2d 3e 6e 4d 65 6d 2b 31 29 20 29 3b 0a 20 20  p->nMem+1) );.  
aa60: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c  assert( pOp->p3<
aa70: 70 4f 70 2d 3e 70 32 20 7c 7c 20 70 4f 70 2d 3e  pOp->p2 || pOp->
aa80: 70 33 3e 3d 70 4f 70 2d 3e 70 32 2b 6e 20 29 3b  p3>=pOp->p2+n );
aa90: 0a 20 20 70 41 72 67 20 3d 20 26 61 4d 65 6d 5b  .  pArg = &aMem[
aaa0: 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 66 6f 72 28  pOp->p2];.  for(
aab0: 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b 2b 2c 20 70  i=0; i<n; i++, p
aac0: 41 72 67 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65  Arg++){.    asse
aad0: 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70  rt( memIsValid(p
aae0: 41 72 67 29 20 29 3b 0a 20 20 20 20 61 70 56 61  Arg) );.    apVa
aaf0: 6c 5b 69 5d 20 3d 20 70 41 72 67 3b 0a 20 20 20  l[i] = pArg;.   
ab00: 20 44 65 65 70 68 65 6d 65 72 61 6c 69 7a 65 28   Deephemeralize(
ab10: 70 41 72 67 29 3b 0a 20 20 20 20 73 71 6c 69 74  pArg);.    sqlit
ab20: 65 33 56 64 62 65 4d 65 6d 53 74 6f 72 65 54 79  e3VdbeMemStoreTy
ab30: 70 65 28 70 41 72 67 29 3b 0a 20 20 20 20 52 45  pe(pArg);.    RE
ab40: 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
ab50: 2d 3e 70 32 2b 69 2c 20 70 41 72 67 29 3b 0a 20  ->p2+i, pArg);. 
ab60: 20 7d 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f   }..  assert( pO
ab70: 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 46 55  p->p4type==P4_FU
ab80: 4e 43 44 45 46 20 7c 7c 20 70 4f 70 2d 3e 70 34  NCDEF || pOp->p4
ab90: 74 79 70 65 3d 3d 50 34 5f 56 44 42 45 46 55 4e  type==P4_VDBEFUN
aba0: 43 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e  C );.  if( pOp->
abb0: 70 34 74 79 70 65 3d 3d 50 34 5f 46 55 4e 43 44  p4type==P4_FUNCD
abc0: 45 46 20 29 7b 0a 20 20 20 20 63 74 78 2e 70 46  EF ){.    ctx.pF
abd0: 75 6e 63 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 46  unc = pOp->p4.pF
abe0: 75 6e 63 3b 0a 20 20 20 20 63 74 78 2e 70 56 64  unc;.    ctx.pVd
abf0: 62 65 46 75 6e 63 20 3d 20 30 3b 0a 20 20 7d 65  beFunc = 0;.  }e
ac00: 6c 73 65 7b 0a 20 20 20 20 63 74 78 2e 70 56 64  lse{.    ctx.pVd
ac10: 62 65 46 75 6e 63 20 3d 20 28 56 64 62 65 46 75  beFunc = (VdbeFu
ac20: 6e 63 2a 29 70 4f 70 2d 3e 70 34 2e 70 56 64 62  nc*)pOp->p4.pVdb
ac30: 65 46 75 6e 63 3b 0a 20 20 20 20 63 74 78 2e 70  eFunc;.    ctx.p
ac40: 46 75 6e 63 20 3d 20 63 74 78 2e 70 56 64 62 65  Func = ctx.pVdbe
ac50: 46 75 6e 63 2d 3e 70 46 75 6e 63 3b 0a 20 20 7d  Func->pFunc;.  }
ac60: 0a 0a 20 20 63 74 78 2e 73 2e 66 6c 61 67 73 20  ..  ctx.s.flags 
ac70: 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 63 74  = MEM_Null;.  ct
ac80: 78 2e 73 2e 64 62 20 3d 20 64 62 3b 0a 20 20 63  x.s.db = db;.  c
ac90: 74 78 2e 73 2e 78 44 65 6c 20 3d 20 30 3b 0a 20  tx.s.xDel = 0;. 
aca0: 20 63 74 78 2e 73 2e 7a 4d 61 6c 6c 6f 63 20 3d   ctx.s.zMalloc =
acb0: 20 30 3b 0a 0a 20 20 2f 2a 20 54 68 65 20 6f 75   0;..  /* The ou
acc0: 74 70 75 74 20 63 65 6c 6c 20 6d 61 79 20 61 6c  tput cell may al
acd0: 72 65 61 64 79 20 68 61 76 65 20 61 20 62 75 66  ready have a buf
ace0: 66 65 72 20 61 6c 6c 6f 63 61 74 65 64 2e 20 4d  fer allocated. M
acf0: 6f 76 65 0a 20 20 2a 2a 20 74 68 65 20 70 6f 69  ove.  ** the poi
ad00: 6e 74 65 72 20 74 6f 20 63 74 78 2e 73 20 73 6f  nter to ctx.s so
ad10: 20 69 6e 20 63 61 73 65 20 74 68 65 20 75 73 65   in case the use
ad20: 72 2d 66 75 6e 63 74 69 6f 6e 20 63 61 6e 20 75  r-function can u
ad30: 73 65 0a 20 20 2a 2a 20 74 68 65 20 61 6c 72 65  se.  ** the alre
ad40: 61 64 79 20 61 6c 6c 6f 63 61 74 65 64 20 62 75  ady allocated bu
ad50: 66 66 65 72 20 69 6e 73 74 65 61 64 20 6f 66 20  ffer instead of 
ad60: 61 6c 6c 6f 63 61 74 69 6e 67 20 61 20 6e 65 77  allocating a new
ad70: 20 6f 6e 65 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c   one..  */.  sql
ad80: 69 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28  ite3VdbeMemMove(
ad90: 26 63 74 78 2e 73 2c 20 70 4f 75 74 29 3b 0a 20  &ctx.s, pOut);. 
ada0: 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
adb0: 26 63 74 78 2e 73 2c 20 4d 45 4d 5f 4e 75 6c 6c  &ctx.s, MEM_Null
adc0: 29 3b 0a 0a 20 20 63 74 78 2e 69 73 45 72 72 6f  );..  ctx.isErro
add0: 72 20 3d 20 30 3b 0a 20 20 69 66 28 20 63 74 78  r = 0;.  if( ctx
ade0: 2e 70 46 75 6e 63 2d 3e 66 6c 61 67 73 20 26 20  .pFunc->flags & 
adf0: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44  SQLITE_FUNC_NEED
ae00: 43 4f 4c 4c 20 29 7b 0a 20 20 20 20 61 73 73 65  COLL ){.    asse
ae10: 72 74 28 20 70 4f 70 3e 61 4f 70 20 29 3b 0a 20  rt( pOp>aOp );. 
ae20: 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 2d     assert( pOp[-
ae30: 31 5d 2e 70 34 74 79 70 65 3d 3d 50 34 5f 43 4f  1].p4type==P4_CO
ae40: 4c 4c 53 45 51 20 29 3b 0a 20 20 20 20 61 73 73  LLSEQ );.    ass
ae50: 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 6f 70 63  ert( pOp[-1].opc
ae60: 6f 64 65 3d 3d 4f 50 5f 43 6f 6c 6c 53 65 71 20  ode==OP_CollSeq 
ae70: 29 3b 0a 20 20 20 20 63 74 78 2e 70 43 6f 6c 6c  );.    ctx.pColl
ae80: 20 3d 20 70 4f 70 5b 2d 31 5d 2e 70 34 2e 70 43   = pOp[-1].p4.pC
ae90: 6f 6c 6c 3b 0a 20 20 7d 0a 20 20 64 62 2d 3e 6c  oll;.  }.  db->l
aea0: 61 73 74 52 6f 77 69 64 20 3d 20 6c 61 73 74 52  astRowid = lastR
aeb0: 6f 77 69 64 3b 0a 20 20 28 2a 63 74 78 2e 70 46  owid;.  (*ctx.pF
aec0: 75 6e 63 2d 3e 78 46 75 6e 63 29 28 26 63 74 78  unc->xFunc)(&ctx
aed0: 2c 20 6e 2c 20 61 70 56 61 6c 29 3b 20 2f 2a 20  , n, apVal); /* 
aee0: 49 4d 50 3a 20 52 2d 32 34 35 30 35 2d 32 33 32  IMP: R-24505-232
aef0: 33 30 20 2a 2f 0a 20 20 6c 61 73 74 52 6f 77 69  30 */.  lastRowi
af00: 64 20 3d 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69  d = db->lastRowi
af10: 64 3b 0a 0a 20 20 2f 2a 20 49 66 20 61 6e 79 20  d;..  /* If any 
af20: 61 75 78 69 6c 69 61 72 79 20 64 61 74 61 20 66  auxiliary data f
af30: 75 6e 63 74 69 6f 6e 73 20 68 61 76 65 20 62 65  unctions have be
af40: 65 6e 20 63 61 6c 6c 65 64 20 62 79 20 74 68 69  en called by thi
af50: 73 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 2c  s user function,
af60: 0a 20 20 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c  .  ** immediatel
af70: 79 20 63 61 6c 6c 20 74 68 65 20 64 65 73 74 72  y call the destr
af80: 75 63 74 6f 72 20 66 6f 72 20 61 6e 79 20 6e 6f  uctor for any no
af90: 6e 2d 73 74 61 74 69 63 20 76 61 6c 75 65 73 2e  n-static values.
afa0: 0a 20 20 2a 2f 0a 20 20 69 66 28 20 63 74 78 2e  .  */.  if( ctx.
afb0: 70 56 64 62 65 46 75 6e 63 20 29 7b 0a 20 20 20  pVdbeFunc ){.   
afc0: 20 73 71 6c 69 74 65 33 56 64 62 65 44 65 6c 65   sqlite3VdbeDele
afd0: 74 65 41 75 78 44 61 74 61 28 63 74 78 2e 70 56  teAuxData(ctx.pV
afe0: 64 62 65 46 75 6e 63 2c 20 70 4f 70 2d 3e 70 31  dbeFunc, pOp->p1
aff0: 29 3b 0a 20 20 20 20 70 4f 70 2d 3e 70 34 2e 70  );.    pOp->p4.p
b000: 56 64 62 65 46 75 6e 63 20 3d 20 63 74 78 2e 70  VdbeFunc = ctx.p
b010: 56 64 62 65 46 75 6e 63 3b 0a 20 20 20 20 70 4f  VdbeFunc;.    pO
b020: 70 2d 3e 70 34 74 79 70 65 20 3d 20 50 34 5f 56  p->p4type = P4_V
b030: 44 42 45 46 55 4e 43 3b 0a 20 20 7d 0a 0a 20 20  DBEFUNC;.  }..  
b040: 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61  if( db->mallocFa
b050: 69 6c 65 64 20 29 7b 0a 20 20 20 20 2f 2a 20 45  iled ){.    /* E
b060: 76 65 6e 20 74 68 6f 75 67 68 20 61 20 6d 61 6c  ven though a mal
b070: 6c 6f 63 28 29 20 68 61 73 20 66 61 69 6c 65 64  loc() has failed
b080: 2c 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61  , the implementa
b090: 74 69 6f 6e 20 6f 66 20 74 68 65 0a 20 20 20 20  tion of the.    
b0a0: 2a 2a 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e  ** user function
b0b0: 20 6d 61 79 20 68 61 76 65 20 63 61 6c 6c 65 64   may have called
b0c0: 20 61 6e 20 73 71 6c 69 74 65 33 5f 72 65 73 75   an sqlite3_resu
b0d0: 6c 74 5f 58 58 58 28 29 20 66 75 6e 63 74 69 6f  lt_XXX() functio
b0e0: 6e 0a 20 20 20 20 2a 2a 20 74 6f 20 72 65 74 75  n.    ** to retu
b0f0: 72 6e 20 61 20 76 61 6c 75 65 2e 20 54 68 65 20  rn a value. The 
b100: 66 6f 6c 6c 6f 77 69 6e 67 20 63 61 6c 6c 20 72  following call r
b110: 65 6c 65 61 73 65 73 20 61 6e 79 20 72 65 73 6f  eleases any reso
b120: 75 72 63 65 73 0a 20 20 20 20 2a 2a 20 61 73 73  urces.    ** ass
b130: 6f 63 69 61 74 65 64 20 77 69 74 68 20 73 75 63  ociated with suc
b140: 68 20 61 20 76 61 6c 75 65 2e 0a 20 20 20 20 2a  h a value..    *
b150: 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  /.    sqlite3Vdb
b160: 65 4d 65 6d 52 65 6c 65 61 73 65 28 26 63 74 78  eMemRelease(&ctx
b170: 2e 73 29 3b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f  .s);.    goto no
b180: 5f 6d 65 6d 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20  _mem;.  }..  /* 
b190: 49 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20  If the function 
b1a0: 72 65 74 75 72 6e 65 64 20 61 6e 20 65 72 72 6f  returned an erro
b1b0: 72 2c 20 74 68 72 6f 77 20 61 6e 20 65 78 63 65  r, throw an exce
b1c0: 70 74 69 6f 6e 20 2a 2f 0a 20 20 69 66 28 20 63  ption */.  if( c
b1d0: 74 78 2e 69 73 45 72 72 6f 72 20 29 7b 0a 20 20  tx.isError ){.  
b1e0: 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69    sqlite3SetStri
b1f0: 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20  ng(&p->zErrMsg, 
b200: 64 62 2c 20 22 25 73 22 2c 20 73 71 6c 69 74 65  db, "%s", sqlite
b210: 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 26 63 74  3_value_text(&ct
b220: 78 2e 73 29 29 3b 0a 20 20 20 20 72 63 20 3d 20  x.s));.    rc = 
b230: 63 74 78 2e 69 73 45 72 72 6f 72 3b 0a 20 20 7d  ctx.isError;.  }
b240: 0a 0a 20 20 2f 2a 20 43 6f 70 79 20 74 68 65 20  ..  /* Copy the 
b250: 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 66 75  result of the fu
b260: 6e 63 74 69 6f 6e 20 69 6e 74 6f 20 72 65 67 69  nction into regi
b270: 73 74 65 72 20 50 33 20 2a 2f 0a 20 20 73 71 6c  ster P3 */.  sql
b280: 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e  ite3VdbeChangeEn
b290: 63 6f 64 69 6e 67 28 26 63 74 78 2e 73 2c 20 65  coding(&ctx.s, e
b2a0: 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 73 71 6c 69  ncoding);.  sqli
b2b0: 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28 70  te3VdbeMemMove(p
b2c0: 4f 75 74 2c 20 26 63 74 78 2e 73 29 3b 0a 20 20  Out, &ctx.s);.  
b2d0: 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d  if( sqlite3VdbeM
b2e0: 65 6d 54 6f 6f 42 69 67 28 70 4f 75 74 29 20 29  emTooBig(pOut) )
b2f0: 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62  {.    goto too_b
b300: 69 67 3b 0a 20 20 7d 0a 0a 23 69 66 20 30 0a 20  ig;.  }..#if 0. 
b310: 20 2f 2a 20 54 68 65 20 61 70 70 2d 64 65 66 69   /* The app-defi
b320: 6e 65 64 20 66 75 6e 63 74 69 6f 6e 20 68 61 73  ned function has
b330: 20 64 6f 6e 65 20 73 6f 6d 65 74 68 69 6e 67 20   done something 
b340: 74 68 61 74 20 61 73 20 63 61 75 73 65 64 20 74  that as caused t
b350: 68 69 73 0a 20 20 2a 2a 20 73 74 61 74 65 6d 65  his.  ** stateme
b360: 6e 74 20 74 6f 20 65 78 70 69 72 65 2e 20 20 28  nt to expire.  (
b370: 50 65 72 68 61 70 73 20 74 68 65 20 66 75 6e 63  Perhaps the func
b380: 74 69 6f 6e 20 63 61 6c 6c 65 64 20 73 71 6c 69  tion called sqli
b390: 74 65 33 5f 65 78 65 63 28 29 0a 20 20 2a 2a 20  te3_exec().  ** 
b3a0: 77 69 74 68 20 61 20 43 52 45 41 54 45 20 54 41  with a CREATE TA
b3b0: 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 2e 29 0a  BLE statement.).
b3c0: 20 20 2a 2f 0a 20 20 69 66 28 20 70 2d 3e 65 78    */.  if( p->ex
b3d0: 70 69 72 65 64 20 29 20 72 63 20 3d 20 53 51 4c  pired ) rc = SQL
b3e0: 49 54 45 5f 41 42 4f 52 54 3b 0a 23 65 6e 64 69  ITE_ABORT;.#endi
b3f0: 66 0a 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52  f..  REGISTER_TR
b400: 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4f 75  ACE(pOp->p3, pOu
b410: 74 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58  t);.  UPDATE_MAX
b420: 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b  _BLOBSIZE(pOut);
b430: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
b440: 4f 70 63 6f 64 65 3a 20 42 69 74 41 6e 64 20 50  Opcode: BitAnd P
b450: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
b460: 2a 20 54 61 6b 65 20 74 68 65 20 62 69 74 2d 77  * Take the bit-w
b470: 69 73 65 20 41 4e 44 20 6f 66 20 74 68 65 20 76  ise AND of the v
b480: 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74 65  alues in registe
b490: 72 20 50 31 20 61 6e 64 20 50 32 20 61 6e 64 0a  r P1 and P2 and.
b4a0: 2a 2a 20 73 74 6f 72 65 20 74 68 65 20 72 65 73  ** store the res
b4b0: 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ult in register 
b4c0: 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  P3..** If either
b4d0: 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20   input is NULL, 
b4e0: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
b4f0: 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  LL..*/./* Opcode
b500: 3a 20 42 69 74 4f 72 20 50 31 20 50 32 20 50 33  : BitOr P1 P2 P3
b510: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20   * *.**.** Take 
b520: 74 68 65 20 62 69 74 2d 77 69 73 65 20 4f 52 20  the bit-wise OR 
b530: 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e  of the values in
b540: 20 72 65 67 69 73 74 65 72 20 50 31 20 61 6e 64   register P1 and
b550: 20 50 32 20 61 6e 64 0a 2a 2a 20 73 74 6f 72 65   P2 and.** store
b560: 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72   the result in r
b570: 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49  egister P3..** I
b580: 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69  f either input i
b590: 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75  s NULL, the resu
b5a0: 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f  lt is NULL..*/./
b5b0: 2a 20 4f 70 63 6f 64 65 3a 20 53 68 69 66 74 4c  * Opcode: ShiftL
b5c0: 65 66 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a  eft P1 P2 P3 * *
b5d0: 0a 2a 2a 0a 2a 2a 20 53 68 69 66 74 20 74 68 65  .**.** Shift the
b5e0: 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69   integer value i
b5f0: 6e 20 72 65 67 69 73 74 65 72 20 50 32 20 74 6f  n register P2 to
b600: 20 74 68 65 20 6c 65 66 74 20 62 79 20 74 68 65   the left by the
b610: 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 62 69  .** number of bi
b620: 74 73 20 73 70 65 63 69 66 69 65 64 20 62 79 20  ts specified by 
b630: 74 68 65 20 69 6e 74 65 67 65 72 20 69 6e 20 72  the integer in r
b640: 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 20 53  egister P1..** S
b650: 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20  tore the result 
b660: 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  in register P3..
b670: 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70  ** If either inp
b680: 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20  ut is NULL, the 
b690: 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a  result is NULL..
b6a0: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 68  */./* Opcode: Sh
b6b0: 69 66 74 52 69 67 68 74 20 50 31 20 50 32 20 50  iftRight P1 P2 P
b6c0: 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 68 69 66  3 * *.**.** Shif
b6d0: 74 20 74 68 65 20 69 6e 74 65 67 65 72 20 76 61  t the integer va
b6e0: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
b6f0: 50 32 20 74 6f 20 74 68 65 20 72 69 67 68 74 20  P2 to the right 
b700: 62 79 20 74 68 65 0a 2a 2a 20 6e 75 6d 62 65 72  by the.** number
b710: 20 6f 66 20 62 69 74 73 20 73 70 65 63 69 66 69   of bits specifi
b720: 65 64 20 62 79 20 74 68 65 20 69 6e 74 65 67 65  ed by the intege
b730: 72 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  r in register P1
b740: 2e 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 72  ..** Store the r
b750: 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65  esult in registe
b760: 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68  r P3..** If eith
b770: 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c  er input is NULL
b780: 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  , the result is 
b790: 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  NULL..*/.case OP
b7a0: 5f 42 69 74 41 6e 64 3a 20 20 20 20 20 20 20 20  _BitAnd:        
b7b0: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
b7c0: 20 61 73 20 54 4b 5f 42 49 54 41 4e 44 2c 20 69   as TK_BITAND, i
b7d0: 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f  n1, in2, out3 */
b7e0: 0a 63 61 73 65 20 4f 50 5f 42 69 74 4f 72 3a 20  .case OP_BitOr: 
b7f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b800: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 42   /* same as TK_B
b810: 49 54 4f 52 2c 20 69 6e 31 2c 20 69 6e 32 2c 20  ITOR, in1, in2, 
b820: 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  out3 */.case OP_
b830: 53 68 69 66 74 4c 65 66 74 3a 20 20 20 20 20 20  ShiftLeft:      
b840: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
b850: 61 73 20 54 4b 5f 4c 53 48 49 46 54 2c 20 69 6e  as TK_LSHIFT, in
b860: 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
b870: 63 61 73 65 20 4f 50 5f 53 68 69 66 74 52 69 67  case OP_ShiftRig
b880: 68 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ht: {           
b890: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 52 53  /* same as TK_RS
b8a0: 48 49 46 54 2c 20 69 6e 31 2c 20 69 6e 32 2c 20  HIFT, in1, in2, 
b8b0: 6f 75 74 33 20 2a 2f 0a 20 20 69 36 34 20 69 41  out3 */.  i64 iA
b8c0: 3b 0a 20 20 75 36 34 20 75 41 3b 0a 20 20 69 36  ;.  u64 uA;.  i6
b8d0: 34 20 69 42 3b 0a 20 20 75 38 20 6f 70 3b 0a 0a  4 iB;.  u8 op;..
b8e0: 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
b8f0: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 32 20  Op->p1];.  pIn2 
b900: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
b910: 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d  ;.  pOut = &aMem
b920: 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28  [pOp->p3];.  if(
b930: 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20   (pIn1->flags | 
b940: 70 49 6e 32 2d 3e 66 6c 61 67 73 29 20 26 20 4d  pIn2->flags) & M
b950: 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 73  EM_Null ){.    s
b960: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
b970: 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 20 20  Null(pOut);.    
b980: 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 69 41 20  break;.  }.  iA 
b990: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74  = sqlite3VdbeInt
b9a0: 56 61 6c 75 65 28 70 49 6e 32 29 3b 0a 20 20 69  Value(pIn2);.  i
b9b0: 42 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49  B = sqlite3VdbeI
b9c0: 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 3b 0a 20  ntValue(pIn1);. 
b9d0: 20 6f 70 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64   op = pOp->opcod
b9e0: 65 3b 0a 20 20 69 66 28 20 6f 70 3d 3d 4f 50 5f  e;.  if( op==OP_
b9f0: 42 69 74 41 6e 64 20 29 7b 0a 20 20 20 20 69 41  BitAnd ){.    iA
ba00: 20 26 3d 20 69 42 3b 0a 20 20 7d 65 6c 73 65 20   &= iB;.  }else 
ba10: 69 66 28 20 6f 70 3d 3d 4f 50 5f 42 69 74 4f 72  if( op==OP_BitOr
ba20: 20 29 7b 0a 20 20 20 20 69 41 20 7c 3d 20 69 42   ){.    iA |= iB
ba30: 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 69 42  ;.  }else if( iB
ba40: 21 3d 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72  !=0 ){.    asser
ba50: 74 28 20 6f 70 3d 3d 4f 50 5f 53 68 69 66 74 52  t( op==OP_ShiftR
ba60: 69 67 68 74 20 7c 7c 20 6f 70 3d 3d 4f 50 5f 53  ight || op==OP_S
ba70: 68 69 66 74 4c 65 66 74 20 29 3b 0a 0a 20 20 20  hiftLeft );..   
ba80: 20 2f 2a 20 49 66 20 73 68 69 66 74 69 6e 67 20   /* If shifting 
ba90: 62 79 20 61 20 6e 65 67 61 74 69 76 65 20 61 6d  by a negative am
baa0: 6f 75 6e 74 2c 20 73 68 69 66 74 20 69 6e 20 74  ount, shift in t
bab0: 68 65 20 6f 74 68 65 72 20 64 69 72 65 63 74 69  he other directi
bac0: 6f 6e 20 2a 2f 0a 20 20 20 20 69 66 28 20 69 42  on */.    if( iB
bad0: 3c 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65  <0 ){.      asse
bae0: 72 74 28 20 4f 50 5f 53 68 69 66 74 52 69 67 68  rt( OP_ShiftRigh
baf0: 74 3d 3d 4f 50 5f 53 68 69 66 74 4c 65 66 74 2b  t==OP_ShiftLeft+
bb00: 31 20 29 3b 0a 20 20 20 20 20 20 6f 70 20 3d 20  1 );.      op = 
bb10: 32 2a 4f 50 5f 53 68 69 66 74 4c 65 66 74 20 2b  2*OP_ShiftLeft +
bb20: 20 31 20 2d 20 6f 70 3b 0a 20 20 20 20 20 20 69   1 - op;.      i
bb30: 42 20 3d 20 69 42 3e 28 2d 36 34 29 20 3f 20 2d  B = iB>(-64) ? -
bb40: 69 42 20 3a 20 36 34 3b 0a 20 20 20 20 7d 0a 0a  iB : 64;.    }..
bb50: 20 20 20 20 69 66 28 20 69 42 3e 3d 36 34 20 29      if( iB>=64 )
bb60: 7b 0a 20 20 20 20 20 20 69 41 20 3d 20 28 69 41  {.      iA = (iA
bb70: 3e 3d 30 20 7c 7c 20 6f 70 3d 3d 4f 50 5f 53 68  >=0 || op==OP_Sh
bb80: 69 66 74 4c 65 66 74 29 20 3f 20 30 20 3a 20 2d  iftLeft) ? 0 : -
bb90: 31 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  1;.    }else{.  
bba0: 20 20 20 20 6d 65 6d 63 70 79 28 26 75 41 2c 20      memcpy(&uA, 
bbb0: 26 69 41 2c 20 73 69 7a 65 6f 66 28 75 41 29 29  &iA, sizeof(uA))
bbc0: 3b 0a 20 20 20 20 20 20 69 66 28 20 6f 70 3d 3d  ;.      if( op==
bbd0: 4f 50 5f 53 68 69 66 74 4c 65 66 74 20 29 7b 0a  OP_ShiftLeft ){.
bbe0: 20 20 20 20 20 20 20 20 75 41 20 3c 3c 3d 20 69          uA <<= i
bbf0: 42 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  B;.      }else{.
bc00: 20 20 20 20 20 20 20 20 75 41 20 3e 3e 3d 20 69          uA >>= i
bc10: 42 3b 0a 20 20 20 20 20 20 20 20 2f 2a 20 53 69  B;.        /* Si
bc20: 67 6e 2d 65 78 74 65 6e 64 20 6f 6e 20 61 20 72  gn-extend on a r
bc30: 69 67 68 74 20 73 68 69 66 74 20 6f 66 20 61 20  ight shift of a 
bc40: 6e 65 67 61 74 69 76 65 20 6e 75 6d 62 65 72 20  negative number 
bc50: 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20 69  */.        if( i
bc60: 41 3c 30 20 29 20 75 41 20 7c 3d 20 28 28 28 28  A<0 ) uA |= ((((
bc70: 75 36 34 29 30 78 66 66 66 66 66 66 66 66 29 3c  u64)0xffffffff)<
bc80: 3c 33 32 29 7c 30 78 66 66 66 66 66 66 66 66 29  <32)|0xffffffff)
bc90: 20 3c 3c 20 28 36 34 2d 69 42 29 3b 0a 20 20 20   << (64-iB);.   
bca0: 20 20 20 7d 0a 20 20 20 20 20 20 6d 65 6d 63 70     }.      memcp
bcb0: 79 28 26 69 41 2c 20 26 75 41 2c 20 73 69 7a 65  y(&iA, &uA, size
bcc0: 6f 66 28 69 41 29 29 3b 0a 20 20 20 20 7d 0a 20  of(iA));.    }. 
bcd0: 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d   }.  pOut->u.i =
bce0: 20 69 41 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70   iA;.  MemSetTyp
bcf0: 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f  eFlag(pOut, MEM_
bd00: 49 6e 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Int);.  break;.}
bd10: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 64 64  ../* Opcode: Add
bd20: 49 6d 6d 20 20 50 31 20 50 32 20 2a 20 2a 20 2a  Imm  P1 P2 * * *
bd30: 0a 2a 2a 20 0a 2a 2a 20 41 64 64 20 74 68 65 20  .** .** Add the 
bd40: 63 6f 6e 73 74 61 6e 74 20 50 32 20 74 6f 20 74  constant P2 to t
bd50: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
bd60: 73 74 65 72 20 50 31 2e 0a 2a 2a 20 54 68 65 20  ster P1..** The 
bd70: 72 65 73 75 6c 74 20 69 73 20 61 6c 77 61 79 73  result is always
bd80: 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2a 0a   an integer..**.
bd90: 2a 2a 20 54 6f 20 66 6f 72 63 65 20 61 6e 79 20  ** To force any 
bda0: 72 65 67 69 73 74 65 72 20 74 6f 20 62 65 20 61  register to be a
bdb0: 6e 20 69 6e 74 65 67 65 72 2c 20 6a 75 73 74 20  n integer, just 
bdc0: 61 64 64 20 30 2e 0a 2a 2f 0a 63 61 73 65 20 4f  add 0..*/.case O
bdd0: 50 5f 41 64 64 49 6d 6d 3a 20 7b 20 20 20 20 20  P_AddImm: {     
bde0: 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f         /* in1 */
bdf0: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
be00: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 6d 65 6d 41  pOp->p1];.  memA
be10: 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
be20: 70 49 6e 31 29 3b 0a 20 20 73 71 6c 69 74 65 33  pIn1);.  sqlite3
be30: 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66  VdbeMemIntegerif
be40: 79 28 70 49 6e 31 29 3b 0a 20 20 70 49 6e 31 2d  y(pIn1);.  pIn1-
be50: 3e 75 2e 69 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b  >u.i += pOp->p2;
be60: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
be70: 4f 70 63 6f 64 65 3a 20 4d 75 73 74 42 65 49 6e  Opcode: MustBeIn
be80: 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  t P1 P2 * * *.**
be90: 20 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65 20 76   .** Force the v
bea0: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
beb0: 20 50 31 20 74 6f 20 62 65 20 61 6e 20 69 6e 74   P1 to be an int
bec0: 65 67 65 72 2e 20 20 49 66 20 74 68 65 20 76 61  eger.  If the va
bed0: 6c 75 65 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20  lue.** in P1 is 
bee0: 6e 6f 74 20 61 6e 20 69 6e 74 65 67 65 72 20 61  not an integer a
bef0: 6e 64 20 63 61 6e 6e 6f 74 20 62 65 20 63 6f 6e  nd cannot be con
bf00: 76 65 72 74 65 64 20 69 6e 74 6f 20 61 6e 20 69  verted into an i
bf10: 6e 74 65 67 65 72 0a 2a 2a 20 77 69 74 68 6f 75  nteger.** withou
bf20: 74 20 64 61 74 61 20 6c 6f 73 73 2c 20 74 68 65  t data loss, the
bf30: 6e 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65  n jump immediate
bf40: 6c 79 20 74 6f 20 50 32 2c 20 6f 72 20 69 66 20  ly to P2, or if 
bf50: 50 32 3d 3d 30 0a 2a 2a 20 72 61 69 73 65 20 61  P2==0.** raise a
bf60: 6e 20 53 51 4c 49 54 45 5f 4d 49 53 4d 41 54 43  n SQLITE_MISMATC
bf70: 48 20 65 78 63 65 70 74 69 6f 6e 2e 0a 2a 2f 0a  H exception..*/.
bf80: 63 61 73 65 20 4f 50 5f 4d 75 73 74 42 65 49 6e  case OP_MustBeIn
bf90: 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  t: {            
bfa0: 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a  /* jump, in1 */.
bfb0: 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
bfc0: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 70 70 6c 79  Op->p1];.  apply
bfd0: 41 66 66 69 6e 69 74 79 28 70 49 6e 31 2c 20 53  Affinity(pIn1, S
bfe0: 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49  QLITE_AFF_NUMERI
bff0: 43 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20  C, encoding);.  
c000: 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
c010: 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20 29   & MEM_Int)==0 )
c020: 7b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70  {.    if( pOp->p
c030: 32 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 72 63  2==0 ){.      rc
c040: 20 3d 20 53 51 4c 49 54 45 5f 4d 49 53 4d 41 54   = SQLITE_MISMAT
c050: 43 48 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61  CH;.      goto a
c060: 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
c070: 72 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  r;.    }else{.  
c080: 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
c090: 20 2d 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 65   - 1;.    }.  }e
c0a0: 6c 73 65 7b 0a 20 20 20 20 4d 65 6d 53 65 74 54  lse{.    MemSetT
c0b0: 79 70 65 46 6c 61 67 28 70 49 6e 31 2c 20 4d 45  ypeFlag(pIn1, ME
c0c0: 4d 5f 49 6e 74 29 3b 0a 20 20 7d 0a 20 20 62 72  M_Int);.  }.  br
c0d0: 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20  eak;.}..#ifndef 
c0e0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41  SQLITE_OMIT_FLOA
c0f0: 54 49 4e 47 5f 50 4f 49 4e 54 0a 2f 2a 20 4f 70  TING_POINT./* Op
c100: 63 6f 64 65 3a 20 52 65 61 6c 41 66 66 69 6e 69  code: RealAffini
c110: 74 79 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a  ty P1 * * * *.**
c120: 0a 2a 2a 20 49 66 20 72 65 67 69 73 74 65 72 20  .** If register 
c130: 50 31 20 68 6f 6c 64 73 20 61 6e 20 69 6e 74 65  P1 holds an inte
c140: 67 65 72 20 63 6f 6e 76 65 72 74 20 69 74 20 74  ger convert it t
c150: 6f 20 61 20 72 65 61 6c 20 76 61 6c 75 65 2e 0a  o a real value..
c160: 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
c170: 65 20 69 73 20 75 73 65 64 20 77 68 65 6e 20 65  e is used when e
c180: 78 74 72 61 63 74 69 6e 67 20 69 6e 66 6f 72 6d  xtracting inform
c190: 61 74 69 6f 6e 20 66 72 6f 6d 20 61 20 63 6f 6c  ation from a col
c1a0: 75 6d 6e 20 74 68 61 74 0a 2a 2a 20 68 61 73 20  umn that.** has 
c1b0: 52 45 41 4c 20 61 66 66 69 6e 69 74 79 2e 20 20  REAL affinity.  
c1c0: 53 75 63 68 20 63 6f 6c 75 6d 6e 20 76 61 6c 75  Such column valu
c1d0: 65 73 20 6d 61 79 20 73 74 69 6c 6c 20 62 65 20  es may still be 
c1e0: 73 74 6f 72 65 64 20 61 73 0a 2a 2a 20 69 6e 74  stored as.** int
c1f0: 65 67 65 72 73 2c 20 66 6f 72 20 73 70 61 63 65  egers, for space
c200: 20 65 66 66 69 63 69 65 6e 63 79 2c 20 62 75 74   efficiency, but
c210: 20 61 66 74 65 72 20 65 78 74 72 61 63 74 69 6f   after extractio
c220: 6e 20 77 65 20 77 61 6e 74 20 74 68 65 6d 0a 2a  n we want them.*
c230: 2a 20 74 6f 20 68 61 76 65 20 6f 6e 6c 79 20 61  * to have only a
c240: 20 72 65 61 6c 20 76 61 6c 75 65 2e 0a 2a 2f 0a   real value..*/.
c250: 63 61 73 65 20 4f 50 5f 52 65 61 6c 41 66 66 69  case OP_RealAffi
c260: 6e 69 74 79 3a 20 7b 20 20 20 20 20 20 20 20 20  nity: {         
c270: 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20           /* in1 
c280: 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
c290: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66  m[pOp->p1];.  if
c2a0: 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20  ( pIn1->flags & 
c2b0: 4d 45 4d 5f 49 6e 74 20 29 7b 0a 20 20 20 20 73  MEM_Int ){.    s
c2c0: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 61  qlite3VdbeMemRea
c2d0: 6c 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 7d 0a  lify(pIn1);.  }.
c2e0: 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
c2f0: 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  f..#ifndef SQLIT
c300: 45 5f 4f 4d 49 54 5f 43 41 53 54 0a 2f 2a 20 4f  E_OMIT_CAST./* O
c310: 70 63 6f 64 65 3a 20 54 6f 54 65 78 74 20 50 31  pcode: ToText P1
c320: 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46   * * * *.**.** F
c330: 6f 72 63 65 20 74 68 65 20 76 61 6c 75 65 20 69  orce the value i
c340: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 74 6f  n register P1 to
c350: 20 62 65 20 74 65 78 74 2e 0a 2a 2a 20 49 66 20   be text..** If 
c360: 74 68 65 20 76 61 6c 75 65 20 69 73 20 6e 75 6d  the value is num
c370: 65 72 69 63 2c 20 63 6f 6e 76 65 72 74 20 69 74  eric, convert it
c380: 20 74 6f 20 61 20 73 74 72 69 6e 67 20 75 73 69   to a string usi
c390: 6e 67 20 74 68 65 0a 2a 2a 20 65 71 75 69 76 61  ng the.** equiva
c3a0: 6c 65 6e 74 20 6f 66 20 70 72 69 6e 74 66 28 29  lent of printf()
c3b0: 2e 20 20 42 6c 6f 62 20 76 61 6c 75 65 73 20 61  .  Blob values a
c3c0: 72 65 20 75 6e 63 68 61 6e 67 65 64 20 61 6e 64  re unchanged and
c3d0: 0a 2a 2a 20 61 72 65 20 61 66 74 65 72 77 61 72  .** are afterwar
c3e0: 64 73 20 73 69 6d 70 6c 79 20 69 6e 74 65 72 70  ds simply interp
c3f0: 72 65 74 65 64 20 61 73 20 74 65 78 74 2e 0a 2a  reted as text..*
c400: 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76 61 6c 75  *.** A NULL valu
c410: 65 20 69 73 20 6e 6f 74 20 63 68 61 6e 67 65 64  e is not changed
c420: 20 62 79 20 74 68 69 73 20 72 6f 75 74 69 6e 65   by this routine
c430: 2e 20 20 49 74 20 72 65 6d 61 69 6e 73 20 4e 55  .  It remains NU
c440: 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54  LL..*/.case OP_T
c450: 6f 54 65 78 74 3a 20 7b 20 20 20 20 20 20 20 20  oText: {        
c460: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
c470: 65 20 61 73 20 54 4b 5f 54 4f 5f 54 45 58 54 2c  e as TK_TO_TEXT,
c480: 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d   in1 */.  pIn1 =
c490: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
c4a0: 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61  .  memAboutToCha
c4b0: 6e 67 65 28 70 2c 20 70 49 6e 31 29 3b 0a 20 20  nge(p, pIn1);.  
c4c0: 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20  if( pIn1->flags 
c4d0: 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 20 62 72 65  & MEM_Null ) bre
c4e0: 61 6b 3b 0a 20 20 61 73 73 65 72 74 28 20 4d 45  ak;.  assert( ME
c4f0: 4d 5f 53 74 72 3d 3d 28 4d 45 4d 5f 42 6c 6f 62  M_Str==(MEM_Blob
c500: 3e 3e 33 29 20 29 3b 0a 20 20 70 49 6e 31 2d 3e  >>3) );.  pIn1->
c510: 66 6c 61 67 73 20 7c 3d 20 28 70 49 6e 31 2d 3e  flags |= (pIn1->
c520: 66 6c 61 67 73 26 4d 45 4d 5f 42 6c 6f 62 29 3e  flags&MEM_Blob)>
c530: 3e 33 3b 0a 20 20 61 70 70 6c 79 41 66 66 69 6e  >3;.  applyAffin
c540: 69 74 79 28 70 49 6e 31 2c 20 53 51 4c 49 54 45  ity(pIn1, SQLITE
c550: 5f 41 46 46 5f 54 45 58 54 2c 20 65 6e 63 6f 64  _AFF_TEXT, encod
c560: 69 6e 67 29 3b 0a 20 20 72 63 20 3d 20 45 78 70  ing);.  rc = Exp
c570: 61 6e 64 42 6c 6f 62 28 70 49 6e 31 29 3b 0a 20  andBlob(pIn1);. 
c580: 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66   assert( pIn1->f
c590: 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74 72 20 7c  lags & MEM_Str |
c5a0: 7c 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c  | db->mallocFail
c5b0: 65 64 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c  ed );.  pIn1->fl
c5c0: 61 67 73 20 26 3d 20 7e 28 4d 45 4d 5f 49 6e 74  ags &= ~(MEM_Int
c5d0: 7c 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 42 6c  |MEM_Real|MEM_Bl
c5e0: 6f 62 7c 4d 45 4d 5f 5a 65 72 6f 29 3b 0a 20 20  ob|MEM_Zero);.  
c5f0: 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53  UPDATE_MAX_BLOBS
c600: 49 5a 45 28 70 49 6e 31 29 3b 0a 20 20 62 72 65  IZE(pIn1);.  bre
c610: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
c620: 3a 20 54 6f 42 6c 6f 62 20 50 31 20 2a 20 2a 20  : ToBlob P1 * * 
c630: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20  * *.**.** Force 
c640: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
c650: 69 73 74 65 72 20 50 31 20 74 6f 20 62 65 20 61  ister P1 to be a
c660: 20 42 4c 4f 42 2e 0a 2a 2a 20 49 66 20 74 68 65   BLOB..** If the
c670: 20 76 61 6c 75 65 20 69 73 20 6e 75 6d 65 72 69   value is numeri
c680: 63 2c 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f  c, convert it to
c690: 20 61 20 73 74 72 69 6e 67 20 66 69 72 73 74 2e   a string first.
c6a0: 0a 2a 2a 20 53 74 72 69 6e 67 73 20 61 72 65 20  .** Strings are 
c6b0: 73 69 6d 70 6c 79 20 72 65 69 6e 74 65 72 70 72  simply reinterpr
c6c0: 65 74 65 64 20 61 73 20 62 6c 6f 62 73 20 77 69  eted as blobs wi
c6d0: 74 68 20 6e 6f 20 63 68 61 6e 67 65 0a 2a 2a 20  th no change.** 
c6e0: 74 6f 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e  to the underlyin
c6f0: 67 20 64 61 74 61 2e 0a 2a 2a 0a 2a 2a 20 41 20  g data..**.** A 
c700: 4e 55 4c 4c 20 76 61 6c 75 65 20 69 73 20 6e 6f  NULL value is no
c710: 74 20 63 68 61 6e 67 65 64 20 62 79 20 74 68 69  t changed by thi
c720: 73 20 72 6f 75 74 69 6e 65 2e 20 20 49 74 20 72  s routine.  It r
c730: 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a  emains NULL..*/.
c740: 63 61 73 65 20 4f 50 5f 54 6f 42 6c 6f 62 3a 20  case OP_ToBlob: 
c750: 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
c760: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
c770: 5f 54 4f 5f 42 4c 4f 42 2c 20 69 6e 31 20 2a 2f  _TO_BLOB, in1 */
c780: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
c790: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20  pOp->p1];.  if( 
c7a0: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
c7b0: 4d 5f 4e 75 6c 6c 20 29 20 62 72 65 61 6b 3b 0a  M_Null ) break;.
c7c0: 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
c7d0: 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 29 3d 3d  gs & MEM_Blob)==
c7e0: 30 20 29 7b 0a 20 20 20 20 61 70 70 6c 79 41 66  0 ){.    applyAf
c7f0: 66 69 6e 69 74 79 28 70 49 6e 31 2c 20 53 51 4c  finity(pIn1, SQL
c800: 49 54 45 5f 41 46 46 5f 54 45 58 54 2c 20 65 6e  ITE_AFF_TEXT, en
c810: 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 61 73 73  coding);.    ass
c820: 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73  ert( pIn1->flags
c830: 20 26 20 4d 45 4d 5f 53 74 72 20 7c 7c 20 64 62   & MEM_Str || db
c840: 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29  ->mallocFailed )
c850: 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65  ;.    MemSetType
c860: 46 6c 61 67 28 70 49 6e 31 2c 20 4d 45 4d 5f 42  Flag(pIn1, MEM_B
c870: 6c 6f 62 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  lob);.  }else{. 
c880: 20 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26     pIn1->flags &
c890: 3d 20 7e 28 4d 45 4d 5f 54 79 70 65 4d 61 73 6b  = ~(MEM_TypeMask
c8a0: 26 7e 4d 45 4d 5f 42 6c 6f 62 29 3b 0a 20 20 7d  &~MEM_Blob);.  }
c8b0: 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c  .  UPDATE_MAX_BL
c8c0: 4f 42 53 49 5a 45 28 70 49 6e 31 29 3b 0a 20 20  OBSIZE(pIn1);.  
c8d0: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
c8e0: 6f 64 65 3a 20 54 6f 4e 75 6d 65 72 69 63 20 50  ode: ToNumeric P
c8f0: 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  1 * * * *.**.** 
c900: 46 6f 72 63 65 20 74 68 65 20 76 61 6c 75 65 20  Force the value 
c910: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 74  in register P1 t
c920: 6f 20 62 65 20 6e 75 6d 65 72 69 63 20 28 65 69  o be numeric (ei
c930: 74 68 65 72 20 61 6e 0a 2a 2a 20 69 6e 74 65 67  ther an.** integ
c940: 65 72 20 6f 72 20 61 20 66 6c 6f 61 74 69 6e 67  er or a floating
c950: 2d 70 6f 69 6e 74 20 6e 75 6d 62 65 72 2e 29 0a  -point number.).
c960: 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65 20  ** If the value 
c970: 69 73 20 74 65 78 74 20 6f 72 20 62 6c 6f 62 2c  is text or blob,
c980: 20 74 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20   try to convert 
c990: 69 74 20 74 6f 20 61 6e 20 75 73 69 6e 67 20 74  it to an using t
c9a0: 68 65 0a 2a 2a 20 65 71 75 69 76 61 6c 65 6e 74  he.** equivalent
c9b0: 20 6f 66 20 61 74 6f 69 28 29 20 6f 72 20 61 74   of atoi() or at
c9c0: 6f 66 28 29 20 61 6e 64 20 73 74 6f 72 65 20 30  of() and store 0
c9d0: 20 69 66 20 6e 6f 20 73 75 63 68 20 63 6f 6e 76   if no such conv
c9e0: 65 72 73 69 6f 6e 20 0a 2a 2a 20 69 73 20 70 6f  ersion .** is po
c9f0: 73 73 69 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 20  ssible..**.** A 
ca00: 4e 55 4c 4c 20 76 61 6c 75 65 20 69 73 20 6e 6f  NULL value is no
ca10: 74 20 63 68 61 6e 67 65 64 20 62 79 20 74 68 69  t changed by thi
ca20: 73 20 72 6f 75 74 69 6e 65 2e 20 20 49 74 20 72  s routine.  It r
ca30: 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a  emains NULL..*/.
ca40: 63 61 73 65 20 4f 50 5f 54 6f 4e 75 6d 65 72 69  case OP_ToNumeri
ca50: 63 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  c: {            
ca60: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
ca70: 20 54 4b 5f 54 4f 5f 4e 55 4d 45 52 49 43 2c 20   TK_TO_NUMERIC, 
ca80: 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  in1 */.  pIn1 = 
ca90: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
caa0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
cab0: 4e 75 6d 65 72 69 66 79 28 70 49 6e 31 29 3b 0a  Numerify(pIn1);.
cac0: 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
cad0: 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
cae0: 5f 43 41 53 54 20 2a 2f 0a 0a 2f 2a 20 4f 70 63  _CAST */../* Opc
caf0: 6f 64 65 3a 20 54 6f 49 6e 74 20 50 31 20 2a 20  ode: ToInt P1 * 
cb00: 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63  * * *.**.** Forc
cb10: 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  e the value in r
cb20: 65 67 69 73 74 65 72 20 50 31 20 74 6f 20 62 65  egister P1 to be
cb30: 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 49 66   an integer.  If
cb40: 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65 20 69 73  .** The value is
cb50: 20 63 75 72 72 65 6e 74 6c 79 20 61 20 72 65 61   currently a rea
cb60: 6c 20 6e 75 6d 62 65 72 2c 20 64 72 6f 70 20 69  l number, drop i
cb70: 74 73 20 66 72 61 63 74 69 6f 6e 61 6c 20 70 61  ts fractional pa
cb80: 72 74 2e 0a 2a 2a 20 49 66 20 74 68 65 20 76 61  rt..** If the va
cb90: 6c 75 65 20 69 73 20 74 65 78 74 20 6f 72 20 62  lue is text or b
cba0: 6c 6f 62 2c 20 74 72 79 20 74 6f 20 63 6f 6e 76  lob, try to conv
cbb0: 65 72 74 20 69 74 20 74 6f 20 61 6e 20 69 6e 74  ert it to an int
cbc0: 65 67 65 72 20 75 73 69 6e 67 20 74 68 65 0a 2a  eger using the.*
cbd0: 2a 20 65 71 75 69 76 61 6c 65 6e 74 20 6f 66 20  * equivalent of 
cbe0: 61 74 6f 69 28 29 20 61 6e 64 20 73 74 6f 72 65  atoi() and store
cbf0: 20 30 20 69 66 20 6e 6f 20 73 75 63 68 20 63 6f   0 if no such co
cc00: 6e 76 65 72 73 69 6f 6e 20 69 73 20 70 6f 73 73  nversion is poss
cc10: 69 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55  ible..**.** A NU
cc20: 4c 4c 20 76 61 6c 75 65 20 69 73 20 6e 6f 74 20  LL value is not 
cc30: 63 68 61 6e 67 65 64 20 62 79 20 74 68 69 73 20  changed by this 
cc40: 72 6f 75 74 69 6e 65 2e 20 20 49 74 20 72 65 6d  routine.  It rem
cc50: 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61  ains NULL..*/.ca
cc60: 73 65 20 4f 50 5f 54 6f 49 6e 74 3a 20 7b 20 20  se OP_ToInt: {  
cc70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cc80: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 54 4f  /* same as TK_TO
cc90: 5f 49 4e 54 2c 20 69 6e 31 20 2a 2f 0a 20 20 70  _INT, in1 */.  p
cca0: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
ccb0: 3e 70 31 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e  >p1];.  if( (pIn
ccc0: 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  1->flags & MEM_N
ccd0: 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73  ull)==0 ){.    s
cce0: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74  qlite3VdbeMemInt
ccf0: 65 67 65 72 69 66 79 28 70 49 6e 31 29 3b 0a 20  egerify(pIn1);. 
cd00: 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23   }.  break;.}..#
cd10: 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
cd20: 54 45 5f 4f 4d 49 54 5f 43 41 53 54 29 20 26 26  TE_OMIT_CAST) &&
cd30: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
cd40: 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50  _OMIT_FLOATING_P
cd50: 4f 49 4e 54 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a  OINT)./* Opcode:
cd60: 20 54 6f 52 65 61 6c 20 50 31 20 2a 20 2a 20 2a   ToReal P1 * * *
cd70: 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74   *.**.** Force t
cd80: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
cd90: 73 74 65 72 20 50 31 20 74 6f 20 62 65 20 61 20  ster P1 to be a 
cda0: 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 6e  floating point n
cdb0: 75 6d 62 65 72 2e 0a 2a 2a 20 49 66 20 54 68 65  umber..** If The
cdc0: 20 76 61 6c 75 65 20 69 73 20 63 75 72 72 65 6e   value is curren
cdd0: 74 6c 79 20 61 6e 20 69 6e 74 65 67 65 72 2c 20  tly an integer, 
cde0: 63 6f 6e 76 65 72 74 20 69 74 2e 0a 2a 2a 20 49  convert it..** I
cdf0: 66 20 74 68 65 20 76 61 6c 75 65 20 69 73 20 74  f the value is t
ce00: 65 78 74 20 6f 72 20 62 6c 6f 62 2c 20 74 72 79  ext or blob, try
ce10: 20 74 6f 20 63 6f 6e 76 65 72 74 20 69 74 20 74   to convert it t
ce20: 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 75 73 69  o an integer usi
ce30: 6e 67 20 74 68 65 0a 2a 2a 20 65 71 75 69 76 61  ng the.** equiva
ce40: 6c 65 6e 74 20 6f 66 20 61 74 6f 69 28 29 20 61  lent of atoi() a
ce50: 6e 64 20 73 74 6f 72 65 20 30 2e 30 20 69 66 20  nd store 0.0 if 
ce60: 6e 6f 20 73 75 63 68 20 63 6f 6e 76 65 72 73 69  no such conversi
ce70: 6f 6e 20 69 73 20 70 6f 73 73 69 62 6c 65 2e 0a  on is possible..
ce80: 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76 61 6c  **.** A NULL val
ce90: 75 65 20 69 73 20 6e 6f 74 20 63 68 61 6e 67 65  ue is not change
cea0: 64 20 62 79 20 74 68 69 73 20 72 6f 75 74 69 6e  d by this routin
ceb0: 65 2e 20 20 49 74 20 72 65 6d 61 69 6e 73 20 4e  e.  It remains N
cec0: 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ULL..*/.case OP_
ced0: 54 6f 52 65 61 6c 3a 20 7b 20 20 20 20 20 20 20  ToReal: {       
cee0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
cef0: 6d 65 20 61 73 20 54 4b 5f 54 4f 5f 52 45 41 4c  me as TK_TO_REAL
cf00: 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20  , in1 */.  pIn1 
cf10: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
cf20: 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68  ;.  memAboutToCh
cf30: 61 6e 67 65 28 70 2c 20 70 49 6e 31 29 3b 0a 20  ange(p, pIn1);. 
cf40: 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67   if( (pIn1->flag
cf50: 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30  s & MEM_Null)==0
cf60: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
cf70: 64 62 65 4d 65 6d 52 65 61 6c 69 66 79 28 70 49  dbeMemRealify(pI
cf80: 6e 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  n1);.  }.  break
cf90: 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 21 64  ;.}.#endif /* !d
cfa0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
cfb0: 49 54 5f 43 41 53 54 29 20 26 26 20 21 64 65 66  IT_CAST) && !def
cfc0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
cfd0: 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 29  _FLOATING_POINT)
cfe0: 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20   */../* Opcode: 
cff0: 4c 74 20 50 31 20 50 32 20 50 33 20 50 34 20 50  Lt P1 P2 P3 P4 P
d000: 35 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 61 72 65 20  5.**.** Compare 
d010: 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65  the values in re
d020: 67 69 73 74 65 72 20 50 31 20 61 6e 64 20 50 33  gister P1 and P3
d030: 2e 20 20 49 66 20 72 65 67 28 50 33 29 3c 72 65  .  If reg(P3)<re
d040: 67 28 50 31 29 20 74 68 65 6e 0a 2a 2a 20 6a 75  g(P1) then.** ju
d050: 6d 70 20 74 6f 20 61 64 64 72 65 73 73 20 50 32  mp to address P2
d060: 2e 20 20 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  .  .**.** If the
d070: 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55   SQLITE_JUMPIFNU
d080: 4c 4c 20 62 69 74 20 6f 66 20 50 35 20 69 73 20  LL bit of P5 is 
d090: 73 65 74 20 61 6e 64 20 65 69 74 68 65 72 20 72  set and either r
d0a0: 65 67 28 50 31 29 20 6f 72 0a 2a 2a 20 72 65 67  eg(P1) or.** reg
d0b0: 28 50 33 29 20 69 73 20 4e 55 4c 4c 20 74 68 65  (P3) is NULL the
d0c0: 6e 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 2e  n take the jump.
d0d0: 20 20 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f    If the SQLITE_
d0e0: 4a 55 4d 50 49 46 4e 55 4c 4c 20 0a 2a 2a 20 62  JUMPIFNULL .** b
d0f0: 69 74 20 69 73 20 63 6c 65 61 72 20 74 68 65 6e  it is clear then
d100: 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 66   fall through if
d110: 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20   either operand 
d120: 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54  is NULL..**.** T
d130: 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41  he SQLITE_AFF_MA
d140: 53 4b 20 70 6f 72 74 69 6f 6e 20 6f 66 20 50 35  SK portion of P5
d150: 20 6d 75 73 74 20 62 65 20 61 6e 20 61 66 66 69   must be an affi
d160: 6e 69 74 79 20 63 68 61 72 61 63 74 65 72 20 2d  nity character -
d170: 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 54  .** SQLITE_AFF_T
d180: 45 58 54 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f  EXT, SQLITE_AFF_
d190: 49 4e 54 45 47 45 52 2c 20 61 6e 64 20 73 6f 20  INTEGER, and so 
d1a0: 66 6f 72 74 68 2e 20 41 6e 20 61 74 74 65 6d 70  forth. An attemp
d1b0: 74 20 69 73 20 6d 61 64 65 20 0a 2a 2a 20 74 6f  t is made .** to
d1c0: 20 63 6f 65 72 63 65 20 62 6f 74 68 20 69 6e 70   coerce both inp
d1d0: 75 74 73 20 61 63 63 6f 72 64 69 6e 67 20 74 6f  uts according to
d1e0: 20 74 68 69 73 20 61 66 66 69 6e 69 74 79 20 62   this affinity b
d1f0: 65 66 6f 72 65 20 74 68 65 0a 2a 2a 20 63 6f 6d  efore the.** com
d200: 70 61 72 69 73 6f 6e 20 69 73 20 6d 61 64 65 2e  parison is made.
d210: 20 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f 41   If the SQLITE_A
d220: 46 46 5f 4d 41 53 4b 20 69 73 20 30 78 30 30 2c  FF_MASK is 0x00,
d230: 20 74 68 65 6e 20 6e 75 6d 65 72 69 63 0a 2a 2a   then numeric.**
d240: 20 61 66 66 69 6e 69 74 79 20 69 73 20 75 73 65   affinity is use
d250: 64 2e 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65  d. Note that the
d260: 20 61 66 66 69 6e 69 74 79 20 63 6f 6e 76 65 72   affinity conver
d270: 73 69 6f 6e 73 20 61 72 65 20 73 74 6f 72 65 64  sions are stored
d280: 0a 2a 2a 20 62 61 63 6b 20 69 6e 74 6f 20 74 68  .** back into th
d290: 65 20 69 6e 70 75 74 20 72 65 67 69 73 74 65 72  e input register
d2a0: 73 20 50 31 20 61 6e 64 20 50 33 2e 20 20 53 6f  s P1 and P3.  So
d2b0: 20 74 68 69 73 20 6f 70 63 6f 64 65 20 63 61 6e   this opcode can
d2c0: 20 63 61 75 73 65 0a 2a 2a 20 70 65 72 73 69 73   cause.** persis
d2d0: 74 65 6e 74 20 63 68 61 6e 67 65 73 20 74 6f 20  tent changes to 
d2e0: 72 65 67 69 73 74 65 72 73 20 50 31 20 61 6e 64  registers P1 and
d2f0: 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 4f 6e 63 65 20   P3..**.** Once 
d300: 61 6e 79 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20  any conversions 
d310: 68 61 76 65 20 74 61 6b 65 6e 20 70 6c 61 63 65  have taken place
d320: 2c 20 61 6e 64 20 6e 65 69 74 68 65 72 20 76 61  , and neither va
d330: 6c 75 65 20 69 73 20 4e 55 4c 4c 2c 20 0a 2a 2a  lue is NULL, .**
d340: 20 74 68 65 20 76 61 6c 75 65 73 20 61 72 65 20   the values are 
d350: 63 6f 6d 70 61 72 65 64 2e 20 49 66 20 62 6f 74  compared. If bot
d360: 68 20 76 61 6c 75 65 73 20 61 72 65 20 62 6c 6f  h values are blo
d370: 62 73 20 74 68 65 6e 20 6d 65 6d 63 6d 70 28 29  bs then memcmp()
d380: 20 69 73 0a 2a 2a 20 75 73 65 64 20 74 6f 20 64   is.** used to d
d390: 65 74 65 72 6d 69 6e 65 20 74 68 65 20 72 65 73  etermine the res
d3a0: 75 6c 74 73 20 6f 66 20 74 68 65 20 63 6f 6d 70  ults of the comp
d3b0: 61 72 69 73 6f 6e 2e 20 20 49 66 20 62 6f 74 68  arison.  If both
d3c0: 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72 65 20 74   values.** are t
d3d0: 65 78 74 2c 20 74 68 65 6e 20 74 68 65 20 61 70  ext, then the ap
d3e0: 70 72 6f 70 72 69 61 74 65 20 63 6f 6c 6c 61 74  propriate collat
d3f0: 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 73 70 65  ing function spe
d400: 63 69 66 69 65 64 20 69 6e 0a 2a 2a 20 50 34 20  cified in.** P4 
d410: 69 73 20 20 75 73 65 64 20 74 6f 20 64 6f 20 74  is  used to do t
d420: 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20  he comparison.  
d430: 49 66 20 50 34 20 69 73 20 6e 6f 74 20 73 70 65  If P4 is not spe
d440: 63 69 66 69 65 64 20 74 68 65 6e 0a 2a 2a 20 6d  cified then.** m
d450: 65 6d 63 6d 70 28 29 20 69 73 20 75 73 65 64 20  emcmp() is used 
d460: 74 6f 20 63 6f 6d 70 61 72 65 20 74 65 78 74 20  to compare text 
d470: 73 74 72 69 6e 67 2e 20 20 49 66 20 62 6f 74 68  string.  If both
d480: 20 76 61 6c 75 65 73 20 61 72 65 0a 2a 2a 20 6e   values are.** n
d490: 75 6d 65 72 69 63 2c 20 74 68 65 6e 20 61 20 6e  umeric, then a n
d4a0: 75 6d 65 72 69 63 20 63 6f 6d 70 61 72 69 73 6f  umeric compariso
d4b0: 6e 20 69 73 20 75 73 65 64 2e 20 49 66 20 74 68  n is used. If th
d4c0: 65 20 74 77 6f 20 76 61 6c 75 65 73 0a 2a 2a 20  e two values.** 
d4d0: 61 72 65 20 6f 66 20 64 69 66 66 65 72 65 6e 74  are of different
d4e0: 20 74 79 70 65 73 2c 20 74 68 65 6e 20 6e 75 6d   types, then num
d4f0: 62 65 72 73 20 61 72 65 20 63 6f 6e 73 69 64 65  bers are conside
d500: 72 65 64 20 6c 65 73 73 20 74 68 61 6e 0a 2a 2a  red less than.**
d510: 20 73 74 72 69 6e 67 73 20 61 6e 64 20 73 74 72   strings and str
d520: 69 6e 67 73 20 61 72 65 20 63 6f 6e 73 69 64 65  ings are conside
d530: 72 65 64 20 6c 65 73 73 20 74 68 61 6e 20 62 6c  red less than bl
d540: 6f 62 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  obs..**.** If th
d550: 65 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32  e SQLITE_STOREP2
d560: 20 62 69 74 20 6f 66 20 50 35 20 69 73 20 73 65   bit of P5 is se
d570: 74 2c 20 74 68 65 6e 20 64 6f 20 6e 6f 74 20 6a  t, then do not j
d580: 75 6d 70 2e 20 20 49 6e 73 74 65 61 64 2c 0a 2a  ump.  Instead,.*
d590: 2a 20 73 74 6f 72 65 20 61 20 62 6f 6f 6c 65 61  * store a boolea
d5a0: 6e 20 72 65 73 75 6c 74 20 28 65 69 74 68 65 72  n result (either
d5b0: 20 30 2c 20 6f 72 20 31 2c 20 6f 72 20 4e 55 4c   0, or 1, or NUL
d5c0: 4c 29 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  L) in register P
d5d0: 32 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  2..*/./* Opcode:
d5e0: 20 4e 65 20 50 31 20 50 32 20 50 33 20 50 34 20   Ne P1 P2 P3 P4 
d5f0: 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f  P5.**.** This wo
d600: 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 74 68  rks just like th
d610: 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78 63 65  e Lt opcode exce
d620: 70 74 20 74 68 61 74 20 74 68 65 20 6a 75 6d 70  pt that the jump
d630: 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20   is taken if.** 
d640: 74 68 65 20 6f 70 65 72 61 6e 64 73 20 69 6e 20  the operands in 
d650: 72 65 67 69 73 74 65 72 73 20 50 31 20 61 6e 64  registers P1 and
d660: 20 50 33 20 61 72 65 20 6e 6f 74 20 65 71 75 61   P3 are not equa
d670: 6c 2e 20 20 53 65 65 20 74 68 65 20 4c 74 20 6f  l.  See the Lt o
d680: 70 63 6f 64 65 20 66 6f 72 0a 2a 2a 20 61 64 64  pcode for.** add
d690: 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74  itional informat
d6a0: 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 53 51  ion..**.** If SQ
d6b0: 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20 73  LITE_NULLEQ is s
d6c0: 65 74 20 69 6e 20 50 35 20 74 68 65 6e 20 74 68  et in P5 then th
d6d0: 65 20 72 65 73 75 6c 74 20 6f 66 20 63 6f 6d 70  e result of comp
d6e0: 61 72 69 73 6f 6e 20 69 73 20 61 6c 77 61 79 73  arison is always
d6f0: 20 65 69 74 68 65 72 0a 2a 2a 20 74 72 75 65 20   either.** true 
d700: 6f 72 20 66 61 6c 73 65 20 61 6e 64 20 69 73 20  or false and is 
d710: 6e 65 76 65 72 20 4e 55 4c 4c 2e 20 20 49 66 20  never NULL.  If 
d720: 62 6f 74 68 20 6f 70 65 72 61 6e 64 73 20 61 72  both operands ar
d730: 65 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65 20  e NULL then the 
d740: 72 65 73 75 6c 74 0a 2a 2a 20 6f 66 20 63 6f 6d  result.** of com
d750: 70 61 72 69 73 6f 6e 20 69 73 20 66 61 6c 73 65  parison is false
d760: 2e 20 20 49 66 20 65 69 74 68 65 72 20 6f 70 65  .  If either ope
d770: 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20 74 68 65  rand is NULL the
d780: 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  n the result is 
d790: 74 72 75 65 2e 0a 2a 2a 20 49 66 20 6e 65 69 74  true..** If neit
d7a0: 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e  her operand is N
d7b0: 55 4c 4c 20 74 68 65 20 72 65 73 75 6c 74 20 69  ULL the result i
d7c0: 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 69 74  s the same as it
d7d0: 20 77 6f 75 6c 64 20 62 65 20 69 66 0a 2a 2a 20   would be if.** 
d7e0: 74 68 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45  the SQLITE_NULLE
d7f0: 51 20 66 6c 61 67 20 77 65 72 65 20 6f 6d 69 74  Q flag were omit
d800: 74 65 64 20 66 72 6f 6d 20 50 35 2e 0a 2a 2f 0a  ted from P5..*/.
d810: 2f 2a 20 4f 70 63 6f 64 65 3a 20 45 71 20 50 31  /* Opcode: Eq P1
d820: 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a   P2 P3 P4 P5.**.
d830: 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75  ** This works ju
d840: 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f  st like the Lt o
d850: 70 63 6f 64 65 20 65 78 63 65 70 74 20 74 68 61  pcode except tha
d860: 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61  t the jump is ta
d870: 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 6f 70  ken if.** the op
d880: 65 72 61 6e 64 73 20 69 6e 20 72 65 67 69 73 74  erands in regist
d890: 65 72 73 20 50 31 20 61 6e 64 20 50 33 20 61 72  ers P1 and P3 ar
d8a0: 65 20 65 71 75 61 6c 2e 0a 2a 2a 20 53 65 65 20  e equal..** See 
d8b0: 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f  the Lt opcode fo
d8c0: 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66  r additional inf
d8d0: 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  ormation..**.** 
d8e0: 49 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51  If SQLITE_NULLEQ
d8f0: 20 69 73 20 73 65 74 20 69 6e 20 50 35 20 74 68   is set in P5 th
d900: 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  en the result of
d910: 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 61   comparison is a
d920: 6c 77 61 79 73 20 65 69 74 68 65 72 0a 2a 2a 20  lways either.** 
d930: 74 72 75 65 20 6f 72 20 66 61 6c 73 65 20 61 6e  true or false an
d940: 64 20 69 73 20 6e 65 76 65 72 20 4e 55 4c 4c 2e  d is never NULL.
d950: 20 20 49 66 20 62 6f 74 68 20 6f 70 65 72 61 6e    If both operan
d960: 64 73 20 61 72 65 20 4e 55 4c 4c 20 74 68 65 6e  ds are NULL then
d970: 20 74 68 65 20 72 65 73 75 6c 74 0a 2a 2a 20 6f   the result.** o
d980: 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20  f comparison is 
d990: 74 72 75 65 2e 20 20 49 66 20 65 69 74 68 65 72  true.  If either
d9a0: 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c   operand is NULL
d9b0: 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74   then the result
d9c0: 20 69 73 20 66 61 6c 73 65 2e 0a 2a 2a 20 49 66   is false..** If
d9d0: 20 6e 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64   neither operand
d9e0: 20 69 73 20 4e 55 4c 4c 20 74 68 65 20 72 65 73   is NULL the res
d9f0: 75 6c 74 20 69 73 20 74 68 65 20 73 61 6d 65 20  ult is the same 
da00: 61 73 20 69 74 20 77 6f 75 6c 64 20 62 65 20 69  as it would be i
da10: 66 0a 2a 2a 20 74 68 65 20 53 51 4c 49 54 45 5f  f.** the SQLITE_
da20: 4e 55 4c 4c 45 51 20 66 6c 61 67 20 77 65 72 65  NULLEQ flag were
da30: 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 50 35   omitted from P5
da40: 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
da50: 4c 65 20 50 31 20 50 32 20 50 33 20 50 34 20 50  Le P1 P2 P3 P4 P
da60: 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72  5.**.** This wor
da70: 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 74 68 65  ks just like the
da80: 20 4c 74 20 6f 70 63 6f 64 65 20 65 78 63 65 70   Lt opcode excep
da90: 74 20 74 68 61 74 20 74 68 65 20 6a 75 6d 70 20  t that the jump 
daa0: 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74  is taken if.** t
dab0: 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65  he content of re
dac0: 67 69 73 74 65 72 20 50 33 20 69 73 20 6c 65 73  gister P3 is les
dad0: 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20  s than or equal 
dae0: 74 6f 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  to the content o
daf0: 66 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31  f.** register P1
db00: 2e 20 20 53 65 65 20 74 68 65 20 4c 74 20 6f 70  .  See the Lt op
db10: 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f  code for additio
db20: 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  nal information.
db30: 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 47  .*/./* Opcode: G
db40: 74 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  t P1 P2 P3 P4 P5
db50: 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b  .**.** This work
db60: 73 20 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20  s just like the 
db70: 4c 74 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74  Lt opcode except
db80: 20 74 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69   that the jump i
db90: 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68  s taken if.** th
dba0: 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67  e content of reg
dbb0: 69 73 74 65 72 20 50 33 20 69 73 20 67 72 65 61  ister P3 is grea
dbc0: 74 65 72 20 74 68 61 6e 20 74 68 65 20 63 6f 6e  ter than the con
dbd0: 74 65 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69 73  tent of.** regis
dbe0: 74 65 72 20 50 31 2e 20 20 53 65 65 20 74 68 65  ter P1.  See the
dbf0: 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61   Lt opcode for a
dc00: 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d  dditional inform
dc10: 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  ation..*/./* Opc
dc20: 6f 64 65 3a 20 47 65 20 50 31 20 50 32 20 50 33  ode: Ge P1 P2 P3
dc30: 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69   P4 P5.**.** Thi
dc40: 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b  s works just lik
dc50: 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20  e the Lt opcode 
dc60: 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20  except that the 
dc70: 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66  jump is taken if
dc80: 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  .** the content 
dc90: 6f 66 20 72 65 67 69 73 74 65 72 20 50 33 20 69  of register P3 i
dca0: 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f  s greater than o
dcb0: 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 63  r equal to the c
dcc0: 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 72 65 67  ontent of.** reg
dcd0: 69 73 74 65 72 20 50 31 2e 20 20 53 65 65 20 74  ister P1.  See t
dce0: 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72  he Lt opcode for
dcf0: 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
dd00: 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65  rmation..*/.case
dd10: 20 4f 50 5f 45 71 3a 20 20 20 20 20 20 20 20 20   OP_Eq:         
dd20: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
dd30: 20 54 4b 5f 45 51 2c 20 6a 75 6d 70 2c 20 69 6e   TK_EQ, jump, in
dd40: 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f  1, in3 */.case O
dd50: 50 5f 4e 65 3a 20 20 20 20 20 20 20 20 20 20 20  P_Ne:           
dd60: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
dd70: 4b 5f 4e 45 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c  K_NE, jump, in1,
dd80: 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f   in3 */.case OP_
dd90: 4c 74 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  Lt:             
dda0: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
ddb0: 4c 54 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69  LT, jump, in1, i
ddc0: 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 65  n3 */.case OP_Le
ddd0: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :               
dde0: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4c 45  /* same as TK_LE
ddf0: 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33  , jump, in1, in3
de00: 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 74 3a 20   */.case OP_Gt: 
de10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
de20: 20 73 61 6d 65 20 61 73 20 54 4b 5f 47 54 2c 20   same as TK_GT, 
de30: 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a  jump, in1, in3 *
de40: 2f 0a 63 61 73 65 20 4f 50 5f 47 65 3a 20 7b 20  /.case OP_Ge: { 
de50: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
de60: 61 6d 65 20 61 73 20 54 4b 5f 47 45 2c 20 6a 75  ame as TK_GE, ju
de70: 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a  mp, in1, in3 */.
de80: 20 20 69 6e 74 20 72 65 73 3b 20 20 20 20 20 20    int res;      
de90: 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20        /* Result 
dea0: 6f 66 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f  of the compariso
deb0: 6e 20 6f 66 20 70 49 6e 31 20 61 67 61 69 6e 73  n of pIn1 agains
dec0: 74 20 70 49 6e 33 20 2a 2f 0a 20 20 63 68 61 72  t pIn3 */.  char
ded0: 20 61 66 66 69 6e 69 74 79 3b 20 20 20 20 20 20   affinity;      
dee0: 2f 2a 20 41 66 66 69 6e 69 74 79 20 74 6f 20 75  /* Affinity to u
def0: 73 65 20 66 6f 72 20 63 6f 6d 70 61 72 69 73 6f  se for compariso
df00: 6e 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67 73  n */.  u16 flags
df10: 31 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f  1;         /* Co
df20: 70 79 20 6f 66 20 69 6e 69 74 69 61 6c 20 76 61  py of initial va
df30: 6c 75 65 20 6f 66 20 70 49 6e 31 2d 3e 66 6c 61  lue of pIn1->fla
df40: 67 73 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67  gs */.  u16 flag
df50: 73 33 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43  s3;         /* C
df60: 6f 70 79 20 6f 66 20 69 6e 69 74 69 61 6c 20 76  opy of initial v
df70: 61 6c 75 65 20 6f 66 20 70 49 6e 33 2d 3e 66 6c  alue of pIn3->fl
df80: 61 67 73 20 2a 2f 0a 0a 20 20 70 49 6e 31 20 3d  ags */..  pIn1 =
df90: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
dfa0: 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b  .  pIn3 = &aMem[
dfb0: 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 66 6c 61 67  pOp->p3];.  flag
dfc0: 73 31 20 3d 20 70 49 6e 31 2d 3e 66 6c 61 67 73  s1 = pIn1->flags
dfd0: 3b 0a 20 20 66 6c 61 67 73 33 20 3d 20 70 49 6e  ;.  flags3 = pIn
dfe0: 33 2d 3e 66 6c 61 67 73 3b 0a 20 20 69 66 28 20  3->flags;.  if( 
dff0: 28 66 6c 61 67 73 31 20 7c 20 66 6c 61 67 73 33  (flags1 | flags3
e000: 29 26 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20  )&MEM_Null ){.  
e010: 20 20 2f 2a 20 4f 6e 65 20 6f 72 20 62 6f 74 68    /* One or both
e020: 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20 4e 55   operands are NU
e030: 4c 4c 20 2a 2f 0a 20 20 20 20 69 66 28 20 70 4f  LL */.    if( pO
e040: 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 4e  p->p5 & SQLITE_N
e050: 55 4c 4c 45 51 20 29 7b 0a 20 20 20 20 20 20 2f  ULLEQ ){.      /
e060: 2a 20 49 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c  * If SQLITE_NULL
e070: 45 51 20 69 73 20 73 65 74 20 28 77 68 69 63 68  EQ is set (which
e080: 20 77 69 6c 6c 20 6f 6e 6c 79 20 68 61 70 70 65   will only happe
e090: 6e 20 69 66 20 74 68 65 20 6f 70 65 72 61 74 6f  n if the operato
e0a0: 72 20 69 73 0a 20 20 20 20 20 20 2a 2a 20 4f 50  r is.      ** OP
e0b0: 5f 45 71 20 6f 72 20 4f 50 5f 4e 65 29 20 74 68  _Eq or OP_Ne) th
e0c0: 65 6e 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70  en take the jump
e0d0: 20 6f 72 20 6e 6f 74 20 64 65 70 65 6e 64 69 6e   or not dependin
e0e0: 67 20 6f 6e 20 77 68 65 74 68 65 72 0a 20 20 20  g on whether.   
e0f0: 20 20 20 2a 2a 20 6f 72 20 6e 6f 74 20 62 6f 74     ** or not bot
e100: 68 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20 6e  h operands are n
e110: 75 6c 6c 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20  ull..      */.  
e120: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
e130: 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45 71 20 7c  >opcode==OP_Eq |
e140: 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  | pOp->opcode==O
e150: 50 5f 4e 65 20 29 3b 0a 20 20 20 20 20 20 72 65  P_Ne );.      re
e160: 73 20 3d 20 28 66 6c 61 67 73 31 20 26 20 66 6c  s = (flags1 & fl
e170: 61 67 73 33 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29  ags3 & MEM_Null)
e180: 3d 3d 30 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  ==0;.    }else{.
e190: 20 20 20 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f        /* SQLITE_
e1a0: 4e 55 4c 4c 45 51 20 69 73 20 63 6c 65 61 72 20  NULLEQ is clear 
e1b0: 61 6e 64 20 61 74 20 6c 65 61 73 74 20 6f 6e 65  and at least one
e1c0: 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c   operand is NULL
e1d0: 2c 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 6e 20  ,.      ** then 
e1e0: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 61 6c  the result is al
e1f0: 77 61 79 73 20 4e 55 4c 4c 2e 0a 20 20 20 20 20  ways NULL..     
e200: 20 2a 2a 20 54 68 65 20 6a 75 6d 70 20 69 73 20   ** The jump is 
e210: 74 61 6b 65 6e 20 69 66 20 74 68 65 20 53 51 4c  taken if the SQL
e220: 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 62  ITE_JUMPIFNULL b
e230: 69 74 20 69 73 20 73 65 74 2e 0a 20 20 20 20 20  it is set..     
e240: 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70 4f   */.      if( pO
e250: 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 53  p->p5 & SQLITE_S
e260: 54 4f 52 45 50 32 20 29 7b 0a 20 20 20 20 20 20  TOREP2 ){.      
e270: 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
e280: 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 20 20 20  Op->p2];.       
e290: 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
e2a0: 70 4f 75 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b  pOut, MEM_Null);
e2b0: 0a 20 20 20 20 20 20 20 20 52 45 47 49 53 54 45  .        REGISTE
e2c0: 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c  R_TRACE(pOp->p2,
e2d0: 20 70 4f 75 74 29 3b 0a 20 20 20 20 20 20 7d 65   pOut);.      }e
e2e0: 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e 70 35 20  lse if( pOp->p5 
e2f0: 26 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e  & SQLITE_JUMPIFN
e300: 55 4c 4c 20 29 7b 0a 20 20 20 20 20 20 20 20 70  ULL ){.        p
e310: 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20  c = pOp->p2-1;. 
e320: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 62 72 65       }.      bre
e330: 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73  ak;.    }.  }els
e340: 65 7b 0a 20 20 20 20 2f 2a 20 4e 65 69 74 68 65  e{.    /* Neithe
e350: 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c  r operand is NUL
e360: 4c 2e 20 20 44 6f 20 61 20 63 6f 6d 70 61 72 69  L.  Do a compari
e370: 73 6f 6e 2e 20 2a 2f 0a 20 20 20 20 61 66 66 69  son. */.    affi
e380: 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70 35 20 26  nity = pOp->p5 &
e390: 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b   SQLITE_AFF_MASK
e3a0: 3b 0a 20 20 20 20 69 66 28 20 61 66 66 69 6e 69  ;.    if( affini
e3b0: 74 79 20 29 7b 0a 20 20 20 20 20 20 61 70 70 6c  ty ){.      appl
e3c0: 79 41 66 66 69 6e 69 74 79 28 70 49 6e 31 2c 20  yAffinity(pIn1, 
e3d0: 61 66 66 69 6e 69 74 79 2c 20 65 6e 63 6f 64 69  affinity, encodi
e3e0: 6e 67 29 3b 0a 20 20 20 20 20 20 61 70 70 6c 79  ng);.      apply
e3f0: 41 66 66 69 6e 69 74 79 28 70 49 6e 33 2c 20 61  Affinity(pIn3, a
e400: 66 66 69 6e 69 74 79 2c 20 65 6e 63 6f 64 69 6e  ffinity, encodin
e410: 67 29 3b 0a 20 20 20 20 20 20 69 66 28 20 64 62  g);.      if( db
e420: 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29  ->mallocFailed )
e430: 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
e440: 20 20 7d 0a 0a 20 20 20 20 61 73 73 65 72 74 28    }..    assert(
e450: 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
e460: 5f 43 4f 4c 4c 53 45 51 20 7c 7c 20 70 4f 70 2d  _COLLSEQ || pOp-
e470: 3e 70 34 2e 70 43 6f 6c 6c 3d 3d 30 20 29 3b 0a  >p4.pColl==0 );.
e480: 20 20 20 20 45 78 70 61 6e 64 42 6c 6f 62 28 70      ExpandBlob(p
e490: 49 6e 31 29 3b 0a 20 20 20 20 45 78 70 61 6e 64  In1);.    Expand
e4a0: 42 6c 6f 62 28 70 49 6e 33 29 3b 0a 20 20 20 20  Blob(pIn3);.    
e4b0: 72 65 73 20 3d 20 73 71 6c 69 74 65 33 4d 65 6d  res = sqlite3Mem
e4c0: 43 6f 6d 70 61 72 65 28 70 49 6e 33 2c 20 70 49  Compare(pIn3, pI
e4d0: 6e 31 2c 20 70 4f 70 2d 3e 70 34 2e 70 43 6f 6c  n1, pOp->p4.pCol
e4e0: 6c 29 3b 0a 20 20 7d 0a 20 20 73 77 69 74 63 68  l);.  }.  switch
e4f0: 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b  ( pOp->opcode ){
e500: 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 45 71 3a  .    case OP_Eq:
e510: 20 20 20 20 72 65 73 20 3d 20 72 65 73 3d 3d 30      res = res==0
e520: 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20  ;     break;.   
e530: 20 63 61 73 65 20 4f 50 5f 4e 65 3a 20 20 20 20   case OP_Ne:    
e540: 72 65 73 20 3d 20 72 65 73 21 3d 30 3b 20 20 20  res = res!=0;   
e550: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
e560: 65 20 4f 50 5f 4c 74 3a 20 20 20 20 72 65 73 20  e OP_Lt:    res 
e570: 3d 20 72 65 73 3c 30 3b 20 20 20 20 20 20 62 72  = res<0;      br
e580: 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f 50  eak;.    case OP
e590: 5f 4c 65 3a 20 20 20 20 72 65 73 20 3d 20 72 65  _Le:    res = re
e5a0: 73 3c 3d 30 3b 20 20 20 20 20 62 72 65 61 6b 3b  s<=0;     break;
e5b0: 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 47 74 3a  .    case OP_Gt:
e5c0: 20 20 20 20 72 65 73 20 3d 20 72 65 73 3e 30 3b      res = res>0;
e5d0: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
e5e0: 20 64 65 66 61 75 6c 74 3a 20 20 20 20 20 20 20   default:       
e5f0: 72 65 73 20 3d 20 72 65 73 3e 3d 30 3b 20 20 20  res = res>=0;   
e600: 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20    break;.  }..  
e610: 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 53 51  if( pOp->p5 & SQ
e620: 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 29 7b 0a  LITE_STOREP2 ){.
e630: 20 20 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d      pOut = &aMem
e640: 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 6d  [pOp->p2];.    m
e650: 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
e660: 70 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 4d 65  p, pOut);.    Me
e670: 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75  mSetTypeFlag(pOu
e680: 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 20  t, MEM_Int);.   
e690: 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 72 65 73   pOut->u.i = res
e6a0: 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54  ;.    REGISTER_T
e6b0: 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f  RACE(pOp->p2, pO
e6c0: 75 74 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  ut);.  }else if(
e6d0: 20 72 65 73 20 29 7b 0a 20 20 20 20 70 63 20 3d   res ){.    pc =
e6e0: 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d 0a   pOp->p2-1;.  }.
e6f0: 0a 20 20 2f 2a 20 55 6e 64 6f 20 61 6e 79 20 63  .  /* Undo any c
e700: 68 61 6e 67 65 73 20 6d 61 64 65 20 62 79 20 61  hanges made by a
e710: 70 70 6c 79 41 66 66 69 6e 69 74 79 28 29 20 74  pplyAffinity() t
e720: 6f 20 74 68 65 20 69 6e 70 75 74 20 72 65 67 69  o the input regi
e730: 73 74 65 72 73 2e 20 2a 2f 0a 20 20 70 49 6e 31  sters. */.  pIn1
e740: 2d 3e 66 6c 61 67 73 20 3d 20 28 70 49 6e 31 2d  ->flags = (pIn1-
e750: 3e 66 6c 61 67 73 26 7e 4d 45 4d 5f 54 79 70 65  >flags&~MEM_Type
e760: 4d 61 73 6b 29 20 7c 20 28 66 6c 61 67 73 31 26  Mask) | (flags1&
e770: 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 29 3b 0a 20  MEM_TypeMask);. 
e780: 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 3d 20 28   pIn3->flags = (
e790: 70 49 6e 33 2d 3e 66 6c 61 67 73 26 7e 4d 45 4d  pIn3->flags&~MEM
e7a0: 5f 54 79 70 65 4d 61 73 6b 29 20 7c 20 28 66 6c  _TypeMask) | (fl
e7b0: 61 67 73 33 26 4d 45 4d 5f 54 79 70 65 4d 61 73  ags3&MEM_TypeMas
e7c0: 6b 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  k);.  break;.}..
e7d0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 65 72 6d 75  /* Opcode: Permu
e7e0: 74 61 74 69 6f 6e 20 2a 20 2a 20 2a 20 50 34 20  tation * * * P4 
e7f0: 2a 0a 2a 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20  *.**.** Set the 
e800: 70 65 72 6d 75 74 61 74 69 6f 6e 20 75 73 65 64  permutation used
e810: 20 62 79 20 74 68 65 20 4f 50 5f 43 6f 6d 70 61   by the OP_Compa
e820: 72 65 20 6f 70 65 72 61 74 6f 72 20 74 6f 20 62  re operator to b
e830: 65 20 74 68 65 20 61 72 72 61 79 0a 2a 2a 20 6f  e the array.** o
e840: 66 20 69 6e 74 65 67 65 72 73 20 69 6e 20 50 34  f integers in P4
e850: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 70 65 72 6d  ..**.** The perm
e860: 75 74 61 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20  utation is only 
e870: 76 61 6c 69 64 20 75 6e 74 69 6c 20 74 68 65 20  valid until the 
e880: 6e 65 78 74 20 4f 50 5f 50 65 72 6d 75 74 61 74  next OP_Permutat
e890: 69 6f 6e 2c 20 4f 50 5f 43 6f 6d 70 61 72 65 2c  ion, OP_Compare,
e8a0: 0a 2a 2a 20 4f 50 5f 48 61 6c 74 2c 20 6f 72 20  .** OP_Halt, or 
e8b0: 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2e 20 20 54  OP_ResultRow.  T
e8c0: 79 70 69 63 61 6c 6c 79 20 74 68 65 20 4f 50 5f  ypically the OP_
e8d0: 50 65 72 6d 75 74 61 74 69 6f 6e 20 73 68 6f 75  Permutation shou
e8e0: 6c 64 20 6f 63 63 75 72 0a 2a 2a 20 69 6d 6d 65  ld occur.** imme
e8f0: 64 69 61 74 65 6c 79 20 70 72 69 6f 72 20 74 6f  diately prior to
e900: 20 74 68 65 20 4f 50 5f 43 6f 6d 70 61 72 65 2e   the OP_Compare.
e910: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 65 72 6d  .*/.case OP_Perm
e920: 75 74 61 74 69 6f 6e 3a 20 7b 0a 20 20 61 73 73  utation: {.  ass
e930: 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65  ert( pOp->p4type
e940: 3d 3d 50 34 5f 49 4e 54 41 52 52 41 59 20 29 3b  ==P4_INTARRAY );
e950: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
e960: 70 34 2e 61 69 20 29 3b 0a 20 20 61 50 65 72 6d  p4.ai );.  aPerm
e970: 75 74 65 20 3d 20 70 4f 70 2d 3e 70 34 2e 61 69  ute = pOp->p4.ai
e980: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
e990: 20 4f 70 63 6f 64 65 3a 20 43 6f 6d 70 61 72 65   Opcode: Compare
e9a0: 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a   P1 P2 P3 P4 *.*
e9b0: 2a 0a 2a 2a 20 43 6f 6d 70 61 72 65 20 74 77 6f  *.** Compare two
e9c0: 20 76 65 63 74 6f 72 73 20 6f 66 20 72 65 67 69   vectors of regi
e9d0: 73 74 65 72 73 20 69 6e 20 72 65 67 28 50 31 29  sters in reg(P1)
e9e0: 2e 2e 72 65 67 28 50 31 2b 50 33 2d 31 29 20 28  ..reg(P1+P3-1) (
e9f0: 63 61 6c 6c 20 74 68 69 73 0a 2a 2a 20 76 65 63  call this.** vec
ea00: 74 6f 72 20 22 41 22 29 20 61 6e 64 20 69 6e 20  tor "A") and in 
ea10: 72 65 67 28 50 32 29 2e 2e 72 65 67 28 50 32 2b  reg(P2)..reg(P2+
ea20: 50 33 2d 31 29 20 28 22 42 22 29 2e 20 20 53 61  P3-1) ("B").  Sa
ea30: 76 65 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  ve the result of
ea40: 0a 2a 2a 20 74 68 65 20 63 6f 6d 70 61 72 69 73  .** the comparis
ea50: 6f 6e 20 66 6f 72 20 75 73 65 20 62 79 20 74 68  on for use by th
ea60: 65 20 6e 65 78 74 20 4f 50 5f 4a 75 6d 70 20 69  e next OP_Jump i
ea70: 6e 73 74 72 75 63 74 2e 0a 2a 2a 0a 2a 2a 20 50  nstruct..**.** P
ea80: 34 20 69 73 20 61 20 4b 65 79 49 6e 66 6f 20 73  4 is a KeyInfo s
ea90: 74 72 75 63 74 75 72 65 20 74 68 61 74 20 64 65  tructure that de
eaa0: 66 69 6e 65 73 20 63 6f 6c 6c 61 74 69 6e 67 20  fines collating 
eab0: 73 65 71 75 65 6e 63 65 73 20 61 6e 64 20 73 6f  sequences and so
eac0: 72 74 0a 2a 2a 20 6f 72 64 65 72 73 20 66 6f 72  rt.** orders for
ead0: 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e   the comparison.
eae0: 20 20 54 68 65 20 70 65 72 6d 75 74 61 74 69 6f    The permutatio
eaf0: 6e 20 61 70 70 6c 69 65 73 20 74 6f 20 72 65 67  n applies to reg
eb00: 69 73 74 65 72 73 0a 2a 2a 20 6f 6e 6c 79 2e 20  isters.** only. 
eb10: 20 54 68 65 20 4b 65 79 49 6e 66 6f 20 65 6c 65   The KeyInfo ele
eb20: 6d 65 6e 74 73 20 61 72 65 20 75 73 65 64 20 73  ments are used s
eb30: 65 71 75 65 6e 74 69 61 6c 6c 79 2e 0a 2a 2a 0a  equentially..**.
eb40: 2a 2a 20 54 68 65 20 63 6f 6d 70 61 72 69 73 6f  ** The compariso
eb50: 6e 20 69 73 20 61 20 73 6f 72 74 20 63 6f 6d 70  n is a sort comp
eb60: 61 72 69 73 6f 6e 2c 20 73 6f 20 4e 55 4c 4c 73  arison, so NULLs
eb70: 20 63 6f 6d 70 61 72 65 20 65 71 75 61 6c 2c 0a   compare equal,.
eb80: 2a 2a 20 4e 55 4c 4c 73 20 61 72 65 20 6c 65 73  ** NULLs are les
eb90: 73 20 74 68 61 6e 20 6e 75 6d 62 65 72 73 2c 20  s than numbers, 
eba0: 6e 75 6d 62 65 72 73 20 61 72 65 20 6c 65 73 73  numbers are less
ebb0: 20 74 68 61 6e 20 73 74 72 69 6e 67 73 2c 0a 2a   than strings,.*
ebc0: 2a 20 61 6e 64 20 73 74 72 69 6e 67 73 20 61 72  * and strings ar
ebd0: 65 20 6c 65 73 73 20 74 68 61 6e 20 62 6c 6f 62  e less than blob
ebe0: 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f  s..*/.case OP_Co
ebf0: 6d 70 61 72 65 3a 20 7b 0a 20 20 69 6e 74 20 6e  mpare: {.  int n
ec00: 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 69 6e 74  ;.  int i;.  int
ec10: 20 70 31 3b 0a 20 20 69 6e 74 20 70 32 3b 0a 20   p1;.  int p2;. 
ec20: 20 63 6f 6e 73 74 20 4b 65 79 49 6e 66 6f 20 2a   const KeyInfo *
ec30: 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 69 6e 74 20  pKeyInfo;.  int 
ec40: 69 64 78 3b 0a 20 20 43 6f 6c 6c 53 65 71 20 2a  idx;.  CollSeq *
ec50: 70 43 6f 6c 6c 3b 20 20 20 20 2f 2a 20 43 6f 6c  pColl;    /* Col
ec60: 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20  lating sequence 
ec70: 74 6f 20 75 73 65 20 6f 6e 20 74 68 69 73 20 74  to use on this t
ec80: 65 72 6d 20 2a 2f 0a 20 20 69 6e 74 20 62 52 65  erm */.  int bRe
ec90: 76 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  v;          /* T
eca0: 72 75 65 20 66 6f 72 20 44 45 53 43 45 4e 44 49  rue for DESCENDI
ecb0: 4e 47 20 73 6f 72 74 20 6f 72 64 65 72 20 2a 2f  NG sort order */
ecc0: 0a 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 33 3b  ..  n = pOp->p3;
ecd0: 0a 20 20 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f  .  pKeyInfo = pO
ece0: 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a  p->p4.pKeyInfo;.
ecf0: 20 20 61 73 73 65 72 74 28 20 6e 3e 30 20 29 3b    assert( n>0 );
ed00: 0a 20 20 61 73 73 65 72 74 28 20 70 4b 65 79 49  .  assert( pKeyI
ed10: 6e 66 6f 21 3d 30 20 29 3b 0a 20 20 70 31 20 3d  nfo!=0 );.  p1 =
ed20: 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 32 20 3d   pOp->p1;.  p2 =
ed30: 20 70 4f 70 2d 3e 70 32 3b 0a 23 69 66 20 53 51   pOp->p2;.#if SQ
ed40: 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69 66 28  LITE_DEBUG.  if(
ed50: 20 61 50 65 72 6d 75 74 65 20 29 7b 0a 20 20 20   aPermute ){.   
ed60: 20 69 6e 74 20 6b 2c 20 6d 78 20 3d 20 30 3b 0a   int k, mx = 0;.
ed70: 20 20 20 20 66 6f 72 28 6b 3d 30 3b 20 6b 3c 6e      for(k=0; k<n
ed80: 3b 20 6b 2b 2b 29 20 69 66 28 20 61 50 65 72 6d  ; k++) if( aPerm
ed90: 75 74 65 5b 6b 5d 3e 6d 78 20 29 20 6d 78 20 3d  ute[k]>mx ) mx =
eda0: 20 61 50 65 72 6d 75 74 65 5b 6b 5d 3b 0a 20 20   aPermute[k];.  
edb0: 20 20 61 73 73 65 72 74 28 20 70 31 3e 30 20 26    assert( p1>0 &
edc0: 26 20 70 31 2b 6d 78 3c 3d 70 2d 3e 6e 4d 65 6d  & p1+mx<=p->nMem
edd0: 2b 31 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  +1 );.    assert
ede0: 28 20 70 32 3e 30 20 26 26 20 70 32 2b 6d 78 3c  ( p2>0 && p2+mx<
edf0: 3d 70 2d 3e 6e 4d 65 6d 2b 31 20 29 3b 0a 20 20  =p->nMem+1 );.  
ee00: 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72  }else{.    asser
ee10: 74 28 20 70 31 3e 30 20 26 26 20 70 31 2b 6e 3c  t( p1>0 && p1+n<
ee20: 3d 70 2d 3e 6e 4d 65 6d 2b 31 20 29 3b 0a 20 20  =p->nMem+1 );.  
ee30: 20 20 61 73 73 65 72 74 28 20 70 32 3e 30 20 26    assert( p2>0 &
ee40: 26 20 70 32 2b 6e 3c 3d 70 2d 3e 6e 4d 65 6d 2b  & p2+n<=p->nMem+
ee50: 31 20 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 20  1 );.  }.#endif 
ee60: 2f 2a 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20  /* SQLITE_DEBUG 
ee70: 2a 2f 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  */.  for(i=0; i<
ee80: 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69 64 78  n; i++){.    idx
ee90: 20 3d 20 61 50 65 72 6d 75 74 65 20 3f 20 61 50   = aPermute ? aP
eea0: 65 72 6d 75 74 65 5b 69 5d 20 3a 20 69 3b 0a 20  ermute[i] : i;. 
eeb0: 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
eec0: 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 31 2b 69  Valid(&aMem[p1+i
eed0: 64 78 5d 29 20 29 3b 0a 20 20 20 20 61 73 73 65  dx]) );.    asse
eee0: 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26  rt( memIsValid(&
eef0: 61 4d 65 6d 5b 70 32 2b 69 64 78 5d 29 20 29 3b  aMem[p2+idx]) );
ef00: 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52  .    REGISTER_TR
ef10: 41 43 45 28 70 31 2b 69 64 78 2c 20 26 61 4d 65  ACE(p1+idx, &aMe
ef20: 6d 5b 70 31 2b 69 64 78 5d 29 3b 0a 20 20 20 20  m[p1+idx]);.    
ef30: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
ef40: 32 2b 69 64 78 2c 20 26 61 4d 65 6d 5b 70 32 2b  2+idx, &aMem[p2+
ef50: 69 64 78 5d 29 3b 0a 20 20 20 20 61 73 73 65 72  idx]);.    asser
ef60: 74 28 20 69 3c 70 4b 65 79 49 6e 66 6f 2d 3e 6e  t( i<pKeyInfo->n
ef70: 46 69 65 6c 64 20 29 3b 0a 20 20 20 20 70 43 6f  Field );.    pCo
ef80: 6c 6c 20 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e 61  ll = pKeyInfo->a
ef90: 43 6f 6c 6c 5b 69 5d 3b 0a 20 20 20 20 62 52 65  Coll[i];.    bRe
efa0: 76 20 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e 61 53  v = pKeyInfo->aS
efb0: 6f 72 74 4f 72 64 65 72 5b 69 5d 3b 0a 20 20 20  ortOrder[i];.   
efc0: 20 69 43 6f 6d 70 61 72 65 20 3d 20 73 71 6c 69   iCompare = sqli
efd0: 74 65 33 4d 65 6d 43 6f 6d 70 61 72 65 28 26 61  te3MemCompare(&a
efe0: 4d 65 6d 5b 70 31 2b 69 64 78 5d 2c 20 26 61 4d  Mem[p1+idx], &aM
eff0: 65 6d 5b 70 32 2b 69 64 78 5d 2c 20 70 43 6f 6c  em[p2+idx], pCol
f000: 6c 29 3b 0a 20 20 20 20 69 66 28 20 69 43 6f 6d  l);.    if( iCom
f010: 70 61 72 65 20 29 7b 0a 20 20 20 20 20 20 69 66  pare ){.      if
f020: 28 20 62 52 65 76 20 29 20 69 43 6f 6d 70 61 72  ( bRev ) iCompar
f030: 65 20 3d 20 2d 69 43 6f 6d 70 61 72 65 3b 0a 20  e = -iCompare;. 
f040: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
f050: 7d 0a 20 20 7d 0a 20 20 61 50 65 72 6d 75 74 65  }.  }.  aPermute
f060: 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d   = 0;.  break;.}
f070: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4a 75 6d  ../* Opcode: Jum
f080: 70 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  p P1 P2 P3 * *.*
f090: 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 74 68 65  *.** Jump to the
f0a0: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 74 20   instruction at 
f0b0: 61 64 64 72 65 73 73 20 50 31 2c 20 50 32 2c 20  address P1, P2, 
f0c0: 6f 72 20 50 33 20 64 65 70 65 6e 64 69 6e 67 20  or P3 depending 
f0d0: 6f 6e 20 77 68 65 74 68 65 72 0a 2a 2a 20 69 6e  on whether.** in
f0e0: 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74   the most recent
f0f0: 20 4f 50 5f 43 6f 6d 70 61 72 65 20 69 6e 73 74   OP_Compare inst
f100: 72 75 63 74 69 6f 6e 20 74 68 65 20 50 31 20 76  ruction the P1 v
f110: 65 63 74 6f 72 20 77 61 73 20 6c 65 73 73 20 74  ector was less t
f120: 68 61 6e 0a 2a 2a 20 65 71 75 61 6c 20 74 6f 2c  han.** equal to,
f130: 20 6f 72 20 67 72 65 61 74 65 72 20 74 68 61 6e   or greater than
f140: 20 74 68 65 20 50 32 20 76 65 63 74 6f 72 2c 20   the P2 vector, 
f150: 72 65 73 70 65 63 74 69 76 65 6c 79 2e 0a 2a 2f  respectively..*/
f160: 0a 63 61 73 65 20 4f 50 5f 4a 75 6d 70 3a 20 7b  .case OP_Jump: {
f170: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
f180: 6a 75 6d 70 20 2a 2f 0a 20 20 69 66 28 20 69 43  jump */.  if( iC
f190: 6f 6d 70 61 72 65 3c 30 20 29 7b 0a 20 20 20 20  ompare<0 ){.    
f1a0: 70 63 20 3d 20 70 4f 70 2d 3e 70 31 20 2d 20 31  pc = pOp->p1 - 1
f1b0: 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 69 43  ;.  }else if( iC
f1c0: 6f 6d 70 61 72 65 3d 3d 30 20 29 7b 0a 20 20 20  ompare==0 ){.   
f1d0: 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
f1e0: 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  1;.  }else{.    
f1f0: 70 63 20 3d 20 70 4f 70 2d 3e 70 33 20 2d 20 31  pc = pOp->p3 - 1
f200: 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
f210: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 6e 64  ../* Opcode: And
f220: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
f230: 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20 6c 6f 67  .** Take the log
f240: 69 63 61 6c 20 41 4e 44 20 6f 66 20 74 68 65 20  ical AND of the 
f250: 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74  values in regist
f260: 65 72 73 20 50 31 20 61 6e 64 20 50 32 20 61 6e  ers P1 and P2 an
f270: 64 0a 2a 2a 20 77 72 69 74 65 20 74 68 65 20 72  d.** write the r
f280: 65 73 75 6c 74 20 69 6e 74 6f 20 72 65 67 69 73  esult into regis
f290: 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66  ter P3..**.** If
f2a0: 20 65 69 74 68 65 72 20 50 31 20 6f 72 20 50 32   either P1 or P2
f2b0: 20 69 73 20 30 20 28 66 61 6c 73 65 29 20 74 68   is 0 (false) th
f2c0: 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  en the result is
f2d0: 20 30 20 65 76 65 6e 20 69 66 0a 2a 2a 20 74 68   0 even if.** th
f2e0: 65 20 6f 74 68 65 72 20 69 6e 70 75 74 20 69 73  e other input is
f2f0: 20 4e 55 4c 4c 2e 20 20 41 20 4e 55 4c 4c 20 61   NULL.  A NULL a
f300: 6e 64 20 74 72 75 65 20 6f 72 20 74 77 6f 20 4e  nd true or two N
f310: 55 4c 4c 73 20 67 69 76 65 0a 2a 2a 20 61 20 4e  ULLs give.** a N
f320: 55 4c 4c 20 6f 75 74 70 75 74 2e 0a 2a 2f 0a 2f  ULL output..*/./
f330: 2a 20 4f 70 63 6f 64 65 3a 20 4f 72 20 50 31 20  * Opcode: Or P1 
f340: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
f350: 54 61 6b 65 20 74 68 65 20 6c 6f 67 69 63 61 6c  Take the logical
f360: 20 4f 52 20 6f 66 20 74 68 65 20 76 61 6c 75 65   OR of the value
f370: 73 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  s in register P1
f380: 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20 73   and P2 and.** s
f390: 74 6f 72 65 20 74 68 65 20 61 6e 73 77 65 72 20  tore the answer 
f3a0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  in register P3..
f3b0: 2a 2a 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20  **.** If either 
f3c0: 50 31 20 6f 72 20 50 32 20 69 73 20 6e 6f 6e 7a  P1 or P2 is nonz
f3d0: 65 72 6f 20 28 74 72 75 65 29 20 74 68 65 6e 20  ero (true) then 
f3e0: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 31 20  the result is 1 
f3f0: 28 74 72 75 65 29 0a 2a 2a 20 65 76 65 6e 20 69  (true).** even i
f400: 66 20 74 68 65 20 6f 74 68 65 72 20 69 6e 70 75  f the other inpu
f410: 74 20 69 73 20 4e 55 4c 4c 2e 20 20 41 20 4e 55  t is NULL.  A NU
f420: 4c 4c 20 61 6e 64 20 66 61 6c 73 65 20 6f 72 20  LL and false or 
f430: 74 77 6f 20 4e 55 4c 4c 73 0a 2a 2a 20 67 69 76  two NULLs.** giv
f440: 65 20 61 20 4e 55 4c 4c 20 6f 75 74 70 75 74 2e  e a NULL output.
f450: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 6e 64 3a  .*/.case OP_And:
f460: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
f470: 20 73 61 6d 65 20 61 73 20 54 4b 5f 41 4e 44 2c   same as TK_AND,
f480: 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20   in1, in2, out3 
f490: 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 72 3a 20 7b  */.case OP_Or: {
f4a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
f4b0: 73 61 6d 65 20 61 73 20 54 4b 5f 4f 52 2c 20 69  same as TK_OR, i
f4c0: 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f  n1, in2, out3 */
f4d0: 0a 20 20 69 6e 74 20 76 31 3b 20 20 20 20 2f 2a  .  int v1;    /*
f4e0: 20 4c 65 66 74 20 6f 70 65 72 61 6e 64 3a 20 20   Left operand:  
f4f0: 30 3d 3d 46 41 4c 53 45 2c 20 31 3d 3d 54 52 55  0==FALSE, 1==TRU
f500: 45 2c 20 32 3d 3d 55 4e 4b 4e 4f 57 4e 20 6f 72  E, 2==UNKNOWN or
f510: 20 4e 55 4c 4c 20 2a 2f 0a 20 20 69 6e 74 20 76   NULL */.  int v
f520: 32 3b 20 20 20 20 2f 2a 20 52 69 67 68 74 20 6f  2;    /* Right o
f530: 70 65 72 61 6e 64 3a 20 30 3d 3d 46 41 4c 53 45  perand: 0==FALSE
f540: 2c 20 31 3d 3d 54 52 55 45 2c 20 32 3d 3d 55 4e  , 1==TRUE, 2==UN
f550: 4b 4e 4f 57 4e 20 6f 72 20 4e 55 4c 4c 20 2a 2f  KNOWN or NULL */
f560: 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ..  pIn1 = &aMem
f570: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28  [pOp->p1];.  if(
f580: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn1->flags & M
f590: 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 76  EM_Null ){.    v
f5a0: 31 20 3d 20 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a  1 = 2;.  }else{.
f5b0: 20 20 20 20 76 31 20 3d 20 73 71 6c 69 74 65 33      v1 = sqlite3
f5c0: 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e  VdbeIntValue(pIn
f5d0: 31 29 21 3d 30 3b 0a 20 20 7d 0a 20 20 70 49 6e  1)!=0;.  }.  pIn
f5e0: 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  2 = &aMem[pOp->p
f5f0: 32 5d 3b 0a 20 20 69 66 28 20 70 49 6e 32 2d 3e  2];.  if( pIn2->
f600: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
f610: 20 29 7b 0a 20 20 20 20 76 32 20 3d 20 32 3b 0a   ){.    v2 = 2;.
f620: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 76 32 20    }else{.    v2 
f630: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74  = sqlite3VdbeInt
f640: 56 61 6c 75 65 28 70 49 6e 32 29 21 3d 30 3b 0a  Value(pIn2)!=0;.
f650: 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f    }.  if( pOp->o
f660: 70 63 6f 64 65 3d 3d 4f 50 5f 41 6e 64 20 29 7b  pcode==OP_And ){
f670: 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73  .    static cons
f680: 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  t unsigned char 
f690: 61 6e 64 5f 6c 6f 67 69 63 5b 5d 20 3d 20 7b 20  and_logic[] = { 
f6a0: 30 2c 20 30 2c 20 30 2c 20 30 2c 20 31 2c 20 32  0, 0, 0, 0, 1, 2
f6b0: 2c 20 30 2c 20 32 2c 20 32 20 7d 3b 0a 20 20 20  , 0, 2, 2 };.   
f6c0: 20 76 31 20 3d 20 61 6e 64 5f 6c 6f 67 69 63 5b   v1 = and_logic[
f6d0: 76 31 2a 33 2b 76 32 5d 3b 0a 20 20 7d 65 6c 73  v1*3+v2];.  }els
f6e0: 65 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f  e{.    static co
f6f0: 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
f700: 72 20 6f 72 5f 6c 6f 67 69 63 5b 5d 20 3d 20 7b  r or_logic[] = {
f710: 20 30 2c 20 31 2c 20 32 2c 20 31 2c 20 31 2c 20   0, 1, 2, 1, 1, 
f720: 31 2c 20 32 2c 20 31 2c 20 32 20 7d 3b 0a 20 20  1, 2, 1, 2 };.  
f730: 20 20 76 31 20 3d 20 6f 72 5f 6c 6f 67 69 63 5b    v1 = or_logic[
f740: 76 31 2a 33 2b 76 32 5d 3b 0a 20 20 7d 0a 20 20  v1*3+v2];.  }.  
f750: 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
f760: 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20 76 31 3d  ->p3];.  if( v1=
f770: 3d 32 20 29 7b 0a 20 20 20 20 4d 65 6d 53 65 74  =2 ){.    MemSet
f780: 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d  TypeFlag(pOut, M
f790: 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 7d 65 6c 73  EM_Null);.  }els
f7a0: 65 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69  e{.    pOut->u.i
f7b0: 20 3d 20 76 31 3b 0a 20 20 20 20 4d 65 6d 53 65   = v1;.    MemSe
f7c0: 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20  tTypeFlag(pOut, 
f7d0: 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d 0a 20 20  MEM_Int);.  }.  
f7e0: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
f7f0: 6f 64 65 3a 20 4e 6f 74 20 50 31 20 50 32 20 2a  ode: Not P1 P2 *
f800: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72   * *.**.** Inter
f810: 70 72 65 74 20 74 68 65 20 76 61 6c 75 65 20 69  pret the value i
f820: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 61 73  n register P1 as
f830: 20 61 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65   a boolean value
f840: 2e 20 20 53 74 6f 72 65 20 74 68 65 0a 2a 2a 20  .  Store the.** 
f850: 62 6f 6f 6c 65 61 6e 20 63 6f 6d 70 6c 65 6d 65  boolean compleme
f860: 6e 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  nt in register P
f870: 32 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75 65  2.  If the value
f880: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
f890: 69 73 20 0a 2a 2a 20 4e 55 4c 4c 2c 20 74 68 65  is .** NULL, the
f8a0: 6e 20 61 20 4e 55 4c 4c 20 69 73 20 73 74 6f 72  n a NULL is stor
f8b0: 65 64 20 69 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73  ed in P2..*/.cas
f8c0: 65 20 4f 50 5f 4e 6f 74 3a 20 7b 20 20 20 20 20  e OP_Not: {     
f8d0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
f8e0: 6d 65 20 61 73 20 54 4b 5f 4e 4f 54 2c 20 69 6e  me as TK_NOT, in
f8f0: 31 2c 20 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e  1, out2 */.  pIn
f900: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
f910: 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d  1];.  pOut = &aM
f920: 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 69  em[pOp->p2];.  i
f930: 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  f( pIn1->flags &
f940: 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20   MEM_Null ){.   
f950: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
f960: 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20  etNull(pOut);.  
f970: 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74  }else{.    sqlit
f980: 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36  e3VdbeMemSetInt6
f990: 34 28 70 4f 75 74 2c 20 21 73 71 6c 69 74 65 33  4(pOut, !sqlite3
f9a0: 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e  VdbeIntValue(pIn
f9b0: 31 29 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  1));.  }.  break
f9c0: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
f9d0: 42 69 74 4e 6f 74 20 50 31 20 50 32 20 2a 20 2a  BitNot P1 P2 * *
f9e0: 20 2a 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72   *.**.** Interpr
f9f0: 65 74 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  et the content o
fa00: 66 20 72 65 67 69 73 74 65 72 20 50 31 20 61 73  f register P1 as
fa10: 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 53 74   an integer.  St
fa20: 6f 72 65 20 74 68 65 0a 2a 2a 20 6f 6e 65 73 2d  ore the.** ones-
fa30: 63 6f 6d 70 6c 65 6d 65 6e 74 20 6f 66 20 74 68  complement of th
fa40: 65 20 50 31 20 76 61 6c 75 65 20 69 6e 74 6f 20  e P1 value into 
fa50: 72 65 67 69 73 74 65 72 20 50 32 2e 20 20 49 66  register P2.  If
fa60: 20 50 31 20 68 6f 6c 64 73 0a 2a 2a 20 61 20 4e   P1 holds.** a N
fa70: 55 4c 4c 20 74 68 65 6e 20 73 74 6f 72 65 20 61  ULL then store a
fa80: 20 4e 55 4c 4c 20 69 6e 20 50 32 2e 0a 2a 2f 0a   NULL in P2..*/.
fa90: 63 61 73 65 20 4f 50 5f 42 69 74 4e 6f 74 3a 20  case OP_BitNot: 
faa0: 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  {             /*
fab0: 20 73 61 6d 65 20 61 73 20 54 4b 5f 42 49 54 4e   same as TK_BITN
fac0: 4f 54 2c 20 69 6e 31 2c 20 6f 75 74 32 20 2a 2f  OT, in1, out2 */
fad0: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
fae0: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74  pOp->p1];.  pOut
faf0: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
fb00: 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66  ];.  if( pIn1->f
fb10: 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20  lags & MEM_Null 
fb20: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
fb30: 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75  beMemSetNull(pOu
fb40: 74 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  t);.  }else{.   
fb50: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
fb60: 65 74 49 6e 74 36 34 28 70 4f 75 74 2c 20 7e 73  etInt64(pOut, ~s
fb70: 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c  qlite3VdbeIntVal
fb80: 75 65 28 70 49 6e 31 29 29 3b 0a 20 20 7d 0a 20  ue(pIn1));.  }. 
fb90: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
fba0: 63 6f 64 65 3a 20 4f 6e 63 65 20 50 31 20 50 32  code: Once P1 P2
fbb0: 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d   * * *.**.** Jum
fbc0: 70 20 74 6f 20 50 32 20 69 66 20 74 68 65 20 76  p to P2 if the v
fbd0: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
fbe0: 20 50 31 20 69 73 20 61 20 6e 6f 74 20 6e 75 6c   P1 is a not nul
fbf0: 6c 20 6f 72 20 7a 65 72 6f 2e 20 20 49 66 0a 2a  l or zero.  If.*
fc00: 2a 20 74 68 65 20 76 61 6c 75 65 20 69 73 20 4e  * the value is N
fc10: 55 4c 4c 20 6f 72 20 7a 65 72 6f 2c 20 66 61 6c  ULL or zero, fal
fc20: 6c 20 74 68 72 6f 75 67 68 20 61 6e 64 20 63 68  l through and ch
fc30: 61 6e 67 65 20 74 68 65 20 50 31 20 72 65 67 69  ange the P1 regi
fc40: 73 74 65 72 0a 2a 2a 20 74 6f 20 61 6e 20 69 6e  ster.** to an in
fc50: 74 65 67 65 72 20 31 2e 0a 2a 2a 0a 2a 2a 20 57  teger 1..**.** W
fc60: 68 65 6e 20 50 31 20 69 73 20 6e 6f 74 20 75 73  hen P1 is not us
fc70: 65 64 20 6f 74 68 65 72 77 69 73 65 20 69 6e 20  ed otherwise in 
fc80: 61 20 70 72 6f 67 72 61 6d 2c 20 74 68 69 73 20  a program, this 
fc90: 6f 70 63 6f 64 65 20 66 61 6c 6c 73 20 74 68 72  opcode falls thr
fca0: 6f 75 67 68 0a 2a 2a 20 6f 6e 63 65 20 61 6e 64  ough.** once and
fcb0: 20 6a 75 6d 70 73 20 6f 6e 20 61 6c 6c 20 73 75   jumps on all su
fcc0: 62 73 65 71 75 65 6e 74 20 69 6e 76 6f 63 61 74  bsequent invocat
fcd0: 69 6f 6e 73 2e 20 20 49 74 20 69 73 20 74 68 65  ions.  It is the
fce0: 20 65 71 75 69 76 61 6c 65 6e 74 0a 2a 2a 20 6f   equivalent.** o
fcf0: 66 20 22 4f 50 5f 49 66 20 50 31 20 50 32 22 2c  f "OP_If P1 P2",
fd00: 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 22 4f 50   followed by "OP
fd10: 5f 49 6e 74 65 67 65 72 20 31 20 50 31 22 2e 0a  _Integer 1 P1"..
fd20: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66  */./* Opcode: If
fd30: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
fd40: 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20 69  .** Jump to P2 i
fd50: 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  f the value in r
fd60: 65 67 69 73 74 65 72 20 50 31 20 69 73 20 74 72  egister P1 is tr
fd70: 75 65 2e 20 20 54 68 65 20 76 61 6c 75 65 0a 2a  ue.  The value.*
fd80: 2a 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64 20  * is considered 
fd90: 74 72 75 65 20 69 66 20 69 74 20 69 73 20 6e 75  true if it is nu
fda0: 6d 65 72 69 63 20 61 6e 64 20 6e 6f 6e 2d 7a 65  meric and non-ze
fdb0: 72 6f 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75  ro.  If the valu
fdc0: 65 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20 4e 55  e.** in P1 is NU
fdd0: 4c 4c 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65  LL then take the
fde0: 20 6a 75 6d 70 20 69 66 20 50 33 20 69 73 20 74   jump if P3 is t
fdf0: 72 75 65 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  rue..*/./* Opcod
fe00: 65 3a 20 49 66 4e 6f 74 20 50 31 20 50 32 20 50  e: IfNot P1 P2 P
fe10: 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70  3 * *.**.** Jump
fe20: 20 74 6f 20 50 32 20 69 66 20 74 68 65 20 76 61   to P2 if the va
fe30: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
fe40: 50 31 20 69 73 20 46 61 6c 73 65 2e 20 20 54 68  P1 is False.  Th
fe50: 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20 63 6f  e value.** is co
fe60: 6e 73 69 64 65 72 65 64 20 74 72 75 65 20 69 66  nsidered true if
fe70: 20 69 74 20 68 61 73 20 61 20 6e 75 6d 65 72 69   it has a numeri
fe80: 63 20 76 61 6c 75 65 20 6f 66 20 7a 65 72 6f 2e  c value of zero.
fe90: 20 20 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a    If the value.*
fea0: 2a 20 69 6e 20 50 31 20 69 73 20 4e 55 4c 4c 20  * in P1 is NULL 
feb0: 74 68 65 6e 20 74 61 6b 65 20 74 68 65 20 6a 75  then take the ju
fec0: 6d 70 20 69 66 20 50 33 20 69 73 20 74 72 75 65  mp if P3 is true
fed0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 6e 63  ..*/.case OP_Onc
fee0: 65 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e:              
fef0: 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f   /* jump, in1 */
ff00: 0a 63 61 73 65 20 4f 50 5f 49 66 3a 20 20 20 20  .case OP_If:    
ff10: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
ff20: 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 63 61 73  jump, in1 */.cas
ff30: 65 20 4f 50 5f 49 66 4e 6f 74 3a 20 7b 20 20 20  e OP_IfNot: {   
ff40: 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
ff50: 2c 20 69 6e 31 20 2a 2f 0a 20 20 69 6e 74 20 63  , in1 */.  int c
ff60: 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ;.  pIn1 = &aMem
ff70: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28  [pOp->p1];.  if(
ff80: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn1->flags & M
ff90: 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 63  EM_Null ){.    c
ffa0: 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 7d 65   = pOp->p3;.  }e
ffb0: 6c 73 65 7b 0a 23 69 66 64 65 66 20 53 51 4c 49  lse{.#ifdef SQLI
ffc0: 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47  TE_OMIT_FLOATING
ffd0: 5f 50 4f 49 4e 54 0a 20 20 20 20 63 20 3d 20 73  _POINT.    c = s
ffe0: 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c  qlite3VdbeIntVal
fff0: 75 65 28 70 49 6e 31 29 21 3d 30 3b 0a 23 65 6c  ue(pIn1)!=0;.#el
10000 73 65 0a 20 20 20 20 63 20 3d 20 73 71 6c 69 74  se.    c = sqlit
10010 65 33 56 64 62 65 52 65 61 6c 56 61 6c 75 65 28  e3VdbeRealValue(
10020 70 49 6e 31 29 21 3d 30 2e 30 3b 0a 23 65 6e 64  pIn1)!=0.0;.#end
10030 69 66 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  if.    if( pOp->
10040 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 66 4e 6f 74  opcode==OP_IfNot
10050 20 29 20 63 20 3d 20 21 63 3b 0a 20 20 7d 0a 20   ) c = !c;.  }. 
10060 20 69 66 28 20 63 20 29 7b 0a 20 20 20 20 70 63   if( c ){.    pc
10070 20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20   = pOp->p2-1;.  
10080 7d 65 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e 6f  }else if( pOp->o
10090 70 63 6f 64 65 3d 3d 4f 50 5f 4f 6e 63 65 20 29  pcode==OP_Once )
100a0 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 28 70  {.    assert( (p
100b0 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45  In1->flags & (ME
100c0 4d 5f 41 67 67 7c 4d 45 4d 5f 44 79 6e 7c 4d 45  M_Agg|MEM_Dyn|ME
100d0 4d 5f 52 6f 77 53 65 74 7c 4d 45 4d 5f 46 72 61  M_RowSet|MEM_Fra
100e0 6d 65 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 6d  me))==0 );.    m
100f0 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
10100 70 2c 20 70 49 6e 31 29 3b 0a 20 20 20 20 70 49  p, pIn1);.    pI
10110 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  n1->flags = MEM_
10120 49 6e 74 3b 0a 20 20 20 20 70 49 6e 31 2d 3e 75  Int;.    pIn1->u
10130 2e 69 20 3d 20 31 3b 0a 20 20 20 20 52 45 47 49  .i = 1;.    REGI
10140 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
10150 70 31 2c 20 70 49 6e 31 29 3b 0a 20 20 7d 0a 20  p1, pIn1);.  }. 
10160 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
10170 63 6f 64 65 3a 20 49 73 4e 75 6c 6c 20 50 31 20  code: IsNull P1 
10180 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a  P2 * * *.**.** J
10190 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68 65  ump to P2 if the
101a0 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
101b0 65 72 20 50 31 20 69 73 20 4e 55 4c 4c 2e 0a 2a  er P1 is NULL..*
101c0 2f 0a 63 61 73 65 20 4f 50 5f 49 73 4e 75 6c 6c  /.case OP_IsNull
101d0 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f  : {            /
101e0 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 49 53 4e  * same as TK_ISN
101f0 55 4c 4c 2c 20 6a 75 6d 70 2c 20 69 6e 31 20 2a  ULL, jump, in1 *
10200 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
10210 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28  [pOp->p1];.  if(
10220 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
10230 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 20 29 7b 0a  MEM_Null)!=0 ){.
10240 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
10250 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61   - 1;.  }.  brea
10260 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
10270 20 4e 6f 74 4e 75 6c 6c 20 50 31 20 50 32 20 2a   NotNull P1 P2 *
10280 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20   * *.**.** Jump 
10290 74 6f 20 50 32 20 69 66 20 74 68 65 20 76 61 6c  to P2 if the val
102a0 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
102b0 31 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2e 20 20  1 is not NULL.  
102c0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 4e  .*/.case OP_NotN
102d0 75 6c 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20  ull: {          
102e0 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
102f0 4e 4f 54 4e 55 4c 4c 2c 20 6a 75 6d 70 2c 20 69  NOTNULL, jump, i
10300 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26  n1 */.  pIn1 = &
10310 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
10320 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67   if( (pIn1->flag
10330 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30  s & MEM_Null)==0
10340 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70   ){.    pc = pOp
10350 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20  ->p2 - 1;.  }.  
10360 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
10370 6f 64 65 3a 20 43 6f 6c 75 6d 6e 20 50 31 20 50  ode: Column P1 P
10380 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a  2 P3 P4 P5.**.**
10390 20 49 6e 74 65 72 70 72 65 74 20 74 68 65 20 64   Interpret the d
103a0 61 74 61 20 74 68 61 74 20 63 75 72 73 6f 72 20  ata that cursor 
103b0 50 31 20 70 6f 69 6e 74 73 20 74 6f 20 61 73 20  P1 points to as 
103c0 61 20 73 74 72 75 63 74 75 72 65 20 62 75 69 6c  a structure buil
103d0 74 20 75 73 69 6e 67 0a 2a 2a 20 74 68 65 20 4d  t using.** the M
103e0 61 6b 65 52 65 63 6f 72 64 20 69 6e 73 74 72 75  akeRecord instru
103f0 63 74 69 6f 6e 2e 20 20 28 53 65 65 20 74 68 65  ction.  (See the
10400 20 4d 61 6b 65 52 65 63 6f 72 64 20 6f 70 63 6f   MakeRecord opco
10410 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61  de for additiona
10420 6c 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  l.** information
10430 20 61 62 6f 75 74 20 74 68 65 20 66 6f 72 6d 61   about the forma
10440 74 20 6f 66 20 74 68 65 20 64 61 74 61 2e 29 20  t of the data.) 
10450 20 45 78 74 72 61 63 74 20 74 68 65 20 50 32 2d   Extract the P2-
10460 74 68 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 66 72 6f  th column.** fro
10470 6d 20 74 68 69 73 20 72 65 63 6f 72 64 2e 20 20  m this record.  
10480 49 66 20 74 68 65 72 65 20 61 72 65 20 6c 65 73  If there are les
10490 73 20 74 68 61 74 20 28 50 32 2b 31 29 20 0a 2a  s that (P2+1) .*
104a0 2a 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20  * values in the 
104b0 72 65 63 6f 72 64 2c 20 65 78 74 72 61 63 74 20  record, extract 
104c0 61 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68  a NULL..**.** Th
104d0 65 20 76 61 6c 75 65 20 65 78 74 72 61 63 74 65  e value extracte
104e0 64 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72  d is stored in r
104f0 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a  egister P3..**.*
10500 2a 20 49 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20  * If the column 
10510 63 6f 6e 74 61 69 6e 73 20 66 65 77 65 72 20 74  contains fewer t
10520 68 61 6e 20 50 32 20 66 69 65 6c 64 73 2c 20 74  han P2 fields, t
10530 68 65 6e 20 65 78 74 72 61 63 74 20 61 20 4e 55  hen extract a NU
10540 4c 4c 2e 20 20 4f 72 2c 0a 2a 2a 20 69 66 20 74  LL.  Or,.** if t
10550 68 65 20 50 34 20 61 72 67 75 6d 65 6e 74 20 69  he P4 argument i
10560 73 20 61 20 50 34 5f 4d 45 4d 20 75 73 65 20 74  s a P4_MEM use t
10570 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
10580 50 34 20 61 72 67 75 6d 65 6e 74 20 61 73 0a 2a  P4 argument as.*
10590 2a 20 74 68 65 20 72 65 73 75 6c 74 2e 0a 2a 2a  * the result..**
105a0 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41  .** If the OPFLA
105b0 47 5f 43 4c 45 41 52 43 41 43 48 45 20 62 69 74  G_CLEARCACHE bit
105c0 20 69 73 20 73 65 74 20 6f 6e 20 50 35 20 61 6e   is set on P5 an
105d0 64 20 50 31 20 69 73 20 61 20 70 73 65 75 64 6f  d P1 is a pseudo
105e0 2d 74 61 62 6c 65 20 63 75 72 73 6f 72 2c 0a 2a  -table cursor,.*
105f0 2a 20 74 68 65 6e 20 74 68 65 20 63 61 63 68 65  * then the cache
10600 20 6f 66 20 74 68 65 20 63 75 72 73 6f 72 20 69   of the cursor i
10610 73 20 72 65 73 65 74 20 70 72 69 6f 72 20 74 6f  s reset prior to
10620 20 65 78 74 72 61 63 74 69 6e 67 20 74 68 65 20   extracting the 
10630 63 6f 6c 75 6d 6e 2e 0a 2a 2a 20 54 68 65 20 66  column..** The f
10640 69 72 73 74 20 4f 50 5f 43 6f 6c 75 6d 6e 20 61  irst OP_Column a
10650 67 61 69 6e 73 74 20 61 20 70 73 65 75 64 6f 2d  gainst a pseudo-
10660 74 61 62 6c 65 20 61 66 74 65 72 20 74 68 65 20  table after the 
10670 76 61 6c 75 65 20 6f 66 20 74 68 65 20 63 6f 6e  value of the con
10680 74 65 6e 74 0a 2a 2a 20 72 65 67 69 73 74 65 72  tent.** register
10690 20 68 61 73 20 63 68 61 6e 67 65 64 20 73 68 6f   has changed sho
106a0 75 6c 64 20 68 61 76 65 20 74 68 69 73 20 62 69  uld have this bi
106b0 74 20 73 65 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f  t set..*/.case O
106c0 50 5f 43 6f 6c 75 6d 6e 3a 20 7b 0a 20 20 75 33  P_Column: {.  u3
106d0 32 20 70 61 79 6c 6f 61 64 53 69 7a 65 3b 20 20  2 payloadSize;  
106e0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79   /* Number of by
106f0 74 65 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72  tes in the recor
10700 64 20 2a 2f 0a 20 20 69 36 34 20 70 61 79 6c 6f  d */.  i64 paylo
10710 61 64 53 69 7a 65 36 34 3b 20 2f 2a 20 4e 75 6d  adSize64; /* Num
10720 62 65 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20  ber of bytes in 
10730 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20  the record */.  
10740 69 6e 74 20 70 31 3b 20 20 20 20 20 20 20 20 20  int p1;         
10750 20 20 20 2f 2a 20 50 31 20 76 61 6c 75 65 20 6f     /* P1 value o
10760 66 20 74 68 65 20 6f 70 63 6f 64 65 20 2a 2f 0a  f the opcode */.
10770 20 20 69 6e 74 20 70 32 3b 20 20 20 20 20 20 20    int p2;       
10780 20 20 20 20 20 2f 2a 20 63 6f 6c 75 6d 6e 20 6e       /* column n
10790 75 6d 62 65 72 20 74 6f 20 72 65 74 72 69 65 76  umber to retriev
107a0 65 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f  e */.  VdbeCurso
107b0 72 20 2a 70 43 3b 20 20 20 20 2f 2a 20 54 68 65  r *pC;    /* The
107c0 20 56 44 42 45 20 63 75 72 73 6f 72 20 2a 2f 0a   VDBE cursor */.
107d0 20 20 63 68 61 72 20 2a 7a 52 65 63 3b 20 20 20    char *zRec;   
107e0 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20       /* Pointer 
107f0 74 6f 20 63 6f 6d 70 6c 65 74 65 20 72 65 63 6f  to complete reco
10800 72 64 2d 64 61 74 61 20 2a 2f 0a 20 20 42 74 43  rd-data */.  BtC
10810 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 20 20 20  ursor *pCrsr;   
10820 2f 2a 20 54 68 65 20 42 54 72 65 65 20 63 75 72  /* The BTree cur
10830 73 6f 72 20 2a 2f 0a 20 20 75 33 32 20 2a 61 54  sor */.  u32 *aT
10840 79 70 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 61  ype;        /* a
10850 54 79 70 65 5b 69 5d 20 68 6f 6c 64 73 20 74 68  Type[i] holds th
10860 65 20 6e 75 6d 65 72 69 63 20 74 79 70 65 20 6f  e numeric type o
10870 66 20 74 68 65 20 69 2d 74 68 20 63 6f 6c 75 6d  f the i-th colum
10880 6e 20 2a 2f 0a 20 20 75 33 32 20 2a 61 4f 66 66  n */.  u32 *aOff
10890 73 65 74 3b 20 20 20 20 20 20 2f 2a 20 61 4f 66  set;      /* aOf
108a0 66 73 65 74 5b 69 5d 20 69 73 20 6f 66 66 73 65  fset[i] is offse
108b0 74 20 74 6f 20 73 74 61 72 74 20 6f 66 20 64 61  t to start of da
108c0 74 61 20 66 6f 72 20 69 2d 74 68 20 63 6f 6c 75  ta for i-th colu
108d0 6d 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 46 69 65  mn */.  int nFie
108e0 6c 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 6e 75  ld;        /* nu
108f0 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20 69  mber of fields i
10900 6e 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a  n the record */.
10910 20 20 69 6e 74 20 6c 65 6e 3b 20 20 20 20 20 20    int len;      
10920 20 20 20 20 20 2f 2a 20 54 68 65 20 6c 65 6e 67       /* The leng
10930 74 68 20 6f 66 20 74 68 65 20 73 65 72 69 61 6c  th of the serial
10940 69 7a 65 64 20 64 61 74 61 20 66 6f 72 20 74 68  ized data for th
10950 65 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 69 6e  e column */.  in
10960 74 20 69 3b 20 20 20 20 20 20 20 20 20 20 20 20  t i;            
10970 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72   /* Loop counter
10980 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 44 61 74   */.  char *zDat
10990 61 3b 20 20 20 20 20 20 20 2f 2a 20 50 61 72 74  a;       /* Part
109a0 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20 62   of the record b
109b0 65 69 6e 67 20 64 65 63 6f 64 65 64 20 2a 2f 0a  eing decoded */.
109c0 20 20 4d 65 6d 20 2a 70 44 65 73 74 3b 20 20 20    Mem *pDest;   
109d0 20 20 20 20 20 2f 2a 20 57 68 65 72 65 20 74 6f       /* Where to
109e0 20 77 72 69 74 65 20 74 68 65 20 65 78 74 72 61   write the extra
109f0 63 74 65 64 20 76 61 6c 75 65 20 2a 2f 0a 20 20  cted value */.  
10a00 4d 65 6d 20 73 4d 65 6d 3b 20 20 20 20 20 20 20  Mem sMem;       
10a10 20 20 20 2f 2a 20 46 6f 72 20 73 74 6f 72 69 6e     /* For storin
10a20 67 20 74 68 65 20 72 65 63 6f 72 64 20 62 65 69  g the record bei
10a30 6e 67 20 64 65 63 6f 64 65 64 20 2a 2f 0a 20 20  ng decoded */.  
10a40 75 38 20 2a 7a 49 64 78 3b 20 20 20 20 20 20 20  u8 *zIdx;       
10a50 20 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 74 6f     /* Index into
10a60 20 68 65 61 64 65 72 20 2a 2f 0a 20 20 75 38 20   header */.  u8 
10a70 2a 7a 45 6e 64 48 64 72 3b 20 20 20 20 20 20 20  *zEndHdr;       
10a80 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 66 69  /* Pointer to fi
10a90 72 73 74 20 62 79 74 65 20 61 66 74 65 72 20 74  rst byte after t
10aa0 68 65 20 68 65 61 64 65 72 20 2a 2f 0a 20 20 75  he header */.  u
10ab0 33 32 20 6f 66 66 73 65 74 3b 20 20 20 20 20 20  32 offset;      
10ac0 20 20 2f 2a 20 4f 66 66 73 65 74 20 69 6e 74 6f    /* Offset into
10ad0 20 74 68 65 20 64 61 74 61 20 2a 2f 0a 20 20 75   the data */.  u
10ae0 33 32 20 73 7a 46 69 65 6c 64 3b 20 20 20 20 20  32 szField;     
10af0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62    /* Number of b
10b00 79 74 65 73 20 69 6e 20 74 68 65 20 63 6f 6e 74  ytes in the cont
10b10 65 6e 74 20 6f 66 20 61 20 66 69 65 6c 64 20 2a  ent of a field *
10b20 2f 0a 20 20 69 6e 74 20 73 7a 48 64 72 3b 20 20  /.  int szHdr;  
10b30 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f         /* Size o
10b40 66 20 74 68 65 20 68 65 61 64 65 72 20 73 69 7a  f the header siz
10b50 65 20 66 69 65 6c 64 20 61 74 20 73 74 61 72 74  e field at start
10b60 20 6f 66 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20   of record */.  
10b70 69 6e 74 20 61 76 61 69 6c 3b 20 20 20 20 20 20  int avail;      
10b80 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
10b90 62 79 74 65 73 20 6f 66 20 61 76 61 69 6c 61 62  bytes of availab
10ba0 6c 65 20 64 61 74 61 20 2a 2f 0a 20 20 75 33 32  le data */.  u32
10bb0 20 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   t;             
10bc0 2f 2a 20 41 20 74 79 70 65 20 63 6f 64 65 20 66  /* A type code f
10bd0 72 6f 6d 20 74 68 65 20 72 65 63 6f 72 64 20 68  rom the record h
10be0 65 61 64 65 72 20 2a 2f 0a 20 20 4d 65 6d 20 2a  eader */.  Mem *
10bf0 70 52 65 67 3b 20 20 20 20 20 20 20 20 20 2f 2a  pReg;         /*
10c00 20 50 73 65 75 64 6f 54 61 62 6c 65 20 69 6e 70   PseudoTable inp
10c10 75 74 20 72 65 67 69 73 74 65 72 20 2a 2f 0a 0a  ut register */..
10c20 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b  .  p1 = pOp->p1;
10c30 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b  .  p2 = pOp->p2;
10c40 0a 20 20 70 43 20 3d 20 30 3b 0a 20 20 6d 65 6d  .  pC = 0;.  mem
10c50 73 65 74 28 26 73 4d 65 6d 2c 20 30 2c 20 73 69  set(&sMem, 0, si
10c60 7a 65 6f 66 28 73 4d 65 6d 29 29 3b 0a 20 20 61  zeof(sMem));.  a
10c70 73 73 65 72 74 28 20 70 31 3c 70 2d 3e 6e 43 75  ssert( p1<p->nCu
10c80 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74  rsor );.  assert
10c90 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70  ( pOp->p3>0 && p
10ca0 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20  Op->p3<=p->nMem 
10cb0 29 3b 0a 20 20 70 44 65 73 74 20 3d 20 26 61 4d  );.  pDest = &aM
10cc0 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d  em[pOp->p3];.  m
10cd0 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
10ce0 70 2c 20 70 44 65 73 74 29 3b 0a 20 20 7a 52 65  p, pDest);.  zRe
10cf0 63 20 3d 20 30 3b 0a 0a 20 20 2f 2a 20 54 68 69  c = 0;..  /* Thi
10d00 73 20 62 6c 6f 63 6b 20 73 65 74 73 20 74 68 65  s block sets the
10d10 20 76 61 72 69 61 62 6c 65 20 70 61 79 6c 6f 61   variable payloa
10d20 64 53 69 7a 65 20 74 6f 20 62 65 20 74 68 65 20  dSize to be the 
10d30 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 0a  total number of.
10d40 20 20 2a 2a 20 62 79 74 65 73 20 69 6e 20 74 68    ** bytes in th
10d50 65 20 72 65 63 6f 72 64 2e 0a 20 20 2a 2a 0a 20  e record..  **. 
10d60 20 2a 2a 20 7a 52 65 63 20 69 73 20 73 65 74 20   ** zRec is set 
10d70 74 6f 20 62 65 20 74 68 65 20 63 6f 6d 70 6c 65  to be the comple
10d80 74 65 20 74 65 78 74 20 6f 66 20 74 68 65 20 72  te text of the r
10d90 65 63 6f 72 64 20 69 66 20 69 74 20 69 73 20 61  ecord if it is a
10da0 76 61 69 6c 61 62 6c 65 2e 0a 20 20 2a 2a 20 54  vailable..  ** T
10db0 68 65 20 63 6f 6d 70 6c 65 74 65 20 72 65 63 6f  he complete reco
10dc0 72 64 20 74 65 78 74 20 69 73 20 61 6c 77 61 79  rd text is alway
10dd0 73 20 61 76 61 69 6c 61 62 6c 65 20 66 6f 72 20  s available for 
10de0 70 73 65 75 64 6f 2d 74 61 62 6c 65 73 0a 20 20  pseudo-tables.  
10df0 2a 2a 20 49 66 20 74 68 65 20 72 65 63 6f 72 64  ** If the record
10e00 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 61 20   is stored in a 
10e10 63 75 72 73 6f 72 2c 20 74 68 65 20 63 6f 6d 70  cursor, the comp
10e20 6c 65 74 65 20 72 65 63 6f 72 64 20 74 65 78 74  lete record text
10e30 0a 20 20 2a 2a 20 6d 69 67 68 74 20 62 65 20 61  .  ** might be a
10e40 76 61 69 6c 61 62 6c 65 20 69 6e 20 74 68 65 20  vailable in the 
10e50 20 70 43 2d 3e 61 52 6f 77 20 63 61 63 68 65 2e   pC->aRow cache.
10e60 20 20 4f 72 20 69 74 20 6d 69 67 68 74 20 6e 6f    Or it might no
10e70 74 20 62 65 2e 0a 20 20 2a 2a 20 49 66 20 74 68  t be..  ** If th
10e80 65 20 64 61 74 61 20 69 73 20 75 6e 61 76 61 69  e data is unavai
10e90 6c 61 62 6c 65 2c 20 20 7a 52 65 63 20 69 73 20  lable,  zRec is 
10ea0 73 65 74 20 74 6f 20 4e 55 4c 4c 2e 0a 20 20 2a  set to NULL..  *
10eb0 2a 0a 20 20 2a 2a 20 57 65 20 61 6c 73 6f 20 63  *.  ** We also c
10ec0 6f 6d 70 75 74 65 20 74 68 65 20 6e 75 6d 62 65  ompute the numbe
10ed0 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
10ee0 74 68 65 20 72 65 63 6f 72 64 2e 20 20 46 6f 72  the record.  For
10ef0 20 63 75 72 73 6f 72 73 2c 0a 20 20 2a 2a 20 74   cursors,.  ** t
10f00 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  he number of col
10f10 75 6d 6e 73 20 69 73 20 73 74 6f 72 65 64 20 69  umns is stored i
10f20 6e 20 74 68 65 20 56 64 62 65 43 75 72 73 6f 72  n the VdbeCursor
10f30 2e 6e 46 69 65 6c 64 20 65 6c 65 6d 65 6e 74 2e  .nField element.
10f40 0a 20 20 2a 2f 0a 20 20 70 43 20 3d 20 70 2d 3e  .  */.  pC = p->
10f50 61 70 43 73 72 5b 70 31 5d 3b 0a 20 20 61 73 73  apCsr[p1];.  ass
10f60 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 23 69  ert( pC!=0 );.#i
10f70 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
10f80 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20  T_VIRTUALTABLE. 
10f90 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 56 74   assert( pC->pVt
10fa0 61 62 43 75 72 73 6f 72 3d 3d 30 20 29 3b 0a 23  abCursor==0 );.#
10fb0 65 6e 64 69 66 0a 20 20 70 43 72 73 72 20 3d 20  endif.  pCrsr = 
10fc0 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 69  pC->pCursor;.  i
10fd0 66 28 20 70 43 72 73 72 21 3d 30 20 29 7b 0a 20  f( pCrsr!=0 ){. 
10fe0 20 20 20 2f 2a 20 54 68 65 20 72 65 63 6f 72 64     /* The record
10ff0 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 61 20   is stored in a 
11000 42 2d 54 72 65 65 20 2a 2f 0a 20 20 20 20 72 63  B-Tree */.    rc
11010 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 75   = sqlite3VdbeCu
11020 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b 0a  rsorMoveto(pC);.
11030 20 20 20 20 69 66 28 20 72 63 20 29 20 67 6f 74      if( rc ) got
11040 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
11050 72 72 6f 72 3b 0a 20 20 20 20 69 66 28 20 70 43  rror;.    if( pC
11060 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20  ->nullRow ){.   
11070 20 20 20 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d     payloadSize =
11080 20 30 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66   0;.    }else if
11090 28 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75  ( pC->cacheStatu
110a0 73 3d 3d 70 2d 3e 63 61 63 68 65 43 74 72 20 29  s==p->cacheCtr )
110b0 7b 0a 20 20 20 20 20 20 70 61 79 6c 6f 61 64 53  {.      payloadS
110c0 69 7a 65 20 3d 20 70 43 2d 3e 70 61 79 6c 6f 61  ize = pC->payloa
110d0 64 53 69 7a 65 3b 0a 20 20 20 20 20 20 7a 52 65  dSize;.      zRe
110e0 63 20 3d 20 28 63 68 61 72 2a 29 70 43 2d 3e 61  c = (char*)pC->a
110f0 52 6f 77 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69  Row;.    }else i
11100 66 28 20 70 43 2d 3e 69 73 49 6e 64 65 78 20 29  f( pC->isIndex )
11110 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  {.      assert( 
11120 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73  sqlite3BtreeCurs
11130 6f 72 49 73 56 61 6c 69 64 28 70 43 72 73 72 29  orIsValid(pCrsr)
11140 20 29 3b 0a 20 20 20 20 20 20 56 56 41 5f 4f 4e   );.      VVA_ON
11150 4c 59 28 72 63 20 3d 29 20 73 71 6c 69 74 65 33  LY(rc =) sqlite3
11160 42 74 72 65 65 4b 65 79 53 69 7a 65 28 70 43 72  BtreeKeySize(pCr
11170 73 72 2c 20 26 70 61 79 6c 6f 61 64 53 69 7a 65  sr, &payloadSize
11180 36 34 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  64);.      asser
11190 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  t( rc==SQLITE_OK
111a0 20 29 3b 20 20 20 2f 2a 20 54 72 75 65 20 62 65   );   /* True be
111b0 63 61 75 73 65 20 6f 66 20 43 75 72 73 6f 72 4d  cause of CursorM
111c0 6f 76 65 74 6f 28 29 20 63 61 6c 6c 20 61 62 6f  oveto() call abo
111d0 76 65 20 2a 2f 0a 20 20 20 20 20 20 2f 2a 20 73  ve */.      /* s
111e0 71 6c 69 74 65 33 42 74 72 65 65 50 61 72 73 65  qlite3BtreeParse
111f0 43 65 6c 6c 50 74 72 28 29 20 75 73 65 73 20 67  CellPtr() uses g
11200 65 74 56 61 72 69 6e 74 33 32 28 29 20 74 6f 20  etVarint32() to 
11210 65 78 74 72 61 63 74 20 74 68 65 0a 20 20 20 20  extract the.    
11220 20 20 2a 2a 20 70 61 79 6c 6f 61 64 20 73 69 7a    ** payload siz
11230 65 2c 20 73 6f 20 69 74 20 69 73 20 69 6d 70 6f  e, so it is impo
11240 73 73 69 62 6c 65 20 66 6f 72 20 70 61 79 6c 6f  ssible for paylo
11250 61 64 53 69 7a 65 36 34 20 74 6f 20 62 65 0a 20  adSize64 to be. 
11260 20 20 20 20 20 2a 2a 20 6c 61 72 67 65 72 20 74       ** larger t
11270 68 61 6e 20 33 32 20 62 69 74 73 2e 20 2a 2f 0a  han 32 bits. */.
11280 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28 70        assert( (p
11290 61 79 6c 6f 61 64 53 69 7a 65 36 34 20 26 20 53  ayloadSize64 & S
112a0 51 4c 49 54 45 5f 4d 41 58 5f 55 33 32 29 3d 3d  QLITE_MAX_U32)==
112b0 28 75 36 34 29 70 61 79 6c 6f 61 64 53 69 7a 65  (u64)payloadSize
112c0 36 34 20 29 3b 0a 20 20 20 20 20 20 70 61 79 6c  64 );.      payl
112d0 6f 61 64 53 69 7a 65 20 3d 20 28 75 33 32 29 70  oadSize = (u32)p
112e0 61 79 6c 6f 61 64 53 69 7a 65 36 34 3b 0a 20 20  ayloadSize64;.  
112f0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 61    }else{.      a
11300 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 42 74  ssert( sqlite3Bt
11310 72 65 65 43 75 72 73 6f 72 49 73 56 61 6c 69 64  reeCursorIsValid
11320 28 70 43 72 73 72 29 20 29 3b 0a 20 20 20 20 20  (pCrsr) );.     
11330 20 56 56 41 5f 4f 4e 4c 59 28 72 63 20 3d 29 20   VVA_ONLY(rc =) 
11340 73 71 6c 69 74 65 33 42 74 72 65 65 44 61 74 61  sqlite3BtreeData
11350 53 69 7a 65 28 70 43 72 73 72 2c 20 26 70 61 79  Size(pCrsr, &pay
11360 6c 6f 61 64 53 69 7a 65 29 3b 0a 20 20 20 20 20  loadSize);.     
11370 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c   assert( rc==SQL
11380 49 54 45 5f 4f 4b 20 29 3b 20 20 20 2f 2a 20 44  ITE_OK );   /* D
11390 61 74 61 53 69 7a 65 28 29 20 63 61 6e 6e 6f 74  ataSize() cannot
113a0 20 66 61 69 6c 20 2a 2f 0a 20 20 20 20 7d 0a 20   fail */.    }. 
113b0 20 7d 65 6c 73 65 20 69 66 28 20 41 4c 57 41 59   }else if( ALWAY
113c0 53 28 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c  S(pC->pseudoTabl
113d0 65 52 65 67 3e 30 29 20 29 7b 0a 20 20 20 20 70  eReg>0) ){.    p
113e0 52 65 67 20 3d 20 26 61 4d 65 6d 5b 70 43 2d 3e  Reg = &aMem[pC->
113f0 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67 5d 3b  pseudoTableReg];
11400 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 52 65  .    assert( pRe
11410 67 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42  g->flags & MEM_B
11420 6c 6f 62 20 29 3b 0a 20 20 20 20 61 73 73 65 72  lob );.    asser
11430 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 52  t( memIsValid(pR
11440 65 67 29 20 29 3b 0a 20 20 20 20 70 61 79 6c 6f  eg) );.    paylo
11450 61 64 53 69 7a 65 20 3d 20 70 52 65 67 2d 3e 6e  adSize = pReg->n
11460 3b 0a 20 20 20 20 7a 52 65 63 20 3d 20 70 52 65  ;.    zRec = pRe
11470 67 2d 3e 7a 3b 0a 20 20 20 20 70 43 2d 3e 63 61  g->z;.    pC->ca
11480 63 68 65 53 74 61 74 75 73 20 3d 20 28 70 4f 70  cheStatus = (pOp
11490 2d 3e 70 35 26 4f 50 46 4c 41 47 5f 43 4c 45 41  ->p5&OPFLAG_CLEA
114a0 52 43 41 43 48 45 29 20 3f 20 43 41 43 48 45 5f  RCACHE) ? CACHE_
114b0 53 54 41 4c 45 20 3a 20 70 2d 3e 63 61 63 68 65  STALE : p->cache
114c0 43 74 72 3b 0a 20 20 20 20 61 73 73 65 72 74 28  Ctr;.    assert(
114d0 20 70 61 79 6c 6f 61 64 53 69 7a 65 3d 3d 30 20   payloadSize==0 
114e0 7c 7c 20 7a 52 65 63 21 3d 30 20 29 3b 0a 20 20  || zRec!=0 );.  
114f0 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 43 6f  }else{.    /* Co
11500 6e 73 69 64 65 72 20 74 68 65 20 72 6f 77 20 74  nsider the row t
11510 6f 20 62 65 20 4e 55 4c 4c 20 2a 2f 0a 20 20 20  o be NULL */.   
11520 20 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20 30   payloadSize = 0
11530 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20 70  ;.  }..  /* If p
11540 61 79 6c 6f 61 64 53 69 7a 65 20 69 73 20 30 2c  ayloadSize is 0,
11550 20 74 68 65 6e 20 6a 75 73 74 20 73 74 6f 72 65   then just store
11560 20 61 20 4e 55 4c 4c 2e 20 20 54 68 69 73 20 63   a NULL.  This c
11570 61 6e 20 68 61 70 70 65 6e 20 62 65 63 61 75 73  an happen becaus
11580 65 20 6f 66 0a 20 20 2a 2a 20 6e 75 6c 6c 52 6f  e of.  ** nullRo
11590 77 20 6f 72 20 62 65 63 61 75 73 65 20 6f 66 20  w or because of 
115a0 61 20 63 6f 72 72 75 70 74 20 64 61 74 61 62 61  a corrupt databa
115b0 73 65 2e 20 2a 2f 0a 20 20 69 66 28 20 70 61 79  se. */.  if( pay
115c0 6c 6f 61 64 53 69 7a 65 3d 3d 30 20 29 7b 0a 20  loadSize==0 ){. 
115d0 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61     MemSetTypeFla
115e0 67 28 70 44 65 73 74 2c 20 4d 45 4d 5f 4e 75 6c  g(pDest, MEM_Nul
115f0 6c 29 3b 0a 20 20 20 20 67 6f 74 6f 20 6f 70 5f  l);.    goto op_
11600 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20 7d 0a  column_out;.  }.
11610 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 61 4c    assert( db->aL
11620 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49  imit[SQLITE_LIMI
11630 54 5f 4c 45 4e 47 54 48 5d 3e 3d 30 20 29 3b 0a  T_LENGTH]>=0 );.
11640 20 20 69 66 28 20 70 61 79 6c 6f 61 64 53 69 7a    if( payloadSiz
11650 65 20 3e 20 28 75 33 32 29 64 62 2d 3e 61 4c 69  e > (u32)db->aLi
11660 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54  mit[SQLITE_LIMIT
11670 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20  _LENGTH] ){.    
11680 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20  goto too_big;.  
11690 7d 0a 0a 20 20 6e 46 69 65 6c 64 20 3d 20 70 43  }..  nField = pC
116a0 2d 3e 6e 46 69 65 6c 64 3b 0a 20 20 61 73 73 65  ->nField;.  asse
116b0 72 74 28 20 70 32 3c 6e 46 69 65 6c 64 20 29 3b  rt( p2<nField );
116c0 0a 0a 20 20 2f 2a 20 52 65 61 64 20 61 6e 64 20  ..  /* Read and 
116d0 70 61 72 73 65 20 74 68 65 20 74 61 62 6c 65 20  parse the table 
116e0 68 65 61 64 65 72 2e 20 20 53 74 6f 72 65 20 74  header.  Store t
116f0 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74 68  he results of th
11700 65 20 70 61 72 73 65 0a 20 20 2a 2a 20 69 6e 74  e parse.  ** int
11710 6f 20 74 68 65 20 72 65 63 6f 72 64 20 68 65 61  o the record hea
11720 64 65 72 20 63 61 63 68 65 20 66 69 65 6c 64 73  der cache fields
11730 20 6f 66 20 74 68 65 20 63 75 72 73 6f 72 2e 0a   of the cursor..
11740 20 20 2a 2f 0a 20 20 61 54 79 70 65 20 3d 20 70    */.  aType = p
11750 43 2d 3e 61 54 79 70 65 3b 0a 20 20 69 66 28 20  C->aType;.  if( 
11760 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 3d  pC->cacheStatus=
11770 3d 70 2d 3e 63 61 63 68 65 43 74 72 20 29 7b 0a  =p->cacheCtr ){.
11780 20 20 20 20 61 4f 66 66 73 65 74 20 3d 20 70 43      aOffset = pC
11790 2d 3e 61 4f 66 66 73 65 74 3b 0a 20 20 7d 65 6c  ->aOffset;.  }el
117a0 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 61  se{.    assert(a
117b0 54 79 70 65 29 3b 0a 20 20 20 20 61 76 61 69 6c  Type);.    avail
117c0 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e 61 4f   = 0;.    pC->aO
117d0 66 66 73 65 74 20 3d 20 61 4f 66 66 73 65 74 20  ffset = aOffset 
117e0 3d 20 26 61 54 79 70 65 5b 6e 46 69 65 6c 64 5d  = &aType[nField]
117f0 3b 0a 20 20 20 20 70 43 2d 3e 70 61 79 6c 6f 61  ;.    pC->payloa
11800 64 53 69 7a 65 20 3d 20 70 61 79 6c 6f 61 64 53  dSize = payloadS
11810 69 7a 65 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63  ize;.    pC->cac
11820 68 65 53 74 61 74 75 73 20 3d 20 70 2d 3e 63 61  heStatus = p->ca
11830 63 68 65 43 74 72 3b 0a 0a 20 20 20 20 2f 2a 20  cheCtr;..    /* 
11840 46 69 67 75 72 65 20 6f 75 74 20 68 6f 77 20 6d  Figure out how m
11850 61 6e 79 20 62 79 74 65 73 20 61 72 65 20 69 6e  any bytes are in
11860 20 74 68 65 20 68 65 61 64 65 72 20 2a 2f 0a 20   the header */. 
11870 20 20 20 69 66 28 20 7a 52 65 63 20 29 7b 0a 20     if( zRec ){. 
11880 20 20 20 20 20 7a 44 61 74 61 20 3d 20 7a 52 65       zData = zRe
11890 63 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  c;.    }else{.  
118a0 20 20 20 20 69 66 28 20 70 43 2d 3e 69 73 49 6e      if( pC->isIn
118b0 64 65 78 20 29 7b 0a 20 20 20 20 20 20 20 20 7a  dex ){.        z
118c0 44 61 74 61 20 3d 20 28 63 68 61 72 2a 29 73 71  Data = (char*)sq
118d0 6c 69 74 65 33 42 74 72 65 65 4b 65 79 46 65 74  lite3BtreeKeyFet
118e0 63 68 28 70 43 72 73 72 2c 20 26 61 76 61 69 6c  ch(pCrsr, &avail
118f0 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  );.      }else{.
11900 20 20 20 20 20 20 20 20 7a 44 61 74 61 20 3d 20          zData = 
11910 28 63 68 61 72 2a 29 73 71 6c 69 74 65 33 42 74  (char*)sqlite3Bt
11920 72 65 65 44 61 74 61 46 65 74 63 68 28 70 43 72  reeDataFetch(pCr
11930 73 72 2c 20 26 61 76 61 69 6c 29 3b 0a 20 20 20  sr, &avail);.   
11940 20 20 20 7d 0a 20 20 20 20 20 20 2f 2a 20 49 66     }.      /* If
11950 20 4b 65 79 46 65 74 63 68 28 29 2f 44 61 74 61   KeyFetch()/Data
11960 46 65 74 63 68 28 29 20 6d 61 6e 61 67 65 64 20  Fetch() managed 
11970 74 6f 20 67 65 74 20 74 68 65 20 65 6e 74 69 72  to get the entir
11980 65 20 70 61 79 6c 6f 61 64 2c 0a 20 20 20 20 20  e payload,.     
11990 20 2a 2a 20 73 61 76 65 20 74 68 65 20 70 61 79   ** save the pay
119a0 6c 6f 61 64 20 69 6e 20 74 68 65 20 70 43 2d 3e  load in the pC->
119b0 61 52 6f 77 20 63 61 63 68 65 2e 20 20 54 68 61  aRow cache.  Tha
119c0 74 20 77 69 6c 6c 20 73 61 76 65 20 75 73 20 66  t will save us f
119d0 72 6f 6d 0a 20 20 20 20 20 20 2a 2a 20 68 61 76  rom.      ** hav
119e0 69 6e 67 20 74 6f 20 6d 61 6b 65 20 61 64 64 69  ing to make addi
119f0 74 69 6f 6e 61 6c 20 63 61 6c 6c 73 20 74 6f 20  tional calls to 
11a00 66 65 74 63 68 20 74 68 65 20 63 6f 6e 74 65 6e  fetch the conten
11a10 74 20 70 6f 72 74 69 6f 6e 20 6f 66 0a 20 20 20  t portion of.   
11a20 20 20 20 2a 2a 20 74 68 65 20 72 65 63 6f 72 64     ** the record
11a30 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
11a40 20 61 73 73 65 72 74 28 20 61 76 61 69 6c 3e 3d   assert( avail>=
11a50 30 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70  0 );.      if( p
11a60 61 79 6c 6f 61 64 53 69 7a 65 20 3c 3d 20 28 75  ayloadSize <= (u
11a70 33 32 29 61 76 61 69 6c 20 29 7b 0a 20 20 20 20  32)avail ){.    
11a80 20 20 20 20 7a 52 65 63 20 3d 20 7a 44 61 74 61      zRec = zData
11a90 3b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 61 52  ;.        pC->aR
11aa0 6f 77 20 3d 20 28 75 38 2a 29 7a 44 61 74 61 3b  ow = (u8*)zData;
11ab0 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
11ac0 20 20 20 20 20 20 70 43 2d 3e 61 52 6f 77 20 3d        pC->aRow =
11ad0 20 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20   0;.      }.    
11ae0 7d 0a 20 20 20 20 2f 2a 20 54 68 65 20 66 6f 6c  }.    /* The fol
11af0 6c 6f 77 69 6e 67 20 61 73 73 65 72 74 20 69 73  lowing assert is
11b00 20 74 72 75 65 20 69 6e 20 61 6c 6c 20 63 61 73   true in all cas
11b10 65 73 20 61 63 63 65 70 74 20 77 68 65 6e 0a 20  es accept when. 
11b20 20 20 20 2a 2a 20 74 68 65 20 64 61 74 61 62 61     ** the databa
11b30 73 65 20 66 69 6c 65 20 68 61 73 20 62 65 65 6e  se file has been
11b40 20 63 6f 72 72 75 70 74 65 64 20 65 78 74 65 72   corrupted exter
11b50 6e 61 6c 6c 79 2e 0a 20 20 20 20 2a 2a 20 20 20  nally..    **   
11b60 20 61 73 73 65 72 74 28 20 7a 52 65 63 21 3d 30   assert( zRec!=0
11b70 20 7c 7c 20 61 76 61 69 6c 3e 3d 70 61 79 6c 6f   || avail>=paylo
11b80 61 64 53 69 7a 65 20 7c 7c 20 61 76 61 69 6c 3e  adSize || avail>
11b90 3d 39 20 29 3b 20 2a 2f 0a 20 20 20 20 73 7a 48  =9 ); */.    szH
11ba0 64 72 20 3d 20 67 65 74 56 61 72 69 6e 74 33 32  dr = getVarint32
11bb0 28 28 75 38 2a 29 7a 44 61 74 61 2c 20 6f 66 66  ((u8*)zData, off
11bc0 73 65 74 29 3b 0a 0a 20 20 20 20 2f 2a 20 4d 61  set);..    /* Ma
11bd0 6b 65 20 73 75 72 65 20 61 20 63 6f 72 72 75 70  ke sure a corrup
11be0 74 20 64 61 74 61 62 61 73 65 20 68 61 73 20 6e  t database has n
11bf0 6f 74 20 67 69 76 65 6e 20 75 73 20 61 6e 20 6f  ot given us an o
11c00 76 65 72 73 69 7a 65 20 68 65 61 64 65 72 2e 0a  versize header..
11c10 20 20 20 20 2a 2a 20 44 6f 20 74 68 69 73 20 6e      ** Do this n
11c20 6f 77 20 74 6f 20 61 76 6f 69 64 20 61 6e 20 6f  ow to avoid an o
11c30 76 65 72 73 69 7a 65 20 6d 65 6d 6f 72 79 20 61  versize memory a
11c40 6c 6c 6f 63 61 74 69 6f 6e 2e 0a 20 20 20 20 2a  llocation..    *
11c50 2a 0a 20 20 20 20 2a 2a 20 54 79 70 65 20 65 6e  *.    ** Type en
11c60 74 72 69 65 73 20 63 61 6e 20 62 65 20 62 65 74  tries can be bet
11c70 77 65 65 6e 20 31 20 61 6e 64 20 35 20 62 79 74  ween 1 and 5 byt
11c80 65 73 20 65 61 63 68 2e 20 20 42 75 74 20 34 20  es each.  But 4 
11c90 61 6e 64 20 35 20 62 79 74 65 0a 20 20 20 20 2a  and 5 byte.    *
11ca0 2a 20 74 79 70 65 73 20 75 73 65 20 73 6f 20 6d  * types use so m
11cb0 75 63 68 20 64 61 74 61 20 73 70 61 63 65 20 74  uch data space t
11cc0 68 61 74 20 74 68 65 72 65 20 63 61 6e 20 6f 6e  hat there can on
11cd0 6c 79 20 62 65 20 34 30 39 36 20 61 6e 64 20 33  ly be 4096 and 3
11ce0 32 20 6f 66 0a 20 20 20 20 2a 2a 20 74 68 65 6d  2 of.    ** them
11cf0 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20  , respectively. 
11d00 20 53 6f 20 74 68 65 20 6d 61 78 69 6d 75 6d 20   So the maximum 
11d10 68 65 61 64 65 72 20 6c 65 6e 67 74 68 20 72 65  header length re
11d20 73 75 6c 74 73 20 66 72 6f 6d 20 61 0a 20 20 20  sults from a.   
11d30 20 2a 2a 20 33 2d 62 79 74 65 20 74 79 70 65 20   ** 3-byte type 
11d40 66 6f 72 20 65 61 63 68 20 6f 66 20 74 68 65 20  for each of the 
11d50 6d 61 78 69 6d 75 6d 20 6f 66 20 33 32 37 36 38  maximum of 32768
11d60 20 63 6f 6c 75 6d 6e 73 20 70 6c 75 73 20 74 68   columns plus th
11d70 72 65 65 0a 20 20 20 20 2a 2a 20 65 78 74 72 61  ree.    ** extra
11d80 20 62 79 74 65 73 20 66 6f 72 20 74 68 65 20 68   bytes for the h
11d90 65 61 64 65 72 20 6c 65 6e 67 74 68 20 69 74 73  eader length its
11da0 65 6c 66 2e 20 20 33 32 37 36 38 2a 33 20 2b 20  elf.  32768*3 + 
11db0 33 20 3d 20 39 38 33 30 37 2e 0a 20 20 20 20 2a  3 = 98307..    *
11dc0 2f 0a 20 20 20 20 69 66 28 20 6f 66 66 73 65 74  /.    if( offset
11dd0 20 3e 20 39 38 33 30 37 20 29 7b 0a 20 20 20 20   > 98307 ){.    
11de0 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f    rc = SQLITE_CO
11df0 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20  RRUPT_BKPT;.    
11e00 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e    goto op_column
11e10 5f 6f 75 74 3b 0a 20 20 20 20 7d 0a 0a 20 20 20  _out;.    }..   
11e20 20 2f 2a 20 43 6f 6d 70 75 74 65 20 69 6e 20 6c   /* Compute in l
11e30 65 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  en the number of
11e40 20 62 79 74 65 73 20 6f 66 20 64 61 74 61 20 77   bytes of data w
11e50 65 20 6e 65 65 64 20 74 6f 20 72 65 61 64 20 69  e need to read i
11e60 6e 20 6f 72 64 65 72 0a 20 20 20 20 2a 2a 20 74  n order.    ** t
11e70 6f 20 67 65 74 20 6e 46 69 65 6c 64 20 74 79 70  o get nField typ
11e80 65 20 76 61 6c 75 65 73 2e 20 20 6f 66 66 73 65  e values.  offse
11e90 74 20 69 73 20 61 6e 20 75 70 70 65 72 20 62 6f  t is an upper bo
11ea0 75 6e 64 20 6f 6e 20 74 68 69 73 2e 20 20 42 75  und on this.  Bu
11eb0 74 0a 20 20 20 20 2a 2a 20 6e 46 69 65 6c 64 20  t.    ** nField 
11ec0 6d 69 67 68 74 20 62 65 20 73 69 67 6e 69 66 69  might be signifi
11ed0 63 61 6e 74 6c 79 20 6c 65 73 73 20 74 68 61 6e  cantly less than
11ee0 20 74 68 65 20 74 72 75 65 20 6e 75 6d 62 65 72   the true number
11ef0 20 6f 66 20 63 6f 6c 75 6d 6e 73 0a 20 20 20 20   of columns.    
11f00 2a 2a 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2c  ** in the table,
11f10 20 61 6e 64 20 69 6e 20 74 68 61 74 20 63 61 73   and in that cas
11f20 65 2c 20 35 2a 6e 46 69 65 6c 64 2b 33 20 6d 69  e, 5*nField+3 mi
11f30 67 68 74 20 62 65 20 73 6d 61 6c 6c 65 72 20 74  ght be smaller t
11f40 68 61 6e 20 6f 66 66 73 65 74 2e 0a 20 20 20 20  han offset..    
11f50 2a 2a 20 57 65 20 77 61 6e 74 20 74 6f 20 6d 69  ** We want to mi
11f60 6e 69 6d 69 7a 65 20 6c 65 6e 20 69 6e 20 6f 72  nimize len in or
11f70 64 65 72 20 74 6f 20 6c 69 6d 69 74 20 74 68 65  der to limit the
11f80 20 73 69 7a 65 20 6f 66 20 74 68 65 20 6d 65 6d   size of the mem
11f90 6f 72 79 0a 20 20 20 20 2a 2a 20 61 6c 6c 6f 63  ory.    ** alloc
11fa0 61 74 69 6f 6e 2c 20 65 73 70 65 63 69 61 6c 6c  ation, especiall
11fb0 79 20 69 66 20 61 20 63 6f 72 72 75 70 74 20 64  y if a corrupt d
11fc0 61 74 61 62 61 73 65 20 66 69 6c 65 20 68 61 73  atabase file has
11fd0 20 63 61 75 73 65 64 20 6f 66 66 73 65 74 0a 20   caused offset. 
11fe0 20 20 20 2a 2a 20 74 6f 20 62 65 20 6f 76 65 72     ** to be over
11ff0 73 69 7a 65 64 2e 20 4f 66 66 73 65 74 20 69 73  sized. Offset is
12000 20 6c 69 6d 69 74 65 64 20 74 6f 20 39 38 33 30   limited to 9830
12010 37 20 61 62 6f 76 65 2e 20 20 42 75 74 20 39 38  7 above.  But 98
12020 33 30 37 20 6d 69 67 68 74 0a 20 20 20 20 2a 2a  307 might.    **
12030 20 73 74 69 6c 6c 20 65 78 63 65 65 64 20 52 6f   still exceed Ro
12040 62 73 6f 6e 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  bson memory allo
12050 63 61 74 69 6f 6e 20 6c 69 6d 69 74 73 20 6f 6e  cation limits on
12060 20 73 6f 6d 65 20 63 6f 6e 66 69 67 75 72 61 74   some configurat
12070 69 6f 6e 73 2e 0a 20 20 20 20 2a 2a 20 4f 6e 20  ions..    ** On 
12080 73 79 73 74 65 6d 73 20 74 68 61 74 20 63 61 6e  systems that can
12090 6e 6f 74 20 74 6f 6c 65 72 61 74 65 20 6c 61 72  not tolerate lar
120a0 67 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  ge memory alloca
120b0 74 69 6f 6e 73 2c 20 6e 46 69 65 6c 64 2a 35 2b  tions, nField*5+
120c0 33 0a 20 20 20 20 2a 2a 20 77 69 6c 6c 20 6c 69  3.    ** will li
120d0 6b 65 6c 79 20 62 65 20 6d 75 63 68 20 73 6d 61  kely be much sma
120e0 6c 6c 65 72 20 73 69 6e 63 65 20 6e 46 69 65 6c  ller since nFiel
120f0 64 20 77 69 6c 6c 20 6c 69 6b 65 6c 79 20 62 65  d will likely be
12100 20 6c 65 73 73 20 74 68 61 6e 0a 20 20 20 20 2a   less than.    *
12110 2a 20 32 30 20 6f 72 20 73 6f 2e 20 20 54 68 69  * 20 or so.  Thi
12120 73 20 69 6e 73 75 72 65 73 20 74 68 61 74 20 52  s insures that R
12130 6f 62 73 6f 6e 20 6d 65 6d 6f 72 79 20 61 6c 6c  obson memory all
12140 6f 63 61 74 69 6f 6e 20 6c 69 6d 69 74 73 20 61  ocation limits a
12150 72 65 0a 20 20 20 20 2a 2a 20 6e 6f 74 20 65 78  re.    ** not ex
12160 63 65 65 64 65 64 20 65 76 65 6e 20 66 6f 72 20  ceeded even for 
12170 63 6f 72 72 75 70 74 20 64 61 74 61 62 61 73 65  corrupt database
12180 20 66 69 6c 65 73 2e 0a 20 20 20 20 2a 2f 0a 20   files..    */. 
12190 20 20 20 6c 65 6e 20 3d 20 6e 46 69 65 6c 64 2a     len = nField*
121a0 35 20 2b 20 33 3b 0a 20 20 20 20 69 66 28 20 6c  5 + 3;.    if( l
121b0 65 6e 20 3e 20 28 69 6e 74 29 6f 66 66 73 65 74  en > (int)offset
121c0 20 29 20 6c 65 6e 20 3d 20 28 69 6e 74 29 6f 66   ) len = (int)of
121d0 66 73 65 74 3b 0a 0a 20 20 20 20 2f 2a 20 54 68  fset;..    /* Th
121e0 65 20 4b 65 79 46 65 74 63 68 28 29 20 6f 72 20  e KeyFetch() or 
121f0 44 61 74 61 46 65 74 63 68 28 29 20 61 62 6f 76  DataFetch() abov
12200 65 20 61 72 65 20 66 61 73 74 20 61 6e 64 20 77  e are fast and w
12210 69 6c 6c 20 67 65 74 20 74 68 65 20 65 6e 74 69  ill get the enti
12220 72 65 0a 20 20 20 20 2a 2a 20 72 65 63 6f 72 64  re.    ** record
12230 20 68 65 61 64 65 72 20 69 6e 20 6d 6f 73 74 20   header in most 
12240 63 61 73 65 73 2e 20 20 42 75 74 20 74 68 65 79  cases.  But they
12250 20 77 69 6c 6c 20 66 61 69 6c 20 74 6f 20 67 65   will fail to ge
12260 74 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 0a 20  t the complete. 
12270 20 20 20 2a 2a 20 72 65 63 6f 72 64 20 68 65 61     ** record hea
12280 64 65 72 20 69 66 20 74 68 65 20 72 65 63 6f 72  der if the recor
12290 64 20 68 65 61 64 65 72 20 64 6f 65 73 20 6e 6f  d header does no
122a0 74 20 66 69 74 20 6f 6e 20 61 20 73 69 6e 67 6c  t fit on a singl
122b0 65 20 70 61 67 65 0a 20 20 20 20 2a 2a 20 69 6e  e page.    ** in
122c0 20 74 68 65 20 42 2d 54 72 65 65 2e 20 20 57 68   the B-Tree.  Wh
122d0 65 6e 20 74 68 61 74 20 68 61 70 70 65 6e 73 2c  en that happens,
122e0 20 75 73 65 20 73 71 6c 69 74 65 33 56 64 62 65   use sqlite3Vdbe
122f0 4d 65 6d 46 72 6f 6d 42 74 72 65 65 28 29 20 74  MemFromBtree() t
12300 6f 0a 20 20 20 20 2a 2a 20 61 63 71 75 69 72 65  o.    ** acquire
12310 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 68 65   the complete he
12320 61 64 65 72 20 74 65 78 74 2e 0a 20 20 20 20 2a  ader text..    *
12330 2f 0a 20 20 20 20 69 66 28 20 21 7a 52 65 63 20  /.    if( !zRec 
12340 26 26 20 61 76 61 69 6c 3c 6c 65 6e 20 29 7b 0a  && avail<len ){.
12350 20 20 20 20 20 20 73 4d 65 6d 2e 66 6c 61 67 73        sMem.flags
12360 20 3d 20 30 3b 0a 20 20 20 20 20 20 73 4d 65 6d   = 0;.      sMem
12370 2e 64 62 20 3d 20 30 3b 0a 20 20 20 20 20 20 72  .db = 0;.      r
12380 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d  c = sqlite3VdbeM
12390 65 6d 46 72 6f 6d 42 74 72 65 65 28 70 43 72 73  emFromBtree(pCrs
123a0 72 2c 20 30 2c 20 6c 65 6e 2c 20 70 43 2d 3e 69  r, 0, len, pC->i
123b0 73 49 6e 64 65 78 2c 20 26 73 4d 65 6d 29 3b 0a  sIndex, &sMem);.
123c0 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
123d0 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
123e0 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d     goto op_colum
123f0 6e 5f 6f 75 74 3b 0a 20 20 20 20 20 20 7d 0a 20  n_out;.      }. 
12400 20 20 20 20 20 7a 44 61 74 61 20 3d 20 73 4d 65       zData = sMe
12410 6d 2e 7a 3b 0a 20 20 20 20 7d 0a 20 20 20 20 7a  m.z;.    }.    z
12420 45 6e 64 48 64 72 20 3d 20 28 75 38 20 2a 29 26  EndHdr = (u8 *)&
12430 7a 44 61 74 61 5b 6c 65 6e 5d 3b 0a 20 20 20 20  zData[len];.    
12440 7a 49 64 78 20 3d 20 28 75 38 20 2a 29 26 7a 44  zIdx = (u8 *)&zD
12450 61 74 61 5b 73 7a 48 64 72 5d 3b 0a 0a 20 20 20  ata[szHdr];..   
12460 20 2f 2a 20 53 63 61 6e 20 74 68 65 20 68 65 61   /* Scan the hea
12470 64 65 72 20 61 6e 64 20 75 73 65 20 69 74 20 74  der and use it t
12480 6f 20 66 69 6c 6c 20 69 6e 20 74 68 65 20 61 54  o fill in the aT
12490 79 70 65 5b 5d 20 61 6e 64 20 61 4f 66 66 73 65  ype[] and aOffse
124a0 74 5b 5d 0a 20 20 20 20 2a 2a 20 61 72 72 61 79  t[].    ** array
124b0 73 2e 20 20 61 54 79 70 65 5b 69 5d 20 77 69 6c  s.  aType[i] wil
124c0 6c 20 63 6f 6e 74 61 69 6e 20 74 68 65 20 74 79  l contain the ty
124d0 70 65 20 69 6e 74 65 67 65 72 20 66 6f 72 20 74  pe integer for t
124e0 68 65 20 69 2d 74 68 0a 20 20 20 20 2a 2a 20 63  he i-th.    ** c
124f0 6f 6c 75 6d 6e 20 61 6e 64 20 61 4f 66 66 73 65  olumn and aOffse
12500 74 5b 69 5d 20 77 69 6c 6c 20 63 6f 6e 74 61 69  t[i] will contai
12510 6e 20 74 68 65 20 6f 66 66 73 65 74 20 66 72 6f  n the offset fro
12520 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 0a  m the beginning.
12530 20 20 20 20 2a 2a 20 6f 66 20 74 68 65 20 72 65      ** of the re
12540 63 6f 72 64 20 74 6f 20 74 68 65 20 73 74 61 72  cord to the star
12550 74 20 6f 66 20 74 68 65 20 64 61 74 61 20 66 6f  t of the data fo
12560 72 20 74 68 65 20 69 2d 74 68 20 63 6f 6c 75 6d  r the i-th colum
12570 6e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 66 6f 72  n.    */.    for
12580 28 69 3d 30 3b 20 69 3c 6e 46 69 65 6c 64 3b 20  (i=0; i<nField; 
12590 69 2b 2b 29 7b 0a 20 20 20 20 20 20 69 66 28 20  i++){.      if( 
125a0 7a 49 64 78 3c 7a 45 6e 64 48 64 72 20 29 7b 0a  zIdx<zEndHdr ){.
125b0 20 20 20 20 20 20 20 20 61 4f 66 66 73 65 74 5b          aOffset[
125c0 69 5d 20 3d 20 6f 66 66 73 65 74 3b 0a 20 20 20  i] = offset;.   
125d0 20 20 20 20 20 69 66 28 20 7a 49 64 78 5b 30 5d       if( zIdx[0]
125e0 3c 30 78 38 30 20 29 7b 0a 20 20 20 20 20 20 20  <0x80 ){.       
125f0 20 20 20 74 20 3d 20 7a 49 64 78 5b 30 5d 3b 0a     t = zIdx[0];.
12600 20 20 20 20 20 20 20 20 20 20 7a 49 64 78 2b 2b            zIdx++
12610 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b  ;.        }else{
12620 0a 20 20 20 20 20 20 20 20 20 20 7a 49 64 78 20  .          zIdx 
12630 2b 3d 20 73 71 6c 69 74 65 33 47 65 74 56 61 72  += sqlite3GetVar
12640 69 6e 74 33 32 28 7a 49 64 78 2c 20 26 74 29 3b  int32(zIdx, &t);
12650 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
12660 20 20 20 61 54 79 70 65 5b 69 5d 20 3d 20 74 3b     aType[i] = t;
12670 0a 20 20 20 20 20 20 20 20 73 7a 46 69 65 6c 64  .        szField
12680 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 65   = sqlite3VdbeSe
12690 72 69 61 6c 54 79 70 65 4c 65 6e 28 74 29 3b 0a  rialTypeLen(t);.
126a0 20 20 20 20 20 20 20 20 6f 66 66 73 65 74 20 2b          offset +
126b0 3d 20 73 7a 46 69 65 6c 64 3b 0a 20 20 20 20 20  = szField;.     
126c0 20 20 20 69 66 28 20 6f 66 66 73 65 74 3c 73 7a     if( offset<sz
126d0 46 69 65 6c 64 20 29 7b 20 20 2f 2a 20 54 72 75  Field ){  /* Tru
126e0 65 20 69 66 20 6f 66 66 73 65 74 20 6f 76 65 72  e if offset over
126f0 66 6c 6f 77 73 20 2a 2f 0a 20 20 20 20 20 20 20  flows */.       
12700 20 20 20 7a 49 64 78 20 3d 20 26 7a 45 6e 64 48     zIdx = &zEndH
12710 64 72 5b 31 5d 3b 20 20 2f 2a 20 46 6f 72 63 65  dr[1];  /* Force
12720 73 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54  s SQLITE_CORRUPT
12730 20 72 65 74 75 72 6e 20 62 65 6c 6f 77 20 2a 2f   return below */
12740 0a 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b  .          break
12750 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
12760 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
12770 20 2f 2a 20 49 66 20 69 20 69 73 20 6c 65 73 73   /* If i is less
12780 20 74 68 61 74 20 6e 46 69 65 6c 64 2c 20 74 68   that nField, th
12790 65 6e 20 74 68 65 72 65 20 61 72 65 20 6c 65 73  en there are les
127a0 73 20 66 69 65 6c 64 73 20 69 6e 20 74 68 69 73  s fields in this
127b0 0a 20 20 20 20 20 20 20 20 2a 2a 20 72 65 63 6f  .        ** reco
127c0 72 64 20 74 68 61 6e 20 53 65 74 4e 75 6d 43 6f  rd than SetNumCo
127d0 6c 75 6d 6e 73 20 69 6e 64 69 63 61 74 65 64 20  lumns indicated 
127e0 74 68 65 72 65 20 61 72 65 20 63 6f 6c 75 6d 6e  there are column
127f0 73 20 69 6e 20 74 68 65 0a 20 20 20 20 20 20 20  s in the.       
12800 20 2a 2a 20 74 61 62 6c 65 2e 20 53 65 74 20 74   ** table. Set t
12810 68 65 20 6f 66 66 73 65 74 20 66 6f 72 20 61 6e  he offset for an
12820 79 20 65 78 74 72 61 20 63 6f 6c 75 6d 6e 73 20  y extra columns 
12830 6e 6f 74 20 70 72 65 73 65 6e 74 20 69 6e 0a 20  not present in. 
12840 20 20 20 20 20 20 20 2a 2a 20 74 68 65 20 72 65         ** the re
12850 63 6f 72 64 20 74 6f 20 30 2e 20 54 68 69 73 20  cord to 0. This 
12860 74 65 6c 6c 73 20 63 6f 64 65 20 62 65 6c 6f 77  tells code below
12870 20 74 6f 20 73 74 6f 72 65 20 61 20 4e 55 4c 4c   to store a NULL
12880 0a 20 20 20 20 20 20 20 20 2a 2a 20 69 6e 73 74  .        ** inst
12890 65 61 64 20 6f 66 20 64 65 73 65 72 69 61 6c 69  ead of deseriali
128a0 7a 69 6e 67 20 61 20 76 61 6c 75 65 20 66 72 6f  zing a value fro
128b0 6d 20 74 68 65 20 72 65 63 6f 72 64 2e 0a 20 20  m the record..  
128c0 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 20        */.       
128d0 20 61 4f 66 66 73 65 74 5b 69 5d 20 3d 20 30 3b   aOffset[i] = 0;
128e0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
128f0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
12900 6d 52 65 6c 65 61 73 65 28 26 73 4d 65 6d 29 3b  mRelease(&sMem);
12910 0a 20 20 20 20 73 4d 65 6d 2e 66 6c 61 67 73 20  .    sMem.flags 
12920 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 0a 20 20 20  = MEM_Null;..   
12930 20 2f 2a 20 49 66 20 77 65 20 68 61 76 65 20 72   /* If we have r
12940 65 61 64 20 6d 6f 72 65 20 68 65 61 64 65 72 20  ead more header 
12950 64 61 74 61 20 74 68 61 6e 20 77 61 73 20 63 6f  data than was co
12960 6e 74 61 69 6e 65 64 20 69 6e 20 74 68 65 20 68  ntained in the h
12970 65 61 64 65 72 2c 0a 20 20 20 20 2a 2a 20 6f 72  eader,.    ** or
12980 20 69 66 20 74 68 65 20 65 6e 64 20 6f 66 20 74   if the end of t
12990 68 65 20 6c 61 73 74 20 66 69 65 6c 64 20 61 70  he last field ap
129a0 70 65 61 72 73 20 74 6f 20 62 65 20 70 61 73 74  pears to be past
129b0 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 0a   the end of the.
129c0 20 20 20 20 2a 2a 20 72 65 63 6f 72 64 2c 20 6f      ** record, o
129d0 72 20 69 66 20 74 68 65 20 65 6e 64 20 6f 66 20  r if the end of 
129e0 74 68 65 20 6c 61 73 74 20 66 69 65 6c 64 20 61  the last field a
129f0 70 70 65 61 72 73 20 74 6f 20 62 65 20 62 65 66  ppears to be bef
12a00 6f 72 65 20 74 68 65 20 65 6e 64 0a 20 20 20 20  ore the end.    
12a10 2a 2a 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64  ** of the record
12a20 20 28 77 68 65 6e 20 61 6c 6c 20 66 69 65 6c 64   (when all field
12a30 73 20 70 72 65 73 65 6e 74 29 2c 20 74 68 65 6e  s present), then
12a40 20 77 65 20 6d 75 73 74 20 62 65 20 64 65 61 6c   we must be deal
12a50 69 6e 67 20 0a 20 20 20 20 2a 2a 20 77 69 74 68  ing .    ** with
12a60 20 61 20 63 6f 72 72 75 70 74 20 64 61 74 61 62   a corrupt datab
12a70 61 73 65 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  ase..    */.    
12a80 69 66 28 20 28 7a 49 64 78 20 3e 20 7a 45 6e 64  if( (zIdx > zEnd
12a90 48 64 72 29 20 7c 7c 20 28 6f 66 66 73 65 74 20  Hdr) || (offset 
12aa0 3e 20 70 61 79 6c 6f 61 64 53 69 7a 65 29 0a 20  > payloadSize). 
12ab0 20 20 20 20 20 20 20 20 7c 7c 20 28 7a 49 64 78          || (zIdx
12ac0 3d 3d 7a 45 6e 64 48 64 72 20 26 26 20 6f 66 66  ==zEndHdr && off
12ad0 73 65 74 21 3d 70 61 79 6c 6f 61 64 53 69 7a 65  set!=payloadSize
12ae0 29 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20  ) ){.      rc = 
12af0 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 42  SQLITE_CORRUPT_B
12b00 4b 50 54 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20  KPT;.      goto 
12b10 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20  op_column_out;. 
12b20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 2f 2a 20 47     }.  }..  /* G
12b30 65 74 20 74 68 65 20 63 6f 6c 75 6d 6e 20 69 6e  et the column in
12b40 66 6f 72 6d 61 74 69 6f 6e 2e 20 49 66 20 61 4f  formation. If aO
12b50 66 66 73 65 74 5b 70 32 5d 20 69 73 20 6e 6f 6e  ffset[p2] is non
12b60 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 0a 20 20 2a  -zero, then .  *
12b70 2a 20 64 65 73 65 72 69 61 6c 69 7a 65 20 74 68  * deserialize th
12b80 65 20 76 61 6c 75 65 20 66 72 6f 6d 20 74 68 65  e value from the
12b90 20 72 65 63 6f 72 64 2e 20 49 66 20 61 4f 66 66   record. If aOff
12ba0 73 65 74 5b 70 32 5d 20 69 73 20 7a 65 72 6f 2c  set[p2] is zero,
12bb0 0a 20 20 2a 2a 20 74 68 65 6e 20 74 68 65 72 65  .  ** then there
12bc0 20 61 72 65 20 6e 6f 74 20 65 6e 6f 75 67 68 20   are not enough 
12bd0 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20 72 65  fields in the re
12be0 63 6f 72 64 20 74 6f 20 73 61 74 69 73 66 79 20  cord to satisfy 
12bf0 74 68 65 0a 20 20 2a 2a 20 72 65 71 75 65 73 74  the.  ** request
12c00 2e 20 20 49 6e 20 74 68 69 73 20 63 61 73 65 2c  .  In this case,
12c10 20 73 65 74 20 74 68 65 20 76 61 6c 75 65 20 4e   set the value N
12c20 55 4c 4c 20 6f 72 20 74 6f 20 50 34 20 69 66 20  ULL or to P4 if 
12c30 50 34 20 69 73 0a 20 20 2a 2a 20 61 20 70 6f 69  P4 is.  ** a poi
12c40 6e 74 65 72 20 74 6f 20 61 20 4d 65 6d 20 6f 62  nter to a Mem ob
12c50 6a 65 63 74 2e 0a 20 20 2a 2f 0a 20 20 69 66 28  ject..  */.  if(
12c60 20 61 4f 66 66 73 65 74 5b 70 32 5d 20 29 7b 0a   aOffset[p2] ){.
12c70 20 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d      assert( rc==
12c80 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 20 20 20  SQLITE_OK );.   
12c90 20 69 66 28 20 7a 52 65 63 20 29 7b 0a 20 20 20   if( zRec ){.   
12ca0 20 20 20 4d 65 6d 52 65 6c 65 61 73 65 45 78 74     MemReleaseExt
12cb0 28 70 44 65 73 74 29 3b 0a 20 20 20 20 20 20 73  (pDest);.      s
12cc0 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c  qlite3VdbeSerial
12cd0 47 65 74 28 28 75 38 20 2a 29 26 7a 52 65 63 5b  Get((u8 *)&zRec[
12ce0 61 4f 66 66 73 65 74 5b 70 32 5d 5d 2c 20 61 54  aOffset[p2]], aT
12cf0 79 70 65 5b 70 32 5d 2c 20 70 44 65 73 74 29 3b  ype[p2], pDest);
12d00 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
12d10 20 20 6c 65 6e 20 3d 20 73 71 6c 69 74 65 33 56    len = sqlite3V
12d20 64 62 65 53 65 72 69 61 6c 54 79 70 65 4c 65 6e  dbeSerialTypeLen
12d30 28 61 54 79 70 65 5b 70 32 5d 29 3b 0a 20 20 20  (aType[p2]);.   
12d40 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
12d50 6d 4d 6f 76 65 28 26 73 4d 65 6d 2c 20 70 44 65  mMove(&sMem, pDe
12d60 73 74 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  st);.      rc = 
12d70 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 72  sqlite3VdbeMemFr
12d80 6f 6d 42 74 72 65 65 28 70 43 72 73 72 2c 20 61  omBtree(pCrsr, a
12d90 4f 66 66 73 65 74 5b 70 32 5d 2c 20 6c 65 6e 2c  Offset[p2], len,
12da0 20 70 43 2d 3e 69 73 49 6e 64 65 78 2c 20 26 73   pC->isIndex, &s
12db0 4d 65 6d 29 3b 0a 20 20 20 20 20 20 69 66 28 20  Mem);.      if( 
12dc0 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc!=SQLITE_OK ){
12dd0 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6f 70  .        goto op
12de0 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20  _column_out;.   
12df0 20 20 20 7d 0a 20 20 20 20 20 20 7a 44 61 74 61     }.      zData
12e00 20 3d 20 73 4d 65 6d 2e 7a 3b 0a 20 20 20 20 20   = sMem.z;.     
12e10 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69   sqlite3VdbeSeri
12e20 61 6c 47 65 74 28 28 75 38 2a 29 7a 44 61 74 61  alGet((u8*)zData
12e30 2c 20 61 54 79 70 65 5b 70 32 5d 2c 20 70 44 65  , aType[p2], pDe
12e40 73 74 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70  st);.    }.    p
12e50 44 65 73 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f  Dest->enc = enco
12e60 64 69 6e 67 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  ding;.  }else{. 
12e70 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79     if( pOp->p4ty
12e80 70 65 3d 3d 50 34 5f 4d 45 4d 20 29 7b 0a 20 20  pe==P4_MEM ){.  
12e90 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
12ea0 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 44  emShallowCopy(pD
12eb0 65 73 74 2c 20 70 4f 70 2d 3e 70 34 2e 70 4d 65  est, pOp->p4.pMe
12ec0 6d 2c 20 4d 45 4d 5f 53 74 61 74 69 63 29 3b 0a  m, MEM_Static);.
12ed0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
12ee0 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
12ef0 70 44 65 73 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29  pDest, MEM_Null)
12f00 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 2f  ;.    }.  }..  /
12f10 2a 20 49 66 20 77 65 20 64 79 6e 61 6d 69 63 61  * If we dynamica
12f20 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 73 70  lly allocated sp
12f30 61 63 65 20 74 6f 20 68 6f 6c 64 20 74 68 65 20  ace to hold the 
12f40 64 61 74 61 20 28 69 6e 20 74 68 65 0a 20 20 2a  data (in the.  *
12f50 2a 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  * sqlite3VdbeMem
12f60 46 72 6f 6d 42 74 72 65 65 28 29 20 63 61 6c 6c  FromBtree() call
12f70 20 61 62 6f 76 65 29 20 74 68 65 6e 20 74 72 61   above) then tra
12f80 6e 73 66 65 72 20 63 6f 6e 74 72 6f 6c 20 6f 66  nsfer control of
12f90 20 74 68 61 74 0a 20 20 2a 2a 20 64 79 6e 61 6d   that.  ** dynam
12fa0 69 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64  ically allocated
12fb0 20 73 70 61 63 65 20 6f 76 65 72 20 74 6f 20 74   space over to t
12fc0 68 65 20 70 44 65 73 74 20 73 74 72 75 63 74 75  he pDest structu
12fd0 72 65 2e 0a 20 20 2a 2a 20 54 68 69 73 20 70 72  re..  ** This pr
12fe0 65 76 65 6e 74 73 20 61 20 6d 65 6d 6f 72 79 20  events a memory 
12ff0 63 6f 70 79 2e 0a 20 20 2a 2f 0a 20 20 69 66 28  copy..  */.  if(
13000 20 73 4d 65 6d 2e 7a 4d 61 6c 6c 6f 63 20 29 7b   sMem.zMalloc ){
13010 0a 20 20 20 20 61 73 73 65 72 74 28 20 73 4d 65  .    assert( sMe
13020 6d 2e 7a 3d 3d 73 4d 65 6d 2e 7a 4d 61 6c 6c 6f  m.z==sMem.zMallo
13030 63 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  c );.    assert(
13040 20 21 28 70 44 65 73 74 2d 3e 66 6c 61 67 73 20   !(pDest->flags 
13050 26 20 4d 45 4d 5f 44 79 6e 29 20 29 3b 0a 20 20  & MEM_Dyn) );.  
13060 20 20 61 73 73 65 72 74 28 20 21 28 70 44 65 73    assert( !(pDes
13070 74 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  t->flags & (MEM_
13080 42 6c 6f 62 7c 4d 45 4d 5f 53 74 72 29 29 20 7c  Blob|MEM_Str)) |
13090 7c 20 70 44 65 73 74 2d 3e 7a 3d 3d 73 4d 65 6d  | pDest->z==sMem
130a0 2e 7a 20 29 3b 0a 20 20 20 20 70 44 65 73 74 2d  .z );.    pDest-
130b0 3e 66 6c 61 67 73 20 26 3d 20 7e 28 4d 45 4d 5f  >flags &= ~(MEM_
130c0 45 70 68 65 6d 7c 4d 45 4d 5f 53 74 61 74 69 63  Ephem|MEM_Static
130d0 29 3b 0a 20 20 20 20 70 44 65 73 74 2d 3e 66 6c  );.    pDest->fl
130e0 61 67 73 20 7c 3d 20 4d 45 4d 5f 54 65 72 6d 3b  ags |= MEM_Term;
130f0 0a 20 20 20 20 70 44 65 73 74 2d 3e 7a 20 3d 20  .    pDest->z = 
13100 73 4d 65 6d 2e 7a 3b 0a 20 20 20 20 70 44 65 73  sMem.z;.    pDes
13110 74 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d 20 73 4d 65  t->zMalloc = sMe
13120 6d 2e 7a 4d 61 6c 6c 6f 63 3b 0a 20 20 7d 0a 0a  m.zMalloc;.  }..
13130 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
13140 62 65 4d 65 6d 4d 61 6b 65 57 72 69 74 65 61 62  beMemMakeWriteab
13150 6c 65 28 70 44 65 73 74 29 3b 0a 0a 6f 70 5f 63  le(pDest);..op_c
13160 6f 6c 75 6d 6e 5f 6f 75 74 3a 0a 20 20 55 50 44  olumn_out:.  UPD
13170 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45  ATE_MAX_BLOBSIZE
13180 28 70 44 65 73 74 29 3b 0a 20 20 52 45 47 49 53  (pDest);.  REGIS
13190 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
131a0 33 2c 20 70 44 65 73 74 29 3b 0a 20 20 62 72 65  3, pDest);.  bre
131b0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
131c0 3a 20 41 66 66 69 6e 69 74 79 20 50 31 20 50 32  : Affinity P1 P2
131d0 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 41 70   * P4 *.**.** Ap
131e0 70 6c 79 20 61 66 66 69 6e 69 74 69 65 73 20 74  ply affinities t
131f0 6f 20 61 20 72 61 6e 67 65 20 6f 66 20 50 32 20  o a range of P2 
13200 72 65 67 69 73 74 65 72 73 20 73 74 61 72 74 69  registers starti
13210 6e 67 20 77 69 74 68 20 50 31 2e 0a 2a 2a 0a 2a  ng with P1..**.*
13220 2a 20 50 34 20 69 73 20 61 20 73 74 72 69 6e 67  * P4 is a string
13230 20 74 68 61 74 20 69 73 20 50 32 20 63 68 61 72   that is P2 char
13240 61 63 74 65 72 73 20 6c 6f 6e 67 2e 20 54 68 65  acters long. The
13250 20 6e 74 68 20 63 68 61 72 61 63 74 65 72 20 6f   nth character o
13260 66 20 74 68 65 0a 2a 2a 20 73 74 72 69 6e 67 20  f the.** string 
13270 69 6e 64 69 63 61 74 65 73 20 74 68 65 20 63 6f  indicates the co
13280 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 20 74 68  lumn affinity th
13290 61 74 20 73 68 6f 75 6c 64 20 62 65 20 75 73 65  at should be use
132a0 64 20 66 6f 72 20 74 68 65 20 6e 74 68 0a 2a 2a  d for the nth.**
132b0 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69 6e 20   memory cell in 
132c0 74 68 65 20 72 61 6e 67 65 2e 0a 2a 2f 0a 63 61  the range..*/.ca
132d0 73 65 20 4f 50 5f 41 66 66 69 6e 69 74 79 3a 20  se OP_Affinity: 
132e0 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  {.  const char *
132f0 7a 41 66 66 69 6e 69 74 79 3b 20 20 20 2f 2a 20  zAffinity;   /* 
13300 54 68 65 20 61 66 66 69 6e 69 74 79 20 74 6f 20  The affinity to 
13310 62 65 20 61 70 70 6c 69 65 64 20 2a 2f 0a 20 20  be applied */.  
13320 63 68 61 72 20 63 41 66 66 3b 20 20 20 20 20 20  char cAff;      
13330 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 73 69           /* A si
13340 6e 67 6c 65 20 63 68 61 72 61 63 74 65 72 20 6f  ngle character o
13350 66 20 61 66 66 69 6e 69 74 79 20 2a 2f 0a 0a 20  f affinity */.. 
13360 20 7a 41 66 66 69 6e 69 74 79 20 3d 20 70 4f 70   zAffinity = pOp
13370 2d 3e 70 34 2e 7a 3b 0a 20 20 61 73 73 65 72 74  ->p4.z;.  assert
13380 28 20 7a 41 66 66 69 6e 69 74 79 21 3d 30 20 29  ( zAffinity!=0 )
13390 3b 0a 20 20 61 73 73 65 72 74 28 20 7a 41 66 66  ;.  assert( zAff
133a0 69 6e 69 74 79 5b 70 4f 70 2d 3e 70 32 5d 3d 3d  inity[pOp->p2]==
133b0 30 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61  0 );.  pIn1 = &a
133c0 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
133d0 77 68 69 6c 65 28 20 28 63 41 66 66 20 3d 20 2a  while( (cAff = *
133e0 28 7a 41 66 66 69 6e 69 74 79 2b 2b 29 29 21 3d  (zAffinity++))!=
133f0 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  0 ){.    assert(
13400 20 70 49 6e 31 20 3c 3d 20 26 70 2d 3e 61 4d 65   pIn1 <= &p->aMe
13410 6d 5b 70 2d 3e 6e 4d 65 6d 5d 20 29 3b 0a 20 20  m[p->nMem] );.  
13420 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
13430 61 6c 69 64 28 70 49 6e 31 29 20 29 3b 0a 20 20  alid(pIn1) );.  
13440 20 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e    ExpandBlob(pIn
13450 31 29 3b 0a 20 20 20 20 61 70 70 6c 79 41 66 66  1);.    applyAff
13460 69 6e 69 74 79 28 70 49 6e 31 2c 20 63 41 66 66  inity(pIn1, cAff
13470 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20  , encoding);.   
13480 20 70 49 6e 31 2b 2b 3b 0a 20 20 7d 0a 20 20 62   pIn1++;.  }.  b
13490 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
134a0 64 65 3a 20 4d 61 6b 65 52 65 63 6f 72 64 20 50  de: MakeRecord P
134b0 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a  1 P2 P3 P4 *.**.
134c0 2a 2a 20 43 6f 6e 76 65 72 74 20 50 32 20 72 65  ** Convert P2 re
134d0 67 69 73 74 65 72 73 20 62 65 67 69 6e 6e 69 6e  gisters beginnin
134e0 67 20 77 69 74 68 20 50 31 20 69 6e 74 6f 20 74  g with P1 into t
134f0 68 65 20 5b 72 65 63 6f 72 64 20 66 6f 72 6d 61  he [record forma
13500 74 5d 0a 2a 2a 20 75 73 65 20 61 73 20 61 20 64  t].** use as a d
13510 61 74 61 20 72 65 63 6f 72 64 20 69 6e 20 61 20  ata record in a 
13520 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f  database table o
13530 72 20 61 73 20 61 20 6b 65 79 0a 2a 2a 20 69 6e  r as a key.** in
13540 20 61 6e 20 69 6e 64 65 78 2e 20 20 54 68 65 20   an index.  The 
13550 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65  OP_Column opcode
13560 20 63 61 6e 20 64 65 63 6f 64 65 20 74 68 65 20   can decode the 
13570 72 65 63 6f 72 64 20 6c 61 74 65 72 2e 0a 2a 2a  record later..**
13580 0a 2a 2a 20 50 34 20 6d 61 79 20 62 65 20 61 20  .** P4 may be a 
13590 73 74 72 69 6e 67 20 74 68 61 74 20 69 73 20 50  string that is P
135a0 32 20 63 68 61 72 61 63 74 65 72 73 20 6c 6f 6e  2 characters lon
135b0 67 2e 20 20 54 68 65 20 6e 74 68 20 63 68 61 72  g.  The nth char
135c0 61 63 74 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20  acter of the.** 
135d0 73 74 72 69 6e 67 20 69 6e 64 69 63 61 74 65 73  string indicates
135e0 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61 66 66 69   the column affi
135f0 6e 69 74 79 20 74 68 61 74 20 73 68 6f 75 6c 64  nity that should
13600 20 62 65 20 75 73 65 64 20 66 6f 72 20 74 68 65   be used for the
13610 20 6e 74 68 0a 2a 2a 20 66 69 65 6c 64 20 6f 66   nth.** field of
13620 20 74 68 65 20 69 6e 64 65 78 20 6b 65 79 2e 0a   the index key..
13630 2a 2a 0a 2a 2a 20 54 68 65 20 6d 61 70 70 69 6e  **.** The mappin
13640 67 20 66 72 6f 6d 20 63 68 61 72 61 63 74 65 72  g from character
13650 20 74 6f 20 61 66 66 69 6e 69 74 79 20 69 73 20   to affinity is 
13660 67 69 76 65 6e 20 62 79 20 74 68 65 20 53 51 4c  given by the SQL
13670 49 54 45 5f 41 46 46 5f 0a 2a 2a 20 6d 61 63 72  ITE_AFF_.** macr
13680 6f 73 20 64 65 66 69 6e 65 64 20 69 6e 20 73 71  os defined in sq
13690 6c 69 74 65 49 6e 74 2e 68 2e 0a 2a 2a 0a 2a 2a  liteInt.h..**.**
136a0 20 49 66 20 50 34 20 69 73 20 4e 55 4c 4c 20 74   If P4 is NULL t
136b0 68 65 6e 20 61 6c 6c 20 69 6e 64 65 78 20 66 69  hen all index fi
136c0 65 6c 64 73 20 68 61 76 65 20 74 68 65 20 61 66  elds have the af
136d0 66 69 6e 69 74 79 20 4e 4f 4e 45 2e 0a 2a 2f 0a  finity NONE..*/.
136e0 63 61 73 65 20 4f 50 5f 4d 61 6b 65 52 65 63 6f  case OP_MakeReco
136f0 72 64 3a 20 7b 0a 20 20 75 38 20 2a 7a 4e 65 77  rd: {.  u8 *zNew
13700 52 65 63 6f 72 64 3b 20 20 20 20 20 20 20 20 2f  Record;        /
13710 2a 20 41 20 62 75 66 66 65 72 20 74 6f 20 68 6f  * A buffer to ho
13720 6c 64 20 74 68 65 20 64 61 74 61 20 66 6f 72 20  ld the data for 
13730 74 68 65 20 6e 65 77 20 72 65 63 6f 72 64 20 2a  the new record *
13740 2f 0a 20 20 4d 65 6d 20 2a 70 52 65 63 3b 20 20  /.  Mem *pRec;  
13750 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
13760 65 20 6e 65 77 20 72 65 63 6f 72 64 20 2a 2f 0a  e new record */.
13770 20 20 75 36 34 20 6e 44 61 74 61 3b 20 20 20 20    u64 nData;    
13780 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
13790 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20 64  er of bytes of d
137a0 61 74 61 20 73 70 61 63 65 20 2a 2f 0a 20 20 69  ata space */.  i
137b0 6e 74 20 6e 48 64 72 3b 20 20 20 20 20 20 20 20  nt nHdr;        
137c0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
137d0 6f 66 20 62 79 74 65 73 20 6f 66 20 68 65 61 64  of bytes of head
137e0 65 72 20 73 70 61 63 65 20 2a 2f 0a 20 20 69 36  er space */.  i6
137f0 34 20 6e 42 79 74 65 3b 20 20 20 20 20 20 20 20  4 nByte;        
13800 20 20 20 20 20 2f 2a 20 44 61 74 61 20 73 70 61       /* Data spa
13810 63 65 20 72 65 71 75 69 72 65 64 20 66 6f 72 20  ce required for 
13820 74 68 69 73 20 72 65 63 6f 72 64 20 2a 2f 0a 20  this record */. 
13830 20 69 6e 74 20 6e 5a 65 72 6f 3b 20 20 20 20 20   int nZero;     
13840 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
13850 72 20 6f 66 20 7a 65 72 6f 20 62 79 74 65 73 20  r of zero bytes 
13860 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  at the end of th
13870 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e  e record */.  in
13880 74 20 6e 56 61 72 69 6e 74 3b 20 20 20 20 20 20  t nVarint;      
13890 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
138a0 66 20 62 79 74 65 73 20 69 6e 20 61 20 76 61 72  f bytes in a var
138b0 69 6e 74 20 2a 2f 0a 20 20 75 33 32 20 73 65 72  int */.  u32 ser
138c0 69 61 6c 5f 74 79 70 65 3b 20 20 20 20 20 20 20  ial_type;       
138d0 2f 2a 20 54 79 70 65 20 66 69 65 6c 64 20 2a 2f  /* Type field */
138e0 0a 20 20 4d 65 6d 20 2a 70 44 61 74 61 30 3b 20  .  Mem *pData0; 
138f0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72            /* Fir
13900 73 74 20 66 69 65 6c 64 20 74 6f 20 62 65 20 63  st field to be c
13910 6f 6d 62 69 6e 65 64 20 69 6e 74 6f 20 74 68 65  ombined into the
13920 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 4d 65 6d   record */.  Mem
13930 20 2a 70 4c 61 73 74 3b 20 20 20 20 20 20 20 20   *pLast;        
13940 20 20 20 20 2f 2a 20 4c 61 73 74 20 66 69 65 6c      /* Last fiel
13950 64 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20  d of the record 
13960 2a 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b  */.  int nField;
13970 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
13980 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20  umber of fields 
13990 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f  in the record */
139a0 0a 20 20 63 68 61 72 20 2a 7a 41 66 66 69 6e 69  .  char *zAffini
139b0 74 79 3b 20 20 20 20 20 20 20 2f 2a 20 54 68 65  ty;       /* The
139c0 20 61 66 66 69 6e 69 74 79 20 73 74 72 69 6e 67   affinity string
139d0 20 66 6f 72 20 74 68 65 20 72 65 63 6f 72 64 20   for the record 
139e0 2a 2f 0a 20 20 69 6e 74 20 66 69 6c 65 5f 66 6f  */.  int file_fo
139f0 72 6d 61 74 3b 20 20 20 20 20 20 20 2f 2a 20 46  rmat;       /* F
13a00 69 6c 65 20 66 6f 72 6d 61 74 20 74 6f 20 75 73  ile format to us
13a10 65 20 66 6f 72 20 65 6e 63 6f 64 69 6e 67 20 2a  e for encoding *
13a20 2f 0a 20 20 69 6e 74 20 69 3b 20 20 20 20 20 20  /.  int i;      
13a30 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 70             /* Sp
13a40 61 63 65 20 75 73 65 64 20 69 6e 20 7a 4e 65 77  ace used in zNew
13a50 52 65 63 6f 72 64 5b 5d 20 2a 2f 0a 20 20 69 6e  Record[] */.  in
13a60 74 20 6c 65 6e 3b 20 20 20 20 20 20 20 20 20 20  t len;          
13a70 20 20 20 20 20 2f 2a 20 4c 65 6e 67 74 68 20 6f       /* Length o
13a80 66 20 61 20 66 69 65 6c 64 20 2a 2f 0a 0a 20 20  f a field */..  
13a90 2f 2a 20 41 73 73 75 6d 69 6e 67 20 74 68 65 20  /* Assuming the 
13aa0 72 65 63 6f 72 64 20 63 6f 6e 74 61 69 6e 73 20  record contains 
13ab0 4e 20 66 69 65 6c 64 73 2c 20 74 68 65 20 72 65  N fields, the re
13ac0 63 6f 72 64 20 66 6f 72 6d 61 74 20 6c 6f 6f 6b  cord format look
13ad0 73 0a 20 20 2a 2a 20 6c 69 6b 65 20 74 68 69 73  s.  ** like this
13ae0 3a 0a 20 20 2a 2a 0a 20 20 2a 2a 20 2d 2d 2d 2d  :.  **.  ** ----
13af0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13b00 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13b10 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13b20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13b30 2d 2d 2d 2d 0a 20 20 2a 2a 20 7c 20 68 64 72 2d  ----.  ** | hdr-
13b40 73 69 7a 65 20 7c 20 74 79 70 65 20 30 20 7c 20  size | type 0 | 
13b50 74 79 70 65 20 31 20 7c 20 2e 2e 2e 20 7c 20 74  type 1 | ... | t
13b60 79 70 65 20 4e 2d 31 20 7c 20 64 61 74 61 30 20  ype N-1 | data0 
13b70 7c 20 2e 2e 2e 20 7c 20 64 61 74 61 20 4e 2d 31  | ... | data N-1
13b80 20 7c 20 0a 20 20 2a 2a 20 2d 2d 2d 2d 2d 2d 2d   | .  ** -------
13b90 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13ba0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13bb0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13bc0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13bd0 2d 0a 20 20 2a 2a 0a 20 20 2a 2a 20 44 61 74 61  -.  **.  ** Data
13be0 28 30 29 20 69 73 20 74 61 6b 65 6e 20 66 72 6f  (0) is taken fro
13bf0 6d 20 72 65 67 69 73 74 65 72 20 50 31 2e 20 20  m register P1.  
13c00 44 61 74 61 28 31 29 20 63 6f 6d 65 73 20 66 72  Data(1) comes fr
13c10 6f 6d 20 72 65 67 69 73 74 65 72 20 50 31 2b 31  om register P1+1
13c20 0a 20 20 2a 2a 20 61 6e 64 20 73 6f 20 66 72 6f  .  ** and so fro
13c30 74 68 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 45 61  th..  **.  ** Ea
13c40 63 68 20 74 79 70 65 20 66 69 65 6c 64 20 69 73  ch type field is
13c50 20 61 20 76 61 72 69 6e 74 20 72 65 70 72 65 73   a varint repres
13c60 65 6e 74 69 6e 67 20 74 68 65 20 73 65 72 69 61  enting the seria
13c70 6c 20 74 79 70 65 20 6f 66 20 74 68 65 20 0a 20  l type of the . 
13c80 20 2a 2a 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e   ** correspondin
13c90 67 20 64 61 74 61 20 65 6c 65 6d 65 6e 74 20 28  g data element (
13ca0 73 65 65 20 73 71 6c 69 74 65 33 56 64 62 65 53  see sqlite3VdbeS
13cb0 65 72 69 61 6c 54 79 70 65 28 29 29 2e 20 54 68  erialType()). Th
13cc0 65 0a 20 20 2a 2a 20 68 64 72 2d 73 69 7a 65 20  e.  ** hdr-size 
13cd0 66 69 65 6c 64 20 69 73 20 61 6c 73 6f 20 61 20  field is also a 
13ce0 76 61 72 69 6e 74 20 77 68 69 63 68 20 69 73 20  varint which is 
13cf0 74 68 65 20 6f 66 66 73 65 74 20 66 72 6f 6d 20  the offset from 
13d00 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 0a 20 20  the beginning.  
13d10 2a 2a 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64  ** of the record
13d20 20 74 6f 20 64 61 74 61 30 2e 0a 20 20 2a 2f 0a   to data0..  */.
13d30 20 20 6e 44 61 74 61 20 3d 20 30 3b 20 20 20 20    nData = 0;    
13d40 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
13d50 66 20 62 79 74 65 73 20 6f 66 20 64 61 74 61 20  f bytes of data 
13d60 73 70 61 63 65 20 2a 2f 0a 20 20 6e 48 64 72 20  space */.  nHdr 
13d70 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  = 0;          /*
13d80 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   Number of bytes
13d90 20 6f 66 20 68 65 61 64 65 72 20 73 70 61 63 65   of header space
13da0 20 2a 2f 0a 20 20 6e 5a 65 72 6f 20 3d 20 30 3b   */.  nZero = 0;
13db0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
13dc0 65 72 20 6f 66 20 7a 65 72 6f 20 62 79 74 65 73  er of zero bytes
13dd0 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74   at the end of t
13de0 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 6e  he record */.  n
13df0 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 31 3b  Field = pOp->p1;
13e00 0a 20 20 7a 41 66 66 69 6e 69 74 79 20 3d 20 70  .  zAffinity = p
13e10 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 61 73 73 65  Op->p4.z;.  asse
13e20 72 74 28 20 6e 46 69 65 6c 64 3e 30 20 26 26 20  rt( nField>0 && 
13e30 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70  pOp->p2>0 && pOp
13e40 2d 3e 70 32 2b 6e 46 69 65 6c 64 3c 3d 70 2d 3e  ->p2+nField<=p->
13e50 6e 4d 65 6d 2b 31 20 29 3b 0a 20 20 70 44 61 74  nMem+1 );.  pDat
13e60 61 30 20 3d 20 26 61 4d 65 6d 5b 6e 46 69 65 6c  a0 = &aMem[nFiel
13e70 64 5d 3b 0a 20 20 6e 46 69 65 6c 64 20 3d 20 70  d];.  nField = p
13e80 4f 70 2d 3e 70 32 3b 0a 20 20 70 4c 61 73 74 20  Op->p2;.  pLast 
13e90 3d 20 26 70 44 61 74 61 30 5b 6e 46 69 65 6c 64  = &pData0[nField
13ea0 2d 31 5d 3b 0a 20 20 66 69 6c 65 5f 66 6f 72 6d  -1];.  file_form
13eb0 61 74 20 3d 20 70 2d 3e 6d 69 6e 57 72 69 74 65  at = p->minWrite
13ec0 46 69 6c 65 46 6f 72 6d 61 74 3b 0a 0a 20 20 2f  FileFormat;..  /
13ed0 2a 20 49 64 65 6e 74 69 66 79 20 74 68 65 20 6f  * Identify the o
13ee0 75 74 70 75 74 20 72 65 67 69 73 74 65 72 20 2a  utput register *
13ef0 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  /.  assert( pOp-
13f00 3e 70 33 3c 70 4f 70 2d 3e 70 31 20 7c 7c 20 70  >p3<pOp->p1 || p
13f10 4f 70 2d 3e 70 33 3e 3d 70 4f 70 2d 3e 70 31 2b  Op->p3>=pOp->p1+
13f20 70 4f 70 2d 3e 70 32 20 29 3b 0a 20 20 70 4f 75  pOp->p2 );.  pOu
13f30 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
13f40 33 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f  3];.  memAboutTo
13f50 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b  Change(p, pOut);
13f60 0a 0a 20 20 2f 2a 20 4c 6f 6f 70 20 74 68 72 6f  ..  /* Loop thro
13f70 75 67 68 20 74 68 65 20 65 6c 65 6d 65 6e 74 73  ugh the elements
13f80 20 74 68 61 74 20 77 69 6c 6c 20 6d 61 6b 65 20   that will make 
13f90 75 70 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f  up the record to
13fa0 20 66 69 67 75 72 65 0a 20 20 2a 2a 20 6f 75 74   figure.  ** out
13fb0 20 68 6f 77 20 6d 75 63 68 20 73 70 61 63 65 20   how much space 
13fc0 69 73 20 72 65 71 75 69 72 65 64 20 66 6f 72 20  is required for 
13fd0 74 68 65 20 6e 65 77 20 72 65 63 6f 72 64 2e 0a  the new record..
13fe0 20 20 2a 2f 0a 20 20 66 6f 72 28 70 52 65 63 3d    */.  for(pRec=
13ff0 70 44 61 74 61 30 3b 20 70 52 65 63 3c 3d 70 4c  pData0; pRec<=pL
14000 61 73 74 3b 20 70 52 65 63 2b 2b 29 7b 0a 20 20  ast; pRec++){.  
14010 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
14020 61 6c 69 64 28 70 52 65 63 29 20 29 3b 0a 20 20  alid(pRec) );.  
14030 20 20 69 66 28 20 7a 41 66 66 69 6e 69 74 79 20    if( zAffinity 
14040 29 7b 0a 20 20 20 20 20 20 61 70 70 6c 79 41 66  ){.      applyAf
14050 66 69 6e 69 74 79 28 70 52 65 63 2c 20 7a 41 66  finity(pRec, zAf
14060 66 69 6e 69 74 79 5b 70 52 65 63 2d 70 44 61 74  finity[pRec-pDat
14070 61 30 5d 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a  a0], encoding);.
14080 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70 52      }.    if( pR
14090 65 63 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 5a 65  ec->flags&MEM_Ze
140a0 72 6f 20 26 26 20 70 52 65 63 2d 3e 6e 3e 30 20  ro && pRec->n>0 
140b0 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
140c0 56 64 62 65 4d 65 6d 45 78 70 61 6e 64 42 6c 6f  VdbeMemExpandBlo
140d0 62 28 70 52 65 63 29 3b 0a 20 20 20 20 7d 0a 20  b(pRec);.    }. 
140e0 20 20 20 73 65 72 69 61 6c 5f 74 79 70 65 20 3d     serial_type =
140f0 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69   sqlite3VdbeSeri
14100 61 6c 54 79 70 65 28 70 52 65 63 2c 20 66 69 6c  alType(pRec, fil
14110 65 5f 66 6f 72 6d 61 74 29 3b 0a 20 20 20 20 6c  e_format);.    l
14120 65 6e 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  en = sqlite3Vdbe
14130 53 65 72 69 61 6c 54 79 70 65 4c 65 6e 28 73 65  SerialTypeLen(se
14140 72 69 61 6c 5f 74 79 70 65 29 3b 0a 20 20 20 20  rial_type);.    
14150 6e 44 61 74 61 20 2b 3d 20 6c 65 6e 3b 0a 20 20  nData += len;.  
14160 20 20 6e 48 64 72 20 2b 3d 20 73 71 6c 69 74 65    nHdr += sqlite
14170 33 56 61 72 69 6e 74 4c 65 6e 28 73 65 72 69 61  3VarintLen(seria
14180 6c 5f 74 79 70 65 29 3b 0a 20 20 20 20 69 66 28  l_type);.    if(
14190 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d   pRec->flags & M
141a0 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20 20  EM_Zero ){.     
141b0 20 2f 2a 20 4f 6e 6c 79 20 70 75 72 65 20 7a 65   /* Only pure ze
141c0 72 6f 2d 66 69 6c 6c 65 64 20 42 4c 4f 42 73 20  ro-filled BLOBs 
141d0 63 61 6e 20 62 65 20 69 6e 70 75 74 20 74 6f 20  can be input to 
141e0 74 68 69 73 20 4f 70 63 6f 64 65 2e 0a 20 20 20  this Opcode..   
141f0 20 20 20 2a 2a 20 57 65 20 64 6f 20 6e 6f 74 20     ** We do not 
14200 61 6c 6c 6f 77 20 62 6c 6f 62 73 20 77 69 74 68  allow blobs with
14210 20 61 20 70 72 65 66 69 78 20 61 6e 64 20 61 20   a prefix and a 
14220 7a 65 72 6f 2d 66 69 6c 6c 65 64 20 74 61 69 6c  zero-filled tail
14230 2e 20 2a 2f 0a 20 20 20 20 20 20 6e 5a 65 72 6f  . */.      nZero
14240 20 2b 3d 20 70 52 65 63 2d 3e 75 2e 6e 5a 65 72   += pRec->u.nZer
14250 6f 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  o;.    }else if(
14260 20 6c 65 6e 20 29 7b 0a 20 20 20 20 20 20 6e 5a   len ){.      nZ
14270 65 72 6f 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20  ero = 0;.    }. 
14280 20 7d 0a 0a 20 20 2f 2a 20 41 64 64 20 74 68 65   }..  /* Add the
14290 20 69 6e 69 74 69 61 6c 20 68 65 61 64 65 72 20   initial header 
142a0 76 61 72 69 6e 74 20 61 6e 64 20 74 6f 74 61 6c  varint and total
142b0 20 74 68 65 20 73 69 7a 65 20 2a 2f 0a 20 20 6e   the size */.  n
142c0 48 64 72 20 2b 3d 20 6e 56 61 72 69 6e 74 20 3d  Hdr += nVarint =
142d0 20 73 71 6c 69 74 65 33 56 61 72 69 6e 74 4c 65   sqlite3VarintLe
142e0 6e 28 6e 48 64 72 29 3b 0a 20 20 69 66 28 20 6e  n(nHdr);.  if( n
142f0 56 61 72 69 6e 74 3c 73 71 6c 69 74 65 33 56 61  Varint<sqlite3Va
14300 72 69 6e 74 4c 65 6e 28 6e 48 64 72 29 20 29 7b  rintLen(nHdr) ){
14310 0a 20 20 20 20 6e 48 64 72 2b 2b 3b 0a 20 20 7d  .    nHdr++;.  }
14320 0a 20 20 6e 42 79 74 65 20 3d 20 6e 48 64 72 2b  .  nByte = nHdr+
14330 6e 44 61 74 61 2d 6e 5a 65 72 6f 3b 0a 20 20 69  nData-nZero;.  i
14340 66 28 20 6e 42 79 74 65 3e 64 62 2d 3e 61 4c 69  f( nByte>db->aLi
14350 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54  mit[SQLITE_LIMIT
14360 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20  _LENGTH] ){.    
14370 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20  goto too_big;.  
14380 7d 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72  }..  /* Make sur
14390 65 20 74 68 65 20 6f 75 74 70 75 74 20 72 65 67  e the output reg
143a0 69 73 74 65 72 20 68 61 73 20 61 20 62 75 66 66  ister has a buff
143b0 65 72 20 6c 61 72 67 65 20 65 6e 6f 75 67 68 20  er large enough 
143c0 74 6f 20 73 74 6f 72 65 20 0a 20 20 2a 2a 20 74  to store .  ** t
143d0 68 65 20 6e 65 77 20 72 65 63 6f 72 64 2e 20 54  he new record. T
143e0 68 65 20 6f 75 74 70 75 74 20 72 65 67 69 73 74  he output regist
143f0 65 72 20 28 70 4f 70 2d 3e 70 33 29 20 69 73 20  er (pOp->p3) is 
14400 6e 6f 74 20 61 6c 6c 6f 77 65 64 20 74 6f 0a 20  not allowed to. 
14410 20 2a 2a 20 62 65 20 6f 6e 65 20 6f 66 20 74 68   ** be one of th
14420 65 20 69 6e 70 75 74 20 72 65 67 69 73 74 65 72  e input register
14430 73 20 28 62 65 63 61 75 73 65 20 74 68 65 20 66  s (because the f
14440 6f 6c 6c 6f 77 69 6e 67 20 63 61 6c 6c 20 74 6f  ollowing call to
14450 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 56 64 62  .  ** sqlite3Vdb
14460 65 4d 65 6d 47 72 6f 77 28 29 20 63 6f 75 6c 64  eMemGrow() could
14470 20 63 6c 6f 62 62 65 72 20 74 68 65 20 76 61 6c   clobber the val
14480 75 65 20 62 65 66 6f 72 65 20 69 74 20 69 73 20  ue before it is 
14490 75 73 65 64 29 2e 0a 20 20 2a 2f 0a 20 20 69 66  used)..  */.  if
144a0 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  ( sqlite3VdbeMem
144b0 47 72 6f 77 28 70 4f 75 74 2c 20 28 69 6e 74 29  Grow(pOut, (int)
144c0 6e 42 79 74 65 2c 20 30 29 20 29 7b 0a 20 20 20  nByte, 0) ){.   
144d0 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
144e0 7d 0a 20 20 7a 4e 65 77 52 65 63 6f 72 64 20 3d  }.  zNewRecord =
144f0 20 28 75 38 20 2a 29 70 4f 75 74 2d 3e 7a 3b 0a   (u8 *)pOut->z;.
14500 0a 20 20 2f 2a 20 57 72 69 74 65 20 74 68 65 20  .  /* Write the 
14510 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 20 3d 20  record */.  i = 
14520 70 75 74 56 61 72 69 6e 74 33 32 28 7a 4e 65 77  putVarint32(zNew
14530 52 65 63 6f 72 64 2c 20 6e 48 64 72 29 3b 0a 20  Record, nHdr);. 
14540 20 66 6f 72 28 70 52 65 63 3d 70 44 61 74 61 30   for(pRec=pData0
14550 3b 20 70 52 65 63 3c 3d 70 4c 61 73 74 3b 20 70  ; pRec<=pLast; p
14560 52 65 63 2b 2b 29 7b 0a 20 20 20 20 73 65 72 69  Rec++){.    seri
14570 61 6c 5f 74 79 70 65 20 3d 20 73 71 6c 69 74 65  al_type = sqlite
14580 33 56 64 62 65 53 65 72 69 61 6c 54 79 70 65 28  3VdbeSerialType(
14590 70 52 65 63 2c 20 66 69 6c 65 5f 66 6f 72 6d 61  pRec, file_forma
145a0 74 29 3b 0a 20 20 20 20 69 20 2b 3d 20 70 75 74  t);.    i += put
145b0 56 61 72 69 6e 74 33 32 28 26 7a 4e 65 77 52 65  Varint32(&zNewRe
145c0 63 6f 72 64 5b 69 5d 2c 20 73 65 72 69 61 6c 5f  cord[i], serial_
145d0 74 79 70 65 29 3b 20 20 20 20 20 20 2f 2a 20 73  type);      /* s
145e0 65 72 69 61 6c 20 74 79 70 65 20 2a 2f 0a 20 20  erial type */.  
145f0 7d 0a 20 20 66 6f 72 28 70 52 65 63 3d 70 44 61  }.  for(pRec=pDa
14600 74 61 30 3b 20 70 52 65 63 3c 3d 70 4c 61 73 74  ta0; pRec<=pLast
14610 3b 20 70 52 65 63 2b 2b 29 7b 20 20 2f 2a 20 73  ; pRec++){  /* s
14620 65 72 69 61 6c 20 64 61 74 61 20 2a 2f 0a 20 20  erial data */.  
14630 20 20 69 20 2b 3d 20 73 71 6c 69 74 65 33 56 64    i += sqlite3Vd
14640 62 65 53 65 72 69 61 6c 50 75 74 28 26 7a 4e 65  beSerialPut(&zNe
14650 77 52 65 63 6f 72 64 5b 69 5d 2c 20 28 69 6e 74  wRecord[i], (int
14660 29 28 6e 42 79 74 65 2d 69 29 2c 20 70 52 65 63  )(nByte-i), pRec
14670 2c 66 69 6c 65 5f 66 6f 72 6d 61 74 29 3b 0a 20  ,file_format);. 
14680 20 7d 0a 20 20 61 73 73 65 72 74 28 20 69 3d 3d   }.  assert( i==
14690 6e 42 79 74 65 20 29 3b 0a 0a 20 20 61 73 73 65  nByte );..  asse
146a0 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26  rt( pOp->p3>0 &&
146b0 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65   pOp->p3<=p->nMe
146c0 6d 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d  m );.  pOut->n =
146d0 20 28 69 6e 74 29 6e 42 79 74 65 3b 0a 20 20 70   (int)nByte;.  p
146e0 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
146f0 5f 42 6c 6f 62 20 7c 20 4d 45 4d 5f 44 79 6e 3b  _Blob | MEM_Dyn;
14700 0a 20 20 70 4f 75 74 2d 3e 78 44 65 6c 20 3d 20  .  pOut->xDel = 
14710 30 3b 0a 20 20 69 66 28 20 6e 5a 65 72 6f 20 29  0;.  if( nZero )
14720 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 6e 5a  {.    pOut->u.nZ
14730 65 72 6f 20 3d 20 6e 5a 65 72 6f 3b 0a 20 20 20  ero = nZero;.   
14740 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20   pOut->flags |= 
14750 4d 45 4d 5f 5a 65 72 6f 3b 0a 20 20 7d 0a 20 20  MEM_Zero;.  }.  
14760 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 53 51 4c 49  pOut->enc = SQLI
14770 54 45 5f 55 54 46 38 3b 20 20 2f 2a 20 49 6e 20  TE_UTF8;  /* In 
14780 63 61 73 65 20 74 68 65 20 62 6c 6f 62 20 69 73  case the blob is
14790 20 65 76 65 72 20 63 6f 6e 76 65 72 74 65 64 20   ever converted 
147a0 74 6f 20 74 65 78 74 20 2a 2f 0a 20 20 52 45 47  to text */.  REG
147b0 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
147c0 3e 70 33 2c 20 70 4f 75 74 29 3b 0a 20 20 55 50  >p3, pOut);.  UP
147d0 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
147e0 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b  E(pOut);.  break
147f0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
14800 43 6f 75 6e 74 20 50 31 20 50 32 20 2a 20 2a 20  Count P1 P2 * * 
14810 2a 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 74 68  *.**.** Store th
14820 65 20 6e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72  e number of entr
14830 69 65 73 20 28 61 6e 20 69 6e 74 65 67 65 72 20  ies (an integer 
14840 76 61 6c 75 65 29 20 69 6e 20 74 68 65 20 74 61  value) in the ta
14850 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 0a 2a 2a  ble or index .**
14860 20 6f 70 65 6e 65 64 20 62 79 20 63 75 72 73 6f   opened by curso
14870 72 20 50 31 20 69 6e 20 72 65 67 69 73 74 65 72  r P1 in register
14880 20 50 32 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53   P2.*/.#ifndef S
14890 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 54 52 45 45  QLITE_OMIT_BTREE
148a0 43 4f 55 4e 54 0a 63 61 73 65 20 4f 50 5f 43 6f  COUNT.case OP_Co
148b0 75 6e 74 3a 20 7b 20 20 20 20 20 20 20 20 20 2f  unt: {         /
148c0 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73  * out2-prereleas
148d0 65 20 2a 2f 0a 20 20 69 36 34 20 6e 45 6e 74 72  e */.  i64 nEntr
148e0 79 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70  y;.  BtCursor *p
148f0 43 72 73 72 3b 0a 0a 20 20 70 43 72 73 72 20 3d  Crsr;..  pCrsr =
14900 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
14910 31 5d 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 69  1]->pCursor;.  i
14920 66 28 20 41 4c 57 41 59 53 28 70 43 72 73 72 29  f( ALWAYS(pCrsr)
14930 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   ){.    rc = sql
14940 69 74 65 33 42 74 72 65 65 43 6f 75 6e 74 28 70  ite3BtreeCount(p
14950 43 72 73 72 2c 20 26 6e 45 6e 74 72 79 29 3b 0a  Crsr, &nEntry);.
14960 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 6e 45 6e    }else{.    nEn
14970 74 72 79 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 70  try = 0;.  }.  p
14980 4f 75 74 2d 3e 75 2e 69 20 3d 20 6e 45 6e 74 72  Out->u.i = nEntr
14990 79 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65  y;.  break;.}.#e
149a0 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  ndif../* Opcode:
149b0 20 53 61 76 65 70 6f 69 6e 74 20 50 31 20 2a 20   Savepoint P1 * 
149c0 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 4f 70 65  * P4 *.**.** Ope
149d0 6e 2c 20 72 65 6c 65 61 73 65 20 6f 72 20 72 6f  n, release or ro
149e0 6c 6c 62 61 63 6b 20 74 68 65 20 73 61 76 65 70  llback the savep
149f0 6f 69 6e 74 20 6e 61 6d 65 64 20 62 79 20 70 61  oint named by pa
14a00 72 61 6d 65 74 65 72 20 50 34 2c 20 64 65 70 65  rameter P4, depe
14a10 6e 64 69 6e 67 0a 2a 2a 20 6f 6e 20 74 68 65 20  nding.** on the 
14a20 76 61 6c 75 65 20 6f 66 20 50 31 2e 20 54 6f 20  value of P1. To 
14a30 6f 70 65 6e 20 61 20 6e 65 77 20 73 61 76 65 70  open a new savep
14a40 6f 69 6e 74 2c 20 50 31 3d 3d 30 2e 20 54 6f 20  oint, P1==0. To 
14a50 72 65 6c 65 61 73 65 20 28 63 6f 6d 6d 69 74 29  release (commit)
14a60 20 61 6e 0a 2a 2a 20 65 78 69 73 74 69 6e 67 20   an.** existing 
14a70 73 61 76 65 70 6f 69 6e 74 2c 20 50 31 3d 3d 31  savepoint, P1==1
14a80 2c 20 6f 72 20 74 6f 20 72 6f 6c 6c 62 61 63 6b  , or to rollback
14a90 20 61 6e 20 65 78 69 73 74 69 6e 67 20 73 61 76   an existing sav
14aa0 65 70 6f 69 6e 74 20 50 31 3d 3d 32 2e 0a 2a 2f  epoint P1==2..*/
14ab0 0a 63 61 73 65 20 4f 50 5f 53 61 76 65 70 6f 69  .case OP_Savepoi
14ac0 6e 74 3a 20 7b 0a 20 20 69 6e 74 20 70 31 3b 20  nt: {.  int p1; 
14ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14ae0 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65          /* Value
14af0 20 6f 66 20 50 31 20 6f 70 65 72 61 6e 64 20 2a   of P1 operand *
14b00 2f 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b  /.  char *zName;
14b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14b20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 73      /* Name of s
14b30 61 76 65 70 6f 69 6e 74 20 2a 2f 0a 20 20 69 6e  avepoint */.  in
14b40 74 20 6e 4e 61 6d 65 3b 0a 20 20 53 61 76 65 70  t nName;.  Savep
14b50 6f 69 6e 74 20 2a 70 4e 65 77 3b 0a 20 20 53 61  oint *pNew;.  Sa
14b60 76 65 70 6f 69 6e 74 20 2a 70 53 61 76 65 70 6f  vepoint *pSavepo
14b70 69 6e 74 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74  int;.  Savepoint
14b80 20 2a 70 54 6d 70 3b 0a 20 20 69 6e 74 20 69 53   *pTmp;.  int iS
14b90 61 76 65 70 6f 69 6e 74 3b 0a 20 20 69 6e 74 20  avepoint;.  int 
14ba0 69 69 3b 0a 0a 20 20 70 31 20 3d 20 70 4f 70 2d  ii;..  p1 = pOp-
14bb0 3e 70 31 3b 0a 20 20 7a 4e 61 6d 65 20 3d 20 70  >p1;.  zName = p
14bc0 4f 70 2d 3e 70 34 2e 7a 3b 0a 0a 20 20 2f 2a 20  Op->p4.z;..  /* 
14bd0 41 73 73 65 72 74 20 74 68 61 74 20 74 68 65 20  Assert that the 
14be0 70 31 20 70 61 72 61 6d 65 74 65 72 20 69 73 20  p1 parameter is 
14bf0 76 61 6c 69 64 2e 20 41 6c 73 6f 20 74 68 61 74  valid. Also that
14c00 20 69 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20   if there is no 
14c10 6f 70 65 6e 0a 20 20 2a 2a 20 74 72 61 6e 73 61  open.  ** transa
14c20 63 74 69 6f 6e 2c 20 74 68 65 6e 20 74 68 65 72  ction, then ther
14c30 65 20 63 61 6e 6e 6f 74 20 62 65 20 61 6e 79 20  e cannot be any 
14c40 73 61 76 65 70 6f 69 6e 74 73 2e 20 0a 20 20 2a  savepoints. .  *
14c50 2f 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e  /.  assert( db->
14c60 70 53 61 76 65 70 6f 69 6e 74 3d 3d 30 20 7c 7c  pSavepoint==0 ||
14c70 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d   db->autoCommit=
14c80 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
14c90 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 42 45  p1==SAVEPOINT_BE
14ca0 47 49 4e 7c 7c 70 31 3d 3d 53 41 56 45 50 4f 49  GIN||p1==SAVEPOI
14cb0 4e 54 5f 52 45 4c 45 41 53 45 7c 7c 70 31 3d 3d  NT_RELEASE||p1==
14cc0 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41  SAVEPOINT_ROLLBA
14cd0 43 4b 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  CK );.  assert( 
14ce0 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 7c  db->pSavepoint |
14cf0 7c 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74  | db->isTransact
14d00 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3d 3d 30 20  ionSavepoint==0 
14d10 29 3b 0a 20 20 61 73 73 65 72 74 28 20 63 68 65  );.  assert( che
14d20 63 6b 53 61 76 65 70 6f 69 6e 74 43 6f 75 6e 74  ckSavepointCount
14d30 28 64 62 29 20 29 3b 0a 0a 20 20 69 66 28 20 70  (db) );..  if( p
14d40 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 42 45 47  1==SAVEPOINT_BEG
14d50 49 4e 20 29 7b 0a 20 20 20 20 69 66 28 20 64 62  IN ){.    if( db
14d60 2d 3e 77 72 69 74 65 56 64 62 65 43 6e 74 3e 30  ->writeVdbeCnt>0
14d70 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 41 20 6e   ){.      /* A n
14d80 65 77 20 73 61 76 65 70 6f 69 6e 74 20 63 61 6e  ew savepoint can
14d90 6e 6f 74 20 62 65 20 63 72 65 61 74 65 64 20 69  not be created i
14da0 66 20 74 68 65 72 65 20 61 72 65 20 61 63 74 69  f there are acti
14db0 76 65 20 77 72 69 74 65 20 0a 20 20 20 20 20 20  ve write .      
14dc0 2a 2a 20 73 74 61 74 65 6d 65 6e 74 73 20 28 69  ** statements (i
14dd0 2e 65 2e 20 6f 70 65 6e 20 72 65 61 64 2f 77 72  .e. open read/wr
14de0 69 74 65 20 69 6e 63 72 65 6d 65 6e 74 61 6c 20  ite incremental 
14df0 62 6c 6f 62 20 68 61 6e 64 6c 65 73 29 2e 0a 20  blob handles).. 
14e00 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 73 71       */.      sq
14e10 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26  lite3SetString(&
14e20 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20  p->zErrMsg, db, 
14e30 22 63 61 6e 6e 6f 74 20 6f 70 65 6e 20 73 61 76  "cannot open sav
14e40 65 70 6f 69 6e 74 20 2d 20 22 0a 20 20 20 20 20  epoint - ".     
14e50 20 20 20 22 53 51 4c 20 73 74 61 74 65 6d 65 6e     "SQL statemen
14e60 74 73 20 69 6e 20 70 72 6f 67 72 65 73 73 22 29  ts in progress")
14e70 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c  ;.      rc = SQL
14e80 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 7d 65  ITE_BUSY;.    }e
14e90 6c 73 65 7b 0a 20 20 20 20 20 20 6e 4e 61 6d 65  lse{.      nName
14ea0 20 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e   = sqlite3Strlen
14eb0 33 30 28 7a 4e 61 6d 65 29 3b 0a 0a 23 69 66 6e  30(zName);..#ifn
14ec0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
14ed0 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 20  VIRTUALTABLE.   
14ee0 20 20 20 2f 2a 20 54 68 69 73 20 63 61 6c 6c 20     /* This call 
14ef0 69 73 20 4f 6b 20 65 76 65 6e 20 69 66 20 74 68  is Ok even if th
14f00 69 73 20 73 61 76 65 70 6f 69 6e 74 20 69 73 20  is savepoint is 
14f10 61 63 74 75 61 6c 6c 79 20 61 20 74 72 61 6e 73  actually a trans
14f20 61 63 74 69 6f 6e 0a 20 20 20 20 20 20 2a 2a 20  action.      ** 
14f30 73 61 76 65 70 6f 69 6e 74 20 28 61 6e 64 20 74  savepoint (and t
14f40 68 65 72 65 66 6f 72 65 20 73 68 6f 75 6c 64 20  herefore should 
14f50 6e 6f 74 20 70 72 6f 6d 70 74 20 78 53 61 76 65  not prompt xSave
14f60 70 6f 69 6e 74 28 29 29 20 63 61 6c 6c 62 61 63  point()) callbac
14f70 6b 73 2e 0a 20 20 20 20 20 20 2a 2a 20 49 66 20  ks..      ** If 
14f80 74 68 69 73 20 69 73 20 61 20 74 72 61 6e 73 61  this is a transa
14f90 63 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 20  ction savepoint 
14fa0 62 65 69 6e 67 20 6f 70 65 6e 65 64 2c 20 69 74  being opened, it
14fb0 20 69 73 20 67 75 61 72 61 6e 74 65 65 64 0a 20   is guaranteed. 
14fc0 20 20 20 20 20 2a 2a 20 74 68 61 74 20 74 68 65       ** that the
14fd0 20 64 62 2d 3e 61 56 54 72 61 6e 73 5b 5d 20 61   db->aVTrans[] a
14fe0 72 72 61 79 20 69 73 20 65 6d 70 74 79 2e 20 20  rray is empty.  
14ff0 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  */.      assert(
15000 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d   db->autoCommit=
15010 3d 30 20 7c 7c 20 64 62 2d 3e 6e 56 54 72 61 6e  =0 || db->nVTran
15020 73 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 72 63  s==0 );.      rc
15030 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62 53 61   = sqlite3VtabSa
15040 76 65 70 6f 69 6e 74 28 64 62 2c 20 53 41 56 45  vepoint(db, SAVE
15050 50 4f 49 4e 54 5f 42 45 47 49 4e 2c 0a 20 20 20  POINT_BEGIN,.   
15060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15070 20 20 20 20 20 20 20 20 20 20 20 20 20 64 62 2d               db-
15080 3e 6e 53 74 61 74 65 6d 65 6e 74 2b 64 62 2d 3e  >nStatement+db->
15090 6e 53 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20 20  nSavepoint);.   
150a0 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
150b0 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72  E_OK ) goto abor
150c0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
150d0 23 65 6e 64 69 66 0a 0a 20 20 20 20 20 20 2f 2a  #endif..      /*
150e0 20 43 72 65 61 74 65 20 61 20 6e 65 77 20 73 61   Create a new sa
150f0 76 65 70 6f 69 6e 74 20 73 74 72 75 63 74 75 72  vepoint structur
15100 65 2e 20 2a 2f 0a 20 20 20 20 20 20 70 4e 65 77  e. */.      pNew
15110 20 3d 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c   = sqlite3DbMall
15120 6f 63 52 61 77 28 64 62 2c 20 73 69 7a 65 6f 66  ocRaw(db, sizeof
15130 28 53 61 76 65 70 6f 69 6e 74 29 2b 6e 4e 61 6d  (Savepoint)+nNam
15140 65 2b 31 29 3b 0a 20 20 20 20 20 20 69 66 28 20  e+1);.      if( 
15150 70 4e 65 77 20 29 7b 0a 20 20 20 20 20 20 20 20  pNew ){.        
15160 70 4e 65 77 2d 3e 7a 4e 61 6d 65 20 3d 20 28 63  pNew->zName = (c
15170 68 61 72 20 2a 29 26 70 4e 65 77 5b 31 5d 3b 0a  har *)&pNew[1];.
15180 20 20 20 20 20 20 20 20 6d 65 6d 63 70 79 28 70          memcpy(p
15190 4e 65 77 2d 3e 7a 4e 61 6d 65 2c 20 7a 4e 61 6d  New->zName, zNam
151a0 65 2c 20 6e 4e 61 6d 65 2b 31 29 3b 0a 20 20 20  e, nName+1);.   
151b0 20 0a 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20   .        /* If 
151c0 74 68 65 72 65 20 69 73 20 6e 6f 20 6f 70 65 6e  there is no open
151d0 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68   transaction, th
151e0 65 6e 20 6d 61 72 6b 20 74 68 69 73 20 61 73 20  en mark this as 
151f0 61 20 73 70 65 63 69 61 6c 0a 20 20 20 20 20 20  a special.      
15200 20 20 2a 2a 20 22 74 72 61 6e 73 61 63 74 69 6f    ** "transactio
15210 6e 20 73 61 76 65 70 6f 69 6e 74 22 2e 20 2a 2f  n savepoint". */
15220 0a 20 20 20 20 20 20 20 20 69 66 28 20 64 62 2d  .        if( db-
15230 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20  >autoCommit ){. 
15240 20 20 20 20 20 20 20 20 20 64 62 2d 3e 61 75 74           db->aut
15250 6f 43 6f 6d 6d 69 74 20 3d 20 30 3b 0a 20 20 20  oCommit = 0;.   
15260 20 20 20 20 20 20 20 64 62 2d 3e 69 73 54 72 61         db->isTra
15270 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e  nsactionSavepoin
15280 74 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 7d  t = 1;.        }
15290 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20  else{.          
152a0 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 2b 2b  db->nSavepoint++
152b0 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
152c0 0a 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 6e 6b  .        /* Link
152d0 20 74 68 65 20 6e 65 77 20 73 61 76 65 70 6f 69   the new savepoi
152e0 6e 74 20 69 6e 74 6f 20 74 68 65 20 64 61 74 61  nt into the data
152f0 62 61 73 65 20 68 61 6e 64 6c 65 27 73 20 6c 69  base handle's li
15300 73 74 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 70  st. */.        p
15310 4e 65 77 2d 3e 70 4e 65 78 74 20 3d 20 64 62 2d  New->pNext = db-
15320 3e 70 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 20  >pSavepoint;.   
15330 20 20 20 20 20 64 62 2d 3e 70 53 61 76 65 70 6f       db->pSavepo
15340 69 6e 74 20 3d 20 70 4e 65 77 3b 0a 20 20 20 20  int = pNew;.    
15350 20 20 20 20 70 4e 65 77 2d 3e 6e 44 65 66 65 72      pNew->nDefer
15360 72 65 64 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44  redCons = db->nD
15370 65 66 65 72 72 65 64 43 6f 6e 73 3b 0a 20 20 20  eferredCons;.   
15380 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 65 6c     }.    }.  }el
15390 73 65 7b 0a 20 20 20 20 69 53 61 76 65 70 6f 69  se{.    iSavepoi
153a0 6e 74 20 3d 20 30 3b 0a 0a 20 20 20 20 2f 2a 20  nt = 0;..    /* 
153b0 46 69 6e 64 20 74 68 65 20 6e 61 6d 65 64 20 73  Find the named s
153c0 61 76 65 70 6f 69 6e 74 2e 20 49 66 20 74 68 65  avepoint. If the
153d0 72 65 20 69 73 20 6e 6f 20 73 75 63 68 20 73 61  re is no such sa
153e0 76 65 70 6f 69 6e 74 2c 20 74 68 65 6e 20 61 6e  vepoint, then an
153f0 0a 20 20 20 20 2a 2a 20 61 6e 20 65 72 72 6f 72  .    ** an error
15400 20 69 73 20 72 65 74 75 72 6e 65 64 20 74 6f 20   is returned to 
15410 74 68 65 20 75 73 65 72 2e 20 20 2a 2f 0a 20 20  the user.  */.  
15420 20 20 66 6f 72 28 0a 20 20 20 20 20 20 70 53 61    for(.      pSa
15430 76 65 70 6f 69 6e 74 20 3d 20 64 62 2d 3e 70 53  vepoint = db->pS
15440 61 76 65 70 6f 69 6e 74 3b 20 0a 20 20 20 20 20  avepoint; .     
15450 20 70 53 61 76 65 70 6f 69 6e 74 20 26 26 20 73   pSavepoint && s
15460 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 70 53  qlite3StrICmp(pS
15470 61 76 65 70 6f 69 6e 74 2d 3e 7a 4e 61 6d 65 2c  avepoint->zName,
15480 20 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 70   zName);.      p
15490 53 61 76 65 70 6f 69 6e 74 20 3d 20 70 53 61 76  Savepoint = pSav
154a0 65 70 6f 69 6e 74 2d 3e 70 4e 65 78 74 0a 20 20  epoint->pNext.  
154b0 20 20 29 7b 0a 20 20 20 20 20 20 69 53 61 76 65    ){.      iSave
154c0 70 6f 69 6e 74 2b 2b 3b 0a 20 20 20 20 7d 0a 20  point++;.    }. 
154d0 20 20 20 69 66 28 20 21 70 53 61 76 65 70 6f 69     if( !pSavepoi
154e0 6e 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  nt ){.      sqli
154f0 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d  te3SetString(&p-
15500 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 6e  >zErrMsg, db, "n
15510 6f 20 73 75 63 68 20 73 61 76 65 70 6f 69 6e 74  o such savepoint
15520 3a 20 25 73 22 2c 20 7a 4e 61 6d 65 29 3b 0a 20  : %s", zName);. 
15530 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
15540 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d 65 6c 73  _ERROR;.    }els
15550 65 20 69 66 28 20 0a 20 20 20 20 20 20 20 20 64  e if( .        d
15560 62 2d 3e 77 72 69 74 65 56 64 62 65 43 6e 74 3e  b->writeVdbeCnt>
15570 30 20 7c 7c 20 28 70 31 3d 3d 53 41 56 45 50 4f  0 || (p1==SAVEPO
15580 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 26 26 20  INT_ROLLBACK && 
15590 64 62 2d 3e 61 63 74 69 76 65 56 64 62 65 43 6e  db->activeVdbeCn
155a0 74 3e 31 29 20 0a 20 20 20 20 29 7b 0a 20 20 20  t>1) .    ){.   
155b0 20 20 20 2f 2a 20 49 74 20 69 73 20 6e 6f 74 20     /* It is not 
155c0 70 6f 73 73 69 62 6c 65 20 74 6f 20 72 65 6c 65  possible to rele
155d0 61 73 65 20 28 63 6f 6d 6d 69 74 29 20 61 20 73  ase (commit) a s
155e0 61 76 65 70 6f 69 6e 74 20 69 66 20 74 68 65 72  avepoint if ther
155f0 65 20 61 72 65 20 0a 20 20 20 20 20 20 2a 2a 20  e are .      ** 
15600 61 63 74 69 76 65 20 77 72 69 74 65 20 73 74 61  active write sta
15610 74 65 6d 65 6e 74 73 2e 20 49 74 20 69 73 20 6e  tements. It is n
15620 6f 74 20 70 6f 73 73 69 62 6c 65 20 74 6f 20 72  ot possible to r
15630 6f 6c 6c 62 61 63 6b 20 61 20 73 61 76 65 70 6f  ollback a savepo
15640 69 6e 74 0a 20 20 20 20 20 20 2a 2a 20 69 66 20  int.      ** if 
15650 74 68 65 72 65 20 61 72 65 20 61 6e 79 20 61 63  there are any ac
15660 74 69 76 65 20 73 74 61 74 65 6d 65 6e 74 73 20  tive statements 
15670 61 74 20 61 6c 6c 2e 0a 20 20 20 20 20 20 2a 2f  at all..      */
15680 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 53 65  .      sqlite3Se
15690 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72  tString(&p->zErr
156a0 4d 73 67 2c 20 64 62 2c 20 0a 20 20 20 20 20 20  Msg, db, .      
156b0 20 20 22 63 61 6e 6e 6f 74 20 25 73 20 73 61 76    "cannot %s sav
156c0 65 70 6f 69 6e 74 20 2d 20 53 51 4c 20 73 74 61  epoint - SQL sta
156d0 74 65 6d 65 6e 74 73 20 69 6e 20 70 72 6f 67 72  tements in progr
156e0 65 73 73 22 2c 0a 20 20 20 20 20 20 20 20 28 70  ess",.        (p
156f0 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c  1==SAVEPOINT_ROL
15700 4c 42 41 43 4b 20 3f 20 22 72 6f 6c 6c 62 61 63  LBACK ? "rollbac
15710 6b 22 3a 20 22 72 65 6c 65 61 73 65 22 29 0a 20  k": "release"). 
15720 20 20 20 20 20 29 3b 0a 20 20 20 20 20 20 72 63       );.      rc
15730 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a   = SQLITE_BUSY;.
15740 20 20 20 20 7d 65 6c 73 65 7b 0a 0a 20 20 20 20      }else{..    
15750 20 20 2f 2a 20 44 65 74 65 72 6d 69 6e 65 20 77    /* Determine w
15760 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68  hether or not th
15770 69 73 20 69 73 20 61 20 74 72 61 6e 73 61 63 74  is is a transact
15780 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 2e 20 49  ion savepoint. I
15790 66 20 73 6f 2c 0a 20 20 20 20 20 20 2a 2a 20 61  f so,.      ** a
157a0 6e 64 20 74 68 69 73 20 69 73 20 61 20 52 45 4c  nd this is a REL
157b0 45 41 53 45 20 63 6f 6d 6d 61 6e 64 2c 20 74 68  EASE command, th
157c0 65 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 74  en the current t
157d0 72 61 6e 73 61 63 74 69 6f 6e 20 0a 20 20 20 20  ransaction .    
157e0 20 20 2a 2a 20 69 73 20 63 6f 6d 6d 69 74 74 65    ** is committe
157f0 64 2e 20 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20  d. .      */.   
15800 20 20 20 69 6e 74 20 69 73 54 72 61 6e 73 61 63     int isTransac
15810 74 69 6f 6e 20 3d 20 70 53 61 76 65 70 6f 69 6e  tion = pSavepoin
15820 74 2d 3e 70 4e 65 78 74 3d 3d 30 20 26 26 20 64  t->pNext==0 && d
15830 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e  b->isTransaction
15840 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 20 20 20  Savepoint;.     
15850 20 69 66 28 20 69 73 54 72 61 6e 73 61 63 74 69   if( isTransacti
15860 6f 6e 20 26 26 20 70 31 3d 3d 53 41 56 45 50 4f  on && p1==SAVEPO
15870 49 4e 54 5f 52 45 4c 45 41 53 45 20 29 7b 0a 20  INT_RELEASE ){. 
15880 20 20 20 20 20 20 20 69 66 28 20 28 72 63 20 3d         if( (rc =
15890 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 65 63   sqlite3VdbeChec
158a0 6b 46 6b 28 70 2c 20 31 29 29 21 3d 53 51 4c 49  kFk(p, 1))!=SQLI
158b0 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20  TE_OK ){.       
158c0 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74     goto vdbe_ret
158d0 75 72 6e 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  urn;.        }. 
158e0 20 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43         db->autoC
158f0 6f 6d 6d 69 74 20 3d 20 31 3b 0a 20 20 20 20 20  ommit = 1;.     
15900 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64     if( sqlite3Vd
15910 62 65 48 61 6c 74 28 70 29 3d 3d 53 51 4c 49 54  beHalt(p)==SQLIT
15920 45 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 20 20  E_BUSY ){.      
15930 20 20 20 20 70 2d 3e 70 63 20 3d 20 70 63 3b 0a      p->pc = pc;.
15940 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 61 75            db->au
15950 74 6f 43 6f 6d 6d 69 74 20 3d 20 30 3b 0a 20 20  toCommit = 0;.  
15960 20 20 20 20 20 20 20 20 70 2d 3e 72 63 20 3d 20          p->rc = 
15970 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59  rc = SQLITE_BUSY
15980 3b 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f  ;.          goto
15990 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20   vdbe_return;.  
159a0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
159b0 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f  db->isTransactio
159c0 6e 53 61 76 65 70 6f 69 6e 74 20 3d 20 30 3b 0a  nSavepoint = 0;.
159d0 20 20 20 20 20 20 20 20 72 63 20 3d 20 70 2d 3e          rc = p->
159e0 72 63 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  rc;.      }else{
159f0 0a 20 20 20 20 20 20 20 20 69 53 61 76 65 70 6f  .        iSavepo
15a00 69 6e 74 20 3d 20 64 62 2d 3e 6e 53 61 76 65 70  int = db->nSavep
15a10 6f 69 6e 74 20 2d 20 69 53 61 76 65 70 6f 69 6e  oint - iSavepoin
15a20 74 20 2d 20 31 3b 0a 20 20 20 20 20 20 20 20 66  t - 1;.        f
15a30 6f 72 28 69 69 3d 30 3b 20 69 69 3c 64 62 2d 3e  or(ii=0; ii<db->
15a40 6e 44 62 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20  nDb; ii++){.    
15a50 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
15a60 65 33 42 74 72 65 65 53 61 76 65 70 6f 69 6e 74  e3BtreeSavepoint
15a70 28 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74  (db->aDb[ii].pBt
15a80 2c 20 70 31 2c 20 69 53 61 76 65 70 6f 69 6e 74  , p1, iSavepoint
15a90 29 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28  );.          if(
15aa0 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
15ab0 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 67 6f  {.            go
15ac0 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
15ad0 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 20  error;.         
15ae0 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20   }.        }.   
15af0 20 20 20 20 20 69 66 28 20 70 31 3d 3d 53 41 56       if( p1==SAV
15b00 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20  EPOINT_ROLLBACK 
15b10 26 26 20 28 64 62 2d 3e 66 6c 61 67 73 26 53 51  && (db->flags&SQ
15b20 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68 61 6e 67  LITE_InternChang
15b30 65 73 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20  es)!=0 ){.      
15b40 20 20 20 20 73 71 6c 69 74 65 33 45 78 70 69 72      sqlite3Expir
15b50 65 50 72 65 70 61 72 65 64 53 74 61 74 65 6d 65  ePreparedStateme
15b60 6e 74 73 28 64 62 29 3b 0a 20 20 20 20 20 20 20  nts(db);.       
15b70 20 20 20 73 71 6c 69 74 65 33 52 65 73 65 74 49     sqlite3ResetI
15b80 6e 74 65 72 6e 61 6c 53 63 68 65 6d 61 28 64 62  nternalSchema(db
15b90 2c 20 2d 31 29 3b 0a 20 20 20 20 20 20 20 20 20  , -1);.         
15ba0 20 64 62 2d 3e 66 6c 61 67 73 20 3d 20 28 64 62   db->flags = (db
15bb0 2d 3e 66 6c 61 67 73 20 7c 20 53 51 4c 49 54 45  ->flags | SQLITE
15bc0 5f 49 6e 74 65 72 6e 43 68 61 6e 67 65 73 29 3b  _InternChanges);
15bd0 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
15be0 20 7d 0a 20 20 0a 20 20 20 20 20 20 2f 2a 20 52   }.  .      /* R
15bf0 65 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68 65  egardless of whe
15c00 74 68 65 72 20 74 68 69 73 20 69 73 20 61 20 52  ther this is a R
15c10 45 4c 45 41 53 45 20 6f 72 20 52 4f 4c 4c 42 41  ELEASE or ROLLBA
15c20 43 4b 2c 20 64 65 73 74 72 6f 79 20 61 6c 6c 20  CK, destroy all 
15c30 0a 20 20 20 20 20 20 2a 2a 20 73 61 76 65 70 6f  .      ** savepo
15c40 69 6e 74 73 20 6e 65 73 74 65 64 20 69 6e 73 69  ints nested insi
15c50 64 65 20 6f 66 20 74 68 65 20 73 61 76 65 70 6f  de of the savepo
15c60 69 6e 74 20 62 65 69 6e 67 20 6f 70 65 72 61 74  int being operat
15c70 65 64 20 6f 6e 2e 20 2a 2f 0a 20 20 20 20 20 20  ed on. */.      
15c80 77 68 69 6c 65 28 20 64 62 2d 3e 70 53 61 76 65  while( db->pSave
15c90 70 6f 69 6e 74 21 3d 70 53 61 76 65 70 6f 69 6e  point!=pSavepoin
15ca0 74 20 29 7b 0a 20 20 20 20 20 20 20 20 70 54 6d  t ){.        pTm
15cb0 70 20 3d 20 64 62 2d 3e 70 53 61 76 65 70 6f 69  p = db->pSavepoi
15cc0 6e 74 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e  nt;.        db->
15cd0 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 70 54 6d  pSavepoint = pTm
15ce0 70 2d 3e 70 4e 65 78 74 3b 0a 20 20 20 20 20 20  p->pNext;.      
15cf0 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28    sqlite3DbFree(
15d00 64 62 2c 20 70 54 6d 70 29 3b 0a 20 20 20 20 20  db, pTmp);.     
15d10 20 20 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e     db->nSavepoin
15d20 74 2d 2d 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20  t--;.      }..  
15d30 20 20 20 20 2f 2a 20 49 66 20 69 74 20 69 73 20      /* If it is 
15d40 61 20 52 45 4c 45 41 53 45 2c 20 74 68 65 6e 20  a RELEASE, then 
15d50 64 65 73 74 72 6f 79 20 74 68 65 20 73 61 76 65  destroy the save
15d60 70 6f 69 6e 74 20 62 65 69 6e 67 20 6f 70 65 72  point being oper
15d70 61 74 65 64 20 6f 6e 20 0a 20 20 20 20 20 20 2a  ated on .      *
15d80 2a 20 74 6f 6f 2e 20 49 66 20 69 74 20 69 73 20  * too. If it is 
15d90 61 20 52 4f 4c 4c 42 41 43 4b 20 54 4f 2c 20 74  a ROLLBACK TO, t
15da0 68 65 6e 20 73 65 74 20 74 68 65 20 6e 75 6d 62  hen set the numb
15db0 65 72 20 6f 66 20 64 65 66 65 72 72 65 64 20 0a  er of deferred .
15dc0 20 20 20 20 20 20 2a 2a 20 63 6f 6e 73 74 72 61        ** constra
15dd0 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 73 20 70  int violations p
15de0 72 65 73 65 6e 74 20 69 6e 20 74 68 65 20 64 61  resent in the da
15df0 74 61 62 61 73 65 20 74 6f 20 74 68 65 20 76 61  tabase to the va
15e00 6c 75 65 20 73 74 6f 72 65 64 0a 20 20 20 20 20  lue stored.     
15e10 20 2a 2a 20 77 68 65 6e 20 74 68 65 20 73 61 76   ** when the sav
15e20 65 70 6f 69 6e 74 20 77 61 73 20 63 72 65 61 74  epoint was creat
15e30 65 64 2e 20 20 2a 2f 0a 20 20 20 20 20 20 69 66  ed.  */.      if
15e40 28 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f  ( p1==SAVEPOINT_
15e50 52 45 4c 45 41 53 45 20 29 7b 0a 20 20 20 20 20  RELEASE ){.     
15e60 20 20 20 61 73 73 65 72 74 28 20 70 53 61 76 65     assert( pSave
15e70 70 6f 69 6e 74 3d 3d 64 62 2d 3e 70 53 61 76 65  point==db->pSave
15e80 70 6f 69 6e 74 20 29 3b 0a 20 20 20 20 20 20 20  point );.       
15e90 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20   db->pSavepoint 
15ea0 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 70 4e  = pSavepoint->pN
15eb0 65 78 74 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  ext;.        sql
15ec0 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 70  ite3DbFree(db, p
15ed0 53 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20  Savepoint);.    
15ee0 20 20 20 20 69 66 28 20 21 69 73 54 72 61 6e 73      if( !isTrans
15ef0 61 63 74 69 6f 6e 20 29 7b 0a 20 20 20 20 20 20  action ){.      
15f00 20 20 20 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69      db->nSavepoi
15f10 6e 74 2d 2d 3b 0a 20 20 20 20 20 20 20 20 7d 0a  nt--;.        }.
15f20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
15f30 20 20 20 20 20 64 62 2d 3e 6e 44 65 66 65 72 72       db->nDeferr
15f40 65 64 43 6f 6e 73 20 3d 20 70 53 61 76 65 70 6f  edCons = pSavepo
15f50 69 6e 74 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f  int->nDeferredCo
15f60 6e 73 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20  ns;.      }..   
15f70 20 20 20 69 66 28 20 21 69 73 54 72 61 6e 73 61     if( !isTransa
15f80 63 74 69 6f 6e 20 29 7b 0a 20 20 20 20 20 20 20  ction ){.       
15f90 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61   rc = sqlite3Vta
15fa0 62 53 61 76 65 70 6f 69 6e 74 28 64 62 2c 20 70  bSavepoint(db, p
15fb0 31 2c 20 69 53 61 76 65 70 6f 69 6e 74 29 3b 0a  1, iSavepoint);.
15fc0 20 20 20 20 20 20 20 20 69 66 28 20 72 63 21 3d          if( rc!=
15fd0 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f  SQLITE_OK ) goto
15fe0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
15ff0 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  ror;.      }.   
16000 20 7d 0a 20 20 7d 0a 0a 20 20 62 72 65 61 6b 3b   }.  }..  break;
16010 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41  .}../* Opcode: A
16020 75 74 6f 43 6f 6d 6d 69 74 20 50 31 20 50 32 20  utoCommit P1 P2 
16030 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 65 74 20  * * *.**.** Set 
16040 74 68 65 20 64 61 74 61 62 61 73 65 20 61 75 74  the database aut
16050 6f 2d 63 6f 6d 6d 69 74 20 66 6c 61 67 20 74 6f  o-commit flag to
16060 20 50 31 20 28 31 20 6f 72 20 30 29 2e 20 49 66   P1 (1 or 0). If
16070 20 50 32 20 69 73 20 74 72 75 65 2c 20 72 6f 6c   P2 is true, rol
16080 6c 0a 2a 2a 20 62 61 63 6b 20 61 6e 79 20 63 75  l.** back any cu
16090 72 72 65 6e 74 6c 79 20 61 63 74 69 76 65 20 62  rrently active b
160a0 74 72 65 65 20 74 72 61 6e 73 61 63 74 69 6f 6e  tree transaction
160b0 73 2e 20 49 66 20 74 68 65 72 65 20 61 72 65 20  s. If there are 
160c0 61 6e 79 20 61 63 74 69 76 65 0a 2a 2a 20 56 4d  any active.** VM
160d0 73 20 28 61 70 61 72 74 20 66 72 6f 6d 20 74 68  s (apart from th
160e0 69 73 20 6f 6e 65 29 2c 20 74 68 65 6e 20 61 20  is one), then a 
160f0 52 4f 4c 4c 42 41 43 4b 20 66 61 69 6c 73 2e 20  ROLLBACK fails. 
16100 20 41 20 43 4f 4d 4d 49 54 20 66 61 69 6c 73 20   A COMMIT fails 
16110 69 66 0a 2a 2a 20 74 68 65 72 65 20 61 72 65 20  if.** there are 
16120 61 63 74 69 76 65 20 77 72 69 74 69 6e 67 20 56  active writing V
16130 4d 73 20 6f 72 20 61 63 74 69 76 65 20 56 4d 73  Ms or active VMs
16140 20 74 68 61 74 20 75 73 65 20 73 68 61 72 65 64   that use shared
16150 20 63 61 63 68 65 2e 0a 2a 2a 0a 2a 2a 20 54 68   cache..**.** Th
16160 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 63  is instruction c
16170 61 75 73 65 73 20 74 68 65 20 56 4d 20 74 6f 20  auses the VM to 
16180 68 61 6c 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  halt..*/.case OP
16190 5f 41 75 74 6f 43 6f 6d 6d 69 74 3a 20 7b 0a 20  _AutoCommit: {. 
161a0 20 69 6e 74 20 64 65 73 69 72 65 64 41 75 74 6f   int desiredAuto
161b0 43 6f 6d 6d 69 74 3b 0a 20 20 69 6e 74 20 69 52  Commit;.  int iR
161c0 6f 6c 6c 62 61 63 6b 3b 0a 20 20 69 6e 74 20 74  ollback;.  int t
161d0 75 72 6e 4f 6e 41 43 3b 0a 0a 20 20 64 65 73 69  urnOnAC;..  desi
161e0 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 20 3d 20  redAutoCommit = 
161f0 70 4f 70 2d 3e 70 31 3b 0a 20 20 69 52 6f 6c 6c  pOp->p1;.  iRoll
16200 62 61 63 6b 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a  back = pOp->p2;.
16210 20 20 74 75 72 6e 4f 6e 41 43 20 3d 20 64 65 73    turnOnAC = des
16220 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 20 26  iredAutoCommit &
16230 26 20 21 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69  & !db->autoCommi
16240 74 3b 0a 20 20 61 73 73 65 72 74 28 20 64 65 73  t;.  assert( des
16250 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d  iredAutoCommit==
16260 31 20 7c 7c 20 64 65 73 69 72 65 64 41 75 74 6f  1 || desiredAuto
16270 43 6f 6d 6d 69 74 3d 3d 30 20 29 3b 0a 20 20 61  Commit==0 );.  a
16280 73 73 65 72 74 28 20 64 65 73 69 72 65 64 41 75  ssert( desiredAu
16290 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20 7c 7c 20 69  toCommit==1 || i
162a0 52 6f 6c 6c 62 61 63 6b 3d 3d 30 20 29 3b 0a 20  Rollback==0 );. 
162b0 20 61 73 73 65 72 74 28 20 64 62 2d 3e 61 63 74   assert( db->act
162c0 69 76 65 56 64 62 65 43 6e 74 3e 30 20 29 3b 20  iveVdbeCnt>0 ); 
162d0 20 2f 2a 20 41 74 20 6c 65 61 73 74 20 74 68 69   /* At least thi
162e0 73 20 6f 6e 65 20 56 4d 20 69 73 20 61 63 74 69  s one VM is acti
162f0 76 65 20 2a 2f 0a 0a 20 20 69 66 28 20 74 75 72  ve */..  if( tur
16300 6e 4f 6e 41 43 20 26 26 20 69 52 6f 6c 6c 62 61  nOnAC && iRollba
16310 63 6b 20 26 26 20 64 62 2d 3e 61 63 74 69 76 65  ck && db->active
16320 56 64 62 65 43 6e 74 3e 31 20 29 7b 0a 20 20 20  VdbeCnt>1 ){.   
16330 20 2f 2a 20 49 66 20 74 68 69 73 20 69 6e 73 74   /* If this inst
16340 72 75 63 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e  ruction implemen
16350 74 73 20 61 20 52 4f 4c 4c 42 41 43 4b 20 61 6e  ts a ROLLBACK an
16360 64 20 6f 74 68 65 72 20 56 4d 73 20 61 72 65 0a  d other VMs are.
16370 20 20 20 20 2a 2a 20 73 74 69 6c 6c 20 72 75 6e      ** still run
16380 6e 69 6e 67 2c 20 61 6e 64 20 61 20 74 72 61 6e  ning, and a tran
16390 73 61 63 74 69 6f 6e 20 69 73 20 61 63 74 69 76  saction is activ
163a0 65 2c 20 72 65 74 75 72 6e 20 61 6e 20 65 72 72  e, return an err
163b0 6f 72 20 69 6e 64 69 63 61 74 69 6e 67 0a 20 20  or indicating.  
163c0 20 20 2a 2a 20 74 68 61 74 20 74 68 65 20 6f 74    ** that the ot
163d0 68 65 72 20 56 4d 73 20 6d 75 73 74 20 63 6f 6d  her VMs must com
163e0 70 6c 65 74 65 20 66 69 72 73 74 2e 20 0a 20 20  plete first. .  
163f0 20 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33    */.    sqlite3
16400 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45  SetString(&p->zE
16410 72 72 4d 73 67 2c 20 64 62 2c 20 22 63 61 6e 6e  rrMsg, db, "cann
16420 6f 74 20 72 6f 6c 6c 62 61 63 6b 20 74 72 61 6e  ot rollback tran
16430 73 61 63 74 69 6f 6e 20 2d 20 22 0a 20 20 20 20  saction - ".    
16440 20 20 20 20 22 53 51 4c 20 73 74 61 74 65 6d 65      "SQL stateme
16450 6e 74 73 20 69 6e 20 70 72 6f 67 72 65 73 73 22  nts in progress"
16460 29 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49  );.    rc = SQLI
16470 54 45 5f 42 55 53 59 3b 0a 20 20 7d 65 6c 73 65  TE_BUSY;.  }else
16480 20 69 66 28 20 74 75 72 6e 4f 6e 41 43 20 26 26   if( turnOnAC &&
16490 20 21 69 52 6f 6c 6c 62 61 63 6b 20 26 26 20 64   !iRollback && d
164a0 62 2d 3e 77 72 69 74 65 56 64 62 65 43 6e 74 3e  b->writeVdbeCnt>
164b0 30 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74  0 ){.    /* If t
164c0 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
164d0 69 6d 70 6c 65 6d 65 6e 74 73 20 61 20 43 4f 4d  implements a COM
164e0 4d 49 54 20 61 6e 64 20 6f 74 68 65 72 20 56 4d  MIT and other VM
164f0 73 20 61 72 65 20 77 72 69 74 69 6e 67 0a 20 20  s are writing.  
16500 20 20 2a 2a 20 72 65 74 75 72 6e 20 61 6e 20 65    ** return an e
16510 72 72 6f 72 20 69 6e 64 69 63 61 74 69 6e 67 20  rror indicating 
16520 74 68 61 74 20 74 68 65 20 6f 74 68 65 72 20 56  that the other V
16530 4d 73 20 6d 75 73 74 20 63 6f 6d 70 6c 65 74 65  Ms must complete
16540 20 66 69 72 73 74 2e 20 0a 20 20 20 20 2a 2f 0a   first. .    */.
16550 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74      sqlite3SetSt
16560 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67  ring(&p->zErrMsg
16570 2c 20 64 62 2c 20 22 63 61 6e 6e 6f 74 20 63 6f  , db, "cannot co
16580 6d 6d 69 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  mmit transaction
16590 20 2d 20 22 0a 20 20 20 20 20 20 20 20 22 53 51   - ".        "SQ
165a0 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20  L statements in 
165b0 70 72 6f 67 72 65 73 73 22 29 3b 0a 20 20 20 20  progress");.    
165c0 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59  rc = SQLITE_BUSY
165d0 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 64 65  ;.  }else if( de
165e0 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 21  siredAutoCommit!
165f0 3d 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20  =db->autoCommit 
16600 29 7b 0a 20 20 20 20 69 66 28 20 69 52 6f 6c 6c  ){.    if( iRoll
16610 62 61 63 6b 20 29 7b 0a 20 20 20 20 20 20 61 73  back ){.      as
16620 73 65 72 74 28 20 64 65 73 69 72 65 64 41 75 74  sert( desiredAut
16630 6f 43 6f 6d 6d 69 74 3d 3d 31 20 29 3b 0a 20 20  oCommit==1 );.  
16640 20 20 20 20 73 71 6c 69 74 65 33 52 6f 6c 6c 62      sqlite3Rollb
16650 61 63 6b 41 6c 6c 28 64 62 29 3b 0a 20 20 20 20  ackAll(db);.    
16660 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74    db->autoCommit
16670 20 3d 20 31 3b 0a 20 20 20 20 7d 65 6c 73 65 20   = 1;.    }else 
16680 69 66 28 20 28 72 63 20 3d 20 73 71 6c 69 74 65  if( (rc = sqlite
16690 33 56 64 62 65 43 68 65 63 6b 46 6b 28 70 2c 20  3VdbeCheckFk(p, 
166a0 31 29 29 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29  1))!=SQLITE_OK )
166b0 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62  {.      goto vdb
166c0 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 7d 65  e_return;.    }e
166d0 6c 73 65 7b 0a 20 20 20 20 20 20 64 62 2d 3e 61  lse{.      db->a
166e0 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 28 75 38 29  utoCommit = (u8)
166f0 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69  desiredAutoCommi
16700 74 3b 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c  t;.      if( sql
16710 69 74 65 33 56 64 62 65 48 61 6c 74 28 70 29 3d  ite3VdbeHalt(p)=
16720 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a  =SQLITE_BUSY ){.
16730 20 20 20 20 20 20 20 20 70 2d 3e 70 63 20 3d 20          p->pc = 
16740 70 63 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e  pc;.        db->
16750 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 28 75 38  autoCommit = (u8
16760 29 28 31 2d 64 65 73 69 72 65 64 41 75 74 6f 43  )(1-desiredAutoC
16770 6f 6d 6d 69 74 29 3b 0a 20 20 20 20 20 20 20 20  ommit);.        
16780 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53 51 4c  p->rc = rc = SQL
16790 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 20 20  ITE_BUSY;.      
167a0 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75    goto vdbe_retu
167b0 72 6e 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  rn;.      }.    
167c0 7d 0a 20 20 20 20 61 73 73 65 72 74 28 20 64 62  }.    assert( db
167d0 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 3d 3d 30 20  ->nStatement==0 
167e0 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 43 6c  );.    sqlite3Cl
167f0 6f 73 65 53 61 76 65 70 6f 69 6e 74 73 28 64 62  oseSavepoints(db
16800 29 3b 0a 20 20 20 20 69 66 28 20 70 2d 3e 72 63  );.    if( p->rc
16810 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
16820 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
16830 5f 44 4f 4e 45 3b 0a 20 20 20 20 7d 65 6c 73 65  _DONE;.    }else
16840 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c  {.      rc = SQL
16850 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d  ITE_ERROR;.    }
16860 0a 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72  .    goto vdbe_r
16870 65 74 75 72 6e 3b 0a 20 20 7d 65 6c 73 65 7b 0a  eturn;.  }else{.
16880 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74      sqlite3SetSt
16890 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67  ring(&p->zErrMsg
168a0 2c 20 64 62 2c 0a 20 20 20 20 20 20 20 20 28 21  , db,.        (!
168b0 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69  desiredAutoCommi
168c0 74 29 3f 22 63 61 6e 6e 6f 74 20 73 74 61 72 74  t)?"cannot start
168d0 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 77   a transaction w
168e0 69 74 68 69 6e 20 61 20 74 72 61 6e 73 61 63 74  ithin a transact
168f0 69 6f 6e 22 3a 28 0a 20 20 20 20 20 20 20 20 28  ion":(.        (
16900 69 52 6f 6c 6c 62 61 63 6b 29 3f 22 63 61 6e 6e  iRollback)?"cann
16910 6f 74 20 72 6f 6c 6c 62 61 63 6b 20 2d 20 6e 6f  ot rollback - no
16920 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20   transaction is 
16930 61 63 74 69 76 65 22 3a 0a 20 20 20 20 20 20 20  active":.       
16940 20 20 20 20 20 20 20 20 20 20 20 20 22 63 61 6e              "can
16950 6e 6f 74 20 63 6f 6d 6d 69 74 20 2d 20 6e 6f 20  not commit - no 
16960 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 61  transaction is a
16970 63 74 69 76 65 22 29 29 3b 0a 20 20 20 20 20 20  ctive"));.      
16980 20 20 20 0a 20 20 20 20 72 63 20 3d 20 53 51 4c     .    rc = SQL
16990 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20  ITE_ERROR;.  }. 
169a0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
169b0 63 6f 64 65 3a 20 54 72 61 6e 73 61 63 74 69 6f  code: Transactio
169c0 6e 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  n P1 P2 * * *.**
169d0 0a 2a 2a 20 42 65 67 69 6e 20 61 20 74 72 61 6e  .** Begin a tran
169e0 73 61 63 74 69 6f 6e 2e 20 20 54 68 65 20 74 72  saction.  The tr
169f0 61 6e 73 61 63 74 69 6f 6e 20 65 6e 64 73 20 77  ansaction ends w
16a00 68 65 6e 20 61 20 43 6f 6d 6d 69 74 20 6f 72 20  hen a Commit or 
16a10 52 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 6f 70 63 6f  Rollback.** opco
16a20 64 65 20 69 73 20 65 6e 63 6f 75 6e 74 65 72 65  de is encountere
16a30 64 2e 20 20 44 65 70 65 6e 64 69 6e 67 20 6f 6e  d.  Depending on
16a40 20 74 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54   the ON CONFLICT
16a50 20 73 65 74 74 69 6e 67 2c 20 74 68 65 0a 2a 2a   setting, the.**
16a60 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 69 67   transaction mig
16a70 68 74 20 61 6c 73 6f 20 62 65 20 72 6f 6c 6c 65  ht also be rolle
16a80 64 20 62 61 63 6b 20 69 66 20 61 6e 20 65 72 72  d back if an err
16a90 6f 72 20 69 73 20 65 6e 63 6f 75 6e 74 65 72 65  or is encountere
16aa0 64 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74  d..**.** P1 is t
16ab0 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20  he index of the 
16ac0 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 6f 6e  database file on
16ad0 20 77 68 69 63 68 20 74 68 65 20 74 72 61 6e 73   which the trans
16ae0 61 63 74 69 6f 6e 20 69 73 0a 2a 2a 20 73 74 61  action is.** sta
16af0 72 74 65 64 2e 20 20 49 6e 64 65 78 20 30 20 69  rted.  Index 0 i
16b00 73 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  s the main datab
16b10 61 73 65 20 66 69 6c 65 20 61 6e 64 20 69 6e 64  ase file and ind
16b20 65 78 20 31 20 69 73 20 74 68 65 0a 2a 2a 20 66  ex 1 is the.** f
16b30 69 6c 65 20 75 73 65 64 20 66 6f 72 20 74 65 6d  ile used for tem
16b40 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 20 20  porary tables.  
16b50 49 6e 64 69 63 65 73 20 6f 66 20 32 20 6f 72 20  Indices of 2 or 
16b60 6d 6f 72 65 20 61 72 65 20 75 73 65 64 20 66 6f  more are used fo
16b70 72 0a 2a 2a 20 61 74 74 61 63 68 65 64 20 64 61  r.** attached da
16b80 74 61 62 61 73 65 73 2e 0a 2a 2a 0a 2a 2a 20 49  tabases..**.** I
16b90 66 20 50 32 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f  f P2 is non-zero
16ba0 2c 20 74 68 65 6e 20 61 20 77 72 69 74 65 2d 74  , then a write-t
16bb0 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 73 74  ransaction is st
16bc0 61 72 74 65 64 2e 20 20 41 20 52 45 53 45 52 56  arted.  A RESERV
16bd0 45 44 20 6c 6f 63 6b 20 69 73 0a 2a 2a 20 6f 62  ED lock is.** ob
16be0 74 61 69 6e 65 64 20 6f 6e 20 74 68 65 20 64 61  tained on the da
16bf0 74 61 62 61 73 65 20 66 69 6c 65 20 77 68 65 6e  tabase file when
16c00 20 61 20 77 72 69 74 65 2d 74 72 61 6e 73 61 63   a write-transac
16c10 74 69 6f 6e 20 69 73 20 73 74 61 72 74 65 64 2e  tion is started.
16c20 20 20 4e 6f 0a 2a 2a 20 6f 74 68 65 72 20 70 72    No.** other pr
16c30 6f 63 65 73 73 20 63 61 6e 20 73 74 61 72 74 20  ocess can start 
16c40 61 6e 6f 74 68 65 72 20 77 72 69 74 65 20 74 72  another write tr
16c50 61 6e 73 61 63 74 69 6f 6e 20 77 68 69 6c 65 20  ansaction while 
16c60 74 68 69 73 20 74 72 61 6e 73 61 63 74 69 6f 6e  this transaction
16c70 20 69 73 0a 2a 2a 20 75 6e 64 65 72 77 61 79 2e   is.** underway.
16c80 20 20 53 74 61 72 74 69 6e 67 20 61 20 77 72 69    Starting a wri
16c90 74 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61  te transaction a
16ca0 6c 73 6f 20 63 72 65 61 74 65 73 20 61 20 72 6f  lso creates a ro
16cb0 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 2e 20  llback journal. 
16cc0 41 0a 2a 2a 20 77 72 69 74 65 20 74 72 61 6e 73  A.** write trans
16cd0 61 63 74 69 6f 6e 20 6d 75 73 74 20 62 65 20 73  action must be s
16ce0 74 61 72 74 65 64 20 62 65 66 6f 72 65 20 61 6e  tarted before an
16cf0 79 20 63 68 61 6e 67 65 73 20 63 61 6e 20 62 65  y changes can be
16d00 20 6d 61 64 65 20 74 6f 20 74 68 65 0a 2a 2a 20   made to the.** 
16d10 64 61 74 61 62 61 73 65 2e 20 20 49 66 20 50 32  database.  If P2
16d20 20 69 73 20 32 20 6f 72 20 67 72 65 61 74 65 72   is 2 or greater
16d30 20 74 68 65 6e 20 61 6e 20 45 58 43 4c 55 53 49   then an EXCLUSI
16d40 56 45 20 6c 6f 63 6b 20 69 73 20 61 6c 73 6f 20  VE lock is also 
16d50 6f 62 74 61 69 6e 65 64 0a 2a 2a 20 6f 6e 20 74  obtained.** on t
16d60 68 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49  he file..**.** I
16d70 66 20 61 20 77 72 69 74 65 2d 74 72 61 6e 73 61  f a write-transa
16d80 63 74 69 6f 6e 20 69 73 20 73 74 61 72 74 65 64  ction is started
16d90 20 61 6e 64 20 74 68 65 20 56 64 62 65 2e 75 73   and the Vdbe.us
16da0 65 73 53 74 6d 74 4a 6f 75 72 6e 61 6c 20 66 6c  esStmtJournal fl
16db0 61 67 20 69 73 0a 2a 2a 20 74 72 75 65 20 28 74  ag is.** true (t
16dc0 68 69 73 20 66 6c 61 67 20 69 73 20 73 65 74 20  his flag is set 
16dd0 69 66 20 74 68 65 20 56 64 62 65 20 6d 61 79 20  if the Vdbe may 
16de0 6d 6f 64 69 66 79 20 6d 6f 72 65 20 74 68 61 6e  modify more than
16df0 20 6f 6e 65 20 72 6f 77 20 61 6e 64 20 6d 61 79   one row and may
16e00 0a 2a 2a 20 74 68 72 6f 77 20 61 6e 20 41 42 4f  .** throw an ABO
16e10 52 54 20 65 78 63 65 70 74 69 6f 6e 29 2c 20 61  RT exception), a
16e20 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73   statement trans
16e30 61 63 74 69 6f 6e 20 6d 61 79 20 61 6c 73 6f 20  action may also 
16e40 62 65 20 6f 70 65 6e 65 64 2e 0a 2a 2a 20 4d 6f  be opened..** Mo
16e50 72 65 20 73 70 65 63 69 66 69 63 61 6c 6c 79 2c  re specifically,
16e60 20 61 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61   a statement tra
16e70 6e 73 61 63 74 69 6f 6e 20 69 73 20 6f 70 65 6e  nsaction is open
16e80 65 64 20 69 66 66 20 74 68 65 20 64 61 74 61 62  ed iff the datab
16e90 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f  ase.** connectio
16ea0 6e 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 6e  n is currently n
16eb0 6f 74 20 69 6e 20 61 75 74 6f 63 6f 6d 6d 69 74  ot in autocommit
16ec0 20 6d 6f 64 65 2c 20 6f 72 20 69 66 20 74 68 65   mode, or if the
16ed0 72 65 20 61 72 65 20 6f 74 68 65 72 0a 2a 2a 20  re are other.** 
16ee0 61 63 74 69 76 65 20 73 74 61 74 65 6d 65 6e 74  active statement
16ef0 73 2e 20 41 20 73 74 61 74 65 6d 65 6e 74 20 74  s. A statement t
16f00 72 61 6e 73 61 63 74 69 6f 6e 20 61 6c 6c 6f 77  ransaction allow
16f10 73 20 74 68 65 20 61 66 66 65 63 74 73 20 6f 66  s the affects of
16f20 20 74 68 69 73 0a 2a 2a 20 56 44 42 45 20 74 6f   this.** VDBE to
16f30 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 20   be rolled back 
16f40 61 66 74 65 72 20 61 6e 20 65 72 72 6f 72 20 77  after an error w
16f50 69 74 68 6f 75 74 20 68 61 76 69 6e 67 20 74 6f  ithout having to
16f60 20 72 6f 6c 6c 20 62 61 63 6b 20 74 68 65 0a 2a   roll back the.*
16f70 2a 20 65 6e 74 69 72 65 20 74 72 61 6e 73 61 63  * entire transac
16f80 74 69 6f 6e 2e 20 49 66 20 6e 6f 20 65 72 72 6f  tion. If no erro
16f90 72 20 69 73 20 65 6e 63 6f 75 6e 74 65 72 65 64  r is encountered
16fa0 2c 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20  , the statement 
16fb0 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 77  transaction.** w
16fc0 69 6c 6c 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c  ill automaticall
16fd0 79 20 63 6f 6d 6d 69 74 20 77 68 65 6e 20 74 68  y commit when th
16fe0 65 20 56 44 42 45 20 68 61 6c 74 73 2e 0a 2a 2a  e VDBE halts..**
16ff0 0a 2a 2a 20 49 66 20 50 32 20 69 73 20 7a 65 72  .** If P2 is zer
17000 6f 2c 20 74 68 65 6e 20 61 20 72 65 61 64 2d 6c  o, then a read-l
17010 6f 63 6b 20 69 73 20 6f 62 74 61 69 6e 65 64 20  ock is obtained 
17020 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  on the database 
17030 66 69 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  file..*/.case OP
17040 5f 54 72 61 6e 73 61 63 74 69 6f 6e 3a 20 7b 0a  _Transaction: {.
17050 20 20 42 74 72 65 65 20 2a 70 42 74 3b 0a 0a 20    Btree *pBt;.. 
17060 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
17070 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64  >=0 && pOp->p1<d
17080 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65  b->nDb );.  asse
17090 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73  rt( (p->btreeMas
170a0 6b 20 26 20 28 28 28 79 44 62 4d 61 73 6b 29 31  k & (((yDbMask)1
170b0 29 3c 3c 70 4f 70 2d 3e 70 31 29 29 21 3d 30 20  )<<pOp->p1))!=0 
170c0 29 3b 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e 61  );.  pBt = db->a
170d0 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b  Db[pOp->p1].pBt;
170e0 0a 0a 20 20 69 66 28 20 70 42 74 20 29 7b 0a 20  ..  if( pBt ){. 
170f0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
17100 74 72 65 65 42 65 67 69 6e 54 72 61 6e 73 28 70  treeBeginTrans(p
17110 42 74 2c 20 70 4f 70 2d 3e 70 32 29 3b 0a 20 20  Bt, pOp->p2);.  
17120 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
17130 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 20 20 70  _BUSY ){.      p
17140 2d 3e 70 63 20 3d 20 70 63 3b 0a 20 20 20 20 20  ->pc = pc;.     
17150 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53 51   p->rc = rc = SQ
17160 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 20  LITE_BUSY;.     
17170 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72   goto vdbe_retur
17180 6e 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  n;.    }.    if(
17190 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
171a0 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f  {.      goto abo
171b0 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
171c0 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69 66 28 20  .    }..    if( 
171d0 70 4f 70 2d 3e 70 32 20 26 26 20 70 2d 3e 75 73  pOp->p2 && p->us
171e0 65 73 53 74 6d 74 4a 6f 75 72 6e 61 6c 20 0a 20  esStmtJournal . 
171f0 20 20 20 20 26 26 20 28 64 62 2d 3e 61 75 74 6f      && (db->auto
17200 43 6f 6d 6d 69 74 3d 3d 30 20 7c 7c 20 64 62 2d  Commit==0 || db-
17210 3e 61 63 74 69 76 65 56 64 62 65 43 6e 74 3e 31  >activeVdbeCnt>1
17220 29 20 0a 20 20 20 20 29 7b 0a 20 20 20 20 20 20  ) .    ){.      
17230 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 42  assert( sqlite3B
17240 74 72 65 65 49 73 49 6e 54 72 61 6e 73 28 70 42  treeIsInTrans(pB
17250 74 29 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20  t) );.      if( 
17260 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 3d 3d 30  p->iStatement==0
17270 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65   ){.        asse
17280 72 74 28 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65  rt( db->nStateme
17290 6e 74 3e 3d 30 20 26 26 20 64 62 2d 3e 6e 53 61  nt>=0 && db->nSa
172a0 76 65 70 6f 69 6e 74 3e 3d 30 20 29 3b 0a 20 20  vepoint>=0 );.  
172b0 20 20 20 20 20 20 64 62 2d 3e 6e 53 74 61 74 65        db->nState
172c0 6d 65 6e 74 2b 2b 3b 20 0a 20 20 20 20 20 20 20  ment++; .       
172d0 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 20 3d   p->iStatement =
172e0 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 20   db->nSavepoint 
172f0 2b 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74  + db->nStatement
17300 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20  ;.      }..     
17310 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61   rc = sqlite3Vta
17320 62 53 61 76 65 70 6f 69 6e 74 28 64 62 2c 20 53  bSavepoint(db, S
17330 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 2c 20  AVEPOINT_BEGIN, 
17340 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 2d 31 29  p->iStatement-1)
17350 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d  ;.      if( rc==
17360 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
17370 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
17380 33 42 74 72 65 65 42 65 67 69 6e 53 74 6d 74 28  3BtreeBeginStmt(
17390 70 42 74 2c 20 70 2d 3e 69 53 74 61 74 65 6d 65  pBt, p->iStateme
173a0 6e 74 29 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20  nt);.      }..  
173b0 20 20 20 20 2f 2a 20 53 74 6f 72 65 20 74 68 65      /* Store the
173c0 20 63 75 72 72 65 6e 74 20 76 61 6c 75 65 20 6f   current value o
173d0 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68  f the database h
173e0 61 6e 64 6c 65 73 20 64 65 66 65 72 72 65 64 20  andles deferred 
173f0 63 6f 6e 73 74 72 61 69 6e 74 0a 20 20 20 20 20  constraint.     
17400 20 2a 2a 20 63 6f 75 6e 74 65 72 2e 20 49 66 20   ** counter. If 
17410 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74 72  the statement tr
17420 61 6e 73 61 63 74 69 6f 6e 20 6e 65 65 64 73 20  ansaction needs 
17430 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63  to be rolled bac
17440 6b 2c 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 20  k,.      ** the 
17450 76 61 6c 75 65 20 6f 66 20 74 68 69 73 20 63 6f  value of this co
17460 75 6e 74 65 72 20 6e 65 65 64 73 20 74 6f 20 62  unter needs to b
17470 65 20 72 65 73 74 6f 72 65 64 20 74 6f 6f 2e 20  e restored too. 
17480 20 2a 2f 0a 20 20 20 20 20 20 70 2d 3e 6e 53 74   */.      p->nSt
17490 6d 74 44 65 66 43 6f 6e 73 20 3d 20 64 62 2d 3e  mtDefCons = db->
174a0 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 0a 20  nDeferredCons;. 
174b0 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b     }.  }.  break
174c0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
174d0 52 65 61 64 43 6f 6f 6b 69 65 20 50 31 20 50 32  ReadCookie P1 P2
174e0 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52 65   P3 * *.**.** Re
174f0 61 64 20 63 6f 6f 6b 69 65 20 6e 75 6d 62 65 72  ad cookie number
17500 20 50 33 20 66 72 6f 6d 20 64 61 74 61 62 61 73   P3 from databas
17510 65 20 50 31 20 61 6e 64 20 77 72 69 74 65 20 69  e P1 and write i
17520 74 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  t into register 
17530 50 32 2e 0a 2a 2a 20 50 33 3d 3d 31 20 69 73 20  P2..** P3==1 is 
17540 74 68 65 20 73 63 68 65 6d 61 20 76 65 72 73 69  the schema versi
17550 6f 6e 2e 20 20 50 33 3d 3d 32 20 69 73 20 74 68  on.  P3==2 is th
17560 65 20 64 61 74 61 62 61 73 65 20 66 6f 72 6d 61  e database forma
17570 74 2e 0a 2a 2a 20 50 33 3d 3d 33 20 69 73 20 74  t..** P3==3 is t
17580 68 65 20 72 65 63 6f 6d 6d 65 6e 64 65 64 20 70  he recommended p
17590 61 67 65 72 20 63 61 63 68 65 20 73 69 7a 65 2c  ager cache size,
175a0 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20 20   and so forth.  
175b0 50 31 3d 3d 30 20 69 73 0a 2a 2a 20 74 68 65 20  P1==0 is.** the 
175c0 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69  main database fi
175d0 6c 65 20 61 6e 64 20 50 31 3d 3d 31 20 69 73 20  le and P1==1 is 
175e0 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
175f0 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 0a  e used to store.
17600 2a 2a 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62  ** temporary tab
17610 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65  les..**.** There
17620 20 6d 75 73 74 20 62 65 20 61 20 72 65 61 64 2d   must be a read-
17630 6c 6f 63 6b 20 6f 6e 20 74 68 65 20 64 61 74 61  lock on the data
17640 62 61 73 65 20 28 65 69 74 68 65 72 20 61 20 74  base (either a t
17650 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 6d 75  ransaction.** mu
17660 73 74 20 62 65 20 73 74 61 72 74 65 64 20 6f 72  st be started or
17670 20 74 68 65 72 65 20 6d 75 73 74 20 62 65 20 61   there must be a
17680 6e 20 6f 70 65 6e 20 63 75 72 73 6f 72 29 20 62  n open cursor) b
17690 65 66 6f 72 65 0a 2a 2a 20 65 78 65 63 75 74 69  efore.** executi
176a0 6e 67 20 74 68 69 73 20 69 6e 73 74 72 75 63 74  ng this instruct
176b0 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ion..*/.case OP_
176c0 52 65 61 64 43 6f 6f 6b 69 65 3a 20 7b 20 20 20  ReadCookie: {   
176d0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f              /* o
176e0 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a  ut2-prerelease *
176f0 2f 0a 20 20 69 6e 74 20 69 4d 65 74 61 3b 0a 20  /.  int iMeta;. 
17700 20 69 6e 74 20 69 44 62 3b 0a 20 20 69 6e 74 20   int iDb;.  int 
17710 69 43 6f 6f 6b 69 65 3b 0a 0a 20 20 69 44 62 20  iCookie;..  iDb 
17720 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 69 43 6f  = pOp->p1;.  iCo
17730 6f 6b 69 65 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a  okie = pOp->p3;.
17740 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
17750 33 3c 53 51 4c 49 54 45 5f 4e 5f 42 54 52 45 45  3<SQLITE_N_BTREE
17760 5f 4d 45 54 41 20 29 3b 0a 20 20 61 73 73 65 72  _META );.  asser
17770 74 28 20 69 44 62 3e 3d 30 20 26 26 20 69 44 62  t( iDb>=0 && iDb
17780 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73  <db->nDb );.  as
17790 73 65 72 74 28 20 64 62 2d 3e 61 44 62 5b 69 44  sert( db->aDb[iD
177a0 62 5d 2e 70 42 74 21 3d 30 20 29 3b 0a 20 20 61  b].pBt!=0 );.  a
177b0 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65  ssert( (p->btree
177c0 4d 61 73 6b 20 26 20 28 28 28 79 44 62 4d 61 73  Mask & (((yDbMas
177d0 6b 29 31 29 3c 3c 69 44 62 29 29 21 3d 30 20 29  k)1)<<iDb))!=0 )
177e0 3b 0a 0a 20 20 73 71 6c 69 74 65 33 42 74 72 65  ;..  sqlite3Btre
177f0 65 47 65 74 4d 65 74 61 28 64 62 2d 3e 61 44 62  eGetMeta(db->aDb
17800 5b 69 44 62 5d 2e 70 42 74 2c 20 69 43 6f 6f 6b  [iDb].pBt, iCook
17810 69 65 2c 20 28 75 33 32 20 2a 29 26 69 4d 65 74  ie, (u32 *)&iMet
17820 61 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20  a);.  pOut->u.i 
17830 3d 20 69 4d 65 74 61 3b 0a 20 20 62 72 65 61 6b  = iMeta;.  break
17840 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
17850 53 65 74 43 6f 6f 6b 69 65 20 50 31 20 50 32 20  SetCookie P1 P2 
17860 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69  P3 * *.**.** Wri
17870 74 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  te the content o
17880 66 20 72 65 67 69 73 74 65 72 20 50 33 20 28 69  f register P3 (i
17890 6e 74 65 72 70 72 65 74 65 64 20 61 73 20 61 6e  nterpreted as an
178a0 20 69 6e 74 65 67 65 72 29 0a 2a 2a 20 69 6e 74   integer).** int
178b0 6f 20 63 6f 6f 6b 69 65 20 6e 75 6d 62 65 72 20  o cookie number 
178c0 50 32 20 6f 66 20 64 61 74 61 62 61 73 65 20 50  P2 of database P
178d0 31 2e 20 20 50 32 3d 3d 31 20 69 73 20 74 68 65  1.  P2==1 is the
178e0 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e 2e   schema version.
178f0 20 20 0a 2a 2a 20 50 32 3d 3d 32 20 69 73 20 74    .** P2==2 is t
17900 68 65 20 64 61 74 61 62 61 73 65 20 66 6f 72 6d  he database form
17910 61 74 2e 20 50 32 3d 3d 33 20 69 73 20 74 68 65  at. P2==3 is the
17920 20 72 65 63 6f 6d 6d 65 6e 64 65 64 20 70 61 67   recommended pag
17930 65 72 20 63 61 63 68 65 20 0a 2a 2a 20 73 69 7a  er cache .** siz
17940 65 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e  e, and so forth.
17950 20 20 50 31 3d 3d 30 20 69 73 20 74 68 65 20 6d    P1==0 is the m
17960 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
17970 65 20 61 6e 64 20 50 31 3d 3d 31 20 69 73 20 74  e and P1==1 is t
17980 68 65 20 0a 2a 2a 20 64 61 74 61 62 61 73 65 20  he .** database 
17990 66 69 6c 65 20 75 73 65 64 20 74 6f 20 73 74 6f  file used to sto
179a0 72 65 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62  re temporary tab
179b0 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 41 20 74 72 61  les..**.** A tra
179c0 6e 73 61 63 74 69 6f 6e 20 6d 75 73 74 20 62 65  nsaction must be
179d0 20 73 74 61 72 74 65 64 20 62 65 66 6f 72 65 20   started before 
179e0 65 78 65 63 75 74 69 6e 67 20 74 68 69 73 20 6f  executing this o
179f0 70 63 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f  pcode..*/.case O
17a00 50 5f 53 65 74 43 6f 6f 6b 69 65 3a 20 7b 20 20  P_SetCookie: {  
17a10 20 20 20 20 20 2f 2a 20 69 6e 33 20 2a 2f 0a 20       /* in3 */. 
17a20 20 44 62 20 2a 70 44 62 3b 0a 20 20 61 73 73 65   Db *pDb;.  asse
17a30 72 74 28 20 70 4f 70 2d 3e 70 32 3c 53 51 4c 49  rt( pOp->p2<SQLI
17a40 54 45 5f 4e 5f 42 54 52 45 45 5f 4d 45 54 41 20  TE_N_BTREE_META 
17a50 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
17a60 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
17a70 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20  p1<db->nDb );.  
17a80 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65  assert( (p->btre
17a90 65 4d 61 73 6b 20 26 20 28 28 28 79 44 62 4d 61  eMask & (((yDbMa
17aa0 73 6b 29 31 29 3c 3c 70 4f 70 2d 3e 70 31 29 29  sk)1)<<pOp->p1))
17ab0 21 3d 30 20 29 3b 0a 20 20 70 44 62 20 3d 20 26  !=0 );.  pDb = &
17ac0 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d  db->aDb[pOp->p1]
17ad0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 44 62 2d  ;.  assert( pDb-
17ae0 3e 70 42 74 21 3d 30 20 29 3b 0a 20 20 61 73 73  >pBt!=0 );.  ass
17af0 65 72 74 28 20 73 71 6c 69 74 65 33 53 63 68 65  ert( sqlite3Sche
17b00 6d 61 4d 75 74 65 78 48 65 6c 64 28 64 62 2c 20  maMutexHeld(db, 
17b10 70 4f 70 2d 3e 70 31 2c 20 30 29 20 29 3b 0a 20  pOp->p1, 0) );. 
17b20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn3 = &aMem[pO
17b30 70 2d 3e 70 33 5d 3b 0a 20 20 73 71 6c 69 74 65  p->p3];.  sqlite
17b40 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69  3VdbeMemIntegeri
17b50 66 79 28 70 49 6e 33 29 3b 0a 20 20 2f 2a 20 53  fy(pIn3);.  /* S
17b60 65 65 20 6e 6f 74 65 20 61 62 6f 75 74 20 69 6e  ee note about in
17b70 64 65 78 20 73 68 69 66 74 69 6e 67 20 6f 6e 20  dex shifting on 
17b80 4f 50 5f 52 65 61 64 43 6f 6f 6b 69 65 20 2a 2f  OP_ReadCookie */
17b90 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42  .  rc = sqlite3B
17ba0 74 72 65 65 55 70 64 61 74 65 4d 65 74 61 28 70  treeUpdateMeta(p
17bb0 44 62 2d 3e 70 42 74 2c 20 70 4f 70 2d 3e 70 32  Db->pBt, pOp->p2
17bc0 2c 20 28 69 6e 74 29 70 49 6e 33 2d 3e 75 2e 69  , (int)pIn3->u.i
17bd0 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 32  );.  if( pOp->p2
17be0 3d 3d 42 54 52 45 45 5f 53 43 48 45 4d 41 5f 56  ==BTREE_SCHEMA_V
17bf0 45 52 53 49 4f 4e 20 29 7b 0a 20 20 20 20 2f 2a  ERSION ){.    /*
17c00 20 57 68 65 6e 20 74 68 65 20 73 63 68 65 6d 61   When the schema
17c10 20 63 6f 6f 6b 69 65 20 63 68 61 6e 67 65 73 2c   cookie changes,
17c20 20 72 65 63 6f 72 64 20 74 68 65 20 6e 65 77 20   record the new 
17c30 63 6f 6f 6b 69 65 20 69 6e 74 65 72 6e 61 6c 6c  cookie internall
17c40 79 20 2a 2f 0a 20 20 20 20 70 44 62 2d 3e 70 53  y */.    pDb->pS
17c50 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 5f 63 6f  chema->schema_co
17c60 6f 6b 69 65 20 3d 20 28 69 6e 74 29 70 49 6e 33  okie = (int)pIn3
17c70 2d 3e 75 2e 69 3b 0a 20 20 20 20 64 62 2d 3e 66  ->u.i;.    db->f
17c80 6c 61 67 73 20 7c 3d 20 53 51 4c 49 54 45 5f 49  lags |= SQLITE_I
17c90 6e 74 65 72 6e 43 68 61 6e 67 65 73 3b 0a 20 20  nternChanges;.  
17ca0 7d 65 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e 70  }else if( pOp->p
17cb0 32 3d 3d 42 54 52 45 45 5f 46 49 4c 45 5f 46 4f  2==BTREE_FILE_FO
17cc0 52 4d 41 54 20 29 7b 0a 20 20 20 20 2f 2a 20 52  RMAT ){.    /* R
17cd0 65 63 6f 72 64 20 63 68 61 6e 67 65 73 20 69 6e  ecord changes in
17ce0 20 74 68 65 20 66 69 6c 65 20 66 6f 72 6d 61 74   the file format
17cf0 20 2a 2f 0a 20 20 20 20 70 44 62 2d 3e 70 53 63   */.    pDb->pSc
17d00 68 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61  hema->file_forma
17d10 74 20 3d 20 28 75 38 29 70 49 6e 33 2d 3e 75 2e  t = (u8)pIn3->u.
17d20 69 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70  i;.  }.  if( pOp
17d30 2d 3e 70 31 3d 3d 31 20 29 7b 0a 20 20 20 20 2f  ->p1==1 ){.    /
17d40 2a 20 49 6e 76 61 6c 69 64 61 74 65 20 61 6c 6c  * Invalidate all
17d50 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d   prepared statem
17d60 65 6e 74 73 20 77 68 65 6e 65 76 65 72 20 74 68  ents whenever th
17d70 65 20 54 45 4d 50 20 64 61 74 61 62 61 73 65 0a  e TEMP database.
17d80 20 20 20 20 2a 2a 20 73 63 68 65 6d 61 20 69 73      ** schema is
17d90 20 63 68 61 6e 67 65 64 2e 20 20 54 69 63 6b 65   changed.  Ticke
17da0 74 20 23 31 36 34 34 20 2a 2f 0a 20 20 20 20 73  t #1644 */.    s
17db0 71 6c 69 74 65 33 45 78 70 69 72 65 50 72 65 70  qlite3ExpirePrep
17dc0 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28 64  aredStatements(d
17dd0 62 29 3b 0a 20 20 20 20 70 2d 3e 65 78 70 69 72  b);.    p->expir
17de0 65 64 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 62 72  ed = 0;.  }.  br
17df0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
17e00 65 3a 20 56 65 72 69 66 79 43 6f 6f 6b 69 65 20  e: VerifyCookie 
17e10 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
17e20 2a 2a 20 43 68 65 63 6b 20 74 68 65 20 76 61 6c  ** Check the val
17e30 75 65 20 6f 66 20 67 6c 6f 62 61 6c 20 64 61 74  ue of global dat
17e40 61 62 61 73 65 20 70 61 72 61 6d 65 74 65 72 20  abase parameter 
17e50 6e 75 6d 62 65 72 20 30 20 28 74 68 65 0a 2a 2a  number 0 (the.**
17e60 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e 29   schema version)
17e70 20 61 6e 64 20 6d 61 6b 65 20 73 75 72 65 20 69   and make sure i
17e80 74 20 69 73 20 65 71 75 61 6c 20 74 6f 20 50 32  t is equal to P2
17e90 20 61 6e 64 20 74 68 61 74 20 74 68 65 0a 2a 2a   and that the.**
17ea0 20 67 65 6e 65 72 61 74 69 6f 6e 20 63 6f 75 6e   generation coun
17eb0 74 65 72 20 6f 6e 20 74 68 65 20 6c 6f 63 61 6c  ter on the local
17ec0 20 73 63 68 65 6d 61 20 70 61 72 73 65 20 65 71   schema parse eq
17ed0 75 61 6c 73 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 50  uals P3..**.** P
17ee0 31 20 69 73 20 74 68 65 20 64 61 74 61 62 61 73  1 is the databas
17ef0 65 20 6e 75 6d 62 65 72 20 77 68 69 63 68 20 69  e number which i
17f00 73 20 30 20 66 6f 72 20 74 68 65 20 6d 61 69 6e  s 0 for the main
17f10 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a 2a   database file.*
17f20 2a 20 61 6e 64 20 31 20 66 6f 72 20 74 68 65 20  * and 1 for the 
17f30 66 69 6c 65 20 68 6f 6c 64 69 6e 67 20 74 65 6d  file holding tem
17f40 70 6f 72 61 72 79 20 74 61 62 6c 65 73 20 61 6e  porary tables an
17f50 64 20 73 6f 6d 65 20 68 69 67 68 65 72 20 6e 75  d some higher nu
17f60 6d 62 65 72 0a 2a 2a 20 66 6f 72 20 61 75 78 69  mber.** for auxi
17f70 6c 69 61 72 79 20 64 61 74 61 62 61 73 65 73 2e  liary databases.
17f80 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6f 6b 69  .**.** The cooki
17f90 65 20 63 68 61 6e 67 65 73 20 69 74 73 20 76 61  e changes its va
17fa0 6c 75 65 20 77 68 65 6e 65 76 65 72 20 74 68 65  lue whenever the
17fb0 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
17fc0 20 63 68 61 6e 67 65 73 2e 0a 2a 2a 20 54 68 69   changes..** Thi
17fd0 73 20 6f 70 65 72 61 74 69 6f 6e 20 69 73 20 75  s operation is u
17fe0 73 65 64 20 74 6f 20 64 65 74 65 63 74 20 77 68  sed to detect wh
17ff0 65 6e 20 74 68 61 74 20 74 68 65 20 63 6f 6f 6b  en that the cook
18000 69 65 20 68 61 73 20 63 68 61 6e 67 65 64 0a 2a  ie has changed.*
18010 2a 20 61 6e 64 20 74 68 61 74 20 74 68 65 20 63  * and that the c
18020 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73 20 6e  urrent process n
18030 65 65 64 73 20 74 6f 20 72 65 72 65 61 64 20 74  eeds to reread t
18040 68 65 20 73 63 68 65 6d 61 2e 0a 2a 2a 0a 2a 2a  he schema..**.**
18050 20 45 69 74 68 65 72 20 61 20 74 72 61 6e 73 61   Either a transa
18060 63 74 69 6f 6e 20 6e 65 65 64 73 20 74 6f 20 68  ction needs to h
18070 61 76 65 20 62 65 65 6e 20 73 74 61 72 74 65 64  ave been started
18080 20 6f 72 20 61 6e 20 4f 50 5f 4f 70 65 6e 20 6e   or an OP_Open n
18090 65 65 64 73 0a 2a 2a 20 74 6f 20 62 65 20 65 78  eeds.** to be ex
180a0 65 63 75 74 65 64 20 28 74 6f 20 65 73 74 61 62  ecuted (to estab
180b0 6c 69 73 68 20 61 20 72 65 61 64 20 6c 6f 63 6b  lish a read lock
180c0 29 20 62 65 66 6f 72 65 20 74 68 69 73 20 6f 70  ) before this op
180d0 63 6f 64 65 20 69 73 0a 2a 2a 20 69 6e 76 6f 6b  code is.** invok
180e0 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56  ed..*/.case OP_V
180f0 65 72 69 66 79 43 6f 6f 6b 69 65 3a 20 7b 0a 20  erifyCookie: {. 
18100 20 69 6e 74 20 69 4d 65 74 61 3b 0a 20 20 69 6e   int iMeta;.  in
18110 74 20 69 47 65 6e 3b 0a 20 20 42 74 72 65 65 20  t iGen;.  Btree 
18120 2a 70 42 74 3b 0a 0a 20 20 61 73 73 65 72 74 28  *pBt;..  assert(
18130 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
18140 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29  Op->p1<db->nDb )
18150 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e  ;.  assert( (p->
18160 62 74 72 65 65 4d 61 73 6b 20 26 20 28 28 28 79  btreeMask & (((y
18170 44 62 4d 61 73 6b 29 31 29 3c 3c 70 4f 70 2d 3e  DbMask)1)<<pOp->
18180 70 31 29 29 21 3d 30 20 29 3b 0a 20 20 61 73 73  p1))!=0 );.  ass
18190 65 72 74 28 20 73 71 6c 69 74 65 33 53 63 68 65  ert( sqlite3Sche
181a0 6d 61 4d 75 74 65 78 48 65 6c 64 28 64 62 2c 20  maMutexHeld(db, 
181b0 70 4f 70 2d 3e 70 31 2c 20 30 29 20 29 3b 0a 20  pOp->p1, 0) );. 
181c0 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70   pBt = db->aDb[p
181d0 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20 20 69  Op->p1].pBt;.  i
181e0 66 28 20 70 42 74 20 29 7b 0a 20 20 20 20 73 71  f( pBt ){.    sq
181f0 6c 69 74 65 33 42 74 72 65 65 47 65 74 4d 65 74  lite3BtreeGetMet
18200 61 28 70 42 74 2c 20 42 54 52 45 45 5f 53 43 48  a(pBt, BTREE_SCH
18210 45 4d 41 5f 56 45 52 53 49 4f 4e 2c 20 28 75 33  EMA_VERSION, (u3
18220 32 20 2a 29 26 69 4d 65 74 61 29 3b 0a 20 20 20  2 *)&iMeta);.   
18230 20 69 47 65 6e 20 3d 20 64 62 2d 3e 61 44 62 5b   iGen = db->aDb[
18240 70 4f 70 2d 3e 70 31 5d 2e 70 53 63 68 65 6d 61  pOp->p1].pSchema
18250 2d 3e 69 47 65 6e 65 72 61 74 69 6f 6e 3b 0a 20  ->iGeneration;. 
18260 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69 47 65 6e   }else{.    iGen
18270 20 3d 20 69 4d 65 74 61 20 3d 20 30 3b 0a 20 20   = iMeta = 0;.  
18280 7d 0a 20 20 69 66 28 20 69 4d 65 74 61 21 3d 70  }.  if( iMeta!=p
18290 4f 70 2d 3e 70 32 20 7c 7c 20 69 47 65 6e 21 3d  Op->p2 || iGen!=
182a0 70 4f 70 2d 3e 70 33 20 29 7b 0a 20 20 20 20 73  pOp->p3 ){.    s
182b0 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c  qlite3DbFree(db,
182c0 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20   p->zErrMsg);.  
182d0 20 20 70 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 73    p->zErrMsg = s
182e0 71 6c 69 74 65 33 44 62 53 74 72 44 75 70 28 64  qlite3DbStrDup(d
182f0 62 2c 20 22 64 61 74 61 62 61 73 65 20 73 63 68  b, "database sch
18300 65 6d 61 20 68 61 73 20 63 68 61 6e 67 65 64 22  ema has changed"
18310 29 3b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 65  );.    /* If the
18320 20 73 63 68 65 6d 61 2d 63 6f 6f 6b 69 65 20 66   schema-cookie f
18330 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73 65  rom the database
18340 20 66 69 6c 65 20 6d 61 74 63 68 65 73 20 74 68   file matches th
18350 65 20 63 6f 6f 6b 69 65 20 0a 20 20 20 20 2a 2a  e cookie .    **
18360 20 73 74 6f 72 65 64 20 77 69 74 68 20 74 68 65   stored with the
18370 20 69 6e 2d 6d 65 6d 6f 72 79 20 72 65 70 72 65   in-memory repre
18380 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65  sentation of the
18390 20 73 63 68 65 6d 61 2c 20 64 6f 0a 20 20 20 20   schema, do.    
183a0 2a 2a 20 6e 6f 74 20 72 65 6c 6f 61 64 20 74 68  ** not reload th
183b0 65 20 73 63 68 65 6d 61 20 66 72 6f 6d 20 74 68  e schema from th
183c0 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e  e database file.
183d0 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 49  .    **.    ** I
183e0 66 20 76 69 72 74 75 61 6c 2d 74 61 62 6c 65 73  f virtual-tables
183f0 20 61 72 65 20 69 6e 20 75 73 65 2c 20 74 68 69   are in use, thi
18400 73 20 69 73 20 6e 6f 74 20 6a 75 73 74 20 61 6e  s is not just an
18410 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 2e 0a 20   optimization.. 
18420 20 20 20 2a 2a 20 4f 66 74 65 6e 2c 20 76 2d 74     ** Often, v-t
18430 61 62 6c 65 73 20 73 74 6f 72 65 20 74 68 65 69  ables store thei
18440 72 20 64 61 74 61 20 69 6e 20 6f 74 68 65 72 20  r data in other 
18450 53 51 4c 69 74 65 20 74 61 62 6c 65 73 2c 20 77  SQLite tables, w
18460 68 69 63 68 0a 20 20 20 20 2a 2a 20 61 72 65 20  hich.    ** are 
18470 71 75 65 72 69 65 64 20 66 72 6f 6d 20 77 69 74  queried from wit
18480 68 69 6e 20 78 4e 65 78 74 28 29 20 61 6e 64 20  hin xNext() and 
18490 6f 74 68 65 72 20 76 2d 74 61 62 6c 65 20 6d 65  other v-table me
184a0 74 68 6f 64 73 20 75 73 69 6e 67 0a 20 20 20 20  thods using.    
184b0 2a 2a 20 70 72 65 70 61 72 65 64 20 71 75 65 72  ** prepared quer
184c0 69 65 73 2e 20 49 66 20 73 75 63 68 20 61 20 71  ies. If such a q
184d0 75 65 72 79 20 69 73 20 6f 75 74 2d 6f 66 2d 64  uery is out-of-d
184e0 61 74 65 2c 20 77 65 20 64 6f 20 6e 6f 74 20 77  ate, we do not w
184f0 61 6e 74 20 74 6f 0a 20 20 20 20 2a 2a 20 64 69  ant to.    ** di
18500 73 63 61 72 64 20 74 68 65 20 64 61 74 61 62 61  scard the databa
18510 73 65 20 73 63 68 65 6d 61 2c 20 61 73 20 74 68  se schema, as th
18520 65 20 75 73 65 72 20 63 6f 64 65 20 69 6d 70 6c  e user code impl
18530 65 6d 65 6e 74 69 6e 67 20 74 68 65 0a 20 20 20  ementing the.   
18540 20 2a 2a 20 76 2d 74 61 62 6c 65 20 77 6f 75 6c   ** v-table woul
18550 64 20 68 61 76 65 20 74 6f 20 62 65 20 72 65 61  d have to be rea
18560 64 79 20 66 6f 72 20 74 68 65 20 73 71 6c 69 74  dy for the sqlit
18570 65 33 5f 76 74 61 62 20 73 74 72 75 63 74 75 72  e3_vtab structur
18580 65 20 69 74 73 65 6c 66 0a 20 20 20 20 2a 2a 20  e itself.    ** 
18590 74 6f 20 62 65 20 69 6e 76 61 6c 69 64 61 74 65  to be invalidate
185a0 64 20 77 68 65 6e 65 76 65 72 20 73 71 6c 69 74  d whenever sqlit
185b0 65 33 5f 73 74 65 70 28 29 20 69 73 20 63 61 6c  e3_step() is cal
185c0 6c 65 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 20  led from within 
185d0 0a 20 20 20 20 2a 2a 20 61 20 76 2d 74 61 62 6c  .    ** a v-tabl
185e0 65 20 6d 65 74 68 6f 64 2e 0a 20 20 20 20 2a 2f  e method..    */
185f0 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 61 44 62  .    if( db->aDb
18600 5b 70 4f 70 2d 3e 70 31 5d 2e 70 53 63 68 65 6d  [pOp->p1].pSchem
18610 61 2d 3e 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65  a->schema_cookie
18620 21 3d 69 4d 65 74 61 20 29 7b 0a 20 20 20 20 20  !=iMeta ){.     
18630 20 73 71 6c 69 74 65 33 52 65 73 65 74 49 6e 74   sqlite3ResetInt
18640 65 72 6e 61 6c 53 63 68 65 6d 61 28 64 62 2c 20  ernalSchema(db, 
18650 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 20 20 7d 0a  pOp->p1);.    }.
18660 0a 20 20 20 20 70 2d 3e 65 78 70 69 72 65 64 20  .    p->expired 
18670 3d 20 31 3b 0a 20 20 20 20 72 63 20 3d 20 53 51  = 1;.    rc = SQ
18680 4c 49 54 45 5f 53 43 48 45 4d 41 3b 0a 20 20 7d  LITE_SCHEMA;.  }
18690 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
186a0 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 52 65 61 64  Opcode: OpenRead
186b0 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
186c0 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 72 65 61  **.** Open a rea
186d0 64 2d 6f 6e 6c 79 20 63 75 72 73 6f 72 20 66 6f  d-only cursor fo
186e0 72 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74  r the database t
186f0 61 62 6c 65 20 77 68 6f 73 65 20 72 6f 6f 74 20  able whose root 
18700 70 61 67 65 20 69 73 0a 2a 2a 20 50 32 20 69 6e  page is.** P2 in
18710 20 61 20 64 61 74 61 62 61 73 65 20 66 69 6c 65   a database file
18720 2e 20 20 54 68 65 20 64 61 74 61 62 61 73 65 20  .  The database 
18730 66 69 6c 65 20 69 73 20 64 65 74 65 72 6d 69 6e  file is determin
18740 65 64 20 62 79 20 50 33 2e 20 0a 2a 2a 20 50 33  ed by P3. .** P3
18750 3d 3d 30 20 6d 65 61 6e 73 20 74 68 65 20 6d 61  ==0 means the ma
18760 69 6e 20 64 61 74 61 62 61 73 65 2c 20 50 33 3d  in database, P3=
18770 3d 31 20 6d 65 61 6e 73 20 74 68 65 20 64 61 74  =1 means the dat
18780 61 62 61 73 65 20 75 73 65 64 20 66 6f 72 20 0a  abase used for .
18790 2a 2a 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62  ** temporary tab
187a0 6c 65 73 2c 20 61 6e 64 20 50 33 3e 31 20 6d 65  les, and P3>1 me
187b0 61 6e 73 20 75 73 65 64 20 74 68 65 20 63 6f 72  ans used the cor
187c0 72 65 73 70 6f 6e 64 69 6e 67 20 61 74 74 61 63  responding attac
187d0 68 65 64 0a 2a 2a 20 64 61 74 61 62 61 73 65 2e  hed.** database.
187e0 20 20 47 69 76 65 20 74 68 65 20 6e 65 77 20 63    Give the new c
187f0 75 72 73 6f 72 20 61 6e 20 69 64 65 6e 74 69 66  ursor an identif
18800 69 65 72 20 6f 66 20 50 31 2e 20 20 54 68 65 20  ier of P1.  The 
18810 50 31 0a 2a 2a 20 76 61 6c 75 65 73 20 6e 65 65  P1.** values nee
18820 64 20 6e 6f 74 20 62 65 20 63 6f 6e 74 69 67 75  d not be contigu
18830 6f 75 73 20 62 75 74 20 61 6c 6c 20 50 31 20 76  ous but all P1 v
18840 61 6c 75 65 73 20 73 68 6f 75 6c 64 20 62 65 20  alues should be 
18850 73 6d 61 6c 6c 20 69 6e 74 65 67 65 72 73 2e 0a  small integers..
18860 2a 2a 20 49 74 20 69 73 20 61 6e 20 65 72 72 6f  ** It is an erro
18870 72 20 66 6f 72 20 50 31 20 74 6f 20 62 65 20 6e  r for P1 to be n
18880 65 67 61 74 69 76 65 2e 0a 2a 2a 0a 2a 2a 20 49  egative..**.** I
18890 66 20 50 35 21 3d 30 20 74 68 65 6e 20 75 73 65  f P5!=0 then use
188a0 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
188b0 72 65 67 69 73 74 65 72 20 50 32 20 61 73 20 74  register P2 as t
188c0 68 65 20 72 6f 6f 74 20 70 61 67 65 2c 20 6e 6f  he root page, no
188d0 74 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 6f  t.** the value o
188e0 66 20 50 32 20 69 74 73 65 6c 66 2e 0a 2a 2a 0a  f P2 itself..**.
188f0 2a 2a 20 54 68 65 72 65 20 77 69 6c 6c 20 62 65  ** There will be
18900 20 61 20 72 65 61 64 20 6c 6f 63 6b 20 6f 6e 20   a read lock on 
18910 74 68 65 20 64 61 74 61 62 61 73 65 20 77 68 65  the database whe
18920 6e 65 76 65 72 20 74 68 65 72 65 20 69 73 20 61  never there is a
18930 6e 0a 2a 2a 20 6f 70 65 6e 20 63 75 72 73 6f 72  n.** open cursor
18940 2e 20 20 49 66 20 74 68 65 20 64 61 74 61 62 61  .  If the databa
18950 73 65 20 77 61 73 20 75 6e 6c 6f 63 6b 65 64 20  se was unlocked 
18960 70 72 69 6f 72 20 74 6f 20 74 68 69 73 20 69 6e  prior to this in
18970 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 74 68 65  struction.** the
18980 6e 20 61 20 72 65 61 64 20 6c 6f 63 6b 20 69 73  n a read lock is
18990 20 61 63 71 75 69 72 65 64 20 61 73 20 70 61 72   acquired as par
189a0 74 20 6f 66 20 74 68 69 73 20 69 6e 73 74 72 75  t of this instru
189b0 63 74 69 6f 6e 2e 20 20 41 20 72 65 61 64 0a 2a  ction.  A read.*
189c0 2a 20 6c 6f 63 6b 20 61 6c 6c 6f 77 73 20 6f 74  * lock allows ot
189d0 68 65 72 20 70 72 6f 63 65 73 73 65 73 20 74 6f  her processes to
189e0 20 72 65 61 64 20 74 68 65 20 64 61 74 61 62 61   read the databa
189f0 73 65 20 62 75 74 20 70 72 6f 68 69 62 69 74 73  se but prohibits
18a00 0a 2a 2a 20 61 6e 79 20 6f 74 68 65 72 20 70 72  .** any other pr
18a10 6f 63 65 73 73 20 66 72 6f 6d 20 6d 6f 64 69 66  ocess from modif
18a20 79 69 6e 67 20 74 68 65 20 64 61 74 61 62 61 73  ying the databas
18a30 65 2e 20 20 54 68 65 20 72 65 61 64 20 6c 6f 63  e.  The read loc
18a40 6b 20 69 73 0a 2a 2a 20 72 65 6c 65 61 73 65 64  k is.** released
18a50 20 77 68 65 6e 20 61 6c 6c 20 63 75 72 73 6f 72   when all cursor
18a60 73 20 61 72 65 20 63 6c 6f 73 65 64 2e 20 20 49  s are closed.  I
18a70 66 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69  f this instructi
18a80 6f 6e 20 61 74 74 65 6d 70 74 73 0a 2a 2a 20 74  on attempts.** t
18a90 6f 20 67 65 74 20 61 20 72 65 61 64 20 6c 6f 63  o get a read loc
18aa0 6b 20 62 75 74 20 66 61 69 6c 73 2c 20 74 68 65  k but fails, the
18ab0 20 73 63 72 69 70 74 20 74 65 72 6d 69 6e 61 74   script terminat
18ac0 65 73 20 77 69 74 68 20 61 6e 0a 2a 2a 20 53 51  es with an.** SQ
18ad0 4c 49 54 45 5f 42 55 53 59 20 65 72 72 6f 72 20  LITE_BUSY error 
18ae0 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  code..**.** The 
18af0 50 34 20 76 61 6c 75 65 20 6d 61 79 20 62 65 20  P4 value may be 
18b00 65 69 74 68 65 72 20 61 6e 20 69 6e 74 65 67 65  either an intege
18b10 72 20 28 50 34 5f 49 4e 54 33 32 29 20 6f 72 20  r (P4_INT32) or 
18b20 61 20 70 6f 69 6e 74 65 72 20 74 6f 0a 2a 2a 20  a pointer to.** 
18b30 61 20 4b 65 79 49 6e 66 6f 20 73 74 72 75 63 74  a KeyInfo struct
18b40 75 72 65 20 28 50 34 5f 4b 45 59 49 4e 46 4f 29  ure (P4_KEYINFO)
18b50 2e 20 49 66 20 69 74 20 69 73 20 61 20 70 6f 69  . If it is a poi
18b60 6e 74 65 72 20 74 6f 20 61 20 4b 65 79 49 6e 66  nter to a KeyInf
18b70 6f 20 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 2c  o .** structure,
18b80 20 74 68 65 6e 20 73 61 69 64 20 73 74 72 75 63   then said struc
18b90 74 75 72 65 20 64 65 66 69 6e 65 73 20 74 68 65  ture defines the
18ba0 20 63 6f 6e 74 65 6e 74 20 61 6e 64 20 63 6f 6c   content and col
18bb0 6c 61 74 69 6e 67 20 0a 2a 2a 20 73 65 71 75 65  lating .** seque
18bc0 6e 63 65 20 6f 66 20 74 68 65 20 69 6e 64 65 78  nce of the index
18bd0 20 62 65 69 6e 67 20 6f 70 65 6e 65 64 2e 20 4f   being opened. O
18be0 74 68 65 72 77 69 73 65 2c 20 69 66 20 50 34 20  therwise, if P4 
18bf0 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 0a 2a  is an integer .*
18c00 2a 20 76 61 6c 75 65 2c 20 69 74 20 69 73 20 73  * value, it is s
18c10 65 74 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72  et to the number
18c20 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74   of columns in t
18c30 68 65 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20  he table..**.** 
18c40 53 65 65 20 61 6c 73 6f 20 4f 70 65 6e 57 72 69  See also OpenWri
18c50 74 65 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  te..*/./* Opcode
18c60 3a 20 4f 70 65 6e 57 72 69 74 65 20 50 31 20 50  : OpenWrite P1 P
18c70 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a  2 P3 P4 P5.**.**
18c80 20 4f 70 65 6e 20 61 20 72 65 61 64 2f 77 72 69   Open a read/wri
18c90 74 65 20 63 75 72 73 6f 72 20 6e 61 6d 65 64 20  te cursor named 
18ca0 50 31 20 6f 6e 20 74 68 65 20 74 61 62 6c 65 20  P1 on the table 
18cb0 6f 72 20 69 6e 64 65 78 20 77 68 6f 73 65 20 72  or index whose r
18cc0 6f 6f 74 0a 2a 2a 20 70 61 67 65 20 69 73 20 50  oot.** page is P
18cd0 32 2e 20 20 4f 72 20 69 66 20 50 35 21 3d 30 20  2.  Or if P5!=0 
18ce0 75 73 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  use the content 
18cf0 6f 66 20 72 65 67 69 73 74 65 72 20 50 32 20 74  of register P2 t
18d00 6f 20 66 69 6e 64 20 74 68 65 0a 2a 2a 20 72 6f  o find the.** ro
18d10 6f 74 20 70 61 67 65 2e 0a 2a 2a 0a 2a 2a 20 54  ot page..**.** T
18d20 68 65 20 50 34 20 76 61 6c 75 65 20 6d 61 79 20  he P4 value may 
18d30 62 65 20 65 69 74 68 65 72 20 61 6e 20 69 6e 74  be either an int
18d40 65 67 65 72 20 28 50 34 5f 49 4e 54 33 32 29 20  eger (P4_INT32) 
18d50 6f 72 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 0a  or a pointer to.
18d60 2a 2a 20 61 20 4b 65 79 49 6e 66 6f 20 73 74 72  ** a KeyInfo str
18d70 75 63 74 75 72 65 20 28 50 34 5f 4b 45 59 49 4e  ucture (P4_KEYIN
18d80 46 4f 29 2e 20 49 66 20 69 74 20 69 73 20 61 20  FO). If it is a 
18d90 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 4b 65 79  pointer to a Key
18da0 49 6e 66 6f 20 0a 2a 2a 20 73 74 72 75 63 74 75  Info .** structu
18db0 72 65 2c 20 74 68 65 6e 20 73 61 69 64 20 73 74  re, then said st
18dc0 72 75 63 74 75 72 65 20 64 65 66 69 6e 65 73 20  ructure defines 
18dd0 74 68 65 20 63 6f 6e 74 65 6e 74 20 61 6e 64 20  the content and 
18de0 63 6f 6c 6c 61 74 69 6e 67 20 0a 2a 2a 20 73 65  collating .** se
18df0 71 75 65 6e 63 65 20 6f 66 20 74 68 65 20 69 6e  quence of the in
18e00 64 65 78 20 62 65 69 6e 67 20 6f 70 65 6e 65 64  dex being opened
18e10 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20  . Otherwise, if 
18e20 50 34 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72  P4 is an integer
18e30 20 0a 2a 2a 20 76 61 6c 75 65 2c 20 69 74 20 69   .** value, it i
18e40 73 20 73 65 74 20 74 6f 20 74 68 65 20 6e 75 6d  s set to the num
18e50 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
18e60 6e 20 74 68 65 20 74 61 62 6c 65 2c 20 6f 72 20  n the table, or 
18e70 74 6f 20 74 68 65 0a 2a 2a 20 6c 61 72 67 65 73  to the.** larges
18e80 74 20 69 6e 64 65 78 20 6f 66 20 61 6e 79 20 63  t index of any c
18e90 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 74 61 62  olumn of the tab
18ea0 6c 65 20 74 68 61 74 20 69 73 20 61 63 74 75 61  le that is actua
18eb0 6c 6c 79 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20  lly used..**.** 
18ec0 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  This instruction
18ed0 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65   works just like
18ee0 20 4f 70 65 6e 52 65 61 64 20 65 78 63 65 70 74   OpenRead except
18ef0 20 74 68 61 74 20 69 74 20 6f 70 65 6e 73 20 74   that it opens t
18f00 68 65 20 63 75 72 73 6f 72 0a 2a 2a 20 69 6e 20  he cursor.** in 
18f10 72 65 61 64 2f 77 72 69 74 65 20 6d 6f 64 65 2e  read/write mode.
18f20 20 20 46 6f 72 20 61 20 67 69 76 65 6e 20 74 61    For a given ta
18f30 62 6c 65 2c 20 74 68 65 72 65 20 63 61 6e 20 62  ble, there can b
18f40 65 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 72 65  e one or more re
18f50 61 64 2d 6f 6e 6c 79 0a 2a 2a 20 63 75 72 73 6f  ad-only.** curso
18f60 72 73 20 6f 72 20 61 20 73 69 6e 67 6c 65 20 72  rs or a single r
18f70 65 61 64 2f 77 72 69 74 65 20 63 75 72 73 6f 72  ead/write cursor
18f80 20 62 75 74 20 6e 6f 74 20 62 6f 74 68 2e 0a 2a   but not both..*
18f90 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 20 4f 70  *.** See also Op
18fa0 65 6e 52 65 61 64 2e 0a 2a 2f 0a 63 61 73 65 20  enRead..*/.case 
18fb0 4f 50 5f 4f 70 65 6e 52 65 61 64 3a 0a 63 61 73  OP_OpenRead:.cas
18fc0 65 20 4f 50 5f 4f 70 65 6e 57 72 69 74 65 3a 20  e OP_OpenWrite: 
18fd0 7b 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b 0a  {.  int nField;.
18fe0 20 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49    KeyInfo *pKeyI
18ff0 6e 66 6f 3b 0a 20 20 69 6e 74 20 70 32 3b 0a 20  nfo;.  int p2;. 
19000 20 69 6e 74 20 69 44 62 3b 0a 20 20 69 6e 74 20   int iDb;.  int 
19010 77 72 46 6c 61 67 3b 0a 20 20 42 74 72 65 65 20  wrFlag;.  Btree 
19020 2a 70 58 3b 0a 20 20 56 64 62 65 43 75 72 73 6f  *pX;.  VdbeCurso
19030 72 20 2a 70 43 75 72 3b 0a 20 20 44 62 20 2a 70  r *pCur;.  Db *p
19040 44 62 3b 0a 0a 20 20 69 66 28 20 70 2d 3e 65 78  Db;..  if( p->ex
19050 70 69 72 65 64 20 29 7b 0a 20 20 20 20 72 63 20  pired ){.    rc 
19060 3d 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 3b 0a  = SQLITE_ABORT;.
19070 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a      break;.  }..
19080 20 20 6e 46 69 65 6c 64 20 3d 20 30 3b 0a 20 20    nField = 0;.  
19090 70 4b 65 79 49 6e 66 6f 20 3d 20 30 3b 0a 20 20  pKeyInfo = 0;.  
190a0 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  p2 = pOp->p2;.  
190b0 69 44 62 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20  iDb = pOp->p3;. 
190c0 20 61 73 73 65 72 74 28 20 69 44 62 3e 3d 30 20   assert( iDb>=0 
190d0 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29  && iDb<db->nDb )
190e0 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e  ;.  assert( (p->
190f0 62 74 72 65 65 4d 61 73 6b 20 26 20 28 28 28 79  btreeMask & (((y
19100 44 62 4d 61 73 6b 29 31 29 3c 3c 69 44 62 29 29  DbMask)1)<<iDb))
19110 21 3d 30 20 29 3b 0a 20 20 70 44 62 20 3d 20 26  !=0 );.  pDb = &
19120 64 62 2d 3e 61 44 62 5b 69 44 62 5d 3b 0a 20 20  db->aDb[iDb];.  
19130 70 58 20 3d 20 70 44 62 2d 3e 70 42 74 3b 0a 20  pX = pDb->pBt;. 
19140 20 61 73 73 65 72 74 28 20 70 58 21 3d 30 20 29   assert( pX!=0 )
19150 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63  ;.  if( pOp->opc
19160 6f 64 65 3d 3d 4f 50 5f 4f 70 65 6e 57 72 69 74  ode==OP_OpenWrit
19170 65 20 29 7b 0a 20 20 20 20 77 72 46 6c 61 67 20  e ){.    wrFlag 
19180 3d 20 31 3b 0a 20 20 20 20 61 73 73 65 72 74 28  = 1;.    assert(
19190 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61 4d 75   sqlite3SchemaMu
191a0 74 65 78 48 65 6c 64 28 64 62 2c 20 69 44 62 2c  texHeld(db, iDb,
191b0 20 30 29 20 29 3b 0a 20 20 20 20 69 66 28 20 70   0) );.    if( p
191c0 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 66 69 6c  Db->pSchema->fil
191d0 65 5f 66 6f 72 6d 61 74 20 3c 20 70 2d 3e 6d 69  e_format < p->mi
191e0 6e 57 72 69 74 65 46 69 6c 65 46 6f 72 6d 61 74  nWriteFileFormat
191f0 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e 6d 69 6e   ){.      p->min
19200 57 72 69 74 65 46 69 6c 65 46 6f 72 6d 61 74 20  WriteFileFormat 
19210 3d 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e  = pDb->pSchema->
19220 66 69 6c 65 5f 66 6f 72 6d 61 74 3b 0a 20 20 20  file_format;.   
19230 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20   }.  }else{.    
19240 77 72 46 6c 61 67 20 3d 20 30 3b 0a 20 20 7d 0a  wrFlag = 0;.  }.
19250 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 29 7b    if( pOp->p5 ){
19260 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 32 3e  .    assert( p2>
19270 30 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  0 );.    assert(
19280 20 70 32 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a   p2<=p->nMem );.
19290 20 20 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d      pIn2 = &aMem
192a0 5b 70 32 5d 3b 0a 20 20 20 20 61 73 73 65 72 74  [p2];.    assert
192b0 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 49 6e  ( memIsValid(pIn
192c0 32 29 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  2) );.    assert
192d0 28 20 28 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26  ( (pIn2->flags &
192e0 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 0a   MEM_Int)!=0 );.
192f0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
19300 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e  emIntegerify(pIn
19310 32 29 3b 0a 20 20 20 20 70 32 20 3d 20 28 69 6e  2);.    p2 = (in
19320 74 29 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20 20  t)pIn2->u.i;.   
19330 20 2f 2a 20 54 68 65 20 70 32 20 76 61 6c 75 65   /* The p2 value
19340 20 61 6c 77 61 79 73 20 63 6f 6d 65 73 20 66 72   always comes fr
19350 6f 6d 20 61 20 70 72 69 6f 72 20 4f 50 5f 43 72  om a prior OP_Cr
19360 65 61 74 65 54 61 62 6c 65 20 6f 70 63 6f 64 65  eateTable opcode
19370 20 61 6e 64 0a 20 20 20 20 2a 2a 20 74 68 61 74   and.    ** that
19380 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 61 6c 77   opcode will alw
19390 61 79 73 20 73 65 74 20 74 68 65 20 70 32 20 76  ays set the p2 v
193a0 61 6c 75 65 20 74 6f 20 32 20 6f 72 20 6d 6f 72  alue to 2 or mor
193b0 65 20 6f 72 20 65 6c 73 65 20 66 61 69 6c 2e 0a  e or else fail..
193c0 20 20 20 20 2a 2a 20 49 66 20 74 68 65 72 65 20      ** If there 
193d0 77 65 72 65 20 61 20 66 61 69 6c 75 72 65 2c 20  were a failure, 
193e0 74 68 65 20 70 72 65 70 61 72 65 64 20 73 74 61  the prepared sta
193f0 74 65 6d 65 6e 74 20 77 6f 75 6c 64 20 68 61 76  tement would hav
19400 65 20 68 61 6c 74 65 64 0a 20 20 20 20 2a 2a 20  e halted.    ** 
19410 62 65 66 6f 72 65 20 72 65 61 63 68 69 6e 67 20  before reaching 
19420 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
19430 2e 20 2a 2f 0a 20 20 20 20 69 66 28 20 4e 45 56  . */.    if( NEV
19440 45 52 28 70 32 3c 32 29 20 29 20 7b 0a 20 20 20  ER(p2<2) ) {.   
19450 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 43     rc = SQLITE_C
19460 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20  ORRUPT_BKPT;.   
19470 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
19480 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
19490 7d 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d  }.  }.  if( pOp-
194a0 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4b 45 59 49  >p4type==P4_KEYI
194b0 4e 46 4f 20 29 7b 0a 20 20 20 20 70 4b 65 79 49  NFO ){.    pKeyI
194c0 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b  nfo = pOp->p4.pK
194d0 65 79 49 6e 66 6f 3b 0a 20 20 20 20 70 4b 65 79  eyInfo;.    pKey
194e0 49 6e 66 6f 2d 3e 65 6e 63 20 3d 20 45 4e 43 28  Info->enc = ENC(
194f0 70 2d 3e 64 62 29 3b 0a 20 20 20 20 6e 46 69 65  p->db);.    nFie
19500 6c 64 20 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e 6e  ld = pKeyInfo->n
19510 46 69 65 6c 64 2b 31 3b 0a 20 20 7d 65 6c 73 65  Field+1;.  }else
19520 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65   if( pOp->p4type
19530 3d 3d 50 34 5f 49 4e 54 33 32 20 29 7b 0a 20 20  ==P4_INT32 ){.  
19540 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e    nField = pOp->
19550 70 34 2e 69 3b 0a 20 20 7d 0a 20 20 61 73 73 65  p4.i;.  }.  asse
19560 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 29  rt( pOp->p1>=0 )
19570 3b 0a 20 20 70 43 75 72 20 3d 20 61 6c 6c 6f 63  ;.  pCur = alloc
19580 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70  ateCursor(p, pOp
19590 2d 3e 70 31 2c 20 6e 46 69 65 6c 64 2c 20 69 44  ->p1, nField, iD
195a0 62 2c 20 31 29 3b 0a 20 20 69 66 28 20 70 43 75  b, 1);.  if( pCu
195b0 72 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  r==0 ) goto no_m
195c0 65 6d 3b 0a 20 20 70 43 75 72 2d 3e 6e 75 6c 6c  em;.  pCur->null
195d0 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43 75 72 2d  Row = 1;.  pCur-
195e0 3e 69 73 4f 72 64 65 72 65 64 20 3d 20 31 3b 0a  >isOrdered = 1;.
195f0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
19600 72 65 65 43 75 72 73 6f 72 28 70 58 2c 20 70 32  reeCursor(pX, p2
19610 2c 20 77 72 46 6c 61 67 2c 20 70 4b 65 79 49 6e  , wrFlag, pKeyIn
19620 66 6f 2c 20 70 43 75 72 2d 3e 70 43 75 72 73 6f  fo, pCur->pCurso
19630 72 29 3b 0a 20 20 70 43 75 72 2d 3e 70 4b 65 79  r);.  pCur->pKey
19640 49 6e 66 6f 20 3d 20 70 4b 65 79 49 6e 66 6f 3b  Info = pKeyInfo;
19650 0a 0a 20 20 2f 2a 20 53 69 6e 63 65 20 69 74 20  ..  /* Since it 
19660 70 65 72 66 6f 72 6d 73 20 6e 6f 20 6d 65 6d 6f  performs no memo
19670 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 6f 72  ry allocation or
19680 20 49 4f 2c 20 74 68 65 20 6f 6e 6c 79 20 76 61   IO, the only va
19690 6c 75 65 20 74 68 61 74 0a 20 20 2a 2a 20 73 71  lue that.  ** sq
196a0 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72  lite3BtreeCursor
196b0 28 29 20 6d 61 79 20 72 65 74 75 72 6e 20 69 73  () may return is
196c0 20 53 51 4c 49 54 45 5f 4f 4b 2e 20 2a 2f 0a 20   SQLITE_OK. */. 
196d0 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c   assert( rc==SQL
196e0 49 54 45 5f 4f 4b 20 29 3b 0a 0a 20 20 2f 2a 20  ITE_OK );..  /* 
196f0 53 65 74 20 74 68 65 20 56 64 62 65 43 75 72 73  Set the VdbeCurs
19700 6f 72 2e 69 73 54 61 62 6c 65 20 61 6e 64 20 69  or.isTable and i
19710 73 49 6e 64 65 78 20 76 61 72 69 61 62 6c 65 73  sIndex variables
19720 2e 20 50 72 65 76 69 6f 75 73 20 76 65 72 73 69  . Previous versi
19730 6f 6e 73 20 6f 66 0a 20 20 2a 2a 20 53 51 4c 69  ons of.  ** SQLi
19740 74 65 20 75 73 65 64 20 74 6f 20 63 68 65 63 6b  te used to check
19750 20 69 66 20 74 68 65 20 72 6f 6f 74 2d 70 61 67   if the root-pag
19760 65 20 66 6c 61 67 73 20 77 65 72 65 20 73 61 6e  e flags were san
19770 65 20 61 74 20 74 68 69 73 20 70 6f 69 6e 74 0a  e at this point.
19780 20 20 2a 2a 20 61 6e 64 20 72 65 70 6f 72 74 20    ** and report 
19790 64 61 74 61 62 61 73 65 20 63 6f 72 72 75 70 74  database corrupt
197a0 69 6f 6e 20 69 66 20 74 68 65 79 20 77 65 72 65  ion if they were
197b0 20 6e 6f 74 2c 20 62 75 74 20 74 68 69 73 20 63   not, but this c
197c0 68 65 63 6b 20 68 61 73 0a 20 20 2a 2a 20 73 69  heck has.  ** si
197d0 6e 63 65 20 6d 6f 76 65 64 20 69 6e 74 6f 20 74  nce moved into t
197e0 68 65 20 62 74 72 65 65 20 6c 61 79 65 72 2e 20  he btree layer. 
197f0 20 2a 2f 20 20 0a 20 20 70 43 75 72 2d 3e 69 73   */  .  pCur->is
19800 54 61 62 6c 65 20 3d 20 70 4f 70 2d 3e 70 34 74  Table = pOp->p4t
19810 79 70 65 21 3d 50 34 5f 4b 45 59 49 4e 46 4f 3b  ype!=P4_KEYINFO;
19820 0a 20 20 70 43 75 72 2d 3e 69 73 49 6e 64 65 78  .  pCur->isIndex
19830 20 3d 20 21 70 43 75 72 2d 3e 69 73 54 61 62 6c   = !pCur->isTabl
19840 65 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  e;.  break;.}../
19850 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 45 70  * Opcode: OpenEp
19860 68 65 6d 65 72 61 6c 20 50 31 20 50 32 20 2a 20  hemeral P1 P2 * 
19870 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e  P4 P5.**.** Open
19880 20 61 20 6e 65 77 20 63 75 72 73 6f 72 20 50 31   a new cursor P1
19890 20 74 6f 20 61 20 74 72 61 6e 73 69 65 6e 74 20   to a transient 
198a0 74 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 63 75  table..** The cu
198b0 72 73 6f 72 20 69 73 20 61 6c 77 61 79 73 20 6f  rsor is always o
198c0 70 65 6e 65 64 20 72 65 61 64 2f 77 72 69 74 65  pened read/write
198d0 20 65 76 65 6e 20 69 66 20 0a 2a 2a 20 74 68 65   even if .** the
198e0 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 69   main database i
198f0 73 20 72 65 61 64 2d 6f 6e 6c 79 2e 20 20 54 68  s read-only.  Th
19900 65 20 65 70 68 65 6d 65 72 61 6c 0a 2a 2a 20 74  e ephemeral.** t
19910 61 62 6c 65 20 69 73 20 64 65 6c 65 74 65 64 20  able is deleted 
19920 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 77 68  automatically wh
19930 65 6e 20 74 68 65 20 63 75 72 73 6f 72 20 69 73  en the cursor is
19940 20 63 6c 6f 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 50   closed..**.** P
19950 32 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20  2 is the number 
19960 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  of columns in th
19970 65 20 65 70 68 65 6d 65 72 61 6c 20 74 61 62 6c  e ephemeral tabl
19980 65 2e 0a 2a 2a 20 54 68 65 20 63 75 72 73 6f 72  e..** The cursor
19990 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 42 54 72   points to a BTr
199a0 65 65 20 74 61 62 6c 65 20 69 66 20 50 34 3d 3d  ee table if P4==
199b0 30 20 61 6e 64 20 74 6f 20 61 20 42 54 72 65 65  0 and to a BTree
199c0 20 69 6e 64 65 78 0a 2a 2a 20 69 66 20 50 34 20   index.** if P4 
199d0 69 73 20 6e 6f 74 20 30 2e 20 20 49 66 20 50 34  is not 0.  If P4
199e0 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 69 74   is not NULL, it
199f0 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 4b 65 79   points to a Key
19a00 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65 0a 2a  Info structure.*
19a10 2a 20 74 68 61 74 20 64 65 66 69 6e 65 73 20 74  * that defines t
19a20 68 65 20 66 6f 72 6d 61 74 20 6f 66 20 6b 65 79  he format of key
19a30 73 20 69 6e 20 74 68 65 20 69 6e 64 65 78 2e 0a  s in the index..
19a40 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
19a50 65 20 77 61 73 20 6f 6e 63 65 20 63 61 6c 6c 65  e was once calle
19a60 64 20 4f 70 65 6e 54 65 6d 70 2e 20 20 42 75 74  d OpenTemp.  But
19a70 20 74 68 61 74 20 63 72 65 61 74 65 64 0a 2a 2a   that created.**
19a80 20 63 6f 6e 66 75 73 69 6f 6e 20 62 65 63 61 75   confusion becau
19a90 73 65 20 74 68 65 20 74 65 72 6d 20 22 74 65 6d  se the term "tem
19aa0 70 20 74 61 62 6c 65 22 2c 20 6d 69 67 68 74 20  p table", might 
19ab0 72 65 66 65 72 20 65 69 74 68 65 72 0a 2a 2a 20  refer either.** 
19ac0 74 6f 20 61 20 54 45 4d 50 20 74 61 62 6c 65 20  to a TEMP table 
19ad0 61 74 20 74 68 65 20 53 51 4c 20 6c 65 76 65 6c  at the SQL level
19ae0 2c 20 6f 72 20 74 6f 20 61 20 74 61 62 6c 65 20  , or to a table 
19af0 6f 70 65 6e 65 64 20 62 79 0a 2a 2a 20 74 68 69  opened by.** thi
19b00 73 20 6f 70 63 6f 64 65 2e 20 20 54 68 65 6e 20  s opcode.  Then 
19b10 74 68 69 73 20 6f 70 63 6f 64 65 20 77 61 73 20  this opcode was 
19b20 63 61 6c 6c 20 4f 70 65 6e 56 69 72 74 75 61 6c  call OpenVirtual
19b30 2e 20 20 42 75 74 0a 2a 2a 20 74 68 61 74 20 63  .  But.** that c
19b40 72 65 61 74 65 64 20 63 6f 6e 66 75 73 69 6f 6e  reated confusion
19b50 20 77 69 74 68 20 74 68 65 20 77 68 6f 6c 65 20   with the whole 
19b60 76 69 72 74 75 61 6c 2d 74 61 62 6c 65 20 69 64  virtual-table id
19b70 65 61 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 35  ea..**.** The P5
19b80 20 70 61 72 61 6d 65 74 65 72 20 63 61 6e 20 62   parameter can b
19b90 65 20 61 20 6d 61 73 6b 20 6f 66 20 74 68 65 20  e a mask of the 
19ba0 42 54 52 45 45 5f 2a 20 66 6c 61 67 73 20 64 65  BTREE_* flags de
19bb0 66 69 6e 65 64 0a 2a 2a 20 69 6e 20 62 74 72 65  fined.** in btre
19bc0 65 2e 68 2e 20 20 54 68 65 73 65 20 66 6c 61 67  e.h.  These flag
19bd0 73 20 63 6f 6e 74 72 6f 6c 20 61 73 70 65 63 74  s control aspect
19be0 73 20 6f 66 20 74 68 65 20 6f 70 65 72 61 74 69  s of the operati
19bf0 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 62 74 72  on of.** the btr
19c00 65 65 2e 20 20 54 68 65 20 42 54 52 45 45 5f 4f  ee.  The BTREE_O
19c10 4d 49 54 5f 4a 4f 55 52 4e 41 4c 20 61 6e 64 20  MIT_JOURNAL and 
19c20 42 54 52 45 45 5f 53 49 4e 47 4c 45 20 66 6c 61  BTREE_SINGLE fla
19c30 67 73 20 61 72 65 0a 2a 2a 20 61 64 64 65 64 20  gs are.** added 
19c40 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 2e 0a 2a  automatically..*
19c50 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65  /./* Opcode: Ope
19c60 6e 41 75 74 6f 69 6e 64 65 78 20 50 31 20 50 32  nAutoindex P1 P2
19c70 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 54 68   * P4 *.**.** Th
19c80 69 73 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20  is opcode works 
19c90 74 68 65 20 73 61 6d 65 20 61 73 20 4f 50 5f 4f  the same as OP_O
19ca0 70 65 6e 45 70 68 65 6d 65 72 61 6c 2e 20 20 49  penEphemeral.  I
19cb0 74 20 68 61 73 20 61 0a 2a 2a 20 64 69 66 66 65  t has a.** diffe
19cc0 72 65 6e 74 20 6e 61 6d 65 20 74 6f 20 64 69 73  rent name to dis
19cd0 74 69 6e 67 75 69 73 68 20 69 74 73 20 75 73 65  tinguish its use
19ce0 2e 20 20 54 61 62 6c 65 73 20 63 72 65 61 74 65  .  Tables create
19cf0 64 20 75 73 69 6e 67 0a 2a 2a 20 62 79 20 74 68  d using.** by th
19d00 69 73 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 62  is opcode will b
19d10 65 20 75 73 65 64 20 66 6f 72 20 61 75 74 6f 6d  e used for autom
19d20 61 74 69 63 61 6c 6c 79 20 63 72 65 61 74 65 64  atically created
19d30 20 74 72 61 6e 73 69 65 6e 74 0a 2a 2a 20 69 6e   transient.** in
19d40 64 69 63 65 73 20 69 6e 20 6a 6f 69 6e 73 2e 0a  dices in joins..
19d50 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 41  */.case OP_OpenA
19d60 75 74 6f 69 6e 64 65 78 3a 20 0a 63 61 73 65 20  utoindex: .case 
19d70 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c  OP_OpenEphemeral
19d80 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  : {.  VdbeCursor
19d90 20 2a 70 43 78 3b 0a 20 20 73 74 61 74 69 63 20   *pCx;.  static 
19da0 63 6f 6e 73 74 20 69 6e 74 20 76 66 73 46 6c 61  const int vfsFla
19db0 67 73 20 3d 20 0a 20 20 20 20 20 20 53 51 4c 49  gs = .      SQLI
19dc0 54 45 5f 4f 50 45 4e 5f 52 45 41 44 57 52 49 54  TE_OPEN_READWRIT
19dd0 45 20 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45  E |.      SQLITE
19de0 5f 4f 50 45 4e 5f 43 52 45 41 54 45 20 7c 0a 20  _OPEN_CREATE |. 
19df0 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e       SQLITE_OPEN
19e00 5f 45 58 43 4c 55 53 49 56 45 20 7c 0a 20 20 20  _EXCLUSIVE |.   
19e10 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 44     SQLITE_OPEN_D
19e20 45 4c 45 54 45 4f 4e 43 4c 4f 53 45 20 7c 0a 20  ELETEONCLOSE |. 
19e30 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e       SQLITE_OPEN
19e40 5f 54 52 41 4e 53 49 45 4e 54 5f 44 42 3b 0a 0a  _TRANSIENT_DB;..
19e50 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
19e60 31 3e 3d 30 20 29 3b 0a 20 20 70 43 78 20 3d 20  1>=0 );.  pCx = 
19e70 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70  allocateCursor(p
19e80 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e  , pOp->p1, pOp->
19e90 70 32 2c 20 2d 31 2c 20 31 29 3b 0a 20 20 69 66  p2, -1, 1);.  if
19ea0 28 20 70 43 78 3d 3d 30 20 29 20 67 6f 74 6f 20  ( pCx==0 ) goto 
19eb0 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e 6e  no_mem;.  pCx->n
19ec0 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 72 63  ullRow = 1;.  rc
19ed0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4f   = sqlite3BtreeO
19ee0 70 65 6e 28 64 62 2d 3e 70 56 66 73 2c 20 30 2c  pen(db->pVfs, 0,
19ef0 20 64 62 2c 20 26 70 43 78 2d 3e 70 42 74 2c 20   db, &pCx->pBt, 
19f00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19f10 20 20 20 20 20 20 20 20 20 42 54 52 45 45 5f 4f           BTREE_O
19f20 4d 49 54 5f 4a 4f 55 52 4e 41 4c 20 7c 20 42 54  MIT_JOURNAL | BT
19f30 52 45 45 5f 53 49 4e 47 4c 45 20 7c 20 70 4f 70  REE_SINGLE | pOp
19f40 2d 3e 70 35 2c 20 76 66 73 46 6c 61 67 73 29 3b  ->p5, vfsFlags);
19f50 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54  .  if( rc==SQLIT
19f60 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 63 20 3d  E_OK ){.    rc =
19f70 20 73 71 6c 69 74 65 33 42 74 72 65 65 42 65 67   sqlite3BtreeBeg
19f80 69 6e 54 72 61 6e 73 28 70 43 78 2d 3e 70 42 74  inTrans(pCx->pBt
19f90 2c 20 31 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20  , 1);.  }.  if( 
19fa0 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc==SQLITE_OK ){
19fb0 0a 20 20 20 20 2f 2a 20 49 66 20 61 20 74 72 61  .    /* If a tra
19fc0 6e 73 69 65 6e 74 20 69 6e 64 65 78 20 69 73 20  nsient index is 
19fd0 72 65 71 75 69 72 65 64 2c 20 63 72 65 61 74 65  required, create
19fe0 20 69 74 20 62 79 20 63 61 6c 6c 69 6e 67 0a 20   it by calling. 
19ff0 20 20 20 2a 2a 20 73 71 6c 69 74 65 33 42 74 72     ** sqlite3Btr
1a000 65 65 43 72 65 61 74 65 54 61 62 6c 65 28 29 20  eeCreateTable() 
1a010 77 69 74 68 20 74 68 65 20 42 54 52 45 45 5f 42  with the BTREE_B
1a020 4c 4f 42 4b 45 59 20 66 6c 61 67 20 62 65 66 6f  LOBKEY flag befo
1a030 72 65 0a 20 20 20 20 2a 2a 20 6f 70 65 6e 69 6e  re.    ** openin
1a040 67 20 69 74 2e 20 49 66 20 61 20 74 72 61 6e 73  g it. If a trans
1a050 69 65 6e 74 20 74 61 62 6c 65 20 69 73 20 72 65  ient table is re
1a060 71 75 69 72 65 64 2c 20 6a 75 73 74 20 75 73 65  quired, just use
1a070 20 74 68 65 0a 20 20 20 20 2a 2a 20 61 75 74 6f   the.    ** auto
1a080 6d 61 74 69 63 61 6c 6c 79 20 63 72 65 61 74 65  matically create
1a090 64 20 74 61 62 6c 65 20 77 69 74 68 20 72 6f 6f  d table with roo
1a0a0 74 2d 70 61 67 65 20 31 20 28 61 6e 20 42 4c 4f  t-page 1 (an BLO
1a0b0 42 5f 49 4e 54 4b 45 59 20 74 61 62 6c 65 29 2e  B_INTKEY table).
1a0c0 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20  .    */.    if( 
1a0d0 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f  pOp->p4.pKeyInfo
1a0e0 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 70 67   ){.      int pg
1a0f0 6e 6f 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  no;.      assert
1a100 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
1a110 34 5f 4b 45 59 49 4e 46 4f 20 29 3b 0a 20 20 20  4_KEYINFO );.   
1a120 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
1a130 74 72 65 65 43 72 65 61 74 65 54 61 62 6c 65 28  treeCreateTable(
1a140 70 43 78 2d 3e 70 42 74 2c 20 26 70 67 6e 6f 2c  pCx->pBt, &pgno,
1a150 20 42 54 52 45 45 5f 42 4c 4f 42 4b 45 59 20 7c   BTREE_BLOBKEY |
1a160 20 70 4f 70 2d 3e 70 35 29 3b 20 0a 20 20 20 20   pOp->p5); .    
1a170 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
1a180 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 61  _OK ){.        a
1a190 73 73 65 72 74 28 20 70 67 6e 6f 3d 3d 4d 41 53  ssert( pgno==MAS
1a1a0 54 45 52 5f 52 4f 4f 54 2b 31 20 29 3b 0a 20 20  TER_ROOT+1 );.  
1a1b0 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
1a1c0 65 33 42 74 72 65 65 43 75 72 73 6f 72 28 70 43  e3BtreeCursor(pC
1a1d0 78 2d 3e 70 42 74 2c 20 70 67 6e 6f 2c 20 31 2c  x->pBt, pgno, 1,
1a1e0 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   .              
1a1f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a200 20 20 28 4b 65 79 49 6e 66 6f 2a 29 70 4f 70 2d    (KeyInfo*)pOp-
1a210 3e 70 34 2e 7a 2c 20 70 43 78 2d 3e 70 43 75 72  >p4.z, pCx->pCur
1a220 73 6f 72 29 3b 0a 20 20 20 20 20 20 20 20 70 43  sor);.        pC
1a230 78 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f  x->pKeyInfo = pO
1a240 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a  p->p4.pKeyInfo;.
1a250 20 20 20 20 20 20 20 20 70 43 78 2d 3e 70 4b 65          pCx->pKe
1a260 79 49 6e 66 6f 2d 3e 65 6e 63 20 3d 20 45 4e 43  yInfo->enc = ENC
1a270 28 70 2d 3e 64 62 29 3b 0a 20 20 20 20 20 20 7d  (p->db);.      }
1a280 0a 20 20 20 20 20 20 70 43 78 2d 3e 69 73 54 61  .      pCx->isTa
1a290 62 6c 65 20 3d 20 30 3b 0a 20 20 20 20 7d 65 6c  ble = 0;.    }el
1a2a0 73 65 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73  se{.      rc = s
1a2b0 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f  qlite3BtreeCurso
1a2c0 72 28 70 43 78 2d 3e 70 42 74 2c 20 4d 41 53 54  r(pCx->pBt, MAST
1a2d0 45 52 5f 52 4f 4f 54 2c 20 31 2c 20 30 2c 20 70  ER_ROOT, 1, 0, p
1a2e0 43 78 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20  Cx->pCursor);.  
1a2f0 20 20 20 20 70 43 78 2d 3e 69 73 54 61 62 6c 65      pCx->isTable
1a300 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a   = 1;.    }.  }.
1a310 20 20 70 43 78 2d 3e 69 73 4f 72 64 65 72 65 64    pCx->isOrdered
1a320 20 3d 20 28 70 4f 70 2d 3e 70 35 21 3d 42 54 52   = (pOp->p5!=BTR
1a330 45 45 5f 55 4e 4f 52 44 45 52 45 44 29 3b 0a 20  EE_UNORDERED);. 
1a340 20 70 43 78 2d 3e 69 73 49 6e 64 65 78 20 3d 20   pCx->isIndex = 
1a350 21 70 43 78 2d 3e 69 73 54 61 62 6c 65 3b 0a 20  !pCx->isTable;. 
1a360 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
1a370 63 6f 64 65 3a 20 4f 70 65 6e 53 6f 72 74 65 72  code: OpenSorter
1a380 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a   P1 P2 * P4 *.**
1a390 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
1a3a0 77 6f 72 6b 73 20 6c 69 6b 65 20 4f 50 5f 4f 70  works like OP_Op
1a3b0 65 6e 45 70 68 65 6d 65 72 61 6c 20 65 78 63 65  enEphemeral exce
1a3c0 70 74 20 74 68 61 74 20 69 74 20 6f 70 65 6e 73  pt that it opens
1a3d0 0a 2a 2a 20 61 20 74 72 61 6e 73 69 65 6e 74 20  .** a transient 
1a3e0 69 6e 64 65 78 20 74 68 61 74 20 69 73 20 73 70  index that is sp
1a3f0 65 63 69 66 69 63 61 6c 6c 79 20 64 65 73 69 67  ecifically desig
1a400 6e 65 64 20 74 6f 20 73 6f 72 74 20 6c 61 72 67  ned to sort larg
1a410 65 0a 2a 2a 20 74 61 62 6c 65 73 20 75 73 69 6e  e.** tables usin
1a420 67 20 61 6e 20 65 78 74 65 72 6e 61 6c 20 6d 65  g an external me
1a430 72 67 65 2d 73 6f 72 74 20 61 6c 67 6f 72 69 74  rge-sort algorit
1a440 68 6d 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  hm..*/.case OP_S
1a450 6f 72 74 65 72 4f 70 65 6e 3a 20 7b 0a 20 20 56  orterOpen: {.  V
1a460 64 62 65 43 75 72 73 6f 72 20 2a 70 43 78 3b 0a  dbeCursor *pCx;.
1a470 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
1a480 4d 49 54 5f 4d 45 52 47 45 5f 53 4f 52 54 0a 20  MIT_MERGE_SORT. 
1a490 20 70 43 78 20 3d 20 61 6c 6c 6f 63 61 74 65 43   pCx = allocateC
1a4a0 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31  ursor(p, pOp->p1
1a4b0 2c 20 70 4f 70 2d 3e 70 32 2c 20 2d 31 2c 20 31  , pOp->p2, -1, 1
1a4c0 29 3b 0a 20 20 69 66 28 20 70 43 78 3d 3d 30 20  );.  if( pCx==0 
1a4d0 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
1a4e0 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d   pCx->pKeyInfo =
1a4f0 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66   pOp->p4.pKeyInf
1a500 6f 3b 0a 20 20 70 43 78 2d 3e 70 4b 65 79 49 6e  o;.  pCx->pKeyIn
1a510 66 6f 2d 3e 65 6e 63 20 3d 20 45 4e 43 28 70 2d  fo->enc = ENC(p-
1a520 3e 64 62 29 3b 0a 20 20 70 43 78 2d 3e 69 73 53  >db);.  pCx->isS
1a530 6f 72 74 65 72 20 3d 20 31 3b 0a 20 20 72 63 20  orter = 1;.  rc 
1a540 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72  = sqlite3VdbeSor
1a550 74 65 72 49 6e 69 74 28 64 62 2c 20 70 43 78 29  terInit(db, pCx)
1a560 3b 0a 23 65 6c 73 65 0a 20 20 70 4f 70 2d 3e 6f  ;.#else.  pOp->o
1a570 70 63 6f 64 65 20 3d 20 4f 50 5f 4f 70 65 6e 45  pcode = OP_OpenE
1a580 70 68 65 6d 65 72 61 6c 3b 0a 20 20 70 63 2d 2d  phemeral;.  pc--
1a590 3b 0a 23 65 6e 64 69 66 0a 20 20 62 72 65 61 6b  ;.#endif.  break
1a5a0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
1a5b0 4f 70 65 6e 50 73 65 75 64 6f 20 50 31 20 50 32  OpenPseudo P1 P2
1a5c0 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4f 70   P3 * *.**.** Op
1a5d0 65 6e 20 61 20 6e 65 77 20 63 75 72 73 6f 72 20  en a new cursor 
1a5e0 74 68 61 74 20 70 6f 69 6e 74 73 20 74 6f 20 61  that points to a
1a5f0 20 66 61 6b 65 20 74 61 62 6c 65 20 74 68 61 74   fake table that
1a600 20 63 6f 6e 74 61 69 6e 73 20 61 20 73 69 6e 67   contains a sing
1a610 6c 65 0a 2a 2a 20 72 6f 77 20 6f 66 20 64 61 74  le.** row of dat
1a620 61 2e 20 20 54 68 65 20 63 6f 6e 74 65 6e 74 20  a.  The content 
1a630 6f 66 20 74 68 61 74 20 6f 6e 65 20 72 6f 77 20  of that one row 
1a640 69 6e 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  in the content o
1a650 66 20 6d 65 6d 6f 72 79 0a 2a 2a 20 72 65 67 69  f memory.** regi
1a660 73 74 65 72 20 50 32 2e 20 20 49 6e 20 6f 74 68  ster P2.  In oth
1a670 65 72 20 77 6f 72 64 73 2c 20 63 75 72 73 6f 72  er words, cursor
1a680 20 50 31 20 62 65 63 6f 6d 65 73 20 61 6e 20 61   P1 becomes an a
1a690 6c 69 61 73 20 66 6f 72 20 74 68 65 20 0a 2a 2a  lias for the .**
1a6a0 20 4d 45 4d 5f 42 6c 6f 62 20 63 6f 6e 74 65 6e   MEM_Blob conten
1a6b0 74 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 72  t contained in r
1a6c0 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a  egister P2..**.*
1a6d0 2a 20 41 20 70 73 65 75 64 6f 2d 74 61 62 6c 65  * A pseudo-table
1a6e0 20 63 72 65 61 74 65 64 20 62 79 20 74 68 69 73   created by this
1a6f0 20 6f 70 63 6f 64 65 20 69 73 20 75 73 65 64 20   opcode is used 
1a700 74 6f 20 68 6f 6c 64 20 61 20 73 69 6e 67 6c 65  to hold a single
1a710 0a 2a 2a 20 72 6f 77 20 6f 75 74 70 75 74 20 66  .** row output f
1a720 72 6f 6d 20 74 68 65 20 73 6f 72 74 65 72 20 73  rom the sorter s
1a730 6f 20 74 68 61 74 20 74 68 65 20 72 6f 77 20 63  o that the row c
1a740 61 6e 20 62 65 20 64 65 63 6f 6d 70 6f 73 65 64  an be decomposed
1a750 20 69 6e 74 6f 0a 2a 2a 20 69 6e 64 69 76 69 64   into.** individ
1a760 75 61 6c 20 63 6f 6c 75 6d 6e 73 20 75 73 69 6e  ual columns usin
1a770 67 20 74 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20  g the OP_Column 
1a780 6f 70 63 6f 64 65 2e 20 20 54 68 65 20 4f 50 5f  opcode.  The OP_
1a790 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 0a 2a 2a  Column opcode.**
1a7a0 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 63 75 72   is the only cur
1a7b0 73 6f 72 20 6f 70 63 6f 64 65 20 74 68 61 74 20  sor opcode that 
1a7c0 77 6f 72 6b 73 20 77 69 74 68 20 61 20 70 73 65  works with a pse
1a7d0 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a  udo-table..**.**
1a7e0 20 50 33 20 69 73 20 74 68 65 20 6e 75 6d 62 65   P3 is the numbe
1a7f0 72 20 6f 66 20 66 69 65 6c 64 73 20 69 6e 20 74  r of fields in t
1a800 68 65 20 72 65 63 6f 72 64 73 20 74 68 61 74 20  he records that 
1a810 77 69 6c 6c 20 62 65 20 73 74 6f 72 65 64 20 62  will be stored b
1a820 79 0a 2a 2a 20 74 68 65 20 70 73 65 75 64 6f 2d  y.** the pseudo-
1a830 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f  table..*/.case O
1a840 50 5f 4f 70 65 6e 50 73 65 75 64 6f 3a 20 7b 0a  P_OpenPseudo: {.
1a850 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
1a860 78 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  x;..  assert( pO
1a870 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 70 43  p->p1>=0 );.  pC
1a880 78 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73  x = allocateCurs
1a890 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 70  or(p, pOp->p1, p
1a8a0 4f 70 2d 3e 70 33 2c 20 2d 31 2c 20 30 29 3b 0a  Op->p3, -1, 0);.
1a8b0 20 20 69 66 28 20 70 43 78 3d 3d 30 20 29 20 67    if( pCx==0 ) g
1a8c0 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43  oto no_mem;.  pC
1a8d0 78 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a  x->nullRow = 1;.
1a8e0 20 20 70 43 78 2d 3e 70 73 65 75 64 6f 54 61 62    pCx->pseudoTab
1a8f0 6c 65 52 65 67 20 3d 20 70 4f 70 2d 3e 70 32 3b  leReg = pOp->p2;
1a900 0a 20 20 70 43 78 2d 3e 69 73 54 61 62 6c 65 20  .  pCx->isTable 
1a910 3d 20 31 3b 0a 20 20 70 43 78 2d 3e 69 73 49 6e  = 1;.  pCx->isIn
1a920 64 65 78 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b  dex = 0;.  break
1a930 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
1a940 43 6c 6f 73 65 20 50 31 20 2a 20 2a 20 2a 20 2a  Close P1 * * * *
1a950 0a 2a 2a 0a 2a 2a 20 43 6c 6f 73 65 20 61 20 63  .**.** Close a c
1a960 75 72 73 6f 72 20 70 72 65 76 69 6f 75 73 6c 79  ursor previously
1a970 20 6f 70 65 6e 65 64 20 61 73 20 50 31 2e 20 20   opened as P1.  
1a980 49 66 20 50 31 20 69 73 20 6e 6f 74 0a 2a 2a 20  If P1 is not.** 
1a990 63 75 72 72 65 6e 74 6c 79 20 6f 70 65 6e 2c 20  currently open, 
1a9a0 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
1a9b0 20 69 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a   is a no-op..*/.
1a9c0 63 61 73 65 20 4f 50 5f 43 6c 6f 73 65 3a 20 7b  case OP_Close: {
1a9d0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1a9e0 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
1a9f0 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
1aa00 20 73 71 6c 69 74 65 33 56 64 62 65 46 72 65 65   sqlite3VdbeFree
1aa10 43 75 72 73 6f 72 28 70 2c 20 70 2d 3e 61 70 43  Cursor(p, p->apC
1aa20 73 72 5b 70 4f 70 2d 3e 70 31 5d 29 3b 0a 20 20  sr[pOp->p1]);.  
1aa30 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
1aa40 5d 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a  ] = 0;.  break;.
1aa50 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65  }../* Opcode: Se
1aa60 65 6b 47 65 20 50 31 20 50 32 20 50 33 20 50 34  ekGe P1 P2 P3 P4
1aa70 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73   *.**.** If curs
1aa80 6f 72 20 50 31 20 72 65 66 65 72 73 20 74 6f 20  or P1 refers to 
1aa90 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d  an SQL table (B-
1aaa0 54 72 65 65 20 74 68 61 74 20 75 73 65 73 20 69  Tree that uses i
1aab0 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a  nteger keys), .*
1aac0 2a 20 75 73 65 20 74 68 65 20 76 61 6c 75 65 20  * use the value 
1aad0 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 61  in register P3 a
1aae0 73 20 74 68 65 20 6b 65 79 2e 20 20 49 66 20 63  s the key.  If c
1aaf0 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20  ursor P1 refers 
1ab00 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e  .** to an SQL in
1ab10 64 65 78 2c 20 74 68 65 6e 20 50 33 20 69 73 20  dex, then P3 is 
1ab20 74 68 65 20 66 69 72 73 74 20 69 6e 20 61 6e 20  the first in an 
1ab30 61 72 72 61 79 20 6f 66 20 50 34 20 72 65 67 69  array of P4 regi
1ab40 73 74 65 72 73 20 0a 2a 2a 20 74 68 61 74 20 61  sters .** that a
1ab50 72 65 20 75 73 65 64 20 61 73 20 61 6e 20 75 6e  re used as an un
1ab60 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79  packed index key
1ab70 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74  . .**.** Reposit
1ab80 69 6f 6e 20 63 75 72 73 6f 72 20 50 31 20 73 6f  ion cursor P1 so
1ab90 20 74 68 61 74 20 20 69 74 20 70 6f 69 6e 74 73   that  it points
1aba0 20 74 6f 20 74 68 65 20 73 6d 61 6c 6c 65 73 74   to the smallest
1abb0 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a 20   entry that .** 
1abc0 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  is greater than 
1abd0 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20  or equal to the 
1abe0 6b 65 79 20 76 61 6c 75 65 2e 20 49 66 20 74 68  key value. If th
1abf0 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72  ere are no recor
1ac00 64 73 20 0a 2a 2a 20 67 72 65 61 74 65 72 20 74  ds .** greater t
1ac10 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20  han or equal to 
1ac20 74 68 65 20 6b 65 79 20 61 6e 64 20 50 32 20 69  the key and P2 i
1ac30 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e  s not zero, then
1ac40 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a   jump to P2..**.
1ac50 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75  ** See also: Fou
1ac60 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 44 69  nd, NotFound, Di
1ac70 73 74 69 6e 63 74 2c 20 53 65 65 6b 4c 74 2c 20  stinct, SeekLt, 
1ac80 53 65 65 6b 47 74 2c 20 53 65 65 6b 4c 65 0a 2a  SeekGt, SeekLe.*
1ac90 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65  /./* Opcode: See
1aca0 6b 47 74 20 50 31 20 50 32 20 50 33 20 50 34 20  kGt P1 P2 P3 P4 
1acb0 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f  *.**.** If curso
1acc0 72 20 50 31 20 72 65 66 65 72 73 20 74 6f 20 61  r P1 refers to a
1acd0 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d 54  n SQL table (B-T
1ace0 72 65 65 20 74 68 61 74 20 75 73 65 73 20 69 6e  ree that uses in
1acf0 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a  teger keys), .**
1ad00 20 75 73 65 20 74 68 65 20 76 61 6c 75 65 20 69   use the value i
1ad10 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 61 73  n register P3 as
1ad20 20 61 20 6b 65 79 2e 20 49 66 20 63 75 72 73 6f   a key. If curso
1ad30 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a 20  r P1 refers .** 
1ad40 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c  to an SQL index,
1ad50 20 74 68 65 6e 20 50 33 20 69 73 20 74 68 65 20   then P3 is the 
1ad60 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72 61  first in an arra
1ad70 79 20 6f 66 20 50 34 20 72 65 67 69 73 74 65 72  y of P4 register
1ad80 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 75  s .** that are u
1ad90 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63 6b  sed as an unpack
1ada0 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a  ed index key. .*
1adb0 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20  *.** Reposition 
1adc0 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61  cursor P1 so tha
1add0 74 20 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20  t  it points to 
1ade0 74 68 65 20 73 6d 61 6c 6c 65 73 74 20 65 6e 74  the smallest ent
1adf0 72 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20 67  ry that .** is g
1ae00 72 65 61 74 65 72 20 74 68 61 6e 20 74 68 65 20  reater than the 
1ae10 6b 65 79 20 76 61 6c 75 65 2e 20 49 66 20 74 68  key value. If th
1ae20 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72  ere are no recor
1ae30 64 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  ds greater than 
1ae40 0a 2a 2a 20 74 68 65 20 6b 65 79 20 61 6e 64 20  .** the key and 
1ae50 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20  P2 is not zero, 
1ae60 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e  then jump to P2.
1ae70 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
1ae80 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64   Found, NotFound
1ae90 2c 20 44 69 73 74 69 6e 63 74 2c 20 53 65 65 6b  , Distinct, Seek
1aea0 4c 74 2c 20 53 65 65 6b 47 65 2c 20 53 65 65 6b  Lt, SeekGe, Seek
1aeb0 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  Le.*/./* Opcode:
1aec0 20 53 65 65 6b 4c 74 20 50 31 20 50 32 20 50 33   SeekLt P1 P2 P3
1aed0 20 50 34 20 2a 20 0a 2a 2a 0a 2a 2a 20 49 66 20   P4 * .**.** If 
1aee0 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73  cursor P1 refers
1aef0 20 74 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c 65   to an SQL table
1af00 20 28 42 2d 54 72 65 65 20 74 68 61 74 20 75 73   (B-Tree that us
1af10 65 73 20 69 6e 74 65 67 65 72 20 6b 65 79 73 29  es integer keys)
1af20 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65 20 76 61  , .** use the va
1af30 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
1af40 50 33 20 61 73 20 61 20 6b 65 79 2e 20 49 66 20  P3 as a key. If 
1af50 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73  cursor P1 refers
1af60 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69   .** to an SQL i
1af70 6e 64 65 78 2c 20 74 68 65 6e 20 50 33 20 69 73  ndex, then P3 is
1af80 20 74 68 65 20 66 69 72 73 74 20 69 6e 20 61 6e   the first in an
1af90 20 61 72 72 61 79 20 6f 66 20 50 34 20 72 65 67   array of P4 reg
1afa0 69 73 74 65 72 73 20 0a 2a 2a 20 74 68 61 74 20  isters .** that 
1afb0 61 72 65 20 75 73 65 64 20 61 73 20 61 6e 20 75  are used as an u
1afc0 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65  npacked index ke
1afd0 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69  y. .**.** Reposi
1afe0 74 69 6f 6e 20 63 75 72 73 6f 72 20 50 31 20 73  tion cursor P1 s
1aff0 6f 20 74 68 61 74 20 20 69 74 20 70 6f 69 6e 74  o that  it point
1b000 73 20 74 6f 20 74 68 65 20 6c 61 72 67 65 73 74  s to the largest
1b010 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a 20   entry that .** 
1b020 69 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68 65  is less than the
1b030 20 6b 65 79 20 76 61 6c 75 65 2e 20 49 66 20 74   key value. If t
1b040 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f  here are no reco
1b050 72 64 73 20 6c 65 73 73 20 74 68 61 6e 20 0a 2a  rds less than .*
1b060 2a 20 74 68 65 20 6b 65 79 20 61 6e 64 20 50 32  * the key and P2
1b070 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68   is not zero, th
1b080 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a  en jump to P2..*
1b090 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46  *.** See also: F
1b0a0 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20  ound, NotFound, 
1b0b0 44 69 73 74 69 6e 63 74 2c 20 53 65 65 6b 47 74  Distinct, SeekGt
1b0c0 2c 20 53 65 65 6b 47 65 2c 20 53 65 65 6b 4c 65  , SeekGe, SeekLe
1b0d0 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .*/./* Opcode: S
1b0e0 65 65 6b 4c 65 20 50 31 20 50 32 20 50 33 20 50  eekLe P1 P2 P3 P
1b0f0 34 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72  4 *.**.** If cur
1b100 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 74 6f  sor P1 refers to
1b110 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42   an SQL table (B
1b120 2d 54 72 65 65 20 74 68 61 74 20 75 73 65 73 20  -Tree that uses 
1b130 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a  integer keys), .
1b140 2a 2a 20 75 73 65 20 74 68 65 20 76 61 6c 75 65  ** use the value
1b150 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20   in register P3 
1b160 61 73 20 61 20 6b 65 79 2e 20 49 66 20 63 75 72  as a key. If cur
1b170 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a  sor P1 refers .*
1b180 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65  * to an SQL inde
1b190 78 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74 68  x, then P3 is th
1b1a0 65 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72  e first in an ar
1b1b0 72 61 79 20 6f 66 20 50 34 20 72 65 67 69 73 74  ray of P4 regist
1b1c0 65 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65  ers .** that are
1b1d0 20 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61   used as an unpa
1b1e0 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20  cked index key. 
1b1f0 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f  .**.** Repositio
1b200 6e 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74  n cursor P1 so t
1b210 68 61 74 20 69 74 20 70 6f 69 6e 74 73 20 74 6f  hat it points to
1b220 20 74 68 65 20 6c 61 72 67 65 73 74 20 65 6e 74   the largest ent
1b230 72 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20 6c  ry that .** is l
1b240 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61  ess than or equa
1b250 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 76 61 6c  l to the key val
1b260 75 65 2e 20 49 66 20 74 68 65 72 65 20 61 72 65  ue. If there are
1b270 20 6e 6f 20 72 65 63 6f 72 64 73 20 0a 2a 2a 20   no records .** 
1b280 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75  less than or equ
1b290 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 61 6e  al to the key an
1b2a0 64 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f  d P2 is not zero
1b2b0 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50  , then jump to P
1b2c0 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  2..**.** See als
1b2d0 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75  o: Found, NotFou
1b2e0 6e 64 2c 20 44 69 73 74 69 6e 63 74 2c 20 53 65  nd, Distinct, Se
1b2f0 65 6b 47 74 2c 20 53 65 65 6b 47 65 2c 20 53 65  ekGt, SeekGe, Se
1b300 65 6b 4c 74 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ekLt.*/.case OP_
1b310 53 65 65 6b 4c 74 3a 20 20 20 20 20 20 20 20 20  SeekLt:         
1b320 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a  /* jump, in3 */.
1b330 63 61 73 65 20 4f 50 5f 53 65 65 6b 4c 65 3a 20  case OP_SeekLe: 
1b340 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
1b350 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f   in3 */.case OP_
1b360 53 65 65 6b 47 65 3a 20 20 20 20 20 20 20 20 20  SeekGe:         
1b370 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a  /* jump, in3 */.
1b380 63 61 73 65 20 4f 50 5f 53 65 65 6b 47 74 3a 20  case OP_SeekGt: 
1b390 7b 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c  {       /* jump,
1b3a0 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 72 65   in3 */.  int re
1b3b0 73 3b 0a 20 20 69 6e 74 20 6f 63 3b 0a 20 20 56  s;.  int oc;.  V
1b3c0 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
1b3d0 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20   UnpackedRecord 
1b3e0 72 3b 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b  r;.  int nField;
1b3f0 0a 20 20 69 36 34 20 69 4b 65 79 3b 20 20 20 20  .  i64 iKey;    
1b400 20 20 2f 2a 20 54 68 65 20 72 6f 77 69 64 20 77    /* The rowid w
1b410 65 20 61 72 65 20 74 6f 20 73 65 65 6b 20 74 6f  e are to seek to
1b420 20 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70   */..  assert( p
1b430 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
1b440 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
1b450 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
1b460 2d 3e 70 32 21 3d 30 20 29 3b 0a 20 20 70 43 20  ->p2!=0 );.  pC 
1b470 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
1b480 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
1b490 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  C!=0 );.  assert
1b4a0 28 20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c  ( pC->pseudoTabl
1b4b0 65 52 65 67 3d 3d 30 20 29 3b 0a 20 20 61 73 73  eReg==0 );.  ass
1b4c0 65 72 74 28 20 4f 50 5f 53 65 65 6b 4c 65 20 3d  ert( OP_SeekLe =
1b4d0 3d 20 4f 50 5f 53 65 65 6b 4c 74 2b 31 20 29 3b  = OP_SeekLt+1 );
1b4e0 0a 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65  .  assert( OP_Se
1b4f0 65 6b 47 65 20 3d 3d 20 4f 50 5f 53 65 65 6b 4c  ekGe == OP_SeekL
1b500 74 2b 32 20 29 3b 0a 20 20 61 73 73 65 72 74 28  t+2 );.  assert(
1b510 20 4f 50 5f 53 65 65 6b 47 74 20 3d 3d 20 4f 50   OP_SeekGt == OP
1b520 5f 53 65 65 6b 4c 74 2b 33 20 29 3b 0a 20 20 61  _SeekLt+3 );.  a
1b530 73 73 65 72 74 28 20 70 43 2d 3e 69 73 4f 72 64  ssert( pC->isOrd
1b540 65 72 65 64 20 29 3b 0a 20 20 69 66 28 20 41 4c  ered );.  if( AL
1b550 57 41 59 53 28 70 43 2d 3e 70 43 75 72 73 6f 72  WAYS(pC->pCursor
1b560 21 3d 30 29 20 29 7b 0a 20 20 20 20 6f 63 20 3d  !=0) ){.    oc =
1b570 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a 20 20   pOp->opcode;.  
1b580 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20    pC->nullRow = 
1b590 30 3b 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 69  0;.    if( pC->i
1b5a0 73 54 61 62 6c 65 20 29 7b 0a 20 20 20 20 20 20  sTable ){.      
1b5b0 2f 2a 20 54 68 65 20 69 6e 70 75 74 20 76 61 6c  /* The input val
1b5c0 75 65 20 69 6e 20 50 33 20 6d 69 67 68 74 20 62  ue in P3 might b
1b5d0 65 20 6f 66 20 61 6e 79 20 74 79 70 65 3a 20 69  e of any type: i
1b5e0 6e 74 65 67 65 72 2c 20 72 65 61 6c 2c 20 73 74  nteger, real, st
1b5f0 72 69 6e 67 2c 0a 20 20 20 20 20 20 2a 2a 20 62  ring,.      ** b
1b600 6c 6f 62 2c 20 6f 72 20 4e 55 4c 4c 2e 20 20 42  lob, or NULL.  B
1b610 75 74 20 69 74 20 6e 65 65 64 73 20 74 6f 20 62  ut it needs to b
1b620 65 20 61 6e 20 69 6e 74 65 67 65 72 20 62 65 66  e an integer bef
1b630 6f 72 65 20 77 65 20 63 61 6e 20 64 6f 0a 20 20  ore we can do.  
1b640 20 20 20 20 2a 2a 20 74 68 65 20 73 65 65 6b 2c      ** the seek,
1b650 20 73 6f 20 63 6f 76 65 72 74 20 69 74 2e 20 2a   so covert it. *
1b660 2f 0a 20 20 20 20 20 20 70 49 6e 33 20 3d 20 26  /.      pIn3 = &
1b670 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
1b680 20 20 20 20 20 61 70 70 6c 79 4e 75 6d 65 72 69       applyNumeri
1b690 63 41 66 66 69 6e 69 74 79 28 70 49 6e 33 29 3b  cAffinity(pIn3);
1b6a0 0a 20 20 20 20 20 20 69 4b 65 79 20 3d 20 73 71  .      iKey = sq
1b6b0 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75  lite3VdbeIntValu
1b6c0 65 28 70 49 6e 33 29 3b 0a 20 20 20 20 20 20 70  e(pIn3);.      p
1b6d0 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20  C->rowidIsValid 
1b6e0 3d 20 30 3b 0a 0a 20 20 20 20 20 20 2f 2a 20 49  = 0;..      /* I
1b6f0 66 20 74 68 65 20 50 33 20 76 61 6c 75 65 20 63  f the P3 value c
1b700 6f 75 6c 64 20 6e 6f 74 20 62 65 20 63 6f 6e 76  ould not be conv
1b710 65 72 74 65 64 20 69 6e 74 6f 20 61 6e 20 69 6e  erted into an in
1b720 74 65 67 65 72 20 77 69 74 68 6f 75 74 0a 20 20  teger without.  
1b730 20 20 20 20 2a 2a 20 6c 6f 73 73 20 6f 66 20 69      ** loss of i
1b740 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20 74 68 65 6e  nformation, then
1b750 20 73 70 65 63 69 61 6c 20 70 72 6f 63 65 73 73   special process
1b760 69 6e 67 20 69 73 20 72 65 71 75 69 72 65 64 2e  ing is required.
1b770 2e 2e 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20  .. */.      if( 
1b780 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn3->flags & M
1b790 45 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b 0a 20 20  EM_Int)==0 ){.  
1b7a0 20 20 20 20 20 20 69 66 28 20 28 70 49 6e 33 2d        if( (pIn3-
1b7b0 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61  >flags & MEM_Rea
1b7c0 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  l)==0 ){.       
1b7d0 20 20 20 2f 2a 20 49 66 20 74 68 65 20 50 33 20     /* If the P3 
1b7e0 76 61 6c 75 65 20 63 61 6e 6e 6f 74 20 62 65 20  value cannot be 
1b7f0 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f 20 61  converted into a
1b800 6e 79 20 6b 69 6e 64 20 6f 66 20 61 20 6e 75 6d  ny kind of a num
1b810 62 65 72 2c 0a 20 20 20 20 20 20 20 20 20 20 2a  ber,.          *
1b820 2a 20 74 68 65 6e 20 74 68 65 20 73 65 65 6b 20  * then the seek 
1b830 69 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65 2c  is not possible,
1b840 20 73 6f 20 6a 75 6d 70 20 74 6f 20 50 32 20 2a   so jump to P2 *
1b850 2f 0a 20 20 20 20 20 20 20 20 20 20 70 63 20 3d  /.          pc =
1b860 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
1b870 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
1b880 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
1b890 20 2f 2a 20 49 66 20 77 65 20 72 65 61 63 68 20   /* If we reach 
1b8a0 74 68 69 73 20 70 6f 69 6e 74 2c 20 74 68 65 6e  this point, then
1b8b0 20 74 68 65 20 50 33 20 76 61 6c 75 65 20 6d 75   the P3 value mu
1b8c0 73 74 20 62 65 20 61 20 66 6c 6f 61 74 69 6e 67  st be a floating
1b8d0 0a 20 20 20 20 20 20 20 20 2a 2a 20 70 6f 69 6e  .        ** poin
1b8e0 74 20 6e 75 6d 62 65 72 2e 20 2a 2f 0a 20 20 20  t number. */.   
1b8f0 20 20 20 20 20 61 73 73 65 72 74 28 20 28 70 49       assert( (pI
1b900 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n3->flags & MEM_
1b910 52 65 61 6c 29 21 3d 30 20 29 3b 0a 0a 20 20 20  Real)!=0 );..   
1b920 20 20 20 20 20 69 66 28 20 69 4b 65 79 3d 3d 53       if( iKey==S
1b930 4d 41 4c 4c 45 53 54 5f 49 4e 54 36 34 20 26 26  MALLEST_INT64 &&
1b940 20 28 70 49 6e 33 2d 3e 72 3c 28 64 6f 75 62 6c   (pIn3->r<(doubl
1b950 65 29 69 4b 65 79 20 7c 7c 20 70 49 6e 33 2d 3e  e)iKey || pIn3->
1b960 72 3e 30 29 20 29 7b 0a 20 20 20 20 20 20 20 20  r>0) ){.        
1b970 20 20 2f 2a 20 54 68 65 20 50 33 20 76 61 6c 75    /* The P3 valu
1b980 65 20 69 73 20 74 6f 6f 20 6c 61 72 67 65 20 69  e is too large i
1b990 6e 20 6d 61 67 6e 69 74 75 64 65 20 74 6f 20 62  n magnitude to b
1b9a0 65 20 65 78 70 72 65 73 73 65 64 20 61 73 20 61  e expressed as a
1b9b0 6e 0a 20 20 20 20 20 20 20 20 20 20 2a 2a 20 69  n.          ** i
1b9c0 6e 74 65 67 65 72 2e 20 2a 2f 0a 20 20 20 20 20  nteger. */.     
1b9d0 20 20 20 20 20 72 65 73 20 3d 20 31 3b 0a 20 20       res = 1;.  
1b9e0 20 20 20 20 20 20 20 20 69 66 28 20 70 49 6e 33          if( pIn3
1b9f0 2d 3e 72 3c 30 20 29 7b 0a 20 20 20 20 20 20 20  ->r<0 ){.       
1ba00 20 20 20 20 20 69 66 28 20 6f 63 3e 3d 4f 50 5f       if( oc>=OP_
1ba10 53 65 65 6b 47 65 20 29 7b 20 20 61 73 73 65 72  SeekGe ){  asser
1ba20 74 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 65  t( oc==OP_SeekGe
1ba30 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47   || oc==OP_SeekG
1ba40 74 20 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  t );.           
1ba50 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
1ba60 74 72 65 65 46 69 72 73 74 28 70 43 2d 3e 70 43  treeFirst(pC->pC
1ba70 75 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20  ursor, &res);.  
1ba80 20 20 20 20 20 20 20 20 20 20 20 20 69 66 28 20              if( 
1ba90 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20  rc!=SQLITE_OK ) 
1baa0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
1bab0 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20  o_error;.       
1bac0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
1bad0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
1bae0 20 20 20 20 69 66 28 20 6f 63 3c 3d 4f 50 5f 53      if( oc<=OP_S
1baf0 65 65 6b 4c 65 20 29 7b 20 20 61 73 73 65 72 74  eekLe ){  assert
1bb00 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 74 20  ( oc==OP_SeekLt 
1bb10 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 65  || oc==OP_SeekLe
1bb20 20 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20   );.            
1bb30 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
1bb40 72 65 65 4c 61 73 74 28 70 43 2d 3e 70 43 75 72  reeLast(pC->pCur
1bb50 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20  sor, &res);.    
1bb60 20 20 20 20 20 20 20 20 20 20 69 66 28 20 72 63            if( rc
1bb70 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f  !=SQLITE_OK ) go
1bb80 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
1bb90 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 20  error;.         
1bba0 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 7d     }.          }
1bbb0 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20 72  .          if( r
1bbc0 65 73 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  es ){.          
1bbd0 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
1bbe0 20 31 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a   1;.          }.
1bbf0 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
1bc00 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 20 69  .        }else i
1bc10 66 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 74  f( oc==OP_SeekLt
1bc20 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47   || oc==OP_SeekG
1bc30 65 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 2f  e ){.          /
1bc40 2a 20 55 73 65 20 74 68 65 20 63 65 69 6c 69 6e  * Use the ceilin
1bc50 67 28 29 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20  g() function to 
1bc60 63 6f 6e 76 65 72 74 20 72 65 61 6c 2d 3e 69 6e  convert real->in
1bc70 74 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 69  t */.          i
1bc80 66 28 20 70 49 6e 33 2d 3e 72 20 3e 20 28 64 6f  f( pIn3->r > (do
1bc90 75 62 6c 65 29 69 4b 65 79 20 29 20 69 4b 65 79  uble)iKey ) iKey
1bca0 2b 2b 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73  ++;.        }els
1bcb0 65 7b 0a 20 20 20 20 20 20 20 20 20 20 2f 2a 20  e{.          /* 
1bcc0 55 73 65 20 74 68 65 20 66 6c 6f 6f 72 28 29 20  Use the floor() 
1bcd0 66 75 6e 63 74 69 6f 6e 20 74 6f 20 63 6f 6e 76  function to conv
1bce0 65 72 74 20 72 65 61 6c 2d 3e 69 6e 74 20 2a 2f  ert real->int */
1bcf0 0a 20 20 20 20 20 20 20 20 20 20 61 73 73 65 72  .          asser
1bd00 74 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 65  t( oc==OP_SeekLe
1bd10 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47   || oc==OP_SeekG
1bd20 74 20 29 3b 0a 20 20 20 20 20 20 20 20 20 20 69  t );.          i
1bd30 66 28 20 70 49 6e 33 2d 3e 72 20 3c 20 28 64 6f  f( pIn3->r < (do
1bd40 75 62 6c 65 29 69 4b 65 79 20 29 20 69 4b 65 79  uble)iKey ) iKey
1bd50 2d 2d 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  --;.        }.  
1bd60 20 20 20 20 7d 20 0a 20 20 20 20 20 20 72 63 20      } .      rc 
1bd70 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f  = sqlite3BtreeMo
1bd80 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d  vetoUnpacked(pC-
1bd90 3e 70 43 75 72 73 6f 72 2c 20 30 2c 20 28 75 36  >pCursor, 0, (u6
1bda0 34 29 69 4b 65 79 2c 20 30 2c 20 26 72 65 73 29  4)iKey, 0, &res)
1bdb0 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 21 3d  ;.      if( rc!=
1bdc0 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
1bdd0 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
1bde0 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
1bdf0 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20      }.      if( 
1be00 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  res==0 ){.      
1be10 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c    pC->rowidIsVal
1be20 69 64 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20  id = 1;.        
1be30 70 43 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20  pC->lastRowid = 
1be40 69 4b 65 79 3b 0a 20 20 20 20 20 20 7d 0a 20 20  iKey;.      }.  
1be50 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 6e    }else{.      n
1be60 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 34 2e  Field = pOp->p4.
1be70 69 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  i;.      assert(
1be80 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
1be90 5f 49 4e 54 33 32 20 29 3b 0a 20 20 20 20 20 20  _INT32 );.      
1bea0 61 73 73 65 72 74 28 20 6e 46 69 65 6c 64 3e 30  assert( nField>0
1beb0 20 29 3b 0a 20 20 20 20 20 20 72 2e 70 4b 65 79   );.      r.pKey
1bec0 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49  Info = pC->pKeyI
1bed0 6e 66 6f 3b 0a 20 20 20 20 20 20 72 2e 6e 46 69  nfo;.      r.nFi
1bee0 65 6c 64 20 3d 20 28 75 31 36 29 6e 46 69 65 6c  eld = (u16)nFiel
1bef0 64 3b 0a 0a 20 20 20 20 20 20 2f 2a 20 54 68 65  d;..      /* The
1bf00 20 6e 65 78 74 20 6c 69 6e 65 20 6f 66 20 63 6f   next line of co
1bf10 64 65 20 63 6f 6d 70 75 74 65 73 20 61 73 20 66  de computes as f
1bf20 6f 6c 6c 6f 77 73 2c 20 6f 6e 6c 79 20 66 61 73  ollows, only fas
1bf30 74 65 72 3a 0a 20 20 20 20 20 20 2a 2a 20 20 20  ter:.      **   
1bf40 69 66 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47  if( oc==OP_SeekG
1bf50 74 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b  t || oc==OP_Seek
1bf60 4c 65 20 29 7b 0a 20 20 20 20 20 20 2a 2a 20 20  Le ){.      **  
1bf70 20 20 20 72 2e 66 6c 61 67 73 20 3d 20 55 4e 50     r.flags = UNP
1bf80 41 43 4b 45 44 5f 49 4e 43 52 4b 45 59 3b 0a 20  ACKED_INCRKEY;. 
1bf90 20 20 20 20 20 2a 2a 20 20 20 7d 65 6c 73 65 7b       **   }else{
1bfa0 0a 20 20 20 20 20 20 2a 2a 20 20 20 20 20 72 2e  .      **     r.
1bfb0 66 6c 61 67 73 20 3d 20 30 3b 0a 20 20 20 20 20  flags = 0;.     
1bfc0 20 2a 2a 20 20 20 7d 0a 20 20 20 20 20 20 2a 2f   **   }.      */
1bfd0 0a 20 20 20 20 20 20 72 2e 66 6c 61 67 73 20 3d  .      r.flags =
1bfe0 20 28 75 31 36 29 28 55 4e 50 41 43 4b 45 44 5f   (u16)(UNPACKED_
1bff0 49 4e 43 52 4b 45 59 20 2a 20 28 31 20 26 20 28  INCRKEY * (1 & (
1c000 6f 63 20 2d 20 4f 50 5f 53 65 65 6b 4c 74 29 29  oc - OP_SeekLt))
1c010 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
1c020 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 47 74 20 7c   oc!=OP_SeekGt |
1c030 7c 20 72 2e 66 6c 61 67 73 3d 3d 55 4e 50 41 43  | r.flags==UNPAC
1c040 4b 45 44 5f 49 4e 43 52 4b 45 59 20 29 3b 0a 20  KED_INCRKEY );. 
1c050 20 20 20 20 20 61 73 73 65 72 74 28 20 6f 63 21       assert( oc!
1c060 3d 4f 50 5f 53 65 65 6b 4c 65 20 7c 7c 20 72 2e  =OP_SeekLe || r.
1c070 66 6c 61 67 73 3d 3d 55 4e 50 41 43 4b 45 44 5f  flags==UNPACKED_
1c080 49 4e 43 52 4b 45 59 20 29 3b 0a 20 20 20 20 20  INCRKEY );.     
1c090 20 61 73 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f   assert( oc!=OP_
1c0a0 53 65 65 6b 47 65 20 7c 7c 20 72 2e 66 6c 61 67  SeekGe || r.flag
1c0b0 73 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 61 73  s==0 );.      as
1c0c0 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65  sert( oc!=OP_See
1c0d0 6b 4c 74 20 7c 7c 20 72 2e 66 6c 61 67 73 3d 3d  kLt || r.flags==
1c0e0 30 20 29 3b 0a 0a 20 20 20 20 20 20 72 2e 61 4d  0 );..      r.aM
1c0f0 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  em = &aMem[pOp->
1c100 70 33 5d 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  p3];.#ifdef SQLI
1c110 54 45 5f 44 45 42 55 47 0a 20 20 20 20 20 20 7b  TE_DEBUG.      {
1c120 20 69 6e 74 20 69 3b 20 66 6f 72 28 69 3d 30 3b   int i; for(i=0;
1c130 20 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b   i<r.nField; i++
1c140 29 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56  ) assert( memIsV
1c150 61 6c 69 64 28 26 72 2e 61 4d 65 6d 5b 69 5d 29  alid(&r.aMem[i])
1c160 20 29 3b 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20   ); }.#endif.   
1c170 20 20 20 45 78 70 61 6e 64 42 6c 6f 62 28 72 2e     ExpandBlob(r.
1c180 61 4d 65 6d 29 3b 0a 20 20 20 20 20 20 72 63 20  aMem);.      rc 
1c190 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f  = sqlite3BtreeMo
1c1a0 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d  vetoUnpacked(pC-
1c1b0 3e 70 43 75 72 73 6f 72 2c 20 26 72 2c 20 30 2c  >pCursor, &r, 0,
1c1c0 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20   0, &res);.     
1c1d0 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
1c1e0 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 67 6f  OK ){.        go
1c1f0 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
1c200 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20  error;.      }. 
1c210 20 20 20 20 20 70 43 2d 3e 72 6f 77 69 64 49 73       pC->rowidIs
1c220 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 20 20 7d  Valid = 0;.    }
1c230 0a 20 20 20 20 70 43 2d 3e 64 65 66 65 72 72 65  .    pC->deferre
1c240 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20  dMoveto = 0;.   
1c250 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
1c260 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a   = CACHE_STALE;.
1c270 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45  #ifdef SQLITE_TE
1c280 53 54 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73  ST.    sqlite3_s
1c290 65 61 72 63 68 5f 63 6f 75 6e 74 2b 2b 3b 0a 23  earch_count++;.#
1c2a0 65 6e 64 69 66 0a 20 20 20 20 69 66 28 20 6f 63  endif.    if( oc
1c2b0 3e 3d 4f 50 5f 53 65 65 6b 47 65 20 29 7b 20 20  >=OP_SeekGe ){  
1c2c0 61 73 73 65 72 74 28 20 6f 63 3d 3d 4f 50 5f 53  assert( oc==OP_S
1c2d0 65 65 6b 47 65 20 7c 7c 20 6f 63 3d 3d 4f 50 5f  eekGe || oc==OP_
1c2e0 53 65 65 6b 47 74 20 29 3b 0a 20 20 20 20 20 20  SeekGt );.      
1c2f0 69 66 28 20 72 65 73 3c 30 20 7c 7c 20 28 72 65  if( res<0 || (re
1c300 73 3d 3d 30 20 26 26 20 6f 63 3d 3d 4f 50 5f 53  s==0 && oc==OP_S
1c310 65 65 6b 47 74 29 20 29 7b 0a 20 20 20 20 20 20  eekGt) ){.      
1c320 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
1c330 72 65 65 4e 65 78 74 28 70 43 2d 3e 70 43 75 72  reeNext(pC->pCur
1c340 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20  sor, &res);.    
1c350 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
1c360 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f  TE_OK ) goto abo
1c370 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
1c380 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 72 6f 77  .        pC->row
1c390 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20  idIsValid = 0;. 
1c3a0 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
1c3b0 20 20 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 20      res = 0;.   
1c3c0 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a     }.    }else{.
1c3d0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6f 63        assert( oc
1c3e0 3d 3d 4f 50 5f 53 65 65 6b 4c 74 20 7c 7c 20 6f  ==OP_SeekLt || o
1c3f0 63 3d 3d 4f 50 5f 53 65 65 6b 4c 65 20 29 3b 0a  c==OP_SeekLe );.
1c400 20 20 20 20 20 20 69 66 28 20 72 65 73 3e 30 20        if( res>0 
1c410 7c 7c 20 28 72 65 73 3d 3d 30 20 26 26 20 6f 63  || (res==0 && oc
1c420 3d 3d 4f 50 5f 53 65 65 6b 4c 74 29 20 29 7b 0a  ==OP_SeekLt) ){.
1c430 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c          rc = sql
1c440 69 74 65 33 42 74 72 65 65 50 72 65 76 69 6f 75  ite3BtreePreviou
1c450 73 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26  s(pC->pCursor, &
1c460 72 65 73 29 3b 0a 20 20 20 20 20 20 20 20 69 66  res);.        if
1c470 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
1c480 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
1c490 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20  _to_error;.     
1c4a0 20 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61     pC->rowidIsVa
1c4b0 6c 69 64 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d  lid = 0;.      }
1c4c0 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 2f 2a  else{.        /*
1c4d0 20 72 65 73 20 6d 69 67 68 74 20 62 65 20 6e 65   res might be ne
1c4e0 67 61 74 69 76 65 20 62 65 63 61 75 73 65 20 74  gative because t
1c4f0 68 65 20 74 61 62 6c 65 20 69 73 20 65 6d 70 74  he table is empt
1c500 79 2e 20 20 43 68 65 63 6b 20 74 6f 0a 20 20 20  y.  Check to.   
1c510 20 20 20 20 20 2a 2a 20 73 65 65 20 69 66 20 74       ** see if t
1c520 68 69 73 20 69 73 20 74 68 65 20 63 61 73 65 2e  his is the case.
1c530 0a 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  .        */.    
1c540 20 20 20 20 72 65 73 20 3d 20 73 71 6c 69 74 65      res = sqlite
1c550 33 42 74 72 65 65 45 6f 66 28 70 43 2d 3e 70 43  3BtreeEof(pC->pC
1c560 75 72 73 6f 72 29 3b 0a 20 20 20 20 20 20 7d 0a  ursor);.      }.
1c570 20 20 20 20 7d 0a 20 20 20 20 61 73 73 65 72 74      }.    assert
1c580 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20  ( pOp->p2>0 );. 
1c590 20 20 20 69 66 28 20 72 65 73 20 29 7b 0a 20 20     if( res ){.  
1c5a0 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
1c5b0 20 2d 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 65   - 1;.    }.  }e
1c5c0 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 54 68 69 73  lse{.    /* This
1c5d0 20 68 61 70 70 65 6e 73 20 77 68 65 6e 20 61 74   happens when at
1c5e0 74 65 6d 70 74 69 6e 67 20 74 6f 20 6f 70 65 6e  tempting to open
1c5f0 20 74 68 65 20 73 71 6c 69 74 65 33 5f 6d 61 73   the sqlite3_mas
1c600 74 65 72 20 74 61 62 6c 65 0a 20 20 20 20 2a 2a  ter table.    **
1c610 20 66 6f 72 20 72 65 61 64 20 61 63 63 65 73 73   for read access
1c620 20 72 65 74 75 72 6e 73 20 53 51 4c 49 54 45 5f   returns SQLITE_
1c630 45 4d 50 54 59 2e 20 49 6e 20 74 68 69 73 20 63  EMPTY. In this c
1c640 61 73 65 20 61 6c 77 61 79 73 0a 20 20 20 20 2a  ase always.    *
1c650 2a 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 20  * take the jump 
1c660 28 73 69 6e 63 65 20 74 68 65 72 65 20 61 72 65  (since there are
1c670 20 6e 6f 20 72 65 63 6f 72 64 73 20 69 6e 20 74   no records in t
1c680 68 65 20 74 61 62 6c 65 29 2e 0a 20 20 20 20 2a  he table)..    *
1c690 2f 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e  /.    pc = pOp->
1c6a0 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72  p2 - 1;.  }.  br
1c6b0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
1c6c0 65 3a 20 53 65 65 6b 20 50 31 20 50 32 20 2a 20  e: Seek P1 P2 * 
1c6d0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20  * *.**.** P1 is 
1c6e0 61 6e 20 6f 70 65 6e 20 74 61 62 6c 65 20 63 75  an open table cu
1c6f0 72 73 6f 72 20 61 6e 64 20 50 32 20 69 73 20 61  rsor and P2 is a
1c700 20 72 6f 77 69 64 20 69 6e 74 65 67 65 72 2e 20   rowid integer. 
1c710 20 41 72 72 61 6e 67 65 0a 2a 2a 20 66 6f 72 20   Arrange.** for 
1c720 50 31 20 74 6f 20 6d 6f 76 65 20 73 6f 20 74 68  P1 to move so th
1c730 61 74 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20  at it points to 
1c740 74 68 65 20 72 6f 77 69 64 20 67 69 76 65 6e 20  the rowid given 
1c750 62 79 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  by P2..**.** Thi
1c760 73 20 69 73 20 61 63 74 75 61 6c 6c 79 20 61 20  s is actually a 
1c770 64 65 66 65 72 72 65 64 20 73 65 65 6b 2e 20 20  deferred seek.  
1c780 4e 6f 74 68 69 6e 67 20 61 63 74 75 61 6c 6c 79  Nothing actually
1c790 20 68 61 70 70 65 6e 73 20 75 6e 74 69 6c 0a 2a   happens until.*
1c7a0 2a 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20  * the cursor is 
1c7b0 75 73 65 64 20 74 6f 20 72 65 61 64 20 61 20 72  used to read a r
1c7c0 65 63 6f 72 64 2e 20 20 54 68 61 74 20 77 61 79  ecord.  That way
1c7d0 2c 20 69 66 20 6e 6f 20 72 65 61 64 73 0a 2a 2a  , if no reads.**
1c7e0 20 6f 63 63 75 72 2c 20 6e 6f 20 75 6e 6e 65 63   occur, no unnec
1c7f0 65 73 73 61 72 79 20 49 2f 4f 20 68 61 70 70 65  essary I/O happe
1c800 6e 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  ns..*/.case OP_S
1c810 65 65 6b 3a 20 7b 20 20 20 20 2f 2a 20 69 6e 32  eek: {    /* in2
1c820 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72   */.  VdbeCursor
1c830 20 2a 70 43 3b 0a 0a 20 20 61 73 73 65 72 74 28   *pC;..  assert(
1c840 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
1c850 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
1c860 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
1c870 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
1c880 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
1c890 3b 0a 20 20 69 66 28 20 41 4c 57 41 59 53 28 70  ;.  if( ALWAYS(p
1c8a0 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 29 20 29  C->pCursor!=0) )
1c8b0 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  {.    assert( pC
1c8c0 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 20  ->isTable );.   
1c8d0 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30   pC->nullRow = 0
1c8e0 3b 0a 20 20 20 20 70 49 6e 32 20 3d 20 26 61 4d  ;.    pIn2 = &aM
1c8f0 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20  em[pOp->p2];.   
1c900 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65   pC->movetoTarge
1c910 74 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49  t = sqlite3VdbeI
1c920 6e 74 56 61 6c 75 65 28 70 49 6e 32 29 3b 0a 20  ntValue(pIn2);. 
1c930 20 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61     pC->rowidIsVa
1c940 6c 69 64 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d  lid = 0;.    pC-
1c950 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20  >deferredMoveto 
1c960 3d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  = 1;.  }.  break
1c970 3b 0a 7d 0a 20 20 0a 0a 2f 2a 20 4f 70 63 6f 64  ;.}.  ../* Opcod
1c980 65 3a 20 46 6f 75 6e 64 20 50 31 20 50 32 20 50  e: Found P1 P2 P
1c990 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20  3 P4 *.**.** If 
1c9a0 50 34 3d 3d 30 20 74 68 65 6e 20 72 65 67 69 73  P4==0 then regis
1c9b0 74 65 72 20 50 33 20 68 6f 6c 64 73 20 61 20 62  ter P3 holds a b
1c9c0 6c 6f 62 20 63 6f 6e 73 74 72 75 63 74 65 64 20  lob constructed 
1c9d0 62 79 20 4d 61 6b 65 52 65 63 6f 72 64 2e 20 20  by MakeRecord.  
1c9e0 49 66 0a 2a 2a 20 50 34 3e 30 20 74 68 65 6e 20  If.** P4>0 then 
1c9f0 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20 74  register P3 is t
1ca00 68 65 20 66 69 72 73 74 20 6f 66 20 50 34 20 72  he first of P4 r
1ca10 65 67 69 73 74 65 72 73 20 74 68 61 74 20 66 6f  egisters that fo
1ca20 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 0a 2a  rm an unpacked.*
1ca30 2a 20 72 65 63 6f 72 64 2e 0a 2a 2a 0a 2a 2a 20  * record..**.** 
1ca40 43 75 72 73 6f 72 20 50 31 20 69 73 20 6f 6e 20  Cursor P1 is on 
1ca50 61 6e 20 69 6e 64 65 78 20 62 74 72 65 65 2e 20  an index btree. 
1ca60 20 49 66 20 74 68 65 20 72 65 63 6f 72 64 20 69   If the record i
1ca70 64 65 6e 74 69 66 69 65 64 20 62 79 20 50 33 20  dentified by P3 
1ca80 61 6e 64 20 50 34 0a 2a 2a 20 69 73 20 61 20 70  and P4.** is a p
1ca90 72 65 66 69 78 20 6f 66 20 61 6e 79 20 65 6e 74  refix of any ent
1caa0 72 79 20 69 6e 20 50 31 20 74 68 65 6e 20 61 20  ry in P1 then a 
1cab0 6a 75 6d 70 20 69 73 20 6d 61 64 65 20 74 6f 20  jump is made to 
1cac0 50 32 20 61 6e 64 0a 2a 2a 20 50 31 20 69 73 20  P2 and.** P1 is 
1cad0 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67 20 61 74  left pointing at
1cae0 20 74 68 65 20 6d 61 74 63 68 69 6e 67 20 65 6e   the matching en
1caf0 74 72 79 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  try..*/./* Opcod
1cb00 65 3a 20 4e 6f 74 46 6f 75 6e 64 20 50 31 20 50  e: NotFound P1 P
1cb10 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20  2 P3 P4 *.**.** 
1cb20 49 66 20 50 34 3d 3d 30 20 74 68 65 6e 20 72 65  If P4==0 then re
1cb30 67 69 73 74 65 72 20 50 33 20 68 6f 6c 64 73 20  gister P3 holds 
1cb40 61 20 62 6c 6f 62 20 63 6f 6e 73 74 72 75 63 74  a blob construct
1cb50 65 64 20 62 79 20 4d 61 6b 65 52 65 63 6f 72 64  ed by MakeRecord
1cb60 2e 20 20 49 66 0a 2a 2a 20 50 34 3e 30 20 74 68  .  If.** P4>0 th
1cb70 65 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 69  en register P3 i
1cb80 73 20 74 68 65 20 66 69 72 73 74 20 6f 66 20 50  s the first of P
1cb90 34 20 72 65 67 69 73 74 65 72 73 20 74 68 61 74  4 registers that
1cba0 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65   form an unpacke
1cbb0 64 0a 2a 2a 20 72 65 63 6f 72 64 2e 0a 2a 2a 20  d.** record..** 
1cbc0 0a 2a 2a 20 43 75 72 73 6f 72 20 50 31 20 69 73  .** Cursor P1 is
1cbd0 20 6f 6e 20 61 6e 20 69 6e 64 65 78 20 62 74 72   on an index btr
1cbe0 65 65 2e 20 20 49 66 20 74 68 65 20 72 65 63 6f  ee.  If the reco
1cbf0 72 64 20 69 64 65 6e 74 69 66 69 65 64 20 62 79  rd identified by
1cc00 20 50 33 20 61 6e 64 20 50 34 0a 2a 2a 20 69 73   P3 and P4.** is
1cc10 20 6e 6f 74 20 74 68 65 20 70 72 65 66 69 78 20   not the prefix 
1cc20 6f 66 20 61 6e 79 20 65 6e 74 72 79 20 69 6e 20  of any entry in 
1cc30 50 31 20 74 68 65 6e 20 61 20 6a 75 6d 70 20 69  P1 then a jump i
1cc40 73 20 6d 61 64 65 20 74 6f 20 50 32 2e 20 20 49  s made to P2.  I
1cc50 66 20 50 31 20 0a 2a 2a 20 64 6f 65 73 20 63 6f  f P1 .** does co
1cc60 6e 74 61 69 6e 20 61 6e 20 65 6e 74 72 79 20 77  ntain an entry w
1cc70 68 6f 73 65 20 70 72 65 66 69 78 20 6d 61 74 63  hose prefix matc
1cc80 68 65 73 20 74 68 65 20 50 33 2f 50 34 20 72 65  hes the P3/P4 re
1cc90 63 6f 72 64 20 74 68 65 6e 20 63 6f 6e 74 72 6f  cord then contro
1cca0 6c 0a 2a 2a 20 66 61 6c 6c 73 20 74 68 72 6f 75  l.** falls throu
1ccb0 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69  gh to the next i
1ccc0 6e 73 74 72 75 63 74 69 6f 6e 20 61 6e 64 20 50  nstruction and P
1ccd0 31 20 69 73 20 6c 65 66 74 20 70 6f 69 6e 74 69  1 is left pointi
1cce0 6e 67 20 61 74 20 74 68 65 0a 2a 2a 20 6d 61 74  ng at the.** mat
1ccf0 63 68 69 6e 67 20 65 6e 74 72 79 2e 0a 2a 2a 0a  ching entry..**.
1cd00 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75  ** See also: Fou
1cd10 6e 64 2c 20 4e 6f 74 45 78 69 73 74 73 2c 20 49  nd, NotExists, I
1cd20 73 55 6e 69 71 75 65 0a 2a 2f 0a 63 61 73 65 20  sUnique.*/.case 
1cd30 4f 50 5f 4e 6f 74 46 6f 75 6e 64 3a 20 20 20 20  OP_NotFound:    
1cd40 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20     /* jump, in3 
1cd50 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 6f 75 6e 64  */.case OP_Found
1cd60 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  : {        /* ju
1cd70 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74  mp, in3 */.  int
1cd80 20 61 6c 72 65 61 64 79 45 78 69 73 74 73 3b 0a   alreadyExists;.
1cd90 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
1cda0 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 63  ;.  int res;.  c
1cdb0 68 61 72 20 2a 70 46 72 65 65 3b 0a 20 20 55 6e  har *pFree;.  Un
1cdc0 70 61 63 6b 65 64 52 65 63 6f 72 64 20 2a 70 49  packedRecord *pI
1cdd0 64 78 4b 65 79 3b 0a 20 20 55 6e 70 61 63 6b 65  dxKey;.  Unpacke
1cde0 64 52 65 63 6f 72 64 20 72 3b 0a 20 20 63 68 61  dRecord r;.  cha
1cdf0 72 20 61 54 65 6d 70 52 65 63 5b 52 4f 55 4e 44  r aTempRec[ROUND
1ce00 38 28 73 69 7a 65 6f 66 28 55 6e 70 61 63 6b 65  8(sizeof(Unpacke
1ce10 64 52 65 63 6f 72 64 29 29 20 2b 20 73 69 7a 65  dRecord)) + size
1ce20 6f 66 28 4d 65 6d 29 2a 33 20 2b 20 37 5d 3b 0a  of(Mem)*3 + 7];.
1ce30 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54  .#ifdef SQLITE_T
1ce40 45 53 54 0a 20 20 73 71 6c 69 74 65 33 5f 66 6f  EST.  sqlite3_fo
1ce50 75 6e 64 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e  und_count++;.#en
1ce60 64 69 66 0a 0a 20 20 61 6c 72 65 61 64 79 45 78  dif..  alreadyEx
1ce70 69 73 74 73 20 3d 20 30 3b 0a 20 20 61 73 73 65  ists = 0;.  asse
1ce80 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
1ce90 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
1cea0 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74  rsor );.  assert
1ceb0 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
1cec0 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 70 43 20  4_INT32 );.  pC 
1ced0 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
1cee0 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
1cef0 43 21 3d 30 20 29 3b 0a 20 20 70 49 6e 33 20 3d  C!=0 );.  pIn3 =
1cf00 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
1cf10 0a 20 20 69 66 28 20 41 4c 57 41 59 53 28 70 43  .  if( ALWAYS(pC
1cf20 2d 3e 70 43 75 72 73 6f 72 21 3d 30 29 20 29 7b  ->pCursor!=0) ){
1cf30 0a 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  ..    assert( pC
1cf40 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29 3b 0a  ->isTable==0 );.
1cf50 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 2e      if( pOp->p4.
1cf60 69 3e 30 20 29 7b 0a 20 20 20 20 20 20 72 2e 70  i>0 ){.      r.p
1cf70 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b  KeyInfo = pC->pK
1cf80 65 79 49 6e 66 6f 3b 0a 20 20 20 20 20 20 72 2e  eyInfo;.      r.
1cf90 6e 46 69 65 6c 64 20 3d 20 28 75 31 36 29 70 4f  nField = (u16)pO
1cfa0 70 2d 3e 70 34 2e 69 3b 0a 20 20 20 20 20 20 72  p->p4.i;.      r
1cfb0 2e 61 4d 65 6d 20 3d 20 70 49 6e 33 3b 0a 23 69  .aMem = pIn3;.#i
1cfc0 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
1cfd0 47 0a 20 20 20 20 20 20 7b 20 69 6e 74 20 69 3b  G.      { int i;
1cfe0 20 66 6f 72 28 69 3d 30 3b 20 69 3c 72 2e 6e 46   for(i=0; i<r.nF
1cff0 69 65 6c 64 3b 20 69 2b 2b 29 20 61 73 73 65 72  ield; i++) asser
1d000 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 72  t( memIsValid(&r
1d010 2e 61 4d 65 6d 5b 69 5d 29 20 29 3b 20 7d 0a 23  .aMem[i]) ); }.#
1d020 65 6e 64 69 66 0a 20 20 20 20 20 20 72 2e 66 6c  endif.      r.fl
1d030 61 67 73 20 3d 20 55 4e 50 41 43 4b 45 44 5f 50  ags = UNPACKED_P
1d040 52 45 46 49 58 5f 4d 41 54 43 48 3b 0a 20 20 20  REFIX_MATCH;.   
1d050 20 20 20 70 49 64 78 4b 65 79 20 3d 20 26 72 3b     pIdxKey = &r;
1d060 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
1d070 20 20 70 49 64 78 4b 65 79 20 3d 20 73 71 6c 69    pIdxKey = sqli
1d080 74 65 33 56 64 62 65 41 6c 6c 6f 63 55 6e 70 61  te3VdbeAllocUnpa
1d090 63 6b 65 64 52 65 63 6f 72 64 28 0a 20 20 20 20  ckedRecord(.    
1d0a0 20 20 20 20 20 20 70 43 2d 3e 70 4b 65 79 49 6e        pC->pKeyIn
1d0b0 66 6f 2c 20 61 54 65 6d 70 52 65 63 2c 20 73 69  fo, aTempRec, si
1d0c0 7a 65 6f 66 28 61 54 65 6d 70 52 65 63 29 2c 20  zeof(aTempRec), 
1d0d0 26 70 46 72 65 65 0a 20 20 20 20 20 20 29 3b 20  &pFree.      ); 
1d0e0 0a 20 20 20 20 20 20 69 66 28 20 70 49 64 78 4b  .      if( pIdxK
1d0f0 65 79 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f  ey==0 ) goto no_
1d100 6d 65 6d 3b 0a 20 20 20 20 20 20 61 73 73 65 72  mem;.      asser
1d110 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26  t( pIn3->flags &
1d120 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20 20   MEM_Blob );.   
1d130 20 20 20 61 73 73 65 72 74 28 20 28 70 49 6e 33     assert( (pIn3
1d140 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a 65  ->flags & MEM_Ze
1d150 72 6f 29 3d 3d 30 20 29 3b 20 20 2f 2a 20 7a 65  ro)==0 );  /* ze
1d160 72 6f 62 6c 6f 62 73 20 61 6c 72 65 61 64 79 20  roblobs already 
1d170 65 78 70 61 6e 64 65 64 20 2a 2f 0a 20 20 20 20  expanded */.    
1d180 20 20 73 71 6c 69 74 65 33 56 64 62 65 52 65 63    sqlite3VdbeRec
1d190 6f 72 64 55 6e 70 61 63 6b 28 70 43 2d 3e 70 4b  ordUnpack(pC->pK
1d1a0 65 79 49 6e 66 6f 2c 20 70 49 6e 33 2d 3e 6e 2c  eyInfo, pIn3->n,
1d1b0 20 70 49 6e 33 2d 3e 7a 2c 20 70 49 64 78 4b 65   pIn3->z, pIdxKe
1d1c0 79 29 3b 0a 20 20 20 20 20 20 70 49 64 78 4b 65  y);.      pIdxKe
1d1d0 79 2d 3e 66 6c 61 67 73 20 7c 3d 20 55 4e 50 41  y->flags |= UNPA
1d1e0 43 4b 45 44 5f 50 52 45 46 49 58 5f 4d 41 54 43  CKED_PREFIX_MATC
1d1f0 48 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72 63 20  H;.    }.    rc 
1d200 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f  = sqlite3BtreeMo
1d210 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d  vetoUnpacked(pC-
1d220 3e 70 43 75 72 73 6f 72 2c 20 70 49 64 78 4b 65  >pCursor, pIdxKe
1d230 79 2c 20 30 2c 20 30 2c 20 26 72 65 73 29 3b 0a  y, 0, 0, &res);.
1d240 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 2e      if( pOp->p4.
1d250 69 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 73 71  i==0 ){.      sq
1d260 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20  lite3DbFree(db, 
1d270 70 46 72 65 65 29 3b 0a 20 20 20 20 7d 0a 20 20  pFree);.    }.  
1d280 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
1d290 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 62 72 65  _OK ){.      bre
1d2a0 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 61 6c  ak;.    }.    al
1d2b0 72 65 61 64 79 45 78 69 73 74 73 20 3d 20 28 72  readyExists = (r
1d2c0 65 73 3d 3d 30 29 3b 0a 20 20 20 20 70 43 2d 3e  es==0);.    pC->
1d2d0 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d  deferredMoveto =
1d2e0 20 30 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68   0;.    pC->cach
1d2f0 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
1d300 53 54 41 4c 45 3b 0a 20 20 7d 0a 20 20 69 66 28  STALE;.  }.  if(
1d310 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
1d320 5f 46 6f 75 6e 64 20 29 7b 0a 20 20 20 20 69 66  _Found ){.    if
1d330 28 20 61 6c 72 65 61 64 79 45 78 69 73 74 73 20  ( alreadyExists 
1d340 29 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d  ) pc = pOp->p2 -
1d350 20 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20   1;.  }else{.   
1d360 20 69 66 28 20 21 61 6c 72 65 61 64 79 45 78 69   if( !alreadyExi
1d370 73 74 73 20 29 20 70 63 20 3d 20 70 4f 70 2d 3e  sts ) pc = pOp->
1d380 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72  p2 - 1;.  }.  br
1d390 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
1d3a0 65 3a 20 49 73 55 6e 69 71 75 65 20 50 31 20 50  e: IsUnique P1 P
1d3b0 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20  2 P3 P4 *.**.** 
1d3c0 43 75 72 73 6f 72 20 50 31 20 69 73 20 6f 70 65  Cursor P1 is ope
1d3d0 6e 20 6f 6e 20 61 6e 20 69 6e 64 65 78 20 62 2d  n on an index b-
1d3e0 74 72 65 65 20 2d 20 74 68 61 74 20 69 73 20 74  tree - that is t
1d3f0 6f 20 73 61 79 2c 20 61 20 62 74 72 65 65 20 77  o say, a btree w
1d400 68 69 63 68 0a 2a 2a 20 6e 6f 20 64 61 74 61 20  hich.** no data 
1d410 61 6e 64 20 77 68 65 72 65 20 74 68 65 20 6b 65  and where the ke
1d420 79 20 61 72 65 20 72 65 63 6f 72 64 73 20 67 65  y are records ge
1d430 6e 65 72 61 74 65 64 20 62 79 20 4f 50 5f 4d 61  nerated by OP_Ma
1d440 6b 65 52 65 63 6f 72 64 20 77 69 74 68 0a 2a 2a  keRecord with.**
1d450 20 74 68 65 20 6c 69 73 74 20 66 69 65 6c 64 20   the list field 
1d460 62 65 69 6e 67 20 74 68 65 20 69 6e 74 65 67 65  being the intege
1d470 72 20 52 4f 57 49 44 20 6f 66 20 74 68 65 20 65  r ROWID of the e
1d480 6e 74 72 79 20 74 68 61 74 20 74 68 65 20 69 6e  ntry that the in
1d490 64 65 78 0a 2a 2a 20 65 6e 74 72 79 20 72 65 66  dex.** entry ref
1d4a0 65 72 73 20 74 6f 2e 0a 2a 2a 0a 2a 2a 20 54 68  ers to..**.** Th
1d4b0 65 20 50 33 20 72 65 67 69 73 74 65 72 20 63 6f  e P3 register co
1d4c0 6e 74 61 69 6e 73 20 61 6e 20 69 6e 74 65 67 65  ntains an intege
1d4d0 72 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 2e  r record number.
1d4e0 20 43 61 6c 6c 20 74 68 69 73 20 72 65 63 6f 72   Call this recor
1d4f0 64 20 0a 2a 2a 20 6e 75 6d 62 65 72 20 52 2e 20  d .** number R. 
1d500 52 65 67 69 73 74 65 72 20 50 34 20 69 73 20 74  Register P4 is t
1d510 68 65 20 66 69 72 73 74 20 69 6e 20 61 20 73 65  he first in a se
1d520 74 20 6f 66 20 4e 20 63 6f 6e 74 69 67 75 6f 75  t of N contiguou
1d530 73 20 72 65 67 69 73 74 65 72 73 0a 2a 2a 20 74  s registers.** t
1d540 68 61 74 20 6d 61 6b 65 20 75 70 20 61 6e 20 75  hat make up an u
1d550 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65  npacked index ke
1d560 79 20 74 68 61 74 20 63 61 6e 20 62 65 20 75 73  y that can be us
1d570 65 64 20 77 69 74 68 20 63 75 72 73 6f 72 20 50  ed with cursor P
1d580 31 2e 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65 20  1..** The value 
1d590 6f 66 20 4e 20 63 61 6e 20 62 65 20 69 6e 66 65  of N can be infe
1d5a0 72 72 65 64 20 66 72 6f 6d 20 74 68 65 20 63 75  rred from the cu
1d5b0 72 73 6f 72 2e 20 4e 20 69 6e 63 6c 75 64 65 73  rsor. N includes
1d5c0 20 74 68 65 20 72 6f 77 69 64 0a 2a 2a 20 76 61   the rowid.** va
1d5d0 6c 75 65 20 61 70 70 65 6e 64 65 64 20 74 6f 20  lue appended to 
1d5e0 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 69  the end of the i
1d5f0 6e 64 65 78 20 72 65 63 6f 72 64 2e 20 54 68 69  ndex record. Thi
1d600 73 20 72 6f 77 69 64 20 76 61 6c 75 65 20 6d 61  s rowid value ma
1d610 79 0a 2a 2a 20 6f 72 20 6d 61 79 20 6e 6f 74 20  y.** or may not 
1d620 62 65 20 74 68 65 20 73 61 6d 65 20 61 73 20 52  be the same as R
1d630 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 61 6e 79 20 6f  ..**.** If any o
1d640 66 20 74 68 65 20 4e 20 72 65 67 69 73 74 65 72  f the N register
1d650 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68  s beginning with
1d660 20 72 65 67 69 73 74 65 72 20 50 34 20 63 6f 6e   register P4 con
1d670 74 61 69 6e 73 20 61 20 4e 55 4c 4c 0a 2a 2a 20  tains a NULL.** 
1d680 76 61 6c 75 65 2c 20 6a 75 6d 70 20 69 6d 6d 65  value, jump imme
1d690 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a  diately to P2..*
1d6a0 2a 0a 2a 2a 20 4f 74 68 65 72 77 69 73 65 2c 20  *.** Otherwise, 
1d6b0 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
1d6c0 20 63 68 65 63 6b 73 20 69 66 20 63 75 72 73 6f   checks if curso
1d6d0 72 20 50 31 20 63 6f 6e 74 61 69 6e 73 20 61 6e  r P1 contains an
1d6e0 20 65 6e 74 72 79 0a 2a 2a 20 77 68 65 72 65 20   entry.** where 
1d6f0 74 68 65 20 66 69 72 73 74 20 28 4e 2d 31 29 20  the first (N-1) 
1d700 66 69 65 6c 64 73 20 6d 61 74 63 68 20 62 75 74  fields match but
1d710 20 74 68 65 20 72 6f 77 69 64 20 76 61 6c 75 65   the rowid value
1d720 20 61 74 20 74 68 65 20 65 6e 64 0a 2a 2a 20 6f   at the end.** o
1d730 66 20 74 68 65 20 69 6e 64 65 78 20 65 6e 74 72  f the index entr
1d740 79 20 69 73 20 6e 6f 74 20 52 2e 20 49 66 20 74  y is not R. If t
1d750 68 65 72 65 20 69 73 20 6e 6f 20 73 75 63 68 20  here is no such 
1d760 65 6e 74 72 79 2c 20 63 6f 6e 74 72 6f 6c 20 6a  entry, control j
1d770 75 6d 70 73 0a 2a 2a 20 74 6f 20 69 6e 73 74 72  umps.** to instr
1d780 75 63 74 69 6f 6e 20 50 32 2e 20 4f 74 68 65 72  uction P2. Other
1d790 77 69 73 65 2c 20 74 68 65 20 72 6f 77 69 64 20  wise, the rowid 
1d7a0 6f 66 20 74 68 65 20 63 6f 6e 66 6c 69 63 74 69  of the conflicti
1d7b0 6e 67 20 69 6e 64 65 78 0a 2a 2a 20 65 6e 74 72  ng index.** entr
1d7c0 79 20 69 73 20 63 6f 70 69 65 64 20 74 6f 20 72  y is copied to r
1d7d0 65 67 69 73 74 65 72 20 50 33 20 61 6e 64 20 63  egister P3 and c
1d7e0 6f 6e 74 72 6f 6c 20 66 61 6c 6c 73 20 74 68 72  ontrol falls thr
1d7f0 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74  ough to the next
1d800 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  .** instruction.
1d810 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
1d820 20 4e 6f 74 46 6f 75 6e 64 2c 20 4e 6f 74 45 78   NotFound, NotEx
1d830 69 73 74 73 2c 20 46 6f 75 6e 64 0a 2a 2f 0a 63  ists, Found.*/.c
1d840 61 73 65 20 4f 50 5f 49 73 55 6e 69 71 75 65 3a  ase OP_IsUnique:
1d850 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d   {        /* jum
1d860 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 75 31 36 20  p, in3 */.  u16 
1d870 69 69 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  ii;.  VdbeCursor
1d880 20 2a 70 43 78 3b 0a 20 20 42 74 43 75 72 73 6f   *pCx;.  BtCurso
1d890 72 20 2a 70 43 72 73 72 3b 0a 20 20 75 31 36 20  r *pCrsr;.  u16 
1d8a0 6e 46 69 65 6c 64 3b 0a 20 20 4d 65 6d 20 2a 61  nField;.  Mem *a
1d8b0 4d 78 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65  Mx;.  UnpackedRe
1d8c0 63 6f 72 64 20 72 3b 20 20 20 20 20 20 20 20 20  cord r;         
1d8d0 20 20 20 20 20 20 20 20 20 2f 2a 20 42 2d 54 72           /* B-Tr
1d8e0 65 65 20 69 6e 64 65 78 20 73 65 61 72 63 68 20  ee index search 
1d8f0 6b 65 79 20 2a 2f 0a 20 20 69 36 34 20 52 3b 20  key */.  i64 R; 
1d900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d910 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52              /* R
1d920 6f 77 69 64 20 73 74 6f 72 65 64 20 69 6e 20 72  owid stored in r
1d930 65 67 69 73 74 65 72 20 50 33 20 2a 2f 0a 0a 20  egister P3 */.. 
1d940 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn3 = &aMem[pO
1d950 70 2d 3e 70 33 5d 3b 0a 20 20 61 4d 78 20 3d 20  p->p3];.  aMx = 
1d960 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 34 2e 69 5d  &aMem[pOp->p4.i]
1d970 3b 0a 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68  ;.  /* Assert th
1d980 61 74 20 74 68 65 20 76 61 6c 75 65 73 20 6f 66  at the values of
1d990 20 70 61 72 61 6d 65 74 65 72 73 20 50 31 20 61   parameters P1 a
1d9a0 6e 64 20 50 34 20 61 72 65 20 69 6e 20 72 61 6e  nd P4 are in ran
1d9b0 67 65 2e 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ge. */.  assert(
1d9c0 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
1d9d0 5f 49 4e 54 33 32 20 29 3b 0a 20 20 61 73 73 65  _INT32 );.  asse
1d9e0 72 74 28 20 70 4f 70 2d 3e 70 34 2e 69 3e 30 20  rt( pOp->p4.i>0 
1d9f0 26 26 20 70 4f 70 2d 3e 70 34 2e 69 3c 3d 70 2d  && pOp->p4.i<=p-
1da00 3e 6e 4d 65 6d 20 29 3b 0a 20 20 61 73 73 65 72  >nMem );.  asser
1da10 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
1da20 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
1da30 73 6f 72 20 29 3b 0a 0a 20 20 2f 2a 20 46 69 6e  sor );..  /* Fin
1da40 64 20 74 68 65 20 69 6e 64 65 78 20 63 75 72 73  d the index curs
1da50 6f 72 2e 20 2a 2f 0a 20 20 70 43 78 20 3d 20 70  or. */.  pCx = p
1da60 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
1da70 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 78 2d  ;.  assert( pCx-
1da80 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d  >deferredMoveto=
1da90 3d 30 20 29 3b 0a 20 20 70 43 78 2d 3e 73 65 65  =0 );.  pCx->see
1daa0 6b 52 65 73 75 6c 74 20 3d 20 30 3b 0a 20 20 70  kResult = 0;.  p
1dab0 43 78 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20  Cx->cacheStatus 
1dac0 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20  = CACHE_STALE;. 
1dad0 20 70 43 72 73 72 20 3d 20 70 43 78 2d 3e 70 43   pCrsr = pCx->pC
1dae0 75 72 73 6f 72 3b 0a 0a 20 20 2f 2a 20 49 66 20  ursor;..  /* If 
1daf0 61 6e 79 20 6f 66 20 74 68 65 20 76 61 6c 75 65  any of the value
1db00 73 20 61 72 65 20 4e 55 4c 4c 2c 20 74 61 6b 65  s are NULL, take
1db10 20 74 68 65 20 6a 75 6d 70 2e 20 2a 2f 0a 20 20   the jump. */.  
1db20 6e 46 69 65 6c 64 20 3d 20 70 43 78 2d 3e 70 4b  nField = pCx->pK
1db30 65 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64 3b 0a  eyInfo->nField;.
1db40 20 20 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 6e    for(ii=0; ii<n
1db50 46 69 65 6c 64 3b 20 69 69 2b 2b 29 7b 0a 20 20  Field; ii++){.  
1db60 20 20 69 66 28 20 61 4d 78 5b 69 69 5d 2e 66 6c    if( aMx[ii].fl
1db70 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29  ags & MEM_Null )
1db80 7b 0a 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70  {.      pc = pOp
1db90 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 20 20  ->p2 - 1;.      
1dba0 70 43 72 73 72 20 3d 20 30 3b 0a 20 20 20 20 20  pCrsr = 0;.     
1dbb0 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20   break;.    }.  
1dbc0 7d 0a 20 20 61 73 73 65 72 74 28 20 28 61 4d 78  }.  assert( (aMx
1dbd0 5b 6e 46 69 65 6c 64 5d 2e 66 6c 61 67 73 20 26  [nField].flags &
1dbe0 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 3b   MEM_Null)==0 );
1dbf0 0a 0a 20 20 69 66 28 20 70 43 72 73 72 21 3d 30  ..  if( pCrsr!=0
1dc00 20 29 7b 0a 20 20 20 20 2f 2a 20 50 6f 70 75 6c   ){.    /* Popul
1dc10 61 74 65 20 74 68 65 20 69 6e 64 65 78 20 73 65  ate the index se
1dc20 61 72 63 68 20 6b 65 79 2e 20 2a 2f 0a 20 20 20  arch key. */.   
1dc30 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43   r.pKeyInfo = pC
1dc40 78 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20  x->pKeyInfo;.   
1dc50 20 72 2e 6e 46 69 65 6c 64 20 3d 20 6e 46 69 65   r.nField = nFie
1dc60 6c 64 20 2b 20 31 3b 0a 20 20 20 20 72 2e 66 6c  ld + 1;.    r.fl
1dc70 61 67 73 20 3d 20 55 4e 50 41 43 4b 45 44 5f 50  ags = UNPACKED_P
1dc80 52 45 46 49 58 5f 53 45 41 52 43 48 3b 0a 20 20  REFIX_SEARCH;.  
1dc90 20 20 72 2e 61 4d 65 6d 20 3d 20 61 4d 78 3b 0a    r.aMem = aMx;.
1dca0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
1dcb0 42 55 47 0a 20 20 20 20 7b 20 69 6e 74 20 69 3b  BUG.    { int i;
1dcc0 20 66 6f 72 28 69 3d 30 3b 20 69 3c 72 2e 6e 46   for(i=0; i<r.nF
1dcd0 69 65 6c 64 3b 20 69 2b 2b 29 20 61 73 73 65 72  ield; i++) asser
1dce0 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 72  t( memIsValid(&r
1dcf0 2e 61 4d 65 6d 5b 69 5d 29 20 29 3b 20 7d 0a 23  .aMem[i]) ); }.#
1dd00 65 6e 64 69 66 0a 0a 20 20 20 20 2f 2a 20 45 78  endif..    /* Ex
1dd10 74 72 61 63 74 20 74 68 65 20 76 61 6c 75 65 20  tract the value 
1dd20 6f 66 20 52 20 66 72 6f 6d 20 72 65 67 69 73 74  of R from regist
1dd30 65 72 20 50 33 2e 20 2a 2f 0a 20 20 20 20 73 71  er P3. */.    sq
1dd40 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65  lite3VdbeMemInte
1dd50 67 65 72 69 66 79 28 70 49 6e 33 29 3b 0a 20 20  gerify(pIn3);.  
1dd60 20 20 52 20 3d 20 70 49 6e 33 2d 3e 75 2e 69 3b    R = pIn3->u.i;
1dd70 0a 0a 20 20 20 20 2f 2a 20 53 65 61 72 63 68 20  ..    /* Search 
1dd80 74 68 65 20 42 2d 54 72 65 65 20 69 6e 64 65 78  the B-Tree index
1dd90 2e 20 49 66 20 6e 6f 20 63 6f 6e 66 6c 69 63 74  . If no conflict
1dda0 69 6e 67 20 72 65 63 6f 72 64 20 69 73 20 66 6f  ing record is fo
1ddb0 75 6e 64 2c 20 6a 75 6d 70 0a 20 20 20 20 2a 2a  und, jump.    **
1ddc0 20 74 6f 20 50 32 2e 20 4f 74 68 65 72 77 69 73   to P2. Otherwis
1ddd0 65 2c 20 63 6f 70 79 20 74 68 65 20 72 6f 77 69  e, copy the rowi
1dde0 64 20 6f 66 20 74 68 65 20 63 6f 6e 66 6c 69 63  d of the conflic
1ddf0 74 69 6e 67 20 72 65 63 6f 72 64 20 74 6f 0a 20  ting record to. 
1de00 20 20 20 2a 2a 20 72 65 67 69 73 74 65 72 20 50     ** register P
1de10 33 20 61 6e 64 20 66 61 6c 6c 20 74 68 72 6f 75  3 and fall throu
1de20 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69  gh to the next i
1de30 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 2a 2f 0a  nstruction.  */.
1de40 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
1de50 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63  BtreeMovetoUnpac
1de60 6b 65 64 28 70 43 72 73 72 2c 20 26 72 2c 20 30  ked(pCrsr, &r, 0
1de70 2c 20 30 2c 20 26 70 43 78 2d 3e 73 65 65 6b 52  , 0, &pCx->seekR
1de80 65 73 75 6c 74 29 3b 0a 20 20 20 20 69 66 28 20  esult);.    if( 
1de90 28 72 2e 66 6c 61 67 73 20 26 20 55 4e 50 41 43  (r.flags & UNPAC
1dea0 4b 45 44 5f 50 52 45 46 49 58 5f 53 45 41 52 43  KED_PREFIX_SEARC
1deb0 48 29 20 7c 7c 20 72 2e 72 6f 77 69 64 3d 3d 52  H) || r.rowid==R
1dec0 20 29 7b 0a 20 20 20 20 20 20 70 63 20 3d 20 70   ){.      pc = p
1ded0 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20  Op->p2 - 1;.    
1dee0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 70 49 6e  }else{.      pIn
1def0 33 2d 3e 75 2e 69 20 3d 20 72 2e 72 6f 77 69 64  3->u.i = r.rowid
1df00 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72  ;.    }.  }.  br
1df10 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
1df20 65 3a 20 4e 6f 74 45 78 69 73 74 73 20 50 31 20  e: NotExists P1 
1df30 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
1df40 55 73 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  Use the content 
1df50 6f 66 20 72 65 67 69 73 74 65 72 20 50 33 20 61  of register P3 a
1df60 73 20 61 6e 20 69 6e 74 65 67 65 72 20 6b 65 79  s an integer key
1df70 2e 20 20 49 66 20 61 20 72 65 63 6f 72 64 20 0a  .  If a record .
1df80 2a 2a 20 77 69 74 68 20 74 68 61 74 20 6b 65 79  ** with that key
1df90 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 20   does not exist 
1dfa0 69 6e 20 74 61 62 6c 65 20 6f 66 20 50 31 2c 20  in table of P1, 
1dfb0 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e  then jump to P2.
1dfc0 20 0a 2a 2a 20 49 66 20 74 68 65 20 72 65 63 6f   .** If the reco
1dfd0 72 64 20 64 6f 65 73 20 65 78 69 73 74 2c 20 74  rd does exist, t
1dfe0 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  hen fall through
1dff0 2e 20 20 54 68 65 20 63 75 72 73 6f 72 20 69 73  .  The cursor is
1e000 20 6c 65 66 74 20 0a 2a 2a 20 70 6f 69 6e 74 69   left .** pointi
1e010 6e 67 20 74 6f 20 74 68 65 20 72 65 63 6f 72 64  ng to the record
1e020 20 69 66 20 69 74 20 65 78 69 73 74 73 2e 0a 2a   if it exists..*
1e030 2a 0a 2a 2a 20 54 68 65 20 64 69 66 66 65 72 65  *.** The differe
1e040 6e 63 65 20 62 65 74 77 65 65 6e 20 74 68 69 73  nce between this
1e050 20 6f 70 65 72 61 74 69 6f 6e 20 61 6e 64 20 4e   operation and N
1e060 6f 74 46 6f 75 6e 64 20 69 73 20 74 68 61 74 20  otFound is that 
1e070 74 68 69 73 0a 2a 2a 20 6f 70 65 72 61 74 69 6f  this.** operatio
1e080 6e 20 61 73 73 75 6d 65 73 20 74 68 65 20 6b 65  n assumes the ke
1e090 79 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20  y is an integer 
1e0a0 61 6e 64 20 74 68 61 74 20 50 31 20 69 73 20 61  and that P1 is a
1e0b0 20 74 61 62 6c 65 20 77 68 65 72 65 61 73 0a 2a   table whereas.*
1e0c0 2a 20 4e 6f 74 46 6f 75 6e 64 20 61 73 73 75 6d  * NotFound assum
1e0d0 65 73 20 6b 65 79 20 69 73 20 61 20 62 6c 6f 62  es key is a blob
1e0e0 20 63 6f 6e 73 74 72 75 63 74 65 64 20 66 72 6f   constructed fro
1e0f0 6d 20 4d 61 6b 65 52 65 63 6f 72 64 20 61 6e 64  m MakeRecord and
1e100 0a 2a 2a 20 50 31 20 69 73 20 61 6e 20 69 6e 64  .** P1 is an ind
1e110 65 78 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  ex..**.** See al
1e120 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f  so: Found, NotFo
1e130 75 6e 64 2c 20 49 73 55 6e 69 71 75 65 0a 2a 2f  und, IsUnique.*/
1e140 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 45 78 69 73  .case OP_NotExis
1e150 74 73 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20  ts: {        /* 
1e160 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 56  jump, in3 */.  V
1e170 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
1e180 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72   BtCursor *pCrsr
1e190 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 75  ;.  int res;.  u
1e1a0 36 34 20 69 4b 65 79 3b 0a 0a 20 20 70 49 6e 33  64 iKey;..  pIn3
1e1b0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
1e1c0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e  ];.  assert( pIn
1e1d0 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  3->flags & MEM_I
1e1e0 6e 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  nt );.  assert( 
1e1f0 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
1e200 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
1e210 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
1e220 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
1e230 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
1e240 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69  .  assert( pC->i
1e250 73 54 61 62 6c 65 20 29 3b 0a 20 20 61 73 73 65  sTable );.  asse
1e260 72 74 28 20 70 43 2d 3e 70 73 65 75 64 6f 54 61  rt( pC->pseudoTa
1e270 62 6c 65 52 65 67 3d 3d 30 20 29 3b 0a 20 20 70  bleReg==0 );.  p
1e280 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73  Crsr = pC->pCurs
1e290 6f 72 3b 0a 20 20 69 66 28 20 41 4c 57 41 59 53  or;.  if( ALWAYS
1e2a0 28 70 43 72 73 72 21 3d 30 29 20 29 7b 0a 20 20  (pCrsr!=0) ){.  
1e2b0 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 20 20 69    res = 0;.    i
1e2c0 4b 65 79 20 3d 20 70 49 6e 33 2d 3e 75 2e 69 3b  Key = pIn3->u.i;
1e2d0 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
1e2e0 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61  3BtreeMovetoUnpa
1e2f0 63 6b 65 64 28 70 43 72 73 72 2c 20 30 2c 20 69  cked(pCrsr, 0, i
1e300 4b 65 79 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20  Key, 0, &res);. 
1e310 20 20 20 70 43 2d 3e 6c 61 73 74 52 6f 77 69 64     pC->lastRowid
1e320 20 3d 20 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20   = pIn3->u.i;.  
1e330 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c    pC->rowidIsVal
1e340 69 64 20 3d 20 72 65 73 3d 3d 30 20 3f 31 3a 30  id = res==0 ?1:0
1e350 3b 0a 20 20 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f  ;.    pC->nullRo
1e360 77 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e 63  w = 0;.    pC->c
1e370 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
1e380 48 45 5f 53 54 41 4c 45 3b 0a 20 20 20 20 70 43  HE_STALE;.    pC
1e390 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
1e3a0 20 3d 20 30 3b 0a 20 20 20 20 69 66 28 20 72 65   = 0;.    if( re
1e3b0 73 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 70 63  s!=0 ){.      pc
1e3c0 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
1e3d0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 43        assert( pC
1e3e0 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 3d 3d  ->rowidIsValid==
1e3f0 30 20 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70  0 );.    }.    p
1e400 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d 20  C->seekResult = 
1e410 72 65 73 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  res;.  }else{.  
1e420 20 20 2f 2a 20 54 68 69 73 20 68 61 70 70 65 6e    /* This happen
1e430 73 20 77 68 65 6e 20 61 6e 20 61 74 74 65 6d 70  s when an attemp
1e440 74 20 74 6f 20 6f 70 65 6e 20 61 20 72 65 61 64  t to open a read
1e450 20 63 75 72 73 6f 72 20 6f 6e 20 74 68 65 20 0a   cursor on the .
1e460 20 20 20 20 2a 2a 20 73 71 6c 69 74 65 5f 6d 61      ** sqlite_ma
1e470 73 74 65 72 20 74 61 62 6c 65 20 72 65 74 75 72  ster table retur
1e480 6e 73 20 53 51 4c 49 54 45 5f 45 4d 50 54 59 2e  ns SQLITE_EMPTY.
1e490 0a 20 20 20 20 2a 2f 0a 20 20 20 20 70 63 20 3d  .    */.    pc =
1e4a0 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
1e4b0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 72 6f    assert( pC->ro
1e4c0 77 69 64 49 73 56 61 6c 69 64 3d 3d 30 20 29 3b  widIsValid==0 );
1e4d0 0a 20 20 20 20 70 43 2d 3e 73 65 65 6b 52 65 73  .    pC->seekRes
1e4e0 75 6c 74 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 62  ult = 0;.  }.  b
1e4f0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
1e500 64 65 3a 20 53 65 71 75 65 6e 63 65 20 50 31 20  de: Sequence P1 
1e510 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46  P2 * * *.**.** F
1e520 69 6e 64 20 74 68 65 20 6e 65 78 74 20 61 76 61  ind the next ava
1e530 69 6c 61 62 6c 65 20 73 65 71 75 65 6e 63 65 20  ilable sequence 
1e540 6e 75 6d 62 65 72 20 66 6f 72 20 63 75 72 73 6f  number for curso
1e550 72 20 50 31 2e 0a 2a 2a 20 57 72 69 74 65 20 74  r P1..** Write t
1e560 68 65 20 73 65 71 75 65 6e 63 65 20 6e 75 6d 62  he sequence numb
1e570 65 72 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  er into register
1e580 20 50 32 2e 0a 2a 2a 20 54 68 65 20 73 65 71 75   P2..** The sequ
1e590 65 6e 63 65 20 6e 75 6d 62 65 72 20 6f 6e 20 74  ence number on t
1e5a0 68 65 20 63 75 72 73 6f 72 20 69 73 20 69 6e 63  he cursor is inc
1e5b0 72 65 6d 65 6e 74 65 64 20 61 66 74 65 72 20 74  remented after t
1e5c0 68 69 73 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69  his.** instructi
1e5d0 6f 6e 2e 20 20 0a 2a 2f 0a 63 61 73 65 20 4f 50  on.  .*/.case OP
1e5e0 5f 53 65 71 75 65 6e 63 65 3a 20 7b 20 20 20 20  _Sequence: {    
1e5f0 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70         /* out2-p
1e600 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 61  rerelease */.  a
1e610 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
1e620 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
1e630 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73  nCursor );.  ass
1e640 65 72 74 28 20 70 2d 3e 61 70 43 73 72 5b 70 4f  ert( p->apCsr[pO
1e650 70 2d 3e 70 31 5d 21 3d 30 20 29 3b 0a 20 20 70  p->p1]!=0 );.  p
1e660 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 2d 3e 61 70  Out->u.i = p->ap
1e670 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 73 65  Csr[pOp->p1]->se
1e680 71 43 6f 75 6e 74 2b 2b 3b 0a 20 20 62 72 65 61  qCount++;.  brea
1e690 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65  k;.}.../* Opcode
1e6a0 3a 20 4e 65 77 52 6f 77 69 64 20 50 31 20 50 32  : NewRowid P1 P2
1e6b0 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 47 65   P3 * *.**.** Ge
1e6c0 74 20 61 20 6e 65 77 20 69 6e 74 65 67 65 72 20  t a new integer 
1e6d0 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 20 28 61  record number (a
1e6e0 2e 6b 2e 61 20 22 72 6f 77 69 64 22 29 20 75 73  .k.a "rowid") us
1e6f0 65 64 20 61 73 20 74 68 65 20 6b 65 79 20 74 6f  ed as the key to
1e700 20 61 20 74 61 62 6c 65 2e 0a 2a 2a 20 54 68 65   a table..** The
1e710 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 20 69   record number i
1e720 73 20 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c 79  s not previously
1e730 20 75 73 65 64 20 61 73 20 61 20 6b 65 79 20 69   used as a key i
1e740 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a  n the database.*
1e750 2a 20 74 61 62 6c 65 20 74 68 61 74 20 63 75 72  * table that cur
1e760 73 6f 72 20 50 31 20 70 6f 69 6e 74 73 20 74 6f  sor P1 points to
1e770 2e 20 20 54 68 65 20 6e 65 77 20 72 65 63 6f 72  .  The new recor
1e780 64 20 6e 75 6d 62 65 72 20 69 73 20 77 72 69 74  d number is writ
1e790 74 65 6e 0a 2a 2a 20 77 72 69 74 74 65 6e 20 74  ten.** written t
1e7a0 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  o register P2..*
1e7b0 2a 0a 2a 2a 20 49 66 20 50 33 3e 30 20 74 68 65  *.** If P3>0 the
1e7c0 6e 20 50 33 20 69 73 20 61 20 72 65 67 69 73 74  n P3 is a regist
1e7d0 65 72 20 69 6e 20 74 68 65 20 72 6f 6f 74 20 66  er in the root f
1e7e0 72 61 6d 65 20 6f 66 20 74 68 69 73 20 56 44 42  rame of this VDB
1e7f0 45 20 74 68 61 74 20 68 6f 6c 64 73 20 0a 2a 2a  E that holds .**
1e800 20 74 68 65 20 6c 61 72 67 65 73 74 20 70 72 65   the largest pre
1e810 76 69 6f 75 73 6c 79 20 67 65 6e 65 72 61 74 65  viously generate
1e820 64 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 2e  d record number.
1e830 20 4e 6f 20 6e 65 77 20 72 65 63 6f 72 64 20 6e   No new record n
1e840 75 6d 62 65 72 73 20 61 72 65 0a 2a 2a 20 61 6c  umbers are.** al
1e850 6c 6f 77 65 64 20 74 6f 20 62 65 20 6c 65 73 73  lowed to be less
1e860 20 74 68 61 6e 20 74 68 69 73 20 76 61 6c 75 65   than this value
1e870 2e 20 57 68 65 6e 20 74 68 69 73 20 76 61 6c 75  . When this valu
1e880 65 20 72 65 61 63 68 65 73 20 69 74 73 20 6d 61  e reaches its ma
1e890 78 69 6d 75 6d 2c 20 0a 2a 2a 20 61 6e 20 53 51  ximum, .** an SQ
1e8a0 4c 49 54 45 5f 46 55 4c 4c 20 65 72 72 6f 72 20  LITE_FULL error 
1e8b0 69 73 20 67 65 6e 65 72 61 74 65 64 2e 20 54 68  is generated. Th
1e8c0 65 20 50 33 20 72 65 67 69 73 74 65 72 20 69 73  e P3 register is
1e8d0 20 75 70 64 61 74 65 64 20 77 69 74 68 20 74 68   updated with th
1e8e0 65 20 27 0a 2a 2a 20 67 65 6e 65 72 61 74 65 64  e '.** generated
1e8f0 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 2e 20   record number. 
1e900 54 68 69 73 20 50 33 20 6d 65 63 68 61 6e 69 73  This P3 mechanis
1e910 6d 20 69 73 20 75 73 65 64 20 74 6f 20 68 65 6c  m is used to hel
1e920 70 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65 0a  p implement the.
1e930 2a 2a 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  ** AUTOINCREMENT
1e940 20 66 65 61 74 75 72 65 2e 0a 2a 2f 0a 63 61 73   feature..*/.cas
1e950 65 20 4f 50 5f 4e 65 77 52 6f 77 69 64 3a 20 7b  e OP_NewRowid: {
1e960 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
1e970 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f  t2-prerelease */
1e980 0a 20 20 69 36 34 20 76 3b 20 20 20 20 20 20 20  .  i64 v;       
1e990 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
1e9a0 20 6e 65 77 20 72 6f 77 69 64 20 2a 2f 0a 20 20   new rowid */.  
1e9b0 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 20  VdbeCursor *pC; 
1e9c0 20 20 20 20 20 20 20 2f 2a 20 43 75 72 73 6f 72         /* Cursor
1e9d0 20 6f 66 20 74 61 62 6c 65 20 74 6f 20 67 65 74   of table to get
1e9e0 20 74 68 65 20 6e 65 77 20 72 6f 77 69 64 20 2a   the new rowid *
1e9f0 2f 0a 20 20 69 6e 74 20 72 65 73 3b 20 20 20 20  /.  int res;    
1ea00 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65             /* Re
1ea10 73 75 6c 74 20 6f 66 20 61 6e 20 73 71 6c 69 74  sult of an sqlit
1ea20 65 33 42 74 72 65 65 4c 61 73 74 28 29 20 2a 2f  e3BtreeLast() */
1ea30 0a 20 20 69 6e 74 20 63 6e 74 3b 20 20 20 20 20  .  int cnt;     
1ea40 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 75            /* Cou
1ea50 6e 74 65 72 20 74 6f 20 6c 69 6d 69 74 20 74 68  nter to limit th
1ea60 65 20 6e 75 6d 62 65 72 20 6f 66 20 73 65 61 72  e number of sear
1ea70 63 68 65 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  ches */.  Mem *p
1ea80 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  Mem;            
1ea90 20 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f 6c   /* Register hol
1eaa0 64 69 6e 67 20 6c 61 72 67 65 73 74 20 72 6f 77  ding largest row
1eab0 69 64 20 66 6f 72 20 41 55 54 4f 49 4e 43 52 45  id for AUTOINCRE
1eac0 4d 45 4e 54 20 2a 2f 0a 20 20 56 64 62 65 46 72  MENT */.  VdbeFr
1ead0 61 6d 65 20 2a 70 46 72 61 6d 65 3b 20 20 20 20  ame *pFrame;    
1eae0 20 2f 2a 20 52 6f 6f 74 20 66 72 61 6d 65 20 6f   /* Root frame o
1eaf0 66 20 56 44 42 45 20 2a 2f 0a 0a 20 20 76 20 3d  f VDBE */..  v =
1eb00 20 30 3b 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20   0;.  res = 0;. 
1eb10 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
1eb20 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
1eb30 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  ->nCursor );.  p
1eb40 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
1eb50 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
1eb60 20 70 43 21 3d 30 20 29 3b 0a 20 20 69 66 28 20   pC!=0 );.  if( 
1eb70 4e 45 56 45 52 28 70 43 2d 3e 70 43 75 72 73 6f  NEVER(pC->pCurso
1eb80 72 3d 3d 30 29 20 29 7b 0a 20 20 20 20 2f 2a 20  r==0) ){.    /* 
1eb90 54 68 65 20 7a 65 72 6f 20 69 6e 69 74 69 61 6c  The zero initial
1eba0 69 7a 61 74 69 6f 6e 20 61 62 6f 76 65 20 69 73  ization above is
1ebb0 20 61 6c 6c 20 74 68 61 74 20 69 73 20 6e 65 65   all that is nee
1ebc0 64 65 64 20 2a 2f 0a 20 20 7d 65 6c 73 65 7b 0a  ded */.  }else{.
1ebd0 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 78 74 20      /* The next 
1ebe0 72 6f 77 69 64 20 6f 72 20 72 65 63 6f 72 64 20  rowid or record 
1ebf0 6e 75 6d 62 65 72 20 28 64 69 66 66 65 72 65 6e  number (differen
1ec00 74 20 74 65 72 6d 73 20 66 6f 72 20 74 68 65 20  t terms for the 
1ec10 73 61 6d 65 0a 20 20 20 20 2a 2a 20 74 68 69 6e  same.    ** thin
1ec20 67 29 20 69 73 20 6f 62 74 61 69 6e 65 64 20 69  g) is obtained i
1ec30 6e 20 61 20 74 77 6f 2d 73 74 65 70 20 61 6c 67  n a two-step alg
1ec40 6f 72 69 74 68 6d 2e 0a 20 20 20 20 2a 2a 0a 20  orithm..    **. 
1ec50 20 20 20 2a 2a 20 46 69 72 73 74 20 77 65 20 61     ** First we a
1ec60 74 74 65 6d 70 74 20 74 6f 20 66 69 6e 64 20 74  ttempt to find t
1ec70 68 65 20 6c 61 72 67 65 73 74 20 65 78 69 73 74  he largest exist
1ec80 69 6e 67 20 72 6f 77 69 64 20 61 6e 64 20 61 64  ing rowid and ad
1ec90 64 20 6f 6e 65 0a 20 20 20 20 2a 2a 20 74 6f 20  d one.    ** to 
1eca0 74 68 61 74 2e 20 20 42 75 74 20 69 66 20 74 68  that.  But if th
1ecb0 65 20 6c 61 72 67 65 73 74 20 65 78 69 73 74 69  e largest existi
1ecc0 6e 67 20 72 6f 77 69 64 20 69 73 20 61 6c 72 65  ng rowid is alre
1ecd0 61 64 79 20 74 68 65 20 6d 61 78 69 6d 75 6d 0a  ady the maximum.
1ece0 20 20 20 20 2a 2a 20 70 6f 73 69 74 69 76 65 20      ** positive 
1ecf0 69 6e 74 65 67 65 72 2c 20 77 65 20 68 61 76 65  integer, we have
1ed00 20 74 6f 20 66 61 6c 6c 20 74 68 72 6f 75 67 68   to fall through
1ed10 20 74 6f 20 74 68 65 20 73 65 63 6f 6e 64 0a 20   to the second. 
1ed20 20 20 20 2a 2a 20 70 72 6f 62 61 62 69 6c 69 73     ** probabilis
1ed30 74 69 63 20 61 6c 67 6f 72 69 74 68 6d 0a 20 20  tic algorithm.  
1ed40 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 54 68 65 20    **.    ** The 
1ed50 73 65 63 6f 6e 64 20 61 6c 67 6f 72 69 74 68 6d  second algorithm
1ed60 20 69 73 20 74 6f 20 73 65 6c 65 63 74 20 61 20   is to select a 
1ed70 72 6f 77 69 64 20 61 74 20 72 61 6e 64 6f 6d 20  rowid at random 
1ed80 61 6e 64 20 73 65 65 20 69 66 0a 20 20 20 20 2a  and see if.    *
1ed90 2a 20 69 74 20 61 6c 72 65 61 64 79 20 65 78 69  * it already exi
1eda0 73 74 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65  sts in the table
1edb0 2e 20 20 49 66 20 69 74 20 64 6f 65 73 20 6e 6f  .  If it does no
1edc0 74 20 65 78 69 73 74 2c 20 77 65 20 68 61 76 65  t exist, we have
1edd0 0a 20 20 20 20 2a 2a 20 73 75 63 63 65 65 64 65  .    ** succeede
1ede0 64 2e 20 20 49 66 20 74 68 65 20 72 61 6e 64 6f  d.  If the rando
1edf0 6d 20 72 6f 77 69 64 20 64 6f 65 73 20 65 78 69  m rowid does exi
1ee00 73 74 2c 20 77 65 20 73 65 6c 65 63 74 20 61 20  st, we select a 
1ee10 6e 65 77 20 6f 6e 65 0a 20 20 20 20 2a 2a 20 61  new one.    ** a
1ee20 6e 64 20 74 72 79 20 61 67 61 69 6e 2c 20 75 70  nd try again, up
1ee30 20 74 6f 20 31 30 30 20 74 69 6d 65 73 2e 0a 20   to 100 times.. 
1ee40 20 20 20 2a 2f 0a 20 20 20 20 61 73 73 65 72 74     */.    assert
1ee50 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b  ( pC->isTable );
1ee60 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
1ee70 33 32 42 49 54 5f 52 4f 57 49 44 0a 23 20 20 20  32BIT_ROWID.#   
1ee80 64 65 66 69 6e 65 20 4d 41 58 5f 52 4f 57 49 44  define MAX_ROWID
1ee90 20 30 78 37 66 66 66 66 66 66 66 0a 23 65 6c 73   0x7fffffff.#els
1eea0 65 0a 20 20 20 20 2f 2a 20 53 6f 6d 65 20 63 6f  e.    /* Some co
1eeb0 6d 70 69 6c 65 72 73 20 63 6f 6d 70 6c 61 69 6e  mpilers complain
1eec0 20 61 62 6f 75 74 20 63 6f 6e 73 74 61 6e 74 73   about constants
1eed0 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 30 78 37   of the form 0x7
1eee0 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 2e  fffffffffffffff.
1eef0 0a 20 20 20 20 2a 2a 20 4f 74 68 65 72 73 20 63  .    ** Others c
1ef00 6f 6d 70 6c 61 69 6e 20 61 62 6f 75 74 20 30 78  omplain about 0x
1ef10 37 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66  7fffffffffffffff
1ef20 66 4c 4c 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77  fLL.  The follow
1ef30 69 6e 67 20 6d 61 63 72 6f 20 73 65 65 6d 73 0a  ing macro seems.
1ef40 20 20 20 20 2a 2a 20 74 6f 20 70 72 6f 76 69 64      ** to provid
1ef50 65 20 74 68 65 20 63 6f 6e 73 74 61 6e 74 20 77  e the constant w
1ef60 68 69 6c 65 20 6d 61 6b 69 6e 67 20 61 6c 6c 20  hile making all 
1ef70 63 6f 6d 70 69 6c 65 72 73 20 68 61 70 70 79 2e  compilers happy.
1ef80 0a 20 20 20 20 2a 2f 0a 23 20 20 20 64 65 66 69  .    */.#   defi
1ef90 6e 65 20 4d 41 58 5f 52 4f 57 49 44 20 20 28 69  ne MAX_ROWID  (i
1efa0 36 34 29 28 20 28 28 28 75 36 34 29 30 78 37 66  64)( (((u64)0x7f
1efb0 66 66 66 66 66 66 29 3c 3c 33 32 29 20 7c 20 28  ffffff)<<32) | (
1efc0 75 36 34 29 30 78 66 66 66 66 66 66 66 66 20 29  u64)0xffffffff )
1efd0 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 69 66 28  .#endif..    if(
1efe0 20 21 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52   !pC->useRandomR
1eff0 6f 77 69 64 20 29 7b 0a 20 20 20 20 20 20 76 20  owid ){.      v 
1f000 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 47 65  = sqlite3BtreeGe
1f010 74 43 61 63 68 65 64 52 6f 77 69 64 28 70 43 2d  tCachedRowid(pC-
1f020 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 20  >pCursor);.     
1f030 20 69 66 28 20 76 3d 3d 30 20 29 7b 0a 20 20 20   if( v==0 ){.   
1f040 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
1f050 33 42 74 72 65 65 4c 61 73 74 28 70 43 2d 3e 70  3BtreeLast(pC->p
1f060 43 75 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20  Cursor, &res);. 
1f070 20 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53         if( rc!=S
1f080 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
1f090 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74        goto abort
1f0a0 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
1f0b0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
1f0c0 20 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20   if( res ){.    
1f0d0 20 20 20 20 20 20 76 20 3d 20 31 3b 20 20 20 2f        v = 1;   /
1f0e0 2a 20 49 4d 50 3a 20 52 2d 36 31 39 31 34 2d 34  * IMP: R-61914-4
1f0f0 38 30 37 34 20 2a 2f 0a 20 20 20 20 20 20 20 20  8074 */.        
1f100 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20  }else{.         
1f110 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
1f120 42 74 72 65 65 43 75 72 73 6f 72 49 73 56 61 6c  BtreeCursorIsVal
1f130 69 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 29 20  id(pC->pCursor) 
1f140 29 3b 0a 20 20 20 20 20 20 20 20 20 20 72 63 20  );.          rc 
1f150 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65  = sqlite3BtreeKe
1f160 79 53 69 7a 65 28 70 43 2d 3e 70 43 75 72 73 6f  ySize(pC->pCurso
1f170 72 2c 20 26 76 29 3b 0a 20 20 20 20 20 20 20 20  r, &v);.        
1f180 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51    assert( rc==SQ
1f190 4c 49 54 45 5f 4f 4b 20 29 3b 20 20 20 2f 2a 20  LITE_OK );   /* 
1f1a0 43 61 6e 6e 6f 74 20 66 61 69 6c 20 66 6f 6c 6c  Cannot fail foll
1f1b0 6f 77 69 6e 67 20 42 74 72 65 65 4c 61 73 74 28  owing BtreeLast(
1f1c0 29 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 69  ) */.          i
1f1d0 66 28 20 76 3d 3d 4d 41 58 5f 52 4f 57 49 44 20  f( v==MAX_ROWID 
1f1e0 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ){.            p
1f1f0 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69  C->useRandomRowi
1f200 64 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 20  d = 1;.         
1f210 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
1f220 20 20 20 20 76 2b 2b 3b 20 20 20 2f 2a 20 49 4d      v++;   /* IM
1f230 50 3a 20 52 2d 32 39 35 33 38 2d 33 34 39 38 37  P: R-29538-34987
1f240 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 7d 0a   */.          }.
1f250 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
1f260 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  }..#ifndef SQLIT
1f270 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45  E_OMIT_AUTOINCRE
1f280 4d 45 4e 54 0a 20 20 20 20 20 20 69 66 28 20 70  MENT.      if( p
1f290 4f 70 2d 3e 70 33 20 29 7b 0a 20 20 20 20 20 20  Op->p3 ){.      
1f2a0 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68 61 74    /* Assert that
1f2b0 20 50 33 20 69 73 20 61 20 76 61 6c 69 64 20 6d   P3 is a valid m
1f2c0 65 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a 20  emory cell. */. 
1f2d0 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
1f2e0 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 20 20  Op->p3>0 );.    
1f2f0 20 20 20 20 69 66 28 20 70 2d 3e 70 46 72 61 6d      if( p->pFram
1f300 65 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 66  e ){.          f
1f310 6f 72 28 70 46 72 61 6d 65 3d 70 2d 3e 70 46 72  or(pFrame=p->pFr
1f320 61 6d 65 3b 20 70 46 72 61 6d 65 2d 3e 70 50 61  ame; pFrame->pPa
1f330 72 65 6e 74 3b 20 70 46 72 61 6d 65 3d 70 46 72  rent; pFrame=pFr
1f340 61 6d 65 2d 3e 70 50 61 72 65 6e 74 29 3b 0a 20  ame->pParent);. 
1f350 20 20 20 20 20 20 20 20 20 2f 2a 20 41 73 73 65           /* Asse
1f360 72 74 20 74 68 61 74 20 50 33 20 69 73 20 61 20  rt that P3 is a 
1f370 76 61 6c 69 64 20 6d 65 6d 6f 72 79 20 63 65 6c  valid memory cel
1f380 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  l. */.          
1f390 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c  assert( pOp->p3<
1f3a0 3d 70 46 72 61 6d 65 2d 3e 6e 4d 65 6d 20 29 3b  =pFrame->nMem );
1f3b0 0a 20 20 20 20 20 20 20 20 20 20 70 4d 65 6d 20  .          pMem 
1f3c0 3d 20 26 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b  = &pFrame->aMem[
1f3d0 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 20 20  pOp->p3];.      
1f3e0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
1f3f0 20 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68 61     /* Assert tha
1f400 74 20 50 33 20 69 73 20 61 20 76 61 6c 69 64 20  t P3 is a valid 
1f410 6d 65 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a  memory cell. */.
1f420 20 20 20 20 20 20 20 20 20 20 61 73 73 65 72 74            assert
1f430 28 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d  ( pOp->p3<=p->nM
1f440 65 6d 20 29 3b 0a 20 20 20 20 20 20 20 20 20 20  em );.          
1f450 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pMem = &aMem[pOp
1f460 2d 3e 70 33 5d 3b 0a 20 20 20 20 20 20 20 20 20  ->p3];.         
1f470 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
1f480 65 28 70 2c 20 70 4d 65 6d 29 3b 0a 20 20 20 20  e(p, pMem);.    
1f490 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 61 73      }.        as
1f4a0 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
1f4b0 28 70 4d 65 6d 29 20 29 3b 0a 0a 20 20 20 20 20  (pMem) );..     
1f4c0 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43     REGISTER_TRAC
1f4d0 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4d 65 6d 29  E(pOp->p3, pMem)
1f4e0 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
1f4f0 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69  3VdbeMemIntegeri
1f500 66 79 28 70 4d 65 6d 29 3b 0a 20 20 20 20 20 20  fy(pMem);.      
1f510 20 20 61 73 73 65 72 74 28 20 28 70 4d 65 6d 2d    assert( (pMem-
1f520 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
1f530 29 21 3d 30 20 29 3b 20 20 2f 2a 20 6d 65 6d 28  )!=0 );  /* mem(
1f540 50 33 29 20 68 6f 6c 64 73 20 61 6e 20 69 6e 74  P3) holds an int
1f550 65 67 65 72 20 2a 2f 0a 20 20 20 20 20 20 20 20  eger */.        
1f560 69 66 28 20 70 4d 65 6d 2d 3e 75 2e 69 3d 3d 4d  if( pMem->u.i==M
1f570 41 58 5f 52 4f 57 49 44 20 7c 7c 20 70 43 2d 3e  AX_ROWID || pC->
1f580 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20 29  useRandomRowid )
1f590 7b 0a 20 20 20 20 20 20 20 20 20 20 72 63 20 3d  {.          rc =
1f5a0 20 53 51 4c 49 54 45 5f 46 55 4c 4c 3b 20 20 20   SQLITE_FULL;   
1f5b0 2f 2a 20 49 4d 50 3a 20 52 2d 31 32 32 37 35 2d  /* IMP: R-12275-
1f5c0 36 31 33 33 38 20 2a 2f 0a 20 20 20 20 20 20 20  61338 */.       
1f5d0 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
1f5e0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
1f5f0 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66      }.        if
1f600 28 20 76 3c 70 4d 65 6d 2d 3e 75 2e 69 2b 31 20  ( v<pMem->u.i+1 
1f610 29 7b 0a 20 20 20 20 20 20 20 20 20 20 76 20 3d  ){.          v =
1f620 20 70 4d 65 6d 2d 3e 75 2e 69 20 2b 20 31 3b 0a   pMem->u.i + 1;.
1f630 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
1f640 20 20 70 4d 65 6d 2d 3e 75 2e 69 20 3d 20 76 3b    pMem->u.i = v;
1f650 0a 20 20 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a  .      }.#endif.
1f660 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 42 74  .      sqlite3Bt
1f670 72 65 65 53 65 74 43 61 63 68 65 64 52 6f 77 69  reeSetCachedRowi
1f680 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 76  d(pC->pCursor, v
1f690 3c 4d 41 58 5f 52 4f 57 49 44 20 3f 20 76 2b 31  <MAX_ROWID ? v+1
1f6a0 20 3a 20 30 29 3b 0a 20 20 20 20 7d 0a 20 20 20   : 0);.    }.   
1f6b0 20 69 66 28 20 70 43 2d 3e 75 73 65 52 61 6e 64   if( pC->useRand
1f6c0 6f 6d 52 6f 77 69 64 20 29 7b 0a 20 20 20 20 20  omRowid ){.     
1f6d0 20 2f 2a 20 49 4d 50 4c 45 4d 45 4e 54 41 54 49   /* IMPLEMENTATI
1f6e0 4f 4e 2d 4f 46 3a 20 52 2d 30 37 36 37 37 2d 34  ON-OF: R-07677-4
1f6f0 31 38 38 31 20 49 66 20 74 68 65 20 6c 61 72 67  1881 If the larg
1f700 65 73 74 20 52 4f 57 49 44 20 69 73 20 65 71 75  est ROWID is equ
1f710 61 6c 20 74 6f 20 74 68 65 0a 20 20 20 20 20 20  al to the.      
1f720 2a 2a 20 6c 61 72 67 65 73 74 20 70 6f 73 73 69  ** largest possi
1f730 62 6c 65 20 69 6e 74 65 67 65 72 20 28 39 32 32  ble integer (922
1f740 33 33 37 32 30 33 36 38 35 34 37 37 35 38 30 37  3372036854775807
1f750 29 20 74 68 65 6e 20 74 68 65 20 64 61 74 61 62  ) then the datab
1f760 61 73 65 0a 20 20 20 20 20 20 2a 2a 20 65 6e 67  ase.      ** eng
1f770 69 6e 65 20 73 74 61 72 74 73 20 70 69 63 6b 69  ine starts picki
1f780 6e 67 20 70 6f 73 69 74 69 76 65 20 63 61 6e 64  ng positive cand
1f790 69 64 61 74 65 20 52 4f 57 49 44 73 20 61 74 20  idate ROWIDs at 
1f7a0 72 61 6e 64 6f 6d 20 75 6e 74 69 6c 0a 20 20 20  random until.   
1f7b0 20 20 20 2a 2a 20 69 74 20 66 69 6e 64 73 20 6f     ** it finds o
1f7c0 6e 65 20 74 68 61 74 20 69 73 20 6e 6f 74 20 70  ne that is not p
1f7d0 72 65 76 69 6f 75 73 6c 79 20 75 73 65 64 2e 20  reviously used. 
1f7e0 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  */.      assert(
1f7f0 20 70 4f 70 2d 3e 70 33 3d 3d 30 20 29 3b 20 20   pOp->p3==0 );  
1f800 2f 2a 20 57 65 20 63 61 6e 6e 6f 74 20 62 65 20  /* We cannot be 
1f810 69 6e 20 72 61 6e 64 6f 6d 20 72 6f 77 69 64 20  in random rowid 
1f820 6d 6f 64 65 20 69 66 20 74 68 69 73 20 69 73 0a  mode if this is.
1f830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f840 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
1f850 61 6e 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  an AUTOINCREMENT
1f860 20 74 61 62 6c 65 2e 20 2a 2f 0a 20 20 20 20 20   table. */.     
1f870 20 2f 2a 20 6f 6e 20 74 68 65 20 66 69 72 73 74   /* on the first
1f880 20 61 74 74 65 6d 70 74 2c 20 73 69 6d 70 6c 79   attempt, simply
1f890 20 64 6f 20 6f 6e 65 20 6d 6f 72 65 20 74 68 61   do one more tha
1f8a0 6e 20 70 72 65 76 69 6f 75 73 20 2a 2f 0a 20 20  n previous */.  
1f8b0 20 20 20 20 76 20 3d 20 6c 61 73 74 52 6f 77 69      v = lastRowi
1f8c0 64 3b 0a 20 20 20 20 20 20 76 20 26 3d 20 28 4d  d;.      v &= (M
1f8d0 41 58 5f 52 4f 57 49 44 3e 3e 31 29 3b 20 2f 2a  AX_ROWID>>1); /*
1f8e0 20 65 6e 73 75 72 65 20 64 6f 65 73 6e 27 74 20   ensure doesn't 
1f8f0 67 6f 20 6e 65 67 61 74 69 76 65 20 2a 2f 0a 20  go negative */. 
1f900 20 20 20 20 20 76 2b 2b 3b 20 2f 2a 20 65 6e 73       v++; /* ens
1f910 75 72 65 20 6e 6f 6e 2d 7a 65 72 6f 20 2a 2f 0a  ure non-zero */.
1f920 20 20 20 20 20 20 63 6e 74 20 3d 20 30 3b 0a 20        cnt = 0;. 
1f930 20 20 20 20 20 77 68 69 6c 65 28 20 20 20 28 28       while(   ((
1f940 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
1f950 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28  eMovetoUnpacked(
1f960 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 30 2c 20  pC->pCursor, 0, 
1f970 28 75 36 34 29 76 2c 0a 20 20 20 20 20 20 20 20  (u64)v,.        
1f980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f9a0 20 20 20 20 20 20 20 20 20 30 2c 20 26 72 65 73           0, &res
1f9b0 29 29 3d 3d 53 51 4c 49 54 45 5f 4f 4b 29 0a 20  ))==SQLITE_OK). 
1f9c0 20 20 20 20 20 20 20 20 20 20 20 26 26 20 28 72             && (r
1f9d0 65 73 3d 3d 30 29 0a 20 20 20 20 20 20 20 20 20  es==0).         
1f9e0 20 20 20 26 26 20 28 2b 2b 63 6e 74 3c 31 30 30     && (++cnt<100
1f9f0 29 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 63  )){.        /* c
1fa00 6f 6c 6c 69 73 69 6f 6e 20 2d 20 74 72 79 20 61  ollision - try a
1fa10 6e 6f 74 68 65 72 20 72 61 6e 64 6f 6d 20 72 6f  nother random ro
1fa20 77 69 64 20 2a 2f 0a 20 20 20 20 20 20 20 20 73  wid */.        s
1fa30 71 6c 69 74 65 33 5f 72 61 6e 64 6f 6d 6e 65 73  qlite3_randomnes
1fa40 73 28 73 69 7a 65 6f 66 28 76 29 2c 20 26 76 29  s(sizeof(v), &v)
1fa50 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 63 6e  ;.        if( cn
1fa60 74 3c 35 20 29 7b 0a 20 20 20 20 20 20 20 20 20  t<5 ){.         
1fa70 20 2f 2a 20 74 72 79 20 22 73 6d 61 6c 6c 22 20   /* try "small" 
1fa80 72 61 6e 64 6f 6d 20 72 6f 77 69 64 73 20 66 6f  random rowids fo
1fa90 72 20 74 68 65 20 69 6e 69 74 69 61 6c 20 61 74  r the initial at
1faa0 74 65 6d 70 74 73 20 2a 2f 0a 20 20 20 20 20 20  tempts */.      
1fab0 20 20 20 20 76 20 26 3d 20 30 78 66 66 66 66 66      v &= 0xfffff
1fac0 66 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65  f;.        }else
1fad0 7b 0a 20 20 20 20 20 20 20 20 20 20 76 20 26 3d  {.          v &=
1fae0 20 28 4d 41 58 5f 52 4f 57 49 44 3e 3e 31 29 3b   (MAX_ROWID>>1);
1faf0 20 2f 2a 20 65 6e 73 75 72 65 20 64 6f 65 73 6e   /* ensure doesn
1fb00 27 74 20 67 6f 20 6e 65 67 61 74 69 76 65 20 2a  't go negative *
1fb10 2f 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  /.        }.    
1fb20 20 20 20 20 76 2b 2b 3b 20 2f 2a 20 65 6e 73 75      v++; /* ensu
1fb30 72 65 20 6e 6f 6e 2d 7a 65 72 6f 20 2a 2f 0a 20  re non-zero */. 
1fb40 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28       }.      if(
1fb50 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26   rc==SQLITE_OK &
1fb60 26 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20  & res==0 ){.    
1fb70 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
1fb80 46 55 4c 4c 3b 20 20 20 2f 2a 20 49 4d 50 3a 20  FULL;   /* IMP: 
1fb90 52 2d 33 38 32 31 39 2d 35 33 30 30 32 20 2a 2f  R-38219-53002 */
1fba0 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62  .        goto ab
1fbb0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
1fbc0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
1fbd0 61 73 73 65 72 74 28 20 76 3e 30 20 29 3b 20 20  assert( v>0 );  
1fbe0 2f 2a 20 45 56 3a 20 52 2d 34 30 38 31 32 2d 30  /* EV: R-40812-0
1fbf0 33 35 37 30 20 2a 2f 0a 20 20 20 20 7d 0a 20 20  3570 */.    }.  
1fc00 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c    pC->rowidIsVal
1fc10 69 64 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e  id = 0;.    pC->
1fc20 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d  deferredMoveto =
1fc30 20 30 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68   0;.    pC->cach
1fc40 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
1fc50 53 54 41 4c 45 3b 0a 20 20 7d 0a 20 20 70 4f 75  STALE;.  }.  pOu
1fc60 74 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20 20 62 72  t->u.i = v;.  br
1fc70 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
1fc80 65 3a 20 49 6e 73 65 72 74 20 50 31 20 50 32 20  e: Insert P1 P2 
1fc90 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 57  P3 P4 P5.**.** W
1fca0 72 69 74 65 20 61 6e 20 65 6e 74 72 79 20 69 6e  rite an entry in
1fcb0 74 6f 20 74 68 65 20 74 61 62 6c 65 20 6f 66 20  to the table of 
1fcc0 63 75 72 73 6f 72 20 50 31 2e 20 20 41 20 6e 65  cursor P1.  A ne
1fcd0 77 20 65 6e 74 72 79 20 69 73 0a 2a 2a 20 63 72  w entry is.** cr
1fce0 65 61 74 65 64 20 69 66 20 69 74 20 64 6f 65 73  eated if it does
1fcf0 6e 27 74 20 61 6c 72 65 61 64 79 20 65 78 69 73  n't already exis
1fd00 74 20 6f 72 20 74 68 65 20 64 61 74 61 20 66 6f  t or the data fo
1fd10 72 20 61 6e 20 65 78 69 73 74 69 6e 67 0a 2a 2a  r an existing.**
1fd20 20 65 6e 74 72 79 20 69 73 20 6f 76 65 72 77 72   entry is overwr
1fd30 69 74 74 65 6e 2e 20 20 54 68 65 20 64 61 74 61  itten.  The data
1fd40 20 69 73 20 74 68 65 20 76 61 6c 75 65 20 4d 45   is the value ME
1fd50 4d 5f 42 6c 6f 62 20 73 74 6f 72 65 64 20 69 6e  M_Blob stored in
1fd60 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 6e 75 6d   register.** num
1fd70 62 65 72 20 50 32 2e 20 54 68 65 20 6b 65 79 20  ber P2. The key 
1fd80 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67  is stored in reg
1fd90 69 73 74 65 72 20 50 33 2e 20 54 68 65 20 6b 65  ister P3. The ke
1fda0 79 20 6d 75 73 74 0a 2a 2a 20 62 65 20 61 20 4d  y must.** be a M
1fdb0 45 4d 5f 49 6e 74 2e 0a 2a 2a 0a 2a 2a 20 49 66  EM_Int..**.** If
1fdc0 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41   the OPFLAG_NCHA
1fdd0 4e 47 45 20 66 6c 61 67 20 6f 66 20 50 35 20 69  NGE flag of P5 i
1fde0 73 20 73 65 74 2c 20 74 68 65 6e 20 74 68 65 20  s set, then the 
1fdf0 72 6f 77 20 63 68 61 6e 67 65 20 63 6f 75 6e 74  row change count
1fe00 20 69 73 0a 2a 2a 20 69 6e 63 72 65 6d 65 6e 74   is.** increment
1fe10 65 64 20 28 6f 74 68 65 72 77 69 73 65 20 6e 6f  ed (otherwise no
1fe20 74 29 2e 20 20 49 66 20 74 68 65 20 4f 50 46 4c  t).  If the OPFL
1fe30 41 47 5f 4c 41 53 54 52 4f 57 49 44 20 66 6c 61  AG_LASTROWID fla
1fe40 67 20 6f 66 20 50 35 20 69 73 20 73 65 74 2c 0a  g of P5 is set,.
1fe50 2a 2a 20 74 68 65 6e 20 72 6f 77 69 64 20 69 73  ** then rowid is
1fe60 20 73 74 6f 72 65 64 20 66 6f 72 20 73 75 62 73   stored for subs
1fe70 65 71 75 65 6e 74 20 72 65 74 75 72 6e 20 62 79  equent return by
1fe80 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f   the.** sqlite3_
1fe90 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69  last_insert_rowi
1fea0 64 28 29 20 66 75 6e 63 74 69 6f 6e 20 28 6f 74  d() function (ot
1feb0 68 65 72 77 69 73 65 20 69 74 20 69 73 20 75 6e  herwise it is un
1fec0 6d 6f 64 69 66 69 65 64 29 2e 0a 2a 2a 0a 2a 2a  modified)..**.**
1fed0 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 55   If the OPFLAG_U
1fee0 53 45 53 45 45 4b 52 45 53 55 4c 54 20 66 6c 61  SESEEKRESULT fla
1fef0 67 20 6f 66 20 50 35 20 69 73 20 73 65 74 20 61  g of P5 is set a
1ff00 6e 64 20 69 66 20 74 68 65 20 72 65 73 75 6c 74  nd if the result
1ff10 20 6f 66 0a 2a 2a 20 74 68 65 20 6c 61 73 74 20   of.** the last 
1ff20 73 65 65 6b 20 6f 70 65 72 61 74 69 6f 6e 20 28  seek operation (
1ff30 4f 50 5f 4e 6f 74 45 78 69 73 74 73 29 20 77 61  OP_NotExists) wa
1ff40 73 20 61 20 73 75 63 63 65 73 73 2c 20 74 68 65  s a success, the
1ff50 6e 20 74 68 69 73 0a 2a 2a 20 6f 70 65 72 61 74  n this.** operat
1ff60 69 6f 6e 20 77 69 6c 6c 20 6e 6f 74 20 61 74 74  ion will not att
1ff70 65 6d 70 74 20 74 6f 20 66 69 6e 64 20 74 68 65  empt to find the
1ff80 20 61 70 70 72 6f 70 72 69 61 74 65 20 72 6f 77   appropriate row
1ff90 20 62 65 66 6f 72 65 20 64 6f 69 6e 67 0a 2a 2a   before doing.**
1ffa0 20 74 68 65 20 69 6e 73 65 72 74 20 62 75 74 20   the insert but 
1ffb0 77 69 6c 6c 20 69 6e 73 74 65 61 64 20 6f 76 65  will instead ove
1ffc0 72 77 72 69 74 65 20 74 68 65 20 72 6f 77 20 74  rwrite the row t
1ffd0 68 61 74 20 74 68 65 20 63 75 72 73 6f 72 20 69  hat the cursor i
1ffe0 73 0a 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20 70  s.** currently p
1fff0 6f 69 6e 74 69 6e 67 20 74 6f 2e 20 20 50 72 65  ointing to.  Pre
20000 73 75 6d 61 62 6c 79 2c 20 74 68 65 20 70 72 69  sumably, the pri
20010 6f 72 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 20  or OP_NotExists 
20020 6f 70 63 6f 64 65 0a 2a 2a 20 68 61 73 20 61 6c  opcode.** has al
20030 72 65 61 64 79 20 70 6f 73 69 74 69 6f 6e 65 64  ready positioned
20040 20 74 68 65 20 63 75 72 73 6f 72 20 63 6f 72 72   the cursor corr
20050 65 63 74 6c 79 2e 20 20 54 68 69 73 20 69 73 20  ectly.  This is 
20060 61 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 0a  an optimization.
20070 2a 2a 20 74 68 61 74 20 62 6f 6f 73 74 73 20 70  ** that boosts p
20080 65 72 66 6f 72 6d 61 6e 63 65 20 62 79 20 61 76  erformance by av
20090 6f 69 64 69 6e 67 20 72 65 64 75 6e 64 61 6e 74  oiding redundant
200a0 20 73 65 65 6b 73 2e 0a 2a 2a 0a 2a 2a 20 49 66   seeks..**.** If
200b0 20 74 68 65 20 4f 50 46 4c 41 47 5f 49 53 55 50   the OPFLAG_ISUP
200c0 44 41 54 45 20 66 6c 61 67 20 69 73 20 73 65 74  DATE flag is set
200d0 2c 20 74 68 65 6e 20 74 68 69 73 20 6f 70 63 6f  , then this opco
200e0 64 65 20 69 73 20 70 61 72 74 20 6f 66 20 61 6e  de is part of an
200f0 0a 2a 2a 20 55 50 44 41 54 45 20 6f 70 65 72 61  .** UPDATE opera
20100 74 69 6f 6e 2e 20 20 4f 74 68 65 72 77 69 73 65  tion.  Otherwise
20110 20 28 69 66 20 74 68 65 20 66 6c 61 67 20 69 73   (if the flag is
20120 20 63 6c 65 61 72 29 20 74 68 65 6e 20 74 68 69   clear) then thi
20130 73 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 70  s opcode.** is p
20140 61 72 74 20 6f 66 20 61 6e 20 49 4e 53 45 52 54  art of an INSERT
20150 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20 54 68 65   operation.  The
20160 20 64 69 66 66 65 72 65 6e 63 65 20 69 73 20 6f   difference is o
20170 6e 6c 79 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f  nly important to
20180 0a 2a 2a 20 74 68 65 20 75 70 64 61 74 65 20 68  .** the update h
20190 6f 6f 6b 2e 0a 2a 2a 0a 2a 2a 20 50 61 72 61 6d  ook..**.** Param
201a0 65 74 65 72 20 50 34 20 6d 61 79 20 70 6f 69 6e  eter P4 may poin
201b0 74 20 74 6f 20 61 20 73 74 72 69 6e 67 20 63 6f  t to a string co
201c0 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74 61 62  ntaining the tab
201d0 6c 65 2d 6e 61 6d 65 2c 20 6f 72 0a 2a 2a 20 6d  le-name, or.** m
201e0 61 79 20 62 65 20 4e 55 4c 4c 2e 20 49 66 20 69  ay be NULL. If i
201f0 74 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 74  t is not NULL, t
20200 68 65 6e 20 74 68 65 20 75 70 64 61 74 65 2d 68  hen the update-h
20210 6f 6f 6b 20 0a 2a 2a 20 28 73 71 6c 69 74 65 33  ook .** (sqlite3
20220 2e 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b  .xUpdateCallback
20230 29 20 69 73 20 69 6e 76 6f 6b 65 64 20 66 6f 6c  ) is invoked fol
20240 6c 6f 77 69 6e 67 20 61 20 73 75 63 63 65 73 73  lowing a success
20250 66 75 6c 20 69 6e 73 65 72 74 2e 0a 2a 2a 0a 2a  ful insert..**.*
20260 2a 20 28 57 41 52 4e 49 4e 47 2f 54 4f 44 4f 3a  * (WARNING/TODO:
20270 20 49 66 20 50 31 20 69 73 20 61 20 70 73 65 75   If P1 is a pseu
20280 64 6f 2d 63 75 72 73 6f 72 20 61 6e 64 20 50 32  do-cursor and P2
20290 20 69 73 20 64 79 6e 61 6d 69 63 61 6c 6c 79 0a   is dynamically.
202a0 2a 2a 20 61 6c 6c 6f 63 61 74 65 64 2c 20 74 68  ** allocated, th
202b0 65 6e 20 6f 77 6e 65 72 73 68 69 70 20 6f 66 20  en ownership of 
202c0 50 32 20 69 73 20 74 72 61 6e 73 66 65 72 72 65  P2 is transferre
202d0 64 20 74 6f 20 74 68 65 20 70 73 65 75 64 6f 2d  d to the pseudo-
202e0 63 75 72 73 6f 72 0a 2a 2a 20 61 6e 64 20 72 65  cursor.** and re
202f0 67 69 73 74 65 72 20 50 32 20 62 65 63 6f 6d 65  gister P2 become
20300 73 20 65 70 68 65 6d 65 72 61 6c 2e 20 20 49 66  s ephemeral.  If
20310 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 63   the cursor is c
20320 68 61 6e 67 65 64 2c 20 74 68 65 0a 2a 2a 20 76  hanged, the.** v
20330 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65 72  alue of register
20340 20 50 32 20 77 69 6c 6c 20 74 68 65 6e 20 63 68   P2 will then ch
20350 61 6e 67 65 2e 20 20 4d 61 6b 65 20 73 75 72 65  ange.  Make sure
20360 20 74 68 69 73 20 64 6f 65 73 20 6e 6f 74 0a 2a   this does not.*
20370 2a 20 63 61 75 73 65 20 61 6e 79 20 70 72 6f 62  * cause any prob
20380 6c 65 6d 73 2e 29 0a 2a 2a 0a 2a 2a 20 54 68 69  lems.).**.** Thi
20390 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e  s instruction on
203a0 6c 79 20 77 6f 72 6b 73 20 6f 6e 20 74 61 62 6c  ly works on tabl
203b0 65 73 2e 20 20 54 68 65 20 65 71 75 69 76 61 6c  es.  The equival
203c0 65 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a  ent instruction.
203d0 2a 2a 20 66 6f 72 20 69 6e 64 69 63 65 73 20 69  ** for indices i
203e0 73 20 4f 50 5f 49 64 78 49 6e 73 65 72 74 2e 0a  s OP_IdxInsert..
203f0 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e  */./* Opcode: In
20400 73 65 72 74 49 6e 74 20 50 31 20 50 32 20 50 33  sertInt P1 P2 P3
20410 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69   P4 P5.**.** Thi
20420 73 20 77 6f 72 6b 73 20 65 78 61 63 74 6c 79 20  s works exactly 
20430 6c 69 6b 65 20 4f 50 5f 49 6e 73 65 72 74 20 65  like OP_Insert e
20440 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20 6b  xcept that the k
20450 65 79 20 69 73 20 74 68 65 0a 2a 2a 20 69 6e 74  ey is the.** int
20460 65 67 65 72 20 76 61 6c 75 65 20 50 33 2c 20 6e  eger value P3, n
20470 6f 74 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  ot the value of 
20480 74 68 65 20 69 6e 74 65 67 65 72 20 73 74 6f 72  the integer stor
20490 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ed in register P
204a0 33 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e  3..*/.case OP_In
204b0 73 65 72 74 3a 20 0a 63 61 73 65 20 4f 50 5f 49  sert: .case OP_I
204c0 6e 73 65 72 74 49 6e 74 3a 20 7b 0a 20 20 4d 65  nsertInt: {.  Me
204d0 6d 20 2a 70 44 61 74 61 3b 20 20 20 20 20 20 20  m *pData;       
204e0 2f 2a 20 4d 45 4d 20 63 65 6c 6c 20 68 6f 6c 64  /* MEM cell hold
204f0 69 6e 67 20 64 61 74 61 20 66 6f 72 20 74 68 65  ing data for the
20500 20 72 65 63 6f 72 64 20 74 6f 20 62 65 20 69 6e   record to be in
20510 73 65 72 74 65 64 20 2a 2f 0a 20 20 4d 65 6d 20  serted */.  Mem 
20520 2a 70 4b 65 79 3b 20 20 20 20 20 20 20 20 2f 2a  *pKey;        /*
20530 20 4d 45 4d 20 63 65 6c 6c 20 68 6f 6c 64 69 6e   MEM cell holdin
20540 67 20 6b 65 79 20 20 66 6f 72 20 74 68 65 20 72  g key  for the r
20550 65 63 6f 72 64 20 2a 2f 0a 20 20 69 36 34 20 69  ecord */.  i64 i
20560 4b 65 79 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  Key;         /* 
20570 54 68 65 20 69 6e 74 65 67 65 72 20 52 4f 57 49  The integer ROWI
20580 44 20 6f 72 20 6b 65 79 20 66 6f 72 20 74 68 65  D or key for the
20590 20 72 65 63 6f 72 64 20 74 6f 20 62 65 20 69 6e   record to be in
205a0 73 65 72 74 65 64 20 2a 2f 0a 20 20 56 64 62 65  serted */.  Vdbe
205b0 43 75 72 73 6f 72 20 2a 70 43 3b 20 20 20 2f 2a  Cursor *pC;   /*
205c0 20 43 75 72 73 6f 72 20 74 6f 20 74 61 62 6c 65   Cursor to table
205d0 20 69 6e 74 6f 20 77 68 69 63 68 20 69 6e 73 65   into which inse
205e0 72 74 20 69 73 20 77 72 69 74 74 65 6e 20 2a 2f  rt is written */
205f0 0a 20 20 69 6e 74 20 6e 5a 65 72 6f 3b 20 20 20  .  int nZero;   
20600 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
20610 66 20 7a 65 72 6f 2d 62 79 74 65 73 20 74 6f 20  f zero-bytes to 
20620 61 70 70 65 6e 64 20 2a 2f 0a 20 20 69 6e 74 20  append */.  int 
20630 73 65 65 6b 52 65 73 75 6c 74 3b 20 20 20 2f 2a  seekResult;   /*
20640 20 52 65 73 75 6c 74 20 6f 66 20 70 72 69 6f 72   Result of prior
20650 20 73 65 65 6b 20 6f 72 20 30 20 69 66 20 6e 6f   seek or 0 if no
20660 20 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20 66   USESEEKRESULT f
20670 6c 61 67 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  lag */.  const c
20680 68 61 72 20 2a 7a 44 62 3b 20 20 2f 2a 20 64 61  har *zDb;  /* da
20690 74 61 62 61 73 65 20 6e 61 6d 65 20 2d 20 75 73  tabase name - us
206a0 65 64 20 62 79 20 74 68 65 20 75 70 64 61 74 65  ed by the update
206b0 20 68 6f 6f 6b 20 2a 2f 0a 20 20 63 6f 6e 73 74   hook */.  const
206c0 20 63 68 61 72 20 2a 7a 54 62 6c 3b 20 2f 2a 20   char *zTbl; /* 
206d0 54 61 62 6c 65 20 6e 61 6d 65 20 2d 20 75 73 65  Table name - use
206e0 64 20 62 79 20 74 68 65 20 6f 70 64 61 74 65 20  d by the opdate 
206f0 68 6f 6f 6b 20 2a 2f 0a 20 20 69 6e 74 20 6f 70  hook */.  int op
20700 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f  ;           /* O
20710 70 63 6f 64 65 20 66 6f 72 20 75 70 64 61 74 65  pcode for update
20720 20 68 6f 6f 6b 3a 20 53 51 4c 49 54 45 5f 55 50   hook: SQLITE_UP
20730 44 41 54 45 20 6f 72 20 53 51 4c 49 54 45 5f 49  DATE or SQLITE_I
20740 4e 53 45 52 54 20 2a 2f 0a 0a 20 20 70 44 61 74  NSERT */..  pDat
20750 61 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  a = &aMem[pOp->p
20760 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  2];.  assert( pO
20770 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
20780 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
20790 3b 0a 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49  ;.  assert( memI
207a0 73 56 61 6c 69 64 28 70 44 61 74 61 29 20 29 3b  sValid(pData) );
207b0 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
207c0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
207d0 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
207e0 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75 72  assert( pC->pCur
207f0 73 6f 72 21 3d 30 20 29 3b 0a 20 20 61 73 73 65  sor!=0 );.  asse
20800 72 74 28 20 70 43 2d 3e 70 73 65 75 64 6f 54 61  rt( pC->pseudoTa
20810 62 6c 65 52 65 67 3d 3d 30 20 29 3b 0a 20 20 61  bleReg==0 );.  a
20820 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62  ssert( pC->isTab
20830 6c 65 20 29 3b 0a 20 20 52 45 47 49 53 54 45 52  le );.  REGISTER
20840 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20  _TRACE(pOp->p2, 
20850 70 44 61 74 61 29 3b 0a 0a 20 20 69 66 28 20 70  pData);..  if( p
20860 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49  Op->opcode==OP_I
20870 6e 73 65 72 74 20 29 7b 0a 20 20 20 20 70 4b 65  nsert ){.    pKe
20880 79 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  y = &aMem[pOp->p
20890 33 5d 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  3];.    assert( 
208a0 70 4b 65 79 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pKey->flags & ME
208b0 4d 5f 49 6e 74 20 29 3b 0a 20 20 20 20 61 73 73  M_Int );.    ass
208c0 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
208d0 70 4b 65 79 29 20 29 3b 0a 20 20 20 20 52 45 47  pKey) );.    REG
208e0 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
208f0 3e 70 33 2c 20 70 4b 65 79 29 3b 0a 20 20 20 20  >p3, pKey);.    
20900 69 4b 65 79 20 3d 20 70 4b 65 79 2d 3e 75 2e 69  iKey = pKey->u.i
20910 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61  ;.  }else{.    a
20920 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f  ssert( pOp->opco
20930 64 65 3d 3d 4f 50 5f 49 6e 73 65 72 74 49 6e 74  de==OP_InsertInt
20940 20 29 3b 0a 20 20 20 20 69 4b 65 79 20 3d 20 70   );.    iKey = p
20950 4f 70 2d 3e 70 33 3b 0a 20 20 7d 0a 0a 20 20 69  Op->p3;.  }..  i
20960 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46  f( pOp->p5 & OPF
20970 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29 20 70 2d  LAG_NCHANGE ) p-
20980 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 69 66  >nChange++;.  if
20990 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c  ( pOp->p5 & OPFL
209a0 41 47 5f 4c 41 53 54 52 4f 57 49 44 20 29 20 64  AG_LASTROWID ) d
209b0 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 6c  b->lastRowid = l
209c0 61 73 74 52 6f 77 69 64 20 3d 20 69 4b 65 79 3b  astRowid = iKey;
209d0 0a 20 20 69 66 28 20 70 44 61 74 61 2d 3e 66 6c  .  if( pData->fl
209e0 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29  ags & MEM_Null )
209f0 7b 0a 20 20 20 20 70 44 61 74 61 2d 3e 7a 20 3d  {.    pData->z =
20a00 20 30 3b 0a 20 20 20 20 70 44 61 74 61 2d 3e 6e   0;.    pData->n
20a10 20 3d 20 30 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20   = 0;.  }else{. 
20a20 20 20 20 61 73 73 65 72 74 28 20 70 44 61 74 61     assert( pData
20a30 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 42  ->flags & (MEM_B
20a40 6c 6f 62 7c 4d 45 4d 5f 53 74 72 29 20 29 3b 0a  lob|MEM_Str) );.
20a50 20 20 7d 0a 20 20 73 65 65 6b 52 65 73 75 6c 74    }.  seekResult
20a60 20 3d 20 28 28 70 4f 70 2d 3e 70 35 20 26 20 4f   = ((pOp->p5 & O
20a70 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53  PFLAG_USESEEKRES
20a80 55 4c 54 29 20 3f 20 70 43 2d 3e 73 65 65 6b 52  ULT) ? pC->seekR
20a90 65 73 75 6c 74 20 3a 20 30 29 3b 0a 20 20 69 66  esult : 0);.  if
20aa0 28 20 70 44 61 74 61 2d 3e 66 6c 61 67 73 20 26  ( pData->flags &
20ab0 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20   MEM_Zero ){.   
20ac0 20 6e 5a 65 72 6f 20 3d 20 70 44 61 74 61 2d 3e   nZero = pData->
20ad0 75 2e 6e 5a 65 72 6f 3b 0a 20 20 7d 65 6c 73 65  u.nZero;.  }else
20ae0 7b 0a 20 20 20 20 6e 5a 65 72 6f 20 3d 20 30 3b  {.    nZero = 0;
20af0 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 42 74  .  }.  sqlite3Bt
20b00 72 65 65 53 65 74 43 61 63 68 65 64 52 6f 77 69  reeSetCachedRowi
20b10 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 30  d(pC->pCursor, 0
20b20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  );.  rc = sqlite
20b30 33 42 74 72 65 65 49 6e 73 65 72 74 28 70 43 2d  3BtreeInsert(pC-
20b40 3e 70 43 75 72 73 6f 72 2c 20 30 2c 20 69 4b 65  >pCursor, 0, iKe
20b50 79 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  y,.             
20b60 20 20 20 20 20 20 20 20 20 20 20 20 20 70 44 61               pDa
20b70 74 61 2d 3e 7a 2c 20 70 44 61 74 61 2d 3e 6e 2c  ta->z, pData->n,
20b80 20 6e 5a 65 72 6f 2c 0a 20 20 20 20 20 20 20 20   nZero,.        
20b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20ba0 20 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c    pOp->p5 & OPFL
20bb0 41 47 5f 41 50 50 45 4e 44 2c 20 73 65 65 6b 52  AG_APPEND, seekR
20bc0 65 73 75 6c 74 0a 20 20 29 3b 0a 20 20 70 43 2d  esult.  );.  pC-
20bd0 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20  >rowidIsValid = 
20be0 30 3b 0a 20 20 70 43 2d 3e 64 65 66 65 72 72 65  0;.  pC->deferre
20bf0 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 70  dMoveto = 0;.  p
20c00 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
20c10 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 0a 20   CACHE_STALE;.. 
20c20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 75   /* Invoke the u
20c30 70 64 61 74 65 2d 68 6f 6f 6b 20 69 66 20 72 65  pdate-hook if re
20c40 71 75 69 72 65 64 2e 20 2a 2f 0a 20 20 69 66 28  quired. */.  if(
20c50 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26   rc==SQLITE_OK &
20c60 26 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c  & db->xUpdateCal
20c70 6c 62 61 63 6b 20 26 26 20 70 4f 70 2d 3e 70 34  lback && pOp->p4
20c80 2e 7a 20 29 7b 0a 20 20 20 20 7a 44 62 20 3d 20  .z ){.    zDb = 
20c90 64 62 2d 3e 61 44 62 5b 70 43 2d 3e 69 44 62 5d  db->aDb[pC->iDb]
20ca0 2e 7a 4e 61 6d 65 3b 0a 20 20 20 20 7a 54 62 6c  .zName;.    zTbl
20cb0 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20   = pOp->p4.z;.  
20cc0 20 20 6f 70 20 3d 20 28 28 70 4f 70 2d 3e 70 35    op = ((pOp->p5
20cd0 20 26 20 4f 50 46 4c 41 47 5f 49 53 55 50 44 41   & OPFLAG_ISUPDA
20ce0 54 45 29 20 3f 20 53 51 4c 49 54 45 5f 55 50 44  TE) ? SQLITE_UPD
20cf0 41 54 45 20 3a 20 53 51 4c 49 54 45 5f 49 4e 53  ATE : SQLITE_INS
20d00 45 52 54 29 3b 0a 20 20 20 20 61 73 73 65 72 74  ERT);.    assert
20d10 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b  ( pC->isTable );
20d20 0a 20 20 20 20 64 62 2d 3e 78 55 70 64 61 74 65  .    db->xUpdate
20d30 43 61 6c 6c 62 61 63 6b 28 64 62 2d 3e 70 55 70  Callback(db->pUp
20d40 64 61 74 65 41 72 67 2c 20 6f 70 2c 20 7a 44 62  dateArg, op, zDb
20d50 2c 20 7a 54 62 6c 2c 20 69 4b 65 79 29 3b 0a 20  , zTbl, iKey);. 
20d60 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69     assert( pC->i
20d70 44 62 3e 3d 30 20 29 3b 0a 20 20 7d 0a 20 20 62  Db>=0 );.  }.  b
20d80 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
20d90 64 65 3a 20 44 65 6c 65 74 65 20 50 31 20 50 32  de: Delete P1 P2
20da0 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 44 65   * P4 *.**.** De
20db0 6c 65 74 65 20 74 68 65 20 72 65 63 6f 72 64 20  lete the record 
20dc0 61 74 20 77 68 69 63 68 20 74 68 65 20 50 31 20  at which the P1 
20dd0 63 75 72 73 6f 72 20 69 73 20 63 75 72 72 65 6e  cursor is curren
20de0 74 6c 79 20 70 6f 69 6e 74 69 6e 67 2e 0a 2a 2a  tly pointing..**
20df0 0a 2a 2a 20 54 68 65 20 63 75 72 73 6f 72 20 77  .** The cursor w
20e00 69 6c 6c 20 62 65 20 6c 65 66 74 20 70 6f 69 6e  ill be left poin
20e10 74 69 6e 67 20 61 74 20 65 69 74 68 65 72 20 74  ting at either t
20e20 68 65 20 6e 65 78 74 20 6f 72 20 74 68 65 20 70  he next or the p
20e30 72 65 76 69 6f 75 73 0a 2a 2a 20 72 65 63 6f 72  revious.** recor
20e40 64 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20  d in the table. 
20e50 49 66 20 69 74 20 69 73 20 6c 65 66 74 20 70 6f  If it is left po
20e60 69 6e 74 69 6e 67 20 61 74 20 74 68 65 20 6e 65  inting at the ne
20e70 78 74 20 72 65 63 6f 72 64 2c 20 74 68 65 6e 0a  xt record, then.
20e80 2a 2a 20 74 68 65 20 6e 65 78 74 20 4e 65 78 74  ** the next Next
20e90 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 77 69 6c   instruction wil
20ea0 6c 20 62 65 20 61 20 6e 6f 2d 6f 70 2e 20 20 48  l be a no-op.  H
20eb0 65 6e 63 65 20 69 74 20 69 73 20 4f 4b 20 74 6f  ence it is OK to
20ec0 20 64 65 6c 65 74 65 0a 2a 2a 20 61 20 72 65 63   delete.** a rec
20ed0 6f 72 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 20  ord from within 
20ee0 61 6e 20 4e 65 78 74 20 6c 6f 6f 70 2e 0a 2a 2a  an Next loop..**
20ef0 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41  .** If the OPFLA
20f00 47 5f 4e 43 48 41 4e 47 45 20 66 6c 61 67 20 6f  G_NCHANGE flag o
20f10 66 20 50 32 20 69 73 20 73 65 74 2c 20 74 68 65  f P2 is set, the
20f20 6e 20 74 68 65 20 72 6f 77 20 63 68 61 6e 67 65  n the row change
20f30 20 63 6f 75 6e 74 20 69 73 0a 2a 2a 20 69 6e 63   count is.** inc
20f40 72 65 6d 65 6e 74 65 64 20 28 6f 74 68 65 72 77  remented (otherw
20f50 69 73 65 20 6e 6f 74 29 2e 0a 2a 2a 0a 2a 2a 20  ise not)..**.** 
20f60 50 31 20 6d 75 73 74 20 6e 6f 74 20 62 65 20 70  P1 must not be p
20f70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 20 20 49 74  seudo-table.  It
20f80 20 68 61 73 20 74 6f 20 62 65 20 61 20 72 65 61   has to be a rea
20f90 6c 20 74 61 62 6c 65 20 77 69 74 68 0a 2a 2a 20  l table with.** 
20fa0 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 2e 0a 2a  multiple rows..*
20fb0 2a 0a 2a 2a 20 49 66 20 50 34 20 69 73 20 6e 6f  *.** If P4 is no
20fc0 74 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 69 74 20  t NULL, then it 
20fd0 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74  is the name of t
20fe0 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 50 31  he table that P1
20ff0 20 69 73 0a 2a 2a 20 70 6f 69 6e 74 69 6e 67 20   is.** pointing 
21000 74 6f 2e 20 20 54 68 65 20 75 70 64 61 74 65 20  to.  The update 
21010 68 6f 6f 6b 20 77 69 6c 6c 20 62 65 20 69 6e 76  hook will be inv
21020 6f 6b 65 64 2c 20 69 66 20 69 74 20 65 78 69 73  oked, if it exis
21030 74 73 2e 0a 2a 2a 20 49 66 20 50 34 20 69 73 20  ts..** If P4 is 
21040 6e 6f 74 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68  not NULL then th
21050 65 20 50 31 20 63 75 72 73 6f 72 20 6d 75 73 74  e P1 cursor must
21060 20 68 61 76 65 20 62 65 65 6e 20 70 6f 73 69 74   have been posit
21070 69 6f 6e 65 64 0a 2a 2a 20 75 73 69 6e 67 20 4f  ioned.** using O
21080 50 5f 4e 6f 74 46 6f 75 6e 64 20 70 72 69 6f 72  P_NotFound prior
21090 20 74 6f 20 69 6e 76 6f 6b 69 6e 67 20 74 68 69   to invoking thi
210a0 73 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a 63 61 73  s opcode..*/.cas
210b0 65 20 4f 50 5f 44 65 6c 65 74 65 3a 20 7b 0a 20  e OP_Delete: {. 
210c0 20 69 36 34 20 69 4b 65 79 3b 0a 20 20 56 64 62   i64 iKey;.  Vdb
210d0 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20  eCursor *pC;..  
210e0 69 4b 65 79 20 3d 20 30 3b 0a 20 20 61 73 73 65  iKey = 0;.  asse
210f0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
21100 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
21110 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
21120 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
21130 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
21140 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
21150 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b  C->pCursor!=0 );
21160 20 20 2f 2a 20 4f 6e 6c 79 20 76 61 6c 69 64 20    /* Only valid 
21170 66 6f 72 20 72 65 61 6c 20 74 61 62 6c 65 73 2c  for real tables,
21180 20 6e 6f 20 70 73 65 75 64 6f 74 61 62 6c 65 73   no pseudotables
21190 20 2a 2f 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65   */..  /* If the
211a0 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20 77 69 6c   update-hook wil
211b0 6c 20 62 65 20 69 6e 76 6f 6b 65 64 2c 20 73 65  l be invoked, se
211c0 74 20 69 4b 65 79 20 74 6f 20 74 68 65 20 72 6f  t iKey to the ro
211d0 77 69 64 20 6f 66 20 74 68 65 0a 20 20 2a 2a 20  wid of the.  ** 
211e0 72 6f 77 20 62 65 69 6e 67 20 64 65 6c 65 74 65  row being delete
211f0 64 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 64 62  d..  */.  if( db
21200 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63  ->xUpdateCallbac
21210 6b 20 26 26 20 70 4f 70 2d 3e 70 34 2e 7a 20 29  k && pOp->p4.z )
21220 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  {.    assert( pC
21230 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 20  ->isTable );.   
21240 20 61 73 73 65 72 74 28 20 70 43 2d 3e 72 6f 77   assert( pC->row
21250 69 64 49 73 56 61 6c 69 64 20 29 3b 20 20 2f 2a  idIsValid );  /*
21260 20 6c 61 73 74 52 6f 77 69 64 20 73 65 74 20 62   lastRowid set b
21270 79 20 70 72 65 76 69 6f 75 73 20 4f 50 5f 4e 6f  y previous OP_No
21280 74 46 6f 75 6e 64 20 2a 2f 0a 20 20 20 20 69 4b  tFound */.    iK
21290 65 79 20 3d 20 70 43 2d 3e 6c 61 73 74 52 6f 77  ey = pC->lastRow
212a0 69 64 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 54 68  id;.  }..  /* Th
212b0 65 20 4f 50 5f 44 65 6c 65 74 65 20 6f 70 63 6f  e OP_Delete opco
212c0 64 65 20 61 6c 77 61 79 73 20 66 6f 6c 6c 6f 77  de always follow
212d0 73 20 61 6e 20 4f 50 5f 4e 6f 74 45 78 69 73 74  s an OP_NotExist
212e0 73 20 6f 72 20 4f 50 5f 4c 61 73 74 20 6f 72 0a  s or OP_Last or.
212f0 20 20 2a 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f    ** OP_Column o
21300 6e 20 74 68 65 20 73 61 6d 65 20 74 61 62 6c 65  n the same table
21310 20 77 69 74 68 6f 75 74 20 61 6e 79 20 69 6e 74   without any int
21320 65 72 76 65 6e 69 6e 67 20 6f 70 65 72 61 74 69  ervening operati
21330 6f 6e 73 20 74 68 61 74 0a 20 20 2a 2a 20 6d 69  ons that.  ** mi
21340 67 68 74 20 6d 6f 76 65 20 6f 72 20 69 6e 76 61  ght move or inva
21350 6c 69 64 61 74 65 20 74 68 65 20 63 75 72 73 6f  lidate the curso
21360 72 2e 20 20 48 65 6e 63 65 20 63 75 72 73 6f 72  r.  Hence cursor
21370 20 70 43 20 69 73 20 61 6c 77 61 79 73 20 70 6f   pC is always po
21380 69 6e 74 69 6e 67 0a 20 20 2a 2a 20 74 6f 20 74  inting.  ** to t
21390 68 65 20 72 6f 77 20 74 6f 20 62 65 20 64 65 6c  he row to be del
213a0 65 74 65 64 20 61 6e 64 20 74 68 65 20 73 71 6c  eted and the sql
213b0 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f  ite3VdbeCursorMo
213c0 76 65 74 6f 28 29 20 6f 70 65 72 61 74 69 6f 6e  veto() operation
213d0 0a 20 20 2a 2a 20 62 65 6c 6f 77 20 69 73 20 61  .  ** below is a
213e0 6c 77 61 79 73 20 61 20 6e 6f 2d 6f 70 20 61 6e  lways a no-op an
213f0 64 20 63 61 6e 6e 6f 74 20 66 61 69 6c 2e 20 20  d cannot fail.  
21400 57 65 20 77 69 6c 6c 20 72 75 6e 20 69 74 20 61  We will run it a
21410 6e 79 68 6f 77 2c 20 74 68 6f 75 67 68 2c 0a 20  nyhow, though,. 
21420 20 2a 2a 20 74 6f 20 67 75 61 72 64 20 61 67 61   ** to guard aga
21430 69 6e 73 74 20 66 75 74 75 72 65 20 63 68 61 6e  inst future chan
21440 67 65 73 20 74 6f 20 74 68 65 20 63 6f 64 65 20  ges to the code 
21450 67 65 6e 65 72 61 74 6f 72 2e 0a 20 20 2a 2a 2f  generator..  **/
21460 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64  .  assert( pC->d
21470 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30  eferredMoveto==0
21480 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   );.  rc = sqlit
21490 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65  e3VdbeCursorMove
214a0 74 6f 28 70 43 29 3b 0a 20 20 69 66 28 20 4e 45  to(pC);.  if( NE
214b0 56 45 52 28 72 63 21 3d 53 51 4c 49 54 45 5f 4f  VER(rc!=SQLITE_O
214c0 4b 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  K) ) goto abort_
214d0 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a 20  due_to_error;.. 
214e0 20 73 71 6c 69 74 65 33 42 74 72 65 65 53 65 74   sqlite3BtreeSet
214f0 43 61 63 68 65 64 52 6f 77 69 64 28 70 43 2d 3e  CachedRowid(pC->
21500 70 43 75 72 73 6f 72 2c 20 30 29 3b 0a 20 20 72  pCursor, 0);.  r
21510 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
21520 44 65 6c 65 74 65 28 70 43 2d 3e 70 43 75 72 73  Delete(pC->pCurs
21530 6f 72 29 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65  or);.  pC->cache
21540 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53  Status = CACHE_S
21550 54 41 4c 45 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f  TALE;..  /* Invo
21560 6b 65 20 74 68 65 20 75 70 64 61 74 65 2d 68 6f  ke the update-ho
21570 6f 6b 20 69 66 20 72 65 71 75 69 72 65 64 2e 20  ok if required. 
21580 2a 2f 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  */.  if( rc==SQL
21590 49 54 45 5f 4f 4b 20 26 26 20 64 62 2d 3e 78 55  ITE_OK && db->xU
215a0 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20 26 26  pdateCallback &&
215b0 20 70 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20   pOp->p4.z ){.  
215c0 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44    const char *zD
215d0 62 20 3d 20 64 62 2d 3e 61 44 62 5b 70 43 2d 3e  b = db->aDb[pC->
215e0 69 44 62 5d 2e 7a 4e 61 6d 65 3b 0a 20 20 20 20  iDb].zName;.    
215f0 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 62 6c  const char *zTbl
21600 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20   = pOp->p4.z;.  
21610 20 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c    db->xUpdateCal
21620 6c 62 61 63 6b 28 64 62 2d 3e 70 55 70 64 61 74  lback(db->pUpdat
21630 65 41 72 67 2c 20 53 51 4c 49 54 45 5f 44 45 4c  eArg, SQLITE_DEL
21640 45 54 45 2c 20 7a 44 62 2c 20 7a 54 62 6c 2c 20  ETE, zDb, zTbl, 
21650 69 4b 65 79 29 3b 0a 20 20 20 20 61 73 73 65 72  iKey);.    asser
21660 74 28 20 70 43 2d 3e 69 44 62 3e 3d 30 20 29 3b  t( pC->iDb>=0 );
21670 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e  .  }.  if( pOp->
21680 70 32 20 26 20 4f 50 46 4c 41 47 5f 4e 43 48 41  p2 & OPFLAG_NCHA
21690 4e 47 45 20 29 20 70 2d 3e 6e 43 68 61 6e 67 65  NGE ) p->nChange
216a0 2b 2b 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 2f  ++;.  break;.}./
216b0 2a 20 4f 70 63 6f 64 65 3a 20 52 65 73 65 74 43  * Opcode: ResetC
216c0 6f 75 6e 74 20 2a 20 2a 20 2a 20 2a 20 2a 0a 2a  ount * * * * *.*
216d0 2a 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65 20 6f  *.** The value o
216e0 66 20 74 68 65 20 63 68 61 6e 67 65 20 63 6f 75  f the change cou
216f0 6e 74 65 72 20 69 73 20 63 6f 70 69 65 64 20 74  nter is copied t
21700 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68  o the database h
21710 61 6e 64 6c 65 0a 2a 2a 20 63 68 61 6e 67 65 20  andle.** change 
21720 63 6f 75 6e 74 65 72 20 28 72 65 74 75 72 6e 65  counter (returne
21730 64 20 62 79 20 73 75 62 73 65 71 75 65 6e 74 20  d by subsequent 
21740 63 61 6c 6c 73 20 74 6f 20 73 71 6c 69 74 65 33  calls to sqlite3
21750 5f 63 68 61 6e 67 65 73 28 29 29 2e 0a 2a 2a 20  _changes())..** 
21760 54 68 65 6e 20 74 68 65 20 56 4d 73 20 69 6e 74  Then the VMs int
21770 65 72 6e 61 6c 20 63 68 61 6e 67 65 20 63 6f 75  ernal change cou
21780 6e 74 65 72 20 72 65 73 65 74 73 20 74 6f 20 30  nter resets to 0
21790 2e 0a 2a 2a 20 54 68 69 73 20 69 73 20 75 73 65  ..** This is use
217a0 64 20 62 79 20 74 72 69 67 67 65 72 20 70 72 6f  d by trigger pro
217b0 67 72 61 6d 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f  grams..*/.case O
217c0 50 5f 52 65 73 65 74 43 6f 75 6e 74 3a 20 7b 0a  P_ResetCount: {.
217d0 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
217e0 43 68 61 6e 67 65 73 28 64 62 2c 20 70 2d 3e 6e  Changes(db, p->n
217f0 43 68 61 6e 67 65 29 3b 0a 20 20 70 2d 3e 6e 43  Change);.  p->nC
21800 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20 62 72 65  hange = 0;.  bre
21810 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
21820 3a 20 53 6f 72 74 65 72 43 6f 6d 70 61 72 65 20  : SorterCompare 
21830 50 31 20 50 32 20 50 33 0a 2a 2a 0a 2a 2a 20 50  P1 P2 P3.**.** P
21840 31 20 69 73 20 61 20 73 6f 72 74 65 72 20 63 75  1 is a sorter cu
21850 72 73 6f 72 2e 20 54 68 69 73 20 69 6e 73 74 72  rsor. This instr
21860 75 63 74 69 6f 6e 20 63 6f 6d 70 61 72 65 73 20  uction compares 
21870 74 68 65 20 72 65 63 6f 72 64 20 62 6c 6f 62 20  the record blob 
21880 69 6e 20 0a 2a 2a 20 72 65 67 69 73 74 65 72 20  in .** register 
21890 50 33 20 77 69 74 68 20 74 68 65 20 65 6e 74 72  P3 with the entr
218a0 79 20 74 68 61 74 20 74 68 65 20 73 6f 72 74 65  y that the sorte
218b0 72 20 63 75 72 73 6f 72 20 63 75 72 72 65 6e 74  r cursor current
218c0 6c 79 20 70 6f 69 6e 74 73 20 74 6f 2e 0a 2a 2a  ly points to..**
218d0 20 49 66 2c 20 65 78 63 6c 75 64 69 6e 67 20 74   If, excluding t
218e0 68 65 20 72 6f 77 69 64 20 66 69 65 6c 64 73 20  he rowid fields 
218f0 61 74 20 74 68 65 20 65 6e 64 2c 20 74 68 65 20  at the end, the 
21900 74 77 6f 20 72 65 63 6f 72 64 73 20 61 72 65 20  two records are 
21910 61 20 6d 61 74 63 68 2c 0a 2a 2a 20 66 61 6c 6c  a match,.** fall
21920 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
21930 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
21940 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 6a 75 6d  . Otherwise, jum
21950 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e  p to instruction
21960 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P2..*/.case OP_
21970 53 6f 72 74 65 72 43 6f 6d 70 61 72 65 3a 20 7b  SorterCompare: {
21980 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
21990 43 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 0a 20  C;.  int res;.. 
219a0 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
219b0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
219c0 74 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 20  t( isSorter(pC) 
219d0 29 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65  );.  pIn3 = &aMe
219e0 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 72 63  m[pOp->p3];.  rc
219f0 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f   = sqlite3VdbeSo
21a00 72 74 65 72 43 6f 6d 70 61 72 65 28 70 43 2c 20  rterCompare(pC, 
21a10 70 49 6e 33 2c 20 26 72 65 73 29 3b 0a 20 20 69  pIn3, &res);.  i
21a20 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20 70 63  f( res ){.    pc
21a30 20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20   = pOp->p2-1;.  
21a40 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 3b 0a 0a 2f  }.  break;.};../
21a50 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 65 72  * Opcode: Sorter
21a60 44 61 74 61 20 50 31 20 50 32 20 2a 20 2a 20 2a  Data P1 P2 * * *
21a70 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74  .**.** Write int
21a80 6f 20 72 65 67 69 73 74 65 72 20 50 32 20 74 68  o register P2 th
21a90 65 20 63 75 72 72 65 6e 74 20 73 6f 72 74 65 72  e current sorter
21aa0 20 64 61 74 61 20 66 6f 72 20 73 6f 72 74 65 72   data for sorter
21ab0 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2f 0a 63   cursor P1..*/.c
21ac0 61 73 65 20 4f 50 5f 53 6f 72 74 65 72 44 61 74  ase OP_SorterDat
21ad0 61 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f  a: {.  VdbeCurso
21ae0 72 20 2a 70 43 3b 0a 23 69 66 6e 64 65 66 20 53  r *pC;.#ifndef S
21af0 51 4c 49 54 45 5f 4f 4d 49 54 5f 4d 45 52 47 45  QLITE_OMIT_MERGE
21b00 5f 53 4f 52 54 0a 20 20 70 4f 75 74 20 3d 20 26  _SORT.  pOut = &
21b10 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
21b20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
21b30 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
21b40 74 28 20 70 43 2d 3e 69 73 53 6f 72 74 65 72 20  t( pC->isSorter 
21b50 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  );.  rc = sqlite
21b60 33 56 64 62 65 53 6f 72 74 65 72 52 6f 77 6b 65  3VdbeSorterRowke
21b70 79 28 70 43 2c 20 70 4f 75 74 29 3b 0a 23 65 6c  y(pC, pOut);.#el
21b80 73 65 0a 20 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  se.  pOp->opcode
21b90 20 3d 20 4f 50 5f 52 6f 77 4b 65 79 3b 0a 20 20   = OP_RowKey;.  
21ba0 70 63 2d 2d 3b 0a 23 65 6e 64 69 66 0a 20 20 62  pc--;.#endif.  b
21bb0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
21bc0 64 65 3a 20 52 6f 77 44 61 74 61 20 50 31 20 50  de: RowData P1 P
21bd0 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72  2 * * *.**.** Wr
21be0 69 74 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65  ite into registe
21bf0 72 20 50 32 20 74 68 65 20 63 6f 6d 70 6c 65 74  r P2 the complet
21c00 65 20 72 6f 77 20 64 61 74 61 20 66 6f 72 20 63  e row data for c
21c10 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 54 68 65  ursor P1..** The
21c20 72 65 20 69 73 20 6e 6f 20 69 6e 74 65 72 70 72  re is no interpr
21c30 65 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 64  etation of the d
21c40 61 74 61 2e 20 20 0a 2a 2a 20 49 74 20 69 73 20  ata.  .** It is 
21c50 6a 75 73 74 20 63 6f 70 69 65 64 20 6f 6e 74 6f  just copied onto
21c60 20 74 68 65 20 50 32 20 72 65 67 69 73 74 65 72   the P2 register
21c70 20 65 78 61 63 74 6c 79 20 61 73 20 0a 2a 2a 20   exactly as .** 
21c80 69 74 20 69 73 20 66 6f 75 6e 64 20 69 6e 20 74  it is found in t
21c90 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
21ca0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50  ..**.** If the P
21cb0 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65  1 cursor must be
21cc0 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 61 20 76   pointing to a v
21cd0 61 6c 69 64 20 72 6f 77 20 28 6e 6f 74 20 61 20  alid row (not a 
21ce0 4e 55 4c 4c 20 72 6f 77 29 0a 2a 2a 20 6f 66 20  NULL row).** of 
21cf0 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f  a real table, no
21d00 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65  t a pseudo-table
21d10 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
21d20 52 6f 77 4b 65 79 20 50 31 20 50 32 20 2a 20 2a  RowKey P1 P2 * *
21d30 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 69   *.**.** Write i
21d40 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 20  nto register P2 
21d50 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 72 6f 77  the complete row
21d60 20 6b 65 79 20 66 6f 72 20 63 75 72 73 6f 72 20   key for cursor 
21d70 50 31 2e 0a 2a 2a 20 54 68 65 72 65 20 69 73 20  P1..** There is 
21d80 6e 6f 20 69 6e 74 65 72 70 72 65 74 61 74 69 6f  no interpretatio
21d90 6e 20 6f 66 20 74 68 65 20 64 61 74 61 2e 20 20  n of the data.  
21da0 0a 2a 2a 20 54 68 65 20 6b 65 79 20 69 73 20 63  .** The key is c
21db0 6f 70 69 65 64 20 6f 6e 74 6f 20 74 68 65 20 50  opied onto the P
21dc0 33 20 72 65 67 69 73 74 65 72 20 65 78 61 63 74  3 register exact
21dd0 6c 79 20 61 73 20 0a 2a 2a 20 69 74 20 69 73 20  ly as .** it is 
21de0 66 6f 75 6e 64 20 69 6e 20 74 68 65 20 64 61 74  found in the dat
21df0 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a  abase file..**.*
21e00 2a 20 49 66 20 74 68 65 20 50 31 20 63 75 72 73  * If the P1 curs
21e10 6f 72 20 6d 75 73 74 20 62 65 20 70 6f 69 6e 74  or must be point
21e20 69 6e 67 20 74 6f 20 61 20 76 61 6c 69 64 20 72  ing to a valid r
21e30 6f 77 20 28 6e 6f 74 20 61 20 4e 55 4c 4c 20 72  ow (not a NULL r
21e40 6f 77 29 0a 2a 2a 20 6f 66 20 61 20 72 65 61 6c  ow).** of a real
21e50 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20 70 73   table, not a ps
21e60 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2f 0a 63  eudo-table..*/.c
21e70 61 73 65 20 4f 50 5f 52 6f 77 4b 65 79 3a 0a 63  ase OP_RowKey:.c
21e80 61 73 65 20 4f 50 5f 52 6f 77 44 61 74 61 3a 20  ase OP_RowData: 
21e90 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  {.  VdbeCursor *
21ea0 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a  pC;.  BtCursor *
21eb0 70 43 72 73 72 3b 0a 20 20 75 33 32 20 6e 3b 0a  pCrsr;.  u32 n;.
21ec0 20 20 69 36 34 20 6e 36 34 3b 0a 0a 20 20 70 4f    i64 n64;..  pO
21ed0 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
21ee0 70 32 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54  p2];.  memAboutT
21ef0 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29  oChange(p, pOut)
21f00 3b 0a 0a 20 20 2f 2a 20 4e 6f 74 65 20 74 68 61  ;..  /* Note tha
21f10 74 20 52 6f 77 4b 65 79 20 61 6e 64 20 52 6f 77  t RowKey and Row
21f20 44 61 74 61 20 61 72 65 20 72 65 61 6c 6c 79 20  Data are really 
21f30 65 78 61 63 74 6c 79 20 74 68 65 20 73 61 6d 65  exactly the same
21f40 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 2a 2f 0a   instruction */.
21f50 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
21f60 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
21f70 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
21f80 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
21f90 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
21fa0 28 20 70 43 2d 3e 69 73 53 6f 72 74 65 72 3d 3d  ( pC->isSorter==
21fb0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
21fc0 43 2d 3e 69 73 54 61 62 6c 65 20 7c 7c 20 70 4f  C->isTable || pO
21fd0 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 52 6f  p->opcode!=OP_Ro
21fe0 77 44 61 74 61 20 29 3b 0a 20 20 61 73 73 65 72  wData );.  asser
21ff0 74 28 20 70 43 2d 3e 69 73 49 6e 64 65 78 20 7c  t( pC->isIndex |
22000 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  | pOp->opcode==O
22010 50 5f 52 6f 77 44 61 74 61 20 29 3b 0a 20 20 61  P_RowData );.  a
22020 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
22030 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 6e 75    assert( pC->nu
22040 6c 6c 52 6f 77 3d 3d 30 20 29 3b 0a 20 20 61 73  llRow==0 );.  as
22050 73 65 72 74 28 20 70 43 2d 3e 70 73 65 75 64 6f  sert( pC->pseudo
22060 54 61 62 6c 65 52 65 67 3d 3d 30 20 29 3b 0a 20  TableReg==0 );. 
22070 20 61 73 73 65 72 74 28 20 21 70 43 2d 3e 69 73   assert( !pC->is
22080 53 6f 72 74 65 72 20 29 3b 0a 20 20 61 73 73 65  Sorter );.  asse
22090 72 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21  rt( pC->pCursor!
220a0 3d 30 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20  =0 );.  pCrsr = 
220b0 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 61  pC->pCursor;.  a
220c0 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 42 74  ssert( sqlite3Bt
220d0 72 65 65 43 75 72 73 6f 72 49 73 56 61 6c 69 64  reeCursorIsValid
220e0 28 70 43 72 73 72 29 20 29 3b 0a 0a 20 20 2f 2a  (pCrsr) );..  /*
220f0 20 54 68 65 20 4f 50 5f 52 6f 77 4b 65 79 20 61   The OP_RowKey a
22100 6e 64 20 4f 50 5f 52 6f 77 44 61 74 61 20 6f 70  nd OP_RowData op
22110 63 6f 64 65 73 20 61 6c 77 61 79 73 20 66 6f 6c  codes always fol
22120 6c 6f 77 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73  low OP_NotExists
22130 20 6f 72 0a 20 20 2a 2a 20 4f 50 5f 52 65 77 69   or.  ** OP_Rewi
22140 6e 64 2f 4f 70 5f 4e 65 78 74 20 77 69 74 68 20  nd/Op_Next with 
22150 6e 6f 20 69 6e 74 65 72 76 65 6e 69 6e 67 20 69  no intervening i
22160 6e 73 74 72 75 63 74 69 6f 6e 73 20 74 68 61 74  nstructions that
22170 20 6d 69 67 68 74 20 69 6e 76 61 6c 69 64 61 74   might invalidat
22180 65 0a 20 20 2a 2a 20 74 68 65 20 63 75 72 73 6f  e.  ** the curso
22190 72 2e 20 20 48 65 6e 63 65 20 74 68 65 20 66 6f  r.  Hence the fo
221a0 6c 6c 6f 77 69 6e 67 20 73 71 6c 69 74 65 33 56  llowing sqlite3V
221b0 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28  dbeCursorMoveto(
221c0 29 20 63 61 6c 6c 20 69 73 20 61 6c 77 61 79 73  ) call is always
221d0 0a 20 20 2a 2a 20 61 20 6e 6f 2d 6f 70 20 61 6e  .  ** a no-op an
221e0 64 20 63 61 6e 20 6e 65 76 65 72 20 66 61 69 6c  d can never fail
221f0 2e 20 20 42 75 74 20 77 65 20 6c 65 61 76 65 20  .  But we leave 
22200 69 74 20 69 6e 20 70 6c 61 63 65 20 61 73 20 61  it in place as a
22210 20 73 61 66 65 74 79 2e 0a 20 20 2a 2f 0a 20 20   safety..  */.  
22220 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65  assert( pC->defe
22230 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b  rredMoveto==0 );
22240 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
22250 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28  dbeCursorMoveto(
22260 70 43 29 3b 0a 20 20 69 66 28 20 4e 45 56 45 52  pC);.  if( NEVER
22270 28 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 29 20  (rc!=SQLITE_OK) 
22280 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
22290 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a 20 20 69 66  _to_error;..  if
222a0 28 20 70 43 2d 3e 69 73 49 6e 64 65 78 20 29 7b  ( pC->isIndex ){
222b0 0a 20 20 20 20 61 73 73 65 72 74 28 20 21 70 43  .    assert( !pC
222c0 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 20  ->isTable );.   
222d0 20 56 56 41 5f 4f 4e 4c 59 28 72 63 20 3d 29 20   VVA_ONLY(rc =) 
222e0 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79 53  sqlite3BtreeKeyS
222f0 69 7a 65 28 70 43 72 73 72 2c 20 26 6e 36 34 29  ize(pCrsr, &n64)
22300 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 72 63  ;.    assert( rc
22310 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 20  ==SQLITE_OK );  
22320 20 20 2f 2a 20 54 72 75 65 20 62 65 63 61 75 73    /* True becaus
22330 65 20 6f 66 20 43 75 72 73 6f 72 4d 6f 76 65 74  e of CursorMovet
22340 6f 28 29 20 63 61 6c 6c 20 61 62 6f 76 65 20 2a  o() call above *
22350 2f 0a 20 20 20 20 69 66 28 20 6e 36 34 3e 64 62  /.    if( n64>db
22360 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f  ->aLimit[SQLITE_
22370 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b  LIMIT_LENGTH] ){
22380 0a 20 20 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f  .      goto too_
22390 62 69 67 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6e  big;.    }.    n
223a0 20 3d 20 28 75 33 32 29 6e 36 34 3b 0a 20 20 7d   = (u32)n64;.  }
223b0 65 6c 73 65 7b 0a 20 20 20 20 56 56 41 5f 4f 4e  else{.    VVA_ON
223c0 4c 59 28 72 63 20 3d 29 20 73 71 6c 69 74 65 33  LY(rc =) sqlite3
223d0 42 74 72 65 65 44 61 74 61 53 69 7a 65 28 70 43  BtreeDataSize(pC
223e0 72 73 72 2c 20 26 6e 29 3b 0a 20 20 20 20 61 73  rsr, &n);.    as
223f0 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45  sert( rc==SQLITE
22400 5f 4f 4b 20 29 3b 20 20 20 20 2f 2a 20 44 61 74  _OK );    /* Dat
22410 61 53 69 7a 65 28 29 20 63 61 6e 6e 6f 74 20 66  aSize() cannot f
22420 61 69 6c 20 2a 2f 0a 20 20 20 20 69 66 28 20 6e  ail */.    if( n
22430 3e 28 75 33 32 29 64 62 2d 3e 61 4c 69 6d 69 74  >(u32)db->aLimit
22440 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45  [SQLITE_LIMIT_LE
22450 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 20 20 67  NGTH] ){.      g
22460 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 20  oto too_big;.   
22470 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 73 71 6c   }.  }.  if( sql
22480 69 74 65 33 56 64 62 65 4d 65 6d 47 72 6f 77 28  ite3VdbeMemGrow(
22490 70 4f 75 74 2c 20 6e 2c 20 30 29 20 29 7b 0a 20  pOut, n, 0) ){. 
224a0 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a     goto no_mem;.
224b0 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20    }.  pOut->n = 
224c0 6e 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46  n;.  MemSetTypeF
224d0 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 42 6c  lag(pOut, MEM_Bl
224e0 6f 62 29 3b 0a 20 20 69 66 28 20 70 43 2d 3e 69  ob);.  if( pC->i
224f0 73 49 6e 64 65 78 20 29 7b 0a 20 20 20 20 72 63  sIndex ){.    rc
22500 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4b   = sqlite3BtreeK
22510 65 79 28 70 43 72 73 72 2c 20 30 2c 20 6e 2c 20  ey(pCrsr, 0, n, 
22520 70 4f 75 74 2d 3e 7a 29 3b 0a 20 20 7d 65 6c 73  pOut->z);.  }els
22530 65 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  e{.    rc = sqli
22540 74 65 33 42 74 72 65 65 44 61 74 61 28 70 43 72  te3BtreeData(pCr
22550 73 72 2c 20 30 2c 20 6e 2c 20 70 4f 75 74 2d 3e  sr, 0, n, pOut->
22560 7a 29 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e  z);.  }.  pOut->
22570 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55 54 46  enc = SQLITE_UTF
22580 38 3b 20 20 2f 2a 20 49 6e 20 63 61 73 65 20 74  8;  /* In case t
22590 68 65 20 62 6c 6f 62 20 69 73 20 65 76 65 72 20  he blob is ever 
225a0 63 61 73 74 20 74 6f 20 74 65 78 74 20 2a 2f 0a  cast to text */.
225b0 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f    UPDATE_MAX_BLO
225c0 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62  BSIZE(pOut);.  b
225d0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
225e0 64 65 3a 20 52 6f 77 69 64 20 50 31 20 50 32 20  de: Rowid P1 P2 
225f0 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 74 6f 72  * * *.**.** Stor
22600 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  e in register P2
22610 20 61 6e 20 69 6e 74 65 67 65 72 20 77 68 69 63   an integer whic
22620 68 20 69 73 20 74 68 65 20 6b 65 79 20 6f 66 20  h is the key of 
22630 74 68 65 20 74 61 62 6c 65 20 65 6e 74 72 79 20  the table entry 
22640 74 68 61 74 0a 2a 2a 20 50 31 20 69 73 20 63 75  that.** P1 is cu
22650 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 20 74 6f  rrently point to
22660 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 63 61 6e 20 62  ..**.** P1 can b
22670 65 20 65 69 74 68 65 72 20 61 6e 20 6f 72 64 69  e either an ordi
22680 6e 61 72 79 20 74 61 62 6c 65 20 6f 72 20 61 20  nary table or a 
22690 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 20 20  virtual table.  
226a0 54 68 65 72 65 20 75 73 65 64 20 74 6f 0a 2a 2a  There used to.**
226b0 20 62 65 20 61 20 73 65 70 61 72 61 74 65 20 4f   be a separate O
226c0 50 5f 56 52 6f 77 69 64 20 6f 70 63 6f 64 65 20  P_VRowid opcode 
226d0 66 6f 72 20 75 73 65 20 77 69 74 68 20 76 69 72  for use with vir
226e0 74 75 61 6c 20 74 61 62 6c 65 73 2c 20 62 75 74  tual tables, but
226f0 20 74 68 69 73 0a 2a 2a 20 6f 6e 65 20 6f 70 63   this.** one opc
22700 6f 64 65 20 6e 6f 77 20 77 6f 72 6b 73 20 66 6f  ode now works fo
22710 72 20 62 6f 74 68 20 74 61 62 6c 65 20 74 79 70  r both table typ
22720 65 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  es..*/.case OP_R
22730 6f 77 69 64 3a 20 7b 20 20 20 20 20 20 20 20 20  owid: {         
22740 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d          /* out2-
22750 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20  prerelease */.  
22760 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
22770 20 20 69 36 34 20 76 3b 0a 20 20 73 71 6c 69 74    i64 v;.  sqlit
22780 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a  e3_vtab *pVtab;.
22790 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f    const sqlite3_
227a0 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b  module *pModule;
227b0 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
227c0 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
227d0 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
227e0 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
227f0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
22800 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61  rt( pC!=0 );.  a
22810 73 73 65 72 74 28 20 70 43 2d 3e 70 73 65 75 64  ssert( pC->pseud
22820 6f 54 61 62 6c 65 52 65 67 3d 3d 30 20 29 3b 0a  oTableReg==0 );.
22830 20 20 69 66 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f    if( pC->nullRo
22840 77 20 29 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 66  w ){.    pOut->f
22850 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b  lags = MEM_Null;
22860 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 65  .    break;.  }e
22870 6c 73 65 20 69 66 28 20 70 43 2d 3e 64 65 66 65  lse if( pC->defe
22880 72 72 65 64 4d 6f 76 65 74 6f 20 29 7b 0a 20 20  rredMoveto ){.  
22890 20 20 76 20 3d 20 70 43 2d 3e 6d 6f 76 65 74 6f    v = pC->moveto
228a0 54 61 72 67 65 74 3b 0a 23 69 66 6e 64 65 66 20  Target;.#ifndef 
228b0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
228c0 55 41 4c 54 41 42 4c 45 0a 20 20 7d 65 6c 73 65  UALTABLE.  }else
228d0 20 69 66 28 20 70 43 2d 3e 70 56 74 61 62 43 75   if( pC->pVtabCu
228e0 72 73 6f 72 20 29 7b 0a 20 20 20 20 70 56 74 61  rsor ){.    pVta
228f0 62 20 3d 20 70 43 2d 3e 70 56 74 61 62 43 75 72  b = pC->pVtabCur
22900 73 6f 72 2d 3e 70 56 74 61 62 3b 0a 20 20 20 20  sor->pVtab;.    
22910 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d  pModule = pVtab-
22920 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 20 20 61 73  >pModule;.    as
22930 73 65 72 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78  sert( pModule->x
22940 52 6f 77 69 64 20 29 3b 0a 20 20 20 20 72 63 20  Rowid );.    rc 
22950 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 52 6f 77 69  = pModule->xRowi
22960 64 28 70 43 2d 3e 70 56 74 61 62 43 75 72 73 6f  d(pC->pVtabCurso
22970 72 2c 20 26 76 29 3b 0a 20 20 20 20 69 6d 70 6f  r, &v);.    impo
22980 72 74 56 74 61 62 45 72 72 4d 73 67 28 70 2c 20  rtVtabErrMsg(p, 
22990 70 56 74 61 62 29 3b 0a 23 65 6e 64 69 66 20 2f  pVtab);.#endif /
229a0 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  * SQLITE_OMIT_VI
229b0 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 20 20  RTUALTABLE */.  
229c0 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72  }else{.    asser
229d0 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d  t( pC->pCursor!=
229e0 30 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71  0 );.    rc = sq
229f0 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d  lite3VdbeCursorM
22a00 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20 20 20 69  oveto(pC);.    i
22a10 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f  f( rc ) goto abo
22a20 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
22a30 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 72 6f 77  .    if( pC->row
22a40 69 64 49 73 56 61 6c 69 64 20 29 7b 0a 20 20 20  idIsValid ){.   
22a50 20 20 20 76 20 3d 20 70 43 2d 3e 6c 61 73 74 52     v = pC->lastR
22a60 6f 77 69 64 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  owid;.    }else{
22a70 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69  .      rc = sqli
22a80 74 65 33 42 74 72 65 65 4b 65 79 53 69 7a 65 28  te3BtreeKeySize(
22a90 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 76 29  pC->pCursor, &v)
22aa0 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
22ab0 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b  rc==SQLITE_OK );
22ac0 20 20 2f 2a 20 41 6c 77 61 79 73 20 73 6f 20 62    /* Always so b
22ad0 65 63 61 75 73 65 20 6f 66 20 43 75 72 73 6f 72  ecause of Cursor
22ae0 4d 6f 76 65 74 6f 28 29 20 61 62 6f 76 65 20 2a  Moveto() above *
22af0 2f 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 70 4f  /.    }.  }.  pO
22b00 75 74 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20 20 62  ut->u.i = v;.  b
22b10 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
22b20 64 65 3a 20 4e 75 6c 6c 52 6f 77 20 50 31 20 2a  de: NullRow P1 *
22b30 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4d 6f 76   * * *.**.** Mov
22b40 65 20 74 68 65 20 63 75 72 73 6f 72 20 50 31 20  e the cursor P1 
22b50 74 6f 20 61 20 6e 75 6c 6c 20 72 6f 77 2e 20 20  to a null row.  
22b60 41 6e 79 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70  Any OP_Column op
22b70 65 72 61 74 69 6f 6e 73 0a 2a 2a 20 74 68 61 74  erations.** that
22b80 20 6f 63 63 75 72 20 77 68 69 6c 65 20 74 68 65   occur while the
22b90 20 63 75 72 73 6f 72 20 69 73 20 6f 6e 20 74 68   cursor is on th
22ba0 65 20 6e 75 6c 6c 20 72 6f 77 20 77 69 6c 6c 20  e null row will 
22bb0 61 6c 77 61 79 73 0a 2a 2a 20 77 72 69 74 65 20  always.** write 
22bc0 61 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20  a NULL..*/.case 
22bd0 4f 50 5f 4e 75 6c 6c 52 6f 77 3a 20 7b 0a 20 20  OP_NullRow: {.  
22be0 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
22bf0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
22c00 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
22c10 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
22c20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
22c30 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
22c40 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 70 43  t( pC!=0 );.  pC
22c50 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20  ->nullRow = 1;. 
22c60 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69   pC->rowidIsVali
22c70 64 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28  d = 0;.  assert(
22c80 20 70 43 2d 3e 70 43 75 72 73 6f 72 20 7c 7c 20   pC->pCursor || 
22c90 70 43 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 20  pC->pVtabCursor 
22ca0 29 3b 0a 20 20 69 66 28 20 70 43 2d 3e 70 43 75  );.  if( pC->pCu
22cb0 72 73 6f 72 20 29 7b 0a 20 20 20 20 73 71 6c 69  rsor ){.    sqli
22cc0 74 65 33 42 74 72 65 65 43 6c 65 61 72 43 75 72  te3BtreeClearCur
22cd0 73 6f 72 28 70 43 2d 3e 70 43 75 72 73 6f 72 29  sor(pC->pCursor)
22ce0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
22cf0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 61 73  ../* Opcode: Las
22d00 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  t P1 P2 * * *.**
22d10 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 75 73 65  .** The next use
22d20 20 6f 66 20 74 68 65 20 52 6f 77 69 64 20 6f 72   of the Rowid or
22d30 20 43 6f 6c 75 6d 6e 20 6f 72 20 4e 65 78 74 20   Column or Next 
22d40 69 6e 73 74 72 75 63 74 69 6f 6e 20 66 6f 72 20  instruction for 
22d50 50 31 20 0a 2a 2a 20 77 69 6c 6c 20 72 65 66 65  P1 .** will refe
22d60 72 20 74 6f 20 74 68 65 20 6c 61 73 74 20 65 6e  r to the last en
22d70 74 72 79 20 69 6e 20 74 68 65 20 64 61 74 61 62  try in the datab
22d80 61 73 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  ase table or ind
22d90 65 78 2e 0a 2a 2a 20 49 66 20 74 68 65 20 74 61  ex..** If the ta
22da0 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20  ble or index is 
22db0 65 6d 70 74 79 20 61 6e 64 20 50 32 3e 30 2c 20  empty and P2>0, 
22dc0 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65 64 69  then jump immedi
22dd0 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 20  ately to P2..** 
22de0 49 66 20 50 32 20 69 73 20 30 20 6f 72 20 69 66  If P2 is 0 or if
22df0 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e   the table or in
22e00 64 65 78 20 69 73 20 6e 6f 74 20 65 6d 70 74 79  dex is not empty
22e10 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a  , fall through.*
22e20 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69  * to the followi
22e30 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  ng instruction..
22e40 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 61 73 74 3a  */.case OP_Last:
22e50 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d   {        /* jum
22e60 70 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f  p */.  VdbeCurso
22e70 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f  r *pC;.  BtCurso
22e80 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20  r *pCrsr;.  int 
22e90 72 65 73 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  res;..  assert( 
22ea0 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
22eb0 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
22ec0 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
22ed0 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
22ee0 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
22ef0 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70  .  pCrsr = pC->p
22f00 43 75 72 73 6f 72 3b 0a 20 20 69 66 28 20 4e 45  Cursor;.  if( NE
22f10 56 45 52 28 70 43 72 73 72 3d 3d 30 29 20 29 7b  VER(pCrsr==0) ){
22f20 0a 20 20 20 20 72 65 73 20 3d 20 31 3b 0a 20 20  .    res = 1;.  
22f30 7d 65 6c 73 65 7b 0a 20 20 20 20 72 63 20 3d 20  }else{.    rc = 
22f40 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74  sqlite3BtreeLast
22f50 28 70 43 72 73 72 2c 20 26 72 65 73 29 3b 0a 20  (pCrsr, &res);. 
22f60 20 7d 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77   }.  pC->nullRow
22f70 20 3d 20 28 75 38 29 72 65 73 3b 0a 20 20 70 43   = (u8)res;.  pC
22f80 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
22f90 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 72 6f 77 69   = 0;.  pC->rowi
22fa0 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20  dIsValid = 0;.  
22fb0 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20  pC->cacheStatus 
22fc0 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20  = CACHE_STALE;. 
22fd0 20 69 66 28 20 70 4f 70 2d 3e 70 32 3e 30 20 26   if( pOp->p2>0 &
22fe0 26 20 72 65 73 20 29 7b 0a 20 20 20 20 70 63 20  & res ){.    pc 
22ff0 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
23000 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a   }.  break;.}...
23010 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 20  /* Opcode: Sort 
23020 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
23030 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 64 6f  * This opcode do
23040 65 73 20 65 78 61 63 74 6c 79 20 74 68 65 20 73  es exactly the s
23050 61 6d 65 20 74 68 69 6e 67 20 61 73 20 4f 50 5f  ame thing as OP_
23060 52 65 77 69 6e 64 20 65 78 63 65 70 74 20 74 68  Rewind except th
23070 61 74 0a 2a 2a 20 69 74 20 69 6e 63 72 65 6d 65  at.** it increme
23080 6e 74 73 20 61 6e 20 75 6e 64 6f 63 75 6d 65 6e  nts an undocumen
23090 74 65 64 20 67 6c 6f 62 61 6c 20 76 61 72 69 61  ted global varia
230a0 62 6c 65 20 75 73 65 64 20 66 6f 72 20 74 65 73  ble used for tes
230b0 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 53 6f 72 74  ting..**.** Sort
230c0 69 6e 67 20 69 73 20 61 63 63 6f 6d 70 6c 69 73  ing is accomplis
230d0 68 65 64 20 62 79 20 77 72 69 74 69 6e 67 20 72  hed by writing r
230e0 65 63 6f 72 64 73 20 69 6e 74 6f 20 61 20 73 6f  ecords into a so
230f0 72 74 69 6e 67 20 69 6e 64 65 78 2c 0a 2a 2a 20  rting index,.** 
23100 74 68 65 6e 20 72 65 77 69 6e 64 69 6e 67 20 74  then rewinding t
23110 68 61 74 20 69 6e 64 65 78 20 61 6e 64 20 70 6c  hat index and pl
23120 61 79 69 6e 67 20 69 74 20 62 61 63 6b 20 66 72  aying it back fr
23130 6f 6d 20 62 65 67 69 6e 6e 69 6e 67 20 74 6f 0a  om beginning to.
23140 2a 2a 20 65 6e 64 2e 20 20 57 65 20 75 73 65 20  ** end.  We use 
23150 74 68 65 20 4f 50 5f 53 6f 72 74 20 6f 70 63 6f  the OP_Sort opco
23160 64 65 20 69 6e 73 74 65 61 64 20 6f 66 20 4f 50  de instead of OP
23170 5f 52 65 77 69 6e 64 20 74 6f 20 64 6f 20 74 68  _Rewind to do th
23180 65 0a 2a 2a 20 72 65 77 69 6e 64 69 6e 67 20 73  e.** rewinding s
23190 6f 20 74 68 61 74 20 74 68 65 20 67 6c 6f 62 61  o that the globa
231a0 6c 20 76 61 72 69 61 62 6c 65 20 77 69 6c 6c 20  l variable will 
231b0 62 65 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 61  be incremented a
231c0 6e 64 0a 2a 2a 20 72 65 67 72 65 73 73 69 6f 6e  nd.** regression
231d0 20 74 65 73 74 73 20 63 61 6e 20 64 65 74 65 72   tests can deter
231e0 6d 69 6e 65 20 77 68 65 74 68 65 72 20 6f 72 20  mine whether or 
231f0 6e 6f 74 20 74 68 65 20 6f 70 74 69 6d 69 7a 65  not the optimize
23200 72 20 69 73 0a 2a 2a 20 63 6f 72 72 65 63 74 6c  r is.** correctl
23210 79 20 6f 70 74 69 6d 69 7a 69 6e 67 20 6f 75 74  y optimizing out
23220 20 73 6f 72 74 73 2e 0a 2a 2f 0a 63 61 73 65 20   sorts..*/.case 
23230 4f 50 5f 53 6f 72 74 65 72 53 6f 72 74 3a 20 20  OP_SorterSort:  
23240 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 23 69 66    /* jump */.#if
23250 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
23260 4d 45 52 47 45 5f 53 4f 52 54 0a 20 20 70 4f 70  MERGE_SORT.  pOp
23270 2d 3e 6f 70 63 6f 64 65 20 3d 20 4f 50 5f 53 6f  ->opcode = OP_So
23280 72 74 3b 0a 23 65 6e 64 69 66 0a 63 61 73 65 20  rt;.#endif.case 
23290 4f 50 5f 53 6f 72 74 3a 20 7b 20 20 20 20 20 20  OP_Sort: {      
232a0 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 23 69 66    /* jump */.#if
232b0 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a  def SQLITE_TEST.
232c0 20 20 73 71 6c 69 74 65 33 5f 73 6f 72 74 5f 63    sqlite3_sort_c
232d0 6f 75 6e 74 2b 2b 3b 0a 20 20 73 71 6c 69 74 65  ount++;.  sqlite
232e0 33 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74 2d 2d  3_search_count--
232f0 3b 0a 23 65 6e 64 69 66 0a 20 20 70 2d 3e 61 43  ;.#endif.  p->aC
23300 6f 75 6e 74 65 72 5b 53 51 4c 49 54 45 5f 53 54  ounter[SQLITE_ST
23310 4d 54 53 54 41 54 55 53 5f 53 4f 52 54 2d 31 5d  MTSTATUS_SORT-1]
23320 2b 2b 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68  ++;.  /* Fall th
23330 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f 52 65  rough into OP_Re
23340 77 69 6e 64 20 2a 2f 0a 7d 0a 2f 2a 20 4f 70 63  wind */.}./* Opc
23350 6f 64 65 3a 20 52 65 77 69 6e 64 20 50 31 20 50  ode: Rewind P1 P
23360 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68  2 * * *.**.** Th
23370 65 20 6e 65 78 74 20 75 73 65 20 6f 66 20 74 68  e next use of th
23380 65 20 52 6f 77 69 64 20 6f 72 20 43 6f 6c 75 6d  e Rowid or Colum
23390 6e 20 6f 72 20 4e 65 78 74 20 69 6e 73 74 72 75  n or Next instru
233a0 63 74 69 6f 6e 20 66 6f 72 20 50 31 20 0a 2a 2a  ction for P1 .**
233b0 20 77 69 6c 6c 20 72 65 66 65 72 20 74 6f 20 74   will refer to t
233c0 68 65 20 66 69 72 73 74 20 65 6e 74 72 79 20 69  he first entry i
233d0 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74  n the database t
233e0 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 0a 2a  able or index..*
233f0 2a 20 49 66 20 74 68 65 20 74 61 62 6c 65 20 6f  * If the table o
23400 72 20 69 6e 64 65 78 20 69 73 20 65 6d 70 74 79  r index is empty
23410 20 61 6e 64 20 50 32 3e 30 2c 20 74 68 65 6e 20   and P2>0, then 
23420 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79  jump immediately
23430 20 74 6f 20 50 32 2e 0a 2a 2a 20 49 66 20 50 32   to P2..** If P2
23440 20 69 73 20 30 20 6f 72 20 69 66 20 74 68 65 20   is 0 or if the 
23450 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 69  table or index i
23460 73 20 6e 6f 74 20 65 6d 70 74 79 2c 20 66 61 6c  s not empty, fal
23470 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20  l through.** to 
23480 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e  the following in
23490 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61  struction..*/.ca
234a0 73 65 20 4f 50 5f 52 65 77 69 6e 64 3a 20 7b 20  se OP_Rewind: { 
234b0 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
234c0 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  /.  VdbeCursor *
234d0 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a  pC;.  BtCursor *
234e0 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73  pCrsr;.  int res
234f0 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
23500 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
23510 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
23520 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
23530 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
23540 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
23550 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 53 6f  assert( pC->isSo
23560 72 74 65 72 3d 3d 28 70 4f 70 2d 3e 6f 70 63 6f  rter==(pOp->opco
23570 64 65 3d 3d 4f 50 5f 53 6f 72 74 65 72 53 6f 72  de==OP_SorterSor
23580 74 29 20 29 3b 0a 20 20 72 65 73 20 3d 20 31 3b  t) );.  res = 1;
23590 0a 20 20 69 66 28 20 69 73 53 6f 72 74 65 72 28  .  if( isSorter(
235a0 70 43 29 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  pC) ){.    rc = 
235b0 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65  sqlite3VdbeSorte
235c0 72 52 65 77 69 6e 64 28 64 62 2c 20 70 43 2c 20  rRewind(db, pC, 
235d0 26 72 65 73 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  &res);.  }else{.
235e0 20 20 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e      pCrsr = pC->
235f0 70 43 75 72 73 6f 72 3b 0a 20 20 20 20 61 73 73  pCursor;.    ass
23600 65 72 74 28 20 70 43 72 73 72 20 29 3b 0a 20 20  ert( pCrsr );.  
23610 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
23620 72 65 65 46 69 72 73 74 28 70 43 72 73 72 2c 20  reeFirst(pCrsr, 
23630 26 72 65 73 29 3b 0a 20 20 20 20 70 43 2d 3e 61  &res);.    pC->a
23640 74 46 69 72 73 74 20 3d 20 72 65 73 3d 3d 30 20  tFirst = res==0 
23650 3f 31 3a 30 3b 0a 20 20 20 20 70 43 2d 3e 64 65  ?1:0;.    pC->de
23660 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30  ferredMoveto = 0
23670 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53  ;.    pC->cacheS
23680 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
23690 41 4c 45 3b 0a 20 20 20 20 70 43 2d 3e 72 6f 77  ALE;.    pC->row
236a0 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20  idIsValid = 0;. 
236b0 20 7d 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77   }.  pC->nullRow
236c0 20 3d 20 28 75 38 29 72 65 73 3b 0a 20 20 61 73   = (u8)res;.  as
236d0 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20  sert( pOp->p2>0 
236e0 26 26 20 70 4f 70 2d 3e 70 32 3c 70 2d 3e 6e 4f  && pOp->p2<p->nO
236f0 70 20 29 3b 0a 20 20 69 66 28 20 72 65 73 20 29  p );.  if( res )
23700 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e  {.    pc = pOp->
23710 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72  p2 - 1;.  }.  br
23720 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
23730 65 3a 20 4e 65 78 74 20 50 31 20 50 32 20 2a 20  e: Next P1 P2 * 
23740 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 41 64 76 61  P4 P5.**.** Adva
23750 6e 63 65 20 63 75 72 73 6f 72 20 50 31 20 73 6f  nce cursor P1 so
23760 20 74 68 61 74 20 69 74 20 70 6f 69 6e 74 73 20   that it points 
23770 74 6f 20 74 68 65 20 6e 65 78 74 20 6b 65 79 2f  to the next key/
23780 64 61 74 61 20 70 61 69 72 20 69 6e 20 69 74 73  data pair in its
23790 0a 2a 2a 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  .** table or ind
237a0 65 78 2e 20 20 49 66 20 74 68 65 72 65 20 61 72  ex.  If there ar
237b0 65 20 6e 6f 20 6d 6f 72 65 20 6b 65 79 2f 76 61  e no more key/va
237c0 6c 75 65 20 70 61 69 72 73 20 74 68 65 6e 20 66  lue pairs then f
237d0 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74  all through.** t
237e0 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  o the following 
237f0 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 42 75  instruction.  Bu
23800 74 20 69 66 20 74 68 65 20 63 75 72 73 6f 72 20  t if the cursor 
23810 61 64 76 61 6e 63 65 20 77 61 73 20 73 75 63 63  advance was succ
23820 65 73 73 66 75 6c 2c 0a 2a 2a 20 6a 75 6d 70 20  essful,.** jump 
23830 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50  immediately to P
23840 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 31 20  2..**.** The P1 
23850 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20 66  cursor must be f
23860 6f 72 20 61 20 72 65 61 6c 20 74 61 62 6c 65 2c  or a real table,
23870 20 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d 74 61   not a pseudo-ta
23880 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73  ble..**.** P4 is
23890 20 61 6c 77 61 79 73 20 6f 66 20 74 79 70 65 20   always of type 
238a0 50 34 5f 41 44 56 41 4e 43 45 2e 20 54 68 65 20  P4_ADVANCE. The 
238b0 66 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72  function pointer
238c0 20 70 6f 69 6e 74 73 20 74 6f 0a 2a 2a 20 73 71   points to.** sq
238d0 6c 69 74 65 33 42 74 72 65 65 4e 65 78 74 28 29  lite3BtreeNext()
238e0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73  ..**.** If P5 is
238f0 20 70 6f 73 69 74 69 76 65 20 61 6e 64 20 74 68   positive and th
23900 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 2c  e jump is taken,
23910 20 74 68 65 6e 20 65 76 65 6e 74 20 63 6f 75 6e   then event coun
23920 74 65 72 0a 2a 2a 20 6e 75 6d 62 65 72 20 50 35  ter.** number P5
23930 2d 31 20 69 6e 20 74 68 65 20 70 72 65 70 61 72  -1 in the prepar
23940 65 64 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  ed statement is 
23950 69 6e 63 72 65 6d 65 6e 74 65 64 2e 0a 2a 2a 0a  incremented..**.
23960 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 50 72 65  ** See also: Pre
23970 76 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  v.*/./* Opcode: 
23980 50 72 65 76 20 50 31 20 50 32 20 2a 20 2a 20 50  Prev P1 P2 * * P
23990 35 0a 2a 2a 0a 2a 2a 20 42 61 63 6b 20 75 70 20  5.**.** Back up 
239a0 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61  cursor P1 so tha
239b0 74 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74  t it points to t
239c0 68 65 20 70 72 65 76 69 6f 75 73 20 6b 65 79 2f  he previous key/
239d0 64 61 74 61 20 70 61 69 72 20 69 6e 20 69 74 73  data pair in its
239e0 0a 2a 2a 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  .** table or ind
239f0 65 78 2e 20 20 49 66 20 74 68 65 72 65 20 69 73  ex.  If there is
23a00 20 6e 6f 20 70 72 65 76 69 6f 75 73 20 6b 65 79   no previous key
23a10 2f 76 61 6c 75 65 20 70 61 69 72 73 20 74 68 65  /value pairs the
23a20 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a  n fall through.*
23a30 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69  * to the followi
23a40 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20  ng instruction. 
23a50 20 42 75 74 20 69 66 20 74 68 65 20 63 75 72 73   But if the curs
23a60 6f 72 20 62 61 63 6b 75 70 20 77 61 73 20 73 75  or backup was su
23a70 63 63 65 73 73 66 75 6c 2c 0a 2a 2a 20 6a 75 6d  ccessful,.** jum
23a80 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f  p immediately to
23a90 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50   P2..**.** The P
23aa0 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65  1 cursor must be
23ab0 20 66 6f 72 20 61 20 72 65 61 6c 20 74 61 62 6c   for a real tabl
23ac0 65 2c 20 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d  e, not a pseudo-
23ad0 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 50 34 20  table..**.** P4 
23ae0 69 73 20 61 6c 77 61 79 73 20 6f 66 20 74 79 70  is always of typ
23af0 65 20 50 34 5f 41 44 56 41 4e 43 45 2e 20 54 68  e P4_ADVANCE. Th
23b00 65 20 66 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74  e function point
23b10 65 72 20 70 6f 69 6e 74 73 20 74 6f 0a 2a 2a 20  er points to.** 
23b20 73 71 6c 69 74 65 33 42 74 72 65 65 50 72 65 76  sqlite3BtreePrev
23b30 69 6f 75 73 28 29 2e 0a 2a 2a 0a 2a 2a 20 49 66  ious()..**.** If
23b40 20 50 35 20 69 73 20 70 6f 73 69 74 69 76 65 20   P5 is positive 
23b50 61 6e 64 20 74 68 65 20 6a 75 6d 70 20 69 73 20  and the jump is 
23b60 74 61 6b 65 6e 2c 20 74 68 65 6e 20 65 76 65 6e  taken, then even
23b70 74 20 63 6f 75 6e 74 65 72 0a 2a 2a 20 6e 75 6d  t counter.** num
23b80 62 65 72 20 50 35 2d 31 20 69 6e 20 74 68 65 20  ber P5-1 in the 
23b90 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65  prepared stateme
23ba0 6e 74 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65  nt is incremente
23bb0 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f  d..*/.case OP_So
23bc0 72 74 65 72 4e 65 78 74 3a 20 20 20 20 2f 2a 20  rterNext:    /* 
23bd0 6a 75 6d 70 20 2a 2f 0a 23 69 66 64 65 66 20 53  jump */.#ifdef S
23be0 51 4c 49 54 45 5f 4f 4d 49 54 5f 4d 45 52 47 45  QLITE_OMIT_MERGE
23bf0 5f 53 4f 52 54 0a 20 20 70 4f 70 2d 3e 6f 70 63  _SORT.  pOp->opc
23c00 6f 64 65 20 3d 20 4f 50 5f 4e 65 78 74 3b 0a 23  ode = OP_Next;.#
23c10 65 6e 64 69 66 0a 63 61 73 65 20 4f 50 5f 50 72  endif.case OP_Pr
23c20 65 76 3a 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ev:          /* 
23c30 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  jump */.case OP_
23c40 4e 65 78 74 3a 20 7b 20 20 20 20 20 20 20 20 2f  Next: {        /
23c50 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65  * jump */.  Vdbe
23c60 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e  Cursor *pC;.  in
23c70 74 20 72 65 73 3b 0a 0a 20 20 43 48 45 43 4b 5f  t res;..  CHECK_
23c80 46 4f 52 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20  FOR_INTERRUPT;. 
23c90 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
23ca0 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
23cb0 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61  ->nCursor );.  a
23cc0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3c 3d  ssert( pOp->p5<=
23cd0 41 72 72 61 79 53 69 7a 65 28 70 2d 3e 61 43 6f  ArraySize(p->aCo
23ce0 75 6e 74 65 72 29 20 29 3b 0a 20 20 70 43 20 3d  unter) );.  pC =
23cf0 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
23d00 31 5d 3b 0a 20 20 69 66 28 20 70 43 3d 3d 30 20  1];.  if( pC==0 
23d10 29 7b 0a 20 20 20 20 62 72 65 61 6b 3b 20 20 2f  ){.    break;  /
23d20 2a 20 53 65 65 20 74 69 63 6b 65 74 20 23 32 32  * See ticket #22
23d30 37 33 20 2a 2f 0a 20 20 7d 0a 20 20 61 73 73 65  73 */.  }.  asse
23d40 72 74 28 20 70 43 2d 3e 69 73 53 6f 72 74 65 72  rt( pC->isSorter
23d50 3d 3d 28 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  ==(pOp->opcode==
23d60 4f 50 5f 53 6f 72 74 65 72 4e 65 78 74 29 20 29  OP_SorterNext) )
23d70 3b 0a 20 20 69 66 28 20 69 73 53 6f 72 74 65 72  ;.  if( isSorter
23d80 28 70 43 29 20 29 7b 0a 20 20 20 20 61 73 73 65  (pC) ){.    asse
23d90 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  rt( pOp->opcode=
23da0 3d 4f 50 5f 53 6f 72 74 65 72 4e 65 78 74 20 29  =OP_SorterNext )
23db0 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  ;.    rc = sqlit
23dc0 65 33 56 64 62 65 53 6f 72 74 65 72 4e 65 78 74  e3VdbeSorterNext
23dd0 28 64 62 2c 20 70 43 2c 20 26 72 65 73 29 3b 0a  (db, pC, &res);.
23de0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72 65 73    }else{.    res
23df0 20 3d 20 31 3b 0a 20 20 20 20 61 73 73 65 72 74   = 1;.    assert
23e00 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f  ( pC->deferredMo
23e10 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 20 20 61  veto==0 );.    a
23e20 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75 72 73  ssert( pC->pCurs
23e30 6f 72 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  or );.    assert
23e40 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f  ( pOp->opcode!=O
23e50 50 5f 4e 65 78 74 20 7c 7c 20 70 4f 70 2d 3e 70  P_Next || pOp->p
23e60 34 2e 78 41 64 76 61 6e 63 65 3d 3d 73 71 6c 69  4.xAdvance==sqli
23e70 74 65 33 42 74 72 65 65 4e 65 78 74 20 29 3b 0a  te3BtreeNext );.
23e80 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
23e90 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 50 72 65 76  >opcode!=OP_Prev
23ea0 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76   || pOp->p4.xAdv
23eb0 61 6e 63 65 3d 3d 73 71 6c 69 74 65 33 42 74 72  ance==sqlite3Btr
23ec0 65 65 50 72 65 76 69 6f 75 73 20 29 3b 0a 20 20  eePrevious );.  
23ed0 20 20 72 63 20 3d 20 70 4f 70 2d 3e 70 34 2e 78    rc = pOp->p4.x
23ee0 41 64 76 61 6e 63 65 28 70 43 2d 3e 70 43 75 72  Advance(pC->pCur
23ef0 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20 7d 0a  sor, &res);.  }.
23f00 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20    pC->nullRow = 
23f10 28 75 38 29 72 65 73 3b 0a 20 20 70 43 2d 3e 63  (u8)res;.  pC->c
23f20 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
23f30 48 45 5f 53 54 41 4c 45 3b 0a 20 20 69 66 28 20  HE_STALE;.  if( 
23f40 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 70 63  res==0 ){.    pc
23f50 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
23f60 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20      if( pOp->p5 
23f70 29 20 70 2d 3e 61 43 6f 75 6e 74 65 72 5b 70 4f  ) p->aCounter[pO
23f80 70 2d 3e 70 35 2d 31 5d 2b 2b 3b 0a 23 69 66 64  p->p5-1]++;.#ifd
23f90 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20  ef SQLITE_TEST. 
23fa0 20 20 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63     sqlite3_searc
23fb0 68 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69  h_count++;.#endi
23fc0 66 0a 20 20 7d 0a 20 20 70 43 2d 3e 72 6f 77 69  f.  }.  pC->rowi
23fd0 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20  dIsValid = 0;.  
23fe0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
23ff0 6f 64 65 3a 20 49 64 78 49 6e 73 65 72 74 20 50  ode: IdxInsert P
24000 31 20 50 32 20 50 33 20 2a 20 50 35 0a 2a 2a 0a  1 P2 P3 * P5.**.
24010 2a 2a 20 52 65 67 69 73 74 65 72 20 50 32 20 68  ** Register P2 h
24020 6f 6c 64 73 20 61 6e 20 53 51 4c 20 69 6e 64 65  olds an SQL inde
24030 78 20 6b 65 79 20 6d 61 64 65 20 75 73 69 6e 67  x key made using
24040 20 74 68 65 0a 2a 2a 20 4d 61 6b 65 52 65 63 6f   the.** MakeReco
24050 72 64 20 69 6e 73 74 72 75 63 74 69 6f 6e 73 2e  rd instructions.
24060 20 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77 72    This opcode wr
24070 69 74 65 73 20 74 68 61 74 20 6b 65 79 0a 2a 2a  ites that key.**
24080 20 69 6e 74 6f 20 74 68 65 20 69 6e 64 65 78 20   into the index 
24090 50 31 2e 20 20 44 61 74 61 20 66 6f 72 20 74 68  P1.  Data for th
240a0 65 20 65 6e 74 72 79 20 69 73 20 6e 69 6c 2e 0a  e entry is nil..
240b0 2a 2a 0a 2a 2a 20 50 33 20 69 73 20 61 20 66 6c  **.** P3 is a fl
240c0 61 67 20 74 68 61 74 20 70 72 6f 76 69 64 65 73  ag that provides
240d0 20 61 20 68 69 6e 74 20 74 6f 20 74 68 65 20 62   a hint to the b
240e0 2d 74 72 65 65 20 6c 61 79 65 72 20 74 68 61 74  -tree layer that
240f0 20 74 68 69 73 0a 2a 2a 20 69 6e 73 65 72 74 20   this.** insert 
24100 69 73 20 6c 69 6b 65 6c 79 20 74 6f 20 62 65 20  is likely to be 
24110 61 6e 20 61 70 70 65 6e 64 2e 0a 2a 2a 0a 2a 2a  an append..**.**
24120 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   This instructio
24130 6e 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72  n only works for
24140 20 69 6e 64 69 63 65 73 2e 20 20 54 68 65 20 65   indices.  The e
24150 71 75 69 76 61 6c 65 6e 74 20 69 6e 73 74 72 75  quivalent instru
24160 63 74 69 6f 6e 0a 2a 2a 20 66 6f 72 20 74 61 62  ction.** for tab
24170 6c 65 73 20 69 73 20 4f 50 5f 49 6e 73 65 72 74  les is OP_Insert
24180 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72  ..*/.case OP_Sor
24190 74 65 72 49 6e 73 65 72 74 3a 20 20 20 20 20 20  terInsert:      
241a0 20 2f 2a 20 69 6e 32 20 2a 2f 0a 23 69 66 64 65   /* in2 */.#ifde
241b0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 4d 45  f SQLITE_OMIT_ME
241c0 52 47 45 5f 53 4f 52 54 0a 20 20 70 4f 70 2d 3e  RGE_SORT.  pOp->
241d0 6f 70 63 6f 64 65 20 3d 20 4f 50 5f 49 64 78 49  opcode = OP_IdxI
241e0 6e 73 65 72 74 3b 0a 23 65 6e 64 69 66 0a 63 61  nsert;.#endif.ca
241f0 73 65 20 4f 50 5f 49 64 78 49 6e 73 65 72 74 3a  se OP_IdxInsert:
24200 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 32   {        /* in2
24210 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72   */.  VdbeCursor
24220 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72   *pC;.  BtCursor
24230 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 6e   *pCrsr;.  int n
24240 4b 65 79 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61  Key;.  const cha
24250 72 20 2a 7a 4b 65 79 3b 0a 0a 20 20 61 73 73 65  r *zKey;..  asse
24260 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
24270 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
24280 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
24290 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
242a0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
242b0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
242c0 43 2d 3e 69 73 53 6f 72 74 65 72 3d 3d 28 70 4f  C->isSorter==(pO
242d0 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 6f  p->opcode==OP_So
242e0 72 74 65 72 49 6e 73 65 72 74 29 20 29 3b 0a 20  rterInsert) );. 
242f0 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn2 = &aMem[pO
24300 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74  p->p2];.  assert
24310 28 20 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20  ( pIn2->flags & 
24320 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20 70 43  MEM_Blob );.  pC
24330 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f  rsr = pC->pCurso
24340 72 3b 0a 20 20 69 66 28 20 41 4c 57 41 59 53 28  r;.  if( ALWAYS(
24350 70 43 72 73 72 21 3d 30 29 20 29 7b 0a 20 20 20  pCrsr!=0) ){.   
24360 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54   assert( pC->isT
24370 61 62 6c 65 3d 3d 30 20 29 3b 0a 20 20 20 20 72  able==0 );.    r
24380 63 20 3d 20 45 78 70 61 6e 64 42 6c 6f 62 28 70  c = ExpandBlob(p
24390 49 6e 32 29 3b 0a 20 20 20 20 69 66 28 20 72 63  In2);.    if( rc
243a0 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
243b0 20 20 20 20 20 69 66 28 20 69 73 53 6f 72 74 65       if( isSorte
243c0 72 28 70 43 29 20 29 7b 0a 20 20 20 20 20 20 20  r(pC) ){.       
243d0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
243e0 65 53 6f 72 74 65 72 57 72 69 74 65 28 64 62 2c  eSorterWrite(db,
243f0 20 70 43 2c 20 70 49 6e 32 29 3b 0a 20 20 20 20   pC, pIn2);.    
24400 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
24410 20 6e 4b 65 79 20 3d 20 70 49 6e 32 2d 3e 6e 3b   nKey = pIn2->n;
24420 0a 20 20 20 20 20 20 20 20 7a 4b 65 79 20 3d 20  .        zKey = 
24430 70 49 6e 32 2d 3e 7a 3b 0a 20 20 20 20 20 20 20  pIn2->z;.       
24440 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
24450 65 65 49 6e 73 65 72 74 28 70 43 72 73 72 2c 20  eeInsert(pCrsr, 
24460 7a 4b 65 79 2c 20 6e 4b 65 79 2c 20 22 22 2c 20  zKey, nKey, "", 
24470 30 2c 20 30 2c 20 70 4f 70 2d 3e 70 33 2c 20 0a  0, 0, pOp->p3, .
24480 20 20 20 20 20 20 20 20 20 20 20 20 28 28 70 4f              ((pO
24490 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 55  p->p5 & OPFLAG_U
244a0 53 45 53 45 45 4b 52 45 53 55 4c 54 29 20 3f 20  SESEEKRESULT) ? 
244b0 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3a  pC->seekResult :
244c0 20 30 29 0a 20 20 20 20 20 20 20 20 20 20 20 20   0).            
244d0 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  );.        asser
244e0 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d  t( pC->deferredM
244f0 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 20 20  oveto==0 );.    
24500 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61      pC->cacheSta
24510 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c  tus = CACHE_STAL
24520 45 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  E;.      }.    }
24530 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
24540 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 44  ./* Opcode: IdxD
24550 65 6c 65 74 65 20 50 31 20 50 32 20 50 33 20 2a  elete P1 P2 P3 *
24560 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6e   *.**.** The con
24570 74 65 6e 74 20 6f 66 20 50 33 20 72 65 67 69 73  tent of P3 regis
24580 74 65 72 73 20 73 74 61 72 74 69 6e 67 20 61 74  ters starting at
24590 20 72 65 67 69 73 74 65 72 20 50 32 20 66 6f 72   register P2 for
245a0 6d 0a 2a 2a 20 61 6e 20 75 6e 70 61 63 6b 65 64  m.** an unpacked
245b0 20 69 6e 64 65 78 20 6b 65 79 2e 20 54 68 69 73   index key. This
245c0 20 6f 70 63 6f 64 65 20 72 65 6d 6f 76 65 73 20   opcode removes 
245d0 74 68 61 74 20 65 6e 74 72 79 20 66 72 6f 6d 20  that entry from 
245e0 74 68 65 20 0a 2a 2a 20 69 6e 64 65 78 20 6f 70  the .** index op
245f0 65 6e 65 64 20 62 79 20 63 75 72 73 6f 72 20 50  ened by cursor P
24600 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64  1..*/.case OP_Id
24610 78 44 65 6c 65 74 65 3a 20 7b 0a 20 20 56 64 62  xDelete: {.  Vdb
24620 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42  eCursor *pC;.  B
24630 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a  tCursor *pCrsr;.
24640 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 55 6e 70    int res;.  Unp
24650 61 63 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a 0a  ackedRecord r;..
24660 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
24670 33 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  3>0 );.  assert(
24680 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f   pOp->p2>0 && pO
24690 70 2d 3e 70 32 2b 70 4f 70 2d 3e 70 33 3c 3d 70  p->p2+pOp->p3<=p
246a0 2d 3e 6e 4d 65 6d 2b 31 20 29 3b 0a 20 20 61 73  ->nMem+1 );.  as
246b0 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
246c0 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
246d0 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
246e0 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
246f0 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
24700 21 3d 30 20 29 3b 0a 20 20 70 43 72 73 72 20 3d  !=0 );.  pCrsr =
24710 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20   pC->pCursor;.  
24720 69 66 28 20 41 4c 57 41 59 53 28 70 43 72 73 72  if( ALWAYS(pCrsr
24730 21 3d 30 29 20 29 7b 0a 20 20 20 20 72 2e 70 4b  !=0) ){.    r.pK
24740 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65  eyInfo = pC->pKe
24750 79 49 6e 66 6f 3b 0a 20 20 20 20 72 2e 6e 46 69  yInfo;.    r.nFi
24760 65 6c 64 20 3d 20 28 75 31 36 29 70 4f 70 2d 3e  eld = (u16)pOp->
24770 70 33 3b 0a 20 20 20 20 72 2e 66 6c 61 67 73 20  p3;.    r.flags 
24780 3d 20 30 3b 0a 20 20 20 20 72 2e 61 4d 65 6d 20  = 0;.    r.aMem 
24790 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
247a0 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
247b0 44 45 42 55 47 0a 20 20 20 20 7b 20 69 6e 74 20  DEBUG.    { int 
247c0 69 3b 20 66 6f 72 28 69 3d 30 3b 20 69 3c 72 2e  i; for(i=0; i<r.
247d0 6e 46 69 65 6c 64 3b 20 69 2b 2b 29 20 61 73 73  nField; i++) ass
247e0 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
247f0 26 72 2e 61 4d 65 6d 5b 69 5d 29 20 29 3b 20 7d  &r.aMem[i]) ); }
24800 0a 23 65 6e 64 69 66 0a 20 20 20 20 72 63 20 3d  .#endif.    rc =
24810 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76   sqlite3BtreeMov
24820 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 72 73  etoUnpacked(pCrs
24830 72 2c 20 26 72 2c 20 30 2c 20 30 2c 20 26 72 65  r, &r, 0, 0, &re
24840 73 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d  s);.    if( rc==
24850 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 72 65 73  SQLITE_OK && res
24860 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 72 63 20  ==0 ){.      rc 
24870 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 44 65  = sqlite3BtreeDe
24880 6c 65 74 65 28 70 43 72 73 72 29 3b 0a 20 20 20  lete(pCrsr);.   
24890 20 7d 0a 20 20 20 20 61 73 73 65 72 74 28 20 70   }.    assert( p
248a0 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
248b0 6f 3d 3d 30 20 29 3b 0a 20 20 20 20 70 43 2d 3e  o==0 );.    pC->
248c0 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
248d0 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 7d 0a 20  CHE_STALE;.  }. 
248e0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
248f0 63 6f 64 65 3a 20 49 64 78 52 6f 77 69 64 20 50  code: IdxRowid P
24900 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
24910 20 57 72 69 74 65 20 69 6e 74 6f 20 72 65 67 69   Write into regi
24920 73 74 65 72 20 50 32 20 61 6e 20 69 6e 74 65 67  ster P2 an integ
24930 65 72 20 77 68 69 63 68 20 69 73 20 74 68 65 20  er which is the 
24940 6c 61 73 74 20 65 6e 74 72 79 20 69 6e 20 74 68  last entry in th
24950 65 20 72 65 63 6f 72 64 20 61 74 0a 2a 2a 20 74  e record at.** t
24960 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 69 6e  he end of the in
24970 64 65 78 20 6b 65 79 20 70 6f 69 6e 74 65 64 20  dex key pointed 
24980 74 6f 20 62 79 20 63 75 72 73 6f 72 20 50 31 2e  to by cursor P1.
24990 20 20 54 68 69 73 20 69 6e 74 65 67 65 72 20 73    This integer s
249a0 68 6f 75 6c 64 20 62 65 0a 2a 2a 20 74 68 65 20  hould be.** the 
249b0 72 6f 77 69 64 20 6f 66 20 74 68 65 20 74 61 62  rowid of the tab
249c0 6c 65 20 65 6e 74 72 79 20 74 6f 20 77 68 69 63  le entry to whic
249d0 68 20 74 68 69 73 20 69 6e 64 65 78 20 65 6e 74  h this index ent
249e0 72 79 20 70 6f 69 6e 74 73 2e 0a 2a 2a 0a 2a 2a  ry points..**.**
249f0 20 53 65 65 20 61 6c 73 6f 3a 20 52 6f 77 69 64   See also: Rowid
24a00 2c 20 4d 61 6b 65 52 65 63 6f 72 64 2e 0a 2a 2f  , MakeRecord..*/
24a10 0a 63 61 73 65 20 4f 50 5f 49 64 78 52 6f 77 69  .case OP_IdxRowi
24a20 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  d: {            
24a30 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c    /* out2-prerel
24a40 65 61 73 65 20 2a 2f 0a 20 20 42 74 43 75 72 73  ease */.  BtCurs
24a50 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 56 64 62  or *pCrsr;.  Vdb
24a60 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69  eCursor *pC;.  i
24a70 36 34 20 72 6f 77 69 64 3b 0a 0a 20 20 61 73 73  64 rowid;..  ass
24a80 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
24a90 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
24aa0 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
24ab0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
24ac0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
24ad0 3d 30 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20  =0 );.  pCrsr = 
24ae0 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 70  pC->pCursor;.  p
24af0 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
24b00 5f 4e 75 6c 6c 3b 0a 20 20 69 66 28 20 41 4c 57  _Null;.  if( ALW
24b10 41 59 53 28 70 43 72 73 72 21 3d 30 29 20 29 7b  AYS(pCrsr!=0) ){
24b20 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
24b30 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74  3VdbeCursorMovet
24b40 6f 28 70 43 29 3b 0a 20 20 20 20 69 66 28 20 4e  o(pC);.    if( N
24b50 45 56 45 52 28 72 63 29 20 29 20 67 6f 74 6f 20  EVER(rc) ) goto 
24b60 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
24b70 6f 72 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  or;.    assert( 
24b80 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
24b90 74 6f 3d 3d 30 20 29 3b 0a 20 20 20 20 61 73 73  to==0 );.    ass
24ba0 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65  ert( pC->isTable
24bb0 3d 3d 30 20 29 3b 0a 20 20 20 20 69 66 28 20 21  ==0 );.    if( !
24bc0 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20  pC->nullRow ){. 
24bd0 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
24be0 33 56 64 62 65 49 64 78 52 6f 77 69 64 28 64 62  3VdbeIdxRowid(db
24bf0 2c 20 70 43 72 73 72 2c 20 26 72 6f 77 69 64 29  , pCrsr, &rowid)
24c00 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 21 3d  ;.      if( rc!=
24c10 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
24c20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
24c30 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
24c40 20 20 20 20 7d 0a 20 20 20 20 20 20 70 4f 75 74      }.      pOut
24c50 2d 3e 75 2e 69 20 3d 20 72 6f 77 69 64 3b 0a 20  ->u.i = rowid;. 
24c60 20 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73       pOut->flags
24c70 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20   = MEM_Int;.    
24c80 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  }.  }.  break;.}
24c90 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78  ../* Opcode: Idx
24ca0 47 45 20 50 31 20 50 32 20 50 33 20 50 34 20 50  GE P1 P2 P3 P4 P
24cb0 35 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 72  5.**.** The P4 r
24cc0 65 67 69 73 74 65 72 20 76 61 6c 75 65 73 20 62  egister values b
24cd0 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 50 33  eginning with P3
24ce0 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65   form an unpacke
24cf0 64 20 69 6e 64 65 78 20 0a 2a 2a 20 6b 65 79 20  d index .** key 
24d00 74 68 61 74 20 6f 6d 69 74 73 20 74 68 65 20 52  that omits the R
24d10 4f 57 49 44 2e 20 20 43 6f 6d 70 61 72 65 20 74  OWID.  Compare t
24d20 68 69 73 20 6b 65 79 20 76 61 6c 75 65 20 61 67  his key value ag
24d30 61 69 6e 73 74 20 74 68 65 20 69 6e 64 65 78 20  ainst the index 
24d40 0a 2a 2a 20 74 68 61 74 20 50 31 20 69 73 20 63  .** that P1 is c
24d50 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e  urrently pointin
24d60 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e 67 20 74  g to, ignoring t
24d70 68 65 20 52 4f 57 49 44 20 6f 6e 20 74 68 65 20  he ROWID on the 
24d80 50 31 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20  P1 index..**.** 
24d90 49 66 20 74 68 65 20 50 31 20 69 6e 64 65 78 20  If the P1 index 
24da0 65 6e 74 72 79 20 69 73 20 67 72 65 61 74 65 72  entry is greater
24db0 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74   than or equal t
24dc0 6f 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 0a  o the key value.
24dd0 2a 2a 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20  ** then jump to 
24de0 50 32 2e 20 20 4f 74 68 65 72 77 69 73 65 20 66  P2.  Otherwise f
24df0 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74  all through to t
24e00 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74  he next instruct
24e10 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35  ion..**.** If P5
24e20 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 20 74 68 65   is non-zero the
24e30 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 20  n the key value 
24e40 69 73 20 69 6e 63 72 65 61 73 65 64 20 62 79 20  is increased by 
24e50 61 6e 20 65 70 73 69 6c 6f 6e 20 0a 2a 2a 20 70  an epsilon .** p
24e60 72 69 6f 72 20 74 6f 20 74 68 65 20 63 6f 6d 70  rior to the comp
24e70 61 72 69 73 6f 6e 2e 20 20 54 68 69 73 20 6d 61  arison.  This ma
24e80 6b 65 20 74 68 65 20 6f 70 63 6f 64 65 20 77 6f  ke the opcode wo
24e90 72 6b 20 6c 69 6b 65 20 49 64 78 47 54 20 65 78  rk like IdxGT ex
24ea0 63 65 70 74 0a 2a 2a 20 74 68 61 74 20 69 66 20  cept.** that if 
24eb0 74 68 65 20 6b 65 79 20 66 72 6f 6d 20 72 65 67  the key from reg
24ec0 69 73 74 65 72 20 50 33 20 69 73 20 61 20 70 72  ister P3 is a pr
24ed0 65 66 69 78 20 6f 66 20 74 68 65 20 6b 65 79 20  efix of the key 
24ee0 69 6e 20 74 68 65 20 63 75 72 73 6f 72 2c 0a 2a  in the cursor,.*
24ef0 2a 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  * the result is 
24f00 66 61 6c 73 65 20 77 68 65 72 65 61 73 20 69 74  false whereas it
24f10 20 77 6f 75 6c 64 20 62 65 20 74 72 75 65 20 77   would be true w
24f20 69 74 68 20 49 64 78 47 54 2e 0a 2a 2f 0a 2f 2a  ith IdxGT..*/./*
24f30 20 4f 70 63 6f 64 65 3a 20 49 64 78 4c 54 20 50   Opcode: IdxLT P
24f40 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
24f50 0a 2a 2a 20 54 68 65 20 50 34 20 72 65 67 69 73  .** The P4 regis
24f60 74 65 72 20 76 61 6c 75 65 73 20 62 65 67 69 6e  ter values begin
24f70 6e 69 6e 67 20 77 69 74 68 20 50 33 20 66 6f 72  ning with P3 for
24f80 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e  m an unpacked in
24f90 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74  dex .** key that
24fa0 20 6f 6d 69 74 73 20 74 68 65 20 52 4f 57 49 44   omits the ROWID
24fb0 2e 20 20 43 6f 6d 70 61 72 65 20 74 68 69 73 20  .  Compare this 
24fc0 6b 65 79 20 76 61 6c 75 65 20 61 67 61 69 6e 73  key value agains
24fd0 74 20 74 68 65 20 69 6e 64 65 78 20 0a 2a 2a 20  t the index .** 
24fe0 74 68 61 74 20 50 31 20 69 73 20 63 75 72 72 65  that P1 is curre
24ff0 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f  ntly pointing to
25000 2c 20 69 67 6e 6f 72 69 6e 67 20 74 68 65 20 52  , ignoring the R
25010 4f 57 49 44 20 6f 6e 20 74 68 65 20 50 31 20 69  OWID on the P1 i
25020 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  ndex..**.** If t
25030 68 65 20 50 31 20 69 6e 64 65 78 20 65 6e 74 72  he P1 index entr
25040 79 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 74  y is less than t
25050 68 65 20 6b 65 79 20 76 61 6c 75 65 20 74 68 65  he key value the
25060 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a  n jump to P2..**
25070 20 4f 74 68 65 72 77 69 73 65 20 66 61 6c 6c 20   Otherwise fall 
25080 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e  through to the n
25090 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ext instruction.
250a0 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20  .**.** If P5 is 
250b0 6e 6f 6e 2d 7a 65 72 6f 20 74 68 65 6e 20 74 68  non-zero then th
250c0 65 20 6b 65 79 20 76 61 6c 75 65 20 69 73 20 69  e key value is i
250d0 6e 63 72 65 61 73 65 64 20 62 79 20 61 6e 20 65  ncreased by an e
250e0 70 73 69 6c 6f 6e 20 70 72 69 6f 72 20 0a 2a 2a  psilon prior .**
250f0 20 74 6f 20 74 68 65 20 63 6f 6d 70 61 72 69 73   to the comparis
25100 6f 6e 2e 20 20 54 68 69 73 20 6d 61 6b 65 73 20  on.  This makes 
25110 74 68 65 20 6f 70 63 6f 64 65 20 77 6f 72 6b 20  the opcode work 
25120 6c 69 6b 65 20 49 64 78 4c 45 2e 0a 2a 2f 0a 63  like IdxLE..*/.c
25130 61 73 65 20 4f 50 5f 49 64 78 4c 54 3a 20 20 20  ase OP_IdxLT:   
25140 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
25150 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 47 45 3a  /.case OP_IdxGE:
25160 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d   {        /* jum
25170 70 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f  p */.  VdbeCurso
25180 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65 73  r *pC;.  int res
25190 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f  ;.  UnpackedReco
251a0 72 64 20 72 3b 0a 0a 20 20 61 73 73 65 72 74 28  rd r;..  assert(
251b0 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
251c0 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
251d0 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
251e0 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
251f0 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
25200 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
25210 69 73 4f 72 64 65 72 65 64 20 29 3b 0a 20 20 69  isOrdered );.  i
25220 66 28 20 41 4c 57 41 59 53 28 70 43 2d 3e 70 43  f( ALWAYS(pC->pC
25230 75 72 73 6f 72 21 3d 30 29 20 29 7b 0a 20 20 20  ursor!=0) ){.   
25240 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66   assert( pC->def
25250 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29  erredMoveto==0 )
25260 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  ;.    assert( pO
25270 70 2d 3e 70 35 3d 3d 30 20 7c 7c 20 70 4f 70 2d  p->p5==0 || pOp-
25280 3e 70 35 3d 3d 31 20 29 3b 0a 20 20 20 20 61 73  >p5==1 );.    as
25290 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70  sert( pOp->p4typ
252a0 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20  e==P4_INT32 );. 
252b0 20 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20     r.pKeyInfo = 
252c0 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20  pC->pKeyInfo;.  
252d0 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31    r.nField = (u1
252e0 36 29 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 20  6)pOp->p4.i;.   
252f0 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 29 7b 0a   if( pOp->p5 ){.
25300 20 20 20 20 20 20 72 2e 66 6c 61 67 73 20 3d 20        r.flags = 
25310 55 4e 50 41 43 4b 45 44 5f 49 4e 43 52 4b 45 59  UNPACKED_INCRKEY
25320 20 7c 20 55 4e 50 41 43 4b 45 44 5f 49 47 4e 4f   | UNPACKED_IGNO
25330 52 45 5f 52 4f 57 49 44 3b 0a 20 20 20 20 7d 65  RE_ROWID;.    }e
25340 6c 73 65 7b 0a 20 20 20 20 20 20 72 2e 66 6c 61  lse{.      r.fla
25350 67 73 20 3d 20 55 4e 50 41 43 4b 45 44 5f 49 47  gs = UNPACKED_IG
25360 4e 4f 52 45 5f 52 4f 57 49 44 3b 0a 20 20 20 20  NORE_ROWID;.    
25370 7d 0a 20 20 20 20 72 2e 61 4d 65 6d 20 3d 20 26  }.    r.aMem = &
25380 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 23  aMem[pOp->p3];.#
25390 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
253a0 55 47 0a 20 20 20 20 7b 20 69 6e 74 20 69 3b 20  UG.    { int i; 
253b0 66 6f 72 28 69 3d 30 3b 20 69 3c 72 2e 6e 46 69  for(i=0; i<r.nFi
253c0 65 6c 64 3b 20 69 2b 2b 29 20 61 73 73 65 72 74  eld; i++) assert
253d0 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 72 2e  ( memIsValid(&r.
253e0 61 4d 65 6d 5b 69 5d 29 20 29 3b 20 7d 0a 23 65  aMem[i]) ); }.#e
253f0 6e 64 69 66 0a 20 20 20 20 72 63 20 3d 20 73 71  ndif.    rc = sq
25400 6c 69 74 65 33 56 64 62 65 49 64 78 4b 65 79 43  lite3VdbeIdxKeyC
25410 6f 6d 70 61 72 65 28 70 43 2c 20 26 72 2c 20 26  ompare(pC, &r, &
25420 72 65 73 29 3b 0a 20 20 20 20 69 66 28 20 70 4f  res);.    if( pO
25430 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64  p->opcode==OP_Id
25440 78 4c 54 20 29 7b 0a 20 20 20 20 20 20 72 65 73  xLT ){.      res
25450 20 3d 20 2d 72 65 73 3b 0a 20 20 20 20 7d 65 6c   = -res;.    }el
25460 73 65 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74  se{.      assert
25470 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
25480 50 5f 49 64 78 47 45 20 29 3b 0a 20 20 20 20 20  P_IdxGE );.     
25490 20 72 65 73 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20   res++;.    }.  
254a0 20 20 69 66 28 20 72 65 73 3e 30 20 29 7b 0a 20    if( res>0 ){. 
254b0 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70       pc = pOp->p
254c0 32 20 2d 20 31 20 3b 0a 20 20 20 20 7d 0a 20 20  2 - 1 ;.    }.  
254d0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
254e0 20 4f 70 63 6f 64 65 3a 20 44 65 73 74 72 6f 79   Opcode: Destroy
254f0 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
25500 0a 2a 2a 20 44 65 6c 65 74 65 20 61 6e 20 65 6e  .** Delete an en
25510 74 69 72 65 20 64 61 74 61 62 61 73 65 20 74 61  tire database ta
25520 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 77 68 6f  ble or index who
25530 73 65 20 72 6f 6f 74 20 70 61 67 65 20 69 6e 20  se root page in 
25540 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20  the database.** 
25550 66 69 6c 65 20 69 73 20 67 69 76 65 6e 20 62 79  file is given by
25560 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 74   P1..**.** The t
25570 61 62 6c 65 20 62 65 69 6e 67 20 64 65 73 74 72  able being destr
25580 6f 79 65 64 20 69 73 20 69 6e 20 74 68 65 20 6d  oyed is in the m
25590 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
255a0 65 20 69 66 20 50 33 3d 3d 30 2e 20 20 49 66 0a  e if P3==0.  If.
255b0 2a 2a 20 50 33 3d 3d 31 20 74 68 65 6e 20 74 68  ** P3==1 then th
255c0 65 20 74 61 62 6c 65 20 74 6f 20 62 65 20 63 6c  e table to be cl
255d0 65 61 72 20 69 73 20 69 6e 20 74 68 65 20 61 75  ear is in the au
255e0 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73 65  xiliary database
255f0 20 66 69 6c 65 0a 2a 2a 20 74 68 61 74 20 69 73   file.** that is
25600 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74   used to store t
25610 61 62 6c 65 73 20 63 72 65 61 74 65 20 75 73 69  ables create usi
25620 6e 67 20 43 52 45 41 54 45 20 54 45 4d 50 4f 52  ng CREATE TEMPOR
25630 41 52 59 20 54 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a  ARY TABLE..**.**
25640 20 49 66 20 41 55 54 4f 56 41 43 55 55 4d 20 69   If AUTOVACUUM i
25650 73 20 65 6e 61 62 6c 65 64 20 74 68 65 6e 20 69  s enabled then i
25660 74 20 69 73 20 70 6f 73 73 69 62 6c 65 20 74 68  t is possible th
25670 61 74 20 61 6e 6f 74 68 65 72 20 72 6f 6f 74 20  at another root 
25680 70 61 67 65 0a 2a 2a 20 6d 69 67 68 74 20 62 65  page.** might be
25690 20 6d 6f 76 65 64 20 69 6e 74 6f 20 74 68 65 20   moved into the 
256a0 6e 65 77 6c 79 20 64 65 6c 65 74 65 64 20 72 6f  newly deleted ro
256b0 6f 74 20 70 61 67 65 20 69 6e 20 6f 72 64 65 72  ot page in order
256c0 20 74 6f 20 6b 65 65 70 20 61 6c 6c 0a 2a 2a 20   to keep all.** 
256d0 72 6f 6f 74 20 70 61 67 65 73 20 63 6f 6e 74 69  root pages conti
256e0 67 75 6f 75 73 20 61 74 20 74 68 65 20 62 65 67  guous at the beg
256f0 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65 20 64 61  inning of the da
25700 74 61 62 61 73 65 2e 20 20 54 68 65 20 66 6f 72  tabase.  The for
25710 6d 65 72 0a 2a 2a 20 76 61 6c 75 65 20 6f 66 20  mer.** value of 
25720 74 68 65 20 72 6f 6f 74 20 70 61 67 65 20 74 68  the root page th
25730 61 74 20 6d 6f 76 65 64 20 2d 20 69 74 73 20 76  at moved - its v
25740 61 6c 75 65 20 62 65 66 6f 72 65 20 74 68 65 20  alue before the 
25750 6d 6f 76 65 20 6f 63 63 75 72 72 65 64 20 2d 0a  move occurred -.
25760 2a 2a 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  ** is stored in 
25770 72 65 67 69 73 74 65 72 20 50 32 2e 20 20 49 66  register P2.  If
25780 20 6e 6f 20 70 61 67 65 20 0a 2a 2a 20 6d 6f 76   no page .** mov
25790 65 6d 65 6e 74 20 77 61 73 20 72 65 71 75 69 72  ement was requir
257a0 65 64 20 28 62 65 63 61 75 73 65 20 74 68 65 20  ed (because the 
257b0 74 61 62 6c 65 20 62 65 69 6e 67 20 64 72 6f 70  table being drop
257c0 70 65 64 20 77 61 73 20 61 6c 72 65 61 64 79 20  ped was already 
257d0 0a 2a 2a 20 74 68 65 20 6c 61 73 74 20 6f 6e 65  .** the last one
257e0 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
257f0 29 20 74 68 65 6e 20 61 20 7a 65 72 6f 20 69 73  ) then a zero is
25800 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73   stored in regis
25810 74 65 72 20 50 32 2e 0a 2a 2a 20 49 66 20 41 55  ter P2..** If AU
25820 54 4f 56 41 43 55 55 4d 20 69 73 20 64 69 73 61  TOVACUUM is disa
25830 62 6c 65 64 20 74 68 65 6e 20 61 20 7a 65 72 6f  bled then a zero
25840 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65   is stored in re
25850 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a  gister P2..**.**
25860 20 53 65 65 20 61 6c 73 6f 3a 20 43 6c 65 61 72   See also: Clear
25870 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 65 73 74  .*/.case OP_Dest
25880 72 6f 79 3a 20 7b 20 20 20 20 20 2f 2a 20 6f 75  roy: {     /* ou
25890 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f  t2-prerelease */
258a0 0a 20 20 69 6e 74 20 69 4d 6f 76 65 64 3b 0a 20  .  int iMoved;. 
258b0 20 69 6e 74 20 69 43 6e 74 3b 0a 20 20 56 64 62   int iCnt;.  Vdb
258c0 65 20 2a 70 56 64 62 65 3b 0a 20 20 69 6e 74 20  e *pVdbe;.  int 
258d0 69 44 62 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  iDb;.#ifndef SQL
258e0 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
258f0 54 41 42 4c 45 0a 20 20 69 43 6e 74 20 3d 20 30  TABLE.  iCnt = 0
25900 3b 0a 20 20 66 6f 72 28 70 56 64 62 65 3d 64 62  ;.  for(pVdbe=db
25910 2d 3e 70 56 64 62 65 3b 20 70 56 64 62 65 3b 20  ->pVdbe; pVdbe; 
25920 70 56 64 62 65 20 3d 20 70 56 64 62 65 2d 3e 70  pVdbe = pVdbe->p
25930 4e 65 78 74 29 7b 0a 20 20 20 20 69 66 28 20 70  Next){.    if( p
25940 56 64 62 65 2d 3e 6d 61 67 69 63 3d 3d 56 44 42  Vdbe->magic==VDB
25950 45 5f 4d 41 47 49 43 5f 52 55 4e 20 26 26 20 70  E_MAGIC_RUN && p
25960 56 64 62 65 2d 3e 69 6e 56 74 61 62 4d 65 74 68  Vdbe->inVtabMeth
25970 6f 64 3c 32 20 26 26 20 70 56 64 62 65 2d 3e 70  od<2 && pVdbe->p
25980 63 3e 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 43  c>=0 ){.      iC
25990 6e 74 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  nt++;.    }.  }.
259a0 23 65 6c 73 65 0a 20 20 69 43 6e 74 20 3d 20 64  #else.  iCnt = d
259b0 62 2d 3e 61 63 74 69 76 65 56 64 62 65 43 6e 74  b->activeVdbeCnt
259c0 3b 0a 23 65 6e 64 69 66 0a 20 20 70 4f 75 74 2d  ;.#endif.  pOut-
259d0 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c  >flags = MEM_Nul
259e0 6c 3b 0a 20 20 69 66 28 20 69 43 6e 74 3e 31 20  l;.  if( iCnt>1 
259f0 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49  ){.    rc = SQLI
25a00 54 45 5f 4c 4f 43 4b 45 44 3b 0a 20 20 20 20 70  TE_LOCKED;.    p
25a10 2d 3e 65 72 72 6f 72 41 63 74 69 6f 6e 20 3d 20  ->errorAction = 
25a20 4f 45 5f 41 62 6f 72 74 3b 0a 20 20 7d 65 6c 73  OE_Abort;.  }els
25a30 65 7b 0a 20 20 20 20 69 44 62 20 3d 20 70 4f 70  e{.    iDb = pOp
25a40 2d 3e 70 33 3b 0a 20 20 20 20 61 73 73 65 72 74  ->p3;.    assert
25a50 28 20 69 43 6e 74 3d 3d 31 20 29 3b 0a 20 20 20  ( iCnt==1 );.   
25a60 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72   assert( (p->btr
25a70 65 65 4d 61 73 6b 20 26 20 28 28 28 79 44 62 4d  eeMask & (((yDbM
25a80 61 73 6b 29 31 29 3c 3c 69 44 62 29 29 21 3d 30  ask)1)<<iDb))!=0
25a90 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   );.    rc = sql
25aa0 69 74 65 33 42 74 72 65 65 44 72 6f 70 54 61 62  ite3BtreeDropTab
25ab0 6c 65 28 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e  le(db->aDb[iDb].
25ac0 70 42 74 2c 20 70 4f 70 2d 3e 70 31 2c 20 26 69  pBt, pOp->p1, &i
25ad0 4d 6f 76 65 64 29 3b 0a 20 20 20 20 70 4f 75 74  Moved);.    pOut
25ae0 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e  ->flags = MEM_In
25af0 74 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69  t;.    pOut->u.i
25b00 20 3d 20 69 4d 6f 76 65 64 3b 0a 23 69 66 6e 64   = iMoved;.#ifnd
25b10 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ef SQLITE_OMIT_A
25b20 55 54 4f 56 41 43 55 55 4d 0a 20 20 20 20 69 66  UTOVACUUM.    if
25b30 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
25b40 26 26 20 69 4d 6f 76 65 64 21 3d 30 20 29 7b 0a  && iMoved!=0 ){.
25b50 20 20 20 20 20 20 73 71 6c 69 74 65 33 52 6f 6f        sqlite3Roo
25b60 74 50 61 67 65 4d 6f 76 65 64 28 64 62 2c 20 69  tPageMoved(db, i
25b70 44 62 2c 20 69 4d 6f 76 65 64 2c 20 70 4f 70 2d  Db, iMoved, pOp-
25b80 3e 70 31 29 3b 0a 20 20 20 20 20 20 2f 2a 20 41  >p1);.      /* A
25b90 6c 6c 20 4f 50 5f 44 65 73 74 72 6f 79 20 6f 70  ll OP_Destroy op
25ba0 65 72 61 74 69 6f 6e 73 20 6f 63 63 75 72 20 6f  erations occur o
25bb0 6e 20 74 68 65 20 73 61 6d 65 20 62 74 72 65 65  n the same btree
25bc0 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74   */.      assert
25bd0 28 20 72 65 73 65 74 53 63 68 65 6d 61 4f 6e 46  ( resetSchemaOnF
25be0 61 75 6c 74 3d 3d 30 20 7c 7c 20 72 65 73 65 74  ault==0 || reset
25bf0 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74 3d 3d 69  SchemaOnFault==i
25c00 44 62 2b 31 20 29 3b 0a 20 20 20 20 20 20 72 65  Db+1 );.      re
25c10 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74  setSchemaOnFault
25c20 20 3d 20 69 44 62 2b 31 3b 0a 20 20 20 20 7d 0a   = iDb+1;.    }.
25c30 23 65 6e 64 69 66 0a 20 20 7d 0a 20 20 62 72 65  #endif.  }.  bre
25c40 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
25c50 3a 20 43 6c 65 61 72 20 50 31 20 50 32 20 50 33  : Clear P1 P2 P3
25c60 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 61 6c  .**.** Delete al
25c70 6c 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20 74 68  l contents of th
25c80 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65  e database table
25c90 20 6f 72 20 69 6e 64 65 78 20 77 68 6f 73 65 20   or index whose 
25ca0 72 6f 6f 74 20 70 61 67 65 0a 2a 2a 20 69 6e 20  root page.** in 
25cb0 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
25cc0 65 20 69 73 20 67 69 76 65 6e 20 62 79 20 50 31  e is given by P1
25cd0 2e 20 20 42 75 74 2c 20 75 6e 6c 69 6b 65 20 44  .  But, unlike D
25ce0 65 73 74 72 6f 79 2c 20 64 6f 20 6e 6f 74 0a 2a  estroy, do not.*
25cf0 2a 20 72 65 6d 6f 76 65 20 74 68 65 20 74 61 62  * remove the tab
25d00 6c 65 20 6f 72 20 69 6e 64 65 78 20 66 72 6f 6d  le or index from
25d10 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
25d20 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 74 61  le..**.** The ta
25d30 62 6c 65 20 62 65 69 6e 67 20 63 6c 65 61 72 20  ble being clear 
25d40 69 73 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64  is in the main d
25d50 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66 20  atabase file if 
25d60 50 32 3d 3d 30 2e 20 20 49 66 0a 2a 2a 20 50 32  P2==0.  If.** P2
25d70 3d 3d 31 20 74 68 65 6e 20 74 68 65 20 74 61 62  ==1 then the tab
25d80 6c 65 20 74 6f 20 62 65 20 63 6c 65 61 72 20 69  le to be clear i
25d90 73 20 69 6e 20 74 68 65 20 61 75 78 69 6c 69 61  s in the auxilia
25da0 72 79 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  ry database file
25db0 0a 2a 2a 20 74 68 61 74 20 69 73 20 75 73 65 64  .** that is used
25dc0 20 74 6f 20 73 74 6f 72 65 20 74 61 62 6c 65 73   to store tables
25dd0 20 63 72 65 61 74 65 20 75 73 69 6e 67 20 43 52   create using CR
25de0 45 41 54 45 20 54 45 4d 50 4f 52 41 52 59 20 54  EATE TEMPORARY T
25df0 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  ABLE..**.** If t
25e00 68 65 20 50 33 20 76 61 6c 75 65 20 69 73 20 6e  he P3 value is n
25e10 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68  on-zero, then th
25e20 65 20 74 61 62 6c 65 20 72 65 66 65 72 72 65 64  e table referred
25e30 20 74 6f 20 6d 75 73 74 20 62 65 20 61 6e 0a 2a   to must be an.*
25e40 2a 20 69 6e 74 6b 65 79 20 74 61 62 6c 65 20 28  * intkey table (
25e50 61 6e 20 53 51 4c 20 74 61 62 6c 65 2c 20 6e 6f  an SQL table, no
25e60 74 20 61 6e 20 69 6e 64 65 78 29 2e 20 49 6e 20  t an index). In 
25e70 74 68 69 73 20 63 61 73 65 20 74 68 65 20 72 6f  this case the ro
25e80 77 20 63 68 61 6e 67 65 20 0a 2a 2a 20 63 6f 75  w change .** cou
25e90 6e 74 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65  nt is incremente
25ea0 64 20 62 79 20 74 68 65 20 6e 75 6d 62 65 72 20  d by the number 
25eb0 6f 66 20 72 6f 77 73 20 69 6e 20 74 68 65 20 74  of rows in the t
25ec0 61 62 6c 65 20 62 65 69 6e 67 20 63 6c 65 61 72  able being clear
25ed0 65 64 2e 20 0a 2a 2a 20 49 66 20 50 33 20 69 73  ed. .** If P3 is
25ee0 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 7a 65   greater than ze
25ef0 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 76 61 6c  ro, then the val
25f00 75 65 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67  ue stored in reg
25f10 69 73 74 65 72 20 50 33 20 69 73 0a 2a 2a 20 61  ister P3 is.** a
25f20 6c 73 6f 20 69 6e 63 72 65 6d 65 6e 74 65 64 20  lso incremented 
25f30 62 79 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  by the number of
25f40 20 72 6f 77 73 20 69 6e 20 74 68 65 20 74 61 62   rows in the tab
25f50 6c 65 20 62 65 69 6e 67 20 63 6c 65 61 72 65 64  le being cleared
25f60 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
25f70 3a 20 44 65 73 74 72 6f 79 0a 2a 2f 0a 63 61 73  : Destroy.*/.cas
25f80 65 20 4f 50 5f 43 6c 65 61 72 3a 20 7b 0a 20 20  e OP_Clear: {.  
25f90 69 6e 74 20 6e 43 68 61 6e 67 65 3b 0a 20 0a 20  int nChange;. . 
25fa0 20 6e 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20   nChange = 0;.  
25fb0 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65  assert( (p->btre
25fc0 65 4d 61 73 6b 20 26 20 28 28 28 79 44 62 4d 61  eMask & (((yDbMa
25fd0 73 6b 29 31 29 3c 3c 70 4f 70 2d 3e 70 32 29 29  sk)1)<<pOp->p2))
25fe0 21 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 73 71  !=0 );.  rc = sq
25ff0 6c 69 74 65 33 42 74 72 65 65 43 6c 65 61 72 54  lite3BtreeClearT
26000 61 62 6c 65 28 0a 20 20 20 20 20 20 64 62 2d 3e  able(.      db->
26010 61 44 62 5b 70 4f 70 2d 3e 70 32 5d 2e 70 42 74  aDb[pOp->p2].pBt
26020 2c 20 70 4f 70 2d 3e 70 31 2c 20 28 70 4f 70 2d  , pOp->p1, (pOp-
26030 3e 70 33 20 3f 20 26 6e 43 68 61 6e 67 65 20 3a  >p3 ? &nChange :
26040 20 30 29 0a 20 20 29 3b 0a 20 20 69 66 28 20 70   0).  );.  if( p
26050 4f 70 2d 3e 70 33 20 29 7b 0a 20 20 20 20 70 2d  Op->p3 ){.    p-
26060 3e 6e 43 68 61 6e 67 65 20 2b 3d 20 6e 43 68 61  >nChange += nCha
26070 6e 67 65 3b 0a 20 20 20 20 69 66 28 20 70 4f 70  nge;.    if( pOp
26080 2d 3e 70 33 3e 30 20 29 7b 0a 20 20 20 20 20 20  ->p3>0 ){.      
26090 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
260a0 69 64 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33  id(&aMem[pOp->p3
260b0 5d 29 20 29 3b 0a 20 20 20 20 20 20 6d 65 6d 41  ]) );.      memA
260c0 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
260d0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b  &aMem[pOp->p3]);
260e0 0a 20 20 20 20 20 20 61 4d 65 6d 5b 70 4f 70 2d  .      aMem[pOp-
260f0 3e 70 33 5d 2e 75 2e 69 20 2b 3d 20 6e 43 68 61  >p3].u.i += nCha
26100 6e 67 65 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  nge;.    }.  }. 
26110 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
26120 63 6f 64 65 3a 20 43 72 65 61 74 65 54 61 62 6c  code: CreateTabl
26130 65 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  e P1 P2 * * *.**
26140 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65 20 61 20 6e  .** Allocate a n
26150 65 77 20 74 61 62 6c 65 20 69 6e 20 74 68 65 20  ew table in the 
26160 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69  main database fi
26170 6c 65 20 69 66 20 50 31 3d 3d 30 20 6f 72 20 69  le if P1==0 or i
26180 6e 20 74 68 65 0a 2a 2a 20 61 75 78 69 6c 69 61  n the.** auxilia
26190 72 79 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  ry database file
261a0 20 69 66 20 50 31 3d 3d 31 20 6f 72 20 69 6e 20   if P1==1 or in 
261b0 61 6e 20 61 74 74 61 63 68 65 64 20 64 61 74 61  an attached data
261c0 62 61 73 65 20 69 66 0a 2a 2a 20 50 31 3e 31 2e  base if.** P1>1.
261d0 20 20 57 72 69 74 65 20 74 68 65 20 72 6f 6f 74    Write the root
261e0 20 70 61 67 65 20 6e 75 6d 62 65 72 20 6f 66 20   page number of 
261f0 74 68 65 20 6e 65 77 20 74 61 62 6c 65 20 69 6e  the new table in
26200 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50  to.** register P
26210 32 0a 2a 2a 0a 2a 2a 20 54 68 65 20 64 69 66 66  2.**.** The diff
26220 65 72 65 6e 63 65 20 62 65 74 77 65 65 6e 20 61  erence between a
26230 20 74 61 62 6c 65 20 61 6e 64 20 61 6e 20 69 6e   table and an in
26240 64 65 78 20 69 73 20 74 68 69 73 3a 20 20 41 20  dex is this:  A 
26250 74 61 62 6c 65 20 6d 75 73 74 0a 2a 2a 20 68 61  table must.** ha
26260 76 65 20 61 20 34 2d 62 79 74 65 20 69 6e 74 65  ve a 4-byte inte
26270 67 65 72 20 6b 65 79 20 61 6e 64 20 63 61 6e 20  ger key and can 
26280 68 61 76 65 20 61 72 62 69 74 72 61 72 79 20 64  have arbitrary d
26290 61 74 61 2e 20 20 41 6e 20 69 6e 64 65 78 0a 2a  ata.  An index.*
262a0 2a 20 68 61 73 20 61 6e 20 61 72 62 69 74 72 61  * has an arbitra
262b0 72 79 20 6b 65 79 20 62 75 74 20 6e 6f 20 64 61  ry key but no da
262c0 74 61 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  ta..**.** See al
262d0 73 6f 3a 20 43 72 65 61 74 65 49 6e 64 65 78 0a  so: CreateIndex.
262e0 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 72  */./* Opcode: Cr
262f0 65 61 74 65 49 6e 64 65 78 20 50 31 20 50 32 20  eateIndex P1 P2 
26300 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 6c 6c 6f  * * *.**.** Allo
26310 63 61 74 65 20 61 20 6e 65 77 20 69 6e 64 65 78  cate a new index
26320 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74   in the main dat
26330 61 62 61 73 65 20 66 69 6c 65 20 69 66 20 50 31  abase file if P1
26340 3d 3d 30 20 6f 72 20 69 6e 20 74 68 65 0a 2a 2a  ==0 or in the.**
26350 20 61 75 78 69 6c 69 61 72 79 20 64 61 74 61 62   auxiliary datab
26360 61 73 65 20 66 69 6c 65 20 69 66 20 50 31 3d 3d  ase file if P1==
26370 31 20 6f 72 20 69 6e 20 61 6e 20 61 74 74 61 63  1 or in an attac
26380 68 65 64 20 64 61 74 61 62 61 73 65 20 69 66 0a  hed database if.
26390 2a 2a 20 50 31 3e 31 2e 20 20 57 72 69 74 65 20  ** P1>1.  Write 
263a0 74 68 65 20 72 6f 6f 74 20 70 61 67 65 20 6e 75  the root page nu
263b0 6d 62 65 72 20 6f 66 20 74 68 65 20 6e 65 77 20  mber of the new 
263c0 74 61 62 6c 65 20 69 6e 74 6f 0a 2a 2a 20 72 65  table into.** re
263d0 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a  gister P2..**.**
263e0 20 53 65 65 20 64 6f 63 75 6d 65 6e 74 61 74 69   See documentati
263f0 6f 6e 20 6f 6e 20 4f 50 5f 43 72 65 61 74 65 54  on on OP_CreateT
26400 61 62 6c 65 20 66 6f 72 20 61 64 64 69 74 69 6f  able for additio
26410 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  nal information.
26420 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 72 65 61  .*/.case OP_Crea
26430 74 65 49 6e 64 65 78 3a 20 20 20 20 20 20 20 20  teIndex:        
26440 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72      /* out2-prer
26450 65 6c 65 61 73 65 20 2a 2f 0a 63 61 73 65 20 4f  elease */.case O
26460 50 5f 43 72 65 61 74 65 54 61 62 6c 65 3a 20 7b  P_CreateTable: {
26470 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
26480 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a  2-prerelease */.
26490 20 20 69 6e 74 20 70 67 6e 6f 3b 0a 20 20 69 6e    int pgno;.  in
264a0 74 20 66 6c 61 67 73 3b 0a 20 20 44 62 20 2a 70  t flags;.  Db *p
264b0 44 62 3b 0a 0a 20 20 70 67 6e 6f 20 3d 20 30 3b  Db;..  pgno = 0;
264c0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
264d0 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
264e0 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73  <db->nDb );.  as
264f0 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d  sert( (p->btreeM
26500 61 73 6b 20 26 20 28 28 28 79 44 62 4d 61 73 6b  ask & (((yDbMask
26510 29 31 29 3c 3c 70 4f 70 2d 3e 70 31 29 29 21 3d  )1)<<pOp->p1))!=
26520 30 20 29 3b 0a 20 20 70 44 62 20 3d 20 26 64 62  0 );.  pDb = &db
26530 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  ->aDb[pOp->p1];.
26540 20 20 61 73 73 65 72 74 28 20 70 44 62 2d 3e 70    assert( pDb->p
26550 42 74 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 70  Bt!=0 );.  if( p
26560 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43  Op->opcode==OP_C
26570 72 65 61 74 65 54 61 62 6c 65 20 29 7b 0a 20 20  reateTable ){.  
26580 20 20 2f 2a 20 66 6c 61 67 73 20 3d 20 42 54 52    /* flags = BTR
26590 45 45 5f 49 4e 54 4b 45 59 3b 20 2a 2f 0a 20 20  EE_INTKEY; */.  
265a0 20 20 66 6c 61 67 73 20 3d 20 42 54 52 45 45 5f    flags = BTREE_
265b0 49 4e 54 4b 45 59 3b 0a 20 20 7d 65 6c 73 65 7b  INTKEY;.  }else{
265c0 0a 20 20 20 20 66 6c 61 67 73 20 3d 20 42 54 52  .    flags = BTR
265d0 45 45 5f 42 4c 4f 42 4b 45 59 3b 0a 20 20 7d 0a  EE_BLOBKEY;.  }.
265e0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
265f0 72 65 65 43 72 65 61 74 65 54 61 62 6c 65 28 70  reeCreateTable(p
26600 44 62 2d 3e 70 42 74 2c 20 26 70 67 6e 6f 2c 20  Db->pBt, &pgno, 
26610 66 6c 61 67 73 29 3b 0a 20 20 70 4f 75 74 2d 3e  flags);.  pOut->
26620 75 2e 69 20 3d 20 70 67 6e 6f 3b 0a 20 20 62 72  u.i = pgno;.  br
26630 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
26640 65 3a 20 50 61 72 73 65 53 63 68 65 6d 61 20 50  e: ParseSchema P
26650 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  1 * * P4 *.**.**
26660 20 52 65 61 64 20 61 6e 64 20 70 61 72 73 65 20   Read and parse 
26670 61 6c 6c 20 65 6e 74 72 69 65 73 20 66 72 6f 6d  all entries from
26680 20 74 68 65 20 53 51 4c 49 54 45 5f 4d 41 53 54   the SQLITE_MAST
26690 45 52 20 74 61 62 6c 65 20 6f 66 20 64 61 74 61  ER table of data
266a0 62 61 73 65 20 50 31 0a 2a 2a 20 74 68 61 74 20  base P1.** that 
266b0 6d 61 74 63 68 20 74 68 65 20 57 48 45 52 45 20  match the WHERE 
266c0 63 6c 61 75 73 65 20 50 34 2e 20 0a 2a 2a 0a 2a  clause P4. .**.*
266d0 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 6e  * This opcode in
266e0 76 6f 6b 65 73 20 74 68 65 20 70 61 72 73 65 72  vokes the parser
266f0 20 74 6f 20 63 72 65 61 74 65 20 61 20 6e 65 77   to create a new
26700 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65   virtual machine
26710 2c 0a 2a 2a 20 74 68 65 6e 20 72 75 6e 73 20 74  ,.** then runs t
26720 68 65 20 6e 65 77 20 76 69 72 74 75 61 6c 20 6d  he new virtual m
26730 61 63 68 69 6e 65 2e 20 20 49 74 20 69 73 20 74  achine.  It is t
26740 68 75 73 20 61 20 72 65 2d 65 6e 74 72 61 6e 74  hus a re-entrant
26750 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65   opcode..*/.case
26760 20 4f 50 5f 50 61 72 73 65 53 63 68 65 6d 61 3a   OP_ParseSchema:
26770 20 7b 0a 20 20 69 6e 74 20 69 44 62 3b 0a 20 20   {.  int iDb;.  
26780 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4d 61 73  const char *zMas
26790 74 65 72 3b 0a 20 20 63 68 61 72 20 2a 7a 53 71  ter;.  char *zSq
267a0 6c 3b 0a 20 20 49 6e 69 74 44 61 74 61 20 69 6e  l;.  InitData in
267b0 69 74 44 61 74 61 3b 0a 0a 20 20 2f 2a 20 41 6e  itData;..  /* An
267c0 79 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65  y prepared state
267d0 6d 65 6e 74 20 74 68 61 74 20 69 6e 76 6f 6b 65  ment that invoke
267e0 73 20 74 68 69 73 20 6f 70 63 6f 64 65 20 77 69  s this opcode wi
267f0 6c 6c 20 68 6f 6c 64 20 6d 75 74 65 78 65 73 0a  ll hold mutexes.
26800 20 20 2a 2a 20 6f 6e 20 65 76 65 72 79 20 62 74    ** on every bt
26810 72 65 65 2e 20 20 54 68 69 73 20 69 73 20 61 20  ree.  This is a 
26820 70 72 65 72 65 71 75 69 73 69 74 65 20 66 6f 72  prerequisite for
26830 20 69 6e 76 6f 6b 69 6e 67 20 0a 20 20 2a 2a 20   invoking .  ** 
26840 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62  sqlite3InitCallb
26850 61 63 6b 28 29 2e 0a 20 20 2a 2f 0a 23 69 66 64  ack()..  */.#ifd
26860 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
26870 20 20 66 6f 72 28 69 44 62 3d 30 3b 20 69 44 62    for(iDb=0; iDb
26880 3c 64 62 2d 3e 6e 44 62 3b 20 69 44 62 2b 2b 29  <db->nDb; iDb++)
26890 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 69 44  {.    assert( iD
268a0 62 3d 3d 31 20 7c 7c 20 73 71 6c 69 74 65 33 42  b==1 || sqlite3B
268b0 74 72 65 65 48 6f 6c 64 73 4d 75 74 65 78 28 64  treeHoldsMutex(d
268c0 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 29  b->aDb[iDb].pBt)
268d0 20 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a   );.  }.#endif..
268e0 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70 31 3b    iDb = pOp->p1;
268f0 0a 20 20 61 73 73 65 72 74 28 20 69 44 62 3e 3d  .  assert( iDb>=
26900 30 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62  0 && iDb<db->nDb
26910 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62   );.  assert( Db
26920 48 61 73 50 72 6f 70 65 72 74 79 28 64 62 2c 20  HasProperty(db, 
26930 69 44 62 2c 20 44 42 5f 53 63 68 65 6d 61 4c 6f  iDb, DB_SchemaLo
26940 61 64 65 64 29 20 29 3b 0a 20 20 2f 2a 20 55 73  aded) );.  /* Us
26950 65 64 20 74 6f 20 62 65 20 61 20 63 6f 6e 64 69  ed to be a condi
26960 74 69 6f 6e 61 6c 20 2a 2f 20 7b 0a 20 20 20 20  tional */ {.    
26970 7a 4d 61 73 74 65 72 20 3d 20 53 43 48 45 4d 41  zMaster = SCHEMA
26980 5f 54 41 42 4c 45 28 69 44 62 29 3b 0a 20 20 20  _TABLE(iDb);.   
26990 20 69 6e 69 74 44 61 74 61 2e 64 62 20 3d 20 64   initData.db = d
269a0 62 3b 0a 20 20 20 20 69 6e 69 74 44 61 74 61 2e  b;.    initData.
269b0 69 44 62 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20  iDb = pOp->p1;. 
269c0 20 20 20 69 6e 69 74 44 61 74 61 2e 70 7a 45 72     initData.pzEr
269d0 72 4d 73 67 20 3d 20 26 70 2d 3e 7a 45 72 72 4d  rMsg = &p->zErrM
269e0 73 67 3b 0a 20 20 20 20 7a 53 71 6c 20 3d 20 73  sg;.    zSql = s
269f0 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 64 62  qlite3MPrintf(db
26a00 2c 0a 20 20 20 20 20 20 20 22 53 45 4c 45 43 54  ,.       "SELECT
26a10 20 6e 61 6d 65 2c 20 72 6f 6f 74 70 61 67 65 2c   name, rootpage,
26a20 20 73 71 6c 20 46 52 4f 4d 20 27 25 71 27 2e 25   sql FROM '%q'.%
26a30 73 20 57 48 45 52 45 20 25 73 20 4f 52 44 45 52  s WHERE %s ORDER
26a40 20 42 59 20 72 6f 77 69 64 22 2c 0a 20 20 20 20   BY rowid",.    
26a50 20 20 20 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e     db->aDb[iDb].
26a60 7a 4e 61 6d 65 2c 20 7a 4d 61 73 74 65 72 2c 20  zName, zMaster, 
26a70 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20  pOp->p4.z);.    
26a80 69 66 28 20 7a 53 71 6c 3d 3d 30 20 29 7b 0a 20  if( zSql==0 ){. 
26a90 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
26aa0 5f 4e 4f 4d 45 4d 3b 0a 20 20 20 20 7d 65 6c 73  _NOMEM;.    }els
26ab0 65 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  e{.      assert(
26ac0 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 3d 3d   db->init.busy==
26ad0 30 20 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 69  0 );.      db->i
26ae0 6e 69 74 2e 62 75 73 79 20 3d 20 31 3b 0a 20 20  nit.busy = 1;.  
26af0 20 20 20 20 69 6e 69 74 44 61 74 61 2e 72 63 20      initData.rc 
26b00 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20  = SQLITE_OK;.   
26b10 20 20 20 61 73 73 65 72 74 28 20 21 64 62 2d 3e     assert( !db->
26b20 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 3b 0a  mallocFailed );.
26b30 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
26b40 65 33 5f 65 78 65 63 28 64 62 2c 20 7a 53 71 6c  e3_exec(db, zSql
26b50 2c 20 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c  , sqlite3InitCal
26b60 6c 62 61 63 6b 2c 20 26 69 6e 69 74 44 61 74 61  lback, &initData
26b70 2c 20 30 29 3b 0a 20 20 20 20 20 20 69 66 28 20  , 0);.      if( 
26b80 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20  rc==SQLITE_OK ) 
26b90 72 63 20 3d 20 69 6e 69 74 44 61 74 61 2e 72 63  rc = initData.rc
26ba0 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 44  ;.      sqlite3D
26bb0 62 46 72 65 65 28 64 62 2c 20 7a 53 71 6c 29 3b  bFree(db, zSql);
26bc0 0a 20 20 20 20 20 20 64 62 2d 3e 69 6e 69 74 2e  .      db->init.
26bd0 62 75 73 79 20 3d 20 30 3b 0a 20 20 20 20 7d 0a  busy = 0;.    }.
26be0 20 20 7d 0a 20 20 69 66 28 20 72 63 3d 3d 53 51    }.  if( rc==SQ
26bf0 4c 49 54 45 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20  LITE_NOMEM ){.  
26c00 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20    goto no_mem;. 
26c10 20 7d 0a 20 20 62 72 65 61 6b 3b 20 20 0a 7d 0a   }.  break;  .}.
26c20 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
26c30 4c 49 54 45 5f 4f 4d 49 54 5f 41 4e 41 4c 59 5a  LITE_OMIT_ANALYZ
26c40 45 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 6f  E)./* Opcode: Lo
26c50 61 64 41 6e 61 6c 79 73 69 73 20 50 31 20 2a 20  adAnalysis P1 * 
26c60 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64  * * *.**.** Read
26c70 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74   the sqlite_stat
26c80 31 20 74 61 62 6c 65 20 66 6f 72 20 64 61 74 61  1 table for data
26c90 62 61 73 65 20 50 31 20 61 6e 64 20 6c 6f 61 64  base P1 and load
26ca0 20 74 68 65 20 63 6f 6e 74 65 6e 74 0a 2a 2a 20   the content.** 
26cb0 6f 66 20 74 68 61 74 20 74 61 62 6c 65 20 69 6e  of that table in
26cc0 74 6f 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20  to the internal 
26cd0 69 6e 64 65 78 20 68 61 73 68 20 74 61 62 6c 65  index hash table
26ce0 2e 20 20 54 68 69 73 20 77 69 6c 6c 20 63 61 75  .  This will cau
26cf0 73 65 0a 2a 2a 20 74 68 65 20 61 6e 61 6c 79 73  se.** the analys
26d00 69 73 20 74 6f 20 62 65 20 75 73 65 64 20 77 68  is to be used wh
26d10 65 6e 20 70 72 65 70 61 72 69 6e 67 20 61 6c 6c  en preparing all
26d20 20 73 75 62 73 65 71 75 65 6e 74 20 71 75 65 72   subsequent quer
26d30 69 65 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ies..*/.case OP_
26d40 4c 6f 61 64 41 6e 61 6c 79 73 69 73 3a 20 7b 0a  LoadAnalysis: {.
26d50 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
26d60 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
26d70 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 72 63 20  db->nDb );.  rc 
26d80 3d 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 73 69  = sqlite3Analysi
26d90 73 4c 6f 61 64 28 64 62 2c 20 70 4f 70 2d 3e 70  sLoad(db, pOp->p
26da0 31 29 3b 0a 20 20 62 72 65 61 6b 3b 20 20 0a 7d  1);.  break;  .}
26db0 0a 23 65 6e 64 69 66 20 2f 2a 20 21 64 65 66 69  .#endif /* !defi
26dc0 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
26dd0 41 4e 41 4c 59 5a 45 29 20 2a 2f 0a 0a 2f 2a 20  ANALYZE) */../* 
26de0 4f 70 63 6f 64 65 3a 20 44 72 6f 70 54 61 62 6c  Opcode: DropTabl
26df0 65 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a  e P1 * * P4 *.**
26e00 0a 2a 2a 20 52 65 6d 6f 76 65 20 74 68 65 20 69  .** Remove the i
26e10 6e 74 65 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f  nternal (in-memo
26e20 72 79 29 20 64 61 74 61 20 73 74 72 75 63 74 75  ry) data structu
26e30 72 65 73 20 74 68 61 74 20 64 65 73 63 72 69 62  res that describ
26e40 65 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65 20 6e  e.** the table n
26e50 61 6d 65 64 20 50 34 20 69 6e 20 64 61 74 61 62  amed P4 in datab
26e60 61 73 65 20 50 31 2e 20 20 54 68 69 73 20 69 73  ase P1.  This is
26e70 20 63 61 6c 6c 65 64 20 61 66 74 65 72 20 61 20   called after a 
26e80 74 61 62 6c 65 0a 2a 2a 20 69 73 20 64 72 6f 70  table.** is drop
26e90 70 65 64 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  ped in order to 
26ea0 6b 65 65 70 20 74 68 65 20 69 6e 74 65 72 6e 61  keep the interna
26eb0 6c 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  l representation
26ec0 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d   of the.** schem
26ed0 61 20 63 6f 6e 73 69 73 74 65 6e 74 20 77 69 74  a consistent wit
26ee0 68 20 77 68 61 74 20 69 73 20 6f 6e 20 64 69 73  h what is on dis
26ef0 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 72  k..*/.case OP_Dr
26f00 6f 70 54 61 62 6c 65 3a 20 7b 0a 20 20 73 71 6c  opTable: {.  sql
26f10 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c  ite3UnlinkAndDel
26f20 65 74 65 54 61 62 6c 65 28 64 62 2c 20 70 4f 70  eteTable(db, pOp
26f30 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29  ->p1, pOp->p4.z)
26f40 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
26f50 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70 49 6e 64   Opcode: DropInd
26f60 65 78 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a  ex P1 * * P4 *.*
26f70 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74 68 65 20  *.** Remove the 
26f80 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d  internal (in-mem
26f90 6f 72 79 29 20 64 61 74 61 20 73 74 72 75 63 74  ory) data struct
26fa0 75 72 65 73 20 74 68 61 74 20 64 65 73 63 72 69  ures that descri
26fb0 62 65 0a 2a 2a 20 74 68 65 20 69 6e 64 65 78 20  be.** the index 
26fc0 6e 61 6d 65 64 20 50 34 20 69 6e 20 64 61 74 61  named P4 in data
26fd0 62 61 73 65 20 50 31 2e 20 20 54 68 69 73 20 69  base P1.  This i
26fe0 73 20 63 61 6c 6c 65 64 20 61 66 74 65 72 20 61  s called after a
26ff0 6e 20 69 6e 64 65 78 0a 2a 2a 20 69 73 20 64 72  n index.** is dr
27000 6f 70 70 65 64 20 69 6e 20 6f 72 64 65 72 20 74  opped in order t
27010 6f 20 6b 65 65 70 20 74 68 65 20 69 6e 74 65 72  o keep the inter
27020 6e 61 6c 20 72 65 70 72 65 73 65 6e 74 61 74 69  nal representati
27030 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68  on of the.** sch
27040 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74 20 77  ema consistent w
27050 69 74 68 20 77 68 61 74 20 69 73 20 6f 6e 20 64  ith what is on d
27060 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  isk..*/.case OP_
27070 44 72 6f 70 49 6e 64 65 78 3a 20 7b 0a 20 20 73  DropIndex: {.  s
27080 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44  qlite3UnlinkAndD
27090 65 6c 65 74 65 49 6e 64 65 78 28 64 62 2c 20 70  eleteIndex(db, p
270a0 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e  Op->p1, pOp->p4.
270b0 7a 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  z);.  break;.}..
270c0 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70 54  /* Opcode: DropT
270d0 72 69 67 67 65 72 20 50 31 20 2a 20 2a 20 50 34  rigger P1 * * P4
270e0 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20   *.**.** Remove 
270f0 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e  the internal (in
27100 2d 6d 65 6d 6f 72 79 29 20 64 61 74 61 20 73 74  -memory) data st
27110 72 75 63 74 75 72 65 73 20 74 68 61 74 20 64 65  ructures that de
27120 73 63 72 69 62 65 0a 2a 2a 20 74 68 65 20 74 72  scribe.** the tr
27130 69 67 67 65 72 20 6e 61 6d 65 64 20 50 34 20 69  igger named P4 i
27140 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e 20 20  n database P1.  
27150 54 68 69 73 20 69 73 20 63 61 6c 6c 65 64 20 61  This is called a
27160 66 74 65 72 20 61 20 74 72 69 67 67 65 72 0a 2a  fter a trigger.*
27170 2a 20 69 73 20 64 72 6f 70 70 65 64 20 69 6e 20  * is dropped in 
27180 6f 72 64 65 72 20 74 6f 20 6b 65 65 70 20 74 68  order to keep th
27190 65 20 69 6e 74 65 72 6e 61 6c 20 72 65 70 72 65  e internal repre
271a0 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65  sentation of the
271b0 0a 2a 2a 20 73 63 68 65 6d 61 20 63 6f 6e 73 69  .** schema consi
271c0 73 74 65 6e 74 20 77 69 74 68 20 77 68 61 74 20  stent with what 
271d0 69 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63  is on disk..*/.c
271e0 61 73 65 20 4f 50 5f 44 72 6f 70 54 72 69 67 67  ase OP_DropTrigg
271f0 65 72 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 55  er: {.  sqlite3U
27200 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72  nlinkAndDeleteTr
27210 69 67 67 65 72 28 64 62 2c 20 70 4f 70 2d 3e 70  igger(db, pOp->p
27220 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20  1, pOp->p4.z);. 
27230 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e   break;.}...#ifn
27240 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
27250 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b 0a  INTEGRITY_CHECK.
27260 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 74 65 67  /* Opcode: Integ
27270 72 69 74 79 43 6b 20 50 31 20 50 32 20 50 33 20  rityCk P1 P2 P3 
27280 2a 20 50 35 0a 2a 2a 0a 2a 2a 20 44 6f 20 61 6e  * P5.**.** Do an
27290 20 61 6e 61 6c 79 73 69 73 20 6f 66 20 74 68 65   analysis of the
272a0 20 63 75 72 72 65 6e 74 6c 79 20 6f 70 65 6e 20   currently open 
272b0 64 61 74 61 62 61 73 65 2e 20 20 53 74 6f 72 65  database.  Store
272c0 20 69 6e 0a 2a 2a 20 72 65 67 69 73 74 65 72 20   in.** register 
272d0 50 31 20 74 68 65 20 74 65 78 74 20 6f 66 20 61  P1 the text of a
272e0 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20  n error message 
272f0 64 65 73 63 72 69 62 69 6e 67 20 61 6e 79 20 70  describing any p
27300 72 6f 62 6c 65 6d 73 2e 0a 2a 2a 20 49 66 20 6e  roblems..** If n
27310 6f 20 70 72 6f 62 6c 65 6d 73 20 61 72 65 20 66  o problems are f
27320 6f 75 6e 64 2c 20 73 74 6f 72 65 20 61 20 4e 55  ound, store a NU
27330 4c 4c 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  LL in register P
27340 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 65 67  1..**.** The reg
27350 69 73 74 65 72 20 50 33 20 63 6f 6e 74 61 69 6e  ister P3 contain
27360 73 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6e 75  s the maximum nu
27370 6d 62 65 72 20 6f 66 20 61 6c 6c 6f 77 65 64 20  mber of allowed 
27380 65 72 72 6f 72 73 2e 0a 2a 2a 20 41 74 20 6d 6f  errors..** At mo
27390 73 74 20 72 65 67 28 50 33 29 20 65 72 72 6f 72  st reg(P3) error
273a0 73 20 77 69 6c 6c 20 62 65 20 72 65 70 6f 72 74  s will be report
273b0 65 64 2e 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20  ed..** In other 
273c0 77 6f 72 64 73 2c 20 74 68 65 20 61 6e 61 6c 79  words, the analy
273d0 73 69 73 20 73 74 6f 70 73 20 61 73 20 73 6f 6f  sis stops as soo
273e0 6e 20 61 73 20 72 65 67 28 50 31 29 20 65 72 72  n as reg(P1) err
273f0 6f 72 73 20 61 72 65 20 0a 2a 2a 20 73 65 65 6e  ors are .** seen
27400 2e 20 20 52 65 67 28 50 31 29 20 69 73 20 75 70  .  Reg(P1) is up
27410 64 61 74 65 64 20 77 69 74 68 20 74 68 65 20 6e  dated with the n
27420 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20  umber of errors 
27430 72 65 6d 61 69 6e 69 6e 67 2e 0a 2a 2a 0a 2a 2a  remaining..**.**
27440 20 54 68 65 20 72 6f 6f 74 20 70 61 67 65 20 6e   The root page n
27450 75 6d 62 65 72 73 20 6f 66 20 61 6c 6c 20 74 61  umbers of all ta
27460 62 6c 65 73 20 69 6e 20 74 68 65 20 64 61 74 61  bles in the data
27470 62 61 73 65 20 61 72 65 20 69 6e 74 65 67 65 72  base are integer
27480 0a 2a 2a 20 73 74 6f 72 65 64 20 69 6e 20 72 65  .** stored in re
27490 67 28 50 31 29 2c 20 72 65 67 28 50 31 2b 31 29  g(P1), reg(P1+1)
274a0 2c 20 72 65 67 28 50 31 2b 32 29 2c 20 2e 2e 2e  , reg(P1+2), ...
274b0 2e 20 20 54 68 65 72 65 20 61 72 65 20 50 32 20  .  There are P2 
274c0 74 61 62 6c 65 73 0a 2a 2a 20 74 6f 74 61 6c 2e  tables.** total.
274d0 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20  .**.** If P5 is 
274e0 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 20 63 68  not zero, the ch
274f0 65 63 6b 20 69 73 20 64 6f 6e 65 20 6f 6e 20 74  eck is done on t
27500 68 65 20 61 75 78 69 6c 69 61 72 79 20 64 61 74  he auxiliary dat
27510 61 62 61 73 65 0a 2a 2a 20 66 69 6c 65 2c 20 6e  abase.** file, n
27520 6f 74 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  ot the main data
27530 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a  base file..**.**
27540 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20   This opcode is 
27550 75 73 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e  used to implemen
27560 74 20 74 68 65 20 69 6e 74 65 67 72 69 74 79 5f  t the integrity_
27570 63 68 65 63 6b 20 70 72 61 67 6d 61 2e 0a 2a 2f  check pragma..*/
27580 0a 63 61 73 65 20 4f 50 5f 49 6e 74 65 67 72 69  .case OP_Integri
27590 74 79 43 6b 3a 20 7b 0a 20 20 69 6e 74 20 6e 52  tyCk: {.  int nR
275a0 6f 6f 74 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d  oot;      /* Num
275b0 62 65 72 20 6f 66 20 74 61 62 6c 65 73 20 74 6f  ber of tables to
275c0 20 63 68 65 63 6b 2e 20 20 28 4e 75 6d 62 65 72   check.  (Number
275d0 20 6f 66 20 72 6f 6f 74 20 70 61 67 65 73 2e 29   of root pages.)
275e0 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 52 6f 6f 74   */.  int *aRoot
275f0 3b 20 20 20 20 20 2f 2a 20 41 72 72 61 79 20 6f  ;     /* Array o
27600 66 20 72 6f 6f 74 70 61 67 65 20 6e 75 6d 62 65  f rootpage numbe
27610 72 73 20 66 6f 72 20 74 61 62 6c 65 73 20 74 6f  rs for tables to
27620 20 62 65 20 63 68 65 63 6b 65 64 20 2a 2f 0a 20   be checked */. 
27630 20 69 6e 74 20 6a 3b 20 20 20 20 20 20 20 20 20   int j;         
27640 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72   /* Loop counter
27650 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20   */.  int nErr; 
27660 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
27670 6f 66 20 65 72 72 6f 72 73 20 72 65 70 6f 72 74  of errors report
27680 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 3b  ed */.  char *z;
27690 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20          /* Text 
276a0 6f 66 20 74 68 65 20 65 72 72 6f 72 20 72 65 70  of the error rep
276b0 6f 72 74 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 6e  ort */.  Mem *pn
276c0 45 72 72 3b 20 20 20 20 20 2f 2a 20 52 65 67 69  Err;     /* Regi
276d0 73 74 65 72 20 6b 65 65 70 69 6e 67 20 74 72 61  ster keeping tra
276e0 63 6b 20 6f 66 20 65 72 72 6f 72 73 20 72 65 6d  ck of errors rem
276f0 61 69 6e 69 6e 67 20 2a 2f 0a 20 20 0a 20 20 6e  aining */.  .  n
27700 52 6f 6f 74 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a  Root = pOp->p2;.
27710 20 20 61 73 73 65 72 74 28 20 6e 52 6f 6f 74 3e    assert( nRoot>
27720 30 20 29 3b 0a 20 20 61 52 6f 6f 74 20 3d 20 73  0 );.  aRoot = s
27730 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61  qlite3DbMallocRa
27740 77 28 64 62 2c 20 73 69 7a 65 6f 66 28 69 6e 74  w(db, sizeof(int
27750 29 2a 28 6e 52 6f 6f 74 2b 31 29 20 29 3b 0a 20  )*(nRoot+1) );. 
27760 20 69 66 28 20 61 52 6f 6f 74 3d 3d 30 20 29 20   if( aRoot==0 ) 
27770 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 61  goto no_mem;.  a
27780 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30  ssert( pOp->p3>0
27790 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e   && pOp->p3<=p->
277a0 6e 4d 65 6d 20 29 3b 0a 20 20 70 6e 45 72 72 20  nMem );.  pnErr 
277b0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
277c0 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 6e 45  ;.  assert( (pnE
277d0 72 72 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  rr->flags & MEM_
277e0 49 6e 74 29 21 3d 30 20 29 3b 0a 20 20 61 73 73  Int)!=0 );.  ass
277f0 65 72 74 28 20 28 70 6e 45 72 72 2d 3e 66 6c 61  ert( (pnErr->fla
27800 67 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45  gs & (MEM_Str|ME
27810 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 29 3b 0a 20  M_Blob))==0 );. 
27820 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
27830 70 2d 3e 70 31 5d 3b 0a 20 20 66 6f 72 28 6a 3d  p->p1];.  for(j=
27840 30 3b 20 6a 3c 6e 52 6f 6f 74 3b 20 6a 2b 2b 29  0; j<nRoot; j++)
27850 7b 0a 20 20 20 20 61 52 6f 6f 74 5b 6a 5d 20 3d  {.    aRoot[j] =
27860 20 28 69 6e 74 29 73 71 6c 69 74 65 33 56 64 62   (int)sqlite3Vdb
27870 65 49 6e 74 56 61 6c 75 65 28 26 70 49 6e 31 5b  eIntValue(&pIn1[
27880 6a 5d 29 3b 0a 20 20 7d 0a 20 20 61 52 6f 6f 74  j]);.  }.  aRoot
27890 5b 6a 5d 20 3d 20 30 3b 0a 20 20 61 73 73 65 72  [j] = 0;.  asser
278a0 74 28 20 70 4f 70 2d 3e 70 35 3c 64 62 2d 3e 6e  t( pOp->p5<db->n
278b0 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  Db );.  assert( 
278c0 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20  (p->btreeMask & 
278d0 28 28 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c 70  (((yDbMask)1)<<p
278e0 4f 70 2d 3e 70 35 29 29 21 3d 30 20 29 3b 0a 20  Op->p5))!=0 );. 
278f0 20 7a 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65   z = sqlite3Btre
27900 65 49 6e 74 65 67 72 69 74 79 43 68 65 63 6b 28  eIntegrityCheck(
27910 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 35 5d  db->aDb[pOp->p5]
27920 2e 70 42 74 2c 20 61 52 6f 6f 74 2c 20 6e 52 6f  .pBt, aRoot, nRo
27930 6f 74 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  ot,.            
27940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27950 20 20 20 20 20 28 69 6e 74 29 70 6e 45 72 72 2d       (int)pnErr-
27960 3e 75 2e 69 2c 20 26 6e 45 72 72 29 3b 0a 20 20  >u.i, &nErr);.  
27970 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62  sqlite3DbFree(db
27980 2c 20 61 52 6f 6f 74 29 3b 0a 20 20 70 6e 45 72  , aRoot);.  pnEr
27990 72 2d 3e 75 2e 69 20 2d 3d 20 6e 45 72 72 3b 0a  r->u.i -= nErr;.
279a0 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
279b0 53 65 74 4e 75 6c 6c 28 70 49 6e 31 29 3b 0a 20  SetNull(pIn1);. 
279c0 20 69 66 28 20 6e 45 72 72 3d 3d 30 20 29 7b 0a   if( nErr==0 ){.
279d0 20 20 20 20 61 73 73 65 72 74 28 20 7a 3d 3d 30      assert( z==0
279e0 20 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20   );.  }else if( 
279f0 7a 3d 3d 30 20 29 7b 0a 20 20 20 20 67 6f 74 6f  z==0 ){.    goto
27a00 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 65 6c 73 65   no_mem;.  }else
27a10 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
27a20 65 4d 65 6d 53 65 74 53 74 72 28 70 49 6e 31 2c  eMemSetStr(pIn1,
27a30 20 7a 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 55   z, -1, SQLITE_U
27a40 54 46 38 2c 20 73 71 6c 69 74 65 33 5f 66 72 65  TF8, sqlite3_fre
27a50 65 29 3b 0a 20 20 7d 0a 20 20 55 50 44 41 54 45  e);.  }.  UPDATE
27a60 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 49  _MAX_BLOBSIZE(pI
27a70 6e 31 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  n1);.  sqlite3Vd
27a80 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67  beChangeEncoding
27a90 28 70 49 6e 31 2c 20 65 6e 63 6f 64 69 6e 67 29  (pIn1, encoding)
27aa0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  ;.  break;.}.#en
27ab0 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
27ac0 49 54 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45  IT_INTEGRITY_CHE
27ad0 43 4b 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65  CK */../* Opcode
27ae0 3a 20 52 6f 77 53 65 74 41 64 64 20 50 31 20 50  : RowSetAdd P1 P
27af0 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 6e  2 * * *.**.** In
27b00 73 65 72 74 20 74 68 65 20 69 6e 74 65 67 65 72  sert the integer
27b10 20 76 61 6c 75 65 20 68 65 6c 64 20 62 79 20 72   value held by r
27b20 65 67 69 73 74 65 72 20 50 32 20 69 6e 74 6f 20  egister P2 into 
27b30 61 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 0a  a boolean index.
27b40 2a 2a 20 68 65 6c 64 20 69 6e 20 72 65 67 69 73  ** held in regis
27b50 74 65 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 41 6e  ter P1..**.** An
27b60 20 61 73 73 65 72 74 69 6f 6e 20 66 61 69 6c 73   assertion fails
27b70 20 69 66 20 50 32 20 69 73 20 6e 6f 74 20 61 6e   if P2 is not an
27b80 20 69 6e 74 65 67 65 72 2e 0a 2a 2f 0a 63 61 73   integer..*/.cas
27b90 65 20 4f 50 5f 52 6f 77 53 65 74 41 64 64 3a 20  e OP_RowSetAdd: 
27ba0 7b 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 2c 20  {       /* in1, 
27bb0 69 6e 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  in2 */.  pIn1 = 
27bc0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
27bd0 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70    pIn2 = &aMem[p
27be0 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72  Op->p2];.  asser
27bf0 74 28 20 28 70 49 6e 32 2d 3e 66 6c 61 67 73 20  t( (pIn2->flags 
27c00 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b  & MEM_Int)!=0 );
27c10 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c  .  if( (pIn1->fl
27c20 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74  ags & MEM_RowSet
27c30 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69  )==0 ){.    sqli
27c40 74 65 33 56 64 62 65 4d 65 6d 53 65 74 52 6f 77  te3VdbeMemSetRow
27c50 53 65 74 28 70 49 6e 31 29 3b 0a 20 20 20 20 69  Set(pIn1);.    i
27c60 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
27c70 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30  & MEM_RowSet)==0
27c80 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
27c90 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 52 6f 77    }.  sqlite3Row
27ca0 53 65 74 49 6e 73 65 72 74 28 70 49 6e 31 2d 3e  SetInsert(pIn1->
27cb0 75 2e 70 52 6f 77 53 65 74 2c 20 70 49 6e 32 2d  u.pRowSet, pIn2-
27cc0 3e 75 2e 69 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  >u.i);.  break;.
27cd0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f  }../* Opcode: Ro
27ce0 77 53 65 74 52 65 61 64 20 50 31 20 50 32 20 50  wSetRead P1 P2 P
27cf0 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 45 78 74 72  3 * *.**.** Extr
27d00 61 63 74 20 74 68 65 20 73 6d 61 6c 6c 65 73 74  act the smallest
27d10 20 76 61 6c 75 65 20 66 72 6f 6d 20 62 6f 6f 6c   value from bool
27d20 65 61 6e 20 69 6e 64 65 78 20 50 31 20 61 6e 64  ean index P1 and
27d30 20 70 75 74 20 74 68 61 74 20 76 61 6c 75 65 20   put that value 
27d40 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72  into.** register
27d50 20 50 33 2e 20 20 4f 72 2c 20 69 66 20 62 6f 6f   P3.  Or, if boo
27d60 6c 65 61 6e 20 69 6e 64 65 78 20 50 31 20 69 73  lean index P1 is
27d70 20 69 6e 69 74 69 61 6c 6c 79 20 65 6d 70 74 79   initially empty
27d80 2c 20 6c 65 61 76 65 20 50 33 0a 2a 2a 20 75 6e  , leave P3.** un
27d90 63 68 61 6e 67 65 64 20 61 6e 64 20 6a 75 6d 70  changed and jump
27da0 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 20   to instruction 
27db0 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  P2..*/.case OP_R
27dc0 6f 77 53 65 74 52 65 61 64 3a 20 7b 20 20 20 20  owSetRead: {    
27dd0 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 2c     /* jump, in1,
27de0 20 6f 75 74 33 20 2a 2f 0a 20 20 69 36 34 20 76   out3 */.  i64 v
27df0 61 6c 3b 0a 20 20 43 48 45 43 4b 5f 46 4f 52 5f  al;.  CHECK_FOR_
27e00 49 4e 54 45 52 52 55 50 54 3b 0a 20 20 70 49 6e  INTERRUPT;.  pIn
27e10 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
27e20 31 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d  1];.  if( (pIn1-
27e30 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77  >flags & MEM_Row
27e40 53 65 74 29 3d 3d 30 20 0a 20 20 20 7c 7c 20 73  Set)==0 .   || s
27e50 71 6c 69 74 65 33 52 6f 77 53 65 74 4e 65 78 74  qlite3RowSetNext
27e60 28 70 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74  (pIn1->u.pRowSet
27e70 2c 20 26 76 61 6c 29 3d 3d 30 0a 20 20 29 7b 0a  , &val)==0.  ){.
27e80 20 20 20 20 2f 2a 20 54 68 65 20 62 6f 6f 6c 65      /* The boole
27e90 61 6e 20 69 6e 64 65 78 20 69 73 20 65 6d 70 74  an index is empt
27ea0 79 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33  y */.    sqlite3
27eb0 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70  VdbeMemSetNull(p
27ec0 49 6e 31 29 3b 0a 20 20 20 20 70 63 20 3d 20 70  In1);.    pc = p
27ed0 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 65  Op->p2 - 1;.  }e
27ee0 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 41 20 76 61  lse{.    /* A va
27ef0 6c 75 65 20 77 61 73 20 70 75 6c 6c 65 64 20 66  lue was pulled f
27f00 72 6f 6d 20 74 68 65 20 69 6e 64 65 78 20 2a 2f  rom the index */
27f10 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
27f20 4d 65 6d 53 65 74 49 6e 74 36 34 28 26 61 4d 65  MemSetInt64(&aMe
27f30 6d 5b 70 4f 70 2d 3e 70 33 5d 2c 20 76 61 6c 29  m[pOp->p3], val)
27f40 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
27f50 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77  ../* Opcode: Row
27f60 53 65 74 54 65 73 74 20 50 31 20 50 32 20 50 33  SetTest P1 P2 P3
27f70 20 50 34 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74   P4.**.** Regist
27f80 65 72 20 50 33 20 69 73 20 61 73 73 75 6d 65 64  er P3 is assumed
27f90 20 74 6f 20 68 6f 6c 64 20 61 20 36 34 2d 62 69   to hold a 64-bi
27fa0 74 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 2e  t integer value.
27fb0 20 49 66 20 72 65 67 69 73 74 65 72 20 50 31 0a   If register P1.
27fc0 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 61 20 52 6f  ** contains a Ro
27fd0 77 53 65 74 20 6f 62 6a 65 63 74 20 61 6e 64 20  wSet object and 
27fe0 74 68 61 74 20 52 6f 77 53 65 74 20 6f 62 6a 65  that RowSet obje
27ff0 63 74 20 63 6f 6e 74 61 69 6e 73 0a 2a 2a 20 74  ct contains.** t
28000 68 65 20 76 61 6c 75 65 20 68 65 6c 64 20 69 6e  he value held in
28010 20 50 33 2c 20 6a 75 6d 70 20 74 6f 20 72 65 67   P3, jump to reg
28020 69 73 74 65 72 20 50 32 2e 20 4f 74 68 65 72 77  ister P2. Otherw
28030 69 73 65 2c 20 69 6e 73 65 72 74 20 74 68 65 0a  ise, insert the.
28040 2a 2a 20 69 6e 74 65 67 65 72 20 69 6e 20 50 33  ** integer in P3
28050 20 69 6e 74 6f 20 74 68 65 20 52 6f 77 53 65 74   into the RowSet
28060 20 61 6e 64 20 63 6f 6e 74 69 6e 75 65 20 6f 6e   and continue on
28070 20 74 6f 20 74 68 65 0a 2a 2a 20 6e 65 78 74 20   to the.** next 
28080 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68  opcode..**.** Th
28090 65 20 52 6f 77 53 65 74 20 6f 62 6a 65 63 74 20  e RowSet object 
280a0 69 73 20 6f 70 74 69 6d 69 7a 65 64 20 66 6f 72  is optimized for
280b0 20 74 68 65 20 63 61 73 65 20 77 68 65 72 65 20   the case where 
280c0 73 75 63 63 65 73 73 69 76 65 20 73 65 74 73 0a  successive sets.
280d0 2a 2a 20 6f 66 20 69 6e 74 65 67 65 72 73 2c 20  ** of integers, 
280e0 77 68 65 72 65 20 65 61 63 68 20 73 65 74 20 63  where each set c
280f0 6f 6e 74 61 69 6e 73 20 6e 6f 20 64 75 70 6c 69  ontains no dupli
28100 63 61 74 65 73 2e 20 45 61 63 68 20 73 65 74 0a  cates. Each set.
28110 2a 2a 20 6f 66 20 76 61 6c 75 65 73 20 69 73 20  ** of values is 
28120 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 61 20  identified by a 
28130 75 6e 69 71 75 65 20 50 34 20 76 61 6c 75 65 2e  unique P4 value.
28140 20 54 68 65 20 66 69 72 73 74 20 73 65 74 0a 2a   The first set.*
28150 2a 20 6d 75 73 74 20 68 61 76 65 20 50 34 3d 3d  * must have P4==
28160 30 2c 20 74 68 65 20 66 69 6e 61 6c 20 73 65 74  0, the final set
28170 20 50 34 3d 2d 31 2e 20 20 50 34 20 6d 75 73 74   P4=-1.  P4 must
28180 20 62 65 20 65 69 74 68 65 72 20 2d 31 20 6f 72   be either -1 or
28190 0a 2a 2a 20 6e 6f 6e 2d 6e 65 67 61 74 69 76 65  .** non-negative
281a0 2e 20 20 46 6f 72 20 6e 6f 6e 2d 6e 65 67 61 74  .  For non-negat
281b0 69 76 65 20 76 61 6c 75 65 73 20 6f 66 20 50 34  ive values of P4
281c0 20 6f 6e 6c 79 20 74 68 65 20 6c 6f 77 65 72 20   only the lower 
281d0 34 0a 2a 2a 20 62 69 74 73 20 61 72 65 20 73 69  4.** bits are si
281e0 67 6e 69 66 69 63 61 6e 74 2e 0a 2a 2a 0a 2a 2a  gnificant..**.**
281f0 20 54 68 69 73 20 61 6c 6c 6f 77 73 20 6f 70 74   This allows opt
28200 69 6d 69 7a 61 74 69 6f 6e 73 3a 20 28 61 29 20  imizations: (a) 
28210 77 68 65 6e 20 50 34 3d 3d 30 20 74 68 65 72 65  when P4==0 there
28220 20 69 73 20 6e 6f 20 6e 65 65 64 20 74 6f 20 74   is no need to t
28230 65 73 74 0a 2a 2a 20 74 68 65 20 72 6f 77 73 65  est.** the rowse
28240 74 20 6f 62 6a 65 63 74 20 66 6f 72 20 50 33 2c  t object for P3,
28250 20 61 73 20 69 74 20 69 73 20 67 75 61 72 61 6e   as it is guaran
28260 74 65 65 64 20 6e 6f 74 20 74 6f 20 63 6f 6e 74  teed not to cont
28270 61 69 6e 20 69 74 2c 0a 2a 2a 20 28 62 29 20 77  ain it,.** (b) w
28280 68 65 6e 20 50 34 3d 3d 2d 31 20 74 68 65 72 65  hen P4==-1 there
28290 20 69 73 20 6e 6f 20 6e 65 65 64 20 74 6f 20 69   is no need to i
282a0 6e 73 65 72 74 20 74 68 65 20 76 61 6c 75 65 2c  nsert the value,
282b0 20 61 73 20 69 74 20 77 69 6c 6c 0a 2a 2a 20 6e   as it will.** n
282c0 65 76 65 72 20 62 65 20 74 65 73 74 65 64 20 66  ever be tested f
282d0 6f 72 2c 20 61 6e 64 20 28 63 29 20 77 68 65 6e  or, and (c) when
282e0 20 61 20 76 61 6c 75 65 20 74 68 61 74 20 69 73   a value that is
282f0 20 70 61 72 74 20 6f 66 20 73 65 74 20 58 20 69   part of set X i
28300 73 0a 2a 2a 20 69 6e 73 65 72 74 65 64 2c 20 74  s.** inserted, t
28310 68 65 72 65 20 69 73 20 6e 6f 20 6e 65 65 64 20  here is no need 
28320 74 6f 20 73 65 61 72 63 68 20 74 6f 20 73 65 65  to search to see
28330 20 69 66 20 74 68 65 20 73 61 6d 65 20 76 61 6c   if the same val
28340 75 65 20 77 61 73 0a 2a 2a 20 70 72 65 76 69 6f  ue was.** previo
28350 75 73 6c 79 20 69 6e 73 65 72 74 65 64 20 61 73  usly inserted as
28360 20 70 61 72 74 20 6f 66 20 73 65 74 20 58 20 28   part of set X (
28370 6f 6e 6c 79 20 69 66 20 69 74 20 77 61 73 20 70  only if it was p
28380 72 65 76 69 6f 75 73 6c 79 0a 2a 2a 20 69 6e 73  reviously.** ins
28390 65 72 74 65 64 20 61 73 20 70 61 72 74 20 6f 66  erted as part of
283a0 20 73 6f 6d 65 20 6f 74 68 65 72 20 73 65 74 29   some other set)
283b0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77  ..*/.case OP_Row
283c0 53 65 74 54 65 73 74 3a 20 7b 20 20 20 20 20 20  SetTest: {      
283d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
283e0 2a 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33  * jump, in1, in3
283f0 20 2a 2f 0a 20 20 69 6e 74 20 69 53 65 74 3b 0a   */.  int iSet;.
28400 20 20 69 6e 74 20 65 78 69 73 74 73 3b 0a 0a 20    int exists;.. 
28410 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
28420 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 33 20 3d  p->p1];.  pIn3 =
28430 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
28440 0a 20 20 69 53 65 74 20 3d 20 70 4f 70 2d 3e 70  .  iSet = pOp->p
28450 34 2e 69 3b 0a 20 20 61 73 73 65 72 74 28 20 70  4.i;.  assert( p
28460 49 6e 33 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49  In3->flags&MEM_I
28470 6e 74 20 29 3b 0a 0a 20 20 2f 2a 20 49 66 20 74  nt );..  /* If t
28480 68 65 72 65 20 69 73 20 61 6e 79 74 68 69 6e 67  here is anything
28490 20 6f 74 68 65 72 20 74 68 61 6e 20 61 20 72 6f   other than a ro
284a0 77 73 65 74 20 6f 62 6a 65 63 74 20 69 6e 20 6d  wset object in m
284b0 65 6d 6f 72 79 20 63 65 6c 6c 20 50 31 2c 0a 20  emory cell P1,. 
284c0 20 2a 2a 20 64 65 6c 65 74 65 20 69 74 20 6e 6f   ** delete it no
284d0 77 20 61 6e 64 20 69 6e 69 74 69 61 6c 69 7a 65  w and initialize
284e0 20 50 31 20 77 69 74 68 20 61 6e 20 65 6d 70 74   P1 with an empt
284f0 79 20 72 6f 77 73 65 74 0a 20 20 2a 2f 0a 20 20  y rowset.  */.  
28500 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
28510 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d   & MEM_RowSet)==
28520 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  0 ){.    sqlite3
28530 56 64 62 65 4d 65 6d 53 65 74 52 6f 77 53 65 74  VdbeMemSetRowSet
28540 28 70 49 6e 31 29 3b 0a 20 20 20 20 69 66 28 20  (pIn1);.    if( 
28550 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn1->flags & M
28560 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29 20  EM_RowSet)==0 ) 
28570 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d  goto no_mem;.  }
28580 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
28590 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33  >p4type==P4_INT3
285a0 32 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69  2 );.  assert( i
285b0 53 65 74 3d 3d 2d 31 20 7c 7c 20 69 53 65 74 3e  Set==-1 || iSet>
285c0 3d 30 20 29 3b 0a 20 20 69 66 28 20 69 53 65 74  =0 );.  if( iSet
285d0 20 29 7b 0a 20 20 20 20 65 78 69 73 74 73 20 3d   ){.    exists =
285e0 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 54 65   sqlite3RowSetTe
285f0 73 74 28 70 49 6e 31 2d 3e 75 2e 70 52 6f 77 53  st(pIn1->u.pRowS
28600 65 74 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20  et, .           
28610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28620 20 20 20 20 28 75 38 29 28 69 53 65 74 3e 3d 30      (u8)(iSet>=0
28630 20 3f 20 69 53 65 74 20 26 20 30 78 66 20 3a 20   ? iSet & 0xf : 
28640 30 78 66 66 29 2c 0a 20 20 20 20 20 20 20 20 20  0xff),.         
28650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28660 20 20 20 20 20 20 70 49 6e 33 2d 3e 75 2e 69 29        pIn3->u.i)
28670 3b 0a 20 20 20 20 69 66 28 20 65 78 69 73 74 73  ;.    if( exists
28680 20 29 7b 0a 20 20 20 20 20 20 70 63 20 3d 20 70   ){.      pc = p
28690 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20  Op->p2 - 1;.    
286a0 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20    break;.    }. 
286b0 20 7d 0a 20 20 69 66 28 20 69 53 65 74 3e 3d 30   }.  if( iSet>=0
286c0 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 52   ){.    sqlite3R
286d0 6f 77 53 65 74 49 6e 73 65 72 74 28 70 49 6e 31  owSetInsert(pIn1
286e0 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20 70 49 6e  ->u.pRowSet, pIn
286f0 33 2d 3e 75 2e 69 29 3b 0a 20 20 7d 0a 20 20 62  3->u.i);.  }.  b
28700 72 65 61 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e 64 65  reak;.}...#ifnde
28710 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52  f SQLITE_OMIT_TR
28720 49 47 47 45 52 0a 0a 2f 2a 20 4f 70 63 6f 64 65  IGGER../* Opcode
28730 3a 20 50 72 6f 67 72 61 6d 20 50 31 20 50 32 20  : Program P1 P2 
28740 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 45 78  P3 P4 *.**.** Ex
28750 65 63 75 74 65 20 74 68 65 20 74 72 69 67 67 65  ecute the trigge
28760 72 20 70 72 6f 67 72 61 6d 20 70 61 73 73 65 64  r program passed
28770 20 61 73 20 50 34 20 28 74 79 70 65 20 50 34 5f   as P4 (type P4_
28780 53 55 42 50 52 4f 47 52 41 4d 29 2e 20 0a 2a 2a  SUBPROGRAM). .**
28790 0a 2a 2a 20 50 31 20 63 6f 6e 74 61 69 6e 73 20  .** P1 contains 
287a0 74 68 65 20 61 64 64 72 65 73 73 20 6f 66 20 74  the address of t
287b0 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74  he memory cell t
287c0 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65  hat contains the
287d0 20 66 69 72 73 74 20 6d 65 6d 6f 72 79 20 0a 2a   first memory .*
287e0 2a 20 63 65 6c 6c 20 69 6e 20 61 6e 20 61 72 72  * cell in an arr
287f0 61 79 20 6f 66 20 76 61 6c 75 65 73 20 75 73 65  ay of values use
28800 64 20 61 73 20 61 72 67 75 6d 65 6e 74 73 20 74  d as arguments t
28810 6f 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72 61  o the sub-progra
28820 6d 2e 20 50 32 20 0a 2a 2a 20 63 6f 6e 74 61 69  m. P2 .** contai
28830 6e 73 20 74 68 65 20 61 64 64 72 65 73 73 20 74  ns the address t
28840 6f 20 6a 75 6d 70 20 74 6f 20 69 66 20 74 68 65  o jump to if the
28850 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 74 68 72   sub-program thr
28860 6f 77 73 20 61 6e 20 49 47 4e 4f 52 45 20 0a 2a  ows an IGNORE .*
28870 2a 20 65 78 63 65 70 74 69 6f 6e 20 75 73 69 6e  * exception usin
28880 67 20 74 68 65 20 52 41 49 53 45 28 29 20 66 75  g the RAISE() fu
28890 6e 63 74 69 6f 6e 2e 20 52 65 67 69 73 74 65 72  nction. Register
288a0 20 50 33 20 63 6f 6e 74 61 69 6e 73 20 74 68 65   P3 contains the
288b0 20 61 64 64 72 65 73 73 20 0a 2a 2a 20 6f 66 20   address .** of 
288c0 61 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69 6e  a memory cell in
288d0 20 74 68 69 73 20 28 74 68 65 20 70 61 72 65 6e   this (the paren
288e0 74 29 20 56 4d 20 74 68 61 74 20 69 73 20 75 73  t) VM that is us
288f0 65 64 20 74 6f 20 61 6c 6c 6f 63 61 74 65 20 74  ed to allocate t
28900 68 65 20 0a 2a 2a 20 6d 65 6d 6f 72 79 20 72 65  he .** memory re
28910 71 75 69 72 65 64 20 62 79 20 74 68 65 20 73 75  quired by the su
28920 62 2d 76 64 62 65 20 61 74 20 72 75 6e 74 69 6d  b-vdbe at runtim
28930 65 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61  e..**.** P4 is a
28940 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20   pointer to the 
28950 56 4d 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  VM containing th
28960 65 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61  e trigger progra
28970 6d 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 72  m..*/.case OP_Pr
28980 6f 67 72 61 6d 3a 20 7b 20 20 20 20 20 20 20 20  ogram: {        
28990 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e 74  /* jump */.  int
289a0 20 6e 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20   nMem;          
289b0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
289c0 66 20 6d 65 6d 6f 72 79 20 72 65 67 69 73 74 65  f memory registe
289d0 72 73 20 66 6f 72 20 73 75 62 2d 70 72 6f 67 72  rs for sub-progr
289e0 61 6d 20 2a 2f 0a 20 20 69 6e 74 20 6e 42 79 74  am */.  int nByt
289f0 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
28a00 2f 2a 20 42 79 74 65 73 20 6f 66 20 72 75 6e 74  /* Bytes of runt
28a10 69 6d 65 20 73 70 61 63 65 20 72 65 71 75 69 72  ime space requir
28a20 65 64 20 66 6f 72 20 73 75 62 2d 70 72 6f 67 72  ed for sub-progr
28a30 61 6d 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 52 74  am */.  Mem *pRt
28a40 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
28a50 2f 2a 20 52 65 67 69 73 74 65 72 20 74 6f 20 61  /* Register to a
28a60 6c 6c 6f 63 61 74 65 20 72 75 6e 74 69 6d 65 20  llocate runtime 
28a70 73 70 61 63 65 20 2a 2f 0a 20 20 4d 65 6d 20 2a  space */.  Mem *
28a80 70 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20  pMem;           
28a90 20 20 20 2f 2a 20 55 73 65 64 20 74 6f 20 69 74     /* Used to it
28aa0 65 72 61 74 65 20 74 68 72 6f 75 67 68 20 6d 65  erate through me
28ab0 6d 6f 72 79 20 63 65 6c 6c 73 20 2a 2f 0a 20 20  mory cells */.  
28ac0 4d 65 6d 20 2a 70 45 6e 64 3b 20 20 20 20 20 20  Mem *pEnd;      
28ad0 20 20 20 20 20 20 20 20 2f 2a 20 4c 61 73 74 20          /* Last 
28ae0 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69 6e 20 6e  memory cell in n
28af0 65 77 20 61 72 72 61 79 20 2a 2f 0a 20 20 56 64  ew array */.  Vd
28b00 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b  beFrame *pFrame;
28b10 20 20 20 20 20 20 2f 2a 20 4e 65 77 20 76 64 62        /* New vdb
28b20 65 20 66 72 61 6d 65 20 74 6f 20 65 78 65 63 75  e frame to execu
28b30 74 65 20 69 6e 20 2a 2f 0a 20 20 53 75 62 50 72  te in */.  SubPr
28b40 6f 67 72 61 6d 20 2a 70 50 72 6f 67 72 61 6d 3b  ogram *pProgram;
28b50 20 20 20 2f 2a 20 53 75 62 2d 70 72 6f 67 72 61     /* Sub-progra
28b60 6d 20 74 6f 20 65 78 65 63 75 74 65 20 2a 2f 0a  m to execute */.
28b70 20 20 76 6f 69 64 20 2a 74 3b 20 20 20 20 20 20    void *t;      
28b80 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b            /* Tok
28b90 65 6e 20 69 64 65 6e 74 69 66 79 69 6e 67 20 74  en identifying t
28ba0 72 69 67 67 65 72 20 2a 2f 0a 0a 20 20 70 50 72  rigger */..  pPr
28bb0 6f 67 72 61 6d 20 3d 20 70 4f 70 2d 3e 70 34 2e  ogram = pOp->p4.
28bc0 70 50 72 6f 67 72 61 6d 3b 0a 20 20 70 52 74 20  pProgram;.  pRt 
28bd0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
28be0 3b 0a 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49  ;.  assert( memI
28bf0 73 56 61 6c 69 64 28 70 52 74 29 20 29 3b 0a 20  sValid(pRt) );. 
28c00 20 61 73 73 65 72 74 28 20 70 50 72 6f 67 72 61   assert( pProgra
28c10 6d 2d 3e 6e 4f 70 3e 30 20 29 3b 0a 20 20 0a 20  m->nOp>0 );.  . 
28c20 20 2f 2a 20 49 66 20 74 68 65 20 70 35 20 66 6c   /* If the p5 fl
28c30 61 67 20 69 73 20 63 6c 65 61 72 2c 20 74 68 65  ag is clear, the
28c40 6e 20 72 65 63 75 72 73 69 76 65 20 69 6e 76 6f  n recursive invo
28c50 63 61 74 69 6f 6e 20 6f 66 20 74 72 69 67 67 65  cation of trigge
28c60 72 73 20 69 73 20 0a 20 20 2a 2a 20 64 69 73 61  rs is .  ** disa
28c70 62 6c 65 64 20 66 6f 72 20 62 61 63 6b 77 61 72  bled for backwar
28c80 64 73 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79  ds compatibility
28c90 20 28 70 35 20 69 73 20 73 65 74 20 69 66 20 74   (p5 is set if t
28ca0 68 69 73 20 73 75 62 2d 70 72 6f 67 72 61 6d 0a  his sub-program.
28cb0 20 20 2a 2a 20 69 73 20 72 65 61 6c 6c 79 20 61    ** is really a
28cc0 20 74 72 69 67 67 65 72 2c 20 6e 6f 74 20 61 20   trigger, not a 
28cd0 66 6f 72 65 69 67 6e 20 6b 65 79 20 61 63 74 69  foreign key acti
28ce0 6f 6e 2c 20 61 6e 64 20 74 68 65 20 66 6c 61 67  on, and the flag
28cf0 20 73 65 74 0a 20 20 2a 2a 20 61 6e 64 20 63 6c   set.  ** and cl
28d00 65 61 72 65 64 20 62 79 20 74 68 65 20 22 50 52  eared by the "PR
28d10 41 47 4d 41 20 72 65 63 75 72 73 69 76 65 5f 74  AGMA recursive_t
28d20 72 69 67 67 65 72 73 22 20 63 6f 6d 6d 61 6e 64  riggers" command
28d30 20 69 73 20 63 6c 65 61 72 29 2e 0a 20 20 2a 2a   is clear)..  **
28d40 20 0a 20 20 2a 2a 20 49 74 20 69 73 20 72 65 63   .  ** It is rec
28d50 75 72 73 69 76 65 20 69 6e 76 6f 63 61 74 69 6f  ursive invocatio
28d60 6e 20 6f 66 20 74 72 69 67 67 65 72 73 2c 20 61  n of triggers, a
28d70 74 20 74 68 65 20 53 51 4c 20 6c 65 76 65 6c 2c  t the SQL level,
28d80 20 74 68 61 74 20 69 73 20 0a 20 20 2a 2a 20 64   that is .  ** d
28d90 69 73 61 62 6c 65 64 2e 20 49 6e 20 73 6f 6d 65  isabled. In some
28da0 20 63 61 73 65 73 20 61 20 73 69 6e 67 6c 65 20   cases a single 
28db0 74 72 69 67 67 65 72 20 6d 61 79 20 67 65 6e 65  trigger may gene
28dc0 72 61 74 65 20 6d 6f 72 65 20 74 68 61 6e 20 6f  rate more than o
28dd0 6e 65 20 0a 20 20 2a 2a 20 53 75 62 50 72 6f 67  ne .  ** SubProg
28de0 72 61 6d 20 28 69 66 20 74 68 65 20 74 72 69 67  ram (if the trig
28df0 67 65 72 20 6d 61 79 20 62 65 20 65 78 65 63 75  ger may be execu
28e00 74 65 64 20 77 69 74 68 20 6d 6f 72 65 20 74 68  ted with more th
28e10 61 6e 20 6f 6e 65 20 64 69 66 66 65 72 65 6e 74  an one different
28e20 20 0a 20 20 2a 2a 20 4f 4e 20 43 4f 4e 46 4c 49   .  ** ON CONFLI
28e30 43 54 20 61 6c 67 6f 72 69 74 68 6d 29 2e 20 53  CT algorithm). S
28e40 75 62 50 72 6f 67 72 61 6d 20 73 74 72 75 63 74  ubProgram struct
28e50 75 72 65 73 20 61 73 73 6f 63 69 61 74 65 64 20  ures associated 
28e60 77 69 74 68 20 61 0a 20 20 2a 2a 20 73 69 6e 67  with a.  ** sing
28e70 6c 65 20 74 72 69 67 67 65 72 20 61 6c 6c 20 68  le trigger all h
28e80 61 76 65 20 74 68 65 20 73 61 6d 65 20 76 61 6c  ave the same val
28e90 75 65 20 66 6f 72 20 74 68 65 20 53 75 62 50 72  ue for the SubPr
28ea0 6f 67 72 61 6d 2e 74 6f 6b 65 6e 20 0a 20 20 2a  ogram.token .  *
28eb0 2a 20 76 61 72 69 61 62 6c 65 2e 20 20 2a 2f 0a  * variable.  */.
28ec0 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 29 7b    if( pOp->p5 ){
28ed0 0a 20 20 20 20 74 20 3d 20 70 50 72 6f 67 72 61  .    t = pProgra
28ee0 6d 2d 3e 74 6f 6b 65 6e 3b 0a 20 20 20 20 66 6f  m->token;.    fo
28ef0 72 28 70 46 72 61 6d 65 3d 70 2d 3e 70 46 72 61  r(pFrame=p->pFra
28f00 6d 65 3b 20 70 46 72 61 6d 65 20 26 26 20 70 46  me; pFrame && pF
28f10 72 61 6d 65 2d 3e 74 6f 6b 65 6e 21 3d 74 3b 20  rame->token!=t; 
28f20 70 46 72 61 6d 65 3d 70 46 72 61 6d 65 2d 3e 70  pFrame=pFrame->p
28f30 50 61 72 65 6e 74 29 3b 0a 20 20 20 20 69 66 28  Parent);.    if(
28f40 20 70 46 72 61 6d 65 20 29 20 62 72 65 61 6b 3b   pFrame ) break;
28f50 0a 20 20 7d 0a 0a 20 20 69 66 28 20 70 2d 3e 6e  .  }..  if( p->n
28f60 46 72 61 6d 65 3e 3d 64 62 2d 3e 61 4c 69 6d 69  Frame>=db->aLimi
28f70 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 54  t[SQLITE_LIMIT_T
28f80 52 49 47 47 45 52 5f 44 45 50 54 48 5d 20 29 7b  RIGGER_DEPTH] ){
28f90 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45  .    rc = SQLITE
28fa0 5f 45 52 52 4f 52 3b 0a 20 20 20 20 73 71 6c 69  _ERROR;.    sqli
28fb0 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d  te3SetString(&p-
28fc0 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 74  >zErrMsg, db, "t
28fd0 6f 6f 20 6d 61 6e 79 20 6c 65 76 65 6c 73 20 6f  oo many levels o
28fe0 66 20 74 72 69 67 67 65 72 20 72 65 63 75 72 73  f trigger recurs
28ff0 69 6f 6e 22 29 3b 0a 20 20 20 20 62 72 65 61 6b  ion");.    break
29000 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 52 65 67 69  ;.  }..  /* Regi
29010 73 74 65 72 20 70 52 74 20 69 73 20 75 73 65 64  ster pRt is used
29020 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20 6d 65   to store the me
29030 6d 6f 72 79 20 72 65 71 75 69 72 65 64 20 74 6f  mory required to
29040 20 73 61 76 65 20 74 68 65 20 73 74 61 74 65 0a   save the state.
29050 20 20 2a 2a 20 6f 66 20 74 68 65 20 63 75 72 72    ** of the curr
29060 65 6e 74 20 70 72 6f 67 72 61 6d 2c 20 61 6e 64  ent program, and
29070 20 74 68 65 20 6d 65 6d 6f 72 79 20 72 65 71 75   the memory requ
29080 69 72 65 64 20 61 74 20 72 75 6e 74 69 6d 65 20  ired at runtime 
29090 74 6f 20 65 78 65 63 75 74 65 0a 20 20 2a 2a 20  to execute.  ** 
290a0 74 68 65 20 74 72 69 67 67 65 72 20 70 72 6f 67  the trigger prog
290b0 72 61 6d 2e 20 49 66 20 74 68 69 73 20 74 72 69  ram. If this tri
290c0 67 67 65 72 20 68 61 73 20 62 65 65 6e 20 66 69  gger has been fi
290d0 72 65 64 20 62 65 66 6f 72 65 2c 20 74 68 65 6e  red before, then
290e0 20 70 52 74 20 0a 20 20 2a 2a 20 69 73 20 61 6c   pRt .  ** is al
290f0 72 65 61 64 79 20 61 6c 6c 6f 63 61 74 65 64 2e  ready allocated.
29100 20 4f 74 68 65 72 77 69 73 65 2c 20 69 74 20 6d   Otherwise, it m
29110 75 73 74 20 62 65 20 69 6e 69 74 69 61 6c 69 7a  ust be initializ
29120 65 64 2e 20 20 2a 2f 0a 20 20 69 66 28 20 28 70  ed.  */.  if( (p
29130 52 74 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 46 72  Rt->flags&MEM_Fr
29140 61 6d 65 29 3d 3d 30 20 29 7b 0a 20 20 20 20 2f  ame)==0 ){.    /
29150 2a 20 53 75 62 50 72 6f 67 72 61 6d 2e 6e 4d 65  * SubProgram.nMe
29160 6d 20 69 73 20 73 65 74 20 74 6f 20 74 68 65 20  m is set to the 
29170 6e 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79  number of memory
29180 20 63 65 6c 6c 73 20 75 73 65 64 20 62 79 20 74   cells used by t
29190 68 65 20 0a 20 20 20 20 2a 2a 20 70 72 6f 67 72  he .    ** progr
291a0 61 6d 20 73 74 6f 72 65 64 20 69 6e 20 53 75 62  am stored in Sub
291b0 50 72 6f 67 72 61 6d 2e 61 4f 70 2e 20 41 73 20  Program.aOp. As 
291c0 77 65 6c 6c 20 61 73 20 74 68 65 73 65 2c 20 6f  well as these, o
291d0 6e 65 20 6d 65 6d 6f 72 79 0a 20 20 20 20 2a 2a  ne memory.    **
291e0 20 63 65 6c 6c 20 69 73 20 72 65 71 75 69 72 65   cell is require
291f0 64 20 66 6f 72 20 65 61 63 68 20 63 75 72 73 6f  d for each curso
29200 72 20 75 73 65 64 20 62 79 20 74 68 65 20 70 72  r used by the pr
29210 6f 67 72 61 6d 2e 20 53 65 74 20 6c 6f 63 61 6c  ogram. Set local
29220 0a 20 20 20 20 2a 2a 20 76 61 72 69 61 62 6c 65  .    ** variable
29230 20 6e 4d 65 6d 20 28 61 6e 64 20 6c 61 74 65 72   nMem (and later
29240 2c 20 56 64 62 65 46 72 61 6d 65 2e 6e 43 68 69  , VdbeFrame.nChi
29250 6c 64 4d 65 6d 29 20 74 6f 20 74 68 69 73 20 76  ldMem) to this v
29260 61 6c 75 65 2e 0a 20 20 20 20 2a 2f 0a 20 20 20  alue..    */.   
29270 20 6e 4d 65 6d 20 3d 20 70 50 72 6f 67 72 61 6d   nMem = pProgram
29280 2d 3e 6e 4d 65 6d 20 2b 20 70 50 72 6f 67 72 61  ->nMem + pProgra
29290 6d 2d 3e 6e 43 73 72 3b 0a 20 20 20 20 6e 42 79  m->nCsr;.    nBy
292a0 74 65 20 3d 20 52 4f 55 4e 44 38 28 73 69 7a 65  te = ROUND8(size
292b0 6f 66 28 56 64 62 65 46 72 61 6d 65 29 29 0a 20  of(VdbeFrame)). 
292c0 20 20 20 20 20 20 20 20 20 20 20 20 20 2b 20 6e               + n
292d0 4d 65 6d 20 2a 20 73 69 7a 65 6f 66 28 4d 65 6d  Mem * sizeof(Mem
292e0 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ).              
292f0 2b 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72  + pProgram->nCsr
29300 20 2a 20 73 69 7a 65 6f 66 28 56 64 62 65 43 75   * sizeof(VdbeCu
29310 72 73 6f 72 20 2a 29 3b 0a 20 20 20 20 70 46 72  rsor *);.    pFr
29320 61 6d 65 20 3d 20 73 71 6c 69 74 65 33 44 62 4d  ame = sqlite3DbM
29330 61 6c 6c 6f 63 5a 65 72 6f 28 64 62 2c 20 6e 42  allocZero(db, nB
29340 79 74 65 29 3b 0a 20 20 20 20 69 66 28 20 21 70  yte);.    if( !p
29350 46 72 61 6d 65 20 29 7b 0a 20 20 20 20 20 20 67  Frame ){.      g
29360 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20  oto no_mem;.    
29370 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  }.    sqlite3Vdb
29380 65 4d 65 6d 52 65 6c 65 61 73 65 28 70 52 74 29  eMemRelease(pRt)
29390 3b 0a 20 20 20 20 70 52 74 2d 3e 66 6c 61 67 73  ;.    pRt->flags
293a0 20 3d 20 4d 45 4d 5f 46 72 61 6d 65 3b 0a 20 20   = MEM_Frame;.  
293b0 20 20 70 52 74 2d 3e 75 2e 70 46 72 61 6d 65 20    pRt->u.pFrame 
293c0 3d 20 70 46 72 61 6d 65 3b 0a 0a 20 20 20 20 70  = pFrame;..    p
293d0 46 72 61 6d 65 2d 3e 76 20 3d 20 70 3b 0a 20 20  Frame->v = p;.  
293e0 20 20 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64    pFrame->nChild
293f0 4d 65 6d 20 3d 20 6e 4d 65 6d 3b 0a 20 20 20 20  Mem = nMem;.    
29400 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 43 73  pFrame->nChildCs
29410 72 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43  r = pProgram->nC
29420 73 72 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e  sr;.    pFrame->
29430 70 63 20 3d 20 70 63 3b 0a 20 20 20 20 70 46 72  pc = pc;.    pFr
29440 61 6d 65 2d 3e 61 4d 65 6d 20 3d 20 70 2d 3e 61  ame->aMem = p->a
29450 4d 65 6d 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d  Mem;.    pFrame-
29460 3e 6e 4d 65 6d 20 3d 20 70 2d 3e 6e 4d 65 6d 3b  >nMem = p->nMem;
29470 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 61 70 43  .    pFrame->apC
29480 73 72 20 3d 20 70 2d 3e 61 70 43 73 72 3b 0a 20  sr = p->apCsr;. 
29490 20 20 20 70 46 72 61 6d 65 2d 3e 6e 43 75 72 73     pFrame->nCurs
294a0 6f 72 20 3d 20 70 2d 3e 6e 43 75 72 73 6f 72 3b  or = p->nCursor;
294b0 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 61 4f 70  .    pFrame->aOp
294c0 20 3d 20 70 2d 3e 61 4f 70 3b 0a 20 20 20 20 70   = p->aOp;.    p
294d0 46 72 61 6d 65 2d 3e 6e 4f 70 20 3d 20 70 2d 3e  Frame->nOp = p->
294e0 6e 4f 70 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d  nOp;.    pFrame-
294f0 3e 74 6f 6b 65 6e 20 3d 20 70 50 72 6f 67 72 61  >token = pProgra
29500 6d 2d 3e 74 6f 6b 65 6e 3b 0a 0a 20 20 20 20 70  m->token;..    p
29510 45 6e 64 20 3d 20 26 56 64 62 65 46 72 61 6d 65  End = &VdbeFrame
29520 4d 65 6d 28 70 46 72 61 6d 65 29 5b 70 46 72 61  Mem(pFrame)[pFra
29530 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 5d 3b 0a  me->nChildMem];.
29540 20 20 20 20 66 6f 72 28 70 4d 65 6d 3d 56 64 62      for(pMem=Vdb
29550 65 46 72 61 6d 65 4d 65 6d 28 70 46 72 61 6d 65  eFrameMem(pFrame
29560 29 3b 20 70 4d 65 6d 21 3d 70 45 6e 64 3b 20 70  ); pMem!=pEnd; p
29570 4d 65 6d 2b 2b 29 7b 0a 20 20 20 20 20 20 70 4d  Mem++){.      pM
29580 65 6d 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  em->flags = MEM_
29590 4e 75 6c 6c 3b 0a 20 20 20 20 20 20 70 4d 65 6d  Null;.      pMem
295a0 2d 3e 64 62 20 3d 20 64 62 3b 0a 20 20 20 20 7d  ->db = db;.    }
295b0 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 46  .  }else{.    pF
295c0 72 61 6d 65 20 3d 20 70 52 74 2d 3e 75 2e 70 46  rame = pRt->u.pF
295d0 72 61 6d 65 3b 0a 20 20 20 20 61 73 73 65 72 74  rame;.    assert
295e0 28 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4d 65 6d  ( pProgram->nMem
295f0 2b 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3d  +pProgram->nCsr=
29600 3d 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d  =pFrame->nChildM
29610 65 6d 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  em );.    assert
29620 28 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72  ( pProgram->nCsr
29630 3d 3d 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64  ==pFrame->nChild
29640 43 73 72 20 29 3b 0a 20 20 20 20 61 73 73 65 72  Csr );.    asser
29650 74 28 20 70 63 3d 3d 70 46 72 61 6d 65 2d 3e 70  t( pc==pFrame->p
29660 63 20 29 3b 0a 20 20 7d 0a 0a 20 20 70 2d 3e 6e  c );.  }..  p->n
29670 46 72 61 6d 65 2b 2b 3b 0a 20 20 70 46 72 61 6d  Frame++;.  pFram
29680 65 2d 3e 70 50 61 72 65 6e 74 20 3d 20 70 2d 3e  e->pParent = p->
29690 70 46 72 61 6d 65 3b 0a 20 20 70 46 72 61 6d 65  pFrame;.  pFrame
296a0 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 6c 61  ->lastRowid = la
296b0 73 74 52 6f 77 69 64 3b 0a 20 20 70 46 72 61 6d  stRowid;.  pFram
296c0 65 2d 3e 6e 43 68 61 6e 67 65 20 3d 20 70 2d 3e  e->nChange = p->
296d0 6e 43 68 61 6e 67 65 3b 0a 20 20 70 2d 3e 6e 43  nChange;.  p->nC
296e0 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20 70 2d 3e  hange = 0;.  p->
296f0 70 46 72 61 6d 65 20 3d 20 70 46 72 61 6d 65 3b  pFrame = pFrame;
29700 0a 20 20 70 2d 3e 61 4d 65 6d 20 3d 20 61 4d 65  .  p->aMem = aMe
29710 6d 20 3d 20 26 56 64 62 65 46 72 61 6d 65 4d 65  m = &VdbeFrameMe
29720 6d 28 70 46 72 61 6d 65 29 5b 2d 31 5d 3b 0a 20  m(pFrame)[-1];. 
29730 20 70 2d 3e 6e 4d 65 6d 20 3d 20 70 46 72 61 6d   p->nMem = pFram
29740 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 3b 0a 20 20  e->nChildMem;.  
29750 70 2d 3e 6e 43 75 72 73 6f 72 20 3d 20 28 75 31  p->nCursor = (u1
29760 36 29 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64  6)pFrame->nChild
29770 43 73 72 3b 0a 20 20 70 2d 3e 61 70 43 73 72 20  Csr;.  p->apCsr 
29780 3d 20 28 56 64 62 65 43 75 72 73 6f 72 20 2a 2a  = (VdbeCursor **
29790 29 26 61 4d 65 6d 5b 70 2d 3e 6e 4d 65 6d 2b 31  )&aMem[p->nMem+1
297a0 5d 3b 0a 20 20 70 2d 3e 61 4f 70 20 3d 20 61 4f  ];.  p->aOp = aO
297b0 70 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 61 4f  p = pProgram->aO
297c0 70 3b 0a 20 20 70 2d 3e 6e 4f 70 20 3d 20 70 50  p;.  p->nOp = pP
297d0 72 6f 67 72 61 6d 2d 3e 6e 4f 70 3b 0a 20 20 70  rogram->nOp;.  p
297e0 63 20 3d 20 2d 31 3b 0a 0a 20 20 62 72 65 61 6b  c = -1;..  break
297f0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
29800 50 61 72 61 6d 20 50 31 20 50 32 20 2a 20 2a 20  Param P1 P2 * * 
29810 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  *.**.** This opc
29820 6f 64 65 20 69 73 20 6f 6e 6c 79 20 65 76 65 72  ode is only ever
29830 20 70 72 65 73 65 6e 74 20 69 6e 20 73 75 62 2d   present in sub-
29840 70 72 6f 67 72 61 6d 73 20 63 61 6c 6c 65 64 20  programs called 
29850 76 69 61 20 74 68 65 20 0a 2a 2a 20 4f 50 5f 50  via the .** OP_P
29860 72 6f 67 72 61 6d 20 69 6e 73 74 72 75 63 74 69  rogram instructi
29870 6f 6e 2e 20 43 6f 70 79 20 61 20 76 61 6c 75 65  on. Copy a value
29880 20 63 75 72 72 65 6e 74 6c 79 20 73 74 6f 72 65   currently store
29890 64 20 69 6e 20 61 20 6d 65 6d 6f 72 79 20 0a 2a  d in a memory .*
298a0 2a 20 63 65 6c 6c 20 6f 66 20 74 68 65 20 63 61  * cell of the ca
298b0 6c 6c 69 6e 67 20 28 70 61 72 65 6e 74 29 20 66  lling (parent) f
298c0 72 61 6d 65 20 74 6f 20 63 65 6c 6c 20 50 32 20  rame to cell P2 
298d0 69 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 66  in the current f
298e0 72 61 6d 65 73 20 0a 2a 2a 20 61 64 64 72 65 73  rames .** addres
298f0 73 20 73 70 61 63 65 2e 20 54 68 69 73 20 69 73  s space. This is
29900 20 75 73 65 64 20 62 79 20 74 72 69 67 67 65 72   used by trigger
29910 20 70 72 6f 67 72 61 6d 73 20 74 6f 20 61 63 63   programs to acc
29920 65 73 73 20 74 68 65 20 6e 65 77 2e 2a 20 0a 2a  ess the new.* .*
29930 2a 20 61 6e 64 20 6f 6c 64 2e 2a 20 76 61 6c 75  * and old.* valu
29940 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 64  es..**.** The ad
29950 64 72 65 73 73 20 6f 66 20 74 68 65 20 63 65 6c  dress of the cel
29960 6c 20 69 6e 20 74 68 65 20 70 61 72 65 6e 74 20  l in the parent 
29970 66 72 61 6d 65 20 69 73 20 64 65 74 65 72 6d 69  frame is determi
29980 6e 65 64 20 62 79 20 61 64 64 69 6e 67 0a 2a 2a  ned by adding.**
29990 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   the value of th
299a0 65 20 50 31 20 61 72 67 75 6d 65 6e 74 20 74 6f  e P1 argument to
299b0 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   the value of th
299c0 65 20 50 31 20 61 72 67 75 6d 65 6e 74 20 74 6f  e P1 argument to
299d0 20 74 68 65 0a 2a 2a 20 63 61 6c 6c 69 6e 67 20   the.** calling 
299e0 4f 50 5f 50 72 6f 67 72 61 6d 20 69 6e 73 74 72  OP_Program instr
299f0 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20  uction..*/.case 
29a00 4f 50 5f 50 61 72 61 6d 3a 20 7b 20 20 20 20 20  OP_Param: {     
29a10 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72        /* out2-pr
29a20 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 56 64  erelease */.  Vd
29a30 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b  beFrame *pFrame;
29a40 0a 20 20 4d 65 6d 20 2a 70 49 6e 3b 0a 20 20 70  .  Mem *pIn;.  p
29a50 46 72 61 6d 65 20 3d 20 70 2d 3e 70 46 72 61 6d  Frame = p->pFram
29a60 65 3b 0a 20 20 70 49 6e 20 3d 20 26 70 46 72 61  e;.  pIn = &pFra
29a70 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31  me->aMem[pOp->p1
29a80 20 2b 20 70 46 72 61 6d 65 2d 3e 61 4f 70 5b 70   + pFrame->aOp[p
29a90 46 72 61 6d 65 2d 3e 70 63 5d 2e 70 31 5d 3b 20  Frame->pc].p1]; 
29aa0 20 20 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65    .  sqlite3Vdbe
29ab0 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70  MemShallowCopy(p
29ac0 4f 75 74 2c 20 70 49 6e 2c 20 4d 45 4d 5f 45 70  Out, pIn, MEM_Ep
29ad0 68 65 6d 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  hem);.  break;.}
29ae0 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 23 69 66 6e  ..#endif /* #ifn
29af0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
29b00 54 52 49 47 47 45 52 20 2a 2f 0a 0a 23 69 66 6e  TRIGGER */..#ifn
29b10 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
29b20 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 2f 2a 20 4f  FOREIGN_KEY./* O
29b30 70 63 6f 64 65 3a 20 46 6b 43 6f 75 6e 74 65 72  pcode: FkCounter
29b40 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
29b50 2a 2a 20 49 6e 63 72 65 6d 65 6e 74 20 61 20 22  ** Increment a "
29b60 63 6f 6e 73 74 72 61 69 6e 74 20 63 6f 75 6e 74  constraint count
29b70 65 72 22 20 62 79 20 50 32 20 28 50 32 20 6d 61  er" by P2 (P2 ma
29b80 79 20 62 65 20 6e 65 67 61 74 69 76 65 20 6f 72  y be negative or
29b90 20 70 6f 73 69 74 69 76 65 29 2e 0a 2a 2a 20 49   positive)..** I
29ba0 66 20 50 31 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f  f P1 is non-zero
29bb0 2c 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63  , the database c
29bc0 6f 6e 73 74 72 61 69 6e 74 20 63 6f 75 6e 74 65  onstraint counte
29bd0 72 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64  r is incremented
29be0 20 0a 2a 2a 20 28 64 65 66 65 72 72 65 64 20 66   .** (deferred f
29bf0 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74  oreign key const
29c00 72 61 69 6e 74 73 29 2e 20 4f 74 68 65 72 77 69  raints). Otherwi
29c10 73 65 2c 20 69 66 20 50 31 20 69 73 20 7a 65 72  se, if P1 is zer
29c20 6f 2c 20 74 68 65 20 0a 2a 2a 20 73 74 61 74 65  o, the .** state
29c30 6d 65 6e 74 20 63 6f 75 6e 74 65 72 20 69 73 20  ment counter is 
29c40 69 6e 63 72 65 6d 65 6e 74 65 64 20 28 69 6d 6d  incremented (imm
29c50 65 64 69 61 74 65 20 66 6f 72 65 69 67 6e 20 6b  ediate foreign k
29c60 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 29 2e  ey constraints).
29c70 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 6b 43 6f  .*/.case OP_FkCo
29c80 75 6e 74 65 72 3a 20 7b 0a 20 20 69 66 28 20 70  unter: {.  if( p
29c90 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 64 62  Op->p1 ){.    db
29ca0 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 20  ->nDeferredCons 
29cb0 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 7d 65  += pOp->p2;.  }e
29cc0 6c 73 65 7b 0a 20 20 20 20 70 2d 3e 6e 46 6b 43  lse{.    p->nFkC
29cd0 6f 6e 73 74 72 61 69 6e 74 20 2b 3d 20 70 4f 70  onstraint += pOp
29ce0 2d 3e 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61  ->p2;.  }.  brea
29cf0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
29d00 20 46 6b 49 66 5a 65 72 6f 20 50 31 20 50 32 20   FkIfZero P1 P2 
29d10 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73  * * *.**.** This
29d20 20 6f 70 63 6f 64 65 20 74 65 73 74 73 20 69 66   opcode tests if
29d30 20 61 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63   a foreign key c
29d40 6f 6e 73 74 72 61 69 6e 74 2d 63 6f 75 6e 74 65  onstraint-counte
29d50 72 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 7a  r is currently z
29d60 65 72 6f 2e 0a 2a 2a 20 49 66 20 73 6f 2c 20 6a  ero..** If so, j
29d70 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69  ump to instructi
29d80 6f 6e 20 50 32 2e 20 4f 74 68 65 72 77 69 73 65  on P2. Otherwise
29d90 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74  , fall through t
29da0 6f 20 74 68 65 20 6e 65 78 74 20 0a 2a 2a 20 69  o the next .** i
29db0 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a  nstruction..**.*
29dc0 2a 20 49 66 20 50 31 20 69 73 20 6e 6f 6e 2d 7a  * If P1 is non-z
29dd0 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 6a 75  ero, then the ju
29de0 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 20 74  mp is taken if t
29df0 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 73  he database cons
29e00 74 72 61 69 6e 74 2d 63 6f 75 6e 74 65 72 0a 2a  traint-counter.*
29e10 2a 20 69 73 20 7a 65 72 6f 20 28 74 68 65 20 6f  * is zero (the o
29e20 6e 65 20 74 68 61 74 20 63 6f 75 6e 74 73 20 64  ne that counts d
29e30 65 66 65 72 72 65 64 20 63 6f 6e 73 74 72 61 69  eferred constrai
29e40 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 73 29 2e 20  nt violations). 
29e50 49 66 20 50 31 20 69 73 0a 2a 2a 20 7a 65 72 6f  If P1 is.** zero
29e60 2c 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61  , the jump is ta
29e70 6b 65 6e 20 69 66 20 74 68 65 20 73 74 61 74 65  ken if the state
29e80 6d 65 6e 74 20 63 6f 6e 73 74 72 61 69 6e 74 2d  ment constraint-
29e90 63 6f 75 6e 74 65 72 20 69 73 20 7a 65 72 6f 0a  counter is zero.
29ea0 2a 2a 20 28 69 6d 6d 65 64 69 61 74 65 20 66 6f  ** (immediate fo
29eb0 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72  reign key constr
29ec0 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 73 29  aint violations)
29ed0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 6b 49  ..*/.case OP_FkI
29ee0 66 5a 65 72 6f 3a 20 7b 20 20 20 20 20 20 20 20  fZero: {        
29ef0 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 66   /* jump */.  if
29f00 28 20 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20  ( pOp->p1 ){.   
29f10 20 69 66 28 20 64 62 2d 3e 6e 44 65 66 65 72 72   if( db->nDeferr
29f20 65 64 43 6f 6e 73 3d 3d 30 20 29 20 70 63 20 3d  edCons==0 ) pc =
29f30 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d 65   pOp->p2-1;.  }e
29f40 6c 73 65 7b 0a 20 20 20 20 69 66 28 20 70 2d 3e  lse{.    if( p->
29f50 6e 46 6b 43 6f 6e 73 74 72 61 69 6e 74 3d 3d 30  nFkConstraint==0
29f60 20 29 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d   ) pc = pOp->p2-
29f70 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  1;.  }.  break;.
29f80 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 23 69 66 6e  }.#endif /* #ifn
29f90 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
29fa0 46 4f 52 45 49 47 4e 5f 4b 45 59 20 2a 2f 0a 0a  FOREIGN_KEY */..
29fb0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
29fc0 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e  MIT_AUTOINCREMEN
29fd0 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 65 6d  T./* Opcode: Mem
29fe0 4d 61 78 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  Max P1 P2 * * *.
29ff0 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 72 65  **.** P1 is a re
2a000 67 69 73 74 65 72 20 69 6e 20 74 68 65 20 72 6f  gister in the ro
2a010 6f 74 20 66 72 61 6d 65 20 6f 66 20 74 68 69 73  ot frame of this
2a020 20 56 4d 20 28 74 68 65 20 72 6f 6f 74 20 66 72   VM (the root fr
2a030 61 6d 65 20 69 73 0a 2a 2a 20 64 69 66 66 65 72  ame is.** differ
2a040 65 6e 74 20 66 72 6f 6d 20 74 68 65 20 63 75 72  ent from the cur
2a050 72 65 6e 74 20 66 72 61 6d 65 20 69 66 20 74 68  rent frame if th
2a060 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69  is instruction i
2a070 73 20 62 65 69 6e 67 20 65 78 65 63 75 74 65 64  s being executed
2a080 0a 2a 2a 20 77 69 74 68 69 6e 20 61 20 73 75 62  .** within a sub
2a090 2d 70 72 6f 67 72 61 6d 29 2e 20 53 65 74 20 74  -program). Set t
2a0a0 68 65 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69  he value of regi
2a0b0 73 74 65 72 20 50 31 20 74 6f 20 74 68 65 20 6d  ster P1 to the m
2a0c0 61 78 69 6d 75 6d 20 6f 66 20 0a 2a 2a 20 69 74  aximum of .** it
2a0d0 73 20 63 75 72 72 65 6e 74 20 76 61 6c 75 65 20  s current value 
2a0e0 61 6e 64 20 74 68 65 20 76 61 6c 75 65 20 69 6e  and the value in
2a0f0 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a   register P2..**
2a100 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63  .** This instruc
2a110 74 69 6f 6e 20 74 68 72 6f 77 73 20 61 6e 20 65  tion throws an e
2a120 72 72 6f 72 20 69 66 20 74 68 65 20 6d 65 6d 6f  rror if the memo
2a130 72 79 20 63 65 6c 6c 20 69 73 20 6e 6f 74 20 69  ry cell is not i
2a140 6e 69 74 69 61 6c 6c 79 0a 2a 2a 20 61 6e 20 69  nitially.** an i
2a150 6e 74 65 67 65 72 2e 0a 2a 2f 0a 63 61 73 65 20  nteger..*/.case 
2a160 4f 50 5f 4d 65 6d 4d 61 78 3a 20 7b 20 20 20 20  OP_MemMax: {    
2a170 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20      /* in2 */.  
2a180 4d 65 6d 20 2a 70 49 6e 31 3b 0a 20 20 56 64 62  Mem *pIn1;.  Vdb
2a190 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b 0a  eFrame *pFrame;.
2a1a0 20 20 69 66 28 20 70 2d 3e 70 46 72 61 6d 65 20    if( p->pFrame 
2a1b0 29 7b 0a 20 20 20 20 66 6f 72 28 70 46 72 61 6d  ){.    for(pFram
2a1c0 65 3d 70 2d 3e 70 46 72 61 6d 65 3b 20 70 46 72  e=p->pFrame; pFr
2a1d0 61 6d 65 2d 3e 70 50 61 72 65 6e 74 3b 20 70 46  ame->pParent; pF
2a1e0 72 61 6d 65 3d 70 46 72 61 6d 65 2d 3e 70 50 61  rame=pFrame->pPa
2a1f0 72 65 6e 74 29 3b 0a 20 20 20 20 70 49 6e 31 20  rent);.    pIn1 
2a200 3d 20 26 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b  = &pFrame->aMem[
2a210 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 7d 65 6c 73  pOp->p1];.  }els
2a220 65 7b 0a 20 20 20 20 70 49 6e 31 20 3d 20 26 61  e{.    pIn1 = &a
2a230 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
2a240 7d 0a 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49  }.  assert( memI
2a250 73 56 61 6c 69 64 28 70 49 6e 31 29 20 29 3b 0a  sValid(pIn1) );.
2a260 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
2a270 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e 31 29  Integerify(pIn1)
2a280 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d  ;.  pIn2 = &aMem
2a290 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 73 71 6c  [pOp->p2];.  sql
2a2a0 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67  ite3VdbeMemInteg
2a2b0 65 72 69 66 79 28 70 49 6e 32 29 3b 0a 20 20 69  erify(pIn2);.  i
2a2c0 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3c 70 49 6e  f( pIn1->u.i<pIn
2a2d0 32 2d 3e 75 2e 69 29 7b 0a 20 20 20 20 70 49 6e  2->u.i){.    pIn
2a2e0 31 2d 3e 75 2e 69 20 3d 20 70 49 6e 32 2d 3e 75  1->u.i = pIn2->u
2a2f0 2e 69 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  .i;.  }.  break;
2a300 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
2a310 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43  ITE_OMIT_AUTOINC
2a320 52 45 4d 45 4e 54 20 2a 2f 0a 0a 2f 2a 20 4f 70  REMENT */../* Op
2a330 63 6f 64 65 3a 20 49 66 50 6f 73 20 50 31 20 50  code: IfPos P1 P
2a340 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 66  2 * * *.**.** If
2a350 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 72 65   the value of re
2a360 67 69 73 74 65 72 20 50 31 20 69 73 20 31 20 6f  gister P1 is 1 o
2a370 72 20 67 72 65 61 74 65 72 2c 20 6a 75 6d 70 20  r greater, jump 
2a380 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 74 20  to P2..**.** It 
2a390 69 73 20 69 6c 6c 65 67 61 6c 20 74 6f 20 75 73  is illegal to us
2a3a0 65 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69  e this instructi
2a3b0 6f 6e 20 6f 6e 20 61 20 72 65 67 69 73 74 65 72  on on a register
2a3c0 20 74 68 61 74 20 64 6f 65 73 0a 2a 2a 20 6e 6f   that does.** no
2a3d0 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74  t contain an int
2a3e0 65 67 65 72 2e 20 20 41 6e 20 61 73 73 65 72 74  eger.  An assert
2a3f0 69 6f 6e 20 66 61 75 6c 74 20 77 69 6c 6c 20 72  ion fault will r
2a400 65 73 75 6c 74 20 69 66 20 79 6f 75 20 74 72 79  esult if you try
2a410 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 50  ..*/.case OP_IfP
2a420 6f 73 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20  os: {        /* 
2a430 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70  jump, in1 */.  p
2a440 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
2a450 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
2a460 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  pIn1->flags&MEM_
2a470 49 6e 74 20 29 3b 0a 20 20 69 66 28 20 70 49 6e  Int );.  if( pIn
2a480 31 2d 3e 75 2e 69 3e 30 20 29 7b 0a 20 20 20 20  1->u.i>0 ){.    
2a490 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
2a4a0 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  1;.  }.  break;.
2a4b0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66  }../* Opcode: If
2a4c0 4e 65 67 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  Neg P1 P2 * * *.
2a4d0 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c  **.** If the val
2a4e0 75 65 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  ue of register P
2a4f0 31 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 7a  1 is less than z
2a500 65 72 6f 2c 20 6a 75 6d 70 20 74 6f 20 50 32 2e  ero, jump to P2.
2a510 20 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69 6c   .**.** It is il
2a520 6c 65 67 61 6c 20 74 6f 20 75 73 65 20 74 68 69  legal to use thi
2a530 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e  s instruction on
2a540 20 61 20 72 65 67 69 73 74 65 72 20 74 68 61 74   a register that
2a550 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 63 6f 6e   does.** not con
2a560 74 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e  tain an integer.
2a570 20 20 41 6e 20 61 73 73 65 72 74 69 6f 6e 20 66    An assertion f
2a580 61 75 6c 74 20 77 69 6c 6c 20 72 65 73 75 6c 74  ault will result
2a590 20 69 66 20 79 6f 75 20 74 72 79 2e 0a 2a 2f 0a   if you try..*/.
2a5a0 63 61 73 65 20 4f 50 5f 49 66 4e 65 67 3a 20 7b  case OP_IfNeg: {
2a5b0 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
2a5c0 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d   in1 */.  pIn1 =
2a5d0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
2a5e0 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d  .  assert( pIn1-
2a5f0 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29  >flags&MEM_Int )
2a600 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e  ;.  if( pIn1->u.
2a610 69 3c 30 20 29 7b 0a 20 20 20 20 20 70 63 20 3d  i<0 ){.     pc =
2a620 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
2a630 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
2a640 20 4f 70 63 6f 64 65 3a 20 49 66 5a 65 72 6f 20   Opcode: IfZero 
2a650 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
2a660 2a 2a 20 54 68 65 20 72 65 67 69 73 74 65 72 20  ** The register 
2a670 50 31 20 6d 75 73 74 20 63 6f 6e 74 61 69 6e 20  P1 must contain 
2a680 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 41 64 64  an integer.  Add
2a690 20 6c 69 74 65 72 61 6c 20 50 33 20 74 6f 20 74   literal P3 to t
2a6a0 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69 6e 20 72  he.** value in r
2a6b0 65 67 69 73 74 65 72 20 50 31 2e 20 20 49 66 20  egister P1.  If 
2a6c0 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 65 78  the result is ex
2a6d0 61 63 74 6c 79 20 30 2c 20 6a 75 6d 70 20 74 6f  actly 0, jump to
2a6e0 20 50 32 2e 20 0a 2a 2a 0a 2a 2a 20 49 74 20 69   P2. .**.** It i
2a6f0 73 20 69 6c 6c 65 67 61 6c 20 74 6f 20 75 73 65  s illegal to use
2a700 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
2a710 6e 20 6f 6e 20 61 20 72 65 67 69 73 74 65 72 20  n on a register 
2a720 74 68 61 74 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74  that does.** not
2a730 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65   contain an inte
2a740 67 65 72 2e 20 20 41 6e 20 61 73 73 65 72 74 69  ger.  An asserti
2a750 6f 6e 20 66 61 75 6c 74 20 77 69 6c 6c 20 72 65  on fault will re
2a760 73 75 6c 74 20 69 66 20 79 6f 75 20 74 72 79 2e  sult if you try.
2a770 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 5a 65  .*/.case OP_IfZe
2a780 72 6f 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20  ro: {        /* 
2a790 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70  jump, in1 */.  p
2a7a0 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
2a7b0 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
2a7c0 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  pIn1->flags&MEM_
2a7d0 49 6e 74 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 75  Int );.  pIn1->u
2a7e0 2e 69 20 2b 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20  .i += pOp->p3;. 
2a7f0 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3d 3d   if( pIn1->u.i==
2a800 30 20 29 7b 0a 20 20 20 20 20 70 63 20 3d 20 70  0 ){.     pc = p
2a810 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a  Op->p2 - 1;.  }.
2a820 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
2a830 70 63 6f 64 65 3a 20 41 67 67 53 74 65 70 20 2a  pcode: AggStep *
2a840 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a   P2 P3 P4 P5.**.
2a850 2a 2a 20 45 78 65 63 75 74 65 20 74 68 65 20 73  ** Execute the s
2a860 74 65 70 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72  tep function for
2a870 20 61 6e 20 61 67 67 72 65 67 61 74 65 2e 20 20   an aggregate.  
2a880 54 68 65 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 20  The.** function 
2a890 68 61 73 20 50 35 20 61 72 67 75 6d 65 6e 74 73  has P5 arguments
2a8a0 2e 20 20 20 50 34 20 69 73 20 61 20 70 6f 69 6e  .   P4 is a poin
2a8b0 74 65 72 20 74 6f 20 74 68 65 20 46 75 6e 63 44  ter to the FuncD
2a8c0 65 66 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 20  ef.** structure 
2a8d0 74 68 61 74 20 73 70 65 63 69 66 69 65 73 20 74  that specifies t
2a8e0 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20 20 55 73  he function.  Us
2a8f0 65 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 50 33  e register.** P3
2a900 20 61 73 20 74 68 65 20 61 63 63 75 6d 75 6c 61   as the accumula
2a910 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50  tor..**.** The P
2a920 35 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65 20  5 arguments are 
2a930 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69 73  taken from regis
2a940 74 65 72 20 50 32 20 61 6e 64 20 69 74 73 0a 2a  ter P2 and its.*
2a950 2a 20 73 75 63 63 65 73 73 6f 72 73 2e 0a 2a 2f  * successors..*/
2a960 0a 63 61 73 65 20 4f 50 5f 41 67 67 53 74 65 70  .case OP_AggStep
2a970 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a 20 20 69  : {.  int n;.  i
2a980 6e 74 20 69 3b 0a 20 20 4d 65 6d 20 2a 70 4d 65  nt i;.  Mem *pMe
2a990 6d 3b 0a 20 20 4d 65 6d 20 2a 70 52 65 63 3b 0a  m;.  Mem *pRec;.
2a9a0 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78    sqlite3_contex
2a9b0 74 20 63 74 78 3b 0a 20 20 73 71 6c 69 74 65 33  t ctx;.  sqlite3
2a9c0 5f 76 61 6c 75 65 20 2a 2a 61 70 56 61 6c 3b 0a  _value **apVal;.
2a9d0 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 35 3b 0a  .  n = pOp->p5;.
2a9e0 20 20 61 73 73 65 72 74 28 20 6e 3e 3d 30 20 29    assert( n>=0 )
2a9f0 3b 0a 20 20 70 52 65 63 20 3d 20 26 61 4d 65 6d  ;.  pRec = &aMem
2aa00 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 70 56  [pOp->p2];.  apV
2aa10 61 6c 20 3d 20 70 2d 3e 61 70 41 72 67 3b 0a 20  al = p->apArg;. 
2aa20 20 61 73 73 65 72 74 28 20 61 70 56 61 6c 20 7c   assert( apVal |
2aa30 7c 20 6e 3d 3d 30 20 29 3b 0a 20 20 66 6f 72 28  | n==0 );.  for(
2aa40 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b 2b 2c 20 70  i=0; i<n; i++, p
2aa50 52 65 63 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65  Rec++){.    asse
2aa60 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70  rt( memIsValid(p
2aa70 52 65 63 29 20 29 3b 0a 20 20 20 20 61 70 56 61  Rec) );.    apVa
2aa80 6c 5b 69 5d 20 3d 20 70 52 65 63 3b 0a 20 20 20  l[i] = pRec;.   
2aa90 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
2aaa0 65 28 70 2c 20 70 52 65 63 29 3b 0a 20 20 20 20  e(p, pRec);.    
2aab0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74  sqlite3VdbeMemSt
2aac0 6f 72 65 54 79 70 65 28 70 52 65 63 29 3b 0a 20  oreType(pRec);. 
2aad0 20 7d 0a 20 20 63 74 78 2e 70 46 75 6e 63 20 3d   }.  ctx.pFunc =
2aae0 20 70 4f 70 2d 3e 70 34 2e 70 46 75 6e 63 3b 0a   pOp->p4.pFunc;.
2aaf0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
2ab00 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d  3>0 && pOp->p3<=
2ab10 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 63 74 78  p->nMem );.  ctx
2ab20 2e 70 4d 65 6d 20 3d 20 70 4d 65 6d 20 3d 20 26  .pMem = pMem = &
2ab30 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
2ab40 20 70 4d 65 6d 2d 3e 6e 2b 2b 3b 0a 20 20 63 74   pMem->n++;.  ct
2ab50 78 2e 73 2e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  x.s.flags = MEM_
2ab60 4e 75 6c 6c 3b 0a 20 20 63 74 78 2e 73 2e 7a 20  Null;.  ctx.s.z 
2ab70 3d 20 30 3b 0a 20 20 63 74 78 2e 73 2e 7a 4d 61  = 0;.  ctx.s.zMa
2ab80 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20 63 74 78 2e  lloc = 0;.  ctx.
2ab90 73 2e 78 44 65 6c 20 3d 20 30 3b 0a 20 20 63 74  s.xDel = 0;.  ct
2aba0 78 2e 73 2e 64 62 20 3d 20 64 62 3b 0a 20 20 63  x.s.db = db;.  c
2abb0 74 78 2e 69 73 45 72 72 6f 72 20 3d 20 30 3b 0a  tx.isError = 0;.
2abc0 20 20 63 74 78 2e 70 43 6f 6c 6c 20 3d 20 30 3b    ctx.pColl = 0;
2abd0 0a 20 20 69 66 28 20 63 74 78 2e 70 46 75 6e 63  .  if( ctx.pFunc
2abe0 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45  ->flags & SQLITE
2abf0 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20 29  _FUNC_NEEDCOLL )
2ac00 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  {.    assert( pO
2ac10 70 3e 70 2d 3e 61 4f 70 20 29 3b 0a 20 20 20 20  p>p->aOp );.    
2ac20 61 73 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e  assert( pOp[-1].
2ac30 70 34 74 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53  p4type==P4_COLLS
2ac40 45 51 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  EQ );.    assert
2ac50 28 20 70 4f 70 5b 2d 31 5d 2e 6f 70 63 6f 64 65  ( pOp[-1].opcode
2ac60 3d 3d 4f 50 5f 43 6f 6c 6c 53 65 71 20 29 3b 0a  ==OP_CollSeq );.
2ac70 20 20 20 20 63 74 78 2e 70 43 6f 6c 6c 20 3d 20      ctx.pColl = 
2ac80 70 4f 70 5b 2d 31 5d 2e 70 34 2e 70 43 6f 6c 6c  pOp[-1].p4.pColl
2ac90 3b 0a 20 20 7d 0a 20 20 28 63 74 78 2e 70 46 75  ;.  }.  (ctx.pFu
2aca0 6e 63 2d 3e 78 53 74 65 70 29 28 26 63 74 78 2c  nc->xStep)(&ctx,
2acb0 20 6e 2c 20 61 70 56 61 6c 29 3b 20 2f 2a 20 49   n, apVal); /* I
2acc0 4d 50 3a 20 52 2d 32 34 35 30 35 2d 32 33 32 33  MP: R-24505-2323
2acd0 30 20 2a 2f 0a 20 20 69 66 28 20 63 74 78 2e 69  0 */.  if( ctx.i
2ace0 73 45 72 72 6f 72 20 29 7b 0a 20 20 20 20 73 71  sError ){.    sq
2acf0 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26  lite3SetString(&
2ad00 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20  p->zErrMsg, db, 
2ad10 22 25 73 22 2c 20 73 71 6c 69 74 65 33 5f 76 61  "%s", sqlite3_va
2ad20 6c 75 65 5f 74 65 78 74 28 26 63 74 78 2e 73 29  lue_text(&ctx.s)
2ad30 29 3b 0a 20 20 20 20 72 63 20 3d 20 63 74 78 2e  );.    rc = ctx.
2ad40 69 73 45 72 72 6f 72 3b 0a 20 20 7d 0a 0a 20 20  isError;.  }..  
2ad50 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65  sqlite3VdbeMemRe
2ad60 6c 65 61 73 65 28 26 63 74 78 2e 73 29 3b 0a 0a  lease(&ctx.s);..
2ad70 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
2ad80 70 63 6f 64 65 3a 20 41 67 67 46 69 6e 61 6c 20  pcode: AggFinal 
2ad90 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a  P1 P2 * P4 *.**.
2ada0 2a 2a 20 45 78 65 63 75 74 65 20 74 68 65 20 66  ** Execute the f
2adb0 69 6e 61 6c 69 7a 65 72 20 66 75 6e 63 74 69 6f  inalizer functio
2adc0 6e 20 66 6f 72 20 61 6e 20 61 67 67 72 65 67 61  n for an aggrega
2add0 74 65 2e 20 20 50 31 20 69 73 0a 2a 2a 20 74 68  te.  P1 is.** th
2ade0 65 20 6d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f  e memory locatio
2adf0 6e 20 74 68 61 74 20 69 73 20 74 68 65 20 61 63  n that is the ac
2ae00 63 75 6d 75 6c 61 74 6f 72 20 66 6f 72 20 74 68  cumulator for th
2ae10 65 20 61 67 67 72 65 67 61 74 65 2e 0a 2a 2a 0a  e aggregate..**.
2ae20 2a 2a 20 50 32 20 69 73 20 74 68 65 20 6e 75 6d  ** P2 is the num
2ae30 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ber of arguments
2ae40 20 74 68 61 74 20 74 68 65 20 73 74 65 70 20 66   that the step f
2ae50 75 6e 63 74 69 6f 6e 20 74 61 6b 65 73 20 61 6e  unction takes an
2ae60 64 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69  d.** P4 is a poi
2ae70 6e 74 65 72 20 74 6f 20 74 68 65 20 46 75 6e 63  nter to the Func
2ae80 44 65 66 20 66 6f 72 20 74 68 69 73 20 66 75 6e  Def for this fun
2ae90 63 74 69 6f 6e 2e 20 20 54 68 65 20 50 32 0a 2a  ction.  The P2.*
2aea0 2a 20 61 72 67 75 6d 65 6e 74 20 69 73 20 6e 6f  * argument is no
2aeb0 74 20 75 73 65 64 20 62 79 20 74 68 69 73 20 6f  t used by this o
2aec0 70 63 6f 64 65 2e 20 20 49 74 20 69 73 20 6f 6e  pcode.  It is on
2aed0 6c 79 20 74 68 65 72 65 20 74 6f 20 64 69 73 61  ly there to disa
2aee0 6d 62 69 67 75 61 74 65 0a 2a 2a 20 66 75 6e 63  mbiguate.** func
2aef0 74 69 6f 6e 73 20 74 68 61 74 20 63 61 6e 20 74  tions that can t
2af00 61 6b 65 20 76 61 72 79 69 6e 67 20 6e 75 6d 62  ake varying numb
2af10 65 72 73 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ers of arguments
2af20 2e 20 20 54 68 65 0a 2a 2a 20 50 34 20 61 72 67  .  The.** P4 arg
2af30 75 6d 65 6e 74 20 69 73 20 6f 6e 6c 79 20 6e 65  ument is only ne
2af40 65 64 65 64 20 66 6f 72 20 74 68 65 20 64 65 67  eded for the deg
2af50 65 6e 65 72 61 74 65 20 63 61 73 65 20 77 68 65  enerate case whe
2af60 72 65 0a 2a 2a 20 74 68 65 20 73 74 65 70 20 66  re.** the step f
2af70 75 6e 63 74 69 6f 6e 20 77 61 73 20 6e 6f 74 20  unction was not 
2af80 70 72 65 76 69 6f 75 73 6c 79 20 63 61 6c 6c 65  previously calle
2af90 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 67  d..*/.case OP_Ag
2afa0 67 46 69 6e 61 6c 3a 20 7b 0a 20 20 4d 65 6d 20  gFinal: {.  Mem 
2afb0 2a 70 4d 65 6d 3b 0a 20 20 61 73 73 65 72 74 28  *pMem;.  assert(
2afc0 20 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f   pOp->p1>0 && pO
2afd0 70 2d 3e 70 31 3c 3d 70 2d 3e 6e 4d 65 6d 20 29  p->p1<=p->nMem )
2afe0 3b 0a 20 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d  ;.  pMem = &aMem
2aff0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
2b000 65 72 74 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67  ert( (pMem->flag
2b010 73 20 26 20 7e 28 4d 45 4d 5f 4e 75 6c 6c 7c 4d  s & ~(MEM_Null|M
2b020 45 4d 5f 41 67 67 29 29 3d 3d 30 20 29 3b 0a 20  EM_Agg))==0 );. 
2b030 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
2b040 65 4d 65 6d 46 69 6e 61 6c 69 7a 65 28 70 4d 65  eMemFinalize(pMe
2b050 6d 2c 20 70 4f 70 2d 3e 70 34 2e 70 46 75 6e 63  m, pOp->p4.pFunc
2b060 29 3b 0a 20 20 69 66 28 20 72 63 20 29 7b 0a 20  );.  if( rc ){. 
2b070 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72     sqlite3SetStr
2b080 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c  ing(&p->zErrMsg,
2b090 20 64 62 2c 20 22 25 73 22 2c 20 73 71 6c 69 74   db, "%s", sqlit
2b0a0 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 70 4d  e3_value_text(pM
2b0b0 65 6d 29 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69  em));.  }.  sqli
2b0c0 74 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63  te3VdbeChangeEnc
2b0d0 6f 64 69 6e 67 28 70 4d 65 6d 2c 20 65 6e 63 6f  oding(pMem, enco
2b0e0 64 69 6e 67 29 3b 0a 20 20 55 50 44 41 54 45 5f  ding);.  UPDATE_
2b0f0 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4d 65  MAX_BLOBSIZE(pMe
2b100 6d 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65  m);.  if( sqlite
2b110 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28 70  3VdbeMemTooBig(p
2b120 4d 65 6d 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f  Mem) ){.    goto
2b130 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20   too_big;.  }.  
2b140 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65  break;.}..#ifnde
2b150 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41  f SQLITE_OMIT_WA
2b160 4c 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 68 65  L./* Opcode: Che
2b170 63 6b 70 6f 69 6e 74 20 50 31 20 50 32 20 50 33  ckpoint P1 P2 P3
2b180 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b   * *.**.** Check
2b190 70 6f 69 6e 74 20 64 61 74 61 62 61 73 65 20 50  point database P
2b1a0 31 2e 20 54 68 69 73 20 69 73 20 61 20 6e 6f 2d  1. This is a no-
2b1b0 6f 70 20 69 66 20 50 31 20 69 73 20 6e 6f 74 20  op if P1 is not 
2b1c0 63 75 72 72 65 6e 74 6c 79 20 69 6e 0a 2a 2a 20  currently in.** 
2b1d0 57 41 4c 20 6d 6f 64 65 2e 20 50 61 72 61 6d 65  WAL mode. Parame
2b1e0 74 65 72 20 50 32 20 69 73 20 6f 6e 65 20 6f 66  ter P2 is one of
2b1f0 20 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49   SQLITE_CHECKPOI
2b200 4e 54 5f 50 41 53 53 49 56 45 2c 20 46 55 4c 4c  NT_PASSIVE, FULL
2b210 0a 2a 2a 20 6f 72 20 52 45 53 54 41 52 54 2e 20  .** or RESTART. 
2b220 20 57 72 69 74 65 20 31 20 6f 72 20 30 20 69 6e   Write 1 or 0 in
2b230 74 6f 20 6d 65 6d 5b 50 33 5d 20 69 66 20 74 68  to mem[P3] if th
2b240 65 20 63 68 65 63 6b 70 6f 69 6e 74 20 72 65 74  e checkpoint ret
2b250 75 72 6e 73 0a 2a 2a 20 53 51 4c 49 54 45 5f 42  urns.** SQLITE_B
2b260 55 53 59 20 6f 72 20 6e 6f 74 2c 20 72 65 73 70  USY or not, resp
2b270 65 63 74 69 76 65 6c 79 2e 20 20 57 72 69 74 65  ectively.  Write
2b280 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70   the number of p
2b290 61 67 65 73 20 69 6e 20 74 68 65 0a 2a 2a 20 57  ages in the.** W
2b2a0 41 4c 20 61 66 74 65 72 20 74 68 65 20 63 68 65  AL after the che
2b2b0 63 6b 70 6f 69 6e 74 20 69 6e 74 6f 20 6d 65 6d  ckpoint into mem
2b2c0 5b 50 33 2b 31 5d 20 61 6e 64 20 74 68 65 20 6e  [P3+1] and the n
2b2d0 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 0a 2a  umber of pages.*
2b2e0 2a 20 69 6e 20 74 68 65 20 57 41 4c 20 74 68 61  * in the WAL tha
2b2f0 74 20 68 61 76 65 20 62 65 65 6e 20 63 68 65 63  t have been chec
2b300 6b 70 6f 69 6e 74 65 64 20 61 66 74 65 72 20 74  kpointed after t
2b310 68 65 20 63 68 65 63 6b 70 6f 69 6e 74 0a 2a 2a  he checkpoint.**
2b320 20 63 6f 6d 70 6c 65 74 65 73 20 69 6e 74 6f 20   completes into 
2b330 6d 65 6d 5b 50 33 2b 32 5d 2e 20 20 48 6f 77 65  mem[P3+2].  Howe
2b340 76 65 72 20 6f 6e 20 61 6e 20 65 72 72 6f 72 2c  ver on an error,
2b350 20 6d 65 6d 5b 50 33 2b 31 5d 20 61 6e 64 0a 2a   mem[P3+1] and.*
2b360 2a 20 6d 65 6d 5b 50 33 2b 32 5d 20 61 72 65 20  * mem[P3+2] are 
2b370 69 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f 20 2d  initialized to -
2b380 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 68  1..*/.case OP_Ch
2b390 65 63 6b 70 6f 69 6e 74 3a 20 7b 0a 20 20 69 6e  eckpoint: {.  in
2b3a0 74 20 69 3b 20 20 20 20 20 20 20 20 20 20 20 20  t i;            
2b3b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
2b3c0 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 20 2a 2f   Loop counter */
2b3d0 0a 20 20 69 6e 74 20 61 52 65 73 5b 33 5d 3b 20  .  int aRes[3]; 
2b3e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b3f0 20 20 20 2f 2a 20 52 65 73 75 6c 74 73 20 2a 2f     /* Results */
2b400 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20 20  .  Mem *pMem;   
2b410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b420 20 20 20 2f 2a 20 57 72 69 74 65 20 72 65 73 75     /* Write resu
2b430 6c 74 73 20 68 65 72 65 20 2a 2f 0a 0a 20 20 61  lts here */..  a
2b440 52 65 73 5b 30 5d 20 3d 20 30 3b 0a 20 20 61 52  Res[0] = 0;.  aR
2b450 65 73 5b 31 5d 20 3d 20 61 52 65 73 5b 32 5d 20  es[1] = aRes[2] 
2b460 3d 20 2d 31 3b 0a 20 20 61 73 73 65 72 74 28 20  = -1;.  assert( 
2b470 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f  pOp->p2==SQLITE_
2b480 43 48 45 43 4b 50 4f 49 4e 54 5f 50 41 53 53 49  CHECKPOINT_PASSI
2b490 56 45 0a 20 20 20 20 20 20 20 7c 7c 20 70 4f 70  VE.       || pOp
2b4a0 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 43 48 45  ->p2==SQLITE_CHE
2b4b0 43 4b 50 4f 49 4e 54 5f 46 55 4c 4c 0a 20 20 20  CKPOINT_FULL.   
2b4c0 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d      || pOp->p2==
2b4d0 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e  SQLITE_CHECKPOIN
2b4e0 54 5f 52 45 53 54 41 52 54 0a 20 20 29 3b 0a 20  T_RESTART.  );. 
2b4f0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 43 68 65   rc = sqlite3Che
2b500 63 6b 70 6f 69 6e 74 28 64 62 2c 20 70 4f 70 2d  ckpoint(db, pOp-
2b510 3e 70 31 2c 20 70 4f 70 2d 3e 70 32 2c 20 26 61  >p1, pOp->p2, &a
2b520 52 65 73 5b 31 5d 2c 20 26 61 52 65 73 5b 32 5d  Res[1], &aRes[2]
2b530 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  );.  if( rc==SQL
2b540 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20 20  ITE_BUSY ){.    
2b550 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a  rc = SQLITE_OK;.
2b560 20 20 20 20 61 52 65 73 5b 30 5d 20 3d 20 31 3b      aRes[0] = 1;
2b570 0a 20 20 7d 0a 20 20 66 6f 72 28 69 3d 30 2c 20  .  }.  for(i=0, 
2b580 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pMem = &aMem[pOp
2b590 2d 3e 70 33 5d 3b 20 69 3c 33 3b 20 69 2b 2b 2c  ->p3]; i<3; i++,
2b5a0 20 70 4d 65 6d 2b 2b 29 7b 0a 20 20 20 20 73 71   pMem++){.    sq
2b5b0 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49  lite3VdbeMemSetI
2b5c0 6e 74 36 34 28 70 4d 65 6d 2c 20 28 69 36 34 29  nt64(pMem, (i64)
2b5d0 61 52 65 73 5b 69 5d 29 3b 0a 20 20 7d 20 20 20  aRes[i]);.  }   
2b5e0 20 0a 20 20 62 72 65 61 6b 3b 0a 7d 3b 20 20 0a   .  break;.};  .
2b5f0 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20  #endif..#ifndef 
2b600 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 41 47  SQLITE_OMIT_PRAG
2b610 4d 41 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4a 6f  MA./* Opcode: Jo
2b620 75 72 6e 61 6c 4d 6f 64 65 20 50 31 20 50 32 20  urnalMode P1 P2 
2b630 50 33 20 2a 20 50 35 0a 2a 2a 0a 2a 2a 20 43 68  P3 * P5.**.** Ch
2b640 61 6e 67 65 20 74 68 65 20 6a 6f 75 72 6e 61 6c  ange the journal
2b650 20 6d 6f 64 65 20 6f 66 20 64 61 74 61 62 61 73   mode of databas
2b660 65 20 50 31 20 74 6f 20 50 33 2e 20 50 33 20 6d  e P1 to P3. P3 m
2b670 75 73 74 20 62 65 20 6f 6e 65 20 6f 66 20 74 68  ust be one of th
2b680 65 0a 2a 2a 20 50 41 47 45 52 5f 4a 4f 55 52 4e  e.** PAGER_JOURN
2b690 41 4c 4d 4f 44 45 5f 58 58 58 20 76 61 6c 75 65  ALMODE_XXX value
2b6a0 73 2e 20 49 66 20 63 68 61 6e 67 69 6e 67 20 62  s. If changing b
2b6b0 65 74 77 65 65 6e 20 74 68 65 20 76 61 72 69 6f  etween the vario
2b6c0 75 73 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 6d  us rollback.** m
2b6d0 6f 64 65 73 20 28 64 65 6c 65 74 65 2c 20 74 72  odes (delete, tr
2b6e0 75 6e 63 61 74 65 2c 20 70 65 72 73 69 73 74 2c  uncate, persist,
2b6f0 20 6f 66 66 20 61 6e 64 20 6d 65 6d 6f 72 79 29   off and memory)
2b700 2c 20 74 68 69 73 20 69 73 20 61 20 73 69 6d 70  , this is a simp
2b710 6c 65 0a 2a 2a 20 6f 70 65 72 61 74 69 6f 6e 2e  le.** operation.
2b720 20 4e 6f 20 49 4f 20 69 73 20 72 65 71 75 69 72   No IO is requir
2b730 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 63 68 61  ed..**.** If cha
2b740 6e 67 69 6e 67 20 69 6e 74 6f 20 6f 72 20 6f 75  nging into or ou
2b750 74 20 6f 66 20 57 41 4c 20 6d 6f 64 65 20 74 68  t of WAL mode th
2b760 65 20 70 72 6f 63 65 64 75 72 65 20 69 73 20 6d  e procedure is m
2b770 6f 72 65 20 63 6f 6d 70 6c 69 63 61 74 65 64 2e  ore complicated.
2b780 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 61 20 73  .**.** Write a s
2b790 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e 69 6e 67  tring containing
2b7a0 20 74 68 65 20 66 69 6e 61 6c 20 6a 6f 75 72 6e   the final journ
2b7b0 61 6c 2d 6d 6f 64 65 20 74 6f 20 72 65 67 69 73  al-mode to regis
2b7c0 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20  ter P2..*/.case 
2b7d0 4f 50 5f 4a 6f 75 72 6e 61 6c 4d 6f 64 65 3a 20  OP_JournalMode: 
2b7e0 7b 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65  {    /* out2-pre
2b7f0 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 42 74 72  release */.  Btr
2b800 65 65 20 2a 70 42 74 3b 20 20 20 20 20 20 20 20  ee *pBt;        
2b810 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
2b820 42 74 72 65 65 20 74 6f 20 63 68 61 6e 67 65 20  Btree to change 
2b830 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 6f 66 20  journal mode of 
2b840 2a 2f 0a 20 20 50 61 67 65 72 20 2a 70 50 61 67  */.  Pager *pPag
2b850 65 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  er;             
2b860 20 20 20 20 20 2f 2a 20 50 61 67 65 72 20 61 73       /* Pager as
2b870 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 70 42  sociated with pB
2b880 74 20 2a 2f 0a 20 20 69 6e 74 20 65 4e 65 77 3b  t */.  int eNew;
2b890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b8a0 20 20 20 20 20 20 20 2f 2a 20 4e 65 77 20 6a 6f         /* New jo
2b8b0 75 72 6e 61 6c 20 6d 6f 64 65 20 2a 2f 0a 20 20  urnal mode */.  
2b8c0 69 6e 74 20 65 4f 6c 64 3b 20 20 20 20 20 20 20  int eOld;       
2b8d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b8e0 2f 2a 20 54 68 65 20 6f 6c 64 20 6a 6f 75 72 6e  /* The old journ
2b8f0 61 6c 20 6d 6f 64 65 20 2a 2f 0a 20 20 63 6f 6e  al mode */.  con
2b900 73 74 20 63 68 61 72 20 2a 7a 46 69 6c 65 6e 61  st char *zFilena
2b910 6d 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  me;          /* 
2b920 4e 61 6d 65 20 6f 66 20 64 61 74 61 62 61 73 65  Name of database
2b930 20 66 69 6c 65 20 66 6f 72 20 70 50 61 67 65 72   file for pPager
2b940 20 2a 2f 0a 0a 20 20 65 4e 65 77 20 3d 20 70 4f   */..  eNew = pO
2b950 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72 74 28  p->p3;.  assert(
2b960 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55   eNew==PAGER_JOU
2b970 52 4e 41 4c 4d 4f 44 45 5f 44 45 4c 45 54 45 20  RNALMODE_DELETE 
2b980 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d  .       || eNew=
2b990 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f  =PAGER_JOURNALMO
2b9a0 44 45 5f 54 52 55 4e 43 41 54 45 20 0a 20 20 20  DE_TRUNCATE .   
2b9b0 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47      || eNew==PAG
2b9c0 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 50  ER_JOURNALMODE_P
2b9d0 45 52 53 49 53 54 20 0a 20 20 20 20 20 20 20 7c  ERSIST .       |
2b9e0 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f  | eNew==PAGER_JO
2b9f0 55 52 4e 41 4c 4d 4f 44 45 5f 4f 46 46 0a 20 20  URNALMODE_OFF.  
2ba00 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41       || eNew==PA
2ba10 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
2ba20 4d 45 4d 4f 52 59 0a 20 20 20 20 20 20 20 7c 7c  MEMORY.       ||
2ba30 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55   eNew==PAGER_JOU
2ba40 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 0a 20 20 20  RNALMODE_WAL.   
2ba50 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47      || eNew==PAG
2ba60 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 51  ER_JOURNALMODE_Q
2ba70 55 45 52 59 0a 20 20 29 3b 0a 20 20 61 73 73 65  UERY.  );.  asse
2ba80 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
2ba90 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44  & pOp->p1<db->nD
2baa0 62 20 29 3b 0a 0a 20 20 70 42 74 20 3d 20 64 62  b );..  pBt = db
2bab0 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70  ->aDb[pOp->p1].p
2bac0 42 74 3b 0a 20 20 70 50 61 67 65 72 20 3d 20 73  Bt;.  pPager = s
2bad0 71 6c 69 74 65 33 42 74 72 65 65 50 61 67 65 72  qlite3BtreePager
2bae0 28 70 42 74 29 3b 0a 20 20 65 4f 6c 64 20 3d 20  (pBt);.  eOld = 
2baf0 73 71 6c 69 74 65 33 50 61 67 65 72 47 65 74 4a  sqlite3PagerGetJ
2bb00 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65  ournalMode(pPage
2bb10 72 29 3b 0a 20 20 69 66 28 20 65 4e 65 77 3d 3d  r);.  if( eNew==
2bb20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
2bb30 45 5f 51 55 45 52 59 20 29 20 65 4e 65 77 20 3d  E_QUERY ) eNew =
2bb40 20 65 4f 6c 64 3b 0a 20 20 69 66 28 20 21 73 71   eOld;.  if( !sq
2bb50 6c 69 74 65 33 50 61 67 65 72 4f 6b 54 6f 43 68  lite3PagerOkToCh
2bb60 61 6e 67 65 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28  angeJournalMode(
2bb70 70 50 61 67 65 72 29 20 29 20 65 4e 65 77 20 3d  pPager) ) eNew =
2bb80 20 65 4f 6c 64 3b 0a 0a 23 69 66 6e 64 65 66 20   eOld;..#ifndef 
2bb90 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a  SQLITE_OMIT_WAL.
2bba0 20 20 7a 46 69 6c 65 6e 61 6d 65 20 3d 20 73 71    zFilename = sq
2bbb0 6c 69 74 65 33 50 61 67 65 72 46 69 6c 65 6e 61  lite3PagerFilena
2bbc0 6d 65 28 70 50 61 67 65 72 29 3b 0a 0a 20 20 2f  me(pPager);..  /
2bbd0 2a 20 44 6f 20 6e 6f 74 20 61 6c 6c 6f 77 20 61  * Do not allow a
2bbe0 20 74 72 61 6e 73 69 74 69 6f 6e 20 74 6f 20 6a   transition to j
2bbf0 6f 75 72 6e 61 6c 5f 6d 6f 64 65 3d 57 41 4c 20  ournal_mode=WAL 
2bc00 66 6f 72 20 61 20 64 61 74 61 62 61 73 65 0a 20  for a database. 
2bc10 20 2a 2a 20 69 6e 20 74 65 6d 70 6f 72 61 72 79   ** in temporary
2bc20 20 73 74 6f 72 61 67 65 20 6f 72 20 69 66 20 74   storage or if t
2bc30 68 65 20 56 46 53 20 64 6f 65 73 20 6e 6f 74 20  he VFS does not 
2bc40 73 75 70 70 6f 72 74 20 73 68 61 72 65 64 20 6d  support shared m
2bc50 65 6d 6f 72 79 20 0a 20 20 2a 2f 0a 20 20 69 66  emory .  */.  if
2bc60 28 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f  ( eNew==PAGER_JO
2bc70 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 0a 20 20  URNALMODE_WAL.  
2bc80 20 26 26 20 28 73 71 6c 69 74 65 33 53 74 72 6c   && (sqlite3Strl
2bc90 65 6e 33 30 28 7a 46 69 6c 65 6e 61 6d 65 29 3d  en30(zFilename)=
2bca0 3d 30 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  =0           /* 
2bcb0 54 65 6d 70 20 66 69 6c 65 20 2a 2f 0a 20 20 20  Temp file */.   
2bcc0 20 20 20 20 7c 7c 20 21 73 71 6c 69 74 65 33 50      || !sqlite3P
2bcd0 61 67 65 72 57 61 6c 53 75 70 70 6f 72 74 65 64  agerWalSupported
2bce0 28 70 50 61 67 65 72 29 29 20 20 20 2f 2a 20 4e  (pPager))   /* N
2bcf0 6f 20 73 68 61 72 65 64 2d 6d 65 6d 6f 72 79 20  o shared-memory 
2bd00 73 75 70 70 6f 72 74 20 2a 2f 0a 20 20 29 7b 0a  support */.  ){.
2bd10 20 20 20 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b      eNew = eOld;
2bd20 0a 20 20 7d 0a 0a 20 20 69 66 28 20 28 65 4e 65  .  }..  if( (eNe
2bd30 77 21 3d 65 4f 6c 64 29 0a 20 20 20 26 26 20 28  w!=eOld).   && (
2bd40 65 4f 6c 64 3d 3d 50 41 47 45 52 5f 4a 4f 55 52  eOld==PAGER_JOUR
2bd50 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 7c 7c 20 65  NALMODE_WAL || e
2bd60 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e  New==PAGER_JOURN
2bd70 41 4c 4d 4f 44 45 5f 57 41 4c 29 0a 20 20 29 7b  ALMODE_WAL).  ){
2bd80 0a 20 20 20 20 69 66 28 20 21 64 62 2d 3e 61 75  .    if( !db->au
2bd90 74 6f 43 6f 6d 6d 69 74 20 7c 7c 20 64 62 2d 3e  toCommit || db->
2bda0 61 63 74 69 76 65 56 64 62 65 43 6e 74 3e 31 20  activeVdbeCnt>1 
2bdb0 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51  ){.      rc = SQ
2bdc0 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20  LITE_ERROR;.    
2bdd0 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69    sqlite3SetStri
2bde0 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20  ng(&p->zErrMsg, 
2bdf0 64 62 2c 20 0a 20 20 20 20 20 20 20 20 20 20 22  db, .          "
2be00 63 61 6e 6e 6f 74 20 63 68 61 6e 67 65 20 25 73  cannot change %s
2be10 20 77 61 6c 20 6d 6f 64 65 20 66 72 6f 6d 20 77   wal mode from w
2be20 69 74 68 69 6e 20 61 20 74 72 61 6e 73 61 63 74  ithin a transact
2be30 69 6f 6e 22 2c 0a 20 20 20 20 20 20 20 20 20 20  ion",.          
2be40 28 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55  (eNew==PAGER_JOU
2be50 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 3f 20 22  RNALMODE_WAL ? "
2be60 69 6e 74 6f 22 20 3a 20 22 6f 75 74 20 6f 66 22  into" : "out of"
2be70 29 0a 20 20 20 20 20 20 29 3b 0a 20 20 20 20 20  ).      );.     
2be80 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 65 6c 73   break;.    }els
2be90 65 7b 0a 20 0a 20 20 20 20 20 20 69 66 28 20 65  e{. .      if( e
2bea0 4f 6c 64 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e  Old==PAGER_JOURN
2beb0 41 4c 4d 4f 44 45 5f 57 41 4c 20 29 7b 0a 20 20  ALMODE_WAL ){.  
2bec0 20 20 20 20 20 20 2f 2a 20 49 66 20 6c 65 61 76        /* If leav
2bed0 69 6e 67 20 57 41 4c 20 6d 6f 64 65 2c 20 63 6c  ing WAL mode, cl
2bee0 6f 73 65 20 74 68 65 20 6c 6f 67 20 66 69 6c 65  ose the log file
2bef0 2e 20 49 66 20 73 75 63 63 65 73 73 66 75 6c 2c  . If successful,
2bf00 20 74 68 65 20 63 61 6c 6c 0a 20 20 20 20 20 20   the call.      
2bf10 20 20 2a 2a 20 74 6f 20 50 61 67 65 72 43 6c 6f    ** to PagerClo
2bf20 73 65 57 61 6c 28 29 20 63 68 65 63 6b 70 6f 69  seWal() checkpoi
2bf30 6e 74 73 20 61 6e 64 20 64 65 6c 65 74 65 73 20  nts and deletes 
2bf40 74 68 65 20 77 72 69 74 65 2d 61 68 65 61 64 2d  the write-ahead-
2bf50 6c 6f 67 20 0a 20 20 20 20 20 20 20 20 2a 2a 20  log .        ** 
2bf60 66 69 6c 65 2e 20 41 6e 20 45 58 43 4c 55 53 49  file. An EXCLUSI
2bf70 56 45 20 6c 6f 63 6b 20 6d 61 79 20 73 74 69 6c  VE lock may stil
2bf80 6c 20 62 65 20 68 65 6c 64 20 6f 6e 20 74 68 65  l be held on the
2bf90 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 0a   database file .
2bfa0 20 20 20 20 20 20 20 20 2a 2a 20 61 66 74 65 72          ** after
2bfb0 20 61 20 73 75 63 63 65 73 73 66 75 6c 20 72 65   a successful re
2bfc0 74 75 72 6e 2e 20 0a 20 20 20 20 20 20 20 20 2a  turn. .        *
2bfd0 2f 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73  /.        rc = s
2bfe0 71 6c 69 74 65 33 50 61 67 65 72 43 6c 6f 73 65  qlite3PagerClose
2bff0 57 61 6c 28 70 50 61 67 65 72 29 3b 0a 20 20 20  Wal(pPager);.   
2c000 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c       if( rc==SQL
2c010 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
2c020 20 20 20 20 73 71 6c 69 74 65 33 50 61 67 65 72      sqlite3Pager
2c030 53 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70  SetJournalMode(p
2c040 50 61 67 65 72 2c 20 65 4e 65 77 29 3b 0a 20 20  Pager, eNew);.  
2c050 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 65        }.      }e
2c060 6c 73 65 20 69 66 28 20 65 4f 6c 64 3d 3d 50 41  lse if( eOld==PA
2c070 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
2c080 4d 45 4d 4f 52 59 20 29 7b 0a 20 20 20 20 20 20  MEMORY ){.      
2c090 20 20 2f 2a 20 43 61 6e 6e 6f 74 20 74 72 61 6e    /* Cannot tran
2c0a0 73 69 74 69 6f 6e 20 64 69 72 65 63 74 6c 79 20  sition directly 
2c0b0 66 72 6f 6d 20 4d 45 4d 4f 52 59 20 74 6f 20 57  from MEMORY to W
2c0c0 41 4c 2e 20 20 55 73 65 20 6d 6f 64 65 20 4f 46  AL.  Use mode OF
2c0d0 46 0a 20 20 20 20 20 20 20 20 2a 2a 20 61 73 20  F.        ** as 
2c0e0 61 6e 20 69 6e 74 65 72 6d 65 64 69 61 74 65 20  an intermediate 
2c0f0 2a 2f 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  */.        sqlit
2c100 65 33 50 61 67 65 72 53 65 74 4a 6f 75 72 6e 61  e3PagerSetJourna
2c110 6c 4d 6f 64 65 28 70 50 61 67 65 72 2c 20 50 41  lMode(pPager, PA
2c120 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
2c130 4f 46 46 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  OFF);.      }.  
2c140 0a 20 20 20 20 20 20 2f 2a 20 4f 70 65 6e 20 61  .      /* Open a
2c150 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f 6e 20   transaction on 
2c160 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
2c170 65 2e 20 52 65 67 61 72 64 6c 65 73 73 20 6f 66  e. Regardless of
2c180 20 74 68 65 20 6a 6f 75 72 6e 61 6c 0a 20 20 20   the journal.   
2c190 20 20 20 2a 2a 20 6d 6f 64 65 2c 20 74 68 69 73     ** mode, this
2c1a0 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61 6c 77   transaction alw
2c1b0 61 79 73 20 75 73 65 73 20 61 20 72 6f 6c 6c 62  ays uses a rollb
2c1c0 61 63 6b 20 6a 6f 75 72 6e 61 6c 2e 0a 20 20 20  ack journal..   
2c1d0 20 20 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65     */.      asse
2c1e0 72 74 28 20 73 71 6c 69 74 65 33 42 74 72 65 65  rt( sqlite3Btree
2c1f0 49 73 49 6e 54 72 61 6e 73 28 70 42 74 29 3d 3d  IsInTrans(pBt)==
2c200 30 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72  0 );.      if( r
2c210 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
2c220 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c          rc = sql
2c230 69 74 65 33 42 74 72 65 65 53 65 74 56 65 72 73  ite3BtreeSetVers
2c240 69 6f 6e 28 70 42 74 2c 20 28 65 4e 65 77 3d 3d  ion(pBt, (eNew==
2c250 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
2c260 45 5f 57 41 4c 20 3f 20 32 20 3a 20 31 29 29 3b  E_WAL ? 2 : 1));
2c270 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
2c280 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 69 66 6e   }.#endif /* ifn
2c290 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2c2a0 57 41 4c 20 2a 2f 0a 0a 20 20 69 66 28 20 72 63  WAL */..  if( rc
2c2b0 20 29 7b 0a 20 20 20 20 65 4e 65 77 20 3d 20 65   ){.    eNew = e
2c2c0 4f 6c 64 3b 0a 20 20 7d 0a 20 20 65 4e 65 77 20  Old;.  }.  eNew 
2c2d0 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72 53 65  = sqlite3PagerSe
2c2e0 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61  tJournalMode(pPa
2c2f0 67 65 72 2c 20 65 4e 65 77 29 3b 0a 0a 20 20 70  ger, eNew);..  p
2c300 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
2c310 3e 70 32 5d 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c  >p2];.  pOut->fl
2c320 61 67 73 20 3d 20 4d 45 4d 5f 53 74 72 7c 4d 45  ags = MEM_Str|ME
2c330 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 54 65 72  M_Static|MEM_Ter
2c340 6d 3b 0a 20 20 70 4f 75 74 2d 3e 7a 20 3d 20 28  m;.  pOut->z = (
2c350 63 68 61 72 20 2a 29 73 71 6c 69 74 65 33 4a 6f  char *)sqlite3Jo
2c360 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28 65 4e  urnalModename(eN
2c370 65 77 29 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d  ew);.  pOut->n =
2c380 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30   sqlite3Strlen30
2c390 28 70 4f 75 74 2d 3e 7a 29 3b 0a 20 20 70 4f 75  (pOut->z);.  pOu
2c3a0 74 2d 3e 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f  t->enc = SQLITE_
2c3b0 55 54 46 38 3b 0a 20 20 73 71 6c 69 74 65 33 56  UTF8;.  sqlite3V
2c3c0 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e  dbeChangeEncodin
2c3d0 67 28 70 4f 75 74 2c 20 65 6e 63 6f 64 69 6e 67  g(pOut, encoding
2c3e0 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 3b 0a 23  );.  break;.};.#
2c3f0 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
2c400 4f 4d 49 54 5f 50 52 41 47 4d 41 20 2a 2f 0a 0a  OMIT_PRAGMA */..
2c410 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
2c420 49 54 45 5f 4f 4d 49 54 5f 56 41 43 55 55 4d 29  ITE_OMIT_VACUUM)
2c430 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c   && !defined(SQL
2c440 49 54 45 5f 4f 4d 49 54 5f 41 54 54 41 43 48 29  ITE_OMIT_ATTACH)
2c450 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 61 63 75  ./* Opcode: Vacu
2c460 75 6d 20 2a 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a  um * * * * *.**.
2c470 2a 2a 20 56 61 63 75 75 6d 20 74 68 65 20 65 6e  ** Vacuum the en
2c480 74 69 72 65 20 64 61 74 61 62 61 73 65 2e 20 20  tire database.  
2c490 54 68 69 73 20 6f 70 63 6f 64 65 20 77 69 6c 6c  This opcode will
2c4a0 20 63 61 75 73 65 20 6f 74 68 65 72 20 76 69 72   cause other vir
2c4b0 74 75 61 6c 0a 2a 2a 20 6d 61 63 68 69 6e 65 73  tual.** machines
2c4c0 20 74 6f 20 62 65 20 63 72 65 61 74 65 64 20 61   to be created a
2c4d0 6e 64 20 72 75 6e 2e 20 20 49 74 20 6d 61 79 20  nd run.  It may 
2c4e0 6e 6f 74 20 62 65 20 63 61 6c 6c 65 64 20 66 72  not be called fr
2c4f0 6f 6d 20 77 69 74 68 69 6e 0a 2a 2a 20 61 20 74  om within.** a t
2c500 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 2a 2f 0a 63  ransaction..*/.c
2c510 61 73 65 20 4f 50 5f 56 61 63 75 75 6d 3a 20 7b  ase OP_Vacuum: {
2c520 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 52  .  rc = sqlite3R
2c530 75 6e 56 61 63 75 75 6d 28 26 70 2d 3e 7a 45 72  unVacuum(&p->zEr
2c540 72 4d 73 67 2c 20 64 62 29 3b 0a 20 20 62 72 65  rMsg, db);.  bre
2c550 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69  ak;.}.#endif..#i
2c560 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
2c570 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55  E_OMIT_AUTOVACUU
2c580 4d 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e  M)./* Opcode: In
2c590 63 72 56 61 63 75 75 6d 20 50 31 20 50 32 20 2a  crVacuum P1 P2 *
2c5a0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50 65 72 66 6f   * *.**.** Perfo
2c5b0 72 6d 20 61 20 73 69 6e 67 6c 65 20 73 74 65 70  rm a single step
2c5c0 20 6f 66 20 74 68 65 20 69 6e 63 72 65 6d 65 6e   of the incremen
2c5d0 74 61 6c 20 76 61 63 75 75 6d 20 70 72 6f 63 65  tal vacuum proce
2c5e0 64 75 72 65 20 6f 6e 0a 2a 2a 20 74 68 65 20 50  dure on.** the P
2c5f0 31 20 64 61 74 61 62 61 73 65 2e 20 49 66 20 74  1 database. If t
2c600 68 65 20 76 61 63 75 75 6d 20 68 61 73 20 66 69  he vacuum has fi
2c610 6e 69 73 68 65 64 2c 20 6a 75 6d 70 20 74 6f 20  nished, jump to 
2c620 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 50  instruction.** P
2c630 32 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 66 61  2. Otherwise, fa
2c640 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  ll through to th
2c650 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69  e next instructi
2c660 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  on..*/.case OP_I
2c670 6e 63 72 56 61 63 75 75 6d 3a 20 7b 20 20 20 20  ncrVacuum: {    
2c680 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20      /* jump */. 
2c690 20 42 74 72 65 65 20 2a 70 42 74 3b 0a 0a 20 20   Btree *pBt;..  
2c6a0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
2c6b0 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62  =0 && pOp->p1<db
2c6c0 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72  ->nDb );.  asser
2c6d0 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b  t( (p->btreeMask
2c6e0 20 26 20 28 28 28 79 44 62 4d 61 73 6b 29 31 29   & (((yDbMask)1)
2c6f0 3c 3c 70 4f 70 2d 3e 70 31 29 29 21 3d 30 20 29  <<pOp->p1))!=0 )
2c700 3b 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e 61 44  ;.  pBt = db->aD
2c710 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a  b[pOp->p1].pBt;.
2c720 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
2c730 72 65 65 49 6e 63 72 56 61 63 75 75 6d 28 70 42  reeIncrVacuum(pB
2c740 74 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51  t);.  if( rc==SQ
2c750 4c 49 54 45 5f 44 4f 4e 45 20 29 7b 0a 20 20 20  LITE_DONE ){.   
2c760 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
2c770 31 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49  1;.    rc = SQLI
2c780 54 45 5f 4f 4b 3b 0a 20 20 7d 0a 20 20 62 72 65  TE_OK;.  }.  bre
2c790 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ak;.}.#endif../*
2c7a0 20 4f 70 63 6f 64 65 3a 20 45 78 70 69 72 65 20   Opcode: Expire 
2c7b0 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  P1 * * * *.**.**
2c7c0 20 43 61 75 73 65 20 70 72 65 63 6f 6d 70 69 6c   Cause precompil
2c7d0 65 64 20 73 74 61 74 65 6d 65 6e 74 73 20 74 6f  ed statements to
2c7e0 20 62 65 63 6f 6d 65 20 65 78 70 69 72 65 64 2e   become expired.
2c7f0 20 41 6e 20 65 78 70 69 72 65 64 20 73 74 61 74   An expired stat
2c800 65 6d 65 6e 74 0a 2a 2a 20 66 61 69 6c 73 20 77  ement.** fails w
2c810 69 74 68 20 61 6e 20 65 72 72 6f 72 20 63 6f 64  ith an error cod
2c820 65 20 6f 66 20 53 51 4c 49 54 45 5f 53 43 48 45  e of SQLITE_SCHE
2c830 4d 41 20 69 66 20 69 74 20 69 73 20 65 76 65 72  MA if it is ever
2c840 20 65 78 65 63 75 74 65 64 20 0a 2a 2a 20 28 76   executed .** (v
2c850 69 61 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28  ia sqlite3_step(
2c860 29 29 2e 0a 2a 2a 20 0a 2a 2a 20 49 66 20 50 31  ))..** .** If P1
2c870 20 69 73 20 30 2c 20 74 68 65 6e 20 61 6c 6c 20   is 0, then all 
2c880 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 62  SQL statements b
2c890 65 63 6f 6d 65 20 65 78 70 69 72 65 64 2e 20 49  ecome expired. I
2c8a0 66 20 50 31 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f  f P1 is non-zero
2c8b0 2c 0a 2a 2a 20 74 68 65 6e 20 6f 6e 6c 79 20 74  ,.** then only t
2c8c0 68 65 20 63 75 72 72 65 6e 74 6c 79 20 65 78 65  he currently exe
2c8d0 63 75 74 69 6e 67 20 73 74 61 74 65 6d 65 6e 74  cuting statement
2c8e0 20 69 73 20 61 66 66 65 63 74 65 64 2e 20 0a 2a   is affected. .*
2c8f0 2f 0a 63 61 73 65 20 4f 50 5f 45 78 70 69 72 65  /.case OP_Expire
2c900 3a 20 7b 0a 20 20 69 66 28 20 21 70 4f 70 2d 3e  : {.  if( !pOp->
2c910 70 31 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  p1 ){.    sqlite
2c920 33 45 78 70 69 72 65 50 72 65 70 61 72 65 64 53  3ExpirePreparedS
2c930 74 61 74 65 6d 65 6e 74 73 28 64 62 29 3b 0a 20  tatements(db);. 
2c940 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 2d 3e 65   }else{.    p->e
2c950 78 70 69 72 65 64 20 3d 20 31 3b 0a 20 20 7d 0a  xpired = 1;.  }.
2c960 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e    break;.}..#ifn
2c970 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2c980 53 48 41 52 45 44 5f 43 41 43 48 45 0a 2f 2a 20  SHARED_CACHE./* 
2c990 4f 70 63 6f 64 65 3a 20 54 61 62 6c 65 4c 6f 63  Opcode: TableLoc
2c9a0 6b 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a  k P1 P2 P3 P4 *.
2c9b0 2a 2a 0a 2a 2a 20 4f 62 74 61 69 6e 20 61 20 6c  **.** Obtain a l
2c9c0 6f 63 6b 20 6f 6e 20 61 20 70 61 72 74 69 63 75  ock on a particu
2c9d0 6c 61 72 20 74 61 62 6c 65 2e 20 54 68 69 73 20  lar table. This 
2c9e0 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 6f  instruction is o
2c9f0 6e 6c 79 20 75 73 65 64 20 77 68 65 6e 0a 2a 2a  nly used when.**
2ca00 20 74 68 65 20 73 68 61 72 65 64 2d 63 61 63 68   the shared-cach
2ca10 65 20 66 65 61 74 75 72 65 20 69 73 20 65 6e 61  e feature is ena
2ca20 62 6c 65 64 2e 20 0a 2a 2a 0a 2a 2a 20 50 31 20  bled. .**.** P1 
2ca30 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20  is the index of 
2ca40 74 68 65 20 64 61 74 61 62 61 73 65 20 69 6e 20  the database in 
2ca50 73 71 6c 69 74 65 33 2e 61 44 62 5b 5d 20 6f 66  sqlite3.aDb[] of
2ca60 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a   the database.**
2ca70 20 6f 6e 20 77 68 69 63 68 20 74 68 65 20 6c 6f   on which the lo
2ca80 63 6b 20 69 73 20 61 63 71 75 69 72 65 64 2e 20  ck is acquired. 
2ca90 20 41 20 72 65 61 64 6c 6f 63 6b 20 69 73 20 6f   A readlock is o
2caa0 62 74 61 69 6e 65 64 20 69 66 20 50 33 3d 3d 30  btained if P3==0
2cab0 20 6f 72 0a 2a 2a 20 61 20 77 72 69 74 65 20 6c   or.** a write l
2cac0 6f 63 6b 20 69 66 20 50 33 3d 3d 31 2e 0a 2a 2a  ock if P3==1..**
2cad0 0a 2a 2a 20 50 32 20 63 6f 6e 74 61 69 6e 73 20  .** P2 contains 
2cae0 74 68 65 20 72 6f 6f 74 2d 70 61 67 65 20 6f 66  the root-page of
2caf0 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 6c 6f   the table to lo
2cb00 63 6b 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 63 6f 6e  ck..**.** P4 con
2cb10 74 61 69 6e 73 20 61 20 70 6f 69 6e 74 65 72 20  tains a pointer 
2cb20 74 6f 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74  to the name of t
2cb30 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 6c  he table being l
2cb40 6f 63 6b 65 64 2e 20 54 68 69 73 20 69 73 20 6f  ocked. This is o
2cb50 6e 6c 79 0a 2a 2a 20 75 73 65 64 20 74 6f 20 67  nly.** used to g
2cb60 65 6e 65 72 61 74 65 20 61 6e 20 65 72 72 6f 72  enerate an error
2cb70 20 6d 65 73 73 61 67 65 20 69 66 20 74 68 65 20   message if the 
2cb80 6c 6f 63 6b 20 63 61 6e 6e 6f 74 20 62 65 20 6f  lock cannot be o
2cb90 62 74 61 69 6e 65 64 2e 0a 2a 2f 0a 63 61 73 65  btained..*/.case
2cba0 20 4f 50 5f 54 61 62 6c 65 4c 6f 63 6b 3a 20 7b   OP_TableLock: {
2cbb0 0a 20 20 75 38 20 69 73 57 72 69 74 65 4c 6f 63  .  u8 isWriteLoc
2cbc0 6b 20 3d 20 28 75 38 29 70 4f 70 2d 3e 70 33 3b  k = (u8)pOp->p3;
2cbd0 0a 20 20 69 66 28 20 69 73 57 72 69 74 65 4c 6f  .  if( isWriteLo
2cbe0 63 6b 20 7c 7c 20 30 3d 3d 28 64 62 2d 3e 66 6c  ck || 0==(db->fl
2cbf0 61 67 73 26 53 51 4c 49 54 45 5f 52 65 61 64 55  ags&SQLITE_ReadU
2cc00 6e 63 6f 6d 6d 69 74 74 65 64 29 20 29 7b 0a 20  ncommitted) ){. 
2cc10 20 20 20 69 6e 74 20 70 31 20 3d 20 70 4f 70 2d     int p1 = pOp-
2cc20 3e 70 31 3b 20 0a 20 20 20 20 61 73 73 65 72 74  >p1; .    assert
2cc30 28 20 70 31 3e 3d 30 20 26 26 20 70 31 3c 64 62  ( p1>=0 && p1<db
2cc40 2d 3e 6e 44 62 20 29 3b 0a 20 20 20 20 61 73 73  ->nDb );.    ass
2cc50 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61  ert( (p->btreeMa
2cc60 73 6b 20 26 20 28 28 28 79 44 62 4d 61 73 6b 29  sk & (((yDbMask)
2cc70 31 29 3c 3c 70 31 29 29 21 3d 30 20 29 3b 0a 20  1)<<p1))!=0 );. 
2cc80 20 20 20 61 73 73 65 72 74 28 20 69 73 57 72 69     assert( isWri
2cc90 74 65 4c 6f 63 6b 3d 3d 30 20 7c 7c 20 69 73 57  teLock==0 || isW
2cca0 72 69 74 65 4c 6f 63 6b 3d 3d 31 20 29 3b 0a 20  riteLock==1 );. 
2ccb0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
2ccc0 74 72 65 65 4c 6f 63 6b 54 61 62 6c 65 28 64 62  treeLockTable(db
2ccd0 2d 3e 61 44 62 5b 70 31 5d 2e 70 42 74 2c 20 70  ->aDb[p1].pBt, p
2cce0 4f 70 2d 3e 70 32 2c 20 69 73 57 72 69 74 65 4c  Op->p2, isWriteL
2ccf0 6f 63 6b 29 3b 0a 20 20 20 20 69 66 28 20 28 72  ock);.    if( (r
2cd00 63 26 30 78 46 46 29 3d 3d 53 51 4c 49 54 45 5f  c&0xFF)==SQLITE_
2cd10 4c 4f 43 4b 45 44 20 29 7b 0a 20 20 20 20 20 20  LOCKED ){.      
2cd20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 20 3d 20  const char *z = 
2cd30 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 20 20 20  pOp->p4.z;.     
2cd40 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
2cd50 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64  g(&p->zErrMsg, d
2cd60 62 2c 20 22 64 61 74 61 62 61 73 65 20 74 61 62  b, "database tab
2cd70 6c 65 20 69 73 20 6c 6f 63 6b 65 64 3a 20 25 73  le is locked: %s
2cd80 22 2c 20 7a 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  ", z);.    }.  }
2cd90 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
2cda0 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
2cdb0 54 5f 53 48 41 52 45 44 5f 43 41 43 48 45 20 2a  T_SHARED_CACHE *
2cdc0 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  /..#ifndef SQLIT
2cdd0 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
2cde0 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56  BLE./* Opcode: V
2cdf0 42 65 67 69 6e 20 2a 20 2a 20 2a 20 50 34 20 2a  Begin * * * P4 *
2ce00 0a 2a 2a 0a 2a 2a 20 50 34 20 6d 61 79 20 62 65  .**.** P4 may be
2ce10 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 6e   a pointer to an
2ce20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74   sqlite3_vtab st
2ce30 72 75 63 74 75 72 65 2e 20 49 66 20 73 6f 2c 20  ructure. If so, 
2ce40 63 61 6c 6c 20 74 68 65 20 0a 2a 2a 20 78 42 65  call the .** xBe
2ce50 67 69 6e 20 6d 65 74 68 6f 64 20 66 6f 72 20 74  gin method for t
2ce60 68 61 74 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a  hat table..**.**
2ce70 20 41 6c 73 6f 2c 20 77 68 65 74 68 65 72 20 6f   Also, whether o
2ce80 72 20 6e 6f 74 20 50 34 20 69 73 20 73 65 74 2c  r not P4 is set,
2ce90 20 63 68 65 63 6b 20 74 68 61 74 20 74 68 69 73   check that this
2cea0 20 69 73 20 6e 6f 74 20 62 65 69 6e 67 20 63 61   is not being ca
2ceb0 6c 6c 65 64 20 66 72 6f 6d 0a 2a 2a 20 77 69 74  lled from.** wit
2cec0 68 69 6e 20 61 20 63 61 6c 6c 62 61 63 6b 20 74  hin a callback t
2ced0 6f 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c  o a virtual tabl
2cee0 65 20 78 53 79 6e 63 28 29 20 6d 65 74 68 6f 64  e xSync() method
2cef0 2e 20 49 66 20 69 74 20 69 73 2c 20 74 68 65 20  . If it is, the 
2cf00 65 72 72 6f 72 0a 2a 2a 20 63 6f 64 65 20 77 69  error.** code wi
2cf10 6c 6c 20 62 65 20 73 65 74 20 74 6f 20 53 51 4c  ll be set to SQL
2cf20 49 54 45 5f 4c 4f 43 4b 45 44 2e 0a 2a 2f 0a 63  ITE_LOCKED..*/.c
2cf30 61 73 65 20 4f 50 5f 56 42 65 67 69 6e 3a 20 7b  ase OP_VBegin: {
2cf40 0a 20 20 56 54 61 62 6c 65 20 2a 70 56 54 61 62  .  VTable *pVTab
2cf50 3b 0a 20 20 70 56 54 61 62 20 3d 20 70 4f 70 2d  ;.  pVTab = pOp-
2cf60 3e 70 34 2e 70 56 74 61 62 3b 0a 20 20 72 63 20  >p4.pVtab;.  rc 
2cf70 3d 20 73 71 6c 69 74 65 33 56 74 61 62 42 65 67  = sqlite3VtabBeg
2cf80 69 6e 28 64 62 2c 20 70 56 54 61 62 29 3b 0a 20  in(db, pVTab);. 
2cf90 20 69 66 28 20 70 56 54 61 62 20 29 20 69 6d 70   if( pVTab ) imp
2cfa0 6f 72 74 56 74 61 62 45 72 72 4d 73 67 28 70 2c  ortVtabErrMsg(p,
2cfb0 20 70 56 54 61 62 2d 3e 70 56 74 61 62 29 3b 0a   pVTab->pVtab);.
2cfc0 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
2cfd0 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
2cfe0 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f  _VIRTUALTABLE */
2cff0 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
2d000 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
2d010 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 43  LE./* Opcode: VC
2d020 72 65 61 74 65 20 50 31 20 2a 20 2a 20 50 34 20  reate P1 * * P4 
2d030 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 74 68  *.**.** P4 is th
2d040 65 20 6e 61 6d 65 20 6f 66 20 61 20 76 69 72 74  e name of a virt
2d050 75 61 6c 20 74 61 62 6c 65 20 69 6e 20 64 61 74  ual table in dat
2d060 61 62 61 73 65 20 50 31 2e 20 43 61 6c 6c 20 74  abase P1. Call t
2d070 68 65 20 78 43 72 65 61 74 65 20 6d 65 74 68 6f  he xCreate metho
2d080 64 0a 2a 2a 20 66 6f 72 20 74 68 61 74 20 74 61  d.** for that ta
2d090 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ble..*/.case OP_
2d0a0 56 43 72 65 61 74 65 3a 20 7b 0a 20 20 72 63 20  VCreate: {.  rc 
2d0b0 3d 20 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c  = sqlite3VtabCal
2d0c0 6c 43 72 65 61 74 65 28 64 62 2c 20 70 4f 70 2d  lCreate(db, pOp-
2d0d0 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20  >p1, pOp->p4.z, 
2d0e0 26 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20  &p->zErrMsg);.  
2d0f0 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20  break;.}.#endif 
2d100 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  /* SQLITE_OMIT_V
2d110 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a  IRTUALTABLE */..
2d120 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2d130 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
2d140 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 44 65 73  ./* Opcode: VDes
2d150 74 72 6f 79 20 50 31 20 2a 20 2a 20 50 34 20 2a  troy P1 * * P4 *
2d160 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 74 68 65  .**.** P4 is the
2d170 20 6e 61 6d 65 20 6f 66 20 61 20 76 69 72 74 75   name of a virtu
2d180 61 6c 20 74 61 62 6c 65 20 69 6e 20 64 61 74 61  al table in data
2d190 62 61 73 65 20 50 31 2e 20 20 43 61 6c 6c 20 74  base P1.  Call t
2d1a0 68 65 20 78 44 65 73 74 72 6f 79 20 6d 65 74 68  he xDestroy meth
2d1b0 6f 64 0a 2a 2a 20 6f 66 20 74 68 61 74 20 74 61  od.** of that ta
2d1c0 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ble..*/.case OP_
2d1d0 56 44 65 73 74 72 6f 79 3a 20 7b 0a 20 20 70 2d  VDestroy: {.  p-
2d1e0 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64 20 3d 20  >inVtabMethod = 
2d1f0 32 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  2;.  rc = sqlite
2d200 33 56 74 61 62 43 61 6c 6c 44 65 73 74 72 6f 79  3VtabCallDestroy
2d210 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f  (db, pOp->p1, pO
2d220 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 70 2d 3e 69  p->p4.z);.  p->i
2d230 6e 56 74 61 62 4d 65 74 68 6f 64 20 3d 20 30 3b  nVtabMethod = 0;
2d240 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
2d250 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
2d260 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a  T_VIRTUALTABLE *
2d270 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  /..#ifndef SQLIT
2d280 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
2d290 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56  BLE./* Opcode: V
2d2a0 4f 70 65 6e 20 50 31 20 2a 20 2a 20 50 34 20 2a  Open P1 * * P4 *
2d2b0 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70  .**.** P4 is a p
2d2c0 6f 69 6e 74 65 72 20 74 6f 20 61 20 76 69 72 74  ointer to a virt
2d2d0 75 61 6c 20 74 61 62 6c 65 20 6f 62 6a 65 63 74  ual table object
2d2e0 2c 20 61 6e 20 73 71 6c 69 74 65 33 5f 76 74 61  , an sqlite3_vta
2d2f0 62 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 20  b structure..** 
2d300 50 31 20 69 73 20 61 20 63 75 72 73 6f 72 20 6e  P1 is a cursor n
2d310 75 6d 62 65 72 2e 20 20 54 68 69 73 20 6f 70 63  umber.  This opc
2d320 6f 64 65 20 6f 70 65 6e 73 20 61 20 63 75 72 73  ode opens a curs
2d330 6f 72 20 74 6f 20 74 68 65 20 76 69 72 74 75 61  or to the virtua
2d340 6c 0a 2a 2a 20 74 61 62 6c 65 20 61 6e 64 20 73  l.** table and s
2d350 74 6f 72 65 73 20 74 68 61 74 20 63 75 72 73 6f  tores that curso
2d360 72 20 69 6e 20 50 31 2e 0a 2a 2f 0a 63 61 73 65  r in P1..*/.case
2d370 20 4f 50 5f 56 4f 70 65 6e 3a 20 7b 0a 20 20 56   OP_VOpen: {.  V
2d380 64 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72 3b  dbeCursor *pCur;
2d390 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f  .  sqlite3_vtab_
2d3a0 63 75 72 73 6f 72 20 2a 70 56 74 61 62 43 75 72  cursor *pVtabCur
2d3b0 73 6f 72 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76  sor;.  sqlite3_v
2d3c0 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 73 71  tab *pVtab;.  sq
2d3d0 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d  lite3_module *pM
2d3e0 6f 64 75 6c 65 3b 0a 0a 20 20 70 43 75 72 20 3d  odule;..  pCur =
2d3f0 20 30 3b 0a 20 20 70 56 74 61 62 43 75 72 73 6f   0;.  pVtabCurso
2d400 72 20 3d 20 30 3b 0a 20 20 70 56 74 61 62 20 3d  r = 0;.  pVtab =
2d410 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62 2d 3e   pOp->p4.pVtab->
2d420 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65  pVtab;.  pModule
2d430 20 3d 20 28 73 71 6c 69 74 65 33 5f 6d 6f 64 75   = (sqlite3_modu
2d440 6c 65 20 2a 29 70 56 74 61 62 2d 3e 70 4d 6f 64  le *)pVtab->pMod
2d450 75 6c 65 3b 0a 20 20 61 73 73 65 72 74 28 70 56  ule;.  assert(pV
2d460 74 61 62 20 26 26 20 70 4d 6f 64 75 6c 65 29 3b  tab && pModule);
2d470 0a 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d  .  rc = pModule-
2d480 3e 78 4f 70 65 6e 28 70 56 74 61 62 2c 20 26 70  >xOpen(pVtab, &p
2d490 56 74 61 62 43 75 72 73 6f 72 29 3b 0a 20 20 69  VtabCursor);.  i
2d4a0 6d 70 6f 72 74 56 74 61 62 45 72 72 4d 73 67 28  mportVtabErrMsg(
2d4b0 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 69 66 28  p, pVtab);.  if(
2d4c0 20 53 51 4c 49 54 45 5f 4f 4b 3d 3d 72 63 20 29   SQLITE_OK==rc )
2d4d0 7b 0a 20 20 20 20 2f 2a 20 49 6e 69 74 69 61 6c  {.    /* Initial
2d4e0 69 7a 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62  ize sqlite3_vtab
2d4f0 5f 63 75 72 73 6f 72 20 62 61 73 65 20 63 6c 61  _cursor base cla
2d500 73 73 20 2a 2f 0a 20 20 20 20 70 56 74 61 62 43  ss */.    pVtabC
2d510 75 72 73 6f 72 2d 3e 70 56 74 61 62 20 3d 20 70  ursor->pVtab = p
2d520 56 74 61 62 3b 0a 0a 20 20 20 20 2f 2a 20 49 6e  Vtab;..    /* In
2d530 69 74 69 61 6c 69 73 65 20 76 64 62 65 20 63 75  itialise vdbe cu
2d540 72 73 6f 72 20 6f 62 6a 65 63 74 20 2a 2f 0a 20  rsor object */. 
2d550 20 20 20 70 43 75 72 20 3d 20 61 6c 6c 6f 63 61     pCur = alloca
2d560 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d  teCursor(p, pOp-
2d570 3e 70 31 2c 20 30 2c 20 2d 31 2c 20 30 29 3b 0a  >p1, 0, -1, 0);.
2d580 20 20 20 20 69 66 28 20 70 43 75 72 20 29 7b 0a      if( pCur ){.
2d590 20 20 20 20 20 20 70 43 75 72 2d 3e 70 56 74 61        pCur->pVta
2d5a0 62 43 75 72 73 6f 72 20 3d 20 70 56 74 61 62 43  bCursor = pVtabC
2d5b0 75 72 73 6f 72 3b 0a 20 20 20 20 20 20 70 43 75  ursor;.      pCu
2d5c0 72 2d 3e 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74  r->pModule = pVt
2d5d0 61 62 43 75 72 73 6f 72 2d 3e 70 56 74 61 62 2d  abCursor->pVtab-
2d5e0 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 20 20 7d 65  >pModule;.    }e
2d5f0 6c 73 65 7b 0a 20 20 20 20 20 20 64 62 2d 3e 6d  lse{.      db->m
2d600 61 6c 6c 6f 63 46 61 69 6c 65 64 20 3d 20 31 3b  allocFailed = 1;
2d610 0a 20 20 20 20 20 20 70 4d 6f 64 75 6c 65 2d 3e  .      pModule->
2d620 78 43 6c 6f 73 65 28 70 56 74 61 62 43 75 72 73  xClose(pVtabCurs
2d630 6f 72 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  or);.    }.  }. 
2d640 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
2d650 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
2d660 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a  VIRTUALTABLE */.
2d670 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2d680 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
2d690 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 46 69  E./* Opcode: VFi
2d6a0 6c 74 65 72 20 50 31 20 50 32 20 50 33 20 50 34  lter P1 P2 P3 P4
2d6b0 20 2a 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61   *.**.** P1 is a
2d6c0 20 63 75 72 73 6f 72 20 6f 70 65 6e 65 64 20 75   cursor opened u
2d6d0 73 69 6e 67 20 56 4f 70 65 6e 2e 20 20 50 32 20  sing VOpen.  P2 
2d6e0 69 73 20 61 6e 20 61 64 64 72 65 73 73 20 74 6f  is an address to
2d6f0 20 6a 75 6d 70 20 74 6f 20 69 66 0a 2a 2a 20 74   jump to if.** t
2d700 68 65 20 66 69 6c 74 65 72 65 64 20 72 65 73 75  he filtered resu
2d710 6c 74 20 73 65 74 20 69 73 20 65 6d 70 74 79 2e  lt set is empty.
2d720 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 65 69 74  .**.** P4 is eit
2d730 68 65 72 20 4e 55 4c 4c 20 6f 72 20 61 20 73 74  her NULL or a st
2d740 72 69 6e 67 20 74 68 61 74 20 77 61 73 20 67 65  ring that was ge
2d750 6e 65 72 61 74 65 64 20 62 79 20 74 68 65 20 78  nerated by the x
2d760 42 65 73 74 49 6e 64 65 78 0a 2a 2a 20 6d 65 74  BestIndex.** met
2d770 68 6f 64 20 6f 66 20 74 68 65 20 6d 6f 64 75 6c  hod of the modul
2d780 65 2e 20 20 54 68 65 20 69 6e 74 65 72 70 72 65  e.  The interpre
2d790 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 50 34  tation of the P4
2d7a0 20 73 74 72 69 6e 67 20 69 73 20 6c 65 66 74 0a   string is left.
2d7b0 2a 2a 20 74 6f 20 74 68 65 20 6d 6f 64 75 6c 65  ** to the module
2d7c0 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e   implementation.
2d7d0 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
2d7e0 64 65 20 69 6e 76 6f 6b 65 73 20 74 68 65 20 78  de invokes the x
2d7f0 46 69 6c 74 65 72 20 6d 65 74 68 6f 64 20 6f 6e  Filter method on
2d800 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62   the virtual tab
2d810 6c 65 20 73 70 65 63 69 66 69 65 64 0a 2a 2a 20  le specified.** 
2d820 62 79 20 50 31 2e 20 20 54 68 65 20 69 6e 74 65  by P1.  The inte
2d830 67 65 72 20 71 75 65 72 79 20 70 6c 61 6e 20 70  ger query plan p
2d840 61 72 61 6d 65 74 65 72 20 74 6f 20 78 46 69 6c  arameter to xFil
2d850 74 65 72 20 69 73 20 73 74 6f 72 65 64 20 69 6e  ter is stored in
2d860 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 50 33 2e   register.** P3.
2d870 20 52 65 67 69 73 74 65 72 20 50 33 2b 31 20 73   Register P3+1 s
2d880 74 6f 72 65 73 20 74 68 65 20 61 72 67 63 20 70  tores the argc p
2d890 61 72 61 6d 65 74 65 72 20 74 6f 20 62 65 20 70  arameter to be p
2d8a0 61 73 73 65 64 20 74 6f 20 74 68 65 0a 2a 2a 20  assed to the.** 
2d8b0 78 46 69 6c 74 65 72 20 6d 65 74 68 6f 64 2e 20  xFilter method. 
2d8c0 52 65 67 69 73 74 65 72 73 20 50 33 2b 32 2e 2e  Registers P3+2..
2d8d0 50 33 2b 31 2b 61 72 67 63 20 61 72 65 20 74 68  P3+1+argc are th
2d8e0 65 20 61 72 67 63 0a 2a 2a 20 61 64 64 69 74 69  e argc.** additi
2d8f0 6f 6e 61 6c 20 70 61 72 61 6d 65 74 65 72 73 20  onal parameters 
2d900 77 68 69 63 68 20 61 72 65 20 70 61 73 73 65 64  which are passed
2d910 20 74 6f 0a 2a 2a 20 78 46 69 6c 74 65 72 20 61   to.** xFilter a
2d920 73 20 61 72 67 76 2e 20 52 65 67 69 73 74 65 72  s argv. Register
2d930 20 50 33 2b 32 20 62 65 63 6f 6d 65 73 20 61 72   P3+2 becomes ar
2d940 67 76 5b 30 5d 20 77 68 65 6e 20 70 61 73 73 65  gv[0] when passe
2d950 64 20 74 6f 20 78 46 69 6c 74 65 72 2e 0a 2a 2a  d to xFilter..**
2d960 0a 2a 2a 20 41 20 6a 75 6d 70 20 69 73 20 6d 61  .** A jump is ma
2d970 64 65 20 74 6f 20 50 32 20 69 66 20 74 68 65 20  de to P2 if the 
2d980 72 65 73 75 6c 74 20 73 65 74 20 61 66 74 65 72  result set after
2d990 20 66 69 6c 74 65 72 69 6e 67 20 77 6f 75 6c 64   filtering would
2d9a0 20 62 65 20 65 6d 70 74 79 2e 0a 2a 2f 0a 63 61   be empty..*/.ca
2d9b0 73 65 20 4f 50 5f 56 46 69 6c 74 65 72 3a 20 7b  se OP_VFilter: {
2d9c0 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
2d9d0 69 6e 74 20 6e 41 72 67 3b 0a 20 20 69 6e 74 20  int nArg;.  int 
2d9e0 69 51 75 65 72 79 3b 0a 20 20 63 6f 6e 73 74 20  iQuery;.  const 
2d9f0 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a  sqlite3_module *
2da00 70 4d 6f 64 75 6c 65 3b 0a 20 20 4d 65 6d 20 2a  pModule;.  Mem *
2da10 70 51 75 65 72 79 3b 0a 20 20 4d 65 6d 20 2a 70  pQuery;.  Mem *p
2da20 41 72 67 63 3b 0a 20 20 73 71 6c 69 74 65 33 5f  Argc;.  sqlite3_
2da30 76 74 61 62 5f 63 75 72 73 6f 72 20 2a 70 56 74  vtab_cursor *pVt
2da40 61 62 43 75 72 73 6f 72 3b 0a 20 20 73 71 6c 69  abCursor;.  sqli
2da50 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b  te3_vtab *pVtab;
2da60 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
2da70 43 75 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a  Cur;.  int res;.
2da80 20 20 69 6e 74 20 69 3b 0a 20 20 4d 65 6d 20 2a    int i;.  Mem *
2da90 2a 61 70 41 72 67 3b 0a 0a 20 20 70 51 75 65 72  *apArg;..  pQuer
2daa0 79 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  y = &aMem[pOp->p
2dab0 33 5d 3b 0a 20 20 70 41 72 67 63 20 3d 20 26 70  3];.  pArgc = &p
2dac0 51 75 65 72 79 5b 31 5d 3b 0a 20 20 70 43 75 72  Query[1];.  pCur
2dad0 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
2dae0 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
2daf0 6d 65 6d 49 73 56 61 6c 69 64 28 70 51 75 65 72  memIsValid(pQuer
2db00 79 29 20 29 3b 0a 20 20 52 45 47 49 53 54 45 52  y) );.  REGISTER
2db10 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20  _TRACE(pOp->p3, 
2db20 70 51 75 65 72 79 29 3b 0a 20 20 61 73 73 65 72  pQuery);.  asser
2db30 74 28 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75  t( pCur->pVtabCu
2db40 72 73 6f 72 20 29 3b 0a 20 20 70 56 74 61 62 43  rsor );.  pVtabC
2db50 75 72 73 6f 72 20 3d 20 70 43 75 72 2d 3e 70 56  ursor = pCur->pV
2db60 74 61 62 43 75 72 73 6f 72 3b 0a 20 20 70 56 74  tabCursor;.  pVt
2db70 61 62 20 3d 20 70 56 74 61 62 43 75 72 73 6f 72  ab = pVtabCursor
2db80 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75  ->pVtab;.  pModu
2db90 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64  le = pVtab->pMod
2dba0 75 6c 65 3b 0a 0a 20 20 2f 2a 20 47 72 61 62 20  ule;..  /* Grab 
2dbb0 74 68 65 20 69 6e 64 65 78 20 6e 75 6d 62 65 72  the index number
2dbc0 20 61 6e 64 20 61 72 67 63 20 70 61 72 61 6d 65   and argc parame
2dbd0 74 65 72 73 20 2a 2f 0a 20 20 61 73 73 65 72 74  ters */.  assert
2dbe0 28 20 28 70 51 75 65 72 79 2d 3e 66 6c 61 67 73  ( (pQuery->flags
2dbf0 26 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 26 26 20  &MEM_Int)!=0 && 
2dc00 70 41 72 67 63 2d 3e 66 6c 61 67 73 3d 3d 4d 45  pArgc->flags==ME
2dc10 4d 5f 49 6e 74 20 29 3b 0a 20 20 6e 41 72 67 20  M_Int );.  nArg 
2dc20 3d 20 28 69 6e 74 29 70 41 72 67 63 2d 3e 75 2e  = (int)pArgc->u.
2dc30 69 3b 0a 20 20 69 51 75 65 72 79 20 3d 20 28 69  i;.  iQuery = (i
2dc40 6e 74 29 70 51 75 65 72 79 2d 3e 75 2e 69 3b 0a  nt)pQuery->u.i;.
2dc50 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65  .  /* Invoke the
2dc60 20 78 46 69 6c 74 65 72 20 6d 65 74 68 6f 64 20   xFilter method 
2dc70 2a 2f 0a 20 20 7b 0a 20 20 20 20 72 65 73 20 3d  */.  {.    res =
2dc80 20 30 3b 0a 20 20 20 20 61 70 41 72 67 20 3d 20   0;.    apArg = 
2dc90 70 2d 3e 61 70 41 72 67 3b 0a 20 20 20 20 66 6f  p->apArg;.    fo
2dca0 72 28 69 20 3d 20 30 3b 20 69 3c 6e 41 72 67 3b  r(i = 0; i<nArg;
2dcb0 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 61 70 41   i++){.      apA
2dcc0 72 67 5b 69 5d 20 3d 20 26 70 41 72 67 63 5b 69  rg[i] = &pArgc[i
2dcd0 2b 31 5d 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  +1];.      sqlit
2dce0 65 33 56 64 62 65 4d 65 6d 53 74 6f 72 65 54 79  e3VdbeMemStoreTy
2dcf0 70 65 28 61 70 41 72 67 5b 69 5d 29 3b 0a 20 20  pe(apArg[i]);.  
2dd00 20 20 7d 0a 0a 20 20 20 20 70 2d 3e 69 6e 56 74    }..    p->inVt
2dd10 61 62 4d 65 74 68 6f 64 20 3d 20 31 3b 0a 20 20  abMethod = 1;.  
2dd20 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e    rc = pModule->
2dd30 78 46 69 6c 74 65 72 28 70 56 74 61 62 43 75 72  xFilter(pVtabCur
2dd40 73 6f 72 2c 20 69 51 75 65 72 79 2c 20 70 4f 70  sor, iQuery, pOp
2dd50 2d 3e 70 34 2e 7a 2c 20 6e 41 72 67 2c 20 61 70  ->p4.z, nArg, ap
2dd60 41 72 67 29 3b 0a 20 20 20 20 70 2d 3e 69 6e 56  Arg);.    p->inV
2dd70 74 61 62 4d 65 74 68 6f 64 20 3d 20 30 3b 0a 20  tabMethod = 0;. 
2dd80 20 20 20 69 6d 70 6f 72 74 56 74 61 62 45 72 72     importVtabErr
2dd90 4d 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20  Msg(p, pVtab);. 
2dda0 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54     if( rc==SQLIT
2ddb0 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 72 65  E_OK ){.      re
2ddc0 73 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 45 6f  s = pModule->xEo
2ddd0 66 28 70 56 74 61 62 43 75 72 73 6f 72 29 3b 0a  f(pVtabCursor);.
2dde0 20 20 20 20 7d 0a 0a 20 20 20 20 69 66 28 20 72      }..    if( r
2ddf0 65 73 20 29 7b 0a 20 20 20 20 20 20 70 63 20 3d  es ){.      pc =
2de00 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
2de10 20 20 7d 0a 20 20 7d 0a 20 20 70 43 75 72 2d 3e    }.  }.  pCur->
2de20 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 0a 20 20  nullRow = 0;..  
2de30 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20  break;.}.#endif 
2de40 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  /* SQLITE_OMIT_V
2de50 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a  IRTUALTABLE */..
2de60 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2de70 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
2de80 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 43 6f 6c  ./* Opcode: VCol
2de90 75 6d 6e 20 50 31 20 50 32 20 50 33 20 2a 20 2a  umn P1 P2 P3 * *
2dea0 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65  .**.** Store the
2deb0 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 50 32   value of the P2
2dec0 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f 66 0a 2a 2a  -th column of.**
2ded0 20 74 68 65 20 72 6f 77 20 6f 66 20 74 68 65 20   the row of the 
2dee0 76 69 72 74 75 61 6c 2d 74 61 62 6c 65 20 74 68  virtual-table th
2def0 61 74 20 74 68 65 20 0a 2a 2a 20 50 31 20 63 75  at the .** P1 cu
2df00 72 73 6f 72 20 69 73 20 70 6f 69 6e 74 69 6e 67  rsor is pointing
2df10 20 74 6f 20 69 6e 74 6f 20 72 65 67 69 73 74 65   to into registe
2df20 72 20 50 33 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  r P3..*/.case OP
2df30 5f 56 43 6f 6c 75 6d 6e 3a 20 7b 0a 20 20 73 71  _VColumn: {.  sq
2df40 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61  lite3_vtab *pVta
2df50 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74  b;.  const sqlit
2df60 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75  e3_module *pModu
2df70 6c 65 3b 0a 20 20 4d 65 6d 20 2a 70 44 65 73 74  le;.  Mem *pDest
2df80 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74  ;.  sqlite3_cont
2df90 65 78 74 20 73 43 6f 6e 74 65 78 74 3b 0a 0a 20  ext sContext;.. 
2dfa0 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 75   VdbeCursor *pCu
2dfb0 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  r = p->apCsr[pOp
2dfc0 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
2dfd0 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73   pCur->pVtabCurs
2dfe0 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  or );.  assert( 
2dff0 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70  pOp->p3>0 && pOp
2e000 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b  ->p3<=p->nMem );
2e010 0a 20 20 70 44 65 73 74 20 3d 20 26 61 4d 65 6d  .  pDest = &aMem
2e020 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d  [pOp->p3];.  mem
2e030 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
2e040 20 70 44 65 73 74 29 3b 0a 20 20 69 66 28 20 70   pDest);.  if( p
2e050 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a  Cur->nullRow ){.
2e060 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
2e070 65 6d 53 65 74 4e 75 6c 6c 28 70 44 65 73 74 29  emSetNull(pDest)
2e080 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  ;.    break;.  }
2e090 0a 20 20 70 56 74 61 62 20 3d 20 70 43 75 72 2d  .  pVtab = pCur-
2e0a0 3e 70 56 74 61 62 43 75 72 73 6f 72 2d 3e 70 56  >pVtabCursor->pV
2e0b0 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d  tab;.  pModule =
2e0c0 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b   pVtab->pModule;
2e0d0 0a 20 20 61 73 73 65 72 74 28 20 70 4d 6f 64 75  .  assert( pModu
2e0e0 6c 65 2d 3e 78 43 6f 6c 75 6d 6e 20 29 3b 0a 20  le->xColumn );. 
2e0f0 20 6d 65 6d 73 65 74 28 26 73 43 6f 6e 74 65 78   memset(&sContex
2e100 74 2c 20 30 2c 20 73 69 7a 65 6f 66 28 73 43 6f  t, 0, sizeof(sCo
2e110 6e 74 65 78 74 29 29 3b 0a 0a 20 20 2f 2a 20 54  ntext));..  /* T
2e120 68 65 20 6f 75 74 70 75 74 20 63 65 6c 6c 20 6d  he output cell m
2e130 61 79 20 61 6c 72 65 61 64 79 20 68 61 76 65 20  ay already have 
2e140 61 20 62 75 66 66 65 72 20 61 6c 6c 6f 63 61 74  a buffer allocat
2e150 65 64 2e 20 4d 6f 76 65 0a 20 20 2a 2a 20 74 68  ed. Move.  ** th
2e160 65 20 63 75 72 72 65 6e 74 20 63 6f 6e 74 65 6e  e current conten
2e170 74 73 20 74 6f 20 73 43 6f 6e 74 65 78 74 2e 73  ts to sContext.s
2e180 20 73 6f 20 69 6e 20 63 61 73 65 20 74 68 65 20   so in case the 
2e190 75 73 65 72 2d 66 75 6e 63 74 69 6f 6e 20 0a 20  user-function . 
2e1a0 20 2a 2a 20 63 61 6e 20 75 73 65 20 74 68 65 20   ** can use the 
2e1b0 61 6c 72 65 61 64 79 20 61 6c 6c 6f 63 61 74 65  already allocate
2e1c0 64 20 62 75 66 66 65 72 20 69 6e 73 74 65 61 64  d buffer instead
2e1d0 20 6f 66 20 61 6c 6c 6f 63 61 74 69 6e 67 20 61   of allocating a
2e1e0 20 0a 20 20 2a 2a 20 6e 65 77 20 6f 6e 65 2e 0a   .  ** new one..
2e1f0 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56 64    */.  sqlite3Vd
2e200 62 65 4d 65 6d 4d 6f 76 65 28 26 73 43 6f 6e 74  beMemMove(&sCont
2e210 65 78 74 2e 73 2c 20 70 44 65 73 74 29 3b 0a 20  ext.s, pDest);. 
2e220 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
2e230 26 73 43 6f 6e 74 65 78 74 2e 73 2c 20 4d 45 4d  &sContext.s, MEM
2e240 5f 4e 75 6c 6c 29 3b 0a 0a 20 20 72 63 20 3d 20  _Null);..  rc = 
2e250 70 4d 6f 64 75 6c 65 2d 3e 78 43 6f 6c 75 6d 6e  pModule->xColumn
2e260 28 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73  (pCur->pVtabCurs
2e270 6f 72 2c 20 26 73 43 6f 6e 74 65 78 74 2c 20 70  or, &sContext, p
2e280 4f 70 2d 3e 70 32 29 3b 0a 20 20 69 6d 70 6f 72  Op->p2);.  impor
2e290 74 56 74 61 62 45 72 72 4d 73 67 28 70 2c 20 70  tVtabErrMsg(p, p
2e2a0 56 74 61 62 29 3b 0a 20 20 69 66 28 20 73 43 6f  Vtab);.  if( sCo
2e2b0 6e 74 65 78 74 2e 69 73 45 72 72 6f 72 20 29 7b  ntext.isError ){
2e2c0 0a 20 20 20 20 72 63 20 3d 20 73 43 6f 6e 74 65  .    rc = sConte
2e2d0 78 74 2e 69 73 45 72 72 6f 72 3b 0a 20 20 7d 0a  xt.isError;.  }.
2e2e0 0a 20 20 2f 2a 20 43 6f 70 79 20 74 68 65 20 72  .  /* Copy the r
2e2f0 65 73 75 6c 74 20 6f 66 20 74 68 65 20 66 75 6e  esult of the fun
2e300 63 74 69 6f 6e 20 74 6f 20 74 68 65 20 50 33 20  ction to the P3 
2e310 72 65 67 69 73 74 65 72 2e 20 57 65 0a 20 20 2a  register. We.  *
2e320 2a 20 64 6f 20 74 68 69 73 20 72 65 67 61 72 64  * do this regard
2e330 6c 65 73 73 20 6f 66 20 77 68 65 74 68 65 72 20  less of whether 
2e340 6f 72 20 6e 6f 74 20 61 6e 20 65 72 72 6f 72 20  or not an error 
2e350 6f 63 63 75 72 72 65 64 20 74 6f 20 65 6e 73 75  occurred to ensu
2e360 72 65 20 61 6e 79 0a 20 20 2a 2a 20 64 79 6e 61  re any.  ** dyna
2e370 6d 69 63 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69  mic allocation i
2e380 6e 20 73 43 6f 6e 74 65 78 74 2e 73 20 28 61 20  n sContext.s (a 
2e390 4d 65 6d 20 73 74 72 75 63 74 29 20 69 73 20 20  Mem struct) is  
2e3a0 72 65 6c 65 61 73 65 64 2e 0a 20 20 2a 2f 0a 20  released..  */. 
2e3b0 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e   sqlite3VdbeChan
2e3c0 67 65 45 6e 63 6f 64 69 6e 67 28 26 73 43 6f 6e  geEncoding(&sCon
2e3d0 74 65 78 74 2e 73 2c 20 65 6e 63 6f 64 69 6e 67  text.s, encoding
2e3e0 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  );.  sqlite3Vdbe
2e3f0 4d 65 6d 4d 6f 76 65 28 70 44 65 73 74 2c 20 26  MemMove(pDest, &
2e400 73 43 6f 6e 74 65 78 74 2e 73 29 3b 0a 20 20 52  sContext.s);.  R
2e410 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
2e420 70 2d 3e 70 33 2c 20 70 44 65 73 74 29 3b 0a 20  p->p3, pDest);. 
2e430 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42   UPDATE_MAX_BLOB
2e440 53 49 5a 45 28 70 44 65 73 74 29 3b 0a 0a 20 20  SIZE(pDest);..  
2e450 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d  if( sqlite3VdbeM
2e460 65 6d 54 6f 6f 42 69 67 28 70 44 65 73 74 29 20  emTooBig(pDest) 
2e470 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f  ){.    goto too_
2e480 62 69 67 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  big;.  }.  break
2e490 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ;.}.#endif /* SQ
2e4a0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
2e4b0 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64  LTABLE */..#ifnd
2e4c0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
2e4d0 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f  IRTUALTABLE./* O
2e4e0 70 63 6f 64 65 3a 20 56 4e 65 78 74 20 50 31 20  pcode: VNext P1 
2e4f0 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41  P2 * * *.**.** A
2e500 64 76 61 6e 63 65 20 76 69 72 74 75 61 6c 20 74  dvance virtual t
2e510 61 62 6c 65 20 50 31 20 74 6f 20 74 68 65 20 6e  able P1 to the n
2e520 65 78 74 20 72 6f 77 20 69 6e 20 69 74 73 20 72  ext row in its r
2e530 65 73 75 6c 74 20 73 65 74 20 61 6e 64 0a 2a 2a  esult set and.**
2e540 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63   jump to instruc
2e550 74 69 6f 6e 20 50 32 2e 20 20 4f 72 2c 20 69 66  tion P2.  Or, if
2e560 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62   the virtual tab
2e570 6c 65 20 68 61 73 20 72 65 61 63 68 65 64 0a 2a  le has reached.*
2e580 2a 20 74 68 65 20 65 6e 64 20 6f 66 20 69 74 73  * the end of its
2e590 20 72 65 73 75 6c 74 20 73 65 74 2c 20 74 68 65   result set, the
2e5a0 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74  n fall through t
2e5b0 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72  o the next instr
2e5c0 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20  uction..*/.case 
2e5d0 4f 50 5f 56 4e 65 78 74 3a 20 7b 20 20 20 2f 2a  OP_VNext: {   /*
2e5e0 20 6a 75 6d 70 20 2a 2f 0a 20 20 73 71 6c 69 74   jump */.  sqlit
2e5f0 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a  e3_vtab *pVtab;.
2e600 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f    const sqlite3_
2e610 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b  module *pModule;
2e620 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 56 64  .  int res;.  Vd
2e630 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a  beCursor *pCur;.
2e640 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 70 43  .  res = 0;.  pC
2e650 75 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  ur = p->apCsr[pO
2e660 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
2e670 28 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72  ( pCur->pVtabCur
2e680 73 6f 72 20 29 3b 0a 20 20 69 66 28 20 70 43 75  sor );.  if( pCu
2e690 72 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20  r->nullRow ){.  
2e6a0 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 70    break;.  }.  p
2e6b0 56 74 61 62 20 3d 20 70 43 75 72 2d 3e 70 56 74  Vtab = pCur->pVt
2e6c0 61 62 43 75 72 73 6f 72 2d 3e 70 56 74 61 62 3b  abCursor->pVtab;
2e6d0 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74  .  pModule = pVt
2e6e0 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 61  ab->pModule;.  a
2e6f0 73 73 65 72 74 28 20 70 4d 6f 64 75 6c 65 2d 3e  ssert( pModule->
2e700 78 4e 65 78 74 20 29 3b 0a 0a 20 20 2f 2a 20 49  xNext );..  /* I
2e710 6e 76 6f 6b 65 20 74 68 65 20 78 4e 65 78 74 28  nvoke the xNext(
2e720 29 20 6d 65 74 68 6f 64 20 6f 66 20 74 68 65 20  ) method of the 
2e730 6d 6f 64 75 6c 65 2e 20 54 68 65 72 65 20 69 73  module. There is
2e740 20 6e 6f 20 77 61 79 20 66 6f 72 20 74 68 65 0a   no way for the.
2e750 20 20 2a 2a 20 75 6e 64 65 72 6c 79 69 6e 67 20    ** underlying 
2e760 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 74  implementation t
2e770 6f 20 72 65 74 75 72 6e 20 61 6e 20 65 72 72 6f  o return an erro
2e780 72 20 69 66 20 6f 6e 65 20 6f 63 63 75 72 73 20  r if one occurs 
2e790 64 75 72 69 6e 67 0a 20 20 2a 2a 20 78 4e 65 78  during.  ** xNex
2e7a0 74 28 29 2e 20 49 6e 73 74 65 61 64 2c 20 69 66  t(). Instead, if
2e7b0 20 61 6e 20 65 72 72 6f 72 20 6f 63 63 75 72 73   an error occurs
2e7c0 2c 20 74 72 75 65 20 69 73 20 72 65 74 75 72 6e  , true is return
2e7d0 65 64 20 28 69 6e 64 69 63 61 74 69 6e 67 20 74  ed (indicating t
2e7e0 68 61 74 20 0a 20 20 2a 2a 20 64 61 74 61 20 69  hat .  ** data i
2e7f0 73 20 61 76 61 69 6c 61 62 6c 65 29 20 61 6e 64  s available) and
2e800 20 74 68 65 20 65 72 72 6f 72 20 63 6f 64 65 20   the error code 
2e810 72 65 74 75 72 6e 65 64 20 77 68 65 6e 20 78 43  returned when xC
2e820 6f 6c 75 6d 6e 20 6f 72 0a 20 20 2a 2a 20 73 6f  olumn or.  ** so
2e830 6d 65 20 6f 74 68 65 72 20 6d 65 74 68 6f 64 20  me other method 
2e840 69 73 20 6e 65 78 74 20 69 6e 76 6f 6b 65 64 20  is next invoked 
2e850 6f 6e 20 74 68 65 20 73 61 76 65 20 76 69 72 74  on the save virt
2e860 75 61 6c 20 74 61 62 6c 65 20 63 75 72 73 6f 72  ual table cursor
2e870 2e 0a 20 20 2a 2f 0a 20 20 70 2d 3e 69 6e 56 74  ..  */.  p->inVt
2e880 61 62 4d 65 74 68 6f 64 20 3d 20 31 3b 0a 20 20  abMethod = 1;.  
2e890 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 4e  rc = pModule->xN
2e8a0 65 78 74 28 70 43 75 72 2d 3e 70 56 74 61 62 43  ext(pCur->pVtabC
2e8b0 75 72 73 6f 72 29 3b 0a 20 20 70 2d 3e 69 6e 56  ursor);.  p->inV
2e8c0 74 61 62 4d 65 74 68 6f 64 20 3d 20 30 3b 0a 20  tabMethod = 0;. 
2e8d0 20 69 6d 70 6f 72 74 56 74 61 62 45 72 72 4d 73   importVtabErrMs
2e8e0 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 69  g(p, pVtab);.  i
2e8f0 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
2e900 20 29 7b 0a 20 20 20 20 72 65 73 20 3d 20 70 4d   ){.    res = pM
2e910 6f 64 75 6c 65 2d 3e 78 45 6f 66 28 70 43 75 72  odule->xEof(pCur
2e920 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 29 3b 0a  ->pVtabCursor);.
2e930 20 20 7d 0a 0a 20 20 69 66 28 20 21 72 65 73 20    }..  if( !res 
2e940 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 65  ){.    /* If the
2e950 72 65 20 69 73 20 64 61 74 61 2c 20 6a 75 6d 70  re is data, jump
2e960 20 74 6f 20 50 32 20 2a 2f 0a 20 20 20 20 70 63   to P2 */.    pc
2e970 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
2e980 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23    }.  break;.}.#
2e990 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
2e9a0 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
2e9b0 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  E */..#ifndef SQ
2e9c0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
2e9d0 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65  LTABLE./* Opcode
2e9e0 3a 20 56 52 65 6e 61 6d 65 20 50 31 20 2a 20 2a  : VRename P1 * *
2e9f0 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69   P4 *.**.** P4 i
2ea00 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  s a pointer to a
2ea10 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6f   virtual table o
2ea20 62 6a 65 63 74 2c 20 61 6e 20 73 71 6c 69 74 65  bject, an sqlite
2ea30 33 5f 76 74 61 62 20 73 74 72 75 63 74 75 72 65  3_vtab structure
2ea40 2e 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  ..** This opcode
2ea50 20 69 6e 76 6f 6b 65 73 20 74 68 65 20 63 6f 72   invokes the cor
2ea60 72 65 73 70 6f 6e 64 69 6e 67 20 78 52 65 6e 61  responding xRena
2ea70 6d 65 20 6d 65 74 68 6f 64 2e 20 54 68 65 20 76  me method. The v
2ea80 61 6c 75 65 0a 2a 2a 20 69 6e 20 72 65 67 69 73  alue.** in regis
2ea90 74 65 72 20 50 31 20 69 73 20 70 61 73 73 65 64  ter P1 is passed
2eaa0 20 61 73 20 74 68 65 20 7a 4e 61 6d 65 20 61 72   as the zName ar
2eab0 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 78 52  gument to the xR
2eac0 65 6e 61 6d 65 20 6d 65 74 68 6f 64 2e 0a 2a 2f  ename method..*/
2ead0 0a 63 61 73 65 20 4f 50 5f 56 52 65 6e 61 6d 65  .case OP_VRename
2eae0 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74  : {.  sqlite3_vt
2eaf0 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 4d 65 6d  ab *pVtab;.  Mem
2eb00 20 2a 70 4e 61 6d 65 3b 0a 0a 20 20 70 56 74 61   *pName;..  pVta
2eb10 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61  b = pOp->p4.pVta
2eb20 62 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4e 61 6d  b->pVtab;.  pNam
2eb30 65 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  e = &aMem[pOp->p
2eb40 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 56  1];.  assert( pV
2eb50 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 2d 3e 78 52  tab->pModule->xR
2eb60 65 6e 61 6d 65 20 29 3b 0a 20 20 61 73 73 65 72  ename );.  asser
2eb70 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 4e  t( memIsValid(pN
2eb80 61 6d 65 29 20 29 3b 0a 20 20 52 45 47 49 53 54  ame) );.  REGIST
2eb90 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31  ER_TRACE(pOp->p1
2eba0 2c 20 70 4e 61 6d 65 29 3b 0a 20 20 61 73 73 65  , pName);.  asse
2ebb0 72 74 28 20 70 4e 61 6d 65 2d 3e 66 6c 61 67 73  rt( pName->flags
2ebc0 20 26 20 4d 45 4d 5f 53 74 72 20 29 3b 0a 20 20   & MEM_Str );.  
2ebd0 74 65 73 74 63 61 73 65 28 20 70 4e 61 6d 65 2d  testcase( pName-
2ebe0 3e 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46  >enc==SQLITE_UTF
2ebf0 38 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28  8 );.  testcase(
2ec00 20 70 4e 61 6d 65 2d 3e 65 6e 63 3d 3d 53 51 4c   pName->enc==SQL
2ec10 49 54 45 5f 55 54 46 31 36 42 45 20 29 3b 0a 20  ITE_UTF16BE );. 
2ec20 20 74 65 73 74 63 61 73 65 28 20 70 4e 61 6d 65   testcase( pName
2ec30 2d 3e 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54  ->enc==SQLITE_UT
2ec40 46 31 36 4c 45 20 29 3b 0a 20 20 72 63 20 3d 20  F16LE );.  rc = 
2ec50 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67  sqlite3VdbeChang
2ec60 65 45 6e 63 6f 64 69 6e 67 28 70 4e 61 6d 65 2c  eEncoding(pName,
2ec70 20 53 51 4c 49 54 45 5f 55 54 46 38 29 3b 0a 20   SQLITE_UTF8);. 
2ec80 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
2ec90 4f 4b 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 70  OK ){.    rc = p
2eca0 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 2d 3e 78  Vtab->pModule->x
2ecb0 52 65 6e 61 6d 65 28 70 56 74 61 62 2c 20 70 4e  Rename(pVtab, pN
2ecc0 61 6d 65 2d 3e 7a 29 3b 0a 20 20 20 20 69 6d 70  ame->z);.    imp
2ecd0 6f 72 74 56 74 61 62 45 72 72 4d 73 67 28 70 2c  ortVtabErrMsg(p,
2ece0 20 70 56 74 61 62 29 3b 0a 20 20 20 20 70 2d 3e   pVtab);.    p->
2ecf0 65 78 70 69 72 65 64 20 3d 20 30 3b 0a 20 20 7d  expired = 0;.  }
2ed00 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
2ed10 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  if..#ifndef SQLI
2ed20 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
2ed30 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ABLE./* Opcode: 
2ed40 56 55 70 64 61 74 65 20 50 31 20 50 32 20 50 33  VUpdate P1 P2 P3
2ed50 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69   P4 *.**.** P4 i
2ed60 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  s a pointer to a
2ed70 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6f   virtual table o
2ed80 62 6a 65 63 74 2c 20 61 6e 20 73 71 6c 69 74 65  bject, an sqlite
2ed90 33 5f 76 74 61 62 20 73 74 72 75 63 74 75 72 65  3_vtab structure
2eda0 2e 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  ..** This opcode
2edb0 20 69 6e 76 6f 6b 65 73 20 74 68 65 20 63 6f 72   invokes the cor
2edc0 72 65 73 70 6f 6e 64 69 6e 67 20 78 55 70 64 61  responding xUpda
2edd0 74 65 20 6d 65 74 68 6f 64 2e 20 50 32 20 76 61  te method. P2 va
2ede0 6c 75 65 73 0a 2a 2a 20 61 72 65 20 63 6f 6e 74  lues.** are cont
2edf0 69 67 75 6f 75 73 20 6d 65 6d 6f 72 79 20 63 65  iguous memory ce
2ee00 6c 6c 73 20 73 74 61 72 74 69 6e 67 20 61 74 20  lls starting at 
2ee10 50 33 20 74 6f 20 70 61 73 73 20 74 6f 20 74 68  P3 to pass to th
2ee20 65 20 78 55 70 64 61 74 65 20 0a 2a 2a 20 69 6e  e xUpdate .** in
2ee30 76 6f 63 61 74 69 6f 6e 2e 20 54 68 65 20 76 61  vocation. The va
2ee40 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
2ee50 28 50 33 2b 50 32 2d 31 29 20 63 6f 72 72 65 73  (P3+P2-1) corres
2ee60 70 6f 6e 64 73 20 74 6f 20 74 68 65 20 0a 2a 2a  ponds to the .**
2ee70 20 70 32 74 68 20 65 6c 65 6d 65 6e 74 20 6f 66   p2th element of
2ee80 20 74 68 65 20 61 72 67 76 20 61 72 72 61 79 20   the argv array 
2ee90 70 61 73 73 65 64 20 74 6f 20 78 55 70 64 61 74  passed to xUpdat
2eea0 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 78 55 70  e..**.** The xUp
2eeb0 64 61 74 65 20 6d 65 74 68 6f 64 20 77 69 6c 6c  date method will
2eec0 20 64 6f 20 61 20 44 45 4c 45 54 45 20 6f 72 20   do a DELETE or 
2eed0 61 6e 20 49 4e 53 45 52 54 20 6f 72 20 62 6f 74  an INSERT or bot
2eee0 68 2e 0a 2a 2a 20 54 68 65 20 61 72 67 76 5b 30  h..** The argv[0
2eef0 5d 20 65 6c 65 6d 65 6e 74 20 28 77 68 69 63 68  ] element (which
2ef00 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20   corresponds to 
2ef10 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 50 33 29 0a  memory cell P3).
2ef20 2a 2a 20 69 73 20 74 68 65 20 72 6f 77 69 64 20  ** is the rowid 
2ef30 6f 66 20 61 20 72 6f 77 20 74 6f 20 64 65 6c 65  of a row to dele
2ef40 74 65 2e 20 20 49 66 20 61 72 67 76 5b 30 5d 20  te.  If argv[0] 
2ef50 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 6e 6f 20  is NULL then no 
2ef60 0a 2a 2a 20 64 65 6c 65 74 69 6f 6e 20 6f 63 63  .** deletion occ
2ef70 75 72 73 2e 20 20 54 68 65 20 61 72 67 76 5b 31  urs.  The argv[1
2ef80 5d 20 65 6c 65 6d 65 6e 74 20 69 73 20 74 68 65  ] element is the
2ef90 20 72 6f 77 69 64 20 6f 66 20 74 68 65 20 6e 65   rowid of the ne
2efa0 77 20 0a 2a 2a 20 72 6f 77 2e 20 20 54 68 69 73  w .** row.  This
2efb0 20 63 61 6e 20 62 65 20 4e 55 4c 4c 20 74 6f 20   can be NULL to 
2efc0 68 61 76 65 20 74 68 65 20 76 69 72 74 75 61 6c  have the virtual
2efd0 20 74 61 62 6c 65 20 73 65 6c 65 63 74 20 74 68   table select th
2efe0 65 20 6e 65 77 20 0a 2a 2a 20 72 6f 77 69 64 20  e new .** rowid 
2eff0 66 6f 72 20 69 74 73 65 6c 66 2e 20 20 54 68 65  for itself.  The
2f000 20 73 75 62 73 65 71 75 65 6e 74 20 65 6c 65 6d   subsequent elem
2f010 65 6e 74 73 20 69 6e 20 74 68 65 20 61 72 72 61  ents in the arra
2f020 79 20 61 72 65 20 0a 2a 2a 20 74 68 65 20 76 61  y are .** the va
2f030 6c 75 65 73 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  lues of columns 
2f040 69 6e 20 74 68 65 20 6e 65 77 20 72 6f 77 2e 0a  in the new row..
2f050 2a 2a 0a 2a 2a 20 49 66 20 50 32 3d 3d 31 20 74  **.** If P2==1 t
2f060 68 65 6e 20 6e 6f 20 69 6e 73 65 72 74 20 69 73  hen no insert is
2f070 20 70 65 72 66 6f 72 6d 65 64 2e 20 20 61 72 67   performed.  arg
2f080 76 5b 30 5d 20 69 73 20 74 68 65 20 72 6f 77 69  v[0] is the rowi
2f090 64 20 6f 66 0a 2a 2a 20 61 20 72 6f 77 20 74 6f  d of.** a row to
2f0a0 20 64 65 6c 65 74 65 2e 0a 2a 2a 0a 2a 2a 20 50   delete..**.** P
2f0b0 31 20 69 73 20 61 20 62 6f 6f 6c 65 61 6e 20 66  1 is a boolean f
2f0c0 6c 61 67 2e 20 49 66 20 69 74 20 69 73 20 73 65  lag. If it is se
2f0d0 74 20 74 6f 20 74 72 75 65 20 61 6e 64 20 74 68  t to true and th
2f0e0 65 20 78 55 70 64 61 74 65 20 63 61 6c 6c 0a 2a  e xUpdate call.*
2f0f0 2a 20 69 73 20 73 75 63 63 65 73 73 66 75 6c 2c  * is successful,
2f100 20 74 68 65 6e 20 74 68 65 20 76 61 6c 75 65 20   then the value 
2f110 72 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69  returned by sqli
2f120 74 65 33 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f  te3_last_insert_
2f130 72 6f 77 69 64 28 29 20 0a 2a 2a 20 69 73 20 73  rowid() .** is s
2f140 65 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20  et to the value 
2f150 6f 66 20 74 68 65 20 72 6f 77 69 64 20 66 6f 72  of the rowid for
2f160 20 74 68 65 20 72 6f 77 20 6a 75 73 74 20 69 6e   the row just in
2f170 73 65 72 74 65 64 2e 0a 2a 2f 0a 63 61 73 65 20  serted..*/.case 
2f180 4f 50 5f 56 55 70 64 61 74 65 3a 20 7b 0a 20 20  OP_VUpdate: {.  
2f190 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56  sqlite3_vtab *pV
2f1a0 74 61 62 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d  tab;.  sqlite3_m
2f1b0 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a  odule *pModule;.
2f1c0 20 20 69 6e 74 20 6e 41 72 67 3b 0a 20 20 69 6e    int nArg;.  in
2f1d0 74 20 69 3b 0a 20 20 73 71 6c 69 74 65 5f 69 6e  t i;.  sqlite_in
2f1e0 74 36 34 20 72 6f 77 69 64 3b 0a 20 20 4d 65 6d  t64 rowid;.  Mem
2f1f0 20 2a 2a 61 70 41 72 67 3b 0a 20 20 4d 65 6d 20   **apArg;.  Mem 
2f200 2a 70 58 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  *pX;..  assert( 
2f210 70 4f 70 2d 3e 70 32 3d 3d 31 20 20 20 20 20 20  pOp->p2==1      
2f220 20 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45    || pOp->p5==OE
2f230 5f 46 61 69 6c 20 20 20 7c 7c 20 70 4f 70 2d 3e  _Fail   || pOp->
2f240 70 35 3d 3d 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20  p5==OE_Rollback 
2f250 0a 20 20 20 20 20 20 20 7c 7c 20 70 4f 70 2d 3e  .       || pOp->
2f260 70 35 3d 3d 4f 45 5f 41 62 6f 72 74 20 7c 7c 20  p5==OE_Abort || 
2f270 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 49 67 6e 6f  pOp->p5==OE_Igno
2f280 72 65 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f  re || pOp->p5==O
2f290 45 5f 52 65 70 6c 61 63 65 0a 20 20 29 3b 0a 20  E_Replace.  );. 
2f2a0 20 70 56 74 61 62 20 3d 20 70 4f 70 2d 3e 70 34   pVtab = pOp->p4
2f2b0 2e 70 56 74 61 62 2d 3e 70 56 74 61 62 3b 0a 20  .pVtab->pVtab;. 
2f2c0 20 70 4d 6f 64 75 6c 65 20 3d 20 28 73 71 6c 69   pModule = (sqli
2f2d0 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 29 70 56 74  te3_module *)pVt
2f2e0 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 6e  ab->pModule;.  n
2f2f0 41 72 67 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20  Arg = pOp->p2;. 
2f300 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
2f310 74 79 70 65 3d 3d 50 34 5f 56 54 41 42 20 29 3b  type==P4_VTAB );
2f320 0a 20 20 69 66 28 20 41 4c 57 41 59 53 28 70 4d  .  if( ALWAYS(pM
2f330 6f 64 75 6c 65 2d 3e 78 55 70 64 61 74 65 29 20  odule->xUpdate) 
2f340 29 7b 0a 20 20 20 20 75 38 20 76 74 61 62 4f 6e  ){.    u8 vtabOn
2f350 43 6f 6e 66 6c 69 63 74 20 3d 20 64 62 2d 3e 76  Conflict = db->v
2f360 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 3b 0a 20  tabOnConflict;. 
2f370 20 20 20 61 70 41 72 67 20 3d 20 70 2d 3e 61 70     apArg = p->ap
2f380 41 72 67 3b 0a 20 20 20 20 70 58 20 3d 20 26 61  Arg;.    pX = &a
2f390 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
2f3a0 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 41 72    for(i=0; i<nAr
2f3b0 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 61  g; i++){.      a
2f3c0 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
2f3d0 64 28 70 58 29 20 29 3b 0a 20 20 20 20 20 20 6d  d(pX) );.      m
2f3e0 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
2f3f0 70 2c 20 70 58 29 3b 0a 20 20 20 20 20 20 73 71  p, pX);.      sq
2f400 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74 6f 72  lite3VdbeMemStor
2f410 65 54 79 70 65 28 70 58 29 3b 0a 20 20 20 20 20  eType(pX);.     
2f420 20 61 70 41 72 67 5b 69 5d 20 3d 20 70 58 3b 0a   apArg[i] = pX;.
2f430 20 20 20 20 20 20 70 58 2b 2b 3b 0a 20 20 20 20        pX++;.    
2f440 7d 0a 20 20 20 20 64 62 2d 3e 76 74 61 62 4f 6e  }.    db->vtabOn
2f450 43 6f 6e 66 6c 69 63 74 20 3d 20 70 4f 70 2d 3e  Conflict = pOp->
2f460 70 35 3b 0a 20 20 20 20 72 63 20 3d 20 70 4d 6f  p5;.    rc = pMo
2f470 64 75 6c 65 2d 3e 78 55 70 64 61 74 65 28 70 56  dule->xUpdate(pV
2f480 74 61 62 2c 20 6e 41 72 67 2c 20 61 70 41 72 67  tab, nArg, apArg
2f490 2c 20 26 72 6f 77 69 64 29 3b 0a 20 20 20 20 64  , &rowid);.    d
2f4a0 62 2d 3e 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63  b->vtabOnConflic
2f4b0 74 20 3d 20 76 74 61 62 4f 6e 43 6f 6e 66 6c 69  t = vtabOnConfli
2f4c0 63 74 3b 0a 20 20 20 20 69 6d 70 6f 72 74 56 74  ct;.    importVt
2f4d0 61 62 45 72 72 4d 73 67 28 70 2c 20 70 56 74 61  abErrMsg(p, pVta
2f4e0 62 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d  b);.    if( rc==
2f4f0 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 70 4f 70  SQLITE_OK && pOp
2f500 2d 3e 70 31 20 29 7b 0a 20 20 20 20 20 20 61 73  ->p1 ){.      as
2f510 73 65 72 74 28 20 6e 41 72 67 3e 31 20 26 26 20  sert( nArg>1 && 
2f520 61 70 41 72 67 5b 30 5d 20 26 26 20 28 61 70 41  apArg[0] && (apA
2f530 72 67 5b 30 5d 2d 3e 66 6c 61 67 73 26 4d 45 4d  rg[0]->flags&MEM
2f540 5f 4e 75 6c 6c 29 20 29 3b 0a 20 20 20 20 20 20  _Null) );.      
2f550 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20  db->lastRowid = 
2f560 6c 61 73 74 52 6f 77 69 64 20 3d 20 72 6f 77 69  lastRowid = rowi
2f570 64 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  d;.    }.    if(
2f580 20 72 63 3d 3d 53 51 4c 49 54 45 5f 43 4f 4e 53   rc==SQLITE_CONS
2f590 54 52 41 49 4e 54 20 26 26 20 70 4f 70 2d 3e 70  TRAINT && pOp->p
2f5a0 34 2e 70 56 74 61 62 2d 3e 62 43 6f 6e 73 74 72  4.pVtab->bConstr
2f5b0 61 69 6e 74 20 29 7b 0a 20 20 20 20 20 20 69 66  aint ){.      if
2f5c0 28 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 49 67  ( pOp->p5==OE_Ig
2f5d0 6e 6f 72 65 20 29 7b 0a 20 20 20 20 20 20 20 20  nore ){.        
2f5e0 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a  rc = SQLITE_OK;.
2f5f0 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
2f600 20 20 20 20 20 70 2d 3e 65 72 72 6f 72 41 63 74       p->errorAct
2f610 69 6f 6e 20 3d 20 28 28 70 4f 70 2d 3e 70 35 3d  ion = ((pOp->p5=
2f620 3d 4f 45 5f 52 65 70 6c 61 63 65 29 20 3f 20 4f  =OE_Replace) ? O
2f630 45 5f 41 62 6f 72 74 20 3a 20 70 4f 70 2d 3e 70  E_Abort : pOp->p
2f640 35 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  5);.      }.    
2f650 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 70 2d 3e  }else{.      p->
2f660 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 20 20 7d  nChange++;.    }
2f670 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
2f680 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
2f690 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
2f6a0 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 20  LE */..#ifndef  
2f6b0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45  SQLITE_OMIT_PAGE
2f6c0 52 5f 50 52 41 47 4d 41 53 0a 2f 2a 20 4f 70 63  R_PRAGMAS./* Opc
2f6d0 6f 64 65 3a 20 50 61 67 65 63 6f 75 6e 74 20 50  ode: Pagecount P
2f6e0 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
2f6f0 20 57 72 69 74 65 20 74 68 65 20 63 75 72 72 65   Write the curre
2f700 6e 74 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67  nt number of pag
2f710 65 73 20 69 6e 20 64 61 74 61 62 61 73 65 20 50  es in database P
2f720 31 20 74 6f 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  1 to memory cell
2f730 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P2..*/.case OP_
2f740 50 61 67 65 63 6f 75 6e 74 3a 20 7b 20 20 20 20  Pagecount: {    
2f750 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d          /* out2-
2f760 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20  prerelease */.  
2f770 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 73 71 6c 69  pOut->u.i = sqli
2f780 74 65 33 42 74 72 65 65 4c 61 73 74 50 61 67 65  te3BtreeLastPage
2f790 28 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31  (db->aDb[pOp->p1
2f7a0 5d 2e 70 42 74 29 3b 0a 20 20 62 72 65 61 6b 3b  ].pBt);.  break;
2f7b0 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a 23 69 66 6e  .}.#endif...#ifn
2f7c0 64 65 66 20 20 53 51 4c 49 54 45 5f 4f 4d 49 54  def  SQLITE_OMIT
2f7d0 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53 0a 2f  _PAGER_PRAGMAS./
2f7e0 2a 20 4f 70 63 6f 64 65 3a 20 4d 61 78 50 67 63  * Opcode: MaxPgc
2f7f0 6e 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  nt P1 P2 P3 * *.
2f800 2a 2a 0a 2a 2a 20 54 72 79 20 74 6f 20 73 65 74  **.** Try to set
2f810 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 70 61 67   the maximum pag
2f820 65 20 63 6f 75 6e 74 20 66 6f 72 20 64 61 74 61  e count for data
2f830 62 61 73 65 20 50 31 20 74 6f 20 74 68 65 20 76  base P1 to the v
2f840 61 6c 75 65 20 69 6e 20 50 33 2e 0a 2a 2a 20 44  alue in P3..** D
2f850 6f 20 6e 6f 74 20 6c 65 74 20 74 68 65 20 6d 61  o not let the ma
2f860 78 69 6d 75 6d 20 70 61 67 65 20 63 6f 75 6e 74  ximum page count
2f870 20 66 61 6c 6c 20 62 65 6c 6f 77 20 74 68 65 20   fall below the 
2f880 63 75 72 72 65 6e 74 20 70 61 67 65 20 63 6f 75  current page cou
2f890 6e 74 20 61 6e 64 0a 2a 2a 20 64 6f 20 6e 6f 74  nt and.** do not
2f8a0 20 63 68 61 6e 67 65 20 74 68 65 20 6d 61 78 69   change the maxi
2f8b0 6d 75 6d 20 70 61 67 65 20 63 6f 75 6e 74 20 76  mum page count v
2f8c0 61 6c 75 65 20 69 66 20 50 33 3d 3d 30 2e 0a 2a  alue if P3==0..*
2f8d0 2a 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 6d  *.** Store the m
2f8e0 61 78 69 6d 75 6d 20 70 61 67 65 20 63 6f 75 6e  aximum page coun
2f8f0 74 20 61 66 74 65 72 20 74 68 65 20 63 68 61 6e  t after the chan
2f900 67 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ge in register P
2f910 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 61  2..*/.case OP_Ma
2f920 78 50 67 63 6e 74 3a 20 7b 20 20 20 20 20 20 20  xPgcnt: {       
2f930 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65       /* out2-pre
2f940 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 75 6e 73  release */.  uns
2f950 69 67 6e 65 64 20 69 6e 74 20 6e 65 77 4d 61 78  igned int newMax
2f960 3b 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b 0a  ;.  Btree *pBt;.
2f970 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62  .  pBt = db->aDb
2f980 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20  [pOp->p1].pBt;. 
2f990 20 6e 65 77 4d 61 78 20 3d 20 30 3b 0a 20 20 69   newMax = 0;.  i
2f9a0 66 28 20 70 4f 70 2d 3e 70 33 20 29 7b 0a 20 20  f( pOp->p3 ){.  
2f9b0 20 20 6e 65 77 4d 61 78 20 3d 20 73 71 6c 69 74    newMax = sqlit
2f9c0 65 33 42 74 72 65 65 4c 61 73 74 50 61 67 65 28  e3BtreeLastPage(
2f9d0 70 42 74 29 3b 0a 20 20 20 20 69 66 28 20 6e 65  pBt);.    if( ne
2f9e0 77 4d 61 78 20 3c 20 28 75 6e 73 69 67 6e 65 64  wMax < (unsigned
2f9f0 29 70 4f 70 2d 3e 70 33 20 29 20 6e 65 77 4d 61  )pOp->p3 ) newMa
2fa00 78 20 3d 20 28 75 6e 73 69 67 6e 65 64 29 70 4f  x = (unsigned)pO
2fa10 70 2d 3e 70 33 3b 0a 20 20 7d 0a 20 20 70 4f 75  p->p3;.  }.  pOu
2fa20 74 2d 3e 75 2e 69 20 3d 20 73 71 6c 69 74 65 33  t->u.i = sqlite3
2fa30 42 74 72 65 65 4d 61 78 50 61 67 65 43 6f 75 6e  BtreeMaxPageCoun
2fa40 74 28 70 42 74 2c 20 6e 65 77 4d 61 78 29 3b 0a  t(pBt, newMax);.
2fa50 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
2fa60 66 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  f...#ifndef SQLI
2fa70 54 45 5f 4f 4d 49 54 5f 54 52 41 43 45 0a 2f 2a  TE_OMIT_TRACE./*
2fa80 20 4f 70 63 6f 64 65 3a 20 54 72 61 63 65 20 2a   Opcode: Trace *
2fa90 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20   * * P4 *.**.** 
2faa0 49 66 20 74 72 61 63 69 6e 67 20 69 73 20 65 6e  If tracing is en
2fab0 61 62 6c 65 64 20 28 62 79 20 74 68 65 20 73 71  abled (by the sq
2fac0 6c 69 74 65 33 5f 74 72 61 63 65 28 29 29 20 69  lite3_trace()) i
2fad0 6e 74 65 72 66 61 63 65 2c 20 74 68 65 6e 0a 2a  nterface, then.*
2fae0 2a 20 74 68 65 20 55 54 46 2d 38 20 73 74 72 69  * the UTF-8 stri
2faf0 6e 67 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20  ng contained in 
2fb00 50 34 20 69 73 20 65 6d 69 74 74 65 64 20 6f 6e  P4 is emitted on
2fb10 20 74 68 65 20 74 72 61 63 65 20 63 61 6c 6c 62   the trace callb
2fb20 61 63 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ack..*/.case OP_
2fb30 54 72 61 63 65 3a 20 7b 0a 20 20 63 68 61 72 20  Trace: {.  char 
2fb40 2a 7a 54 72 61 63 65 3b 0a 20 20 63 68 61 72 20  *zTrace;.  char 
2fb50 2a 7a 3b 0a 0a 20 20 69 66 28 20 64 62 2d 3e 78  *z;..  if( db->x
2fb60 54 72 61 63 65 20 26 26 20 28 7a 54 72 61 63 65  Trace && (zTrace
2fb70 20 3d 20 28 70 4f 70 2d 3e 70 34 2e 7a 20 3f 20   = (pOp->p4.z ? 
2fb80 70 4f 70 2d 3e 70 34 2e 7a 20 3a 20 70 2d 3e 7a  pOp->p4.z : p->z
2fb90 53 71 6c 29 29 21 3d 30 20 29 7b 0a 20 20 20 20  Sql))!=0 ){.    
2fba0 7a 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 45  z = sqlite3VdbeE
2fbb0 78 70 61 6e 64 53 71 6c 28 70 2c 20 7a 54 72 61  xpandSql(p, zTra
2fbc0 63 65 29 3b 0a 20 20 20 20 64 62 2d 3e 78 54 72  ce);.    db->xTr
2fbd0 61 63 65 28 64 62 2d 3e 70 54 72 61 63 65 41 72  ace(db->pTraceAr
2fbe0 67 2c 20 7a 29 3b 0a 20 20 20 20 73 71 6c 69 74  g, z);.    sqlit
2fbf0 65 33 44 62 46 72 65 65 28 64 62 2c 20 7a 29 3b  e3DbFree(db, z);
2fc00 0a 20 20 7d 0a 23 69 66 64 65 66 20 53 51 4c 49  .  }.#ifdef SQLI
2fc10 54 45 5f 44 45 42 55 47 0a 20 20 69 66 28 20 28  TE_DEBUG.  if( (
2fc20 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49  db->flags & SQLI
2fc30 54 45 5f 53 71 6c 54 72 61 63 65 29 21 3d 30 0a  TE_SqlTrace)!=0.
2fc40 20 20 20 26 26 20 28 7a 54 72 61 63 65 20 3d 20     && (zTrace = 
2fc50 28 70 4f 70 2d 3e 70 34 2e 7a 20 3f 20 70 4f 70  (pOp->p4.z ? pOp
2fc60 2d 3e 70 34 2e 7a 20 3a 20 70 2d 3e 7a 53 71 6c  ->p4.z : p->zSql
2fc70 29 29 21 3d 30 0a 20 20 29 7b 0a 20 20 20 20 73  ))!=0.  ){.    s
2fc80 71 6c 69 74 65 33 44 65 62 75 67 50 72 69 6e 74  qlite3DebugPrint
2fc90 66 28 22 53 51 4c 2d 74 72 61 63 65 3a 20 25 73  f("SQL-trace: %s
2fca0 5c 6e 22 2c 20 7a 54 72 61 63 65 29 3b 0a 20 20  \n", zTrace);.  
2fcb0 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
2fcc0 54 45 5f 44 45 42 55 47 20 2a 2f 0a 20 20 62 72  TE_DEBUG */.  br
2fcd0 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a  eak;.}.#endif...
2fce0 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 6f 70 20  /* Opcode: Noop 
2fcf0 2a 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  * * * * *.**.** 
2fd00 44 6f 20 6e 6f 74 68 69 6e 67 2e 20 20 54 68 69  Do nothing.  Thi
2fd10 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73  s instruction is
2fd20 20 6f 66 74 65 6e 20 75 73 65 66 75 6c 20 61 73   often useful as
2fd30 20 61 20 6a 75 6d 70 0a 2a 2a 20 64 65 73 74 69   a jump.** desti
2fd40 6e 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 0a 2a 2a  nation..*/./*.**
2fd50 20 54 68 65 20 6d 61 67 69 63 20 45 78 70 6c 61   The magic Expla
2fd60 69 6e 20 6f 70 63 6f 64 65 20 61 72 65 20 6f 6e  in opcode are on
2fd70 6c 79 20 69 6e 73 65 72 74 65 64 20 77 68 65 6e  ly inserted when
2fd80 20 65 78 70 6c 61 69 6e 3d 3d 32 20 28 77 68 69   explain==2 (whi
2fd90 63 68 0a 2a 2a 20 69 73 20 74 6f 20 73 61 79 20  ch.** is to say 
2fda0 77 68 65 6e 20 74 68 65 20 45 58 50 4c 41 49 4e  when the EXPLAIN
2fdb0 20 51 55 45 52 59 20 50 4c 41 4e 20 73 79 6e 74   QUERY PLAN synt
2fdc0 61 78 20 69 73 20 75 73 65 64 2e 29 0a 2a 2a 20  ax is used.).** 
2fdd0 54 68 69 73 20 6f 70 63 6f 64 65 20 72 65 63 6f  This opcode reco
2fde0 72 64 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  rds information 
2fdf0 66 72 6f 6d 20 74 68 65 20 6f 70 74 69 6d 69 7a  from the optimiz
2fe00 65 72 2e 20 20 49 74 20 69 73 20 74 68 65 0a 2a  er.  It is the.*
2fe10 2a 20 74 68 65 20 73 61 6d 65 20 61 73 20 61 20  * the same as a 
2fe20 6e 6f 2d 6f 70 2e 20 20 54 68 69 73 20 6f 70 63  no-op.  This opc
2fe30 6f 64 65 73 6e 65 76 65 72 20 61 70 70 65 61 72  odesnever appear
2fe40 73 20 69 6e 20 61 20 72 65 61 6c 20 56 4d 20 70  s in a real VM p
2fe50 72 6f 67 72 61 6d 2e 0a 2a 2f 0a 64 65 66 61 75  rogram..*/.defau
2fe60 6c 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 2f  lt: {          /
2fe70 2a 20 54 68 69 73 20 69 73 20 72 65 61 6c 6c 79  * This is really
2fe80 20 4f 50 5f 4e 6f 6f 70 20 61 6e 64 20 4f 50 5f   OP_Noop and OP_
2fe90 45 78 70 6c 61 69 6e 20 2a 2f 0a 20 20 61 73 73  Explain */.  ass
2fea0 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  ert( pOp->opcode
2feb0 3d 3d 4f 50 5f 4e 6f 6f 70 20 7c 7c 20 70 4f 70  ==OP_Noop || pOp
2fec0 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45 78 70  ->opcode==OP_Exp
2fed0 6c 61 69 6e 20 29 3b 0a 20 20 62 72 65 61 6b 3b  lain );.  break;
2fee0 0a 7d 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .}../***********
2fef0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2ff00 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2ff10 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2ff20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2ff30 2a 2a 0a 2a 2a 20 54 68 65 20 63 61 73 65 73 20  **.** The cases 
2ff40 6f 66 20 74 68 65 20 73 77 69 74 63 68 20 73 74  of the switch st
2ff50 61 74 65 6d 65 6e 74 20 61 62 6f 76 65 20 74 68  atement above th
2ff60 69 73 20 6c 69 6e 65 20 73 68 6f 75 6c 64 20 61  is line should a
2ff70 6c 6c 20 62 65 20 69 6e 64 65 6e 74 65 64 0a 2a  ll be indented.*
2ff80 2a 20 62 79 20 36 20 73 70 61 63 65 73 2e 20 20  * by 6 spaces.  
2ff90 42 75 74 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73  But the left-mos
2ffa0 74 20 36 20 73 70 61 63 65 73 20 68 61 76 65 20  t 6 spaces have 
2ffb0 62 65 65 6e 20 72 65 6d 6f 76 65 64 20 74 6f 20  been removed to 
2ffc0 69 6d 70 72 6f 76 65 20 74 68 65 0a 2a 2a 20 72  improve the.** r
2ffd0 65 61 64 61 62 69 6c 69 74 79 2e 20 20 46 72 6f  eadability.  Fro
2ffe0 6d 20 74 68 69 73 20 70 6f 69 6e 74 20 6f 6e 20  m this point on 
2fff0 64 6f 77 6e 2c 20 74 68 65 20 6e 6f 72 6d 61 6c  down, the normal
30000 20 69 6e 64 65 6e 74 61 74 69 6f 6e 20 72 75 6c   indentation rul
30010 65 73 20 61 72 65 0a 2a 2a 20 72 65 73 74 6f 72  es are.** restor
30020 65 64 2e 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ed..************
30030 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
30040 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
30050 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
30060 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
30070 2a 2f 0a 20 20 20 20 7d 0a 0a 23 69 66 64 65 66  */.    }..#ifdef
30080 20 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 20 20   VDBE_PROFILE.  
30090 20 20 7b 0a 20 20 20 20 20 20 75 36 34 20 65 6c    {.      u64 el
300a0 61 70 73 65 64 20 3d 20 73 71 6c 69 74 65 33 48  apsed = sqlite3H
300b0 77 74 69 6d 65 28 29 20 2d 20 73 74 61 72 74 3b  wtime() - start;
300c0 0a 20 20 20 20 20 20 70 4f 70 2d 3e 63 79 63 6c  .      pOp->cycl
300d0 65 73 20 2b 3d 20 65 6c 61 70 73 65 64 3b 0a 20  es += elapsed;. 
300e0 20 20 20 20 20 70 4f 70 2d 3e 63 6e 74 2b 2b 3b       pOp->cnt++;
300f0 0a 23 69 66 20 30 0a 20 20 20 20 20 20 20 20 66  .#if 0.        f
30100 70 72 69 6e 74 66 28 73 74 64 6f 75 74 2c 20 22  printf(stdout, "
30110 25 31 30 6c 6c 75 20 22 2c 20 65 6c 61 70 73 65  %10llu ", elapse
30120 64 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  d);.        sqli
30130 74 65 33 56 64 62 65 50 72 69 6e 74 4f 70 28 73  te3VdbePrintOp(s
30140 74 64 6f 75 74 2c 20 6f 72 69 67 50 63 2c 20 26  tdout, origPc, &
30150 61 4f 70 5b 6f 72 69 67 50 63 5d 29 3b 0a 23 65  aOp[origPc]);.#e
30160 6e 64 69 66 0a 20 20 20 20 7d 0a 23 65 6e 64 69  ndif.    }.#endi
30170 66 0a 0a 20 20 20 20 2f 2a 20 54 68 65 20 66 6f  f..    /* The fo
30180 6c 6c 6f 77 69 6e 67 20 63 6f 64 65 20 61 64 64  llowing code add
30190 73 20 6e 6f 74 68 69 6e 67 20 74 6f 20 74 68 65  s nothing to the
301a0 20 61 63 74 75 61 6c 20 66 75 6e 63 74 69 6f 6e   actual function
301b0 61 6c 69 74 79 0a 20 20 20 20 2a 2a 20 6f 66 20  ality.    ** of 
301c0 74 68 65 20 70 72 6f 67 72 61 6d 2e 20 20 49 74  the program.  It
301d0 20 69 73 20 6f 6e 6c 79 20 68 65 72 65 20 66 6f   is only here fo
301e0 72 20 74 65 73 74 69 6e 67 20 61 6e 64 20 64 65  r testing and de
301f0 62 75 67 67 69 6e 67 2e 0a 20 20 20 20 2a 2a 20  bugging..    ** 
30200 4f 6e 20 74 68 65 20 6f 74 68 65 72 20 68 61 6e  On the other han
30210 64 2c 20 69 74 20 64 6f 65 73 20 62 75 72 6e 20  d, it does burn 
30220 43 50 55 20 63 79 63 6c 65 73 20 65 76 65 72 79  CPU cycles every
30230 20 74 69 6d 65 20 74 68 72 6f 75 67 68 0a 20 20   time through.  
30240 20 20 2a 2a 20 74 68 65 20 65 76 61 6c 75 61 74    ** the evaluat
30250 6f 72 20 6c 6f 6f 70 2e 20 20 53 6f 20 77 65 20  or loop.  So we 
30260 63 61 6e 20 6c 65 61 76 65 20 69 74 20 6f 75 74  can leave it out
30270 20 77 68 65 6e 20 4e 44 45 42 55 47 20 69 73 20   when NDEBUG is 
30280 64 65 66 69 6e 65 64 2e 0a 20 20 20 20 2a 2f 0a  defined..    */.
30290 23 69 66 6e 64 65 66 20 4e 44 45 42 55 47 0a 20  #ifndef NDEBUG. 
302a0 20 20 20 61 73 73 65 72 74 28 20 70 63 3e 3d 2d     assert( pc>=-
302b0 31 20 26 26 20 70 63 3c 70 2d 3e 6e 4f 70 20 29  1 && pc<p->nOp )
302c0 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  ;..#ifdef SQLITE
302d0 5f 44 45 42 55 47 0a 20 20 20 20 69 66 28 20 70  _DEBUG.    if( p
302e0 2d 3e 74 72 61 63 65 20 29 7b 0a 20 20 20 20 20  ->trace ){.     
302f0 20 69 66 28 20 72 63 21 3d 30 20 29 20 66 70 72   if( rc!=0 ) fpr
30300 69 6e 74 66 28 70 2d 3e 74 72 61 63 65 2c 22 72  intf(p->trace,"r
30310 63 3d 25 64 5c 6e 22 2c 72 63 29 3b 0a 20 20 20  c=%d\n",rc);.   
30320 20 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 66 6c     if( pOp->opfl
30330 61 67 73 20 26 20 28 4f 50 46 4c 47 5f 4f 55 54  ags & (OPFLG_OUT
30340 32 5f 50 52 45 52 45 4c 45 41 53 45 7c 4f 50 46  2_PRERELEASE|OPF
30350 4c 47 5f 4f 55 54 32 29 20 29 7b 0a 20 20 20 20  LG_OUT2) ){.    
30360 20 20 20 20 72 65 67 69 73 74 65 72 54 72 61 63      registerTrac
30370 65 28 70 2d 3e 74 72 61 63 65 2c 20 70 4f 70 2d  e(p->trace, pOp-
30380 3e 70 32 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  >p2, &aMem[pOp->
30390 70 32 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  p2]);.      }.  
303a0 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 66      if( pOp->opf
303b0 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f 4f 55 54  lags & OPFLG_OUT
303c0 33 20 29 7b 0a 20 20 20 20 20 20 20 20 72 65 67  3 ){.        reg
303d0 69 73 74 65 72 54 72 61 63 65 28 70 2d 3e 74 72  isterTrace(p->tr
303e0 61 63 65 2c 20 70 4f 70 2d 3e 70 33 2c 20 26 61  ace, pOp->p3, &a
303f0 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20  Mem[pOp->p3]);. 
30400 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 23 65 6e       }.    }.#en
30410 64 69 66 20 20 2f 2a 20 53 51 4c 49 54 45 5f 44  dif  /* SQLITE_D
30420 45 42 55 47 20 2a 2f 0a 23 65 6e 64 69 66 20 20  EBUG */.#endif  
30430 2f 2a 20 4e 44 45 42 55 47 20 2a 2f 0a 20 20 7d  /* NDEBUG */.  }
30440 20 20 2f 2a 20 54 68 65 20 65 6e 64 20 6f 66 20    /* The end of 
30450 74 68 65 20 66 6f 72 28 3b 3b 29 20 6c 6f 6f 70  the for(;;) loop
30460 20 74 68 65 20 6c 6f 6f 70 73 20 74 68 72 6f 75   the loops throu
30470 67 68 20 6f 70 63 6f 64 65 73 20 2a 2f 0a 0a 20  gh opcodes */.. 
30480 20 2f 2a 20 49 66 20 77 65 20 72 65 61 63 68 20   /* If we reach 
30490 74 68 69 73 20 70 6f 69 6e 74 2c 20 69 74 20 6d  this point, it m
304a0 65 61 6e 73 20 74 68 61 74 20 65 78 65 63 75 74  eans that execut
304b0 69 6f 6e 20 69 73 20 66 69 6e 69 73 68 65 64 20  ion is finished 
304c0 77 69 74 68 0a 20 20 2a 2a 20 61 6e 20 65 72 72  with.  ** an err
304d0 6f 72 20 6f 66 20 73 6f 6d 65 20 6b 69 6e 64 2e  or of some kind.
304e0 0a 20 20 2a 2f 0a 76 64 62 65 5f 65 72 72 6f 72  .  */.vdbe_error
304f0 5f 68 61 6c 74 3a 0a 20 20 61 73 73 65 72 74 28  _halt:.  assert(
30500 20 72 63 20 29 3b 0a 20 20 70 2d 3e 72 63 20 3d   rc );.  p->rc =
30510 20 72 63 3b 0a 20 20 74 65 73 74 63 61 73 65 28   rc;.  testcase(
30520 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f   sqlite3GlobalCo
30530 6e 66 69 67 2e 78 4c 6f 67 21 3d 30 20 29 3b 0a  nfig.xLog!=0 );.
30540 20 20 73 71 6c 69 74 65 33 5f 6c 6f 67 28 72 63    sqlite3_log(rc
30550 2c 20 22 73 74 61 74 65 6d 65 6e 74 20 61 62 6f  , "statement abo
30560 72 74 73 20 61 74 20 25 64 3a 20 5b 25 73 5d 20  rts at %d: [%s] 
30570 25 73 22 2c 20 0a 20 20 20 20 20 20 20 20 20 20  %s", .          
30580 20 20 20 20 20 20 20 20 20 70 63 2c 20 70 2d 3e           pc, p->
30590 7a 53 71 6c 2c 20 70 2d 3e 7a 45 72 72 4d 73 67  zSql, p->zErrMsg
305a0 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  );.  sqlite3Vdbe
305b0 48 61 6c 74 28 70 29 3b 0a 20 20 69 66 28 20 72  Halt(p);.  if( r
305c0 63 3d 3d 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f  c==SQLITE_IOERR_
305d0 4e 4f 4d 45 4d 20 29 20 64 62 2d 3e 6d 61 6c 6c  NOMEM ) db->mall
305e0 6f 63 46 61 69 6c 65 64 20 3d 20 31 3b 0a 20 20  ocFailed = 1;.  
305f0 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f  rc = SQLITE_ERRO
30600 52 3b 0a 20 20 69 66 28 20 72 65 73 65 74 53 63  R;.  if( resetSc
30610 68 65 6d 61 4f 6e 46 61 75 6c 74 3e 30 20 29 7b  hemaOnFault>0 ){
30620 0a 20 20 20 20 73 71 6c 69 74 65 33 52 65 73 65  .    sqlite3Rese
30630 74 49 6e 74 65 72 6e 61 6c 53 63 68 65 6d 61 28  tInternalSchema(
30640 64 62 2c 20 72 65 73 65 74 53 63 68 65 6d 61 4f  db, resetSchemaO
30650 6e 46 61 75 6c 74 2d 31 29 3b 0a 20 20 7d 0a 0a  nFault-1);.  }..
30660 20 20 2f 2a 20 54 68 69 73 20 69 73 20 74 68 65    /* This is the
30670 20 6f 6e 6c 79 20 77 61 79 20 6f 75 74 20 6f 66   only way out of
30680 20 74 68 69 73 20 70 72 6f 63 65 64 75 72 65 2e   this procedure.
30690 20 20 57 65 20 68 61 76 65 20 74 6f 0a 20 20 2a    We have to.  *
306a0 2a 20 72 65 6c 65 61 73 65 20 74 68 65 20 6d 75  * release the mu
306b0 74 65 78 65 73 20 6f 6e 20 62 74 72 65 65 73 20  texes on btrees 
306c0 74 68 61 74 20 77 65 72 65 20 61 63 71 75 69 72  that were acquir
306d0 65 64 20 61 74 20 74 68 65 0a 20 20 2a 2a 20 74  ed at the.  ** t
306e0 6f 70 2e 20 2a 2f 0a 76 64 62 65 5f 72 65 74 75  op. */.vdbe_retu
306f0 72 6e 3a 0a 20 20 64 62 2d 3e 6c 61 73 74 52 6f  rn:.  db->lastRo
30700 77 69 64 20 3d 20 6c 61 73 74 52 6f 77 69 64 3b  wid = lastRowid;
30710 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4c 65  .  sqlite3VdbeLe
30720 61 76 65 28 70 29 3b 0a 20 20 72 65 74 75 72 6e  ave(p);.  return
30730 20 72 63 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20   rc;..  /* Jump 
30740 74 6f 20 68 65 72 65 20 69 66 20 61 20 73 74 72  to here if a str
30750 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6c 61 72 67  ing or blob larg
30760 65 72 20 74 68 61 6e 20 53 51 4c 49 54 45 5f 4d  er than SQLITE_M
30770 41 58 5f 4c 45 4e 47 54 48 0a 20 20 2a 2a 20 69  AX_LENGTH.  ** i
30780 73 20 65 6e 63 6f 75 6e 74 65 72 65 64 2e 0a 20  s encountered.. 
30790 20 2a 2f 0a 74 6f 6f 5f 62 69 67 3a 0a 20 20 73   */.too_big:.  s
307a0 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28  qlite3SetString(
307b0 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c  &p->zErrMsg, db,
307c0 20 22 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62   "string or blob
307d0 20 74 6f 6f 20 62 69 67 22 29 3b 0a 20 20 72 63   too big");.  rc
307e0 20 3d 20 53 51 4c 49 54 45 5f 54 4f 4f 42 49 47   = SQLITE_TOOBIG
307f0 3b 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 65 72  ;.  goto vdbe_er
30800 72 6f 72 5f 68 61 6c 74 3b 0a 0a 20 20 2f 2a 20  ror_halt;..  /* 
30810 4a 75 6d 70 20 74 6f 20 68 65 72 65 20 69 66 20  Jump to here if 
30820 61 20 6d 61 6c 6c 6f 63 28 29 20 66 61 69 6c 73  a malloc() fails
30830 2e 0a 20 20 2a 2f 0a 6e 6f 5f 6d 65 6d 3a 0a 20  ..  */.no_mem:. 
30840 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65   db->mallocFaile
30850 64 20 3d 20 31 3b 0a 20 20 73 71 6c 69 74 65 33  d = 1;.  sqlite3
30860 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45  SetString(&p->zE
30870 72 72 4d 73 67 2c 20 64 62 2c 20 22 6f 75 74 20  rrMsg, db, "out 
30880 6f 66 20 6d 65 6d 6f 72 79 22 29 3b 0a 20 20 72  of memory");.  r
30890 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d  c = SQLITE_NOMEM
308a0 3b 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 65 72  ;.  goto vdbe_er
308b0 72 6f 72 5f 68 61 6c 74 3b 0a 0a 20 20 2f 2a 20  ror_halt;..  /* 
308c0 4a 75 6d 70 20 74 6f 20 68 65 72 65 20 66 6f 72  Jump to here for
308d0 20 61 6e 79 20 6f 74 68 65 72 20 6b 69 6e 64 20   any other kind 
308e0 6f 66 20 66 61 74 61 6c 20 65 72 72 6f 72 2e 20  of fatal error. 
308f0 20 54 68 65 20 22 72 63 22 20 76 61 72 69 61 62   The "rc" variab
30900 6c 65 0a 20 20 2a 2a 20 73 68 6f 75 6c 64 20 68  le.  ** should h
30910 6f 6c 64 20 74 68 65 20 65 72 72 6f 72 20 6e 75  old the error nu
30920 6d 62 65 72 2e 0a 20 20 2a 2f 0a 61 62 6f 72 74  mber..  */.abort
30930 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3a 0a 20  _due_to_error:. 
30940 20 61 73 73 65 72 74 28 20 70 2d 3e 7a 45 72 72   assert( p->zErr
30950 4d 73 67 3d 3d 30 20 29 3b 0a 20 20 69 66 28 20  Msg==0 );.  if( 
30960 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64  db->mallocFailed
30970 20 29 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e   ) rc = SQLITE_N
30980 4f 4d 45 4d 3b 0a 20 20 69 66 28 20 72 63 21 3d  OMEM;.  if( rc!=
30990 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d  SQLITE_IOERR_NOM
309a0 45 4d 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  EM ){.    sqlite
309b0 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a  3SetString(&p->z
309c0 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 22  ErrMsg, db, "%s"
309d0 2c 20 73 71 6c 69 74 65 33 45 72 72 53 74 72 28  , sqlite3ErrStr(
309e0 72 63 29 29 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f  rc));.  }.  goto
309f0 20 76 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74   vdbe_error_halt
30a00 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f 20  ;..  /* Jump to 
30a10 68 65 72 65 20 69 66 20 74 68 65 20 73 71 6c 69  here if the sqli
30a20 74 65 33 5f 69 6e 74 65 72 72 75 70 74 28 29 20  te3_interrupt() 
30a30 41 50 49 20 73 65 74 73 20 74 68 65 20 69 6e 74  API sets the int
30a40 65 72 72 75 70 74 0a 20 20 2a 2a 20 66 6c 61 67  errupt.  ** flag
30a50 2e 0a 20 20 2a 2f 0a 61 62 6f 72 74 5f 64 75 65  ..  */.abort_due
30a60 5f 74 6f 5f 69 6e 74 65 72 72 75 70 74 3a 0a 20  _to_interrupt:. 
30a70 20 61 73 73 65 72 74 28 20 64 62 2d 3e 75 31 2e   assert( db->u1.
30a80 69 73 49 6e 74 65 72 72 75 70 74 65 64 20 29 3b  isInterrupted );
30a90 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 49  .  rc = SQLITE_I
30aa0 4e 54 45 52 52 55 50 54 3b 0a 20 20 70 2d 3e 72  NTERRUPT;.  p->r
30ab0 63 20 3d 20 72 63 3b 0a 20 20 73 71 6c 69 74 65  c = rc;.  sqlite
30ac0 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a  3SetString(&p->z
30ad0 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 22  ErrMsg, db, "%s"
30ae0 2c 20 73 71 6c 69 74 65 33 45 72 72 53 74 72 28  , sqlite3ErrStr(
30af0 72 63 29 29 3b 0a 20 20 67 6f 74 6f 20 76 64 62  rc));.  goto vdb
30b00 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 7d 0a  e_error_halt;.}.