/ Hex Artifact Content
Login

Artifact a7ab9993ec5a4d9479dc99671faec061fbf9b889:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f  ******.** The co
0180: 64 65 20 69 6e 20 74 68 69 73 20 66 69 6c 65 20  de in this file 
0190: 69 6d 70 6c 65 6d 65 6e 74 73 20 65 78 65 63 75  implements execu
01a0: 74 69 6f 6e 20 6d 65 74 68 6f 64 20 6f 66 20 74  tion method of t
01b0: 68 65 20 0a 2a 2a 20 56 69 72 74 75 61 6c 20 44  he .** Virtual D
01c0: 61 74 61 62 61 73 65 20 45 6e 67 69 6e 65 20 28  atabase Engine (
01d0: 56 44 42 45 29 2e 20 20 41 20 73 65 70 61 72 61  VDBE).  A separa
01e0: 74 65 20 66 69 6c 65 20 28 22 76 64 62 65 61 75  te file ("vdbeau
01f0: 78 2e 63 22 29 0a 2a 2a 20 68 61 6e 64 6c 65 73  x.c").** handles
0200: 20 68 6f 75 73 65 6b 65 65 70 69 6e 67 20 64 65   housekeeping de
0210: 74 61 69 6c 73 20 73 75 63 68 20 61 73 20 63 72  tails such as cr
0220: 65 61 74 69 6e 67 20 61 6e 64 20 64 65 6c 65 74  eating and delet
0230: 69 6e 67 0a 2a 2a 20 56 44 42 45 20 69 6e 73 74  ing.** VDBE inst
0240: 61 6e 63 65 73 2e 20 20 54 68 69 73 20 66 69 6c  ances.  This fil
0250: 65 20 69 73 20 73 6f 6c 65 6c 79 20 69 6e 74 65  e is solely inte
0260: 72 65 73 74 65 64 20 69 6e 20 65 78 65 63 75 74  rested in execut
0270: 69 6e 67 0a 2a 2a 20 74 68 65 20 56 44 42 45 20  ing.** the VDBE 
0280: 70 72 6f 67 72 61 6d 2e 0a 2a 2a 0a 2a 2a 20 49  program..**.** I
0290: 6e 20 74 68 65 20 65 78 74 65 72 6e 61 6c 20 69  n the external i
02a0: 6e 74 65 72 66 61 63 65 2c 20 61 6e 20 22 73 71  nterface, an "sq
02b0: 6c 69 74 65 33 5f 73 74 6d 74 2a 22 20 69 73 20  lite3_stmt*" is 
02c0: 61 6e 20 6f 70 61 71 75 65 20 70 6f 69 6e 74 65  an opaque pointe
02d0: 72 0a 2a 2a 20 74 6f 20 61 20 56 44 42 45 2e 0a  r.** to a VDBE..
02e0: 2a 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 20 70 61  **.** The SQL pa
02f0: 72 73 65 72 20 67 65 6e 65 72 61 74 65 73 20 61  rser generates a
0300: 20 70 72 6f 67 72 61 6d 20 77 68 69 63 68 20 69   program which i
0310: 73 20 74 68 65 6e 20 65 78 65 63 75 74 65 64 20  s then executed 
0320: 62 79 0a 2a 2a 20 74 68 65 20 56 44 42 45 20 74  by.** the VDBE t
0330: 6f 20 64 6f 20 74 68 65 20 77 6f 72 6b 20 6f 66  o do the work of
0340: 20 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65   the SQL stateme
0350: 6e 74 2e 20 20 56 44 42 45 20 70 72 6f 67 72 61  nt.  VDBE progra
0360: 6d 73 20 61 72 65 20 0a 2a 2a 20 73 69 6d 69 6c  ms are .** simil
0370: 61 72 20 69 6e 20 66 6f 72 6d 20 74 6f 20 61 73  ar in form to as
0380: 73 65 6d 62 6c 79 20 6c 61 6e 67 75 61 67 65 2e  sembly language.
0390: 20 20 54 68 65 20 70 72 6f 67 72 61 6d 20 63 6f    The program co
03a0: 6e 73 69 73 74 73 20 6f 66 0a 2a 2a 20 61 20 6c  nsists of.** a l
03b0: 69 6e 65 61 72 20 73 65 71 75 65 6e 63 65 20 6f  inear sequence o
03c0: 66 20 6f 70 65 72 61 74 69 6f 6e 73 2e 20 20 45  f operations.  E
03d0: 61 63 68 20 6f 70 65 72 61 74 69 6f 6e 20 68 61  ach operation ha
03e0: 73 20 61 6e 20 6f 70 63 6f 64 65 20 0a 2a 2a 20  s an opcode .** 
03f0: 61 6e 64 20 35 20 6f 70 65 72 61 6e 64 73 2e 20  and 5 operands. 
0400: 20 4f 70 65 72 61 6e 64 73 20 50 31 2c 20 50 32   Operands P1, P2
0410: 2c 20 61 6e 64 20 50 33 20 61 72 65 20 69 6e 74  , and P3 are int
0420: 65 67 65 72 73 2e 20 20 4f 70 65 72 61 6e 64 20  egers.  Operand 
0430: 50 34 20 0a 2a 2a 20 69 73 20 61 20 6e 75 6c 6c  P4 .** is a null
0440: 2d 74 65 72 6d 69 6e 61 74 65 64 20 73 74 72 69  -terminated stri
0450: 6e 67 2e 20 20 4f 70 65 72 61 6e 64 20 50 35 20  ng.  Operand P5 
0460: 69 73 20 61 6e 20 75 6e 73 69 67 6e 65 64 20 63  is an unsigned c
0470: 68 61 72 61 63 74 65 72 2e 0a 2a 2a 20 46 65 77  haracter..** Few
0480: 20 6f 70 63 6f 64 65 73 20 75 73 65 20 61 6c 6c   opcodes use all
0490: 20 35 20 6f 70 65 72 61 6e 64 73 2e 0a 2a 2a 0a   5 operands..**.
04a0: 2a 2a 20 43 6f 6d 70 75 74 61 74 69 6f 6e 20 72  ** Computation r
04b0: 65 73 75 6c 74 73 20 61 72 65 20 73 74 6f 72 65  esults are store
04c0: 64 20 6f 6e 20 61 20 73 65 74 20 6f 66 20 72 65  d on a set of re
04d0: 67 69 73 74 65 72 73 20 6e 75 6d 62 65 72 65 64  gisters numbered
04e0: 20 62 65 67 69 6e 6e 69 6e 67 0a 2a 2a 20 77 69   beginning.** wi
04f0: 74 68 20 31 20 61 6e 64 20 67 6f 69 6e 67 20 75  th 1 and going u
0500: 70 20 74 6f 20 56 64 62 65 2e 6e 4d 65 6d 2e 20  p to Vdbe.nMem. 
0510: 20 45 61 63 68 20 72 65 67 69 73 74 65 72 20 63   Each register c
0520: 61 6e 20 73 74 6f 72 65 0a 2a 2a 20 65 69 74 68  an store.** eith
0530: 65 72 20 61 6e 20 69 6e 74 65 67 65 72 2c 20 61  er an integer, a
0540: 20 6e 75 6c 6c 2d 74 65 72 6d 69 6e 61 74 65 64   null-terminated
0550: 20 73 74 72 69 6e 67 2c 20 61 20 66 6c 6f 61 74   string, a float
0560: 69 6e 67 20 70 6f 69 6e 74 0a 2a 2a 20 6e 75 6d  ing point.** num
0570: 62 65 72 2c 20 6f 72 20 74 68 65 20 53 51 4c 20  ber, or the SQL 
0580: 22 4e 55 4c 4c 22 20 76 61 6c 75 65 2e 20 20 41  "NULL" value.  A
0590: 6e 20 69 6d 70 6c 69 63 69 74 20 63 6f 6e 76 65  n implicit conve
05a0: 72 73 69 6f 6e 20 66 72 6f 6d 20 6f 6e 65 0a 2a  rsion from one.*
05b0: 2a 20 74 79 70 65 20 74 6f 20 74 68 65 20 6f 74  * type to the ot
05c0: 68 65 72 20 6f 63 63 75 72 73 20 61 73 20 6e 65  her occurs as ne
05d0: 63 65 73 73 61 72 79 2e 0a 2a 2a 20 0a 2a 2a 20  cessary..** .** 
05e0: 4d 6f 73 74 20 6f 66 20 74 68 65 20 63 6f 64 65  Most of the code
05f0: 20 69 6e 20 74 68 69 73 20 66 69 6c 65 20 69 73   in this file is
0600: 20 74 61 6b 65 6e 20 75 70 20 62 79 20 74 68 65   taken up by the
0610: 20 73 71 6c 69 74 65 33 56 64 62 65 45 78 65 63   sqlite3VdbeExec
0620: 28 29 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 20 77  ().** function w
0630: 68 69 63 68 20 64 6f 65 73 20 74 68 65 20 77 6f  hich does the wo
0640: 72 6b 20 6f 66 20 69 6e 74 65 72 70 72 65 74 69  rk of interpreti
0650: 6e 67 20 61 20 56 44 42 45 20 70 72 6f 67 72 61  ng a VDBE progra
0660: 6d 2e 0a 2a 2a 20 42 75 74 20 6f 74 68 65 72 20  m..** But other 
0670: 72 6f 75 74 69 6e 65 73 20 61 72 65 20 61 6c 73  routines are als
0680: 6f 20 70 72 6f 76 69 64 65 64 20 74 6f 20 68 65  o provided to he
0690: 6c 70 20 69 6e 20 62 75 69 6c 64 69 6e 67 20 75  lp in building u
06a0: 70 0a 2a 2a 20 61 20 70 72 6f 67 72 61 6d 20 69  p.** a program i
06b0: 6e 73 74 72 75 63 74 69 6f 6e 20 62 79 20 69 6e  nstruction by in
06c0: 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  struction..**.**
06d0: 20 56 61 72 69 6f 75 73 20 73 63 72 69 70 74 73   Various scripts
06e0: 20 73 63 61 6e 20 74 68 69 73 20 73 6f 75 72 63   scan this sourc
06f0: 65 20 66 69 6c 65 20 69 6e 20 6f 72 64 65 72 20  e file in order 
0700: 74 6f 20 67 65 6e 65 72 61 74 65 20 48 54 4d 4c  to generate HTML
0710: 0a 2a 2a 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  .** documentatio
0720: 6e 2c 20 68 65 61 64 65 72 73 20 66 69 6c 65 73  n, headers files
0730: 2c 20 6f 72 20 6f 74 68 65 72 20 64 65 72 69 76  , or other deriv
0740: 65 64 20 66 69 6c 65 73 2e 20 20 54 68 65 20 66  ed files.  The f
0750: 6f 72 6d 61 74 74 69 6e 67 0a 2a 2a 20 6f 66 20  ormatting.** of 
0760: 74 68 65 20 63 6f 64 65 20 69 6e 20 74 68 69 73  the code in this
0770: 20 66 69 6c 65 20 69 73 2c 20 74 68 65 72 65 66   file is, theref
0780: 6f 72 65 2c 20 69 6d 70 6f 72 74 61 6e 74 2e 20  ore, important. 
0790: 20 53 65 65 20 6f 74 68 65 72 20 63 6f 6d 6d 65   See other comme
07a0: 6e 74 73 0a 2a 2a 20 69 6e 20 74 68 69 73 20 66  nts.** in this f
07b0: 69 6c 65 20 66 6f 72 20 64 65 74 61 69 6c 73 2e  ile for details.
07c0: 20 20 49 66 20 69 6e 20 64 6f 75 62 74 2c 20 64    If in doubt, d
07d0: 6f 20 6e 6f 74 20 64 65 76 69 61 74 65 20 66 72  o not deviate fr
07e0: 6f 6d 20 65 78 69 73 74 69 6e 67 0a 2a 2a 20 63  om existing.** c
07f0: 6f 6d 6d 65 6e 74 69 6e 67 20 61 6e 64 20 69 6e  ommenting and in
0800: 64 65 6e 74 61 74 69 6f 6e 20 70 72 61 63 74 69  dentation practi
0810: 63 65 73 20 77 68 65 6e 20 63 68 61 6e 67 69 6e  ces when changin
0820: 67 20 6f 72 20 61 64 64 69 6e 67 20 63 6f 64 65  g or adding code
0830: 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 73  ..*/.#include "s
0840: 71 6c 69 74 65 49 6e 74 2e 68 22 0a 23 69 6e 63  qliteInt.h".#inc
0850: 6c 75 64 65 20 22 76 64 62 65 49 6e 74 2e 68 22  lude "vdbeInt.h"
0860: 0a 0a 2f 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 74  ../*.** Invoke t
0870: 68 69 73 20 6d 61 63 72 6f 20 6f 6e 20 6d 65 6d  his macro on mem
0880: 6f 72 79 20 63 65 6c 6c 73 20 6a 75 73 74 20 70  ory cells just p
0890: 72 69 6f 72 20 74 6f 20 63 68 61 6e 67 69 6e 67  rior to changing
08a0: 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 6f 66   the.** value of
08b0: 20 74 68 65 20 63 65 6c 6c 2e 20 20 54 68 69 73   the cell.  This
08c0: 20 6d 61 63 72 6f 20 76 65 72 69 66 69 65 73 20   macro verifies 
08d0: 74 68 61 74 20 73 68 61 6c 6c 6f 77 20 63 6f 70  that shallow cop
08e0: 69 65 73 20 61 72 65 0a 2a 2a 20 6e 6f 74 20 6d  ies are.** not m
08f0: 69 73 75 73 65 64 2e 0a 2a 2f 0a 23 69 66 64 65  isused..*/.#ifde
0900: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 23  f SQLITE_DEBUG.#
0910: 20 64 65 66 69 6e 65 20 6d 65 6d 41 62 6f 75 74   define memAbout
0920: 54 6f 43 68 61 6e 67 65 28 50 2c 4d 29 20 73 71  ToChange(P,M) sq
0930: 6c 69 74 65 33 56 64 62 65 4d 65 6d 50 72 65 70  lite3VdbeMemPrep
0940: 61 72 65 54 6f 43 68 61 6e 67 65 28 50 2c 4d 29  areToChange(P,M)
0950: 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
0960: 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
0970: 28 50 2c 4d 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  (P,M).#endif../*
0980: 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
0990: 67 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c  g global variabl
09a0: 65 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64  e is incremented
09b0: 20 65 76 65 72 79 20 74 69 6d 65 20 61 20 63 75   every time a cu
09c0: 72 73 6f 72 0a 2a 2a 20 6d 6f 76 65 73 2c 20 65  rsor.** moves, e
09d0: 69 74 68 65 72 20 62 79 20 74 68 65 20 4f 50 5f  ither by the OP_
09e0: 53 65 65 6b 58 58 2c 20 4f 50 5f 4e 65 78 74 2c  SeekXX, OP_Next,
09f0: 20 6f 72 20 4f 50 5f 50 72 65 76 20 6f 70 63 6f   or OP_Prev opco
0a00: 64 65 73 2e 20 20 54 68 65 20 74 65 73 74 0a 2a  des.  The test.*
0a10: 2a 20 70 72 6f 63 65 64 75 72 65 73 20 75 73 65  * procedures use
0a20: 20 74 68 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f   this informatio
0a30: 6e 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 74  n to make sure t
0a40: 68 61 74 20 69 6e 64 69 63 65 73 20 61 72 65 0a  hat indices are.
0a50: 2a 2a 20 77 6f 72 6b 69 6e 67 20 63 6f 72 72 65  ** working corre
0a60: 63 74 6c 79 2e 20 20 54 68 69 73 20 76 61 72 69  ctly.  This vari
0a70: 61 62 6c 65 20 68 61 73 20 6e 6f 20 66 75 6e 63  able has no func
0a80: 74 69 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20  tion other than 
0a90: 74 6f 0a 2a 2a 20 68 65 6c 70 20 76 65 72 69 66  to.** help verif
0aa0: 79 20 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70  y the correct op
0ab0: 65 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c  eration of the l
0ac0: 69 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65  ibrary..*/.#ifde
0ad0: 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e  f SQLITE_TEST.in
0ae0: 74 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68  t sqlite3_search
0af0: 5f 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64  _count = 0;.#end
0b00: 69 66 0a 0a 2f 2a 0a 2a 2a 20 57 68 65 6e 20 74  if../*.** When t
0b10: 68 69 73 20 67 6c 6f 62 61 6c 20 76 61 72 69 61  his global varia
0b20: 62 6c 65 20 69 73 20 70 6f 73 69 74 69 76 65 2c  ble is positive,
0b30: 20 69 74 20 67 65 74 73 20 64 65 63 72 65 6d 65   it gets decreme
0b40: 6e 74 65 64 20 6f 6e 63 65 20 62 65 66 6f 72 65  nted once before
0b50: 0a 2a 2a 20 65 61 63 68 20 69 6e 73 74 72 75 63  .** each instruc
0b60: 74 69 6f 6e 20 69 6e 20 74 68 65 20 56 44 42 45  tion in the VDBE
0b70: 2e 20 20 57 68 65 6e 20 72 65 61 63 68 65 73 20  .  When reaches 
0b80: 7a 65 72 6f 2c 20 74 68 65 20 75 31 2e 69 73 49  zero, the u1.isI
0b90: 6e 74 65 72 72 75 70 74 65 64 0a 2a 2a 20 66 69  nterrupted.** fi
0ba0: 65 6c 64 20 6f 66 20 74 68 65 20 73 71 6c 69 74  eld of the sqlit
0bb0: 65 33 20 73 74 72 75 63 74 75 72 65 20 69 73 20  e3 structure is 
0bc0: 73 65 74 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  set in order to 
0bd0: 73 69 6d 75 6c 61 74 65 20 61 6e 64 20 69 6e 74  simulate and int
0be0: 65 72 72 75 70 74 2e 0a 2a 2a 0a 2a 2a 20 54 68  errupt..**.** Th
0bf0: 69 73 20 66 61 63 69 6c 69 74 79 20 69 73 20 75  is facility is u
0c00: 73 65 64 20 66 6f 72 20 74 65 73 74 69 6e 67 20  sed for testing 
0c10: 70 75 72 70 6f 73 65 73 20 6f 6e 6c 79 2e 20 20  purposes only.  
0c20: 49 74 20 64 6f 65 73 20 6e 6f 74 20 66 75 6e 63  It does not func
0c30: 74 69 6f 6e 0a 2a 2a 20 69 6e 20 61 6e 20 6f 72  tion.** in an or
0c40: 64 69 6e 61 72 79 20 62 75 69 6c 64 2e 0a 2a 2f  dinary build..*/
0c50: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54  .#ifdef SQLITE_T
0c60: 45 53 54 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f  EST.int sqlite3_
0c70: 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74 20  interrupt_count 
0c80: 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  = 0;.#endif../*.
0c90: 2a 2a 20 54 68 65 20 6e 65 78 74 20 67 6c 6f 62  ** The next glob
0ca0: 61 6c 20 76 61 72 69 61 62 6c 65 20 69 73 20 69  al variable is i
0cb0: 6e 63 72 65 6d 65 6e 74 65 64 20 65 61 63 68 20  ncremented each 
0cc0: 74 79 70 65 20 74 68 65 20 4f 50 5f 53 6f 72 74  type the OP_Sort
0cd0: 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 65 78   opcode.** is ex
0ce0: 65 63 75 74 65 64 2e 20 20 54 68 65 20 74 65 73  ecuted.  The tes
0cf0: 74 20 70 72 6f 63 65 64 75 72 65 73 20 75 73 65  t procedures use
0d00: 20 74 68 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f   this informatio
0d10: 6e 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 74  n to make sure t
0d20: 68 61 74 0a 2a 2a 20 73 6f 72 74 69 6e 67 20 69  hat.** sorting i
0d30: 73 20 6f 63 63 75 72 72 69 6e 67 20 6f 72 20 6e  s occurring or n
0d40: 6f 74 20 6f 63 63 75 72 72 69 6e 67 20 61 74 20  ot occurring at 
0d50: 61 70 70 72 6f 70 72 69 61 74 65 20 74 69 6d 65  appropriate time
0d60: 73 2e 20 20 20 54 68 69 73 20 76 61 72 69 61 62  s.   This variab
0d70: 6c 65 0a 2a 2a 20 68 61 73 20 6e 6f 20 66 75 6e  le.** has no fun
0d80: 63 74 69 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e  ction other than
0d90: 20 74 6f 20 68 65 6c 70 20 76 65 72 69 66 79 20   to help verify 
0da0: 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65 72  the correct oper
0db0: 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20  ation of the.** 
0dc0: 6c 69 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64  library..*/.#ifd
0dd0: 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 69  ef SQLITE_TEST.i
0de0: 6e 74 20 73 71 6c 69 74 65 33 5f 73 6f 72 74 5f  nt sqlite3_sort_
0df0: 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64 69  count = 0;.#endi
0e00: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 65 78  f../*.** The nex
0e10: 74 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c  t global variabl
0e20: 65 20 72 65 63 6f 72 64 73 20 74 68 65 20 73 69  e records the si
0e30: 7a 65 20 6f 66 20 74 68 65 20 6c 61 72 67 65 73  ze of the larges
0e40: 74 20 4d 45 4d 5f 42 6c 6f 62 0a 2a 2a 20 6f 72  t MEM_Blob.** or
0e50: 20 4d 45 4d 5f 53 74 72 20 74 68 61 74 20 68 61   MEM_Str that ha
0e60: 73 20 62 65 65 6e 20 75 73 65 64 20 62 79 20 61  s been used by a
0e70: 20 56 44 42 45 20 6f 70 63 6f 64 65 2e 20 20 54   VDBE opcode.  T
0e80: 68 65 20 74 65 73 74 20 70 72 6f 63 65 64 75 72  he test procedur
0e90: 65 73 0a 2a 2a 20 75 73 65 20 74 68 69 73 20 69  es.** use this i
0ea0: 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 6f 20 6d 61  nformation to ma
0eb0: 6b 65 20 73 75 72 65 20 74 68 61 74 20 74 68 65  ke sure that the
0ec0: 20 7a 65 72 6f 2d 62 6c 6f 62 20 66 75 6e 63 74   zero-blob funct
0ed0: 69 6f 6e 61 6c 69 74 79 0a 2a 2a 20 69 73 20 77  ionality.** is w
0ee0: 6f 72 6b 69 6e 67 20 63 6f 72 72 65 63 74 6c 79  orking correctly
0ef0: 2e 20 20 20 54 68 69 73 20 76 61 72 69 61 62 6c  .   This variabl
0f00: 65 20 68 61 73 20 6e 6f 20 66 75 6e 63 74 69 6f  e has no functio
0f10: 6e 20 6f 74 68 65 72 20 74 68 61 6e 20 74 6f 0a  n other than to.
0f20: 2a 2a 20 68 65 6c 70 20 76 65 72 69 66 79 20 74  ** help verify t
0f30: 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65 72 61  he correct opera
0f40: 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c 69 62 72  tion of the libr
0f50: 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  ary..*/.#ifdef S
0f60: 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74 20 73  QLITE_TEST.int s
0f70: 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62 73  qlite3_max_blobs
0f80: 69 7a 65 20 3d 20 30 3b 0a 73 74 61 74 69 63 20  ize = 0;.static 
0f90: 76 6f 69 64 20 75 70 64 61 74 65 4d 61 78 42 6c  void updateMaxBl
0fa0: 6f 62 73 69 7a 65 28 4d 65 6d 20 2a 70 29 7b 0a  obsize(Mem *p){.
0fb0: 20 20 69 66 28 20 28 70 2d 3e 66 6c 61 67 73 20    if( (p->flags 
0fc0: 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42  & (MEM_Str|MEM_B
0fd0: 6c 6f 62 29 29 21 3d 30 20 26 26 20 70 2d 3e 6e  lob))!=0 && p->n
0fe0: 3e 73 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f  >sqlite3_max_blo
0ff0: 62 73 69 7a 65 20 29 7b 0a 20 20 20 20 73 71 6c  bsize ){.    sql
1000: 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62 73 69 7a  ite3_max_blobsiz
1010: 65 20 3d 20 70 2d 3e 6e 3b 0a 20 20 7d 0a 7d 0a  e = p->n;.  }.}.
1020: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
1030: 65 20 6e 65 78 74 20 67 6c 6f 62 61 6c 20 76 61  e next global va
1040: 72 69 61 62 6c 65 20 69 73 20 69 6e 63 72 65 6d  riable is increm
1050: 65 6e 74 65 64 20 65 61 63 68 20 74 79 70 65 20  ented each type 
1060: 74 68 65 20 4f 50 5f 46 6f 75 6e 64 20 6f 70 63  the OP_Found opc
1070: 6f 64 65 0a 2a 2a 20 69 73 20 65 78 65 63 75 74  ode.** is execut
1080: 65 64 2e 20 54 68 69 73 20 69 73 20 75 73 65 64  ed. This is used
1090: 20 74 6f 20 74 65 73 74 20 77 68 65 74 68 65 72   to test whether
10a0: 20 6f 72 20 6e 6f 74 20 74 68 65 20 66 6f 72 65   or not the fore
10b0: 69 67 6e 20 6b 65 79 0a 2a 2a 20 6f 70 65 72 61  ign key.** opera
10c0: 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 65 64  tion implemented
10d0: 20 75 73 69 6e 67 20 4f 50 5f 46 6b 49 73 5a 65   using OP_FkIsZe
10e0: 72 6f 20 69 73 20 77 6f 72 6b 69 6e 67 2e 20 54  ro is working. T
10f0: 68 69 73 20 76 61 72 69 61 62 6c 65 0a 2a 2a 20  his variable.** 
1100: 68 61 73 20 6e 6f 20 66 75 6e 63 74 69 6f 6e 20  has no function 
1110: 6f 74 68 65 72 20 74 68 61 6e 20 74 6f 20 68 65  other than to he
1120: 6c 70 20 76 65 72 69 66 79 20 74 68 65 20 63 6f  lp verify the co
1130: 72 72 65 63 74 20 6f 70 65 72 61 74 69 6f 6e 20  rrect operation 
1140: 6f 66 20 74 68 65 0a 2a 2a 20 6c 69 62 72 61 72  of the.** librar
1150: 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  y..*/.#ifdef SQL
1160: 49 54 45 5f 54 45 53 54 0a 69 6e 74 20 73 71 6c  ITE_TEST.int sql
1170: 69 74 65 33 5f 66 6f 75 6e 64 5f 63 6f 75 6e 74  ite3_found_count
1180: 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a   = 0;.#endif../*
1190: 0a 2a 2a 20 54 65 73 74 20 61 20 72 65 67 69 73  .** Test a regis
11a0: 74 65 72 20 74 6f 20 73 65 65 20 69 66 20 69 74  ter to see if it
11b0: 20 65 78 63 65 65 64 73 20 74 68 65 20 63 75 72   exceeds the cur
11c0: 72 65 6e 74 20 6d 61 78 69 6d 75 6d 20 62 6c 6f  rent maximum blo
11d0: 62 20 73 69 7a 65 2e 0a 2a 2a 20 49 66 20 69 74  b size..** If it
11e0: 20 64 6f 65 73 2c 20 72 65 63 6f 72 64 20 74 68   does, record th
11f0: 65 20 6e 65 77 20 6d 61 78 69 6d 75 6d 20 62 6c  e new maximum bl
1200: 6f 62 20 73 69 7a 65 2e 0a 2a 2f 0a 23 69 66 20  ob size..*/.#if 
1210: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54  defined(SQLITE_T
1220: 45 53 54 29 20 26 26 20 21 64 65 66 69 6e 65 64  EST) && !defined
1230: 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49  (SQLITE_OMIT_BUI
1240: 4c 54 49 4e 5f 54 45 53 54 29 0a 23 20 64 65 66  LTIN_TEST).# def
1250: 69 6e 65 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  ine UPDATE_MAX_B
1260: 4c 4f 42 53 49 5a 45 28 50 29 20 20 75 70 64 61  LOBSIZE(P)  upda
1270: 74 65 4d 61 78 42 6c 6f 62 73 69 7a 65 28 50 29  teMaxBlobsize(P)
1280: 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
1290: 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53  UPDATE_MAX_BLOBS
12a0: 49 5a 45 28 50 29 0a 23 65 6e 64 69 66 0a 0a 2f  IZE(P).#endif../
12b0: 2a 0a 2a 2a 20 43 6f 6e 76 65 72 74 20 74 68 65  *.** Convert the
12c0: 20 67 69 76 65 6e 20 72 65 67 69 73 74 65 72 20   given register 
12d0: 69 6e 74 6f 20 61 20 73 74 72 69 6e 67 20 69 66  into a string if
12e0: 20 69 74 20 69 73 6e 27 74 20 6f 6e 65 0a 2a 2a   it isn't one.**
12f0: 20 61 6c 72 65 61 64 79 2e 20 52 65 74 75 72 6e   already. Return
1300: 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 61 20 6d   non-zero if a m
1310: 61 6c 6c 6f 63 28 29 20 66 61 69 6c 73 2e 0a 2a  alloc() fails..*
1320: 2f 0a 23 64 65 66 69 6e 65 20 53 74 72 69 6e 67  /.#define String
1330: 69 66 79 28 50 2c 20 65 6e 63 29 20 5c 0a 20 20  ify(P, enc) \.  
1340: 20 69 66 28 28 28 50 29 2d 3e 66 6c 61 67 73 26   if(((P)->flags&
1350: 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f  (MEM_Str|MEM_Blo
1360: 62 29 29 3d 3d 30 20 26 26 20 73 71 6c 69 74 65  b))==0 && sqlite
1370: 33 56 64 62 65 4d 65 6d 53 74 72 69 6e 67 69 66  3VdbeMemStringif
1380: 79 28 50 2c 65 6e 63 29 29 20 5c 0a 20 20 20 20  y(P,enc)) \.    
1390: 20 7b 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 20   { goto no_mem; 
13a0: 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 65 70 68 65  }../*.** An ephe
13b0: 6d 65 72 61 6c 20 73 74 72 69 6e 67 20 76 61 6c  meral string val
13c0: 75 65 20 28 73 69 67 6e 69 66 69 65 64 20 62 79  ue (signified by
13d0: 20 74 68 65 20 4d 45 4d 5f 45 70 68 65 6d 20 66   the MEM_Ephem f
13e0: 6c 61 67 29 20 63 6f 6e 74 61 69 6e 73 0a 2a 2a  lag) contains.**
13f0: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20   a pointer to a 
1400: 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f  dynamically allo
1410: 63 61 74 65 64 20 73 74 72 69 6e 67 20 77 68 65  cated string whe
1420: 72 65 20 73 6f 6d 65 20 6f 74 68 65 72 20 65 6e  re some other en
1430: 74 69 74 79 0a 2a 2a 20 69 73 20 72 65 73 70 6f  tity.** is respo
1440: 6e 73 69 62 6c 65 20 66 6f 72 20 64 65 61 6c 6c  nsible for deall
1450: 6f 63 61 74 69 6e 67 20 74 68 61 74 20 73 74 72  ocating that str
1460: 69 6e 67 2e 20 20 42 65 63 61 75 73 65 20 74 68  ing.  Because th
1470: 65 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 64 6f  e register.** do
1480: 65 73 20 6e 6f 74 20 63 6f 6e 74 72 6f 6c 20 74  es not control t
1490: 68 65 20 73 74 72 69 6e 67 2c 20 69 74 20 6d 69  he string, it mi
14a0: 67 68 74 20 62 65 20 64 65 6c 65 74 65 64 20 77  ght be deleted w
14b0: 69 74 68 6f 75 74 20 74 68 65 20 72 65 67 69 73  ithout the regis
14c0: 74 65 72 0a 2a 2a 20 6b 6e 6f 77 69 6e 67 20 69  ter.** knowing i
14d0: 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 72 6f  t..**.** This ro
14e0: 75 74 69 6e 65 20 63 6f 6e 76 65 72 74 73 20 61  utine converts a
14f0: 6e 20 65 70 68 65 6d 65 72 61 6c 20 73 74 72 69  n ephemeral stri
1500: 6e 67 20 69 6e 74 6f 20 61 20 64 79 6e 61 6d 69  ng into a dynami
1510: 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 0a  cally allocated.
1520: 2a 2a 20 73 74 72 69 6e 67 20 74 68 61 74 20 74  ** string that t
1530: 68 65 20 72 65 67 69 73 74 65 72 20 69 74 73 65  he register itse
1540: 6c 66 20 63 6f 6e 74 72 6f 6c 73 2e 20 20 49 6e  lf controls.  In
1550: 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 69 74   other words, it
1560: 0a 2a 2a 20 63 6f 6e 76 65 72 74 73 20 61 6e 20  .** converts an 
1570: 4d 45 4d 5f 45 70 68 65 6d 20 73 74 72 69 6e 67  MEM_Ephem string
1580: 20 69 6e 74 6f 20 61 6e 20 4d 45 4d 5f 44 79 6e   into an MEM_Dyn
1590: 20 73 74 72 69 6e 67 2e 0a 2a 2f 0a 23 64 65 66   string..*/.#def
15a0: 69 6e 65 20 44 65 65 70 68 65 6d 65 72 61 6c 69  ine Deephemerali
15b0: 7a 65 28 50 29 20 5c 0a 20 20 20 69 66 28 20 28  ze(P) \.   if( (
15c0: 28 50 29 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 45  (P)->flags&MEM_E
15d0: 70 68 65 6d 29 21 3d 30 20 5c 0a 20 20 20 20 20  phem)!=0 \.     
15e0: 20 20 26 26 20 73 71 6c 69 74 65 33 56 64 62 65    && sqlite3Vdbe
15f0: 4d 65 6d 4d 61 6b 65 57 72 69 74 65 61 62 6c 65  MemMakeWriteable
1600: 28 50 29 20 29 7b 20 67 6f 74 6f 20 6e 6f 5f 6d  (P) ){ goto no_m
1610: 65 6d 3b 7d 0a 0a 2f 2a 0a 2a 2a 20 43 61 6c 6c  em;}../*.** Call
1620: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 45   sqlite3VdbeMemE
1630: 78 70 61 6e 64 42 6c 6f 62 28 29 20 6f 6e 20 74  xpandBlob() on t
1640: 68 65 20 73 75 70 70 6c 69 65 64 20 76 61 6c 75  he supplied valu
1650: 65 20 28 74 79 70 65 20 4d 65 6d 2a 29 0a 2a 2a  e (type Mem*).**
1660: 20 50 20 69 66 20 72 65 71 75 69 72 65 64 2e 0a   P if required..
1670: 2a 2f 0a 23 64 65 66 69 6e 65 20 45 78 70 61 6e  */.#define Expan
1680: 64 42 6c 6f 62 28 50 29 20 28 28 28 50 29 2d 3e  dBlob(P) (((P)->
1690: 66 6c 61 67 73 26 4d 45 4d 5f 5a 65 72 6f 29 3f  flags&MEM_Zero)?
16a0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 45 78  sqlite3VdbeMemEx
16b0: 70 61 6e 64 42 6c 6f 62 28 50 29 3a 30 29 0a 0a  pandBlob(P):0)..
16c0: 2f 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20 69  /* Return true i
16d0: 66 20 74 68 65 20 63 75 72 73 6f 72 20 77 61 73  f the cursor was
16e0: 20 6f 70 65 6e 65 64 20 75 73 69 6e 67 20 74 68   opened using th
16f0: 65 20 4f 50 5f 4f 70 65 6e 53 6f 72 74 65 72 20  e OP_OpenSorter 
1700: 6f 70 63 6f 64 65 2e 20 2a 2f 0a 23 69 66 64 65  opcode. */.#ifde
1710: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 4d 45  f SQLITE_OMIT_ME
1720: 52 47 45 5f 53 4f 52 54 0a 23 20 64 65 66 69 6e  RGE_SORT.# defin
1730: 65 20 69 73 53 6f 72 74 65 72 28 78 29 20 30 0a  e isSorter(x) 0.
1740: 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 69  #else.# define i
1750: 73 53 6f 72 74 65 72 28 78 29 20 28 28 78 29 2d  sSorter(x) ((x)-
1760: 3e 70 53 6f 72 74 65 72 21 3d 30 29 0a 23 65 6e  >pSorter!=0).#en
1770: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 72 67 75 6d  dif../*.** Argum
1780: 65 6e 74 20 70 4d 65 6d 20 70 6f 69 6e 74 73 20  ent pMem points 
1790: 61 74 20 61 20 72 65 67 69 73 74 65 72 20 74 68  at a register th
17a0: 61 74 20 77 69 6c 6c 20 62 65 20 70 61 73 73 65  at will be passe
17b0: 64 20 74 6f 20 61 0a 2a 2a 20 75 73 65 72 2d 64  d to a.** user-d
17c0: 65 66 69 6e 65 64 20 66 75 6e 63 74 69 6f 6e 20  efined function 
17d0: 6f 72 20 72 65 74 75 72 6e 65 64 20 74 6f 20 74  or returned to t
17e0: 68 65 20 75 73 65 72 20 61 73 20 74 68 65 20 72  he user as the r
17f0: 65 73 75 6c 74 20 6f 66 20 61 20 71 75 65 72 79  esult of a query
1800: 2e 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e  ..** This routin
1810: 65 20 73 65 74 73 20 74 68 65 20 70 4d 65 6d 2d  e sets the pMem-
1820: 3e 74 79 70 65 20 76 61 72 69 61 62 6c 65 20 75  >type variable u
1830: 73 65 64 20 62 79 20 74 68 65 20 73 71 6c 69 74  sed by the sqlit
1840: 65 33 5f 76 61 6c 75 65 5f 2a 28 29 20 0a 2a 2a  e3_value_*() .**
1850: 20 72 6f 75 74 69 6e 65 73 2e 0a 2a 2f 0a 76 6f   routines..*/.vo
1860: 69 64 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  id sqlite3VdbeMe
1870: 6d 53 74 6f 72 65 54 79 70 65 28 4d 65 6d 20 2a  mStoreType(Mem *
1880: 70 4d 65 6d 29 7b 0a 20 20 69 6e 74 20 66 6c 61  pMem){.  int fla
1890: 67 73 20 3d 20 70 4d 65 6d 2d 3e 66 6c 61 67 73  gs = pMem->flags
18a0: 3b 0a 20 20 69 66 28 20 66 6c 61 67 73 20 26 20  ;.  if( flags & 
18b0: 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20  MEM_Null ){.    
18c0: 70 4d 65 6d 2d 3e 74 79 70 65 20 3d 20 53 51 4c  pMem->type = SQL
18d0: 49 54 45 5f 4e 55 4c 4c 3b 0a 20 20 7d 0a 20 20  ITE_NULL;.  }.  
18e0: 65 6c 73 65 20 69 66 28 20 66 6c 61 67 73 20 26  else if( flags &
18f0: 20 4d 45 4d 5f 49 6e 74 20 29 7b 0a 20 20 20 20   MEM_Int ){.    
1900: 70 4d 65 6d 2d 3e 74 79 70 65 20 3d 20 53 51 4c  pMem->type = SQL
1910: 49 54 45 5f 49 4e 54 45 47 45 52 3b 0a 20 20 7d  ITE_INTEGER;.  }
1920: 0a 20 20 65 6c 73 65 20 69 66 28 20 66 6c 61 67  .  else if( flag
1930: 73 20 26 20 4d 45 4d 5f 52 65 61 6c 20 29 7b 0a  s & MEM_Real ){.
1940: 20 20 20 20 70 4d 65 6d 2d 3e 74 79 70 65 20 3d      pMem->type =
1950: 20 53 51 4c 49 54 45 5f 46 4c 4f 41 54 3b 0a 20   SQLITE_FLOAT;. 
1960: 20 7d 0a 20 20 65 6c 73 65 20 69 66 28 20 66 6c   }.  else if( fl
1970: 61 67 73 20 26 20 4d 45 4d 5f 53 74 72 20 29 7b  ags & MEM_Str ){
1980: 0a 20 20 20 20 70 4d 65 6d 2d 3e 74 79 70 65 20  .    pMem->type 
1990: 3d 20 53 51 4c 49 54 45 5f 54 45 58 54 3b 0a 20  = SQLITE_TEXT;. 
19a0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 4d 65 6d   }else{.    pMem
19b0: 2d 3e 74 79 70 65 20 3d 20 53 51 4c 49 54 45 5f  ->type = SQLITE_
19c0: 42 4c 4f 42 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a  BLOB;.  }.}../*.
19d0: 2a 2a 20 41 6c 6c 6f 63 61 74 65 20 56 64 62 65  ** Allocate Vdbe
19e0: 43 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 69 43  Cursor number iC
19f0: 75 72 2e 20 20 52 65 74 75 72 6e 20 61 20 70 6f  ur.  Return a po
1a00: 69 6e 74 65 72 20 74 6f 20 69 74 2e 20 20 52 65  inter to it.  Re
1a10: 74 75 72 6e 20 4e 55 4c 4c 0a 2a 2a 20 69 66 20  turn NULL.** if 
1a20: 77 65 20 72 75 6e 20 6f 75 74 20 6f 66 20 6d 65  we run out of me
1a30: 6d 6f 72 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  mory..*/.static 
1a40: 56 64 62 65 43 75 72 73 6f 72 20 2a 61 6c 6c 6f  VdbeCursor *allo
1a50: 63 61 74 65 43 75 72 73 6f 72 28 0a 20 20 56 64  cateCursor(.  Vd
1a60: 62 65 20 2a 70 2c 20 20 20 20 20 20 20 20 20 20  be *p,          
1a70: 20 20 20 20 2f 2a 20 54 68 65 20 76 69 72 74 75      /* The virtu
1a80: 61 6c 20 6d 61 63 68 69 6e 65 20 2a 2f 0a 20 20  al machine */.  
1a90: 69 6e 74 20 69 43 75 72 2c 20 20 20 20 20 20 20  int iCur,       
1aa0: 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 6f        /* Index o
1ab0: 66 20 74 68 65 20 6e 65 77 20 56 64 62 65 43 75  f the new VdbeCu
1ac0: 72 73 6f 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 46  rsor */.  int nF
1ad0: 69 65 6c 64 2c 20 20 20 20 20 20 20 20 20 20 20  ield,           
1ae0: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 66 69 65  /* Number of fie
1af0: 6c 64 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65  lds in the table
1b00: 20 6f 72 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69   or index */.  i
1b10: 6e 74 20 69 44 62 2c 20 20 20 20 20 20 20 20 20  nt iDb,         
1b20: 20 20 20 20 20 2f 2a 20 57 68 65 6e 20 64 61 74       /* When dat
1b30: 61 62 61 73 65 20 74 68 65 20 63 75 72 73 6f 72  abase the cursor
1b40: 20 62 65 6c 6f 6e 67 73 20 74 6f 2c 20 6f 72 20   belongs to, or 
1b50: 2d 31 20 2a 2f 0a 20 20 69 6e 74 20 69 73 42 74  -1 */.  int isBt
1b60: 72 65 65 43 75 72 73 6f 72 20 20 20 20 20 2f 2a  reeCursor     /*
1b70: 20 54 72 75 65 20 66 6f 72 20 42 2d 54 72 65 65   True for B-Tree
1b80: 2e 20 20 46 61 6c 73 65 20 66 6f 72 20 70 73 65  .  False for pse
1b90: 75 64 6f 2d 74 61 62 6c 65 20 6f 72 20 76 74 61  udo-table or vta
1ba0: 62 20 2a 2f 0a 29 7b 0a 20 20 2f 2a 20 46 69 6e  b */.){.  /* Fin
1bb0: 64 20 74 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c  d the memory cel
1bc0: 6c 20 74 68 61 74 20 77 69 6c 6c 20 62 65 20 75  l that will be u
1bd0: 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65  sed to store the
1be0: 20 62 6c 6f 62 20 6f 66 20 6d 65 6d 6f 72 79 0a   blob of memory.
1bf0: 20 20 2a 2a 20 72 65 71 75 69 72 65 64 20 66 6f    ** required fo
1c00: 72 20 74 68 69 73 20 56 64 62 65 43 75 72 73 6f  r this VdbeCurso
1c10: 72 20 73 74 72 75 63 74 75 72 65 2e 20 49 74 20  r structure. It 
1c20: 69 73 20 63 6f 6e 76 65 6e 69 65 6e 74 20 74 6f  is convenient to
1c30: 20 75 73 65 20 61 20 0a 20 20 2a 2a 20 76 64 62   use a .  ** vdb
1c40: 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74 6f  e memory cell to
1c50: 20 6d 61 6e 61 67 65 20 74 68 65 20 6d 65 6d 6f   manage the memo
1c60: 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 72 65  ry allocation re
1c70: 71 75 69 72 65 64 20 66 6f 72 20 61 0a 20 20 2a  quired for a.  *
1c80: 2a 20 56 64 62 65 43 75 72 73 6f 72 20 73 74 72  * VdbeCursor str
1c90: 75 63 74 75 72 65 20 66 6f 72 20 74 68 65 20 66  ucture for the f
1ca0: 6f 6c 6c 6f 77 69 6e 67 20 72 65 61 73 6f 6e 73  ollowing reasons
1cb0: 3a 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 20 2a 20  :.  **.  **   * 
1cc0: 53 6f 6d 65 74 69 6d 65 73 20 63 75 72 73 6f 72  Sometimes cursor
1cd0: 20 6e 75 6d 62 65 72 73 20 61 72 65 20 75 73 65   numbers are use
1ce0: 64 20 66 6f 72 20 61 20 63 6f 75 70 6c 65 20 6f  d for a couple o
1cf0: 66 20 64 69 66 66 65 72 65 6e 74 0a 20 20 2a 2a  f different.  **
1d00: 20 20 20 20 20 70 75 72 70 6f 73 65 73 20 69 6e       purposes in
1d10: 20 61 20 76 64 62 65 20 70 72 6f 67 72 61 6d 2e   a vdbe program.
1d20: 20 54 68 65 20 64 69 66 66 65 72 65 6e 74 20 75   The different u
1d30: 73 65 73 20 6d 69 67 68 74 20 72 65 71 75 69 72  ses might requir
1d40: 65 0a 20 20 2a 2a 20 20 20 20 20 64 69 66 66 65  e.  **     diffe
1d50: 72 65 6e 74 20 73 69 7a 65 64 20 61 6c 6c 6f 63  rent sized alloc
1d60: 61 74 69 6f 6e 73 2e 20 4d 65 6d 6f 72 79 20 63  ations. Memory c
1d70: 65 6c 6c 73 20 70 72 6f 76 69 64 65 20 67 72 6f  ells provide gro
1d80: 77 61 62 6c 65 0a 20 20 2a 2a 20 20 20 20 20 61  wable.  **     a
1d90: 6c 6c 6f 63 61 74 69 6f 6e 73 2e 0a 20 20 2a 2a  llocations..  **
1da0: 0a 20 20 2a 2a 20 20 20 2a 20 57 68 65 6e 20 75  .  **   * When u
1db0: 73 69 6e 67 20 45 4e 41 42 4c 45 5f 4d 45 4d 4f  sing ENABLE_MEMO
1dc0: 52 59 5f 4d 41 4e 41 47 45 4d 45 4e 54 2c 20 6d  RY_MANAGEMENT, m
1dd0: 65 6d 6f 72 79 20 63 65 6c 6c 20 62 75 66 66 65  emory cell buffe
1de0: 72 73 20 63 61 6e 0a 20 20 2a 2a 20 20 20 20 20  rs can.  **     
1df0: 62 65 20 66 72 65 65 64 20 6c 61 7a 69 6c 79 20  be freed lazily 
1e00: 76 69 61 20 74 68 65 20 73 71 6c 69 74 65 33 5f  via the sqlite3_
1e10: 72 65 6c 65 61 73 65 5f 6d 65 6d 6f 72 79 28 29  release_memory()
1e20: 20 41 50 49 2e 20 54 68 69 73 0a 20 20 2a 2a 20   API. This.  ** 
1e30: 20 20 20 20 6d 69 6e 69 6d 69 7a 65 73 20 74 68      minimizes th
1e40: 65 20 6e 75 6d 62 65 72 20 6f 66 20 6d 61 6c 6c  e number of mall
1e50: 6f 63 20 63 61 6c 6c 73 20 6d 61 64 65 20 62 79  oc calls made by
1e60: 20 74 68 65 20 73 79 73 74 65 6d 2e 0a 20 20 2a   the system..  *
1e70: 2a 0a 20 20 2a 2a 20 4d 65 6d 6f 72 79 20 63 65  *.  ** Memory ce
1e80: 6c 6c 73 20 66 6f 72 20 63 75 72 73 6f 72 73 20  lls for cursors 
1e90: 61 72 65 20 61 6c 6c 6f 63 61 74 65 64 20 61 74  are allocated at
1ea0: 20 74 68 65 20 74 6f 70 20 6f 66 20 74 68 65 20   the top of the 
1eb0: 61 64 64 72 65 73 73 0a 20 20 2a 2a 20 73 70 61  address.  ** spa
1ec0: 63 65 2e 20 4d 65 6d 6f 72 79 20 63 65 6c 6c 20  ce. Memory cell 
1ed0: 28 70 2d 3e 6e 4d 65 6d 29 20 63 6f 72 72 65 73  (p->nMem) corres
1ee0: 70 6f 6e 64 73 20 74 6f 20 63 75 72 73 6f 72 20  ponds to cursor 
1ef0: 30 2e 20 53 70 61 63 65 20 66 6f 72 0a 20 20 2a  0. Space for.  *
1f00: 2a 20 63 75 72 73 6f 72 20 31 20 69 73 20 6d 61  * cursor 1 is ma
1f10: 6e 61 67 65 64 20 62 79 20 6d 65 6d 6f 72 79 20  naged by memory 
1f20: 63 65 6c 6c 20 28 70 2d 3e 6e 4d 65 6d 2d 31 29  cell (p->nMem-1)
1f30: 2c 20 65 74 63 2e 0a 20 20 2a 2f 0a 20 20 4d 65  , etc..  */.  Me
1f40: 6d 20 2a 70 4d 65 6d 20 3d 20 26 70 2d 3e 61 4d  m *pMem = &p->aM
1f50: 65 6d 5b 70 2d 3e 6e 4d 65 6d 2d 69 43 75 72 5d  em[p->nMem-iCur]
1f60: 3b 0a 0a 20 20 69 6e 74 20 6e 42 79 74 65 3b 0a  ;..  int nByte;.
1f70: 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
1f80: 78 20 3d 20 30 3b 0a 20 20 6e 42 79 74 65 20 3d  x = 0;.  nByte =
1f90: 20 0a 20 20 20 20 20 20 52 4f 55 4e 44 38 28 73   .      ROUND8(s
1fa0: 69 7a 65 6f 66 28 56 64 62 65 43 75 72 73 6f 72  izeof(VdbeCursor
1fb0: 29 29 20 2b 20 0a 20 20 20 20 20 20 28 69 73 42  )) + .      (isB
1fc0: 74 72 65 65 43 75 72 73 6f 72 3f 73 71 6c 69 74  treeCursor?sqlit
1fd0: 65 33 42 74 72 65 65 43 75 72 73 6f 72 53 69 7a  e3BtreeCursorSiz
1fe0: 65 28 29 3a 30 29 20 2b 20 0a 20 20 20 20 20 20  e():0) + .      
1ff0: 32 2a 6e 46 69 65 6c 64 2a 73 69 7a 65 6f 66 28  2*nField*sizeof(
2000: 75 33 32 29 3b 0a 0a 20 20 61 73 73 65 72 74 28  u32);..  assert(
2010: 20 69 43 75 72 3c 70 2d 3e 6e 43 75 72 73 6f 72   iCur<p->nCursor
2020: 20 29 3b 0a 20 20 69 66 28 20 70 2d 3e 61 70 43   );.  if( p->apC
2030: 73 72 5b 69 43 75 72 5d 20 29 7b 0a 20 20 20 20  sr[iCur] ){.    
2040: 73 71 6c 69 74 65 33 56 64 62 65 46 72 65 65 43  sqlite3VdbeFreeC
2050: 75 72 73 6f 72 28 70 2c 20 70 2d 3e 61 70 43 73  ursor(p, p->apCs
2060: 72 5b 69 43 75 72 5d 29 3b 0a 20 20 20 20 70 2d  r[iCur]);.    p-
2070: 3e 61 70 43 73 72 5b 69 43 75 72 5d 20 3d 20 30  >apCsr[iCur] = 0
2080: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 53 51 4c 49  ;.  }.  if( SQLI
2090: 54 45 5f 4f 4b 3d 3d 73 71 6c 69 74 65 33 56 64  TE_OK==sqlite3Vd
20a0: 62 65 4d 65 6d 47 72 6f 77 28 70 4d 65 6d 2c 20  beMemGrow(pMem, 
20b0: 6e 42 79 74 65 2c 20 30 29 20 29 7b 0a 20 20 20  nByte, 0) ){.   
20c0: 20 70 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 20   p->apCsr[iCur] 
20d0: 3d 20 70 43 78 20 3d 20 28 56 64 62 65 43 75 72  = pCx = (VdbeCur
20e0: 73 6f 72 2a 29 70 4d 65 6d 2d 3e 7a 3b 0a 20 20  sor*)pMem->z;.  
20f0: 20 20 6d 65 6d 73 65 74 28 70 43 78 2c 20 30 2c    memset(pCx, 0,
2100: 20 73 69 7a 65 6f 66 28 56 64 62 65 43 75 72 73   sizeof(VdbeCurs
2110: 6f 72 29 29 3b 0a 20 20 20 20 70 43 78 2d 3e 69  or));.    pCx->i
2120: 44 62 20 3d 20 69 44 62 3b 0a 20 20 20 20 70 43  Db = iDb;.    pC
2130: 78 2d 3e 6e 46 69 65 6c 64 20 3d 20 6e 46 69 65  x->nField = nFie
2140: 6c 64 3b 0a 20 20 20 20 69 66 28 20 6e 46 69 65  ld;.    if( nFie
2150: 6c 64 20 29 7b 0a 20 20 20 20 20 20 70 43 78 2d  ld ){.      pCx-
2160: 3e 61 54 79 70 65 20 3d 20 28 75 33 32 20 2a 29  >aType = (u32 *)
2170: 26 70 4d 65 6d 2d 3e 7a 5b 52 4f 55 4e 44 38 28  &pMem->z[ROUND8(
2180: 73 69 7a 65 6f 66 28 56 64 62 65 43 75 72 73 6f  sizeof(VdbeCurso
2190: 72 29 29 5d 3b 0a 20 20 20 20 7d 0a 20 20 20 20  r))];.    }.    
21a0: 69 66 28 20 69 73 42 74 72 65 65 43 75 72 73 6f  if( isBtreeCurso
21b0: 72 20 29 7b 0a 20 20 20 20 20 20 70 43 78 2d 3e  r ){.      pCx->
21c0: 70 43 75 72 73 6f 72 20 3d 20 28 42 74 43 75 72  pCursor = (BtCur
21d0: 73 6f 72 2a 29 0a 20 20 20 20 20 20 20 20 20 20  sor*).          
21e0: 26 70 4d 65 6d 2d 3e 7a 5b 52 4f 55 4e 44 38 28  &pMem->z[ROUND8(
21f0: 73 69 7a 65 6f 66 28 56 64 62 65 43 75 72 73 6f  sizeof(VdbeCurso
2200: 72 29 29 2b 32 2a 6e 46 69 65 6c 64 2a 73 69 7a  r))+2*nField*siz
2210: 65 6f 66 28 75 33 32 29 5d 3b 0a 20 20 20 20 20  eof(u32)];.     
2220: 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72   sqlite3BtreeCur
2230: 73 6f 72 5a 65 72 6f 28 70 43 78 2d 3e 70 43 75  sorZero(pCx->pCu
2240: 72 73 6f 72 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  rsor);.    }.  }
2250: 0a 20 20 72 65 74 75 72 6e 20 70 43 78 3b 0a 7d  .  return pCx;.}
2260: 0a 0a 2f 2a 0a 2a 2a 20 54 72 79 20 74 6f 20 63  ../*.** Try to c
2270: 6f 6e 76 65 72 74 20 61 20 76 61 6c 75 65 20 69  onvert a value i
2280: 6e 74 6f 20 61 20 6e 75 6d 65 72 69 63 20 72 65  nto a numeric re
2290: 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 69 66 20  presentation if 
22a0: 77 65 20 63 61 6e 0a 2a 2a 20 64 6f 20 73 6f 20  we can.** do so 
22b0: 77 69 74 68 6f 75 74 20 6c 6f 73 73 20 6f 66 20  without loss of 
22c0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 20 20 49 6e  information.  In
22d0: 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 69 66   other words, if
22e0: 20 74 68 65 20 73 74 72 69 6e 67 0a 2a 2a 20 6c   the string.** l
22f0: 6f 6f 6b 73 20 6c 69 6b 65 20 61 20 6e 75 6d 62  ooks like a numb
2300: 65 72 2c 20 63 6f 6e 76 65 72 74 20 69 74 20 69  er, convert it i
2310: 6e 74 6f 20 61 20 6e 75 6d 62 65 72 2e 20 20 49  nto a number.  I
2320: 66 20 69 74 20 64 6f 65 73 20 6e 6f 74 0a 2a 2a  f it does not.**
2330: 20 6c 6f 6f 6b 20 6c 69 6b 65 20 61 20 6e 75 6d   look like a num
2340: 62 65 72 2c 20 6c 65 61 76 65 20 69 74 20 61 6c  ber, leave it al
2350: 6f 6e 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76  one..*/.static v
2360: 6f 69 64 20 61 70 70 6c 79 4e 75 6d 65 72 69 63  oid applyNumeric
2370: 41 66 66 69 6e 69 74 79 28 4d 65 6d 20 2a 70 52  Affinity(Mem *pR
2380: 65 63 29 7b 0a 20 20 69 66 28 20 28 70 52 65 63  ec){.  if( (pRec
2390: 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 52  ->flags & (MEM_R
23a0: 65 61 6c 7c 4d 45 4d 5f 49 6e 74 29 29 3d 3d 30  eal|MEM_Int))==0
23b0: 20 29 7b 0a 20 20 20 20 64 6f 75 62 6c 65 20 72   ){.    double r
23c0: 56 61 6c 75 65 3b 0a 20 20 20 20 69 36 34 20 69  Value;.    i64 i
23d0: 56 61 6c 75 65 3b 0a 20 20 20 20 75 38 20 65 6e  Value;.    u8 en
23e0: 63 20 3d 20 70 52 65 63 2d 3e 65 6e 63 3b 0a 20  c = pRec->enc;. 
23f0: 20 20 20 69 66 28 20 28 70 52 65 63 2d 3e 66 6c     if( (pRec->fl
2400: 61 67 73 26 4d 45 4d 5f 53 74 72 29 3d 3d 30 20  ags&MEM_Str)==0 
2410: 29 20 72 65 74 75 72 6e 3b 0a 20 20 20 20 69 66  ) return;.    if
2420: 28 20 73 71 6c 69 74 65 33 41 74 6f 46 28 70 52  ( sqlite3AtoF(pR
2430: 65 63 2d 3e 7a 2c 20 26 72 56 61 6c 75 65 2c 20  ec->z, &rValue, 
2440: 70 52 65 63 2d 3e 6e 2c 20 65 6e 63 29 3d 3d 30  pRec->n, enc)==0
2450: 20 29 20 72 65 74 75 72 6e 3b 0a 20 20 20 20 69   ) return;.    i
2460: 66 28 20 30 3d 3d 73 71 6c 69 74 65 33 41 74 6f  f( 0==sqlite3Ato
2470: 69 36 34 28 70 52 65 63 2d 3e 7a 2c 20 26 69 56  i64(pRec->z, &iV
2480: 61 6c 75 65 2c 20 70 52 65 63 2d 3e 6e 2c 20 65  alue, pRec->n, e
2490: 6e 63 29 20 29 7b 0a 20 20 20 20 20 20 70 52 65  nc) ){.      pRe
24a0: 63 2d 3e 75 2e 69 20 3d 20 69 56 61 6c 75 65 3b  c->u.i = iValue;
24b0: 0a 20 20 20 20 20 20 70 52 65 63 2d 3e 66 6c 61  .      pRec->fla
24c0: 67 73 20 7c 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20  gs |= MEM_Int;. 
24d0: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
24e0: 70 52 65 63 2d 3e 72 20 3d 20 72 56 61 6c 75 65  pRec->r = rValue
24f0: 3b 0a 20 20 20 20 20 20 70 52 65 63 2d 3e 66 6c  ;.      pRec->fl
2500: 61 67 73 20 7c 3d 20 4d 45 4d 5f 52 65 61 6c 3b  ags |= MEM_Real;
2510: 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a 0a 2f 2a  .    }.  }.}../*
2520: 0a 2a 2a 20 50 72 6f 63 65 73 73 69 6e 67 20 69  .** Processing i
2530: 73 20 64 65 74 65 72 6d 69 6e 65 20 62 79 20 74  s determine by t
2540: 68 65 20 61 66 66 69 6e 69 74 79 20 70 61 72 61  he affinity para
2550: 6d 65 74 65 72 3a 0a 2a 2a 0a 2a 2a 20 53 51 4c  meter:.**.** SQL
2560: 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 3a  ITE_AFF_INTEGER:
2570: 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 52  .** SQLITE_AFF_R
2580: 45 41 4c 3a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41  EAL:.** SQLITE_A
2590: 46 46 5f 4e 55 4d 45 52 49 43 3a 0a 2a 2a 20 20  FF_NUMERIC:.**  
25a0: 20 20 54 72 79 20 74 6f 20 63 6f 6e 76 65 72 74    Try to convert
25b0: 20 70 52 65 63 20 74 6f 20 61 6e 20 69 6e 74 65   pRec to an inte
25c0: 67 65 72 20 72 65 70 72 65 73 65 6e 74 61 74 69  ger representati
25d0: 6f 6e 20 6f 72 20 61 20 0a 2a 2a 20 20 20 20 66  on or a .**    f
25e0: 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e 74 20 72 65  loating-point re
25f0: 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 69 66 20  presentation if 
2600: 61 6e 20 69 6e 74 65 67 65 72 20 72 65 70 72 65  an integer repre
2610: 73 65 6e 74 61 74 69 6f 6e 0a 2a 2a 20 20 20 20  sentation.**    
2620: 69 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65 2e  is not possible.
2630: 20 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20    Note that the 
2640: 69 6e 74 65 67 65 72 20 72 65 70 72 65 73 65 6e  integer represen
2650: 74 61 74 69 6f 6e 20 69 73 0a 2a 2a 20 20 20 20  tation is.**    
2660: 61 6c 77 61 79 73 20 70 72 65 66 65 72 72 65 64  always preferred
2670: 2c 20 65 76 65 6e 20 69 66 20 74 68 65 20 61 66  , even if the af
2680: 66 69 6e 69 74 79 20 69 73 20 52 45 41 4c 2c 20  finity is REAL, 
2690: 62 65 63 61 75 73 65 0a 2a 2a 20 20 20 20 61 6e  because.**    an
26a0: 20 69 6e 74 65 67 65 72 20 72 65 70 72 65 73 65   integer represe
26b0: 6e 74 61 74 69 6f 6e 20 69 73 20 6d 6f 72 65 20  ntation is more 
26c0: 73 70 61 63 65 20 65 66 66 69 63 69 65 6e 74 20  space efficient 
26d0: 6f 6e 20 64 69 73 6b 2e 0a 2a 2a 0a 2a 2a 20 53  on disk..**.** S
26e0: 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 3a 0a  QLITE_AFF_TEXT:.
26f0: 2a 2a 20 20 20 20 43 6f 6e 76 65 72 74 20 70 52  **    Convert pR
2700: 65 63 20 74 6f 20 61 20 74 65 78 74 20 72 65 70  ec to a text rep
2710: 72 65 73 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a 0a  resentation..**.
2720: 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 4f  ** SQLITE_AFF_NO
2730: 4e 45 3a 0a 2a 2a 20 20 20 20 4e 6f 2d 6f 70 2e  NE:.**    No-op.
2740: 20 20 70 52 65 63 20 69 73 20 75 6e 63 68 61 6e    pRec is unchan
2750: 67 65 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76  ged..*/.static v
2760: 6f 69 64 20 61 70 70 6c 79 41 66 66 69 6e 69 74  oid applyAffinit
2770: 79 28 0a 20 20 4d 65 6d 20 2a 70 52 65 63 2c 20  y(.  Mem *pRec, 
2780: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
2790: 76 61 6c 75 65 20 74 6f 20 61 70 70 6c 79 20 61  value to apply a
27a0: 66 66 69 6e 69 74 79 20 74 6f 20 2a 2f 0a 20 20  ffinity to */.  
27b0: 63 68 61 72 20 61 66 66 69 6e 69 74 79 2c 20 20  char affinity,  
27c0: 20 20 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e      /* The affin
27d0: 69 74 79 20 74 6f 20 62 65 20 61 70 70 6c 69 65  ity to be applie
27e0: 64 20 2a 2f 0a 20 20 75 38 20 65 6e 63 20 20 20  d */.  u8 enc   
27f0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73             /* Us
2800: 65 20 74 68 69 73 20 74 65 78 74 20 65 6e 63 6f  e this text enco
2810: 64 69 6e 67 20 2a 2f 0a 29 7b 0a 20 20 69 66 28  ding */.){.  if(
2820: 20 61 66 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54   affinity==SQLIT
2830: 45 5f 41 46 46 5f 54 45 58 54 20 29 7b 0a 20 20  E_AFF_TEXT ){.  
2840: 20 20 2f 2a 20 4f 6e 6c 79 20 61 74 74 65 6d 70    /* Only attemp
2850: 74 20 74 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e  t the conversion
2860: 20 74 6f 20 54 45 58 54 20 69 66 20 74 68 65 72   to TEXT if ther
2870: 65 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20  e is an integer 
2880: 6f 72 20 72 65 61 6c 0a 20 20 20 20 2a 2a 20 72  or real.    ** r
2890: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 28 62  epresentation (b
28a0: 6c 6f 62 20 61 6e 64 20 4e 55 4c 4c 20 64 6f 20  lob and NULL do 
28b0: 6e 6f 74 20 67 65 74 20 63 6f 6e 76 65 72 74 65  not get converte
28c0: 64 29 20 62 75 74 20 6e 6f 20 73 74 72 69 6e 67  d) but no string
28d0: 0a 20 20 20 20 2a 2a 20 72 65 70 72 65 73 65 6e  .    ** represen
28e0: 74 61 74 69 6f 6e 2e 0a 20 20 20 20 2a 2f 0a 20  tation..    */. 
28f0: 20 20 20 69 66 28 20 30 3d 3d 28 70 52 65 63 2d     if( 0==(pRec-
2900: 3e 66 6c 61 67 73 26 4d 45 4d 5f 53 74 72 29 20  >flags&MEM_Str) 
2910: 26 26 20 28 70 52 65 63 2d 3e 66 6c 61 67 73 26  && (pRec->flags&
2920: 28 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 49 6e  (MEM_Real|MEM_In
2930: 74 29 29 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  t)) ){.      sql
2940: 69 74 65 33 56 64 62 65 4d 65 6d 53 74 72 69 6e  ite3VdbeMemStrin
2950: 67 69 66 79 28 70 52 65 63 2c 20 65 6e 63 29 3b  gify(pRec, enc);
2960: 0a 20 20 20 20 7d 0a 20 20 20 20 70 52 65 63 2d  .    }.    pRec-
2970: 3e 66 6c 61 67 73 20 26 3d 20 7e 28 4d 45 4d 5f  >flags &= ~(MEM_
2980: 52 65 61 6c 7c 4d 45 4d 5f 49 6e 74 29 3b 0a 20  Real|MEM_Int);. 
2990: 20 7d 65 6c 73 65 20 69 66 28 20 61 66 66 69 6e   }else if( affin
29a0: 69 74 79 21 3d 53 51 4c 49 54 45 5f 41 46 46 5f  ity!=SQLITE_AFF_
29b0: 4e 4f 4e 45 20 29 7b 0a 20 20 20 20 61 73 73 65  NONE ){.    asse
29c0: 72 74 28 20 61 66 66 69 6e 69 74 79 3d 3d 53 51  rt( affinity==SQ
29d0: 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52  LITE_AFF_INTEGER
29e0: 20 7c 7c 20 61 66 66 69 6e 69 74 79 3d 3d 53 51   || affinity==SQ
29f0: 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c 0a 20 20  LITE_AFF_REAL.  
2a00: 20 20 20 20 20 20 20 20 20 20 20 7c 7c 20 61 66             || af
2a10: 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41  finity==SQLITE_A
2a20: 46 46 5f 4e 55 4d 45 52 49 43 20 29 3b 0a 20 20  FF_NUMERIC );.  
2a30: 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66    applyNumericAf
2a40: 66 69 6e 69 74 79 28 70 52 65 63 29 3b 0a 20 20  finity(pRec);.  
2a50: 20 20 69 66 28 20 70 52 65 63 2d 3e 66 6c 61 67    if( pRec->flag
2a60: 73 20 26 20 4d 45 4d 5f 52 65 61 6c 20 29 7b 0a  s & MEM_Real ){.
2a70: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
2a80: 65 49 6e 74 65 67 65 72 41 66 66 69 6e 69 74 79  eIntegerAffinity
2a90: 28 70 52 65 63 29 3b 0a 20 20 20 20 7d 0a 20 20  (pRec);.    }.  
2aa0: 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 72 79 20 74  }.}../*.** Try t
2ab0: 6f 20 63 6f 6e 76 65 72 74 20 74 68 65 20 74 79  o convert the ty
2ac0: 70 65 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e  pe of a function
2ad0: 20 61 72 67 75 6d 65 6e 74 20 6f 72 20 61 20 72   argument or a r
2ae0: 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 0a 2a 2a 20  esult column.** 
2af0: 69 6e 74 6f 20 61 20 6e 75 6d 65 72 69 63 20 72  into a numeric r
2b00: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e 20 20  epresentation.  
2b10: 55 73 65 20 65 69 74 68 65 72 20 49 4e 54 45 47  Use either INTEG
2b20: 45 52 20 6f 72 20 52 45 41 4c 20 77 68 69 63 68  ER or REAL which
2b30: 65 76 65 72 0a 2a 2a 20 69 73 20 61 70 70 72 6f  ever.** is appro
2b40: 70 72 69 61 74 65 2e 20 20 42 75 74 20 6f 6e 6c  priate.  But onl
2b50: 79 20 64 6f 20 74 68 65 20 63 6f 6e 76 65 72 73  y do the convers
2b60: 69 6f 6e 20 69 66 20 69 74 20 69 73 20 70 6f 73  ion if it is pos
2b70: 73 69 62 6c 65 20 77 69 74 68 6f 75 74 0a 2a 2a  sible without.**
2b80: 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72 6d 61   loss of informa
2b90: 74 69 6f 6e 20 61 6e 64 20 72 65 74 75 72 6e 20  tion and return 
2ba0: 74 68 65 20 72 65 76 69 73 65 64 20 74 79 70 65  the revised type
2bb0: 20 6f 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74   of the argument
2bc0: 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  ..*/.int sqlite3
2bd0: 5f 76 61 6c 75 65 5f 6e 75 6d 65 72 69 63 5f 74  _value_numeric_t
2be0: 79 70 65 28 73 71 6c 69 74 65 33 5f 76 61 6c 75  ype(sqlite3_valu
2bf0: 65 20 2a 70 56 61 6c 29 7b 0a 20 20 4d 65 6d 20  e *pVal){.  Mem 
2c00: 2a 70 4d 65 6d 20 3d 20 28 4d 65 6d 2a 29 70 56  *pMem = (Mem*)pV
2c10: 61 6c 3b 0a 20 20 69 66 28 20 70 4d 65 6d 2d 3e  al;.  if( pMem->
2c20: 74 79 70 65 3d 3d 53 51 4c 49 54 45 5f 54 45 58  type==SQLITE_TEX
2c30: 54 20 29 7b 0a 20 20 20 20 61 70 70 6c 79 4e 75  T ){.    applyNu
2c40: 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 70 4d  mericAffinity(pM
2c50: 65 6d 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  em);.    sqlite3
2c60: 56 64 62 65 4d 65 6d 53 74 6f 72 65 54 79 70 65  VdbeMemStoreType
2c70: 28 70 4d 65 6d 29 3b 0a 20 20 7d 0a 20 20 72 65  (pMem);.  }.  re
2c80: 74 75 72 6e 20 70 4d 65 6d 2d 3e 74 79 70 65 3b  turn pMem->type;
2c90: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 45 78 70 6f 72 74  .}../*.** Export
2ca0: 65 64 20 76 65 72 73 69 6f 6e 20 6f 66 20 61 70  ed version of ap
2cb0: 70 6c 79 41 66 66 69 6e 69 74 79 28 29 2e 20 54  plyAffinity(). T
2cc0: 68 69 73 20 6f 6e 65 20 77 6f 72 6b 73 20 6f 6e  his one works on
2cd0: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c   sqlite3_value*,
2ce0: 20 0a 2a 2a 20 6e 6f 74 20 74 68 65 20 69 6e 74   .** not the int
2cf0: 65 72 6e 61 6c 20 4d 65 6d 2a 20 74 79 70 65 2e  ernal Mem* type.
2d00: 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  .*/.void sqlite3
2d10: 56 61 6c 75 65 41 70 70 6c 79 41 66 66 69 6e 69  ValueApplyAffini
2d20: 74 79 28 0a 20 20 73 71 6c 69 74 65 33 5f 76 61  ty(.  sqlite3_va
2d30: 6c 75 65 20 2a 70 56 61 6c 2c 20 0a 20 20 75 38  lue *pVal, .  u8
2d40: 20 61 66 66 69 6e 69 74 79 2c 20 0a 20 20 75 38   affinity, .  u8
2d50: 20 65 6e 63 0a 29 7b 0a 20 20 61 70 70 6c 79 41   enc.){.  applyA
2d60: 66 66 69 6e 69 74 79 28 28 4d 65 6d 20 2a 29 70  ffinity((Mem *)p
2d70: 56 61 6c 2c 20 61 66 66 69 6e 69 74 79 2c 20 65  Val, affinity, e
2d80: 6e 63 29 3b 0a 7d 0a 0a 23 69 66 64 65 66 20 53  nc);.}..#ifdef S
2d90: 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a  QLITE_DEBUG./*.*
2da0: 2a 20 57 72 69 74 65 20 61 20 6e 69 63 65 20 73  * Write a nice s
2db0: 74 72 69 6e 67 20 72 65 70 72 65 73 65 6e 74 61  tring representa
2dc0: 74 69 6f 6e 20 6f 66 20 74 68 65 20 63 6f 6e 74  tion of the cont
2dd0: 65 6e 74 73 20 6f 66 20 63 65 6c 6c 20 70 4d 65  ents of cell pMe
2de0: 6d 0a 2a 2a 20 69 6e 74 6f 20 62 75 66 66 65 72  m.** into buffer
2df0: 20 7a 42 75 66 2c 20 6c 65 6e 67 74 68 20 6e 42   zBuf, length nB
2e00: 75 66 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69  uf..*/.void sqli
2e10: 74 65 33 56 64 62 65 4d 65 6d 50 72 65 74 74 79  te3VdbeMemPretty
2e20: 50 72 69 6e 74 28 4d 65 6d 20 2a 70 4d 65 6d 2c  Print(Mem *pMem,
2e30: 20 63 68 61 72 20 2a 7a 42 75 66 29 7b 0a 20 20   char *zBuf){.  
2e40: 63 68 61 72 20 2a 7a 43 73 72 20 3d 20 7a 42 75  char *zCsr = zBu
2e50: 66 3b 0a 20 20 69 6e 74 20 66 20 3d 20 70 4d 65  f;.  int f = pMe
2e60: 6d 2d 3e 66 6c 61 67 73 3b 0a 0a 20 20 73 74 61  m->flags;..  sta
2e70: 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  tic const char *
2e80: 63 6f 6e 73 74 20 65 6e 63 6e 61 6d 65 73 5b 5d  const encnames[]
2e90: 20 3d 20 7b 22 28 58 29 22 2c 20 22 28 38 29 22   = {"(X)", "(8)"
2ea0: 2c 20 22 28 31 36 4c 45 29 22 2c 20 22 28 31 36  , "(16LE)", "(16
2eb0: 42 45 29 22 7d 3b 0a 0a 20 20 69 66 28 20 66 26  BE)"};..  if( f&
2ec0: 4d 45 4d 5f 42 6c 6f 62 20 29 7b 0a 20 20 20 20  MEM_Blob ){.    
2ed0: 69 6e 74 20 69 3b 0a 20 20 20 20 63 68 61 72 20  int i;.    char 
2ee0: 63 3b 0a 20 20 20 20 69 66 28 20 66 20 26 20 4d  c;.    if( f & M
2ef0: 45 4d 5f 44 79 6e 20 29 7b 0a 20 20 20 20 20 20  EM_Dyn ){.      
2f00: 63 20 3d 20 27 7a 27 3b 0a 20 20 20 20 20 20 61  c = 'z';.      a
2f10: 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d  ssert( (f & (MEM
2f20: 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 45 70 68 65  _Static|MEM_Ephe
2f30: 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65  m))==0 );.    }e
2f40: 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f  lse if( f & MEM_
2f50: 53 74 61 74 69 63 20 29 7b 0a 20 20 20 20 20 20  Static ){.      
2f60: 63 20 3d 20 27 74 27 3b 0a 20 20 20 20 20 20 61  c = 't';.      a
2f70: 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d  ssert( (f & (MEM
2f80: 5f 44 79 6e 7c 4d 45 4d 5f 45 70 68 65 6d 29 29  _Dyn|MEM_Ephem))
2f90: 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65  ==0 );.    }else
2fa0: 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 45 70 68   if( f & MEM_Eph
2fb0: 65 6d 20 29 7b 0a 20 20 20 20 20 20 63 20 3d 20  em ){.      c = 
2fc0: 27 65 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72  'e';.      asser
2fd0: 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74 61  t( (f & (MEM_Sta
2fe0: 74 69 63 7c 4d 45 4d 5f 44 79 6e 29 29 3d 3d 30  tic|MEM_Dyn))==0
2ff0: 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20   );.    }else{. 
3000: 20 20 20 20 20 63 20 3d 20 27 73 27 3b 0a 20 20       c = 's';.  
3010: 20 20 7d 0a 0a 20 20 20 20 73 71 6c 69 74 65 33    }..    sqlite3
3020: 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a  _snprintf(100, z
3030: 43 73 72 2c 20 22 25 63 22 2c 20 63 29 3b 0a 20  Csr, "%c", c);. 
3040: 20 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74     zCsr += sqlit
3050: 65 33 53 74 72 6c 65 6e 33 30 28 7a 43 73 72 29  e3Strlen30(zCsr)
3060: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e  ;.    sqlite3_sn
3070: 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73 72  printf(100, zCsr
3080: 2c 20 22 25 64 5b 22 2c 20 70 4d 65 6d 2d 3e 6e  , "%d[", pMem->n
3090: 29 3b 0a 20 20 20 20 7a 43 73 72 20 2b 3d 20 73  );.    zCsr += s
30a0: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a  qlite3Strlen30(z
30b0: 43 73 72 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d  Csr);.    for(i=
30c0: 30 3b 20 69 3c 31 36 20 26 26 20 69 3c 70 4d 65  0; i<16 && i<pMe
30d0: 6d 2d 3e 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  m->n; i++){.    
30e0: 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e    sqlite3_snprin
30f0: 74 66 28 31 30 30 2c 20 7a 43 73 72 2c 20 22 25  tf(100, zCsr, "%
3100: 30 32 58 22 2c 20 28 28 69 6e 74 29 70 4d 65 6d  02X", ((int)pMem
3110: 2d 3e 7a 5b 69 5d 20 26 20 30 78 46 46 29 29 3b  ->z[i] & 0xFF));
3120: 0a 20 20 20 20 20 20 7a 43 73 72 20 2b 3d 20 73  .      zCsr += s
3130: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a  qlite3Strlen30(z
3140: 43 73 72 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  Csr);.    }.    
3150: 66 6f 72 28 69 3d 30 3b 20 69 3c 31 36 20 26 26  for(i=0; i<16 &&
3160: 20 69 3c 70 4d 65 6d 2d 3e 6e 3b 20 69 2b 2b 29   i<pMem->n; i++)
3170: 7b 0a 20 20 20 20 20 20 63 68 61 72 20 7a 20 3d  {.      char z =
3180: 20 70 4d 65 6d 2d 3e 7a 5b 69 5d 3b 0a 20 20 20   pMem->z[i];.   
3190: 20 20 20 69 66 28 20 7a 3c 33 32 20 7c 7c 20 7a     if( z<32 || z
31a0: 3e 31 32 36 20 29 20 2a 7a 43 73 72 2b 2b 20 3d  >126 ) *zCsr++ =
31b0: 20 27 2e 27 3b 0a 20 20 20 20 20 20 65 6c 73 65   '.';.      else
31c0: 20 2a 7a 43 73 72 2b 2b 20 3d 20 7a 3b 0a 20 20   *zCsr++ = z;.  
31d0: 20 20 7d 0a 0a 20 20 20 20 73 71 6c 69 74 65 33    }..    sqlite3
31e0: 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a  _snprintf(100, z
31f0: 43 73 72 2c 20 22 5d 25 73 22 2c 20 65 6e 63 6e  Csr, "]%s", encn
3200: 61 6d 65 73 5b 70 4d 65 6d 2d 3e 65 6e 63 5d 29  ames[pMem->enc])
3210: 3b 0a 20 20 20 20 7a 43 73 72 20 2b 3d 20 73 71  ;.    zCsr += sq
3220: 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 43  lite3Strlen30(zC
3230: 73 72 29 3b 0a 20 20 20 20 69 66 28 20 66 20 26  sr);.    if( f &
3240: 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20   MEM_Zero ){.   
3250: 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69     sqlite3_snpri
3260: 6e 74 66 28 31 30 30 2c 20 7a 43 73 72 2c 22 2b  ntf(100, zCsr,"+
3270: 25 64 7a 22 2c 70 4d 65 6d 2d 3e 75 2e 6e 5a 65  %dz",pMem->u.nZe
3280: 72 6f 29 3b 0a 20 20 20 20 20 20 7a 43 73 72 20  ro);.      zCsr 
3290: 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  += sqlite3Strlen
32a0: 33 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 7d 0a  30(zCsr);.    }.
32b0: 20 20 20 20 2a 7a 43 73 72 20 3d 20 27 5c 30 27      *zCsr = '\0'
32c0: 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20  ;.  }else if( f 
32d0: 26 20 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20  & MEM_Str ){.   
32e0: 20 69 6e 74 20 6a 2c 20 6b 3b 0a 20 20 20 20 7a   int j, k;.    z
32f0: 42 75 66 5b 30 5d 20 3d 20 27 20 27 3b 0a 20 20  Buf[0] = ' ';.  
3300: 20 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 44 79    if( f & MEM_Dy
3310: 6e 20 29 7b 0a 20 20 20 20 20 20 7a 42 75 66 5b  n ){.      zBuf[
3320: 31 5d 20 3d 20 27 7a 27 3b 0a 20 20 20 20 20 20  1] = 'z';.      
3330: 61 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45  assert( (f & (ME
3340: 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 45 70 68  M_Static|MEM_Eph
3350: 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d  em))==0 );.    }
3360: 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d  else if( f & MEM
3370: 5f 53 74 61 74 69 63 20 29 7b 0a 20 20 20 20 20  _Static ){.     
3380: 20 7a 42 75 66 5b 31 5d 20 3d 20 27 74 27 3b 0a   zBuf[1] = 't';.
3390: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28 66        assert( (f
33a0: 20 26 20 28 4d 45 4d 5f 44 79 6e 7c 4d 45 4d 5f   & (MEM_Dyn|MEM_
33b0: 45 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20  Ephem))==0 );.  
33c0: 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26 20    }else if( f & 
33d0: 4d 45 4d 5f 45 70 68 65 6d 20 29 7b 0a 20 20 20  MEM_Ephem ){.   
33e0: 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27 65 27     zBuf[1] = 'e'
33f0: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
3400: 28 66 20 26 20 28 4d 45 4d 5f 53 74 61 74 69 63  (f & (MEM_Static
3410: 7c 4d 45 4d 5f 44 79 6e 29 29 3d 3d 30 20 29 3b  |MEM_Dyn))==0 );
3420: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
3430: 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27 73 27 3b    zBuf[1] = 's';
3440: 0a 20 20 20 20 7d 0a 20 20 20 20 6b 20 3d 20 32  .    }.    k = 2
3450: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e  ;.    sqlite3_sn
3460: 70 72 69 6e 74 66 28 31 30 30 2c 20 26 7a 42 75  printf(100, &zBu
3470: 66 5b 6b 5d 2c 20 22 25 64 22 2c 20 70 4d 65 6d  f[k], "%d", pMem
3480: 2d 3e 6e 29 3b 0a 20 20 20 20 6b 20 2b 3d 20 73  ->n);.    k += s
3490: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 26  qlite3Strlen30(&
34a0: 7a 42 75 66 5b 6b 5d 29 3b 0a 20 20 20 20 7a 42  zBuf[k]);.    zB
34b0: 75 66 5b 6b 2b 2b 5d 20 3d 20 27 5b 27 3b 0a 20  uf[k++] = '[';. 
34c0: 20 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c 31 35     for(j=0; j<15
34d0: 20 26 26 20 6a 3c 70 4d 65 6d 2d 3e 6e 3b 20 6a   && j<pMem->n; j
34e0: 2b 2b 29 7b 0a 20 20 20 20 20 20 75 38 20 63 20  ++){.      u8 c 
34f0: 3d 20 70 4d 65 6d 2d 3e 7a 5b 6a 5d 3b 0a 20 20  = pMem->z[j];.  
3500: 20 20 20 20 69 66 28 20 63 3e 3d 30 78 32 30 20      if( c>=0x20 
3510: 26 26 20 63 3c 30 78 37 66 20 29 7b 0a 20 20 20  && c<0x7f ){.   
3520: 20 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d       zBuf[k++] =
3530: 20 63 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b   c;.      }else{
3540: 0a 20 20 20 20 20 20 20 20 7a 42 75 66 5b 6b 2b  .        zBuf[k+
3550: 2b 5d 20 3d 20 27 2e 27 3b 0a 20 20 20 20 20 20  +] = '.';.      
3560: 7d 0a 20 20 20 20 7d 0a 20 20 20 20 7a 42 75 66  }.    }.    zBuf
3570: 5b 6b 2b 2b 5d 20 3d 20 27 5d 27 3b 0a 20 20 20  [k++] = ']';.   
3580: 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74   sqlite3_snprint
3590: 66 28 31 30 30 2c 26 7a 42 75 66 5b 6b 5d 2c 20  f(100,&zBuf[k], 
35a0: 65 6e 63 6e 61 6d 65 73 5b 70 4d 65 6d 2d 3e 65  encnames[pMem->e
35b0: 6e 63 5d 29 3b 0a 20 20 20 20 6b 20 2b 3d 20 73  nc]);.    k += s
35c0: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 26  qlite3Strlen30(&
35d0: 7a 42 75 66 5b 6b 5d 29 3b 0a 20 20 20 20 7a 42  zBuf[k]);.    zB
35e0: 75 66 5b 6b 2b 2b 5d 20 3d 20 30 3b 0a 20 20 7d  uf[k++] = 0;.  }
35f0: 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65  .}.#endif..#ifde
3600: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f  f SQLITE_DEBUG./
3610: 2a 0a 2a 2a 20 50 72 69 6e 74 20 74 68 65 20 76  *.** Print the v
3620: 61 6c 75 65 20 6f 66 20 61 20 72 65 67 69 73 74  alue of a regist
3630: 65 72 20 66 6f 72 20 74 72 61 63 69 6e 67 20 70  er for tracing p
3640: 75 72 70 6f 73 65 73 3a 0a 2a 2f 0a 73 74 61 74  urposes:.*/.stat
3650: 69 63 20 76 6f 69 64 20 6d 65 6d 54 72 61 63 65  ic void memTrace
3660: 50 72 69 6e 74 28 46 49 4c 45 20 2a 6f 75 74 2c  Print(FILE *out,
3670: 20 4d 65 6d 20 2a 70 29 7b 0a 20 20 69 66 28 20   Mem *p){.  if( 
3680: 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  p->flags & MEM_N
3690: 75 6c 6c 20 29 7b 0a 20 20 20 20 66 70 72 69 6e  ull ){.    fprin
36a0: 74 66 28 6f 75 74 2c 20 22 20 4e 55 4c 4c 22 29  tf(out, " NULL")
36b0: 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 28 70  ;.  }else if( (p
36c0: 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49  ->flags & (MEM_I
36d0: 6e 74 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d 28 4d  nt|MEM_Str))==(M
36e0: 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 53 74 72 29 20  EM_Int|MEM_Str) 
36f0: 29 7b 0a 20 20 20 20 66 70 72 69 6e 74 66 28 6f  ){.    fprintf(o
3700: 75 74 2c 20 22 20 73 69 3a 25 6c 6c 64 22 2c 20  ut, " si:%lld", 
3710: 70 2d 3e 75 2e 69 29 3b 0a 20 20 7d 65 6c 73 65  p->u.i);.  }else
3720: 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20   if( p->flags & 
3730: 4d 45 4d 5f 49 6e 74 20 29 7b 0a 20 20 20 20 66  MEM_Int ){.    f
3740: 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 20 69 3a  printf(out, " i:
3750: 25 6c 6c 64 22 2c 20 70 2d 3e 75 2e 69 29 3b 0a  %lld", p->u.i);.
3760: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
3770: 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49  MIT_FLOATING_POI
3780: 4e 54 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70  NT.  }else if( p
3790: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65  ->flags & MEM_Re
37a0: 61 6c 20 29 7b 0a 20 20 20 20 66 70 72 69 6e 74  al ){.    fprint
37b0: 66 28 6f 75 74 2c 20 22 20 72 3a 25 67 22 2c 20  f(out, " r:%g", 
37c0: 70 2d 3e 72 29 3b 0a 23 65 6e 64 69 66 0a 20 20  p->r);.#endif.  
37d0: 7d 65 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c 61  }else if( p->fla
37e0: 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 20  gs & MEM_RowSet 
37f0: 29 7b 0a 20 20 20 20 66 70 72 69 6e 74 66 28 6f  ){.    fprintf(o
3800: 75 74 2c 20 22 20 28 72 6f 77 73 65 74 29 22 29  ut, " (rowset)")
3810: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 63  ;.  }else{.    c
3820: 68 61 72 20 7a 42 75 66 5b 32 30 30 5d 3b 0a 20  har zBuf[200];. 
3830: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
3840: 6d 50 72 65 74 74 79 50 72 69 6e 74 28 70 2c 20  mPrettyPrint(p, 
3850: 7a 42 75 66 29 3b 0a 20 20 20 20 66 70 72 69 6e  zBuf);.    fprin
3860: 74 66 28 6f 75 74 2c 20 22 20 22 29 3b 0a 20 20  tf(out, " ");.  
3870: 20 20 66 70 72 69 6e 74 66 28 6f 75 74 2c 20 22    fprintf(out, "
3880: 25 73 22 2c 20 7a 42 75 66 29 3b 0a 20 20 7d 0a  %s", zBuf);.  }.
3890: 7d 0a 73 74 61 74 69 63 20 76 6f 69 64 20 72 65  }.static void re
38a0: 67 69 73 74 65 72 54 72 61 63 65 28 46 49 4c 45  gisterTrace(FILE
38b0: 20 2a 6f 75 74 2c 20 69 6e 74 20 69 52 65 67 2c   *out, int iReg,
38c0: 20 4d 65 6d 20 2a 70 29 7b 0a 20 20 66 70 72 69   Mem *p){.  fpri
38d0: 6e 74 66 28 6f 75 74 2c 20 22 52 45 47 5b 25 64  ntf(out, "REG[%d
38e0: 5d 20 3d 20 22 2c 20 69 52 65 67 29 3b 0a 20 20  ] = ", iReg);.  
38f0: 6d 65 6d 54 72 61 63 65 50 72 69 6e 74 28 6f 75  memTracePrint(ou
3900: 74 2c 20 70 29 3b 0a 20 20 66 70 72 69 6e 74 66  t, p);.  fprintf
3910: 28 6f 75 74 2c 20 22 5c 6e 22 29 3b 0a 7d 0a 23  (out, "\n");.}.#
3920: 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51  endif..#ifdef SQ
3930: 4c 49 54 45 5f 44 45 42 55 47 0a 23 20 20 64 65  LITE_DEBUG.#  de
3940: 66 69 6e 65 20 52 45 47 49 53 54 45 52 5f 54 52  fine REGISTER_TR
3950: 41 43 45 28 52 2c 4d 29 20 69 66 28 70 2d 3e 74  ACE(R,M) if(p->t
3960: 72 61 63 65 29 72 65 67 69 73 74 65 72 54 72 61  race)registerTra
3970: 63 65 28 70 2d 3e 74 72 61 63 65 2c 52 2c 4d 29  ce(p->trace,R,M)
3980: 0a 23 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65  .#else.#  define
3990: 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
39a0: 52 2c 4d 29 0a 23 65 6e 64 69 66 0a 0a 0a 23 69  R,M).#endif...#i
39b0: 66 64 65 66 20 56 44 42 45 5f 50 52 4f 46 49 4c  fdef VDBE_PROFIL
39c0: 45 0a 0a 2f 2a 20 0a 2a 2a 20 68 77 74 69 6d 65  E../* .** hwtime
39d0: 2e 68 20 63 6f 6e 74 61 69 6e 73 20 69 6e 6c 69  .h contains inli
39e0: 6e 65 20 61 73 73 65 6d 62 6c 65 72 20 63 6f 64  ne assembler cod
39f0: 65 20 66 6f 72 20 69 6d 70 6c 65 6d 65 6e 74 69  e for implementi
3a00: 6e 67 20 0a 2a 2a 20 68 69 67 68 2d 70 65 72 66  ng .** high-perf
3a10: 6f 72 6d 61 6e 63 65 20 74 69 6d 69 6e 67 20 72  ormance timing r
3a20: 6f 75 74 69 6e 65 73 2e 0a 2a 2f 0a 23 69 6e 63  outines..*/.#inc
3a30: 6c 75 64 65 20 22 68 77 74 69 6d 65 2e 68 22 0a  lude "hwtime.h".
3a40: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
3a50: 68 65 20 43 48 45 43 4b 5f 46 4f 52 5f 49 4e 54  he CHECK_FOR_INT
3a60: 45 52 52 55 50 54 20 6d 61 63 72 6f 20 64 65 66  ERRUPT macro def
3a70: 69 6e 65 64 20 68 65 72 65 20 6c 6f 6f 6b 73 20  ined here looks 
3a80: 74 6f 20 73 65 65 20 69 66 20 74 68 65 0a 2a 2a  to see if the.**
3a90: 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75   sqlite3_interru
3aa0: 70 74 28 29 20 72 6f 75 74 69 6e 65 20 68 61 73  pt() routine has
3ab0: 20 62 65 65 6e 20 63 61 6c 6c 65 64 2e 20 20 49   been called.  I
3ac0: 66 20 69 74 20 68 61 73 20 62 65 65 6e 2c 20 74  f it has been, t
3ad0: 68 65 6e 0a 2a 2a 20 70 72 6f 63 65 73 73 69 6e  hen.** processin
3ae0: 67 20 6f 66 20 74 68 65 20 56 44 42 45 20 70 72  g of the VDBE pr
3af0: 6f 67 72 61 6d 20 69 73 20 69 6e 74 65 72 72 75  ogram is interru
3b00: 70 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  pted..**.** This
3b10: 20 6d 61 63 72 6f 20 61 64 64 65 64 20 74 6f 20   macro added to 
3b20: 65 76 65 72 79 20 69 6e 73 74 72 75 63 74 69 6f  every instructio
3b30: 6e 20 74 68 61 74 20 64 6f 65 73 20 61 20 6a 75  n that does a ju
3b40: 6d 70 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a  mp in order to.*
3b50: 2a 20 69 6d 70 6c 65 6d 65 6e 74 20 61 20 6c 6f  * implement a lo
3b60: 6f 70 2e 20 20 54 68 69 73 20 74 65 73 74 20 75  op.  This test u
3b70: 73 65 64 20 74 6f 20 62 65 20 6f 6e 20 65 76 65  sed to be on eve
3b80: 72 79 20 73 69 6e 67 6c 65 20 69 6e 73 74 72 75  ry single instru
3b90: 63 74 69 6f 6e 2c 0a 2a 2a 20 62 75 74 20 74 68  ction,.** but th
3ba0: 61 74 20 6d 65 61 6e 74 20 77 65 20 6d 6f 72 65  at meant we more
3bb0: 20 74 65 73 74 69 6e 67 20 74 68 61 74 20 77 65   testing that we
3bc0: 20 6e 65 65 64 65 64 2e 20 20 42 79 20 6f 6e 6c   needed.  By onl
3bd0: 79 20 74 65 73 74 69 6e 67 20 74 68 65 0a 2a 2a  y testing the.**
3be0: 20 66 6c 61 67 20 6f 6e 20 6a 75 6d 70 20 69 6e   flag on jump in
3bf0: 73 74 72 75 63 74 69 6f 6e 73 2c 20 77 65 20 67  structions, we g
3c00: 65 74 20 61 20 28 73 6d 61 6c 6c 29 20 73 70 65  et a (small) spe
3c10: 65 64 20 69 6d 70 72 6f 76 65 6d 65 6e 74 2e 0a  ed improvement..
3c20: 2a 2f 0a 23 64 65 66 69 6e 65 20 43 48 45 43 4b  */.#define CHECK
3c30: 5f 46 4f 52 5f 49 4e 54 45 52 52 55 50 54 20 5c  _FOR_INTERRUPT \
3c40: 0a 20 20 20 69 66 28 20 64 62 2d 3e 75 31 2e 69  .   if( db->u1.i
3c50: 73 49 6e 74 65 72 72 75 70 74 65 64 20 29 20 67  sInterrupted ) g
3c60: 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
3c70: 5f 69 6e 74 65 72 72 75 70 74 3b 0a 0a 0a 23 69  _interrupt;...#i
3c80: 66 6e 64 65 66 20 4e 44 45 42 55 47 0a 2f 2a 0a  fndef NDEBUG./*.
3c90: 2a 2a 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e  ** This function
3ca0: 20 69 73 20 6f 6e 6c 79 20 63 61 6c 6c 65 64 20   is only called 
3cb0: 66 72 6f 6d 20 77 69 74 68 69 6e 20 61 6e 20 61  from within an a
3cc0: 73 73 65 72 74 28 29 20 65 78 70 72 65 73 73 69  ssert() expressi
3cd0: 6f 6e 2e 20 49 74 0a 2a 2a 20 63 68 65 63 6b 73  on. It.** checks
3ce0: 20 74 68 61 74 20 74 68 65 20 73 71 6c 69 74 65   that the sqlite
3cf0: 33 2e 6e 54 72 61 6e 73 61 63 74 69 6f 6e 20 76  3.nTransaction v
3d00: 61 72 69 61 62 6c 65 20 69 73 20 63 6f 72 72 65  ariable is corre
3d10: 63 74 6c 79 20 73 65 74 20 74 6f 0a 2a 2a 20 74  ctly set to.** t
3d20: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6e 6f 6e  he number of non
3d30: 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61 76  -transaction sav
3d40: 65 70 6f 69 6e 74 73 20 63 75 72 72 65 6e 74 6c  epoints currentl
3d50: 79 20 69 6e 20 74 68 65 20 0a 2a 2a 20 6c 69 6e  y in the .** lin
3d60: 6b 65 64 20 6c 69 73 74 20 73 74 61 72 74 69 6e  ked list startin
3d70: 67 20 61 74 20 73 71 6c 69 74 65 33 2e 70 53 61  g at sqlite3.pSa
3d80: 76 65 70 6f 69 6e 74 2e 0a 2a 2a 20 0a 2a 2a 20  vepoint..** .** 
3d90: 55 73 61 67 65 3a 0a 2a 2a 0a 2a 2a 20 20 20 20  Usage:.**.**    
3da0: 20 61 73 73 65 72 74 28 20 63 68 65 63 6b 53 61   assert( checkSa
3db0: 76 65 70 6f 69 6e 74 43 6f 75 6e 74 28 64 62 29  vepointCount(db)
3dc0: 20 29 3b 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e   );.*/.static in
3dd0: 74 20 63 68 65 63 6b 53 61 76 65 70 6f 69 6e 74  t checkSavepoint
3de0: 43 6f 75 6e 74 28 73 71 6c 69 74 65 33 20 2a 64  Count(sqlite3 *d
3df0: 62 29 7b 0a 20 20 69 6e 74 20 6e 20 3d 20 30 3b  b){.  int n = 0;
3e00: 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 3b  .  Savepoint *p;
3e10: 0a 20 20 66 6f 72 28 70 3d 64 62 2d 3e 70 53 61  .  for(p=db->pSa
3e20: 76 65 70 6f 69 6e 74 3b 20 70 3b 20 70 3d 70 2d  vepoint; p; p=p-
3e30: 3e 70 4e 65 78 74 29 20 6e 2b 2b 3b 0a 20 20 61  >pNext) n++;.  a
3e40: 73 73 65 72 74 28 20 6e 3d 3d 28 64 62 2d 3e 6e  ssert( n==(db->n
3e50: 53 61 76 65 70 6f 69 6e 74 20 2b 20 64 62 2d 3e  Savepoint + db->
3e60: 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76  isTransactionSav
3e70: 65 70 6f 69 6e 74 29 20 29 3b 0a 20 20 72 65 74  epoint) );.  ret
3e80: 75 72 6e 20 31 3b 0a 7d 0a 23 65 6e 64 69 66 0a  urn 1;.}.#endif.
3e90: 0a 2f 2a 0a 2a 2a 20 54 72 61 6e 73 66 65 72 20  ./*.** Transfer 
3ea0: 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 74 65  error message te
3eb0: 78 74 20 66 72 6f 6d 20 61 6e 20 73 71 6c 69 74  xt from an sqlit
3ec0: 65 33 5f 76 74 61 62 2e 7a 45 72 72 4d 73 67 20  e3_vtab.zErrMsg 
3ed0: 28 74 65 78 74 20 73 74 6f 72 65 64 0a 2a 2a 20  (text stored.** 
3ee0: 69 6e 20 6d 65 6d 6f 72 79 20 6f 62 74 61 69 6e  in memory obtain
3ef0: 65 64 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 5f  ed from sqlite3_
3f00: 6d 61 6c 6c 6f 63 29 20 69 6e 74 6f 20 61 20 56  malloc) into a V
3f10: 64 62 65 2e 7a 45 72 72 4d 73 67 20 28 74 65 78  dbe.zErrMsg (tex
3f20: 74 20 73 74 6f 72 65 64 0a 2a 2a 20 69 6e 20 6d  t stored.** in m
3f30: 65 6d 6f 72 79 20 6f 62 74 61 69 6e 65 64 20 66  emory obtained f
3f40: 72 6f 6d 20 73 71 6c 69 74 65 33 44 62 4d 61 6c  rom sqlite3DbMal
3f50: 6c 6f 63 29 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  loc)..*/.static 
3f60: 76 6f 69 64 20 69 6d 70 6f 72 74 56 74 61 62 45  void importVtabE
3f70: 72 72 4d 73 67 28 56 64 62 65 20 2a 70 2c 20 73  rrMsg(Vdbe *p, s
3f80: 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74  qlite3_vtab *pVt
3f90: 61 62 29 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a  ab){.  sqlite3 *
3fa0: 64 62 20 3d 20 70 2d 3e 64 62 3b 0a 20 20 73 71  db = p->db;.  sq
3fb0: 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20  lite3DbFree(db, 
3fc0: 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 70  p->zErrMsg);.  p
3fd0: 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 73 71 6c 69  ->zErrMsg = sqli
3fe0: 74 65 33 44 62 53 74 72 44 75 70 28 64 62 2c 20  te3DbStrDup(db, 
3ff0: 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67 29 3b  pVtab->zErrMsg);
4000: 0a 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28  .  sqlite3_free(
4010: 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67 29 3b  pVtab->zErrMsg);
4020: 0a 20 20 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73  .  pVtab->zErrMs
4030: 67 20 3d 20 30 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a  g = 0;.}.../*.**
4040: 20 45 78 65 63 75 74 65 20 61 73 20 6d 75 63 68   Execute as much
4050: 20 6f 66 20 61 20 56 44 42 45 20 70 72 6f 67 72   of a VDBE progr
4060: 61 6d 20 61 73 20 77 65 20 63 61 6e 20 74 68 65  am as we can the
4070: 6e 20 72 65 74 75 72 6e 2e 0a 2a 2a 0a 2a 2a 20  n return..**.** 
4080: 73 71 6c 69 74 65 33 56 64 62 65 4d 61 6b 65 52  sqlite3VdbeMakeR
4090: 65 61 64 79 28 29 20 6d 75 73 74 20 62 65 20 63  eady() must be c
40a0: 61 6c 6c 65 64 20 62 65 66 6f 72 65 20 74 68 69  alled before thi
40b0: 73 20 72 6f 75 74 69 6e 65 20 69 6e 20 6f 72 64  s routine in ord
40c0: 65 72 20 74 6f 0a 2a 2a 20 63 6c 6f 73 65 20 74  er to.** close t
40d0: 68 65 20 70 72 6f 67 72 61 6d 20 77 69 74 68 20  he program with 
40e0: 61 20 66 69 6e 61 6c 20 4f 50 5f 48 61 6c 74 20  a final OP_Halt 
40f0: 61 6e 64 20 74 6f 20 73 65 74 20 75 70 20 74 68  and to set up th
4100: 65 20 63 61 6c 6c 62 61 63 6b 73 0a 2a 2a 20 61  e callbacks.** a
4110: 6e 64 20 74 68 65 20 65 72 72 6f 72 20 6d 65 73  nd the error mes
4120: 73 61 67 65 20 70 6f 69 6e 74 65 72 2e 0a 2a 2a  sage pointer..**
4130: 0a 2a 2a 20 57 68 65 6e 65 76 65 72 20 61 20 72  .** Whenever a r
4140: 6f 77 20 6f 72 20 72 65 73 75 6c 74 20 64 61 74  ow or result dat
4150: 61 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2c 20  a is available, 
4160: 74 68 69 73 20 72 6f 75 74 69 6e 65 20 77 69 6c  this routine wil
4170: 6c 20 65 69 74 68 65 72 0a 2a 2a 20 69 6e 76 6f  l either.** invo
4180: 6b 65 20 74 68 65 20 72 65 73 75 6c 74 20 63 61  ke the result ca
4190: 6c 6c 62 61 63 6b 20 28 69 66 20 74 68 65 72 65  llback (if there
41a0: 20 69 73 20 6f 6e 65 29 20 6f 72 20 72 65 74 75   is one) or retu
41b0: 72 6e 20 77 69 74 68 0a 2a 2a 20 53 51 4c 49 54  rn with.** SQLIT
41c0: 45 5f 52 4f 57 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  E_ROW..**.** If 
41d0: 61 6e 20 61 74 74 65 6d 70 74 20 69 73 20 6d 61  an attempt is ma
41e0: 64 65 20 74 6f 20 6f 70 65 6e 20 61 20 6c 6f 63  de to open a loc
41f0: 6b 65 64 20 64 61 74 61 62 61 73 65 2c 20 74 68  ked database, th
4200: 65 6e 20 74 68 69 73 20 72 6f 75 74 69 6e 65 0a  en this routine.
4210: 2a 2a 20 77 69 6c 6c 20 65 69 74 68 65 72 20 69  ** will either i
4220: 6e 76 6f 6b 65 20 74 68 65 20 62 75 73 79 20 63  nvoke the busy c
4230: 61 6c 6c 62 61 63 6b 20 28 69 66 20 74 68 65 72  allback (if ther
4240: 65 20 69 73 20 6f 6e 65 29 20 6f 72 20 69 74 20  e is one) or it 
4250: 77 69 6c 6c 0a 2a 2a 20 72 65 74 75 72 6e 20 53  will.** return S
4260: 51 4c 49 54 45 5f 42 55 53 59 2e 0a 2a 2a 0a 2a  QLITE_BUSY..**.*
4270: 2a 20 49 66 20 61 6e 20 65 72 72 6f 72 20 6f 63  * If an error oc
4280: 63 75 72 73 2c 20 61 6e 20 65 72 72 6f 72 20 6d  curs, an error m
4290: 65 73 73 61 67 65 20 69 73 20 77 72 69 74 74 65  essage is writte
42a0: 6e 20 74 6f 20 6d 65 6d 6f 72 79 20 6f 62 74 61  n to memory obta
42b0: 69 6e 65 64 0a 2a 2a 20 66 72 6f 6d 20 73 71 6c  ined.** from sql
42c0: 69 74 65 33 5f 6d 61 6c 6c 6f 63 28 29 20 61 6e  ite3_malloc() an
42d0: 64 20 70 2d 3e 7a 45 72 72 4d 73 67 20 69 73 20  d p->zErrMsg is 
42e0: 6d 61 64 65 20 74 6f 20 70 6f 69 6e 74 20 74 6f  made to point to
42f0: 20 74 68 61 74 20 6d 65 6d 6f 72 79 2e 0a 2a 2a   that memory..**
4300: 20 54 68 65 20 65 72 72 6f 72 20 63 6f 64 65 20   The error code 
4310: 69 73 20 73 74 6f 72 65 64 20 69 6e 20 70 2d 3e  is stored in p->
4320: 72 63 20 61 6e 64 20 74 68 69 73 20 72 6f 75 74  rc and this rout
4330: 69 6e 65 20 72 65 74 75 72 6e 73 20 53 51 4c 49  ine returns SQLI
4340: 54 45 5f 45 52 52 4f 52 2e 0a 2a 2a 0a 2a 2a 20  TE_ERROR..**.** 
4350: 49 66 20 74 68 65 20 63 61 6c 6c 62 61 63 6b 20  If the callback 
4360: 65 76 65 72 20 72 65 74 75 72 6e 73 20 6e 6f 6e  ever returns non
4370: 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20  -zero, then the 
4380: 70 72 6f 67 72 61 6d 20 65 78 69 74 73 0a 2a 2a  program exits.**
4390: 20 69 6d 6d 65 64 69 61 74 65 6c 79 2e 20 20 54   immediately.  T
43a0: 68 65 72 65 20 77 69 6c 6c 20 62 65 20 6e 6f 20  here will be no 
43b0: 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 62 75  error message bu
43c0: 74 20 74 68 65 20 70 2d 3e 72 63 20 66 69 65 6c  t the p->rc fiel
43d0: 64 20 69 73 0a 2a 2a 20 73 65 74 20 74 6f 20 53  d is.** set to S
43e0: 51 4c 49 54 45 5f 41 42 4f 52 54 20 61 6e 64 20  QLITE_ABORT and 
43f0: 74 68 69 73 20 72 6f 75 74 69 6e 65 20 77 69 6c  this routine wil
4400: 6c 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f  l return SQLITE_
4410: 45 52 52 4f 52 2e 0a 2a 2a 0a 2a 2a 20 41 20 6d  ERROR..**.** A m
4420: 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e  emory allocation
4430: 20 65 72 72 6f 72 20 63 61 75 73 65 73 20 70 2d   error causes p-
4440: 3e 72 63 20 74 6f 20 62 65 20 73 65 74 20 74 6f  >rc to be set to
4450: 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 61 6e   SQLITE_NOMEM an
4460: 64 20 74 68 69 73 0a 2a 2a 20 72 6f 75 74 69 6e  d this.** routin
4470: 65 20 74 6f 20 72 65 74 75 72 6e 20 53 51 4c 49  e to return SQLI
4480: 54 45 5f 45 52 52 4f 52 2e 0a 2a 2a 0a 2a 2a 20  TE_ERROR..**.** 
4490: 4f 74 68 65 72 20 66 61 74 61 6c 20 65 72 72 6f  Other fatal erro
44a0: 72 73 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45  rs return SQLITE
44b0: 5f 45 52 52 4f 52 2e 0a 2a 2a 0a 2a 2a 20 41 66  _ERROR..**.** Af
44c0: 74 65 72 20 74 68 69 73 20 72 6f 75 74 69 6e 65  ter this routine
44d0: 20 68 61 73 20 66 69 6e 69 73 68 65 64 2c 20 73   has finished, s
44e0: 71 6c 69 74 65 33 56 64 62 65 46 69 6e 61 6c 69  qlite3VdbeFinali
44f0: 7a 65 28 29 20 73 68 6f 75 6c 64 20 62 65 0a 2a  ze() should be.*
4500: 2a 20 75 73 65 64 20 74 6f 20 63 6c 65 61 6e 20  * used to clean 
4510: 75 70 20 74 68 65 20 6d 65 73 73 20 74 68 61 74  up the mess that
4520: 20 77 61 73 20 6c 65 66 74 20 62 65 68 69 6e 64   was left behind
4530: 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  ..*/.int sqlite3
4540: 56 64 62 65 45 78 65 63 28 0a 20 20 56 64 62 65  VdbeExec(.  Vdbe
4550: 20 2a 70 20 20 20 20 20 20 20 20 20 20 20 20 20   *p             
4560: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 56 44         /* The VD
4570: 42 45 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20 70  BE */.){.  int p
4580: 63 3d 30 3b 20 20 20 20 20 20 20 20 20 20 20 20  c=0;            
4590: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 70 72 6f        /* The pro
45a0: 67 72 61 6d 20 63 6f 75 6e 74 65 72 20 2a 2f 0a  gram counter */.
45b0: 20 20 4f 70 20 2a 61 4f 70 20 3d 20 70 2d 3e 61    Op *aOp = p->a
45c0: 4f 70 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  Op;          /* 
45d0: 43 6f 70 79 20 6f 66 20 70 2d 3e 61 4f 70 20 2a  Copy of p->aOp *
45e0: 2f 0a 20 20 4f 70 20 2a 70 4f 70 3b 20 20 20 20  /.  Op *pOp;    
45f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
4600: 2a 20 43 75 72 72 65 6e 74 20 6f 70 65 72 61 74  * Current operat
4610: 69 6f 6e 20 2a 2f 0a 20 20 69 6e 74 20 72 63 20  ion */.  int rc 
4620: 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 20 20 20 20  = SQLITE_OK;    
4630: 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20      /* Value to 
4640: 72 65 74 75 72 6e 20 2a 2f 0a 20 20 73 71 6c 69  return */.  sqli
4650: 74 65 33 20 2a 64 62 20 3d 20 70 2d 3e 64 62 3b  te3 *db = p->db;
4660: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61         /* The da
4670: 74 61 62 61 73 65 20 2a 2f 0a 20 20 75 38 20 72  tabase */.  u8 r
4680: 65 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c  esetSchemaOnFaul
4690: 74 20 3d 20 30 3b 20 2f 2a 20 52 65 73 65 74 20  t = 0; /* Reset 
46a0: 73 63 68 65 6d 61 20 61 66 74 65 72 20 61 6e 20  schema after an 
46b0: 65 72 72 6f 72 20 69 66 20 70 6f 73 69 74 69 76  error if positiv
46c0: 65 20 2a 2f 0a 20 20 75 38 20 65 6e 63 6f 64 69  e */.  u8 encodi
46d0: 6e 67 20 3d 20 45 4e 43 28 64 62 29 3b 20 20 20  ng = ENC(db);   
46e0: 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73    /* The databas
46f0: 65 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 23 69  e encoding */.#i
4700: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
4710: 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42  T_PROGRESS_CALLB
4720: 41 43 4b 0a 20 20 69 6e 74 20 63 68 65 63 6b 50  ACK.  int checkP
4730: 72 6f 67 72 65 73 73 3b 20 20 20 20 20 20 20 20  rogress;        
4740: 20 2f 2a 20 54 72 75 65 20 69 66 20 70 72 6f 67   /* True if prog
4750: 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 73 20 61  ress callbacks a
4760: 72 65 20 65 6e 61 62 6c 65 64 20 2a 2f 0a 20 20  re enabled */.  
4770: 69 6e 74 20 6e 50 72 6f 67 72 65 73 73 4f 70 73  int nProgressOps
4780: 20 3d 20 30 3b 20 20 20 20 20 20 2f 2a 20 4f 70   = 0;      /* Op
4790: 63 6f 64 65 73 20 65 78 65 63 75 74 65 64 20 73  codes executed s
47a0: 69 6e 63 65 20 70 72 6f 67 72 65 73 73 20 63 61  ince progress ca
47b0: 6c 6c 62 61 63 6b 2e 20 2a 2f 0a 23 65 6e 64 69  llback. */.#endi
47c0: 66 0a 20 20 4d 65 6d 20 2a 61 4d 65 6d 20 3d 20  f.  Mem *aMem = 
47d0: 70 2d 3e 61 4d 65 6d 3b 20 20 20 20 20 20 20 2f  p->aMem;       /
47e0: 2a 20 43 6f 70 79 20 6f 66 20 70 2d 3e 61 4d 65  * Copy of p->aMe
47f0: 6d 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e 31  m */.  Mem *pIn1
4800: 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 20   = 0;           
4810: 20 20 2f 2a 20 31 73 74 20 69 6e 70 75 74 20 6f    /* 1st input o
4820: 70 65 72 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20  perand */.  Mem 
4830: 2a 70 49 6e 32 20 3d 20 30 3b 20 20 20 20 20 20  *pIn2 = 0;      
4840: 20 20 20 20 20 20 20 2f 2a 20 32 6e 64 20 69 6e         /* 2nd in
4850: 70 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20  put operand */. 
4860: 20 4d 65 6d 20 2a 70 49 6e 33 20 3d 20 30 3b 20   Mem *pIn3 = 0; 
4870: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 33              /* 3
4880: 72 64 20 69 6e 70 75 74 20 6f 70 65 72 61 6e 64  rd input operand
4890: 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4f 75 74 20   */.  Mem *pOut 
48a0: 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 20 20  = 0;            
48b0: 20 2f 2a 20 4f 75 74 70 75 74 20 6f 70 65 72 61   /* Output opera
48c0: 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 69 43 6f 6d  nd */.  int iCom
48d0: 70 61 72 65 20 3d 20 30 3b 20 20 20 20 20 20 20  pare = 0;       
48e0: 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20     /* Result of 
48f0: 6c 61 73 74 20 4f 50 5f 43 6f 6d 70 61 72 65 20  last OP_Compare 
4900: 6f 70 65 72 61 74 69 6f 6e 20 2a 2f 0a 20 20 69  operation */.  i
4910: 6e 74 20 2a 61 50 65 72 6d 75 74 65 20 3d 20 30  nt *aPermute = 0
4920: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 50 65 72  ;         /* Per
4930: 6d 75 74 61 74 69 6f 6e 20 6f 66 20 63 6f 6c 75  mutation of colu
4940: 6d 6e 73 20 66 6f 72 20 4f 50 5f 43 6f 6d 70 61  mns for OP_Compa
4950: 72 65 20 2a 2f 0a 20 20 69 36 34 20 6c 61 73 74  re */.  i64 last
4960: 52 6f 77 69 64 20 3d 20 64 62 2d 3e 6c 61 73 74  Rowid = db->last
4970: 52 6f 77 69 64 3b 20 20 2f 2a 20 53 61 76 65 64  Rowid;  /* Saved
4980: 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 6c 61   value of the la
4990: 73 74 20 69 6e 73 65 72 74 20 52 4f 57 49 44 20  st insert ROWID 
49a0: 2a 2f 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50  */.#ifdef VDBE_P
49b0: 52 4f 46 49 4c 45 0a 20 20 75 36 34 20 73 74 61  ROFILE.  u64 sta
49c0: 72 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rt;             
49d0: 20 20 20 20 2f 2a 20 43 50 55 20 63 6c 6f 63 6b      /* CPU clock
49e0: 20 63 6f 75 6e 74 20 61 74 20 73 74 61 72 74 20   count at start 
49f0: 6f 66 20 6f 70 63 6f 64 65 20 2a 2f 0a 20 20 69  of opcode */.  i
4a00: 6e 74 20 6f 72 69 67 50 63 3b 20 20 20 20 20 20  nt origPc;      
4a10: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 72 6f            /* Pro
4a20: 67 72 61 6d 20 63 6f 75 6e 74 65 72 20 61 74 20  gram counter at 
4a30: 73 74 61 72 74 20 6f 66 20 6f 70 63 6f 64 65 20  start of opcode 
4a40: 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 2f 2a 2a 2a  */.#endif.  /***
4a50: 20 49 4e 53 45 52 54 20 53 54 41 43 4b 20 55 4e   INSERT STACK UN
4a60: 49 4f 4e 20 48 45 52 45 20 2a 2a 2a 2f 0a 0a 20  ION HERE ***/.. 
4a70: 20 61 73 73 65 72 74 28 20 70 2d 3e 6d 61 67 69   assert( p->magi
4a80: 63 3d 3d 56 44 42 45 5f 4d 41 47 49 43 5f 52 55  c==VDBE_MAGIC_RU
4a90: 4e 20 29 3b 20 20 2f 2a 20 73 71 6c 69 74 65 33  N );  /* sqlite3
4aa0: 5f 73 74 65 70 28 29 20 76 65 72 69 66 69 65 73  _step() verifies
4ab0: 20 74 68 69 73 20 2a 2f 0a 20 20 73 71 6c 69 74   this */.  sqlit
4ac0: 65 33 56 64 62 65 45 6e 74 65 72 28 70 29 3b 0a  e3VdbeEnter(p);.
4ad0: 20 20 69 66 28 20 70 2d 3e 72 63 3d 3d 53 51 4c    if( p->rc==SQL
4ae0: 49 54 45 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20  ITE_NOMEM ){.   
4af0: 20 2f 2a 20 54 68 69 73 20 68 61 70 70 65 6e 73   /* This happens
4b00: 20 69 66 20 61 20 6d 61 6c 6c 6f 63 28 29 20 69   if a malloc() i
4b10: 6e 73 69 64 65 20 61 20 63 61 6c 6c 20 74 6f 20  nside a call to 
4b20: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
4b30: 65 78 74 28 29 20 6f 72 0a 20 20 20 20 2a 2a 20  ext() or.    ** 
4b40: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
4b50: 65 78 74 31 36 28 29 20 66 61 69 6c 65 64 2e 20  ext16() failed. 
4b60: 20 2a 2f 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f   */.    goto no_
4b70: 6d 65 6d 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72  mem;.  }.  asser
4b80: 74 28 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45  t( p->rc==SQLITE
4b90: 5f 4f 4b 20 7c 7c 20 70 2d 3e 72 63 3d 3d 53 51  _OK || p->rc==SQ
4ba0: 4c 49 54 45 5f 42 55 53 59 20 29 3b 0a 20 20 70  LITE_BUSY );.  p
4bb0: 2d 3e 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b  ->rc = SQLITE_OK
4bc0: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 65  ;.  assert( p->e
4bd0: 78 70 6c 61 69 6e 3d 3d 30 20 29 3b 0a 20 20 70  xplain==0 );.  p
4be0: 2d 3e 70 52 65 73 75 6c 74 53 65 74 20 3d 20 30  ->pResultSet = 0
4bf0: 3b 0a 20 20 64 62 2d 3e 62 75 73 79 48 61 6e 64  ;.  db->busyHand
4c00: 6c 65 72 2e 6e 42 75 73 79 20 3d 20 30 3b 0a 20  ler.nBusy = 0;. 
4c10: 20 43 48 45 43 4b 5f 46 4f 52 5f 49 4e 54 45 52   CHECK_FOR_INTER
4c20: 52 55 50 54 3b 0a 20 20 73 71 6c 69 74 65 33 56  RUPT;.  sqlite3V
4c30: 64 62 65 49 4f 54 72 61 63 65 53 71 6c 28 70 29  dbeIOTraceSql(p)
4c40: 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
4c50: 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f 43  _OMIT_PROGRESS_C
4c60: 41 4c 4c 42 41 43 4b 0a 20 20 63 68 65 63 6b 50  ALLBACK.  checkP
4c70: 72 6f 67 72 65 73 73 20 3d 20 64 62 2d 3e 78 50  rogress = db->xP
4c80: 72 6f 67 72 65 73 73 21 3d 30 3b 0a 23 65 6e 64  rogress!=0;.#end
4c90: 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  if.#ifdef SQLITE
4ca0: 5f 44 45 42 55 47 0a 20 20 73 71 6c 69 74 65 33  _DEBUG.  sqlite3
4cb0: 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f  BeginBenignMallo
4cc0: 63 28 29 3b 0a 20 20 69 66 28 20 70 2d 3e 70 63  c();.  if( p->pc
4cd0: 3d 3d 30 20 20 26 26 20 28 70 2d 3e 64 62 2d 3e  ==0  && (p->db->
4ce0: 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 56  flags & SQLITE_V
4cf0: 64 62 65 4c 69 73 74 69 6e 67 29 21 3d 30 20 29  dbeListing)!=0 )
4d00: 7b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20  {.    int i;.   
4d10: 20 70 72 69 6e 74 66 28 22 56 44 42 45 20 50 72   printf("VDBE Pr
4d20: 6f 67 72 61 6d 20 4c 69 73 74 69 6e 67 3a 5c 6e  ogram Listing:\n
4d30: 22 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  ");.    sqlite3V
4d40: 64 62 65 50 72 69 6e 74 53 71 6c 28 70 29 3b 0a  dbePrintSql(p);.
4d50: 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70      for(i=0; i<p
4d60: 2d 3e 6e 4f 70 3b 20 69 2b 2b 29 7b 0a 20 20 20  ->nOp; i++){.   
4d70: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 50 72     sqlite3VdbePr
4d80: 69 6e 74 4f 70 28 73 74 64 6f 75 74 2c 20 69 2c  intOp(stdout, i,
4d90: 20 26 61 4f 70 5b 69 5d 29 3b 0a 20 20 20 20 7d   &aOp[i]);.    }
4da0: 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 45 6e  .  }.  sqlite3En
4db0: 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 3b  dBenignMalloc();
4dc0: 0a 23 65 6e 64 69 66 0a 20 20 66 6f 72 28 70 63  .#endif.  for(pc
4dd0: 3d 70 2d 3e 70 63 3b 20 72 63 3d 3d 53 51 4c 49  =p->pc; rc==SQLI
4de0: 54 45 5f 4f 4b 3b 20 70 63 2b 2b 29 7b 0a 20 20  TE_OK; pc++){.  
4df0: 20 20 61 73 73 65 72 74 28 20 70 63 3e 3d 30 20    assert( pc>=0 
4e00: 26 26 20 70 63 3c 70 2d 3e 6e 4f 70 20 29 3b 0a  && pc<p->nOp );.
4e10: 20 20 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c 6c      if( db->mall
4e20: 6f 63 46 61 69 6c 65 64 20 29 20 67 6f 74 6f 20  ocFailed ) goto 
4e30: 6e 6f 5f 6d 65 6d 3b 0a 23 69 66 64 65 66 20 56  no_mem;.#ifdef V
4e40: 44 42 45 5f 50 52 4f 46 49 4c 45 0a 20 20 20 20  DBE_PROFILE.    
4e50: 6f 72 69 67 50 63 20 3d 20 70 63 3b 0a 20 20 20  origPc = pc;.   
4e60: 20 73 74 61 72 74 20 3d 20 73 71 6c 69 74 65 33   start = sqlite3
4e70: 48 77 74 69 6d 65 28 29 3b 0a 23 65 6e 64 69 66  Hwtime();.#endif
4e80: 0a 20 20 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b  .    pOp = &aOp[
4e90: 70 63 5d 3b 0a 0a 20 20 20 20 2f 2a 20 4f 6e 6c  pc];..    /* Onl
4ea0: 79 20 61 6c 6c 6f 77 20 74 72 61 63 69 6e 67 20  y allow tracing 
4eb0: 69 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20  if SQLITE_DEBUG 
4ec0: 69 73 20 64 65 66 69 6e 65 64 2e 0a 20 20 20 20  is defined..    
4ed0: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
4ee0: 5f 44 45 42 55 47 0a 20 20 20 20 69 66 28 20 70  _DEBUG.    if( p
4ef0: 2d 3e 74 72 61 63 65 20 29 7b 0a 20 20 20 20 20  ->trace ){.     
4f00: 20 69 66 28 20 70 63 3d 3d 30 20 29 7b 0a 20 20   if( pc==0 ){.  
4f10: 20 20 20 20 20 20 70 72 69 6e 74 66 28 22 56 44        printf("VD
4f20: 42 45 20 45 78 65 63 75 74 69 6f 6e 20 54 72 61  BE Execution Tra
4f30: 63 65 3a 5c 6e 22 29 3b 0a 20 20 20 20 20 20 20  ce:\n");.       
4f40: 20 73 71 6c 69 74 65 33 56 64 62 65 50 72 69 6e   sqlite3VdbePrin
4f50: 74 53 71 6c 28 70 29 3b 0a 20 20 20 20 20 20 7d  tSql(p);.      }
4f60: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
4f70: 62 65 50 72 69 6e 74 4f 70 28 70 2d 3e 74 72 61  bePrintOp(p->tra
4f80: 63 65 2c 20 70 63 2c 20 70 4f 70 29 3b 0a 20 20  ce, pc, pOp);.  
4f90: 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 20    }.#endif.     
4fa0: 20 0a 0a 20 20 20 20 2f 2a 20 43 68 65 63 6b 20   ..    /* Check 
4fb0: 74 6f 20 73 65 65 20 69 66 20 77 65 20 6e 65 65  to see if we nee
4fc0: 64 20 74 6f 20 73 69 6d 75 6c 61 74 65 20 61 6e  d to simulate an
4fd0: 20 69 6e 74 65 72 72 75 70 74 2e 20 20 54 68 69   interrupt.  Thi
4fe0: 73 20 6f 6e 6c 79 20 68 61 70 70 65 6e 73 0a 20  s only happens. 
4ff0: 20 20 20 2a 2a 20 69 66 20 77 65 20 68 61 76 65     ** if we have
5000: 20 61 20 73 70 65 63 69 61 6c 20 74 65 73 74 20   a special test 
5010: 62 75 69 6c 64 2e 0a 20 20 20 20 2a 2f 0a 23 69  build..    */.#i
5020: 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54  fdef SQLITE_TEST
5030: 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33  .    if( sqlite3
5040: 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74  _interrupt_count
5050: 3e 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  >0 ){.      sqli
5060: 74 65 33 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f  te3_interrupt_co
5070: 75 6e 74 2d 2d 3b 0a 20 20 20 20 20 20 69 66 28  unt--;.      if(
5080: 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75   sqlite3_interru
5090: 70 74 5f 63 6f 75 6e 74 3d 3d 30 20 29 7b 0a 20  pt_count==0 ){. 
50a0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 69         sqlite3_i
50b0: 6e 74 65 72 72 75 70 74 28 64 62 29 3b 0a 20 20  nterrupt(db);.  
50c0: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 23 65 6e 64      }.    }.#end
50d0: 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  if..#ifndef SQLI
50e0: 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53  TE_OMIT_PROGRESS
50f0: 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 20 20 2f 2a  _CALLBACK.    /*
5100: 20 43 61 6c 6c 20 74 68 65 20 70 72 6f 67 72 65   Call the progre
5110: 73 73 20 63 61 6c 6c 62 61 63 6b 20 69 66 20 69  ss callback if i
5120: 74 20 69 73 20 63 6f 6e 66 69 67 75 72 65 64 20  t is configured 
5130: 61 6e 64 20 74 68 65 20 72 65 71 75 69 72 65 64  and the required
5140: 20 6e 75 6d 62 65 72 0a 20 20 20 20 2a 2a 20 6f   number.    ** o
5150: 66 20 56 44 42 45 20 6f 70 73 20 68 61 76 65 20  f VDBE ops have 
5160: 62 65 65 6e 20 65 78 65 63 75 74 65 64 20 28 65  been executed (e
5170: 69 74 68 65 72 20 73 69 6e 63 65 20 74 68 69 73  ither since this
5180: 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 0a 20   invocation of. 
5190: 20 20 20 2a 2a 20 73 71 6c 69 74 65 33 56 64 62     ** sqlite3Vdb
51a0: 65 45 78 65 63 28 29 20 6f 72 20 73 69 6e 63 65  eExec() or since
51b0: 20 6c 61 73 74 20 74 69 6d 65 20 74 68 65 20 70   last time the p
51c0: 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b  rogress callback
51d0: 20 77 61 73 20 63 61 6c 6c 65 64 29 2e 0a 20 20   was called)..  
51e0: 20 20 2a 2a 20 49 66 20 74 68 65 20 70 72 6f 67    ** If the prog
51f0: 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 72 65  ress callback re
5200: 74 75 72 6e 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20  turns non-zero, 
5210: 65 78 69 74 20 74 68 65 20 76 69 72 74 75 61 6c  exit the virtual
5220: 20 6d 61 63 68 69 6e 65 20 77 69 74 68 0a 20 20   machine with.  
5230: 20 20 2a 2a 20 61 20 72 65 74 75 72 6e 20 63 6f    ** a return co
5240: 64 65 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 2e  de SQLITE_ABORT.
5250: 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20  .    */.    if( 
5260: 63 68 65 63 6b 50 72 6f 67 72 65 73 73 20 29 7b  checkProgress ){
5270: 0a 20 20 20 20 20 20 69 66 28 20 64 62 2d 3e 6e  .      if( db->n
5280: 50 72 6f 67 72 65 73 73 4f 70 73 3d 3d 6e 50 72  ProgressOps==nPr
5290: 6f 67 72 65 73 73 4f 70 73 20 29 7b 0a 20 20 20  ogressOps ){.   
52a0: 20 20 20 20 20 69 6e 74 20 70 72 63 3b 0a 20 20       int prc;.  
52b0: 20 20 20 20 20 20 70 72 63 20 3d 20 64 62 2d 3e        prc = db->
52c0: 78 50 72 6f 67 72 65 73 73 28 64 62 2d 3e 70 50  xProgress(db->pP
52d0: 72 6f 67 72 65 73 73 41 72 67 29 3b 0a 20 20 20  rogressArg);.   
52e0: 20 20 20 20 20 69 66 28 20 70 72 63 21 3d 30 20       if( prc!=0 
52f0: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 72 63 20  ){.          rc 
5300: 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45 52 52 55  = SQLITE_INTERRU
5310: 50 54 3b 0a 20 20 20 20 20 20 20 20 20 20 67 6f  PT;.          go
5320: 74 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f 68 61  to vdbe_error_ha
5330: 6c 74 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  lt;.        }.  
5340: 20 20 20 20 20 20 6e 50 72 6f 67 72 65 73 73 4f        nProgressO
5350: 70 73 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a  ps = 0;.      }.
5360: 20 20 20 20 20 20 6e 50 72 6f 67 72 65 73 73 4f        nProgressO
5370: 70 73 2b 2b 3b 0a 20 20 20 20 7d 0a 23 65 6e 64  ps++;.    }.#end
5380: 69 66 0a 0a 20 20 20 20 2f 2a 20 4f 6e 20 61 6e  if..    /* On an
5390: 79 20 6f 70 63 6f 64 65 20 77 69 74 68 20 74 68  y opcode with th
53a0: 65 20 22 6f 75 74 32 2d 70 72 65 72 65 6c 61 73  e "out2-prerelas
53b0: 65 22 20 74 61 67 2c 20 66 72 65 65 20 61 6e 79  e" tag, free any
53c0: 0a 20 20 20 20 2a 2a 20 65 78 74 65 72 6e 61 6c  .    ** external
53d0: 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 6f 75 74   allocations out
53e0: 20 6f 66 20 6d 65 6d 5b 70 32 5d 20 61 6e 64 20   of mem[p2] and 
53f0: 73 65 74 20 6d 65 6d 5b 70 32 5d 20 74 6f 20 62  set mem[p2] to b
5400: 65 0a 20 20 20 20 2a 2a 20 61 6e 20 75 6e 64 65  e.    ** an unde
5410: 66 69 6e 65 64 20 69 6e 74 65 67 65 72 2e 20 20  fined integer.  
5420: 4f 70 63 6f 64 65 73 20 77 69 6c 6c 20 65 69 74  Opcodes will eit
5430: 68 65 72 20 66 69 6c 6c 20 69 6e 20 74 68 65 20  her fill in the 
5440: 69 6e 74 65 67 65 72 0a 20 20 20 20 2a 2a 20 76  integer.    ** v
5450: 61 6c 75 65 20 6f 72 20 63 6f 6e 76 65 72 74 20  alue or convert 
5460: 6d 65 6d 5b 70 32 5d 20 74 6f 20 61 20 64 69 66  mem[p2] to a dif
5470: 66 65 72 65 6e 74 20 74 79 70 65 2e 0a 20 20 20  ferent type..   
5480: 20 2a 2f 0a 20 20 20 20 61 73 73 65 72 74 28 20   */.    assert( 
5490: 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 3d 3d 73 71  pOp->opflags==sq
54a0: 6c 69 74 65 33 4f 70 63 6f 64 65 50 72 6f 70 65  lite3OpcodePrope
54b0: 72 74 79 5b 70 4f 70 2d 3e 6f 70 63 6f 64 65 5d  rty[pOp->opcode]
54c0: 20 29 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d   );.    if( pOp-
54d0: 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 47  >opflags & OPFLG
54e0: 5f 4f 55 54 32 5f 50 52 45 52 45 4c 45 41 53 45  _OUT2_PRERELEASE
54f0: 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74   ){.      assert
5500: 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20  ( pOp->p2>0 );. 
5510: 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
5520: 2d 3e 70 32 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b  ->p2<=p->nMem );
5530: 0a 20 20 20 20 20 20 70 4f 75 74 20 3d 20 26 61  .      pOut = &a
5540: 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
5550: 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68      memAboutToCh
5560: 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 20  ange(p, pOut);. 
5570: 20 20 20 20 20 4d 65 6d 52 65 6c 65 61 73 65 45       MemReleaseE
5580: 78 74 28 70 4f 75 74 29 3b 0a 20 20 20 20 20 20  xt(pOut);.      
5590: 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pOut->flags = ME
55a0: 4d 5f 49 6e 74 3b 0a 20 20 20 20 7d 0a 0a 20 20  M_Int;.    }..  
55b0: 20 20 2f 2a 20 53 61 6e 69 74 79 20 63 68 65 63    /* Sanity chec
55c0: 6b 69 6e 67 20 6f 6e 20 6f 74 68 65 72 20 6f 70  king on other op
55d0: 65 72 61 6e 64 73 20 2a 2f 0a 23 69 66 64 65 66  erands */.#ifdef
55e0: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
55f0: 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70 66 6c    if( (pOp->opfl
5600: 61 67 73 20 26 20 4f 50 46 4c 47 5f 49 4e 31 29  ags & OPFLG_IN1)
5610: 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73  !=0 ){.      ass
5620: 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 29  ert( pOp->p1>0 )
5630: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
5640: 70 4f 70 2d 3e 70 31 3c 3d 70 2d 3e 6e 4d 65 6d  pOp->p1<=p->nMem
5650: 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
5660: 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d  ( memIsValid(&aM
5670: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 29 20 29 3b 0a  em[pOp->p1]) );.
5680: 20 20 20 20 20 20 52 45 47 49 53 54 45 52 5f 54        REGISTER_T
5690: 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20 26 61  RACE(pOp->p1, &a
56a0: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 29 3b 0a 20  Mem[pOp->p1]);. 
56b0: 20 20 20 7d 0a 20 20 20 20 69 66 28 20 28 70 4f     }.    if( (pO
56c0: 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50 46  p->opflags & OPF
56d0: 4c 47 5f 49 4e 32 29 21 3d 30 20 29 7b 0a 20 20  LG_IN2)!=0 ){.  
56e0: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
56f0: 3e 70 32 3e 30 20 29 3b 0a 20 20 20 20 20 20 61  >p2>0 );.      a
5700: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d  ssert( pOp->p2<=
5710: 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20  p->nMem );.     
5720: 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
5730: 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  lid(&aMem[pOp->p
5740: 32 5d 29 20 29 3b 0a 20 20 20 20 20 20 52 45 47  2]) );.      REG
5750: 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
5760: 3e 70 32 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  >p2, &aMem[pOp->
5770: 70 32 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  p2]);.    }.    
5780: 69 66 28 20 28 70 4f 70 2d 3e 6f 70 66 6c 61 67  if( (pOp->opflag
5790: 73 20 26 20 4f 50 46 4c 47 5f 49 4e 33 29 21 3d  s & OPFLG_IN3)!=
57a0: 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72  0 ){.      asser
57b0: 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a  t( pOp->p3>0 );.
57c0: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
57d0: 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29  p->p3<=p->nMem )
57e0: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
57f0: 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d  memIsValid(&aMem
5800: 5b 70 4f 70 2d 3e 70 33 5d 29 20 29 3b 0a 20 20  [pOp->p3]) );.  
5810: 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41      REGISTER_TRA
5820: 43 45 28 70 4f 70 2d 3e 70 33 2c 20 26 61 4d 65  CE(pOp->p3, &aMe
5830: 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20 20 20  m[pOp->p3]);.   
5840: 20 7d 0a 20 20 20 20 69 66 28 20 28 70 4f 70 2d   }.    if( (pOp-
5850: 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 47  >opflags & OPFLG
5860: 5f 4f 55 54 32 29 21 3d 30 20 29 7b 0a 20 20 20  _OUT2)!=0 ){.   
5870: 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
5880: 70 32 3e 30 20 29 3b 0a 20 20 20 20 20 20 61 73  p2>0 );.      as
5890: 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 70  sert( pOp->p2<=p
58a0: 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20  ->nMem );.      
58b0: 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
58c0: 28 70 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  (p, &aMem[pOp->p
58d0: 32 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  2]);.    }.    i
58e0: 66 28 20 28 70 4f 70 2d 3e 6f 70 66 6c 61 67 73  f( (pOp->opflags
58f0: 20 26 20 4f 50 46 4c 47 5f 4f 55 54 33 29 21 3d   & OPFLG_OUT3)!=
5900: 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72  0 ){.      asser
5910: 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a  t( pOp->p3>0 );.
5920: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
5930: 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29  p->p3<=p->nMem )
5940: 3b 0a 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74  ;.      memAbout
5950: 54 6f 43 68 61 6e 67 65 28 70 2c 20 26 61 4d 65  ToChange(p, &aMe
5960: 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20 20 20  m[pOp->p3]);.   
5970: 20 7d 0a 23 65 6e 64 69 66 0a 20 20 0a 20 20 20   }.#endif.  .   
5980: 20 73 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70   switch( pOp->op
5990: 63 6f 64 65 20 29 7b 0a 0a 2f 2a 2a 2a 2a 2a 2a  code ){../******
59a0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
59b0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
59c0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
59d0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
59e0: 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 57 68 61 74 20  *******.** What 
59f0: 66 6f 6c 6c 6f 77 73 20 69 73 20 61 20 6d 61 73  follows is a mas
5a00: 73 69 76 65 20 73 77 69 74 63 68 20 73 74 61 74  sive switch stat
5a10: 65 6d 65 6e 74 20 77 68 65 72 65 20 65 61 63 68  ement where each
5a20: 20 63 61 73 65 20 69 6d 70 6c 65 6d 65 6e 74 73   case implements
5a30: 20 61 0a 2a 2a 20 73 65 70 61 72 61 74 65 20 69   a.** separate i
5a40: 6e 73 74 72 75 63 74 69 6f 6e 20 69 6e 20 74 68  nstruction in th
5a50: 65 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e  e virtual machin
5a60: 65 2e 20 20 49 66 20 77 65 20 66 6f 6c 6c 6f 77  e.  If we follow
5a70: 20 74 68 65 20 75 73 75 61 6c 0a 2a 2a 20 69 6e   the usual.** in
5a80: 64 65 6e 74 61 74 69 6f 6e 20 63 6f 6e 76 65 6e  dentation conven
5a90: 74 69 6f 6e 73 2c 20 65 61 63 68 20 63 61 73 65  tions, each case
5aa0: 20 73 68 6f 75 6c 64 20 62 65 20 69 6e 64 65 6e   should be inden
5ab0: 74 65 64 20 62 79 20 36 20 73 70 61 63 65 73 2e  ted by 6 spaces.
5ac0: 20 20 42 75 74 0a 2a 2a 20 74 68 61 74 20 69 73    But.** that is
5ad0: 20 61 20 6c 6f 74 20 6f 66 20 77 61 73 74 65 64   a lot of wasted
5ae0: 20 73 70 61 63 65 20 6f 6e 20 74 68 65 20 6c 65   space on the le
5af0: 66 74 20 6d 61 72 67 69 6e 2e 20 20 53 6f 20 74  ft margin.  So t
5b00: 68 65 20 63 6f 64 65 20 77 69 74 68 69 6e 0a 2a  he code within.*
5b10: 2a 20 74 68 65 20 73 77 69 74 63 68 20 73 74 61  * the switch sta
5b20: 74 65 6d 65 6e 74 20 77 69 6c 6c 20 62 72 65 61  tement will brea
5b30: 6b 20 77 69 74 68 20 63 6f 6e 76 65 6e 74 69 6f  k with conventio
5b40: 6e 20 61 6e 64 20 62 65 20 66 6c 75 73 68 2d 6c  n and be flush-l
5b50: 65 66 74 2e 20 41 6e 6f 74 68 65 72 0a 2a 2a 20  eft. Another.** 
5b60: 62 69 67 20 63 6f 6d 6d 65 6e 74 20 28 73 69 6d  big comment (sim
5b70: 69 6c 61 72 20 74 6f 20 74 68 69 73 20 6f 6e 65  ilar to this one
5b80: 29 20 77 69 6c 6c 20 6d 61 72 6b 20 74 68 65 20  ) will mark the 
5b90: 70 6f 69 6e 74 20 69 6e 20 74 68 65 20 63 6f 64  point in the cod
5ba0: 65 20 77 68 65 72 65 0a 2a 2a 20 77 65 20 74 72  e where.** we tr
5bb0: 61 6e 73 69 74 69 6f 6e 20 62 61 63 6b 20 74 6f  ansition back to
5bc0: 20 6e 6f 72 6d 61 6c 20 69 6e 64 65 6e 74 61 74   normal indentat
5bd0: 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 66  ion..**.** The f
5be0: 6f 72 6d 61 74 74 69 6e 67 20 6f 66 20 65 61 63  ormatting of eac
5bf0: 68 20 63 61 73 65 20 69 73 20 69 6d 70 6f 72 74  h case is import
5c00: 61 6e 74 2e 20 20 54 68 65 20 6d 61 6b 65 66 69  ant.  The makefi
5c10: 6c 65 20 66 6f 72 20 53 51 4c 69 74 65 0a 2a 2a  le for SQLite.**
5c20: 20 67 65 6e 65 72 61 74 65 73 20 74 77 6f 20 43   generates two C
5c30: 20 66 69 6c 65 73 20 22 6f 70 63 6f 64 65 73 2e   files "opcodes.
5c40: 68 22 20 61 6e 64 20 22 6f 70 63 6f 64 65 73 2e  h" and "opcodes.
5c50: 63 22 20 62 79 20 73 63 61 6e 6e 69 6e 67 20 74  c" by scanning t
5c60: 68 69 73 0a 2a 2a 20 66 69 6c 65 20 6c 6f 6f 6b  his.** file look
5c70: 69 6e 67 20 66 6f 72 20 6c 69 6e 65 73 20 74 68  ing for lines th
5c80: 61 74 20 62 65 67 69 6e 20 77 69 74 68 20 22 63  at begin with "c
5c90: 61 73 65 20 4f 50 5f 22 2e 20 20 54 68 65 20 6f  ase OP_".  The o
5ca0: 70 63 6f 64 65 73 2e 68 20 66 69 6c 65 73 0a 2a  pcodes.h files.*
5cb0: 2a 20 77 69 6c 6c 20 62 65 20 66 69 6c 6c 65 64  * will be filled
5cc0: 20 77 69 74 68 20 23 64 65 66 69 6e 65 73 20 74   with #defines t
5cd0: 68 61 74 20 67 69 76 65 20 75 6e 69 71 75 65 20  hat give unique 
5ce0: 69 6e 74 65 67 65 72 20 76 61 6c 75 65 73 20 74  integer values t
5cf0: 6f 20 65 61 63 68 0a 2a 2a 20 6f 70 63 6f 64 65  o each.** opcode
5d00: 20 61 6e 64 20 74 68 65 20 6f 70 63 6f 64 65 73   and the opcodes
5d10: 2e 63 20 66 69 6c 65 20 69 73 20 66 69 6c 6c 65  .c file is fille
5d20: 64 20 77 69 74 68 20 61 6e 20 61 72 72 61 79 20  d with an array 
5d30: 6f 66 20 73 74 72 69 6e 67 73 20 77 68 65 72 65  of strings where
5d40: 0a 2a 2a 20 65 61 63 68 20 73 74 72 69 6e 67 20  .** each string 
5d50: 69 73 20 74 68 65 20 73 79 6d 62 6f 6c 69 63 20  is the symbolic 
5d60: 6e 61 6d 65 20 66 6f 72 20 74 68 65 20 63 6f 72  name for the cor
5d70: 72 65 73 70 6f 6e 64 69 6e 67 20 6f 70 63 6f 64  responding opcod
5d80: 65 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 63 61  e.  If the.** ca
5d90: 73 65 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  se statement is 
5da0: 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20 63 6f  followed by a co
5db0: 6d 6d 65 6e 74 20 6f 66 20 74 68 65 20 66 6f 72  mment of the for
5dc0: 6d 20 22 2f 23 20 73 61 6d 65 20 61 73 20 2e 2e  m "/# same as ..
5dd0: 2e 20 23 2f 22 0a 2a 2a 20 74 68 61 74 20 63 6f  . #/".** that co
5de0: 6d 6d 65 6e 74 20 69 73 20 75 73 65 64 20 74 6f  mment is used to
5df0: 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20 70   determine the p
5e00: 61 72 74 69 63 75 6c 61 72 20 76 61 6c 75 65 20  articular value 
5e10: 6f 66 20 74 68 65 20 6f 70 63 6f 64 65 2e 0a 2a  of the opcode..*
5e20: 2a 0a 2a 2a 20 4f 74 68 65 72 20 6b 65 79 77 6f  *.** Other keywo
5e30: 72 64 73 20 69 6e 20 74 68 65 20 63 6f 6d 6d 65  rds in the comme
5e40: 6e 74 20 74 68 61 74 20 66 6f 6c 6c 6f 77 73 20  nt that follows 
5e50: 65 61 63 68 20 63 61 73 65 20 61 72 65 20 75 73  each case are us
5e60: 65 64 20 74 6f 0a 2a 2a 20 63 6f 6e 73 74 72 75  ed to.** constru
5e70: 63 74 20 74 68 65 20 4f 50 46 4c 47 5f 49 4e 49  ct the OPFLG_INI
5e80: 54 49 41 4c 49 5a 45 52 20 76 61 6c 75 65 20 74  TIALIZER value t
5e90: 68 61 74 20 69 6e 69 74 69 61 6c 69 7a 65 73 20  hat initializes 
5ea0: 6f 70 63 6f 64 65 50 72 6f 70 65 72 74 79 5b 5d  opcodeProperty[]
5eb0: 2e 0a 2a 2a 20 4b 65 79 77 6f 72 64 73 20 69 6e  ..** Keywords in
5ec0: 63 6c 75 64 65 3a 20 69 6e 31 2c 20 69 6e 32 2c  clude: in1, in2,
5ed0: 20 69 6e 33 2c 20 6f 75 74 32 5f 70 72 65 72 65   in3, out2_prere
5ee0: 6c 65 61 73 65 2c 20 6f 75 74 32 2c 20 6f 75 74  lease, out2, out
5ef0: 33 2e 20 20 53 65 65 0a 2a 2a 20 74 68 65 20 6d  3.  See.** the m
5f00: 6b 6f 70 63 6f 64 65 68 2e 61 77 6b 20 73 63 72  kopcodeh.awk scr
5f10: 69 70 74 20 66 6f 72 20 61 64 64 69 74 69 6f 6e  ipt for addition
5f20: 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a  al information..
5f30: 2a 2a 0a 2a 2a 20 44 6f 63 75 6d 65 6e 74 61 74  **.** Documentat
5f40: 69 6f 6e 20 61 62 6f 75 74 20 56 44 42 45 20 6f  ion about VDBE o
5f50: 70 63 6f 64 65 73 20 69 73 20 67 65 6e 65 72 61  pcodes is genera
5f60: 74 65 64 20 62 79 20 73 63 61 6e 6e 69 6e 67 20  ted by scanning 
5f70: 74 68 69 73 20 66 69 6c 65 0a 2a 2a 20 66 6f 72  this file.** for
5f80: 20 6c 69 6e 65 73 20 6f 66 20 74 68 61 74 20 63   lines of that c
5f90: 6f 6e 74 61 69 6e 20 22 4f 70 63 6f 64 65 3a 22  ontain "Opcode:"
5fa0: 2e 20 20 54 68 61 74 20 6c 69 6e 65 20 61 6e 64  .  That line and
5fb0: 20 61 6c 6c 20 73 75 62 73 65 71 75 65 6e 74 0a   all subsequent.
5fc0: 2a 2a 20 63 6f 6d 6d 65 6e 74 20 6c 69 6e 65 73  ** comment lines
5fd0: 20 61 72 65 20 75 73 65 64 20 69 6e 20 74 68 65   are used in the
5fe0: 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20 74   generation of t
5ff0: 68 65 20 6f 70 63 6f 64 65 2e 68 74 6d 6c 20 64  he opcode.html d
6000: 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 0a 2a 2a 20  ocumentation.** 
6010: 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53 55 4d 4d  file..**.** SUMM
6020: 41 52 59 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 46  ARY:.**.**     F
6030: 6f 72 6d 61 74 74 69 6e 67 20 69 73 20 69 6d 70  ormatting is imp
6040: 6f 72 74 61 6e 74 20 74 6f 20 73 63 72 69 70 74  ortant to script
6050: 73 20 74 68 61 74 20 73 63 61 6e 20 74 68 69 73  s that scan this
6060: 20 66 69 6c 65 2e 0a 2a 2a 20 20 20 20 20 44 6f   file..**     Do
6070: 20 6e 6f 74 20 64 65 76 69 61 74 65 20 66 72 6f   not deviate fro
6080: 6d 20 74 68 65 20 66 6f 72 6d 61 74 74 69 6e 67  m the formatting
6090: 20 73 74 79 6c 65 20 63 75 72 72 65 6e 74 6c 79   style currently
60a0: 20 69 6e 20 75 73 65 2e 0a 2a 2a 0a 2a 2a 2a 2a   in use..**.****
60b0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
60c0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
60d0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
60e0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
60f0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 2f 2a 20 4f  *********/../* O
6100: 70 63 6f 64 65 3a 20 20 47 6f 74 6f 20 2a 20 50  pcode:  Goto * P
6110: 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 6e  2 * * *.**.** An
6120: 20 75 6e 63 6f 6e 64 69 74 69 6f 6e 61 6c 20 6a   unconditional j
6130: 75 6d 70 20 74 6f 20 61 64 64 72 65 73 73 20 50  ump to address P
6140: 32 2e 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 69  2..** The next i
6150: 6e 73 74 72 75 63 74 69 6f 6e 20 65 78 65 63 75  nstruction execu
6160: 74 65 64 20 77 69 6c 6c 20 62 65 20 0a 2a 2a 20  ted will be .** 
6170: 74 68 65 20 6f 6e 65 20 61 74 20 69 6e 64 65 78  the one at index
6180: 20 50 32 20 66 72 6f 6d 20 74 68 65 20 62 65 67   P2 from the beg
6190: 69 6e 6e 69 6e 67 20 6f 66 0a 2a 2a 20 74 68 65  inning of.** the
61a0: 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f 0a 63 61 73   program..*/.cas
61b0: 65 20 4f 50 5f 47 6f 74 6f 3a 20 7b 20 20 20 20  e OP_Goto: {    
61c0: 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
61d0: 20 2a 2f 0a 20 20 43 48 45 43 4b 5f 46 4f 52 5f   */.  CHECK_FOR_
61e0: 49 4e 54 45 52 52 55 50 54 3b 0a 20 20 70 63 20  INTERRUPT;.  pc 
61f0: 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
6200: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
6210: 63 6f 64 65 3a 20 20 47 6f 73 75 62 20 50 31 20  code:  Gosub P1 
6220: 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57  P2 * * *.**.** W
6230: 72 69 74 65 20 74 68 65 20 63 75 72 72 65 6e 74  rite the current
6240: 20 61 64 64 72 65 73 73 20 6f 6e 74 6f 20 72 65   address onto re
6250: 67 69 73 74 65 72 20 50 31 0a 2a 2a 20 61 6e 64  gister P1.** and
6260: 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 61 64   then jump to ad
6270: 64 72 65 73 73 20 50 32 2e 0a 2a 2f 0a 63 61 73  dress P2..*/.cas
6280: 65 20 4f 50 5f 47 6f 73 75 62 3a 20 7b 20 20 20  e OP_Gosub: {   
6290: 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
62a0: 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20  , in1 */.  pIn1 
62b0: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
62c0: 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 49 6e  ;.  assert( (pIn
62d0: 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 44  1->flags & MEM_D
62e0: 79 6e 29 3d 3d 30 20 29 3b 0a 20 20 6d 65 6d 41  yn)==0 );.  memA
62f0: 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
6300: 70 49 6e 31 29 3b 0a 20 20 70 49 6e 31 2d 3e 66  pIn1);.  pIn1->f
6310: 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a  lags = MEM_Int;.
6320: 20 20 70 49 6e 31 2d 3e 75 2e 69 20 3d 20 70 63    pIn1->u.i = pc
6330: 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41  ;.  REGISTER_TRA
6340: 43 45 28 70 4f 70 2d 3e 70 31 2c 20 70 49 6e 31  CE(pOp->p1, pIn1
6350: 29 3b 0a 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70  );.  pc = pOp->p
6360: 32 20 2d 20 31 3b 0a 20 20 62 72 65 61 6b 3b 0a  2 - 1;.  break;.
6370: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 52  }../* Opcode:  R
6380: 65 74 75 72 6e 20 50 31 20 2a 20 2a 20 2a 20 2a  eturn P1 * * * *
6390: 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 74  .**.** Jump to t
63a0: 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74  he next instruct
63b0: 69 6f 6e 20 61 66 74 65 72 20 74 68 65 20 61 64  ion after the ad
63c0: 64 72 65 73 73 20 69 6e 20 72 65 67 69 73 74 65  dress in registe
63d0: 72 20 50 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  r P1..*/.case OP
63e0: 5f 52 65 74 75 72 6e 3a 20 7b 20 20 20 20 20 20  _Return: {      
63f0: 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20       /* in1 */. 
6400: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
6410: 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
6420: 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20  ( pIn1->flags & 
6430: 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 70 63 20  MEM_Int );.  pc 
6440: 3d 20 28 69 6e 74 29 70 49 6e 31 2d 3e 75 2e 69  = (int)pIn1->u.i
6450: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
6460: 20 4f 70 63 6f 64 65 3a 20 20 59 69 65 6c 64 20   Opcode:  Yield 
6470: 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  P1 * * * *.**.**
6480: 20 53 77 61 70 20 74 68 65 20 70 72 6f 67 72 61   Swap the progra
6490: 6d 20 63 6f 75 6e 74 65 72 20 77 69 74 68 20 74  m counter with t
64a0: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
64b0: 73 74 65 72 20 50 31 2e 0a 2a 2f 0a 63 61 73 65  ster P1..*/.case
64c0: 20 4f 50 5f 59 69 65 6c 64 3a 20 7b 20 20 20 20   OP_Yield: {    
64d0: 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a          /* in1 *
64e0: 2f 0a 20 20 69 6e 74 20 70 63 44 65 73 74 3b 0a  /.  int pcDest;.
64f0: 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
6500: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
6510: 74 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  t( (pIn1->flags 
6520: 26 20 4d 45 4d 5f 44 79 6e 29 3d 3d 30 20 29 3b  & MEM_Dyn)==0 );
6530: 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d  .  pIn1->flags =
6540: 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 70 63 44 65   MEM_Int;.  pcDe
6550: 73 74 20 3d 20 28 69 6e 74 29 70 49 6e 31 2d 3e  st = (int)pIn1->
6560: 75 2e 69 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69  u.i;.  pIn1->u.i
6570: 20 3d 20 70 63 3b 0a 20 20 52 45 47 49 53 54 45   = pc;.  REGISTE
6580: 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c  R_TRACE(pOp->p1,
6590: 20 70 49 6e 31 29 3b 0a 20 20 70 63 20 3d 20 70   pIn1);.  pc = p
65a0: 63 44 65 73 74 3b 0a 20 20 62 72 65 61 6b 3b 0a  cDest;.  break;.
65b0: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 48  }../* Opcode:  H
65c0: 61 6c 74 49 66 4e 75 6c 6c 20 20 50 31 20 50 32  altIfNull  P1 P2
65d0: 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 43   P3 P4 *.**.** C
65e0: 68 65 63 6b 20 74 68 65 20 76 61 6c 75 65 20 69  heck the value i
65f0: 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 20 20  n register P3.  
6600: 49 66 20 69 74 20 69 73 20 4e 55 4c 4c 20 74 68  If it is NULL th
6610: 65 6e 20 48 61 6c 74 20 75 73 69 6e 67 0a 2a 2a  en Halt using.**
6620: 20 70 61 72 61 6d 65 74 65 72 20 50 31 2c 20 50   parameter P1, P
6630: 32 2c 20 61 6e 64 20 50 34 20 61 73 20 69 66 20  2, and P4 as if 
6640: 74 68 69 73 20 77 65 72 65 20 61 20 48 61 6c 74  this were a Halt
6650: 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 49   instruction.  I
6660: 66 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69  f the.** value i
6670: 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73  n register P3 is
6680: 20 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68 65 6e 20   not NULL, then 
6690: 74 68 69 73 20 72 6f 75 74 69 6e 65 20 69 73 20  this routine is 
66a0: 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 63 61 73 65  a no-op..*/.case
66b0: 20 4f 50 5f 48 61 6c 74 49 66 4e 75 6c 6c 3a 20   OP_HaltIfNull: 
66c0: 7b 20 20 20 20 20 20 2f 2a 20 69 6e 33 20 2a 2f  {      /* in3 */
66d0: 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b  .  pIn3 = &aMem[
66e0: 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20  pOp->p3];.  if( 
66f0: 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn3->flags & M
6700: 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 20 62 72  EM_Null)==0 ) br
6710: 65 61 6b 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74  eak;.  /* Fall t
6720: 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f 48  hrough into OP_H
6730: 61 6c 74 20 2a 2f 0a 7d 0a 0a 2f 2a 20 4f 70 63  alt */.}../* Opc
6740: 6f 64 65 3a 20 20 48 61 6c 74 20 50 31 20 50 32  ode:  Halt P1 P2
6750: 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 45 78   * P4 *.**.** Ex
6760: 69 74 20 69 6d 6d 65 64 69 61 74 65 6c 79 2e 20  it immediately. 
6770: 20 41 6c 6c 20 6f 70 65 6e 20 63 75 72 73 6f 72   All open cursor
6780: 73 2c 20 65 74 63 20 61 72 65 20 63 6c 6f 73 65  s, etc are close
6790: 64 0a 2a 2a 20 61 75 74 6f 6d 61 74 69 63 61 6c  d.** automatical
67a0: 6c 79 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20  ly..**.** P1 is 
67b0: 74 68 65 20 72 65 73 75 6c 74 20 63 6f 64 65 20  the result code 
67c0: 72 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69  returned by sqli
67d0: 74 65 33 5f 65 78 65 63 28 29 2c 20 73 71 6c 69  te3_exec(), sqli
67e0: 74 65 33 5f 72 65 73 65 74 28 29 2c 0a 2a 2a 20  te3_reset(),.** 
67f0: 6f 72 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c  or sqlite3_final
6800: 69 7a 65 28 29 2e 20 20 46 6f 72 20 61 20 6e 6f  ize().  For a no
6810: 72 6d 61 6c 20 68 61 6c 74 2c 20 74 68 69 73 20  rmal halt, this 
6820: 73 68 6f 75 6c 64 20 62 65 20 53 51 4c 49 54 45  should be SQLITE
6830: 5f 4f 4b 20 28 30 29 2e 0a 2a 2a 20 46 6f 72 20  _OK (0)..** For 
6840: 65 72 72 6f 72 73 2c 20 69 74 20 63 61 6e 20 62  errors, it can b
6850: 65 20 73 6f 6d 65 20 6f 74 68 65 72 20 76 61 6c  e some other val
6860: 75 65 2e 20 20 49 66 20 50 31 21 3d 30 20 74 68  ue.  If P1!=0 th
6870: 65 6e 20 50 32 20 77 69 6c 6c 20 64 65 74 65 72  en P2 will deter
6880: 6d 69 6e 65 0a 2a 2a 20 77 68 65 74 68 65 72 20  mine.** whether 
6890: 6f 72 20 6e 6f 74 20 74 6f 20 72 6f 6c 6c 62 61  or not to rollba
68a0: 63 6b 20 74 68 65 20 63 75 72 72 65 6e 74 20 74  ck the current t
68b0: 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 44 6f 20  ransaction.  Do 
68c0: 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20  not rollback.** 
68d0: 69 66 20 50 32 3d 3d 4f 45 5f 46 61 69 6c 2e 20  if P2==OE_Fail. 
68e0: 44 6f 20 74 68 65 20 72 6f 6c 6c 62 61 63 6b 20  Do the rollback 
68f0: 69 66 20 50 32 3d 3d 4f 45 5f 52 6f 6c 6c 62 61  if P2==OE_Rollba
6900: 63 6b 2e 20 20 49 66 20 50 32 3d 3d 4f 45 5f 41  ck.  If P2==OE_A
6910: 62 6f 72 74 2c 0a 2a 2a 20 74 68 65 6e 20 62 61  bort,.** then ba
6920: 63 6b 20 6f 75 74 20 61 6c 6c 20 63 68 61 6e 67  ck out all chang
6930: 65 73 20 74 68 61 74 20 68 61 76 65 20 6f 63 63  es that have occ
6940: 75 72 72 65 64 20 64 75 72 69 6e 67 20 74 68 69  urred during thi
6950: 73 20 65 78 65 63 75 74 69 6f 6e 20 6f 66 20 74  s execution of t
6960: 68 65 0a 2a 2a 20 56 44 42 45 2c 20 62 75 74 20  he.** VDBE, but 
6970: 64 6f 20 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 20  do not rollback 
6980: 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e  the transaction.
6990: 20 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69 73   .**.** If P4 is
69a0: 20 6e 6f 74 20 6e 75 6c 6c 20 74 68 65 6e 20 69   not null then i
69b0: 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20 6d 65  t is an error me
69c0: 73 73 61 67 65 20 73 74 72 69 6e 67 2e 0a 2a 2a  ssage string..**
69d0: 0a 2a 2a 20 54 68 65 72 65 20 69 73 20 61 6e 20  .** There is an 
69e0: 69 6d 70 6c 69 65 64 20 22 48 61 6c 74 20 30 20  implied "Halt 0 
69f0: 30 20 30 22 20 69 6e 73 74 72 75 63 74 69 6f 6e  0 0" instruction
6a00: 20 69 6e 73 65 72 74 65 64 20 61 74 20 74 68 65   inserted at the
6a10: 20 76 65 72 79 20 65 6e 64 20 6f 66 0a 2a 2a 20   very end of.** 
6a20: 65 76 65 72 79 20 70 72 6f 67 72 61 6d 2e 20 20  every program.  
6a30: 53 6f 20 61 20 6a 75 6d 70 20 70 61 73 74 20 74  So a jump past t
6a40: 68 65 20 6c 61 73 74 20 69 6e 73 74 72 75 63 74  he last instruct
6a50: 69 6f 6e 20 6f 66 20 74 68 65 20 70 72 6f 67 72  ion of the progr
6a60: 61 6d 0a 2a 2a 20 69 73 20 74 68 65 20 73 61 6d  am.** is the sam
6a70: 65 20 61 73 20 65 78 65 63 75 74 69 6e 67 20 48  e as executing H
6a80: 61 6c 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  alt..*/.case OP_
6a90: 48 61 6c 74 3a 20 7b 0a 20 20 69 66 28 20 70 4f  Halt: {.  if( pO
6aa0: 70 2d 3e 70 31 3d 3d 53 51 4c 49 54 45 5f 4f 4b  p->p1==SQLITE_OK
6ab0: 20 26 26 20 70 2d 3e 70 46 72 61 6d 65 20 29 7b   && p->pFrame ){
6ac0: 0a 20 20 20 20 2f 2a 20 48 61 6c 74 20 74 68 65  .    /* Halt the
6ad0: 20 73 75 62 2d 70 72 6f 67 72 61 6d 2e 20 52 65   sub-program. Re
6ae0: 74 75 72 6e 20 63 6f 6e 74 72 6f 6c 20 74 6f 20  turn control to 
6af0: 74 68 65 20 70 61 72 65 6e 74 20 66 72 61 6d 65  the parent frame
6b00: 2e 20 2a 2f 0a 20 20 20 20 56 64 62 65 46 72 61  . */.    VdbeFra
6b10: 6d 65 20 2a 70 46 72 61 6d 65 20 3d 20 70 2d 3e  me *pFrame = p->
6b20: 70 46 72 61 6d 65 3b 0a 20 20 20 20 70 2d 3e 70  pFrame;.    p->p
6b30: 46 72 61 6d 65 20 3d 20 70 46 72 61 6d 65 2d 3e  Frame = pFrame->
6b40: 70 50 61 72 65 6e 74 3b 0a 20 20 20 20 70 2d 3e  pParent;.    p->
6b50: 6e 46 72 61 6d 65 2d 2d 3b 0a 20 20 20 20 73 71  nFrame--;.    sq
6b60: 6c 69 74 65 33 56 64 62 65 53 65 74 43 68 61 6e  lite3VdbeSetChan
6b70: 67 65 73 28 64 62 2c 20 70 2d 3e 6e 43 68 61 6e  ges(db, p->nChan
6b80: 67 65 29 3b 0a 20 20 20 20 70 63 20 3d 20 73 71  ge);.    pc = sq
6b90: 6c 69 74 65 33 56 64 62 65 46 72 61 6d 65 52 65  lite3VdbeFrameRe
6ba0: 73 74 6f 72 65 28 70 46 72 61 6d 65 29 3b 0a 20  store(pFrame);. 
6bb0: 20 20 20 6c 61 73 74 52 6f 77 69 64 20 3d 20 64     lastRowid = d
6bc0: 62 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20  b->lastRowid;.  
6bd0: 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 4f    if( pOp->p2==O
6be0: 45 5f 49 67 6e 6f 72 65 20 29 7b 0a 20 20 20 20  E_Ignore ){.    
6bf0: 20 20 2f 2a 20 49 6e 73 74 72 75 63 74 69 6f 6e    /* Instruction
6c00: 20 70 63 20 69 73 20 74 68 65 20 4f 50 5f 50 72   pc is the OP_Pr
6c10: 6f 67 72 61 6d 20 74 68 61 74 20 69 6e 76 6f 6b  ogram that invok
6c20: 65 64 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72  ed the sub-progr
6c30: 61 6d 20 0a 20 20 20 20 20 20 2a 2a 20 63 75 72  am .      ** cur
6c40: 72 65 6e 74 6c 79 20 62 65 69 6e 67 20 68 61 6c  rently being hal
6c50: 74 65 64 2e 20 49 66 20 74 68 65 20 70 32 20 69  ted. If the p2 i
6c60: 6e 73 74 72 75 63 74 69 6f 6e 20 6f 66 20 74 68  nstruction of th
6c70: 69 73 20 4f 50 5f 48 61 6c 74 0a 20 20 20 20 20  is OP_Halt.     
6c80: 20 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 20   ** instruction 
6c90: 69 73 20 73 65 74 20 74 6f 20 4f 45 5f 49 67 6e  is set to OE_Ign
6ca0: 6f 72 65 2c 20 74 68 65 6e 20 74 68 65 20 73 75  ore, then the su
6cb0: 62 2d 70 72 6f 67 72 61 6d 20 69 73 20 74 68 72  b-program is thr
6cc0: 6f 77 69 6e 67 0a 20 20 20 20 20 20 2a 2a 20 61  owing.      ** a
6cd0: 6e 20 49 47 4e 4f 52 45 20 65 78 63 65 70 74 69  n IGNORE excepti
6ce0: 6f 6e 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65  on. In this case
6cf0: 20 6a 75 6d 70 20 74 6f 20 74 68 65 20 61 64 64   jump to the add
6d00: 72 65 73 73 20 73 70 65 63 69 66 69 65 64 0a 20  ress specified. 
6d10: 20 20 20 20 20 2a 2a 20 61 73 20 74 68 65 20 70       ** as the p
6d20: 32 20 6f 66 20 74 68 65 20 63 61 6c 6c 69 6e 67  2 of the calling
6d30: 20 4f 50 5f 50 72 6f 67 72 61 6d 2e 20 20 2a 2f   OP_Program.  */
6d40: 0a 20 20 20 20 20 20 70 63 20 3d 20 70 2d 3e 61  .      pc = p->a
6d50: 4f 70 5b 70 63 5d 2e 70 32 2d 31 3b 0a 20 20 20  Op[pc].p2-1;.   
6d60: 20 7d 0a 20 20 20 20 61 4f 70 20 3d 20 70 2d 3e   }.    aOp = p->
6d70: 61 4f 70 3b 0a 20 20 20 20 61 4d 65 6d 20 3d 20  aOp;.    aMem = 
6d80: 70 2d 3e 61 4d 65 6d 3b 0a 20 20 20 20 62 72 65  p->aMem;.    bre
6d90: 61 6b 3b 0a 20 20 7d 0a 0a 20 20 70 2d 3e 72 63  ak;.  }..  p->rc
6da0: 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 2d   = pOp->p1;.  p-
6db0: 3e 65 72 72 6f 72 41 63 74 69 6f 6e 20 3d 20 28  >errorAction = (
6dc0: 75 38 29 70 4f 70 2d 3e 70 32 3b 0a 20 20 70 2d  u8)pOp->p2;.  p-
6dd0: 3e 70 63 20 3d 20 70 63 3b 0a 20 20 69 66 28 20  >pc = pc;.  if( 
6de0: 70 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20 20  pOp->p4.z ){.   
6df0: 20 61 73 73 65 72 74 28 20 70 2d 3e 72 63 21 3d   assert( p->rc!=
6e00: 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 20 20 20  SQLITE_OK );.   
6e10: 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
6e20: 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64  g(&p->zErrMsg, d
6e30: 62 2c 20 22 25 73 22 2c 20 70 4f 70 2d 3e 70 34  b, "%s", pOp->p4
6e40: 2e 7a 29 3b 0a 20 20 20 20 74 65 73 74 63 61 73  .z);.    testcas
6e50: 65 28 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c  e( sqlite3Global
6e60: 43 6f 6e 66 69 67 2e 78 4c 6f 67 21 3d 30 20 29  Config.xLog!=0 )
6e70: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 6c 6f  ;.    sqlite3_lo
6e80: 67 28 70 4f 70 2d 3e 70 31 2c 20 22 61 62 6f 72  g(pOp->p1, "abor
6e90: 74 20 61 74 20 25 64 20 69 6e 20 5b 25 73 5d 3a  t at %d in [%s]:
6ea0: 20 25 73 22 2c 20 70 63 2c 20 70 2d 3e 7a 53 71   %s", pc, p->zSq
6eb0: 6c 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20  l, pOp->p4.z);. 
6ec0: 20 7d 65 6c 73 65 20 69 66 28 20 70 2d 3e 72 63   }else if( p->rc
6ed0: 20 29 7b 0a 20 20 20 20 74 65 73 74 63 61 73 65   ){.    testcase
6ee0: 28 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43  ( sqlite3GlobalC
6ef0: 6f 6e 66 69 67 2e 78 4c 6f 67 21 3d 30 20 29 3b  onfig.xLog!=0 );
6f00: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 6c 6f 67  .    sqlite3_log
6f10: 28 70 4f 70 2d 3e 70 31 2c 20 22 63 6f 6e 73 74  (pOp->p1, "const
6f20: 72 61 69 6e 74 20 66 61 69 6c 65 64 20 61 74 20  raint failed at 
6f30: 25 64 20 69 6e 20 5b 25 73 5d 22 2c 20 70 63 2c  %d in [%s]", pc,
6f40: 20 70 2d 3e 7a 53 71 6c 29 3b 0a 20 20 7d 0a 20   p->zSql);.  }. 
6f50: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
6f60: 65 48 61 6c 74 28 70 29 3b 0a 20 20 61 73 73 65  eHalt(p);.  asse
6f70: 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42  rt( rc==SQLITE_B
6f80: 55 53 59 20 7c 7c 20 72 63 3d 3d 53 51 4c 49 54  USY || rc==SQLIT
6f90: 45 5f 4f 4b 20 7c 7c 20 72 63 3d 3d 53 51 4c 49  E_OK || rc==SQLI
6fa0: 54 45 5f 45 52 52 4f 52 20 29 3b 0a 20 20 69 66  TE_ERROR );.  if
6fb0: 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53  ( rc==SQLITE_BUS
6fc0: 59 20 29 7b 0a 20 20 20 20 70 2d 3e 72 63 20 3d  Y ){.    p->rc =
6fd0: 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53   rc = SQLITE_BUS
6fe0: 59 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  Y;.  }else{.    
6ff0: 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49  assert( rc==SQLI
7000: 54 45 5f 4f 4b 20 7c 7c 20 70 2d 3e 72 63 3d 3d  TE_OK || p->rc==
7010: 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e  SQLITE_CONSTRAIN
7020: 54 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  T );.    assert(
7030: 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c   rc==SQLITE_OK |
7040: 7c 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43  | db->nDeferredC
7050: 6f 6e 73 3e 30 20 29 3b 0a 20 20 20 20 72 63 20  ons>0 );.    rc 
7060: 3d 20 70 2d 3e 72 63 20 3f 20 53 51 4c 49 54 45  = p->rc ? SQLITE
7070: 5f 45 52 52 4f 52 20 3a 20 53 51 4c 49 54 45 5f  _ERROR : SQLITE_
7080: 44 4f 4e 45 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f  DONE;.  }.  goto
7090: 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 7d 0a   vdbe_return;.}.
70a0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 74 65  ./* Opcode: Inte
70b0: 67 65 72 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ger P1 P2 * * *.
70c0: 2a 2a 0a 2a 2a 20 54 68 65 20 33 32 2d 62 69 74  **.** The 32-bit
70d0: 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 50   integer value P
70e0: 31 20 69 73 20 77 72 69 74 74 65 6e 20 69 6e 74  1 is written int
70f0: 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  o register P2..*
7100: 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74 65 67 65  /.case OP_Intege
7110: 72 3a 20 7b 20 20 20 20 20 20 20 20 20 2f 2a 20  r: {         /* 
7120: 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20  out2-prerelease 
7130: 2a 2f 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  */.  pOut->u.i =
7140: 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 62 72 65 61   pOp->p1;.  brea
7150: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
7160: 20 49 6e 74 36 34 20 2a 20 50 32 20 2a 20 50 34   Int64 * P2 * P4
7170: 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61   *.**.** P4 is a
7180: 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 36 34   pointer to a 64
7190: 2d 62 69 74 20 69 6e 74 65 67 65 72 20 76 61 6c  -bit integer val
71a0: 75 65 2e 0a 2a 2a 20 57 72 69 74 65 20 74 68 61  ue..** Write tha
71b0: 74 20 76 61 6c 75 65 20 69 6e 74 6f 20 72 65 67  t value into reg
71c0: 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73  ister P2..*/.cas
71d0: 65 20 4f 50 5f 49 6e 74 36 34 3a 20 7b 20 20 20  e OP_Int64: {   
71e0: 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d          /* out2-
71f0: 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20  prerelease */.  
7200: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e  assert( pOp->p4.
7210: 70 49 36 34 21 3d 30 20 29 3b 0a 20 20 70 4f 75  pI64!=0 );.  pOu
7220: 74 2d 3e 75 2e 69 20 3d 20 2a 70 4f 70 2d 3e 70  t->u.i = *pOp->p
7230: 34 2e 70 49 36 34 3b 0a 20 20 62 72 65 61 6b 3b  4.pI64;.  break;
7240: 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .}..#ifndef SQLI
7250: 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47  TE_OMIT_FLOATING
7260: 5f 50 4f 49 4e 54 0a 2f 2a 20 4f 70 63 6f 64 65  _POINT./* Opcode
7270: 3a 20 52 65 61 6c 20 2a 20 50 32 20 2a 20 50 34  : Real * P2 * P4
7280: 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61   *.**.** P4 is a
7290: 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 36 34   pointer to a 64
72a0: 2d 62 69 74 20 66 6c 6f 61 74 69 6e 67 20 70 6f  -bit floating po
72b0: 69 6e 74 20 76 61 6c 75 65 2e 0a 2a 2a 20 57 72  int value..** Wr
72c0: 69 74 65 20 74 68 61 74 20 76 61 6c 75 65 20 69  ite that value i
72d0: 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e  nto register P2.
72e0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 61 6c  .*/.case OP_Real
72f0: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f  : {            /
7300: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 46 4c 4f  * same as TK_FLO
7310: 41 54 2c 20 6f 75 74 32 2d 70 72 65 72 65 6c 65  AT, out2-prerele
7320: 61 73 65 20 2a 2f 0a 20 20 70 4f 75 74 2d 3e 66  ase */.  pOut->f
7330: 6c 61 67 73 20 3d 20 4d 45 4d 5f 52 65 61 6c 3b  lags = MEM_Real;
7340: 0a 20 20 61 73 73 65 72 74 28 20 21 73 71 6c 69  .  assert( !sqli
7350: 74 65 33 49 73 4e 61 4e 28 2a 70 4f 70 2d 3e 70  te3IsNaN(*pOp->p
7360: 34 2e 70 52 65 61 6c 29 20 29 3b 0a 20 20 70 4f  4.pReal) );.  pO
7370: 75 74 2d 3e 72 20 3d 20 2a 70 4f 70 2d 3e 70 34  ut->r = *pOp->p4
7380: 2e 70 52 65 61 6c 3b 0a 20 20 62 72 65 61 6b 3b  .pReal;.  break;
7390: 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70  .}.#endif../* Op
73a0: 63 6f 64 65 3a 20 53 74 72 69 6e 67 38 20 2a 20  code: String8 * 
73b0: 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20  P2 * P4 *.**.** 
73c0: 50 34 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 6e  P4 points to a n
73d0: 75 6c 20 74 65 72 6d 69 6e 61 74 65 64 20 55 54  ul terminated UT
73e0: 46 2d 38 20 73 74 72 69 6e 67 2e 20 54 68 69 73  F-8 string. This
73f0: 20 6f 70 63 6f 64 65 20 69 73 20 74 72 61 6e 73   opcode is trans
7400: 66 6f 72 6d 65 64 20 0a 2a 2a 20 69 6e 74 6f 20  formed .** into 
7410: 61 6e 20 4f 50 5f 53 74 72 69 6e 67 20 62 65 66  an OP_String bef
7420: 6f 72 65 20 69 74 20 69 73 20 65 78 65 63 75 74  ore it is execut
7430: 65 64 20 66 6f 72 20 74 68 65 20 66 69 72 73 74  ed for the first
7440: 20 74 69 6d 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f   time..*/.case O
7450: 50 5f 53 74 72 69 6e 67 38 3a 20 7b 20 20 20 20  P_String8: {    
7460: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
7470: 54 4b 5f 53 54 52 49 4e 47 2c 20 6f 75 74 32 2d  TK_STRING, out2-
7480: 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20  prerelease */.  
7490: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e  assert( pOp->p4.
74a0: 7a 21 3d 30 20 29 3b 0a 20 20 70 4f 70 2d 3e 6f  z!=0 );.  pOp->o
74b0: 70 63 6f 64 65 20 3d 20 4f 50 5f 53 74 72 69 6e  pcode = OP_Strin
74c0: 67 3b 0a 20 20 70 4f 70 2d 3e 70 31 20 3d 20 73  g;.  pOp->p1 = s
74d0: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 70  qlite3Strlen30(p
74e0: 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 0a 23 69 66 6e  Op->p4.z);..#ifn
74f0: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
7500: 55 54 46 31 36 0a 20 20 69 66 28 20 65 6e 63 6f  UTF16.  if( enco
7510: 64 69 6e 67 21 3d 53 51 4c 49 54 45 5f 55 54 46  ding!=SQLITE_UTF
7520: 38 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71  8 ){.    rc = sq
7530: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 53  lite3VdbeMemSetS
7540: 74 72 28 70 4f 75 74 2c 20 70 4f 70 2d 3e 70 34  tr(pOut, pOp->p4
7550: 2e 7a 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 55  .z, -1, SQLITE_U
7560: 54 46 38 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  TF8, SQLITE_STAT
7570: 49 43 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d  IC);.    if( rc=
7580: 3d 53 51 4c 49 54 45 5f 54 4f 4f 42 49 47 20 29  =SQLITE_TOOBIG )
7590: 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20   goto too_big;. 
75a0: 20 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b     if( SQLITE_OK
75b0: 21 3d 73 71 6c 69 74 65 33 56 64 62 65 43 68 61  !=sqlite3VdbeCha
75c0: 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 4f 75 74  ngeEncoding(pOut
75d0: 2c 20 65 6e 63 6f 64 69 6e 67 29 20 29 20 67 6f  , encoding) ) go
75e0: 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 61  to no_mem;.    a
75f0: 73 73 65 72 74 28 20 70 4f 75 74 2d 3e 7a 4d 61  ssert( pOut->zMa
7600: 6c 6c 6f 63 3d 3d 70 4f 75 74 2d 3e 7a 20 29 3b  lloc==pOut->z );
7610: 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 75  .    assert( pOu
7620: 74 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 44  t->flags & MEM_D
7630: 79 6e 20 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e  yn );.    pOut->
7640: 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20 20  zMalloc = 0;.   
7650: 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20   pOut->flags |= 
7660: 4d 45 4d 5f 53 74 61 74 69 63 3b 0a 20 20 20 20  MEM_Static;.    
7670: 70 4f 75 74 2d 3e 66 6c 61 67 73 20 26 3d 20 7e  pOut->flags &= ~
7680: 4d 45 4d 5f 44 79 6e 3b 0a 20 20 20 20 69 66 28  MEM_Dyn;.    if(
7690: 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
76a0: 5f 44 59 4e 41 4d 49 43 20 29 7b 0a 20 20 20 20  _DYNAMIC ){.    
76b0: 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28    sqlite3DbFree(
76c0: 64 62 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a  db, pOp->p4.z);.
76d0: 20 20 20 20 7d 0a 20 20 20 20 70 4f 70 2d 3e 70      }.    pOp->p
76e0: 34 74 79 70 65 20 3d 20 50 34 5f 44 59 4e 41 4d  4type = P4_DYNAM
76f0: 49 43 3b 0a 20 20 20 20 70 4f 70 2d 3e 70 34 2e  IC;.    pOp->p4.
7700: 7a 20 3d 20 70 4f 75 74 2d 3e 7a 3b 0a 20 20 20  z = pOut->z;.   
7710: 20 70 4f 70 2d 3e 70 31 20 3d 20 70 4f 75 74 2d   pOp->p1 = pOut-
7720: 3e 6e 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20  >n;.  }.#endif. 
7730: 20 69 66 28 20 70 4f 70 2d 3e 70 31 3e 64 62 2d   if( pOp->p1>db-
7740: 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c  >aLimit[SQLITE_L
7750: 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a  IMIT_LENGTH] ){.
7760: 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67      goto too_big
7770: 3b 0a 20 20 7d 0a 20 20 2f 2a 20 46 61 6c 6c 20  ;.  }.  /* Fall 
7780: 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e  through to the n
7790: 65 78 74 20 63 61 73 65 2c 20 4f 50 5f 53 74 72  ext case, OP_Str
77a0: 69 6e 67 20 2a 2f 0a 7d 0a 20 20 0a 2f 2a 20 4f  ing */.}.  ./* O
77b0: 70 63 6f 64 65 3a 20 53 74 72 69 6e 67 20 50 31  pcode: String P1
77c0: 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a   P2 * P4 *.**.**
77d0: 20 54 68 65 20 73 74 72 69 6e 67 20 76 61 6c 75   The string valu
77e0: 65 20 50 34 20 6f 66 20 6c 65 6e 67 74 68 20 50  e P4 of length P
77f0: 31 20 28 62 79 74 65 73 29 20 69 73 20 73 74 6f  1 (bytes) is sto
7800: 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20  red in register 
7810: 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  P2..*/.case OP_S
7820: 74 72 69 6e 67 3a 20 7b 20 20 20 20 20 20 20 20  tring: {        
7830: 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c    /* out2-prerel
7840: 65 61 73 65 20 2a 2f 0a 20 20 61 73 73 65 72 74  ease */.  assert
7850: 28 20 70 4f 70 2d 3e 70 34 2e 7a 21 3d 30 20 29  ( pOp->p4.z!=0 )
7860: 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20  ;.  pOut->flags 
7870: 3d 20 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 53 74  = MEM_Str|MEM_St
7880: 61 74 69 63 7c 4d 45 4d 5f 54 65 72 6d 3b 0a 20  atic|MEM_Term;. 
7890: 20 70 4f 75 74 2d 3e 7a 20 3d 20 70 4f 70 2d 3e   pOut->z = pOp->
78a0: 70 34 2e 7a 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20  p4.z;.  pOut->n 
78b0: 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 4f 75  = pOp->p1;.  pOu
78c0: 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e  t->enc = encodin
78d0: 67 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f  g;.  UPDATE_MAX_
78e0: 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a  BLOBSIZE(pOut);.
78f0: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
7900: 70 63 6f 64 65 3a 20 4e 75 6c 6c 20 2a 20 50 32  pcode: Null * P2
7910: 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69   * * *.**.** Wri
7920: 74 65 20 61 20 4e 55 4c 4c 20 69 6e 74 6f 20 72  te a NULL into r
7930: 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63  egister P2..*/.c
7940: 61 73 65 20 4f 50 5f 4e 75 6c 6c 3a 20 7b 20 20  ase OP_Null: {  
7950: 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
7960: 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20  -prerelease */. 
7970: 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
7980: 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 62 72 65 61 6b  EM_Null;.  break
7990: 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  ;.}.../* Opcode:
79a0: 20 42 6c 6f 62 20 50 31 20 50 32 20 2a 20 50 34   Blob P1 P2 * P4
79b0: 0a 2a 2a 0a 2a 2a 20 50 34 20 70 6f 69 6e 74 73  .**.** P4 points
79c0: 20 74 6f 20 61 20 62 6c 6f 62 20 6f 66 20 64 61   to a blob of da
79d0: 74 61 20 50 31 20 62 79 74 65 73 20 6c 6f 6e 67  ta P1 bytes long
79e0: 2e 20 20 53 74 6f 72 65 20 74 68 69 73 0a 2a 2a  .  Store this.**
79f0: 20 62 6c 6f 62 20 69 6e 20 72 65 67 69 73 74 65   blob in registe
7a00: 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  r P2..*/.case OP
7a10: 5f 42 6c 6f 62 3a 20 7b 20 20 20 20 20 20 20 20  _Blob: {        
7a20: 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d          /* out2-
7a30: 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20  prerelease */.  
7a40: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 20  assert( pOp->p1 
7a50: 3c 3d 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4c 45  <= SQLITE_MAX_LE
7a60: 4e 47 54 48 20 29 3b 0a 20 20 73 71 6c 69 74 65  NGTH );.  sqlite
7a70: 33 56 64 62 65 4d 65 6d 53 65 74 53 74 72 28 70  3VdbeMemSetStr(p
7a80: 4f 75 74 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20  Out, pOp->p4.z, 
7a90: 70 4f 70 2d 3e 70 31 2c 20 30 2c 20 30 29 3b 0a  pOp->p1, 0, 0);.
7aa0: 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e    pOut->enc = en
7ab0: 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44 41 54 45  coding;.  UPDATE
7ac0: 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f  _MAX_BLOBSIZE(pO
7ad0: 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ut);.  break;.}.
7ae0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 61 72 69  ./* Opcode: Vari
7af0: 61 62 6c 65 20 50 31 20 50 32 20 2a 20 50 34 20  able P1 P2 * P4 
7b00: 2a 0a 2a 2a 0a 2a 2a 20 54 72 61 6e 73 66 65 72  *.**.** Transfer
7b10: 20 74 68 65 20 76 61 6c 75 65 73 20 6f 66 20 62   the values of b
7b20: 6f 75 6e 64 20 70 61 72 61 6d 65 74 65 72 20 50  ound parameter P
7b30: 31 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  1 into register 
7b40: 50 32 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  P2.**.** If the 
7b50: 70 61 72 61 6d 65 74 65 72 20 69 73 20 6e 61 6d  parameter is nam
7b60: 65 64 2c 20 74 68 65 6e 20 69 74 73 20 6e 61 6d  ed, then its nam
7b70: 65 20 61 70 70 65 61 72 73 20 69 6e 20 50 34 20  e appears in P4 
7b80: 61 6e 64 20 50 33 3d 3d 31 2e 0a 2a 2a 20 54 68  and P3==1..** Th
7b90: 65 20 50 34 20 76 61 6c 75 65 20 69 73 20 75 73  e P4 value is us
7ba0: 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 62 69  ed by sqlite3_bi
7bb0: 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d  nd_parameter_nam
7bc0: 65 28 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  e()..*/.case OP_
7bd0: 56 61 72 69 61 62 6c 65 3a 20 7b 20 20 20 20 20  Variable: {     
7be0: 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70         /* out2-p
7bf0: 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 4d  rerelease */.  M
7c00: 65 6d 20 2a 70 56 61 72 3b 20 20 20 20 20 20 20  em *pVar;       
7c10: 2f 2a 20 56 61 6c 75 65 20 62 65 69 6e 67 20 74  /* Value being t
7c20: 72 61 6e 73 66 65 72 72 65 64 20 2a 2f 0a 0a 20  ransferred */.. 
7c30: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
7c40: 3e 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 70  >0 && pOp->p1<=p
7c50: 2d 3e 6e 56 61 72 20 29 3b 0a 20 20 61 73 73 65  ->nVar );.  asse
7c60: 72 74 28 20 70 4f 70 2d 3e 70 34 2e 7a 3d 3d 30  rt( pOp->p4.z==0
7c70: 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 7a 3d 3d 70   || pOp->p4.z==p
7c80: 2d 3e 61 7a 56 61 72 5b 70 4f 70 2d 3e 70 31 2d  ->azVar[pOp->p1-
7c90: 31 5d 20 29 3b 0a 20 20 70 56 61 72 20 3d 20 26  1] );.  pVar = &
7ca0: 70 2d 3e 61 56 61 72 5b 70 4f 70 2d 3e 70 31 20  p->aVar[pOp->p1 
7cb0: 2d 20 31 5d 3b 0a 20 20 69 66 28 20 73 71 6c 69  - 1];.  if( sqli
7cc0: 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67  te3VdbeMemTooBig
7cd0: 28 70 56 61 72 29 20 29 7b 0a 20 20 20 20 67 6f  (pVar) ){.    go
7ce0: 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a  to too_big;.  }.
7cf0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
7d00: 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74  ShallowCopy(pOut
7d10: 2c 20 70 56 61 72 2c 20 4d 45 4d 5f 53 74 61 74  , pVar, MEM_Stat
7d20: 69 63 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41  ic);.  UPDATE_MA
7d30: 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29  X_BLOBSIZE(pOut)
7d40: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
7d50: 20 4f 70 63 6f 64 65 3a 20 4d 6f 76 65 20 50 31   Opcode: Move P1
7d60: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
7d70: 20 4d 6f 76 65 20 74 68 65 20 76 61 6c 75 65 73   Move the values
7d80: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e   in register P1.
7d90: 2e 50 31 2b 50 33 2d 31 20 6f 76 65 72 20 69 6e  .P1+P3-1 over in
7da0: 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72 73 20  to.** registers 
7db0: 50 32 2e 2e 50 32 2b 50 33 2d 31 2e 20 20 52 65  P2..P2+P3-1.  Re
7dc0: 67 69 73 74 65 72 73 20 50 31 2e 2e 50 31 2b 50  gisters P1..P1+P
7dd0: 31 2d 31 20 61 72 65 0a 2a 2a 20 6c 65 66 74 20  1-1 are.** left 
7de0: 68 6f 6c 64 69 6e 67 20 61 20 4e 55 4c 4c 2e 20  holding a NULL. 
7df0: 20 49 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20   It is an error 
7e00: 66 6f 72 20 72 65 67 69 73 74 65 72 20 72 61 6e  for register ran
7e10: 67 65 73 0a 2a 2a 20 50 31 2e 2e 50 31 2b 50 33  ges.** P1..P1+P3
7e20: 2d 31 20 61 6e 64 20 50 32 2e 2e 50 32 2b 50 33  -1 and P2..P2+P3
7e30: 2d 31 20 74 6f 20 6f 76 65 72 6c 61 70 2e 0a 2a  -1 to overlap..*
7e40: 2f 0a 63 61 73 65 20 4f 50 5f 4d 6f 76 65 3a 20  /.case OP_Move: 
7e50: 7b 0a 20 20 63 68 61 72 20 2a 7a 4d 61 6c 6c 6f  {.  char *zMallo
7e60: 63 3b 20 20 20 2f 2a 20 48 6f 6c 64 69 6e 67 20  c;   /* Holding 
7e70: 76 61 72 69 61 62 6c 65 20 66 6f 72 20 61 6c 6c  variable for all
7e80: 6f 63 61 74 65 64 20 6d 65 6d 6f 72 79 20 2a 2f  ocated memory */
7e90: 0a 20 20 69 6e 74 20 6e 3b 20 20 20 20 20 20 20  .  int n;       
7ea0: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
7eb0: 20 72 65 67 69 73 74 65 72 73 20 6c 65 66 74 20   registers left 
7ec0: 74 6f 20 63 6f 70 79 20 2a 2f 0a 20 20 69 6e 74  to copy */.  int
7ed0: 20 70 31 3b 20 20 20 20 20 20 20 20 20 20 2f 2a   p1;          /*
7ee0: 20 52 65 67 69 73 74 65 72 20 74 6f 20 63 6f 70   Register to cop
7ef0: 79 20 66 72 6f 6d 20 2a 2f 0a 20 20 69 6e 74 20  y from */.  int 
7f00: 70 32 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  p2;          /* 
7f10: 52 65 67 69 73 74 65 72 20 74 6f 20 63 6f 70 79  Register to copy
7f20: 20 74 6f 20 2a 2f 0a 0a 20 20 6e 20 3d 20 70 4f   to */..  n = pO
7f30: 70 2d 3e 70 33 3b 0a 20 20 70 31 20 3d 20 70 4f  p->p3;.  p1 = pO
7f40: 70 2d 3e 70 31 3b 0a 20 20 70 32 20 3d 20 70 4f  p->p1;.  p2 = pO
7f50: 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28  p->p2;.  assert(
7f60: 20 6e 3e 30 20 26 26 20 70 31 3e 30 20 26 26 20   n>0 && p1>0 && 
7f70: 70 32 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74  p2>0 );.  assert
7f80: 28 20 70 31 2b 6e 3c 3d 70 32 20 7c 7c 20 70 32  ( p1+n<=p2 || p2
7f90: 2b 6e 3c 3d 70 31 20 29 3b 0a 0a 20 20 70 49 6e  +n<=p1 );..  pIn
7fa0: 31 20 3d 20 26 61 4d 65 6d 5b 70 31 5d 3b 0a 20  1 = &aMem[p1];. 
7fb0: 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 32   pOut = &aMem[p2
7fc0: 5d 3b 0a 20 20 77 68 69 6c 65 28 20 6e 2d 2d 20  ];.  while( n-- 
7fd0: 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ){.    assert( p
7fe0: 4f 75 74 3c 3d 26 61 4d 65 6d 5b 70 2d 3e 6e 4d  Out<=&aMem[p->nM
7ff0: 65 6d 5d 20 29 3b 0a 20 20 20 20 61 73 73 65 72  em] );.    asser
8000: 74 28 20 70 49 6e 31 3c 3d 26 61 4d 65 6d 5b 70  t( pIn1<=&aMem[p
8010: 2d 3e 6e 4d 65 6d 5d 20 29 3b 0a 20 20 20 20 61  ->nMem] );.    a
8020: 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
8030: 64 28 70 49 6e 31 29 20 29 3b 0a 20 20 20 20 6d  d(pIn1) );.    m
8040: 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
8050: 70 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 7a 4d  p, pOut);.    zM
8060: 61 6c 6c 6f 63 20 3d 20 70 4f 75 74 2d 3e 7a 4d  alloc = pOut->zM
8070: 61 6c 6c 6f 63 3b 0a 20 20 20 20 70 4f 75 74 2d  alloc;.    pOut-
8080: 3e 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20  >zMalloc = 0;.  
8090: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
80a0: 4d 6f 76 65 28 70 4f 75 74 2c 20 70 49 6e 31 29  Move(pOut, pIn1)
80b0: 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
80c0: 44 45 42 55 47 0a 20 20 20 20 69 66 28 20 70 4f  DEBUG.    if( pO
80d0: 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 3e 3d  ut->pScopyFrom>=
80e0: 26 61 4d 65 6d 5b 70 31 5d 20 26 26 20 70 4f 75  &aMem[p1] && pOu
80f0: 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 3c 26 61  t->pScopyFrom<&a
8100: 4d 65 6d 5b 70 31 2b 70 4f 70 2d 3e 70 33 5d 20  Mem[p1+pOp->p3] 
8110: 29 7b 0a 20 20 20 20 20 20 70 4f 75 74 2d 3e 70  ){.      pOut->p
8120: 53 63 6f 70 79 46 72 6f 6d 20 2b 3d 20 70 31 20  ScopyFrom += p1 
8130: 2d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 20 20 7d  - pOp->p2;.    }
8140: 0a 23 65 6e 64 69 66 0a 20 20 20 20 70 49 6e 31  .#endif.    pIn1
8150: 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d 20 7a 4d 61 6c  ->zMalloc = zMal
8160: 6c 6f 63 3b 0a 20 20 20 20 52 45 47 49 53 54 45  loc;.    REGISTE
8170: 52 5f 54 52 41 43 45 28 70 32 2b 2b 2c 20 70 4f  R_TRACE(p2++, pO
8180: 75 74 29 3b 0a 20 20 20 20 70 49 6e 31 2b 2b 3b  ut);.    pIn1++;
8190: 0a 20 20 20 20 70 4f 75 74 2b 2b 3b 0a 20 20 7d  .    pOut++;.  }
81a0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
81b0: 4f 70 63 6f 64 65 3a 20 43 6f 70 79 20 50 31 20  Opcode: Copy P1 
81c0: 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4d  P2 * * *.**.** M
81d0: 61 6b 65 20 61 20 63 6f 70 79 20 6f 66 20 72 65  ake a copy of re
81e0: 67 69 73 74 65 72 20 50 31 20 69 6e 74 6f 20 72  gister P1 into r
81f0: 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a  egister P2..**.*
8200: 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69  * This instructi
8210: 6f 6e 20 6d 61 6b 65 73 20 61 20 64 65 65 70 20  on makes a deep 
8220: 63 6f 70 79 20 6f 66 20 74 68 65 20 76 61 6c 75  copy of the valu
8230: 65 2e 20 20 41 20 64 75 70 6c 69 63 61 74 65 0a  e.  A duplicate.
8240: 2a 2a 20 69 73 20 6d 61 64 65 20 6f 66 20 61 6e  ** is made of an
8250: 79 20 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62  y string or blob
8260: 20 63 6f 6e 73 74 61 6e 74 2e 20 20 53 65 65 20   constant.  See 
8270: 61 6c 73 6f 20 4f 50 5f 53 43 6f 70 79 2e 0a 2a  also OP_SCopy..*
8280: 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 70 79 3a 20  /.case OP_Copy: 
8290: 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  {             /*
82a0: 20 69 6e 31 2c 20 6f 75 74 32 20 2a 2f 0a 20 20   in1, out2 */.  
82b0: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
82c0: 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20  ->p1];.  pOut = 
82d0: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
82e0: 20 20 61 73 73 65 72 74 28 20 70 4f 75 74 21 3d    assert( pOut!=
82f0: 70 49 6e 31 20 29 3b 0a 20 20 73 71 6c 69 74 65  pIn1 );.  sqlite
8300: 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43  3VdbeMemShallowC
8310: 6f 70 79 28 70 4f 75 74 2c 20 70 49 6e 31 2c 20  opy(pOut, pIn1, 
8320: 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a 20 20 44 65  MEM_Ephem);.  De
8330: 65 70 68 65 6d 65 72 61 6c 69 7a 65 28 70 4f 75  ephemeralize(pOu
8340: 74 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54  t);.  REGISTER_T
8350: 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f  RACE(pOp->p2, pO
8360: 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ut);.  break;.}.
8370: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 43 6f 70  ./* Opcode: SCop
8380: 79 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  y P1 P2 * * *.**
8390: 0a 2a 2a 20 4d 61 6b 65 20 61 20 73 68 61 6c 6c  .** Make a shall
83a0: 6f 77 20 63 6f 70 79 20 6f 66 20 72 65 67 69 73  ow copy of regis
83b0: 74 65 72 20 50 31 20 69 6e 74 6f 20 72 65 67 69  ter P1 into regi
83c0: 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54  ster P2..**.** T
83d0: 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
83e0: 6d 61 6b 65 73 20 61 20 73 68 61 6c 6c 6f 77 20  makes a shallow 
83f0: 63 6f 70 79 20 6f 66 20 74 68 65 20 76 61 6c 75  copy of the valu
8400: 65 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75 65  e.  If the value
8410: 0a 2a 2a 20 69 73 20 61 20 73 74 72 69 6e 67 20  .** is a string 
8420: 6f 72 20 62 6c 6f 62 2c 20 74 68 65 6e 20 74 68  or blob, then th
8430: 65 20 63 6f 70 79 20 69 73 20 6f 6e 6c 79 20 61  e copy is only a
8440: 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 0a   pointer to the.
8450: 2a 2a 20 6f 72 69 67 69 6e 61 6c 20 61 6e 64 20  ** original and 
8460: 68 65 6e 63 65 20 69 66 20 74 68 65 20 6f 72 69  hence if the ori
8470: 67 69 6e 61 6c 20 63 68 61 6e 67 65 73 20 73 6f  ginal changes so
8480: 20 77 69 6c 6c 20 74 68 65 20 63 6f 70 79 2e 0a   will the copy..
8490: 2a 2a 20 57 6f 72 73 65 2c 20 69 66 20 74 68 65  ** Worse, if the
84a0: 20 6f 72 69 67 69 6e 61 6c 20 69 73 20 64 65 61   original is dea
84b0: 6c 6c 6f 63 61 74 65 64 2c 20 74 68 65 20 63 6f  llocated, the co
84c0: 70 79 20 62 65 63 6f 6d 65 73 20 69 6e 76 61 6c  py becomes inval
84d0: 69 64 2e 0a 2a 2a 20 54 68 75 73 20 74 68 65 20  id..** Thus the 
84e0: 70 72 6f 67 72 61 6d 20 6d 75 73 74 20 67 75 61  program must gua
84f0: 72 61 6e 74 65 65 20 74 68 61 74 20 74 68 65 20  rantee that the 
8500: 6f 72 69 67 69 6e 61 6c 20 77 69 6c 6c 20 6e 6f  original will no
8510: 74 20 63 68 61 6e 67 65 0a 2a 2a 20 64 75 72 69  t change.** duri
8520: 6e 67 20 74 68 65 20 6c 69 66 65 74 69 6d 65 20  ng the lifetime 
8530: 6f 66 20 74 68 65 20 63 6f 70 79 2e 20 20 55 73  of the copy.  Us
8540: 65 20 4f 50 5f 43 6f 70 79 20 74 6f 20 6d 61 6b  e OP_Copy to mak
8550: 65 20 61 20 63 6f 6d 70 6c 65 74 65 0a 2a 2a 20  e a complete.** 
8560: 63 6f 70 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  copy..*/.case OP
8570: 5f 53 43 6f 70 79 3a 20 7b 20 20 20 20 20 20 20  _SCopy: {       
8580: 20 20 20 20 20 2f 2a 20 69 6e 31 2c 20 6f 75 74       /* in1, out
8590: 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  2 */.  pIn1 = &a
85a0: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
85b0: 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
85c0: 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p2];.  assert(
85d0: 20 70 4f 75 74 21 3d 70 49 6e 31 20 29 3b 0a 20   pOut!=pIn1 );. 
85e0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
85f0: 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c  hallowCopy(pOut,
8600: 20 70 49 6e 31 2c 20 4d 45 4d 5f 45 70 68 65 6d   pIn1, MEM_Ephem
8610: 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  );.#ifdef SQLITE
8620: 5f 44 45 42 55 47 0a 20 20 69 66 28 20 70 4f 75  _DEBUG.  if( pOu
8630: 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 3d 3d 30  t->pScopyFrom==0
8640: 20 29 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46   ) pOut->pScopyF
8650: 72 6f 6d 20 3d 20 70 49 6e 31 3b 0a 23 65 6e 64  rom = pIn1;.#end
8660: 69 66 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52  if.  REGISTER_TR
8670: 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75  ACE(pOp->p2, pOu
8680: 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
8690: 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 73 75 6c  /* Opcode: Resul
86a0: 74 52 6f 77 20 50 31 20 50 32 20 2a 20 2a 20 2a  tRow P1 P2 * * *
86b0: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 65 67 69 73  .**.** The regis
86c0: 74 65 72 73 20 50 31 20 74 68 72 6f 75 67 68 20  ters P1 through 
86d0: 50 31 2b 50 32 2d 31 20 63 6f 6e 74 61 69 6e 20  P1+P2-1 contain 
86e0: 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66 0a  a single row of.
86f0: 2a 2a 20 72 65 73 75 6c 74 73 2e 20 54 68 69 73  ** results. This
8700: 20 6f 70 63 6f 64 65 20 63 61 75 73 65 73 20 74   opcode causes t
8710: 68 65 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28  he sqlite3_step(
8720: 29 20 63 61 6c 6c 20 74 6f 20 74 65 72 6d 69 6e  ) call to termin
8730: 61 74 65 0a 2a 2a 20 77 69 74 68 20 61 6e 20 53  ate.** with an S
8740: 51 4c 49 54 45 5f 52 4f 57 20 72 65 74 75 72 6e  QLITE_ROW return
8750: 20 63 6f 64 65 20 61 6e 64 20 69 74 20 73 65 74   code and it set
8760: 73 20 75 70 20 74 68 65 20 73 71 6c 69 74 65 33  s up the sqlite3
8770: 5f 73 74 6d 74 0a 2a 2a 20 73 74 72 75 63 74 75  _stmt.** structu
8780: 72 65 20 74 6f 20 70 72 6f 76 69 64 65 20 61 63  re to provide ac
8790: 63 65 73 73 20 74 6f 20 74 68 65 20 74 6f 70 20  cess to the top 
87a0: 50 31 20 76 61 6c 75 65 73 20 61 73 20 74 68 65  P1 values as the
87b0: 20 72 65 73 75 6c 74 0a 2a 2a 20 72 6f 77 2e 0a   result.** row..
87c0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 73 75 6c  */.case OP_Resul
87d0: 74 52 6f 77 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70  tRow: {.  Mem *p
87e0: 4d 65 6d 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20  Mem;.  int i;.  
87f0: 61 73 73 65 72 74 28 20 70 2d 3e 6e 52 65 73 43  assert( p->nResC
8800: 6f 6c 75 6d 6e 3d 3d 70 4f 70 2d 3e 70 32 20 29  olumn==pOp->p2 )
8810: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
8820: 3e 70 31 3e 30 20 29 3b 0a 20 20 61 73 73 65 72  >p1>0 );.  asser
8830: 74 28 20 70 4f 70 2d 3e 70 31 2b 70 4f 70 2d 3e  t( pOp->p1+pOp->
8840: 70 32 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31 20 29 3b  p2<=p->nMem+1 );
8850: 0a 0a 20 20 2f 2a 20 49 66 20 74 68 69 73 20 73  ..  /* If this s
8860: 74 61 74 65 6d 65 6e 74 20 68 61 73 20 76 69 6f  tatement has vio
8870: 6c 61 74 65 64 20 69 6d 6d 65 64 69 61 74 65 20  lated immediate 
8880: 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73  foreign key cons
8890: 74 72 61 69 6e 74 73 2c 20 64 6f 0a 20 20 2a 2a  traints, do.  **
88a0: 20 6e 6f 74 20 72 65 74 75 72 6e 20 74 68 65 20   not return the 
88b0: 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 6d  number of rows m
88c0: 6f 64 69 66 69 65 64 2e 20 41 6e 64 20 64 6f 20  odified. And do 
88d0: 6e 6f 74 20 52 45 4c 45 41 53 45 20 74 68 65 20  not RELEASE the 
88e0: 73 74 61 74 65 6d 65 6e 74 0a 20 20 2a 2a 20 74  statement.  ** t
88f0: 72 61 6e 73 61 63 74 69 6f 6e 2e 20 49 74 20 6e  ransaction. It n
8900: 65 65 64 73 20 74 6f 20 62 65 20 72 6f 6c 6c 65  eeds to be rolle
8910: 64 20 62 61 63 6b 2e 20 20 2a 2f 0a 20 20 69 66  d back.  */.  if
8920: 28 20 53 51 4c 49 54 45 5f 4f 4b 21 3d 28 72 63  ( SQLITE_OK!=(rc
8930: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 68   = sqlite3VdbeCh
8940: 65 63 6b 46 6b 28 70 2c 20 30 29 29 20 29 7b 0a  eckFk(p, 0)) ){.
8950: 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e      assert( db->
8960: 66 6c 61 67 73 26 53 51 4c 49 54 45 5f 43 6f 75  flags&SQLITE_Cou
8970: 6e 74 52 6f 77 73 20 29 3b 0a 20 20 20 20 61 73  ntRows );.    as
8980: 73 65 72 74 28 20 70 2d 3e 75 73 65 73 53 74 6d  sert( p->usesStm
8990: 74 4a 6f 75 72 6e 61 6c 20 29 3b 0a 20 20 20 20  tJournal );.    
89a0: 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  break;.  }..  /*
89b0: 20 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f 43   If the SQLITE_C
89c0: 6f 75 6e 74 52 6f 77 73 20 66 6c 61 67 20 69 73  ountRows flag is
89d0: 20 73 65 74 20 69 6e 20 73 71 6c 69 74 65 33 2e   set in sqlite3.
89e0: 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e  flags mask, then
89f0: 20 0a 20 20 2a 2a 20 44 4d 4c 20 73 74 61 74 65   .  ** DML state
8a00: 6d 65 6e 74 73 20 69 6e 76 6f 6b 65 20 74 68 69  ments invoke thi
8a10: 73 20 6f 70 63 6f 64 65 20 74 6f 20 72 65 74 75  s opcode to retu
8a20: 72 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  rn the number of
8a30: 20 72 6f 77 73 20 0a 20 20 2a 2a 20 6d 6f 64 69   rows .  ** modi
8a40: 66 69 65 64 20 74 6f 20 74 68 65 20 75 73 65 72  fied to the user
8a50: 2e 20 54 68 69 73 20 69 73 20 74 68 65 20 6f 6e  . This is the on
8a60: 6c 79 20 77 61 79 20 74 68 61 74 20 61 20 56 4d  ly way that a VM
8a70: 20 74 68 61 74 0a 20 20 2a 2a 20 6f 70 65 6e 73   that.  ** opens
8a80: 20 61 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61   a statement tra
8a90: 6e 73 61 63 74 69 6f 6e 20 6d 61 79 20 69 6e 76  nsaction may inv
8aa0: 6f 6b 65 20 74 68 69 73 20 6f 70 63 6f 64 65 2e  oke this opcode.
8ab0: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49 6e 20 63 61  .  **.  ** In ca
8ac0: 73 65 20 74 68 69 73 20 69 73 20 73 75 63 68 20  se this is such 
8ad0: 61 20 73 74 61 74 65 6d 65 6e 74 2c 20 63 6c 6f  a statement, clo
8ae0: 73 65 20 61 6e 79 20 73 74 61 74 65 6d 65 6e 74  se any statement
8af0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 20 20 2a   transaction.  *
8b00: 2a 20 6f 70 65 6e 65 64 20 62 79 20 74 68 69 73  * opened by this
8b10: 20 56 4d 20 62 65 66 6f 72 65 20 72 65 74 75 72   VM before retur
8b20: 6e 69 6e 67 20 63 6f 6e 74 72 6f 6c 20 74 6f 20  ning control to 
8b30: 74 68 65 20 75 73 65 72 2e 20 54 68 69 73 20 69  the user. This i
8b40: 73 20 74 6f 0a 20 20 2a 2a 20 65 6e 73 75 72 65  s to.  ** ensure
8b50: 20 74 68 61 74 20 73 74 61 74 65 6d 65 6e 74 2d   that statement-
8b60: 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 61 72 65  transactions are
8b70: 20 61 6c 77 61 79 73 20 6e 65 73 74 65 64 2c 20   always nested, 
8b80: 6e 6f 74 20 6f 76 65 72 6c 61 70 70 69 6e 67 2e  not overlapping.
8b90: 0a 20 20 2a 2a 20 49 66 20 74 68 65 20 6f 70 65  .  ** If the ope
8ba0: 6e 20 73 74 61 74 65 6d 65 6e 74 2d 74 72 61 6e  n statement-tran
8bb0: 73 61 63 74 69 6f 6e 20 69 73 20 6e 6f 74 20 63  saction is not c
8bc0: 6c 6f 73 65 64 20 68 65 72 65 2c 20 74 68 65 6e  losed here, then
8bd0: 20 74 68 65 20 75 73 65 72 0a 20 20 2a 2a 20 6d   the user.  ** m
8be0: 61 79 20 73 74 65 70 20 61 6e 6f 74 68 65 72 20  ay step another 
8bf0: 56 4d 20 74 68 61 74 20 6f 70 65 6e 73 20 69 74  VM that opens it
8c00: 73 20 6f 77 6e 20 73 74 61 74 65 6d 65 6e 74 20  s own statement 
8c10: 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 54 68 69  transaction. Thi
8c20: 73 0a 20 20 2a 2a 20 6d 61 79 20 6c 65 61 64 20  s.  ** may lead 
8c30: 74 6f 20 6f 76 65 72 6c 61 70 70 69 6e 67 20 73  to overlapping s
8c40: 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63  tatement transac
8c50: 74 69 6f 6e 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a  tions..  **.  **
8c60: 20 54 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74   The statement t
8c70: 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e 65  ransaction is ne
8c80: 76 65 72 20 61 20 74 6f 70 2d 6c 65 76 65 6c 20  ver a top-level 
8c90: 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 48 65  transaction.  He
8ca0: 6e 63 65 0a 20 20 2a 2a 20 74 68 65 20 52 45 4c  nce.  ** the REL
8cb0: 45 41 53 45 20 63 61 6c 6c 20 62 65 6c 6f 77 20  EASE call below 
8cc0: 63 61 6e 20 6e 65 76 65 72 20 66 61 69 6c 2e 0a  can never fail..
8cd0: 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70    */.  assert( p
8ce0: 2d 3e 69 53 74 61 74 65 6d 65 6e 74 3d 3d 30 20  ->iStatement==0 
8cf0: 7c 7c 20 64 62 2d 3e 66 6c 61 67 73 26 53 51 4c  || db->flags&SQL
8d00: 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20 29 3b  ITE_CountRows );
8d10: 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
8d20: 64 62 65 43 6c 6f 73 65 53 74 61 74 65 6d 65 6e  dbeCloseStatemen
8d30: 74 28 70 2c 20 53 41 56 45 50 4f 49 4e 54 5f 52  t(p, SAVEPOINT_R
8d40: 45 4c 45 41 53 45 29 3b 0a 20 20 69 66 28 20 4e  ELEASE);.  if( N
8d50: 45 56 45 52 28 72 63 21 3d 53 51 4c 49 54 45 5f  EVER(rc!=SQLITE_
8d60: 4f 4b 29 20 29 7b 0a 20 20 20 20 62 72 65 61 6b  OK) ){.    break
8d70: 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 6e 76 61  ;.  }..  /* Inva
8d80: 6c 69 64 61 74 65 20 61 6c 6c 20 65 70 68 65 6d  lidate all ephem
8d90: 65 72 61 6c 20 63 75 72 73 6f 72 20 72 6f 77 20  eral cursor row 
8da0: 63 61 63 68 65 73 20 2a 2f 0a 20 20 70 2d 3e 63  caches */.  p->c
8db0: 61 63 68 65 43 74 72 20 3d 20 28 70 2d 3e 63 61  acheCtr = (p->ca
8dc0: 63 68 65 43 74 72 20 2b 20 32 29 7c 31 3b 0a 0a  cheCtr + 2)|1;..
8dd0: 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 74    /* Make sure t
8de0: 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74 68  he results of th
8df0: 65 20 63 75 72 72 65 6e 74 20 72 6f 77 20 61 72  e current row ar
8e00: 65 20 5c 30 30 30 20 74 65 72 6d 69 6e 61 74 65  e \000 terminate
8e10: 64 0a 20 20 2a 2a 20 61 6e 64 20 68 61 76 65 20  d.  ** and have 
8e20: 61 6e 20 61 73 73 69 67 6e 65 64 20 74 79 70 65  an assigned type
8e30: 2e 20 20 54 68 65 20 72 65 73 75 6c 74 73 20 61  .  The results a
8e40: 72 65 20 64 65 2d 65 70 68 65 6d 65 72 61 6c 69  re de-ephemerali
8e50: 7a 65 64 20 61 73 0a 20 20 2a 2a 20 61 73 20 73  zed as.  ** as s
8e60: 69 64 65 20 65 66 66 65 63 74 2e 0a 20 20 2a 2f  ide effect..  */
8e70: 0a 20 20 70 4d 65 6d 20 3d 20 70 2d 3e 70 52 65  .  pMem = p->pRe
8e80: 73 75 6c 74 53 65 74 20 3d 20 26 61 4d 65 6d 5b  sultSet = &aMem[
8e90: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 66 6f 72 28  pOp->p1];.  for(
8ea0: 69 3d 30 3b 20 69 3c 70 4f 70 2d 3e 70 32 3b 20  i=0; i<pOp->p2; 
8eb0: 69 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72 74  i++){.    assert
8ec0: 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 70 4d  ( memIsValid(&pM
8ed0: 65 6d 5b 69 5d 29 20 29 3b 0a 20 20 20 20 44 65  em[i]) );.    De
8ee0: 65 70 68 65 6d 65 72 61 6c 69 7a 65 28 26 70 4d  ephemeralize(&pM
8ef0: 65 6d 5b 69 5d 29 3b 0a 20 20 20 20 61 73 73 65  em[i]);.    asse
8f00: 72 74 28 20 28 70 4d 65 6d 5b 69 5d 2e 66 6c 61  rt( (pMem[i].fla
8f10: 67 73 20 26 20 4d 45 4d 5f 45 70 68 65 6d 29 3d  gs & MEM_Ephem)=
8f20: 3d 30 0a 20 20 20 20 20 20 20 20 20 20 20 20 7c  =0.            |
8f30: 7c 20 28 70 4d 65 6d 5b 69 5d 2e 66 6c 61 67 73  | (pMem[i].flags
8f40: 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f   & (MEM_Str|MEM_
8f50: 42 6c 6f 62 29 29 3d 3d 30 20 29 3b 0a 20 20 20  Blob))==0 );.   
8f60: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4e   sqlite3VdbeMemN
8f70: 75 6c 54 65 72 6d 69 6e 61 74 65 28 26 70 4d 65  ulTerminate(&pMe
8f80: 6d 5b 69 5d 29 3b 0a 20 20 20 20 73 71 6c 69 74  m[i]);.    sqlit
8f90: 65 33 56 64 62 65 4d 65 6d 53 74 6f 72 65 54 79  e3VdbeMemStoreTy
8fa0: 70 65 28 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20  pe(&pMem[i]);.  
8fb0: 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
8fc0: 28 70 4f 70 2d 3e 70 31 2b 69 2c 20 26 70 4d 65  (pOp->p1+i, &pMe
8fd0: 6d 5b 69 5d 29 3b 0a 20 20 7d 0a 20 20 69 66 28  m[i]);.  }.  if(
8fe0: 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65   db->mallocFaile
8ff0: 64 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  d ) goto no_mem;
9000: 0a 0a 20 20 2f 2a 20 52 65 74 75 72 6e 20 53 51  ..  /* Return SQ
9010: 4c 49 54 45 5f 52 4f 57 0a 20 20 2a 2f 0a 20 20  LITE_ROW.  */.  
9020: 70 2d 3e 70 63 20 3d 20 70 63 20 2b 20 31 3b 0a  p->pc = pc + 1;.
9030: 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 52 4f    rc = SQLITE_RO
9040: 57 3b 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 72  W;.  goto vdbe_r
9050: 65 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  eturn;.}../* Opc
9060: 6f 64 65 3a 20 43 6f 6e 63 61 74 20 50 31 20 50  ode: Concat P1 P
9070: 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41  2 P3 * *.**.** A
9080: 64 64 20 74 68 65 20 74 65 78 74 20 69 6e 20 72  dd the text in r
9090: 65 67 69 73 74 65 72 20 50 31 20 6f 6e 74 6f 20  egister P1 onto 
90a0: 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 74  the end of the t
90b0: 65 78 74 20 69 6e 0a 2a 2a 20 72 65 67 69 73 74  ext in.** regist
90c0: 65 72 20 50 32 20 61 6e 64 20 73 74 6f 72 65 20  er P2 and store 
90d0: 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65  the result in re
90e0: 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66  gister P3..** If
90f0: 20 65 69 74 68 65 72 20 74 68 65 20 50 31 20 6f   either the P1 o
9100: 72 20 50 32 20 74 65 78 74 20 61 72 65 20 4e 55  r P2 text are NU
9110: 4c 4c 20 74 68 65 6e 20 73 74 6f 72 65 20 4e 55  LL then store NU
9120: 4c 4c 20 69 6e 20 50 33 2e 0a 2a 2a 0a 2a 2a 20  LL in P3..**.** 
9130: 20 20 50 33 20 3d 20 50 32 20 7c 7c 20 50 31 0a    P3 = P2 || P1.
9140: 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69 6c 6c 65  **.** It is ille
9150: 67 61 6c 20 66 6f 72 20 50 31 20 61 6e 64 20 50  gal for P1 and P
9160: 33 20 74 6f 20 62 65 20 74 68 65 20 73 61 6d 65  3 to be the same
9170: 20 72 65 67 69 73 74 65 72 2e 20 53 6f 6d 65 74   register. Somet
9180: 69 6d 65 73 2c 0a 2a 2a 20 69 66 20 50 33 20 69  imes,.** if P3 i
9190: 73 20 74 68 65 20 73 61 6d 65 20 72 65 67 69 73  s the same regis
91a0: 74 65 72 20 61 73 20 50 32 2c 20 74 68 65 20 69  ter as P2, the i
91b0: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 69 73  mplementation is
91c0: 20 61 62 6c 65 0a 2a 2a 20 74 6f 20 61 76 6f 69   able.** to avoi
91d0: 64 20 61 20 6d 65 6d 63 70 79 28 29 2e 0a 2a 2f  d a memcpy()..*/
91e0: 0a 63 61 73 65 20 4f 50 5f 43 6f 6e 63 61 74 3a  .case OP_Concat:
91f0: 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20   {           /* 
9200: 73 61 6d 65 20 61 73 20 54 4b 5f 43 4f 4e 43 41  same as TK_CONCA
9210: 54 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74  T, in1, in2, out
9220: 33 20 2a 2f 0a 20 20 69 36 34 20 6e 42 79 74 65  3 */.  i64 nByte
9230: 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  ;..  pIn1 = &aMe
9240: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49  m[pOp->p1];.  pI
9250: 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n2 = &aMem[pOp->
9260: 70 32 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61  p2];.  pOut = &a
9270: 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
9280: 61 73 73 65 72 74 28 20 70 49 6e 31 21 3d 70 4f  assert( pIn1!=pO
9290: 75 74 20 29 3b 0a 20 20 69 66 28 20 28 70 49 6e  ut );.  if( (pIn
92a0: 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49 6e 32 2d  1->flags | pIn2-
92b0: 3e 66 6c 61 67 73 29 20 26 20 4d 45 4d 5f 4e 75  >flags) & MEM_Nu
92c0: 6c 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  ll ){.    sqlite
92d0: 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28  3VdbeMemSetNull(
92e0: 70 4f 75 74 29 3b 0a 20 20 20 20 62 72 65 61 6b  pOut);.    break
92f0: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 45 78 70 61  ;.  }.  if( Expa
9300: 6e 64 42 6c 6f 62 28 70 49 6e 31 29 20 7c 7c 20  ndBlob(pIn1) || 
9310: 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 32 29  ExpandBlob(pIn2)
9320: 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
9330: 20 20 53 74 72 69 6e 67 69 66 79 28 70 49 6e 31    Stringify(pIn1
9340: 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 53  , encoding);.  S
9350: 74 72 69 6e 67 69 66 79 28 70 49 6e 32 2c 20 65  tringify(pIn2, e
9360: 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 6e 42 79 74  ncoding);.  nByt
9370: 65 20 3d 20 70 49 6e 31 2d 3e 6e 20 2b 20 70 49  e = pIn1->n + pI
9380: 6e 32 2d 3e 6e 3b 0a 20 20 69 66 28 20 6e 42 79  n2->n;.  if( nBy
9390: 74 65 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51  te>db->aLimit[SQ
93a0: 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54  LITE_LIMIT_LENGT
93b0: 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74  H] ){.    goto t
93c0: 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 4d 65  oo_big;.  }.  Me
93d0: 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75  mSetTypeFlag(pOu
93e0: 74 2c 20 4d 45 4d 5f 53 74 72 29 3b 0a 20 20 69  t, MEM_Str);.  i
93f0: 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  f( sqlite3VdbeMe
9400: 6d 47 72 6f 77 28 70 4f 75 74 2c 20 28 69 6e 74  mGrow(pOut, (int
9410: 29 6e 42 79 74 65 2b 32 2c 20 70 4f 75 74 3d 3d  )nByte+2, pOut==
9420: 70 49 6e 32 29 20 29 7b 0a 20 20 20 20 67 6f 74  pIn2) ){.    got
9430: 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20  o no_mem;.  }.  
9440: 69 66 28 20 70 4f 75 74 21 3d 70 49 6e 32 20 29  if( pOut!=pIn2 )
9450: 7b 0a 20 20 20 20 6d 65 6d 63 70 79 28 70 4f 75  {.    memcpy(pOu
9460: 74 2d 3e 7a 2c 20 70 49 6e 32 2d 3e 7a 2c 20 70  t->z, pIn2->z, p
9470: 49 6e 32 2d 3e 6e 29 3b 0a 20 20 7d 0a 20 20 6d  In2->n);.  }.  m
9480: 65 6d 63 70 79 28 26 70 4f 75 74 2d 3e 7a 5b 70  emcpy(&pOut->z[p
9490: 49 6e 32 2d 3e 6e 5d 2c 20 70 49 6e 31 2d 3e 7a  In2->n], pIn1->z
94a0: 2c 20 70 49 6e 31 2d 3e 6e 29 3b 0a 20 20 70 4f  , pIn1->n);.  pO
94b0: 75 74 2d 3e 7a 5b 6e 42 79 74 65 5d 20 3d 20 30  ut->z[nByte] = 0
94c0: 3b 0a 20 20 70 4f 75 74 2d 3e 7a 5b 6e 42 79 74  ;.  pOut->z[nByt
94d0: 65 2b 31 5d 20 3d 20 30 3b 0a 20 20 70 4f 75 74  e+1] = 0;.  pOut
94e0: 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 54  ->flags |= MEM_T
94f0: 65 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d  erm;.  pOut->n =
9500: 20 28 69 6e 74 29 6e 42 79 74 65 3b 0a 20 20 70   (int)nByte;.  p
9510: 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64  Out->enc = encod
9520: 69 6e 67 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41  ing;.  UPDATE_MA
9530: 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29  X_BLOBSIZE(pOut)
9540: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
9550: 20 4f 70 63 6f 64 65 3a 20 41 64 64 20 50 31 20   Opcode: Add P1 
9560: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
9570: 41 64 64 20 74 68 65 20 76 61 6c 75 65 20 69 6e  Add the value in
9580: 20 72 65 67 69 73 74 65 72 20 50 31 20 74 6f 20   register P1 to 
9590: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
95a0: 69 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20  ister P2.** and 
95b0: 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74  store the result
95c0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e   in register P3.
95d0: 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e  .** If either in
95e0: 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65  put is NULL, the
95f0: 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e   result is NULL.
9600: 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d  .*/./* Opcode: M
9610: 75 6c 74 69 70 6c 79 20 50 31 20 50 32 20 50 33  ultiply P1 P2 P3
9620: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 0a 2a 2a 20 4d 75   * *.**.**.** Mu
9630: 6c 74 69 70 6c 79 20 74 68 65 20 76 61 6c 75 65  ltiply the value
9640: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
9650: 62 79 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  by the value in 
9660: 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 61  register P2.** a
9670: 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73  nd store the res
9680: 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ult in register 
9690: 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  P3..** If either
96a0: 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20   input is NULL, 
96b0: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
96c0: 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  LL..*/./* Opcode
96d0: 3a 20 53 75 62 74 72 61 63 74 20 50 31 20 50 32  : Subtract P1 P2
96e0: 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 75   P3 * *.**.** Su
96f0: 62 74 72 61 63 74 20 74 68 65 20 76 61 6c 75 65  btract the value
9700: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
9710: 66 72 6f 6d 20 74 68 65 20 76 61 6c 75 65 20 69  from the value i
9720: 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a  n register P2.**
9730: 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72   and store the r
9740: 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65  esult in registe
9750: 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68  r P3..** If eith
9760: 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c  er input is NULL
9770: 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  , the result is 
9780: 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  NULL..*/./* Opco
9790: 64 65 3a 20 44 69 76 69 64 65 20 50 31 20 50 32  de: Divide P1 P2
97a0: 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 69   P3 * *.**.** Di
97b0: 76 69 64 65 20 74 68 65 20 76 61 6c 75 65 20 69  vide the value i
97c0: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 62 79  n register P1 by
97d0: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
97e0: 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64  gister P2.** and
97f0: 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c   store the resul
9800: 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  t in register P3
9810: 20 28 50 33 3d 50 32 2f 50 31 29 2e 20 49 66 20   (P3=P2/P1). If 
9820: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 0a 2a 2a  the value in .**
9830: 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20   register P1 is 
9840: 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 72  zero, then the r
9850: 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 20 49  esult is NULL. I
9860: 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69  f either input i
9870: 73 20 0a 2a 2a 20 4e 55 4c 4c 2c 20 74 68 65 20  s .** NULL, the 
9880: 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a  result is NULL..
9890: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65  */./* Opcode: Re
98a0: 6d 61 69 6e 64 65 72 20 50 31 20 50 32 20 50 33  mainder P1 P2 P3
98b0: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 75   * *.**.** Compu
98c0: 74 65 20 74 68 65 20 72 65 6d 61 69 6e 64 65 72  te the remainder
98d0: 20 61 66 74 65 72 20 69 6e 74 65 67 65 72 20 64   after integer d
98e0: 69 76 69 73 69 6f 6e 20 6f 66 20 74 68 65 20 76  ivision of the v
98f0: 61 6c 75 65 20 69 6e 0a 2a 2a 20 72 65 67 69 73  alue in.** regis
9900: 74 65 72 20 50 31 20 62 79 20 74 68 65 20 76 61  ter P1 by the va
9910: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
9920: 50 32 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65  P2 and store the
9930: 20 72 65 73 75 6c 74 20 69 6e 20 50 33 2e 20 0a   result in P3. .
9940: 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65 20  ** If the value 
9950: 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 20 69  in register P2 i
9960: 73 20 7a 65 72 6f 20 74 68 65 20 72 65 73 75 6c  s zero the resul
9970: 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 20 49 66  t is NULL..** If
9980: 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20   either operand 
9990: 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73  is NULL, the res
99a0: 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a  ult is NULL..*/.
99b0: 63 61 73 65 20 4f 50 5f 41 64 64 3a 20 20 20 20  case OP_Add:    
99c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
99d0: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 50 4c 55  * same as TK_PLU
99e0: 53 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74  S, in1, in2, out
99f0: 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 75 62  3 */.case OP_Sub
9a00: 74 72 61 63 74 3a 20 20 20 20 20 20 20 20 20 20  tract:          
9a10: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
9a20: 4b 5f 4d 49 4e 55 53 2c 20 69 6e 31 2c 20 69 6e  K_MINUS, in1, in
9a30: 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20  2, out3 */.case 
9a40: 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a 20 20 20 20  OP_Multiply:    
9a50: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
9a60: 65 20 61 73 20 54 4b 5f 53 54 41 52 2c 20 69 6e  e as TK_STAR, in
9a70: 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
9a80: 63 61 73 65 20 4f 50 5f 44 69 76 69 64 65 3a 20  case OP_Divide: 
9a90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
9aa0: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 53 4c 41  * same as TK_SLA
9ab0: 53 48 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75  SH, in1, in2, ou
9ac0: 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65  t3 */.case OP_Re
9ad0: 6d 61 69 6e 64 65 72 3a 20 7b 20 20 20 20 20 20  mainder: {      
9ae0: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
9af0: 54 4b 5f 52 45 4d 2c 20 69 6e 31 2c 20 69 6e 32  TK_REM, in1, in2
9b00: 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69 6e 74 20  , out3 */.  int 
9b10: 66 6c 61 67 73 3b 20 20 20 20 20 20 2f 2a 20 43  flags;      /* C
9b20: 6f 6d 62 69 6e 65 64 20 4d 45 4d 5f 2a 20 66 6c  ombined MEM_* fl
9b30: 61 67 73 20 66 72 6f 6d 20 62 6f 74 68 20 69 6e  ags from both in
9b40: 70 75 74 73 20 2a 2f 0a 20 20 69 36 34 20 69 41  puts */.  i64 iA
9b50: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 74  ;         /* Int
9b60: 65 67 65 72 20 76 61 6c 75 65 20 6f 66 20 6c 65  eger value of le
9b70: 66 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20  ft operand */.  
9b80: 69 36 34 20 69 42 3b 20 20 20 20 20 20 20 20 20  i64 iB;         
9b90: 2f 2a 20 49 6e 74 65 67 65 72 20 76 61 6c 75 65  /* Integer value
9ba0: 20 6f 66 20 72 69 67 68 74 20 6f 70 65 72 61 6e   of right operan
9bb0: 64 20 2a 2f 0a 20 20 64 6f 75 62 6c 65 20 72 41  d */.  double rA
9bc0: 3b 20 20 20 20 20 20 2f 2a 20 52 65 61 6c 20 76  ;      /* Real v
9bd0: 61 6c 75 65 20 6f 66 20 6c 65 66 74 20 6f 70 65  alue of left ope
9be0: 72 61 6e 64 20 2a 2f 0a 20 20 64 6f 75 62 6c 65  rand */.  double
9bf0: 20 72 42 3b 20 20 20 20 20 20 2f 2a 20 52 65 61   rB;      /* Rea
9c00: 6c 20 76 61 6c 75 65 20 6f 66 20 72 69 67 68 74  l value of right
9c10: 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 0a 20 20 70   operand */..  p
9c20: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
9c30: 3e 70 31 5d 3b 0a 20 20 61 70 70 6c 79 4e 75 6d  >p1];.  applyNum
9c40: 65 72 69 63 41 66 66 69 6e 69 74 79 28 70 49 6e  ericAffinity(pIn
9c50: 31 29 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d  1);.  pIn2 = &aM
9c60: 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61  em[pOp->p2];.  a
9c70: 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e  pplyNumericAffin
9c80: 69 74 79 28 70 49 6e 32 29 3b 0a 20 20 70 4f 75  ity(pIn2);.  pOu
9c90: 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
9ca0: 33 5d 3b 0a 20 20 66 6c 61 67 73 20 3d 20 70 49  3];.  flags = pI
9cb0: 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49 6e 32  n1->flags | pIn2
9cc0: 2d 3e 66 6c 61 67 73 3b 0a 20 20 69 66 28 20 28  ->flags;.  if( (
9cd0: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
9ce0: 29 21 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74  )!=0 ) goto arit
9cf0: 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73  hmetic_result_is
9d00: 5f 6e 75 6c 6c 3b 0a 20 20 69 66 28 20 28 70 49  _null;.  if( (pI
9d10: 6e 31 2d 3e 66 6c 61 67 73 20 26 20 70 49 6e 32  n1->flags & pIn2
9d20: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
9d30: 74 29 3d 3d 4d 45 4d 5f 49 6e 74 20 29 7b 0a 20  t)==MEM_Int ){. 
9d40: 20 20 20 69 41 20 3d 20 70 49 6e 31 2d 3e 75 2e     iA = pIn1->u.
9d50: 69 3b 0a 20 20 20 20 69 42 20 3d 20 70 49 6e 32  i;.    iB = pIn2
9d60: 2d 3e 75 2e 69 3b 0a 20 20 20 20 73 77 69 74 63  ->u.i;.    switc
9d70: 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29  h( pOp->opcode )
9d80: 7b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f  {.      case OP_
9d90: 41 64 64 3a 20 20 20 20 20 20 20 69 66 28 20 73  Add:       if( s
9da0: 71 6c 69 74 65 33 41 64 64 49 6e 74 36 34 28 26  qlite3AddInt64(&
9db0: 69 42 2c 69 41 29 20 29 20 67 6f 74 6f 20 66 70  iB,iA) ) goto fp
9dc0: 5f 6d 61 74 68 3b 20 20 62 72 65 61 6b 3b 0a 20  _math;  break;. 
9dd0: 20 20 20 20 20 63 61 73 65 20 4f 50 5f 53 75 62       case OP_Sub
9de0: 74 72 61 63 74 3a 20 20 69 66 28 20 73 71 6c 69  tract:  if( sqli
9df0: 74 65 33 53 75 62 49 6e 74 36 34 28 26 69 42 2c  te3SubInt64(&iB,
9e00: 69 41 29 20 29 20 67 6f 74 6f 20 66 70 5f 6d 61  iA) ) goto fp_ma
9e10: 74 68 3b 20 20 62 72 65 61 6b 3b 0a 20 20 20 20  th;  break;.    
9e20: 20 20 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70    case OP_Multip
9e30: 6c 79 3a 20 20 69 66 28 20 73 71 6c 69 74 65 33  ly:  if( sqlite3
9e40: 4d 75 6c 49 6e 74 36 34 28 26 69 42 2c 69 41 29  MulInt64(&iB,iA)
9e50: 20 29 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68 3b   ) goto fp_math;
9e60: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63    break;.      c
9e70: 61 73 65 20 4f 50 5f 44 69 76 69 64 65 3a 20 7b  ase OP_Divide: {
9e80: 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d  .        if( iA=
9e90: 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d  =0 ) goto arithm
9ea0: 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e  etic_result_is_n
9eb0: 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69 66 28  ull;.        if(
9ec0: 20 69 41 3d 3d 2d 31 20 26 26 20 69 42 3d 3d 53   iA==-1 && iB==S
9ed0: 4d 41 4c 4c 45 53 54 5f 49 4e 54 36 34 20 29 20  MALLEST_INT64 ) 
9ee0: 67 6f 74 6f 20 66 70 5f 6d 61 74 68 3b 0a 20 20  goto fp_math;.  
9ef0: 20 20 20 20 20 20 69 42 20 2f 3d 20 69 41 3b 0a        iB /= iA;.
9f00: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
9f10: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 64 65 66       }.      def
9f20: 61 75 6c 74 3a 20 7b 0a 20 20 20 20 20 20 20 20  ault: {.        
9f30: 69 66 28 20 69 41 3d 3d 30 20 29 20 67 6f 74 6f  if( iA==0 ) goto
9f40: 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75   arithmetic_resu
9f50: 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20  lt_is_null;.    
9f60: 20 20 20 20 69 66 28 20 69 41 3d 3d 2d 31 20 29      if( iA==-1 )
9f70: 20 69 41 20 3d 20 31 3b 0a 20 20 20 20 20 20 20   iA = 1;.       
9f80: 20 69 42 20 25 3d 20 69 41 3b 0a 20 20 20 20 20   iB %= iA;.     
9f90: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
9fa0: 7d 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f 75 74  }.    }.    pOut
9fb0: 2d 3e 75 2e 69 20 3d 20 69 42 3b 0a 20 20 20 20  ->u.i = iB;.    
9fc0: 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
9fd0: 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20  Out, MEM_Int);. 
9fe0: 20 7d 65 6c 73 65 7b 0a 66 70 5f 6d 61 74 68 3a   }else{.fp_math:
9ff0: 0a 20 20 20 20 72 41 20 3d 20 73 71 6c 69 74 65  .    rA = sqlite
a000: 33 56 64 62 65 52 65 61 6c 56 61 6c 75 65 28 70  3VdbeRealValue(p
a010: 49 6e 31 29 3b 0a 20 20 20 20 72 42 20 3d 20 73  In1);.    rB = s
a020: 71 6c 69 74 65 33 56 64 62 65 52 65 61 6c 56 61  qlite3VdbeRealVa
a030: 6c 75 65 28 70 49 6e 32 29 3b 0a 20 20 20 20 73  lue(pIn2);.    s
a040: 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f  witch( pOp->opco
a050: 64 65 20 29 7b 0a 20 20 20 20 20 20 63 61 73 65  de ){.      case
a060: 20 4f 50 5f 41 64 64 3a 20 20 20 20 20 20 20 20   OP_Add:        
a070: 20 72 42 20 2b 3d 20 72 41 3b 20 20 20 20 20 20   rB += rA;      
a080: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61   break;.      ca
a090: 73 65 20 4f 50 5f 53 75 62 74 72 61 63 74 3a 20  se OP_Subtract: 
a0a0: 20 20 20 72 42 20 2d 3d 20 72 41 3b 20 20 20 20     rB -= rA;    
a0b0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
a0c0: 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79  case OP_Multiply
a0d0: 3a 20 20 20 20 72 42 20 2a 3d 20 72 41 3b 20 20  :    rB *= rA;  
a0e0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
a0f0: 20 20 63 61 73 65 20 4f 50 5f 44 69 76 69 64 65    case OP_Divide
a100: 3a 20 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 28  : {.        /* (
a110: 64 6f 75 62 6c 65 29 30 20 49 6e 20 63 61 73 65  double)0 In case
a120: 20 6f 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   of SQLITE_OMIT_
a130: 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 2e 2e  FLOATING_POINT..
a140: 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28  . */.        if(
a150: 20 72 41 3d 3d 28 64 6f 75 62 6c 65 29 30 20 29   rA==(double)0 )
a160: 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63   goto arithmetic
a170: 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b  _result_is_null;
a180: 0a 20 20 20 20 20 20 20 20 72 42 20 2f 3d 20 72  .        rB /= r
a190: 41 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b  A;.        break
a1a0: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
a1b0: 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20 20 20 20  default: {.     
a1c0: 20 20 20 69 41 20 3d 20 28 69 36 34 29 72 41 3b     iA = (i64)rA;
a1d0: 0a 20 20 20 20 20 20 20 20 69 42 20 3d 20 28 69  .        iB = (i
a1e0: 36 34 29 72 42 3b 0a 20 20 20 20 20 20 20 20 69  64)rB;.        i
a1f0: 66 28 20 69 41 3d 3d 30 20 29 20 67 6f 74 6f 20  f( iA==0 ) goto 
a200: 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c  arithmetic_resul
a210: 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20  t_is_null;.     
a220: 20 20 20 69 66 28 20 69 41 3d 3d 2d 31 20 29 20     if( iA==-1 ) 
a230: 69 41 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20  iA = 1;.        
a240: 72 42 20 3d 20 28 64 6f 75 62 6c 65 29 28 69 42  rB = (double)(iB
a250: 20 25 20 69 41 29 3b 0a 20 20 20 20 20 20 20 20   % iA);.        
a260: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20  break;.      }. 
a270: 20 20 20 7d 0a 23 69 66 64 65 66 20 53 51 4c 49     }.#ifdef SQLI
a280: 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47  TE_OMIT_FLOATING
a290: 5f 50 4f 49 4e 54 0a 20 20 20 20 70 4f 75 74 2d  _POINT.    pOut-
a2a0: 3e 75 2e 69 20 3d 20 72 42 3b 0a 20 20 20 20 4d  >u.i = rB;.    M
a2b0: 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f  emSetTypeFlag(pO
a2c0: 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 23 65  ut, MEM_Int);.#e
a2d0: 6c 73 65 0a 20 20 20 20 69 66 28 20 73 71 6c 69  lse.    if( sqli
a2e0: 74 65 33 49 73 4e 61 4e 28 72 42 29 20 29 7b 0a  te3IsNaN(rB) ){.
a2f0: 20 20 20 20 20 20 67 6f 74 6f 20 61 72 69 74 68        goto arith
a300: 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f  metic_result_is_
a310: 6e 75 6c 6c 3b 0a 20 20 20 20 7d 0a 20 20 20 20  null;.    }.    
a320: 70 4f 75 74 2d 3e 72 20 3d 20 72 42 3b 0a 20 20  pOut->r = rB;.  
a330: 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
a340: 28 70 4f 75 74 2c 20 4d 45 4d 5f 52 65 61 6c 29  (pOut, MEM_Real)
a350: 3b 0a 20 20 20 20 69 66 28 20 28 66 6c 61 67 73  ;.    if( (flags
a360: 20 26 20 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30 20   & MEM_Real)==0 
a370: 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
a380: 56 64 62 65 49 6e 74 65 67 65 72 41 66 66 69 6e  VdbeIntegerAffin
a390: 69 74 79 28 70 4f 75 74 29 3b 0a 20 20 20 20 7d  ity(pOut);.    }
a3a0: 0a 23 65 6e 64 69 66 0a 20 20 7d 0a 20 20 62 72  .#endif.  }.  br
a3b0: 65 61 6b 3b 0a 0a 61 72 69 74 68 6d 65 74 69 63  eak;..arithmetic
a3c0: 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3a  _result_is_null:
a3d0: 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
a3e0: 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a  mSetNull(pOut);.
a3f0: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
a400: 70 63 6f 64 65 3a 20 43 6f 6c 6c 53 65 71 20 2a  pcode: CollSeq *
a410: 20 2a 20 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20 69   * P4.**.** P4 i
a420: 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  s a pointer to a
a430: 20 43 6f 6c 6c 53 65 71 20 73 74 72 75 63 74 2e   CollSeq struct.
a440: 20 49 66 20 74 68 65 20 6e 65 78 74 20 63 61 6c   If the next cal
a450: 6c 20 74 6f 20 61 20 75 73 65 72 20 66 75 6e 63  l to a user func
a460: 74 69 6f 6e 0a 2a 2a 20 6f 72 20 61 67 67 72 65  tion.** or aggre
a470: 67 61 74 65 20 63 61 6c 6c 73 20 73 71 6c 69 74  gate calls sqlit
a480: 65 33 47 65 74 46 75 6e 63 43 6f 6c 6c 53 65 71  e3GetFuncCollSeq
a490: 28 29 2c 20 74 68 69 73 20 63 6f 6c 6c 61 74 69  (), this collati
a4a0: 6f 6e 20 73 65 71 75 65 6e 63 65 20 77 69 6c 6c  on sequence will
a4b0: 0a 2a 2a 20 62 65 20 72 65 74 75 72 6e 65 64 2e  .** be returned.
a4c0: 20 54 68 69 73 20 69 73 20 75 73 65 64 20 62 79   This is used by
a4d0: 20 74 68 65 20 62 75 69 6c 74 2d 69 6e 20 6d 69   the built-in mi
a4e0: 6e 28 29 2c 20 6d 61 78 28 29 20 61 6e 64 20 6e  n(), max() and n
a4f0: 75 6c 6c 69 66 28 29 0a 2a 2a 20 66 75 6e 63 74  ullif().** funct
a500: 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ions..**.** The 
a510: 69 6e 74 65 72 66 61 63 65 20 75 73 65 64 20 62  interface used b
a520: 79 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61  y the implementa
a530: 74 69 6f 6e 20 6f 66 20 74 68 65 20 61 66 6f 72  tion of the afor
a540: 65 6d 65 6e 74 69 6f 6e 65 64 20 66 75 6e 63 74  ementioned funct
a550: 69 6f 6e 73 0a 2a 2a 20 74 6f 20 72 65 74 72 69  ions.** to retri
a560: 65 76 65 20 74 68 65 20 63 6f 6c 6c 61 74 69 6f  eve the collatio
a570: 6e 20 73 65 71 75 65 6e 63 65 20 73 65 74 20 62  n sequence set b
a580: 79 20 74 68 69 73 20 6f 70 63 6f 64 65 20 69 73  y this opcode is
a590: 20 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65 0a 2a   not available.*
a5a0: 2a 20 70 75 62 6c 69 63 6c 79 2c 20 6f 6e 6c 79  * publicly, only
a5b0: 20 74 6f 20 75 73 65 72 20 66 75 6e 63 74 69 6f   to user functio
a5c0: 6e 73 20 64 65 66 69 6e 65 64 20 69 6e 20 66 75  ns defined in fu
a5d0: 6e 63 2e 63 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  nc.c..*/.case OP
a5e0: 5f 43 6f 6c 6c 53 65 71 3a 20 7b 0a 20 20 61 73  _CollSeq: {.  as
a5f0: 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70  sert( pOp->p4typ
a600: 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51 20 29 3b  e==P4_COLLSEQ );
a610: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
a620: 4f 70 63 6f 64 65 3a 20 46 75 6e 63 74 69 6f 6e  Opcode: Function
a630: 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
a640: 2a 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 61 20 75  **.** Invoke a u
a650: 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 28 50 34  ser function (P4
a660: 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
a670: 20 61 20 46 75 6e 63 74 69 6f 6e 20 73 74 72 75   a Function stru
a680: 63 74 75 72 65 20 74 68 61 74 0a 2a 2a 20 64 65  cture that.** de
a690: 66 69 6e 65 73 20 74 68 65 20 66 75 6e 63 74 69  fines the functi
a6a0: 6f 6e 29 20 77 69 74 68 20 50 35 20 61 72 67 75  on) with P5 argu
a6b0: 6d 65 6e 74 73 20 74 61 6b 65 6e 20 66 72 6f 6d  ments taken from
a6c0: 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e 64   register P2 and
a6d0: 0a 2a 2a 20 73 75 63 63 65 73 73 6f 72 73 2e 20  .** successors. 
a6e0: 20 54 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74   The result of t
a6f0: 68 65 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 73  he function is s
a700: 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65  tored in registe
a710: 72 20 50 33 2e 0a 2a 2a 20 52 65 67 69 73 74 65  r P3..** Registe
a720: 72 20 50 33 20 6d 75 73 74 20 6e 6f 74 20 62 65  r P3 must not be
a730: 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 75 6e 63   one of the func
a740: 74 69 6f 6e 20 69 6e 70 75 74 73 2e 0a 2a 2a 0a  tion inputs..**.
a750: 2a 2a 20 50 31 20 69 73 20 61 20 33 32 2d 62 69  ** P1 is a 32-bi
a760: 74 20 62 69 74 6d 61 73 6b 20 69 6e 64 69 63 61  t bitmask indica
a770: 74 69 6e 67 20 77 68 65 74 68 65 72 20 6f 72 20  ting whether or 
a780: 6e 6f 74 20 65 61 63 68 20 61 72 67 75 6d 65 6e  not each argumen
a790: 74 20 74 6f 20 74 68 65 20 0a 2a 2a 20 66 75 6e  t to the .** fun
a7a0: 63 74 69 6f 6e 20 77 61 73 20 64 65 74 65 72 6d  ction was determ
a7b0: 69 6e 65 64 20 74 6f 20 62 65 20 63 6f 6e 73 74  ined to be const
a7c0: 61 6e 74 20 61 74 20 63 6f 6d 70 69 6c 65 20 74  ant at compile t
a7d0: 69 6d 65 2e 20 49 66 20 74 68 65 20 66 69 72 73  ime. If the firs
a7e0: 74 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 77 61  t.** argument wa
a7f0: 73 20 63 6f 6e 73 74 61 6e 74 20 74 68 65 6e 20  s constant then 
a800: 62 69 74 20 30 20 6f 66 20 50 31 20 69 73 20 73  bit 0 of P1 is s
a810: 65 74 2e 20 54 68 69 73 20 69 73 20 75 73 65 64  et. This is used
a820: 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 0a 2a 2a   to determine.**
a830: 20 77 68 65 74 68 65 72 20 6d 65 74 61 20 64 61   whether meta da
a840: 74 61 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  ta associated wi
a850: 74 68 20 61 20 75 73 65 72 20 66 75 6e 63 74 69  th a user functi
a860: 6f 6e 20 61 72 67 75 6d 65 6e 74 20 75 73 69 6e  on argument usin
a870: 67 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33  g the.** sqlite3
a880: 5f 73 65 74 5f 61 75 78 64 61 74 61 28 29 20 41  _set_auxdata() A
a890: 50 49 20 6d 61 79 20 62 65 20 73 61 66 65 6c 79  PI may be safely
a8a0: 20 72 65 74 61 69 6e 65 64 20 75 6e 74 69 6c 20   retained until 
a8b0: 74 68 65 20 6e 65 78 74 0a 2a 2a 20 69 6e 76 6f  the next.** invo
a8c0: 63 61 74 69 6f 6e 20 6f 66 20 74 68 69 73 20 6f  cation of this o
a8d0: 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  pcode..**.** See
a8e0: 20 61 6c 73 6f 3a 20 41 67 67 53 74 65 70 20 61   also: AggStep a
a8f0: 6e 64 20 41 67 67 46 69 6e 61 6c 0a 2a 2f 0a 63  nd AggFinal.*/.c
a900: 61 73 65 20 4f 50 5f 46 75 6e 63 74 69 6f 6e 3a  ase OP_Function:
a910: 20 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 4d 65   {.  int i;.  Me
a920: 6d 20 2a 70 41 72 67 3b 0a 20 20 73 71 6c 69 74  m *pArg;.  sqlit
a930: 65 33 5f 63 6f 6e 74 65 78 74 20 63 74 78 3b 0a  e3_context ctx;.
a940: 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20    sqlite3_value 
a950: 2a 2a 61 70 56 61 6c 3b 0a 20 20 69 6e 74 20 6e  **apVal;.  int n
a960: 3b 0a 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 35  ;..  n = pOp->p5
a970: 3b 0a 20 20 61 70 56 61 6c 20 3d 20 70 2d 3e 61  ;.  apVal = p->a
a980: 70 41 72 67 3b 0a 20 20 61 73 73 65 72 74 28 20  pArg;.  assert( 
a990: 61 70 56 61 6c 20 7c 7c 20 6e 3d 3d 30 20 29 3b  apVal || n==0 );
a9a0: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
a9b0: 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c  p3>0 && pOp->p3<
a9c0: 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 4f  =p->nMem );.  pO
a9d0: 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
a9e0: 70 33 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54  p3];.  memAboutT
a9f0: 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29  oChange(p, pOut)
aa00: 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 6e 3d 3d  ;..  assert( n==
aa10: 30 20 7c 7c 20 28 70 4f 70 2d 3e 70 32 3e 30 20  0 || (pOp->p2>0 
aa20: 26 26 20 70 4f 70 2d 3e 70 32 2b 6e 3c 3d 70 2d  && pOp->p2+n<=p-
aa30: 3e 6e 4d 65 6d 2b 31 29 20 29 3b 0a 20 20 61 73  >nMem+1) );.  as
aa40: 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 70 4f  sert( pOp->p3<pO
aa50: 70 2d 3e 70 32 20 7c 7c 20 70 4f 70 2d 3e 70 33  p->p2 || pOp->p3
aa60: 3e 3d 70 4f 70 2d 3e 70 32 2b 6e 20 29 3b 0a 20  >=pOp->p2+n );. 
aa70: 20 70 41 72 67 20 3d 20 26 61 4d 65 6d 5b 70 4f   pArg = &aMem[pO
aa80: 70 2d 3e 70 32 5d 3b 0a 20 20 66 6f 72 28 69 3d  p->p2];.  for(i=
aa90: 30 3b 20 69 3c 6e 3b 20 69 2b 2b 2c 20 70 41 72  0; i<n; i++, pAr
aaa0: 67 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72 74  g++){.    assert
aab0: 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 41 72  ( memIsValid(pAr
aac0: 67 29 20 29 3b 0a 20 20 20 20 61 70 56 61 6c 5b  g) );.    apVal[
aad0: 69 5d 20 3d 20 70 41 72 67 3b 0a 20 20 20 20 44  i] = pArg;.    D
aae0: 65 65 70 68 65 6d 65 72 61 6c 69 7a 65 28 70 41  eephemeralize(pA
aaf0: 72 67 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  rg);.    sqlite3
ab00: 56 64 62 65 4d 65 6d 53 74 6f 72 65 54 79 70 65  VdbeMemStoreType
ab10: 28 70 41 72 67 29 3b 0a 20 20 20 20 52 45 47 49  (pArg);.    REGI
ab20: 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
ab30: 70 32 2b 69 2c 20 70 41 72 67 29 3b 0a 20 20 7d  p2+i, pArg);.  }
ab40: 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
ab50: 3e 70 34 74 79 70 65 3d 3d 50 34 5f 46 55 4e 43  >p4type==P4_FUNC
ab60: 44 45 46 20 7c 7c 20 70 4f 70 2d 3e 70 34 74 79  DEF || pOp->p4ty
ab70: 70 65 3d 3d 50 34 5f 56 44 42 45 46 55 4e 43 20  pe==P4_VDBEFUNC 
ab80: 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 34  );.  if( pOp->p4
ab90: 74 79 70 65 3d 3d 50 34 5f 46 55 4e 43 44 45 46  type==P4_FUNCDEF
aba0: 20 29 7b 0a 20 20 20 20 63 74 78 2e 70 46 75 6e   ){.    ctx.pFun
abb0: 63 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 46 75 6e  c = pOp->p4.pFun
abc0: 63 3b 0a 20 20 20 20 63 74 78 2e 70 56 64 62 65  c;.    ctx.pVdbe
abd0: 46 75 6e 63 20 3d 20 30 3b 0a 20 20 7d 65 6c 73  Func = 0;.  }els
abe0: 65 7b 0a 20 20 20 20 63 74 78 2e 70 56 64 62 65  e{.    ctx.pVdbe
abf0: 46 75 6e 63 20 3d 20 28 56 64 62 65 46 75 6e 63  Func = (VdbeFunc
ac00: 2a 29 70 4f 70 2d 3e 70 34 2e 70 56 64 62 65 46  *)pOp->p4.pVdbeF
ac10: 75 6e 63 3b 0a 20 20 20 20 63 74 78 2e 70 46 75  unc;.    ctx.pFu
ac20: 6e 63 20 3d 20 63 74 78 2e 70 56 64 62 65 46 75  nc = ctx.pVdbeFu
ac30: 6e 63 2d 3e 70 46 75 6e 63 3b 0a 20 20 7d 0a 0a  nc->pFunc;.  }..
ac40: 20 20 63 74 78 2e 73 2e 66 6c 61 67 73 20 3d 20    ctx.s.flags = 
ac50: 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 63 74 78 2e  MEM_Null;.  ctx.
ac60: 73 2e 64 62 20 3d 20 64 62 3b 0a 20 20 63 74 78  s.db = db;.  ctx
ac70: 2e 73 2e 78 44 65 6c 20 3d 20 30 3b 0a 20 20 63  .s.xDel = 0;.  c
ac80: 74 78 2e 73 2e 7a 4d 61 6c 6c 6f 63 20 3d 20 30  tx.s.zMalloc = 0
ac90: 3b 0a 0a 20 20 2f 2a 20 54 68 65 20 6f 75 74 70  ;..  /* The outp
aca0: 75 74 20 63 65 6c 6c 20 6d 61 79 20 61 6c 72 65  ut cell may alre
acb0: 61 64 79 20 68 61 76 65 20 61 20 62 75 66 66 65  ady have a buffe
acc0: 72 20 61 6c 6c 6f 63 61 74 65 64 2e 20 4d 6f 76  r allocated. Mov
acd0: 65 0a 20 20 2a 2a 20 74 68 65 20 70 6f 69 6e 74  e.  ** the point
ace0: 65 72 20 74 6f 20 63 74 78 2e 73 20 73 6f 20 69  er to ctx.s so i
acf0: 6e 20 63 61 73 65 20 74 68 65 20 75 73 65 72 2d  n case the user-
ad00: 66 75 6e 63 74 69 6f 6e 20 63 61 6e 20 75 73 65  function can use
ad10: 0a 20 20 2a 2a 20 74 68 65 20 61 6c 72 65 61 64  .  ** the alread
ad20: 79 20 61 6c 6c 6f 63 61 74 65 64 20 62 75 66 66  y allocated buff
ad30: 65 72 20 69 6e 73 74 65 61 64 20 6f 66 20 61 6c  er instead of al
ad40: 6c 6f 63 61 74 69 6e 67 20 61 20 6e 65 77 20 6f  locating a new o
ad50: 6e 65 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c 69 74  ne..  */.  sqlit
ad60: 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28 26 63  e3VdbeMemMove(&c
ad70: 74 78 2e 73 2c 20 70 4f 75 74 29 3b 0a 20 20 4d  tx.s, pOut);.  M
ad80: 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 26 63  emSetTypeFlag(&c
ad90: 74 78 2e 73 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b  tx.s, MEM_Null);
ada0: 0a 0a 20 20 63 74 78 2e 69 73 45 72 72 6f 72 20  ..  ctx.isError 
adb0: 3d 20 30 3b 0a 20 20 69 66 28 20 63 74 78 2e 70  = 0;.  if( ctx.p
adc0: 46 75 6e 63 2d 3e 66 6c 61 67 73 20 26 20 53 51  Func->flags & SQ
add0: 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f  LITE_FUNC_NEEDCO
ade0: 4c 4c 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  LL ){.    assert
adf0: 28 20 70 4f 70 3e 61 4f 70 20 29 3b 0a 20 20 20  ( pOp>aOp );.   
ae00: 20 61 73 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d   assert( pOp[-1]
ae10: 2e 70 34 74 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c  .p4type==P4_COLL
ae20: 53 45 51 20 29 3b 0a 20 20 20 20 61 73 73 65 72  SEQ );.    asser
ae30: 74 28 20 70 4f 70 5b 2d 31 5d 2e 6f 70 63 6f 64  t( pOp[-1].opcod
ae40: 65 3d 3d 4f 50 5f 43 6f 6c 6c 53 65 71 20 29 3b  e==OP_CollSeq );
ae50: 0a 20 20 20 20 63 74 78 2e 70 43 6f 6c 6c 20 3d  .    ctx.pColl =
ae60: 20 70 4f 70 5b 2d 31 5d 2e 70 34 2e 70 43 6f 6c   pOp[-1].p4.pCol
ae70: 6c 3b 0a 20 20 7d 0a 20 20 64 62 2d 3e 6c 61 73  l;.  }.  db->las
ae80: 74 52 6f 77 69 64 20 3d 20 6c 61 73 74 52 6f 77  tRowid = lastRow
ae90: 69 64 3b 0a 20 20 28 2a 63 74 78 2e 70 46 75 6e  id;.  (*ctx.pFun
aea0: 63 2d 3e 78 46 75 6e 63 29 28 26 63 74 78 2c 20  c->xFunc)(&ctx, 
aeb0: 6e 2c 20 61 70 56 61 6c 29 3b 20 2f 2a 20 49 4d  n, apVal); /* IM
aec0: 50 3a 20 52 2d 32 34 35 30 35 2d 32 33 32 33 30  P: R-24505-23230
aed0: 20 2a 2f 0a 20 20 6c 61 73 74 52 6f 77 69 64 20   */.  lastRowid 
aee0: 3d 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 3b  = db->lastRowid;
aef0: 0a 0a 20 20 2f 2a 20 49 66 20 61 6e 79 20 61 75  ..  /* If any au
af00: 78 69 6c 69 61 72 79 20 64 61 74 61 20 66 75 6e  xiliary data fun
af10: 63 74 69 6f 6e 73 20 68 61 76 65 20 62 65 65 6e  ctions have been
af20: 20 63 61 6c 6c 65 64 20 62 79 20 74 68 69 73 20   called by this 
af30: 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 2c 0a 20  user function,. 
af40: 20 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c 79 20   ** immediately 
af50: 63 61 6c 6c 20 74 68 65 20 64 65 73 74 72 75 63  call the destruc
af60: 74 6f 72 20 66 6f 72 20 61 6e 79 20 6e 6f 6e 2d  tor for any non-
af70: 73 74 61 74 69 63 20 76 61 6c 75 65 73 2e 0a 20  static values.. 
af80: 20 2a 2f 0a 20 20 69 66 28 20 63 74 78 2e 70 56   */.  if( ctx.pV
af90: 64 62 65 46 75 6e 63 20 29 7b 0a 20 20 20 20 73  dbeFunc ){.    s
afa0: 71 6c 69 74 65 33 56 64 62 65 44 65 6c 65 74 65  qlite3VdbeDelete
afb0: 41 75 78 44 61 74 61 28 63 74 78 2e 70 56 64 62  AuxData(ctx.pVdb
afc0: 65 46 75 6e 63 2c 20 70 4f 70 2d 3e 70 31 29 3b  eFunc, pOp->p1);
afd0: 0a 20 20 20 20 70 4f 70 2d 3e 70 34 2e 70 56 64  .    pOp->p4.pVd
afe0: 62 65 46 75 6e 63 20 3d 20 63 74 78 2e 70 56 64  beFunc = ctx.pVd
aff0: 62 65 46 75 6e 63 3b 0a 20 20 20 20 70 4f 70 2d  beFunc;.    pOp-
b000: 3e 70 34 74 79 70 65 20 3d 20 50 34 5f 56 44 42  >p4type = P4_VDB
b010: 45 46 55 4e 43 3b 0a 20 20 7d 0a 0a 20 20 69 66  EFUNC;.  }..  if
b020: 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c  ( db->mallocFail
b030: 65 64 20 29 7b 0a 20 20 20 20 2f 2a 20 45 76 65  ed ){.    /* Eve
b040: 6e 20 74 68 6f 75 67 68 20 61 20 6d 61 6c 6c 6f  n though a mallo
b050: 63 28 29 20 68 61 73 20 66 61 69 6c 65 64 2c 20  c() has failed, 
b060: 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  the implementati
b070: 6f 6e 20 6f 66 20 74 68 65 0a 20 20 20 20 2a 2a  on of the.    **
b080: 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 6d   user function m
b090: 61 79 20 68 61 76 65 20 63 61 6c 6c 65 64 20 61  ay have called a
b0a0: 6e 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74  n sqlite3_result
b0b0: 5f 58 58 58 28 29 20 66 75 6e 63 74 69 6f 6e 0a  _XXX() function.
b0c0: 20 20 20 20 2a 2a 20 74 6f 20 72 65 74 75 72 6e      ** to return
b0d0: 20 61 20 76 61 6c 75 65 2e 20 54 68 65 20 66 6f   a value. The fo
b0e0: 6c 6c 6f 77 69 6e 67 20 63 61 6c 6c 20 72 65 6c  llowing call rel
b0f0: 65 61 73 65 73 20 61 6e 79 20 72 65 73 6f 75 72  eases any resour
b100: 63 65 73 0a 20 20 20 20 2a 2a 20 61 73 73 6f 63  ces.    ** assoc
b110: 69 61 74 65 64 20 77 69 74 68 20 73 75 63 68 20  iated with such 
b120: 61 20 76 61 6c 75 65 2e 0a 20 20 20 20 2a 2f 0a  a value..    */.
b130: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
b140: 65 6d 52 65 6c 65 61 73 65 28 26 63 74 78 2e 73  emRelease(&ctx.s
b150: 29 3b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d  );.    goto no_m
b160: 65 6d 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 66  em;.  }..  /* If
b170: 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 72 65   the function re
b180: 74 75 72 6e 65 64 20 61 6e 20 65 72 72 6f 72 2c  turned an error,
b190: 20 74 68 72 6f 77 20 61 6e 20 65 78 63 65 70 74   throw an except
b1a0: 69 6f 6e 20 2a 2f 0a 20 20 69 66 28 20 63 74 78  ion */.  if( ctx
b1b0: 2e 69 73 45 72 72 6f 72 20 29 7b 0a 20 20 20 20  .isError ){.    
b1c0: 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67  sqlite3SetString
b1d0: 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62  (&p->zErrMsg, db
b1e0: 2c 20 22 25 73 22 2c 20 73 71 6c 69 74 65 33 5f  , "%s", sqlite3_
b1f0: 76 61 6c 75 65 5f 74 65 78 74 28 26 63 74 78 2e  value_text(&ctx.
b200: 73 29 29 3b 0a 20 20 20 20 72 63 20 3d 20 63 74  s));.    rc = ct
b210: 78 2e 69 73 45 72 72 6f 72 3b 0a 20 20 7d 0a 0a  x.isError;.  }..
b220: 20 20 2f 2a 20 43 6f 70 79 20 74 68 65 20 72 65    /* Copy the re
b230: 73 75 6c 74 20 6f 66 20 74 68 65 20 66 75 6e 63  sult of the func
b240: 74 69 6f 6e 20 69 6e 74 6f 20 72 65 67 69 73 74  tion into regist
b250: 65 72 20 50 33 20 2a 2f 0a 20 20 73 71 6c 69 74  er P3 */.  sqlit
b260: 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f  e3VdbeChangeEnco
b270: 64 69 6e 67 28 26 63 74 78 2e 73 2c 20 65 6e 63  ding(&ctx.s, enc
b280: 6f 64 69 6e 67 29 3b 0a 20 20 73 71 6c 69 74 65  oding);.  sqlite
b290: 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28 70 4f 75  3VdbeMemMove(pOu
b2a0: 74 2c 20 26 63 74 78 2e 73 29 3b 0a 20 20 69 66  t, &ctx.s);.  if
b2b0: 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  ( sqlite3VdbeMem
b2c0: 54 6f 6f 42 69 67 28 70 4f 75 74 29 20 29 7b 0a  TooBig(pOut) ){.
b2d0: 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67      goto too_big
b2e0: 3b 0a 20 20 7d 0a 0a 23 69 66 20 30 0a 20 20 2f  ;.  }..#if 0.  /
b2f0: 2a 20 54 68 65 20 61 70 70 2d 64 65 66 69 6e 65  * The app-define
b300: 64 20 66 75 6e 63 74 69 6f 6e 20 68 61 73 20 64  d function has d
b310: 6f 6e 65 20 73 6f 6d 65 74 68 69 6e 67 20 74 68  one something th
b320: 61 74 20 61 73 20 63 61 75 73 65 64 20 74 68 69  at as caused thi
b330: 73 0a 20 20 2a 2a 20 73 74 61 74 65 6d 65 6e 74  s.  ** statement
b340: 20 74 6f 20 65 78 70 69 72 65 2e 20 20 28 50 65   to expire.  (Pe
b350: 72 68 61 70 73 20 74 68 65 20 66 75 6e 63 74 69  rhaps the functi
b360: 6f 6e 20 63 61 6c 6c 65 64 20 73 71 6c 69 74 65  on called sqlite
b370: 33 5f 65 78 65 63 28 29 0a 20 20 2a 2a 20 77 69  3_exec().  ** wi
b380: 74 68 20 61 20 43 52 45 41 54 45 20 54 41 42 4c  th a CREATE TABL
b390: 45 20 73 74 61 74 65 6d 65 6e 74 2e 29 0a 20 20  E statement.).  
b3a0: 2a 2f 0a 20 20 69 66 28 20 70 2d 3e 65 78 70 69  */.  if( p->expi
b3b0: 72 65 64 20 29 20 72 63 20 3d 20 53 51 4c 49 54  red ) rc = SQLIT
b3c0: 45 5f 41 42 4f 52 54 3b 0a 23 65 6e 64 69 66 0a  E_ABORT;.#endif.
b3d0: 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43  .  REGISTER_TRAC
b3e0: 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4f 75 74 29  E(pOp->p3, pOut)
b3f0: 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  ;.  UPDATE_MAX_B
b400: 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20  LOBSIZE(pOut);. 
b410: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
b420: 63 6f 64 65 3a 20 42 69 74 41 6e 64 20 50 31 20  code: BitAnd P1 
b430: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
b440: 54 61 6b 65 20 74 68 65 20 62 69 74 2d 77 69 73  Take the bit-wis
b450: 65 20 41 4e 44 20 6f 66 20 74 68 65 20 76 61 6c  e AND of the val
b460: 75 65 73 20 69 6e 20 72 65 67 69 73 74 65 72 20  ues in register 
b470: 50 31 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a  P1 and P2 and.**
b480: 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c   store the resul
b490: 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  t in register P3
b4a0: 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69  ..** If either i
b4b0: 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68  nput is NULL, th
b4c0: 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  e result is NULL
b4d0: 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
b4e0: 42 69 74 4f 72 20 50 31 20 50 32 20 50 33 20 2a  BitOr P1 P2 P3 *
b4f0: 20 2a 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68   *.**.** Take th
b500: 65 20 62 69 74 2d 77 69 73 65 20 4f 52 20 6f 66  e bit-wise OR of
b510: 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72   the values in r
b520: 65 67 69 73 74 65 72 20 50 31 20 61 6e 64 20 50  egister P1 and P
b530: 32 20 61 6e 64 0a 2a 2a 20 73 74 6f 72 65 20 74  2 and.** store t
b540: 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67  he result in reg
b550: 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20  ister P3..** If 
b560: 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20  either input is 
b570: 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74  NULL, the result
b580: 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20   is NULL..*/./* 
b590: 4f 70 63 6f 64 65 3a 20 53 68 69 66 74 4c 65 66  Opcode: ShiftLef
b5a0: 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  t P1 P2 P3 * *.*
b5b0: 2a 0a 2a 2a 20 53 68 69 66 74 20 74 68 65 20 69  *.** Shift the i
b5c0: 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69 6e 20  nteger value in 
b5d0: 72 65 67 69 73 74 65 72 20 50 32 20 74 6f 20 74  register P2 to t
b5e0: 68 65 20 6c 65 66 74 20 62 79 20 74 68 65 0a 2a  he left by the.*
b5f0: 2a 20 6e 75 6d 62 65 72 20 6f 66 20 62 69 74 73  * number of bits
b600: 20 73 70 65 63 69 66 69 65 64 20 62 79 20 74 68   specified by th
b610: 65 20 69 6e 74 65 67 65 72 20 69 6e 20 72 65 67  e integer in reg
b620: 69 73 74 65 72 20 50 31 2e 0a 2a 2a 20 53 74 6f  ister P1..** Sto
b630: 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e  re the result in
b640: 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a   register P3..**
b650: 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74   If either input
b660: 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65   is NULL, the re
b670: 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f  sult is NULL..*/
b680: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 68 69 66  ./* Opcode: Shif
b690: 74 52 69 67 68 74 20 50 31 20 50 32 20 50 33 20  tRight P1 P2 P3 
b6a0: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 68 69 66 74 20  * *.**.** Shift 
b6b0: 74 68 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75  the integer valu
b6c0: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  e in register P2
b6d0: 20 74 6f 20 74 68 65 20 72 69 67 68 74 20 62 79   to the right by
b6e0: 20 74 68 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f   the.** number o
b6f0: 66 20 62 69 74 73 20 73 70 65 63 69 66 69 65 64  f bits specified
b700: 20 62 79 20 74 68 65 20 69 6e 74 65 67 65 72 20   by the integer 
b710: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a  in register P1..
b720: 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 72 65 73  ** Store the res
b730: 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ult in register 
b740: 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  P3..** If either
b750: 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20   input is NULL, 
b760: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
b770: 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 42  LL..*/.case OP_B
b780: 69 74 41 6e 64 3a 20 20 20 20 20 20 20 20 20 20  itAnd:          
b790: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
b7a0: 73 20 54 4b 5f 42 49 54 41 4e 44 2c 20 69 6e 31  s TK_BITAND, in1
b7b0: 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63  , in2, out3 */.c
b7c0: 61 73 65 20 4f 50 5f 42 69 74 4f 72 3a 20 20 20  ase OP_BitOr:   
b7d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
b7e0: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 42 49 54  * same as TK_BIT
b7f0: 4f 52 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75  OR, in1, in2, ou
b800: 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 68  t3 */.case OP_Sh
b810: 69 66 74 4c 65 66 74 3a 20 20 20 20 20 20 20 20  iftLeft:        
b820: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
b830: 20 54 4b 5f 4c 53 48 49 46 54 2c 20 69 6e 31 2c   TK_LSHIFT, in1,
b840: 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61   in2, out3 */.ca
b850: 73 65 20 4f 50 5f 53 68 69 66 74 52 69 67 68 74  se OP_ShiftRight
b860: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  : {           /*
b870: 20 73 61 6d 65 20 61 73 20 54 4b 5f 52 53 48 49   same as TK_RSHI
b880: 46 54 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75  FT, in1, in2, ou
b890: 74 33 20 2a 2f 0a 20 20 69 36 34 20 69 41 3b 0a  t3 */.  i64 iA;.
b8a0: 20 20 75 36 34 20 75 41 3b 0a 20 20 69 36 34 20    u64 uA;.  i64 
b8b0: 69 42 3b 0a 20 20 75 38 20 6f 70 3b 0a 0a 20 20  iB;.  u8 op;..  
b8c0: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
b8d0: 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 32 20 3d 20  ->p1];.  pIn2 = 
b8e0: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
b8f0: 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
b900: 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20 28  Op->p3];.  if( (
b910: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49  pIn1->flags | pI
b920: 6e 32 2d 3e 66 6c 61 67 73 29 20 26 20 4d 45 4d  n2->flags) & MEM
b930: 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 73 71 6c  _Null ){.    sql
b940: 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75  ite3VdbeMemSetNu
b950: 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 20 20 62 72  ll(pOut);.    br
b960: 65 61 6b 3b 0a 20 20 7d 0a 20 20 69 41 20 3d 20  eak;.  }.  iA = 
b970: 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61  sqlite3VdbeIntVa
b980: 6c 75 65 28 70 49 6e 32 29 3b 0a 20 20 69 42 20  lue(pIn2);.  iB 
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 31 29 3b 0a 20 20 6f  Value(pIn1);.  o
b9b0: 70 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b  p = pOp->opcode;
b9c0: 0a 20 20 69 66 28 20 6f 70 3d 3d 4f 50 5f 42 69  .  if( op==OP_Bi
b9d0: 74 41 6e 64 20 29 7b 0a 20 20 20 20 69 41 20 26  tAnd ){.    iA &
b9e0: 3d 20 69 42 3b 0a 20 20 7d 65 6c 73 65 20 69 66  = iB;.  }else if
b9f0: 28 20 6f 70 3d 3d 4f 50 5f 42 69 74 4f 72 20 29  ( op==OP_BitOr )
ba00: 7b 0a 20 20 20 20 69 41 20 7c 3d 20 69 42 3b 0a  {.    iA |= iB;.
ba10: 20 20 7d 65 6c 73 65 20 69 66 28 20 69 42 21 3d    }else if( iB!=
ba20: 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  0 ){.    assert(
ba30: 20 6f 70 3d 3d 4f 50 5f 53 68 69 66 74 52 69 67   op==OP_ShiftRig
ba40: 68 74 20 7c 7c 20 6f 70 3d 3d 4f 50 5f 53 68 69  ht || op==OP_Shi
ba50: 66 74 4c 65 66 74 20 29 3b 0a 0a 20 20 20 20 2f  ftLeft );..    /
ba60: 2a 20 49 66 20 73 68 69 66 74 69 6e 67 20 62 79  * If shifting by
ba70: 20 61 20 6e 65 67 61 74 69 76 65 20 61 6d 6f 75   a negative amou
ba80: 6e 74 2c 20 73 68 69 66 74 20 69 6e 20 74 68 65  nt, shift in the
ba90: 20 6f 74 68 65 72 20 64 69 72 65 63 74 69 6f 6e   other direction
baa0: 20 2a 2f 0a 20 20 20 20 69 66 28 20 69 42 3c 30   */.    if( iB<0
bab0: 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74   ){.      assert
bac0: 28 20 4f 50 5f 53 68 69 66 74 52 69 67 68 74 3d  ( OP_ShiftRight=
bad0: 3d 4f 50 5f 53 68 69 66 74 4c 65 66 74 2b 31 20  =OP_ShiftLeft+1 
bae0: 29 3b 0a 20 20 20 20 20 20 6f 70 20 3d 20 32 2a  );.      op = 2*
baf0: 4f 50 5f 53 68 69 66 74 4c 65 66 74 20 2b 20 31  OP_ShiftLeft + 1
bb00: 20 2d 20 6f 70 3b 0a 20 20 20 20 20 20 69 42 20   - op;.      iB 
bb10: 3d 20 69 42 3e 28 2d 36 34 29 20 3f 20 2d 69 42  = iB>(-64) ? -iB
bb20: 20 3a 20 36 34 3b 0a 20 20 20 20 7d 0a 0a 20 20   : 64;.    }..  
bb30: 20 20 69 66 28 20 69 42 3e 3d 36 34 20 29 7b 0a    if( iB>=64 ){.
bb40: 20 20 20 20 20 20 69 41 20 3d 20 28 69 41 3e 3d        iA = (iA>=
bb50: 30 20 7c 7c 20 6f 70 3d 3d 4f 50 5f 53 68 69 66  0 || op==OP_Shif
bb60: 74 4c 65 66 74 29 20 3f 20 30 20 3a 20 2d 31 3b  tLeft) ? 0 : -1;
bb70: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
bb80: 20 20 6d 65 6d 63 70 79 28 26 75 41 2c 20 26 69    memcpy(&uA, &i
bb90: 41 2c 20 73 69 7a 65 6f 66 28 75 41 29 29 3b 0a  A, sizeof(uA));.
bba0: 20 20 20 20 20 20 69 66 28 20 6f 70 3d 3d 4f 50        if( op==OP
bbb0: 5f 53 68 69 66 74 4c 65 66 74 20 29 7b 0a 20 20  _ShiftLeft ){.  
bbc0: 20 20 20 20 20 20 75 41 20 3c 3c 3d 20 69 42 3b        uA <<= iB;
bbd0: 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
bbe0: 20 20 20 20 20 20 75 41 20 3e 3e 3d 20 69 42 3b        uA >>= iB;
bbf0: 0a 20 20 20 20 20 20 20 20 2f 2a 20 53 69 67 6e  .        /* Sign
bc00: 2d 65 78 74 65 6e 64 20 6f 6e 20 61 20 72 69 67  -extend on a rig
bc10: 68 74 20 73 68 69 66 74 20 6f 66 20 61 20 6e 65  ht shift of a ne
bc20: 67 61 74 69 76 65 20 6e 75 6d 62 65 72 20 2a 2f  gative number */
bc30: 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3c  .        if( iA<
bc40: 30 20 29 20 75 41 20 7c 3d 20 28 28 28 28 75 36  0 ) uA |= ((((u6
bc50: 34 29 30 78 66 66 66 66 66 66 66 66 29 3c 3c 33  4)0xffffffff)<<3
bc60: 32 29 7c 30 78 66 66 66 66 66 66 66 66 29 20 3c  2)|0xffffffff) <
bc70: 3c 20 28 36 34 2d 69 42 29 3b 0a 20 20 20 20 20  < (64-iB);.     
bc80: 20 7d 0a 20 20 20 20 20 20 6d 65 6d 63 70 79 28   }.      memcpy(
bc90: 26 69 41 2c 20 26 75 41 2c 20 73 69 7a 65 6f 66  &iA, &uA, sizeof
bca0: 28 69 41 29 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  (iA));.    }.  }
bcb0: 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69  .  pOut->u.i = i
bcc0: 41 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46  A;.  MemSetTypeF
bcd0: 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e  lag(pOut, MEM_In
bce0: 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
bcf0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 64 64 49 6d  /* Opcode: AddIm
bd00: 6d 20 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  m  P1 P2 * * *.*
bd10: 2a 20 0a 2a 2a 20 41 64 64 20 74 68 65 20 63 6f  * .** Add the co
bd20: 6e 73 74 61 6e 74 20 50 32 20 74 6f 20 74 68 65  nstant P2 to the
bd30: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
bd40: 65 72 20 50 31 2e 0a 2a 2a 20 54 68 65 20 72 65  er P1..** The re
bd50: 73 75 6c 74 20 69 73 20 61 6c 77 61 79 73 20 61  sult is always a
bd60: 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2a 0a 2a 2a  n integer..**.**
bd70: 20 54 6f 20 66 6f 72 63 65 20 61 6e 79 20 72 65   To force any re
bd80: 67 69 73 74 65 72 20 74 6f 20 62 65 20 61 6e 20  gister to be an 
bd90: 69 6e 74 65 67 65 72 2c 20 6a 75 73 74 20 61 64  integer, just ad
bda0: 64 20 30 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  d 0..*/.case OP_
bdb0: 41 64 64 49 6d 6d 3a 20 7b 20 20 20 20 20 20 20  AddImm: {       
bdc0: 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20       /* in1 */. 
bdd0: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
bde0: 70 2d 3e 70 31 5d 3b 0a 20 20 6d 65 6d 41 62 6f  p->p1];.  memAbo
bdf0: 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 49  utToChange(p, pI
be00: 6e 31 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  n1);.  sqlite3Vd
be10: 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28  beMemIntegerify(
be20: 70 49 6e 31 29 3b 0a 20 20 70 49 6e 31 2d 3e 75  pIn1);.  pIn1->u
be30: 2e 69 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20  .i += pOp->p2;. 
be40: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
be50: 63 6f 64 65 3a 20 4d 75 73 74 42 65 49 6e 74 20  code: MustBeInt 
be60: 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 0a  P1 P2 * * *.** .
be70: 2a 2a 20 46 6f 72 63 65 20 74 68 65 20 76 61 6c  ** Force the val
be80: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
be90: 31 20 74 6f 20 62 65 20 61 6e 20 69 6e 74 65 67  1 to be an integ
bea0: 65 72 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75  er.  If the valu
beb0: 65 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20 6e 6f  e.** in P1 is no
bec0: 74 20 61 6e 20 69 6e 74 65 67 65 72 20 61 6e 64  t an integer and
bed0: 20 63 61 6e 6e 6f 74 20 62 65 20 63 6f 6e 76 65   cannot be conve
bee0: 72 74 65 64 20 69 6e 74 6f 20 61 6e 20 69 6e 74  rted into an int
bef0: 65 67 65 72 0a 2a 2a 20 77 69 74 68 6f 75 74 20  eger.** without 
bf00: 64 61 74 61 20 6c 6f 73 73 2c 20 74 68 65 6e 20  data loss, then 
bf10: 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79  jump immediately
bf20: 20 74 6f 20 50 32 2c 20 6f 72 20 69 66 20 50 32   to P2, or if P2
bf30: 3d 3d 30 0a 2a 2a 20 72 61 69 73 65 20 61 6e 20  ==0.** raise an 
bf40: 53 51 4c 49 54 45 5f 4d 49 53 4d 41 54 43 48 20  SQLITE_MISMATCH 
bf50: 65 78 63 65 70 74 69 6f 6e 2e 0a 2a 2f 0a 63 61  exception..*/.ca
bf60: 73 65 20 4f 50 5f 4d 75 73 74 42 65 49 6e 74 3a  se OP_MustBeInt:
bf70: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
bf80: 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20   jump, in1 */.  
bf90: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
bfa0: 2d 3e 70 31 5d 3b 0a 20 20 61 70 70 6c 79 41 66  ->p1];.  applyAf
bfb0: 66 69 6e 69 74 79 28 70 49 6e 31 2c 20 53 51 4c  finity(pIn1, SQL
bfc0: 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 2c  ITE_AFF_NUMERIC,
bfd0: 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 69 66   encoding);.  if
bfe0: 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
bff0: 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b 0a   MEM_Int)==0 ){.
c000: 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d      if( pOp->p2=
c010: 3d 30 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d  =0 ){.      rc =
c020: 20 53 51 4c 49 54 45 5f 4d 49 53 4d 41 54 43 48   SQLITE_MISMATCH
c030: 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f  ;.      goto abo
c040: 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
c050: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
c060: 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
c070: 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73   1;.    }.  }els
c080: 65 7b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70  e{.    MemSetTyp
c090: 65 46 6c 61 67 28 70 49 6e 31 2c 20 4d 45 4d 5f  eFlag(pIn1, MEM_
c0a0: 49 6e 74 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61  Int);.  }.  brea
c0b0: 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51  k;.}..#ifndef SQ
c0c0: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49  LITE_OMIT_FLOATI
c0d0: 4e 47 5f 50 4f 49 4e 54 0a 2f 2a 20 4f 70 63 6f  NG_POINT./* Opco
c0e0: 64 65 3a 20 52 65 61 6c 41 66 66 69 6e 69 74 79  de: RealAffinity
c0f0: 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   P1 * * * *.**.*
c100: 2a 20 49 66 20 72 65 67 69 73 74 65 72 20 50 31  * If register P1
c110: 20 68 6f 6c 64 73 20 61 6e 20 69 6e 74 65 67 65   holds an intege
c120: 72 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f 20  r convert it to 
c130: 61 20 72 65 61 6c 20 76 61 6c 75 65 2e 0a 2a 2a  a real value..**
c140: 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
c150: 69 73 20 75 73 65 64 20 77 68 65 6e 20 65 78 74  is used when ext
c160: 72 61 63 74 69 6e 67 20 69 6e 66 6f 72 6d 61 74  racting informat
c170: 69 6f 6e 20 66 72 6f 6d 20 61 20 63 6f 6c 75 6d  ion from a colum
c180: 6e 20 74 68 61 74 0a 2a 2a 20 68 61 73 20 52 45  n that.** has RE
c190: 41 4c 20 61 66 66 69 6e 69 74 79 2e 20 20 53 75  AL affinity.  Su
c1a0: 63 68 20 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 73  ch column values
c1b0: 20 6d 61 79 20 73 74 69 6c 6c 20 62 65 20 73 74   may still be st
c1c0: 6f 72 65 64 20 61 73 0a 2a 2a 20 69 6e 74 65 67  ored as.** integ
c1d0: 65 72 73 2c 20 66 6f 72 20 73 70 61 63 65 20 65  ers, for space e
c1e0: 66 66 69 63 69 65 6e 63 79 2c 20 62 75 74 20 61  fficiency, but a
c1f0: 66 74 65 72 20 65 78 74 72 61 63 74 69 6f 6e 20  fter extraction 
c200: 77 65 20 77 61 6e 74 20 74 68 65 6d 0a 2a 2a 20  we want them.** 
c210: 74 6f 20 68 61 76 65 20 6f 6e 6c 79 20 61 20 72  to have only a r
c220: 65 61 6c 20 76 61 6c 75 65 2e 0a 2a 2f 0a 63 61  eal value..*/.ca
c230: 73 65 20 4f 50 5f 52 65 61 6c 41 66 66 69 6e 69  se OP_RealAffini
c240: 74 79 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ty: {           
c250: 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f         /* in1 */
c260: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
c270: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20  pOp->p1];.  if( 
c280: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
c290: 4d 5f 49 6e 74 20 29 7b 0a 20 20 20 20 73 71 6c  M_Int ){.    sql
c2a0: 69 74 65 33 56 64 62 65 4d 65 6d 52 65 61 6c 69  ite3VdbeMemReali
c2b0: 66 79 28 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20  fy(pIn1);.  }.  
c2c0: 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a  break;.}.#endif.
c2d0: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
c2e0: 4f 4d 49 54 5f 43 41 53 54 0a 2f 2a 20 4f 70 63  OMIT_CAST./* Opc
c2f0: 6f 64 65 3a 20 54 6f 54 65 78 74 20 50 31 20 2a  ode: ToText P1 *
c300: 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72   * * *.**.** For
c310: 63 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  ce the value in 
c320: 72 65 67 69 73 74 65 72 20 50 31 20 74 6f 20 62  register P1 to b
c330: 65 20 74 65 78 74 2e 0a 2a 2a 20 49 66 20 74 68  e text..** If th
c340: 65 20 76 61 6c 75 65 20 69 73 20 6e 75 6d 65 72  e value is numer
c350: 69 63 2c 20 63 6f 6e 76 65 72 74 20 69 74 20 74  ic, convert it t
c360: 6f 20 61 20 73 74 72 69 6e 67 20 75 73 69 6e 67  o a string using
c370: 20 74 68 65 0a 2a 2a 20 65 71 75 69 76 61 6c 65   the.** equivale
c380: 6e 74 20 6f 66 20 70 72 69 6e 74 66 28 29 2e 20  nt of printf(). 
c390: 20 42 6c 6f 62 20 76 61 6c 75 65 73 20 61 72 65   Blob values are
c3a0: 20 75 6e 63 68 61 6e 67 65 64 20 61 6e 64 0a 2a   unchanged and.*
c3b0: 2a 20 61 72 65 20 61 66 74 65 72 77 61 72 64 73  * are afterwards
c3c0: 20 73 69 6d 70 6c 79 20 69 6e 74 65 72 70 72 65   simply interpre
c3d0: 74 65 64 20 61 73 20 74 65 78 74 2e 0a 2a 2a 0a  ted as text..**.
c3e0: 2a 2a 20 41 20 4e 55 4c 4c 20 76 61 6c 75 65 20  ** A NULL value 
c3f0: 69 73 20 6e 6f 74 20 63 68 61 6e 67 65 64 20 62  is not changed b
c400: 79 20 74 68 69 73 20 72 6f 75 74 69 6e 65 2e 20  y this routine. 
c410: 20 49 74 20 72 65 6d 61 69 6e 73 20 4e 55 4c 4c   It remains NULL
c420: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 6f 54  ..*/.case OP_ToT
c430: 65 78 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20  ext: {          
c440: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
c450: 61 73 20 54 4b 5f 54 4f 5f 54 45 58 54 2c 20 69  as TK_TO_TEXT, i
c460: 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26  n1 */.  pIn1 = &
c470: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
c480: 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
c490: 65 28 70 2c 20 70 49 6e 31 29 3b 0a 20 20 69 66  e(p, pIn1);.  if
c4a0: 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20  ( pIn1->flags & 
c4b0: 4d 45 4d 5f 4e 75 6c 6c 20 29 20 62 72 65 61 6b  MEM_Null ) break
c4c0: 3b 0a 20 20 61 73 73 65 72 74 28 20 4d 45 4d 5f  ;.  assert( MEM_
c4d0: 53 74 72 3d 3d 28 4d 45 4d 5f 42 6c 6f 62 3e 3e  Str==(MEM_Blob>>
c4e0: 33 29 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c  3) );.  pIn1->fl
c4f0: 61 67 73 20 7c 3d 20 28 70 49 6e 31 2d 3e 66 6c  ags |= (pIn1->fl
c500: 61 67 73 26 4d 45 4d 5f 42 6c 6f 62 29 3e 3e 33  ags&MEM_Blob)>>3
c510: 3b 0a 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74  ;.  applyAffinit
c520: 79 28 70 49 6e 31 2c 20 53 51 4c 49 54 45 5f 41  y(pIn1, SQLITE_A
c530: 46 46 5f 54 45 58 54 2c 20 65 6e 63 6f 64 69 6e  FF_TEXT, encodin
c540: 67 29 3b 0a 20 20 72 63 20 3d 20 45 78 70 61 6e  g);.  rc = Expan
c550: 64 42 6c 6f 62 28 70 49 6e 31 29 3b 0a 20 20 61  dBlob(pIn1);.  a
c560: 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61  ssert( pIn1->fla
c570: 67 73 20 26 20 4d 45 4d 5f 53 74 72 20 7c 7c 20  gs & MEM_Str || 
c580: 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64  db->mallocFailed
c590: 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67   );.  pIn1->flag
c5a0: 73 20 26 3d 20 7e 28 4d 45 4d 5f 49 6e 74 7c 4d  s &= ~(MEM_Int|M
c5b0: 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 42 6c 6f 62  EM_Real|MEM_Blob
c5c0: 7c 4d 45 4d 5f 5a 65 72 6f 29 3b 0a 20 20 55 50  |MEM_Zero);.  UP
c5d0: 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
c5e0: 45 28 70 49 6e 31 29 3b 0a 20 20 62 72 65 61 6b  E(pIn1);.  break
c5f0: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
c600: 54 6f 42 6c 6f 62 20 50 31 20 2a 20 2a 20 2a 20  ToBlob P1 * * * 
c610: 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68  *.**.** Force th
c620: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
c630: 74 65 72 20 50 31 20 74 6f 20 62 65 20 61 20 42  ter P1 to be a B
c640: 4c 4f 42 2e 0a 2a 2a 20 49 66 20 74 68 65 20 76  LOB..** If the v
c650: 61 6c 75 65 20 69 73 20 6e 75 6d 65 72 69 63 2c  alue is numeric,
c660: 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f 20 61   convert it to a
c670: 20 73 74 72 69 6e 67 20 66 69 72 73 74 2e 0a 2a   string first..*
c680: 2a 20 53 74 72 69 6e 67 73 20 61 72 65 20 73 69  * Strings are si
c690: 6d 70 6c 79 20 72 65 69 6e 74 65 72 70 72 65 74  mply reinterpret
c6a0: 65 64 20 61 73 20 62 6c 6f 62 73 20 77 69 74 68  ed as blobs with
c6b0: 20 6e 6f 20 63 68 61 6e 67 65 0a 2a 2a 20 74 6f   no change.** to
c6c0: 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20   the underlying 
c6d0: 64 61 74 61 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55  data..**.** A NU
c6e0: 4c 4c 20 76 61 6c 75 65 20 69 73 20 6e 6f 74 20  LL value is not 
c6f0: 63 68 61 6e 67 65 64 20 62 79 20 74 68 69 73 20  changed by this 
c700: 72 6f 75 74 69 6e 65 2e 20 20 49 74 20 72 65 6d  routine.  It rem
c710: 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61  ains NULL..*/.ca
c720: 73 65 20 4f 50 5f 54 6f 42 6c 6f 62 3a 20 7b 20  se OP_ToBlob: { 
c730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c740: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 54   /* same as TK_T
c750: 4f 5f 42 4c 4f 42 2c 20 69 6e 31 20 2a 2f 0a 20  O_BLOB, in1 */. 
c760: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
c770: 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70 49  p->p1];.  if( pI
c780: 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
c790: 4e 75 6c 6c 20 29 20 62 72 65 61 6b 3b 0a 20 20  Null ) break;.  
c7a0: 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
c7b0: 20 26 20 4d 45 4d 5f 42 6c 6f 62 29 3d 3d 30 20   & MEM_Blob)==0 
c7c0: 29 7b 0a 20 20 20 20 61 70 70 6c 79 41 66 66 69  ){.    applyAffi
c7d0: 6e 69 74 79 28 70 49 6e 31 2c 20 53 51 4c 49 54  nity(pIn1, SQLIT
c7e0: 45 5f 41 46 46 5f 54 45 58 54 2c 20 65 6e 63 6f  E_AFF_TEXT, enco
c7f0: 64 69 6e 67 29 3b 0a 20 20 20 20 61 73 73 65 72  ding);.    asser
c800: 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  t( pIn1->flags &
c810: 20 4d 45 4d 5f 53 74 72 20 7c 7c 20 64 62 2d 3e   MEM_Str || db->
c820: 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 3b 0a  mallocFailed );.
c830: 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c      MemSetTypeFl
c840: 61 67 28 70 49 6e 31 2c 20 4d 45 4d 5f 42 6c 6f  ag(pIn1, MEM_Blo
c850: 62 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  b);.  }else{.   
c860: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 3d 20   pIn1->flags &= 
c870: 7e 28 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 26 7e  ~(MEM_TypeMask&~
c880: 4d 45 4d 5f 42 6c 6f 62 29 3b 0a 20 20 7d 0a 20  MEM_Blob);.  }. 
c890: 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42   UPDATE_MAX_BLOB
c8a0: 53 49 5a 45 28 70 49 6e 31 29 3b 0a 20 20 62 72  SIZE(pIn1);.  br
c8b0: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
c8c0: 65 3a 20 54 6f 4e 75 6d 65 72 69 63 20 50 31 20  e: ToNumeric P1 
c8d0: 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f  * * * *.**.** Fo
c8e0: 72 63 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e  rce the value in
c8f0: 20 72 65 67 69 73 74 65 72 20 50 31 20 74 6f 20   register P1 to 
c900: 62 65 20 6e 75 6d 65 72 69 63 20 28 65 69 74 68  be numeric (eith
c910: 65 72 20 61 6e 0a 2a 2a 20 69 6e 74 65 67 65 72  er an.** integer
c920: 20 6f 72 20 61 20 66 6c 6f 61 74 69 6e 67 2d 70   or a floating-p
c930: 6f 69 6e 74 20 6e 75 6d 62 65 72 2e 29 0a 2a 2a  oint number.).**
c940: 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 69 73   If the value is
c950: 20 74 65 78 74 20 6f 72 20 62 6c 6f 62 2c 20 74   text or blob, t
c960: 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20 69 74  ry to convert it
c970: 20 74 6f 20 61 6e 20 75 73 69 6e 67 20 74 68 65   to an using the
c980: 0a 2a 2a 20 65 71 75 69 76 61 6c 65 6e 74 20 6f  .** equivalent o
c990: 66 20 61 74 6f 69 28 29 20 6f 72 20 61 74 6f 66  f atoi() or atof
c9a0: 28 29 20 61 6e 64 20 73 74 6f 72 65 20 30 20 69  () and store 0 i
c9b0: 66 20 6e 6f 20 73 75 63 68 20 63 6f 6e 76 65 72  f no such conver
c9c0: 73 69 6f 6e 20 0a 2a 2a 20 69 73 20 70 6f 73 73  sion .** is poss
c9d0: 69 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55  ible..**.** A NU
c9e0: 4c 4c 20 76 61 6c 75 65 20 69 73 20 6e 6f 74 20  LL value is not 
c9f0: 63 68 61 6e 67 65 64 20 62 79 20 74 68 69 73 20  changed by this 
ca00: 72 6f 75 74 69 6e 65 2e 20 20 49 74 20 72 65 6d  routine.  It rem
ca10: 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61  ains NULL..*/.ca
ca20: 73 65 20 4f 50 5f 54 6f 4e 75 6d 65 72 69 63 3a  se OP_ToNumeric:
ca30: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
ca40: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
ca50: 4b 5f 54 4f 5f 4e 55 4d 45 52 49 43 2c 20 69 6e  K_TO_NUMERIC, in
ca60: 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  1 */.  pIn1 = &a
ca70: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
ca80: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4e 75  sqlite3VdbeMemNu
ca90: 6d 65 72 69 66 79 28 70 49 6e 31 29 3b 0a 20 20  merify(pIn1);.  
caa0: 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20  break;.}.#endif 
cab0: 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43  /* SQLITE_OMIT_C
cac0: 41 53 54 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64  AST */../* Opcod
cad0: 65 3a 20 54 6f 49 6e 74 20 50 31 20 2a 20 2a 20  e: ToInt P1 * * 
cae0: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20  * *.**.** Force 
caf0: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
cb00: 69 73 74 65 72 20 50 31 20 74 6f 20 62 65 20 61  ister P1 to be a
cb10: 6e 20 69 6e 74 65 67 65 72 2e 20 20 49 66 0a 2a  n integer.  If.*
cb20: 2a 20 54 68 65 20 76 61 6c 75 65 20 69 73 20 63  * The value is c
cb30: 75 72 72 65 6e 74 6c 79 20 61 20 72 65 61 6c 20  urrently a real 
cb40: 6e 75 6d 62 65 72 2c 20 64 72 6f 70 20 69 74 73  number, drop its
cb50: 20 66 72 61 63 74 69 6f 6e 61 6c 20 70 61 72 74   fractional part
cb60: 2e 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75  ..** If the valu
cb70: 65 20 69 73 20 74 65 78 74 20 6f 72 20 62 6c 6f  e is text or blo
cb80: 62 2c 20 74 72 79 20 74 6f 20 63 6f 6e 76 65 72  b, try to conver
cb90: 74 20 69 74 20 74 6f 20 61 6e 20 69 6e 74 65 67  t it to an integ
cba0: 65 72 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20  er using the.** 
cbb0: 65 71 75 69 76 61 6c 65 6e 74 20 6f 66 20 61 74  equivalent of at
cbc0: 6f 69 28 29 20 61 6e 64 20 73 74 6f 72 65 20 30  oi() and store 0
cbd0: 20 69 66 20 6e 6f 20 73 75 63 68 20 63 6f 6e 76   if no such conv
cbe0: 65 72 73 69 6f 6e 20 69 73 20 70 6f 73 73 69 62  ersion is possib
cbf0: 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c  le..**.** A NULL
cc00: 20 76 61 6c 75 65 20 69 73 20 6e 6f 74 20 63 68   value is not ch
cc10: 61 6e 67 65 64 20 62 79 20 74 68 69 73 20 72 6f  anged by this ro
cc20: 75 74 69 6e 65 2e 20 20 49 74 20 72 65 6d 61 69  utine.  It remai
cc30: 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65  ns NULL..*/.case
cc40: 20 4f 50 5f 54 6f 49 6e 74 3a 20 7b 20 20 20 20   OP_ToInt: {    
cc50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
cc60: 20 73 61 6d 65 20 61 73 20 54 4b 5f 54 4f 5f 49   same as TK_TO_I
cc70: 4e 54 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e  NT, in1 */.  pIn
cc80: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
cc90: 31 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d  1];.  if( (pIn1-
cca0: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
ccb0: 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c  l)==0 ){.    sql
ccc0: 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67  ite3VdbeMemInteg
ccd0: 65 72 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 7d  erify(pIn1);.  }
cce0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66  .  break;.}..#if
ccf0: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
cd00: 5f 4f 4d 49 54 5f 43 41 53 54 29 20 26 26 20 21  _OMIT_CAST) && !
cd10: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
cd20: 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49  MIT_FLOATING_POI
cd30: 4e 54 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54  NT)./* Opcode: T
cd40: 6f 52 65 61 6c 20 50 31 20 2a 20 2a 20 2a 20 2a  oReal P1 * * * *
cd50: 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65  .**.** Force the
cd60: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
cd70: 65 72 20 50 31 20 74 6f 20 62 65 20 61 20 66 6c  er P1 to be a fl
cd80: 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 6e 75 6d  oating point num
cd90: 62 65 72 2e 0a 2a 2a 20 49 66 20 54 68 65 20 76  ber..** If The v
cda0: 61 6c 75 65 20 69 73 20 63 75 72 72 65 6e 74 6c  alue is currentl
cdb0: 79 20 61 6e 20 69 6e 74 65 67 65 72 2c 20 63 6f  y an integer, co
cdc0: 6e 76 65 72 74 20 69 74 2e 0a 2a 2a 20 49 66 20  nvert it..** If 
cdd0: 74 68 65 20 76 61 6c 75 65 20 69 73 20 74 65 78  the value is tex
cde0: 74 20 6f 72 20 62 6c 6f 62 2c 20 74 72 79 20 74  t or blob, try t
cdf0: 6f 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f 20  o convert it to 
ce00: 61 6e 20 69 6e 74 65 67 65 72 20 75 73 69 6e 67  an integer using
ce10: 20 74 68 65 0a 2a 2a 20 65 71 75 69 76 61 6c 65   the.** equivale
ce20: 6e 74 20 6f 66 20 61 74 6f 69 28 29 20 61 6e 64  nt of atoi() and
ce30: 20 73 74 6f 72 65 20 30 2e 30 20 69 66 20 6e 6f   store 0.0 if no
ce40: 20 73 75 63 68 20 63 6f 6e 76 65 72 73 69 6f 6e   such conversion
ce50: 20 69 73 20 70 6f 73 73 69 62 6c 65 2e 0a 2a 2a   is possible..**
ce60: 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76 61 6c 75 65  .** A NULL value
ce70: 20 69 73 20 6e 6f 74 20 63 68 61 6e 67 65 64 20   is not changed 
ce80: 62 79 20 74 68 69 73 20 72 6f 75 74 69 6e 65 2e  by this routine.
ce90: 20 20 49 74 20 72 65 6d 61 69 6e 73 20 4e 55 4c    It remains NUL
cea0: 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 6f  L..*/.case OP_To
ceb0: 52 65 61 6c 3a 20 7b 20 20 20 20 20 20 20 20 20  Real: {         
cec0: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
ced0: 20 61 73 20 54 4b 5f 54 4f 5f 52 45 41 4c 2c 20   as TK_TO_REAL, 
cee0: 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  in1 */.  pIn1 = 
cef0: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
cf00: 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
cf10: 67 65 28 70 2c 20 70 49 6e 31 29 3b 0a 20 20 69  ge(p, pIn1);.  i
cf20: 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
cf30: 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29  & MEM_Null)==0 )
cf40: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
cf50: 65 4d 65 6d 52 65 61 6c 69 66 79 28 70 49 6e 31  eMemRealify(pIn1
cf60: 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
cf70: 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 21 64 65 66  }.#endif /* !def
cf80: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
cf90: 5f 43 41 53 54 29 20 26 26 20 21 64 65 66 69 6e  _CAST) && !defin
cfa0: 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ed(SQLITE_OMIT_F
cfb0: 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 29 20 2a  LOATING_POINT) *
cfc0: 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 74  /../* Opcode: Lt
cfd0: 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
cfe0: 2a 2a 0a 2a 2a 20 43 6f 6d 70 61 72 65 20 74 68  **.** Compare th
cff0: 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69  e values in regi
d000: 73 74 65 72 20 50 31 20 61 6e 64 20 50 33 2e 20  ster P1 and P3. 
d010: 20 49 66 20 72 65 67 28 50 33 29 3c 72 65 67 28   If reg(P3)<reg(
d020: 50 31 29 20 74 68 65 6e 0a 2a 2a 20 6a 75 6d 70  P1) then.** jump
d030: 20 74 6f 20 61 64 64 72 65 73 73 20 50 32 2e 20   to address P2. 
d040: 20 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53   .**.** If the S
d050: 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c  QLITE_JUMPIFNULL
d060: 20 62 69 74 20 6f 66 20 50 35 20 69 73 20 73 65   bit of P5 is se
d070: 74 20 61 6e 64 20 65 69 74 68 65 72 20 72 65 67  t and either reg
d080: 28 50 31 29 20 6f 72 0a 2a 2a 20 72 65 67 28 50  (P1) or.** reg(P
d090: 33 29 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20  3) is NULL then 
d0a0: 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 2e 20 20  take the jump.  
d0b0: 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f 4a 55  If the SQLITE_JU
d0c0: 4d 50 49 46 4e 55 4c 4c 20 0a 2a 2a 20 62 69 74  MPIFNULL .** bit
d0d0: 20 69 73 20 63 6c 65 61 72 20 74 68 65 6e 20 66   is clear then f
d0e0: 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 66 20 65  all through if e
d0f0: 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73  ither operand is
d100: 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68 65   NULL..**.** The
d110: 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b   SQLITE_AFF_MASK
d120: 20 70 6f 72 74 69 6f 6e 20 6f 66 20 50 35 20 6d   portion of P5 m
d130: 75 73 74 20 62 65 20 61 6e 20 61 66 66 69 6e 69  ust be an affini
d140: 74 79 20 63 68 61 72 61 63 74 65 72 20 2d 0a 2a  ty character -.*
d150: 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58  * SQLITE_AFF_TEX
d160: 54 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e  T, SQLITE_AFF_IN
d170: 54 45 47 45 52 2c 20 61 6e 64 20 73 6f 20 66 6f  TEGER, and so fo
d180: 72 74 68 2e 20 41 6e 20 61 74 74 65 6d 70 74 20  rth. An attempt 
d190: 69 73 20 6d 61 64 65 20 0a 2a 2a 20 74 6f 20 63  is made .** to c
d1a0: 6f 65 72 63 65 20 62 6f 74 68 20 69 6e 70 75 74  oerce both input
d1b0: 73 20 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 74  s according to t
d1c0: 68 69 73 20 61 66 66 69 6e 69 74 79 20 62 65 66  his affinity bef
d1d0: 6f 72 65 20 74 68 65 0a 2a 2a 20 63 6f 6d 70 61  ore the.** compa
d1e0: 72 69 73 6f 6e 20 69 73 20 6d 61 64 65 2e 20 49  rison is made. I
d1f0: 66 20 74 68 65 20 53 51 4c 49 54 45 5f 41 46 46  f the SQLITE_AFF
d200: 5f 4d 41 53 4b 20 69 73 20 30 78 30 30 2c 20 74  _MASK is 0x00, t
d210: 68 65 6e 20 6e 75 6d 65 72 69 63 0a 2a 2a 20 61  hen numeric.** a
d220: 66 66 69 6e 69 74 79 20 69 73 20 75 73 65 64 2e  ffinity is used.
d230: 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20 61   Note that the a
d240: 66 66 69 6e 69 74 79 20 63 6f 6e 76 65 72 73 69  ffinity conversi
d250: 6f 6e 73 20 61 72 65 20 73 74 6f 72 65 64 0a 2a  ons are stored.*
d260: 2a 20 62 61 63 6b 20 69 6e 74 6f 20 74 68 65 20  * back into the 
d270: 69 6e 70 75 74 20 72 65 67 69 73 74 65 72 73 20  input registers 
d280: 50 31 20 61 6e 64 20 50 33 2e 20 20 53 6f 20 74  P1 and P3.  So t
d290: 68 69 73 20 6f 70 63 6f 64 65 20 63 61 6e 20 63  his opcode can c
d2a0: 61 75 73 65 0a 2a 2a 20 70 65 72 73 69 73 74 65  ause.** persiste
d2b0: 6e 74 20 63 68 61 6e 67 65 73 20 74 6f 20 72 65  nt changes to re
d2c0: 67 69 73 74 65 72 73 20 50 31 20 61 6e 64 20 50  gisters P1 and P
d2d0: 33 2e 0a 2a 2a 0a 2a 2a 20 4f 6e 63 65 20 61 6e  3..**.** Once an
d2e0: 79 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20 68 61  y conversions ha
d2f0: 76 65 20 74 61 6b 65 6e 20 70 6c 61 63 65 2c 20  ve taken place, 
d300: 61 6e 64 20 6e 65 69 74 68 65 72 20 76 61 6c 75  and neither valu
d310: 65 20 69 73 20 4e 55 4c 4c 2c 20 0a 2a 2a 20 74  e is NULL, .** t
d320: 68 65 20 76 61 6c 75 65 73 20 61 72 65 20 63 6f  he values are co
d330: 6d 70 61 72 65 64 2e 20 49 66 20 62 6f 74 68 20  mpared. If both 
d340: 76 61 6c 75 65 73 20 61 72 65 20 62 6c 6f 62 73  values are blobs
d350: 20 74 68 65 6e 20 6d 65 6d 63 6d 70 28 29 20 69   then memcmp() i
d360: 73 0a 2a 2a 20 75 73 65 64 20 74 6f 20 64 65 74  s.** used to det
d370: 65 72 6d 69 6e 65 20 74 68 65 20 72 65 73 75 6c  ermine the resul
d380: 74 73 20 6f 66 20 74 68 65 20 63 6f 6d 70 61 72  ts of the compar
d390: 69 73 6f 6e 2e 20 20 49 66 20 62 6f 74 68 20 76  ison.  If both v
d3a0: 61 6c 75 65 73 0a 2a 2a 20 61 72 65 20 74 65 78  alues.** are tex
d3b0: 74 2c 20 74 68 65 6e 20 74 68 65 20 61 70 70 72  t, then the appr
d3c0: 6f 70 72 69 61 74 65 20 63 6f 6c 6c 61 74 69 6e  opriate collatin
d3d0: 67 20 66 75 6e 63 74 69 6f 6e 20 73 70 65 63 69  g function speci
d3e0: 66 69 65 64 20 69 6e 0a 2a 2a 20 50 34 20 69 73  fied in.** P4 is
d3f0: 20 20 75 73 65 64 20 74 6f 20 64 6f 20 74 68 65    used to do the
d400: 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 49 66   comparison.  If
d410: 20 50 34 20 69 73 20 6e 6f 74 20 73 70 65 63 69   P4 is not speci
d420: 66 69 65 64 20 74 68 65 6e 0a 2a 2a 20 6d 65 6d  fied then.** mem
d430: 63 6d 70 28 29 20 69 73 20 75 73 65 64 20 74 6f  cmp() is used to
d440: 20 63 6f 6d 70 61 72 65 20 74 65 78 74 20 73 74   compare text st
d450: 72 69 6e 67 2e 20 20 49 66 20 62 6f 74 68 20 76  ring.  If both v
d460: 61 6c 75 65 73 20 61 72 65 0a 2a 2a 20 6e 75 6d  alues are.** num
d470: 65 72 69 63 2c 20 74 68 65 6e 20 61 20 6e 75 6d  eric, then a num
d480: 65 72 69 63 20 63 6f 6d 70 61 72 69 73 6f 6e 20  eric comparison 
d490: 69 73 20 75 73 65 64 2e 20 49 66 20 74 68 65 20  is used. If the 
d4a0: 74 77 6f 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72  two values.** ar
d4b0: 65 20 6f 66 20 64 69 66 66 65 72 65 6e 74 20 74  e of different t
d4c0: 79 70 65 73 2c 20 74 68 65 6e 20 6e 75 6d 62 65  ypes, then numbe
d4d0: 72 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65  rs are considere
d4e0: 64 20 6c 65 73 73 20 74 68 61 6e 0a 2a 2a 20 73  d less than.** s
d4f0: 74 72 69 6e 67 73 20 61 6e 64 20 73 74 72 69 6e  trings and strin
d500: 67 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65  gs are considere
d510: 64 20 6c 65 73 73 20 74 68 61 6e 20 62 6c 6f 62  d less than blob
d520: 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  s..**.** If the 
d530: 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 62  SQLITE_STOREP2 b
d540: 69 74 20 6f 66 20 50 35 20 69 73 20 73 65 74 2c  it of P5 is set,
d550: 20 74 68 65 6e 20 64 6f 20 6e 6f 74 20 6a 75 6d   then do not jum
d560: 70 2e 20 20 49 6e 73 74 65 61 64 2c 0a 2a 2a 20  p.  Instead,.** 
d570: 73 74 6f 72 65 20 61 20 62 6f 6f 6c 65 61 6e 20  store a boolean 
d580: 72 65 73 75 6c 74 20 28 65 69 74 68 65 72 20 30  result (either 0
d590: 2c 20 6f 72 20 31 2c 20 6f 72 20 4e 55 4c 4c 29  , or 1, or NULL)
d5a0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e   in register P2.
d5b0: 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e  .*/./* Opcode: N
d5c0: 65 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  e P1 P2 P3 P4 P5
d5d0: 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b  .**.** This work
d5e0: 73 20 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20  s just like the 
d5f0: 4c 74 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74  Lt opcode except
d600: 20 74 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69   that the jump i
d610: 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68  s taken if.** th
d620: 65 20 6f 70 65 72 61 6e 64 73 20 69 6e 20 72 65  e operands in re
d630: 67 69 73 74 65 72 73 20 50 31 20 61 6e 64 20 50  gisters P1 and P
d640: 33 20 61 72 65 20 6e 6f 74 20 65 71 75 61 6c 2e  3 are not equal.
d650: 20 20 53 65 65 20 74 68 65 20 4c 74 20 6f 70 63    See the Lt opc
d660: 6f 64 65 20 66 6f 72 0a 2a 2a 20 61 64 64 69 74  ode for.** addit
d670: 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ional informatio
d680: 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 53 51 4c 49  n..**.** If SQLI
d690: 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20 73 65 74  TE_NULLEQ is set
d6a0: 20 69 6e 20 50 35 20 74 68 65 6e 20 74 68 65 20   in P5 then the 
d6b0: 72 65 73 75 6c 74 20 6f 66 20 63 6f 6d 70 61 72  result of compar
d6c0: 69 73 6f 6e 20 69 73 20 61 6c 77 61 79 73 20 65  ison is always e
d6d0: 69 74 68 65 72 0a 2a 2a 20 74 72 75 65 20 6f 72  ither.** true or
d6e0: 20 66 61 6c 73 65 20 61 6e 64 20 69 73 20 6e 65   false and is ne
d6f0: 76 65 72 20 4e 55 4c 4c 2e 20 20 49 66 20 62 6f  ver NULL.  If bo
d700: 74 68 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20  th operands are 
d710: 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65 20 72 65  NULL then the re
d720: 73 75 6c 74 0a 2a 2a 20 6f 66 20 63 6f 6d 70 61  sult.** of compa
d730: 72 69 73 6f 6e 20 69 73 20 66 61 6c 73 65 2e 20  rison is false. 
d740: 20 49 66 20 65 69 74 68 65 72 20 6f 70 65 72 61   If either opera
d750: 6e 64 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20  nd is NULL then 
d760: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 74 72  the result is tr
d770: 75 65 2e 0a 2a 2a 20 49 66 20 6e 65 69 74 68 65  ue..** If neithe
d780: 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c  r operand is NUL
d790: 4c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  L the result is 
d7a0: 74 68 65 20 73 61 6d 65 20 61 73 20 69 74 20 77  the same as it w
d7b0: 6f 75 6c 64 20 62 65 20 69 66 0a 2a 2a 20 74 68  ould be if.** th
d7c0: 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20  e SQLITE_NULLEQ 
d7d0: 66 6c 61 67 20 77 65 72 65 20 6f 6d 69 74 74 65  flag were omitte
d7e0: 64 20 66 72 6f 6d 20 50 35 2e 0a 2a 2f 0a 2f 2a  d from P5..*/./*
d7f0: 20 4f 70 63 6f 64 65 3a 20 45 71 20 50 31 20 50   Opcode: Eq P1 P
d800: 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a  2 P3 P4 P5.**.**
d810: 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74   This works just
d820: 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63   like the Lt opc
d830: 6f 64 65 20 65 78 63 65 70 74 20 74 68 61 74 20  ode except that 
d840: 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65  the jump is take
d850: 6e 20 69 66 0a 2a 2a 20 74 68 65 20 6f 70 65 72  n if.** the oper
d860: 61 6e 64 73 20 69 6e 20 72 65 67 69 73 74 65 72  ands in register
d870: 73 20 50 31 20 61 6e 64 20 50 33 20 61 72 65 20  s P1 and P3 are 
d880: 65 71 75 61 6c 2e 0a 2a 2a 20 53 65 65 20 74 68  equal..** See th
d890: 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 20  e Lt opcode for 
d8a0: 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72  additional infor
d8b0: 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66  mation..**.** If
d8c0: 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69   SQLITE_NULLEQ i
d8d0: 73 20 73 65 74 20 69 6e 20 50 35 20 74 68 65 6e  s set in P5 then
d8e0: 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 63   the result of c
d8f0: 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 61 6c 77  omparison is alw
d900: 61 79 73 20 65 69 74 68 65 72 0a 2a 2a 20 74 72  ays either.** tr
d910: 75 65 20 6f 72 20 66 61 6c 73 65 20 61 6e 64 20  ue or false and 
d920: 69 73 20 6e 65 76 65 72 20 4e 55 4c 4c 2e 20 20  is never NULL.  
d930: 49 66 20 62 6f 74 68 20 6f 70 65 72 61 6e 64 73  If both operands
d940: 20 61 72 65 20 4e 55 4c 4c 20 74 68 65 6e 20 74   are NULL then t
d950: 68 65 20 72 65 73 75 6c 74 0a 2a 2a 20 6f 66 20  he result.** of 
d960: 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 74 72  comparison is tr
d970: 75 65 2e 20 20 49 66 20 65 69 74 68 65 72 20 6f  ue.  If either o
d980: 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20 74  perand is NULL t
d990: 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69  hen the result i
d9a0: 73 20 66 61 6c 73 65 2e 0a 2a 2a 20 49 66 20 6e  s false..** If n
d9b0: 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69  either operand i
d9c0: 73 20 4e 55 4c 4c 20 74 68 65 20 72 65 73 75 6c  s NULL the resul
d9d0: 74 20 69 73 20 74 68 65 20 73 61 6d 65 20 61 73  t is the same as
d9e0: 20 69 74 20 77 6f 75 6c 64 20 62 65 20 69 66 0a   it would be if.
d9f0: 2a 2a 20 74 68 65 20 53 51 4c 49 54 45 5f 4e 55  ** the SQLITE_NU
da00: 4c 4c 45 51 20 66 6c 61 67 20 77 65 72 65 20 6f  LLEQ flag were o
da10: 6d 69 74 74 65 64 20 66 72 6f 6d 20 50 35 2e 0a  mitted from P5..
da20: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 65  */./* Opcode: Le
da30: 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
da40: 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73  **.** This works
da50: 20 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c   just like the L
da60: 74 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20  t opcode except 
da70: 74 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73  that the jump is
da80: 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65   taken if.** the
da90: 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69   content of regi
daa0: 73 74 65 72 20 50 33 20 69 73 20 6c 65 73 73 20  ster P3 is less 
dab0: 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f  than or equal to
dac0: 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a   the content of.
dad0: 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31 2e 20  ** register P1. 
dae0: 20 53 65 65 20 74 68 65 20 4c 74 20 6f 70 63 6f   See the Lt opco
daf0: 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61  de for additiona
db00: 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a  l information..*
db10: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 47 74 20  /./* Opcode: Gt 
db20: 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
db30: 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20  *.** This works 
db40: 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74  just like the Lt
db50: 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20 74   opcode except t
db60: 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20  hat the jump is 
db70: 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20  taken if.** the 
db80: 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73  content of regis
db90: 74 65 72 20 50 33 20 69 73 20 67 72 65 61 74 65  ter P3 is greate
dba0: 72 20 74 68 61 6e 20 74 68 65 20 63 6f 6e 74 65  r than the conte
dbb0: 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69 73 74 65  nt of.** registe
dbc0: 72 20 50 31 2e 20 20 53 65 65 20 74 68 65 20 4c  r P1.  See the L
dbd0: 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64 64  t opcode for add
dbe0: 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74  itional informat
dbf0: 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ion..*/./* Opcod
dc00: 65 3a 20 47 65 20 50 31 20 50 32 20 50 33 20 50  e: Ge P1 P2 P3 P
dc10: 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  4 P5.**.** This 
dc20: 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20  works just like 
dc30: 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78  the Lt opcode ex
dc40: 63 65 70 74 20 74 68 61 74 20 74 68 65 20 6a 75  cept that the ju
dc50: 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a  mp is taken if.*
dc60: 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  * the content of
dc70: 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20   register P3 is 
dc80: 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20  greater than or 
dc90: 65 71 75 61 6c 20 74 6f 20 74 68 65 20 63 6f 6e  equal to the con
dca0: 74 65 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69 73  tent of.** regis
dcb0: 74 65 72 20 50 31 2e 20 20 53 65 65 20 74 68 65  ter P1.  See the
dcc0: 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61   Lt opcode for a
dcd0: 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d  dditional inform
dce0: 61 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ation..*/.case O
dcf0: 50 5f 45 71 3a 20 20 20 20 20 20 20 20 20 20 20  P_Eq:           
dd00: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
dd10: 4b 5f 45 51 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c  K_EQ, jump, in1,
dd20: 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f   in3 */.case OP_
dd30: 4e 65 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  Ne:             
dd40: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
dd50: 4e 45 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69  NE, jump, in1, i
dd60: 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 74  n3 */.case OP_Lt
dd70: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :               
dd80: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4c 54  /* same as TK_LT
dd90: 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33  , jump, in1, in3
dda0: 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 65 3a 20   */.case OP_Le: 
ddb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
ddc0: 20 73 61 6d 65 20 61 73 20 54 4b 5f 4c 45 2c 20   same as TK_LE, 
ddd0: 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a  jump, in1, in3 *
dde0: 2f 0a 63 61 73 65 20 4f 50 5f 47 74 3a 20 20 20  /.case OP_Gt:   
ddf0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
de00: 61 6d 65 20 61 73 20 54 4b 5f 47 54 2c 20 6a 75  ame as TK_GT, ju
de10: 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a  mp, in1, in3 */.
de20: 63 61 73 65 20 4f 50 5f 47 65 3a 20 7b 20 20 20  case OP_Ge: {   
de30: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
de40: 65 20 61 73 20 54 4b 5f 47 45 2c 20 6a 75 6d 70  e as TK_GE, jump
de50: 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 20 20  , in1, in3 */.  
de60: 69 6e 74 20 72 65 73 3b 20 20 20 20 20 20 20 20  int res;        
de70: 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66      /* Result of
de80: 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20   the comparison 
de90: 6f 66 20 70 49 6e 31 20 61 67 61 69 6e 73 74 20  of pIn1 against 
dea0: 70 49 6e 33 20 2a 2f 0a 20 20 63 68 61 72 20 61  pIn3 */.  char a
deb0: 66 66 69 6e 69 74 79 3b 20 20 20 20 20 20 2f 2a  ffinity;      /*
dec0: 20 41 66 66 69 6e 69 74 79 20 74 6f 20 75 73 65   Affinity to use
ded0: 20 66 6f 72 20 63 6f 6d 70 61 72 69 73 6f 6e 20   for comparison 
dee0: 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67 73 31 3b  */.  u16 flags1;
def0: 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 70 79           /* Copy
df00: 20 6f 66 20 69 6e 69 74 69 61 6c 20 76 61 6c 75   of initial valu
df10: 65 20 6f 66 20 70 49 6e 31 2d 3e 66 6c 61 67 73  e of pIn1->flags
df20: 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67 73 33   */.  u16 flags3
df30: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 70  ;         /* Cop
df40: 79 20 6f 66 20 69 6e 69 74 69 61 6c 20 76 61 6c  y of initial val
df50: 75 65 20 6f 66 20 70 49 6e 33 2d 3e 66 6c 61 67  ue of pIn3->flag
df60: 73 20 2a 2f 0a 0a 20 20 70 49 6e 31 20 3d 20 26  s */..  pIn1 = &
df70: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
df80: 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn3 = &aMem[pO
df90: 70 2d 3e 70 33 5d 3b 0a 20 20 66 6c 61 67 73 31  p->p3];.  flags1
dfa0: 20 3d 20 70 49 6e 31 2d 3e 66 6c 61 67 73 3b 0a   = pIn1->flags;.
dfb0: 20 20 66 6c 61 67 73 33 20 3d 20 70 49 6e 33 2d    flags3 = pIn3-
dfc0: 3e 66 6c 61 67 73 3b 0a 20 20 69 66 28 20 28 66  >flags;.  if( (f
dfd0: 6c 61 67 73 31 20 7c 20 66 6c 61 67 73 33 29 26  lags1 | flags3)&
dfe0: 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20  MEM_Null ){.    
dff0: 2f 2a 20 4f 6e 65 20 6f 72 20 62 6f 74 68 20 6f  /* One or both o
e000: 70 65 72 61 6e 64 73 20 61 72 65 20 4e 55 4c 4c  perands are NULL
e010: 20 2a 2f 0a 20 20 20 20 69 66 28 20 70 4f 70 2d   */.    if( pOp-
e020: 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 4e 55 4c  >p5 & SQLITE_NUL
e030: 4c 45 51 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20  LEQ ){.      /* 
e040: 49 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51  If SQLITE_NULLEQ
e050: 20 69 73 20 73 65 74 20 28 77 68 69 63 68 20 77   is set (which w
e060: 69 6c 6c 20 6f 6e 6c 79 20 68 61 70 70 65 6e 20  ill only happen 
e070: 69 66 20 74 68 65 20 6f 70 65 72 61 74 6f 72 20  if the operator 
e080: 69 73 0a 20 20 20 20 20 20 2a 2a 20 4f 50 5f 45  is.      ** OP_E
e090: 71 20 6f 72 20 4f 50 5f 4e 65 29 20 74 68 65 6e  q or OP_Ne) then
e0a0: 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 20 6f   take the jump o
e0b0: 72 20 6e 6f 74 20 64 65 70 65 6e 64 69 6e 67 20  r not depending 
e0c0: 6f 6e 20 77 68 65 74 68 65 72 0a 20 20 20 20 20  on whether.     
e0d0: 20 2a 2a 20 6f 72 20 6e 6f 74 20 62 6f 74 68 20   ** or not both 
e0e0: 6f 70 65 72 61 6e 64 73 20 61 72 65 20 6e 75 6c  operands are nul
e0f0: 6c 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  l..      */.    
e100: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f    assert( pOp->o
e110: 70 63 6f 64 65 3d 3d 4f 50 5f 45 71 20 7c 7c 20  pcode==OP_Eq || 
e120: 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
e130: 4e 65 20 29 3b 0a 20 20 20 20 20 20 72 65 73 20  Ne );.      res 
e140: 3d 20 28 66 6c 61 67 73 31 20 26 20 66 6c 61 67  = (flags1 & flag
e150: 73 33 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d  s3 & MEM_Null)==
e160: 30 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  0;.    }else{.  
e170: 20 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f 4e 55      /* SQLITE_NU
e180: 4c 4c 45 51 20 69 73 20 63 6c 65 61 72 20 61 6e  LLEQ is clear an
e190: 64 20 61 74 20 6c 65 61 73 74 20 6f 6e 65 20 6f  d at least one o
e1a0: 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2c 0a  perand is NULL,.
e1b0: 20 20 20 20 20 20 2a 2a 20 74 68 65 6e 20 74 68        ** then th
e1c0: 65 20 72 65 73 75 6c 74 20 69 73 20 61 6c 77 61  e result is alwa
e1d0: 79 73 20 4e 55 4c 4c 2e 0a 20 20 20 20 20 20 2a  ys NULL..      *
e1e0: 2a 20 54 68 65 20 6a 75 6d 70 20 69 73 20 74 61  * The jump is ta
e1f0: 6b 65 6e 20 69 66 20 74 68 65 20 53 51 4c 49 54  ken if the SQLIT
e200: 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 62 69 74  E_JUMPIFNULL bit
e210: 20 69 73 20 73 65 74 2e 0a 20 20 20 20 20 20 2a   is set..      *
e220: 2f 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d  /.      if( pOp-
e230: 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 53 54 4f  >p5 & SQLITE_STO
e240: 52 45 50 32 20 29 7b 0a 20 20 20 20 20 20 20 20  REP2 ){.        
e250: 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
e260: 2d 3e 70 32 5d 3b 0a 20 20 20 20 20 20 20 20 4d  ->p2];.        M
e270: 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f  emSetTypeFlag(pO
e280: 75 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20  ut, MEM_Null);. 
e290: 20 20 20 20 20 20 20 52 45 47 49 53 54 45 52 5f         REGISTER_
e2a0: 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70  TRACE(pOp->p2, p
e2b0: 4f 75 74 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73  Out);.      }els
e2c0: 65 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20  e if( pOp->p5 & 
e2d0: 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c  SQLITE_JUMPIFNUL
e2e0: 4c 20 29 7b 0a 20 20 20 20 20 20 20 20 70 63 20  L ){.        pc 
e2f0: 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 20  = pOp->p2-1;.   
e300: 20 20 20 7d 0a 20 20 20 20 20 20 62 72 65 61 6b     }.      break
e310: 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b  ;.    }.  }else{
e320: 0a 20 20 20 20 2f 2a 20 4e 65 69 74 68 65 72 20  .    /* Neither 
e330: 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2e  operand is NULL.
e340: 20 20 44 6f 20 61 20 63 6f 6d 70 61 72 69 73 6f    Do a compariso
e350: 6e 2e 20 2a 2f 0a 20 20 20 20 61 66 66 69 6e 69  n. */.    affini
e360: 74 79 20 3d 20 70 4f 70 2d 3e 70 35 20 26 20 53  ty = pOp->p5 & S
e370: 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 3b 0a  QLITE_AFF_MASK;.
e380: 20 20 20 20 69 66 28 20 61 66 66 69 6e 69 74 79      if( affinity
e390: 20 29 7b 0a 20 20 20 20 20 20 61 70 70 6c 79 41   ){.      applyA
e3a0: 66 66 69 6e 69 74 79 28 70 49 6e 31 2c 20 61 66  ffinity(pIn1, af
e3b0: 66 69 6e 69 74 79 2c 20 65 6e 63 6f 64 69 6e 67  finity, encoding
e3c0: 29 3b 0a 20 20 20 20 20 20 61 70 70 6c 79 41 66  );.      applyAf
e3d0: 66 69 6e 69 74 79 28 70 49 6e 33 2c 20 61 66 66  finity(pIn3, aff
e3e0: 69 6e 69 74 79 2c 20 65 6e 63 6f 64 69 6e 67 29  inity, encoding)
e3f0: 3b 0a 20 20 20 20 20 20 69 66 28 20 64 62 2d 3e  ;.      if( db->
e400: 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 20 67  mallocFailed ) g
e410: 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20  oto no_mem;.    
e420: 7d 0a 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  }..    assert( p
e430: 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 43  Op->p4type==P4_C
e440: 4f 4c 4c 53 45 51 20 7c 7c 20 70 4f 70 2d 3e 70  OLLSEQ || pOp->p
e450: 34 2e 70 43 6f 6c 6c 3d 3d 30 20 29 3b 0a 20 20  4.pColl==0 );.  
e460: 20 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e    ExpandBlob(pIn
e470: 31 29 3b 0a 20 20 20 20 45 78 70 61 6e 64 42 6c  1);.    ExpandBl
e480: 6f 62 28 70 49 6e 33 29 3b 0a 20 20 20 20 72 65  ob(pIn3);.    re
e490: 73 20 3d 20 73 71 6c 69 74 65 33 4d 65 6d 43 6f  s = sqlite3MemCo
e4a0: 6d 70 61 72 65 28 70 49 6e 33 2c 20 70 49 6e 31  mpare(pIn3, pIn1
e4b0: 2c 20 70 4f 70 2d 3e 70 34 2e 70 43 6f 6c 6c 29  , pOp->p4.pColl)
e4c0: 3b 0a 20 20 7d 0a 20 20 73 77 69 74 63 68 28 20  ;.  }.  switch( 
e4d0: 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 20  pOp->opcode ){. 
e4e0: 20 20 20 63 61 73 65 20 4f 50 5f 45 71 3a 20 20     case OP_Eq:  
e4f0: 20 20 72 65 73 20 3d 20 72 65 73 3d 3d 30 3b 20    res = res==0; 
e500: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63      break;.    c
e510: 61 73 65 20 4f 50 5f 4e 65 3a 20 20 20 20 72 65  ase OP_Ne:    re
e520: 73 20 3d 20 72 65 73 21 3d 30 3b 20 20 20 20 20  s = res!=0;     
e530: 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
e540: 4f 50 5f 4c 74 3a 20 20 20 20 72 65 73 20 3d 20  OP_Lt:    res = 
e550: 72 65 73 3c 30 3b 20 20 20 20 20 20 62 72 65 61  res<0;      brea
e560: 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 4c  k;.    case OP_L
e570: 65 3a 20 20 20 20 72 65 73 20 3d 20 72 65 73 3c  e:    res = res<
e580: 3d 30 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  =0;     break;. 
e590: 20 20 20 63 61 73 65 20 4f 50 5f 47 74 3a 20 20     case OP_Gt:  
e5a0: 20 20 72 65 73 20 3d 20 72 65 73 3e 30 3b 20 20    res = res>0;  
e5b0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 64      break;.    d
e5c0: 65 66 61 75 6c 74 3a 20 20 20 20 20 20 20 72 65  efault:       re
e5d0: 73 20 3d 20 72 65 73 3e 3d 30 3b 20 20 20 20 20  s = res>=0;     
e5e0: 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 69 66  break;.  }..  if
e5f0: 28 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49  ( pOp->p5 & SQLI
e600: 54 45 5f 53 54 4f 52 45 50 32 20 29 7b 0a 20 20  TE_STOREP2 ){.  
e610: 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
e620: 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 6d 65 6d  Op->p2];.    mem
e630: 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
e640: 20 70 4f 75 74 29 3b 0a 20 20 20 20 4d 65 6d 53   pOut);.    MemS
e650: 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c  etTypeFlag(pOut,
e660: 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 20 20 70   MEM_Int);.    p
e670: 4f 75 74 2d 3e 75 2e 69 20 3d 20 72 65 73 3b 0a  Out->u.i = res;.
e680: 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41      REGISTER_TRA
e690: 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74  CE(pOp->p2, pOut
e6a0: 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 72  );.  }else if( r
e6b0: 65 73 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70  es ){.    pc = p
e6c0: 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d 0a 0a 20  Op->p2-1;.  }.. 
e6d0: 20 2f 2a 20 55 6e 64 6f 20 61 6e 79 20 63 68 61   /* Undo any cha
e6e0: 6e 67 65 73 20 6d 61 64 65 20 62 79 20 61 70 70  nges made by app
e6f0: 6c 79 41 66 66 69 6e 69 74 79 28 29 20 74 6f 20  lyAffinity() to 
e700: 74 68 65 20 69 6e 70 75 74 20 72 65 67 69 73 74  the input regist
e710: 65 72 73 2e 20 2a 2f 0a 20 20 70 49 6e 31 2d 3e  ers. */.  pIn1->
e720: 66 6c 61 67 73 20 3d 20 28 70 49 6e 31 2d 3e 66  flags = (pIn1->f
e730: 6c 61 67 73 26 7e 4d 45 4d 5f 54 79 70 65 4d 61  lags&~MEM_TypeMa
e740: 73 6b 29 20 7c 20 28 66 6c 61 67 73 31 26 4d 45  sk) | (flags1&ME
e750: 4d 5f 54 79 70 65 4d 61 73 6b 29 3b 0a 20 20 70  M_TypeMask);.  p
e760: 49 6e 33 2d 3e 66 6c 61 67 73 20 3d 20 28 70 49  In3->flags = (pI
e770: 6e 33 2d 3e 66 6c 61 67 73 26 7e 4d 45 4d 5f 54  n3->flags&~MEM_T
e780: 79 70 65 4d 61 73 6b 29 20 7c 20 28 66 6c 61 67  ypeMask) | (flag
e790: 73 33 26 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 29  s3&MEM_TypeMask)
e7a0: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
e7b0: 20 4f 70 63 6f 64 65 3a 20 50 65 72 6d 75 74 61   Opcode: Permuta
e7c0: 74 69 6f 6e 20 2a 20 2a 20 2a 20 50 34 20 2a 0a  tion * * * P4 *.
e7d0: 2a 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20 70 65  **.** Set the pe
e7e0: 72 6d 75 74 61 74 69 6f 6e 20 75 73 65 64 20 62  rmutation used b
e7f0: 79 20 74 68 65 20 4f 50 5f 43 6f 6d 70 61 72 65  y the OP_Compare
e800: 20 6f 70 65 72 61 74 6f 72 20 74 6f 20 62 65 20   operator to be 
e810: 74 68 65 20 61 72 72 61 79 0a 2a 2a 20 6f 66 20  the array.** of 
e820: 69 6e 74 65 67 65 72 73 20 69 6e 20 50 34 2e 0a  integers in P4..
e830: 2a 2a 0a 2a 2a 20 54 68 65 20 70 65 72 6d 75 74  **.** The permut
e840: 61 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 76 61  ation is only va
e850: 6c 69 64 20 75 6e 74 69 6c 20 74 68 65 20 6e 65  lid until the ne
e860: 78 74 20 4f 50 5f 50 65 72 6d 75 74 61 74 69 6f  xt OP_Permutatio
e870: 6e 2c 20 4f 50 5f 43 6f 6d 70 61 72 65 2c 0a 2a  n, OP_Compare,.*
e880: 2a 20 4f 50 5f 48 61 6c 74 2c 20 6f 72 20 4f 50  * OP_Halt, or OP
e890: 5f 52 65 73 75 6c 74 52 6f 77 2e 20 20 54 79 70  _ResultRow.  Typ
e8a0: 69 63 61 6c 6c 79 20 74 68 65 20 4f 50 5f 50 65  ically the OP_Pe
e8b0: 72 6d 75 74 61 74 69 6f 6e 20 73 68 6f 75 6c 64  rmutation should
e8c0: 20 6f 63 63 75 72 0a 2a 2a 20 69 6d 6d 65 64 69   occur.** immedi
e8d0: 61 74 65 6c 79 20 70 72 69 6f 72 20 74 6f 20 74  ately prior to t
e8e0: 68 65 20 4f 50 5f 43 6f 6d 70 61 72 65 2e 0a 2a  he OP_Compare..*
e8f0: 2f 0a 63 61 73 65 20 4f 50 5f 50 65 72 6d 75 74  /.case OP_Permut
e900: 61 74 69 6f 6e 3a 20 7b 0a 20 20 61 73 73 65 72  ation: {.  asser
e910: 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  t( pOp->p4type==
e920: 50 34 5f 49 4e 54 41 52 52 41 59 20 29 3b 0a 20  P4_INTARRAY );. 
e930: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
e940: 2e 61 69 20 29 3b 0a 20 20 61 50 65 72 6d 75 74  .ai );.  aPermut
e950: 65 20 3d 20 70 4f 70 2d 3e 70 34 2e 61 69 3b 0a  e = pOp->p4.ai;.
e960: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
e970: 70 63 6f 64 65 3a 20 43 6f 6d 70 61 72 65 20 50  pcode: Compare P
e980: 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a  1 P2 P3 P4 *.**.
e990: 2a 2a 20 43 6f 6d 70 61 72 65 20 74 77 6f 20 76  ** Compare two v
e9a0: 65 63 74 6f 72 73 20 6f 66 20 72 65 67 69 73 74  ectors of regist
e9b0: 65 72 73 20 69 6e 20 72 65 67 28 50 31 29 2e 2e  ers in reg(P1)..
e9c0: 72 65 67 28 50 31 2b 50 33 2d 31 29 20 28 63 61  reg(P1+P3-1) (ca
e9d0: 6c 6c 20 74 68 69 73 0a 2a 2a 20 76 65 63 74 6f  ll this.** vecto
e9e0: 72 20 22 41 22 29 20 61 6e 64 20 69 6e 20 72 65  r "A") and in re
e9f0: 67 28 50 32 29 2e 2e 72 65 67 28 50 32 2b 50 33  g(P2)..reg(P2+P3
ea00: 2d 31 29 20 28 22 42 22 29 2e 20 20 53 61 76 65  -1) ("B").  Save
ea10: 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 0a 2a   the result of.*
ea20: 2a 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e  * the comparison
ea30: 20 66 6f 72 20 75 73 65 20 62 79 20 74 68 65 20   for use by the 
ea40: 6e 65 78 74 20 4f 50 5f 4a 75 6d 70 20 69 6e 73  next OP_Jump ins
ea50: 74 72 75 63 74 2e 0a 2a 2a 0a 2a 2a 20 50 34 20  truct..**.** P4 
ea60: 69 73 20 61 20 4b 65 79 49 6e 66 6f 20 73 74 72  is a KeyInfo str
ea70: 75 63 74 75 72 65 20 74 68 61 74 20 64 65 66 69  ucture that defi
ea80: 6e 65 73 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65  nes collating se
ea90: 71 75 65 6e 63 65 73 20 61 6e 64 20 73 6f 72 74  quences and sort
eaa0: 0a 2a 2a 20 6f 72 64 65 72 73 20 66 6f 72 20 74  .** orders for t
eab0: 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20  he comparison.  
eac0: 54 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e 20  The permutation 
ead0: 61 70 70 6c 69 65 73 20 74 6f 20 72 65 67 69 73  applies to regis
eae0: 74 65 72 73 0a 2a 2a 20 6f 6e 6c 79 2e 20 20 54  ters.** only.  T
eaf0: 68 65 20 4b 65 79 49 6e 66 6f 20 65 6c 65 6d 65  he KeyInfo eleme
eb00: 6e 74 73 20 61 72 65 20 75 73 65 64 20 73 65 71  nts are used seq
eb10: 75 65 6e 74 69 61 6c 6c 79 2e 0a 2a 2a 0a 2a 2a  uentially..**.**
eb20: 20 54 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20   The comparison 
eb30: 69 73 20 61 20 73 6f 72 74 20 63 6f 6d 70 61 72  is a sort compar
eb40: 69 73 6f 6e 2c 20 73 6f 20 4e 55 4c 4c 73 20 63  ison, so NULLs c
eb50: 6f 6d 70 61 72 65 20 65 71 75 61 6c 2c 0a 2a 2a  ompare equal,.**
eb60: 20 4e 55 4c 4c 73 20 61 72 65 20 6c 65 73 73 20   NULLs are less 
eb70: 74 68 61 6e 20 6e 75 6d 62 65 72 73 2c 20 6e 75  than numbers, nu
eb80: 6d 62 65 72 73 20 61 72 65 20 6c 65 73 73 20 74  mbers are less t
eb90: 68 61 6e 20 73 74 72 69 6e 67 73 2c 0a 2a 2a 20  han strings,.** 
eba0: 61 6e 64 20 73 74 72 69 6e 67 73 20 61 72 65 20  and strings are 
ebb0: 6c 65 73 73 20 74 68 61 6e 20 62 6c 6f 62 73 2e  less than blobs.
ebc0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6d 70  .*/.case OP_Comp
ebd0: 61 72 65 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a  are: {.  int n;.
ebe0: 20 20 69 6e 74 20 69 3b 0a 20 20 69 6e 74 20 70    int i;.  int p
ebf0: 31 3b 0a 20 20 69 6e 74 20 70 32 3b 0a 20 20 63  1;.  int p2;.  c
ec00: 6f 6e 73 74 20 4b 65 79 49 6e 66 6f 20 2a 70 4b  onst KeyInfo *pK
ec10: 65 79 49 6e 66 6f 3b 0a 20 20 69 6e 74 20 69 64  eyInfo;.  int id
ec20: 78 3b 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 70 43  x;.  CollSeq *pC
ec30: 6f 6c 6c 3b 20 20 20 20 2f 2a 20 43 6f 6c 6c 61  oll;    /* Colla
ec40: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 74 6f  ting sequence to
ec50: 20 75 73 65 20 6f 6e 20 74 68 69 73 20 74 65 72   use on this ter
ec60: 6d 20 2a 2f 0a 20 20 69 6e 74 20 62 52 65 76 3b  m */.  int bRev;
ec70: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
ec80: 65 20 66 6f 72 20 44 45 53 43 45 4e 44 49 4e 47  e for DESCENDING
ec90: 20 73 6f 72 74 20 6f 72 64 65 72 20 2a 2f 0a 0a   sort order */..
eca0: 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20    n = pOp->p3;. 
ecb0: 20 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d   pKeyInfo = pOp-
ecc0: 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20  >p4.pKeyInfo;.  
ecd0: 61 73 73 65 72 74 28 20 6e 3e 30 20 29 3b 0a 20  assert( n>0 );. 
ece0: 20 61 73 73 65 72 74 28 20 70 4b 65 79 49 6e 66   assert( pKeyInf
ecf0: 6f 21 3d 30 20 29 3b 0a 20 20 70 31 20 3d 20 70  o!=0 );.  p1 = p
ed00: 4f 70 2d 3e 70 31 3b 0a 20 20 70 32 20 3d 20 70  Op->p1;.  p2 = p
ed10: 4f 70 2d 3e 70 32 3b 0a 23 69 66 20 53 51 4c 49  Op->p2;.#if SQLI
ed20: 54 45 5f 44 45 42 55 47 0a 20 20 69 66 28 20 61  TE_DEBUG.  if( a
ed30: 50 65 72 6d 75 74 65 20 29 7b 0a 20 20 20 20 69  Permute ){.    i
ed40: 6e 74 20 6b 2c 20 6d 78 20 3d 20 30 3b 0a 20 20  nt k, mx = 0;.  
ed50: 20 20 66 6f 72 28 6b 3d 30 3b 20 6b 3c 6e 3b 20    for(k=0; k<n; 
ed60: 6b 2b 2b 29 20 69 66 28 20 61 50 65 72 6d 75 74  k++) if( aPermut
ed70: 65 5b 6b 5d 3e 6d 78 20 29 20 6d 78 20 3d 20 61  e[k]>mx ) mx = a
ed80: 50 65 72 6d 75 74 65 5b 6b 5d 3b 0a 20 20 20 20  Permute[k];.    
ed90: 61 73 73 65 72 74 28 20 70 31 3e 30 20 26 26 20  assert( p1>0 && 
eda0: 70 31 2b 6d 78 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31  p1+mx<=p->nMem+1
edb0: 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
edc0: 70 32 3e 30 20 26 26 20 70 32 2b 6d 78 3c 3d 70  p2>0 && p2+mx<=p
edd0: 2d 3e 6e 4d 65 6d 2b 31 20 29 3b 0a 20 20 7d 65  ->nMem+1 );.  }e
ede0: 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28  lse{.    assert(
edf0: 20 70 31 3e 30 20 26 26 20 70 31 2b 6e 3c 3d 70   p1>0 && p1+n<=p
ee00: 2d 3e 6e 4d 65 6d 2b 31 20 29 3b 0a 20 20 20 20  ->nMem+1 );.    
ee10: 61 73 73 65 72 74 28 20 70 32 3e 30 20 26 26 20  assert( p2>0 && 
ee20: 70 32 2b 6e 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31 20  p2+n<=p->nMem+1 
ee30: 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a  );.  }.#endif /*
ee40: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f   SQLITE_DEBUG */
ee50: 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b  .  for(i=0; i<n;
ee60: 20 69 2b 2b 29 7b 0a 20 20 20 20 69 64 78 20 3d   i++){.    idx =
ee70: 20 61 50 65 72 6d 75 74 65 20 3f 20 61 50 65 72   aPermute ? aPer
ee80: 6d 75 74 65 5b 69 5d 20 3a 20 69 3b 0a 20 20 20  mute[i] : i;.   
ee90: 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
eea0: 6c 69 64 28 26 61 4d 65 6d 5b 70 31 2b 69 64 78  lid(&aMem[p1+idx
eeb0: 5d 29 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  ]) );.    assert
eec0: 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d  ( memIsValid(&aM
eed0: 65 6d 5b 70 32 2b 69 64 78 5d 29 20 29 3b 0a 20  em[p2+idx]) );. 
eee0: 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43     REGISTER_TRAC
eef0: 45 28 70 31 2b 69 64 78 2c 20 26 61 4d 65 6d 5b  E(p1+idx, &aMem[
ef00: 70 31 2b 69 64 78 5d 29 3b 0a 20 20 20 20 52 45  p1+idx]);.    RE
ef10: 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 32 2b  GISTER_TRACE(p2+
ef20: 69 64 78 2c 20 26 61 4d 65 6d 5b 70 32 2b 69 64  idx, &aMem[p2+id
ef30: 78 5d 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  x]);.    assert(
ef40: 20 69 3c 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69   i<pKeyInfo->nFi
ef50: 65 6c 64 20 29 3b 0a 20 20 20 20 70 43 6f 6c 6c  eld );.    pColl
ef60: 20 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e 61 43 6f   = pKeyInfo->aCo
ef70: 6c 6c 5b 69 5d 3b 0a 20 20 20 20 62 52 65 76 20  ll[i];.    bRev 
ef80: 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e 61 53 6f 72  = pKeyInfo->aSor
ef90: 74 4f 72 64 65 72 5b 69 5d 3b 0a 20 20 20 20 69  tOrder[i];.    i
efa0: 43 6f 6d 70 61 72 65 20 3d 20 73 71 6c 69 74 65  Compare = sqlite
efb0: 33 4d 65 6d 43 6f 6d 70 61 72 65 28 26 61 4d 65  3MemCompare(&aMe
efc0: 6d 5b 70 31 2b 69 64 78 5d 2c 20 26 61 4d 65 6d  m[p1+idx], &aMem
efd0: 5b 70 32 2b 69 64 78 5d 2c 20 70 43 6f 6c 6c 29  [p2+idx], pColl)
efe0: 3b 0a 20 20 20 20 69 66 28 20 69 43 6f 6d 70 61  ;.    if( iCompa
eff0: 72 65 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20  re ){.      if( 
f000: 62 52 65 76 20 29 20 69 43 6f 6d 70 61 72 65 20  bRev ) iCompare 
f010: 3d 20 2d 69 43 6f 6d 70 61 72 65 3b 0a 20 20 20  = -iCompare;.   
f020: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a     break;.    }.
f030: 20 20 7d 0a 20 20 61 50 65 72 6d 75 74 65 20 3d    }.  aPermute =
f040: 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a   0;.  break;.}..
f050: 2f 2a 20 4f 70 63 6f 64 65 3a 20 4a 75 6d 70 20  /* Opcode: Jump 
f060: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
f070: 2a 2a 20 4a 75 6d 70 20 74 6f 20 74 68 65 20 69  ** Jump to the i
f080: 6e 73 74 72 75 63 74 69 6f 6e 20 61 74 20 61 64  nstruction at ad
f090: 64 72 65 73 73 20 50 31 2c 20 50 32 2c 20 6f 72  dress P1, P2, or
f0a0: 20 50 33 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e   P3 depending on
f0b0: 20 77 68 65 74 68 65 72 0a 2a 2a 20 69 6e 20 74   whether.** in t
f0c0: 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 4f  he most recent O
f0d0: 50 5f 43 6f 6d 70 61 72 65 20 69 6e 73 74 72 75  P_Compare instru
f0e0: 63 74 69 6f 6e 20 74 68 65 20 50 31 20 76 65 63  ction the P1 vec
f0f0: 74 6f 72 20 77 61 73 20 6c 65 73 73 20 74 68 61  tor was less tha
f100: 6e 0a 2a 2a 20 65 71 75 61 6c 20 74 6f 2c 20 6f  n.** equal to, o
f110: 72 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 74  r greater than t
f120: 68 65 20 50 32 20 76 65 63 74 6f 72 2c 20 72 65  he P2 vector, re
f130: 73 70 65 63 74 69 76 65 6c 79 2e 0a 2a 2f 0a 63  spectively..*/.c
f140: 61 73 65 20 4f 50 5f 4a 75 6d 70 3a 20 7b 20 20  ase OP_Jump: {  
f150: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75             /* ju
f160: 6d 70 20 2a 2f 0a 20 20 69 66 28 20 69 43 6f 6d  mp */.  if( iCom
f170: 70 61 72 65 3c 30 20 29 7b 0a 20 20 20 20 70 63  pare<0 ){.    pc
f180: 20 3d 20 70 4f 70 2d 3e 70 31 20 2d 20 31 3b 0a   = pOp->p1 - 1;.
f190: 20 20 7d 65 6c 73 65 20 69 66 28 20 69 43 6f 6d    }else if( iCom
f1a0: 70 61 72 65 3d 3d 30 20 29 7b 0a 20 20 20 20 70  pare==0 ){.    p
f1b0: 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
f1c0: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 63  .  }else{.    pc
f1d0: 20 3d 20 70 4f 70 2d 3e 70 33 20 2d 20 31 3b 0a   = pOp->p3 - 1;.
f1e0: 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
f1f0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 6e 64 20 50  /* Opcode: And P
f200: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
f210: 2a 20 54 61 6b 65 20 74 68 65 20 6c 6f 67 69 63  * Take the logic
f220: 61 6c 20 41 4e 44 20 6f 66 20 74 68 65 20 76 61  al AND of the va
f230: 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74 65 72  lues in register
f240: 73 20 50 31 20 61 6e 64 20 50 32 20 61 6e 64 0a  s P1 and P2 and.
f250: 2a 2a 20 77 72 69 74 65 20 74 68 65 20 72 65 73  ** write the res
f260: 75 6c 74 20 69 6e 74 6f 20 72 65 67 69 73 74 65  ult into registe
f270: 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 65  r P3..**.** If e
f280: 69 74 68 65 72 20 50 31 20 6f 72 20 50 32 20 69  ither P1 or P2 i
f290: 73 20 30 20 28 66 61 6c 73 65 29 20 74 68 65 6e  s 0 (false) then
f2a0: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 30   the result is 0
f2b0: 20 65 76 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20   even if.** the 
f2c0: 6f 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e  other input is N
f2d0: 55 4c 4c 2e 20 20 41 20 4e 55 4c 4c 20 61 6e 64  ULL.  A NULL and
f2e0: 20 74 72 75 65 20 6f 72 20 74 77 6f 20 4e 55 4c   true or two NUL
f2f0: 4c 73 20 67 69 76 65 0a 2a 2a 20 61 20 4e 55 4c  Ls give.** a NUL
f300: 4c 20 6f 75 74 70 75 74 2e 0a 2a 2f 0a 2f 2a 20  L output..*/./* 
f310: 4f 70 63 6f 64 65 3a 20 4f 72 20 50 31 20 50 32  Opcode: Or P1 P2
f320: 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 61   P3 * *.**.** Ta
f330: 6b 65 20 74 68 65 20 6c 6f 67 69 63 61 6c 20 4f  ke the logical O
f340: 52 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20  R of the values 
f350: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 61  in register P1 a
f360: 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20 73 74 6f  nd P2 and.** sto
f370: 72 65 20 74 68 65 20 61 6e 73 77 65 72 20 69 6e  re the answer in
f380: 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a   register P3..**
f390: 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 50 31  .** If either P1
f3a0: 20 6f 72 20 50 32 20 69 73 20 6e 6f 6e 7a 65 72   or P2 is nonzer
f3b0: 6f 20 28 74 72 75 65 29 20 74 68 65 6e 20 74 68  o (true) then th
f3c0: 65 20 72 65 73 75 6c 74 20 69 73 20 31 20 28 74  e result is 1 (t
f3d0: 72 75 65 29 0a 2a 2a 20 65 76 65 6e 20 69 66 20  rue).** even if 
f3e0: 74 68 65 20 6f 74 68 65 72 20 69 6e 70 75 74 20  the other input 
f3f0: 69 73 20 4e 55 4c 4c 2e 20 20 41 20 4e 55 4c 4c  is NULL.  A NULL
f400: 20 61 6e 64 20 66 61 6c 73 65 20 6f 72 20 74 77   and false or tw
f410: 6f 20 4e 55 4c 4c 73 0a 2a 2a 20 67 69 76 65 20  o NULLs.** give 
f420: 61 20 4e 55 4c 4c 20 6f 75 74 70 75 74 2e 0a 2a  a NULL output..*
f430: 2f 0a 63 61 73 65 20 4f 50 5f 41 6e 64 3a 20 20  /.case OP_And:  
f440: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
f450: 61 6d 65 20 61 73 20 54 4b 5f 41 4e 44 2c 20 69  ame as TK_AND, i
f460: 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f  n1, in2, out3 */
f470: 0a 63 61 73 65 20 4f 50 5f 4f 72 3a 20 7b 20 20  .case OP_Or: {  
f480: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
f490: 6d 65 20 61 73 20 54 4b 5f 4f 52 2c 20 69 6e 31  me as TK_OR, in1
f4a0: 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20  , in2, out3 */. 
f4b0: 20 69 6e 74 20 76 31 3b 20 20 20 20 2f 2a 20 4c   int v1;    /* L
f4c0: 65 66 74 20 6f 70 65 72 61 6e 64 3a 20 20 30 3d  eft operand:  0=
f4d0: 3d 46 41 4c 53 45 2c 20 31 3d 3d 54 52 55 45 2c  =FALSE, 1==TRUE,
f4e0: 20 32 3d 3d 55 4e 4b 4e 4f 57 4e 20 6f 72 20 4e   2==UNKNOWN or N
f4f0: 55 4c 4c 20 2a 2f 0a 20 20 69 6e 74 20 76 32 3b  ULL */.  int v2;
f500: 20 20 20 20 2f 2a 20 52 69 67 68 74 20 6f 70 65      /* Right ope
f510: 72 61 6e 64 3a 20 30 3d 3d 46 41 4c 53 45 2c 20  rand: 0==FALSE, 
f520: 31 3d 3d 54 52 55 45 2c 20 32 3d 3d 55 4e 4b 4e  1==TRUE, 2==UNKN
f530: 4f 57 4e 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 0a  OWN or NULL */..
f540: 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
f550: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70  Op->p1];.  if( p
f560: 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
f570: 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 76 31 20  _Null ){.    v1 
f580: 3d 20 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  = 2;.  }else{.  
f590: 20 20 76 31 20 3d 20 73 71 6c 69 74 65 33 56 64    v1 = sqlite3Vd
f5a0: 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29  beIntValue(pIn1)
f5b0: 21 3d 30 3b 0a 20 20 7d 0a 20 20 70 49 6e 32 20  !=0;.  }.  pIn2 
f5c0: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
f5d0: 3b 0a 20 20 69 66 28 20 70 49 6e 32 2d 3e 66 6c  ;.  if( pIn2->fl
f5e0: 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29  ags & MEM_Null )
f5f0: 7b 0a 20 20 20 20 76 32 20 3d 20 32 3b 0a 20 20  {.    v2 = 2;.  
f600: 7d 65 6c 73 65 7b 0a 20 20 20 20 76 32 20 3d 20  }else{.    v2 = 
f610: 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61  sqlite3VdbeIntVa
f620: 6c 75 65 28 70 49 6e 32 29 21 3d 30 3b 0a 20 20  lue(pIn2)!=0;.  
f630: 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63  }.  if( pOp->opc
f640: 6f 64 65 3d 3d 4f 50 5f 41 6e 64 20 29 7b 0a 20  ode==OP_And ){. 
f650: 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20     static const 
f660: 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 61 6e  unsigned char an
f670: 64 5f 6c 6f 67 69 63 5b 5d 20 3d 20 7b 20 30 2c  d_logic[] = { 0,
f680: 20 30 2c 20 30 2c 20 30 2c 20 31 2c 20 32 2c 20   0, 0, 0, 1, 2, 
f690: 30 2c 20 32 2c 20 32 20 7d 3b 0a 20 20 20 20 76  0, 2, 2 };.    v
f6a0: 31 20 3d 20 61 6e 64 5f 6c 6f 67 69 63 5b 76 31  1 = and_logic[v1
f6b0: 2a 33 2b 76 32 5d 3b 0a 20 20 7d 65 6c 73 65 7b  *3+v2];.  }else{
f6c0: 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73  .    static cons
f6d0: 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  t unsigned char 
f6e0: 6f 72 5f 6c 6f 67 69 63 5b 5d 20 3d 20 7b 20 30  or_logic[] = { 0
f6f0: 2c 20 31 2c 20 32 2c 20 31 2c 20 31 2c 20 31 2c  , 1, 2, 1, 1, 1,
f700: 20 32 2c 20 31 2c 20 32 20 7d 3b 0a 20 20 20 20   2, 1, 2 };.    
f710: 76 31 20 3d 20 6f 72 5f 6c 6f 67 69 63 5b 76 31  v1 = or_logic[v1
f720: 2a 33 2b 76 32 5d 3b 0a 20 20 7d 0a 20 20 70 4f  *3+v2];.  }.  pO
f730: 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
f740: 70 33 5d 3b 0a 20 20 69 66 28 20 76 31 3d 3d 32  p3];.  if( v1==2
f750: 20 29 7b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79   ){.    MemSetTy
f760: 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d  peFlag(pOut, MEM
f770: 5f 4e 75 6c 6c 29 3b 0a 20 20 7d 65 6c 73 65 7b  _Null);.  }else{
f780: 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  .    pOut->u.i =
f790: 20 76 31 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54   v1;.    MemSetT
f7a0: 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45  ypeFlag(pOut, ME
f7b0: 4d 5f 49 6e 74 29 3b 0a 20 20 7d 0a 20 20 62 72  M_Int);.  }.  br
f7c0: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
f7d0: 65 3a 20 4e 6f 74 20 50 31 20 50 32 20 2a 20 2a  e: Not P1 P2 * *
f7e0: 20 2a 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72   *.**.** Interpr
f7f0: 65 74 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  et the value in 
f800: 72 65 67 69 73 74 65 72 20 50 31 20 61 73 20 61  register P1 as a
f810: 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 2e 20   boolean value. 
f820: 20 53 74 6f 72 65 20 74 68 65 0a 2a 2a 20 62 6f   Store the.** bo
f830: 6f 6c 65 61 6e 20 63 6f 6d 70 6c 65 6d 65 6e 74  olean complement
f840: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e   in register P2.
f850: 20 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 69    If the value i
f860: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  n register P1 is
f870: 20 0a 2a 2a 20 4e 55 4c 4c 2c 20 74 68 65 6e 20   .** NULL, then 
f880: 61 20 4e 55 4c 4c 20 69 73 20 73 74 6f 72 65 64  a NULL is stored
f890: 20 69 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20   in P2..*/.case 
f8a0: 4f 50 5f 4e 6f 74 3a 20 7b 20 20 20 20 20 20 20  OP_Not: {       
f8b0: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
f8c0: 20 61 73 20 54 4b 5f 4e 4f 54 2c 20 69 6e 31 2c   as TK_NOT, in1,
f8d0: 20 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e 31 20   out2 */.  pIn1 
f8e0: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
f8f0: 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d  ;.  pOut = &aMem
f900: 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 69 66 28  [pOp->p2];.  if(
f910: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn1->flags & M
f920: 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 73  EM_Null ){.    s
f930: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
f940: 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 7d 65  Null(pOut);.  }e
f950: 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  lse{.    sqlite3
f960: 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28  VdbeMemSetInt64(
f970: 70 4f 75 74 2c 20 21 73 71 6c 69 74 65 33 56 64  pOut, !sqlite3Vd
f980: 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29  beIntValue(pIn1)
f990: 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
f9a0: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 69  }../* Opcode: Bi
f9b0: 74 4e 6f 74 20 50 31 20 50 32 20 2a 20 2a 20 2a  tNot P1 P2 * * *
f9c0: 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74  .**.** Interpret
f9d0: 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
f9e0: 72 65 67 69 73 74 65 72 20 50 31 20 61 73 20 61  register P1 as a
f9f0: 6e 20 69 6e 74 65 67 65 72 2e 20 20 53 74 6f 72  n integer.  Stor
fa00: 65 20 74 68 65 0a 2a 2a 20 6f 6e 65 73 2d 63 6f  e the.** ones-co
fa10: 6d 70 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 20  mplement of the 
fa20: 50 31 20 76 61 6c 75 65 20 69 6e 74 6f 20 72 65  P1 value into re
fa30: 67 69 73 74 65 72 20 50 32 2e 20 20 49 66 20 50  gister P2.  If P
fa40: 31 20 68 6f 6c 64 73 0a 2a 2a 20 61 20 4e 55 4c  1 holds.** a NUL
fa50: 4c 20 74 68 65 6e 20 73 74 6f 72 65 20 61 20 4e  L then store a N
fa60: 55 4c 4c 20 69 6e 20 50 32 2e 0a 2a 2f 0a 63 61  ULL in P2..*/.ca
fa70: 73 65 20 4f 50 5f 42 69 74 4e 6f 74 3a 20 7b 20  se OP_BitNot: { 
fa80: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
fa90: 61 6d 65 20 61 73 20 54 4b 5f 42 49 54 4e 4f 54  ame as TK_BITNOT
faa0: 2c 20 69 6e 31 2c 20 6f 75 74 32 20 2a 2f 0a 20  , in1, out2 */. 
fab0: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
fac0: 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d  p->p1];.  pOut =
fad0: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
fae0: 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61  .  if( pIn1->fla
faf0: 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b  gs & MEM_Null ){
fb00: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
fb10: 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29  MemSetNull(pOut)
fb20: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73  ;.  }else{.    s
fb30: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
fb40: 49 6e 74 36 34 28 70 4f 75 74 2c 20 7e 73 71 6c  Int64(pOut, ~sql
fb50: 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65  ite3VdbeIntValue
fb60: 28 70 49 6e 31 29 29 3b 0a 20 20 7d 0a 20 20 62  (pIn1));.  }.  b
fb70: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
fb80: 64 65 3a 20 4f 6e 63 65 20 50 31 20 50 32 20 2a  de: Once P1 P2 *
fb90: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20   * *.**.** Jump 
fba0: 74 6f 20 50 32 20 69 66 20 74 68 65 20 76 61 6c  to P2 if the val
fbb0: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
fbc0: 31 20 69 73 20 61 20 6e 6f 74 20 6e 75 6c 6c 20  1 is a not null 
fbd0: 6f 72 20 7a 65 72 6f 2e 20 20 49 66 0a 2a 2a 20  or zero.  If.** 
fbe0: 74 68 65 20 76 61 6c 75 65 20 69 73 20 4e 55 4c  the value is NUL
fbf0: 4c 20 6f 72 20 7a 65 72 6f 2c 20 66 61 6c 6c 20  L or zero, fall 
fc00: 74 68 72 6f 75 67 68 20 61 6e 64 20 63 68 61 6e  through and chan
fc10: 67 65 20 74 68 65 20 50 31 20 72 65 67 69 73 74  ge the P1 regist
fc20: 65 72 0a 2a 2a 20 74 6f 20 61 6e 20 69 6e 74 65  er.** to an inte
fc30: 67 65 72 20 31 2e 0a 2a 2a 0a 2a 2a 20 57 68 65  ger 1..**.** Whe
fc40: 6e 20 50 31 20 69 73 20 6e 6f 74 20 75 73 65 64  n P1 is not used
fc50: 20 6f 74 68 65 72 77 69 73 65 20 69 6e 20 61 20   otherwise in a 
fc60: 70 72 6f 67 72 61 6d 2c 20 74 68 69 73 20 6f 70  program, this op
fc70: 63 6f 64 65 20 66 61 6c 6c 73 20 74 68 72 6f 75  code falls throu
fc80: 67 68 0a 2a 2a 20 6f 6e 63 65 20 61 6e 64 20 6a  gh.** once and j
fc90: 75 6d 70 73 20 6f 6e 20 61 6c 6c 20 73 75 62 73  umps on all subs
fca0: 65 71 75 65 6e 74 20 69 6e 76 6f 63 61 74 69 6f  equent invocatio
fcb0: 6e 73 2e 20 20 49 74 20 69 73 20 74 68 65 20 65  ns.  It is the e
fcc0: 71 75 69 76 61 6c 65 6e 74 0a 2a 2a 20 6f 66 20  quivalent.** of 
fcd0: 22 4f 50 5f 49 66 20 50 31 20 50 32 22 2c 20 66  "OP_If P1 P2", f
fce0: 6f 6c 6c 6f 77 65 64 20 62 79 20 22 4f 50 5f 49  ollowed by "OP_I
fcf0: 6e 74 65 67 65 72 20 31 20 50 31 22 2e 0a 2a 2f  nteger 1 P1"..*/
fd00: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 20 50  ./* Opcode: If P
fd10: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
fd20: 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20  * Jump to P2 if 
fd30: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
fd40: 69 73 74 65 72 20 50 31 20 69 73 20 74 72 75 65  ister P1 is true
fd50: 2e 20 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20  .  The value.** 
fd60: 69 73 20 63 6f 6e 73 69 64 65 72 65 64 20 74 72  is considered tr
fd70: 75 65 20 69 66 20 69 74 20 69 73 20 6e 75 6d 65  ue if it is nume
fd80: 72 69 63 20 61 6e 64 20 6e 6f 6e 2d 7a 65 72 6f  ric and non-zero
fd90: 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75 65 0a  .  If the value.
fda0: 2a 2a 20 69 6e 20 50 31 20 69 73 20 4e 55 4c 4c  ** in P1 is NULL
fdb0: 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65 20 6a   then take the j
fdc0: 75 6d 70 20 69 66 20 50 33 20 69 73 20 74 72 75  ump if P3 is tru
fdd0: 65 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  e..*/./* Opcode:
fde0: 20 49 66 4e 6f 74 20 50 31 20 50 32 20 50 33 20   IfNot P1 P2 P3 
fdf0: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74  * *.**.** Jump t
fe00: 6f 20 50 32 20 69 66 20 74 68 65 20 76 61 6c 75  o P2 if the valu
fe10: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
fe20: 20 69 73 20 46 61 6c 73 65 2e 20 20 54 68 65 20   is False.  The 
fe30: 76 61 6c 75 65 0a 2a 2a 20 69 73 20 63 6f 6e 73  value.** is cons
fe40: 69 64 65 72 65 64 20 74 72 75 65 20 69 66 20 69  idered true if i
fe50: 74 20 68 61 73 20 61 20 6e 75 6d 65 72 69 63 20  t has a numeric 
fe60: 76 61 6c 75 65 20 6f 66 20 7a 65 72 6f 2e 20 20  value of zero.  
fe70: 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20  If the value.** 
fe80: 69 6e 20 50 31 20 69 73 20 4e 55 4c 4c 20 74 68  in P1 is NULL th
fe90: 65 6e 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70  en take the jump
fea0: 20 69 66 20 50 33 20 69 73 20 74 72 75 65 2e 0a   if P3 is true..
feb0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 6e 63 65 3a  */.case OP_Once:
fec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
fed0: 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 63  * jump, in1 */.c
fee0: 61 73 65 20 4f 50 5f 49 66 3a 20 20 20 20 20 20  ase OP_If:      
fef0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75             /* ju
ff00: 6d 70 2c 20 69 6e 31 20 2a 2f 0a 63 61 73 65 20  mp, in1 */.case 
ff10: 4f 50 5f 49 66 4e 6f 74 3a 20 7b 20 20 20 20 20  OP_IfNot: {     
ff20: 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
ff30: 69 6e 31 20 2a 2f 0a 20 20 69 6e 74 20 63 3b 0a  in1 */.  int c;.
ff40: 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
ff50: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70  Op->p1];.  if( p
ff60: 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
ff70: 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 63 20 3d  _Null ){.    c =
ff80: 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 7d 65 6c 73   pOp->p3;.  }els
ff90: 65 7b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  e{.#ifdef SQLITE
ffa0: 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50  _OMIT_FLOATING_P
ffb0: 4f 49 4e 54 0a 20 20 20 20 63 20 3d 20 73 71 6c  OINT.    c = sql
ffc0: 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65  ite3VdbeIntValue
ffd0: 28 70 49 6e 31 29 21 3d 30 3b 0a 23 65 6c 73 65  (pIn1)!=0;.#else
ffe0: 0a 20 20 20 20 63 20 3d 20 73 71 6c 69 74 65 33  .    c = sqlite3
fff0: 56 64 62 65 52 65 61 6c 56 61 6c 75 65 28 70 49  VdbeRealValue(pI
10000 6e 31 29 21 3d 30 2e 30 3b 0a 23 65 6e 64 69 66  n1)!=0.0;.#endif
10010 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70  .    if( pOp->op
10020 63 6f 64 65 3d 3d 4f 50 5f 49 66 4e 6f 74 20 29  code==OP_IfNot )
10030 20 63 20 3d 20 21 63 3b 0a 20 20 7d 0a 20 20 69   c = !c;.  }.  i
10040 66 28 20 63 20 29 7b 0a 20 20 20 20 70 63 20 3d  f( c ){.    pc =
10050 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d 65   pOp->p2-1;.  }e
10060 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63  lse if( pOp->opc
10070 6f 64 65 3d 3d 4f 50 5f 4f 6e 63 65 20 29 7b 0a  ode==OP_Once ){.
10080 20 20 20 20 61 73 73 65 72 74 28 20 28 70 49 6e      assert( (pIn
10090 31 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  1->flags & (MEM_
100a0 41 67 67 7c 4d 45 4d 5f 44 79 6e 7c 4d 45 4d 5f  Agg|MEM_Dyn|MEM_
100b0 52 6f 77 53 65 74 7c 4d 45 4d 5f 46 72 61 6d 65  RowSet|MEM_Frame
100c0 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 6d 65 6d  ))==0 );.    mem
100d0 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
100e0 20 70 49 6e 31 29 3b 0a 20 20 20 20 70 49 6e 31   pIn1);.    pIn1
100f0 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e  ->flags = MEM_In
10100 74 3b 0a 20 20 20 20 70 49 6e 31 2d 3e 75 2e 69  t;.    pIn1->u.i
10110 20 3d 20 31 3b 0a 20 20 20 20 52 45 47 49 53 54   = 1;.    REGIST
10120 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31  ER_TRACE(pOp->p1
10130 2c 20 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20 62  , pIn1);.  }.  b
10140 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
10150 64 65 3a 20 49 73 4e 75 6c 6c 20 50 31 20 50 32  de: IsNull P1 P2
10160 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d   * * *.**.** Jum
10170 70 20 74 6f 20 50 32 20 69 66 20 74 68 65 20 76  p to P2 if the v
10180 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
10190 20 50 31 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a   P1 is NULL..*/.
101a0 63 61 73 65 20 4f 50 5f 49 73 4e 75 6c 6c 3a 20  case OP_IsNull: 
101b0 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  {            /* 
101c0 73 61 6d 65 20 61 73 20 54 4b 5f 49 53 4e 55 4c  same as TK_ISNUL
101d0 4c 2c 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a  L, jump, in1 */.
101e0 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
101f0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 28  Op->p1];.  if( (
10200 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
10210 4d 5f 4e 75 6c 6c 29 21 3d 30 20 29 7b 0a 20 20  M_Null)!=0 ){.  
10220 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
10230 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b   1;.  }.  break;
10240 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e  .}../* Opcode: N
10250 6f 74 4e 75 6c 6c 20 50 31 20 50 32 20 2a 20 2a  otNull P1 P2 * *
10260 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f   *.**.** Jump to
10270 20 50 32 20 69 66 20 74 68 65 20 76 61 6c 75 65   P2 if the value
10280 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
10290 69 73 20 6e 6f 74 20 4e 55 4c 4c 2e 20 20 0a 2a  is not NULL.  .*
102a0 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 4e 75 6c  /.case OP_NotNul
102b0 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  l: {            
102c0 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4e 4f  /* same as TK_NO
102d0 54 4e 55 4c 4c 2c 20 6a 75 6d 70 2c 20 69 6e 31  TNULL, jump, in1
102e0 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   */.  pIn1 = &aM
102f0 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69  em[pOp->p1];.  i
10300 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
10310 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29  & MEM_Null)==0 )
10320 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e  {.    pc = pOp->
10330 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72  p2 - 1;.  }.  br
10340 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
10350 65 3a 20 43 6f 6c 75 6d 6e 20 50 31 20 50 32 20  e: Column P1 P2 
10360 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 49  P3 P4 P5.**.** I
10370 6e 74 65 72 70 72 65 74 20 74 68 65 20 64 61 74  nterpret the dat
10380 61 20 74 68 61 74 20 63 75 72 73 6f 72 20 50 31  a that cursor P1
10390 20 70 6f 69 6e 74 73 20 74 6f 20 61 73 20 61 20   points to as a 
103a0 73 74 72 75 63 74 75 72 65 20 62 75 69 6c 74 20  structure built 
103b0 75 73 69 6e 67 0a 2a 2a 20 74 68 65 20 4d 61 6b  using.** the Mak
103c0 65 52 65 63 6f 72 64 20 69 6e 73 74 72 75 63 74  eRecord instruct
103d0 69 6f 6e 2e 20 20 28 53 65 65 20 74 68 65 20 4d  ion.  (See the M
103e0 61 6b 65 52 65 63 6f 72 64 20 6f 70 63 6f 64 65  akeRecord opcode
103f0 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 0a   for additional.
10400 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  ** information a
10410 62 6f 75 74 20 74 68 65 20 66 6f 72 6d 61 74 20  bout the format 
10420 6f 66 20 74 68 65 20 64 61 74 61 2e 29 20 20 45  of the data.)  E
10430 78 74 72 61 63 74 20 74 68 65 20 50 32 2d 74 68  xtract the P2-th
10440 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 66 72 6f 6d 20   column.** from 
10450 74 68 69 73 20 72 65 63 6f 72 64 2e 20 20 49 66  this record.  If
10460 20 74 68 65 72 65 20 61 72 65 20 6c 65 73 73 20   there are less 
10470 74 68 61 74 20 28 50 32 2b 31 29 20 0a 2a 2a 20  that (P2+1) .** 
10480 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20 72 65  values in the re
10490 63 6f 72 64 2c 20 65 78 74 72 61 63 74 20 61 20  cord, extract a 
104a0 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  NULL..**.** The 
104b0 76 61 6c 75 65 20 65 78 74 72 61 63 74 65 64 20  value extracted 
104c0 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67  is stored in reg
104d0 69 73 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20  ister P3..**.** 
104e0 49 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 63 6f  If the column co
104f0 6e 74 61 69 6e 73 20 66 65 77 65 72 20 74 68 61  ntains fewer tha
10500 6e 20 50 32 20 66 69 65 6c 64 73 2c 20 74 68 65  n P2 fields, the
10510 6e 20 65 78 74 72 61 63 74 20 61 20 4e 55 4c 4c  n extract a NULL
10520 2e 20 20 4f 72 2c 0a 2a 2a 20 69 66 20 74 68 65  .  Or,.** if the
10530 20 50 34 20 61 72 67 75 6d 65 6e 74 20 69 73 20   P4 argument is 
10540 61 20 50 34 5f 4d 45 4d 20 75 73 65 20 74 68 65  a P4_MEM use the
10550 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 50 34   value of the P4
10560 20 61 72 67 75 6d 65 6e 74 20 61 73 0a 2a 2a 20   argument as.** 
10570 74 68 65 20 72 65 73 75 6c 74 2e 0a 2a 2a 0a 2a  the result..**.*
10580 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f  * If the OPFLAG_
10590 43 4c 45 41 52 43 41 43 48 45 20 62 69 74 20 69  CLEARCACHE bit i
105a0 73 20 73 65 74 20 6f 6e 20 50 35 20 61 6e 64 20  s set on P5 and 
105b0 50 31 20 69 73 20 61 20 70 73 65 75 64 6f 2d 74  P1 is a pseudo-t
105c0 61 62 6c 65 20 63 75 72 73 6f 72 2c 0a 2a 2a 20  able cursor,.** 
105d0 74 68 65 6e 20 74 68 65 20 63 61 63 68 65 20 6f  then the cache o
105e0 66 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20  f the cursor is 
105f0 72 65 73 65 74 20 70 72 69 6f 72 20 74 6f 20 65  reset prior to e
10600 78 74 72 61 63 74 69 6e 67 20 74 68 65 20 63 6f  xtracting the co
10610 6c 75 6d 6e 2e 0a 2a 2a 20 54 68 65 20 66 69 72  lumn..** The fir
10620 73 74 20 4f 50 5f 43 6f 6c 75 6d 6e 20 61 67 61  st OP_Column aga
10630 69 6e 73 74 20 61 20 70 73 65 75 64 6f 2d 74 61  inst a pseudo-ta
10640 62 6c 65 20 61 66 74 65 72 20 74 68 65 20 76 61  ble after the va
10650 6c 75 65 20 6f 66 20 74 68 65 20 63 6f 6e 74 65  lue of the conte
10660 6e 74 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 68  nt.** register h
10670 61 73 20 63 68 61 6e 67 65 64 20 73 68 6f 75 6c  as changed shoul
10680 64 20 68 61 76 65 20 74 68 69 73 20 62 69 74 20  d have this bit 
10690 73 65 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  set..*/.case OP_
106a0 43 6f 6c 75 6d 6e 3a 20 7b 0a 20 20 75 33 32 20  Column: {.  u32 
106b0 70 61 79 6c 6f 61 64 53 69 7a 65 3b 20 20 20 2f  payloadSize;   /
106c0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  * Number of byte
106d0 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20  s in the record 
106e0 2a 2f 0a 20 20 69 36 34 20 70 61 79 6c 6f 61 64  */.  i64 payload
106f0 53 69 7a 65 36 34 3b 20 2f 2a 20 4e 75 6d 62 65  Size64; /* Numbe
10700 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20 74 68  r of bytes in th
10710 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e  e record */.  in
10720 74 20 70 31 3b 20 20 20 20 20 20 20 20 20 20 20  t p1;           
10730 20 2f 2a 20 50 31 20 76 61 6c 75 65 20 6f 66 20   /* P1 value of 
10740 74 68 65 20 6f 70 63 6f 64 65 20 2a 2f 0a 20 20  the opcode */.  
10750 69 6e 74 20 70 32 3b 20 20 20 20 20 20 20 20 20  int p2;         
10760 20 20 20 2f 2a 20 63 6f 6c 75 6d 6e 20 6e 75 6d     /* column num
10770 62 65 72 20 74 6f 20 72 65 74 72 69 65 76 65 20  ber to retrieve 
10780 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  */.  VdbeCursor 
10790 2a 70 43 3b 20 20 20 20 2f 2a 20 54 68 65 20 56  *pC;    /* The V
107a0 44 42 45 20 63 75 72 73 6f 72 20 2a 2f 0a 20 20  DBE cursor */.  
107b0 63 68 61 72 20 2a 7a 52 65 63 3b 20 20 20 20 20  char *zRec;     
107c0 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f     /* Pointer to
107d0 20 63 6f 6d 70 6c 65 74 65 20 72 65 63 6f 72 64   complete record
107e0 2d 64 61 74 61 20 2a 2f 0a 20 20 42 74 43 75 72  -data */.  BtCur
107f0 73 6f 72 20 2a 70 43 72 73 72 3b 20 20 20 2f 2a  sor *pCrsr;   /*
10800 20 54 68 65 20 42 54 72 65 65 20 63 75 72 73 6f   The BTree curso
10810 72 20 2a 2f 0a 20 20 75 33 32 20 2a 61 54 79 70  r */.  u32 *aTyp
10820 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 61 54 79  e;        /* aTy
10830 70 65 5b 69 5d 20 68 6f 6c 64 73 20 74 68 65 20  pe[i] holds the 
10840 6e 75 6d 65 72 69 63 20 74 79 70 65 20 6f 66 20  numeric type of 
10850 74 68 65 20 69 2d 74 68 20 63 6f 6c 75 6d 6e 20  the i-th column 
10860 2a 2f 0a 20 20 75 33 32 20 2a 61 4f 66 66 73 65  */.  u32 *aOffse
10870 74 3b 20 20 20 20 20 20 2f 2a 20 61 4f 66 66 73  t;      /* aOffs
10880 65 74 5b 69 5d 20 69 73 20 6f 66 66 73 65 74 20  et[i] is offset 
10890 74 6f 20 73 74 61 72 74 20 6f 66 20 64 61 74 61  to start of data
108a0 20 66 6f 72 20 69 2d 74 68 20 63 6f 6c 75 6d 6e   for i-th column
108b0 20 2a 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64   */.  int nField
108c0 3b 20 20 20 20 20 20 20 20 2f 2a 20 6e 75 6d 62  ;        /* numb
108d0 65 72 20 6f 66 20 66 69 65 6c 64 73 20 69 6e 20  er of fields in 
108e0 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20  the record */.  
108f0 69 6e 74 20 6c 65 6e 3b 20 20 20 20 20 20 20 20  int len;        
10900 20 20 20 2f 2a 20 54 68 65 20 6c 65 6e 67 74 68     /* The length
10910 20 6f 66 20 74 68 65 20 73 65 72 69 61 6c 69 7a   of the serializ
10920 65 64 20 64 61 74 61 20 66 6f 72 20 74 68 65 20  ed data for the 
10930 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 69 6e 74 20  column */.  int 
10940 69 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  i;             /
10950 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 20 2a  * Loop counter *
10960 2f 0a 20 20 63 68 61 72 20 2a 7a 44 61 74 61 3b  /.  char *zData;
10970 20 20 20 20 20 20 20 2f 2a 20 50 61 72 74 20 6f         /* Part o
10980 66 20 74 68 65 20 72 65 63 6f 72 64 20 62 65 69  f the record bei
10990 6e 67 20 64 65 63 6f 64 65 64 20 2a 2f 0a 20 20  ng decoded */.  
109a0 4d 65 6d 20 2a 70 44 65 73 74 3b 20 20 20 20 20  Mem *pDest;     
109b0 20 20 20 2f 2a 20 57 68 65 72 65 20 74 6f 20 77     /* Where to w
109c0 72 69 74 65 20 74 68 65 20 65 78 74 72 61 63 74  rite the extract
109d0 65 64 20 76 61 6c 75 65 20 2a 2f 0a 20 20 4d 65  ed value */.  Me
109e0 6d 20 73 4d 65 6d 3b 20 20 20 20 20 20 20 20 20  m sMem;         
109f0 20 2f 2a 20 46 6f 72 20 73 74 6f 72 69 6e 67 20   /* For storing 
10a00 74 68 65 20 72 65 63 6f 72 64 20 62 65 69 6e 67  the record being
10a10 20 64 65 63 6f 64 65 64 20 2a 2f 0a 20 20 75 38   decoded */.  u8
10a20 20 2a 7a 49 64 78 3b 20 20 20 20 20 20 20 20 20   *zIdx;         
10a30 20 2f 2a 20 49 6e 64 65 78 20 69 6e 74 6f 20 68   /* Index into h
10a40 65 61 64 65 72 20 2a 2f 0a 20 20 75 38 20 2a 7a  eader */.  u8 *z
10a50 45 6e 64 48 64 72 3b 20 20 20 20 20 20 20 2f 2a  EndHdr;       /*
10a60 20 50 6f 69 6e 74 65 72 20 74 6f 20 66 69 72 73   Pointer to firs
10a70 74 20 62 79 74 65 20 61 66 74 65 72 20 74 68 65  t byte after the
10a80 20 68 65 61 64 65 72 20 2a 2f 0a 20 20 75 33 32   header */.  u32
10a90 20 6f 66 66 73 65 74 3b 20 20 20 20 20 20 20 20   offset;        
10aa0 2f 2a 20 4f 66 66 73 65 74 20 69 6e 74 6f 20 74  /* Offset into t
10ab0 68 65 20 64 61 74 61 20 2a 2f 0a 20 20 75 33 32  he data */.  u32
10ac0 20 73 7a 46 69 65 6c 64 3b 20 20 20 20 20 20 20   szField;       
10ad0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74  /* Number of byt
10ae0 65 73 20 69 6e 20 74 68 65 20 63 6f 6e 74 65 6e  es in the conten
10af0 74 20 6f 66 20 61 20 66 69 65 6c 64 20 2a 2f 0a  t of a field */.
10b00 20 20 69 6e 74 20 73 7a 48 64 72 3b 20 20 20 20    int szHdr;    
10b10 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20       /* Size of 
10b20 74 68 65 20 68 65 61 64 65 72 20 73 69 7a 65 20  the header size 
10b30 66 69 65 6c 64 20 61 74 20 73 74 61 72 74 20 6f  field at start o
10b40 66 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e  f record */.  in
10b50 74 20 61 76 61 69 6c 3b 20 20 20 20 20 20 20 20  t avail;        
10b60 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79   /* Number of by
10b70 74 65 73 20 6f 66 20 61 76 61 69 6c 61 62 6c 65  tes of available
10b80 20 64 61 74 61 20 2a 2f 0a 20 20 75 33 32 20 74   data */.  u32 t
10b90 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
10ba0 20 41 20 74 79 70 65 20 63 6f 64 65 20 66 72 6f   A type code fro
10bb0 6d 20 74 68 65 20 72 65 63 6f 72 64 20 68 65 61  m the record hea
10bc0 64 65 72 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 52  der */.  Mem *pR
10bd0 65 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 50  eg;         /* P
10be0 73 65 75 64 6f 54 61 62 6c 65 20 69 6e 70 75 74  seudoTable input
10bf0 20 72 65 67 69 73 74 65 72 20 2a 2f 0a 0a 0a 20   register */... 
10c00 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20   p1 = pOp->p1;. 
10c10 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20   p2 = pOp->p2;. 
10c20 20 70 43 20 3d 20 30 3b 0a 20 20 6d 65 6d 73 65   pC = 0;.  memse
10c30 74 28 26 73 4d 65 6d 2c 20 30 2c 20 73 69 7a 65  t(&sMem, 0, size
10c40 6f 66 28 73 4d 65 6d 29 29 3b 0a 20 20 61 73 73  of(sMem));.  ass
10c50 65 72 74 28 20 70 31 3c 70 2d 3e 6e 43 75 72 73  ert( p1<p->nCurs
10c60 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  or );.  assert( 
10c70 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70  pOp->p3>0 && pOp
10c80 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b  ->p3<=p->nMem );
10c90 0a 20 20 70 44 65 73 74 20 3d 20 26 61 4d 65 6d  .  pDest = &aMem
10ca0 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d  [pOp->p3];.  mem
10cb0 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
10cc0 20 70 44 65 73 74 29 3b 0a 20 20 7a 52 65 63 20   pDest);.  zRec 
10cd0 3d 20 30 3b 0a 0a 20 20 2f 2a 20 54 68 69 73 20  = 0;..  /* This 
10ce0 62 6c 6f 63 6b 20 73 65 74 73 20 74 68 65 20 76  block sets the v
10cf0 61 72 69 61 62 6c 65 20 70 61 79 6c 6f 61 64 53  ariable payloadS
10d00 69 7a 65 20 74 6f 20 62 65 20 74 68 65 20 74 6f  ize to be the to
10d10 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 0a 20 20  tal number of.  
10d20 2a 2a 20 62 79 74 65 73 20 69 6e 20 74 68 65 20  ** bytes in the 
10d30 72 65 63 6f 72 64 2e 0a 20 20 2a 2a 0a 20 20 2a  record..  **.  *
10d40 2a 20 7a 52 65 63 20 69 73 20 73 65 74 20 74 6f  * zRec is set to
10d50 20 62 65 20 74 68 65 20 63 6f 6d 70 6c 65 74 65   be the complete
10d60 20 74 65 78 74 20 6f 66 20 74 68 65 20 72 65 63   text of the rec
10d70 6f 72 64 20 69 66 20 69 74 20 69 73 20 61 76 61  ord if it is ava
10d80 69 6c 61 62 6c 65 2e 0a 20 20 2a 2a 20 54 68 65  ilable..  ** The
10d90 20 63 6f 6d 70 6c 65 74 65 20 72 65 63 6f 72 64   complete record
10da0 20 74 65 78 74 20 69 73 20 61 6c 77 61 79 73 20   text is always 
10db0 61 76 61 69 6c 61 62 6c 65 20 66 6f 72 20 70 73  available for ps
10dc0 65 75 64 6f 2d 74 61 62 6c 65 73 0a 20 20 2a 2a  eudo-tables.  **
10dd0 20 49 66 20 74 68 65 20 72 65 63 6f 72 64 20 69   If the record i
10de0 73 20 73 74 6f 72 65 64 20 69 6e 20 61 20 63 75  s stored in a cu
10df0 72 73 6f 72 2c 20 74 68 65 20 63 6f 6d 70 6c 65  rsor, the comple
10e00 74 65 20 72 65 63 6f 72 64 20 74 65 78 74 0a 20  te record text. 
10e10 20 2a 2a 20 6d 69 67 68 74 20 62 65 20 61 76 61   ** might be ava
10e20 69 6c 61 62 6c 65 20 69 6e 20 74 68 65 20 20 70  ilable in the  p
10e30 43 2d 3e 61 52 6f 77 20 63 61 63 68 65 2e 20 20  C->aRow cache.  
10e40 4f 72 20 69 74 20 6d 69 67 68 74 20 6e 6f 74 20  Or it might not 
10e50 62 65 2e 0a 20 20 2a 2a 20 49 66 20 74 68 65 20  be..  ** If the 
10e60 64 61 74 61 20 69 73 20 75 6e 61 76 61 69 6c 61  data is unavaila
10e70 62 6c 65 2c 20 20 7a 52 65 63 20 69 73 20 73 65  ble,  zRec is se
10e80 74 20 74 6f 20 4e 55 4c 4c 2e 0a 20 20 2a 2a 0a  t to NULL..  **.
10e90 20 20 2a 2a 20 57 65 20 61 6c 73 6f 20 63 6f 6d    ** We also com
10ea0 70 75 74 65 20 74 68 65 20 6e 75 6d 62 65 72 20  pute the number 
10eb0 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  of columns in th
10ec0 65 20 72 65 63 6f 72 64 2e 20 20 46 6f 72 20 63  e record.  For c
10ed0 75 72 73 6f 72 73 2c 0a 20 20 2a 2a 20 74 68 65  ursors,.  ** the
10ee0 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   number of colum
10ef0 6e 73 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  ns is stored in 
10f00 74 68 65 20 56 64 62 65 43 75 72 73 6f 72 2e 6e  the VdbeCursor.n
10f10 46 69 65 6c 64 20 65 6c 65 6d 65 6e 74 2e 0a 20  Field element.. 
10f20 20 2a 2f 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   */.  pC = p->ap
10f30 43 73 72 5b 70 31 5d 3b 0a 20 20 61 73 73 65 72  Csr[p1];.  asser
10f40 74 28 20 70 43 21 3d 30 20 29 3b 0a 23 69 66 6e  t( pC!=0 );.#ifn
10f50 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
10f60 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 61  VIRTUALTABLE.  a
10f70 73 73 65 72 74 28 20 70 43 2d 3e 70 56 74 61 62  ssert( pC->pVtab
10f80 43 75 72 73 6f 72 3d 3d 30 20 29 3b 0a 23 65 6e  Cursor==0 );.#en
10f90 64 69 66 0a 20 20 70 43 72 73 72 20 3d 20 70 43  dif.  pCrsr = pC
10fa0 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 69 66 28  ->pCursor;.  if(
10fb0 20 70 43 72 73 72 21 3d 30 20 29 7b 0a 20 20 20   pCrsr!=0 ){.   
10fc0 20 2f 2a 20 54 68 65 20 72 65 63 6f 72 64 20 69   /* The record i
10fd0 73 20 73 74 6f 72 65 64 20 69 6e 20 61 20 42 2d  s stored in a B-
10fe0 54 72 65 65 20 2a 2f 0a 20 20 20 20 72 63 20 3d  Tree */.    rc =
10ff0 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73   sqlite3VdbeCurs
11000 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20  orMoveto(pC);.  
11010 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
11020 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
11030 6f 72 3b 0a 20 20 20 20 69 66 28 20 70 43 2d 3e  or;.    if( pC->
11040 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 20  nullRow ){.     
11050 20 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20 30   payloadSize = 0
11060 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
11070 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 3d  pC->cacheStatus=
11080 3d 70 2d 3e 63 61 63 68 65 43 74 72 20 29 7b 0a  =p->cacheCtr ){.
11090 20 20 20 20 20 20 70 61 79 6c 6f 61 64 53 69 7a        payloadSiz
110a0 65 20 3d 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53  e = pC->payloadS
110b0 69 7a 65 3b 0a 20 20 20 20 20 20 7a 52 65 63 20  ize;.      zRec 
110c0 3d 20 28 63 68 61 72 2a 29 70 43 2d 3e 61 52 6f  = (char*)pC->aRo
110d0 77 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  w;.    }else if(
110e0 20 70 43 2d 3e 69 73 49 6e 64 65 78 20 29 7b 0a   pC->isIndex ){.
110f0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71        assert( sq
11100 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72  lite3BtreeCursor
11110 49 73 56 61 6c 69 64 28 70 43 72 73 72 29 20 29  IsValid(pCrsr) )
11120 3b 0a 20 20 20 20 20 20 56 56 41 5f 4f 4e 4c 59  ;.      VVA_ONLY
11130 28 72 63 20 3d 29 20 73 71 6c 69 74 65 33 42 74  (rc =) sqlite3Bt
11140 72 65 65 4b 65 79 53 69 7a 65 28 70 43 72 73 72  reeKeySize(pCrsr
11150 2c 20 26 70 61 79 6c 6f 61 64 53 69 7a 65 36 34  , &payloadSize64
11160 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
11170 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
11180 3b 20 20 20 2f 2a 20 54 72 75 65 20 62 65 63 61  ;   /* True beca
11190 75 73 65 20 6f 66 20 43 75 72 73 6f 72 4d 6f 76  use of CursorMov
111a0 65 74 6f 28 29 20 63 61 6c 6c 20 61 62 6f 76 65  eto() call above
111b0 20 2a 2f 0a 20 20 20 20 20 20 2f 2a 20 73 71 6c   */.      /* sql
111c0 69 74 65 33 42 74 72 65 65 50 61 72 73 65 43 65  ite3BtreeParseCe
111d0 6c 6c 50 74 72 28 29 20 75 73 65 73 20 67 65 74  llPtr() uses get
111e0 56 61 72 69 6e 74 33 32 28 29 20 74 6f 20 65 78  Varint32() to ex
111f0 74 72 61 63 74 20 74 68 65 0a 20 20 20 20 20 20  tract the.      
11200 2a 2a 20 70 61 79 6c 6f 61 64 20 73 69 7a 65 2c  ** payload size,
11210 20 73 6f 20 69 74 20 69 73 20 69 6d 70 6f 73 73   so it is imposs
11220 69 62 6c 65 20 66 6f 72 20 70 61 79 6c 6f 61 64  ible for payload
11230 53 69 7a 65 36 34 20 74 6f 20 62 65 0a 20 20 20  Size64 to be.   
11240 20 20 20 2a 2a 20 6c 61 72 67 65 72 20 74 68 61     ** larger tha
11250 6e 20 33 32 20 62 69 74 73 2e 20 2a 2f 0a 20 20  n 32 bits. */.  
11260 20 20 20 20 61 73 73 65 72 74 28 20 28 70 61 79      assert( (pay
11270 6c 6f 61 64 53 69 7a 65 36 34 20 26 20 53 51 4c  loadSize64 & SQL
11280 49 54 45 5f 4d 41 58 5f 55 33 32 29 3d 3d 28 75  ITE_MAX_U32)==(u
11290 36 34 29 70 61 79 6c 6f 61 64 53 69 7a 65 36 34  64)payloadSize64
112a0 20 29 3b 0a 20 20 20 20 20 20 70 61 79 6c 6f 61   );.      payloa
112b0 64 53 69 7a 65 20 3d 20 28 75 33 32 29 70 61 79  dSize = (u32)pay
112c0 6c 6f 61 64 53 69 7a 65 36 34 3b 0a 20 20 20 20  loadSize64;.    
112d0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 61 73 73  }else{.      ass
112e0 65 72 74 28 20 73 71 6c 69 74 65 33 42 74 72 65  ert( sqlite3Btre
112f0 65 43 75 72 73 6f 72 49 73 56 61 6c 69 64 28 70  eCursorIsValid(p
11300 43 72 73 72 29 20 29 3b 0a 20 20 20 20 20 20 56  Crsr) );.      V
11310 56 41 5f 4f 4e 4c 59 28 72 63 20 3d 29 20 73 71  VA_ONLY(rc =) sq
11320 6c 69 74 65 33 42 74 72 65 65 44 61 74 61 53 69  lite3BtreeDataSi
11330 7a 65 28 70 43 72 73 72 2c 20 26 70 61 79 6c 6f  ze(pCrsr, &paylo
11340 61 64 53 69 7a 65 29 3b 0a 20 20 20 20 20 20 61  adSize);.      a
11350 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54  ssert( rc==SQLIT
11360 45 5f 4f 4b 20 29 3b 20 20 20 2f 2a 20 44 61 74  E_OK );   /* Dat
11370 61 53 69 7a 65 28 29 20 63 61 6e 6e 6f 74 20 66  aSize() cannot f
11380 61 69 6c 20 2a 2f 0a 20 20 20 20 7d 0a 20 20 7d  ail */.    }.  }
11390 65 6c 73 65 20 69 66 28 20 41 4c 57 41 59 53 28  else if( ALWAYS(
113a0 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52  pC->pseudoTableR
113b0 65 67 3e 30 29 20 29 7b 0a 20 20 20 20 70 52 65  eg>0) ){.    pRe
113c0 67 20 3d 20 26 61 4d 65 6d 5b 70 43 2d 3e 70 73  g = &aMem[pC->ps
113d0 65 75 64 6f 54 61 62 6c 65 52 65 67 5d 3b 0a 20  eudoTableReg];. 
113e0 20 20 20 61 73 73 65 72 74 28 20 70 52 65 67 2d     assert( pReg-
113f0 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f  >flags & MEM_Blo
11400 62 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  b );.    assert(
11410 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 52 65 67   memIsValid(pReg
11420 29 20 29 3b 0a 20 20 20 20 70 61 79 6c 6f 61 64  ) );.    payload
11430 53 69 7a 65 20 3d 20 70 52 65 67 2d 3e 6e 3b 0a  Size = pReg->n;.
11440 20 20 20 20 7a 52 65 63 20 3d 20 70 52 65 67 2d      zRec = pReg-
11450 3e 7a 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68  >z;.    pC->cach
11460 65 53 74 61 74 75 73 20 3d 20 28 70 4f 70 2d 3e  eStatus = (pOp->
11470 70 35 26 4f 50 46 4c 41 47 5f 43 4c 45 41 52 43  p5&OPFLAG_CLEARC
11480 41 43 48 45 29 20 3f 20 43 41 43 48 45 5f 53 54  ACHE) ? CACHE_ST
11490 41 4c 45 20 3a 20 70 2d 3e 63 61 63 68 65 43 74  ALE : p->cacheCt
114a0 72 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  r;.    assert( p
114b0 61 79 6c 6f 61 64 53 69 7a 65 3d 3d 30 20 7c 7c  ayloadSize==0 ||
114c0 20 7a 52 65 63 21 3d 30 20 29 3b 0a 20 20 7d 65   zRec!=0 );.  }e
114d0 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 43 6f 6e 73  lse{.    /* Cons
114e0 69 64 65 72 20 74 68 65 20 72 6f 77 20 74 6f 20  ider the row to 
114f0 62 65 20 4e 55 4c 4c 20 2a 2f 0a 20 20 20 20 70  be NULL */.    p
11500 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20 30 3b 0a  ayloadSize = 0;.
11510 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20 70 61 79    }..  /* If pay
11520 6c 6f 61 64 53 69 7a 65 20 69 73 20 30 2c 20 74  loadSize is 0, t
11530 68 65 6e 20 6a 75 73 74 20 73 74 6f 72 65 20 61  hen just store a
11540 20 4e 55 4c 4c 2e 20 20 54 68 69 73 20 63 61 6e   NULL.  This can
11550 20 68 61 70 70 65 6e 20 62 65 63 61 75 73 65 20   happen because 
11560 6f 66 0a 20 20 2a 2a 20 6e 75 6c 6c 52 6f 77 20  of.  ** nullRow 
11570 6f 72 20 62 65 63 61 75 73 65 20 6f 66 20 61 20  or because of a 
11580 63 6f 72 72 75 70 74 20 64 61 74 61 62 61 73 65  corrupt database
11590 2e 20 2a 2f 0a 20 20 69 66 28 20 70 61 79 6c 6f  . */.  if( paylo
115a0 61 64 53 69 7a 65 3d 3d 30 20 29 7b 0a 20 20 20  adSize==0 ){.   
115b0 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
115c0 70 44 65 73 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29  pDest, MEM_Null)
115d0 3b 0a 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f  ;.    goto op_co
115e0 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20 7d 0a 20 20  lumn_out;.  }.  
115f0 61 73 73 65 72 74 28 20 64 62 2d 3e 61 4c 69 6d  assert( db->aLim
11600 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f  it[SQLITE_LIMIT_
11610 4c 45 4e 47 54 48 5d 3e 3d 30 20 29 3b 0a 20 20  LENGTH]>=0 );.  
11620 69 66 28 20 70 61 79 6c 6f 61 64 53 69 7a 65 20  if( payloadSize 
11630 3e 20 28 75 33 32 29 64 62 2d 3e 61 4c 69 6d 69  > (u32)db->aLimi
11640 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c  t[SQLITE_LIMIT_L
11650 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f  ENGTH] ){.    go
11660 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a  to too_big;.  }.
11670 0a 20 20 6e 46 69 65 6c 64 20 3d 20 70 43 2d 3e  .  nField = pC->
11680 6e 46 69 65 6c 64 3b 0a 20 20 61 73 73 65 72 74  nField;.  assert
11690 28 20 70 32 3c 6e 46 69 65 6c 64 20 29 3b 0a 0a  ( p2<nField );..
116a0 20 20 2f 2a 20 52 65 61 64 20 61 6e 64 20 70 61    /* Read and pa
116b0 72 73 65 20 74 68 65 20 74 61 62 6c 65 20 68 65  rse the table he
116c0 61 64 65 72 2e 20 20 53 74 6f 72 65 20 74 68 65  ader.  Store the
116d0 20 72 65 73 75 6c 74 73 20 6f 66 20 74 68 65 20   results of the 
116e0 70 61 72 73 65 0a 20 20 2a 2a 20 69 6e 74 6f 20  parse.  ** into 
116f0 74 68 65 20 72 65 63 6f 72 64 20 68 65 61 64 65  the record heade
11700 72 20 63 61 63 68 65 20 66 69 65 6c 64 73 20 6f  r cache fields o
11710 66 20 74 68 65 20 63 75 72 73 6f 72 2e 0a 20 20  f the cursor..  
11720 2a 2f 0a 20 20 61 54 79 70 65 20 3d 20 70 43 2d  */.  aType = pC-
11730 3e 61 54 79 70 65 3b 0a 20 20 69 66 28 20 70 43  >aType;.  if( pC
11740 2d 3e 63 61 63 68 65 53 74 61 74 75 73 3d 3d 70  ->cacheStatus==p
11750 2d 3e 63 61 63 68 65 43 74 72 20 29 7b 0a 20 20  ->cacheCtr ){.  
11760 20 20 61 4f 66 66 73 65 74 20 3d 20 70 43 2d 3e    aOffset = pC->
11770 61 4f 66 66 73 65 74 3b 0a 20 20 7d 65 6c 73 65  aOffset;.  }else
11780 7b 0a 20 20 20 20 61 73 73 65 72 74 28 61 54 79  {.    assert(aTy
11790 70 65 29 3b 0a 20 20 20 20 61 76 61 69 6c 20 3d  pe);.    avail =
117a0 20 30 3b 0a 20 20 20 20 70 43 2d 3e 61 4f 66 66   0;.    pC->aOff
117b0 73 65 74 20 3d 20 61 4f 66 66 73 65 74 20 3d 20  set = aOffset = 
117c0 26 61 54 79 70 65 5b 6e 46 69 65 6c 64 5d 3b 0a  &aType[nField];.
117d0 20 20 20 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53      pC->payloadS
117e0 69 7a 65 20 3d 20 70 61 79 6c 6f 61 64 53 69 7a  ize = payloadSiz
117f0 65 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65  e;.    pC->cache
11800 53 74 61 74 75 73 20 3d 20 70 2d 3e 63 61 63 68  Status = p->cach
11810 65 43 74 72 3b 0a 0a 20 20 20 20 2f 2a 20 46 69  eCtr;..    /* Fi
11820 67 75 72 65 20 6f 75 74 20 68 6f 77 20 6d 61 6e  gure out how man
11830 79 20 62 79 74 65 73 20 61 72 65 20 69 6e 20 74  y bytes are in t
11840 68 65 20 68 65 61 64 65 72 20 2a 2f 0a 20 20 20  he header */.   
11850 20 69 66 28 20 7a 52 65 63 20 29 7b 0a 20 20 20   if( zRec ){.   
11860 20 20 20 7a 44 61 74 61 20 3d 20 7a 52 65 63 3b     zData = zRec;
11870 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
11880 20 20 69 66 28 20 70 43 2d 3e 69 73 49 6e 64 65    if( pC->isInde
11890 78 20 29 7b 0a 20 20 20 20 20 20 20 20 7a 44 61  x ){.        zDa
118a0 74 61 20 3d 20 28 63 68 61 72 2a 29 73 71 6c 69  ta = (char*)sqli
118b0 74 65 33 42 74 72 65 65 4b 65 79 46 65 74 63 68  te3BtreeKeyFetch
118c0 28 70 43 72 73 72 2c 20 26 61 76 61 69 6c 29 3b  (pCrsr, &avail);
118d0 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
118e0 20 20 20 20 20 20 7a 44 61 74 61 20 3d 20 28 63        zData = (c
118f0 68 61 72 2a 29 73 71 6c 69 74 65 33 42 74 72 65  har*)sqlite3Btre
11900 65 44 61 74 61 46 65 74 63 68 28 70 43 72 73 72  eDataFetch(pCrsr
11910 2c 20 26 61 76 61 69 6c 29 3b 0a 20 20 20 20 20  , &avail);.     
11920 20 7d 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 4b   }.      /* If K
11930 65 79 46 65 74 63 68 28 29 2f 44 61 74 61 46 65  eyFetch()/DataFe
11940 74 63 68 28 29 20 6d 61 6e 61 67 65 64 20 74 6f  tch() managed to
11950 20 67 65 74 20 74 68 65 20 65 6e 74 69 72 65 20   get the entire 
11960 70 61 79 6c 6f 61 64 2c 0a 20 20 20 20 20 20 2a  payload,.      *
11970 2a 20 73 61 76 65 20 74 68 65 20 70 61 79 6c 6f  * save the paylo
11980 61 64 20 69 6e 20 74 68 65 20 70 43 2d 3e 61 52  ad in the pC->aR
11990 6f 77 20 63 61 63 68 65 2e 20 20 54 68 61 74 20  ow cache.  That 
119a0 77 69 6c 6c 20 73 61 76 65 20 75 73 20 66 72 6f  will save us fro
119b0 6d 0a 20 20 20 20 20 20 2a 2a 20 68 61 76 69 6e  m.      ** havin
119c0 67 20 74 6f 20 6d 61 6b 65 20 61 64 64 69 74 69  g to make additi
119d0 6f 6e 61 6c 20 63 61 6c 6c 73 20 74 6f 20 66 65  onal calls to fe
119e0 74 63 68 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  tch the content 
119f0 70 6f 72 74 69 6f 6e 20 6f 66 0a 20 20 20 20 20  portion of.     
11a00 20 2a 2a 20 74 68 65 20 72 65 63 6f 72 64 2e 0a   ** the record..
11a10 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 61        */.      a
11a20 73 73 65 72 74 28 20 61 76 61 69 6c 3e 3d 30 20  ssert( avail>=0 
11a30 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70 61 79  );.      if( pay
11a40 6c 6f 61 64 53 69 7a 65 20 3c 3d 20 28 75 33 32  loadSize <= (u32
11a50 29 61 76 61 69 6c 20 29 7b 0a 20 20 20 20 20 20  )avail ){.      
11a60 20 20 7a 52 65 63 20 3d 20 7a 44 61 74 61 3b 0a    zRec = zData;.
11a70 20 20 20 20 20 20 20 20 70 43 2d 3e 61 52 6f 77          pC->aRow
11a80 20 3d 20 28 75 38 2a 29 7a 44 61 74 61 3b 0a 20   = (u8*)zData;. 
11a90 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
11aa0 20 20 20 20 70 43 2d 3e 61 52 6f 77 20 3d 20 30      pC->aRow = 0
11ab0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
11ac0 20 20 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f      /* The follo
11ad0 77 69 6e 67 20 61 73 73 65 72 74 20 69 73 20 74  wing assert is t
11ae0 72 75 65 20 69 6e 20 61 6c 6c 20 63 61 73 65 73  rue in all cases
11af0 20 61 63 63 65 70 74 20 77 68 65 6e 0a 20 20 20   accept when.   
11b00 20 2a 2a 20 74 68 65 20 64 61 74 61 62 61 73 65   ** the database
11b10 20 66 69 6c 65 20 68 61 73 20 62 65 65 6e 20 63   file has been c
11b20 6f 72 72 75 70 74 65 64 20 65 78 74 65 72 6e 61  orrupted externa
11b30 6c 6c 79 2e 0a 20 20 20 20 2a 2a 20 20 20 20 61  lly..    **    a
11b40 73 73 65 72 74 28 20 7a 52 65 63 21 3d 30 20 7c  ssert( zRec!=0 |
11b50 7c 20 61 76 61 69 6c 3e 3d 70 61 79 6c 6f 61 64  | avail>=payload
11b60 53 69 7a 65 20 7c 7c 20 61 76 61 69 6c 3e 3d 39  Size || avail>=9
11b70 20 29 3b 20 2a 2f 0a 20 20 20 20 73 7a 48 64 72   ); */.    szHdr
11b80 20 3d 20 67 65 74 56 61 72 69 6e 74 33 32 28 28   = getVarint32((
11b90 75 38 2a 29 7a 44 61 74 61 2c 20 6f 66 66 73 65  u8*)zData, offse
11ba0 74 29 3b 0a 0a 20 20 20 20 2f 2a 20 4d 61 6b 65  t);..    /* Make
11bb0 20 73 75 72 65 20 61 20 63 6f 72 72 75 70 74 20   sure a corrupt 
11bc0 64 61 74 61 62 61 73 65 20 68 61 73 20 6e 6f 74  database has not
11bd0 20 67 69 76 65 6e 20 75 73 20 61 6e 20 6f 76 65   given us an ove
11be0 72 73 69 7a 65 20 68 65 61 64 65 72 2e 0a 20 20  rsize header..  
11bf0 20 20 2a 2a 20 44 6f 20 74 68 69 73 20 6e 6f 77    ** Do this now
11c00 20 74 6f 20 61 76 6f 69 64 20 61 6e 20 6f 76 65   to avoid an ove
11c10 72 73 69 7a 65 20 6d 65 6d 6f 72 79 20 61 6c 6c  rsize memory all
11c20 6f 63 61 74 69 6f 6e 2e 0a 20 20 20 20 2a 2a 0a  ocation..    **.
11c30 20 20 20 20 2a 2a 20 54 79 70 65 20 65 6e 74 72      ** Type entr
11c40 69 65 73 20 63 61 6e 20 62 65 20 62 65 74 77 65  ies can be betwe
11c50 65 6e 20 31 20 61 6e 64 20 35 20 62 79 74 65 73  en 1 and 5 bytes
11c60 20 65 61 63 68 2e 20 20 42 75 74 20 34 20 61 6e   each.  But 4 an
11c70 64 20 35 20 62 79 74 65 0a 20 20 20 20 2a 2a 20  d 5 byte.    ** 
11c80 74 79 70 65 73 20 75 73 65 20 73 6f 20 6d 75 63  types use so muc
11c90 68 20 64 61 74 61 20 73 70 61 63 65 20 74 68 61  h data space tha
11ca0 74 20 74 68 65 72 65 20 63 61 6e 20 6f 6e 6c 79  t there can only
11cb0 20 62 65 20 34 30 39 36 20 61 6e 64 20 33 32 20   be 4096 and 32 
11cc0 6f 66 0a 20 20 20 20 2a 2a 20 74 68 65 6d 2c 20  of.    ** them, 
11cd0 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20 20 53  respectively.  S
11ce0 6f 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 68 65  o the maximum he
11cf0 61 64 65 72 20 6c 65 6e 67 74 68 20 72 65 73 75  ader length resu
11d00 6c 74 73 20 66 72 6f 6d 20 61 0a 20 20 20 20 2a  lts from a.    *
11d10 2a 20 33 2d 62 79 74 65 20 74 79 70 65 20 66 6f  * 3-byte type fo
11d20 72 20 65 61 63 68 20 6f 66 20 74 68 65 20 6d 61  r each of the ma
11d30 78 69 6d 75 6d 20 6f 66 20 33 32 37 36 38 20 63  ximum of 32768 c
11d40 6f 6c 75 6d 6e 73 20 70 6c 75 73 20 74 68 72 65  olumns plus thre
11d50 65 0a 20 20 20 20 2a 2a 20 65 78 74 72 61 20 62  e.    ** extra b
11d60 79 74 65 73 20 66 6f 72 20 74 68 65 20 68 65 61  ytes for the hea
11d70 64 65 72 20 6c 65 6e 67 74 68 20 69 74 73 65 6c  der length itsel
11d80 66 2e 20 20 33 32 37 36 38 2a 33 20 2b 20 33 20  f.  32768*3 + 3 
11d90 3d 20 39 38 33 30 37 2e 0a 20 20 20 20 2a 2f 0a  = 98307..    */.
11da0 20 20 20 20 69 66 28 20 6f 66 66 73 65 74 20 3e      if( offset >
11db0 20 39 38 33 30 37 20 29 7b 0a 20 20 20 20 20 20   98307 ){.      
11dc0 72 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52  rc = SQLITE_CORR
11dd0 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20 20 20  UPT_BKPT;.      
11de0 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f  goto op_column_o
11df0 75 74 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f  ut;.    }..    /
11e00 2a 20 43 6f 6d 70 75 74 65 20 69 6e 20 6c 65 6e  * Compute in len
11e10 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62   the number of b
11e20 79 74 65 73 20 6f 66 20 64 61 74 61 20 77 65 20  ytes of data we 
11e30 6e 65 65 64 20 74 6f 20 72 65 61 64 20 69 6e 20  need to read in 
11e40 6f 72 64 65 72 0a 20 20 20 20 2a 2a 20 74 6f 20  order.    ** to 
11e50 67 65 74 20 6e 46 69 65 6c 64 20 74 79 70 65 20  get nField type 
11e60 76 61 6c 75 65 73 2e 20 20 6f 66 66 73 65 74 20  values.  offset 
11e70 69 73 20 61 6e 20 75 70 70 65 72 20 62 6f 75 6e  is an upper boun
11e80 64 20 6f 6e 20 74 68 69 73 2e 20 20 42 75 74 0a  d on this.  But.
11e90 20 20 20 20 2a 2a 20 6e 46 69 65 6c 64 20 6d 69      ** nField mi
11ea0 67 68 74 20 62 65 20 73 69 67 6e 69 66 69 63 61  ght be significa
11eb0 6e 74 6c 79 20 6c 65 73 73 20 74 68 61 6e 20 74  ntly less than t
11ec0 68 65 20 74 72 75 65 20 6e 75 6d 62 65 72 20 6f  he true number o
11ed0 66 20 63 6f 6c 75 6d 6e 73 0a 20 20 20 20 2a 2a  f columns.    **
11ee0 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2c 20 61   in the table, a
11ef0 6e 64 20 69 6e 20 74 68 61 74 20 63 61 73 65 2c  nd in that case,
11f00 20 35 2a 6e 46 69 65 6c 64 2b 33 20 6d 69 67 68   5*nField+3 migh
11f10 74 20 62 65 20 73 6d 61 6c 6c 65 72 20 74 68 61  t be smaller tha
11f20 6e 20 6f 66 66 73 65 74 2e 0a 20 20 20 20 2a 2a  n offset..    **
11f30 20 57 65 20 77 61 6e 74 20 74 6f 20 6d 69 6e 69   We want to mini
11f40 6d 69 7a 65 20 6c 65 6e 20 69 6e 20 6f 72 64 65  mize len in orde
11f50 72 20 74 6f 20 6c 69 6d 69 74 20 74 68 65 20 73  r to limit the s
11f60 69 7a 65 20 6f 66 20 74 68 65 20 6d 65 6d 6f 72  ize of the memor
11f70 79 0a 20 20 20 20 2a 2a 20 61 6c 6c 6f 63 61 74  y.    ** allocat
11f80 69 6f 6e 2c 20 65 73 70 65 63 69 61 6c 6c 79 20  ion, especially 
11f90 69 66 20 61 20 63 6f 72 72 75 70 74 20 64 61 74  if a corrupt dat
11fa0 61 62 61 73 65 20 66 69 6c 65 20 68 61 73 20 63  abase file has c
11fb0 61 75 73 65 64 20 6f 66 66 73 65 74 0a 20 20 20  aused offset.   
11fc0 20 2a 2a 20 74 6f 20 62 65 20 6f 76 65 72 73 69   ** to be oversi
11fd0 7a 65 64 2e 20 4f 66 66 73 65 74 20 69 73 20 6c  zed. Offset is l
11fe0 69 6d 69 74 65 64 20 74 6f 20 39 38 33 30 37 20  imited to 98307 
11ff0 61 62 6f 76 65 2e 20 20 42 75 74 20 39 38 33 30  above.  But 9830
12000 37 20 6d 69 67 68 74 0a 20 20 20 20 2a 2a 20 73  7 might.    ** s
12010 74 69 6c 6c 20 65 78 63 65 65 64 20 52 6f 62 73  till exceed Robs
12020 6f 6e 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  on memory alloca
12030 74 69 6f 6e 20 6c 69 6d 69 74 73 20 6f 6e 20 73  tion limits on s
12040 6f 6d 65 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  ome configuratio
12050 6e 73 2e 0a 20 20 20 20 2a 2a 20 4f 6e 20 73 79  ns..    ** On sy
12060 73 74 65 6d 73 20 74 68 61 74 20 63 61 6e 6e 6f  stems that canno
12070 74 20 74 6f 6c 65 72 61 74 65 20 6c 61 72 67 65  t tolerate large
12080 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
12090 6f 6e 73 2c 20 6e 46 69 65 6c 64 2a 35 2b 33 0a  ons, nField*5+3.
120a0 20 20 20 20 2a 2a 20 77 69 6c 6c 20 6c 69 6b 65      ** will like
120b0 6c 79 20 62 65 20 6d 75 63 68 20 73 6d 61 6c 6c  ly be much small
120c0 65 72 20 73 69 6e 63 65 20 6e 46 69 65 6c 64 20  er since nField 
120d0 77 69 6c 6c 20 6c 69 6b 65 6c 79 20 62 65 20 6c  will likely be l
120e0 65 73 73 20 74 68 61 6e 0a 20 20 20 20 2a 2a 20  ess than.    ** 
120f0 32 30 20 6f 72 20 73 6f 2e 20 20 54 68 69 73 20  20 or so.  This 
12100 69 6e 73 75 72 65 73 20 74 68 61 74 20 52 6f 62  insures that Rob
12110 73 6f 6e 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  son memory alloc
12120 61 74 69 6f 6e 20 6c 69 6d 69 74 73 20 61 72 65  ation limits are
12130 0a 20 20 20 20 2a 2a 20 6e 6f 74 20 65 78 63 65  .    ** not exce
12140 65 64 65 64 20 65 76 65 6e 20 66 6f 72 20 63 6f  eded even for co
12150 72 72 75 70 74 20 64 61 74 61 62 61 73 65 20 66  rrupt database f
12160 69 6c 65 73 2e 0a 20 20 20 20 2a 2f 0a 20 20 20  iles..    */.   
12170 20 6c 65 6e 20 3d 20 6e 46 69 65 6c 64 2a 35 20   len = nField*5 
12180 2b 20 33 3b 0a 20 20 20 20 69 66 28 20 6c 65 6e  + 3;.    if( len
12190 20 3e 20 28 69 6e 74 29 6f 66 66 73 65 74 20 29   > (int)offset )
121a0 20 6c 65 6e 20 3d 20 28 69 6e 74 29 6f 66 66 73   len = (int)offs
121b0 65 74 3b 0a 0a 20 20 20 20 2f 2a 20 54 68 65 20  et;..    /* The 
121c0 4b 65 79 46 65 74 63 68 28 29 20 6f 72 20 44 61  KeyFetch() or Da
121d0 74 61 46 65 74 63 68 28 29 20 61 62 6f 76 65 20  taFetch() above 
121e0 61 72 65 20 66 61 73 74 20 61 6e 64 20 77 69 6c  are fast and wil
121f0 6c 20 67 65 74 20 74 68 65 20 65 6e 74 69 72 65  l get the entire
12200 0a 20 20 20 20 2a 2a 20 72 65 63 6f 72 64 20 68  .    ** record h
12210 65 61 64 65 72 20 69 6e 20 6d 6f 73 74 20 63 61  eader in most ca
12220 73 65 73 2e 20 20 42 75 74 20 74 68 65 79 20 77  ses.  But they w
12230 69 6c 6c 20 66 61 69 6c 20 74 6f 20 67 65 74 20  ill fail to get 
12240 74 68 65 20 63 6f 6d 70 6c 65 74 65 0a 20 20 20  the complete.   
12250 20 2a 2a 20 72 65 63 6f 72 64 20 68 65 61 64 65   ** record heade
12260 72 20 69 66 20 74 68 65 20 72 65 63 6f 72 64 20  r if the record 
12270 68 65 61 64 65 72 20 64 6f 65 73 20 6e 6f 74 20  header does not 
12280 66 69 74 20 6f 6e 20 61 20 73 69 6e 67 6c 65 20  fit on a single 
12290 70 61 67 65 0a 20 20 20 20 2a 2a 20 69 6e 20 74  page.    ** in t
122a0 68 65 20 42 2d 54 72 65 65 2e 20 20 57 68 65 6e  he B-Tree.  When
122b0 20 74 68 61 74 20 68 61 70 70 65 6e 73 2c 20 75   that happens, u
122c0 73 65 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  se sqlite3VdbeMe
122d0 6d 46 72 6f 6d 42 74 72 65 65 28 29 20 74 6f 0a  mFromBtree() to.
122e0 20 20 20 20 2a 2a 20 61 63 71 75 69 72 65 20 74      ** acquire t
122f0 68 65 20 63 6f 6d 70 6c 65 74 65 20 68 65 61 64  he complete head
12300 65 72 20 74 65 78 74 2e 0a 20 20 20 20 2a 2f 0a  er text..    */.
12310 20 20 20 20 69 66 28 20 21 7a 52 65 63 20 26 26      if( !zRec &&
12320 20 61 76 61 69 6c 3c 6c 65 6e 20 29 7b 0a 20 20   avail<len ){.  
12330 20 20 20 20 73 4d 65 6d 2e 66 6c 61 67 73 20 3d      sMem.flags =
12340 20 30 3b 0a 20 20 20 20 20 20 73 4d 65 6d 2e 64   0;.      sMem.d
12350 62 20 3d 20 30 3b 0a 20 20 20 20 20 20 72 63 20  b = 0;.      rc 
12360 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  = sqlite3VdbeMem
12370 46 72 6f 6d 42 74 72 65 65 28 70 43 72 73 72 2c  FromBtree(pCrsr,
12380 20 30 2c 20 6c 65 6e 2c 20 70 43 2d 3e 69 73 49   0, len, pC->isI
12390 6e 64 65 78 2c 20 26 73 4d 65 6d 29 3b 0a 20 20  ndex, &sMem);.  
123a0 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
123b0 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20  TE_OK ){.       
123c0 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f   goto op_column_
123d0 6f 75 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  out;.      }.   
123e0 20 20 20 7a 44 61 74 61 20 3d 20 73 4d 65 6d 2e     zData = sMem.
123f0 7a 3b 0a 20 20 20 20 7d 0a 20 20 20 20 7a 45 6e  z;.    }.    zEn
12400 64 48 64 72 20 3d 20 28 75 38 20 2a 29 26 7a 44  dHdr = (u8 *)&zD
12410 61 74 61 5b 6c 65 6e 5d 3b 0a 20 20 20 20 7a 49  ata[len];.    zI
12420 64 78 20 3d 20 28 75 38 20 2a 29 26 7a 44 61 74  dx = (u8 *)&zDat
12430 61 5b 73 7a 48 64 72 5d 3b 0a 0a 20 20 20 20 2f  a[szHdr];..    /
12440 2a 20 53 63 61 6e 20 74 68 65 20 68 65 61 64 65  * Scan the heade
12450 72 20 61 6e 64 20 75 73 65 20 69 74 20 74 6f 20  r and use it to 
12460 66 69 6c 6c 20 69 6e 20 74 68 65 20 61 54 79 70  fill in the aTyp
12470 65 5b 5d 20 61 6e 64 20 61 4f 66 66 73 65 74 5b  e[] and aOffset[
12480 5d 0a 20 20 20 20 2a 2a 20 61 72 72 61 79 73 2e  ].    ** arrays.
12490 20 20 61 54 79 70 65 5b 69 5d 20 77 69 6c 6c 20    aType[i] will 
124a0 63 6f 6e 74 61 69 6e 20 74 68 65 20 74 79 70 65  contain the type
124b0 20 69 6e 74 65 67 65 72 20 66 6f 72 20 74 68 65   integer for the
124c0 20 69 2d 74 68 0a 20 20 20 20 2a 2a 20 63 6f 6c   i-th.    ** col
124d0 75 6d 6e 20 61 6e 64 20 61 4f 66 66 73 65 74 5b  umn and aOffset[
124e0 69 5d 20 77 69 6c 6c 20 63 6f 6e 74 61 69 6e 20  i] will contain 
124f0 74 68 65 20 6f 66 66 73 65 74 20 66 72 6f 6d 20  the offset from 
12500 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 0a 20 20  the beginning.  
12510 20 20 2a 2a 20 6f 66 20 74 68 65 20 72 65 63 6f    ** of the reco
12520 72 64 20 74 6f 20 74 68 65 20 73 74 61 72 74 20  rd to the start 
12530 6f 66 20 74 68 65 20 64 61 74 61 20 66 6f 72 20  of the data for 
12540 74 68 65 20 69 2d 74 68 20 63 6f 6c 75 6d 6e 0a  the i-th column.
12550 20 20 20 20 2a 2f 0a 20 20 20 20 66 6f 72 28 69      */.    for(i
12560 3d 30 3b 20 69 3c 6e 46 69 65 6c 64 3b 20 69 2b  =0; i<nField; i+
12570 2b 29 7b 0a 20 20 20 20 20 20 69 66 28 20 7a 49  +){.      if( zI
12580 64 78 3c 7a 45 6e 64 48 64 72 20 29 7b 0a 20 20  dx<zEndHdr ){.  
12590 20 20 20 20 20 20 61 4f 66 66 73 65 74 5b 69 5d        aOffset[i]
125a0 20 3d 20 6f 66 66 73 65 74 3b 0a 20 20 20 20 20   = offset;.     
125b0 20 20 20 69 66 28 20 7a 49 64 78 5b 30 5d 3c 30     if( zIdx[0]<0
125c0 78 38 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20  x80 ){.         
125d0 20 74 20 3d 20 7a 49 64 78 5b 30 5d 3b 0a 20 20   t = zIdx[0];.  
125e0 20 20 20 20 20 20 20 20 7a 49 64 78 2b 2b 3b 0a          zIdx++;.
125f0 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20          }else{. 
12600 20 20 20 20 20 20 20 20 20 7a 49 64 78 20 2b 3d           zIdx +=
12610 20 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e   sqlite3GetVarin
12620 74 33 32 28 7a 49 64 78 2c 20 26 74 29 3b 0a 20  t32(zIdx, &t);. 
12630 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
12640 20 61 54 79 70 65 5b 69 5d 20 3d 20 74 3b 0a 20   aType[i] = t;. 
12650 20 20 20 20 20 20 20 73 7a 46 69 65 6c 64 20 3d         szField =
12660 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69   sqlite3VdbeSeri
12670 61 6c 54 79 70 65 4c 65 6e 28 74 29 3b 0a 20 20  alTypeLen(t);.  
12680 20 20 20 20 20 20 6f 66 66 73 65 74 20 2b 3d 20        offset += 
12690 73 7a 46 69 65 6c 64 3b 0a 20 20 20 20 20 20 20  szField;.       
126a0 20 69 66 28 20 6f 66 66 73 65 74 3c 73 7a 46 69   if( offset<szFi
126b0 65 6c 64 20 29 7b 20 20 2f 2a 20 54 72 75 65 20  eld ){  /* True 
126c0 69 66 20 6f 66 66 73 65 74 20 6f 76 65 72 66 6c  if offset overfl
126d0 6f 77 73 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  ows */.         
126e0 20 7a 49 64 78 20 3d 20 26 7a 45 6e 64 48 64 72   zIdx = &zEndHdr
126f0 5b 31 5d 3b 20 20 2f 2a 20 46 6f 72 63 65 73 20  [1];  /* Forces 
12700 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 20 72  SQLITE_CORRUPT r
12710 65 74 75 72 6e 20 62 65 6c 6f 77 20 2a 2f 0a 20  eturn below */. 
12720 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a           break;.
12730 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
12740 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 2f  }else{.        /
12750 2a 20 49 66 20 69 20 69 73 20 6c 65 73 73 20 74  * If i is less t
12760 68 61 74 20 6e 46 69 65 6c 64 2c 20 74 68 65 6e  hat nField, then
12770 20 74 68 65 72 65 20 61 72 65 20 6c 65 73 73 20   there are less 
12780 66 69 65 6c 64 73 20 69 6e 20 74 68 69 73 0a 20  fields in this. 
12790 20 20 20 20 20 20 20 2a 2a 20 72 65 63 6f 72 64         ** record
127a0 20 74 68 61 6e 20 53 65 74 4e 75 6d 43 6f 6c 75   than SetNumColu
127b0 6d 6e 73 20 69 6e 64 69 63 61 74 65 64 20 74 68  mns indicated th
127c0 65 72 65 20 61 72 65 20 63 6f 6c 75 6d 6e 73 20  ere are columns 
127d0 69 6e 20 74 68 65 0a 20 20 20 20 20 20 20 20 2a  in the.        *
127e0 2a 20 74 61 62 6c 65 2e 20 53 65 74 20 74 68 65  * table. Set the
127f0 20 6f 66 66 73 65 74 20 66 6f 72 20 61 6e 79 20   offset for any 
12800 65 78 74 72 61 20 63 6f 6c 75 6d 6e 73 20 6e 6f  extra columns no
12810 74 20 70 72 65 73 65 6e 74 20 69 6e 0a 20 20 20  t present in.   
12820 20 20 20 20 20 2a 2a 20 74 68 65 20 72 65 63 6f       ** the reco
12830 72 64 20 74 6f 20 30 2e 20 54 68 69 73 20 74 65  rd to 0. This te
12840 6c 6c 73 20 63 6f 64 65 20 62 65 6c 6f 77 20 74  lls code below t
12850 6f 20 73 74 6f 72 65 20 61 20 4e 55 4c 4c 0a 20  o store a NULL. 
12860 20 20 20 20 20 20 20 2a 2a 20 69 6e 73 74 65 61         ** instea
12870 64 20 6f 66 20 64 65 73 65 72 69 61 6c 69 7a 69  d of deserializi
12880 6e 67 20 61 20 76 61 6c 75 65 20 66 72 6f 6d 20  ng a value from 
12890 74 68 65 20 72 65 63 6f 72 64 2e 0a 20 20 20 20  the record..    
128a0 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 20 20 61      */.        a
128b0 4f 66 66 73 65 74 5b 69 5d 20 3d 20 30 3b 0a 20  Offset[i] = 0;. 
128c0 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
128d0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52   sqlite3VdbeMemR
128e0 65 6c 65 61 73 65 28 26 73 4d 65 6d 29 3b 0a 20  elease(&sMem);. 
128f0 20 20 20 73 4d 65 6d 2e 66 6c 61 67 73 20 3d 20     sMem.flags = 
12900 4d 45 4d 5f 4e 75 6c 6c 3b 0a 0a 20 20 20 20 2f  MEM_Null;..    /
12910 2a 20 49 66 20 77 65 20 68 61 76 65 20 72 65 61  * If we have rea
12920 64 20 6d 6f 72 65 20 68 65 61 64 65 72 20 64 61  d more header da
12930 74 61 20 74 68 61 6e 20 77 61 73 20 63 6f 6e 74  ta than was cont
12940 61 69 6e 65 64 20 69 6e 20 74 68 65 20 68 65 61  ained in the hea
12950 64 65 72 2c 0a 20 20 20 20 2a 2a 20 6f 72 20 69  der,.    ** or i
12960 66 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65  f the end of the
12970 20 6c 61 73 74 20 66 69 65 6c 64 20 61 70 70 65   last field appe
12980 61 72 73 20 74 6f 20 62 65 20 70 61 73 74 20 74  ars to be past t
12990 68 65 20 65 6e 64 20 6f 66 20 74 68 65 0a 20 20  he end of the.  
129a0 20 20 2a 2a 20 72 65 63 6f 72 64 2c 20 6f 72 20    ** record, or 
129b0 69 66 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  if the end of th
129c0 65 20 6c 61 73 74 20 66 69 65 6c 64 20 61 70 70  e last field app
129d0 65 61 72 73 20 74 6f 20 62 65 20 62 65 66 6f 72  ears to be befor
129e0 65 20 74 68 65 20 65 6e 64 0a 20 20 20 20 2a 2a  e the end.    **
129f0 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20 28   of the record (
12a00 77 68 65 6e 20 61 6c 6c 20 66 69 65 6c 64 73 20  when all fields 
12a10 70 72 65 73 65 6e 74 29 2c 20 74 68 65 6e 20 77  present), then w
12a20 65 20 6d 75 73 74 20 62 65 20 64 65 61 6c 69 6e  e must be dealin
12a30 67 20 0a 20 20 20 20 2a 2a 20 77 69 74 68 20 61  g .    ** with a
12a40 20 63 6f 72 72 75 70 74 20 64 61 74 61 62 61 73   corrupt databas
12a50 65 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66  e..    */.    if
12a60 28 20 28 7a 49 64 78 20 3e 20 7a 45 6e 64 48 64  ( (zIdx > zEndHd
12a70 72 29 20 7c 7c 20 28 6f 66 66 73 65 74 20 3e 20  r) || (offset > 
12a80 70 61 79 6c 6f 61 64 53 69 7a 65 29 0a 20 20 20  payloadSize).   
12a90 20 20 20 20 20 20 7c 7c 20 28 7a 49 64 78 3d 3d        || (zIdx==
12aa0 7a 45 6e 64 48 64 72 20 26 26 20 6f 66 66 73 65  zEndHdr && offse
12ab0 74 21 3d 70 61 79 6c 6f 61 64 53 69 7a 65 29 20  t!=payloadSize) 
12ac0 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51  ){.      rc = SQ
12ad0 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50  LITE_CORRUPT_BKP
12ae0 54 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6f 70  T;.      goto op
12af0 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20  _column_out;.   
12b00 20 7d 0a 20 20 7d 0a 0a 20 20 2f 2a 20 47 65 74   }.  }..  /* Get
12b10 20 74 68 65 20 63 6f 6c 75 6d 6e 20 69 6e 66 6f   the column info
12b20 72 6d 61 74 69 6f 6e 2e 20 49 66 20 61 4f 66 66  rmation. If aOff
12b30 73 65 74 5b 70 32 5d 20 69 73 20 6e 6f 6e 2d 7a  set[p2] is non-z
12b40 65 72 6f 2c 20 74 68 65 6e 20 0a 20 20 2a 2a 20  ero, then .  ** 
12b50 64 65 73 65 72 69 61 6c 69 7a 65 20 74 68 65 20  deserialize the 
12b60 76 61 6c 75 65 20 66 72 6f 6d 20 74 68 65 20 72  value from the r
12b70 65 63 6f 72 64 2e 20 49 66 20 61 4f 66 66 73 65  ecord. If aOffse
12b80 74 5b 70 32 5d 20 69 73 20 7a 65 72 6f 2c 0a 20  t[p2] is zero,. 
12b90 20 2a 2a 20 74 68 65 6e 20 74 68 65 72 65 20 61   ** then there a
12ba0 72 65 20 6e 6f 74 20 65 6e 6f 75 67 68 20 66 69  re not enough fi
12bb0 65 6c 64 73 20 69 6e 20 74 68 65 20 72 65 63 6f  elds in the reco
12bc0 72 64 20 74 6f 20 73 61 74 69 73 66 79 20 74 68  rd to satisfy th
12bd0 65 0a 20 20 2a 2a 20 72 65 71 75 65 73 74 2e 20  e.  ** request. 
12be0 20 49 6e 20 74 68 69 73 20 63 61 73 65 2c 20 73   In this case, s
12bf0 65 74 20 74 68 65 20 76 61 6c 75 65 20 4e 55 4c  et the value NUL
12c00 4c 20 6f 72 20 74 6f 20 50 34 20 69 66 20 50 34  L or to P4 if P4
12c10 20 69 73 0a 20 20 2a 2a 20 61 20 70 6f 69 6e 74   is.  ** a point
12c20 65 72 20 74 6f 20 61 20 4d 65 6d 20 6f 62 6a 65  er to a Mem obje
12c30 63 74 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 61  ct..  */.  if( a
12c40 4f 66 66 73 65 74 5b 70 32 5d 20 29 7b 0a 20 20  Offset[p2] ){.  
12c50 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51    assert( rc==SQ
12c60 4c 49 54 45 5f 4f 4b 20 29 3b 0a 20 20 20 20 69  LITE_OK );.    i
12c70 66 28 20 7a 52 65 63 20 29 7b 0a 20 20 20 20 20  f( zRec ){.     
12c80 20 4d 65 6d 52 65 6c 65 61 73 65 45 78 74 28 70   MemReleaseExt(p
12c90 44 65 73 74 29 3b 0a 20 20 20 20 20 20 73 71 6c  Dest);.      sql
12ca0 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 47 65  ite3VdbeSerialGe
12cb0 74 28 28 75 38 20 2a 29 26 7a 52 65 63 5b 61 4f  t((u8 *)&zRec[aO
12cc0 66 66 73 65 74 5b 70 32 5d 5d 2c 20 61 54 79 70  ffset[p2]], aTyp
12cd0 65 5b 70 32 5d 2c 20 70 44 65 73 74 29 3b 0a 20  e[p2], pDest);. 
12ce0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
12cf0 6c 65 6e 20 3d 20 73 71 6c 69 74 65 33 56 64 62  len = sqlite3Vdb
12d00 65 53 65 72 69 61 6c 54 79 70 65 4c 65 6e 28 61  eSerialTypeLen(a
12d10 54 79 70 65 5b 70 32 5d 29 3b 0a 20 20 20 20 20  Type[p2]);.     
12d20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d   sqlite3VdbeMemM
12d30 6f 76 65 28 26 73 4d 65 6d 2c 20 70 44 65 73 74  ove(&sMem, pDest
12d40 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71  );.      rc = sq
12d50 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d  lite3VdbeMemFrom
12d60 42 74 72 65 65 28 70 43 72 73 72 2c 20 61 4f 66  Btree(pCrsr, aOf
12d70 66 73 65 74 5b 70 32 5d 2c 20 6c 65 6e 2c 20 70  fset[p2], len, p
12d80 43 2d 3e 69 73 49 6e 64 65 78 2c 20 26 73 4d 65  C->isIndex, &sMe
12d90 6d 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63  m);.      if( rc
12da0 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
12db0 20 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63         goto op_c
12dc0 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20 20  olumn_out;.     
12dd0 20 7d 0a 20 20 20 20 20 20 7a 44 61 74 61 20 3d   }.      zData =
12de0 20 73 4d 65 6d 2e 7a 3b 0a 20 20 20 20 20 20 73   sMem.z;.      s
12df0 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c  qlite3VdbeSerial
12e00 47 65 74 28 28 75 38 2a 29 7a 44 61 74 61 2c 20  Get((u8*)zData, 
12e10 61 54 79 70 65 5b 70 32 5d 2c 20 70 44 65 73 74  aType[p2], pDest
12e20 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 44 65  );.    }.    pDe
12e30 73 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69  st->enc = encodi
12e40 6e 67 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ng;.  }else{.   
12e50 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65   if( pOp->p4type
12e60 3d 3d 50 34 5f 4d 45 4d 20 29 7b 0a 20 20 20 20  ==P4_MEM ){.    
12e70 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
12e80 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 44 65 73  ShallowCopy(pDes
12e90 74 2c 20 70 4f 70 2d 3e 70 34 2e 70 4d 65 6d 2c  t, pOp->p4.pMem,
12ea0 20 4d 45 4d 5f 53 74 61 74 69 63 29 3b 0a 20 20   MEM_Static);.  
12eb0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 4d    }else{.      M
12ec0 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 44  emSetTypeFlag(pD
12ed0 65 73 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a  est, MEM_Null);.
12ee0 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 2f 2a 20      }.  }..  /* 
12ef0 49 66 20 77 65 20 64 79 6e 61 6d 69 63 61 6c 6c  If we dynamicall
12f00 79 20 61 6c 6c 6f 63 61 74 65 64 20 73 70 61 63  y allocated spac
12f10 65 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 64 61  e to hold the da
12f20 74 61 20 28 69 6e 20 74 68 65 0a 20 20 2a 2a 20  ta (in the.  ** 
12f30 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 72  sqlite3VdbeMemFr
12f40 6f 6d 42 74 72 65 65 28 29 20 63 61 6c 6c 20 61  omBtree() call a
12f50 62 6f 76 65 29 20 74 68 65 6e 20 74 72 61 6e 73  bove) then trans
12f60 66 65 72 20 63 6f 6e 74 72 6f 6c 20 6f 66 20 74  fer control of t
12f70 68 61 74 0a 20 20 2a 2a 20 64 79 6e 61 6d 69 63  hat.  ** dynamic
12f80 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 73  ally allocated s
12f90 70 61 63 65 20 6f 76 65 72 20 74 6f 20 74 68 65  pace over to the
12fa0 20 70 44 65 73 74 20 73 74 72 75 63 74 75 72 65   pDest structure
12fb0 2e 0a 20 20 2a 2a 20 54 68 69 73 20 70 72 65 76  ..  ** This prev
12fc0 65 6e 74 73 20 61 20 6d 65 6d 6f 72 79 20 63 6f  ents a memory co
12fd0 70 79 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 73  py..  */.  if( s
12fe0 4d 65 6d 2e 7a 4d 61 6c 6c 6f 63 20 29 7b 0a 20  Mem.zMalloc ){. 
12ff0 20 20 20 61 73 73 65 72 74 28 20 73 4d 65 6d 2e     assert( sMem.
13000 7a 3d 3d 73 4d 65 6d 2e 7a 4d 61 6c 6c 6f 63 20  z==sMem.zMalloc 
13010 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 21  );.    assert( !
13020 28 70 44 65 73 74 2d 3e 66 6c 61 67 73 20 26 20  (pDest->flags & 
13030 4d 45 4d 5f 44 79 6e 29 20 29 3b 0a 20 20 20 20  MEM_Dyn) );.    
13040 61 73 73 65 72 74 28 20 21 28 70 44 65 73 74 2d  assert( !(pDest-
13050 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 42 6c  >flags & (MEM_Bl
13060 6f 62 7c 4d 45 4d 5f 53 74 72 29 29 20 7c 7c 20  ob|MEM_Str)) || 
13070 70 44 65 73 74 2d 3e 7a 3d 3d 73 4d 65 6d 2e 7a  pDest->z==sMem.z
13080 20 29 3b 0a 20 20 20 20 70 44 65 73 74 2d 3e 66   );.    pDest->f
13090 6c 61 67 73 20 26 3d 20 7e 28 4d 45 4d 5f 45 70  lags &= ~(MEM_Ep
130a0 68 65 6d 7c 4d 45 4d 5f 53 74 61 74 69 63 29 3b  hem|MEM_Static);
130b0 0a 20 20 20 20 70 44 65 73 74 2d 3e 66 6c 61 67  .    pDest->flag
130c0 73 20 7c 3d 20 4d 45 4d 5f 54 65 72 6d 3b 0a 20  s |= MEM_Term;. 
130d0 20 20 20 70 44 65 73 74 2d 3e 7a 20 3d 20 73 4d     pDest->z = sM
130e0 65 6d 2e 7a 3b 0a 20 20 20 20 70 44 65 73 74 2d  em.z;.    pDest-
130f0 3e 7a 4d 61 6c 6c 6f 63 20 3d 20 73 4d 65 6d 2e  >zMalloc = sMem.
13100 7a 4d 61 6c 6c 6f 63 3b 0a 20 20 7d 0a 0a 20 20  zMalloc;.  }..  
13110 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
13120 4d 65 6d 4d 61 6b 65 57 72 69 74 65 61 62 6c 65  MemMakeWriteable
13130 28 70 44 65 73 74 29 3b 0a 0a 6f 70 5f 63 6f 6c  (pDest);..op_col
13140 75 6d 6e 5f 6f 75 74 3a 0a 20 20 55 50 44 41 54  umn_out:.  UPDAT
13150 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70  E_MAX_BLOBSIZE(p
13160 44 65 73 74 29 3b 0a 20 20 52 45 47 49 53 54 45  Dest);.  REGISTE
13170 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c  R_TRACE(pOp->p3,
13180 20 70 44 65 73 74 29 3b 0a 20 20 62 72 65 61 6b   pDest);.  break
13190 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
131a0 41 66 66 69 6e 69 74 79 20 50 31 20 50 32 20 2a  Affinity P1 P2 *
131b0 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 41 70 70 6c   P4 *.**.** Appl
131c0 79 20 61 66 66 69 6e 69 74 69 65 73 20 74 6f 20  y affinities to 
131d0 61 20 72 61 6e 67 65 20 6f 66 20 50 32 20 72 65  a range of P2 re
131e0 67 69 73 74 65 72 73 20 73 74 61 72 74 69 6e 67  gisters starting
131f0 20 77 69 74 68 20 50 31 2e 0a 2a 2a 0a 2a 2a 20   with P1..**.** 
13200 50 34 20 69 73 20 61 20 73 74 72 69 6e 67 20 74  P4 is a string t
13210 68 61 74 20 69 73 20 50 32 20 63 68 61 72 61 63  hat is P2 charac
13220 74 65 72 73 20 6c 6f 6e 67 2e 20 54 68 65 20 6e  ters long. The n
13230 74 68 20 63 68 61 72 61 63 74 65 72 20 6f 66 20  th character of 
13240 74 68 65 0a 2a 2a 20 73 74 72 69 6e 67 20 69 6e  the.** string in
13250 64 69 63 61 74 65 73 20 74 68 65 20 63 6f 6c 75  dicates the colu
13260 6d 6e 20 61 66 66 69 6e 69 74 79 20 74 68 61 74  mn affinity that
13270 20 73 68 6f 75 6c 64 20 62 65 20 75 73 65 64 20   should be used 
13280 66 6f 72 20 74 68 65 20 6e 74 68 0a 2a 2a 20 6d  for the nth.** m
13290 65 6d 6f 72 79 20 63 65 6c 6c 20 69 6e 20 74 68  emory cell in th
132a0 65 20 72 61 6e 67 65 2e 0a 2a 2f 0a 63 61 73 65  e range..*/.case
132b0 20 4f 50 5f 41 66 66 69 6e 69 74 79 3a 20 7b 0a   OP_Affinity: {.
132c0 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41    const char *zA
132d0 66 66 69 6e 69 74 79 3b 20 20 20 2f 2a 20 54 68  ffinity;   /* Th
132e0 65 20 61 66 66 69 6e 69 74 79 20 74 6f 20 62 65  e affinity to be
132f0 20 61 70 70 6c 69 65 64 20 2a 2f 0a 20 20 63 68   applied */.  ch
13300 61 72 20 63 41 66 66 3b 20 20 20 20 20 20 20 20  ar cAff;        
13310 20 20 20 20 20 20 20 2f 2a 20 41 20 73 69 6e 67         /* A sing
13320 6c 65 20 63 68 61 72 61 63 74 65 72 20 6f 66 20  le character of 
13330 61 66 66 69 6e 69 74 79 20 2a 2f 0a 0a 20 20 7a  affinity */..  z
13340 41 66 66 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e  Affinity = pOp->
13350 70 34 2e 7a 3b 0a 20 20 61 73 73 65 72 74 28 20  p4.z;.  assert( 
13360 7a 41 66 66 69 6e 69 74 79 21 3d 30 20 29 3b 0a  zAffinity!=0 );.
13370 20 20 61 73 73 65 72 74 28 20 7a 41 66 66 69 6e    assert( zAffin
13380 69 74 79 5b 70 4f 70 2d 3e 70 32 5d 3d 3d 30 20  ity[pOp->p2]==0 
13390 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  );.  pIn1 = &aMe
133a0 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 77 68  m[pOp->p1];.  wh
133b0 69 6c 65 28 20 28 63 41 66 66 20 3d 20 2a 28 7a  ile( (cAff = *(z
133c0 41 66 66 69 6e 69 74 79 2b 2b 29 29 21 3d 30 20  Affinity++))!=0 
133d0 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ){.    assert( p
133e0 49 6e 31 20 3c 3d 20 26 70 2d 3e 61 4d 65 6d 5b  In1 <= &p->aMem[
133f0 70 2d 3e 6e 4d 65 6d 5d 20 29 3b 0a 20 20 20 20  p->nMem] );.    
13400 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
13410 69 64 28 70 49 6e 31 29 20 29 3b 0a 20 20 20 20  id(pIn1) );.    
13420 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 31 29  ExpandBlob(pIn1)
13430 3b 0a 20 20 20 20 61 70 70 6c 79 41 66 66 69 6e  ;.    applyAffin
13440 69 74 79 28 70 49 6e 31 2c 20 63 41 66 66 2c 20  ity(pIn1, cAff, 
13450 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 70  encoding);.    p
13460 49 6e 31 2b 2b 3b 0a 20 20 7d 0a 20 20 62 72 65  In1++;.  }.  bre
13470 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
13480 3a 20 4d 61 6b 65 52 65 63 6f 72 64 20 50 31 20  : MakeRecord P1 
13490 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  P2 P3 P4 *.**.**
134a0 20 43 6f 6e 76 65 72 74 20 50 32 20 72 65 67 69   Convert P2 regi
134b0 73 74 65 72 73 20 62 65 67 69 6e 6e 69 6e 67 20  sters beginning 
134c0 77 69 74 68 20 50 31 20 69 6e 74 6f 20 74 68 65  with P1 into the
134d0 20 5b 72 65 63 6f 72 64 20 66 6f 72 6d 61 74 5d   [record format]
134e0 0a 2a 2a 20 75 73 65 20 61 73 20 61 20 64 61 74  .** use as a dat
134f0 61 20 72 65 63 6f 72 64 20 69 6e 20 61 20 64 61  a record in a da
13500 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20  tabase table or 
13510 61 73 20 61 20 6b 65 79 0a 2a 2a 20 69 6e 20 61  as a key.** in a
13520 6e 20 69 6e 64 65 78 2e 20 20 54 68 65 20 4f 50  n index.  The OP
13530 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 20 63  _Column opcode c
13540 61 6e 20 64 65 63 6f 64 65 20 74 68 65 20 72 65  an decode the re
13550 63 6f 72 64 20 6c 61 74 65 72 2e 0a 2a 2a 0a 2a  cord later..**.*
13560 2a 20 50 34 20 6d 61 79 20 62 65 20 61 20 73 74  * P4 may be a st
13570 72 69 6e 67 20 74 68 61 74 20 69 73 20 50 32 20  ring that is P2 
13580 63 68 61 72 61 63 74 65 72 73 20 6c 6f 6e 67 2e  characters long.
13590 20 20 54 68 65 20 6e 74 68 20 63 68 61 72 61 63    The nth charac
135a0 74 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20 73 74  ter of the.** st
135b0 72 69 6e 67 20 69 6e 64 69 63 61 74 65 73 20 74  ring indicates t
135c0 68 65 20 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69  he column affini
135d0 74 79 20 74 68 61 74 20 73 68 6f 75 6c 64 20 62  ty that should b
135e0 65 20 75 73 65 64 20 66 6f 72 20 74 68 65 20 6e  e used for the n
135f0 74 68 0a 2a 2a 20 66 69 65 6c 64 20 6f 66 20 74  th.** field of t
13600 68 65 20 69 6e 64 65 78 20 6b 65 79 2e 0a 2a 2a  he index key..**
13610 0a 2a 2a 20 54 68 65 20 6d 61 70 70 69 6e 67 20  .** The mapping 
13620 66 72 6f 6d 20 63 68 61 72 61 63 74 65 72 20 74  from character t
13630 6f 20 61 66 66 69 6e 69 74 79 20 69 73 20 67 69  o affinity is gi
13640 76 65 6e 20 62 79 20 74 68 65 20 53 51 4c 49 54  ven by the SQLIT
13650 45 5f 41 46 46 5f 0a 2a 2a 20 6d 61 63 72 6f 73  E_AFF_.** macros
13660 20 64 65 66 69 6e 65 64 20 69 6e 20 73 71 6c 69   defined in sqli
13670 74 65 49 6e 74 2e 68 2e 0a 2a 2a 0a 2a 2a 20 49  teInt.h..**.** I
13680 66 20 50 34 20 69 73 20 4e 55 4c 4c 20 74 68 65  f P4 is NULL the
13690 6e 20 61 6c 6c 20 69 6e 64 65 78 20 66 69 65 6c  n all index fiel
136a0 64 73 20 68 61 76 65 20 74 68 65 20 61 66 66 69  ds have the affi
136b0 6e 69 74 79 20 4e 4f 4e 45 2e 0a 2a 2f 0a 63 61  nity NONE..*/.ca
136c0 73 65 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64  se OP_MakeRecord
136d0 3a 20 7b 0a 20 20 75 38 20 2a 7a 4e 65 77 52 65  : {.  u8 *zNewRe
136e0 63 6f 72 64 3b 20 20 20 20 20 20 20 20 2f 2a 20  cord;        /* 
136f0 41 20 62 75 66 66 65 72 20 74 6f 20 68 6f 6c 64  A buffer to hold
13700 20 74 68 65 20 64 61 74 61 20 66 6f 72 20 74 68   the data for th
13710 65 20 6e 65 77 20 72 65 63 6f 72 64 20 2a 2f 0a  e new record */.
13720 20 20 4d 65 6d 20 2a 70 52 65 63 3b 20 20 20 20    Mem *pRec;    
13730 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
13740 6e 65 77 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20  new record */.  
13750 75 36 34 20 6e 44 61 74 61 3b 20 20 20 20 20 20  u64 nData;      
13760 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
13770 20 6f 66 20 62 79 74 65 73 20 6f 66 20 64 61 74   of bytes of dat
13780 61 20 73 70 61 63 65 20 2a 2f 0a 20 20 69 6e 74  a space */.  int
13790 20 6e 48 64 72 3b 20 20 20 20 20 20 20 20 20 20   nHdr;          
137a0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
137b0 20 62 79 74 65 73 20 6f 66 20 68 65 61 64 65 72   bytes of header
137c0 20 73 70 61 63 65 20 2a 2f 0a 20 20 69 36 34 20   space */.  i64 
137d0 6e 42 79 74 65 3b 20 20 20 20 20 20 20 20 20 20  nByte;          
137e0 20 20 20 2f 2a 20 44 61 74 61 20 73 70 61 63 65     /* Data space
137f0 20 72 65 71 75 69 72 65 64 20 66 6f 72 20 74 68   required for th
13800 69 73 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69  is record */.  i
13810 6e 74 20 6e 5a 65 72 6f 3b 20 20 20 20 20 20 20  nt nZero;       
13820 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
13830 6f 66 20 7a 65 72 6f 20 62 79 74 65 73 20 61 74  of zero bytes at
13840 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20   the end of the 
13850 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20  record */.  int 
13860 6e 56 61 72 69 6e 74 3b 20 20 20 20 20 20 20 20  nVarint;        
13870 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
13880 62 79 74 65 73 20 69 6e 20 61 20 76 61 72 69 6e  bytes in a varin
13890 74 20 2a 2f 0a 20 20 75 33 32 20 73 65 72 69 61  t */.  u32 seria
138a0 6c 5f 74 79 70 65 3b 20 20 20 20 20 20 20 2f 2a  l_type;       /*
138b0 20 54 79 70 65 20 66 69 65 6c 64 20 2a 2f 0a 20   Type field */. 
138c0 20 4d 65 6d 20 2a 70 44 61 74 61 30 3b 20 20 20   Mem *pData0;   
138d0 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74          /* First
138e0 20 66 69 65 6c 64 20 74 6f 20 62 65 20 63 6f 6d   field to be com
138f0 62 69 6e 65 64 20 69 6e 74 6f 20 74 68 65 20 72  bined into the r
13900 65 63 6f 72 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a  ecord */.  Mem *
13910 70 4c 61 73 74 3b 20 20 20 20 20 20 20 20 20 20  pLast;          
13920 20 20 2f 2a 20 4c 61 73 74 20 66 69 65 6c 64 20    /* Last field 
13930 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f  of the record */
13940 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b 20 20  .  int nField;  
13950 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
13960 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20 69 6e  ber of fields in
13970 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20   the record */. 
13980 20 63 68 61 72 20 2a 7a 41 66 66 69 6e 69 74 79   char *zAffinity
13990 3b 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61  ;       /* The a
139a0 66 66 69 6e 69 74 79 20 73 74 72 69 6e 67 20 66  ffinity string f
139b0 6f 72 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f  or the record */
139c0 0a 20 20 69 6e 74 20 66 69 6c 65 5f 66 6f 72 6d  .  int file_form
139d0 61 74 3b 20 20 20 20 20 20 20 2f 2a 20 46 69 6c  at;       /* Fil
139e0 65 20 66 6f 72 6d 61 74 20 74 6f 20 75 73 65 20  e format to use 
139f0 66 6f 72 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a  for encoding */.
13a00 20 20 69 6e 74 20 69 3b 20 20 20 20 20 20 20 20    int i;        
13a10 20 20 20 20 20 20 20 20 20 2f 2a 20 53 70 61 63           /* Spac
13a20 65 20 75 73 65 64 20 69 6e 20 7a 4e 65 77 52 65  e used in zNewRe
13a30 63 6f 72 64 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20  cord[] */.  int 
13a40 6c 65 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  len;            
13a50 20 20 20 2f 2a 20 4c 65 6e 67 74 68 20 6f 66 20     /* Length of 
13a60 61 20 66 69 65 6c 64 20 2a 2f 0a 0a 20 20 2f 2a  a field */..  /*
13a70 20 41 73 73 75 6d 69 6e 67 20 74 68 65 20 72 65   Assuming the re
13a80 63 6f 72 64 20 63 6f 6e 74 61 69 6e 73 20 4e 20  cord contains N 
13a90 66 69 65 6c 64 73 2c 20 74 68 65 20 72 65 63 6f  fields, the reco
13aa0 72 64 20 66 6f 72 6d 61 74 20 6c 6f 6f 6b 73 0a  rd format looks.
13ab0 20 20 2a 2a 20 6c 69 6b 65 20 74 68 69 73 3a 0a    ** like this:.
13ac0 20 20 2a 2a 0a 20 20 2a 2a 20 2d 2d 2d 2d 2d 2d    **.  ** ------
13ad0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13ae0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 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 0a 20 20 2a 2a 20 7c 20 68 64 72 2d 73 69  --.  ** | hdr-si
13b20 7a 65 20 7c 20 74 79 70 65 20 30 20 7c 20 74 79  ze | type 0 | ty
13b30 70 65 20 31 20 7c 20 2e 2e 2e 20 7c 20 74 79 70  pe 1 | ... | typ
13b40 65 20 4e 2d 31 20 7c 20 64 61 74 61 30 20 7c 20  e N-1 | data0 | 
13b50 2e 2e 2e 20 7c 20 64 61 74 61 20 4e 2d 31 20 7c  ... | data N-1 |
13b60 20 0a 20 20 2a 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d   .  ** ---------
13b70 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13b80 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13b90 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13ba0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a  ---------------.
13bb0 20 20 2a 2a 0a 20 20 2a 2a 20 44 61 74 61 28 30    **.  ** Data(0
13bc0 29 20 69 73 20 74 61 6b 65 6e 20 66 72 6f 6d 20  ) is taken from 
13bd0 72 65 67 69 73 74 65 72 20 50 31 2e 20 20 44 61  register P1.  Da
13be0 74 61 28 31 29 20 63 6f 6d 65 73 20 66 72 6f 6d  ta(1) comes from
13bf0 20 72 65 67 69 73 74 65 72 20 50 31 2b 31 0a 20   register P1+1. 
13c00 20 2a 2a 20 61 6e 64 20 73 6f 20 66 72 6f 74 68   ** and so froth
13c10 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 45 61 63 68  ..  **.  ** Each
13c20 20 74 79 70 65 20 66 69 65 6c 64 20 69 73 20 61   type field is a
13c30 20 76 61 72 69 6e 74 20 72 65 70 72 65 73 65 6e   varint represen
13c40 74 69 6e 67 20 74 68 65 20 73 65 72 69 61 6c 20  ting the serial 
13c50 74 79 70 65 20 6f 66 20 74 68 65 20 0a 20 20 2a  type of the .  *
13c60 2a 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  * corresponding 
13c70 64 61 74 61 20 65 6c 65 6d 65 6e 74 20 28 73 65  data element (se
13c80 65 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72  e sqlite3VdbeSer
13c90 69 61 6c 54 79 70 65 28 29 29 2e 20 54 68 65 0a  ialType()). The.
13ca0 20 20 2a 2a 20 68 64 72 2d 73 69 7a 65 20 66 69    ** hdr-size fi
13cb0 65 6c 64 20 69 73 20 61 6c 73 6f 20 61 20 76 61  eld is also a va
13cc0 72 69 6e 74 20 77 68 69 63 68 20 69 73 20 74 68  rint which is th
13cd0 65 20 6f 66 66 73 65 74 20 66 72 6f 6d 20 74 68  e offset from th
13ce0 65 20 62 65 67 69 6e 6e 69 6e 67 0a 20 20 2a 2a  e beginning.  **
13cf0 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20 74   of the record t
13d00 6f 20 64 61 74 61 30 2e 0a 20 20 2a 2f 0a 20 20  o data0..  */.  
13d10 6e 44 61 74 61 20 3d 20 30 3b 20 20 20 20 20 20  nData = 0;      
13d20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
13d30 62 79 74 65 73 20 6f 66 20 64 61 74 61 20 73 70  bytes of data sp
13d40 61 63 65 20 2a 2f 0a 20 20 6e 48 64 72 20 3d 20  ace */.  nHdr = 
13d50 30 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  0;          /* N
13d60 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f  umber of bytes o
13d70 66 20 68 65 61 64 65 72 20 73 70 61 63 65 20 2a  f header space *
13d80 2f 0a 20 20 6e 5a 65 72 6f 20 3d 20 30 3b 20 20  /.  nZero = 0;  
13d90 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
13da0 20 6f 66 20 7a 65 72 6f 20 62 79 74 65 73 20 61   of zero bytes a
13db0 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65  t the end of the
13dc0 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 6e 46 69   record */.  nFi
13dd0 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20  eld = pOp->p1;. 
13de0 20 7a 41 66 66 69 6e 69 74 79 20 3d 20 70 4f 70   zAffinity = pOp
13df0 2d 3e 70 34 2e 7a 3b 0a 20 20 61 73 73 65 72 74  ->p4.z;.  assert
13e00 28 20 6e 46 69 65 6c 64 3e 30 20 26 26 20 70 4f  ( nField>0 && pO
13e10 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p2>0 && pOp->
13e20 70 32 2b 6e 46 69 65 6c 64 3c 3d 70 2d 3e 6e 4d  p2+nField<=p->nM
13e30 65 6d 2b 31 20 29 3b 0a 20 20 70 44 61 74 61 30  em+1 );.  pData0
13e40 20 3d 20 26 61 4d 65 6d 5b 6e 46 69 65 6c 64 5d   = &aMem[nField]
13e50 3b 0a 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70  ;.  nField = pOp
13e60 2d 3e 70 32 3b 0a 20 20 70 4c 61 73 74 20 3d 20  ->p2;.  pLast = 
13e70 26 70 44 61 74 61 30 5b 6e 46 69 65 6c 64 2d 31  &pData0[nField-1
13e80 5d 3b 0a 20 20 66 69 6c 65 5f 66 6f 72 6d 61 74  ];.  file_format
13e90 20 3d 20 70 2d 3e 6d 69 6e 57 72 69 74 65 46 69   = p->minWriteFi
13ea0 6c 65 46 6f 72 6d 61 74 3b 0a 0a 20 20 2f 2a 20  leFormat;..  /* 
13eb0 49 64 65 6e 74 69 66 79 20 74 68 65 20 6f 75 74  Identify the out
13ec0 70 75 74 20 72 65 67 69 73 74 65 72 20 2a 2f 0a  put register */.
13ed0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
13ee0 33 3c 70 4f 70 2d 3e 70 31 20 7c 7c 20 70 4f 70  3<pOp->p1 || pOp
13ef0 2d 3e 70 33 3e 3d 70 4f 70 2d 3e 70 31 2b 70 4f  ->p3>=pOp->p1+pO
13f00 70 2d 3e 70 32 20 29 3b 0a 20 20 70 4f 75 74 20  p->p2 );.  pOut 
13f10 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
13f20 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68  ;.  memAboutToCh
13f30 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 0a  ange(p, pOut);..
13f40 20 20 2f 2a 20 4c 6f 6f 70 20 74 68 72 6f 75 67    /* Loop throug
13f50 68 20 74 68 65 20 65 6c 65 6d 65 6e 74 73 20 74  h the elements t
13f60 68 61 74 20 77 69 6c 6c 20 6d 61 6b 65 20 75 70  hat will make up
13f70 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20 66   the record to f
13f80 69 67 75 72 65 0a 20 20 2a 2a 20 6f 75 74 20 68  igure.  ** out h
13f90 6f 77 20 6d 75 63 68 20 73 70 61 63 65 20 69 73  ow much space is
13fa0 20 72 65 71 75 69 72 65 64 20 66 6f 72 20 74 68   required for th
13fb0 65 20 6e 65 77 20 72 65 63 6f 72 64 2e 0a 20 20  e new record..  
13fc0 2a 2f 0a 20 20 66 6f 72 28 70 52 65 63 3d 70 44  */.  for(pRec=pD
13fd0 61 74 61 30 3b 20 70 52 65 63 3c 3d 70 4c 61 73  ata0; pRec<=pLas
13fe0 74 3b 20 70 52 65 63 2b 2b 29 7b 0a 20 20 20 20  t; pRec++){.    
13ff0 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
14000 69 64 28 70 52 65 63 29 20 29 3b 0a 20 20 20 20  id(pRec) );.    
14010 69 66 28 20 7a 41 66 66 69 6e 69 74 79 20 29 7b  if( zAffinity ){
14020 0a 20 20 20 20 20 20 61 70 70 6c 79 41 66 66 69  .      applyAffi
14030 6e 69 74 79 28 70 52 65 63 2c 20 7a 41 66 66 69  nity(pRec, zAffi
14040 6e 69 74 79 5b 70 52 65 63 2d 70 44 61 74 61 30  nity[pRec-pData0
14050 5d 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20  ], encoding);.  
14060 20 20 7d 0a 20 20 20 20 69 66 28 20 70 52 65 63    }.    if( pRec
14070 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 5a 65 72 6f  ->flags&MEM_Zero
14080 20 26 26 20 70 52 65 63 2d 3e 6e 3e 30 20 29 7b   && pRec->n>0 ){
14090 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
140a0 62 65 4d 65 6d 45 78 70 61 6e 64 42 6c 6f 62 28  beMemExpandBlob(
140b0 70 52 65 63 29 3b 0a 20 20 20 20 7d 0a 20 20 20  pRec);.    }.   
140c0 20 73 65 72 69 61 6c 5f 74 79 70 65 20 3d 20 73   serial_type = s
140d0 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c  qlite3VdbeSerial
140e0 54 79 70 65 28 70 52 65 63 2c 20 66 69 6c 65 5f  Type(pRec, file_
140f0 66 6f 72 6d 61 74 29 3b 0a 20 20 20 20 6c 65 6e  format);.    len
14100 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 65   = sqlite3VdbeSe
14110 72 69 61 6c 54 79 70 65 4c 65 6e 28 73 65 72 69  rialTypeLen(seri
14120 61 6c 5f 74 79 70 65 29 3b 0a 20 20 20 20 6e 44  al_type);.    nD
14130 61 74 61 20 2b 3d 20 6c 65 6e 3b 0a 20 20 20 20  ata += len;.    
14140 6e 48 64 72 20 2b 3d 20 73 71 6c 69 74 65 33 56  nHdr += sqlite3V
14150 61 72 69 6e 74 4c 65 6e 28 73 65 72 69 61 6c 5f  arintLen(serial_
14160 74 79 70 65 29 3b 0a 20 20 20 20 69 66 28 20 70  type);.    if( p
14170 52 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  Rec->flags & MEM
14180 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20 20 20 2f  _Zero ){.      /
14190 2a 20 4f 6e 6c 79 20 70 75 72 65 20 7a 65 72 6f  * Only pure zero
141a0 2d 66 69 6c 6c 65 64 20 42 4c 4f 42 73 20 63 61  -filled BLOBs ca
141b0 6e 20 62 65 20 69 6e 70 75 74 20 74 6f 20 74 68  n be input to th
141c0 69 73 20 4f 70 63 6f 64 65 2e 0a 20 20 20 20 20  is Opcode..     
141d0 20 2a 2a 20 57 65 20 64 6f 20 6e 6f 74 20 61 6c   ** We do not al
141e0 6c 6f 77 20 62 6c 6f 62 73 20 77 69 74 68 20 61  low blobs with a
141f0 20 70 72 65 66 69 78 20 61 6e 64 20 61 20 7a 65   prefix and a ze
14200 72 6f 2d 66 69 6c 6c 65 64 20 74 61 69 6c 2e 20  ro-filled tail. 
14210 2a 2f 0a 20 20 20 20 20 20 6e 5a 65 72 6f 20 2b  */.      nZero +
14220 3d 20 70 52 65 63 2d 3e 75 2e 6e 5a 65 72 6f 3b  = pRec->u.nZero;
14230 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 6c  .    }else if( l
14240 65 6e 20 29 7b 0a 20 20 20 20 20 20 6e 5a 65 72  en ){.      nZer
14250 6f 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 7d  o = 0;.    }.  }
14260 0a 0a 20 20 2f 2a 20 41 64 64 20 74 68 65 20 69  ..  /* Add the i
14270 6e 69 74 69 61 6c 20 68 65 61 64 65 72 20 76 61  nitial header va
14280 72 69 6e 74 20 61 6e 64 20 74 6f 74 61 6c 20 74  rint and total t
14290 68 65 20 73 69 7a 65 20 2a 2f 0a 20 20 6e 48 64  he size */.  nHd
142a0 72 20 2b 3d 20 6e 56 61 72 69 6e 74 20 3d 20 73  r += nVarint = s
142b0 71 6c 69 74 65 33 56 61 72 69 6e 74 4c 65 6e 28  qlite3VarintLen(
142c0 6e 48 64 72 29 3b 0a 20 20 69 66 28 20 6e 56 61  nHdr);.  if( nVa
142d0 72 69 6e 74 3c 73 71 6c 69 74 65 33 56 61 72 69  rint<sqlite3Vari
142e0 6e 74 4c 65 6e 28 6e 48 64 72 29 20 29 7b 0a 20  ntLen(nHdr) ){. 
142f0 20 20 20 6e 48 64 72 2b 2b 3b 0a 20 20 7d 0a 20     nHdr++;.  }. 
14300 20 6e 42 79 74 65 20 3d 20 6e 48 64 72 2b 6e 44   nByte = nHdr+nD
14310 61 74 61 2d 6e 5a 65 72 6f 3b 0a 20 20 69 66 28  ata-nZero;.  if(
14320 20 6e 42 79 74 65 3e 64 62 2d 3e 61 4c 69 6d 69   nByte>db->aLimi
14330 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c  t[SQLITE_LIMIT_L
14340 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f  ENGTH] ){.    go
14350 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a  to too_big;.  }.
14360 0a 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20  .  /* Make sure 
14370 74 68 65 20 6f 75 74 70 75 74 20 72 65 67 69 73  the output regis
14380 74 65 72 20 68 61 73 20 61 20 62 75 66 66 65 72  ter has a buffer
14390 20 6c 61 72 67 65 20 65 6e 6f 75 67 68 20 74 6f   large enough to
143a0 20 73 74 6f 72 65 20 0a 20 20 2a 2a 20 74 68 65   store .  ** the
143b0 20 6e 65 77 20 72 65 63 6f 72 64 2e 20 54 68 65   new record. The
143c0 20 6f 75 74 70 75 74 20 72 65 67 69 73 74 65 72   output register
143d0 20 28 70 4f 70 2d 3e 70 33 29 20 69 73 20 6e 6f   (pOp->p3) is no
143e0 74 20 61 6c 6c 6f 77 65 64 20 74 6f 0a 20 20 2a  t allowed to.  *
143f0 2a 20 62 65 20 6f 6e 65 20 6f 66 20 74 68 65 20  * be one of the 
14400 69 6e 70 75 74 20 72 65 67 69 73 74 65 72 73 20  input registers 
14410 28 62 65 63 61 75 73 65 20 74 68 65 20 66 6f 6c  (because the fol
14420 6c 6f 77 69 6e 67 20 63 61 6c 6c 20 74 6f 0a 20  lowing call to. 
14430 20 2a 2a 20 73 71 6c 69 74 65 33 56 64 62 65 4d   ** sqlite3VdbeM
14440 65 6d 47 72 6f 77 28 29 20 63 6f 75 6c 64 20 63  emGrow() could c
14450 6c 6f 62 62 65 72 20 74 68 65 20 76 61 6c 75 65  lobber the value
14460 20 62 65 66 6f 72 65 20 69 74 20 69 73 20 75 73   before it is us
14470 65 64 29 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20  ed)..  */.  if( 
14480 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 47 72  sqlite3VdbeMemGr
14490 6f 77 28 70 4f 75 74 2c 20 28 69 6e 74 29 6e 42  ow(pOut, (int)nB
144a0 79 74 65 2c 20 30 29 20 29 7b 0a 20 20 20 20 67  yte, 0) ){.    g
144b0 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a  oto no_mem;.  }.
144c0 20 20 7a 4e 65 77 52 65 63 6f 72 64 20 3d 20 28    zNewRecord = (
144d0 75 38 20 2a 29 70 4f 75 74 2d 3e 7a 3b 0a 0a 20  u8 *)pOut->z;.. 
144e0 20 2f 2a 20 57 72 69 74 65 20 74 68 65 20 72 65   /* Write the re
144f0 63 6f 72 64 20 2a 2f 0a 20 20 69 20 3d 20 70 75  cord */.  i = pu
14500 74 56 61 72 69 6e 74 33 32 28 7a 4e 65 77 52 65  tVarint32(zNewRe
14510 63 6f 72 64 2c 20 6e 48 64 72 29 3b 0a 20 20 66  cord, nHdr);.  f
14520 6f 72 28 70 52 65 63 3d 70 44 61 74 61 30 3b 20  or(pRec=pData0; 
14530 70 52 65 63 3c 3d 70 4c 61 73 74 3b 20 70 52 65  pRec<=pLast; pRe
14540 63 2b 2b 29 7b 0a 20 20 20 20 73 65 72 69 61 6c  c++){.    serial
14550 5f 74 79 70 65 20 3d 20 73 71 6c 69 74 65 33 56  _type = sqlite3V
14560 64 62 65 53 65 72 69 61 6c 54 79 70 65 28 70 52  dbeSerialType(pR
14570 65 63 2c 20 66 69 6c 65 5f 66 6f 72 6d 61 74 29  ec, file_format)
14580 3b 0a 20 20 20 20 69 20 2b 3d 20 70 75 74 56 61  ;.    i += putVa
14590 72 69 6e 74 33 32 28 26 7a 4e 65 77 52 65 63 6f  rint32(&zNewReco
145a0 72 64 5b 69 5d 2c 20 73 65 72 69 61 6c 5f 74 79  rd[i], serial_ty
145b0 70 65 29 3b 20 20 20 20 20 20 2f 2a 20 73 65 72  pe);      /* ser
145c0 69 61 6c 20 74 79 70 65 20 2a 2f 0a 20 20 7d 0a  ial type */.  }.
145d0 20 20 66 6f 72 28 70 52 65 63 3d 70 44 61 74 61    for(pRec=pData
145e0 30 3b 20 70 52 65 63 3c 3d 70 4c 61 73 74 3b 20  0; pRec<=pLast; 
145f0 70 52 65 63 2b 2b 29 7b 20 20 2f 2a 20 73 65 72  pRec++){  /* ser
14600 69 61 6c 20 64 61 74 61 20 2a 2f 0a 20 20 20 20  ial data */.    
14610 69 20 2b 3d 20 73 71 6c 69 74 65 33 56 64 62 65  i += sqlite3Vdbe
14620 53 65 72 69 61 6c 50 75 74 28 26 7a 4e 65 77 52  SerialPut(&zNewR
14630 65 63 6f 72 64 5b 69 5d 2c 20 28 69 6e 74 29 28  ecord[i], (int)(
14640 6e 42 79 74 65 2d 69 29 2c 20 70 52 65 63 2c 66  nByte-i), pRec,f
14650 69 6c 65 5f 66 6f 72 6d 61 74 29 3b 0a 20 20 7d  ile_format);.  }
14660 0a 20 20 61 73 73 65 72 74 28 20 69 3d 3d 6e 42  .  assert( i==nB
14670 79 74 65 20 29 3b 0a 0a 20 20 61 73 73 65 72 74  yte );..  assert
14680 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70  ( pOp->p3>0 && p
14690 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20  Op->p3<=p->nMem 
146a0 29 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 28  );.  pOut->n = (
146b0 69 6e 74 29 6e 42 79 74 65 3b 0a 20 20 70 4f 75  int)nByte;.  pOu
146c0 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 42  t->flags = MEM_B
146d0 6c 6f 62 20 7c 20 4d 45 4d 5f 44 79 6e 3b 0a 20  lob | MEM_Dyn;. 
146e0 20 70 4f 75 74 2d 3e 78 44 65 6c 20 3d 20 30 3b   pOut->xDel = 0;
146f0 0a 20 20 69 66 28 20 6e 5a 65 72 6f 20 29 7b 0a  .  if( nZero ){.
14700 20 20 20 20 70 4f 75 74 2d 3e 75 2e 6e 5a 65 72      pOut->u.nZer
14710 6f 20 3d 20 6e 5a 65 72 6f 3b 0a 20 20 20 20 70  o = nZero;.    p
14720 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45  Out->flags |= ME
14730 4d 5f 5a 65 72 6f 3b 0a 20 20 7d 0a 20 20 70 4f  M_Zero;.  }.  pO
14740 75 74 2d 3e 65 6e 63 20 3d 20 53 51 4c 49 54 45  ut->enc = SQLITE
14750 5f 55 54 46 38 3b 20 20 2f 2a 20 49 6e 20 63 61  _UTF8;  /* In ca
14760 73 65 20 74 68 65 20 62 6c 6f 62 20 69 73 20 65  se the blob is e
14770 76 65 72 20 63 6f 6e 76 65 72 74 65 64 20 74 6f  ver converted to
14780 20 74 65 78 74 20 2a 2f 0a 20 20 52 45 47 49 53   text */.  REGIS
14790 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
147a0 33 2c 20 70 4f 75 74 29 3b 0a 20 20 55 50 44 41  3, pOut);.  UPDA
147b0 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
147c0 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  pOut);.  break;.
147d0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f  }../* Opcode: Co
147e0 75 6e 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  unt P1 P2 * * *.
147f0 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65 20  **.** Store the 
14800 6e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65  number of entrie
14810 73 20 28 61 6e 20 69 6e 74 65 67 65 72 20 76 61  s (an integer va
14820 6c 75 65 29 20 69 6e 20 74 68 65 20 74 61 62 6c  lue) in the tabl
14830 65 20 6f 72 20 69 6e 64 65 78 20 0a 2a 2a 20 6f  e or index .** o
14840 70 65 6e 65 64 20 62 79 20 63 75 72 73 6f 72 20  pened by cursor 
14850 50 31 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  P1 in register P
14860 32 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  2.*/.#ifndef SQL
14870 49 54 45 5f 4f 4d 49 54 5f 42 54 52 45 45 43 4f  ITE_OMIT_BTREECO
14880 55 4e 54 0a 63 61 73 65 20 4f 50 5f 43 6f 75 6e  UNT.case OP_Coun
14890 74 3a 20 7b 20 20 20 20 20 20 20 20 20 2f 2a 20  t: {         /* 
148a0 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20  out2-prerelease 
148b0 2a 2f 0a 20 20 69 36 34 20 6e 45 6e 74 72 79 3b  */.  i64 nEntry;
148c0 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72  .  BtCursor *pCr
148d0 73 72 3b 0a 0a 20 20 70 43 72 73 72 20 3d 20 70  sr;..  pCrsr = p
148e0 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
148f0 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 69 66 28  ->pCursor;.  if(
14900 20 41 4c 57 41 59 53 28 70 43 72 73 72 29 20 29   ALWAYS(pCrsr) )
14910 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  {.    rc = sqlit
14920 65 33 42 74 72 65 65 43 6f 75 6e 74 28 70 43 72  e3BtreeCount(pCr
14930 73 72 2c 20 26 6e 45 6e 74 72 79 29 3b 0a 20 20  sr, &nEntry);.  
14940 7d 65 6c 73 65 7b 0a 20 20 20 20 6e 45 6e 74 72  }else{.    nEntr
14950 79 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 70 4f 75  y = 0;.  }.  pOu
14960 74 2d 3e 75 2e 69 20 3d 20 6e 45 6e 74 72 79 3b  t->u.i = nEntry;
14970 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
14980 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  if../* Opcode: S
14990 61 76 65 70 6f 69 6e 74 20 50 31 20 2a 20 2a 20  avepoint P1 * * 
149a0 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 2c  P4 *.**.** Open,
149b0 20 72 65 6c 65 61 73 65 20 6f 72 20 72 6f 6c 6c   release or roll
149c0 62 61 63 6b 20 74 68 65 20 73 61 76 65 70 6f 69  back the savepoi
149d0 6e 74 20 6e 61 6d 65 64 20 62 79 20 70 61 72 61  nt named by para
149e0 6d 65 74 65 72 20 50 34 2c 20 64 65 70 65 6e 64  meter P4, depend
149f0 69 6e 67 0a 2a 2a 20 6f 6e 20 74 68 65 20 76 61  ing.** on the va
14a00 6c 75 65 20 6f 66 20 50 31 2e 20 54 6f 20 6f 70  lue of P1. To op
14a10 65 6e 20 61 20 6e 65 77 20 73 61 76 65 70 6f 69  en a new savepoi
14a20 6e 74 2c 20 50 31 3d 3d 30 2e 20 54 6f 20 72 65  nt, P1==0. To re
14a30 6c 65 61 73 65 20 28 63 6f 6d 6d 69 74 29 20 61  lease (commit) a
14a40 6e 0a 2a 2a 20 65 78 69 73 74 69 6e 67 20 73 61  n.** existing sa
14a50 76 65 70 6f 69 6e 74 2c 20 50 31 3d 3d 31 2c 20  vepoint, P1==1, 
14a60 6f 72 20 74 6f 20 72 6f 6c 6c 62 61 63 6b 20 61  or to rollback a
14a70 6e 20 65 78 69 73 74 69 6e 67 20 73 61 76 65 70  n existing savep
14a80 6f 69 6e 74 20 50 31 3d 3d 32 2e 0a 2a 2f 0a 63  oint P1==2..*/.c
14a90 61 73 65 20 4f 50 5f 53 61 76 65 70 6f 69 6e 74  ase OP_Savepoint
14aa0 3a 20 7b 0a 20 20 69 6e 74 20 70 31 3b 20 20 20  : {.  int p1;   
14ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14ac0 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 6f        /* Value o
14ad0 66 20 50 31 20 6f 70 65 72 61 6e 64 20 2a 2f 0a  f P1 operand */.
14ae0 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
14af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14b00 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 73 61 76    /* Name of sav
14b10 65 70 6f 69 6e 74 20 2a 2f 0a 20 20 69 6e 74 20  epoint */.  int 
14b20 6e 4e 61 6d 65 3b 0a 20 20 53 61 76 65 70 6f 69  nName;.  Savepoi
14b30 6e 74 20 2a 70 4e 65 77 3b 0a 20 20 53 61 76 65  nt *pNew;.  Save
14b40 70 6f 69 6e 74 20 2a 70 53 61 76 65 70 6f 69 6e  point *pSavepoin
14b50 74 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a  t;.  Savepoint *
14b60 70 54 6d 70 3b 0a 20 20 69 6e 74 20 69 53 61 76  pTmp;.  int iSav
14b70 65 70 6f 69 6e 74 3b 0a 20 20 69 6e 74 20 69 69  epoint;.  int ii
14b80 3b 0a 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70  ;..  p1 = pOp->p
14b90 31 3b 0a 20 20 7a 4e 61 6d 65 20 3d 20 70 4f 70  1;.  zName = pOp
14ba0 2d 3e 70 34 2e 7a 3b 0a 0a 20 20 2f 2a 20 41 73  ->p4.z;..  /* As
14bb0 73 65 72 74 20 74 68 61 74 20 74 68 65 20 70 31  sert that the p1
14bc0 20 70 61 72 61 6d 65 74 65 72 20 69 73 20 76 61   parameter is va
14bd0 6c 69 64 2e 20 41 6c 73 6f 20 74 68 61 74 20 69  lid. Also that i
14be0 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6f 70  f there is no op
14bf0 65 6e 0a 20 20 2a 2a 20 74 72 61 6e 73 61 63 74  en.  ** transact
14c00 69 6f 6e 2c 20 74 68 65 6e 20 74 68 65 72 65 20  ion, then there 
14c10 63 61 6e 6e 6f 74 20 62 65 20 61 6e 79 20 73 61  cannot be any sa
14c20 76 65 70 6f 69 6e 74 73 2e 20 0a 20 20 2a 2f 0a  vepoints. .  */.
14c30 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 70 53    assert( db->pS
14c40 61 76 65 70 6f 69 6e 74 3d 3d 30 20 7c 7c 20 64  avepoint==0 || d
14c50 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30  b->autoCommit==0
14c60 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 31   );.  assert( p1
14c70 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 42 45 47 49  ==SAVEPOINT_BEGI
14c80 4e 7c 7c 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54  N||p1==SAVEPOINT
14c90 5f 52 45 4c 45 41 53 45 7c 7c 70 31 3d 3d 53 41  _RELEASE||p1==SA
14ca0 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b  VEPOINT_ROLLBACK
14cb0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64 62   );.  assert( db
14cc0 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 7c 7c 20  ->pSavepoint || 
14cd0 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f  db->isTransactio
14ce0 6e 53 61 76 65 70 6f 69 6e 74 3d 3d 30 20 29 3b  nSavepoint==0 );
14cf0 0a 20 20 61 73 73 65 72 74 28 20 63 68 65 63 6b  .  assert( check
14d00 53 61 76 65 70 6f 69 6e 74 43 6f 75 6e 74 28 64  SavepointCount(d
14d10 62 29 20 29 3b 0a 0a 20 20 69 66 28 20 70 31 3d  b) );..  if( p1=
14d20 3d 53 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e  =SAVEPOINT_BEGIN
14d30 20 29 7b 0a 20 20 20 20 69 66 28 20 64 62 2d 3e   ){.    if( db->
14d40 77 72 69 74 65 56 64 62 65 43 6e 74 3e 30 20 29  writeVdbeCnt>0 )
14d50 7b 0a 20 20 20 20 20 20 2f 2a 20 41 20 6e 65 77  {.      /* A new
14d60 20 73 61 76 65 70 6f 69 6e 74 20 63 61 6e 6e 6f   savepoint canno
14d70 74 20 62 65 20 63 72 65 61 74 65 64 20 69 66 20  t be created if 
14d80 74 68 65 72 65 20 61 72 65 20 61 63 74 69 76 65  there are active
14d90 20 77 72 69 74 65 20 0a 20 20 20 20 20 20 2a 2a   write .      **
14da0 20 73 74 61 74 65 6d 65 6e 74 73 20 28 69 2e 65   statements (i.e
14db0 2e 20 6f 70 65 6e 20 72 65 61 64 2f 77 72 69 74  . open read/writ
14dc0 65 20 69 6e 63 72 65 6d 65 6e 74 61 6c 20 62 6c  e incremental bl
14dd0 6f 62 20 68 61 6e 64 6c 65 73 29 2e 0a 20 20 20  ob handles)..   
14de0 20 20 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69     */.      sqli
14df0 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d  te3SetString(&p-
14e00 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 63  >zErrMsg, db, "c
14e10 61 6e 6e 6f 74 20 6f 70 65 6e 20 73 61 76 65 70  annot open savep
14e20 6f 69 6e 74 20 2d 20 22 0a 20 20 20 20 20 20 20  oint - ".       
14e30 20 22 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73   "SQL statements
14e40 20 69 6e 20 70 72 6f 67 72 65 73 73 22 29 3b 0a   in progress");.
14e50 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
14e60 45 5f 42 55 53 59 3b 0a 20 20 20 20 7d 65 6c 73  E_BUSY;.    }els
14e70 65 7b 0a 20 20 20 20 20 20 6e 4e 61 6d 65 20 3d  e{.      nName =
14e80 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30   sqlite3Strlen30
14e90 28 7a 4e 61 6d 65 29 3b 0a 0a 23 69 66 6e 64 65  (zName);..#ifnde
14ea0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
14eb0 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 20 20 20  RTUALTABLE.     
14ec0 20 2f 2a 20 54 68 69 73 20 63 61 6c 6c 20 69 73   /* This call is
14ed0 20 4f 6b 20 65 76 65 6e 20 69 66 20 74 68 69 73   Ok even if this
14ee0 20 73 61 76 65 70 6f 69 6e 74 20 69 73 20 61 63   savepoint is ac
14ef0 74 75 61 6c 6c 79 20 61 20 74 72 61 6e 73 61 63  tually a transac
14f00 74 69 6f 6e 0a 20 20 20 20 20 20 2a 2a 20 73 61  tion.      ** sa
14f10 76 65 70 6f 69 6e 74 20 28 61 6e 64 20 74 68 65  vepoint (and the
14f20 72 65 66 6f 72 65 20 73 68 6f 75 6c 64 20 6e 6f  refore should no
14f30 74 20 70 72 6f 6d 70 74 20 78 53 61 76 65 70 6f  t prompt xSavepo
14f40 69 6e 74 28 29 29 20 63 61 6c 6c 62 61 63 6b 73  int()) callbacks
14f50 2e 0a 20 20 20 20 20 20 2a 2a 20 49 66 20 74 68  ..      ** If th
14f60 69 73 20 69 73 20 61 20 74 72 61 6e 73 61 63 74  is is a transact
14f70 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 20 62 65  ion savepoint be
14f80 69 6e 67 20 6f 70 65 6e 65 64 2c 20 69 74 20 69  ing opened, it i
14f90 73 20 67 75 61 72 61 6e 74 65 65 64 0a 20 20 20  s guaranteed.   
14fa0 20 20 20 2a 2a 20 74 68 61 74 20 74 68 65 20 64     ** that the d
14fb0 62 2d 3e 61 56 54 72 61 6e 73 5b 5d 20 61 72 72  b->aVTrans[] arr
14fc0 61 79 20 69 73 20 65 6d 70 74 79 2e 20 20 2a 2f  ay is empty.  */
14fd0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 64  .      assert( d
14fe0 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30  b->autoCommit==0
14ff0 20 7c 7c 20 64 62 2d 3e 6e 56 54 72 61 6e 73 3d   || db->nVTrans=
15000 3d 30 20 29 3b 0a 20 20 20 20 20 20 72 63 20 3d  =0 );.      rc =
15010 20 73 71 6c 69 74 65 33 56 74 61 62 53 61 76 65   sqlite3VtabSave
15020 70 6f 69 6e 74 28 64 62 2c 20 53 41 56 45 50 4f  point(db, SAVEPO
15030 49 4e 54 5f 42 45 47 49 4e 2c 0a 20 20 20 20 20  INT_BEGIN,.     
15040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15050 20 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 6e             db->n
15060 53 74 61 74 65 6d 65 6e 74 2b 64 62 2d 3e 6e 53  Statement+db->nS
15070 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20  avepoint);.     
15080 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
15090 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  OK ) goto abort_
150a0 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 23 65  due_to_error;.#e
150b0 6e 64 69 66 0a 0a 20 20 20 20 20 20 2f 2a 20 43  ndif..      /* C
150c0 72 65 61 74 65 20 61 20 6e 65 77 20 73 61 76 65  reate a new save
150d0 70 6f 69 6e 74 20 73 74 72 75 63 74 75 72 65 2e  point structure.
150e0 20 2a 2f 0a 20 20 20 20 20 20 70 4e 65 77 20 3d   */.      pNew =
150f0 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63   sqlite3DbMalloc
15100 52 61 77 28 64 62 2c 20 73 69 7a 65 6f 66 28 53  Raw(db, sizeof(S
15110 61 76 65 70 6f 69 6e 74 29 2b 6e 4e 61 6d 65 2b  avepoint)+nName+
15120 31 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70 4e  1);.      if( pN
15130 65 77 20 29 7b 0a 20 20 20 20 20 20 20 20 70 4e  ew ){.        pN
15140 65 77 2d 3e 7a 4e 61 6d 65 20 3d 20 28 63 68 61  ew->zName = (cha
15150 72 20 2a 29 26 70 4e 65 77 5b 31 5d 3b 0a 20 20  r *)&pNew[1];.  
15160 20 20 20 20 20 20 6d 65 6d 63 70 79 28 70 4e 65        memcpy(pNe
15170 77 2d 3e 7a 4e 61 6d 65 2c 20 7a 4e 61 6d 65 2c  w->zName, zName,
15180 20 6e 4e 61 6d 65 2b 31 29 3b 0a 20 20 20 20 0a   nName+1);.    .
15190 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68          /* If th
151a0 65 72 65 20 69 73 20 6e 6f 20 6f 70 65 6e 20 74  ere is no open t
151b0 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65 6e  ransaction, then
151c0 20 6d 61 72 6b 20 74 68 69 73 20 61 73 20 61 20   mark this as a 
151d0 73 70 65 63 69 61 6c 0a 20 20 20 20 20 20 20 20  special.        
151e0 2a 2a 20 22 74 72 61 6e 73 61 63 74 69 6f 6e 20  ** "transaction 
151f0 73 61 76 65 70 6f 69 6e 74 22 2e 20 2a 2f 0a 20  savepoint". */. 
15200 20 20 20 20 20 20 20 69 66 28 20 64 62 2d 3e 61         if( db->a
15210 75 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20 20 20  utoCommit ){.   
15220 20 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43         db->autoC
15230 6f 6d 6d 69 74 20 3d 20 30 3b 0a 20 20 20 20 20  ommit = 0;.     
15240 20 20 20 20 20 64 62 2d 3e 69 73 54 72 61 6e 73       db->isTrans
15250 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 20  actionSavepoint 
15260 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c  = 1;.        }el
15270 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 64 62  se{.          db
15280 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 2b 2b 3b 0a  ->nSavepoint++;.
15290 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 0a 20          }.    . 
152a0 20 20 20 20 20 20 20 2f 2a 20 4c 69 6e 6b 20 74         /* Link t
152b0 68 65 20 6e 65 77 20 73 61 76 65 70 6f 69 6e 74  he new savepoint
152c0 20 69 6e 74 6f 20 74 68 65 20 64 61 74 61 62 61   into the databa
152d0 73 65 20 68 61 6e 64 6c 65 27 73 20 6c 69 73 74  se handle's list
152e0 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 70 4e 65  . */.        pNe
152f0 77 2d 3e 70 4e 65 78 74 20 3d 20 64 62 2d 3e 70  w->pNext = db->p
15300 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 20 20 20  Savepoint;.     
15310 20 20 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e     db->pSavepoin
15320 74 20 3d 20 70 4e 65 77 3b 0a 20 20 20 20 20 20  t = pNew;.      
15330 20 20 70 4e 65 77 2d 3e 6e 44 65 66 65 72 72 65    pNew->nDeferre
15340 64 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66  dCons = db->nDef
15350 65 72 72 65 64 43 6f 6e 73 3b 0a 20 20 20 20 20  erredCons;.     
15360 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65   }.    }.  }else
15370 7b 0a 20 20 20 20 69 53 61 76 65 70 6f 69 6e 74  {.    iSavepoint
15380 20 3d 20 30 3b 0a 0a 20 20 20 20 2f 2a 20 46 69   = 0;..    /* Fi
15390 6e 64 20 74 68 65 20 6e 61 6d 65 64 20 73 61 76  nd the named sav
153a0 65 70 6f 69 6e 74 2e 20 49 66 20 74 68 65 72 65  epoint. If there
153b0 20 69 73 20 6e 6f 20 73 75 63 68 20 73 61 76 65   is no such save
153c0 70 6f 69 6e 74 2c 20 74 68 65 6e 20 61 6e 0a 20  point, then an. 
153d0 20 20 20 2a 2a 20 61 6e 20 65 72 72 6f 72 20 69     ** an error i
153e0 73 20 72 65 74 75 72 6e 65 64 20 74 6f 20 74 68  s returned to th
153f0 65 20 75 73 65 72 2e 20 20 2a 2f 0a 20 20 20 20  e user.  */.    
15400 66 6f 72 28 0a 20 20 20 20 20 20 70 53 61 76 65  for(.      pSave
15410 70 6f 69 6e 74 20 3d 20 64 62 2d 3e 70 53 61 76  point = db->pSav
15420 65 70 6f 69 6e 74 3b 20 0a 20 20 20 20 20 20 70  epoint; .      p
15430 53 61 76 65 70 6f 69 6e 74 20 26 26 20 73 71 6c  Savepoint && sql
15440 69 74 65 33 53 74 72 49 43 6d 70 28 70 53 61 76  ite3StrICmp(pSav
15450 65 70 6f 69 6e 74 2d 3e 7a 4e 61 6d 65 2c 20 7a  epoint->zName, z
15460 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 70 53 61  Name);.      pSa
15470 76 65 70 6f 69 6e 74 20 3d 20 70 53 61 76 65 70  vepoint = pSavep
15480 6f 69 6e 74 2d 3e 70 4e 65 78 74 0a 20 20 20 20  oint->pNext.    
15490 29 7b 0a 20 20 20 20 20 20 69 53 61 76 65 70 6f  ){.      iSavepo
154a0 69 6e 74 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20  int++;.    }.   
154b0 20 69 66 28 20 21 70 53 61 76 65 70 6f 69 6e 74   if( !pSavepoint
154c0 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
154d0 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a  3SetString(&p->z
154e0 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 6e 6f 20  ErrMsg, db, "no 
154f0 73 75 63 68 20 73 61 76 65 70 6f 69 6e 74 3a 20  such savepoint: 
15500 25 73 22 2c 20 7a 4e 61 6d 65 29 3b 0a 20 20 20  %s", zName);.   
15510 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45     rc = SQLITE_E
15520 52 52 4f 52 3b 0a 20 20 20 20 7d 65 6c 73 65 20  RROR;.    }else 
15530 69 66 28 20 0a 20 20 20 20 20 20 20 20 64 62 2d  if( .        db-
15540 3e 77 72 69 74 65 56 64 62 65 43 6e 74 3e 30 20  >writeVdbeCnt>0 
15550 7c 7c 20 28 70 31 3d 3d 53 41 56 45 50 4f 49 4e  || (p1==SAVEPOIN
15560 54 5f 52 4f 4c 4c 42 41 43 4b 20 26 26 20 64 62  T_ROLLBACK && db
15570 2d 3e 61 63 74 69 76 65 56 64 62 65 43 6e 74 3e  ->activeVdbeCnt>
15580 31 29 20 0a 20 20 20 20 29 7b 0a 20 20 20 20 20  1) .    ){.     
15590 20 2f 2a 20 49 74 20 69 73 20 6e 6f 74 20 70 6f   /* It is not po
155a0 73 73 69 62 6c 65 20 74 6f 20 72 65 6c 65 61 73  ssible to releas
155b0 65 20 28 63 6f 6d 6d 69 74 29 20 61 20 73 61 76  e (commit) a sav
155c0 65 70 6f 69 6e 74 20 69 66 20 74 68 65 72 65 20  epoint if there 
155d0 61 72 65 20 0a 20 20 20 20 20 20 2a 2a 20 61 63  are .      ** ac
155e0 74 69 76 65 20 77 72 69 74 65 20 73 74 61 74 65  tive write state
155f0 6d 65 6e 74 73 2e 20 49 74 20 69 73 20 6e 6f 74  ments. It is not
15600 20 70 6f 73 73 69 62 6c 65 20 74 6f 20 72 6f 6c   possible to rol
15610 6c 62 61 63 6b 20 61 20 73 61 76 65 70 6f 69 6e  lback a savepoin
15620 74 0a 20 20 20 20 20 20 2a 2a 20 69 66 20 74 68  t.      ** if th
15630 65 72 65 20 61 72 65 20 61 6e 79 20 61 63 74 69  ere are any acti
15640 76 65 20 73 74 61 74 65 6d 65 6e 74 73 20 61 74  ve statements at
15650 20 61 6c 6c 2e 0a 20 20 20 20 20 20 2a 2f 0a 20   all..      */. 
15660 20 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53       sqlite3SetS
15670 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73  tring(&p->zErrMs
15680 67 2c 20 64 62 2c 20 0a 20 20 20 20 20 20 20 20  g, db, .        
15690 22 63 61 6e 6e 6f 74 20 25 73 20 73 61 76 65 70  "cannot %s savep
156a0 6f 69 6e 74 20 2d 20 53 51 4c 20 73 74 61 74 65  oint - SQL state
156b0 6d 65 6e 74 73 20 69 6e 20 70 72 6f 67 72 65 73  ments in progres
156c0 73 22 2c 0a 20 20 20 20 20 20 20 20 28 70 31 3d  s",.        (p1=
156d0 3d 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42  =SAVEPOINT_ROLLB
156e0 41 43 4b 20 3f 20 22 72 6f 6c 6c 62 61 63 6b 22  ACK ? "rollback"
156f0 3a 20 22 72 65 6c 65 61 73 65 22 29 0a 20 20 20  : "release").   
15700 20 20 20 29 3b 0a 20 20 20 20 20 20 72 63 20 3d     );.      rc =
15710 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20   SQLITE_BUSY;.  
15720 20 20 7d 65 6c 73 65 7b 0a 0a 20 20 20 20 20 20    }else{..      
15730 2f 2a 20 44 65 74 65 72 6d 69 6e 65 20 77 68 65  /* Determine whe
15740 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 69 73  ther or not this
15750 20 69 73 20 61 20 74 72 61 6e 73 61 63 74 69 6f   is a transactio
15760 6e 20 73 61 76 65 70 6f 69 6e 74 2e 20 49 66 20  n savepoint. If 
15770 73 6f 2c 0a 20 20 20 20 20 20 2a 2a 20 61 6e 64  so,.      ** and
15780 20 74 68 69 73 20 69 73 20 61 20 52 45 4c 45 41   this is a RELEA
15790 53 45 20 63 6f 6d 6d 61 6e 64 2c 20 74 68 65 6e  SE command, then
157a0 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 72 61   the current tra
157b0 6e 73 61 63 74 69 6f 6e 20 0a 20 20 20 20 20 20  nsaction .      
157c0 2a 2a 20 69 73 20 63 6f 6d 6d 69 74 74 65 64 2e  ** is committed.
157d0 20 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20   .      */.     
157e0 20 69 6e 74 20 69 73 54 72 61 6e 73 61 63 74 69   int isTransacti
157f0 6f 6e 20 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d  on = pSavepoint-
15800 3e 70 4e 65 78 74 3d 3d 30 20 26 26 20 64 62 2d  >pNext==0 && db-
15810 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61  >isTransactionSa
15820 76 65 70 6f 69 6e 74 3b 0a 20 20 20 20 20 20 69  vepoint;.      i
15830 66 28 20 69 73 54 72 61 6e 73 61 63 74 69 6f 6e  f( isTransaction
15840 20 26 26 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e   && p1==SAVEPOIN
15850 54 5f 52 45 4c 45 41 53 45 20 29 7b 0a 20 20 20  T_RELEASE ){.   
15860 20 20 20 20 20 69 66 28 20 28 72 63 20 3d 20 73       if( (rc = s
15870 71 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b 46  qlite3VdbeCheckF
15880 6b 28 70 2c 20 31 29 29 21 3d 53 51 4c 49 54 45  k(p, 1))!=SQLITE
15890 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20  _OK ){.         
158a0 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72   goto vdbe_retur
158b0 6e 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  n;.        }.   
158c0 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d       db->autoCom
158d0 6d 69 74 20 3d 20 31 3b 0a 20 20 20 20 20 20 20  mit = 1;.       
158e0 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65   if( sqlite3Vdbe
158f0 48 61 6c 74 28 70 29 3d 3d 53 51 4c 49 54 45 5f  Halt(p)==SQLITE_
15900 42 55 53 59 20 29 7b 0a 20 20 20 20 20 20 20 20  BUSY ){.        
15910 20 20 70 2d 3e 70 63 20 3d 20 70 63 3b 0a 20 20    p->pc = pc;.  
15920 20 20 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f          db->auto
15930 43 6f 6d 6d 69 74 20 3d 20 30 3b 0a 20 20 20 20  Commit = 0;.    
15940 20 20 20 20 20 20 70 2d 3e 72 63 20 3d 20 72 63        p->rc = rc
15950 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a   = SQLITE_BUSY;.
15960 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20 76            goto v
15970 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20  dbe_return;.    
15980 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 64 62      }.        db
15990 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53  ->isTransactionS
159a0 61 76 65 70 6f 69 6e 74 20 3d 20 30 3b 0a 20 20  avepoint = 0;.  
159b0 20 20 20 20 20 20 72 63 20 3d 20 70 2d 3e 72 63        rc = p->rc
159c0 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
159d0 20 20 20 20 20 20 20 69 53 61 76 65 70 6f 69 6e         iSavepoin
159e0 74 20 3d 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69  t = db->nSavepoi
159f0 6e 74 20 2d 20 69 53 61 76 65 70 6f 69 6e 74 20  nt - iSavepoint 
15a00 2d 20 31 3b 0a 20 20 20 20 20 20 20 20 66 6f 72  - 1;.        for
15a10 28 69 69 3d 30 3b 20 69 69 3c 64 62 2d 3e 6e 44  (ii=0; ii<db->nD
15a20 62 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20  b; ii++){.      
15a30 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
15a40 42 74 72 65 65 53 61 76 65 70 6f 69 6e 74 28 64  BtreeSavepoint(d
15a50 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74 2c 20  b->aDb[ii].pBt, 
15a60 70 31 2c 20 69 53 61 76 65 70 6f 69 6e 74 29 3b  p1, iSavepoint);
15a70 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20 72  .          if( r
15a80 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c!=SQLITE_OK ){.
15a90 20 20 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f              goto
15aa0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
15ab0 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 20 20 7d  ror;.          }
15ac0 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
15ad0 20 20 20 69 66 28 20 70 31 3d 3d 53 41 56 45 50     if( p1==SAVEP
15ae0 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 26 26  OINT_ROLLBACK &&
15af0 20 28 64 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49   (db->flags&SQLI
15b00 54 45 5f 49 6e 74 65 72 6e 43 68 61 6e 67 65 73  TE_InternChanges
15b10 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  )!=0 ){.        
15b20 20 20 73 71 6c 69 74 65 33 45 78 70 69 72 65 50    sqlite3ExpireP
15b30 72 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74  reparedStatement
15b40 73 28 64 62 29 3b 0a 20 20 20 20 20 20 20 20 20  s(db);.         
15b50 20 73 71 6c 69 74 65 33 52 65 73 65 74 49 6e 74   sqlite3ResetInt
15b60 65 72 6e 61 6c 53 63 68 65 6d 61 28 64 62 2c 20  ernalSchema(db, 
15b70 2d 31 29 3b 0a 20 20 20 20 20 20 20 20 20 20 64  -1);.          d
15b80 62 2d 3e 66 6c 61 67 73 20 3d 20 28 64 62 2d 3e  b->flags = (db->
15b90 66 6c 61 67 73 20 7c 20 53 51 4c 49 54 45 5f 49  flags | SQLITE_I
15ba0 6e 74 65 72 6e 43 68 61 6e 67 65 73 29 3b 0a 20  nternChanges);. 
15bb0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d         }.      }
15bc0 0a 20 20 0a 20 20 20 20 20 20 2f 2a 20 52 65 67  .  .      /* Reg
15bd0 61 72 64 6c 65 73 73 20 6f 66 20 77 68 65 74 68  ardless of wheth
15be0 65 72 20 74 68 69 73 20 69 73 20 61 20 52 45 4c  er this is a REL
15bf0 45 41 53 45 20 6f 72 20 52 4f 4c 4c 42 41 43 4b  EASE or ROLLBACK
15c00 2c 20 64 65 73 74 72 6f 79 20 61 6c 6c 20 0a 20  , destroy all . 
15c10 20 20 20 20 20 2a 2a 20 73 61 76 65 70 6f 69 6e       ** savepoin
15c20 74 73 20 6e 65 73 74 65 64 20 69 6e 73 69 64 65  ts nested inside
15c30 20 6f 66 20 74 68 65 20 73 61 76 65 70 6f 69 6e   of the savepoin
15c40 74 20 62 65 69 6e 67 20 6f 70 65 72 61 74 65 64  t being operated
15c50 20 6f 6e 2e 20 2a 2f 0a 20 20 20 20 20 20 77 68   on. */.      wh
15c60 69 6c 65 28 20 64 62 2d 3e 70 53 61 76 65 70 6f  ile( db->pSavepo
15c70 69 6e 74 21 3d 70 53 61 76 65 70 6f 69 6e 74 20  int!=pSavepoint 
15c80 29 7b 0a 20 20 20 20 20 20 20 20 70 54 6d 70 20  ){.        pTmp 
15c90 3d 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74  = db->pSavepoint
15ca0 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 70 53  ;.        db->pS
15cb0 61 76 65 70 6f 69 6e 74 20 3d 20 70 54 6d 70 2d  avepoint = pTmp-
15cc0 3e 70 4e 65 78 74 3b 0a 20 20 20 20 20 20 20 20  >pNext;.        
15cd0 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62  sqlite3DbFree(db
15ce0 2c 20 70 54 6d 70 29 3b 0a 20 20 20 20 20 20 20  , pTmp);.       
15cf0 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 2d   db->nSavepoint-
15d00 2d 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20  -;.      }..    
15d10 20 20 2f 2a 20 49 66 20 69 74 20 69 73 20 61 20    /* If it is a 
15d20 52 45 4c 45 41 53 45 2c 20 74 68 65 6e 20 64 65  RELEASE, then de
15d30 73 74 72 6f 79 20 74 68 65 20 73 61 76 65 70 6f  stroy the savepo
15d40 69 6e 74 20 62 65 69 6e 67 20 6f 70 65 72 61 74  int being operat
15d50 65 64 20 6f 6e 20 0a 20 20 20 20 20 20 2a 2a 20  ed on .      ** 
15d60 74 6f 6f 2e 20 49 66 20 69 74 20 69 73 20 61 20  too. If it is a 
15d70 52 4f 4c 4c 42 41 43 4b 20 54 4f 2c 20 74 68 65  ROLLBACK TO, the
15d80 6e 20 73 65 74 20 74 68 65 20 6e 75 6d 62 65 72  n set the number
15d90 20 6f 66 20 64 65 66 65 72 72 65 64 20 0a 20 20   of deferred .  
15da0 20 20 20 20 2a 2a 20 63 6f 6e 73 74 72 61 69 6e      ** constrain
15db0 74 20 76 69 6f 6c 61 74 69 6f 6e 73 20 70 72 65  t violations pre
15dc0 73 65 6e 74 20 69 6e 20 74 68 65 20 64 61 74 61  sent in the data
15dd0 62 61 73 65 20 74 6f 20 74 68 65 20 76 61 6c 75  base to the valu
15de0 65 20 73 74 6f 72 65 64 0a 20 20 20 20 20 20 2a  e stored.      *
15df0 2a 20 77 68 65 6e 20 74 68 65 20 73 61 76 65 70  * when the savep
15e00 6f 69 6e 74 20 77 61 73 20 63 72 65 61 74 65 64  oint was created
15e10 2e 20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20  .  */.      if( 
15e20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45  p1==SAVEPOINT_RE
15e30 4c 45 41 53 45 20 29 7b 0a 20 20 20 20 20 20 20  LEASE ){.       
15e40 20 61 73 73 65 72 74 28 20 70 53 61 76 65 70 6f   assert( pSavepo
15e50 69 6e 74 3d 3d 64 62 2d 3e 70 53 61 76 65 70 6f  int==db->pSavepo
15e60 69 6e 74 20 29 3b 0a 20 20 20 20 20 20 20 20 64  int );.        d
15e70 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 3d 20  b->pSavepoint = 
15e80 70 53 61 76 65 70 6f 69 6e 74 2d 3e 70 4e 65 78  pSavepoint->pNex
15e90 74 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  t;.        sqlit
15ea0 65 33 44 62 46 72 65 65 28 64 62 2c 20 70 53 61  e3DbFree(db, pSa
15eb0 76 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20  vepoint);.      
15ec0 20 20 69 66 28 20 21 69 73 54 72 61 6e 73 61 63    if( !isTransac
15ed0 74 69 6f 6e 20 29 7b 0a 20 20 20 20 20 20 20 20  tion ){.        
15ee0 20 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74    db->nSavepoint
15ef0 2d 2d 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  --;.        }.  
15f00 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
15f10 20 20 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64     db->nDeferred
15f20 43 6f 6e 73 20 3d 20 70 53 61 76 65 70 6f 69 6e  Cons = pSavepoin
15f30 74 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73  t->nDeferredCons
15f40 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20  ;.      }..     
15f50 20 69 66 28 20 21 69 73 54 72 61 6e 73 61 63 74   if( !isTransact
15f60 69 6f 6e 20 29 7b 0a 20 20 20 20 20 20 20 20 72  ion ){.        r
15f70 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62 53  c = sqlite3VtabS
15f80 61 76 65 70 6f 69 6e 74 28 64 62 2c 20 70 31 2c  avepoint(db, p1,
15f90 20 69 53 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20   iSavepoint);.  
15fa0 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
15fb0 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61  LITE_OK ) goto a
15fc0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
15fd0 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  r;.      }.    }
15fe0 0a 20 20 7d 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d  .  }..  break;.}
15ff0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 75 74  ../* Opcode: Aut
16000 6f 43 6f 6d 6d 69 74 20 50 31 20 50 32 20 2a 20  oCommit P1 P2 * 
16010 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 65 74 20 74 68  * *.**.** Set th
16020 65 20 64 61 74 61 62 61 73 65 20 61 75 74 6f 2d  e database auto-
16030 63 6f 6d 6d 69 74 20 66 6c 61 67 20 74 6f 20 50  commit flag to P
16040 31 20 28 31 20 6f 72 20 30 29 2e 20 49 66 20 50  1 (1 or 0). If P
16050 32 20 69 73 20 74 72 75 65 2c 20 72 6f 6c 6c 0a  2 is true, roll.
16060 2a 2a 20 62 61 63 6b 20 61 6e 79 20 63 75 72 72  ** back any curr
16070 65 6e 74 6c 79 20 61 63 74 69 76 65 20 62 74 72  ently active btr
16080 65 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 2e  ee transactions.
16090 20 49 66 20 74 68 65 72 65 20 61 72 65 20 61 6e   If there are an
160a0 79 20 61 63 74 69 76 65 0a 2a 2a 20 56 4d 73 20  y active.** VMs 
160b0 28 61 70 61 72 74 20 66 72 6f 6d 20 74 68 69 73  (apart from this
160c0 20 6f 6e 65 29 2c 20 74 68 65 6e 20 61 20 52 4f   one), then a RO
160d0 4c 4c 42 41 43 4b 20 66 61 69 6c 73 2e 20 20 41  LLBACK fails.  A
160e0 20 43 4f 4d 4d 49 54 20 66 61 69 6c 73 20 69 66   COMMIT fails if
160f0 0a 2a 2a 20 74 68 65 72 65 20 61 72 65 20 61 63  .** there are ac
16100 74 69 76 65 20 77 72 69 74 69 6e 67 20 56 4d 73  tive writing VMs
16110 20 6f 72 20 61 63 74 69 76 65 20 56 4d 73 20 74   or active VMs t
16120 68 61 74 20 75 73 65 20 73 68 61 72 65 64 20 63  hat use shared c
16130 61 63 68 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  ache..**.** This
16140 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 63 61 75   instruction cau
16150 73 65 73 20 74 68 65 20 56 4d 20 74 6f 20 68 61  ses the VM to ha
16160 6c 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41  lt..*/.case OP_A
16170 75 74 6f 43 6f 6d 6d 69 74 3a 20 7b 0a 20 20 69  utoCommit: {.  i
16180 6e 74 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f  nt desiredAutoCo
16190 6d 6d 69 74 3b 0a 20 20 69 6e 74 20 69 52 6f 6c  mmit;.  int iRol
161a0 6c 62 61 63 6b 3b 0a 20 20 69 6e 74 20 74 75 72  lback;.  int tur
161b0 6e 4f 6e 41 43 3b 0a 0a 20 20 64 65 73 69 72 65  nOnAC;..  desire
161c0 64 41 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 70 4f  dAutoCommit = pO
161d0 70 2d 3e 70 31 3b 0a 20 20 69 52 6f 6c 6c 62 61  p->p1;.  iRollba
161e0 63 6b 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  ck = pOp->p2;.  
161f0 74 75 72 6e 4f 6e 41 43 20 3d 20 64 65 73 69 72  turnOnAC = desir
16200 65 64 41 75 74 6f 43 6f 6d 6d 69 74 20 26 26 20  edAutoCommit && 
16210 21 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3b  !db->autoCommit;
16220 0a 20 20 61 73 73 65 72 74 28 20 64 65 73 69 72  .  assert( desir
16230 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20  edAutoCommit==1 
16240 7c 7c 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f  || desiredAutoCo
16250 6d 6d 69 74 3d 3d 30 20 29 3b 0a 20 20 61 73 73  mmit==0 );.  ass
16260 65 72 74 28 20 64 65 73 69 72 65 64 41 75 74 6f  ert( desiredAuto
16270 43 6f 6d 6d 69 74 3d 3d 31 20 7c 7c 20 69 52 6f  Commit==1 || iRo
16280 6c 6c 62 61 63 6b 3d 3d 30 20 29 3b 0a 20 20 61  llback==0 );.  a
16290 73 73 65 72 74 28 20 64 62 2d 3e 61 63 74 69 76  ssert( db->activ
162a0 65 56 64 62 65 43 6e 74 3e 30 20 29 3b 20 20 2f  eVdbeCnt>0 );  /
162b0 2a 20 41 74 20 6c 65 61 73 74 20 74 68 69 73 20  * At least this 
162c0 6f 6e 65 20 56 4d 20 69 73 20 61 63 74 69 76 65  one VM is active
162d0 20 2a 2f 0a 0a 20 20 69 66 28 20 74 75 72 6e 4f   */..  if( turnO
162e0 6e 41 43 20 26 26 20 69 52 6f 6c 6c 62 61 63 6b  nAC && iRollback
162f0 20 26 26 20 64 62 2d 3e 61 63 74 69 76 65 56 64   && db->activeVd
16300 62 65 43 6e 74 3e 31 20 29 7b 0a 20 20 20 20 2f  beCnt>1 ){.    /
16310 2a 20 49 66 20 74 68 69 73 20 69 6e 73 74 72 75  * If this instru
16320 63 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 73  ction implements
16330 20 61 20 52 4f 4c 4c 42 41 43 4b 20 61 6e 64 20   a ROLLBACK and 
16340 6f 74 68 65 72 20 56 4d 73 20 61 72 65 0a 20 20  other VMs are.  
16350 20 20 2a 2a 20 73 74 69 6c 6c 20 72 75 6e 6e 69    ** still runni
16360 6e 67 2c 20 61 6e 64 20 61 20 74 72 61 6e 73 61  ng, and a transa
16370 63 74 69 6f 6e 20 69 73 20 61 63 74 69 76 65 2c  ction is active,
16380 20 72 65 74 75 72 6e 20 61 6e 20 65 72 72 6f 72   return an error
16390 20 69 6e 64 69 63 61 74 69 6e 67 0a 20 20 20 20   indicating.    
163a0 2a 2a 20 74 68 61 74 20 74 68 65 20 6f 74 68 65  ** that the othe
163b0 72 20 56 4d 73 20 6d 75 73 74 20 63 6f 6d 70 6c  r VMs must compl
163c0 65 74 65 20 66 69 72 73 74 2e 20 0a 20 20 20 20  ete first. .    
163d0 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65  */.    sqlite3Se
163e0 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72  tString(&p->zErr
163f0 4d 73 67 2c 20 64 62 2c 20 22 63 61 6e 6e 6f 74  Msg, db, "cannot
16400 20 72 6f 6c 6c 62 61 63 6b 20 74 72 61 6e 73 61   rollback transa
16410 63 74 69 6f 6e 20 2d 20 22 0a 20 20 20 20 20 20  ction - ".      
16420 20 20 22 53 51 4c 20 73 74 61 74 65 6d 65 6e 74    "SQL statement
16430 73 20 69 6e 20 70 72 6f 67 72 65 73 73 22 29 3b  s in progress");
16440 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45  .    rc = SQLITE
16450 5f 42 55 53 59 3b 0a 20 20 7d 65 6c 73 65 20 69  _BUSY;.  }else i
16460 66 28 20 74 75 72 6e 4f 6e 41 43 20 26 26 20 21  f( turnOnAC && !
16470 69 52 6f 6c 6c 62 61 63 6b 20 26 26 20 64 62 2d  iRollback && db-
16480 3e 77 72 69 74 65 56 64 62 65 43 6e 74 3e 30 20  >writeVdbeCnt>0 
16490 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 69  ){.    /* If thi
164a0 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 6d  s instruction im
164b0 70 6c 65 6d 65 6e 74 73 20 61 20 43 4f 4d 4d 49  plements a COMMI
164c0 54 20 61 6e 64 20 6f 74 68 65 72 20 56 4d 73 20  T and other VMs 
164d0 61 72 65 20 77 72 69 74 69 6e 67 0a 20 20 20 20  are writing.    
164e0 2a 2a 20 72 65 74 75 72 6e 20 61 6e 20 65 72 72  ** return an err
164f0 6f 72 20 69 6e 64 69 63 61 74 69 6e 67 20 74 68  or indicating th
16500 61 74 20 74 68 65 20 6f 74 68 65 72 20 56 4d 73  at the other VMs
16510 20 6d 75 73 74 20 63 6f 6d 70 6c 65 74 65 20 66   must complete f
16520 69 72 73 74 2e 20 0a 20 20 20 20 2a 2f 0a 20 20  irst. .    */.  
16530 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69    sqlite3SetStri
16540 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20  ng(&p->zErrMsg, 
16550 64 62 2c 20 22 63 61 6e 6e 6f 74 20 63 6f 6d 6d  db, "cannot comm
16560 69 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2d  it transaction -
16570 20 22 0a 20 20 20 20 20 20 20 20 22 53 51 4c 20   ".        "SQL 
16580 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 70 72  statements in pr
16590 6f 67 72 65 73 73 22 29 3b 0a 20 20 20 20 72 63  ogress");.    rc
165a0 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a   = SQLITE_BUSY;.
165b0 20 20 7d 65 6c 73 65 20 69 66 28 20 64 65 73 69    }else if( desi
165c0 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 21 3d 64  redAutoCommit!=d
165d0 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 29 7b  b->autoCommit ){
165e0 0a 20 20 20 20 69 66 28 20 69 52 6f 6c 6c 62 61  .    if( iRollba
165f0 63 6b 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65  ck ){.      asse
16600 72 74 28 20 64 65 73 69 72 65 64 41 75 74 6f 43  rt( desiredAutoC
16610 6f 6d 6d 69 74 3d 3d 31 20 29 3b 0a 20 20 20 20  ommit==1 );.    
16620 20 20 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63    sqlite3Rollbac
16630 6b 41 6c 6c 28 64 62 29 3b 0a 20 20 20 20 20 20  kAll(db);.      
16640 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d  db->autoCommit =
16650 20 31 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66   1;.    }else if
16660 28 20 28 72 63 20 3d 20 73 71 6c 69 74 65 33 56  ( (rc = sqlite3V
16670 64 62 65 43 68 65 63 6b 46 6b 28 70 2c 20 31 29  dbeCheckFk(p, 1)
16680 29 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  )!=SQLITE_OK ){.
16690 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f        goto vdbe_
166a0 72 65 74 75 72 6e 3b 0a 20 20 20 20 7d 65 6c 73  return;.    }els
166b0 65 7b 0a 20 20 20 20 20 20 64 62 2d 3e 61 75 74  e{.      db->aut
166c0 6f 43 6f 6d 6d 69 74 20 3d 20 28 75 38 29 64 65  oCommit = (u8)de
166d0 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3b  siredAutoCommit;
166e0 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74  .      if( sqlit
166f0 65 33 56 64 62 65 48 61 6c 74 28 70 29 3d 3d 53  e3VdbeHalt(p)==S
16700 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20  QLITE_BUSY ){.  
16710 20 20 20 20 20 20 70 2d 3e 70 63 20 3d 20 70 63        p->pc = pc
16720 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 61 75  ;.        db->au
16730 74 6f 43 6f 6d 6d 69 74 20 3d 20 28 75 38 29 28  toCommit = (u8)(
16740 31 2d 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d  1-desiredAutoCom
16750 6d 69 74 29 3b 0a 20 20 20 20 20 20 20 20 70 2d  mit);.        p-
16760 3e 72 63 20 3d 20 72 63 20 3d 20 53 51 4c 49 54  >rc = rc = SQLIT
16770 45 5f 42 55 53 59 3b 0a 20 20 20 20 20 20 20 20  E_BUSY;.        
16780 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e  goto vdbe_return
16790 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
167a0 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e      assert( db->
167b0 6e 53 74 61 74 65 6d 65 6e 74 3d 3d 30 20 29 3b  nStatement==0 );
167c0 0a 20 20 20 20 73 71 6c 69 74 65 33 43 6c 6f 73  .    sqlite3Clos
167d0 65 53 61 76 65 70 6f 69 6e 74 73 28 64 62 29 3b  eSavepoints(db);
167e0 0a 20 20 20 20 69 66 28 20 70 2d 3e 72 63 3d 3d  .    if( p->rc==
167f0 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
16800 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 44     rc = SQLITE_D
16810 4f 4e 45 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  ONE;.    }else{.
16820 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
16830 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d 0a 20  E_ERROR;.    }. 
16840 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74     goto vdbe_ret
16850 75 72 6e 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  urn;.  }else{.  
16860 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69    sqlite3SetStri
16870 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20  ng(&p->zErrMsg, 
16880 64 62 2c 0a 20 20 20 20 20 20 20 20 28 21 64 65  db,.        (!de
16890 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 29  siredAutoCommit)
168a0 3f 22 63 61 6e 6e 6f 74 20 73 74 61 72 74 20 61  ?"cannot start a
168b0 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 77 69 74   transaction wit
168c0 68 69 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f  hin a transactio
168d0 6e 22 3a 28 0a 20 20 20 20 20 20 20 20 28 69 52  n":(.        (iR
168e0 6f 6c 6c 62 61 63 6b 29 3f 22 63 61 6e 6e 6f 74  ollback)?"cannot
168f0 20 72 6f 6c 6c 62 61 63 6b 20 2d 20 6e 6f 20 74   rollback - no t
16900 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 61 63  ransaction is ac
16910 74 69 76 65 22 3a 0a 20 20 20 20 20 20 20 20 20  tive":.         
16920 20 20 20 20 20 20 20 20 20 20 22 63 61 6e 6e 6f            "canno
16930 74 20 63 6f 6d 6d 69 74 20 2d 20 6e 6f 20 74 72  t commit - no tr
16940 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 61 63 74  ansaction is act
16950 69 76 65 22 29 29 3b 0a 20 20 20 20 20 20 20 20  ive"));.        
16960 20 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54   .    rc = SQLIT
16970 45 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 62  E_ERROR;.  }.  b
16980 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
16990 64 65 3a 20 54 72 61 6e 73 61 63 74 69 6f 6e 20  de: Transaction 
169a0 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
169b0 2a 20 42 65 67 69 6e 20 61 20 74 72 61 6e 73 61  * Begin a transa
169c0 63 74 69 6f 6e 2e 20 20 54 68 65 20 74 72 61 6e  ction.  The tran
169d0 73 61 63 74 69 6f 6e 20 65 6e 64 73 20 77 68 65  saction ends whe
169e0 6e 20 61 20 43 6f 6d 6d 69 74 20 6f 72 20 52 6f  n a Commit or Ro
169f0 6c 6c 62 61 63 6b 0a 2a 2a 20 6f 70 63 6f 64 65  llback.** opcode
16a00 20 69 73 20 65 6e 63 6f 75 6e 74 65 72 65 64 2e   is encountered.
16a10 20 20 44 65 70 65 6e 64 69 6e 67 20 6f 6e 20 74    Depending on t
16a20 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 73  he ON CONFLICT s
16a30 65 74 74 69 6e 67 2c 20 74 68 65 0a 2a 2a 20 74  etting, the.** t
16a40 72 61 6e 73 61 63 74 69 6f 6e 20 6d 69 67 68 74  ransaction might
16a50 20 61 6c 73 6f 20 62 65 20 72 6f 6c 6c 65 64 20   also be rolled 
16a60 62 61 63 6b 20 69 66 20 61 6e 20 65 72 72 6f 72  back if an error
16a70 20 69 73 20 65 6e 63 6f 75 6e 74 65 72 65 64 2e   is encountered.
16a80 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68 65  .**.** P1 is the
16a90 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 64 61   index of the da
16aa0 74 61 62 61 73 65 20 66 69 6c 65 20 6f 6e 20 77  tabase file on w
16ab0 68 69 63 68 20 74 68 65 20 74 72 61 6e 73 61 63  hich the transac
16ac0 74 69 6f 6e 20 69 73 0a 2a 2a 20 73 74 61 72 74  tion is.** start
16ad0 65 64 2e 20 20 49 6e 64 65 78 20 30 20 69 73 20  ed.  Index 0 is 
16ae0 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
16af0 65 20 66 69 6c 65 20 61 6e 64 20 69 6e 64 65 78  e file and index
16b00 20 31 20 69 73 20 74 68 65 0a 2a 2a 20 66 69 6c   1 is the.** fil
16b10 65 20 75 73 65 64 20 66 6f 72 20 74 65 6d 70 6f  e used for tempo
16b20 72 61 72 79 20 74 61 62 6c 65 73 2e 20 20 49 6e  rary tables.  In
16b30 64 69 63 65 73 20 6f 66 20 32 20 6f 72 20 6d 6f  dices of 2 or mo
16b40 72 65 20 61 72 65 20 75 73 65 64 20 66 6f 72 0a  re are used for.
16b50 2a 2a 20 61 74 74 61 63 68 65 64 20 64 61 74 61  ** attached data
16b60 62 61 73 65 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  bases..**.** If 
16b70 50 32 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20  P2 is non-zero, 
16b80 74 68 65 6e 20 61 20 77 72 69 74 65 2d 74 72 61  then a write-tra
16b90 6e 73 61 63 74 69 6f 6e 20 69 73 20 73 74 61 72  nsaction is star
16ba0 74 65 64 2e 20 20 41 20 52 45 53 45 52 56 45 44  ted.  A RESERVED
16bb0 20 6c 6f 63 6b 20 69 73 0a 2a 2a 20 6f 62 74 61   lock is.** obta
16bc0 69 6e 65 64 20 6f 6e 20 74 68 65 20 64 61 74 61  ined on the data
16bd0 62 61 73 65 20 66 69 6c 65 20 77 68 65 6e 20 61  base file when a
16be0 20 77 72 69 74 65 2d 74 72 61 6e 73 61 63 74 69   write-transacti
16bf0 6f 6e 20 69 73 20 73 74 61 72 74 65 64 2e 20 20  on is started.  
16c00 4e 6f 0a 2a 2a 20 6f 74 68 65 72 20 70 72 6f 63  No.** other proc
16c10 65 73 73 20 63 61 6e 20 73 74 61 72 74 20 61 6e  ess can start an
16c20 6f 74 68 65 72 20 77 72 69 74 65 20 74 72 61 6e  other write tran
16c30 73 61 63 74 69 6f 6e 20 77 68 69 6c 65 20 74 68  saction while th
16c40 69 73 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  is transaction i
16c50 73 0a 2a 2a 20 75 6e 64 65 72 77 61 79 2e 20 20  s.** underway.  
16c60 53 74 61 72 74 69 6e 67 20 61 20 77 72 69 74 65  Starting a write
16c70 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61 6c 73   transaction als
16c80 6f 20 63 72 65 61 74 65 73 20 61 20 72 6f 6c 6c  o creates a roll
16c90 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 2e 20 41 0a  back journal. A.
16ca0 2a 2a 20 77 72 69 74 65 20 74 72 61 6e 73 61 63  ** write transac
16cb0 74 69 6f 6e 20 6d 75 73 74 20 62 65 20 73 74 61  tion must be sta
16cc0 72 74 65 64 20 62 65 66 6f 72 65 20 61 6e 79 20  rted before any 
16cd0 63 68 61 6e 67 65 73 20 63 61 6e 20 62 65 20 6d  changes can be m
16ce0 61 64 65 20 74 6f 20 74 68 65 0a 2a 2a 20 64 61  ade to the.** da
16cf0 74 61 62 61 73 65 2e 20 20 49 66 20 50 32 20 69  tabase.  If P2 i
16d00 73 20 32 20 6f 72 20 67 72 65 61 74 65 72 20 74  s 2 or greater t
16d10 68 65 6e 20 61 6e 20 45 58 43 4c 55 53 49 56 45  hen an EXCLUSIVE
16d20 20 6c 6f 63 6b 20 69 73 20 61 6c 73 6f 20 6f 62   lock is also ob
16d30 74 61 69 6e 65 64 0a 2a 2a 20 6f 6e 20 74 68 65  tained.** on the
16d40 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20   file..**.** If 
16d50 61 20 77 72 69 74 65 2d 74 72 61 6e 73 61 63 74  a write-transact
16d60 69 6f 6e 20 69 73 20 73 74 61 72 74 65 64 20 61  ion is started a
16d70 6e 64 20 74 68 65 20 56 64 62 65 2e 75 73 65 73  nd the Vdbe.uses
16d80 53 74 6d 74 4a 6f 75 72 6e 61 6c 20 66 6c 61 67  StmtJournal flag
16d90 20 69 73 0a 2a 2a 20 74 72 75 65 20 28 74 68 69   is.** true (thi
16da0 73 20 66 6c 61 67 20 69 73 20 73 65 74 20 69 66  s flag is set if
16db0 20 74 68 65 20 56 64 62 65 20 6d 61 79 20 6d 6f   the Vdbe may mo
16dc0 64 69 66 79 20 6d 6f 72 65 20 74 68 61 6e 20 6f  dify more than o
16dd0 6e 65 20 72 6f 77 20 61 6e 64 20 6d 61 79 0a 2a  ne row and may.*
16de0 2a 20 74 68 72 6f 77 20 61 6e 20 41 42 4f 52 54  * throw an ABORT
16df0 20 65 78 63 65 70 74 69 6f 6e 29 2c 20 61 20 73   exception), a s
16e00 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63  tatement transac
16e10 74 69 6f 6e 20 6d 61 79 20 61 6c 73 6f 20 62 65  tion may also be
16e20 20 6f 70 65 6e 65 64 2e 0a 2a 2a 20 4d 6f 72 65   opened..** More
16e30 20 73 70 65 63 69 66 69 63 61 6c 6c 79 2c 20 61   specifically, a
16e40 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73   statement trans
16e50 61 63 74 69 6f 6e 20 69 73 20 6f 70 65 6e 65 64  action is opened
16e60 20 69 66 66 20 74 68 65 20 64 61 74 61 62 61 73   iff the databas
16e70 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  e.** connection 
16e80 69 73 20 63 75 72 72 65 6e 74 6c 79 20 6e 6f 74  is currently not
16e90 20 69 6e 20 61 75 74 6f 63 6f 6d 6d 69 74 20 6d   in autocommit m
16ea0 6f 64 65 2c 20 6f 72 20 69 66 20 74 68 65 72 65  ode, or if there
16eb0 20 61 72 65 20 6f 74 68 65 72 0a 2a 2a 20 61 63   are other.** ac
16ec0 74 69 76 65 20 73 74 61 74 65 6d 65 6e 74 73 2e  tive statements.
16ed0 20 41 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61   A statement tra
16ee0 6e 73 61 63 74 69 6f 6e 20 61 6c 6c 6f 77 73 20  nsaction allows 
16ef0 74 68 65 20 61 66 66 65 63 74 73 20 6f 66 20 74  the affects of t
16f00 68 69 73 0a 2a 2a 20 56 44 42 45 20 74 6f 20 62  his.** VDBE to b
16f10 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 20 61 66  e rolled back af
16f20 74 65 72 20 61 6e 20 65 72 72 6f 72 20 77 69 74  ter an error wit
16f30 68 6f 75 74 20 68 61 76 69 6e 67 20 74 6f 20 72  hout having to r
16f40 6f 6c 6c 20 62 61 63 6b 20 74 68 65 0a 2a 2a 20  oll back the.** 
16f50 65 6e 74 69 72 65 20 74 72 61 6e 73 61 63 74 69  entire transacti
16f60 6f 6e 2e 20 49 66 20 6e 6f 20 65 72 72 6f 72 20  on. If no error 
16f70 69 73 20 65 6e 63 6f 75 6e 74 65 72 65 64 2c 20  is encountered, 
16f80 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74 72  the statement tr
16f90 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 77 69 6c  ansaction.** wil
16fa0 6c 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20  l automatically 
16fb0 63 6f 6d 6d 69 74 20 77 68 65 6e 20 74 68 65 20  commit when the 
16fc0 56 44 42 45 20 68 61 6c 74 73 2e 0a 2a 2a 0a 2a  VDBE halts..**.*
16fd0 2a 20 49 66 20 50 32 20 69 73 20 7a 65 72 6f 2c  * If P2 is zero,
16fe0 20 74 68 65 6e 20 61 20 72 65 61 64 2d 6c 6f 63   then a read-loc
16ff0 6b 20 69 73 20 6f 62 74 61 69 6e 65 64 20 6f 6e  k is obtained on
17000 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
17010 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54  le..*/.case OP_T
17020 72 61 6e 73 61 63 74 69 6f 6e 3a 20 7b 0a 20 20  ransaction: {.  
17030 42 74 72 65 65 20 2a 70 42 74 3b 0a 0a 20 20 61  Btree *pBt;..  a
17040 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
17050 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d  0 && pOp->p1<db-
17060 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74  >nDb );.  assert
17070 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20  ( (p->btreeMask 
17080 26 20 28 28 28 79 44 62 4d 61 73 6b 29 31 29 3c  & (((yDbMask)1)<
17090 3c 70 4f 70 2d 3e 70 31 29 29 21 3d 30 20 29 3b  <pOp->p1))!=0 );
170a0 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62  .  pBt = db->aDb
170b0 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 0a  [pOp->p1].pBt;..
170c0 20 20 69 66 28 20 70 42 74 20 29 7b 0a 20 20 20    if( pBt ){.   
170d0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
170e0 65 65 42 65 67 69 6e 54 72 61 6e 73 28 70 42 74  eeBeginTrans(pBt
170f0 2c 20 70 4f 70 2d 3e 70 32 29 3b 0a 20 20 20 20  , pOp->p2);.    
17100 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42  if( rc==SQLITE_B
17110 55 53 59 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e  USY ){.      p->
17120 70 63 20 3d 20 70 63 3b 0a 20 20 20 20 20 20 70  pc = pc;.      p
17130 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53 51 4c 49  ->rc = rc = SQLI
17140 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 20 20 67  TE_BUSY;.      g
17150 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b  oto vdbe_return;
17160 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 72  .    }.    if( r
17170 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c!=SQLITE_OK ){.
17180 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74        goto abort
17190 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
171a0 20 20 20 7d 0a 0a 20 20 20 20 69 66 28 20 70 4f     }..    if( pO
171b0 70 2d 3e 70 32 20 26 26 20 70 2d 3e 75 73 65 73  p->p2 && p->uses
171c0 53 74 6d 74 4a 6f 75 72 6e 61 6c 20 0a 20 20 20  StmtJournal .   
171d0 20 20 26 26 20 28 64 62 2d 3e 61 75 74 6f 43 6f    && (db->autoCo
171e0 6d 6d 69 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 61  mmit==0 || db->a
171f0 63 74 69 76 65 56 64 62 65 43 6e 74 3e 31 29 20  ctiveVdbeCnt>1) 
17200 0a 20 20 20 20 29 7b 0a 20 20 20 20 20 20 61 73  .    ){.      as
17210 73 65 72 74 28 20 73 71 6c 69 74 65 33 42 74 72  sert( sqlite3Btr
17220 65 65 49 73 49 6e 54 72 61 6e 73 28 70 42 74 29  eeIsInTrans(pBt)
17230 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70 2d   );.      if( p-
17240 3e 69 53 74 61 74 65 6d 65 6e 74 3d 3d 30 20 29  >iStatement==0 )
17250 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  {.        assert
17260 28 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74  ( db->nStatement
17270 3e 3d 30 20 26 26 20 64 62 2d 3e 6e 53 61 76 65  >=0 && db->nSave
17280 70 6f 69 6e 74 3e 3d 30 20 29 3b 0a 20 20 20 20  point>=0 );.    
17290 20 20 20 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65      db->nStateme
172a0 6e 74 2b 2b 3b 20 0a 20 20 20 20 20 20 20 20 70  nt++; .        p
172b0 2d 3e 69 53 74 61 74 65 6d 65 6e 74 20 3d 20 64  ->iStatement = d
172c0 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 20 2b 20  b->nSavepoint + 
172d0 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 3b 0a  db->nStatement;.
172e0 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 72        }..      r
172f0 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62 53  c = sqlite3VtabS
17300 61 76 65 70 6f 69 6e 74 28 64 62 2c 20 53 41 56  avepoint(db, SAV
17310 45 50 4f 49 4e 54 5f 42 45 47 49 4e 2c 20 70 2d  EPOINT_BEGIN, p-
17320 3e 69 53 74 61 74 65 6d 65 6e 74 2d 31 29 3b 0a  >iStatement-1);.
17330 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51        if( rc==SQ
17340 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
17350 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
17360 74 72 65 65 42 65 67 69 6e 53 74 6d 74 28 70 42  treeBeginStmt(pB
17370 74 2c 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74  t, p->iStatement
17380 29 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20  );.      }..    
17390 20 20 2f 2a 20 53 74 6f 72 65 20 74 68 65 20 63    /* Store the c
173a0 75 72 72 65 6e 74 20 76 61 6c 75 65 20 6f 66 20  urrent value of 
173b0 74 68 65 20 64 61 74 61 62 61 73 65 20 68 61 6e  the database han
173c0 64 6c 65 73 20 64 65 66 65 72 72 65 64 20 63 6f  dles deferred co
173d0 6e 73 74 72 61 69 6e 74 0a 20 20 20 20 20 20 2a  nstraint.      *
173e0 2a 20 63 6f 75 6e 74 65 72 2e 20 49 66 20 74 68  * counter. If th
173f0 65 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e  e statement tran
17400 73 61 63 74 69 6f 6e 20 6e 65 65 64 73 20 74 6f  saction needs to
17410 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2c   be rolled back,
17420 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 20 76 61  .      ** the va
17430 6c 75 65 20 6f 66 20 74 68 69 73 20 63 6f 75 6e  lue of this coun
17440 74 65 72 20 6e 65 65 64 73 20 74 6f 20 62 65 20  ter needs to be 
17450 72 65 73 74 6f 72 65 64 20 74 6f 6f 2e 20 20 2a  restored too.  *
17460 2f 0a 20 20 20 20 20 20 70 2d 3e 6e 53 74 6d 74  /.      p->nStmt
17470 44 65 66 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44  DefCons = db->nD
17480 65 66 65 72 72 65 64 43 6f 6e 73 3b 0a 20 20 20  eferredCons;.   
17490 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a   }.  }.  break;.
174a0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65  }../* Opcode: Re
174b0 61 64 43 6f 6f 6b 69 65 20 50 31 20 50 32 20 50  adCookie P1 P2 P
174c0 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64  3 * *.**.** Read
174d0 20 63 6f 6f 6b 69 65 20 6e 75 6d 62 65 72 20 50   cookie number P
174e0 33 20 66 72 6f 6d 20 64 61 74 61 62 61 73 65 20  3 from database 
174f0 50 31 20 61 6e 64 20 77 72 69 74 65 20 69 74 20  P1 and write it 
17500 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  into register P2
17510 2e 0a 2a 2a 20 50 33 3d 3d 31 20 69 73 20 74 68  ..** P3==1 is th
17520 65 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e  e schema version
17530 2e 20 20 50 33 3d 3d 32 20 69 73 20 74 68 65 20  .  P3==2 is the 
17540 64 61 74 61 62 61 73 65 20 66 6f 72 6d 61 74 2e  database format.
17550 0a 2a 2a 20 50 33 3d 3d 33 20 69 73 20 74 68 65  .** P3==3 is the
17560 20 72 65 63 6f 6d 6d 65 6e 64 65 64 20 70 61 67   recommended pag
17570 65 72 20 63 61 63 68 65 20 73 69 7a 65 2c 20 61  er cache size, a
17580 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20 20 50 31  nd so forth.  P1
17590 3d 3d 30 20 69 73 0a 2a 2a 20 74 68 65 20 6d 61  ==0 is.** the ma
175a0 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  in database file
175b0 20 61 6e 64 20 50 31 3d 3d 31 20 69 73 20 74 68   and P1==1 is th
175c0 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
175d0 75 73 65 64 20 74 6f 20 73 74 6f 72 65 0a 2a 2a  used to store.**
175e0 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65   temporary table
175f0 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 6d  s..**.** There m
17600 75 73 74 20 62 65 20 61 20 72 65 61 64 2d 6c 6f  ust be a read-lo
17610 63 6b 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61  ck on the databa
17620 73 65 20 28 65 69 74 68 65 72 20 61 20 74 72 61  se (either a tra
17630 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 6d 75 73 74  nsaction.** must
17640 20 62 65 20 73 74 61 72 74 65 64 20 6f 72 20 74   be started or t
17650 68 65 72 65 20 6d 75 73 74 20 62 65 20 61 6e 20  here must be an 
17660 6f 70 65 6e 20 63 75 72 73 6f 72 29 20 62 65 66  open cursor) bef
17670 6f 72 65 0a 2a 2a 20 65 78 65 63 75 74 69 6e 67  ore.** executing
17680 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
17690 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65  n..*/.case OP_Re
176a0 61 64 43 6f 6f 6b 69 65 3a 20 7b 20 20 20 20 20  adCookie: {     
176b0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
176c0 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a  2-prerelease */.
176d0 20 20 69 6e 74 20 69 4d 65 74 61 3b 0a 20 20 69    int iMeta;.  i
176e0 6e 74 20 69 44 62 3b 0a 20 20 69 6e 74 20 69 43  nt iDb;.  int iC
176f0 6f 6f 6b 69 65 3b 0a 0a 20 20 69 44 62 20 3d 20  ookie;..  iDb = 
17700 70 4f 70 2d 3e 70 31 3b 0a 20 20 69 43 6f 6f 6b  pOp->p1;.  iCook
17710 69 65 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20  ie = pOp->p3;.  
17720 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c  assert( pOp->p3<
17730 53 51 4c 49 54 45 5f 4e 5f 42 54 52 45 45 5f 4d  SQLITE_N_BTREE_M
17740 45 54 41 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ETA );.  assert(
17750 20 69 44 62 3e 3d 30 20 26 26 20 69 44 62 3c 64   iDb>=0 && iDb<d
17760 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65  b->nDb );.  asse
17770 72 74 28 20 64 62 2d 3e 61 44 62 5b 69 44 62 5d  rt( db->aDb[iDb]
17780 2e 70 42 74 21 3d 30 20 29 3b 0a 20 20 61 73 73  .pBt!=0 );.  ass
17790 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61  ert( (p->btreeMa
177a0 73 6b 20 26 20 28 28 28 79 44 62 4d 61 73 6b 29  sk & (((yDbMask)
177b0 31 29 3c 3c 69 44 62 29 29 21 3d 30 20 29 3b 0a  1)<<iDb))!=0 );.
177c0 0a 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 47  .  sqlite3BtreeG
177d0 65 74 4d 65 74 61 28 64 62 2d 3e 61 44 62 5b 69  etMeta(db->aDb[i
177e0 44 62 5d 2e 70 42 74 2c 20 69 43 6f 6f 6b 69 65  Db].pBt, iCookie
177f0 2c 20 28 75 33 32 20 2a 29 26 69 4d 65 74 61 29  , (u32 *)&iMeta)
17800 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20  ;.  pOut->u.i = 
17810 69 4d 65 74 61 3b 0a 20 20 62 72 65 61 6b 3b 0a  iMeta;.  break;.
17820 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65  }../* Opcode: Se
17830 74 43 6f 6f 6b 69 65 20 50 31 20 50 32 20 50 33  tCookie P1 P2 P3
17840 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65   * *.**.** Write
17850 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
17860 72 65 67 69 73 74 65 72 20 50 33 20 28 69 6e 74  register P3 (int
17870 65 72 70 72 65 74 65 64 20 61 73 20 61 6e 20 69  erpreted as an i
17880 6e 74 65 67 65 72 29 0a 2a 2a 20 69 6e 74 6f 20  nteger).** into 
17890 63 6f 6f 6b 69 65 20 6e 75 6d 62 65 72 20 50 32  cookie number P2
178a0 20 6f 66 20 64 61 74 61 62 61 73 65 20 50 31 2e   of database P1.
178b0 20 20 50 32 3d 3d 31 20 69 73 20 74 68 65 20 73    P2==1 is the s
178c0 63 68 65 6d 61 20 76 65 72 73 69 6f 6e 2e 20 20  chema version.  
178d0 0a 2a 2a 20 50 32 3d 3d 32 20 69 73 20 74 68 65  .** P2==2 is the
178e0 20 64 61 74 61 62 61 73 65 20 66 6f 72 6d 61 74   database format
178f0 2e 20 50 32 3d 3d 33 20 69 73 20 74 68 65 20 72  . P2==3 is the r
17900 65 63 6f 6d 6d 65 6e 64 65 64 20 70 61 67 65 72  ecommended pager
17910 20 63 61 63 68 65 20 0a 2a 2a 20 73 69 7a 65 2c   cache .** size,
17920 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20 20   and so forth.  
17930 50 31 3d 3d 30 20 69 73 20 74 68 65 20 6d 61 69  P1==0 is the mai
17940 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  n database file 
17950 61 6e 64 20 50 31 3d 3d 31 20 69 73 20 74 68 65  and P1==1 is the
17960 20 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 66 69   .** database fi
17970 6c 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65  le used to store
17980 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65   temporary table
17990 73 2e 0a 2a 2a 0a 2a 2a 20 41 20 74 72 61 6e 73  s..**.** A trans
179a0 61 63 74 69 6f 6e 20 6d 75 73 74 20 62 65 20 73  action must be s
179b0 74 61 72 74 65 64 20 62 65 66 6f 72 65 20 65 78  tarted before ex
179c0 65 63 75 74 69 6e 67 20 74 68 69 73 20 6f 70 63  ecuting this opc
179d0 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ode..*/.case OP_
179e0 53 65 74 43 6f 6f 6b 69 65 3a 20 7b 20 20 20 20  SetCookie: {    
179f0 20 20 20 2f 2a 20 69 6e 33 20 2a 2f 0a 20 20 44     /* in3 */.  D
17a00 62 20 2a 70 44 62 3b 0a 20 20 61 73 73 65 72 74  b *pDb;.  assert
17a10 28 20 70 4f 70 2d 3e 70 32 3c 53 51 4c 49 54 45  ( pOp->p2<SQLITE
17a20 5f 4e 5f 42 54 52 45 45 5f 4d 45 54 41 20 29 3b  _N_BTREE_META );
17a30 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
17a40 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
17a50 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73  <db->nDb );.  as
17a60 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d  sert( (p->btreeM
17a70 61 73 6b 20 26 20 28 28 28 79 44 62 4d 61 73 6b  ask & (((yDbMask
17a80 29 31 29 3c 3c 70 4f 70 2d 3e 70 31 29 29 21 3d  )1)<<pOp->p1))!=
17a90 30 20 29 3b 0a 20 20 70 44 62 20 3d 20 26 64 62  0 );.  pDb = &db
17aa0 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  ->aDb[pOp->p1];.
17ab0 20 20 61 73 73 65 72 74 28 20 70 44 62 2d 3e 70    assert( pDb->p
17ac0 42 74 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  Bt!=0 );.  asser
17ad0 74 28 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61  t( sqlite3Schema
17ae0 4d 75 74 65 78 48 65 6c 64 28 64 62 2c 20 70 4f  MutexHeld(db, pO
17af0 70 2d 3e 70 31 2c 20 30 29 20 29 3b 0a 20 20 70  p->p1, 0) );.  p
17b00 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In3 = &aMem[pOp-
17b10 3e 70 33 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56  >p3];.  sqlite3V
17b20 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79  dbeMemIntegerify
17b30 28 70 49 6e 33 29 3b 0a 20 20 2f 2a 20 53 65 65  (pIn3);.  /* See
17b40 20 6e 6f 74 65 20 61 62 6f 75 74 20 69 6e 64 65   note about inde
17b50 78 20 73 68 69 66 74 69 6e 67 20 6f 6e 20 4f 50  x shifting on OP
17b60 5f 52 65 61 64 43 6f 6f 6b 69 65 20 2a 2f 0a 20  _ReadCookie */. 
17b70 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
17b80 65 65 55 70 64 61 74 65 4d 65 74 61 28 70 44 62  eeUpdateMeta(pDb
17b90 2d 3e 70 42 74 2c 20 70 4f 70 2d 3e 70 32 2c 20  ->pBt, pOp->p2, 
17ba0 28 69 6e 74 29 70 49 6e 33 2d 3e 75 2e 69 29 3b  (int)pIn3->u.i);
17bb0 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d  .  if( pOp->p2==
17bc0 42 54 52 45 45 5f 53 43 48 45 4d 41 5f 56 45 52  BTREE_SCHEMA_VER
17bd0 53 49 4f 4e 20 29 7b 0a 20 20 20 20 2f 2a 20 57  SION ){.    /* W
17be0 68 65 6e 20 74 68 65 20 73 63 68 65 6d 61 20 63  hen the schema c
17bf0 6f 6f 6b 69 65 20 63 68 61 6e 67 65 73 2c 20 72  ookie changes, r
17c00 65 63 6f 72 64 20 74 68 65 20 6e 65 77 20 63 6f  ecord the new co
17c10 6f 6b 69 65 20 69 6e 74 65 72 6e 61 6c 6c 79 20  okie internally 
17c20 2a 2f 0a 20 20 20 20 70 44 62 2d 3e 70 53 63 68  */.    pDb->pSch
17c30 65 6d 61 2d 3e 73 63 68 65 6d 61 5f 63 6f 6f 6b  ema->schema_cook
17c40 69 65 20 3d 20 28 69 6e 74 29 70 49 6e 33 2d 3e  ie = (int)pIn3->
17c50 75 2e 69 3b 0a 20 20 20 20 64 62 2d 3e 66 6c 61  u.i;.    db->fla
17c60 67 73 20 7c 3d 20 53 51 4c 49 54 45 5f 49 6e 74  gs |= SQLITE_Int
17c70 65 72 6e 43 68 61 6e 67 65 73 3b 0a 20 20 7d 65  ernChanges;.  }e
17c80 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d  lse if( pOp->p2=
17c90 3d 42 54 52 45 45 5f 46 49 4c 45 5f 46 4f 52 4d  =BTREE_FILE_FORM
17ca0 41 54 20 29 7b 0a 20 20 20 20 2f 2a 20 52 65 63  AT ){.    /* Rec
17cb0 6f 72 64 20 63 68 61 6e 67 65 73 20 69 6e 20 74  ord changes in t
17cc0 68 65 20 66 69 6c 65 20 66 6f 72 6d 61 74 20 2a  he file format *
17cd0 2f 0a 20 20 20 20 70 44 62 2d 3e 70 53 63 68 65  /.    pDb->pSche
17ce0 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 20  ma->file_format 
17cf0 3d 20 28 75 38 29 70 49 6e 33 2d 3e 75 2e 69 3b  = (u8)pIn3->u.i;
17d00 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e  .  }.  if( pOp->
17d10 70 31 3d 3d 31 20 29 7b 0a 20 20 20 20 2f 2a 20  p1==1 ){.    /* 
17d20 49 6e 76 61 6c 69 64 61 74 65 20 61 6c 6c 20 70  Invalidate all p
17d30 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e  repared statemen
17d40 74 73 20 77 68 65 6e 65 76 65 72 20 74 68 65 20  ts whenever the 
17d50 54 45 4d 50 20 64 61 74 61 62 61 73 65 0a 20 20  TEMP database.  
17d60 20 20 2a 2a 20 73 63 68 65 6d 61 20 69 73 20 63    ** schema is c
17d70 68 61 6e 67 65 64 2e 20 20 54 69 63 6b 65 74 20  hanged.  Ticket 
17d80 23 31 36 34 34 20 2a 2f 0a 20 20 20 20 73 71 6c  #1644 */.    sql
17d90 69 74 65 33 45 78 70 69 72 65 50 72 65 70 61 72  ite3ExpirePrepar
17da0 65 64 53 74 61 74 65 6d 65 6e 74 73 28 64 62 29  edStatements(db)
17db0 3b 0a 20 20 20 20 70 2d 3e 65 78 70 69 72 65 64  ;.    p->expired
17dc0 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 62 72 65 61   = 0;.  }.  brea
17dd0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
17de0 20 56 65 72 69 66 79 43 6f 6f 6b 69 65 20 50 31   VerifyCookie P1
17df0 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
17e00 20 43 68 65 63 6b 20 74 68 65 20 76 61 6c 75 65   Check the value
17e10 20 6f 66 20 67 6c 6f 62 61 6c 20 64 61 74 61 62   of global datab
17e20 61 73 65 20 70 61 72 61 6d 65 74 65 72 20 6e 75  ase parameter nu
17e30 6d 62 65 72 20 30 20 28 74 68 65 0a 2a 2a 20 73  mber 0 (the.** s
17e40 63 68 65 6d 61 20 76 65 72 73 69 6f 6e 29 20 61  chema version) a
17e50 6e 64 20 6d 61 6b 65 20 73 75 72 65 20 69 74 20  nd make sure it 
17e60 69 73 20 65 71 75 61 6c 20 74 6f 20 50 32 20 61  is equal to P2 a
17e70 6e 64 20 74 68 61 74 20 74 68 65 0a 2a 2a 20 67  nd that the.** g
17e80 65 6e 65 72 61 74 69 6f 6e 20 63 6f 75 6e 74 65  eneration counte
17e90 72 20 6f 6e 20 74 68 65 20 6c 6f 63 61 6c 20 73  r on the local s
17ea0 63 68 65 6d 61 20 70 61 72 73 65 20 65 71 75 61  chema parse equa
17eb0 6c 73 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 50 31 20  ls P3..**.** P1 
17ec0 69 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20  is the database 
17ed0 6e 75 6d 62 65 72 20 77 68 69 63 68 20 69 73 20  number which is 
17ee0 30 20 66 6f 72 20 74 68 65 20 6d 61 69 6e 20 64  0 for the main d
17ef0 61 74 61 62 61 73 65 20 66 69 6c 65 0a 2a 2a 20  atabase file.** 
17f00 61 6e 64 20 31 20 66 6f 72 20 74 68 65 20 66 69  and 1 for the fi
17f10 6c 65 20 68 6f 6c 64 69 6e 67 20 74 65 6d 70 6f  le holding tempo
17f20 72 61 72 79 20 74 61 62 6c 65 73 20 61 6e 64 20  rary tables and 
17f30 73 6f 6d 65 20 68 69 67 68 65 72 20 6e 75 6d 62  some higher numb
17f40 65 72 0a 2a 2a 20 66 6f 72 20 61 75 78 69 6c 69  er.** for auxili
17f50 61 72 79 20 64 61 74 61 62 61 73 65 73 2e 0a 2a  ary databases..*
17f60 2a 0a 2a 2a 20 54 68 65 20 63 6f 6f 6b 69 65 20  *.** The cookie 
17f70 63 68 61 6e 67 65 73 20 69 74 73 20 76 61 6c 75  changes its valu
17f80 65 20 77 68 65 6e 65 76 65 72 20 74 68 65 20 64  e whenever the d
17f90 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 63  atabase schema c
17fa0 68 61 6e 67 65 73 2e 0a 2a 2a 20 54 68 69 73 20  hanges..** This 
17fb0 6f 70 65 72 61 74 69 6f 6e 20 69 73 20 75 73 65  operation is use
17fc0 64 20 74 6f 20 64 65 74 65 63 74 20 77 68 65 6e  d to detect when
17fd0 20 74 68 61 74 20 74 68 65 20 63 6f 6f 6b 69 65   that the cookie
17fe0 20 68 61 73 20 63 68 61 6e 67 65 64 0a 2a 2a 20   has changed.** 
17ff0 61 6e 64 20 74 68 61 74 20 74 68 65 20 63 75 72  and that the cur
18000 72 65 6e 74 20 70 72 6f 63 65 73 73 20 6e 65 65  rent process nee
18010 64 73 20 74 6f 20 72 65 72 65 61 64 20 74 68 65  ds to reread the
18020 20 73 63 68 65 6d 61 2e 0a 2a 2a 0a 2a 2a 20 45   schema..**.** E
18030 69 74 68 65 72 20 61 20 74 72 61 6e 73 61 63 74  ither a transact
18040 69 6f 6e 20 6e 65 65 64 73 20 74 6f 20 68 61 76  ion needs to hav
18050 65 20 62 65 65 6e 20 73 74 61 72 74 65 64 20 6f  e been started o
18060 72 20 61 6e 20 4f 50 5f 4f 70 65 6e 20 6e 65 65  r an OP_Open nee
18070 64 73 0a 2a 2a 20 74 6f 20 62 65 20 65 78 65 63  ds.** to be exec
18080 75 74 65 64 20 28 74 6f 20 65 73 74 61 62 6c 69  uted (to establi
18090 73 68 20 61 20 72 65 61 64 20 6c 6f 63 6b 29 20  sh a read lock) 
180a0 62 65 66 6f 72 65 20 74 68 69 73 20 6f 70 63 6f  before this opco
180b0 64 65 20 69 73 0a 2a 2a 20 69 6e 76 6f 6b 65 64  de is.** invoked
180c0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 65 72  ..*/.case OP_Ver
180d0 69 66 79 43 6f 6f 6b 69 65 3a 20 7b 0a 20 20 69  ifyCookie: {.  i
180e0 6e 74 20 69 4d 65 74 61 3b 0a 20 20 69 6e 74 20  nt iMeta;.  int 
180f0 69 47 65 6e 3b 0a 20 20 42 74 72 65 65 20 2a 70  iGen;.  Btree *p
18100 42 74 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  Bt;..  assert( p
18110 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
18120 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a  ->p1<db->nDb );.
18130 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74    assert( (p->bt
18140 72 65 65 4d 61 73 6b 20 26 20 28 28 28 79 44 62  reeMask & (((yDb
18150 4d 61 73 6b 29 31 29 3c 3c 70 4f 70 2d 3e 70 31  Mask)1)<<pOp->p1
18160 29 29 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  ))!=0 );.  asser
18170 74 28 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61  t( sqlite3Schema
18180 4d 75 74 65 78 48 65 6c 64 28 64 62 2c 20 70 4f  MutexHeld(db, pO
18190 70 2d 3e 70 31 2c 20 30 29 20 29 3b 0a 20 20 70  p->p1, 0) );.  p
181a0 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70  Bt = db->aDb[pOp
181b0 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20 20 69 66 28  ->p1].pBt;.  if(
181c0 20 70 42 74 20 29 7b 0a 20 20 20 20 73 71 6c 69   pBt ){.    sqli
181d0 74 65 33 42 74 72 65 65 47 65 74 4d 65 74 61 28  te3BtreeGetMeta(
181e0 70 42 74 2c 20 42 54 52 45 45 5f 53 43 48 45 4d  pBt, BTREE_SCHEM
181f0 41 5f 56 45 52 53 49 4f 4e 2c 20 28 75 33 32 20  A_VERSION, (u32 
18200 2a 29 26 69 4d 65 74 61 29 3b 0a 20 20 20 20 69  *)&iMeta);.    i
18210 47 65 6e 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f  Gen = db->aDb[pO
18220 70 2d 3e 70 31 5d 2e 70 53 63 68 65 6d 61 2d 3e  p->p1].pSchema->
18230 69 47 65 6e 65 72 61 74 69 6f 6e 3b 0a 20 20 7d  iGeneration;.  }
18240 65 6c 73 65 7b 0a 20 20 20 20 69 47 65 6e 20 3d  else{.    iGen =
18250 20 69 4d 65 74 61 20 3d 20 30 3b 0a 20 20 7d 0a   iMeta = 0;.  }.
18260 20 20 69 66 28 20 69 4d 65 74 61 21 3d 70 4f 70    if( iMeta!=pOp
18270 2d 3e 70 32 20 7c 7c 20 69 47 65 6e 21 3d 70 4f  ->p2 || iGen!=pO
18280 70 2d 3e 70 33 20 29 7b 0a 20 20 20 20 73 71 6c  p->p3 ){.    sql
18290 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 70  ite3DbFree(db, p
182a0 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20  ->zErrMsg);.    
182b0 70 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 73 71 6c  p->zErrMsg = sql
182c0 69 74 65 33 44 62 53 74 72 44 75 70 28 64 62 2c  ite3DbStrDup(db,
182d0 20 22 64 61 74 61 62 61 73 65 20 73 63 68 65 6d   "database schem
182e0 61 20 68 61 73 20 63 68 61 6e 67 65 64 22 29 3b  a has changed");
182f0 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20 73  .    /* If the s
18300 63 68 65 6d 61 2d 63 6f 6f 6b 69 65 20 66 72 6f  chema-cookie fro
18310 6d 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  m the database f
18320 69 6c 65 20 6d 61 74 63 68 65 73 20 74 68 65 20  ile matches the 
18330 63 6f 6f 6b 69 65 20 0a 20 20 20 20 2a 2a 20 73  cookie .    ** s
18340 74 6f 72 65 64 20 77 69 74 68 20 74 68 65 20 69  tored with the i
18350 6e 2d 6d 65 6d 6f 72 79 20 72 65 70 72 65 73 65  n-memory represe
18360 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 73  ntation of the s
18370 63 68 65 6d 61 2c 20 64 6f 0a 20 20 20 20 2a 2a  chema, do.    **
18380 20 6e 6f 74 20 72 65 6c 6f 61 64 20 74 68 65 20   not reload the 
18390 73 63 68 65 6d 61 20 66 72 6f 6d 20 74 68 65 20  schema from the 
183a0 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 20  database file.. 
183b0 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 49 66 20     **.    ** If 
183c0 76 69 72 74 75 61 6c 2d 74 61 62 6c 65 73 20 61  virtual-tables a
183d0 72 65 20 69 6e 20 75 73 65 2c 20 74 68 69 73 20  re in use, this 
183e0 69 73 20 6e 6f 74 20 6a 75 73 74 20 61 6e 20 6f  is not just an o
183f0 70 74 69 6d 69 7a 61 74 69 6f 6e 2e 0a 20 20 20  ptimization..   
18400 20 2a 2a 20 4f 66 74 65 6e 2c 20 76 2d 74 61 62   ** Often, v-tab
18410 6c 65 73 20 73 74 6f 72 65 20 74 68 65 69 72 20  les store their 
18420 64 61 74 61 20 69 6e 20 6f 74 68 65 72 20 53 51  data in other SQ
18430 4c 69 74 65 20 74 61 62 6c 65 73 2c 20 77 68 69  Lite tables, whi
18440 63 68 0a 20 20 20 20 2a 2a 20 61 72 65 20 71 75  ch.    ** are qu
18450 65 72 69 65 64 20 66 72 6f 6d 20 77 69 74 68 69  eried from withi
18460 6e 20 78 4e 65 78 74 28 29 20 61 6e 64 20 6f 74  n xNext() and ot
18470 68 65 72 20 76 2d 74 61 62 6c 65 20 6d 65 74 68  her v-table meth
18480 6f 64 73 20 75 73 69 6e 67 0a 20 20 20 20 2a 2a  ods using.    **
18490 20 70 72 65 70 61 72 65 64 20 71 75 65 72 69 65   prepared querie
184a0 73 2e 20 49 66 20 73 75 63 68 20 61 20 71 75 65  s. If such a que
184b0 72 79 20 69 73 20 6f 75 74 2d 6f 66 2d 64 61 74  ry is out-of-dat
184c0 65 2c 20 77 65 20 64 6f 20 6e 6f 74 20 77 61 6e  e, we do not wan
184d0 74 20 74 6f 0a 20 20 20 20 2a 2a 20 64 69 73 63  t to.    ** disc
184e0 61 72 64 20 74 68 65 20 64 61 74 61 62 61 73 65  ard the database
184f0 20 73 63 68 65 6d 61 2c 20 61 73 20 74 68 65 20   schema, as the 
18500 75 73 65 72 20 63 6f 64 65 20 69 6d 70 6c 65 6d  user code implem
18510 65 6e 74 69 6e 67 20 74 68 65 0a 20 20 20 20 2a  enting the.    *
18520 2a 20 76 2d 74 61 62 6c 65 20 77 6f 75 6c 64 20  * v-table would 
18530 68 61 76 65 20 74 6f 20 62 65 20 72 65 61 64 79  have to be ready
18540 20 66 6f 72 20 74 68 65 20 73 71 6c 69 74 65 33   for the sqlite3
18550 5f 76 74 61 62 20 73 74 72 75 63 74 75 72 65 20  _vtab structure 
18560 69 74 73 65 6c 66 0a 20 20 20 20 2a 2a 20 74 6f  itself.    ** to
18570 20 62 65 20 69 6e 76 61 6c 69 64 61 74 65 64 20   be invalidated 
18580 77 68 65 6e 65 76 65 72 20 73 71 6c 69 74 65 33  whenever sqlite3
18590 5f 73 74 65 70 28 29 20 69 73 20 63 61 6c 6c 65  _step() is calle
185a0 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 0a 20  d from within . 
185b0 20 20 20 2a 2a 20 61 20 76 2d 74 61 62 6c 65 20     ** a v-table 
185c0 6d 65 74 68 6f 64 2e 0a 20 20 20 20 2a 2f 0a 20  method..    */. 
185d0 20 20 20 69 66 28 20 64 62 2d 3e 61 44 62 5b 70     if( db->aDb[p
185e0 4f 70 2d 3e 70 31 5d 2e 70 53 63 68 65 6d 61 2d  Op->p1].pSchema-
185f0 3e 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 21 3d  >schema_cookie!=
18600 69 4d 65 74 61 20 29 7b 0a 20 20 20 20 20 20 73  iMeta ){.      s
18610 71 6c 69 74 65 33 52 65 73 65 74 49 6e 74 65 72  qlite3ResetInter
18620 6e 61 6c 53 63 68 65 6d 61 28 64 62 2c 20 70 4f  nalSchema(db, pO
18630 70 2d 3e 70 31 29 3b 0a 20 20 20 20 7d 0a 0a 20  p->p1);.    }.. 
18640 20 20 20 70 2d 3e 65 78 70 69 72 65 64 20 3d 20     p->expired = 
18650 31 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49  1;.    rc = SQLI
18660 54 45 5f 53 43 48 45 4d 41 3b 0a 20 20 7d 0a 20  TE_SCHEMA;.  }. 
18670 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
18680 63 6f 64 65 3a 20 4f 70 65 6e 52 65 61 64 20 50  code: OpenRead P
18690 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
186a0 0a 2a 2a 20 4f 70 65 6e 20 61 20 72 65 61 64 2d  .** Open a read-
186b0 6f 6e 6c 79 20 63 75 72 73 6f 72 20 66 6f 72 20  only cursor for 
186c0 74 68 65 20 64 61 74 61 62 61 73 65 20 74 61 62  the database tab
186d0 6c 65 20 77 68 6f 73 65 20 72 6f 6f 74 20 70 61  le whose root pa
186e0 67 65 20 69 73 0a 2a 2a 20 50 32 20 69 6e 20 61  ge is.** P2 in a
186f0 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20   database file. 
18700 20 54 68 65 20 64 61 74 61 62 61 73 65 20 66 69   The database fi
18710 6c 65 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64  le is determined
18720 20 62 79 20 50 33 2e 20 0a 2a 2a 20 50 33 3d 3d   by P3. .** P3==
18730 30 20 6d 65 61 6e 73 20 74 68 65 20 6d 61 69 6e  0 means the main
18740 20 64 61 74 61 62 61 73 65 2c 20 50 33 3d 3d 31   database, P3==1
18750 20 6d 65 61 6e 73 20 74 68 65 20 64 61 74 61 62   means the datab
18760 61 73 65 20 75 73 65 64 20 66 6f 72 20 0a 2a 2a  ase used for .**
18770 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65   temporary table
18780 73 2c 20 61 6e 64 20 50 33 3e 31 20 6d 65 61 6e  s, and P3>1 mean
18790 73 20 75 73 65 64 20 74 68 65 20 63 6f 72 72 65  s used the corre
187a0 73 70 6f 6e 64 69 6e 67 20 61 74 74 61 63 68 65  sponding attache
187b0 64 0a 2a 2a 20 64 61 74 61 62 61 73 65 2e 20 20  d.** database.  
187c0 47 69 76 65 20 74 68 65 20 6e 65 77 20 63 75 72  Give the new cur
187d0 73 6f 72 20 61 6e 20 69 64 65 6e 74 69 66 69 65  sor an identifie
187e0 72 20 6f 66 20 50 31 2e 20 20 54 68 65 20 50 31  r of P1.  The P1
187f0 0a 2a 2a 20 76 61 6c 75 65 73 20 6e 65 65 64 20  .** values need 
18800 6e 6f 74 20 62 65 20 63 6f 6e 74 69 67 75 6f 75  not be contiguou
18810 73 20 62 75 74 20 61 6c 6c 20 50 31 20 76 61 6c  s but all P1 val
18820 75 65 73 20 73 68 6f 75 6c 64 20 62 65 20 73 6d  ues should be sm
18830 61 6c 6c 20 69 6e 74 65 67 65 72 73 2e 0a 2a 2a  all integers..**
18840 20 49 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20   It is an error 
18850 66 6f 72 20 50 31 20 74 6f 20 62 65 20 6e 65 67  for P1 to be neg
18860 61 74 69 76 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  ative..**.** If 
18870 50 35 21 3d 30 20 74 68 65 6e 20 75 73 65 20 74  P5!=0 then use t
18880 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65  he content of re
18890 67 69 73 74 65 72 20 50 32 20 61 73 20 74 68 65  gister P2 as the
188a0 20 72 6f 6f 74 20 70 61 67 65 2c 20 6e 6f 74 0a   root page, not.
188b0 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  ** the value of 
188c0 50 32 20 69 74 73 65 6c 66 2e 0a 2a 2a 0a 2a 2a  P2 itself..**.**
188d0 20 54 68 65 72 65 20 77 69 6c 6c 20 62 65 20 61   There will be a
188e0 20 72 65 61 64 20 6c 6f 63 6b 20 6f 6e 20 74 68   read lock on th
188f0 65 20 64 61 74 61 62 61 73 65 20 77 68 65 6e 65  e database whene
18900 76 65 72 20 74 68 65 72 65 20 69 73 20 61 6e 0a  ver there is an.
18910 2a 2a 20 6f 70 65 6e 20 63 75 72 73 6f 72 2e 20  ** open cursor. 
18920 20 49 66 20 74 68 65 20 64 61 74 61 62 61 73 65   If the database
18930 20 77 61 73 20 75 6e 6c 6f 63 6b 65 64 20 70 72   was unlocked pr
18940 69 6f 72 20 74 6f 20 74 68 69 73 20 69 6e 73 74  ior to this inst
18950 72 75 63 74 69 6f 6e 0a 2a 2a 20 74 68 65 6e 20  ruction.** then 
18960 61 20 72 65 61 64 20 6c 6f 63 6b 20 69 73 20 61  a read lock is a
18970 63 71 75 69 72 65 64 20 61 73 20 70 61 72 74 20  cquired as part 
18980 6f 66 20 74 68 69 73 20 69 6e 73 74 72 75 63 74  of this instruct
18990 69 6f 6e 2e 20 20 41 20 72 65 61 64 0a 2a 2a 20  ion.  A read.** 
189a0 6c 6f 63 6b 20 61 6c 6c 6f 77 73 20 6f 74 68 65  lock allows othe
189b0 72 20 70 72 6f 63 65 73 73 65 73 20 74 6f 20 72  r processes to r
189c0 65 61 64 20 74 68 65 20 64 61 74 61 62 61 73 65  ead the database
189d0 20 62 75 74 20 70 72 6f 68 69 62 69 74 73 0a 2a   but prohibits.*
189e0 2a 20 61 6e 79 20 6f 74 68 65 72 20 70 72 6f 63  * any other proc
189f0 65 73 73 20 66 72 6f 6d 20 6d 6f 64 69 66 79 69  ess from modifyi
18a00 6e 67 20 74 68 65 20 64 61 74 61 62 61 73 65 2e  ng the database.
18a10 20 20 54 68 65 20 72 65 61 64 20 6c 6f 63 6b 20    The read lock 
18a20 69 73 0a 2a 2a 20 72 65 6c 65 61 73 65 64 20 77  is.** released w
18a30 68 65 6e 20 61 6c 6c 20 63 75 72 73 6f 72 73 20  hen all cursors 
18a40 61 72 65 20 63 6c 6f 73 65 64 2e 20 20 49 66 20  are closed.  If 
18a50 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
18a60 20 61 74 74 65 6d 70 74 73 0a 2a 2a 20 74 6f 20   attempts.** to 
18a70 67 65 74 20 61 20 72 65 61 64 20 6c 6f 63 6b 20  get a read lock 
18a80 62 75 74 20 66 61 69 6c 73 2c 20 74 68 65 20 73  but fails, the s
18a90 63 72 69 70 74 20 74 65 72 6d 69 6e 61 74 65 73  cript terminates
18aa0 20 77 69 74 68 20 61 6e 0a 2a 2a 20 53 51 4c 49   with an.** SQLI
18ab0 54 45 5f 42 55 53 59 20 65 72 72 6f 72 20 63 6f  TE_BUSY error co
18ac0 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34  de..**.** The P4
18ad0 20 76 61 6c 75 65 20 6d 61 79 20 62 65 20 65 69   value may be ei
18ae0 74 68 65 72 20 61 6e 20 69 6e 74 65 67 65 72 20  ther an integer 
18af0 28 50 34 5f 49 4e 54 33 32 29 20 6f 72 20 61 20  (P4_INT32) or a 
18b00 70 6f 69 6e 74 65 72 20 74 6f 0a 2a 2a 20 61 20  pointer to.** a 
18b10 4b 65 79 49 6e 66 6f 20 73 74 72 75 63 74 75 72  KeyInfo structur
18b20 65 20 28 50 34 5f 4b 45 59 49 4e 46 4f 29 2e 20  e (P4_KEYINFO). 
18b30 49 66 20 69 74 20 69 73 20 61 20 70 6f 69 6e 74  If it is a point
18b40 65 72 20 74 6f 20 61 20 4b 65 79 49 6e 66 6f 20  er to a KeyInfo 
18b50 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 2c 20 74  .** structure, t
18b60 68 65 6e 20 73 61 69 64 20 73 74 72 75 63 74 75  hen said structu
18b70 72 65 20 64 65 66 69 6e 65 73 20 74 68 65 20 63  re defines the c
18b80 6f 6e 74 65 6e 74 20 61 6e 64 20 63 6f 6c 6c 61  ontent and colla
18b90 74 69 6e 67 20 0a 2a 2a 20 73 65 71 75 65 6e 63  ting .** sequenc
18ba0 65 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20 62  e of the index b
18bb0 65 69 6e 67 20 6f 70 65 6e 65 64 2e 20 4f 74 68  eing opened. Oth
18bc0 65 72 77 69 73 65 2c 20 69 66 20 50 34 20 69 73  erwise, if P4 is
18bd0 20 61 6e 20 69 6e 74 65 67 65 72 20 0a 2a 2a 20   an integer .** 
18be0 76 61 6c 75 65 2c 20 69 74 20 69 73 20 73 65 74  value, it is set
18bf0 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   to the number o
18c00 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65  f columns in the
18c10 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53 65   table..**.** Se
18c20 65 20 61 6c 73 6f 20 4f 70 65 6e 57 72 69 74 65  e also OpenWrite
18c30 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
18c40 4f 70 65 6e 57 72 69 74 65 20 50 31 20 50 32 20  OpenWrite P1 P2 
18c50 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 4f  P3 P4 P5.**.** O
18c60 70 65 6e 20 61 20 72 65 61 64 2f 77 72 69 74 65  pen a read/write
18c70 20 63 75 72 73 6f 72 20 6e 61 6d 65 64 20 50 31   cursor named P1
18c80 20 6f 6e 20 74 68 65 20 74 61 62 6c 65 20 6f 72   on the table or
18c90 20 69 6e 64 65 78 20 77 68 6f 73 65 20 72 6f 6f   index whose roo
18ca0 74 0a 2a 2a 20 70 61 67 65 20 69 73 20 50 32 2e  t.** page is P2.
18cb0 20 20 4f 72 20 69 66 20 50 35 21 3d 30 20 75 73    Or if P5!=0 us
18cc0 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  e the content of
18cd0 20 72 65 67 69 73 74 65 72 20 50 32 20 74 6f 20   register P2 to 
18ce0 66 69 6e 64 20 74 68 65 0a 2a 2a 20 72 6f 6f 74  find the.** root
18cf0 20 70 61 67 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65   page..**.** The
18d00 20 50 34 20 76 61 6c 75 65 20 6d 61 79 20 62 65   P4 value may be
18d10 20 65 69 74 68 65 72 20 61 6e 20 69 6e 74 65 67   either an integ
18d20 65 72 20 28 50 34 5f 49 4e 54 33 32 29 20 6f 72  er (P4_INT32) or
18d30 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 0a 2a 2a   a pointer to.**
18d40 20 61 20 4b 65 79 49 6e 66 6f 20 73 74 72 75 63   a KeyInfo struc
18d50 74 75 72 65 20 28 50 34 5f 4b 45 59 49 4e 46 4f  ture (P4_KEYINFO
18d60 29 2e 20 49 66 20 69 74 20 69 73 20 61 20 70 6f  ). If it is a po
18d70 69 6e 74 65 72 20 74 6f 20 61 20 4b 65 79 49 6e  inter to a KeyIn
18d80 66 6f 20 0a 2a 2a 20 73 74 72 75 63 74 75 72 65  fo .** structure
18d90 2c 20 74 68 65 6e 20 73 61 69 64 20 73 74 72 75  , then said stru
18da0 63 74 75 72 65 20 64 65 66 69 6e 65 73 20 74 68  cture defines th
18db0 65 20 63 6f 6e 74 65 6e 74 20 61 6e 64 20 63 6f  e content and co
18dc0 6c 6c 61 74 69 6e 67 20 0a 2a 2a 20 73 65 71 75  llating .** sequ
18dd0 65 6e 63 65 20 6f 66 20 74 68 65 20 69 6e 64 65  ence of the inde
18de0 78 20 62 65 69 6e 67 20 6f 70 65 6e 65 64 2e 20  x being opened. 
18df0 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20 50 34  Otherwise, if P4
18e00 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 0a   is an integer .
18e10 2a 2a 20 76 61 6c 75 65 2c 20 69 74 20 69 73 20  ** value, it is 
18e20 73 65 74 20 74 6f 20 74 68 65 20 6e 75 6d 62 65  set to the numbe
18e30 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
18e40 74 68 65 20 74 61 62 6c 65 2c 20 6f 72 20 74 6f  the table, or to
18e50 20 74 68 65 0a 2a 2a 20 6c 61 72 67 65 73 74 20   the.** largest 
18e60 69 6e 64 65 78 20 6f 66 20 61 6e 79 20 63 6f 6c  index of any col
18e70 75 6d 6e 20 6f 66 20 74 68 65 20 74 61 62 6c 65  umn of the table
18e80 20 74 68 61 74 20 69 73 20 61 63 74 75 61 6c 6c   that is actuall
18e90 79 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68  y used..**.** Th
18ea0 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 77  is instruction w
18eb0 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 4f  orks just like O
18ec0 70 65 6e 52 65 61 64 20 65 78 63 65 70 74 20 74  penRead except t
18ed0 68 61 74 20 69 74 20 6f 70 65 6e 73 20 74 68 65  hat it opens the
18ee0 20 63 75 72 73 6f 72 0a 2a 2a 20 69 6e 20 72 65   cursor.** in re
18ef0 61 64 2f 77 72 69 74 65 20 6d 6f 64 65 2e 20 20  ad/write mode.  
18f00 46 6f 72 20 61 20 67 69 76 65 6e 20 74 61 62 6c  For a given tabl
18f10 65 2c 20 74 68 65 72 65 20 63 61 6e 20 62 65 20  e, there can be 
18f20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 72 65 61 64  one or more read
18f30 2d 6f 6e 6c 79 0a 2a 2a 20 63 75 72 73 6f 72 73  -only.** cursors
18f40 20 6f 72 20 61 20 73 69 6e 67 6c 65 20 72 65 61   or a single rea
18f50 64 2f 77 72 69 74 65 20 63 75 72 73 6f 72 20 62  d/write cursor b
18f60 75 74 20 6e 6f 74 20 62 6f 74 68 2e 0a 2a 2a 0a  ut not both..**.
18f70 2a 2a 20 53 65 65 20 61 6c 73 6f 20 4f 70 65 6e  ** See also Open
18f80 52 65 61 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  Read..*/.case OP
18f90 5f 4f 70 65 6e 52 65 61 64 3a 0a 63 61 73 65 20  _OpenRead:.case 
18fa0 4f 50 5f 4f 70 65 6e 57 72 69 74 65 3a 20 7b 0a  OP_OpenWrite: {.
18fb0 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b 0a 20 20    int nField;.  
18fc0 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66  KeyInfo *pKeyInf
18fd0 6f 3b 0a 20 20 69 6e 74 20 70 32 3b 0a 20 20 69  o;.  int p2;.  i
18fe0 6e 74 20 69 44 62 3b 0a 20 20 69 6e 74 20 77 72  nt iDb;.  int wr
18ff0 46 6c 61 67 3b 0a 20 20 42 74 72 65 65 20 2a 70  Flag;.  Btree *p
19000 58 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  X;.  VdbeCursor 
19010 2a 70 43 75 72 3b 0a 20 20 44 62 20 2a 70 44 62  *pCur;.  Db *pDb
19020 3b 0a 0a 20 20 69 66 28 20 70 2d 3e 65 78 70 69  ;..  if( p->expi
19030 72 65 64 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  red ){.    rc = 
19040 53 51 4c 49 54 45 5f 41 42 4f 52 54 3b 0a 20 20  SQLITE_ABORT;.  
19050 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20    break;.  }..  
19060 6e 46 69 65 6c 64 20 3d 20 30 3b 0a 20 20 70 4b  nField = 0;.  pK
19070 65 79 49 6e 66 6f 20 3d 20 30 3b 0a 20 20 70 32  eyInfo = 0;.  p2
19080 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 69 44   = pOp->p2;.  iD
19090 62 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61  b = pOp->p3;.  a
190a0 73 73 65 72 74 28 20 69 44 62 3e 3d 30 20 26 26  ssert( iDb>=0 &&
190b0 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a   iDb<db->nDb );.
190c0 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74    assert( (p->bt
190d0 72 65 65 4d 61 73 6b 20 26 20 28 28 28 79 44 62  reeMask & (((yDb
190e0 4d 61 73 6b 29 31 29 3c 3c 69 44 62 29 29 21 3d  Mask)1)<<iDb))!=
190f0 30 20 29 3b 0a 20 20 70 44 62 20 3d 20 26 64 62  0 );.  pDb = &db
19100 2d 3e 61 44 62 5b 69 44 62 5d 3b 0a 20 20 70 58  ->aDb[iDb];.  pX
19110 20 3d 20 70 44 62 2d 3e 70 42 74 3b 0a 20 20 61   = pDb->pBt;.  a
19120 73 73 65 72 74 28 20 70 58 21 3d 30 20 29 3b 0a  ssert( pX!=0 );.
19130 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64    if( pOp->opcod
19140 65 3d 3d 4f 50 5f 4f 70 65 6e 57 72 69 74 65 20  e==OP_OpenWrite 
19150 29 7b 0a 20 20 20 20 77 72 46 6c 61 67 20 3d 20  ){.    wrFlag = 
19160 31 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 73  1;.    assert( s
19170 71 6c 69 74 65 33 53 63 68 65 6d 61 4d 75 74 65  qlite3SchemaMute
19180 78 48 65 6c 64 28 64 62 2c 20 69 44 62 2c 20 30  xHeld(db, iDb, 0
19190 29 20 29 3b 0a 20 20 20 20 69 66 28 20 70 44 62  ) );.    if( pDb
191a0 2d 3e 70 53 63 68 65 6d 61 2d 3e 66 69 6c 65 5f  ->pSchema->file_
191b0 66 6f 72 6d 61 74 20 3c 20 70 2d 3e 6d 69 6e 57  format < p->minW
191c0 72 69 74 65 46 69 6c 65 46 6f 72 6d 61 74 20 29  riteFileFormat )
191d0 7b 0a 20 20 20 20 20 20 70 2d 3e 6d 69 6e 57 72  {.      p->minWr
191e0 69 74 65 46 69 6c 65 46 6f 72 6d 61 74 20 3d 20  iteFileFormat = 
191f0 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 66 69  pDb->pSchema->fi
19200 6c 65 5f 66 6f 72 6d 61 74 3b 0a 20 20 20 20 7d  le_format;.    }
19210 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 77 72  .  }else{.    wr
19220 46 6c 61 67 20 3d 20 30 3b 0a 20 20 7d 0a 20 20  Flag = 0;.  }.  
19230 69 66 28 20 70 4f 70 2d 3e 70 35 20 29 7b 0a 20  if( pOp->p5 ){. 
19240 20 20 20 61 73 73 65 72 74 28 20 70 32 3e 30 20     assert( p2>0 
19250 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
19260 32 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20  2<=p->nMem );.  
19270 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70    pIn2 = &aMem[p
19280 32 5d 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  2];.    assert( 
19290 6d 65 6d 49 73 56 61 6c 69 64 28 70 49 6e 32 29  memIsValid(pIn2)
192a0 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
192b0 28 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn2->flags & M
192c0 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 0a 20 20  EM_Int)!=0 );.  
192d0 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
192e0 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e 32 29  Integerify(pIn2)
192f0 3b 0a 20 20 20 20 70 32 20 3d 20 28 69 6e 74 29  ;.    p2 = (int)
19300 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20 20 20 2f  pIn2->u.i;.    /
19310 2a 20 54 68 65 20 70 32 20 76 61 6c 75 65 20 61  * The p2 value a
19320 6c 77 61 79 73 20 63 6f 6d 65 73 20 66 72 6f 6d  lways comes from
19330 20 61 20 70 72 69 6f 72 20 4f 50 5f 43 72 65 61   a prior OP_Crea
19340 74 65 54 61 62 6c 65 20 6f 70 63 6f 64 65 20 61  teTable opcode a
19350 6e 64 0a 20 20 20 20 2a 2a 20 74 68 61 74 20 6f  nd.    ** that o
19360 70 63 6f 64 65 20 77 69 6c 6c 20 61 6c 77 61 79  pcode will alway
19370 73 20 73 65 74 20 74 68 65 20 70 32 20 76 61 6c  s set the p2 val
19380 75 65 20 74 6f 20 32 20 6f 72 20 6d 6f 72 65 20  ue to 2 or more 
19390 6f 72 20 65 6c 73 65 20 66 61 69 6c 2e 0a 20 20  or else fail..  
193a0 20 20 2a 2a 20 49 66 20 74 68 65 72 65 20 77 65    ** If there we
193b0 72 65 20 61 20 66 61 69 6c 75 72 65 2c 20 74 68  re a failure, th
193c0 65 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65  e prepared state
193d0 6d 65 6e 74 20 77 6f 75 6c 64 20 68 61 76 65 20  ment would have 
193e0 68 61 6c 74 65 64 0a 20 20 20 20 2a 2a 20 62 65  halted.    ** be
193f0 66 6f 72 65 20 72 65 61 63 68 69 6e 67 20 74 68  fore reaching th
19400 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20  is instruction. 
19410 2a 2f 0a 20 20 20 20 69 66 28 20 4e 45 56 45 52  */.    if( NEVER
19420 28 70 32 3c 32 29 20 29 20 7b 0a 20 20 20 20 20  (p2<2) ) {.     
19430 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52   rc = SQLITE_COR
19440 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20 20  RUPT_BKPT;.     
19450 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
19460 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a  to_error;.    }.
19470 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70    }.  if( pOp->p
19480 34 74 79 70 65 3d 3d 50 34 5f 4b 45 59 49 4e 46  4type==P4_KEYINF
19490 4f 20 29 7b 0a 20 20 20 20 70 4b 65 79 49 6e 66  O ){.    pKeyInf
194a0 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79  o = pOp->p4.pKey
194b0 49 6e 66 6f 3b 0a 20 20 20 20 70 4b 65 79 49 6e  Info;.    pKeyIn
194c0 66 6f 2d 3e 65 6e 63 20 3d 20 45 4e 43 28 70 2d  fo->enc = ENC(p-
194d0 3e 64 62 29 3b 0a 20 20 20 20 6e 46 69 65 6c 64  >db);.    nField
194e0 20 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69   = pKeyInfo->nFi
194f0 65 6c 64 2b 31 3b 0a 20 20 7d 65 6c 73 65 20 69  eld+1;.  }else i
19500 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  f( pOp->p4type==
19510 50 34 5f 49 4e 54 33 32 20 29 7b 0a 20 20 20 20  P4_INT32 ){.    
19520 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 34  nField = pOp->p4
19530 2e 69 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74  .i;.  }.  assert
19540 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a  ( pOp->p1>=0 );.
19550 20 20 70 43 75 72 20 3d 20 61 6c 6c 6f 63 61 74    pCur = allocat
19560 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e  eCursor(p, pOp->
19570 70 31 2c 20 6e 46 69 65 6c 64 2c 20 69 44 62 2c  p1, nField, iDb,
19580 20 31 29 3b 0a 20 20 69 66 28 20 70 43 75 72 3d   1);.  if( pCur=
19590 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  =0 ) goto no_mem
195a0 3b 0a 20 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f  ;.  pCur->nullRo
195b0 77 20 3d 20 31 3b 0a 20 20 70 43 75 72 2d 3e 69  w = 1;.  pCur->i
195c0 73 4f 72 64 65 72 65 64 20 3d 20 31 3b 0a 20 20  sOrdered = 1;.  
195d0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
195e0 65 43 75 72 73 6f 72 28 70 58 2c 20 70 32 2c 20  eCursor(pX, p2, 
195f0 77 72 46 6c 61 67 2c 20 70 4b 65 79 49 6e 66 6f  wrFlag, pKeyInfo
19600 2c 20 70 43 75 72 2d 3e 70 43 75 72 73 6f 72 29  , pCur->pCursor)
19610 3b 0a 20 20 70 43 75 72 2d 3e 70 4b 65 79 49 6e  ;.  pCur->pKeyIn
19620 66 6f 20 3d 20 70 4b 65 79 49 6e 66 6f 3b 0a 0a  fo = pKeyInfo;..
19630 20 20 2f 2a 20 53 69 6e 63 65 20 69 74 20 70 65    /* Since it pe
19640 72 66 6f 72 6d 73 20 6e 6f 20 6d 65 6d 6f 72 79  rforms no memory
19650 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 6f 72 20 49   allocation or I
19660 4f 2c 20 74 68 65 20 6f 6e 6c 79 20 76 61 6c 75  O, the only valu
19670 65 20 74 68 61 74 0a 20 20 2a 2a 20 73 71 6c 69  e that.  ** sqli
19680 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 28 29  te3BtreeCursor()
19690 20 6d 61 79 20 72 65 74 75 72 6e 20 69 73 20 53   may return is S
196a0 51 4c 49 54 45 5f 4f 4b 2e 20 2a 2f 0a 20 20 61  QLITE_OK. */.  a
196b0 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54  ssert( rc==SQLIT
196c0 45 5f 4f 4b 20 29 3b 0a 0a 20 20 2f 2a 20 53 65  E_OK );..  /* Se
196d0 74 20 74 68 65 20 56 64 62 65 43 75 72 73 6f 72  t the VdbeCursor
196e0 2e 69 73 54 61 62 6c 65 20 61 6e 64 20 69 73 49  .isTable and isI
196f0 6e 64 65 78 20 76 61 72 69 61 62 6c 65 73 2e 20  ndex variables. 
19700 50 72 65 76 69 6f 75 73 20 76 65 72 73 69 6f 6e  Previous version
19710 73 20 6f 66 0a 20 20 2a 2a 20 53 51 4c 69 74 65  s of.  ** SQLite
19720 20 75 73 65 64 20 74 6f 20 63 68 65 63 6b 20 69   used to check i
19730 66 20 74 68 65 20 72 6f 6f 74 2d 70 61 67 65 20  f the root-page 
19740 66 6c 61 67 73 20 77 65 72 65 20 73 61 6e 65 20  flags were sane 
19750 61 74 20 74 68 69 73 20 70 6f 69 6e 74 0a 20 20  at this point.  
19760 2a 2a 20 61 6e 64 20 72 65 70 6f 72 74 20 64 61  ** and report da
19770 74 61 62 61 73 65 20 63 6f 72 72 75 70 74 69 6f  tabase corruptio
19780 6e 20 69 66 20 74 68 65 79 20 77 65 72 65 20 6e  n if they were n
19790 6f 74 2c 20 62 75 74 20 74 68 69 73 20 63 68 65  ot, but this che
197a0 63 6b 20 68 61 73 0a 20 20 2a 2a 20 73 69 6e 63  ck has.  ** sinc
197b0 65 20 6d 6f 76 65 64 20 69 6e 74 6f 20 74 68 65  e moved into the
197c0 20 62 74 72 65 65 20 6c 61 79 65 72 2e 20 20 2a   btree layer.  *
197d0 2f 20 20 0a 20 20 70 43 75 72 2d 3e 69 73 54 61  /  .  pCur->isTa
197e0 62 6c 65 20 3d 20 70 4f 70 2d 3e 70 34 74 79 70  ble = pOp->p4typ
197f0 65 21 3d 50 34 5f 4b 45 59 49 4e 46 4f 3b 0a 20  e!=P4_KEYINFO;. 
19800 20 70 43 75 72 2d 3e 69 73 49 6e 64 65 78 20 3d   pCur->isIndex =
19810 20 21 70 43 75 72 2d 3e 69 73 54 61 62 6c 65 3b   !pCur->isTable;
19820 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
19830 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 45 70 68 65  Opcode: OpenEphe
19840 6d 65 72 61 6c 20 50 31 20 50 32 20 2a 20 50 34  meral P1 P2 * P4
19850 20 50 35 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61   P5.**.** Open a
19860 20 6e 65 77 20 63 75 72 73 6f 72 20 50 31 20 74   new cursor P1 t
19870 6f 20 61 20 74 72 61 6e 73 69 65 6e 74 20 74 61  o a transient ta
19880 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 63 75 72 73  ble..** The curs
19890 6f 72 20 69 73 20 61 6c 77 61 79 73 20 6f 70 65  or is always ope
198a0 6e 65 64 20 72 65 61 64 2f 77 72 69 74 65 20 65  ned read/write e
198b0 76 65 6e 20 69 66 20 0a 2a 2a 20 74 68 65 20 6d  ven if .** the m
198c0 61 69 6e 20 64 61 74 61 62 61 73 65 20 69 73 20  ain database is 
198d0 72 65 61 64 2d 6f 6e 6c 79 2e 20 20 54 68 65 20  read-only.  The 
198e0 65 70 68 65 6d 65 72 61 6c 0a 2a 2a 20 74 61 62  ephemeral.** tab
198f0 6c 65 20 69 73 20 64 65 6c 65 74 65 64 20 61 75  le is deleted au
19900 74 6f 6d 61 74 69 63 61 6c 6c 79 20 77 68 65 6e  tomatically when
19910 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 63   the cursor is c
19920 6c 6f 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 50 32 20  losed..**.** P2 
19930 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  is the number of
19940 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20   columns in the 
19950 65 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 2e  ephemeral table.
19960 0a 2a 2a 20 54 68 65 20 63 75 72 73 6f 72 20 70  .** The cursor p
19970 6f 69 6e 74 73 20 74 6f 20 61 20 42 54 72 65 65  oints to a BTree
19980 20 74 61 62 6c 65 20 69 66 20 50 34 3d 3d 30 20   table if P4==0 
19990 61 6e 64 20 74 6f 20 61 20 42 54 72 65 65 20 69  and to a BTree i
199a0 6e 64 65 78 0a 2a 2a 20 69 66 20 50 34 20 69 73  ndex.** if P4 is
199b0 20 6e 6f 74 20 30 2e 20 20 49 66 20 50 34 20 69   not 0.  If P4 i
199c0 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 69 74 20 70  s not NULL, it p
199d0 6f 69 6e 74 73 20 74 6f 20 61 20 4b 65 79 49 6e  oints to a KeyIn
199e0 66 6f 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20  fo structure.** 
199f0 74 68 61 74 20 64 65 66 69 6e 65 73 20 74 68 65  that defines the
19a00 20 66 6f 72 6d 61 74 20 6f 66 20 6b 65 79 73 20   format of keys 
19a10 69 6e 20 74 68 65 20 69 6e 64 65 78 2e 0a 2a 2a  in the index..**
19a20 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
19a30 77 61 73 20 6f 6e 63 65 20 63 61 6c 6c 65 64 20  was once called 
19a40 4f 70 65 6e 54 65 6d 70 2e 20 20 42 75 74 20 74  OpenTemp.  But t
19a50 68 61 74 20 63 72 65 61 74 65 64 0a 2a 2a 20 63  hat created.** c
19a60 6f 6e 66 75 73 69 6f 6e 20 62 65 63 61 75 73 65  onfusion because
19a70 20 74 68 65 20 74 65 72 6d 20 22 74 65 6d 70 20   the term "temp 
19a80 74 61 62 6c 65 22 2c 20 6d 69 67 68 74 20 72 65  table", might re
19a90 66 65 72 20 65 69 74 68 65 72 0a 2a 2a 20 74 6f  fer either.** to
19aa0 20 61 20 54 45 4d 50 20 74 61 62 6c 65 20 61 74   a TEMP table at
19ab0 20 74 68 65 20 53 51 4c 20 6c 65 76 65 6c 2c 20   the SQL level, 
19ac0 6f 72 20 74 6f 20 61 20 74 61 62 6c 65 20 6f 70  or to a table op
19ad0 65 6e 65 64 20 62 79 0a 2a 2a 20 74 68 69 73 20  ened by.** this 
19ae0 6f 70 63 6f 64 65 2e 20 20 54 68 65 6e 20 74 68  opcode.  Then th
19af0 69 73 20 6f 70 63 6f 64 65 20 77 61 73 20 63 61  is opcode was ca
19b00 6c 6c 20 4f 70 65 6e 56 69 72 74 75 61 6c 2e 20  ll OpenVirtual. 
19b10 20 42 75 74 0a 2a 2a 20 74 68 61 74 20 63 72 65   But.** that cre
19b20 61 74 65 64 20 63 6f 6e 66 75 73 69 6f 6e 20 77  ated confusion w
19b30 69 74 68 20 74 68 65 20 77 68 6f 6c 65 20 76 69  ith the whole vi
19b40 72 74 75 61 6c 2d 74 61 62 6c 65 20 69 64 65 61  rtual-table idea
19b50 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 35 20 70  ..**.** The P5 p
19b60 61 72 61 6d 65 74 65 72 20 63 61 6e 20 62 65 20  arameter can be 
19b70 61 20 6d 61 73 6b 20 6f 66 20 74 68 65 20 42 54  a mask of the BT
19b80 52 45 45 5f 2a 20 66 6c 61 67 73 20 64 65 66 69  REE_* flags defi
19b90 6e 65 64 0a 2a 2a 20 69 6e 20 62 74 72 65 65 2e  ned.** in btree.
19ba0 68 2e 20 20 54 68 65 73 65 20 66 6c 61 67 73 20  h.  These flags 
19bb0 63 6f 6e 74 72 6f 6c 20 61 73 70 65 63 74 73 20  control aspects 
19bc0 6f 66 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e  of the operation
19bd0 20 6f 66 0a 2a 2a 20 74 68 65 20 62 74 72 65 65   of.** the btree
19be0 2e 20 20 54 68 65 20 42 54 52 45 45 5f 4f 4d 49  .  The BTREE_OMI
19bf0 54 5f 4a 4f 55 52 4e 41 4c 20 61 6e 64 20 42 54  T_JOURNAL and BT
19c00 52 45 45 5f 53 49 4e 47 4c 45 20 66 6c 61 67 73  REE_SINGLE flags
19c10 20 61 72 65 0a 2a 2a 20 61 64 64 65 64 20 61 75   are.** added au
19c20 74 6f 6d 61 74 69 63 61 6c 6c 79 2e 0a 2a 2f 0a  tomatically..*/.
19c30 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 41  /* Opcode: OpenA
19c40 75 74 6f 69 6e 64 65 78 20 50 31 20 50 32 20 2a  utoindex P1 P2 *
19c50 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73   P4 *.**.** This
19c60 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 74 68   opcode works th
19c70 65 20 73 61 6d 65 20 61 73 20 4f 50 5f 4f 70 65  e same as OP_Ope
19c80 6e 45 70 68 65 6d 65 72 61 6c 2e 20 20 49 74 20  nEphemeral.  It 
19c90 68 61 73 20 61 0a 2a 2a 20 64 69 66 66 65 72 65  has a.** differe
19ca0 6e 74 20 6e 61 6d 65 20 74 6f 20 64 69 73 74 69  nt name to disti
19cb0 6e 67 75 69 73 68 20 69 74 73 20 75 73 65 2e 20  nguish its use. 
19cc0 20 54 61 62 6c 65 73 20 63 72 65 61 74 65 64 20   Tables created 
19cd0 75 73 69 6e 67 0a 2a 2a 20 62 79 20 74 68 69 73  using.** by this
19ce0 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 62 65 20   opcode will be 
19cf0 75 73 65 64 20 66 6f 72 20 61 75 74 6f 6d 61 74  used for automat
19d00 69 63 61 6c 6c 79 20 63 72 65 61 74 65 64 20 74  ically created t
19d10 72 61 6e 73 69 65 6e 74 0a 2a 2a 20 69 6e 64 69  ransient.** indi
19d20 63 65 73 20 69 6e 20 6a 6f 69 6e 73 2e 0a 2a 2f  ces in joins..*/
19d30 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 41 75 74  .case OP_OpenAut
19d40 6f 69 6e 64 65 78 3a 20 0a 63 61 73 65 20 4f 50  oindex: .case OP
19d50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 3a 20  _OpenEphemeral: 
19d60 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  {.  VdbeCursor *
19d70 70 43 78 3b 0a 20 20 73 74 61 74 69 63 20 63 6f  pCx;.  static co
19d80 6e 73 74 20 69 6e 74 20 76 66 73 46 6c 61 67 73  nst int vfsFlags
19d90 20 3d 20 0a 20 20 20 20 20 20 53 51 4c 49 54 45   = .      SQLITE
19da0 5f 4f 50 45 4e 5f 52 45 41 44 57 52 49 54 45 20  _OPEN_READWRITE 
19db0 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f  |.      SQLITE_O
19dc0 50 45 4e 5f 43 52 45 41 54 45 20 7c 0a 20 20 20  PEN_CREATE |.   
19dd0 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 45     SQLITE_OPEN_E
19de0 58 43 4c 55 53 49 56 45 20 7c 0a 20 20 20 20 20  XCLUSIVE |.     
19df0 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 44 45 4c   SQLITE_OPEN_DEL
19e00 45 54 45 4f 4e 43 4c 4f 53 45 20 7c 0a 20 20 20  ETEONCLOSE |.   
19e10 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 54     SQLITE_OPEN_T
19e20 52 41 4e 53 49 45 4e 54 5f 44 42 3b 0a 0a 20 20  RANSIENT_DB;..  
19e30 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
19e40 3d 30 20 29 3b 0a 20 20 70 43 78 20 3d 20 61 6c  =0 );.  pCx = al
19e50 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20  locateCursor(p, 
19e60 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 32  pOp->p1, pOp->p2
19e70 2c 20 2d 31 2c 20 31 29 3b 0a 20 20 69 66 28 20  , -1, 1);.  if( 
19e80 70 43 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f  pCx==0 ) goto no
19e90 5f 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e 6e 75 6c  _mem;.  pCx->nul
19ea0 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 72 63 20 3d  lRow = 1;.  rc =
19eb0 20 73 71 6c 69 74 65 33 42 74 72 65 65 4f 70 65   sqlite3BtreeOpe
19ec0 6e 28 64 62 2d 3e 70 56 66 73 2c 20 30 2c 20 64  n(db->pVfs, 0, d
19ed0 62 2c 20 26 70 43 78 2d 3e 70 42 74 2c 20 0a 20  b, &pCx->pBt, . 
19ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ef0 20 20 20 20 20 20 20 42 54 52 45 45 5f 4f 4d 49         BTREE_OMI
19f00 54 5f 4a 4f 55 52 4e 41 4c 20 7c 20 42 54 52 45  T_JOURNAL | BTRE
19f10 45 5f 53 49 4e 47 4c 45 20 7c 20 70 4f 70 2d 3e  E_SINGLE | pOp->
19f20 70 35 2c 20 76 66 73 46 6c 61 67 73 29 3b 0a 20  p5, vfsFlags);. 
19f30 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
19f40 4f 4b 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73  OK ){.    rc = s
19f50 71 6c 69 74 65 33 42 74 72 65 65 42 65 67 69 6e  qlite3BtreeBegin
19f60 54 72 61 6e 73 28 70 43 78 2d 3e 70 42 74 2c 20  Trans(pCx->pBt, 
19f70 31 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72 63  1);.  }.  if( rc
19f80 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
19f90 20 20 20 2f 2a 20 49 66 20 61 20 74 72 61 6e 73     /* If a trans
19fa0 69 65 6e 74 20 69 6e 64 65 78 20 69 73 20 72 65  ient index is re
19fb0 71 75 69 72 65 64 2c 20 63 72 65 61 74 65 20 69  quired, create i
19fc0 74 20 62 79 20 63 61 6c 6c 69 6e 67 0a 20 20 20  t by calling.   
19fd0 20 2a 2a 20 73 71 6c 69 74 65 33 42 74 72 65 65   ** sqlite3Btree
19fe0 43 72 65 61 74 65 54 61 62 6c 65 28 29 20 77 69  CreateTable() wi
19ff0 74 68 20 74 68 65 20 42 54 52 45 45 5f 42 4c 4f  th the BTREE_BLO
1a000 42 4b 45 59 20 66 6c 61 67 20 62 65 66 6f 72 65  BKEY flag before
1a010 0a 20 20 20 20 2a 2a 20 6f 70 65 6e 69 6e 67 20  .    ** opening 
1a020 69 74 2e 20 49 66 20 61 20 74 72 61 6e 73 69 65  it. If a transie
1a030 6e 74 20 74 61 62 6c 65 20 69 73 20 72 65 71 75  nt table is requ
1a040 69 72 65 64 2c 20 6a 75 73 74 20 75 73 65 20 74  ired, just use t
1a050 68 65 0a 20 20 20 20 2a 2a 20 61 75 74 6f 6d 61  he.    ** automa
1a060 74 69 63 61 6c 6c 79 20 63 72 65 61 74 65 64 20  tically created 
1a070 74 61 62 6c 65 20 77 69 74 68 20 72 6f 6f 74 2d  table with root-
1a080 70 61 67 65 20 31 20 28 61 6e 20 42 4c 4f 42 5f  page 1 (an BLOB_
1a090 49 4e 54 4b 45 59 20 74 61 62 6c 65 29 2e 0a 20  INTKEY table).. 
1a0a0 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 70 4f     */.    if( pO
1a0b0 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 20 29  p->p4.pKeyInfo )
1a0c0 7b 0a 20 20 20 20 20 20 69 6e 74 20 70 67 6e 6f  {.      int pgno
1a0d0 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
1a0e0 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
1a0f0 4b 45 59 49 4e 46 4f 20 29 3b 0a 20 20 20 20 20  KEYINFO );.     
1a100 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
1a110 65 65 43 72 65 61 74 65 54 61 62 6c 65 28 70 43  eeCreateTable(pC
1a120 78 2d 3e 70 42 74 2c 20 26 70 67 6e 6f 2c 20 42  x->pBt, &pgno, B
1a130 54 52 45 45 5f 42 4c 4f 42 4b 45 59 20 7c 20 70  TREE_BLOBKEY | p
1a140 4f 70 2d 3e 70 35 29 3b 20 0a 20 20 20 20 20 20  Op->p5); .      
1a150 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
1a160 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73  K ){.        ass
1a170 65 72 74 28 20 70 67 6e 6f 3d 3d 4d 41 53 54 45  ert( pgno==MASTE
1a180 52 5f 52 4f 4f 54 2b 31 20 29 3b 0a 20 20 20 20  R_ROOT+1 );.    
1a190 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
1a1a0 42 74 72 65 65 43 75 72 73 6f 72 28 70 43 78 2d  BtreeCursor(pCx-
1a1b0 3e 70 42 74 2c 20 70 67 6e 6f 2c 20 31 2c 20 0a  >pBt, pgno, 1, .
1a1c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a1d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a1e0 28 4b 65 79 49 6e 66 6f 2a 29 70 4f 70 2d 3e 70  (KeyInfo*)pOp->p
1a1f0 34 2e 7a 2c 20 70 43 78 2d 3e 70 43 75 72 73 6f  4.z, pCx->pCurso
1a200 72 29 3b 0a 20 20 20 20 20 20 20 20 70 43 78 2d  r);.        pCx-
1a210 3e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d  >pKeyInfo = pOp-
1a220 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20  >p4.pKeyInfo;.  
1a230 20 20 20 20 20 20 70 43 78 2d 3e 70 4b 65 79 49        pCx->pKeyI
1a240 6e 66 6f 2d 3e 65 6e 63 20 3d 20 45 4e 43 28 70  nfo->enc = ENC(p
1a250 2d 3e 64 62 29 3b 0a 20 20 20 20 20 20 7d 0a 20  ->db);.      }. 
1a260 20 20 20 20 20 70 43 78 2d 3e 69 73 54 61 62 6c       pCx->isTabl
1a270 65 20 3d 20 30 3b 0a 20 20 20 20 7d 65 6c 73 65  e = 0;.    }else
1a280 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  {.      rc = sql
1a290 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 28  ite3BtreeCursor(
1a2a0 70 43 78 2d 3e 70 42 74 2c 20 4d 41 53 54 45 52  pCx->pBt, MASTER
1a2b0 5f 52 4f 4f 54 2c 20 31 2c 20 30 2c 20 70 43 78  _ROOT, 1, 0, pCx
1a2c0 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20  ->pCursor);.    
1a2d0 20 20 70 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d    pCx->isTable =
1a2e0 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20   1;.    }.  }.  
1a2f0 70 43 78 2d 3e 69 73 4f 72 64 65 72 65 64 20 3d  pCx->isOrdered =
1a300 20 28 70 4f 70 2d 3e 70 35 21 3d 42 54 52 45 45   (pOp->p5!=BTREE
1a310 5f 55 4e 4f 52 44 45 52 45 44 29 3b 0a 20 20 70  _UNORDERED);.  p
1a320 43 78 2d 3e 69 73 49 6e 64 65 78 20 3d 20 21 70  Cx->isIndex = !p
1a330 43 78 2d 3e 69 73 54 61 62 6c 65 3b 0a 20 20 62  Cx->isTable;.  b
1a340 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
1a350 64 65 3a 20 4f 70 65 6e 53 6f 72 74 65 72 20 50  de: OpenSorter P
1a360 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a  1 P2 * P4 *.**.*
1a370 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77 6f  * This opcode wo
1a380 72 6b 73 20 6c 69 6b 65 20 4f 50 5f 4f 70 65 6e  rks like OP_Open
1a390 45 70 68 65 6d 65 72 61 6c 20 65 78 63 65 70 74  Ephemeral except
1a3a0 20 74 68 61 74 20 69 74 20 6f 70 65 6e 73 0a 2a   that it opens.*
1a3b0 2a 20 61 20 74 72 61 6e 73 69 65 6e 74 20 69 6e  * a transient in
1a3c0 64 65 78 20 74 68 61 74 20 69 73 20 73 70 65 63  dex that is spec
1a3d0 69 66 69 63 61 6c 6c 79 20 64 65 73 69 67 6e 65  ifically designe
1a3e0 64 20 74 6f 20 73 6f 72 74 20 6c 61 72 67 65 0a  d to sort large.
1a3f0 2a 2a 20 74 61 62 6c 65 73 20 75 73 69 6e 67 20  ** tables using 
1a400 61 6e 20 65 78 74 65 72 6e 61 6c 20 6d 65 72 67  an external merg
1a410 65 2d 73 6f 72 74 20 61 6c 67 6f 72 69 74 68 6d  e-sort algorithm
1a420 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72  ..*/.case OP_Sor
1a430 74 65 72 4f 70 65 6e 3a 20 7b 0a 20 20 56 64 62  terOpen: {.  Vdb
1a440 65 43 75 72 73 6f 72 20 2a 70 43 78 3b 0a 23 69  eCursor *pCx;.#i
1a450 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
1a460 54 5f 4d 45 52 47 45 5f 53 4f 52 54 0a 20 20 70  T_MERGE_SORT.  p
1a470 43 78 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72  Cx = allocateCur
1a480 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20  sor(p, pOp->p1, 
1a490 70 4f 70 2d 3e 70 32 2c 20 2d 31 2c 20 31 29 3b  pOp->p2, -1, 1);
1a4a0 0a 20 20 69 66 28 20 70 43 78 3d 3d 30 20 29 20  .  if( pCx==0 ) 
1a4b0 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70  goto no_mem;.  p
1a4c0 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20 70  Cx->pKeyInfo = p
1a4d0 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 3b  Op->p4.pKeyInfo;
1a4e0 0a 20 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f  .  pCx->pKeyInfo
1a4f0 2d 3e 65 6e 63 20 3d 20 45 4e 43 28 70 2d 3e 64  ->enc = ENC(p->d
1a500 62 29 3b 0a 20 20 70 43 78 2d 3e 69 73 53 6f 72  b);.  pCx->isSor
1a510 74 65 72 20 3d 20 31 3b 0a 20 20 72 63 20 3d 20  ter = 1;.  rc = 
1a520 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65  sqlite3VdbeSorte
1a530 72 49 6e 69 74 28 64 62 2c 20 70 43 78 29 3b 0a  rInit(db, pCx);.
1a540 23 65 6c 73 65 0a 20 20 70 4f 70 2d 3e 6f 70 63  #else.  pOp->opc
1a550 6f 64 65 20 3d 20 4f 50 5f 4f 70 65 6e 45 70 68  ode = OP_OpenEph
1a560 65 6d 65 72 61 6c 3b 0a 20 20 70 63 2d 2d 3b 0a  emeral;.  pc--;.
1a570 23 65 6e 64 69 66 0a 20 20 62 72 65 61 6b 3b 0a  #endif.  break;.
1a580 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70  }../* Opcode: Op
1a590 65 6e 50 73 65 75 64 6f 20 50 31 20 50 32 20 50  enPseudo P1 P2 P
1a5a0 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e  3 * *.**.** Open
1a5b0 20 61 20 6e 65 77 20 63 75 72 73 6f 72 20 74 68   a new cursor th
1a5c0 61 74 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 66  at points to a f
1a5d0 61 6b 65 20 74 61 62 6c 65 20 74 68 61 74 20 63  ake table that c
1a5e0 6f 6e 74 61 69 6e 73 20 61 20 73 69 6e 67 6c 65  ontains a single
1a5f0 0a 2a 2a 20 72 6f 77 20 6f 66 20 64 61 74 61 2e  .** row of data.
1a600 20 20 54 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66    The content of
1a610 20 74 68 61 74 20 6f 6e 65 20 72 6f 77 20 69 6e   that one row in
1a620 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
1a630 6d 65 6d 6f 72 79 0a 2a 2a 20 72 65 67 69 73 74  memory.** regist
1a640 65 72 20 50 32 2e 20 20 49 6e 20 6f 74 68 65 72  er P2.  In other
1a650 20 77 6f 72 64 73 2c 20 63 75 72 73 6f 72 20 50   words, cursor P
1a660 31 20 62 65 63 6f 6d 65 73 20 61 6e 20 61 6c 69  1 becomes an ali
1a670 61 73 20 66 6f 72 20 74 68 65 20 0a 2a 2a 20 4d  as for the .** M
1a680 45 4d 5f 42 6c 6f 62 20 63 6f 6e 74 65 6e 74 20  EM_Blob content 
1a690 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 72 65 67  contained in reg
1a6a0 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  ister P2..**.** 
1a6b0 41 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 63  A pseudo-table c
1a6c0 72 65 61 74 65 64 20 62 79 20 74 68 69 73 20 6f  reated by this o
1a6d0 70 63 6f 64 65 20 69 73 20 75 73 65 64 20 74 6f  pcode is used to
1a6e0 20 68 6f 6c 64 20 61 20 73 69 6e 67 6c 65 0a 2a   hold a single.*
1a6f0 2a 20 72 6f 77 20 6f 75 74 70 75 74 20 66 72 6f  * row output fro
1a700 6d 20 74 68 65 20 73 6f 72 74 65 72 20 73 6f 20  m the sorter so 
1a710 74 68 61 74 20 74 68 65 20 72 6f 77 20 63 61 6e  that the row can
1a720 20 62 65 20 64 65 63 6f 6d 70 6f 73 65 64 20 69   be decomposed i
1a730 6e 74 6f 0a 2a 2a 20 69 6e 64 69 76 69 64 75 61  nto.** individua
1a740 6c 20 63 6f 6c 75 6d 6e 73 20 75 73 69 6e 67 20  l columns using 
1a750 74 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70  the OP_Column op
1a760 63 6f 64 65 2e 20 20 54 68 65 20 4f 50 5f 43 6f  code.  The OP_Co
1a770 6c 75 6d 6e 20 6f 70 63 6f 64 65 0a 2a 2a 20 69  lumn opcode.** i
1a780 73 20 74 68 65 20 6f 6e 6c 79 20 63 75 72 73 6f  s the only curso
1a790 72 20 6f 70 63 6f 64 65 20 74 68 61 74 20 77 6f  r opcode that wo
1a7a0 72 6b 73 20 77 69 74 68 20 61 20 70 73 65 75 64  rks with a pseud
1a7b0 6f 2d 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 50  o-table..**.** P
1a7c0 33 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20  3 is the number 
1a7d0 6f 66 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65  of fields in the
1a7e0 20 72 65 63 6f 72 64 73 20 74 68 61 74 20 77 69   records that wi
1a7f0 6c 6c 20 62 65 20 73 74 6f 72 65 64 20 62 79 0a  ll be stored by.
1a800 2a 2a 20 74 68 65 20 70 73 65 75 64 6f 2d 74 61  ** the pseudo-ta
1a810 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ble..*/.case OP_
1a820 4f 70 65 6e 50 73 65 75 64 6f 3a 20 7b 0a 20 20  OpenPseudo: {.  
1a830 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 78 3b  VdbeCursor *pCx;
1a840 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
1a850 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 70 43 78 20  >p1>=0 );.  pCx 
1a860 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72  = allocateCursor
1a870 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70  (p, pOp->p1, pOp
1a880 2d 3e 70 33 2c 20 2d 31 2c 20 30 29 3b 0a 20 20  ->p3, -1, 0);.  
1a890 69 66 28 20 70 43 78 3d 3d 30 20 29 20 67 6f 74  if( pCx==0 ) got
1a8a0 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 78 2d  o no_mem;.  pCx-
1a8b0 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20  >nullRow = 1;.  
1a8c0 70 43 78 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65  pCx->pseudoTable
1a8d0 52 65 67 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20  Reg = pOp->p2;. 
1a8e0 20 70 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d 20   pCx->isTable = 
1a8f0 31 3b 0a 20 20 70 43 78 2d 3e 69 73 49 6e 64 65  1;.  pCx->isInde
1a900 78 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a  x = 0;.  break;.
1a910 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6c  }../* Opcode: Cl
1a920 6f 73 65 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a  ose P1 * * * *.*
1a930 2a 0a 2a 2a 20 43 6c 6f 73 65 20 61 20 63 75 72  *.** Close a cur
1a940 73 6f 72 20 70 72 65 76 69 6f 75 73 6c 79 20 6f  sor previously o
1a950 70 65 6e 65 64 20 61 73 20 50 31 2e 20 20 49 66  pened as P1.  If
1a960 20 50 31 20 69 73 20 6e 6f 74 0a 2a 2a 20 63 75   P1 is not.** cu
1a970 72 72 65 6e 74 6c 79 20 6f 70 65 6e 2c 20 74 68  rrently open, th
1a980 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69  is instruction i
1a990 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 63 61  s a no-op..*/.ca
1a9a0 73 65 20 4f 50 5f 43 6c 6f 73 65 3a 20 7b 0a 20  se OP_Close: {. 
1a9b0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
1a9c0 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
1a9d0 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 73  ->nCursor );.  s
1a9e0 71 6c 69 74 65 33 56 64 62 65 46 72 65 65 43 75  qlite3VdbeFreeCu
1a9f0 72 73 6f 72 28 70 2c 20 70 2d 3e 61 70 43 73 72  rsor(p, p->apCsr
1aa00 5b 70 4f 70 2d 3e 70 31 5d 29 3b 0a 20 20 70 2d  [pOp->p1]);.  p-
1aa10 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 20  >apCsr[pOp->p1] 
1aa20 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  = 0;.  break;.}.
1aa30 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b  ./* Opcode: Seek
1aa40 47 65 20 50 31 20 50 32 20 50 33 20 50 34 20 2a  Ge P1 P2 P3 P4 *
1aa50 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72  .**.** If cursor
1aa60 20 50 31 20 72 65 66 65 72 73 20 74 6f 20 61 6e   P1 refers to an
1aa70 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d 54 72   SQL table (B-Tr
1aa80 65 65 20 74 68 61 74 20 75 73 65 73 20 69 6e 74  ee that uses int
1aa90 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20  eger keys), .** 
1aaa0 75 73 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e  use the value in
1aab0 20 72 65 67 69 73 74 65 72 20 50 33 20 61 73 20   register P3 as 
1aac0 74 68 65 20 6b 65 79 2e 20 20 49 66 20 63 75 72  the key.  If cur
1aad0 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a  sor P1 refers .*
1aae0 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65  * to an SQL inde
1aaf0 78 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74 68  x, then P3 is th
1ab00 65 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72  e first in an ar
1ab10 72 61 79 20 6f 66 20 50 34 20 72 65 67 69 73 74  ray of P4 regist
1ab20 65 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65  ers .** that are
1ab30 20 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61   used as an unpa
1ab40 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20  cked index key. 
1ab50 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f  .**.** Repositio
1ab60 6e 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74  n cursor P1 so t
1ab70 68 61 74 20 20 69 74 20 70 6f 69 6e 74 73 20 74  hat  it points t
1ab80 6f 20 74 68 65 20 73 6d 61 6c 6c 65 73 74 20 65  o the smallest e
1ab90 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 69 73  ntry that .** is
1aba0 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72   greater than or
1abb0 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65   equal to the ke
1abc0 79 20 76 61 6c 75 65 2e 20 49 66 20 74 68 65 72  y value. If ther
1abd0 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73  e are no records
1abe0 20 0a 2a 2a 20 67 72 65 61 74 65 72 20 74 68 61   .** greater tha
1abf0 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68  n or equal to th
1ac00 65 20 6b 65 79 20 61 6e 64 20 50 32 20 69 73 20  e key and P2 is 
1ac10 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a  not zero, then j
1ac20 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a  ump to P2..**.**
1ac30 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64   See also: Found
1ac40 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 44 69 73 74  , NotFound, Dist
1ac50 69 6e 63 74 2c 20 53 65 65 6b 4c 74 2c 20 53 65  inct, SeekLt, Se
1ac60 65 6b 47 74 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a  ekGt, SeekLe.*/.
1ac70 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 47  /* Opcode: SeekG
1ac80 74 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a  t P1 P2 P3 P4 *.
1ac90 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72 20  **.** If cursor 
1aca0 50 31 20 72 65 66 65 72 73 20 74 6f 20 61 6e 20  P1 refers to an 
1acb0 53 51 4c 20 74 61 62 6c 65 20 28 42 2d 54 72 65  SQL table (B-Tre
1acc0 65 20 74 68 61 74 20 75 73 65 73 20 69 6e 74 65  e that uses inte
1acd0 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75  ger keys), .** u
1ace0 73 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  se the value in 
1acf0 72 65 67 69 73 74 65 72 20 50 33 20 61 73 20 61  register P3 as a
1ad00 20 6b 65 79 2e 20 49 66 20 63 75 72 73 6f 72 20   key. If cursor 
1ad10 50 31 20 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f  P1 refers .** to
1ad20 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20 74   an SQL index, t
1ad30 68 65 6e 20 50 33 20 69 73 20 74 68 65 20 66 69  hen P3 is the fi
1ad40 72 73 74 20 69 6e 20 61 6e 20 61 72 72 61 79 20  rst in an array 
1ad50 6f 66 20 50 34 20 72 65 67 69 73 74 65 72 73 20  of P4 registers 
1ad60 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 75 73 65  .** that are use
1ad70 64 20 61 73 20 61 6e 20 75 6e 70 61 63 6b 65 64  d as an unpacked
1ad80 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a   index key. .**.
1ad90 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20 63 75  ** Reposition cu
1ada0 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20  rsor P1 so that 
1adb0 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68   it points to th
1adc0 65 20 73 6d 61 6c 6c 65 73 74 20 65 6e 74 72 79  e smallest entry
1add0 20 74 68 61 74 20 0a 2a 2a 20 69 73 20 67 72 65   that .** is gre
1ade0 61 74 65 72 20 74 68 61 6e 20 74 68 65 20 6b 65  ater than the ke
1adf0 79 20 76 61 6c 75 65 2e 20 49 66 20 74 68 65 72  y value. If ther
1ae00 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73  e are no records
1ae10 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 0a 2a   greater than .*
1ae20 2a 20 74 68 65 20 6b 65 79 20 61 6e 64 20 50 32  * the key and P2
1ae30 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68   is not zero, th
1ae40 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a  en jump to P2..*
1ae50 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46  *.** See also: F
1ae60 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20  ound, NotFound, 
1ae70 44 69 73 74 69 6e 63 74 2c 20 53 65 65 6b 4c 74  Distinct, SeekLt
1ae80 2c 20 53 65 65 6b 47 65 2c 20 53 65 65 6b 4c 65  , SeekGe, SeekLe
1ae90 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .*/./* Opcode: S
1aea0 65 65 6b 4c 74 20 50 31 20 50 32 20 50 33 20 50  eekLt P1 P2 P3 P
1aeb0 34 20 2a 20 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75  4 * .**.** If cu
1aec0 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 74  rsor P1 refers t
1aed0 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28  o an SQL table (
1aee0 42 2d 54 72 65 65 20 74 68 61 74 20 75 73 65 73  B-Tree that uses
1aef0 20 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20   integer keys), 
1af00 0a 2a 2a 20 75 73 65 20 74 68 65 20 76 61 6c 75  .** use the valu
1af10 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  e in register P3
1af20 20 61 73 20 61 20 6b 65 79 2e 20 49 66 20 63 75   as a key. If cu
1af30 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a  rsor P1 refers .
1af40 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64  ** to an SQL ind
1af50 65 78 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74  ex, then P3 is t
1af60 68 65 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61  he first in an a
1af70 72 72 61 79 20 6f 66 20 50 34 20 72 65 67 69 73  rray of P4 regis
1af80 74 65 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72  ters .** that ar
1af90 65 20 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70  e used as an unp
1afa0 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e  acked index key.
1afb0 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69   .**.** Repositi
1afc0 6f 6e 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20  on cursor P1 so 
1afd0 74 68 61 74 20 20 69 74 20 70 6f 69 6e 74 73 20  that  it points 
1afe0 74 6f 20 74 68 65 20 6c 61 72 67 65 73 74 20 65  to the largest e
1aff0 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 69 73  ntry that .** is
1b000 20 6c 65 73 73 20 74 68 61 6e 20 74 68 65 20 6b   less than the k
1b010 65 79 20 76 61 6c 75 65 2e 20 49 66 20 74 68 65  ey value. If the
1b020 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64  re are no record
1b030 73 20 6c 65 73 73 20 74 68 61 6e 20 0a 2a 2a 20  s less than .** 
1b040 74 68 65 20 6b 65 79 20 61 6e 64 20 50 32 20 69  the key and P2 i
1b050 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e  s not zero, then
1b060 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a   jump to P2..**.
1b070 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75  ** See also: Fou
1b080 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 44 69  nd, NotFound, Di
1b090 73 74 69 6e 63 74 2c 20 53 65 65 6b 47 74 2c 20  stinct, SeekGt, 
1b0a0 53 65 65 6b 47 65 2c 20 53 65 65 6b 4c 65 0a 2a  SeekGe, SeekLe.*
1b0b0 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65  /./* Opcode: See
1b0c0 6b 4c 65 20 50 31 20 50 32 20 50 33 20 50 34 20  kLe P1 P2 P3 P4 
1b0d0 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f  *.**.** If curso
1b0e0 72 20 50 31 20 72 65 66 65 72 73 20 74 6f 20 61  r P1 refers to a
1b0f0 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d 54  n SQL table (B-T
1b100 72 65 65 20 74 68 61 74 20 75 73 65 73 20 69 6e  ree that uses in
1b110 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a  teger keys), .**
1b120 20 75 73 65 20 74 68 65 20 76 61 6c 75 65 20 69   use the value i
1b130 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 61 73  n register P3 as
1b140 20 61 20 6b 65 79 2e 20 49 66 20 63 75 72 73 6f   a key. If curso
1b150 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a 20  r P1 refers .** 
1b160 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c  to an SQL index,
1b170 20 74 68 65 6e 20 50 33 20 69 73 20 74 68 65 20   then P3 is the 
1b180 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72 61  first in an arra
1b190 79 20 6f 66 20 50 34 20 72 65 67 69 73 74 65 72  y of P4 register
1b1a0 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 75  s .** that are u
1b1b0 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63 6b  sed as an unpack
1b1c0 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a  ed index key. .*
1b1d0 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20  *.** Reposition 
1b1e0 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61  cursor P1 so tha
1b1f0 74 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74  t it points to t
1b200 68 65 20 6c 61 72 67 65 73 74 20 65 6e 74 72 79  he largest entry
1b210 20 74 68 61 74 20 0a 2a 2a 20 69 73 20 6c 65 73   that .** is les
1b220 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20  s than or equal 
1b230 74 6f 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65  to the key value
1b240 2e 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6e  . If there are n
1b250 6f 20 72 65 63 6f 72 64 73 20 0a 2a 2a 20 6c 65  o records .** le
1b260 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c  ss than or equal
1b270 20 74 6f 20 74 68 65 20 6b 65 79 20 61 6e 64 20   to the key and 
1b280 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20  P2 is not zero, 
1b290 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e  then jump to P2.
1b2a0 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
1b2b0 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64   Found, NotFound
1b2c0 2c 20 44 69 73 74 69 6e 63 74 2c 20 53 65 65 6b  , Distinct, Seek
1b2d0 47 74 2c 20 53 65 65 6b 47 65 2c 20 53 65 65 6b  Gt, SeekGe, Seek
1b2e0 4c 74 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65  Lt.*/.case OP_Se
1b2f0 65 6b 4c 74 3a 20 20 20 20 20 20 20 20 20 2f 2a  ekLt:         /*
1b300 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61   jump, in3 */.ca
1b310 73 65 20 4f 50 5f 53 65 65 6b 4c 65 3a 20 20 20  se OP_SeekLe:   
1b320 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
1b330 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65  n3 */.case OP_Se
1b340 65 6b 47 65 3a 20 20 20 20 20 20 20 20 20 2f 2a  ekGe:         /*
1b350 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61   jump, in3 */.ca
1b360 73 65 20 4f 50 5f 53 65 65 6b 47 74 3a 20 7b 20  se OP_SeekGt: { 
1b370 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
1b380 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 72 65 73 3b  n3 */.  int res;
1b390 0a 20 20 69 6e 74 20 6f 63 3b 0a 20 20 56 64 62  .  int oc;.  Vdb
1b3a0 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 55  eCursor *pC;.  U
1b3b0 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72 3b  npackedRecord r;
1b3c0 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b 0a 20  .  int nField;. 
1b3d0 20 69 36 34 20 69 4b 65 79 3b 20 20 20 20 20 20   i64 iKey;      
1b3e0 2f 2a 20 54 68 65 20 72 6f 77 69 64 20 77 65 20  /* The rowid we 
1b3f0 61 72 65 20 74 6f 20 73 65 65 6b 20 74 6f 20 2a  are to seek to *
1b400 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  /..  assert( pOp
1b410 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
1b420 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
1b430 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1b440 70 32 21 3d 30 20 29 3b 0a 20 20 70 43 20 3d 20  p2!=0 );.  pC = 
1b450 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
1b460 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
1b470 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
1b480 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52  pC->pseudoTableR
1b490 65 67 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  eg==0 );.  asser
1b4a0 74 28 20 4f 50 5f 53 65 65 6b 4c 65 20 3d 3d 20  t( OP_SeekLe == 
1b4b0 4f 50 5f 53 65 65 6b 4c 74 2b 31 20 29 3b 0a 20  OP_SeekLt+1 );. 
1b4c0 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b   assert( OP_Seek
1b4d0 47 65 20 3d 3d 20 4f 50 5f 53 65 65 6b 4c 74 2b  Ge == OP_SeekLt+
1b4e0 32 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 4f  2 );.  assert( O
1b4f0 50 5f 53 65 65 6b 47 74 20 3d 3d 20 4f 50 5f 53  P_SeekGt == OP_S
1b500 65 65 6b 4c 74 2b 33 20 29 3b 0a 20 20 61 73 73  eekLt+3 );.  ass
1b510 65 72 74 28 20 70 43 2d 3e 69 73 4f 72 64 65 72  ert( pC->isOrder
1b520 65 64 20 29 3b 0a 20 20 69 66 28 20 41 4c 57 41  ed );.  if( ALWA
1b530 59 53 28 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d  YS(pC->pCursor!=
1b540 30 29 20 29 7b 0a 20 20 20 20 6f 63 20 3d 20 70  0) ){.    oc = p
1b550 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a 20 20 20 20  Op->opcode;.    
1b560 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b  pC->nullRow = 0;
1b570 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 69 73 54  .    if( pC->isT
1b580 61 62 6c 65 20 29 7b 0a 20 20 20 20 20 20 2f 2a  able ){.      /*
1b590 20 54 68 65 20 69 6e 70 75 74 20 76 61 6c 75 65   The input value
1b5a0 20 69 6e 20 50 33 20 6d 69 67 68 74 20 62 65 20   in P3 might be 
1b5b0 6f 66 20 61 6e 79 20 74 79 70 65 3a 20 69 6e 74  of any type: int
1b5c0 65 67 65 72 2c 20 72 65 61 6c 2c 20 73 74 72 69  eger, real, stri
1b5d0 6e 67 2c 0a 20 20 20 20 20 20 2a 2a 20 62 6c 6f  ng,.      ** blo
1b5e0 62 2c 20 6f 72 20 4e 55 4c 4c 2e 20 20 42 75 74  b, or NULL.  But
1b5f0 20 69 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20   it needs to be 
1b600 61 6e 20 69 6e 74 65 67 65 72 20 62 65 66 6f 72  an integer befor
1b610 65 20 77 65 20 63 61 6e 20 64 6f 0a 20 20 20 20  e we can do.    
1b620 20 20 2a 2a 20 74 68 65 20 73 65 65 6b 2c 20 73    ** the seek, s
1b630 6f 20 63 6f 76 65 72 74 20 69 74 2e 20 2a 2f 0a  o covert it. */.
1b640 20 20 20 20 20 20 70 49 6e 33 20 3d 20 26 61 4d        pIn3 = &aM
1b650 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20  em[pOp->p3];.   
1b660 20 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41     applyNumericA
1b670 66 66 69 6e 69 74 79 28 70 49 6e 33 29 3b 0a 20  ffinity(pIn3);. 
1b680 20 20 20 20 20 69 4b 65 79 20 3d 20 73 71 6c 69       iKey = sqli
1b690 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28  te3VdbeIntValue(
1b6a0 70 49 6e 33 29 3b 0a 20 20 20 20 20 20 70 43 2d  pIn3);.      pC-
1b6b0 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20  >rowidIsValid = 
1b6c0 30 3b 0a 0a 20 20 20 20 20 20 2f 2a 20 49 66 20  0;..      /* If 
1b6d0 74 68 65 20 50 33 20 76 61 6c 75 65 20 63 6f 75  the P3 value cou
1b6e0 6c 64 20 6e 6f 74 20 62 65 20 63 6f 6e 76 65 72  ld not be conver
1b6f0 74 65 64 20 69 6e 74 6f 20 61 6e 20 69 6e 74 65  ted into an inte
1b700 67 65 72 20 77 69 74 68 6f 75 74 0a 20 20 20 20  ger without.    
1b710 20 20 2a 2a 20 6c 6f 73 73 20 6f 66 20 69 6e 66    ** loss of inf
1b720 6f 72 6d 61 74 69 6f 6e 2c 20 74 68 65 6e 20 73  ormation, then s
1b730 70 65 63 69 61 6c 20 70 72 6f 63 65 73 73 69 6e  pecial processin
1b740 67 20 69 73 20 72 65 71 75 69 72 65 64 2e 2e 2e  g is required...
1b750 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 28 70   */.      if( (p
1b760 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In3->flags & MEM
1b770 5f 49 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20  _Int)==0 ){.    
1b780 20 20 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66      if( (pIn3->f
1b790 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 29  lags & MEM_Real)
1b7a0 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20  ==0 ){.         
1b7b0 20 2f 2a 20 49 66 20 74 68 65 20 50 33 20 76 61   /* If the P3 va
1b7c0 6c 75 65 20 63 61 6e 6e 6f 74 20 62 65 20 63 6f  lue cannot be co
1b7d0 6e 76 65 72 74 65 64 20 69 6e 74 6f 20 61 6e 79  nverted into any
1b7e0 20 6b 69 6e 64 20 6f 66 20 61 20 6e 75 6d 62 65   kind of a numbe
1b7f0 72 2c 0a 20 20 20 20 20 20 20 20 20 20 2a 2a 20  r,.          ** 
1b800 74 68 65 6e 20 74 68 65 20 73 65 65 6b 20 69 73  then the seek is
1b810 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65 2c 20 73   not possible, s
1b820 6f 20 6a 75 6d 70 20 74 6f 20 50 32 20 2a 2f 0a  o jump to P2 */.
1b830 20 20 20 20 20 20 20 20 20 20 70 63 20 3d 20 70            pc = p
1b840 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20  Op->p2 - 1;.    
1b850 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
1b860 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 2f       }.        /
1b870 2a 20 49 66 20 77 65 20 72 65 61 63 68 20 74 68  * If we reach th
1b880 69 73 20 70 6f 69 6e 74 2c 20 74 68 65 6e 20 74  is point, then t
1b890 68 65 20 50 33 20 76 61 6c 75 65 20 6d 75 73 74  he P3 value must
1b8a0 20 62 65 20 61 20 66 6c 6f 61 74 69 6e 67 0a 20   be a floating. 
1b8b0 20 20 20 20 20 20 20 2a 2a 20 70 6f 69 6e 74 20         ** point 
1b8c0 6e 75 6d 62 65 72 2e 20 2a 2f 0a 20 20 20 20 20  number. */.     
1b8d0 20 20 20 61 73 73 65 72 74 28 20 28 70 49 6e 33     assert( (pIn3
1b8e0 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65  ->flags & MEM_Re
1b8f0 61 6c 29 21 3d 30 20 29 3b 0a 0a 20 20 20 20 20  al)!=0 );..     
1b900 20 20 20 69 66 28 20 69 4b 65 79 3d 3d 53 4d 41     if( iKey==SMA
1b910 4c 4c 45 53 54 5f 49 4e 54 36 34 20 26 26 20 28  LLEST_INT64 && (
1b920 70 49 6e 33 2d 3e 72 3c 28 64 6f 75 62 6c 65 29  pIn3->r<(double)
1b930 69 4b 65 79 20 7c 7c 20 70 49 6e 33 2d 3e 72 3e  iKey || pIn3->r>
1b940 30 29 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  0) ){.          
1b950 2f 2a 20 54 68 65 20 50 33 20 76 61 6c 75 65 20  /* The P3 value 
1b960 69 73 20 74 6f 6f 20 6c 61 72 67 65 20 69 6e 20  is too large in 
1b970 6d 61 67 6e 69 74 75 64 65 20 74 6f 20 62 65 20  magnitude to be 
1b980 65 78 70 72 65 73 73 65 64 20 61 73 20 61 6e 0a  expressed as an.
1b990 20 20 20 20 20 20 20 20 20 20 2a 2a 20 69 6e 74            ** int
1b9a0 65 67 65 72 2e 20 2a 2f 0a 20 20 20 20 20 20 20  eger. */.       
1b9b0 20 20 20 72 65 73 20 3d 20 31 3b 0a 20 20 20 20     res = 1;.    
1b9c0 20 20 20 20 20 20 69 66 28 20 70 49 6e 33 2d 3e        if( pIn3->
1b9d0 72 3c 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20  r<0 ){.         
1b9e0 20 20 20 69 66 28 20 6f 63 3e 3d 4f 50 5f 53 65     if( oc>=OP_Se
1b9f0 65 6b 47 65 20 29 7b 20 20 61 73 73 65 72 74 28  ekGe ){  assert(
1ba00 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 65 20 7c   oc==OP_SeekGe |
1ba10 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 74 20  | oc==OP_SeekGt 
1ba20 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  );.             
1ba30 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
1ba40 65 65 46 69 72 73 74 28 70 43 2d 3e 70 43 75 72  eeFirst(pC->pCur
1ba50 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20  sor, &res);.    
1ba60 20 20 20 20 20 20 20 20 20 20 69 66 28 20 72 63            if( rc
1ba70 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f  !=SQLITE_OK ) go
1ba80 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
1ba90 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 20  error;.         
1baa0 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 7d     }.          }
1bab0 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20  else{.          
1bac0 20 20 69 66 28 20 6f 63 3c 3d 4f 50 5f 53 65 65    if( oc<=OP_See
1bad0 6b 4c 65 20 29 7b 20 20 61 73 73 65 72 74 28 20  kLe ){  assert( 
1bae0 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 74 20 7c 7c  oc==OP_SeekLt ||
1baf0 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 65 20 29   oc==OP_SeekLe )
1bb00 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;.              
1bb10 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
1bb20 65 4c 61 73 74 28 70 43 2d 3e 70 43 75 72 73 6f  eLast(pC->pCurso
1bb30 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20  r, &res);.      
1bb40 20 20 20 20 20 20 20 20 69 66 28 20 72 63 21 3d          if( rc!=
1bb50 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f  SQLITE_OK ) goto
1bb60 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
1bb70 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 20 20 20  ror;.           
1bb80 20 7d 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20   }.          }. 
1bb90 20 20 20 20 20 20 20 20 20 69 66 28 20 72 65 73           if( res
1bba0 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20   ){.            
1bbb0 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
1bbc0 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20  ;.          }.  
1bbd0 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
1bbe0 20 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28         }else if(
1bbf0 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 74 20 7c   oc==OP_SeekLt |
1bc00 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 65 20  | oc==OP_SeekGe 
1bc10 29 7b 0a 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ){.          /* 
1bc20 55 73 65 20 74 68 65 20 63 65 69 6c 69 6e 67 28  Use the ceiling(
1bc30 29 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 63 6f  ) function to co
1bc40 6e 76 65 72 74 20 72 65 61 6c 2d 3e 69 6e 74 20  nvert real->int 
1bc50 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 69 66 28  */.          if(
1bc60 20 70 49 6e 33 2d 3e 72 20 3e 20 28 64 6f 75 62   pIn3->r > (doub
1bc70 6c 65 29 69 4b 65 79 20 29 20 69 4b 65 79 2b 2b  le)iKey ) iKey++
1bc80 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b  ;.        }else{
1bc90 0a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73  .          /* Us
1bca0 65 20 74 68 65 20 66 6c 6f 6f 72 28 29 20 66 75  e the floor() fu
1bcb0 6e 63 74 69 6f 6e 20 74 6f 20 63 6f 6e 76 65 72  nction to conver
1bcc0 74 20 72 65 61 6c 2d 3e 69 6e 74 20 2a 2f 0a 20  t real->int */. 
1bcd0 20 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28           assert(
1bce0 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 65 20 7c   oc==OP_SeekLe |
1bcf0 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 74 20  | oc==OP_SeekGt 
1bd00 29 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28  );.          if(
1bd10 20 70 49 6e 33 2d 3e 72 20 3c 20 28 64 6f 75 62   pIn3->r < (doub
1bd20 6c 65 29 69 4b 65 79 20 29 20 69 4b 65 79 2d 2d  le)iKey ) iKey--
1bd30 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
1bd40 20 20 7d 20 0a 20 20 20 20 20 20 72 63 20 3d 20    } .      rc = 
1bd50 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65  sqlite3BtreeMove
1bd60 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e 70  toUnpacked(pC->p
1bd70 43 75 72 73 6f 72 2c 20 30 2c 20 28 75 36 34 29  Cursor, 0, (u64)
1bd80 69 4b 65 79 2c 20 30 2c 20 26 72 65 73 29 3b 0a  iKey, 0, &res);.
1bd90 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
1bda0 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
1bdb0 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
1bdc0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
1bdd0 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 72 65    }.      if( re
1bde0 73 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  s==0 ){.        
1bdf0 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64  pC->rowidIsValid
1be00 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 70 43   = 1;.        pC
1be10 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 69 4b  ->lastRowid = iK
1be20 65 79 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ey;.      }.    
1be30 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 6e 46 69  }else{.      nFi
1be40 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b  eld = pOp->p4.i;
1be50 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
1be60 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49  Op->p4type==P4_I
1be70 4e 54 33 32 20 29 3b 0a 20 20 20 20 20 20 61 73  NT32 );.      as
1be80 73 65 72 74 28 20 6e 46 69 65 6c 64 3e 30 20 29  sert( nField>0 )
1be90 3b 0a 20 20 20 20 20 20 72 2e 70 4b 65 79 49 6e  ;.      r.pKeyIn
1bea0 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66  fo = pC->pKeyInf
1beb0 6f 3b 0a 20 20 20 20 20 20 72 2e 6e 46 69 65 6c  o;.      r.nFiel
1bec0 64 20 3d 20 28 75 31 36 29 6e 46 69 65 6c 64 3b  d = (u16)nField;
1bed0 0a 0a 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e  ..      /* The n
1bee0 65 78 74 20 6c 69 6e 65 20 6f 66 20 63 6f 64 65  ext line of code
1bef0 20 63 6f 6d 70 75 74 65 73 20 61 73 20 66 6f 6c   computes as fol
1bf00 6c 6f 77 73 2c 20 6f 6e 6c 79 20 66 61 73 74 65  lows, only faste
1bf10 72 3a 0a 20 20 20 20 20 20 2a 2a 20 20 20 69 66  r:.      **   if
1bf20 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 74 20  ( oc==OP_SeekGt 
1bf30 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 65  || oc==OP_SeekLe
1bf40 20 29 7b 0a 20 20 20 20 20 20 2a 2a 20 20 20 20   ){.      **    
1bf50 20 72 2e 66 6c 61 67 73 20 3d 20 55 4e 50 41 43   r.flags = UNPAC
1bf60 4b 45 44 5f 49 4e 43 52 4b 45 59 3b 0a 20 20 20  KED_INCRKEY;.   
1bf70 20 20 20 2a 2a 20 20 20 7d 65 6c 73 65 7b 0a 20     **   }else{. 
1bf80 20 20 20 20 20 2a 2a 20 20 20 20 20 72 2e 66 6c       **     r.fl
1bf90 61 67 73 20 3d 20 30 3b 0a 20 20 20 20 20 20 2a  ags = 0;.      *
1bfa0 2a 20 20 20 7d 0a 20 20 20 20 20 20 2a 2f 0a 20  *   }.      */. 
1bfb0 20 20 20 20 20 72 2e 66 6c 61 67 73 20 3d 20 28       r.flags = (
1bfc0 75 31 36 29 28 55 4e 50 41 43 4b 45 44 5f 49 4e  u16)(UNPACKED_IN
1bfd0 43 52 4b 45 59 20 2a 20 28 31 20 26 20 28 6f 63  CRKEY * (1 & (oc
1bfe0 20 2d 20 4f 50 5f 53 65 65 6b 4c 74 29 29 29 3b   - OP_SeekLt)));
1bff0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6f  .      assert( o
1c000 63 21 3d 4f 50 5f 53 65 65 6b 47 74 20 7c 7c 20  c!=OP_SeekGt || 
1c010 72 2e 66 6c 61 67 73 3d 3d 55 4e 50 41 43 4b 45  r.flags==UNPACKE
1c020 44 5f 49 4e 43 52 4b 45 59 20 29 3b 0a 20 20 20  D_INCRKEY );.   
1c030 20 20 20 61 73 73 65 72 74 28 20 6f 63 21 3d 4f     assert( oc!=O
1c040 50 5f 53 65 65 6b 4c 65 20 7c 7c 20 72 2e 66 6c  P_SeekLe || r.fl
1c050 61 67 73 3d 3d 55 4e 50 41 43 4b 45 44 5f 49 4e  ags==UNPACKED_IN
1c060 43 52 4b 45 59 20 29 3b 0a 20 20 20 20 20 20 61  CRKEY );.      a
1c070 73 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65  ssert( oc!=OP_Se
1c080 65 6b 47 65 20 7c 7c 20 72 2e 66 6c 61 67 73 3d  ekGe || r.flags=
1c090 3d 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  =0 );.      asse
1c0a0 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 4c  rt( oc!=OP_SeekL
1c0b0 74 20 7c 7c 20 72 2e 66 6c 61 67 73 3d 3d 30 20  t || r.flags==0 
1c0c0 29 3b 0a 0a 20 20 20 20 20 20 72 2e 61 4d 65 6d  );..      r.aMem
1c0d0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
1c0e0 5d 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  ];.#ifdef SQLITE
1c0f0 5f 44 45 42 55 47 0a 20 20 20 20 20 20 7b 20 69  _DEBUG.      { i
1c100 6e 74 20 69 3b 20 66 6f 72 28 69 3d 30 3b 20 69  nt i; for(i=0; i
1c110 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b 29 20  <r.nField; i++) 
1c120 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
1c130 69 64 28 26 72 2e 61 4d 65 6d 5b 69 5d 29 20 29  id(&r.aMem[i]) )
1c140 3b 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 20  ; }.#endif.     
1c150 20 45 78 70 61 6e 64 42 6c 6f 62 28 72 2e 61 4d   ExpandBlob(r.aM
1c160 65 6d 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  em);.      rc = 
1c170 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65  sqlite3BtreeMove
1c180 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e 70  toUnpacked(pC->p
1c190 43 75 72 73 6f 72 2c 20 26 72 2c 20 30 2c 20 30  Cursor, &r, 0, 0
1c1a0 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20 69  , &res);.      i
1c1b0 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
1c1c0 20 29 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f   ){.        goto
1c1d0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
1c1e0 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  ror;.      }.   
1c1f0 20 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61     pC->rowidIsVa
1c200 6c 69 64 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20  lid = 0;.    }. 
1c210 20 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d     pC->deferredM
1c220 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20 20 70  oveto = 0;.    p
1c230 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
1c240 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 23 69   CACHE_STALE;.#i
1c250 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54  fdef SQLITE_TEST
1c260 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 65 61  .    sqlite3_sea
1c270 72 63 68 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e  rch_count++;.#en
1c280 64 69 66 0a 20 20 20 20 69 66 28 20 6f 63 3e 3d  dif.    if( oc>=
1c290 4f 50 5f 53 65 65 6b 47 65 20 29 7b 20 20 61 73  OP_SeekGe ){  as
1c2a0 73 65 72 74 28 20 6f 63 3d 3d 4f 50 5f 53 65 65  sert( oc==OP_See
1c2b0 6b 47 65 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65  kGe || oc==OP_Se
1c2c0 65 6b 47 74 20 29 3b 0a 20 20 20 20 20 20 69 66  ekGt );.      if
1c2d0 28 20 72 65 73 3c 30 20 7c 7c 20 28 72 65 73 3d  ( res<0 || (res=
1c2e0 3d 30 20 26 26 20 6f 63 3d 3d 4f 50 5f 53 65 65  =0 && oc==OP_See
1c2f0 6b 47 74 29 20 29 7b 0a 20 20 20 20 20 20 20 20  kGt) ){.        
1c300 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
1c310 65 4e 65 78 74 28 70 43 2d 3e 70 43 75 72 73 6f  eNext(pC->pCurso
1c320 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20  r, &res);.      
1c330 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
1c340 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74  _OK ) goto abort
1c350 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
1c360 20 20 20 20 20 20 20 70 43 2d 3e 72 6f 77 69 64         pC->rowid
1c370 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 20  IsValid = 0;.   
1c380 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
1c390 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 20 20 20    res = 0;.     
1c3a0 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20   }.    }else{.  
1c3b0 20 20 20 20 61 73 73 65 72 74 28 20 6f 63 3d 3d      assert( oc==
1c3c0 4f 50 5f 53 65 65 6b 4c 74 20 7c 7c 20 6f 63 3d  OP_SeekLt || oc=
1c3d0 3d 4f 50 5f 53 65 65 6b 4c 65 20 29 3b 0a 20 20  =OP_SeekLe );.  
1c3e0 20 20 20 20 69 66 28 20 72 65 73 3e 30 20 7c 7c      if( res>0 ||
1c3f0 20 28 72 65 73 3d 3d 30 20 26 26 20 6f 63 3d 3d   (res==0 && oc==
1c400 4f 50 5f 53 65 65 6b 4c 74 29 20 29 7b 0a 20 20  OP_SeekLt) ){.  
1c410 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
1c420 65 33 42 74 72 65 65 50 72 65 76 69 6f 75 73 28  e3BtreePrevious(
1c430 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72 65  pC->pCursor, &re
1c440 73 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  s);.        if( 
1c450 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20  rc!=SQLITE_OK ) 
1c460 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
1c470 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20  o_error;.       
1c480 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69   pC->rowidIsVali
1c490 64 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 65 6c  d = 0;.      }el
1c4a0 73 65 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 72  se{.        /* r
1c4b0 65 73 20 6d 69 67 68 74 20 62 65 20 6e 65 67 61  es might be nega
1c4c0 74 69 76 65 20 62 65 63 61 75 73 65 20 74 68 65  tive because the
1c4d0 20 74 61 62 6c 65 20 69 73 20 65 6d 70 74 79 2e   table is empty.
1c4e0 20 20 43 68 65 63 6b 20 74 6f 0a 20 20 20 20 20    Check to.     
1c4f0 20 20 20 2a 2a 20 73 65 65 20 69 66 20 74 68 69     ** see if thi
1c500 73 20 69 73 20 74 68 65 20 63 61 73 65 2e 0a 20  s is the case.. 
1c510 20 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20         */.      
1c520 20 20 72 65 73 20 3d 20 73 71 6c 69 74 65 33 42    res = sqlite3B
1c530 74 72 65 65 45 6f 66 28 70 43 2d 3e 70 43 75 72  treeEof(pC->pCur
1c540 73 6f 72 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  sor);.      }.  
1c550 20 20 7d 0a 20 20 20 20 61 73 73 65 72 74 28 20    }.    assert( 
1c560 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 20  pOp->p2>0 );.   
1c570 20 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20   if( res ){.    
1c580 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
1c590 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73   1;.    }.  }els
1c5a0 65 7b 0a 20 20 20 20 2f 2a 20 54 68 69 73 20 68  e{.    /* This h
1c5b0 61 70 70 65 6e 73 20 77 68 65 6e 20 61 74 74 65  appens when atte
1c5c0 6d 70 74 69 6e 67 20 74 6f 20 6f 70 65 6e 20 74  mpting to open t
1c5d0 68 65 20 73 71 6c 69 74 65 33 5f 6d 61 73 74 65  he sqlite3_maste
1c5e0 72 20 74 61 62 6c 65 0a 20 20 20 20 2a 2a 20 66  r table.    ** f
1c5f0 6f 72 20 72 65 61 64 20 61 63 63 65 73 73 20 72  or read access r
1c600 65 74 75 72 6e 73 20 53 51 4c 49 54 45 5f 45 4d  eturns SQLITE_EM
1c610 50 54 59 2e 20 49 6e 20 74 68 69 73 20 63 61 73  PTY. In this cas
1c620 65 20 61 6c 77 61 79 73 0a 20 20 20 20 2a 2a 20  e always.    ** 
1c630 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 20 28 73  take the jump (s
1c640 69 6e 63 65 20 74 68 65 72 65 20 61 72 65 20 6e  ince there are n
1c650 6f 20 72 65 63 6f 72 64 73 20 69 6e 20 74 68 65  o records in the
1c660 20 74 61 62 6c 65 29 2e 0a 20 20 20 20 2a 2f 0a   table)..    */.
1c670 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
1c680 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61   - 1;.  }.  brea
1c690 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
1c6a0 20 53 65 65 6b 20 50 31 20 50 32 20 2a 20 2a 20   Seek P1 P2 * * 
1c6b0 2a 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 6e  *.**.** P1 is an
1c6c0 20 6f 70 65 6e 20 74 61 62 6c 65 20 63 75 72 73   open table curs
1c6d0 6f 72 20 61 6e 64 20 50 32 20 69 73 20 61 20 72  or and P2 is a r
1c6e0 6f 77 69 64 20 69 6e 74 65 67 65 72 2e 20 20 41  owid integer.  A
1c6f0 72 72 61 6e 67 65 0a 2a 2a 20 66 6f 72 20 50 31  rrange.** for P1
1c700 20 74 6f 20 6d 6f 76 65 20 73 6f 20 74 68 61 74   to move so that
1c710 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68   it points to th
1c720 65 20 72 6f 77 69 64 20 67 69 76 65 6e 20 62 79  e rowid given by
1c730 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20   P2..**.** This 
1c740 69 73 20 61 63 74 75 61 6c 6c 79 20 61 20 64 65  is actually a de
1c750 66 65 72 72 65 64 20 73 65 65 6b 2e 20 20 4e 6f  ferred seek.  No
1c760 74 68 69 6e 67 20 61 63 74 75 61 6c 6c 79 20 68  thing actually h
1c770 61 70 70 65 6e 73 20 75 6e 74 69 6c 0a 2a 2a 20  appens until.** 
1c780 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 75 73  the cursor is us
1c790 65 64 20 74 6f 20 72 65 61 64 20 61 20 72 65 63  ed to read a rec
1c7a0 6f 72 64 2e 20 20 54 68 61 74 20 77 61 79 2c 20  ord.  That way, 
1c7b0 69 66 20 6e 6f 20 72 65 61 64 73 0a 2a 2a 20 6f  if no reads.** o
1c7c0 63 63 75 72 2c 20 6e 6f 20 75 6e 6e 65 63 65 73  ccur, no unneces
1c7d0 73 61 72 79 20 49 2f 4f 20 68 61 70 70 65 6e 73  sary I/O happens
1c7e0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65  ..*/.case OP_See
1c7f0 6b 3a 20 7b 20 20 20 20 2f 2a 20 69 6e 32 20 2a  k: {    /* in2 *
1c800 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  /.  VdbeCursor *
1c810 70 43 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  pC;..  assert( p
1c820 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
1c830 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
1c840 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
1c850 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
1c860 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
1c870 20 20 69 66 28 20 41 4c 57 41 59 53 28 70 43 2d    if( ALWAYS(pC-
1c880 3e 70 43 75 72 73 6f 72 21 3d 30 29 20 29 7b 0a  >pCursor!=0) ){.
1c890 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
1c8a0 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 20 20 70  isTable );.    p
1c8b0 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a  C->nullRow = 0;.
1c8c0 20 20 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d      pIn2 = &aMem
1c8d0 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 70  [pOp->p2];.    p
1c8e0 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 20  C->movetoTarget 
1c8f0 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74  = sqlite3VdbeInt
1c900 56 61 6c 75 65 28 70 49 6e 32 29 3b 0a 20 20 20  Value(pIn2);.   
1c910 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69   pC->rowidIsVali
1c920 64 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e 64  d = 0;.    pC->d
1c930 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20  eferredMoveto = 
1c940 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  1;.  }.  break;.
1c950 7d 0a 20 20 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  }.  ../* Opcode:
1c960 20 46 6f 75 6e 64 20 50 31 20 50 32 20 50 33 20   Found P1 P2 P3 
1c970 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34  P4 *.**.** If P4
1c980 3d 3d 30 20 74 68 65 6e 20 72 65 67 69 73 74 65  ==0 then registe
1c990 72 20 50 33 20 68 6f 6c 64 73 20 61 20 62 6c 6f  r P3 holds a blo
1c9a0 62 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79  b constructed by
1c9b0 20 4d 61 6b 65 52 65 63 6f 72 64 2e 20 20 49 66   MakeRecord.  If
1c9c0 0a 2a 2a 20 50 34 3e 30 20 74 68 65 6e 20 72 65  .** P4>0 then re
1c9d0 67 69 73 74 65 72 20 50 33 20 69 73 20 74 68 65  gister P3 is the
1c9e0 20 66 69 72 73 74 20 6f 66 20 50 34 20 72 65 67   first of P4 reg
1c9f0 69 73 74 65 72 73 20 74 68 61 74 20 66 6f 72 6d  isters that form
1ca00 20 61 6e 20 75 6e 70 61 63 6b 65 64 0a 2a 2a 20   an unpacked.** 
1ca10 72 65 63 6f 72 64 2e 0a 2a 2a 0a 2a 2a 20 43 75  record..**.** Cu
1ca20 72 73 6f 72 20 50 31 20 69 73 20 6f 6e 20 61 6e  rsor P1 is on an
1ca30 20 69 6e 64 65 78 20 62 74 72 65 65 2e 20 20 49   index btree.  I
1ca40 66 20 74 68 65 20 72 65 63 6f 72 64 20 69 64 65  f the record ide
1ca50 6e 74 69 66 69 65 64 20 62 79 20 50 33 20 61 6e  ntified by P3 an
1ca60 64 20 50 34 0a 2a 2a 20 69 73 20 61 20 70 72 65  d P4.** is a pre
1ca70 66 69 78 20 6f 66 20 61 6e 79 20 65 6e 74 72 79  fix of any entry
1ca80 20 69 6e 20 50 31 20 74 68 65 6e 20 61 20 6a 75   in P1 then a ju
1ca90 6d 70 20 69 73 20 6d 61 64 65 20 74 6f 20 50 32  mp is made to P2
1caa0 20 61 6e 64 0a 2a 2a 20 50 31 20 69 73 20 6c 65   and.** P1 is le
1cab0 66 74 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74  ft pointing at t
1cac0 68 65 20 6d 61 74 63 68 69 6e 67 20 65 6e 74 72  he matching entr
1cad0 79 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  y..*/./* Opcode:
1cae0 20 4e 6f 74 46 6f 75 6e 64 20 50 31 20 50 32 20   NotFound P1 P2 
1caf0 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 49 66  P3 P4 *.**.** If
1cb00 20 50 34 3d 3d 30 20 74 68 65 6e 20 72 65 67 69   P4==0 then regi
1cb10 73 74 65 72 20 50 33 20 68 6f 6c 64 73 20 61 20  ster P3 holds a 
1cb20 62 6c 6f 62 20 63 6f 6e 73 74 72 75 63 74 65 64  blob constructed
1cb30 20 62 79 20 4d 61 6b 65 52 65 63 6f 72 64 2e 20   by MakeRecord. 
1cb40 20 49 66 0a 2a 2a 20 50 34 3e 30 20 74 68 65 6e   If.** P4>0 then
1cb50 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20   register P3 is 
1cb60 74 68 65 20 66 69 72 73 74 20 6f 66 20 50 34 20  the first of P4 
1cb70 72 65 67 69 73 74 65 72 73 20 74 68 61 74 20 66  registers that f
1cb80 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 0a  orm an unpacked.
1cb90 2a 2a 20 72 65 63 6f 72 64 2e 0a 2a 2a 20 0a 2a  ** record..** .*
1cba0 2a 20 43 75 72 73 6f 72 20 50 31 20 69 73 20 6f  * Cursor P1 is o
1cbb0 6e 20 61 6e 20 69 6e 64 65 78 20 62 74 72 65 65  n an index btree
1cbc0 2e 20 20 49 66 20 74 68 65 20 72 65 63 6f 72 64  .  If the record
1cbd0 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 50   identified by P
1cbe0 33 20 61 6e 64 20 50 34 0a 2a 2a 20 69 73 20 6e  3 and P4.** is n
1cbf0 6f 74 20 74 68 65 20 70 72 65 66 69 78 20 6f 66  ot the prefix of
1cc00 20 61 6e 79 20 65 6e 74 72 79 20 69 6e 20 50 31   any entry in P1
1cc10 20 74 68 65 6e 20 61 20 6a 75 6d 70 20 69 73 20   then a jump is 
1cc20 6d 61 64 65 20 74 6f 20 50 32 2e 20 20 49 66 20  made to P2.  If 
1cc30 50 31 20 0a 2a 2a 20 64 6f 65 73 20 63 6f 6e 74  P1 .** does cont
1cc40 61 69 6e 20 61 6e 20 65 6e 74 72 79 20 77 68 6f  ain an entry who
1cc50 73 65 20 70 72 65 66 69 78 20 6d 61 74 63 68 65  se prefix matche
1cc60 73 20 74 68 65 20 50 33 2f 50 34 20 72 65 63 6f  s the P3/P4 reco
1cc70 72 64 20 74 68 65 6e 20 63 6f 6e 74 72 6f 6c 0a  rd then control.
1cc80 2a 2a 20 66 61 6c 6c 73 20 74 68 72 6f 75 67 68  ** falls through
1cc90 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73   to the next ins
1cca0 74 72 75 63 74 69 6f 6e 20 61 6e 64 20 50 31 20  truction and P1 
1ccb0 69 73 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67  is left pointing
1ccc0 20 61 74 20 74 68 65 0a 2a 2a 20 6d 61 74 63 68   at the.** match
1ccd0 69 6e 67 20 65 6e 74 72 79 2e 0a 2a 2a 0a 2a 2a  ing entry..**.**
1cce0 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64   See also: Found
1ccf0 2c 20 4e 6f 74 45 78 69 73 74 73 2c 20 49 73 55  , NotExists, IsU
1cd00 6e 69 71 75 65 0a 2a 2f 0a 63 61 73 65 20 4f 50  nique.*/.case OP
1cd10 5f 4e 6f 74 46 6f 75 6e 64 3a 20 20 20 20 20 20  _NotFound:      
1cd20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f   /* jump, in3 */
1cd30 0a 63 61 73 65 20 4f 50 5f 46 6f 75 6e 64 3a 20  .case OP_Found: 
1cd40 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70  {        /* jump
1cd50 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 61  , in3 */.  int a
1cd60 6c 72 65 61 64 79 45 78 69 73 74 73 3b 0a 20 20  lreadyExists;.  
1cd70 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
1cd80 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 63 68 61    int res;.  cha
1cd90 72 20 2a 70 46 72 65 65 3b 0a 20 20 55 6e 70 61  r *pFree;.  Unpa
1cda0 63 6b 65 64 52 65 63 6f 72 64 20 2a 70 49 64 78  ckedRecord *pIdx
1cdb0 4b 65 79 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52  Key;.  UnpackedR
1cdc0 65 63 6f 72 64 20 72 3b 0a 20 20 63 68 61 72 20  ecord r;.  char 
1cdd0 61 54 65 6d 70 52 65 63 5b 52 4f 55 4e 44 38 28  aTempRec[ROUND8(
1cde0 73 69 7a 65 6f 66 28 55 6e 70 61 63 6b 65 64 52  sizeof(UnpackedR
1cdf0 65 63 6f 72 64 29 29 20 2b 20 73 69 7a 65 6f 66  ecord)) + sizeof
1ce00 28 4d 65 6d 29 2a 33 20 2b 20 37 5d 3b 0a 0a 23  (Mem)*3 + 7];..#
1ce10 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53  ifdef SQLITE_TES
1ce20 54 0a 20 20 73 71 6c 69 74 65 33 5f 66 6f 75 6e  T.  sqlite3_foun
1ce30 64 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69  d_count++;.#endi
1ce40 66 0a 0a 20 20 61 6c 72 65 61 64 79 45 78 69 73  f..  alreadyExis
1ce50 74 73 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74  ts = 0;.  assert
1ce60 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
1ce70 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
1ce80 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  or );.  assert( 
1ce90 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
1cea0 49 4e 54 33 32 20 29 3b 0a 20 20 70 43 20 3d 20  INT32 );.  pC = 
1ceb0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
1cec0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
1ced0 3d 30 20 29 3b 0a 20 20 70 49 6e 33 20 3d 20 26  =0 );.  pIn3 = &
1cee0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
1cef0 20 69 66 28 20 41 4c 57 41 59 53 28 70 43 2d 3e   if( ALWAYS(pC->
1cf00 70 43 75 72 73 6f 72 21 3d 30 29 20 29 7b 0a 0a  pCursor!=0) ){..
1cf10 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
1cf20 69 73 54 61 62 6c 65 3d 3d 30 20 29 3b 0a 20 20  isTable==0 );.  
1cf30 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 2e 69 3e    if( pOp->p4.i>
1cf40 30 20 29 7b 0a 20 20 20 20 20 20 72 2e 70 4b 65  0 ){.      r.pKe
1cf50 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79  yInfo = pC->pKey
1cf60 49 6e 66 6f 3b 0a 20 20 20 20 20 20 72 2e 6e 46  Info;.      r.nF
1cf70 69 65 6c 64 20 3d 20 28 75 31 36 29 70 4f 70 2d  ield = (u16)pOp-
1cf80 3e 70 34 2e 69 3b 0a 20 20 20 20 20 20 72 2e 61  >p4.i;.      r.a
1cf90 4d 65 6d 20 3d 20 70 49 6e 33 3b 0a 23 69 66 64  Mem = pIn3;.#ifd
1cfa0 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
1cfb0 20 20 20 20 20 20 7b 20 69 6e 74 20 69 3b 20 66        { int i; f
1cfc0 6f 72 28 69 3d 30 3b 20 69 3c 72 2e 6e 46 69 65  or(i=0; i<r.nFie
1cfd0 6c 64 3b 20 69 2b 2b 29 20 61 73 73 65 72 74 28  ld; i++) assert(
1cfe0 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 72 2e 61   memIsValid(&r.a
1cff0 4d 65 6d 5b 69 5d 29 20 29 3b 20 7d 0a 23 65 6e  Mem[i]) ); }.#en
1d000 64 69 66 0a 20 20 20 20 20 20 72 2e 66 6c 61 67  dif.      r.flag
1d010 73 20 3d 20 55 4e 50 41 43 4b 45 44 5f 50 52 45  s = UNPACKED_PRE
1d020 46 49 58 5f 4d 41 54 43 48 3b 0a 20 20 20 20 20  FIX_MATCH;.     
1d030 20 70 49 64 78 4b 65 79 20 3d 20 26 72 3b 0a 20   pIdxKey = &r;. 
1d040 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
1d050 70 49 64 78 4b 65 79 20 3d 20 73 71 6c 69 74 65  pIdxKey = sqlite
1d060 33 56 64 62 65 41 6c 6c 6f 63 55 6e 70 61 63 6b  3VdbeAllocUnpack
1d070 65 64 52 65 63 6f 72 64 28 0a 20 20 20 20 20 20  edRecord(.      
1d080 20 20 20 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f      pC->pKeyInfo
1d090 2c 20 61 54 65 6d 70 52 65 63 2c 20 73 69 7a 65  , aTempRec, size
1d0a0 6f 66 28 61 54 65 6d 70 52 65 63 29 2c 20 26 70  of(aTempRec), &p
1d0b0 46 72 65 65 0a 20 20 20 20 20 20 29 3b 20 0a 20  Free.      ); . 
1d0c0 20 20 20 20 20 69 66 28 20 70 49 64 78 4b 65 79       if( pIdxKey
1d0d0 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  ==0 ) goto no_me
1d0e0 6d 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  m;.      assert(
1d0f0 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn3->flags & M
1d100 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20 20 20 20  EM_Blob );.     
1d110 20 61 73 73 65 72 74 28 20 28 70 49 6e 33 2d 3e   assert( (pIn3->
1d120 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a 65 72 6f  flags & MEM_Zero
1d130 29 3d 3d 30 20 29 3b 20 20 2f 2a 20 7a 65 72 6f  )==0 );  /* zero
1d140 62 6c 6f 62 73 20 61 6c 72 65 61 64 79 20 65 78  blobs already ex
1d150 70 61 6e 64 65 64 20 2a 2f 0a 20 20 20 20 20 20  panded */.      
1d160 73 71 6c 69 74 65 33 56 64 62 65 52 65 63 6f 72  sqlite3VdbeRecor
1d170 64 55 6e 70 61 63 6b 28 70 43 2d 3e 70 4b 65 79  dUnpack(pC->pKey
1d180 49 6e 66 6f 2c 20 70 49 6e 33 2d 3e 6e 2c 20 70  Info, pIn3->n, p
1d190 49 6e 33 2d 3e 7a 2c 20 70 49 64 78 4b 65 79 29  In3->z, pIdxKey)
1d1a0 3b 0a 20 20 20 20 20 20 70 49 64 78 4b 65 79 2d  ;.      pIdxKey-
1d1b0 3e 66 6c 61 67 73 20 7c 3d 20 55 4e 50 41 43 4b  >flags |= UNPACK
1d1c0 45 44 5f 50 52 45 46 49 58 5f 4d 41 54 43 48 3b  ED_PREFIX_MATCH;
1d1d0 0a 20 20 20 20 7d 0a 20 20 20 20 72 63 20 3d 20  .    }.    rc = 
1d1e0 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65  sqlite3BtreeMove
1d1f0 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e 70  toUnpacked(pC->p
1d200 43 75 72 73 6f 72 2c 20 70 49 64 78 4b 65 79 2c  Cursor, pIdxKey,
1d210 20 30 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20   0, 0, &res);.  
1d220 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 2e 69 3d    if( pOp->p4.i=
1d230 3d 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  =0 ){.      sqli
1d240 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 70 46  te3DbFree(db, pF
1d250 72 65 65 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  ree);.    }.    
1d260 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
1d270 4b 20 29 7b 0a 20 20 20 20 20 20 62 72 65 61 6b  K ){.      break
1d280 3b 0a 20 20 20 20 7d 0a 20 20 20 20 61 6c 72 65  ;.    }.    alre
1d290 61 64 79 45 78 69 73 74 73 20 3d 20 28 72 65 73  adyExists = (res
1d2a0 3d 3d 30 29 3b 0a 20 20 20 20 70 43 2d 3e 64 65  ==0);.    pC->de
1d2b0 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30  ferredMoveto = 0
1d2c0 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53  ;.    pC->cacheS
1d2d0 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
1d2e0 41 4c 45 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70  ALE;.  }.  if( p
1d2f0 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 46  Op->opcode==OP_F
1d300 6f 75 6e 64 20 29 7b 0a 20 20 20 20 69 66 28 20  ound ){.    if( 
1d310 61 6c 72 65 61 64 79 45 78 69 73 74 73 20 29 20  alreadyExists ) 
1d320 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
1d330 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69  ;.  }else{.    i
1d340 66 28 20 21 61 6c 72 65 61 64 79 45 78 69 73 74  f( !alreadyExist
1d350 73 20 29 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32  s ) pc = pOp->p2
1d360 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61   - 1;.  }.  brea
1d370 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
1d380 20 49 73 55 6e 69 71 75 65 20 50 31 20 50 32 20   IsUnique P1 P2 
1d390 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 43 75  P3 P4 *.**.** Cu
1d3a0 72 73 6f 72 20 50 31 20 69 73 20 6f 70 65 6e 20  rsor P1 is open 
1d3b0 6f 6e 20 61 6e 20 69 6e 64 65 78 20 62 2d 74 72  on an index b-tr
1d3c0 65 65 20 2d 20 74 68 61 74 20 69 73 20 74 6f 20  ee - that is to 
1d3d0 73 61 79 2c 20 61 20 62 74 72 65 65 20 77 68 69  say, a btree whi
1d3e0 63 68 0a 2a 2a 20 6e 6f 20 64 61 74 61 20 61 6e  ch.** no data an
1d3f0 64 20 77 68 65 72 65 20 74 68 65 20 6b 65 79 20  d where the key 
1d400 61 72 65 20 72 65 63 6f 72 64 73 20 67 65 6e 65  are records gene
1d410 72 61 74 65 64 20 62 79 20 4f 50 5f 4d 61 6b 65  rated by OP_Make
1d420 52 65 63 6f 72 64 20 77 69 74 68 0a 2a 2a 20 74  Record with.** t
1d430 68 65 20 6c 69 73 74 20 66 69 65 6c 64 20 62 65  he list field be
1d440 69 6e 67 20 74 68 65 20 69 6e 74 65 67 65 72 20  ing the integer 
1d450 52 4f 57 49 44 20 6f 66 20 74 68 65 20 65 6e 74  ROWID of the ent
1d460 72 79 20 74 68 61 74 20 74 68 65 20 69 6e 64 65  ry that the inde
1d470 78 0a 2a 2a 20 65 6e 74 72 79 20 72 65 66 65 72  x.** entry refer
1d480 73 20 74 6f 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  s to..**.** The 
1d490 50 33 20 72 65 67 69 73 74 65 72 20 63 6f 6e 74  P3 register cont
1d4a0 61 69 6e 73 20 61 6e 20 69 6e 74 65 67 65 72 20  ains an integer 
1d4b0 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 2e 20 43  record number. C
1d4c0 61 6c 6c 20 74 68 69 73 20 72 65 63 6f 72 64 20  all this record 
1d4d0 0a 2a 2a 20 6e 75 6d 62 65 72 20 52 2e 20 52 65  .** number R. Re
1d4e0 67 69 73 74 65 72 20 50 34 20 69 73 20 74 68 65  gister P4 is the
1d4f0 20 66 69 72 73 74 20 69 6e 20 61 20 73 65 74 20   first in a set 
1d500 6f 66 20 4e 20 63 6f 6e 74 69 67 75 6f 75 73 20  of N contiguous 
1d510 72 65 67 69 73 74 65 72 73 0a 2a 2a 20 74 68 61  registers.** tha
1d520 74 20 6d 61 6b 65 20 75 70 20 61 6e 20 75 6e 70  t make up an unp
1d530 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 20  acked index key 
1d540 74 68 61 74 20 63 61 6e 20 62 65 20 75 73 65 64  that can be used
1d550 20 77 69 74 68 20 63 75 72 73 6f 72 20 50 31 2e   with cursor P1.
1d560 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65 20 6f 66  .** The value of
1d570 20 4e 20 63 61 6e 20 62 65 20 69 6e 66 65 72 72   N can be inferr
1d580 65 64 20 66 72 6f 6d 20 74 68 65 20 63 75 72 73  ed from the curs
1d590 6f 72 2e 20 4e 20 69 6e 63 6c 75 64 65 73 20 74  or. N includes t
1d5a0 68 65 20 72 6f 77 69 64 0a 2a 2a 20 76 61 6c 75  he rowid.** valu
1d5b0 65 20 61 70 70 65 6e 64 65 64 20 74 6f 20 74 68  e appended to th
1d5c0 65 20 65 6e 64 20 6f 66 20 74 68 65 20 69 6e 64  e end of the ind
1d5d0 65 78 20 72 65 63 6f 72 64 2e 20 54 68 69 73 20  ex record. This 
1d5e0 72 6f 77 69 64 20 76 61 6c 75 65 20 6d 61 79 0a  rowid value may.
1d5f0 2a 2a 20 6f 72 20 6d 61 79 20 6e 6f 74 20 62 65  ** or may not be
1d600 20 74 68 65 20 73 61 6d 65 20 61 73 20 52 2e 0a   the same as R..
1d610 2a 2a 0a 2a 2a 20 49 66 20 61 6e 79 20 6f 66 20  **.** If any of 
1d620 74 68 65 20 4e 20 72 65 67 69 73 74 65 72 73 20  the N registers 
1d630 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 72  beginning with r
1d640 65 67 69 73 74 65 72 20 50 34 20 63 6f 6e 74 61  egister P4 conta
1d650 69 6e 73 20 61 20 4e 55 4c 4c 0a 2a 2a 20 76 61  ins a NULL.** va
1d660 6c 75 65 2c 20 6a 75 6d 70 20 69 6d 6d 65 64 69  lue, jump immedi
1d670 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 0a  ately to P2..**.
1d680 2a 2a 20 4f 74 68 65 72 77 69 73 65 2c 20 74 68  ** Otherwise, th
1d690 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 63  is instruction c
1d6a0 68 65 63 6b 73 20 69 66 20 63 75 72 73 6f 72 20  hecks if cursor 
1d6b0 50 31 20 63 6f 6e 74 61 69 6e 73 20 61 6e 20 65  P1 contains an e
1d6c0 6e 74 72 79 0a 2a 2a 20 77 68 65 72 65 20 74 68  ntry.** where th
1d6d0 65 20 66 69 72 73 74 20 28 4e 2d 31 29 20 66 69  e first (N-1) fi
1d6e0 65 6c 64 73 20 6d 61 74 63 68 20 62 75 74 20 74  elds match but t
1d6f0 68 65 20 72 6f 77 69 64 20 76 61 6c 75 65 20 61  he rowid value a
1d700 74 20 74 68 65 20 65 6e 64 0a 2a 2a 20 6f 66 20  t the end.** of 
1d710 74 68 65 20 69 6e 64 65 78 20 65 6e 74 72 79 20  the index entry 
1d720 69 73 20 6e 6f 74 20 52 2e 20 49 66 20 74 68 65  is not R. If the
1d730 72 65 20 69 73 20 6e 6f 20 73 75 63 68 20 65 6e  re is no such en
1d740 74 72 79 2c 20 63 6f 6e 74 72 6f 6c 20 6a 75 6d  try, control jum
1d750 70 73 0a 2a 2a 20 74 6f 20 69 6e 73 74 72 75 63  ps.** to instruc
1d760 74 69 6f 6e 20 50 32 2e 20 4f 74 68 65 72 77 69  tion P2. Otherwi
1d770 73 65 2c 20 74 68 65 20 72 6f 77 69 64 20 6f 66  se, the rowid of
1d780 20 74 68 65 20 63 6f 6e 66 6c 69 63 74 69 6e 67   the conflicting
1d790 20 69 6e 64 65 78 0a 2a 2a 20 65 6e 74 72 79 20   index.** entry 
1d7a0 69 73 20 63 6f 70 69 65 64 20 74 6f 20 72 65 67  is copied to reg
1d7b0 69 73 74 65 72 20 50 33 20 61 6e 64 20 63 6f 6e  ister P3 and con
1d7c0 74 72 6f 6c 20 66 61 6c 6c 73 20 74 68 72 6f 75  trol falls throu
1d7d0 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 0a 2a  gh to the next.*
1d7e0 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  * instruction..*
1d7f0 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 4e  *.** See also: N
1d800 6f 74 46 6f 75 6e 64 2c 20 4e 6f 74 45 78 69 73  otFound, NotExis
1d810 74 73 2c 20 46 6f 75 6e 64 0a 2a 2f 0a 63 61 73  ts, Found.*/.cas
1d820 65 20 4f 50 5f 49 73 55 6e 69 71 75 65 3a 20 7b  e OP_IsUnique: {
1d830 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
1d840 20 69 6e 33 20 2a 2f 0a 20 20 75 31 36 20 69 69   in3 */.  u16 ii
1d850 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  ;.  VdbeCursor *
1d860 70 43 78 3b 0a 20 20 42 74 43 75 72 73 6f 72 20  pCx;.  BtCursor 
1d870 2a 70 43 72 73 72 3b 0a 20 20 75 31 36 20 6e 46  *pCrsr;.  u16 nF
1d880 69 65 6c 64 3b 0a 20 20 4d 65 6d 20 2a 61 4d 78  ield;.  Mem *aMx
1d890 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f  ;.  UnpackedReco
1d8a0 72 64 20 72 3b 20 20 20 20 20 20 20 20 20 20 20  rd r;           
1d8b0 20 20 20 20 20 20 20 2f 2a 20 42 2d 54 72 65 65         /* B-Tree
1d8c0 20 69 6e 64 65 78 20 73 65 61 72 63 68 20 6b 65   index search ke
1d8d0 79 20 2a 2f 0a 20 20 69 36 34 20 52 3b 20 20 20  y */.  i64 R;   
1d8e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d8f0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 6f 77            /* Row
1d900 69 64 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67  id stored in reg
1d910 69 73 74 65 72 20 50 33 20 2a 2f 0a 0a 20 20 70  ister P3 */..  p
1d920 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In3 = &aMem[pOp-
1d930 3e 70 33 5d 3b 0a 20 20 61 4d 78 20 3d 20 26 61  >p3];.  aMx = &a
1d940 4d 65 6d 5b 70 4f 70 2d 3e 70 34 2e 69 5d 3b 0a  Mem[pOp->p4.i];.
1d950 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68 61 74    /* Assert that
1d960 20 74 68 65 20 76 61 6c 75 65 73 20 6f 66 20 70   the values of p
1d970 61 72 61 6d 65 74 65 72 73 20 50 31 20 61 6e 64  arameters P1 and
1d980 20 50 34 20 61 72 65 20 69 6e 20 72 61 6e 67 65   P4 are in range
1d990 2e 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70  . */.  assert( p
1d9a0 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49  Op->p4type==P4_I
1d9b0 4e 54 33 32 20 29 3b 0a 20 20 61 73 73 65 72 74  NT32 );.  assert
1d9c0 28 20 70 4f 70 2d 3e 70 34 2e 69 3e 30 20 26 26  ( pOp->p4.i>0 &&
1d9d0 20 70 4f 70 2d 3e 70 34 2e 69 3c 3d 70 2d 3e 6e   pOp->p4.i<=p->n
1d9e0 4d 65 6d 20 29 3b 0a 20 20 61 73 73 65 72 74 28  Mem );.  assert(
1d9f0 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
1da00 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
1da10 72 20 29 3b 0a 0a 20 20 2f 2a 20 46 69 6e 64 20  r );..  /* Find 
1da20 74 68 65 20 69 6e 64 65 78 20 63 75 72 73 6f 72  the index cursor
1da30 2e 20 2a 2f 0a 20 20 70 43 78 20 3d 20 70 2d 3e  . */.  pCx = p->
1da40 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
1da50 20 20 61 73 73 65 72 74 28 20 70 43 78 2d 3e 64    assert( pCx->d
1da60 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30  eferredMoveto==0
1da70 20 29 3b 0a 20 20 70 43 78 2d 3e 73 65 65 6b 52   );.  pCx->seekR
1da80 65 73 75 6c 74 20 3d 20 30 3b 0a 20 20 70 43 78  esult = 0;.  pCx
1da90 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
1daa0 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 70  CACHE_STALE;.  p
1dab0 43 72 73 72 20 3d 20 70 43 78 2d 3e 70 43 75 72  Crsr = pCx->pCur
1dac0 73 6f 72 3b 0a 0a 20 20 2f 2a 20 49 66 20 61 6e  sor;..  /* If an
1dad0 79 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20  y of the values 
1dae0 61 72 65 20 4e 55 4c 4c 2c 20 74 61 6b 65 20 74  are NULL, take t
1daf0 68 65 20 6a 75 6d 70 2e 20 2a 2f 0a 20 20 6e 46  he jump. */.  nF
1db00 69 65 6c 64 20 3d 20 70 43 78 2d 3e 70 4b 65 79  ield = pCx->pKey
1db10 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64 3b 0a 20 20  Info->nField;.  
1db20 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 6e 46 69  for(ii=0; ii<nFi
1db30 65 6c 64 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20  eld; ii++){.    
1db40 69 66 28 20 61 4d 78 5b 69 69 5d 2e 66 6c 61 67  if( aMx[ii].flag
1db50 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a  s & MEM_Null ){.
1db60 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e        pc = pOp->
1db70 70 32 20 2d 20 31 3b 0a 20 20 20 20 20 20 70 43  p2 - 1;.      pC
1db80 72 73 72 20 3d 20 30 3b 0a 20 20 20 20 20 20 62  rsr = 0;.      b
1db90 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  reak;.    }.  }.
1dba0 20 20 61 73 73 65 72 74 28 20 28 61 4d 78 5b 6e    assert( (aMx[n
1dbb0 46 69 65 6c 64 5d 2e 66 6c 61 67 73 20 26 20 4d  Field].flags & M
1dbc0 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 3b 0a 0a  EM_Null)==0 );..
1dbd0 20 20 69 66 28 20 70 43 72 73 72 21 3d 30 20 29    if( pCrsr!=0 )
1dbe0 7b 0a 20 20 20 20 2f 2a 20 50 6f 70 75 6c 61 74  {.    /* Populat
1dbf0 65 20 74 68 65 20 69 6e 64 65 78 20 73 65 61 72  e the index sear
1dc00 63 68 20 6b 65 79 2e 20 2a 2f 0a 20 20 20 20 72  ch key. */.    r
1dc10 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43 78 2d  .pKeyInfo = pCx-
1dc20 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 72  >pKeyInfo;.    r
1dc30 2e 6e 46 69 65 6c 64 20 3d 20 6e 46 69 65 6c 64  .nField = nField
1dc40 20 2b 20 31 3b 0a 20 20 20 20 72 2e 66 6c 61 67   + 1;.    r.flag
1dc50 73 20 3d 20 55 4e 50 41 43 4b 45 44 5f 50 52 45  s = UNPACKED_PRE
1dc60 46 49 58 5f 53 45 41 52 43 48 3b 0a 20 20 20 20  FIX_SEARCH;.    
1dc70 72 2e 61 4d 65 6d 20 3d 20 61 4d 78 3b 0a 23 69  r.aMem = aMx;.#i
1dc80 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
1dc90 47 0a 20 20 20 20 7b 20 69 6e 74 20 69 3b 20 66  G.    { int i; f
1dca0 6f 72 28 69 3d 30 3b 20 69 3c 72 2e 6e 46 69 65  or(i=0; i<r.nFie
1dcb0 6c 64 3b 20 69 2b 2b 29 20 61 73 73 65 72 74 28  ld; i++) assert(
1dcc0 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 72 2e 61   memIsValid(&r.a
1dcd0 4d 65 6d 5b 69 5d 29 20 29 3b 20 7d 0a 23 65 6e  Mem[i]) ); }.#en
1dce0 64 69 66 0a 0a 20 20 20 20 2f 2a 20 45 78 74 72  dif..    /* Extr
1dcf0 61 63 74 20 74 68 65 20 76 61 6c 75 65 20 6f 66  act the value of
1dd00 20 52 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72   R from register
1dd10 20 50 33 2e 20 2a 2f 0a 20 20 20 20 73 71 6c 69   P3. */.    sqli
1dd20 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65  te3VdbeMemIntege
1dd30 72 69 66 79 28 70 49 6e 33 29 3b 0a 20 20 20 20  rify(pIn3);.    
1dd40 52 20 3d 20 70 49 6e 33 2d 3e 75 2e 69 3b 0a 0a  R = pIn3->u.i;..
1dd50 20 20 20 20 2f 2a 20 53 65 61 72 63 68 20 74 68      /* Search th
1dd60 65 20 42 2d 54 72 65 65 20 69 6e 64 65 78 2e 20  e B-Tree index. 
1dd70 49 66 20 6e 6f 20 63 6f 6e 66 6c 69 63 74 69 6e  If no conflictin
1dd80 67 20 72 65 63 6f 72 64 20 69 73 20 66 6f 75 6e  g record is foun
1dd90 64 2c 20 6a 75 6d 70 0a 20 20 20 20 2a 2a 20 74  d, jump.    ** t
1dda0 6f 20 50 32 2e 20 4f 74 68 65 72 77 69 73 65 2c  o P2. Otherwise,
1ddb0 20 63 6f 70 79 20 74 68 65 20 72 6f 77 69 64 20   copy the rowid 
1ddc0 6f 66 20 74 68 65 20 63 6f 6e 66 6c 69 63 74 69  of the conflicti
1ddd0 6e 67 20 72 65 63 6f 72 64 20 74 6f 0a 20 20 20  ng record to.   
1dde0 20 2a 2a 20 72 65 67 69 73 74 65 72 20 50 33 20   ** register P3 
1ddf0 61 6e 64 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  and fall through
1de00 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73   to the next ins
1de10 74 72 75 63 74 69 6f 6e 2e 20 20 2a 2f 0a 20 20  truction.  */.  
1de20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
1de30 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65  reeMovetoUnpacke
1de40 64 28 70 43 72 73 72 2c 20 26 72 2c 20 30 2c 20  d(pCrsr, &r, 0, 
1de50 30 2c 20 26 70 43 78 2d 3e 73 65 65 6b 52 65 73  0, &pCx->seekRes
1de60 75 6c 74 29 3b 0a 20 20 20 20 69 66 28 20 28 72  ult);.    if( (r
1de70 2e 66 6c 61 67 73 20 26 20 55 4e 50 41 43 4b 45  .flags & UNPACKE
1de80 44 5f 50 52 45 46 49 58 5f 53 45 41 52 43 48 29  D_PREFIX_SEARCH)
1de90 20 7c 7c 20 72 2e 72 6f 77 69 64 3d 3d 52 20 29   || r.rowid==R )
1dea0 7b 0a 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70  {.      pc = pOp
1deb0 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 7d 65  ->p2 - 1;.    }e
1dec0 6c 73 65 7b 0a 20 20 20 20 20 20 70 49 6e 33 2d  lse{.      pIn3-
1ded0 3e 75 2e 69 20 3d 20 72 2e 72 6f 77 69 64 3b 0a  >u.i = r.rowid;.
1dee0 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61      }.  }.  brea
1def0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
1df00 20 4e 6f 74 45 78 69 73 74 73 20 50 31 20 50 32   NotExists P1 P2
1df10 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 55 73   P3 * *.**.** Us
1df20 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  e the content of
1df30 20 72 65 67 69 73 74 65 72 20 50 33 20 61 73 20   register P3 as 
1df40 61 6e 20 69 6e 74 65 67 65 72 20 6b 65 79 2e 20  an integer key. 
1df50 20 49 66 20 61 20 72 65 63 6f 72 64 20 0a 2a 2a   If a record .**
1df60 20 77 69 74 68 20 74 68 61 74 20 6b 65 79 20 64   with that key d
1df70 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 20 69 6e  oes not exist in
1df80 20 74 61 62 6c 65 20 6f 66 20 50 31 2c 20 74 68   table of P1, th
1df90 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 0a  en jump to P2. .
1dfa0 2a 2a 20 49 66 20 74 68 65 20 72 65 63 6f 72 64  ** If the record
1dfb0 20 64 6f 65 73 20 65 78 69 73 74 2c 20 74 68 65   does exist, the
1dfc0 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 2e 20  n fall through. 
1dfd0 20 54 68 65 20 63 75 72 73 6f 72 20 69 73 20 6c   The cursor is l
1dfe0 65 66 74 20 0a 2a 2a 20 70 6f 69 6e 74 69 6e 67  eft .** pointing
1dff0 20 74 6f 20 74 68 65 20 72 65 63 6f 72 64 20 69   to the record i
1e000 66 20 69 74 20 65 78 69 73 74 73 2e 0a 2a 2a 0a  f it exists..**.
1e010 2a 2a 20 54 68 65 20 64 69 66 66 65 72 65 6e 63  ** The differenc
1e020 65 20 62 65 74 77 65 65 6e 20 74 68 69 73 20 6f  e between this o
1e030 70 65 72 61 74 69 6f 6e 20 61 6e 64 20 4e 6f 74  peration and Not
1e040 46 6f 75 6e 64 20 69 73 20 74 68 61 74 20 74 68  Found is that th
1e050 69 73 0a 2a 2a 20 6f 70 65 72 61 74 69 6f 6e 20  is.** operation 
1e060 61 73 73 75 6d 65 73 20 74 68 65 20 6b 65 79 20  assumes the key 
1e070 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 61 6e  is an integer an
1e080 64 20 74 68 61 74 20 50 31 20 69 73 20 61 20 74  d that P1 is a t
1e090 61 62 6c 65 20 77 68 65 72 65 61 73 0a 2a 2a 20  able whereas.** 
1e0a0 4e 6f 74 46 6f 75 6e 64 20 61 73 73 75 6d 65 73  NotFound assumes
1e0b0 20 6b 65 79 20 69 73 20 61 20 62 6c 6f 62 20 63   key is a blob c
1e0c0 6f 6e 73 74 72 75 63 74 65 64 20 66 72 6f 6d 20  onstructed from 
1e0d0 4d 61 6b 65 52 65 63 6f 72 64 20 61 6e 64 0a 2a  MakeRecord and.*
1e0e0 2a 20 50 31 20 69 73 20 61 6e 20 69 6e 64 65 78  * P1 is an index
1e0f0 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
1e100 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e  : Found, NotFoun
1e110 64 2c 20 49 73 55 6e 69 71 75 65 0a 2a 2f 0a 63  d, IsUnique.*/.c
1e120 61 73 65 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73  ase OP_NotExists
1e130 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  : {        /* ju
1e140 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 56 64 62  mp, in3 */.  Vdb
1e150 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42  eCursor *pC;.  B
1e160 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a  tCursor *pCrsr;.
1e170 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 75 36 34    int res;.  u64
1e180 20 69 4b 65 79 3b 0a 0a 20 20 70 49 6e 33 20 3d   iKey;..  pIn3 =
1e190 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
1e1a0 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 33 2d  .  assert( pIn3-
1e1b0 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
1e1c0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
1e1d0 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
1e1e0 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
1e1f0 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
1e200 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
1e210 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
1e220 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54   assert( pC->isT
1e230 61 62 6c 65 20 29 3b 0a 20 20 61 73 73 65 72 74  able );.  assert
1e240 28 20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c  ( pC->pseudoTabl
1e250 65 52 65 67 3d 3d 30 20 29 3b 0a 20 20 70 43 72  eReg==0 );.  pCr
1e260 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72  sr = pC->pCursor
1e270 3b 0a 20 20 69 66 28 20 41 4c 57 41 59 53 28 70  ;.  if( ALWAYS(p
1e280 43 72 73 72 21 3d 30 29 20 29 7b 0a 20 20 20 20  Crsr!=0) ){.    
1e290 72 65 73 20 3d 20 30 3b 0a 20 20 20 20 69 4b 65  res = 0;.    iKe
1e2a0 79 20 3d 20 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20  y = pIn3->u.i;. 
1e2b0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
1e2c0 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b  treeMovetoUnpack
1e2d0 65 64 28 70 43 72 73 72 2c 20 30 2c 20 69 4b 65  ed(pCrsr, 0, iKe
1e2e0 79 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 20  y, 0, &res);.   
1e2f0 20 70 43 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d   pC->lastRowid =
1e300 20 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20 20 20   pIn3->u.i;.    
1e310 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64  pC->rowidIsValid
1e320 20 3d 20 72 65 73 3d 3d 30 20 3f 31 3a 30 3b 0a   = res==0 ?1:0;.
1e330 20 20 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20      pC->nullRow 
1e340 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63  = 0;.    pC->cac
1e350 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45  heStatus = CACHE
1e360 5f 53 54 41 4c 45 3b 0a 20 20 20 20 70 43 2d 3e  _STALE;.    pC->
1e370 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d  deferredMoveto =
1e380 20 30 3b 0a 20 20 20 20 69 66 28 20 72 65 73 21   0;.    if( res!
1e390 3d 30 20 29 7b 0a 20 20 20 20 20 20 70 63 20 3d  =0 ){.      pc =
1e3a0 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
1e3b0 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
1e3c0 72 6f 77 69 64 49 73 56 61 6c 69 64 3d 3d 30 20  rowidIsValid==0 
1e3d0 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 43 2d  );.    }.    pC-
1e3e0 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d 20 72 65  >seekResult = re
1e3f0 73 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  s;.  }else{.    
1e400 2f 2a 20 54 68 69 73 20 68 61 70 70 65 6e 73 20  /* This happens 
1e410 77 68 65 6e 20 61 6e 20 61 74 74 65 6d 70 74 20  when an attempt 
1e420 74 6f 20 6f 70 65 6e 20 61 20 72 65 61 64 20 63  to open a read c
1e430 75 72 73 6f 72 20 6f 6e 20 74 68 65 20 0a 20 20  ursor on the .  
1e440 20 20 2a 2a 20 73 71 6c 69 74 65 5f 6d 61 73 74    ** sqlite_mast
1e450 65 72 20 74 61 62 6c 65 20 72 65 74 75 72 6e 73  er table returns
1e460 20 53 51 4c 49 54 45 5f 45 4d 50 54 59 2e 0a 20   SQLITE_EMPTY.. 
1e470 20 20 20 2a 2f 0a 20 20 20 20 70 63 20 3d 20 70     */.    pc = p
1e480 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20  Op->p2 - 1;.    
1e490 61 73 73 65 72 74 28 20 70 43 2d 3e 72 6f 77 69  assert( pC->rowi
1e4a0 64 49 73 56 61 6c 69 64 3d 3d 30 20 29 3b 0a 20  dIsValid==0 );. 
1e4b0 20 20 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c     pC->seekResul
1e4c0 74 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 62 72 65  t = 0;.  }.  bre
1e4d0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
1e4e0 3a 20 53 65 71 75 65 6e 63 65 20 50 31 20 50 32  : Sequence P1 P2
1e4f0 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 69 6e   * * *.**.** Fin
1e500 64 20 74 68 65 20 6e 65 78 74 20 61 76 61 69 6c  d the next avail
1e510 61 62 6c 65 20 73 65 71 75 65 6e 63 65 20 6e 75  able sequence nu
1e520 6d 62 65 72 20 66 6f 72 20 63 75 72 73 6f 72 20  mber for cursor 
1e530 50 31 2e 0a 2a 2a 20 57 72 69 74 65 20 74 68 65  P1..** Write the
1e540 20 73 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72   sequence number
1e550 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
1e560 32 2e 0a 2a 2a 20 54 68 65 20 73 65 71 75 65 6e  2..** The sequen
1e570 63 65 20 6e 75 6d 62 65 72 20 6f 6e 20 74 68 65  ce number on the
1e580 20 63 75 72 73 6f 72 20 69 73 20 69 6e 63 72 65   cursor is incre
1e590 6d 65 6e 74 65 64 20 61 66 74 65 72 20 74 68 69  mented after thi
1e5a0 73 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e  s.** instruction
1e5b0 2e 20 20 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  .  .*/.case OP_S
1e5c0 65 71 75 65 6e 63 65 3a 20 7b 20 20 20 20 20 20  equence: {      
1e5d0 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65       /* out2-pre
1e5e0 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 61 73 73  release */.  ass
1e5f0 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
1e600 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
1e610 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72  ursor );.  asser
1e620 74 28 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d  t( p->apCsr[pOp-
1e630 3e 70 31 5d 21 3d 30 20 29 3b 0a 20 20 70 4f 75  >p1]!=0 );.  pOu
1e640 74 2d 3e 75 2e 69 20 3d 20 70 2d 3e 61 70 43 73  t->u.i = p->apCs
1e650 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 73 65 71 43  r[pOp->p1]->seqC
1e660 6f 75 6e 74 2b 2b 3b 0a 20 20 62 72 65 61 6b 3b  ount++;.  break;
1e670 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  .}.../* Opcode: 
1e680 4e 65 77 52 6f 77 69 64 20 50 31 20 50 32 20 50  NewRowid P1 P2 P
1e690 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 47 65 74 20  3 * *.**.** Get 
1e6a0 61 20 6e 65 77 20 69 6e 74 65 67 65 72 20 72 65  a new integer re
1e6b0 63 6f 72 64 20 6e 75 6d 62 65 72 20 28 61 2e 6b  cord number (a.k
1e6c0 2e 61 20 22 72 6f 77 69 64 22 29 20 75 73 65 64  .a "rowid") used
1e6d0 20 61 73 20 74 68 65 20 6b 65 79 20 74 6f 20 61   as the key to a
1e6e0 20 74 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 72   table..** The r
1e6f0 65 63 6f 72 64 20 6e 75 6d 62 65 72 20 69 73 20  ecord number is 
1e700 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c 79 20 75  not previously u
1e710 73 65 64 20 61 73 20 61 20 6b 65 79 20 69 6e 20  sed as a key in 
1e720 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20  the database.** 
1e730 74 61 62 6c 65 20 74 68 61 74 20 63 75 72 73 6f  table that curso
1e740 72 20 50 31 20 70 6f 69 6e 74 73 20 74 6f 2e 20  r P1 points to. 
1e750 20 54 68 65 20 6e 65 77 20 72 65 63 6f 72 64 20   The new record 
1e760 6e 75 6d 62 65 72 20 69 73 20 77 72 69 74 74 65  number is writte
1e770 6e 0a 2a 2a 20 77 72 69 74 74 65 6e 20 74 6f 20  n.** written to 
1e780 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a  register P2..**.
1e790 2a 2a 20 49 66 20 50 33 3e 30 20 74 68 65 6e 20  ** If P3>0 then 
1e7a0 50 33 20 69 73 20 61 20 72 65 67 69 73 74 65 72  P3 is a register
1e7b0 20 69 6e 20 74 68 65 20 72 6f 6f 74 20 66 72 61   in the root fra
1e7c0 6d 65 20 6f 66 20 74 68 69 73 20 56 44 42 45 20  me of this VDBE 
1e7d0 74 68 61 74 20 68 6f 6c 64 73 20 0a 2a 2a 20 74  that holds .** t
1e7e0 68 65 20 6c 61 72 67 65 73 74 20 70 72 65 76 69  he largest previ
1e7f0 6f 75 73 6c 79 20 67 65 6e 65 72 61 74 65 64 20  ously generated 
1e800 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 2e 20 4e  record number. N
1e810 6f 20 6e 65 77 20 72 65 63 6f 72 64 20 6e 75 6d  o new record num
1e820 62 65 72 73 20 61 72 65 0a 2a 2a 20 61 6c 6c 6f  bers are.** allo
1e830 77 65 64 20 74 6f 20 62 65 20 6c 65 73 73 20 74  wed to be less t
1e840 68 61 6e 20 74 68 69 73 20 76 61 6c 75 65 2e 20  han this value. 
1e850 57 68 65 6e 20 74 68 69 73 20 76 61 6c 75 65 20  When this value 
1e860 72 65 61 63 68 65 73 20 69 74 73 20 6d 61 78 69  reaches its maxi
1e870 6d 75 6d 2c 20 0a 2a 2a 20 61 6e 20 53 51 4c 49  mum, .** an SQLI
1e880 54 45 5f 46 55 4c 4c 20 65 72 72 6f 72 20 69 73  TE_FULL error is
1e890 20 67 65 6e 65 72 61 74 65 64 2e 20 54 68 65 20   generated. The 
1e8a0 50 33 20 72 65 67 69 73 74 65 72 20 69 73 20 75  P3 register is u
1e8b0 70 64 61 74 65 64 20 77 69 74 68 20 74 68 65 20  pdated with the 
1e8c0 27 0a 2a 2a 20 67 65 6e 65 72 61 74 65 64 20 72  '.** generated r
1e8d0 65 63 6f 72 64 20 6e 75 6d 62 65 72 2e 20 54 68  ecord number. Th
1e8e0 69 73 20 50 33 20 6d 65 63 68 61 6e 69 73 6d 20  is P3 mechanism 
1e8f0 69 73 20 75 73 65 64 20 74 6f 20 68 65 6c 70 20  is used to help 
1e900 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65 0a 2a 2a  implement the.**
1e910 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 66   AUTOINCREMENT f
1e920 65 61 74 75 72 65 2e 0a 2a 2f 0a 63 61 73 65 20  eature..*/.case 
1e930 4f 50 5f 4e 65 77 52 6f 77 69 64 3a 20 7b 20 20  OP_NewRowid: {  
1e940 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
1e950 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20  -prerelease */. 
1e960 20 69 36 34 20 76 3b 20 20 20 20 20 20 20 20 20   i64 v;         
1e970 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e          /* The n
1e980 65 77 20 72 6f 77 69 64 20 2a 2f 0a 20 20 56 64  ew rowid */.  Vd
1e990 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 20 20 20  beCursor *pC;   
1e9a0 20 20 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6f       /* Cursor o
1e9b0 66 20 74 61 62 6c 65 20 74 6f 20 67 65 74 20 74  f table to get t
1e9c0 68 65 20 6e 65 77 20 72 6f 77 69 64 20 2a 2f 0a  he new rowid */.
1e9d0 20 20 69 6e 74 20 72 65 73 3b 20 20 20 20 20 20    int res;      
1e9e0 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75           /* Resu
1e9f0 6c 74 20 6f 66 20 61 6e 20 73 71 6c 69 74 65 33  lt of an sqlite3
1ea00 42 74 72 65 65 4c 61 73 74 28 29 20 2a 2f 0a 20  BtreeLast() */. 
1ea10 20 69 6e 74 20 63 6e 74 3b 20 20 20 20 20 20 20   int cnt;       
1ea20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 75 6e 74          /* Count
1ea30 65 72 20 74 6f 20 6c 69 6d 69 74 20 74 68 65 20  er to limit the 
1ea40 6e 75 6d 62 65 72 20 6f 66 20 73 65 61 72 63 68  number of search
1ea50 65 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65  es */.  Mem *pMe
1ea60 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  m;             /
1ea70 2a 20 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69  * Register holdi
1ea80 6e 67 20 6c 61 72 67 65 73 74 20 72 6f 77 69 64  ng largest rowid
1ea90 20 66 6f 72 20 41 55 54 4f 49 4e 43 52 45 4d 45   for AUTOINCREME
1eaa0 4e 54 20 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d  NT */.  VdbeFram
1eab0 65 20 2a 70 46 72 61 6d 65 3b 20 20 20 20 20 2f  e *pFrame;     /
1eac0 2a 20 52 6f 6f 74 20 66 72 61 6d 65 20 6f 66 20  * Root frame of 
1ead0 56 44 42 45 20 2a 2f 0a 0a 20 20 76 20 3d 20 30  VDBE */..  v = 0
1eae0 3b 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 61  ;.  res = 0;.  a
1eaf0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
1eb00 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
1eb10 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
1eb20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
1eb30 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
1eb40 43 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 4e 45  C!=0 );.  if( NE
1eb50 56 45 52 28 70 43 2d 3e 70 43 75 72 73 6f 72 3d  VER(pC->pCursor=
1eb60 3d 30 29 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68  =0) ){.    /* Th
1eb70 65 20 7a 65 72 6f 20 69 6e 69 74 69 61 6c 69 7a  e zero initializ
1eb80 61 74 69 6f 6e 20 61 62 6f 76 65 20 69 73 20 61  ation above is a
1eb90 6c 6c 20 74 68 61 74 20 69 73 20 6e 65 65 64 65  ll that is neede
1eba0 64 20 2a 2f 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  d */.  }else{.  
1ebb0 20 20 2f 2a 20 54 68 65 20 6e 65 78 74 20 72 6f    /* The next ro
1ebc0 77 69 64 20 6f 72 20 72 65 63 6f 72 64 20 6e 75  wid or record nu
1ebd0 6d 62 65 72 20 28 64 69 66 66 65 72 65 6e 74 20  mber (different 
1ebe0 74 65 72 6d 73 20 66 6f 72 20 74 68 65 20 73 61  terms for the sa
1ebf0 6d 65 0a 20 20 20 20 2a 2a 20 74 68 69 6e 67 29  me.    ** thing)
1ec00 20 69 73 20 6f 62 74 61 69 6e 65 64 20 69 6e 20   is obtained in 
1ec10 61 20 74 77 6f 2d 73 74 65 70 20 61 6c 67 6f 72  a two-step algor
1ec20 69 74 68 6d 2e 0a 20 20 20 20 2a 2a 0a 20 20 20  ithm..    **.   
1ec30 20 2a 2a 20 46 69 72 73 74 20 77 65 20 61 74 74   ** First we att
1ec40 65 6d 70 74 20 74 6f 20 66 69 6e 64 20 74 68 65  empt to find the
1ec50 20 6c 61 72 67 65 73 74 20 65 78 69 73 74 69 6e   largest existin
1ec60 67 20 72 6f 77 69 64 20 61 6e 64 20 61 64 64 20  g rowid and add 
1ec70 6f 6e 65 0a 20 20 20 20 2a 2a 20 74 6f 20 74 68  one.    ** to th
1ec80 61 74 2e 20 20 42 75 74 20 69 66 20 74 68 65 20  at.  But if the 
1ec90 6c 61 72 67 65 73 74 20 65 78 69 73 74 69 6e 67  largest existing
1eca0 20 72 6f 77 69 64 20 69 73 20 61 6c 72 65 61 64   rowid is alread
1ecb0 79 20 74 68 65 20 6d 61 78 69 6d 75 6d 0a 20 20  y the maximum.  
1ecc0 20 20 2a 2a 20 70 6f 73 69 74 69 76 65 20 69 6e    ** positive in
1ecd0 74 65 67 65 72 2c 20 77 65 20 68 61 76 65 20 74  teger, we have t
1ece0 6f 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74  o fall through t
1ecf0 6f 20 74 68 65 20 73 65 63 6f 6e 64 0a 20 20 20  o the second.   
1ed00 20 2a 2a 20 70 72 6f 62 61 62 69 6c 69 73 74 69   ** probabilisti
1ed10 63 20 61 6c 67 6f 72 69 74 68 6d 0a 20 20 20 20  c algorithm.    
1ed20 2a 2a 0a 20 20 20 20 2a 2a 20 54 68 65 20 73 65  **.    ** The se
1ed30 63 6f 6e 64 20 61 6c 67 6f 72 69 74 68 6d 20 69  cond algorithm i
1ed40 73 20 74 6f 20 73 65 6c 65 63 74 20 61 20 72 6f  s to select a ro
1ed50 77 69 64 20 61 74 20 72 61 6e 64 6f 6d 20 61 6e  wid at random an
1ed60 64 20 73 65 65 20 69 66 0a 20 20 20 20 2a 2a 20  d see if.    ** 
1ed70 69 74 20 61 6c 72 65 61 64 79 20 65 78 69 73 74  it already exist
1ed80 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20  s in the table. 
1ed90 20 49 66 20 69 74 20 64 6f 65 73 20 6e 6f 74 20   If it does not 
1eda0 65 78 69 73 74 2c 20 77 65 20 68 61 76 65 0a 20  exist, we have. 
1edb0 20 20 20 2a 2a 20 73 75 63 63 65 65 64 65 64 2e     ** succeeded.
1edc0 20 20 49 66 20 74 68 65 20 72 61 6e 64 6f 6d 20    If the random 
1edd0 72 6f 77 69 64 20 64 6f 65 73 20 65 78 69 73 74  rowid does exist
1ede0 2c 20 77 65 20 73 65 6c 65 63 74 20 61 20 6e 65  , we select a ne
1edf0 77 20 6f 6e 65 0a 20 20 20 20 2a 2a 20 61 6e 64  w one.    ** and
1ee00 20 74 72 79 20 61 67 61 69 6e 2c 20 75 70 20 74   try again, up t
1ee10 6f 20 31 30 30 20 74 69 6d 65 73 2e 0a 20 20 20  o 100 times..   
1ee20 20 2a 2f 0a 20 20 20 20 61 73 73 65 72 74 28 20   */.    assert( 
1ee30 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 0a  pC->isTable );..
1ee40 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 33 32  #ifdef SQLITE_32
1ee50 42 49 54 5f 52 4f 57 49 44 0a 23 20 20 20 64 65  BIT_ROWID.#   de
1ee60 66 69 6e 65 20 4d 41 58 5f 52 4f 57 49 44 20 30  fine MAX_ROWID 0
1ee70 78 37 66 66 66 66 66 66 66 0a 23 65 6c 73 65 0a  x7fffffff.#else.
1ee80 20 20 20 20 2f 2a 20 53 6f 6d 65 20 63 6f 6d 70      /* Some comp
1ee90 69 6c 65 72 73 20 63 6f 6d 70 6c 61 69 6e 20 61  ilers complain a
1eea0 62 6f 75 74 20 63 6f 6e 73 74 61 6e 74 73 20 6f  bout constants o
1eeb0 66 20 74 68 65 20 66 6f 72 6d 20 30 78 37 66 66  f the form 0x7ff
1eec0 66 66 66 66 66 66 66 66 66 66 66 66 66 2e 0a 20  fffffffffffff.. 
1eed0 20 20 20 2a 2a 20 4f 74 68 65 72 73 20 63 6f 6d     ** Others com
1eee0 70 6c 61 69 6e 20 61 62 6f 75 74 20 30 78 37 66  plain about 0x7f
1eef0 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 4c  fffffffffffffffL
1ef00 4c 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  L.  The followin
1ef10 67 20 6d 61 63 72 6f 20 73 65 65 6d 73 0a 20 20  g macro seems.  
1ef20 20 20 2a 2a 20 74 6f 20 70 72 6f 76 69 64 65 20    ** to provide 
1ef30 74 68 65 20 63 6f 6e 73 74 61 6e 74 20 77 68 69  the constant whi
1ef40 6c 65 20 6d 61 6b 69 6e 67 20 61 6c 6c 20 63 6f  le making all co
1ef50 6d 70 69 6c 65 72 73 20 68 61 70 70 79 2e 0a 20  mpilers happy.. 
1ef60 20 20 20 2a 2f 0a 23 20 20 20 64 65 66 69 6e 65     */.#   define
1ef70 20 4d 41 58 5f 52 4f 57 49 44 20 20 28 69 36 34   MAX_ROWID  (i64
1ef80 29 28 20 28 28 28 75 36 34 29 30 78 37 66 66 66  )( (((u64)0x7fff
1ef90 66 66 66 66 29 3c 3c 33 32 29 20 7c 20 28 75 36  ffff)<<32) | (u6
1efa0 34 29 30 78 66 66 66 66 66 66 66 66 20 29 0a 23  4)0xffffffff ).#
1efb0 65 6e 64 69 66 0a 0a 20 20 20 20 69 66 28 20 21  endif..    if( !
1efc0 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77  pC->useRandomRow
1efd0 69 64 20 29 7b 0a 20 20 20 20 20 20 76 20 3d 20  id ){.      v = 
1efe0 73 71 6c 69 74 65 33 42 74 72 65 65 47 65 74 43  sqlite3BtreeGetC
1eff0 61 63 68 65 64 52 6f 77 69 64 28 70 43 2d 3e 70  achedRowid(pC->p
1f000 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 20 20 69  Cursor);.      i
1f010 66 28 20 76 3d 3d 30 20 29 7b 0a 20 20 20 20 20  f( v==0 ){.     
1f020 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
1f030 74 72 65 65 4c 61 73 74 28 70 43 2d 3e 70 43 75  treeLast(pC->pCu
1f040 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20 20  rsor, &res);.   
1f050 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c       if( rc!=SQL
1f060 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
1f070 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
1f080 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
1f090 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69       }.        i
1f0a0 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20 20 20  f( res ){.      
1f0b0 20 20 20 20 76 20 3d 20 31 3b 20 20 20 2f 2a 20      v = 1;   /* 
1f0c0 49 4d 50 3a 20 52 2d 36 31 39 31 34 2d 34 38 30  IMP: R-61914-480
1f0d0 37 34 20 2a 2f 0a 20 20 20 20 20 20 20 20 7d 65  74 */.        }e
1f0e0 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 61  lse{.          a
1f0f0 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 42 74  ssert( sqlite3Bt
1f100 72 65 65 43 75 72 73 6f 72 49 73 56 61 6c 69 64  reeCursorIsValid
1f110 28 70 43 2d 3e 70 43 75 72 73 6f 72 29 20 29 3b  (pC->pCursor) );
1f120 0a 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20  .          rc = 
1f130 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79 53  sqlite3BtreeKeyS
1f140 69 7a 65 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c  ize(pC->pCursor,
1f150 20 26 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20   &v);.          
1f160 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49  assert( rc==SQLI
1f170 54 45 5f 4f 4b 20 29 3b 20 20 20 2f 2a 20 43 61  TE_OK );   /* Ca
1f180 6e 6e 6f 74 20 66 61 69 6c 20 66 6f 6c 6c 6f 77  nnot fail follow
1f190 69 6e 67 20 42 74 72 65 65 4c 61 73 74 28 29 20  ing BtreeLast() 
1f1a0 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 69 66 28  */.          if(
1f1b0 20 76 3d 3d 4d 41 58 5f 52 4f 57 49 44 20 29 7b   v==MAX_ROWID ){
1f1c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 43 2d  .            pC-
1f1d0 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20  >useRandomRowid 
1f1e0 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 20 20 7d  = 1;.          }
1f1f0 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20  else{.          
1f200 20 20 76 2b 2b 3b 20 20 20 2f 2a 20 49 4d 50 3a    v++;   /* IMP:
1f210 20 52 2d 32 39 35 33 38 2d 33 34 39 38 37 20 2a   R-29538-34987 *
1f220 2f 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20  /.          }.  
1f230 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a        }.      }.
1f240 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
1f250 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45  OMIT_AUTOINCREME
1f260 4e 54 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70  NT.      if( pOp
1f270 2d 3e 70 33 20 29 7b 0a 20 20 20 20 20 20 20 20  ->p3 ){.        
1f280 2f 2a 20 41 73 73 65 72 74 20 74 68 61 74 20 50  /* Assert that P
1f290 33 20 69 73 20 61 20 76 61 6c 69 64 20 6d 65 6d  3 is a valid mem
1f2a0 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20  ory cell. */.   
1f2b0 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
1f2c0 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 20 20 20 20  ->p3>0 );.      
1f2d0 20 20 69 66 28 20 70 2d 3e 70 46 72 61 6d 65 20    if( p->pFrame 
1f2e0 29 7b 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72  ){.          for
1f2f0 28 70 46 72 61 6d 65 3d 70 2d 3e 70 46 72 61 6d  (pFrame=p->pFram
1f300 65 3b 20 70 46 72 61 6d 65 2d 3e 70 50 61 72 65  e; pFrame->pPare
1f310 6e 74 3b 20 70 46 72 61 6d 65 3d 70 46 72 61 6d  nt; pFrame=pFram
1f320 65 2d 3e 70 50 61 72 65 6e 74 29 3b 0a 20 20 20  e->pParent);.   
1f330 20 20 20 20 20 20 20 2f 2a 20 41 73 73 65 72 74         /* Assert
1f340 20 74 68 61 74 20 50 33 20 69 73 20 61 20 76 61   that P3 is a va
1f350 6c 69 64 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 2e  lid memory cell.
1f360 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 61 73   */.          as
1f370 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 70  sert( pOp->p3<=p
1f380 46 72 61 6d 65 2d 3e 6e 4d 65 6d 20 29 3b 0a 20  Frame->nMem );. 
1f390 20 20 20 20 20 20 20 20 20 70 4d 65 6d 20 3d 20           pMem = 
1f3a0 26 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f  &pFrame->aMem[pO
1f3b0 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 20 20 20 20  p->p3];.        
1f3c0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20  }else{.         
1f3d0 20 2f 2a 20 41 73 73 65 72 74 20 74 68 61 74 20   /* Assert that 
1f3e0 50 33 20 69 73 20 61 20 76 61 6c 69 64 20 6d 65  P3 is a valid me
1f3f0 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a 20 20  mory cell. */.  
1f400 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
1f410 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d  pOp->p3<=p->nMem
1f420 20 29 3b 0a 20 20 20 20 20 20 20 20 20 20 70 4d   );.          pM
1f430 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  em = &aMem[pOp->
1f440 70 33 5d 3b 0a 20 20 20 20 20 20 20 20 20 20 6d  p3];.          m
1f450 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
1f460 70 2c 20 70 4d 65 6d 29 3b 0a 20 20 20 20 20 20  p, pMem);.      
1f470 20 20 7d 0a 20 20 20 20 20 20 20 20 61 73 73 65    }.        asse
1f480 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70  rt( memIsValid(p
1f490 4d 65 6d 29 20 29 3b 0a 0a 20 20 20 20 20 20 20  Mem) );..       
1f4a0 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
1f4b0 70 4f 70 2d 3e 70 33 2c 20 70 4d 65 6d 29 3b 0a  pOp->p3, pMem);.
1f4c0 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
1f4d0 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79  dbeMemIntegerify
1f4e0 28 70 4d 65 6d 29 3b 0a 20 20 20 20 20 20 20 20  (pMem);.        
1f4f0 61 73 73 65 72 74 28 20 28 70 4d 65 6d 2d 3e 66  assert( (pMem->f
1f500 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21  lags & MEM_Int)!
1f510 3d 30 20 29 3b 20 20 2f 2a 20 6d 65 6d 28 50 33  =0 );  /* mem(P3
1f520 29 20 68 6f 6c 64 73 20 61 6e 20 69 6e 74 65 67  ) holds an integ
1f530 65 72 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66  er */.        if
1f540 28 20 70 4d 65 6d 2d 3e 75 2e 69 3d 3d 4d 41 58  ( pMem->u.i==MAX
1f550 5f 52 4f 57 49 44 20 7c 7c 20 70 43 2d 3e 75 73  _ROWID || pC->us
1f560 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20 29 7b 0a  eRandomRowid ){.
1f570 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 53            rc = S
1f580 51 4c 49 54 45 5f 46 55 4c 4c 3b 20 20 20 2f 2a  QLITE_FULL;   /*
1f590 20 49 4d 50 3a 20 52 2d 31 32 32 37 35 2d 36 31   IMP: R-12275-61
1f5a0 33 33 38 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  338 */.         
1f5b0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
1f5c0 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20  to_error;.      
1f5d0 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20    }.        if( 
1f5e0 76 3c 70 4d 65 6d 2d 3e 75 2e 69 2b 31 20 29 7b  v<pMem->u.i+1 ){
1f5f0 0a 20 20 20 20 20 20 20 20 20 20 76 20 3d 20 70  .          v = p
1f600 4d 65 6d 2d 3e 75 2e 69 20 2b 20 31 3b 0a 20 20  Mem->u.i + 1;.  
1f610 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
1f620 70 4d 65 6d 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20  pMem->u.i = v;. 
1f630 20 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20       }.#endif.. 
1f640 20 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65       sqlite3Btre
1f650 65 53 65 74 43 61 63 68 65 64 52 6f 77 69 64 28  eSetCachedRowid(
1f660 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 76 3c 4d  pC->pCursor, v<M
1f670 41 58 5f 52 4f 57 49 44 20 3f 20 76 2b 31 20 3a  AX_ROWID ? v+1 :
1f680 20 30 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69   0);.    }.    i
1f690 66 28 20 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d  f( pC->useRandom
1f6a0 52 6f 77 69 64 20 29 7b 0a 20 20 20 20 20 20 2f  Rowid ){.      /
1f6b0 2a 20 49 4d 50 4c 45 4d 45 4e 54 41 54 49 4f 4e  * IMPLEMENTATION
1f6c0 2d 4f 46 3a 20 52 2d 30 37 36 37 37 2d 34 31 38  -OF: R-07677-418
1f6d0 38 31 20 49 66 20 74 68 65 20 6c 61 72 67 65 73  81 If the larges
1f6e0 74 20 52 4f 57 49 44 20 69 73 20 65 71 75 61 6c  t ROWID is equal
1f6f0 20 74 6f 20 74 68 65 0a 20 20 20 20 20 20 2a 2a   to the.      **
1f700 20 6c 61 72 67 65 73 74 20 70 6f 73 73 69 62 6c   largest possibl
1f710 65 20 69 6e 74 65 67 65 72 20 28 39 32 32 33 33  e integer (92233
1f720 37 32 30 33 36 38 35 34 37 37 35 38 30 37 29 20  72036854775807) 
1f730 74 68 65 6e 20 74 68 65 20 64 61 74 61 62 61 73  then the databas
1f740 65 0a 20 20 20 20 20 20 2a 2a 20 65 6e 67 69 6e  e.      ** engin
1f750 65 20 73 74 61 72 74 73 20 70 69 63 6b 69 6e 67  e starts picking
1f760 20 70 6f 73 69 74 69 76 65 20 63 61 6e 64 69 64   positive candid
1f770 61 74 65 20 52 4f 57 49 44 73 20 61 74 20 72 61  ate ROWIDs at ra
1f780 6e 64 6f 6d 20 75 6e 74 69 6c 0a 20 20 20 20 20  ndom until.     
1f790 20 2a 2a 20 69 74 20 66 69 6e 64 73 20 6f 6e 65   ** it finds one
1f7a0 20 74 68 61 74 20 69 73 20 6e 6f 74 20 70 72 65   that is not pre
1f7b0 76 69 6f 75 73 6c 79 20 75 73 65 64 2e 20 2a 2f  viously used. */
1f7c0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
1f7d0 4f 70 2d 3e 70 33 3d 3d 30 20 29 3b 20 20 2f 2a  Op->p3==0 );  /*
1f7e0 20 57 65 20 63 61 6e 6e 6f 74 20 62 65 20 69 6e   We cannot be in
1f7f0 20 72 61 6e 64 6f 6d 20 72 6f 77 69 64 20 6d 6f   random rowid mo
1f800 64 65 20 69 66 20 74 68 69 73 20 69 73 0a 20 20  de if this is.  
1f810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f820 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 61 6e             ** an
1f830 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 74   AUTOINCREMENT t
1f840 61 62 6c 65 2e 20 2a 2f 0a 20 20 20 20 20 20 2f  able. */.      /
1f850 2a 20 6f 6e 20 74 68 65 20 66 69 72 73 74 20 61  * on the first a
1f860 74 74 65 6d 70 74 2c 20 73 69 6d 70 6c 79 20 64  ttempt, simply d
1f870 6f 20 6f 6e 65 20 6d 6f 72 65 20 74 68 61 6e 20  o one more than 
1f880 70 72 65 76 69 6f 75 73 20 2a 2f 0a 20 20 20 20  previous */.    
1f890 20 20 76 20 3d 20 6c 61 73 74 52 6f 77 69 64 3b    v = lastRowid;
1f8a0 0a 20 20 20 20 20 20 76 20 26 3d 20 28 4d 41 58  .      v &= (MAX
1f8b0 5f 52 4f 57 49 44 3e 3e 31 29 3b 20 2f 2a 20 65  _ROWID>>1); /* e
1f8c0 6e 73 75 72 65 20 64 6f 65 73 6e 27 74 20 67 6f  nsure doesn't go
1f8d0 20 6e 65 67 61 74 69 76 65 20 2a 2f 0a 20 20 20   negative */.   
1f8e0 20 20 20 76 2b 2b 3b 20 2f 2a 20 65 6e 73 75 72     v++; /* ensur
1f8f0 65 20 6e 6f 6e 2d 7a 65 72 6f 20 2a 2f 0a 20 20  e non-zero */.  
1f900 20 20 20 20 63 6e 74 20 3d 20 30 3b 0a 20 20 20      cnt = 0;.   
1f910 20 20 20 77 68 69 6c 65 28 20 20 20 28 28 72 63     while(   ((rc
1f920 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d   = sqlite3BtreeM
1f930 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43  ovetoUnpacked(pC
1f940 2d 3e 70 43 75 72 73 6f 72 2c 20 30 2c 20 28 75  ->pCursor, 0, (u
1f950 36 34 29 76 2c 0a 20 20 20 20 20 20 20 20 20 20  64)v,.          
1f960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f980 20 20 20 20 20 20 20 30 2c 20 26 72 65 73 29 29         0, &res))
1f990 3d 3d 53 51 4c 49 54 45 5f 4f 4b 29 0a 20 20 20  ==SQLITE_OK).   
1f9a0 20 20 20 20 20 20 20 20 20 26 26 20 28 72 65 73           && (res
1f9b0 3d 3d 30 29 0a 20 20 20 20 20 20 20 20 20 20 20  ==0).           
1f9c0 20 26 26 20 28 2b 2b 63 6e 74 3c 31 30 30 29 29   && (++cnt<100))
1f9d0 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 63 6f 6c  {.        /* col
1f9e0 6c 69 73 69 6f 6e 20 2d 20 74 72 79 20 61 6e 6f  lision - try ano
1f9f0 74 68 65 72 20 72 61 6e 64 6f 6d 20 72 6f 77 69  ther random rowi
1fa00 64 20 2a 2f 0a 20 20 20 20 20 20 20 20 73 71 6c  d */.        sql
1fa10 69 74 65 33 5f 72 61 6e 64 6f 6d 6e 65 73 73 28  ite3_randomness(
1fa20 73 69 7a 65 6f 66 28 76 29 2c 20 26 76 29 3b 0a  sizeof(v), &v);.
1fa30 20 20 20 20 20 20 20 20 69 66 28 20 63 6e 74 3c          if( cnt<
1fa40 35 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 2f  5 ){.          /
1fa50 2a 20 74 72 79 20 22 73 6d 61 6c 6c 22 20 72 61  * try "small" ra
1fa60 6e 64 6f 6d 20 72 6f 77 69 64 73 20 66 6f 72 20  ndom rowids for 
1fa70 74 68 65 20 69 6e 69 74 69 61 6c 20 61 74 74 65  the initial atte
1fa80 6d 70 74 73 20 2a 2f 0a 20 20 20 20 20 20 20 20  mpts */.        
1fa90 20 20 76 20 26 3d 20 30 78 66 66 66 66 66 66 3b    v &= 0xffffff;
1faa0 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  .        }else{.
1fab0 20 20 20 20 20 20 20 20 20 20 76 20 26 3d 20 28            v &= (
1fac0 4d 41 58 5f 52 4f 57 49 44 3e 3e 31 29 3b 20 2f  MAX_ROWID>>1); /
1fad0 2a 20 65 6e 73 75 72 65 20 64 6f 65 73 6e 27 74  * ensure doesn't
1fae0 20 67 6f 20 6e 65 67 61 74 69 76 65 20 2a 2f 0a   go negative */.
1faf0 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
1fb00 20 20 76 2b 2b 3b 20 2f 2a 20 65 6e 73 75 72 65    v++; /* ensure
1fb10 20 6e 6f 6e 2d 7a 65 72 6f 20 2a 2f 0a 20 20 20   non-zero */.   
1fb20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 72     }.      if( r
1fb30 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20  c==SQLITE_OK && 
1fb40 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  res==0 ){.      
1fb50 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 46 55    rc = SQLITE_FU
1fb60 4c 4c 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d  LL;   /* IMP: R-
1fb70 33 38 32 31 39 2d 35 33 30 30 32 20 2a 2f 0a 20  38219-53002 */. 
1fb80 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72         goto abor
1fb90 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
1fba0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 61 73        }.      as
1fbb0 73 65 72 74 28 20 76 3e 30 20 29 3b 20 20 2f 2a  sert( v>0 );  /*
1fbc0 20 45 56 3a 20 52 2d 34 30 38 31 32 2d 30 33 35   EV: R-40812-035
1fbd0 37 30 20 2a 2f 0a 20 20 20 20 7d 0a 20 20 20 20  70 */.    }.    
1fbe0 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64  pC->rowidIsValid
1fbf0 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e 64 65   = 0;.    pC->de
1fc00 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30  ferredMoveto = 0
1fc10 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53  ;.    pC->cacheS
1fc20 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
1fc30 41 4c 45 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d  ALE;.  }.  pOut-
1fc40 3e 75 2e 69 20 3d 20 76 3b 0a 20 20 62 72 65 61  >u.i = v;.  brea
1fc50 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
1fc60 20 49 6e 73 65 72 74 20 50 31 20 50 32 20 50 33   Insert P1 P2 P3
1fc70 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 57 72 69   P4 P5.**.** Wri
1fc80 74 65 20 61 6e 20 65 6e 74 72 79 20 69 6e 74 6f  te an entry into
1fc90 20 74 68 65 20 74 61 62 6c 65 20 6f 66 20 63 75   the table of cu
1fca0 72 73 6f 72 20 50 31 2e 20 20 41 20 6e 65 77 20  rsor P1.  A new 
1fcb0 65 6e 74 72 79 20 69 73 0a 2a 2a 20 63 72 65 61  entry is.** crea
1fcc0 74 65 64 20 69 66 20 69 74 20 64 6f 65 73 6e 27  ted if it doesn'
1fcd0 74 20 61 6c 72 65 61 64 79 20 65 78 69 73 74 20  t already exist 
1fce0 6f 72 20 74 68 65 20 64 61 74 61 20 66 6f 72 20  or the data for 
1fcf0 61 6e 20 65 78 69 73 74 69 6e 67 0a 2a 2a 20 65  an existing.** e
1fd00 6e 74 72 79 20 69 73 20 6f 76 65 72 77 72 69 74  ntry is overwrit
1fd10 74 65 6e 2e 20 20 54 68 65 20 64 61 74 61 20 69  ten.  The data i
1fd20 73 20 74 68 65 20 76 61 6c 75 65 20 4d 45 4d 5f  s the value MEM_
1fd30 42 6c 6f 62 20 73 74 6f 72 65 64 20 69 6e 20 72  Blob stored in r
1fd40 65 67 69 73 74 65 72 0a 2a 2a 20 6e 75 6d 62 65  egister.** numbe
1fd50 72 20 50 32 2e 20 54 68 65 20 6b 65 79 20 69 73  r P2. The key is
1fd60 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73   stored in regis
1fd70 74 65 72 20 50 33 2e 20 54 68 65 20 6b 65 79 20  ter P3. The key 
1fd80 6d 75 73 74 0a 2a 2a 20 62 65 20 61 20 4d 45 4d  must.** be a MEM
1fd90 5f 49 6e 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  _Int..**.** If t
1fda0 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47  he OPFLAG_NCHANG
1fdb0 45 20 66 6c 61 67 20 6f 66 20 50 35 20 69 73 20  E flag of P5 is 
1fdc0 73 65 74 2c 20 74 68 65 6e 20 74 68 65 20 72 6f  set, then the ro
1fdd0 77 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 20 69  w change count i
1fde0 73 0a 2a 2a 20 69 6e 63 72 65 6d 65 6e 74 65 64  s.** incremented
1fdf0 20 28 6f 74 68 65 72 77 69 73 65 20 6e 6f 74 29   (otherwise not)
1fe00 2e 20 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47  .  If the OPFLAG
1fe10 5f 4c 41 53 54 52 4f 57 49 44 20 66 6c 61 67 20  _LASTROWID flag 
1fe20 6f 66 20 50 35 20 69 73 20 73 65 74 2c 0a 2a 2a  of P5 is set,.**
1fe30 20 74 68 65 6e 20 72 6f 77 69 64 20 69 73 20 73   then rowid is s
1fe40 74 6f 72 65 64 20 66 6f 72 20 73 75 62 73 65 71  tored for subseq
1fe50 75 65 6e 74 20 72 65 74 75 72 6e 20 62 79 20 74  uent return by t
1fe60 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 6c 61  he.** sqlite3_la
1fe70 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28  st_insert_rowid(
1fe80 29 20 66 75 6e 63 74 69 6f 6e 20 28 6f 74 68 65  ) function (othe
1fe90 72 77 69 73 65 20 69 74 20 69 73 20 75 6e 6d 6f  rwise it is unmo
1fea0 64 69 66 69 65 64 29 2e 0a 2a 2a 0a 2a 2a 20 49  dified)..**.** I
1feb0 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 55 53 45  f the OPFLAG_USE
1fec0 53 45 45 4b 52 45 53 55 4c 54 20 66 6c 61 67 20  SEEKRESULT flag 
1fed0 6f 66 20 50 35 20 69 73 20 73 65 74 20 61 6e 64  of P5 is set and
1fee0 20 69 66 20 74 68 65 20 72 65 73 75 6c 74 20 6f   if the result o
1fef0 66 0a 2a 2a 20 74 68 65 20 6c 61 73 74 20 73 65  f.** the last se
1ff00 65 6b 20 6f 70 65 72 61 74 69 6f 6e 20 28 4f 50  ek operation (OP
1ff10 5f 4e 6f 74 45 78 69 73 74 73 29 20 77 61 73 20  _NotExists) was 
1ff20 61 20 73 75 63 63 65 73 73 2c 20 74 68 65 6e 20  a success, then 
1ff30 74 68 69 73 0a 2a 2a 20 6f 70 65 72 61 74 69 6f  this.** operatio
1ff40 6e 20 77 69 6c 6c 20 6e 6f 74 20 61 74 74 65 6d  n will not attem
1ff50 70 74 20 74 6f 20 66 69 6e 64 20 74 68 65 20 61  pt to find the a
1ff60 70 70 72 6f 70 72 69 61 74 65 20 72 6f 77 20 62  ppropriate row b
1ff70 65 66 6f 72 65 20 64 6f 69 6e 67 0a 2a 2a 20 74  efore doing.** t
1ff80 68 65 20 69 6e 73 65 72 74 20 62 75 74 20 77 69  he insert but wi
1ff90 6c 6c 20 69 6e 73 74 65 61 64 20 6f 76 65 72 77  ll instead overw
1ffa0 72 69 74 65 20 74 68 65 20 72 6f 77 20 74 68 61  rite the row tha
1ffb0 74 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a  t the cursor is.
1ffc0 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69  ** currently poi
1ffd0 6e 74 69 6e 67 20 74 6f 2e 20 20 50 72 65 73 75  nting to.  Presu
1ffe0 6d 61 62 6c 79 2c 20 74 68 65 20 70 72 69 6f 72  mably, the prior
1fff0 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 20 6f 70   OP_NotExists op
20000 63 6f 64 65 0a 2a 2a 20 68 61 73 20 61 6c 72 65  code.** has alre
20010 61 64 79 20 70 6f 73 69 74 69 6f 6e 65 64 20 74  ady positioned t
20020 68 65 20 63 75 72 73 6f 72 20 63 6f 72 72 65 63  he cursor correc
20030 74 6c 79 2e 20 20 54 68 69 73 20 69 73 20 61 6e  tly.  This is an
20040 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 0a 2a 2a   optimization.**
20050 20 74 68 61 74 20 62 6f 6f 73 74 73 20 70 65 72   that boosts per
20060 66 6f 72 6d 61 6e 63 65 20 62 79 20 61 76 6f 69  formance by avoi
20070 64 69 6e 67 20 72 65 64 75 6e 64 61 6e 74 20 73  ding redundant s
20080 65 65 6b 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  eeks..**.** If t
20090 68 65 20 4f 50 46 4c 41 47 5f 49 53 55 50 44 41  he OPFLAG_ISUPDA
200a0 54 45 20 66 6c 61 67 20 69 73 20 73 65 74 2c 20  TE flag is set, 
200b0 74 68 65 6e 20 74 68 69 73 20 6f 70 63 6f 64 65  then this opcode
200c0 20 69 73 20 70 61 72 74 20 6f 66 20 61 6e 0a 2a   is part of an.*
200d0 2a 20 55 50 44 41 54 45 20 6f 70 65 72 61 74 69  * UPDATE operati
200e0 6f 6e 2e 20 20 4f 74 68 65 72 77 69 73 65 20 28  on.  Otherwise (
200f0 69 66 20 74 68 65 20 66 6c 61 67 20 69 73 20 63  if the flag is c
20100 6c 65 61 72 29 20 74 68 65 6e 20 74 68 69 73 20  lear) then this 
20110 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 70 61 72  opcode.** is par
20120 74 20 6f 66 20 61 6e 20 49 4e 53 45 52 54 20 6f  t of an INSERT o
20130 70 65 72 61 74 69 6f 6e 2e 20 20 54 68 65 20 64  peration.  The d
20140 69 66 66 65 72 65 6e 63 65 20 69 73 20 6f 6e 6c  ifference is onl
20150 79 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 0a 2a  y important to.*
20160 2a 20 74 68 65 20 75 70 64 61 74 65 20 68 6f 6f  * the update hoo
20170 6b 2e 0a 2a 2a 0a 2a 2a 20 50 61 72 61 6d 65 74  k..**.** Paramet
20180 65 72 20 50 34 20 6d 61 79 20 70 6f 69 6e 74 20  er P4 may point 
20190 74 6f 20 61 20 73 74 72 69 6e 67 20 63 6f 6e 74  to a string cont
201a0 61 69 6e 69 6e 67 20 74 68 65 20 74 61 62 6c 65  aining the table
201b0 2d 6e 61 6d 65 2c 20 6f 72 0a 2a 2a 20 6d 61 79  -name, or.** may
201c0 20 62 65 20 4e 55 4c 4c 2e 20 49 66 20 69 74 20   be NULL. If it 
201d0 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68 65  is not NULL, the
201e0 6e 20 74 68 65 20 75 70 64 61 74 65 2d 68 6f 6f  n the update-hoo
201f0 6b 20 0a 2a 2a 20 28 73 71 6c 69 74 65 33 2e 78  k .** (sqlite3.x
20200 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 29 20  UpdateCallback) 
20210 69 73 20 69 6e 76 6f 6b 65 64 20 66 6f 6c 6c 6f  is invoked follo
20220 77 69 6e 67 20 61 20 73 75 63 63 65 73 73 66 75  wing a successfu
20230 6c 20 69 6e 73 65 72 74 2e 0a 2a 2a 0a 2a 2a 20  l insert..**.** 
20240 28 57 41 52 4e 49 4e 47 2f 54 4f 44 4f 3a 20 49  (WARNING/TODO: I
20250 66 20 50 31 20 69 73 20 61 20 70 73 65 75 64 6f  f P1 is a pseudo
20260 2d 63 75 72 73 6f 72 20 61 6e 64 20 50 32 20 69  -cursor and P2 i
20270 73 20 64 79 6e 61 6d 69 63 61 6c 6c 79 0a 2a 2a  s dynamically.**
20280 20 61 6c 6c 6f 63 61 74 65 64 2c 20 74 68 65 6e   allocated, then
20290 20 6f 77 6e 65 72 73 68 69 70 20 6f 66 20 50 32   ownership of P2
202a0 20 69 73 20 74 72 61 6e 73 66 65 72 72 65 64 20   is transferred 
202b0 74 6f 20 74 68 65 20 70 73 65 75 64 6f 2d 63 75  to the pseudo-cu
202c0 72 73 6f 72 0a 2a 2a 20 61 6e 64 20 72 65 67 69  rsor.** and regi
202d0 73 74 65 72 20 50 32 20 62 65 63 6f 6d 65 73 20  ster P2 becomes 
202e0 65 70 68 65 6d 65 72 61 6c 2e 20 20 49 66 20 74  ephemeral.  If t
202f0 68 65 20 63 75 72 73 6f 72 20 69 73 20 63 68 61  he cursor is cha
20300 6e 67 65 64 2c 20 74 68 65 0a 2a 2a 20 76 61 6c  nged, the.** val
20310 75 65 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  ue of register P
20320 32 20 77 69 6c 6c 20 74 68 65 6e 20 63 68 61 6e  2 will then chan
20330 67 65 2e 20 20 4d 61 6b 65 20 73 75 72 65 20 74  ge.  Make sure t
20340 68 69 73 20 64 6f 65 73 20 6e 6f 74 0a 2a 2a 20  his does not.** 
20350 63 61 75 73 65 20 61 6e 79 20 70 72 6f 62 6c 65  cause any proble
20360 6d 73 2e 29 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  ms.).**.** This 
20370 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 6c 79  instruction only
20380 20 77 6f 72 6b 73 20 6f 6e 20 74 61 62 6c 65 73   works on tables
20390 2e 20 20 54 68 65 20 65 71 75 69 76 61 6c 65 6e  .  The equivalen
203a0 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a  t instruction.**
203b0 20 66 6f 72 20 69 6e 64 69 63 65 73 20 69 73 20   for indices is 
203c0 4f 50 5f 49 64 78 49 6e 73 65 72 74 2e 0a 2a 2f  OP_IdxInsert..*/
203d0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 73 65  ./* Opcode: Inse
203e0 72 74 49 6e 74 20 50 31 20 50 32 20 50 33 20 50  rtInt P1 P2 P3 P
203f0 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  4 P5.**.** This 
20400 77 6f 72 6b 73 20 65 78 61 63 74 6c 79 20 6c 69  works exactly li
20410 6b 65 20 4f 50 5f 49 6e 73 65 72 74 20 65 78 63  ke OP_Insert exc
20420 65 70 74 20 74 68 61 74 20 74 68 65 20 6b 65 79  ept that the key
20430 20 69 73 20 74 68 65 0a 2a 2a 20 69 6e 74 65 67   is the.** integ
20440 65 72 20 76 61 6c 75 65 20 50 33 2c 20 6e 6f 74  er value P3, not
20450 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   the value of th
20460 65 20 69 6e 74 65 67 65 72 20 73 74 6f 72 65 64  e integer stored
20470 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e   in register P3.
20480 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 73 65  .*/.case OP_Inse
20490 72 74 3a 20 0a 63 61 73 65 20 4f 50 5f 49 6e 73  rt: .case OP_Ins
204a0 65 72 74 49 6e 74 3a 20 7b 0a 20 20 4d 65 6d 20  ertInt: {.  Mem 
204b0 2a 70 44 61 74 61 3b 20 20 20 20 20 20 20 2f 2a  *pData;       /*
204c0 20 4d 45 4d 20 63 65 6c 6c 20 68 6f 6c 64 69 6e   MEM cell holdin
204d0 67 20 64 61 74 61 20 66 6f 72 20 74 68 65 20 72  g data for the r
204e0 65 63 6f 72 64 20 74 6f 20 62 65 20 69 6e 73 65  ecord to be inse
204f0 72 74 65 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  rted */.  Mem *p
20500 4b 65 79 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d  Key;        /* M
20510 45 4d 20 63 65 6c 6c 20 68 6f 6c 64 69 6e 67 20  EM cell holding 
20520 6b 65 79 20 20 66 6f 72 20 74 68 65 20 72 65 63  key  for the rec
20530 6f 72 64 20 2a 2f 0a 20 20 69 36 34 20 69 4b 65  ord */.  i64 iKe
20540 79 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  y;         /* Th
20550 65 20 69 6e 74 65 67 65 72 20 52 4f 57 49 44 20  e integer ROWID 
20560 6f 72 20 6b 65 79 20 66 6f 72 20 74 68 65 20 72  or key for the r
20570 65 63 6f 72 64 20 74 6f 20 62 65 20 69 6e 73 65  ecord to be inse
20580 72 74 65 64 20 2a 2f 0a 20 20 56 64 62 65 43 75  rted */.  VdbeCu
20590 72 73 6f 72 20 2a 70 43 3b 20 20 20 2f 2a 20 43  rsor *pC;   /* C
205a0 75 72 73 6f 72 20 74 6f 20 74 61 62 6c 65 20 69  ursor to table i
205b0 6e 74 6f 20 77 68 69 63 68 20 69 6e 73 65 72 74  nto which insert
205c0 20 69 73 20 77 72 69 74 74 65 6e 20 2a 2f 0a 20   is written */. 
205d0 20 69 6e 74 20 6e 5a 65 72 6f 3b 20 20 20 20 20   int nZero;     
205e0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
205f0 7a 65 72 6f 2d 62 79 74 65 73 20 74 6f 20 61 70  zero-bytes to ap
20600 70 65 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 73 65  pend */.  int se
20610 65 6b 52 65 73 75 6c 74 3b 20 20 20 2f 2a 20 52  ekResult;   /* R
20620 65 73 75 6c 74 20 6f 66 20 70 72 69 6f 72 20 73  esult of prior s
20630 65 65 6b 20 6f 72 20 30 20 69 66 20 6e 6f 20 55  eek or 0 if no U
20640 53 45 53 45 45 4b 52 45 53 55 4c 54 20 66 6c 61  SESEEKRESULT fla
20650 67 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  g */.  const cha
20660 72 20 2a 7a 44 62 3b 20 20 2f 2a 20 64 61 74 61  r *zDb;  /* data
20670 62 61 73 65 20 6e 61 6d 65 20 2d 20 75 73 65 64  base name - used
20680 20 62 79 20 74 68 65 20 75 70 64 61 74 65 20 68   by the update h
20690 6f 6f 6b 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  ook */.  const c
206a0 68 61 72 20 2a 7a 54 62 6c 3b 20 2f 2a 20 54 61  har *zTbl; /* Ta
206b0 62 6c 65 20 6e 61 6d 65 20 2d 20 75 73 65 64 20  ble name - used 
206c0 62 79 20 74 68 65 20 6f 70 64 61 74 65 20 68 6f  by the opdate ho
206d0 6f 6b 20 2a 2f 0a 20 20 69 6e 74 20 6f 70 3b 20  ok */.  int op; 
206e0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 70 63            /* Opc
206f0 6f 64 65 20 66 6f 72 20 75 70 64 61 74 65 20 68  ode for update h
20700 6f 6f 6b 3a 20 53 51 4c 49 54 45 5f 55 50 44 41  ook: SQLITE_UPDA
20710 54 45 20 6f 72 20 53 51 4c 49 54 45 5f 49 4e 53  TE or SQLITE_INS
20720 45 52 54 20 2a 2f 0a 0a 20 20 70 44 61 74 61 20  ERT */..  pData 
20730 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
20740 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
20750 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
20760 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
20770 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
20780 61 6c 69 64 28 70 44 61 74 61 29 20 29 3b 0a 20  alid(pData) );. 
20790 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
207a0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
207b0 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73  t( pC!=0 );.  as
207c0 73 65 72 74 28 20 70 43 2d 3e 70 43 75 72 73 6f  sert( pC->pCurso
207d0 72 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  r!=0 );.  assert
207e0 28 20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c  ( pC->pseudoTabl
207f0 65 52 65 67 3d 3d 30 20 29 3b 0a 20 20 61 73 73  eReg==0 );.  ass
20800 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65  ert( pC->isTable
20810 20 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54   );.  REGISTER_T
20820 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 44  RACE(pOp->p2, pD
20830 61 74 61 29 3b 0a 0a 20 20 69 66 28 20 70 4f 70  ata);..  if( pOp
20840 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 6e 73  ->opcode==OP_Ins
20850 65 72 74 20 29 7b 0a 20 20 20 20 70 4b 65 79 20  ert ){.    pKey 
20860 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
20870 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4b  ;.    assert( pK
20880 65 79 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  ey->flags & MEM_
20890 49 6e 74 20 29 3b 0a 20 20 20 20 61 73 73 65 72  Int );.    asser
208a0 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 4b  t( memIsValid(pK
208b0 65 79 29 20 29 3b 0a 20 20 20 20 52 45 47 49 53  ey) );.    REGIS
208c0 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
208d0 33 2c 20 70 4b 65 79 29 3b 0a 20 20 20 20 69 4b  3, pKey);.    iK
208e0 65 79 20 3d 20 70 4b 65 79 2d 3e 75 2e 69 3b 0a  ey = pKey->u.i;.
208f0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73    }else{.    ass
20900 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  ert( pOp->opcode
20910 3d 3d 4f 50 5f 49 6e 73 65 72 74 49 6e 74 20 29  ==OP_InsertInt )
20920 3b 0a 20 20 20 20 69 4b 65 79 20 3d 20 70 4f 70  ;.    iKey = pOp
20930 2d 3e 70 33 3b 0a 20 20 7d 0a 0a 20 20 69 66 28  ->p3;.  }..  if(
20940 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41   pOp->p5 & OPFLA
20950 47 5f 4e 43 48 41 4e 47 45 20 29 20 70 2d 3e 6e  G_NCHANGE ) p->n
20960 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 69 66 28 20  Change++;.  if( 
20970 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47  pOp->p5 & OPFLAG
20980 5f 4c 41 53 54 52 4f 57 49 44 20 29 20 64 62 2d  _LASTROWID ) db-
20990 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 6c 61 73  >lastRowid = las
209a0 74 52 6f 77 69 64 20 3d 20 69 4b 65 79 3b 0a 20  tRowid = iKey;. 
209b0 20 69 66 28 20 70 44 61 74 61 2d 3e 66 6c 61 67   if( pData->flag
209c0 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a  s & MEM_Null ){.
209d0 20 20 20 20 70 44 61 74 61 2d 3e 7a 20 3d 20 30      pData->z = 0
209e0 3b 0a 20 20 20 20 70 44 61 74 61 2d 3e 6e 20 3d  ;.    pData->n =
209f0 20 30 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20   0;.  }else{.   
20a00 20 61 73 73 65 72 74 28 20 70 44 61 74 61 2d 3e   assert( pData->
20a10 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 42 6c 6f  flags & (MEM_Blo
20a20 62 7c 4d 45 4d 5f 53 74 72 29 20 29 3b 0a 20 20  b|MEM_Str) );.  
20a30 7d 0a 20 20 73 65 65 6b 52 65 73 75 6c 74 20 3d  }.  seekResult =
20a40 20 28 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46   ((pOp->p5 & OPF
20a50 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c  LAG_USESEEKRESUL
20a60 54 29 20 3f 20 70 43 2d 3e 73 65 65 6b 52 65 73  T) ? pC->seekRes
20a70 75 6c 74 20 3a 20 30 29 3b 0a 20 20 69 66 28 20  ult : 0);.  if( 
20a80 70 44 61 74 61 2d 3e 66 6c 61 67 73 20 26 20 4d  pData->flags & M
20a90 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20 6e  EM_Zero ){.    n
20aa0 5a 65 72 6f 20 3d 20 70 44 61 74 61 2d 3e 75 2e  Zero = pData->u.
20ab0 6e 5a 65 72 6f 3b 0a 20 20 7d 65 6c 73 65 7b 0a  nZero;.  }else{.
20ac0 20 20 20 20 6e 5a 65 72 6f 20 3d 20 30 3b 0a 20      nZero = 0;. 
20ad0 20 7d 0a 20 20 73 71 6c 69 74 65 33 42 74 72 65   }.  sqlite3Btre
20ae0 65 53 65 74 43 61 63 68 65 64 52 6f 77 69 64 28  eSetCachedRowid(
20af0 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 30 29 3b  pC->pCursor, 0);
20b00 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42  .  rc = sqlite3B
20b10 74 72 65 65 49 6e 73 65 72 74 28 70 43 2d 3e 70  treeInsert(pC->p
20b20 43 75 72 73 6f 72 2c 20 30 2c 20 69 4b 65 79 2c  Cursor, 0, iKey,
20b30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20b40 20 20 20 20 20 20 20 20 20 20 20 70 44 61 74 61             pData
20b50 2d 3e 7a 2c 20 70 44 61 74 61 2d 3e 6e 2c 20 6e  ->z, pData->n, n
20b60 5a 65 72 6f 2c 0a 20 20 20 20 20 20 20 20 20 20  Zero,.          
20b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20b80 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47  pOp->p5 & OPFLAG
20b90 5f 41 50 50 45 4e 44 2c 20 73 65 65 6b 52 65 73  _APPEND, seekRes
20ba0 75 6c 74 0a 20 20 29 3b 0a 20 20 70 43 2d 3e 72  ult.  );.  pC->r
20bb0 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b  owidIsValid = 0;
20bc0 0a 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d  .  pC->deferredM
20bd0 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 70 43 2d  oveto = 0;.  pC-
20be0 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
20bf0 41 43 48 45 5f 53 54 41 4c 45 3b 0a 0a 20 20 2f  ACHE_STALE;..  /
20c00 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 75 70 64  * Invoke the upd
20c10 61 74 65 2d 68 6f 6f 6b 20 69 66 20 72 65 71 75  ate-hook if requ
20c20 69 72 65 64 2e 20 2a 2f 0a 20 20 69 66 28 20 72  ired. */.  if( r
20c30 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20  c==SQLITE_OK && 
20c40 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62  db->xUpdateCallb
20c50 61 63 6b 20 26 26 20 70 4f 70 2d 3e 70 34 2e 7a  ack && pOp->p4.z
20c60 20 29 7b 0a 20 20 20 20 7a 44 62 20 3d 20 64 62   ){.    zDb = db
20c70 2d 3e 61 44 62 5b 70 43 2d 3e 69 44 62 5d 2e 7a  ->aDb[pC->iDb].z
20c80 4e 61 6d 65 3b 0a 20 20 20 20 7a 54 62 6c 20 3d  Name;.    zTbl =
20c90 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 20 20   pOp->p4.z;.    
20ca0 6f 70 20 3d 20 28 28 70 4f 70 2d 3e 70 35 20 26  op = ((pOp->p5 &
20cb0 20 4f 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45   OPFLAG_ISUPDATE
20cc0 29 20 3f 20 53 51 4c 49 54 45 5f 55 50 44 41 54  ) ? SQLITE_UPDAT
20cd0 45 20 3a 20 53 51 4c 49 54 45 5f 49 4e 53 45 52  E : SQLITE_INSER
20ce0 54 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  T);.    assert( 
20cf0 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20  pC->isTable );. 
20d00 20 20 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61     db->xUpdateCa
20d10 6c 6c 62 61 63 6b 28 64 62 2d 3e 70 55 70 64 61  llback(db->pUpda
20d20 74 65 41 72 67 2c 20 6f 70 2c 20 7a 44 62 2c 20  teArg, op, zDb, 
20d30 7a 54 62 6c 2c 20 69 4b 65 79 29 3b 0a 20 20 20  zTbl, iKey);.   
20d40 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 44 62   assert( pC->iDb
20d50 3e 3d 30 20 29 3b 0a 20 20 7d 0a 20 20 62 72 65  >=0 );.  }.  bre
20d60 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
20d70 3a 20 44 65 6c 65 74 65 20 50 31 20 50 32 20 2a  : Delete P1 P2 *
20d80 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 44 65 6c 65   P4 *.**.** Dele
20d90 74 65 20 74 68 65 20 72 65 63 6f 72 64 20 61 74  te the record at
20da0 20 77 68 69 63 68 20 74 68 65 20 50 31 20 63 75   which the P1 cu
20db0 72 73 6f 72 20 69 73 20 63 75 72 72 65 6e 74 6c  rsor is currentl
20dc0 79 20 70 6f 69 6e 74 69 6e 67 2e 0a 2a 2a 0a 2a  y pointing..**.*
20dd0 2a 20 54 68 65 20 63 75 72 73 6f 72 20 77 69 6c  * The cursor wil
20de0 6c 20 62 65 20 6c 65 66 74 20 70 6f 69 6e 74 69  l be left pointi
20df0 6e 67 20 61 74 20 65 69 74 68 65 72 20 74 68 65  ng at either the
20e00 20 6e 65 78 74 20 6f 72 20 74 68 65 20 70 72 65   next or the pre
20e10 76 69 6f 75 73 0a 2a 2a 20 72 65 63 6f 72 64 20  vious.** record 
20e20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 49 66  in the table. If
20e30 20 69 74 20 69 73 20 6c 65 66 74 20 70 6f 69 6e   it is left poin
20e40 74 69 6e 67 20 61 74 20 74 68 65 20 6e 65 78 74  ting at the next
20e50 20 72 65 63 6f 72 64 2c 20 74 68 65 6e 0a 2a 2a   record, then.**
20e60 20 74 68 65 20 6e 65 78 74 20 4e 65 78 74 20 69   the next Next i
20e70 6e 73 74 72 75 63 74 69 6f 6e 20 77 69 6c 6c 20  nstruction will 
20e80 62 65 20 61 20 6e 6f 2d 6f 70 2e 20 20 48 65 6e  be a no-op.  Hen
20e90 63 65 20 69 74 20 69 73 20 4f 4b 20 74 6f 20 64  ce it is OK to d
20ea0 65 6c 65 74 65 0a 2a 2a 20 61 20 72 65 63 6f 72  elete.** a recor
20eb0 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 61 6e  d from within an
20ec0 20 4e 65 78 74 20 6c 6f 6f 70 2e 0a 2a 2a 0a 2a   Next loop..**.*
20ed0 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f  * If the OPFLAG_
20ee0 4e 43 48 41 4e 47 45 20 66 6c 61 67 20 6f 66 20  NCHANGE flag of 
20ef0 50 32 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20  P2 is set, then 
20f00 74 68 65 20 72 6f 77 20 63 68 61 6e 67 65 20 63  the row change c
20f10 6f 75 6e 74 20 69 73 0a 2a 2a 20 69 6e 63 72 65  ount is.** incre
20f20 6d 65 6e 74 65 64 20 28 6f 74 68 65 72 77 69 73  mented (otherwis
20f30 65 20 6e 6f 74 29 2e 0a 2a 2a 0a 2a 2a 20 50 31  e not)..**.** P1
20f40 20 6d 75 73 74 20 6e 6f 74 20 62 65 20 70 73 65   must not be pse
20f50 75 64 6f 2d 74 61 62 6c 65 2e 20 20 49 74 20 68  udo-table.  It h
20f60 61 73 20 74 6f 20 62 65 20 61 20 72 65 61 6c 20  as to be a real 
20f70 74 61 62 6c 65 20 77 69 74 68 0a 2a 2a 20 6d 75  table with.** mu
20f80 6c 74 69 70 6c 65 20 72 6f 77 73 2e 0a 2a 2a 0a  ltiple rows..**.
20f90 2a 2a 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20  ** If P4 is not 
20fa0 4e 55 4c 4c 2c 20 74 68 65 6e 20 69 74 20 69 73  NULL, then it is
20fb0 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   the name of the
20fc0 20 74 61 62 6c 65 20 74 68 61 74 20 50 31 20 69   table that P1 i
20fd0 73 0a 2a 2a 20 70 6f 69 6e 74 69 6e 67 20 74 6f  s.** pointing to
20fe0 2e 20 20 54 68 65 20 75 70 64 61 74 65 20 68 6f  .  The update ho
20ff0 6f 6b 20 77 69 6c 6c 20 62 65 20 69 6e 76 6f 6b  ok will be invok
21000 65 64 2c 20 69 66 20 69 74 20 65 78 69 73 74 73  ed, if it exists
21010 2e 0a 2a 2a 20 49 66 20 50 34 20 69 73 20 6e 6f  ..** If P4 is no
21020 74 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65 20  t NULL then the 
21030 50 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20 68  P1 cursor must h
21040 61 76 65 20 62 65 65 6e 20 70 6f 73 69 74 69 6f  ave been positio
21050 6e 65 64 0a 2a 2a 20 75 73 69 6e 67 20 4f 50 5f  ned.** using OP_
21060 4e 6f 74 46 6f 75 6e 64 20 70 72 69 6f 72 20 74  NotFound prior t
21070 6f 20 69 6e 76 6f 6b 69 6e 67 20 74 68 69 73 20  o invoking this 
21080 6f 70 63 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65 20  opcode..*/.case 
21090 4f 50 5f 44 65 6c 65 74 65 3a 20 7b 0a 20 20 69  OP_Delete: {.  i
210a0 36 34 20 69 4b 65 79 3b 0a 20 20 56 64 62 65 43  64 iKey;.  VdbeC
210b0 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 69 4b  ursor *pC;..  iK
210c0 65 79 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74  ey = 0;.  assert
210d0 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
210e0 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
210f0 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
21100 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
21110 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
21120 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
21130 3e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 20 20  >pCursor!=0 );  
21140 2f 2a 20 4f 6e 6c 79 20 76 61 6c 69 64 20 66 6f  /* Only valid fo
21150 72 20 72 65 61 6c 20 74 61 62 6c 65 73 2c 20 6e  r real tables, n
21160 6f 20 70 73 65 75 64 6f 74 61 62 6c 65 73 20 2a  o pseudotables *
21170 2f 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 75  /..  /* If the u
21180 70 64 61 74 65 2d 68 6f 6f 6b 20 77 69 6c 6c 20  pdate-hook will 
21190 62 65 20 69 6e 76 6f 6b 65 64 2c 20 73 65 74 20  be invoked, set 
211a0 69 4b 65 79 20 74 6f 20 74 68 65 20 72 6f 77 69  iKey to the rowi
211b0 64 20 6f 66 20 74 68 65 0a 20 20 2a 2a 20 72 6f  d of the.  ** ro
211c0 77 20 62 65 69 6e 67 20 64 65 6c 65 74 65 64 2e  w being deleted.
211d0 0a 20 20 2a 2f 0a 20 20 69 66 28 20 64 62 2d 3e  .  */.  if( db->
211e0 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20  xUpdateCallback 
211f0 26 26 20 70 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a  && pOp->p4.z ){.
21200 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
21210 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 20 20 61  isTable );.    a
21220 73 73 65 72 74 28 20 70 43 2d 3e 72 6f 77 69 64  ssert( pC->rowid
21230 49 73 56 61 6c 69 64 20 29 3b 20 20 2f 2a 20 6c  IsValid );  /* l
21240 61 73 74 52 6f 77 69 64 20 73 65 74 20 62 79 20  astRowid set by 
21250 70 72 65 76 69 6f 75 73 20 4f 50 5f 4e 6f 74 46  previous OP_NotF
21260 6f 75 6e 64 20 2a 2f 0a 20 20 20 20 69 4b 65 79  ound */.    iKey
21270 20 3d 20 70 43 2d 3e 6c 61 73 74 52 6f 77 69 64   = pC->lastRowid
21280 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 54 68 65 20  ;.  }..  /* The 
21290 4f 50 5f 44 65 6c 65 74 65 20 6f 70 63 6f 64 65  OP_Delete opcode
212a0 20 61 6c 77 61 79 73 20 66 6f 6c 6c 6f 77 73 20   always follows 
212b0 61 6e 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 20  an OP_NotExists 
212c0 6f 72 20 4f 50 5f 4c 61 73 74 20 6f 72 0a 20 20  or OP_Last or.  
212d0 2a 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 6e 20  ** OP_Column on 
212e0 74 68 65 20 73 61 6d 65 20 74 61 62 6c 65 20 77  the same table w
212f0 69 74 68 6f 75 74 20 61 6e 79 20 69 6e 74 65 72  ithout any inter
21300 76 65 6e 69 6e 67 20 6f 70 65 72 61 74 69 6f 6e  vening operation
21310 73 20 74 68 61 74 0a 20 20 2a 2a 20 6d 69 67 68  s that.  ** migh
21320 74 20 6d 6f 76 65 20 6f 72 20 69 6e 76 61 6c 69  t move or invali
21330 64 61 74 65 20 74 68 65 20 63 75 72 73 6f 72 2e  date the cursor.
21340 20 20 48 65 6e 63 65 20 63 75 72 73 6f 72 20 70    Hence cursor p
21350 43 20 69 73 20 61 6c 77 61 79 73 20 70 6f 69 6e  C is always poin
21360 74 69 6e 67 0a 20 20 2a 2a 20 74 6f 20 74 68 65  ting.  ** to the
21370 20 72 6f 77 20 74 6f 20 62 65 20 64 65 6c 65 74   row to be delet
21380 65 64 20 61 6e 64 20 74 68 65 20 73 71 6c 69 74  ed and the sqlit
21390 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65  e3VdbeCursorMove
213a0 74 6f 28 29 20 6f 70 65 72 61 74 69 6f 6e 0a 20  to() operation. 
213b0 20 2a 2a 20 62 65 6c 6f 77 20 69 73 20 61 6c 77   ** below is alw
213c0 61 79 73 20 61 20 6e 6f 2d 6f 70 20 61 6e 64 20  ays a no-op and 
213d0 63 61 6e 6e 6f 74 20 66 61 69 6c 2e 20 20 57 65  cannot fail.  We
213e0 20 77 69 6c 6c 20 72 75 6e 20 69 74 20 61 6e 79   will run it any
213f0 68 6f 77 2c 20 74 68 6f 75 67 68 2c 0a 20 20 2a  how, though,.  *
21400 2a 20 74 6f 20 67 75 61 72 64 20 61 67 61 69 6e  * to guard again
21410 73 74 20 66 75 74 75 72 65 20 63 68 61 6e 67 65  st future change
21420 73 20 74 6f 20 74 68 65 20 63 6f 64 65 20 67 65  s to the code ge
21430 6e 65 72 61 74 6f 72 2e 0a 20 20 2a 2a 2f 0a 20  nerator..  **/. 
21440 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66   assert( pC->def
21450 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29  erredMoveto==0 )
21460 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
21470 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f  VdbeCursorMoveto
21480 28 70 43 29 3b 0a 20 20 69 66 28 20 4e 45 56 45  (pC);.  if( NEVE
21490 52 28 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 29  R(rc!=SQLITE_OK)
214a0 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
214b0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a 20 20 73  e_to_error;..  s
214c0 71 6c 69 74 65 33 42 74 72 65 65 53 65 74 43 61  qlite3BtreeSetCa
214d0 63 68 65 64 52 6f 77 69 64 28 70 43 2d 3e 70 43  chedRowid(pC->pC
214e0 75 72 73 6f 72 2c 20 30 29 3b 0a 20 20 72 63 20  ursor, 0);.  rc 
214f0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 44 65  = sqlite3BtreeDe
21500 6c 65 74 65 28 70 43 2d 3e 70 43 75 72 73 6f 72  lete(pC->pCursor
21510 29 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74  );.  pC->cacheSt
21520 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
21530 4c 45 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65  LE;..  /* Invoke
21540 20 74 68 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b   the update-hook
21550 20 69 66 20 72 65 71 75 69 72 65 64 2e 20 2a 2f   if required. */
21560 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54  .  if( rc==SQLIT
21570 45 5f 4f 4b 20 26 26 20 64 62 2d 3e 78 55 70 64  E_OK && db->xUpd
21580 61 74 65 43 61 6c 6c 62 61 63 6b 20 26 26 20 70  ateCallback && p
21590 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20 20 20  Op->p4.z ){.    
215a0 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 20  const char *zDb 
215b0 3d 20 64 62 2d 3e 61 44 62 5b 70 43 2d 3e 69 44  = db->aDb[pC->iD
215c0 62 5d 2e 7a 4e 61 6d 65 3b 0a 20 20 20 20 63 6f  b].zName;.    co
215d0 6e 73 74 20 63 68 61 72 20 2a 7a 54 62 6c 20 3d  nst char *zTbl =
215e0 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 20 20   pOp->p4.z;.    
215f0 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62  db->xUpdateCallb
21600 61 63 6b 28 64 62 2d 3e 70 55 70 64 61 74 65 41  ack(db->pUpdateA
21610 72 67 2c 20 53 51 4c 49 54 45 5f 44 45 4c 45 54  rg, SQLITE_DELET
21620 45 2c 20 7a 44 62 2c 20 7a 54 62 6c 2c 20 69 4b  E, zDb, zTbl, iK
21630 65 79 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  ey);.    assert(
21640 20 70 43 2d 3e 69 44 62 3e 3d 30 20 29 3b 0a 20   pC->iDb>=0 );. 
21650 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 32   }.  if( pOp->p2
21660 20 26 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47   & OPFLAG_NCHANG
21670 45 20 29 20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b  E ) p->nChange++
21680 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 2f 2a 20  ;.  break;.}./* 
21690 4f 70 63 6f 64 65 3a 20 52 65 73 65 74 43 6f 75  Opcode: ResetCou
216a0 6e 74 20 2a 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a  nt * * * * *.**.
216b0 2a 2a 20 54 68 65 20 76 61 6c 75 65 20 6f 66 20  ** The value of 
216c0 74 68 65 20 63 68 61 6e 67 65 20 63 6f 75 6e 74  the change count
216d0 65 72 20 69 73 20 63 6f 70 69 65 64 20 74 6f 20  er is copied to 
216e0 74 68 65 20 64 61 74 61 62 61 73 65 20 68 61 6e  the database han
216f0 64 6c 65 0a 2a 2a 20 63 68 61 6e 67 65 20 63 6f  dle.** change co
21700 75 6e 74 65 72 20 28 72 65 74 75 72 6e 65 64 20  unter (returned 
21710 62 79 20 73 75 62 73 65 71 75 65 6e 74 20 63 61  by subsequent ca
21720 6c 6c 73 20 74 6f 20 73 71 6c 69 74 65 33 5f 63  lls to sqlite3_c
21730 68 61 6e 67 65 73 28 29 29 2e 0a 2a 2a 20 54 68  hanges())..** Th
21740 65 6e 20 74 68 65 20 56 4d 73 20 69 6e 74 65 72  en the VMs inter
21750 6e 61 6c 20 63 68 61 6e 67 65 20 63 6f 75 6e 74  nal change count
21760 65 72 20 72 65 73 65 74 73 20 74 6f 20 30 2e 0a  er resets to 0..
21770 2a 2a 20 54 68 69 73 20 69 73 20 75 73 65 64 20  ** This is used 
21780 62 79 20 74 72 69 67 67 65 72 20 70 72 6f 67 72  by trigger progr
21790 61 6d 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ams..*/.case OP_
217a0 52 65 73 65 74 43 6f 75 6e 74 3a 20 7b 0a 20 20  ResetCount: {.  
217b0 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 68  sqlite3VdbeSetCh
217c0 61 6e 67 65 73 28 64 62 2c 20 70 2d 3e 6e 43 68  anges(db, p->nCh
217d0 61 6e 67 65 29 3b 0a 20 20 70 2d 3e 6e 43 68 61  ange);.  p->nCha
217e0 6e 67 65 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b  nge = 0;.  break
217f0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
21800 53 6f 72 74 65 72 43 6f 6d 70 61 72 65 20 50 31  SorterCompare P1
21810 20 50 32 20 50 33 0a 2a 2a 0a 2a 2a 20 50 31 20   P2 P3.**.** P1 
21820 69 73 20 61 20 73 6f 72 74 65 72 20 63 75 72 73  is a sorter curs
21830 6f 72 2e 20 54 68 69 73 20 69 6e 73 74 72 75 63  or. This instruc
21840 74 69 6f 6e 20 63 6f 6d 70 61 72 65 73 20 74 68  tion compares th
21850 65 20 72 65 63 6f 72 64 20 62 6c 6f 62 20 69 6e  e record blob in
21860 20 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 33   .** register P3
21870 20 77 69 74 68 20 74 68 65 20 65 6e 74 72 79 20   with the entry 
21880 74 68 61 74 20 74 68 65 20 73 6f 72 74 65 72 20  that the sorter 
21890 63 75 72 73 6f 72 20 63 75 72 72 65 6e 74 6c 79  cursor currently
218a0 20 70 6f 69 6e 74 73 20 74 6f 2e 0a 2a 2a 20 49   points to..** I
218b0 66 2c 20 65 78 63 6c 75 64 69 6e 67 20 74 68 65  f, excluding the
218c0 20 72 6f 77 69 64 20 66 69 65 6c 64 73 20 61 74   rowid fields at
218d0 20 74 68 65 20 65 6e 64 2c 20 74 68 65 20 74 77   the end, the tw
218e0 6f 20 72 65 63 6f 72 64 73 20 61 72 65 20 61 20  o records are a 
218f0 6d 61 74 63 68 2c 0a 2a 2a 20 66 61 6c 6c 20 74  match,.** fall t
21900 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65  hrough to the ne
21910 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20  xt instruction. 
21920 4f 74 68 65 72 77 69 73 65 2c 20 6a 75 6d 70 20  Otherwise, jump 
21930 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 50  to instruction P
21940 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f  2..*/.case OP_So
21950 72 74 65 72 43 6f 6d 70 61 72 65 3a 20 7b 0a 20  rterCompare: {. 
21960 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
21970 0a 20 20 69 6e 74 20 72 65 73 3b 0a 0a 20 20 70  .  int res;..  p
21980 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
21990 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
219a0 20 69 73 53 6f 72 74 65 72 28 70 43 29 20 29 3b   isSorter(pC) );
219b0 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b  .  pIn3 = &aMem[
219c0 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 72 63 20 3d  pOp->p3];.  rc =
219d0 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74   sqlite3VdbeSort
219e0 65 72 43 6f 6d 70 61 72 65 28 70 43 2c 20 70 49  erCompare(pC, pI
219f0 6e 33 2c 20 26 72 65 73 29 3b 0a 20 20 69 66 28  n3, &res);.  if(
21a00 20 72 65 73 20 29 7b 0a 20 20 20 20 70 63 20 3d   res ){.    pc =
21a10 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d 0a   pOp->p2-1;.  }.
21a20 20 20 62 72 65 61 6b 3b 0a 7d 3b 0a 0a 2f 2a 20    break;.};../* 
21a30 4f 70 63 6f 64 65 3a 20 53 6f 72 74 65 72 44 61  Opcode: SorterDa
21a40 74 61 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  ta P1 P2 * * *.*
21a50 2a 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f 20  *.** Write into 
21a60 72 65 67 69 73 74 65 72 20 50 32 20 74 68 65 20  register P2 the 
21a70 63 75 72 72 65 6e 74 20 73 6f 72 74 65 72 20 64  current sorter d
21a80 61 74 61 20 66 6f 72 20 73 6f 72 74 65 72 20 63  ata for sorter c
21a90 75 72 73 6f 72 20 50 31 2e 0a 2a 2f 0a 63 61 73  ursor P1..*/.cas
21aa0 65 20 4f 50 5f 53 6f 72 74 65 72 44 61 74 61 3a  e OP_SorterData:
21ab0 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20   {.  VdbeCursor 
21ac0 2a 70 43 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  *pC;.#ifndef SQL
21ad0 49 54 45 5f 4f 4d 49 54 5f 4d 45 52 47 45 5f 53  ITE_OMIT_MERGE_S
21ae0 4f 52 54 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d  ORT.  pOut = &aM
21af0 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70  em[pOp->p2];.  p
21b00 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
21b10 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
21b20 20 70 43 2d 3e 69 73 53 6f 72 74 65 72 20 29 3b   pC->isSorter );
21b30 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
21b40 64 62 65 53 6f 72 74 65 72 52 6f 77 6b 65 79 28  dbeSorterRowkey(
21b50 70 43 2c 20 70 4f 75 74 29 3b 0a 23 65 6c 73 65  pC, pOut);.#else
21b60 0a 20 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 3d  .  pOp->opcode =
21b70 20 4f 50 5f 52 6f 77 4b 65 79 3b 0a 20 20 70 63   OP_RowKey;.  pc
21b80 2d 2d 3b 0a 23 65 6e 64 69 66 0a 20 20 62 72 65  --;.#endif.  bre
21b90 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
21ba0 3a 20 52 6f 77 44 61 74 61 20 50 31 20 50 32 20  : RowData P1 P2 
21bb0 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74  * * *.**.** Writ
21bc0 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  e into register 
21bd0 50 32 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20  P2 the complete 
21be0 72 6f 77 20 64 61 74 61 20 66 6f 72 20 63 75 72  row data for cur
21bf0 73 6f 72 20 50 31 2e 0a 2a 2a 20 54 68 65 72 65  sor P1..** There
21c00 20 69 73 20 6e 6f 20 69 6e 74 65 72 70 72 65 74   is no interpret
21c10 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 64 61 74  ation of the dat
21c20 61 2e 20 20 0a 2a 2a 20 49 74 20 69 73 20 6a 75  a.  .** It is ju
21c30 73 74 20 63 6f 70 69 65 64 20 6f 6e 74 6f 20 74  st copied onto t
21c40 68 65 20 50 32 20 72 65 67 69 73 74 65 72 20 65  he P2 register e
21c50 78 61 63 74 6c 79 20 61 73 20 0a 2a 2a 20 69 74  xactly as .** it
21c60 20 69 73 20 66 6f 75 6e 64 20 69 6e 20 74 68 65   is found in the
21c70 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a   database file..
21c80 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20  **.** If the P1 
21c90 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20 70  cursor must be p
21ca0 6f 69 6e 74 69 6e 67 20 74 6f 20 61 20 76 61 6c  ointing to a val
21cb0 69 64 20 72 6f 77 20 28 6e 6f 74 20 61 20 4e 55  id row (not a NU
21cc0 4c 4c 20 72 6f 77 29 0a 2a 2a 20 6f 66 20 61 20  LL row).** of a 
21cd0 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20  real table, not 
21ce0 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a  a pseudo-table..
21cf0 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f  */./* Opcode: Ro
21d00 77 4b 65 79 20 50 31 20 50 32 20 2a 20 2a 20 2a  wKey P1 P2 * * *
21d10 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74  .**.** Write int
21d20 6f 20 72 65 67 69 73 74 65 72 20 50 32 20 74 68  o register P2 th
21d30 65 20 63 6f 6d 70 6c 65 74 65 20 72 6f 77 20 6b  e complete row k
21d40 65 79 20 66 6f 72 20 63 75 72 73 6f 72 20 50 31  ey for cursor P1
21d50 2e 0a 2a 2a 20 54 68 65 72 65 20 69 73 20 6e 6f  ..** There is no
21d60 20 69 6e 74 65 72 70 72 65 74 61 74 69 6f 6e 20   interpretation 
21d70 6f 66 20 74 68 65 20 64 61 74 61 2e 20 20 0a 2a  of the data.  .*
21d80 2a 20 54 68 65 20 6b 65 79 20 69 73 20 63 6f 70  * The key is cop
21d90 69 65 64 20 6f 6e 74 6f 20 74 68 65 20 50 33 20  ied onto the P3 
21da0 72 65 67 69 73 74 65 72 20 65 78 61 63 74 6c 79  register exactly
21db0 20 61 73 20 0a 2a 2a 20 69 74 20 69 73 20 66 6f   as .** it is fo
21dc0 75 6e 64 20 69 6e 20 74 68 65 20 64 61 74 61 62  und in the datab
21dd0 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20  ase file..**.** 
21de0 49 66 20 74 68 65 20 50 31 20 63 75 72 73 6f 72  If the P1 cursor
21df0 20 6d 75 73 74 20 62 65 20 70 6f 69 6e 74 69 6e   must be pointin
21e00 67 20 74 6f 20 61 20 76 61 6c 69 64 20 72 6f 77  g to a valid row
21e10 20 28 6e 6f 74 20 61 20 4e 55 4c 4c 20 72 6f 77   (not a NULL row
21e20 29 0a 2a 2a 20 6f 66 20 61 20 72 65 61 6c 20 74  ).** of a real t
21e30 61 62 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65 75  able, not a pseu
21e40 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73  do-table..*/.cas
21e50 65 20 4f 50 5f 52 6f 77 4b 65 79 3a 0a 63 61 73  e OP_RowKey:.cas
21e60 65 20 4f 50 5f 52 6f 77 44 61 74 61 3a 20 7b 0a  e OP_RowData: {.
21e70 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
21e80 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43  ;.  BtCursor *pC
21e90 72 73 72 3b 0a 20 20 75 33 32 20 6e 3b 0a 20 20  rsr;.  u32 n;.  
21ea0 69 36 34 20 6e 36 34 3b 0a 0a 20 20 70 4f 75 74  i64 n64;..  pOut
21eb0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
21ec0 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43  ];.  memAboutToC
21ed0 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a  hange(p, pOut);.
21ee0 0a 20 20 2f 2a 20 4e 6f 74 65 20 74 68 61 74 20  .  /* Note that 
21ef0 52 6f 77 4b 65 79 20 61 6e 64 20 52 6f 77 44 61  RowKey and RowDa
21f00 74 61 20 61 72 65 20 72 65 61 6c 6c 79 20 65 78  ta are really ex
21f10 61 63 74 6c 79 20 74 68 65 20 73 61 6d 65 20 69  actly the same i
21f20 6e 73 74 72 75 63 74 69 6f 6e 20 2a 2f 0a 20 20  nstruction */.  
21f30 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
21f40 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
21f50 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
21f60 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
21f70 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
21f80 70 43 2d 3e 69 73 53 6f 72 74 65 72 3d 3d 30 20  pC->isSorter==0 
21f90 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
21fa0 3e 69 73 54 61 62 6c 65 20 7c 7c 20 70 4f 70 2d  >isTable || pOp-
21fb0 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 52 6f 77 44  >opcode!=OP_RowD
21fc0 61 74 61 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ata );.  assert(
21fd0 20 70 43 2d 3e 69 73 49 6e 64 65 78 20 7c 7c 20   pC->isIndex || 
21fe0 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
21ff0 52 6f 77 44 61 74 61 20 29 3b 0a 20 20 61 73 73  RowData );.  ass
22000 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
22010 61 73 73 65 72 74 28 20 70 43 2d 3e 6e 75 6c 6c  assert( pC->null
22020 52 6f 77 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  Row==0 );.  asse
22030 72 74 28 20 70 43 2d 3e 70 73 65 75 64 6f 54 61  rt( pC->pseudoTa
22040 62 6c 65 52 65 67 3d 3d 30 20 29 3b 0a 20 20 61  bleReg==0 );.  a
22050 73 73 65 72 74 28 20 21 70 43 2d 3e 69 73 53 6f  ssert( !pC->isSo
22060 72 74 65 72 20 29 3b 0a 20 20 61 73 73 65 72 74  rter );.  assert
22070 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30  ( pC->pCursor!=0
22080 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43   );.  pCrsr = pC
22090 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 61 73 73  ->pCursor;.  ass
220a0 65 72 74 28 20 73 71 6c 69 74 65 33 42 74 72 65  ert( sqlite3Btre
220b0 65 43 75 72 73 6f 72 49 73 56 61 6c 69 64 28 70  eCursorIsValid(p
220c0 43 72 73 72 29 20 29 3b 0a 0a 20 20 2f 2a 20 54  Crsr) );..  /* T
220d0 68 65 20 4f 50 5f 52 6f 77 4b 65 79 20 61 6e 64  he OP_RowKey and
220e0 20 4f 50 5f 52 6f 77 44 61 74 61 20 6f 70 63 6f   OP_RowData opco
220f0 64 65 73 20 61 6c 77 61 79 73 20 66 6f 6c 6c 6f  des always follo
22100 77 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 20 6f  w OP_NotExists o
22110 72 0a 20 20 2a 2a 20 4f 50 5f 52 65 77 69 6e 64  r.  ** OP_Rewind
22120 2f 4f 70 5f 4e 65 78 74 20 77 69 74 68 20 6e 6f  /Op_Next with no
22130 20 69 6e 74 65 72 76 65 6e 69 6e 67 20 69 6e 73   intervening ins
22140 74 72 75 63 74 69 6f 6e 73 20 74 68 61 74 20 6d  tructions that m
22150 69 67 68 74 20 69 6e 76 61 6c 69 64 61 74 65 0a  ight invalidate.
22160 20 20 2a 2a 20 74 68 65 20 63 75 72 73 6f 72 2e    ** the cursor.
22170 20 20 48 65 6e 63 65 20 74 68 65 20 66 6f 6c 6c    Hence the foll
22180 6f 77 69 6e 67 20 73 71 6c 69 74 65 33 56 64 62  owing sqlite3Vdb
22190 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29 20  eCursorMoveto() 
221a0 63 61 6c 6c 20 69 73 20 61 6c 77 61 79 73 0a 20  call is always. 
221b0 20 2a 2a 20 61 20 6e 6f 2d 6f 70 20 61 6e 64 20   ** a no-op and 
221c0 63 61 6e 20 6e 65 76 65 72 20 66 61 69 6c 2e 20  can never fail. 
221d0 20 42 75 74 20 77 65 20 6c 65 61 76 65 20 69 74   But we leave it
221e0 20 69 6e 20 70 6c 61 63 65 20 61 73 20 61 20 73   in place as a s
221f0 61 66 65 74 79 2e 0a 20 20 2a 2f 0a 20 20 61 73  afety..  */.  as
22200 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72  sert( pC->deferr
22210 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20  edMoveto==0 );. 
22220 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
22230 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43  eCursorMoveto(pC
22240 29 3b 0a 20 20 69 66 28 20 4e 45 56 45 52 28 72  );.  if( NEVER(r
22250 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 29 20 29 20  c!=SQLITE_OK) ) 
22260 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
22270 6f 5f 65 72 72 6f 72 3b 0a 0a 20 20 69 66 28 20  o_error;..  if( 
22280 70 43 2d 3e 69 73 49 6e 64 65 78 20 29 7b 0a 20  pC->isIndex ){. 
22290 20 20 20 61 73 73 65 72 74 28 20 21 70 43 2d 3e     assert( !pC->
222a0 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 20 20 56  isTable );.    V
222b0 56 41 5f 4f 4e 4c 59 28 72 63 20 3d 29 20 73 71  VA_ONLY(rc =) sq
222c0 6c 69 74 65 33 42 74 72 65 65 4b 65 79 53 69 7a  lite3BtreeKeySiz
222d0 65 28 70 43 72 73 72 2c 20 26 6e 36 34 29 3b 0a  e(pCrsr, &n64);.
222e0 20 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d      assert( rc==
222f0 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 20 20 20  SQLITE_OK );    
22300 2f 2a 20 54 72 75 65 20 62 65 63 61 75 73 65 20  /* True because 
22310 6f 66 20 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28  of CursorMoveto(
22320 29 20 63 61 6c 6c 20 61 62 6f 76 65 20 2a 2f 0a  ) call above */.
22330 20 20 20 20 69 66 28 20 6e 36 34 3e 64 62 2d 3e      if( n64>db->
22340 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49  aLimit[SQLITE_LI
22350 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20  MIT_LENGTH] ){. 
22360 20 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69       goto too_bi
22370 67 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6e 20 3d  g;.    }.    n =
22380 20 28 75 33 32 29 6e 36 34 3b 0a 20 20 7d 65 6c   (u32)n64;.  }el
22390 73 65 7b 0a 20 20 20 20 56 56 41 5f 4f 4e 4c 59  se{.    VVA_ONLY
223a0 28 72 63 20 3d 29 20 73 71 6c 69 74 65 33 42 74  (rc =) sqlite3Bt
223b0 72 65 65 44 61 74 61 53 69 7a 65 28 70 43 72 73  reeDataSize(pCrs
223c0 72 2c 20 26 6e 29 3b 0a 20 20 20 20 61 73 73 65  r, &n);.    asse
223d0 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  rt( rc==SQLITE_O
223e0 4b 20 29 3b 20 20 20 20 2f 2a 20 44 61 74 61 53  K );    /* DataS
223f0 69 7a 65 28 29 20 63 61 6e 6e 6f 74 20 66 61 69  ize() cannot fai
22400 6c 20 2a 2f 0a 20 20 20 20 69 66 28 20 6e 3e 28  l */.    if( n>(
22410 75 33 32 29 64 62 2d 3e 61 4c 69 6d 69 74 5b 53  u32)db->aLimit[S
22420 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47  QLITE_LIMIT_LENG
22430 54 48 5d 20 29 7b 0a 20 20 20 20 20 20 67 6f 74  TH] ){.      got
22440 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 20 20 7d  o too_big;.    }
22450 0a 20 20 7d 0a 20 20 69 66 28 20 73 71 6c 69 74  .  }.  if( sqlit
22460 65 33 56 64 62 65 4d 65 6d 47 72 6f 77 28 70 4f  e3VdbeMemGrow(pO
22470 75 74 2c 20 6e 2c 20 30 29 20 29 7b 0a 20 20 20  ut, n, 0) ){.   
22480 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
22490 7d 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 6e 3b  }.  pOut->n = n;
224a0 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61  .  MemSetTypeFla
224b0 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 42 6c 6f 62  g(pOut, MEM_Blob
224c0 29 3b 0a 20 20 69 66 28 20 70 43 2d 3e 69 73 49  );.  if( pC->isI
224d0 6e 64 65 78 20 29 7b 0a 20 20 20 20 72 63 20 3d  ndex ){.    rc =
224e0 20 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79   sqlite3BtreeKey
224f0 28 70 43 72 73 72 2c 20 30 2c 20 6e 2c 20 70 4f  (pCrsr, 0, n, pO
22500 75 74 2d 3e 7a 29 3b 0a 20 20 7d 65 6c 73 65 7b  ut->z);.  }else{
22510 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
22520 33 42 74 72 65 65 44 61 74 61 28 70 43 72 73 72  3BtreeData(pCrsr
22530 2c 20 30 2c 20 6e 2c 20 70 4f 75 74 2d 3e 7a 29  , 0, n, pOut->z)
22540 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 65 6e  ;.  }.  pOut->en
22550 63 20 3d 20 53 51 4c 49 54 45 5f 55 54 46 38 3b  c = SQLITE_UTF8;
22560 20 20 2f 2a 20 49 6e 20 63 61 73 65 20 74 68 65    /* In case the
22570 20 62 6c 6f 62 20 69 73 20 65 76 65 72 20 63 61   blob is ever ca
22580 73 74 20 74 6f 20 74 65 78 74 20 2a 2f 0a 20 20  st to text */.  
22590 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53  UPDATE_MAX_BLOBS
225a0 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65  IZE(pOut);.  bre
225b0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
225c0 3a 20 52 6f 77 69 64 20 50 31 20 50 32 20 2a 20  : Rowid P1 P2 * 
225d0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20  * *.**.** Store 
225e0 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 20 61  in register P2 a
225f0 6e 20 69 6e 74 65 67 65 72 20 77 68 69 63 68 20  n integer which 
22600 69 73 20 74 68 65 20 6b 65 79 20 6f 66 20 74 68  is the key of th
22610 65 20 74 61 62 6c 65 20 65 6e 74 72 79 20 74 68  e table entry th
22620 61 74 0a 2a 2a 20 50 31 20 69 73 20 63 75 72 72  at.** P1 is curr
22630 65 6e 74 6c 79 20 70 6f 69 6e 74 20 74 6f 2e 0a  ently point to..
22640 2a 2a 0a 2a 2a 20 50 31 20 63 61 6e 20 62 65 20  **.** P1 can be 
22650 65 69 74 68 65 72 20 61 6e 20 6f 72 64 69 6e 61  either an ordina
22660 72 79 20 74 61 62 6c 65 20 6f 72 20 61 20 76 69  ry table or a vi
22670 72 74 75 61 6c 20 74 61 62 6c 65 2e 20 20 54 68  rtual table.  Th
22680 65 72 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 62  ere used to.** b
22690 65 20 61 20 73 65 70 61 72 61 74 65 20 4f 50 5f  e a separate OP_
226a0 56 52 6f 77 69 64 20 6f 70 63 6f 64 65 20 66 6f  VRowid opcode fo
226b0 72 20 75 73 65 20 77 69 74 68 20 76 69 72 74 75  r use with virtu
226c0 61 6c 20 74 61 62 6c 65 73 2c 20 62 75 74 20 74  al tables, but t
226d0 68 69 73 0a 2a 2a 20 6f 6e 65 20 6f 70 63 6f 64  his.** one opcod
226e0 65 20 6e 6f 77 20 77 6f 72 6b 73 20 66 6f 72 20  e now works for 
226f0 62 6f 74 68 20 74 61 62 6c 65 20 74 79 70 65 73  both table types
22700 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77  ..*/.case OP_Row
22710 69 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  id: {           
22720 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72        /* out2-pr
22730 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 56 64  erelease */.  Vd
22740 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
22750 69 36 34 20 76 3b 0a 20 20 73 71 6c 69 74 65 33  i64 v;.  sqlite3
22760 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20  _vtab *pVtab;.  
22770 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f  const sqlite3_mo
22780 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 0a  dule *pModule;..
22790 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
227a0 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
227b0 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
227c0 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
227d0 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
227e0 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73  ( pC!=0 );.  ass
227f0 65 72 74 28 20 70 43 2d 3e 70 73 65 75 64 6f 54  ert( pC->pseudoT
22800 61 62 6c 65 52 65 67 3d 3d 30 20 29 3b 0a 20 20  ableReg==0 );.  
22810 69 66 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20  if( pC->nullRow 
22820 29 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61  ){.    pOut->fla
22830 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20  gs = MEM_Null;. 
22840 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 65 6c 73     break;.  }els
22850 65 20 69 66 28 20 70 43 2d 3e 64 65 66 65 72 72  e if( pC->deferr
22860 65 64 4d 6f 76 65 74 6f 20 29 7b 0a 20 20 20 20  edMoveto ){.    
22870 76 20 3d 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61  v = pC->movetoTa
22880 72 67 65 74 3b 0a 23 69 66 6e 64 65 66 20 53 51  rget;.#ifndef SQ
22890 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
228a0 4c 54 41 42 4c 45 0a 20 20 7d 65 6c 73 65 20 69  LTABLE.  }else i
228b0 66 28 20 70 43 2d 3e 70 56 74 61 62 43 75 72 73  f( pC->pVtabCurs
228c0 6f 72 20 29 7b 0a 20 20 20 20 70 56 74 61 62 20  or ){.    pVtab 
228d0 3d 20 70 43 2d 3e 70 56 74 61 62 43 75 72 73 6f  = pC->pVtabCurso
228e0 72 2d 3e 70 56 74 61 62 3b 0a 20 20 20 20 70 4d  r->pVtab;.    pM
228f0 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70  odule = pVtab->p
22900 4d 6f 64 75 6c 65 3b 0a 20 20 20 20 61 73 73 65  Module;.    asse
22910 72 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 52 6f  rt( pModule->xRo
22920 77 69 64 20 29 3b 0a 20 20 20 20 72 63 20 3d 20  wid );.    rc = 
22930 70 4d 6f 64 75 6c 65 2d 3e 78 52 6f 77 69 64 28  pModule->xRowid(
22940 70 43 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 2c  pC->pVtabCursor,
22950 20 26 76 29 3b 0a 20 20 20 20 69 6d 70 6f 72 74   &v);.    import
22960 56 74 61 62 45 72 72 4d 73 67 28 70 2c 20 70 56  VtabErrMsg(p, pV
22970 74 61 62 29 3b 0a 23 65 6e 64 69 66 20 2f 2a 20  tab);.#endif /* 
22980 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
22990 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 20 20 7d 65  UALTABLE */.  }e
229a0 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28  lse{.    assert(
229b0 20 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20   pC->pCursor!=0 
229c0 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  );.    rc = sqli
229d0 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76  te3VdbeCursorMov
229e0 65 74 6f 28 70 43 29 3b 0a 20 20 20 20 69 66 28  eto(pC);.    if(
229f0 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
22a00 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
22a10 20 20 20 69 66 28 20 70 43 2d 3e 72 6f 77 69 64     if( pC->rowid
22a20 49 73 56 61 6c 69 64 20 29 7b 0a 20 20 20 20 20  IsValid ){.     
22a30 20 76 20 3d 20 70 43 2d 3e 6c 61 73 74 52 6f 77   v = pC->lastRow
22a40 69 64 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  id;.    }else{. 
22a50 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
22a60 33 42 74 72 65 65 4b 65 79 53 69 7a 65 28 70 43  3BtreeKeySize(pC
22a70 2d 3e 70 43 75 72 73 6f 72 2c 20 26 76 29 3b 0a  ->pCursor, &v);.
22a80 20 20 20 20 20 20 61 73 73 65 72 74 28 20 72 63        assert( rc
22a90 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 20  ==SQLITE_OK );  
22aa0 2f 2a 20 41 6c 77 61 79 73 20 73 6f 20 62 65 63  /* Always so bec
22ab0 61 75 73 65 20 6f 66 20 43 75 72 73 6f 72 4d 6f  ause of CursorMo
22ac0 76 65 74 6f 28 29 20 61 62 6f 76 65 20 2a 2f 0a  veto() above */.
22ad0 20 20 20 20 7d 0a 20 20 7d 0a 20 20 70 4f 75 74      }.  }.  pOut
22ae0 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20 20 62 72 65  ->u.i = v;.  bre
22af0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
22b00 3a 20 4e 75 6c 6c 52 6f 77 20 50 31 20 2a 20 2a  : NullRow P1 * *
22b10 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4d 6f 76 65 20   * *.**.** Move 
22b20 74 68 65 20 63 75 72 73 6f 72 20 50 31 20 74 6f  the cursor P1 to
22b30 20 61 20 6e 75 6c 6c 20 72 6f 77 2e 20 20 41 6e   a null row.  An
22b40 79 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 65 72  y OP_Column oper
22b50 61 74 69 6f 6e 73 0a 2a 2a 20 74 68 61 74 20 6f  ations.** that o
22b60 63 63 75 72 20 77 68 69 6c 65 20 74 68 65 20 63  ccur while the c
22b70 75 72 73 6f 72 20 69 73 20 6f 6e 20 74 68 65 20  ursor is on the 
22b80 6e 75 6c 6c 20 72 6f 77 20 77 69 6c 6c 20 61 6c  null row will al
22b90 77 61 79 73 0a 2a 2a 20 77 72 69 74 65 20 61 20  ways.** write a 
22ba0 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  NULL..*/.case OP
22bb0 5f 4e 75 6c 6c 52 6f 77 3a 20 7b 0a 20 20 56 64  _NullRow: {.  Vd
22bc0 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20  beCursor *pC;.. 
22bd0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
22be0 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
22bf0 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  ->nCursor );.  p
22c00 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
22c10 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
22c20 20 70 43 21 3d 30 20 29 3b 0a 20 20 70 43 2d 3e   pC!=0 );.  pC->
22c30 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 70  nullRow = 1;.  p
22c40 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20  C->rowidIsValid 
22c50 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70  = 0;.  assert( p
22c60 43 2d 3e 70 43 75 72 73 6f 72 20 7c 7c 20 70 43  C->pCursor || pC
22c70 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 20 29 3b  ->pVtabCursor );
22c80 0a 20 20 69 66 28 20 70 43 2d 3e 70 43 75 72 73  .  if( pC->pCurs
22c90 6f 72 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  or ){.    sqlite
22ca0 33 42 74 72 65 65 43 6c 65 61 72 43 75 72 73 6f  3BtreeClearCurso
22cb0 72 28 70 43 2d 3e 70 43 75 72 73 6f 72 29 3b 0a  r(pC->pCursor);.
22cc0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
22cd0 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 61 73 74 20  /* Opcode: Last 
22ce0 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
22cf0 2a 20 54 68 65 20 6e 65 78 74 20 75 73 65 20 6f  * The next use o
22d00 66 20 74 68 65 20 52 6f 77 69 64 20 6f 72 20 43  f the Rowid or C
22d10 6f 6c 75 6d 6e 20 6f 72 20 4e 65 78 74 20 69 6e  olumn or Next in
22d20 73 74 72 75 63 74 69 6f 6e 20 66 6f 72 20 50 31  struction for P1
22d30 20 0a 2a 2a 20 77 69 6c 6c 20 72 65 66 65 72 20   .** will refer 
22d40 74 6f 20 74 68 65 20 6c 61 73 74 20 65 6e 74 72  to the last entr
22d50 79 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  y in the databas
22d60 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  e table or index
22d70 2e 0a 2a 2a 20 49 66 20 74 68 65 20 74 61 62 6c  ..** If the tabl
22d80 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20 65 6d  e or index is em
22d90 70 74 79 20 61 6e 64 20 50 32 3e 30 2c 20 74 68  pty and P2>0, th
22da0 65 6e 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74  en jump immediat
22db0 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 20 49 66  ely to P2..** If
22dc0 20 50 32 20 69 73 20 30 20 6f 72 20 69 66 20 74   P2 is 0 or if t
22dd0 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  he table or inde
22de0 78 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 2c 20  x is not empty, 
22df0 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20  fall through.** 
22e00 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  to the following
22e10 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f   instruction..*/
22e20 0a 63 61 73 65 20 4f 50 5f 4c 61 73 74 3a 20 7b  .case OP_Last: {
22e30 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
22e40 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  */.  VdbeCursor 
22e50 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20  *pC;.  BtCursor 
22e60 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65  *pCrsr;.  int re
22e70 73 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  s;..  assert( pO
22e80 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
22e90 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
22ea0 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
22eb0 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
22ec0 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
22ed0 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75   pCrsr = pC->pCu
22ee0 72 73 6f 72 3b 0a 20 20 72 65 73 20 3d 20 30 3b  rsor;.  res = 0;
22ef0 0a 20 20 69 66 28 20 41 4c 57 41 59 53 28 70 43  .  if( ALWAYS(pC
22f00 72 73 72 21 3d 30 29 20 29 7b 0a 20 20 20 20 72  rsr!=0) ){.    r
22f10 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
22f20 4c 61 73 74 28 70 43 72 73 72 2c 20 26 72 65 73  Last(pCrsr, &res
22f30 29 3b 0a 20 20 7d 0a 20 20 70 43 2d 3e 6e 75 6c  );.  }.  pC->nul
22f40 6c 52 6f 77 20 3d 20 28 75 38 29 72 65 73 3b 0a  lRow = (u8)res;.
22f50 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f    pC->deferredMo
22f60 76 65 74 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e  veto = 0;.  pC->
22f70 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30  rowidIsValid = 0
22f80 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61  ;.  pC->cacheSta
22f90 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c  tus = CACHE_STAL
22fa0 45 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 32  E;.  if( pOp->p2
22fb0 3e 30 20 26 26 20 72 65 73 20 29 7b 0a 20 20 20  >0 && res ){.   
22fc0 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
22fd0 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  1;.  }.  break;.
22fe0 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  }.../* Opcode: S
22ff0 6f 72 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ort P1 P2 * * *.
23000 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
23010 65 20 64 6f 65 73 20 65 78 61 63 74 6c 79 20 74  e does exactly t
23020 68 65 20 73 61 6d 65 20 74 68 69 6e 67 20 61 73  he same thing as
23030 20 4f 50 5f 52 65 77 69 6e 64 20 65 78 63 65 70   OP_Rewind excep
23040 74 20 74 68 61 74 0a 2a 2a 20 69 74 20 69 6e 63  t that.** it inc
23050 72 65 6d 65 6e 74 73 20 61 6e 20 75 6e 64 6f 63  rements an undoc
23060 75 6d 65 6e 74 65 64 20 67 6c 6f 62 61 6c 20 76  umented global v
23070 61 72 69 61 62 6c 65 20 75 73 65 64 20 66 6f 72  ariable used for
23080 20 74 65 73 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20   testing..**.** 
23090 53 6f 72 74 69 6e 67 20 69 73 20 61 63 63 6f 6d  Sorting is accom
230a0 70 6c 69 73 68 65 64 20 62 79 20 77 72 69 74 69  plished by writi
230b0 6e 67 20 72 65 63 6f 72 64 73 20 69 6e 74 6f 20  ng records into 
230c0 61 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 2c  a sorting index,
230d0 0a 2a 2a 20 74 68 65 6e 20 72 65 77 69 6e 64 69  .** then rewindi
230e0 6e 67 20 74 68 61 74 20 69 6e 64 65 78 20 61 6e  ng that index an
230f0 64 20 70 6c 61 79 69 6e 67 20 69 74 20 62 61 63  d playing it bac
23100 6b 20 66 72 6f 6d 20 62 65 67 69 6e 6e 69 6e 67  k from beginning
23110 20 74 6f 0a 2a 2a 20 65 6e 64 2e 20 20 57 65 20   to.** end.  We 
23120 75 73 65 20 74 68 65 20 4f 50 5f 53 6f 72 74 20  use the OP_Sort 
23130 6f 70 63 6f 64 65 20 69 6e 73 74 65 61 64 20 6f  opcode instead o
23140 66 20 4f 50 5f 52 65 77 69 6e 64 20 74 6f 20 64  f OP_Rewind to d
23150 6f 20 74 68 65 0a 2a 2a 20 72 65 77 69 6e 64 69  o the.** rewindi
23160 6e 67 20 73 6f 20 74 68 61 74 20 74 68 65 20 67  ng so that the g
23170 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 20 77  lobal variable w
23180 69 6c 6c 20 62 65 20 69 6e 63 72 65 6d 65 6e 74  ill be increment
23190 65 64 20 61 6e 64 0a 2a 2a 20 72 65 67 72 65 73  ed and.** regres
231a0 73 69 6f 6e 20 74 65 73 74 73 20 63 61 6e 20 64  sion tests can d
231b0 65 74 65 72 6d 69 6e 65 20 77 68 65 74 68 65 72  etermine whether
231c0 20 6f 72 20 6e 6f 74 20 74 68 65 20 6f 70 74 69   or not the opti
231d0 6d 69 7a 65 72 20 69 73 0a 2a 2a 20 63 6f 72 72  mizer is.** corr
231e0 65 63 74 6c 79 20 6f 70 74 69 6d 69 7a 69 6e 67  ectly optimizing
231f0 20 6f 75 74 20 73 6f 72 74 73 2e 0a 2a 2f 0a 63   out sorts..*/.c
23200 61 73 65 20 4f 50 5f 53 6f 72 74 65 72 53 6f 72  ase OP_SorterSor
23210 74 3a 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f  t:    /* jump */
23220 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
23230 4d 49 54 5f 4d 45 52 47 45 5f 53 4f 52 54 0a 20  MIT_MERGE_SORT. 
23240 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 3d 20 4f   pOp->opcode = O
23250 50 5f 53 6f 72 74 3b 0a 23 65 6e 64 69 66 0a 63  P_Sort;.#endif.c
23260 61 73 65 20 4f 50 5f 53 6f 72 74 3a 20 7b 20 20  ase OP_Sort: {  
23270 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
23280 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54  .#ifdef SQLITE_T
23290 45 53 54 0a 20 20 73 71 6c 69 74 65 33 5f 73 6f  EST.  sqlite3_so
232a0 72 74 5f 63 6f 75 6e 74 2b 2b 3b 0a 20 20 73 71  rt_count++;.  sq
232b0 6c 69 74 65 33 5f 73 65 61 72 63 68 5f 63 6f 75  lite3_search_cou
232c0 6e 74 2d 2d 3b 0a 23 65 6e 64 69 66 0a 20 20 70  nt--;.#endif.  p
232d0 2d 3e 61 43 6f 75 6e 74 65 72 5b 53 51 4c 49 54  ->aCounter[SQLIT
232e0 45 5f 53 54 4d 54 53 54 41 54 55 53 5f 53 4f 52  E_STMTSTATUS_SOR
232f0 54 2d 31 5d 2b 2b 3b 0a 20 20 2f 2a 20 46 61 6c  T-1]++;.  /* Fal
23300 6c 20 74 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f  l through into O
23310 50 5f 52 65 77 69 6e 64 20 2a 2f 0a 7d 0a 2f 2a  P_Rewind */.}./*
23320 20 4f 70 63 6f 64 65 3a 20 52 65 77 69 6e 64 20   Opcode: Rewind 
23330 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
23340 2a 20 54 68 65 20 6e 65 78 74 20 75 73 65 20 6f  * The next use o
23350 66 20 74 68 65 20 52 6f 77 69 64 20 6f 72 20 43  f the Rowid or C
23360 6f 6c 75 6d 6e 20 6f 72 20 4e 65 78 74 20 69 6e  olumn or Next in
23370 73 74 72 75 63 74 69 6f 6e 20 66 6f 72 20 50 31  struction for P1
23380 20 0a 2a 2a 20 77 69 6c 6c 20 72 65 66 65 72 20   .** will refer 
23390 74 6f 20 74 68 65 20 66 69 72 73 74 20 65 6e 74  to the first ent
233a0 72 79 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  ry in the databa
233b0 73 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  se table or inde
233c0 78 2e 0a 2a 2a 20 49 66 20 74 68 65 20 74 61 62  x..** If the tab
233d0 6c 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20 65  le or index is e
233e0 6d 70 74 79 20 61 6e 64 20 50 32 3e 30 2c 20 74  mpty and P2>0, t
233f0 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61  hen jump immedia
23400 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 20 49  tely to P2..** I
23410 66 20 50 32 20 69 73 20 30 20 6f 72 20 69 66 20  f P2 is 0 or if 
23420 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  the table or ind
23430 65 78 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 2c  ex is not empty,
23440 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a   fall through.**
23450 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   to the followin
23460 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  g instruction..*
23470 2f 0a 63 61 73 65 20 4f 50 5f 52 65 77 69 6e 64  /.case OP_Rewind
23480 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  : {        /* ju
23490 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73  mp */.  VdbeCurs
234a0 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73  or *pC;.  BtCurs
234b0 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74  or *pCrsr;.  int
234c0 20 72 65 73 3b 0a 0a 20 20 61 73 73 65 72 74 28   res;..  assert(
234d0 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
234e0 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
234f0 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
23500 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
23510 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
23520 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
23530 69 73 53 6f 72 74 65 72 3d 3d 28 70 4f 70 2d 3e  isSorter==(pOp->
23540 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 6f 72 74 65  opcode==OP_Sorte
23550 72 53 6f 72 74 29 20 29 3b 0a 20 20 72 65 73 20  rSort) );.  res 
23560 3d 20 31 3b 0a 20 20 69 66 28 20 69 73 53 6f 72  = 1;.  if( isSor
23570 74 65 72 28 70 43 29 20 29 7b 0a 20 20 20 20 72  ter(pC) ){.    r
23580 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53  c = sqlite3VdbeS
23590 6f 72 74 65 72 52 65 77 69 6e 64 28 64 62 2c 20  orterRewind(db, 
235a0 70 43 2c 20 26 72 65 73 29 3b 0a 20 20 7d 65 6c  pC, &res);.  }el
235b0 73 65 7b 0a 20 20 20 20 70 43 72 73 72 20 3d 20  se{.    pCrsr = 
235c0 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 20  pC->pCursor;.   
235d0 20 61 73 73 65 72 74 28 20 70 43 72 73 72 20 29   assert( pCrsr )
235e0 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  ;.    rc = sqlit
235f0 65 33 42 74 72 65 65 46 69 72 73 74 28 70 43 72  e3BtreeFirst(pCr
23600 73 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 70  sr, &res);.    p
23610 43 2d 3e 61 74 46 69 72 73 74 20 3d 20 72 65 73  C->atFirst = res
23620 3d 3d 30 20 3f 31 3a 30 3b 0a 20 20 20 20 70 43  ==0 ?1:0;.    pC
23630 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
23640 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e 63 61   = 0;.    pC->ca
23650 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
23660 45 5f 53 54 41 4c 45 3b 0a 20 20 20 20 70 43 2d  E_STALE;.    pC-
23670 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20  >rowidIsValid = 
23680 30 3b 0a 20 20 7d 0a 20 20 70 43 2d 3e 6e 75 6c  0;.  }.  pC->nul
23690 6c 52 6f 77 20 3d 20 28 75 38 29 72 65 73 3b 0a  lRow = (u8)res;.
236a0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
236b0 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 3c 70  2>0 && pOp->p2<p
236c0 2d 3e 6e 4f 70 20 29 3b 0a 20 20 69 66 28 20 72  ->nOp );.  if( r
236d0 65 73 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70  es ){.    pc = p
236e0 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a  Op->p2 - 1;.  }.
236f0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
23700 70 63 6f 64 65 3a 20 4e 65 78 74 20 50 31 20 50  pcode: Next P1 P
23710 32 20 2a 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20  2 * P4 P5.**.** 
23720 41 64 76 61 6e 63 65 20 63 75 72 73 6f 72 20 50  Advance cursor P
23730 31 20 73 6f 20 74 68 61 74 20 69 74 20 70 6f 69  1 so that it poi
23740 6e 74 73 20 74 6f 20 74 68 65 20 6e 65 78 74 20  nts to the next 
23750 6b 65 79 2f 64 61 74 61 20 70 61 69 72 20 69 6e  key/data pair in
23760 20 69 74 73 0a 2a 2a 20 74 61 62 6c 65 20 6f 72   its.** table or
23770 20 69 6e 64 65 78 2e 20 20 49 66 20 74 68 65 72   index.  If ther
23780 65 20 61 72 65 20 6e 6f 20 6d 6f 72 65 20 6b 65  e are no more ke
23790 79 2f 76 61 6c 75 65 20 70 61 69 72 73 20 74 68  y/value pairs th
237a0 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a  en fall through.
237b0 2a 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77  ** to the follow
237c0 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ing instruction.
237d0 20 20 42 75 74 20 69 66 20 74 68 65 20 63 75 72    But if the cur
237e0 73 6f 72 20 61 64 76 61 6e 63 65 20 77 61 73 20  sor advance was 
237f0 73 75 63 63 65 73 73 66 75 6c 2c 0a 2a 2a 20 6a  successful,.** j
23800 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20  ump immediately 
23810 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  to P2..**.** The
23820 20 50 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20   P1 cursor must 
23830 62 65 20 66 6f 72 20 61 20 72 65 61 6c 20 74 61  be for a real ta
23840 62 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65 75 64  ble, not a pseud
23850 6f 2d 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 50  o-table..**.** P
23860 34 20 69 73 20 61 6c 77 61 79 73 20 6f 66 20 74  4 is always of t
23870 79 70 65 20 50 34 5f 41 44 56 41 4e 43 45 2e 20  ype P4_ADVANCE. 
23880 54 68 65 20 66 75 6e 63 74 69 6f 6e 20 70 6f 69  The function poi
23890 6e 74 65 72 20 70 6f 69 6e 74 73 20 74 6f 0a 2a  nter points to.*
238a0 2a 20 73 71 6c 69 74 65 33 42 74 72 65 65 4e 65  * sqlite3BtreeNe
238b0 78 74 28 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  xt()..**.** If P
238c0 35 20 69 73 20 70 6f 73 69 74 69 76 65 20 61 6e  5 is positive an
238d0 64 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61  d the jump is ta
238e0 6b 65 6e 2c 20 74 68 65 6e 20 65 76 65 6e 74 20  ken, then event 
238f0 63 6f 75 6e 74 65 72 0a 2a 2a 20 6e 75 6d 62 65  counter.** numbe
23900 72 20 50 35 2d 31 20 69 6e 20 74 68 65 20 70 72  r P5-1 in the pr
23910 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74  epared statement
23920 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e   is incremented.
23930 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
23940 20 50 72 65 76 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f   Prev.*/./* Opco
23950 64 65 3a 20 50 72 65 76 20 50 31 20 50 32 20 2a  de: Prev P1 P2 *
23960 20 2a 20 50 35 0a 2a 2a 0a 2a 2a 20 42 61 63 6b   * P5.**.** Back
23970 20 75 70 20 63 75 72 73 6f 72 20 50 31 20 73 6f   up cursor P1 so
23980 20 74 68 61 74 20 69 74 20 70 6f 69 6e 74 73 20   that it points 
23990 74 6f 20 74 68 65 20 70 72 65 76 69 6f 75 73 20  to the previous 
239a0 6b 65 79 2f 64 61 74 61 20 70 61 69 72 20 69 6e  key/data pair in
239b0 20 69 74 73 0a 2a 2a 20 74 61 62 6c 65 20 6f 72   its.** table or
239c0 20 69 6e 64 65 78 2e 20 20 49 66 20 74 68 65 72   index.  If ther
239d0 65 20 69 73 20 6e 6f 20 70 72 65 76 69 6f 75 73  e is no previous
239e0 20 6b 65 79 2f 76 61 6c 75 65 20 70 61 69 72 73   key/value pairs
239f0 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75   then fall throu
23a00 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66 6f 6c  gh.** to the fol
23a10 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75 63 74 69  lowing instructi
23a20 6f 6e 2e 20 20 42 75 74 20 69 66 20 74 68 65 20  on.  But if the 
23a30 63 75 72 73 6f 72 20 62 61 63 6b 75 70 20 77 61  cursor backup wa
23a40 73 20 73 75 63 63 65 73 73 66 75 6c 2c 0a 2a 2a  s successful,.**
23a50 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c   jump immediatel
23a60 79 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54  y to P2..**.** T
23a70 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d 75 73  he P1 cursor mus
23a80 74 20 62 65 20 66 6f 72 20 61 20 72 65 61 6c 20  t be for a real 
23a90 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65  table, not a pse
23aa0 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a  udo-table..**.**
23ab0 20 50 34 20 69 73 20 61 6c 77 61 79 73 20 6f 66   P4 is always of
23ac0 20 74 79 70 65 20 50 34 5f 41 44 56 41 4e 43 45   type P4_ADVANCE
23ad0 2e 20 54 68 65 20 66 75 6e 63 74 69 6f 6e 20 70  . The function p
23ae0 6f 69 6e 74 65 72 20 70 6f 69 6e 74 73 20 74 6f  ointer points to
23af0 0a 2a 2a 20 73 71 6c 69 74 65 33 42 74 72 65 65  .** sqlite3Btree
23b00 50 72 65 76 69 6f 75 73 28 29 2e 0a 2a 2a 0a 2a  Previous()..**.*
23b10 2a 20 49 66 20 50 35 20 69 73 20 70 6f 73 69 74  * If P5 is posit
23b20 69 76 65 20 61 6e 64 20 74 68 65 20 6a 75 6d 70  ive and the jump
23b30 20 69 73 20 74 61 6b 65 6e 2c 20 74 68 65 6e 20   is taken, then 
23b40 65 76 65 6e 74 20 63 6f 75 6e 74 65 72 0a 2a 2a  event counter.**
23b50 20 6e 75 6d 62 65 72 20 50 35 2d 31 20 69 6e 20   number P5-1 in 
23b60 74 68 65 20 70 72 65 70 61 72 65 64 20 73 74 61  the prepared sta
23b70 74 65 6d 65 6e 74 20 69 73 20 69 6e 63 72 65 6d  tement is increm
23b80 65 6e 74 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ented..*/.case O
23b90 50 5f 53 6f 72 74 65 72 4e 65 78 74 3a 20 20 20  P_SorterNext:   
23ba0 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 23 69 66 64   /* jump */.#ifd
23bb0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 4d  ef SQLITE_OMIT_M
23bc0 45 52 47 45 5f 53 4f 52 54 0a 20 20 70 4f 70 2d  ERGE_SORT.  pOp-
23bd0 3e 6f 70 63 6f 64 65 20 3d 20 4f 50 5f 4e 65 78  >opcode = OP_Nex
23be0 74 3b 0a 23 65 6e 64 69 66 0a 63 61 73 65 20 4f  t;.#endif.case O
23bf0 50 5f 50 72 65 76 3a 20 20 20 20 20 20 20 20 20  P_Prev:         
23c00 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65   /* jump */.case
23c10 20 4f 50 5f 4e 65 78 74 3a 20 7b 20 20 20 20 20   OP_Next: {     
23c20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
23c30 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
23c40 20 20 69 6e 74 20 72 65 73 3b 0a 0a 20 20 43 48    int res;..  CH
23c50 45 43 4b 5f 46 4f 52 5f 49 4e 54 45 52 52 55 50  ECK_FOR_INTERRUP
23c60 54 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  T;.  assert( pOp
23c70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
23c80 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
23c90 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
23ca0 70 35 3c 3d 41 72 72 61 79 53 69 7a 65 28 70 2d  p5<=ArraySize(p-
23cb0 3e 61 43 6f 75 6e 74 65 72 29 20 29 3b 0a 20 20  >aCounter) );.  
23cc0 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
23cd0 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70 43  p->p1];.  if( pC
23ce0 3d 3d 30 20 29 7b 0a 20 20 20 20 62 72 65 61 6b  ==0 ){.    break
23cf0 3b 20 20 2f 2a 20 53 65 65 20 74 69 63 6b 65 74  ;  /* See ticket
23d00 20 23 32 32 37 33 20 2a 2f 0a 20 20 7d 0a 20 20   #2273 */.  }.  
23d10 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 53 6f  assert( pC->isSo
23d20 72 74 65 72 3d 3d 28 70 4f 70 2d 3e 6f 70 63 6f  rter==(pOp->opco
23d30 64 65 3d 3d 4f 50 5f 53 6f 72 74 65 72 4e 65 78  de==OP_SorterNex
23d40 74 29 20 29 3b 0a 20 20 69 66 28 20 69 73 53 6f  t) );.  if( isSo
23d50 72 74 65 72 28 70 43 29 20 29 7b 0a 20 20 20 20  rter(pC) ){.    
23d60 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63  assert( pOp->opc
23d70 6f 64 65 3d 3d 4f 50 5f 53 6f 72 74 65 72 4e 65  ode==OP_SorterNe
23d80 78 74 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 73  xt );.    rc = s
23d90 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65 72  qlite3VdbeSorter
23da0 4e 65 78 74 28 64 62 2c 20 70 43 2c 20 26 72 65  Next(db, pC, &re
23db0 73 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  s);.  }else{.   
23dc0 20 72 65 73 20 3d 20 31 3b 0a 20 20 20 20 61 73   res = 1;.    as
23dd0 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72  sert( pC->deferr
23de0 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20  edMoveto==0 );. 
23df0 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70     assert( pC->p
23e00 43 75 72 73 6f 72 20 29 3b 0a 20 20 20 20 61 73  Cursor );.    as
23e10 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
23e20 65 21 3d 4f 50 5f 4e 65 78 74 20 7c 7c 20 70 4f  e!=OP_Next || pO
23e30 70 2d 3e 70 34 2e 78 41 64 76 61 6e 63 65 3d 3d  p->p4.xAdvance==
23e40 73 71 6c 69 74 65 33 42 74 72 65 65 4e 65 78 74  sqlite3BtreeNext
23e50 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
23e60 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f  pOp->opcode!=OP_
23e70 50 72 65 76 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e  Prev || pOp->p4.
23e80 78 41 64 76 61 6e 63 65 3d 3d 73 71 6c 69 74 65  xAdvance==sqlite
23e90 33 42 74 72 65 65 50 72 65 76 69 6f 75 73 20 29  3BtreePrevious )
23ea0 3b 0a 20 20 20 20 72 63 20 3d 20 70 4f 70 2d 3e  ;.    rc = pOp->
23eb0 70 34 2e 78 41 64 76 61 6e 63 65 28 70 43 2d 3e  p4.xAdvance(pC->
23ec0 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a  pCursor, &res);.
23ed0 20 20 7d 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f    }.  pC->nullRo
23ee0 77 20 3d 20 28 75 38 29 72 65 73 3b 0a 20 20 70  w = (u8)res;.  p
23ef0 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
23f00 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20   CACHE_STALE;.  
23f10 69 66 28 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20  if( res==0 ){.  
23f20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
23f30 20 31 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d   1;.    if( pOp-
23f40 3e 70 35 20 29 20 70 2d 3e 61 43 6f 75 6e 74 65  >p5 ) p->aCounte
23f50 72 5b 70 4f 70 2d 3e 70 35 2d 31 5d 2b 2b 3b 0a  r[pOp->p5-1]++;.
23f60 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45  #ifdef SQLITE_TE
23f70 53 54 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73  ST.    sqlite3_s
23f80 65 61 72 63 68 5f 63 6f 75 6e 74 2b 2b 3b 0a 23  earch_count++;.#
23f90 65 6e 64 69 66 0a 20 20 7d 0a 20 20 70 43 2d 3e  endif.  }.  pC->
23fa0 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30  rowidIsValid = 0
23fb0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
23fc0 20 4f 70 63 6f 64 65 3a 20 49 64 78 49 6e 73 65   Opcode: IdxInse
23fd0 72 74 20 50 31 20 50 32 20 50 33 20 2a 20 50 35  rt P1 P2 P3 * P5
23fe0 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20  .**.** Register 
23ff0 50 32 20 68 6f 6c 64 73 20 61 6e 20 53 51 4c 20  P2 holds an SQL 
24000 69 6e 64 65 78 20 6b 65 79 20 6d 61 64 65 20 75  index key made u
24010 73 69 6e 67 20 74 68 65 0a 2a 2a 20 4d 61 6b 65  sing the.** Make
24020 52 65 63 6f 72 64 20 69 6e 73 74 72 75 63 74 69  Record instructi
24030 6f 6e 73 2e 20 20 54 68 69 73 20 6f 70 63 6f 64  ons.  This opcod
24040 65 20 77 72 69 74 65 73 20 74 68 61 74 20 6b 65  e writes that ke
24050 79 0a 2a 2a 20 69 6e 74 6f 20 74 68 65 20 69 6e  y.** into the in
24060 64 65 78 20 50 31 2e 20 20 44 61 74 61 20 66 6f  dex P1.  Data fo
24070 72 20 74 68 65 20 65 6e 74 72 79 20 69 73 20 6e  r the entry is n
24080 69 6c 2e 0a 2a 2a 0a 2a 2a 20 50 33 20 69 73 20  il..**.** P3 is 
24090 61 20 66 6c 61 67 20 74 68 61 74 20 70 72 6f 76  a flag that prov
240a0 69 64 65 73 20 61 20 68 69 6e 74 20 74 6f 20 74  ides a hint to t
240b0 68 65 20 62 2d 74 72 65 65 20 6c 61 79 65 72 20  he b-tree layer 
240c0 74 68 61 74 20 74 68 69 73 0a 2a 2a 20 69 6e 73  that this.** ins
240d0 65 72 74 20 69 73 20 6c 69 6b 65 6c 79 20 74 6f  ert is likely to
240e0 20 62 65 20 61 6e 20 61 70 70 65 6e 64 2e 0a 2a   be an append..*
240f0 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75  *.** This instru
24100 63 74 69 6f 6e 20 6f 6e 6c 79 20 77 6f 72 6b 73  ction only works
24110 20 66 6f 72 20 69 6e 64 69 63 65 73 2e 20 20 54   for indices.  T
24120 68 65 20 65 71 75 69 76 61 6c 65 6e 74 20 69 6e  he equivalent in
24130 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 66 6f 72  struction.** for
24140 20 74 61 62 6c 65 73 20 69 73 20 4f 50 5f 49 6e   tables is OP_In
24150 73 65 72 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  sert..*/.case OP
24160 5f 53 6f 72 74 65 72 49 6e 73 65 72 74 3a 20 20  _SorterInsert:  
24170 20 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 23       /* in2 */.#
24180 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  ifdef SQLITE_OMI
24190 54 5f 4d 45 52 47 45 5f 53 4f 52 54 0a 20 20 70  T_MERGE_SORT.  p
241a0 4f 70 2d 3e 6f 70 63 6f 64 65 20 3d 20 4f 50 5f  Op->opcode = OP_
241b0 49 64 78 49 6e 73 65 72 74 3b 0a 23 65 6e 64 69  IdxInsert;.#endi
241c0 66 0a 63 61 73 65 20 4f 50 5f 49 64 78 49 6e 73  f.case OP_IdxIns
241d0 65 72 74 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  ert: {        /*
241e0 20 69 6e 32 20 2a 2f 0a 20 20 56 64 62 65 43 75   in2 */.  VdbeCu
241f0 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75  rsor *pC;.  BtCu
24200 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69  rsor *pCrsr;.  i
24210 6e 74 20 6e 4b 65 79 3b 0a 20 20 63 6f 6e 73 74  nt nKey;.  const
24220 20 63 68 61 72 20 2a 7a 4b 65 79 3b 0a 0a 20 20   char *zKey;..  
24230 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
24240 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
24250 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
24260 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
24270 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
24280 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  pC!=0 );.  asser
24290 74 28 20 70 43 2d 3e 69 73 53 6f 72 74 65 72 3d  t( pC->isSorter=
242a0 3d 28 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  =(pOp->opcode==O
242b0 50 5f 53 6f 72 74 65 72 49 6e 73 65 72 74 29 20  P_SorterInsert) 
242c0 29 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65  );.  pIn2 = &aMe
242d0 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73  m[pOp->p2];.  as
242e0 73 65 72 74 28 20 70 49 6e 32 2d 3e 66 6c 61 67  sert( pIn2->flag
242f0 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a  s & MEM_Blob );.
24300 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43    pCrsr = pC->pC
24310 75 72 73 6f 72 3b 0a 20 20 69 66 28 20 41 4c 57  ursor;.  if( ALW
24320 41 59 53 28 70 43 72 73 72 21 3d 30 29 20 29 7b  AYS(pCrsr!=0) ){
24330 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d  .    assert( pC-
24340 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29 3b 0a 20  >isTable==0 );. 
24350 20 20 20 72 63 20 3d 20 45 78 70 61 6e 64 42 6c     rc = ExpandBl
24360 6f 62 28 70 49 6e 32 29 3b 0a 20 20 20 20 69 66  ob(pIn2);.    if
24370 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
24380 29 7b 0a 20 20 20 20 20 20 69 66 28 20 69 73 53  ){.      if( isS
24390 6f 72 74 65 72 28 70 43 29 20 29 7b 0a 20 20 20  orter(pC) ){.   
243a0 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
243b0 33 56 64 62 65 53 6f 72 74 65 72 57 72 69 74 65  3VdbeSorterWrite
243c0 28 64 62 2c 20 70 43 2c 20 70 49 6e 32 29 3b 0a  (db, pC, pIn2);.
243d0 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
243e0 20 20 20 20 20 6e 4b 65 79 20 3d 20 70 49 6e 32       nKey = pIn2
243f0 2d 3e 6e 3b 0a 20 20 20 20 20 20 20 20 7a 4b 65  ->n;.        zKe
24400 79 20 3d 20 70 49 6e 32 2d 3e 7a 3b 0a 20 20 20  y = pIn2->z;.   
24410 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
24420 33 42 74 72 65 65 49 6e 73 65 72 74 28 70 43 72  3BtreeInsert(pCr
24430 73 72 2c 20 7a 4b 65 79 2c 20 6e 4b 65 79 2c 20  sr, zKey, nKey, 
24440 22 22 2c 20 30 2c 20 30 2c 20 70 4f 70 2d 3e 70  "", 0, 0, pOp->p
24450 33 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20  3, .            
24460 28 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c  ((pOp->p5 & OPFL
24470 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54  AG_USESEEKRESULT
24480 29 20 3f 20 70 43 2d 3e 73 65 65 6b 52 65 73 75  ) ? pC->seekResu
24490 6c 74 20 3a 20 30 29 0a 20 20 20 20 20 20 20 20  lt : 0).        
244a0 20 20 20 20 29 3b 0a 20 20 20 20 20 20 20 20 61      );.        a
244b0 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72  ssert( pC->defer
244c0 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a  redMoveto==0 );.
244d0 20 20 20 20 20 20 20 20 70 43 2d 3e 63 61 63 68          pC->cach
244e0 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
244f0 53 54 41 4c 45 3b 0a 20 20 20 20 20 20 7d 0a 20  STALE;.      }. 
24500 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b     }.  }.  break
24510 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
24520 49 64 78 44 65 6c 65 74 65 20 50 31 20 50 32 20  IdxDelete P1 P2 
24530 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65  P3 * *.**.** The
24540 20 63 6f 6e 74 65 6e 74 20 6f 66 20 50 33 20 72   content of P3 r
24550 65 67 69 73 74 65 72 73 20 73 74 61 72 74 69 6e  egisters startin
24560 67 20 61 74 20 72 65 67 69 73 74 65 72 20 50 32  g at register P2
24570 20 66 6f 72 6d 0a 2a 2a 20 61 6e 20 75 6e 70 61   form.** an unpa
24580 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20  cked index key. 
24590 54 68 69 73 20 6f 70 63 6f 64 65 20 72 65 6d 6f  This opcode remo
245a0 76 65 73 20 74 68 61 74 20 65 6e 74 72 79 20 66  ves that entry f
245b0 72 6f 6d 20 74 68 65 20 0a 2a 2a 20 69 6e 64 65  rom the .** inde
245c0 78 20 6f 70 65 6e 65 64 20 62 79 20 63 75 72 73  x opened by curs
245d0 6f 72 20 50 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f  or P1..*/.case O
245e0 50 5f 49 64 78 44 65 6c 65 74 65 3a 20 7b 0a 20  P_IdxDelete: {. 
245f0 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
24600 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72  .  BtCursor *pCr
24610 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20  sr;.  int res;. 
24620 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20   UnpackedRecord 
24630 72 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  r;..  assert( pO
24640 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 61 73 73  p->p3>0 );.  ass
24650 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 26  ert( pOp->p2>0 &
24660 26 20 70 4f 70 2d 3e 70 32 2b 70 4f 70 2d 3e 70  & pOp->p2+pOp->p
24670 33 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31 20 29 3b 0a  3<=p->nMem+1 );.
24680 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
24690 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
246a0 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
246b0 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
246c0 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
246d0 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 70 43 72  ( pC!=0 );.  pCr
246e0 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72  sr = pC->pCursor
246f0 3b 0a 20 20 69 66 28 20 41 4c 57 41 59 53 28 70  ;.  if( ALWAYS(p
24700 43 72 73 72 21 3d 30 29 20 29 7b 0a 20 20 20 20  Crsr!=0) ){.    
24710 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d  r.pKeyInfo = pC-
24720 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 72  >pKeyInfo;.    r
24730 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31 36 29 70  .nField = (u16)p
24740 4f 70 2d 3e 70 33 3b 0a 20 20 20 20 72 2e 66 6c  Op->p3;.    r.fl
24750 61 67 73 20 3d 20 30 3b 0a 20 20 20 20 72 2e 61  ags = 0;.    r.a
24760 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Mem = &aMem[pOp-
24770 3e 70 32 5d 3b 0a 23 69 66 64 65 66 20 53 51 4c  >p2];.#ifdef SQL
24780 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20 7b 20  ITE_DEBUG.    { 
24790 69 6e 74 20 69 3b 20 66 6f 72 28 69 3d 30 3b 20  int i; for(i=0; 
247a0 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b 29  i<r.nField; i++)
247b0 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
247c0 6c 69 64 28 26 72 2e 61 4d 65 6d 5b 69 5d 29 20  lid(&r.aMem[i]) 
247d0 29 3b 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20  ); }.#endif.    
247e0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
247f0 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28  eMovetoUnpacked(
24800 70 43 72 73 72 2c 20 26 72 2c 20 30 2c 20 30 2c  pCrsr, &r, 0, 0,
24810 20 26 72 65 73 29 3b 0a 20 20 20 20 69 66 28 20   &res);.    if( 
24820 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26  rc==SQLITE_OK &&
24830 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 20   res==0 ){.     
24840 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
24850 65 65 44 65 6c 65 74 65 28 70 43 72 73 72 29 3b  eeDelete(pCrsr);
24860 0a 20 20 20 20 7d 0a 20 20 20 20 61 73 73 65 72  .    }.    asser
24870 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d  t( pC->deferredM
24880 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 20 20  oveto==0 );.    
24890 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20  pC->cacheStatus 
248a0 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20  = CACHE_STALE;. 
248b0 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
248c0 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 52 6f 77  * Opcode: IdxRow
248d0 69 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  id P1 P2 * * *.*
248e0 2a 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f 20  *.** Write into 
248f0 72 65 67 69 73 74 65 72 20 50 32 20 61 6e 20 69  register P2 an i
24900 6e 74 65 67 65 72 20 77 68 69 63 68 20 69 73 20  nteger which is 
24910 74 68 65 20 6c 61 73 74 20 65 6e 74 72 79 20 69  the last entry i
24920 6e 20 74 68 65 20 72 65 63 6f 72 64 20 61 74 0a  n the record at.
24930 2a 2a 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  ** the end of th
24940 65 20 69 6e 64 65 78 20 6b 65 79 20 70 6f 69 6e  e index key poin
24950 74 65 64 20 74 6f 20 62 79 20 63 75 72 73 6f 72  ted to by cursor
24960 20 50 31 2e 20 20 54 68 69 73 20 69 6e 74 65 67   P1.  This integ
24970 65 72 20 73 68 6f 75 6c 64 20 62 65 0a 2a 2a 20  er should be.** 
24980 74 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68 65  the rowid of the
24990 20 74 61 62 6c 65 20 65 6e 74 72 79 20 74 6f 20   table entry to 
249a0 77 68 69 63 68 20 74 68 69 73 20 69 6e 64 65 78  which this index
249b0 20 65 6e 74 72 79 20 70 6f 69 6e 74 73 2e 0a 2a   entry points..*
249c0 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 52  *.** See also: R
249d0 6f 77 69 64 2c 20 4d 61 6b 65 52 65 63 6f 72 64  owid, MakeRecord
249e0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78  ..*/.case OP_Idx
249f0 52 6f 77 69 64 3a 20 7b 20 20 20 20 20 20 20 20  Rowid: {        
24a00 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72        /* out2-pr
24a10 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 42 74  erelease */.  Bt
24a20 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20  Cursor *pCrsr;. 
24a30 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
24a40 0a 20 20 69 36 34 20 72 6f 77 69 64 3b 0a 0a 20  .  i64 rowid;.. 
24a50 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
24a60 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
24a70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  ->nCursor );.  p
24a80 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
24a90 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
24aa0 20 70 43 21 3d 30 20 29 3b 0a 20 20 70 43 72 73   pC!=0 );.  pCrs
24ab0 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b  r = pC->pCursor;
24ac0 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d  .  pOut->flags =
24ad0 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 69 66 28   MEM_Null;.  if(
24ae0 20 41 4c 57 41 59 53 28 70 43 72 73 72 21 3d 30   ALWAYS(pCrsr!=0
24af0 29 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71  ) ){.    rc = sq
24b00 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d  lite3VdbeCursorM
24b10 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20 20 20 69  oveto(pC);.    i
24b20 66 28 20 4e 45 56 45 52 28 72 63 29 20 29 20 67  f( NEVER(rc) ) g
24b30 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
24b40 5f 65 72 72 6f 72 3b 0a 20 20 20 20 61 73 73 65  _error;.    asse
24b50 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64  rt( pC->deferred
24b60 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 20  Moveto==0 );.   
24b70 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54   assert( pC->isT
24b80 61 62 6c 65 3d 3d 30 20 29 3b 0a 20 20 20 20 69  able==0 );.    i
24b90 66 28 20 21 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20  f( !pC->nullRow 
24ba0 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71  ){.      rc = sq
24bb0 6c 69 74 65 33 56 64 62 65 49 64 78 52 6f 77 69  lite3VdbeIdxRowi
24bc0 64 28 64 62 2c 20 70 43 72 73 72 2c 20 26 72 6f  d(db, pCrsr, &ro
24bd0 77 69 64 29 3b 0a 20 20 20 20 20 20 69 66 28 20  wid);.      if( 
24be0 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc!=SQLITE_OK ){
24bf0 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62  .        goto ab
24c00 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
24c10 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
24c20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 72 6f 77 69  pOut->u.i = rowi
24c30 64 3b 0a 20 20 20 20 20 20 70 4f 75 74 2d 3e 66  d;.      pOut->f
24c40 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a  lags = MEM_Int;.
24c50 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61      }.  }.  brea
24c60 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
24c70 20 49 64 78 47 45 20 50 31 20 50 32 20 50 33 20   IdxGE P1 P2 P3 
24c80 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 65 20  P4 P5.**.** The 
24c90 50 34 20 72 65 67 69 73 74 65 72 20 76 61 6c 75  P4 register valu
24ca0 65 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74  es beginning wit
24cb0 68 20 50 33 20 66 6f 72 6d 20 61 6e 20 75 6e 70  h P3 form an unp
24cc0 61 63 6b 65 64 20 69 6e 64 65 78 20 0a 2a 2a 20  acked index .** 
24cd0 6b 65 79 20 74 68 61 74 20 6f 6d 69 74 73 20 74  key that omits t
24ce0 68 65 20 52 4f 57 49 44 2e 20 20 43 6f 6d 70 61  he ROWID.  Compa
24cf0 72 65 20 74 68 69 73 20 6b 65 79 20 76 61 6c 75  re this key valu
24d00 65 20 61 67 61 69 6e 73 74 20 74 68 65 20 69 6e  e against the in
24d10 64 65 78 20 0a 2a 2a 20 74 68 61 74 20 50 31 20  dex .** that P1 
24d20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69  is currently poi
24d30 6e 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69  nting to, ignori
24d40 6e 67 20 74 68 65 20 52 4f 57 49 44 20 6f 6e 20  ng the ROWID on 
24d50 74 68 65 20 50 31 20 69 6e 64 65 78 2e 0a 2a 2a  the P1 index..**
24d60 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20 69 6e  .** If the P1 in
24d70 64 65 78 20 65 6e 74 72 79 20 69 73 20 67 72 65  dex entry is gre
24d80 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75  ater than or equ
24d90 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 76 61  al to the key va
24da0 6c 75 65 0a 2a 2a 20 74 68 65 6e 20 6a 75 6d 70  lue.** then jump
24db0 20 74 6f 20 50 32 2e 20 20 4f 74 68 65 72 77 69   to P2.  Otherwi
24dc0 73 65 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20  se fall through 
24dd0 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74  to the next inst
24de0 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49  ruction..**.** I
24df0 66 20 50 35 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f  f P5 is non-zero
24e00 20 74 68 65 6e 20 74 68 65 20 6b 65 79 20 76 61   then the key va
24e10 6c 75 65 20 69 73 20 69 6e 63 72 65 61 73 65 64  lue is increased
24e20 20 62 79 20 61 6e 20 65 70 73 69 6c 6f 6e 20 0a   by an epsilon .
24e30 2a 2a 20 70 72 69 6f 72 20 74 6f 20 74 68 65 20  ** prior to the 
24e40 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 54 68 69  comparison.  Thi
24e50 73 20 6d 61 6b 65 20 74 68 65 20 6f 70 63 6f 64  s make the opcod
24e60 65 20 77 6f 72 6b 20 6c 69 6b 65 20 49 64 78 47  e work like IdxG
24e70 54 20 65 78 63 65 70 74 0a 2a 2a 20 74 68 61 74  T except.** that
24e80 20 69 66 20 74 68 65 20 6b 65 79 20 66 72 6f 6d   if the key from
24e90 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20   register P3 is 
24ea0 61 20 70 72 65 66 69 78 20 6f 66 20 74 68 65 20  a prefix of the 
24eb0 6b 65 79 20 69 6e 20 74 68 65 20 63 75 72 73 6f  key in the curso
24ec0 72 2c 0a 2a 2a 20 74 68 65 20 72 65 73 75 6c 74  r,.** the result
24ed0 20 69 73 20 66 61 6c 73 65 20 77 68 65 72 65 61   is false wherea
24ee0 73 20 69 74 20 77 6f 75 6c 64 20 62 65 20 74 72  s it would be tr
24ef0 75 65 20 77 69 74 68 20 49 64 78 47 54 2e 0a 2a  ue with IdxGT..*
24f00 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78  /./* Opcode: Idx
24f10 4c 54 20 50 31 20 50 32 20 50 33 20 50 34 20 50  LT P1 P2 P3 P4 P
24f20 35 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 72  5.**.** The P4 r
24f30 65 67 69 73 74 65 72 20 76 61 6c 75 65 73 20 62  egister values b
24f40 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 50 33  eginning with P3
24f50 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65   form an unpacke
24f60 64 20 69 6e 64 65 78 20 0a 2a 2a 20 6b 65 79 20  d index .** key 
24f70 74 68 61 74 20 6f 6d 69 74 73 20 74 68 65 20 52  that omits the R
24f80 4f 57 49 44 2e 20 20 43 6f 6d 70 61 72 65 20 74  OWID.  Compare t
24f90 68 69 73 20 6b 65 79 20 76 61 6c 75 65 20 61 67  his key value ag
24fa0 61 69 6e 73 74 20 74 68 65 20 69 6e 64 65 78 20  ainst the index 
24fb0 0a 2a 2a 20 74 68 61 74 20 50 31 20 69 73 20 63  .** that P1 is c
24fc0 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e  urrently pointin
24fd0 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e 67 20 74  g to, ignoring t
24fe0 68 65 20 52 4f 57 49 44 20 6f 6e 20 74 68 65 20  he ROWID on the 
24ff0 50 31 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20  P1 index..**.** 
25000 49 66 20 74 68 65 20 50 31 20 69 6e 64 65 78 20  If the P1 index 
25010 65 6e 74 72 79 20 69 73 20 6c 65 73 73 20 74 68  entry is less th
25020 61 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65  an the key value
25030 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32   then jump to P2
25040 2e 0a 2a 2a 20 4f 74 68 65 72 77 69 73 65 20 66  ..** Otherwise f
25050 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74  all through to t
25060 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74  he next instruct
25070 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35  ion..**.** If P5
25080 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 20 74 68 65   is non-zero the
25090 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 20  n the key value 
250a0 69 73 20 69 6e 63 72 65 61 73 65 64 20 62 79 20  is increased by 
250b0 61 6e 20 65 70 73 69 6c 6f 6e 20 70 72 69 6f 72  an epsilon prior
250c0 20 0a 2a 2a 20 74 6f 20 74 68 65 20 63 6f 6d 70   .** to the comp
250d0 61 72 69 73 6f 6e 2e 20 20 54 68 69 73 20 6d 61  arison.  This ma
250e0 6b 65 73 20 74 68 65 20 6f 70 63 6f 64 65 20 77  kes the opcode w
250f0 6f 72 6b 20 6c 69 6b 65 20 49 64 78 4c 45 2e 0a  ork like IdxLE..
25100 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 4c 54  */.case OP_IdxLT
25110 3a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  :          /* ju
25120 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64  mp */.case OP_Id
25130 78 47 45 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  xGE: {        /*
25140 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43   jump */.  VdbeC
25150 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e 74  ursor *pC;.  int
25160 20 72 65 73 3b 0a 20 20 55 6e 70 61 63 6b 65 64   res;.  Unpacked
25170 52 65 63 6f 72 64 20 72 3b 0a 0a 20 20 61 73 73  Record r;..  ass
25180 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
25190 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
251a0 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
251b0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
251c0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
251d0 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
251e0 70 43 2d 3e 69 73 4f 72 64 65 72 65 64 20 29 3b  pC->isOrdered );
251f0 0a 20 20 69 66 28 20 41 4c 57 41 59 53 28 70 43  .  if( ALWAYS(pC
25200 2d 3e 70 43 75 72 73 6f 72 21 3d 30 29 20 29 7b  ->pCursor!=0) ){
25210 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d  .    assert( pC-
25220 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d  >deferredMoveto=
25230 3d 30 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  =0 );.    assert
25240 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c 20  ( pOp->p5==0 || 
25250 70 4f 70 2d 3e 70 35 3d 3d 31 20 29 3b 0a 20 20  pOp->p5==1 );.  
25260 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
25270 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20  4type==P4_INT32 
25280 29 3b 0a 20 20 20 20 72 2e 70 4b 65 79 49 6e 66  );.    r.pKeyInf
25290 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f  o = pC->pKeyInfo
252a0 3b 0a 20 20 20 20 72 2e 6e 46 69 65 6c 64 20 3d  ;.    r.nField =
252b0 20 28 75 31 36 29 70 4f 70 2d 3e 70 34 2e 69 3b   (u16)pOp->p4.i;
252c0 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35  .    if( pOp->p5
252d0 20 29 7b 0a 20 20 20 20 20 20 72 2e 66 6c 61 67   ){.      r.flag
252e0 73 20 3d 20 55 4e 50 41 43 4b 45 44 5f 49 4e 43  s = UNPACKED_INC
252f0 52 4b 45 59 20 7c 20 55 4e 50 41 43 4b 45 44 5f  RKEY | UNPACKED_
25300 50 52 45 46 49 58 5f 4d 41 54 43 48 3b 0a 20 20  PREFIX_MATCH;.  
25310 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72    }else{.      r
25320 2e 66 6c 61 67 73 20 3d 20 55 4e 50 41 43 4b 45  .flags = UNPACKE
25330 44 5f 50 52 45 46 49 58 5f 4d 41 54 43 48 3b 0a  D_PREFIX_MATCH;.
25340 20 20 20 20 7d 0a 20 20 20 20 72 2e 61 4d 65 6d      }.    r.aMem
25350 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
25360 5d 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  ];.#ifdef SQLITE
25370 5f 44 45 42 55 47 0a 20 20 20 20 7b 20 69 6e 74  _DEBUG.    { int
25380 20 69 3b 20 66 6f 72 28 69 3d 30 3b 20 69 3c 72   i; for(i=0; i<r
25390 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b 29 20 61 73  .nField; i++) as
253a0 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
253b0 28 26 72 2e 61 4d 65 6d 5b 69 5d 29 20 29 3b 20  (&r.aMem[i]) ); 
253c0 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 72 63 20  }.#endif.    rc 
253d0 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 64 78  = sqlite3VdbeIdx
253e0 4b 65 79 43 6f 6d 70 61 72 65 28 70 43 2c 20 26  KeyCompare(pC, &
253f0 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 69 66  r, &res);.    if
25400 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
25410 50 5f 49 64 78 4c 54 20 29 7b 0a 20 20 20 20 20  P_IdxLT ){.     
25420 20 72 65 73 20 3d 20 2d 72 65 73 3b 0a 20 20 20   res = -res;.   
25430 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 61 73   }else{.      as
25440 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
25450 65 3d 3d 4f 50 5f 49 64 78 47 45 20 29 3b 0a 20  e==OP_IdxGE );. 
25460 20 20 20 20 20 72 65 73 2b 2b 3b 0a 20 20 20 20       res++;.    
25470 7d 0a 20 20 20 20 69 66 28 20 72 65 73 3e 30 20  }.    if( res>0 
25480 29 7b 0a 20 20 20 20 20 20 70 63 20 3d 20 70 4f  ){.      pc = pO
25490 70 2d 3e 70 32 20 2d 20 31 20 3b 0a 20 20 20 20  p->p2 - 1 ;.    
254a0 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  }.  }.  break;.}
254b0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 65 73  ../* Opcode: Des
254c0 74 72 6f 79 20 50 31 20 50 32 20 50 33 20 2a 20  troy P1 P2 P3 * 
254d0 2a 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 61  *.**.** Delete a
254e0 6e 20 65 6e 74 69 72 65 20 64 61 74 61 62 61 73  n entire databas
254f0 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  e table or index
25500 20 77 68 6f 73 65 20 72 6f 6f 74 20 70 61 67 65   whose root page
25510 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
25520 0a 2a 2a 20 66 69 6c 65 20 69 73 20 67 69 76 65  .** file is give
25530 6e 20 62 79 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54  n by P1..**.** T
25540 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 64  he table being d
25550 65 73 74 72 6f 79 65 64 20 69 73 20 69 6e 20 74  estroyed is in t
25560 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
25570 20 66 69 6c 65 20 69 66 20 50 33 3d 3d 30 2e 20   file if P3==0. 
25580 20 49 66 0a 2a 2a 20 50 33 3d 3d 31 20 74 68 65   If.** P3==1 the
25590 6e 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 62  n the table to b
255a0 65 20 63 6c 65 61 72 20 69 73 20 69 6e 20 74 68  e clear is in th
255b0 65 20 61 75 78 69 6c 69 61 72 79 20 64 61 74 61  e auxiliary data
255c0 62 61 73 65 20 66 69 6c 65 0a 2a 2a 20 74 68 61  base file.** tha
255d0 74 20 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f  t is used to sto
255e0 72 65 20 74 61 62 6c 65 73 20 63 72 65 61 74 65  re tables create
255f0 20 75 73 69 6e 67 20 43 52 45 41 54 45 20 54 45   using CREATE TE
25600 4d 50 4f 52 41 52 59 20 54 41 42 4c 45 2e 0a 2a  MPORARY TABLE..*
25610 2a 0a 2a 2a 20 49 66 20 41 55 54 4f 56 41 43 55  *.** If AUTOVACU
25620 55 4d 20 69 73 20 65 6e 61 62 6c 65 64 20 74 68  UM is enabled th
25630 65 6e 20 69 74 20 69 73 20 70 6f 73 73 69 62 6c  en it is possibl
25640 65 20 74 68 61 74 20 61 6e 6f 74 68 65 72 20 72  e that another r
25650 6f 6f 74 20 70 61 67 65 0a 2a 2a 20 6d 69 67 68  oot page.** migh
25660 74 20 62 65 20 6d 6f 76 65 64 20 69 6e 74 6f 20  t be moved into 
25670 74 68 65 20 6e 65 77 6c 79 20 64 65 6c 65 74 65  the newly delete
25680 64 20 72 6f 6f 74 20 70 61 67 65 20 69 6e 20 6f  d root page in o
25690 72 64 65 72 20 74 6f 20 6b 65 65 70 20 61 6c 6c  rder to keep all
256a0 0a 2a 2a 20 72 6f 6f 74 20 70 61 67 65 73 20 63  .** root pages c
256b0 6f 6e 74 69 67 75 6f 75 73 20 61 74 20 74 68 65  ontiguous at the
256c0 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68   beginning of th
256d0 65 20 64 61 74 61 62 61 73 65 2e 20 20 54 68 65  e database.  The
256e0 20 66 6f 72 6d 65 72 0a 2a 2a 20 76 61 6c 75 65   former.** value
256f0 20 6f 66 20 74 68 65 20 72 6f 6f 74 20 70 61 67   of the root pag
25700 65 20 74 68 61 74 20 6d 6f 76 65 64 20 2d 20 69  e that moved - i
25710 74 73 20 76 61 6c 75 65 20 62 65 66 6f 72 65 20  ts value before 
25720 74 68 65 20 6d 6f 76 65 20 6f 63 63 75 72 72 65  the move occurre
25730 64 20 2d 0a 2a 2a 20 69 73 20 73 74 6f 72 65 64  d -.** is stored
25740 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e   in register P2.
25750 20 20 49 66 20 6e 6f 20 70 61 67 65 20 0a 2a 2a    If no page .**
25760 20 6d 6f 76 65 6d 65 6e 74 20 77 61 73 20 72 65   movement was re
25770 71 75 69 72 65 64 20 28 62 65 63 61 75 73 65 20  quired (because 
25780 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20  the table being 
25790 64 72 6f 70 70 65 64 20 77 61 73 20 61 6c 72 65  dropped was alre
257a0 61 64 79 20 0a 2a 2a 20 74 68 65 20 6c 61 73 74  ady .** the last
257b0 20 6f 6e 65 20 69 6e 20 74 68 65 20 64 61 74 61   one in the data
257c0 62 61 73 65 29 20 74 68 65 6e 20 61 20 7a 65 72  base) then a zer
257d0 6f 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72  o is stored in r
257e0 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 20 49  egister P2..** I
257f0 66 20 41 55 54 4f 56 41 43 55 55 4d 20 69 73 20  f AUTOVACUUM is 
25800 64 69 73 61 62 6c 65 64 20 74 68 65 6e 20 61 20  disabled then a 
25810 7a 65 72 6f 20 69 73 20 73 74 6f 72 65 64 20 69  zero is stored i
25820 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  n register P2..*
25830 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 43  *.** See also: C
25840 6c 65 61 72 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  lear.*/.case OP_
25850 44 65 73 74 72 6f 79 3a 20 7b 20 20 20 20 20 2f  Destroy: {     /
25860 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73  * out2-prereleas
25870 65 20 2a 2f 0a 20 20 69 6e 74 20 69 4d 6f 76 65  e */.  int iMove
25880 64 3b 0a 20 20 69 6e 74 20 69 43 6e 74 3b 0a 20  d;.  int iCnt;. 
25890 20 56 64 62 65 20 2a 70 56 64 62 65 3b 0a 20 20   Vdbe *pVdbe;.  
258a0 69 6e 74 20 69 44 62 3b 0a 23 69 66 6e 64 65 66  int iDb;.#ifndef
258b0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
258c0 54 55 41 4c 54 41 42 4c 45 0a 20 20 69 43 6e 74  TUALTABLE.  iCnt
258d0 20 3d 20 30 3b 0a 20 20 66 6f 72 28 70 56 64 62   = 0;.  for(pVdb
258e0 65 3d 64 62 2d 3e 70 56 64 62 65 3b 20 70 56 64  e=db->pVdbe; pVd
258f0 62 65 3b 20 70 56 64 62 65 20 3d 20 70 56 64 62  be; pVdbe = pVdb
25900 65 2d 3e 70 4e 65 78 74 29 7b 0a 20 20 20 20 69  e->pNext){.    i
25910 66 28 20 70 56 64 62 65 2d 3e 6d 61 67 69 63 3d  f( pVdbe->magic=
25920 3d 56 44 42 45 5f 4d 41 47 49 43 5f 52 55 4e 20  =VDBE_MAGIC_RUN 
25930 26 26 20 70 56 64 62 65 2d 3e 69 6e 56 74 61 62  && pVdbe->inVtab
25940 4d 65 74 68 6f 64 3c 32 20 26 26 20 70 56 64 62  Method<2 && pVdb
25950 65 2d 3e 70 63 3e 3d 30 20 29 7b 0a 20 20 20 20  e->pc>=0 ){.    
25960 20 20 69 43 6e 74 2b 2b 3b 0a 20 20 20 20 7d 0a    iCnt++;.    }.
25970 20 20 7d 0a 23 65 6c 73 65 0a 20 20 69 43 6e 74    }.#else.  iCnt
25980 20 3d 20 64 62 2d 3e 61 63 74 69 76 65 56 64 62   = db->activeVdb
25990 65 43 6e 74 3b 0a 23 65 6e 64 69 66 0a 20 20 70  eCnt;.#endif.  p
259a0 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
259b0 5f 4e 75 6c 6c 3b 0a 20 20 69 66 28 20 69 43 6e  _Null;.  if( iCn
259c0 74 3e 31 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  t>1 ){.    rc = 
259d0 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 3b 0a 20  SQLITE_LOCKED;. 
259e0 20 20 20 70 2d 3e 65 72 72 6f 72 41 63 74 69 6f     p->errorActio
259f0 6e 20 3d 20 4f 45 5f 41 62 6f 72 74 3b 0a 20 20  n = OE_Abort;.  
25a00 7d 65 6c 73 65 7b 0a 20 20 20 20 69 44 62 20 3d  }else{.    iDb =
25a10 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 20 20 61 73   pOp->p3;.    as
25a20 73 65 72 74 28 20 69 43 6e 74 3d 3d 31 20 29 3b  sert( iCnt==1 );
25a30 0a 20 20 20 20 61 73 73 65 72 74 28 20 28 70 2d  .    assert( (p-
25a40 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28 28 28  >btreeMask & (((
25a50 79 44 62 4d 61 73 6b 29 31 29 3c 3c 69 44 62 29  yDbMask)1)<<iDb)
25a60 29 21 3d 30 20 29 3b 0a 20 20 20 20 72 63 20 3d  )!=0 );.    rc =
25a70 20 73 71 6c 69 74 65 33 42 74 72 65 65 44 72 6f   sqlite3BtreeDro
25a80 70 54 61 62 6c 65 28 64 62 2d 3e 61 44 62 5b 69  pTable(db->aDb[i
25a90 44 62 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 31  Db].pBt, pOp->p1
25aa0 2c 20 26 69 4d 6f 76 65 64 29 3b 0a 20 20 20 20  , &iMoved);.    
25ab0 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pOut->flags = ME
25ac0 4d 5f 49 6e 74 3b 0a 20 20 20 20 70 4f 75 74 2d  M_Int;.    pOut-
25ad0 3e 75 2e 69 20 3d 20 69 4d 6f 76 65 64 3b 0a 23  >u.i = iMoved;.#
25ae0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
25af0 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 0a 20 20  IT_AUTOVACUUM.  
25b00 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
25b10 5f 4f 4b 20 26 26 20 69 4d 6f 76 65 64 21 3d 30  _OK && iMoved!=0
25b20 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
25b30 33 52 6f 6f 74 50 61 67 65 4d 6f 76 65 64 28 64  3RootPageMoved(d
25b40 62 2c 20 69 44 62 2c 20 69 4d 6f 76 65 64 2c 20  b, iDb, iMoved, 
25b50 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 20 20 20 20  pOp->p1);.      
25b60 2f 2a 20 41 6c 6c 20 4f 50 5f 44 65 73 74 72 6f  /* All OP_Destro
25b70 79 20 6f 70 65 72 61 74 69 6f 6e 73 20 6f 63 63  y operations occ
25b80 75 72 20 6f 6e 20 74 68 65 20 73 61 6d 65 20 62  ur on the same b
25b90 74 72 65 65 20 2a 2f 0a 20 20 20 20 20 20 61 73  tree */.      as
25ba0 73 65 72 74 28 20 72 65 73 65 74 53 63 68 65 6d  sert( resetSchem
25bb0 61 4f 6e 46 61 75 6c 74 3d 3d 30 20 7c 7c 20 72  aOnFault==0 || r
25bc0 65 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c  esetSchemaOnFaul
25bd0 74 3d 3d 69 44 62 2b 31 20 29 3b 0a 20 20 20 20  t==iDb+1 );.    
25be0 20 20 72 65 73 65 74 53 63 68 65 6d 61 4f 6e 46    resetSchemaOnF
25bf0 61 75 6c 74 20 3d 20 69 44 62 2b 31 3b 0a 20 20  ault = iDb+1;.  
25c00 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 7d 0a 20    }.#endif.  }. 
25c10 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
25c20 63 6f 64 65 3a 20 43 6c 65 61 72 20 50 31 20 50  code: Clear P1 P
25c30 32 20 50 33 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74  2 P3.**.** Delet
25c40 65 20 61 6c 6c 20 63 6f 6e 74 65 6e 74 73 20 6f  e all contents o
25c50 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74  f the database t
25c60 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 77 68  able or index wh
25c70 6f 73 65 20 72 6f 6f 74 20 70 61 67 65 0a 2a 2a  ose root page.**
25c80 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
25c90 20 66 69 6c 65 20 69 73 20 67 69 76 65 6e 20 62   file is given b
25ca0 79 20 50 31 2e 20 20 42 75 74 2c 20 75 6e 6c 69  y P1.  But, unli
25cb0 6b 65 20 44 65 73 74 72 6f 79 2c 20 64 6f 20 6e  ke Destroy, do n
25cc0 6f 74 0a 2a 2a 20 72 65 6d 6f 76 65 20 74 68 65  ot.** remove the
25cd0 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20   table or index 
25ce0 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73  from the databas
25cf0 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68  e file..**.** Th
25d00 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 63 6c  e table being cl
25d10 65 61 72 20 69 73 20 69 6e 20 74 68 65 20 6d 61  ear is in the ma
25d20 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  in database file
25d30 20 69 66 20 50 32 3d 3d 30 2e 20 20 49 66 0a 2a   if P2==0.  If.*
25d40 2a 20 50 32 3d 3d 31 20 74 68 65 6e 20 74 68 65  * P2==1 then the
25d50 20 74 61 62 6c 65 20 74 6f 20 62 65 20 63 6c 65   table to be cle
25d60 61 72 20 69 73 20 69 6e 20 74 68 65 20 61 75 78  ar is in the aux
25d70 69 6c 69 61 72 79 20 64 61 74 61 62 61 73 65 20  iliary database 
25d80 66 69 6c 65 0a 2a 2a 20 74 68 61 74 20 69 73 20  file.** that is 
25d90 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 61  used to store ta
25da0 62 6c 65 73 20 63 72 65 61 74 65 20 75 73 69 6e  bles create usin
25db0 67 20 43 52 45 41 54 45 20 54 45 4d 50 4f 52 41  g CREATE TEMPORA
25dc0 52 59 20 54 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a 20  RY TABLE..**.** 
25dd0 49 66 20 74 68 65 20 50 33 20 76 61 6c 75 65 20  If the P3 value 
25de0 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65  is non-zero, the
25df0 6e 20 74 68 65 20 74 61 62 6c 65 20 72 65 66 65  n the table refe
25e00 72 72 65 64 20 74 6f 20 6d 75 73 74 20 62 65 20  rred to must be 
25e10 61 6e 0a 2a 2a 20 69 6e 74 6b 65 79 20 74 61 62  an.** intkey tab
25e20 6c 65 20 28 61 6e 20 53 51 4c 20 74 61 62 6c 65  le (an SQL table
25e30 2c 20 6e 6f 74 20 61 6e 20 69 6e 64 65 78 29 2e  , not an index).
25e40 20 49 6e 20 74 68 69 73 20 63 61 73 65 20 74 68   In this case th
25e50 65 20 72 6f 77 20 63 68 61 6e 67 65 20 0a 2a 2a  e row change .**
25e60 20 63 6f 75 6e 74 20 69 73 20 69 6e 63 72 65 6d   count is increm
25e70 65 6e 74 65 64 20 62 79 20 74 68 65 20 6e 75 6d  ented by the num
25e80 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74  ber of rows in t
25e90 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 63  he table being c
25ea0 6c 65 61 72 65 64 2e 20 0a 2a 2a 20 49 66 20 50  leared. .** If P
25eb0 33 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61  3 is greater tha
25ec0 6e 20 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65  n zero, then the
25ed0 20 76 61 6c 75 65 20 73 74 6f 72 65 64 20 69 6e   value stored in
25ee0 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73 0a   register P3 is.
25ef0 2a 2a 20 61 6c 73 6f 20 69 6e 63 72 65 6d 65 6e  ** also incremen
25f00 74 65 64 20 62 79 20 74 68 65 20 6e 75 6d 62 65  ted by the numbe
25f10 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68 65  r of rows in the
25f20 20 74 61 62 6c 65 20 62 65 69 6e 67 20 63 6c 65   table being cle
25f30 61 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  ared..**.** See 
25f40 61 6c 73 6f 3a 20 44 65 73 74 72 6f 79 0a 2a 2f  also: Destroy.*/
25f50 0a 63 61 73 65 20 4f 50 5f 43 6c 65 61 72 3a 20  .case OP_Clear: 
25f60 7b 0a 20 20 69 6e 74 20 6e 43 68 61 6e 67 65 3b  {.  int nChange;
25f70 0a 20 0a 20 20 6e 43 68 61 6e 67 65 20 3d 20 30  . .  nChange = 0
25f80 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e  ;.  assert( (p->
25f90 62 74 72 65 65 4d 61 73 6b 20 26 20 28 28 28 79  btreeMask & (((y
25fa0 44 62 4d 61 73 6b 29 31 29 3c 3c 70 4f 70 2d 3e  DbMask)1)<<pOp->
25fb0 70 32 29 29 21 3d 30 20 29 3b 0a 20 20 72 63 20  p2))!=0 );.  rc 
25fc0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 6c  = sqlite3BtreeCl
25fd0 65 61 72 54 61 62 6c 65 28 0a 20 20 20 20 20 20  earTable(.      
25fe0 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 32 5d  db->aDb[pOp->p2]
25ff0 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 31 2c 20 28  .pBt, pOp->p1, (
26000 70 4f 70 2d 3e 70 33 20 3f 20 26 6e 43 68 61 6e  pOp->p3 ? &nChan
26010 67 65 20 3a 20 30 29 0a 20 20 29 3b 0a 20 20 69  ge : 0).  );.  i
26020 66 28 20 70 4f 70 2d 3e 70 33 20 29 7b 0a 20 20  f( pOp->p3 ){.  
26030 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20 2b 3d 20    p->nChange += 
26040 6e 43 68 61 6e 67 65 3b 0a 20 20 20 20 69 66 28  nChange;.    if(
26050 20 70 4f 70 2d 3e 70 33 3e 30 20 29 7b 0a 20 20   pOp->p3>0 ){.  
26060 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
26070 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70  sValid(&aMem[pOp
26080 2d 3e 70 33 5d 29 20 29 3b 0a 20 20 20 20 20 20  ->p3]) );.      
26090 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
260a0 28 70 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  (p, &aMem[pOp->p
260b0 33 5d 29 3b 0a 20 20 20 20 20 20 61 4d 65 6d 5b  3]);.      aMem[
260c0 70 4f 70 2d 3e 70 33 5d 2e 75 2e 69 20 2b 3d 20  pOp->p3].u.i += 
260d0 6e 43 68 61 6e 67 65 3b 0a 20 20 20 20 7d 0a 20  nChange;.    }. 
260e0 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
260f0 2a 20 4f 70 63 6f 64 65 3a 20 43 72 65 61 74 65  * Opcode: Create
26100 54 61 62 6c 65 20 50 31 20 50 32 20 2a 20 2a 20  Table P1 P2 * * 
26110 2a 0a 2a 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65  *.**.** Allocate
26120 20 61 20 6e 65 77 20 74 61 62 6c 65 20 69 6e 20   a new table in 
26130 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
26140 65 20 66 69 6c 65 20 69 66 20 50 31 3d 3d 30 20  e file if P1==0 
26150 6f 72 20 69 6e 20 74 68 65 0a 2a 2a 20 61 75 78  or in the.** aux
26160 69 6c 69 61 72 79 20 64 61 74 61 62 61 73 65 20  iliary database 
26170 66 69 6c 65 20 69 66 20 50 31 3d 3d 31 20 6f 72  file if P1==1 or
26180 20 69 6e 20 61 6e 20 61 74 74 61 63 68 65 64 20   in an attached 
26190 64 61 74 61 62 61 73 65 20 69 66 0a 2a 2a 20 50  database if.** P
261a0 31 3e 31 2e 20 20 57 72 69 74 65 20 74 68 65 20  1>1.  Write the 
261b0 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72  root page number
261c0 20 6f 66 20 74 68 65 20 6e 65 77 20 74 61 62 6c   of the new tabl
261d0 65 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74  e into.** regist
261e0 65 72 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 65 20  er P2.**.** The 
261f0 64 69 66 66 65 72 65 6e 63 65 20 62 65 74 77 65  difference betwe
26200 65 6e 20 61 20 74 61 62 6c 65 20 61 6e 64 20 61  en a table and a
26210 6e 20 69 6e 64 65 78 20 69 73 20 74 68 69 73 3a  n index is this:
26220 20 20 41 20 74 61 62 6c 65 20 6d 75 73 74 0a 2a    A table must.*
26230 2a 20 68 61 76 65 20 61 20 34 2d 62 79 74 65 20  * have a 4-byte 
26240 69 6e 74 65 67 65 72 20 6b 65 79 20 61 6e 64 20  integer key and 
26250 63 61 6e 20 68 61 76 65 20 61 72 62 69 74 72 61  can have arbitra
26260 72 79 20 64 61 74 61 2e 20 20 41 6e 20 69 6e 64  ry data.  An ind
26270 65 78 0a 2a 2a 20 68 61 73 20 61 6e 20 61 72 62  ex.** has an arb
26280 69 74 72 61 72 79 20 6b 65 79 20 62 75 74 20 6e  itrary key but n
26290 6f 20 64 61 74 61 2e 0a 2a 2a 0a 2a 2a 20 53 65  o data..**.** Se
262a0 65 20 61 6c 73 6f 3a 20 43 72 65 61 74 65 49 6e  e also: CreateIn
262b0 64 65 78 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  dex.*/./* Opcode
262c0 3a 20 43 72 65 61 74 65 49 6e 64 65 78 20 50 31  : CreateIndex P1
262d0 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
262e0 41 6c 6c 6f 63 61 74 65 20 61 20 6e 65 77 20 69  Allocate a new i
262f0 6e 64 65 78 20 69 6e 20 74 68 65 20 6d 61 69 6e  ndex in the main
26300 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69   database file i
26310 66 20 50 31 3d 3d 30 20 6f 72 20 69 6e 20 74 68  f P1==0 or in th
26320 65 0a 2a 2a 20 61 75 78 69 6c 69 61 72 79 20 64  e.** auxiliary d
26330 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66 20  atabase file if 
26340 50 31 3d 3d 31 20 6f 72 20 69 6e 20 61 6e 20 61  P1==1 or in an a
26350 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65  ttached database
26360 20 69 66 0a 2a 2a 20 50 31 3e 31 2e 20 20 57 72   if.** P1>1.  Wr
26370 69 74 65 20 74 68 65 20 72 6f 6f 74 20 70 61 67  ite the root pag
26380 65 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20  e number of the 
26390 6e 65 77 20 74 61 62 6c 65 20 69 6e 74 6f 0a 2a  new table into.*
263a0 2a 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  * register P2..*
263b0 2a 0a 2a 2a 20 53 65 65 20 64 6f 63 75 6d 65 6e  *.** See documen
263c0 74 61 74 69 6f 6e 20 6f 6e 20 4f 50 5f 43 72 65  tation on OP_Cre
263d0 61 74 65 54 61 62 6c 65 20 66 6f 72 20 61 64 64  ateTable for add
263e0 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74  itional informat
263f0 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ion..*/.case OP_
26400 43 72 65 61 74 65 49 6e 64 65 78 3a 20 20 20 20  CreateIndex:    
26410 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d          /* out2-
26420 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 63 61  prerelease */.ca
26430 73 65 20 4f 50 5f 43 72 65 61 74 65 54 61 62 6c  se OP_CreateTabl
26440 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20 2f 2a  e: {          /*
26450 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65   out2-prerelease
26460 20 2a 2f 0a 20 20 69 6e 74 20 70 67 6e 6f 3b 0a   */.  int pgno;.
26470 20 20 69 6e 74 20 66 6c 61 67 73 3b 0a 20 20 44    int flags;.  D
26480 62 20 2a 70 44 62 3b 0a 0a 20 20 70 67 6e 6f 20  b *pDb;..  pgno 
26490 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70  = 0;.  assert( p
264a0 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
264b0 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a  ->p1<db->nDb );.
264c0 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74    assert( (p->bt
264d0 72 65 65 4d 61 73 6b 20 26 20 28 28 28 79 44 62  reeMask & (((yDb
264e0 4d 61 73 6b 29 31 29 3c 3c 70 4f 70 2d 3e 70 31  Mask)1)<<pOp->p1
264f0 29 29 21 3d 30 20 29 3b 0a 20 20 70 44 62 20 3d  ))!=0 );.  pDb =
26500 20 26 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70   &db->aDb[pOp->p
26510 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 44  1];.  assert( pD
26520 62 2d 3e 70 42 74 21 3d 30 20 29 3b 0a 20 20 69  b->pBt!=0 );.  i
26530 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  f( pOp->opcode==
26540 4f 50 5f 43 72 65 61 74 65 54 61 62 6c 65 20 29  OP_CreateTable )
26550 7b 0a 20 20 20 20 2f 2a 20 66 6c 61 67 73 20 3d  {.    /* flags =
26560 20 42 54 52 45 45 5f 49 4e 54 4b 45 59 3b 20 2a   BTREE_INTKEY; *
26570 2f 0a 20 20 20 20 66 6c 61 67 73 20 3d 20 42 54  /.    flags = BT
26580 52 45 45 5f 49 4e 54 4b 45 59 3b 0a 20 20 7d 65  REE_INTKEY;.  }e
26590 6c 73 65 7b 0a 20 20 20 20 66 6c 61 67 73 20 3d  lse{.    flags =
265a0 20 42 54 52 45 45 5f 42 4c 4f 42 4b 45 59 3b 0a   BTREE_BLOBKEY;.
265b0 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74    }.  rc = sqlit
265c0 65 33 42 74 72 65 65 43 72 65 61 74 65 54 61 62  e3BtreeCreateTab
265d0 6c 65 28 70 44 62 2d 3e 70 42 74 2c 20 26 70 67  le(pDb->pBt, &pg
265e0 6e 6f 2c 20 66 6c 61 67 73 29 3b 0a 20 20 70 4f  no, flags);.  pO
265f0 75 74 2d 3e 75 2e 69 20 3d 20 70 67 6e 6f 3b 0a  ut->u.i = pgno;.
26600 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
26610 70 63 6f 64 65 3a 20 50 61 72 73 65 53 63 68 65  pcode: ParseSche
26620 6d 61 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a  ma P1 * * P4 *.*
26630 2a 0a 2a 2a 20 52 65 61 64 20 61 6e 64 20 70 61  *.** Read and pa
26640 72 73 65 20 61 6c 6c 20 65 6e 74 72 69 65 73 20  rse all entries 
26650 66 72 6f 6d 20 74 68 65 20 53 51 4c 49 54 45 5f  from the SQLITE_
26660 4d 41 53 54 45 52 20 74 61 62 6c 65 20 6f 66 20  MASTER table of 
26670 64 61 74 61 62 61 73 65 20 50 31 0a 2a 2a 20 74  database P1.** t
26680 68 61 74 20 6d 61 74 63 68 20 74 68 65 20 57 48  hat match the WH
26690 45 52 45 20 63 6c 61 75 73 65 20 50 34 2e 20 0a  ERE clause P4. .
266a0 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
266b0 65 20 69 6e 76 6f 6b 65 73 20 74 68 65 20 70 61  e invokes the pa
266c0 72 73 65 72 20 74 6f 20 63 72 65 61 74 65 20 61  rser to create a
266d0 20 6e 65 77 20 76 69 72 74 75 61 6c 20 6d 61 63   new virtual mac
266e0 68 69 6e 65 2c 0a 2a 2a 20 74 68 65 6e 20 72 75  hine,.** then ru
266f0 6e 73 20 74 68 65 20 6e 65 77 20 76 69 72 74 75  ns the new virtu
26700 61 6c 20 6d 61 63 68 69 6e 65 2e 20 20 49 74 20  al machine.  It 
26710 69 73 20 74 68 75 73 20 61 20 72 65 2d 65 6e 74  is thus a re-ent
26720 72 61 6e 74 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a  rant opcode..*/.
26730 63 61 73 65 20 4f 50 5f 50 61 72 73 65 53 63 68  case OP_ParseSch
26740 65 6d 61 3a 20 7b 0a 20 20 69 6e 74 20 69 44 62  ema: {.  int iDb
26750 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  ;.  const char *
26760 7a 4d 61 73 74 65 72 3b 0a 20 20 63 68 61 72 20  zMaster;.  char 
26770 2a 7a 53 71 6c 3b 0a 20 20 49 6e 69 74 44 61 74  *zSql;.  InitDat
26780 61 20 69 6e 69 74 44 61 74 61 3b 0a 0a 20 20 2f  a initData;..  /
26790 2a 20 41 6e 79 20 70 72 65 70 61 72 65 64 20 73  * Any prepared s
267a0 74 61 74 65 6d 65 6e 74 20 74 68 61 74 20 69 6e  tatement that in
267b0 76 6f 6b 65 73 20 74 68 69 73 20 6f 70 63 6f 64  vokes this opcod
267c0 65 20 77 69 6c 6c 20 68 6f 6c 64 20 6d 75 74 65  e will hold mute
267d0 78 65 73 0a 20 20 2a 2a 20 6f 6e 20 65 76 65 72  xes.  ** on ever
267e0 79 20 62 74 72 65 65 2e 20 20 54 68 69 73 20 69  y btree.  This i
267f0 73 20 61 20 70 72 65 72 65 71 75 69 73 69 74 65  s a prerequisite
26800 20 66 6f 72 20 69 6e 76 6f 6b 69 6e 67 20 0a 20   for invoking . 
26810 20 2a 2a 20 73 71 6c 69 74 65 33 49 6e 69 74 43   ** sqlite3InitC
26820 61 6c 6c 62 61 63 6b 28 29 2e 0a 20 20 2a 2f 0a  allback()..  */.
26830 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
26840 42 55 47 0a 20 20 66 6f 72 28 69 44 62 3d 30 3b  BUG.  for(iDb=0;
26850 20 69 44 62 3c 64 62 2d 3e 6e 44 62 3b 20 69 44   iDb<db->nDb; iD
26860 62 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72 74  b++){.    assert
26870 28 20 69 44 62 3d 3d 31 20 7c 7c 20 73 71 6c 69  ( iDb==1 || sqli
26880 74 65 33 42 74 72 65 65 48 6f 6c 64 73 4d 75 74  te3BtreeHoldsMut
26890 65 78 28 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e  ex(db->aDb[iDb].
268a0 70 42 74 29 20 29 3b 0a 20 20 7d 0a 23 65 6e 64  pBt) );.  }.#end
268b0 69 66 0a 0a 20 20 69 44 62 20 3d 20 70 4f 70 2d  if..  iDb = pOp-
268c0 3e 70 31 3b 0a 20 20 61 73 73 65 72 74 28 20 69  >p1;.  assert( i
268d0 44 62 3e 3d 30 20 26 26 20 69 44 62 3c 64 62 2d  Db>=0 && iDb<db-
268e0 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74  >nDb );.  assert
268f0 28 20 44 62 48 61 73 50 72 6f 70 65 72 74 79 28  ( DbHasProperty(
26900 64 62 2c 20 69 44 62 2c 20 44 42 5f 53 63 68 65  db, iDb, DB_Sche
26910 6d 61 4c 6f 61 64 65 64 29 20 29 3b 0a 20 20 2f  maLoaded) );.  /
26920 2a 20 55 73 65 64 20 74 6f 20 62 65 20 61 20 63  * Used to be a c
26930 6f 6e 64 69 74 69 6f 6e 61 6c 20 2a 2f 20 7b 0a  onditional */ {.
26940 20 20 20 20 7a 4d 61 73 74 65 72 20 3d 20 53 43      zMaster = SC
26950 48 45 4d 41 5f 54 41 42 4c 45 28 69 44 62 29 3b  HEMA_TABLE(iDb);
26960 0a 20 20 20 20 69 6e 69 74 44 61 74 61 2e 64 62  .    initData.db
26970 20 3d 20 64 62 3b 0a 20 20 20 20 69 6e 69 74 44   = db;.    initD
26980 61 74 61 2e 69 44 62 20 3d 20 70 4f 70 2d 3e 70  ata.iDb = pOp->p
26990 31 3b 0a 20 20 20 20 69 6e 69 74 44 61 74 61 2e  1;.    initData.
269a0 70 7a 45 72 72 4d 73 67 20 3d 20 26 70 2d 3e 7a  pzErrMsg = &p->z
269b0 45 72 72 4d 73 67 3b 0a 20 20 20 20 7a 53 71 6c  ErrMsg;.    zSql
269c0 20 3d 20 73 71 6c 69 74 65 33 4d 50 72 69 6e 74   = sqlite3MPrint
269d0 66 28 64 62 2c 0a 20 20 20 20 20 20 20 22 53 45  f(db,.       "SE
269e0 4c 45 43 54 20 6e 61 6d 65 2c 20 72 6f 6f 74 70  LECT name, rootp
269f0 61 67 65 2c 20 73 71 6c 20 46 52 4f 4d 20 27 25  age, sql FROM '%
26a00 71 27 2e 25 73 20 57 48 45 52 45 20 25 73 20 4f  q'.%s WHERE %s O
26a10 52 44 45 52 20 42 59 20 72 6f 77 69 64 22 2c 0a  RDER BY rowid",.
26a20 20 20 20 20 20 20 20 64 62 2d 3e 61 44 62 5b 69         db->aDb[i
26a30 44 62 5d 2e 7a 4e 61 6d 65 2c 20 7a 4d 61 73 74  Db].zName, zMast
26a40 65 72 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a  er, pOp->p4.z);.
26a50 20 20 20 20 69 66 28 20 7a 53 71 6c 3d 3d 30 20      if( zSql==0 
26a60 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51  ){.      rc = SQ
26a70 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 20 20  LITE_NOMEM;.    
26a80 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 61 73 73  }else{.      ass
26a90 65 72 74 28 20 64 62 2d 3e 69 6e 69 74 2e 62 75  ert( db->init.bu
26aa0 73 79 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 64  sy==0 );.      d
26ab0 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20 3d 20 31  b->init.busy = 1
26ac0 3b 0a 20 20 20 20 20 20 69 6e 69 74 44 61 74 61  ;.      initData
26ad0 2e 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b  .rc = SQLITE_OK;
26ae0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 21  .      assert( !
26af0 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64  db->mallocFailed
26b00 20 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73   );.      rc = s
26b10 71 6c 69 74 65 33 5f 65 78 65 63 28 64 62 2c 20  qlite3_exec(db, 
26b20 7a 53 71 6c 2c 20 73 71 6c 69 74 65 33 49 6e 69  zSql, sqlite3Ini
26b30 74 43 61 6c 6c 62 61 63 6b 2c 20 26 69 6e 69 74  tCallback, &init
26b40 44 61 74 61 2c 20 30 29 3b 0a 20 20 20 20 20 20  Data, 0);.      
26b50 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
26b60 4b 20 29 20 72 63 20 3d 20 69 6e 69 74 44 61 74  K ) rc = initDat
26b70 61 2e 72 63 3b 0a 20 20 20 20 20 20 73 71 6c 69  a.rc;.      sqli
26b80 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 7a 53  te3DbFree(db, zS
26b90 71 6c 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 69  ql);.      db->i
26ba0 6e 69 74 2e 62 75 73 79 20 3d 20 30 3b 0a 20 20  nit.busy = 0;.  
26bb0 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 72 63    }.  }.  if( rc
26bc0 3d 3d 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 29  ==SQLITE_NOMEM )
26bd0 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65  {.    goto no_me
26be0 6d 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 20  m;.  }.  break; 
26bf0 20 0a 7d 0a 0a 23 69 66 20 21 64 65 66 69 6e 65   .}..#if !define
26c00 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4e  d(SQLITE_OMIT_AN
26c10 41 4c 59 5a 45 29 0a 2f 2a 20 4f 70 63 6f 64 65  ALYZE)./* Opcode
26c20 3a 20 4c 6f 61 64 41 6e 61 6c 79 73 69 73 20 50  : LoadAnalysis P
26c30 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  1 * * * *.**.** 
26c40 52 65 61 64 20 74 68 65 20 73 71 6c 69 74 65 5f  Read the sqlite_
26c50 73 74 61 74 31 20 74 61 62 6c 65 20 66 6f 72 20  stat1 table for 
26c60 64 61 74 61 62 61 73 65 20 50 31 20 61 6e 64 20  database P1 and 
26c70 6c 6f 61 64 20 74 68 65 20 63 6f 6e 74 65 6e 74  load the content
26c80 0a 2a 2a 20 6f 66 20 74 68 61 74 20 74 61 62 6c  .** of that tabl
26c90 65 20 69 6e 74 6f 20 74 68 65 20 69 6e 74 65 72  e into the inter
26ca0 6e 61 6c 20 69 6e 64 65 78 20 68 61 73 68 20 74  nal index hash t
26cb0 61 62 6c 65 2e 20 20 54 68 69 73 20 77 69 6c 6c  able.  This will
26cc0 20 63 61 75 73 65 0a 2a 2a 20 74 68 65 20 61 6e   cause.** the an
26cd0 61 6c 79 73 69 73 20 74 6f 20 62 65 20 75 73 65  alysis to be use
26ce0 64 20 77 68 65 6e 20 70 72 65 70 61 72 69 6e 67  d when preparing
26cf0 20 61 6c 6c 20 73 75 62 73 65 71 75 65 6e 74 20   all subsequent 
26d00 71 75 65 72 69 65 73 2e 0a 2a 2f 0a 63 61 73 65  queries..*/.case
26d10 20 4f 50 5f 4c 6f 61 64 41 6e 61 6c 79 73 69 73   OP_LoadAnalysis
26d20 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  : {.  assert( pO
26d30 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
26d40 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20  >p1<db->nDb );. 
26d50 20 72 63 20 3d 20 73 71 6c 69 74 65 33 41 6e 61   rc = sqlite3Ana
26d60 6c 79 73 69 73 4c 6f 61 64 28 64 62 2c 20 70 4f  lysisLoad(db, pO
26d70 70 2d 3e 70 31 29 3b 0a 20 20 62 72 65 61 6b 3b  p->p1);.  break;
26d80 20 20 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 21    .}.#endif /* !
26d90 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
26da0 4d 49 54 5f 41 4e 41 4c 59 5a 45 29 20 2a 2f 0a  MIT_ANALYZE) */.
26db0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70  ./* Opcode: Drop
26dc0 54 61 62 6c 65 20 50 31 20 2a 20 2a 20 50 34 20  Table P1 * * P4 
26dd0 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74  *.**.** Remove t
26de0 68 65 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d  he internal (in-
26df0 6d 65 6d 6f 72 79 29 20 64 61 74 61 20 73 74 72  memory) data str
26e00 75 63 74 75 72 65 73 20 74 68 61 74 20 64 65 73  uctures that des
26e10 63 72 69 62 65 0a 2a 2a 20 74 68 65 20 74 61 62  cribe.** the tab
26e20 6c 65 20 6e 61 6d 65 64 20 50 34 20 69 6e 20 64  le named P4 in d
26e30 61 74 61 62 61 73 65 20 50 31 2e 20 20 54 68 69  atabase P1.  Thi
26e40 73 20 69 73 20 63 61 6c 6c 65 64 20 61 66 74 65  s is called afte
26e50 72 20 61 20 74 61 62 6c 65 0a 2a 2a 20 69 73 20  r a table.** is 
26e60 64 72 6f 70 70 65 64 20 69 6e 20 6f 72 64 65 72  dropped in order
26e70 20 74 6f 20 6b 65 65 70 20 74 68 65 20 69 6e 74   to keep the int
26e80 65 72 6e 61 6c 20 72 65 70 72 65 73 65 6e 74 61  ernal representa
26e90 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73  tion of the.** s
26ea0 63 68 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74  chema consistent
26eb0 20 77 69 74 68 20 77 68 61 74 20 69 73 20 6f 6e   with what is on
26ec0 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f   disk..*/.case O
26ed0 50 5f 44 72 6f 70 54 61 62 6c 65 3a 20 7b 0a 20  P_DropTable: {. 
26ee0 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e   sqlite3UnlinkAn
26ef0 64 44 65 6c 65 74 65 54 61 62 6c 65 28 64 62 2c  dDeleteTable(db,
26f00 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70   pOp->p1, pOp->p
26f10 34 2e 7a 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  4.z);.  break;.}
26f20 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f  ../* Opcode: Dro
26f30 70 49 6e 64 65 78 20 50 31 20 2a 20 2a 20 50 34  pIndex P1 * * P4
26f40 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20   *.**.** Remove 
26f50 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e  the internal (in
26f60 2d 6d 65 6d 6f 72 79 29 20 64 61 74 61 20 73 74  -memory) data st
26f70 72 75 63 74 75 72 65 73 20 74 68 61 74 20 64 65  ructures that de
26f80 73 63 72 69 62 65 0a 2a 2a 20 74 68 65 20 69 6e  scribe.** the in
26f90 64 65 78 20 6e 61 6d 65 64 20 50 34 20 69 6e 20  dex named P4 in 
26fa0 64 61 74 61 62 61 73 65 20 50 31 2e 20 20 54 68  database P1.  Th
26fb0 69 73 20 69 73 20 63 61 6c 6c 65 64 20 61 66 74  is is called aft
26fc0 65 72 20 61 6e 20 69 6e 64 65 78 0a 2a 2a 20 69  er an index.** i
26fd0 73 20 64 72 6f 70 70 65 64 20 69 6e 20 6f 72 64  s dropped in ord
26fe0 65 72 20 74 6f 20 6b 65 65 70 20 74 68 65 20 69  er to keep the i
26ff0 6e 74 65 72 6e 61 6c 20 72 65 70 72 65 73 65 6e  nternal represen
27000 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a  tation of the.**
27010 20 73 63 68 65 6d 61 20 63 6f 6e 73 69 73 74 65   schema consiste
27020 6e 74 20 77 69 74 68 20 77 68 61 74 20 69 73 20  nt with what is 
27030 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65  on disk..*/.case
27040 20 4f 50 5f 44 72 6f 70 49 6e 64 65 78 3a 20 7b   OP_DropIndex: {
27050 0a 20 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b  .  sqlite3Unlink
27060 41 6e 64 44 65 6c 65 74 65 49 6e 64 65 78 28 64  AndDeleteIndex(d
27070 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d  b, pOp->p1, pOp-
27080 3e 70 34 2e 7a 29 3b 0a 20 20 62 72 65 61 6b 3b  >p4.z);.  break;
27090 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44  .}../* Opcode: D
270a0 72 6f 70 54 72 69 67 67 65 72 20 50 31 20 2a 20  ropTrigger P1 * 
270b0 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d  * P4 *.**.** Rem
270c0 6f 76 65 20 74 68 65 20 69 6e 74 65 72 6e 61 6c  ove the internal
270d0 20 28 69 6e 2d 6d 65 6d 6f 72 79 29 20 64 61 74   (in-memory) dat
270e0 61 20 73 74 72 75 63 74 75 72 65 73 20 74 68 61  a structures tha
270f0 74 20 64 65 73 63 72 69 62 65 0a 2a 2a 20 74 68  t describe.** th
27100 65 20 74 72 69 67 67 65 72 20 6e 61 6d 65 64 20  e trigger named 
27110 50 34 20 69 6e 20 64 61 74 61 62 61 73 65 20 50  P4 in database P
27120 31 2e 20 20 54 68 69 73 20 69 73 20 63 61 6c 6c  1.  This is call
27130 65 64 20 61 66 74 65 72 20 61 20 74 72 69 67 67  ed after a trigg
27140 65 72 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65 64  er.** is dropped
27150 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65   in order to kee
27160 70 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 72  p the internal r
27170 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66  epresentation of
27180 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 63   the.** schema c
27190 6f 6e 73 69 73 74 65 6e 74 20 77 69 74 68 20 77  onsistent with w
271a0 68 61 74 20 69 73 20 6f 6e 20 64 69 73 6b 2e 0a  hat is on disk..
271b0 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 72 6f 70 54  */.case OP_DropT
271c0 72 69 67 67 65 72 3a 20 7b 0a 20 20 73 71 6c 69  rigger: {.  sqli
271d0 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65  te3UnlinkAndDele
271e0 74 65 54 72 69 67 67 65 72 28 64 62 2c 20 70 4f  teTrigger(db, pO
271f0 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a  p->p1, pOp->p4.z
27200 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a  );.  break;.}...
27210 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
27220 4d 49 54 5f 49 4e 54 45 47 52 49 54 59 5f 43 48  MIT_INTEGRITY_CH
27230 45 43 4b 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  ECK./* Opcode: I
27240 6e 74 65 67 72 69 74 79 43 6b 20 50 31 20 50 32  ntegrityCk P1 P2
27250 20 50 33 20 2a 20 50 35 0a 2a 2a 0a 2a 2a 20 44   P3 * P5.**.** D
27260 6f 20 61 6e 20 61 6e 61 6c 79 73 69 73 20 6f 66  o an analysis of
27270 20 74 68 65 20 63 75 72 72 65 6e 74 6c 79 20 6f   the currently o
27280 70 65 6e 20 64 61 74 61 62 61 73 65 2e 20 20 53  pen database.  S
27290 74 6f 72 65 20 69 6e 0a 2a 2a 20 72 65 67 69 73  tore in.** regis
272a0 74 65 72 20 50 31 20 74 68 65 20 74 65 78 74 20  ter P1 the text 
272b0 6f 66 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73  of an error mess
272c0 61 67 65 20 64 65 73 63 72 69 62 69 6e 67 20 61  age describing a
272d0 6e 79 20 70 72 6f 62 6c 65 6d 73 2e 0a 2a 2a 20  ny problems..** 
272e0 49 66 20 6e 6f 20 70 72 6f 62 6c 65 6d 73 20 61  If no problems a
272f0 72 65 20 66 6f 75 6e 64 2c 20 73 74 6f 72 65 20  re found, store 
27300 61 20 4e 55 4c 4c 20 69 6e 20 72 65 67 69 73 74  a NULL in regist
27310 65 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  er P1..**.** The
27320 20 72 65 67 69 73 74 65 72 20 50 33 20 63 6f 6e   register P3 con
27330 74 61 69 6e 73 20 74 68 65 20 6d 61 78 69 6d 75  tains the maximu
27340 6d 20 6e 75 6d 62 65 72 20 6f 66 20 61 6c 6c 6f  m number of allo
27350 77 65 64 20 65 72 72 6f 72 73 2e 0a 2a 2a 20 41  wed errors..** A
27360 74 20 6d 6f 73 74 20 72 65 67 28 50 33 29 20 65  t most reg(P3) e
27370 72 72 6f 72 73 20 77 69 6c 6c 20 62 65 20 72 65  rrors will be re
27380 70 6f 72 74 65 64 2e 0a 2a 2a 20 49 6e 20 6f 74  ported..** In ot
27390 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 61  her words, the a
273a0 6e 61 6c 79 73 69 73 20 73 74 6f 70 73 20 61 73  nalysis stops as
273b0 20 73 6f 6f 6e 20 61 73 20 72 65 67 28 50 31 29   soon as reg(P1)
273c0 20 65 72 72 6f 72 73 20 61 72 65 20 0a 2a 2a 20   errors are .** 
273d0 73 65 65 6e 2e 20 20 52 65 67 28 50 31 29 20 69  seen.  Reg(P1) i
273e0 73 20 75 70 64 61 74 65 64 20 77 69 74 68 20 74  s updated with t
273f0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 65 72 72  he number of err
27400 6f 72 73 20 72 65 6d 61 69 6e 69 6e 67 2e 0a 2a  ors remaining..*
27410 2a 0a 2a 2a 20 54 68 65 20 72 6f 6f 74 20 70 61  *.** The root pa
27420 67 65 20 6e 75 6d 62 65 72 73 20 6f 66 20 61 6c  ge numbers of al
27430 6c 20 74 61 62 6c 65 73 20 69 6e 20 74 68 65 20  l tables in the 
27440 64 61 74 61 62 61 73 65 20 61 72 65 20 69 6e 74  database are int
27450 65 67 65 72 0a 2a 2a 20 73 74 6f 72 65 64 20 69  eger.** stored i
27460 6e 20 72 65 67 28 50 31 29 2c 20 72 65 67 28 50  n reg(P1), reg(P
27470 31 2b 31 29 2c 20 72 65 67 28 50 31 2b 32 29 2c  1+1), reg(P1+2),
27480 20 2e 2e 2e 2e 20 20 54 68 65 72 65 20 61 72 65   ....  There are
27490 20 50 32 20 74 61 62 6c 65 73 0a 2a 2a 20 74 6f   P2 tables.** to
274a0 74 61 6c 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35  tal..**.** If P5
274b0 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68   is not zero, th
274c0 65 20 63 68 65 63 6b 20 69 73 20 64 6f 6e 65 20  e check is done 
274d0 6f 6e 20 74 68 65 20 61 75 78 69 6c 69 61 72 79  on the auxiliary
274e0 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 66 69 6c   database.** fil
274f0 65 2c 20 6e 6f 74 20 74 68 65 20 6d 61 69 6e 20  e, not the main 
27500 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a  database file..*
27510 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
27520 20 69 73 20 75 73 65 64 20 74 6f 20 69 6d 70 6c   is used to impl
27530 65 6d 65 6e 74 20 74 68 65 20 69 6e 74 65 67 72  ement the integr
27540 69 74 79 5f 63 68 65 63 6b 20 70 72 61 67 6d 61  ity_check pragma
27550 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74  ..*/.case OP_Int
27560 65 67 72 69 74 79 43 6b 3a 20 7b 0a 20 20 69 6e  egrityCk: {.  in
27570 74 20 6e 52 6f 6f 74 3b 20 20 20 20 20 20 2f 2a  t nRoot;      /*
27580 20 4e 75 6d 62 65 72 20 6f 66 20 74 61 62 6c 65   Number of table
27590 73 20 74 6f 20 63 68 65 63 6b 2e 20 20 28 4e 75  s to check.  (Nu
275a0 6d 62 65 72 20 6f 66 20 72 6f 6f 74 20 70 61 67  mber of root pag
275b0 65 73 2e 29 20 2a 2f 0a 20 20 69 6e 74 20 2a 61  es.) */.  int *a
275c0 52 6f 6f 74 3b 20 20 20 20 20 2f 2a 20 41 72 72  Root;     /* Arr
275d0 61 79 20 6f 66 20 72 6f 6f 74 70 61 67 65 20 6e  ay of rootpage n
275e0 75 6d 62 65 72 73 20 66 6f 72 20 74 61 62 6c 65  umbers for table
275f0 73 20 74 6f 20 62 65 20 63 68 65 63 6b 65 64 20  s to be checked 
27600 2a 2f 0a 20 20 69 6e 74 20 6a 3b 20 20 20 20 20  */.  int j;     
27610 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75       /* Loop cou
27620 6e 74 65 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 45  nter */.  int nE
27630 72 72 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  rr;       /* Num
27640 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20 72 65  ber of errors re
27650 70 6f 72 74 65 64 20 2a 2f 0a 20 20 63 68 61 72  ported */.  char
27660 20 2a 7a 3b 20 20 20 20 20 20 20 20 2f 2a 20 54   *z;        /* T
27670 65 78 74 20 6f 66 20 74 68 65 20 65 72 72 6f 72  ext of the error
27680 20 72 65 70 6f 72 74 20 2a 2f 0a 20 20 4d 65 6d   report */.  Mem
27690 20 2a 70 6e 45 72 72 3b 20 20 20 20 20 2f 2a 20   *pnErr;     /* 
276a0 52 65 67 69 73 74 65 72 20 6b 65 65 70 69 6e 67  Register keeping
276b0 20 74 72 61 63 6b 20 6f 66 20 65 72 72 6f 72 73   track of errors
276c0 20 72 65 6d 61 69 6e 69 6e 67 20 2a 2f 0a 20 20   remaining */.  
276d0 0a 20 20 6e 52 6f 6f 74 20 3d 20 70 4f 70 2d 3e  .  nRoot = pOp->
276e0 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 52  p2;.  assert( nR
276f0 6f 6f 74 3e 30 20 29 3b 0a 20 20 61 52 6f 6f 74  oot>0 );.  aRoot
27700 20 3d 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c   = sqlite3DbMall
27710 6f 63 52 61 77 28 64 62 2c 20 73 69 7a 65 6f 66  ocRaw(db, sizeof
27720 28 69 6e 74 29 2a 28 6e 52 6f 6f 74 2b 31 29 20  (int)*(nRoot+1) 
27730 29 3b 0a 20 20 69 66 28 20 61 52 6f 6f 74 3d 3d  );.  if( aRoot==
27740 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  0 ) goto no_mem;
27750 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
27760 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c  p3>0 && pOp->p3<
27770 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 6e  =p->nMem );.  pn
27780 45 72 72 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Err = &aMem[pOp-
27790 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p3];.  assert( 
277a0 28 70 6e 45 72 72 2d 3e 66 6c 61 67 73 20 26 20  (pnErr->flags & 
277b0 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 0a 20  MEM_Int)!=0 );. 
277c0 20 61 73 73 65 72 74 28 20 28 70 6e 45 72 72 2d   assert( (pnErr-
277d0 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53 74  >flags & (MEM_St
277e0 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20  r|MEM_Blob))==0 
277f0 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  );.  pIn1 = &aMe
27800 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 66 6f  m[pOp->p1];.  fo
27810 72 28 6a 3d 30 3b 20 6a 3c 6e 52 6f 6f 74 3b 20  r(j=0; j<nRoot; 
27820 6a 2b 2b 29 7b 0a 20 20 20 20 61 52 6f 6f 74 5b  j++){.    aRoot[
27830 6a 5d 20 3d 20 28 69 6e 74 29 73 71 6c 69 74 65  j] = (int)sqlite
27840 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 26 70  3VdbeIntValue(&p
27850 49 6e 31 5b 6a 5d 29 3b 0a 20 20 7d 0a 20 20 61  In1[j]);.  }.  a
27860 52 6f 6f 74 5b 6a 5d 20 3d 20 30 3b 0a 20 20 61  Root[j] = 0;.  a
27870 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3c 64  ssert( pOp->p5<d
27880 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65  b->nDb );.  asse
27890 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73  rt( (p->btreeMas
278a0 6b 20 26 20 28 28 28 79 44 62 4d 61 73 6b 29 31  k & (((yDbMask)1
278b0 29 3c 3c 70 4f 70 2d 3e 70 35 29 29 21 3d 30 20  )<<pOp->p5))!=0 
278c0 29 3b 0a 20 20 7a 20 3d 20 73 71 6c 69 74 65 33  );.  z = sqlite3
278d0 42 74 72 65 65 49 6e 74 65 67 72 69 74 79 43 68  BtreeIntegrityCh
278e0 65 63 6b 28 64 62 2d 3e 61 44 62 5b 70 4f 70 2d  eck(db->aDb[pOp-
278f0 3e 70 35 5d 2e 70 42 74 2c 20 61 52 6f 6f 74 2c  >p5].pBt, aRoot,
27900 20 6e 52 6f 6f 74 2c 0a 20 20 20 20 20 20 20 20   nRoot,.        
27910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27920 20 20 20 20 20 20 20 20 20 28 69 6e 74 29 70 6e           (int)pn
27930 45 72 72 2d 3e 75 2e 69 2c 20 26 6e 45 72 72 29  Err->u.i, &nErr)
27940 3b 0a 20 20 73 71 6c 69 74 65 33 44 62 46 72 65  ;.  sqlite3DbFre
27950 65 28 64 62 2c 20 61 52 6f 6f 74 29 3b 0a 20 20  e(db, aRoot);.  
27960 70 6e 45 72 72 2d 3e 75 2e 69 20 2d 3d 20 6e 45  pnErr->u.i -= nE
27970 72 72 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  rr;.  sqlite3Vdb
27980 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 49 6e 31  eMemSetNull(pIn1
27990 29 3b 0a 20 20 69 66 28 20 6e 45 72 72 3d 3d 30  );.  if( nErr==0
279a0 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
279b0 7a 3d 3d 30 20 29 3b 0a 20 20 7d 65 6c 73 65 20  z==0 );.  }else 
279c0 69 66 28 20 7a 3d 3d 30 20 29 7b 0a 20 20 20 20  if( z==0 ){.    
279d0 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d  goto no_mem;.  }
279e0 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65  else{.    sqlite
279f0 33 56 64 62 65 4d 65 6d 53 65 74 53 74 72 28 70  3VdbeMemSetStr(p
27a00 49 6e 31 2c 20 7a 2c 20 2d 31 2c 20 53 51 4c 49  In1, z, -1, SQLI
27a10 54 45 5f 55 54 46 38 2c 20 73 71 6c 69 74 65 33  TE_UTF8, sqlite3
27a20 5f 66 72 65 65 29 3b 0a 20 20 7d 0a 20 20 55 50  _free);.  }.  UP
27a30 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
27a40 45 28 70 49 6e 31 29 3b 0a 20 20 73 71 6c 69 74  E(pIn1);.  sqlit
27a50 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f  e3VdbeChangeEnco
27a60 64 69 6e 67 28 70 49 6e 31 2c 20 65 6e 63 6f 64  ding(pIn1, encod
27a70 69 6e 67 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  ing);.  break;.}
27a80 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
27a90 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54 59  E_OMIT_INTEGRITY
27aa0 5f 43 48 45 43 4b 20 2a 2f 0a 0a 2f 2a 20 4f 70  _CHECK */../* Op
27ab0 63 6f 64 65 3a 20 52 6f 77 53 65 74 41 64 64 20  code: RowSetAdd 
27ac0 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
27ad0 2a 20 49 6e 73 65 72 74 20 74 68 65 20 69 6e 74  * Insert the int
27ae0 65 67 65 72 20 76 61 6c 75 65 20 68 65 6c 64 20  eger value held 
27af0 62 79 20 72 65 67 69 73 74 65 72 20 50 32 20 69  by register P2 i
27b00 6e 74 6f 20 61 20 62 6f 6f 6c 65 61 6e 20 69 6e  nto a boolean in
27b10 64 65 78 0a 2a 2a 20 68 65 6c 64 20 69 6e 20 72  dex.** held in r
27b20 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 0a 2a  egister P1..**.*
27b30 2a 20 41 6e 20 61 73 73 65 72 74 69 6f 6e 20 66  * An assertion f
27b40 61 69 6c 73 20 69 66 20 50 32 20 69 73 20 6e 6f  ails if P2 is no
27b50 74 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2f  t an integer..*/
27b60 0a 63 61 73 65 20 4f 50 5f 52 6f 77 53 65 74 41  .case OP_RowSetA
27b70 64 64 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20 69  dd: {       /* i
27b80 6e 31 2c 20 69 6e 32 20 2a 2f 0a 20 20 70 49 6e  n1, in2 */.  pIn
27b90 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
27ba0 31 5d 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d  1];.  pIn2 = &aM
27bb0 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61  em[pOp->p2];.  a
27bc0 73 73 65 72 74 28 20 28 70 49 6e 32 2d 3e 66 6c  ssert( (pIn2->fl
27bd0 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d  ags & MEM_Int)!=
27be0 30 20 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31  0 );.  if( (pIn1
27bf0 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f  ->flags & MEM_Ro
27c00 77 53 65 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20  wSet)==0 ){.    
27c10 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
27c20 74 52 6f 77 53 65 74 28 70 49 6e 31 29 3b 0a 20  tRowSet(pIn1);. 
27c30 20 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c     if( (pIn1->fl
27c40 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74  ags & MEM_RowSet
27c50 29 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  )==0 ) goto no_m
27c60 65 6d 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65  em;.  }.  sqlite
27c70 33 52 6f 77 53 65 74 49 6e 73 65 72 74 28 70 49  3RowSetInsert(pI
27c80 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20 70  n1->u.pRowSet, p
27c90 49 6e 32 2d 3e 75 2e 69 29 3b 0a 20 20 62 72 65  In2->u.i);.  bre
27ca0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
27cb0 3a 20 52 6f 77 53 65 74 52 65 61 64 20 50 31 20  : RowSetRead P1 
27cc0 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
27cd0 45 78 74 72 61 63 74 20 74 68 65 20 73 6d 61 6c  Extract the smal
27ce0 6c 65 73 74 20 76 61 6c 75 65 20 66 72 6f 6d 20  lest value from 
27cf0 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 20 50 31  boolean index P1
27d00 20 61 6e 64 20 70 75 74 20 74 68 61 74 20 76 61   and put that va
27d10 6c 75 65 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69  lue into.** regi
27d20 73 74 65 72 20 50 33 2e 20 20 4f 72 2c 20 69 66  ster P3.  Or, if
27d30 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 20 50   boolean index P
27d40 31 20 69 73 20 69 6e 69 74 69 61 6c 6c 79 20 65  1 is initially e
27d50 6d 70 74 79 2c 20 6c 65 61 76 65 20 50 33 0a 2a  mpty, leave P3.*
27d60 2a 20 75 6e 63 68 61 6e 67 65 64 20 61 6e 64 20  * unchanged and 
27d70 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74  jump to instruct
27d80 69 6f 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20  ion P2..*/.case 
27d90 4f 50 5f 52 6f 77 53 65 74 52 65 61 64 3a 20 7b  OP_RowSetRead: {
27da0 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
27db0 69 6e 31 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69  in1, out3 */.  i
27dc0 36 34 20 76 61 6c 3b 0a 20 20 43 48 45 43 4b 5f  64 val;.  CHECK_
27dd0 46 4f 52 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20  FOR_INTERRUPT;. 
27de0 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
27df0 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 28 70  p->p1];.  if( (p
27e00 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
27e10 5f 52 6f 77 53 65 74 29 3d 3d 30 20 0a 20 20 20  _RowSet)==0 .   
27e20 7c 7c 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74  || sqlite3RowSet
27e30 4e 65 78 74 28 70 49 6e 31 2d 3e 75 2e 70 52 6f  Next(pIn1->u.pRo
27e40 77 53 65 74 2c 20 26 76 61 6c 29 3d 3d 30 0a 20  wSet, &val)==0. 
27e50 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20 62   ){.    /* The b
27e60 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 20 69 73 20  oolean index is 
27e70 65 6d 70 74 79 20 2a 2f 0a 20 20 20 20 73 71 6c  empty */.    sql
27e80 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75  ite3VdbeMemSetNu
27e90 6c 6c 28 70 49 6e 31 29 3b 0a 20 20 20 20 70 63  ll(pIn1);.    pc
27ea0 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
27eb0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20    }else{.    /* 
27ec0 41 20 76 61 6c 75 65 20 77 61 73 20 70 75 6c 6c  A value was pull
27ed0 65 64 20 66 72 6f 6d 20 74 68 65 20 69 6e 64 65  ed from the inde
27ee0 78 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33  x */.    sqlite3
27ef0 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28  VdbeMemSetInt64(
27f00 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 2c 20  &aMem[pOp->p3], 
27f10 76 61 6c 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61  val);.  }.  brea
27f20 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
27f30 20 52 6f 77 53 65 74 54 65 73 74 20 50 31 20 50   RowSetTest P1 P
27f40 32 20 50 33 20 50 34 0a 2a 2a 0a 2a 2a 20 52 65  2 P3 P4.**.** Re
27f50 67 69 73 74 65 72 20 50 33 20 69 73 20 61 73 73  gister P3 is ass
27f60 75 6d 65 64 20 74 6f 20 68 6f 6c 64 20 61 20 36  umed to hold a 6
27f70 34 2d 62 69 74 20 69 6e 74 65 67 65 72 20 76 61  4-bit integer va
27f80 6c 75 65 2e 20 49 66 20 72 65 67 69 73 74 65 72  lue. If register
27f90 20 50 31 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20   P1.** contains 
27fa0 61 20 52 6f 77 53 65 74 20 6f 62 6a 65 63 74 20  a RowSet object 
27fb0 61 6e 64 20 74 68 61 74 20 52 6f 77 53 65 74 20  and that RowSet 
27fc0 6f 62 6a 65 63 74 20 63 6f 6e 74 61 69 6e 73 0a  object contains.
27fd0 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 68 65 6c  ** the value hel
27fe0 64 20 69 6e 20 50 33 2c 20 6a 75 6d 70 20 74 6f  d in P3, jump to
27ff0 20 72 65 67 69 73 74 65 72 20 50 32 2e 20 4f 74   register P2. Ot
28000 68 65 72 77 69 73 65 2c 20 69 6e 73 65 72 74 20  herwise, insert 
28010 74 68 65 0a 2a 2a 20 69 6e 74 65 67 65 72 20 69  the.** integer i
28020 6e 20 50 33 20 69 6e 74 6f 20 74 68 65 20 52 6f  n P3 into the Ro
28030 77 53 65 74 20 61 6e 64 20 63 6f 6e 74 69 6e 75  wSet and continu
28040 65 20 6f 6e 20 74 6f 20 74 68 65 0a 2a 2a 20 6e  e on to the.** n
28050 65 78 74 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a  ext opcode..**.*
28060 2a 20 54 68 65 20 52 6f 77 53 65 74 20 6f 62 6a  * The RowSet obj
28070 65 63 74 20 69 73 20 6f 70 74 69 6d 69 7a 65 64  ect is optimized
28080 20 66 6f 72 20 74 68 65 20 63 61 73 65 20 77 68   for the case wh
28090 65 72 65 20 73 75 63 63 65 73 73 69 76 65 20 73  ere successive s
280a0 65 74 73 0a 2a 2a 20 6f 66 20 69 6e 74 65 67 65  ets.** of intege
280b0 72 73 2c 20 77 68 65 72 65 20 65 61 63 68 20 73  rs, where each s
280c0 65 74 20 63 6f 6e 74 61 69 6e 73 20 6e 6f 20 64  et contains no d
280d0 75 70 6c 69 63 61 74 65 73 2e 20 45 61 63 68 20  uplicates. Each 
280e0 73 65 74 0a 2a 2a 20 6f 66 20 76 61 6c 75 65 73  set.** of values
280f0 20 69 73 20 69 64 65 6e 74 69 66 69 65 64 20 62   is identified b
28100 79 20 61 20 75 6e 69 71 75 65 20 50 34 20 76 61  y a unique P4 va
28110 6c 75 65 2e 20 54 68 65 20 66 69 72 73 74 20 73  lue. The first s
28120 65 74 0a 2a 2a 20 6d 75 73 74 20 68 61 76 65 20  et.** must have 
28130 50 34 3d 3d 30 2c 20 74 68 65 20 66 69 6e 61 6c  P4==0, the final
28140 20 73 65 74 20 50 34 3d 2d 31 2e 20 20 50 34 20   set P4=-1.  P4 
28150 6d 75 73 74 20 62 65 20 65 69 74 68 65 72 20 2d  must be either -
28160 31 20 6f 72 0a 2a 2a 20 6e 6f 6e 2d 6e 65 67 61  1 or.** non-nega
28170 74 69 76 65 2e 20 20 46 6f 72 20 6e 6f 6e 2d 6e  tive.  For non-n
28180 65 67 61 74 69 76 65 20 76 61 6c 75 65 73 20 6f  egative values o
28190 66 20 50 34 20 6f 6e 6c 79 20 74 68 65 20 6c 6f  f P4 only the lo
281a0 77 65 72 20 34 0a 2a 2a 20 62 69 74 73 20 61 72  wer 4.** bits ar
281b0 65 20 73 69 67 6e 69 66 69 63 61 6e 74 2e 0a 2a  e significant..*
281c0 2a 0a 2a 2a 20 54 68 69 73 20 61 6c 6c 6f 77 73  *.** This allows
281d0 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 3a 20   optimizations: 
281e0 28 61 29 20 77 68 65 6e 20 50 34 3d 3d 30 20 74  (a) when P4==0 t
281f0 68 65 72 65 20 69 73 20 6e 6f 20 6e 65 65 64 20  here is no need 
28200 74 6f 20 74 65 73 74 0a 2a 2a 20 74 68 65 20 72  to test.** the r
28210 6f 77 73 65 74 20 6f 62 6a 65 63 74 20 66 6f 72  owset object for
28220 20 50 33 2c 20 61 73 20 69 74 20 69 73 20 67 75   P3, as it is gu
28230 61 72 61 6e 74 65 65 64 20 6e 6f 74 20 74 6f 20  aranteed not to 
28240 63 6f 6e 74 61 69 6e 20 69 74 2c 0a 2a 2a 20 28  contain it,.** (
28250 62 29 20 77 68 65 6e 20 50 34 3d 3d 2d 31 20 74  b) when P4==-1 t
28260 68 65 72 65 20 69 73 20 6e 6f 20 6e 65 65 64 20  here is no need 
28270 74 6f 20 69 6e 73 65 72 74 20 74 68 65 20 76 61  to insert the va
28280 6c 75 65 2c 20 61 73 20 69 74 20 77 69 6c 6c 0a  lue, as it will.
28290 2a 2a 20 6e 65 76 65 72 20 62 65 20 74 65 73 74  ** never be test
282a0 65 64 20 66 6f 72 2c 20 61 6e 64 20 28 63 29 20  ed for, and (c) 
282b0 77 68 65 6e 20 61 20 76 61 6c 75 65 20 74 68 61  when a value tha
282c0 74 20 69 73 20 70 61 72 74 20 6f 66 20 73 65 74  t is part of set
282d0 20 58 20 69 73 0a 2a 2a 20 69 6e 73 65 72 74 65   X is.** inserte
282e0 64 2c 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6e  d, there is no n
282f0 65 65 64 20 74 6f 20 73 65 61 72 63 68 20 74 6f  eed to search to
28300 20 73 65 65 20 69 66 20 74 68 65 20 73 61 6d 65   see if the same
28310 20 76 61 6c 75 65 20 77 61 73 0a 2a 2a 20 70 72   value was.** pr
28320 65 76 69 6f 75 73 6c 79 20 69 6e 73 65 72 74 65  eviously inserte
28330 64 20 61 73 20 70 61 72 74 20 6f 66 20 73 65 74  d as part of set
28340 20 58 20 28 6f 6e 6c 79 20 69 66 20 69 74 20 77   X (only if it w
28350 61 73 20 70 72 65 76 69 6f 75 73 6c 79 0a 2a 2a  as previously.**
28360 20 69 6e 73 65 72 74 65 64 20 61 73 20 70 61 72   inserted as par
28370 74 20 6f 66 20 73 6f 6d 65 20 6f 74 68 65 72 20  t of some other 
28380 73 65 74 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  set)..*/.case OP
28390 5f 52 6f 77 53 65 74 54 65 73 74 3a 20 7b 20 20  _RowSetTest: {  
283a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
283b0 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 2c     /* jump, in1,
283c0 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 69 53   in3 */.  int iS
283d0 65 74 3b 0a 20 20 69 6e 74 20 65 78 69 73 74 73  et;.  int exists
283e0 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  ;..  pIn1 = &aMe
283f0 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49  m[pOp->p1];.  pI
28400 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n3 = &aMem[pOp->
28410 70 33 5d 3b 0a 20 20 69 53 65 74 20 3d 20 70 4f  p3];.  iSet = pO
28420 70 2d 3e 70 34 2e 69 3b 0a 20 20 61 73 73 65 72  p->p4.i;.  asser
28430 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 26 4d  t( pIn3->flags&M
28440 45 4d 5f 49 6e 74 20 29 3b 0a 0a 20 20 2f 2a 20  EM_Int );..  /* 
28450 49 66 20 74 68 65 72 65 20 69 73 20 61 6e 79 74  If there is anyt
28460 68 69 6e 67 20 6f 74 68 65 72 20 74 68 61 6e 20  hing other than 
28470 61 20 72 6f 77 73 65 74 20 6f 62 6a 65 63 74 20  a rowset object 
28480 69 6e 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 50  in memory cell P
28490 31 2c 0a 20 20 2a 2a 20 64 65 6c 65 74 65 20 69  1,.  ** delete i
284a0 74 20 6e 6f 77 20 61 6e 64 20 69 6e 69 74 69 61  t now and initia
284b0 6c 69 7a 65 20 50 31 20 77 69 74 68 20 61 6e 20  lize P1 with an 
284c0 65 6d 70 74 79 20 72 6f 77 73 65 74 0a 20 20 2a  empty rowset.  *
284d0 2f 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66  /.  if( (pIn1->f
284e0 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65  lags & MEM_RowSe
284f0 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c  t)==0 ){.    sql
28500 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 52 6f  ite3VdbeMemSetRo
28510 77 53 65 74 28 70 49 6e 31 29 3b 0a 20 20 20 20  wSet(pIn1);.    
28520 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
28530 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d   & MEM_RowSet)==
28540 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  0 ) goto no_mem;
28550 0a 20 20 7d 0a 0a 20 20 61 73 73 65 72 74 28 20  .  }..  assert( 
28560 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
28570 49 4e 54 33 32 20 29 3b 0a 20 20 61 73 73 65 72  INT32 );.  asser
28580 74 28 20 69 53 65 74 3d 3d 2d 31 20 7c 7c 20 69  t( iSet==-1 || i
28590 53 65 74 3e 3d 30 20 29 3b 0a 20 20 69 66 28 20  Set>=0 );.  if( 
285a0 69 53 65 74 20 29 7b 0a 20 20 20 20 65 78 69 73  iSet ){.    exis
285b0 74 73 20 3d 20 73 71 6c 69 74 65 33 52 6f 77 53  ts = sqlite3RowS
285c0 65 74 54 65 73 74 28 70 49 6e 31 2d 3e 75 2e 70  etTest(pIn1->u.p
285d0 52 6f 77 53 65 74 2c 20 0a 20 20 20 20 20 20 20  RowSet, .       
285e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
285f0 20 20 20 20 20 20 20 20 28 75 38 29 28 69 53 65          (u8)(iSe
28600 74 3e 3d 30 20 3f 20 69 53 65 74 20 26 20 30 78  t>=0 ? iSet & 0x
28610 66 20 3a 20 30 78 66 66 29 2c 0a 20 20 20 20 20  f : 0xff),.     
28620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28630 20 20 20 20 20 20 20 20 20 20 70 49 6e 33 2d 3e            pIn3->
28640 75 2e 69 29 3b 0a 20 20 20 20 69 66 28 20 65 78  u.i);.    if( ex
28650 69 73 74 73 20 29 7b 0a 20 20 20 20 20 20 70 63  ists ){.      pc
28660 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
28670 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
28680 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 69 53 65   }.  }.  if( iSe
28690 74 3e 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69  t>=0 ){.    sqli
286a0 74 65 33 52 6f 77 53 65 74 49 6e 73 65 72 74 28  te3RowSetInsert(
286b0 70 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c  pIn1->u.pRowSet,
286c0 20 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20 20 7d   pIn3->u.i);.  }
286d0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 23 69  .  break;.}...#i
286e0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
286f0 54 5f 54 52 49 47 47 45 52 0a 0a 2f 2a 20 4f 70  T_TRIGGER../* Op
28700 63 6f 64 65 3a 20 50 72 6f 67 72 61 6d 20 50 31  code: Program P1
28710 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a   P2 P3 P4 *.**.*
28720 2a 20 45 78 65 63 75 74 65 20 74 68 65 20 74 72  * Execute the tr
28730 69 67 67 65 72 20 70 72 6f 67 72 61 6d 20 70 61  igger program pa
28740 73 73 65 64 20 61 73 20 50 34 20 28 74 79 70 65  ssed as P4 (type
28750 20 50 34 5f 53 55 42 50 52 4f 47 52 41 4d 29 2e   P4_SUBPROGRAM).
28760 20 0a 2a 2a 0a 2a 2a 20 50 31 20 63 6f 6e 74 61   .**.** P1 conta
28770 69 6e 73 20 74 68 65 20 61 64 64 72 65 73 73 20  ins the address 
28780 6f 66 20 74 68 65 20 6d 65 6d 6f 72 79 20 63 65  of the memory ce
28790 6c 6c 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73  ll that contains
287a0 20 74 68 65 20 66 69 72 73 74 20 6d 65 6d 6f 72   the first memor
287b0 79 20 0a 2a 2a 20 63 65 6c 6c 20 69 6e 20 61 6e  y .** cell in an
287c0 20 61 72 72 61 79 20 6f 66 20 76 61 6c 75 65 73   array of values
287d0 20 75 73 65 64 20 61 73 20 61 72 67 75 6d 65 6e   used as argumen
287e0 74 73 20 74 6f 20 74 68 65 20 73 75 62 2d 70 72  ts to the sub-pr
287f0 6f 67 72 61 6d 2e 20 50 32 20 0a 2a 2a 20 63 6f  ogram. P2 .** co
28800 6e 74 61 69 6e 73 20 74 68 65 20 61 64 64 72 65  ntains the addre
28810 73 73 20 74 6f 20 6a 75 6d 70 20 74 6f 20 69 66  ss to jump to if
28820 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d   the sub-program
28830 20 74 68 72 6f 77 73 20 61 6e 20 49 47 4e 4f 52   throws an IGNOR
28840 45 20 0a 2a 2a 20 65 78 63 65 70 74 69 6f 6e 20  E .** exception 
28850 75 73 69 6e 67 20 74 68 65 20 52 41 49 53 45 28  using the RAISE(
28860 29 20 66 75 6e 63 74 69 6f 6e 2e 20 52 65 67 69  ) function. Regi
28870 73 74 65 72 20 50 33 20 63 6f 6e 74 61 69 6e 73  ster P3 contains
28880 20 74 68 65 20 61 64 64 72 65 73 73 20 0a 2a 2a   the address .**
28890 20 6f 66 20 61 20 6d 65 6d 6f 72 79 20 63 65 6c   of a memory cel
288a0 6c 20 69 6e 20 74 68 69 73 20 28 74 68 65 20 70  l in this (the p
288b0 61 72 65 6e 74 29 20 56 4d 20 74 68 61 74 20 69  arent) VM that i
288c0 73 20 75 73 65 64 20 74 6f 20 61 6c 6c 6f 63 61  s used to alloca
288d0 74 65 20 74 68 65 20 0a 2a 2a 20 6d 65 6d 6f 72  te the .** memor
288e0 79 20 72 65 71 75 69 72 65 64 20 62 79 20 74 68  y required by th
288f0 65 20 73 75 62 2d 76 64 62 65 20 61 74 20 72 75  e sub-vdbe at ru
28900 6e 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 50 34 20  ntime..**.** P4 
28910 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
28920 74 68 65 20 56 4d 20 63 6f 6e 74 61 69 6e 69 6e  the VM containin
28930 67 20 74 68 65 20 74 72 69 67 67 65 72 20 70 72  g the trigger pr
28940 6f 67 72 61 6d 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ogram..*/.case O
28950 50 5f 50 72 6f 67 72 61 6d 3a 20 7b 20 20 20 20  P_Program: {    
28960 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20      /* jump */. 
28970 20 69 6e 74 20 6e 4d 65 6d 3b 20 20 20 20 20 20   int nMem;      
28980 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
28990 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 72 65 67  er of memory reg
289a0 69 73 74 65 72 73 20 66 6f 72 20 73 75 62 2d 70  isters for sub-p
289b0 72 6f 67 72 61 6d 20 2a 2f 0a 20 20 69 6e 74 20  rogram */.  int 
289c0 6e 42 79 74 65 3b 20 20 20 20 20 20 20 20 20 20  nByte;          
289d0 20 20 20 20 2f 2a 20 42 79 74 65 73 20 6f 66 20      /* Bytes of 
289e0 72 75 6e 74 69 6d 65 20 73 70 61 63 65 20 72 65  runtime space re
289f0 71 75 69 72 65 64 20 66 6f 72 20 73 75 62 2d 70  quired for sub-p
28a00 72 6f 67 72 61 6d 20 2a 2f 0a 20 20 4d 65 6d 20  rogram */.  Mem 
28a10 2a 70 52 74 3b 20 20 20 20 20 20 20 20 20 20 20  *pRt;           
28a20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20      /* Register 
28a30 74 6f 20 61 6c 6c 6f 63 61 74 65 20 72 75 6e 74  to allocate runt
28a40 69 6d 65 20 73 70 61 63 65 20 2a 2f 0a 20 20 4d  ime space */.  M
28a50 65 6d 20 2a 70 4d 65 6d 3b 20 20 20 20 20 20 20  em *pMem;       
28a60 20 20 20 20 20 20 20 2f 2a 20 55 73 65 64 20 74         /* Used t
28a70 6f 20 69 74 65 72 61 74 65 20 74 68 72 6f 75 67  o iterate throug
28a80 68 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 2a  h memory cells *
28a90 2f 0a 20 20 4d 65 6d 20 2a 70 45 6e 64 3b 20 20  /.  Mem *pEnd;  
28aa0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c              /* L
28ab0 61 73 74 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20  ast memory cell 
28ac0 69 6e 20 6e 65 77 20 61 72 72 61 79 20 2a 2f 0a  in new array */.
28ad0 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72    VdbeFrame *pFr
28ae0 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e 65 77  ame;      /* New
28af0 20 76 64 62 65 20 66 72 61 6d 65 20 74 6f 20 65   vdbe frame to e
28b00 78 65 63 75 74 65 20 69 6e 20 2a 2f 0a 20 20 53  xecute in */.  S
28b10 75 62 50 72 6f 67 72 61 6d 20 2a 70 50 72 6f 67  ubProgram *pProg
28b20 72 61 6d 3b 20 20 20 2f 2a 20 53 75 62 2d 70 72  ram;   /* Sub-pr
28b30 6f 67 72 61 6d 20 74 6f 20 65 78 65 63 75 74 65  ogram to execute
28b40 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 74 3b 20 20   */.  void *t;  
28b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
28b60 20 54 6f 6b 65 6e 20 69 64 65 6e 74 69 66 79 69   Token identifyi
28b70 6e 67 20 74 72 69 67 67 65 72 20 2a 2f 0a 0a 20  ng trigger */.. 
28b80 20 70 50 72 6f 67 72 61 6d 20 3d 20 70 4f 70 2d   pProgram = pOp-
28b90 3e 70 34 2e 70 50 72 6f 67 72 61 6d 3b 0a 20 20  >p4.pProgram;.  
28ba0 70 52 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  pRt = &aMem[pOp-
28bb0 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p3];.  assert( 
28bc0 6d 65 6d 49 73 56 61 6c 69 64 28 70 52 74 29 20  memIsValid(pRt) 
28bd0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 50 72  );.  assert( pPr
28be0 6f 67 72 61 6d 2d 3e 6e 4f 70 3e 30 20 29 3b 0a  ogram->nOp>0 );.
28bf0 20 20 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 70    .  /* If the p
28c00 35 20 66 6c 61 67 20 69 73 20 63 6c 65 61 72 2c  5 flag is clear,
28c10 20 74 68 65 6e 20 72 65 63 75 72 73 69 76 65 20   then recursive 
28c20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74 72  invocation of tr
28c30 69 67 67 65 72 73 20 69 73 20 0a 20 20 2a 2a 20  iggers is .  ** 
28c40 64 69 73 61 62 6c 65 64 20 66 6f 72 20 62 61 63  disabled for bac
28c50 6b 77 61 72 64 73 20 63 6f 6d 70 61 74 69 62 69  kwards compatibi
28c60 6c 69 74 79 20 28 70 35 20 69 73 20 73 65 74 20  lity (p5 is set 
28c70 69 66 20 74 68 69 73 20 73 75 62 2d 70 72 6f 67  if this sub-prog
28c80 72 61 6d 0a 20 20 2a 2a 20 69 73 20 72 65 61 6c  ram.  ** is real
28c90 6c 79 20 61 20 74 72 69 67 67 65 72 2c 20 6e 6f  ly a trigger, no
28ca0 74 20 61 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  t a foreign key 
28cb0 61 63 74 69 6f 6e 2c 20 61 6e 64 20 74 68 65 20  action, and the 
28cc0 66 6c 61 67 20 73 65 74 0a 20 20 2a 2a 20 61 6e  flag set.  ** an
28cd0 64 20 63 6c 65 61 72 65 64 20 62 79 20 74 68 65  d cleared by the
28ce0 20 22 50 52 41 47 4d 41 20 72 65 63 75 72 73 69   "PRAGMA recursi
28cf0 76 65 5f 74 72 69 67 67 65 72 73 22 20 63 6f 6d  ve_triggers" com
28d00 6d 61 6e 64 20 69 73 20 63 6c 65 61 72 29 2e 0a  mand is clear)..
28d10 20 20 2a 2a 20 0a 20 20 2a 2a 20 49 74 20 69 73    ** .  ** It is
28d20 20 72 65 63 75 72 73 69 76 65 20 69 6e 76 6f 63   recursive invoc
28d30 61 74 69 6f 6e 20 6f 66 20 74 72 69 67 67 65 72  ation of trigger
28d40 73 2c 20 61 74 20 74 68 65 20 53 51 4c 20 6c 65  s, at the SQL le
28d50 76 65 6c 2c 20 74 68 61 74 20 69 73 20 0a 20 20  vel, that is .  
28d60 2a 2a 20 64 69 73 61 62 6c 65 64 2e 20 49 6e 20  ** disabled. In 
28d70 73 6f 6d 65 20 63 61 73 65 73 20 61 20 73 69 6e  some cases a sin
28d80 67 6c 65 20 74 72 69 67 67 65 72 20 6d 61 79 20  gle trigger may 
28d90 67 65 6e 65 72 61 74 65 20 6d 6f 72 65 20 74 68  generate more th
28da0 61 6e 20 6f 6e 65 20 0a 20 20 2a 2a 20 53 75 62  an one .  ** Sub
28db0 50 72 6f 67 72 61 6d 20 28 69 66 20 74 68 65 20  Program (if the 
28dc0 74 72 69 67 67 65 72 20 6d 61 79 20 62 65 20 65  trigger may be e
28dd0 78 65 63 75 74 65 64 20 77 69 74 68 20 6d 6f 72  xecuted with mor
28de0 65 20 74 68 61 6e 20 6f 6e 65 20 64 69 66 66 65  e than one diffe
28df0 72 65 6e 74 20 0a 20 20 2a 2a 20 4f 4e 20 43 4f  rent .  ** ON CO
28e00 4e 46 4c 49 43 54 20 61 6c 67 6f 72 69 74 68 6d  NFLICT algorithm
28e10 29 2e 20 53 75 62 50 72 6f 67 72 61 6d 20 73 74  ). SubProgram st
28e20 72 75 63 74 75 72 65 73 20 61 73 73 6f 63 69 61  ructures associa
28e30 74 65 64 20 77 69 74 68 20 61 0a 20 20 2a 2a 20  ted with a.  ** 
28e40 73 69 6e 67 6c 65 20 74 72 69 67 67 65 72 20 61  single trigger a
28e50 6c 6c 20 68 61 76 65 20 74 68 65 20 73 61 6d 65  ll have the same
28e60 20 76 61 6c 75 65 20 66 6f 72 20 74 68 65 20 53   value for the S
28e70 75 62 50 72 6f 67 72 61 6d 2e 74 6f 6b 65 6e 20  ubProgram.token 
28e80 0a 20 20 2a 2a 20 76 61 72 69 61 62 6c 65 2e 20  .  ** variable. 
28e90 20 2a 2f 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70   */.  if( pOp->p
28ea0 35 20 29 7b 0a 20 20 20 20 74 20 3d 20 70 50 72  5 ){.    t = pPr
28eb0 6f 67 72 61 6d 2d 3e 74 6f 6b 65 6e 3b 0a 20 20  ogram->token;.  
28ec0 20 20 66 6f 72 28 70 46 72 61 6d 65 3d 70 2d 3e    for(pFrame=p->
28ed0 70 46 72 61 6d 65 3b 20 70 46 72 61 6d 65 20 26  pFrame; pFrame &
28ee0 26 20 70 46 72 61 6d 65 2d 3e 74 6f 6b 65 6e 21  & pFrame->token!
28ef0 3d 74 3b 20 70 46 72 61 6d 65 3d 70 46 72 61 6d  =t; pFrame=pFram
28f00 65 2d 3e 70 50 61 72 65 6e 74 29 3b 0a 20 20 20  e->pParent);.   
28f10 20 69 66 28 20 70 46 72 61 6d 65 20 29 20 62 72   if( pFrame ) br
28f20 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20  eak;.  }..  if( 
28f30 70 2d 3e 6e 46 72 61 6d 65 3e 3d 64 62 2d 3e 61  p->nFrame>=db->a
28f40 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d  Limit[SQLITE_LIM
28f50 49 54 5f 54 52 49 47 47 45 52 5f 44 45 50 54 48  IT_TRIGGER_DEPTH
28f60 5d 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51  ] ){.    rc = SQ
28f70 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20  LITE_ERROR;.    
28f80 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67  sqlite3SetString
28f90 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62  (&p->zErrMsg, db
28fa0 2c 20 22 74 6f 6f 20 6d 61 6e 79 20 6c 65 76 65  , "too many leve
28fb0 6c 73 20 6f 66 20 74 72 69 67 67 65 72 20 72 65  ls of trigger re
28fc0 63 75 72 73 69 6f 6e 22 29 3b 0a 20 20 20 20 62  cursion");.    b
28fd0 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20  reak;.  }..  /* 
28fe0 52 65 67 69 73 74 65 72 20 70 52 74 20 69 73 20  Register pRt is 
28ff0 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68  used to store th
29000 65 20 6d 65 6d 6f 72 79 20 72 65 71 75 69 72 65  e memory require
29010 64 20 74 6f 20 73 61 76 65 20 74 68 65 20 73 74  d to save the st
29020 61 74 65 0a 20 20 2a 2a 20 6f 66 20 74 68 65 20  ate.  ** of the 
29030 63 75 72 72 65 6e 74 20 70 72 6f 67 72 61 6d 2c  current program,
29040 20 61 6e 64 20 74 68 65 20 6d 65 6d 6f 72 79 20   and the memory 
29050 72 65 71 75 69 72 65 64 20 61 74 20 72 75 6e 74  required at runt
29060 69 6d 65 20 74 6f 20 65 78 65 63 75 74 65 0a 20  ime to execute. 
29070 20 2a 2a 20 74 68 65 20 74 72 69 67 67 65 72 20   ** the trigger 
29080 70 72 6f 67 72 61 6d 2e 20 49 66 20 74 68 69 73  program. If this
29090 20 74 72 69 67 67 65 72 20 68 61 73 20 62 65 65   trigger has bee
290a0 6e 20 66 69 72 65 64 20 62 65 66 6f 72 65 2c 20  n fired before, 
290b0 74 68 65 6e 20 70 52 74 20 0a 20 20 2a 2a 20 69  then pRt .  ** i
290c0 73 20 61 6c 72 65 61 64 79 20 61 6c 6c 6f 63 61  s already alloca
290d0 74 65 64 2e 20 4f 74 68 65 72 77 69 73 65 2c 20  ted. Otherwise, 
290e0 69 74 20 6d 75 73 74 20 62 65 20 69 6e 69 74 69  it must be initi
290f0 61 6c 69 7a 65 64 2e 20 20 2a 2f 0a 20 20 69 66  alized.  */.  if
29100 28 20 28 70 52 74 2d 3e 66 6c 61 67 73 26 4d 45  ( (pRt->flags&ME
29110 4d 5f 46 72 61 6d 65 29 3d 3d 30 20 29 7b 0a 20  M_Frame)==0 ){. 
29120 20 20 20 2f 2a 20 53 75 62 50 72 6f 67 72 61 6d     /* SubProgram
29130 2e 6e 4d 65 6d 20 69 73 20 73 65 74 20 74 6f 20  .nMem is set to 
29140 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6d 65  the number of me
29150 6d 6f 72 79 20 63 65 6c 6c 73 20 75 73 65 64 20  mory cells used 
29160 62 79 20 74 68 65 20 0a 20 20 20 20 2a 2a 20 70  by the .    ** p
29170 72 6f 67 72 61 6d 20 73 74 6f 72 65 64 20 69 6e  rogram stored in
29180 20 53 75 62 50 72 6f 67 72 61 6d 2e 61 4f 70 2e   SubProgram.aOp.
29190 20 41 73 20 77 65 6c 6c 20 61 73 20 74 68 65 73   As well as thes
291a0 65 2c 20 6f 6e 65 20 6d 65 6d 6f 72 79 0a 20 20  e, one memory.  
291b0 20 20 2a 2a 20 63 65 6c 6c 20 69 73 20 72 65 71    ** cell is req
291c0 75 69 72 65 64 20 66 6f 72 20 65 61 63 68 20 63  uired for each c
291d0 75 72 73 6f 72 20 75 73 65 64 20 62 79 20 74 68  ursor used by th
291e0 65 20 70 72 6f 67 72 61 6d 2e 20 53 65 74 20 6c  e program. Set l
291f0 6f 63 61 6c 0a 20 20 20 20 2a 2a 20 76 61 72 69  ocal.    ** vari
29200 61 62 6c 65 20 6e 4d 65 6d 20 28 61 6e 64 20 6c  able nMem (and l
29210 61 74 65 72 2c 20 56 64 62 65 46 72 61 6d 65 2e  ater, VdbeFrame.
29220 6e 43 68 69 6c 64 4d 65 6d 29 20 74 6f 20 74 68  nChildMem) to th
29230 69 73 20 76 61 6c 75 65 2e 0a 20 20 20 20 2a 2f  is value..    */
29240 0a 20 20 20 20 6e 4d 65 6d 20 3d 20 70 50 72 6f  .    nMem = pPro
29250 67 72 61 6d 2d 3e 6e 4d 65 6d 20 2b 20 70 50 72  gram->nMem + pPr
29260 6f 67 72 61 6d 2d 3e 6e 43 73 72 3b 0a 20 20 20  ogram->nCsr;.   
29270 20 6e 42 79 74 65 20 3d 20 52 4f 55 4e 44 38 28   nByte = ROUND8(
29280 73 69 7a 65 6f 66 28 56 64 62 65 46 72 61 6d 65  sizeof(VdbeFrame
29290 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )).             
292a0 20 2b 20 6e 4d 65 6d 20 2a 20 73 69 7a 65 6f 66   + nMem * sizeof
292b0 28 4d 65 6d 29 0a 20 20 20 20 20 20 20 20 20 20  (Mem).          
292c0 20 20 20 20 2b 20 70 50 72 6f 67 72 61 6d 2d 3e      + pProgram->
292d0 6e 43 73 72 20 2a 20 73 69 7a 65 6f 66 28 56 64  nCsr * sizeof(Vd
292e0 62 65 43 75 72 73 6f 72 20 2a 29 3b 0a 20 20 20  beCursor *);.   
292f0 20 70 46 72 61 6d 65 20 3d 20 73 71 6c 69 74 65   pFrame = sqlite
29300 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 64 62  3DbMallocZero(db
29310 2c 20 6e 42 79 74 65 29 3b 0a 20 20 20 20 69 66  , nByte);.    if
29320 28 20 21 70 46 72 61 6d 65 20 29 7b 0a 20 20 20  ( !pFrame ){.   
29330 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a     goto no_mem;.
29340 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65      }.    sqlite
29350 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28  3VdbeMemRelease(
29360 70 52 74 29 3b 0a 20 20 20 20 70 52 74 2d 3e 66  pRt);.    pRt->f
29370 6c 61 67 73 20 3d 20 4d 45 4d 5f 46 72 61 6d 65  lags = MEM_Frame
29380 3b 0a 20 20 20 20 70 52 74 2d 3e 75 2e 70 46 72  ;.    pRt->u.pFr
29390 61 6d 65 20 3d 20 70 46 72 61 6d 65 3b 0a 0a 20  ame = pFrame;.. 
293a0 20 20 20 70 46 72 61 6d 65 2d 3e 76 20 3d 20 70     pFrame->v = p
293b0 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 43  ;.    pFrame->nC
293c0 68 69 6c 64 4d 65 6d 20 3d 20 6e 4d 65 6d 3b 0a  hildMem = nMem;.
293d0 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 43 68 69      pFrame->nChi
293e0 6c 64 43 73 72 20 3d 20 70 50 72 6f 67 72 61 6d  ldCsr = pProgram
293f0 2d 3e 6e 43 73 72 3b 0a 20 20 20 20 70 46 72 61  ->nCsr;.    pFra
29400 6d 65 2d 3e 70 63 20 3d 20 70 63 3b 0a 20 20 20  me->pc = pc;.   
29410 20 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 20 3d 20   pFrame->aMem = 
29420 70 2d 3e 61 4d 65 6d 3b 0a 20 20 20 20 70 46 72  p->aMem;.    pFr
29430 61 6d 65 2d 3e 6e 4d 65 6d 20 3d 20 70 2d 3e 6e  ame->nMem = p->n
29440 4d 65 6d 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d  Mem;.    pFrame-
29450 3e 61 70 43 73 72 20 3d 20 70 2d 3e 61 70 43 73  >apCsr = p->apCs
29460 72 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e  r;.    pFrame->n
29470 43 75 72 73 6f 72 20 3d 20 70 2d 3e 6e 43 75 72  Cursor = p->nCur
29480 73 6f 72 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d  sor;.    pFrame-
29490 3e 61 4f 70 20 3d 20 70 2d 3e 61 4f 70 3b 0a 20  >aOp = p->aOp;. 
294a0 20 20 20 70 46 72 61 6d 65 2d 3e 6e 4f 70 20 3d     pFrame->nOp =
294b0 20 70 2d 3e 6e 4f 70 3b 0a 20 20 20 20 70 46 72   p->nOp;.    pFr
294c0 61 6d 65 2d 3e 74 6f 6b 65 6e 20 3d 20 70 50 72  ame->token = pPr
294d0 6f 67 72 61 6d 2d 3e 74 6f 6b 65 6e 3b 0a 0a 20  ogram->token;.. 
294e0 20 20 20 70 45 6e 64 20 3d 20 26 56 64 62 65 46     pEnd = &VdbeF
294f0 72 61 6d 65 4d 65 6d 28 70 46 72 61 6d 65 29 5b  rameMem(pFrame)[
29500 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65  pFrame->nChildMe
29510 6d 5d 3b 0a 20 20 20 20 66 6f 72 28 70 4d 65 6d  m];.    for(pMem
29520 3d 56 64 62 65 46 72 61 6d 65 4d 65 6d 28 70 46  =VdbeFrameMem(pF
29530 72 61 6d 65 29 3b 20 70 4d 65 6d 21 3d 70 45 6e  rame); pMem!=pEn
29540 64 3b 20 70 4d 65 6d 2b 2b 29 7b 0a 20 20 20 20  d; pMem++){.    
29550 20 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 3d 20    pMem->flags = 
29560 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20 20 20  MEM_Null;.      
29570 70 4d 65 6d 2d 3e 64 62 20 3d 20 64 62 3b 0a 20  pMem->db = db;. 
29580 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20     }.  }else{.  
29590 20 20 70 46 72 61 6d 65 20 3d 20 70 52 74 2d 3e    pFrame = pRt->
295a0 75 2e 70 46 72 61 6d 65 3b 0a 20 20 20 20 61 73  u.pFrame;.    as
295b0 73 65 72 74 28 20 70 50 72 6f 67 72 61 6d 2d 3e  sert( pProgram->
295c0 6e 4d 65 6d 2b 70 50 72 6f 67 72 61 6d 2d 3e 6e  nMem+pProgram->n
295d0 43 73 72 3d 3d 70 46 72 61 6d 65 2d 3e 6e 43 68  Csr==pFrame->nCh
295e0 69 6c 64 4d 65 6d 20 29 3b 0a 20 20 20 20 61 73  ildMem );.    as
295f0 73 65 72 74 28 20 70 50 72 6f 67 72 61 6d 2d 3e  sert( pProgram->
29600 6e 43 73 72 3d 3d 70 46 72 61 6d 65 2d 3e 6e 43  nCsr==pFrame->nC
29610 68 69 6c 64 43 73 72 20 29 3b 0a 20 20 20 20 61  hildCsr );.    a
29620 73 73 65 72 74 28 20 70 63 3d 3d 70 46 72 61 6d  ssert( pc==pFram
29630 65 2d 3e 70 63 20 29 3b 0a 20 20 7d 0a 0a 20 20  e->pc );.  }..  
29640 70 2d 3e 6e 46 72 61 6d 65 2b 2b 3b 0a 20 20 70  p->nFrame++;.  p
29650 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 20 3d  Frame->pParent =
29660 20 70 2d 3e 70 46 72 61 6d 65 3b 0a 20 20 70 46   p->pFrame;.  pF
29670 72 61 6d 65 2d 3e 6c 61 73 74 52 6f 77 69 64 20  rame->lastRowid 
29680 3d 20 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20 70  = lastRowid;.  p
29690 46 72 61 6d 65 2d 3e 6e 43 68 61 6e 67 65 20 3d  Frame->nChange =
296a0 20 70 2d 3e 6e 43 68 61 6e 67 65 3b 0a 20 20 70   p->nChange;.  p
296b0 2d 3e 6e 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20  ->nChange = 0;. 
296c0 20 70 2d 3e 70 46 72 61 6d 65 20 3d 20 70 46 72   p->pFrame = pFr
296d0 61 6d 65 3b 0a 20 20 70 2d 3e 61 4d 65 6d 20 3d  ame;.  p->aMem =
296e0 20 61 4d 65 6d 20 3d 20 26 56 64 62 65 46 72 61   aMem = &VdbeFra
296f0 6d 65 4d 65 6d 28 70 46 72 61 6d 65 29 5b 2d 31  meMem(pFrame)[-1
29700 5d 3b 0a 20 20 70 2d 3e 6e 4d 65 6d 20 3d 20 70  ];.  p->nMem = p
29710 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d  Frame->nChildMem
29720 3b 0a 20 20 70 2d 3e 6e 43 75 72 73 6f 72 20 3d  ;.  p->nCursor =
29730 20 28 75 31 36 29 70 46 72 61 6d 65 2d 3e 6e 43   (u16)pFrame->nC
29740 68 69 6c 64 43 73 72 3b 0a 20 20 70 2d 3e 61 70  hildCsr;.  p->ap
29750 43 73 72 20 3d 20 28 56 64 62 65 43 75 72 73 6f  Csr = (VdbeCurso
29760 72 20 2a 2a 29 26 61 4d 65 6d 5b 70 2d 3e 6e 4d  r **)&aMem[p->nM
29770 65 6d 2b 31 5d 3b 0a 20 20 70 2d 3e 61 4f 70 20  em+1];.  p->aOp 
29780 3d 20 61 4f 70 20 3d 20 70 50 72 6f 67 72 61 6d  = aOp = pProgram
29790 2d 3e 61 4f 70 3b 0a 20 20 70 2d 3e 6e 4f 70 20  ->aOp;.  p->nOp 
297a0 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f 70 3b  = pProgram->nOp;
297b0 0a 20 20 70 63 20 3d 20 2d 31 3b 0a 0a 20 20 62  .  pc = -1;..  b
297c0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
297d0 64 65 3a 20 50 61 72 61 6d 20 50 31 20 50 32 20  de: Param P1 P2 
297e0 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73  * * *.**.** This
297f0 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20   opcode is only 
29800 65 76 65 72 20 70 72 65 73 65 6e 74 20 69 6e 20  ever present in 
29810 73 75 62 2d 70 72 6f 67 72 61 6d 73 20 63 61 6c  sub-programs cal
29820 6c 65 64 20 76 69 61 20 74 68 65 20 0a 2a 2a 20  led via the .** 
29830 4f 50 5f 50 72 6f 67 72 61 6d 20 69 6e 73 74 72  OP_Program instr
29840 75 63 74 69 6f 6e 2e 20 43 6f 70 79 20 61 20 76  uction. Copy a v
29850 61 6c 75 65 20 63 75 72 72 65 6e 74 6c 79 20 73  alue currently s
29860 74 6f 72 65 64 20 69 6e 20 61 20 6d 65 6d 6f 72  tored in a memor
29870 79 20 0a 2a 2a 20 63 65 6c 6c 20 6f 66 20 74 68  y .** cell of th
29880 65 20 63 61 6c 6c 69 6e 67 20 28 70 61 72 65 6e  e calling (paren
29890 74 29 20 66 72 61 6d 65 20 74 6f 20 63 65 6c 6c  t) frame to cell
298a0 20 50 32 20 69 6e 20 74 68 65 20 63 75 72 72 65   P2 in the curre
298b0 6e 74 20 66 72 61 6d 65 73 20 0a 2a 2a 20 61 64  nt frames .** ad
298c0 64 72 65 73 73 20 73 70 61 63 65 2e 20 54 68 69  dress space. Thi
298d0 73 20 69 73 20 75 73 65 64 20 62 79 20 74 72 69  s is used by tri
298e0 67 67 65 72 20 70 72 6f 67 72 61 6d 73 20 74 6f  gger programs to
298f0 20 61 63 63 65 73 73 20 74 68 65 20 6e 65 77 2e   access the new.
29900 2a 20 0a 2a 2a 20 61 6e 64 20 6f 6c 64 2e 2a 20  * .** and old.* 
29910 76 61 6c 75 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68  values..**.** Th
29920 65 20 61 64 64 72 65 73 73 20 6f 66 20 74 68 65  e address of the
29930 20 63 65 6c 6c 20 69 6e 20 74 68 65 20 70 61 72   cell in the par
29940 65 6e 74 20 66 72 61 6d 65 20 69 73 20 64 65 74  ent frame is det
29950 65 72 6d 69 6e 65 64 20 62 79 20 61 64 64 69 6e  ermined by addin
29960 67 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 6f  g.** the value o
29970 66 20 74 68 65 20 50 31 20 61 72 67 75 6d 65 6e  f the P1 argumen
29980 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 6f  t to the value o
29990 66 20 74 68 65 20 50 31 20 61 72 67 75 6d 65 6e  f the P1 argumen
299a0 74 20 74 6f 20 74 68 65 0a 2a 2a 20 63 61 6c 6c  t to the.** call
299b0 69 6e 67 20 4f 50 5f 50 72 6f 67 72 61 6d 20 69  ing OP_Program i
299c0 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63  nstruction..*/.c
299d0 61 73 65 20 4f 50 5f 50 61 72 61 6d 3a 20 7b 20  ase OP_Param: { 
299e0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
299f0 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a  2-prerelease */.
29a00 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72    VdbeFrame *pFr
29a10 61 6d 65 3b 0a 20 20 4d 65 6d 20 2a 70 49 6e 3b  ame;.  Mem *pIn;
29a20 0a 20 20 70 46 72 61 6d 65 20 3d 20 70 2d 3e 70  .  pFrame = p->p
29a30 46 72 61 6d 65 3b 0a 20 20 70 49 6e 20 3d 20 26  Frame;.  pIn = &
29a40 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70  pFrame->aMem[pOp
29a50 2d 3e 70 31 20 2b 20 70 46 72 61 6d 65 2d 3e 61  ->p1 + pFrame->a
29a60 4f 70 5b 70 46 72 61 6d 65 2d 3e 70 63 5d 2e 70  Op[pFrame->pc].p
29a70 31 5d 3b 20 20 20 0a 20 20 73 71 6c 69 74 65 33  1];   .  sqlite3
29a80 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f  VdbeMemShallowCo
29a90 70 79 28 70 4f 75 74 2c 20 70 49 6e 2c 20 4d 45  py(pOut, pIn, ME
29aa0 4d 5f 45 70 68 65 6d 29 3b 0a 20 20 62 72 65 61  M_Ephem);.  brea
29ab0 6b 3b 0a 7d 0a 0a 23 65 6e 64 69 66 20 2f 2a 20  k;.}..#endif /* 
29ac0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
29ad0 4d 49 54 5f 54 52 49 47 47 45 52 20 2a 2f 0a 0a  MIT_TRIGGER */..
29ae0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
29af0 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a  MIT_FOREIGN_KEY.
29b00 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 6b 43 6f 75  /* Opcode: FkCou
29b10 6e 74 65 72 20 50 31 20 50 32 20 2a 20 2a 20 2a  nter P1 P2 * * *
29b20 0a 2a 2a 0a 2a 2a 20 49 6e 63 72 65 6d 65 6e 74  .**.** Increment
29b30 20 61 20 22 63 6f 6e 73 74 72 61 69 6e 74 20 63   a "constraint c
29b40 6f 75 6e 74 65 72 22 20 62 79 20 50 32 20 28 50  ounter" by P2 (P
29b50 32 20 6d 61 79 20 62 65 20 6e 65 67 61 74 69 76  2 may be negativ
29b60 65 20 6f 72 20 70 6f 73 69 74 69 76 65 29 2e 0a  e or positive)..
29b70 2a 2a 20 49 66 20 50 31 20 69 73 20 6e 6f 6e 2d  ** If P1 is non-
29b80 7a 65 72 6f 2c 20 74 68 65 20 64 61 74 61 62 61  zero, the databa
29b90 73 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 63 6f  se constraint co
29ba0 75 6e 74 65 72 20 69 73 20 69 6e 63 72 65 6d 65  unter is increme
29bb0 6e 74 65 64 20 0a 2a 2a 20 28 64 65 66 65 72 72  nted .** (deferr
29bc0 65 64 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63  ed foreign key c
29bd0 6f 6e 73 74 72 61 69 6e 74 73 29 2e 20 4f 74 68  onstraints). Oth
29be0 65 72 77 69 73 65 2c 20 69 66 20 50 31 20 69 73  erwise, if P1 is
29bf0 20 7a 65 72 6f 2c 20 74 68 65 20 0a 2a 2a 20 73   zero, the .** s
29c00 74 61 74 65 6d 65 6e 74 20 63 6f 75 6e 74 65 72  tatement counter
29c10 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20   is incremented 
29c20 28 69 6d 6d 65 64 69 61 74 65 20 66 6f 72 65 69  (immediate forei
29c30 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e  gn key constrain
29c40 74 73 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ts)..*/.case OP_
29c50 46 6b 43 6f 75 6e 74 65 72 3a 20 7b 0a 20 20 69  FkCounter: {.  i
29c60 66 28 20 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20  f( pOp->p1 ){.  
29c70 20 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43    db->nDeferredC
29c80 6f 6e 73 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a  ons += pOp->p2;.
29c90 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 2d 3e    }else{.    p->
29ca0 6e 46 6b 43 6f 6e 73 74 72 61 69 6e 74 20 2b 3d  nFkConstraint +=
29cb0 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 7d 0a 20 20   pOp->p2;.  }.  
29cc0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
29cd0 6f 64 65 3a 20 46 6b 49 66 5a 65 72 6f 20 50 31  ode: FkIfZero P1
29ce0 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
29cf0 54 68 69 73 20 6f 70 63 6f 64 65 20 74 65 73 74  This opcode test
29d00 73 20 69 66 20 61 20 66 6f 72 65 69 67 6e 20 6b  s if a foreign k
29d10 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 2d 63 6f  ey constraint-co
29d20 75 6e 74 65 72 20 69 73 20 63 75 72 72 65 6e 74  unter is current
29d30 6c 79 20 7a 65 72 6f 2e 0a 2a 2a 20 49 66 20 73  ly zero..** If s
29d40 6f 2c 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72  o, jump to instr
29d50 75 63 74 69 6f 6e 20 50 32 2e 20 4f 74 68 65 72  uction P2. Other
29d60 77 69 73 65 2c 20 66 61 6c 6c 20 74 68 72 6f 75  wise, fall throu
29d70 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 0a  gh to the next .
29d80 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  ** instruction..
29d90 2a 2a 0a 2a 2a 20 49 66 20 50 31 20 69 73 20 6e  **.** If P1 is n
29da0 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68  on-zero, then th
29db0 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20  e jump is taken 
29dc0 69 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  if the database 
29dd0 63 6f 6e 73 74 72 61 69 6e 74 2d 63 6f 75 6e 74  constraint-count
29de0 65 72 0a 2a 2a 20 69 73 20 7a 65 72 6f 20 28 74  er.** is zero (t
29df0 68 65 20 6f 6e 65 20 74 68 61 74 20 63 6f 75 6e  he one that coun
29e00 74 73 20 64 65 66 65 72 72 65 64 20 63 6f 6e 73  ts deferred cons
29e10 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e  traint violation
29e20 73 29 2e 20 49 66 20 50 31 20 69 73 0a 2a 2a 20  s). If P1 is.** 
29e30 7a 65 72 6f 2c 20 74 68 65 20 6a 75 6d 70 20 69  zero, the jump i
29e40 73 20 74 61 6b 65 6e 20 69 66 20 74 68 65 20 73  s taken if the s
29e50 74 61 74 65 6d 65 6e 74 20 63 6f 6e 73 74 72 61  tatement constra
29e60 69 6e 74 2d 63 6f 75 6e 74 65 72 20 69 73 20 7a  int-counter is z
29e70 65 72 6f 0a 2a 2a 20 28 69 6d 6d 65 64 69 61 74  ero.** (immediat
29e80 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f  e foreign key co
29e90 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69  nstraint violati
29ea0 6f 6e 73 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  ons)..*/.case OP
29eb0 5f 46 6b 49 66 5a 65 72 6f 3a 20 7b 20 20 20 20  _FkIfZero: {    
29ec0 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
29ed0 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 20 29 7b    if( pOp->p1 ){
29ee0 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 6e 44 65  .    if( db->nDe
29ef0 66 65 72 72 65 64 43 6f 6e 73 3d 3d 30 20 29 20  ferredCons==0 ) 
29f00 70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a  pc = pOp->p2-1;.
29f10 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69 66 28    }else{.    if(
29f20 20 70 2d 3e 6e 46 6b 43 6f 6e 73 74 72 61 69 6e   p->nFkConstrain
29f30 74 3d 3d 30 20 29 20 70 63 20 3d 20 70 4f 70 2d  t==0 ) pc = pOp-
29f40 3e 70 32 2d 31 3b 0a 20 20 7d 0a 20 20 62 72 65  >p2-1;.  }.  bre
29f50 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ak;.}.#endif /* 
29f60 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
29f70 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 20  MIT_FOREIGN_KEY 
29f80 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
29f90 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52  TE_OMIT_AUTOINCR
29fa0 45 4d 45 4e 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a  EMENT./* Opcode:
29fb0 20 4d 65 6d 4d 61 78 20 50 31 20 50 32 20 2a 20   MemMax P1 P2 * 
29fc0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20  * *.**.** P1 is 
29fd0 61 20 72 65 67 69 73 74 65 72 20 69 6e 20 74 68  a register in th
29fe0 65 20 72 6f 6f 74 20 66 72 61 6d 65 20 6f 66 20  e root frame of 
29ff0 74 68 69 73 20 56 4d 20 28 74 68 65 20 72 6f 6f  this VM (the roo
2a000 74 20 66 72 61 6d 65 20 69 73 0a 2a 2a 20 64 69  t frame is.** di
2a010 66 66 65 72 65 6e 74 20 66 72 6f 6d 20 74 68 65  fferent from the
2a020 20 63 75 72 72 65 6e 74 20 66 72 61 6d 65 20 69   current frame i
2a030 66 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69  f this instructi
2a040 6f 6e 20 69 73 20 62 65 69 6e 67 20 65 78 65 63  on is being exec
2a050 75 74 65 64 0a 2a 2a 20 77 69 74 68 69 6e 20 61  uted.** within a
2a060 20 73 75 62 2d 70 72 6f 67 72 61 6d 29 2e 20 53   sub-program). S
2a070 65 74 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  et the value of 
2a080 72 65 67 69 73 74 65 72 20 50 31 20 74 6f 20 74  register P1 to t
2a090 68 65 20 6d 61 78 69 6d 75 6d 20 6f 66 20 0a 2a  he maximum of .*
2a0a0 2a 20 69 74 73 20 63 75 72 72 65 6e 74 20 76 61  * its current va
2a0b0 6c 75 65 20 61 6e 64 20 74 68 65 20 76 61 6c 75  lue and the valu
2a0c0 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  e in register P2
2a0d0 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73  ..**.** This ins
2a0e0 74 72 75 63 74 69 6f 6e 20 74 68 72 6f 77 73 20  truction throws 
2a0f0 61 6e 20 65 72 72 6f 72 20 69 66 20 74 68 65 20  an error if the 
2a100 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69 73 20 6e  memory cell is n
2a110 6f 74 20 69 6e 69 74 69 61 6c 6c 79 0a 2a 2a 20  ot initially.** 
2a120 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2f 0a 63  an integer..*/.c
2a130 61 73 65 20 4f 50 5f 4d 65 6d 4d 61 78 3a 20 7b  ase OP_MemMax: {
2a140 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 32 20 2a          /* in2 *
2a150 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e 31 3b 0a 20  /.  Mem *pIn1;. 
2a160 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61   VdbeFrame *pFra
2a170 6d 65 3b 0a 20 20 69 66 28 20 70 2d 3e 70 46 72  me;.  if( p->pFr
2a180 61 6d 65 20 29 7b 0a 20 20 20 20 66 6f 72 28 70  ame ){.    for(p
2a190 46 72 61 6d 65 3d 70 2d 3e 70 46 72 61 6d 65 3b  Frame=p->pFrame;
2a1a0 20 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74   pFrame->pParent
2a1b0 3b 20 70 46 72 61 6d 65 3d 70 46 72 61 6d 65 2d  ; pFrame=pFrame-
2a1c0 3e 70 50 61 72 65 6e 74 29 3b 0a 20 20 20 20 70  >pParent);.    p
2a1d0 49 6e 31 20 3d 20 26 70 46 72 61 6d 65 2d 3e 61  In1 = &pFrame->a
2a1e0 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
2a1f0 7d 65 6c 73 65 7b 0a 20 20 20 20 70 49 6e 31 20  }else{.    pIn1 
2a200 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
2a210 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20  ;.  }.  assert( 
2a220 6d 65 6d 49 73 56 61 6c 69 64 28 70 49 6e 31 29  memIsValid(pIn1)
2a230 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62   );.  sqlite3Vdb
2a240 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70  eMemIntegerify(p
2a250 49 6e 31 29 3b 0a 20 20 70 49 6e 32 20 3d 20 26  In1);.  pIn2 = &
2a260 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
2a270 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49   sqlite3VdbeMemI
2a280 6e 74 65 67 65 72 69 66 79 28 70 49 6e 32 29 3b  ntegerify(pIn2);
2a290 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69  .  if( pIn1->u.i
2a2a0 3c 70 49 6e 32 2d 3e 75 2e 69 29 7b 0a 20 20 20  <pIn2->u.i){.   
2a2b0 20 70 49 6e 31 2d 3e 75 2e 69 20 3d 20 70 49 6e   pIn1->u.i = pIn
2a2c0 32 2d 3e 75 2e 69 3b 0a 20 20 7d 0a 20 20 62 72  2->u.i;.  }.  br
2a2d0 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
2a2e0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54   SQLITE_OMIT_AUT
2a2f0 4f 49 4e 43 52 45 4d 45 4e 54 20 2a 2f 0a 0a 2f  OINCREMENT */../
2a300 2a 20 4f 70 63 6f 64 65 3a 20 49 66 50 6f 73 20  * Opcode: IfPos 
2a310 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
2a320 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 6f  * If the value o
2a330 66 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  f register P1 is
2a340 20 31 20 6f 72 20 67 72 65 61 74 65 72 2c 20 6a   1 or greater, j
2a350 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a  ump to P2..**.**
2a360 20 49 74 20 69 73 20 69 6c 6c 65 67 61 6c 20 74   It is illegal t
2a370 6f 20 75 73 65 20 74 68 69 73 20 69 6e 73 74 72  o use this instr
2a380 75 63 74 69 6f 6e 20 6f 6e 20 61 20 72 65 67 69  uction on a regi
2a390 73 74 65 72 20 74 68 61 74 20 64 6f 65 73 0a 2a  ster that does.*
2a3a0 2a 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 61 6e  * not contain an
2a3b0 20 69 6e 74 65 67 65 72 2e 20 20 41 6e 20 61 73   integer.  An as
2a3c0 73 65 72 74 69 6f 6e 20 66 61 75 6c 74 20 77 69  sertion fault wi
2a3d0 6c 6c 20 72 65 73 75 6c 74 20 69 66 20 79 6f 75  ll result if you
2a3e0 20 74 72 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50   try..*/.case OP
2a3f0 5f 49 66 50 6f 73 3a 20 7b 20 20 20 20 20 20 20  _IfPos: {       
2a400 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f   /* jump, in1 */
2a410 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
2a420 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
2a430 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26  rt( pIn1->flags&
2a440 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 69 66 28  MEM_Int );.  if(
2a450 20 70 49 6e 31 2d 3e 75 2e 69 3e 30 20 29 7b 0a   pIn1->u.i>0 ){.
2a460 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70       pc = pOp->p
2a470 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65  2 - 1;.  }.  bre
2a480 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
2a490 3a 20 49 66 4e 65 67 20 50 31 20 50 32 20 2a 20  : IfNeg P1 P2 * 
2a4a0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  * *.**.** If the
2a4b0 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74   value of regist
2a4c0 65 72 20 50 31 20 69 73 20 6c 65 73 73 20 74 68  er P1 is less th
2a4d0 61 6e 20 7a 65 72 6f 2c 20 6a 75 6d 70 20 74 6f  an zero, jump to
2a4e0 20 50 32 2e 20 0a 2a 2a 0a 2a 2a 20 49 74 20 69   P2. .**.** It i
2a4f0 73 20 69 6c 6c 65 67 61 6c 20 74 6f 20 75 73 65  s illegal to use
2a500 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
2a510 6e 20 6f 6e 20 61 20 72 65 67 69 73 74 65 72 20  n on a register 
2a520 74 68 61 74 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74  that does.** not
2a530 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65   contain an inte
2a540 67 65 72 2e 20 20 41 6e 20 61 73 73 65 72 74 69  ger.  An asserti
2a550 6f 6e 20 66 61 75 6c 74 20 77 69 6c 6c 20 72 65  on fault will re
2a560 73 75 6c 74 20 69 66 20 79 6f 75 20 74 72 79 2e  sult if you try.
2a570 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 4e 65  .*/.case OP_IfNe
2a580 67 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a  g: {        /* j
2a590 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49  ump, in1 */.  pI
2a5a0 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
2a5b0 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
2a5c0 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49  In1->flags&MEM_I
2a5d0 6e 74 20 29 3b 0a 20 20 69 66 28 20 70 49 6e 31  nt );.  if( pIn1
2a5e0 2d 3e 75 2e 69 3c 30 20 29 7b 0a 20 20 20 20 20  ->u.i<0 ){.     
2a5f0 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
2a600 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
2a610 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 5a  ../* Opcode: IfZ
2a620 65 72 6f 20 50 31 20 50 32 20 50 33 20 2a 20 2a  ero P1 P2 P3 * *
2a630 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 65 67 69 73  .**.** The regis
2a640 74 65 72 20 50 31 20 6d 75 73 74 20 63 6f 6e 74  ter P1 must cont
2a650 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 20  ain an integer. 
2a660 20 41 64 64 20 6c 69 74 65 72 61 6c 20 50 33 20   Add literal P3 
2a670 74 6f 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20  to the.** value 
2a680 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 20  in register P1. 
2a690 20 49 66 20 74 68 65 20 72 65 73 75 6c 74 20 69   If the result i
2a6a0 73 20 65 78 61 63 74 6c 79 20 30 2c 20 6a 75 6d  s exactly 0, jum
2a6b0 70 20 74 6f 20 50 32 2e 20 0a 2a 2a 0a 2a 2a 20  p to P2. .**.** 
2a6c0 49 74 20 69 73 20 69 6c 6c 65 67 61 6c 20 74 6f  It is illegal to
2a6d0 20 75 73 65 20 74 68 69 73 20 69 6e 73 74 72 75   use this instru
2a6e0 63 74 69 6f 6e 20 6f 6e 20 61 20 72 65 67 69 73  ction on a regis
2a6f0 74 65 72 20 74 68 61 74 20 64 6f 65 73 0a 2a 2a  ter that does.**
2a700 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20   not contain an 
2a710 69 6e 74 65 67 65 72 2e 20 20 41 6e 20 61 73 73  integer.  An ass
2a720 65 72 74 69 6f 6e 20 66 61 75 6c 74 20 77 69 6c  ertion fault wil
2a730 6c 20 72 65 73 75 6c 74 20 69 66 20 79 6f 75 20  l result if you 
2a740 74 72 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  try..*/.case OP_
2a750 49 66 5a 65 72 6f 3a 20 7b 20 20 20 20 20 20 20  IfZero: {       
2a760 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f   /* jump, in1 */
2a770 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
2a780 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
2a790 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26  rt( pIn1->flags&
2a7a0 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 70 49 6e  MEM_Int );.  pIn
2a7b0 31 2d 3e 75 2e 69 20 2b 3d 20 70 4f 70 2d 3e 70  1->u.i += pOp->p
2a7c0 33 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 75  3;.  if( pIn1->u
2a7d0 2e 69 3d 3d 30 20 29 7b 0a 20 20 20 20 20 70 63  .i==0 ){.     pc
2a7e0 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
2a7f0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
2a800 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 67 67 53 74  /* Opcode: AggSt
2a810 65 70 20 2a 20 50 32 20 50 33 20 50 34 20 50 35  ep * P2 P3 P4 P5
2a820 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20 74  .**.** Execute t
2a830 68 65 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e  he step function
2a840 20 66 6f 72 20 61 6e 20 61 67 67 72 65 67 61 74   for an aggregat
2a850 65 2e 20 20 54 68 65 0a 2a 2a 20 66 75 6e 63 74  e.  The.** funct
2a860 69 6f 6e 20 68 61 73 20 50 35 20 61 72 67 75 6d  ion has P5 argum
2a870 65 6e 74 73 2e 20 20 20 50 34 20 69 73 20 61 20  ents.   P4 is a 
2a880 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 46  pointer to the F
2a890 75 6e 63 44 65 66 0a 2a 2a 20 73 74 72 75 63 74  uncDef.** struct
2a8a0 75 72 65 20 74 68 61 74 20 73 70 65 63 69 66 69  ure that specifi
2a8b0 65 73 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e  es the function.
2a8c0 20 20 55 73 65 20 72 65 67 69 73 74 65 72 0a 2a    Use register.*
2a8d0 2a 20 50 33 20 61 73 20 74 68 65 20 61 63 63 75  * P3 as the accu
2a8e0 6d 75 6c 61 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54  mulator..**.** T
2a8f0 68 65 20 50 35 20 61 72 67 75 6d 65 6e 74 73 20  he P5 arguments 
2a900 61 72 65 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72  are taken from r
2a910 65 67 69 73 74 65 72 20 50 32 20 61 6e 64 20 69  egister P2 and i
2a920 74 73 0a 2a 2a 20 73 75 63 63 65 73 73 6f 72 73  ts.** successors
2a930 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 67 67  ..*/.case OP_Agg
2a940 53 74 65 70 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b  Step: {.  int n;
2a950 0a 20 20 69 6e 74 20 69 3b 0a 20 20 4d 65 6d 20  .  int i;.  Mem 
2a960 2a 70 4d 65 6d 3b 0a 20 20 4d 65 6d 20 2a 70 52  *pMem;.  Mem *pR
2a970 65 63 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f  ec;.  sqlite3_co
2a980 6e 74 65 78 74 20 63 74 78 3b 0a 20 20 73 71 6c  ntext ctx;.  sql
2a990 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61 70 56  ite3_value **apV
2a9a0 61 6c 3b 0a 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e  al;..  n = pOp->
2a9b0 70 35 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 3e  p5;.  assert( n>
2a9c0 3d 30 20 29 3b 0a 20 20 70 52 65 63 20 3d 20 26  =0 );.  pRec = &
2a9d0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
2a9e0 20 61 70 56 61 6c 20 3d 20 70 2d 3e 61 70 41 72   apVal = p->apAr
2a9f0 67 3b 0a 20 20 61 73 73 65 72 74 28 20 61 70 56  g;.  assert( apV
2aa00 61 6c 20 7c 7c 20 6e 3d 3d 30 20 29 3b 0a 20 20  al || n==0 );.  
2aa10 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b  for(i=0; i<n; i+
2aa20 2b 2c 20 70 52 65 63 2b 2b 29 7b 0a 20 20 20 20  +, pRec++){.    
2aa30 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
2aa40 69 64 28 70 52 65 63 29 20 29 3b 0a 20 20 20 20  id(pRec) );.    
2aa50 61 70 56 61 6c 5b 69 5d 20 3d 20 70 52 65 63 3b  apVal[i] = pRec;
2aa60 0a 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43  .    memAboutToC
2aa70 68 61 6e 67 65 28 70 2c 20 70 52 65 63 29 3b 0a  hange(p, pRec);.
2aa80 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
2aa90 65 6d 53 74 6f 72 65 54 79 70 65 28 70 52 65 63  emStoreType(pRec
2aaa0 29 3b 0a 20 20 7d 0a 20 20 63 74 78 2e 70 46 75  );.  }.  ctx.pFu
2aab0 6e 63 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 46 75  nc = pOp->p4.pFu
2aac0 6e 63 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  nc;.  assert( pO
2aad0 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p3>0 && pOp->
2aae0 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20  p3<=p->nMem );. 
2aaf0 20 63 74 78 2e 70 4d 65 6d 20 3d 20 70 4d 65 6d   ctx.pMem = pMem
2ab00 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
2ab10 5d 3b 0a 20 20 70 4d 65 6d 2d 3e 6e 2b 2b 3b 0a  ];.  pMem->n++;.
2ab20 20 20 63 74 78 2e 73 2e 66 6c 61 67 73 20 3d 20    ctx.s.flags = 
2ab30 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 63 74 78 2e  MEM_Null;.  ctx.
2ab40 73 2e 7a 20 3d 20 30 3b 0a 20 20 63 74 78 2e 73  s.z = 0;.  ctx.s
2ab50 2e 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20  .zMalloc = 0;.  
2ab60 63 74 78 2e 73 2e 78 44 65 6c 20 3d 20 30 3b 0a  ctx.s.xDel = 0;.
2ab70 20 20 63 74 78 2e 73 2e 64 62 20 3d 20 64 62 3b    ctx.s.db = db;
2ab80 0a 20 20 63 74 78 2e 69 73 45 72 72 6f 72 20 3d  .  ctx.isError =
2ab90 20 30 3b 0a 20 20 63 74 78 2e 70 43 6f 6c 6c 20   0;.  ctx.pColl 
2aba0 3d 20 30 3b 0a 20 20 69 66 28 20 63 74 78 2e 70  = 0;.  if( ctx.p
2abb0 46 75 6e 63 2d 3e 66 6c 61 67 73 20 26 20 53 51  Func->flags & SQ
2abc0 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f  LITE_FUNC_NEEDCO
2abd0 4c 4c 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  LL ){.    assert
2abe0 28 20 70 4f 70 3e 70 2d 3e 61 4f 70 20 29 3b 0a  ( pOp>p->aOp );.
2abf0 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b      assert( pOp[
2ac00 2d 31 5d 2e 70 34 74 79 70 65 3d 3d 50 34 5f 43  -1].p4type==P4_C
2ac10 4f 4c 4c 53 45 51 20 29 3b 0a 20 20 20 20 61 73  OLLSEQ );.    as
2ac20 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 6f 70  sert( pOp[-1].op
2ac30 63 6f 64 65 3d 3d 4f 50 5f 43 6f 6c 6c 53 65 71  code==OP_CollSeq
2ac40 20 29 3b 0a 20 20 20 20 63 74 78 2e 70 43 6f 6c   );.    ctx.pCol
2ac50 6c 20 3d 20 70 4f 70 5b 2d 31 5d 2e 70 34 2e 70  l = pOp[-1].p4.p
2ac60 43 6f 6c 6c 3b 0a 20 20 7d 0a 20 20 28 63 74 78  Coll;.  }.  (ctx
2ac70 2e 70 46 75 6e 63 2d 3e 78 53 74 65 70 29 28 26  .pFunc->xStep)(&
2ac80 63 74 78 2c 20 6e 2c 20 61 70 56 61 6c 29 3b 20  ctx, n, apVal); 
2ac90 2f 2a 20 49 4d 50 3a 20 52 2d 32 34 35 30 35 2d  /* IMP: R-24505-
2aca0 32 33 32 33 30 20 2a 2f 0a 20 20 69 66 28 20 63  23230 */.  if( c
2acb0 74 78 2e 69 73 45 72 72 6f 72 20 29 7b 0a 20 20  tx.isError ){.  
2acc0 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69    sqlite3SetStri
2acd0 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20  ng(&p->zErrMsg, 
2ace0 64 62 2c 20 22 25 73 22 2c 20 73 71 6c 69 74 65  db, "%s", sqlite
2acf0 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 26 63 74  3_value_text(&ct
2ad00 78 2e 73 29 29 3b 0a 20 20 20 20 72 63 20 3d 20  x.s));.    rc = 
2ad10 63 74 78 2e 69 73 45 72 72 6f 72 3b 0a 20 20 7d  ctx.isError;.  }
2ad20 0a 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ..  sqlite3VdbeM
2ad30 65 6d 52 65 6c 65 61 73 65 28 26 63 74 78 2e 73  emRelease(&ctx.s
2ad40 29 3b 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  );..  break;.}..
2ad50 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 67 67 46 69  /* Opcode: AggFi
2ad60 6e 61 6c 20 50 31 20 50 32 20 2a 20 50 34 20 2a  nal P1 P2 * P4 *
2ad70 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20 74  .**.** Execute t
2ad80 68 65 20 66 69 6e 61 6c 69 7a 65 72 20 66 75 6e  he finalizer fun
2ad90 63 74 69 6f 6e 20 66 6f 72 20 61 6e 20 61 67 67  ction for an agg
2ada0 72 65 67 61 74 65 2e 20 20 50 31 20 69 73 0a 2a  regate.  P1 is.*
2adb0 2a 20 74 68 65 20 6d 65 6d 6f 72 79 20 6c 6f 63  * the memory loc
2adc0 61 74 69 6f 6e 20 74 68 61 74 20 69 73 20 74 68  ation that is th
2add0 65 20 61 63 63 75 6d 75 6c 61 74 6f 72 20 66 6f  e accumulator fo
2ade0 72 20 74 68 65 20 61 67 67 72 65 67 61 74 65 2e  r the aggregate.
2adf0 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73 20 74 68 65  .**.** P2 is the
2ae00 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   number of argum
2ae10 65 6e 74 73 20 74 68 61 74 20 74 68 65 20 73 74  ents that the st
2ae20 65 70 20 66 75 6e 63 74 69 6f 6e 20 74 61 6b 65  ep function take
2ae30 73 20 61 6e 64 0a 2a 2a 20 50 34 20 69 73 20 61  s and.** P4 is a
2ae40 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20   pointer to the 
2ae50 46 75 6e 63 44 65 66 20 66 6f 72 20 74 68 69 73  FuncDef for this
2ae60 20 66 75 6e 63 74 69 6f 6e 2e 20 20 54 68 65 20   function.  The 
2ae70 50 32 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 69  P2.** argument i
2ae80 73 20 6e 6f 74 20 75 73 65 64 20 62 79 20 74 68  s not used by th
2ae90 69 73 20 6f 70 63 6f 64 65 2e 20 20 49 74 20 69  is opcode.  It i
2aea0 73 20 6f 6e 6c 79 20 74 68 65 72 65 20 74 6f 20  s only there to 
2aeb0 64 69 73 61 6d 62 69 67 75 61 74 65 0a 2a 2a 20  disambiguate.** 
2aec0 66 75 6e 63 74 69 6f 6e 73 20 74 68 61 74 20 63  functions that c
2aed0 61 6e 20 74 61 6b 65 20 76 61 72 79 69 6e 67 20  an take varying 
2aee0 6e 75 6d 62 65 72 73 20 6f 66 20 61 72 67 75 6d  numbers of argum
2aef0 65 6e 74 73 2e 20 20 54 68 65 0a 2a 2a 20 50 34  ents.  The.** P4
2af00 20 61 72 67 75 6d 65 6e 74 20 69 73 20 6f 6e 6c   argument is onl
2af10 79 20 6e 65 65 64 65 64 20 66 6f 72 20 74 68 65  y needed for the
2af20 20 64 65 67 65 6e 65 72 61 74 65 20 63 61 73 65   degenerate case
2af30 20 77 68 65 72 65 0a 2a 2a 20 74 68 65 20 73 74   where.** the st
2af40 65 70 20 66 75 6e 63 74 69 6f 6e 20 77 61 73 20  ep function was 
2af50 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c 79 20 63  not previously c
2af60 61 6c 6c 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f  alled..*/.case O
2af70 50 5f 41 67 67 46 69 6e 61 6c 3a 20 7b 0a 20 20  P_AggFinal: {.  
2af80 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20 61 73 73  Mem *pMem;.  ass
2af90 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26  ert( pOp->p1>0 &
2afa0 26 20 70 4f 70 2d 3e 70 31 3c 3d 70 2d 3e 6e 4d  & pOp->p1<=p->nM
2afb0 65 6d 20 29 3b 0a 20 20 70 4d 65 6d 20 3d 20 26  em );.  pMem = &
2afc0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
2afd0 20 61 73 73 65 72 74 28 20 28 70 4d 65 6d 2d 3e   assert( (pMem->
2afe0 66 6c 61 67 73 20 26 20 7e 28 4d 45 4d 5f 4e 75  flags & ~(MEM_Nu
2aff0 6c 6c 7c 4d 45 4d 5f 41 67 67 29 29 3d 3d 30 20  ll|MEM_Agg))==0 
2b000 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  );.  rc = sqlite
2b010 33 56 64 62 65 4d 65 6d 46 69 6e 61 6c 69 7a 65  3VdbeMemFinalize
2b020 28 70 4d 65 6d 2c 20 70 4f 70 2d 3e 70 34 2e 70  (pMem, pOp->p4.p
2b030 46 75 6e 63 29 3b 0a 20 20 69 66 28 20 72 63 20  Func);.  if( rc 
2b040 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65  ){.    sqlite3Se
2b050 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72  tString(&p->zErr
2b060 4d 73 67 2c 20 64 62 2c 20 22 25 73 22 2c 20 73  Msg, db, "%s", s
2b070 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78  qlite3_value_tex
2b080 74 28 70 4d 65 6d 29 29 3b 0a 20 20 7d 0a 20 20  t(pMem));.  }.  
2b090 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67  sqlite3VdbeChang
2b0a0 65 45 6e 63 6f 64 69 6e 67 28 70 4d 65 6d 2c 20  eEncoding(pMem, 
2b0b0 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 55 50 44  encoding);.  UPD
2b0c0 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45  ATE_MAX_BLOBSIZE
2b0d0 28 70 4d 65 6d 29 3b 0a 20 20 69 66 28 20 73 71  (pMem);.  if( sq
2b0e0 6c 69 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42  lite3VdbeMemTooB
2b0f0 69 67 28 70 4d 65 6d 29 20 29 7b 0a 20 20 20 20  ig(pMem) ){.    
2b100 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20  goto too_big;.  
2b110 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69  }.  break;.}..#i
2b120 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2b130 54 5f 57 41 4c 0a 2f 2a 20 4f 70 63 6f 64 65 3a  T_WAL./* Opcode:
2b140 20 43 68 65 63 6b 70 6f 69 6e 74 20 50 31 20 50   Checkpoint P1 P
2b150 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43  2 P3 * *.**.** C
2b160 68 65 63 6b 70 6f 69 6e 74 20 64 61 74 61 62 61  heckpoint databa
2b170 73 65 20 50 31 2e 20 54 68 69 73 20 69 73 20 61  se P1. This is a
2b180 20 6e 6f 2d 6f 70 20 69 66 20 50 31 20 69 73 20   no-op if P1 is 
2b190 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 69 6e  not currently in
2b1a0 0a 2a 2a 20 57 41 4c 20 6d 6f 64 65 2e 20 50 61  .** WAL mode. Pa
2b1b0 72 61 6d 65 74 65 72 20 50 32 20 69 73 20 6f 6e  rameter P2 is on
2b1c0 65 20 6f 66 20 53 51 4c 49 54 45 5f 43 48 45 43  e of SQLITE_CHEC
2b1d0 4b 50 4f 49 4e 54 5f 50 41 53 53 49 56 45 2c 20  KPOINT_PASSIVE, 
2b1e0 46 55 4c 4c 0a 2a 2a 20 6f 72 20 52 45 53 54 41  FULL.** or RESTA
2b1f0 52 54 2e 20 20 57 72 69 74 65 20 31 20 6f 72 20  RT.  Write 1 or 
2b200 30 20 69 6e 74 6f 20 6d 65 6d 5b 50 33 5d 20 69  0 into mem[P3] i
2b210 66 20 74 68 65 20 63 68 65 63 6b 70 6f 69 6e 74  f the checkpoint
2b220 20 72 65 74 75 72 6e 73 0a 2a 2a 20 53 51 4c 49   returns.** SQLI
2b230 54 45 5f 42 55 53 59 20 6f 72 20 6e 6f 74 2c 20  TE_BUSY or not, 
2b240 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20 20 57  respectively.  W
2b250 72 69 74 65 20 74 68 65 20 6e 75 6d 62 65 72 20  rite the number 
2b260 6f 66 20 70 61 67 65 73 20 69 6e 20 74 68 65 0a  of pages in the.
2b270 2a 2a 20 57 41 4c 20 61 66 74 65 72 20 74 68 65  ** WAL after the
2b280 20 63 68 65 63 6b 70 6f 69 6e 74 20 69 6e 74 6f   checkpoint into
2b290 20 6d 65 6d 5b 50 33 2b 31 5d 20 61 6e 64 20 74   mem[P3+1] and t
2b2a0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67  he number of pag
2b2b0 65 73 0a 2a 2a 20 69 6e 20 74 68 65 20 57 41 4c  es.** in the WAL
2b2c0 20 74 68 61 74 20 68 61 76 65 20 62 65 65 6e 20   that have been 
2b2d0 63 68 65 63 6b 70 6f 69 6e 74 65 64 20 61 66 74  checkpointed aft
2b2e0 65 72 20 74 68 65 20 63 68 65 63 6b 70 6f 69 6e  er the checkpoin
2b2f0 74 0a 2a 2a 20 63 6f 6d 70 6c 65 74 65 73 20 69  t.** completes i
2b300 6e 74 6f 20 6d 65 6d 5b 50 33 2b 32 5d 2e 20 20  nto mem[P3+2].  
2b310 48 6f 77 65 76 65 72 20 6f 6e 20 61 6e 20 65 72  However on an er
2b320 72 6f 72 2c 20 6d 65 6d 5b 50 33 2b 31 5d 20 61  ror, mem[P3+1] a
2b330 6e 64 0a 2a 2a 20 6d 65 6d 5b 50 33 2b 32 5d 20  nd.** mem[P3+2] 
2b340 61 72 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 20  are initialized 
2b350 74 6f 20 2d 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f  to -1..*/.case O
2b360 50 5f 43 68 65 63 6b 70 6f 69 6e 74 3a 20 7b 0a  P_Checkpoint: {.
2b370 20 20 69 6e 74 20 69 3b 20 20 20 20 20 20 20 20    int i;        
2b380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b390 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65    /* Loop counte
2b3a0 72 20 2a 2f 0a 20 20 69 6e 74 20 61 52 65 73 5b  r */.  int aRes[
2b3b0 33 5d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  3];             
2b3c0 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74         /* Result
2b3d0 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d  s */.  Mem *pMem
2b3e0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
2b3f0 20 20 20 20 20 20 20 2f 2a 20 57 72 69 74 65 20         /* Write 
2b400 72 65 73 75 6c 74 73 20 68 65 72 65 20 2a 2f 0a  results here */.
2b410 0a 20 20 61 52 65 73 5b 30 5d 20 3d 20 30 3b 0a  .  aRes[0] = 0;.
2b420 20 20 61 52 65 73 5b 31 5d 20 3d 20 61 52 65 73    aRes[1] = aRes
2b430 5b 32 5d 20 3d 20 2d 31 3b 0a 20 20 61 73 73 65  [2] = -1;.  asse
2b440 72 74 28 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c  rt( pOp->p2==SQL
2b450 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 50  ITE_CHECKPOINT_P
2b460 41 53 53 49 56 45 0a 20 20 20 20 20 20 20 7c 7c  ASSIVE.       ||
2b470 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45   pOp->p2==SQLITE
2b480 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 46 55 4c 4c  _CHECKPOINT_FULL
2b490 0a 20 20 20 20 20 20 20 7c 7c 20 70 4f 70 2d 3e  .       || pOp->
2b4a0 70 32 3d 3d 53 51 4c 49 54 45 5f 43 48 45 43 4b  p2==SQLITE_CHECK
2b4b0 50 4f 49 4e 54 5f 52 45 53 54 41 52 54 0a 20 20  POINT_RESTART.  
2b4c0 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  );.  rc = sqlite
2b4d0 33 43 68 65 63 6b 70 6f 69 6e 74 28 64 62 2c 20  3Checkpoint(db, 
2b4e0 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 32  pOp->p1, pOp->p2
2b4f0 2c 20 26 61 52 65 73 5b 31 5d 2c 20 26 61 52 65  , &aRes[1], &aRe
2b500 73 5b 32 5d 29 3b 0a 20 20 69 66 28 20 72 63 3d  s[2]);.  if( rc=
2b510 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a  =SQLITE_BUSY ){.
2b520 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
2b530 4f 4b 3b 0a 20 20 20 20 61 52 65 73 5b 30 5d 20  OK;.    aRes[0] 
2b540 3d 20 31 3b 0a 20 20 7d 0a 20 20 66 6f 72 28 69  = 1;.  }.  for(i
2b550 3d 30 2c 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d  =0, pMem = &aMem
2b560 5b 70 4f 70 2d 3e 70 33 5d 3b 20 69 3c 33 3b 20  [pOp->p3]; i<3; 
2b570 69 2b 2b 2c 20 70 4d 65 6d 2b 2b 29 7b 0a 20 20  i++, pMem++){.  
2b580 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
2b590 53 65 74 49 6e 74 36 34 28 70 4d 65 6d 2c 20 28  SetInt64(pMem, (
2b5a0 69 36 34 29 61 52 65 73 5b 69 5d 29 3b 0a 20 20  i64)aRes[i]);.  
2b5b0 7d 20 20 20 20 0a 20 20 62 72 65 61 6b 3b 0a 7d  }    .  break;.}
2b5c0 3b 20 20 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e  ;  .#endif..#ifn
2b5d0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2b5e0 50 52 41 47 4d 41 0a 2f 2a 20 4f 70 63 6f 64 65  PRAGMA./* Opcode
2b5f0 3a 20 4a 6f 75 72 6e 61 6c 4d 6f 64 65 20 50 31  : JournalMode P1
2b600 20 50 32 20 50 33 20 2a 20 50 35 0a 2a 2a 0a 2a   P2 P3 * P5.**.*
2b610 2a 20 43 68 61 6e 67 65 20 74 68 65 20 6a 6f 75  * Change the jou
2b620 72 6e 61 6c 20 6d 6f 64 65 20 6f 66 20 64 61 74  rnal mode of dat
2b630 61 62 61 73 65 20 50 31 20 74 6f 20 50 33 2e 20  abase P1 to P3. 
2b640 50 33 20 6d 75 73 74 20 62 65 20 6f 6e 65 20 6f  P3 must be one o
2b650 66 20 74 68 65 0a 2a 2a 20 50 41 47 45 52 5f 4a  f the.** PAGER_J
2b660 4f 55 52 4e 41 4c 4d 4f 44 45 5f 58 58 58 20 76  OURNALMODE_XXX v
2b670 61 6c 75 65 73 2e 20 49 66 20 63 68 61 6e 67 69  alues. If changi
2b680 6e 67 20 62 65 74 77 65 65 6e 20 74 68 65 20 76  ng between the v
2b690 61 72 69 6f 75 73 20 72 6f 6c 6c 62 61 63 6b 0a  arious rollback.
2b6a0 2a 2a 20 6d 6f 64 65 73 20 28 64 65 6c 65 74 65  ** modes (delete
2b6b0 2c 20 74 72 75 6e 63 61 74 65 2c 20 70 65 72 73  , truncate, pers
2b6c0 69 73 74 2c 20 6f 66 66 20 61 6e 64 20 6d 65 6d  ist, off and mem
2b6d0 6f 72 79 29 2c 20 74 68 69 73 20 69 73 20 61 20  ory), this is a 
2b6e0 73 69 6d 70 6c 65 0a 2a 2a 20 6f 70 65 72 61 74  simple.** operat
2b6f0 69 6f 6e 2e 20 4e 6f 20 49 4f 20 69 73 20 72 65  ion. No IO is re
2b700 71 75 69 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66  quired..**.** If
2b710 20 63 68 61 6e 67 69 6e 67 20 69 6e 74 6f 20 6f   changing into o
2b720 72 20 6f 75 74 20 6f 66 20 57 41 4c 20 6d 6f 64  r out of WAL mod
2b730 65 20 74 68 65 20 70 72 6f 63 65 64 75 72 65 20  e the procedure 
2b740 69 73 20 6d 6f 72 65 20 63 6f 6d 70 6c 69 63 61  is more complica
2b750 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65  ted..**.** Write
2b760 20 61 20 73 74 72 69 6e 67 20 63 6f 6e 74 61 69   a string contai
2b770 6e 69 6e 67 20 74 68 65 20 66 69 6e 61 6c 20 6a  ning the final j
2b780 6f 75 72 6e 61 6c 2d 6d 6f 64 65 20 74 6f 20 72  ournal-mode to r
2b790 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63  egister P2..*/.c
2b7a0 61 73 65 20 4f 50 5f 4a 6f 75 72 6e 61 6c 4d 6f  ase OP_JournalMo
2b7b0 64 65 3a 20 7b 20 20 20 20 2f 2a 20 6f 75 74 32  de: {    /* out2
2b7c0 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20  -prerelease */. 
2b7d0 20 42 74 72 65 65 20 2a 70 42 74 3b 20 20 20 20   Btree *pBt;    
2b7e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b7f0 20 2f 2a 20 42 74 72 65 65 20 74 6f 20 63 68 61   /* Btree to cha
2b800 6e 67 65 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65  nge journal mode
2b810 20 6f 66 20 2a 2f 0a 20 20 50 61 67 65 72 20 2a   of */.  Pager *
2b820 70 50 61 67 65 72 3b 20 20 20 20 20 20 20 20 20  pPager;         
2b830 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 67 65           /* Page
2b840 72 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  r associated wit
2b850 68 20 70 42 74 20 2a 2f 0a 20 20 69 6e 74 20 65  h pBt */.  int e
2b860 4e 65 77 3b 20 20 20 20 20 20 20 20 20 20 20 20  New;            
2b870 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65             /* Ne
2b880 77 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 2a  w journal mode *
2b890 2f 0a 20 20 69 6e 74 20 65 4f 6c 64 3b 20 20 20  /.  int eOld;   
2b8a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b8b0 20 20 20 20 2f 2a 20 54 68 65 20 6f 6c 64 20 6a      /* The old j
2b8c0 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 2a 2f 0a 20  ournal mode */. 
2b8d0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 69   const char *zFi
2b8e0 6c 65 6e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  lename;         
2b8f0 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 64 61 74 61   /* Name of data
2b900 62 61 73 65 20 66 69 6c 65 20 66 6f 72 20 70 50  base file for pP
2b910 61 67 65 72 20 2a 2f 0a 0a 20 20 65 4e 65 77 20  ager */..  eNew 
2b920 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73  = pOp->p3;.  ass
2b930 65 72 74 28 20 65 4e 65 77 3d 3d 50 41 47 45 52  ert( eNew==PAGER
2b940 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 44 45 4c  _JOURNALMODE_DEL
2b950 45 54 45 20 0a 20 20 20 20 20 20 20 7c 7c 20 65  ETE .       || e
2b960 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e  New==PAGER_JOURN
2b970 41 4c 4d 4f 44 45 5f 54 52 55 4e 43 41 54 45 20  ALMODE_TRUNCATE 
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 50 45 52 53 49 53 54 20 0a 20 20 20 20  DE_PERSIST .    
2b9b0 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45     || eNew==PAGE
2b9c0 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4f 46  R_JOURNALMODE_OF
2b9d0 46 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77  F.       || eNew
2b9e0 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
2b9f0 4f 44 45 5f 4d 45 4d 4f 52 59 0a 20 20 20 20 20  ODE_MEMORY.     
2ba00 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52    || eNew==PAGER
2ba10 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c  _JOURNALMODE_WAL
2ba20 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d  .       || eNew=
2ba30 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f  =PAGER_JOURNALMO
2ba40 44 45 5f 51 55 45 52 59 0a 20 20 29 3b 0a 20 20  DE_QUERY.  );.  
2ba50 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
2ba60 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62  =0 && pOp->p1<db
2ba70 2d 3e 6e 44 62 20 29 3b 0a 0a 20 20 70 42 74 20  ->nDb );..  pBt 
2ba80 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70  = db->aDb[pOp->p
2ba90 31 5d 2e 70 42 74 3b 0a 20 20 70 50 61 67 65 72  1].pBt;.  pPager
2baa0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 50   = sqlite3BtreeP
2bab0 61 67 65 72 28 70 42 74 29 3b 0a 20 20 65 4f 6c  ager(pBt);.  eOl
2bac0 64 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72  d = sqlite3Pager
2bad0 47 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70  GetJournalMode(p
2bae0 50 61 67 65 72 29 3b 0a 20 20 69 66 28 20 65 4e  Pager);.  if( eN
2baf0 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41  ew==PAGER_JOURNA
2bb00 4c 4d 4f 44 45 5f 51 55 45 52 59 20 29 20 65 4e  LMODE_QUERY ) eN
2bb10 65 77 20 3d 20 65 4f 6c 64 3b 0a 20 20 69 66 28  ew = eOld;.  if(
2bb20 20 21 73 71 6c 69 74 65 33 50 61 67 65 72 4f 6b   !sqlite3PagerOk
2bb30 54 6f 43 68 61 6e 67 65 4a 6f 75 72 6e 61 6c 4d  ToChangeJournalM
2bb40 6f 64 65 28 70 50 61 67 65 72 29 20 29 20 65 4e  ode(pPager) ) eN
2bb50 65 77 20 3d 20 65 4f 6c 64 3b 0a 0a 23 69 66 6e  ew = eOld;..#ifn
2bb60 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2bb70 57 41 4c 0a 20 20 7a 46 69 6c 65 6e 61 6d 65 20  WAL.  zFilename 
2bb80 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72 46 69  = sqlite3PagerFi
2bb90 6c 65 6e 61 6d 65 28 70 50 61 67 65 72 29 3b 0a  lename(pPager);.
2bba0 0a 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 61 6c 6c  .  /* Do not all
2bbb0 6f 77 20 61 20 74 72 61 6e 73 69 74 69 6f 6e 20  ow a transition 
2bbc0 74 6f 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 3d  to journal_mode=
2bbd0 57 41 4c 20 66 6f 72 20 61 20 64 61 74 61 62 61  WAL for a databa
2bbe0 73 65 0a 20 20 2a 2a 20 69 6e 20 74 65 6d 70 6f  se.  ** in tempo
2bbf0 72 61 72 79 20 73 74 6f 72 61 67 65 20 6f 72 20  rary storage or 
2bc00 69 66 20 74 68 65 20 56 46 53 20 64 6f 65 73 20  if the VFS does 
2bc10 6e 6f 74 20 73 75 70 70 6f 72 74 20 73 68 61 72  not support shar
2bc20 65 64 20 6d 65 6d 6f 72 79 20 0a 20 20 2a 2f 0a  ed memory .  */.
2bc30 20 20 69 66 28 20 65 4e 65 77 3d 3d 50 41 47 45    if( eNew==PAGE
2bc40 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41  R_JOURNALMODE_WA
2bc50 4c 0a 20 20 20 26 26 20 28 73 71 6c 69 74 65 33  L.   && (sqlite3
2bc60 53 74 72 6c 65 6e 33 30 28 7a 46 69 6c 65 6e 61  Strlen30(zFilena
2bc70 6d 65 29 3d 3d 30 20 20 20 20 20 20 20 20 20 20  me)==0          
2bc80 20 2f 2a 20 54 65 6d 70 20 66 69 6c 65 20 2a 2f   /* Temp file */
2bc90 0a 20 20 20 20 20 20 20 7c 7c 20 21 73 71 6c 69  .       || !sqli
2bca0 74 65 33 50 61 67 65 72 57 61 6c 53 75 70 70 6f  te3PagerWalSuppo
2bcb0 72 74 65 64 28 70 50 61 67 65 72 29 29 20 20 20  rted(pPager))   
2bcc0 2f 2a 20 4e 6f 20 73 68 61 72 65 64 2d 6d 65 6d  /* No shared-mem
2bcd0 6f 72 79 20 73 75 70 70 6f 72 74 20 2a 2f 0a 20  ory support */. 
2bce0 20 29 7b 0a 20 20 20 20 65 4e 65 77 20 3d 20 65   ){.    eNew = e
2bcf0 4f 6c 64 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20  Old;.  }..  if( 
2bd00 28 65 4e 65 77 21 3d 65 4f 6c 64 29 0a 20 20 20  (eNew!=eOld).   
2bd10 26 26 20 28 65 4f 6c 64 3d 3d 50 41 47 45 52 5f  && (eOld==PAGER_
2bd20 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20  JOURNALMODE_WAL 
2bd30 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a  || eNew==PAGER_J
2bd40 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 29 0a  OURNALMODE_WAL).
2bd50 20 20 29 7b 0a 20 20 20 20 69 66 28 20 21 64 62    ){.    if( !db
2bd60 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 7c 7c 20  ->autoCommit || 
2bd70 64 62 2d 3e 61 63 74 69 76 65 56 64 62 65 43 6e  db->activeVdbeCn
2bd80 74 3e 31 20 29 7b 0a 20 20 20 20 20 20 72 63 20  t>1 ){.      rc 
2bd90 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a  = SQLITE_ERROR;.
2bda0 20 20 20 20 20 20 73 71 6c 69 74 65 33 53 65 74        sqlite3Set
2bdb0 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d  String(&p->zErrM
2bdc0 73 67 2c 20 64 62 2c 20 0a 20 20 20 20 20 20 20  sg, db, .       
2bdd0 20 20 20 22 63 61 6e 6e 6f 74 20 63 68 61 6e 67     "cannot chang
2bde0 65 20 25 73 20 77 61 6c 20 6d 6f 64 65 20 66 72  e %s wal mode fr
2bdf0 6f 6d 20 77 69 74 68 69 6e 20 61 20 74 72 61 6e  om within a tran
2be00 73 61 63 74 69 6f 6e 22 2c 0a 20 20 20 20 20 20  saction",.      
2be10 20 20 20 20 28 65 4e 65 77 3d 3d 50 41 47 45 52      (eNew==PAGER
2be20 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c  _JOURNALMODE_WAL
2be30 20 3f 20 22 69 6e 74 6f 22 20 3a 20 22 6f 75 74   ? "into" : "out
2be40 20 6f 66 22 29 0a 20 20 20 20 20 20 29 3b 0a 20   of").      );. 
2be50 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
2be60 7d 65 6c 73 65 7b 0a 20 0a 20 20 20 20 20 20 69  }else{. .      i
2be70 66 28 20 65 4f 6c 64 3d 3d 50 41 47 45 52 5f 4a  f( eOld==PAGER_J
2be80 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 29  OURNALMODE_WAL )
2be90 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20  {.        /* If 
2bea0 6c 65 61 76 69 6e 67 20 57 41 4c 20 6d 6f 64 65  leaving WAL mode
2beb0 2c 20 63 6c 6f 73 65 20 74 68 65 20 6c 6f 67 20  , close the log 
2bec0 66 69 6c 65 2e 20 49 66 20 73 75 63 63 65 73 73  file. If success
2bed0 66 75 6c 2c 20 74 68 65 20 63 61 6c 6c 0a 20 20  ful, the call.  
2bee0 20 20 20 20 20 20 2a 2a 20 74 6f 20 50 61 67 65        ** to Page
2bef0 72 43 6c 6f 73 65 57 61 6c 28 29 20 63 68 65 63  rCloseWal() chec
2bf00 6b 70 6f 69 6e 74 73 20 61 6e 64 20 64 65 6c 65  kpoints and dele
2bf10 74 65 73 20 74 68 65 20 77 72 69 74 65 2d 61 68  tes the write-ah
2bf20 65 61 64 2d 6c 6f 67 20 0a 20 20 20 20 20 20 20  ead-log .       
2bf30 20 2a 2a 20 66 69 6c 65 2e 20 41 6e 20 45 58 43   ** file. An EXC
2bf40 4c 55 53 49 56 45 20 6c 6f 63 6b 20 6d 61 79 20  LUSIVE lock may 
2bf50 73 74 69 6c 6c 20 62 65 20 68 65 6c 64 20 6f 6e  still be held on
2bf60 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
2bf70 6c 65 20 0a 20 20 20 20 20 20 20 20 2a 2a 20 61  le .        ** a
2bf80 66 74 65 72 20 61 20 73 75 63 63 65 73 73 66 75  fter a successfu
2bf90 6c 20 72 65 74 75 72 6e 2e 20 0a 20 20 20 20 20  l return. .     
2bfa0 20 20 20 2a 2f 0a 20 20 20 20 20 20 20 20 72 63     */.        rc
2bfb0 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72 43   = sqlite3PagerC
2bfc0 6c 6f 73 65 57 61 6c 28 70 50 61 67 65 72 29 3b  loseWal(pPager);
2bfd0 0a 20 20 20 20 20 20 20 20 69 66 28 20 72 63 3d  .        if( rc=
2bfe0 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
2bff0 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 50          sqlite3P
2c000 61 67 65 72 53 65 74 4a 6f 75 72 6e 61 6c 4d 6f  agerSetJournalMo
2c010 64 65 28 70 50 61 67 65 72 2c 20 65 4e 65 77 29  de(pPager, eNew)
2c020 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
2c030 20 20 7d 65 6c 73 65 20 69 66 28 20 65 4f 6c 64    }else if( eOld
2c040 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
2c050 4f 44 45 5f 4d 45 4d 4f 52 59 20 29 7b 0a 20 20  ODE_MEMORY ){.  
2c060 20 20 20 20 20 20 2f 2a 20 43 61 6e 6e 6f 74 20        /* Cannot 
2c070 74 72 61 6e 73 69 74 69 6f 6e 20 64 69 72 65 63  transition direc
2c080 74 6c 79 20 66 72 6f 6d 20 4d 45 4d 4f 52 59 20  tly from MEMORY 
2c090 74 6f 20 57 41 4c 2e 20 20 55 73 65 20 6d 6f 64  to WAL.  Use mod
2c0a0 65 20 4f 46 46 0a 20 20 20 20 20 20 20 20 2a 2a  e OFF.        **
2c0b0 20 61 73 20 61 6e 20 69 6e 74 65 72 6d 65 64 69   as an intermedi
2c0c0 61 74 65 20 2a 2f 0a 20 20 20 20 20 20 20 20 73  ate */.        s
2c0d0 71 6c 69 74 65 33 50 61 67 65 72 53 65 74 4a 6f  qlite3PagerSetJo
2c0e0 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65 72  urnalMode(pPager
2c0f0 2c 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  , PAGER_JOURNALM
2c100 4f 44 45 5f 4f 46 46 29 3b 0a 20 20 20 20 20 20  ODE_OFF);.      
2c110 7d 0a 20 20 0a 20 20 20 20 20 20 2f 2a 20 4f 70  }.  .      /* Op
2c120 65 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  en a transaction
2c130 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   on the database
2c140 20 66 69 6c 65 2e 20 52 65 67 61 72 64 6c 65 73   file. Regardles
2c150 73 20 6f 66 20 74 68 65 20 6a 6f 75 72 6e 61 6c  s of the journal
2c160 0a 20 20 20 20 20 20 2a 2a 20 6d 6f 64 65 2c 20  .      ** mode, 
2c170 74 68 69 73 20 74 72 61 6e 73 61 63 74 69 6f 6e  this transaction
2c180 20 61 6c 77 61 79 73 20 75 73 65 73 20 61 20 72   always uses a r
2c190 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 2e  ollback journal.
2c1a0 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20  .      */.      
2c1b0 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 42  assert( sqlite3B
2c1c0 74 72 65 65 49 73 49 6e 54 72 61 6e 73 28 70 42  treeIsInTrans(pB
2c1d0 74 29 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 69  t)==0 );.      i
2c1e0 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
2c1f0 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d   ){.        rc =
2c200 20 73 71 6c 69 74 65 33 42 74 72 65 65 53 65 74   sqlite3BtreeSet
2c210 56 65 72 73 69 6f 6e 28 70 42 74 2c 20 28 65 4e  Version(pBt, (eN
2c220 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41  ew==PAGER_JOURNA
2c230 4c 4d 4f 44 45 5f 57 41 4c 20 3f 20 32 20 3a 20  LMODE_WAL ? 2 : 
2c240 31 29 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  1));.      }.   
2c250 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a   }.  }.#endif /*
2c260 20 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f   ifndef SQLITE_O
2c270 4d 49 54 5f 57 41 4c 20 2a 2f 0a 0a 20 20 69 66  MIT_WAL */..  if
2c280 28 20 72 63 20 29 7b 0a 20 20 20 20 65 4e 65 77  ( rc ){.    eNew
2c290 20 3d 20 65 4f 6c 64 3b 0a 20 20 7d 0a 20 20 65   = eOld;.  }.  e
2c2a0 4e 65 77 20 3d 20 73 71 6c 69 74 65 33 50 61 67  New = sqlite3Pag
2c2b0 65 72 53 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65  erSetJournalMode
2c2c0 28 70 50 61 67 65 72 2c 20 65 4e 65 77 29 3b 0a  (pPager, eNew);.
2c2d0 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b  .  pOut = &aMem[
2c2e0 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70 4f 75 74  pOp->p2];.  pOut
2c2f0 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 53 74  ->flags = MEM_St
2c300 72 7c 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d  r|MEM_Static|MEM
2c310 5f 54 65 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e 7a  _Term;.  pOut->z
2c320 20 3d 20 28 63 68 61 72 20 2a 29 73 71 6c 69 74   = (char *)sqlit
2c330 65 33 4a 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d  e3JournalModenam
2c340 65 28 65 4e 65 77 29 3b 0a 20 20 70 4f 75 74 2d  e(eNew);.  pOut-
2c350 3e 6e 20 3d 20 73 71 6c 69 74 65 33 53 74 72 6c  >n = sqlite3Strl
2c360 65 6e 33 30 28 70 4f 75 74 2d 3e 7a 29 3b 0a 20  en30(pOut->z);. 
2c370 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 53 51 4c   pOut->enc = SQL
2c380 49 54 45 5f 55 54 46 38 3b 0a 20 20 73 71 6c 69  ITE_UTF8;.  sqli
2c390 74 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63  te3VdbeChangeEnc
2c3a0 6f 64 69 6e 67 28 70 4f 75 74 2c 20 65 6e 63 6f  oding(pOut, enco
2c3b0 64 69 6e 67 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  ding);.  break;.
2c3c0 7d 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  };.#endif /* SQL
2c3d0 49 54 45 5f 4f 4d 49 54 5f 50 52 41 47 4d 41 20  ITE_OMIT_PRAGMA 
2c3e0 2a 2f 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64  */..#if !defined
2c3f0 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 41 43  (SQLITE_OMIT_VAC
2c400 55 55 4d 29 20 26 26 20 21 64 65 66 69 6e 65 64  UUM) && !defined
2c410 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 54 54  (SQLITE_OMIT_ATT
2c420 41 43 48 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ACH)./* Opcode: 
2c430 56 61 63 75 75 6d 20 2a 20 2a 20 2a 20 2a 20 2a  Vacuum * * * * *
2c440 0a 2a 2a 0a 2a 2a 20 56 61 63 75 75 6d 20 74 68  .**.** Vacuum th
2c450 65 20 65 6e 74 69 72 65 20 64 61 74 61 62 61 73  e entire databas
2c460 65 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65 20  e.  This opcode 
2c470 77 69 6c 6c 20 63 61 75 73 65 20 6f 74 68 65 72  will cause other
2c480 20 76 69 72 74 75 61 6c 0a 2a 2a 20 6d 61 63 68   virtual.** mach
2c490 69 6e 65 73 20 74 6f 20 62 65 20 63 72 65 61 74  ines to be creat
2c4a0 65 64 20 61 6e 64 20 72 75 6e 2e 20 20 49 74 20  ed and run.  It 
2c4b0 6d 61 79 20 6e 6f 74 20 62 65 20 63 61 6c 6c 65  may not be calle
2c4c0 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 0a 2a 2a  d from within.**
2c4d0 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a   a transaction..
2c4e0 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 61 63 75 75  */.case OP_Vacuu
2c4f0 6d 3a 20 7b 0a 20 20 72 63 20 3d 20 73 71 6c 69  m: {.  rc = sqli
2c500 74 65 33 52 75 6e 56 61 63 75 75 6d 28 26 70 2d  te3RunVacuum(&p-
2c510 3e 7a 45 72 72 4d 73 67 2c 20 64 62 29 3b 0a 20  >zErrMsg, db);. 
2c520 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
2c530 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  ..#if !defined(S
2c540 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56  QLITE_OMIT_AUTOV
2c550 41 43 55 55 4d 29 0a 2f 2a 20 4f 70 63 6f 64 65  ACUUM)./* Opcode
2c560 3a 20 49 6e 63 72 56 61 63 75 75 6d 20 50 31 20  : IncrVacuum P1 
2c570 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50  P2 * * *.**.** P
2c580 65 72 66 6f 72 6d 20 61 20 73 69 6e 67 6c 65 20  erform a single 
2c590 73 74 65 70 20 6f 66 20 74 68 65 20 69 6e 63 72  step of the incr
2c5a0 65 6d 65 6e 74 61 6c 20 76 61 63 75 75 6d 20 70  emental vacuum p
2c5b0 72 6f 63 65 64 75 72 65 20 6f 6e 0a 2a 2a 20 74  rocedure on.** t
2c5c0 68 65 20 50 31 20 64 61 74 61 62 61 73 65 2e 20  he P1 database. 
2c5d0 49 66 20 74 68 65 20 76 61 63 75 75 6d 20 68 61  If the vacuum ha
2c5e0 73 20 66 69 6e 69 73 68 65 64 2c 20 6a 75 6d 70  s finished, jump
2c5f0 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a   to instruction.
2c600 2a 2a 20 50 32 2e 20 4f 74 68 65 72 77 69 73 65  ** P2. Otherwise
2c610 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74  , fall through t
2c620 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72  o the next instr
2c630 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20  uction..*/.case 
2c640 4f 50 5f 49 6e 63 72 56 61 63 75 75 6d 3a 20 7b  OP_IncrVacuum: {
2c650 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
2c660 2a 2f 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b  */.  Btree *pBt;
2c670 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
2c680 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
2c690 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61  1<db->nDb );.  a
2c6a0 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65  ssert( (p->btree
2c6b0 4d 61 73 6b 20 26 20 28 28 28 79 44 62 4d 61 73  Mask & (((yDbMas
2c6c0 6b 29 31 29 3c 3c 70 4f 70 2d 3e 70 31 29 29 21  k)1)<<pOp->p1))!
2c6d0 3d 30 20 29 3b 0a 20 20 70 42 74 20 3d 20 64 62  =0 );.  pBt = db
2c6e0 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70  ->aDb[pOp->p1].p
2c6f0 42 74 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74  Bt;.  rc = sqlit
2c700 65 33 42 74 72 65 65 49 6e 63 72 56 61 63 75 75  e3BtreeIncrVacuu
2c710 6d 28 70 42 74 29 3b 0a 20 20 69 66 28 20 72 63  m(pBt);.  if( rc
2c720 3d 3d 53 51 4c 49 54 45 5f 44 4f 4e 45 20 29 7b  ==SQLITE_DONE ){
2c730 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70  .    pc = pOp->p
2c740 32 20 2d 20 31 3b 0a 20 20 20 20 72 63 20 3d 20  2 - 1;.    rc = 
2c750 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 7d 0a 20  SQLITE_OK;.  }. 
2c760 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
2c770 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 45 78 70  ../* Opcode: Exp
2c780 69 72 65 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a  ire P1 * * * *.*
2c790 2a 0a 2a 2a 20 43 61 75 73 65 20 70 72 65 63 6f  *.** Cause preco
2c7a0 6d 70 69 6c 65 64 20 73 74 61 74 65 6d 65 6e 74  mpiled statement
2c7b0 73 20 74 6f 20 62 65 63 6f 6d 65 20 65 78 70 69  s to become expi
2c7c0 72 65 64 2e 20 41 6e 20 65 78 70 69 72 65 64 20  red. An expired 
2c7d0 73 74 61 74 65 6d 65 6e 74 0a 2a 2a 20 66 61 69  statement.** fai
2c7e0 6c 73 20 77 69 74 68 20 61 6e 20 65 72 72 6f 72  ls with an error
2c7f0 20 63 6f 64 65 20 6f 66 20 53 51 4c 49 54 45 5f   code of SQLITE_
2c800 53 43 48 45 4d 41 20 69 66 20 69 74 20 69 73 20  SCHEMA if it is 
2c810 65 76 65 72 20 65 78 65 63 75 74 65 64 20 0a 2a  ever executed .*
2c820 2a 20 28 76 69 61 20 73 71 6c 69 74 65 33 5f 73  * (via sqlite3_s
2c830 74 65 70 28 29 29 2e 0a 2a 2a 20 0a 2a 2a 20 49  tep())..** .** I
2c840 66 20 50 31 20 69 73 20 30 2c 20 74 68 65 6e 20  f P1 is 0, then 
2c850 61 6c 6c 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  all SQL statemen
2c860 74 73 20 62 65 63 6f 6d 65 20 65 78 70 69 72 65  ts become expire
2c870 64 2e 20 49 66 20 50 31 20 69 73 20 6e 6f 6e 2d  d. If P1 is non-
2c880 7a 65 72 6f 2c 0a 2a 2a 20 74 68 65 6e 20 6f 6e  zero,.** then on
2c890 6c 79 20 74 68 65 20 63 75 72 72 65 6e 74 6c 79  ly the currently
2c8a0 20 65 78 65 63 75 74 69 6e 67 20 73 74 61 74 65   executing state
2c8b0 6d 65 6e 74 20 69 73 20 61 66 66 65 63 74 65 64  ment is affected
2c8c0 2e 20 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 45 78  . .*/.case OP_Ex
2c8d0 70 69 72 65 3a 20 7b 0a 20 20 69 66 28 20 21 70  pire: {.  if( !p
2c8e0 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 73 71  Op->p1 ){.    sq
2c8f0 6c 69 74 65 33 45 78 70 69 72 65 50 72 65 70 61  lite3ExpirePrepa
2c900 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28 64 62  redStatements(db
2c910 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
2c920 70 2d 3e 65 78 70 69 72 65 64 20 3d 20 31 3b 0a  p->expired = 1;.
2c930 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
2c940 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2c950 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48 45  MIT_SHARED_CACHE
2c960 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 61 62 6c  ./* Opcode: Tabl
2c970 65 4c 6f 63 6b 20 50 31 20 50 32 20 50 33 20 50  eLock P1 P2 P3 P
2c980 34 20 2a 0a 2a 2a 0a 2a 2a 20 4f 62 74 61 69 6e  4 *.**.** Obtain
2c990 20 61 20 6c 6f 63 6b 20 6f 6e 20 61 20 70 61 72   a lock on a par
2c9a0 74 69 63 75 6c 61 72 20 74 61 62 6c 65 2e 20 54  ticular table. T
2c9b0 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
2c9c0 69 73 20 6f 6e 6c 79 20 75 73 65 64 20 77 68 65  is only used whe
2c9d0 6e 0a 2a 2a 20 74 68 65 20 73 68 61 72 65 64 2d  n.** the shared-
2c9e0 63 61 63 68 65 20 66 65 61 74 75 72 65 20 69 73  cache feature is
2c9f0 20 65 6e 61 62 6c 65 64 2e 20 0a 2a 2a 0a 2a 2a   enabled. .**.**
2ca00 20 50 31 20 69 73 20 74 68 65 20 69 6e 64 65 78   P1 is the index
2ca10 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
2ca20 20 69 6e 20 73 71 6c 69 74 65 33 2e 61 44 62 5b   in sqlite3.aDb[
2ca30 5d 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  ] of the databas
2ca40 65 0a 2a 2a 20 6f 6e 20 77 68 69 63 68 20 74 68  e.** on which th
2ca50 65 20 6c 6f 63 6b 20 69 73 20 61 63 71 75 69 72  e lock is acquir
2ca60 65 64 2e 20 20 41 20 72 65 61 64 6c 6f 63 6b 20  ed.  A readlock 
2ca70 69 73 20 6f 62 74 61 69 6e 65 64 20 69 66 20 50  is obtained if P
2ca80 33 3d 3d 30 20 6f 72 0a 2a 2a 20 61 20 77 72 69  3==0 or.** a wri
2ca90 74 65 20 6c 6f 63 6b 20 69 66 20 50 33 3d 3d 31  te lock if P3==1
2caa0 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 63 6f 6e 74 61  ..**.** P2 conta
2cab0 69 6e 73 20 74 68 65 20 72 6f 6f 74 2d 70 61 67  ins the root-pag
2cac0 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74  e of the table t
2cad0 6f 20 6c 6f 63 6b 2e 0a 2a 2a 0a 2a 2a 20 50 34  o lock..**.** P4
2cae0 20 63 6f 6e 74 61 69 6e 73 20 61 20 70 6f 69 6e   contains a poin
2caf0 74 65 72 20 74 6f 20 74 68 65 20 6e 61 6d 65 20  ter to the name 
2cb00 6f 66 20 74 68 65 20 74 61 62 6c 65 20 62 65 69  of the table bei
2cb10 6e 67 20 6c 6f 63 6b 65 64 2e 20 54 68 69 73 20  ng locked. This 
2cb20 69 73 20 6f 6e 6c 79 0a 2a 2a 20 75 73 65 64 20  is only.** used 
2cb30 74 6f 20 67 65 6e 65 72 61 74 65 20 61 6e 20 65  to generate an e
2cb40 72 72 6f 72 20 6d 65 73 73 61 67 65 20 69 66 20  rror message if 
2cb50 74 68 65 20 6c 6f 63 6b 20 63 61 6e 6e 6f 74 20  the lock cannot 
2cb60 62 65 20 6f 62 74 61 69 6e 65 64 2e 0a 2a 2f 0a  be obtained..*/.
2cb70 63 61 73 65 20 4f 50 5f 54 61 62 6c 65 4c 6f 63  case OP_TableLoc
2cb80 6b 3a 20 7b 0a 20 20 75 38 20 69 73 57 72 69 74  k: {.  u8 isWrit
2cb90 65 4c 6f 63 6b 20 3d 20 28 75 38 29 70 4f 70 2d  eLock = (u8)pOp-
2cba0 3e 70 33 3b 0a 20 20 69 66 28 20 69 73 57 72 69  >p3;.  if( isWri
2cbb0 74 65 4c 6f 63 6b 20 7c 7c 20 30 3d 3d 28 64 62  teLock || 0==(db
2cbc0 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54 45 5f 52  ->flags&SQLITE_R
2cbd0 65 61 64 55 6e 63 6f 6d 6d 69 74 74 65 64 29 20  eadUncommitted) 
2cbe0 29 7b 0a 20 20 20 20 69 6e 74 20 70 31 20 3d 20  ){.    int p1 = 
2cbf0 70 4f 70 2d 3e 70 31 3b 20 0a 20 20 20 20 61 73  pOp->p1; .    as
2cc00 73 65 72 74 28 20 70 31 3e 3d 30 20 26 26 20 70  sert( p1>=0 && p
2cc10 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 20  1<db->nDb );.   
2cc20 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72   assert( (p->btr
2cc30 65 65 4d 61 73 6b 20 26 20 28 28 28 79 44 62 4d  eeMask & (((yDbM
2cc40 61 73 6b 29 31 29 3c 3c 70 31 29 29 21 3d 30 20  ask)1)<<p1))!=0 
2cc50 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 69  );.    assert( i
2cc60 73 57 72 69 74 65 4c 6f 63 6b 3d 3d 30 20 7c 7c  sWriteLock==0 ||
2cc70 20 69 73 57 72 69 74 65 4c 6f 63 6b 3d 3d 31 20   isWriteLock==1 
2cc80 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  );.    rc = sqli
2cc90 74 65 33 42 74 72 65 65 4c 6f 63 6b 54 61 62 6c  te3BtreeLockTabl
2cca0 65 28 64 62 2d 3e 61 44 62 5b 70 31 5d 2e 70 42  e(db->aDb[p1].pB
2ccb0 74 2c 20 70 4f 70 2d 3e 70 32 2c 20 69 73 57 72  t, pOp->p2, isWr
2ccc0 69 74 65 4c 6f 63 6b 29 3b 0a 20 20 20 20 69 66  iteLock);.    if
2ccd0 28 20 28 72 63 26 30 78 46 46 29 3d 3d 53 51 4c  ( (rc&0xFF)==SQL
2cce0 49 54 45 5f 4c 4f 43 4b 45 44 20 29 7b 0a 20 20  ITE_LOCKED ){.  
2ccf0 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a      const char *
2cd00 7a 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20  z = pOp->p4.z;. 
2cd10 20 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53       sqlite3SetS
2cd20 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73  tring(&p->zErrMs
2cd30 67 2c 20 64 62 2c 20 22 64 61 74 61 62 61 73 65  g, db, "database
2cd40 20 74 61 62 6c 65 20 69 73 20 6c 6f 63 6b 65 64   table is locked
2cd50 3a 20 25 73 22 2c 20 7a 29 3b 0a 20 20 20 20 7d  : %s", z);.    }
2cd60 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
2cd70 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
2cd80 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43  _OMIT_SHARED_CAC
2cd90 48 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  HE */..#ifndef S
2cda0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
2cdb0 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64  ALTABLE./* Opcod
2cdc0 65 3a 20 56 42 65 67 69 6e 20 2a 20 2a 20 2a 20  e: VBegin * * * 
2cdd0 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 6d 61  P4 *.**.** P4 ma
2cde0 79 20 62 65 20 61 20 70 6f 69 6e 74 65 72 20 74  y be a pointer t
2cdf0 6f 20 61 6e 20 73 71 6c 69 74 65 33 5f 76 74 61  o an sqlite3_vta
2ce00 62 20 73 74 72 75 63 74 75 72 65 2e 20 49 66 20  b structure. If 
2ce10 73 6f 2c 20 63 61 6c 6c 20 74 68 65 20 0a 2a 2a  so, call the .**
2ce20 20 78 42 65 67 69 6e 20 6d 65 74 68 6f 64 20 66   xBegin method f
2ce30 6f 72 20 74 68 61 74 20 74 61 62 6c 65 2e 0a 2a  or that table..*
2ce40 2a 0a 2a 2a 20 41 6c 73 6f 2c 20 77 68 65 74 68  *.** Also, wheth
2ce50 65 72 20 6f 72 20 6e 6f 74 20 50 34 20 69 73 20  er or not P4 is 
2ce60 73 65 74 2c 20 63 68 65 63 6b 20 74 68 61 74 20  set, check that 
2ce70 74 68 69 73 20 69 73 20 6e 6f 74 20 62 65 69 6e  this is not bein
2ce80 67 20 63 61 6c 6c 65 64 20 66 72 6f 6d 0a 2a 2a  g called from.**
2ce90 20 77 69 74 68 69 6e 20 61 20 63 61 6c 6c 62 61   within a callba
2cea0 63 6b 20 74 6f 20 61 20 76 69 72 74 75 61 6c 20  ck to a virtual 
2ceb0 74 61 62 6c 65 20 78 53 79 6e 63 28 29 20 6d 65  table xSync() me
2cec0 74 68 6f 64 2e 20 49 66 20 69 74 20 69 73 2c 20  thod. If it is, 
2ced0 74 68 65 20 65 72 72 6f 72 0a 2a 2a 20 63 6f 64  the error.** cod
2cee0 65 20 77 69 6c 6c 20 62 65 20 73 65 74 20 74 6f  e will be set to
2cef0 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 2e 0a   SQLITE_LOCKED..
2cf00 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 42 65 67 69  */.case OP_VBegi
2cf10 6e 3a 20 7b 0a 20 20 56 54 61 62 6c 65 20 2a 70  n: {.  VTable *p
2cf20 56 54 61 62 3b 0a 20 20 70 56 54 61 62 20 3d 20  VTab;.  pVTab = 
2cf30 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62 3b 0a 20  pOp->p4.pVtab;. 
2cf40 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61   rc = sqlite3Vta
2cf50 62 42 65 67 69 6e 28 64 62 2c 20 70 56 54 61 62  bBegin(db, pVTab
2cf60 29 3b 0a 20 20 69 66 28 20 70 56 54 61 62 20 29  );.  if( pVTab )
2cf70 20 69 6d 70 6f 72 74 56 74 61 62 45 72 72 4d 73   importVtabErrMs
2cf80 67 28 70 2c 20 70 56 54 61 62 2d 3e 70 56 74 61  g(p, pVTab->pVta
2cf90 62 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23  b);.  break;.}.#
2cfa0 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
2cfb0 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
2cfc0 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  E */..#ifndef SQ
2cfd0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
2cfe0 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65  LTABLE./* Opcode
2cff0 3a 20 56 43 72 65 61 74 65 20 50 31 20 2a 20 2a  : VCreate P1 * *
2d000 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69   P4 *.**.** P4 i
2d010 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20  s the name of a 
2d020 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6e  virtual table in
2d030 20 64 61 74 61 62 61 73 65 20 50 31 2e 20 43 61   database P1. Ca
2d040 6c 6c 20 74 68 65 20 78 43 72 65 61 74 65 20 6d  ll the xCreate m
2d050 65 74 68 6f 64 0a 2a 2a 20 66 6f 72 20 74 68 61  ethod.** for tha
2d060 74 20 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65  t table..*/.case
2d070 20 4f 50 5f 56 43 72 65 61 74 65 3a 20 7b 0a 20   OP_VCreate: {. 
2d080 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61   rc = sqlite3Vta
2d090 62 43 61 6c 6c 43 72 65 61 74 65 28 64 62 2c 20  bCallCreate(db, 
2d0a0 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34  pOp->p1, pOp->p4
2d0b0 2e 7a 2c 20 26 70 2d 3e 7a 45 72 72 4d 73 67 29  .z, &p->zErrMsg)
2d0c0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  ;.  break;.}.#en
2d0d0 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
2d0e0 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20  IT_VIRTUALTABLE 
2d0f0 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
2d100 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
2d110 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ABLE./* Opcode: 
2d120 56 44 65 73 74 72 6f 79 20 50 31 20 2a 20 2a 20  VDestroy P1 * * 
2d130 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73  P4 *.**.** P4 is
2d140 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 76   the name of a v
2d150 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6e 20  irtual table in 
2d160 64 61 74 61 62 61 73 65 20 50 31 2e 20 20 43 61  database P1.  Ca
2d170 6c 6c 20 74 68 65 20 78 44 65 73 74 72 6f 79 20  ll the xDestroy 
2d180 6d 65 74 68 6f 64 0a 2a 2a 20 6f 66 20 74 68 61  method.** of tha
2d190 74 20 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65  t table..*/.case
2d1a0 20 4f 50 5f 56 44 65 73 74 72 6f 79 3a 20 7b 0a   OP_VDestroy: {.
2d1b0 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f    p->inVtabMetho
2d1c0 64 20 3d 20 32 3b 0a 20 20 72 63 20 3d 20 73 71  d = 2;.  rc = sq
2d1d0 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 44 65 73  lite3VtabCallDes
2d1e0 74 72 6f 79 28 64 62 2c 20 70 4f 70 2d 3e 70 31  troy(db, pOp->p1
2d1f0 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20  , pOp->p4.z);.  
2d200 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64 20  p->inVtabMethod 
2d210 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  = 0;.  break;.}.
2d220 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
2d230 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
2d240 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  LE */..#ifndef S
2d250 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
2d260 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64  ALTABLE./* Opcod
2d270 65 3a 20 56 4f 70 65 6e 20 50 31 20 2a 20 2a 20  e: VOpen P1 * * 
2d280 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73  P4 *.**.** P4 is
2d290 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20   a pointer to a 
2d2a0 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6f 62  virtual table ob
2d2b0 6a 65 63 74 2c 20 61 6e 20 73 71 6c 69 74 65 33  ject, an sqlite3
2d2c0 5f 76 74 61 62 20 73 74 72 75 63 74 75 72 65 2e  _vtab structure.
2d2d0 0a 2a 2a 20 50 31 20 69 73 20 61 20 63 75 72 73  .** P1 is a curs
2d2e0 6f 72 20 6e 75 6d 62 65 72 2e 20 20 54 68 69 73  or number.  This
2d2f0 20 6f 70 63 6f 64 65 20 6f 70 65 6e 73 20 61 20   opcode opens a 
2d300 63 75 72 73 6f 72 20 74 6f 20 74 68 65 20 76 69  cursor to the vi
2d310 72 74 75 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 61  rtual.** table a
2d320 6e 64 20 73 74 6f 72 65 73 20 74 68 61 74 20 63  nd stores that c
2d330 75 72 73 6f 72 20 69 6e 20 50 31 2e 0a 2a 2f 0a  ursor in P1..*/.
2d340 63 61 73 65 20 4f 50 5f 56 4f 70 65 6e 3a 20 7b  case OP_VOpen: {
2d350 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
2d360 43 75 72 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76  Cur;.  sqlite3_v
2d370 74 61 62 5f 63 75 72 73 6f 72 20 2a 70 56 74 61  tab_cursor *pVta
2d380 62 43 75 72 73 6f 72 3b 0a 20 20 73 71 6c 69 74  bCursor;.  sqlit
2d390 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a  e3_vtab *pVtab;.
2d3a0 20 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65    sqlite3_module
2d3b0 20 2a 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20 70 43   *pModule;..  pC
2d3c0 75 72 20 3d 20 30 3b 0a 20 20 70 56 74 61 62 43  ur = 0;.  pVtabC
2d3d0 75 72 73 6f 72 20 3d 20 30 3b 0a 20 20 70 56 74  ursor = 0;.  pVt
2d3e0 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74  ab = pOp->p4.pVt
2d3f0 61 62 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4d 6f  ab->pVtab;.  pMo
2d400 64 75 6c 65 20 3d 20 28 73 71 6c 69 74 65 33 5f  dule = (sqlite3_
2d410 6d 6f 64 75 6c 65 20 2a 29 70 56 74 61 62 2d 3e  module *)pVtab->
2d420 70 4d 6f 64 75 6c 65 3b 0a 20 20 61 73 73 65 72  pModule;.  asser
2d430 74 28 70 56 74 61 62 20 26 26 20 70 4d 6f 64 75  t(pVtab && pModu
2d440 6c 65 29 3b 0a 20 20 72 63 20 3d 20 70 4d 6f 64  le);.  rc = pMod
2d450 75 6c 65 2d 3e 78 4f 70 65 6e 28 70 56 74 61 62  ule->xOpen(pVtab
2d460 2c 20 26 70 56 74 61 62 43 75 72 73 6f 72 29 3b  , &pVtabCursor);
2d470 0a 20 20 69 6d 70 6f 72 74 56 74 61 62 45 72 72  .  importVtabErr
2d480 4d 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20  Msg(p, pVtab);. 
2d490 20 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b 3d 3d   if( SQLITE_OK==
2d4a0 72 63 20 29 7b 0a 20 20 20 20 2f 2a 20 49 6e 69  rc ){.    /* Ini
2d4b0 74 69 61 6c 69 7a 65 20 73 71 6c 69 74 65 33 5f  tialize sqlite3_
2d4c0 76 74 61 62 5f 63 75 72 73 6f 72 20 62 61 73 65  vtab_cursor base
2d4d0 20 63 6c 61 73 73 20 2a 2f 0a 20 20 20 20 70 56   class */.    pV
2d4e0 74 61 62 43 75 72 73 6f 72 2d 3e 70 56 74 61 62  tabCursor->pVtab
2d4f0 20 3d 20 70 56 74 61 62 3b 0a 0a 20 20 20 20 2f   = pVtab;..    /
2d500 2a 20 49 6e 69 74 69 61 6c 69 73 65 20 76 64 62  * Initialise vdb
2d510 65 20 63 75 72 73 6f 72 20 6f 62 6a 65 63 74 20  e cursor object 
2d520 2a 2f 0a 20 20 20 20 70 43 75 72 20 3d 20 61 6c  */.    pCur = al
2d530 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20  locateCursor(p, 
2d540 70 4f 70 2d 3e 70 31 2c 20 30 2c 20 2d 31 2c 20  pOp->p1, 0, -1, 
2d550 30 29 3b 0a 20 20 20 20 69 66 28 20 70 43 75 72  0);.    if( pCur
2d560 20 29 7b 0a 20 20 20 20 20 20 70 43 75 72 2d 3e   ){.      pCur->
2d570 70 56 74 61 62 43 75 72 73 6f 72 20 3d 20 70 56  pVtabCursor = pV
2d580 74 61 62 43 75 72 73 6f 72 3b 0a 20 20 20 20 20  tabCursor;.     
2d590 20 70 43 75 72 2d 3e 70 4d 6f 64 75 6c 65 20 3d   pCur->pModule =
2d5a0 20 70 56 74 61 62 43 75 72 73 6f 72 2d 3e 70 56   pVtabCursor->pV
2d5b0 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20  tab->pModule;.  
2d5c0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 64    }else{.      d
2d5d0 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20  b->mallocFailed 
2d5e0 3d 20 31 3b 0a 20 20 20 20 20 20 70 4d 6f 64 75  = 1;.      pModu
2d5f0 6c 65 2d 3e 78 43 6c 6f 73 65 28 70 56 74 61 62  le->xClose(pVtab
2d600 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 7d 0a 20  Cursor);.    }. 
2d610 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65   }.  break;.}.#e
2d620 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
2d630 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
2d640 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c   */..#ifndef SQL
2d650 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
2d660 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a  TABLE./* Opcode:
2d670 20 56 46 69 6c 74 65 72 20 50 31 20 50 32 20 50   VFilter P1 P2 P
2d680 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 31 20  3 P4 *.**.** P1 
2d690 69 73 20 61 20 63 75 72 73 6f 72 20 6f 70 65 6e  is a cursor open
2d6a0 65 64 20 75 73 69 6e 67 20 56 4f 70 65 6e 2e 20  ed using VOpen. 
2d6b0 20 50 32 20 69 73 20 61 6e 20 61 64 64 72 65 73   P2 is an addres
2d6c0 73 20 74 6f 20 6a 75 6d 70 20 74 6f 20 69 66 0a  s to jump to if.
2d6d0 2a 2a 20 74 68 65 20 66 69 6c 74 65 72 65 64 20  ** the filtered 
2d6e0 72 65 73 75 6c 74 20 73 65 74 20 69 73 20 65 6d  result set is em
2d6f0 70 74 79 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73  pty..**.** P4 is
2d700 20 65 69 74 68 65 72 20 4e 55 4c 4c 20 6f 72 20   either NULL or 
2d710 61 20 73 74 72 69 6e 67 20 74 68 61 74 20 77 61  a string that wa
2d720 73 20 67 65 6e 65 72 61 74 65 64 20 62 79 20 74  s generated by t
2d730 68 65 20 78 42 65 73 74 49 6e 64 65 78 0a 2a 2a  he xBestIndex.**
2d740 20 6d 65 74 68 6f 64 20 6f 66 20 74 68 65 20 6d   method of the m
2d750 6f 64 75 6c 65 2e 20 20 54 68 65 20 69 6e 74 65  odule.  The inte
2d760 72 70 72 65 74 61 74 69 6f 6e 20 6f 66 20 74 68  rpretation of th
2d770 65 20 50 34 20 73 74 72 69 6e 67 20 69 73 20 6c  e P4 string is l
2d780 65 66 74 0a 2a 2a 20 74 6f 20 74 68 65 20 6d 6f  eft.** to the mo
2d790 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74  dule implementat
2d7a0 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  ion..**.** This 
2d7b0 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74  opcode invokes t
2d7c0 68 65 20 78 46 69 6c 74 65 72 20 6d 65 74 68 6f  he xFilter metho
2d7d0 64 20 6f 6e 20 74 68 65 20 76 69 72 74 75 61 6c  d on the virtual
2d7e0 20 74 61 62 6c 65 20 73 70 65 63 69 66 69 65 64   table specified
2d7f0 0a 2a 2a 20 62 79 20 50 31 2e 20 20 54 68 65 20  .** by P1.  The 
2d800 69 6e 74 65 67 65 72 20 71 75 65 72 79 20 70 6c  integer query pl
2d810 61 6e 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20  an parameter to 
2d820 78 46 69 6c 74 65 72 20 69 73 20 73 74 6f 72 65  xFilter is store
2d830 64 20 69 6e 20 72 65 67 69 73 74 65 72 0a 2a 2a  d in register.**
2d840 20 50 33 2e 20 52 65 67 69 73 74 65 72 20 50 33   P3. Register P3
2d850 2b 31 20 73 74 6f 72 65 73 20 74 68 65 20 61 72  +1 stores the ar
2d860 67 63 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20  gc parameter to 
2d870 62 65 20 70 61 73 73 65 64 20 74 6f 20 74 68 65  be passed to the
2d880 0a 2a 2a 20 78 46 69 6c 74 65 72 20 6d 65 74 68  .** xFilter meth
2d890 6f 64 2e 20 52 65 67 69 73 74 65 72 73 20 50 33  od. Registers P3
2d8a0 2b 32 2e 2e 50 33 2b 31 2b 61 72 67 63 20 61 72  +2..P3+1+argc ar
2d8b0 65 20 74 68 65 20 61 72 67 63 0a 2a 2a 20 61 64  e the argc.** ad
2d8c0 64 69 74 69 6f 6e 61 6c 20 70 61 72 61 6d 65 74  ditional paramet
2d8d0 65 72 73 20 77 68 69 63 68 20 61 72 65 20 70 61  ers which are pa
2d8e0 73 73 65 64 20 74 6f 0a 2a 2a 20 78 46 69 6c 74  ssed to.** xFilt
2d8f0 65 72 20 61 73 20 61 72 67 76 2e 20 52 65 67 69  er as argv. Regi
2d900 73 74 65 72 20 50 33 2b 32 20 62 65 63 6f 6d 65  ster P3+2 become
2d910 73 20 61 72 67 76 5b 30 5d 20 77 68 65 6e 20 70  s argv[0] when p
2d920 61 73 73 65 64 20 74 6f 20 78 46 69 6c 74 65 72  assed to xFilter
2d930 2e 0a 2a 2a 0a 2a 2a 20 41 20 6a 75 6d 70 20 69  ..**.** A jump i
2d940 73 20 6d 61 64 65 20 74 6f 20 50 32 20 69 66 20  s made to P2 if 
2d950 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 20 61  the result set a
2d960 66 74 65 72 20 66 69 6c 74 65 72 69 6e 67 20 77  fter filtering w
2d970 6f 75 6c 64 20 62 65 20 65 6d 70 74 79 2e 0a 2a  ould be empty..*
2d980 2f 0a 63 61 73 65 20 4f 50 5f 56 46 69 6c 74 65  /.case OP_VFilte
2d990 72 3a 20 7b 20 20 20 2f 2a 20 6a 75 6d 70 20 2a  r: {   /* jump *
2d9a0 2f 0a 20 20 69 6e 74 20 6e 41 72 67 3b 0a 20 20  /.  int nArg;.  
2d9b0 69 6e 74 20 69 51 75 65 72 79 3b 0a 20 20 63 6f  int iQuery;.  co
2d9c0 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75  nst sqlite3_modu
2d9d0 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 4d  le *pModule;.  M
2d9e0 65 6d 20 2a 70 51 75 65 72 79 3b 0a 20 20 4d 65  em *pQuery;.  Me
2d9f0 6d 20 2a 70 41 72 67 63 3b 0a 20 20 73 71 6c 69  m *pArgc;.  sqli
2da00 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20  te3_vtab_cursor 
2da10 2a 70 56 74 61 62 43 75 72 73 6f 72 3b 0a 20 20  *pVtabCursor;.  
2da20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56  sqlite3_vtab *pV
2da30 74 61 62 3b 0a 20 20 56 64 62 65 43 75 72 73 6f  tab;.  VdbeCurso
2da40 72 20 2a 70 43 75 72 3b 0a 20 20 69 6e 74 20 72  r *pCur;.  int r
2da50 65 73 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 4d  es;.  int i;.  M
2da60 65 6d 20 2a 2a 61 70 41 72 67 3b 0a 0a 20 20 70  em **apArg;..  p
2da70 51 75 65 72 79 20 3d 20 26 61 4d 65 6d 5b 70 4f  Query = &aMem[pO
2da80 70 2d 3e 70 33 5d 3b 0a 20 20 70 41 72 67 63 20  p->p3];.  pArgc 
2da90 3d 20 26 70 51 75 65 72 79 5b 31 5d 3b 0a 20 20  = &pQuery[1];.  
2daa0 70 43 75 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b  pCur = p->apCsr[
2dab0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
2dac0 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70  rt( memIsValid(p
2dad0 51 75 65 72 79 29 20 29 3b 0a 20 20 52 45 47 49  Query) );.  REGI
2dae0 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
2daf0 70 33 2c 20 70 51 75 65 72 79 29 3b 0a 20 20 61  p3, pQuery);.  a
2db00 73 73 65 72 74 28 20 70 43 75 72 2d 3e 70 56 74  ssert( pCur->pVt
2db10 61 62 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 56  abCursor );.  pV
2db20 74 61 62 43 75 72 73 6f 72 20 3d 20 70 43 75 72  tabCursor = pCur
2db30 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 3b 0a 20  ->pVtabCursor;. 
2db40 20 70 56 74 61 62 20 3d 20 70 56 74 61 62 43 75   pVtab = pVtabCu
2db50 72 73 6f 72 2d 3e 70 56 74 61 62 3b 0a 20 20 70  rsor->pVtab;.  p
2db60 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e  Module = pVtab->
2db70 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20 2f 2a 20 47  pModule;..  /* G
2db80 72 61 62 20 74 68 65 20 69 6e 64 65 78 20 6e 75  rab the index nu
2db90 6d 62 65 72 20 61 6e 64 20 61 72 67 63 20 70 61  mber and argc pa
2dba0 72 61 6d 65 74 65 72 73 20 2a 2f 0a 20 20 61 73  rameters */.  as
2dbb0 73 65 72 74 28 20 28 70 51 75 65 72 79 2d 3e 66  sert( (pQuery->f
2dbc0 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 29 21 3d 30  lags&MEM_Int)!=0
2dbd0 20 26 26 20 70 41 72 67 63 2d 3e 66 6c 61 67 73   && pArgc->flags
2dbe0 3d 3d 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 6e  ==MEM_Int );.  n
2dbf0 41 72 67 20 3d 20 28 69 6e 74 29 70 41 72 67 63  Arg = (int)pArgc
2dc00 2d 3e 75 2e 69 3b 0a 20 20 69 51 75 65 72 79 20  ->u.i;.  iQuery 
2dc10 3d 20 28 69 6e 74 29 70 51 75 65 72 79 2d 3e 75  = (int)pQuery->u
2dc20 2e 69 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65  .i;..  /* Invoke
2dc30 20 74 68 65 20 78 46 69 6c 74 65 72 20 6d 65 74   the xFilter met
2dc40 68 6f 64 20 2a 2f 0a 20 20 7b 0a 20 20 20 20 72  hod */.  {.    r
2dc50 65 73 20 3d 20 30 3b 0a 20 20 20 20 61 70 41 72  es = 0;.    apAr
2dc60 67 20 3d 20 70 2d 3e 61 70 41 72 67 3b 0a 20 20  g = p->apArg;.  
2dc70 20 20 66 6f 72 28 69 20 3d 20 30 3b 20 69 3c 6e    for(i = 0; i<n
2dc80 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  Arg; i++){.     
2dc90 20 61 70 41 72 67 5b 69 5d 20 3d 20 26 70 41 72   apArg[i] = &pAr
2dca0 67 63 5b 69 2b 31 5d 3b 0a 20 20 20 20 20 20 73  gc[i+1];.      s
2dcb0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74 6f  qlite3VdbeMemSto
2dcc0 72 65 54 79 70 65 28 61 70 41 72 67 5b 69 5d 29  reType(apArg[i])
2dcd0 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 2d 3e  ;.    }..    p->
2dce0 69 6e 56 74 61 62 4d 65 74 68 6f 64 20 3d 20 31  inVtabMethod = 1
2dcf0 3b 0a 20 20 20 20 72 63 20 3d 20 70 4d 6f 64 75  ;.    rc = pModu
2dd00 6c 65 2d 3e 78 46 69 6c 74 65 72 28 70 56 74 61  le->xFilter(pVta
2dd10 62 43 75 72 73 6f 72 2c 20 69 51 75 65 72 79 2c  bCursor, iQuery,
2dd20 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 6e 41 72 67   pOp->p4.z, nArg
2dd30 2c 20 61 70 41 72 67 29 3b 0a 20 20 20 20 70 2d  , apArg);.    p-
2dd40 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64 20 3d 20  >inVtabMethod = 
2dd50 30 3b 0a 20 20 20 20 69 6d 70 6f 72 74 56 74 61  0;.    importVta
2dd60 62 45 72 72 4d 73 67 28 70 2c 20 70 56 74 61 62  bErrMsg(p, pVtab
2dd70 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53  );.    if( rc==S
2dd80 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
2dd90 20 20 72 65 73 20 3d 20 70 4d 6f 64 75 6c 65 2d    res = pModule-
2dda0 3e 78 45 6f 66 28 70 56 74 61 62 43 75 72 73 6f  >xEof(pVtabCurso
2ddb0 72 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69  r);.    }..    i
2ddc0 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20 20 20  f( res ){.      
2ddd0 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
2dde0 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 70 43  ;.    }.  }.  pC
2ddf0 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b  ur->nullRow = 0;
2de00 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  ..  break;.}.#en
2de10 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
2de20 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20  IT_VIRTUALTABLE 
2de30 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
2de40 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
2de50 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ABLE./* Opcode: 
2de60 56 43 6f 6c 75 6d 6e 20 50 31 20 50 32 20 50 33  VColumn P1 P2 P3
2de70 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65   * *.**.** Store
2de80 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   the value of th
2de90 65 20 50 32 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f  e P2-th column o
2dea0 66 0a 2a 2a 20 74 68 65 20 72 6f 77 20 6f 66 20  f.** the row of 
2deb0 74 68 65 20 76 69 72 74 75 61 6c 2d 74 61 62 6c  the virtual-tabl
2dec0 65 20 74 68 61 74 20 74 68 65 20 0a 2a 2a 20 50  e that the .** P
2ded0 31 20 63 75 72 73 6f 72 20 69 73 20 70 6f 69 6e  1 cursor is poin
2dee0 74 69 6e 67 20 74 6f 20 69 6e 74 6f 20 72 65 67  ting to into reg
2def0 69 73 74 65 72 20 50 33 2e 0a 2a 2f 0a 63 61 73  ister P3..*/.cas
2df00 65 20 4f 50 5f 56 43 6f 6c 75 6d 6e 3a 20 7b 0a  e OP_VColumn: {.
2df10 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a    sqlite3_vtab *
2df20 70 56 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73  pVtab;.  const s
2df30 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70  qlite3_module *p
2df40 4d 6f 64 75 6c 65 3b 0a 20 20 4d 65 6d 20 2a 70  Module;.  Mem *p
2df50 44 65 73 74 3b 0a 20 20 73 71 6c 69 74 65 33 5f  Dest;.  sqlite3_
2df60 63 6f 6e 74 65 78 74 20 73 43 6f 6e 74 65 78 74  context sContext
2df70 3b 0a 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  ;..  VdbeCursor 
2df80 2a 70 43 75 72 20 3d 20 70 2d 3e 61 70 43 73 72  *pCur = p->apCsr
2df90 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
2dfa0 65 72 74 28 20 70 43 75 72 2d 3e 70 56 74 61 62  ert( pCur->pVtab
2dfb0 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65  Cursor );.  asse
2dfc0 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26  rt( pOp->p3>0 &&
2dfd0 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65   pOp->p3<=p->nMe
2dfe0 6d 20 29 3b 0a 20 20 70 44 65 73 74 20 3d 20 26  m );.  pDest = &
2dff0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
2e000 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
2e010 65 28 70 2c 20 70 44 65 73 74 29 3b 0a 20 20 69  e(p, pDest);.  i
2e020 66 28 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77  f( pCur->nullRow
2e030 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
2e040 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 44  dbeMemSetNull(pD
2e050 65 73 74 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b  est);.    break;
2e060 0a 20 20 7d 0a 20 20 70 56 74 61 62 20 3d 20 70  .  }.  pVtab = p
2e070 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72  Cur->pVtabCursor
2e080 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75  ->pVtab;.  pModu
2e090 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64  le = pVtab->pMod
2e0a0 75 6c 65 3b 0a 20 20 61 73 73 65 72 74 28 20 70  ule;.  assert( p
2e0b0 4d 6f 64 75 6c 65 2d 3e 78 43 6f 6c 75 6d 6e 20  Module->xColumn 
2e0c0 29 3b 0a 20 20 6d 65 6d 73 65 74 28 26 73 43 6f  );.  memset(&sCo
2e0d0 6e 74 65 78 74 2c 20 30 2c 20 73 69 7a 65 6f 66  ntext, 0, sizeof
2e0e0 28 73 43 6f 6e 74 65 78 74 29 29 3b 0a 0a 20 20  (sContext));..  
2e0f0 2f 2a 20 54 68 65 20 6f 75 74 70 75 74 20 63 65  /* The output ce
2e100 6c 6c 20 6d 61 79 20 61 6c 72 65 61 64 79 20 68  ll may already h
2e110 61 76 65 20 61 20 62 75 66 66 65 72 20 61 6c 6c  ave a buffer all
2e120 6f 63 61 74 65 64 2e 20 4d 6f 76 65 0a 20 20 2a  ocated. Move.  *
2e130 2a 20 74 68 65 20 63 75 72 72 65 6e 74 20 63 6f  * the current co
2e140 6e 74 65 6e 74 73 20 74 6f 20 73 43 6f 6e 74 65  ntents to sConte
2e150 78 74 2e 73 20 73 6f 20 69 6e 20 63 61 73 65 20  xt.s so in case 
2e160 74 68 65 20 75 73 65 72 2d 66 75 6e 63 74 69 6f  the user-functio
2e170 6e 20 0a 20 20 2a 2a 20 63 61 6e 20 75 73 65 20  n .  ** can use 
2e180 74 68 65 20 61 6c 72 65 61 64 79 20 61 6c 6c 6f  the already allo
2e190 63 61 74 65 64 20 62 75 66 66 65 72 20 69 6e 73  cated buffer ins
2e1a0 74 65 61 64 20 6f 66 20 61 6c 6c 6f 63 61 74 69  tead of allocati
2e1b0 6e 67 20 61 20 0a 20 20 2a 2a 20 6e 65 77 20 6f  ng a .  ** new o
2e1c0 6e 65 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c 69 74  ne..  */.  sqlit
2e1d0 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28 26 73  e3VdbeMemMove(&s
2e1e0 43 6f 6e 74 65 78 74 2e 73 2c 20 70 44 65 73 74  Context.s, pDest
2e1f0 29 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46  );.  MemSetTypeF
2e200 6c 61 67 28 26 73 43 6f 6e 74 65 78 74 2e 73 2c  lag(&sContext.s,
2e210 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 0a 20 20 72   MEM_Null);..  r
2e220 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 43 6f  c = pModule->xCo
2e230 6c 75 6d 6e 28 70 43 75 72 2d 3e 70 56 74 61 62  lumn(pCur->pVtab
2e240 43 75 72 73 6f 72 2c 20 26 73 43 6f 6e 74 65 78  Cursor, &sContex
2e250 74 2c 20 70 4f 70 2d 3e 70 32 29 3b 0a 20 20 69  t, pOp->p2);.  i
2e260 6d 70 6f 72 74 56 74 61 62 45 72 72 4d 73 67 28  mportVtabErrMsg(
2e270 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 69 66 28  p, pVtab);.  if(
2e280 20 73 43 6f 6e 74 65 78 74 2e 69 73 45 72 72 6f   sContext.isErro
2e290 72 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 43  r ){.    rc = sC
2e2a0 6f 6e 74 65 78 74 2e 69 73 45 72 72 6f 72 3b 0a  ontext.isError;.
2e2b0 20 20 7d 0a 0a 20 20 2f 2a 20 43 6f 70 79 20 74    }..  /* Copy t
2e2c0 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65  he result of the
2e2d0 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 74 68 65   function to the
2e2e0 20 50 33 20 72 65 67 69 73 74 65 72 2e 20 57 65   P3 register. We
2e2f0 0a 20 20 2a 2a 20 64 6f 20 74 68 69 73 20 72 65  .  ** do this re
2e300 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68 65 74  gardless of whet
2e310 68 65 72 20 6f 72 20 6e 6f 74 20 61 6e 20 65 72  her or not an er
2e320 72 6f 72 20 6f 63 63 75 72 72 65 64 20 74 6f 20  ror occurred to 
2e330 65 6e 73 75 72 65 20 61 6e 79 0a 20 20 2a 2a 20  ensure any.  ** 
2e340 64 79 6e 61 6d 69 63 20 61 6c 6c 6f 63 61 74 69  dynamic allocati
2e350 6f 6e 20 69 6e 20 73 43 6f 6e 74 65 78 74 2e 73  on in sContext.s
2e360 20 28 61 20 4d 65 6d 20 73 74 72 75 63 74 29 20   (a Mem struct) 
2e370 69 73 20 20 72 65 6c 65 61 73 65 64 2e 0a 20 20  is  released..  
2e380 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  */.  sqlite3Vdbe
2e390 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 26  ChangeEncoding(&
2e3a0 73 43 6f 6e 74 65 78 74 2e 73 2c 20 65 6e 63 6f  sContext.s, enco
2e3b0 64 69 6e 67 29 3b 0a 20 20 73 71 6c 69 74 65 33  ding);.  sqlite3
2e3c0 56 64 62 65 4d 65 6d 4d 6f 76 65 28 70 44 65 73  VdbeMemMove(pDes
2e3d0 74 2c 20 26 73 43 6f 6e 74 65 78 74 2e 73 29 3b  t, &sContext.s);
2e3e0 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43  .  REGISTER_TRAC
2e3f0 45 28 70 4f 70 2d 3e 70 33 2c 20 70 44 65 73 74  E(pOp->p3, pDest
2e400 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f  );.  UPDATE_MAX_
2e410 42 4c 4f 42 53 49 5a 45 28 70 44 65 73 74 29 3b  BLOBSIZE(pDest);
2e420 0a 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 56  ..  if( sqlite3V
2e430 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28 70 44 65  dbeMemTooBig(pDe
2e440 73 74 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  st) ){.    goto 
2e450 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 62  too_big;.  }.  b
2e460 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  reak;.}.#endif /
2e470 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  * SQLITE_OMIT_VI
2e480 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23  RTUALTABLE */..#
2e490 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2e4a0 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
2e4b0 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 4e 65 78 74  /* Opcode: VNext
2e4c0 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
2e4d0 2a 2a 20 41 64 76 61 6e 63 65 20 76 69 72 74 75  ** Advance virtu
2e4e0 61 6c 20 74 61 62 6c 65 20 50 31 20 74 6f 20 74  al table P1 to t
2e4f0 68 65 20 6e 65 78 74 20 72 6f 77 20 69 6e 20 69  he next row in i
2e500 74 73 20 72 65 73 75 6c 74 20 73 65 74 20 61 6e  ts result set an
2e510 64 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20 69 6e 73  d.** jump to ins
2e520 74 72 75 63 74 69 6f 6e 20 50 32 2e 20 20 4f 72  truction P2.  Or
2e530 2c 20 69 66 20 74 68 65 20 76 69 72 74 75 61 6c  , if the virtual
2e540 20 74 61 62 6c 65 20 68 61 73 20 72 65 61 63 68   table has reach
2e550 65 64 0a 2a 2a 20 74 68 65 20 65 6e 64 20 6f 66  ed.** the end of
2e560 20 69 74 73 20 72 65 73 75 6c 74 20 73 65 74 2c   its result set,
2e570 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75   then fall throu
2e580 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69  gh to the next i
2e590 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63  nstruction..*/.c
2e5a0 61 73 65 20 4f 50 5f 56 4e 65 78 74 3a 20 7b 20  ase OP_VNext: { 
2e5b0 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 73    /* jump */.  s
2e5c0 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74  qlite3_vtab *pVt
2e5d0 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69  ab;.  const sqli
2e5e0 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64  te3_module *pMod
2e5f0 75 6c 65 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a  ule;.  int res;.
2e600 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
2e610 75 72 3b 0a 0a 20 20 72 65 73 20 3d 20 30 3b 0a  ur;..  res = 0;.
2e620 20 20 70 43 75 72 20 3d 20 70 2d 3e 61 70 43 73    pCur = p->apCs
2e630 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
2e640 73 65 72 74 28 20 70 43 75 72 2d 3e 70 56 74 61  sert( pCur->pVta
2e650 62 43 75 72 73 6f 72 20 29 3b 0a 20 20 69 66 28  bCursor );.  if(
2e660 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 29   pCur->nullRow )
2e670 7b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  {.    break;.  }
2e680 0a 20 20 70 56 74 61 62 20 3d 20 70 43 75 72 2d  .  pVtab = pCur-
2e690 3e 70 56 74 61 62 43 75 72 73 6f 72 2d 3e 70 56  >pVtabCursor->pV
2e6a0 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d  tab;.  pModule =
2e6b0 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b   pVtab->pModule;
2e6c0 0a 20 20 61 73 73 65 72 74 28 20 70 4d 6f 64 75  .  assert( pModu
2e6d0 6c 65 2d 3e 78 4e 65 78 74 20 29 3b 0a 0a 20 20  le->xNext );..  
2e6e0 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 78 4e  /* Invoke the xN
2e6f0 65 78 74 28 29 20 6d 65 74 68 6f 64 20 6f 66 20  ext() method of 
2e700 74 68 65 20 6d 6f 64 75 6c 65 2e 20 54 68 65 72  the module. Ther
2e710 65 20 69 73 20 6e 6f 20 77 61 79 20 66 6f 72 20  e is no way for 
2e720 74 68 65 0a 20 20 2a 2a 20 75 6e 64 65 72 6c 79  the.  ** underly
2e730 69 6e 67 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ing implementati
2e740 6f 6e 20 74 6f 20 72 65 74 75 72 6e 20 61 6e 20  on to return an 
2e750 65 72 72 6f 72 20 69 66 20 6f 6e 65 20 6f 63 63  error if one occ
2e760 75 72 73 20 64 75 72 69 6e 67 0a 20 20 2a 2a 20  urs during.  ** 
2e770 78 4e 65 78 74 28 29 2e 20 49 6e 73 74 65 61 64  xNext(). Instead
2e780 2c 20 69 66 20 61 6e 20 65 72 72 6f 72 20 6f 63  , if an error oc
2e790 63 75 72 73 2c 20 74 72 75 65 20 69 73 20 72 65  curs, true is re
2e7a0 74 75 72 6e 65 64 20 28 69 6e 64 69 63 61 74 69  turned (indicati
2e7b0 6e 67 20 74 68 61 74 20 0a 20 20 2a 2a 20 64 61  ng that .  ** da
2e7c0 74 61 20 69 73 20 61 76 61 69 6c 61 62 6c 65 29  ta is available)
2e7d0 20 61 6e 64 20 74 68 65 20 65 72 72 6f 72 20 63   and the error c
2e7e0 6f 64 65 20 72 65 74 75 72 6e 65 64 20 77 68 65  ode returned whe
2e7f0 6e 20 78 43 6f 6c 75 6d 6e 20 6f 72 0a 20 20 2a  n xColumn or.  *
2e800 2a 20 73 6f 6d 65 20 6f 74 68 65 72 20 6d 65 74  * some other met
2e810 68 6f 64 20 69 73 20 6e 65 78 74 20 69 6e 76 6f  hod is next invo
2e820 6b 65 64 20 6f 6e 20 74 68 65 20 73 61 76 65 20  ked on the save 
2e830 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 63 75  virtual table cu
2e840 72 73 6f 72 2e 0a 20 20 2a 2f 0a 20 20 70 2d 3e  rsor..  */.  p->
2e850 69 6e 56 74 61 62 4d 65 74 68 6f 64 20 3d 20 31  inVtabMethod = 1
2e860 3b 0a 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65  ;.  rc = pModule
2e870 2d 3e 78 4e 65 78 74 28 70 43 75 72 2d 3e 70 56  ->xNext(pCur->pV
2e880 74 61 62 43 75 72 73 6f 72 29 3b 0a 20 20 70 2d  tabCursor);.  p-
2e890 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64 20 3d 20  >inVtabMethod = 
2e8a0 30 3b 0a 20 20 69 6d 70 6f 72 74 56 74 61 62 45  0;.  importVtabE
2e8b0 72 72 4d 73 67 28 70 2c 20 70 56 74 61 62 29 3b  rrMsg(p, pVtab);
2e8c0 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54  .  if( rc==SQLIT
2e8d0 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 65 73 20  E_OK ){.    res 
2e8e0 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 45 6f 66 28  = pModule->xEof(
2e8f0 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f  pCur->pVtabCurso
2e900 72 29 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 21  r);.  }..  if( !
2e910 72 65 73 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66  res ){.    /* If
2e920 20 74 68 65 72 65 20 69 73 20 64 61 74 61 2c 20   there is data, 
2e930 6a 75 6d 70 20 74 6f 20 50 32 20 2a 2f 0a 20 20  jump to P2 */.  
2e940 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
2e950 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b   1;.  }.  break;
2e960 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
2e970 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
2e980 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65  TABLE */..#ifnde
2e990 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
2e9a0 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70  RTUALTABLE./* Op
2e9b0 63 6f 64 65 3a 20 56 52 65 6e 61 6d 65 20 50 31  code: VRename P1
2e9c0 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20   * * P4 *.**.** 
2e9d0 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20  P4 is a pointer 
2e9e0 74 6f 20 61 20 76 69 72 74 75 61 6c 20 74 61 62  to a virtual tab
2e9f0 6c 65 20 6f 62 6a 65 63 74 2c 20 61 6e 20 73 71  le object, an sq
2ea00 6c 69 74 65 33 5f 76 74 61 62 20 73 74 72 75 63  lite3_vtab struc
2ea10 74 75 72 65 2e 0a 2a 2a 20 54 68 69 73 20 6f 70  ture..** This op
2ea20 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74 68 65  code invokes the
2ea30 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 78   corresponding x
2ea40 52 65 6e 61 6d 65 20 6d 65 74 68 6f 64 2e 20 54  Rename method. T
2ea50 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 72  he value.** in r
2ea60 65 67 69 73 74 65 72 20 50 31 20 69 73 20 70 61  egister P1 is pa
2ea70 73 73 65 64 20 61 73 20 74 68 65 20 7a 4e 61 6d  ssed as the zNam
2ea80 65 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68  e argument to th
2ea90 65 20 78 52 65 6e 61 6d 65 20 6d 65 74 68 6f 64  e xRename method
2eaa0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 52 65  ..*/.case OP_VRe
2eab0 6e 61 6d 65 3a 20 7b 0a 20 20 73 71 6c 69 74 65  name: {.  sqlite
2eac0 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20  3_vtab *pVtab;. 
2ead0 20 4d 65 6d 20 2a 70 4e 61 6d 65 3b 0a 0a 20 20   Mem *pName;..  
2eae0 70 56 74 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e  pVtab = pOp->p4.
2eaf0 70 56 74 61 62 2d 3e 70 56 74 61 62 3b 0a 20 20  pVtab->pVtab;.  
2eb00 70 4e 61 6d 65 20 3d 20 26 61 4d 65 6d 5b 70 4f  pName = &aMem[pO
2eb10 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
2eb20 28 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65  ( pVtab->pModule
2eb30 2d 3e 78 52 65 6e 61 6d 65 20 29 3b 0a 20 20 61  ->xRename );.  a
2eb40 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
2eb50 64 28 70 4e 61 6d 65 29 20 29 3b 0a 20 20 52 45  d(pName) );.  RE
2eb60 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
2eb70 2d 3e 70 31 2c 20 70 4e 61 6d 65 29 3b 0a 20 20  ->p1, pName);.  
2eb80 61 73 73 65 72 74 28 20 70 4e 61 6d 65 2d 3e 66  assert( pName->f
2eb90 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74 72 20 29  lags & MEM_Str )
2eba0 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 70 4e  ;.  testcase( pN
2ebb0 61 6d 65 2d 3e 65 6e 63 3d 3d 53 51 4c 49 54 45  ame->enc==SQLITE
2ebc0 5f 55 54 46 38 20 29 3b 0a 20 20 74 65 73 74 63  _UTF8 );.  testc
2ebd0 61 73 65 28 20 70 4e 61 6d 65 2d 3e 65 6e 63 3d  ase( pName->enc=
2ebe0 3d 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45 20  =SQLITE_UTF16BE 
2ebf0 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 70  );.  testcase( p
2ec00 4e 61 6d 65 2d 3e 65 6e 63 3d 3d 53 51 4c 49 54  Name->enc==SQLIT
2ec10 45 5f 55 54 46 31 36 4c 45 20 29 3b 0a 20 20 72  E_UTF16LE );.  r
2ec20 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43  c = sqlite3VdbeC
2ec30 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 4e  hangeEncoding(pN
2ec40 61 6d 65 2c 20 53 51 4c 49 54 45 5f 55 54 46 38  ame, SQLITE_UTF8
2ec50 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  );.  if( rc==SQL
2ec60 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 63  ITE_OK ){.    rc
2ec70 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c   = pVtab->pModul
2ec80 65 2d 3e 78 52 65 6e 61 6d 65 28 70 56 74 61 62  e->xRename(pVtab
2ec90 2c 20 70 4e 61 6d 65 2d 3e 7a 29 3b 0a 20 20 20  , pName->z);.   
2eca0 20 69 6d 70 6f 72 74 56 74 61 62 45 72 72 4d 73   importVtabErrMs
2ecb0 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 20  g(p, pVtab);.   
2ecc0 20 70 2d 3e 65 78 70 69 72 65 64 20 3d 20 30 3b   p->expired = 0;
2ecd0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
2ece0 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20  #endif..#ifndef 
2ecf0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
2ed00 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f  UALTABLE./* Opco
2ed10 64 65 3a 20 56 55 70 64 61 74 65 20 50 31 20 50  de: VUpdate P1 P
2ed20 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20  2 P3 P4 *.**.** 
2ed30 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20  P4 is a pointer 
2ed40 74 6f 20 61 20 76 69 72 74 75 61 6c 20 74 61 62  to a virtual tab
2ed50 6c 65 20 6f 62 6a 65 63 74 2c 20 61 6e 20 73 71  le object, an sq
2ed60 6c 69 74 65 33 5f 76 74 61 62 20 73 74 72 75 63  lite3_vtab struc
2ed70 74 75 72 65 2e 0a 2a 2a 20 54 68 69 73 20 6f 70  ture..** This op
2ed80 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74 68 65  code invokes the
2ed90 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 78   corresponding x
2eda0 55 70 64 61 74 65 20 6d 65 74 68 6f 64 2e 20 50  Update method. P
2edb0 32 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72 65 20  2 values.** are 
2edc0 63 6f 6e 74 69 67 75 6f 75 73 20 6d 65 6d 6f 72  contiguous memor
2edd0 79 20 63 65 6c 6c 73 20 73 74 61 72 74 69 6e 67  y cells starting
2ede0 20 61 74 20 50 33 20 74 6f 20 70 61 73 73 20 74   at P3 to pass t
2edf0 6f 20 74 68 65 20 78 55 70 64 61 74 65 20 0a 2a  o the xUpdate .*
2ee00 2a 20 69 6e 76 6f 63 61 74 69 6f 6e 2e 20 54 68  * invocation. Th
2ee10 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
2ee20 74 65 72 20 28 50 33 2b 50 32 2d 31 29 20 63 6f  ter (P3+P2-1) co
2ee30 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65  rresponds to the
2ee40 20 0a 2a 2a 20 70 32 74 68 20 65 6c 65 6d 65 6e   .** p2th elemen
2ee50 74 20 6f 66 20 74 68 65 20 61 72 67 76 20 61 72  t of the argv ar
2ee60 72 61 79 20 70 61 73 73 65 64 20 74 6f 20 78 55  ray passed to xU
2ee70 70 64 61 74 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  pdate..**.** The
2ee80 20 78 55 70 64 61 74 65 20 6d 65 74 68 6f 64 20   xUpdate method 
2ee90 77 69 6c 6c 20 64 6f 20 61 20 44 45 4c 45 54 45  will do a DELETE
2eea0 20 6f 72 20 61 6e 20 49 4e 53 45 52 54 20 6f 72   or an INSERT or
2eeb0 20 62 6f 74 68 2e 0a 2a 2a 20 54 68 65 20 61 72   both..** The ar
2eec0 67 76 5b 30 5d 20 65 6c 65 6d 65 6e 74 20 28 77  gv[0] element (w
2eed0 68 69 63 68 20 63 6f 72 72 65 73 70 6f 6e 64 73  hich corresponds
2eee0 20 74 6f 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20   to memory cell 
2eef0 50 33 29 0a 2a 2a 20 69 73 20 74 68 65 20 72 6f  P3).** is the ro
2ef00 77 69 64 20 6f 66 20 61 20 72 6f 77 20 74 6f 20  wid of a row to 
2ef10 64 65 6c 65 74 65 2e 20 20 49 66 20 61 72 67 76  delete.  If argv
2ef20 5b 30 5d 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e  [0] is NULL then
2ef30 20 6e 6f 20 0a 2a 2a 20 64 65 6c 65 74 69 6f 6e   no .** deletion
2ef40 20 6f 63 63 75 72 73 2e 20 20 54 68 65 20 61 72   occurs.  The ar
2ef50 67 76 5b 31 5d 20 65 6c 65 6d 65 6e 74 20 69 73  gv[1] element is
2ef60 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68   the rowid of th
2ef70 65 20 6e 65 77 20 0a 2a 2a 20 72 6f 77 2e 20 20  e new .** row.  
2ef80 54 68 69 73 20 63 61 6e 20 62 65 20 4e 55 4c 4c  This can be NULL
2ef90 20 74 6f 20 68 61 76 65 20 74 68 65 20 76 69 72   to have the vir
2efa0 74 75 61 6c 20 74 61 62 6c 65 20 73 65 6c 65 63  tual table selec
2efb0 74 20 74 68 65 20 6e 65 77 20 0a 2a 2a 20 72 6f  t the new .** ro
2efc0 77 69 64 20 66 6f 72 20 69 74 73 65 6c 66 2e 20  wid for itself. 
2efd0 20 54 68 65 20 73 75 62 73 65 71 75 65 6e 74 20   The subsequent 
2efe0 65 6c 65 6d 65 6e 74 73 20 69 6e 20 74 68 65 20  elements in the 
2eff0 61 72 72 61 79 20 61 72 65 20 0a 2a 2a 20 74 68  array are .** th
2f000 65 20 76 61 6c 75 65 73 20 6f 66 20 63 6f 6c 75  e values of colu
2f010 6d 6e 73 20 69 6e 20 74 68 65 20 6e 65 77 20 72  mns in the new r
2f020 6f 77 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 32 3d  ow..**.** If P2=
2f030 3d 31 20 74 68 65 6e 20 6e 6f 20 69 6e 73 65 72  =1 then no inser
2f040 74 20 69 73 20 70 65 72 66 6f 72 6d 65 64 2e 20  t is performed. 
2f050 20 61 72 67 76 5b 30 5d 20 69 73 20 74 68 65 20   argv[0] is the 
2f060 72 6f 77 69 64 20 6f 66 0a 2a 2a 20 61 20 72 6f  rowid of.** a ro
2f070 77 20 74 6f 20 64 65 6c 65 74 65 2e 0a 2a 2a 0a  w to delete..**.
2f080 2a 2a 20 50 31 20 69 73 20 61 20 62 6f 6f 6c 65  ** P1 is a boole
2f090 61 6e 20 66 6c 61 67 2e 20 49 66 20 69 74 20 69  an flag. If it i
2f0a0 73 20 73 65 74 20 74 6f 20 74 72 75 65 20 61 6e  s set to true an
2f0b0 64 20 74 68 65 20 78 55 70 64 61 74 65 20 63 61  d the xUpdate ca
2f0c0 6c 6c 0a 2a 2a 20 69 73 20 73 75 63 63 65 73 73  ll.** is success
2f0d0 66 75 6c 2c 20 74 68 65 6e 20 74 68 65 20 76 61  ful, then the va
2f0e0 6c 75 65 20 72 65 74 75 72 6e 65 64 20 62 79 20  lue returned by 
2f0f0 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e 73  sqlite3_last_ins
2f100 65 72 74 5f 72 6f 77 69 64 28 29 20 0a 2a 2a 20  ert_rowid() .** 
2f110 69 73 20 73 65 74 20 74 6f 20 74 68 65 20 76 61  is set to the va
2f120 6c 75 65 20 6f 66 20 74 68 65 20 72 6f 77 69 64  lue of the rowid
2f130 20 66 6f 72 20 74 68 65 20 72 6f 77 20 6a 75 73   for the row jus
2f140 74 20 69 6e 73 65 72 74 65 64 2e 0a 2a 2f 0a 63  t inserted..*/.c
2f150 61 73 65 20 4f 50 5f 56 55 70 64 61 74 65 3a 20  ase OP_VUpdate: 
2f160 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62  {.  sqlite3_vtab
2f170 20 2a 70 56 74 61 62 3b 0a 20 20 73 71 6c 69 74   *pVtab;.  sqlit
2f180 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75  e3_module *pModu
2f190 6c 65 3b 0a 20 20 69 6e 74 20 6e 41 72 67 3b 0a  le;.  int nArg;.
2f1a0 20 20 69 6e 74 20 69 3b 0a 20 20 73 71 6c 69 74    int i;.  sqlit
2f1b0 65 5f 69 6e 74 36 34 20 72 6f 77 69 64 3b 0a 20  e_int64 rowid;. 
2f1c0 20 4d 65 6d 20 2a 2a 61 70 41 72 67 3b 0a 20 20   Mem **apArg;.  
2f1d0 4d 65 6d 20 2a 70 58 3b 0a 0a 20 20 61 73 73 65  Mem *pX;..  asse
2f1e0 72 74 28 20 70 4f 70 2d 3e 70 32 3d 3d 31 20 20  rt( pOp->p2==1  
2f1f0 20 20 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 35        || pOp->p5
2f200 3d 3d 4f 45 5f 46 61 69 6c 20 20 20 7c 7c 20 70  ==OE_Fail   || p
2f210 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 52 6f 6c 6c 62  Op->p5==OE_Rollb
2f220 61 63 6b 20 0a 20 20 20 20 20 20 20 7c 7c 20 70  ack .       || p
2f230 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 41 62 6f 72 74  Op->p5==OE_Abort
2f240 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f   || pOp->p5==OE_
2f250 49 67 6e 6f 72 65 20 7c 7c 20 70 4f 70 2d 3e 70  Ignore || pOp->p
2f260 35 3d 3d 4f 45 5f 52 65 70 6c 61 63 65 0a 20 20  5==OE_Replace.  
2f270 29 3b 0a 20 20 70 56 74 61 62 20 3d 20 70 4f 70  );.  pVtab = pOp
2f280 2d 3e 70 34 2e 70 56 74 61 62 2d 3e 70 56 74 61  ->p4.pVtab->pVta
2f290 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20 28  b;.  pModule = (
2f2a0 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a  sqlite3_module *
2f2b0 29 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b  )pVtab->pModule;
2f2c0 0a 20 20 6e 41 72 67 20 3d 20 70 4f 70 2d 3e 70  .  nArg = pOp->p
2f2d0 32 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  2;.  assert( pOp
2f2e0 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 56 54 41  ->p4type==P4_VTA
2f2f0 42 20 29 3b 0a 20 20 69 66 28 20 41 4c 57 41 59  B );.  if( ALWAY
2f300 53 28 70 4d 6f 64 75 6c 65 2d 3e 78 55 70 64 61  S(pModule->xUpda
2f310 74 65 29 20 29 7b 0a 20 20 20 20 75 38 20 76 74  te) ){.    u8 vt
2f320 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 20 3d 20 64  abOnConflict = d
2f330 62 2d 3e 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63  b->vtabOnConflic
2f340 74 3b 0a 20 20 20 20 61 70 41 72 67 20 3d 20 70  t;.    apArg = p
2f350 2d 3e 61 70 41 72 67 3b 0a 20 20 20 20 70 58 20  ->apArg;.    pX 
2f360 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
2f370 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69  ;.    for(i=0; i
2f380 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20  <nArg; i++){.   
2f390 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
2f3a0 56 61 6c 69 64 28 70 58 29 20 29 3b 0a 20 20 20  Valid(pX) );.   
2f3b0 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61     memAboutToCha
2f3c0 6e 67 65 28 70 2c 20 70 58 29 3b 0a 20 20 20 20  nge(p, pX);.    
2f3d0 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
2f3e0 53 74 6f 72 65 54 79 70 65 28 70 58 29 3b 0a 20  StoreType(pX);. 
2f3f0 20 20 20 20 20 61 70 41 72 67 5b 69 5d 20 3d 20       apArg[i] = 
2f400 70 58 3b 0a 20 20 20 20 20 20 70 58 2b 2b 3b 0a  pX;.      pX++;.
2f410 20 20 20 20 7d 0a 20 20 20 20 64 62 2d 3e 76 74      }.    db->vt
2f420 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 20 3d 20 70  abOnConflict = p
2f430 4f 70 2d 3e 70 35 3b 0a 20 20 20 20 72 63 20 3d  Op->p5;.    rc =
2f440 20 70 4d 6f 64 75 6c 65 2d 3e 78 55 70 64 61 74   pModule->xUpdat
2f450 65 28 70 56 74 61 62 2c 20 6e 41 72 67 2c 20 61  e(pVtab, nArg, a
2f460 70 41 72 67 2c 20 26 72 6f 77 69 64 29 3b 0a 20  pArg, &rowid);. 
2f470 20 20 20 64 62 2d 3e 76 74 61 62 4f 6e 43 6f 6e     db->vtabOnCon
2f480 66 6c 69 63 74 20 3d 20 76 74 61 62 4f 6e 43 6f  flict = vtabOnCo
2f490 6e 66 6c 69 63 74 3b 0a 20 20 20 20 69 6d 70 6f  nflict;.    impo
2f4a0 72 74 56 74 61 62 45 72 72 4d 73 67 28 70 2c 20  rtVtabErrMsg(p, 
2f4b0 70 56 74 61 62 29 3b 0a 20 20 20 20 69 66 28 20  pVtab);.    if( 
2f4c0 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26  rc==SQLITE_OK &&
2f4d0 20 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20   pOp->p1 ){.    
2f4e0 20 20 61 73 73 65 72 74 28 20 6e 41 72 67 3e 31    assert( nArg>1
2f4f0 20 26 26 20 61 70 41 72 67 5b 30 5d 20 26 26 20   && apArg[0] && 
2f500 28 61 70 41 72 67 5b 30 5d 2d 3e 66 6c 61 67 73  (apArg[0]->flags
2f510 26 4d 45 4d 5f 4e 75 6c 6c 29 20 29 3b 0a 20 20  &MEM_Null) );.  
2f520 20 20 20 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69      db->lastRowi
2f530 64 20 3d 20 6c 61 73 74 52 6f 77 69 64 20 3d 20  d = lastRowid = 
2f540 72 6f 77 69 64 3b 0a 20 20 20 20 7d 0a 20 20 20  rowid;.    }.   
2f550 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
2f560 43 4f 4e 53 54 52 41 49 4e 54 20 26 26 20 70 4f  CONSTRAINT && pO
2f570 70 2d 3e 70 34 2e 70 56 74 61 62 2d 3e 62 43 6f  p->p4.pVtab->bCo
2f580 6e 73 74 72 61 69 6e 74 20 29 7b 0a 20 20 20 20  nstraint ){.    
2f590 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 3d 3d 4f    if( pOp->p5==O
2f5a0 45 5f 49 67 6e 6f 72 65 20 29 7b 0a 20 20 20 20  E_Ignore ){.    
2f5b0 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
2f5c0 4f 4b 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  OK;.      }else{
2f5d0 0a 20 20 20 20 20 20 20 20 70 2d 3e 65 72 72 6f  .        p->erro
2f5e0 72 41 63 74 69 6f 6e 20 3d 20 28 28 70 4f 70 2d  rAction = ((pOp-
2f5f0 3e 70 35 3d 3d 4f 45 5f 52 65 70 6c 61 63 65 29  >p5==OE_Replace)
2f600 20 3f 20 4f 45 5f 41 62 6f 72 74 20 3a 20 70 4f   ? OE_Abort : pO
2f610 70 2d 3e 70 35 29 3b 0a 20 20 20 20 20 20 7d 0a  p->p5);.      }.
2f620 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
2f630 20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20   p->nChange++;. 
2f640 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b     }.  }.  break
2f650 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ;.}.#endif /* SQ
2f660 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
2f670 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64  LTABLE */..#ifnd
2f680 65 66 20 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ef  SQLITE_OMIT_
2f690 50 41 47 45 52 5f 50 52 41 47 4d 41 53 0a 2f 2a  PAGER_PRAGMAS./*
2f6a0 20 4f 70 63 6f 64 65 3a 20 50 61 67 65 63 6f 75   Opcode: Pagecou
2f6b0 6e 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  nt P1 P2 * * *.*
2f6c0 2a 0a 2a 2a 20 57 72 69 74 65 20 74 68 65 20 63  *.** Write the c
2f6d0 75 72 72 65 6e 74 20 6e 75 6d 62 65 72 20 6f 66  urrent number of
2f6e0 20 70 61 67 65 73 20 69 6e 20 64 61 74 61 62 61   pages in databa
2f6f0 73 65 20 50 31 20 74 6f 20 6d 65 6d 6f 72 79 20  se P1 to memory 
2f700 63 65 6c 6c 20 50 32 2e 0a 2a 2f 0a 63 61 73 65  cell P2..*/.case
2f710 20 4f 50 5f 50 61 67 65 63 6f 75 6e 74 3a 20 7b   OP_Pagecount: {
2f720 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f              /* o
2f730 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a  ut2-prerelease *
2f740 2f 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20  /.  pOut->u.i = 
2f750 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74  sqlite3BtreeLast
2f760 50 61 67 65 28 64 62 2d 3e 61 44 62 5b 70 4f 70  Page(db->aDb[pOp
2f770 2d 3e 70 31 5d 2e 70 42 74 29 3b 0a 20 20 62 72  ->p1].pBt);.  br
2f780 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a  eak;.}.#endif...
2f790 23 69 66 6e 64 65 66 20 20 53 51 4c 49 54 45 5f  #ifndef  SQLITE_
2f7a0 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d  OMIT_PAGER_PRAGM
2f7b0 41 53 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 61  AS./* Opcode: Ma
2f7c0 78 50 67 63 6e 74 20 50 31 20 50 32 20 50 33 20  xPgcnt P1 P2 P3 
2f7d0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 72 79 20 74 6f  * *.**.** Try to
2f7e0 20 73 65 74 20 74 68 65 20 6d 61 78 69 6d 75 6d   set the maximum
2f7f0 20 70 61 67 65 20 63 6f 75 6e 74 20 66 6f 72 20   page count for 
2f800 64 61 74 61 62 61 73 65 20 50 31 20 74 6f 20 74  database P1 to t
2f810 68 65 20 76 61 6c 75 65 20 69 6e 20 50 33 2e 0a  he value in P3..
2f820 2a 2a 20 44 6f 20 6e 6f 74 20 6c 65 74 20 74 68  ** Do not let th
2f830 65 20 6d 61 78 69 6d 75 6d 20 70 61 67 65 20 63  e maximum page c
2f840 6f 75 6e 74 20 66 61 6c 6c 20 62 65 6c 6f 77 20  ount fall below 
2f850 74 68 65 20 63 75 72 72 65 6e 74 20 70 61 67 65  the current page
2f860 20 63 6f 75 6e 74 20 61 6e 64 0a 2a 2a 20 64 6f   count and.** do
2f870 20 6e 6f 74 20 63 68 61 6e 67 65 20 74 68 65 20   not change the 
2f880 6d 61 78 69 6d 75 6d 20 70 61 67 65 20 63 6f 75  maximum page cou
2f890 6e 74 20 76 61 6c 75 65 20 69 66 20 50 33 3d 3d  nt value if P3==
2f8a0 30 2e 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 74  0..**.** Store t
2f8b0 68 65 20 6d 61 78 69 6d 75 6d 20 70 61 67 65 20  he maximum page 
2f8c0 63 6f 75 6e 74 20 61 66 74 65 72 20 74 68 65 20  count after the 
2f8d0 63 68 61 6e 67 65 20 69 6e 20 72 65 67 69 73 74  change in regist
2f8e0 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f  er P2..*/.case O
2f8f0 50 5f 4d 61 78 50 67 63 6e 74 3a 20 7b 20 20 20  P_MaxPgcnt: {   
2f900 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
2f910 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20  -prerelease */. 
2f920 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 6e 65   unsigned int ne
2f930 77 4d 61 78 3b 0a 20 20 42 74 72 65 65 20 2a 70  wMax;.  Btree *p
2f940 42 74 3b 0a 0a 20 20 70 42 74 20 3d 20 64 62 2d  Bt;..  pBt = db-
2f950 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42  >aDb[pOp->p1].pB
2f960 74 3b 0a 20 20 6e 65 77 4d 61 78 20 3d 20 30 3b  t;.  newMax = 0;
2f970 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 33 20 29  .  if( pOp->p3 )
2f980 7b 0a 20 20 20 20 6e 65 77 4d 61 78 20 3d 20 73  {.    newMax = s
2f990 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74 50  qlite3BtreeLastP
2f9a0 61 67 65 28 70 42 74 29 3b 0a 20 20 20 20 69 66  age(pBt);.    if
2f9b0 28 20 6e 65 77 4d 61 78 20 3c 20 28 75 6e 73 69  ( newMax < (unsi
2f9c0 67 6e 65 64 29 70 4f 70 2d 3e 70 33 20 29 20 6e  gned)pOp->p3 ) n
2f9d0 65 77 4d 61 78 20 3d 20 28 75 6e 73 69 67 6e 65  ewMax = (unsigne
2f9e0 64 29 70 4f 70 2d 3e 70 33 3b 0a 20 20 7d 0a 20  d)pOp->p3;.  }. 
2f9f0 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 73 71 6c   pOut->u.i = sql
2fa00 69 74 65 33 42 74 72 65 65 4d 61 78 50 61 67 65  ite3BtreeMaxPage
2fa10 43 6f 75 6e 74 28 70 42 74 2c 20 6e 65 77 4d 61  Count(pBt, newMa
2fa20 78 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23  x);.  break;.}.#
2fa30 65 6e 64 69 66 0a 0a 0a 23 69 66 6e 64 65 66 20  endif...#ifndef 
2fa40 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 41 43  SQLITE_OMIT_TRAC
2fa50 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 72 61  E./* Opcode: Tra
2fa60 63 65 20 2a 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a  ce * * * P4 *.**
2fa70 0a 2a 2a 20 49 66 20 74 72 61 63 69 6e 67 20 69  .** If tracing i
2fa80 73 20 65 6e 61 62 6c 65 64 20 28 62 79 20 74 68  s enabled (by th
2fa90 65 20 73 71 6c 69 74 65 33 5f 74 72 61 63 65 28  e sqlite3_trace(
2faa0 29 29 20 69 6e 74 65 72 66 61 63 65 2c 20 74 68  )) interface, th
2fab0 65 6e 0a 2a 2a 20 74 68 65 20 55 54 46 2d 38 20  en.** the UTF-8 
2fac0 73 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e 65 64  string contained
2fad0 20 69 6e 20 50 34 20 69 73 20 65 6d 69 74 74 65   in P4 is emitte
2fae0 64 20 6f 6e 20 74 68 65 20 74 72 61 63 65 20 63  d on the trace c
2faf0 61 6c 6c 62 61 63 6b 2e 0a 2a 2f 0a 63 61 73 65  allback..*/.case
2fb00 20 4f 50 5f 54 72 61 63 65 3a 20 7b 0a 20 20 63   OP_Trace: {.  c
2fb10 68 61 72 20 2a 7a 54 72 61 63 65 3b 0a 20 20 63  har *zTrace;.  c
2fb20 68 61 72 20 2a 7a 3b 0a 0a 20 20 69 66 28 20 64  har *z;..  if( d
2fb30 62 2d 3e 78 54 72 61 63 65 20 26 26 20 28 7a 54  b->xTrace && (zT
2fb40 72 61 63 65 20 3d 20 28 70 4f 70 2d 3e 70 34 2e  race = (pOp->p4.
2fb50 7a 20 3f 20 70 4f 70 2d 3e 70 34 2e 7a 20 3a 20  z ? pOp->p4.z : 
2fb60 70 2d 3e 7a 53 71 6c 29 29 21 3d 30 20 29 7b 0a  p->zSql))!=0 ){.
2fb70 20 20 20 20 7a 20 3d 20 73 71 6c 69 74 65 33 56      z = sqlite3V
2fb80 64 62 65 45 78 70 61 6e 64 53 71 6c 28 70 2c 20  dbeExpandSql(p, 
2fb90 7a 54 72 61 63 65 29 3b 0a 20 20 20 20 64 62 2d  zTrace);.    db-
2fba0 3e 78 54 72 61 63 65 28 64 62 2d 3e 70 54 72 61  >xTrace(db->pTra
2fbb0 63 65 41 72 67 2c 20 7a 29 3b 0a 20 20 20 20 73  ceArg, z);.    s
2fbc0 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c  qlite3DbFree(db,
2fbd0 20 7a 29 3b 0a 20 20 7d 0a 23 69 66 64 65 66 20   z);.  }.#ifdef 
2fbe0 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69  SQLITE_DEBUG.  i
2fbf0 66 28 20 28 64 62 2d 3e 66 6c 61 67 73 20 26 20  f( (db->flags & 
2fc00 53 51 4c 49 54 45 5f 53 71 6c 54 72 61 63 65 29  SQLITE_SqlTrace)
2fc10 21 3d 30 0a 20 20 20 26 26 20 28 7a 54 72 61 63  !=0.   && (zTrac
2fc20 65 20 3d 20 28 70 4f 70 2d 3e 70 34 2e 7a 20 3f  e = (pOp->p4.z ?
2fc30 20 70 4f 70 2d 3e 70 34 2e 7a 20 3a 20 70 2d 3e   pOp->p4.z : p->
2fc40 7a 53 71 6c 29 29 21 3d 30 0a 20 20 29 7b 0a 20  zSql))!=0.  ){. 
2fc50 20 20 20 73 71 6c 69 74 65 33 44 65 62 75 67 50     sqlite3DebugP
2fc60 72 69 6e 74 66 28 22 53 51 4c 2d 74 72 61 63 65  rintf("SQL-trace
2fc70 3a 20 25 73 5c 6e 22 2c 20 7a 54 72 61 63 65 29  : %s\n", zTrace)
2fc80 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ;.  }.#endif /* 
2fc90 53 51 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a  SQLITE_DEBUG */.
2fca0 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
2fcb0 66 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e  f.../* Opcode: N
2fcc0 6f 6f 70 20 2a 20 2a 20 2a 20 2a 20 2a 0a 2a 2a  oop * * * * *.**
2fcd0 0a 2a 2a 20 44 6f 20 6e 6f 74 68 69 6e 67 2e 20  .** Do nothing. 
2fce0 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   This instructio
2fcf0 6e 20 69 73 20 6f 66 74 65 6e 20 75 73 65 66 75  n is often usefu
2fd00 6c 20 61 73 20 61 20 6a 75 6d 70 0a 2a 2a 20 64  l as a jump.** d
2fd10 65 73 74 69 6e 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f  estination..*/./
2fd20 2a 0a 2a 2a 20 54 68 65 20 6d 61 67 69 63 20 45  *.** The magic E
2fd30 78 70 6c 61 69 6e 20 6f 70 63 6f 64 65 20 61 72  xplain opcode ar
2fd40 65 20 6f 6e 6c 79 20 69 6e 73 65 72 74 65 64 20  e only inserted 
2fd50 77 68 65 6e 20 65 78 70 6c 61 69 6e 3d 3d 32 20  when explain==2 
2fd60 28 77 68 69 63 68 0a 2a 2a 20 69 73 20 74 6f 20  (which.** is to 
2fd70 73 61 79 20 77 68 65 6e 20 74 68 65 20 45 58 50  say when the EXP
2fd80 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 20  LAIN QUERY PLAN 
2fd90 73 79 6e 74 61 78 20 69 73 20 75 73 65 64 2e 29  syntax is used.)
2fda0 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
2fdb0 72 65 63 6f 72 64 73 20 69 6e 66 6f 72 6d 61 74  records informat
2fdc0 69 6f 6e 20 66 72 6f 6d 20 74 68 65 20 6f 70 74  ion from the opt
2fdd0 69 6d 69 7a 65 72 2e 20 20 49 74 20 69 73 20 74  imizer.  It is t
2fde0 68 65 0a 2a 2a 20 74 68 65 20 73 61 6d 65 20 61  he.** the same a
2fdf0 73 20 61 20 6e 6f 2d 6f 70 2e 20 20 54 68 69 73  s a no-op.  This
2fe00 20 6f 70 63 6f 64 65 73 6e 65 76 65 72 20 61 70   opcodesnever ap
2fe10 70 65 61 72 73 20 69 6e 20 61 20 72 65 61 6c 20  pears in a real 
2fe20 56 4d 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f 0a 64  VM program..*/.d
2fe30 65 66 61 75 6c 74 3a 20 7b 20 20 20 20 20 20 20  efault: {       
2fe40 20 20 20 2f 2a 20 54 68 69 73 20 69 73 20 72 65     /* This is re
2fe50 61 6c 6c 79 20 4f 50 5f 4e 6f 6f 70 20 61 6e 64  ally OP_Noop and
2fe60 20 4f 50 5f 45 78 70 6c 61 69 6e 20 2a 2f 0a 20   OP_Explain */. 
2fe70 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70   assert( pOp->op
2fe80 63 6f 64 65 3d 3d 4f 50 5f 4e 6f 6f 70 20 7c 7c  code==OP_Noop ||
2fe90 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
2fea0 5f 45 78 70 6c 61 69 6e 20 29 3b 0a 20 20 62 72  _Explain );.  br
2feb0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a  eak;.}../*******
2fec0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2fed0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2fee0 2a 2a 2a 2a 2a 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 0a 2a 2a 20 54 68 65 20 63 61  ******.** The ca
2ff10 73 65 73 20 6f 66 20 74 68 65 20 73 77 69 74 63  ses of the switc
2ff20 68 20 73 74 61 74 65 6d 65 6e 74 20 61 62 6f 76  h statement abov
2ff30 65 20 74 68 69 73 20 6c 69 6e 65 20 73 68 6f 75  e this line shou
2ff40 6c 64 20 61 6c 6c 20 62 65 20 69 6e 64 65 6e 74  ld all be indent
2ff50 65 64 0a 2a 2a 20 62 79 20 36 20 73 70 61 63 65  ed.** by 6 space
2ff60 73 2e 20 20 42 75 74 20 74 68 65 20 6c 65 66 74  s.  But the left
2ff70 2d 6d 6f 73 74 20 36 20 73 70 61 63 65 73 20 68  -most 6 spaces h
2ff80 61 76 65 20 62 65 65 6e 20 72 65 6d 6f 76 65 64  ave been removed
2ff90 20 74 6f 20 69 6d 70 72 6f 76 65 20 74 68 65 0a   to improve the.
2ffa0 2a 2a 20 72 65 61 64 61 62 69 6c 69 74 79 2e 20  ** readability. 
2ffb0 20 46 72 6f 6d 20 74 68 69 73 20 70 6f 69 6e 74   From this point
2ffc0 20 6f 6e 20 64 6f 77 6e 2c 20 74 68 65 20 6e 6f   on down, the no
2ffd0 72 6d 61 6c 20 69 6e 64 65 6e 74 61 74 69 6f 6e  rmal indentation
2ffe0 20 72 75 6c 65 73 20 61 72 65 0a 2a 2a 20 72 65   rules are.** re
2fff0 73 74 6f 72 65 64 2e 0a 2a 2a 2a 2a 2a 2a 2a 2a  stored..********
30000 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
30010 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
30020 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
30030 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
30040 2a 2a 2a 2a 2a 2f 0a 20 20 20 20 7d 0a 0a 23 69  *****/.    }..#i
30050 66 64 65 66 20 56 44 42 45 5f 50 52 4f 46 49 4c  fdef VDBE_PROFIL
30060 45 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 75 36  E.    {.      u6
30070 34 20 65 6c 61 70 73 65 64 20 3d 20 73 71 6c 69  4 elapsed = sqli
30080 74 65 33 48 77 74 69 6d 65 28 29 20 2d 20 73 74  te3Hwtime() - st
30090 61 72 74 3b 0a 20 20 20 20 20 20 70 4f 70 2d 3e  art;.      pOp->
300a0 63 79 63 6c 65 73 20 2b 3d 20 65 6c 61 70 73 65  cycles += elapse
300b0 64 3b 0a 20 20 20 20 20 20 70 4f 70 2d 3e 63 6e  d;.      pOp->cn
300c0 74 2b 2b 3b 0a 23 69 66 20 30 0a 20 20 20 20 20  t++;.#if 0.     
300d0 20 20 20 66 70 72 69 6e 74 66 28 73 74 64 6f 75     fprintf(stdou
300e0 74 2c 20 22 25 31 30 6c 6c 75 20 22 2c 20 65 6c  t, "%10llu ", el
300f0 61 70 73 65 64 29 3b 0a 20 20 20 20 20 20 20 20  apsed);.        
30100 73 71 6c 69 74 65 33 56 64 62 65 50 72 69 6e 74  sqlite3VdbePrint
30110 4f 70 28 73 74 64 6f 75 74 2c 20 6f 72 69 67 50  Op(stdout, origP
30120 63 2c 20 26 61 4f 70 5b 6f 72 69 67 50 63 5d 29  c, &aOp[origPc])
30130 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 7d 0a 23  ;.#endif.    }.#
30140 65 6e 64 69 66 0a 0a 20 20 20 20 2f 2a 20 54 68  endif..    /* Th
30150 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f 64 65  e following code
30160 20 61 64 64 73 20 6e 6f 74 68 69 6e 67 20 74 6f   adds nothing to
30170 20 74 68 65 20 61 63 74 75 61 6c 20 66 75 6e 63   the actual func
30180 74 69 6f 6e 61 6c 69 74 79 0a 20 20 20 20 2a 2a  tionality.    **
30190 20 6f 66 20 74 68 65 20 70 72 6f 67 72 61 6d 2e   of the program.
301a0 20 20 49 74 20 69 73 20 6f 6e 6c 79 20 68 65 72    It is only her
301b0 65 20 66 6f 72 20 74 65 73 74 69 6e 67 20 61 6e  e for testing an
301c0 64 20 64 65 62 75 67 67 69 6e 67 2e 0a 20 20 20  d debugging..   
301d0 20 2a 2a 20 4f 6e 20 74 68 65 20 6f 74 68 65 72   ** On the other
301e0 20 68 61 6e 64 2c 20 69 74 20 64 6f 65 73 20 62   hand, it does b
301f0 75 72 6e 20 43 50 55 20 63 79 63 6c 65 73 20 65  urn CPU cycles e
30200 76 65 72 79 20 74 69 6d 65 20 74 68 72 6f 75 67  very time throug
30210 68 0a 20 20 20 20 2a 2a 20 74 68 65 20 65 76 61  h.    ** the eva
30220 6c 75 61 74 6f 72 20 6c 6f 6f 70 2e 20 20 53 6f  luator loop.  So
30230 20 77 65 20 63 61 6e 20 6c 65 61 76 65 20 69 74   we can leave it
30240 20 6f 75 74 20 77 68 65 6e 20 4e 44 45 42 55 47   out when NDEBUG
30250 20 69 73 20 64 65 66 69 6e 65 64 2e 0a 20 20 20   is defined..   
30260 20 2a 2f 0a 23 69 66 6e 64 65 66 20 4e 44 45 42   */.#ifndef NDEB
30270 55 47 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  UG.    assert( p
30280 63 3e 3d 2d 31 20 26 26 20 70 63 3c 70 2d 3e 6e  c>=-1 && pc<p->n
30290 4f 70 20 29 3b 0a 0a 23 69 66 64 65 66 20 53 51  Op );..#ifdef SQ
302a0 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20 69  LITE_DEBUG.    i
302b0 66 28 20 70 2d 3e 74 72 61 63 65 20 29 7b 0a 20  f( p->trace ){. 
302c0 20 20 20 20 20 69 66 28 20 72 63 21 3d 30 20 29       if( rc!=0 )
302d0 20 66 70 72 69 6e 74 66 28 70 2d 3e 74 72 61 63   fprintf(p->trac
302e0 65 2c 22 72 63 3d 25 64 5c 6e 22 2c 72 63 29 3b  e,"rc=%d\n",rc);
302f0 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  .      if( pOp->
30300 6f 70 66 6c 61 67 73 20 26 20 28 4f 50 46 4c 47  opflags & (OPFLG
30310 5f 4f 55 54 32 5f 50 52 45 52 45 4c 45 41 53 45  _OUT2_PRERELEASE
30320 7c 4f 50 46 4c 47 5f 4f 55 54 32 29 20 29 7b 0a  |OPFLG_OUT2) ){.
30330 20 20 20 20 20 20 20 20 72 65 67 69 73 74 65 72          register
30340 54 72 61 63 65 28 70 2d 3e 74 72 61 63 65 2c 20  Trace(p->trace, 
30350 70 4f 70 2d 3e 70 32 2c 20 26 61 4d 65 6d 5b 70  pOp->p2, &aMem[p
30360 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20 20 20 20 20  Op->p2]);.      
30370 7d 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d  }.      if( pOp-
30380 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 47  >opflags & OPFLG
30390 5f 4f 55 54 33 20 29 7b 0a 20 20 20 20 20 20 20  _OUT3 ){.       
303a0 20 72 65 67 69 73 74 65 72 54 72 61 63 65 28 70   registerTrace(p
303b0 2d 3e 74 72 61 63 65 2c 20 70 4f 70 2d 3e 70 33  ->trace, pOp->p3
303c0 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  , &aMem[pOp->p3]
303d0 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
303e0 0a 23 65 6e 64 69 66 20 20 2f 2a 20 53 51 4c 49  .#endif  /* SQLI
303f0 54 45 5f 44 45 42 55 47 20 2a 2f 0a 23 65 6e 64  TE_DEBUG */.#end
30400 69 66 20 20 2f 2a 20 4e 44 45 42 55 47 20 2a 2f  if  /* NDEBUG */
30410 0a 20 20 7d 20 20 2f 2a 20 54 68 65 20 65 6e 64  .  }  /* The end
30420 20 6f 66 20 74 68 65 20 66 6f 72 28 3b 3b 29 20   of the for(;;) 
30430 6c 6f 6f 70 20 74 68 65 20 6c 6f 6f 70 73 20 74  loop the loops t
30440 68 72 6f 75 67 68 20 6f 70 63 6f 64 65 73 20 2a  hrough opcodes *
30450 2f 0a 0a 20 20 2f 2a 20 49 66 20 77 65 20 72 65  /..  /* If we re
30460 61 63 68 20 74 68 69 73 20 70 6f 69 6e 74 2c 20  ach this point, 
30470 69 74 20 6d 65 61 6e 73 20 74 68 61 74 20 65 78  it means that ex
30480 65 63 75 74 69 6f 6e 20 69 73 20 66 69 6e 69 73  ecution is finis
30490 68 65 64 20 77 69 74 68 0a 20 20 2a 2a 20 61 6e  hed with.  ** an
304a0 20 65 72 72 6f 72 20 6f 66 20 73 6f 6d 65 20 6b   error of some k
304b0 69 6e 64 2e 0a 20 20 2a 2f 0a 76 64 62 65 5f 65  ind..  */.vdbe_e
304c0 72 72 6f 72 5f 68 61 6c 74 3a 0a 20 20 61 73 73  rror_halt:.  ass
304d0 65 72 74 28 20 72 63 20 29 3b 0a 20 20 70 2d 3e  ert( rc );.  p->
304e0 72 63 20 3d 20 72 63 3b 0a 20 20 74 65 73 74 63  rc = rc;.  testc
304f0 61 73 65 28 20 73 71 6c 69 74 65 33 47 6c 6f 62  ase( sqlite3Glob
30500 61 6c 43 6f 6e 66 69 67 2e 78 4c 6f 67 21 3d 30  alConfig.xLog!=0
30510 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6c 6f   );.  sqlite3_lo
30520 67 28 72 63 2c 20 22 73 74 61 74 65 6d 65 6e 74  g(rc, "statement
30530 20 61 62 6f 72 74 73 20 61 74 20 25 64 3a 20 5b   aborts at %d: [
30540 25 73 5d 20 25 73 22 2c 20 0a 20 20 20 20 20 20  %s] %s", .      
30550 20 20 20 20 20 20 20 20 20 20 20 20 20 70 63 2c               pc,
30560 20 70 2d 3e 7a 53 71 6c 2c 20 70 2d 3e 7a 45 72   p->zSql, p->zEr
30570 72 4d 73 67 29 3b 0a 20 20 73 71 6c 69 74 65 33  rMsg);.  sqlite3
30580 56 64 62 65 48 61 6c 74 28 70 29 3b 0a 20 20 69  VdbeHalt(p);.  i
30590 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 49 4f  f( rc==SQLITE_IO
305a0 45 52 52 5f 4e 4f 4d 45 4d 20 29 20 64 62 2d 3e  ERR_NOMEM ) db->
305b0 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 3d 20 31  mallocFailed = 1
305c0 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f  ;.  rc = SQLITE_
305d0 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 72 65 73  ERROR;.  if( res
305e0 65 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74 3e  etSchemaOnFault>
305f0 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  0 ){.    sqlite3
30600 52 65 73 65 74 49 6e 74 65 72 6e 61 6c 53 63 68  ResetInternalSch
30610 65 6d 61 28 64 62 2c 20 72 65 73 65 74 53 63 68  ema(db, resetSch
30620 65 6d 61 4f 6e 46 61 75 6c 74 2d 31 29 3b 0a 20  emaOnFault-1);. 
30630 20 7d 0a 0a 20 20 2f 2a 20 54 68 69 73 20 69 73   }..  /* This is
30640 20 74 68 65 20 6f 6e 6c 79 20 77 61 79 20 6f 75   the only way ou
30650 74 20 6f 66 20 74 68 69 73 20 70 72 6f 63 65 64  t of this proced
30660 75 72 65 2e 20 20 57 65 20 68 61 76 65 20 74 6f  ure.  We have to
30670 0a 20 20 2a 2a 20 72 65 6c 65 61 73 65 20 74 68  .  ** release th
30680 65 20 6d 75 74 65 78 65 73 20 6f 6e 20 62 74 72  e mutexes on btr
30690 65 65 73 20 74 68 61 74 20 77 65 72 65 20 61 63  ees that were ac
306a0 71 75 69 72 65 64 20 61 74 20 74 68 65 0a 20 20  quired at the.  
306b0 2a 2a 20 74 6f 70 2e 20 2a 2f 0a 76 64 62 65 5f  ** top. */.vdbe_
306c0 72 65 74 75 72 6e 3a 0a 20 20 64 62 2d 3e 6c 61  return:.  db->la
306d0 73 74 52 6f 77 69 64 20 3d 20 6c 61 73 74 52 6f  stRowid = lastRo
306e0 77 69 64 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  wid;.  sqlite3Vd
306f0 62 65 4c 65 61 76 65 28 70 29 3b 0a 20 20 72 65  beLeave(p);.  re
30700 74 75 72 6e 20 72 63 3b 0a 0a 20 20 2f 2a 20 4a  turn rc;..  /* J
30710 75 6d 70 20 74 6f 20 68 65 72 65 20 69 66 20 61  ump to here if a
30720 20 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20   string or blob 
30730 6c 61 72 67 65 72 20 74 68 61 6e 20 53 51 4c 49  larger than SQLI
30740 54 45 5f 4d 41 58 5f 4c 45 4e 47 54 48 0a 20 20  TE_MAX_LENGTH.  
30750 2a 2a 20 69 73 20 65 6e 63 6f 75 6e 74 65 72 65  ** is encountere
30760 64 2e 0a 20 20 2a 2f 0a 74 6f 6f 5f 62 69 67 3a  d..  */.too_big:
30770 0a 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72  .  sqlite3SetStr
30780 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c  ing(&p->zErrMsg,
30790 20 64 62 2c 20 22 73 74 72 69 6e 67 20 6f 72 20   db, "string or 
307a0 62 6c 6f 62 20 74 6f 6f 20 62 69 67 22 29 3b 0a  blob too big");.
307b0 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 54 4f    rc = SQLITE_TO
307c0 4f 42 49 47 3b 0a 20 20 67 6f 74 6f 20 76 64 62  OBIG;.  goto vdb
307d0 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 0a 20  e_error_halt;.. 
307e0 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72 65   /* Jump to here
307f0 20 69 66 20 61 20 6d 61 6c 6c 6f 63 28 29 20 66   if a malloc() f
30800 61 69 6c 73 2e 0a 20 20 2a 2f 0a 6e 6f 5f 6d 65  ails..  */.no_me
30810 6d 3a 0a 20 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46  m:.  db->mallocF
30820 61 69 6c 65 64 20 3d 20 31 3b 0a 20 20 73 71 6c  ailed = 1;.  sql
30830 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70  ite3SetString(&p
30840 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22  ->zErrMsg, db, "
30850 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79 22 29 3b  out of memory");
30860 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e  .  rc = SQLITE_N
30870 4f 4d 45 4d 3b 0a 20 20 67 6f 74 6f 20 76 64 62  OMEM;.  goto vdb
30880 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 0a 20  e_error_halt;.. 
30890 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72 65   /* Jump to here
308a0 20 66 6f 72 20 61 6e 79 20 6f 74 68 65 72 20 6b   for any other k
308b0 69 6e 64 20 6f 66 20 66 61 74 61 6c 20 65 72 72  ind of fatal err
308c0 6f 72 2e 20 20 54 68 65 20 22 72 63 22 20 76 61  or.  The "rc" va
308d0 72 69 61 62 6c 65 0a 20 20 2a 2a 20 73 68 6f 75  riable.  ** shou
308e0 6c 64 20 68 6f 6c 64 20 74 68 65 20 65 72 72 6f  ld hold the erro
308f0 72 20 6e 75 6d 62 65 72 2e 0a 20 20 2a 2f 0a 61  r number..  */.a
30900 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
30910 72 3a 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  r:.  assert( p->
30920 7a 45 72 72 4d 73 67 3d 3d 30 20 29 3b 0a 20 20  zErrMsg==0 );.  
30930 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61  if( db->mallocFa
30940 69 6c 65 64 20 29 20 72 63 20 3d 20 53 51 4c 49  iled ) rc = SQLI
30950 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 69 66 28 20  TE_NOMEM;.  if( 
30960 72 63 21 3d 53 51 4c 49 54 45 5f 49 4f 45 52 52  rc!=SQLITE_IOERR
30970 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20 20 73 71  _NOMEM ){.    sq
30980 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26  lite3SetString(&
30990 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20  p->zErrMsg, db, 
309a0 22 25 73 22 2c 20 73 71 6c 69 74 65 33 45 72 72  "%s", sqlite3Err
309b0 53 74 72 28 72 63 29 29 3b 0a 20 20 7d 0a 20 20  Str(rc));.  }.  
309c0 67 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f  goto vdbe_error_
309d0 68 61 6c 74 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70  halt;..  /* Jump
309e0 20 74 6f 20 68 65 72 65 20 69 66 20 74 68 65 20   to here if the 
309f0 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70  sqlite3_interrup
30a00 74 28 29 20 41 50 49 20 73 65 74 73 20 74 68 65  t() API sets the
30a10 20 69 6e 74 65 72 72 75 70 74 0a 20 20 2a 2a 20   interrupt.  ** 
30a20 66 6c 61 67 2e 0a 20 20 2a 2f 0a 61 62 6f 72 74  flag..  */.abort
30a30 5f 64 75 65 5f 74 6f 5f 69 6e 74 65 72 72 75 70  _due_to_interrup
30a40 74 3a 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d  t:.  assert( db-
30a50 3e 75 31 2e 69 73 49 6e 74 65 72 72 75 70 74 65  >u1.isInterrupte
30a60 64 20 29 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49  d );.  rc = SQLI
30a70 54 45 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20  TE_INTERRUPT;.  
30a80 70 2d 3e 72 63 20 3d 20 72 63 3b 0a 20 20 73 71  p->rc = rc;.  sq
30a90 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26  lite3SetString(&
30aa0 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20  p->zErrMsg, db, 
30ab0 22 25 73 22 2c 20 73 71 6c 69 74 65 33 45 72 72  "%s", sqlite3Err
30ac0 53 74 72 28 72 63 29 29 3b 0a 20 20 67 6f 74 6f  Str(rc));.  goto
30ad0 20 76 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74   vdbe_error_halt
30ae0 3b 0a 7d 0a                                      ;.}.