/ Hex Artifact Content
Login

Artifact 624c618542806c2075588ee5d2bdf43d91e34c21:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f  ******.** The co
0180: 64 65 20 69 6e 20 74 68 69 73 20 66 69 6c 65 20  de in this file 
0190: 69 6d 70 6c 65 6d 65 6e 74 73 20 65 78 65 63 75  implements execu
01a0: 74 69 6f 6e 20 6d 65 74 68 6f 64 20 6f 66 20 74  tion method of t
01b0: 68 65 20 0a 2a 2a 20 56 69 72 74 75 61 6c 20 44  he .** Virtual D
01c0: 61 74 61 62 61 73 65 20 45 6e 67 69 6e 65 20 28  atabase Engine (
01d0: 56 44 42 45 29 2e 20 20 41 20 73 65 70 61 72 61  VDBE).  A separa
01e0: 74 65 20 66 69 6c 65 20 28 22 76 64 62 65 61 75  te file ("vdbeau
01f0: 78 2e 63 22 29 0a 2a 2a 20 68 61 6e 64 6c 65 73  x.c").** handles
0200: 20 68 6f 75 73 65 6b 65 65 70 69 6e 67 20 64 65   housekeeping de
0210: 74 61 69 6c 73 20 73 75 63 68 20 61 73 20 63 72  tails such as cr
0220: 65 61 74 69 6e 67 20 61 6e 64 20 64 65 6c 65 74  eating and delet
0230: 69 6e 67 0a 2a 2a 20 56 44 42 45 20 69 6e 73 74  ing.** VDBE inst
0240: 61 6e 63 65 73 2e 20 20 54 68 69 73 20 66 69 6c  ances.  This fil
0250: 65 20 69 73 20 73 6f 6c 65 6c 79 20 69 6e 74 65  e is solely inte
0260: 72 65 73 74 65 64 20 69 6e 20 65 78 65 63 75 74  rested in execut
0270: 69 6e 67 0a 2a 2a 20 74 68 65 20 56 44 42 45 20  ing.** the VDBE 
0280: 70 72 6f 67 72 61 6d 2e 0a 2a 2a 0a 2a 2a 20 49  program..**.** I
0290: 6e 20 74 68 65 20 65 78 74 65 72 6e 61 6c 20 69  n the external i
02a0: 6e 74 65 72 66 61 63 65 2c 20 61 6e 20 22 73 71  nterface, an "sq
02b0: 6c 69 74 65 33 5f 73 74 6d 74 2a 22 20 69 73 20  lite3_stmt*" is 
02c0: 61 6e 20 6f 70 61 71 75 65 20 70 6f 69 6e 74 65  an opaque pointe
02d0: 72 0a 2a 2a 20 74 6f 20 61 20 56 44 42 45 2e 0a  r.** to a VDBE..
02e0: 2a 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 20 70 61  **.** The SQL pa
02f0: 72 73 65 72 20 67 65 6e 65 72 61 74 65 73 20 61  rser generates a
0300: 20 70 72 6f 67 72 61 6d 20 77 68 69 63 68 20 69   program which i
0310: 73 20 74 68 65 6e 20 65 78 65 63 75 74 65 64 20  s then executed 
0320: 62 79 0a 2a 2a 20 74 68 65 20 56 44 42 45 20 74  by.** the VDBE t
0330: 6f 20 64 6f 20 74 68 65 20 77 6f 72 6b 20 6f 66  o do the work of
0340: 20 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65   the SQL stateme
0350: 6e 74 2e 20 20 56 44 42 45 20 70 72 6f 67 72 61  nt.  VDBE progra
0360: 6d 73 20 61 72 65 20 0a 2a 2a 20 73 69 6d 69 6c  ms are .** simil
0370: 61 72 20 69 6e 20 66 6f 72 6d 20 74 6f 20 61 73  ar in form to as
0380: 73 65 6d 62 6c 79 20 6c 61 6e 67 75 61 67 65 2e  sembly language.
0390: 20 20 54 68 65 20 70 72 6f 67 72 61 6d 20 63 6f    The program co
03a0: 6e 73 69 73 74 73 20 6f 66 0a 2a 2a 20 61 20 6c  nsists of.** a l
03b0: 69 6e 65 61 72 20 73 65 71 75 65 6e 63 65 20 6f  inear sequence o
03c0: 66 20 6f 70 65 72 61 74 69 6f 6e 73 2e 20 20 45  f operations.  E
03d0: 61 63 68 20 6f 70 65 72 61 74 69 6f 6e 20 68 61  ach operation ha
03e0: 73 20 61 6e 20 6f 70 63 6f 64 65 20 0a 2a 2a 20  s an opcode .** 
03f0: 61 6e 64 20 35 20 6f 70 65 72 61 6e 64 73 2e 20  and 5 operands. 
0400: 20 4f 70 65 72 61 6e 64 73 20 50 31 2c 20 50 32   Operands P1, P2
0410: 2c 20 61 6e 64 20 50 33 20 61 72 65 20 69 6e 74  , and P3 are int
0420: 65 67 65 72 73 2e 20 20 4f 70 65 72 61 6e 64 20  egers.  Operand 
0430: 50 34 20 0a 2a 2a 20 69 73 20 61 20 6e 75 6c 6c  P4 .** is a null
0440: 2d 74 65 72 6d 69 6e 61 74 65 64 20 73 74 72 69  -terminated stri
0450: 6e 67 2e 20 20 4f 70 65 72 61 6e 64 20 50 35 20  ng.  Operand P5 
0460: 69 73 20 61 6e 20 75 6e 73 69 67 6e 65 64 20 63  is an unsigned c
0470: 68 61 72 61 63 74 65 72 2e 0a 2a 2a 20 46 65 77  haracter..** Few
0480: 20 6f 70 63 6f 64 65 73 20 75 73 65 20 61 6c 6c   opcodes use all
0490: 20 35 20 6f 70 65 72 61 6e 64 73 2e 0a 2a 2a 0a   5 operands..**.
04a0: 2a 2a 20 43 6f 6d 70 75 74 61 74 69 6f 6e 20 72  ** Computation r
04b0: 65 73 75 6c 74 73 20 61 72 65 20 73 74 6f 72 65  esults are store
04c0: 64 20 6f 6e 20 61 20 73 65 74 20 6f 66 20 72 65  d on a set of re
04d0: 67 69 73 74 65 72 73 20 6e 75 6d 62 65 72 65 64  gisters numbered
04e0: 20 62 65 67 69 6e 6e 69 6e 67 0a 2a 2a 20 77 69   beginning.** wi
04f0: 74 68 20 31 20 61 6e 64 20 67 6f 69 6e 67 20 75  th 1 and going u
0500: 70 20 74 6f 20 56 64 62 65 2e 6e 4d 65 6d 2e 20  p to Vdbe.nMem. 
0510: 20 45 61 63 68 20 72 65 67 69 73 74 65 72 20 63   Each register c
0520: 61 6e 20 73 74 6f 72 65 0a 2a 2a 20 65 69 74 68  an store.** eith
0530: 65 72 20 61 6e 20 69 6e 74 65 67 65 72 2c 20 61  er an integer, a
0540: 20 6e 75 6c 6c 2d 74 65 72 6d 69 6e 61 74 65 64   null-terminated
0550: 20 73 74 72 69 6e 67 2c 20 61 20 66 6c 6f 61 74   string, a float
0560: 69 6e 67 20 70 6f 69 6e 74 0a 2a 2a 20 6e 75 6d  ing point.** num
0570: 62 65 72 2c 20 6f 72 20 74 68 65 20 53 51 4c 20  ber, or the SQL 
0580: 22 4e 55 4c 4c 22 20 76 61 6c 75 65 2e 20 20 41  "NULL" value.  A
0590: 6e 20 69 6d 70 6c 69 63 69 74 20 63 6f 6e 76 65  n implicit conve
05a0: 72 73 69 6f 6e 20 66 72 6f 6d 20 6f 6e 65 0a 2a  rsion from one.*
05b0: 2a 20 74 79 70 65 20 74 6f 20 74 68 65 20 6f 74  * type to the ot
05c0: 68 65 72 20 6f 63 63 75 72 73 20 61 73 20 6e 65  her occurs as ne
05d0: 63 65 73 73 61 72 79 2e 0a 2a 2a 20 0a 2a 2a 20  cessary..** .** 
05e0: 4d 6f 73 74 20 6f 66 20 74 68 65 20 63 6f 64 65  Most of the code
05f0: 20 69 6e 20 74 68 69 73 20 66 69 6c 65 20 69 73   in this file is
0600: 20 74 61 6b 65 6e 20 75 70 20 62 79 20 74 68 65   taken up by the
0610: 20 73 71 6c 69 74 65 33 56 64 62 65 45 78 65 63   sqlite3VdbeExec
0620: 28 29 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 20 77  ().** function w
0630: 68 69 63 68 20 64 6f 65 73 20 74 68 65 20 77 6f  hich does the wo
0640: 72 6b 20 6f 66 20 69 6e 74 65 72 70 72 65 74 69  rk of interpreti
0650: 6e 67 20 61 20 56 44 42 45 20 70 72 6f 67 72 61  ng a VDBE progra
0660: 6d 2e 0a 2a 2a 20 42 75 74 20 6f 74 68 65 72 20  m..** But other 
0670: 72 6f 75 74 69 6e 65 73 20 61 72 65 20 61 6c 73  routines are als
0680: 6f 20 70 72 6f 76 69 64 65 64 20 74 6f 20 68 65  o provided to he
0690: 6c 70 20 69 6e 20 62 75 69 6c 64 69 6e 67 20 75  lp in building u
06a0: 70 0a 2a 2a 20 61 20 70 72 6f 67 72 61 6d 20 69  p.** a program i
06b0: 6e 73 74 72 75 63 74 69 6f 6e 20 62 79 20 69 6e  nstruction by in
06c0: 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  struction..**.**
06d0: 20 56 61 72 69 6f 75 73 20 73 63 72 69 70 74 73   Various scripts
06e0: 20 73 63 61 6e 20 74 68 69 73 20 73 6f 75 72 63   scan this sourc
06f0: 65 20 66 69 6c 65 20 69 6e 20 6f 72 64 65 72 20  e file in order 
0700: 74 6f 20 67 65 6e 65 72 61 74 65 20 48 54 4d 4c  to generate HTML
0710: 0a 2a 2a 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  .** documentatio
0720: 6e 2c 20 68 65 61 64 65 72 73 20 66 69 6c 65 73  n, headers files
0730: 2c 20 6f 72 20 6f 74 68 65 72 20 64 65 72 69 76  , or other deriv
0740: 65 64 20 66 69 6c 65 73 2e 20 20 54 68 65 20 66  ed files.  The f
0750: 6f 72 6d 61 74 74 69 6e 67 0a 2a 2a 20 6f 66 20  ormatting.** of 
0760: 74 68 65 20 63 6f 64 65 20 69 6e 20 74 68 69 73  the code in this
0770: 20 66 69 6c 65 20 69 73 2c 20 74 68 65 72 65 66   file is, theref
0780: 6f 72 65 2c 20 69 6d 70 6f 72 74 61 6e 74 2e 20  ore, important. 
0790: 20 53 65 65 20 6f 74 68 65 72 20 63 6f 6d 6d 65   See other comme
07a0: 6e 74 73 0a 2a 2a 20 69 6e 20 74 68 69 73 20 66  nts.** in this f
07b0: 69 6c 65 20 66 6f 72 20 64 65 74 61 69 6c 73 2e  ile for details.
07c0: 20 20 49 66 20 69 6e 20 64 6f 75 62 74 2c 20 64    If in doubt, d
07d0: 6f 20 6e 6f 74 20 64 65 76 69 61 74 65 20 66 72  o not deviate fr
07e0: 6f 6d 20 65 78 69 73 74 69 6e 67 0a 2a 2a 20 63  om existing.** c
07f0: 6f 6d 6d 65 6e 74 69 6e 67 20 61 6e 64 20 69 6e  ommenting and in
0800: 64 65 6e 74 61 74 69 6f 6e 20 70 72 61 63 74 69  dentation practi
0810: 63 65 73 20 77 68 65 6e 20 63 68 61 6e 67 69 6e  ces when changin
0820: 67 20 6f 72 20 61 64 64 69 6e 67 20 63 6f 64 65  g or adding code
0830: 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 73  ..*/.#include "s
0840: 71 6c 69 74 65 49 6e 74 2e 68 22 0a 23 69 6e 63  qliteInt.h".#inc
0850: 6c 75 64 65 20 22 76 64 62 65 49 6e 74 2e 68 22  lude "vdbeInt.h"
0860: 0a 0a 2f 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 74  ../*.** Invoke t
0870: 68 69 73 20 6d 61 63 72 6f 20 6f 6e 20 6d 65 6d  his macro on mem
0880: 6f 72 79 20 63 65 6c 6c 73 20 6a 75 73 74 20 70  ory cells just p
0890: 72 69 6f 72 20 74 6f 20 63 68 61 6e 67 69 6e 67  rior to changing
08a0: 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 6f 66   the.** value of
08b0: 20 74 68 65 20 63 65 6c 6c 2e 20 20 54 68 69 73   the cell.  This
08c0: 20 6d 61 63 72 6f 20 76 65 72 69 66 69 65 73 20   macro verifies 
08d0: 74 68 61 74 20 73 68 61 6c 6c 6f 77 20 63 6f 70  that shallow cop
08e0: 69 65 73 20 61 72 65 0a 2a 2a 20 6e 6f 74 20 6d  ies are.** not m
08f0: 69 73 75 73 65 64 2e 0a 2a 2f 0a 23 69 66 64 65  isused..*/.#ifde
0900: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 23  f SQLITE_DEBUG.#
0910: 20 64 65 66 69 6e 65 20 6d 65 6d 41 62 6f 75 74   define memAbout
0920: 54 6f 43 68 61 6e 67 65 28 50 2c 4d 29 20 73 71  ToChange(P,M) sq
0930: 6c 69 74 65 33 56 64 62 65 4d 65 6d 50 72 65 70  lite3VdbeMemPrep
0940: 61 72 65 54 6f 43 68 61 6e 67 65 28 50 2c 4d 29  areToChange(P,M)
0950: 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
0960: 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
0970: 28 50 2c 4d 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  (P,M).#endif../*
0980: 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
0990: 67 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c  g global variabl
09a0: 65 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64  e is incremented
09b0: 20 65 76 65 72 79 20 74 69 6d 65 20 61 20 63 75   every time a cu
09c0: 72 73 6f 72 0a 2a 2a 20 6d 6f 76 65 73 2c 20 65  rsor.** moves, e
09d0: 69 74 68 65 72 20 62 79 20 74 68 65 20 4f 50 5f  ither by the OP_
09e0: 53 65 65 6b 58 58 2c 20 4f 50 5f 4e 65 78 74 2c  SeekXX, OP_Next,
09f0: 20 6f 72 20 4f 50 5f 50 72 65 76 20 6f 70 63 6f   or OP_Prev opco
0a00: 64 65 73 2e 20 20 54 68 65 20 74 65 73 74 0a 2a  des.  The test.*
0a10: 2a 20 70 72 6f 63 65 64 75 72 65 73 20 75 73 65  * procedures use
0a20: 20 74 68 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f   this informatio
0a30: 6e 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 74  n to make sure t
0a40: 68 61 74 20 69 6e 64 69 63 65 73 20 61 72 65 0a  hat indices are.
0a50: 2a 2a 20 77 6f 72 6b 69 6e 67 20 63 6f 72 72 65  ** working corre
0a60: 63 74 6c 79 2e 20 20 54 68 69 73 20 76 61 72 69  ctly.  This vari
0a70: 61 62 6c 65 20 68 61 73 20 6e 6f 20 66 75 6e 63  able has no func
0a80: 74 69 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20  tion other than 
0a90: 74 6f 0a 2a 2a 20 68 65 6c 70 20 76 65 72 69 66  to.** help verif
0aa0: 79 20 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70  y the correct op
0ab0: 65 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c  eration of the l
0ac0: 69 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65  ibrary..*/.#ifde
0ad0: 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e  f SQLITE_TEST.in
0ae0: 74 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68  t sqlite3_search
0af0: 5f 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64  _count = 0;.#end
0b00: 69 66 0a 0a 2f 2a 0a 2a 2a 20 57 68 65 6e 20 74  if../*.** When t
0b10: 68 69 73 20 67 6c 6f 62 61 6c 20 76 61 72 69 61  his global varia
0b20: 62 6c 65 20 69 73 20 70 6f 73 69 74 69 76 65 2c  ble is positive,
0b30: 20 69 74 20 67 65 74 73 20 64 65 63 72 65 6d 65   it gets decreme
0b40: 6e 74 65 64 20 6f 6e 63 65 20 62 65 66 6f 72 65  nted once before
0b50: 0a 2a 2a 20 65 61 63 68 20 69 6e 73 74 72 75 63  .** each instruc
0b60: 74 69 6f 6e 20 69 6e 20 74 68 65 20 56 44 42 45  tion in the VDBE
0b70: 2e 20 20 57 68 65 6e 20 72 65 61 63 68 65 73 20  .  When reaches 
0b80: 7a 65 72 6f 2c 20 74 68 65 20 75 31 2e 69 73 49  zero, the u1.isI
0b90: 6e 74 65 72 72 75 70 74 65 64 0a 2a 2a 20 66 69  nterrupted.** fi
0ba0: 65 6c 64 20 6f 66 20 74 68 65 20 73 71 6c 69 74  eld of the sqlit
0bb0: 65 33 20 73 74 72 75 63 74 75 72 65 20 69 73 20  e3 structure is 
0bc0: 73 65 74 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  set in order to 
0bd0: 73 69 6d 75 6c 61 74 65 20 61 6e 64 20 69 6e 74  simulate and int
0be0: 65 72 72 75 70 74 2e 0a 2a 2a 0a 2a 2a 20 54 68  errupt..**.** Th
0bf0: 69 73 20 66 61 63 69 6c 69 74 79 20 69 73 20 75  is facility is u
0c00: 73 65 64 20 66 6f 72 20 74 65 73 74 69 6e 67 20  sed for testing 
0c10: 70 75 72 70 6f 73 65 73 20 6f 6e 6c 79 2e 20 20  purposes only.  
0c20: 49 74 20 64 6f 65 73 20 6e 6f 74 20 66 75 6e 63  It does not func
0c30: 74 69 6f 6e 0a 2a 2a 20 69 6e 20 61 6e 20 6f 72  tion.** in an or
0c40: 64 69 6e 61 72 79 20 62 75 69 6c 64 2e 0a 2a 2f  dinary build..*/
0c50: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54  .#ifdef SQLITE_T
0c60: 45 53 54 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f  EST.int sqlite3_
0c70: 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74 20  interrupt_count 
0c80: 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  = 0;.#endif../*.
0c90: 2a 2a 20 54 68 65 20 6e 65 78 74 20 67 6c 6f 62  ** The next glob
0ca0: 61 6c 20 76 61 72 69 61 62 6c 65 20 69 73 20 69  al variable is i
0cb0: 6e 63 72 65 6d 65 6e 74 65 64 20 65 61 63 68 20  ncremented each 
0cc0: 74 79 70 65 20 74 68 65 20 4f 50 5f 53 6f 72 74  type the OP_Sort
0cd0: 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 65 78   opcode.** is ex
0ce0: 65 63 75 74 65 64 2e 20 20 54 68 65 20 74 65 73  ecuted.  The tes
0cf0: 74 20 70 72 6f 63 65 64 75 72 65 73 20 75 73 65  t procedures use
0d00: 20 74 68 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f   this informatio
0d10: 6e 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 74  n to make sure t
0d20: 68 61 74 0a 2a 2a 20 73 6f 72 74 69 6e 67 20 69  hat.** sorting i
0d30: 73 20 6f 63 63 75 72 72 69 6e 67 20 6f 72 20 6e  s occurring or n
0d40: 6f 74 20 6f 63 63 75 72 72 69 6e 67 20 61 74 20  ot occurring at 
0d50: 61 70 70 72 6f 70 72 69 61 74 65 20 74 69 6d 65  appropriate time
0d60: 73 2e 20 20 20 54 68 69 73 20 76 61 72 69 61 62  s.   This variab
0d70: 6c 65 0a 2a 2a 20 68 61 73 20 6e 6f 20 66 75 6e  le.** has no fun
0d80: 63 74 69 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e  ction other than
0d90: 20 74 6f 20 68 65 6c 70 20 76 65 72 69 66 79 20   to help verify 
0da0: 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65 72  the correct oper
0db0: 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20  ation of the.** 
0dc0: 6c 69 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64  library..*/.#ifd
0dd0: 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 69  ef SQLITE_TEST.i
0de0: 6e 74 20 73 71 6c 69 74 65 33 5f 73 6f 72 74 5f  nt sqlite3_sort_
0df0: 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64 69  count = 0;.#endi
0e00: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 65 78  f../*.** The nex
0e10: 74 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c  t global variabl
0e20: 65 20 72 65 63 6f 72 64 73 20 74 68 65 20 73 69  e records the si
0e30: 7a 65 20 6f 66 20 74 68 65 20 6c 61 72 67 65 73  ze of the larges
0e40: 74 20 4d 45 4d 5f 42 6c 6f 62 0a 2a 2a 20 6f 72  t MEM_Blob.** or
0e50: 20 4d 45 4d 5f 53 74 72 20 74 68 61 74 20 68 61   MEM_Str that ha
0e60: 73 20 62 65 65 6e 20 75 73 65 64 20 62 79 20 61  s been used by a
0e70: 20 56 44 42 45 20 6f 70 63 6f 64 65 2e 20 20 54   VDBE opcode.  T
0e80: 68 65 20 74 65 73 74 20 70 72 6f 63 65 64 75 72  he test procedur
0e90: 65 73 0a 2a 2a 20 75 73 65 20 74 68 69 73 20 69  es.** use this i
0ea0: 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 6f 20 6d 61  nformation to ma
0eb0: 6b 65 20 73 75 72 65 20 74 68 61 74 20 74 68 65  ke sure that the
0ec0: 20 7a 65 72 6f 2d 62 6c 6f 62 20 66 75 6e 63 74   zero-blob funct
0ed0: 69 6f 6e 61 6c 69 74 79 0a 2a 2a 20 69 73 20 77  ionality.** is w
0ee0: 6f 72 6b 69 6e 67 20 63 6f 72 72 65 63 74 6c 79  orking correctly
0ef0: 2e 20 20 20 54 68 69 73 20 76 61 72 69 61 62 6c  .   This variabl
0f00: 65 20 68 61 73 20 6e 6f 20 66 75 6e 63 74 69 6f  e has no functio
0f10: 6e 20 6f 74 68 65 72 20 74 68 61 6e 20 74 6f 0a  n other than to.
0f20: 2a 2a 20 68 65 6c 70 20 76 65 72 69 66 79 20 74  ** help verify t
0f30: 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65 72 61  he correct opera
0f40: 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c 69 62 72  tion of the libr
0f50: 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  ary..*/.#ifdef S
0f60: 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74 20 73  QLITE_TEST.int s
0f70: 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62 73  qlite3_max_blobs
0f80: 69 7a 65 20 3d 20 30 3b 0a 73 74 61 74 69 63 20  ize = 0;.static 
0f90: 76 6f 69 64 20 75 70 64 61 74 65 4d 61 78 42 6c  void updateMaxBl
0fa0: 6f 62 73 69 7a 65 28 4d 65 6d 20 2a 70 29 7b 0a  obsize(Mem *p){.
0fb0: 20 20 69 66 28 20 28 70 2d 3e 66 6c 61 67 73 20    if( (p->flags 
0fc0: 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42  & (MEM_Str|MEM_B
0fd0: 6c 6f 62 29 29 21 3d 30 20 26 26 20 70 2d 3e 6e  lob))!=0 && p->n
0fe0: 3e 73 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f  >sqlite3_max_blo
0ff0: 62 73 69 7a 65 20 29 7b 0a 20 20 20 20 73 71 6c  bsize ){.    sql
1000: 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62 73 69 7a  ite3_max_blobsiz
1010: 65 20 3d 20 70 2d 3e 6e 3b 0a 20 20 7d 0a 7d 0a  e = p->n;.  }.}.
1020: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
1030: 65 20 6e 65 78 74 20 67 6c 6f 62 61 6c 20 76 61  e next global va
1040: 72 69 61 62 6c 65 20 69 73 20 69 6e 63 72 65 6d  riable is increm
1050: 65 6e 74 65 64 20 65 61 63 68 20 74 79 70 65 20  ented each type 
1060: 74 68 65 20 4f 50 5f 46 6f 75 6e 64 20 6f 70 63  the OP_Found opc
1070: 6f 64 65 0a 2a 2a 20 69 73 20 65 78 65 63 75 74  ode.** is execut
1080: 65 64 2e 20 54 68 69 73 20 69 73 20 75 73 65 64  ed. This is used
1090: 20 74 6f 20 74 65 73 74 20 77 68 65 74 68 65 72   to test whether
10a0: 20 6f 72 20 6e 6f 74 20 74 68 65 20 66 6f 72 65   or not the fore
10b0: 69 67 6e 20 6b 65 79 0a 2a 2a 20 6f 70 65 72 61  ign key.** opera
10c0: 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 65 64  tion implemented
10d0: 20 75 73 69 6e 67 20 4f 50 5f 46 6b 49 73 5a 65   using OP_FkIsZe
10e0: 72 6f 20 69 73 20 77 6f 72 6b 69 6e 67 2e 20 54  ro is working. T
10f0: 68 69 73 20 76 61 72 69 61 62 6c 65 0a 2a 2a 20  his variable.** 
1100: 68 61 73 20 6e 6f 20 66 75 6e 63 74 69 6f 6e 20  has no function 
1110: 6f 74 68 65 72 20 74 68 61 6e 20 74 6f 20 68 65  other than to he
1120: 6c 70 20 76 65 72 69 66 79 20 74 68 65 20 63 6f  lp verify the co
1130: 72 72 65 63 74 20 6f 70 65 72 61 74 69 6f 6e 20  rrect operation 
1140: 6f 66 20 74 68 65 0a 2a 2a 20 6c 69 62 72 61 72  of the.** librar
1150: 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  y..*/.#ifdef SQL
1160: 49 54 45 5f 54 45 53 54 0a 69 6e 74 20 73 71 6c  ITE_TEST.int sql
1170: 69 74 65 33 5f 66 6f 75 6e 64 5f 63 6f 75 6e 74  ite3_found_count
1180: 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a   = 0;.#endif../*
1190: 0a 2a 2a 20 54 65 73 74 20 61 20 72 65 67 69 73  .** Test a regis
11a0: 74 65 72 20 74 6f 20 73 65 65 20 69 66 20 69 74  ter to see if it
11b0: 20 65 78 63 65 65 64 73 20 74 68 65 20 63 75 72   exceeds the cur
11c0: 72 65 6e 74 20 6d 61 78 69 6d 75 6d 20 62 6c 6f  rent maximum blo
11d0: 62 20 73 69 7a 65 2e 0a 2a 2a 20 49 66 20 69 74  b size..** If it
11e0: 20 64 6f 65 73 2c 20 72 65 63 6f 72 64 20 74 68   does, record th
11f0: 65 20 6e 65 77 20 6d 61 78 69 6d 75 6d 20 62 6c  e new maximum bl
1200: 6f 62 20 73 69 7a 65 2e 0a 2a 2f 0a 23 69 66 20  ob size..*/.#if 
1210: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54  defined(SQLITE_T
1220: 45 53 54 29 20 26 26 20 21 64 65 66 69 6e 65 64  EST) && !defined
1230: 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49  (SQLITE_OMIT_BUI
1240: 4c 54 49 4e 5f 54 45 53 54 29 0a 23 20 64 65 66  LTIN_TEST).# def
1250: 69 6e 65 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  ine UPDATE_MAX_B
1260: 4c 4f 42 53 49 5a 45 28 50 29 20 20 75 70 64 61  LOBSIZE(P)  upda
1270: 74 65 4d 61 78 42 6c 6f 62 73 69 7a 65 28 50 29  teMaxBlobsize(P)
1280: 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
1290: 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53  UPDATE_MAX_BLOBS
12a0: 49 5a 45 28 50 29 0a 23 65 6e 64 69 66 0a 0a 2f  IZE(P).#endif../
12b0: 2a 0a 2a 2a 20 43 6f 6e 76 65 72 74 20 74 68 65  *.** Convert the
12c0: 20 67 69 76 65 6e 20 72 65 67 69 73 74 65 72 20   given register 
12d0: 69 6e 74 6f 20 61 20 73 74 72 69 6e 67 20 69 66  into a string if
12e0: 20 69 74 20 69 73 6e 27 74 20 6f 6e 65 0a 2a 2a   it isn't one.**
12f0: 20 61 6c 72 65 61 64 79 2e 20 52 65 74 75 72 6e   already. Return
1300: 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 61 20 6d   non-zero if a m
1310: 61 6c 6c 6f 63 28 29 20 66 61 69 6c 73 2e 0a 2a  alloc() fails..*
1320: 2f 0a 23 64 65 66 69 6e 65 20 53 74 72 69 6e 67  /.#define String
1330: 69 66 79 28 50 2c 20 65 6e 63 29 20 5c 0a 20 20  ify(P, enc) \.  
1340: 20 69 66 28 28 28 50 29 2d 3e 66 6c 61 67 73 26   if(((P)->flags&
1350: 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f  (MEM_Str|MEM_Blo
1360: 62 29 29 3d 3d 30 20 26 26 20 73 71 6c 69 74 65  b))==0 && sqlite
1370: 33 56 64 62 65 4d 65 6d 53 74 72 69 6e 67 69 66  3VdbeMemStringif
1380: 79 28 50 2c 65 6e 63 29 29 20 5c 0a 20 20 20 20  y(P,enc)) \.    
1390: 20 7b 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 20   { goto no_mem; 
13a0: 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 65 70 68 65  }../*.** An ephe
13b0: 6d 65 72 61 6c 20 73 74 72 69 6e 67 20 76 61 6c  meral string val
13c0: 75 65 20 28 73 69 67 6e 69 66 69 65 64 20 62 79  ue (signified by
13d0: 20 74 68 65 20 4d 45 4d 5f 45 70 68 65 6d 20 66   the MEM_Ephem f
13e0: 6c 61 67 29 20 63 6f 6e 74 61 69 6e 73 0a 2a 2a  lag) contains.**
13f0: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20   a pointer to a 
1400: 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f  dynamically allo
1410: 63 61 74 65 64 20 73 74 72 69 6e 67 20 77 68 65  cated string whe
1420: 72 65 20 73 6f 6d 65 20 6f 74 68 65 72 20 65 6e  re some other en
1430: 74 69 74 79 0a 2a 2a 20 69 73 20 72 65 73 70 6f  tity.** is respo
1440: 6e 73 69 62 6c 65 20 66 6f 72 20 64 65 61 6c 6c  nsible for deall
1450: 6f 63 61 74 69 6e 67 20 74 68 61 74 20 73 74 72  ocating that str
1460: 69 6e 67 2e 20 20 42 65 63 61 75 73 65 20 74 68  ing.  Because th
1470: 65 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 64 6f  e register.** do
1480: 65 73 20 6e 6f 74 20 63 6f 6e 74 72 6f 6c 20 74  es not control t
1490: 68 65 20 73 74 72 69 6e 67 2c 20 69 74 20 6d 69  he string, it mi
14a0: 67 68 74 20 62 65 20 64 65 6c 65 74 65 64 20 77  ght be deleted w
14b0: 69 74 68 6f 75 74 20 74 68 65 20 72 65 67 69 73  ithout the regis
14c0: 74 65 72 0a 2a 2a 20 6b 6e 6f 77 69 6e 67 20 69  ter.** knowing i
14d0: 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 72 6f  t..**.** This ro
14e0: 75 74 69 6e 65 20 63 6f 6e 76 65 72 74 73 20 61  utine converts a
14f0: 6e 20 65 70 68 65 6d 65 72 61 6c 20 73 74 72 69  n ephemeral stri
1500: 6e 67 20 69 6e 74 6f 20 61 20 64 79 6e 61 6d 69  ng into a dynami
1510: 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 0a  cally allocated.
1520: 2a 2a 20 73 74 72 69 6e 67 20 74 68 61 74 20 74  ** string that t
1530: 68 65 20 72 65 67 69 73 74 65 72 20 69 74 73 65  he register itse
1540: 6c 66 20 63 6f 6e 74 72 6f 6c 73 2e 20 20 49 6e  lf controls.  In
1550: 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 69 74   other words, it
1560: 0a 2a 2a 20 63 6f 6e 76 65 72 74 73 20 61 6e 20  .** converts an 
1570: 4d 45 4d 5f 45 70 68 65 6d 20 73 74 72 69 6e 67  MEM_Ephem string
1580: 20 69 6e 74 6f 20 61 6e 20 4d 45 4d 5f 44 79 6e   into an MEM_Dyn
1590: 20 73 74 72 69 6e 67 2e 0a 2a 2f 0a 23 64 65 66   string..*/.#def
15a0: 69 6e 65 20 44 65 65 70 68 65 6d 65 72 61 6c 69  ine Deephemerali
15b0: 7a 65 28 50 29 20 5c 0a 20 20 20 69 66 28 20 28  ze(P) \.   if( (
15c0: 28 50 29 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 45  (P)->flags&MEM_E
15d0: 70 68 65 6d 29 21 3d 30 20 5c 0a 20 20 20 20 20  phem)!=0 \.     
15e0: 20 20 26 26 20 73 71 6c 69 74 65 33 56 64 62 65    && sqlite3Vdbe
15f0: 4d 65 6d 4d 61 6b 65 57 72 69 74 65 61 62 6c 65  MemMakeWriteable
1600: 28 50 29 20 29 7b 20 67 6f 74 6f 20 6e 6f 5f 6d  (P) ){ goto no_m
1610: 65 6d 3b 7d 0a 0a 2f 2a 0a 2a 2a 20 43 61 6c 6c  em;}../*.** Call
1620: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 45   sqlite3VdbeMemE
1630: 78 70 61 6e 64 42 6c 6f 62 28 29 20 6f 6e 20 74  xpandBlob() on t
1640: 68 65 20 73 75 70 70 6c 69 65 64 20 76 61 6c 75  he supplied valu
1650: 65 20 28 74 79 70 65 20 4d 65 6d 2a 29 0a 2a 2a  e (type Mem*).**
1660: 20 50 20 69 66 20 72 65 71 75 69 72 65 64 2e 0a   P if required..
1670: 2a 2f 0a 23 64 65 66 69 6e 65 20 45 78 70 61 6e  */.#define Expan
1680: 64 42 6c 6f 62 28 50 29 20 28 28 28 50 29 2d 3e  dBlob(P) (((P)->
1690: 66 6c 61 67 73 26 4d 45 4d 5f 5a 65 72 6f 29 3f  flags&MEM_Zero)?
16a0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 45 78  sqlite3VdbeMemEx
16b0: 70 61 6e 64 42 6c 6f 62 28 50 29 3a 30 29 0a 0a  pandBlob(P):0)..
16c0: 2f 2a 0a 2a 2a 20 41 72 67 75 6d 65 6e 74 20 70  /*.** Argument p
16d0: 4d 65 6d 20 70 6f 69 6e 74 73 20 61 74 20 61 20  Mem points at a 
16e0: 72 65 67 69 73 74 65 72 20 74 68 61 74 20 77 69  register that wi
16f0: 6c 6c 20 62 65 20 70 61 73 73 65 64 20 74 6f 20  ll be passed to 
1700: 61 0a 2a 2a 20 75 73 65 72 2d 64 65 66 69 6e 65  a.** user-define
1710: 64 20 66 75 6e 63 74 69 6f 6e 20 6f 72 20 72 65  d function or re
1720: 74 75 72 6e 65 64 20 74 6f 20 74 68 65 20 75 73  turned to the us
1730: 65 72 20 61 73 20 74 68 65 20 72 65 73 75 6c 74  er as the result
1740: 20 6f 66 20 61 20 71 75 65 72 79 2e 0a 2a 2a 20   of a query..** 
1750: 54 68 69 73 20 72 6f 75 74 69 6e 65 20 73 65 74  This routine set
1760: 73 20 74 68 65 20 70 4d 65 6d 2d 3e 74 79 70 65  s the pMem->type
1770: 20 76 61 72 69 61 62 6c 65 20 75 73 65 64 20 62   variable used b
1780: 79 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 61  y the sqlite3_va
1790: 6c 75 65 5f 2a 28 29 20 0a 2a 2a 20 72 6f 75 74  lue_*() .** rout
17a0: 69 6e 65 73 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71  ines..*/.void sq
17b0: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74 6f 72  lite3VdbeMemStor
17c0: 65 54 79 70 65 28 4d 65 6d 20 2a 70 4d 65 6d 29  eType(Mem *pMem)
17d0: 7b 0a 20 20 69 6e 74 20 66 6c 61 67 73 20 3d 20  {.  int flags = 
17e0: 70 4d 65 6d 2d 3e 66 6c 61 67 73 3b 0a 20 20 69  pMem->flags;.  i
17f0: 66 28 20 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  f( flags & MEM_N
1800: 75 6c 6c 20 29 7b 0a 20 20 20 20 70 4d 65 6d 2d  ull ){.    pMem-
1810: 3e 74 79 70 65 20 3d 20 53 51 4c 49 54 45 5f 4e  >type = SQLITE_N
1820: 55 4c 4c 3b 0a 20 20 7d 0a 20 20 65 6c 73 65 20  ULL;.  }.  else 
1830: 69 66 28 20 66 6c 61 67 73 20 26 20 4d 45 4d 5f  if( flags & MEM_
1840: 49 6e 74 20 29 7b 0a 20 20 20 20 70 4d 65 6d 2d  Int ){.    pMem-
1850: 3e 74 79 70 65 20 3d 20 53 51 4c 49 54 45 5f 49  >type = SQLITE_I
1860: 4e 54 45 47 45 52 3b 0a 20 20 7d 0a 20 20 65 6c  NTEGER;.  }.  el
1870: 73 65 20 69 66 28 20 66 6c 61 67 73 20 26 20 4d  se if( flags & M
1880: 45 4d 5f 52 65 61 6c 20 29 7b 0a 20 20 20 20 70  EM_Real ){.    p
1890: 4d 65 6d 2d 3e 74 79 70 65 20 3d 20 53 51 4c 49  Mem->type = SQLI
18a0: 54 45 5f 46 4c 4f 41 54 3b 0a 20 20 7d 0a 20 20  TE_FLOAT;.  }.  
18b0: 65 6c 73 65 20 69 66 28 20 66 6c 61 67 73 20 26  else if( flags &
18c0: 20 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20 20   MEM_Str ){.    
18d0: 70 4d 65 6d 2d 3e 74 79 70 65 20 3d 20 53 51 4c  pMem->type = SQL
18e0: 49 54 45 5f 54 45 58 54 3b 0a 20 20 7d 65 6c 73  ITE_TEXT;.  }els
18f0: 65 7b 0a 20 20 20 20 70 4d 65 6d 2d 3e 74 79 70  e{.    pMem->typ
1900: 65 20 3d 20 53 51 4c 49 54 45 5f 42 4c 4f 42 3b  e = SQLITE_BLOB;
1910: 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6c  .  }.}../*.** Al
1920: 6c 6f 63 61 74 65 20 56 64 62 65 43 75 72 73 6f  locate VdbeCurso
1930: 72 20 6e 75 6d 62 65 72 20 69 43 75 72 2e 20 20  r number iCur.  
1940: 52 65 74 75 72 6e 20 61 20 70 6f 69 6e 74 65 72  Return a pointer
1950: 20 74 6f 20 69 74 2e 20 20 52 65 74 75 72 6e 20   to it.  Return 
1960: 4e 55 4c 4c 0a 2a 2a 20 69 66 20 77 65 20 72 75  NULL.** if we ru
1970: 6e 20 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79 2e  n out of memory.
1980: 0a 2a 2f 0a 73 74 61 74 69 63 20 56 64 62 65 43  .*/.static VdbeC
1990: 75 72 73 6f 72 20 2a 61 6c 6c 6f 63 61 74 65 43  ursor *allocateC
19a0: 75 72 73 6f 72 28 0a 20 20 56 64 62 65 20 2a 70  ursor(.  Vdbe *p
19b0: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ,              /
19c0: 2a 20 54 68 65 20 76 69 72 74 75 61 6c 20 6d 61  * The virtual ma
19d0: 63 68 69 6e 65 20 2a 2f 0a 20 20 69 6e 74 20 69  chine */.  int i
19e0: 43 75 72 2c 20 20 20 20 20 20 20 20 20 20 20 20  Cur,            
19f0: 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20 74 68 65   /* Index of the
1a00: 20 6e 65 77 20 56 64 62 65 43 75 72 73 6f 72 20   new VdbeCursor 
1a10: 2a 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 2c  */.  int nField,
1a20: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1a30: 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20 69  mber of fields i
1a40: 6e 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69  n the table or i
1a50: 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 69 44  ndex */.  int iD
1a60: 62 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  b,              
1a70: 2f 2a 20 57 68 65 6e 20 64 61 74 61 62 61 73 65  /* When database
1a80: 20 74 68 65 20 63 75 72 73 6f 72 20 62 65 6c 6f   the cursor belo
1a90: 6e 67 73 20 74 6f 2c 20 6f 72 20 2d 31 20 2a 2f  ngs to, or -1 */
1aa0: 0a 20 20 69 6e 74 20 69 73 42 74 72 65 65 43 75  .  int isBtreeCu
1ab0: 72 73 6f 72 20 20 20 20 20 2f 2a 20 54 72 75 65  rsor     /* True
1ac0: 20 66 6f 72 20 42 2d 54 72 65 65 2e 20 20 46 61   for B-Tree.  Fa
1ad0: 6c 73 65 20 66 6f 72 20 70 73 65 75 64 6f 2d 74  lse for pseudo-t
1ae0: 61 62 6c 65 20 6f 72 20 76 74 61 62 20 2a 2f 0a  able or vtab */.
1af0: 29 7b 0a 20 20 2f 2a 20 46 69 6e 64 20 74 68 65  ){.  /* Find the
1b00: 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74 68 61   memory cell tha
1b10: 74 20 77 69 6c 6c 20 62 65 20 75 73 65 64 20 74  t will be used t
1b20: 6f 20 73 74 6f 72 65 20 74 68 65 20 62 6c 6f 62  o store the blob
1b30: 20 6f 66 20 6d 65 6d 6f 72 79 0a 20 20 2a 2a 20   of memory.  ** 
1b40: 72 65 71 75 69 72 65 64 20 66 6f 72 20 74 68 69  required for thi
1b50: 73 20 56 64 62 65 43 75 72 73 6f 72 20 73 74 72  s VdbeCursor str
1b60: 75 63 74 75 72 65 2e 20 49 74 20 69 73 20 63 6f  ucture. It is co
1b70: 6e 76 65 6e 69 65 6e 74 20 74 6f 20 75 73 65 20  nvenient to use 
1b80: 61 20 0a 20 20 2a 2a 20 76 64 62 65 20 6d 65 6d  a .  ** vdbe mem
1b90: 6f 72 79 20 63 65 6c 6c 20 74 6f 20 6d 61 6e 61  ory cell to mana
1ba0: 67 65 20 74 68 65 20 6d 65 6d 6f 72 79 20 61 6c  ge the memory al
1bb0: 6c 6f 63 61 74 69 6f 6e 20 72 65 71 75 69 72 65  location require
1bc0: 64 20 66 6f 72 20 61 0a 20 20 2a 2a 20 56 64 62  d for a.  ** Vdb
1bd0: 65 43 75 72 73 6f 72 20 73 74 72 75 63 74 75 72  eCursor structur
1be0: 65 20 66 6f 72 20 74 68 65 20 66 6f 6c 6c 6f 77  e for the follow
1bf0: 69 6e 67 20 72 65 61 73 6f 6e 73 3a 0a 20 20 2a  ing reasons:.  *
1c00: 2a 0a 20 20 2a 2a 20 20 20 2a 20 53 6f 6d 65 74  *.  **   * Somet
1c10: 69 6d 65 73 20 63 75 72 73 6f 72 20 6e 75 6d 62  imes cursor numb
1c20: 65 72 73 20 61 72 65 20 75 73 65 64 20 66 6f 72  ers are used for
1c30: 20 61 20 63 6f 75 70 6c 65 20 6f 66 20 64 69 66   a couple of dif
1c40: 66 65 72 65 6e 74 0a 20 20 2a 2a 20 20 20 20 20  ferent.  **     
1c50: 70 75 72 70 6f 73 65 73 20 69 6e 20 61 20 76 64  purposes in a vd
1c60: 62 65 20 70 72 6f 67 72 61 6d 2e 20 54 68 65 20  be program. The 
1c70: 64 69 66 66 65 72 65 6e 74 20 75 73 65 73 20 6d  different uses m
1c80: 69 67 68 74 20 72 65 71 75 69 72 65 0a 20 20 2a  ight require.  *
1c90: 2a 20 20 20 20 20 64 69 66 66 65 72 65 6e 74 20  *     different 
1ca0: 73 69 7a 65 64 20 61 6c 6c 6f 63 61 74 69 6f 6e  sized allocation
1cb0: 73 2e 20 4d 65 6d 6f 72 79 20 63 65 6c 6c 73 20  s. Memory cells 
1cc0: 70 72 6f 76 69 64 65 20 67 72 6f 77 61 62 6c 65  provide growable
1cd0: 0a 20 20 2a 2a 20 20 20 20 20 61 6c 6c 6f 63 61  .  **     alloca
1ce0: 74 69 6f 6e 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a  tions..  **.  **
1cf0: 20 20 20 2a 20 57 68 65 6e 20 75 73 69 6e 67 20     * When using 
1d00: 45 4e 41 42 4c 45 5f 4d 45 4d 4f 52 59 5f 4d 41  ENABLE_MEMORY_MA
1d10: 4e 41 47 45 4d 45 4e 54 2c 20 6d 65 6d 6f 72 79  NAGEMENT, memory
1d20: 20 63 65 6c 6c 20 62 75 66 66 65 72 73 20 63 61   cell buffers ca
1d30: 6e 0a 20 20 2a 2a 20 20 20 20 20 62 65 20 66 72  n.  **     be fr
1d40: 65 65 64 20 6c 61 7a 69 6c 79 20 76 69 61 20 74  eed lazily via t
1d50: 68 65 20 73 71 6c 69 74 65 33 5f 72 65 6c 65 61  he sqlite3_relea
1d60: 73 65 5f 6d 65 6d 6f 72 79 28 29 20 41 50 49 2e  se_memory() API.
1d70: 20 54 68 69 73 0a 20 20 2a 2a 20 20 20 20 20 6d   This.  **     m
1d80: 69 6e 69 6d 69 7a 65 73 20 74 68 65 20 6e 75 6d  inimizes the num
1d90: 62 65 72 20 6f 66 20 6d 61 6c 6c 6f 63 20 63 61  ber of malloc ca
1da0: 6c 6c 73 20 6d 61 64 65 20 62 79 20 74 68 65 20  lls made by the 
1db0: 73 79 73 74 65 6d 2e 0a 20 20 2a 2a 0a 20 20 2a  system..  **.  *
1dc0: 2a 20 4d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 66  * Memory cells f
1dd0: 6f 72 20 63 75 72 73 6f 72 73 20 61 72 65 20 61  or cursors are a
1de0: 6c 6c 6f 63 61 74 65 64 20 61 74 20 74 68 65 20  llocated at the 
1df0: 74 6f 70 20 6f 66 20 74 68 65 20 61 64 64 72 65  top of the addre
1e00: 73 73 0a 20 20 2a 2a 20 73 70 61 63 65 2e 20 4d  ss.  ** space. M
1e10: 65 6d 6f 72 79 20 63 65 6c 6c 20 28 70 2d 3e 6e  emory cell (p->n
1e20: 4d 65 6d 29 20 63 6f 72 72 65 73 70 6f 6e 64 73  Mem) corresponds
1e30: 20 74 6f 20 63 75 72 73 6f 72 20 30 2e 20 53 70   to cursor 0. Sp
1e40: 61 63 65 20 66 6f 72 0a 20 20 2a 2a 20 63 75 72  ace for.  ** cur
1e50: 73 6f 72 20 31 20 69 73 20 6d 61 6e 61 67 65 64  sor 1 is managed
1e60: 20 62 79 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20   by memory cell 
1e70: 28 70 2d 3e 6e 4d 65 6d 2d 31 29 2c 20 65 74 63  (p->nMem-1), etc
1e80: 2e 0a 20 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d  ..  */.  Mem *pM
1e90: 65 6d 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 2d  em = &p->aMem[p-
1ea0: 3e 6e 4d 65 6d 2d 69 43 75 72 5d 3b 0a 0a 20 20  >nMem-iCur];..  
1eb0: 69 6e 74 20 6e 42 79 74 65 3b 0a 20 20 56 64 62  int nByte;.  Vdb
1ec0: 65 43 75 72 73 6f 72 20 2a 70 43 78 20 3d 20 30  eCursor *pCx = 0
1ed0: 3b 0a 20 20 6e 42 79 74 65 20 3d 20 0a 20 20 20  ;.  nByte = .   
1ee0: 20 20 20 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66     ROUND8(sizeof
1ef0: 28 56 64 62 65 43 75 72 73 6f 72 29 29 20 2b 20  (VdbeCursor)) + 
1f00: 0a 20 20 20 20 20 20 28 69 73 42 74 72 65 65 43  .      (isBtreeC
1f10: 75 72 73 6f 72 3f 73 71 6c 69 74 65 33 42 74 72  ursor?sqlite3Btr
1f20: 65 65 43 75 72 73 6f 72 53 69 7a 65 28 29 3a 30  eeCursorSize():0
1f30: 29 20 2b 20 0a 20 20 20 20 20 20 32 2a 6e 46 69  ) + .      2*nFi
1f40: 65 6c 64 2a 73 69 7a 65 6f 66 28 75 33 32 29 3b  eld*sizeof(u32);
1f50: 0a 0a 20 20 61 73 73 65 72 74 28 20 69 43 75 72  ..  assert( iCur
1f60: 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
1f70: 20 69 66 28 20 70 2d 3e 61 70 43 73 72 5b 69 43   if( p->apCsr[iC
1f80: 75 72 5d 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  ur] ){.    sqlit
1f90: 65 33 56 64 62 65 46 72 65 65 43 75 72 73 6f 72  e3VdbeFreeCursor
1fa0: 28 70 2c 20 70 2d 3e 61 70 43 73 72 5b 69 43 75  (p, p->apCsr[iCu
1fb0: 72 5d 29 3b 0a 20 20 20 20 70 2d 3e 61 70 43 73  r]);.    p->apCs
1fc0: 72 5b 69 43 75 72 5d 20 3d 20 30 3b 0a 20 20 7d  r[iCur] = 0;.  }
1fd0: 0a 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b  .  if( SQLITE_OK
1fe0: 3d 3d 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  ==sqlite3VdbeMem
1ff0: 47 72 6f 77 28 70 4d 65 6d 2c 20 6e 42 79 74 65  Grow(pMem, nByte
2000: 2c 20 30 29 20 29 7b 0a 20 20 20 20 70 2d 3e 61  , 0) ){.    p->a
2010: 70 43 73 72 5b 69 43 75 72 5d 20 3d 20 70 43 78  pCsr[iCur] = pCx
2020: 20 3d 20 28 56 64 62 65 43 75 72 73 6f 72 2a 29   = (VdbeCursor*)
2030: 70 4d 65 6d 2d 3e 7a 3b 0a 20 20 20 20 6d 65 6d  pMem->z;.    mem
2040: 73 65 74 28 70 43 78 2c 20 30 2c 20 73 69 7a 65  set(pCx, 0, size
2050: 6f 66 28 56 64 62 65 43 75 72 73 6f 72 29 29 3b  of(VdbeCursor));
2060: 0a 20 20 20 20 70 43 78 2d 3e 69 44 62 20 3d 20  .    pCx->iDb = 
2070: 69 44 62 3b 0a 20 20 20 20 70 43 78 2d 3e 6e 46  iDb;.    pCx->nF
2080: 69 65 6c 64 20 3d 20 6e 46 69 65 6c 64 3b 0a 20  ield = nField;. 
2090: 20 20 20 69 66 28 20 6e 46 69 65 6c 64 20 29 7b     if( nField ){
20a0: 0a 20 20 20 20 20 20 70 43 78 2d 3e 61 54 79 70  .      pCx->aTyp
20b0: 65 20 3d 20 28 75 33 32 20 2a 29 26 70 4d 65 6d  e = (u32 *)&pMem
20c0: 2d 3e 7a 5b 52 4f 55 4e 44 38 28 73 69 7a 65 6f  ->z[ROUND8(sizeo
20d0: 66 28 56 64 62 65 43 75 72 73 6f 72 29 29 5d 3b  f(VdbeCursor))];
20e0: 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 69  .    }.    if( i
20f0: 73 42 74 72 65 65 43 75 72 73 6f 72 20 29 7b 0a  sBtreeCursor ){.
2100: 20 20 20 20 20 20 70 43 78 2d 3e 70 43 75 72 73        pCx->pCurs
2110: 6f 72 20 3d 20 28 42 74 43 75 72 73 6f 72 2a 29  or = (BtCursor*)
2120: 0a 20 20 20 20 20 20 20 20 20 20 26 70 4d 65 6d  .          &pMem
2130: 2d 3e 7a 5b 52 4f 55 4e 44 38 28 73 69 7a 65 6f  ->z[ROUND8(sizeo
2140: 66 28 56 64 62 65 43 75 72 73 6f 72 29 29 2b 32  f(VdbeCursor))+2
2150: 2a 6e 46 69 65 6c 64 2a 73 69 7a 65 6f 66 28 75  *nField*sizeof(u
2160: 33 32 29 5d 3b 0a 20 20 20 20 20 20 73 71 6c 69  32)];.      sqli
2170: 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 5a 65  te3BtreeCursorZe
2180: 72 6f 28 70 43 78 2d 3e 70 43 75 72 73 6f 72 29  ro(pCx->pCursor)
2190: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65  ;.    }.  }.  re
21a0: 74 75 72 6e 20 70 43 78 3b 0a 7d 0a 0a 2f 2a 0a  turn pCx;.}../*.
21b0: 2a 2a 20 54 72 79 20 74 6f 20 63 6f 6e 76 65 72  ** Try to conver
21c0: 74 20 61 20 76 61 6c 75 65 20 69 6e 74 6f 20 61  t a value into a
21d0: 20 6e 75 6d 65 72 69 63 20 72 65 70 72 65 73 65   numeric represe
21e0: 6e 74 61 74 69 6f 6e 20 69 66 20 77 65 20 63 61  ntation if we ca
21f0: 6e 0a 2a 2a 20 64 6f 20 73 6f 20 77 69 74 68 6f  n.** do so witho
2200: 75 74 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72  ut loss of infor
2210: 6d 61 74 69 6f 6e 2e 20 20 49 6e 20 6f 74 68 65  mation.  In othe
2220: 72 20 77 6f 72 64 73 2c 20 69 66 20 74 68 65 20  r words, if the 
2230: 73 74 72 69 6e 67 0a 2a 2a 20 6c 6f 6f 6b 73 20  string.** looks 
2240: 6c 69 6b 65 20 61 20 6e 75 6d 62 65 72 2c 20 63  like a number, c
2250: 6f 6e 76 65 72 74 20 69 74 20 69 6e 74 6f 20 61  onvert it into a
2260: 20 6e 75 6d 62 65 72 2e 20 20 49 66 20 69 74 20   number.  If it 
2270: 64 6f 65 73 20 6e 6f 74 0a 2a 2a 20 6c 6f 6f 6b  does not.** look
2280: 20 6c 69 6b 65 20 61 20 6e 75 6d 62 65 72 2c 20   like a number, 
2290: 6c 65 61 76 65 20 69 74 20 61 6c 6f 6e 65 2e 0a  leave it alone..
22a0: 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 61  */.static void a
22b0: 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e  pplyNumericAffin
22c0: 69 74 79 28 4d 65 6d 20 2a 70 52 65 63 29 7b 0a  ity(Mem *pRec){.
22d0: 20 20 69 66 28 20 28 70 52 65 63 2d 3e 66 6c 61    if( (pRec->fla
22e0: 67 73 20 26 20 28 4d 45 4d 5f 52 65 61 6c 7c 4d  gs & (MEM_Real|M
22f0: 45 4d 5f 49 6e 74 29 29 3d 3d 30 20 29 7b 0a 20  EM_Int))==0 ){. 
2300: 20 20 20 64 6f 75 62 6c 65 20 72 56 61 6c 75 65     double rValue
2310: 3b 0a 20 20 20 20 69 36 34 20 69 56 61 6c 75 65  ;.    i64 iValue
2320: 3b 0a 20 20 20 20 75 38 20 65 6e 63 20 3d 20 70  ;.    u8 enc = p
2330: 52 65 63 2d 3e 65 6e 63 3b 0a 20 20 20 20 69 66  Rec->enc;.    if
2340: 28 20 28 70 52 65 63 2d 3e 66 6c 61 67 73 26 4d  ( (pRec->flags&M
2350: 45 4d 5f 53 74 72 29 3d 3d 30 20 29 20 72 65 74  EM_Str)==0 ) ret
2360: 75 72 6e 3b 0a 20 20 20 20 69 66 28 20 73 71 6c  urn;.    if( sql
2370: 69 74 65 33 41 74 6f 46 28 70 52 65 63 2d 3e 7a  ite3AtoF(pRec->z
2380: 2c 20 26 72 56 61 6c 75 65 2c 20 70 52 65 63 2d  , &rValue, pRec-
2390: 3e 6e 2c 20 65 6e 63 29 3d 3d 30 20 29 20 72 65  >n, enc)==0 ) re
23a0: 74 75 72 6e 3b 0a 20 20 20 20 69 66 28 20 30 3d  turn;.    if( 0=
23b0: 3d 73 71 6c 69 74 65 33 41 74 6f 69 36 34 28 70  =sqlite3Atoi64(p
23c0: 52 65 63 2d 3e 7a 2c 20 26 69 56 61 6c 75 65 2c  Rec->z, &iValue,
23d0: 20 70 52 65 63 2d 3e 6e 2c 20 65 6e 63 29 20 29   pRec->n, enc) )
23e0: 7b 0a 20 20 20 20 20 20 70 52 65 63 2d 3e 75 2e  {.      pRec->u.
23f0: 69 20 3d 20 69 56 61 6c 75 65 3b 0a 20 20 20 20  i = iValue;.    
2400: 20 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 7c 3d    pRec->flags |=
2410: 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 7d 65   MEM_Int;.    }e
2420: 6c 73 65 7b 0a 20 20 20 20 20 20 70 52 65 63 2d  lse{.      pRec-
2430: 3e 72 20 3d 20 72 56 61 6c 75 65 3b 0a 20 20 20  >r = rValue;.   
2440: 20 20 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 7c     pRec->flags |
2450: 3d 20 4d 45 4d 5f 52 65 61 6c 3b 0a 20 20 20 20  = MEM_Real;.    
2460: 7d 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 50  }.  }.}../*.** P
2470: 72 6f 63 65 73 73 69 6e 67 20 69 73 20 64 65 74  rocessing is det
2480: 65 72 6d 69 6e 65 20 62 79 20 74 68 65 20 61 66  ermine by the af
2490: 66 69 6e 69 74 79 20 70 61 72 61 6d 65 74 65 72  finity parameter
24a0: 3a 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41  :.**.** SQLITE_A
24b0: 46 46 5f 49 4e 54 45 47 45 52 3a 0a 2a 2a 20 53  FF_INTEGER:.** S
24c0: 51 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c 3a 0a  QLITE_AFF_REAL:.
24d0: 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55  ** SQLITE_AFF_NU
24e0: 4d 45 52 49 43 3a 0a 2a 2a 20 20 20 20 54 72 79  MERIC:.**    Try
24f0: 20 74 6f 20 63 6f 6e 76 65 72 74 20 70 52 65 63   to convert pRec
2500: 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 72   to an integer r
2510: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 72  epresentation or
2520: 20 61 20 0a 2a 2a 20 20 20 20 66 6c 6f 61 74 69   a .**    floati
2530: 6e 67 2d 70 6f 69 6e 74 20 72 65 70 72 65 73 65  ng-point represe
2540: 6e 74 61 74 69 6f 6e 20 69 66 20 61 6e 20 69 6e  ntation if an in
2550: 74 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 61  teger representa
2560: 74 69 6f 6e 0a 2a 2a 20 20 20 20 69 73 20 6e 6f  tion.**    is no
2570: 74 20 70 6f 73 73 69 62 6c 65 2e 20 20 4e 6f 74  t possible.  Not
2580: 65 20 74 68 61 74 20 74 68 65 20 69 6e 74 65 67  e that the integ
2590: 65 72 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  er representatio
25a0: 6e 20 69 73 0a 2a 2a 20 20 20 20 61 6c 77 61 79  n is.**    alway
25b0: 73 20 70 72 65 66 65 72 72 65 64 2c 20 65 76 65  s preferred, eve
25c0: 6e 20 69 66 20 74 68 65 20 61 66 66 69 6e 69 74  n if the affinit
25d0: 79 20 69 73 20 52 45 41 4c 2c 20 62 65 63 61 75  y is REAL, becau
25e0: 73 65 0a 2a 2a 20 20 20 20 61 6e 20 69 6e 74 65  se.**    an inte
25f0: 67 65 72 20 72 65 70 72 65 73 65 6e 74 61 74 69  ger representati
2600: 6f 6e 20 69 73 20 6d 6f 72 65 20 73 70 61 63 65  on is more space
2610: 20 65 66 66 69 63 69 65 6e 74 20 6f 6e 20 64 69   efficient on di
2620: 73 6b 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45  sk..**.** SQLITE
2630: 5f 41 46 46 5f 54 45 58 54 3a 0a 2a 2a 20 20 20  _AFF_TEXT:.**   
2640: 20 43 6f 6e 76 65 72 74 20 70 52 65 63 20 74 6f   Convert pRec to
2650: 20 61 20 74 65 78 74 20 72 65 70 72 65 73 65 6e   a text represen
2660: 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 51  tation..**.** SQ
2670: 4c 49 54 45 5f 41 46 46 5f 4e 4f 4e 45 3a 0a 2a  LITE_AFF_NONE:.*
2680: 2a 20 20 20 20 4e 6f 2d 6f 70 2e 20 20 70 52 65  *    No-op.  pRe
2690: 63 20 69 73 20 75 6e 63 68 61 6e 67 65 64 2e 0a  c is unchanged..
26a0: 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 61  */.static void a
26b0: 70 70 6c 79 41 66 66 69 6e 69 74 79 28 0a 20 20  pplyAffinity(.  
26c0: 4d 65 6d 20 2a 70 52 65 63 2c 20 20 20 20 20 20  Mem *pRec,      
26d0: 20 20 20 20 2f 2a 20 54 68 65 20 76 61 6c 75 65      /* The value
26e0: 20 74 6f 20 61 70 70 6c 79 20 61 66 66 69 6e 69   to apply affini
26f0: 74 79 20 74 6f 20 2a 2f 0a 20 20 63 68 61 72 20  ty to */.  char 
2700: 61 66 66 69 6e 69 74 79 2c 20 20 20 20 20 20 2f  affinity,      /
2710: 2a 20 54 68 65 20 61 66 66 69 6e 69 74 79 20 74  * The affinity t
2720: 6f 20 62 65 20 61 70 70 6c 69 65 64 20 2a 2f 0a  o be applied */.
2730: 20 20 75 38 20 65 6e 63 20 20 20 20 20 20 20 20    u8 enc        
2740: 20 20 20 20 20 20 2f 2a 20 55 73 65 20 74 68 69        /* Use thi
2750: 73 20 74 65 78 74 20 65 6e 63 6f 64 69 6e 67 20  s text encoding 
2760: 2a 2f 0a 29 7b 0a 20 20 69 66 28 20 61 66 66 69  */.){.  if( affi
2770: 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46  nity==SQLITE_AFF
2780: 5f 54 45 58 54 20 29 7b 0a 20 20 20 20 2f 2a 20  _TEXT ){.    /* 
2790: 4f 6e 6c 79 20 61 74 74 65 6d 70 74 20 74 68 65  Only attempt the
27a0: 20 63 6f 6e 76 65 72 73 69 6f 6e 20 74 6f 20 54   conversion to T
27b0: 45 58 54 20 69 66 20 74 68 65 72 65 20 69 73 20  EXT if there is 
27c0: 61 6e 20 69 6e 74 65 67 65 72 20 6f 72 20 72 65  an integer or re
27d0: 61 6c 0a 20 20 20 20 2a 2a 20 72 65 70 72 65 73  al.    ** repres
27e0: 65 6e 74 61 74 69 6f 6e 20 28 62 6c 6f 62 20 61  entation (blob a
27f0: 6e 64 20 4e 55 4c 4c 20 64 6f 20 6e 6f 74 20 67  nd NULL do not g
2800: 65 74 20 63 6f 6e 76 65 72 74 65 64 29 20 62 75  et converted) bu
2810: 74 20 6e 6f 20 73 74 72 69 6e 67 0a 20 20 20 20  t no string.    
2820: 2a 2a 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  ** representatio
2830: 6e 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66  n..    */.    if
2840: 28 20 30 3d 3d 28 70 52 65 63 2d 3e 66 6c 61 67  ( 0==(pRec->flag
2850: 73 26 4d 45 4d 5f 53 74 72 29 20 26 26 20 28 70  s&MEM_Str) && (p
2860: 52 65 63 2d 3e 66 6c 61 67 73 26 28 4d 45 4d 5f  Rec->flags&(MEM_
2870: 52 65 61 6c 7c 4d 45 4d 5f 49 6e 74 29 29 20 29  Real|MEM_Int)) )
2880: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  {.      sqlite3V
2890: 64 62 65 4d 65 6d 53 74 72 69 6e 67 69 66 79 28  dbeMemStringify(
28a0: 70 52 65 63 2c 20 65 6e 63 29 3b 0a 20 20 20 20  pRec, enc);.    
28b0: 7d 0a 20 20 20 20 70 52 65 63 2d 3e 66 6c 61 67  }.    pRec->flag
28c0: 73 20 26 3d 20 7e 28 4d 45 4d 5f 52 65 61 6c 7c  s &= ~(MEM_Real|
28d0: 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d 65 6c 73  MEM_Int);.  }els
28e0: 65 20 69 66 28 20 61 66 66 69 6e 69 74 79 21 3d  e if( affinity!=
28f0: 53 51 4c 49 54 45 5f 41 46 46 5f 4e 4f 4e 45 20  SQLITE_AFF_NONE 
2900: 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 61  ){.    assert( a
2910: 66 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f  ffinity==SQLITE_
2920: 41 46 46 5f 49 4e 54 45 47 45 52 20 7c 7c 20 61  AFF_INTEGER || a
2930: 66 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f  ffinity==SQLITE_
2940: 41 46 46 5f 52 45 41 4c 0a 20 20 20 20 20 20 20  AFF_REAL.       
2950: 20 20 20 20 20 20 7c 7c 20 61 66 66 69 6e 69 74        || affinit
2960: 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55  y==SQLITE_AFF_NU
2970: 4d 45 52 49 43 20 29 3b 0a 20 20 20 20 61 70 70  MERIC );.    app
2980: 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74  lyNumericAffinit
2990: 79 28 70 52 65 63 29 3b 0a 20 20 20 20 69 66 28  y(pRec);.    if(
29a0: 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d   pRec->flags & M
29b0: 45 4d 5f 52 65 61 6c 20 29 7b 0a 20 20 20 20 20  EM_Real ){.     
29c0: 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 65   sqlite3VdbeInte
29d0: 67 65 72 41 66 66 69 6e 69 74 79 28 70 52 65 63  gerAffinity(pRec
29e0: 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a 0a  );.    }.  }.}..
29f0: 2f 2a 0a 2a 2a 20 54 72 79 20 74 6f 20 63 6f 6e  /*.** Try to con
2a00: 76 65 72 74 20 74 68 65 20 74 79 70 65 20 6f 66  vert the type of
2a10: 20 61 20 66 75 6e 63 74 69 6f 6e 20 61 72 67 75   a function argu
2a20: 6d 65 6e 74 20 6f 72 20 61 20 72 65 73 75 6c 74  ment or a result
2a30: 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 69 6e 74 6f 20   column.** into 
2a40: 61 20 6e 75 6d 65 72 69 63 20 72 65 70 72 65 73  a numeric repres
2a50: 65 6e 74 61 74 69 6f 6e 2e 20 20 55 73 65 20 65  entation.  Use e
2a60: 69 74 68 65 72 20 49 4e 54 45 47 45 52 20 6f 72  ither INTEGER or
2a70: 20 52 45 41 4c 20 77 68 69 63 68 65 76 65 72 0a   REAL whichever.
2a80: 2a 2a 20 69 73 20 61 70 70 72 6f 70 72 69 61 74  ** is appropriat
2a90: 65 2e 20 20 42 75 74 20 6f 6e 6c 79 20 64 6f 20  e.  But only do 
2aa0: 74 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69  the conversion i
2ab0: 66 20 69 74 20 69 73 20 70 6f 73 73 69 62 6c 65  f it is possible
2ac0: 20 77 69 74 68 6f 75 74 0a 2a 2a 20 6c 6f 73 73   without.** loss
2ad0: 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20   of information 
2ae0: 61 6e 64 20 72 65 74 75 72 6e 20 74 68 65 20 72  and return the r
2af0: 65 76 69 73 65 64 20 74 79 70 65 20 6f 66 20 74  evised type of t
2b00: 68 65 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a  he argument..*/.
2b10: 69 6e 74 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  int sqlite3_valu
2b20: 65 5f 6e 75 6d 65 72 69 63 5f 74 79 70 65 28 73  e_numeric_type(s
2b30: 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 56  qlite3_value *pV
2b40: 61 6c 29 7b 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d  al){.  Mem *pMem
2b50: 20 3d 20 28 4d 65 6d 2a 29 70 56 61 6c 3b 0a 20   = (Mem*)pVal;. 
2b60: 20 69 66 28 20 70 4d 65 6d 2d 3e 74 79 70 65 3d   if( pMem->type=
2b70: 3d 53 51 4c 49 54 45 5f 54 45 58 54 20 29 7b 0a  =SQLITE_TEXT ){.
2b80: 20 20 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63      applyNumeric
2b90: 41 66 66 69 6e 69 74 79 28 70 4d 65 6d 29 3b 0a  Affinity(pMem);.
2ba0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
2bb0: 65 6d 53 74 6f 72 65 54 79 70 65 28 70 4d 65 6d  emStoreType(pMem
2bc0: 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20  );.  }.  return 
2bd0: 70 4d 65 6d 2d 3e 74 79 70 65 3b 0a 7d 0a 0a 2f  pMem->type;.}../
2be0: 2a 0a 2a 2a 20 45 78 70 6f 72 74 65 64 20 76 65  *.** Exported ve
2bf0: 72 73 69 6f 6e 20 6f 66 20 61 70 70 6c 79 41 66  rsion of applyAf
2c00: 66 69 6e 69 74 79 28 29 2e 20 54 68 69 73 20 6f  finity(). This o
2c10: 6e 65 20 77 6f 72 6b 73 20 6f 6e 20 73 71 6c 69  ne works on sqli
2c20: 74 65 33 5f 76 61 6c 75 65 2a 2c 20 0a 2a 2a 20  te3_value*, .** 
2c30: 6e 6f 74 20 74 68 65 20 69 6e 74 65 72 6e 61 6c  not the internal
2c40: 20 4d 65 6d 2a 20 74 79 70 65 2e 0a 2a 2f 0a 76   Mem* type..*/.v
2c50: 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65  oid sqlite3Value
2c60: 41 70 70 6c 79 41 66 66 69 6e 69 74 79 28 0a 20  ApplyAffinity(. 
2c70: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a   sqlite3_value *
2c80: 70 56 61 6c 2c 20 0a 20 20 75 38 20 61 66 66 69  pVal, .  u8 affi
2c90: 6e 69 74 79 2c 20 0a 20 20 75 38 20 65 6e 63 0a  nity, .  u8 enc.
2ca0: 29 7b 0a 20 20 61 70 70 6c 79 41 66 66 69 6e 69  ){.  applyAffini
2cb0: 74 79 28 28 4d 65 6d 20 2a 29 70 56 61 6c 2c 20  ty((Mem *)pVal, 
2cc0: 61 66 66 69 6e 69 74 79 2c 20 65 6e 63 29 3b 0a  affinity, enc);.
2cd0: 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  }..#ifdef SQLITE
2ce0: 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20 57 72 69  _DEBUG./*.** Wri
2cf0: 74 65 20 61 20 6e 69 63 65 20 73 74 72 69 6e 67  te a nice string
2d00: 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   representation 
2d10: 6f 66 20 74 68 65 20 63 6f 6e 74 65 6e 74 73 20  of the contents 
2d20: 6f 66 20 63 65 6c 6c 20 70 4d 65 6d 0a 2a 2a 20  of cell pMem.** 
2d30: 69 6e 74 6f 20 62 75 66 66 65 72 20 7a 42 75 66  into buffer zBuf
2d40: 2c 20 6c 65 6e 67 74 68 20 6e 42 75 66 2e 0a 2a  , length nBuf..*
2d50: 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64  /.void sqlite3Vd
2d60: 62 65 4d 65 6d 50 72 65 74 74 79 50 72 69 6e 74  beMemPrettyPrint
2d70: 28 4d 65 6d 20 2a 70 4d 65 6d 2c 20 63 68 61 72  (Mem *pMem, char
2d80: 20 2a 7a 42 75 66 29 7b 0a 20 20 63 68 61 72 20   *zBuf){.  char 
2d90: 2a 7a 43 73 72 20 3d 20 7a 42 75 66 3b 0a 20 20  *zCsr = zBuf;.  
2da0: 69 6e 74 20 66 20 3d 20 70 4d 65 6d 2d 3e 66 6c  int f = pMem->fl
2db0: 61 67 73 3b 0a 0a 20 20 73 74 61 74 69 63 20 63  ags;..  static c
2dc0: 6f 6e 73 74 20 63 68 61 72 20 2a 63 6f 6e 73 74  onst char *const
2dd0: 20 65 6e 63 6e 61 6d 65 73 5b 5d 20 3d 20 7b 22   encnames[] = {"
2de0: 28 58 29 22 2c 20 22 28 38 29 22 2c 20 22 28 31  (X)", "(8)", "(1
2df0: 36 4c 45 29 22 2c 20 22 28 31 36 42 45 29 22 7d  6LE)", "(16BE)"}
2e00: 3b 0a 0a 20 20 69 66 28 20 66 26 4d 45 4d 5f 42  ;..  if( f&MEM_B
2e10: 6c 6f 62 20 29 7b 0a 20 20 20 20 69 6e 74 20 69  lob ){.    int i
2e20: 3b 0a 20 20 20 20 63 68 61 72 20 63 3b 0a 20 20  ;.    char c;.  
2e30: 20 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 44 79    if( f & MEM_Dy
2e40: 6e 20 29 7b 0a 20 20 20 20 20 20 63 20 3d 20 27  n ){.      c = '
2e50: 7a 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  z';.      assert
2e60: 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74 61 74  ( (f & (MEM_Stat
2e70: 69 63 7c 4d 45 4d 5f 45 70 68 65 6d 29 29 3d 3d  ic|MEM_Ephem))==
2e80: 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69  0 );.    }else i
2e90: 66 28 20 66 20 26 20 4d 45 4d 5f 53 74 61 74 69  f( f & MEM_Stati
2ea0: 63 20 29 7b 0a 20 20 20 20 20 20 63 20 3d 20 27  c ){.      c = '
2eb0: 74 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  t';.      assert
2ec0: 28 20 28 66 20 26 20 28 4d 45 4d 5f 44 79 6e 7c  ( (f & (MEM_Dyn|
2ed0: 4d 45 4d 5f 45 70 68 65 6d 29 29 3d 3d 30 20 29  MEM_Ephem))==0 )
2ee0: 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
2ef0: 66 20 26 20 4d 45 4d 5f 45 70 68 65 6d 20 29 7b  f & MEM_Ephem ){
2f00: 0a 20 20 20 20 20 20 63 20 3d 20 27 65 27 3b 0a  .      c = 'e';.
2f10: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28 66        assert( (f
2f20: 20 26 20 28 4d 45 4d 5f 53 74 61 74 69 63 7c 4d   & (MEM_Static|M
2f30: 45 4d 5f 44 79 6e 29 29 3d 3d 30 20 29 3b 0a 20  EM_Dyn))==0 );. 
2f40: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
2f50: 63 20 3d 20 27 73 27 3b 0a 20 20 20 20 7d 0a 0a  c = 's';.    }..
2f60: 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72      sqlite3_snpr
2f70: 69 6e 74 66 28 31 30 30 2c 20 7a 43 73 72 2c 20  intf(100, zCsr, 
2f80: 22 25 63 22 2c 20 63 29 3b 0a 20 20 20 20 7a 43  "%c", c);.    zC
2f90: 73 72 20 2b 3d 20 73 71 6c 69 74 65 33 53 74 72  sr += sqlite3Str
2fa0: 6c 65 6e 33 30 28 7a 43 73 72 29 3b 0a 20 20 20  len30(zCsr);.   
2fb0: 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74   sqlite3_snprint
2fc0: 66 28 31 30 30 2c 20 7a 43 73 72 2c 20 22 25 64  f(100, zCsr, "%d
2fd0: 5b 22 2c 20 70 4d 65 6d 2d 3e 6e 29 3b 0a 20 20  [", pMem->n);.  
2fe0: 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74 65    zCsr += sqlite
2ff0: 33 53 74 72 6c 65 6e 33 30 28 7a 43 73 72 29 3b  3Strlen30(zCsr);
3000: 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  .    for(i=0; i<
3010: 31 36 20 26 26 20 69 3c 70 4d 65 6d 2d 3e 6e 3b  16 && i<pMem->n;
3020: 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 73 71 6c   i++){.      sql
3030: 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30  ite3_snprintf(10
3040: 30 2c 20 7a 43 73 72 2c 20 22 25 30 32 58 22 2c  0, zCsr, "%02X",
3050: 20 28 28 69 6e 74 29 70 4d 65 6d 2d 3e 7a 5b 69   ((int)pMem->z[i
3060: 5d 20 26 20 30 78 46 46 29 29 3b 0a 20 20 20 20  ] & 0xFF));.    
3070: 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74 65    zCsr += sqlite
3080: 33 53 74 72 6c 65 6e 33 30 28 7a 43 73 72 29 3b  3Strlen30(zCsr);
3090: 0a 20 20 20 20 7d 0a 20 20 20 20 66 6f 72 28 69  .    }.    for(i
30a0: 3d 30 3b 20 69 3c 31 36 20 26 26 20 69 3c 70 4d  =0; i<16 && i<pM
30b0: 65 6d 2d 3e 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20  em->n; i++){.   
30c0: 20 20 20 63 68 61 72 20 7a 20 3d 20 70 4d 65 6d     char z = pMem
30d0: 2d 3e 7a 5b 69 5d 3b 0a 20 20 20 20 20 20 69 66  ->z[i];.      if
30e0: 28 20 7a 3c 33 32 20 7c 7c 20 7a 3e 31 32 36 20  ( z<32 || z>126 
30f0: 29 20 2a 7a 43 73 72 2b 2b 20 3d 20 27 2e 27 3b  ) *zCsr++ = '.';
3100: 0a 20 20 20 20 20 20 65 6c 73 65 20 2a 7a 43 73  .      else *zCs
3110: 72 2b 2b 20 3d 20 7a 3b 0a 20 20 20 20 7d 0a 0a  r++ = z;.    }..
3120: 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72      sqlite3_snpr
3130: 69 6e 74 66 28 31 30 30 2c 20 7a 43 73 72 2c 20  intf(100, zCsr, 
3140: 22 5d 25 73 22 2c 20 65 6e 63 6e 61 6d 65 73 5b  "]%s", encnames[
3150: 70 4d 65 6d 2d 3e 65 6e 63 5d 29 3b 0a 20 20 20  pMem->enc]);.   
3160: 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74 65 33   zCsr += sqlite3
3170: 53 74 72 6c 65 6e 33 30 28 7a 43 73 72 29 3b 0a  Strlen30(zCsr);.
3180: 20 20 20 20 69 66 28 20 66 20 26 20 4d 45 4d 5f      if( f & MEM_
3190: 5a 65 72 6f 20 29 7b 0a 20 20 20 20 20 20 73 71  Zero ){.      sq
31a0: 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31  lite3_snprintf(1
31b0: 30 30 2c 20 7a 43 73 72 2c 22 2b 25 64 7a 22 2c  00, zCsr,"+%dz",
31c0: 70 4d 65 6d 2d 3e 75 2e 6e 5a 65 72 6f 29 3b 0a  pMem->u.nZero);.
31d0: 20 20 20 20 20 20 7a 43 73 72 20 2b 3d 20 73 71        zCsr += sq
31e0: 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 43  lite3Strlen30(zC
31f0: 73 72 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 2a  sr);.    }.    *
3200: 7a 43 73 72 20 3d 20 27 5c 30 27 3b 0a 20 20 7d  zCsr = '\0';.  }
3210: 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d  else if( f & MEM
3220: 5f 53 74 72 20 29 7b 0a 20 20 20 20 69 6e 74 20  _Str ){.    int 
3230: 6a 2c 20 6b 3b 0a 20 20 20 20 7a 42 75 66 5b 30  j, k;.    zBuf[0
3240: 5d 20 3d 20 27 20 27 3b 0a 20 20 20 20 69 66 28  ] = ' ';.    if(
3250: 20 66 20 26 20 4d 45 4d 5f 44 79 6e 20 29 7b 0a   f & MEM_Dyn ){.
3260: 20 20 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20        zBuf[1] = 
3270: 27 7a 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72  'z';.      asser
3280: 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74 61  t( (f & (MEM_Sta
3290: 74 69 63 7c 4d 45 4d 5f 45 70 68 65 6d 29 29 3d  tic|MEM_Ephem))=
32a0: 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20  =0 );.    }else 
32b0: 69 66 28 20 66 20 26 20 4d 45 4d 5f 53 74 61 74  if( f & MEM_Stat
32c0: 69 63 20 29 7b 0a 20 20 20 20 20 20 7a 42 75 66  ic ){.      zBuf
32d0: 5b 31 5d 20 3d 20 27 74 27 3b 0a 20 20 20 20 20  [1] = 't';.     
32e0: 20 61 73 73 65 72 74 28 20 28 66 20 26 20 28 4d   assert( (f & (M
32f0: 45 4d 5f 44 79 6e 7c 4d 45 4d 5f 45 70 68 65 6d  EM_Dyn|MEM_Ephem
3300: 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c  ))==0 );.    }el
3310: 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 45  se if( f & MEM_E
3320: 70 68 65 6d 20 29 7b 0a 20 20 20 20 20 20 7a 42  phem ){.      zB
3330: 75 66 5b 31 5d 20 3d 20 27 65 27 3b 0a 20 20 20  uf[1] = 'e';.   
3340: 20 20 20 61 73 73 65 72 74 28 20 28 66 20 26 20     assert( (f & 
3350: 28 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f  (MEM_Static|MEM_
3360: 44 79 6e 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20  Dyn))==0 );.    
3370: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 7a 42 75  }else{.      zBu
3380: 66 5b 31 5d 20 3d 20 27 73 27 3b 0a 20 20 20 20  f[1] = 's';.    
3390: 7d 0a 20 20 20 20 6b 20 3d 20 32 3b 0a 20 20 20  }.    k = 2;.   
33a0: 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74   sqlite3_snprint
33b0: 66 28 31 30 30 2c 20 26 7a 42 75 66 5b 6b 5d 2c  f(100, &zBuf[k],
33c0: 20 22 25 64 22 2c 20 70 4d 65 6d 2d 3e 6e 29 3b   "%d", pMem->n);
33d0: 0a 20 20 20 20 6b 20 2b 3d 20 73 71 6c 69 74 65  .    k += sqlite
33e0: 33 53 74 72 6c 65 6e 33 30 28 26 7a 42 75 66 5b  3Strlen30(&zBuf[
33f0: 6b 5d 29 3b 0a 20 20 20 20 7a 42 75 66 5b 6b 2b  k]);.    zBuf[k+
3400: 2b 5d 20 3d 20 27 5b 27 3b 0a 20 20 20 20 66 6f  +] = '[';.    fo
3410: 72 28 6a 3d 30 3b 20 6a 3c 31 35 20 26 26 20 6a  r(j=0; j<15 && j
3420: 3c 70 4d 65 6d 2d 3e 6e 3b 20 6a 2b 2b 29 7b 0a  <pMem->n; j++){.
3430: 20 20 20 20 20 20 75 38 20 63 20 3d 20 70 4d 65        u8 c = pMe
3440: 6d 2d 3e 7a 5b 6a 5d 3b 0a 20 20 20 20 20 20 69  m->z[j];.      i
3450: 66 28 20 63 3e 3d 30 78 32 30 20 26 26 20 63 3c  f( c>=0x20 && c<
3460: 30 78 37 66 20 29 7b 0a 20 20 20 20 20 20 20 20  0x7f ){.        
3470: 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 63 3b 0a 20  zBuf[k++] = c;. 
3480: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
3490: 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20      zBuf[k++] = 
34a0: 27 2e 27 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  '.';.      }.   
34b0: 20 7d 0a 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d   }.    zBuf[k++]
34c0: 20 3d 20 27 5d 27 3b 0a 20 20 20 20 73 71 6c 69   = ']';.    sqli
34d0: 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30  te3_snprintf(100
34e0: 2c 26 7a 42 75 66 5b 6b 5d 2c 20 65 6e 63 6e 61  ,&zBuf[k], encna
34f0: 6d 65 73 5b 70 4d 65 6d 2d 3e 65 6e 63 5d 29 3b  mes[pMem->enc]);
3500: 0a 20 20 20 20 6b 20 2b 3d 20 73 71 6c 69 74 65  .    k += sqlite
3510: 33 53 74 72 6c 65 6e 33 30 28 26 7a 42 75 66 5b  3Strlen30(&zBuf[
3520: 6b 5d 29 3b 0a 20 20 20 20 7a 42 75 66 5b 6b 2b  k]);.    zBuf[k+
3530: 2b 5d 20 3d 20 30 3b 0a 20 20 7d 0a 7d 0a 23 65  +] = 0;.  }.}.#e
3540: 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c  ndif..#ifdef SQL
3550: 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20  ITE_DEBUG./*.** 
3560: 50 72 69 6e 74 20 74 68 65 20 76 61 6c 75 65 20  Print the value 
3570: 6f 66 20 61 20 72 65 67 69 73 74 65 72 20 66 6f  of a register fo
3580: 72 20 74 72 61 63 69 6e 67 20 70 75 72 70 6f 73  r tracing purpos
3590: 65 73 3a 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f  es:.*/.static vo
35a0: 69 64 20 6d 65 6d 54 72 61 63 65 50 72 69 6e 74  id memTracePrint
35b0: 28 46 49 4c 45 20 2a 6f 75 74 2c 20 4d 65 6d 20  (FILE *out, Mem 
35c0: 2a 70 29 7b 0a 20 20 69 66 28 20 70 2d 3e 66 6c  *p){.  if( p->fl
35d0: 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29  ags & MEM_Null )
35e0: 7b 0a 20 20 20 20 66 70 72 69 6e 74 66 28 6f 75  {.    fprintf(ou
35f0: 74 2c 20 22 20 4e 55 4c 4c 22 29 3b 0a 20 20 7d  t, " NULL");.  }
3600: 65 6c 73 65 20 69 66 28 20 28 70 2d 3e 66 6c 61  else if( (p->fla
3610: 67 73 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45  gs & (MEM_Int|ME
3620: 4d 5f 53 74 72 29 29 3d 3d 28 4d 45 4d 5f 49 6e  M_Str))==(MEM_In
3630: 74 7c 4d 45 4d 5f 53 74 72 29 20 29 7b 0a 20 20  t|MEM_Str) ){.  
3640: 20 20 66 70 72 69 6e 74 66 28 6f 75 74 2c 20 22    fprintf(out, "
3650: 20 73 69 3a 25 6c 6c 64 22 2c 20 70 2d 3e 75 2e   si:%lld", p->u.
3660: 69 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  i);.  }else if( 
3670: 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  p->flags & MEM_I
3680: 6e 74 20 29 7b 0a 20 20 20 20 66 70 72 69 6e 74  nt ){.    fprint
3690: 66 28 6f 75 74 2c 20 22 20 69 3a 25 6c 6c 64 22  f(out, " i:%lld"
36a0: 2c 20 70 2d 3e 75 2e 69 29 3b 0a 23 69 66 6e 64  , p->u.i);.#ifnd
36b0: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ef SQLITE_OMIT_F
36c0: 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20  LOATING_POINT.  
36d0: 7d 65 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c 61  }else if( p->fla
36e0: 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 20 29 7b  gs & MEM_Real ){
36f0: 0a 20 20 20 20 66 70 72 69 6e 74 66 28 6f 75 74  .    fprintf(out
3700: 2c 20 22 20 72 3a 25 67 22 2c 20 70 2d 3e 72 29  , " r:%g", p->r)
3710: 3b 0a 23 65 6e 64 69 66 0a 20 20 7d 65 6c 73 65  ;.#endif.  }else
3720: 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20   if( p->flags & 
3730: 4d 45 4d 5f 52 6f 77 53 65 74 20 29 7b 0a 20 20  MEM_RowSet ){.  
3740: 20 20 66 70 72 69 6e 74 66 28 6f 75 74 2c 20 22    fprintf(out, "
3750: 20 28 72 6f 77 73 65 74 29 22 29 3b 0a 20 20 7d   (rowset)");.  }
3760: 65 6c 73 65 7b 0a 20 20 20 20 63 68 61 72 20 7a  else{.    char z
3770: 42 75 66 5b 32 30 30 5d 3b 0a 20 20 20 20 73 71  Buf[200];.    sq
3780: 6c 69 74 65 33 56 64 62 65 4d 65 6d 50 72 65 74  lite3VdbeMemPret
3790: 74 79 50 72 69 6e 74 28 70 2c 20 7a 42 75 66 29  tyPrint(p, zBuf)
37a0: 3b 0a 20 20 20 20 66 70 72 69 6e 74 66 28 6f 75  ;.    fprintf(ou
37b0: 74 2c 20 22 20 22 29 3b 0a 20 20 20 20 66 70 72  t, " ");.    fpr
37c0: 69 6e 74 66 28 6f 75 74 2c 20 22 25 73 22 2c 20  intf(out, "%s", 
37d0: 7a 42 75 66 29 3b 0a 20 20 7d 0a 7d 0a 73 74 61  zBuf);.  }.}.sta
37e0: 74 69 63 20 76 6f 69 64 20 72 65 67 69 73 74 65  tic void registe
37f0: 72 54 72 61 63 65 28 46 49 4c 45 20 2a 6f 75 74  rTrace(FILE *out
3800: 2c 20 69 6e 74 20 69 52 65 67 2c 20 4d 65 6d 20  , int iReg, Mem 
3810: 2a 70 29 7b 0a 20 20 66 70 72 69 6e 74 66 28 6f  *p){.  fprintf(o
3820: 75 74 2c 20 22 52 45 47 5b 25 64 5d 20 3d 20 22  ut, "REG[%d] = "
3830: 2c 20 69 52 65 67 29 3b 0a 20 20 6d 65 6d 54 72  , iReg);.  memTr
3840: 61 63 65 50 72 69 6e 74 28 6f 75 74 2c 20 70 29  acePrint(out, p)
3850: 3b 0a 20 20 66 70 72 69 6e 74 66 28 6f 75 74 2c  ;.  fprintf(out,
3860: 20 22 5c 6e 22 29 3b 0a 7d 0a 23 65 6e 64 69 66   "\n");.}.#endif
3870: 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
3880: 44 45 42 55 47 0a 23 20 20 64 65 66 69 6e 65 20  DEBUG.#  define 
3890: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 52  REGISTER_TRACE(R
38a0: 2c 4d 29 20 69 66 28 70 2d 3e 74 72 61 63 65 29  ,M) if(p->trace)
38b0: 72 65 67 69 73 74 65 72 54 72 61 63 65 28 70 2d  registerTrace(p-
38c0: 3e 74 72 61 63 65 2c 52 2c 4d 29 0a 23 65 6c 73  >trace,R,M).#els
38d0: 65 0a 23 20 20 64 65 66 69 6e 65 20 52 45 47 49  e.#  define REGI
38e0: 53 54 45 52 5f 54 52 41 43 45 28 52 2c 4d 29 0a  STER_TRACE(R,M).
38f0: 23 65 6e 64 69 66 0a 0a 0a 23 69 66 64 65 66 20  #endif...#ifdef 
3900: 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 0a 2f 2a  VDBE_PROFILE../*
3910: 20 0a 2a 2a 20 68 77 74 69 6d 65 2e 68 20 63 6f   .** hwtime.h co
3920: 6e 74 61 69 6e 73 20 69 6e 6c 69 6e 65 20 61 73  ntains inline as
3930: 73 65 6d 62 6c 65 72 20 63 6f 64 65 20 66 6f 72  sembler code for
3940: 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 0a 2a   implementing .*
3950: 2a 20 68 69 67 68 2d 70 65 72 66 6f 72 6d 61 6e  * high-performan
3960: 63 65 20 74 69 6d 69 6e 67 20 72 6f 75 74 69 6e  ce timing routin
3970: 65 73 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20  es..*/.#include 
3980: 22 68 77 74 69 6d 65 2e 68 22 0a 0a 23 65 6e 64  "hwtime.h"..#end
3990: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 43 48  if../*.** The CH
39a0: 45 43 4b 5f 46 4f 52 5f 49 4e 54 45 52 52 55 50  ECK_FOR_INTERRUP
39b0: 54 20 6d 61 63 72 6f 20 64 65 66 69 6e 65 64 20  T macro defined 
39c0: 68 65 72 65 20 6c 6f 6f 6b 73 20 74 6f 20 73 65  here looks to se
39d0: 65 20 69 66 20 74 68 65 0a 2a 2a 20 73 71 6c 69  e if the.** sqli
39e0: 74 65 33 5f 69 6e 74 65 72 72 75 70 74 28 29 20  te3_interrupt() 
39f0: 72 6f 75 74 69 6e 65 20 68 61 73 20 62 65 65 6e  routine has been
3a00: 20 63 61 6c 6c 65 64 2e 20 20 49 66 20 69 74 20   called.  If it 
3a10: 68 61 73 20 62 65 65 6e 2c 20 74 68 65 6e 0a 2a  has been, then.*
3a20: 2a 20 70 72 6f 63 65 73 73 69 6e 67 20 6f 66 20  * processing of 
3a30: 74 68 65 20 56 44 42 45 20 70 72 6f 67 72 61 6d  the VDBE program
3a40: 20 69 73 20 69 6e 74 65 72 72 75 70 74 65 64 2e   is interrupted.
3a50: 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6d 61 63 72  .**.** This macr
3a60: 6f 20 61 64 64 65 64 20 74 6f 20 65 76 65 72 79  o added to every
3a70: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 74 68 61   instruction tha
3a80: 74 20 64 6f 65 73 20 61 20 6a 75 6d 70 20 69 6e  t does a jump in
3a90: 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 69 6d 70   order to.** imp
3aa0: 6c 65 6d 65 6e 74 20 61 20 6c 6f 6f 70 2e 20 20  lement a loop.  
3ab0: 54 68 69 73 20 74 65 73 74 20 75 73 65 64 20 74  This test used t
3ac0: 6f 20 62 65 20 6f 6e 20 65 76 65 72 79 20 73 69  o be on every si
3ad0: 6e 67 6c 65 20 69 6e 73 74 72 75 63 74 69 6f 6e  ngle instruction
3ae0: 2c 0a 2a 2a 20 62 75 74 20 74 68 61 74 20 6d 65  ,.** but that me
3af0: 61 6e 74 20 77 65 20 6d 6f 72 65 20 74 65 73 74  ant we more test
3b00: 69 6e 67 20 74 68 61 74 20 77 65 20 6e 65 65 64  ing that we need
3b10: 65 64 2e 20 20 42 79 20 6f 6e 6c 79 20 74 65 73  ed.  By only tes
3b20: 74 69 6e 67 20 74 68 65 0a 2a 2a 20 66 6c 61 67  ting the.** flag
3b30: 20 6f 6e 20 6a 75 6d 70 20 69 6e 73 74 72 75 63   on jump instruc
3b40: 74 69 6f 6e 73 2c 20 77 65 20 67 65 74 20 61 20  tions, we get a 
3b50: 28 73 6d 61 6c 6c 29 20 73 70 65 65 64 20 69 6d  (small) speed im
3b60: 70 72 6f 76 65 6d 65 6e 74 2e 0a 2a 2f 0a 23 64  provement..*/.#d
3b70: 65 66 69 6e 65 20 43 48 45 43 4b 5f 46 4f 52 5f  efine CHECK_FOR_
3b80: 49 4e 54 45 52 52 55 50 54 20 5c 0a 20 20 20 69  INTERRUPT \.   i
3b90: 66 28 20 64 62 2d 3e 75 31 2e 69 73 49 6e 74 65  f( db->u1.isInte
3ba0: 72 72 75 70 74 65 64 20 29 20 67 6f 74 6f 20 61  rrupted ) goto a
3bb0: 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 69 6e 74 65  bort_due_to_inte
3bc0: 72 72 75 70 74 3b 0a 0a 0a 23 69 66 6e 64 65 66  rrupt;...#ifndef
3bd0: 20 4e 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20 54 68   NDEBUG./*.** Th
3be0: 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 6f  is function is o
3bf0: 6e 6c 79 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20  nly called from 
3c00: 77 69 74 68 69 6e 20 61 6e 20 61 73 73 65 72 74  within an assert
3c10: 28 29 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 49  () expression. I
3c20: 74 0a 2a 2a 20 63 68 65 63 6b 73 20 74 68 61 74  t.** checks that
3c30: 20 74 68 65 20 73 71 6c 69 74 65 33 2e 6e 54 72   the sqlite3.nTr
3c40: 61 6e 73 61 63 74 69 6f 6e 20 76 61 72 69 61 62  ansaction variab
3c50: 6c 65 20 69 73 20 63 6f 72 72 65 63 74 6c 79 20  le is correctly 
3c60: 73 65 74 20 74 6f 0a 2a 2a 20 74 68 65 20 6e 75  set to.** the nu
3c70: 6d 62 65 72 20 6f 66 20 6e 6f 6e 2d 74 72 61 6e  mber of non-tran
3c80: 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e  saction savepoin
3c90: 74 73 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20  ts currently in 
3ca0: 74 68 65 20 0a 2a 2a 20 6c 69 6e 6b 65 64 20 6c  the .** linked l
3cb0: 69 73 74 20 73 74 61 72 74 69 6e 67 20 61 74 20  ist starting at 
3cc0: 73 71 6c 69 74 65 33 2e 70 53 61 76 65 70 6f 69  sqlite3.pSavepoi
3cd0: 6e 74 2e 0a 2a 2a 20 0a 2a 2a 20 55 73 61 67 65  nt..** .** Usage
3ce0: 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 61 73 73 65  :.**.**     asse
3cf0: 72 74 28 20 63 68 65 63 6b 53 61 76 65 70 6f 69  rt( checkSavepoi
3d00: 6e 74 43 6f 75 6e 74 28 64 62 29 20 29 3b 0a 2a  ntCount(db) );.*
3d10: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 63 68 65  /.static int che
3d20: 63 6b 53 61 76 65 70 6f 69 6e 74 43 6f 75 6e 74  ckSavepointCount
3d30: 28 73 71 6c 69 74 65 33 20 2a 64 62 29 7b 0a 20  (sqlite3 *db){. 
3d40: 20 69 6e 74 20 6e 20 3d 20 30 3b 0a 20 20 53 61   int n = 0;.  Sa
3d50: 76 65 70 6f 69 6e 74 20 2a 70 3b 0a 20 20 66 6f  vepoint *p;.  fo
3d60: 72 28 70 3d 64 62 2d 3e 70 53 61 76 65 70 6f 69  r(p=db->pSavepoi
3d70: 6e 74 3b 20 70 3b 20 70 3d 70 2d 3e 70 4e 65 78  nt; p; p=p->pNex
3d80: 74 29 20 6e 2b 2b 3b 0a 20 20 61 73 73 65 72 74  t) n++;.  assert
3d90: 28 20 6e 3d 3d 28 64 62 2d 3e 6e 53 61 76 65 70  ( n==(db->nSavep
3da0: 6f 69 6e 74 20 2b 20 64 62 2d 3e 69 73 54 72 61  oint + db->isTra
3db0: 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e  nsactionSavepoin
3dc0: 74 29 20 29 3b 0a 20 20 72 65 74 75 72 6e 20 31  t) );.  return 1
3dd0: 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  ;.}.#endif../*.*
3de0: 2a 20 54 72 61 6e 73 66 65 72 20 65 72 72 6f 72  * Transfer error
3df0: 20 6d 65 73 73 61 67 65 20 74 65 78 74 20 66 72   message text fr
3e00: 6f 6d 20 61 6e 20 73 71 6c 69 74 65 33 5f 76 74  om an sqlite3_vt
3e10: 61 62 2e 7a 45 72 72 4d 73 67 20 28 74 65 78 74  ab.zErrMsg (text
3e20: 20 73 74 6f 72 65 64 0a 2a 2a 20 69 6e 20 6d 65   stored.** in me
3e30: 6d 6f 72 79 20 6f 62 74 61 69 6e 65 64 20 66 72  mory obtained fr
3e40: 6f 6d 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f  om sqlite3_mallo
3e50: 63 29 20 69 6e 74 6f 20 61 20 56 64 62 65 2e 7a  c) into a Vdbe.z
3e60: 45 72 72 4d 73 67 20 28 74 65 78 74 20 73 74 6f  ErrMsg (text sto
3e70: 72 65 64 0a 2a 2a 20 69 6e 20 6d 65 6d 6f 72 79  red.** in memory
3e80: 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 73   obtained from s
3e90: 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 29 2e  qlite3DbMalloc).
3ea0: 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20  .*/.static void 
3eb0: 69 6d 70 6f 72 74 56 74 61 62 45 72 72 4d 73 67  importVtabErrMsg
3ec0: 28 56 64 62 65 20 2a 70 2c 20 73 71 6c 69 74 65  (Vdbe *p, sqlite
3ed0: 33 5f 76 74 61 62 20 2a 70 56 74 61 62 29 7b 0a  3_vtab *pVtab){.
3ee0: 20 20 73 71 6c 69 74 65 33 20 2a 64 62 20 3d 20    sqlite3 *db = 
3ef0: 70 2d 3e 64 62 3b 0a 20 20 73 71 6c 69 74 65 33  p->db;.  sqlite3
3f00: 44 62 46 72 65 65 28 64 62 2c 20 70 2d 3e 7a 45  DbFree(db, p->zE
3f10: 72 72 4d 73 67 29 3b 0a 20 20 70 2d 3e 7a 45 72  rrMsg);.  p->zEr
3f20: 72 4d 73 67 20 3d 20 73 71 6c 69 74 65 33 44 62  rMsg = sqlite3Db
3f30: 53 74 72 44 75 70 28 64 62 2c 20 70 56 74 61 62  StrDup(db, pVtab
3f40: 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 73 71  ->zErrMsg);.  sq
3f50: 6c 69 74 65 33 5f 66 72 65 65 28 70 56 74 61 62  lite3_free(pVtab
3f60: 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 70 56  ->zErrMsg);.  pV
3f70: 74 61 62 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 30  tab->zErrMsg = 0
3f80: 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 45 78 65 63  ;.}.../*.** Exec
3f90: 75 74 65 20 61 73 20 6d 75 63 68 20 6f 66 20 61  ute as much of a
3fa0: 20 56 44 42 45 20 70 72 6f 67 72 61 6d 20 61 73   VDBE program as
3fb0: 20 77 65 20 63 61 6e 20 74 68 65 6e 20 72 65 74   we can then ret
3fc0: 75 72 6e 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74  urn..**.** sqlit
3fd0: 65 33 56 64 62 65 4d 61 6b 65 52 65 61 64 79 28  e3VdbeMakeReady(
3fe0: 29 20 6d 75 73 74 20 62 65 20 63 61 6c 6c 65 64  ) must be called
3ff0: 20 62 65 66 6f 72 65 20 74 68 69 73 20 72 6f 75   before this rou
4000: 74 69 6e 65 20 69 6e 20 6f 72 64 65 72 20 74 6f  tine in order to
4010: 0a 2a 2a 20 63 6c 6f 73 65 20 74 68 65 20 70 72  .** close the pr
4020: 6f 67 72 61 6d 20 77 69 74 68 20 61 20 66 69 6e  ogram with a fin
4030: 61 6c 20 4f 50 5f 48 61 6c 74 20 61 6e 64 20 74  al OP_Halt and t
4040: 6f 20 73 65 74 20 75 70 20 74 68 65 20 63 61 6c  o set up the cal
4050: 6c 62 61 63 6b 73 0a 2a 2a 20 61 6e 64 20 74 68  lbacks.** and th
4060: 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20  e error message 
4070: 70 6f 69 6e 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 57  pointer..**.** W
4080: 68 65 6e 65 76 65 72 20 61 20 72 6f 77 20 6f 72  henever a row or
4090: 20 72 65 73 75 6c 74 20 64 61 74 61 20 69 73 20   result data is 
40a0: 61 76 61 69 6c 61 62 6c 65 2c 20 74 68 69 73 20  available, this 
40b0: 72 6f 75 74 69 6e 65 20 77 69 6c 6c 20 65 69 74  routine will eit
40c0: 68 65 72 0a 2a 2a 20 69 6e 76 6f 6b 65 20 74 68  her.** invoke th
40d0: 65 20 72 65 73 75 6c 74 20 63 61 6c 6c 62 61 63  e result callbac
40e0: 6b 20 28 69 66 20 74 68 65 72 65 20 69 73 20 6f  k (if there is o
40f0: 6e 65 29 20 6f 72 20 72 65 74 75 72 6e 20 77 69  ne) or return wi
4100: 74 68 0a 2a 2a 20 53 51 4c 49 54 45 5f 52 4f 57  th.** SQLITE_ROW
4110: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 61 6e 20 61 74  ..**.** If an at
4120: 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20 74 6f  tempt is made to
4130: 20 6f 70 65 6e 20 61 20 6c 6f 63 6b 65 64 20 64   open a locked d
4140: 61 74 61 62 61 73 65 2c 20 74 68 65 6e 20 74 68  atabase, then th
4150: 69 73 20 72 6f 75 74 69 6e 65 0a 2a 2a 20 77 69  is routine.** wi
4160: 6c 6c 20 65 69 74 68 65 72 20 69 6e 76 6f 6b 65  ll either invoke
4170: 20 74 68 65 20 62 75 73 79 20 63 61 6c 6c 62 61   the busy callba
4180: 63 6b 20 28 69 66 20 74 68 65 72 65 20 69 73 20  ck (if there is 
4190: 6f 6e 65 29 20 6f 72 20 69 74 20 77 69 6c 6c 0a  one) or it will.
41a0: 2a 2a 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45  ** return SQLITE
41b0: 5f 42 55 53 59 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  _BUSY..**.** If 
41c0: 61 6e 20 65 72 72 6f 72 20 6f 63 63 75 72 73 2c  an error occurs,
41d0: 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67   an error messag
41e0: 65 20 69 73 20 77 72 69 74 74 65 6e 20 74 6f 20  e is written to 
41f0: 6d 65 6d 6f 72 79 20 6f 62 74 61 69 6e 65 64 0a  memory obtained.
4200: 2a 2a 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 5f  ** from sqlite3_
4210: 6d 61 6c 6c 6f 63 28 29 20 61 6e 64 20 70 2d 3e  malloc() and p->
4220: 7a 45 72 72 4d 73 67 20 69 73 20 6d 61 64 65 20  zErrMsg is made 
4230: 74 6f 20 70 6f 69 6e 74 20 74 6f 20 74 68 61 74  to point to that
4240: 20 6d 65 6d 6f 72 79 2e 0a 2a 2a 20 54 68 65 20   memory..** The 
4250: 65 72 72 6f 72 20 63 6f 64 65 20 69 73 20 73 74  error code is st
4260: 6f 72 65 64 20 69 6e 20 70 2d 3e 72 63 20 61 6e  ored in p->rc an
4270: 64 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 72  d this routine r
4280: 65 74 75 72 6e 73 20 53 51 4c 49 54 45 5f 45 52  eturns SQLITE_ER
4290: 52 4f 52 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ROR..**.** If th
42a0: 65 20 63 61 6c 6c 62 61 63 6b 20 65 76 65 72 20  e callback ever 
42b0: 72 65 74 75 72 6e 73 20 6e 6f 6e 2d 7a 65 72 6f  returns non-zero
42c0: 2c 20 74 68 65 6e 20 74 68 65 20 70 72 6f 67 72  , then the progr
42d0: 61 6d 20 65 78 69 74 73 0a 2a 2a 20 69 6d 6d 65  am exits.** imme
42e0: 64 69 61 74 65 6c 79 2e 20 20 54 68 65 72 65 20  diately.  There 
42f0: 77 69 6c 6c 20 62 65 20 6e 6f 20 65 72 72 6f 72  will be no error
4300: 20 6d 65 73 73 61 67 65 20 62 75 74 20 74 68 65   message but the
4310: 20 70 2d 3e 72 63 20 66 69 65 6c 64 20 69 73 0a   p->rc field is.
4320: 2a 2a 20 73 65 74 20 74 6f 20 53 51 4c 49 54 45  ** set to SQLITE
4330: 5f 41 42 4f 52 54 20 61 6e 64 20 74 68 69 73 20  _ABORT and this 
4340: 72 6f 75 74 69 6e 65 20 77 69 6c 6c 20 72 65 74  routine will ret
4350: 75 72 6e 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  urn SQLITE_ERROR
4360: 2e 0a 2a 2a 0a 2a 2a 20 41 20 6d 65 6d 6f 72 79  ..**.** A memory
4370: 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 65 72 72 6f   allocation erro
4380: 72 20 63 61 75 73 65 73 20 70 2d 3e 72 63 20 74  r causes p->rc t
4390: 6f 20 62 65 20 73 65 74 20 74 6f 20 53 51 4c 49  o be set to SQLI
43a0: 54 45 5f 4e 4f 4d 45 4d 20 61 6e 64 20 74 68 69  TE_NOMEM and thi
43b0: 73 0a 2a 2a 20 72 6f 75 74 69 6e 65 20 74 6f 20  s.** routine to 
43c0: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 45 52  return SQLITE_ER
43d0: 52 4f 52 2e 0a 2a 2a 0a 2a 2a 20 4f 74 68 65 72  ROR..**.** Other
43e0: 20 66 61 74 61 6c 20 65 72 72 6f 72 73 20 72 65   fatal errors re
43f0: 74 75 72 6e 20 53 51 4c 49 54 45 5f 45 52 52 4f  turn SQLITE_ERRO
4400: 52 2e 0a 2a 2a 0a 2a 2a 20 41 66 74 65 72 20 74  R..**.** After t
4410: 68 69 73 20 72 6f 75 74 69 6e 65 20 68 61 73 20  his routine has 
4420: 66 69 6e 69 73 68 65 64 2c 20 73 71 6c 69 74 65  finished, sqlite
4430: 33 56 64 62 65 46 69 6e 61 6c 69 7a 65 28 29 20  3VdbeFinalize() 
4440: 73 68 6f 75 6c 64 20 62 65 0a 2a 2a 20 75 73 65  should be.** use
4450: 64 20 74 6f 20 63 6c 65 61 6e 20 75 70 20 74 68  d to clean up th
4460: 65 20 6d 65 73 73 20 74 68 61 74 20 77 61 73 20  e mess that was 
4470: 6c 65 66 74 20 62 65 68 69 6e 64 2e 0a 2a 2f 0a  left behind..*/.
4480: 69 6e 74 20 73 71 6c 69 74 65 33 56 64 62 65 45  int sqlite3VdbeE
4490: 78 65 63 28 0a 20 20 56 64 62 65 20 2a 70 20 20  xec(.  Vdbe *p  
44a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
44b0: 20 20 2f 2a 20 54 68 65 20 56 44 42 45 20 2a 2f    /* The VDBE */
44c0: 0a 29 7b 0a 20 20 69 6e 74 20 70 63 3d 30 3b 20  .){.  int pc=0; 
44d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
44e0: 20 2f 2a 20 54 68 65 20 70 72 6f 67 72 61 6d 20   /* The program 
44f0: 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 4f 70 20  counter */.  Op 
4500: 2a 61 4f 70 20 3d 20 70 2d 3e 61 4f 70 3b 20 20  *aOp = p->aOp;  
4510: 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 70 79 20          /* Copy 
4520: 6f 66 20 70 2d 3e 61 4f 70 20 2a 2f 0a 20 20 4f  of p->aOp */.  O
4530: 70 20 2a 70 4f 70 3b 20 20 20 20 20 20 20 20 20  p *pOp;         
4540: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72            /* Cur
4550: 72 65 6e 74 20 6f 70 65 72 61 74 69 6f 6e 20 2a  rent operation *
4560: 2f 0a 20 20 69 6e 74 20 72 63 20 3d 20 53 51 4c  /.  int rc = SQL
4570: 49 54 45 5f 4f 4b 3b 20 20 20 20 20 20 20 20 2f  ITE_OK;        /
4580: 2a 20 56 61 6c 75 65 20 74 6f 20 72 65 74 75 72  * Value to retur
4590: 6e 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a  n */.  sqlite3 *
45a0: 64 62 20 3d 20 70 2d 3e 64 62 3b 20 20 20 20 20  db = p->db;     
45b0: 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73    /* The databas
45c0: 65 20 2a 2f 0a 20 20 75 38 20 72 65 73 65 74 53  e */.  u8 resetS
45d0: 63 68 65 6d 61 4f 6e 46 61 75 6c 74 20 3d 20 30  chemaOnFault = 0
45e0: 3b 20 2f 2a 20 52 65 73 65 74 20 73 63 68 65 6d  ; /* Reset schem
45f0: 61 20 61 66 74 65 72 20 61 6e 20 65 72 72 6f 72  a after an error
4600: 20 69 66 20 74 72 75 65 20 2a 2f 0a 20 20 75 38   if true */.  u8
4610: 20 65 6e 63 6f 64 69 6e 67 20 3d 20 45 4e 43 28   encoding = ENC(
4620: 64 62 29 3b 20 20 20 20 20 2f 2a 20 54 68 65 20  db);     /* The 
4630: 64 61 74 61 62 61 73 65 20 65 6e 63 6f 64 69 6e  database encodin
4640: 67 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  g */.#ifndef SQL
4650: 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53  ITE_OMIT_PROGRES
4660: 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 69 6e 74  S_CALLBACK.  int
4670: 20 63 68 65 63 6b 50 72 6f 67 72 65 73 73 3b 20   checkProgress; 
4680: 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
4690: 69 66 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c  if progress call
46a0: 62 61 63 6b 73 20 61 72 65 20 65 6e 61 62 6c 65  backs are enable
46b0: 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 50 72 6f 67  d */.  int nProg
46c0: 72 65 73 73 4f 70 73 20 3d 20 30 3b 20 20 20 20  ressOps = 0;    
46d0: 20 20 2f 2a 20 4f 70 63 6f 64 65 73 20 65 78 65    /* Opcodes exe
46e0: 63 75 74 65 64 20 73 69 6e 63 65 20 70 72 6f 67  cuted since prog
46f0: 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 2e 20 2a  ress callback. *
4700: 2f 0a 23 65 6e 64 69 66 0a 20 20 4d 65 6d 20 2a  /.#endif.  Mem *
4710: 61 4d 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b 20  aMem = p->aMem; 
4720: 20 20 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66        /* Copy of
4730: 20 70 2d 3e 61 4d 65 6d 20 2a 2f 0a 20 20 4d 65   p->aMem */.  Me
4740: 6d 20 2a 70 49 6e 31 20 3d 20 30 3b 20 20 20 20  m *pIn1 = 0;    
4750: 20 20 20 20 20 20 20 20 20 2f 2a 20 31 73 74 20           /* 1st 
4760: 69 6e 70 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f  input operand */
4770: 0a 20 20 4d 65 6d 20 2a 70 49 6e 32 20 3d 20 30  .  Mem *pIn2 = 0
4780: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
4790: 20 32 6e 64 20 69 6e 70 75 74 20 6f 70 65 72 61   2nd input opera
47a0: 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e  nd */.  Mem *pIn
47b0: 33 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20  3 = 0;          
47c0: 20 20 20 2f 2a 20 33 72 64 20 69 6e 70 75 74 20     /* 3rd input 
47d0: 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d  operand */.  Mem
47e0: 20 2a 70 4f 75 74 20 3d 20 30 3b 20 20 20 20 20   *pOut = 0;     
47f0: 20 20 20 20 20 20 20 20 2f 2a 20 4f 75 74 70 75          /* Outpu
4800: 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 69  t operand */.  i
4810: 6e 74 20 69 43 6f 6d 70 61 72 65 20 3d 20 30 3b  nt iCompare = 0;
4820: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73            /* Res
4830: 75 6c 74 20 6f 66 20 6c 61 73 74 20 4f 50 5f 43  ult of last OP_C
4840: 6f 6d 70 61 72 65 20 6f 70 65 72 61 74 69 6f 6e  ompare operation
4850: 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 50 65 72 6d   */.  int *aPerm
4860: 75 74 65 20 3d 20 30 3b 20 20 20 20 20 20 20 20  ute = 0;        
4870: 20 2f 2a 20 50 65 72 6d 75 74 61 74 69 6f 6e 20   /* Permutation 
4880: 6f 66 20 63 6f 6c 75 6d 6e 73 20 66 6f 72 20 4f  of columns for O
4890: 50 5f 43 6f 6d 70 61 72 65 20 2a 2f 0a 23 69 66  P_Compare */.#if
48a0: 64 65 66 20 56 44 42 45 5f 50 52 4f 46 49 4c 45  def VDBE_PROFILE
48b0: 0a 20 20 75 36 34 20 73 74 61 72 74 3b 20 20 20  .  u64 start;   
48c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
48d0: 20 43 50 55 20 63 6c 6f 63 6b 20 63 6f 75 6e 74   CPU clock count
48e0: 20 61 74 20 73 74 61 72 74 20 6f 66 20 6f 70 63   at start of opc
48f0: 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20 6f 72 69  ode */.  int ori
4900: 67 50 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  gPc;            
4910: 20 20 20 20 2f 2a 20 50 72 6f 67 72 61 6d 20 63      /* Program c
4920: 6f 75 6e 74 65 72 20 61 74 20 73 74 61 72 74 20  ounter at start 
4930: 6f 66 20 6f 70 63 6f 64 65 20 2a 2f 0a 23 65 6e  of opcode */.#en
4940: 64 69 66 0a 20 20 2f 2a 2a 2a 20 49 4e 53 45 52  dif.  /*** INSER
4950: 54 20 53 54 41 43 4b 20 55 4e 49 4f 4e 20 48 45  T STACK UNION HE
4960: 52 45 20 2a 2a 2a 2f 0a 0a 20 20 61 73 73 65 72  RE ***/..  asser
4970: 74 28 20 70 2d 3e 6d 61 67 69 63 3d 3d 56 44 42  t( p->magic==VDB
4980: 45 5f 4d 41 47 49 43 5f 52 55 4e 20 29 3b 20 20  E_MAGIC_RUN );  
4990: 2f 2a 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28  /* sqlite3_step(
49a0: 29 20 76 65 72 69 66 69 65 73 20 74 68 69 73 20  ) verifies this 
49b0: 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  */.  sqlite3Vdbe
49c0: 4d 75 74 65 78 41 72 72 61 79 45 6e 74 65 72 28  MutexArrayEnter(
49d0: 70 29 3b 0a 20 20 69 66 28 20 70 2d 3e 72 63 3d  p);.  if( p->rc=
49e0: 3d 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 29 7b  =SQLITE_NOMEM ){
49f0: 0a 20 20 20 20 2f 2a 20 54 68 69 73 20 68 61 70  .    /* This hap
4a00: 70 65 6e 73 20 69 66 20 61 20 6d 61 6c 6c 6f 63  pens if a malloc
4a10: 28 29 20 69 6e 73 69 64 65 20 61 20 63 61 6c 6c  () inside a call
4a20: 20 74 6f 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75   to sqlite3_colu
4a30: 6d 6e 5f 74 65 78 74 28 29 20 6f 72 0a 20 20 20  mn_text() or.   
4a40: 20 2a 2a 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75   ** sqlite3_colu
4a50: 6d 6e 5f 74 65 78 74 31 36 28 29 20 66 61 69 6c  mn_text16() fail
4a60: 65 64 2e 20 20 2a 2f 0a 20 20 20 20 67 6f 74 6f  ed.  */.    goto
4a70: 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 61   no_mem;.  }.  a
4a80: 73 73 65 72 74 28 20 70 2d 3e 72 63 3d 3d 53 51  ssert( p->rc==SQ
4a90: 4c 49 54 45 5f 4f 4b 20 7c 7c 20 70 2d 3e 72 63  LITE_OK || p->rc
4aa0: 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 7c 7c  ==SQLITE_BUSY ||
4ab0: 20 28 28 70 2d 3e 72 63 26 30 78 46 46 29 20 3d   ((p->rc&0xFF) =
4ac0: 3d 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 29  = SQLITE_LOCKED)
4ad0: 29 3b 0a 20 20 70 2d 3e 72 63 20 3d 20 53 51 4c  );.  p->rc = SQL
4ae0: 49 54 45 5f 4f 4b 3b 0a 20 20 61 73 73 65 72 74  ITE_OK;.  assert
4af0: 28 20 70 2d 3e 65 78 70 6c 61 69 6e 3d 3d 30 20  ( p->explain==0 
4b00: 29 3b 0a 20 20 70 2d 3e 70 52 65 73 75 6c 74 53  );.  p->pResultS
4b10: 65 74 20 3d 20 30 3b 0a 20 20 64 62 2d 3e 62 75  et = 0;.  db->bu
4b20: 73 79 48 61 6e 64 6c 65 72 2e 6e 42 75 73 79 20  syHandler.nBusy 
4b30: 3d 20 30 3b 0a 20 20 43 48 45 43 4b 5f 46 4f 52  = 0;.  CHECK_FOR
4b40: 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20 73 71  _INTERRUPT;.  sq
4b50: 6c 69 74 65 33 56 64 62 65 49 4f 54 72 61 63 65  lite3VdbeIOTrace
4b60: 53 71 6c 28 70 29 3b 0a 23 69 66 6e 64 65 66 20  Sql(p);.#ifndef 
4b70: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47  SQLITE_OMIT_PROG
4b80: 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20  RESS_CALLBACK.  
4b90: 63 68 65 63 6b 50 72 6f 67 72 65 73 73 20 3d 20  checkProgress = 
4ba0: 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 21 3d 30  db->xProgress!=0
4bb0: 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20  ;.#endif.#ifdef 
4bc0: 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 73  SQLITE_DEBUG.  s
4bd0: 71 6c 69 74 65 33 42 65 67 69 6e 42 65 6e 69 67  qlite3BeginBenig
4be0: 6e 4d 61 6c 6c 6f 63 28 29 3b 0a 20 20 69 66 28  nMalloc();.  if(
4bf0: 20 70 2d 3e 70 63 3d 3d 30 20 20 26 26 20 28 70   p->pc==0  && (p
4c00: 2d 3e 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51  ->db->flags & SQ
4c10: 4c 49 54 45 5f 56 64 62 65 4c 69 73 74 69 6e 67  LITE_VdbeListing
4c20: 29 21 3d 30 20 29 7b 0a 20 20 20 20 69 6e 74 20  )!=0 ){.    int 
4c30: 69 3b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 56  i;.    printf("V
4c40: 44 42 45 20 50 72 6f 67 72 61 6d 20 4c 69 73 74  DBE Program List
4c50: 69 6e 67 3a 5c 6e 22 29 3b 0a 20 20 20 20 73 71  ing:\n");.    sq
4c60: 6c 69 74 65 33 56 64 62 65 50 72 69 6e 74 53 71  lite3VdbePrintSq
4c70: 6c 28 70 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d  l(p);.    for(i=
4c80: 30 3b 20 69 3c 70 2d 3e 6e 4f 70 3b 20 69 2b 2b  0; i<p->nOp; i++
4c90: 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
4ca0: 56 64 62 65 50 72 69 6e 74 4f 70 28 73 74 64 6f  VdbePrintOp(stdo
4cb0: 75 74 2c 20 69 2c 20 26 61 4f 70 5b 69 5d 29 3b  ut, i, &aOp[i]);
4cc0: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 73 71 6c  .    }.  }.  sql
4cd0: 69 74 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c  ite3EndBenignMal
4ce0: 6c 6f 63 28 29 3b 0a 23 65 6e 64 69 66 0a 20 20  loc();.#endif.  
4cf0: 66 6f 72 28 70 63 3d 70 2d 3e 70 63 3b 20 72 63  for(pc=p->pc; rc
4d00: 3d 3d 53 51 4c 49 54 45 5f 4f 4b 3b 20 70 63 2b  ==SQLITE_OK; pc+
4d10: 2b 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20  +){.    assert( 
4d20: 70 63 3e 3d 30 20 26 26 20 70 63 3c 70 2d 3e 6e  pc>=0 && pc<p->n
4d30: 4f 70 20 29 3b 0a 20 20 20 20 69 66 28 20 64 62  Op );.    if( db
4d40: 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29  ->mallocFailed )
4d50: 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 23 69   goto no_mem;.#i
4d60: 66 64 65 66 20 56 44 42 45 5f 50 52 4f 46 49 4c  fdef VDBE_PROFIL
4d70: 45 0a 20 20 20 20 6f 72 69 67 50 63 20 3d 20 70  E.    origPc = p
4d80: 63 3b 0a 20 20 20 20 73 74 61 72 74 20 3d 20 73  c;.    start = s
4d90: 71 6c 69 74 65 33 48 77 74 69 6d 65 28 29 3b 0a  qlite3Hwtime();.
4da0: 23 65 6e 64 69 66 0a 20 20 20 20 70 4f 70 20 3d  #endif.    pOp =
4db0: 20 26 61 4f 70 5b 70 63 5d 3b 0a 0a 20 20 20 20   &aOp[pc];..    
4dc0: 2f 2a 20 4f 6e 6c 79 20 61 6c 6c 6f 77 20 74 72  /* Only allow tr
4dd0: 61 63 69 6e 67 20 69 66 20 53 51 4c 49 54 45 5f  acing if SQLITE_
4de0: 44 45 42 55 47 20 69 73 20 64 65 66 69 6e 65 64  DEBUG is defined
4df0: 2e 0a 20 20 20 20 2a 2f 0a 23 69 66 64 65 66 20  ..    */.#ifdef 
4e00: 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20  SQLITE_DEBUG.   
4e10: 20 69 66 28 20 70 2d 3e 74 72 61 63 65 20 29 7b   if( p->trace ){
4e20: 0a 20 20 20 20 20 20 69 66 28 20 70 63 3d 3d 30  .      if( pc==0
4e30: 20 29 7b 0a 20 20 20 20 20 20 20 20 70 72 69 6e   ){.        prin
4e40: 74 66 28 22 56 44 42 45 20 45 78 65 63 75 74 69  tf("VDBE Executi
4e50: 6f 6e 20 54 72 61 63 65 3a 5c 6e 22 29 3b 0a 20  on Trace:\n");. 
4e60: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
4e70: 62 65 50 72 69 6e 74 53 71 6c 28 70 29 3b 0a 20  bePrintSql(p);. 
4e80: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 73 71 6c       }.      sql
4e90: 69 74 65 33 56 64 62 65 50 72 69 6e 74 4f 70 28  ite3VdbePrintOp(
4ea0: 70 2d 3e 74 72 61 63 65 2c 20 70 63 2c 20 70 4f  p->trace, pc, pO
4eb0: 70 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66  p);.    }.#endif
4ec0: 0a 20 20 20 20 20 20 0a 0a 20 20 20 20 2f 2a 20  .      ..    /* 
4ed0: 43 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20  Check to see if 
4ee0: 77 65 20 6e 65 65 64 20 74 6f 20 73 69 6d 75 6c  we need to simul
4ef0: 61 74 65 20 61 6e 20 69 6e 74 65 72 72 75 70 74  ate an interrupt
4f00: 2e 20 20 54 68 69 73 20 6f 6e 6c 79 20 68 61 70  .  This only hap
4f10: 70 65 6e 73 0a 20 20 20 20 2a 2a 20 69 66 20 77  pens.    ** if w
4f20: 65 20 68 61 76 65 20 61 20 73 70 65 63 69 61 6c  e have a special
4f30: 20 74 65 73 74 20 62 75 69 6c 64 2e 0a 20 20 20   test build..   
4f40: 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54   */.#ifdef SQLIT
4f50: 45 5f 54 45 53 54 0a 20 20 20 20 69 66 28 20 73  E_TEST.    if( s
4f60: 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74  qlite3_interrupt
4f70: 5f 63 6f 75 6e 74 3e 30 20 29 7b 0a 20 20 20 20  _count>0 ){.    
4f80: 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72    sqlite3_interr
4f90: 75 70 74 5f 63 6f 75 6e 74 2d 2d 3b 0a 20 20 20  upt_count--;.   
4fa0: 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f 69     if( sqlite3_i
4fb0: 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74 3d 3d  nterrupt_count==
4fc0: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  0 ){.        sql
4fd0: 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 28 64  ite3_interrupt(d
4fe0: 62 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  b);.      }.    
4ff0: 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65  }.#endif..#ifnde
5000: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52  f SQLITE_OMIT_PR
5010: 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a  OGRESS_CALLBACK.
5020: 20 20 20 20 2f 2a 20 43 61 6c 6c 20 74 68 65 20      /* Call the 
5030: 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63  progress callbac
5040: 6b 20 69 66 20 69 74 20 69 73 20 63 6f 6e 66 69  k if it is confi
5050: 67 75 72 65 64 20 61 6e 64 20 74 68 65 20 72 65  gured and the re
5060: 71 75 69 72 65 64 20 6e 75 6d 62 65 72 0a 20 20  quired number.  
5070: 20 20 2a 2a 20 6f 66 20 56 44 42 45 20 6f 70 73    ** of VDBE ops
5080: 20 68 61 76 65 20 62 65 65 6e 20 65 78 65 63 75   have been execu
5090: 74 65 64 20 28 65 69 74 68 65 72 20 73 69 6e 63  ted (either sinc
50a0: 65 20 74 68 69 73 20 69 6e 76 6f 63 61 74 69 6f  e this invocatio
50b0: 6e 20 6f 66 0a 20 20 20 20 2a 2a 20 73 71 6c 69  n of.    ** sqli
50c0: 74 65 33 56 64 62 65 45 78 65 63 28 29 20 6f 72  te3VdbeExec() or
50d0: 20 73 69 6e 63 65 20 6c 61 73 74 20 74 69 6d 65   since last time
50e0: 20 74 68 65 20 70 72 6f 67 72 65 73 73 20 63 61   the progress ca
50f0: 6c 6c 62 61 63 6b 20 77 61 73 20 63 61 6c 6c 65  llback was calle
5100: 64 29 2e 0a 20 20 20 20 2a 2a 20 49 66 20 74 68  d)..    ** If th
5110: 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62  e progress callb
5120: 61 63 6b 20 72 65 74 75 72 6e 73 20 6e 6f 6e 2d  ack returns non-
5130: 7a 65 72 6f 2c 20 65 78 69 74 20 74 68 65 20 76  zero, exit the v
5140: 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 20 77  irtual machine w
5150: 69 74 68 0a 20 20 20 20 2a 2a 20 61 20 72 65 74  ith.    ** a ret
5160: 75 72 6e 20 63 6f 64 65 20 53 51 4c 49 54 45 5f  urn code SQLITE_
5170: 41 42 4f 52 54 2e 0a 20 20 20 20 2a 2f 0a 20 20  ABORT..    */.  
5180: 20 20 69 66 28 20 63 68 65 63 6b 50 72 6f 67 72    if( checkProgr
5190: 65 73 73 20 29 7b 0a 20 20 20 20 20 20 69 66 28  ess ){.      if(
51a0: 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70   db->nProgressOp
51b0: 73 3d 3d 6e 50 72 6f 67 72 65 73 73 4f 70 73 20  s==nProgressOps 
51c0: 29 7b 0a 20 20 20 20 20 20 20 20 69 6e 74 20 70  ){.        int p
51d0: 72 63 3b 0a 20 20 20 20 20 20 20 20 70 72 63 20  rc;.        prc 
51e0: 3d 20 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 28  = db->xProgress(
51f0: 64 62 2d 3e 70 50 72 6f 67 72 65 73 73 41 72 67  db->pProgressArg
5200: 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 70  );.        if( p
5210: 72 63 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  rc!=0 ){.       
5220: 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 49     rc = SQLITE_I
5230: 4e 54 45 52 52 55 50 54 3b 0a 20 20 20 20 20 20  NTERRUPT;.      
5240: 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 65 72      goto vdbe_er
5250: 72 6f 72 5f 68 61 6c 74 3b 0a 20 20 20 20 20 20  ror_halt;.      
5260: 20 20 7d 0a 20 20 20 20 20 20 20 20 6e 50 72 6f    }.        nPro
5270: 67 72 65 73 73 4f 70 73 20 3d 20 30 3b 0a 20 20  gressOps = 0;.  
5280: 20 20 20 20 7d 0a 20 20 20 20 20 20 6e 50 72 6f      }.      nPro
5290: 67 72 65 73 73 4f 70 73 2b 2b 3b 0a 20 20 20 20  gressOps++;.    
52a0: 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 2f 2a  }.#endif..    /*
52b0: 20 4f 6e 20 61 6e 79 20 6f 70 63 6f 64 65 20 77   On any opcode w
52c0: 69 74 68 20 74 68 65 20 22 6f 75 74 32 2d 70 72  ith the "out2-pr
52d0: 65 72 65 6c 61 73 65 22 20 74 61 67 2c 20 66 72  erelase" tag, fr
52e0: 65 65 20 61 6e 79 0a 20 20 20 20 2a 2a 20 65 78  ee any.    ** ex
52f0: 74 65 72 6e 61 6c 20 61 6c 6c 6f 63 61 74 69 6f  ternal allocatio
5300: 6e 73 20 6f 75 74 20 6f 66 20 6d 65 6d 5b 70 32  ns out of mem[p2
5310: 5d 20 61 6e 64 20 73 65 74 20 6d 65 6d 5b 70 32  ] and set mem[p2
5320: 5d 20 74 6f 20 62 65 0a 20 20 20 20 2a 2a 20 61  ] to be.    ** a
5330: 6e 20 75 6e 64 65 66 69 6e 65 64 20 69 6e 74 65  n undefined inte
5340: 67 65 72 2e 20 20 4f 70 63 6f 64 65 73 20 77 69  ger.  Opcodes wi
5350: 6c 6c 20 65 69 74 68 65 72 20 66 69 6c 6c 20 69  ll either fill i
5360: 6e 20 74 68 65 20 69 6e 74 65 67 65 72 0a 20 20  n the integer.  
5370: 20 20 2a 2a 20 76 61 6c 75 65 20 6f 72 20 63 6f    ** value or co
5380: 6e 76 65 72 74 20 6d 65 6d 5b 70 32 5d 20 74 6f  nvert mem[p2] to
5390: 20 61 20 64 69 66 66 65 72 65 6e 74 20 74 79 70   a different typ
53a0: 65 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 61 73  e..    */.    as
53b0: 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 66 6c 61  sert( pOp->opfla
53c0: 67 73 3d 3d 73 71 6c 69 74 65 33 4f 70 63 6f 64  gs==sqlite3Opcod
53d0: 65 50 72 6f 70 65 72 74 79 5b 70 4f 70 2d 3e 6f  eProperty[pOp->o
53e0: 70 63 6f 64 65 5d 20 29 3b 0a 20 20 20 20 69 66  pcode] );.    if
53f0: 28 20 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26  ( pOp->opflags &
5400: 20 4f 50 46 4c 47 5f 4f 55 54 32 5f 50 52 45 52   OPFLG_OUT2_PRER
5410: 45 4c 45 41 53 45 20 29 7b 0a 20 20 20 20 20 20  ELEASE ){.      
5420: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e  assert( pOp->p2>
5430: 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  0 );.      asser
5440: 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 70 2d 3e 6e  t( pOp->p2<=p->n
5450: 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20 70 4f 75  Mem );.      pOu
5460: 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
5470: 32 5d 3b 0a 20 20 20 20 20 20 6d 65 6d 41 62 6f  2];.      memAbo
5480: 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f  utToChange(p, pO
5490: 75 74 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  ut);.      sqlit
54a0: 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65  e3VdbeMemRelease
54b0: 45 78 74 65 72 6e 61 6c 28 70 4f 75 74 29 3b 0a  External(pOut);.
54c0: 20 20 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67        pOut->flag
54d0: 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20  s = MEM_Int;.   
54e0: 20 7d 0a 0a 20 20 20 20 2f 2a 20 53 61 6e 69 74   }..    /* Sanit
54f0: 79 20 63 68 65 63 6b 69 6e 67 20 6f 6e 20 6f 74  y checking on ot
5500: 68 65 72 20 6f 70 65 72 61 6e 64 73 20 2a 2f 0a  her operands */.
5510: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
5520: 42 55 47 0a 20 20 20 20 69 66 28 20 28 70 4f 70  BUG.    if( (pOp
5530: 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c  ->opflags & OPFL
5540: 47 5f 49 4e 31 29 21 3d 30 20 29 7b 0a 20 20 20  G_IN1)!=0 ){.   
5550: 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
5560: 70 31 3e 30 20 29 3b 0a 20 20 20 20 20 20 61 73  p1>0 );.      as
5570: 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3c 3d 70  sert( pOp->p1<=p
5580: 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20  ->nMem );.      
5590: 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
55a0: 69 64 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31  id(&aMem[pOp->p1
55b0: 5d 29 20 29 3b 0a 20 20 20 20 20 20 52 45 47 49  ]) );.      REGI
55c0: 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
55d0: 70 31 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  p1, &aMem[pOp->p
55e0: 31 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  1]);.    }.    i
55f0: 66 28 20 28 70 4f 70 2d 3e 6f 70 66 6c 61 67 73  f( (pOp->opflags
5600: 20 26 20 4f 50 46 4c 47 5f 49 4e 32 29 21 3d 30   & OPFLG_IN2)!=0
5610: 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74   ){.      assert
5620: 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20  ( pOp->p2>0 );. 
5630: 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
5640: 2d 3e 70 32 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b  ->p2<=p->nMem );
5650: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d  .      assert( m
5660: 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b  emIsValid(&aMem[
5670: 70 4f 70 2d 3e 70 32 5d 29 20 29 3b 0a 20 20 20  pOp->p2]) );.   
5680: 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43     REGISTER_TRAC
5690: 45 28 70 4f 70 2d 3e 70 32 2c 20 26 61 4d 65 6d  E(pOp->p2, &aMem
56a0: 5b 70 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20 20 20  [pOp->p2]);.    
56b0: 7d 0a 20 20 20 20 69 66 28 20 28 70 4f 70 2d 3e  }.    if( (pOp->
56c0: 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f  opflags & OPFLG_
56d0: 49 4e 33 29 21 3d 30 20 29 7b 0a 20 20 20 20 20  IN3)!=0 ){.     
56e0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
56f0: 3e 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  >0 );.      asse
5700: 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e  rt( pOp->p3<=p->
5710: 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20 61 73  nMem );.      as
5720: 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
5730: 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29  (&aMem[pOp->p3])
5740: 20 29 3b 0a 20 20 20 20 20 20 52 45 47 49 53 54   );.      REGIST
5750: 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33  ER_TRACE(pOp->p3
5760: 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  , &aMem[pOp->p3]
5770: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  );.    }.    if(
5780: 20 28 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26   (pOp->opflags &
5790: 20 4f 50 46 4c 47 5f 4f 55 54 32 29 21 3d 30 20   OPFLG_OUT2)!=0 
57a0: 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ){.      assert(
57b0: 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20   pOp->p2>0 );.  
57c0: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
57d0: 3e 70 32 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a  >p2<=p->nMem );.
57e0: 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f        memAboutTo
57f0: 43 68 61 6e 67 65 28 70 2c 20 26 61 4d 65 6d 5b  Change(p, &aMem[
5800: 70 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20 20 20 7d  pOp->p2]);.    }
5810: 0a 20 20 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f  .    if( (pOp->o
5820: 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f 4f  pflags & OPFLG_O
5830: 55 54 33 29 21 3d 30 20 29 7b 0a 20 20 20 20 20  UT3)!=0 ){.     
5840: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
5850: 3e 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  >0 );.      asse
5860: 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e  rt( pOp->p3<=p->
5870: 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20 6d 65  nMem );.      me
5880: 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
5890: 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  , &aMem[pOp->p3]
58a0: 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a  );.    }.#endif.
58b0: 20 20 0a 20 20 20 20 73 77 69 74 63 68 28 20 70    .    switch( p
58c0: 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 0a 2f  Op->opcode ){../
58d0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
58e0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
58f0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5900: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5910: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a  *************.**
5920: 20 57 68 61 74 20 66 6f 6c 6c 6f 77 73 20 69 73   What follows is
5930: 20 61 20 6d 61 73 73 69 76 65 20 73 77 69 74 63   a massive switc
5940: 68 20 73 74 61 74 65 6d 65 6e 74 20 77 68 65 72  h statement wher
5950: 65 20 65 61 63 68 20 63 61 73 65 20 69 6d 70 6c  e each case impl
5960: 65 6d 65 6e 74 73 20 61 0a 2a 2a 20 73 65 70 61  ements a.** sepa
5970: 72 61 74 65 20 69 6e 73 74 72 75 63 74 69 6f 6e  rate instruction
5980: 20 69 6e 20 74 68 65 20 76 69 72 74 75 61 6c 20   in the virtual 
5990: 6d 61 63 68 69 6e 65 2e 20 20 49 66 20 77 65 20  machine.  If we 
59a0: 66 6f 6c 6c 6f 77 20 74 68 65 20 75 73 75 61 6c  follow the usual
59b0: 0a 2a 2a 20 69 6e 64 65 6e 74 61 74 69 6f 6e 20  .** indentation 
59c0: 63 6f 6e 76 65 6e 74 69 6f 6e 73 2c 20 65 61 63  conventions, eac
59d0: 68 20 63 61 73 65 20 73 68 6f 75 6c 64 20 62 65  h case should be
59e0: 20 69 6e 64 65 6e 74 65 64 20 62 79 20 36 20 73   indented by 6 s
59f0: 70 61 63 65 73 2e 20 20 42 75 74 0a 2a 2a 20 74  paces.  But.** t
5a00: 68 61 74 20 69 73 20 61 20 6c 6f 74 20 6f 66 20  hat is a lot of 
5a10: 77 61 73 74 65 64 20 73 70 61 63 65 20 6f 6e 20  wasted space on 
5a20: 74 68 65 20 6c 65 66 74 20 6d 61 72 67 69 6e 2e  the left margin.
5a30: 20 20 53 6f 20 74 68 65 20 63 6f 64 65 20 77 69    So the code wi
5a40: 74 68 69 6e 0a 2a 2a 20 74 68 65 20 73 77 69 74  thin.** the swit
5a50: 63 68 20 73 74 61 74 65 6d 65 6e 74 20 77 69 6c  ch statement wil
5a60: 6c 20 62 72 65 61 6b 20 77 69 74 68 20 63 6f 6e  l break with con
5a70: 76 65 6e 74 69 6f 6e 20 61 6e 64 20 62 65 20 66  vention and be f
5a80: 6c 75 73 68 2d 6c 65 66 74 2e 20 41 6e 6f 74 68  lush-left. Anoth
5a90: 65 72 0a 2a 2a 20 62 69 67 20 63 6f 6d 6d 65 6e  er.** big commen
5aa0: 74 20 28 73 69 6d 69 6c 61 72 20 74 6f 20 74 68  t (similar to th
5ab0: 69 73 20 6f 6e 65 29 20 77 69 6c 6c 20 6d 61 72  is one) will mar
5ac0: 6b 20 74 68 65 20 70 6f 69 6e 74 20 69 6e 20 74  k the point in t
5ad0: 68 65 20 63 6f 64 65 20 77 68 65 72 65 0a 2a 2a  he code where.**
5ae0: 20 77 65 20 74 72 61 6e 73 69 74 69 6f 6e 20 62   we transition b
5af0: 61 63 6b 20 74 6f 20 6e 6f 72 6d 61 6c 20 69 6e  ack to normal in
5b00: 64 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  dentation..**.**
5b10: 20 54 68 65 20 66 6f 72 6d 61 74 74 69 6e 67 20   The formatting 
5b20: 6f 66 20 65 61 63 68 20 63 61 73 65 20 69 73 20  of each case is 
5b30: 69 6d 70 6f 72 74 61 6e 74 2e 20 20 54 68 65 20  important.  The 
5b40: 6d 61 6b 65 66 69 6c 65 20 66 6f 72 20 53 51 4c  makefile for SQL
5b50: 69 74 65 0a 2a 2a 20 67 65 6e 65 72 61 74 65 73  ite.** generates
5b60: 20 74 77 6f 20 43 20 66 69 6c 65 73 20 22 6f 70   two C files "op
5b70: 63 6f 64 65 73 2e 68 22 20 61 6e 64 20 22 6f 70  codes.h" and "op
5b80: 63 6f 64 65 73 2e 63 22 20 62 79 20 73 63 61 6e  codes.c" by scan
5b90: 6e 69 6e 67 20 74 68 69 73 0a 2a 2a 20 66 69 6c  ning this.** fil
5ba0: 65 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20 6c 69  e looking for li
5bb0: 6e 65 73 20 74 68 61 74 20 62 65 67 69 6e 20 77  nes that begin w
5bc0: 69 74 68 20 22 63 61 73 65 20 4f 50 5f 22 2e 20  ith "case OP_". 
5bd0: 20 54 68 65 20 6f 70 63 6f 64 65 73 2e 68 20 66   The opcodes.h f
5be0: 69 6c 65 73 0a 2a 2a 20 77 69 6c 6c 20 62 65 20  iles.** will be 
5bf0: 66 69 6c 6c 65 64 20 77 69 74 68 20 23 64 65 66  filled with #def
5c00: 69 6e 65 73 20 74 68 61 74 20 67 69 76 65 20 75  ines that give u
5c10: 6e 69 71 75 65 20 69 6e 74 65 67 65 72 20 76 61  nique integer va
5c20: 6c 75 65 73 20 74 6f 20 65 61 63 68 0a 2a 2a 20  lues to each.** 
5c30: 6f 70 63 6f 64 65 20 61 6e 64 20 74 68 65 20 6f  opcode and the o
5c40: 70 63 6f 64 65 73 2e 63 20 66 69 6c 65 20 69 73  pcodes.c file is
5c50: 20 66 69 6c 6c 65 64 20 77 69 74 68 20 61 6e 20   filled with an 
5c60: 61 72 72 61 79 20 6f 66 20 73 74 72 69 6e 67 73  array of strings
5c70: 20 77 68 65 72 65 0a 2a 2a 20 65 61 63 68 20 73   where.** each s
5c80: 74 72 69 6e 67 20 69 73 20 74 68 65 20 73 79 6d  tring is the sym
5c90: 62 6f 6c 69 63 20 6e 61 6d 65 20 66 6f 72 20 74  bolic name for t
5ca0: 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  he corresponding
5cb0: 20 6f 70 63 6f 64 65 2e 20 20 49 66 20 74 68 65   opcode.  If the
5cc0: 0a 2a 2a 20 63 61 73 65 20 73 74 61 74 65 6d 65  .** case stateme
5cd0: 6e 74 20 69 73 20 66 6f 6c 6c 6f 77 65 64 20 62  nt is followed b
5ce0: 79 20 61 20 63 6f 6d 6d 65 6e 74 20 6f 66 20 74  y a comment of t
5cf0: 68 65 20 66 6f 72 6d 20 22 2f 23 20 73 61 6d 65  he form "/# same
5d00: 20 61 73 20 2e 2e 2e 20 23 2f 22 0a 2a 2a 20 74   as ... #/".** t
5d10: 68 61 74 20 63 6f 6d 6d 65 6e 74 20 69 73 20 75  hat comment is u
5d20: 73 65 64 20 74 6f 20 64 65 74 65 72 6d 69 6e 65  sed to determine
5d30: 20 74 68 65 20 70 61 72 74 69 63 75 6c 61 72 20   the particular 
5d40: 76 61 6c 75 65 20 6f 66 20 74 68 65 20 6f 70 63  value of the opc
5d50: 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 4f 74 68 65 72  ode..**.** Other
5d60: 20 6b 65 79 77 6f 72 64 73 20 69 6e 20 74 68 65   keywords in the
5d70: 20 63 6f 6d 6d 65 6e 74 20 74 68 61 74 20 66 6f   comment that fo
5d80: 6c 6c 6f 77 73 20 65 61 63 68 20 63 61 73 65 20  llows each case 
5d90: 61 72 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 63  are used to.** c
5da0: 6f 6e 73 74 72 75 63 74 20 74 68 65 20 4f 50 46  onstruct the OPF
5db0: 4c 47 5f 49 4e 49 54 49 41 4c 49 5a 45 52 20 76  LG_INITIALIZER v
5dc0: 61 6c 75 65 20 74 68 61 74 20 69 6e 69 74 69 61  alue that initia
5dd0: 6c 69 7a 65 73 20 6f 70 63 6f 64 65 50 72 6f 70  lizes opcodeProp
5de0: 65 72 74 79 5b 5d 2e 0a 2a 2a 20 4b 65 79 77 6f  erty[]..** Keywo
5df0: 72 64 73 20 69 6e 63 6c 75 64 65 3a 20 69 6e 31  rds include: in1
5e00: 2c 20 69 6e 32 2c 20 69 6e 33 2c 20 6f 75 74 32  , in2, in3, out2
5e10: 5f 70 72 65 72 65 6c 65 61 73 65 2c 20 6f 75 74  _prerelease, out
5e20: 32 2c 20 6f 75 74 33 2e 20 20 53 65 65 0a 2a 2a  2, out3.  See.**
5e30: 20 74 68 65 20 6d 6b 6f 70 63 6f 64 65 68 2e 61   the mkopcodeh.a
5e40: 77 6b 20 73 63 72 69 70 74 20 66 6f 72 20 61 64  wk script for ad
5e50: 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61  ditional informa
5e60: 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 44 6f 63 75  tion..**.** Docu
5e70: 6d 65 6e 74 61 74 69 6f 6e 20 61 62 6f 75 74 20  mentation about 
5e80: 56 44 42 45 20 6f 70 63 6f 64 65 73 20 69 73 20  VDBE opcodes is 
5e90: 67 65 6e 65 72 61 74 65 64 20 62 79 20 73 63 61  generated by sca
5ea0: 6e 6e 69 6e 67 20 74 68 69 73 20 66 69 6c 65 0a  nning this file.
5eb0: 2a 2a 20 66 6f 72 20 6c 69 6e 65 73 20 6f 66 20  ** for lines of 
5ec0: 74 68 61 74 20 63 6f 6e 74 61 69 6e 20 22 4f 70  that contain "Op
5ed0: 63 6f 64 65 3a 22 2e 20 20 54 68 61 74 20 6c 69  code:".  That li
5ee0: 6e 65 20 61 6e 64 20 61 6c 6c 20 73 75 62 73 65  ne and all subse
5ef0: 71 75 65 6e 74 0a 2a 2a 20 63 6f 6d 6d 65 6e 74  quent.** comment
5f00: 20 6c 69 6e 65 73 20 61 72 65 20 75 73 65 64 20   lines are used 
5f10: 69 6e 20 74 68 65 20 67 65 6e 65 72 61 74 69 6f  in the generatio
5f20: 6e 20 6f 66 20 74 68 65 20 6f 70 63 6f 64 65 2e  n of the opcode.
5f30: 68 74 6d 6c 20 64 6f 63 75 6d 65 6e 74 61 74 69  html documentati
5f40: 6f 6e 0a 2a 2a 20 66 69 6c 65 2e 0a 2a 2a 0a 2a  on.** file..**.*
5f50: 2a 20 53 55 4d 4d 41 52 59 3a 0a 2a 2a 0a 2a 2a  * SUMMARY:.**.**
5f60: 20 20 20 20 20 46 6f 72 6d 61 74 74 69 6e 67 20       Formatting 
5f70: 69 73 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20  is important to 
5f80: 73 63 72 69 70 74 73 20 74 68 61 74 20 73 63 61  scripts that sca
5f90: 6e 20 74 68 69 73 20 66 69 6c 65 2e 0a 2a 2a 20  n this file..** 
5fa0: 20 20 20 20 44 6f 20 6e 6f 74 20 64 65 76 69 61      Do not devia
5fb0: 74 65 20 66 72 6f 6d 20 74 68 65 20 66 6f 72 6d  te from the form
5fc0: 61 74 74 69 6e 67 20 73 74 79 6c 65 20 63 75 72  atting style cur
5fd0: 72 65 6e 74 6c 79 20 69 6e 20 75 73 65 2e 0a 2a  rently in use..*
5fe0: 2a 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  *.**************
5ff0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6000: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6010: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6020: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f  ***************/
6030: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 47 6f  ../* Opcode:  Go
6040: 74 6f 20 2a 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  to * P2 * * *.**
6050: 0a 2a 2a 20 41 6e 20 75 6e 63 6f 6e 64 69 74 69  .** An unconditi
6060: 6f 6e 61 6c 20 6a 75 6d 70 20 74 6f 20 61 64 64  onal jump to add
6070: 72 65 73 73 20 50 32 2e 0a 2a 2a 20 54 68 65 20  ress P2..** The 
6080: 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
6090: 20 65 78 65 63 75 74 65 64 20 77 69 6c 6c 20 62   executed will b
60a0: 65 20 0a 2a 2a 20 74 68 65 20 6f 6e 65 20 61 74  e .** the one at
60b0: 20 69 6e 64 65 78 20 50 32 20 66 72 6f 6d 20 74   index P2 from t
60c0: 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 0a  he beginning of.
60d0: 2a 2a 20 74 68 65 20 70 72 6f 67 72 61 6d 2e 0a  ** the program..
60e0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 6f 74 6f 3a  */.case OP_Goto:
60f0: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f   {             /
6100: 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 43 48 45 43  * jump */.  CHEC
6110: 4b 5f 46 4f 52 5f 49 4e 54 45 52 52 55 50 54 3b  K_FOR_INTERRUPT;
6120: 0a 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20  .  pc = pOp->p2 
6130: 2d 20 31 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  - 1;.  break;.}.
6140: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 47 6f 73  ./* Opcode:  Gos
6150: 75 62 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  ub P1 P2 * * *.*
6160: 2a 0a 2a 2a 20 57 72 69 74 65 20 74 68 65 20 63  *.** Write the c
6170: 75 72 72 65 6e 74 20 61 64 64 72 65 73 73 20 6f  urrent address o
6180: 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 31 0a  nto register P1.
6190: 2a 2a 20 61 6e 64 20 74 68 65 6e 20 6a 75 6d 70  ** and then jump
61a0: 20 74 6f 20 61 64 64 72 65 73 73 20 50 32 2e 0a   to address P2..
61b0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 6f 73 75 62  */.case OP_Gosub
61c0: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f  : {            /
61d0: 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20  * jump, in1 */. 
61e0: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
61f0: 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
6200: 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
6210: 20 4d 45 4d 5f 44 79 6e 29 3d 3d 30 20 29 3b 0a   MEM_Dyn)==0 );.
6220: 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
6230: 67 65 28 70 2c 20 70 49 6e 31 29 3b 0a 20 20 70  ge(p, pIn1);.  p
6240: 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  In1->flags = MEM
6250: 5f 49 6e 74 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e  _Int;.  pIn1->u.
6260: 69 20 3d 20 70 63 3b 0a 20 20 52 45 47 49 53 54  i = pc;.  REGIST
6270: 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31  ER_TRACE(pOp->p1
6280: 2c 20 70 49 6e 31 29 3b 0a 20 20 70 63 20 3d 20  , pIn1);.  pc = 
6290: 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 62  pOp->p2 - 1;.  b
62a0: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
62b0: 64 65 3a 20 20 52 65 74 75 72 6e 20 50 31 20 2a  de:  Return P1 *
62c0: 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d   * * *.**.** Jum
62d0: 70 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e  p to the next in
62e0: 73 74 72 75 63 74 69 6f 6e 20 61 66 74 65 72 20  struction after 
62f0: 74 68 65 20 61 64 64 72 65 73 73 20 69 6e 20 72  the address in r
6300: 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2f 0a 63  egister P1..*/.c
6310: 61 73 65 20 4f 50 5f 52 65 74 75 72 6e 3a 20 7b  ase OP_Return: {
6320: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e             /* in
6330: 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  1 */.  pIn1 = &a
6340: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
6350: 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c  assert( pIn1->fl
6360: 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b  ags & MEM_Int );
6370: 0a 20 20 70 63 20 3d 20 28 69 6e 74 29 70 49 6e  .  pc = (int)pIn
6380: 31 2d 3e 75 2e 69 3b 0a 20 20 62 72 65 61 6b 3b  1->u.i;.  break;
6390: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20  .}../* Opcode:  
63a0: 59 69 65 6c 64 20 50 31 20 2a 20 2a 20 2a 20 2a  Yield P1 * * * *
63b0: 0a 2a 2a 0a 2a 2a 20 53 77 61 70 20 74 68 65 20  .**.** Swap the 
63c0: 70 72 6f 67 72 61 6d 20 63 6f 75 6e 74 65 72 20  program counter 
63d0: 77 69 74 68 20 74 68 65 20 76 61 6c 75 65 20 69  with the value i
63e0: 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a  n register P1..*
63f0: 2f 0a 63 61 73 65 20 4f 50 5f 59 69 65 6c 64 3a  /.case OP_Yield:
6400: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
6410: 20 69 6e 31 20 2a 2f 0a 20 20 69 6e 74 20 70 63   in1 */.  int pc
6420: 44 65 73 74 3b 0a 20 20 70 49 6e 31 20 3d 20 26  Dest;.  pIn1 = &
6430: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
6440: 20 61 73 73 65 72 74 28 20 28 70 49 6e 31 2d 3e   assert( (pIn1->
6450: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 44 79 6e 29  flags & MEM_Dyn)
6460: 3d 3d 30 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66  ==0 );.  pIn1->f
6470: 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a  lags = MEM_Int;.
6480: 20 20 70 63 44 65 73 74 20 3d 20 28 69 6e 74 29    pcDest = (int)
6490: 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20 70 49 6e  pIn1->u.i;.  pIn
64a0: 31 2d 3e 75 2e 69 20 3d 20 70 63 3b 0a 20 20 52  1->u.i = pc;.  R
64b0: 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
64c0: 70 2d 3e 70 31 2c 20 70 49 6e 31 29 3b 0a 20 20  p->p1, pIn1);.  
64d0: 70 63 20 3d 20 70 63 44 65 73 74 3b 0a 20 20 62  pc = pcDest;.  b
64e0: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
64f0: 64 65 3a 20 20 48 61 6c 74 49 66 4e 75 6c 6c 20  de:  HaltIfNull 
6500: 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a   P1 P2 P3 P4 *.*
6510: 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 68 65 20 76  *.** Check the v
6520: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
6530: 20 50 33 2e 20 20 49 66 20 69 73 20 69 73 20 4e   P3.  If is is N
6540: 55 4c 4c 20 74 68 65 6e 20 48 61 6c 74 20 75 73  ULL then Halt us
6550: 69 6e 67 0a 2a 2a 20 70 61 72 61 6d 65 74 65 72  ing.** parameter
6560: 20 50 31 2c 20 50 32 2c 20 61 6e 64 20 50 34 20   P1, P2, and P4 
6570: 61 73 20 69 66 20 74 68 69 73 20 77 65 72 65 20  as if this were 
6580: 61 20 48 61 6c 74 20 69 6e 73 74 72 75 63 74 69  a Halt instructi
6590: 6f 6e 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 76  on.  If the.** v
65a0: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
65b0: 20 50 33 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c   P3 is not NULL,
65c0: 20 74 68 65 6e 20 74 68 69 73 20 72 6f 75 74 69   then this routi
65d0: 6e 65 20 69 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a  ne is a no-op..*
65e0: 2f 0a 63 61 73 65 20 4f 50 5f 48 61 6c 74 49 66  /.case OP_HaltIf
65f0: 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20 2f 2a 20  Null: {      /* 
6600: 69 6e 33 20 2a 2f 0a 20 20 70 49 6e 33 20 3d 20  in3 */.  pIn3 = 
6610: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
6620: 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61    if( (pIn3->fla
6630: 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d  gs & MEM_Null)==
6640: 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 2f 2a 20  0 ) break;.  /* 
6650: 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e 74  Fall through int
6660: 6f 20 4f 50 5f 48 61 6c 74 20 2a 2f 0a 7d 0a 0a  o OP_Halt */.}..
6670: 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 48 61 6c 74  /* Opcode:  Halt
6680: 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a   P1 P2 * P4 *.**
6690: 0a 2a 2a 20 45 78 69 74 20 69 6d 6d 65 64 69 61  .** Exit immedia
66a0: 74 65 6c 79 2e 20 20 41 6c 6c 20 6f 70 65 6e 20  tely.  All open 
66b0: 63 75 72 73 6f 72 73 2c 20 65 74 63 20 61 72 65  cursors, etc are
66c0: 20 63 6c 6f 73 65 64 0a 2a 2a 20 61 75 74 6f 6d   closed.** autom
66d0: 61 74 69 63 61 6c 6c 79 2e 0a 2a 2a 0a 2a 2a 20  atically..**.** 
66e0: 50 31 20 69 73 20 74 68 65 20 72 65 73 75 6c 74  P1 is the result
66f0: 20 63 6f 64 65 20 72 65 74 75 72 6e 65 64 20 62   code returned b
6700: 79 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28 29  y sqlite3_exec()
6710: 2c 20 73 71 6c 69 74 65 33 5f 72 65 73 65 74 28  , sqlite3_reset(
6720: 29 2c 0a 2a 2a 20 6f 72 20 73 71 6c 69 74 65 33  ),.** or sqlite3
6730: 5f 66 69 6e 61 6c 69 7a 65 28 29 2e 20 20 46 6f  _finalize().  Fo
6740: 72 20 61 20 6e 6f 72 6d 61 6c 20 68 61 6c 74 2c  r a normal halt,
6750: 20 74 68 69 73 20 73 68 6f 75 6c 64 20 62 65 20   this should be 
6760: 53 51 4c 49 54 45 5f 4f 4b 20 28 30 29 2e 0a 2a  SQLITE_OK (0)..*
6770: 2a 20 46 6f 72 20 65 72 72 6f 72 73 2c 20 69 74  * For errors, it
6780: 20 63 61 6e 20 62 65 20 73 6f 6d 65 20 6f 74 68   can be some oth
6790: 65 72 20 76 61 6c 75 65 2e 20 20 49 66 20 50 31  er value.  If P1
67a0: 21 3d 30 20 74 68 65 6e 20 50 32 20 77 69 6c 6c  !=0 then P2 will
67b0: 20 64 65 74 65 72 6d 69 6e 65 0a 2a 2a 20 77 68   determine.** wh
67c0: 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 6f 20  ether or not to 
67d0: 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20 63 75 72  rollback the cur
67e0: 72 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  rent transaction
67f0: 2e 20 20 44 6f 20 6e 6f 74 20 72 6f 6c 6c 62 61  .  Do not rollba
6800: 63 6b 0a 2a 2a 20 69 66 20 50 32 3d 3d 4f 45 5f  ck.** if P2==OE_
6810: 46 61 69 6c 2e 20 44 6f 20 74 68 65 20 72 6f 6c  Fail. Do the rol
6820: 6c 62 61 63 6b 20 69 66 20 50 32 3d 3d 4f 45 5f  lback if P2==OE_
6830: 52 6f 6c 6c 62 61 63 6b 2e 20 20 49 66 20 50 32  Rollback.  If P2
6840: 3d 3d 4f 45 5f 41 62 6f 72 74 2c 0a 2a 2a 20 74  ==OE_Abort,.** t
6850: 68 65 6e 20 62 61 63 6b 20 6f 75 74 20 61 6c 6c  hen back out all
6860: 20 63 68 61 6e 67 65 73 20 74 68 61 74 20 68 61   changes that ha
6870: 76 65 20 6f 63 63 75 72 72 65 64 20 64 75 72 69  ve occurred duri
6880: 6e 67 20 74 68 69 73 20 65 78 65 63 75 74 69 6f  ng this executio
6890: 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 56 44 42 45  n of the.** VDBE
68a0: 2c 20 62 75 74 20 64 6f 20 6e 6f 74 20 72 6f 6c  , but do not rol
68b0: 6c 62 61 63 6b 20 74 68 65 20 74 72 61 6e 73 61  lback the transa
68c0: 63 74 69 6f 6e 2e 20 0a 2a 2a 0a 2a 2a 20 49 66  ction. .**.** If
68d0: 20 50 34 20 69 73 20 6e 6f 74 20 6e 75 6c 6c 20   P4 is not null 
68e0: 74 68 65 6e 20 69 74 20 69 73 20 61 6e 20 65 72  then it is an er
68f0: 72 6f 72 20 6d 65 73 73 61 67 65 20 73 74 72 69  ror message stri
6900: 6e 67 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20  ng..**.** There 
6910: 69 73 20 61 6e 20 69 6d 70 6c 69 65 64 20 22 48  is an implied "H
6920: 61 6c 74 20 30 20 30 20 30 22 20 69 6e 73 74 72  alt 0 0 0" instr
6930: 75 63 74 69 6f 6e 20 69 6e 73 65 72 74 65 64 20  uction inserted 
6940: 61 74 20 74 68 65 20 76 65 72 79 20 65 6e 64 20  at the very end 
6950: 6f 66 0a 2a 2a 20 65 76 65 72 79 20 70 72 6f 67  of.** every prog
6960: 72 61 6d 2e 20 20 53 6f 20 61 20 6a 75 6d 70 20  ram.  So a jump 
6970: 70 61 73 74 20 74 68 65 20 6c 61 73 74 20 69 6e  past the last in
6980: 73 74 72 75 63 74 69 6f 6e 20 6f 66 20 74 68 65  struction of the
6990: 20 70 72 6f 67 72 61 6d 0a 2a 2a 20 69 73 20 74   program.** is t
69a0: 68 65 20 73 61 6d 65 20 61 73 20 65 78 65 63 75  he same as execu
69b0: 74 69 6e 67 20 48 61 6c 74 2e 0a 2a 2f 0a 63 61  ting Halt..*/.ca
69c0: 73 65 20 4f 50 5f 48 61 6c 74 3a 20 7b 0a 20 20  se OP_Halt: {.  
69d0: 69 66 28 20 70 4f 70 2d 3e 70 31 3d 3d 53 51 4c  if( pOp->p1==SQL
69e0: 49 54 45 5f 4f 4b 20 26 26 20 70 2d 3e 70 46 72  ITE_OK && p->pFr
69f0: 61 6d 65 20 29 7b 0a 20 20 20 20 2f 2a 20 48 61  ame ){.    /* Ha
6a00: 6c 74 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72  lt the sub-progr
6a10: 61 6d 2e 20 52 65 74 75 72 6e 20 63 6f 6e 74 72  am. Return contr
6a20: 6f 6c 20 74 6f 20 74 68 65 20 70 61 72 65 6e 74  ol to the parent
6a30: 20 66 72 61 6d 65 2e 20 2a 2f 0a 20 20 20 20 56   frame. */.    V
6a40: 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65  dbeFrame *pFrame
6a50: 20 3d 20 70 2d 3e 70 46 72 61 6d 65 3b 0a 20 20   = p->pFrame;.  
6a60: 20 20 70 2d 3e 70 46 72 61 6d 65 20 3d 20 70 46    p->pFrame = pF
6a70: 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 3b 0a 20  rame->pParent;. 
6a80: 20 20 20 70 2d 3e 6e 46 72 61 6d 65 2d 2d 3b 0a     p->nFrame--;.
6a90: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
6aa0: 65 74 43 68 61 6e 67 65 73 28 64 62 2c 20 70 2d  etChanges(db, p-
6ab0: 3e 6e 43 68 61 6e 67 65 29 3b 0a 20 20 20 20 70  >nChange);.    p
6ac0: 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 46  c = sqlite3VdbeF
6ad0: 72 61 6d 65 52 65 73 74 6f 72 65 28 70 46 72 61  rameRestore(pFra
6ae0: 6d 65 29 3b 0a 20 20 20 20 69 66 28 20 70 4f 70  me);.    if( pOp
6af0: 2d 3e 70 32 3d 3d 4f 45 5f 49 67 6e 6f 72 65 20  ->p2==OE_Ignore 
6b00: 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 6e 73 74  ){.      /* Inst
6b10: 72 75 63 74 69 6f 6e 20 70 63 20 69 73 20 74 68  ruction pc is th
6b20: 65 20 4f 50 5f 50 72 6f 67 72 61 6d 20 74 68 61  e OP_Program tha
6b30: 74 20 69 6e 76 6f 6b 65 64 20 74 68 65 20 73 75  t invoked the su
6b40: 62 2d 70 72 6f 67 72 61 6d 20 0a 20 20 20 20 20  b-program .     
6b50: 20 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20 62 65   ** currently be
6b60: 69 6e 67 20 68 61 6c 74 65 64 2e 20 49 66 20 74  ing halted. If t
6b70: 68 65 20 70 32 20 69 6e 73 74 72 75 63 74 69 6f  he p2 instructio
6b80: 6e 20 6f 66 20 74 68 69 73 20 4f 50 5f 48 61 6c  n of this OP_Hal
6b90: 74 0a 20 20 20 20 20 20 2a 2a 20 69 6e 73 74 72  t.      ** instr
6ba0: 75 63 74 69 6f 6e 20 69 73 20 73 65 74 20 74 6f  uction is set to
6bb0: 20 4f 45 5f 49 67 6e 6f 72 65 2c 20 74 68 65 6e   OE_Ignore, then
6bc0: 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d   the sub-program
6bd0: 20 69 73 20 74 68 72 6f 77 69 6e 67 0a 20 20 20   is throwing.   
6be0: 20 20 20 2a 2a 20 61 6e 20 49 47 4e 4f 52 45 20     ** an IGNORE 
6bf0: 65 78 63 65 70 74 69 6f 6e 2e 20 49 6e 20 74 68  exception. In th
6c00: 69 73 20 63 61 73 65 20 6a 75 6d 70 20 74 6f 20  is case jump to 
6c10: 74 68 65 20 61 64 64 72 65 73 73 20 73 70 65 63  the address spec
6c20: 69 66 69 65 64 0a 20 20 20 20 20 20 2a 2a 20 61  ified.      ** a
6c30: 73 20 74 68 65 20 70 32 20 6f 66 20 74 68 65 20  s the p2 of the 
6c40: 63 61 6c 6c 69 6e 67 20 4f 50 5f 50 72 6f 67 72  calling OP_Progr
6c50: 61 6d 2e 20 20 2a 2f 0a 20 20 20 20 20 20 70 63  am.  */.      pc
6c60: 20 3d 20 70 2d 3e 61 4f 70 5b 70 63 5d 2e 70 32   = p->aOp[pc].p2
6c70: 2d 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 61 4f  -1;.    }.    aO
6c80: 70 20 3d 20 70 2d 3e 61 4f 70 3b 0a 20 20 20 20  p = p->aOp;.    
6c90: 61 4d 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b 0a  aMem = p->aMem;.
6ca0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a      break;.  }..
6cb0: 20 20 70 2d 3e 72 63 20 3d 20 70 4f 70 2d 3e 70    p->rc = pOp->p
6cc0: 31 3b 0a 20 20 70 2d 3e 65 72 72 6f 72 41 63 74  1;.  p->errorAct
6cd0: 69 6f 6e 20 3d 20 28 75 38 29 70 4f 70 2d 3e 70  ion = (u8)pOp->p
6ce0: 32 3b 0a 20 20 70 2d 3e 70 63 20 3d 20 70 63 3b  2;.  p->pc = pc;
6cf0: 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 2e 7a  .  if( pOp->p4.z
6d00: 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
6d10: 70 2d 3e 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  p->rc!=SQLITE_OK
6d20: 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 53   );.    sqlite3S
6d30: 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72  etString(&p->zEr
6d40: 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 22 2c 20  rMsg, db, "%s", 
6d50: 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20  pOp->p4.z);.    
6d60: 74 65 73 74 63 61 73 65 28 20 73 71 6c 69 74 65  testcase( sqlite
6d70: 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 78 4c  3GlobalConfig.xL
6d80: 6f 67 21 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c  og!=0 );.    sql
6d90: 69 74 65 33 5f 6c 6f 67 28 70 4f 70 2d 3e 70 31  ite3_log(pOp->p1
6da0: 2c 20 22 61 62 6f 72 74 20 61 74 20 25 64 20 69  , "abort at %d i
6db0: 6e 20 5b 25 73 5d 3a 20 25 73 22 2c 20 70 63 2c  n [%s]: %s", pc,
6dc0: 20 70 2d 3e 7a 53 71 6c 2c 20 70 4f 70 2d 3e 70   p->zSql, pOp->p
6dd0: 34 2e 7a 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66  4.z);.  }else if
6de0: 28 20 70 2d 3e 72 63 20 29 7b 0a 20 20 20 20 74  ( p->rc ){.    t
6df0: 65 73 74 63 61 73 65 28 20 73 71 6c 69 74 65 33  estcase( sqlite3
6e00: 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 78 4c 6f  GlobalConfig.xLo
6e10: 67 21 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c 69  g!=0 );.    sqli
6e20: 74 65 33 5f 6c 6f 67 28 70 4f 70 2d 3e 70 31 2c  te3_log(pOp->p1,
6e30: 20 22 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69   "constraint fai
6e40: 6c 65 64 20 61 74 20 25 64 20 69 6e 20 5b 25 73  led at %d in [%s
6e50: 5d 22 2c 20 70 63 2c 20 70 2d 3e 7a 53 71 6c 29  ]", pc, p->zSql)
6e60: 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c  ;.  }.  rc = sql
6e70: 69 74 65 33 56 64 62 65 48 61 6c 74 28 70 29 3b  ite3VdbeHalt(p);
6e80: 0a 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53  .  assert( rc==S
6e90: 51 4c 49 54 45 5f 42 55 53 59 20 7c 7c 20 72 63  QLITE_BUSY || rc
6ea0: 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 72  ==SQLITE_OK || r
6eb0: 63 3d 3d 53 51 4c 49 54 45 5f 45 52 52 4f 52 20  c==SQLITE_ERROR 
6ec0: 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  );.  if( rc==SQL
6ed0: 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20 20  ITE_BUSY ){.    
6ee0: 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53 51 4c  p->rc = rc = SQL
6ef0: 49 54 45 5f 42 55 53 59 3b 0a 20 20 7d 65 6c 73  ITE_BUSY;.  }els
6f00: 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 72  e{.    assert( r
6f10: 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20  c==SQLITE_OK || 
6f20: 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 43 4f  p->rc==SQLITE_CO
6f30: 4e 53 54 52 41 49 4e 54 20 29 3b 0a 20 20 20 20  NSTRAINT );.    
6f40: 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49  assert( rc==SQLI
6f50: 54 45 5f 4f 4b 20 7c 7c 20 64 62 2d 3e 6e 44 65  TE_OK || db->nDe
6f60: 66 65 72 72 65 64 43 6f 6e 73 3e 30 20 29 3b 0a  ferredCons>0 );.
6f70: 20 20 20 20 72 63 20 3d 20 70 2d 3e 72 63 20 3f      rc = p->rc ?
6f80: 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 20 3a 20   SQLITE_ERROR : 
6f90: 53 51 4c 49 54 45 5f 44 4f 4e 45 3b 0a 20 20 7d  SQLITE_DONE;.  }
6fa0: 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74  .  goto vdbe_ret
6fb0: 75 72 6e 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  urn;.}../* Opcod
6fc0: 65 3a 20 49 6e 74 65 67 65 72 20 50 31 20 50 32  e: Integer P1 P2
6fd0: 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65   * * *.**.** The
6fe0: 20 33 32 2d 62 69 74 20 69 6e 74 65 67 65 72 20   32-bit integer 
6ff0: 76 61 6c 75 65 20 50 31 20 69 73 20 77 72 69 74  value P1 is writ
7000: 74 65 6e 20 69 6e 74 6f 20 72 65 67 69 73 74 65  ten into registe
7010: 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  r P2..*/.case OP
7020: 5f 49 6e 74 65 67 65 72 3a 20 7b 20 20 20 20 20  _Integer: {     
7030: 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72      /* out2-prer
7040: 65 6c 65 61 73 65 20 2a 2f 0a 20 20 70 4f 75 74  elease */.  pOut
7050: 2d 3e 75 2e 69 20 3d 20 70 4f 70 2d 3e 70 31 3b  ->u.i = pOp->p1;
7060: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
7070: 4f 70 63 6f 64 65 3a 20 49 6e 74 36 34 20 2a 20  Opcode: Int64 * 
7080: 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20  P2 * P4 *.**.** 
7090: 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20  P4 is a pointer 
70a0: 74 6f 20 61 20 36 34 2d 62 69 74 20 69 6e 74 65  to a 64-bit inte
70b0: 67 65 72 20 76 61 6c 75 65 2e 0a 2a 2a 20 57 72  ger value..** Wr
70c0: 69 74 65 20 74 68 61 74 20 76 61 6c 75 65 20 69  ite that value i
70d0: 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e  nto register P2.
70e0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74 36  .*/.case OP_Int6
70f0: 34 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f  4: {           /
7100: 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73  * out2-prereleas
7110: 65 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70  e */.  assert( p
7120: 4f 70 2d 3e 70 34 2e 70 49 36 34 21 3d 30 20 29  Op->p4.pI64!=0 )
7130: 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20  ;.  pOut->u.i = 
7140: 2a 70 4f 70 2d 3e 70 34 2e 70 49 36 34 3b 0a 20  *pOp->p4.pI64;. 
7150: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64   break;.}..#ifnd
7160: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ef SQLITE_OMIT_F
7170: 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 2f 2a  LOATING_POINT./*
7180: 20 4f 70 63 6f 64 65 3a 20 52 65 61 6c 20 2a 20   Opcode: Real * 
7190: 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20  P2 * P4 *.**.** 
71a0: 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20  P4 is a pointer 
71b0: 74 6f 20 61 20 36 34 2d 62 69 74 20 66 6c 6f 61  to a 64-bit floa
71c0: 74 69 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75 65  ting point value
71d0: 2e 0a 2a 2a 20 57 72 69 74 65 20 74 68 61 74 20  ..** Write that 
71e0: 76 61 6c 75 65 20 69 6e 74 6f 20 72 65 67 69 73  value into regis
71f0: 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20  ter P2..*/.case 
7200: 4f 50 5f 52 65 61 6c 3a 20 7b 20 20 20 20 20 20  OP_Real: {      
7210: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
7220: 20 54 4b 5f 46 4c 4f 41 54 2c 20 6f 75 74 32 2d   TK_FLOAT, out2-
7230: 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20  prerelease */.  
7240: 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pOut->flags = ME
7250: 4d 5f 52 65 61 6c 3b 0a 20 20 61 73 73 65 72 74  M_Real;.  assert
7260: 28 20 21 73 71 6c 69 74 65 33 49 73 4e 61 4e 28  ( !sqlite3IsNaN(
7270: 2a 70 4f 70 2d 3e 70 34 2e 70 52 65 61 6c 29 20  *pOp->p4.pReal) 
7280: 29 3b 0a 20 20 70 4f 75 74 2d 3e 72 20 3d 20 2a  );.  pOut->r = *
7290: 70 4f 70 2d 3e 70 34 2e 70 52 65 61 6c 3b 0a 20  pOp->p4.pReal;. 
72a0: 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
72b0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 74 72  ../* Opcode: Str
72c0: 69 6e 67 38 20 2a 20 50 32 20 2a 20 50 34 20 2a  ing8 * P2 * P4 *
72d0: 0a 2a 2a 0a 2a 2a 20 50 34 20 70 6f 69 6e 74 73  .**.** P4 points
72e0: 20 74 6f 20 61 20 6e 75 6c 20 74 65 72 6d 69 6e   to a nul termin
72f0: 61 74 65 64 20 55 54 46 2d 38 20 73 74 72 69 6e  ated UTF-8 strin
7300: 67 2e 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69  g. This opcode i
7310: 73 20 74 72 61 6e 73 66 6f 72 6d 65 64 20 0a 2a  s transformed .*
7320: 2a 20 69 6e 74 6f 20 61 6e 20 4f 50 5f 53 74 72  * into an OP_Str
7330: 69 6e 67 20 62 65 66 6f 72 65 20 69 74 20 69 73  ing before it is
7340: 20 65 78 65 63 75 74 65 64 20 66 6f 72 20 74 68   executed for th
7350: 65 20 66 69 72 73 74 20 74 69 6d 65 2e 0a 2a 2f  e first time..*/
7360: 0a 63 61 73 65 20 4f 50 5f 53 74 72 69 6e 67 38  .case OP_String8
7370: 3a 20 7b 20 20 20 20 20 20 20 20 20 2f 2a 20 73  : {         /* s
7380: 61 6d 65 20 61 73 20 54 4b 5f 53 54 52 49 4e 47  ame as TK_STRING
7390: 2c 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73  , out2-prereleas
73a0: 65 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70  e */.  assert( p
73b0: 4f 70 2d 3e 70 34 2e 7a 21 3d 30 20 29 3b 0a 20  Op->p4.z!=0 );. 
73c0: 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 3d 20 4f   pOp->opcode = O
73d0: 50 5f 53 74 72 69 6e 67 3b 0a 20 20 70 4f 70 2d  P_String;.  pOp-
73e0: 3e 70 31 20 3d 20 73 71 6c 69 74 65 33 53 74 72  >p1 = sqlite3Str
73f0: 6c 65 6e 33 30 28 70 4f 70 2d 3e 70 34 2e 7a 29  len30(pOp->p4.z)
7400: 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  ;..#ifndef SQLIT
7410: 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20 69  E_OMIT_UTF16.  i
7420: 66 28 20 65 6e 63 6f 64 69 6e 67 21 3d 53 51 4c  f( encoding!=SQL
7430: 49 54 45 5f 55 54 46 38 20 29 7b 0a 20 20 20 20  ITE_UTF8 ){.    
7440: 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
7450: 4d 65 6d 53 65 74 53 74 72 28 70 4f 75 74 2c 20  MemSetStr(pOut, 
7460: 70 4f 70 2d 3e 70 34 2e 7a 2c 20 2d 31 2c 20 53  pOp->p4.z, -1, S
7470: 51 4c 49 54 45 5f 55 54 46 38 2c 20 53 51 4c 49  QLITE_UTF8, SQLI
7480: 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  TE_STATIC);.    
7490: 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 54  if( rc==SQLITE_T
74a0: 4f 4f 42 49 47 20 29 20 67 6f 74 6f 20 74 6f 6f  OOBIG ) goto too
74b0: 5f 62 69 67 3b 0a 20 20 20 20 69 66 28 20 53 51  _big;.    if( SQ
74c0: 4c 49 54 45 5f 4f 4b 21 3d 73 71 6c 69 74 65 33  LITE_OK!=sqlite3
74d0: 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69  VdbeChangeEncodi
74e0: 6e 67 28 70 4f 75 74 2c 20 65 6e 63 6f 64 69 6e  ng(pOut, encodin
74f0: 67 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  g) ) goto no_mem
7500: 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  ;.    assert( pO
7510: 75 74 2d 3e 7a 4d 61 6c 6c 6f 63 3d 3d 70 4f 75  ut->zMalloc==pOu
7520: 74 2d 3e 7a 20 29 3b 0a 20 20 20 20 61 73 73 65  t->z );.    asse
7530: 72 74 28 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20  rt( pOut->flags 
7540: 26 20 4d 45 4d 5f 44 79 6e 20 29 3b 0a 20 20 20  & MEM_Dyn );.   
7550: 20 70 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d   pOut->zMalloc =
7560: 20 30 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c   0;.    pOut->fl
7570: 61 67 73 20 7c 3d 20 4d 45 4d 5f 53 74 61 74 69  ags |= MEM_Stati
7580: 63 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61  c;.    pOut->fla
7590: 67 73 20 26 3d 20 7e 4d 45 4d 5f 44 79 6e 3b 0a  gs &= ~MEM_Dyn;.
75a0: 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 74      if( pOp->p4t
75b0: 79 70 65 3d 3d 50 34 5f 44 59 4e 41 4d 49 43 20  ype==P4_DYNAMIC 
75c0: 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
75d0: 44 62 46 72 65 65 28 64 62 2c 20 70 4f 70 2d 3e  DbFree(db, pOp->
75e0: 70 34 2e 7a 29 3b 0a 20 20 20 20 7d 0a 20 20 20  p4.z);.    }.   
75f0: 20 70 4f 70 2d 3e 70 34 74 79 70 65 20 3d 20 50   pOp->p4type = P
7600: 34 5f 44 59 4e 41 4d 49 43 3b 0a 20 20 20 20 70  4_DYNAMIC;.    p
7610: 4f 70 2d 3e 70 34 2e 7a 20 3d 20 70 4f 75 74 2d  Op->p4.z = pOut-
7620: 3e 7a 3b 0a 20 20 20 20 70 4f 70 2d 3e 70 31 20  >z;.    pOp->p1 
7630: 3d 20 70 4f 75 74 2d 3e 6e 3b 0a 20 20 7d 0a 23  = pOut->n;.  }.#
7640: 65 6e 64 69 66 0a 20 20 69 66 28 20 70 4f 70 2d  endif.  if( pOp-
7650: 3e 70 31 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53  >p1>db->aLimit[S
7660: 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47  QLITE_LIMIT_LENG
7670: 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  TH] ){.    goto 
7680: 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 2f  too_big;.  }.  /
7690: 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 74  * Fall through t
76a0: 6f 20 74 68 65 20 6e 65 78 74 20 63 61 73 65 2c  o the next case,
76b0: 20 4f 50 5f 53 74 72 69 6e 67 20 2a 2f 0a 7d 0a   OP_String */.}.
76c0: 20 20 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 74    ./* Opcode: St
76d0: 72 69 6e 67 20 50 31 20 50 32 20 2a 20 50 34 20  ring P1 P2 * P4 
76e0: 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 74 72 69  *.**.** The stri
76f0: 6e 67 20 76 61 6c 75 65 20 50 34 20 6f 66 20 6c  ng value P4 of l
7700: 65 6e 67 74 68 20 50 31 20 28 62 79 74 65 73 29  ength P1 (bytes)
7710: 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65   is stored in re
7720: 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61  gister P2..*/.ca
7730: 73 65 20 4f 50 5f 53 74 72 69 6e 67 3a 20 7b 20  se OP_String: { 
7740: 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
7750: 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20  -prerelease */. 
7760: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
7770: 2e 7a 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74 2d  .z!=0 );.  pOut-
7780: 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 53 74 72  >flags = MEM_Str
7790: 7c 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f  |MEM_Static|MEM_
77a0: 54 65 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e 7a 20  Term;.  pOut->z 
77b0: 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 70  = pOp->p4.z;.  p
77c0: 4f 75 74 2d 3e 6e 20 3d 20 70 4f 70 2d 3e 70 31  Out->n = pOp->p1
77d0: 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20  ;.  pOut->enc = 
77e0: 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44 41  encoding;.  UPDA
77f0: 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
7800: 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  pOut);.  break;.
7810: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 75  }../* Opcode: Nu
7820: 6c 6c 20 2a 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  ll * P2 * * *.**
7830: 0a 2a 2a 20 57 72 69 74 65 20 61 20 4e 55 4c 4c  .** Write a NULL
7840: 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
7850: 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 75  2..*/.case OP_Nu
7860: 6c 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ll: {           
7870: 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61  /* out2-prerelea
7880: 73 65 20 2a 2f 0a 20 20 70 4f 75 74 2d 3e 66 6c  se */.  pOut->fl
7890: 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a  ags = MEM_Null;.
78a0: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20    break;.}.../* 
78b0: 4f 70 63 6f 64 65 3a 20 42 6c 6f 62 20 50 31 20  Opcode: Blob P1 
78c0: 50 32 20 2a 20 50 34 0a 2a 2a 0a 2a 2a 20 50 34  P2 * P4.**.** P4
78d0: 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 62 6c 6f   points to a blo
78e0: 62 20 6f 66 20 64 61 74 61 20 50 31 20 62 79 74  b of data P1 byt
78f0: 65 73 20 6c 6f 6e 67 2e 20 20 53 74 6f 72 65 20  es long.  Store 
7900: 74 68 69 73 0a 2a 2a 20 62 6c 6f 62 20 69 6e 20  this.** blob in 
7910: 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a  register P2..*/.
7920: 63 61 73 65 20 4f 50 5f 42 6c 6f 62 3a 20 7b 20  case OP_Blob: { 
7930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
7940: 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73  * out2-prereleas
7950: 65 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70  e */.  assert( p
7960: 4f 70 2d 3e 70 31 20 3c 3d 20 53 51 4c 49 54 45  Op->p1 <= SQLITE
7970: 5f 4d 41 58 5f 4c 45 4e 47 54 48 20 29 3b 0a 20  _MAX_LENGTH );. 
7980: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
7990: 65 74 53 74 72 28 70 4f 75 74 2c 20 70 4f 70 2d  etStr(pOut, pOp-
79a0: 3e 70 34 2e 7a 2c 20 70 4f 70 2d 3e 70 31 2c 20  >p4.z, pOp->p1, 
79b0: 30 2c 20 30 29 3b 0a 20 20 70 4f 75 74 2d 3e 65  0, 0);.  pOut->e
79c0: 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 20  nc = encoding;. 
79d0: 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42   UPDATE_MAX_BLOB
79e0: 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72  SIZE(pOut);.  br
79f0: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
7a00: 65 3a 20 56 61 72 69 61 62 6c 65 20 50 31 20 50  e: Variable P1 P
7a10: 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 54  2 * P4 *.**.** T
7a20: 72 61 6e 73 66 65 72 20 74 68 65 20 76 61 6c 75  ransfer the valu
7a30: 65 73 20 6f 66 20 62 6f 75 6e 64 20 70 61 72 61  es of bound para
7a40: 6d 65 74 65 72 20 50 31 20 69 6e 74 6f 20 72 65  meter P1 into re
7a50: 67 69 73 74 65 72 20 50 32 0a 2a 2a 0a 2a 2a 20  gister P2.**.** 
7a60: 49 66 20 74 68 65 20 70 61 72 61 6d 65 74 65 72  If the parameter
7a70: 20 69 73 20 6e 61 6d 65 64 2c 20 74 68 65 6e 20   is named, then 
7a80: 69 74 73 20 6e 61 6d 65 20 61 70 70 65 61 72 73  its name appears
7a90: 20 69 6e 20 50 34 20 61 6e 64 20 50 33 3d 3d 31   in P4 and P3==1
7aa0: 2e 0a 2a 2a 20 54 68 65 20 50 34 20 76 61 6c 75  ..** The P4 valu
7ab0: 65 20 69 73 20 75 73 65 64 20 62 79 20 73 71 6c  e is used by sql
7ac0: 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65  ite3_bind_parame
7ad0: 74 65 72 5f 6e 61 6d 65 28 29 2e 0a 2a 2f 0a 63  ter_name()..*/.c
7ae0: 61 73 65 20 4f 50 5f 56 61 72 69 61 62 6c 65 3a  ase OP_Variable:
7af0: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
7b00: 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65   out2-prerelease
7b10: 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 56 61 72 3b   */.  Mem *pVar;
7b20: 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20         /* Value 
7b30: 62 65 69 6e 67 20 74 72 61 6e 73 66 65 72 72 65  being transferre
7b40: 64 20 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20  d */..  assert( 
7b50: 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70  pOp->p1>0 && pOp
7b60: 2d 3e 70 31 3c 3d 70 2d 3e 6e 56 61 72 20 29 3b  ->p1<=p->nVar );
7b70: 0a 20 20 70 56 61 72 20 3d 20 26 70 2d 3e 61 56  .  pVar = &p->aV
7b80: 61 72 5b 70 4f 70 2d 3e 70 31 20 2d 20 31 5d 3b  ar[pOp->p1 - 1];
7b90: 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64  .  if( sqlite3Vd
7ba0: 62 65 4d 65 6d 54 6f 6f 42 69 67 28 70 56 61 72  beMemTooBig(pVar
7bb0: 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f  ) ){.    goto to
7bc0: 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 73 71 6c  o_big;.  }.  sql
7bd0: 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c  ite3VdbeMemShall
7be0: 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20 70 56 61  owCopy(pOut, pVa
7bf0: 72 2c 20 4d 45 4d 5f 53 74 61 74 69 63 29 3b 0a  r, MEM_Static);.
7c00: 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f    UPDATE_MAX_BLO
7c10: 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62  BSIZE(pOut);.  b
7c20: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
7c30: 64 65 3a 20 4d 6f 76 65 20 50 31 20 50 32 20 50  de: Move P1 P2 P
7c40: 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4d 6f 76 65  3 * *.**.** Move
7c50: 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72   the values in r
7c60: 65 67 69 73 74 65 72 20 50 31 2e 2e 50 31 2b 50  egister P1..P1+P
7c70: 33 2d 31 20 6f 76 65 72 20 69 6e 74 6f 0a 2a 2a  3-1 over into.**
7c80: 20 72 65 67 69 73 74 65 72 73 20 50 32 2e 2e 50   registers P2..P
7c90: 32 2b 50 33 2d 31 2e 20 20 52 65 67 69 73 74 65  2+P3-1.  Registe
7ca0: 72 73 20 50 31 2e 2e 50 31 2b 50 31 2d 31 20 61  rs P1..P1+P1-1 a
7cb0: 72 65 0a 2a 2a 20 6c 65 66 74 20 68 6f 6c 64 69  re.** left holdi
7cc0: 6e 67 20 61 20 4e 55 4c 4c 2e 20 20 49 74 20 69  ng a NULL.  It i
7cd0: 73 20 61 6e 20 65 72 72 6f 72 20 66 6f 72 20 72  s an error for r
7ce0: 65 67 69 73 74 65 72 20 72 61 6e 67 65 73 0a 2a  egister ranges.*
7cf0: 2a 20 50 31 2e 2e 50 31 2b 50 33 2d 31 20 61 6e  * P1..P1+P3-1 an
7d00: 64 20 50 32 2e 2e 50 32 2b 50 33 2d 31 20 74 6f  d P2..P2+P3-1 to
7d10: 20 6f 76 65 72 6c 61 70 2e 0a 2a 2f 0a 63 61 73   overlap..*/.cas
7d20: 65 20 4f 50 5f 4d 6f 76 65 3a 20 7b 0a 20 20 63  e OP_Move: {.  c
7d30: 68 61 72 20 2a 7a 4d 61 6c 6c 6f 63 3b 20 20 20  har *zMalloc;   
7d40: 2f 2a 20 48 6f 6c 64 69 6e 67 20 76 61 72 69 61  /* Holding varia
7d50: 62 6c 65 20 66 6f 72 20 61 6c 6c 6f 63 61 74 65  ble for allocate
7d60: 64 20 6d 65 6d 6f 72 79 20 2a 2f 0a 20 20 69 6e  d memory */.  in
7d70: 74 20 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f  t n;           /
7d80: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 72 65 67 69  * Number of regi
7d90: 73 74 65 72 73 20 6c 65 66 74 20 74 6f 20 63 6f  sters left to co
7da0: 70 79 20 2a 2f 0a 20 20 69 6e 74 20 70 31 3b 20  py */.  int p1; 
7db0: 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69           /* Regi
7dc0: 73 74 65 72 20 74 6f 20 63 6f 70 79 20 66 72 6f  ster to copy fro
7dd0: 6d 20 2a 2f 0a 20 20 69 6e 74 20 70 32 3b 20 20  m */.  int p2;  
7de0: 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73          /* Regis
7df0: 74 65 72 20 74 6f 20 63 6f 70 79 20 74 6f 20 2a  ter to copy to *
7e00: 2f 0a 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 33  /..  n = pOp->p3
7e10: 3b 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31  ;.  p1 = pOp->p1
7e20: 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32  ;.  p2 = pOp->p2
7e30: 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 3e 30 20  ;.  assert( n>0 
7e40: 26 26 20 70 31 3e 30 20 26 26 20 70 32 3e 30 20  && p1>0 && p2>0 
7e50: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 31 2b  );.  assert( p1+
7e60: 6e 3c 3d 70 32 20 7c 7c 20 70 32 2b 6e 3c 3d 70  n<=p2 || p2+n<=p
7e70: 31 20 29 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26  1 );..  pIn1 = &
7e80: 61 4d 65 6d 5b 70 31 5d 3b 0a 20 20 70 4f 75 74  aMem[p1];.  pOut
7e90: 20 3d 20 26 61 4d 65 6d 5b 70 32 5d 3b 0a 20 20   = &aMem[p2];.  
7ea0: 77 68 69 6c 65 28 20 6e 2d 2d 20 29 7b 0a 20 20  while( n-- ){.  
7eb0: 20 20 61 73 73 65 72 74 28 20 70 4f 75 74 3c 3d    assert( pOut<=
7ec0: 26 61 4d 65 6d 5b 70 2d 3e 6e 4d 65 6d 5d 20 29  &aMem[p->nMem] )
7ed0: 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 49  ;.    assert( pI
7ee0: 6e 31 3c 3d 26 61 4d 65 6d 5b 70 2d 3e 6e 4d 65  n1<=&aMem[p->nMe
7ef0: 6d 5d 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  m] );.    assert
7f00: 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 49 6e  ( memIsValid(pIn
7f10: 31 29 20 29 3b 0a 20 20 20 20 6d 65 6d 41 62 6f  1) );.    memAbo
7f20: 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f  utToChange(p, pO
7f30: 75 74 29 3b 0a 20 20 20 20 7a 4d 61 6c 6c 6f 63  ut);.    zMalloc
7f40: 20 3d 20 70 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f 63   = pOut->zMalloc
7f50: 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 7a 4d 61 6c  ;.    pOut->zMal
7f60: 6c 6f 63 20 3d 20 30 3b 0a 20 20 20 20 73 71 6c  loc = 0;.    sql
7f70: 69 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28  ite3VdbeMemMove(
7f80: 70 4f 75 74 2c 20 70 49 6e 31 29 3b 0a 20 20 20  pOut, pIn1);.   
7f90: 20 70 49 6e 31 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d   pIn1->zMalloc =
7fa0: 20 7a 4d 61 6c 6c 6f 63 3b 0a 20 20 20 20 52 45   zMalloc;.    RE
7fb0: 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 32 2b  GISTER_TRACE(p2+
7fc0: 2b 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 70 49  +, pOut);.    pI
7fd0: 6e 31 2b 2b 3b 0a 20 20 20 20 70 4f 75 74 2b 2b  n1++;.    pOut++
7fe0: 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
7ff0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 70  ../* Opcode: Cop
8000: 79 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  y P1 P2 * * *.**
8010: 0a 2a 2a 20 4d 61 6b 65 20 61 20 63 6f 70 79 20  .** Make a copy 
8020: 6f 66 20 72 65 67 69 73 74 65 72 20 50 31 20 69  of register P1 i
8030: 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e  nto register P2.
8040: 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74  .**.** This inst
8050: 72 75 63 74 69 6f 6e 20 6d 61 6b 65 73 20 61 20  ruction makes a 
8060: 64 65 65 70 20 63 6f 70 79 20 6f 66 20 74 68 65  deep copy of the
8070: 20 76 61 6c 75 65 2e 20 20 41 20 64 75 70 6c 69   value.  A dupli
8080: 63 61 74 65 0a 2a 2a 20 69 73 20 6d 61 64 65 20  cate.** is made 
8090: 6f 66 20 61 6e 79 20 73 74 72 69 6e 67 20 6f 72  of any string or
80a0: 20 62 6c 6f 62 20 63 6f 6e 73 74 61 6e 74 2e 20   blob constant. 
80b0: 20 53 65 65 20 61 6c 73 6f 20 4f 50 5f 53 43 6f   See also OP_SCo
80c0: 70 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43  py..*/.case OP_C
80d0: 6f 70 79 3a 20 7b 20 20 20 20 20 20 20 20 20 20  opy: {          
80e0: 20 20 20 2f 2a 20 69 6e 31 2c 20 6f 75 74 32 20     /* in1, out2 
80f0: 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
8100: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f  m[pOp->p1];.  pO
8110: 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
8120: 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p2];.  assert( p
8130: 4f 75 74 21 3d 70 49 6e 31 20 29 3b 0a 20 20 73  Out!=pIn1 );.  s
8140: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61  qlite3VdbeMemSha
8150: 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20 70  llowCopy(pOut, p
8160: 49 6e 31 2c 20 4d 45 4d 5f 45 70 68 65 6d 29 3b  In1, MEM_Ephem);
8170: 0a 20 20 44 65 65 70 68 65 6d 65 72 61 6c 69 7a  .  Deephemeraliz
8180: 65 28 70 4f 75 74 29 3b 0a 20 20 52 45 47 49 53  e(pOut);.  REGIS
8190: 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
81a0: 32 2c 20 70 4f 75 74 29 3b 0a 20 20 62 72 65 61  2, pOut);.  brea
81b0: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
81c0: 20 53 43 6f 70 79 20 50 31 20 50 32 20 2a 20 2a   SCopy P1 P2 * *
81d0: 20 2a 0a 2a 2a 0a 2a 2a 20 4d 61 6b 65 20 61 20   *.**.** Make a 
81e0: 73 68 61 6c 6c 6f 77 20 63 6f 70 79 20 6f 66 20  shallow copy of 
81f0: 72 65 67 69 73 74 65 72 20 50 31 20 69 6e 74 6f  register P1 into
8200: 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a   register P2..**
8210: 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63  .** This instruc
8220: 74 69 6f 6e 20 6d 61 6b 65 73 20 61 20 73 68 61  tion makes a sha
8230: 6c 6c 6f 77 20 63 6f 70 79 20 6f 66 20 74 68 65  llow copy of the
8240: 20 76 61 6c 75 65 2e 20 20 49 66 20 74 68 65 20   value.  If the 
8250: 76 61 6c 75 65 0a 2a 2a 20 69 73 20 61 20 73 74  value.** is a st
8260: 72 69 6e 67 20 6f 72 20 62 6c 6f 62 2c 20 74 68  ring or blob, th
8270: 65 6e 20 74 68 65 20 63 6f 70 79 20 69 73 20 6f  en the copy is o
8280: 6e 6c 79 20 61 20 70 6f 69 6e 74 65 72 20 74 6f  nly a pointer to
8290: 20 74 68 65 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c   the.** original
82a0: 20 61 6e 64 20 68 65 6e 63 65 20 69 66 20 74 68   and hence if th
82b0: 65 20 6f 72 69 67 69 6e 61 6c 20 63 68 61 6e 67  e original chang
82c0: 65 73 20 73 6f 20 77 69 6c 6c 20 74 68 65 20 63  es so will the c
82d0: 6f 70 79 2e 0a 2a 2a 20 57 6f 72 73 65 2c 20 69  opy..** Worse, i
82e0: 66 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 69  f the original i
82f0: 73 20 64 65 61 6c 6c 6f 63 61 74 65 64 2c 20 74  s deallocated, t
8300: 68 65 20 63 6f 70 79 20 62 65 63 6f 6d 65 73 20  he copy becomes 
8310: 69 6e 76 61 6c 69 64 2e 0a 2a 2a 20 54 68 75 73  invalid..** Thus
8320: 20 74 68 65 20 70 72 6f 67 72 61 6d 20 6d 75 73   the program mus
8330: 74 20 67 75 61 72 61 6e 74 65 65 20 74 68 61 74  t guarantee that
8340: 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 77 69   the original wi
8350: 6c 6c 20 6e 6f 74 20 63 68 61 6e 67 65 0a 2a 2a  ll not change.**
8360: 20 64 75 72 69 6e 67 20 74 68 65 20 6c 69 66 65   during the life
8370: 74 69 6d 65 20 6f 66 20 74 68 65 20 63 6f 70 79  time of the copy
8380: 2e 20 20 55 73 65 20 4f 50 5f 43 6f 70 79 20 74  .  Use OP_Copy t
8390: 6f 20 6d 61 6b 65 20 61 20 63 6f 6d 70 6c 65 74  o make a complet
83a0: 65 0a 2a 2a 20 63 6f 70 79 2e 0a 2a 2f 0a 63 61  e.** copy..*/.ca
83b0: 73 65 20 4f 50 5f 53 43 6f 70 79 3a 20 7b 20 20  se OP_SCopy: {  
83c0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31            /* in1
83d0: 2c 20 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e 31  , out2 */.  pIn1
83e0: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
83f0: 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65  ];.  pOut = &aMe
8400: 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73  m[pOp->p2];.  as
8410: 73 65 72 74 28 20 70 4f 75 74 21 3d 70 49 6e 31  sert( pOut!=pIn1
8420: 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62   );.  sqlite3Vdb
8430: 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28  eMemShallowCopy(
8440: 70 4f 75 74 2c 20 70 49 6e 31 2c 20 4d 45 4d 5f  pOut, pIn1, MEM_
8450: 45 70 68 65 6d 29 3b 0a 23 69 66 64 65 66 20 53  Ephem);.#ifdef S
8460: 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69 66  QLITE_DEBUG.  if
8470: 28 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72  ( pOut->pScopyFr
8480: 6f 6d 3d 3d 30 20 29 20 70 4f 75 74 2d 3e 70 53  om==0 ) pOut->pS
8490: 63 6f 70 79 46 72 6f 6d 20 3d 20 70 49 6e 31 3b  copyFrom = pIn1;
84a0: 0a 23 65 6e 64 69 66 0a 20 20 52 45 47 49 53 54  .#endif.  REGIST
84b0: 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32  ER_TRACE(pOp->p2
84c0: 2c 20 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b  , pOut);.  break
84d0: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
84e0: 52 65 73 75 6c 74 52 6f 77 20 50 31 20 50 32 20  ResultRow P1 P2 
84f0: 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20  * * *.**.** The 
8500: 72 65 67 69 73 74 65 72 73 20 50 31 20 74 68 72  registers P1 thr
8510: 6f 75 67 68 20 50 31 2b 50 32 2d 31 20 63 6f 6e  ough P1+P2-1 con
8520: 74 61 69 6e 20 61 20 73 69 6e 67 6c 65 20 72 6f  tain a single ro
8530: 77 20 6f 66 0a 2a 2a 20 72 65 73 75 6c 74 73 2e  w of.** results.
8540: 20 54 68 69 73 20 6f 70 63 6f 64 65 20 63 61 75   This opcode cau
8550: 73 65 73 20 74 68 65 20 73 71 6c 69 74 65 33 5f  ses the sqlite3_
8560: 73 74 65 70 28 29 20 63 61 6c 6c 20 74 6f 20 74  step() call to t
8570: 65 72 6d 69 6e 61 74 65 0a 2a 2a 20 77 69 74 68  erminate.** with
8580: 20 61 6e 20 53 51 4c 49 54 45 5f 52 4f 57 20 72   an SQLITE_ROW r
8590: 65 74 75 72 6e 20 63 6f 64 65 20 61 6e 64 20 69  eturn code and i
85a0: 74 20 73 65 74 73 20 75 70 20 74 68 65 20 73 71  t sets up the sq
85b0: 6c 69 74 65 33 5f 73 74 6d 74 0a 2a 2a 20 73 74  lite3_stmt.** st
85c0: 72 75 63 74 75 72 65 20 74 6f 20 70 72 6f 76 69  ructure to provi
85d0: 64 65 20 61 63 63 65 73 73 20 74 6f 20 74 68 65  de access to the
85e0: 20 74 6f 70 20 50 31 20 76 61 6c 75 65 73 20 61   top P1 values a
85f0: 73 20 74 68 65 20 72 65 73 75 6c 74 0a 2a 2a 20  s the result.** 
8600: 72 6f 77 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  row..*/.case OP_
8610: 52 65 73 75 6c 74 52 6f 77 3a 20 7b 0a 20 20 4d  ResultRow: {.  M
8620: 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20 69 6e 74 20  em *pMem;.  int 
8630: 69 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  i;.  assert( p->
8640: 6e 52 65 73 43 6f 6c 75 6d 6e 3d 3d 70 4f 70 2d  nResColumn==pOp-
8650: 3e 70 32 20 29 3b 0a 20 20 61 73 73 65 72 74 28  >p2 );.  assert(
8660: 20 70 4f 70 2d 3e 70 31 3e 30 20 29 3b 0a 20 20   pOp->p1>0 );.  
8670: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 2b  assert( pOp->p1+
8680: 70 4f 70 2d 3e 70 32 3c 3d 70 2d 3e 6e 4d 65 6d  pOp->p2<=p->nMem
8690: 2b 31 20 29 3b 0a 0a 20 20 2f 2a 20 49 66 20 74  +1 );..  /* If t
86a0: 68 69 73 20 73 74 61 74 65 6d 65 6e 74 20 68 61  his statement ha
86b0: 73 20 76 69 6f 6c 61 74 65 64 20 69 6d 6d 65 64  s violated immed
86c0: 69 61 74 65 20 66 6f 72 65 69 67 6e 20 6b 65 79  iate foreign key
86d0: 20 63 6f 6e 73 74 72 61 69 6e 74 73 2c 20 64 6f   constraints, do
86e0: 0a 20 20 2a 2a 20 6e 6f 74 20 72 65 74 75 72 6e  .  ** not return
86f0: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72   the number of r
8700: 6f 77 73 20 6d 6f 64 69 66 69 65 64 2e 20 41 6e  ows modified. An
8710: 64 20 64 6f 20 6e 6f 74 20 52 45 4c 45 41 53 45  d do not RELEASE
8720: 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 0a 20   the statement. 
8730: 20 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e   ** transaction.
8740: 20 49 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20   It needs to be 
8750: 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20 2a 2f  rolled back.  */
8760: 0a 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b  .  if( SQLITE_OK
8770: 21 3d 28 72 63 20 3d 20 73 71 6c 69 74 65 33 56  !=(rc = sqlite3V
8780: 64 62 65 43 68 65 63 6b 46 6b 28 70 2c 20 30 29  dbeCheckFk(p, 0)
8790: 29 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  ) ){.    assert(
87a0: 20 64 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54   db->flags&SQLIT
87b0: 45 5f 43 6f 75 6e 74 52 6f 77 73 20 29 3b 0a 20  E_CountRows );. 
87c0: 20 20 20 61 73 73 65 72 74 28 20 70 2d 3e 75 73     assert( p->us
87d0: 65 73 53 74 6d 74 4a 6f 75 72 6e 61 6c 20 29 3b  esStmtJournal );
87e0: 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
87f0: 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 53 51 4c  .  /* If the SQL
8800: 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20 66 6c  ITE_CountRows fl
8810: 61 67 20 69 73 20 73 65 74 20 69 6e 20 73 71 6c  ag is set in sql
8820: 69 74 65 33 2e 66 6c 61 67 73 20 6d 61 73 6b 2c  ite3.flags mask,
8830: 20 74 68 65 6e 20 0a 20 20 2a 2a 20 44 4d 4c 20   then .  ** DML 
8840: 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 76 6f 6b  statements invok
8850: 65 20 74 68 69 73 20 6f 70 63 6f 64 65 20 74 6f  e this opcode to
8860: 20 72 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62   return the numb
8870: 65 72 20 6f 66 20 72 6f 77 73 20 0a 20 20 2a 2a  er of rows .  **
8880: 20 6d 6f 64 69 66 69 65 64 20 74 6f 20 74 68 65   modified to the
8890: 20 75 73 65 72 2e 20 54 68 69 73 20 69 73 20 74   user. This is t
88a0: 68 65 20 6f 6e 6c 79 20 77 61 79 20 74 68 61 74  he only way that
88b0: 20 61 20 56 4d 20 74 68 61 74 0a 20 20 2a 2a 20   a VM that.  ** 
88c0: 6f 70 65 6e 73 20 61 20 73 74 61 74 65 6d 65 6e  opens a statemen
88d0: 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 61  t transaction ma
88e0: 79 20 69 6e 76 6f 6b 65 20 74 68 69 73 20 6f 70  y invoke this op
88f0: 63 6f 64 65 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  code..  **.  ** 
8900: 49 6e 20 63 61 73 65 20 74 68 69 73 20 69 73 20  In case this is 
8910: 73 75 63 68 20 61 20 73 74 61 74 65 6d 65 6e 74  such a statement
8920: 2c 20 63 6c 6f 73 65 20 61 6e 79 20 73 74 61 74  , close any stat
8930: 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  ement transactio
8940: 6e 0a 20 20 2a 2a 20 6f 70 65 6e 65 64 20 62 79  n.  ** opened by
8950: 20 74 68 69 73 20 56 4d 20 62 65 66 6f 72 65 20   this VM before 
8960: 72 65 74 75 72 6e 69 6e 67 20 63 6f 6e 74 72 6f  returning contro
8970: 6c 20 74 6f 20 74 68 65 20 75 73 65 72 2e 20 54  l to the user. T
8980: 68 69 73 20 69 73 20 74 6f 0a 20 20 2a 2a 20 65  his is to.  ** e
8990: 6e 73 75 72 65 20 74 68 61 74 20 73 74 61 74 65  nsure that state
89a0: 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74 69 6f 6e  ment-transaction
89b0: 73 20 61 72 65 20 61 6c 77 61 79 73 20 6e 65 73  s are always nes
89c0: 74 65 64 2c 20 6e 6f 74 20 6f 76 65 72 6c 61 70  ted, not overlap
89d0: 70 69 6e 67 2e 0a 20 20 2a 2a 20 49 66 20 74 68  ping..  ** If th
89e0: 65 20 6f 70 65 6e 20 73 74 61 74 65 6d 65 6e 74  e open statement
89f0: 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20  -transaction is 
8a00: 6e 6f 74 20 63 6c 6f 73 65 64 20 68 65 72 65 2c  not closed here,
8a10: 20 74 68 65 6e 20 74 68 65 20 75 73 65 72 0a 20   then the user. 
8a20: 20 2a 2a 20 6d 61 79 20 73 74 65 70 20 61 6e 6f   ** may step ano
8a30: 74 68 65 72 20 56 4d 20 74 68 61 74 20 6f 70 65  ther VM that ope
8a40: 6e 73 20 69 74 73 20 6f 77 6e 20 73 74 61 74 65  ns its own state
8a50: 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  ment transaction
8a60: 2e 20 54 68 69 73 0a 20 20 2a 2a 20 6d 61 79 20  . This.  ** may 
8a70: 6c 65 61 64 20 74 6f 20 6f 76 65 72 6c 61 70 70  lead to overlapp
8a80: 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 74 72  ing statement tr
8a90: 61 6e 73 61 63 74 69 6f 6e 73 2e 0a 20 20 2a 2a  ansactions..  **
8aa0: 0a 20 20 2a 2a 20 54 68 65 20 73 74 61 74 65 6d  .  ** The statem
8ab0: 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ent transaction 
8ac0: 69 73 20 6e 65 76 65 72 20 61 20 74 6f 70 2d 6c  is never a top-l
8ad0: 65 76 65 6c 20 74 72 61 6e 73 61 63 74 69 6f 6e  evel transaction
8ae0: 2e 20 20 48 65 6e 63 65 0a 20 20 2a 2a 20 74 68  .  Hence.  ** th
8af0: 65 20 52 45 4c 45 41 53 45 20 63 61 6c 6c 20 62  e RELEASE call b
8b00: 65 6c 6f 77 20 63 61 6e 20 6e 65 76 65 72 20 66  elow can never f
8b10: 61 69 6c 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65  ail..  */.  asse
8b20: 72 74 28 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e  rt( p->iStatemen
8b30: 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 66 6c 61 67  t==0 || db->flag
8b40: 73 26 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f  s&SQLITE_CountRo
8b50: 77 73 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c  ws );.  rc = sql
8b60: 69 74 65 33 56 64 62 65 43 6c 6f 73 65 53 74 61  ite3VdbeCloseSta
8b70: 74 65 6d 65 6e 74 28 70 2c 20 53 41 56 45 50 4f  tement(p, SAVEPO
8b80: 49 4e 54 5f 52 45 4c 45 41 53 45 29 3b 0a 20 20  INT_RELEASE);.  
8b90: 69 66 28 20 4e 45 56 45 52 28 72 63 21 3d 53 51  if( NEVER(rc!=SQ
8ba0: 4c 49 54 45 5f 4f 4b 29 20 29 7b 0a 20 20 20 20  LITE_OK) ){.    
8bb0: 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  break;.  }..  /*
8bc0: 20 49 6e 76 61 6c 69 64 61 74 65 20 61 6c 6c 20   Invalidate all 
8bd0: 65 70 68 65 6d 65 72 61 6c 20 63 75 72 73 6f 72  ephemeral cursor
8be0: 20 72 6f 77 20 63 61 63 68 65 73 20 2a 2f 0a 20   row caches */. 
8bf0: 20 70 2d 3e 63 61 63 68 65 43 74 72 20 3d 20 28   p->cacheCtr = (
8c00: 70 2d 3e 63 61 63 68 65 43 74 72 20 2b 20 32 29  p->cacheCtr + 2)
8c10: 7c 31 3b 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20 73  |1;..  /* Make s
8c20: 75 72 65 20 74 68 65 20 72 65 73 75 6c 74 73 20  ure the results 
8c30: 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 72  of the current r
8c40: 6f 77 20 61 72 65 20 5c 30 30 30 20 74 65 72 6d  ow are \000 term
8c50: 69 6e 61 74 65 64 0a 20 20 2a 2a 20 61 6e 64 20  inated.  ** and 
8c60: 68 61 76 65 20 61 6e 20 61 73 73 69 67 6e 65 64  have an assigned
8c70: 20 74 79 70 65 2e 20 20 54 68 65 20 72 65 73 75   type.  The resu
8c80: 6c 74 73 20 61 72 65 20 64 65 2d 65 70 68 65 6d  lts are de-ephem
8c90: 65 72 61 6c 69 7a 65 64 20 61 73 0a 20 20 2a 2a  eralized as.  **
8ca0: 20 61 73 20 73 69 64 65 20 65 66 66 65 63 74 2e   as side effect.
8cb0: 0a 20 20 2a 2f 0a 20 20 70 4d 65 6d 20 3d 20 70  .  */.  pMem = p
8cc0: 2d 3e 70 52 65 73 75 6c 74 53 65 74 20 3d 20 26  ->pResultSet = &
8cd0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
8ce0: 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70 4f 70 2d   for(i=0; i<pOp-
8cf0: 3e 70 32 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 61  >p2; i++){.    a
8d00: 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
8d10: 64 28 26 70 4d 65 6d 5b 69 5d 29 20 29 3b 0a 20  d(&pMem[i]) );. 
8d20: 20 20 20 44 65 65 70 68 65 6d 65 72 61 6c 69 7a     Deephemeraliz
8d30: 65 28 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 20  e(&pMem[i]);.   
8d40: 20 61 73 73 65 72 74 28 20 28 70 4d 65 6d 5b 69   assert( (pMem[i
8d50: 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 45 70  ].flags & MEM_Ep
8d60: 68 65 6d 29 3d 3d 30 0a 20 20 20 20 20 20 20 20  hem)==0.        
8d70: 20 20 20 20 7c 7c 20 28 70 4d 65 6d 5b 69 5d 2e      || (pMem[i].
8d80: 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53 74 72  flags & (MEM_Str
8d90: 7c 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 29  |MEM_Blob))==0 )
8da0: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
8db0: 65 4d 65 6d 4e 75 6c 54 65 72 6d 69 6e 61 74 65  eMemNulTerminate
8dc0: 28 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 20 20  (&pMem[i]);.    
8dd0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74  sqlite3VdbeMemSt
8de0: 6f 72 65 54 79 70 65 28 26 70 4d 65 6d 5b 69 5d  oreType(&pMem[i]
8df0: 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f  );.    REGISTER_
8e00: 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2b 69 2c  TRACE(pOp->p1+i,
8e10: 20 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 7d 0a   &pMem[i]);.  }.
8e20: 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63    if( db->malloc
8e30: 46 61 69 6c 65 64 20 29 20 67 6f 74 6f 20 6e 6f  Failed ) goto no
8e40: 5f 6d 65 6d 3b 0a 0a 20 20 2f 2a 20 52 65 74 75  _mem;..  /* Retu
8e50: 72 6e 20 53 51 4c 49 54 45 5f 52 4f 57 0a 20 20  rn SQLITE_ROW.  
8e60: 2a 2f 0a 20 20 70 2d 3e 70 63 20 3d 20 70 63 20  */.  p->pc = pc 
8e70: 2b 20 31 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49  + 1;.  rc = SQLI
8e80: 54 45 5f 52 4f 57 3b 0a 20 20 67 6f 74 6f 20 76  TE_ROW;.  goto v
8e90: 64 62 65 5f 72 65 74 75 72 6e 3b 0a 7d 0a 0a 2f  dbe_return;.}../
8ea0: 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6e 63 61 74  * Opcode: Concat
8eb0: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
8ec0: 0a 2a 2a 20 41 64 64 20 74 68 65 20 74 65 78 74  .** Add the text
8ed0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
8ee0: 6f 6e 74 6f 20 74 68 65 20 65 6e 64 20 6f 66 20  onto the end of 
8ef0: 74 68 65 20 74 65 78 74 20 69 6e 0a 2a 2a 20 72  the text in.** r
8f00: 65 67 69 73 74 65 72 20 50 32 20 61 6e 64 20 73  egister P2 and s
8f10: 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20  tore the result 
8f20: 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  in register P3..
8f30: 2a 2a 20 49 66 20 65 69 74 68 65 72 20 74 68 65  ** If either the
8f40: 20 50 31 20 6f 72 20 50 32 20 74 65 78 74 20 61   P1 or P2 text a
8f50: 72 65 20 4e 55 4c 4c 20 74 68 65 6e 20 73 74 6f  re NULL then sto
8f60: 72 65 20 4e 55 4c 4c 20 69 6e 20 50 33 2e 0a 2a  re NULL in P3..*
8f70: 2a 0a 2a 2a 20 20 20 50 33 20 3d 20 50 32 20 7c  *.**   P3 = P2 |
8f80: 7c 20 50 31 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73  | P1.**.** It is
8f90: 20 69 6c 6c 65 67 61 6c 20 66 6f 72 20 50 31 20   illegal for P1 
8fa0: 61 6e 64 20 50 33 20 74 6f 20 62 65 20 74 68 65  and P3 to be the
8fb0: 20 73 61 6d 65 20 72 65 67 69 73 74 65 72 2e 20   same register. 
8fc0: 53 6f 6d 65 74 69 6d 65 73 2c 0a 2a 2a 20 69 66  Sometimes,.** if
8fd0: 20 50 33 20 69 73 20 74 68 65 20 73 61 6d 65 20   P3 is the same 
8fe0: 72 65 67 69 73 74 65 72 20 61 73 20 50 32 2c 20  register as P2, 
8ff0: 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  the implementati
9000: 6f 6e 20 69 73 20 61 62 6c 65 0a 2a 2a 20 74 6f  on is able.** to
9010: 20 61 76 6f 69 64 20 61 20 6d 65 6d 63 70 79 28   avoid a memcpy(
9020: 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f  )..*/.case OP_Co
9030: 6e 63 61 74 3a 20 7b 20 20 20 20 20 20 20 20 20  ncat: {         
9040: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
9050: 43 4f 4e 43 41 54 2c 20 69 6e 31 2c 20 69 6e 32  CONCAT, in1, in2
9060: 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69 36 34 20  , out3 */.  i64 
9070: 6e 42 79 74 65 3b 0a 0a 20 20 70 49 6e 31 20 3d  nByte;..  pIn1 =
9080: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
9090: 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b  .  pIn2 = &aMem[
90a0: 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70 4f 75 74  pOp->p2];.  pOut
90b0: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
90c0: 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e  ];.  assert( pIn
90d0: 31 21 3d 70 4f 75 74 20 29 3b 0a 20 20 69 66 28  1!=pOut );.  if(
90e0: 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20   (pIn1->flags | 
90f0: 70 49 6e 32 2d 3e 66 6c 61 67 73 29 20 26 20 4d  pIn2->flags) & M
9100: 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 73  EM_Null ){.    s
9110: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
9120: 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 20 20  Null(pOut);.    
9130: 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 69 66 28  break;.  }.  if(
9140: 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 31   ExpandBlob(pIn1
9150: 29 20 7c 7c 20 45 78 70 61 6e 64 42 6c 6f 62 28  ) || ExpandBlob(
9160: 70 49 6e 32 29 20 29 20 67 6f 74 6f 20 6e 6f 5f  pIn2) ) goto no_
9170: 6d 65 6d 3b 0a 20 20 53 74 72 69 6e 67 69 66 79  mem;.  Stringify
9180: 28 70 49 6e 31 2c 20 65 6e 63 6f 64 69 6e 67 29  (pIn1, encoding)
9190: 3b 0a 20 20 53 74 72 69 6e 67 69 66 79 28 70 49  ;.  Stringify(pI
91a0: 6e 32 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  n2, encoding);. 
91b0: 20 6e 42 79 74 65 20 3d 20 70 49 6e 31 2d 3e 6e   nByte = pIn1->n
91c0: 20 2b 20 70 49 6e 32 2d 3e 6e 3b 0a 20 20 69 66   + pIn2->n;.  if
91d0: 28 20 6e 42 79 74 65 3e 64 62 2d 3e 61 4c 69 6d  ( nByte>db->aLim
91e0: 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f  it[SQLITE_LIMIT_
91f0: 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 67  LENGTH] ){.    g
9200: 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d  oto too_big;.  }
9210: 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61  .  MemSetTypeFla
9220: 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 53 74 72 29  g(pOut, MEM_Str)
9230: 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 56  ;.  if( sqlite3V
9240: 64 62 65 4d 65 6d 47 72 6f 77 28 70 4f 75 74 2c  dbeMemGrow(pOut,
9250: 20 28 69 6e 74 29 6e 42 79 74 65 2b 32 2c 20 70   (int)nByte+2, p
9260: 4f 75 74 3d 3d 70 49 6e 32 29 20 29 7b 0a 20 20  Out==pIn2) ){.  
9270: 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20    goto no_mem;. 
9280: 20 7d 0a 20 20 69 66 28 20 70 4f 75 74 21 3d 70   }.  if( pOut!=p
9290: 49 6e 32 20 29 7b 0a 20 20 20 20 6d 65 6d 63 70  In2 ){.    memcp
92a0: 79 28 70 4f 75 74 2d 3e 7a 2c 20 70 49 6e 32 2d  y(pOut->z, pIn2-
92b0: 3e 7a 2c 20 70 49 6e 32 2d 3e 6e 29 3b 0a 20 20  >z, pIn2->n);.  
92c0: 7d 0a 20 20 6d 65 6d 63 70 79 28 26 70 4f 75 74  }.  memcpy(&pOut
92d0: 2d 3e 7a 5b 70 49 6e 32 2d 3e 6e 5d 2c 20 70 49  ->z[pIn2->n], pI
92e0: 6e 31 2d 3e 7a 2c 20 70 49 6e 31 2d 3e 6e 29 3b  n1->z, pIn1->n);
92f0: 0a 20 20 70 4f 75 74 2d 3e 7a 5b 6e 42 79 74 65  .  pOut->z[nByte
9300: 5d 20 3d 20 30 3b 0a 20 20 70 4f 75 74 2d 3e 7a  ] = 0;.  pOut->z
9310: 5b 6e 42 79 74 65 2b 31 5d 20 3d 20 30 3b 0a 20  [nByte+1] = 0;. 
9320: 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20   pOut->flags |= 
9330: 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f 75 74  MEM_Term;.  pOut
9340: 2d 3e 6e 20 3d 20 28 69 6e 74 29 6e 42 79 74 65  ->n = (int)nByte
9350: 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20  ;.  pOut->enc = 
9360: 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44 41  encoding;.  UPDA
9370: 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
9380: 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  pOut);.  break;.
9390: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 64  }../* Opcode: Ad
93a0: 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  d P1 P2 P3 * *.*
93b0: 2a 0a 2a 2a 20 41 64 64 20 74 68 65 20 76 61 6c  *.** Add the val
93c0: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
93d0: 31 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 69  1 to the value i
93e0: 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a  n register P2.**
93f0: 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72   and store the r
9400: 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65  esult in registe
9410: 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68  r P3..** If eith
9420: 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c  er input is NULL
9430: 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  , the result is 
9440: 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  NULL..*/./* Opco
9450: 64 65 3a 20 4d 75 6c 74 69 70 6c 79 20 50 31 20  de: Multiply P1 
9460: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 0a  P2 P3 * *.**.**.
9470: 2a 2a 20 4d 75 6c 74 69 70 6c 79 20 74 68 65 20  ** Multiply the 
9480: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
9490: 72 20 50 31 20 62 79 20 74 68 65 20 76 61 6c 75  r P1 by the valu
94a0: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  e in register P2
94b0: 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20 74 68  .** and store th
94c0: 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69  e result in regi
94d0: 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65  ster P3..** If e
94e0: 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e  ither input is N
94f0: 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20  ULL, the result 
9500: 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f  is NULL..*/./* O
9510: 70 63 6f 64 65 3a 20 53 75 62 74 72 61 63 74 20  pcode: Subtract 
9520: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
9530: 2a 2a 20 53 75 62 74 72 61 63 74 20 74 68 65 20  ** Subtract the 
9540: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
9550: 72 20 50 31 20 66 72 6f 6d 20 74 68 65 20 76 61  r P1 from the va
9560: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
9570: 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20  P2.** and store 
9580: 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65  the result in re
9590: 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66  gister P3..** If
95a0: 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73   either input is
95b0: 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c   NULL, the resul
95c0: 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a  t is NULL..*/./*
95d0: 20 4f 70 63 6f 64 65 3a 20 44 69 76 69 64 65 20   Opcode: Divide 
95e0: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
95f0: 2a 2a 20 44 69 76 69 64 65 20 74 68 65 20 76 61  ** Divide the va
9600: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
9610: 50 31 20 62 79 20 74 68 65 20 76 61 6c 75 65 20  P1 by the value 
9620: 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a  in register P2.*
9630: 2a 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20  * and store the 
9640: 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74  result in regist
9650: 65 72 20 50 33 20 28 50 33 3d 50 32 2f 50 31 29  er P3 (P3=P2/P1)
9660: 2e 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 69  . If the value i
9670: 6e 20 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50  n .** register P
9680: 31 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 6e 20  1 is zero, then 
9690: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
96a0: 4c 4c 2e 20 49 66 20 65 69 74 68 65 72 20 69 6e  LL. If either in
96b0: 70 75 74 20 69 73 20 0a 2a 2a 20 4e 55 4c 4c 2c  put is .** NULL,
96c0: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e   the result is N
96d0: 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ULL..*/./* Opcod
96e0: 65 3a 20 52 65 6d 61 69 6e 64 65 72 20 50 31 20  e: Remainder P1 
96f0: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
9700: 43 6f 6d 70 75 74 65 20 74 68 65 20 72 65 6d 61  Compute the rema
9710: 69 6e 64 65 72 20 61 66 74 65 72 20 69 6e 74 65  inder after inte
9720: 67 65 72 20 64 69 76 69 73 69 6f 6e 20 6f 66 20  ger division of 
9730: 74 68 65 20 76 61 6c 75 65 20 69 6e 0a 2a 2a 20  the value in.** 
9740: 72 65 67 69 73 74 65 72 20 50 31 20 62 79 20 74  register P1 by t
9750: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
9760: 73 74 65 72 20 50 32 20 61 6e 64 20 73 74 6f 72  ster P2 and stor
9770: 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20  e the result in 
9780: 50 33 2e 20 0a 2a 2a 20 49 66 20 74 68 65 20 76  P3. .** If the v
9790: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
97a0: 20 50 32 20 69 73 20 7a 65 72 6f 20 74 68 65 20   P2 is zero the 
97b0: 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a  result is NULL..
97c0: 2a 2a 20 49 66 20 65 69 74 68 65 72 20 6f 70 65  ** If either ope
97d0: 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2c 20 74 68  rand is NULL, th
97e0: 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  e result is NULL
97f0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 64 64  ..*/.case OP_Add
9800: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :               
9810: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
9820: 4b 5f 50 4c 55 53 2c 20 69 6e 31 2c 20 69 6e 32  K_PLUS, in1, in2
9830: 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f  , out3 */.case O
9840: 50 5f 53 75 62 74 72 61 63 74 3a 20 20 20 20 20  P_Subtract:     
9850: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
9860: 20 61 73 20 54 4b 5f 4d 49 4e 55 53 2c 20 69 6e   as TK_MINUS, in
9870: 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
9880: 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79  case OP_Multiply
9890: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  :              /
98a0: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 53 54 41  * same as TK_STA
98b0: 52 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74  R, in1, in2, out
98c0: 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 69 76  3 */.case OP_Div
98d0: 69 64 65 3a 20 20 20 20 20 20 20 20 20 20 20 20  ide:            
98e0: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
98f0: 4b 5f 53 4c 41 53 48 2c 20 69 6e 31 2c 20 69 6e  K_SLASH, in1, in
9900: 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20  2, out3 */.case 
9910: 4f 50 5f 52 65 6d 61 69 6e 64 65 72 3a 20 7b 20  OP_Remainder: { 
9920: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
9930: 65 20 61 73 20 54 4b 5f 52 45 4d 2c 20 69 6e 31  e as TK_REM, in1
9940: 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20  , in2, out3 */. 
9950: 20 69 6e 74 20 66 6c 61 67 73 3b 20 20 20 20 20   int flags;     
9960: 20 2f 2a 20 43 6f 6d 62 69 6e 65 64 20 4d 45 4d   /* Combined MEM
9970: 5f 2a 20 66 6c 61 67 73 20 66 72 6f 6d 20 62 6f  _* flags from bo
9980: 74 68 20 69 6e 70 75 74 73 20 2a 2f 0a 20 20 69  th inputs */.  i
9990: 36 34 20 69 41 3b 20 20 20 20 20 20 20 20 20 2f  64 iA;         /
99a0: 2a 20 49 6e 74 65 67 65 72 20 76 61 6c 75 65 20  * Integer value 
99b0: 6f 66 20 6c 65 66 74 20 6f 70 65 72 61 6e 64 20  of left operand 
99c0: 2a 2f 0a 20 20 69 36 34 20 69 42 3b 20 20 20 20  */.  i64 iB;    
99d0: 20 20 20 20 20 2f 2a 20 49 6e 74 65 67 65 72 20       /* Integer 
99e0: 76 61 6c 75 65 20 6f 66 20 72 69 67 68 74 20 6f  value of right o
99f0: 70 65 72 61 6e 64 20 2a 2f 0a 20 20 64 6f 75 62  perand */.  doub
9a00: 6c 65 20 72 41 3b 20 20 20 20 20 20 2f 2a 20 52  le rA;      /* R
9a10: 65 61 6c 20 76 61 6c 75 65 20 6f 66 20 6c 65 66  eal value of lef
9a20: 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 64  t operand */.  d
9a30: 6f 75 62 6c 65 20 72 42 3b 20 20 20 20 20 20 2f  ouble rB;      /
9a40: 2a 20 52 65 61 6c 20 76 61 6c 75 65 20 6f 66 20  * Real value of 
9a50: 72 69 67 68 74 20 6f 70 65 72 61 6e 64 20 2a 2f  right operand */
9a60: 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ..  pIn1 = &aMem
9a70: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 70 70  [pOp->p1];.  app
9a80: 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74  lyNumericAffinit
9a90: 79 28 70 49 6e 31 29 3b 0a 20 20 70 49 6e 32 20  y(pIn1);.  pIn2 
9aa0: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
9ab0: 3b 0a 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63  ;.  applyNumeric
9ac0: 41 66 66 69 6e 69 74 79 28 70 49 6e 32 29 3b 0a  Affinity(pIn2);.
9ad0: 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
9ae0: 4f 70 2d 3e 70 33 5d 3b 0a 20 20 66 6c 61 67 73  Op->p3];.  flags
9af0: 20 3d 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c   = pIn1->flags |
9b00: 20 70 49 6e 32 2d 3e 66 6c 61 67 73 3b 0a 20 20   pIn2->flags;.  
9b10: 69 66 28 20 28 66 6c 61 67 73 20 26 20 4d 45 4d  if( (flags & MEM
9b20: 5f 4e 75 6c 6c 29 21 3d 30 20 29 20 67 6f 74 6f  _Null)!=0 ) goto
9b30: 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75   arithmetic_resu
9b40: 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 69 66  lt_is_null;.  if
9b50: 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
9b60: 20 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn2->flags & M
9b70: 45 4d 5f 49 6e 74 29 3d 3d 4d 45 4d 5f 49 6e 74  EM_Int)==MEM_Int
9b80: 20 29 7b 0a 20 20 20 20 69 41 20 3d 20 70 49 6e   ){.    iA = pIn
9b90: 31 2d 3e 75 2e 69 3b 0a 20 20 20 20 69 42 20 3d  1->u.i;.    iB =
9ba0: 20 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20 20 20   pIn2->u.i;.    
9bb0: 73 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63  switch( pOp->opc
9bc0: 6f 64 65 20 29 7b 0a 20 20 20 20 20 20 63 61 73  ode ){.      cas
9bd0: 65 20 4f 50 5f 41 64 64 3a 20 20 20 20 20 20 20  e OP_Add:       
9be0: 20 20 69 42 20 2b 3d 20 69 41 3b 20 20 20 20 20    iB += iA;     
9bf0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63    break;.      c
9c00: 61 73 65 20 4f 50 5f 53 75 62 74 72 61 63 74 3a  ase OP_Subtract:
9c10: 20 20 20 20 69 42 20 2d 3d 20 69 41 3b 20 20 20      iB -= iA;   
9c20: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
9c30: 20 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70 6c   case OP_Multipl
9c40: 79 3a 20 20 20 20 69 42 20 2a 3d 20 69 41 3b 20  y:    iB *= iA; 
9c50: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
9c60: 20 20 20 63 61 73 65 20 4f 50 5f 44 69 76 69 64     case OP_Divid
9c70: 65 3a 20 7b 0a 20 20 20 20 20 20 20 20 69 66 28  e: {.        if(
9c80: 20 69 41 3d 3d 30 20 29 20 67 6f 74 6f 20 61 72   iA==0 ) goto ar
9c90: 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f  ithmetic_result_
9ca0: 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20  is_null;.       
9cb0: 20 2f 2a 20 44 69 76 69 64 69 6e 67 20 74 68 65   /* Dividing the
9cc0: 20 6c 61 72 67 65 73 74 20 70 6f 73 73 69 62 6c   largest possibl
9cd0: 65 20 6e 65 67 61 74 69 76 65 20 36 34 2d 62 69  e negative 64-bi
9ce0: 74 20 69 6e 74 65 67 65 72 20 28 31 3c 3c 36 33  t integer (1<<63
9cf0: 29 20 62 79 20 0a 20 20 20 20 20 20 20 20 2a 2a  ) by .        **
9d00: 20 2d 31 20 72 65 74 75 72 6e 73 20 61 6e 20 69   -1 returns an i
9d10: 6e 74 65 67 65 72 20 74 6f 6f 20 6c 61 72 67 65  nteger too large
9d20: 20 74 6f 20 73 74 6f 72 65 20 69 6e 20 61 20 36   to store in a 6
9d30: 34 2d 62 69 74 20 64 61 74 61 2d 74 79 70 65 2e  4-bit data-type.
9d40: 20 4f 6e 0a 20 20 20 20 20 20 20 20 2a 2a 20 73   On.        ** s
9d50: 6f 6d 65 20 61 72 63 68 69 74 65 63 74 75 72 65  ome architecture
9d60: 73 2c 20 74 68 65 20 76 61 6c 75 65 20 6f 76 65  s, the value ove
9d70: 72 66 6c 6f 77 73 20 74 6f 20 28 31 3c 3c 36 33  rflows to (1<<63
9d80: 29 2e 20 4f 6e 20 6f 74 68 65 72 73 2c 0a 20 20  ). On others,.  
9d90: 20 20 20 20 20 20 2a 2a 20 61 20 53 49 47 46 50        ** a SIGFP
9da0: 45 20 69 73 20 69 73 73 75 65 64 2e 20 54 68 65  E is issued. The
9db0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 61 74 65   following state
9dc0: 6d 65 6e 74 20 6e 6f 72 6d 61 6c 69 7a 65 73 20  ment normalizes 
9dd0: 74 68 69 73 0a 20 20 20 20 20 20 20 20 2a 2a 20  this.        ** 
9de0: 62 65 68 61 76 69 6f 72 20 73 6f 20 74 68 61 74  behavior so that
9df0: 20 61 6c 6c 20 61 72 63 68 69 74 65 63 74 75 72   all architectur
9e00: 65 73 20 62 65 68 61 76 65 20 61 73 20 69 66 20  es behave as if 
9e10: 69 6e 74 65 67 65 72 20 0a 20 20 20 20 20 20 20  integer .       
9e20: 20 2a 2a 20 6f 76 65 72 66 6c 6f 77 20 6f 63 63   ** overflow occ
9e30: 75 72 72 65 64 2e 0a 20 20 20 20 20 20 20 20 2a  urred..        *
9e40: 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 41  /.        if( iA
9e50: 3d 3d 2d 31 20 26 26 20 69 42 3d 3d 53 4d 41 4c  ==-1 && iB==SMAL
9e60: 4c 45 53 54 5f 49 4e 54 36 34 20 29 20 69 41 20  LEST_INT64 ) iA 
9e70: 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 69 42 20  = 1;.        iB 
9e80: 2f 3d 20 69 41 3b 0a 20 20 20 20 20 20 20 20 62  /= iA;.        b
9e90: 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20  reak;.      }.  
9ea0: 20 20 20 20 64 65 66 61 75 6c 74 3a 20 7b 0a 20      default: {. 
9eb0: 20 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d 30         if( iA==0
9ec0: 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74   ) goto arithmet
9ed0: 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c  ic_result_is_nul
9ee0: 6c 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 69  l;.        if( i
9ef0: 41 3d 3d 2d 31 20 29 20 69 41 20 3d 20 31 3b 0a  A==-1 ) iA = 1;.
9f00: 20 20 20 20 20 20 20 20 69 42 20 25 3d 20 69 41          iB %= iA
9f10: 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b  ;.        break;
9f20: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
9f30: 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69     pOut->u.i = i
9f40: 42 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70  B;.    MemSetTyp
9f50: 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f  eFlag(pOut, MEM_
9f60: 49 6e 74 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  Int);.  }else{. 
9f70: 20 20 20 72 41 20 3d 20 73 71 6c 69 74 65 33 56     rA = sqlite3V
9f80: 64 62 65 52 65 61 6c 56 61 6c 75 65 28 70 49 6e  dbeRealValue(pIn
9f90: 31 29 3b 0a 20 20 20 20 72 42 20 3d 20 73 71 6c  1);.    rB = sql
9fa0: 69 74 65 33 56 64 62 65 52 65 61 6c 56 61 6c 75  ite3VdbeRealValu
9fb0: 65 28 70 49 6e 32 29 3b 0a 20 20 20 20 73 77 69  e(pIn2);.    swi
9fc0: 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  tch( pOp->opcode
9fd0: 20 29 7b 0a 20 20 20 20 20 20 63 61 73 65 20 4f   ){.      case O
9fe0: 50 5f 41 64 64 3a 20 20 20 20 20 20 20 20 20 72  P_Add:         r
9ff0: 42 20 2b 3d 20 72 41 3b 20 20 20 20 20 20 20 62  B += rA;       b
a000: 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65  reak;.      case
a010: 20 4f 50 5f 53 75 62 74 72 61 63 74 3a 20 20 20   OP_Subtract:   
a020: 20 72 42 20 2d 3d 20 72 41 3b 20 20 20 20 20 20   rB -= rA;      
a030: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61   break;.      ca
a040: 73 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a 20  se OP_Multiply: 
a050: 20 20 20 72 42 20 2a 3d 20 72 41 3b 20 20 20 20     rB *= rA;    
a060: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
a070: 63 61 73 65 20 4f 50 5f 44 69 76 69 64 65 3a 20  case OP_Divide: 
a080: 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 28 64 6f  {.        /* (do
a090: 75 62 6c 65 29 30 20 49 6e 20 63 61 73 65 20 6f  uble)0 In case o
a0a0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c  f SQLITE_OMIT_FL
a0b0: 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 2e 2e 2e 20  OATING_POINT... 
a0c0: 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20 72  */.        if( r
a0d0: 41 3d 3d 28 64 6f 75 62 6c 65 29 30 20 29 20 67  A==(double)0 ) g
a0e0: 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72  oto arithmetic_r
a0f0: 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20  esult_is_null;. 
a100: 20 20 20 20 20 20 20 72 42 20 2f 3d 20 72 41 3b         rB /= rA;
a110: 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  .        break;.
a120: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 64 65        }.      de
a130: 66 61 75 6c 74 3a 20 7b 0a 20 20 20 20 20 20 20  fault: {.       
a140: 20 69 41 20 3d 20 28 69 36 34 29 72 41 3b 0a 20   iA = (i64)rA;. 
a150: 20 20 20 20 20 20 20 69 42 20 3d 20 28 69 36 34         iB = (i64
a160: 29 72 42 3b 0a 20 20 20 20 20 20 20 20 69 66 28  )rB;.        if(
a170: 20 69 41 3d 3d 30 20 29 20 67 6f 74 6f 20 61 72   iA==0 ) goto ar
a180: 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f  ithmetic_result_
a190: 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20  is_null;.       
a1a0: 20 69 66 28 20 69 41 3d 3d 2d 31 20 29 20 69 41   if( iA==-1 ) iA
a1b0: 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 72 42   = 1;.        rB
a1c0: 20 3d 20 28 64 6f 75 62 6c 65 29 28 69 42 20 25   = (double)(iB %
a1d0: 20 69 41 29 3b 0a 20 20 20 20 20 20 20 20 62 72   iA);.        br
a1e0: 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  eak;.      }.   
a1f0: 20 7d 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45   }.#ifdef SQLITE
a200: 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50  _OMIT_FLOATING_P
a210: 4f 49 4e 54 0a 20 20 20 20 70 4f 75 74 2d 3e 75  OINT.    pOut->u
a220: 2e 69 20 3d 20 72 42 3b 0a 20 20 20 20 4d 65 6d  .i = rB;.    Mem
a230: 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74  SetTypeFlag(pOut
a240: 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 23 65 6c 73  , MEM_Int);.#els
a250: 65 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65  e.    if( sqlite
a260: 33 49 73 4e 61 4e 28 72 42 29 20 29 7b 0a 20 20  3IsNaN(rB) ){.  
a270: 20 20 20 20 67 6f 74 6f 20 61 72 69 74 68 6d 65      goto arithme
a280: 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75  tic_result_is_nu
a290: 6c 6c 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f  ll;.    }.    pO
a2a0: 75 74 2d 3e 72 20 3d 20 72 42 3b 0a 20 20 20 20  ut->r = rB;.    
a2b0: 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
a2c0: 4f 75 74 2c 20 4d 45 4d 5f 52 65 61 6c 29 3b 0a  Out, MEM_Real);.
a2d0: 20 20 20 20 69 66 28 20 28 66 6c 61 67 73 20 26      if( (flags &
a2e0: 20 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30 20 29 7b   MEM_Real)==0 ){
a2f0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
a300: 62 65 49 6e 74 65 67 65 72 41 66 66 69 6e 69 74  beIntegerAffinit
a310: 79 28 70 4f 75 74 29 3b 0a 20 20 20 20 7d 0a 23  y(pOut);.    }.#
a320: 65 6e 64 69 66 0a 20 20 7d 0a 20 20 62 72 65 61  endif.  }.  brea
a330: 6b 3b 0a 0a 61 72 69 74 68 6d 65 74 69 63 5f 72  k;..arithmetic_r
a340: 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3a 0a 20  esult_is_null:. 
a350: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
a360: 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20  etNull(pOut);.  
a370: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
a380: 6f 64 65 3a 20 43 6f 6c 6c 53 65 71 20 2a 20 2a  ode: CollSeq * *
a390: 20 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20   P4.**.** P4 is 
a3a0: 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 43  a pointer to a C
a3b0: 6f 6c 6c 53 65 71 20 73 74 72 75 63 74 2e 20 49  ollSeq struct. I
a3c0: 66 20 74 68 65 20 6e 65 78 74 20 63 61 6c 6c 20  f the next call 
a3d0: 74 6f 20 61 20 75 73 65 72 20 66 75 6e 63 74 69  to a user functi
a3e0: 6f 6e 0a 2a 2a 20 6f 72 20 61 67 67 72 65 67 61  on.** or aggrega
a3f0: 74 65 20 63 61 6c 6c 73 20 73 71 6c 69 74 65 33  te calls sqlite3
a400: 47 65 74 46 75 6e 63 43 6f 6c 6c 53 65 71 28 29  GetFuncCollSeq()
a410: 2c 20 74 68 69 73 20 63 6f 6c 6c 61 74 69 6f 6e  , this collation
a420: 20 73 65 71 75 65 6e 63 65 20 77 69 6c 6c 0a 2a   sequence will.*
a430: 2a 20 62 65 20 72 65 74 75 72 6e 65 64 2e 20 54  * be returned. T
a440: 68 69 73 20 69 73 20 75 73 65 64 20 62 79 20 74  his is used by t
a450: 68 65 20 62 75 69 6c 74 2d 69 6e 20 6d 69 6e 28  he built-in min(
a460: 29 2c 20 6d 61 78 28 29 20 61 6e 64 20 6e 75 6c  ), max() and nul
a470: 6c 69 66 28 29 0a 2a 2a 20 66 75 6e 63 74 69 6f  lif().** functio
a480: 6e 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 69 6e  ns..**.** The in
a490: 74 65 72 66 61 63 65 20 75 73 65 64 20 62 79 20  terface used by 
a4a0: 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  the implementati
a4b0: 6f 6e 20 6f 66 20 74 68 65 20 61 66 6f 72 65 6d  on of the aforem
a4c0: 65 6e 74 69 6f 6e 65 64 20 66 75 6e 63 74 69 6f  entioned functio
a4d0: 6e 73 0a 2a 2a 20 74 6f 20 72 65 74 72 69 65 76  ns.** to retriev
a4e0: 65 20 74 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20  e the collation 
a4f0: 73 65 71 75 65 6e 63 65 20 73 65 74 20 62 79 20  sequence set by 
a500: 74 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 6e  this opcode is n
a510: 6f 74 20 61 76 61 69 6c 61 62 6c 65 0a 2a 2a 20  ot available.** 
a520: 70 75 62 6c 69 63 6c 79 2c 20 6f 6e 6c 79 20 74  publicly, only t
a530: 6f 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 73  o user functions
a540: 20 64 65 66 69 6e 65 64 20 69 6e 20 66 75 6e 63   defined in func
a550: 2e 63 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43  .c..*/.case OP_C
a560: 6f 6c 6c 53 65 71 3a 20 7b 0a 20 20 61 73 73 65  ollSeq: {.  asse
a570: 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
a580: 3d 50 34 5f 43 4f 4c 4c 53 45 51 20 29 3b 0a 20  =P4_COLLSEQ );. 
a590: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
a5a0: 63 6f 64 65 3a 20 46 75 6e 63 74 69 6f 6e 20 50  code: Function P
a5b0: 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
a5c0: 0a 2a 2a 20 49 6e 76 6f 6b 65 20 61 20 75 73 65  .** Invoke a use
a5d0: 72 20 66 75 6e 63 74 69 6f 6e 20 28 50 34 20 69  r function (P4 i
a5e0: 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  s a pointer to a
a5f0: 20 46 75 6e 63 74 69 6f 6e 20 73 74 72 75 63 74   Function struct
a600: 75 72 65 20 74 68 61 74 0a 2a 2a 20 64 65 66 69  ure that.** defi
a610: 6e 65 73 20 74 68 65 20 66 75 6e 63 74 69 6f 6e  nes the function
a620: 29 20 77 69 74 68 20 50 35 20 61 72 67 75 6d 65  ) with P5 argume
a630: 6e 74 73 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72  nts taken from r
a640: 65 67 69 73 74 65 72 20 50 32 20 61 6e 64 0a 2a  egister P2 and.*
a650: 2a 20 73 75 63 63 65 73 73 6f 72 73 2e 20 20 54  * successors.  T
a660: 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65  he result of the
a670: 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 73 74 6f   function is sto
a680: 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20  red in register 
a690: 50 33 2e 0a 2a 2a 20 52 65 67 69 73 74 65 72 20  P3..** Register 
a6a0: 50 33 20 6d 75 73 74 20 6e 6f 74 20 62 65 20 6f  P3 must not be o
a6b0: 6e 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69  ne of the functi
a6c0: 6f 6e 20 69 6e 70 75 74 73 2e 0a 2a 2a 0a 2a 2a  on inputs..**.**
a6d0: 20 50 31 20 69 73 20 61 20 33 32 2d 62 69 74 20   P1 is a 32-bit 
a6e0: 62 69 74 6d 61 73 6b 20 69 6e 64 69 63 61 74 69  bitmask indicati
a6f0: 6e 67 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  ng whether or no
a700: 74 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74 20  t each argument 
a710: 74 6f 20 74 68 65 20 0a 2a 2a 20 66 75 6e 63 74  to the .** funct
a720: 69 6f 6e 20 77 61 73 20 64 65 74 65 72 6d 69 6e  ion was determin
a730: 65 64 20 74 6f 20 62 65 20 63 6f 6e 73 74 61 6e  ed to be constan
a740: 74 20 61 74 20 63 6f 6d 70 69 6c 65 20 74 69 6d  t at compile tim
a750: 65 2e 20 49 66 20 74 68 65 20 66 69 72 73 74 0a  e. If the first.
a760: 2a 2a 20 61 72 67 75 6d 65 6e 74 20 77 61 73 20  ** argument was 
a770: 63 6f 6e 73 74 61 6e 74 20 74 68 65 6e 20 62 69  constant then bi
a780: 74 20 30 20 6f 66 20 50 31 20 69 73 20 73 65 74  t 0 of P1 is set
a790: 2e 20 54 68 69 73 20 69 73 20 75 73 65 64 20 74  . This is used t
a7a0: 6f 20 64 65 74 65 72 6d 69 6e 65 0a 2a 2a 20 77  o determine.** w
a7b0: 68 65 74 68 65 72 20 6d 65 74 61 20 64 61 74 61  hether meta data
a7c0: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
a7d0: 20 61 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e   a user function
a7e0: 20 61 72 67 75 6d 65 6e 74 20 75 73 69 6e 67 20   argument using 
a7f0: 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 73  the.** sqlite3_s
a800: 65 74 5f 61 75 78 64 61 74 61 28 29 20 41 50 49  et_auxdata() API
a810: 20 6d 61 79 20 62 65 20 73 61 66 65 6c 79 20 72   may be safely r
a820: 65 74 61 69 6e 65 64 20 75 6e 74 69 6c 20 74 68  etained until th
a830: 65 20 6e 65 78 74 0a 2a 2a 20 69 6e 76 6f 63 61  e next.** invoca
a840: 74 69 6f 6e 20 6f 66 20 74 68 69 73 20 6f 70 63  tion of this opc
a850: 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  ode..**.** See a
a860: 6c 73 6f 3a 20 41 67 67 53 74 65 70 20 61 6e 64  lso: AggStep and
a870: 20 41 67 67 46 69 6e 61 6c 0a 2a 2f 0a 63 61 73   AggFinal.*/.cas
a880: 65 20 4f 50 5f 46 75 6e 63 74 69 6f 6e 3a 20 7b  e OP_Function: {
a890: 0a 20 20 69 6e 74 20 69 3b 0a 20 20 4d 65 6d 20  .  int i;.  Mem 
a8a0: 2a 70 41 72 67 3b 0a 20 20 73 71 6c 69 74 65 33  *pArg;.  sqlite3
a8b0: 5f 63 6f 6e 74 65 78 74 20 63 74 78 3b 0a 20 20  _context ctx;.  
a8c0: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a  sqlite3_value **
a8d0: 61 70 56 61 6c 3b 0a 20 20 69 6e 74 20 6e 3b 0a  apVal;.  int n;.
a8e0: 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 35 3b 0a  .  n = pOp->p5;.
a8f0: 20 20 61 70 56 61 6c 20 3d 20 70 2d 3e 61 70 41    apVal = p->apA
a900: 72 67 3b 0a 20 20 61 73 73 65 72 74 28 20 61 70  rg;.  assert( ap
a910: 56 61 6c 20 7c 7c 20 6e 3d 3d 30 20 29 3b 0a 20  Val || n==0 );. 
a920: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
a930: 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 70  >0 && pOp->p3<=p
a940: 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 4f 75 74  ->nMem );.  pOut
a950: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
a960: 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43  ];.  memAboutToC
a970: 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a  hange(p, pOut);.
a980: 0a 20 20 61 73 73 65 72 74 28 20 6e 3d 3d 30 20  .  assert( n==0 
a990: 7c 7c 20 28 70 4f 70 2d 3e 70 32 3e 30 20 26 26  || (pOp->p2>0 &&
a9a0: 20 70 4f 70 2d 3e 70 32 2b 6e 3c 3d 70 2d 3e 6e   pOp->p2+n<=p->n
a9b0: 4d 65 6d 2b 31 29 20 29 3b 0a 20 20 61 73 73 65  Mem+1) );.  asse
a9c0: 72 74 28 20 70 4f 70 2d 3e 70 33 3c 70 4f 70 2d  rt( pOp->p3<pOp-
a9d0: 3e 70 32 20 7c 7c 20 70 4f 70 2d 3e 70 33 3e 3d  >p2 || pOp->p3>=
a9e0: 70 4f 70 2d 3e 70 32 2b 6e 20 29 3b 0a 20 20 70  pOp->p2+n );.  p
a9f0: 41 72 67 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Arg = &aMem[pOp-
aa00: 3e 70 32 5d 3b 0a 20 20 66 6f 72 28 69 3d 30 3b  >p2];.  for(i=0;
aa10: 20 69 3c 6e 3b 20 69 2b 2b 2c 20 70 41 72 67 2b   i<n; i++, pArg+
aa20: 2b 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20  +){.    assert( 
aa30: 6d 65 6d 49 73 56 61 6c 69 64 28 70 41 72 67 29  memIsValid(pArg)
aa40: 20 29 3b 0a 20 20 20 20 61 70 56 61 6c 5b 69 5d   );.    apVal[i]
aa50: 20 3d 20 70 41 72 67 3b 0a 20 20 20 20 44 65 65   = pArg;.    Dee
aa60: 70 68 65 6d 65 72 61 6c 69 7a 65 28 70 41 72 67  phemeralize(pArg
aa70: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
aa80: 62 65 4d 65 6d 53 74 6f 72 65 54 79 70 65 28 70  beMemStoreType(p
aa90: 41 72 67 29 3b 0a 20 20 20 20 52 45 47 49 53 54  Arg);.    REGIST
aaa0: 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32  ER_TRACE(pOp->p2
aab0: 2b 69 2c 20 70 41 72 67 29 3b 0a 20 20 7d 0a 0a  +i, pArg);.  }..
aac0: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
aad0: 34 74 79 70 65 3d 3d 50 34 5f 46 55 4e 43 44 45  4type==P4_FUNCDE
aae0: 46 20 7c 7c 20 70 4f 70 2d 3e 70 34 74 79 70 65  F || pOp->p4type
aaf0: 3d 3d 50 34 5f 56 44 42 45 46 55 4e 43 20 29 3b  ==P4_VDBEFUNC );
ab00: 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79  .  if( pOp->p4ty
ab10: 70 65 3d 3d 50 34 5f 46 55 4e 43 44 45 46 20 29  pe==P4_FUNCDEF )
ab20: 7b 0a 20 20 20 20 63 74 78 2e 70 46 75 6e 63 20  {.    ctx.pFunc 
ab30: 3d 20 70 4f 70 2d 3e 70 34 2e 70 46 75 6e 63 3b  = pOp->p4.pFunc;
ab40: 0a 20 20 20 20 63 74 78 2e 70 56 64 62 65 46 75  .    ctx.pVdbeFu
ab50: 6e 63 20 3d 20 30 3b 0a 20 20 7d 65 6c 73 65 7b  nc = 0;.  }else{
ab60: 0a 20 20 20 20 63 74 78 2e 70 56 64 62 65 46 75  .    ctx.pVdbeFu
ab70: 6e 63 20 3d 20 28 56 64 62 65 46 75 6e 63 2a 29  nc = (VdbeFunc*)
ab80: 70 4f 70 2d 3e 70 34 2e 70 56 64 62 65 46 75 6e  pOp->p4.pVdbeFun
ab90: 63 3b 0a 20 20 20 20 63 74 78 2e 70 46 75 6e 63  c;.    ctx.pFunc
aba0: 20 3d 20 63 74 78 2e 70 56 64 62 65 46 75 6e 63   = ctx.pVdbeFunc
abb0: 2d 3e 70 46 75 6e 63 3b 0a 20 20 7d 0a 0a 20 20  ->pFunc;.  }..  
abc0: 63 74 78 2e 73 2e 66 6c 61 67 73 20 3d 20 4d 45  ctx.s.flags = ME
abd0: 4d 5f 4e 75 6c 6c 3b 0a 20 20 63 74 78 2e 73 2e  M_Null;.  ctx.s.
abe0: 64 62 20 3d 20 64 62 3b 0a 20 20 63 74 78 2e 73  db = db;.  ctx.s
abf0: 2e 78 44 65 6c 20 3d 20 30 3b 0a 20 20 63 74 78  .xDel = 0;.  ctx
ac00: 2e 73 2e 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a  .s.zMalloc = 0;.
ac10: 0a 20 20 2f 2a 20 54 68 65 20 6f 75 74 70 75 74  .  /* The output
ac20: 20 63 65 6c 6c 20 6d 61 79 20 61 6c 72 65 61 64   cell may alread
ac30: 79 20 68 61 76 65 20 61 20 62 75 66 66 65 72 20  y have a buffer 
ac40: 61 6c 6c 6f 63 61 74 65 64 2e 20 4d 6f 76 65 0a  allocated. Move.
ac50: 20 20 2a 2a 20 74 68 65 20 70 6f 69 6e 74 65 72    ** the pointer
ac60: 20 74 6f 20 63 74 78 2e 73 20 73 6f 20 69 6e 20   to ctx.s so in 
ac70: 63 61 73 65 20 74 68 65 20 75 73 65 72 2d 66 75  case the user-fu
ac80: 6e 63 74 69 6f 6e 20 63 61 6e 20 75 73 65 0a 20  nction can use. 
ac90: 20 2a 2a 20 74 68 65 20 61 6c 72 65 61 64 79 20   ** the already 
aca0: 61 6c 6c 6f 63 61 74 65 64 20 62 75 66 66 65 72  allocated buffer
acb0: 20 69 6e 73 74 65 61 64 20 6f 66 20 61 6c 6c 6f   instead of allo
acc0: 63 61 74 69 6e 67 20 61 20 6e 65 77 20 6f 6e 65  cating a new one
acd0: 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  ..  */.  sqlite3
ace0: 56 64 62 65 4d 65 6d 4d 6f 76 65 28 26 63 74 78  VdbeMemMove(&ctx
acf0: 2e 73 2c 20 70 4f 75 74 29 3b 0a 20 20 4d 65 6d  .s, pOut);.  Mem
ad00: 53 65 74 54 79 70 65 46 6c 61 67 28 26 63 74 78  SetTypeFlag(&ctx
ad10: 2e 73 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 0a  .s, MEM_Null);..
ad20: 20 20 63 74 78 2e 69 73 45 72 72 6f 72 20 3d 20    ctx.isError = 
ad30: 30 3b 0a 20 20 69 66 28 20 63 74 78 2e 70 46 75  0;.  if( ctx.pFu
ad40: 6e 63 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49  nc->flags & SQLI
ad50: 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c  TE_FUNC_NEEDCOLL
ad60: 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
ad70: 70 4f 70 3e 61 4f 70 20 29 3b 0a 20 20 20 20 61  pOp>aOp );.    a
ad80: 73 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 70  ssert( pOp[-1].p
ad90: 34 74 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45  4type==P4_COLLSE
ada0: 51 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  Q );.    assert(
adb0: 20 70 4f 70 5b 2d 31 5d 2e 6f 70 63 6f 64 65 3d   pOp[-1].opcode=
adc0: 3d 4f 50 5f 43 6f 6c 6c 53 65 71 20 29 3b 0a 20  =OP_CollSeq );. 
add0: 20 20 20 63 74 78 2e 70 43 6f 6c 6c 20 3d 20 70     ctx.pColl = p
ade0: 4f 70 5b 2d 31 5d 2e 70 34 2e 70 43 6f 6c 6c 3b  Op[-1].p4.pColl;
adf0: 0a 20 20 7d 0a 20 20 28 2a 63 74 78 2e 70 46 75  .  }.  (*ctx.pFu
ae00: 6e 63 2d 3e 78 46 75 6e 63 29 28 26 63 74 78 2c  nc->xFunc)(&ctx,
ae10: 20 6e 2c 20 61 70 56 61 6c 29 3b 20 2f 2a 20 49   n, apVal); /* I
ae20: 4d 50 3a 20 52 2d 32 34 35 30 35 2d 32 33 32 33  MP: R-24505-2323
ae30: 30 20 2a 2f 0a 20 20 69 66 28 20 64 62 2d 3e 6d  0 */.  if( db->m
ae40: 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 7b 0a 20  allocFailed ){. 
ae50: 20 20 20 2f 2a 20 45 76 65 6e 20 74 68 6f 75 67     /* Even thoug
ae60: 68 20 61 20 6d 61 6c 6c 6f 63 28 29 20 68 61 73  h a malloc() has
ae70: 20 66 61 69 6c 65 64 2c 20 74 68 65 20 69 6d 70   failed, the imp
ae80: 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74  lementation of t
ae90: 68 65 0a 20 20 20 20 2a 2a 20 75 73 65 72 20 66  he.    ** user f
aea0: 75 6e 63 74 69 6f 6e 20 6d 61 79 20 68 61 76 65  unction may have
aeb0: 20 63 61 6c 6c 65 64 20 61 6e 20 73 71 6c 69 74   called an sqlit
aec0: 65 33 5f 72 65 73 75 6c 74 5f 58 58 58 28 29 20  e3_result_XXX() 
aed0: 66 75 6e 63 74 69 6f 6e 0a 20 20 20 20 2a 2a 20  function.    ** 
aee0: 74 6f 20 72 65 74 75 72 6e 20 61 20 76 61 6c 75  to return a valu
aef0: 65 2e 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  e. The following
af00: 20 63 61 6c 6c 20 72 65 6c 65 61 73 65 73 20 61   call releases a
af10: 6e 79 20 72 65 73 6f 75 72 63 65 73 0a 20 20 20  ny resources.   
af20: 20 2a 2a 20 61 73 73 6f 63 69 61 74 65 64 20 77   ** associated w
af30: 69 74 68 20 73 75 63 68 20 61 20 76 61 6c 75 65  ith such a value
af40: 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 73 71 6c  ..    */.    sql
af50: 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61  ite3VdbeMemRelea
af60: 73 65 28 26 63 74 78 2e 73 29 3b 0a 20 20 20 20  se(&ctx.s);.    
af70: 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d  goto no_mem;.  }
af80: 0a 0a 20 20 2f 2a 20 49 66 20 61 6e 79 20 61 75  ..  /* If any au
af90: 78 69 6c 69 61 72 79 20 64 61 74 61 20 66 75 6e  xiliary data fun
afa0: 63 74 69 6f 6e 73 20 68 61 76 65 20 62 65 65 6e  ctions have been
afb0: 20 63 61 6c 6c 65 64 20 62 79 20 74 68 69 73 20   called by this 
afc0: 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 2c 0a 20  user function,. 
afd0: 20 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c 79 20   ** immediately 
afe0: 63 61 6c 6c 20 74 68 65 20 64 65 73 74 72 75 63  call the destruc
aff0: 74 6f 72 20 66 6f 72 20 61 6e 79 20 6e 6f 6e 2d  tor for any non-
b000: 73 74 61 74 69 63 20 76 61 6c 75 65 73 2e 0a 20  static values.. 
b010: 20 2a 2f 0a 20 20 69 66 28 20 63 74 78 2e 70 56   */.  if( ctx.pV
b020: 64 62 65 46 75 6e 63 20 29 7b 0a 20 20 20 20 73  dbeFunc ){.    s
b030: 71 6c 69 74 65 33 56 64 62 65 44 65 6c 65 74 65  qlite3VdbeDelete
b040: 41 75 78 44 61 74 61 28 63 74 78 2e 70 56 64 62  AuxData(ctx.pVdb
b050: 65 46 75 6e 63 2c 20 70 4f 70 2d 3e 70 31 29 3b  eFunc, pOp->p1);
b060: 0a 20 20 20 20 70 4f 70 2d 3e 70 34 2e 70 56 64  .    pOp->p4.pVd
b070: 62 65 46 75 6e 63 20 3d 20 63 74 78 2e 70 56 64  beFunc = ctx.pVd
b080: 62 65 46 75 6e 63 3b 0a 20 20 20 20 70 4f 70 2d  beFunc;.    pOp-
b090: 3e 70 34 74 79 70 65 20 3d 20 50 34 5f 56 44 42  >p4type = P4_VDB
b0a0: 45 46 55 4e 43 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  EFUNC;.  }..  /*
b0b0: 20 49 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e   If the function
b0c0: 20 72 65 74 75 72 6e 65 64 20 61 6e 20 65 72 72   returned an err
b0d0: 6f 72 2c 20 74 68 72 6f 77 20 61 6e 20 65 78 63  or, throw an exc
b0e0: 65 70 74 69 6f 6e 20 2a 2f 0a 20 20 69 66 28 20  eption */.  if( 
b0f0: 63 74 78 2e 69 73 45 72 72 6f 72 20 29 7b 0a 20  ctx.isError ){. 
b100: 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72     sqlite3SetStr
b110: 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c  ing(&p->zErrMsg,
b120: 20 64 62 2c 20 22 25 73 22 2c 20 73 71 6c 69 74   db, "%s", sqlit
b130: 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 26 63  e3_value_text(&c
b140: 74 78 2e 73 29 29 3b 0a 20 20 20 20 72 63 20 3d  tx.s));.    rc =
b150: 20 63 74 78 2e 69 73 45 72 72 6f 72 3b 0a 20 20   ctx.isError;.  
b160: 7d 0a 0a 20 20 2f 2a 20 43 6f 70 79 20 74 68 65  }..  /* Copy the
b170: 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 66   result of the f
b180: 75 6e 63 74 69 6f 6e 20 69 6e 74 6f 20 72 65 67  unction into reg
b190: 69 73 74 65 72 20 50 33 20 2a 2f 0a 20 20 73 71  ister P3 */.  sq
b1a0: 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 45  lite3VdbeChangeE
b1b0: 6e 63 6f 64 69 6e 67 28 26 63 74 78 2e 73 2c 20  ncoding(&ctx.s, 
b1c0: 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 73 71 6c  encoding);.  sql
b1d0: 69 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28  ite3VdbeMemMove(
b1e0: 70 4f 75 74 2c 20 26 63 74 78 2e 73 29 3b 0a 20  pOut, &ctx.s);. 
b1f0: 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65   if( sqlite3Vdbe
b200: 4d 65 6d 54 6f 6f 42 69 67 28 70 4f 75 74 29 20  MemTooBig(pOut) 
b210: 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f  ){.    goto too_
b220: 62 69 67 3b 0a 20 20 7d 0a 20 20 52 45 47 49 53  big;.  }.  REGIS
b230: 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
b240: 33 2c 20 70 4f 75 74 29 3b 0a 20 20 55 50 44 41  3, pOut);.  UPDA
b250: 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
b260: 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  pOut);.  break;.
b270: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 69  }../* Opcode: Bi
b280: 74 41 6e 64 20 50 31 20 50 32 20 50 33 20 2a 20  tAnd P1 P2 P3 * 
b290: 2a 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65  *.**.** Take the
b2a0: 20 62 69 74 2d 77 69 73 65 20 41 4e 44 20 6f 66   bit-wise AND of
b2b0: 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72   the values in r
b2c0: 65 67 69 73 74 65 72 20 50 31 20 61 6e 64 20 50  egister P1 and P
b2d0: 32 20 61 6e 64 0a 2a 2a 20 73 74 6f 72 65 20 74  2 and.** store t
b2e0: 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67  he result in reg
b2f0: 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20  ister P3..** If 
b300: 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20  either input is 
b310: 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74  NULL, the result
b320: 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20   is NULL..*/./* 
b330: 4f 70 63 6f 64 65 3a 20 42 69 74 4f 72 20 50 31  Opcode: BitOr P1
b340: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
b350: 20 54 61 6b 65 20 74 68 65 20 62 69 74 2d 77 69   Take the bit-wi
b360: 73 65 20 4f 52 20 6f 66 20 74 68 65 20 76 61 6c  se OR of the val
b370: 75 65 73 20 69 6e 20 72 65 67 69 73 74 65 72 20  ues in register 
b380: 50 31 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a  P1 and P2 and.**
b390: 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c   store the resul
b3a0: 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  t in register P3
b3b0: 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69  ..** If either i
b3c0: 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68  nput is NULL, th
b3d0: 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  e result is NULL
b3e0: 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
b3f0: 53 68 69 66 74 4c 65 66 74 20 50 31 20 50 32 20  ShiftLeft P1 P2 
b400: 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 68 69  P3 * *.**.** Shi
b410: 66 74 20 74 68 65 20 69 6e 74 65 67 65 72 20 76  ft the integer v
b420: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
b430: 20 50 32 20 74 6f 20 74 68 65 20 6c 65 66 74 20   P2 to the left 
b440: 62 79 20 74 68 65 0a 2a 2a 20 6e 75 6d 62 65 72  by the.** number
b450: 20 6f 66 20 62 69 74 73 20 73 70 65 63 69 66 69   of bits specifi
b460: 65 64 20 62 79 20 74 68 65 20 69 6e 74 65 67 65  ed by the intege
b470: 72 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  r in register P1
b480: 2e 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 72  ..** Store the r
b490: 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65  esult in registe
b4a0: 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68  r P3..** If eith
b4b0: 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c  er input is NULL
b4c0: 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  , the result is 
b4d0: 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  NULL..*/./* Opco
b4e0: 64 65 3a 20 53 68 69 66 74 52 69 67 68 74 20 50  de: ShiftRight P
b4f0: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
b500: 2a 20 53 68 69 66 74 20 74 68 65 20 69 6e 74 65  * Shift the inte
b510: 67 65 72 20 76 61 6c 75 65 20 69 6e 20 72 65 67  ger value in reg
b520: 69 73 74 65 72 20 50 32 20 74 6f 20 74 68 65 20  ister P2 to the 
b530: 72 69 67 68 74 20 62 79 20 74 68 65 0a 2a 2a 20  right by the.** 
b540: 6e 75 6d 62 65 72 20 6f 66 20 62 69 74 73 20 73  number of bits s
b550: 70 65 63 69 66 69 65 64 20 62 79 20 74 68 65 20  pecified by the 
b560: 69 6e 74 65 67 65 72 20 69 6e 20 72 65 67 69 73  integer in regis
b570: 74 65 72 20 50 31 2e 0a 2a 2a 20 53 74 6f 72 65  ter P1..** Store
b580: 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72   the result in r
b590: 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49  egister P3..** I
b5a0: 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69  f either input i
b5b0: 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75  s NULL, the resu
b5c0: 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63  lt is NULL..*/.c
b5d0: 61 73 65 20 4f 50 5f 42 69 74 41 6e 64 3a 20 20  ase OP_BitAnd:  
b5e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
b5f0: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 42 49 54  * same as TK_BIT
b600: 41 4e 44 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f  AND, in1, in2, o
b610: 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 42  ut3 */.case OP_B
b620: 69 74 4f 72 3a 20 20 20 20 20 20 20 20 20 20 20  itOr:           
b630: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
b640: 73 20 54 4b 5f 42 49 54 4f 52 2c 20 69 6e 31 2c  s TK_BITOR, in1,
b650: 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61   in2, out3 */.ca
b660: 73 65 20 4f 50 5f 53 68 69 66 74 4c 65 66 74 3a  se OP_ShiftLeft:
b670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
b680: 20 73 61 6d 65 20 61 73 20 54 4b 5f 4c 53 48 49   same as TK_LSHI
b690: 46 54 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75  FT, in1, in2, ou
b6a0: 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 68  t3 */.case OP_Sh
b6b0: 69 66 74 52 69 67 68 74 3a 20 7b 20 20 20 20 20  iftRight: {     
b6c0: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
b6d0: 20 54 4b 5f 52 53 48 49 46 54 2c 20 69 6e 31 2c   TK_RSHIFT, in1,
b6e0: 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20   in2, out3 */.  
b6f0: 69 36 34 20 61 3b 0a 20 20 69 36 34 20 62 3b 0a  i64 a;.  i64 b;.
b700: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
b710: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 32  pOp->p1];.  pIn2
b720: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
b730: 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65  ];.  pOut = &aMe
b740: 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66  m[pOp->p3];.  if
b750: 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c  ( (pIn1->flags |
b760: 20 70 49 6e 32 2d 3e 66 6c 61 67 73 29 20 26 20   pIn2->flags) & 
b770: 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20  MEM_Null ){.    
b780: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
b790: 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 20  tNull(pOut);.   
b7a0: 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 61 20   break;.  }.  a 
b7b0: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74  = sqlite3VdbeInt
b7c0: 56 61 6c 75 65 28 70 49 6e 32 29 3b 0a 20 20 62  Value(pIn2);.  b
b7d0: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e   = sqlite3VdbeIn
b7e0: 74 56 61 6c 75 65 28 70 49 6e 31 29 3b 0a 20 20  tValue(pIn1);.  
b7f0: 73 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63  switch( pOp->opc
b800: 6f 64 65 20 29 7b 0a 20 20 20 20 63 61 73 65 20  ode ){.    case 
b810: 4f 50 5f 42 69 74 41 6e 64 3a 20 20 20 20 20 20  OP_BitAnd:      
b820: 61 20 26 3d 20 62 3b 20 20 20 20 20 62 72 65 61  a &= b;     brea
b830: 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 42  k;.    case OP_B
b840: 69 74 4f 72 3a 20 20 20 20 20 20 20 61 20 7c 3d  itOr:       a |=
b850: 20 62 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20   b;     break;. 
b860: 20 20 20 63 61 73 65 20 4f 50 5f 53 68 69 66 74     case OP_Shift
b870: 4c 65 66 74 3a 20 20 20 61 20 3c 3c 3d 20 62 3b  Left:   a <<= b;
b880: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 64      break;.    d
b890: 65 66 61 75 6c 74 3a 20 20 61 73 73 65 72 74 28  efault:  assert(
b8a0: 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
b8b0: 5f 53 68 69 66 74 52 69 67 68 74 20 29 3b 0a 20  _ShiftRight );. 
b8c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b8d0: 20 20 20 20 20 20 20 20 61 20 3e 3e 3d 20 62 3b          a >>= b;
b8e0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20      break;.  }. 
b8f0: 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 61 3b 0a   pOut->u.i = a;.
b900: 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
b910: 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b  (pOut, MEM_Int);
b920: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
b930: 4f 70 63 6f 64 65 3a 20 41 64 64 49 6d 6d 20 20  Opcode: AddImm  
b940: 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 0a  P1 P2 * * *.** .
b950: 2a 2a 20 41 64 64 20 74 68 65 20 63 6f 6e 73 74  ** Add the const
b960: 61 6e 74 20 50 32 20 74 6f 20 74 68 65 20 76 61  ant P2 to the va
b970: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
b980: 50 31 2e 0a 2a 2a 20 54 68 65 20 72 65 73 75 6c  P1..** The resul
b990: 74 20 69 73 20 61 6c 77 61 79 73 20 61 6e 20 69  t is always an i
b9a0: 6e 74 65 67 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 6f  nteger..**.** To
b9b0: 20 66 6f 72 63 65 20 61 6e 79 20 72 65 67 69 73   force any regis
b9c0: 74 65 72 20 74 6f 20 62 65 20 61 6e 20 69 6e 74  ter to be an int
b9d0: 65 67 65 72 2c 20 6a 75 73 74 20 61 64 64 20 30  eger, just add 0
b9e0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 64 64  ..*/.case OP_Add
b9f0: 49 6d 6d 3a 20 7b 20 20 20 20 20 20 20 20 20 20  Imm: {          
ba00: 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 70 49    /* in1 */.  pI
ba10: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
ba20: 70 31 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54  p1];.  memAboutT
ba30: 6f 43 68 61 6e 67 65 28 70 2c 20 70 49 6e 31 29  oChange(p, pIn1)
ba40: 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
ba50: 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e  emIntegerify(pIn
ba60: 31 29 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 20  1);.  pIn1->u.i 
ba70: 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 62 72  += pOp->p2;.  br
ba80: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
ba90: 65 3a 20 4d 75 73 74 42 65 49 6e 74 20 50 31 20  e: MustBeInt P1 
baa0: 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 0a 2a 2a 20  P2 * * *.** .** 
bab0: 46 6f 72 63 65 20 74 68 65 20 76 61 6c 75 65 20  Force the value 
bac0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 74  in register P1 t
bad0: 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72 2e  o be an integer.
bae0: 20 20 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a    If the value.*
baf0: 2a 20 69 6e 20 50 31 20 69 73 20 6e 6f 74 20 61  * in P1 is not a
bb00: 6e 20 69 6e 74 65 67 65 72 20 61 6e 64 20 63 61  n integer and ca
bb10: 6e 6e 6f 74 20 62 65 20 63 6f 6e 76 65 72 74 65  nnot be converte
bb20: 64 20 69 6e 74 6f 20 61 6e 20 69 6e 74 65 67 65  d into an intege
bb30: 72 0a 2a 2a 20 77 69 74 68 6f 75 74 20 64 61 74  r.** without dat
bb40: 61 20 6c 6f 73 73 2c 20 74 68 65 6e 20 6a 75 6d  a loss, then jum
bb50: 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f  p immediately to
bb60: 20 50 32 2c 20 6f 72 20 69 66 20 50 32 3d 3d 30   P2, or if P2==0
bb70: 0a 2a 2a 20 72 61 69 73 65 20 61 6e 20 53 51 4c  .** raise an SQL
bb80: 49 54 45 5f 4d 49 53 4d 41 54 43 48 20 65 78 63  ITE_MISMATCH exc
bb90: 65 70 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20  eption..*/.case 
bba0: 4f 50 5f 4d 75 73 74 42 65 49 6e 74 3a 20 7b 20  OP_MustBeInt: { 
bbb0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75             /* ju
bbc0: 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e  mp, in1 */.  pIn
bbd0: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
bbe0: 31 5d 3b 0a 20 20 61 70 70 6c 79 41 66 66 69 6e  1];.  applyAffin
bbf0: 69 74 79 28 70 49 6e 31 2c 20 53 51 4c 49 54 45  ity(pIn1, SQLITE
bc00: 5f 41 46 46 5f 4e 55 4d 45 52 49 43 2c 20 65 6e  _AFF_NUMERIC, en
bc10: 63 6f 64 69 6e 67 29 3b 0a 20 20 69 66 28 20 28  coding);.  if( (
bc20: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
bc30: 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20  M_Int)==0 ){.   
bc40: 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 30 20   if( pOp->p2==0 
bc50: 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51  ){.      rc = SQ
bc60: 4c 49 54 45 5f 4d 49 53 4d 41 54 43 48 3b 0a 20  LITE_MISMATCH;. 
bc70: 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
bc80: 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
bc90: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 70    }else{.      p
bca0: 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
bcb0: 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a  .    }.  }else{.
bcc0: 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c      MemSetTypeFl
bcd0: 61 67 28 70 49 6e 31 2c 20 4d 45 4d 5f 49 6e 74  ag(pIn1, MEM_Int
bce0: 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
bcf0: 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  }..#ifndef SQLIT
bd00: 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f  E_OMIT_FLOATING_
bd10: 50 4f 49 4e 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a  POINT./* Opcode:
bd20: 20 52 65 61 6c 41 66 66 69 6e 69 74 79 20 50 31   RealAffinity P1
bd30: 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49   * * * *.**.** I
bd40: 66 20 72 65 67 69 73 74 65 72 20 50 31 20 68 6f  f register P1 ho
bd50: 6c 64 73 20 61 6e 20 69 6e 74 65 67 65 72 20 63  lds an integer c
bd60: 6f 6e 76 65 72 74 20 69 74 20 74 6f 20 61 20 72  onvert it to a r
bd70: 65 61 6c 20 76 61 6c 75 65 2e 0a 2a 2a 0a 2a 2a  eal value..**.**
bd80: 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20   This opcode is 
bd90: 75 73 65 64 20 77 68 65 6e 20 65 78 74 72 61 63  used when extrac
bda0: 74 69 6e 67 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  ting information
bdb0: 20 66 72 6f 6d 20 61 20 63 6f 6c 75 6d 6e 20 74   from a column t
bdc0: 68 61 74 0a 2a 2a 20 68 61 73 20 52 45 41 4c 20  hat.** has REAL 
bdd0: 61 66 66 69 6e 69 74 79 2e 20 20 53 75 63 68 20  affinity.  Such 
bde0: 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 73 20 6d 61  column values ma
bdf0: 79 20 73 74 69 6c 6c 20 62 65 20 73 74 6f 72 65  y still be store
be00: 64 20 61 73 0a 2a 2a 20 69 6e 74 65 67 65 72 73  d as.** integers
be10: 2c 20 66 6f 72 20 73 70 61 63 65 20 65 66 66 69  , for space effi
be20: 63 69 65 6e 63 79 2c 20 62 75 74 20 61 66 74 65  ciency, but afte
be30: 72 20 65 78 74 72 61 63 74 69 6f 6e 20 77 65 20  r extraction we 
be40: 77 61 6e 74 20 74 68 65 6d 0a 2a 2a 20 74 6f 20  want them.** to 
be50: 68 61 76 65 20 6f 6e 6c 79 20 61 20 72 65 61 6c  have only a real
be60: 20 76 61 6c 75 65 2e 0a 2a 2f 0a 63 61 73 65 20   value..*/.case 
be70: 4f 50 5f 52 65 61 6c 41 66 66 69 6e 69 74 79 3a  OP_RealAffinity:
be80: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
be90: 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20      /* in1 */.  
bea0: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
beb0: 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70 49 6e  ->p1];.  if( pIn
bec0: 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  1->flags & MEM_I
bed0: 6e 74 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  nt ){.    sqlite
bee0: 33 56 64 62 65 4d 65 6d 52 65 61 6c 69 66 79 28  3VdbeMemRealify(
bef0: 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65  pIn1);.  }.  bre
bf00: 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69  ak;.}.#endif..#i
bf10: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
bf20: 54 5f 43 41 53 54 0a 2f 2a 20 4f 70 63 6f 64 65  T_CAST./* Opcode
bf30: 3a 20 54 6f 54 65 78 74 20 50 31 20 2a 20 2a 20  : ToText P1 * * 
bf40: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20  * *.**.** Force 
bf50: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
bf60: 69 73 74 65 72 20 50 31 20 74 6f 20 62 65 20 74  ister P1 to be t
bf70: 65 78 74 2e 0a 2a 2a 20 49 66 20 74 68 65 20 76  ext..** If the v
bf80: 61 6c 75 65 20 69 73 20 6e 75 6d 65 72 69 63 2c  alue is numeric,
bf90: 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f 20 61   convert it to a
bfa0: 20 73 74 72 69 6e 67 20 75 73 69 6e 67 20 74 68   string using th
bfb0: 65 0a 2a 2a 20 65 71 75 69 76 61 6c 65 6e 74 20  e.** equivalent 
bfc0: 6f 66 20 70 72 69 6e 74 66 28 29 2e 20 20 42 6c  of printf().  Bl
bfd0: 6f 62 20 76 61 6c 75 65 73 20 61 72 65 20 75 6e  ob values are un
bfe0: 63 68 61 6e 67 65 64 20 61 6e 64 0a 2a 2a 20 61  changed and.** a
bff0: 72 65 20 61 66 74 65 72 77 61 72 64 73 20 73 69  re afterwards si
c000: 6d 70 6c 79 20 69 6e 74 65 72 70 72 65 74 65 64  mply interpreted
c010: 20 61 73 20 74 65 78 74 2e 0a 2a 2a 0a 2a 2a 20   as text..**.** 
c020: 41 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69 73 20  A NULL value is 
c030: 6e 6f 74 20 63 68 61 6e 67 65 64 20 62 79 20 74  not changed by t
c040: 68 69 73 20 72 6f 75 74 69 6e 65 2e 20 20 49 74  his routine.  It
c050: 20 72 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a   remains NULL..*
c060: 2f 0a 63 61 73 65 20 4f 50 5f 54 6f 54 65 78 74  /.case OP_ToText
c070: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
c080: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
c090: 54 4b 5f 54 4f 5f 54 45 58 54 2c 20 69 6e 31 20  TK_TO_TEXT, in1 
c0a0: 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
c0b0: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 6d 65  m[pOp->p1];.  me
c0c0: 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
c0d0: 2c 20 70 49 6e 31 29 3b 0a 20 20 69 66 28 20 70  , pIn1);.  if( p
c0e0: 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
c0f0: 5f 4e 75 6c 6c 20 29 20 62 72 65 61 6b 3b 0a 20  _Null ) break;. 
c100: 20 61 73 73 65 72 74 28 20 4d 45 4d 5f 53 74 72   assert( MEM_Str
c110: 3d 3d 28 4d 45 4d 5f 42 6c 6f 62 3e 3e 33 29 20  ==(MEM_Blob>>3) 
c120: 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73  );.  pIn1->flags
c130: 20 7c 3d 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73   |= (pIn1->flags
c140: 26 4d 45 4d 5f 42 6c 6f 62 29 3e 3e 33 3b 0a 20  &MEM_Blob)>>3;. 
c150: 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70   applyAffinity(p
c160: 49 6e 31 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f  In1, SQLITE_AFF_
c170: 54 45 58 54 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  TEXT, encoding);
c180: 0a 20 20 72 63 20 3d 20 45 78 70 61 6e 64 42 6c  .  rc = ExpandBl
c190: 6f 62 28 70 49 6e 31 29 3b 0a 20 20 61 73 73 65  ob(pIn1);.  asse
c1a0: 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20  rt( pIn1->flags 
c1b0: 26 20 4d 45 4d 5f 53 74 72 20 7c 7c 20 64 62 2d  & MEM_Str || db-
c1c0: 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 3b  >mallocFailed );
c1d0: 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  .  pIn1->flags &
c1e0: 3d 20 7e 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f  = ~(MEM_Int|MEM_
c1f0: 52 65 61 6c 7c 4d 45 4d 5f 42 6c 6f 62 7c 4d 45  Real|MEM_Blob|ME
c200: 4d 5f 5a 65 72 6f 29 3b 0a 20 20 55 50 44 41 54  M_Zero);.  UPDAT
c210: 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70  E_MAX_BLOBSIZE(p
c220: 49 6e 31 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  In1);.  break;.}
c230: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 6f 42  ../* Opcode: ToB
c240: 6c 6f 62 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a  lob P1 * * * *.*
c250: 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65 20 76  *.** Force the v
c260: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
c270: 20 50 31 20 74 6f 20 62 65 20 61 20 42 4c 4f 42   P1 to be a BLOB
c280: 2e 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75  ..** If the valu
c290: 65 20 69 73 20 6e 75 6d 65 72 69 63 2c 20 63 6f  e is numeric, co
c2a0: 6e 76 65 72 74 20 69 74 20 74 6f 20 61 20 73 74  nvert it to a st
c2b0: 72 69 6e 67 20 66 69 72 73 74 2e 0a 2a 2a 20 53  ring first..** S
c2c0: 74 72 69 6e 67 73 20 61 72 65 20 73 69 6d 70 6c  trings are simpl
c2d0: 79 20 72 65 69 6e 74 65 72 70 72 65 74 65 64 20  y reinterpreted 
c2e0: 61 73 20 62 6c 6f 62 73 20 77 69 74 68 20 6e 6f  as blobs with no
c2f0: 20 63 68 61 6e 67 65 0a 2a 2a 20 74 6f 20 74 68   change.** to th
c300: 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 64 61 74  e underlying dat
c310: 61 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20  a..**.** A NULL 
c320: 76 61 6c 75 65 20 69 73 20 6e 6f 74 20 63 68 61  value is not cha
c330: 6e 67 65 64 20 62 79 20 74 68 69 73 20 72 6f 75  nged by this rou
c340: 74 69 6e 65 2e 20 20 49 74 20 72 65 6d 61 69 6e  tine.  It remain
c350: 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20  s NULL..*/.case 
c360: 4f 50 5f 54 6f 42 6c 6f 62 3a 20 7b 20 20 20 20  OP_ToBlob: {    
c370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
c380: 20 73 61 6d 65 20 61 73 20 54 4b 5f 54 4f 5f 42   same as TK_TO_B
c390: 4c 4f 42 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49  LOB, in1 */.  pI
c3a0: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
c3b0: 70 31 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d  p1];.  if( pIn1-
c3c0: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
c3d0: 6c 20 29 20 62 72 65 61 6b 3b 0a 20 20 69 66 28  l ) break;.  if(
c3e0: 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
c3f0: 4d 45 4d 5f 42 6c 6f 62 29 3d 3d 30 20 29 7b 0a  MEM_Blob)==0 ){.
c400: 20 20 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74      applyAffinit
c410: 79 28 70 49 6e 31 2c 20 53 51 4c 49 54 45 5f 41  y(pIn1, SQLITE_A
c420: 46 46 5f 54 45 58 54 2c 20 65 6e 63 6f 64 69 6e  FF_TEXT, encodin
c430: 67 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  g);.    assert( 
c440: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
c450: 4d 5f 53 74 72 20 7c 7c 20 64 62 2d 3e 6d 61 6c  M_Str || db->mal
c460: 6c 6f 63 46 61 69 6c 65 64 20 29 3b 0a 20 20 20  locFailed );.   
c470: 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
c480: 70 49 6e 31 2c 20 4d 45 4d 5f 42 6c 6f 62 29 3b  pIn1, MEM_Blob);
c490: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 49  .  }else{.    pI
c4a0: 6e 31 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 28 4d  n1->flags &= ~(M
c4b0: 45 4d 5f 54 79 70 65 4d 61 73 6b 26 7e 4d 45 4d  EM_TypeMask&~MEM
c4c0: 5f 42 6c 6f 62 29 3b 0a 20 20 7d 0a 20 20 55 50  _Blob);.  }.  UP
c4d0: 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
c4e0: 45 28 70 49 6e 31 29 3b 0a 20 20 62 72 65 61 6b  E(pIn1);.  break
c4f0: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
c500: 54 6f 4e 75 6d 65 72 69 63 20 50 31 20 2a 20 2a  ToNumeric P1 * *
c510: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65   * *.**.** Force
c520: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
c530: 67 69 73 74 65 72 20 50 31 20 74 6f 20 62 65 20  gister P1 to be 
c540: 6e 75 6d 65 72 69 63 20 28 65 69 74 68 65 72 20  numeric (either 
c550: 61 6e 0a 2a 2a 20 69 6e 74 65 67 65 72 20 6f 72  an.** integer or
c560: 20 61 20 66 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e   a floating-poin
c570: 74 20 6e 75 6d 62 65 72 2e 29 0a 2a 2a 20 49 66  t number.).** If
c580: 20 74 68 65 20 76 61 6c 75 65 20 69 73 20 74 65   the value is te
c590: 78 74 20 6f 72 20 62 6c 6f 62 2c 20 74 72 79 20  xt or blob, try 
c5a0: 74 6f 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f  to convert it to
c5b0: 20 61 6e 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a   an using the.**
c5c0: 20 65 71 75 69 76 61 6c 65 6e 74 20 6f 66 20 61   equivalent of a
c5d0: 74 6f 69 28 29 20 6f 72 20 61 74 6f 66 28 29 20  toi() or atof() 
c5e0: 61 6e 64 20 73 74 6f 72 65 20 30 20 69 66 20 6e  and store 0 if n
c5f0: 6f 20 73 75 63 68 20 63 6f 6e 76 65 72 73 69 6f  o such conversio
c600: 6e 20 0a 2a 2a 20 69 73 20 70 6f 73 73 69 62 6c  n .** is possibl
c610: 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20  e..**.** A NULL 
c620: 76 61 6c 75 65 20 69 73 20 6e 6f 74 20 63 68 61  value is not cha
c630: 6e 67 65 64 20 62 79 20 74 68 69 73 20 72 6f 75  nged by this rou
c640: 74 69 6e 65 2e 20 20 49 74 20 72 65 6d 61 69 6e  tine.  It remain
c650: 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20  s NULL..*/.case 
c660: 4f 50 5f 54 6f 4e 75 6d 65 72 69 63 3a 20 7b 20  OP_ToNumeric: { 
c670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c680: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 54   /* same as TK_T
c690: 4f 5f 4e 55 4d 45 52 49 43 2c 20 69 6e 31 20 2a  O_NUMERIC, in1 *
c6a0: 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
c6b0: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 73 71 6c  [pOp->p1];.  sql
c6c0: 69 74 65 33 56 64 62 65 4d 65 6d 4e 75 6d 65 72  ite3VdbeMemNumer
c6d0: 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 62 72 65  ify(pIn1);.  bre
c6e0: 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ak;.}.#endif /* 
c6f0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 41 53 54  SQLITE_OMIT_CAST
c700: 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20   */../* Opcode: 
c710: 54 6f 49 6e 74 20 50 31 20 2a 20 2a 20 2a 20 2a  ToInt P1 * * * *
c720: 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65  .**.** Force the
c730: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
c740: 65 72 20 50 31 20 74 6f 20 62 65 20 61 6e 20 69  er P1 to be an i
c750: 6e 74 65 67 65 72 2e 20 20 49 66 0a 2a 2a 20 54  nteger.  If.** T
c760: 68 65 20 76 61 6c 75 65 20 69 73 20 63 75 72 72  he value is curr
c770: 65 6e 74 6c 79 20 61 20 72 65 61 6c 20 6e 75 6d  ently a real num
c780: 62 65 72 2c 20 64 72 6f 70 20 69 74 73 20 66 72  ber, drop its fr
c790: 61 63 74 69 6f 6e 61 6c 20 70 61 72 74 2e 0a 2a  actional part..*
c7a0: 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 69  * If the value i
c7b0: 73 20 74 65 78 74 20 6f 72 20 62 6c 6f 62 2c 20  s text or blob, 
c7c0: 74 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20 69  try to convert i
c7d0: 74 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20  t to an integer 
c7e0: 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 65 71 75  using the.** equ
c7f0: 69 76 61 6c 65 6e 74 20 6f 66 20 61 74 6f 69 28  ivalent of atoi(
c800: 29 20 61 6e 64 20 73 74 6f 72 65 20 30 20 69 66  ) and store 0 if
c810: 20 6e 6f 20 73 75 63 68 20 63 6f 6e 76 65 72 73   no such convers
c820: 69 6f 6e 20 69 73 20 70 6f 73 73 69 62 6c 65 2e  ion is possible.
c830: 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76 61  .**.** A NULL va
c840: 6c 75 65 20 69 73 20 6e 6f 74 20 63 68 61 6e 67  lue is not chang
c850: 65 64 20 62 79 20 74 68 69 73 20 72 6f 75 74 69  ed by this routi
c860: 6e 65 2e 20 20 49 74 20 72 65 6d 61 69 6e 73 20  ne.  It remains 
c870: 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  NULL..*/.case OP
c880: 5f 54 6f 49 6e 74 3a 20 7b 20 20 20 20 20 20 20  _ToInt: {       
c890: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
c8a0: 6d 65 20 61 73 20 54 4b 5f 54 4f 5f 49 4e 54 2c  me as TK_TO_INT,
c8b0: 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d   in1 */.  pIn1 =
c8c0: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
c8d0: 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c  .  if( (pIn1->fl
c8e0: 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d  ags & MEM_Null)=
c8f0: 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  =0 ){.    sqlite
c900: 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69  3VdbeMemIntegeri
c910: 66 79 28 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20  fy(pIn1);.  }.  
c920: 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 20 21 64  break;.}..#if !d
c930: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
c940: 49 54 5f 43 41 53 54 29 20 26 26 20 21 64 65 66  IT_CAST) && !def
c950: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
c960: 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 29  _FLOATING_POINT)
c970: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 6f 52 65  ./* Opcode: ToRe
c980: 61 6c 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a  al P1 * * * *.**
c990: 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65 20 76 61  .** Force the va
c9a0: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
c9b0: 50 31 20 74 6f 20 62 65 20 61 20 66 6c 6f 61 74  P1 to be a float
c9c0: 69 6e 67 20 70 6f 69 6e 74 20 6e 75 6d 62 65 72  ing point number
c9d0: 2e 0a 2a 2a 20 49 66 20 54 68 65 20 76 61 6c 75  ..** If The valu
c9e0: 65 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 61  e is currently a
c9f0: 6e 20 69 6e 74 65 67 65 72 2c 20 63 6f 6e 76 65  n integer, conve
ca00: 72 74 20 69 74 2e 0a 2a 2a 20 49 66 20 74 68 65  rt it..** If the
ca10: 20 76 61 6c 75 65 20 69 73 20 74 65 78 74 20 6f   value is text o
ca20: 72 20 62 6c 6f 62 2c 20 74 72 79 20 74 6f 20 63  r blob, try to c
ca30: 6f 6e 76 65 72 74 20 69 74 20 74 6f 20 61 6e 20  onvert it to an 
ca40: 69 6e 74 65 67 65 72 20 75 73 69 6e 67 20 74 68  integer using th
ca50: 65 0a 2a 2a 20 65 71 75 69 76 61 6c 65 6e 74 20  e.** equivalent 
ca60: 6f 66 20 61 74 6f 69 28 29 20 61 6e 64 20 73 74  of atoi() and st
ca70: 6f 72 65 20 30 2e 30 20 69 66 20 6e 6f 20 73 75  ore 0.0 if no su
ca80: 63 68 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69 73  ch conversion is
ca90: 20 70 6f 73 73 69 62 6c 65 2e 0a 2a 2a 0a 2a 2a   possible..**.**
caa0: 20 41 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69 73   A NULL value is
cab0: 20 6e 6f 74 20 63 68 61 6e 67 65 64 20 62 79 20   not changed by 
cac0: 74 68 69 73 20 72 6f 75 74 69 6e 65 2e 20 20 49  this routine.  I
cad0: 74 20 72 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a  t remains NULL..
cae0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 6f 52 65 61  */.case OP_ToRea
caf0: 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  l: {            
cb00: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
cb10: 20 54 4b 5f 54 4f 5f 52 45 41 4c 2c 20 69 6e 31   TK_TO_REAL, in1
cb20: 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   */.  pIn1 = &aM
cb30: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 6d  em[pOp->p1];.  m
cb40: 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
cb50: 70 2c 20 70 49 6e 31 29 3b 0a 20 20 69 66 28 20  p, pIn1);.  if( 
cb60: 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn1->flags & M
cb70: 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20  EM_Null)==0 ){. 
cb80: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
cb90: 6d 52 65 61 6c 69 66 79 28 70 49 6e 31 29 3b 0a  mRealify(pIn1);.
cba0: 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23    }.  break;.}.#
cbb0: 65 6e 64 69 66 20 2f 2a 20 21 64 65 66 69 6e 65  endif /* !define
cbc0: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 41  d(SQLITE_OMIT_CA
cbd0: 53 54 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  ST) && !defined(
cbe0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41  SQLITE_OMIT_FLOA
cbf0: 54 49 4e 47 5f 50 4f 49 4e 54 29 20 2a 2f 0a 0a  TING_POINT) */..
cc00: 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 74 20 50 31  /* Opcode: Lt P1
cc10: 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a   P2 P3 P4 P5.**.
cc20: 2a 2a 20 43 6f 6d 70 61 72 65 20 74 68 65 20 76  ** Compare the v
cc30: 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74 65  alues in registe
cc40: 72 20 50 31 20 61 6e 64 20 50 33 2e 20 20 49 66  r P1 and P3.  If
cc50: 20 72 65 67 28 50 33 29 3c 72 65 67 28 50 31 29   reg(P3)<reg(P1)
cc60: 20 74 68 65 6e 0a 2a 2a 20 6a 75 6d 70 20 74 6f   then.** jump to
cc70: 20 61 64 64 72 65 73 73 20 50 32 2e 20 20 0a 2a   address P2.  .*
cc80: 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53 51 4c 49  *.** If the SQLI
cc90: 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 62 69  TE_JUMPIFNULL bi
cca0: 74 20 6f 66 20 50 35 20 69 73 20 73 65 74 20 61  t of P5 is set a
ccb0: 6e 64 20 65 69 74 68 65 72 20 72 65 67 28 50 31  nd either reg(P1
ccc0: 29 20 6f 72 0a 2a 2a 20 72 65 67 28 50 33 29 20  ) or.** reg(P3) 
ccd0: 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 61 6b  is NULL then tak
cce0: 65 20 74 68 65 20 6a 75 6d 70 2e 20 20 49 66 20  e the jump.  If 
ccf0: 74 68 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49  the SQLITE_JUMPI
cd00: 46 4e 55 4c 4c 20 0a 2a 2a 20 62 69 74 20 69 73  FNULL .** bit is
cd10: 20 63 6c 65 61 72 20 74 68 65 6e 20 66 61 6c 6c   clear then fall
cd20: 20 74 68 72 6f 75 67 68 20 69 66 20 65 69 74 68   through if eith
cd30: 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55  er operand is NU
cd40: 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 53 51  LL..**.** The SQ
cd50: 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 70 6f  LITE_AFF_MASK po
cd60: 72 74 69 6f 6e 20 6f 66 20 50 35 20 6d 75 73 74  rtion of P5 must
cd70: 20 62 65 20 61 6e 20 61 66 66 69 6e 69 74 79 20   be an affinity 
cd80: 63 68 61 72 61 63 74 65 72 20 2d 0a 2a 2a 20 53  character -.** S
cd90: 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 2c 20  QLITE_AFF_TEXT, 
cda0: 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47  SQLITE_AFF_INTEG
cdb0: 45 52 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68  ER, and so forth
cdc0: 2e 20 41 6e 20 61 74 74 65 6d 70 74 20 69 73 20  . An attempt is 
cdd0: 6d 61 64 65 20 0a 2a 2a 20 74 6f 20 63 6f 65 72  made .** to coer
cde0: 63 65 20 62 6f 74 68 20 69 6e 70 75 74 73 20 61  ce both inputs a
cdf0: 63 63 6f 72 64 69 6e 67 20 74 6f 20 74 68 69 73  ccording to this
ce00: 20 61 66 66 69 6e 69 74 79 20 62 65 66 6f 72 65   affinity before
ce10: 20 74 68 65 0a 2a 2a 20 63 6f 6d 70 61 72 69 73   the.** comparis
ce20: 6f 6e 20 69 73 20 6d 61 64 65 2e 20 49 66 20 74  on is made. If t
ce30: 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41  he SQLITE_AFF_MA
ce40: 53 4b 20 69 73 20 30 78 30 30 2c 20 74 68 65 6e  SK is 0x00, then
ce50: 20 6e 75 6d 65 72 69 63 0a 2a 2a 20 61 66 66 69   numeric.** affi
ce60: 6e 69 74 79 20 69 73 20 75 73 65 64 2e 20 4e 6f  nity is used. No
ce70: 74 65 20 74 68 61 74 20 74 68 65 20 61 66 66 69  te that the affi
ce80: 6e 69 74 79 20 63 6f 6e 76 65 72 73 69 6f 6e 73  nity conversions
ce90: 20 61 72 65 20 73 74 6f 72 65 64 0a 2a 2a 20 62   are stored.** b
cea0: 61 63 6b 20 69 6e 74 6f 20 74 68 65 20 69 6e 70  ack into the inp
ceb0: 75 74 20 72 65 67 69 73 74 65 72 73 20 50 31 20  ut registers P1 
cec0: 61 6e 64 20 50 33 2e 20 20 53 6f 20 74 68 69 73  and P3.  So this
ced0: 20 6f 70 63 6f 64 65 20 63 61 6e 20 63 61 75 73   opcode can caus
cee0: 65 0a 2a 2a 20 70 65 72 73 69 73 74 65 6e 74 20  e.** persistent 
cef0: 63 68 61 6e 67 65 73 20 74 6f 20 72 65 67 69 73  changes to regis
cf00: 74 65 72 73 20 50 31 20 61 6e 64 20 50 33 2e 0a  ters P1 and P3..
cf10: 2a 2a 0a 2a 2a 20 4f 6e 63 65 20 61 6e 79 20 63  **.** Once any c
cf20: 6f 6e 76 65 72 73 69 6f 6e 73 20 68 61 76 65 20  onversions have 
cf30: 74 61 6b 65 6e 20 70 6c 61 63 65 2c 20 61 6e 64  taken place, and
cf40: 20 6e 65 69 74 68 65 72 20 76 61 6c 75 65 20 69   neither value i
cf50: 73 20 4e 55 4c 4c 2c 20 0a 2a 2a 20 74 68 65 20  s NULL, .** the 
cf60: 76 61 6c 75 65 73 20 61 72 65 20 63 6f 6d 70 61  values are compa
cf70: 72 65 64 2e 20 49 66 20 62 6f 74 68 20 76 61 6c  red. If both val
cf80: 75 65 73 20 61 72 65 20 62 6c 6f 62 73 20 74 68  ues are blobs th
cf90: 65 6e 20 6d 65 6d 63 6d 70 28 29 20 69 73 0a 2a  en memcmp() is.*
cfa0: 2a 20 75 73 65 64 20 74 6f 20 64 65 74 65 72 6d  * used to determ
cfb0: 69 6e 65 20 74 68 65 20 72 65 73 75 6c 74 73 20  ine the results 
cfc0: 6f 66 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f  of the compariso
cfd0: 6e 2e 20 20 49 66 20 62 6f 74 68 20 76 61 6c 75  n.  If both valu
cfe0: 65 73 0a 2a 2a 20 61 72 65 20 74 65 78 74 2c 20  es.** are text, 
cff0: 74 68 65 6e 20 74 68 65 20 61 70 70 72 6f 70 72  then the appropr
d000: 69 61 74 65 20 63 6f 6c 6c 61 74 69 6e 67 20 66  iate collating f
d010: 75 6e 63 74 69 6f 6e 20 73 70 65 63 69 66 69 65  unction specifie
d020: 64 20 69 6e 0a 2a 2a 20 50 34 20 69 73 20 20 75  d in.** P4 is  u
d030: 73 65 64 20 74 6f 20 64 6f 20 74 68 65 20 63 6f  sed to do the co
d040: 6d 70 61 72 69 73 6f 6e 2e 20 20 49 66 20 50 34  mparison.  If P4
d050: 20 69 73 20 6e 6f 74 20 73 70 65 63 69 66 69 65   is not specifie
d060: 64 20 74 68 65 6e 0a 2a 2a 20 6d 65 6d 63 6d 70  d then.** memcmp
d070: 28 29 20 69 73 20 75 73 65 64 20 74 6f 20 63 6f  () is used to co
d080: 6d 70 61 72 65 20 74 65 78 74 20 73 74 72 69 6e  mpare text strin
d090: 67 2e 20 20 49 66 20 62 6f 74 68 20 76 61 6c 75  g.  If both valu
d0a0: 65 73 20 61 72 65 0a 2a 2a 20 6e 75 6d 65 72 69  es are.** numeri
d0b0: 63 2c 20 74 68 65 6e 20 61 20 6e 75 6d 65 72 69  c, then a numeri
d0c0: 63 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20  c comparison is 
d0d0: 75 73 65 64 2e 20 49 66 20 74 68 65 20 74 77 6f  used. If the two
d0e0: 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72 65 20 6f   values.** are o
d0f0: 66 20 64 69 66 66 65 72 65 6e 74 20 74 79 70 65  f different type
d100: 73 2c 20 74 68 65 6e 20 6e 75 6d 62 65 72 73 20  s, then numbers 
d110: 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20 6c  are considered l
d120: 65 73 73 20 74 68 61 6e 0a 2a 2a 20 73 74 72 69  ess than.** stri
d130: 6e 67 73 20 61 6e 64 20 73 74 72 69 6e 67 73 20  ngs and strings 
d140: 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20 6c  are considered l
d150: 65 73 73 20 74 68 61 6e 20 62 6c 6f 62 73 2e 0a  ess than blobs..
d160: 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53 51 4c  **.** If the SQL
d170: 49 54 45 5f 53 54 4f 52 45 50 32 20 62 69 74 20  ITE_STOREP2 bit 
d180: 6f 66 20 50 35 20 69 73 20 73 65 74 2c 20 74 68  of P5 is set, th
d190: 65 6e 20 64 6f 20 6e 6f 74 20 6a 75 6d 70 2e 20  en do not jump. 
d1a0: 20 49 6e 73 74 65 61 64 2c 0a 2a 2a 20 73 74 6f   Instead,.** sto
d1b0: 72 65 20 61 20 62 6f 6f 6c 65 61 6e 20 72 65 73  re a boolean res
d1c0: 75 6c 74 20 28 65 69 74 68 65 72 20 30 2c 20 6f  ult (either 0, o
d1d0: 72 20 31 2c 20 6f 72 20 4e 55 4c 4c 29 20 69 6e  r 1, or NULL) in
d1e0: 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f   register P2..*/
d1f0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 20 50  ./* Opcode: Ne P
d200: 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
d210: 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a  .** This works j
d220: 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20  ust like the Lt 
d230: 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20 74 68  opcode except th
d240: 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74  at the jump is t
d250: 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 6f  aken if.** the o
d260: 70 65 72 61 6e 64 73 20 69 6e 20 72 65 67 69 73  perands in regis
d270: 74 65 72 73 20 50 31 20 61 6e 64 20 50 33 20 61  ters P1 and P3 a
d280: 72 65 20 6e 6f 74 20 65 71 75 61 6c 2e 20 20 53  re not equal.  S
d290: 65 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65  ee the Lt opcode
d2a0: 20 66 6f 72 0a 2a 2a 20 61 64 64 69 74 69 6f 6e   for.** addition
d2b0: 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a  al information..
d2c0: 2a 2a 0a 2a 2a 20 49 66 20 53 51 4c 49 54 45 5f  **.** If SQLITE_
d2d0: 4e 55 4c 4c 45 51 20 69 73 20 73 65 74 20 69 6e  NULLEQ is set in
d2e0: 20 50 35 20 74 68 65 6e 20 74 68 65 20 72 65 73   P5 then the res
d2f0: 75 6c 74 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f  ult of compariso
d300: 6e 20 69 73 20 61 6c 77 61 79 73 20 65 69 74 68  n is always eith
d310: 65 72 0a 2a 2a 20 74 72 75 65 20 6f 72 20 66 61  er.** true or fa
d320: 6c 73 65 20 61 6e 64 20 69 73 20 6e 65 76 65 72  lse and is never
d330: 20 4e 55 4c 4c 2e 20 20 49 66 20 62 6f 74 68 20   NULL.  If both 
d340: 6f 70 65 72 61 6e 64 73 20 61 72 65 20 4e 55 4c  operands are NUL
d350: 4c 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c  L then the resul
d360: 74 0a 2a 2a 20 6f 66 20 63 6f 6d 70 61 72 69 73  t.** of comparis
d370: 6f 6e 20 69 73 20 66 61 6c 73 65 2e 20 20 49 66  on is false.  If
d380: 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20   either operand 
d390: 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65  is NULL then the
d3a0: 20 72 65 73 75 6c 74 20 69 73 20 74 72 75 65 2e   result is true.
d3b0: 0a 2a 2a 20 49 66 20 6e 65 69 74 68 65 72 20 6f  .** If neither o
d3c0: 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20 74  perand is NULL t
d3d0: 68 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  he the result is
d3e0: 20 74 68 65 20 73 61 6d 65 20 61 73 20 69 74 20   the same as it 
d3f0: 77 6f 75 6c 64 20 62 65 20 69 66 0a 2a 2a 20 74  would be if.** t
d400: 68 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51  he SQLITE_NULLEQ
d410: 20 66 6c 61 67 20 77 65 72 65 20 6f 6d 69 74 74   flag were omitt
d420: 65 64 20 66 72 6f 6d 20 50 35 2e 0a 2a 2f 0a 2f  ed from P5..*/./
d430: 2a 20 4f 70 63 6f 64 65 3a 20 45 71 20 50 31 20  * Opcode: Eq P1 
d440: 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a  P2 P3 P4 P5.**.*
d450: 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73  * This works jus
d460: 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70  t like the Lt op
d470: 63 6f 64 65 20 65 78 63 65 70 74 20 74 68 61 74  code except that
d480: 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b   the jump is tak
d490: 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 6f 70 65  en if.** the ope
d4a0: 72 61 6e 64 73 20 69 6e 20 72 65 67 69 73 74 65  rands in registe
d4b0: 72 73 20 50 31 20 61 6e 64 20 50 33 20 61 72 65  rs P1 and P3 are
d4c0: 20 65 71 75 61 6c 2e 0a 2a 2a 20 53 65 65 20 74   equal..** See t
d4d0: 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72  he Lt opcode for
d4e0: 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
d4f0: 72 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49  rmation..**.** I
d500: 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20  f SQLITE_NULLEQ 
d510: 69 73 20 73 65 74 20 69 6e 20 50 35 20 74 68 65  is set in P5 the
d520: 6e 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20  n the result of 
d530: 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 61 6c  comparison is al
d540: 77 61 79 73 20 65 69 74 68 65 72 0a 2a 2a 20 74  ways either.** t
d550: 72 75 65 20 6f 72 20 66 61 6c 73 65 20 61 6e 64  rue or false and
d560: 20 69 73 20 6e 65 76 65 72 20 4e 55 4c 4c 2e 20   is never NULL. 
d570: 20 49 66 20 62 6f 74 68 20 6f 70 65 72 61 6e 64   If both operand
d580: 73 20 61 72 65 20 4e 55 4c 4c 20 74 68 65 6e 20  s are NULL then 
d590: 74 68 65 20 72 65 73 75 6c 74 0a 2a 2a 20 6f 66  the result.** of
d5a0: 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 74   comparison is t
d5b0: 72 75 65 2e 20 20 49 66 20 65 69 74 68 65 72 20  rue.  If either 
d5c0: 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20  operand is NULL 
d5d0: 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20  then the result 
d5e0: 69 73 20 66 61 6c 73 65 2e 0a 2a 2a 20 49 66 20  is false..** If 
d5f0: 6e 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20  neither operand 
d600: 69 73 20 4e 55 4c 4c 20 74 68 65 20 74 68 65 20  is NULL the the 
d610: 72 65 73 75 6c 74 20 69 73 20 74 68 65 20 73 61  result is the sa
d620: 6d 65 20 61 73 20 69 74 20 77 6f 75 6c 64 20 62  me as it would b
d630: 65 20 69 66 0a 2a 2a 20 74 68 65 20 53 51 4c 49  e if.** the SQLI
d640: 54 45 5f 4e 55 4c 4c 45 51 20 66 6c 61 67 20 77  TE_NULLEQ flag w
d650: 65 72 65 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d  ere omitted from
d660: 20 50 35 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64   P5..*/./* Opcod
d670: 65 3a 20 4c 65 20 50 31 20 50 32 20 50 33 20 50  e: Le P1 P2 P3 P
d680: 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  4 P5.**.** This 
d690: 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20  works just like 
d6a0: 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78  the Lt opcode ex
d6b0: 63 65 70 74 20 74 68 61 74 20 74 68 65 20 6a 75  cept that the ju
d6c0: 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a  mp is taken if.*
d6d0: 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  * the content of
d6e0: 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20   register P3 is 
d6f0: 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75  less than or equ
d700: 61 6c 20 74 6f 20 74 68 65 20 63 6f 6e 74 65 6e  al to the conten
d710: 74 20 6f 66 0a 2a 2a 20 72 65 67 69 73 74 65 72  t of.** register
d720: 20 50 31 2e 20 20 53 65 65 20 74 68 65 20 4c 74   P1.  See the Lt
d730: 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64 64 69   opcode for addi
d740: 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69  tional informati
d750: 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  on..*/./* Opcode
d760: 3a 20 47 74 20 50 31 20 50 32 20 50 33 20 50 34  : Gt P1 P2 P3 P4
d770: 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77   P5.**.** This w
d780: 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 74  orks just like t
d790: 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78 63  he Lt opcode exc
d7a0: 65 70 74 20 74 68 61 74 20 74 68 65 20 6a 75 6d  ept that the jum
d7b0: 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a  p is taken if.**
d7c0: 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
d7d0: 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20 67  register P3 is g
d7e0: 72 65 61 74 65 72 20 74 68 61 6e 20 74 68 65 20  reater than the 
d7f0: 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 72 65  content of.** re
d800: 67 69 73 74 65 72 20 50 31 2e 20 20 53 65 65 20  gister P1.  See 
d810: 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f  the Lt opcode fo
d820: 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66  r additional inf
d830: 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20  ormation..*/./* 
d840: 4f 70 63 6f 64 65 3a 20 47 65 20 50 31 20 50 32  Opcode: Ge P1 P2
d850: 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20   P3 P4 P5.**.** 
d860: 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20  This works just 
d870: 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f  like the Lt opco
d880: 64 65 20 65 78 63 65 70 74 20 74 68 61 74 20 74  de except that t
d890: 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e  he jump is taken
d8a0: 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65   if.** the conte
d8b0: 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  nt of register P
d8c0: 33 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61  3 is greater tha
d8d0: 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68  n or equal to th
d8e0: 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20  e content of.** 
d8f0: 72 65 67 69 73 74 65 72 20 50 31 2e 20 20 53 65  register P1.  Se
d900: 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20  e the Lt opcode 
d910: 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69  for additional i
d920: 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 63  nformation..*/.c
d930: 61 73 65 20 4f 50 5f 45 71 3a 20 20 20 20 20 20  ase OP_Eq:      
d940: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
d950: 20 61 73 20 54 4b 5f 45 51 2c 20 6a 75 6d 70 2c   as TK_EQ, jump,
d960: 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73   in1, in3 */.cas
d970: 65 20 4f 50 5f 4e 65 3a 20 20 20 20 20 20 20 20  e OP_Ne:        
d980: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
d990: 73 20 54 4b 5f 4e 45 2c 20 6a 75 6d 70 2c 20 69  s TK_NE, jump, i
d9a0: 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20  n1, in3 */.case 
d9b0: 4f 50 5f 4c 74 3a 20 20 20 20 20 20 20 20 20 20  OP_Lt:          
d9c0: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
d9d0: 54 4b 5f 4c 54 2c 20 6a 75 6d 70 2c 20 69 6e 31  TK_LT, jump, in1
d9e0: 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50  , in3 */.case OP
d9f0: 5f 4c 65 3a 20 20 20 20 20 20 20 20 20 20 20 20  _Le:            
da00: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
da10: 5f 4c 45 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20  _LE, jump, in1, 
da20: 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 47  in3 */.case OP_G
da30: 74 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t:              
da40: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 47   /* same as TK_G
da50: 54 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e  T, jump, in1, in
da60: 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 65 3a  3 */.case OP_Ge:
da70: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f   {             /
da80: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 47 45 2c  * same as TK_GE,
da90: 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20   jump, in1, in3 
daa0: 2a 2f 0a 20 20 69 6e 74 20 72 65 73 3b 20 20 20  */.  int res;   
dab0: 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75           /* Resu
dac0: 6c 74 20 6f 66 20 74 68 65 20 63 6f 6d 70 61 72  lt of the compar
dad0: 69 73 6f 6e 20 6f 66 20 70 49 6e 31 20 61 67 61  ison of pIn1 aga
dae0: 69 6e 73 74 20 70 49 6e 33 20 2a 2f 0a 20 20 63  inst pIn3 */.  c
daf0: 68 61 72 20 61 66 66 69 6e 69 74 79 3b 20 20 20  har affinity;   
db00: 20 20 20 2f 2a 20 41 66 66 69 6e 69 74 79 20 74     /* Affinity t
db10: 6f 20 75 73 65 20 66 6f 72 20 63 6f 6d 70 61 72  o use for compar
db20: 69 73 6f 6e 20 2a 2f 0a 20 20 75 31 36 20 66 6c  ison */.  u16 fl
db30: 61 67 73 31 3b 20 20 20 20 20 20 20 20 20 2f 2a  ags1;         /*
db40: 20 43 6f 70 79 20 6f 66 20 69 6e 69 74 69 61 6c   Copy of initial
db50: 20 76 61 6c 75 65 20 6f 66 20 70 49 6e 31 2d 3e   value of pIn1->
db60: 66 6c 61 67 73 20 2a 2f 0a 20 20 75 31 36 20 66  flags */.  u16 f
db70: 6c 61 67 73 33 3b 20 20 20 20 20 20 20 20 20 2f  lags3;         /
db80: 2a 20 43 6f 70 79 20 6f 66 20 69 6e 69 74 69 61  * Copy of initia
db90: 6c 20 76 61 6c 75 65 20 6f 66 20 70 49 6e 33 2d  l value of pIn3-
dba0: 3e 66 6c 61 67 73 20 2a 2f 0a 0a 20 20 70 49 6e  >flags */..  pIn
dbb0: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
dbc0: 31 5d 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d  1];.  pIn3 = &aM
dbd0: 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 66  em[pOp->p3];.  f
dbe0: 6c 61 67 73 31 20 3d 20 70 49 6e 31 2d 3e 66 6c  lags1 = pIn1->fl
dbf0: 61 67 73 3b 0a 20 20 66 6c 61 67 73 33 20 3d 20  ags;.  flags3 = 
dc00: 70 49 6e 33 2d 3e 66 6c 61 67 73 3b 0a 20 20 69  pIn3->flags;.  i
dc10: 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
dc20: 7c 20 70 49 6e 33 2d 3e 66 6c 61 67 73 29 26 4d  | pIn3->flags)&M
dc30: 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 2f  EM_Null ){.    /
dc40: 2a 20 4f 6e 65 20 6f 72 20 62 6f 74 68 20 6f 70  * One or both op
dc50: 65 72 61 6e 64 73 20 61 72 65 20 4e 55 4c 4c 20  erands are NULL 
dc60: 2a 2f 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  */.    if( pOp->
dc70: 70 35 20 26 20 53 51 4c 49 54 45 5f 4e 55 4c 4c  p5 & SQLITE_NULL
dc80: 45 51 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49  EQ ){.      /* I
dc90: 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20  f SQLITE_NULLEQ 
dca0: 69 73 20 73 65 74 20 28 77 68 69 63 68 20 77 69  is set (which wi
dcb0: 6c 6c 20 6f 6e 6c 79 20 68 61 70 70 65 6e 20 69  ll only happen i
dcc0: 66 20 74 68 65 20 6f 70 65 72 61 74 6f 72 20 69  f the operator i
dcd0: 73 0a 20 20 20 20 20 20 2a 2a 20 4f 50 5f 45 71  s.      ** OP_Eq
dce0: 20 6f 72 20 4f 50 5f 4e 65 29 20 74 68 65 6e 20   or OP_Ne) then 
dcf0: 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 20 6f 72  take the jump or
dd00: 20 6e 6f 74 20 64 65 70 65 6e 64 69 6e 67 20 6f   not depending o
dd10: 6e 20 77 68 65 74 68 65 72 0a 20 20 20 20 20 20  n whether.      
dd20: 2a 2a 20 6f 72 20 6e 6f 74 20 62 6f 74 68 20 6f  ** or not both o
dd30: 70 65 72 61 6e 64 73 20 61 72 65 20 6e 75 6c 6c  perands are null
dd40: 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
dd50: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70   assert( pOp->op
dd60: 63 6f 64 65 3d 3d 4f 50 5f 45 71 20 7c 7c 20 70  code==OP_Eq || p
dd70: 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e  Op->opcode==OP_N
dd80: 65 20 29 3b 0a 20 20 20 20 20 20 72 65 73 20 3d  e );.      res =
dd90: 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
dda0: 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn3->flags & ME
ddb0: 4d 5f 4e 75 6c 6c 29 3d 3d 30 3b 0a 20 20 20 20  M_Null)==0;.    
ddc0: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20  }else{.      /* 
ddd0: 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73  SQLITE_NULLEQ is
dde0: 20 63 6c 65 61 72 20 61 6e 64 20 61 74 20 6c 65   clear and at le
ddf0: 61 73 74 20 6f 6e 65 20 6f 70 65 72 61 6e 64 20  ast one operand 
de00: 69 73 20 4e 55 4c 4c 2c 0a 20 20 20 20 20 20 2a  is NULL,.      *
de10: 2a 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c  * then the resul
de20: 74 20 69 73 20 61 6c 77 61 79 73 20 4e 55 4c 4c  t is always NULL
de30: 2e 0a 20 20 20 20 20 20 2a 2a 20 54 68 65 20 6a  ..      ** The j
de40: 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 20  ump is taken if 
de50: 74 68 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49  the SQLITE_JUMPI
de60: 46 4e 55 4c 4c 20 62 69 74 20 69 73 20 73 65 74  FNULL bit is set
de70: 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
de80: 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 53   if( pOp->p5 & S
de90: 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 29 7b  QLITE_STOREP2 ){
dea0: 0a 20 20 20 20 20 20 20 20 70 4f 75 74 20 3d 20  .        pOut = 
deb0: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
dec0: 20 20 20 20 20 20 20 20 4d 65 6d 53 65 74 54 79          MemSetTy
ded0: 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d  peFlag(pOut, MEM
dee0: 5f 4e 75 6c 6c 29 3b 0a 20 20 20 20 20 20 20 20  _Null);.        
def0: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
df00: 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20  Op->p2, pOut);. 
df10: 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 70       }else if( p
df20: 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f  Op->p5 & SQLITE_
df30: 4a 55 4d 50 49 46 4e 55 4c 4c 20 29 7b 0a 20 20  JUMPIFNULL ){.  
df40: 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e        pc = pOp->
df50: 70 32 2d 31 3b 0a 20 20 20 20 20 20 7d 0a 20 20  p2-1;.      }.  
df60: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d      break;.    }
df70: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a  .  }else{.    /*
df80: 20 4e 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64   Neither operand
df90: 20 69 73 20 4e 55 4c 4c 2e 20 20 44 6f 20 61 20   is NULL.  Do a 
dfa0: 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 2a 2f 0a 20  comparison. */. 
dfb0: 20 20 20 61 66 66 69 6e 69 74 79 20 3d 20 70 4f     affinity = pO
dfc0: 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 41  p->p5 & SQLITE_A
dfd0: 46 46 5f 4d 41 53 4b 3b 0a 20 20 20 20 69 66 28  FF_MASK;.    if(
dfe0: 20 61 66 66 69 6e 69 74 79 20 29 7b 0a 20 20 20   affinity ){.   
dff0: 20 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79     applyAffinity
e000: 28 70 49 6e 31 2c 20 61 66 66 69 6e 69 74 79 2c  (pIn1, affinity,
e010: 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20   encoding);.    
e020: 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28    applyAffinity(
e030: 70 49 6e 33 2c 20 61 66 66 69 6e 69 74 79 2c 20  pIn3, affinity, 
e040: 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 20  encoding);.     
e050: 20 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46   if( db->mallocF
e060: 61 69 6c 65 64 20 29 20 67 6f 74 6f 20 6e 6f 5f  ailed ) goto no_
e070: 6d 65 6d 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20  mem;.    }..    
e080: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
e090: 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51 20  ype==P4_COLLSEQ 
e0a0: 7c 7c 20 70 4f 70 2d 3e 70 34 2e 70 43 6f 6c 6c  || pOp->p4.pColl
e0b0: 3d 3d 30 20 29 3b 0a 20 20 20 20 45 78 70 61 6e  ==0 );.    Expan
e0c0: 64 42 6c 6f 62 28 70 49 6e 31 29 3b 0a 20 20 20  dBlob(pIn1);.   
e0d0: 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 33   ExpandBlob(pIn3
e0e0: 29 3b 0a 20 20 20 20 72 65 73 20 3d 20 73 71 6c  );.    res = sql
e0f0: 69 74 65 33 4d 65 6d 43 6f 6d 70 61 72 65 28 70  ite3MemCompare(p
e100: 49 6e 33 2c 20 70 49 6e 31 2c 20 70 4f 70 2d 3e  In3, pIn1, pOp->
e110: 70 34 2e 70 43 6f 6c 6c 29 3b 0a 20 20 7d 0a 20  p4.pColl);.  }. 
e120: 20 73 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70   switch( pOp->op
e130: 63 6f 64 65 20 29 7b 0a 20 20 20 20 63 61 73 65  code ){.    case
e140: 20 4f 50 5f 45 71 3a 20 20 20 20 72 65 73 20 3d   OP_Eq:    res =
e150: 20 72 65 73 3d 3d 30 3b 20 20 20 20 20 62 72 65   res==0;     bre
e160: 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f  ak;.    case OP_
e170: 4e 65 3a 20 20 20 20 72 65 73 20 3d 20 72 65 73  Ne:    res = res
e180: 21 3d 30 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a  !=0;     break;.
e190: 20 20 20 20 63 61 73 65 20 4f 50 5f 4c 74 3a 20      case OP_Lt: 
e1a0: 20 20 20 72 65 73 20 3d 20 72 65 73 3c 30 3b 20     res = res<0; 
e1b0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
e1c0: 63 61 73 65 20 4f 50 5f 4c 65 3a 20 20 20 20 72  case OP_Le:    r
e1d0: 65 73 20 3d 20 72 65 73 3c 3d 30 3b 20 20 20 20  es = res<=0;    
e1e0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65   break;.    case
e1f0: 20 4f 50 5f 47 74 3a 20 20 20 20 72 65 73 20 3d   OP_Gt:    res =
e200: 20 72 65 73 3e 30 3b 20 20 20 20 20 20 62 72 65   res>0;      bre
e210: 61 6b 3b 0a 20 20 20 20 64 65 66 61 75 6c 74 3a  ak;.    default:
e220: 20 20 20 20 20 20 20 72 65 73 20 3d 20 72 65 73         res = res
e230: 3e 3d 30 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a  >=0;     break;.
e240: 20 20 7d 0a 0a 20 20 69 66 28 20 70 4f 70 2d 3e    }..  if( pOp->
e250: 70 35 20 26 20 53 51 4c 49 54 45 5f 53 54 4f 52  p5 & SQLITE_STOR
e260: 45 50 32 20 29 7b 0a 20 20 20 20 70 4f 75 74 20  EP2 ){.    pOut 
e270: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
e280: 3b 0a 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f  ;.    memAboutTo
e290: 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b  Change(p, pOut);
e2a0: 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46  .    MemSetTypeF
e2b0: 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e  lag(pOut, MEM_In
e2c0: 74 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e  t);.    pOut->u.
e2d0: 69 20 3d 20 72 65 73 3b 0a 20 20 20 20 52 45 47  i = res;.    REG
e2e0: 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
e2f0: 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20 20 7d 65  >p2, pOut);.  }e
e300: 6c 73 65 20 69 66 28 20 72 65 73 20 29 7b 0a 20  lse if( res ){. 
e310: 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d     pc = pOp->p2-
e320: 31 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 55 6e 64  1;.  }..  /* Und
e330: 6f 20 61 6e 79 20 63 68 61 6e 67 65 73 20 6d 61  o any changes ma
e340: 64 65 20 62 79 20 61 70 70 6c 79 41 66 66 69 6e  de by applyAffin
e350: 69 74 79 28 29 20 74 6f 20 74 68 65 20 69 6e 70  ity() to the inp
e360: 75 74 20 72 65 67 69 73 74 65 72 73 2e 20 2a 2f  ut registers. */
e370: 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d  .  pIn1->flags =
e380: 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 26 7e 4d   (pIn1->flags&~M
e390: 45 4d 5f 54 79 70 65 4d 61 73 6b 29 20 7c 20 28  EM_TypeMask) | (
e3a0: 66 6c 61 67 73 31 26 4d 45 4d 5f 54 79 70 65 4d  flags1&MEM_TypeM
e3b0: 61 73 6b 29 3b 0a 20 20 70 49 6e 33 2d 3e 66 6c  ask);.  pIn3->fl
e3c0: 61 67 73 20 3d 20 28 70 49 6e 33 2d 3e 66 6c 61  ags = (pIn3->fla
e3d0: 67 73 26 7e 4d 45 4d 5f 54 79 70 65 4d 61 73 6b  gs&~MEM_TypeMask
e3e0: 29 20 7c 20 28 66 6c 61 67 73 33 26 4d 45 4d 5f  ) | (flags3&MEM_
e3f0: 54 79 70 65 4d 61 73 6b 29 3b 0a 20 20 62 72 65  TypeMask);.  bre
e400: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
e410: 3a 20 50 65 72 6d 75 74 61 74 69 6f 6e 20 2a 20  : Permutation * 
e420: 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 53  * * P4 *.**.** S
e430: 65 74 20 74 68 65 20 70 65 72 6d 75 74 61 74 69  et the permutati
e440: 6f 6e 20 75 73 65 64 20 62 79 20 74 68 65 20 4f  on used by the O
e450: 50 5f 43 6f 6d 70 61 72 65 20 6f 70 65 72 61 74  P_Compare operat
e460: 6f 72 20 74 6f 20 62 65 20 74 68 65 20 61 72 72  or to be the arr
e470: 61 79 0a 2a 2a 20 6f 66 20 69 6e 74 65 67 65 72  ay.** of integer
e480: 73 20 69 6e 20 50 34 2e 0a 2a 2a 0a 2a 2a 20 54  s in P4..**.** T
e490: 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e 20 69  he permutation i
e4a0: 73 20 6f 6e 6c 79 20 76 61 6c 69 64 20 75 6e 74  s only valid unt
e4b0: 69 6c 20 74 68 65 20 6e 65 78 74 20 4f 50 5f 50  il the next OP_P
e4c0: 65 72 6d 75 74 61 74 69 6f 6e 2c 20 4f 50 5f 43  ermutation, OP_C
e4d0: 6f 6d 70 61 72 65 2c 0a 2a 2a 20 4f 50 5f 48 61  ompare,.** OP_Ha
e4e0: 6c 74 2c 20 6f 72 20 4f 50 5f 52 65 73 75 6c 74  lt, or OP_Result
e4f0: 52 6f 77 2e 20 20 54 79 70 69 63 61 6c 6c 79 20  Row.  Typically 
e500: 74 68 65 20 4f 50 5f 50 65 72 6d 75 74 61 74 69  the OP_Permutati
e510: 6f 6e 20 73 68 6f 75 6c 64 20 6f 63 63 75 72 0a  on should occur.
e520: 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 70  ** immediately p
e530: 72 69 6f 72 20 74 6f 20 74 68 65 20 4f 50 5f 43  rior to the OP_C
e540: 6f 6d 70 61 72 65 2e 0a 2a 2f 0a 63 61 73 65 20  ompare..*/.case 
e550: 4f 50 5f 50 65 72 6d 75 74 61 74 69 6f 6e 3a 20  OP_Permutation: 
e560: 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  {.  assert( pOp-
e570: 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 41  >p4type==P4_INTA
e580: 52 52 41 59 20 29 3b 0a 20 20 61 73 73 65 72 74  RRAY );.  assert
e590: 28 20 70 4f 70 2d 3e 70 34 2e 61 69 20 29 3b 0a  ( pOp->p4.ai );.
e5a0: 20 20 61 50 65 72 6d 75 74 65 20 3d 20 70 4f 70    aPermute = pOp
e5b0: 2d 3e 70 34 2e 61 69 3b 0a 20 20 62 72 65 61 6b  ->p4.ai;.  break
e5c0: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
e5d0: 43 6f 6d 70 61 72 65 20 50 31 20 50 32 20 50 33  Compare P1 P2 P3
e5e0: 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70   P4 *.**.** Comp
e5f0: 61 72 65 20 74 77 6f 20 76 65 63 74 6f 72 73 20  are two vectors 
e600: 6f 66 20 72 65 67 69 73 74 65 72 73 20 69 6e 20  of registers in 
e610: 72 65 67 28 50 31 29 2e 2e 72 65 67 28 50 31 2b  reg(P1)..reg(P1+
e620: 50 33 2d 31 29 20 28 63 61 6c 6c 20 74 68 69 73  P3-1) (call this
e630: 0a 2a 2a 20 76 65 63 74 6f 72 20 22 41 22 29 20  .** vector "A") 
e640: 61 6e 64 20 69 6e 20 72 65 67 28 50 32 29 2e 2e  and in reg(P2)..
e650: 72 65 67 28 50 32 2b 50 33 2d 31 29 20 28 22 42  reg(P2+P3-1) ("B
e660: 22 29 2e 20 20 53 61 76 65 20 74 68 65 20 72 65  ").  Save the re
e670: 73 75 6c 74 20 6f 66 0a 2a 2a 20 74 68 65 20 63  sult of.** the c
e680: 6f 6d 70 61 72 69 73 6f 6e 20 66 6f 72 20 75 73  omparison for us
e690: 65 20 62 79 20 74 68 65 20 6e 65 78 74 20 4f 50  e by the next OP
e6a0: 5f 4a 75 6d 70 20 69 6e 73 74 72 75 63 74 2e 0a  _Jump instruct..
e6b0: 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 4b 65  **.** P4 is a Ke
e6c0: 79 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65 20  yInfo structure 
e6d0: 74 68 61 74 20 64 65 66 69 6e 65 73 20 63 6f 6c  that defines col
e6e0: 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73  lating sequences
e6f0: 20 61 6e 64 20 73 6f 72 74 0a 2a 2a 20 6f 72 64   and sort.** ord
e700: 65 72 73 20 66 6f 72 20 74 68 65 20 63 6f 6d 70  ers for the comp
e710: 61 72 69 73 6f 6e 2e 20 20 54 68 65 20 70 65 72  arison.  The per
e720: 6d 75 74 61 74 69 6f 6e 20 61 70 70 6c 69 65 73  mutation applies
e730: 20 74 6f 20 72 65 67 69 73 74 65 72 73 0a 2a 2a   to registers.**
e740: 20 6f 6e 6c 79 2e 20 20 54 68 65 20 4b 65 79 49   only.  The KeyI
e750: 6e 66 6f 20 65 6c 65 6d 65 6e 74 73 20 61 72 65  nfo elements are
e760: 20 75 73 65 64 20 73 65 71 75 65 6e 74 69 61 6c   used sequential
e770: 6c 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f  ly..**.** The co
e780: 6d 70 61 72 69 73 6f 6e 20 69 73 20 61 20 73 6f  mparison is a so
e790: 72 74 20 63 6f 6d 70 61 72 69 73 6f 6e 2c 20 73  rt comparison, s
e7a0: 6f 20 4e 55 4c 4c 73 20 63 6f 6d 70 61 72 65 20  o NULLs compare 
e7b0: 65 71 75 61 6c 2c 0a 2a 2a 20 4e 55 4c 4c 73 20  equal,.** NULLs 
e7c0: 61 72 65 20 6c 65 73 73 20 74 68 61 6e 20 6e 75  are less than nu
e7d0: 6d 62 65 72 73 2c 20 6e 75 6d 62 65 72 73 20 61  mbers, numbers a
e7e0: 72 65 20 6c 65 73 73 20 74 68 61 6e 20 73 74 72  re less than str
e7f0: 69 6e 67 73 2c 0a 2a 2a 20 61 6e 64 20 73 74 72  ings,.** and str
e800: 69 6e 67 73 20 61 72 65 20 6c 65 73 73 20 74 68  ings are less th
e810: 61 6e 20 62 6c 6f 62 73 2e 0a 2a 2f 0a 63 61 73  an blobs..*/.cas
e820: 65 20 4f 50 5f 43 6f 6d 70 61 72 65 3a 20 7b 0a  e OP_Compare: {.
e830: 20 20 69 6e 74 20 6e 3b 0a 20 20 69 6e 74 20 69    int n;.  int i
e840: 3b 0a 20 20 69 6e 74 20 70 31 3b 0a 20 20 69 6e  ;.  int p1;.  in
e850: 74 20 70 32 3b 0a 20 20 63 6f 6e 73 74 20 4b 65  t p2;.  const Ke
e860: 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b  yInfo *pKeyInfo;
e870: 0a 20 20 69 6e 74 20 69 64 78 3b 0a 20 20 43 6f  .  int idx;.  Co
e880: 6c 6c 53 65 71 20 2a 70 43 6f 6c 6c 3b 20 20 20  llSeq *pColl;   
e890: 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65   /* Collating se
e8a0: 71 75 65 6e 63 65 20 74 6f 20 75 73 65 20 6f 6e  quence to use on
e8b0: 20 74 68 69 73 20 74 65 72 6d 20 2a 2f 0a 20 20   this term */.  
e8c0: 69 6e 74 20 62 52 65 76 3b 20 20 20 20 20 20 20  int bRev;       
e8d0: 20 20 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 44     /* True for D
e8e0: 45 53 43 45 4e 44 49 4e 47 20 73 6f 72 74 20 6f  ESCENDING sort o
e8f0: 72 64 65 72 20 2a 2f 0a 0a 20 20 6e 20 3d 20 70  rder */..  n = p
e900: 4f 70 2d 3e 70 33 3b 0a 20 20 70 4b 65 79 49 6e  Op->p3;.  pKeyIn
e910: 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65  fo = pOp->p4.pKe
e920: 79 49 6e 66 6f 3b 0a 20 20 61 73 73 65 72 74 28  yInfo;.  assert(
e930: 20 6e 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74   n>0 );.  assert
e940: 28 20 70 4b 65 79 49 6e 66 6f 21 3d 30 20 29 3b  ( pKeyInfo!=0 );
e950: 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b  .  p1 = pOp->p1;
e960: 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b  .  p2 = pOp->p2;
e970: 0a 23 69 66 20 53 51 4c 49 54 45 5f 44 45 42 55  .#if SQLITE_DEBU
e980: 47 0a 20 20 69 66 28 20 61 50 65 72 6d 75 74 65  G.  if( aPermute
e990: 20 29 7b 0a 20 20 20 20 69 6e 74 20 6b 2c 20 6d   ){.    int k, m
e9a0: 78 20 3d 20 30 3b 0a 20 20 20 20 66 6f 72 28 6b  x = 0;.    for(k
e9b0: 3d 30 3b 20 6b 3c 6e 3b 20 6b 2b 2b 29 20 69 66  =0; k<n; k++) if
e9c0: 28 20 61 50 65 72 6d 75 74 65 5b 6b 5d 3e 6d 78  ( aPermute[k]>mx
e9d0: 20 29 20 6d 78 20 3d 20 61 50 65 72 6d 75 74 65   ) mx = aPermute
e9e0: 5b 6b 5d 3b 0a 20 20 20 20 61 73 73 65 72 74 28  [k];.    assert(
e9f0: 20 70 31 3e 30 20 26 26 20 70 31 2b 6d 78 3c 3d   p1>0 && p1+mx<=
ea00: 70 2d 3e 6e 4d 65 6d 2b 31 20 29 3b 0a 20 20 20  p->nMem+1 );.   
ea10: 20 61 73 73 65 72 74 28 20 70 32 3e 30 20 26 26   assert( p2>0 &&
ea20: 20 70 32 2b 6d 78 3c 3d 70 2d 3e 6e 4d 65 6d 2b   p2+mx<=p->nMem+
ea30: 31 20 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  1 );.  }else{.  
ea40: 20 20 61 73 73 65 72 74 28 20 70 31 3e 30 20 26    assert( p1>0 &
ea50: 26 20 70 31 2b 6e 3c 3d 70 2d 3e 6e 4d 65 6d 2b  & p1+n<=p->nMem+
ea60: 31 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  1 );.    assert(
ea70: 20 70 32 3e 30 20 26 26 20 70 32 2b 6e 3c 3d 70   p2>0 && p2+n<=p
ea80: 2d 3e 6e 4d 65 6d 2b 31 20 29 3b 0a 20 20 7d 0a  ->nMem+1 );.  }.
ea90: 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
eaa0: 5f 44 45 42 55 47 20 2a 2f 0a 20 20 66 6f 72 28  _DEBUG */.  for(
eab0: 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b 2b 29 7b 0a  i=0; i<n; i++){.
eac0: 20 20 20 20 69 64 78 20 3d 20 61 50 65 72 6d 75      idx = aPermu
ead0: 74 65 20 3f 20 61 50 65 72 6d 75 74 65 5b 69 5d  te ? aPermute[i]
eae0: 20 3a 20 69 3b 0a 20 20 20 20 61 73 73 65 72 74   : i;.    assert
eaf0: 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d  ( memIsValid(&aM
eb00: 65 6d 5b 70 31 2b 69 64 78 5d 29 20 29 3b 0a 20  em[p1+idx]) );. 
eb10: 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
eb20: 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 32 2b 69  Valid(&aMem[p2+i
eb30: 64 78 5d 29 20 29 3b 0a 20 20 20 20 52 45 47 49  dx]) );.    REGI
eb40: 53 54 45 52 5f 54 52 41 43 45 28 70 31 2b 69 64  STER_TRACE(p1+id
eb50: 78 2c 20 26 61 4d 65 6d 5b 70 31 2b 69 64 78 5d  x, &aMem[p1+idx]
eb60: 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f  );.    REGISTER_
eb70: 54 52 41 43 45 28 70 32 2b 69 64 78 2c 20 26 61  TRACE(p2+idx, &a
eb80: 4d 65 6d 5b 70 32 2b 69 64 78 5d 29 3b 0a 20 20  Mem[p2+idx]);.  
eb90: 20 20 61 73 73 65 72 74 28 20 69 3c 70 4b 65 79    assert( i<pKey
eba0: 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64 20 29 3b 0a  Info->nField );.
ebb0: 20 20 20 20 70 43 6f 6c 6c 20 3d 20 70 4b 65 79      pColl = pKey
ebc0: 49 6e 66 6f 2d 3e 61 43 6f 6c 6c 5b 69 5d 3b 0a  Info->aColl[i];.
ebd0: 20 20 20 20 62 52 65 76 20 3d 20 70 4b 65 79 49      bRev = pKeyI
ebe0: 6e 66 6f 2d 3e 61 53 6f 72 74 4f 72 64 65 72 5b  nfo->aSortOrder[
ebf0: 69 5d 3b 0a 20 20 20 20 69 43 6f 6d 70 61 72 65  i];.    iCompare
ec00: 20 3d 20 73 71 6c 69 74 65 33 4d 65 6d 43 6f 6d   = sqlite3MemCom
ec10: 70 61 72 65 28 26 61 4d 65 6d 5b 70 31 2b 69 64  pare(&aMem[p1+id
ec20: 78 5d 2c 20 26 61 4d 65 6d 5b 70 32 2b 69 64 78  x], &aMem[p2+idx
ec30: 5d 2c 20 70 43 6f 6c 6c 29 3b 0a 20 20 20 20 69  ], pColl);.    i
ec40: 66 28 20 69 43 6f 6d 70 61 72 65 20 29 7b 0a 20  f( iCompare ){. 
ec50: 20 20 20 20 20 69 66 28 20 62 52 65 76 20 29 20       if( bRev ) 
ec60: 69 43 6f 6d 70 61 72 65 20 3d 20 2d 69 43 6f 6d  iCompare = -iCom
ec70: 70 61 72 65 3b 0a 20 20 20 20 20 20 62 72 65 61  pare;.      brea
ec80: 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 61  k;.    }.  }.  a
ec90: 50 65 72 6d 75 74 65 20 3d 20 30 3b 0a 20 20 62  Permute = 0;.  b
eca0: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
ecb0: 64 65 3a 20 4a 75 6d 70 20 50 31 20 50 32 20 50  de: Jump P1 P2 P
ecc0: 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70  3 * *.**.** Jump
ecd0: 20 74 6f 20 74 68 65 20 69 6e 73 74 72 75 63 74   to the instruct
ece0: 69 6f 6e 20 61 74 20 61 64 64 72 65 73 73 20 50  ion at address P
ecf0: 31 2c 20 50 32 2c 20 6f 72 20 50 33 20 64 65 70  1, P2, or P3 dep
ed00: 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65  ending on whethe
ed10: 72 0a 2a 2a 20 69 6e 20 74 68 65 20 6d 6f 73 74  r.** in the most
ed20: 20 72 65 63 65 6e 74 20 4f 50 5f 43 6f 6d 70 61   recent OP_Compa
ed30: 72 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 74  re instruction t
ed40: 68 65 20 50 31 20 76 65 63 74 6f 72 20 77 61 73  he P1 vector was
ed50: 20 6c 65 73 73 20 74 68 61 6e 0a 2a 2a 20 65 71   less than.** eq
ed60: 75 61 6c 20 74 6f 2c 20 6f 72 20 67 72 65 61 74  ual to, or great
ed70: 65 72 20 74 68 61 6e 20 74 68 65 20 50 32 20 76  er than the P2 v
ed80: 65 63 74 6f 72 2c 20 72 65 73 70 65 63 74 69 76  ector, respectiv
ed90: 65 6c 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ely..*/.case OP_
eda0: 4a 75 6d 70 3a 20 7b 20 20 20 20 20 20 20 20 20  Jump: {         
edb0: 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20      /* jump */. 
edc0: 20 69 66 28 20 69 43 6f 6d 70 61 72 65 3c 30 20   if( iCompare<0 
edd0: 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  ){.    pc = pOp-
ede0: 3e 70 31 20 2d 20 31 3b 0a 20 20 7d 65 6c 73 65  >p1 - 1;.  }else
edf0: 20 69 66 28 20 69 43 6f 6d 70 61 72 65 3d 3d 30   if( iCompare==0
ee00: 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70   ){.    pc = pOp
ee10: 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 65 6c 73  ->p2 - 1;.  }els
ee20: 65 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  e{.    pc = pOp-
ee30: 3e 70 33 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62  >p3 - 1;.  }.  b
ee40: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
ee50: 64 65 3a 20 41 6e 64 20 50 31 20 50 32 20 50 33  de: And P1 P2 P3
ee60: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20   * *.**.** Take 
ee70: 74 68 65 20 6c 6f 67 69 63 61 6c 20 41 4e 44 20  the logical AND 
ee80: 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e  of the values in
ee90: 20 72 65 67 69 73 74 65 72 73 20 50 31 20 61 6e   registers P1 an
eea0: 64 20 50 32 20 61 6e 64 0a 2a 2a 20 77 72 69 74  d P2 and.** writ
eeb0: 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 74  e the result int
eec0: 6f 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  o register P3..*
eed0: 2a 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 50  *.** If either P
eee0: 31 20 6f 72 20 50 32 20 69 73 20 30 20 28 66 61  1 or P2 is 0 (fa
eef0: 6c 73 65 29 20 74 68 65 6e 20 74 68 65 20 72 65  lse) then the re
ef00: 73 75 6c 74 20 69 73 20 30 20 65 76 65 6e 20 69  sult is 0 even i
ef10: 66 0a 2a 2a 20 74 68 65 20 6f 74 68 65 72 20 69  f.** the other i
ef20: 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2e 20 20 41  nput is NULL.  A
ef30: 20 4e 55 4c 4c 20 61 6e 64 20 74 72 75 65 20 6f   NULL and true o
ef40: 72 20 74 77 6f 20 4e 55 4c 4c 73 20 67 69 76 65  r two NULLs give
ef50: 0a 2a 2a 20 61 20 4e 55 4c 4c 20 6f 75 74 70 75  .** a NULL outpu
ef60: 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  t..*/./* Opcode:
ef70: 20 4f 72 20 50 31 20 50 32 20 50 33 20 2a 20 2a   Or P1 P2 P3 * *
ef80: 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20  .**.** Take the 
ef90: 6c 6f 67 69 63 61 6c 20 4f 52 20 6f 66 20 74 68  logical OR of th
efa0: 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69  e values in regi
efb0: 73 74 65 72 20 50 31 20 61 6e 64 20 50 32 20 61  ster P1 and P2 a
efc0: 6e 64 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65 20  nd.** store the 
efd0: 61 6e 73 77 65 72 20 69 6e 20 72 65 67 69 73 74  answer in regist
efe0: 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  er P3..**.** If 
eff0: 65 69 74 68 65 72 20 50 31 20 6f 72 20 50 32 20  either P1 or P2 
f000: 69 73 20 6e 6f 6e 7a 65 72 6f 20 28 74 72 75 65  is nonzero (true
f010: 29 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c  ) then the resul
f020: 74 20 69 73 20 31 20 28 74 72 75 65 29 0a 2a 2a  t is 1 (true).**
f030: 20 65 76 65 6e 20 69 66 20 74 68 65 20 6f 74 68   even if the oth
f040: 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c  er input is NULL
f050: 2e 20 20 41 20 4e 55 4c 4c 20 61 6e 64 20 66 61  .  A NULL and fa
f060: 6c 73 65 20 6f 72 20 74 77 6f 20 4e 55 4c 4c 73  lse or two NULLs
f070: 0a 2a 2a 20 67 69 76 65 20 61 20 4e 55 4c 4c 20  .** give a NULL 
f080: 6f 75 74 70 75 74 2e 0a 2a 2f 0a 63 61 73 65 20  output..*/.case 
f090: 4f 50 5f 41 6e 64 3a 20 20 20 20 20 20 20 20 20  OP_And:         
f0a0: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
f0b0: 54 4b 5f 41 4e 44 2c 20 69 6e 31 2c 20 69 6e 32  TK_AND, in1, in2
f0c0: 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f  , out3 */.case O
f0d0: 50 5f 4f 72 3a 20 7b 20 20 20 20 20 20 20 20 20  P_Or: {         
f0e0: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
f0f0: 4b 5f 4f 52 2c 20 69 6e 31 2c 20 69 6e 32 2c 20  K_OR, in1, in2, 
f100: 6f 75 74 33 20 2a 2f 0a 20 20 69 6e 74 20 76 31  out3 */.  int v1
f110: 3b 20 20 20 20 2f 2a 20 4c 65 66 74 20 6f 70 65  ;    /* Left ope
f120: 72 61 6e 64 3a 20 20 30 3d 3d 46 41 4c 53 45 2c  rand:  0==FALSE,
f130: 20 31 3d 3d 54 52 55 45 2c 20 32 3d 3d 55 4e 4b   1==TRUE, 2==UNK
f140: 4e 4f 57 4e 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a  NOWN or NULL */.
f150: 20 20 69 6e 74 20 76 32 3b 20 20 20 20 2f 2a 20    int v2;    /* 
f160: 52 69 67 68 74 20 6f 70 65 72 61 6e 64 3a 20 30  Right operand: 0
f170: 3d 3d 46 41 4c 53 45 2c 20 31 3d 3d 54 52 55 45  ==FALSE, 1==TRUE
f180: 2c 20 32 3d 3d 55 4e 4b 4e 4f 57 4e 20 6f 72 20  , 2==UNKNOWN or 
f190: 4e 55 4c 4c 20 2a 2f 0a 0a 20 20 70 49 6e 31 20  NULL */..  pIn1 
f1a0: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
f1b0: 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c  ;.  if( pIn1->fl
f1c0: 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29  ags & MEM_Null )
f1d0: 7b 0a 20 20 20 20 76 31 20 3d 20 32 3b 0a 20 20  {.    v1 = 2;.  
f1e0: 7d 65 6c 73 65 7b 0a 20 20 20 20 76 31 20 3d 20  }else{.    v1 = 
f1f0: 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61  sqlite3VdbeIntVa
f200: 6c 75 65 28 70 49 6e 31 29 21 3d 30 3b 0a 20 20  lue(pIn1)!=0;.  
f210: 7d 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d  }.  pIn2 = &aMem
f220: 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 69 66 28  [pOp->p2];.  if(
f230: 20 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn2->flags & M
f240: 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 76  EM_Null ){.    v
f250: 32 20 3d 20 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a  2 = 2;.  }else{.
f260: 20 20 20 20 76 32 20 3d 20 73 71 6c 69 74 65 33      v2 = sqlite3
f270: 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e  VdbeIntValue(pIn
f280: 32 29 21 3d 30 3b 0a 20 20 7d 0a 20 20 69 66 28  2)!=0;.  }.  if(
f290: 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
f2a0: 5f 41 6e 64 20 29 7b 0a 20 20 20 20 73 74 61 74  _And ){.    stat
f2b0: 69 63 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65  ic const unsigne
f2c0: 64 20 63 68 61 72 20 61 6e 64 5f 6c 6f 67 69 63  d char and_logic
f2d0: 5b 5d 20 3d 20 7b 20 30 2c 20 30 2c 20 30 2c 20  [] = { 0, 0, 0, 
f2e0: 30 2c 20 31 2c 20 32 2c 20 30 2c 20 32 2c 20 32  0, 1, 2, 0, 2, 2
f2f0: 20 7d 3b 0a 20 20 20 20 76 31 20 3d 20 61 6e 64   };.    v1 = and
f300: 5f 6c 6f 67 69 63 5b 76 31 2a 33 2b 76 32 5d 3b  _logic[v1*3+v2];
f310: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 74  .  }else{.    st
f320: 61 74 69 63 20 63 6f 6e 73 74 20 75 6e 73 69 67  atic const unsig
f330: 6e 65 64 20 63 68 61 72 20 6f 72 5f 6c 6f 67 69  ned char or_logi
f340: 63 5b 5d 20 3d 20 7b 20 30 2c 20 31 2c 20 32 2c  c[] = { 0, 1, 2,
f350: 20 31 2c 20 31 2c 20 31 2c 20 32 2c 20 31 2c 20   1, 1, 1, 2, 1, 
f360: 32 20 7d 3b 0a 20 20 20 20 76 31 20 3d 20 6f 72  2 };.    v1 = or
f370: 5f 6c 6f 67 69 63 5b 76 31 2a 33 2b 76 32 5d 3b  _logic[v1*3+v2];
f380: 0a 20 20 7d 0a 20 20 70 4f 75 74 20 3d 20 26 61  .  }.  pOut = &a
f390: 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
f3a0: 69 66 28 20 76 31 3d 3d 32 20 29 7b 0a 20 20 20  if( v1==2 ){.   
f3b0: 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
f3c0: 70 4f 75 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b  pOut, MEM_Null);
f3d0: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 4f  .  }else{.    pO
f3e0: 75 74 2d 3e 75 2e 69 20 3d 20 76 31 3b 0a 20 20  ut->u.i = v1;.  
f3f0: 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
f400: 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b  (pOut, MEM_Int);
f410: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
f420: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 20  ./* Opcode: Not 
f430: 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
f440: 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68 65 20  * Interpret the 
f450: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
f460: 72 20 50 31 20 61 73 20 61 20 62 6f 6f 6c 65 61  r P1 as a boolea
f470: 6e 20 76 61 6c 75 65 2e 20 20 53 74 6f 72 65 20  n value.  Store 
f480: 74 68 65 0a 2a 2a 20 62 6f 6f 6c 65 61 6e 20 63  the.** boolean c
f490: 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e 20 72 65 67  omplement in reg
f4a0: 69 73 74 65 72 20 50 32 2e 20 20 49 66 20 74 68  ister P2.  If th
f4b0: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
f4c0: 74 65 72 20 50 31 20 69 73 20 0a 2a 2a 20 4e 55  ter P1 is .** NU
f4d0: 4c 4c 2c 20 74 68 65 6e 20 61 20 4e 55 4c 4c 20  LL, then a NULL 
f4e0: 69 73 20 73 74 6f 72 65 64 20 69 6e 20 50 32 2e  is stored in P2.
f4f0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 3a  .*/.case OP_Not:
f500: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
f510: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
f520: 4e 4f 54 2c 20 69 6e 31 2c 20 6f 75 74 32 20 2a  NOT, in1, out2 *
f530: 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
f540: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75  [pOp->p1];.  pOu
f550: 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
f560: 32 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e  2];.  if( pIn1->
f570: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
f580: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
f590: 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f  dbeMemSetNull(pO
f5a0: 75 74 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  ut);.  }else{.  
f5b0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
f5c0: 53 65 74 49 6e 74 36 34 28 70 4f 75 74 2c 20 21  SetInt64(pOut, !
f5d0: 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61  sqlite3VdbeIntVa
f5e0: 6c 75 65 28 70 49 6e 31 29 29 3b 0a 20 20 7d 0a  lue(pIn1));.  }.
f5f0: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
f600: 70 63 6f 64 65 3a 20 42 69 74 4e 6f 74 20 50 31  pcode: BitNot P1
f610: 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
f620: 49 6e 74 65 72 70 72 65 74 20 74 68 65 20 63 6f  Interpret the co
f630: 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65  ntent of registe
f640: 72 20 50 31 20 61 73 20 61 6e 20 69 6e 74 65 67  r P1 as an integ
f650: 65 72 2e 20 20 53 74 6f 72 65 20 74 68 65 0a 2a  er.  Store the.*
f660: 2a 20 6f 6e 65 73 2d 63 6f 6d 70 6c 65 6d 65 6e  * ones-complemen
f670: 74 20 6f 66 20 74 68 65 20 50 31 20 76 61 6c 75  t of the P1 valu
f680: 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  e into register 
f690: 50 32 2e 20 20 49 66 20 50 31 20 68 6f 6c 64 73  P2.  If P1 holds
f6a0: 0a 2a 2a 20 61 20 4e 55 4c 4c 20 74 68 65 6e 20  .** a NULL then 
f6b0: 73 74 6f 72 65 20 61 20 4e 55 4c 4c 20 69 6e 20  store a NULL in 
f6c0: 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 42  P2..*/.case OP_B
f6d0: 69 74 4e 6f 74 3a 20 7b 20 20 20 20 20 20 20 20  itNot: {        
f6e0: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
f6f0: 54 4b 5f 42 49 54 4e 4f 54 2c 20 69 6e 31 2c 20  TK_BITNOT, in1, 
f700: 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d  out2 */.  pIn1 =
f710: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
f720: 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b  .  pOut = &aMem[
f730: 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 69 66 28 20  pOp->p2];.  if( 
f740: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
f750: 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 73 71  M_Null ){.    sq
f760: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e  lite3VdbeMemSetN
f770: 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 7d 65 6c  ull(pOut);.  }el
f780: 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  se{.    sqlite3V
f790: 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 70  dbeMemSetInt64(p
f7a0: 4f 75 74 2c 20 7e 73 71 6c 69 74 65 33 56 64 62  Out, ~sqlite3Vdb
f7b0: 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 29  eIntValue(pIn1))
f7c0: 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
f7d0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 20  ../* Opcode: If 
f7e0: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
f7f0: 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66  ** Jump to P2 if
f800: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
f810: 67 69 73 74 65 72 20 50 31 20 69 73 20 74 72 75  gister P1 is tru
f820: 65 2e 20 20 54 68 65 20 76 61 6c 75 65 20 69 73  e.  The value is
f830: 0a 2a 2a 20 69 73 20 63 6f 6e 73 69 64 65 72 65  .** is considere
f840: 64 20 74 72 75 65 20 69 66 20 69 74 20 69 73 20  d true if it is 
f850: 6e 75 6d 65 72 69 63 20 61 6e 64 20 6e 6f 6e 2d  numeric and non-
f860: 7a 65 72 6f 2e 20 20 49 66 20 74 68 65 20 76 61  zero.  If the va
f870: 6c 75 65 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20  lue.** in P1 is 
f880: 4e 55 4c 4c 20 74 68 65 6e 20 74 61 6b 65 20 74  NULL then take t
f890: 68 65 20 6a 75 6d 70 20 69 66 20 50 33 20 69 73  he jump if P3 is
f8a0: 20 74 72 75 65 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63   true..*/./* Opc
f8b0: 6f 64 65 3a 20 49 66 4e 6f 74 20 50 31 20 50 32  ode: IfNot P1 P2
f8c0: 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75   P3 * *.**.** Ju
f8d0: 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68 65 20  mp to P2 if the 
f8e0: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
f8f0: 72 20 50 31 20 69 73 20 46 61 6c 73 65 2e 20 20  r P1 is False.  
f900: 54 68 65 20 76 61 6c 75 65 20 69 73 0a 2a 2a 20  The value is.** 
f910: 69 73 20 63 6f 6e 73 69 64 65 72 65 64 20 74 72  is considered tr
f920: 75 65 20 69 66 20 69 74 20 68 61 73 20 61 20 6e  ue if it has a n
f930: 75 6d 65 72 69 63 20 76 61 6c 75 65 20 6f 66 20  umeric value of 
f940: 7a 65 72 6f 2e 20 20 49 66 20 74 68 65 20 76 61  zero.  If the va
f950: 6c 75 65 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20  lue.** in P1 is 
f960: 4e 55 4c 4c 20 74 68 65 6e 20 74 61 6b 65 20 74  NULL then take t
f970: 68 65 20 6a 75 6d 70 20 69 66 20 50 33 20 69 73  he jump if P3 is
f980: 20 74 72 75 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f   true..*/.case O
f990: 50 5f 49 66 3a 20 20 20 20 20 20 20 20 20 20 20  P_If:           
f9a0: 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
f9b0: 6e 31 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66  n1 */.case OP_If
f9c0: 4e 6f 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20  Not: {          
f9d0: 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a    /* jump, in1 *
f9e0: 2f 0a 20 20 69 6e 74 20 63 3b 0a 20 20 70 49 6e  /.  int c;.  pIn
f9f0: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
fa00: 31 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e  1];.  if( pIn1->
fa10: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
fa20: 20 29 7b 0a 20 20 20 20 63 20 3d 20 70 4f 70 2d   ){.    c = pOp-
fa30: 3e 70 33 3b 0a 20 20 7d 65 6c 73 65 7b 0a 23 69  >p3;.  }else{.#i
fa40: 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fdef SQLITE_OMIT
fa50: 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a  _FLOATING_POINT.
fa60: 20 20 20 20 63 20 3d 20 73 71 6c 69 74 65 33 56      c = sqlite3V
fa70: 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31  dbeIntValue(pIn1
fa80: 29 21 3d 30 3b 0a 23 65 6c 73 65 0a 20 20 20 20  )!=0;.#else.    
fa90: 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 52  c = sqlite3VdbeR
faa0: 65 61 6c 56 61 6c 75 65 28 70 49 6e 31 29 21 3d  ealValue(pIn1)!=
fab0: 30 2e 30 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20  0.0;.#endif.    
fac0: 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  if( pOp->opcode=
fad0: 3d 4f 50 5f 49 66 4e 6f 74 20 29 20 63 20 3d 20  =OP_IfNot ) c = 
fae0: 21 63 3b 0a 20 20 7d 0a 20 20 69 66 28 20 63 20  !c;.  }.  if( c 
faf0: 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  ){.    pc = pOp-
fb00: 3e 70 32 2d 31 3b 0a 20 20 7d 0a 20 20 62 72 65  >p2-1;.  }.  bre
fb10: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
fb20: 3a 20 49 73 4e 75 6c 6c 20 50 31 20 50 32 20 2a  : IsNull P1 P2 *
fb30: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20   * *.**.** Jump 
fb40: 74 6f 20 50 32 20 69 66 20 74 68 65 20 76 61 6c  to P2 if the val
fb50: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
fb60: 31 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61  1 is NULL..*/.ca
fb70: 73 65 20 4f 50 5f 49 73 4e 75 6c 6c 3a 20 7b 20  se OP_IsNull: { 
fb80: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
fb90: 6d 65 20 61 73 20 54 4b 5f 49 53 4e 55 4c 4c 2c  me as TK_ISNULL,
fba0: 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20   jump, in1 */.  
fbb0: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
fbc0: 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 28 70 49  ->p1];.  if( (pI
fbd0: 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
fbe0: 4e 75 6c 6c 29 21 3d 30 20 29 7b 0a 20 20 20 20  Null)!=0 ){.    
fbf0: 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
fc00: 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
fc10: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74  ../* Opcode: Not
fc20: 4e 75 6c 6c 20 50 31 20 50 32 20 2a 20 2a 20 2a  Null P1 P2 * * *
fc30: 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50  .**.** Jump to P
fc40: 32 20 69 66 20 74 68 65 20 76 61 6c 75 65 20 69  2 if the value i
fc50: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  n register P1 is
fc60: 20 6e 6f 74 20 4e 55 4c 4c 2e 20 20 0a 2a 2f 0a   not NULL.  .*/.
fc70: 63 61 73 65 20 4f 50 5f 4e 6f 74 4e 75 6c 6c 3a  case OP_NotNull:
fc80: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
fc90: 20 73 61 6d 65 20 61 73 20 54 4b 5f 4e 4f 54 4e   same as TK_NOTN
fca0: 55 4c 4c 2c 20 6a 75 6d 70 2c 20 69 6e 31 20 2a  ULL, jump, in1 *
fcb0: 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
fcc0: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28  [pOp->p1];.  if(
fcd0: 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
fce0: 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a  MEM_Null)==0 ){.
fcf0: 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
fd00: 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61   - 1;.  }.  brea
fd10: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
fd20: 20 43 6f 6c 75 6d 6e 20 50 31 20 50 32 20 50 33   Column P1 P2 P3
fd30: 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 49 6e 74   P4 P5.**.** Int
fd40: 65 72 70 72 65 74 20 74 68 65 20 64 61 74 61 20  erpret the data 
fd50: 74 68 61 74 20 63 75 72 73 6f 72 20 50 31 20 70  that cursor P1 p
fd60: 6f 69 6e 74 73 20 74 6f 20 61 73 20 61 20 73 74  oints to as a st
fd70: 72 75 63 74 75 72 65 20 62 75 69 6c 74 20 75 73  ructure built us
fd80: 69 6e 67 0a 2a 2a 20 74 68 65 20 4d 61 6b 65 52  ing.** the MakeR
fd90: 65 63 6f 72 64 20 69 6e 73 74 72 75 63 74 69 6f  ecord instructio
fda0: 6e 2e 20 20 28 53 65 65 20 74 68 65 20 4d 61 6b  n.  (See the Mak
fdb0: 65 52 65 63 6f 72 64 20 6f 70 63 6f 64 65 20 66  eRecord opcode f
fdc0: 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 0a 2a 2a  or additional.**
fdd0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   information abo
fde0: 75 74 20 74 68 65 20 66 6f 72 6d 61 74 20 6f 66  ut the format of
fdf0: 20 74 68 65 20 64 61 74 61 2e 29 20 20 45 78 74   the data.)  Ext
fe00: 72 61 63 74 20 74 68 65 20 50 32 2d 74 68 20 63  ract the P2-th c
fe10: 6f 6c 75 6d 6e 0a 2a 2a 20 66 72 6f 6d 20 74 68  olumn.** from th
fe20: 69 73 20 72 65 63 6f 72 64 2e 20 20 49 66 20 74  is record.  If t
fe30: 68 65 72 65 20 61 72 65 20 6c 65 73 73 20 74 68  here are less th
fe40: 61 74 20 28 50 32 2b 31 29 20 0a 2a 2a 20 76 61  at (P2+1) .** va
fe50: 6c 75 65 73 20 69 6e 20 74 68 65 20 72 65 63 6f  lues in the reco
fe60: 72 64 2c 20 65 78 74 72 61 63 74 20 61 20 4e 55  rd, extract a NU
fe70: 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 76 61  LL..**.** The va
fe80: 6c 75 65 20 65 78 74 72 61 63 74 65 64 20 69 73  lue extracted is
fe90: 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73   stored in regis
fea0: 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66  ter P3..**.** If
feb0: 20 74 68 65 20 63 6f 6c 75 6d 6e 20 63 6f 6e 74   the column cont
fec0: 61 69 6e 73 20 66 65 77 65 72 20 74 68 61 6e 20  ains fewer than 
fed0: 50 32 20 66 69 65 6c 64 73 2c 20 74 68 65 6e 20  P2 fields, then 
fee0: 65 78 74 72 61 63 74 20 61 20 4e 55 4c 4c 2e 20  extract a NULL. 
fef0: 20 4f 72 2c 0a 2a 2a 20 69 66 20 74 68 65 20 50   Or,.** if the P
ff00: 34 20 61 72 67 75 6d 65 6e 74 20 69 73 20 61 20  4 argument is a 
ff10: 50 34 5f 4d 45 4d 20 75 73 65 20 74 68 65 20 76  P4_MEM use the v
ff20: 61 6c 75 65 20 6f 66 20 74 68 65 20 50 34 20 61  alue of the P4 a
ff30: 72 67 75 6d 65 6e 74 20 61 73 0a 2a 2a 20 74 68  rgument as.** th
ff40: 65 20 72 65 73 75 6c 74 2e 0a 2a 2a 0a 2a 2a 20  e result..**.** 
ff50: 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 43 4c  If the OPFLAG_CL
ff60: 45 41 52 43 41 43 48 45 20 62 69 74 20 69 73 20  EARCACHE bit is 
ff70: 73 65 74 20 6f 6e 20 50 35 20 61 6e 64 20 50 31  set on P5 and P1
ff80: 20 69 73 20 61 20 70 73 65 75 64 6f 2d 74 61 62   is a pseudo-tab
ff90: 6c 65 20 63 75 72 73 6f 72 2c 0a 2a 2a 20 74 68  le cursor,.** th
ffa0: 65 6e 20 74 68 65 20 63 61 63 68 65 20 6f 66 20  en the cache of 
ffb0: 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 72 65  the cursor is re
ffc0: 73 65 74 20 70 72 69 6f 72 20 74 6f 20 65 78 74  set prior to ext
ffd0: 72 61 63 74 69 6e 67 20 74 68 65 20 63 6f 6c 75  racting the colu
ffe0: 6d 6e 2e 0a 2a 2a 20 54 68 65 20 66 69 72 73 74  mn..** The first
fff0: 20 4f 50 5f 43 6f 6c 75 6d 6e 20 61 67 61 69 6e   OP_Column again
10000 73 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c  st a pseudo-tabl
10010 65 20 61 66 74 65 72 20 74 68 65 20 76 61 6c 75  e after the valu
10020 65 20 6f 66 20 74 68 65 20 63 6f 6e 74 65 6e 74  e of the content
10030 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 68 61 73  .** register has
10040 20 63 68 61 6e 67 65 64 20 73 68 6f 75 6c 64 20   changed should 
10050 68 61 76 65 20 74 68 69 73 20 62 69 74 20 73 65  have this bit se
10060 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f  t..*/.case OP_Co
10070 6c 75 6d 6e 3a 20 7b 0a 20 20 75 33 32 20 70 61  lumn: {.  u32 pa
10080 79 6c 6f 61 64 53 69 7a 65 3b 20 20 20 2f 2a 20  yloadSize;   /* 
10090 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20  Number of bytes 
100a0 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f  in the record */
100b0 0a 20 20 69 36 34 20 70 61 79 6c 6f 61 64 53 69  .  i64 payloadSi
100c0 7a 65 36 34 3b 20 2f 2a 20 4e 75 6d 62 65 72 20  ze64; /* Number 
100d0 6f 66 20 62 79 74 65 73 20 69 6e 20 74 68 65 20  of bytes in the 
100e0 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20  record */.  int 
100f0 70 31 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  p1;            /
10100 2a 20 50 31 20 76 61 6c 75 65 20 6f 66 20 74 68  * P1 value of th
10110 65 20 6f 70 63 6f 64 65 20 2a 2f 0a 20 20 69 6e  e opcode */.  in
10120 74 20 70 32 3b 20 20 20 20 20 20 20 20 20 20 20  t p2;           
10130 20 2f 2a 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65   /* column numbe
10140 72 20 74 6f 20 72 65 74 72 69 65 76 65 20 2a 2f  r to retrieve */
10150 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
10160 43 3b 20 20 20 20 2f 2a 20 54 68 65 20 56 44 42  C;    /* The VDB
10170 45 20 63 75 72 73 6f 72 20 2a 2f 0a 20 20 63 68  E cursor */.  ch
10180 61 72 20 2a 7a 52 65 63 3b 20 20 20 20 20 20 20  ar *zRec;       
10190 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 63   /* Pointer to c
101a0 6f 6d 70 6c 65 74 65 20 72 65 63 6f 72 64 2d 64  omplete record-d
101b0 61 74 61 20 2a 2f 0a 20 20 42 74 43 75 72 73 6f  ata */.  BtCurso
101c0 72 20 2a 70 43 72 73 72 3b 20 20 20 2f 2a 20 54  r *pCrsr;   /* T
101d0 68 65 20 42 54 72 65 65 20 63 75 72 73 6f 72 20  he BTree cursor 
101e0 2a 2f 0a 20 20 75 33 32 20 2a 61 54 79 70 65 3b  */.  u32 *aType;
101f0 20 20 20 20 20 20 20 20 2f 2a 20 61 54 79 70 65          /* aType
10200 5b 69 5d 20 68 6f 6c 64 73 20 74 68 65 20 6e 75  [i] holds the nu
10210 6d 65 72 69 63 20 74 79 70 65 20 6f 66 20 74 68  meric type of th
10220 65 20 69 2d 74 68 20 63 6f 6c 75 6d 6e 20 2a 2f  e i-th column */
10230 0a 20 20 75 33 32 20 2a 61 4f 66 66 73 65 74 3b  .  u32 *aOffset;
10240 20 20 20 20 20 20 2f 2a 20 61 4f 66 66 73 65 74        /* aOffset
10250 5b 69 5d 20 69 73 20 6f 66 66 73 65 74 20 74 6f  [i] is offset to
10260 20 73 74 61 72 74 20 6f 66 20 64 61 74 61 20 66   start of data f
10270 6f 72 20 69 2d 74 68 20 63 6f 6c 75 6d 6e 20 2a  or i-th column *
10280 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b 20  /.  int nField; 
10290 20 20 20 20 20 20 20 2f 2a 20 6e 75 6d 62 65 72         /* number
102a0 20 6f 66 20 66 69 65 6c 64 73 20 69 6e 20 74 68   of fields in th
102b0 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e  e record */.  in
102c0 74 20 6c 65 6e 3b 20 20 20 20 20 20 20 20 20 20  t len;          
102d0 20 2f 2a 20 54 68 65 20 6c 65 6e 67 74 68 20 6f   /* The length o
102e0 66 20 74 68 65 20 73 65 72 69 61 6c 69 7a 65 64  f the serialized
102f0 20 64 61 74 61 20 66 6f 72 20 74 68 65 20 63 6f   data for the co
10300 6c 75 6d 6e 20 2a 2f 0a 20 20 69 6e 74 20 69 3b  lumn */.  int i;
10310 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
10320 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a  Loop counter */.
10330 20 20 63 68 61 72 20 2a 7a 44 61 74 61 3b 20 20    char *zData;  
10340 20 20 20 20 20 2f 2a 20 50 61 72 74 20 6f 66 20       /* Part of 
10350 74 68 65 20 72 65 63 6f 72 64 20 62 65 69 6e 67  the record being
10360 20 64 65 63 6f 64 65 64 20 2a 2f 0a 20 20 4d 65   decoded */.  Me
10370 6d 20 2a 70 44 65 73 74 3b 20 20 20 20 20 20 20  m *pDest;       
10380 20 2f 2a 20 57 68 65 72 65 20 74 6f 20 77 72 69   /* Where to wri
10390 74 65 20 74 68 65 20 65 78 74 72 61 63 74 65 64  te the extracted
103a0 20 76 61 6c 75 65 20 2a 2f 0a 20 20 4d 65 6d 20   value */.  Mem 
103b0 73 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 2f  sMem;          /
103c0 2a 20 46 6f 72 20 73 74 6f 72 69 6e 67 20 74 68  * For storing th
103d0 65 20 72 65 63 6f 72 64 20 62 65 69 6e 67 20 64  e record being d
103e0 65 63 6f 64 65 64 20 2a 2f 0a 20 20 75 38 20 2a  ecoded */.  u8 *
103f0 7a 49 64 78 3b 20 20 20 20 20 20 20 20 20 20 2f  zIdx;          /
10400 2a 20 49 6e 64 65 78 20 69 6e 74 6f 20 68 65 61  * Index into hea
10410 64 65 72 20 2a 2f 0a 20 20 75 38 20 2a 7a 45 6e  der */.  u8 *zEn
10420 64 48 64 72 3b 20 20 20 20 20 20 20 2f 2a 20 50  dHdr;       /* P
10430 6f 69 6e 74 65 72 20 74 6f 20 66 69 72 73 74 20  ointer to first 
10440 62 79 74 65 20 61 66 74 65 72 20 74 68 65 20 68  byte after the h
10450 65 61 64 65 72 20 2a 2f 0a 20 20 75 33 32 20 6f  eader */.  u32 o
10460 66 66 73 65 74 3b 20 20 20 20 20 20 20 20 2f 2a  ffset;        /*
10470 20 4f 66 66 73 65 74 20 69 6e 74 6f 20 74 68 65   Offset into the
10480 20 64 61 74 61 20 2a 2f 0a 20 20 75 33 32 20 73   data */.  u32 s
10490 7a 46 69 65 6c 64 3b 20 20 20 20 20 20 20 2f 2a  zField;       /*
104a0 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   Number of bytes
104b0 20 69 6e 20 74 68 65 20 63 6f 6e 74 65 6e 74 20   in the content 
104c0 6f 66 20 61 20 66 69 65 6c 64 20 2a 2f 0a 20 20  of a field */.  
104d0 69 6e 74 20 73 7a 48 64 72 3b 20 20 20 20 20 20  int szHdr;      
104e0 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 74 68     /* Size of th
104f0 65 20 68 65 61 64 65 72 20 73 69 7a 65 20 66 69  e header size fi
10500 65 6c 64 20 61 74 20 73 74 61 72 74 20 6f 66 20  eld at start of 
10510 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20  record */.  int 
10520 61 76 61 69 6c 3b 20 20 20 20 20 20 20 20 20 2f  avail;         /
10530 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  * Number of byte
10540 73 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 64  s of available d
10550 61 74 61 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 52  ata */.  Mem *pR
10560 65 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 50  eg;         /* P
10570 73 65 75 64 6f 54 61 62 6c 65 20 69 6e 70 75 74  seudoTable input
10580 20 72 65 67 69 73 74 65 72 20 2a 2f 0a 0a 0a 20   register */... 
10590 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20   p1 = pOp->p1;. 
105a0 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20   p2 = pOp->p2;. 
105b0 20 70 43 20 3d 20 30 3b 0a 20 20 6d 65 6d 73 65   pC = 0;.  memse
105c0 74 28 26 73 4d 65 6d 2c 20 30 2c 20 73 69 7a 65  t(&sMem, 0, size
105d0 6f 66 28 73 4d 65 6d 29 29 3b 0a 20 20 61 73 73  of(sMem));.  ass
105e0 65 72 74 28 20 70 31 3c 70 2d 3e 6e 43 75 72 73  ert( p1<p->nCurs
105f0 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  or );.  assert( 
10600 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70  pOp->p3>0 && pOp
10610 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b  ->p3<=p->nMem );
10620 0a 20 20 70 44 65 73 74 20 3d 20 26 61 4d 65 6d  .  pDest = &aMem
10630 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d  [pOp->p3];.  mem
10640 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
10650 20 70 44 65 73 74 29 3b 0a 20 20 4d 65 6d 53 65   pDest);.  MemSe
10660 74 54 79 70 65 46 6c 61 67 28 70 44 65 73 74 2c  tTypeFlag(pDest,
10670 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 7a 52   MEM_Null);.  zR
10680 65 63 20 3d 20 30 3b 0a 0a 20 20 2f 2a 20 54 68  ec = 0;..  /* Th
10690 69 73 20 62 6c 6f 63 6b 20 73 65 74 73 20 74 68  is block sets th
106a0 65 20 76 61 72 69 61 62 6c 65 20 70 61 79 6c 6f  e variable paylo
106b0 61 64 53 69 7a 65 20 74 6f 20 62 65 20 74 68 65  adSize to be the
106c0 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66   total number of
106d0 0a 20 20 2a 2a 20 62 79 74 65 73 20 69 6e 20 74  .  ** bytes in t
106e0 68 65 20 72 65 63 6f 72 64 2e 0a 20 20 2a 2a 0a  he record..  **.
106f0 20 20 2a 2a 20 7a 52 65 63 20 69 73 20 73 65 74    ** zRec is set
10700 20 74 6f 20 62 65 20 74 68 65 20 63 6f 6d 70 6c   to be the compl
10710 65 74 65 20 74 65 78 74 20 6f 66 20 74 68 65 20  ete text of the 
10720 72 65 63 6f 72 64 20 69 66 20 69 74 20 69 73 20  record if it is 
10730 61 76 61 69 6c 61 62 6c 65 2e 0a 20 20 2a 2a 20  available..  ** 
10740 54 68 65 20 63 6f 6d 70 6c 65 74 65 20 72 65 63  The complete rec
10750 6f 72 64 20 74 65 78 74 20 69 73 20 61 6c 77 61  ord text is alwa
10760 79 73 20 61 76 61 69 6c 61 62 6c 65 20 66 6f 72  ys available for
10770 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 73 0a 20   pseudo-tables. 
10780 20 2a 2a 20 49 66 20 74 68 65 20 72 65 63 6f 72   ** If the recor
10790 64 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 61  d is stored in a
107a0 20 63 75 72 73 6f 72 2c 20 74 68 65 20 63 6f 6d   cursor, the com
107b0 70 6c 65 74 65 20 72 65 63 6f 72 64 20 74 65 78  plete record tex
107c0 74 0a 20 20 2a 2a 20 6d 69 67 68 74 20 62 65 20  t.  ** might be 
107d0 61 76 61 69 6c 61 62 6c 65 20 69 6e 20 74 68 65  available in the
107e0 20 20 70 43 2d 3e 61 52 6f 77 20 63 61 63 68 65    pC->aRow cache
107f0 2e 20 20 4f 72 20 69 74 20 6d 69 67 68 74 20 6e  .  Or it might n
10800 6f 74 20 62 65 2e 0a 20 20 2a 2a 20 49 66 20 74  ot be..  ** If t
10810 68 65 20 64 61 74 61 20 69 73 20 75 6e 61 76 61  he data is unava
10820 69 6c 61 62 6c 65 2c 20 20 7a 52 65 63 20 69 73  ilable,  zRec is
10830 20 73 65 74 20 74 6f 20 4e 55 4c 4c 2e 0a 20 20   set to NULL..  
10840 2a 2a 0a 20 20 2a 2a 20 57 65 20 61 6c 73 6f 20  **.  ** We also 
10850 63 6f 6d 70 75 74 65 20 74 68 65 20 6e 75 6d 62  compute the numb
10860 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
10870 20 74 68 65 20 72 65 63 6f 72 64 2e 20 20 46 6f   the record.  Fo
10880 72 20 63 75 72 73 6f 72 73 2c 0a 20 20 2a 2a 20  r cursors,.  ** 
10890 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f  the number of co
108a0 6c 75 6d 6e 73 20 69 73 20 73 74 6f 72 65 64 20  lumns is stored 
108b0 69 6e 20 74 68 65 20 56 64 62 65 43 75 72 73 6f  in the VdbeCurso
108c0 72 2e 6e 46 69 65 6c 64 20 65 6c 65 6d 65 6e 74  r.nField element
108d0 2e 0a 20 20 2a 2f 0a 20 20 70 43 20 3d 20 70 2d  ..  */.  pC = p-
108e0 3e 61 70 43 73 72 5b 70 31 5d 3b 0a 20 20 61 73  >apCsr[p1];.  as
108f0 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 23  sert( pC!=0 );.#
10900 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
10910 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
10920 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 56    assert( pC->pV
10930 74 61 62 43 75 72 73 6f 72 3d 3d 30 20 29 3b 0a  tabCursor==0 );.
10940 23 65 6e 64 69 66 0a 20 20 70 43 72 73 72 20 3d  #endif.  pCrsr =
10950 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20   pC->pCursor;.  
10960 69 66 28 20 70 43 72 73 72 21 3d 30 20 29 7b 0a  if( pCrsr!=0 ){.
10970 20 20 20 20 2f 2a 20 54 68 65 20 72 65 63 6f 72      /* The recor
10980 64 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 61  d is stored in a
10990 20 42 2d 54 72 65 65 20 2a 2f 0a 20 20 20 20 72   B-Tree */.    r
109a0 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43  c = sqlite3VdbeC
109b0 75 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b  ursorMoveto(pC);
109c0 0a 20 20 20 20 69 66 28 20 72 63 20 29 20 67 6f  .    if( rc ) go
109d0 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
109e0 65 72 72 6f 72 3b 0a 20 20 20 20 69 66 28 20 70  error;.    if( p
109f0 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20  C->nullRow ){.  
10a00 20 20 20 20 70 61 79 6c 6f 61 64 53 69 7a 65 20      payloadSize 
10a10 3d 20 30 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69  = 0;.    }else i
10a20 66 28 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74  f( pC->cacheStat
10a30 75 73 3d 3d 70 2d 3e 63 61 63 68 65 43 74 72 20  us==p->cacheCtr 
10a40 29 7b 0a 20 20 20 20 20 20 70 61 79 6c 6f 61 64  ){.      payload
10a50 53 69 7a 65 20 3d 20 70 43 2d 3e 70 61 79 6c 6f  Size = pC->paylo
10a60 61 64 53 69 7a 65 3b 0a 20 20 20 20 20 20 7a 52  adSize;.      zR
10a70 65 63 20 3d 20 28 63 68 61 72 2a 29 70 43 2d 3e  ec = (char*)pC->
10a80 61 52 6f 77 3b 0a 20 20 20 20 7d 65 6c 73 65 20  aRow;.    }else 
10a90 69 66 28 20 70 43 2d 3e 69 73 49 6e 64 65 78 20  if( pC->isIndex 
10aa0 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ){.      assert(
10ab0 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72   sqlite3BtreeCur
10ac0 73 6f 72 49 73 56 61 6c 69 64 28 70 43 72 73 72  sorIsValid(pCrsr
10ad0 29 20 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  ) );.      rc = 
10ae0 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79 53  sqlite3BtreeKeyS
10af0 69 7a 65 28 70 43 72 73 72 2c 20 26 70 61 79 6c  ize(pCrsr, &payl
10b00 6f 61 64 53 69 7a 65 36 34 29 3b 0a 20 20 20 20  oadSize64);.    
10b10 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51    assert( rc==SQ
10b20 4c 49 54 45 5f 4f 4b 20 29 3b 20 20 20 2f 2a 20  LITE_OK );   /* 
10b30 54 72 75 65 20 62 65 63 61 75 73 65 20 6f 66 20  True because of 
10b40 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29 20 63  CursorMoveto() c
10b50 61 6c 6c 20 61 62 6f 76 65 20 2a 2f 0a 20 20 20  all above */.   
10b60 20 20 20 2f 2a 20 73 71 6c 69 74 65 33 42 74 72     /* sqlite3Btr
10b70 65 65 50 61 72 73 65 43 65 6c 6c 50 74 72 28 29  eeParseCellPtr()
10b80 20 75 73 65 73 20 67 65 74 56 61 72 69 6e 74 33   uses getVarint3
10b90 32 28 29 20 74 6f 20 65 78 74 72 61 63 74 20 74  2() to extract t
10ba0 68 65 0a 20 20 20 20 20 20 2a 2a 20 70 61 79 6c  he.      ** payl
10bb0 6f 61 64 20 73 69 7a 65 2c 20 73 6f 20 69 74 20  oad size, so it 
10bc0 69 73 20 69 6d 70 6f 73 73 69 62 6c 65 20 66 6f  is impossible fo
10bd0 72 20 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 20  r payloadSize64 
10be0 74 6f 20 62 65 0a 20 20 20 20 20 20 2a 2a 20 6c  to be.      ** l
10bf0 61 72 67 65 72 20 74 68 61 6e 20 33 32 20 62 69  arger than 32 bi
10c00 74 73 2e 20 2a 2f 0a 20 20 20 20 20 20 61 73 73  ts. */.      ass
10c10 65 72 74 28 20 28 70 61 79 6c 6f 61 64 53 69 7a  ert( (payloadSiz
10c20 65 36 34 20 26 20 53 51 4c 49 54 45 5f 4d 41 58  e64 & SQLITE_MAX
10c30 5f 55 33 32 29 3d 3d 28 75 36 34 29 70 61 79 6c  _U32)==(u64)payl
10c40 6f 61 64 53 69 7a 65 36 34 20 29 3b 0a 20 20 20  oadSize64 );.   
10c50 20 20 20 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d     payloadSize =
10c60 20 28 75 33 32 29 70 61 79 6c 6f 61 64 53 69 7a   (u32)payloadSiz
10c70 65 36 34 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  e64;.    }else{.
10c80 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71        assert( sq
10c90 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72  lite3BtreeCursor
10ca0 49 73 56 61 6c 69 64 28 70 43 72 73 72 29 20 29  IsValid(pCrsr) )
10cb0 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  ;.      rc = sql
10cc0 69 74 65 33 42 74 72 65 65 44 61 74 61 53 69 7a  ite3BtreeDataSiz
10cd0 65 28 70 43 72 73 72 2c 20 26 70 61 79 6c 6f 61  e(pCrsr, &payloa
10ce0 64 53 69 7a 65 29 3b 0a 20 20 20 20 20 20 61 73  dSize);.      as
10cf0 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45  sert( rc==SQLITE
10d00 5f 4f 4b 20 29 3b 20 20 20 2f 2a 20 44 61 74 61  _OK );   /* Data
10d10 53 69 7a 65 28 29 20 63 61 6e 6e 6f 74 20 66 61  Size() cannot fa
10d20 69 6c 20 2a 2f 0a 20 20 20 20 7d 0a 20 20 7d 65  il */.    }.  }e
10d30 6c 73 65 20 69 66 28 20 70 43 2d 3e 70 73 65 75  lse if( pC->pseu
10d40 64 6f 54 61 62 6c 65 52 65 67 3e 30 20 29 7b 0a  doTableReg>0 ){.
10d50 20 20 20 20 70 52 65 67 20 3d 20 26 61 4d 65 6d      pReg = &aMem
10d60 5b 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65  [pC->pseudoTable
10d70 52 65 67 5d 3b 0a 20 20 20 20 61 73 73 65 72 74  Reg];.    assert
10d80 28 20 70 52 65 67 2d 3e 66 6c 61 67 73 20 26 20  ( pReg->flags & 
10d90 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20 20 20  MEM_Blob );.    
10da0 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
10db0 69 64 28 70 52 65 67 29 20 29 3b 0a 20 20 20 20  id(pReg) );.    
10dc0 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20 70 52  payloadSize = pR
10dd0 65 67 2d 3e 6e 3b 0a 20 20 20 20 7a 52 65 63 20  eg->n;.    zRec 
10de0 3d 20 70 52 65 67 2d 3e 7a 3b 0a 20 20 20 20 70  = pReg->z;.    p
10df0 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
10e00 20 28 70 4f 70 2d 3e 70 35 26 4f 50 46 4c 41 47   (pOp->p5&OPFLAG
10e10 5f 43 4c 45 41 52 43 41 43 48 45 29 20 3f 20 43  _CLEARCACHE) ? C
10e20 41 43 48 45 5f 53 54 41 4c 45 20 3a 20 70 2d 3e  ACHE_STALE : p->
10e30 63 61 63 68 65 43 74 72 3b 0a 20 20 20 20 61 73  cacheCtr;.    as
10e40 73 65 72 74 28 20 70 61 79 6c 6f 61 64 53 69 7a  sert( payloadSiz
10e50 65 3d 3d 30 20 7c 7c 20 7a 52 65 63 21 3d 30 20  e==0 || zRec!=0 
10e60 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
10e70 2f 2a 20 43 6f 6e 73 69 64 65 72 20 74 68 65 20  /* Consider the 
10e80 72 6f 77 20 74 6f 20 62 65 20 4e 55 4c 4c 20 2a  row to be NULL *
10e90 2f 0a 20 20 20 20 70 61 79 6c 6f 61 64 53 69 7a  /.    payloadSiz
10ea0 65 20 3d 20 30 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  e = 0;.  }..  /*
10eb0 20 49 66 20 70 61 79 6c 6f 61 64 53 69 7a 65 20   If payloadSize 
10ec0 69 73 20 30 2c 20 74 68 65 6e 20 6a 75 73 74 20  is 0, then just 
10ed0 73 74 6f 72 65 20 61 20 4e 55 4c 4c 20 2a 2f 0a  store a NULL */.
10ee0 20 20 69 66 28 20 70 61 79 6c 6f 61 64 53 69 7a    if( payloadSiz
10ef0 65 3d 3d 30 20 29 7b 0a 20 20 20 20 61 73 73 65  e==0 ){.    asse
10f00 72 74 28 20 70 44 65 73 74 2d 3e 66 6c 61 67 73  rt( pDest->flags
10f10 26 4d 45 4d 5f 4e 75 6c 6c 20 29 3b 0a 20 20 20  &MEM_Null );.   
10f20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f   goto op_column_
10f30 6f 75 74 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72  out;.  }.  asser
10f40 74 28 20 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51  t( db->aLimit[SQ
10f50 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54  LITE_LIMIT_LENGT
10f60 48 5d 3e 3d 30 20 29 3b 0a 20 20 69 66 28 20 70  H]>=0 );.  if( p
10f70 61 79 6c 6f 61 64 53 69 7a 65 20 3e 20 28 75 33  ayloadSize > (u3
10f80 32 29 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c  2)db->aLimit[SQL
10f90 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48  ITE_LIMIT_LENGTH
10fa0 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f  ] ){.    goto to
10fb0 6f 5f 62 69 67 3b 0a 20 20 7d 0a 0a 20 20 6e 46  o_big;.  }..  nF
10fc0 69 65 6c 64 20 3d 20 70 43 2d 3e 6e 46 69 65 6c  ield = pC->nFiel
10fd0 64 3b 0a 20 20 61 73 73 65 72 74 28 20 70 32 3c  d;.  assert( p2<
10fe0 6e 46 69 65 6c 64 20 29 3b 0a 0a 20 20 2f 2a 20  nField );..  /* 
10ff0 52 65 61 64 20 61 6e 64 20 70 61 72 73 65 20 74  Read and parse t
11000 68 65 20 74 61 62 6c 65 20 68 65 61 64 65 72 2e  he table header.
11010 20 20 53 74 6f 72 65 20 74 68 65 20 72 65 73 75    Store the resu
11020 6c 74 73 20 6f 66 20 74 68 65 20 70 61 72 73 65  lts of the parse
11030 0a 20 20 2a 2a 20 69 6e 74 6f 20 74 68 65 20 72  .  ** into the r
11040 65 63 6f 72 64 20 68 65 61 64 65 72 20 63 61 63  ecord header cac
11050 68 65 20 66 69 65 6c 64 73 20 6f 66 20 74 68 65  he fields of the
11060 20 63 75 72 73 6f 72 2e 0a 20 20 2a 2f 0a 20 20   cursor..  */.  
11070 61 54 79 70 65 20 3d 20 70 43 2d 3e 61 54 79 70  aType = pC->aTyp
11080 65 3b 0a 20 20 69 66 28 20 70 43 2d 3e 63 61 63  e;.  if( pC->cac
11090 68 65 53 74 61 74 75 73 3d 3d 70 2d 3e 63 61 63  heStatus==p->cac
110a0 68 65 43 74 72 20 29 7b 0a 20 20 20 20 61 4f 66  heCtr ){.    aOf
110b0 66 73 65 74 20 3d 20 70 43 2d 3e 61 4f 66 66 73  fset = pC->aOffs
110c0 65 74 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  et;.  }else{.   
110d0 20 61 73 73 65 72 74 28 61 54 79 70 65 29 3b 0a   assert(aType);.
110e0 20 20 20 20 61 76 61 69 6c 20 3d 20 30 3b 0a 20      avail = 0;. 
110f0 20 20 20 70 43 2d 3e 61 4f 66 66 73 65 74 20 3d     pC->aOffset =
11100 20 61 4f 66 66 73 65 74 20 3d 20 26 61 54 79 70   aOffset = &aTyp
11110 65 5b 6e 46 69 65 6c 64 5d 3b 0a 20 20 20 20 70  e[nField];.    p
11120 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d  C->payloadSize =
11130 20 70 61 79 6c 6f 61 64 53 69 7a 65 3b 0a 20 20   payloadSize;.  
11140 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
11150 73 20 3d 20 70 2d 3e 63 61 63 68 65 43 74 72 3b  s = p->cacheCtr;
11160 0a 0a 20 20 20 20 2f 2a 20 46 69 67 75 72 65 20  ..    /* Figure 
11170 6f 75 74 20 68 6f 77 20 6d 61 6e 79 20 62 79 74  out how many byt
11180 65 73 20 61 72 65 20 69 6e 20 74 68 65 20 68 65  es are in the he
11190 61 64 65 72 20 2a 2f 0a 20 20 20 20 69 66 28 20  ader */.    if( 
111a0 7a 52 65 63 20 29 7b 0a 20 20 20 20 20 20 7a 44  zRec ){.      zD
111b0 61 74 61 20 3d 20 7a 52 65 63 3b 0a 20 20 20 20  ata = zRec;.    
111c0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 69 66 28  }else{.      if(
111d0 20 70 43 2d 3e 69 73 49 6e 64 65 78 20 29 7b 0a   pC->isIndex ){.
111e0 20 20 20 20 20 20 20 20 7a 44 61 74 61 20 3d 20          zData = 
111f0 28 63 68 61 72 2a 29 73 71 6c 69 74 65 33 42 74  (char*)sqlite3Bt
11200 72 65 65 4b 65 79 46 65 74 63 68 28 70 43 72 73  reeKeyFetch(pCrs
11210 72 2c 20 26 61 76 61 69 6c 29 3b 0a 20 20 20 20  r, &avail);.    
11220 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
11230 20 7a 44 61 74 61 20 3d 20 28 63 68 61 72 2a 29   zData = (char*)
11240 73 71 6c 69 74 65 33 42 74 72 65 65 44 61 74 61  sqlite3BtreeData
11250 46 65 74 63 68 28 70 43 72 73 72 2c 20 26 61 76  Fetch(pCrsr, &av
11260 61 69 6c 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  ail);.      }.  
11270 20 20 20 20 2f 2a 20 49 66 20 4b 65 79 46 65 74      /* If KeyFet
11280 63 68 28 29 2f 44 61 74 61 46 65 74 63 68 28 29  ch()/DataFetch()
11290 20 6d 61 6e 61 67 65 64 20 74 6f 20 67 65 74 20   managed to get 
112a0 74 68 65 20 65 6e 74 69 72 65 20 70 61 79 6c 6f  the entire paylo
112b0 61 64 2c 0a 20 20 20 20 20 20 2a 2a 20 73 61 76  ad,.      ** sav
112c0 65 20 74 68 65 20 70 61 79 6c 6f 61 64 20 69 6e  e the payload in
112d0 20 74 68 65 20 70 43 2d 3e 61 52 6f 77 20 63 61   the pC->aRow ca
112e0 63 68 65 2e 20 20 54 68 61 74 20 77 69 6c 6c 20  che.  That will 
112f0 73 61 76 65 20 75 73 20 66 72 6f 6d 0a 20 20 20  save us from.   
11300 20 20 20 2a 2a 20 68 61 76 69 6e 67 20 74 6f 20     ** having to 
11310 6d 61 6b 65 20 61 64 64 69 74 69 6f 6e 61 6c 20  make additional 
11320 63 61 6c 6c 73 20 74 6f 20 66 65 74 63 68 20 74  calls to fetch t
11330 68 65 20 63 6f 6e 74 65 6e 74 20 70 6f 72 74 69  he content porti
11340 6f 6e 20 6f 66 0a 20 20 20 20 20 20 2a 2a 20 74  on of.      ** t
11350 68 65 20 72 65 63 6f 72 64 2e 0a 20 20 20 20 20  he record..     
11360 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74   */.      assert
11370 28 20 61 76 61 69 6c 3e 3d 30 20 29 3b 0a 20 20  ( avail>=0 );.  
11380 20 20 20 20 69 66 28 20 70 61 79 6c 6f 61 64 53      if( payloadS
11390 69 7a 65 20 3c 3d 20 28 75 33 32 29 61 76 61 69  ize <= (u32)avai
113a0 6c 20 29 7b 0a 20 20 20 20 20 20 20 20 7a 52 65  l ){.        zRe
113b0 63 20 3d 20 7a 44 61 74 61 3b 0a 20 20 20 20 20  c = zData;.     
113c0 20 20 20 70 43 2d 3e 61 52 6f 77 20 3d 20 28 75     pC->aRow = (u
113d0 38 2a 29 7a 44 61 74 61 3b 0a 20 20 20 20 20 20  8*)zData;.      
113e0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 70  }else{.        p
113f0 43 2d 3e 61 52 6f 77 20 3d 20 30 3b 0a 20 20 20  C->aRow = 0;.   
11400 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 2f     }.    }.    /
11410 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
11420 61 73 73 65 72 74 20 69 73 20 74 72 75 65 20 69  assert is true i
11430 6e 20 61 6c 6c 20 63 61 73 65 73 20 61 63 63 65  n all cases acce
11440 70 74 20 77 68 65 6e 0a 20 20 20 20 2a 2a 20 74  pt when.    ** t
11450 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
11460 20 68 61 73 20 62 65 65 6e 20 63 6f 72 72 75 70   has been corrup
11470 74 65 64 20 65 78 74 65 72 6e 61 6c 6c 79 2e 0a  ted externally..
11480 20 20 20 20 2a 2a 20 20 20 20 61 73 73 65 72 74      **    assert
11490 28 20 7a 52 65 63 21 3d 30 20 7c 7c 20 61 76 61  ( zRec!=0 || ava
114a0 69 6c 3e 3d 70 61 79 6c 6f 61 64 53 69 7a 65 20  il>=payloadSize 
114b0 7c 7c 20 61 76 61 69 6c 3e 3d 39 20 29 3b 20 2a  || avail>=9 ); *
114c0 2f 0a 20 20 20 20 73 7a 48 64 72 20 3d 20 67 65  /.    szHdr = ge
114d0 74 56 61 72 69 6e 74 33 32 28 28 75 38 2a 29 7a  tVarint32((u8*)z
114e0 44 61 74 61 2c 20 6f 66 66 73 65 74 29 3b 0a 0a  Data, offset);..
114f0 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65      /* Make sure
11500 20 61 20 63 6f 72 72 75 70 74 20 64 61 74 61 62   a corrupt datab
11510 61 73 65 20 68 61 73 20 6e 6f 74 20 67 69 76 65  ase has not give
11520 6e 20 75 73 20 61 6e 20 6f 76 65 72 73 69 7a 65  n us an oversize
11530 20 68 65 61 64 65 72 2e 0a 20 20 20 20 2a 2a 20   header..    ** 
11540 44 6f 20 74 68 69 73 20 6e 6f 77 20 74 6f 20 61  Do this now to a
11550 76 6f 69 64 20 61 6e 20 6f 76 65 72 73 69 7a 65  void an oversize
11560 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
11570 6f 6e 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a  on..    **.    *
11580 2a 20 54 79 70 65 20 65 6e 74 72 69 65 73 20 63  * Type entries c
11590 61 6e 20 62 65 20 62 65 74 77 65 65 6e 20 31 20  an be between 1 
115a0 61 6e 64 20 35 20 62 79 74 65 73 20 65 61 63 68  and 5 bytes each
115b0 2e 20 20 42 75 74 20 34 20 61 6e 64 20 35 20 62  .  But 4 and 5 b
115c0 79 74 65 0a 20 20 20 20 2a 2a 20 74 79 70 65 73  yte.    ** types
115d0 20 75 73 65 20 73 6f 20 6d 75 63 68 20 64 61 74   use so much dat
115e0 61 20 73 70 61 63 65 20 74 68 61 74 20 74 68 65  a space that the
115f0 72 65 20 63 61 6e 20 6f 6e 6c 79 20 62 65 20 34  re can only be 4
11600 30 39 36 20 61 6e 64 20 33 32 20 6f 66 0a 20 20  096 and 32 of.  
11610 20 20 2a 2a 20 74 68 65 6d 2c 20 72 65 73 70 65    ** them, respe
11620 63 74 69 76 65 6c 79 2e 20 20 53 6f 20 74 68 65  ctively.  So the
11630 20 6d 61 78 69 6d 75 6d 20 68 65 61 64 65 72 20   maximum header 
11640 6c 65 6e 67 74 68 20 72 65 73 75 6c 74 73 20 66  length results f
11650 72 6f 6d 20 61 0a 20 20 20 20 2a 2a 20 33 2d 62  rom a.    ** 3-b
11660 79 74 65 20 74 79 70 65 20 66 6f 72 20 65 61 63  yte type for eac
11670 68 20 6f 66 20 74 68 65 20 6d 61 78 69 6d 75 6d  h of the maximum
11680 20 6f 66 20 33 32 37 36 38 20 63 6f 6c 75 6d 6e   of 32768 column
11690 73 20 70 6c 75 73 20 74 68 72 65 65 0a 20 20 20  s plus three.   
116a0 20 2a 2a 20 65 78 74 72 61 20 62 79 74 65 73 20   ** extra bytes 
116b0 66 6f 72 20 74 68 65 20 68 65 61 64 65 72 20 6c  for the header l
116c0 65 6e 67 74 68 20 69 74 73 65 6c 66 2e 20 20 33  ength itself.  3
116d0 32 37 36 38 2a 33 20 2b 20 33 20 3d 20 39 38 33  2768*3 + 3 = 983
116e0 30 37 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69  07..    */.    i
116f0 66 28 20 6f 66 66 73 65 74 20 3e 20 39 38 33 30  f( offset > 9830
11700 37 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20  7 ){.      rc = 
11710 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 42  SQLITE_CORRUPT_B
11720 4b 50 54 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20  KPT;.      goto 
11730 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20  op_column_out;. 
11740 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 20 43 6f 6d     }..    /* Com
11750 70 75 74 65 20 69 6e 20 6c 65 6e 20 74 68 65 20  pute in len the 
11760 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20  number of bytes 
11770 6f 66 20 64 61 74 61 20 77 65 20 6e 65 65 64 20  of data we need 
11780 74 6f 20 72 65 61 64 20 69 6e 20 6f 72 64 65 72  to read in order
11790 0a 20 20 20 20 2a 2a 20 74 6f 20 67 65 74 20 6e  .    ** to get n
117a0 46 69 65 6c 64 20 74 79 70 65 20 76 61 6c 75 65  Field type value
117b0 73 2e 20 20 6f 66 66 73 65 74 20 69 73 20 61 6e  s.  offset is an
117c0 20 75 70 70 65 72 20 62 6f 75 6e 64 20 6f 6e 20   upper bound on 
117d0 74 68 69 73 2e 20 20 42 75 74 0a 20 20 20 20 2a  this.  But.    *
117e0 2a 20 6e 46 69 65 6c 64 20 6d 69 67 68 74 20 62  * nField might b
117f0 65 20 73 69 67 6e 69 66 69 63 61 6e 74 6c 79 20  e significantly 
11800 6c 65 73 73 20 74 68 61 6e 20 74 68 65 20 74 72  less than the tr
11810 75 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  ue number of col
11820 75 6d 6e 73 0a 20 20 20 20 2a 2a 20 69 6e 20 74  umns.    ** in t
11830 68 65 20 74 61 62 6c 65 2c 20 61 6e 64 20 69 6e  he table, and in
11840 20 74 68 61 74 20 63 61 73 65 2c 20 35 2a 6e 46   that case, 5*nF
11850 69 65 6c 64 2b 33 20 6d 69 67 68 74 20 62 65 20  ield+3 might be 
11860 73 6d 61 6c 6c 65 72 20 74 68 61 6e 20 6f 66 66  smaller than off
11870 73 65 74 2e 0a 20 20 20 20 2a 2a 20 57 65 20 77  set..    ** We w
11880 61 6e 74 20 74 6f 20 6d 69 6e 69 6d 69 7a 65 20  ant to minimize 
11890 6c 65 6e 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  len in order to 
118a0 6c 69 6d 69 74 20 74 68 65 20 73 69 7a 65 20 6f  limit the size o
118b0 66 20 74 68 65 20 6d 65 6d 6f 72 79 0a 20 20 20  f the memory.   
118c0 20 2a 2a 20 61 6c 6c 6f 63 61 74 69 6f 6e 2c 20   ** allocation, 
118d0 65 73 70 65 63 69 61 6c 6c 79 20 69 66 20 61 20  especially if a 
118e0 63 6f 72 72 75 70 74 20 64 61 74 61 62 61 73 65  corrupt database
118f0 20 66 69 6c 65 20 68 61 73 20 63 61 75 73 65 64   file has caused
11900 20 6f 66 66 73 65 74 0a 20 20 20 20 2a 2a 20 74   offset.    ** t
11910 6f 20 62 65 20 6f 76 65 72 73 69 7a 65 64 2e 20  o be oversized. 
11920 4f 66 66 73 65 74 20 69 73 20 6c 69 6d 69 74 65  Offset is limite
11930 64 20 74 6f 20 39 38 33 30 37 20 61 62 6f 76 65  d to 98307 above
11940 2e 20 20 42 75 74 20 39 38 33 30 37 20 6d 69 67  .  But 98307 mig
11950 68 74 0a 20 20 20 20 2a 2a 20 73 74 69 6c 6c 20  ht.    ** still 
11960 65 78 63 65 65 64 20 52 6f 62 73 6f 6e 20 6d 65  exceed Robson me
11970 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20  mory allocation 
11980 6c 69 6d 69 74 73 20 6f 6e 20 73 6f 6d 65 20 63  limits on some c
11990 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73 2e 0a 20  onfigurations.. 
119a0 20 20 20 2a 2a 20 4f 6e 20 73 79 73 74 65 6d 73     ** On systems
119b0 20 74 68 61 74 20 63 61 6e 6e 6f 74 20 74 6f 6c   that cannot tol
119c0 65 72 61 74 65 20 6c 61 72 67 65 20 6d 65 6d 6f  erate large memo
119d0 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 2c 20  ry allocations, 
119e0 6e 46 69 65 6c 64 2a 35 2b 33 0a 20 20 20 20 2a  nField*5+3.    *
119f0 2a 20 77 69 6c 6c 20 6c 69 6b 65 6c 79 20 62 65  * will likely be
11a00 20 6d 75 63 68 20 73 6d 61 6c 6c 65 72 20 73 69   much smaller si
11a10 6e 63 65 20 6e 46 69 65 6c 64 20 77 69 6c 6c 20  nce nField will 
11a20 6c 69 6b 65 6c 79 20 62 65 20 6c 65 73 73 20 74  likely be less t
11a30 68 61 6e 0a 20 20 20 20 2a 2a 20 32 30 20 6f 72  han.    ** 20 or
11a40 20 73 6f 2e 20 20 54 68 69 73 20 69 6e 73 75 72   so.  This insur
11a50 65 73 20 74 68 61 74 20 52 6f 62 73 6f 6e 20 6d  es that Robson m
11a60 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e  emory allocation
11a70 20 6c 69 6d 69 74 73 20 61 72 65 0a 20 20 20 20   limits are.    
11a80 2a 2a 20 6e 6f 74 20 65 78 63 65 65 64 65 64 20  ** not exceeded 
11a90 65 76 65 6e 20 66 6f 72 20 63 6f 72 72 75 70 74  even for corrupt
11aa0 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 73 2e   database files.
11ab0 0a 20 20 20 20 2a 2f 0a 20 20 20 20 6c 65 6e 20  .    */.    len 
11ac0 3d 20 6e 46 69 65 6c 64 2a 35 20 2b 20 33 3b 0a  = nField*5 + 3;.
11ad0 20 20 20 20 69 66 28 20 6c 65 6e 20 3e 20 28 69      if( len > (i
11ae0 6e 74 29 6f 66 66 73 65 74 20 29 20 6c 65 6e 20  nt)offset ) len 
11af0 3d 20 28 69 6e 74 29 6f 66 66 73 65 74 3b 0a 0a  = (int)offset;..
11b00 20 20 20 20 2f 2a 20 54 68 65 20 4b 65 79 46 65      /* The KeyFe
11b10 74 63 68 28 29 20 6f 72 20 44 61 74 61 46 65 74  tch() or DataFet
11b20 63 68 28 29 20 61 62 6f 76 65 20 61 72 65 20 66  ch() above are f
11b30 61 73 74 20 61 6e 64 20 77 69 6c 6c 20 67 65 74  ast and will get
11b40 20 74 68 65 20 65 6e 74 69 72 65 0a 20 20 20 20   the entire.    
11b50 2a 2a 20 72 65 63 6f 72 64 20 68 65 61 64 65 72  ** record header
11b60 20 69 6e 20 6d 6f 73 74 20 63 61 73 65 73 2e 20   in most cases. 
11b70 20 42 75 74 20 74 68 65 79 20 77 69 6c 6c 20 66   But they will f
11b80 61 69 6c 20 74 6f 20 67 65 74 20 74 68 65 20 63  ail to get the c
11b90 6f 6d 70 6c 65 74 65 0a 20 20 20 20 2a 2a 20 72  omplete.    ** r
11ba0 65 63 6f 72 64 20 68 65 61 64 65 72 20 69 66 20  ecord header if 
11bb0 74 68 65 20 72 65 63 6f 72 64 20 68 65 61 64 65  the record heade
11bc0 72 20 64 6f 65 73 20 6e 6f 74 20 66 69 74 20 6f  r does not fit o
11bd0 6e 20 61 20 73 69 6e 67 6c 65 20 70 61 67 65 0a  n a single page.
11be0 20 20 20 20 2a 2a 20 69 6e 20 74 68 65 20 42 2d      ** in the B-
11bf0 54 72 65 65 2e 20 20 57 68 65 6e 20 74 68 61 74  Tree.  When that
11c00 20 68 61 70 70 65 6e 73 2c 20 75 73 65 20 73 71   happens, use sq
11c10 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d  lite3VdbeMemFrom
11c20 42 74 72 65 65 28 29 20 74 6f 0a 20 20 20 20 2a  Btree() to.    *
11c30 2a 20 61 63 71 75 69 72 65 20 74 68 65 20 63 6f  * acquire the co
11c40 6d 70 6c 65 74 65 20 68 65 61 64 65 72 20 74 65  mplete header te
11c50 78 74 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69  xt..    */.    i
11c60 66 28 20 21 7a 52 65 63 20 26 26 20 61 76 61 69  f( !zRec && avai
11c70 6c 3c 6c 65 6e 20 29 7b 0a 20 20 20 20 20 20 73  l<len ){.      s
11c80 4d 65 6d 2e 66 6c 61 67 73 20 3d 20 30 3b 0a 20  Mem.flags = 0;. 
11c90 20 20 20 20 20 73 4d 65 6d 2e 64 62 20 3d 20 30       sMem.db = 0
11ca0 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  ;.      rc = sql
11cb0 69 74 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d 42  ite3VdbeMemFromB
11cc0 74 72 65 65 28 70 43 72 73 72 2c 20 30 2c 20 6c  tree(pCrsr, 0, l
11cd0 65 6e 2c 20 70 43 2d 3e 69 73 49 6e 64 65 78 2c  en, pC->isIndex,
11ce0 20 26 73 4d 65 6d 29 3b 0a 20 20 20 20 20 20 69   &sMem);.      i
11cf0 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
11d00 20 29 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f   ){.        goto
11d10 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a   op_column_out;.
11d20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7a 44        }.      zD
11d30 61 74 61 20 3d 20 73 4d 65 6d 2e 7a 3b 0a 20 20  ata = sMem.z;.  
11d40 20 20 7d 0a 20 20 20 20 7a 45 6e 64 48 64 72 20    }.    zEndHdr 
11d50 3d 20 28 75 38 20 2a 29 26 7a 44 61 74 61 5b 6c  = (u8 *)&zData[l
11d60 65 6e 5d 3b 0a 20 20 20 20 7a 49 64 78 20 3d 20  en];.    zIdx = 
11d70 28 75 38 20 2a 29 26 7a 44 61 74 61 5b 73 7a 48  (u8 *)&zData[szH
11d80 64 72 5d 3b 0a 0a 20 20 20 20 2f 2a 20 53 63 61  dr];..    /* Sca
11d90 6e 20 74 68 65 20 68 65 61 64 65 72 20 61 6e 64  n the header and
11da0 20 75 73 65 20 69 74 20 74 6f 20 66 69 6c 6c 20   use it to fill 
11db0 69 6e 20 74 68 65 20 61 54 79 70 65 5b 5d 20 61  in the aType[] a
11dc0 6e 64 20 61 4f 66 66 73 65 74 5b 5d 0a 20 20 20  nd aOffset[].   
11dd0 20 2a 2a 20 61 72 72 61 79 73 2e 20 20 61 54 79   ** arrays.  aTy
11de0 70 65 5b 69 5d 20 77 69 6c 6c 20 63 6f 6e 74 61  pe[i] will conta
11df0 69 6e 20 74 68 65 20 74 79 70 65 20 69 6e 74 65  in the type inte
11e00 67 65 72 20 66 6f 72 20 74 68 65 20 69 2d 74 68  ger for the i-th
11e10 0a 20 20 20 20 2a 2a 20 63 6f 6c 75 6d 6e 20 61  .    ** column a
11e20 6e 64 20 61 4f 66 66 73 65 74 5b 69 5d 20 77 69  nd aOffset[i] wi
11e30 6c 6c 20 63 6f 6e 74 61 69 6e 20 74 68 65 20 6f  ll contain the o
11e40 66 66 73 65 74 20 66 72 6f 6d 20 74 68 65 20 62  ffset from the b
11e50 65 67 69 6e 6e 69 6e 67 0a 20 20 20 20 2a 2a 20  eginning.    ** 
11e60 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f  of the record to
11e70 20 74 68 65 20 73 74 61 72 74 20 6f 66 20 74 68   the start of th
11e80 65 20 64 61 74 61 20 66 6f 72 20 74 68 65 20 69  e data for the i
11e90 2d 74 68 20 63 6f 6c 75 6d 6e 0a 20 20 20 20 2a  -th column.    *
11ea0 2f 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69  /.    for(i=0; i
11eb0 3c 6e 46 69 65 6c 64 3b 20 69 2b 2b 29 7b 0a 20  <nField; i++){. 
11ec0 20 20 20 20 20 69 66 28 20 7a 49 64 78 3c 7a 45       if( zIdx<zE
11ed0 6e 64 48 64 72 20 29 7b 0a 20 20 20 20 20 20 20  ndHdr ){.       
11ee0 20 61 4f 66 66 73 65 74 5b 69 5d 20 3d 20 6f 66   aOffset[i] = of
11ef0 66 73 65 74 3b 0a 20 20 20 20 20 20 20 20 7a 49  fset;.        zI
11f00 64 78 20 2b 3d 20 67 65 74 56 61 72 69 6e 74 33  dx += getVarint3
11f10 32 28 7a 49 64 78 2c 20 61 54 79 70 65 5b 69 5d  2(zIdx, aType[i]
11f20 29 3b 0a 20 20 20 20 20 20 20 20 73 7a 46 69 65  );.        szFie
11f30 6c 64 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  ld = sqlite3Vdbe
11f40 53 65 72 69 61 6c 54 79 70 65 4c 65 6e 28 61 54  SerialTypeLen(aT
11f50 79 70 65 5b 69 5d 29 3b 0a 20 20 20 20 20 20 20  ype[i]);.       
11f60 20 6f 66 66 73 65 74 20 2b 3d 20 73 7a 46 69 65   offset += szFie
11f70 6c 64 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  ld;.        if( 
11f80 6f 66 66 73 65 74 3c 73 7a 46 69 65 6c 64 20 29  offset<szField )
11f90 7b 20 20 2f 2a 20 54 72 75 65 20 69 66 20 6f 66  {  /* True if of
11fa0 66 73 65 74 20 6f 76 65 72 66 6c 6f 77 73 20 2a  fset overflows *
11fb0 2f 0a 20 20 20 20 20 20 20 20 20 20 7a 49 64 78  /.          zIdx
11fc0 20 3d 20 26 7a 45 6e 64 48 64 72 5b 31 5d 3b 20   = &zEndHdr[1]; 
11fd0 20 2f 2a 20 46 6f 72 63 65 73 20 53 51 4c 49 54   /* Forces SQLIT
11fe0 45 5f 43 4f 52 52 55 50 54 20 72 65 74 75 72 6e  E_CORRUPT return
11ff0 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 20 20 20 20   below */.      
12000 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
12010 20 20 20 7d 0a 20 20 20 20 20 20 7d 65 6c 73 65     }.      }else
12020 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20  {.        /* If 
12030 69 20 69 73 20 6c 65 73 73 20 74 68 61 74 20 6e  i is less that n
12040 46 69 65 6c 64 2c 20 74 68 65 6e 20 74 68 65 72  Field, then ther
12050 65 20 61 72 65 20 6c 65 73 73 20 66 69 65 6c 64  e are less field
12060 73 20 69 6e 20 74 68 69 73 0a 20 20 20 20 20 20  s in this.      
12070 20 20 2a 2a 20 72 65 63 6f 72 64 20 74 68 61 6e    ** record than
12080 20 53 65 74 4e 75 6d 43 6f 6c 75 6d 6e 73 20 69   SetNumColumns i
12090 6e 64 69 63 61 74 65 64 20 74 68 65 72 65 20 61  ndicated there a
120a0 72 65 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  re columns in th
120b0 65 0a 20 20 20 20 20 20 20 20 2a 2a 20 74 61 62  e.        ** tab
120c0 6c 65 2e 20 53 65 74 20 74 68 65 20 6f 66 66 73  le. Set the offs
120d0 65 74 20 66 6f 72 20 61 6e 79 20 65 78 74 72 61  et for any extra
120e0 20 63 6f 6c 75 6d 6e 73 20 6e 6f 74 20 70 72 65   columns not pre
120f0 73 65 6e 74 20 69 6e 0a 20 20 20 20 20 20 20 20  sent in.        
12100 2a 2a 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f  ** the record to
12110 20 30 2e 20 54 68 69 73 20 74 65 6c 6c 73 20 63   0. This tells c
12120 6f 64 65 20 62 65 6c 6f 77 20 74 6f 20 73 74 6f  ode below to sto
12130 72 65 20 61 20 4e 55 4c 4c 0a 20 20 20 20 20 20  re a NULL.      
12140 20 20 2a 2a 20 69 6e 73 74 65 61 64 20 6f 66 20    ** instead of 
12150 64 65 73 65 72 69 61 6c 69 7a 69 6e 67 20 61 20  deserializing a 
12160 76 61 6c 75 65 20 66 72 6f 6d 20 74 68 65 20 72  value from the r
12170 65 63 6f 72 64 2e 0a 20 20 20 20 20 20 20 20 2a  ecord..        *
12180 2f 0a 20 20 20 20 20 20 20 20 61 4f 66 66 73 65  /.        aOffse
12190 74 5b 69 5d 20 3d 20 30 3b 0a 20 20 20 20 20 20  t[i] = 0;.      
121a0 7d 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69  }.    }.    sqli
121b0 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73  te3VdbeMemReleas
121c0 65 28 26 73 4d 65 6d 29 3b 0a 20 20 20 20 73 4d  e(&sMem);.    sM
121d0 65 6d 2e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e  em.flags = MEM_N
121e0 75 6c 6c 3b 0a 0a 20 20 20 20 2f 2a 20 49 66 20  ull;..    /* If 
121f0 77 65 20 68 61 76 65 20 72 65 61 64 20 6d 6f 72  we have read mor
12200 65 20 68 65 61 64 65 72 20 64 61 74 61 20 74 68  e header data th
12210 61 6e 20 77 61 73 20 63 6f 6e 74 61 69 6e 65 64  an was contained
12220 20 69 6e 20 74 68 65 20 68 65 61 64 65 72 2c 0a   in the header,.
12230 20 20 20 20 2a 2a 20 6f 72 20 69 66 20 74 68 65      ** or if the
12240 20 65 6e 64 20 6f 66 20 74 68 65 20 6c 61 73 74   end of the last
12250 20 66 69 65 6c 64 20 61 70 70 65 61 72 73 20 74   field appears t
12260 6f 20 62 65 20 70 61 73 74 20 74 68 65 20 65 6e  o be past the en
12270 64 20 6f 66 20 74 68 65 0a 20 20 20 20 2a 2a 20  d of the.    ** 
12280 72 65 63 6f 72 64 2c 20 6f 72 20 69 66 20 74 68  record, or if th
12290 65 20 65 6e 64 20 6f 66 20 74 68 65 20 6c 61 73  e end of the las
122a0 74 20 66 69 65 6c 64 20 61 70 70 65 61 72 73 20  t field appears 
122b0 74 6f 20 62 65 20 62 65 66 6f 72 65 20 74 68 65  to be before the
122c0 20 65 6e 64 0a 20 20 20 20 2a 2a 20 6f 66 20 74   end.    ** of t
122d0 68 65 20 72 65 63 6f 72 64 20 28 77 68 65 6e 20  he record (when 
122e0 61 6c 6c 20 66 69 65 6c 64 73 20 70 72 65 73 65  all fields prese
122f0 6e 74 29 2c 20 74 68 65 6e 20 77 65 20 6d 75 73  nt), then we mus
12300 74 20 62 65 20 64 65 61 6c 69 6e 67 20 0a 20 20  t be dealing .  
12310 20 20 2a 2a 20 77 69 74 68 20 61 20 63 6f 72 72    ** with a corr
12320 75 70 74 20 64 61 74 61 62 61 73 65 2e 0a 20 20  upt database..  
12330 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 28 7a 49    */.    if( (zI
12340 64 78 20 3e 20 7a 45 6e 64 48 64 72 29 20 7c 7c  dx > zEndHdr) ||
12350 20 28 6f 66 66 73 65 74 20 3e 20 70 61 79 6c 6f   (offset > paylo
12360 61 64 53 69 7a 65 29 0a 20 20 20 20 20 20 20 20  adSize).        
12370 20 7c 7c 20 28 7a 49 64 78 3d 3d 7a 45 6e 64 48   || (zIdx==zEndH
12380 64 72 20 26 26 20 6f 66 66 73 65 74 21 3d 70 61  dr && offset!=pa
12390 79 6c 6f 61 64 53 69 7a 65 29 20 29 7b 0a 20 20  yloadSize) ){.  
123a0 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
123b0 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20  CORRUPT_BKPT;.  
123c0 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75      goto op_colu
123d0 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20 7d 0a 20 20  mn_out;.    }.  
123e0 7d 0a 0a 20 20 2f 2a 20 47 65 74 20 74 68 65 20  }..  /* Get the 
123f0 63 6f 6c 75 6d 6e 20 69 6e 66 6f 72 6d 61 74 69  column informati
12400 6f 6e 2e 20 49 66 20 61 4f 66 66 73 65 74 5b 70  on. If aOffset[p
12410 32 5d 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20  2] is non-zero, 
12420 74 68 65 6e 20 0a 20 20 2a 2a 20 64 65 73 65 72  then .  ** deser
12430 69 61 6c 69 7a 65 20 74 68 65 20 76 61 6c 75 65  ialize the value
12440 20 66 72 6f 6d 20 74 68 65 20 72 65 63 6f 72 64   from the record
12450 2e 20 49 66 20 61 4f 66 66 73 65 74 5b 70 32 5d  . If aOffset[p2]
12460 20 69 73 20 7a 65 72 6f 2c 0a 20 20 2a 2a 20 74   is zero,.  ** t
12470 68 65 6e 20 74 68 65 72 65 20 61 72 65 20 6e 6f  hen there are no
12480 74 20 65 6e 6f 75 67 68 20 66 69 65 6c 64 73 20  t enough fields 
12490 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f  in the record to
124a0 20 73 61 74 69 73 66 79 20 74 68 65 0a 20 20 2a   satisfy the.  *
124b0 2a 20 72 65 71 75 65 73 74 2e 20 20 49 6e 20 74  * request.  In t
124c0 68 69 73 20 63 61 73 65 2c 20 73 65 74 20 74 68  his case, set th
124d0 65 20 76 61 6c 75 65 20 4e 55 4c 4c 20 6f 72 20  e value NULL or 
124e0 74 6f 20 50 34 20 69 66 20 50 34 20 69 73 0a 20  to P4 if P4 is. 
124f0 20 2a 2a 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   ** a pointer to
12500 20 61 20 4d 65 6d 20 6f 62 6a 65 63 74 2e 0a 20   a Mem object.. 
12510 20 2a 2f 0a 20 20 69 66 28 20 61 4f 66 66 73 65   */.  if( aOffse
12520 74 5b 70 32 5d 20 29 7b 0a 20 20 20 20 61 73 73  t[p2] ){.    ass
12530 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f  ert( rc==SQLITE_
12540 4f 4b 20 29 3b 0a 20 20 20 20 69 66 28 20 7a 52  OK );.    if( zR
12550 65 63 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  ec ){.      sqli
12560 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73  te3VdbeMemReleas
12570 65 45 78 74 65 72 6e 61 6c 28 70 44 65 73 74 29  eExternal(pDest)
12580 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
12590 64 62 65 53 65 72 69 61 6c 47 65 74 28 28 75 38  dbeSerialGet((u8
125a0 20 2a 29 26 7a 52 65 63 5b 61 4f 66 66 73 65 74   *)&zRec[aOffset
125b0 5b 70 32 5d 5d 2c 20 61 54 79 70 65 5b 70 32 5d  [p2]], aType[p2]
125c0 2c 20 70 44 65 73 74 29 3b 0a 20 20 20 20 7d 65  , pDest);.    }e
125d0 6c 73 65 7b 0a 20 20 20 20 20 20 6c 65 6e 20 3d  lse{.      len =
125e0 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69   sqlite3VdbeSeri
125f0 61 6c 54 79 70 65 4c 65 6e 28 61 54 79 70 65 5b  alTypeLen(aType[
12600 70 32 5d 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  p2]);.      sqli
12610 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28 26  te3VdbeMemMove(&
12620 73 4d 65 6d 2c 20 70 44 65 73 74 29 3b 0a 20 20  sMem, pDest);.  
12630 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
12640 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65  VdbeMemFromBtree
12650 28 70 43 72 73 72 2c 20 61 4f 66 66 73 65 74 5b  (pCrsr, aOffset[
12660 70 32 5d 2c 20 6c 65 6e 2c 20 70 43 2d 3e 69 73  p2], len, pC->is
12670 49 6e 64 65 78 2c 20 26 73 4d 65 6d 29 3b 0a 20  Index, &sMem);. 
12680 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c       if( rc!=SQL
12690 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
126a0 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e    goto op_column
126b0 5f 6f 75 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20  _out;.      }.  
126c0 20 20 20 20 7a 44 61 74 61 20 3d 20 73 4d 65 6d      zData = sMem
126d0 2e 7a 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  .z;.      sqlite
126e0 33 56 64 62 65 53 65 72 69 61 6c 47 65 74 28 28  3VdbeSerialGet((
126f0 75 38 2a 29 7a 44 61 74 61 2c 20 61 54 79 70 65  u8*)zData, aType
12700 5b 70 32 5d 2c 20 70 44 65 73 74 29 3b 0a 20 20  [p2], pDest);.  
12710 20 20 7d 0a 20 20 20 20 70 44 65 73 74 2d 3e 65    }.    pDest->e
12720 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 20  nc = encoding;. 
12730 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69 66 28 20   }else{.    if( 
12740 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
12750 4d 45 4d 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  MEM ){.      sql
12760 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c  ite3VdbeMemShall
12770 6f 77 43 6f 70 79 28 70 44 65 73 74 2c 20 70 4f  owCopy(pDest, pO
12780 70 2d 3e 70 34 2e 70 4d 65 6d 2c 20 4d 45 4d 5f  p->p4.pMem, MEM_
12790 53 74 61 74 69 63 29 3b 0a 20 20 20 20 7d 65 6c  Static);.    }el
127a0 73 65 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74  se{.      assert
127b0 28 20 70 44 65 73 74 2d 3e 66 6c 61 67 73 26 4d  ( pDest->flags&M
127c0 45 4d 5f 4e 75 6c 6c 20 29 3b 0a 20 20 20 20 7d  EM_Null );.    }
127d0 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20 77 65  .  }..  /* If we
127e0 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c   dynamically all
127f0 6f 63 61 74 65 64 20 73 70 61 63 65 20 74 6f 20  ocated space to 
12800 68 6f 6c 64 20 74 68 65 20 64 61 74 61 20 28 69  hold the data (i
12810 6e 20 74 68 65 0a 20 20 2a 2a 20 73 71 6c 69 74  n the.  ** sqlit
12820 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72  e3VdbeMemFromBtr
12830 65 65 28 29 20 63 61 6c 6c 20 61 62 6f 76 65 29  ee() call above)
12840 20 74 68 65 6e 20 74 72 61 6e 73 66 65 72 20 63   then transfer c
12850 6f 6e 74 72 6f 6c 20 6f 66 20 74 68 61 74 0a 20  ontrol of that. 
12860 20 2a 2a 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20   ** dynamically 
12870 61 6c 6c 6f 63 61 74 65 64 20 73 70 61 63 65 20  allocated space 
12880 6f 76 65 72 20 74 6f 20 74 68 65 20 70 44 65 73  over to the pDes
12890 74 20 73 74 72 75 63 74 75 72 65 2e 0a 20 20 2a  t structure..  *
128a0 2a 20 54 68 69 73 20 70 72 65 76 65 6e 74 73 20  * This prevents 
128b0 61 20 6d 65 6d 6f 72 79 20 63 6f 70 79 2e 0a 20  a memory copy.. 
128c0 20 2a 2f 0a 20 20 69 66 28 20 73 4d 65 6d 2e 7a   */.  if( sMem.z
128d0 4d 61 6c 6c 6f 63 20 29 7b 0a 20 20 20 20 61 73  Malloc ){.    as
128e0 73 65 72 74 28 20 73 4d 65 6d 2e 7a 3d 3d 73 4d  sert( sMem.z==sM
128f0 65 6d 2e 7a 4d 61 6c 6c 6f 63 20 29 3b 0a 20 20  em.zMalloc );.  
12900 20 20 61 73 73 65 72 74 28 20 21 28 70 44 65 73    assert( !(pDes
12910 74 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 44  t->flags & MEM_D
12920 79 6e 29 20 29 3b 0a 20 20 20 20 61 73 73 65 72  yn) );.    asser
12930 74 28 20 21 28 70 44 65 73 74 2d 3e 66 6c 61 67  t( !(pDest->flag
12940 73 20 26 20 28 4d 45 4d 5f 42 6c 6f 62 7c 4d 45  s & (MEM_Blob|ME
12950 4d 5f 53 74 72 29 29 20 7c 7c 20 70 44 65 73 74  M_Str)) || pDest
12960 2d 3e 7a 3d 3d 73 4d 65 6d 2e 7a 20 29 3b 0a 20  ->z==sMem.z );. 
12970 20 20 20 70 44 65 73 74 2d 3e 66 6c 61 67 73 20     pDest->flags 
12980 26 3d 20 7e 28 4d 45 4d 5f 45 70 68 65 6d 7c 4d  &= ~(MEM_Ephem|M
12990 45 4d 5f 53 74 61 74 69 63 29 3b 0a 20 20 20 20  EM_Static);.    
129a0 70 44 65 73 74 2d 3e 66 6c 61 67 73 20 7c 3d 20  pDest->flags |= 
129b0 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 20 20 70 44  MEM_Term;.    pD
129c0 65 73 74 2d 3e 7a 20 3d 20 73 4d 65 6d 2e 7a 3b  est->z = sMem.z;
129d0 0a 20 20 20 20 70 44 65 73 74 2d 3e 7a 4d 61 6c  .    pDest->zMal
129e0 6c 6f 63 20 3d 20 73 4d 65 6d 2e 7a 4d 61 6c 6c  loc = sMem.zMall
129f0 6f 63 3b 0a 20 20 7d 0a 0a 20 20 72 63 20 3d 20  oc;.  }..  rc = 
12a00 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d 61  sqlite3VdbeMemMa
12a10 6b 65 57 72 69 74 65 61 62 6c 65 28 70 44 65 73  keWriteable(pDes
12a20 74 29 3b 0a 0a 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f  t);..op_column_o
12a30 75 74 3a 0a 20 20 55 50 44 41 54 45 5f 4d 41 58  ut:.  UPDATE_MAX
12a40 5f 42 4c 4f 42 53 49 5a 45 28 70 44 65 73 74 29  _BLOBSIZE(pDest)
12a50 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41  ;.  REGISTER_TRA
12a60 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 44 65 73  CE(pOp->p3, pDes
12a70 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
12a80 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 66 66 69 6e  /* Opcode: Affin
12a90 69 74 79 20 50 31 20 50 32 20 2a 20 50 34 20 2a  ity P1 P2 * P4 *
12aa0 0a 2a 2a 0a 2a 2a 20 41 70 70 6c 79 20 61 66 66  .**.** Apply aff
12ab0 69 6e 69 74 69 65 73 20 74 6f 20 61 20 72 61 6e  inities to a ran
12ac0 67 65 20 6f 66 20 50 32 20 72 65 67 69 73 74 65  ge of P2 registe
12ad0 72 73 20 73 74 61 72 74 69 6e 67 20 77 69 74 68  rs starting with
12ae0 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73   P1..**.** P4 is
12af0 20 61 20 73 74 72 69 6e 67 20 74 68 61 74 20 69   a string that i
12b00 73 20 50 32 20 63 68 61 72 61 63 74 65 72 73 20  s P2 characters 
12b10 6c 6f 6e 67 2e 20 54 68 65 20 6e 74 68 20 63 68  long. The nth ch
12b20 61 72 61 63 74 65 72 20 6f 66 20 74 68 65 0a 2a  aracter of the.*
12b30 2a 20 73 74 72 69 6e 67 20 69 6e 64 69 63 61 74  * string indicat
12b40 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61 66  es the column af
12b50 66 69 6e 69 74 79 20 74 68 61 74 20 73 68 6f 75  finity that shou
12b60 6c 64 20 62 65 20 75 73 65 64 20 66 6f 72 20 74  ld be used for t
12b70 68 65 20 6e 74 68 0a 2a 2a 20 6d 65 6d 6f 72 79  he nth.** memory
12b80 20 63 65 6c 6c 20 69 6e 20 74 68 65 20 72 61 6e   cell in the ran
12b90 67 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41  ge..*/.case OP_A
12ba0 66 66 69 6e 69 74 79 3a 20 7b 0a 20 20 63 6f 6e  ffinity: {.  con
12bb0 73 74 20 63 68 61 72 20 2a 7a 41 66 66 69 6e 69  st char *zAffini
12bc0 74 79 3b 20 20 20 2f 2a 20 54 68 65 20 61 66 66  ty;   /* The aff
12bd0 69 6e 69 74 79 20 74 6f 20 62 65 20 61 70 70 6c  inity to be appl
12be0 69 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 63 41  ied */.  char cA
12bf0 66 66 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ff;             
12c00 20 20 2f 2a 20 41 20 73 69 6e 67 6c 65 20 63 68    /* A single ch
12c10 61 72 61 63 74 65 72 20 6f 66 20 61 66 66 69 6e  aracter of affin
12c20 69 74 79 20 2a 2f 0a 0a 20 20 7a 41 66 66 69 6e  ity */..  zAffin
12c30 69 74 79 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b  ity = pOp->p4.z;
12c40 0a 20 20 61 73 73 65 72 74 28 20 7a 41 66 66 69  .  assert( zAffi
12c50 6e 69 74 79 21 3d 30 20 29 3b 0a 20 20 61 73 73  nity!=0 );.  ass
12c60 65 72 74 28 20 7a 41 66 66 69 6e 69 74 79 5b 70  ert( zAffinity[p
12c70 4f 70 2d 3e 70 32 5d 3d 3d 30 20 29 3b 0a 20 20  Op->p2]==0 );.  
12c80 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
12c90 2d 3e 70 31 5d 3b 0a 20 20 77 68 69 6c 65 28 20  ->p1];.  while( 
12ca0 28 63 41 66 66 20 3d 20 2a 28 7a 41 66 66 69 6e  (cAff = *(zAffin
12cb0 69 74 79 2b 2b 29 29 21 3d 30 20 29 7b 0a 20 20  ity++))!=0 ){.  
12cc0 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 20 3c    assert( pIn1 <
12cd0 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 2d 3e 6e 4d  = &p->aMem[p->nM
12ce0 65 6d 5d 20 29 3b 0a 20 20 20 20 61 73 73 65 72  em] );.    asser
12cf0 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 49  t( memIsValid(pI
12d00 6e 31 29 20 29 3b 0a 20 20 20 20 45 78 70 61 6e  n1) );.    Expan
12d10 64 42 6c 6f 62 28 70 49 6e 31 29 3b 0a 20 20 20  dBlob(pIn1);.   
12d20 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70   applyAffinity(p
12d30 49 6e 31 2c 20 63 41 66 66 2c 20 65 6e 63 6f 64  In1, cAff, encod
12d40 69 6e 67 29 3b 0a 20 20 20 20 70 49 6e 31 2b 2b  ing);.    pIn1++
12d50 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
12d60 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 61 6b  ../* Opcode: Mak
12d70 65 52 65 63 6f 72 64 20 50 31 20 50 32 20 50 33  eRecord P1 P2 P3
12d80 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 43 6f 6e 76   P4 *.**.** Conv
12d90 65 72 74 20 50 32 20 72 65 67 69 73 74 65 72 73  ert P2 registers
12da0 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20   beginning with 
12db0 50 31 20 69 6e 74 6f 20 74 68 65 20 5b 72 65 63  P1 into the [rec
12dc0 6f 72 64 20 66 6f 72 6d 61 74 5d 0a 2a 2a 20 75  ord format].** u
12dd0 73 65 20 61 73 20 61 20 64 61 74 61 20 72 65 63  se as a data rec
12de0 6f 72 64 20 69 6e 20 61 20 64 61 74 61 62 61 73  ord in a databas
12df0 65 20 74 61 62 6c 65 20 6f 72 20 61 73 20 61 20  e table or as a 
12e00 6b 65 79 0a 2a 2a 20 69 6e 20 61 6e 20 69 6e 64  key.** in an ind
12e10 65 78 2e 20 20 54 68 65 20 4f 50 5f 43 6f 6c 75  ex.  The OP_Colu
12e20 6d 6e 20 6f 70 63 6f 64 65 20 63 61 6e 20 64 65  mn opcode can de
12e30 63 6f 64 65 20 74 68 65 20 72 65 63 6f 72 64 20  code the record 
12e40 6c 61 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 50 34 20  later..**.** P4 
12e50 6d 61 79 20 62 65 20 61 20 73 74 72 69 6e 67 20  may be a string 
12e60 74 68 61 74 20 69 73 20 50 32 20 63 68 61 72 61  that is P2 chara
12e70 63 74 65 72 73 20 6c 6f 6e 67 2e 20 20 54 68 65  cters long.  The
12e80 20 6e 74 68 20 63 68 61 72 61 63 74 65 72 20 6f   nth character o
12e90 66 20 74 68 65 0a 2a 2a 20 73 74 72 69 6e 67 20  f the.** string 
12ea0 69 6e 64 69 63 61 74 65 73 20 74 68 65 20 63 6f  indicates the co
12eb0 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 20 74 68  lumn affinity th
12ec0 61 74 20 73 68 6f 75 6c 64 20 62 65 20 75 73 65  at should be use
12ed0 64 20 66 6f 72 20 74 68 65 20 6e 74 68 0a 2a 2a  d for the nth.**
12ee0 20 66 69 65 6c 64 20 6f 66 20 74 68 65 20 69 6e   field of the in
12ef0 64 65 78 20 6b 65 79 2e 0a 2a 2a 0a 2a 2a 20 54  dex key..**.** T
12f00 68 65 20 6d 61 70 70 69 6e 67 20 66 72 6f 6d 20  he mapping from 
12f10 63 68 61 72 61 63 74 65 72 20 74 6f 20 61 66 66  character to aff
12f20 69 6e 69 74 79 20 69 73 20 67 69 76 65 6e 20 62  inity is given b
12f30 79 20 74 68 65 20 53 51 4c 49 54 45 5f 41 46 46  y the SQLITE_AFF
12f40 5f 0a 2a 2a 20 6d 61 63 72 6f 73 20 64 65 66 69  _.** macros defi
12f50 6e 65 64 20 69 6e 20 73 71 6c 69 74 65 49 6e 74  ned in sqliteInt
12f60 2e 68 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20  .h..**.** If P4 
12f70 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 61 6c 6c  is NULL then all
12f80 20 69 6e 64 65 78 20 66 69 65 6c 64 73 20 68 61   index fields ha
12f90 76 65 20 74 68 65 20 61 66 66 69 6e 69 74 79 20  ve the affinity 
12fa0 4e 4f 4e 45 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  NONE..*/.case OP
12fb0 5f 4d 61 6b 65 52 65 63 6f 72 64 3a 20 7b 0a 20  _MakeRecord: {. 
12fc0 20 75 38 20 2a 7a 4e 65 77 52 65 63 6f 72 64 3b   u8 *zNewRecord;
12fd0 20 20 20 20 20 20 20 20 2f 2a 20 41 20 62 75 66          /* A buf
12fe0 66 65 72 20 74 6f 20 68 6f 6c 64 20 74 68 65 20  fer to hold the 
12ff0 64 61 74 61 20 66 6f 72 20 74 68 65 20 6e 65 77  data for the new
13000 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 4d 65 6d   record */.  Mem
13010 20 2a 70 52 65 63 3b 20 20 20 20 20 20 20 20 20   *pRec;         
13020 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 77 20 72      /* The new r
13030 65 63 6f 72 64 20 2a 2f 0a 20 20 75 36 34 20 6e  ecord */.  u64 n
13040 44 61 74 61 3b 20 20 20 20 20 20 20 20 20 20 20  Data;           
13050 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62    /* Number of b
13060 79 74 65 73 20 6f 66 20 64 61 74 61 20 73 70 61  ytes of data spa
13070 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 48 64 72  ce */.  int nHdr
13080 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
13090 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  * Number of byte
130a0 73 20 6f 66 20 68 65 61 64 65 72 20 73 70 61 63  s of header spac
130b0 65 20 2a 2f 0a 20 20 69 36 34 20 6e 42 79 74 65  e */.  i64 nByte
130c0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
130d0 20 44 61 74 61 20 73 70 61 63 65 20 72 65 71 75   Data space requ
130e0 69 72 65 64 20 66 6f 72 20 74 68 69 73 20 72 65  ired for this re
130f0 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 5a  cord */.  int nZ
13100 65 72 6f 3b 20 20 20 20 20 20 20 20 20 20 20 20  ero;            
13110 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 7a 65   /* Number of ze
13120 72 6f 20 62 79 74 65 73 20 61 74 20 74 68 65 20  ro bytes at the 
13130 65 6e 64 20 6f 66 20 74 68 65 20 72 65 63 6f 72  end of the recor
13140 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 61 72 69  d */.  int nVari
13150 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  nt;           /*
13160 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   Number of bytes
13170 20 69 6e 20 61 20 76 61 72 69 6e 74 20 2a 2f 0a   in a varint */.
13180 20 20 75 33 32 20 73 65 72 69 61 6c 5f 74 79 70    u32 serial_typ
13190 65 3b 20 20 20 20 20 20 20 2f 2a 20 54 79 70 65  e;       /* Type
131a0 20 66 69 65 6c 64 20 2a 2f 0a 20 20 4d 65 6d 20   field */.  Mem 
131b0 2a 70 44 61 74 61 30 3b 20 20 20 20 20 20 20 20  *pData0;        
131c0 20 20 20 2f 2a 20 46 69 72 73 74 20 66 69 65 6c     /* First fiel
131d0 64 20 74 6f 20 62 65 20 63 6f 6d 62 69 6e 65 64  d to be combined
131e0 20 69 6e 74 6f 20 74 68 65 20 72 65 63 6f 72 64   into the record
131f0 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4c 61 73 74   */.  Mem *pLast
13200 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
13210 4c 61 73 74 20 66 69 65 6c 64 20 6f 66 20 74 68  Last field of th
13220 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e  e record */.  in
13230 74 20 6e 46 69 65 6c 64 3b 20 20 20 20 20 20 20  t nField;       
13240 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
13250 66 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20  f fields in the 
13260 72 65 63 6f 72 64 20 2a 2f 0a 20 20 63 68 61 72  record */.  char
13270 20 2a 7a 41 66 66 69 6e 69 74 79 3b 20 20 20 20   *zAffinity;    
13280 20 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69     /* The affini
13290 74 79 20 73 74 72 69 6e 67 20 66 6f 72 20 74 68  ty string for th
132a0 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e  e record */.  in
132b0 74 20 66 69 6c 65 5f 66 6f 72 6d 61 74 3b 20 20  t file_format;  
132c0 20 20 20 20 20 2f 2a 20 46 69 6c 65 20 66 6f 72       /* File for
132d0 6d 61 74 20 74 6f 20 75 73 65 20 66 6f 72 20 65  mat to use for e
132e0 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20 20 69 6e 74  ncoding */.  int
132f0 20 69 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   i;             
13300 20 20 20 20 2f 2a 20 53 70 61 63 65 20 75 73 65      /* Space use
13310 64 20 69 6e 20 7a 4e 65 77 52 65 63 6f 72 64 5b  d in zNewRecord[
13320 5d 20 2a 2f 0a 20 20 69 6e 74 20 6c 65 6e 3b 20  ] */.  int len; 
13330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
13340 20 4c 65 6e 67 74 68 20 6f 66 20 61 20 66 69 65   Length of a fie
13350 6c 64 20 2a 2f 0a 0a 20 20 2f 2a 20 41 73 73 75  ld */..  /* Assu
13360 6d 69 6e 67 20 74 68 65 20 72 65 63 6f 72 64 20  ming the record 
13370 63 6f 6e 74 61 69 6e 73 20 4e 20 66 69 65 6c 64  contains N field
13380 73 2c 20 74 68 65 20 72 65 63 6f 72 64 20 66 6f  s, the record fo
13390 72 6d 61 74 20 6c 6f 6f 6b 73 0a 20 20 2a 2a 20  rmat looks.  ** 
133a0 6c 69 6b 65 20 74 68 69 73 3a 0a 20 20 2a 2a 0a  like this:.  **.
133b0 20 20 2a 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d    ** -----------
133c0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
133d0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
133e0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
133f0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20  -------------.  
13400 2a 2a 20 7c 20 68 64 72 2d 73 69 7a 65 20 7c 20  ** | hdr-size | 
13410 74 79 70 65 20 30 20 7c 20 74 79 70 65 20 31 20  type 0 | type 1 
13420 7c 20 2e 2e 2e 20 7c 20 74 79 70 65 20 4e 2d 31  | ... | type N-1
13430 20 7c 20 64 61 74 61 30 20 7c 20 2e 2e 2e 20 7c   | data0 | ... |
13440 20 64 61 74 61 20 4e 2d 31 20 7c 20 0a 20 20 2a   data N-1 | .  *
13450 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  * --------------
13460 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13470 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13480 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13490 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2a 0a  ----------.  **.
134a0 20 20 2a 2a 20 44 61 74 61 28 30 29 20 69 73 20    ** Data(0) is 
134b0 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69 73  taken from regis
134c0 74 65 72 20 50 31 2e 20 20 44 61 74 61 28 31 29  ter P1.  Data(1)
134d0 20 63 6f 6d 65 73 20 66 72 6f 6d 20 72 65 67 69   comes from regi
134e0 73 74 65 72 20 50 31 2b 31 0a 20 20 2a 2a 20 61  ster P1+1.  ** a
134f0 6e 64 20 73 6f 20 66 72 6f 74 68 2e 0a 20 20 2a  nd so froth..  *
13500 2a 0a 20 20 2a 2a 20 45 61 63 68 20 74 79 70 65  *.  ** Each type
13510 20 66 69 65 6c 64 20 69 73 20 61 20 76 61 72 69   field is a vari
13520 6e 74 20 72 65 70 72 65 73 65 6e 74 69 6e 67 20  nt representing 
13530 74 68 65 20 73 65 72 69 61 6c 20 74 79 70 65 20  the serial type 
13540 6f 66 20 74 68 65 20 0a 20 20 2a 2a 20 63 6f 72  of the .  ** cor
13550 72 65 73 70 6f 6e 64 69 6e 67 20 64 61 74 61 20  responding data 
13560 65 6c 65 6d 65 6e 74 20 28 73 65 65 20 73 71 6c  element (see sql
13570 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 54 79  ite3VdbeSerialTy
13580 70 65 28 29 29 2e 20 54 68 65 0a 20 20 2a 2a 20  pe()). The.  ** 
13590 68 64 72 2d 73 69 7a 65 20 66 69 65 6c 64 20 69  hdr-size field i
135a0 73 20 61 6c 73 6f 20 61 20 76 61 72 69 6e 74 20  s also a varint 
135b0 77 68 69 63 68 20 69 73 20 74 68 65 20 6f 66 66  which is the off
135c0 73 65 74 20 66 72 6f 6d 20 74 68 65 20 62 65 67  set from the beg
135d0 69 6e 6e 69 6e 67 0a 20 20 2a 2a 20 6f 66 20 74  inning.  ** of t
135e0 68 65 20 72 65 63 6f 72 64 20 74 6f 20 64 61 74  he record to dat
135f0 61 30 2e 0a 20 20 2a 2f 0a 20 20 6e 44 61 74 61  a0..  */.  nData
13600 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 2f 2a   = 0;         /*
13610 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   Number of bytes
13620 20 6f 66 20 64 61 74 61 20 73 70 61 63 65 20 2a   of data space *
13630 2f 0a 20 20 6e 48 64 72 20 3d 20 30 3b 20 20 20  /.  nHdr = 0;   
13640 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
13650 20 6f 66 20 62 79 74 65 73 20 6f 66 20 68 65 61   of bytes of hea
13660 64 65 72 20 73 70 61 63 65 20 2a 2f 0a 20 20 6e  der space */.  n
13670 42 79 74 65 20 3d 20 30 3b 20 20 20 20 20 20 20  Byte = 0;       
13680 20 20 2f 2a 20 44 61 74 61 20 73 70 61 63 65 20    /* Data space 
13690 72 65 71 75 69 72 65 64 20 66 6f 72 20 74 68 69  required for thi
136a0 73 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 6e 5a  s record */.  nZ
136b0 65 72 6f 20 3d 20 30 3b 20 20 20 20 20 20 20 20  ero = 0;        
136c0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 7a 65   /* Number of ze
136d0 72 6f 20 62 79 74 65 73 20 61 74 20 74 68 65 20  ro bytes at the 
136e0 65 6e 64 20 6f 66 20 74 68 65 20 72 65 63 6f 72  end of the recor
136f0 64 20 2a 2f 0a 20 20 6e 46 69 65 6c 64 20 3d 20  d */.  nField = 
13700 70 4f 70 2d 3e 70 31 3b 0a 20 20 7a 41 66 66 69  pOp->p1;.  zAffi
13710 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a  nity = pOp->p4.z
13720 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 46 69 65  ;.  assert( nFie
13730 6c 64 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 3e  ld>0 && pOp->p2>
13740 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 6e 46 69  0 && pOp->p2+nFi
13750 65 6c 64 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31 20 29  eld<=p->nMem+1 )
13760 3b 0a 20 20 70 44 61 74 61 30 20 3d 20 26 61 4d  ;.  pData0 = &aM
13770 65 6d 5b 6e 46 69 65 6c 64 5d 3b 0a 20 20 6e 46  em[nField];.  nF
13780 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a  ield = pOp->p2;.
13790 20 20 70 4c 61 73 74 20 3d 20 26 70 44 61 74 61    pLast = &pData
137a0 30 5b 6e 46 69 65 6c 64 2d 31 5d 3b 0a 20 20 66  0[nField-1];.  f
137b0 69 6c 65 5f 66 6f 72 6d 61 74 20 3d 20 70 2d 3e  ile_format = p->
137c0 6d 69 6e 57 72 69 74 65 46 69 6c 65 46 6f 72 6d  minWriteFileForm
137d0 61 74 3b 0a 0a 20 20 2f 2a 20 49 64 65 6e 74 69  at;..  /* Identi
137e0 66 79 20 74 68 65 20 6f 75 74 70 75 74 20 72 65  fy the output re
137f0 67 69 73 74 65 72 20 2a 2f 0a 20 20 61 73 73 65  gister */.  asse
13800 72 74 28 20 70 4f 70 2d 3e 70 33 3c 70 4f 70 2d  rt( pOp->p3<pOp-
13810 3e 70 31 20 7c 7c 20 70 4f 70 2d 3e 70 33 3e 3d  >p1 || pOp->p3>=
13820 70 4f 70 2d 3e 70 31 2b 70 4f 70 2d 3e 70 32 20  pOp->p1+pOp->p2 
13830 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65  );.  pOut = &aMe
13840 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65  m[pOp->p3];.  me
13850 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
13860 2c 20 70 4f 75 74 29 3b 0a 0a 20 20 2f 2a 20 4c  , pOut);..  /* L
13870 6f 6f 70 20 74 68 72 6f 75 67 68 20 74 68 65 20  oop through the 
13880 65 6c 65 6d 65 6e 74 73 20 74 68 61 74 20 77 69  elements that wi
13890 6c 6c 20 6d 61 6b 65 20 75 70 20 74 68 65 20 72  ll make up the r
138a0 65 63 6f 72 64 20 74 6f 20 66 69 67 75 72 65 0a  ecord to figure.
138b0 20 20 2a 2a 20 6f 75 74 20 68 6f 77 20 6d 75 63    ** out how muc
138c0 68 20 73 70 61 63 65 20 69 73 20 72 65 71 75 69  h space is requi
138d0 72 65 64 20 66 6f 72 20 74 68 65 20 6e 65 77 20  red for the new 
138e0 72 65 63 6f 72 64 2e 0a 20 20 2a 2f 0a 20 20 66  record..  */.  f
138f0 6f 72 28 70 52 65 63 3d 70 44 61 74 61 30 3b 20  or(pRec=pData0; 
13900 70 52 65 63 3c 3d 70 4c 61 73 74 3b 20 70 52 65  pRec<=pLast; pRe
13910 63 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72 74  c++){.    assert
13920 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 52 65  ( memIsValid(pRe
13930 63 29 20 29 3b 0a 20 20 20 20 69 66 28 20 7a 41  c) );.    if( zA
13940 66 66 69 6e 69 74 79 20 29 7b 0a 20 20 20 20 20  ffinity ){.     
13950 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70   applyAffinity(p
13960 52 65 63 2c 20 7a 41 66 66 69 6e 69 74 79 5b 70  Rec, zAffinity[p
13970 52 65 63 2d 70 44 61 74 61 30 5d 2c 20 65 6e 63  Rec-pData0], enc
13980 6f 64 69 6e 67 29 3b 0a 20 20 20 20 7d 0a 20 20  oding);.    }.  
13990 20 20 69 66 28 20 70 52 65 63 2d 3e 66 6c 61 67    if( pRec->flag
139a0 73 26 4d 45 4d 5f 5a 65 72 6f 20 26 26 20 70 52  s&MEM_Zero && pR
139b0 65 63 2d 3e 6e 3e 30 20 29 7b 0a 20 20 20 20 20  ec->n>0 ){.     
139c0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 45   sqlite3VdbeMemE
139d0 78 70 61 6e 64 42 6c 6f 62 28 70 52 65 63 29 3b  xpandBlob(pRec);
139e0 0a 20 20 20 20 7d 0a 20 20 20 20 73 65 72 69 61  .    }.    seria
139f0 6c 5f 74 79 70 65 20 3d 20 73 71 6c 69 74 65 33  l_type = sqlite3
13a00 56 64 62 65 53 65 72 69 61 6c 54 79 70 65 28 70  VdbeSerialType(p
13a10 52 65 63 2c 20 66 69 6c 65 5f 66 6f 72 6d 61 74  Rec, file_format
13a20 29 3b 0a 20 20 20 20 6c 65 6e 20 3d 20 73 71 6c  );.    len = sql
13a30 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 54 79  ite3VdbeSerialTy
13a40 70 65 4c 65 6e 28 73 65 72 69 61 6c 5f 74 79 70  peLen(serial_typ
13a50 65 29 3b 0a 20 20 20 20 6e 44 61 74 61 20 2b 3d  e);.    nData +=
13a60 20 6c 65 6e 3b 0a 20 20 20 20 6e 48 64 72 20 2b   len;.    nHdr +
13a70 3d 20 73 71 6c 69 74 65 33 56 61 72 69 6e 74 4c  = sqlite3VarintL
13a80 65 6e 28 73 65 72 69 61 6c 5f 74 79 70 65 29 3b  en(serial_type);
13a90 0a 20 20 20 20 69 66 28 20 70 52 65 63 2d 3e 66  .    if( pRec->f
13aa0 6c 61 67 73 20 26 20 4d 45 4d 5f 5a 65 72 6f 20  lags & MEM_Zero 
13ab0 29 7b 0a 20 20 20 20 20 20 2f 2a 20 4f 6e 6c 79  ){.      /* Only
13ac0 20 70 75 72 65 20 7a 65 72 6f 2d 66 69 6c 6c 65   pure zero-fille
13ad0 64 20 42 4c 4f 42 73 20 63 61 6e 20 62 65 20 69  d BLOBs can be i
13ae0 6e 70 75 74 20 74 6f 20 74 68 69 73 20 4f 70 63  nput to this Opc
13af0 6f 64 65 2e 0a 20 20 20 20 20 20 2a 2a 20 57 65  ode..      ** We
13b00 20 64 6f 20 6e 6f 74 20 61 6c 6c 6f 77 20 62 6c   do not allow bl
13b10 6f 62 73 20 77 69 74 68 20 61 20 70 72 65 66 69  obs with a prefi
13b20 78 20 61 6e 64 20 61 20 7a 65 72 6f 2d 66 69 6c  x and a zero-fil
13b30 6c 65 64 20 74 61 69 6c 2e 20 2a 2f 0a 20 20 20  led tail. */.   
13b40 20 20 20 6e 5a 65 72 6f 20 2b 3d 20 70 52 65 63     nZero += pRec
13b50 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a 20 20 20 20 7d  ->u.nZero;.    }
13b60 65 6c 73 65 20 69 66 28 20 6c 65 6e 20 29 7b 0a  else if( len ){.
13b70 20 20 20 20 20 20 6e 5a 65 72 6f 20 3d 20 30 3b        nZero = 0;
13b80 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 2f 2a  .    }.  }..  /*
13b90 20 41 64 64 20 74 68 65 20 69 6e 69 74 69 61 6c   Add the initial
13ba0 20 68 65 61 64 65 72 20 76 61 72 69 6e 74 20 61   header varint a
13bb0 6e 64 20 74 6f 74 61 6c 20 74 68 65 20 73 69 7a  nd total the siz
13bc0 65 20 2a 2f 0a 20 20 6e 48 64 72 20 2b 3d 20 6e  e */.  nHdr += n
13bd0 56 61 72 69 6e 74 20 3d 20 73 71 6c 69 74 65 33  Varint = sqlite3
13be0 56 61 72 69 6e 74 4c 65 6e 28 6e 48 64 72 29 3b  VarintLen(nHdr);
13bf0 0a 20 20 69 66 28 20 6e 56 61 72 69 6e 74 3c 73  .  if( nVarint<s
13c00 71 6c 69 74 65 33 56 61 72 69 6e 74 4c 65 6e 28  qlite3VarintLen(
13c10 6e 48 64 72 29 20 29 7b 0a 20 20 20 20 6e 48 64  nHdr) ){.    nHd
13c20 72 2b 2b 3b 0a 20 20 7d 0a 20 20 6e 42 79 74 65  r++;.  }.  nByte
13c30 20 3d 20 6e 48 64 72 2b 6e 44 61 74 61 2d 6e 5a   = nHdr+nData-nZ
13c40 65 72 6f 3b 0a 20 20 69 66 28 20 6e 42 79 74 65  ero;.  if( nByte
13c50 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49  >db->aLimit[SQLI
13c60 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d  TE_LIMIT_LENGTH]
13c70 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f   ){.    goto too
13c80 5f 62 69 67 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20  _big;.  }..  /* 
13c90 4d 61 6b 65 20 73 75 72 65 20 74 68 65 20 6f 75  Make sure the ou
13ca0 74 70 75 74 20 72 65 67 69 73 74 65 72 20 68 61  tput register ha
13cb0 73 20 61 20 62 75 66 66 65 72 20 6c 61 72 67 65  s a buffer large
13cc0 20 65 6e 6f 75 67 68 20 74 6f 20 73 74 6f 72 65   enough to store
13cd0 20 0a 20 20 2a 2a 20 74 68 65 20 6e 65 77 20 72   .  ** the new r
13ce0 65 63 6f 72 64 2e 20 54 68 65 20 6f 75 74 70 75  ecord. The outpu
13cf0 74 20 72 65 67 69 73 74 65 72 20 28 70 4f 70 2d  t register (pOp-
13d00 3e 70 33 29 20 69 73 20 6e 6f 74 20 61 6c 6c 6f  >p3) is not allo
13d10 77 65 64 20 74 6f 0a 20 20 2a 2a 20 62 65 20 6f  wed to.  ** be o
13d20 6e 65 20 6f 66 20 74 68 65 20 69 6e 70 75 74 20  ne of the input 
13d30 72 65 67 69 73 74 65 72 73 20 28 62 65 63 61 75  registers (becau
13d40 73 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  se the following
13d50 20 63 61 6c 6c 20 74 6f 0a 20 20 2a 2a 20 73 71   call to.  ** sq
13d60 6c 69 74 65 33 56 64 62 65 4d 65 6d 47 72 6f 77  lite3VdbeMemGrow
13d70 28 29 20 63 6f 75 6c 64 20 63 6c 6f 62 62 65 72  () could clobber
13d80 20 74 68 65 20 76 61 6c 75 65 20 62 65 66 6f 72   the value befor
13d90 65 20 69 74 20 69 73 20 75 73 65 64 29 2e 0a 20  e it is used).. 
13da0 20 2a 2f 0a 20 20 69 66 28 20 73 71 6c 69 74 65   */.  if( sqlite
13db0 33 56 64 62 65 4d 65 6d 47 72 6f 77 28 70 4f 75  3VdbeMemGrow(pOu
13dc0 74 2c 20 28 69 6e 74 29 6e 42 79 74 65 2c 20 30  t, (int)nByte, 0
13dd0 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f  ) ){.    goto no
13de0 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 7a 4e 65 77  _mem;.  }.  zNew
13df0 52 65 63 6f 72 64 20 3d 20 28 75 38 20 2a 29 70  Record = (u8 *)p
13e00 4f 75 74 2d 3e 7a 3b 0a 0a 20 20 2f 2a 20 57 72  Out->z;..  /* Wr
13e10 69 74 65 20 74 68 65 20 72 65 63 6f 72 64 20 2a  ite the record *
13e20 2f 0a 20 20 69 20 3d 20 70 75 74 56 61 72 69 6e  /.  i = putVarin
13e30 74 33 32 28 7a 4e 65 77 52 65 63 6f 72 64 2c 20  t32(zNewRecord, 
13e40 6e 48 64 72 29 3b 0a 20 20 66 6f 72 28 70 52 65  nHdr);.  for(pRe
13e50 63 3d 70 44 61 74 61 30 3b 20 70 52 65 63 3c 3d  c=pData0; pRec<=
13e60 70 4c 61 73 74 3b 20 70 52 65 63 2b 2b 29 7b 0a  pLast; pRec++){.
13e70 20 20 20 20 73 65 72 69 61 6c 5f 74 79 70 65 20      serial_type 
13e80 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72  = sqlite3VdbeSer
13e90 69 61 6c 54 79 70 65 28 70 52 65 63 2c 20 66 69  ialType(pRec, fi
13ea0 6c 65 5f 66 6f 72 6d 61 74 29 3b 0a 20 20 20 20  le_format);.    
13eb0 69 20 2b 3d 20 70 75 74 56 61 72 69 6e 74 33 32  i += putVarint32
13ec0 28 26 7a 4e 65 77 52 65 63 6f 72 64 5b 69 5d 2c  (&zNewRecord[i],
13ed0 20 73 65 72 69 61 6c 5f 74 79 70 65 29 3b 20 20   serial_type);  
13ee0 20 20 20 20 2f 2a 20 73 65 72 69 61 6c 20 74 79      /* serial ty
13ef0 70 65 20 2a 2f 0a 20 20 7d 0a 20 20 66 6f 72 28  pe */.  }.  for(
13f00 70 52 65 63 3d 70 44 61 74 61 30 3b 20 70 52 65  pRec=pData0; pRe
13f10 63 3c 3d 70 4c 61 73 74 3b 20 70 52 65 63 2b 2b  c<=pLast; pRec++
13f20 29 7b 20 20 2f 2a 20 73 65 72 69 61 6c 20 64 61  ){  /* serial da
13f30 74 61 20 2a 2f 0a 20 20 20 20 69 20 2b 3d 20 73  ta */.    i += s
13f40 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c  qlite3VdbeSerial
13f50 50 75 74 28 26 7a 4e 65 77 52 65 63 6f 72 64 5b  Put(&zNewRecord[
13f60 69 5d 2c 20 28 69 6e 74 29 28 6e 42 79 74 65 2d  i], (int)(nByte-
13f70 69 29 2c 20 70 52 65 63 2c 66 69 6c 65 5f 66 6f  i), pRec,file_fo
13f80 72 6d 61 74 29 3b 0a 20 20 7d 0a 20 20 61 73 73  rmat);.  }.  ass
13f90 65 72 74 28 20 69 3d 3d 6e 42 79 74 65 20 29 3b  ert( i==nByte );
13fa0 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
13fb0 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33  >p3>0 && pOp->p3
13fc0 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70  <=p->nMem );.  p
13fd0 4f 75 74 2d 3e 6e 20 3d 20 28 69 6e 74 29 6e 42  Out->n = (int)nB
13fe0 79 74 65 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61  yte;.  pOut->fla
13ff0 67 73 20 3d 20 4d 45 4d 5f 42 6c 6f 62 20 7c 20  gs = MEM_Blob | 
14000 4d 45 4d 5f 44 79 6e 3b 0a 20 20 70 4f 75 74 2d  MEM_Dyn;.  pOut-
14010 3e 78 44 65 6c 20 3d 20 30 3b 0a 20 20 69 66 28  >xDel = 0;.  if(
14020 20 6e 5a 65 72 6f 20 29 7b 0a 20 20 20 20 70 4f   nZero ){.    pO
14030 75 74 2d 3e 75 2e 6e 5a 65 72 6f 20 3d 20 6e 5a  ut->u.nZero = nZ
14040 65 72 6f 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66  ero;.    pOut->f
14050 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 5a 65 72 6f  lags |= MEM_Zero
14060 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 65 6e  ;.  }.  pOut->en
14070 63 20 3d 20 53 51 4c 49 54 45 5f 55 54 46 38 3b  c = SQLITE_UTF8;
14080 20 20 2f 2a 20 49 6e 20 63 61 73 65 20 74 68 65    /* In case the
14090 20 62 6c 6f 62 20 69 73 20 65 76 65 72 20 63 6f   blob is ever co
140a0 6e 76 65 72 74 65 64 20 74 6f 20 74 65 78 74 20  nverted to text 
140b0 2a 2f 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52  */.  REGISTER_TR
140c0 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4f 75  ACE(pOp->p3, pOu
140d0 74 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58  t);.  UPDATE_MAX
140e0 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b  _BLOBSIZE(pOut);
140f0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
14100 4f 70 63 6f 64 65 3a 20 43 6f 75 6e 74 20 50 31  Opcode: Count P1
14110 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
14120 53 74 6f 72 65 20 74 68 65 20 6e 75 6d 62 65 72  Store the number
14130 20 6f 66 20 65 6e 74 72 69 65 73 20 28 61 6e 20   of entries (an 
14140 69 6e 74 65 67 65 72 20 76 61 6c 75 65 29 20 69  integer value) i
14150 6e 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69  n the table or i
14160 6e 64 65 78 20 0a 2a 2a 20 6f 70 65 6e 65 64 20  ndex .** opened 
14170 62 79 20 63 75 72 73 6f 72 20 50 31 20 69 6e 20  by cursor P1 in 
14180 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2f 0a 23  register P2.*/.#
14190 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
141a0 49 54 5f 42 54 52 45 45 43 4f 55 4e 54 0a 63 61  IT_BTREECOUNT.ca
141b0 73 65 20 4f 50 5f 43 6f 75 6e 74 3a 20 7b 20 20  se OP_Count: {  
141c0 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70         /* out2-p
141d0 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69  rerelease */.  i
141e0 36 34 20 6e 45 6e 74 72 79 3b 0a 20 20 42 74 43  64 nEntry;.  BtC
141f0 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 0a 20  ursor *pCrsr;.. 
14200 20 70 43 72 73 72 20 3d 20 70 2d 3e 61 70 43 73   pCrsr = p->apCs
14210 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 70 43 75 72  r[pOp->p1]->pCur
14220 73 6f 72 3b 0a 20 20 69 66 28 20 70 43 72 73 72  sor;.  if( pCrsr
14230 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   ){.    rc = sql
14240 69 74 65 33 42 74 72 65 65 43 6f 75 6e 74 28 70  ite3BtreeCount(p
14250 43 72 73 72 2c 20 26 6e 45 6e 74 72 79 29 3b 0a  Crsr, &nEntry);.
14260 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 6e 45 6e    }else{.    nEn
14270 74 72 79 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 70  try = 0;.  }.  p
14280 4f 75 74 2d 3e 75 2e 69 20 3d 20 6e 45 6e 74 72  Out->u.i = nEntr
14290 79 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65  y;.  break;.}.#e
142a0 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  ndif../* Opcode:
142b0 20 53 61 76 65 70 6f 69 6e 74 20 50 31 20 2a 20   Savepoint P1 * 
142c0 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 4f 70 65  * P4 *.**.** Ope
142d0 6e 2c 20 72 65 6c 65 61 73 65 20 6f 72 20 72 6f  n, release or ro
142e0 6c 6c 62 61 63 6b 20 74 68 65 20 73 61 76 65 70  llback the savep
142f0 6f 69 6e 74 20 6e 61 6d 65 64 20 62 79 20 70 61  oint named by pa
14300 72 61 6d 65 74 65 72 20 50 34 2c 20 64 65 70 65  rameter P4, depe
14310 6e 64 69 6e 67 0a 2a 2a 20 6f 6e 20 74 68 65 20  nding.** on the 
14320 76 61 6c 75 65 20 6f 66 20 50 31 2e 20 54 6f 20  value of P1. To 
14330 6f 70 65 6e 20 61 20 6e 65 77 20 73 61 76 65 70  open a new savep
14340 6f 69 6e 74 2c 20 50 31 3d 3d 30 2e 20 54 6f 20  oint, P1==0. To 
14350 72 65 6c 65 61 73 65 20 28 63 6f 6d 6d 69 74 29  release (commit)
14360 20 61 6e 0a 2a 2a 20 65 78 69 73 74 69 6e 67 20   an.** existing 
14370 73 61 76 65 70 6f 69 6e 74 2c 20 50 31 3d 3d 31  savepoint, P1==1
14380 2c 20 6f 72 20 74 6f 20 72 6f 6c 6c 62 61 63 6b  , or to rollback
14390 20 61 6e 20 65 78 69 73 74 69 6e 67 20 73 61 76   an existing sav
143a0 65 70 6f 69 6e 74 20 50 31 3d 3d 32 2e 0a 2a 2f  epoint P1==2..*/
143b0 0a 63 61 73 65 20 4f 50 5f 53 61 76 65 70 6f 69  .case OP_Savepoi
143c0 6e 74 3a 20 7b 0a 20 20 69 6e 74 20 70 31 3b 20  nt: {.  int p1; 
143d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
143e0 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65          /* Value
143f0 20 6f 66 20 50 31 20 6f 70 65 72 61 6e 64 20 2a   of P1 operand *
14400 2f 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b  /.  char *zName;
14410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14420 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 73      /* Name of s
14430 61 76 65 70 6f 69 6e 74 20 2a 2f 0a 20 20 69 6e  avepoint */.  in
14440 74 20 6e 4e 61 6d 65 3b 0a 20 20 53 61 76 65 70  t nName;.  Savep
14450 6f 69 6e 74 20 2a 70 4e 65 77 3b 0a 20 20 53 61  oint *pNew;.  Sa
14460 76 65 70 6f 69 6e 74 20 2a 70 53 61 76 65 70 6f  vepoint *pSavepo
14470 69 6e 74 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74  int;.  Savepoint
14480 20 2a 70 54 6d 70 3b 0a 20 20 69 6e 74 20 69 53   *pTmp;.  int iS
14490 61 76 65 70 6f 69 6e 74 3b 0a 20 20 69 6e 74 20  avepoint;.  int 
144a0 69 69 3b 0a 0a 20 20 70 31 20 3d 20 70 4f 70 2d  ii;..  p1 = pOp-
144b0 3e 70 31 3b 0a 20 20 7a 4e 61 6d 65 20 3d 20 70  >p1;.  zName = p
144c0 4f 70 2d 3e 70 34 2e 7a 3b 0a 0a 20 20 2f 2a 20  Op->p4.z;..  /* 
144d0 41 73 73 65 72 74 20 74 68 61 74 20 74 68 65 20  Assert that the 
144e0 70 31 20 70 61 72 61 6d 65 74 65 72 20 69 73 20  p1 parameter is 
144f0 76 61 6c 69 64 2e 20 41 6c 73 6f 20 74 68 61 74  valid. Also that
14500 20 69 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20   if there is no 
14510 6f 70 65 6e 0a 20 20 2a 2a 20 74 72 61 6e 73 61  open.  ** transa
14520 63 74 69 6f 6e 2c 20 74 68 65 6e 20 74 68 65 72  ction, then ther
14530 65 20 63 61 6e 6e 6f 74 20 62 65 20 61 6e 79 20  e cannot be any 
14540 73 61 76 65 70 6f 69 6e 74 73 2e 20 0a 20 20 2a  savepoints. .  *
14550 2f 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e  /.  assert( db->
14560 70 53 61 76 65 70 6f 69 6e 74 3d 3d 30 20 7c 7c  pSavepoint==0 ||
14570 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d   db->autoCommit=
14580 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
14590 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 42 45  p1==SAVEPOINT_BE
145a0 47 49 4e 7c 7c 70 31 3d 3d 53 41 56 45 50 4f 49  GIN||p1==SAVEPOI
145b0 4e 54 5f 52 45 4c 45 41 53 45 7c 7c 70 31 3d 3d  NT_RELEASE||p1==
145c0 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41  SAVEPOINT_ROLLBA
145d0 43 4b 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  CK );.  assert( 
145e0 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 7c  db->pSavepoint |
145f0 7c 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74  | db->isTransact
14600 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3d 3d 30 20  ionSavepoint==0 
14610 29 3b 0a 20 20 61 73 73 65 72 74 28 20 63 68 65  );.  assert( che
14620 63 6b 53 61 76 65 70 6f 69 6e 74 43 6f 75 6e 74  ckSavepointCount
14630 28 64 62 29 20 29 3b 0a 0a 20 20 69 66 28 20 70  (db) );..  if( p
14640 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 42 45 47  1==SAVEPOINT_BEG
14650 49 4e 20 29 7b 0a 20 20 20 20 69 66 28 20 64 62  IN ){.    if( db
14660 2d 3e 77 72 69 74 65 56 64 62 65 43 6e 74 3e 30  ->writeVdbeCnt>0
14670 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 41 20 6e   ){.      /* A n
14680 65 77 20 73 61 76 65 70 6f 69 6e 74 20 63 61 6e  ew savepoint can
14690 6e 6f 74 20 62 65 20 63 72 65 61 74 65 64 20 69  not be created i
146a0 66 20 74 68 65 72 65 20 61 72 65 20 61 63 74 69  f there are acti
146b0 76 65 20 77 72 69 74 65 20 0a 20 20 20 20 20 20  ve write .      
146c0 2a 2a 20 73 74 61 74 65 6d 65 6e 74 73 20 28 69  ** statements (i
146d0 2e 65 2e 20 6f 70 65 6e 20 72 65 61 64 2f 77 72  .e. open read/wr
146e0 69 74 65 20 69 6e 63 72 65 6d 65 6e 74 61 6c 20  ite incremental 
146f0 62 6c 6f 62 20 68 61 6e 64 6c 65 73 29 2e 0a 20  blob handles).. 
14700 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 73 71       */.      sq
14710 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26  lite3SetString(&
14720 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20  p->zErrMsg, db, 
14730 22 63 61 6e 6e 6f 74 20 6f 70 65 6e 20 73 61 76  "cannot open sav
14740 65 70 6f 69 6e 74 20 2d 20 22 0a 20 20 20 20 20  epoint - ".     
14750 20 20 20 22 53 51 4c 20 73 74 61 74 65 6d 65 6e     "SQL statemen
14760 74 73 20 69 6e 20 70 72 6f 67 72 65 73 73 22 29  ts in progress")
14770 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c  ;.      rc = SQL
14780 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 7d 65  ITE_BUSY;.    }e
14790 6c 73 65 7b 0a 20 20 20 20 20 20 6e 4e 61 6d 65  lse{.      nName
147a0 20 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e   = sqlite3Strlen
147b0 33 30 28 7a 4e 61 6d 65 29 3b 0a 0a 20 20 20 20  30(zName);..    
147c0 20 20 2f 2a 20 43 72 65 61 74 65 20 61 20 6e 65    /* Create a ne
147d0 77 20 73 61 76 65 70 6f 69 6e 74 20 73 74 72 75  w savepoint stru
147e0 63 74 75 72 65 2e 20 2a 2f 0a 20 20 20 20 20 20  cture. */.      
147f0 70 4e 65 77 20 3d 20 73 71 6c 69 74 65 33 44 62  pNew = sqlite3Db
14800 4d 61 6c 6c 6f 63 52 61 77 28 64 62 2c 20 73 69  MallocRaw(db, si
14810 7a 65 6f 66 28 53 61 76 65 70 6f 69 6e 74 29 2b  zeof(Savepoint)+
14820 6e 4e 61 6d 65 2b 31 29 3b 0a 20 20 20 20 20 20  nName+1);.      
14830 69 66 28 20 70 4e 65 77 20 29 7b 0a 20 20 20 20  if( pNew ){.    
14840 20 20 20 20 70 4e 65 77 2d 3e 7a 4e 61 6d 65 20      pNew->zName 
14850 3d 20 28 63 68 61 72 20 2a 29 26 70 4e 65 77 5b  = (char *)&pNew[
14860 31 5d 3b 0a 20 20 20 20 20 20 20 20 6d 65 6d 63  1];.        memc
14870 70 79 28 70 4e 65 77 2d 3e 7a 4e 61 6d 65 2c 20  py(pNew->zName, 
14880 7a 4e 61 6d 65 2c 20 6e 4e 61 6d 65 2b 31 29 3b  zName, nName+1);
14890 0a 20 20 20 20 0a 20 20 20 20 20 20 20 20 2f 2a  .    .        /*
148a0 20 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20   If there is no 
148b0 6f 70 65 6e 20 74 72 61 6e 73 61 63 74 69 6f 6e  open transaction
148c0 2c 20 74 68 65 6e 20 6d 61 72 6b 20 74 68 69 73  , then mark this
148d0 20 61 73 20 61 20 73 70 65 63 69 61 6c 0a 20 20   as a special.  
148e0 20 20 20 20 20 20 2a 2a 20 22 74 72 61 6e 73 61        ** "transa
148f0 63 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 22  ction savepoint"
14900 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28  . */.        if(
14910 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20   db->autoCommit 
14920 29 7b 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d  ){.          db-
14930 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 30 3b  >autoCommit = 0;
14940 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 69  .          db->i
14950 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65  sTransactionSave
14960 70 6f 69 6e 74 20 3d 20 31 3b 0a 20 20 20 20 20  point = 1;.     
14970 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
14980 20 20 20 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69      db->nSavepoi
14990 6e 74 2b 2b 3b 0a 20 20 20 20 20 20 20 20 7d 0a  nt++;.        }.
149a0 20 20 20 20 0a 20 20 20 20 20 20 20 20 2f 2a 20      .        /* 
149b0 4c 69 6e 6b 20 74 68 65 20 6e 65 77 20 73 61 76  Link the new sav
149c0 65 70 6f 69 6e 74 20 69 6e 74 6f 20 74 68 65 20  epoint into the 
149d0 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 27  database handle'
149e0 73 20 6c 69 73 74 2e 20 2a 2f 0a 20 20 20 20 20  s list. */.     
149f0 20 20 20 70 4e 65 77 2d 3e 70 4e 65 78 74 20 3d     pNew->pNext =
14a00 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b   db->pSavepoint;
14a10 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 70 53 61  .        db->pSa
14a20 76 65 70 6f 69 6e 74 20 3d 20 70 4e 65 77 3b 0a  vepoint = pNew;.
14a30 20 20 20 20 20 20 20 20 70 4e 65 77 2d 3e 6e 44          pNew->nD
14a40 65 66 65 72 72 65 64 43 6f 6e 73 20 3d 20 64 62  eferredCons = db
14a50 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b  ->nDeferredCons;
14a60 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
14a70 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69 53 61 76   }else{.    iSav
14a80 65 70 6f 69 6e 74 20 3d 20 30 3b 0a 0a 20 20 20  epoint = 0;..   
14a90 20 2f 2a 20 46 69 6e 64 20 74 68 65 20 6e 61 6d   /* Find the nam
14aa0 65 64 20 73 61 76 65 70 6f 69 6e 74 2e 20 49 66  ed savepoint. If
14ab0 20 74 68 65 72 65 20 69 73 20 6e 6f 20 73 75 63   there is no suc
14ac0 68 20 73 61 76 65 70 6f 69 6e 74 2c 20 74 68 65  h savepoint, the
14ad0 6e 20 61 6e 0a 20 20 20 20 2a 2a 20 61 6e 20 65  n an.    ** an e
14ae0 72 72 6f 72 20 69 73 20 72 65 74 75 72 6e 65 64  rror is returned
14af0 20 74 6f 20 74 68 65 20 75 73 65 72 2e 20 20 2a   to the user.  *
14b00 2f 0a 20 20 20 20 66 6f 72 28 0a 20 20 20 20 20  /.    for(.     
14b10 20 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 64 62   pSavepoint = db
14b20 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b 20 0a 20  ->pSavepoint; . 
14b30 20 20 20 20 20 70 53 61 76 65 70 6f 69 6e 74 20       pSavepoint 
14b40 26 26 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d  && sqlite3StrICm
14b50 70 28 70 53 61 76 65 70 6f 69 6e 74 2d 3e 7a 4e  p(pSavepoint->zN
14b60 61 6d 65 2c 20 7a 4e 61 6d 65 29 3b 0a 20 20 20  ame, zName);.   
14b70 20 20 20 70 53 61 76 65 70 6f 69 6e 74 20 3d 20     pSavepoint = 
14b80 70 53 61 76 65 70 6f 69 6e 74 2d 3e 70 4e 65 78  pSavepoint->pNex
14b90 74 0a 20 20 20 20 29 7b 0a 20 20 20 20 20 20 69  t.    ){.      i
14ba0 53 61 76 65 70 6f 69 6e 74 2b 2b 3b 0a 20 20 20  Savepoint++;.   
14bb0 20 7d 0a 20 20 20 20 69 66 28 20 21 70 53 61 76   }.    if( !pSav
14bc0 65 70 6f 69 6e 74 20 29 7b 0a 20 20 20 20 20 20  epoint ){.      
14bd0 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67  sqlite3SetString
14be0 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62  (&p->zErrMsg, db
14bf0 2c 20 22 6e 6f 20 73 75 63 68 20 73 61 76 65 70  , "no such savep
14c00 6f 69 6e 74 3a 20 25 73 22 2c 20 7a 4e 61 6d 65  oint: %s", zName
14c10 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51  );.      rc = SQ
14c20 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20  LITE_ERROR;.    
14c30 7d 65 6c 73 65 20 69 66 28 20 0a 20 20 20 20 20  }else if( .     
14c40 20 20 20 64 62 2d 3e 77 72 69 74 65 56 64 62 65     db->writeVdbe
14c50 43 6e 74 3e 30 20 7c 7c 20 28 70 31 3d 3d 53 41  Cnt>0 || (p1==SA
14c60 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b  VEPOINT_ROLLBACK
14c70 20 26 26 20 64 62 2d 3e 61 63 74 69 76 65 56 64   && db->activeVd
14c80 62 65 43 6e 74 3e 31 29 20 0a 20 20 20 20 29 7b  beCnt>1) .    ){
14c90 0a 20 20 20 20 20 20 2f 2a 20 49 74 20 69 73 20  .      /* It is 
14ca0 6e 6f 74 20 70 6f 73 73 69 62 6c 65 20 74 6f 20  not possible to 
14cb0 72 65 6c 65 61 73 65 20 28 63 6f 6d 6d 69 74 29  release (commit)
14cc0 20 61 20 73 61 76 65 70 6f 69 6e 74 20 69 66 20   a savepoint if 
14cd0 74 68 65 72 65 20 61 72 65 20 0a 20 20 20 20 20  there are .     
14ce0 20 2a 2a 20 61 63 74 69 76 65 20 77 72 69 74 65   ** active write
14cf0 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 49 74 20   statements. It 
14d00 69 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65 20  is not possible 
14d10 74 6f 20 72 6f 6c 6c 62 61 63 6b 20 61 20 73 61  to rollback a sa
14d20 76 65 70 6f 69 6e 74 0a 20 20 20 20 20 20 2a 2a  vepoint.      **
14d30 20 69 66 20 74 68 65 72 65 20 61 72 65 20 61 6e   if there are an
14d40 79 20 61 63 74 69 76 65 20 73 74 61 74 65 6d 65  y active stateme
14d50 6e 74 73 20 61 74 20 61 6c 6c 2e 0a 20 20 20 20  nts at all..    
14d60 20 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69 74    */.      sqlit
14d70 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e  e3SetString(&p->
14d80 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 0a 20 20  zErrMsg, db, .  
14d90 20 20 20 20 20 20 22 63 61 6e 6e 6f 74 20 25 73        "cannot %s
14da0 20 73 61 76 65 70 6f 69 6e 74 20 2d 20 53 51 4c   savepoint - SQL
14db0 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 70   statements in p
14dc0 72 6f 67 72 65 73 73 22 2c 0a 20 20 20 20 20 20  rogress",.      
14dd0 20 20 28 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54    (p1==SAVEPOINT
14de0 5f 52 4f 4c 4c 42 41 43 4b 20 3f 20 22 72 6f 6c  _ROLLBACK ? "rol
14df0 6c 62 61 63 6b 22 3a 20 22 72 65 6c 65 61 73 65  lback": "release
14e00 22 29 0a 20 20 20 20 20 20 29 3b 0a 20 20 20 20  ").      );.    
14e10 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55    rc = SQLITE_BU
14e20 53 59 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 0a  SY;.    }else{..
14e30 20 20 20 20 20 20 2f 2a 20 44 65 74 65 72 6d 69        /* Determi
14e40 6e 65 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  ne whether or no
14e50 74 20 74 68 69 73 20 69 73 20 61 20 74 72 61 6e  t this is a tran
14e60 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e  saction savepoin
14e70 74 2e 20 49 66 20 73 6f 2c 0a 20 20 20 20 20 20  t. If so,.      
14e80 2a 2a 20 61 6e 64 20 74 68 69 73 20 69 73 20 61  ** and this is a
14e90 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64   RELEASE command
14ea0 2c 20 74 68 65 6e 20 74 68 65 20 63 75 72 72 65  , then the curre
14eb0 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 0a  nt transaction .
14ec0 20 20 20 20 20 20 2a 2a 20 69 73 20 63 6f 6d 6d        ** is comm
14ed0 69 74 74 65 64 2e 20 0a 20 20 20 20 20 20 2a 2f  itted. .      */
14ee0 0a 20 20 20 20 20 20 69 6e 74 20 69 73 54 72 61  .      int isTra
14ef0 6e 73 61 63 74 69 6f 6e 20 3d 20 70 53 61 76 65  nsaction = pSave
14f00 70 6f 69 6e 74 2d 3e 70 4e 65 78 74 3d 3d 30 20  point->pNext==0 
14f10 26 26 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63  && db->isTransac
14f20 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3b 0a 20  tionSavepoint;. 
14f30 20 20 20 20 20 69 66 28 20 69 73 54 72 61 6e 73       if( isTrans
14f40 61 63 74 69 6f 6e 20 26 26 20 70 31 3d 3d 53 41  action && p1==SA
14f50 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20  VEPOINT_RELEASE 
14f60 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 28  ){.        if( (
14f70 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
14f80 43 68 65 63 6b 46 6b 28 70 2c 20 31 29 29 21 3d  CheckFk(p, 1))!=
14f90 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
14fa0 20 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65         goto vdbe
14fb0 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 20  _return;.       
14fc0 20 7d 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 61   }.        db->a
14fd0 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 31 3b 0a 20  utoCommit = 1;. 
14fe0 20 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74         if( sqlit
14ff0 65 33 56 64 62 65 48 61 6c 74 28 70 29 3d 3d 53  e3VdbeHalt(p)==S
15000 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20  QLITE_BUSY ){.  
15010 20 20 20 20 20 20 20 20 70 2d 3e 70 63 20 3d 20          p->pc = 
15020 70 63 3b 0a 20 20 20 20 20 20 20 20 20 20 64 62  pc;.          db
15030 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 30  ->autoCommit = 0
15040 3b 0a 20 20 20 20 20 20 20 20 20 20 70 2d 3e 72  ;.          p->r
15050 63 20 3d 20 72 63 20 3d 20 53 51 4c 49 54 45 5f  c = rc = SQLITE_
15060 42 55 53 59 3b 0a 20 20 20 20 20 20 20 20 20 20  BUSY;.          
15070 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e  goto vdbe_return
15080 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
15090 20 20 20 20 64 62 2d 3e 69 73 54 72 61 6e 73 61      db->isTransa
150a0 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 20 3d  ctionSavepoint =
150b0 20 30 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d   0;.        rc =
150c0 20 70 2d 3e 72 63 3b 0a 20 20 20 20 20 20 7d 65   p->rc;.      }e
150d0 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 69 53 61  lse{.        iSa
150e0 76 65 70 6f 69 6e 74 20 3d 20 64 62 2d 3e 6e 53  vepoint = db->nS
150f0 61 76 65 70 6f 69 6e 74 20 2d 20 69 53 61 76 65  avepoint - iSave
15100 70 6f 69 6e 74 20 2d 20 31 3b 0a 20 20 20 20 20  point - 1;.     
15110 20 20 20 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c     for(ii=0; ii<
15120 64 62 2d 3e 6e 44 62 3b 20 69 69 2b 2b 29 7b 0a  db->nDb; ii++){.
15130 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 73            rc = s
15140 71 6c 69 74 65 33 42 74 72 65 65 53 61 76 65 70  qlite3BtreeSavep
15150 6f 69 6e 74 28 64 62 2d 3e 61 44 62 5b 69 69 5d  oint(db->aDb[ii]
15160 2e 70 42 74 2c 20 70 31 2c 20 69 53 61 76 65 70  .pBt, p1, iSavep
15170 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 20  oint);.         
15180 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
15190 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  OK ){.          
151a0 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
151b0 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20  _to_error;.     
151c0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d       }.        }
151d0 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 31 3d  .        if( p1=
151e0 3d 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42  =SAVEPOINT_ROLLB
151f0 41 43 4b 20 26 26 20 28 64 62 2d 3e 66 6c 61 67  ACK && (db->flag
15200 73 26 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43  s&SQLITE_InternC
15210 68 61 6e 67 65 73 29 21 3d 30 20 29 7b 0a 20 20  hanges)!=0 ){.  
15220 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 45          sqlite3E
15230 78 70 69 72 65 50 72 65 70 61 72 65 64 53 74 61  xpirePreparedSta
15240 74 65 6d 65 6e 74 73 28 64 62 29 3b 0a 20 20 20  tements(db);.   
15250 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 52 65         sqlite3Re
15260 73 65 74 49 6e 74 65 72 6e 61 6c 53 63 68 65 6d  setInternalSchem
15270 61 28 64 62 2c 20 30 29 3b 0a 20 20 20 20 20 20  a(db, 0);.      
15280 20 20 20 20 64 62 2d 3e 66 6c 61 67 73 20 3d 20      db->flags = 
15290 28 64 62 2d 3e 66 6c 61 67 73 20 7c 20 53 51 4c  (db->flags | SQL
152a0 49 54 45 5f 49 6e 74 65 72 6e 43 68 61 6e 67 65  ITE_InternChange
152b0 73 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  s);.        }.  
152c0 20 20 20 20 7d 0a 20 20 0a 20 20 20 20 20 20 2f      }.  .      /
152d0 2a 20 52 65 67 61 72 64 6c 65 73 73 20 6f 66 20  * Regardless of 
152e0 77 68 65 74 68 65 72 20 74 68 69 73 20 69 73 20  whether this is 
152f0 61 20 52 45 4c 45 41 53 45 20 6f 72 20 52 4f 4c  a RELEASE or ROL
15300 4c 42 41 43 4b 2c 20 64 65 73 74 72 6f 79 20 61  LBACK, destroy a
15310 6c 6c 20 0a 20 20 20 20 20 20 2a 2a 20 73 61 76  ll .      ** sav
15320 65 70 6f 69 6e 74 73 20 6e 65 73 74 65 64 20 69  epoints nested i
15330 6e 73 69 64 65 20 6f 66 20 74 68 65 20 73 61 76  nside of the sav
15340 65 70 6f 69 6e 74 20 62 65 69 6e 67 20 6f 70 65  epoint being ope
15350 72 61 74 65 64 20 6f 6e 2e 20 2a 2f 0a 20 20 20  rated on. */.   
15360 20 20 20 77 68 69 6c 65 28 20 64 62 2d 3e 70 53     while( db->pS
15370 61 76 65 70 6f 69 6e 74 21 3d 70 53 61 76 65 70  avepoint!=pSavep
15380 6f 69 6e 74 20 29 7b 0a 20 20 20 20 20 20 20 20  oint ){.        
15390 70 54 6d 70 20 3d 20 64 62 2d 3e 70 53 61 76 65  pTmp = db->pSave
153a0 70 6f 69 6e 74 3b 0a 20 20 20 20 20 20 20 20 64  point;.        d
153b0 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 3d 20  b->pSavepoint = 
153c0 70 54 6d 70 2d 3e 70 4e 65 78 74 3b 0a 20 20 20  pTmp->pNext;.   
153d0 20 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72       sqlite3DbFr
153e0 65 65 28 64 62 2c 20 70 54 6d 70 29 3b 0a 20 20  ee(db, pTmp);.  
153f0 20 20 20 20 20 20 64 62 2d 3e 6e 53 61 76 65 70        db->nSavep
15400 6f 69 6e 74 2d 2d 3b 0a 20 20 20 20 20 20 7d 0a  oint--;.      }.
15410 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 69 74 20  .      /* If it 
15420 69 73 20 61 20 52 45 4c 45 41 53 45 2c 20 74 68  is a RELEASE, th
15430 65 6e 20 64 65 73 74 72 6f 79 20 74 68 65 20 73  en destroy the s
15440 61 76 65 70 6f 69 6e 74 20 62 65 69 6e 67 20 6f  avepoint being o
15450 70 65 72 61 74 65 64 20 6f 6e 20 0a 20 20 20 20  perated on .    
15460 20 20 2a 2a 20 74 6f 6f 2e 20 49 66 20 69 74 20    ** too. If it 
15470 69 73 20 61 20 52 4f 4c 4c 42 41 43 4b 20 54 4f  is a ROLLBACK TO
15480 2c 20 74 68 65 6e 20 73 65 74 20 74 68 65 20 6e  , then set the n
15490 75 6d 62 65 72 20 6f 66 20 64 65 66 65 72 72 65  umber of deferre
154a0 64 20 0a 20 20 20 20 20 20 2a 2a 20 63 6f 6e 73  d .      ** cons
154b0 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e  traint violation
154c0 73 20 70 72 65 73 65 6e 74 20 69 6e 20 74 68 65  s present in the
154d0 20 64 61 74 61 62 61 73 65 20 74 6f 20 74 68 65   database to the
154e0 20 76 61 6c 75 65 20 73 74 6f 72 65 64 0a 20 20   value stored.  
154f0 20 20 20 20 2a 2a 20 77 68 65 6e 20 74 68 65 20      ** when the 
15500 73 61 76 65 70 6f 69 6e 74 20 77 61 73 20 63 72  savepoint was cr
15510 65 61 74 65 64 2e 20 20 2a 2f 0a 20 20 20 20 20  eated.  */.     
15520 20 69 66 28 20 70 31 3d 3d 53 41 56 45 50 4f 49   if( p1==SAVEPOI
15530 4e 54 5f 52 45 4c 45 41 53 45 20 29 7b 0a 20 20  NT_RELEASE ){.  
15540 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 53        assert( pS
15550 61 76 65 70 6f 69 6e 74 3d 3d 64 62 2d 3e 70 53  avepoint==db->pS
15560 61 76 65 70 6f 69 6e 74 20 29 3b 0a 20 20 20 20  avepoint );.    
15570 20 20 20 20 64 62 2d 3e 70 53 61 76 65 70 6f 69      db->pSavepoi
15580 6e 74 20 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d  nt = pSavepoint-
15590 3e 70 4e 65 78 74 3b 0a 20 20 20 20 20 20 20 20  >pNext;.        
155a0 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62  sqlite3DbFree(db
155b0 2c 20 70 53 61 76 65 70 6f 69 6e 74 29 3b 0a 20  , pSavepoint);. 
155c0 20 20 20 20 20 20 20 69 66 28 20 21 69 73 54 72         if( !isTr
155d0 61 6e 73 61 63 74 69 6f 6e 20 29 7b 0a 20 20 20  ansaction ){.   
155e0 20 20 20 20 20 20 20 64 62 2d 3e 6e 53 61 76 65         db->nSave
155f0 70 6f 69 6e 74 2d 2d 3b 0a 20 20 20 20 20 20 20  point--;.       
15600 20 7d 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a   }.      }else{.
15610 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 44 65 66          db->nDef
15620 65 72 72 65 64 43 6f 6e 73 20 3d 20 70 53 61 76  erredCons = pSav
15630 65 70 6f 69 6e 74 2d 3e 6e 44 65 66 65 72 72 65  epoint->nDeferre
15640 64 43 6f 6e 73 3b 0a 20 20 20 20 20 20 7d 0a 20  dCons;.      }. 
15650 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 62 72 65 61     }.  }..  brea
15660 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
15670 20 41 75 74 6f 43 6f 6d 6d 69 74 20 50 31 20 50   AutoCommit P1 P
15680 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 65  2 * * *.**.** Se
15690 74 20 74 68 65 20 64 61 74 61 62 61 73 65 20 61  t the database a
156a0 75 74 6f 2d 63 6f 6d 6d 69 74 20 66 6c 61 67 20  uto-commit flag 
156b0 74 6f 20 50 31 20 28 31 20 6f 72 20 30 29 2e 20  to P1 (1 or 0). 
156c0 49 66 20 50 32 20 69 73 20 74 72 75 65 2c 20 72  If P2 is true, r
156d0 6f 6c 6c 0a 2a 2a 20 62 61 63 6b 20 61 6e 79 20  oll.** back any 
156e0 63 75 72 72 65 6e 74 6c 79 20 61 63 74 69 76 65  currently active
156f0 20 62 74 72 65 65 20 74 72 61 6e 73 61 63 74 69   btree transacti
15700 6f 6e 73 2e 20 49 66 20 74 68 65 72 65 20 61 72  ons. If there ar
15710 65 20 61 6e 79 20 61 63 74 69 76 65 0a 2a 2a 20  e any active.** 
15720 56 4d 73 20 28 61 70 61 72 74 20 66 72 6f 6d 20  VMs (apart from 
15730 74 68 69 73 20 6f 6e 65 29 2c 20 74 68 65 6e 20  this one), then 
15740 61 20 52 4f 4c 4c 42 41 43 4b 20 66 61 69 6c 73  a ROLLBACK fails
15750 2e 20 20 41 20 43 4f 4d 4d 49 54 20 66 61 69 6c  .  A COMMIT fail
15760 73 20 69 66 0a 2a 2a 20 74 68 65 72 65 20 61 72  s if.** there ar
15770 65 20 61 63 74 69 76 65 20 77 72 69 74 69 6e 67  e active writing
15780 20 56 4d 73 20 6f 72 20 61 63 74 69 76 65 20 56   VMs or active V
15790 4d 73 20 74 68 61 74 20 75 73 65 20 73 68 61 72  Ms that use shar
157a0 65 64 20 63 61 63 68 65 2e 0a 2a 2a 0a 2a 2a 20  ed cache..**.** 
157b0 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  This instruction
157c0 20 63 61 75 73 65 73 20 74 68 65 20 56 4d 20 74   causes the VM t
157d0 6f 20 68 61 6c 74 2e 0a 2a 2f 0a 63 61 73 65 20  o halt..*/.case 
157e0 4f 50 5f 41 75 74 6f 43 6f 6d 6d 69 74 3a 20 7b  OP_AutoCommit: {
157f0 0a 20 20 69 6e 74 20 64 65 73 69 72 65 64 41 75  .  int desiredAu
15800 74 6f 43 6f 6d 6d 69 74 3b 0a 20 20 69 6e 74 20  toCommit;.  int 
15810 69 52 6f 6c 6c 62 61 63 6b 3b 0a 20 20 69 6e 74  iRollback;.  int
15820 20 74 75 72 6e 4f 6e 41 43 3b 0a 0a 20 20 64 65   turnOnAC;..  de
15830 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 20  siredAutoCommit 
15840 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 69 52 6f  = pOp->p1;.  iRo
15850 6c 6c 62 61 63 6b 20 3d 20 70 4f 70 2d 3e 70 32  llback = pOp->p2
15860 3b 0a 20 20 74 75 72 6e 4f 6e 41 43 20 3d 20 64  ;.  turnOnAC = d
15870 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74  esiredAutoCommit
15880 20 26 26 20 21 64 62 2d 3e 61 75 74 6f 43 6f 6d   && !db->autoCom
15890 6d 69 74 3b 0a 20 20 61 73 73 65 72 74 28 20 64  mit;.  assert( d
158a0 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74  esiredAutoCommit
158b0 3d 3d 31 20 7c 7c 20 64 65 73 69 72 65 64 41 75  ==1 || desiredAu
158c0 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 29 3b 0a 20  toCommit==0 );. 
158d0 20 61 73 73 65 72 74 28 20 64 65 73 69 72 65 64   assert( desired
158e0 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20 7c 7c  AutoCommit==1 ||
158f0 20 69 52 6f 6c 6c 62 61 63 6b 3d 3d 30 20 29 3b   iRollback==0 );
15900 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 61  .  assert( db->a
15910 63 74 69 76 65 56 64 62 65 43 6e 74 3e 30 20 29  ctiveVdbeCnt>0 )
15920 3b 20 20 2f 2a 20 41 74 20 6c 65 61 73 74 20 74  ;  /* At least t
15930 68 69 73 20 6f 6e 65 20 56 4d 20 69 73 20 61 63  his one VM is ac
15940 74 69 76 65 20 2a 2f 0a 0a 20 20 69 66 28 20 74  tive */..  if( t
15950 75 72 6e 4f 6e 41 43 20 26 26 20 69 52 6f 6c 6c  urnOnAC && iRoll
15960 62 61 63 6b 20 26 26 20 64 62 2d 3e 61 63 74 69  back && db->acti
15970 76 65 56 64 62 65 43 6e 74 3e 31 20 29 7b 0a 20  veVdbeCnt>1 ){. 
15980 20 20 20 2f 2a 20 49 66 20 74 68 69 73 20 69 6e     /* If this in
15990 73 74 72 75 63 74 69 6f 6e 20 69 6d 70 6c 65 6d  struction implem
159a0 65 6e 74 73 20 61 20 52 4f 4c 4c 42 41 43 4b 20  ents a ROLLBACK 
159b0 61 6e 64 20 6f 74 68 65 72 20 56 4d 73 20 61 72  and other VMs ar
159c0 65 0a 20 20 20 20 2a 2a 20 73 74 69 6c 6c 20 72  e.    ** still r
159d0 75 6e 6e 69 6e 67 2c 20 61 6e 64 20 61 20 74 72  unning, and a tr
159e0 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 61 63 74  ansaction is act
159f0 69 76 65 2c 20 72 65 74 75 72 6e 20 61 6e 20 65  ive, return an e
15a00 72 72 6f 72 20 69 6e 64 69 63 61 74 69 6e 67 0a  rror indicating.
15a10 20 20 20 20 2a 2a 20 74 68 61 74 20 74 68 65 20      ** that the 
15a20 6f 74 68 65 72 20 56 4d 73 20 6d 75 73 74 20 63  other VMs must c
15a30 6f 6d 70 6c 65 74 65 20 66 69 72 73 74 2e 20 0a  omplete first. .
15a40 20 20 20 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74      */.    sqlit
15a50 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e  e3SetString(&p->
15a60 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 63 61  zErrMsg, db, "ca
15a70 6e 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 20 74 72  nnot rollback tr
15a80 61 6e 73 61 63 74 69 6f 6e 20 2d 20 22 0a 20 20  ansaction - ".  
15a90 20 20 20 20 20 20 22 53 51 4c 20 73 74 61 74 65        "SQL state
15aa0 6d 65 6e 74 73 20 69 6e 20 70 72 6f 67 72 65 73  ments in progres
15ab0 73 22 29 3b 0a 20 20 20 20 72 63 20 3d 20 53 51  s");.    rc = SQ
15ac0 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 7d 65 6c  LITE_BUSY;.  }el
15ad0 73 65 20 69 66 28 20 74 75 72 6e 4f 6e 41 43 20  se if( turnOnAC 
15ae0 26 26 20 21 69 52 6f 6c 6c 62 61 63 6b 20 26 26  && !iRollback &&
15af0 20 64 62 2d 3e 77 72 69 74 65 56 64 62 65 43 6e   db->writeVdbeCn
15b00 74 3e 30 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66  t>0 ){.    /* If
15b10 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
15b20 6e 20 69 6d 70 6c 65 6d 65 6e 74 73 20 61 20 43  n implements a C
15b30 4f 4d 4d 49 54 20 61 6e 64 20 6f 74 68 65 72 20  OMMIT and other 
15b40 56 4d 73 20 61 72 65 20 77 72 69 74 69 6e 67 0a  VMs are writing.
15b50 20 20 20 20 2a 2a 20 72 65 74 75 72 6e 20 61 6e      ** return an
15b60 20 65 72 72 6f 72 20 69 6e 64 69 63 61 74 69 6e   error indicatin
15b70 67 20 74 68 61 74 20 74 68 65 20 6f 74 68 65 72  g that the other
15b80 20 56 4d 73 20 6d 75 73 74 20 63 6f 6d 70 6c 65   VMs must comple
15b90 74 65 20 66 69 72 73 74 2e 20 0a 20 20 20 20 2a  te first. .    *
15ba0 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65 74  /.    sqlite3Set
15bb0 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d  String(&p->zErrM
15bc0 73 67 2c 20 64 62 2c 20 22 63 61 6e 6e 6f 74 20  sg, db, "cannot 
15bd0 63 6f 6d 6d 69 74 20 74 72 61 6e 73 61 63 74 69  commit transacti
15be0 6f 6e 20 2d 20 22 0a 20 20 20 20 20 20 20 20 22  on - ".        "
15bf0 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69  SQL statements i
15c00 6e 20 70 72 6f 67 72 65 73 73 22 29 3b 0a 20 20  n progress");.  
15c10 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55    rc = SQLITE_BU
15c20 53 59 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  SY;.  }else if( 
15c30 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69  desiredAutoCommi
15c40 74 21 3d 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69  t!=db->autoCommi
15c50 74 20 29 7b 0a 20 20 20 20 69 66 28 20 69 52 6f  t ){.    if( iRo
15c60 6c 6c 62 61 63 6b 20 29 7b 0a 20 20 20 20 20 20  llback ){.      
15c70 61 73 73 65 72 74 28 20 64 65 73 69 72 65 64 41  assert( desiredA
15c80 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20 29 3b 0a  utoCommit==1 );.
15c90 20 20 20 20 20 20 73 71 6c 69 74 65 33 52 6f 6c        sqlite3Rol
15ca0 6c 62 61 63 6b 41 6c 6c 28 64 62 29 3b 0a 20 20  lbackAll(db);.  
15cb0 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d      db->autoComm
15cc0 69 74 20 3d 20 31 3b 0a 20 20 20 20 7d 65 6c 73  it = 1;.    }els
15cd0 65 20 69 66 28 20 28 72 63 20 3d 20 73 71 6c 69  e if( (rc = sqli
15ce0 74 65 33 56 64 62 65 43 68 65 63 6b 46 6b 28 70  te3VdbeCheckFk(p
15cf0 2c 20 31 29 29 21 3d 53 51 4c 49 54 45 5f 4f 4b  , 1))!=SQLITE_OK
15d00 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 76   ){.      goto v
15d10 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20  dbe_return;.    
15d20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 64 62 2d  }else{.      db-
15d30 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 28 75  >autoCommit = (u
15d40 38 29 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d  8)desiredAutoCom
15d50 6d 69 74 3b 0a 20 20 20 20 20 20 69 66 28 20 73  mit;.      if( s
15d60 71 6c 69 74 65 33 56 64 62 65 48 61 6c 74 28 70  qlite3VdbeHalt(p
15d70 29 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29  )==SQLITE_BUSY )
15d80 7b 0a 20 20 20 20 20 20 20 20 70 2d 3e 70 63 20  {.        p->pc 
15d90 3d 20 70 63 3b 0a 20 20 20 20 20 20 20 20 64 62  = pc;.        db
15da0 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 28  ->autoCommit = (
15db0 75 38 29 28 31 2d 64 65 73 69 72 65 64 41 75 74  u8)(1-desiredAut
15dc0 6f 43 6f 6d 6d 69 74 29 3b 0a 20 20 20 20 20 20  oCommit);.      
15dd0 20 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53    p->rc = rc = S
15de0 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20  QLITE_BUSY;.    
15df0 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65      goto vdbe_re
15e00 74 75 72 6e 3b 0a 20 20 20 20 20 20 7d 0a 20 20  turn;.      }.  
15e10 20 20 7d 0a 20 20 20 20 61 73 73 65 72 74 28 20    }.    assert( 
15e20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 3d 3d  db->nStatement==
15e30 30 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  0 );.    sqlite3
15e40 43 6c 6f 73 65 53 61 76 65 70 6f 69 6e 74 73 28  CloseSavepoints(
15e50 64 62 29 3b 0a 20 20 20 20 69 66 28 20 70 2d 3e  db);.    if( p->
15e60 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc==SQLITE_OK ){
15e70 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49  .      rc = SQLI
15e80 54 45 5f 44 4f 4e 45 3b 0a 20 20 20 20 7d 65 6c  TE_DONE;.    }el
15e90 73 65 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53  se{.      rc = S
15ea0 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20  QLITE_ERROR;.   
15eb0 20 7d 0a 20 20 20 20 67 6f 74 6f 20 76 64 62 65   }.    goto vdbe
15ec0 5f 72 65 74 75 72 6e 3b 0a 20 20 7d 65 6c 73 65  _return;.  }else
15ed0 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65 74  {.    sqlite3Set
15ee0 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d  String(&p->zErrM
15ef0 73 67 2c 20 64 62 2c 0a 20 20 20 20 20 20 20 20  sg, db,.        
15f00 28 21 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d  (!desiredAutoCom
15f10 6d 69 74 29 3f 22 63 61 6e 6e 6f 74 20 73 74 61  mit)?"cannot sta
15f20 72 74 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  rt a transaction
15f30 20 77 69 74 68 69 6e 20 61 20 74 72 61 6e 73 61   within a transa
15f40 63 74 69 6f 6e 22 3a 28 0a 20 20 20 20 20 20 20  ction":(.       
15f50 20 28 69 52 6f 6c 6c 62 61 63 6b 29 3f 22 63 61   (iRollback)?"ca
15f60 6e 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 20 2d 20  nnot rollback - 
15f70 6e 6f 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  no transaction i
15f80 73 20 61 63 74 69 76 65 22 3a 0a 20 20 20 20 20  s active":.     
15f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63                "c
15fa0 61 6e 6e 6f 74 20 63 6f 6d 6d 69 74 20 2d 20 6e  annot commit - n
15fb0 6f 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  o transaction is
15fc0 20 61 63 74 69 76 65 22 29 29 3b 0a 20 20 20 20   active"));.    
15fd0 20 20 20 20 20 0a 20 20 20 20 72 63 20 3d 20 53       .    rc = S
15fe0 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 7d  QLITE_ERROR;.  }
15ff0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
16000 4f 70 63 6f 64 65 3a 20 54 72 61 6e 73 61 63 74  Opcode: Transact
16010 69 6f 6e 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ion P1 P2 * * *.
16020 2a 2a 0a 2a 2a 20 42 65 67 69 6e 20 61 20 74 72  **.** Begin a tr
16030 61 6e 73 61 63 74 69 6f 6e 2e 20 20 54 68 65 20  ansaction.  The 
16040 74 72 61 6e 73 61 63 74 69 6f 6e 20 65 6e 64 73  transaction ends
16050 20 77 68 65 6e 20 61 20 43 6f 6d 6d 69 74 20 6f   when a Commit o
16060 72 20 52 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 6f 70  r Rollback.** op
16070 63 6f 64 65 20 69 73 20 65 6e 63 6f 75 6e 74 65  code is encounte
16080 72 65 64 2e 20 20 44 65 70 65 6e 64 69 6e 67 20  red.  Depending 
16090 6f 6e 20 74 68 65 20 4f 4e 20 43 4f 4e 46 4c 49  on the ON CONFLI
160a0 43 54 20 73 65 74 74 69 6e 67 2c 20 74 68 65 0a  CT setting, the.
160b0 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d  ** transaction m
160c0 69 67 68 74 20 61 6c 73 6f 20 62 65 20 72 6f 6c  ight also be rol
160d0 6c 65 64 20 62 61 63 6b 20 69 66 20 61 6e 20 65  led back if an e
160e0 72 72 6f 72 20 69 73 20 65 6e 63 6f 75 6e 74 65  rror is encounte
160f0 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73  red..**.** P1 is
16100 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68   the index of th
16110 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
16120 6f 6e 20 77 68 69 63 68 20 74 68 65 20 74 72 61  on which the tra
16130 6e 73 61 63 74 69 6f 6e 20 69 73 0a 2a 2a 20 73  nsaction is.** s
16140 74 61 72 74 65 64 2e 20 20 49 6e 64 65 78 20 30  tarted.  Index 0
16150 20 69 73 20 74 68 65 20 6d 61 69 6e 20 64 61 74   is the main dat
16160 61 62 61 73 65 20 66 69 6c 65 20 61 6e 64 20 69  abase file and i
16170 6e 64 65 78 20 31 20 69 73 20 74 68 65 0a 2a 2a  ndex 1 is the.**
16180 20 66 69 6c 65 20 75 73 65 64 20 66 6f 72 20 74   file used for t
16190 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e  emporary tables.
161a0 20 20 49 6e 64 69 63 65 73 20 6f 66 20 32 20 6f    Indices of 2 o
161b0 72 20 6d 6f 72 65 20 61 72 65 20 75 73 65 64 20  r more are used 
161c0 66 6f 72 0a 2a 2a 20 61 74 74 61 63 68 65 64 20  for.** attached 
161d0 64 61 74 61 62 61 73 65 73 2e 0a 2a 2a 0a 2a 2a  databases..**.**
161e0 20 49 66 20 50 32 20 69 73 20 6e 6f 6e 2d 7a 65   If P2 is non-ze
161f0 72 6f 2c 20 74 68 65 6e 20 61 20 77 72 69 74 65  ro, then a write
16200 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20  -transaction is 
16210 73 74 61 72 74 65 64 2e 20 20 41 20 52 45 53 45  started.  A RESE
16220 52 56 45 44 20 6c 6f 63 6b 20 69 73 0a 2a 2a 20  RVED lock is.** 
16230 6f 62 74 61 69 6e 65 64 20 6f 6e 20 74 68 65 20  obtained on the 
16240 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 77 68  database file wh
16250 65 6e 20 61 20 77 72 69 74 65 2d 74 72 61 6e 73  en a write-trans
16260 61 63 74 69 6f 6e 20 69 73 20 73 74 61 72 74 65  action is starte
16270 64 2e 20 20 4e 6f 0a 2a 2a 20 6f 74 68 65 72 20  d.  No.** other 
16280 70 72 6f 63 65 73 73 20 63 61 6e 20 73 74 61 72  process can star
16290 74 20 61 6e 6f 74 68 65 72 20 77 72 69 74 65 20  t another write 
162a0 74 72 61 6e 73 61 63 74 69 6f 6e 20 77 68 69 6c  transaction whil
162b0 65 20 74 68 69 73 20 74 72 61 6e 73 61 63 74 69  e this transacti
162c0 6f 6e 20 69 73 0a 2a 2a 20 75 6e 64 65 72 77 61  on is.** underwa
162d0 79 2e 20 20 53 74 61 72 74 69 6e 67 20 61 20 77  y.  Starting a w
162e0 72 69 74 65 20 74 72 61 6e 73 61 63 74 69 6f 6e  rite transaction
162f0 20 61 6c 73 6f 20 63 72 65 61 74 65 73 20 61 20   also creates a 
16300 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c  rollback journal
16310 2e 20 41 0a 2a 2a 20 77 72 69 74 65 20 74 72 61  . A.** write tra
16320 6e 73 61 63 74 69 6f 6e 20 6d 75 73 74 20 62 65  nsaction must be
16330 20 73 74 61 72 74 65 64 20 62 65 66 6f 72 65 20   started before 
16340 61 6e 79 20 63 68 61 6e 67 65 73 20 63 61 6e 20  any changes can 
16350 62 65 20 6d 61 64 65 20 74 6f 20 74 68 65 0a 2a  be made to the.*
16360 2a 20 64 61 74 61 62 61 73 65 2e 20 20 49 66 20  * database.  If 
16370 50 32 20 69 73 20 32 20 6f 72 20 67 72 65 61 74  P2 is 2 or great
16380 65 72 20 74 68 65 6e 20 61 6e 20 45 58 43 4c 55  er then an EXCLU
16390 53 49 56 45 20 6c 6f 63 6b 20 69 73 20 61 6c 73  SIVE lock is als
163a0 6f 20 6f 62 74 61 69 6e 65 64 0a 2a 2a 20 6f 6e  o obtained.** on
163b0 20 74 68 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a   the file..**.**
163c0 20 49 66 20 61 20 77 72 69 74 65 2d 74 72 61 6e   If a write-tran
163d0 73 61 63 74 69 6f 6e 20 69 73 20 73 74 61 72 74  saction is start
163e0 65 64 20 61 6e 64 20 74 68 65 20 56 64 62 65 2e  ed and the Vdbe.
163f0 75 73 65 73 53 74 6d 74 4a 6f 75 72 6e 61 6c 20  usesStmtJournal 
16400 66 6c 61 67 20 69 73 0a 2a 2a 20 74 72 75 65 20  flag is.** true 
16410 28 74 68 69 73 20 66 6c 61 67 20 69 73 20 73 65  (this flag is se
16420 74 20 69 66 20 74 68 65 20 56 64 62 65 20 6d 61  t if the Vdbe ma
16430 79 20 6d 6f 64 69 66 79 20 6d 6f 72 65 20 74 68  y modify more th
16440 61 6e 20 6f 6e 65 20 72 6f 77 20 61 6e 64 20 6d  an one row and m
16450 61 79 0a 2a 2a 20 74 68 72 6f 77 20 61 6e 20 41  ay.** throw an A
16460 42 4f 52 54 20 65 78 63 65 70 74 69 6f 6e 29 2c  BORT exception),
16470 20 61 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61   a statement tra
16480 6e 73 61 63 74 69 6f 6e 20 6d 61 79 20 61 6c 73  nsaction may als
16490 6f 20 62 65 20 6f 70 65 6e 65 64 2e 0a 2a 2a 20  o be opened..** 
164a0 4d 6f 72 65 20 73 70 65 63 69 66 69 63 61 6c 6c  More specificall
164b0 79 2c 20 61 20 73 74 61 74 65 6d 65 6e 74 20 74  y, a statement t
164c0 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6f 70  ransaction is op
164d0 65 6e 65 64 20 69 66 66 20 74 68 65 20 64 61 74  ened iff the dat
164e0 61 62 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74  abase.** connect
164f0 69 6f 6e 20 69 73 20 63 75 72 72 65 6e 74 6c 79  ion is currently
16500 20 6e 6f 74 20 69 6e 20 61 75 74 6f 63 6f 6d 6d   not in autocomm
16510 69 74 20 6d 6f 64 65 2c 20 6f 72 20 69 66 20 74  it mode, or if t
16520 68 65 72 65 20 61 72 65 20 6f 74 68 65 72 0a 2a  here are other.*
16530 2a 20 61 63 74 69 76 65 20 73 74 61 74 65 6d 65  * active stateme
16540 6e 74 73 2e 20 41 20 73 74 61 74 65 6d 65 6e 74  nts. A statement
16550 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61 6c 6c   transaction all
16560 6f 77 73 20 74 68 65 20 61 66 66 65 63 74 73 20  ows the affects 
16570 6f 66 20 74 68 69 73 0a 2a 2a 20 56 44 42 45 20  of this.** VDBE 
16580 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63  to be rolled bac
16590 6b 20 61 66 74 65 72 20 61 6e 20 65 72 72 6f 72  k after an error
165a0 20 77 69 74 68 6f 75 74 20 68 61 76 69 6e 67 20   without having 
165b0 74 6f 20 72 6f 6c 6c 20 62 61 63 6b 20 74 68 65  to roll back the
165c0 0a 2a 2a 20 65 6e 74 69 72 65 20 74 72 61 6e 73  .** entire trans
165d0 61 63 74 69 6f 6e 2e 20 49 66 20 6e 6f 20 65 72  action. If no er
165e0 72 6f 72 20 69 73 20 65 6e 63 6f 75 6e 74 65 72  ror is encounter
165f0 65 64 2c 20 74 68 65 20 73 74 61 74 65 6d 65 6e  ed, the statemen
16600 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a  t transaction.**
16610 20 77 69 6c 6c 20 61 75 74 6f 6d 61 74 69 63 61   will automatica
16620 6c 6c 79 20 63 6f 6d 6d 69 74 20 77 68 65 6e 20  lly commit when 
16630 74 68 65 20 56 44 42 45 20 68 61 6c 74 73 2e 0a  the VDBE halts..
16640 2a 2a 0a 2a 2a 20 49 66 20 50 32 20 69 73 20 7a  **.** If P2 is z
16650 65 72 6f 2c 20 74 68 65 6e 20 61 20 72 65 61 64  ero, then a read
16660 2d 6c 6f 63 6b 20 69 73 20 6f 62 74 61 69 6e 65  -lock is obtaine
16670 64 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73  d on the databas
16680 65 20 66 69 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20  e file..*/.case 
16690 4f 50 5f 54 72 61 6e 73 61 63 74 69 6f 6e 3a 20  OP_Transaction: 
166a0 7b 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b 0a  {.  Btree *pBt;.
166b0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
166c0 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
166d0 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73  <db->nDb );.  as
166e0 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d  sert( (p->btreeM
166f0 61 73 6b 20 26 20 28 31 3c 3c 70 4f 70 2d 3e 70  ask & (1<<pOp->p
16700 31 29 29 21 3d 30 20 29 3b 0a 20 20 70 42 74 20  1))!=0 );.  pBt 
16710 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70  = db->aDb[pOp->p
16720 31 5d 2e 70 42 74 3b 0a 0a 20 20 69 66 28 20 70  1].pBt;..  if( p
16730 42 74 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73  Bt ){.    rc = s
16740 71 6c 69 74 65 33 42 74 72 65 65 42 65 67 69 6e  qlite3BtreeBegin
16750 54 72 61 6e 73 28 70 42 74 2c 20 70 4f 70 2d 3e  Trans(pBt, pOp->
16760 70 32 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d  p2);.    if( rc=
16770 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a  =SQLITE_BUSY ){.
16780 20 20 20 20 20 20 70 2d 3e 70 63 20 3d 20 70 63        p->pc = pc
16790 3b 0a 20 20 20 20 20 20 70 2d 3e 72 63 20 3d 20  ;.      p->rc = 
167a0 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59  rc = SQLITE_BUSY
167b0 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62  ;.      goto vdb
167c0 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 7d 0a  e_return;.    }.
167d0 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
167e0 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67  TE_OK ){.      g
167f0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
16800 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 0a 20  _error;.    }.. 
16810 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 20 26     if( pOp->p2 &
16820 26 20 70 2d 3e 75 73 65 73 53 74 6d 74 4a 6f 75  & p->usesStmtJou
16830 72 6e 61 6c 20 0a 20 20 20 20 20 26 26 20 28 64  rnal .     && (d
16840 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30  b->autoCommit==0
16850 20 7c 7c 20 64 62 2d 3e 61 63 74 69 76 65 56 64   || db->activeVd
16860 62 65 43 6e 74 3e 31 29 20 0a 20 20 20 20 29 7b  beCnt>1) .    ){
16870 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73  .      assert( s
16880 71 6c 69 74 65 33 42 74 72 65 65 49 73 49 6e 54  qlite3BtreeIsInT
16890 72 61 6e 73 28 70 42 74 29 20 29 3b 0a 20 20 20  rans(pBt) );.   
168a0 20 20 20 69 66 28 20 70 2d 3e 69 53 74 61 74 65     if( p->iState
168b0 6d 65 6e 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20  ment==0 ){.     
168c0 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 6e     assert( db->n
168d0 53 74 61 74 65 6d 65 6e 74 3e 3d 30 20 26 26 20  Statement>=0 && 
168e0 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 3e 3d  db->nSavepoint>=
168f0 30 20 29 3b 0a 20 20 20 20 20 20 20 20 64 62 2d  0 );.        db-
16900 3e 6e 53 74 61 74 65 6d 65 6e 74 2b 2b 3b 20 0a  >nStatement++; .
16910 20 20 20 20 20 20 20 20 70 2d 3e 69 53 74 61 74          p->iStat
16920 65 6d 65 6e 74 20 3d 20 64 62 2d 3e 6e 53 61 76  ement = db->nSav
16930 65 70 6f 69 6e 74 20 2b 20 64 62 2d 3e 6e 53 74  epoint + db->nSt
16940 61 74 65 6d 65 6e 74 3b 0a 20 20 20 20 20 20 7d  atement;.      }
16950 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69  .      rc = sqli
16960 74 65 33 42 74 72 65 65 42 65 67 69 6e 53 74 6d  te3BtreeBeginStm
16970 74 28 70 42 74 2c 20 70 2d 3e 69 53 74 61 74 65  t(pBt, p->iState
16980 6d 65 6e 74 29 3b 0a 0a 20 20 20 20 20 20 2f 2a  ment);..      /*
16990 20 53 74 6f 72 65 20 74 68 65 20 63 75 72 72 65   Store the curre
169a0 6e 74 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  nt value of the 
169b0 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 73  database handles
169c0 20 64 65 66 65 72 72 65 64 20 63 6f 6e 73 74 72   deferred constr
169d0 61 69 6e 74 0a 20 20 20 20 20 20 2a 2a 20 63 6f  aint.      ** co
169e0 75 6e 74 65 72 2e 20 49 66 20 74 68 65 20 73 74  unter. If the st
169f0 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74  atement transact
16a00 69 6f 6e 20 6e 65 65 64 73 20 74 6f 20 62 65 20  ion needs to be 
16a10 72 6f 6c 6c 65 64 20 62 61 63 6b 2c 0a 20 20 20  rolled back,.   
16a20 20 20 20 2a 2a 20 74 68 65 20 76 61 6c 75 65 20     ** the value 
16a30 6f 66 20 74 68 69 73 20 63 6f 75 6e 74 65 72 20  of this counter 
16a40 6e 65 65 64 73 20 74 6f 20 62 65 20 72 65 73 74  needs to be rest
16a50 6f 72 65 64 20 74 6f 6f 2e 20 20 2a 2f 0a 20 20  ored too.  */.  
16a60 20 20 20 20 70 2d 3e 6e 53 74 6d 74 44 65 66 43      p->nStmtDefC
16a70 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72  ons = db->nDefer
16a80 72 65 64 43 6f 6e 73 3b 0a 20 20 20 20 7d 0a 20  redCons;.    }. 
16a90 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
16aa0 2a 20 4f 70 63 6f 64 65 3a 20 52 65 61 64 43 6f  * Opcode: ReadCo
16ab0 6f 6b 69 65 20 50 31 20 50 32 20 50 33 20 2a 20  okie P1 P2 P3 * 
16ac0 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 63 6f 6f  *.**.** Read coo
16ad0 6b 69 65 20 6e 75 6d 62 65 72 20 50 33 20 66 72  kie number P3 fr
16ae0 6f 6d 20 64 61 74 61 62 61 73 65 20 50 31 20 61  om database P1 a
16af0 6e 64 20 77 72 69 74 65 20 69 74 20 69 6e 74 6f  nd write it into
16b00 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a   register P2..**
16b10 20 50 33 3d 3d 31 20 69 73 20 74 68 65 20 73 63   P3==1 is the sc
16b20 68 65 6d 61 20 76 65 72 73 69 6f 6e 2e 20 20 50  hema version.  P
16b30 33 3d 3d 32 20 69 73 20 74 68 65 20 64 61 74 61  3==2 is the data
16b40 62 61 73 65 20 66 6f 72 6d 61 74 2e 0a 2a 2a 20  base format..** 
16b50 50 33 3d 3d 33 20 69 73 20 74 68 65 20 72 65 63  P3==3 is the rec
16b60 6f 6d 6d 65 6e 64 65 64 20 70 61 67 65 72 20 63  ommended pager c
16b70 61 63 68 65 20 73 69 7a 65 2c 20 61 6e 64 20 73  ache size, and s
16b80 6f 20 66 6f 72 74 68 2e 20 20 50 31 3d 3d 30 20  o forth.  P1==0 
16b90 69 73 0a 2a 2a 20 74 68 65 20 6d 61 69 6e 20 64  is.** the main d
16ba0 61 74 61 62 61 73 65 20 66 69 6c 65 20 61 6e 64  atabase file and
16bb0 20 50 31 3d 3d 31 20 69 73 20 74 68 65 20 64 61   P1==1 is the da
16bc0 74 61 62 61 73 65 20 66 69 6c 65 20 75 73 65 64  tabase file used
16bd0 20 74 6f 20 73 74 6f 72 65 0a 2a 2a 20 74 65 6d   to store.** tem
16be0 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 0a 2a  porary tables..*
16bf0 2a 0a 2a 2a 20 54 68 65 72 65 20 6d 75 73 74 20  *.** There must 
16c00 62 65 20 61 20 72 65 61 64 2d 6c 6f 63 6b 20 6f  be a read-lock o
16c10 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 28  n the database (
16c20 65 69 74 68 65 72 20 61 20 74 72 61 6e 73 61 63  either a transac
16c30 74 69 6f 6e 0a 2a 2a 20 6d 75 73 74 20 62 65 20  tion.** must be 
16c40 73 74 61 72 74 65 64 20 6f 72 20 74 68 65 72 65  started or there
16c50 20 6d 75 73 74 20 62 65 20 61 6e 20 6f 70 65 6e   must be an open
16c60 20 63 75 72 73 6f 72 29 20 62 65 66 6f 72 65 0a   cursor) before.
16c70 2a 2a 20 65 78 65 63 75 74 69 6e 67 20 74 68 69  ** executing thi
16c80 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  s instruction..*
16c90 2f 0a 63 61 73 65 20 4f 50 5f 52 65 61 64 43 6f  /.case OP_ReadCo
16ca0 6f 6b 69 65 3a 20 7b 20 20 20 20 20 20 20 20 20  okie: {         
16cb0 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72        /* out2-pr
16cc0 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69 6e  erelease */.  in
16cd0 74 20 69 4d 65 74 61 3b 0a 20 20 69 6e 74 20 69  t iMeta;.  int i
16ce0 44 62 3b 0a 20 20 69 6e 74 20 69 43 6f 6f 6b 69  Db;.  int iCooki
16cf0 65 3b 0a 0a 20 20 69 44 62 20 3d 20 70 4f 70 2d  e;..  iDb = pOp-
16d00 3e 70 31 3b 0a 20 20 69 43 6f 6f 6b 69 65 20 3d  >p1;.  iCookie =
16d10 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65   pOp->p3;.  asse
16d20 72 74 28 20 70 4f 70 2d 3e 70 33 3c 53 51 4c 49  rt( pOp->p3<SQLI
16d30 54 45 5f 4e 5f 42 54 52 45 45 5f 4d 45 54 41 20  TE_N_BTREE_META 
16d40 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69 44 62  );.  assert( iDb
16d50 3e 3d 30 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e  >=0 && iDb<db->n
16d60 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  Db );.  assert( 
16d70 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74  db->aDb[iDb].pBt
16d80 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
16d90 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26   (p->btreeMask &
16da0 20 28 31 3c 3c 69 44 62 29 29 21 3d 30 20 29 3b   (1<<iDb))!=0 );
16db0 0a 0a 20 20 73 71 6c 69 74 65 33 42 74 72 65 65  ..  sqlite3Btree
16dc0 47 65 74 4d 65 74 61 28 64 62 2d 3e 61 44 62 5b  GetMeta(db->aDb[
16dd0 69 44 62 5d 2e 70 42 74 2c 20 69 43 6f 6f 6b 69  iDb].pBt, iCooki
16de0 65 2c 20 28 75 33 32 20 2a 29 26 69 4d 65 74 61  e, (u32 *)&iMeta
16df0 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  );.  pOut->u.i =
16e00 20 69 4d 65 74 61 3b 0a 20 20 62 72 65 61 6b 3b   iMeta;.  break;
16e10 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .}../* Opcode: S
16e20 65 74 43 6f 6f 6b 69 65 20 50 31 20 50 32 20 50  etCookie P1 P2 P
16e30 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74  3 * *.**.** Writ
16e40 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  e the content of
16e50 20 72 65 67 69 73 74 65 72 20 50 33 20 28 69 6e   register P3 (in
16e60 74 65 72 70 72 65 74 65 64 20 61 73 20 61 6e 20  terpreted as an 
16e70 69 6e 74 65 67 65 72 29 0a 2a 2a 20 69 6e 74 6f  integer).** into
16e80 20 63 6f 6f 6b 69 65 20 6e 75 6d 62 65 72 20 50   cookie number P
16e90 32 20 6f 66 20 64 61 74 61 62 61 73 65 20 50 31  2 of database P1
16ea0 2e 20 20 50 32 3d 3d 31 20 69 73 20 74 68 65 20  .  P2==1 is the 
16eb0 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e 2e 20  schema version. 
16ec0 20 0a 2a 2a 20 50 32 3d 3d 32 20 69 73 20 74 68   .** P2==2 is th
16ed0 65 20 64 61 74 61 62 61 73 65 20 66 6f 72 6d 61  e database forma
16ee0 74 2e 20 50 32 3d 3d 33 20 69 73 20 74 68 65 20  t. P2==3 is the 
16ef0 72 65 63 6f 6d 6d 65 6e 64 65 64 20 70 61 67 65  recommended page
16f00 72 20 63 61 63 68 65 20 0a 2a 2a 20 73 69 7a 65  r cache .** size
16f10 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20  , and so forth. 
16f20 20 50 31 3d 3d 30 20 69 73 20 74 68 65 20 6d 61   P1==0 is the ma
16f30 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  in database file
16f40 20 61 6e 64 20 50 31 3d 3d 31 20 69 73 20 74 68   and P1==1 is th
16f50 65 20 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 66  e .** database f
16f60 69 6c 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72  ile used to stor
16f70 65 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c  e temporary tabl
16f80 65 73 2e 0a 2a 2a 0a 2a 2a 20 41 20 74 72 61 6e  es..**.** A tran
16f90 73 61 63 74 69 6f 6e 20 6d 75 73 74 20 62 65 20  saction must be 
16fa0 73 74 61 72 74 65 64 20 62 65 66 6f 72 65 20 65  started before e
16fb0 78 65 63 75 74 69 6e 67 20 74 68 69 73 20 6f 70  xecuting this op
16fc0 63 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  code..*/.case OP
16fd0 5f 53 65 74 43 6f 6f 6b 69 65 3a 20 7b 20 20 20  _SetCookie: {   
16fe0 20 20 20 20 2f 2a 20 69 6e 33 20 2a 2f 0a 20 20      /* in3 */.  
16ff0 44 62 20 2a 70 44 62 3b 0a 20 20 61 73 73 65 72  Db *pDb;.  asser
17000 74 28 20 70 4f 70 2d 3e 70 32 3c 53 51 4c 49 54  t( pOp->p2<SQLIT
17010 45 5f 4e 5f 42 54 52 45 45 5f 4d 45 54 41 20 29  E_N_BTREE_META )
17020 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
17030 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
17040 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61  1<db->nDb );.  a
17050 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65  ssert( (p->btree
17060 4d 61 73 6b 20 26 20 28 31 3c 3c 70 4f 70 2d 3e  Mask & (1<<pOp->
17070 70 31 29 29 21 3d 30 20 29 3b 0a 20 20 70 44 62  p1))!=0 );.  pDb
17080 20 3d 20 26 64 62 2d 3e 61 44 62 5b 70 4f 70 2d   = &db->aDb[pOp-
17090 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
170a0 70 44 62 2d 3e 70 42 74 21 3d 30 20 29 3b 0a 20  pDb->pBt!=0 );. 
170b0 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn3 = &aMem[pO
170c0 70 2d 3e 70 33 5d 3b 0a 20 20 73 71 6c 69 74 65  p->p3];.  sqlite
170d0 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69  3VdbeMemIntegeri
170e0 66 79 28 70 49 6e 33 29 3b 0a 20 20 2f 2a 20 53  fy(pIn3);.  /* S
170f0 65 65 20 6e 6f 74 65 20 61 62 6f 75 74 20 69 6e  ee note about in
17100 64 65 78 20 73 68 69 66 74 69 6e 67 20 6f 6e 20  dex shifting on 
17110 4f 50 5f 52 65 61 64 43 6f 6f 6b 69 65 20 2a 2f  OP_ReadCookie */
17120 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42  .  rc = sqlite3B
17130 74 72 65 65 55 70 64 61 74 65 4d 65 74 61 28 70  treeUpdateMeta(p
17140 44 62 2d 3e 70 42 74 2c 20 70 4f 70 2d 3e 70 32  Db->pBt, pOp->p2
17150 2c 20 28 69 6e 74 29 70 49 6e 33 2d 3e 75 2e 69  , (int)pIn3->u.i
17160 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 32  );.  if( pOp->p2
17170 3d 3d 42 54 52 45 45 5f 53 43 48 45 4d 41 5f 56  ==BTREE_SCHEMA_V
17180 45 52 53 49 4f 4e 20 29 7b 0a 20 20 20 20 2f 2a  ERSION ){.    /*
17190 20 57 68 65 6e 20 74 68 65 20 73 63 68 65 6d 61   When the schema
171a0 20 63 6f 6f 6b 69 65 20 63 68 61 6e 67 65 73 2c   cookie changes,
171b0 20 72 65 63 6f 72 64 20 74 68 65 20 6e 65 77 20   record the new 
171c0 63 6f 6f 6b 69 65 20 69 6e 74 65 72 6e 61 6c 6c  cookie internall
171d0 79 20 2a 2f 0a 20 20 20 20 70 44 62 2d 3e 70 53  y */.    pDb->pS
171e0 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 5f 63 6f  chema->schema_co
171f0 6f 6b 69 65 20 3d 20 28 69 6e 74 29 70 49 6e 33  okie = (int)pIn3
17200 2d 3e 75 2e 69 3b 0a 20 20 20 20 64 62 2d 3e 66  ->u.i;.    db->f
17210 6c 61 67 73 20 7c 3d 20 53 51 4c 49 54 45 5f 49  lags |= SQLITE_I
17220 6e 74 65 72 6e 43 68 61 6e 67 65 73 3b 0a 20 20  nternChanges;.  
17230 7d 65 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e 70  }else if( pOp->p
17240 32 3d 3d 42 54 52 45 45 5f 46 49 4c 45 5f 46 4f  2==BTREE_FILE_FO
17250 52 4d 41 54 20 29 7b 0a 20 20 20 20 2f 2a 20 52  RMAT ){.    /* R
17260 65 63 6f 72 64 20 63 68 61 6e 67 65 73 20 69 6e  ecord changes in
17270 20 74 68 65 20 66 69 6c 65 20 66 6f 72 6d 61 74   the file format
17280 20 2a 2f 0a 20 20 20 20 70 44 62 2d 3e 70 53 63   */.    pDb->pSc
17290 68 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61  hema->file_forma
172a0 74 20 3d 20 28 75 38 29 70 49 6e 33 2d 3e 75 2e  t = (u8)pIn3->u.
172b0 69 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70  i;.  }.  if( pOp
172c0 2d 3e 70 31 3d 3d 31 20 29 7b 0a 20 20 20 20 2f  ->p1==1 ){.    /
172d0 2a 20 49 6e 76 61 6c 69 64 61 74 65 20 61 6c 6c  * Invalidate all
172e0 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d   prepared statem
172f0 65 6e 74 73 20 77 68 65 6e 65 76 65 72 20 74 68  ents whenever th
17300 65 20 54 45 4d 50 20 64 61 74 61 62 61 73 65 0a  e TEMP database.
17310 20 20 20 20 2a 2a 20 73 63 68 65 6d 61 20 69 73      ** schema is
17320 20 63 68 61 6e 67 65 64 2e 20 20 54 69 63 6b 65   changed.  Ticke
17330 74 20 23 31 36 34 34 20 2a 2f 0a 20 20 20 20 73  t #1644 */.    s
17340 71 6c 69 74 65 33 45 78 70 69 72 65 50 72 65 70  qlite3ExpirePrep
17350 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28 64  aredStatements(d
17360 62 29 3b 0a 20 20 20 20 70 2d 3e 65 78 70 69 72  b);.    p->expir
17370 65 64 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 62 72  ed = 0;.  }.  br
17380 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
17390 65 3a 20 56 65 72 69 66 79 43 6f 6f 6b 69 65 20  e: VerifyCookie 
173a0 50 31 20 50 32 20 2a 0a 2a 2a 0a 2a 2a 20 43 68  P1 P2 *.**.** Ch
173b0 65 63 6b 20 74 68 65 20 76 61 6c 75 65 20 6f 66  eck the value of
173c0 20 67 6c 6f 62 61 6c 20 64 61 74 61 62 61 73 65   global database
173d0 20 70 61 72 61 6d 65 74 65 72 20 6e 75 6d 62 65   parameter numbe
173e0 72 20 30 20 28 74 68 65 0a 2a 2a 20 73 63 68 65  r 0 (the.** sche
173f0 6d 61 20 76 65 72 73 69 6f 6e 29 20 61 6e 64 20  ma version) and 
17400 6d 61 6b 65 20 73 75 72 65 20 69 74 20 69 73 20  make sure it is 
17410 65 71 75 61 6c 20 74 6f 20 50 32 2e 20 20 0a 2a  equal to P2.  .*
17420 2a 20 50 31 20 69 73 20 74 68 65 20 64 61 74 61  * P1 is the data
17430 62 61 73 65 20 6e 75 6d 62 65 72 20 77 68 69 63  base number whic
17440 68 20 69 73 20 30 20 66 6f 72 20 74 68 65 20 6d  h is 0 for the m
17450 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
17460 65 0a 2a 2a 20 61 6e 64 20 31 20 66 6f 72 20 74  e.** and 1 for t
17470 68 65 20 66 69 6c 65 20 68 6f 6c 64 69 6e 67 20  he file holding 
17480 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73  temporary tables
17490 20 61 6e 64 20 73 6f 6d 65 20 68 69 67 68 65 72   and some higher
174a0 20 6e 75 6d 62 65 72 0a 2a 2a 20 66 6f 72 20 61   number.** for a
174b0 75 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73  uxiliary databas
174c0 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f  es..**.** The co
174d0 6f 6b 69 65 20 63 68 61 6e 67 65 73 20 69 74 73  okie changes its
174e0 20 76 61 6c 75 65 20 77 68 65 6e 65 76 65 72 20   value whenever 
174f0 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68  the database sch
17500 65 6d 61 20 63 68 61 6e 67 65 73 2e 0a 2a 2a 20  ema changes..** 
17510 54 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 20 69  This operation i
17520 73 20 75 73 65 64 20 74 6f 20 64 65 74 65 63 74  s used to detect
17530 20 77 68 65 6e 20 74 68 61 74 20 74 68 65 20 63   when that the c
17540 6f 6f 6b 69 65 20 68 61 73 20 63 68 61 6e 67 65  ookie has change
17550 64 0a 2a 2a 20 61 6e 64 20 74 68 61 74 20 74 68  d.** and that th
17560 65 20 63 75 72 72 65 6e 74 20 70 72 6f 63 65 73  e current proces
17570 73 20 6e 65 65 64 73 20 74 6f 20 72 65 72 65 61  s needs to rerea
17580 64 20 74 68 65 20 73 63 68 65 6d 61 2e 0a 2a 2a  d the schema..**
17590 0a 2a 2a 20 45 69 74 68 65 72 20 61 20 74 72 61  .** Either a tra
175a0 6e 73 61 63 74 69 6f 6e 20 6e 65 65 64 73 20 74  nsaction needs t
175b0 6f 20 68 61 76 65 20 62 65 65 6e 20 73 74 61 72  o have been star
175c0 74 65 64 20 6f 72 20 61 6e 20 4f 50 5f 4f 70 65  ted or an OP_Ope
175d0 6e 20 6e 65 65 64 73 0a 2a 2a 20 74 6f 20 62 65  n needs.** to be
175e0 20 65 78 65 63 75 74 65 64 20 28 74 6f 20 65 73   executed (to es
175f0 74 61 62 6c 69 73 68 20 61 20 72 65 61 64 20 6c  tablish a read l
17600 6f 63 6b 29 20 62 65 66 6f 72 65 20 74 68 69 73  ock) before this
17610 20 6f 70 63 6f 64 65 20 69 73 0a 2a 2a 20 69 6e   opcode is.** in
17620 76 6f 6b 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f  voked..*/.case O
17630 50 5f 56 65 72 69 66 79 43 6f 6f 6b 69 65 3a 20  P_VerifyCookie: 
17640 7b 0a 20 20 69 6e 74 20 69 4d 65 74 61 3b 0a 20  {.  int iMeta;. 
17650 20 42 74 72 65 65 20 2a 70 42 74 3b 0a 20 20 61   Btree *pBt;.  a
17660 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
17670 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d  0 && pOp->p1<db-
17680 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74  >nDb );.  assert
17690 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20  ( (p->btreeMask 
176a0 26 20 28 31 3c 3c 70 4f 70 2d 3e 70 31 29 29 21  & (1<<pOp->p1))!
176b0 3d 30 20 29 3b 0a 20 20 70 42 74 20 3d 20 64 62  =0 );.  pBt = db
176c0 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70  ->aDb[pOp->p1].p
176d0 42 74 3b 0a 20 20 69 66 28 20 70 42 74 20 29 7b  Bt;.  if( pBt ){
176e0 0a 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65  .    sqlite3Btre
176f0 65 47 65 74 4d 65 74 61 28 70 42 74 2c 20 42 54  eGetMeta(pBt, BT
17700 52 45 45 5f 53 43 48 45 4d 41 5f 56 45 52 53 49  REE_SCHEMA_VERSI
17710 4f 4e 2c 20 28 75 33 32 20 2a 29 26 69 4d 65 74  ON, (u32 *)&iMet
17720 61 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  a);.  }else{.   
17730 20 69 4d 65 74 61 20 3d 20 30 3b 0a 20 20 7d 0a   iMeta = 0;.  }.
17740 20 20 69 66 28 20 69 4d 65 74 61 21 3d 70 4f 70    if( iMeta!=pOp
17750 2d 3e 70 32 20 29 7b 0a 20 20 20 20 73 71 6c 69  ->p2 ){.    sqli
17760 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 70 2d  te3DbFree(db, p-
17770 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 70  >zErrMsg);.    p
17780 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 73 71 6c 69  ->zErrMsg = sqli
17790 74 65 33 44 62 53 74 72 44 75 70 28 64 62 2c 20  te3DbStrDup(db, 
177a0 22 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61  "database schema
177b0 20 68 61 73 20 63 68 61 6e 67 65 64 22 29 3b 0a   has changed");.
177c0 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20 73 63      /* If the sc
177d0 68 65 6d 61 2d 63 6f 6f 6b 69 65 20 66 72 6f 6d  hema-cookie from
177e0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
177f0 6c 65 20 6d 61 74 63 68 65 73 20 74 68 65 20 63  le matches the c
17800 6f 6f 6b 69 65 20 0a 20 20 20 20 2a 2a 20 73 74  ookie .    ** st
17810 6f 72 65 64 20 77 69 74 68 20 74 68 65 20 69 6e  ored with the in
17820 2d 6d 65 6d 6f 72 79 20 72 65 70 72 65 73 65 6e  -memory represen
17830 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 73 63  tation of the sc
17840 68 65 6d 61 2c 20 64 6f 0a 20 20 20 20 2a 2a 20  hema, do.    ** 
17850 6e 6f 74 20 72 65 6c 6f 61 64 20 74 68 65 20 73  not reload the s
17860 63 68 65 6d 61 20 66 72 6f 6d 20 74 68 65 20 64  chema from the d
17870 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 20 20  atabase file..  
17880 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 49 66 20 76    **.    ** If v
17890 69 72 74 75 61 6c 2d 74 61 62 6c 65 73 20 61 72  irtual-tables ar
178a0 65 20 69 6e 20 75 73 65 2c 20 74 68 69 73 20 69  e in use, this i
178b0 73 20 6e 6f 74 20 6a 75 73 74 20 61 6e 20 6f 70  s not just an op
178c0 74 69 6d 69 7a 61 74 69 6f 6e 2e 0a 20 20 20 20  timization..    
178d0 2a 2a 20 4f 66 74 65 6e 2c 20 76 2d 74 61 62 6c  ** Often, v-tabl
178e0 65 73 20 73 74 6f 72 65 20 74 68 65 69 72 20 64  es store their d
178f0 61 74 61 20 69 6e 20 6f 74 68 65 72 20 53 51 4c  ata in other SQL
17900 69 74 65 20 74 61 62 6c 65 73 2c 20 77 68 69 63  ite tables, whic
17910 68 0a 20 20 20 20 2a 2a 20 61 72 65 20 71 75 65  h.    ** are que
17920 72 69 65 64 20 66 72 6f 6d 20 77 69 74 68 69 6e  ried from within
17930 20 78 4e 65 78 74 28 29 20 61 6e 64 20 6f 74 68   xNext() and oth
17940 65 72 20 76 2d 74 61 62 6c 65 20 6d 65 74 68 6f  er v-table metho
17950 64 73 20 75 73 69 6e 67 0a 20 20 20 20 2a 2a 20  ds using.    ** 
17960 70 72 65 70 61 72 65 64 20 71 75 65 72 69 65 73  prepared queries
17970 2e 20 49 66 20 73 75 63 68 20 61 20 71 75 65 72  . If such a quer
17980 79 20 69 73 20 6f 75 74 2d 6f 66 2d 64 61 74 65  y is out-of-date
17990 2c 20 77 65 20 64 6f 20 6e 6f 74 20 77 61 6e 74  , we do not want
179a0 20 74 6f 0a 20 20 20 20 2a 2a 20 64 69 73 63 61   to.    ** disca
179b0 72 64 20 74 68 65 20 64 61 74 61 62 61 73 65 20  rd the database 
179c0 73 63 68 65 6d 61 2c 20 61 73 20 74 68 65 20 75  schema, as the u
179d0 73 65 72 20 63 6f 64 65 20 69 6d 70 6c 65 6d 65  ser code impleme
179e0 6e 74 69 6e 67 20 74 68 65 0a 20 20 20 20 2a 2a  nting the.    **
179f0 20 76 2d 74 61 62 6c 65 20 77 6f 75 6c 64 20 68   v-table would h
17a00 61 76 65 20 74 6f 20 62 65 20 72 65 61 64 79 20  ave to be ready 
17a10 66 6f 72 20 74 68 65 20 73 71 6c 69 74 65 33 5f  for the sqlite3_
17a20 76 74 61 62 20 73 74 72 75 63 74 75 72 65 20 69  vtab structure i
17a30 74 73 65 6c 66 0a 20 20 20 20 2a 2a 20 74 6f 20  tself.    ** to 
17a40 62 65 20 69 6e 76 61 6c 69 64 61 74 65 64 20 77  be invalidated w
17a50 68 65 6e 65 76 65 72 20 73 71 6c 69 74 65 33 5f  henever sqlite3_
17a60 73 74 65 70 28 29 20 69 73 20 63 61 6c 6c 65 64  step() is called
17a70 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 0a 20 20   from within .  
17a80 20 20 2a 2a 20 61 20 76 2d 74 61 62 6c 65 20 6d    ** a v-table m
17a90 65 74 68 6f 64 2e 0a 20 20 20 20 2a 2f 0a 20 20  ethod..    */.  
17aa0 20 20 69 66 28 20 64 62 2d 3e 61 44 62 5b 70 4f    if( db->aDb[pO
17ab0 70 2d 3e 70 31 5d 2e 70 53 63 68 65 6d 61 2d 3e  p->p1].pSchema->
17ac0 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 21 3d 69  schema_cookie!=i
17ad0 4d 65 74 61 20 29 7b 0a 20 20 20 20 20 20 73 71  Meta ){.      sq
17ae0 6c 69 74 65 33 52 65 73 65 74 49 6e 74 65 72 6e  lite3ResetIntern
17af0 61 6c 53 63 68 65 6d 61 28 64 62 2c 20 70 4f 70  alSchema(db, pOp
17b00 2d 3e 70 31 29 3b 0a 20 20 20 20 7d 0a 0a 20 20  ->p1);.    }..  
17b10 20 20 73 71 6c 69 74 65 33 45 78 70 69 72 65 50    sqlite3ExpireP
17b20 72 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74  reparedStatement
17b30 73 28 64 62 29 3b 0a 20 20 20 20 72 63 20 3d 20  s(db);.    rc = 
17b40 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 3b 0a 20  SQLITE_SCHEMA;. 
17b50 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
17b60 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 52 65  * Opcode: OpenRe
17b70 61 64 20 50 31 20 50 32 20 50 33 20 50 34 20 50  ad P1 P2 P3 P4 P
17b80 35 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 72  5.**.** Open a r
17b90 65 61 64 2d 6f 6e 6c 79 20 63 75 72 73 6f 72 20  ead-only cursor 
17ba0 66 6f 72 20 74 68 65 20 64 61 74 61 62 61 73 65  for the database
17bb0 20 74 61 62 6c 65 20 77 68 6f 73 65 20 72 6f 6f   table whose roo
17bc0 74 20 70 61 67 65 20 69 73 0a 2a 2a 20 50 32 20  t page is.** P2 
17bd0 69 6e 20 61 20 64 61 74 61 62 61 73 65 20 66 69  in a database fi
17be0 6c 65 2e 20 20 54 68 65 20 64 61 74 61 62 61 73  le.  The databas
17bf0 65 20 66 69 6c 65 20 69 73 20 64 65 74 65 72 6d  e file is determ
17c00 69 6e 65 64 20 62 79 20 50 33 2e 20 0a 2a 2a 20  ined by P3. .** 
17c10 50 33 3d 3d 30 20 6d 65 61 6e 73 20 74 68 65 20  P3==0 means the 
17c20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2c 20 50  main database, P
17c30 33 3d 3d 31 20 6d 65 61 6e 73 20 74 68 65 20 64  3==1 means the d
17c40 61 74 61 62 61 73 65 20 75 73 65 64 20 66 6f 72  atabase used for
17c50 20 0a 2a 2a 20 74 65 6d 70 6f 72 61 72 79 20 74   .** temporary t
17c60 61 62 6c 65 73 2c 20 61 6e 64 20 50 33 3e 31 20  ables, and P3>1 
17c70 6d 65 61 6e 73 20 75 73 65 64 20 74 68 65 20 63  means used the c
17c80 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 61 74 74  orresponding att
17c90 61 63 68 65 64 0a 2a 2a 20 64 61 74 61 62 61 73  ached.** databas
17ca0 65 2e 20 20 47 69 76 65 20 74 68 65 20 6e 65 77  e.  Give the new
17cb0 20 63 75 72 73 6f 72 20 61 6e 20 69 64 65 6e 74   cursor an ident
17cc0 69 66 69 65 72 20 6f 66 20 50 31 2e 20 20 54 68  ifier of P1.  Th
17cd0 65 20 50 31 0a 2a 2a 20 76 61 6c 75 65 73 20 6e  e P1.** values n
17ce0 65 65 64 20 6e 6f 74 20 62 65 20 63 6f 6e 74 69  eed not be conti
17cf0 67 75 6f 75 73 20 62 75 74 20 61 6c 6c 20 50 31  guous but all P1
17d00 20 76 61 6c 75 65 73 20 73 68 6f 75 6c 64 20 62   values should b
17d10 65 20 73 6d 61 6c 6c 20 69 6e 74 65 67 65 72 73  e small integers
17d20 2e 0a 2a 2a 20 49 74 20 69 73 20 61 6e 20 65 72  ..** It is an er
17d30 72 6f 72 20 66 6f 72 20 50 31 20 74 6f 20 62 65  ror for P1 to be
17d40 20 6e 65 67 61 74 69 76 65 2e 0a 2a 2a 0a 2a 2a   negative..**.**
17d50 20 49 66 20 50 35 21 3d 30 20 74 68 65 6e 20 75   If P5!=0 then u
17d60 73 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  se the content o
17d70 66 20 72 65 67 69 73 74 65 72 20 50 32 20 61 73  f register P2 as
17d80 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65 2c 20   the root page, 
17d90 6e 6f 74 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65  not.** the value
17da0 20 6f 66 20 50 32 20 69 74 73 65 6c 66 2e 0a 2a   of P2 itself..*
17db0 2a 0a 2a 2a 20 54 68 65 72 65 20 77 69 6c 6c 20  *.** There will 
17dc0 62 65 20 61 20 72 65 61 64 20 6c 6f 63 6b 20 6f  be a read lock o
17dd0 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 77  n the database w
17de0 68 65 6e 65 76 65 72 20 74 68 65 72 65 20 69 73  henever there is
17df0 20 61 6e 0a 2a 2a 20 6f 70 65 6e 20 63 75 72 73   an.** open curs
17e00 6f 72 2e 20 20 49 66 20 74 68 65 20 64 61 74 61  or.  If the data
17e10 62 61 73 65 20 77 61 73 20 75 6e 6c 6f 63 6b 65  base was unlocke
17e20 64 20 70 72 69 6f 72 20 74 6f 20 74 68 69 73 20  d prior to this 
17e30 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 74  instruction.** t
17e40 68 65 6e 20 61 20 72 65 61 64 20 6c 6f 63 6b 20  hen a read lock 
17e50 69 73 20 61 63 71 75 69 72 65 64 20 61 73 20 70  is acquired as p
17e60 61 72 74 20 6f 66 20 74 68 69 73 20 69 6e 73 74  art of this inst
17e70 72 75 63 74 69 6f 6e 2e 20 20 41 20 72 65 61 64  ruction.  A read
17e80 0a 2a 2a 20 6c 6f 63 6b 20 61 6c 6c 6f 77 73 20  .** lock allows 
17e90 6f 74 68 65 72 20 70 72 6f 63 65 73 73 65 73 20  other processes 
17ea0 74 6f 20 72 65 61 64 20 74 68 65 20 64 61 74 61  to read the data
17eb0 62 61 73 65 20 62 75 74 20 70 72 6f 68 69 62 69  base but prohibi
17ec0 74 73 0a 2a 2a 20 61 6e 79 20 6f 74 68 65 72 20  ts.** any other 
17ed0 70 72 6f 63 65 73 73 20 66 72 6f 6d 20 6d 6f 64  process from mod
17ee0 69 66 79 69 6e 67 20 74 68 65 20 64 61 74 61 62  ifying the datab
17ef0 61 73 65 2e 20 20 54 68 65 20 72 65 61 64 20 6c  ase.  The read l
17f00 6f 63 6b 20 69 73 0a 2a 2a 20 72 65 6c 65 61 73  ock is.** releas
17f10 65 64 20 77 68 65 6e 20 61 6c 6c 20 63 75 72 73  ed when all curs
17f20 6f 72 73 20 61 72 65 20 63 6c 6f 73 65 64 2e 20  ors are closed. 
17f30 20 49 66 20 74 68 69 73 20 69 6e 73 74 72 75 63   If this instruc
17f40 74 69 6f 6e 20 61 74 74 65 6d 70 74 73 0a 2a 2a  tion attempts.**
17f50 20 74 6f 20 67 65 74 20 61 20 72 65 61 64 20 6c   to get a read l
17f60 6f 63 6b 20 62 75 74 20 66 61 69 6c 73 2c 20 74  ock but fails, t
17f70 68 65 20 73 63 72 69 70 74 20 74 65 72 6d 69 6e  he script termin
17f80 61 74 65 73 20 77 69 74 68 20 61 6e 0a 2a 2a 20  ates with an.** 
17f90 53 51 4c 49 54 45 5f 42 55 53 59 20 65 72 72 6f  SQLITE_BUSY erro
17fa0 72 20 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68  r code..**.** Th
17fb0 65 20 50 34 20 76 61 6c 75 65 20 6d 61 79 20 62  e P4 value may b
17fc0 65 20 65 69 74 68 65 72 20 61 6e 20 69 6e 74 65  e either an inte
17fd0 67 65 72 20 28 50 34 5f 49 4e 54 33 32 29 20 6f  ger (P4_INT32) o
17fe0 72 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 0a 2a  r a pointer to.*
17ff0 2a 20 61 20 4b 65 79 49 6e 66 6f 20 73 74 72 75  * a KeyInfo stru
18000 63 74 75 72 65 20 28 50 34 5f 4b 45 59 49 4e 46  cture (P4_KEYINF
18010 4f 29 2e 20 49 66 20 69 74 20 69 73 20 61 20 70  O). If it is a p
18020 6f 69 6e 74 65 72 20 74 6f 20 61 20 4b 65 79 49  ointer to a KeyI
18030 6e 66 6f 20 0a 2a 2a 20 73 74 72 75 63 74 75 72  nfo .** structur
18040 65 2c 20 74 68 65 6e 20 73 61 69 64 20 73 74 72  e, then said str
18050 75 63 74 75 72 65 20 64 65 66 69 6e 65 73 20 74  ucture defines t
18060 68 65 20 63 6f 6e 74 65 6e 74 20 61 6e 64 20 63  he content and c
18070 6f 6c 6c 61 74 69 6e 67 20 0a 2a 2a 20 73 65 71  ollating .** seq
18080 75 65 6e 63 65 20 6f 66 20 74 68 65 20 69 6e 64  uence of the ind
18090 65 78 20 62 65 69 6e 67 20 6f 70 65 6e 65 64 2e  ex being opened.
180a0 20 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20 50   Otherwise, if P
180b0 34 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20  4 is an integer 
180c0 0a 2a 2a 20 76 61 6c 75 65 2c 20 69 74 20 69 73  .** value, it is
180d0 20 73 65 74 20 74 6f 20 74 68 65 20 6e 75 6d 62   set to the numb
180e0 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
180f0 20 74 68 65 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a   the table..**.*
18100 2a 20 53 65 65 20 61 6c 73 6f 20 4f 70 65 6e 57  * See also OpenW
18110 72 69 74 65 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  rite..*/./* Opco
18120 64 65 3a 20 4f 70 65 6e 57 72 69 74 65 20 50 31  de: OpenWrite P1
18130 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a   P2 P3 P4 P5.**.
18140 2a 2a 20 4f 70 65 6e 20 61 20 72 65 61 64 2f 77  ** Open a read/w
18150 72 69 74 65 20 63 75 72 73 6f 72 20 6e 61 6d 65  rite cursor name
18160 64 20 50 31 20 6f 6e 20 74 68 65 20 74 61 62 6c  d P1 on the tabl
18170 65 20 6f 72 20 69 6e 64 65 78 20 77 68 6f 73 65  e or index whose
18180 20 72 6f 6f 74 0a 2a 2a 20 70 61 67 65 20 69 73   root.** page is
18190 20 50 32 2e 20 20 4f 72 20 69 66 20 50 35 21 3d   P2.  Or if P5!=
181a0 30 20 75 73 65 20 74 68 65 20 63 6f 6e 74 65 6e  0 use the conten
181b0 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 32  t of register P2
181c0 20 74 6f 20 66 69 6e 64 20 74 68 65 0a 2a 2a 20   to find the.** 
181d0 72 6f 6f 74 20 70 61 67 65 2e 0a 2a 2a 0a 2a 2a  root page..**.**
181e0 20 54 68 65 20 50 34 20 76 61 6c 75 65 20 6d 61   The P4 value ma
181f0 79 20 62 65 20 65 69 74 68 65 72 20 61 6e 20 69  y be either an i
18200 6e 74 65 67 65 72 20 28 50 34 5f 49 4e 54 33 32  nteger (P4_INT32
18210 29 20 6f 72 20 61 20 70 6f 69 6e 74 65 72 20 74  ) or a pointer t
18220 6f 0a 2a 2a 20 61 20 4b 65 79 49 6e 66 6f 20 73  o.** a KeyInfo s
18230 74 72 75 63 74 75 72 65 20 28 50 34 5f 4b 45 59  tructure (P4_KEY
18240 49 4e 46 4f 29 2e 20 49 66 20 69 74 20 69 73 20  INFO). If it is 
18250 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 4b  a pointer to a K
18260 65 79 49 6e 66 6f 20 0a 2a 2a 20 73 74 72 75 63  eyInfo .** struc
18270 74 75 72 65 2c 20 74 68 65 6e 20 73 61 69 64 20  ture, then said 
18280 73 74 72 75 63 74 75 72 65 20 64 65 66 69 6e 65  structure define
18290 73 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 61 6e  s the content an
182a0 64 20 63 6f 6c 6c 61 74 69 6e 67 20 0a 2a 2a 20  d collating .** 
182b0 73 65 71 75 65 6e 63 65 20 6f 66 20 74 68 65 20  sequence of the 
182c0 69 6e 64 65 78 20 62 65 69 6e 67 20 6f 70 65 6e  index being open
182d0 65 64 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69  ed. Otherwise, i
182e0 66 20 50 34 20 69 73 20 61 6e 20 69 6e 74 65 67  f P4 is an integ
182f0 65 72 20 0a 2a 2a 20 76 61 6c 75 65 2c 20 69 74  er .** value, it
18300 20 69 73 20 73 65 74 20 74 6f 20 74 68 65 20 6e   is set to the n
18310 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
18320 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2c 20 6f   in the table, o
18330 72 20 74 6f 20 74 68 65 0a 2a 2a 20 6c 61 72 67  r to the.** larg
18340 65 73 74 20 69 6e 64 65 78 20 6f 66 20 61 6e 79  est index of any
18350 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 74   column of the t
18360 61 62 6c 65 20 74 68 61 74 20 69 73 20 61 63 74  able that is act
18370 75 61 6c 6c 79 20 75 73 65 64 2e 0a 2a 2a 0a 2a  ually used..**.*
18380 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69  * This instructi
18390 6f 6e 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69  on works just li
183a0 6b 65 20 4f 70 65 6e 52 65 61 64 20 65 78 63 65  ke OpenRead exce
183b0 70 74 20 74 68 61 74 20 69 74 20 6f 70 65 6e 73  pt that it opens
183c0 20 74 68 65 20 63 75 72 73 6f 72 0a 2a 2a 20 69   the cursor.** i
183d0 6e 20 72 65 61 64 2f 77 72 69 74 65 20 6d 6f 64  n read/write mod
183e0 65 2e 20 20 46 6f 72 20 61 20 67 69 76 65 6e 20  e.  For a given 
183f0 74 61 62 6c 65 2c 20 74 68 65 72 65 20 63 61 6e  table, there can
18400 20 62 65 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20   be one or more 
18410 72 65 61 64 2d 6f 6e 6c 79 0a 2a 2a 20 63 75 72  read-only.** cur
18420 73 6f 72 73 20 6f 72 20 61 20 73 69 6e 67 6c 65  sors or a single
18430 20 72 65 61 64 2f 77 72 69 74 65 20 63 75 72 73   read/write curs
18440 6f 72 20 62 75 74 20 6e 6f 74 20 62 6f 74 68 2e  or but not both.
18450 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 20  .**.** See also 
18460 4f 70 65 6e 52 65 61 64 2e 0a 2a 2f 0a 63 61 73  OpenRead..*/.cas
18470 65 20 4f 50 5f 4f 70 65 6e 52 65 61 64 3a 0a 63  e OP_OpenRead:.c
18480 61 73 65 20 4f 50 5f 4f 70 65 6e 57 72 69 74 65  ase OP_OpenWrite
18490 3a 20 7b 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64  : {.  int nField
184a0 3b 0a 20 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65  ;.  KeyInfo *pKe
184b0 79 49 6e 66 6f 3b 0a 20 20 69 6e 74 20 70 32 3b  yInfo;.  int p2;
184c0 0a 20 20 69 6e 74 20 69 44 62 3b 0a 20 20 69 6e  .  int iDb;.  in
184d0 74 20 77 72 46 6c 61 67 3b 0a 20 20 42 74 72 65  t wrFlag;.  Btre
184e0 65 20 2a 70 58 3b 0a 20 20 56 64 62 65 43 75 72  e *pX;.  VdbeCur
184f0 73 6f 72 20 2a 70 43 75 72 3b 0a 20 20 44 62 20  sor *pCur;.  Db 
18500 2a 70 44 62 3b 0a 0a 20 20 69 66 28 20 70 2d 3e  *pDb;..  if( p->
18510 65 78 70 69 72 65 64 20 29 7b 0a 20 20 20 20 72  expired ){.    r
18520 63 20 3d 20 53 51 4c 49 54 45 5f 41 42 4f 52 54  c = SQLITE_ABORT
18530 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  ;.    break;.  }
18540 0a 0a 20 20 6e 46 69 65 6c 64 20 3d 20 30 3b 0a  ..  nField = 0;.
18550 20 20 70 4b 65 79 49 6e 66 6f 20 3d 20 30 3b 0a    pKeyInfo = 0;.
18560 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a    p2 = pOp->p2;.
18570 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70 33 3b    iDb = pOp->p3;
18580 0a 20 20 61 73 73 65 72 74 28 20 69 44 62 3e 3d  .  assert( iDb>=
18590 30 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62  0 && iDb<db->nDb
185a0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70   );.  assert( (p
185b0 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28 31  ->btreeMask & (1
185c0 3c 3c 69 44 62 29 29 21 3d 30 20 29 3b 0a 20 20  <<iDb))!=0 );.  
185d0 70 44 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b 69  pDb = &db->aDb[i
185e0 44 62 5d 3b 0a 20 20 70 58 20 3d 20 70 44 62 2d  Db];.  pX = pDb-
185f0 3e 70 42 74 3b 0a 20 20 61 73 73 65 72 74 28 20  >pBt;.  assert( 
18600 70 58 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 70  pX!=0 );.  if( p
18610 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f  Op->opcode==OP_O
18620 70 65 6e 57 72 69 74 65 20 29 7b 0a 20 20 20 20  penWrite ){.    
18630 77 72 46 6c 61 67 20 3d 20 31 3b 0a 20 20 20 20  wrFlag = 1;.    
18640 69 66 28 20 70 44 62 2d 3e 70 53 63 68 65 6d 61  if( pDb->pSchema
18650 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3c 20  ->file_format < 
18660 70 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65 46  p->minWriteFileF
18670 6f 72 6d 61 74 20 29 7b 0a 20 20 20 20 20 20 70  ormat ){.      p
18680 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65 46 6f  ->minWriteFileFo
18690 72 6d 61 74 20 3d 20 70 44 62 2d 3e 70 53 63 68  rmat = pDb->pSch
186a0 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74  ema->file_format
186b0 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b  ;.    }.  }else{
186c0 0a 20 20 20 20 77 72 46 6c 61 67 20 3d 20 30 3b  .    wrFlag = 0;
186d0 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e  .  }.  if( pOp->
186e0 70 35 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  p5 ){.    assert
186f0 28 20 70 32 3e 30 20 29 3b 0a 20 20 20 20 61 73  ( p2>0 );.    as
18700 73 65 72 74 28 20 70 32 3c 3d 70 2d 3e 6e 4d 65  sert( p2<=p->nMe
18710 6d 20 29 3b 0a 20 20 20 20 70 49 6e 32 20 3d 20  m );.    pIn2 = 
18720 26 61 4d 65 6d 5b 70 32 5d 3b 0a 20 20 20 20 61  &aMem[p2];.    a
18730 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
18740 64 28 70 49 6e 32 29 20 29 3b 0a 20 20 20 20 61  d(pIn2) );.    a
18750 73 73 65 72 74 28 20 28 70 49 6e 32 2d 3e 66 6c  ssert( (pIn2->fl
18760 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d  ags & MEM_Int)!=
18770 30 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  0 );.    sqlite3
18780 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66  VdbeMemIntegerif
18790 79 28 70 49 6e 32 29 3b 0a 20 20 20 20 70 32 20  y(pIn2);.    p2 
187a0 3d 20 28 69 6e 74 29 70 49 6e 32 2d 3e 75 2e 69  = (int)pIn2->u.i
187b0 3b 0a 20 20 20 20 2f 2a 20 54 68 65 20 70 32 20  ;.    /* The p2 
187c0 76 61 6c 75 65 20 61 6c 77 61 79 73 20 63 6f 6d  value always com
187d0 65 73 20 66 72 6f 6d 20 61 20 70 72 69 6f 72 20  es from a prior 
187e0 4f 50 5f 43 72 65 61 74 65 54 61 62 6c 65 20 6f  OP_CreateTable o
187f0 70 63 6f 64 65 20 61 6e 64 0a 20 20 20 20 2a 2a  pcode and.    **
18800 20 74 68 61 74 20 6f 70 63 6f 64 65 20 77 69 6c   that opcode wil
18810 6c 20 61 6c 77 61 79 73 20 73 65 74 20 74 68 65  l always set the
18820 20 70 32 20 76 61 6c 75 65 20 74 6f 20 32 20 6f   p2 value to 2 o
18830 72 20 6d 6f 72 65 20 6f 72 20 65 6c 73 65 20 66  r more or else f
18840 61 69 6c 2e 0a 20 20 20 20 2a 2a 20 49 66 20 74  ail..    ** If t
18850 68 65 72 65 20 77 65 72 65 20 61 20 66 61 69 6c  here were a fail
18860 75 72 65 2c 20 74 68 65 20 70 72 65 70 61 72 65  ure, the prepare
18870 64 20 73 74 61 74 65 6d 65 6e 74 20 77 6f 75 6c  d statement woul
18880 64 20 68 61 76 65 20 68 61 6c 74 65 64 0a 20 20  d have halted.  
18890 20 20 2a 2a 20 62 65 66 6f 72 65 20 72 65 61 63    ** before reac
188a0 68 69 6e 67 20 74 68 69 73 20 69 6e 73 74 72 75  hing this instru
188b0 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 20 20 69 66  ction. */.    if
188c0 28 20 4e 45 56 45 52 28 70 32 3c 32 29 20 29 20  ( NEVER(p2<2) ) 
188d0 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c  {.      rc = SQL
188e0 49 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54  ITE_CORRUPT_BKPT
188f0 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f  ;.      goto abo
18900 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
18910 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28  .    }.  }.  if(
18920 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
18930 5f 4b 45 59 49 4e 46 4f 20 29 7b 0a 20 20 20 20  _KEYINFO ){.    
18940 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e  pKeyInfo = pOp->
18950 70 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20  p4.pKeyInfo;.   
18960 20 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63 20 3d   pKeyInfo->enc =
18970 20 45 4e 43 28 70 2d 3e 64 62 29 3b 0a 20 20 20   ENC(p->db);.   
18980 20 6e 46 69 65 6c 64 20 3d 20 70 4b 65 79 49 6e   nField = pKeyIn
18990 66 6f 2d 3e 6e 46 69 65 6c 64 2b 31 3b 0a 20 20  fo->nField+1;.  
189a0 7d 65 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e 70  }else if( pOp->p
189b0 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20  4type==P4_INT32 
189c0 29 7b 0a 20 20 20 20 6e 46 69 65 6c 64 20 3d 20  ){.    nField = 
189d0 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 7d 0a 20  pOp->p4.i;.  }. 
189e0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
189f0 3e 3d 30 20 29 3b 0a 20 20 70 43 75 72 20 3d 20  >=0 );.  pCur = 
18a00 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70  allocateCursor(p
18a10 2c 20 70 4f 70 2d 3e 70 31 2c 20 6e 46 69 65 6c  , pOp->p1, nFiel
18a20 64 2c 20 69 44 62 2c 20 31 29 3b 0a 20 20 69 66  d, iDb, 1);.  if
18a30 28 20 70 43 75 72 3d 3d 30 20 29 20 67 6f 74 6f  ( pCur==0 ) goto
18a40 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 75 72 2d   no_mem;.  pCur-
18a50 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20  >nullRow = 1;.  
18a60 70 43 75 72 2d 3e 69 73 4f 72 64 65 72 65 64 20  pCur->isOrdered 
18a70 3d 20 31 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  = 1;.  rc = sqli
18a80 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 28 70  te3BtreeCursor(p
18a90 58 2c 20 70 32 2c 20 77 72 46 6c 61 67 2c 20 70  X, p2, wrFlag, p
18aa0 4b 65 79 49 6e 66 6f 2c 20 70 43 75 72 2d 3e 70  KeyInfo, pCur->p
18ab0 43 75 72 73 6f 72 29 3b 0a 20 20 70 43 75 72 2d  Cursor);.  pCur-
18ac0 3e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4b 65 79  >pKeyInfo = pKey
18ad0 49 6e 66 6f 3b 0a 0a 20 20 2f 2a 20 53 69 6e 63  Info;..  /* Sinc
18ae0 65 20 69 74 20 70 65 72 66 6f 72 6d 73 20 6e 6f  e it performs no
18af0 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
18b00 6f 6e 20 6f 72 20 49 4f 2c 20 74 68 65 20 6f 6e  on or IO, the on
18b10 6c 79 20 76 61 6c 75 65 73 20 74 68 61 74 0a 20  ly values that. 
18b20 20 2a 2a 20 73 71 6c 69 74 65 33 42 74 72 65 65   ** sqlite3Btree
18b30 43 75 72 73 6f 72 28 29 20 6d 61 79 20 72 65 74  Cursor() may ret
18b40 75 72 6e 20 61 72 65 20 53 51 4c 49 54 45 5f 45  urn are SQLITE_E
18b50 4d 50 54 59 20 61 6e 64 20 53 51 4c 49 54 45 5f  MPTY and SQLITE_
18b60 4f 4b 2e 20 0a 20 20 2a 2a 20 53 51 4c 49 54 45  OK. .  ** SQLITE
18b70 5f 45 4d 50 54 59 20 69 73 20 6f 6e 6c 79 20 72  _EMPTY is only r
18b80 65 74 75 72 6e 65 64 20 77 68 65 6e 20 61 74 74  eturned when att
18b90 65 6d 70 74 69 6e 67 20 74 6f 20 6f 70 65 6e 20  empting to open 
18ba0 74 68 65 20 74 61 62 6c 65 0a 20 20 2a 2a 20 72  the table.  ** r
18bb0 6f 6f 74 65 64 20 61 74 20 70 61 67 65 20 31 20  ooted at page 1 
18bc0 6f 66 20 61 20 7a 65 72 6f 2d 62 79 74 65 20 64  of a zero-byte d
18bd0 61 74 61 62 61 73 65 2e 20 20 2a 2f 0a 20 20 61  atabase.  */.  a
18be0 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54  ssert( rc==SQLIT
18bf0 45 5f 45 4d 50 54 59 20 7c 7c 20 72 63 3d 3d 53  E_EMPTY || rc==S
18c00 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 20 20 69 66  QLITE_OK );.  if
18c10 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 45 4d 50  ( rc==SQLITE_EMP
18c20 54 59 20 29 7b 0a 20 20 20 20 70 43 75 72 2d 3e  TY ){.    pCur->
18c30 70 43 75 72 73 6f 72 20 3d 20 30 3b 0a 20 20 20  pCursor = 0;.   
18c40 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b   rc = SQLITE_OK;
18c50 0a 20 20 7d 0a 0a 20 20 2f 2a 20 53 65 74 20 74  .  }..  /* Set t
18c60 68 65 20 56 64 62 65 43 75 72 73 6f 72 2e 69 73  he VdbeCursor.is
18c70 54 61 62 6c 65 20 61 6e 64 20 69 73 49 6e 64 65  Table and isInde
18c80 78 20 76 61 72 69 61 62 6c 65 73 2e 20 50 72 65  x variables. Pre
18c90 76 69 6f 75 73 20 76 65 72 73 69 6f 6e 73 20 6f  vious versions o
18ca0 66 0a 20 20 2a 2a 20 53 51 4c 69 74 65 20 75 73  f.  ** SQLite us
18cb0 65 64 20 74 6f 20 63 68 65 63 6b 20 69 66 20 74  ed to check if t
18cc0 68 65 20 72 6f 6f 74 2d 70 61 67 65 20 66 6c 61  he root-page fla
18cd0 67 73 20 77 65 72 65 20 73 61 6e 65 20 61 74 20  gs were sane at 
18ce0 74 68 69 73 20 70 6f 69 6e 74 0a 20 20 2a 2a 20  this point.  ** 
18cf0 61 6e 64 20 72 65 70 6f 72 74 20 64 61 74 61 62  and report datab
18d00 61 73 65 20 63 6f 72 72 75 70 74 69 6f 6e 20 69  ase corruption i
18d10 66 20 74 68 65 79 20 77 65 72 65 20 6e 6f 74 2c  f they were not,
18d20 20 62 75 74 20 74 68 69 73 20 63 68 65 63 6b 20   but this check 
18d30 68 61 73 0a 20 20 2a 2a 20 73 69 6e 63 65 20 6d  has.  ** since m
18d40 6f 76 65 64 20 69 6e 74 6f 20 74 68 65 20 62 74  oved into the bt
18d50 72 65 65 20 6c 61 79 65 72 2e 20 20 2a 2f 20 20  ree layer.  */  
18d60 0a 20 20 70 43 75 72 2d 3e 69 73 54 61 62 6c 65  .  pCur->isTable
18d70 20 3d 20 70 4f 70 2d 3e 70 34 74 79 70 65 21 3d   = pOp->p4type!=
18d80 50 34 5f 4b 45 59 49 4e 46 4f 3b 0a 20 20 70 43  P4_KEYINFO;.  pC
18d90 75 72 2d 3e 69 73 49 6e 64 65 78 20 3d 20 21 70  ur->isIndex = !p
18da0 43 75 72 2d 3e 69 73 54 61 62 6c 65 3b 0a 20 20  Cur->isTable;.  
18db0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
18dc0 6f 64 65 3a 20 4f 70 65 6e 45 70 68 65 6d 65 72  ode: OpenEphemer
18dd0 61 6c 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a  al P1 P2 * P4 *.
18de0 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 6e 65 77  **.** Open a new
18df0 20 63 75 72 73 6f 72 20 50 31 20 74 6f 20 61 20   cursor P1 to a 
18e00 74 72 61 6e 73 69 65 6e 74 20 74 61 62 6c 65 2e  transient table.
18e10 0a 2a 2a 20 54 68 65 20 63 75 72 73 6f 72 20 69  .** The cursor i
18e20 73 20 61 6c 77 61 79 73 20 6f 70 65 6e 65 64 20  s always opened 
18e30 72 65 61 64 2f 77 72 69 74 65 20 65 76 65 6e 20  read/write even 
18e40 69 66 20 0a 2a 2a 20 74 68 65 20 6d 61 69 6e 20  if .** the main 
18e50 64 61 74 61 62 61 73 65 20 69 73 20 72 65 61 64  database is read
18e60 2d 6f 6e 6c 79 2e 20 20 54 68 65 20 65 70 68 65  -only.  The ephe
18e70 6d 65 72 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 69  meral.** table i
18e80 73 20 64 65 6c 65 74 65 64 20 61 75 74 6f 6d 61  s deleted automa
18e90 74 69 63 61 6c 6c 79 20 77 68 65 6e 20 74 68 65  tically when the
18ea0 20 63 75 72 73 6f 72 20 69 73 20 63 6c 6f 73 65   cursor is close
18eb0 64 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73 20 74  d..**.** P2 is t
18ec0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  he number of col
18ed0 75 6d 6e 73 20 69 6e 20 74 68 65 20 65 70 68 65  umns in the ephe
18ee0 6d 65 72 61 6c 20 74 61 62 6c 65 2e 0a 2a 2a 20  meral table..** 
18ef0 54 68 65 20 63 75 72 73 6f 72 20 70 6f 69 6e 74  The cursor point
18f00 73 20 74 6f 20 61 20 42 54 72 65 65 20 74 61 62  s to a BTree tab
18f10 6c 65 20 69 66 20 50 34 3d 3d 30 20 61 6e 64 20  le if P4==0 and 
18f20 74 6f 20 61 20 42 54 72 65 65 20 69 6e 64 65 78  to a BTree index
18f30 0a 2a 2a 20 69 66 20 50 34 20 69 73 20 6e 6f 74  .** if P4 is not
18f40 20 30 2e 20 20 49 66 20 50 34 20 69 73 20 6e 6f   0.  If P4 is no
18f50 74 20 4e 55 4c 4c 2c 20 69 74 20 70 6f 69 6e 74  t NULL, it point
18f60 73 20 74 6f 20 61 20 4b 65 79 49 6e 66 6f 20 73  s to a KeyInfo s
18f70 74 72 75 63 74 75 72 65 0a 2a 2a 20 74 68 61 74  tructure.** that
18f80 20 64 65 66 69 6e 65 73 20 74 68 65 20 66 6f 72   defines the for
18f90 6d 61 74 20 6f 66 20 6b 65 79 73 20 69 6e 20 74  mat of keys in t
18fa0 68 65 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20  he index..**.** 
18fb0 54 68 69 73 20 6f 70 63 6f 64 65 20 77 61 73 20  This opcode was 
18fc0 6f 6e 63 65 20 63 61 6c 6c 65 64 20 4f 70 65 6e  once called Open
18fd0 54 65 6d 70 2e 20 20 42 75 74 20 74 68 61 74 20  Temp.  But that 
18fe0 63 72 65 61 74 65 64 0a 2a 2a 20 63 6f 6e 66 75  created.** confu
18ff0 73 69 6f 6e 20 62 65 63 61 75 73 65 20 74 68 65  sion because the
19000 20 74 65 72 6d 20 22 74 65 6d 70 20 74 61 62 6c   term "temp tabl
19010 65 22 2c 20 6d 69 67 68 74 20 72 65 66 65 72 20  e", might refer 
19020 65 69 74 68 65 72 0a 2a 2a 20 74 6f 20 61 20 54  either.** to a T
19030 45 4d 50 20 74 61 62 6c 65 20 61 74 20 74 68 65  EMP table at the
19040 20 53 51 4c 20 6c 65 76 65 6c 2c 20 6f 72 20 74   SQL level, or t
19050 6f 20 61 20 74 61 62 6c 65 20 6f 70 65 6e 65 64  o a table opened
19060 20 62 79 0a 2a 2a 20 74 68 69 73 20 6f 70 63 6f   by.** this opco
19070 64 65 2e 20 20 54 68 65 6e 20 74 68 69 73 20 6f  de.  Then this o
19080 70 63 6f 64 65 20 77 61 73 20 63 61 6c 6c 20 4f  pcode was call O
19090 70 65 6e 56 69 72 74 75 61 6c 2e 20 20 42 75 74  penVirtual.  But
190a0 0a 2a 2a 20 74 68 61 74 20 63 72 65 61 74 65 64  .** that created
190b0 20 63 6f 6e 66 75 73 69 6f 6e 20 77 69 74 68 20   confusion with 
190c0 74 68 65 20 77 68 6f 6c 65 20 76 69 72 74 75 61  the whole virtua
190d0 6c 2d 74 61 62 6c 65 20 69 64 65 61 2e 0a 2a 2f  l-table idea..*/
190e0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e  ./* Opcode: Open
190f0 41 75 74 6f 69 6e 64 65 78 20 50 31 20 50 32 20  Autoindex P1 P2 
19100 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69  * P4 *.**.** Thi
19110 73 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 74  s opcode works t
19120 68 65 20 73 61 6d 65 20 61 73 20 4f 50 5f 4f 70  he same as OP_Op
19130 65 6e 45 70 68 65 6d 65 72 61 6c 2e 20 20 49 74  enEphemeral.  It
19140 20 68 61 73 20 61 0a 2a 2a 20 64 69 66 66 65 72   has a.** differ
19150 65 6e 74 20 6e 61 6d 65 20 74 6f 20 64 69 73 74  ent name to dist
19160 69 6e 67 75 69 73 68 20 69 74 73 20 75 73 65 2e  inguish its use.
19170 20 20 54 61 62 6c 65 73 20 63 72 65 61 74 65 64    Tables created
19180 20 75 73 69 6e 67 0a 2a 2a 20 62 79 20 74 68 69   using.** by thi
19190 73 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 62 65  s opcode will be
191a0 20 75 73 65 64 20 66 6f 72 20 61 75 74 6f 6d 61   used for automa
191b0 74 69 63 61 6c 6c 79 20 63 72 65 61 74 65 64 20  tically created 
191c0 74 72 61 6e 73 69 65 6e 74 0a 2a 2a 20 69 6e 64  transient.** ind
191d0 69 63 65 73 20 69 6e 20 6a 6f 69 6e 73 2e 0a 2a  ices in joins..*
191e0 2f 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 41 75  /.case OP_OpenAu
191f0 74 6f 69 6e 64 65 78 3a 20 0a 63 61 73 65 20 4f  toindex: .case O
19200 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 3a  P_OpenEphemeral:
19210 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20   {.  VdbeCursor 
19220 2a 70 43 78 3b 0a 20 20 73 74 61 74 69 63 20 63  *pCx;.  static c
19230 6f 6e 73 74 20 69 6e 74 20 76 66 73 46 6c 61 67  onst int vfsFlag
19240 73 20 3d 20 0a 20 20 20 20 20 20 53 51 4c 49 54  s = .      SQLIT
19250 45 5f 4f 50 45 4e 5f 52 45 41 44 57 52 49 54 45  E_OPEN_READWRITE
19260 20 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f   |.      SQLITE_
19270 4f 50 45 4e 5f 43 52 45 41 54 45 20 7c 0a 20 20  OPEN_CREATE |.  
19280 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f      SQLITE_OPEN_
19290 45 58 43 4c 55 53 49 56 45 20 7c 0a 20 20 20 20  EXCLUSIVE |.    
192a0 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 44 45    SQLITE_OPEN_DE
192b0 4c 45 54 45 4f 4e 43 4c 4f 53 45 20 7c 0a 20 20  LETEONCLOSE |.  
192c0 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f      SQLITE_OPEN_
192d0 54 52 41 4e 53 49 45 4e 54 5f 44 42 3b 0a 0a 20  TRANSIENT_DB;.. 
192e0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
192f0 3e 3d 30 20 29 3b 0a 20 20 70 43 78 20 3d 20 61  >=0 );.  pCx = a
19300 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70 2c  llocateCursor(p,
19310 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70   pOp->p1, pOp->p
19320 32 2c 20 2d 31 2c 20 31 29 3b 0a 20 20 69 66 28  2, -1, 1);.  if(
19330 20 70 43 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e   pCx==0 ) goto n
19340 6f 5f 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e 6e 75  o_mem;.  pCx->nu
19350 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 72 63 20  llRow = 1;.  rc 
19360 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4f 70  = sqlite3BtreeOp
19370 65 6e 28 30 2c 20 64 62 2c 20 26 70 43 78 2d 3e  en(0, db, &pCx->
19380 70 42 74 2c 20 0a 20 20 20 20 20 20 20 20 20 20  pBt, .          
19390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 42 54                BT
193a0 52 45 45 5f 4f 4d 49 54 5f 4a 4f 55 52 4e 41 4c  REE_OMIT_JOURNAL
193b0 20 7c 20 42 54 52 45 45 5f 53 49 4e 47 4c 45 20   | BTREE_SINGLE 
193c0 7c 20 70 4f 70 2d 3e 70 35 2c 20 76 66 73 46 6c  | pOp->p5, vfsFl
193d0 61 67 73 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d  ags);.  if( rc==
193e0 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
193f0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
19400 65 65 42 65 67 69 6e 54 72 61 6e 73 28 70 43 78  eeBeginTrans(pCx
19410 2d 3e 70 42 74 2c 20 31 29 3b 0a 20 20 7d 0a 20  ->pBt, 1);.  }. 
19420 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
19430 4f 4b 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20  OK ){.    /* If 
19440 61 20 74 72 61 6e 73 69 65 6e 74 20 69 6e 64 65  a transient inde
19450 78 20 69 73 20 72 65 71 75 69 72 65 64 2c 20 63  x is required, c
19460 72 65 61 74 65 20 69 74 20 62 79 20 63 61 6c 6c  reate it by call
19470 69 6e 67 0a 20 20 20 20 2a 2a 20 73 71 6c 69 74  ing.    ** sqlit
19480 65 33 42 74 72 65 65 43 72 65 61 74 65 54 61 62  e3BtreeCreateTab
19490 6c 65 28 29 20 77 69 74 68 20 74 68 65 20 42 54  le() with the BT
194a0 52 45 45 5f 42 4c 4f 42 4b 45 59 20 66 6c 61 67  REE_BLOBKEY flag
194b0 20 62 65 66 6f 72 65 0a 20 20 20 20 2a 2a 20 6f   before.    ** o
194c0 70 65 6e 69 6e 67 20 69 74 2e 20 49 66 20 61 20  pening it. If a 
194d0 74 72 61 6e 73 69 65 6e 74 20 74 61 62 6c 65 20  transient table 
194e0 69 73 20 72 65 71 75 69 72 65 64 2c 20 6a 75 73  is required, jus
194f0 74 20 75 73 65 20 74 68 65 0a 20 20 20 20 2a 2a  t use the.    **
19500 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63   automatically c
19510 72 65 61 74 65 64 20 74 61 62 6c 65 20 77 69 74  reated table wit
19520 68 20 72 6f 6f 74 2d 70 61 67 65 20 31 20 28 61  h root-page 1 (a
19530 6e 20 42 4c 4f 42 5f 49 4e 54 4b 45 59 20 74 61  n BLOB_INTKEY ta
19540 62 6c 65 29 2e 0a 20 20 20 20 2a 2f 0a 20 20 20  ble)..    */.   
19550 20 69 66 28 20 70 4f 70 2d 3e 70 34 2e 70 4b 65   if( pOp->p4.pKe
19560 79 49 6e 66 6f 20 29 7b 0a 20 20 20 20 20 20 69  yInfo ){.      i
19570 6e 74 20 70 67 6e 6f 3b 0a 20 20 20 20 20 20 61  nt pgno;.      a
19580 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79  ssert( pOp->p4ty
19590 70 65 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f 20 29  pe==P4_KEYINFO )
195a0 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  ;.      rc = sql
195b0 69 74 65 33 42 74 72 65 65 43 72 65 61 74 65 54  ite3BtreeCreateT
195c0 61 62 6c 65 28 70 43 78 2d 3e 70 42 74 2c 20 26  able(pCx->pBt, &
195d0 70 67 6e 6f 2c 20 42 54 52 45 45 5f 42 4c 4f 42  pgno, BTREE_BLOB
195e0 4b 45 59 29 3b 20 0a 20 20 20 20 20 20 69 66 28  KEY); .      if(
195f0 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
19600 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  {.        assert
19610 28 20 70 67 6e 6f 3d 3d 4d 41 53 54 45 52 5f 52  ( pgno==MASTER_R
19620 4f 4f 54 2b 31 20 29 3b 0a 20 20 20 20 20 20 20  OOT+1 );.       
19630 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
19640 65 65 43 75 72 73 6f 72 28 70 43 78 2d 3e 70 42  eeCursor(pCx->pB
19650 74 2c 20 70 67 6e 6f 2c 20 31 2c 20 0a 20 20 20  t, pgno, 1, .   
19660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19670 20 20 20 20 20 20 20 20 20 20 20 20 20 28 4b 65               (Ke
19680 79 49 6e 66 6f 2a 29 70 4f 70 2d 3e 70 34 2e 7a  yInfo*)pOp->p4.z
19690 2c 20 70 43 78 2d 3e 70 43 75 72 73 6f 72 29 3b  , pCx->pCursor);
196a0 0a 20 20 20 20 20 20 20 20 70 43 78 2d 3e 70 4b  .        pCx->pK
196b0 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34  eyInfo = pOp->p4
196c0 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 20  .pKeyInfo;.     
196d0 20 20 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f     pCx->pKeyInfo
196e0 2d 3e 65 6e 63 20 3d 20 45 4e 43 28 70 2d 3e 64  ->enc = ENC(p->d
196f0 62 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  b);.      }.    
19700 20 20 70 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d    pCx->isTable =
19710 20 30 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20   0;.    }else{. 
19720 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
19730 33 42 74 72 65 65 43 75 72 73 6f 72 28 70 43 78  3BtreeCursor(pCx
19740 2d 3e 70 42 74 2c 20 4d 41 53 54 45 52 5f 52 4f  ->pBt, MASTER_RO
19750 4f 54 2c 20 31 2c 20 30 2c 20 70 43 78 2d 3e 70  OT, 1, 0, pCx->p
19760 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 20 20 70  Cursor);.      p
19770 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d 20 31 3b  Cx->isTable = 1;
19780 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 70 43 78  .    }.  }.  pCx
19790 2d 3e 69 73 4f 72 64 65 72 65 64 20 3d 20 28 70  ->isOrdered = (p
197a0 4f 70 2d 3e 70 35 21 3d 42 54 52 45 45 5f 55 4e  Op->p5!=BTREE_UN
197b0 4f 52 44 45 52 45 44 29 3b 0a 20 20 70 43 78 2d  ORDERED);.  pCx-
197c0 3e 69 73 49 6e 64 65 78 20 3d 20 21 70 43 78 2d  >isIndex = !pCx-
197d0 3e 69 73 54 61 62 6c 65 3b 0a 20 20 62 72 65 61  >isTable;.  brea
197e0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
197f0 20 4f 70 65 6e 50 73 65 75 64 6f 20 50 31 20 50   OpenPseudo P1 P
19800 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4f  2 P3 * *.**.** O
19810 70 65 6e 20 61 20 6e 65 77 20 63 75 72 73 6f 72  pen a new cursor
19820 20 74 68 61 74 20 70 6f 69 6e 74 73 20 74 6f 20   that points to 
19830 61 20 66 61 6b 65 20 74 61 62 6c 65 20 74 68 61  a fake table tha
19840 74 20 63 6f 6e 74 61 69 6e 73 20 61 20 73 69 6e  t contains a sin
19850 67 6c 65 0a 2a 2a 20 72 6f 77 20 6f 66 20 64 61  gle.** row of da
19860 74 61 2e 20 20 54 68 65 20 63 6f 6e 74 65 6e 74  ta.  The content
19870 20 6f 66 20 74 68 61 74 20 6f 6e 65 20 72 6f 77   of that one row
19880 20 69 6e 20 74 68 65 20 63 6f 6e 74 65 6e 74 20   in the content 
19890 6f 66 20 6d 65 6d 6f 72 79 0a 2a 2a 20 72 65 67  of memory.** reg
198a0 69 73 74 65 72 20 50 32 2e 20 20 49 6e 20 6f 74  ister P2.  In ot
198b0 68 65 72 20 77 6f 72 64 73 2c 20 63 75 72 73 6f  her words, curso
198c0 72 20 50 31 20 62 65 63 6f 6d 65 73 20 61 6e 20  r P1 becomes an 
198d0 61 6c 69 61 73 20 66 6f 72 20 74 68 65 20 0a 2a  alias for the .*
198e0 2a 20 4d 45 4d 5f 42 6c 6f 62 20 63 6f 6e 74 65  * MEM_Blob conte
198f0 6e 74 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20  nt contained in 
19900 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a  register P2..**.
19910 2a 2a 20 41 20 70 73 65 75 64 6f 2d 74 61 62 6c  ** A pseudo-tabl
19920 65 20 63 72 65 61 74 65 64 20 62 79 20 74 68 69  e created by thi
19930 73 20 6f 70 63 6f 64 65 20 69 73 20 75 73 65 64  s opcode is used
19940 20 74 6f 20 68 6f 6c 64 20 61 20 73 69 6e 67 6c   to hold a singl
19950 65 0a 2a 2a 20 72 6f 77 20 6f 75 74 70 75 74 20  e.** row output 
19960 66 72 6f 6d 20 74 68 65 20 73 6f 72 74 65 72 20  from the sorter 
19970 73 6f 20 74 68 61 74 20 74 68 65 20 72 6f 77 20  so that the row 
19980 63 61 6e 20 62 65 20 64 65 63 6f 6d 70 6f 73 65  can be decompose
19990 64 20 69 6e 74 6f 0a 2a 2a 20 69 6e 64 69 76 69  d into.** indivi
199a0 64 75 61 6c 20 63 6f 6c 75 6d 6e 73 20 75 73 69  dual columns usi
199b0 6e 67 20 74 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e  ng the OP_Column
199c0 20 6f 70 63 6f 64 65 2e 20 20 54 68 65 20 4f 50   opcode.  The OP
199d0 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 0a 2a  _Column opcode.*
199e0 2a 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 63 75  * is the only cu
199f0 72 73 6f 72 20 6f 70 63 6f 64 65 20 74 68 61 74  rsor opcode that
19a00 20 77 6f 72 6b 73 20 77 69 74 68 20 61 20 70 73   works with a ps
19a10 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2a 0a 2a  eudo-table..**.*
19a20 2a 20 50 33 20 69 73 20 74 68 65 20 6e 75 6d 62  * P3 is the numb
19a30 65 72 20 6f 66 20 66 69 65 6c 64 73 20 69 6e 20  er of fields in 
19a40 74 68 65 20 72 65 63 6f 72 64 73 20 74 68 61 74  the records that
19a50 20 77 69 6c 6c 20 62 65 20 73 74 6f 72 65 64 20   will be stored 
19a60 62 79 0a 2a 2a 20 74 68 65 20 70 73 65 75 64 6f  by.** the pseudo
19a70 2d 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20  -table..*/.case 
19a80 4f 50 5f 4f 70 65 6e 50 73 65 75 64 6f 3a 20 7b  OP_OpenPseudo: {
19a90 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
19aa0 43 78 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  Cx;..  assert( p
19ab0 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 70  Op->p1>=0 );.  p
19ac0 43 78 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72  Cx = allocateCur
19ad0 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20  sor(p, pOp->p1, 
19ae0 70 4f 70 2d 3e 70 33 2c 20 2d 31 2c 20 30 29 3b  pOp->p3, -1, 0);
19af0 0a 20 20 69 66 28 20 70 43 78 3d 3d 30 20 29 20  .  if( pCx==0 ) 
19b00 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70  goto no_mem;.  p
19b10 43 78 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b  Cx->nullRow = 1;
19b20 0a 20 20 70 43 78 2d 3e 70 73 65 75 64 6f 54 61  .  pCx->pseudoTa
19b30 62 6c 65 52 65 67 20 3d 20 70 4f 70 2d 3e 70 32  bleReg = pOp->p2
19b40 3b 0a 20 20 70 43 78 2d 3e 69 73 54 61 62 6c 65  ;.  pCx->isTable
19b50 20 3d 20 31 3b 0a 20 20 70 43 78 2d 3e 69 73 49   = 1;.  pCx->isI
19b60 6e 64 65 78 20 3d 20 30 3b 0a 20 20 62 72 65 61  ndex = 0;.  brea
19b70 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
19b80 20 43 6c 6f 73 65 20 50 31 20 2a 20 2a 20 2a 20   Close P1 * * * 
19b90 2a 0a 2a 2a 0a 2a 2a 20 43 6c 6f 73 65 20 61 20  *.**.** Close a 
19ba0 63 75 72 73 6f 72 20 70 72 65 76 69 6f 75 73 6c  cursor previousl
19bb0 79 20 6f 70 65 6e 65 64 20 61 73 20 50 31 2e 20  y opened as P1. 
19bc0 20 49 66 20 50 31 20 69 73 20 6e 6f 74 0a 2a 2a   If P1 is not.**
19bd0 20 63 75 72 72 65 6e 74 6c 79 20 6f 70 65 6e 2c   currently open,
19be0 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
19bf0 6e 20 69 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f  n is a no-op..*/
19c00 0a 63 61 73 65 20 4f 50 5f 43 6c 6f 73 65 3a 20  .case OP_Close: 
19c10 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  {.  assert( pOp-
19c20 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
19c30 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
19c40 20 20 73 71 6c 69 74 65 33 56 64 62 65 46 72 65    sqlite3VdbeFre
19c50 65 43 75 72 73 6f 72 28 70 2c 20 70 2d 3e 61 70  eCursor(p, p->ap
19c60 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 29 3b 0a 20  Csr[pOp->p1]);. 
19c70 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
19c80 31 5d 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b  1] = 0;.  break;
19c90 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .}../* Opcode: S
19ca0 65 65 6b 47 65 20 50 31 20 50 32 20 50 33 20 50  eekGe P1 P2 P3 P
19cb0 34 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72  4 *.**.** If cur
19cc0 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 74 6f  sor P1 refers to
19cd0 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42   an SQL table (B
19ce0 2d 54 72 65 65 20 74 68 61 74 20 75 73 65 73 20  -Tree that uses 
19cf0 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a  integer keys), .
19d00 2a 2a 20 75 73 65 20 74 68 65 20 76 61 6c 75 65  ** use the value
19d10 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20   in register P3 
19d20 61 73 20 74 68 65 20 6b 65 79 2e 20 20 49 66 20  as the key.  If 
19d30 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73  cursor P1 refers
19d40 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69   .** to an SQL i
19d50 6e 64 65 78 2c 20 74 68 65 6e 20 50 33 20 69 73  ndex, then P3 is
19d60 20 74 68 65 20 66 69 72 73 74 20 69 6e 20 61 6e   the first in an
19d70 20 61 72 72 61 79 20 6f 66 20 50 34 20 72 65 67   array of P4 reg
19d80 69 73 74 65 72 73 20 0a 2a 2a 20 74 68 61 74 20  isters .** that 
19d90 61 72 65 20 75 73 65 64 20 61 73 20 61 6e 20 75  are used as an u
19da0 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65  npacked index ke
19db0 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69  y. .**.** Reposi
19dc0 74 69 6f 6e 20 63 75 72 73 6f 72 20 50 31 20 73  tion cursor P1 s
19dd0 6f 20 74 68 61 74 20 20 69 74 20 70 6f 69 6e 74  o that  it point
19de0 73 20 74 6f 20 74 68 65 20 73 6d 61 6c 6c 65 73  s to the smalles
19df0 74 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a  t entry that .**
19e00 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e   is greater than
19e10 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65   or equal to the
19e20 20 6b 65 79 20 76 61 6c 75 65 2e 20 49 66 20 74   key value. If t
19e30 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f  here are no reco
19e40 72 64 73 20 0a 2a 2a 20 67 72 65 61 74 65 72 20  rds .** greater 
19e50 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f  than or equal to
19e60 20 74 68 65 20 6b 65 79 20 61 6e 64 20 50 32 20   the key and P2 
19e70 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65  is not zero, the
19e80 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a  n jump to P2..**
19e90 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f  .** See also: Fo
19ea0 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 44  und, NotFound, D
19eb0 69 73 74 69 6e 63 74 2c 20 53 65 65 6b 4c 74 2c  istinct, SeekLt,
19ec0 20 53 65 65 6b 47 74 2c 20 53 65 65 6b 4c 65 0a   SeekGt, SeekLe.
19ed0 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65  */./* Opcode: Se
19ee0 65 6b 47 74 20 50 31 20 50 32 20 50 33 20 50 34  ekGt P1 P2 P3 P4
19ef0 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73   *.**.** If curs
19f00 6f 72 20 50 31 20 72 65 66 65 72 73 20 74 6f 20  or P1 refers to 
19f10 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d  an SQL table (B-
19f20 54 72 65 65 20 74 68 61 74 20 75 73 65 73 20 69  Tree that uses i
19f30 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a  nteger keys), .*
19f40 2a 20 75 73 65 20 74 68 65 20 76 61 6c 75 65 20  * use the value 
19f50 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 61  in register P3 a
19f60 73 20 61 20 6b 65 79 2e 20 49 66 20 63 75 72 73  s a key. If curs
19f70 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a  or P1 refers .**
19f80 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78   to an SQL index
19f90 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74 68 65  , then P3 is the
19fa0 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72   first in an arr
19fb0 61 79 20 6f 66 20 50 34 20 72 65 67 69 73 74 65  ay of P4 registe
19fc0 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20  rs .** that are 
19fd0 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63  used as an unpac
19fe0 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a  ked index key. .
19ff0 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e  **.** Reposition
1a000 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68   cursor P1 so th
1a010 61 74 20 20 69 74 20 70 6f 69 6e 74 73 20 74 6f  at  it points to
1a020 20 74 68 65 20 73 6d 61 6c 6c 65 73 74 20 65 6e   the smallest en
1a030 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20  try that .** is 
1a040 67 72 65 61 74 65 72 20 74 68 61 6e 20 74 68 65  greater than the
1a050 20 6b 65 79 20 76 61 6c 75 65 2e 20 49 66 20 74   key value. If t
1a060 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f  here are no reco
1a070 72 64 73 20 67 72 65 61 74 65 72 20 74 68 61 6e  rds greater than
1a080 20 0a 2a 2a 20 74 68 65 20 6b 65 79 20 61 6e 64   .** the key and
1a090 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c   P2 is not zero,
1a0a0 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32   then jump to P2
1a0b0 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
1a0c0 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e  : Found, NotFoun
1a0d0 64 2c 20 44 69 73 74 69 6e 63 74 2c 20 53 65 65  d, Distinct, See
1a0e0 6b 4c 74 2c 20 53 65 65 6b 47 65 2c 20 53 65 65  kLt, SeekGe, See
1a0f0 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  kLe.*/./* Opcode
1a100 3a 20 53 65 65 6b 4c 74 20 50 31 20 50 32 20 50  : SeekLt P1 P2 P
1a110 33 20 50 34 20 2a 20 0a 2a 2a 0a 2a 2a 20 49 66  3 P4 * .**.** If
1a120 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72   cursor P1 refer
1a130 73 20 74 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c  s to an SQL tabl
1a140 65 20 28 42 2d 54 72 65 65 20 74 68 61 74 20 75  e (B-Tree that u
1a150 73 65 73 20 69 6e 74 65 67 65 72 20 6b 65 79 73  ses integer keys
1a160 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65 20 76  ), .** use the v
1a170 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
1a180 20 50 33 20 61 73 20 61 20 6b 65 79 2e 20 49 66   P3 as a key. If
1a190 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72   cursor P1 refer
1a1a0 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20  s .** to an SQL 
1a1b0 69 6e 64 65 78 2c 20 74 68 65 6e 20 50 33 20 69  index, then P3 i
1a1c0 73 20 74 68 65 20 66 69 72 73 74 20 69 6e 20 61  s the first in a
1a1d0 6e 20 61 72 72 61 79 20 6f 66 20 50 34 20 72 65  n array of P4 re
1a1e0 67 69 73 74 65 72 73 20 0a 2a 2a 20 74 68 61 74  gisters .** that
1a1f0 20 61 72 65 20 75 73 65 64 20 61 73 20 61 6e 20   are used as an 
1a200 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b  unpacked index k
1a210 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73  ey. .**.** Repos
1a220 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50 31 20  ition cursor P1 
1a230 73 6f 20 74 68 61 74 20 20 69 74 20 70 6f 69 6e  so that  it poin
1a240 74 73 20 74 6f 20 74 68 65 20 6c 61 72 67 65 73  ts to the larges
1a250 74 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a  t entry that .**
1a260 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68   is less than th
1a270 65 20 6b 65 79 20 76 61 6c 75 65 2e 20 49 66 20  e key value. If 
1a280 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63  there are no rec
1a290 6f 72 64 73 20 6c 65 73 73 20 74 68 61 6e 20 0a  ords less than .
1a2a0 2a 2a 20 74 68 65 20 6b 65 79 20 61 6e 64 20 50  ** the key and P
1a2b0 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74  2 is not zero, t
1a2c0 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a  hen jump to P2..
1a2d0 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
1a2e0 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c  Found, NotFound,
1a2f0 20 44 69 73 74 69 6e 63 74 2c 20 53 65 65 6b 47   Distinct, SeekG
1a300 74 2c 20 53 65 65 6b 47 65 2c 20 53 65 65 6b 4c  t, SeekGe, SeekL
1a310 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  e.*/./* Opcode: 
1a320 53 65 65 6b 4c 65 20 50 31 20 50 32 20 50 33 20  SeekLe P1 P2 P3 
1a330 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75  P4 *.**.** If cu
1a340 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 74  rsor P1 refers t
1a350 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28  o an SQL table (
1a360 42 2d 54 72 65 65 20 74 68 61 74 20 75 73 65 73  B-Tree that uses
1a370 20 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20   integer keys), 
1a380 0a 2a 2a 20 75 73 65 20 74 68 65 20 76 61 6c 75  .** use the valu
1a390 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  e in register P3
1a3a0 20 61 73 20 61 20 6b 65 79 2e 20 49 66 20 63 75   as a key. If cu
1a3b0 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a  rsor P1 refers .
1a3c0 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64  ** to an SQL ind
1a3d0 65 78 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74  ex, then P3 is t
1a3e0 68 65 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61  he first in an a
1a3f0 72 72 61 79 20 6f 66 20 50 34 20 72 65 67 69 73  rray of P4 regis
1a400 74 65 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72  ters .** that ar
1a410 65 20 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70  e used as an unp
1a420 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e  acked index key.
1a430 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69   .**.** Repositi
1a440 6f 6e 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20  on cursor P1 so 
1a450 74 68 61 74 20 69 74 20 70 6f 69 6e 74 73 20 74  that it points t
1a460 6f 20 74 68 65 20 6c 61 72 67 65 73 74 20 65 6e  o the largest en
1a470 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20  try that .** is 
1a480 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75  less than or equ
1a490 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 76 61  al to the key va
1a4a0 6c 75 65 2e 20 49 66 20 74 68 65 72 65 20 61 72  lue. If there ar
1a4b0 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 0a 2a 2a  e no records .**
1a4c0 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71   less than or eq
1a4d0 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 61  ual to the key a
1a4e0 6e 64 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72  nd P2 is not zer
1a4f0 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20  o, then jump to 
1a500 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  P2..**.** See al
1a510 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f  so: Found, NotFo
1a520 75 6e 64 2c 20 44 69 73 74 69 6e 63 74 2c 20 53  und, Distinct, S
1a530 65 65 6b 47 74 2c 20 53 65 65 6b 47 65 2c 20 53  eekGt, SeekGe, S
1a540 65 65 6b 4c 74 0a 2a 2f 0a 63 61 73 65 20 4f 50  eekLt.*/.case OP
1a550 5f 53 65 65 6b 4c 74 3a 20 20 20 20 20 20 20 20  _SeekLt:        
1a560 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f   /* jump, in3 */
1a570 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 4c 65 3a  .case OP_SeekLe:
1a580 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
1a590 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50  , in3 */.case OP
1a5a0 5f 53 65 65 6b 47 65 3a 20 20 20 20 20 20 20 20  _SeekGe:        
1a5b0 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f   /* jump, in3 */
1a5c0 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 47 74 3a  .case OP_SeekGt:
1a5d0 20 7b 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70   {       /* jump
1a5e0 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 72  , in3 */.  int r
1a5f0 65 73 3b 0a 20 20 69 6e 74 20 6f 63 3b 0a 20 20  es;.  int oc;.  
1a600 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
1a610 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64    UnpackedRecord
1a620 20 72 3b 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64   r;.  int nField
1a630 3b 0a 20 20 69 36 34 20 69 4b 65 79 3b 20 20 20  ;.  i64 iKey;   
1a640 20 20 20 2f 2a 20 54 68 65 20 72 6f 77 69 64 20     /* The rowid 
1a650 77 65 20 61 72 65 20 74 6f 20 73 65 65 6b 20 74  we are to seek t
1a660 6f 20 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20  o */..  assert( 
1a670 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
1a680 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
1a690 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
1a6a0 70 2d 3e 70 32 21 3d 30 20 29 3b 0a 20 20 70 43  p->p2!=0 );.  pC
1a6b0 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
1a6c0 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
1a6d0 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  pC!=0 );.  asser
1a6e0 74 28 20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62  t( pC->pseudoTab
1a6f0 6c 65 52 65 67 3d 3d 30 20 29 3b 0a 20 20 61 73  leReg==0 );.  as
1a700 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 4c 65 20  sert( OP_SeekLe 
1a710 3d 3d 20 4f 50 5f 53 65 65 6b 4c 74 2b 31 20 29  == OP_SeekLt+1 )
1a720 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53  ;.  assert( OP_S
1a730 65 65 6b 47 65 20 3d 3d 20 4f 50 5f 53 65 65 6b  eekGe == OP_Seek
1a740 4c 74 2b 32 20 29 3b 0a 20 20 61 73 73 65 72 74  Lt+2 );.  assert
1a750 28 20 4f 50 5f 53 65 65 6b 47 74 20 3d 3d 20 4f  ( OP_SeekGt == O
1a760 50 5f 53 65 65 6b 4c 74 2b 33 20 29 3b 0a 20 20  P_SeekLt+3 );.  
1a770 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 4f 72  assert( pC->isOr
1a780 64 65 72 65 64 20 29 3b 0a 20 20 69 66 28 20 70  dered );.  if( p
1a790 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20 29 7b  C->pCursor!=0 ){
1a7a0 0a 20 20 20 20 6f 63 20 3d 20 70 4f 70 2d 3e 6f  .    oc = pOp->o
1a7b0 70 63 6f 64 65 3b 0a 20 20 20 20 70 43 2d 3e 6e  pcode;.    pC->n
1a7c0 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20  ullRow = 0;.    
1a7d0 69 66 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20  if( pC->isTable 
1a7e0 29 7b 0a 20 20 20 20 20 20 2f 2a 20 54 68 65 20  ){.      /* The 
1a7f0 69 6e 70 75 74 20 76 61 6c 75 65 20 69 6e 20 50  input value in P
1a800 33 20 6d 69 67 68 74 20 62 65 20 6f 66 20 61 6e  3 might be of an
1a810 79 20 74 79 70 65 3a 20 69 6e 74 65 67 65 72 2c  y type: integer,
1a820 20 72 65 61 6c 2c 20 73 74 72 69 6e 67 2c 0a 20   real, string,. 
1a830 20 20 20 20 20 2a 2a 20 62 6c 6f 62 2c 20 6f 72       ** blob, or
1a840 20 4e 55 4c 4c 2e 20 20 42 75 74 20 69 74 20 6e   NULL.  But it n
1a850 65 65 64 73 20 74 6f 20 62 65 20 61 6e 20 69 6e  eeds to be an in
1a860 74 65 67 65 72 20 62 65 66 6f 72 65 20 77 65 20  teger before we 
1a870 63 61 6e 20 64 6f 0a 20 20 20 20 20 20 2a 2a 20  can do.      ** 
1a880 74 68 65 20 73 65 65 6b 2c 20 73 6f 20 63 6f 76  the seek, so cov
1a890 65 72 74 20 69 74 2e 20 2a 2f 0a 20 20 20 20 20  ert it. */.     
1a8a0 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn3 = &aMem[pO
1a8b0 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 20 20 61 70  p->p3];.      ap
1a8c0 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69  plyNumericAffini
1a8d0 74 79 28 70 49 6e 33 29 3b 0a 20 20 20 20 20 20  ty(pIn3);.      
1a8e0 69 4b 65 79 20 3d 20 73 71 6c 69 74 65 33 56 64  iKey = sqlite3Vd
1a8f0 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 33 29  beIntValue(pIn3)
1a900 3b 0a 20 20 20 20 20 20 70 43 2d 3e 72 6f 77 69  ;.      pC->rowi
1a910 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 0a 20  dIsValid = 0;.. 
1a920 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20 50       /* If the P
1a930 33 20 76 61 6c 75 65 20 63 6f 75 6c 64 20 6e 6f  3 value could no
1a940 74 20 62 65 20 63 6f 6e 76 65 72 74 65 64 20 69  t be converted i
1a950 6e 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 77  nto an integer w
1a960 69 74 68 6f 75 74 0a 20 20 20 20 20 20 2a 2a 20  ithout.      ** 
1a970 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72 6d 61 74  loss of informat
1a980 69 6f 6e 2c 20 74 68 65 6e 20 73 70 65 63 69 61  ion, then specia
1a990 6c 20 70 72 6f 63 65 73 73 69 6e 67 20 69 73 20  l processing is 
1a9a0 72 65 71 75 69 72 65 64 2e 2e 2e 20 2a 2f 0a 20  required... */. 
1a9b0 20 20 20 20 20 69 66 28 20 28 70 49 6e 33 2d 3e       if( (pIn3->
1a9c0 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29  flags & MEM_Int)
1a9d0 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 69  ==0 ){.        i
1a9e0 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20  f( (pIn3->flags 
1a9f0 26 20 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30 20 29  & MEM_Real)==0 )
1aa00 7b 0a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49  {.          /* I
1aa10 66 20 74 68 65 20 50 33 20 76 61 6c 75 65 20 63  f the P3 value c
1aa20 61 6e 6e 6f 74 20 62 65 20 63 6f 6e 76 65 72 74  annot be convert
1aa30 65 64 20 69 6e 74 6f 20 61 6e 79 20 6b 69 6e 64  ed into any kind
1aa40 20 6f 66 20 61 20 6e 75 6d 62 65 72 2c 0a 20 20   of a number,.  
1aa50 20 20 20 20 20 20 20 20 2a 2a 20 74 68 65 6e 20          ** then 
1aa60 74 68 65 20 73 65 65 6b 20 69 73 20 6e 6f 74 20  the seek is not 
1aa70 70 6f 73 73 69 62 6c 65 2c 20 73 6f 20 6a 75 6d  possible, so jum
1aa80 70 20 74 6f 20 50 32 20 2a 2f 0a 20 20 20 20 20  p to P2 */.     
1aa90 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70       pc = pOp->p
1aaa0 32 20 2d 20 31 3b 0a 20 20 20 20 20 20 20 20 20  2 - 1;.         
1aab0 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20   break;.        
1aac0 7d 0a 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20  }.        /* If 
1aad0 77 65 20 72 65 61 63 68 20 74 68 69 73 20 70 6f  we reach this po
1aae0 69 6e 74 2c 20 74 68 65 6e 20 74 68 65 20 50 33  int, then the P3
1aaf0 20 76 61 6c 75 65 20 6d 75 73 74 20 62 65 20 61   value must be a
1ab00 20 66 6c 6f 61 74 69 6e 67 0a 20 20 20 20 20 20   floating.      
1ab10 20 20 2a 2a 20 70 6f 69 6e 74 20 6e 75 6d 62 65    ** point numbe
1ab20 72 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 61 73  r. */.        as
1ab30 73 65 72 74 28 20 28 70 49 6e 33 2d 3e 66 6c 61  sert( (pIn3->fla
1ab40 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 29 21 3d  gs & MEM_Real)!=
1ab50 30 20 29 3b 0a 0a 20 20 20 20 20 20 20 20 69 66  0 );..        if
1ab60 28 20 69 4b 65 79 3d 3d 53 4d 41 4c 4c 45 53 54  ( iKey==SMALLEST
1ab70 5f 49 4e 54 36 34 20 26 26 20 28 70 49 6e 33 2d  _INT64 && (pIn3-
1ab80 3e 72 3c 28 64 6f 75 62 6c 65 29 69 4b 65 79 20  >r<(double)iKey 
1ab90 7c 7c 20 70 49 6e 33 2d 3e 72 3e 30 29 20 29 7b  || pIn3->r>0) ){
1aba0 0a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  .          /* Th
1abb0 65 20 50 33 20 76 61 6c 75 65 20 69 73 20 74 6f  e P3 value is to
1abc0 6f 20 6c 61 72 67 65 20 69 6e 20 6d 61 67 6e 69  o large in magni
1abd0 74 75 64 65 20 74 6f 20 62 65 20 65 78 70 72 65  tude to be expre
1abe0 73 73 65 64 20 61 73 20 61 6e 0a 20 20 20 20 20  ssed as an.     
1abf0 20 20 20 20 20 2a 2a 20 69 6e 74 65 67 65 72 2e       ** integer.
1ac00 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 72 65   */.          re
1ac10 73 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 20  s = 1;.         
1ac20 20 69 66 28 20 70 49 6e 33 2d 3e 72 3c 30 20 29   if( pIn3->r<0 )
1ac30 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  {.            if
1ac40 28 20 6f 63 3e 3d 4f 50 5f 53 65 65 6b 47 65 20  ( oc>=OP_SeekGe 
1ac50 29 7b 20 20 61 73 73 65 72 74 28 20 6f 63 3d 3d  ){  assert( oc==
1ac60 4f 50 5f 53 65 65 6b 47 65 20 7c 7c 20 6f 63 3d  OP_SeekGe || oc=
1ac70 3d 4f 50 5f 53 65 65 6b 47 74 20 29 3b 0a 20 20  =OP_SeekGt );.  
1ac80 20 20 20 20 20 20 20 20 20 20 20 20 72 63 20 3d              rc =
1ac90 20 73 71 6c 69 74 65 33 42 74 72 65 65 46 69 72   sqlite3BtreeFir
1aca0 73 74 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20  st(pC->pCursor, 
1acb0 26 72 65 73 29 3b 0a 20 20 20 20 20 20 20 20 20  &res);.         
1acc0 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c       if( rc!=SQL
1acd0 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62  ITE_OK ) goto ab
1ace0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
1acf0 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a  ;.            }.
1ad00 20 20 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b            }else{
1ad10 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 28  .            if(
1ad20 20 6f 63 3c 3d 4f 50 5f 53 65 65 6b 4c 65 20 29   oc<=OP_SeekLe )
1ad30 7b 20 20 61 73 73 65 72 74 28 20 6f 63 3d 3d 4f  {  assert( oc==O
1ad40 50 5f 53 65 65 6b 4c 74 20 7c 7c 20 6f 63 3d 3d  P_SeekLt || oc==
1ad50 4f 50 5f 53 65 65 6b 4c 65 20 29 3b 0a 20 20 20  OP_SeekLe );.   
1ad60 20 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20             rc = 
1ad70 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74  sqlite3BtreeLast
1ad80 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72  (pC->pCursor, &r
1ad90 65 73 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  es);.           
1ada0 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
1adb0 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72  E_OK ) goto abor
1adc0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
1add0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20              }.  
1ade0 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
1adf0 20 20 20 20 69 66 28 20 72 65 73 20 29 7b 0a 20      if( res ){. 
1ae00 20 20 20 20 20 20 20 20 20 20 20 70 63 20 3d 20             pc = 
1ae10 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20  pOp->p2 - 1;.   
1ae20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
1ae30 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
1ae40 20 20 7d 65 6c 73 65 20 69 66 28 20 6f 63 3d 3d    }else if( oc==
1ae50 4f 50 5f 53 65 65 6b 4c 74 20 7c 7c 20 6f 63 3d  OP_SeekLt || oc=
1ae60 3d 4f 50 5f 53 65 65 6b 47 65 20 29 7b 0a 20 20  =OP_SeekGe ){.  
1ae70 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 20 74          /* Use t
1ae80 68 65 20 63 65 69 6c 69 6e 67 28 29 20 66 75 6e  he ceiling() fun
1ae90 63 74 69 6f 6e 20 74 6f 20 63 6f 6e 76 65 72 74  ction to convert
1aea0 20 72 65 61 6c 2d 3e 69 6e 74 20 2a 2f 0a 20 20   real->int */.  
1aeb0 20 20 20 20 20 20 20 20 69 66 28 20 70 49 6e 33          if( pIn3
1aec0 2d 3e 72 20 3e 20 28 64 6f 75 62 6c 65 29 69 4b  ->r > (double)iK
1aed0 65 79 20 29 20 69 4b 65 79 2b 2b 3b 0a 20 20 20  ey ) iKey++;.   
1aee0 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
1aef0 20 20 20 20 20 20 2f 2a 20 55 73 65 20 74 68 65        /* Use the
1af00 20 66 6c 6f 6f 72 28 29 20 66 75 6e 63 74 69 6f   floor() functio
1af10 6e 20 74 6f 20 63 6f 6e 76 65 72 74 20 72 65 61  n to convert rea
1af20 6c 2d 3e 69 6e 74 20 2a 2f 0a 20 20 20 20 20 20  l->int */.      
1af30 20 20 20 20 61 73 73 65 72 74 28 20 6f 63 3d 3d      assert( oc==
1af40 4f 50 5f 53 65 65 6b 4c 65 20 7c 7c 20 6f 63 3d  OP_SeekLe || oc=
1af50 3d 4f 50 5f 53 65 65 6b 47 74 20 29 3b 0a 20 20  =OP_SeekGt );.  
1af60 20 20 20 20 20 20 20 20 69 66 28 20 70 49 6e 33          if( pIn3
1af70 2d 3e 72 20 3c 20 28 64 6f 75 62 6c 65 29 69 4b  ->r < (double)iK
1af80 65 79 20 29 20 69 4b 65 79 2d 2d 3b 0a 20 20 20  ey ) iKey--;.   
1af90 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 20 0a       }.      } .
1afa0 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
1afb0 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70  e3BtreeMovetoUnp
1afc0 61 63 6b 65 64 28 70 43 2d 3e 70 43 75 72 73 6f  acked(pC->pCurso
1afd0 72 2c 20 30 2c 20 28 75 36 34 29 69 4b 65 79 2c  r, 0, (u64)iKey,
1afe0 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20   0, &res);.     
1aff0 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
1b000 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 67 6f  OK ){.        go
1b010 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
1b020 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20  error;.      }. 
1b030 20 20 20 20 20 69 66 28 20 72 65 73 3d 3d 30 20       if( res==0 
1b040 29 7b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 72  ){.        pC->r
1b050 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 31 3b  owidIsValid = 1;
1b060 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 6c 61 73  .        pC->las
1b070 74 52 6f 77 69 64 20 3d 20 69 4b 65 79 3b 0a 20  tRowid = iKey;. 
1b080 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65       }.    }else
1b090 7b 0a 20 20 20 20 20 20 6e 46 69 65 6c 64 20 3d  {.      nField =
1b0a0 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 20 20   pOp->p4.i;.    
1b0b0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1b0c0 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20  4type==P4_INT32 
1b0d0 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
1b0e0 20 6e 46 69 65 6c 64 3e 30 20 29 3b 0a 20 20 20   nField>0 );.   
1b0f0 20 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20     r.pKeyInfo = 
1b100 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20  pC->pKeyInfo;.  
1b110 20 20 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28      r.nField = (
1b120 75 31 36 29 6e 46 69 65 6c 64 3b 0a 0a 20 20 20  u16)nField;..   
1b130 20 20 20 2f 2a 20 54 68 65 20 6e 65 78 74 20 6c     /* The next l
1b140 69 6e 65 20 6f 66 20 63 6f 64 65 20 63 6f 6d 70  ine of code comp
1b150 75 74 65 73 20 61 73 20 66 6f 6c 6c 6f 77 73 2c  utes as follows,
1b160 20 6f 6e 6c 79 20 66 61 73 74 65 72 3a 0a 20 20   only faster:.  
1b170 20 20 20 20 2a 2a 20 20 20 69 66 28 20 6f 63 3d      **   if( oc=
1b180 3d 4f 50 5f 53 65 65 6b 47 74 20 7c 7c 20 6f 63  =OP_SeekGt || oc
1b190 3d 3d 4f 50 5f 53 65 65 6b 4c 65 20 29 7b 0a 20  ==OP_SeekLe ){. 
1b1a0 20 20 20 20 20 2a 2a 20 20 20 20 20 72 2e 66 6c       **     r.fl
1b1b0 61 67 73 20 3d 20 55 4e 50 41 43 4b 45 44 5f 49  ags = UNPACKED_I
1b1c0 4e 43 52 4b 45 59 3b 0a 20 20 20 20 20 20 2a 2a  NCRKEY;.      **
1b1d0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
1b1e0 2a 2a 20 20 20 20 20 72 2e 66 6c 61 67 73 20 3d  **     r.flags =
1b1f0 20 30 3b 0a 20 20 20 20 20 20 2a 2a 20 20 20 7d   0;.      **   }
1b200 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20  .      */.      
1b210 72 2e 66 6c 61 67 73 20 3d 20 28 75 31 36 29 28  r.flags = (u16)(
1b220 55 4e 50 41 43 4b 45 44 5f 49 4e 43 52 4b 45 59  UNPACKED_INCRKEY
1b230 20 2a 20 28 31 20 26 20 28 6f 63 20 2d 20 4f 50   * (1 & (oc - OP
1b240 5f 53 65 65 6b 4c 74 29 29 29 3b 0a 20 20 20 20  _SeekLt)));.    
1b250 20 20 61 73 73 65 72 74 28 20 6f 63 21 3d 4f 50    assert( oc!=OP
1b260 5f 53 65 65 6b 47 74 20 7c 7c 20 72 2e 66 6c 61  _SeekGt || r.fla
1b270 67 73 3d 3d 55 4e 50 41 43 4b 45 44 5f 49 4e 43  gs==UNPACKED_INC
1b280 52 4b 45 59 20 29 3b 0a 20 20 20 20 20 20 61 73  RKEY );.      as
1b290 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65  sert( oc!=OP_See
1b2a0 6b 4c 65 20 7c 7c 20 72 2e 66 6c 61 67 73 3d 3d  kLe || r.flags==
1b2b0 55 4e 50 41 43 4b 45 44 5f 49 4e 43 52 4b 45 59  UNPACKED_INCRKEY
1b2c0 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
1b2d0 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 47 65 20  ( oc!=OP_SeekGe 
1b2e0 7c 7c 20 72 2e 66 6c 61 67 73 3d 3d 30 20 29 3b  || r.flags==0 );
1b2f0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6f  .      assert( o
1b300 63 21 3d 4f 50 5f 53 65 65 6b 4c 74 20 7c 7c 20  c!=OP_SeekLt || 
1b310 72 2e 66 6c 61 67 73 3d 3d 30 20 29 3b 0a 0a 20  r.flags==0 );.. 
1b320 20 20 20 20 20 72 2e 61 4d 65 6d 20 3d 20 26 61       r.aMem = &a
1b330 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 23 69  Mem[pOp->p3];.#i
1b340 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
1b350 47 0a 20 20 20 20 20 20 7b 20 69 6e 74 20 69 3b  G.      { int i;
1b360 20 66 6f 72 28 69 3d 30 3b 20 69 3c 72 2e 6e 46   for(i=0; i<r.nF
1b370 69 65 6c 64 3b 20 69 2b 2b 29 20 61 73 73 65 72  ield; i++) asser
1b380 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 72  t( memIsValid(&r
1b390 2e 61 4d 65 6d 5b 69 5d 29 20 29 3b 20 7d 0a 23  .aMem[i]) ); }.#
1b3a0 65 6e 64 69 66 0a 20 20 20 20 20 20 45 78 70 61  endif.      Expa
1b3b0 6e 64 42 6c 6f 62 28 72 2e 61 4d 65 6d 29 3b 0a  ndBlob(r.aMem);.
1b3c0 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
1b3d0 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70  e3BtreeMovetoUnp
1b3e0 61 63 6b 65 64 28 70 43 2d 3e 70 43 75 72 73 6f  acked(pC->pCurso
1b3f0 72 2c 20 26 72 2c 20 30 2c 20 30 2c 20 26 72 65  r, &r, 0, 0, &re
1b400 73 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63  s);.      if( rc
1b410 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
1b420 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72         goto abor
1b430 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
1b440 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 70 43        }.      pC
1b450 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d  ->rowidIsValid =
1b460 20 30 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 43   0;.    }.    pC
1b470 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
1b480 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e 63 61   = 0;.    pC->ca
1b490 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
1b4a0 45 5f 53 54 41 4c 45 3b 0a 23 69 66 64 65 66 20  E_STALE;.#ifdef 
1b4b0 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 20 20  SQLITE_TEST.    
1b4c0 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f 63  sqlite3_search_c
1b4d0 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a 20  ount++;.#endif. 
1b4e0 20 20 20 69 66 28 20 6f 63 3e 3d 4f 50 5f 53 65     if( oc>=OP_Se
1b4f0 65 6b 47 65 20 29 7b 20 20 61 73 73 65 72 74 28  ekGe ){  assert(
1b500 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 65 20 7c   oc==OP_SeekGe |
1b510 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 74 20  | oc==OP_SeekGt 
1b520 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 65 73  );.      if( res
1b530 3c 30 20 7c 7c 20 28 72 65 73 3d 3d 30 20 26 26  <0 || (res==0 &&
1b540 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 74 29 20   oc==OP_SeekGt) 
1b550 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  ){.        rc = 
1b560 73 71 6c 69 74 65 33 42 74 72 65 65 4e 65 78 74  sqlite3BtreeNext
1b570 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72  (pC->pCursor, &r
1b580 65 73 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28  es);.        if(
1b590 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
1b5a0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
1b5b0 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20  to_error;.      
1b5c0 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c    pC->rowidIsVal
1b5d0 69 64 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 65  id = 0;.      }e
1b5e0 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 72 65 73  lse{.        res
1b5f0 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20   = 0;.      }.  
1b600 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 61    }else{.      a
1b610 73 73 65 72 74 28 20 6f 63 3d 3d 4f 50 5f 53 65  ssert( oc==OP_Se
1b620 65 6b 4c 74 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53  ekLt || oc==OP_S
1b630 65 65 6b 4c 65 20 29 3b 0a 20 20 20 20 20 20 69  eekLe );.      i
1b640 66 28 20 72 65 73 3e 30 20 7c 7c 20 28 72 65 73  f( res>0 || (res
1b650 3d 3d 30 20 26 26 20 6f 63 3d 3d 4f 50 5f 53 65  ==0 && oc==OP_Se
1b660 65 6b 4c 74 29 20 29 7b 0a 20 20 20 20 20 20 20  ekLt) ){.       
1b670 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
1b680 65 65 50 72 65 76 69 6f 75 73 28 70 43 2d 3e 70  eePrevious(pC->p
1b690 43 75 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20  Cursor, &res);. 
1b6a0 20 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53         if( rc!=S
1b6b0 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20  QLITE_OK ) goto 
1b6c0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
1b6d0 6f 72 3b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e  or;.        pC->
1b6e0 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30  rowidIsValid = 0
1b6f0 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
1b700 20 20 20 20 20 20 20 2f 2a 20 72 65 73 20 6d 69         /* res mi
1b710 67 68 74 20 62 65 20 6e 65 67 61 74 69 76 65 20  ght be negative 
1b720 62 65 63 61 75 73 65 20 74 68 65 20 74 61 62 6c  because the tabl
1b730 65 20 69 73 20 65 6d 70 74 79 2e 20 20 43 68 65  e is empty.  Che
1b740 63 6b 20 74 6f 0a 20 20 20 20 20 20 20 20 2a 2a  ck to.        **
1b750 20 73 65 65 20 69 66 20 74 68 69 73 20 69 73 20   see if this is 
1b760 74 68 65 20 63 61 73 65 2e 0a 20 20 20 20 20 20  the case..      
1b770 20 20 2a 2f 0a 20 20 20 20 20 20 20 20 72 65 73    */.        res
1b780 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 45   = sqlite3BtreeE
1b790 6f 66 28 70 43 2d 3e 70 43 75 72 73 6f 72 29 3b  of(pC->pCursor);
1b7a0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
1b7b0 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
1b7c0 70 32 3e 30 20 29 3b 0a 20 20 20 20 69 66 28 20  p2>0 );.    if( 
1b7d0 72 65 73 20 29 7b 0a 20 20 20 20 20 20 70 63 20  res ){.      pc 
1b7e0 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
1b7f0 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20     }.  }else{.  
1b800 20 20 2f 2a 20 54 68 69 73 20 68 61 70 70 65 6e    /* This happen
1b810 73 20 77 68 65 6e 20 61 74 74 65 6d 70 74 69 6e  s when attemptin
1b820 67 20 74 6f 20 6f 70 65 6e 20 74 68 65 20 73 71  g to open the sq
1b830 6c 69 74 65 33 5f 6d 61 73 74 65 72 20 74 61 62  lite3_master tab
1b840 6c 65 0a 20 20 20 20 2a 2a 20 66 6f 72 20 72 65  le.    ** for re
1b850 61 64 20 61 63 63 65 73 73 20 72 65 74 75 72 6e  ad access return
1b860 73 20 53 51 4c 49 54 45 5f 45 4d 50 54 59 2e 20  s SQLITE_EMPTY. 
1b870 49 6e 20 74 68 69 73 20 63 61 73 65 20 61 6c 77  In this case alw
1b880 61 79 73 0a 20 20 20 20 2a 2a 20 74 61 6b 65 20  ays.    ** take 
1b890 74 68 65 20 6a 75 6d 70 20 28 73 69 6e 63 65 20  the jump (since 
1b8a0 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63  there are no rec
1b8b0 6f 72 64 73 20 69 6e 20 74 68 65 20 74 61 62 6c  ords in the tabl
1b8c0 65 29 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 70  e)..    */.    p
1b8d0 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
1b8e0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
1b8f0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b  ./* Opcode: Seek
1b900 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
1b910 2a 2a 20 50 31 20 69 73 20 61 6e 20 6f 70 65 6e  ** P1 is an open
1b920 20 74 61 62 6c 65 20 63 75 72 73 6f 72 20 61 6e   table cursor an
1b930 64 20 50 32 20 69 73 20 61 20 72 6f 77 69 64 20  d P2 is a rowid 
1b940 69 6e 74 65 67 65 72 2e 20 20 41 72 72 61 6e 67  integer.  Arrang
1b950 65 0a 2a 2a 20 66 6f 72 20 50 31 20 74 6f 20 6d  e.** for P1 to m
1b960 6f 76 65 20 73 6f 20 74 68 61 74 20 69 74 20 70  ove so that it p
1b970 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 72 6f 77  oints to the row
1b980 69 64 20 67 69 76 65 6e 20 62 79 20 50 32 2e 0a  id given by P2..
1b990 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20 61 63  **.** This is ac
1b9a0 74 75 61 6c 6c 79 20 61 20 64 65 66 65 72 72 65  tually a deferre
1b9b0 64 20 73 65 65 6b 2e 20 20 4e 6f 74 68 69 6e 67  d seek.  Nothing
1b9c0 20 61 63 74 75 61 6c 6c 79 20 68 61 70 70 65 6e   actually happen
1b9d0 73 20 75 6e 74 69 6c 0a 2a 2a 20 74 68 65 20 63  s until.** the c
1b9e0 75 72 73 6f 72 20 69 73 20 75 73 65 64 20 74 6f  ursor is used to
1b9f0 20 72 65 61 64 20 61 20 72 65 63 6f 72 64 2e 20   read a record. 
1ba00 20 54 68 61 74 20 77 61 79 2c 20 69 66 20 6e 6f   That way, if no
1ba10 20 72 65 61 64 73 0a 2a 2a 20 6f 63 63 75 72 2c   reads.** occur,
1ba20 20 6e 6f 20 75 6e 6e 65 63 65 73 73 61 72 79 20   no unnecessary 
1ba30 49 2f 4f 20 68 61 70 70 65 6e 73 2e 0a 2a 2f 0a  I/O happens..*/.
1ba40 63 61 73 65 20 4f 50 5f 53 65 65 6b 3a 20 7b 20  case OP_Seek: { 
1ba50 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20 56     /* in2 */.  V
1ba60 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a  dbeCursor *pC;..
1ba70 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1ba80 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
1ba90 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
1baa0 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
1bab0 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
1bac0 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 69 66 28  ( pC!=0 );.  if(
1bad0 20 41 4c 57 41 59 53 28 70 43 2d 3e 70 43 75 72   ALWAYS(pC->pCur
1bae0 73 6f 72 21 3d 30 29 20 29 7b 0a 20 20 20 20 61  sor!=0) ){.    a
1baf0 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62  ssert( pC->isTab
1bb00 6c 65 20 29 3b 0a 20 20 20 20 70 43 2d 3e 6e 75  le );.    pC->nu
1bb10 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20 70  llRow = 0;.    p
1bb20 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In2 = &aMem[pOp-
1bb30 3e 70 32 5d 3b 0a 20 20 20 20 70 43 2d 3e 6d 6f  >p2];.    pC->mo
1bb40 76 65 74 6f 54 61 72 67 65 74 20 3d 20 73 71 6c  vetoTarget = sql
1bb50 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65  ite3VdbeIntValue
1bb60 28 70 49 6e 32 29 3b 0a 20 20 20 20 70 43 2d 3e  (pIn2);.    pC->
1bb70 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30  rowidIsValid = 0
1bb80 3b 0a 20 20 20 20 70 43 2d 3e 64 65 66 65 72 72  ;.    pC->deferr
1bb90 65 64 4d 6f 76 65 74 6f 20 3d 20 31 3b 0a 20 20  edMoveto = 1;.  
1bba0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 20 20 0a  }.  break;.}.  .
1bbb0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 6f 75 6e  ./* Opcode: Foun
1bbc0 64 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a  d P1 P2 P3 P4 *.
1bbd0 2a 2a 0a 2a 2a 20 49 66 20 50 34 3d 3d 30 20 74  **.** If P4==0 t
1bbe0 68 65 6e 20 72 65 67 69 73 74 65 72 20 50 33 20  hen register P3 
1bbf0 68 6f 6c 64 73 20 61 20 62 6c 6f 62 20 63 6f 6e  holds a blob con
1bc00 73 74 72 75 63 74 65 64 20 62 79 20 4d 61 6b 65  structed by Make
1bc10 52 65 63 6f 72 64 2e 20 20 49 66 0a 2a 2a 20 50  Record.  If.** P
1bc20 34 3e 30 20 74 68 65 6e 20 72 65 67 69 73 74 65  4>0 then registe
1bc30 72 20 50 33 20 69 73 20 74 68 65 20 66 69 72 73  r P3 is the firs
1bc40 74 20 6f 66 20 50 34 20 72 65 67 69 73 74 65 72  t of P4 register
1bc50 73 20 74 68 61 74 20 66 6f 72 6d 20 61 6e 20 75  s that form an u
1bc60 6e 70 61 63 6b 65 64 0a 2a 2a 20 72 65 63 6f 72  npacked.** recor
1bc70 64 2e 0a 2a 2a 0a 2a 2a 20 43 75 72 73 6f 72 20  d..**.** Cursor 
1bc80 50 31 20 69 73 20 6f 6e 20 61 6e 20 69 6e 64 65  P1 is on an inde
1bc90 78 20 62 74 72 65 65 2e 20 20 49 66 20 74 68 65  x btree.  If the
1bca0 20 72 65 63 6f 72 64 20 69 64 65 6e 74 69 66 69   record identifi
1bcb0 65 64 20 62 79 20 50 33 20 61 6e 64 20 50 34 0a  ed by P3 and P4.
1bcc0 2a 2a 20 69 73 20 61 20 70 72 65 66 69 78 20 6f  ** is a prefix o
1bcd0 66 20 61 6e 79 20 65 6e 74 72 79 20 69 6e 20 50  f any entry in P
1bce0 31 20 74 68 65 6e 20 61 20 6a 75 6d 70 20 69 73  1 then a jump is
1bcf0 20 6d 61 64 65 20 74 6f 20 50 32 20 61 6e 64 0a   made to P2 and.
1bd00 2a 2a 20 50 31 20 69 73 20 6c 65 66 74 20 70 6f  ** P1 is left po
1bd10 69 6e 74 69 6e 67 20 61 74 20 74 68 65 20 6d 61  inting at the ma
1bd20 74 63 68 69 6e 67 20 65 6e 74 72 79 2e 0a 2a 2f  tching entry..*/
1bd30 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 46  ./* Opcode: NotF
1bd40 6f 75 6e 64 20 50 31 20 50 32 20 50 33 20 50 34  ound P1 P2 P3 P4
1bd50 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 3d 3d   *.**.** If P4==
1bd60 30 20 74 68 65 6e 20 72 65 67 69 73 74 65 72 20  0 then register 
1bd70 50 33 20 68 6f 6c 64 73 20 61 20 62 6c 6f 62 20  P3 holds a blob 
1bd80 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79 20 4d  constructed by M
1bd90 61 6b 65 52 65 63 6f 72 64 2e 20 20 49 66 0a 2a  akeRecord.  If.*
1bda0 2a 20 50 34 3e 30 20 74 68 65 6e 20 72 65 67 69  * P4>0 then regi
1bdb0 73 74 65 72 20 50 33 20 69 73 20 74 68 65 20 66  ster P3 is the f
1bdc0 69 72 73 74 20 6f 66 20 50 34 20 72 65 67 69 73  irst of P4 regis
1bdd0 74 65 72 73 20 74 68 61 74 20 66 6f 72 6d 20 61  ters that form a
1bde0 6e 20 75 6e 70 61 63 6b 65 64 0a 2a 2a 20 72 65  n unpacked.** re
1bdf0 63 6f 72 64 2e 0a 2a 2a 20 0a 2a 2a 20 43 75 72  cord..** .** Cur
1be00 73 6f 72 20 50 31 20 69 73 20 6f 6e 20 61 6e 20  sor P1 is on an 
1be10 69 6e 64 65 78 20 62 74 72 65 65 2e 20 20 49 66  index btree.  If
1be20 20 74 68 65 20 72 65 63 6f 72 64 20 69 64 65 6e   the record iden
1be30 74 69 66 69 65 64 20 62 79 20 50 33 20 61 6e 64  tified by P3 and
1be40 20 50 34 0a 2a 2a 20 69 73 20 6e 6f 74 20 74 68   P4.** is not th
1be50 65 20 70 72 65 66 69 78 20 6f 66 20 61 6e 79 20  e prefix of any 
1be60 65 6e 74 72 79 20 69 6e 20 50 31 20 74 68 65 6e  entry in P1 then
1be70 20 61 20 6a 75 6d 70 20 69 73 20 6d 61 64 65 20   a jump is made 
1be80 74 6f 20 50 32 2e 20 20 49 66 20 50 31 20 0a 2a  to P2.  If P1 .*
1be90 2a 20 64 6f 65 73 20 63 6f 6e 74 61 69 6e 20 61  * does contain a
1bea0 6e 20 65 6e 74 72 79 20 77 68 6f 73 65 20 70 72  n entry whose pr
1beb0 65 66 69 78 20 6d 61 74 63 68 65 73 20 74 68 65  efix matches the
1bec0 20 50 33 2f 50 34 20 72 65 63 6f 72 64 20 74 68   P3/P4 record th
1bed0 65 6e 20 63 6f 6e 74 72 6f 6c 0a 2a 2a 20 66 61  en control.** fa
1bee0 6c 6c 73 20 74 68 72 6f 75 67 68 20 74 6f 20 74  lls through to t
1bef0 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74  he next instruct
1bf00 69 6f 6e 20 61 6e 64 20 50 31 20 69 73 20 6c 65  ion and P1 is le
1bf10 66 74 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74  ft pointing at t
1bf20 68 65 0a 2a 2a 20 6d 61 74 63 68 69 6e 67 20 65  he.** matching e
1bf30 6e 74 72 79 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  ntry..**.** See 
1bf40 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74  also: Found, Not
1bf50 45 78 69 73 74 73 2c 20 49 73 55 6e 69 71 75 65  Exists, IsUnique
1bf60 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 46  .*/.case OP_NotF
1bf70 6f 75 6e 64 3a 20 20 20 20 20 20 20 2f 2a 20 6a  ound:       /* j
1bf80 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65  ump, in3 */.case
1bf90 20 4f 50 5f 46 6f 75 6e 64 3a 20 7b 20 20 20 20   OP_Found: {    
1bfa0 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33      /* jump, in3
1bfb0 20 2a 2f 0a 20 20 69 6e 74 20 61 6c 72 65 61 64   */.  int alread
1bfc0 79 45 78 69 73 74 73 3b 0a 20 20 56 64 62 65 43  yExists;.  VdbeC
1bfd0 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e 74  ursor *pC;.  int
1bfe0 20 72 65 73 3b 0a 20 20 55 6e 70 61 63 6b 65 64   res;.  Unpacked
1bff0 52 65 63 6f 72 64 20 2a 70 49 64 78 4b 65 79 3b  Record *pIdxKey;
1c000 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72  .  UnpackedRecor
1c010 64 20 72 3b 0a 20 20 63 68 61 72 20 61 54 65 6d  d r;.  char aTem
1c020 70 52 65 63 5b 52 4f 55 4e 44 38 28 73 69 7a 65  pRec[ROUND8(size
1c030 6f 66 28 55 6e 70 61 63 6b 65 64 52 65 63 6f 72  of(UnpackedRecor
1c040 64 29 29 20 2b 20 73 69 7a 65 6f 66 28 4d 65 6d  d)) + sizeof(Mem
1c050 29 2a 33 20 2b 20 37 5d 3b 0a 0a 23 69 66 64 65  )*3 + 7];..#ifde
1c060 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20  f SQLITE_TEST.  
1c070 73 71 6c 69 74 65 33 5f 66 6f 75 6e 64 5f 63 6f  sqlite3_found_co
1c080 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a 0a 20  unt++;.#endif.. 
1c090 20 61 6c 72 65 61 64 79 45 78 69 73 74 73 20 3d   alreadyExists =
1c0a0 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   0;.  assert( pO
1c0b0 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
1c0c0 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
1c0d0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
1c0e0 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33  >p4type==P4_INT3
1c0f0 32 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  2 );.  pC = p->a
1c100 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
1c110 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
1c120 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d  ;.  pIn3 = &aMem
1c130 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28  [pOp->p3];.  if(
1c140 20 41 4c 57 41 59 53 28 70 43 2d 3e 70 43 75 72   ALWAYS(pC->pCur
1c150 73 6f 72 21 3d 30 29 20 29 7b 0a 0a 20 20 20 20  sor!=0) ){..    
1c160 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61  assert( pC->isTa
1c170 62 6c 65 3d 3d 30 20 29 3b 0a 20 20 20 20 69 66  ble==0 );.    if
1c180 28 20 70 4f 70 2d 3e 70 34 2e 69 3e 30 20 29 7b  ( pOp->p4.i>0 ){
1c190 0a 20 20 20 20 20 20 72 2e 70 4b 65 79 49 6e 66  .      r.pKeyInf
1c1a0 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f  o = pC->pKeyInfo
1c1b0 3b 0a 20 20 20 20 20 20 72 2e 6e 46 69 65 6c 64  ;.      r.nField
1c1c0 20 3d 20 28 75 31 36 29 70 4f 70 2d 3e 70 34 2e   = (u16)pOp->p4.
1c1d0 69 3b 0a 20 20 20 20 20 20 72 2e 61 4d 65 6d 20  i;.      r.aMem 
1c1e0 3d 20 70 49 6e 33 3b 0a 23 69 66 64 65 66 20 53  = pIn3;.#ifdef S
1c1f0 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20  QLITE_DEBUG.    
1c200 20 20 7b 20 69 6e 74 20 69 3b 20 66 6f 72 28 69    { int i; for(i
1c210 3d 30 3b 20 69 3c 72 2e 6e 46 69 65 6c 64 3b 20  =0; i<r.nField; 
1c220 69 2b 2b 29 20 61 73 73 65 72 74 28 20 6d 65 6d  i++) assert( mem
1c230 49 73 56 61 6c 69 64 28 26 72 2e 61 4d 65 6d 5b  IsValid(&r.aMem[
1c240 69 5d 29 20 29 3b 20 7d 0a 23 65 6e 64 69 66 0a  i]) ); }.#endif.
1c250 20 20 20 20 20 20 72 2e 66 6c 61 67 73 20 3d 20        r.flags = 
1c260 55 4e 50 41 43 4b 45 44 5f 50 52 45 46 49 58 5f  UNPACKED_PREFIX_
1c270 4d 41 54 43 48 3b 0a 20 20 20 20 20 20 70 49 64  MATCH;.      pId
1c280 78 4b 65 79 20 3d 20 26 72 3b 0a 20 20 20 20 7d  xKey = &r;.    }
1c290 65 6c 73 65 7b 0a 20 20 20 20 20 20 61 73 73 65  else{.      asse
1c2a0 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20  rt( pIn3->flags 
1c2b0 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20  & MEM_Blob );.  
1c2c0 20 20 20 20 61 73 73 65 72 74 28 20 28 70 49 6e      assert( (pIn
1c2d0 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a  3->flags & MEM_Z
1c2e0 65 72 6f 29 3d 3d 30 20 29 3b 20 20 2f 2a 20 7a  ero)==0 );  /* z
1c2f0 65 72 6f 62 6c 6f 62 73 20 61 6c 72 65 61 64 79  eroblobs already
1c300 20 65 78 70 61 6e 64 65 64 20 2a 2f 0a 20 20 20   expanded */.   
1c310 20 20 20 70 49 64 78 4b 65 79 20 3d 20 73 71 6c     pIdxKey = sql
1c320 69 74 65 33 56 64 62 65 52 65 63 6f 72 64 55 6e  ite3VdbeRecordUn
1c330 70 61 63 6b 28 70 43 2d 3e 70 4b 65 79 49 6e 66  pack(pC->pKeyInf
1c340 6f 2c 20 70 49 6e 33 2d 3e 6e 2c 20 70 49 6e 33  o, pIn3->n, pIn3
1c350 2d 3e 7a 2c 0a 20 20 20 20 20 20 20 20 20 20 20  ->z,.           
1c360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c370 20 20 20 20 20 20 20 20 20 20 20 20 20 61 54 65               aTe
1c380 6d 70 52 65 63 2c 20 73 69 7a 65 6f 66 28 61 54  mpRec, sizeof(aT
1c390 65 6d 70 52 65 63 29 29 3b 0a 20 20 20 20 20 20  empRec));.      
1c3a0 69 66 28 20 70 49 64 78 4b 65 79 3d 3d 30 20 29  if( pIdxKey==0 )
1c3b0 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6e  {.        goto n
1c3c0 6f 5f 6d 65 6d 3b 0a 20 20 20 20 20 20 7d 0a 20  o_mem;.      }. 
1c3d0 20 20 20 20 20 70 49 64 78 4b 65 79 2d 3e 66 6c       pIdxKey->fl
1c3e0 61 67 73 20 7c 3d 20 55 4e 50 41 43 4b 45 44 5f  ags |= UNPACKED_
1c3f0 50 52 45 46 49 58 5f 4d 41 54 43 48 3b 0a 20 20  PREFIX_MATCH;.  
1c400 20 20 7d 0a 20 20 20 20 72 63 20 3d 20 73 71 6c    }.    rc = sql
1c410 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55  ite3BtreeMovetoU
1c420 6e 70 61 63 6b 65 64 28 70 43 2d 3e 70 43 75 72  npacked(pC->pCur
1c430 73 6f 72 2c 20 70 49 64 78 4b 65 79 2c 20 30 2c  sor, pIdxKey, 0,
1c440 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 69   0, &res);.    i
1c450 66 28 20 70 4f 70 2d 3e 70 34 2e 69 3d 3d 30 20  f( pOp->p4.i==0 
1c460 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
1c470 56 64 62 65 44 65 6c 65 74 65 55 6e 70 61 63 6b  VdbeDeleteUnpack
1c480 65 64 52 65 63 6f 72 64 28 70 49 64 78 4b 65 79  edRecord(pIdxKey
1c490 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  );.    }.    if(
1c4a0 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
1c4b0 7b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  {.      break;. 
1c4c0 20 20 20 7d 0a 20 20 20 20 61 6c 72 65 61 64 79     }.    already
1c4d0 45 78 69 73 74 73 20 3d 20 28 72 65 73 3d 3d 30  Exists = (res==0
1c4e0 29 3b 0a 20 20 20 20 70 43 2d 3e 64 65 66 65 72  );.    pC->defer
1c4f0 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20  redMoveto = 0;. 
1c500 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74     pC->cacheStat
1c510 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45  us = CACHE_STALE
1c520 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d  ;.  }.  if( pOp-
1c530 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 46 6f 75 6e  >opcode==OP_Foun
1c540 64 20 29 7b 0a 20 20 20 20 69 66 28 20 61 6c 72  d ){.    if( alr
1c550 65 61 64 79 45 78 69 73 74 73 20 29 20 70 63 20  eadyExists ) pc 
1c560 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
1c570 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69 66 28 20   }else{.    if( 
1c580 21 61 6c 72 65 61 64 79 45 78 69 73 74 73 20 29  !alreadyExists )
1c590 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
1c5a0 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  1;.  }.  break;.
1c5b0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 73  }../* Opcode: Is
1c5c0 55 6e 69 71 75 65 20 50 31 20 50 32 20 50 33 20  Unique P1 P2 P3 
1c5d0 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 43 75 72 73 6f  P4 *.**.** Curso
1c5e0 72 20 50 31 20 69 73 20 6f 70 65 6e 20 6f 6e 20  r P1 is open on 
1c5f0 61 6e 20 69 6e 64 65 78 20 62 2d 74 72 65 65 20  an index b-tree 
1c600 2d 20 74 68 61 74 20 69 73 20 74 6f 20 73 61 79  - that is to say
1c610 2c 20 61 20 62 74 72 65 65 20 77 68 69 63 68 0a  , a btree which.
1c620 2a 2a 20 6e 6f 20 64 61 74 61 20 61 6e 64 20 77  ** no data and w
1c630 68 65 72 65 20 74 68 65 20 6b 65 79 20 61 72 65  here the key are
1c640 20 72 65 63 6f 72 64 73 20 67 65 6e 65 72 61 74   records generat
1c650 65 64 20 62 79 20 4f 50 5f 4d 61 6b 65 52 65 63  ed by OP_MakeRec
1c660 6f 72 64 20 77 69 74 68 0a 2a 2a 20 74 68 65 20  ord with.** the 
1c670 6c 69 73 74 20 66 69 65 6c 64 20 62 65 69 6e 67  list field being
1c680 20 74 68 65 20 69 6e 74 65 67 65 72 20 52 4f 57   the integer ROW
1c690 49 44 20 6f 66 20 74 68 65 20 65 6e 74 72 79 20  ID of the entry 
1c6a0 74 68 61 74 20 74 68 65 20 69 6e 64 65 78 0a 2a  that the index.*
1c6b0 2a 20 65 6e 74 72 79 20 72 65 66 65 72 73 20 74  * entry refers t
1c6c0 6f 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 33 20  o..**.** The P3 
1c6d0 72 65 67 69 73 74 65 72 20 63 6f 6e 74 61 69 6e  register contain
1c6e0 73 20 61 6e 20 69 6e 74 65 67 65 72 20 72 65 63  s an integer rec
1c6f0 6f 72 64 20 6e 75 6d 62 65 72 2e 20 43 61 6c 6c  ord number. Call
1c700 20 74 68 69 73 20 72 65 63 6f 72 64 20 0a 2a 2a   this record .**
1c710 20 6e 75 6d 62 65 72 20 52 2e 20 52 65 67 69 73   number R. Regis
1c720 74 65 72 20 50 34 20 69 73 20 74 68 65 20 66 69  ter P4 is the fi
1c730 72 73 74 20 69 6e 20 61 20 73 65 74 20 6f 66 20  rst in a set of 
1c740 4e 20 63 6f 6e 74 69 67 75 6f 75 73 20 72 65 67  N contiguous reg
1c750 69 73 74 65 72 73 0a 2a 2a 20 74 68 61 74 20 6d  isters.** that m
1c760 61 6b 65 20 75 70 20 61 6e 20 75 6e 70 61 63 6b  ake up an unpack
1c770 65 64 20 69 6e 64 65 78 20 6b 65 79 20 74 68 61  ed index key tha
1c780 74 20 63 61 6e 20 62 65 20 75 73 65 64 20 77 69  t can be used wi
1c790 74 68 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a  th cursor P1..**
1c7a0 20 54 68 65 20 76 61 6c 75 65 20 6f 66 20 4e 20   The value of N 
1c7b0 63 61 6e 20 62 65 20 69 6e 66 65 72 72 65 64 20  can be inferred 
1c7c0 66 72 6f 6d 20 74 68 65 20 63 75 72 73 6f 72 2e  from the cursor.
1c7d0 20 4e 20 69 6e 63 6c 75 64 65 73 20 74 68 65 20   N includes the 
1c7e0 72 6f 77 69 64 0a 2a 2a 20 76 61 6c 75 65 20 61  rowid.** value a
1c7f0 70 70 65 6e 64 65 64 20 74 6f 20 74 68 65 20 65  ppended to the e
1c800 6e 64 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20  nd of the index 
1c810 72 65 63 6f 72 64 2e 20 54 68 69 73 20 72 6f 77  record. This row
1c820 69 64 20 76 61 6c 75 65 20 6d 61 79 0a 2a 2a 20  id value may.** 
1c830 6f 72 20 6d 61 79 20 6e 6f 74 20 62 65 20 74 68  or may not be th
1c840 65 20 73 61 6d 65 20 61 73 20 52 2e 0a 2a 2a 0a  e same as R..**.
1c850 2a 2a 20 49 66 20 61 6e 79 20 6f 66 20 74 68 65  ** If any of the
1c860 20 4e 20 72 65 67 69 73 74 65 72 73 20 62 65 67   N registers beg
1c870 69 6e 6e 69 6e 67 20 77 69 74 68 20 72 65 67 69  inning with regi
1c880 73 74 65 72 20 50 34 20 63 6f 6e 74 61 69 6e 73  ster P4 contains
1c890 20 61 20 4e 55 4c 4c 0a 2a 2a 20 76 61 6c 75 65   a NULL.** value
1c8a0 2c 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65  , jump immediate
1c8b0 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  ly to P2..**.** 
1c8c0 4f 74 68 65 72 77 69 73 65 2c 20 74 68 69 73 20  Otherwise, this 
1c8d0 69 6e 73 74 72 75 63 74 69 6f 6e 20 63 68 65 63  instruction chec
1c8e0 6b 73 20 69 66 20 63 75 72 73 6f 72 20 50 31 20  ks if cursor P1 
1c8f0 63 6f 6e 74 61 69 6e 73 20 61 6e 20 65 6e 74 72  contains an entr
1c900 79 0a 2a 2a 20 77 68 65 72 65 20 74 68 65 20 66  y.** where the f
1c910 69 72 73 74 20 28 4e 2d 31 29 20 66 69 65 6c 64  irst (N-1) field
1c920 73 20 6d 61 74 63 68 20 62 75 74 20 74 68 65 20  s match but the 
1c930 72 6f 77 69 64 20 76 61 6c 75 65 20 61 74 20 74  rowid value at t
1c940 68 65 20 65 6e 64 0a 2a 2a 20 6f 66 20 74 68 65  he end.** of the
1c950 20 69 6e 64 65 78 20 65 6e 74 72 79 20 69 73 20   index entry is 
1c960 6e 6f 74 20 52 2e 20 49 66 20 74 68 65 72 65 20  not R. If there 
1c970 69 73 20 6e 6f 20 73 75 63 68 20 65 6e 74 72 79  is no such entry
1c980 2c 20 63 6f 6e 74 72 6f 6c 20 6a 75 6d 70 73 0a  , control jumps.
1c990 2a 2a 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f  ** to instructio
1c9a0 6e 20 50 32 2e 20 4f 74 68 65 72 77 69 73 65 2c  n P2. Otherwise,
1c9b0 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68   the rowid of th
1c9c0 65 20 63 6f 6e 66 6c 69 63 74 69 6e 67 20 69 6e  e conflicting in
1c9d0 64 65 78 0a 2a 2a 20 65 6e 74 72 79 20 69 73 20  dex.** entry is 
1c9e0 63 6f 70 69 65 64 20 74 6f 20 72 65 67 69 73 74  copied to regist
1c9f0 65 72 20 50 33 20 61 6e 64 20 63 6f 6e 74 72 6f  er P3 and contro
1ca00 6c 20 66 61 6c 6c 73 20 74 68 72 6f 75 67 68 20  l falls through 
1ca10 74 6f 20 74 68 65 20 6e 65 78 74 0a 2a 2a 20 69  to the next.** i
1ca20 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a  nstruction..**.*
1ca30 2a 20 53 65 65 20 61 6c 73 6f 3a 20 4e 6f 74 46  * See also: NotF
1ca40 6f 75 6e 64 2c 20 4e 6f 74 45 78 69 73 74 73 2c  ound, NotExists,
1ca50 20 46 6f 75 6e 64 0a 2a 2f 0a 63 61 73 65 20 4f   Found.*/.case O
1ca60 50 5f 49 73 55 6e 69 71 75 65 3a 20 7b 20 20 20  P_IsUnique: {   
1ca70 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
1ca80 33 20 2a 2f 0a 20 20 75 31 36 20 69 69 3b 0a 20  3 */.  u16 ii;. 
1ca90 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 78   VdbeCursor *pCx
1caa0 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43  ;.  BtCursor *pC
1cab0 72 73 72 3b 0a 20 20 75 31 36 20 6e 46 69 65 6c  rsr;.  u16 nFiel
1cac0 64 3b 0a 20 20 4d 65 6d 20 2a 61 4d 78 3b 0a 20  d;.  Mem *aMx;. 
1cad0 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20   UnpackedRecord 
1cae0 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r;              
1caf0 20 20 20 20 2f 2a 20 42 2d 54 72 65 65 20 69 6e      /* B-Tree in
1cb00 64 65 78 20 73 65 61 72 63 68 20 6b 65 79 20 2a  dex search key *
1cb10 2f 0a 20 20 69 36 34 20 52 3b 20 20 20 20 20 20  /.  i64 R;      
1cb20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cb30 20 20 20 20 20 20 20 2f 2a 20 52 6f 77 69 64 20         /* Rowid 
1cb40 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74  stored in regist
1cb50 65 72 20 50 33 20 2a 2f 0a 0a 20 20 70 49 6e 33  er P3 */..  pIn3
1cb60 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
1cb70 5d 3b 0a 20 20 61 4d 78 20 3d 20 26 61 4d 65 6d  ];.  aMx = &aMem
1cb80 5b 70 4f 70 2d 3e 70 34 2e 69 5d 3b 0a 20 20 2f  [pOp->p4.i];.  /
1cb90 2a 20 41 73 73 65 72 74 20 74 68 61 74 20 74 68  * Assert that th
1cba0 65 20 76 61 6c 75 65 73 20 6f 66 20 70 61 72 61  e values of para
1cbb0 6d 65 74 65 72 73 20 50 31 20 61 6e 64 20 50 34  meters P1 and P4
1cbc0 20 61 72 65 20 69 6e 20 72 61 6e 67 65 2e 20 2a   are in range. *
1cbd0 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  /.  assert( pOp-
1cbe0 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33  >p4type==P4_INT3
1cbf0 32 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  2 );.  assert( p
1cc00 4f 70 2d 3e 70 34 2e 69 3e 30 20 26 26 20 70 4f  Op->p4.i>0 && pO
1cc10 70 2d 3e 70 34 2e 69 3c 3d 70 2d 3e 6e 4d 65 6d  p->p4.i<=p->nMem
1cc20 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
1cc30 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
1cc40 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
1cc50 3b 0a 0a 20 20 2f 2a 20 46 69 6e 64 20 74 68 65  ;..  /* Find the
1cc60 20 69 6e 64 65 78 20 63 75 72 73 6f 72 2e 20 2a   index cursor. *
1cc70 2f 0a 20 20 70 43 78 20 3d 20 70 2d 3e 61 70 43  /.  pCx = p->apC
1cc80 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
1cc90 73 73 65 72 74 28 20 70 43 78 2d 3e 64 65 66 65  ssert( pCx->defe
1cca0 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b  rredMoveto==0 );
1ccb0 0a 20 20 70 43 78 2d 3e 73 65 65 6b 52 65 73 75  .  pCx->seekResu
1ccc0 6c 74 20 3d 20 30 3b 0a 20 20 70 43 78 2d 3e 63  lt = 0;.  pCx->c
1ccd0 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
1cce0 48 45 5f 53 54 41 4c 45 3b 0a 20 20 70 43 72 73  HE_STALE;.  pCrs
1ccf0 72 20 3d 20 70 43 78 2d 3e 70 43 75 72 73 6f 72  r = pCx->pCursor
1cd00 3b 0a 0a 20 20 2f 2a 20 49 66 20 61 6e 79 20 6f  ;..  /* If any o
1cd10 66 20 74 68 65 20 76 61 6c 75 65 73 20 61 72 65  f the values are
1cd20 20 4e 55 4c 4c 2c 20 74 61 6b 65 20 74 68 65 20   NULL, take the 
1cd30 6a 75 6d 70 2e 20 2a 2f 0a 20 20 6e 46 69 65 6c  jump. */.  nFiel
1cd40 64 20 3d 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66  d = pCx->pKeyInf
1cd50 6f 2d 3e 6e 46 69 65 6c 64 3b 0a 20 20 66 6f 72  o->nField;.  for
1cd60 28 69 69 3d 30 3b 20 69 69 3c 6e 46 69 65 6c 64  (ii=0; ii<nField
1cd70 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20 69 66 28  ; ii++){.    if(
1cd80 20 61 4d 78 5b 69 69 5d 2e 66 6c 61 67 73 20 26   aMx[ii].flags &
1cd90 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20   MEM_Null ){.   
1cda0 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
1cdb0 2d 20 31 3b 0a 20 20 20 20 20 20 70 43 72 73 72  - 1;.      pCrsr
1cdc0 20 3d 20 30 3b 0a 20 20 20 20 20 20 62 72 65 61   = 0;.      brea
1cdd0 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 61  k;.    }.  }.  a
1cde0 73 73 65 72 74 28 20 28 61 4d 78 5b 6e 46 69 65  ssert( (aMx[nFie
1cdf0 6c 64 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  ld].flags & MEM_
1ce00 4e 75 6c 6c 29 3d 3d 30 20 29 3b 0a 0a 20 20 69  Null)==0 );..  i
1ce10 66 28 20 70 43 72 73 72 21 3d 30 20 29 7b 0a 20  f( pCrsr!=0 ){. 
1ce20 20 20 20 2f 2a 20 50 6f 70 75 6c 61 74 65 20 74     /* Populate t
1ce30 68 65 20 69 6e 64 65 78 20 73 65 61 72 63 68 20  he index search 
1ce40 6b 65 79 2e 20 2a 2f 0a 20 20 20 20 72 2e 70 4b  key. */.    r.pK
1ce50 65 79 49 6e 66 6f 20 3d 20 70 43 78 2d 3e 70 4b  eyInfo = pCx->pK
1ce60 65 79 49 6e 66 6f 3b 0a 20 20 20 20 72 2e 6e 46  eyInfo;.    r.nF
1ce70 69 65 6c 64 20 3d 20 6e 46 69 65 6c 64 20 2b 20  ield = nField + 
1ce80 31 3b 0a 20 20 20 20 72 2e 66 6c 61 67 73 20 3d  1;.    r.flags =
1ce90 20 55 4e 50 41 43 4b 45 44 5f 50 52 45 46 49 58   UNPACKED_PREFIX
1cea0 5f 53 45 41 52 43 48 3b 0a 20 20 20 20 72 2e 61  _SEARCH;.    r.a
1ceb0 4d 65 6d 20 3d 20 61 4d 78 3b 0a 23 69 66 64 65  Mem = aMx;.#ifde
1cec0 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
1ced0 20 20 20 7b 20 69 6e 74 20 69 3b 20 66 6f 72 28     { int i; for(
1cee0 69 3d 30 3b 20 69 3c 72 2e 6e 46 69 65 6c 64 3b  i=0; i<r.nField;
1cef0 20 69 2b 2b 29 20 61 73 73 65 72 74 28 20 6d 65   i++) assert( me
1cf00 6d 49 73 56 61 6c 69 64 28 26 72 2e 61 4d 65 6d  mIsValid(&r.aMem
1cf10 5b 69 5d 29 20 29 3b 20 7d 0a 23 65 6e 64 69 66  [i]) ); }.#endif
1cf20 0a 0a 20 20 20 20 2f 2a 20 45 78 74 72 61 63 74  ..    /* Extract
1cf30 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 52 20   the value of R 
1cf40 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50 33  from register P3
1cf50 2e 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33  . */.    sqlite3
1cf60 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66  VdbeMemIntegerif
1cf70 79 28 70 49 6e 33 29 3b 0a 20 20 20 20 52 20 3d  y(pIn3);.    R =
1cf80 20 70 49 6e 33 2d 3e 75 2e 69 3b 0a 0a 20 20 20   pIn3->u.i;..   
1cf90 20 2f 2a 20 53 65 61 72 63 68 20 74 68 65 20 42   /* Search the B
1cfa0 2d 54 72 65 65 20 69 6e 64 65 78 2e 20 49 66 20  -Tree index. If 
1cfb0 6e 6f 20 63 6f 6e 66 6c 69 63 74 69 6e 67 20 72  no conflicting r
1cfc0 65 63 6f 72 64 20 69 73 20 66 6f 75 6e 64 2c 20  ecord is found, 
1cfd0 6a 75 6d 70 0a 20 20 20 20 2a 2a 20 74 6f 20 50  jump.    ** to P
1cfe0 32 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 63 6f  2. Otherwise, co
1cff0 70 79 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20  py the rowid of 
1d000 74 68 65 20 63 6f 6e 66 6c 69 63 74 69 6e 67 20  the conflicting 
1d010 72 65 63 6f 72 64 20 74 6f 0a 20 20 20 20 2a 2a  record to.    **
1d020 20 72 65 67 69 73 74 65 72 20 50 33 20 61 6e 64   register P3 and
1d030 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f   fall through to
1d040 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75   the next instru
1d050 63 74 69 6f 6e 2e 20 20 2a 2f 0a 20 20 20 20 72  ction.  */.    r
1d060 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
1d070 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70  MovetoUnpacked(p
1d080 43 72 73 72 2c 20 26 72 2c 20 30 2c 20 30 2c 20  Crsr, &r, 0, 0, 
1d090 26 70 43 78 2d 3e 73 65 65 6b 52 65 73 75 6c 74  &pCx->seekResult
1d0a0 29 3b 0a 20 20 20 20 69 66 28 20 28 72 2e 66 6c  );.    if( (r.fl
1d0b0 61 67 73 20 26 20 55 4e 50 41 43 4b 45 44 5f 50  ags & UNPACKED_P
1d0c0 52 45 46 49 58 5f 53 45 41 52 43 48 29 20 7c 7c  REFIX_SEARCH) ||
1d0d0 20 72 2e 72 6f 77 69 64 3d 3d 52 20 29 7b 0a 20   r.rowid==R ){. 
1d0e0 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70       pc = pOp->p
1d0f0 32 20 2d 20 31 3b 0a 20 20 20 20 7d 65 6c 73 65  2 - 1;.    }else
1d100 7b 0a 20 20 20 20 20 20 70 49 6e 33 2d 3e 75 2e  {.      pIn3->u.
1d110 69 20 3d 20 72 2e 72 6f 77 69 64 3b 0a 20 20 20  i = r.rowid;.   
1d120 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a   }.  }.  break;.
1d130 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f  }../* Opcode: No
1d140 74 45 78 69 73 74 73 20 50 31 20 50 32 20 50 33  tExists P1 P2 P3
1d150 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 55 73 65 20 74   * *.**.** Use t
1d160 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65  he content of re
1d170 67 69 73 74 65 72 20 50 33 20 61 73 20 61 20 69  gister P3 as a i
1d180 6e 74 65 67 65 72 20 6b 65 79 2e 20 20 49 66 20  nteger key.  If 
1d190 61 20 72 65 63 6f 72 64 20 0a 2a 2a 20 77 69 74  a record .** wit
1d1a0 68 20 74 68 61 74 20 6b 65 79 20 64 6f 65 73 20  h that key does 
1d1b0 6e 6f 74 20 65 78 69 73 74 20 69 6e 20 74 61 62  not exist in tab
1d1c0 6c 65 20 6f 66 20 50 31 2c 20 74 68 65 6e 20 6a  le of P1, then j
1d1d0 75 6d 70 20 74 6f 20 50 32 2e 20 0a 2a 2a 20 49  ump to P2. .** I
1d1e0 66 20 74 68 65 20 72 65 63 6f 72 64 20 64 6f 65  f the record doe
1d1f0 73 20 65 78 69 73 74 2c 20 74 68 65 6e 20 66 61  s exist, then fa
1d200 6c 6c 20 74 68 72 6f 75 67 68 2e 20 20 54 68 65  ll through.  The
1d210 20 63 75 72 73 6f 72 20 69 73 20 6c 65 66 74 20   cursor is left 
1d220 0a 2a 2a 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20  .** pointing to 
1d230 74 68 65 20 72 65 63 6f 72 64 20 69 66 20 69 74  the record if it
1d240 20 65 78 69 73 74 73 2e 0a 2a 2a 0a 2a 2a 20 54   exists..**.** T
1d250 68 65 20 64 69 66 66 65 72 65 6e 63 65 20 62 65  he difference be
1d260 74 77 65 65 6e 20 74 68 69 73 20 6f 70 65 72 61  tween this opera
1d270 74 69 6f 6e 20 61 6e 64 20 4e 6f 74 46 6f 75 6e  tion and NotFoun
1d280 64 20 69 73 20 74 68 61 74 20 74 68 69 73 0a 2a  d is that this.*
1d290 2a 20 6f 70 65 72 61 74 69 6f 6e 20 61 73 73 75  * operation assu
1d2a0 6d 65 73 20 74 68 65 20 6b 65 79 20 69 73 20 61  mes the key is a
1d2b0 6e 20 69 6e 74 65 67 65 72 20 61 6e 64 20 74 68  n integer and th
1d2c0 61 74 20 50 31 20 69 73 20 61 20 74 61 62 6c 65  at P1 is a table
1d2d0 20 77 68 65 72 65 61 73 0a 2a 2a 20 4e 6f 74 46   whereas.** NotF
1d2e0 6f 75 6e 64 20 61 73 73 75 6d 65 73 20 6b 65 79  ound assumes key
1d2f0 20 69 73 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74   is a blob const
1d300 72 75 63 74 65 64 20 66 72 6f 6d 20 4d 61 6b 65  ructed from Make
1d310 52 65 63 6f 72 64 20 61 6e 64 0a 2a 2a 20 50 31  Record and.** P1
1d320 20 69 73 20 61 6e 20 69 6e 64 65 78 2e 0a 2a 2a   is an index..**
1d330 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f  .** See also: Fo
1d340 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 49  und, NotFound, I
1d350 73 55 6e 69 71 75 65 0a 2a 2f 0a 63 61 73 65 20  sUnique.*/.case 
1d360 4f 50 5f 4e 6f 74 45 78 69 73 74 73 3a 20 7b 20  OP_NotExists: { 
1d370 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
1d380 69 6e 33 20 2a 2f 0a 20 20 56 64 62 65 43 75 72  in3 */.  VdbeCur
1d390 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72  sor *pC;.  BtCur
1d3a0 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e  sor *pCrsr;.  in
1d3b0 74 20 72 65 73 3b 0a 20 20 75 36 34 20 69 4b 65  t res;.  u64 iKe
1d3c0 79 3b 0a 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d  y;..  pIn3 = &aM
1d3d0 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61  em[pOp->p3];.  a
1d3e0 73 73 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61  ssert( pIn3->fla
1d3f0 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a  gs & MEM_Int );.
1d400 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1d410 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
1d420 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
1d430 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
1d440 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
1d450 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73  ( pC!=0 );.  ass
1d460 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65  ert( pC->isTable
1d470 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
1d480 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67  ->pseudoTableReg
1d490 3d 3d 30 20 29 3b 0a 20 20 70 43 72 73 72 20 3d  ==0 );.  pCrsr =
1d4a0 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20   pC->pCursor;.  
1d4b0 69 66 28 20 70 43 72 73 72 21 3d 30 20 29 7b 0a  if( pCrsr!=0 ){.
1d4c0 20 20 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 20      res = 0;.   
1d4d0 20 69 4b 65 79 20 3d 20 70 49 6e 33 2d 3e 75 2e   iKey = pIn3->u.
1d4e0 69 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  i;.    rc = sqli
1d4f0 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e  te3BtreeMovetoUn
1d500 70 61 63 6b 65 64 28 70 43 72 73 72 2c 20 30 2c  packed(pCrsr, 0,
1d510 20 69 4b 65 79 2c 20 30 2c 20 26 72 65 73 29 3b   iKey, 0, &res);
1d520 0a 20 20 20 20 70 43 2d 3e 6c 61 73 74 52 6f 77  .    pC->lastRow
1d530 69 64 20 3d 20 70 49 6e 33 2d 3e 75 2e 69 3b 0a  id = pIn3->u.i;.
1d540 20 20 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56      pC->rowidIsV
1d550 61 6c 69 64 20 3d 20 72 65 73 3d 3d 30 20 3f 31  alid = res==0 ?1
1d560 3a 30 3b 0a 20 20 20 20 70 43 2d 3e 6e 75 6c 6c  :0;.    pC->null
1d570 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d  Row = 0;.    pC-
1d580 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
1d590 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 20 20  ACHE_STALE;.    
1d5a0 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
1d5b0 74 6f 20 3d 20 30 3b 0a 20 20 20 20 69 66 28 20  to = 0;.    if( 
1d5c0 72 65 73 21 3d 30 20 29 7b 0a 20 20 20 20 20 20  res!=0 ){.      
1d5d0 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
1d5e0 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
1d5f0 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64  pC->rowidIsValid
1d600 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 0a 20 20 20  ==0 );.    }.   
1d610 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20   pC->seekResult 
1d620 3d 20 72 65 73 3b 0a 20 20 7d 65 6c 73 65 7b 0a  = res;.  }else{.
1d630 20 20 20 20 2f 2a 20 54 68 69 73 20 68 61 70 70      /* This happ
1d640 65 6e 73 20 77 68 65 6e 20 61 6e 20 61 74 74 65  ens when an atte
1d650 6d 70 74 20 74 6f 20 6f 70 65 6e 20 61 20 72 65  mpt to open a re
1d660 61 64 20 63 75 72 73 6f 72 20 6f 6e 20 74 68 65  ad cursor on the
1d670 20 0a 20 20 20 20 2a 2a 20 73 71 6c 69 74 65 5f   .    ** sqlite_
1d680 6d 61 73 74 65 72 20 74 61 62 6c 65 20 72 65 74  master table ret
1d690 75 72 6e 73 20 53 51 4c 49 54 45 5f 45 4d 50 54  urns SQLITE_EMPT
1d6a0 59 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 70 63  Y..    */.    pc
1d6b0 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
1d6c0 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
1d6d0 72 6f 77 69 64 49 73 56 61 6c 69 64 3d 3d 30 20  rowidIsValid==0 
1d6e0 29 3b 0a 20 20 20 20 70 43 2d 3e 73 65 65 6b 52  );.    pC->seekR
1d6f0 65 73 75 6c 74 20 3d 20 30 3b 0a 20 20 7d 0a 20  esult = 0;.  }. 
1d700 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
1d710 63 6f 64 65 3a 20 53 65 71 75 65 6e 63 65 20 50  code: Sequence P
1d720 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
1d730 20 46 69 6e 64 20 74 68 65 20 6e 65 78 74 20 61   Find the next a
1d740 76 61 69 6c 61 62 6c 65 20 73 65 71 75 65 6e 63  vailable sequenc
1d750 65 20 6e 75 6d 62 65 72 20 66 6f 72 20 63 75 72  e number for cur
1d760 73 6f 72 20 50 31 2e 0a 2a 2a 20 57 72 69 74 65  sor P1..** Write
1d770 20 74 68 65 20 73 65 71 75 65 6e 63 65 20 6e 75   the sequence nu
1d780 6d 62 65 72 20 69 6e 74 6f 20 72 65 67 69 73 74  mber into regist
1d790 65 72 20 50 32 2e 0a 2a 2a 20 54 68 65 20 73 65  er P2..** The se
1d7a0 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20 6f 6e  quence number on
1d7b0 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 69   the cursor is i
1d7c0 6e 63 72 65 6d 65 6e 74 65 64 20 61 66 74 65 72  ncremented after
1d7d0 20 74 68 69 73 0a 2a 2a 20 69 6e 73 74 72 75 63   this.** instruc
1d7e0 74 69 6f 6e 2e 20 20 0a 2a 2f 0a 63 61 73 65 20  tion.  .*/.case 
1d7f0 4f 50 5f 53 65 71 75 65 6e 63 65 3a 20 7b 20 20  OP_Sequence: {  
1d800 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
1d810 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20  -prerelease */. 
1d820 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
1d830 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
1d840 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61  ->nCursor );.  a
1d850 73 73 65 72 74 28 20 70 2d 3e 61 70 43 73 72 5b  ssert( p->apCsr[
1d860 70 4f 70 2d 3e 70 31 5d 21 3d 30 20 29 3b 0a 20  pOp->p1]!=0 );. 
1d870 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 2d 3e   pOut->u.i = p->
1d880 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e  apCsr[pOp->p1]->
1d890 73 65 71 43 6f 75 6e 74 2b 2b 3b 0a 20 20 62 72  seqCount++;.  br
1d8a0 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f  eak;.}.../* Opco
1d8b0 64 65 3a 20 4e 65 77 52 6f 77 69 64 20 50 31 20  de: NewRowid P1 
1d8c0 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
1d8d0 47 65 74 20 61 20 6e 65 77 20 69 6e 74 65 67 65  Get a new intege
1d8e0 72 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 20  r record number 
1d8f0 28 61 2e 6b 2e 61 20 22 72 6f 77 69 64 22 29 20  (a.k.a "rowid") 
1d900 75 73 65 64 20 61 73 20 74 68 65 20 6b 65 79 20  used as the key 
1d910 74 6f 20 61 20 74 61 62 6c 65 2e 0a 2a 2a 20 54  to a table..** T
1d920 68 65 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72  he record number
1d930 20 69 73 20 6e 6f 74 20 70 72 65 76 69 6f 75 73   is not previous
1d940 6c 79 20 75 73 65 64 20 61 73 20 61 20 6b 65 79  ly used as a key
1d950 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
1d960 0a 2a 2a 20 74 61 62 6c 65 20 74 68 61 74 20 63  .** table that c
1d970 75 72 73 6f 72 20 50 31 20 70 6f 69 6e 74 73 20  ursor P1 points 
1d980 74 6f 2e 20 20 54 68 65 20 6e 65 77 20 72 65 63  to.  The new rec
1d990 6f 72 64 20 6e 75 6d 62 65 72 20 69 73 20 77 72  ord number is wr
1d9a0 69 74 74 65 6e 0a 2a 2a 20 77 72 69 74 74 65 6e  itten.** written
1d9b0 20 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e   to register P2.
1d9c0 0a 2a 2a 0a 2a 2a 20 49 66 20 50 33 3e 30 20 74  .**.** If P3>0 t
1d9d0 68 65 6e 20 50 33 20 69 73 20 61 20 72 65 67 69  hen P3 is a regi
1d9e0 73 74 65 72 20 69 6e 20 74 68 65 20 72 6f 6f 74  ster in the root
1d9f0 20 66 72 61 6d 65 20 6f 66 20 74 68 69 73 20 56   frame of this V
1da00 44 42 45 20 74 68 61 74 20 68 6f 6c 64 73 20 0a  DBE that holds .
1da10 2a 2a 20 74 68 65 20 6c 61 72 67 65 73 74 20 70  ** the largest p
1da20 72 65 76 69 6f 75 73 6c 79 20 67 65 6e 65 72 61  reviously genera
1da30 74 65 64 20 72 65 63 6f 72 64 20 6e 75 6d 62 65  ted record numbe
1da40 72 2e 20 4e 6f 20 6e 65 77 20 72 65 63 6f 72 64  r. No new record
1da50 20 6e 75 6d 62 65 72 73 20 61 72 65 0a 2a 2a 20   numbers are.** 
1da60 61 6c 6c 6f 77 65 64 20 74 6f 20 62 65 20 6c 65  allowed to be le
1da70 73 73 20 74 68 61 6e 20 74 68 69 73 20 76 61 6c  ss than this val
1da80 75 65 2e 20 57 68 65 6e 20 74 68 69 73 20 76 61  ue. When this va
1da90 6c 75 65 20 72 65 61 63 68 65 73 20 69 74 73 20  lue reaches its 
1daa0 6d 61 78 69 6d 75 6d 2c 20 0a 2a 2a 20 61 20 53  maximum, .** a S
1dab0 51 4c 49 54 45 5f 46 55 4c 4c 20 65 72 72 6f 72  QLITE_FULL error
1dac0 20 69 73 20 67 65 6e 65 72 61 74 65 64 2e 20 54   is generated. T
1dad0 68 65 20 50 33 20 72 65 67 69 73 74 65 72 20 69  he P3 register i
1dae0 73 20 75 70 64 61 74 65 64 20 77 69 74 68 20 74  s updated with t
1daf0 68 65 20 27 0a 2a 2a 20 67 65 6e 65 72 61 74 65  he '.** generate
1db00 64 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 2e  d record number.
1db10 20 54 68 69 73 20 50 33 20 6d 65 63 68 61 6e 69   This P3 mechani
1db20 73 6d 20 69 73 20 75 73 65 64 20 74 6f 20 68 65  sm is used to he
1db30 6c 70 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65  lp implement the
1db40 0a 2a 2a 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e  .** AUTOINCREMEN
1db50 54 20 66 65 61 74 75 72 65 2e 0a 2a 2f 0a 63 61  T feature..*/.ca
1db60 73 65 20 4f 50 5f 4e 65 77 52 6f 77 69 64 3a 20  se OP_NewRowid: 
1db70 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f  {           /* o
1db80 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a  ut2-prerelease *
1db90 2f 0a 20 20 69 36 34 20 76 3b 20 20 20 20 20 20  /.  i64 v;      
1dba0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
1dbb0 65 20 6e 65 77 20 72 6f 77 69 64 20 2a 2f 0a 20  e new rowid */. 
1dbc0 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
1dbd0 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 73 6f          /* Curso
1dbe0 72 20 6f 66 20 74 61 62 6c 65 20 74 6f 20 67 65  r of table to ge
1dbf0 74 20 74 68 65 20 6e 65 77 20 72 6f 77 69 64 20  t the new rowid 
1dc00 2a 2f 0a 20 20 69 6e 74 20 72 65 73 3b 20 20 20  */.  int res;   
1dc10 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52              /* R
1dc20 65 73 75 6c 74 20 6f 66 20 61 6e 20 73 71 6c 69  esult of an sqli
1dc30 74 65 33 42 74 72 65 65 4c 61 73 74 28 29 20 2a  te3BtreeLast() *
1dc40 2f 0a 20 20 69 6e 74 20 63 6e 74 3b 20 20 20 20  /.  int cnt;    
1dc50 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f             /* Co
1dc60 75 6e 74 65 72 20 74 6f 20 6c 69 6d 69 74 20 74  unter to limit t
1dc70 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 73 65 61  he number of sea
1dc80 72 63 68 65 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a  rches */.  Mem *
1dc90 70 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20  pMem;           
1dca0 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f    /* Register ho
1dcb0 6c 64 69 6e 67 20 6c 61 72 67 65 73 74 20 72 6f  lding largest ro
1dcc0 77 69 64 20 66 6f 72 20 41 55 54 4f 49 4e 43 52  wid for AUTOINCR
1dcd0 45 4d 45 4e 54 20 2a 2f 0a 20 20 56 64 62 65 46  EMENT */.  VdbeF
1dce0 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b 20 20 20  rame *pFrame;   
1dcf0 20 20 2f 2a 20 52 6f 6f 74 20 66 72 61 6d 65 20    /* Root frame 
1dd00 6f 66 20 56 44 42 45 20 2a 2f 0a 0a 20 20 76 20  of VDBE */..  v 
1dd10 3d 20 30 3b 0a 20 20 72 65 73 20 3d 20 30 3b 0a  = 0;.  res = 0;.
1dd20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1dd30 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
1dd40 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
1dd50 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
1dd60 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
1dd70 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 69 66 28  ( pC!=0 );.  if(
1dd80 20 4e 45 56 45 52 28 70 43 2d 3e 70 43 75 72 73   NEVER(pC->pCurs
1dd90 6f 72 3d 3d 30 29 20 29 7b 0a 20 20 20 20 2f 2a  or==0) ){.    /*
1dda0 20 54 68 65 20 7a 65 72 6f 20 69 6e 69 74 69 61   The zero initia
1ddb0 6c 69 7a 61 74 69 6f 6e 20 61 62 6f 76 65 20 69  lization above i
1ddc0 73 20 61 6c 6c 20 74 68 61 74 20 69 73 20 6e 65  s all that is ne
1ddd0 65 64 65 64 20 2a 2f 0a 20 20 7d 65 6c 73 65 7b  eded */.  }else{
1dde0 0a 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 78 74  .    /* The next
1ddf0 20 72 6f 77 69 64 20 6f 72 20 72 65 63 6f 72 64   rowid or record
1de00 20 6e 75 6d 62 65 72 20 28 64 69 66 66 65 72 65   number (differe
1de10 6e 74 20 74 65 72 6d 73 20 66 6f 72 20 74 68 65  nt terms for the
1de20 20 73 61 6d 65 0a 20 20 20 20 2a 2a 20 74 68 69   same.    ** thi
1de30 6e 67 29 20 69 73 20 6f 62 74 61 69 6e 65 64 20  ng) is obtained 
1de40 69 6e 20 61 20 74 77 6f 2d 73 74 65 70 20 61 6c  in a two-step al
1de50 67 6f 72 69 74 68 6d 2e 0a 20 20 20 20 2a 2a 0a  gorithm..    **.
1de60 20 20 20 20 2a 2a 20 46 69 72 73 74 20 77 65 20      ** First we 
1de70 61 74 74 65 6d 70 74 20 74 6f 20 66 69 6e 64 20  attempt to find 
1de80 74 68 65 20 6c 61 72 67 65 73 74 20 65 78 69 73  the largest exis
1de90 74 69 6e 67 20 72 6f 77 69 64 20 61 6e 64 20 61  ting rowid and a
1dea0 64 64 20 6f 6e 65 0a 20 20 20 20 2a 2a 20 74 6f  dd one.    ** to
1deb0 20 74 68 61 74 2e 20 20 42 75 74 20 69 66 20 74   that.  But if t
1dec0 68 65 20 6c 61 72 67 65 73 74 20 65 78 69 73 74  he largest exist
1ded0 69 6e 67 20 72 6f 77 69 64 20 69 73 20 61 6c 72  ing rowid is alr
1dee0 65 61 64 79 20 74 68 65 20 6d 61 78 69 6d 75 6d  eady the maximum
1def0 0a 20 20 20 20 2a 2a 20 70 6f 73 69 74 69 76 65  .    ** positive
1df00 20 69 6e 74 65 67 65 72 2c 20 77 65 20 68 61 76   integer, we hav
1df10 65 20 74 6f 20 66 61 6c 6c 20 74 68 72 6f 75 67  e to fall throug
1df20 68 20 74 6f 20 74 68 65 20 73 65 63 6f 6e 64 0a  h to the second.
1df30 20 20 20 20 2a 2a 20 70 72 6f 62 61 62 69 6c 69      ** probabili
1df40 73 74 69 63 20 61 6c 67 6f 72 69 74 68 6d 0a 20  stic algorithm. 
1df50 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 54 68 65     **.    ** The
1df60 20 73 65 63 6f 6e 64 20 61 6c 67 6f 72 69 74 68   second algorith
1df70 6d 20 69 73 20 74 6f 20 73 65 6c 65 63 74 20 61  m is to select a
1df80 20 72 6f 77 69 64 20 61 74 20 72 61 6e 64 6f 6d   rowid at random
1df90 20 61 6e 64 20 73 65 65 20 69 66 0a 20 20 20 20   and see if.    
1dfa0 2a 2a 20 69 74 20 61 6c 72 65 61 64 79 20 65 78  ** it already ex
1dfb0 69 73 74 73 20 69 6e 20 74 68 65 20 74 61 62 6c  ists in the tabl
1dfc0 65 2e 20 20 49 66 20 69 74 20 64 6f 65 73 20 6e  e.  If it does n
1dfd0 6f 74 20 65 78 69 73 74 2c 20 77 65 20 68 61 76  ot exist, we hav
1dfe0 65 0a 20 20 20 20 2a 2a 20 73 75 63 63 65 65 64  e.    ** succeed
1dff0 65 64 2e 20 20 49 66 20 74 68 65 20 72 61 6e 64  ed.  If the rand
1e000 6f 6d 20 72 6f 77 69 64 20 64 6f 65 73 20 65 78  om rowid does ex
1e010 69 73 74 2c 20 77 65 20 73 65 6c 65 63 74 20 61  ist, we select a
1e020 20 6e 65 77 20 6f 6e 65 0a 20 20 20 20 2a 2a 20   new one.    ** 
1e030 61 6e 64 20 74 72 79 20 61 67 61 69 6e 2c 20 75  and try again, u
1e040 70 20 74 6f 20 31 30 30 20 74 69 6d 65 73 2e 0a  p to 100 times..
1e050 20 20 20 20 2a 2f 0a 20 20 20 20 61 73 73 65 72      */.    asser
1e060 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29  t( pC->isTable )
1e070 3b 0a 20 20 20 20 63 6e 74 20 3d 20 30 3b 0a 0a  ;.    cnt = 0;..
1e080 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 33 32  #ifdef SQLITE_32
1e090 42 49 54 5f 52 4f 57 49 44 0a 23 20 20 20 64 65  BIT_ROWID.#   de
1e0a0 66 69 6e 65 20 4d 41 58 5f 52 4f 57 49 44 20 30  fine MAX_ROWID 0
1e0b0 78 37 66 66 66 66 66 66 66 0a 23 65 6c 73 65 0a  x7fffffff.#else.
1e0c0 20 20 20 20 2f 2a 20 53 6f 6d 65 20 63 6f 6d 70      /* Some comp
1e0d0 69 6c 65 72 73 20 63 6f 6d 70 6c 61 69 6e 20 61  ilers complain a
1e0e0 62 6f 75 74 20 63 6f 6e 73 74 61 6e 74 73 20 6f  bout constants o
1e0f0 66 20 74 68 65 20 66 6f 72 6d 20 30 78 37 66 66  f the form 0x7ff
1e100 66 66 66 66 66 66 66 66 66 66 66 66 66 2e 0a 20  fffffffffffff.. 
1e110 20 20 20 2a 2a 20 4f 74 68 65 72 73 20 63 6f 6d     ** Others com
1e120 70 6c 61 69 6e 20 61 62 6f 75 74 20 30 78 37 66  plain about 0x7f
1e130 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 4c  fffffffffffffffL
1e140 4c 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  L.  The followin
1e150 67 20 6d 61 63 72 6f 20 73 65 65 6d 73 0a 20 20  g macro seems.  
1e160 20 20 2a 2a 20 74 6f 20 70 72 6f 76 69 64 65 20    ** to provide 
1e170 74 68 65 20 63 6f 6e 73 74 61 6e 74 20 77 68 69  the constant whi
1e180 6c 65 20 6d 61 6b 69 6e 67 20 61 6c 6c 20 63 6f  le making all co
1e190 6d 70 69 6c 65 72 73 20 68 61 70 70 79 2e 0a 20  mpilers happy.. 
1e1a0 20 20 20 2a 2f 0a 23 20 20 20 64 65 66 69 6e 65     */.#   define
1e1b0 20 4d 41 58 5f 52 4f 57 49 44 20 20 28 69 36 34   MAX_ROWID  (i64
1e1c0 29 28 20 28 28 28 75 36 34 29 30 78 37 66 66 66  )( (((u64)0x7fff
1e1d0 66 66 66 66 29 3c 3c 33 32 29 20 7c 20 28 75 36  ffff)<<32) | (u6
1e1e0 34 29 30 78 66 66 66 66 66 66 66 66 20 29 0a 23  4)0xffffffff ).#
1e1f0 65 6e 64 69 66 0a 0a 20 20 20 20 69 66 28 20 21  endif..    if( !
1e200 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77  pC->useRandomRow
1e210 69 64 20 29 7b 0a 20 20 20 20 20 20 76 20 3d 20  id ){.      v = 
1e220 73 71 6c 69 74 65 33 42 74 72 65 65 47 65 74 43  sqlite3BtreeGetC
1e230 61 63 68 65 64 52 6f 77 69 64 28 70 43 2d 3e 70  achedRowid(pC->p
1e240 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 20 20 69  Cursor);.      i
1e250 66 28 20 76 3d 3d 30 20 29 7b 0a 20 20 20 20 20  f( v==0 ){.     
1e260 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
1e270 74 72 65 65 4c 61 73 74 28 70 43 2d 3e 70 43 75  treeLast(pC->pCu
1e280 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20 20  rsor, &res);.   
1e290 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c       if( rc!=SQL
1e2a0 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
1e2b0 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
1e2c0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
1e2d0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69       }.        i
1e2e0 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20 20 20  f( res ){.      
1e2f0 20 20 20 20 76 20 3d 20 31 3b 20 20 20 2f 2a 20      v = 1;   /* 
1e300 49 4d 50 3a 20 52 2d 36 31 39 31 34 2d 34 38 30  IMP: R-61914-480
1e310 37 34 20 2a 2f 0a 20 20 20 20 20 20 20 20 7d 65  74 */.        }e
1e320 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 61  lse{.          a
1e330 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 42 74  ssert( sqlite3Bt
1e340 72 65 65 43 75 72 73 6f 72 49 73 56 61 6c 69 64  reeCursorIsValid
1e350 28 70 43 2d 3e 70 43 75 72 73 6f 72 29 20 29 3b  (pC->pCursor) );
1e360 0a 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20  .          rc = 
1e370 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79 53  sqlite3BtreeKeyS
1e380 69 7a 65 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c  ize(pC->pCursor,
1e390 20 26 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20   &v);.          
1e3a0 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49  assert( rc==SQLI
1e3b0 54 45 5f 4f 4b 20 29 3b 20 20 20 2f 2a 20 43 61  TE_OK );   /* Ca
1e3c0 6e 6e 6f 74 20 66 61 69 6c 20 66 6f 6c 6c 6f 77  nnot fail follow
1e3d0 69 6e 67 20 42 74 72 65 65 4c 61 73 74 28 29 20  ing BtreeLast() 
1e3e0 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 69 66 28  */.          if(
1e3f0 20 76 3d 3d 4d 41 58 5f 52 4f 57 49 44 20 29 7b   v==MAX_ROWID ){
1e400 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 43 2d  .            pC-
1e410 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20  >useRandomRowid 
1e420 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 20 20 7d  = 1;.          }
1e430 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20  else{.          
1e440 20 20 76 2b 2b 3b 20 20 20 2f 2a 20 49 4d 50 3a    v++;   /* IMP:
1e450 20 52 2d 32 39 35 33 38 2d 33 34 39 38 37 20 2a   R-29538-34987 *
1e460 2f 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20  /.          }.  
1e470 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a        }.      }.
1e480 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
1e490 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45  OMIT_AUTOINCREME
1e4a0 4e 54 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70  NT.      if( pOp
1e4b0 2d 3e 70 33 20 29 7b 0a 20 20 20 20 20 20 20 20  ->p3 ){.        
1e4c0 2f 2a 20 41 73 73 65 72 74 20 74 68 61 74 20 50  /* Assert that P
1e4d0 33 20 69 73 20 61 20 76 61 6c 69 64 20 6d 65 6d  3 is a valid mem
1e4e0 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20  ory cell. */.   
1e4f0 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
1e500 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 20 20 20 20  ->p3>0 );.      
1e510 20 20 69 66 28 20 70 2d 3e 70 46 72 61 6d 65 20    if( p->pFrame 
1e520 29 7b 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72  ){.          for
1e530 28 70 46 72 61 6d 65 3d 70 2d 3e 70 46 72 61 6d  (pFrame=p->pFram
1e540 65 3b 20 70 46 72 61 6d 65 2d 3e 70 50 61 72 65  e; pFrame->pPare
1e550 6e 74 3b 20 70 46 72 61 6d 65 3d 70 46 72 61 6d  nt; pFrame=pFram
1e560 65 2d 3e 70 50 61 72 65 6e 74 29 3b 0a 20 20 20  e->pParent);.   
1e570 20 20 20 20 20 20 20 2f 2a 20 41 73 73 65 72 74         /* Assert
1e580 20 74 68 61 74 20 50 33 20 69 73 20 61 20 76 61   that P3 is a va
1e590 6c 69 64 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 2e  lid memory cell.
1e5a0 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 61 73   */.          as
1e5b0 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 70  sert( pOp->p3<=p
1e5c0 46 72 61 6d 65 2d 3e 6e 4d 65 6d 20 29 3b 0a 20  Frame->nMem );. 
1e5d0 20 20 20 20 20 20 20 20 20 70 4d 65 6d 20 3d 20           pMem = 
1e5e0 26 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f  &pFrame->aMem[pO
1e5f0 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 20 20 20 20  p->p3];.        
1e600 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20  }else{.         
1e610 20 2f 2a 20 41 73 73 65 72 74 20 74 68 61 74 20   /* Assert that 
1e620 50 33 20 69 73 20 61 20 76 61 6c 69 64 20 6d 65  P3 is a valid me
1e630 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a 20 20  mory cell. */.  
1e640 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
1e650 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d  pOp->p3<=p->nMem
1e660 20 29 3b 0a 20 20 20 20 20 20 20 20 20 20 70 4d   );.          pM
1e670 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  em = &aMem[pOp->
1e680 70 33 5d 3b 0a 20 20 20 20 20 20 20 20 20 20 6d  p3];.          m
1e690 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
1e6a0 70 2c 20 70 4d 65 6d 29 3b 0a 20 20 20 20 20 20  p, pMem);.      
1e6b0 20 20 7d 0a 20 20 20 20 20 20 20 20 61 73 73 65    }.        asse
1e6c0 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70  rt( memIsValid(p
1e6d0 4d 65 6d 29 20 29 3b 0a 0a 20 20 20 20 20 20 20  Mem) );..       
1e6e0 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
1e6f0 70 4f 70 2d 3e 70 33 2c 20 70 4d 65 6d 29 3b 0a  pOp->p3, pMem);.
1e700 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
1e710 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79  dbeMemIntegerify
1e720 28 70 4d 65 6d 29 3b 0a 20 20 20 20 20 20 20 20  (pMem);.        
1e730 61 73 73 65 72 74 28 20 28 70 4d 65 6d 2d 3e 66  assert( (pMem->f
1e740 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21  lags & MEM_Int)!
1e750 3d 30 20 29 3b 20 20 2f 2a 20 6d 65 6d 28 50 33  =0 );  /* mem(P3
1e760 29 20 68 6f 6c 64 73 20 61 6e 20 69 6e 74 65 67  ) holds an integ
1e770 65 72 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66  er */.        if
1e780 28 20 70 4d 65 6d 2d 3e 75 2e 69 3d 3d 4d 41 58  ( pMem->u.i==MAX
1e790 5f 52 4f 57 49 44 20 7c 7c 20 70 43 2d 3e 75 73  _ROWID || pC->us
1e7a0 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20 29 7b 0a  eRandomRowid ){.
1e7b0 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 53            rc = S
1e7c0 51 4c 49 54 45 5f 46 55 4c 4c 3b 20 20 20 2f 2a  QLITE_FULL;   /*
1e7d0 20 49 4d 50 3a 20 52 2d 31 32 32 37 35 2d 36 31   IMP: R-12275-61
1e7e0 33 33 38 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  338 */.         
1e7f0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
1e800 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20  to_error;.      
1e810 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20    }.        if( 
1e820 76 3c 70 4d 65 6d 2d 3e 75 2e 69 2b 31 20 29 7b  v<pMem->u.i+1 ){
1e830 0a 20 20 20 20 20 20 20 20 20 20 76 20 3d 20 70  .          v = p
1e840 4d 65 6d 2d 3e 75 2e 69 20 2b 20 31 3b 0a 20 20  Mem->u.i + 1;.  
1e850 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
1e860 70 4d 65 6d 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20  pMem->u.i = v;. 
1e870 20 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20       }.#endif.. 
1e880 20 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65       sqlite3Btre
1e890 65 53 65 74 43 61 63 68 65 64 52 6f 77 69 64 28  eSetCachedRowid(
1e8a0 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 76 3c 4d  pC->pCursor, v<M
1e8b0 41 58 5f 52 4f 57 49 44 20 3f 20 76 2b 31 20 3a  AX_ROWID ? v+1 :
1e8c0 20 30 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69   0);.    }.    i
1e8d0 66 28 20 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d  f( pC->useRandom
1e8e0 52 6f 77 69 64 20 29 7b 0a 20 20 20 20 20 20 2f  Rowid ){.      /
1e8f0 2a 20 49 4d 50 4c 45 4d 45 4e 54 41 54 49 4f 4e  * IMPLEMENTATION
1e900 2d 4f 46 3a 20 52 2d 30 37 36 37 37 2d 34 31 38  -OF: R-07677-418
1e910 38 31 20 49 66 20 74 68 65 20 6c 61 72 67 65 73  81 If the larges
1e920 74 20 52 4f 57 49 44 20 69 73 20 65 71 75 61 6c  t ROWID is equal
1e930 20 74 6f 20 74 68 65 0a 20 20 20 20 20 20 2a 2a   to the.      **
1e940 20 6c 61 72 67 65 73 74 20 70 6f 73 73 69 62 6c   largest possibl
1e950 65 20 69 6e 74 65 67 65 72 20 28 39 32 32 33 33  e integer (92233
1e960 37 32 30 33 36 38 35 34 37 37 35 38 30 37 29 20  72036854775807) 
1e970 74 68 65 6e 20 74 68 65 20 64 61 74 61 62 61 73  then the databas
1e980 65 0a 20 20 20 20 20 20 2a 2a 20 65 6e 67 69 6e  e.      ** engin
1e990 65 20 73 74 61 72 74 73 20 70 69 63 6b 69 6e 67  e starts picking
1e9a0 20 70 6f 73 69 74 69 76 65 20 63 61 6e 64 69 64   positive candid
1e9b0 61 74 65 20 52 4f 57 49 44 73 20 61 74 20 72 61  ate ROWIDs at ra
1e9c0 6e 64 6f 6d 20 75 6e 74 69 6c 0a 20 20 20 20 20  ndom until.     
1e9d0 20 2a 2a 20 69 74 20 66 69 6e 64 73 20 6f 6e 65   ** it finds one
1e9e0 20 74 68 61 74 20 69 73 20 6e 6f 74 20 70 72 65   that is not pre
1e9f0 76 69 6f 75 73 6c 79 20 75 73 65 64 2e 20 2a 2f  viously used. */
1ea00 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
1ea10 4f 70 2d 3e 70 33 3d 3d 30 20 29 3b 20 20 2f 2a  Op->p3==0 );  /*
1ea20 20 57 65 20 63 61 6e 6e 6f 74 20 62 65 20 69 6e   We cannot be in
1ea30 20 72 61 6e 64 6f 6d 20 72 6f 77 69 64 20 6d 6f   random rowid mo
1ea40 64 65 20 69 66 20 74 68 69 73 20 69 73 0a 20 20  de if this is.  
1ea50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ea60 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 61 6e             ** an
1ea70 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 74   AUTOINCREMENT t
1ea80 61 62 6c 65 2e 20 2a 2f 0a 20 20 20 20 20 20 2f  able. */.      /
1ea90 2a 20 6f 6e 20 74 68 65 20 66 69 72 73 74 20 61  * on the first a
1eaa0 74 74 65 6d 70 74 2c 20 73 69 6d 70 6c 79 20 64  ttempt, simply d
1eab0 6f 20 6f 6e 65 20 6d 6f 72 65 20 74 68 61 6e 20  o one more than 
1eac0 70 72 65 76 69 6f 75 73 20 2a 2f 0a 20 20 20 20  previous */.    
1ead0 20 20 76 20 3d 20 64 62 2d 3e 6c 61 73 74 52 6f    v = db->lastRo
1eae0 77 69 64 3b 0a 20 20 20 20 20 20 76 20 26 3d 20  wid;.      v &= 
1eaf0 28 4d 41 58 5f 52 4f 57 49 44 3e 3e 31 29 3b 20  (MAX_ROWID>>1); 
1eb00 2f 2a 20 65 6e 73 75 72 65 20 64 6f 65 73 6e 27  /* ensure doesn'
1eb10 74 20 67 6f 20 6e 65 67 61 74 69 76 65 20 2a 2f  t go negative */
1eb20 0a 20 20 20 20 20 20 76 2b 2b 3b 20 2f 2a 20 65  .      v++; /* e
1eb30 6e 73 75 72 65 20 6e 6f 6e 2d 7a 65 72 6f 20 2a  nsure non-zero *
1eb40 2f 0a 20 20 20 20 20 20 63 6e 74 20 3d 20 30 3b  /.      cnt = 0;
1eb50 0a 20 20 20 20 20 20 77 68 69 6c 65 28 20 20 20  .      while(   
1eb60 28 28 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74  ((rc = sqlite3Bt
1eb70 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65  reeMovetoUnpacke
1eb80 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 30  d(pC->pCursor, 0
1eb90 2c 20 28 75 36 34 29 76 2c 0a 20 20 20 20 20 20  , (u64)v,.      
1eba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ebb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ebc0 20 20 20 20 20 20 20 20 20 20 20 30 2c 20 26 72             0, &r
1ebd0 65 73 29 29 3d 3d 53 51 4c 49 54 45 5f 4f 4b 29  es))==SQLITE_OK)
1ebe0 0a 20 20 20 20 20 20 20 20 20 20 20 20 26 26 20  .            && 
1ebf0 28 72 65 73 3d 3d 30 29 0a 20 20 20 20 20 20 20  (res==0).       
1ec00 20 20 20 20 20 26 26 20 28 2b 2b 63 6e 74 3c 31       && (++cnt<1
1ec10 30 30 29 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a  00)){.        /*
1ec20 20 63 6f 6c 6c 69 73 69 6f 6e 20 2d 20 74 72 79   collision - try
1ec30 20 61 6e 6f 74 68 65 72 20 72 61 6e 64 6f 6d 20   another random 
1ec40 72 6f 77 69 64 20 2a 2f 0a 20 20 20 20 20 20 20  rowid */.       
1ec50 20 73 71 6c 69 74 65 33 5f 72 61 6e 64 6f 6d 6e   sqlite3_randomn
1ec60 65 73 73 28 73 69 7a 65 6f 66 28 76 29 2c 20 26  ess(sizeof(v), &
1ec70 76 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  v);.        if( 
1ec80 63 6e 74 3c 35 20 29 7b 0a 20 20 20 20 20 20 20  cnt<5 ){.       
1ec90 20 20 20 2f 2a 20 74 72 79 20 22 73 6d 61 6c 6c     /* try "small
1eca0 22 20 72 61 6e 64 6f 6d 20 72 6f 77 69 64 73 20  " random rowids 
1ecb0 66 6f 72 20 74 68 65 20 69 6e 69 74 69 61 6c 20  for the initial 
1ecc0 61 74 74 65 6d 70 74 73 20 2a 2f 0a 20 20 20 20  attempts */.    
1ecd0 20 20 20 20 20 20 76 20 26 3d 20 30 78 66 66 66        v &= 0xfff
1ece0 66 66 66 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c  fff;.        }el
1ecf0 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 76 20  se{.          v 
1ed00 26 3d 20 28 4d 41 58 5f 52 4f 57 49 44 3e 3e 31  &= (MAX_ROWID>>1
1ed10 29 3b 20 2f 2a 20 65 6e 73 75 72 65 20 64 6f 65  ); /* ensure doe
1ed20 73 6e 27 74 20 67 6f 20 6e 65 67 61 74 69 76 65  sn't go negative
1ed30 20 2a 2f 0a 20 20 20 20 20 20 20 20 7d 0a 20 20   */.        }.  
1ed40 20 20 20 20 20 20 76 2b 2b 3b 20 2f 2a 20 65 6e        v++; /* en
1ed50 73 75 72 65 20 6e 6f 6e 2d 7a 65 72 6f 20 2a 2f  sure non-zero */
1ed60 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69  .      }.      i
1ed70 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
1ed80 20 26 26 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20   && res==0 ){.  
1ed90 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
1eda0 45 5f 46 55 4c 4c 3b 20 20 20 2f 2a 20 49 4d 50  E_FULL;   /* IMP
1edb0 3a 20 52 2d 33 38 32 31 39 2d 35 33 30 30 32 20  : R-38219-53002 
1edc0 2a 2f 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20  */.        goto 
1edd0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
1ede0 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  or;.      }.    
1edf0 20 20 61 73 73 65 72 74 28 20 76 3e 30 20 29 3b    assert( v>0 );
1ee00 20 20 2f 2a 20 45 56 3a 20 52 2d 34 30 38 31 32    /* EV: R-40812
1ee10 2d 30 33 35 37 30 20 2a 2f 0a 20 20 20 20 7d 0a  -03570 */.    }.
1ee20 20 20 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56      pC->rowidIsV
1ee30 61 6c 69 64 20 3d 20 30 3b 0a 20 20 20 20 70 43  alid = 0;.    pC
1ee40 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
1ee50 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e 63 61   = 0;.    pC->ca
1ee60 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
1ee70 45 5f 53 54 41 4c 45 3b 0a 20 20 7d 0a 20 20 70  E_STALE;.  }.  p
1ee80 4f 75 74 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20 20  Out->u.i = v;.  
1ee90 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
1eea0 6f 64 65 3a 20 49 6e 73 65 72 74 20 50 31 20 50  ode: Insert P1 P
1eeb0 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a  2 P3 P4 P5.**.**
1eec0 20 57 72 69 74 65 20 61 6e 20 65 6e 74 72 79 20   Write an entry 
1eed0 69 6e 74 6f 20 74 68 65 20 74 61 62 6c 65 20 6f  into the table o
1eee0 66 20 63 75 72 73 6f 72 20 50 31 2e 20 20 41 20  f cursor P1.  A 
1eef0 6e 65 77 20 65 6e 74 72 79 20 69 73 0a 2a 2a 20  new entry is.** 
1ef00 63 72 65 61 74 65 64 20 69 66 20 69 74 20 64 6f  created if it do
1ef10 65 73 6e 27 74 20 61 6c 72 65 61 64 79 20 65 78  esn't already ex
1ef20 69 73 74 20 6f 72 20 74 68 65 20 64 61 74 61 20  ist or the data 
1ef30 66 6f 72 20 61 6e 20 65 78 69 73 74 69 6e 67 0a  for an existing.
1ef40 2a 2a 20 65 6e 74 72 79 20 69 73 20 6f 76 65 72  ** entry is over
1ef50 77 72 69 74 74 65 6e 2e 20 20 54 68 65 20 64 61  written.  The da
1ef60 74 61 20 69 73 20 74 68 65 20 76 61 6c 75 65 20  ta is the value 
1ef70 4d 45 4d 5f 42 6c 6f 62 20 73 74 6f 72 65 64 20  MEM_Blob stored 
1ef80 69 6e 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 6e  in register.** n
1ef90 75 6d 62 65 72 20 50 32 2e 20 54 68 65 20 6b 65  umber P2. The ke
1efa0 79 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72  y is stored in r
1efb0 65 67 69 73 74 65 72 20 50 33 2e 20 54 68 65 20  egister P3. The 
1efc0 6b 65 79 20 6d 75 73 74 0a 2a 2a 20 62 65 20 61  key must.** be a
1efd0 20 4d 45 4d 5f 49 6e 74 2e 0a 2a 2a 0a 2a 2a 20   MEM_Int..**.** 
1efe0 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43  If the OPFLAG_NC
1eff0 48 41 4e 47 45 20 66 6c 61 67 20 6f 66 20 50 35  HANGE flag of P5
1f000 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 74 68   is set, then th
1f010 65 20 72 6f 77 20 63 68 61 6e 67 65 20 63 6f 75  e row change cou
1f020 6e 74 20 69 73 0a 2a 2a 20 69 6e 63 72 65 6d 65  nt is.** increme
1f030 6e 74 65 64 20 28 6f 74 68 65 72 77 69 73 65 20  nted (otherwise 
1f040 6e 6f 74 29 2e 20 20 49 66 20 74 68 65 20 4f 50  not).  If the OP
1f050 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44 20 66  FLAG_LASTROWID f
1f060 6c 61 67 20 6f 66 20 50 35 20 69 73 20 73 65 74  lag of P5 is set
1f070 2c 0a 2a 2a 20 74 68 65 6e 20 72 6f 77 69 64 20  ,.** then rowid 
1f080 69 73 20 73 74 6f 72 65 64 20 66 6f 72 20 73 75  is stored for su
1f090 62 73 65 71 75 65 6e 74 20 72 65 74 75 72 6e 20  bsequent return 
1f0a0 62 79 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65  by the.** sqlite
1f0b0 33 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f  3_last_insert_ro
1f0c0 77 69 64 28 29 20 66 75 6e 63 74 69 6f 6e 20 28  wid() function (
1f0d0 6f 74 68 65 72 77 69 73 65 20 69 74 20 69 73 20  otherwise it is 
1f0e0 75 6e 6d 6f 64 69 66 69 65 64 29 2e 0a 2a 2a 0a  unmodified)..**.
1f0f0 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47  ** If the OPFLAG
1f100 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20 66  _USESEEKRESULT f
1f110 6c 61 67 20 6f 66 20 50 35 20 69 73 20 73 65 74  lag of P5 is set
1f120 20 61 6e 64 20 69 66 20 74 68 65 20 72 65 73 75   and if the resu
1f130 6c 74 20 6f 66 0a 2a 2a 20 74 68 65 20 6c 61 73  lt of.** the las
1f140 74 20 73 65 65 6b 20 6f 70 65 72 61 74 69 6f 6e  t seek operation
1f150 20 28 4f 50 5f 4e 6f 74 45 78 69 73 74 73 29 20   (OP_NotExists) 
1f160 77 61 73 20 61 20 73 75 63 63 65 73 73 2c 20 74  was a success, t
1f170 68 65 6e 20 74 68 69 73 0a 2a 2a 20 6f 70 65 72  hen this.** oper
1f180 61 74 69 6f 6e 20 77 69 6c 6c 20 6e 6f 74 20 61  ation will not a
1f190 74 74 65 6d 70 74 20 74 6f 20 66 69 6e 64 20 74  ttempt to find t
1f1a0 68 65 20 61 70 70 72 6f 70 72 69 61 74 65 20 72  he appropriate r
1f1b0 6f 77 20 62 65 66 6f 72 65 20 64 6f 69 6e 67 0a  ow before doing.
1f1c0 2a 2a 20 74 68 65 20 69 6e 73 65 72 74 20 62 75  ** the insert bu
1f1d0 74 20 77 69 6c 6c 20 69 6e 73 74 65 61 64 20 6f  t will instead o
1f1e0 76 65 72 77 72 69 74 65 20 74 68 65 20 72 6f 77  verwrite the row
1f1f0 20 74 68 61 74 20 74 68 65 20 63 75 72 73 6f 72   that the cursor
1f200 20 69 73 0a 2a 2a 20 63 75 72 72 65 6e 74 6c 79   is.** currently
1f210 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2e 20 20 50   pointing to.  P
1f220 72 65 73 75 6d 61 62 6c 79 2c 20 74 68 65 20 70  resumably, the p
1f230 72 69 6f 72 20 4f 50 5f 4e 6f 74 45 78 69 73 74  rior OP_NotExist
1f240 73 20 6f 70 63 6f 64 65 0a 2a 2a 20 68 61 73 20  s opcode.** has 
1f250 61 6c 72 65 61 64 79 20 70 6f 73 69 74 69 6f 6e  already position
1f260 65 64 20 74 68 65 20 63 75 72 73 6f 72 20 63 6f  ed the cursor co
1f270 72 72 65 63 74 6c 79 2e 20 20 54 68 69 73 20 69  rrectly.  This i
1f280 73 20 61 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f  s an optimizatio
1f290 6e 0a 2a 2a 20 74 68 61 74 20 62 6f 6f 73 74 73  n.** that boosts
1f2a0 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 62 79 20   performance by 
1f2b0 61 76 6f 69 64 69 6e 67 20 72 65 64 75 6e 64 61  avoiding redunda
1f2c0 6e 74 20 73 65 65 6b 73 2e 0a 2a 2a 0a 2a 2a 20  nt seeks..**.** 
1f2d0 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 49 53  If the OPFLAG_IS
1f2e0 55 50 44 41 54 45 20 66 6c 61 67 20 69 73 20 73  UPDATE flag is s
1f2f0 65 74 2c 20 74 68 65 6e 20 74 68 69 73 20 6f 70  et, then this op
1f300 63 6f 64 65 20 69 73 20 70 61 72 74 20 6f 66 20  code is part of 
1f310 61 6e 0a 2a 2a 20 55 50 44 41 54 45 20 6f 70 65  an.** UPDATE ope
1f320 72 61 74 69 6f 6e 2e 20 20 4f 74 68 65 72 77 69  ration.  Otherwi
1f330 73 65 20 28 69 66 20 74 68 65 20 66 6c 61 67 20  se (if the flag 
1f340 69 73 20 63 6c 65 61 72 29 20 74 68 65 6e 20 74  is clear) then t
1f350 68 69 73 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73  his opcode.** is
1f360 20 70 61 72 74 20 6f 66 20 61 6e 20 49 4e 53 45   part of an INSE
1f370 52 54 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20 54  RT operation.  T
1f380 68 65 20 64 69 66 66 65 72 65 6e 63 65 20 69 73  he difference is
1f390 20 6f 6e 6c 79 20 69 6d 70 6f 72 74 61 6e 74 20   only important 
1f3a0 74 6f 0a 2a 2a 20 74 68 65 20 75 70 64 61 74 65  to.** the update
1f3b0 20 68 6f 6f 6b 2e 0a 2a 2a 0a 2a 2a 20 50 61 72   hook..**.** Par
1f3c0 61 6d 65 74 65 72 20 50 34 20 6d 61 79 20 70 6f  ameter P4 may po
1f3d0 69 6e 74 20 74 6f 20 61 20 73 74 72 69 6e 67 20  int to a string 
1f3e0 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74  containing the t
1f3f0 61 62 6c 65 2d 6e 61 6d 65 2c 20 6f 72 0a 2a 2a  able-name, or.**
1f400 20 6d 61 79 20 62 65 20 4e 55 4c 4c 2e 20 49 66   may be NULL. If
1f410 20 69 74 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c   it is not NULL,
1f420 20 74 68 65 6e 20 74 68 65 20 75 70 64 61 74 65   then the update
1f430 2d 68 6f 6f 6b 20 0a 2a 2a 20 28 73 71 6c 69 74  -hook .** (sqlit
1f440 65 33 2e 78 55 70 64 61 74 65 43 61 6c 6c 62 61  e3.xUpdateCallba
1f450 63 6b 29 20 69 73 20 69 6e 76 6f 6b 65 64 20 66  ck) is invoked f
1f460 6f 6c 6c 6f 77 69 6e 67 20 61 20 73 75 63 63 65  ollowing a succe
1f470 73 73 66 75 6c 20 69 6e 73 65 72 74 2e 0a 2a 2a  ssful insert..**
1f480 0a 2a 2a 20 28 57 41 52 4e 49 4e 47 2f 54 4f 44  .** (WARNING/TOD
1f490 4f 3a 20 49 66 20 50 31 20 69 73 20 61 20 70 73  O: If P1 is a ps
1f4a0 65 75 64 6f 2d 63 75 72 73 6f 72 20 61 6e 64 20  eudo-cursor and 
1f4b0 50 32 20 69 73 20 64 79 6e 61 6d 69 63 61 6c 6c  P2 is dynamicall
1f4c0 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 65 64 2c 20  y.** allocated, 
1f4d0 74 68 65 6e 20 6f 77 6e 65 72 73 68 69 70 20 6f  then ownership o
1f4e0 66 20 50 32 20 69 73 20 74 72 61 6e 73 66 65 72  f P2 is transfer
1f4f0 72 65 64 20 74 6f 20 74 68 65 20 70 73 65 75 64  red to the pseud
1f500 6f 2d 63 75 72 73 6f 72 0a 2a 2a 20 61 6e 64 20  o-cursor.** and 
1f510 72 65 67 69 73 74 65 72 20 50 32 20 62 65 63 6f  register P2 beco
1f520 6d 65 73 20 65 70 68 65 6d 65 72 61 6c 2e 20 20  mes ephemeral.  
1f530 49 66 20 74 68 65 20 63 75 72 73 6f 72 20 69 73  If the cursor is
1f540 20 63 68 61 6e 67 65 64 2c 20 74 68 65 0a 2a 2a   changed, the.**
1f550 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74   value of regist
1f560 65 72 20 50 32 20 77 69 6c 6c 20 74 68 65 6e 20  er P2 will then 
1f570 63 68 61 6e 67 65 2e 20 20 4d 61 6b 65 20 73 75  change.  Make su
1f580 72 65 20 74 68 69 73 20 64 6f 65 73 20 6e 6f 74  re this does not
1f590 0a 2a 2a 20 63 61 75 73 65 20 61 6e 79 20 70 72  .** cause any pr
1f5a0 6f 62 6c 65 6d 73 2e 29 0a 2a 2a 0a 2a 2a 20 54  oblems.).**.** T
1f5b0 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
1f5c0 6f 6e 6c 79 20 77 6f 72 6b 73 20 6f 6e 20 74 61  only works on ta
1f5d0 62 6c 65 73 2e 20 20 54 68 65 20 65 71 75 69 76  bles.  The equiv
1f5e0 61 6c 65 6e 74 20 69 6e 73 74 72 75 63 74 69 6f  alent instructio
1f5f0 6e 0a 2a 2a 20 66 6f 72 20 69 6e 64 69 63 65 73  n.** for indices
1f600 20 69 73 20 4f 50 5f 49 64 78 49 6e 73 65 72 74   is OP_IdxInsert
1f610 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
1f620 49 6e 73 65 72 74 49 6e 74 20 50 31 20 50 32 20  InsertInt P1 P2 
1f630 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54  P3 P4 P5.**.** T
1f640 68 69 73 20 77 6f 72 6b 73 20 65 78 61 63 74 6c  his works exactl
1f650 79 20 6c 69 6b 65 20 4f 50 5f 49 6e 73 65 72 74  y like OP_Insert
1f660 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65   except that the
1f670 20 6b 65 79 20 69 73 20 74 68 65 0a 2a 2a 20 69   key is the.** i
1f680 6e 74 65 67 65 72 20 76 61 6c 75 65 20 50 33 2c  nteger value P3,
1f690 20 6e 6f 74 20 74 68 65 20 76 61 6c 75 65 20 6f   not the value o
1f6a0 66 20 74 68 65 20 69 6e 74 65 67 65 72 20 73 74  f the integer st
1f6b0 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
1f6c0 20 50 33 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P3..*/.case OP_
1f6d0 49 6e 73 65 72 74 3a 20 0a 63 61 73 65 20 4f 50  Insert: .case OP
1f6e0 5f 49 6e 73 65 72 74 49 6e 74 3a 20 7b 0a 20 20  _InsertInt: {.  
1f6f0 4d 65 6d 20 2a 70 44 61 74 61 3b 20 20 20 20 20  Mem *pData;     
1f700 20 20 2f 2a 20 4d 45 4d 20 63 65 6c 6c 20 68 6f    /* MEM cell ho
1f710 6c 64 69 6e 67 20 64 61 74 61 20 66 6f 72 20 74  lding data for t
1f720 68 65 20 72 65 63 6f 72 64 20 74 6f 20 62 65 20  he record to be 
1f730 69 6e 73 65 72 74 65 64 20 2a 2f 0a 20 20 4d 65  inserted */.  Me
1f740 6d 20 2a 70 4b 65 79 3b 20 20 20 20 20 20 20 20  m *pKey;        
1f750 2f 2a 20 4d 45 4d 20 63 65 6c 6c 20 68 6f 6c 64  /* MEM cell hold
1f760 69 6e 67 20 6b 65 79 20 20 66 6f 72 20 74 68 65  ing key  for the
1f770 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 36 34   record */.  i64
1f780 20 69 4b 65 79 3b 20 20 20 20 20 20 20 20 20 2f   iKey;         /
1f790 2a 20 54 68 65 20 69 6e 74 65 67 65 72 20 52 4f  * The integer RO
1f7a0 57 49 44 20 6f 72 20 6b 65 79 20 66 6f 72 20 74  WID or key for t
1f7b0 68 65 20 72 65 63 6f 72 64 20 74 6f 20 62 65 20  he record to be 
1f7c0 69 6e 73 65 72 74 65 64 20 2a 2f 0a 20 20 56 64  inserted */.  Vd
1f7d0 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 20 20 20  beCursor *pC;   
1f7e0 2f 2a 20 43 75 72 73 6f 72 20 74 6f 20 74 61 62  /* Cursor to tab
1f7f0 6c 65 20 69 6e 74 6f 20 77 68 69 63 68 20 69 6e  le into which in
1f800 73 65 72 74 20 69 73 20 77 72 69 74 74 65 6e 20  sert is written 
1f810 2a 2f 0a 20 20 69 6e 74 20 6e 5a 65 72 6f 3b 20  */.  int nZero; 
1f820 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1f830 20 6f 66 20 7a 65 72 6f 2d 62 79 74 65 73 20 74   of zero-bytes t
1f840 6f 20 61 70 70 65 6e 64 20 2a 2f 0a 20 20 69 6e  o append */.  in
1f850 74 20 73 65 65 6b 52 65 73 75 6c 74 3b 20 20 20  t seekResult;   
1f860 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20 70 72 69  /* Result of pri
1f870 6f 72 20 73 65 65 6b 20 6f 72 20 30 20 69 66 20  or seek or 0 if 
1f880 6e 6f 20 55 53 45 53 45 45 4b 52 45 53 55 4c 54  no USESEEKRESULT
1f890 20 66 6c 61 67 20 2a 2f 0a 20 20 63 6f 6e 73 74   flag */.  const
1f8a0 20 63 68 61 72 20 2a 7a 44 62 3b 20 20 2f 2a 20   char *zDb;  /* 
1f8b0 64 61 74 61 62 61 73 65 20 6e 61 6d 65 20 2d 20  database name - 
1f8c0 75 73 65 64 20 62 79 20 74 68 65 20 75 70 64 61  used by the upda
1f8d0 74 65 20 68 6f 6f 6b 20 2a 2f 0a 20 20 63 6f 6e  te hook */.  con
1f8e0 73 74 20 63 68 61 72 20 2a 7a 54 62 6c 3b 20 2f  st char *zTbl; /
1f8f0 2a 20 54 61 62 6c 65 20 6e 61 6d 65 20 2d 20 75  * Table name - u
1f900 73 65 64 20 62 79 20 74 68 65 20 6f 70 64 61 74  sed by the opdat
1f910 65 20 68 6f 6f 6b 20 2a 2f 0a 20 20 69 6e 74 20  e hook */.  int 
1f920 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  op;           /*
1f930 20 4f 70 63 6f 64 65 20 66 6f 72 20 75 70 64 61   Opcode for upda
1f940 74 65 20 68 6f 6f 6b 3a 20 53 51 4c 49 54 45 5f  te hook: SQLITE_
1f950 55 50 44 41 54 45 20 6f 72 20 53 51 4c 49 54 45  UPDATE or SQLITE
1f960 5f 49 4e 53 45 52 54 20 2a 2f 0a 0a 20 20 70 44  _INSERT */..  pD
1f970 61 74 61 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  ata = &aMem[pOp-
1f980 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p2];.  assert( 
1f990 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
1f9a0 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
1f9b0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 6d 65   );.  assert( me
1f9c0 6d 49 73 56 61 6c 69 64 28 70 44 61 74 61 29 20  mIsValid(pData) 
1f9d0 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
1f9e0 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
1f9f0 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
1fa00 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43    assert( pC->pC
1fa10 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 61 73  ursor!=0 );.  as
1fa20 73 65 72 74 28 20 70 43 2d 3e 70 73 65 75 64 6f  sert( pC->pseudo
1fa30 54 61 62 6c 65 52 65 67 3d 3d 30 20 29 3b 0a 20  TableReg==0 );. 
1fa40 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54   assert( pC->isT
1fa50 61 62 6c 65 20 29 3b 0a 20 20 52 45 47 49 53 54  able );.  REGIST
1fa60 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32  ER_TRACE(pOp->p2
1fa70 2c 20 70 44 61 74 61 29 3b 0a 0a 20 20 69 66 28  , pData);..  if(
1fa80 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
1fa90 5f 49 6e 73 65 72 74 20 29 7b 0a 20 20 20 20 70  _Insert ){.    p
1faa0 4b 65 79 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Key = &aMem[pOp-
1fab0 3e 70 33 5d 3b 0a 20 20 20 20 61 73 73 65 72 74  >p3];.    assert
1fac0 28 20 70 4b 65 79 2d 3e 66 6c 61 67 73 20 26 20  ( pKey->flags & 
1fad0 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 20 20 61  MEM_Int );.    a
1fae0 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
1faf0 64 28 70 4b 65 79 29 20 29 3b 0a 20 20 20 20 52  d(pKey) );.    R
1fb00 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
1fb10 70 2d 3e 70 33 2c 20 70 4b 65 79 29 3b 0a 20 20  p->p3, pKey);.  
1fb20 20 20 69 4b 65 79 20 3d 20 70 4b 65 79 2d 3e 75    iKey = pKey->u
1fb30 2e 69 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  .i;.  }else{.   
1fb40 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70   assert( pOp->op
1fb50 63 6f 64 65 3d 3d 4f 50 5f 49 6e 73 65 72 74 49  code==OP_InsertI
1fb60 6e 74 20 29 3b 0a 20 20 20 20 69 4b 65 79 20 3d  nt );.    iKey =
1fb70 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 7d 0a 0a 20   pOp->p3;.  }.. 
1fb80 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f   if( pOp->p5 & O
1fb90 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29 20  PFLAG_NCHANGE ) 
1fba0 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20  p->nChange++;.  
1fbb0 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50  if( pOp->p5 & OP
1fbc0 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44 20 29  FLAG_LASTROWID )
1fbd0 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d   db->lastRowid =
1fbe0 20 69 4b 65 79 3b 0a 20 20 69 66 28 20 70 44 61   iKey;.  if( pDa
1fbf0 74 61 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  ta->flags & MEM_
1fc00 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 70 44 61 74  Null ){.    pDat
1fc10 61 2d 3e 7a 20 3d 20 30 3b 0a 20 20 20 20 70 44  a->z = 0;.    pD
1fc20 61 74 61 2d 3e 6e 20 3d 20 30 3b 0a 20 20 7d 65  ata->n = 0;.  }e
1fc30 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28  lse{.    assert(
1fc40 20 70 44 61 74 61 2d 3e 66 6c 61 67 73 20 26 20   pData->flags & 
1fc50 28 4d 45 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f 53 74  (MEM_Blob|MEM_St
1fc60 72 29 20 29 3b 0a 20 20 7d 0a 20 20 73 65 65 6b  r) );.  }.  seek
1fc70 52 65 73 75 6c 74 20 3d 20 28 28 70 4f 70 2d 3e  Result = ((pOp->
1fc80 70 35 20 26 20 4f 50 46 4c 41 47 5f 55 53 45 53  p5 & OPFLAG_USES
1fc90 45 45 4b 52 45 53 55 4c 54 29 20 3f 20 70 43 2d  EEKRESULT) ? pC-
1fca0 3e 73 65 65 6b 52 65 73 75 6c 74 20 3a 20 30 29  >seekResult : 0)
1fcb0 3b 0a 20 20 69 66 28 20 70 44 61 74 61 2d 3e 66  ;.  if( pData->f
1fcc0 6c 61 67 73 20 26 20 4d 45 4d 5f 5a 65 72 6f 20  lags & MEM_Zero 
1fcd0 29 7b 0a 20 20 20 20 6e 5a 65 72 6f 20 3d 20 70  ){.    nZero = p
1fce0 44 61 74 61 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a 20  Data->u.nZero;. 
1fcf0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 6e 5a 65 72   }else{.    nZer
1fd00 6f 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 73 71 6c  o = 0;.  }.  sql
1fd10 69 74 65 33 42 74 72 65 65 53 65 74 43 61 63 68  ite3BtreeSetCach
1fd20 65 64 52 6f 77 69 64 28 70 43 2d 3e 70 43 75 72  edRowid(pC->pCur
1fd30 73 6f 72 2c 20 30 29 3b 0a 20 20 72 63 20 3d 20  sor, 0);.  rc = 
1fd40 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e 73 65  sqlite3BtreeInse
1fd50 72 74 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20  rt(pC->pCursor, 
1fd60 30 2c 20 69 4b 65 79 2c 0a 20 20 20 20 20 20 20  0, iKey,.       
1fd70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fd80 20 20 20 70 44 61 74 61 2d 3e 7a 2c 20 70 44 61     pData->z, pDa
1fd90 74 61 2d 3e 6e 2c 20 6e 5a 65 72 6f 2c 0a 20 20  ta->n, nZero,.  
1fda0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fdb0 20 20 20 20 20 20 20 20 70 4f 70 2d 3e 70 35 20          pOp->p5 
1fdc0 26 20 4f 50 46 4c 41 47 5f 41 50 50 45 4e 44 2c  & OPFLAG_APPEND,
1fdd0 20 73 65 65 6b 52 65 73 75 6c 74 0a 20 20 29 3b   seekResult.  );
1fde0 0a 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61  .  pC->rowidIsVa
1fdf0 6c 69 64 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 64  lid = 0;.  pC->d
1fe00 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20  eferredMoveto = 
1fe10 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74  0;.  pC->cacheSt
1fe20 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
1fe30 4c 45 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65  LE;..  /* Invoke
1fe40 20 74 68 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b   the update-hook
1fe50 20 69 66 20 72 65 71 75 69 72 65 64 2e 20 2a 2f   if required. */
1fe60 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54  .  if( rc==SQLIT
1fe70 45 5f 4f 4b 20 26 26 20 64 62 2d 3e 78 55 70 64  E_OK && db->xUpd
1fe80 61 74 65 43 61 6c 6c 62 61 63 6b 20 26 26 20 70  ateCallback && p
1fe90 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20 20 20  Op->p4.z ){.    
1fea0 7a 44 62 20 3d 20 64 62 2d 3e 61 44 62 5b 70 43  zDb = db->aDb[pC
1feb0 2d 3e 69 44 62 5d 2e 7a 4e 61 6d 65 3b 0a 20 20  ->iDb].zName;.  
1fec0 20 20 7a 54 62 6c 20 3d 20 70 4f 70 2d 3e 70 34    zTbl = pOp->p4
1fed0 2e 7a 3b 0a 20 20 20 20 6f 70 20 3d 20 28 28 70  .z;.    op = ((p
1fee0 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f  Op->p5 & OPFLAG_
1fef0 49 53 55 50 44 41 54 45 29 20 3f 20 53 51 4c 49  ISUPDATE) ? SQLI
1ff00 54 45 5f 55 50 44 41 54 45 20 3a 20 53 51 4c 49  TE_UPDATE : SQLI
1ff10 54 45 5f 49 4e 53 45 52 54 29 3b 0a 20 20 20 20  TE_INSERT);.    
1ff20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61  assert( pC->isTa
1ff30 62 6c 65 20 29 3b 0a 20 20 20 20 64 62 2d 3e 78  ble );.    db->x
1ff40 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 28 64  UpdateCallback(d
1ff50 62 2d 3e 70 55 70 64 61 74 65 41 72 67 2c 20 6f  b->pUpdateArg, o
1ff60 70 2c 20 7a 44 62 2c 20 7a 54 62 6c 2c 20 69 4b  p, zDb, zTbl, iK
1ff70 65 79 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  ey);.    assert(
1ff80 20 70 43 2d 3e 69 44 62 3e 3d 30 20 29 3b 0a 20   pC->iDb>=0 );. 
1ff90 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
1ffa0 2a 20 4f 70 63 6f 64 65 3a 20 44 65 6c 65 74 65  * Opcode: Delete
1ffb0 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a   P1 P2 * P4 *.**
1ffc0 0a 2a 2a 20 44 65 6c 65 74 65 20 74 68 65 20 72  .** Delete the r
1ffd0 65 63 6f 72 64 20 61 74 20 77 68 69 63 68 20 74  ecord at which t
1ffe0 68 65 20 50 31 20 63 75 72 73 6f 72 20 69 73 20  he P1 cursor is 
1fff0 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69  currently pointi
20000 6e 67 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 75  ng..**.** The cu
20010 72 73 6f 72 20 77 69 6c 6c 20 62 65 20 6c 65 66  rsor will be lef
20020 74 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 65 69  t pointing at ei
20030 74 68 65 72 20 74 68 65 20 6e 65 78 74 20 6f 72  ther the next or
20040 20 74 68 65 20 70 72 65 76 69 6f 75 73 0a 2a 2a   the previous.**
20050 20 72 65 63 6f 72 64 20 69 6e 20 74 68 65 20 74   record in the t
20060 61 62 6c 65 2e 20 49 66 20 69 74 20 69 73 20 6c  able. If it is l
20070 65 66 74 20 70 6f 69 6e 74 69 6e 67 20 61 74 20  eft pointing at 
20080 74 68 65 20 6e 65 78 74 20 72 65 63 6f 72 64 2c  the next record,
20090 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20 6e 65 78   then.** the nex
200a0 74 20 4e 65 78 74 20 69 6e 73 74 72 75 63 74 69  t Next instructi
200b0 6f 6e 20 77 69 6c 6c 20 62 65 20 61 20 6e 6f 2d  on will be a no-
200c0 6f 70 2e 20 20 48 65 6e 63 65 20 69 74 20 69 73  op.  Hence it is
200d0 20 4f 4b 20 74 6f 20 64 65 6c 65 74 65 0a 2a 2a   OK to delete.**
200e0 20 61 20 72 65 63 6f 72 64 20 66 72 6f 6d 20 77   a record from w
200f0 69 74 68 69 6e 20 61 6e 20 4e 65 78 74 20 6c 6f  ithin an Next lo
20100 6f 70 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  op..**.** If the
20110 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20   OPFLAG_NCHANGE 
20120 66 6c 61 67 20 6f 66 20 50 32 20 69 73 20 73 65  flag of P2 is se
20130 74 2c 20 74 68 65 6e 20 74 68 65 20 72 6f 77 20  t, then the row 
20140 63 68 61 6e 67 65 20 63 6f 75 6e 74 20 69 73 0a  change count is.
20150 2a 2a 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 28  ** incremented (
20160 6f 74 68 65 72 77 69 73 65 20 6e 6f 74 29 2e 0a  otherwise not)..
20170 2a 2a 0a 2a 2a 20 50 31 20 6d 75 73 74 20 6e 6f  **.** P1 must no
20180 74 20 62 65 20 70 73 65 75 64 6f 2d 74 61 62 6c  t be pseudo-tabl
20190 65 2e 20 20 49 74 20 68 61 73 20 74 6f 20 62 65  e.  It has to be
201a0 20 61 20 72 65 61 6c 20 74 61 62 6c 65 20 77 69   a real table wi
201b0 74 68 0a 2a 2a 20 6d 75 6c 74 69 70 6c 65 20 72  th.** multiple r
201c0 6f 77 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34  ows..**.** If P4
201d0 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68   is not NULL, th
201e0 65 6e 20 69 74 20 69 73 20 74 68 65 20 6e 61 6d  en it is the nam
201f0 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74  e of the table t
20200 68 61 74 20 50 31 20 69 73 0a 2a 2a 20 70 6f 69  hat P1 is.** poi
20210 6e 74 69 6e 67 20 74 6f 2e 20 20 54 68 65 20 75  nting to.  The u
20220 70 64 61 74 65 20 68 6f 6f 6b 20 77 69 6c 6c 20  pdate hook will 
20230 62 65 20 69 6e 76 6f 6b 65 64 2c 20 69 66 20 69  be invoked, if i
20240 74 20 65 78 69 73 74 73 2e 0a 2a 2a 20 49 66 20  t exists..** If 
20250 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 20 74  P4 is not NULL t
20260 68 65 6e 20 74 68 65 20 50 31 20 63 75 72 73 6f  hen the P1 curso
20270 72 20 6d 75 73 74 20 68 61 76 65 20 62 65 65 6e  r must have been
20280 20 70 6f 73 69 74 69 6f 6e 65 64 0a 2a 2a 20 75   positioned.** u
20290 73 69 6e 67 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64  sing OP_NotFound
202a0 20 70 72 69 6f 72 20 74 6f 20 69 6e 76 6f 6b 69   prior to invoki
202b0 6e 67 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a  ng this opcode..
202c0 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 65 6c 65 74  */.case OP_Delet
202d0 65 3a 20 7b 0a 20 20 69 36 34 20 69 4b 65 79 3b  e: {.  i64 iKey;
202e0 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
202f0 43 3b 0a 0a 20 20 69 4b 65 79 20 3d 20 30 3b 0a  C;..  iKey = 0;.
20300 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
20310 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
20320 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
20330 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
20340 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
20350 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73  ( pC!=0 );.  ass
20360 65 72 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72  ert( pC->pCursor
20370 21 3d 30 20 29 3b 20 20 2f 2a 20 4f 6e 6c 79 20  !=0 );  /* Only 
20380 76 61 6c 69 64 20 66 6f 72 20 72 65 61 6c 20 74  valid for real t
20390 61 62 6c 65 73 2c 20 6e 6f 20 70 73 65 75 64 6f  ables, no pseudo
203a0 74 61 62 6c 65 73 20 2a 2f 0a 0a 20 20 2f 2a 20  tables */..  /* 
203b0 49 66 20 74 68 65 20 75 70 64 61 74 65 2d 68 6f  If the update-ho
203c0 6f 6b 20 77 69 6c 6c 20 62 65 20 69 6e 76 6f 6b  ok will be invok
203d0 65 64 2c 20 73 65 74 20 69 4b 65 79 20 74 6f 20  ed, set iKey to 
203e0 74 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68 65  the rowid of the
203f0 0a 20 20 2a 2a 20 72 6f 77 20 62 65 69 6e 67 20  .  ** row being 
20400 64 65 6c 65 74 65 64 2e 0a 20 20 2a 2f 0a 20 20  deleted..  */.  
20410 69 66 28 20 64 62 2d 3e 78 55 70 64 61 74 65 43  if( db->xUpdateC
20420 61 6c 6c 62 61 63 6b 20 26 26 20 70 4f 70 2d 3e  allback && pOp->
20430 70 34 2e 7a 20 29 7b 0a 20 20 20 20 61 73 73 65  p4.z ){.    asse
20440 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20  rt( pC->isTable 
20450 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
20460 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20  C->rowidIsValid 
20470 29 3b 20 20 2f 2a 20 6c 61 73 74 52 6f 77 69 64  );  /* lastRowid
20480 20 73 65 74 20 62 79 20 70 72 65 76 69 6f 75 73   set by previous
20490 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20 2a 2f 0a   OP_NotFound */.
204a0 20 20 20 20 69 4b 65 79 20 3d 20 70 43 2d 3e 6c      iKey = pC->l
204b0 61 73 74 52 6f 77 69 64 3b 0a 20 20 7d 0a 0a 20  astRowid;.  }.. 
204c0 20 2f 2a 20 54 68 65 20 4f 50 5f 44 65 6c 65 74   /* The OP_Delet
204d0 65 20 6f 70 63 6f 64 65 20 61 6c 77 61 79 73 20  e opcode always 
204e0 66 6f 6c 6c 6f 77 73 20 61 6e 20 4f 50 5f 4e 6f  follows an OP_No
204f0 74 45 78 69 73 74 73 20 6f 72 20 4f 50 5f 4c 61  tExists or OP_La
20500 73 74 20 6f 72 0a 20 20 2a 2a 20 4f 50 5f 43 6f  st or.  ** OP_Co
20510 6c 75 6d 6e 20 6f 6e 20 74 68 65 20 73 61 6d 65  lumn on the same
20520 20 74 61 62 6c 65 20 77 69 74 68 6f 75 74 20 61   table without a
20530 6e 79 20 69 6e 74 65 72 76 65 6e 69 6e 67 20 6f  ny intervening o
20540 70 65 72 61 74 69 6f 6e 73 20 74 68 61 74 0a 20  perations that. 
20550 20 2a 2a 20 6d 69 67 68 74 20 6d 6f 76 65 20 6f   ** might move o
20560 72 20 69 6e 76 61 6c 69 64 61 74 65 20 74 68 65  r invalidate the
20570 20 63 75 72 73 6f 72 2e 20 20 48 65 6e 63 65 20   cursor.  Hence 
20580 63 75 72 73 6f 72 20 70 43 20 69 73 20 61 6c 77  cursor pC is alw
20590 61 79 73 20 70 6f 69 6e 74 69 6e 67 0a 20 20 2a  ays pointing.  *
205a0 2a 20 74 6f 20 74 68 65 20 72 6f 77 20 74 6f 20  * to the row to 
205b0 62 65 20 64 65 6c 65 74 65 64 20 61 6e 64 20 74  be deleted and t
205c0 68 65 20 73 71 6c 69 74 65 33 56 64 62 65 43 75  he sqlite3VdbeCu
205d0 72 73 6f 72 4d 6f 76 65 74 6f 28 29 20 6f 70 65  rsorMoveto() ope
205e0 72 61 74 69 6f 6e 0a 20 20 2a 2a 20 62 65 6c 6f  ration.  ** belo
205f0 77 20 69 73 20 61 6c 77 61 79 73 20 61 20 6e 6f  w is always a no
20600 2d 6f 70 20 61 6e 64 20 63 61 6e 6e 6f 74 20 66  -op and cannot f
20610 61 69 6c 2e 20 20 57 65 20 77 69 6c 6c 20 72 75  ail.  We will ru
20620 6e 20 69 74 20 61 6e 79 68 6f 77 2c 20 74 68 6f  n it anyhow, tho
20630 75 67 68 2c 0a 20 20 2a 2a 20 74 6f 20 67 75 61  ugh,.  ** to gua
20640 72 64 20 61 67 61 69 6e 73 74 20 66 75 74 75 72  rd against futur
20650 65 20 63 68 61 6e 67 65 73 20 74 6f 20 74 68 65  e changes to the
20660 20 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 2e   code generator.
20670 0a 20 20 2a 2a 2f 0a 20 20 61 73 73 65 72 74 28  .  **/.  assert(
20680 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
20690 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d  eto==0 );.  rc =
206a0 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73   sqlite3VdbeCurs
206b0 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20  orMoveto(pC);.  
206c0 69 66 28 20 4e 45 56 45 52 28 72 63 21 3d 53 51  if( NEVER(rc!=SQ
206d0 4c 49 54 45 5f 4f 4b 29 20 29 20 67 6f 74 6f 20  LITE_OK) ) goto 
206e0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
206f0 6f 72 3b 0a 0a 20 20 73 71 6c 69 74 65 33 42 74  or;..  sqlite3Bt
20700 72 65 65 53 65 74 43 61 63 68 65 64 52 6f 77 69  reeSetCachedRowi
20710 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 30  d(pC->pCursor, 0
20720 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  );.  rc = sqlite
20730 33 42 74 72 65 65 44 65 6c 65 74 65 28 70 43 2d  3BtreeDelete(pC-
20740 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 70 43 2d  >pCursor);.  pC-
20750 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
20760 41 43 48 45 5f 53 54 41 4c 45 3b 0a 0a 20 20 2f  ACHE_STALE;..  /
20770 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 75 70 64  * Invoke the upd
20780 61 74 65 2d 68 6f 6f 6b 20 69 66 20 72 65 71 75  ate-hook if requ
20790 69 72 65 64 2e 20 2a 2f 0a 20 20 69 66 28 20 72  ired. */.  if( r
207a0 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20  c==SQLITE_OK && 
207b0 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62  db->xUpdateCallb
207c0 61 63 6b 20 26 26 20 70 4f 70 2d 3e 70 34 2e 7a  ack && pOp->p4.z
207d0 20 29 7b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68   ){.    const ch
207e0 61 72 20 2a 7a 44 62 20 3d 20 64 62 2d 3e 61 44  ar *zDb = db->aD
207f0 62 5b 70 43 2d 3e 69 44 62 5d 2e 7a 4e 61 6d 65  b[pC->iDb].zName
20800 3b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72  ;.    const char
20810 20 2a 7a 54 62 6c 20 3d 20 70 4f 70 2d 3e 70 34   *zTbl = pOp->p4
20820 2e 7a 3b 0a 20 20 20 20 64 62 2d 3e 78 55 70 64  .z;.    db->xUpd
20830 61 74 65 43 61 6c 6c 62 61 63 6b 28 64 62 2d 3e  ateCallback(db->
20840 70 55 70 64 61 74 65 41 72 67 2c 20 53 51 4c 49  pUpdateArg, SQLI
20850 54 45 5f 44 45 4c 45 54 45 2c 20 7a 44 62 2c 20  TE_DELETE, zDb, 
20860 7a 54 62 6c 2c 20 69 4b 65 79 29 3b 0a 20 20 20  zTbl, iKey);.   
20870 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 44 62   assert( pC->iDb
20880 3e 3d 30 20 29 3b 0a 20 20 7d 0a 20 20 69 66 28  >=0 );.  }.  if(
20890 20 70 4f 70 2d 3e 70 32 20 26 20 4f 50 46 4c 41   pOp->p2 & OPFLA
208a0 47 5f 4e 43 48 41 4e 47 45 20 29 20 70 2d 3e 6e  G_NCHANGE ) p->n
208b0 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 62 72 65 61  Change++;.  brea
208c0 6b 3b 0a 7d 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  k;.}./* Opcode: 
208d0 52 65 73 65 74 43 6f 75 6e 74 20 2a 20 2a 20 2a  ResetCount * * *
208e0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 76   * *.**.** The v
208f0 61 6c 75 65 20 6f 66 20 74 68 65 20 63 68 61 6e  alue of the chan
20900 67 65 20 63 6f 75 6e 74 65 72 20 69 73 20 63 6f  ge counter is co
20910 70 69 65 64 20 74 6f 20 74 68 65 20 64 61 74 61  pied to the data
20920 62 61 73 65 20 68 61 6e 64 6c 65 0a 2a 2a 20 63  base handle.** c
20930 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 28 72  hange counter (r
20940 65 74 75 72 6e 65 64 20 62 79 20 73 75 62 73 65  eturned by subse
20950 71 75 65 6e 74 20 63 61 6c 6c 73 20 74 6f 20 73  quent calls to s
20960 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 28 29  qlite3_changes()
20970 29 2e 0a 2a 2a 20 54 68 65 6e 20 74 68 65 20 56  )..** Then the V
20980 4d 73 20 69 6e 74 65 72 6e 61 6c 20 63 68 61 6e  Ms internal chan
20990 67 65 20 63 6f 75 6e 74 65 72 20 72 65 73 65 74  ge counter reset
209a0 73 20 74 6f 20 30 2e 0a 2a 2a 20 54 68 69 73 20  s to 0..** This 
209b0 69 73 20 75 73 65 64 20 62 79 20 74 72 69 67 67  is used by trigg
209c0 65 72 20 70 72 6f 67 72 61 6d 73 2e 0a 2a 2f 0a  er programs..*/.
209d0 63 61 73 65 20 4f 50 5f 52 65 73 65 74 43 6f 75  case OP_ResetCou
209e0 6e 74 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 56  nt: {.  sqlite3V
209f0 64 62 65 53 65 74 43 68 61 6e 67 65 73 28 64 62  dbeSetChanges(db
20a00 2c 20 70 2d 3e 6e 43 68 61 6e 67 65 29 3b 0a 20  , p->nChange);. 
20a10 20 70 2d 3e 6e 43 68 61 6e 67 65 20 3d 20 30 3b   p->nChange = 0;
20a20 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
20a30 4f 70 63 6f 64 65 3a 20 52 6f 77 44 61 74 61 20  Opcode: RowData 
20a40 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
20a50 2a 20 57 72 69 74 65 20 69 6e 74 6f 20 72 65 67  * Write into reg
20a60 69 73 74 65 72 20 50 32 20 74 68 65 20 63 6f 6d  ister P2 the com
20a70 70 6c 65 74 65 20 72 6f 77 20 64 61 74 61 20 66  plete row data f
20a80 6f 72 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a  or cursor P1..**
20a90 20 54 68 65 72 65 20 69 73 20 6e 6f 20 69 6e 74   There is no int
20aa0 65 72 70 72 65 74 61 74 69 6f 6e 20 6f 66 20 74  erpretation of t
20ab0 68 65 20 64 61 74 61 2e 20 20 0a 2a 2a 20 49 74  he data.  .** It
20ac0 20 69 73 20 6a 75 73 74 20 63 6f 70 69 65 64 20   is just copied 
20ad0 6f 6e 74 6f 20 74 68 65 20 50 32 20 72 65 67 69  onto the P2 regi
20ae0 73 74 65 72 20 65 78 61 63 74 6c 79 20 61 73 20  ster exactly as 
20af0 0a 2a 2a 20 69 74 20 69 73 20 66 6f 75 6e 64 20  .** it is found 
20b00 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  in the database 
20b10 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  file..**.** If t
20b20 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d 75 73  he P1 cursor mus
20b30 74 20 62 65 20 70 6f 69 6e 74 69 6e 67 20 74 6f  t be pointing to
20b40 20 61 20 76 61 6c 69 64 20 72 6f 77 20 28 6e 6f   a valid row (no
20b50 74 20 61 20 4e 55 4c 4c 20 72 6f 77 29 0a 2a 2a  t a NULL row).**
20b60 20 6f 66 20 61 20 72 65 61 6c 20 74 61 62 6c 65   of a real table
20b70 2c 20 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d 74  , not a pseudo-t
20b80 61 62 6c 65 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  able..*/./* Opco
20b90 64 65 3a 20 52 6f 77 4b 65 79 20 50 31 20 50 32  de: RowKey P1 P2
20ba0 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69   * * *.**.** Wri
20bb0 74 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  te into register
20bc0 20 50 32 20 74 68 65 20 63 6f 6d 70 6c 65 74 65   P2 the complete
20bd0 20 72 6f 77 20 6b 65 79 20 66 6f 72 20 63 75 72   row key for cur
20be0 73 6f 72 20 50 31 2e 0a 2a 2a 20 54 68 65 72 65  sor P1..** There
20bf0 20 69 73 20 6e 6f 20 69 6e 74 65 72 70 72 65 74   is no interpret
20c00 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 64 61 74  ation of the dat
20c10 61 2e 20 20 0a 2a 2a 20 54 68 65 20 6b 65 79 20  a.  .** The key 
20c20 69 73 20 63 6f 70 69 65 64 20 6f 6e 74 6f 20 74  is copied onto t
20c30 68 65 20 50 33 20 72 65 67 69 73 74 65 72 20 65  he P3 register e
20c40 78 61 63 74 6c 79 20 61 73 20 0a 2a 2a 20 69 74  xactly as .** it
20c50 20 69 73 20 66 6f 75 6e 64 20 69 6e 20 74 68 65   is found in the
20c60 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a   database file..
20c70 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20  **.** If the P1 
20c80 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20 70  cursor must be p
20c90 6f 69 6e 74 69 6e 67 20 74 6f 20 61 20 76 61 6c  ointing to a val
20ca0 69 64 20 72 6f 77 20 28 6e 6f 74 20 61 20 4e 55  id row (not a NU
20cb0 4c 4c 20 72 6f 77 29 0a 2a 2a 20 6f 66 20 61 20  LL row).** of a 
20cc0 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20  real table, not 
20cd0 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a  a pseudo-table..
20ce0 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 4b 65  */.case OP_RowKe
20cf0 79 3a 0a 63 61 73 65 20 4f 50 5f 52 6f 77 44 61  y:.case OP_RowDa
20d00 74 61 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73  ta: {.  VdbeCurs
20d10 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73  or *pC;.  BtCurs
20d20 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 75 33 32  or *pCrsr;.  u32
20d30 20 6e 3b 0a 20 20 69 36 34 20 6e 36 34 3b 0a 0a   n;.  i64 n64;..
20d40 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
20d50 4f 70 2d 3e 70 32 5d 3b 0a 20 20 6d 65 6d 41 62  Op->p2];.  memAb
20d60 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70  outToChange(p, p
20d70 4f 75 74 29 3b 0a 0a 20 20 2f 2a 20 4e 6f 74 65  Out);..  /* Note
20d80 20 74 68 61 74 20 52 6f 77 4b 65 79 20 61 6e 64   that RowKey and
20d90 20 52 6f 77 44 61 74 61 20 61 72 65 20 72 65 61   RowData are rea
20da0 6c 6c 79 20 65 78 61 63 74 6c 79 20 74 68 65 20  lly exactly the 
20db0 73 61 6d 65 20 69 6e 73 74 72 75 63 74 69 6f 6e  same instruction
20dc0 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f   */.  assert( pO
20dd0 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
20de0 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
20df0 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
20e00 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
20e10 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c  sert( pC->isTabl
20e20 65 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  e || pOp->opcode
20e30 3d 3d 4f 50 5f 52 6f 77 4b 65 79 20 29 3b 0a 20  ==OP_RowKey );. 
20e40 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 49   assert( pC->isI
20e50 6e 64 65 78 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63  ndex || pOp->opc
20e60 6f 64 65 3d 3d 4f 50 5f 52 6f 77 44 61 74 61 20  ode==OP_RowData 
20e70 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  );.  assert( pC!
20e80 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
20e90 70 43 2d 3e 6e 75 6c 6c 52 6f 77 3d 3d 30 20 29  pC->nullRow==0 )
20ea0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
20eb0 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67 3d 3d  pseudoTableReg==
20ec0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
20ed0 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b  C->pCursor!=0 );
20ee0 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70  .  pCrsr = pC->p
20ef0 43 75 72 73 6f 72 3b 0a 20 20 61 73 73 65 72 74  Cursor;.  assert
20f00 28 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75  ( sqlite3BtreeCu
20f10 72 73 6f 72 49 73 56 61 6c 69 64 28 70 43 72 73  rsorIsValid(pCrs
20f20 72 29 20 29 3b 0a 0a 20 20 2f 2a 20 54 68 65 20  r) );..  /* The 
20f30 4f 50 5f 52 6f 77 4b 65 79 20 61 6e 64 20 4f 50  OP_RowKey and OP
20f40 5f 52 6f 77 44 61 74 61 20 6f 70 63 6f 64 65 73  _RowData opcodes
20f50 20 61 6c 77 61 79 73 20 66 6f 6c 6c 6f 77 20 4f   always follow O
20f60 50 5f 4e 6f 74 45 78 69 73 74 73 20 6f 72 0a 20  P_NotExists or. 
20f70 20 2a 2a 20 4f 50 5f 52 65 77 69 6e 64 2f 4f 70   ** OP_Rewind/Op
20f80 5f 4e 65 78 74 20 77 69 74 68 20 6e 6f 20 69 6e  _Next with no in
20f90 74 65 72 76 65 6e 69 6e 67 20 69 6e 73 74 72 75  tervening instru
20fa0 63 74 69 6f 6e 73 20 74 68 61 74 20 6d 69 67 68  ctions that migh
20fb0 74 20 69 6e 76 61 6c 69 64 61 74 65 0a 20 20 2a  t invalidate.  *
20fc0 2a 20 74 68 65 20 63 75 72 73 6f 72 2e 20 20 48  * the cursor.  H
20fd0 65 6e 63 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69  ence the followi
20fe0 6e 67 20 73 71 6c 69 74 65 33 56 64 62 65 43 75  ng sqlite3VdbeCu
20ff0 72 73 6f 72 4d 6f 76 65 74 6f 28 29 20 63 61 6c  rsorMoveto() cal
21000 6c 20 69 73 20 61 6c 77 61 79 73 0a 20 20 2a 2a  l is always.  **
21010 20 61 20 6e 6f 2d 6f 70 20 61 6e 64 20 63 61 6e   a no-op and can
21020 20 6e 65 76 65 72 20 66 61 69 6c 2e 20 20 42 75   never fail.  Bu
21030 74 20 77 65 20 6c 65 61 76 65 20 69 74 20 69 6e  t we leave it in
21040 20 70 6c 61 63 65 20 61 73 20 61 20 73 61 66 65   place as a safe
21050 74 79 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72  ty..  */.  asser
21060 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d  t( pC->deferredM
21070 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 72 63  oveto==0 );.  rc
21080 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 75   = sqlite3VdbeCu
21090 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b 0a  rsorMoveto(pC);.
210a0 20 20 69 66 28 20 4e 45 56 45 52 28 72 63 21 3d    if( NEVER(rc!=
210b0 53 51 4c 49 54 45 5f 4f 4b 29 20 29 20 67 6f 74  SQLITE_OK) ) got
210c0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
210d0 72 72 6f 72 3b 0a 0a 20 20 69 66 28 20 70 43 2d  rror;..  if( pC-
210e0 3e 69 73 49 6e 64 65 78 20 29 7b 0a 20 20 20 20  >isIndex ){.    
210f0 61 73 73 65 72 74 28 20 21 70 43 2d 3e 69 73 54  assert( !pC->isT
21100 61 62 6c 65 20 29 3b 0a 20 20 20 20 72 63 20 3d  able );.    rc =
21110 20 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79   sqlite3BtreeKey
21120 53 69 7a 65 28 70 43 72 73 72 2c 20 26 6e 36 34  Size(pCrsr, &n64
21130 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 72  );.    assert( r
21140 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20  c==SQLITE_OK ); 
21150 20 20 20 2f 2a 20 54 72 75 65 20 62 65 63 61 75     /* True becau
21160 73 65 20 6f 66 20 43 75 72 73 6f 72 4d 6f 76 65  se of CursorMove
21170 74 6f 28 29 20 63 61 6c 6c 20 61 62 6f 76 65 20  to() call above 
21180 2a 2f 0a 20 20 20 20 69 66 28 20 6e 36 34 3e 64  */.    if( n64>d
21190 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45  b->aLimit[SQLITE
211a0 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29  _LIMIT_LENGTH] )
211b0 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 74 6f 6f  {.      goto too
211c0 5f 62 69 67 3b 0a 20 20 20 20 7d 0a 20 20 20 20  _big;.    }.    
211d0 6e 20 3d 20 28 75 33 32 29 6e 36 34 3b 0a 20 20  n = (u32)n64;.  
211e0 7d 65 6c 73 65 7b 0a 20 20 20 20 72 63 20 3d 20  }else{.    rc = 
211f0 73 71 6c 69 74 65 33 42 74 72 65 65 44 61 74 61  sqlite3BtreeData
21200 53 69 7a 65 28 70 43 72 73 72 2c 20 26 6e 29 3b  Size(pCrsr, &n);
21210 0a 20 20 20 20 61 73 73 65 72 74 28 20 72 63 3d  .    assert( rc=
21220 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 20 20  =SQLITE_OK );   
21230 20 2f 2a 20 44 61 74 61 53 69 7a 65 28 29 20 63   /* DataSize() c
21240 61 6e 6e 6f 74 20 66 61 69 6c 20 2a 2f 0a 20 20  annot fail */.  
21250 20 20 69 66 28 20 6e 3e 28 75 33 32 29 64 62 2d    if( n>(u32)db-
21260 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c  >aLimit[SQLITE_L
21270 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a  IMIT_LENGTH] ){.
21280 20 20 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62        goto too_b
21290 69 67 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  ig;.    }.  }.  
212a0 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d  if( sqlite3VdbeM
212b0 65 6d 47 72 6f 77 28 70 4f 75 74 2c 20 6e 2c 20  emGrow(pOut, n, 
212c0 30 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e  0) ){.    goto n
212d0 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 70 4f 75  o_mem;.  }.  pOu
212e0 74 2d 3e 6e 20 3d 20 6e 3b 0a 20 20 4d 65 6d 53  t->n = n;.  MemS
212f0 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c  etTypeFlag(pOut,
21300 20 4d 45 4d 5f 42 6c 6f 62 29 3b 0a 20 20 69 66   MEM_Blob);.  if
21310 28 20 70 43 2d 3e 69 73 49 6e 64 65 78 20 29 7b  ( pC->isIndex ){
21320 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
21330 33 42 74 72 65 65 4b 65 79 28 70 43 72 73 72 2c  3BtreeKey(pCrsr,
21340 20 30 2c 20 6e 2c 20 70 4f 75 74 2d 3e 7a 29 3b   0, n, pOut->z);
21350 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72 63  .  }else{.    rc
21360 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 44   = sqlite3BtreeD
21370 61 74 61 28 70 43 72 73 72 2c 20 30 2c 20 6e 2c  ata(pCrsr, 0, n,
21380 20 70 4f 75 74 2d 3e 7a 29 3b 0a 20 20 7d 0a 20   pOut->z);.  }. 
21390 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 53 51 4c   pOut->enc = SQL
213a0 49 54 45 5f 55 54 46 38 3b 20 20 2f 2a 20 49 6e  ITE_UTF8;  /* In
213b0 20 63 61 73 65 20 74 68 65 20 62 6c 6f 62 20 69   case the blob i
213c0 73 20 65 76 65 72 20 63 61 73 74 20 74 6f 20 74  s ever cast to t
213d0 65 78 74 20 2a 2f 0a 20 20 55 50 44 41 54 45 5f  ext */.  UPDATE_
213e0 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75  MAX_BLOBSIZE(pOu
213f0 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
21400 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 69 64  /* Opcode: Rowid
21410 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
21420 2a 2a 20 53 74 6f 72 65 20 69 6e 20 72 65 67 69  ** Store in regi
21430 73 74 65 72 20 50 32 20 61 6e 20 69 6e 74 65 67  ster P2 an integ
21440 65 72 20 77 68 69 63 68 20 69 73 20 74 68 65 20  er which is the 
21450 6b 65 79 20 6f 66 20 74 68 65 20 74 61 62 6c 65  key of the table
21460 20 65 6e 74 72 79 20 74 68 61 74 0a 2a 2a 20 50   entry that.** P
21470 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70  1 is currently p
21480 6f 69 6e 74 20 74 6f 2e 0a 2a 2a 0a 2a 2a 20 50  oint to..**.** P
21490 31 20 63 61 6e 20 62 65 20 65 69 74 68 65 72 20  1 can be either 
214a0 61 6e 20 6f 72 64 69 6e 61 72 79 20 74 61 62 6c  an ordinary tabl
214b0 65 20 6f 72 20 61 20 76 69 72 74 75 61 6c 20 74  e or a virtual t
214c0 61 62 6c 65 2e 20 20 54 68 65 72 65 20 75 73 65  able.  There use
214d0 64 20 74 6f 0a 2a 2a 20 62 65 20 61 20 73 65 70  d to.** be a sep
214e0 61 72 61 74 65 20 4f 50 5f 56 52 6f 77 69 64 20  arate OP_VRowid 
214f0 6f 70 63 6f 64 65 20 66 6f 72 20 75 73 65 20 77  opcode for use w
21500 69 74 68 20 76 69 72 74 75 61 6c 20 74 61 62 6c  ith virtual tabl
21510 65 73 2c 20 62 75 74 20 74 68 69 73 0a 2a 2a 20  es, but this.** 
21520 6f 6e 65 20 6f 70 63 6f 64 65 20 6e 6f 77 20 77  one opcode now w
21530 6f 72 6b 73 20 66 6f 72 20 62 6f 74 68 20 74 61  orks for both ta
21540 62 6c 65 20 74 79 70 65 73 2e 0a 2a 2f 0a 63 61  ble types..*/.ca
21550 73 65 20 4f 50 5f 52 6f 77 69 64 3a 20 7b 20 20  se OP_Rowid: {  
21560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
21570 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73  * out2-prereleas
21580 65 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f  e */.  VdbeCurso
21590 72 20 2a 70 43 3b 0a 20 20 69 36 34 20 76 3b 0a  r *pC;.  i64 v;.
215a0 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a    sqlite3_vtab *
215b0 70 56 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73  pVtab;.  const s
215c0 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70  qlite3_module *p
215d0 4d 6f 64 75 6c 65 3b 0a 0a 20 20 61 73 73 65 72  Module;..  asser
215e0 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
215f0 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
21600 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  sor );.  pC = p-
21610 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
21620 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
21630 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
21640 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67  ->pseudoTableReg
21650 3d 3d 30 20 29 3b 0a 20 20 69 66 28 20 70 43 2d  ==0 );.  if( pC-
21660 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20  >nullRow ){.    
21670 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pOut->flags = ME
21680 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20 62 72 65 61  M_Null;.    brea
21690 6b 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70  k;.  }else if( p
216a0 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
216b0 6f 20 29 7b 0a 20 20 20 20 76 20 3d 20 70 43 2d  o ){.    v = pC-
216c0 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 3b 0a 23  >movetoTarget;.#
216d0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
216e0 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
216f0 20 20 7d 65 6c 73 65 20 69 66 28 20 70 43 2d 3e    }else if( pC->
21700 70 56 74 61 62 43 75 72 73 6f 72 20 29 7b 0a 20  pVtabCursor ){. 
21710 20 20 20 70 56 74 61 62 20 3d 20 70 43 2d 3e 70     pVtab = pC->p
21720 56 74 61 62 43 75 72 73 6f 72 2d 3e 70 56 74 61  VtabCursor->pVta
21730 62 3b 0a 20 20 20 20 70 4d 6f 64 75 6c 65 20 3d  b;.    pModule =
21740 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b   pVtab->pModule;
21750 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4d 6f  .    assert( pMo
21760 64 75 6c 65 2d 3e 78 52 6f 77 69 64 20 29 3b 0a  dule->xRowid );.
21770 20 20 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65      rc = pModule
21780 2d 3e 78 52 6f 77 69 64 28 70 43 2d 3e 70 56 74  ->xRowid(pC->pVt
21790 61 62 43 75 72 73 6f 72 2c 20 26 76 29 3b 0a 20  abCursor, &v);. 
217a0 20 20 20 69 6d 70 6f 72 74 56 74 61 62 45 72 72     importVtabErr
217b0 4d 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 23  Msg(p, pVtab);.#
217c0 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
217d0 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
217e0 45 20 2a 2f 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  E */.  }else{.  
217f0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43    assert( pC->pC
21800 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 20 20  ursor!=0 );.    
21810 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
21820 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29  CursorMoveto(pC)
21830 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29 20 67  ;.    if( rc ) g
21840 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
21850 5f 65 72 72 6f 72 3b 0a 20 20 20 20 69 66 28 20  _error;.    if( 
21860 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64  pC->rowidIsValid
21870 20 29 7b 0a 20 20 20 20 20 20 76 20 3d 20 70 43   ){.      v = pC
21880 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20 20  ->lastRowid;.   
21890 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 63   }else{.      rc
218a0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4b   = sqlite3BtreeK
218b0 65 79 53 69 7a 65 28 70 43 2d 3e 70 43 75 72 73  eySize(pC->pCurs
218c0 6f 72 2c 20 26 76 29 3b 0a 20 20 20 20 20 20 61  or, &v);.      a
218d0 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54  ssert( rc==SQLIT
218e0 45 5f 4f 4b 20 29 3b 20 20 2f 2a 20 41 6c 77 61  E_OK );  /* Alwa
218f0 79 73 20 73 6f 20 62 65 63 61 75 73 65 20 6f 66  ys so because of
21900 20 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29 20   CursorMoveto() 
21910 61 62 6f 76 65 20 2a 2f 0a 20 20 20 20 7d 0a 20  above */.    }. 
21920 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d   }.  pOut->u.i =
21930 20 76 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a   v;.  break;.}..
21940 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 75 6c 6c 52  /* Opcode: NullR
21950 6f 77 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a  ow P1 * * * *.**
21960 0a 2a 2a 20 4d 6f 76 65 20 74 68 65 20 63 75 72  .** Move the cur
21970 73 6f 72 20 50 31 20 74 6f 20 61 20 6e 75 6c 6c  sor P1 to a null
21980 20 72 6f 77 2e 20 20 41 6e 79 20 4f 50 5f 43 6f   row.  Any OP_Co
21990 6c 75 6d 6e 20 6f 70 65 72 61 74 69 6f 6e 73 0a  lumn operations.
219a0 2a 2a 20 74 68 61 74 20 6f 63 63 75 72 20 77 68  ** that occur wh
219b0 69 6c 65 20 74 68 65 20 63 75 72 73 6f 72 20 69  ile the cursor i
219c0 73 20 6f 6e 20 74 68 65 20 6e 75 6c 6c 20 72 6f  s on the null ro
219d0 77 20 77 69 6c 6c 20 61 6c 77 61 79 73 0a 2a 2a  w will always.**
219e0 20 77 72 69 74 65 20 61 20 4e 55 4c 4c 2e 0a 2a   write a NULL..*
219f0 2f 0a 63 61 73 65 20 4f 50 5f 4e 75 6c 6c 52 6f  /.case OP_NullRo
21a00 77 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f  w: {.  VdbeCurso
21a10 72 20 2a 70 43 3b 0a 0a 20 20 61 73 73 65 72 74  r *pC;..  assert
21a20 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
21a30 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
21a40 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
21a50 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
21a60 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
21a70 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77  );.  pC->nullRow
21a80 20 3d 20 31 3b 0a 20 20 70 43 2d 3e 72 6f 77 69   = 1;.  pC->rowi
21a90 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20  dIsValid = 0;.  
21aa0 69 66 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 20  if( pC->pCursor 
21ab0 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 42 74  ){.    sqlite3Bt
21ac0 72 65 65 43 6c 65 61 72 43 75 72 73 6f 72 28 70  reeClearCursor(p
21ad0 43 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 7d  C->pCursor);.  }
21ae0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
21af0 4f 70 63 6f 64 65 3a 20 4c 61 73 74 20 50 31 20  Opcode: Last P1 
21b00 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54  P2 * * *.**.** T
21b10 68 65 20 6e 65 78 74 20 75 73 65 20 6f 66 20 74  he next use of t
21b20 68 65 20 52 6f 77 69 64 20 6f 72 20 43 6f 6c 75  he Rowid or Colu
21b30 6d 6e 20 6f 72 20 4e 65 78 74 20 69 6e 73 74 72  mn or Next instr
21b40 75 63 74 69 6f 6e 20 66 6f 72 20 50 31 20 0a 2a  uction for P1 .*
21b50 2a 20 77 69 6c 6c 20 72 65 66 65 72 20 74 6f 20  * will refer to 
21b60 74 68 65 20 6c 61 73 74 20 65 6e 74 72 79 20 69  the last entry i
21b70 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74  n the database t
21b80 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 0a 2a  able or index..*
21b90 2a 20 49 66 20 74 68 65 20 74 61 62 6c 65 20 6f  * If the table o
21ba0 72 20 69 6e 64 65 78 20 69 73 20 65 6d 70 74 79  r index is empty
21bb0 20 61 6e 64 20 50 32 3e 30 2c 20 74 68 65 6e 20   and P2>0, then 
21bc0 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79  jump immediately
21bd0 20 74 6f 20 50 32 2e 0a 2a 2a 20 49 66 20 50 32   to P2..** If P2
21be0 20 69 73 20 30 20 6f 72 20 69 66 20 74 68 65 20   is 0 or if the 
21bf0 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 69  table or index i
21c00 73 20 6e 6f 74 20 65 6d 70 74 79 2c 20 66 61 6c  s not empty, fal
21c10 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20  l through.** to 
21c20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e  the following in
21c30 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61  struction..*/.ca
21c40 73 65 20 4f 50 5f 4c 61 73 74 3a 20 7b 20 20 20  se OP_Last: {   
21c50 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
21c60 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
21c70 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43  ;.  BtCursor *pC
21c80 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a  rsr;.  int res;.
21c90 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
21ca0 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
21cb0 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
21cc0 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
21cd0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
21ce0 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 70 43  t( pC!=0 );.  pC
21cf0 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f  rsr = pC->pCurso
21d00 72 3b 0a 20 20 69 66 28 20 70 43 72 73 72 3d 3d  r;.  if( pCrsr==
21d10 30 20 29 7b 0a 20 20 20 20 72 65 73 20 3d 20 31  0 ){.    res = 1
21d20 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72  ;.  }else{.    r
21d30 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
21d40 4c 61 73 74 28 70 43 72 73 72 2c 20 26 72 65 73  Last(pCrsr, &res
21d50 29 3b 0a 20 20 7d 0a 20 20 70 43 2d 3e 6e 75 6c  );.  }.  pC->nul
21d60 6c 52 6f 77 20 3d 20 28 75 38 29 72 65 73 3b 0a  lRow = (u8)res;.
21d70 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f    pC->deferredMo
21d80 76 65 74 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e  veto = 0;.  pC->
21d90 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30  rowidIsValid = 0
21da0 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61  ;.  pC->cacheSta
21db0 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c  tus = CACHE_STAL
21dc0 45 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 32  E;.  if( pOp->p2
21dd0 3e 30 20 26 26 20 72 65 73 20 29 7b 0a 20 20 20  >0 && res ){.   
21de0 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
21df0 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  1;.  }.  break;.
21e00 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  }.../* Opcode: S
21e10 6f 72 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ort P1 P2 * * *.
21e20 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
21e30 65 20 64 6f 65 73 20 65 78 61 63 74 6c 79 20 74  e does exactly t
21e40 68 65 20 73 61 6d 65 20 74 68 69 6e 67 20 61 73  he same thing as
21e50 20 4f 50 5f 52 65 77 69 6e 64 20 65 78 63 65 70   OP_Rewind excep
21e60 74 20 74 68 61 74 0a 2a 2a 20 69 74 20 69 6e 63  t that.** it inc
21e70 72 65 6d 65 6e 74 73 20 61 6e 20 75 6e 64 6f 63  rements an undoc
21e80 75 6d 65 6e 74 65 64 20 67 6c 6f 62 61 6c 20 76  umented global v
21e90 61 72 69 61 62 6c 65 20 75 73 65 64 20 66 6f 72  ariable used for
21ea0 20 74 65 73 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20   testing..**.** 
21eb0 53 6f 72 74 69 6e 67 20 69 73 20 61 63 63 6f 6d  Sorting is accom
21ec0 70 6c 69 73 68 65 64 20 62 79 20 77 72 69 74 69  plished by writi
21ed0 6e 67 20 72 65 63 6f 72 64 73 20 69 6e 74 6f 20  ng records into 
21ee0 61 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 2c  a sorting index,
21ef0 0a 2a 2a 20 74 68 65 6e 20 72 65 77 69 6e 64 69  .** then rewindi
21f00 6e 67 20 74 68 61 74 20 69 6e 64 65 78 20 61 6e  ng that index an
21f10 64 20 70 6c 61 79 69 6e 67 20 69 74 20 62 61 63  d playing it bac
21f20 6b 20 66 72 6f 6d 20 62 65 67 69 6e 6e 69 6e 67  k from beginning
21f30 20 74 6f 0a 2a 2a 20 65 6e 64 2e 20 20 57 65 20   to.** end.  We 
21f40 75 73 65 20 74 68 65 20 4f 50 5f 53 6f 72 74 20  use the OP_Sort 
21f50 6f 70 63 6f 64 65 20 69 6e 73 74 65 61 64 20 6f  opcode instead o
21f60 66 20 4f 50 5f 52 65 77 69 6e 64 20 74 6f 20 64  f OP_Rewind to d
21f70 6f 20 74 68 65 0a 2a 2a 20 72 65 77 69 6e 64 69  o the.** rewindi
21f80 6e 67 20 73 6f 20 74 68 61 74 20 74 68 65 20 67  ng so that the g
21f90 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 20 77  lobal variable w
21fa0 69 6c 6c 20 62 65 20 69 6e 63 72 65 6d 65 6e 74  ill be increment
21fb0 65 64 20 61 6e 64 0a 2a 2a 20 72 65 67 72 65 73  ed and.** regres
21fc0 73 69 6f 6e 20 74 65 73 74 73 20 63 61 6e 20 64  sion tests can d
21fd0 65 74 65 72 6d 69 6e 65 20 77 68 65 74 68 65 72  etermine whether
21fe0 20 6f 72 20 6e 6f 74 20 74 68 65 20 6f 70 74 69   or not the opti
21ff0 6d 69 7a 65 72 20 69 73 0a 2a 2a 20 63 6f 72 72  mizer is.** corr
22000 65 63 74 6c 79 20 6f 70 74 69 6d 69 7a 69 6e 67  ectly optimizing
22010 20 6f 75 74 20 73 6f 72 74 73 2e 0a 2a 2f 0a 63   out sorts..*/.c
22020 61 73 65 20 4f 50 5f 53 6f 72 74 3a 20 7b 20 20  ase OP_Sort: {  
22030 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
22040 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54  .#ifdef SQLITE_T
22050 45 53 54 0a 20 20 73 71 6c 69 74 65 33 5f 73 6f  EST.  sqlite3_so
22060 72 74 5f 63 6f 75 6e 74 2b 2b 3b 0a 20 20 73 71  rt_count++;.  sq
22070 6c 69 74 65 33 5f 73 65 61 72 63 68 5f 63 6f 75  lite3_search_cou
22080 6e 74 2d 2d 3b 0a 23 65 6e 64 69 66 0a 20 20 70  nt--;.#endif.  p
22090 2d 3e 61 43 6f 75 6e 74 65 72 5b 53 51 4c 49 54  ->aCounter[SQLIT
220a0 45 5f 53 54 4d 54 53 54 41 54 55 53 5f 53 4f 52  E_STMTSTATUS_SOR
220b0 54 2d 31 5d 2b 2b 3b 0a 20 20 2f 2a 20 46 61 6c  T-1]++;.  /* Fal
220c0 6c 20 74 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f  l through into O
220d0 50 5f 52 65 77 69 6e 64 20 2a 2f 0a 7d 0a 2f 2a  P_Rewind */.}./*
220e0 20 4f 70 63 6f 64 65 3a 20 52 65 77 69 6e 64 20   Opcode: Rewind 
220f0 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
22100 2a 20 54 68 65 20 6e 65 78 74 20 75 73 65 20 6f  * The next use o
22110 66 20 74 68 65 20 52 6f 77 69 64 20 6f 72 20 43  f the Rowid or C
22120 6f 6c 75 6d 6e 20 6f 72 20 4e 65 78 74 20 69 6e  olumn or Next in
22130 73 74 72 75 63 74 69 6f 6e 20 66 6f 72 20 50 31  struction for P1
22140 20 0a 2a 2a 20 77 69 6c 6c 20 72 65 66 65 72 20   .** will refer 
22150 74 6f 20 74 68 65 20 66 69 72 73 74 20 65 6e 74  to the first ent
22160 72 79 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  ry in the databa
22170 73 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  se table or inde
22180 78 2e 0a 2a 2a 20 49 66 20 74 68 65 20 74 61 62  x..** If the tab
22190 6c 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20 65  le or index is e
221a0 6d 70 74 79 20 61 6e 64 20 50 32 3e 30 2c 20 74  mpty and P2>0, t
221b0 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61  hen jump immedia
221c0 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 20 49  tely to P2..** I
221d0 66 20 50 32 20 69 73 20 30 20 6f 72 20 69 66 20  f P2 is 0 or if 
221e0 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  the table or ind
221f0 65 78 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 2c  ex is not empty,
22200 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a   fall through.**
22210 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   to the followin
22220 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  g instruction..*
22230 2f 0a 63 61 73 65 20 4f 50 5f 52 65 77 69 6e 64  /.case OP_Rewind
22240 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  : {        /* ju
22250 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73  mp */.  VdbeCurs
22260 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73  or *pC;.  BtCurs
22270 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74  or *pCrsr;.  int
22280 20 72 65 73 3b 0a 0a 20 20 61 73 73 65 72 74 28   res;..  assert(
22290 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
222a0 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
222b0 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
222c0 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
222d0 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
222e0 3b 0a 20 20 72 65 73 20 3d 20 31 3b 0a 20 20 69  ;.  res = 1;.  i
222f0 66 28 20 28 70 43 72 73 72 20 3d 20 70 43 2d 3e  f( (pCrsr = pC->
22300 70 43 75 72 73 6f 72 29 21 3d 30 20 29 7b 0a 20  pCursor)!=0 ){. 
22310 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
22320 74 72 65 65 46 69 72 73 74 28 70 43 72 73 72 2c  treeFirst(pCrsr,
22330 20 26 72 65 73 29 3b 0a 20 20 20 20 70 43 2d 3e   &res);.    pC->
22340 61 74 46 69 72 73 74 20 3d 20 72 65 73 3d 3d 30  atFirst = res==0
22350 20 3f 31 3a 30 3b 0a 20 20 20 20 70 43 2d 3e 64   ?1:0;.    pC->d
22360 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20  eferredMoveto = 
22370 30 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65  0;.    pC->cache
22380 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53  Status = CACHE_S
22390 54 41 4c 45 3b 0a 20 20 20 20 70 43 2d 3e 72 6f  TALE;.    pC->ro
223a0 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a  widIsValid = 0;.
223b0 20 20 7d 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f    }.  pC->nullRo
223c0 77 20 3d 20 28 75 38 29 72 65 73 3b 0a 20 20 61  w = (u8)res;.  a
223d0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30  ssert( pOp->p2>0
223e0 20 26 26 20 70 4f 70 2d 3e 70 32 3c 70 2d 3e 6e   && pOp->p2<p->n
223f0 4f 70 20 29 3b 0a 20 20 69 66 28 20 72 65 73 20  Op );.  if( res 
22400 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  ){.    pc = pOp-
22410 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62  >p2 - 1;.  }.  b
22420 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
22430 64 65 3a 20 4e 65 78 74 20 50 31 20 50 32 20 2a  de: Next P1 P2 *
22440 20 2a 20 50 35 0a 2a 2a 0a 2a 2a 20 41 64 76 61   * P5.**.** Adva
22450 6e 63 65 20 63 75 72 73 6f 72 20 50 31 20 73 6f  nce cursor P1 so
22460 20 74 68 61 74 20 69 74 20 70 6f 69 6e 74 73 20   that it points 
22470 74 6f 20 74 68 65 20 6e 65 78 74 20 6b 65 79 2f  to the next key/
22480 64 61 74 61 20 70 61 69 72 20 69 6e 20 69 74 73  data pair in its
22490 0a 2a 2a 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  .** table or ind
224a0 65 78 2e 20 20 49 66 20 74 68 65 72 65 20 61 72  ex.  If there ar
224b0 65 20 6e 6f 20 6d 6f 72 65 20 6b 65 79 2f 76 61  e no more key/va
224c0 6c 75 65 20 70 61 69 72 73 20 74 68 65 6e 20 66  lue pairs then f
224d0 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74  all through.** t
224e0 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  o the following 
224f0 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 42 75  instruction.  Bu
22500 74 20 69 66 20 74 68 65 20 63 75 72 73 6f 72 20  t if the cursor 
22510 61 64 76 61 6e 63 65 20 77 61 73 20 73 75 63 63  advance was succ
22520 65 73 73 66 75 6c 2c 0a 2a 2a 20 6a 75 6d 70 20  essful,.** jump 
22530 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50  immediately to P
22540 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 31 20  2..**.** The P1 
22550 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20 66  cursor must be f
22560 6f 72 20 61 20 72 65 61 6c 20 74 61 62 6c 65 2c  or a real table,
22570 20 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d 74 61   not a pseudo-ta
22580 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35  ble..**.** If P5
22590 20 69 73 20 70 6f 73 69 74 69 76 65 20 61 6e 64   is positive and
225a0 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b   the jump is tak
225b0 65 6e 2c 20 74 68 65 6e 20 65 76 65 6e 74 20 63  en, then event c
225c0 6f 75 6e 74 65 72 0a 2a 2a 20 6e 75 6d 62 65 72  ounter.** number
225d0 20 50 35 2d 31 20 69 6e 20 74 68 65 20 70 72 65   P5-1 in the pre
225e0 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20  pared statement 
225f0 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e 0a  is incremented..
22600 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
22610 50 72 65 76 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  Prev.*/./* Opcod
22620 65 3a 20 50 72 65 76 20 50 31 20 50 32 20 2a 20  e: Prev P1 P2 * 
22630 2a 20 50 35 0a 2a 2a 0a 2a 2a 20 42 61 63 6b 20  * P5.**.** Back 
22640 75 70 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20  up cursor P1 so 
22650 74 68 61 74 20 69 74 20 70 6f 69 6e 74 73 20 74  that it points t
22660 6f 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 6b  o the previous k
22670 65 79 2f 64 61 74 61 20 70 61 69 72 20 69 6e 20  ey/data pair in 
22680 69 74 73 0a 2a 2a 20 74 61 62 6c 65 20 6f 72 20  its.** table or 
22690 69 6e 64 65 78 2e 20 20 49 66 20 74 68 65 72 65  index.  If there
226a0 20 69 73 20 6e 6f 20 70 72 65 76 69 6f 75 73 20   is no previous 
226b0 6b 65 79 2f 76 61 6c 75 65 20 70 61 69 72 73 20  key/value pairs 
226c0 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67  then fall throug
226d0 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c  h.** to the foll
226e0 6f 77 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f  owing instructio
226f0 6e 2e 20 20 42 75 74 20 69 66 20 74 68 65 20 63  n.  But if the c
22700 75 72 73 6f 72 20 62 61 63 6b 75 70 20 77 61 73  ursor backup was
22710 20 73 75 63 63 65 73 73 66 75 6c 2c 0a 2a 2a 20   successful,.** 
22720 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79  jump immediately
22730 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68   to P2..**.** Th
22740 65 20 50 31 20 63 75 72 73 6f 72 20 6d 75 73 74  e P1 cursor must
22750 20 62 65 20 66 6f 72 20 61 20 72 65 61 6c 20 74   be for a real t
22760 61 62 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65 75  able, not a pseu
22770 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20  do-table..**.** 
22780 49 66 20 50 35 20 69 73 20 70 6f 73 69 74 69 76  If P5 is positiv
22790 65 20 61 6e 64 20 74 68 65 20 6a 75 6d 70 20 69  e and the jump i
227a0 73 20 74 61 6b 65 6e 2c 20 74 68 65 6e 20 65 76  s taken, then ev
227b0 65 6e 74 20 63 6f 75 6e 74 65 72 0a 2a 2a 20 6e  ent counter.** n
227c0 75 6d 62 65 72 20 50 35 2d 31 20 69 6e 20 74 68  umber P5-1 in th
227d0 65 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65  e prepared state
227e0 6d 65 6e 74 20 69 73 20 69 6e 63 72 65 6d 65 6e  ment is incremen
227f0 74 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ted..*/.case OP_
22800 50 72 65 76 3a 20 20 20 20 20 20 20 20 20 20 2f  Prev:          /
22810 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f  * jump */.case O
22820 50 5f 4e 65 78 74 3a 20 7b 20 20 20 20 20 20 20  P_Next: {       
22830 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64   /* jump */.  Vd
22840 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
22850 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b  BtCursor *pCrsr;
22860 0a 20 20 69 6e 74 20 72 65 73 3b 0a 0a 20 20 43  .  int res;..  C
22870 48 45 43 4b 5f 46 4f 52 5f 49 4e 54 45 52 52 55  HECK_FOR_INTERRU
22880 50 54 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  PT;.  assert( pO
22890 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
228a0 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
228b0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
228c0 3e 70 35 3c 3d 41 72 72 61 79 53 69 7a 65 28 70  >p5<=ArraySize(p
228d0 2d 3e 61 43 6f 75 6e 74 65 72 29 20 29 3b 0a 20  ->aCounter) );. 
228e0 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
228f0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70  Op->p1];.  if( p
22900 43 3d 3d 30 20 29 7b 0a 20 20 20 20 62 72 65 61  C==0 ){.    brea
22910 6b 3b 20 20 2f 2a 20 53 65 65 20 74 69 63 6b 65  k;  /* See ticke
22920 74 20 23 32 32 37 33 20 2a 2f 0a 20 20 7d 0a 20  t #2273 */.  }. 
22930 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75   pCrsr = pC->pCu
22940 72 73 6f 72 3b 0a 20 20 69 66 28 20 70 43 72 73  rsor;.  if( pCrs
22950 72 3d 3d 30 20 29 7b 0a 20 20 20 20 70 43 2d 3e  r==0 ){.    pC->
22960 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 20  nullRow = 1;.   
22970 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 72 65   break;.  }.  re
22980 73 20 3d 20 31 3b 0a 20 20 61 73 73 65 72 74 28  s = 1;.  assert(
22990 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
229a0 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d  eto==0 );.  rc =
229b0 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
229c0 5f 4e 65 78 74 20 3f 20 73 71 6c 69 74 65 33 42  _Next ? sqlite3B
229d0 74 72 65 65 4e 65 78 74 28 70 43 72 73 72 2c 20  treeNext(pCrsr, 
229e0 26 72 65 73 29 20 3a 0a 20 20 20 20 20 20 20 20  &res) :.        
229f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22a00 20 20 20 20 20 20 73 71 6c 69 74 65 33 42 74 72        sqlite3Btr
22a10 65 65 50 72 65 76 69 6f 75 73 28 70 43 72 73 72  eePrevious(pCrsr
22a20 2c 20 26 72 65 73 29 3b 0a 20 20 70 43 2d 3e 6e  , &res);.  pC->n
22a30 75 6c 6c 52 6f 77 20 3d 20 28 75 38 29 72 65 73  ullRow = (u8)res
22a40 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61  ;.  pC->cacheSta
22a50 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c  tus = CACHE_STAL
22a60 45 3b 0a 20 20 69 66 28 20 72 65 73 3d 3d 30 20  E;.  if( res==0 
22a70 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  ){.    pc = pOp-
22a80 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 69 66 28  >p2 - 1;.    if(
22a90 20 70 4f 70 2d 3e 70 35 20 29 20 70 2d 3e 61 43   pOp->p5 ) p->aC
22aa0 6f 75 6e 74 65 72 5b 70 4f 70 2d 3e 70 35 2d 31  ounter[pOp->p5-1
22ab0 5d 2b 2b 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  ]++;.#ifdef SQLI
22ac0 54 45 5f 54 45 53 54 0a 20 20 20 20 73 71 6c 69  TE_TEST.    sqli
22ad0 74 65 33 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74  te3_search_count
22ae0 2b 2b 3b 0a 23 65 6e 64 69 66 0a 20 20 7d 0a 20  ++;.#endif.  }. 
22af0 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69   pC->rowidIsVali
22b00 64 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a  d = 0;.  break;.
22b10 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64  }../* Opcode: Id
22b20 78 49 6e 73 65 72 74 20 50 31 20 50 32 20 50 33  xInsert P1 P2 P3
22b30 20 2a 20 50 35 0a 2a 2a 0a 2a 2a 20 52 65 67 69   * P5.**.** Regi
22b40 73 74 65 72 20 50 32 20 68 6f 6c 64 73 20 61 20  ster P2 holds a 
22b50 53 51 4c 20 69 6e 64 65 78 20 6b 65 79 20 6d 61  SQL index key ma
22b60 64 65 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20  de using the.** 
22b70 4d 61 6b 65 52 65 63 6f 72 64 20 69 6e 73 74 72  MakeRecord instr
22b80 75 63 74 69 6f 6e 73 2e 20 20 54 68 69 73 20 6f  uctions.  This o
22b90 70 63 6f 64 65 20 77 72 69 74 65 73 20 74 68 61  pcode writes tha
22ba0 74 20 6b 65 79 0a 2a 2a 20 69 6e 74 6f 20 74 68  t key.** into th
22bb0 65 20 69 6e 64 65 78 20 50 31 2e 20 20 44 61 74  e index P1.  Dat
22bc0 61 20 66 6f 72 20 74 68 65 20 65 6e 74 72 79 20  a for the entry 
22bd0 69 73 20 6e 69 6c 2e 0a 2a 2a 0a 2a 2a 20 50 33  is nil..**.** P3
22be0 20 69 73 20 61 20 66 6c 61 67 20 74 68 61 74 20   is a flag that 
22bf0 70 72 6f 76 69 64 65 73 20 61 20 68 69 6e 74 20  provides a hint 
22c00 74 6f 20 74 68 65 20 62 2d 74 72 65 65 20 6c 61  to the b-tree la
22c10 79 65 72 20 74 68 61 74 20 74 68 69 73 0a 2a 2a  yer that this.**
22c20 20 69 6e 73 65 72 74 20 69 73 20 6c 69 6b 65 6c   insert is likel
22c30 79 20 74 6f 20 62 65 20 61 6e 20 61 70 70 65 6e  y to be an appen
22c40 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e  d..**.** This in
22c50 73 74 72 75 63 74 69 6f 6e 20 6f 6e 6c 79 20 77  struction only w
22c60 6f 72 6b 73 20 66 6f 72 20 69 6e 64 69 63 65 73  orks for indices
22c70 2e 20 20 54 68 65 20 65 71 75 69 76 61 6c 65 6e  .  The equivalen
22c80 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a  t instruction.**
22c90 20 66 6f 72 20 74 61 62 6c 65 73 20 69 73 20 4f   for tables is O
22ca0 50 5f 49 6e 73 65 72 74 2e 0a 2a 2f 0a 63 61 73  P_Insert..*/.cas
22cb0 65 20 4f 50 5f 49 64 78 49 6e 73 65 72 74 3a 20  e OP_IdxInsert: 
22cc0 7b 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 32 20  {        /* in2 
22cd0 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  */.  VdbeCursor 
22ce0 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20  *pC;.  BtCursor 
22cf0 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 6e 4b  *pCrsr;.  int nK
22d00 65 79 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  ey;.  const char
22d10 20 2a 7a 4b 65 79 3b 0a 0a 20 20 61 73 73 65 72   *zKey;..  asser
22d20 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
22d30 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
22d40 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  sor );.  pC = p-
22d50 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
22d60 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
22d70 20 29 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d   );.  pIn2 = &aM
22d80 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61  em[pOp->p2];.  a
22d90 73 73 65 72 74 28 20 70 49 6e 32 2d 3e 66 6c 61  ssert( pIn2->fla
22da0 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b  gs & MEM_Blob );
22db0 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70  .  pCrsr = pC->p
22dc0 43 75 72 73 6f 72 3b 0a 20 20 69 66 28 20 41 4c  Cursor;.  if( AL
22dd0 57 41 59 53 28 70 43 72 73 72 21 3d 30 29 20 29  WAYS(pCrsr!=0) )
22de0 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  {.    assert( pC
22df0 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29 3b 0a  ->isTable==0 );.
22e00 20 20 20 20 72 63 20 3d 20 45 78 70 61 6e 64 42      rc = ExpandB
22e10 6c 6f 62 28 70 49 6e 32 29 3b 0a 20 20 20 20 69  lob(pIn2);.    i
22e20 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
22e30 20 29 7b 0a 20 20 20 20 20 20 6e 4b 65 79 20 3d   ){.      nKey =
22e40 20 70 49 6e 32 2d 3e 6e 3b 0a 20 20 20 20 20 20   pIn2->n;.      
22e50 7a 4b 65 79 20 3d 20 70 49 6e 32 2d 3e 7a 3b 0a  zKey = pIn2->z;.
22e60 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
22e70 65 33 42 74 72 65 65 49 6e 73 65 72 74 28 70 43  e3BtreeInsert(pC
22e80 72 73 72 2c 20 7a 4b 65 79 2c 20 6e 4b 65 79 2c  rsr, zKey, nKey,
22e90 20 22 22 2c 20 30 2c 20 30 2c 20 70 4f 70 2d 3e   "", 0, 0, pOp->
22ea0 70 33 2c 20 0a 20 20 20 20 20 20 20 20 20 20 28  p3, .          (
22eb0 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41  (pOp->p5 & OPFLA
22ec0 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54 29  G_USESEEKRESULT)
22ed0 20 3f 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c   ? pC->seekResul
22ee0 74 20 3a 20 30 29 0a 20 20 20 20 20 20 29 3b 0a  t : 0).      );.
22ef0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 43        assert( pC
22f00 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
22f10 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 70 43 2d  ==0 );.      pC-
22f20 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
22f30 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 20 20  ACHE_STALE;.    
22f40 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  }.  }.  break;.}
22f50 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78  ../* Opcode: Idx
22f60 44 65 6c 65 74 65 20 50 31 20 50 32 20 50 33 20  Delete P1 P2 P3 
22f70 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f  * *.**.** The co
22f80 6e 74 65 6e 74 20 6f 66 20 50 33 20 72 65 67 69  ntent of P3 regi
22f90 73 74 65 72 73 20 73 74 61 72 74 69 6e 67 20 61  sters starting a
22fa0 74 20 72 65 67 69 73 74 65 72 20 50 32 20 66 6f  t register P2 fo
22fb0 72 6d 0a 2a 2a 20 61 6e 20 75 6e 70 61 63 6b 65  rm.** an unpacke
22fc0 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 54 68 69  d index key. Thi
22fd0 73 20 6f 70 63 6f 64 65 20 72 65 6d 6f 76 65 73  s opcode removes
22fe0 20 74 68 61 74 20 65 6e 74 72 79 20 66 72 6f 6d   that entry from
22ff0 20 74 68 65 20 0a 2a 2a 20 69 6e 64 65 78 20 6f   the .** index o
23000 70 65 6e 65 64 20 62 79 20 63 75 72 73 6f 72 20  pened by cursor 
23010 50 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  P1..*/.case OP_I
23020 64 78 44 65 6c 65 74 65 3a 20 7b 0a 20 20 56 64  dxDelete: {.  Vd
23030 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
23040 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b  BtCursor *pCrsr;
23050 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 55 6e  .  int res;.  Un
23060 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a  packedRecord r;.
23070 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
23080 70 33 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74  p3>0 );.  assert
23090 28 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70  ( pOp->p2>0 && p
230a0 4f 70 2d 3e 70 32 2b 70 4f 70 2d 3e 70 33 3c 3d  Op->p2+pOp->p3<=
230b0 70 2d 3e 6e 4d 65 6d 2b 31 20 29 3b 0a 20 20 61  p->nMem+1 );.  a
230c0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
230d0 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
230e0 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
230f0 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
23100 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
23110 43 21 3d 30 20 29 3b 0a 20 20 70 43 72 73 72 20  C!=0 );.  pCrsr 
23120 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20  = pC->pCursor;. 
23130 20 69 66 28 20 41 4c 57 41 59 53 28 70 43 72 73   if( ALWAYS(pCrs
23140 72 21 3d 30 29 20 29 7b 0a 20 20 20 20 72 2e 70  r!=0) ){.    r.p
23150 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b  KeyInfo = pC->pK
23160 65 79 49 6e 66 6f 3b 0a 20 20 20 20 72 2e 6e 46  eyInfo;.    r.nF
23170 69 65 6c 64 20 3d 20 28 75 31 36 29 70 4f 70 2d  ield = (u16)pOp-
23180 3e 70 33 3b 0a 20 20 20 20 72 2e 66 6c 61 67 73  >p3;.    r.flags
23190 20 3d 20 30 3b 0a 20 20 20 20 72 2e 61 4d 65 6d   = 0;.    r.aMem
231a0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
231b0 5d 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  ];.#ifdef SQLITE
231c0 5f 44 45 42 55 47 0a 20 20 20 20 7b 20 69 6e 74  _DEBUG.    { int
231d0 20 69 3b 20 66 6f 72 28 69 3d 30 3b 20 69 3c 72   i; for(i=0; i<r
231e0 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b 29 20 61 73  .nField; i++) as
231f0 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
23200 28 26 72 2e 61 4d 65 6d 5b 69 5d 29 20 29 3b 20  (&r.aMem[i]) ); 
23210 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 72 63 20  }.#endif.    rc 
23220 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f  = sqlite3BtreeMo
23230 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 72  vetoUnpacked(pCr
23240 73 72 2c 20 26 72 2c 20 30 2c 20 30 2c 20 26 72  sr, &r, 0, 0, &r
23250 65 73 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d  es);.    if( rc=
23260 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 72 65  =SQLITE_OK && re
23270 73 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 72 63  s==0 ){.      rc
23280 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 44   = sqlite3BtreeD
23290 65 6c 65 74 65 28 70 43 72 73 72 29 3b 0a 20 20  elete(pCrsr);.  
232a0 20 20 7d 0a 20 20 20 20 61 73 73 65 72 74 28 20    }.    assert( 
232b0 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
232c0 74 6f 3d 3d 30 20 29 3b 0a 20 20 20 20 70 43 2d  to==0 );.    pC-
232d0 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
232e0 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 7d 0a  ACHE_STALE;.  }.
232f0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
23300 70 63 6f 64 65 3a 20 49 64 78 52 6f 77 69 64 20  pcode: IdxRowid 
23310 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
23320 2a 20 57 72 69 74 65 20 69 6e 74 6f 20 72 65 67  * Write into reg
23330 69 73 74 65 72 20 50 32 20 61 6e 20 69 6e 74 65  ister P2 an inte
23340 67 65 72 20 77 68 69 63 68 20 69 73 20 74 68 65  ger which is the
23350 20 6c 61 73 74 20 65 6e 74 72 79 20 69 6e 20 74   last entry in t
23360 68 65 20 72 65 63 6f 72 64 20 61 74 0a 2a 2a 20  he record at.** 
23370 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 69  the end of the i
23380 6e 64 65 78 20 6b 65 79 20 70 6f 69 6e 74 65 64  ndex key pointed
23390 20 74 6f 20 62 79 20 63 75 72 73 6f 72 20 50 31   to by cursor P1
233a0 2e 20 20 54 68 69 73 20 69 6e 74 65 67 65 72 20  .  This integer 
233b0 73 68 6f 75 6c 64 20 62 65 0a 2a 2a 20 74 68 65  should be.** the
233c0 20 72 6f 77 69 64 20 6f 66 20 74 68 65 20 74 61   rowid of the ta
233d0 62 6c 65 20 65 6e 74 72 79 20 74 6f 20 77 68 69  ble entry to whi
233e0 63 68 20 74 68 69 73 20 69 6e 64 65 78 20 65 6e  ch this index en
233f0 74 72 79 20 70 6f 69 6e 74 73 2e 0a 2a 2a 0a 2a  try points..**.*
23400 2a 20 53 65 65 20 61 6c 73 6f 3a 20 52 6f 77 69  * See also: Rowi
23410 64 2c 20 4d 61 6b 65 52 65 63 6f 72 64 2e 0a 2a  d, MakeRecord..*
23420 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 52 6f 77  /.case OP_IdxRow
23430 69 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  id: {           
23440 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65     /* out2-prere
23450 6c 65 61 73 65 20 2a 2f 0a 20 20 42 74 43 75 72  lease */.  BtCur
23460 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 56 64  sor *pCrsr;.  Vd
23470 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
23480 69 36 34 20 72 6f 77 69 64 3b 0a 0a 20 20 61 73  i64 rowid;..  as
23490 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
234a0 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
234b0 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
234c0 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
234d0 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
234e0 21 3d 30 20 29 3b 0a 20 20 70 43 72 73 72 20 3d  !=0 );.  pCrsr =
234f0 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20   pC->pCursor;.  
23500 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pOut->flags = ME
23510 4d 5f 4e 75 6c 6c 3b 0a 20 20 69 66 28 20 41 4c  M_Null;.  if( AL
23520 57 41 59 53 28 70 43 72 73 72 21 3d 30 29 20 29  WAYS(pCrsr!=0) )
23530 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  {.    rc = sqlit
23540 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65  e3VdbeCursorMove
23550 74 6f 28 70 43 29 3b 0a 20 20 20 20 69 66 28 20  to(pC);.    if( 
23560 4e 45 56 45 52 28 72 63 29 20 29 20 67 6f 74 6f  NEVER(rc) ) goto
23570 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
23580 72 6f 72 3b 0a 20 20 20 20 61 73 73 65 72 74 28  ror;.    assert(
23590 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
235a0 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 20 20 61 73  eto==0 );.    as
235b0 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c  sert( pC->isTabl
235c0 65 3d 3d 30 20 29 3b 0a 20 20 20 20 69 66 28 20  e==0 );.    if( 
235d0 21 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a  !pC->nullRow ){.
235e0 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
235f0 65 33 56 64 62 65 49 64 78 52 6f 77 69 64 28 64  e3VdbeIdxRowid(d
23600 62 2c 20 70 43 72 73 72 2c 20 26 72 6f 77 69 64  b, pCrsr, &rowid
23610 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 21  );.      if( rc!
23620 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
23630 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74        goto abort
23640 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
23650 20 20 20 20 20 7d 0a 20 20 20 20 20 20 70 4f 75       }.      pOu
23660 74 2d 3e 75 2e 69 20 3d 20 72 6f 77 69 64 3b 0a  t->u.i = rowid;.
23670 20 20 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67        pOut->flag
23680 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20  s = MEM_Int;.   
23690 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a   }.  }.  break;.
236a0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64  }../* Opcode: Id
236b0 78 47 45 20 50 31 20 50 32 20 50 33 20 50 34 20  xGE P1 P2 P3 P4 
236c0 50 35 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20  P5.**.** The P4 
236d0 72 65 67 69 73 74 65 72 20 76 61 6c 75 65 73 20  register values 
236e0 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 50  beginning with P
236f0 33 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b  3 form an unpack
23700 65 64 20 69 6e 64 65 78 20 0a 2a 2a 20 6b 65 79  ed index .** key
23710 20 74 68 61 74 20 6f 6d 69 74 73 20 74 68 65 20   that omits the 
23720 52 4f 57 49 44 2e 20 20 43 6f 6d 70 61 72 65 20  ROWID.  Compare 
23730 74 68 69 73 20 6b 65 79 20 76 61 6c 75 65 20 61  this key value a
23740 67 61 69 6e 73 74 20 74 68 65 20 69 6e 64 65 78  gainst the index
23750 20 0a 2a 2a 20 74 68 61 74 20 50 31 20 69 73 20   .** that P1 is 
23760 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69  currently pointi
23770 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e 67 20  ng to, ignoring 
23780 74 68 65 20 52 4f 57 49 44 20 6f 6e 20 74 68 65  the ROWID on the
23790 20 50 31 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a   P1 index..**.**
237a0 20 49 66 20 74 68 65 20 50 31 20 69 6e 64 65 78   If the P1 index
237b0 20 65 6e 74 72 79 20 69 73 20 67 72 65 61 74 65   entry is greate
237c0 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20  r than or equal 
237d0 74 6f 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65  to the key value
237e0 0a 2a 2a 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f  .** then jump to
237f0 20 50 32 2e 20 20 4f 74 68 65 72 77 69 73 65 20   P2.  Otherwise 
23800 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  fall through to 
23810 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63  the next instruc
23820 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  tion..**.** If P
23830 35 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 20 74 68  5 is non-zero th
23840 65 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65  en the key value
23850 20 69 73 20 69 6e 63 72 65 61 73 65 64 20 62 79   is increased by
23860 20 61 6e 20 65 70 73 69 6c 6f 6e 20 0a 2a 2a 20   an epsilon .** 
23870 70 72 69 6f 72 20 74 6f 20 74 68 65 20 63 6f 6d  prior to the com
23880 70 61 72 69 73 6f 6e 2e 20 20 54 68 69 73 20 6d  parison.  This m
23890 61 6b 65 20 74 68 65 20 6f 70 63 6f 64 65 20 77  ake the opcode w
238a0 6f 72 6b 20 6c 69 6b 65 20 49 64 78 47 54 20 65  ork like IdxGT e
238b0 78 63 65 70 74 0a 2a 2a 20 74 68 61 74 20 69 66  xcept.** that if
238c0 20 74 68 65 20 6b 65 79 20 66 72 6f 6d 20 72 65   the key from re
238d0 67 69 73 74 65 72 20 50 33 20 69 73 20 61 20 70  gister P3 is a p
238e0 72 65 66 69 78 20 6f 66 20 74 68 65 20 6b 65 79  refix of the key
238f0 20 69 6e 20 74 68 65 20 63 75 72 73 6f 72 2c 0a   in the cursor,.
23900 2a 2a 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  ** the result is
23910 20 66 61 6c 73 65 20 77 68 65 72 65 61 73 20 69   false whereas i
23920 74 20 77 6f 75 6c 64 20 62 65 20 74 72 75 65 20  t would be true 
23930 77 69 74 68 20 49 64 78 47 54 2e 0a 2a 2f 0a 2f  with IdxGT..*/./
23940 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 4c 54 20  * Opcode: IdxLT 
23950 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
23960 2a 0a 2a 2a 20 54 68 65 20 50 34 20 72 65 67 69  *.** The P4 regi
23970 73 74 65 72 20 76 61 6c 75 65 73 20 62 65 67 69  ster values begi
23980 6e 6e 69 6e 67 20 77 69 74 68 20 50 33 20 66 6f  nning with P3 fo
23990 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69  rm an unpacked i
239a0 6e 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61  ndex .** key tha
239b0 74 20 6f 6d 69 74 73 20 74 68 65 20 52 4f 57 49  t omits the ROWI
239c0 44 2e 20 20 43 6f 6d 70 61 72 65 20 74 68 69 73  D.  Compare this
239d0 20 6b 65 79 20 76 61 6c 75 65 20 61 67 61 69 6e   key value again
239e0 73 74 20 74 68 65 20 69 6e 64 65 78 20 0a 2a 2a  st the index .**
239f0 20 74 68 61 74 20 50 31 20 69 73 20 63 75 72 72   that P1 is curr
23a00 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74  ently pointing t
23a10 6f 2c 20 69 67 6e 6f 72 69 6e 67 20 74 68 65 20  o, ignoring the 
23a20 52 4f 57 49 44 20 6f 6e 20 74 68 65 20 50 31 20  ROWID on the P1 
23a30 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  index..**.** If 
23a40 74 68 65 20 50 31 20 69 6e 64 65 78 20 65 6e 74  the P1 index ent
23a50 72 79 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20  ry is less than 
23a60 74 68 65 20 6b 65 79 20 76 61 6c 75 65 20 74 68  the key value th
23a70 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a  en jump to P2..*
23a80 2a 20 4f 74 68 65 72 77 69 73 65 20 66 61 6c 6c  * Otherwise fall
23a90 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
23aa0 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
23ab0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73  ..**.** If P5 is
23ac0 20 6e 6f 6e 2d 7a 65 72 6f 20 74 68 65 6e 20 74   non-zero then t
23ad0 68 65 20 6b 65 79 20 76 61 6c 75 65 20 69 73 20  he key value is 
23ae0 69 6e 63 72 65 61 73 65 64 20 62 79 20 61 6e 20  increased by an 
23af0 65 70 73 69 6c 6f 6e 20 70 72 69 6f 72 20 0a 2a  epsilon prior .*
23b00 2a 20 74 6f 20 74 68 65 20 63 6f 6d 70 61 72 69  * to the compari
23b10 73 6f 6e 2e 20 20 54 68 69 73 20 6d 61 6b 65 73  son.  This makes
23b20 20 74 68 65 20 6f 70 63 6f 64 65 20 77 6f 72 6b   the opcode work
23b30 20 6c 69 6b 65 20 49 64 78 4c 45 2e 0a 2a 2f 0a   like IdxLE..*/.
23b40 63 61 73 65 20 4f 50 5f 49 64 78 4c 54 3a 20 20  case OP_IdxLT:  
23b50 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
23b60 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 47 45  */.case OP_IdxGE
23b70 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  : {        /* ju
23b80 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73  mp */.  VdbeCurs
23b90 6f 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65  or *pC;.  int re
23ba0 73 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63  s;.  UnpackedRec
23bb0 6f 72 64 20 72 3b 0a 0a 20 20 61 73 73 65 72 74  ord r;..  assert
23bc0 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
23bd0 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
23be0 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
23bf0 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
23c00 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
23c10 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
23c20 3e 69 73 4f 72 64 65 72 65 64 20 29 3b 0a 20 20  >isOrdered );.  
23c30 69 66 28 20 41 4c 57 41 59 53 28 70 43 2d 3e 70  if( ALWAYS(pC->p
23c40 43 75 72 73 6f 72 21 3d 30 29 20 29 7b 0a 20 20  Cursor!=0) ){.  
23c50 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65    assert( pC->de
23c60 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20  ferredMoveto==0 
23c70 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
23c80 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c 20 70 4f 70  Op->p5==0 || pOp
23c90 2d 3e 70 35 3d 3d 31 20 29 3b 0a 20 20 20 20 61  ->p5==1 );.    a
23ca0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79  ssert( pOp->p4ty
23cb0 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a  pe==P4_INT32 );.
23cc0 20 20 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d      r.pKeyInfo =
23cd0 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20   pC->pKeyInfo;. 
23ce0 20 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75     r.nField = (u
23cf0 31 36 29 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20  16)pOp->p4.i;.  
23d00 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 29 7b    if( pOp->p5 ){
23d10 0a 20 20 20 20 20 20 72 2e 66 6c 61 67 73 20 3d  .      r.flags =
23d20 20 55 4e 50 41 43 4b 45 44 5f 49 4e 43 52 4b 45   UNPACKED_INCRKE
23d30 59 20 7c 20 55 4e 50 41 43 4b 45 44 5f 49 47 4e  Y | UNPACKED_IGN
23d40 4f 52 45 5f 52 4f 57 49 44 3b 0a 20 20 20 20 7d  ORE_ROWID;.    }
23d50 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 2e 66 6c  else{.      r.fl
23d60 61 67 73 20 3d 20 55 4e 50 41 43 4b 45 44 5f 49  ags = UNPACKED_I
23d70 47 4e 4f 52 45 5f 52 4f 57 49 44 3b 0a 20 20 20  GNORE_ROWID;.   
23d80 20 7d 0a 20 20 20 20 72 2e 61 4d 65 6d 20 3d 20   }.    r.aMem = 
23d90 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
23da0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
23db0 42 55 47 0a 20 20 20 20 7b 20 69 6e 74 20 69 3b  BUG.    { int i;
23dc0 20 66 6f 72 28 69 3d 30 3b 20 69 3c 72 2e 6e 46   for(i=0; i<r.nF
23dd0 69 65 6c 64 3b 20 69 2b 2b 29 20 61 73 73 65 72  ield; i++) asser
23de0 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 72  t( memIsValid(&r
23df0 2e 61 4d 65 6d 5b 69 5d 29 20 29 3b 20 7d 0a 23  .aMem[i]) ); }.#
23e00 65 6e 64 69 66 0a 20 20 20 20 72 63 20 3d 20 73  endif.    rc = s
23e10 71 6c 69 74 65 33 56 64 62 65 49 64 78 4b 65 79  qlite3VdbeIdxKey
23e20 43 6f 6d 70 61 72 65 28 70 43 2c 20 26 72 2c 20  Compare(pC, &r, 
23e30 26 72 65 73 29 3b 0a 20 20 20 20 69 66 28 20 70  &res);.    if( p
23e40 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49  Op->opcode==OP_I
23e50 64 78 4c 54 20 29 7b 0a 20 20 20 20 20 20 72 65  dxLT ){.      re
23e60 73 20 3d 20 2d 72 65 73 3b 0a 20 20 20 20 7d 65  s = -res;.    }e
23e70 6c 73 65 7b 0a 20 20 20 20 20 20 61 73 73 65 72  lse{.      asser
23e80 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  t( pOp->opcode==
23e90 4f 50 5f 49 64 78 47 45 20 29 3b 0a 20 20 20 20  OP_IdxGE );.    
23ea0 20 20 72 65 73 2b 2b 3b 0a 20 20 20 20 7d 0a 20    res++;.    }. 
23eb0 20 20 20 69 66 28 20 72 65 73 3e 30 20 29 7b 0a     if( res>0 ){.
23ec0 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e        pc = pOp->
23ed0 70 32 20 2d 20 31 20 3b 0a 20 20 20 20 7d 0a 20  p2 - 1 ;.    }. 
23ee0 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
23ef0 2a 20 4f 70 63 6f 64 65 3a 20 44 65 73 74 72 6f  * Opcode: Destro
23f00 79 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  y P1 P2 P3 * *.*
23f10 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 61 6e 20 65  *.** Delete an e
23f20 6e 74 69 72 65 20 64 61 74 61 62 61 73 65 20 74  ntire database t
23f30 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 77 68  able or index wh
23f40 6f 73 65 20 72 6f 6f 74 20 70 61 67 65 20 69 6e  ose root page in
23f50 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a   the database.**
23f60 20 66 69 6c 65 20 69 73 20 67 69 76 65 6e 20 62   file is given b
23f70 79 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  y P1..**.** The 
23f80 74 61 62 6c 65 20 62 65 69 6e 67 20 64 65 73 74  table being dest
23f90 72 6f 79 65 64 20 69 73 20 69 6e 20 74 68 65 20  royed is in the 
23fa0 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69  main database fi
23fb0 6c 65 20 69 66 20 50 33 3d 3d 30 2e 20 20 49 66  le if P3==0.  If
23fc0 0a 2a 2a 20 50 33 3d 3d 31 20 74 68 65 6e 20 74  .** P3==1 then t
23fd0 68 65 20 74 61 62 6c 65 20 74 6f 20 62 65 20 63  he table to be c
23fe0 6c 65 61 72 20 69 73 20 69 6e 20 74 68 65 20 61  lear is in the a
23ff0 75 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73  uxiliary databas
24000 65 20 66 69 6c 65 0a 2a 2a 20 74 68 61 74 20 69  e file.** that i
24010 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20  s used to store 
24020 74 61 62 6c 65 73 20 63 72 65 61 74 65 20 75 73  tables create us
24030 69 6e 67 20 43 52 45 41 54 45 20 54 45 4d 50 4f  ing CREATE TEMPO
24040 52 41 52 59 20 54 41 42 4c 45 2e 0a 2a 2a 0a 2a  RARY TABLE..**.*
24050 2a 20 49 66 20 41 55 54 4f 56 41 43 55 55 4d 20  * If AUTOVACUUM 
24060 69 73 20 65 6e 61 62 6c 65 64 20 74 68 65 6e 20  is enabled then 
24070 69 74 20 69 73 20 70 6f 73 73 69 62 6c 65 20 74  it is possible t
24080 68 61 74 20 61 6e 6f 74 68 65 72 20 72 6f 6f 74  hat another root
24090 20 70 61 67 65 0a 2a 2a 20 6d 69 67 68 74 20 62   page.** might b
240a0 65 20 6d 6f 76 65 64 20 69 6e 74 6f 20 74 68 65  e moved into the
240b0 20 6e 65 77 6c 79 20 64 65 6c 65 74 65 64 20 72   newly deleted r
240c0 6f 6f 74 20 70 61 67 65 20 69 6e 20 6f 72 64 65  oot page in orde
240d0 72 20 74 6f 20 6b 65 65 70 20 61 6c 6c 0a 2a 2a  r to keep all.**
240e0 20 72 6f 6f 74 20 70 61 67 65 73 20 63 6f 6e 74   root pages cont
240f0 69 67 75 6f 75 73 20 61 74 20 74 68 65 20 62 65  iguous at the be
24100 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65 20 64  ginning of the d
24110 61 74 61 62 61 73 65 2e 20 20 54 68 65 20 66 6f  atabase.  The fo
24120 72 6d 65 72 0a 2a 2a 20 76 61 6c 75 65 20 6f 66  rmer.** value of
24130 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65 20 74   the root page t
24140 68 61 74 20 6d 6f 76 65 64 20 2d 20 69 74 73 20  hat moved - its 
24150 76 61 6c 75 65 20 62 65 66 6f 72 65 20 74 68 65  value before the
24160 20 6d 6f 76 65 20 6f 63 63 75 72 72 65 64 20 2d   move occurred -
24170 0a 2a 2a 20 69 73 20 73 74 6f 72 65 64 20 69 6e  .** is stored in
24180 20 72 65 67 69 73 74 65 72 20 50 32 2e 20 20 49   register P2.  I
24190 66 20 6e 6f 20 70 61 67 65 20 0a 2a 2a 20 6d 6f  f no page .** mo
241a0 76 65 6d 65 6e 74 20 77 61 73 20 72 65 71 75 69  vement was requi
241b0 72 65 64 20 28 62 65 63 61 75 73 65 20 74 68 65  red (because the
241c0 20 74 61 62 6c 65 20 62 65 69 6e 67 20 64 72 6f   table being dro
241d0 70 70 65 64 20 77 61 73 20 61 6c 72 65 61 64 79  pped was already
241e0 20 0a 2a 2a 20 74 68 65 20 6c 61 73 74 20 6f 6e   .** the last on
241f0 65 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  e in the databas
24200 65 29 20 74 68 65 6e 20 61 20 7a 65 72 6f 20 69  e) then a zero i
24210 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  s stored in regi
24220 73 74 65 72 20 50 32 2e 0a 2a 2a 20 49 66 20 41  ster P2..** If A
24230 55 54 4f 56 41 43 55 55 4d 20 69 73 20 64 69 73  UTOVACUUM is dis
24240 61 62 6c 65 64 20 74 68 65 6e 20 61 20 7a 65 72  abled then a zer
24250 6f 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72  o is stored in r
24260 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a  egister P2..**.*
24270 2a 20 53 65 65 20 61 6c 73 6f 3a 20 43 6c 65 61  * See also: Clea
24280 72 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 65 73  r.*/.case OP_Des
24290 74 72 6f 79 3a 20 7b 20 20 20 20 20 2f 2a 20 6f  troy: {     /* o
242a0 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a  ut2-prerelease *
242b0 2f 0a 20 20 69 6e 74 20 69 4d 6f 76 65 64 3b 0a  /.  int iMoved;.
242c0 20 20 69 6e 74 20 69 43 6e 74 3b 0a 20 20 56 64    int iCnt;.  Vd
242d0 62 65 20 2a 70 56 64 62 65 3b 0a 20 20 69 6e 74  be *pVdbe;.  int
242e0 20 69 44 62 3b 0a 23 69 66 6e 64 65 66 20 53 51   iDb;.#ifndef SQ
242f0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
24300 4c 54 41 42 4c 45 0a 20 20 69 43 6e 74 20 3d 20  LTABLE.  iCnt = 
24310 30 3b 0a 20 20 66 6f 72 28 70 56 64 62 65 3d 64  0;.  for(pVdbe=d
24320 62 2d 3e 70 56 64 62 65 3b 20 70 56 64 62 65 3b  b->pVdbe; pVdbe;
24330 20 70 56 64 62 65 20 3d 20 70 56 64 62 65 2d 3e   pVdbe = pVdbe->
24340 70 4e 65 78 74 29 7b 0a 20 20 20 20 69 66 28 20  pNext){.    if( 
24350 70 56 64 62 65 2d 3e 6d 61 67 69 63 3d 3d 56 44  pVdbe->magic==VD
24360 42 45 5f 4d 41 47 49 43 5f 52 55 4e 20 26 26 20  BE_MAGIC_RUN && 
24370 70 56 64 62 65 2d 3e 69 6e 56 74 61 62 4d 65 74  pVdbe->inVtabMet
24380 68 6f 64 3c 32 20 26 26 20 70 56 64 62 65 2d 3e  hod<2 && pVdbe->
24390 70 63 3e 3d 30 20 29 7b 0a 20 20 20 20 20 20 69  pc>=0 ){.      i
243a0 43 6e 74 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 7d  Cnt++;.    }.  }
243b0 0a 23 65 6c 73 65 0a 20 20 69 43 6e 74 20 3d 20  .#else.  iCnt = 
243c0 64 62 2d 3e 61 63 74 69 76 65 56 64 62 65 43 6e  db->activeVdbeCn
243d0 74 3b 0a 23 65 6e 64 69 66 0a 20 20 70 4f 75 74  t;.#endif.  pOut
243e0 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75  ->flags = MEM_Nu
243f0 6c 6c 3b 0a 20 20 69 66 28 20 69 43 6e 74 3e 31  ll;.  if( iCnt>1
24400 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c   ){.    rc = SQL
24410 49 54 45 5f 4c 4f 43 4b 45 44 3b 0a 20 20 20 20  ITE_LOCKED;.    
24420 70 2d 3e 65 72 72 6f 72 41 63 74 69 6f 6e 20 3d  p->errorAction =
24430 20 4f 45 5f 41 62 6f 72 74 3b 0a 20 20 7d 65 6c   OE_Abort;.  }el
24440 73 65 7b 0a 20 20 20 20 69 44 62 20 3d 20 70 4f  se{.    iDb = pO
24450 70 2d 3e 70 33 3b 0a 20 20 20 20 61 73 73 65 72  p->p3;.    asser
24460 74 28 20 69 43 6e 74 3d 3d 31 20 29 3b 0a 20 20  t( iCnt==1 );.  
24470 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74    assert( (p->bt
24480 72 65 65 4d 61 73 6b 20 26 20 28 31 3c 3c 69 44  reeMask & (1<<iD
24490 62 29 29 21 3d 30 20 29 3b 0a 20 20 20 20 72 63  b))!=0 );.    rc
244a0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 44   = sqlite3BtreeD
244b0 72 6f 70 54 61 62 6c 65 28 64 62 2d 3e 61 44 62  ropTable(db->aDb
244c0 5b 69 44 62 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e  [iDb].pBt, pOp->
244d0 70 31 2c 20 26 69 4d 6f 76 65 64 29 3b 0a 20 20  p1, &iMoved);.  
244e0 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20    pOut->flags = 
244f0 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 70 4f 75  MEM_Int;.    pOu
24500 74 2d 3e 75 2e 69 20 3d 20 69 4d 6f 76 65 64 3b  t->u.i = iMoved;
24510 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
24520 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 0a  OMIT_AUTOVACUUM.
24530 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
24540 54 45 5f 4f 4b 20 26 26 20 69 4d 6f 76 65 64 21  TE_OK && iMoved!
24550 3d 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  =0 ){.      sqli
24560 74 65 33 52 6f 6f 74 50 61 67 65 4d 6f 76 65 64  te3RootPageMoved
24570 28 26 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2c 20  (&db->aDb[iDb], 
24580 69 4d 6f 76 65 64 2c 20 70 4f 70 2d 3e 70 31 29  iMoved, pOp->p1)
24590 3b 0a 20 20 20 20 20 20 72 65 73 65 74 53 63 68  ;.      resetSch
245a0 65 6d 61 4f 6e 46 61 75 6c 74 20 3d 20 31 3b 0a  emaOnFault = 1;.
245b0 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 7d      }.#endif.  }
245c0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
245d0 4f 70 63 6f 64 65 3a 20 43 6c 65 61 72 20 50 31  Opcode: Clear P1
245e0 20 50 32 20 50 33 0a 2a 2a 0a 2a 2a 20 44 65 6c   P2 P3.**.** Del
245f0 65 74 65 20 61 6c 6c 20 63 6f 6e 74 65 6e 74 73  ete all contents
24600 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
24610 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20   table or index 
24620 77 68 6f 73 65 20 72 6f 6f 74 20 70 61 67 65 0a  whose root page.
24630 2a 2a 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  ** in the databa
24640 73 65 20 66 69 6c 65 20 69 73 20 67 69 76 65 6e  se file is given
24650 20 62 79 20 50 31 2e 20 20 42 75 74 2c 20 75 6e   by P1.  But, un
24660 6c 69 6b 65 20 44 65 73 74 72 6f 79 2c 20 64 6f  like Destroy, do
24670 20 6e 6f 74 0a 2a 2a 20 72 65 6d 6f 76 65 20 74   not.** remove t
24680 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  he table or inde
24690 78 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62  x from the datab
246a0 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20  ase file..**.** 
246b0 54 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20  The table being 
246c0 63 6c 65 61 72 20 69 73 20 69 6e 20 74 68 65 20  clear is in the 
246d0 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69  main database fi
246e0 6c 65 20 69 66 20 50 32 3d 3d 30 2e 20 20 49 66  le if P2==0.  If
246f0 0a 2a 2a 20 50 32 3d 3d 31 20 74 68 65 6e 20 74  .** P2==1 then t
24700 68 65 20 74 61 62 6c 65 20 74 6f 20 62 65 20 63  he table to be c
24710 6c 65 61 72 20 69 73 20 69 6e 20 74 68 65 20 61  lear is in the a
24720 75 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73  uxiliary databas
24730 65 20 66 69 6c 65 0a 2a 2a 20 74 68 61 74 20 69  e file.** that i
24740 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20  s used to store 
24750 74 61 62 6c 65 73 20 63 72 65 61 74 65 20 75 73  tables create us
24760 69 6e 67 20 43 52 45 41 54 45 20 54 45 4d 50 4f  ing CREATE TEMPO
24770 52 41 52 59 20 54 41 42 4c 45 2e 0a 2a 2a 0a 2a  RARY TABLE..**.*
24780 2a 20 49 66 20 74 68 65 20 50 33 20 76 61 6c 75  * If the P3 valu
24790 65 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74  e is non-zero, t
247a0 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20 72 65  hen the table re
247b0 66 65 72 72 65 64 20 74 6f 20 6d 75 73 74 20 62  ferred to must b
247c0 65 20 61 6e 0a 2a 2a 20 69 6e 74 6b 65 79 20 74  e an.** intkey t
247d0 61 62 6c 65 20 28 61 6e 20 53 51 4c 20 74 61 62  able (an SQL tab
247e0 6c 65 2c 20 6e 6f 74 20 61 6e 20 69 6e 64 65 78  le, not an index
247f0 29 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65 20  ). In this case 
24800 74 68 65 20 72 6f 77 20 63 68 61 6e 67 65 20 0a  the row change .
24810 2a 2a 20 63 6f 75 6e 74 20 69 73 20 69 6e 63 72  ** count is incr
24820 65 6d 65 6e 74 65 64 20 62 79 20 74 68 65 20 6e  emented by the n
24830 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e  umber of rows in
24840 20 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67   the table being
24850 20 63 6c 65 61 72 65 64 2e 20 0a 2a 2a 20 49 66   cleared. .** If
24860 20 50 33 20 69 73 20 67 72 65 61 74 65 72 20 74   P3 is greater t
24870 68 61 6e 20 7a 65 72 6f 2c 20 74 68 65 6e 20 74  han zero, then t
24880 68 65 20 76 61 6c 75 65 20 73 74 6f 72 65 64 20  he value stored 
24890 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 69  in register P3 i
248a0 73 0a 2a 2a 20 61 6c 73 6f 20 69 6e 63 72 65 6d  s.** also increm
248b0 65 6e 74 65 64 20 62 79 20 74 68 65 20 6e 75 6d  ented by the num
248c0 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74  ber of rows in t
248d0 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 63  he table being c
248e0 6c 65 61 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 53 65  leared..**.** Se
248f0 65 20 61 6c 73 6f 3a 20 44 65 73 74 72 6f 79 0a  e also: Destroy.
24900 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6c 65 61 72  */.case OP_Clear
24910 3a 20 7b 0a 20 20 69 6e 74 20 6e 43 68 61 6e 67  : {.  int nChang
24920 65 3b 0a 20 0a 20 20 6e 43 68 61 6e 67 65 20 3d  e;. .  nChange =
24930 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70   0;.  assert( (p
24940 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28 31  ->btreeMask & (1
24950 3c 3c 70 4f 70 2d 3e 70 32 29 29 21 3d 30 20 29  <<pOp->p2))!=0 )
24960 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
24970 42 74 72 65 65 43 6c 65 61 72 54 61 62 6c 65 28  BtreeClearTable(
24980 0a 20 20 20 20 20 20 64 62 2d 3e 61 44 62 5b 70  .      db->aDb[p
24990 4f 70 2d 3e 70 32 5d 2e 70 42 74 2c 20 70 4f 70  Op->p2].pBt, pOp
249a0 2d 3e 70 31 2c 20 28 70 4f 70 2d 3e 70 33 20 3f  ->p1, (pOp->p3 ?
249b0 20 26 6e 43 68 61 6e 67 65 20 3a 20 30 29 0a 20   &nChange : 0). 
249c0 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70   );.  if( pOp->p
249d0 33 20 29 7b 0a 20 20 20 20 70 2d 3e 6e 43 68 61  3 ){.    p->nCha
249e0 6e 67 65 20 2b 3d 20 6e 43 68 61 6e 67 65 3b 0a  nge += nChange;.
249f0 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 33 3e      if( pOp->p3>
24a00 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72  0 ){.      asser
24a10 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61  t( memIsValid(&a
24a20 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 20 29 3b  Mem[pOp->p3]) );
24a30 0a 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74 54  .      memAboutT
24a40 6f 43 68 61 6e 67 65 28 70 2c 20 26 61 4d 65 6d  oChange(p, &aMem
24a50 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20 20 20 20  [pOp->p3]);.    
24a60 20 20 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 2e    aMem[pOp->p3].
24a70 75 2e 69 20 2b 3d 20 6e 43 68 61 6e 67 65 3b 0a  u.i += nChange;.
24a80 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61      }.  }.  brea
24a90 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
24aa0 20 43 72 65 61 74 65 54 61 62 6c 65 20 50 31 20   CreateTable P1 
24ab0 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41  P2 * * *.**.** A
24ac0 6c 6c 6f 63 61 74 65 20 61 20 6e 65 77 20 74 61  llocate a new ta
24ad0 62 6c 65 20 69 6e 20 74 68 65 20 6d 61 69 6e 20  ble in the main 
24ae0 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66  database file if
24af0 20 50 31 3d 3d 30 20 6f 72 20 69 6e 20 74 68 65   P1==0 or in the
24b00 0a 2a 2a 20 61 75 78 69 6c 69 61 72 79 20 64 61  .** auxiliary da
24b10 74 61 62 61 73 65 20 66 69 6c 65 20 69 66 20 50  tabase file if P
24b20 31 3d 3d 31 20 6f 72 20 69 6e 20 61 6e 20 61 74  1==1 or in an at
24b30 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65 20  tached database 
24b40 69 66 0a 2a 2a 20 50 31 3e 31 2e 20 20 57 72 69  if.** P1>1.  Wri
24b50 74 65 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65  te the root page
24b60 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20 6e   number of the n
24b70 65 77 20 74 61 62 6c 65 20 69 6e 74 6f 0a 2a 2a  ew table into.**
24b80 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 0a   register P2.**.
24b90 2a 2a 20 54 68 65 20 64 69 66 66 65 72 65 6e 63  ** The differenc
24ba0 65 20 62 65 74 77 65 65 6e 20 61 20 74 61 62 6c  e between a tabl
24bb0 65 20 61 6e 64 20 61 6e 20 69 6e 64 65 78 20 69  e and an index i
24bc0 73 20 74 68 69 73 3a 20 20 41 20 74 61 62 6c 65  s this:  A table
24bd0 20 6d 75 73 74 0a 2a 2a 20 68 61 76 65 20 61 20   must.** have a 
24be0 34 2d 62 79 74 65 20 69 6e 74 65 67 65 72 20 6b  4-byte integer k
24bf0 65 79 20 61 6e 64 20 63 61 6e 20 68 61 76 65 20  ey and can have 
24c00 61 72 62 69 74 72 61 72 79 20 64 61 74 61 2e 20  arbitrary data. 
24c10 20 41 6e 20 69 6e 64 65 78 0a 2a 2a 20 68 61 73   An index.** has
24c20 20 61 6e 20 61 72 62 69 74 72 61 72 79 20 6b 65   an arbitrary ke
24c30 79 20 62 75 74 20 6e 6f 20 64 61 74 61 2e 0a 2a  y but no data..*
24c40 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 43  *.** See also: C
24c50 72 65 61 74 65 49 6e 64 65 78 0a 2a 2f 0a 2f 2a  reateIndex.*/./*
24c60 20 4f 70 63 6f 64 65 3a 20 43 72 65 61 74 65 49   Opcode: CreateI
24c70 6e 64 65 78 20 50 31 20 50 32 20 2a 20 2a 20 2a  ndex P1 P2 * * *
24c80 0a 2a 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65 20  .**.** Allocate 
24c90 61 20 6e 65 77 20 69 6e 64 65 78 20 69 6e 20 74  a new index in t
24ca0 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
24cb0 20 66 69 6c 65 20 69 66 20 50 31 3d 3d 30 20 6f   file if P1==0 o
24cc0 72 20 69 6e 20 74 68 65 0a 2a 2a 20 61 75 78 69  r in the.** auxi
24cd0 6c 69 61 72 79 20 64 61 74 61 62 61 73 65 20 66  liary database f
24ce0 69 6c 65 20 69 66 20 50 31 3d 3d 31 20 6f 72 20  ile if P1==1 or 
24cf0 69 6e 20 61 6e 20 61 74 74 61 63 68 65 64 20 64  in an attached d
24d00 61 74 61 62 61 73 65 20 69 66 0a 2a 2a 20 50 31  atabase if.** P1
24d10 3e 31 2e 20 20 57 72 69 74 65 20 74 68 65 20 72  >1.  Write the r
24d20 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72 20  oot page number 
24d30 6f 66 20 74 68 65 20 6e 65 77 20 74 61 62 6c 65  of the new table
24d40 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65   into.** registe
24d50 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  r P2..**.** See 
24d60 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 6f 6e  documentation on
24d70 20 4f 50 5f 43 72 65 61 74 65 54 61 62 6c 65 20   OP_CreateTable 
24d80 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69  for additional i
24d90 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 63  nformation..*/.c
24da0 61 73 65 20 4f 50 5f 43 72 65 61 74 65 49 6e 64  ase OP_CreateInd
24db0 65 78 3a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ex:            /
24dc0 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73  * out2-prereleas
24dd0 65 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 72 65  e */.case OP_Cre
24de0 61 74 65 54 61 62 6c 65 3a 20 7b 20 20 20 20 20  ateTable: {     
24df0 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65       /* out2-pre
24e00 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69 6e 74  release */.  int
24e10 20 70 67 6e 6f 3b 0a 20 20 69 6e 74 20 66 6c 61   pgno;.  int fla
24e20 67 73 3b 0a 20 20 44 62 20 2a 70 44 62 3b 0a 0a  gs;.  Db *pDb;..
24e30 20 20 70 67 6e 6f 20 3d 20 30 3b 0a 20 20 61 73    pgno = 0;.  as
24e40 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
24e50 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e   && pOp->p1<db->
24e60 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28  nDb );.  assert(
24e70 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26   (p->btreeMask &
24e80 20 28 31 3c 3c 70 4f 70 2d 3e 70 31 29 29 21 3d   (1<<pOp->p1))!=
24e90 30 20 29 3b 0a 20 20 70 44 62 20 3d 20 26 64 62  0 );.  pDb = &db
24ea0 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  ->aDb[pOp->p1];.
24eb0 20 20 61 73 73 65 72 74 28 20 70 44 62 2d 3e 70    assert( pDb->p
24ec0 42 74 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 70  Bt!=0 );.  if( p
24ed0 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43  Op->opcode==OP_C
24ee0 72 65 61 74 65 54 61 62 6c 65 20 29 7b 0a 20 20  reateTable ){.  
24ef0 20 20 2f 2a 20 66 6c 61 67 73 20 3d 20 42 54 52    /* flags = BTR
24f00 45 45 5f 49 4e 54 4b 45 59 3b 20 2a 2f 0a 20 20  EE_INTKEY; */.  
24f10 20 20 66 6c 61 67 73 20 3d 20 42 54 52 45 45 5f    flags = BTREE_
24f20 49 4e 54 4b 45 59 3b 0a 20 20 7d 65 6c 73 65 7b  INTKEY;.  }else{
24f30 0a 20 20 20 20 66 6c 61 67 73 20 3d 20 42 54 52  .    flags = BTR
24f40 45 45 5f 42 4c 4f 42 4b 45 59 3b 0a 20 20 7d 0a  EE_BLOBKEY;.  }.
24f50 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
24f60 72 65 65 43 72 65 61 74 65 54 61 62 6c 65 28 70  reeCreateTable(p
24f70 44 62 2d 3e 70 42 74 2c 20 26 70 67 6e 6f 2c 20  Db->pBt, &pgno, 
24f80 66 6c 61 67 73 29 3b 0a 20 20 70 4f 75 74 2d 3e  flags);.  pOut->
24f90 75 2e 69 20 3d 20 70 67 6e 6f 3b 0a 20 20 62 72  u.i = pgno;.  br
24fa0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
24fb0 65 3a 20 50 61 72 73 65 53 63 68 65 6d 61 20 50  e: ParseSchema P
24fc0 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a  1 P2 * P4 *.**.*
24fd0 2a 20 52 65 61 64 20 61 6e 64 20 70 61 72 73 65  * Read and parse
24fe0 20 61 6c 6c 20 65 6e 74 72 69 65 73 20 66 72 6f   all entries fro
24ff0 6d 20 74 68 65 20 53 51 4c 49 54 45 5f 4d 41 53  m the SQLITE_MAS
25000 54 45 52 20 74 61 62 6c 65 20 6f 66 20 64 61 74  TER table of dat
25010 61 62 61 73 65 20 50 31 0a 2a 2a 20 74 68 61 74  abase P1.** that
25020 20 6d 61 74 63 68 20 74 68 65 20 57 48 45 52 45   match the WHERE
25030 20 63 6c 61 75 73 65 20 50 34 2e 20 20 50 32 20   clause P4.  P2 
25040 69 73 20 74 68 65 20 22 66 6f 72 63 65 22 20 66  is the "force" f
25050 6c 61 67 2e 20 20 20 41 6c 77 61 79 73 20 64 6f  lag.   Always do
25060 0a 2a 2a 20 74 68 65 20 70 61 72 73 69 6e 67 20  .** the parsing 
25070 69 66 20 50 32 20 69 73 20 74 72 75 65 2e 20 20  if P2 is true.  
25080 49 66 20 50 32 20 69 73 20 66 61 6c 73 65 2c 20  If P2 is false, 
25090 74 68 65 6e 20 74 68 69 73 20 72 6f 75 74 69 6e  then this routin
250a0 65 20 69 73 20 61 0a 2a 2a 20 6e 6f 2d 6f 70 20  e is a.** no-op 
250b0 69 66 20 74 68 65 20 73 63 68 65 6d 61 20 69 73  if the schema is
250c0 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 6c   not currently l
250d0 6f 61 64 65 64 2e 20 20 49 6e 20 6f 74 68 65 72  oaded.  In other
250e0 20 77 6f 72 64 73 2c 20 69 66 20 50 32 0a 2a 2a   words, if P2.**
250f0 20 69 73 20 66 61 6c 73 65 2c 20 74 68 65 20 53   is false, the S
25100 51 4c 49 54 45 5f 4d 41 53 54 45 52 20 74 61 62  QLITE_MASTER tab
25110 6c 65 20 69 73 20 6f 6e 6c 79 20 70 61 72 73 65  le is only parse
25120 64 20 69 66 20 74 68 65 20 72 65 73 74 20 6f 66  d if the rest of
25130 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 69   the.** schema i
25140 73 20 61 6c 72 65 61 64 79 20 6c 6f 61 64 65 64  s already loaded
25150 20 69 6e 74 6f 20 74 68 65 20 73 79 6d 62 6f 6c   into the symbol
25160 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68   table..**.** Th
25170 69 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65  is opcode invoke
25180 73 20 74 68 65 20 70 61 72 73 65 72 20 74 6f 20  s the parser to 
25190 63 72 65 61 74 65 20 61 20 6e 65 77 20 76 69 72  create a new vir
251a0 74 75 61 6c 20 6d 61 63 68 69 6e 65 2c 0a 2a 2a  tual machine,.**
251b0 20 74 68 65 6e 20 72 75 6e 73 20 74 68 65 20 6e   then runs the n
251c0 65 77 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69  ew virtual machi
251d0 6e 65 2e 20 20 49 74 20 69 73 20 74 68 75 73 20  ne.  It is thus 
251e0 61 20 72 65 2d 65 6e 74 72 61 6e 74 20 6f 70 63  a re-entrant opc
251f0 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ode..*/.case OP_
25200 50 61 72 73 65 53 63 68 65 6d 61 3a 20 7b 0a 20  ParseSchema: {. 
25210 20 69 6e 74 20 69 44 62 3b 0a 20 20 63 6f 6e 73   int iDb;.  cons
25220 74 20 63 68 61 72 20 2a 7a 4d 61 73 74 65 72 3b  t char *zMaster;
25230 0a 20 20 63 68 61 72 20 2a 7a 53 71 6c 3b 0a 20  .  char *zSql;. 
25240 20 49 6e 69 74 44 61 74 61 20 69 6e 69 74 44 61   InitData initDa
25250 74 61 3b 0a 0a 20 20 69 44 62 20 3d 20 70 4f 70  ta;..  iDb = pOp
25260 2d 3e 70 31 3b 0a 20 20 61 73 73 65 72 74 28 20  ->p1;.  assert( 
25270 69 44 62 3e 3d 30 20 26 26 20 69 44 62 3c 64 62  iDb>=0 && iDb<db
25280 2d 3e 6e 44 62 20 29 3b 0a 0a 20 20 2f 2a 20 49  ->nDb );..  /* I
25290 66 20 70 4f 70 2d 3e 70 32 20 69 73 20 30 2c 20  f pOp->p2 is 0, 
252a0 74 68 65 6e 20 74 68 69 73 20 6f 70 63 6f 64 65  then this opcode
252b0 20 69 73 20 62 65 69 6e 67 20 65 78 65 63 75 74   is being execut
252c0 65 64 20 74 6f 20 72 65 61 64 20 61 0a 20 20 2a  ed to read a.  *
252d0 2a 20 73 69 6e 67 6c 65 20 72 6f 77 2c 20 66 6f  * single row, fo
252e0 72 20 65 78 61 6d 70 6c 65 20 74 68 65 20 72 6f  r example the ro
252f0 77 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  w corresponding 
25300 74 6f 20 61 20 6e 65 77 20 69 6e 64 65 78 0a 20  to a new index. 
25310 20 2a 2a 20 63 72 65 61 74 65 64 20 62 79 20 74   ** created by t
25320 68 69 73 20 56 44 42 45 2c 20 66 72 6f 6d 20 74  his VDBE, from t
25330 68 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  he sqlite_master
25340 20 74 61 62 6c 65 2e 20 49 74 20 6f 6e 6c 79 0a   table. It only.
25350 20 20 2a 2a 20 64 6f 65 73 20 74 68 69 73 20 69    ** does this i
25360 66 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64  f the correspond
25370 69 6e 67 20 69 6e 2d 6d 65 6d 6f 72 79 20 73 63  ing in-memory sc
25380 68 65 6d 61 20 69 73 20 63 75 72 72 65 6e 74 6c  hema is currentl
25390 79 0a 20 20 2a 2a 20 6c 6f 61 64 65 64 2e 20 4f  y.  ** loaded. O
253a0 74 68 65 72 77 69 73 65 2c 20 74 68 65 20 6e 65  therwise, the ne
253b0 77 20 69 6e 64 65 78 20 64 65 66 69 6e 69 74 69  w index definiti
253c0 6f 6e 20 63 61 6e 20 62 65 20 6c 6f 61 64 65 64  on can be loaded
253d0 20 61 6c 6f 6e 67 0a 20 20 2a 2a 20 77 69 74 68   along.  ** with
253e0 20 74 68 65 20 72 65 73 74 20 6f 66 20 74 68 65   the rest of the
253f0 20 73 63 68 65 6d 61 20 77 68 65 6e 20 69 74 20   schema when it 
25400 69 73 20 72 65 71 75 69 72 65 64 2e 0a 20 20 2a  is required..  *
25410 2a 0a 20 20 2a 2a 20 41 6c 74 68 6f 75 67 68 20  *.  ** Although 
25420 74 68 65 20 6d 75 74 65 78 20 6f 6e 20 74 68 65  the mutex on the
25430 20 42 74 53 68 61 72 65 64 20 6f 62 6a 65 63 74   BtShared object
25440 20 74 68 61 74 20 63 6f 72 72 65 73 70 6f 6e 64   that correspond
25450 73 20 74 6f 0a 20 20 2a 2a 20 64 61 74 61 62 61  s to.  ** databa
25460 73 65 20 69 44 62 20 28 74 68 65 20 64 61 74 61  se iDb (the data
25470 62 61 73 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20  base containing 
25480 74 68 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  the sqlite_maste
25490 72 20 74 61 62 6c 65 0a 20 20 2a 2a 20 72 65 61  r table.  ** rea
254a0 64 20 62 79 20 74 68 69 73 20 69 6e 73 74 72 75  d by this instru
254b0 63 74 69 6f 6e 29 20 69 73 20 63 75 72 72 65 6e  ction) is curren
254c0 74 6c 79 20 68 65 6c 64 2c 20 69 74 20 69 73 20  tly held, it is 
254d0 6e 65 63 65 73 73 61 72 79 20 74 6f 0a 20 20 2a  necessary to.  *
254e0 2a 20 6f 62 74 61 69 6e 20 74 68 65 20 6d 75 74  * obtain the mut
254f0 65 78 65 73 20 6f 6e 20 61 6c 6c 20 61 74 74 61  exes on all atta
25500 63 68 65 64 20 64 61 74 61 62 61 73 65 73 20 62  ched databases b
25510 65 66 6f 72 65 20 63 68 65 63 6b 69 6e 67 20 69  efore checking i
25520 66 0a 20 20 2a 2a 20 74 68 65 20 73 63 68 65 6d  f.  ** the schem
25530 61 20 6f 66 20 69 44 62 20 69 73 20 6c 6f 61 64  a of iDb is load
25540 65 64 2e 20 54 68 69 73 20 69 73 20 62 65 63 61  ed. This is beca
25550 75 73 65 2c 20 61 74 20 74 68 65 20 73 74 61 72  use, at the star
25560 74 20 6f 66 0a 20 20 2a 2a 20 74 68 65 20 73 71  t of.  ** the sq
25570 6c 69 74 65 33 5f 65 78 65 63 28 29 20 63 61 6c  lite3_exec() cal
25580 6c 20 62 65 6c 6f 77 2c 20 53 51 4c 69 74 65 20  l below, SQLite 
25590 77 69 6c 6c 20 69 6e 76 6f 6b 65 20 0a 20 20 2a  will invoke .  *
255a0 2a 20 73 71 6c 69 74 65 33 42 74 72 65 65 45 6e  * sqlite3BtreeEn
255b0 74 65 72 41 6c 6c 28 29 2e 20 49 66 20 61 6c 6c  terAll(). If all
255c0 20 6d 75 74 65 78 65 73 20 61 72 65 20 6e 6f 74   mutexes are not
255d0 20 61 6c 72 65 61 64 79 20 68 65 6c 64 2c 20 74   already held, t
255e0 68 65 0a 20 20 2a 2a 20 69 44 62 20 6d 75 74 65  he.  ** iDb mute
255f0 78 20 6d 61 79 20 62 65 20 74 65 6d 70 6f 72 61  x may be tempora
25600 72 69 6c 79 20 72 65 6c 65 61 73 65 64 20 74 6f  rily released to
25610 20 61 76 6f 69 64 20 64 65 61 64 6c 6f 63 6b 2e   avoid deadlock.
25620 20 49 66 20 0a 20 20 2a 2a 20 74 68 69 73 20 68   If .  ** this h
25630 61 70 70 65 6e 73 2c 20 74 68 65 6e 20 73 6f 6d  appens, then som
25640 65 20 6f 74 68 65 72 20 74 68 72 65 61 64 20 6d  e other thread m
25650 61 79 20 64 65 6c 65 74 65 20 74 68 65 20 69 6e  ay delete the in
25660 2d 6d 65 6d 6f 72 79 20 0a 20 20 2a 2a 20 73 63  -memory .  ** sc
25670 68 65 6d 61 20 6f 66 20 64 61 74 61 62 61 73 65  hema of database
25680 20 69 44 62 20 62 65 66 6f 72 65 20 74 68 65 20   iDb before the 
25690 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 72 75  SQL statement ru
256a0 6e 73 2e 20 54 68 65 20 73 63 68 65 6d 61 0a 20  ns. The schema. 
256b0 20 2a 2a 20 77 69 6c 6c 20 6e 6f 74 20 62 65 20   ** will not be 
256c0 72 65 6c 6f 61 64 65 64 20 62 65 63 75 61 73 65  reloaded becuase
256d0 20 74 68 65 20 64 62 2d 3e 69 6e 69 74 2e 62 75   the db->init.bu
256e0 73 79 20 66 6c 61 67 20 69 73 20 73 65 74 2e 20  sy flag is set. 
256f0 54 68 69 73 0a 20 20 2a 2a 20 63 61 6e 20 72 65  This.  ** can re
25700 73 75 6c 74 20 69 6e 20 61 20 22 6e 6f 20 73 75  sult in a "no su
25710 63 68 20 74 61 62 6c 65 3a 20 73 71 6c 69 74 65  ch table: sqlite
25720 5f 6d 61 73 74 65 72 22 20 6f 72 20 22 6d 61 6c  _master" or "mal
25730 66 6f 72 6d 65 64 0a 20 20 2a 2a 20 64 61 74 61  formed.  ** data
25740 62 61 73 65 20 73 63 68 65 6d 61 22 20 65 72 72  base schema" err
25750 6f 72 20 62 65 69 6e 67 20 72 65 74 75 72 6e 65  or being returne
25760 64 20 74 6f 20 74 68 65 20 75 73 65 72 2e 0a 20  d to the user.. 
25770 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 73 71   */.  assert( sq
25780 6c 69 74 65 33 42 74 72 65 65 48 6f 6c 64 73 4d  lite3BtreeHoldsM
25790 75 74 65 78 28 64 62 2d 3e 61 44 62 5b 69 44 62  utex(db->aDb[iDb
257a0 5d 2e 70 42 74 29 20 29 3b 0a 20 20 73 71 6c 69  ].pBt) );.  sqli
257b0 74 65 33 42 74 72 65 65 45 6e 74 65 72 41 6c 6c  te3BtreeEnterAll
257c0 28 64 62 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d  (db);.  if( pOp-
257d0 3e 70 32 20 7c 7c 20 44 62 48 61 73 50 72 6f 70  >p2 || DbHasProp
257e0 65 72 74 79 28 64 62 2c 20 69 44 62 2c 20 44 42  erty(db, iDb, DB
257f0 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64 29 20 29  _SchemaLoaded) )
25800 7b 0a 20 20 20 20 7a 4d 61 73 74 65 72 20 3d 20  {.    zMaster = 
25810 53 43 48 45 4d 41 5f 54 41 42 4c 45 28 69 44 62  SCHEMA_TABLE(iDb
25820 29 3b 0a 20 20 20 20 69 6e 69 74 44 61 74 61 2e  );.    initData.
25830 64 62 20 3d 20 64 62 3b 0a 20 20 20 20 69 6e 69  db = db;.    ini
25840 74 44 61 74 61 2e 69 44 62 20 3d 20 70 4f 70 2d  tData.iDb = pOp-
25850 3e 70 31 3b 0a 20 20 20 20 69 6e 69 74 44 61 74  >p1;.    initDat
25860 61 2e 70 7a 45 72 72 4d 73 67 20 3d 20 26 70 2d  a.pzErrMsg = &p-
25870 3e 7a 45 72 72 4d 73 67 3b 0a 20 20 20 20 7a 53  >zErrMsg;.    zS
25880 71 6c 20 3d 20 73 71 6c 69 74 65 33 4d 50 72 69  ql = sqlite3MPri
25890 6e 74 66 28 64 62 2c 0a 20 20 20 20 20 20 20 22  ntf(db,.       "
258a0 53 45 4c 45 43 54 20 6e 61 6d 65 2c 20 72 6f 6f  SELECT name, roo
258b0 74 70 61 67 65 2c 20 73 71 6c 20 46 52 4f 4d 20  tpage, sql FROM 
258c0 27 25 71 27 2e 25 73 20 57 48 45 52 45 20 25 73  '%q'.%s WHERE %s
258d0 20 4f 52 44 45 52 20 42 59 20 72 6f 77 69 64 22   ORDER BY rowid"
258e0 2c 0a 20 20 20 20 20 20 20 64 62 2d 3e 61 44 62  ,.       db->aDb
258f0 5b 69 44 62 5d 2e 7a 4e 61 6d 65 2c 20 7a 4d 61  [iDb].zName, zMa
25900 73 74 65 72 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29  ster, pOp->p4.z)
25910 3b 0a 20 20 20 20 69 66 28 20 7a 53 71 6c 3d 3d  ;.    if( zSql==
25920 30 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20  0 ){.      rc = 
25930 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20  SQLITE_NOMEM;.  
25940 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 61    }else{.      a
25950 73 73 65 72 74 28 20 64 62 2d 3e 69 6e 69 74 2e  ssert( db->init.
25960 62 75 73 79 3d 3d 30 20 29 3b 0a 20 20 20 20 20  busy==0 );.     
25970 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20 3d   db->init.busy =
25980 20 31 3b 0a 20 20 20 20 20 20 69 6e 69 74 44 61   1;.      initDa
25990 74 61 2e 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f  ta.rc = SQLITE_O
259a0 4b 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  K;.      assert(
259b0 20 21 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c   !db->mallocFail
259c0 65 64 20 29 3b 0a 20 20 20 20 20 20 72 63 20 3d  ed );.      rc =
259d0 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28 64 62   sqlite3_exec(db
259e0 2c 20 7a 53 71 6c 2c 20 73 71 6c 69 74 65 33 49  , zSql, sqlite3I
259f0 6e 69 74 43 61 6c 6c 62 61 63 6b 2c 20 26 69 6e  nitCallback, &in
25a00 69 74 44 61 74 61 2c 20 30 29 3b 0a 20 20 20 20  itData, 0);.    
25a10 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
25a20 5f 4f 4b 20 29 20 72 63 20 3d 20 69 6e 69 74 44  _OK ) rc = initD
25a30 61 74 61 2e 72 63 3b 0a 20 20 20 20 20 20 73 71  ata.rc;.      sq
25a40 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20  lite3DbFree(db, 
25a50 7a 53 71 6c 29 3b 0a 20 20 20 20 20 20 64 62 2d  zSql);.      db-
25a60 3e 69 6e 69 74 2e 62 75 73 79 20 3d 20 30 3b 0a  >init.busy = 0;.
25a70 20 20 20 20 7d 0a 20 20 7d 0a 20 20 73 71 6c 69      }.  }.  sqli
25a80 74 65 33 42 74 72 65 65 4c 65 61 76 65 41 6c 6c  te3BtreeLeaveAll
25a90 28 64 62 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d  (db);.  if( rc==
25aa0 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 29 7b 0a  SQLITE_NOMEM ){.
25ab0 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b      goto no_mem;
25ac0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 20 20 0a  .  }.  break;  .
25ad0 7d 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  }..#if !defined(
25ae0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4e 41 4c  SQLITE_OMIT_ANAL
25af0 59 5a 45 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  YZE)./* Opcode: 
25b00 4c 6f 61 64 41 6e 61 6c 79 73 69 73 20 50 31 20  LoadAnalysis P1 
25b10 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52 65  * * * *.**.** Re
25b20 61 64 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74  ad the sqlite_st
25b30 61 74 31 20 74 61 62 6c 65 20 66 6f 72 20 64 61  at1 table for da
25b40 74 61 62 61 73 65 20 50 31 20 61 6e 64 20 6c 6f  tabase P1 and lo
25b50 61 64 20 74 68 65 20 63 6f 6e 74 65 6e 74 0a 2a  ad the content.*
25b60 2a 20 6f 66 20 74 68 61 74 20 74 61 62 6c 65 20  * of that table 
25b70 69 6e 74 6f 20 74 68 65 20 69 6e 74 65 72 6e 61  into the interna
25b80 6c 20 69 6e 64 65 78 20 68 61 73 68 20 74 61 62  l index hash tab
25b90 6c 65 2e 20 20 54 68 69 73 20 77 69 6c 6c 20 63  le.  This will c
25ba0 61 75 73 65 0a 2a 2a 20 74 68 65 20 61 6e 61 6c  ause.** the anal
25bb0 79 73 69 73 20 74 6f 20 62 65 20 75 73 65 64 20  ysis to be used 
25bc0 77 68 65 6e 20 70 72 65 70 61 72 69 6e 67 20 61  when preparing a
25bd0 6c 6c 20 73 75 62 73 65 71 75 65 6e 74 20 71 75  ll subsequent qu
25be0 65 72 69 65 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f  eries..*/.case O
25bf0 50 5f 4c 6f 61 64 41 6e 61 6c 79 73 69 73 3a 20  P_LoadAnalysis: 
25c00 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  {.  assert( pOp-
25c10 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
25c20 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 72  1<db->nDb );.  r
25c30 63 20 3d 20 73 71 6c 69 74 65 33 41 6e 61 6c 79  c = sqlite3Analy
25c40 73 69 73 4c 6f 61 64 28 64 62 2c 20 70 4f 70 2d  sisLoad(db, pOp-
25c50 3e 70 31 29 3b 0a 20 20 62 72 65 61 6b 3b 20 20  >p1);.  break;  
25c60 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 21 64 65  .}.#endif /* !de
25c70 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
25c80 54 5f 41 4e 41 4c 59 5a 45 29 20 2a 2f 0a 0a 2f  T_ANALYZE) */../
25c90 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70 54 61  * Opcode: DropTa
25ca0 62 6c 65 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a  ble P1 * * P4 *.
25cb0 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74 68 65  **.** Remove the
25cc0 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d 6d 65   internal (in-me
25cd0 6d 6f 72 79 29 20 64 61 74 61 20 73 74 72 75 63  mory) data struc
25ce0 74 75 72 65 73 20 74 68 61 74 20 64 65 73 63 72  tures that descr
25cf0 69 62 65 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65  ibe.** the table
25d00 20 6e 61 6d 65 64 20 50 34 20 69 6e 20 64 61 74   named P4 in dat
25d10 61 62 61 73 65 20 50 31 2e 20 20 54 68 69 73 20  abase P1.  This 
25d20 69 73 20 63 61 6c 6c 65 64 20 61 66 74 65 72 20  is called after 
25d30 61 20 74 61 62 6c 65 0a 2a 2a 20 69 73 20 64 72  a table.** is dr
25d40 6f 70 70 65 64 20 69 6e 20 6f 72 64 65 72 20 74  opped in order t
25d50 6f 20 6b 65 65 70 20 74 68 65 20 69 6e 74 65 72  o keep the inter
25d60 6e 61 6c 20 72 65 70 72 65 73 65 6e 74 61 74 69  nal representati
25d70 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68  on of the.** sch
25d80 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74 20 77  ema consistent w
25d90 69 74 68 20 77 68 61 74 20 69 73 20 6f 6e 20 64  ith what is on d
25da0 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  isk..*/.case OP_
25db0 44 72 6f 70 54 61 62 6c 65 3a 20 7b 0a 20 20 73  DropTable: {.  s
25dc0 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44  qlite3UnlinkAndD
25dd0 65 6c 65 74 65 54 61 62 6c 65 28 64 62 2c 20 70  eleteTable(db, p
25de0 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e  Op->p1, pOp->p4.
25df0 7a 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  z);.  break;.}..
25e00 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70 49  /* Opcode: DropI
25e10 6e 64 65 78 20 50 31 20 2a 20 2a 20 50 34 20 2a  ndex P1 * * P4 *
25e20 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74 68  .**.** Remove th
25e30 65 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d 6d  e internal (in-m
25e40 65 6d 6f 72 79 29 20 64 61 74 61 20 73 74 72 75  emory) data stru
25e50 63 74 75 72 65 73 20 74 68 61 74 20 64 65 73 63  ctures that desc
25e60 72 69 62 65 0a 2a 2a 20 74 68 65 20 69 6e 64 65  ribe.** the inde
25e70 78 20 6e 61 6d 65 64 20 50 34 20 69 6e 20 64 61  x named P4 in da
25e80 74 61 62 61 73 65 20 50 31 2e 20 20 54 68 69 73  tabase P1.  This
25e90 20 69 73 20 63 61 6c 6c 65 64 20 61 66 74 65 72   is called after
25ea0 20 61 6e 20 69 6e 64 65 78 0a 2a 2a 20 69 73 20   an index.** is 
25eb0 64 72 6f 70 70 65 64 20 69 6e 20 6f 72 64 65 72  dropped in order
25ec0 20 74 6f 20 6b 65 65 70 20 74 68 65 20 69 6e 74   to keep the int
25ed0 65 72 6e 61 6c 20 72 65 70 72 65 73 65 6e 74 61  ernal representa
25ee0 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73  tion of the.** s
25ef0 63 68 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74  chema consistent
25f00 20 77 69 74 68 20 77 68 61 74 20 69 73 20 6f 6e   with what is on
25f10 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f   disk..*/.case O
25f20 50 5f 44 72 6f 70 49 6e 64 65 78 3a 20 7b 0a 20  P_DropIndex: {. 
25f30 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e   sqlite3UnlinkAn
25f40 64 44 65 6c 65 74 65 49 6e 64 65 78 28 64 62 2c  dDeleteIndex(db,
25f50 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70   pOp->p1, pOp->p
25f60 34 2e 7a 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  4.z);.  break;.}
25f70 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f  ../* Opcode: Dro
25f80 70 54 72 69 67 67 65 72 20 50 31 20 2a 20 2a 20  pTrigger P1 * * 
25f90 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76  P4 *.**.** Remov
25fa0 65 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 28  e the internal (
25fb0 69 6e 2d 6d 65 6d 6f 72 79 29 20 64 61 74 61 20  in-memory) data 
25fc0 73 74 72 75 63 74 75 72 65 73 20 74 68 61 74 20  structures that 
25fd0 64 65 73 63 72 69 62 65 0a 2a 2a 20 74 68 65 20  describe.** the 
25fe0 74 72 69 67 67 65 72 20 6e 61 6d 65 64 20 50 34  trigger named P4
25ff0 20 69 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e   in database P1.
26000 20 20 54 68 69 73 20 69 73 20 63 61 6c 6c 65 64    This is called
26010 20 61 66 74 65 72 20 61 20 74 72 69 67 67 65 72   after a trigger
26020 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65 64 20 69  .** is dropped i
26030 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65 70 20  n order to keep 
26040 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 72 65 70  the internal rep
26050 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74  resentation of t
26060 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 63 6f 6e  he.** schema con
26070 73 69 73 74 65 6e 74 20 77 69 74 68 20 77 68 61  sistent with wha
26080 74 20 69 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f  t is on disk..*/
26090 0a 63 61 73 65 20 4f 50 5f 44 72 6f 70 54 72 69  .case OP_DropTri
260a0 67 67 65 72 3a 20 7b 0a 20 20 73 71 6c 69 74 65  gger: {.  sqlite
260b0 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65  3UnlinkAndDelete
260c0 54 72 69 67 67 65 72 28 64 62 2c 20 70 4f 70 2d  Trigger(db, pOp-
260d0 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b  >p1, pOp->p4.z);
260e0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 23 69  .  break;.}...#i
260f0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
26100 54 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43  T_INTEGRITY_CHEC
26110 4b 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 74  K./* Opcode: Int
26120 65 67 72 69 74 79 43 6b 20 50 31 20 50 32 20 50  egrityCk P1 P2 P
26130 33 20 2a 20 50 35 0a 2a 2a 0a 2a 2a 20 44 6f 20  3 * P5.**.** Do 
26140 61 6e 20 61 6e 61 6c 79 73 69 73 20 6f 66 20 74  an analysis of t
26150 68 65 20 63 75 72 72 65 6e 74 6c 79 20 6f 70 65  he currently ope
26160 6e 20 64 61 74 61 62 61 73 65 2e 20 20 53 74 6f  n database.  Sto
26170 72 65 20 69 6e 0a 2a 2a 20 72 65 67 69 73 74 65  re in.** registe
26180 72 20 50 31 20 74 68 65 20 74 65 78 74 20 6f 66  r P1 the text of
26190 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67   an error messag
261a0 65 20 64 65 73 63 72 69 62 69 6e 67 20 61 6e 79  e describing any
261b0 20 70 72 6f 62 6c 65 6d 73 2e 0a 2a 2a 20 49 66   problems..** If
261c0 20 6e 6f 20 70 72 6f 62 6c 65 6d 73 20 61 72 65   no problems are
261d0 20 66 6f 75 6e 64 2c 20 73 74 6f 72 65 20 61 20   found, store a 
261e0 4e 55 4c 4c 20 69 6e 20 72 65 67 69 73 74 65 72  NULL in register
261f0 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72   P1..**.** The r
26200 65 67 69 73 74 65 72 20 50 33 20 63 6f 6e 74 61  egister P3 conta
26210 69 6e 73 20 74 68 65 20 6d 61 78 69 6d 75 6d 20  ins the maximum 
26220 6e 75 6d 62 65 72 20 6f 66 20 61 6c 6c 6f 77 65  number of allowe
26230 64 20 65 72 72 6f 72 73 2e 0a 2a 2a 20 41 74 20  d errors..** At 
26240 6d 6f 73 74 20 72 65 67 28 50 33 29 20 65 72 72  most reg(P3) err
26250 6f 72 73 20 77 69 6c 6c 20 62 65 20 72 65 70 6f  ors will be repo
26260 72 74 65 64 2e 0a 2a 2a 20 49 6e 20 6f 74 68 65  rted..** In othe
26270 72 20 77 6f 72 64 73 2c 20 74 68 65 20 61 6e 61  r words, the ana
26280 6c 79 73 69 73 20 73 74 6f 70 73 20 61 73 20 73  lysis stops as s
26290 6f 6f 6e 20 61 73 20 72 65 67 28 50 31 29 20 65  oon as reg(P1) e
262a0 72 72 6f 72 73 20 61 72 65 20 0a 2a 2a 20 73 65  rrors are .** se
262b0 65 6e 2e 20 20 52 65 67 28 50 31 29 20 69 73 20  en.  Reg(P1) is 
262c0 75 70 64 61 74 65 64 20 77 69 74 68 20 74 68 65  updated with the
262d0 20 6e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72   number of error
262e0 73 20 72 65 6d 61 69 6e 69 6e 67 2e 0a 2a 2a 0a  s remaining..**.
262f0 2a 2a 20 54 68 65 20 72 6f 6f 74 20 70 61 67 65  ** The root page
26300 20 6e 75 6d 62 65 72 73 20 6f 66 20 61 6c 6c 20   numbers of all 
26310 74 61 62 6c 65 73 20 69 6e 20 74 68 65 20 64 61  tables in the da
26320 74 61 62 61 73 65 20 61 72 65 20 69 6e 74 65 67  tabase are integ
26330 65 72 0a 2a 2a 20 73 74 6f 72 65 64 20 69 6e 20  er.** stored in 
26340 72 65 67 28 50 31 29 2c 20 72 65 67 28 50 31 2b  reg(P1), reg(P1+
26350 31 29 2c 20 72 65 67 28 50 31 2b 32 29 2c 20 2e  1), reg(P1+2), .
26360 2e 2e 2e 20 20 54 68 65 72 65 20 61 72 65 20 50  ...  There are P
26370 32 20 74 61 62 6c 65 73 0a 2a 2a 20 74 6f 74 61  2 tables.** tota
26380 6c 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69  l..**.** If P5 i
26390 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 20  s not zero, the 
263a0 63 68 65 63 6b 20 69 73 20 64 6f 6e 65 20 6f 6e  check is done on
263b0 20 74 68 65 20 61 75 78 69 6c 69 61 72 79 20 64   the auxiliary d
263c0 61 74 61 62 61 73 65 0a 2a 2a 20 66 69 6c 65 2c  atabase.** file,
263d0 20 6e 6f 74 20 74 68 65 20 6d 61 69 6e 20 64 61   not the main da
263e0 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a  tabase file..**.
263f0 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69  ** This opcode i
26400 73 20 75 73 65 64 20 74 6f 20 69 6d 70 6c 65 6d  s used to implem
26410 65 6e 74 20 74 68 65 20 69 6e 74 65 67 72 69 74  ent the integrit
26420 79 5f 63 68 65 63 6b 20 70 72 61 67 6d 61 2e 0a  y_check pragma..
26430 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74 65 67  */.case OP_Integ
26440 72 69 74 79 43 6b 3a 20 7b 0a 20 20 69 6e 74 20  rityCk: {.  int 
26450 6e 52 6f 6f 74 3b 20 20 20 20 20 20 2f 2a 20 4e  nRoot;      /* N
26460 75 6d 62 65 72 20 6f 66 20 74 61 62 6c 65 73 20  umber of tables 
26470 74 6f 20 63 68 65 63 6b 2e 20 20 28 4e 75 6d 62  to check.  (Numb
26480 65 72 20 6f 66 20 72 6f 6f 74 20 70 61 67 65 73  er of root pages
26490 2e 29 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 52 6f  .) */.  int *aRo
264a0 6f 74 3b 20 20 20 20 20 2f 2a 20 41 72 72 61 79  ot;     /* Array
264b0 20 6f 66 20 72 6f 6f 74 70 61 67 65 20 6e 75 6d   of rootpage num
264c0 62 65 72 73 20 66 6f 72 20 74 61 62 6c 65 73 20  bers for tables 
264d0 74 6f 20 62 65 20 63 68 65 63 6b 65 64 20 2a 2f  to be checked */
264e0 0a 20 20 69 6e 74 20 6a 3b 20 20 20 20 20 20 20  .  int j;       
264f0 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74     /* Loop count
26500 65 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72  er */.  int nErr
26510 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65  ;       /* Numbe
26520 72 20 6f 66 20 65 72 72 6f 72 73 20 72 65 70 6f  r of errors repo
26530 72 74 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a  rted */.  char *
26540 7a 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78  z;        /* Tex
26550 74 20 6f 66 20 74 68 65 20 65 72 72 6f 72 20 72  t of the error r
26560 65 70 6f 72 74 20 2a 2f 0a 20 20 4d 65 6d 20 2a  eport */.  Mem *
26570 70 6e 45 72 72 3b 20 20 20 20 20 2f 2a 20 52 65  pnErr;     /* Re
26580 67 69 73 74 65 72 20 6b 65 65 70 69 6e 67 20 74  gister keeping t
26590 72 61 63 6b 20 6f 66 20 65 72 72 6f 72 73 20 72  rack of errors r
265a0 65 6d 61 69 6e 69 6e 67 20 2a 2f 0a 20 20 0a 20  emaining */.  . 
265b0 20 6e 52 6f 6f 74 20 3d 20 70 4f 70 2d 3e 70 32   nRoot = pOp->p2
265c0 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 52 6f 6f  ;.  assert( nRoo
265d0 74 3e 30 20 29 3b 0a 20 20 61 52 6f 6f 74 20 3d  t>0 );.  aRoot =
265e0 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63   sqlite3DbMalloc
265f0 52 61 77 28 64 62 2c 20 73 69 7a 65 6f 66 28 69  Raw(db, sizeof(i
26600 6e 74 29 2a 28 6e 52 6f 6f 74 2b 31 29 20 29 3b  nt)*(nRoot+1) );
26610 0a 20 20 69 66 28 20 61 52 6f 6f 74 3d 3d 30 20  .  if( aRoot==0 
26620 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
26630 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
26640 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 70  >0 && pOp->p3<=p
26650 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 6e 45 72  ->nMem );.  pnEr
26660 72 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  r = &aMem[pOp->p
26670 33 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70  3];.  assert( (p
26680 6e 45 72 72 2d 3e 66 6c 61 67 73 20 26 20 4d 45  nErr->flags & ME
26690 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 0a 20 20 61  M_Int)!=0 );.  a
266a0 73 73 65 72 74 28 20 28 70 6e 45 72 72 2d 3e 66  ssert( (pnErr->f
266b0 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c  lags & (MEM_Str|
266c0 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 29 3b  MEM_Blob))==0 );
266d0 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
266e0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 66 6f 72 28  pOp->p1];.  for(
266f0 6a 3d 30 3b 20 6a 3c 6e 52 6f 6f 74 3b 20 6a 2b  j=0; j<nRoot; j+
26700 2b 29 7b 0a 20 20 20 20 61 52 6f 6f 74 5b 6a 5d  +){.    aRoot[j]
26710 20 3d 20 28 69 6e 74 29 73 71 6c 69 74 65 33 56   = (int)sqlite3V
26720 64 62 65 49 6e 74 56 61 6c 75 65 28 26 70 49 6e  dbeIntValue(&pIn
26730 31 5b 6a 5d 29 3b 0a 20 20 7d 0a 20 20 61 52 6f  1[j]);.  }.  aRo
26740 6f 74 5b 6a 5d 20 3d 20 30 3b 0a 20 20 61 73 73  ot[j] = 0;.  ass
26750 65 72 74 28 20 70 4f 70 2d 3e 70 35 3c 64 62 2d  ert( pOp->p5<db-
26760 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74  >nDb );.  assert
26770 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20  ( (p->btreeMask 
26780 26 20 28 31 3c 3c 70 4f 70 2d 3e 70 35 29 29 21  & (1<<pOp->p5))!
26790 3d 30 20 29 3b 0a 20 20 7a 20 3d 20 73 71 6c 69  =0 );.  z = sqli
267a0 74 65 33 42 74 72 65 65 49 6e 74 65 67 72 69 74  te3BtreeIntegrit
267b0 79 43 68 65 63 6b 28 64 62 2d 3e 61 44 62 5b 70  yCheck(db->aDb[p
267c0 4f 70 2d 3e 70 35 5d 2e 70 42 74 2c 20 61 52 6f  Op->p5].pBt, aRo
267d0 6f 74 2c 20 6e 52 6f 6f 74 2c 0a 20 20 20 20 20  ot, nRoot,.     
267e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
267f0 20 20 20 20 20 20 20 20 20 20 20 20 28 69 6e 74              (int
26800 29 70 6e 45 72 72 2d 3e 75 2e 69 2c 20 26 6e 45  )pnErr->u.i, &nE
26810 72 72 29 3b 0a 20 20 73 71 6c 69 74 65 33 44 62  rr);.  sqlite3Db
26820 46 72 65 65 28 64 62 2c 20 61 52 6f 6f 74 29 3b  Free(db, aRoot);
26830 0a 20 20 70 6e 45 72 72 2d 3e 75 2e 69 20 2d 3d  .  pnErr->u.i -=
26840 20 6e 45 72 72 3b 0a 20 20 73 71 6c 69 74 65 33   nErr;.  sqlite3
26850 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70  VdbeMemSetNull(p
26860 49 6e 31 29 3b 0a 20 20 69 66 28 20 6e 45 72 72  In1);.  if( nErr
26870 3d 3d 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72  ==0 ){.    asser
26880 74 28 20 7a 3d 3d 30 20 29 3b 0a 20 20 7d 65 6c  t( z==0 );.  }el
26890 73 65 20 69 66 28 20 7a 3d 3d 30 20 29 7b 0a 20  se if( z==0 ){. 
268a0 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a     goto no_mem;.
268b0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c    }else{.    sql
268c0 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 53 74  ite3VdbeMemSetSt
268d0 72 28 70 49 6e 31 2c 20 7a 2c 20 2d 31 2c 20 53  r(pIn1, z, -1, S
268e0 51 4c 49 54 45 5f 55 54 46 38 2c 20 73 71 6c 69  QLITE_UTF8, sqli
268f0 74 65 33 5f 66 72 65 65 29 3b 0a 20 20 7d 0a 20  te3_free);.  }. 
26900 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42   UPDATE_MAX_BLOB
26910 53 49 5a 45 28 70 49 6e 31 29 3b 0a 20 20 73 71  SIZE(pIn1);.  sq
26920 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 45  lite3VdbeChangeE
26930 6e 63 6f 64 69 6e 67 28 70 49 6e 31 2c 20 65 6e  ncoding(pIn1, en
26940 63 6f 64 69 6e 67 29 3b 0a 20 20 62 72 65 61 6b  coding);.  break
26950 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ;.}.#endif /* SQ
26960 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52  LITE_OMIT_INTEGR
26970 49 54 59 5f 43 48 45 43 4b 20 2a 2f 0a 0a 2f 2a  ITY_CHECK */../*
26980 20 4f 70 63 6f 64 65 3a 20 52 6f 77 53 65 74 41   Opcode: RowSetA
26990 64 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  dd P1 P2 * * *.*
269a0 2a 0a 2a 2a 20 49 6e 73 65 72 74 20 74 68 65 20  *.** Insert the 
269b0 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 68 65  integer value he
269c0 6c 64 20 62 79 20 72 65 67 69 73 74 65 72 20 50  ld by register P
269d0 32 20 69 6e 74 6f 20 61 20 62 6f 6f 6c 65 61 6e  2 into a boolean
269e0 20 69 6e 64 65 78 0a 2a 2a 20 68 65 6c 64 20 69   index.** held i
269f0 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a  n register P1..*
26a00 2a 0a 2a 2a 20 41 6e 20 61 73 73 65 72 74 69 6f  *.** An assertio
26a10 6e 20 66 61 69 6c 73 20 69 66 20 50 32 20 69 73  n fails if P2 is
26a20 20 6e 6f 74 20 61 6e 20 69 6e 74 65 67 65 72 2e   not an integer.
26a30 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 53  .*/.case OP_RowS
26a40 65 74 41 64 64 3a 20 7b 20 20 20 20 20 20 20 2f  etAdd: {       /
26a50 2a 20 69 6e 31 2c 20 69 6e 32 20 2a 2f 0a 20 20  * in1, in2 */.  
26a60 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
26a70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 32 20 3d 20  ->p1];.  pIn2 = 
26a80 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
26a90 20 20 61 73 73 65 72 74 28 20 28 70 49 6e 32 2d    assert( (pIn2-
26aa0 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
26ab0 29 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 28 70  )!=0 );.  if( (p
26ac0 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
26ad0 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29 7b 0a 20  _RowSet)==0 ){. 
26ae0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
26af0 6d 53 65 74 52 6f 77 53 65 74 28 70 49 6e 31 29  mSetRowSet(pIn1)
26b00 3b 0a 20 20 20 20 69 66 28 20 28 70 49 6e 31 2d  ;.    if( (pIn1-
26b10 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77  >flags & MEM_Row
26b20 53 65 74 29 3d 3d 30 20 29 20 67 6f 74 6f 20 6e  Set)==0 ) goto n
26b30 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 73 71 6c  o_mem;.  }.  sql
26b40 69 74 65 33 52 6f 77 53 65 74 49 6e 73 65 72 74  ite3RowSetInsert
26b50 28 70 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74  (pIn1->u.pRowSet
26b60 2c 20 70 49 6e 32 2d 3e 75 2e 69 29 3b 0a 20 20  , pIn2->u.i);.  
26b70 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
26b80 6f 64 65 3a 20 52 6f 77 53 65 74 52 65 61 64 20  ode: RowSetRead 
26b90 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
26ba0 2a 2a 20 45 78 74 72 61 63 74 20 74 68 65 20 73  ** Extract the s
26bb0 6d 61 6c 6c 65 73 74 20 76 61 6c 75 65 20 66 72  mallest value fr
26bc0 6f 6d 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78  om boolean index
26bd0 20 50 31 20 61 6e 64 20 70 75 74 20 74 68 61 74   P1 and put that
26be0 20 76 61 6c 75 65 20 69 6e 74 6f 0a 2a 2a 20 72   value into.** r
26bf0 65 67 69 73 74 65 72 20 50 33 2e 20 20 4f 72 2c  egister P3.  Or,
26c00 20 69 66 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65   if boolean inde
26c10 78 20 50 31 20 69 73 20 69 6e 69 74 69 61 6c 6c  x P1 is initiall
26c20 79 20 65 6d 70 74 79 2c 20 6c 65 61 76 65 20 50  y empty, leave P
26c30 33 0a 2a 2a 20 75 6e 63 68 61 6e 67 65 64 20 61  3.** unchanged a
26c40 6e 64 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72  nd jump to instr
26c50 75 63 74 69 6f 6e 20 50 32 2e 0a 2a 2f 0a 63 61  uction P2..*/.ca
26c60 73 65 20 4f 50 5f 52 6f 77 53 65 74 52 65 61 64  se OP_RowSetRead
26c70 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d  : {       /* jum
26c80 70 2c 20 69 6e 31 2c 20 6f 75 74 33 20 2a 2f 0a  p, in1, out3 */.
26c90 20 20 69 36 34 20 76 61 6c 3b 0a 20 20 43 48 45    i64 val;.  CHE
26ca0 43 4b 5f 46 4f 52 5f 49 4e 54 45 52 52 55 50 54  CK_FOR_INTERRUPT
26cb0 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ;.  pIn1 = &aMem
26cc0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28  [pOp->p1];.  if(
26cd0 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
26ce0 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 0a  MEM_RowSet)==0 .
26cf0 20 20 20 7c 7c 20 73 71 6c 69 74 65 33 52 6f 77     || sqlite3Row
26d00 53 65 74 4e 65 78 74 28 70 49 6e 31 2d 3e 75 2e  SetNext(pIn1->u.
26d10 70 52 6f 77 53 65 74 2c 20 26 76 61 6c 29 3d 3d  pRowSet, &val)==
26d20 30 0a 20 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68  0.  ){.    /* Th
26d30 65 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 20  e boolean index 
26d40 69 73 20 65 6d 70 74 79 20 2a 2f 0a 20 20 20 20  is empty */.    
26d50 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
26d60 74 4e 75 6c 6c 28 70 49 6e 31 29 3b 0a 20 20 20  tNull(pIn1);.   
26d70 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
26d80 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  1;.  }else{.    
26d90 2f 2a 20 41 20 76 61 6c 75 65 20 77 61 73 20 70  /* A value was p
26da0 75 6c 6c 65 64 20 66 72 6f 6d 20 74 68 65 20 69  ulled from the i
26db0 6e 64 65 78 20 2a 2f 0a 20 20 20 20 73 71 6c 69  ndex */.    sqli
26dc0 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74  te3VdbeMemSetInt
26dd0 36 34 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33  64(&aMem[pOp->p3
26de0 5d 2c 20 76 61 6c 29 3b 0a 20 20 7d 0a 20 20 62  ], val);.  }.  b
26df0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
26e00 64 65 3a 20 52 6f 77 53 65 74 54 65 73 74 20 50  de: RowSetTest P
26e10 31 20 50 32 20 50 33 20 50 34 0a 2a 2a 0a 2a 2a  1 P2 P3 P4.**.**
26e20 20 52 65 67 69 73 74 65 72 20 50 33 20 69 73 20   Register P3 is 
26e30 61 73 73 75 6d 65 64 20 74 6f 20 68 6f 6c 64 20  assumed to hold 
26e40 61 20 36 34 2d 62 69 74 20 69 6e 74 65 67 65 72  a 64-bit integer
26e50 20 76 61 6c 75 65 2e 20 49 66 20 72 65 67 69 73   value. If regis
26e60 74 65 72 20 50 31 0a 2a 2a 20 63 6f 6e 74 61 69  ter P1.** contai
26e70 6e 73 20 61 20 52 6f 77 53 65 74 20 6f 62 6a 65  ns a RowSet obje
26e80 63 74 20 61 6e 64 20 74 68 61 74 20 52 6f 77 53  ct and that RowS
26e90 65 74 20 6f 62 6a 65 63 74 20 63 6f 6e 74 61 69  et object contai
26ea0 6e 73 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 20  ns.** the value 
26eb0 68 65 6c 64 20 69 6e 20 50 33 2c 20 6a 75 6d 70  held in P3, jump
26ec0 20 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e   to register P2.
26ed0 20 4f 74 68 65 72 77 69 73 65 2c 20 69 6e 73 65   Otherwise, inse
26ee0 72 74 20 74 68 65 0a 2a 2a 20 69 6e 74 65 67 65  rt the.** intege
26ef0 72 20 69 6e 20 50 33 20 69 6e 74 6f 20 74 68 65  r in P3 into the
26f00 20 52 6f 77 53 65 74 20 61 6e 64 20 63 6f 6e 74   RowSet and cont
26f10 69 6e 75 65 20 6f 6e 20 74 6f 20 74 68 65 0a 2a  inue on to the.*
26f20 2a 20 6e 65 78 74 20 6f 70 63 6f 64 65 2e 0a 2a  * next opcode..*
26f30 2a 0a 2a 2a 20 54 68 65 20 52 6f 77 53 65 74 20  *.** The RowSet 
26f40 6f 62 6a 65 63 74 20 69 73 20 6f 70 74 69 6d 69  object is optimi
26f50 7a 65 64 20 66 6f 72 20 74 68 65 20 63 61 73 65  zed for the case
26f60 20 77 68 65 72 65 20 73 75 63 63 65 73 73 69 76   where successiv
26f70 65 20 73 65 74 73 0a 2a 2a 20 6f 66 20 69 6e 74  e sets.** of int
26f80 65 67 65 72 73 2c 20 77 68 65 72 65 20 65 61 63  egers, where eac
26f90 68 20 73 65 74 20 63 6f 6e 74 61 69 6e 73 20 6e  h set contains n
26fa0 6f 20 64 75 70 6c 69 63 61 74 65 73 2e 20 45 61  o duplicates. Ea
26fb0 63 68 20 73 65 74 0a 2a 2a 20 6f 66 20 76 61 6c  ch set.** of val
26fc0 75 65 73 20 69 73 20 69 64 65 6e 74 69 66 69 65  ues is identifie
26fd0 64 20 62 79 20 61 20 75 6e 69 71 75 65 20 50 34  d by a unique P4
26fe0 20 76 61 6c 75 65 2e 20 54 68 65 20 66 69 72 73   value. The firs
26ff0 74 20 73 65 74 0a 2a 2a 20 6d 75 73 74 20 68 61  t set.** must ha
27000 76 65 20 50 34 3d 3d 30 2c 20 74 68 65 20 66 69  ve P4==0, the fi
27010 6e 61 6c 20 73 65 74 20 50 34 3d 2d 31 2e 20 20  nal set P4=-1.  
27020 50 34 20 6d 75 73 74 20 62 65 20 65 69 74 68 65  P4 must be eithe
27030 72 20 2d 31 20 6f 72 0a 2a 2a 20 6e 6f 6e 2d 6e  r -1 or.** non-n
27040 65 67 61 74 69 76 65 2e 20 20 46 6f 72 20 6e 6f  egative.  For no
27050 6e 2d 6e 65 67 61 74 69 76 65 20 76 61 6c 75 65  n-negative value
27060 73 20 6f 66 20 50 34 20 6f 6e 6c 79 20 74 68 65  s of P4 only the
27070 20 6c 6f 77 65 72 20 34 0a 2a 2a 20 62 69 74 73   lower 4.** bits
27080 20 61 72 65 20 73 69 67 6e 69 66 69 63 61 6e 74   are significant
27090 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 61 6c 6c  ..**.** This all
270a0 6f 77 73 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e  ows optimization
270b0 73 3a 20 28 61 29 20 77 68 65 6e 20 50 34 3d 3d  s: (a) when P4==
270c0 30 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6e 65  0 there is no ne
270d0 65 64 20 74 6f 20 74 65 73 74 0a 2a 2a 20 74 68  ed to test.** th
270e0 65 20 72 6f 77 73 65 74 20 6f 62 6a 65 63 74 20  e rowset object 
270f0 66 6f 72 20 50 33 2c 20 61 73 20 69 74 20 69 73  for P3, as it is
27100 20 67 75 61 72 61 6e 74 65 65 64 20 6e 6f 74 20   guaranteed not 
27110 74 6f 20 63 6f 6e 74 61 69 6e 20 69 74 2c 0a 2a  to contain it,.*
27120 2a 20 28 62 29 20 77 68 65 6e 20 50 34 3d 3d 2d  * (b) when P4==-
27130 31 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6e 65  1 there is no ne
27140 65 64 20 74 6f 20 69 6e 73 65 72 74 20 74 68 65  ed to insert the
27150 20 76 61 6c 75 65 2c 20 61 73 20 69 74 20 77 69   value, as it wi
27160 6c 6c 0a 2a 2a 20 6e 65 76 65 72 20 62 65 20 74  ll.** never be t
27170 65 73 74 65 64 20 66 6f 72 2c 20 61 6e 64 20 28  ested for, and (
27180 63 29 20 77 68 65 6e 20 61 20 76 61 6c 75 65 20  c) when a value 
27190 74 68 61 74 20 69 73 20 70 61 72 74 20 6f 66 20  that is part of 
271a0 73 65 74 20 58 20 69 73 0a 2a 2a 20 69 6e 73 65  set X is.** inse
271b0 72 74 65 64 2c 20 74 68 65 72 65 20 69 73 20 6e  rted, there is n
271c0 6f 20 6e 65 65 64 20 74 6f 20 73 65 61 72 63 68  o need to search
271d0 20 74 6f 20 73 65 65 20 69 66 20 74 68 65 20 73   to see if the s
271e0 61 6d 65 20 76 61 6c 75 65 20 77 61 73 0a 2a 2a  ame value was.**
271f0 20 70 72 65 76 69 6f 75 73 6c 79 20 69 6e 73 65   previously inse
27200 72 74 65 64 20 61 73 20 70 61 72 74 20 6f 66 20  rted as part of 
27210 73 65 74 20 58 20 28 6f 6e 6c 79 20 69 66 20 69  set X (only if i
27220 74 20 77 61 73 20 70 72 65 76 69 6f 75 73 6c 79  t was previously
27230 0a 2a 2a 20 69 6e 73 65 72 74 65 64 20 61 73 20  .** inserted as 
27240 70 61 72 74 20 6f 66 20 73 6f 6d 65 20 6f 74 68  part of some oth
27250 65 72 20 73 65 74 29 2e 0a 2a 2f 0a 63 61 73 65  er set)..*/.case
27260 20 4f 50 5f 52 6f 77 53 65 74 54 65 73 74 3a 20   OP_RowSetTest: 
27270 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
27280 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
27290 6e 31 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74  n1, in3 */.  int
272a0 20 69 53 65 74 3b 0a 20 20 69 6e 74 20 65 78 69   iSet;.  int exi
272b0 73 74 73 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26  sts;..  pIn1 = &
272c0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
272d0 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn3 = &aMem[pO
272e0 70 2d 3e 70 33 5d 3b 0a 20 20 69 53 65 74 20 3d  p->p3];.  iSet =
272f0 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 61 73   pOp->p4.i;.  as
27300 73 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67  sert( pIn3->flag
27310 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 0a 20 20  s&MEM_Int );..  
27320 2f 2a 20 49 66 20 74 68 65 72 65 20 69 73 20 61  /* If there is a
27330 6e 79 74 68 69 6e 67 20 6f 74 68 65 72 20 74 68  nything other th
27340 61 6e 20 61 20 72 6f 77 73 65 74 20 6f 62 6a 65  an a rowset obje
27350 63 74 20 69 6e 20 6d 65 6d 6f 72 79 20 63 65 6c  ct in memory cel
27360 6c 20 50 31 2c 0a 20 20 2a 2a 20 64 65 6c 65 74  l P1,.  ** delet
27370 65 20 69 74 20 6e 6f 77 20 61 6e 64 20 69 6e 69  e it now and ini
27380 74 69 61 6c 69 7a 65 20 50 31 20 77 69 74 68 20  tialize P1 with 
27390 61 6e 20 65 6d 70 74 79 20 72 6f 77 73 65 74 0a  an empty rowset.
273a0 20 20 2a 2f 0a 20 20 69 66 28 20 28 70 49 6e 31    */.  if( (pIn1
273b0 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f  ->flags & MEM_Ro
273c0 77 53 65 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20  wSet)==0 ){.    
273d0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
273e0 74 52 6f 77 53 65 74 28 70 49 6e 31 29 3b 0a 20  tRowSet(pIn1);. 
273f0 20 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c     if( (pIn1->fl
27400 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74  ags & MEM_RowSet
27410 29 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  )==0 ) goto no_m
27420 65 6d 3b 0a 20 20 7d 0a 0a 20 20 61 73 73 65 72  em;.  }..  asser
27430 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  t( pOp->p4type==
27440 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 61 73  P4_INT32 );.  as
27450 73 65 72 74 28 20 69 53 65 74 3d 3d 2d 31 20 7c  sert( iSet==-1 |
27460 7c 20 69 53 65 74 3e 3d 30 20 29 3b 0a 20 20 69  | iSet>=0 );.  i
27470 66 28 20 69 53 65 74 20 29 7b 0a 20 20 20 20 65  f( iSet ){.    e
27480 78 69 73 74 73 20 3d 20 73 71 6c 69 74 65 33 52  xists = sqlite3R
27490 6f 77 53 65 74 54 65 73 74 28 70 49 6e 31 2d 3e  owSetTest(pIn1->
274a0 75 2e 70 52 6f 77 53 65 74 2c 20 0a 20 20 20 20  u.pRowSet, .    
274b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
274c0 20 20 20 20 20 20 20 20 20 20 20 28 75 38 29 28             (u8)(
274d0 69 53 65 74 3e 3d 30 20 3f 20 69 53 65 74 20 26  iSet>=0 ? iSet &
274e0 20 30 78 66 20 3a 20 30 78 66 66 29 2c 0a 20 20   0xf : 0xff),.  
274f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27500 20 20 20 20 20 20 20 20 20 20 20 20 20 70 49 6e               pIn
27510 33 2d 3e 75 2e 69 29 3b 0a 20 20 20 20 69 66 28  3->u.i);.    if(
27520 20 65 78 69 73 74 73 20 29 7b 0a 20 20 20 20 20   exists ){.     
27530 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
27540 31 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  1;.      break;.
27550 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20      }.  }.  if( 
27560 69 53 65 74 3e 3d 30 20 29 7b 0a 20 20 20 20 73  iSet>=0 ){.    s
27570 71 6c 69 74 65 33 52 6f 77 53 65 74 49 6e 73 65  qlite3RowSetInse
27580 72 74 28 70 49 6e 31 2d 3e 75 2e 70 52 6f 77 53  rt(pIn1->u.pRowS
27590 65 74 2c 20 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a  et, pIn3->u.i);.
275a0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
275b0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
275c0 4f 4d 49 54 5f 54 52 49 47 47 45 52 0a 0a 2f 2a  OMIT_TRIGGER../*
275d0 20 4f 70 63 6f 64 65 3a 20 50 72 6f 67 72 61 6d   Opcode: Program
275e0 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a   P1 P2 P3 P4 *.*
275f0 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20 74 68 65  *.** Execute the
27600 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d   trigger program
27610 20 70 61 73 73 65 64 20 61 73 20 50 34 20 28 74   passed as P4 (t
27620 79 70 65 20 50 34 5f 53 55 42 50 52 4f 47 52 41  ype P4_SUBPROGRA
27630 4d 29 2e 20 0a 2a 2a 0a 2a 2a 20 50 31 20 63 6f  M). .**.** P1 co
27640 6e 74 61 69 6e 73 20 74 68 65 20 61 64 64 72 65  ntains the addre
27650 73 73 20 6f 66 20 74 68 65 20 6d 65 6d 6f 72 79  ss of the memory
27660 20 63 65 6c 6c 20 74 68 61 74 20 63 6f 6e 74 61   cell that conta
27670 69 6e 73 20 74 68 65 20 66 69 72 73 74 20 6d 65  ins the first me
27680 6d 6f 72 79 20 0a 2a 2a 20 63 65 6c 6c 20 69 6e  mory .** cell in
27690 20 61 6e 20 61 72 72 61 79 20 6f 66 20 76 61 6c   an array of val
276a0 75 65 73 20 75 73 65 64 20 61 73 20 61 72 67 75  ues used as argu
276b0 6d 65 6e 74 73 20 74 6f 20 74 68 65 20 73 75 62  ments to the sub
276c0 2d 70 72 6f 67 72 61 6d 2e 20 50 32 20 0a 2a 2a  -program. P2 .**
276d0 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 61 64   contains the ad
276e0 64 72 65 73 73 20 74 6f 20 6a 75 6d 70 20 74 6f  dress to jump to
276f0 20 69 66 20 74 68 65 20 73 75 62 2d 70 72 6f 67   if the sub-prog
27700 72 61 6d 20 74 68 72 6f 77 73 20 61 6e 20 49 47  ram throws an IG
27710 4e 4f 52 45 20 0a 2a 2a 20 65 78 63 65 70 74 69  NORE .** excepti
27720 6f 6e 20 75 73 69 6e 67 20 74 68 65 20 52 41 49  on using the RAI
27730 53 45 28 29 20 66 75 6e 63 74 69 6f 6e 2e 20 52  SE() function. R
27740 65 67 69 73 74 65 72 20 50 33 20 63 6f 6e 74 61  egister P3 conta
27750 69 6e 73 20 74 68 65 20 61 64 64 72 65 73 73 20  ins the address 
27760 0a 2a 2a 20 6f 66 20 61 20 6d 65 6d 6f 72 79 20  .** of a memory 
27770 63 65 6c 6c 20 69 6e 20 74 68 69 73 20 28 74 68  cell in this (th
27780 65 20 70 61 72 65 6e 74 29 20 56 4d 20 74 68 61  e parent) VM tha
27790 74 20 69 73 20 75 73 65 64 20 74 6f 20 61 6c 6c  t is used to all
277a0 6f 63 61 74 65 20 74 68 65 20 0a 2a 2a 20 6d 65  ocate the .** me
277b0 6d 6f 72 79 20 72 65 71 75 69 72 65 64 20 62 79  mory required by
277c0 20 74 68 65 20 73 75 62 2d 76 64 62 65 20 61 74   the sub-vdbe at
277d0 20 72 75 6e 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20   runtime..**.** 
277e0 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20  P4 is a pointer 
277f0 74 6f 20 74 68 65 20 56 4d 20 63 6f 6e 74 61 69  to the VM contai
27800 6e 69 6e 67 20 74 68 65 20 74 72 69 67 67 65 72  ning the trigger
27810 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f 0a 63 61 73   program..*/.cas
27820 65 20 4f 50 5f 50 72 6f 67 72 61 6d 3a 20 7b 20  e OP_Program: { 
27830 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
27840 2f 0a 20 20 69 6e 74 20 6e 4d 65 6d 3b 20 20 20  /.  int nMem;   
27850 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
27860 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20  umber of memory 
27870 72 65 67 69 73 74 65 72 73 20 66 6f 72 20 73 75  registers for su
27880 62 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a 20 20 69  b-program */.  i
27890 6e 74 20 6e 42 79 74 65 3b 20 20 20 20 20 20 20  nt nByte;       
278a0 20 20 20 20 20 20 20 2f 2a 20 42 79 74 65 73 20         /* Bytes 
278b0 6f 66 20 72 75 6e 74 69 6d 65 20 73 70 61 63 65  of runtime space
278c0 20 72 65 71 75 69 72 65 64 20 66 6f 72 20 73 75   required for su
278d0 62 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a 20 20 4d  b-program */.  M
278e0 65 6d 20 2a 70 52 74 3b 20 20 20 20 20 20 20 20  em *pRt;        
278f0 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74         /* Regist
27900 65 72 20 74 6f 20 61 6c 6c 6f 63 61 74 65 20 72  er to allocate r
27910 75 6e 74 69 6d 65 20 73 70 61 63 65 20 2a 2f 0a  untime space */.
27920 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20 20 20    Mem *pMem;    
27930 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65            /* Use
27940 64 20 74 6f 20 69 74 65 72 61 74 65 20 74 68 72  d to iterate thr
27950 6f 75 67 68 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  ough memory cell
27960 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 45 6e 64  s */.  Mem *pEnd
27970 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
27980 2a 20 4c 61 73 74 20 6d 65 6d 6f 72 79 20 63 65  * Last memory ce
27990 6c 6c 20 69 6e 20 6e 65 77 20 61 72 72 61 79 20  ll in new array 
279a0 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d 65 20 2a  */.  VdbeFrame *
279b0 70 46 72 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20  pFrame;      /* 
279c0 4e 65 77 20 76 64 62 65 20 66 72 61 6d 65 20 74  New vdbe frame t
279d0 6f 20 65 78 65 63 75 74 65 20 69 6e 20 2a 2f 0a  o execute in */.
279e0 20 20 53 75 62 50 72 6f 67 72 61 6d 20 2a 70 50    SubProgram *pP
279f0 72 6f 67 72 61 6d 3b 20 20 20 2f 2a 20 53 75 62  rogram;   /* Sub
27a00 2d 70 72 6f 67 72 61 6d 20 74 6f 20 65 78 65 63  -program to exec
27a10 75 74 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 74  ute */.  void *t
27a20 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
27a30 20 2f 2a 20 54 6f 6b 65 6e 20 69 64 65 6e 74 69   /* Token identi
27a40 66 79 69 6e 67 20 74 72 69 67 67 65 72 20 2a 2f  fying trigger */
27a50 0a 0a 20 20 70 50 72 6f 67 72 61 6d 20 3d 20 70  ..  pProgram = p
27a60 4f 70 2d 3e 70 34 2e 70 50 72 6f 67 72 61 6d 3b  Op->p4.pProgram;
27a70 0a 20 20 70 52 74 20 3d 20 26 61 4d 65 6d 5b 70  .  pRt = &aMem[p
27a80 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72  Op->p3];.  asser
27a90 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 52  t( memIsValid(pR
27aa0 74 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  t) );.  assert( 
27ab0 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f 70 3e 30 20  pProgram->nOp>0 
27ac0 29 3b 0a 20 20 0a 20 20 2f 2a 20 49 66 20 74 68  );.  .  /* If th
27ad0 65 20 70 35 20 66 6c 61 67 20 69 73 20 63 6c 65  e p5 flag is cle
27ae0 61 72 2c 20 74 68 65 6e 20 72 65 63 75 72 73 69  ar, then recursi
27af0 76 65 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66  ve invocation of
27b00 20 74 72 69 67 67 65 72 73 20 69 73 20 0a 20 20   triggers is .  
27b10 2a 2a 20 64 69 73 61 62 6c 65 64 20 66 6f 72 20  ** disabled for 
27b20 62 61 63 6b 77 61 72 64 73 20 63 6f 6d 70 61 74  backwards compat
27b30 69 62 69 6c 69 74 79 20 28 70 35 20 69 73 20 73  ibility (p5 is s
27b40 65 74 20 69 66 20 74 68 69 73 20 73 75 62 2d 70  et if this sub-p
27b50 72 6f 67 72 61 6d 0a 20 20 2a 2a 20 69 73 20 72  rogram.  ** is r
27b60 65 61 6c 6c 79 20 61 20 74 72 69 67 67 65 72 2c  eally a trigger,
27b70 20 6e 6f 74 20 61 20 66 6f 72 65 69 67 6e 20 6b   not a foreign k
27b80 65 79 20 61 63 74 69 6f 6e 2c 20 61 6e 64 20 74  ey action, and t
27b90 68 65 20 66 6c 61 67 20 73 65 74 0a 20 20 2a 2a  he flag set.  **
27ba0 20 61 6e 64 20 63 6c 65 61 72 65 64 20 62 79 20   and cleared by 
27bb0 74 68 65 20 22 50 52 41 47 4d 41 20 72 65 63 75  the "PRAGMA recu
27bc0 72 73 69 76 65 5f 74 72 69 67 67 65 72 73 22 20  rsive_triggers" 
27bd0 63 6f 6d 6d 61 6e 64 20 69 73 20 63 6c 65 61 72  command is clear
27be0 29 2e 0a 20 20 2a 2a 20 0a 20 20 2a 2a 20 49 74  )..  ** .  ** It
27bf0 20 69 73 20 72 65 63 75 72 73 69 76 65 20 69 6e   is recursive in
27c00 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74 72 69 67  vocation of trig
27c10 67 65 72 73 2c 20 61 74 20 74 68 65 20 53 51 4c  gers, at the SQL
27c20 20 6c 65 76 65 6c 2c 20 74 68 61 74 20 69 73 20   level, that is 
27c30 0a 20 20 2a 2a 20 64 69 73 61 62 6c 65 64 2e 20  .  ** disabled. 
27c40 49 6e 20 73 6f 6d 65 20 63 61 73 65 73 20 61 20  In some cases a 
27c50 73 69 6e 67 6c 65 20 74 72 69 67 67 65 72 20 6d  single trigger m
27c60 61 79 20 67 65 6e 65 72 61 74 65 20 6d 6f 72 65  ay generate more
27c70 20 74 68 61 6e 20 6f 6e 65 20 0a 20 20 2a 2a 20   than one .  ** 
27c80 53 75 62 50 72 6f 67 72 61 6d 20 28 69 66 20 74  SubProgram (if t
27c90 68 65 20 74 72 69 67 67 65 72 20 6d 61 79 20 62  he trigger may b
27ca0 65 20 65 78 65 63 75 74 65 64 20 77 69 74 68 20  e executed with 
27cb0 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20 64 69  more than one di
27cc0 66 66 65 72 65 6e 74 20 0a 20 20 2a 2a 20 4f 4e  fferent .  ** ON
27cd0 20 43 4f 4e 46 4c 49 43 54 20 61 6c 67 6f 72 69   CONFLICT algori
27ce0 74 68 6d 29 2e 20 53 75 62 50 72 6f 67 72 61 6d  thm). SubProgram
27cf0 20 73 74 72 75 63 74 75 72 65 73 20 61 73 73 6f   structures asso
27d00 63 69 61 74 65 64 20 77 69 74 68 20 61 0a 20 20  ciated with a.  
27d10 2a 2a 20 73 69 6e 67 6c 65 20 74 72 69 67 67 65  ** single trigge
27d20 72 20 61 6c 6c 20 68 61 76 65 20 74 68 65 20 73  r all have the s
27d30 61 6d 65 20 76 61 6c 75 65 20 66 6f 72 20 74 68  ame value for th
27d40 65 20 53 75 62 50 72 6f 67 72 61 6d 2e 74 6f 6b  e SubProgram.tok
27d50 65 6e 20 0a 20 20 2a 2a 20 76 61 72 69 61 62 6c  en .  ** variabl
27d60 65 2e 20 20 2a 2f 0a 20 20 69 66 28 20 70 4f 70  e.  */.  if( pOp
27d70 2d 3e 70 35 20 29 7b 0a 20 20 20 20 74 20 3d 20  ->p5 ){.    t = 
27d80 70 50 72 6f 67 72 61 6d 2d 3e 74 6f 6b 65 6e 3b  pProgram->token;
27d90 0a 20 20 20 20 66 6f 72 28 70 46 72 61 6d 65 3d  .    for(pFrame=
27da0 70 2d 3e 70 46 72 61 6d 65 3b 20 70 46 72 61 6d  p->pFrame; pFram
27db0 65 20 26 26 20 70 46 72 61 6d 65 2d 3e 74 6f 6b  e && pFrame->tok
27dc0 65 6e 21 3d 74 3b 20 70 46 72 61 6d 65 3d 70 46  en!=t; pFrame=pF
27dd0 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 29 3b 0a  rame->pParent);.
27de0 20 20 20 20 69 66 28 20 70 46 72 61 6d 65 20 29      if( pFrame )
27df0 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 69   break;.  }..  i
27e00 66 28 20 70 2d 3e 6e 46 72 61 6d 65 3e 3d 64 62  f( p->nFrame>=db
27e10 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f  ->aLimit[SQLITE_
27e20 4c 49 4d 49 54 5f 54 52 49 47 47 45 52 5f 44 45  LIMIT_TRIGGER_DE
27e30 50 54 48 5d 20 29 7b 0a 20 20 20 20 72 63 20 3d  PTH] ){.    rc =
27e40 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20   SQLITE_ERROR;. 
27e50 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72     sqlite3SetStr
27e60 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c  ing(&p->zErrMsg,
27e70 20 64 62 2c 20 22 74 6f 6f 20 6d 61 6e 79 20 6c   db, "too many l
27e80 65 76 65 6c 73 20 6f 66 20 74 72 69 67 67 65 72  evels of trigger
27e90 20 72 65 63 75 72 73 69 6f 6e 22 29 3b 0a 20 20   recursion");.  
27ea0 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20    break;.  }..  
27eb0 2f 2a 20 52 65 67 69 73 74 65 72 20 70 52 74 20  /* Register pRt 
27ec0 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65  is used to store
27ed0 20 74 68 65 20 6d 65 6d 6f 72 79 20 72 65 71 75   the memory requ
27ee0 69 72 65 64 20 74 6f 20 73 61 76 65 20 74 68 65  ired to save the
27ef0 20 73 74 61 74 65 0a 20 20 2a 2a 20 6f 66 20 74   state.  ** of t
27f00 68 65 20 63 75 72 72 65 6e 74 20 70 72 6f 67 72  he current progr
27f10 61 6d 2c 20 61 6e 64 20 74 68 65 20 6d 65 6d 6f  am, and the memo
27f20 72 79 20 72 65 71 75 69 72 65 64 20 61 74 20 72  ry required at r
27f30 75 6e 74 69 6d 65 20 74 6f 20 65 78 65 63 75 74  untime to execut
27f40 65 0a 20 20 2a 2a 20 74 68 65 20 74 72 69 67 67  e.  ** the trigg
27f50 65 72 20 70 72 6f 67 72 61 6d 2e 20 49 66 20 74  er program. If t
27f60 68 69 73 20 74 72 69 67 67 65 72 20 68 61 73 20  his trigger has 
27f70 62 65 65 6e 20 66 69 72 65 64 20 62 65 66 6f 72  been fired befor
27f80 65 2c 20 74 68 65 6e 20 70 52 74 20 0a 20 20 2a  e, then pRt .  *
27f90 2a 20 69 73 20 61 6c 72 65 61 64 79 20 61 6c 6c  * is already all
27fa0 6f 63 61 74 65 64 2e 20 4f 74 68 65 72 77 69 73  ocated. Otherwis
27fb0 65 2c 20 69 74 20 6d 75 73 74 20 62 65 20 69 6e  e, it must be in
27fc0 69 74 69 61 6c 69 7a 65 64 2e 20 20 2a 2f 0a 20  itialized.  */. 
27fd0 20 69 66 28 20 28 70 52 74 2d 3e 66 6c 61 67 73   if( (pRt->flags
27fe0 26 4d 45 4d 5f 46 72 61 6d 65 29 3d 3d 30 20 29  &MEM_Frame)==0 )
27ff0 7b 0a 20 20 20 20 2f 2a 20 53 75 62 50 72 6f 67  {.    /* SubProg
28000 72 61 6d 2e 6e 4d 65 6d 20 69 73 20 73 65 74 20  ram.nMem is set 
28010 74 6f 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  to the number of
28020 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 75 73   memory cells us
28030 65 64 20 62 79 20 74 68 65 20 0a 20 20 20 20 2a  ed by the .    *
28040 2a 20 70 72 6f 67 72 61 6d 20 73 74 6f 72 65 64  * program stored
28050 20 69 6e 20 53 75 62 50 72 6f 67 72 61 6d 2e 61   in SubProgram.a
28060 4f 70 2e 20 41 73 20 77 65 6c 6c 20 61 73 20 74  Op. As well as t
28070 68 65 73 65 2c 20 6f 6e 65 20 6d 65 6d 6f 72 79  hese, one memory
28080 0a 20 20 20 20 2a 2a 20 63 65 6c 6c 20 69 73 20  .    ** cell is 
28090 72 65 71 75 69 72 65 64 20 66 6f 72 20 65 61 63  required for eac
280a0 68 20 63 75 72 73 6f 72 20 75 73 65 64 20 62 79  h cursor used by
280b0 20 74 68 65 20 70 72 6f 67 72 61 6d 2e 20 53 65   the program. Se
280c0 74 20 6c 6f 63 61 6c 0a 20 20 20 20 2a 2a 20 76  t local.    ** v
280d0 61 72 69 61 62 6c 65 20 6e 4d 65 6d 20 28 61 6e  ariable nMem (an
280e0 64 20 6c 61 74 65 72 2c 20 56 64 62 65 46 72 61  d later, VdbeFra
280f0 6d 65 2e 6e 43 68 69 6c 64 4d 65 6d 29 20 74 6f  me.nChildMem) to
28100 20 74 68 69 73 20 76 61 6c 75 65 2e 0a 20 20 20   this value..   
28110 20 2a 2f 0a 20 20 20 20 6e 4d 65 6d 20 3d 20 70   */.    nMem = p
28120 50 72 6f 67 72 61 6d 2d 3e 6e 4d 65 6d 20 2b 20  Program->nMem + 
28130 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3b 0a  pProgram->nCsr;.
28140 20 20 20 20 6e 42 79 74 65 20 3d 20 52 4f 55 4e      nByte = ROUN
28150 44 38 28 73 69 7a 65 6f 66 28 56 64 62 65 46 72  D8(sizeof(VdbeFr
28160 61 6d 65 29 29 0a 20 20 20 20 20 20 20 20 20 20  ame)).          
28170 20 20 20 20 2b 20 6e 4d 65 6d 20 2a 20 73 69 7a      + nMem * siz
28180 65 6f 66 28 4d 65 6d 29 0a 20 20 20 20 20 20 20  eof(Mem).       
28190 20 20 20 20 20 20 20 2b 20 70 50 72 6f 67 72 61         + pProgra
281a0 6d 2d 3e 6e 43 73 72 20 2a 20 73 69 7a 65 6f 66  m->nCsr * sizeof
281b0 28 56 64 62 65 43 75 72 73 6f 72 20 2a 29 3b 0a  (VdbeCursor *);.
281c0 20 20 20 20 70 46 72 61 6d 65 20 3d 20 73 71 6c      pFrame = sql
281d0 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f  ite3DbMallocZero
281e0 28 64 62 2c 20 6e 42 79 74 65 29 3b 0a 20 20 20  (db, nByte);.   
281f0 20 69 66 28 20 21 70 46 72 61 6d 65 20 29 7b 0a   if( !pFrame ){.
28200 20 20 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65        goto no_me
28210 6d 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c  m;.    }.    sql
28220 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61  ite3VdbeMemRelea
28230 73 65 28 70 52 74 29 3b 0a 20 20 20 20 70 52 74  se(pRt);.    pRt
28240 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 46 72  ->flags = MEM_Fr
28250 61 6d 65 3b 0a 20 20 20 20 70 52 74 2d 3e 75 2e  ame;.    pRt->u.
28260 70 46 72 61 6d 65 20 3d 20 70 46 72 61 6d 65 3b  pFrame = pFrame;
28270 0a 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 76 20  ..    pFrame->v 
28280 3d 20 70 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d  = p;.    pFrame-
28290 3e 6e 43 68 69 6c 64 4d 65 6d 20 3d 20 6e 4d 65  >nChildMem = nMe
282a0 6d 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e  m;.    pFrame->n
282b0 43 68 69 6c 64 43 73 72 20 3d 20 70 50 72 6f 67  ChildCsr = pProg
282c0 72 61 6d 2d 3e 6e 43 73 72 3b 0a 20 20 20 20 70  ram->nCsr;.    p
282d0 46 72 61 6d 65 2d 3e 70 63 20 3d 20 70 63 3b 0a  Frame->pc = pc;.
282e0 20 20 20 20 70 46 72 61 6d 65 2d 3e 61 4d 65 6d      pFrame->aMem
282f0 20 3d 20 70 2d 3e 61 4d 65 6d 3b 0a 20 20 20 20   = p->aMem;.    
28300 70 46 72 61 6d 65 2d 3e 6e 4d 65 6d 20 3d 20 70  pFrame->nMem = p
28310 2d 3e 6e 4d 65 6d 3b 0a 20 20 20 20 70 46 72 61  ->nMem;.    pFra
28320 6d 65 2d 3e 61 70 43 73 72 20 3d 20 70 2d 3e 61  me->apCsr = p->a
28330 70 43 73 72 3b 0a 20 20 20 20 70 46 72 61 6d 65  pCsr;.    pFrame
28340 2d 3e 6e 43 75 72 73 6f 72 20 3d 20 70 2d 3e 6e  ->nCursor = p->n
28350 43 75 72 73 6f 72 3b 0a 20 20 20 20 70 46 72 61  Cursor;.    pFra
28360 6d 65 2d 3e 61 4f 70 20 3d 20 70 2d 3e 61 4f 70  me->aOp = p->aOp
28370 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 4f  ;.    pFrame->nO
28380 70 20 3d 20 70 2d 3e 6e 4f 70 3b 0a 20 20 20 20  p = p->nOp;.    
28390 70 46 72 61 6d 65 2d 3e 74 6f 6b 65 6e 20 3d 20  pFrame->token = 
283a0 70 50 72 6f 67 72 61 6d 2d 3e 74 6f 6b 65 6e 3b  pProgram->token;
283b0 0a 0a 20 20 20 20 70 45 6e 64 20 3d 20 26 56 64  ..    pEnd = &Vd
283c0 62 65 46 72 61 6d 65 4d 65 6d 28 70 46 72 61 6d  beFrameMem(pFram
283d0 65 29 5b 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c  e)[pFrame->nChil
283e0 64 4d 65 6d 5d 3b 0a 20 20 20 20 66 6f 72 28 70  dMem];.    for(p
283f0 4d 65 6d 3d 56 64 62 65 46 72 61 6d 65 4d 65 6d  Mem=VdbeFrameMem
28400 28 70 46 72 61 6d 65 29 3b 20 70 4d 65 6d 21 3d  (pFrame); pMem!=
28410 70 45 6e 64 3b 20 70 4d 65 6d 2b 2b 29 7b 0a 20  pEnd; pMem++){. 
28420 20 20 20 20 20 70 4d 65 6d 2d 3e 66 6c 61 67 73       pMem->flags
28430 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20   = MEM_Null;.   
28440 20 20 20 70 4d 65 6d 2d 3e 64 62 20 3d 20 64 62     pMem->db = db
28450 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b  ;.    }.  }else{
28460 0a 20 20 20 20 70 46 72 61 6d 65 20 3d 20 70 52  .    pFrame = pR
28470 74 2d 3e 75 2e 70 46 72 61 6d 65 3b 0a 20 20 20  t->u.pFrame;.   
28480 20 61 73 73 65 72 74 28 20 70 50 72 6f 67 72 61   assert( pProgra
28490 6d 2d 3e 6e 4d 65 6d 2b 70 50 72 6f 67 72 61 6d  m->nMem+pProgram
284a0 2d 3e 6e 43 73 72 3d 3d 70 46 72 61 6d 65 2d 3e  ->nCsr==pFrame->
284b0 6e 43 68 69 6c 64 4d 65 6d 20 29 3b 0a 20 20 20  nChildMem );.   
284c0 20 61 73 73 65 72 74 28 20 70 50 72 6f 67 72 61   assert( pProgra
284d0 6d 2d 3e 6e 43 73 72 3d 3d 70 46 72 61 6d 65 2d  m->nCsr==pFrame-
284e0 3e 6e 43 68 69 6c 64 43 73 72 20 29 3b 0a 20 20  >nChildCsr );.  
284f0 20 20 61 73 73 65 72 74 28 20 70 63 3d 3d 70 46    assert( pc==pF
28500 72 61 6d 65 2d 3e 70 63 20 29 3b 0a 20 20 7d 0a  rame->pc );.  }.
28510 0a 20 20 70 2d 3e 6e 46 72 61 6d 65 2b 2b 3b 0a  .  p->nFrame++;.
28520 20 20 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e    pFrame->pParen
28530 74 20 3d 20 70 2d 3e 70 46 72 61 6d 65 3b 0a 20  t = p->pFrame;. 
28540 20 70 46 72 61 6d 65 2d 3e 6c 61 73 74 52 6f 77   pFrame->lastRow
28550 69 64 20 3d 20 64 62 2d 3e 6c 61 73 74 52 6f 77  id = db->lastRow
28560 69 64 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 6e 43  id;.  pFrame->nC
28570 68 61 6e 67 65 20 3d 20 70 2d 3e 6e 43 68 61 6e  hange = p->nChan
28580 67 65 3b 0a 20 20 70 2d 3e 6e 43 68 61 6e 67 65  ge;.  p->nChange
28590 20 3d 20 30 3b 0a 20 20 70 2d 3e 70 46 72 61 6d   = 0;.  p->pFram
285a0 65 20 3d 20 70 46 72 61 6d 65 3b 0a 20 20 70 2d  e = pFrame;.  p-
285b0 3e 61 4d 65 6d 20 3d 20 61 4d 65 6d 20 3d 20 26  >aMem = aMem = &
285c0 56 64 62 65 46 72 61 6d 65 4d 65 6d 28 70 46 72  VdbeFrameMem(pFr
285d0 61 6d 65 29 5b 2d 31 5d 3b 0a 20 20 70 2d 3e 6e  ame)[-1];.  p->n
285e0 4d 65 6d 20 3d 20 70 46 72 61 6d 65 2d 3e 6e 43  Mem = pFrame->nC
285f0 68 69 6c 64 4d 65 6d 3b 0a 20 20 70 2d 3e 6e 43  hildMem;.  p->nC
28600 75 72 73 6f 72 20 3d 20 28 75 31 36 29 70 46 72  ursor = (u16)pFr
28610 61 6d 65 2d 3e 6e 43 68 69 6c 64 43 73 72 3b 0a  ame->nChildCsr;.
28620 20 20 70 2d 3e 61 70 43 73 72 20 3d 20 28 56 64    p->apCsr = (Vd
28630 62 65 43 75 72 73 6f 72 20 2a 2a 29 26 61 4d 65  beCursor **)&aMe
28640 6d 5b 70 2d 3e 6e 4d 65 6d 2b 31 5d 3b 0a 20 20  m[p->nMem+1];.  
28650 70 2d 3e 61 4f 70 20 3d 20 61 4f 70 20 3d 20 70  p->aOp = aOp = p
28660 50 72 6f 67 72 61 6d 2d 3e 61 4f 70 3b 0a 20 20  Program->aOp;.  
28670 70 2d 3e 6e 4f 70 20 3d 20 70 50 72 6f 67 72 61  p->nOp = pProgra
28680 6d 2d 3e 6e 4f 70 3b 0a 20 20 70 63 20 3d 20 2d  m->nOp;.  pc = -
28690 31 3b 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  1;..  break;.}..
286a0 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 61 72 61 6d  /* Opcode: Param
286b0 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
286c0 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69  ** This opcode i
286d0 73 20 6f 6e 6c 79 20 65 76 65 72 20 70 72 65 73  s only ever pres
286e0 65 6e 74 20 69 6e 20 73 75 62 2d 70 72 6f 67 72  ent in sub-progr
286f0 61 6d 73 20 63 61 6c 6c 65 64 20 76 69 61 20 74  ams called via t
28700 68 65 20 0a 2a 2a 20 4f 50 5f 50 72 6f 67 72 61  he .** OP_Progra
28710 6d 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 43  m instruction. C
28720 6f 70 79 20 61 20 76 61 6c 75 65 20 63 75 72 72  opy a value curr
28730 65 6e 74 6c 79 20 73 74 6f 72 65 64 20 69 6e 20  ently stored in 
28740 61 20 6d 65 6d 6f 72 79 20 0a 2a 2a 20 63 65 6c  a memory .** cel
28750 6c 20 6f 66 20 74 68 65 20 63 61 6c 6c 69 6e 67  l of the calling
28760 20 28 70 61 72 65 6e 74 29 20 66 72 61 6d 65 20   (parent) frame 
28770 74 6f 20 63 65 6c 6c 20 50 32 20 69 6e 20 74 68  to cell P2 in th
28780 65 20 63 75 72 72 65 6e 74 20 66 72 61 6d 65 73  e current frames
28790 20 0a 2a 2a 20 61 64 64 72 65 73 73 20 73 70 61   .** address spa
287a0 63 65 2e 20 54 68 69 73 20 69 73 20 75 73 65 64  ce. This is used
287b0 20 62 79 20 74 72 69 67 67 65 72 20 70 72 6f 67   by trigger prog
287c0 72 61 6d 73 20 74 6f 20 61 63 63 65 73 73 20 74  rams to access t
287d0 68 65 20 6e 65 77 2e 2a 20 0a 2a 2a 20 61 6e 64  he new.* .** and
287e0 20 6f 6c 64 2e 2a 20 76 61 6c 75 65 73 2e 0a 2a   old.* values..*
287f0 2a 0a 2a 2a 20 54 68 65 20 61 64 64 72 65 73 73  *.** The address
28800 20 6f 66 20 74 68 65 20 63 65 6c 6c 20 69 6e 20   of the cell in 
28810 74 68 65 20 70 61 72 65 6e 74 20 66 72 61 6d 65  the parent frame
28820 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62   is determined b
28830 79 20 61 64 64 69 6e 67 0a 2a 2a 20 74 68 65 20  y adding.** the 
28840 76 61 6c 75 65 20 6f 66 20 74 68 65 20 50 31 20  value of the P1 
28850 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20  argument to the 
28860 76 61 6c 75 65 20 6f 66 20 74 68 65 20 50 31 20  value of the P1 
28870 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 0a  argument to the.
28880 2a 2a 20 63 61 6c 6c 69 6e 67 20 4f 50 5f 50 72  ** calling OP_Pr
28890 6f 67 72 61 6d 20 69 6e 73 74 72 75 63 74 69 6f  ogram instructio
288a0 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 61  n..*/.case OP_Pa
288b0 72 61 6d 3a 20 7b 20 20 20 20 20 20 20 20 20 20  ram: {          
288c0 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65   /* out2-prerele
288d0 61 73 65 20 2a 2f 0a 20 20 56 64 62 65 46 72 61  ase */.  VdbeFra
288e0 6d 65 20 2a 70 46 72 61 6d 65 3b 0a 20 20 4d 65  me *pFrame;.  Me
288f0 6d 20 2a 70 49 6e 3b 0a 20 20 70 46 72 61 6d 65  m *pIn;.  pFrame
28900 20 3d 20 70 2d 3e 70 46 72 61 6d 65 3b 0a 20 20   = p->pFrame;.  
28910 70 49 6e 20 3d 20 26 70 46 72 61 6d 65 2d 3e 61  pIn = &pFrame->a
28920 4d 65 6d 5b 70 4f 70 2d 3e 70 31 20 2b 20 70 46  Mem[pOp->p1 + pF
28930 72 61 6d 65 2d 3e 61 4f 70 5b 70 46 72 61 6d 65  rame->aOp[pFrame
28940 2d 3e 70 63 5d 2e 70 31 5d 3b 20 20 20 0a 20 20  ->pc].p1];   .  
28950 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68  sqlite3VdbeMemSh
28960 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20  allowCopy(pOut, 
28970 70 49 6e 2c 20 4d 45 4d 5f 45 70 68 65 6d 29 3b  pIn, MEM_Ephem);
28980 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 65 6e  .  break;.}..#en
28990 64 69 66 20 2f 2a 20 23 69 66 6e 64 65 66 20 53  dif /* #ifndef S
289a0 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47  QLITE_OMIT_TRIGG
289b0 45 52 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  ER */..#ifndef S
289c0 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49  QLITE_OMIT_FOREI
289d0 47 4e 5f 4b 45 59 0a 2f 2a 20 4f 70 63 6f 64 65  GN_KEY./* Opcode
289e0 3a 20 46 6b 43 6f 75 6e 74 65 72 20 50 31 20 50  : FkCounter P1 P
289f0 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 6e  2 * * *.**.** In
28a00 63 72 65 6d 65 6e 74 20 61 20 22 63 6f 6e 73 74  crement a "const
28a10 72 61 69 6e 74 20 63 6f 75 6e 74 65 72 22 20 62  raint counter" b
28a20 79 20 50 32 20 28 50 32 20 6d 61 79 20 62 65 20  y P2 (P2 may be 
28a30 6e 65 67 61 74 69 76 65 20 6f 72 20 70 6f 73 69  negative or posi
28a40 74 69 76 65 29 2e 0a 2a 2a 20 49 66 20 50 31 20  tive)..** If P1 
28a50 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65  is non-zero, the
28a60 20 64 61 74 61 62 61 73 65 20 63 6f 6e 73 74 72   database constr
28a70 61 69 6e 74 20 63 6f 75 6e 74 65 72 20 69 73 20  aint counter is 
28a80 69 6e 63 72 65 6d 65 6e 74 65 64 20 0a 2a 2a 20  incremented .** 
28a90 28 64 65 66 65 72 72 65 64 20 66 6f 72 65 69 67  (deferred foreig
28aa0 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74  n key constraint
28ab0 73 29 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69  s). Otherwise, i
28ac0 66 20 50 31 20 69 73 20 7a 65 72 6f 2c 20 74 68  f P1 is zero, th
28ad0 65 20 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74 20  e .** statement 
28ae0 63 6f 75 6e 74 65 72 20 69 73 20 69 6e 63 72 65  counter is incre
28af0 6d 65 6e 74 65 64 20 28 69 6d 6d 65 64 69 61 74  mented (immediat
28b00 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f  e foreign key co
28b10 6e 73 74 72 61 69 6e 74 73 29 2e 0a 2a 2f 0a 63  nstraints)..*/.c
28b20 61 73 65 20 4f 50 5f 46 6b 43 6f 75 6e 74 65 72  ase OP_FkCounter
28b30 3a 20 7b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70  : {.  if( pOp->p
28b40 31 20 29 7b 0a 20 20 20 20 64 62 2d 3e 6e 44 65  1 ){.    db->nDe
28b50 66 65 72 72 65 64 43 6f 6e 73 20 2b 3d 20 70 4f  ferredCons += pO
28b60 70 2d 3e 70 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a  p->p2;.  }else{.
28b70 20 20 20 20 70 2d 3e 6e 46 6b 43 6f 6e 73 74 72      p->nFkConstr
28b80 61 69 6e 74 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b  aint += pOp->p2;
28b90 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
28ba0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 6b 49 66  ./* Opcode: FkIf
28bb0 5a 65 72 6f 20 50 31 20 50 32 20 2a 20 2a 20 2a  Zero P1 P2 * * *
28bc0 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
28bd0 64 65 20 74 65 73 74 73 20 69 66 20 61 20 66 6f  de tests if a fo
28be0 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72  reign key constr
28bf0 61 69 6e 74 2d 63 6f 75 6e 74 65 72 20 69 73 20  aint-counter is 
28c00 63 75 72 72 65 6e 74 6c 79 20 7a 65 72 6f 2e 0a  currently zero..
28c10 2a 2a 20 49 66 20 73 6f 2c 20 6a 75 6d 70 20 74  ** If so, jump t
28c20 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 50 32  o instruction P2
28c30 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 66 61 6c  . Otherwise, fal
28c40 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  l through to the
28c50 20 6e 65 78 74 20 0a 2a 2a 20 69 6e 73 74 72 75   next .** instru
28c60 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  ction..**.** If 
28c70 50 31 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20  P1 is non-zero, 
28c80 74 68 65 6e 20 74 68 65 20 6a 75 6d 70 20 69 73  then the jump is
28c90 20 74 61 6b 65 6e 20 69 66 20 74 68 65 20 64 61   taken if the da
28ca0 74 61 62 61 73 65 20 63 6f 6e 73 74 72 61 69 6e  tabase constrain
28cb0 74 2d 63 6f 75 6e 74 65 72 0a 2a 2a 20 69 73 20  t-counter.** is 
28cc0 7a 65 72 6f 20 28 74 68 65 20 6f 6e 65 20 74 68  zero (the one th
28cd0 61 74 20 63 6f 75 6e 74 73 20 64 65 66 65 72 72  at counts deferr
28ce0 65 64 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69  ed constraint vi
28cf0 6f 6c 61 74 69 6f 6e 73 29 2e 20 49 66 20 50 31  olations). If P1
28d00 20 69 73 0a 2a 2a 20 7a 65 72 6f 2c 20 74 68 65   is.** zero, the
28d10 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69   jump is taken i
28d20 66 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20  f the statement 
28d30 63 6f 6e 73 74 72 61 69 6e 74 2d 63 6f 75 6e 74  constraint-count
28d40 65 72 20 69 73 20 7a 65 72 6f 0a 2a 2a 20 28 69  er is zero.** (i
28d50 6d 6d 65 64 69 61 74 65 20 66 6f 72 65 69 67 6e  mmediate foreign
28d60 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 20   key constraint 
28d70 76 69 6f 6c 61 74 69 6f 6e 73 29 2e 0a 2a 2f 0a  violations)..*/.
28d80 63 61 73 65 20 4f 50 5f 46 6b 49 66 5a 65 72 6f  case OP_FkIfZero
28d90 3a 20 7b 20 20 20 20 20 20 20 20 20 2f 2a 20 6a  : {         /* j
28da0 75 6d 70 20 2a 2f 0a 20 20 69 66 28 20 70 4f 70  ump */.  if( pOp
28db0 2d 3e 70 31 20 29 7b 0a 20 20 20 20 69 66 28 20  ->p1 ){.    if( 
28dc0 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e  db->nDeferredCon
28dd0 73 3d 3d 30 20 29 20 70 63 20 3d 20 70 4f 70 2d  s==0 ) pc = pOp-
28de0 3e 70 32 2d 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a  >p2-1;.  }else{.
28df0 20 20 20 20 69 66 28 20 70 2d 3e 6e 46 6b 43 6f      if( p->nFkCo
28e00 6e 73 74 72 61 69 6e 74 3d 3d 30 20 29 20 70 63  nstraint==0 ) pc
28e10 20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20   = pOp->p2-1;.  
28e20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  }.  break;.}.#en
28e30 64 69 66 20 2f 2a 20 23 69 66 6e 64 65 66 20 53  dif /* #ifndef S
28e40 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49  QLITE_OMIT_FOREI
28e50 47 4e 5f 4b 45 59 20 2a 2f 0a 0a 23 69 66 6e 64  GN_KEY */..#ifnd
28e60 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ef SQLITE_OMIT_A
28e70 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 2f 2a 20  UTOINCREMENT./* 
28e80 4f 70 63 6f 64 65 3a 20 4d 65 6d 4d 61 78 20 50  Opcode: MemMax P
28e90 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
28ea0 20 50 31 20 69 73 20 61 20 72 65 67 69 73 74 65   P1 is a registe
28eb0 72 20 69 6e 20 74 68 65 20 72 6f 6f 74 20 66 72  r in the root fr
28ec0 61 6d 65 20 6f 66 20 74 68 69 73 20 56 4d 20 28  ame of this VM (
28ed0 74 68 65 20 72 6f 6f 74 20 66 72 61 6d 65 20 69  the root frame i
28ee0 73 0a 2a 2a 20 64 69 66 66 65 72 65 6e 74 20 66  s.** different f
28ef0 72 6f 6d 20 74 68 65 20 63 75 72 72 65 6e 74 20  rom the current 
28f00 66 72 61 6d 65 20 69 66 20 74 68 69 73 20 69 6e  frame if this in
28f10 73 74 72 75 63 74 69 6f 6e 20 69 73 20 62 65 69  struction is bei
28f20 6e 67 20 65 78 65 63 75 74 65 64 0a 2a 2a 20 77  ng executed.** w
28f30 69 74 68 69 6e 20 61 20 73 75 62 2d 70 72 6f 67  ithin a sub-prog
28f40 72 61 6d 29 2e 20 53 65 74 20 74 68 65 20 76 61  ram). Set the va
28f50 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65 72 20  lue of register 
28f60 50 31 20 74 6f 20 74 68 65 20 6d 61 78 69 6d 75  P1 to the maximu
28f70 6d 20 6f 66 20 0a 2a 2a 20 69 74 73 20 63 75 72  m of .** its cur
28f80 72 65 6e 74 20 76 61 6c 75 65 20 61 6e 64 20 74  rent value and t
28f90 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
28fa0 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54  ster P2..**.** T
28fb0 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
28fc0 74 68 72 6f 77 73 20 61 6e 20 65 72 72 6f 72 20  throws an error 
28fd0 69 66 20 74 68 65 20 6d 65 6d 6f 72 79 20 63 65  if the memory ce
28fe0 6c 6c 20 69 73 20 6e 6f 74 20 69 6e 69 74 69 61  ll is not initia
28ff0 6c 6c 79 0a 2a 2a 20 61 6e 20 69 6e 74 65 67 65  lly.** an intege
29000 72 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 65  r..*/.case OP_Me
29010 6d 4d 61 78 3a 20 7b 20 20 20 20 20 20 20 20 2f  mMax: {        /
29020 2a 20 69 6e 32 20 2a 2f 0a 20 20 4d 65 6d 20 2a  * in2 */.  Mem *
29030 70 49 6e 31 3b 0a 20 20 56 64 62 65 46 72 61 6d  pIn1;.  VdbeFram
29040 65 20 2a 70 46 72 61 6d 65 3b 0a 20 20 69 66 28  e *pFrame;.  if(
29050 20 70 2d 3e 70 46 72 61 6d 65 20 29 7b 0a 20 20   p->pFrame ){.  
29060 20 20 66 6f 72 28 70 46 72 61 6d 65 3d 70 2d 3e    for(pFrame=p->
29070 70 46 72 61 6d 65 3b 20 70 46 72 61 6d 65 2d 3e  pFrame; pFrame->
29080 70 50 61 72 65 6e 74 3b 20 70 46 72 61 6d 65 3d  pParent; pFrame=
29090 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 29  pFrame->pParent)
290a0 3b 0a 20 20 20 20 70 49 6e 31 20 3d 20 26 70 46  ;.    pIn1 = &pF
290b0 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e  rame->aMem[pOp->
290c0 70 31 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  p1];.  }else{.  
290d0 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
290e0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 7d 0a 20 20 61  Op->p1];.  }.  a
290f0 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
29100 64 28 70 49 6e 31 29 20 29 3b 0a 20 20 73 71 6c  d(pIn1) );.  sql
29110 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67  ite3VdbeMemInteg
29120 65 72 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 70  erify(pIn1);.  p
29130 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In2 = &aMem[pOp-
29140 3e 70 32 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56  >p2];.  sqlite3V
29150 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79  dbeMemIntegerify
29160 28 70 49 6e 32 29 3b 0a 20 20 69 66 28 20 70 49  (pIn2);.  if( pI
29170 6e 31 2d 3e 75 2e 69 3c 70 49 6e 32 2d 3e 75 2e  n1->u.i<pIn2->u.
29180 69 29 7b 0a 20 20 20 20 70 49 6e 31 2d 3e 75 2e  i){.    pIn1->u.
29190 69 20 3d 20 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20  i = pIn2->u.i;. 
291a0 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65   }.  break;.}.#e
291b0 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
291c0 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e  MIT_AUTOINCREMEN
291d0 54 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  T */../* Opcode:
291e0 20 49 66 50 6f 73 20 50 31 20 50 32 20 2a 20 2a   IfPos P1 P2 * *
291f0 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20   *.**.** If the 
29200 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65  value of registe
29210 72 20 50 31 20 69 73 20 31 20 6f 72 20 67 72 65  r P1 is 1 or gre
29220 61 74 65 72 2c 20 6a 75 6d 70 20 74 6f 20 50 32  ater, jump to P2
29230 2e 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69 6c  ..**.** It is il
29240 6c 65 67 61 6c 20 74 6f 20 75 73 65 20 74 68 69  legal to use thi
29250 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e  s instruction on
29260 20 61 20 72 65 67 69 73 74 65 72 20 74 68 61 74   a register that
29270 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 63 6f 6e   does.** not con
29280 74 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e  tain an integer.
29290 20 20 41 6e 20 61 73 73 65 72 74 69 6f 6e 20 66    An assertion f
292a0 61 75 6c 74 20 77 69 6c 6c 20 72 65 73 75 6c 74  ault will result
292b0 20 69 66 20 79 6f 75 20 74 72 79 2e 0a 2a 2f 0a   if you try..*/.
292c0 63 61 73 65 20 4f 50 5f 49 66 50 6f 73 3a 20 7b  case OP_IfPos: {
292d0 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
292e0 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d   in1 */.  pIn1 =
292f0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
29300 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d  .  assert( pIn1-
29310 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29  >flags&MEM_Int )
29320 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e  ;.  if( pIn1->u.
29330 69 3e 30 20 29 7b 0a 20 20 20 20 20 70 63 20 3d  i>0 ){.     pc =
29340 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
29350 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
29360 20 4f 70 63 6f 64 65 3a 20 49 66 4e 65 67 20 50   Opcode: IfNeg P
29370 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
29380 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 6f 66   If the value of
29390 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20   register P1 is 
293a0 6c 65 73 73 20 74 68 61 6e 20 7a 65 72 6f 2c 20  less than zero, 
293b0 6a 75 6d 70 20 74 6f 20 50 32 2e 20 0a 2a 2a 0a  jump to P2. .**.
293c0 2a 2a 20 49 74 20 69 73 20 69 6c 6c 65 67 61 6c  ** It is illegal
293d0 20 74 6f 20 75 73 65 20 74 68 69 73 20 69 6e 73   to use this ins
293e0 74 72 75 63 74 69 6f 6e 20 6f 6e 20 61 20 72 65  truction on a re
293f0 67 69 73 74 65 72 20 74 68 61 74 20 64 6f 65 73  gister that does
29400 0a 2a 2a 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20  .** not contain 
29410 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 41 6e 20  an integer.  An 
29420 61 73 73 65 72 74 69 6f 6e 20 66 61 75 6c 74 20  assertion fault 
29430 77 69 6c 6c 20 72 65 73 75 6c 74 20 69 66 20 79  will result if y
29440 6f 75 20 74 72 79 2e 0a 2a 2f 0a 63 61 73 65 20  ou try..*/.case 
29450 4f 50 5f 49 66 4e 65 67 3a 20 7b 20 20 20 20 20  OP_IfNeg: {     
29460 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20     /* jump, in1 
29470 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
29480 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  m[pOp->p1];.  as
29490 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67  sert( pIn1->flag
294a0 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 69  s&MEM_Int );.  i
294b0 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3c 30 20 29  f( pIn1->u.i<0 )
294c0 7b 0a 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  {.     pc = pOp-
294d0 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62  >p2 - 1;.  }.  b
294e0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
294f0 64 65 3a 20 49 66 5a 65 72 6f 20 50 31 20 50 32  de: IfZero P1 P2
29500 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68   P3 * *.**.** Th
29510 65 20 72 65 67 69 73 74 65 72 20 50 31 20 6d 75  e register P1 mu
29520 73 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e  st contain an in
29530 74 65 67 65 72 2e 20 20 41 64 64 20 6c 69 74 65  teger.  Add lite
29540 72 61 6c 20 50 33 20 74 6f 20 74 68 65 0a 2a 2a  ral P3 to the.**
29550 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
29560 65 72 20 50 31 2e 20 20 49 66 20 74 68 65 20 72  er P1.  If the r
29570 65 73 75 6c 74 20 69 73 20 65 78 61 63 74 6c 79  esult is exactly
29580 20 30 2c 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20   0, jump to P2. 
29590 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69 6c 6c  .**.** It is ill
295a0 65 67 61 6c 20 74 6f 20 75 73 65 20 74 68 69 73  egal to use this
295b0 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 20   instruction on 
295c0 61 20 72 65 67 69 73 74 65 72 20 74 68 61 74 20  a register that 
295d0 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 63 6f 6e 74  does.** not cont
295e0 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 20  ain an integer. 
295f0 20 41 6e 20 61 73 73 65 72 74 69 6f 6e 20 66 61   An assertion fa
29600 75 6c 74 20 77 69 6c 6c 20 72 65 73 75 6c 74 20  ult will result 
29610 69 66 20 79 6f 75 20 74 72 79 2e 0a 2a 2f 0a 63  if you try..*/.c
29620 61 73 65 20 4f 50 5f 49 66 5a 65 72 6f 3a 20 7b  ase OP_IfZero: {
29630 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
29640 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d   in1 */.  pIn1 =
29650 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
29660 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d  .  assert( pIn1-
29670 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29  >flags&MEM_Int )
29680 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 20 2b 3d  ;.  pIn1->u.i +=
29690 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 69 66 28 20   pOp->p3;.  if( 
296a0 70 49 6e 31 2d 3e 75 2e 69 3d 3d 30 20 29 7b 0a  pIn1->u.i==0 ){.
296b0 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70       pc = pOp->p
296c0 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65  2 - 1;.  }.  bre
296d0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
296e0 3a 20 41 67 67 53 74 65 70 20 2a 20 50 32 20 50  : AggStep * P2 P
296f0 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 45 78  3 P4 P5.**.** Ex
29700 65 63 75 74 65 20 74 68 65 20 73 74 65 70 20 66  ecute the step f
29710 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6e 20 61  unction for an a
29720 67 67 72 65 67 61 74 65 2e 20 20 54 68 65 0a 2a  ggregate.  The.*
29730 2a 20 66 75 6e 63 74 69 6f 6e 20 68 61 73 20 50  * function has P
29740 35 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 20 50  5 arguments.   P
29750 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  4 is a pointer t
29760 6f 20 74 68 65 20 46 75 6e 63 44 65 66 0a 2a 2a  o the FuncDef.**
29770 20 73 74 72 75 63 74 75 72 65 20 74 68 61 74 20   structure that 
29780 73 70 65 63 69 66 69 65 73 20 74 68 65 20 66 75  specifies the fu
29790 6e 63 74 69 6f 6e 2e 20 20 55 73 65 20 72 65 67  nction.  Use reg
297a0 69 73 74 65 72 0a 2a 2a 20 50 33 20 61 73 20 74  ister.** P3 as t
297b0 68 65 20 61 63 63 75 6d 75 6c 61 74 6f 72 2e 0a  he accumulator..
297c0 2a 2a 0a 2a 2a 20 54 68 65 20 50 35 20 61 72 67  **.** The P5 arg
297d0 75 6d 65 6e 74 73 20 61 72 65 20 74 61 6b 65 6e  uments are taken
297e0 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50   from register P
297f0 32 20 61 6e 64 20 69 74 73 0a 2a 2a 20 73 75 63  2 and its.** suc
29800 63 65 73 73 6f 72 73 2e 0a 2a 2f 0a 63 61 73 65  cessors..*/.case
29810 20 4f 50 5f 41 67 67 53 74 65 70 3a 20 7b 0a 20   OP_AggStep: {. 
29820 20 69 6e 74 20 6e 3b 0a 20 20 69 6e 74 20 69 3b   int n;.  int i;
29830 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20  .  Mem *pMem;.  
29840 4d 65 6d 20 2a 70 52 65 63 3b 0a 20 20 73 71 6c  Mem *pRec;.  sql
29850 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 63 74 78  ite3_context ctx
29860 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  ;.  sqlite3_valu
29870 65 20 2a 2a 61 70 56 61 6c 3b 0a 0a 20 20 6e 20  e **apVal;..  n 
29880 3d 20 70 4f 70 2d 3e 70 35 3b 0a 20 20 61 73 73  = pOp->p5;.  ass
29890 65 72 74 28 20 6e 3e 3d 30 20 29 3b 0a 20 20 70  ert( n>=0 );.  p
298a0 52 65 63 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Rec = &aMem[pOp-
298b0 3e 70 32 5d 3b 0a 20 20 61 70 56 61 6c 20 3d 20  >p2];.  apVal = 
298c0 70 2d 3e 61 70 41 72 67 3b 0a 20 20 61 73 73 65  p->apArg;.  asse
298d0 72 74 28 20 61 70 56 61 6c 20 7c 7c 20 6e 3d 3d  rt( apVal || n==
298e0 30 20 29 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20  0 );.  for(i=0; 
298f0 69 3c 6e 3b 20 69 2b 2b 2c 20 70 52 65 63 2b 2b  i<n; i++, pRec++
29900 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d  ){.    assert( m
29910 65 6d 49 73 56 61 6c 69 64 28 70 52 65 63 29 20  emIsValid(pRec) 
29920 29 3b 0a 20 20 20 20 61 70 56 61 6c 5b 69 5d 20  );.    apVal[i] 
29930 3d 20 70 52 65 63 3b 0a 20 20 20 20 6d 65 6d 41  = pRec;.    memA
29940 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
29950 70 52 65 63 29 3b 0a 20 20 20 20 73 71 6c 69 74  pRec);.    sqlit
29960 65 33 56 64 62 65 4d 65 6d 53 74 6f 72 65 54 79  e3VdbeMemStoreTy
29970 70 65 28 70 52 65 63 29 3b 0a 20 20 7d 0a 20 20  pe(pRec);.  }.  
29980 63 74 78 2e 70 46 75 6e 63 20 3d 20 70 4f 70 2d  ctx.pFunc = pOp-
29990 3e 70 34 2e 70 46 75 6e 63 3b 0a 20 20 61 73 73  >p4.pFunc;.  ass
299a0 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26  ert( pOp->p3>0 &
299b0 26 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d  & pOp->p3<=p->nM
299c0 65 6d 20 29 3b 0a 20 20 63 74 78 2e 70 4d 65 6d  em );.  ctx.pMem
299d0 20 3d 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b   = pMem = &aMem[
299e0 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 70 4d 65 6d  pOp->p3];.  pMem
299f0 2d 3e 6e 2b 2b 3b 0a 20 20 63 74 78 2e 73 2e 66  ->n++;.  ctx.s.f
29a00 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b  lags = MEM_Null;
29a10 0a 20 20 63 74 78 2e 73 2e 7a 20 3d 20 30 3b 0a  .  ctx.s.z = 0;.
29a20 20 20 63 74 78 2e 73 2e 7a 4d 61 6c 6c 6f 63 20    ctx.s.zMalloc 
29a30 3d 20 30 3b 0a 20 20 63 74 78 2e 73 2e 78 44 65  = 0;.  ctx.s.xDe
29a40 6c 20 3d 20 30 3b 0a 20 20 63 74 78 2e 73 2e 64  l = 0;.  ctx.s.d
29a50 62 20 3d 20 64 62 3b 0a 20 20 63 74 78 2e 69 73  b = db;.  ctx.is
29a60 45 72 72 6f 72 20 3d 20 30 3b 0a 20 20 63 74 78  Error = 0;.  ctx
29a70 2e 70 43 6f 6c 6c 20 3d 20 30 3b 0a 20 20 69 66  .pColl = 0;.  if
29a80 28 20 63 74 78 2e 70 46 75 6e 63 2d 3e 66 6c 61  ( ctx.pFunc->fla
29a90 67 73 20 26 20 53 51 4c 49 54 45 5f 46 55 4e 43  gs & SQLITE_FUNC
29aa0 5f 4e 45 45 44 43 4f 4c 4c 20 29 7b 0a 20 20 20  _NEEDCOLL ){.   
29ab0 20 61 73 73 65 72 74 28 20 70 4f 70 3e 70 2d 3e   assert( pOp>p->
29ac0 61 4f 70 20 29 3b 0a 20 20 20 20 61 73 73 65 72  aOp );.    asser
29ad0 74 28 20 70 4f 70 5b 2d 31 5d 2e 70 34 74 79 70  t( pOp[-1].p4typ
29ae0 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51 20 29 3b  e==P4_COLLSEQ );
29af0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
29b00 5b 2d 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  [-1].opcode==OP_
29b10 43 6f 6c 6c 53 65 71 20 29 3b 0a 20 20 20 20 63  CollSeq );.    c
29b20 74 78 2e 70 43 6f 6c 6c 20 3d 20 70 4f 70 5b 2d  tx.pColl = pOp[-
29b30 31 5d 2e 70 34 2e 70 43 6f 6c 6c 3b 0a 20 20 7d  1].p4.pColl;.  }
29b40 0a 20 20 28 63 74 78 2e 70 46 75 6e 63 2d 3e 78  .  (ctx.pFunc->x
29b50 53 74 65 70 29 28 26 63 74 78 2c 20 6e 2c 20 61  Step)(&ctx, n, a
29b60 70 56 61 6c 29 3b 20 2f 2a 20 49 4d 50 3a 20 52  pVal); /* IMP: R
29b70 2d 32 34 35 30 35 2d 32 33 32 33 30 20 2a 2f 0a  -24505-23230 */.
29b80 20 20 69 66 28 20 63 74 78 2e 69 73 45 72 72 6f    if( ctx.isErro
29b90 72 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  r ){.    sqlite3
29ba0 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45  SetString(&p->zE
29bb0 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 22 2c  rrMsg, db, "%s",
29bc0 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74   sqlite3_value_t
29bd0 65 78 74 28 26 63 74 78 2e 73 29 29 3b 0a 20 20  ext(&ctx.s));.  
29be0 20 20 72 63 20 3d 20 63 74 78 2e 69 73 45 72 72    rc = ctx.isErr
29bf0 6f 72 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65  or;.  }.  sqlite
29c00 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28  3VdbeMemRelease(
29c10 26 63 74 78 2e 73 29 3b 0a 20 20 62 72 65 61 6b  &ctx.s);.  break
29c20 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
29c30 41 67 67 46 69 6e 61 6c 20 50 31 20 50 32 20 2a  AggFinal P1 P2 *
29c40 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 45 78 65 63   P4 *.**.** Exec
29c50 75 74 65 20 74 68 65 20 66 69 6e 61 6c 69 7a 65  ute the finalize
29c60 72 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61  r function for a
29c70 6e 20 61 67 67 72 65 67 61 74 65 2e 20 20 50 31  n aggregate.  P1
29c80 20 69 73 0a 2a 2a 20 74 68 65 20 6d 65 6d 6f 72   is.** the memor
29c90 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74 20  y location that 
29ca0 69 73 20 74 68 65 20 61 63 63 75 6d 75 6c 61 74  is the accumulat
29cb0 6f 72 20 66 6f 72 20 74 68 65 20 61 67 67 72 65  or for the aggre
29cc0 67 61 74 65 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 69  gate..**.** P2 i
29cd0 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  s the number of 
29ce0 61 72 67 75 6d 65 6e 74 73 20 74 68 61 74 20 74  arguments that t
29cf0 68 65 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e  he step function
29d00 20 74 61 6b 65 73 20 61 6e 64 0a 2a 2a 20 50 34   takes and.** P4
29d10 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
29d20 20 74 68 65 20 46 75 6e 63 44 65 66 20 66 6f 72   the FuncDef for
29d30 20 74 68 69 73 20 66 75 6e 63 74 69 6f 6e 2e 20   this function. 
29d40 20 54 68 65 20 50 32 0a 2a 2a 20 61 72 67 75 6d   The P2.** argum
29d50 65 6e 74 20 69 73 20 6e 6f 74 20 75 73 65 64 20  ent is not used 
29d60 62 79 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 20  by this opcode. 
29d70 20 49 74 20 69 73 20 6f 6e 6c 79 20 74 68 65 72   It is only ther
29d80 65 20 74 6f 20 64 69 73 61 6d 62 69 67 75 61 74  e to disambiguat
29d90 65 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20 74  e.** functions t
29da0 68 61 74 20 63 61 6e 20 74 61 6b 65 20 76 61 72  hat can take var
29db0 79 69 6e 67 20 6e 75 6d 62 65 72 73 20 6f 66 20  ying numbers of 
29dc0 61 72 67 75 6d 65 6e 74 73 2e 20 20 54 68 65 0a  arguments.  The.
29dd0 2a 2a 20 50 34 20 61 72 67 75 6d 65 6e 74 20 69  ** P4 argument i
29de0 73 20 6f 6e 6c 79 20 6e 65 65 64 65 64 20 66 6f  s only needed fo
29df0 72 20 74 68 65 20 64 65 67 65 6e 65 72 61 74 65  r the degenerate
29e00 20 63 61 73 65 20 77 68 65 72 65 0a 2a 2a 20 74   case where.** t
29e10 68 65 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e  he step function
29e20 20 77 61 73 20 6e 6f 74 20 70 72 65 76 69 6f 75   was not previou
29e30 73 6c 79 20 63 61 6c 6c 65 64 2e 0a 2a 2f 0a 63  sly called..*/.c
29e40 61 73 65 20 4f 50 5f 41 67 67 46 69 6e 61 6c 3a  ase OP_AggFinal:
29e50 20 7b 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a   {.  Mem *pMem;.
29e60 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
29e70 31 3e 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d  1>0 && pOp->p1<=
29e80 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 4d 65  p->nMem );.  pMe
29e90 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  m = &aMem[pOp->p
29ea0 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70  1];.  assert( (p
29eb0 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 7e 28 4d  Mem->flags & ~(M
29ec0 45 4d 5f 4e 75 6c 6c 7c 4d 45 4d 5f 41 67 67 29  EM_Null|MEM_Agg)
29ed0 29 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 73  )==0 );.  rc = s
29ee0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 69 6e  qlite3VdbeMemFin
29ef0 61 6c 69 7a 65 28 70 4d 65 6d 2c 20 70 4f 70 2d  alize(pMem, pOp-
29f00 3e 70 34 2e 70 46 75 6e 63 29 3b 0a 20 20 69 66  >p4.pFunc);.  if
29f10 28 20 72 63 20 29 7b 0a 20 20 20 20 73 71 6c 69  ( rc ){.    sqli
29f20 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d  te3SetString(&p-
29f30 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 25  >zErrMsg, db, "%
29f40 73 22 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  s", sqlite3_valu
29f50 65 5f 74 65 78 74 28 70 4d 65 6d 29 29 3b 0a 20  e_text(pMem));. 
29f60 20 7d 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65   }.  sqlite3Vdbe
29f70 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70  ChangeEncoding(p
29f80 4d 65 6d 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a  Mem, encoding);.
29f90 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f    UPDATE_MAX_BLO
29fa0 42 53 49 5a 45 28 70 4d 65 6d 29 3b 0a 20 20 69  BSIZE(pMem);.  i
29fb0 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  f( sqlite3VdbeMe
29fc0 6d 54 6f 6f 42 69 67 28 70 4d 65 6d 29 20 29 7b  mTooBig(pMem) ){
29fd0 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69  .    goto too_bi
29fe0 67 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  g;.  }.  break;.
29ff0 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  }..#ifndef SQLIT
2a000 45 5f 4f 4d 49 54 5f 57 41 4c 0a 2f 2a 20 4f 70  E_OMIT_WAL./* Op
2a010 63 6f 64 65 3a 20 43 68 65 63 6b 70 6f 69 6e 74  code: Checkpoint
2a020 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   P1 * * * *.**.*
2a030 2a 20 43 68 65 63 6b 70 6f 69 6e 74 20 64 61 74  * Checkpoint dat
2a040 61 62 61 73 65 20 50 31 2e 20 54 68 69 73 20 69  abase P1. This i
2a050 73 20 61 20 6e 6f 2d 6f 70 20 69 66 20 50 31 20  s a no-op if P1 
2a060 69 73 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79  is not currently
2a070 20 69 6e 0a 2a 2a 20 57 41 4c 20 6d 6f 64 65 2e   in.** WAL mode.
2a080 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 68 65 63  .*/.case OP_Chec
2a090 6b 70 6f 69 6e 74 3a 20 7b 0a 20 20 72 63 20 3d  kpoint: {.  rc =
2a0a0 20 73 71 6c 69 74 65 33 43 68 65 63 6b 70 6f 69   sqlite3Checkpoi
2a0b0 6e 74 28 64 62 2c 20 70 4f 70 2d 3e 70 31 29 3b  nt(db, pOp->p1);
2a0c0 0a 20 20 62 72 65 61 6b 3b 0a 7d 3b 20 20 0a 23  .  break;.};  .#
2a0d0 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53  endif..#ifndef S
2a0e0 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 41 47 4d  QLITE_OMIT_PRAGM
2a0f0 41 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4a 6f 75  A./* Opcode: Jou
2a100 72 6e 61 6c 4d 6f 64 65 20 50 31 20 50 32 20 50  rnalMode P1 P2 P
2a110 33 20 2a 20 50 35 0a 2a 2a 0a 2a 2a 20 43 68 61  3 * P5.**.** Cha
2a120 6e 67 65 20 74 68 65 20 6a 6f 75 72 6e 61 6c 20  nge the journal 
2a130 6d 6f 64 65 20 6f 66 20 64 61 74 61 62 61 73 65  mode of database
2a140 20 50 31 20 74 6f 20 50 33 2e 20 50 33 20 6d 75   P1 to P3. P3 mu
2a150 73 74 20 62 65 20 6f 6e 65 20 6f 66 20 74 68 65  st be one of the
2a160 0a 2a 2a 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41  .** PAGER_JOURNA
2a170 4c 4d 4f 44 45 5f 58 58 58 20 76 61 6c 75 65 73  LMODE_XXX values
2a180 2e 20 49 66 20 63 68 61 6e 67 69 6e 67 20 62 65  . If changing be
2a190 74 77 65 65 6e 20 74 68 65 20 76 61 72 69 6f 75  tween the variou
2a1a0 73 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 6d 6f  s rollback.** mo
2a1b0 64 65 73 20 28 64 65 6c 65 74 65 2c 20 74 72 75  des (delete, tru
2a1c0 6e 63 61 74 65 2c 20 70 65 72 73 69 73 74 2c 20  ncate, persist, 
2a1d0 6f 66 66 20 61 6e 64 20 6d 65 6d 6f 72 79 29 2c  off and memory),
2a1e0 20 74 68 69 73 20 69 73 20 61 20 73 69 6d 70 6c   this is a simpl
2a1f0 65 0a 2a 2a 20 6f 70 65 72 61 74 69 6f 6e 2e 20  e.** operation. 
2a200 4e 6f 20 49 4f 20 69 73 20 72 65 71 75 69 72 65  No IO is require
2a210 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 63 68 61 6e  d..**.** If chan
2a220 67 69 6e 67 20 69 6e 74 6f 20 6f 72 20 6f 75 74  ging into or out
2a230 20 6f 66 20 57 41 4c 20 6d 6f 64 65 20 74 68 65   of WAL mode the
2a240 20 70 72 6f 63 65 64 75 72 65 20 69 73 20 6d 6f   procedure is mo
2a250 72 65 20 63 6f 6d 70 6c 69 63 61 74 65 64 2e 0a  re complicated..
2a260 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 61 20 73 74  **.** Write a st
2a270 72 69 6e 67 20 63 6f 6e 74 61 69 6e 69 6e 67 20  ring containing 
2a280 74 68 65 20 66 69 6e 61 6c 20 6a 6f 75 72 6e 61  the final journa
2a290 6c 2d 6d 6f 64 65 20 74 6f 20 72 65 67 69 73 74  l-mode to regist
2a2a0 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f  er P2..*/.case O
2a2b0 50 5f 4a 6f 75 72 6e 61 6c 4d 6f 64 65 3a 20 7b  P_JournalMode: {
2a2c0 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72      /* out2-prer
2a2d0 65 6c 65 61 73 65 20 2a 2f 0a 20 20 42 74 72 65  elease */.  Btre
2a2e0 65 20 2a 70 42 74 3b 20 20 20 20 20 20 20 20 20  e *pBt;         
2a2f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42              /* B
2a300 74 72 65 65 20 74 6f 20 63 68 61 6e 67 65 20 6a  tree to change j
2a310 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 6f 66 20 2a  ournal mode of *
2a320 2f 0a 20 20 50 61 67 65 72 20 2a 70 50 61 67 65  /.  Pager *pPage
2a330 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r;              
2a340 20 20 20 20 2f 2a 20 50 61 67 65 72 20 61 73 73      /* Pager ass
2a350 6f 63 69 61 74 65 64 20 77 69 74 68 20 70 42 74  ociated with pBt
2a360 20 2a 2f 0a 20 20 69 6e 74 20 65 4e 65 77 3b 20   */.  int eNew; 
2a370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a380 20 20 20 20 20 20 2f 2a 20 4e 65 77 20 6a 6f 75        /* New jou
2a390 72 6e 61 6c 20 6d 6f 64 65 20 2a 2f 0a 20 20 69  rnal mode */.  i
2a3a0 6e 74 20 65 4f 6c 64 3b 20 20 20 20 20 20 20 20  nt eOld;        
2a3b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2a3c0 2a 20 54 68 65 20 6f 6c 64 20 6a 6f 75 72 6e 61  * The old journa
2a3d0 6c 20 6d 6f 64 65 20 2a 2f 0a 20 20 63 6f 6e 73  l mode */.  cons
2a3e0 74 20 63 68 61 72 20 2a 7a 46 69 6c 65 6e 61 6d  t char *zFilenam
2a3f0 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  e;          /* N
2a400 61 6d 65 20 6f 66 20 64 61 74 61 62 61 73 65 20  ame of database 
2a410 66 69 6c 65 20 66 6f 72 20 70 50 61 67 65 72 20  file for pPager 
2a420 2a 2f 0a 0a 20 20 65 4e 65 77 20 3d 20 70 4f 70  */..  eNew = pOp
2a430 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72 74 28 20  ->p3;.  assert( 
2a440 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52  eNew==PAGER_JOUR
2a450 4e 41 4c 4d 4f 44 45 5f 44 45 4c 45 54 45 20 0a  NALMODE_DELETE .
2a460 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d         || eNew==
2a470 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
2a480 45 5f 54 52 55 4e 43 41 54 45 20 0a 20 20 20 20  E_TRUNCATE .    
2a490 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45     || eNew==PAGE
2a4a0 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 50 45  R_JOURNALMODE_PE
2a4b0 52 53 49 53 54 20 0a 20 20 20 20 20 20 20 7c 7c  RSIST .       ||
2a4c0 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55   eNew==PAGER_JOU
2a4d0 52 4e 41 4c 4d 4f 44 45 5f 4f 46 46 0a 20 20 20  RNALMODE_OFF.   
2a4e0 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47      || eNew==PAG
2a4f0 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4d  ER_JOURNALMODE_M
2a500 45 4d 4f 52 59 0a 20 20 20 20 20 20 20 7c 7c 20  EMORY.       || 
2a510 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52  eNew==PAGER_JOUR
2a520 4e 41 4c 4d 4f 44 45 5f 57 41 4c 0a 20 20 20 20  NALMODE_WAL.    
2a530 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45     || eNew==PAGE
2a540 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 51 55  R_JOURNALMODE_QU
2a550 45 52 59 0a 20 20 29 3b 0a 20 20 61 73 73 65 72  ERY.  );.  asser
2a560 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
2a570 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62   pOp->p1<db->nDb
2a580 20 29 3b 0a 0a 20 20 2f 2a 20 54 68 69 73 20 6f   );..  /* This o
2a590 70 63 6f 64 65 20 69 73 20 75 73 65 64 20 69 6e  pcode is used in
2a5a0 20 74 77 6f 20 70 6c 61 63 65 73 3a 20 50 52 41   two places: PRA
2a5b0 47 4d 41 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65  GMA journal_mode
2a5c0 20 61 6e 64 20 41 54 54 41 43 48 2e 0a 20 20 2a   and ATTACH..  *
2a5d0 2a 20 49 6e 20 50 52 41 47 4d 41 20 6a 6f 75 72  * In PRAGMA jour
2a5e0 6e 61 6c 5f 6d 6f 64 65 2c 20 74 68 65 20 73 71  nal_mode, the sq
2a5f0 6c 69 74 65 33 56 64 62 65 55 73 65 73 42 74 72  lite3VdbeUsesBtr
2a600 65 65 28 29 20 72 6f 75 74 69 6e 65 20 69 73 20  ee() routine is 
2a610 63 61 6c 6c 65 64 0a 20 20 2a 2a 20 77 68 65 6e  called.  ** when
2a620 20 74 68 65 20 73 74 61 74 6d 65 6e 74 20 69 73   the statment is
2a630 20 70 72 65 70 61 72 65 64 20 61 6e 64 20 73 6f   prepared and so
2a640 20 70 2d 3e 61 4d 75 74 65 78 2e 6e 4d 75 74 65   p->aMutex.nMute
2a650 78 3e 30 2e 20 20 41 6c 6c 20 6d 75 74 65 78 65  x>0.  All mutexe
2a660 73 0a 20 20 2a 2a 20 61 72 65 20 61 6c 72 65 61  s.  ** are alrea
2a670 64 79 20 61 63 71 75 69 72 65 64 2e 20 20 42 75  dy acquired.  Bu
2a680 74 20 77 68 65 6e 20 75 73 65 64 20 69 6e 20 41  t when used in A
2a690 54 54 41 43 48 2c 20 73 71 6c 69 74 65 33 56 64  TTACH, sqlite3Vd
2a6a0 62 65 55 73 65 73 42 74 72 65 65 28 29 0a 20 20  beUsesBtree().  
2a6b0 2a 2a 20 69 73 20 6e 6f 74 20 63 61 6c 6c 65 64  ** is not called
2a6c0 20 77 68 65 6e 20 74 68 65 20 73 74 61 74 65 6d   when the statem
2a6d0 65 6e 74 20 69 73 20 70 72 65 70 61 72 65 64 20  ent is prepared 
2a6e0 62 65 63 61 75 73 65 20 69 74 20 72 65 71 75 69  because it requi
2a6f0 72 65 73 20 74 68 65 0a 20 20 2a 2a 20 69 44 62  res the.  ** iDb
2a700 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 64 61   index of the da
2a710 74 61 62 61 73 65 20 61 73 20 61 20 70 61 72 61  tabase as a para
2a720 6d 65 74 65 72 2c 20 61 6e 64 20 74 68 65 20 64  meter, and the d
2a730 61 74 61 62 61 73 65 20 68 61 73 20 6e 6f 74 0a  atabase has not.
2a740 20 20 2a 2a 20 79 65 74 20 62 65 65 6e 20 61 74    ** yet been at
2a750 74 61 63 68 65 64 20 73 6f 20 74 68 61 74 20 69  tached so that i
2a760 6e 64 65 78 20 69 73 20 75 6e 61 76 61 69 6c 61  ndex is unavaila
2a770 62 6c 65 2e 20 20 57 65 20 68 61 76 65 20 74 6f  ble.  We have to
2a780 20 77 61 69 74 0a 20 20 2a 2a 20 75 6e 74 69 6c   wait.  ** until
2a790 20 72 75 6e 74 69 6d 65 20 28 6e 6f 77 29 20 74   runtime (now) t
2a7a0 6f 20 67 65 74 20 74 68 65 20 6d 75 74 65 78 20  o get the mutex 
2a7b0 6f 6e 20 74 68 65 20 6e 65 77 6c 79 20 61 74 74  on the newly att
2a7c0 61 63 68 65 64 20 64 61 74 61 62 61 73 65 2e 0a  ached database..
2a7d0 20 20 2a 2a 20 4e 6f 20 6f 74 68 65 72 20 6d 75    ** No other mu
2a7e0 74 65 78 65 73 20 61 72 65 20 72 65 71 75 69 72  texes are requir
2a7f0 65 64 20 62 79 20 74 68 65 20 41 54 54 41 43 48  ed by the ATTACH
2a800 20 63 6f 6d 6d 61 6e 64 20 73 6f 20 74 68 69 73   command so this
2a810 20 69 73 20 73 61 66 65 0a 20 20 2a 2a 20 74 6f   is safe.  ** to
2a820 20 64 6f 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65   do..  */.  asse
2a830 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73  rt( (p->btreeMas
2a840 6b 20 26 20 28 31 3c 3c 70 4f 70 2d 3e 70 31 29  k & (1<<pOp->p1)
2a850 29 21 3d 30 20 7c 7c 20 70 2d 3e 61 4d 75 74 65  )!=0 || p->aMute
2a860 78 2e 6e 4d 75 74 65 78 3d 3d 30 20 29 3b 0a 20  x.nMutex==0 );. 
2a870 20 69 66 28 20 70 2d 3e 61 4d 75 74 65 78 2e 6e   if( p->aMutex.n
2a880 4d 75 74 65 78 3d 3d 30 20 29 7b 0a 20 20 20 20  Mutex==0 ){.    
2a890 2f 2a 20 54 68 69 73 20 6f 63 63 75 72 73 20 72  /* This occurs r
2a8a0 69 67 68 74 20 61 66 74 65 72 20 41 54 54 41 43  ight after ATTAC
2a8b0 48 2e 20 20 47 65 74 20 61 20 6d 75 74 65 78 20  H.  Get a mutex 
2a8c0 6f 6e 20 74 68 65 20 6e 65 77 6c 79 20 41 54 54  on the newly ATT
2a8d0 41 43 48 65 64 0a 20 20 20 20 2a 2a 20 64 61 74  ACHed.    ** dat
2a8e0 61 62 61 73 65 2e 20 2a 2f 0a 20 20 20 20 73 71  abase. */.    sq
2a8f0 6c 69 74 65 33 56 64 62 65 55 73 65 73 42 74 72  lite3VdbeUsesBtr
2a900 65 65 28 70 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a  ee(p, pOp->p1);.
2a910 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
2a920 75 74 65 78 41 72 72 61 79 45 6e 74 65 72 28 70  utexArrayEnter(p
2a930 29 3b 0a 20 20 7d 0a 0a 20 20 70 42 74 20 3d 20  );.  }..  pBt = 
2a940 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d  db->aDb[pOp->p1]
2a950 2e 70 42 74 3b 0a 20 20 70 50 61 67 65 72 20 3d  .pBt;.  pPager =
2a960 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 61 67   sqlite3BtreePag
2a970 65 72 28 70 42 74 29 3b 0a 20 20 65 4f 6c 64 20  er(pBt);.  eOld 
2a980 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72 47 65  = sqlite3PagerGe
2a990 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61  tJournalMode(pPa
2a9a0 67 65 72 29 3b 0a 20 20 69 66 28 20 65 4e 65 77  ger);.  if( eNew
2a9b0 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
2a9c0 4f 44 45 5f 51 55 45 52 59 20 29 20 65 4e 65 77  ODE_QUERY ) eNew
2a9d0 20 3d 20 65 4f 6c 64 3b 0a 20 20 69 66 28 20 21   = eOld;.  if( !
2a9e0 73 71 6c 69 74 65 33 50 61 67 65 72 4f 6b 54 6f  sqlite3PagerOkTo
2a9f0 43 68 61 6e 67 65 4a 6f 75 72 6e 61 6c 4d 6f 64  ChangeJournalMod
2aa00 65 28 70 50 61 67 65 72 29 20 29 20 65 4e 65 77  e(pPager) ) eNew
2aa10 20 3d 20 65 4f 6c 64 3b 0a 0a 23 69 66 6e 64 65   = eOld;..#ifnde
2aa20 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41  f SQLITE_OMIT_WA
2aa30 4c 0a 20 20 7a 46 69 6c 65 6e 61 6d 65 20 3d 20  L.  zFilename = 
2aa40 73 71 6c 69 74 65 33 50 61 67 65 72 46 69 6c 65  sqlite3PagerFile
2aa50 6e 61 6d 65 28 70 50 61 67 65 72 29 3b 0a 0a 20  name(pPager);.. 
2aa60 20 2f 2a 20 44 6f 20 6e 6f 74 20 61 6c 6c 6f 77   /* Do not allow
2aa70 20 61 20 74 72 61 6e 73 69 74 69 6f 6e 20 74 6f   a transition to
2aa80 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 3d 57 41   journal_mode=WA
2aa90 4c 20 66 6f 72 20 61 20 64 61 74 61 62 61 73 65  L for a database
2aaa0 0a 20 20 2a 2a 20 69 6e 20 74 65 6d 70 6f 72 61  .  ** in tempora
2aab0 72 79 20 73 74 6f 72 61 67 65 20 6f 72 20 69 66  ry storage or if
2aac0 20 74 68 65 20 56 46 53 20 64 6f 65 73 20 6e 6f   the VFS does no
2aad0 74 20 73 75 70 70 6f 72 74 20 73 68 61 72 65 64  t support shared
2aae0 20 6d 65 6d 6f 72 79 20 0a 20 20 2a 2f 0a 20 20   memory .  */.  
2aaf0 69 66 28 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f  if( eNew==PAGER_
2ab00 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 0a  JOURNALMODE_WAL.
2ab10 20 20 20 26 26 20 28 7a 46 69 6c 65 6e 61 6d 65     && (zFilename
2ab20 5b 30 5d 3d 3d 30 20 20 20 20 20 20 20 20 20 20  [0]==0          
2ab30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2ab40 2a 20 54 65 6d 70 20 66 69 6c 65 20 2a 2f 0a 20  * Temp file */. 
2ab50 20 20 20 20 20 20 7c 7c 20 21 73 71 6c 69 74 65        || !sqlite
2ab60 33 50 61 67 65 72 57 61 6c 53 75 70 70 6f 72 74  3PagerWalSupport
2ab70 65 64 28 70 50 61 67 65 72 29 29 20 20 20 2f 2a  ed(pPager))   /*
2ab80 20 4e 6f 20 73 68 61 72 65 64 2d 6d 65 6d 6f 72   No shared-memor
2ab90 79 20 73 75 70 70 6f 72 74 20 2a 2f 0a 20 20 29  y support */.  )
2aba0 7b 0a 20 20 20 20 65 4e 65 77 20 3d 20 65 4f 6c  {.    eNew = eOl
2abb0 64 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 28 65  d;.  }..  if( (e
2abc0 4e 65 77 21 3d 65 4f 6c 64 29 0a 20 20 20 26 26  New!=eOld).   &&
2abd0 20 28 65 4f 6c 64 3d 3d 50 41 47 45 52 5f 4a 4f   (eOld==PAGER_JO
2abe0 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 7c 7c  URNALMODE_WAL ||
2abf0 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55   eNew==PAGER_JOU
2ac00 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 29 0a 20 20  RNALMODE_WAL).  
2ac10 29 7b 0a 20 20 20 20 69 66 28 20 21 64 62 2d 3e  ){.    if( !db->
2ac20 61 75 74 6f 43 6f 6d 6d 69 74 20 7c 7c 20 64 62  autoCommit || db
2ac30 2d 3e 61 63 74 69 76 65 56 64 62 65 43 6e 74 3e  ->activeVdbeCnt>
2ac40 31 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20  1 ){.      rc = 
2ac50 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20  SQLITE_ERROR;.  
2ac60 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74      sqlite3SetSt
2ac70 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67  ring(&p->zErrMsg
2ac80 2c 20 64 62 2c 20 0a 20 20 20 20 20 20 20 20 20  , db, .         
2ac90 20 22 63 61 6e 6e 6f 74 20 63 68 61 6e 67 65 20   "cannot change 
2aca0 25 73 20 77 61 6c 20 6d 6f 64 65 20 66 72 6f 6d  %s wal mode from
2acb0 20 77 69 74 68 69 6e 20 61 20 74 72 61 6e 73 61   within a transa
2acc0 63 74 69 6f 6e 22 2c 0a 20 20 20 20 20 20 20 20  ction",.        
2acd0 20 20 28 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a    (eNew==PAGER_J
2ace0 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 3f  OURNALMODE_WAL ?
2acf0 20 22 69 6e 74 6f 22 20 3a 20 22 6f 75 74 20 6f   "into" : "out o
2ad00 66 22 29 0a 20 20 20 20 20 20 29 3b 0a 20 20 20  f").      );.   
2ad10 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 65     break;.    }e
2ad20 6c 73 65 7b 0a 20 0a 20 20 20 20 20 20 69 66 28  lse{. .      if(
2ad30 20 65 4f 6c 64 3d 3d 50 41 47 45 52 5f 4a 4f 55   eOld==PAGER_JOU
2ad40 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 29 7b 0a  RNALMODE_WAL ){.
2ad50 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20 6c 65          /* If le
2ad60 61 76 69 6e 67 20 57 41 4c 20 6d 6f 64 65 2c 20  aving WAL mode, 
2ad70 63 6c 6f 73 65 20 74 68 65 20 6c 6f 67 20 66 69  close the log fi
2ad80 6c 65 2e 20 49 66 20 73 75 63 63 65 73 73 66 75  le. If successfu
2ad90 6c 2c 20 74 68 65 20 63 61 6c 6c 0a 20 20 20 20  l, the call.    
2ada0 20 20 20 20 2a 2a 20 74 6f 20 50 61 67 65 72 43      ** to PagerC
2adb0 6c 6f 73 65 57 61 6c 28 29 20 63 68 65 63 6b 70  loseWal() checkp
2adc0 6f 69 6e 74 73 20 61 6e 64 20 64 65 6c 65 74 65  oints and delete
2add0 73 20 74 68 65 20 77 72 69 74 65 2d 61 68 65 61  s the write-ahea
2ade0 64 2d 6c 6f 67 20 0a 20 20 20 20 20 20 20 20 2a  d-log .        *
2adf0 2a 20 66 69 6c 65 2e 20 41 6e 20 45 58 43 4c 55  * file. An EXCLU
2ae00 53 49 56 45 20 6c 6f 63 6b 20 6d 61 79 20 73 74  SIVE lock may st
2ae10 69 6c 6c 20 62 65 20 68 65 6c 64 20 6f 6e 20 74  ill be held on t
2ae20 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
2ae30 20 0a 20 20 20 20 20 20 20 20 2a 2a 20 61 66 74   .        ** aft
2ae40 65 72 20 61 20 73 75 63 63 65 73 73 66 75 6c 20  er a successful 
2ae50 72 65 74 75 72 6e 2e 20 0a 20 20 20 20 20 20 20  return. .       
2ae60 20 2a 2f 0a 20 20 20 20 20 20 20 20 72 63 20 3d   */.        rc =
2ae70 20 73 71 6c 69 74 65 33 50 61 67 65 72 43 6c 6f   sqlite3PagerClo
2ae80 73 65 57 61 6c 28 70 50 61 67 65 72 29 3b 0a 20  seWal(pPager);. 
2ae90 20 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53         if( rc==S
2aea0 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
2aeb0 20 20 20 20 20 20 73 71 6c 69 74 65 33 50 61 67        sqlite3Pag
2aec0 65 72 53 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65  erSetJournalMode
2aed0 28 70 50 61 67 65 72 2c 20 65 4e 65 77 29 3b 0a  (pPager, eNew);.
2aee0 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
2aef0 7d 65 6c 73 65 20 69 66 28 20 65 4f 6c 64 3d 3d  }else if( eOld==
2af00 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
2af10 45 5f 4d 45 4d 4f 52 59 20 29 7b 0a 20 20 20 20  E_MEMORY ){.    
2af20 20 20 20 20 2f 2a 20 43 61 6e 6e 6f 74 20 74 72      /* Cannot tr
2af30 61 6e 73 69 74 69 6f 6e 20 64 69 72 65 63 74 6c  ansition directl
2af40 79 20 66 72 6f 6d 20 4d 45 4d 4f 52 59 20 74 6f  y from MEMORY to
2af50 20 57 41 4c 2e 20 20 55 73 65 20 6d 6f 64 65 20   WAL.  Use mode 
2af60 4f 46 46 0a 20 20 20 20 20 20 20 20 2a 2a 20 61  OFF.        ** a
2af70 73 20 61 6e 20 69 6e 74 65 72 6d 65 64 69 61 74  s an intermediat
2af80 65 20 2a 2f 0a 20 20 20 20 20 20 20 20 73 71 6c  e */.        sql
2af90 69 74 65 33 50 61 67 65 72 53 65 74 4a 6f 75 72  ite3PagerSetJour
2afa0 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65 72 2c 20  nalMode(pPager, 
2afb0 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
2afc0 45 5f 4f 46 46 29 3b 0a 20 20 20 20 20 20 7d 0a  E_OFF);.      }.
2afd0 20 20 0a 20 20 20 20 20 20 2f 2a 20 4f 70 65 6e    .      /* Open
2afe0 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f   a transaction o
2aff0 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  n the database f
2b000 69 6c 65 2e 20 52 65 67 61 72 64 6c 65 73 73 20  ile. Regardless 
2b010 6f 66 20 74 68 65 20 6a 6f 75 72 6e 61 6c 0a 20  of the journal. 
2b020 20 20 20 20 20 2a 2a 20 6d 6f 64 65 2c 20 74 68       ** mode, th
2b030 69 73 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61  is transaction a
2b040 6c 77 61 79 73 20 75 73 65 73 20 61 20 72 6f 6c  lways uses a rol
2b050 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 2e 0a 20  lback journal.. 
2b060 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 61 73       */.      as
2b070 73 65 72 74 28 20 73 71 6c 69 74 65 33 42 74 72  sert( sqlite3Btr
2b080 65 65 49 73 49 6e 54 72 61 6e 73 28 70 42 74 29  eeIsInTrans(pBt)
2b090 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 69 66 28  ==0 );.      if(
2b0a0 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
2b0b0 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73  {.        rc = s
2b0c0 71 6c 69 74 65 33 42 74 72 65 65 53 65 74 56 65  qlite3BtreeSetVe
2b0d0 72 73 69 6f 6e 28 70 42 74 2c 20 28 65 4e 65 77  rsion(pBt, (eNew
2b0e0 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
2b0f0 4f 44 45 5f 57 41 4c 20 3f 20 32 20 3a 20 31 29  ODE_WAL ? 2 : 1)
2b100 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
2b110 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 69  .  }.#endif /* 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 20 2a 2f 0a 0a 20 20 69 66 28 20  T_WAL */..  if( 
2b140 72 63 20 29 7b 0a 20 20 20 20 65 4e 65 77 20 3d  rc ){.    eNew =
2b150 20 65 4f 6c 64 3b 0a 20 20 7d 0a 20 20 65 4e 65   eOld;.  }.  eNe
2b160 77 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72  w = sqlite3Pager
2b170 53 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70  SetJournalMode(p
2b180 50 61 67 65 72 2c 20 65 4e 65 77 29 3b 0a 0a 20  Pager, eNew);.. 
2b190 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f   pOut = &aMem[pO
2b1a0 70 2d 3e 70 32 5d 3b 0a 20 20 70 4f 75 74 2d 3e  p->p2];.  pOut->
2b1b0 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 53 74 72 7c  flags = MEM_Str|
2b1c0 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 54  MEM_Static|MEM_T
2b1d0 65 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e 7a 20 3d  erm;.  pOut->z =
2b1e0 20 28 63 68 61 72 20 2a 29 73 71 6c 69 74 65 33   (char *)sqlite3
2b1f0 4a 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28  JournalModename(
2b200 65 4e 65 77 29 3b 0a 20 20 70 4f 75 74 2d 3e 6e  eNew);.  pOut->n
2b210 20 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e   = sqlite3Strlen
2b220 33 30 28 70 4f 75 74 2d 3e 7a 29 3b 0a 20 20 70  30(pOut->z);.  p
2b230 4f 75 74 2d 3e 65 6e 63 20 3d 20 53 51 4c 49 54  Out->enc = SQLIT
2b240 45 5f 55 54 46 38 3b 0a 20 20 73 71 6c 69 74 65  E_UTF8;.  sqlite
2b250 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64  3VdbeChangeEncod
2b260 69 6e 67 28 70 4f 75 74 2c 20 65 6e 63 6f 64 69  ing(pOut, encodi
2b270 6e 67 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 3b  ng);.  break;.};
2b280 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
2b290 45 5f 4f 4d 49 54 5f 50 52 41 47 4d 41 20 2a 2f  E_OMIT_PRAGMA */
2b2a0 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  ..#if !defined(S
2b2b0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 41 43 55 55  QLITE_OMIT_VACUU
2b2c0 4d 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53  M) && !defined(S
2b2d0 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 54 54 41 43  QLITE_OMIT_ATTAC
2b2e0 48 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 61  H)./* Opcode: Va
2b2f0 63 75 75 6d 20 2a 20 2a 20 2a 20 2a 20 2a 0a 2a  cuum * * * * *.*
2b300 2a 0a 2a 2a 20 56 61 63 75 75 6d 20 74 68 65 20  *.** Vacuum the 
2b310 65 6e 74 69 72 65 20 64 61 74 61 62 61 73 65 2e  entire database.
2b320 20 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77 69    This opcode wi
2b330 6c 6c 20 63 61 75 73 65 20 6f 74 68 65 72 20 76  ll cause other v
2b340 69 72 74 75 61 6c 0a 2a 2a 20 6d 61 63 68 69 6e  irtual.** machin
2b350 65 73 20 74 6f 20 62 65 20 63 72 65 61 74 65 64  es to be created
2b360 20 61 6e 64 20 72 75 6e 2e 20 20 49 74 20 6d 61   and run.  It ma
2b370 79 20 6e 6f 74 20 62 65 20 63 61 6c 6c 65 64 20  y not be called 
2b380 66 72 6f 6d 20 77 69 74 68 69 6e 0a 2a 2a 20 61  from within.** a
2b390 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 2a 2f   transaction..*/
2b3a0 0a 63 61 73 65 20 4f 50 5f 56 61 63 75 75 6d 3a  .case OP_Vacuum:
2b3b0 20 7b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65   {.  rc = sqlite
2b3c0 33 52 75 6e 56 61 63 75 75 6d 28 26 70 2d 3e 7a  3RunVacuum(&p->z
2b3d0 45 72 72 4d 73 67 2c 20 64 62 29 3b 0a 20 20 62  ErrMsg, db);.  b
2b3e0 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a  reak;.}.#endif..
2b3f0 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
2b400 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43  ITE_OMIT_AUTOVAC
2b410 55 55 4d 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  UUM)./* Opcode: 
2b420 49 6e 63 72 56 61 63 75 75 6d 20 50 31 20 50 32  IncrVacuum P1 P2
2b430 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50 65 72   * * *.**.** Per
2b440 66 6f 72 6d 20 61 20 73 69 6e 67 6c 65 20 73 74  form a single st
2b450 65 70 20 6f 66 20 74 68 65 20 69 6e 63 72 65 6d  ep of the increm
2b460 65 6e 74 61 6c 20 76 61 63 75 75 6d 20 70 72 6f  ental vacuum pro
2b470 63 65 64 75 72 65 20 6f 6e 0a 2a 2a 20 74 68 65  cedure on.** the
2b480 20 50 31 20 64 61 74 61 62 61 73 65 2e 20 49 66   P1 database. If
2b490 20 74 68 65 20 76 61 63 75 75 6d 20 68 61 73 20   the vacuum has 
2b4a0 66 69 6e 69 73 68 65 64 2c 20 6a 75 6d 70 20 74  finished, jump t
2b4b0 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a  o instruction.**
2b4c0 20 50 32 2e 20 4f 74 68 65 72 77 69 73 65 2c 20   P2. Otherwise, 
2b4d0 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  fall through to 
2b4e0 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63  the next instruc
2b4f0 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  tion..*/.case OP
2b500 5f 49 6e 63 72 56 61 63 75 75 6d 3a 20 7b 20 20  _IncrVacuum: {  
2b510 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
2b520 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b 0a 0a  .  Btree *pBt;..
2b530 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
2b540 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
2b550 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73  db->nDb );.  ass
2b560 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61  ert( (p->btreeMa
2b570 73 6b 20 26 20 28 31 3c 3c 70 4f 70 2d 3e 70 31  sk & (1<<pOp->p1
2b580 29 29 21 3d 30 20 29 3b 0a 20 20 70 42 74 20 3d  ))!=0 );.  pBt =
2b590 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31   db->aDb[pOp->p1
2b5a0 5d 2e 70 42 74 3b 0a 20 20 72 63 20 3d 20 73 71  ].pBt;.  rc = sq
2b5b0 6c 69 74 65 33 42 74 72 65 65 49 6e 63 72 56 61  lite3BtreeIncrVa
2b5c0 63 75 75 6d 28 70 42 74 29 3b 0a 20 20 69 66 28  cuum(pBt);.  if(
2b5d0 20 72 63 3d 3d 53 51 4c 49 54 45 5f 44 4f 4e 45   rc==SQLITE_DONE
2b5e0 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70   ){.    pc = pOp
2b5f0 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 72 63  ->p2 - 1;.    rc
2b600 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20   = SQLITE_OK;.  
2b610 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  }.  break;.}.#en
2b620 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  dif../* Opcode: 
2b630 45 78 70 69 72 65 20 50 31 20 2a 20 2a 20 2a 20  Expire P1 * * * 
2b640 2a 0a 2a 2a 0a 2a 2a 20 43 61 75 73 65 20 70 72  *.**.** Cause pr
2b650 65 63 6f 6d 70 69 6c 65 64 20 73 74 61 74 65 6d  ecompiled statem
2b660 65 6e 74 73 20 74 6f 20 62 65 63 6f 6d 65 20 65  ents to become e
2b670 78 70 69 72 65 64 2e 20 41 6e 20 65 78 70 69 72  xpired. An expir
2b680 65 64 20 73 74 61 74 65 6d 65 6e 74 0a 2a 2a 20  ed statement.** 
2b690 66 61 69 6c 73 20 77 69 74 68 20 61 6e 20 65 72  fails with an er
2b6a0 72 6f 72 20 63 6f 64 65 20 6f 66 20 53 51 4c 49  ror code of SQLI
2b6b0 54 45 5f 53 43 48 45 4d 41 20 69 66 20 69 74 20  TE_SCHEMA if it 
2b6c0 69 73 20 65 76 65 72 20 65 78 65 63 75 74 65 64  is ever executed
2b6d0 20 0a 2a 2a 20 28 76 69 61 20 73 71 6c 69 74 65   .** (via sqlite
2b6e0 33 5f 73 74 65 70 28 29 29 2e 0a 2a 2a 20 0a 2a  3_step())..** .*
2b6f0 2a 20 49 66 20 50 31 20 69 73 20 30 2c 20 74 68  * If P1 is 0, th
2b700 65 6e 20 61 6c 6c 20 53 51 4c 20 73 74 61 74 65  en all SQL state
2b710 6d 65 6e 74 73 20 62 65 63 6f 6d 65 20 65 78 70  ments become exp
2b720 69 72 65 64 2e 20 49 66 20 50 31 20 69 73 20 6e  ired. If P1 is n
2b730 6f 6e 2d 7a 65 72 6f 2c 0a 2a 2a 20 74 68 65 6e  on-zero,.** then
2b740 20 6f 6e 6c 79 20 74 68 65 20 63 75 72 72 65 6e   only the curren
2b750 74 6c 79 20 65 78 65 63 75 74 69 6e 67 20 73 74  tly executing st
2b760 61 74 65 6d 65 6e 74 20 69 73 20 61 66 66 65 63  atement is affec
2b770 74 65 64 2e 20 0a 2a 2f 0a 63 61 73 65 20 4f 50  ted. .*/.case OP
2b780 5f 45 78 70 69 72 65 3a 20 7b 0a 20 20 69 66 28  _Expire: {.  if(
2b790 20 21 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20   !pOp->p1 ){.   
2b7a0 20 73 71 6c 69 74 65 33 45 78 70 69 72 65 50 72   sqlite3ExpirePr
2b7b0 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73  eparedStatements
2b7c0 28 64 62 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  (db);.  }else{. 
2b7d0 20 20 20 70 2d 3e 65 78 70 69 72 65 64 20 3d 20     p->expired = 
2b7e0 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  1;.  }.  break;.
2b7f0 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  }..#ifndef SQLIT
2b800 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41  E_OMIT_SHARED_CA
2b810 43 48 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54  CHE./* Opcode: T
2b820 61 62 6c 65 4c 6f 63 6b 20 50 31 20 50 32 20 50  ableLock P1 P2 P
2b830 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 4f 62 74  3 P4 *.**.** Obt
2b840 61 69 6e 20 61 20 6c 6f 63 6b 20 6f 6e 20 61 20  ain a lock on a 
2b850 70 61 72 74 69 63 75 6c 61 72 20 74 61 62 6c 65  particular table
2b860 2e 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69  . This instructi
2b870 6f 6e 20 69 73 20 6f 6e 6c 79 20 75 73 65 64 20  on is only used 
2b880 77 68 65 6e 0a 2a 2a 20 74 68 65 20 73 68 61 72  when.** the shar
2b890 65 64 2d 63 61 63 68 65 20 66 65 61 74 75 72 65  ed-cache feature
2b8a0 20 69 73 20 65 6e 61 62 6c 65 64 2e 20 0a 2a 2a   is enabled. .**
2b8b0 0a 2a 2a 20 50 31 20 69 73 20 74 68 65 20 69 6e  .** P1 is the in
2b8c0 64 65 78 20 6f 66 20 74 68 65 20 64 61 74 61 62  dex of the datab
2b8d0 61 73 65 20 69 6e 20 73 71 6c 69 74 65 33 2e 61  ase in sqlite3.a
2b8e0 44 62 5b 5d 20 6f 66 20 74 68 65 20 64 61 74 61  Db[] of the data
2b8f0 62 61 73 65 0a 2a 2a 20 6f 6e 20 77 68 69 63 68  base.** on which
2b900 20 74 68 65 20 6c 6f 63 6b 20 69 73 20 61 63 71   the lock is acq
2b910 75 69 72 65 64 2e 20 20 41 20 72 65 61 64 6c 6f  uired.  A readlo
2b920 63 6b 20 69 73 20 6f 62 74 61 69 6e 65 64 20 69  ck is obtained i
2b930 66 20 50 33 3d 3d 30 20 6f 72 0a 2a 2a 20 61 20  f P3==0 or.** a 
2b940 77 72 69 74 65 20 6c 6f 63 6b 20 69 66 20 50 33  write lock if P3
2b950 3d 3d 31 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 63 6f  ==1..**.** P2 co
2b960 6e 74 61 69 6e 73 20 74 68 65 20 72 6f 6f 74 2d  ntains the root-
2b970 70 61 67 65 20 6f 66 20 74 68 65 20 74 61 62 6c  page of the tabl
2b980 65 20 74 6f 20 6c 6f 63 6b 2e 0a 2a 2a 0a 2a 2a  e to lock..**.**
2b990 20 50 34 20 63 6f 6e 74 61 69 6e 73 20 61 20 70   P4 contains a p
2b9a0 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 6e 61  ointer to the na
2b9b0 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  me of the table 
2b9c0 62 65 69 6e 67 20 6c 6f 63 6b 65 64 2e 20 54 68  being locked. Th
2b9d0 69 73 20 69 73 20 6f 6e 6c 79 0a 2a 2a 20 75 73  is is only.** us
2b9e0 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65 20 61  ed to generate a
2b9f0 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20  n error message 
2ba00 69 66 20 74 68 65 20 6c 6f 63 6b 20 63 61 6e 6e  if the lock cann
2ba10 6f 74 20 62 65 20 6f 62 74 61 69 6e 65 64 2e 0a  ot be obtained..
2ba20 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 61 62 6c 65  */.case OP_Table
2ba30 4c 6f 63 6b 3a 20 7b 0a 20 20 75 38 20 69 73 57  Lock: {.  u8 isW
2ba40 72 69 74 65 4c 6f 63 6b 20 3d 20 28 75 38 29 70  riteLock = (u8)p
2ba50 4f 70 2d 3e 70 33 3b 0a 20 20 69 66 28 20 69 73  Op->p3;.  if( is
2ba60 57 72 69 74 65 4c 6f 63 6b 20 7c 7c 20 30 3d 3d  WriteLock || 0==
2ba70 28 64 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54  (db->flags&SQLIT
2ba80 45 5f 52 65 61 64 55 6e 63 6f 6d 6d 69 74 74 65  E_ReadUncommitte
2ba90 64 29 20 29 7b 0a 20 20 20 20 69 6e 74 20 70 31  d) ){.    int p1
2baa0 20 3d 20 70 4f 70 2d 3e 70 31 3b 20 0a 20 20 20   = pOp->p1; .   
2bab0 20 61 73 73 65 72 74 28 20 70 31 3e 3d 30 20 26   assert( p1>=0 &
2bac0 26 20 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a  & p1<db->nDb );.
2bad0 20 20 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e      assert( (p->
2bae0 62 74 72 65 65 4d 61 73 6b 20 26 20 28 31 3c 3c  btreeMask & (1<<
2baf0 70 31 29 29 21 3d 30 20 29 3b 0a 20 20 20 20 61  p1))!=0 );.    a
2bb00 73 73 65 72 74 28 20 69 73 57 72 69 74 65 4c 6f  ssert( isWriteLo
2bb10 63 6b 3d 3d 30 20 7c 7c 20 69 73 57 72 69 74 65  ck==0 || isWrite
2bb20 4c 6f 63 6b 3d 3d 31 20 29 3b 0a 20 20 20 20 72  Lock==1 );.    r
2bb30 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
2bb40 4c 6f 63 6b 54 61 62 6c 65 28 64 62 2d 3e 61 44  LockTable(db->aD
2bb50 62 5b 70 31 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e  b[p1].pBt, pOp->
2bb60 70 32 2c 20 69 73 57 72 69 74 65 4c 6f 63 6b 29  p2, isWriteLock)
2bb70 3b 0a 20 20 20 20 69 66 28 20 28 72 63 26 30 78  ;.    if( (rc&0x
2bb80 46 46 29 3d 3d 53 51 4c 49 54 45 5f 4c 4f 43 4b  FF)==SQLITE_LOCK
2bb90 45 44 20 29 7b 0a 20 20 20 20 20 20 63 6f 6e 73  ED ){.      cons
2bba0 74 20 63 68 61 72 20 2a 7a 20 3d 20 70 4f 70 2d  t char *z = pOp-
2bbb0 3e 70 34 2e 7a 3b 0a 20 20 20 20 20 20 73 71 6c  >p4.z;.      sql
2bbc0 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70  ite3SetString(&p
2bbd0 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22  ->zErrMsg, db, "
2bbe0 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 69  database table i
2bbf0 73 20 6c 6f 63 6b 65 64 3a 20 25 73 22 2c 20 7a  s locked: %s", z
2bc00 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62  );.    }.  }.  b
2bc10 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  reak;.}.#endif /
2bc20 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48  * SQLITE_OMIT_SH
2bc30 41 52 45 44 5f 43 41 43 48 45 20 2a 2f 0a 0a 23  ARED_CACHE */..#
2bc40 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2bc50 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
2bc60 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 42 65 67 69  /* Opcode: VBegi
2bc70 6e 20 2a 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a  n * * * P4 *.**.
2bc80 2a 2a 20 50 34 20 6d 61 79 20 62 65 20 61 20 70  ** P4 may be a p
2bc90 6f 69 6e 74 65 72 20 74 6f 20 61 6e 20 73 71 6c  ointer to an sql
2bca0 69 74 65 33 5f 76 74 61 62 20 73 74 72 75 63 74  ite3_vtab struct
2bcb0 75 72 65 2e 20 49 66 20 73 6f 2c 20 63 61 6c 6c  ure. If so, call
2bcc0 20 74 68 65 20 0a 2a 2a 20 78 42 65 67 69 6e 20   the .** xBegin 
2bcd0 6d 65 74 68 6f 64 20 66 6f 72 20 74 68 61 74 20  method for that 
2bce0 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 6c 73  table..**.** Als
2bcf0 6f 2c 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  o, whether or no
2bd00 74 20 50 34 20 69 73 20 73 65 74 2c 20 63 68 65  t P4 is set, che
2bd10 63 6b 20 74 68 61 74 20 74 68 69 73 20 69 73 20  ck that this is 
2bd20 6e 6f 74 20 62 65 69 6e 67 20 63 61 6c 6c 65 64  not being called
2bd30 20 66 72 6f 6d 0a 2a 2a 20 77 69 74 68 69 6e 20   from.** within 
2bd40 61 20 63 61 6c 6c 62 61 63 6b 20 74 6f 20 61 20  a callback to a 
2bd50 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 78 53  virtual table xS
2bd60 79 6e 63 28 29 20 6d 65 74 68 6f 64 2e 20 49 66  ync() method. If
2bd70 20 69 74 20 69 73 2c 20 74 68 65 20 65 72 72 6f   it is, the erro
2bd80 72 0a 2a 2a 20 63 6f 64 65 20 77 69 6c 6c 20 62  r.** code will b
2bd90 65 20 73 65 74 20 74 6f 20 53 51 4c 49 54 45 5f  e set to SQLITE_
2bda0 4c 4f 43 4b 45 44 2e 0a 2a 2f 0a 63 61 73 65 20  LOCKED..*/.case 
2bdb0 4f 50 5f 56 42 65 67 69 6e 3a 20 7b 0a 20 20 56  OP_VBegin: {.  V
2bdc0 54 61 62 6c 65 20 2a 70 56 54 61 62 3b 0a 20 20  Table *pVTab;.  
2bdd0 70 56 54 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e  pVTab = pOp->p4.
2bde0 70 56 74 61 62 3b 0a 20 20 72 63 20 3d 20 73 71  pVtab;.  rc = sq
2bdf0 6c 69 74 65 33 56 74 61 62 42 65 67 69 6e 28 64  lite3VtabBegin(d
2be00 62 2c 20 70 56 54 61 62 29 3b 0a 20 20 69 66 28  b, pVTab);.  if(
2be10 20 70 56 54 61 62 20 29 20 69 6d 70 6f 72 74 56   pVTab ) importV
2be20 74 61 62 45 72 72 4d 73 67 28 70 2c 20 70 56 54  tabErrMsg(p, pVT
2be30 61 62 2d 3e 70 56 74 61 62 29 3b 0a 20 20 62 72  ab->pVtab);.  br
2be40 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
2be50 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
2be60 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69  TUALTABLE */..#i
2be70 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2be80 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f  T_VIRTUALTABLE./
2be90 2a 20 4f 70 63 6f 64 65 3a 20 56 43 72 65 61 74  * Opcode: VCreat
2bea0 65 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a  e P1 * * P4 *.**
2beb0 0a 2a 2a 20 50 34 20 69 73 20 74 68 65 20 6e 61  .** P4 is the na
2bec0 6d 65 20 6f 66 20 61 20 76 69 72 74 75 61 6c 20  me of a virtual 
2bed0 74 61 62 6c 65 20 69 6e 20 64 61 74 61 62 61 73  table in databas
2bee0 65 20 50 31 2e 20 43 61 6c 6c 20 74 68 65 20 78  e P1. Call the x
2bef0 43 72 65 61 74 65 20 6d 65 74 68 6f 64 0a 2a 2a  Create method.**
2bf00 20 66 6f 72 20 74 68 61 74 20 74 61 62 6c 65 2e   for that table.
2bf10 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 43 72 65  .*/.case OP_VCre
2bf20 61 74 65 3a 20 7b 0a 20 20 72 63 20 3d 20 73 71  ate: {.  rc = sq
2bf30 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 43 72 65  lite3VtabCallCre
2bf40 61 74 65 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c  ate(db, pOp->p1,
2bf50 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 26 70 2d 3e   pOp->p4.z, &p->
2bf60 7a 45 72 72 4d 73 67 29 3b 0a 20 20 62 72 65 61  zErrMsg);.  brea
2bf70 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k;.}.#endif /* S
2bf80 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
2bf90 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e  ALTABLE */..#ifn
2bfa0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2bfb0 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20  VIRTUALTABLE./* 
2bfc0 4f 70 63 6f 64 65 3a 20 56 44 65 73 74 72 6f 79  Opcode: VDestroy
2bfd0 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a   P1 * * P4 *.**.
2bfe0 2a 2a 20 50 34 20 69 73 20 74 68 65 20 6e 61 6d  ** P4 is the nam
2bff0 65 20 6f 66 20 61 20 76 69 72 74 75 61 6c 20 74  e of a virtual t
2c000 61 62 6c 65 20 69 6e 20 64 61 74 61 62 61 73 65  able in database
2c010 20 50 31 2e 20 20 43 61 6c 6c 20 74 68 65 20 78   P1.  Call the x
2c020 44 65 73 74 72 6f 79 20 6d 65 74 68 6f 64 0a 2a  Destroy method.*
2c030 2a 20 6f 66 20 74 68 61 74 20 74 61 62 6c 65 2e  * of that table.
2c040 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 44 65 73  .*/.case OP_VDes
2c050 74 72 6f 79 3a 20 7b 0a 20 20 70 2d 3e 69 6e 56  troy: {.  p->inV
2c060 74 61 62 4d 65 74 68 6f 64 20 3d 20 32 3b 0a 20  tabMethod = 2;. 
2c070 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61   rc = sqlite3Vta
2c080 62 43 61 6c 6c 44 65 73 74 72 6f 79 28 64 62 2c  bCallDestroy(db,
2c090 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70   pOp->p1, pOp->p
2c0a0 34 2e 7a 29 3b 0a 20 20 70 2d 3e 69 6e 56 74 61  4.z);.  p->inVta
2c0b0 62 4d 65 74 68 6f 64 20 3d 20 30 3b 0a 20 20 62  bMethod = 0;.  b
2c0c0 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  reak;.}.#endif /
2c0d0 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  * SQLITE_OMIT_VI
2c0e0 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23  RTUALTABLE */..#
2c0f0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2c100 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
2c110 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 4f 70 65 6e  /* Opcode: VOpen
2c120 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a   P1 * * P4 *.**.
2c130 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74  ** P4 is a point
2c140 65 72 20 74 6f 20 61 20 76 69 72 74 75 61 6c 20  er to a virtual 
2c150 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20 61 6e  table object, an
2c160 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74   sqlite3_vtab st
2c170 72 75 63 74 75 72 65 2e 0a 2a 2a 20 50 31 20 69  ructure..** P1 i
2c180 73 20 61 20 63 75 72 73 6f 72 20 6e 75 6d 62 65  s a cursor numbe
2c190 72 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65 20  r.  This opcode 
2c1a0 6f 70 65 6e 73 20 61 20 63 75 72 73 6f 72 20 74  opens a cursor t
2c1b0 6f 20 74 68 65 20 76 69 72 74 75 61 6c 0a 2a 2a  o the virtual.**
2c1c0 20 74 61 62 6c 65 20 61 6e 64 20 73 74 6f 72 65   table and store
2c1d0 73 20 74 68 61 74 20 63 75 72 73 6f 72 20 69 6e  s that cursor in
2c1e0 20 50 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P1..*/.case OP_
2c1f0 56 4f 70 65 6e 3a 20 7b 0a 20 20 56 64 62 65 43  VOpen: {.  VdbeC
2c200 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a 20 20 73  ursor *pCur;.  s
2c210 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73  qlite3_vtab_curs
2c220 6f 72 20 2a 70 56 74 61 62 43 75 72 73 6f 72 3b  or *pVtabCursor;
2c230 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  .  sqlite3_vtab 
2c240 2a 70 56 74 61 62 3b 0a 20 20 73 71 6c 69 74 65  *pVtab;.  sqlite
2c250 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c  3_module *pModul
2c260 65 3b 0a 0a 20 20 70 43 75 72 20 3d 20 30 3b 0a  e;..  pCur = 0;.
2c270 20 20 70 56 74 61 62 43 75 72 73 6f 72 20 3d 20    pVtabCursor = 
2c280 30 3b 0a 20 20 70 56 74 61 62 20 3d 20 70 4f 70  0;.  pVtab = pOp
2c290 2d 3e 70 34 2e 70 56 74 61 62 2d 3e 70 56 74 61  ->p4.pVtab->pVta
2c2a0 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20 28  b;.  pModule = (
2c2b0 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a  sqlite3_module *
2c2c0 29 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b  )pVtab->pModule;
2c2d0 0a 20 20 61 73 73 65 72 74 28 70 56 74 61 62 20  .  assert(pVtab 
2c2e0 26 26 20 70 4d 6f 64 75 6c 65 29 3b 0a 20 20 72  && pModule);.  r
2c2f0 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 4f 70  c = pModule->xOp
2c300 65 6e 28 70 56 74 61 62 2c 20 26 70 56 74 61 62  en(pVtab, &pVtab
2c310 43 75 72 73 6f 72 29 3b 0a 20 20 69 6d 70 6f 72  Cursor);.  impor
2c320 74 56 74 61 62 45 72 72 4d 73 67 28 70 2c 20 70  tVtabErrMsg(p, p
2c330 56 74 61 62 29 3b 0a 20 20 69 66 28 20 53 51 4c  Vtab);.  if( SQL
2c340 49 54 45 5f 4f 4b 3d 3d 72 63 20 29 7b 0a 20 20  ITE_OK==rc ){.  
2c350 20 20 2f 2a 20 49 6e 69 74 69 61 6c 69 7a 65 20    /* Initialize 
2c360 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75 72  sqlite3_vtab_cur
2c370 73 6f 72 20 62 61 73 65 20 63 6c 61 73 73 20 2a  sor base class *
2c380 2f 0a 20 20 20 20 70 56 74 61 62 43 75 72 73 6f  /.    pVtabCurso
2c390 72 2d 3e 70 56 74 61 62 20 3d 20 70 56 74 61 62  r->pVtab = pVtab
2c3a0 3b 0a 0a 20 20 20 20 2f 2a 20 49 6e 69 74 69 61  ;..    /* Initia
2c3b0 6c 69 73 65 20 76 64 62 65 20 63 75 72 73 6f 72  lise vdbe cursor
2c3c0 20 6f 62 6a 65 63 74 20 2a 2f 0a 20 20 20 20 70   object */.    p
2c3d0 43 75 72 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75  Cur = allocateCu
2c3e0 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c  rsor(p, pOp->p1,
2c3f0 20 30 2c 20 2d 31 2c 20 30 29 3b 0a 20 20 20 20   0, -1, 0);.    
2c400 69 66 28 20 70 43 75 72 20 29 7b 0a 20 20 20 20  if( pCur ){.    
2c410 20 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72    pCur->pVtabCur
2c420 73 6f 72 20 3d 20 70 56 74 61 62 43 75 72 73 6f  sor = pVtabCurso
2c430 72 3b 0a 20 20 20 20 20 20 70 43 75 72 2d 3e 70  r;.      pCur->p
2c440 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 43 75  Module = pVtabCu
2c450 72 73 6f 72 2d 3e 70 56 74 61 62 2d 3e 70 4d 6f  rsor->pVtab->pMo
2c460 64 75 6c 65 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  dule;.    }else{
2c470 0a 20 20 20 20 20 20 64 62 2d 3e 6d 61 6c 6c 6f  .      db->mallo
2c480 63 46 61 69 6c 65 64 20 3d 20 31 3b 0a 20 20 20  cFailed = 1;.   
2c490 20 20 20 70 4d 6f 64 75 6c 65 2d 3e 78 43 6c 6f     pModule->xClo
2c4a0 73 65 28 70 56 74 61 62 43 75 72 73 6f 72 29 3b  se(pVtabCursor);
2c4b0 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65  .    }.  }.  bre
2c4c0 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ak;.}.#endif /* 
2c4d0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
2c4e0 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66  UALTABLE */..#if
2c4f0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
2c500 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a  _VIRTUALTABLE./*
2c510 20 4f 70 63 6f 64 65 3a 20 56 46 69 6c 74 65 72   Opcode: VFilter
2c520 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a   P1 P2 P3 P4 *.*
2c530 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 63 75 72  *.** P1 is a cur
2c540 73 6f 72 20 6f 70 65 6e 65 64 20 75 73 69 6e 67  sor opened using
2c550 20 56 4f 70 65 6e 2e 20 20 50 32 20 69 73 20 61   VOpen.  P2 is a
2c560 6e 20 61 64 64 72 65 73 73 20 74 6f 20 6a 75 6d  n address to jum
2c570 70 20 74 6f 20 69 66 0a 2a 2a 20 74 68 65 20 66  p to if.** the f
2c580 69 6c 74 65 72 65 64 20 72 65 73 75 6c 74 20 73  iltered result s
2c590 65 74 20 69 73 20 65 6d 70 74 79 2e 0a 2a 2a 0a  et is empty..**.
2c5a0 2a 2a 20 50 34 20 69 73 20 65 69 74 68 65 72 20  ** P4 is either 
2c5b0 4e 55 4c 4c 20 6f 72 20 61 20 73 74 72 69 6e 67  NULL or a string
2c5c0 20 74 68 61 74 20 77 61 73 20 67 65 6e 65 72 61   that was genera
2c5d0 74 65 64 20 62 79 20 74 68 65 20 78 42 65 73 74  ted by the xBest
2c5e0 49 6e 64 65 78 0a 2a 2a 20 6d 65 74 68 6f 64 20  Index.** method 
2c5f0 6f 66 20 74 68 65 20 6d 6f 64 75 6c 65 2e 20 20  of the module.  
2c600 54 68 65 20 69 6e 74 65 72 70 72 65 74 61 74 69  The interpretati
2c610 6f 6e 20 6f 66 20 74 68 65 20 50 34 20 73 74 72  on of the P4 str
2c620 69 6e 67 20 69 73 20 6c 65 66 74 0a 2a 2a 20 74  ing is left.** t
2c630 6f 20 74 68 65 20 6d 6f 64 75 6c 65 20 69 6d 70  o the module imp
2c640 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a 0a  lementation..**.
2c650 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69  ** This opcode i
2c660 6e 76 6f 6b 65 73 20 74 68 65 20 78 46 69 6c 74  nvokes the xFilt
2c670 65 72 20 6d 65 74 68 6f 64 20 6f 6e 20 74 68 65  er method on the
2c680 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 73   virtual table s
2c690 70 65 63 69 66 69 65 64 0a 2a 2a 20 62 79 20 50  pecified.** by P
2c6a0 31 2e 20 20 54 68 65 20 69 6e 74 65 67 65 72 20  1.  The integer 
2c6b0 71 75 65 72 79 20 70 6c 61 6e 20 70 61 72 61 6d  query plan param
2c6c0 65 74 65 72 20 74 6f 20 78 46 69 6c 74 65 72 20  eter to xFilter 
2c6d0 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67  is stored in reg
2c6e0 69 73 74 65 72 0a 2a 2a 20 50 33 2e 20 52 65 67  ister.** P3. Reg
2c6f0 69 73 74 65 72 20 50 33 2b 31 20 73 74 6f 72 65  ister P3+1 store
2c700 73 20 74 68 65 20 61 72 67 63 20 70 61 72 61 6d  s the argc param
2c710 65 74 65 72 20 74 6f 20 62 65 20 70 61 73 73 65  eter to be passe
2c720 64 20 74 6f 20 74 68 65 0a 2a 2a 20 78 46 69 6c  d to the.** xFil
2c730 74 65 72 20 6d 65 74 68 6f 64 2e 20 52 65 67 69  ter method. Regi
2c740 73 74 65 72 73 20 50 33 2b 32 2e 2e 50 33 2b 31  sters P3+2..P3+1
2c750 2b 61 72 67 63 20 61 72 65 20 74 68 65 20 61 72  +argc are the ar
2c760 67 63 0a 2a 2a 20 61 64 64 69 74 69 6f 6e 61 6c  gc.** additional
2c770 20 70 61 72 61 6d 65 74 65 72 73 20 77 68 69 63   parameters whic
2c780 68 20 61 72 65 20 70 61 73 73 65 64 20 74 6f 0a  h are passed to.
2c790 2a 2a 20 78 46 69 6c 74 65 72 20 61 73 20 61 72  ** xFilter as ar
2c7a0 67 76 2e 20 52 65 67 69 73 74 65 72 20 50 33 2b  gv. Register P3+
2c7b0 32 20 62 65 63 6f 6d 65 73 20 61 72 67 76 5b 30  2 becomes argv[0
2c7c0 5d 20 77 68 65 6e 20 70 61 73 73 65 64 20 74 6f  ] when passed to
2c7d0 20 78 46 69 6c 74 65 72 2e 0a 2a 2a 0a 2a 2a 20   xFilter..**.** 
2c7e0 41 20 6a 75 6d 70 20 69 73 20 6d 61 64 65 20 74  A jump is made t
2c7f0 6f 20 50 32 20 69 66 20 74 68 65 20 72 65 73 75  o P2 if the resu
2c800 6c 74 20 73 65 74 20 61 66 74 65 72 20 66 69 6c  lt set after fil
2c810 74 65 72 69 6e 67 20 77 6f 75 6c 64 20 62 65 20  tering would be 
2c820 65 6d 70 74 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f  empty..*/.case O
2c830 50 5f 56 46 69 6c 74 65 72 3a 20 7b 20 20 20 2f  P_VFilter: {   /
2c840 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e 74 20  * jump */.  int 
2c850 6e 41 72 67 3b 0a 20 20 69 6e 74 20 69 51 75 65  nArg;.  int iQue
2c860 72 79 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69  ry;.  const sqli
2c870 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64  te3_module *pMod
2c880 75 6c 65 3b 0a 20 20 4d 65 6d 20 2a 70 51 75 65  ule;.  Mem *pQue
2c890 72 79 3b 0a 20 20 4d 65 6d 20 2a 70 41 72 67 63  ry;.  Mem *pArgc
2c8a0 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62  ;.  sqlite3_vtab
2c8b0 5f 63 75 72 73 6f 72 20 2a 70 56 74 61 62 43 75  _cursor *pVtabCu
2c8c0 72 73 6f 72 3b 0a 20 20 73 71 6c 69 74 65 33 5f  rsor;.  sqlite3_
2c8d0 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 56  vtab *pVtab;.  V
2c8e0 64 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72 3b  dbeCursor *pCur;
2c8f0 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 69 6e  .  int res;.  in
2c900 74 20 69 3b 0a 20 20 4d 65 6d 20 2a 2a 61 70 41  t i;.  Mem **apA
2c910 72 67 3b 0a 0a 20 20 70 51 75 65 72 79 20 3d 20  rg;..  pQuery = 
2c920 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
2c930 20 20 70 41 72 67 63 20 3d 20 26 70 51 75 65 72    pArgc = &pQuer
2c940 79 5b 31 5d 3b 0a 20 20 70 43 75 72 20 3d 20 70  y[1];.  pCur = p
2c950 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
2c960 3b 0a 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49  ;.  assert( memI
2c970 73 56 61 6c 69 64 28 70 51 75 65 72 79 29 20 29  sValid(pQuery) )
2c980 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41  ;.  REGISTER_TRA
2c990 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 51 75 65  CE(pOp->p3, pQue
2c9a0 72 79 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  ry);.  assert( p
2c9b0 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72  Cur->pVtabCursor
2c9c0 20 29 3b 0a 20 20 70 56 74 61 62 43 75 72 73 6f   );.  pVtabCurso
2c9d0 72 20 3d 20 70 43 75 72 2d 3e 70 56 74 61 62 43  r = pCur->pVtabC
2c9e0 75 72 73 6f 72 3b 0a 20 20 70 56 74 61 62 20 3d  ursor;.  pVtab =
2c9f0 20 70 56 74 61 62 43 75 72 73 6f 72 2d 3e 70 56   pVtabCursor->pV
2ca00 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d  tab;.  pModule =
2ca10 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b   pVtab->pModule;
2ca20 0a 0a 20 20 2f 2a 20 47 72 61 62 20 74 68 65 20  ..  /* Grab the 
2ca30 69 6e 64 65 78 20 6e 75 6d 62 65 72 20 61 6e 64  index number and
2ca40 20 61 72 67 63 20 70 61 72 61 6d 65 74 65 72 73   argc parameters
2ca50 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 28 70   */.  assert( (p
2ca60 51 75 65 72 79 2d 3e 66 6c 61 67 73 26 4d 45 4d  Query->flags&MEM
2ca70 5f 49 6e 74 29 21 3d 30 20 26 26 20 70 41 72 67  _Int)!=0 && pArg
2ca80 63 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d 5f 49 6e  c->flags==MEM_In
2ca90 74 20 29 3b 0a 20 20 6e 41 72 67 20 3d 20 28 69  t );.  nArg = (i
2caa0 6e 74 29 70 41 72 67 63 2d 3e 75 2e 69 3b 0a 20  nt)pArgc->u.i;. 
2cab0 20 69 51 75 65 72 79 20 3d 20 28 69 6e 74 29 70   iQuery = (int)p
2cac0 51 75 65 72 79 2d 3e 75 2e 69 3b 0a 0a 20 20 2f  Query->u.i;..  /
2cad0 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 78 46 69  * Invoke the xFi
2cae0 6c 74 65 72 20 6d 65 74 68 6f 64 20 2a 2f 0a 20  lter method */. 
2caf0 20 7b 0a 20 20 20 20 72 65 73 20 3d 20 30 3b 0a   {.    res = 0;.
2cb00 20 20 20 20 61 70 41 72 67 20 3d 20 70 2d 3e 61      apArg = p->a
2cb10 70 41 72 67 3b 0a 20 20 20 20 66 6f 72 28 69 20  pArg;.    for(i 
2cb20 3d 20 30 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b  = 0; i<nArg; i++
2cb30 29 7b 0a 20 20 20 20 20 20 61 70 41 72 67 5b 69  ){.      apArg[i
2cb40 5d 20 3d 20 26 70 41 72 67 63 5b 69 2b 31 5d 3b  ] = &pArgc[i+1];
2cb50 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
2cb60 62 65 4d 65 6d 53 74 6f 72 65 54 79 70 65 28 61  beMemStoreType(a
2cb70 70 41 72 67 5b 69 5d 29 3b 0a 20 20 20 20 7d 0a  pArg[i]);.    }.
2cb80 0a 20 20 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65  .    p->inVtabMe
2cb90 74 68 6f 64 20 3d 20 31 3b 0a 20 20 20 20 72 63  thod = 1;.    rc
2cba0 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 46 69 6c   = pModule->xFil
2cbb0 74 65 72 28 70 56 74 61 62 43 75 72 73 6f 72 2c  ter(pVtabCursor,
2cbc0 20 69 51 75 65 72 79 2c 20 70 4f 70 2d 3e 70 34   iQuery, pOp->p4
2cbd0 2e 7a 2c 20 6e 41 72 67 2c 20 61 70 41 72 67 29  .z, nArg, apArg)
2cbe0 3b 0a 20 20 20 20 70 2d 3e 69 6e 56 74 61 62 4d  ;.    p->inVtabM
2cbf0 65 74 68 6f 64 20 3d 20 30 3b 0a 20 20 20 20 69  ethod = 0;.    i
2cc00 6d 70 6f 72 74 56 74 61 62 45 72 72 4d 73 67 28  mportVtabErrMsg(
2cc10 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 20 20 69  p, pVtab);.    i
2cc20 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
2cc30 20 29 7b 0a 20 20 20 20 20 20 72 65 73 20 3d 20   ){.      res = 
2cc40 70 4d 6f 64 75 6c 65 2d 3e 78 45 6f 66 28 70 56  pModule->xEof(pV
2cc50 74 61 62 43 75 72 73 6f 72 29 3b 0a 20 20 20 20  tabCursor);.    
2cc60 7d 0a 0a 20 20 20 20 69 66 28 20 72 65 73 20 29  }..    if( res )
2cc70 7b 0a 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70  {.      pc = pOp
2cc80 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 7d 0a  ->p2 - 1;.    }.
2cc90 20 20 7d 0a 20 20 70 43 75 72 2d 3e 6e 75 6c 6c    }.  pCur->null
2cca0 52 6f 77 20 3d 20 30 3b 0a 0a 20 20 62 72 65 61  Row = 0;..  brea
2ccb0 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k;.}.#endif /* S
2ccc0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
2ccd0 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e  ALTABLE */..#ifn
2cce0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2ccf0 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20  VIRTUALTABLE./* 
2cd00 4f 70 63 6f 64 65 3a 20 56 43 6f 6c 75 6d 6e 20  Opcode: VColumn 
2cd10 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
2cd20 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 76 61 6c  ** Store the val
2cd30 75 65 20 6f 66 20 74 68 65 20 50 32 2d 74 68 20  ue of the P2-th 
2cd40 63 6f 6c 75 6d 6e 20 6f 66 0a 2a 2a 20 74 68 65  column of.** the
2cd50 20 72 6f 77 20 6f 66 20 74 68 65 20 76 69 72 74   row of the virt
2cd60 75 61 6c 2d 74 61 62 6c 65 20 74 68 61 74 20 74  ual-table that t
2cd70 68 65 20 0a 2a 2a 20 50 31 20 63 75 72 73 6f 72  he .** P1 cursor
2cd80 20 69 73 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20   is pointing to 
2cd90 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 33  into register P3
2cda0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 43 6f  ..*/.case OP_VCo
2cdb0 6c 75 6d 6e 3a 20 7b 0a 20 20 73 71 6c 69 74 65  lumn: {.  sqlite
2cdc0 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20  3_vtab *pVtab;. 
2cdd0 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d   const sqlite3_m
2cde0 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a  odule *pModule;.
2cdf0 20 20 4d 65 6d 20 2a 70 44 65 73 74 3b 0a 20 20    Mem *pDest;.  
2ce00 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20  sqlite3_context 
2ce10 73 43 6f 6e 74 65 78 74 3b 0a 0a 20 20 56 64 62  sContext;..  Vdb
2ce20 65 43 75 72 73 6f 72 20 2a 70 43 75 72 20 3d 20  eCursor *pCur = 
2ce30 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
2ce40 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 75  ];.  assert( pCu
2ce50 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 20 29  r->pVtabCursor )
2ce60 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
2ce70 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33  >p3>0 && pOp->p3
2ce80 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70  <=p->nMem );.  p
2ce90 44 65 73 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  Dest = &aMem[pOp
2cea0 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75  ->p3];.  memAbou
2ceb0 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 44 65  tToChange(p, pDe
2cec0 73 74 29 3b 0a 20 20 69 66 28 20 70 43 75 72 2d  st);.  if( pCur-
2ced0 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20  >nullRow ){.    
2cee0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
2cef0 74 4e 75 6c 6c 28 70 44 65 73 74 29 3b 0a 20 20  tNull(pDest);.  
2cf00 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 70    break;.  }.  p
2cf10 56 74 61 62 20 3d 20 70 43 75 72 2d 3e 70 56 74  Vtab = pCur->pVt
2cf20 61 62 43 75 72 73 6f 72 2d 3e 70 56 74 61 62 3b  abCursor->pVtab;
2cf30 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74  .  pModule = pVt
2cf40 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 61  ab->pModule;.  a
2cf50 73 73 65 72 74 28 20 70 4d 6f 64 75 6c 65 2d 3e  ssert( pModule->
2cf60 78 43 6f 6c 75 6d 6e 20 29 3b 0a 20 20 6d 65 6d  xColumn );.  mem
2cf70 73 65 74 28 26 73 43 6f 6e 74 65 78 74 2c 20 30  set(&sContext, 0
2cf80 2c 20 73 69 7a 65 6f 66 28 73 43 6f 6e 74 65 78  , sizeof(sContex
2cf90 74 29 29 3b 0a 0a 20 20 2f 2a 20 54 68 65 20 6f  t));..  /* The o
2cfa0 75 74 70 75 74 20 63 65 6c 6c 20 6d 61 79 20 61  utput cell may a
2cfb0 6c 72 65 61 64 79 20 68 61 76 65 20 61 20 62 75  lready have a bu
2cfc0 66 66 65 72 20 61 6c 6c 6f 63 61 74 65 64 2e 20  ffer allocated. 
2cfd0 4d 6f 76 65 0a 20 20 2a 2a 20 74 68 65 20 63 75  Move.  ** the cu
2cfe0 72 72 65 6e 74 20 63 6f 6e 74 65 6e 74 73 20 74  rrent contents t
2cff0 6f 20 73 43 6f 6e 74 65 78 74 2e 73 20 73 6f 20  o sContext.s so 
2d000 69 6e 20 63 61 73 65 20 74 68 65 20 75 73 65 72  in case the user
2d010 2d 66 75 6e 63 74 69 6f 6e 20 0a 20 20 2a 2a 20  -function .  ** 
2d020 63 61 6e 20 75 73 65 20 74 68 65 20 61 6c 72 65  can use the alre
2d030 61 64 79 20 61 6c 6c 6f 63 61 74 65 64 20 62 75  ady allocated bu
2d040 66 66 65 72 20 69 6e 73 74 65 61 64 20 6f 66 20  ffer instead of 
2d050 61 6c 6c 6f 63 61 74 69 6e 67 20 61 20 0a 20 20  allocating a .  
2d060 2a 2a 20 6e 65 77 20 6f 6e 65 2e 0a 20 20 2a 2f  ** new one..  */
2d070 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
2d080 6d 4d 6f 76 65 28 26 73 43 6f 6e 74 65 78 74 2e  mMove(&sContext.
2d090 73 2c 20 70 44 65 73 74 29 3b 0a 20 20 4d 65 6d  s, pDest);.  Mem
2d0a0 53 65 74 54 79 70 65 46 6c 61 67 28 26 73 43 6f  SetTypeFlag(&sCo
2d0b0 6e 74 65 78 74 2e 73 2c 20 4d 45 4d 5f 4e 75 6c  ntext.s, MEM_Nul
2d0c0 6c 29 3b 0a 0a 20 20 72 63 20 3d 20 70 4d 6f 64  l);..  rc = pMod
2d0d0 75 6c 65 2d 3e 78 43 6f 6c 75 6d 6e 28 70 43 75  ule->xColumn(pCu
2d0e0 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 2c 20  r->pVtabCursor, 
2d0f0 26 73 43 6f 6e 74 65 78 74 2c 20 70 4f 70 2d 3e  &sContext, pOp->
2d100 70 32 29 3b 0a 20 20 69 6d 70 6f 72 74 56 74 61  p2);.  importVta
2d110 62 45 72 72 4d 73 67 28 70 2c 20 70 56 74 61 62  bErrMsg(p, pVtab
2d120 29 3b 0a 20 20 69 66 28 20 73 43 6f 6e 74 65 78  );.  if( sContex
2d130 74 2e 69 73 45 72 72 6f 72 20 29 7b 0a 20 20 20  t.isError ){.   
2d140 20 72 63 20 3d 20 73 43 6f 6e 74 65 78 74 2e 69   rc = sContext.i
2d150 73 45 72 72 6f 72 3b 0a 20 20 7d 0a 0a 20 20 2f  sError;.  }..  /
2d160 2a 20 43 6f 70 79 20 74 68 65 20 72 65 73 75 6c  * Copy the resul
2d170 74 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f  t of the functio
2d180 6e 20 74 6f 20 74 68 65 20 50 33 20 72 65 67 69  n to the P3 regi
2d190 73 74 65 72 2e 20 57 65 0a 20 20 2a 2a 20 64 6f  ster. We.  ** do
2d1a0 20 74 68 69 73 20 72 65 67 61 72 64 6c 65 73 73   this regardless
2d1b0 20 6f 66 20 77 68 65 74 68 65 72 20 6f 72 20 6e   of whether or n
2d1c0 6f 74 20 61 6e 20 65 72 72 6f 72 20 6f 63 63 75  ot an error occu
2d1d0 72 72 65 64 20 74 6f 20 65 6e 73 75 72 65 20 61  rred to ensure a
2d1e0 6e 79 0a 20 20 2a 2a 20 64 79 6e 61 6d 69 63 20  ny.  ** dynamic 
2d1f0 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e 20 73 43  allocation in sC
2d200 6f 6e 74 65 78 74 2e 73 20 28 61 20 4d 65 6d 20  ontext.s (a Mem 
2d210 73 74 72 75 63 74 29 20 69 73 20 20 72 65 6c 65  struct) is  rele
2d220 61 73 65 64 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c  ased..  */.  sql
2d230 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e  ite3VdbeChangeEn
2d240 63 6f 64 69 6e 67 28 26 73 43 6f 6e 74 65 78 74  coding(&sContext
2d250 2e 73 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  .s, encoding);. 
2d260 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d   sqlite3VdbeMemM
2d270 6f 76 65 28 70 44 65 73 74 2c 20 26 73 43 6f 6e  ove(pDest, &sCon
2d280 74 65 78 74 2e 73 29 3b 0a 20 20 52 45 47 49 53  text.s);.  REGIS
2d290 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
2d2a0 33 2c 20 70 44 65 73 74 29 3b 0a 20 20 55 50 44  3, pDest);.  UPD
2d2b0 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45  ATE_MAX_BLOBSIZE
2d2c0 28 70 44 65 73 74 29 3b 0a 0a 20 20 69 66 28 20  (pDest);..  if( 
2d2d0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54 6f  sqlite3VdbeMemTo
2d2e0 6f 42 69 67 28 70 44 65 73 74 29 20 29 7b 0a 20  oBig(pDest) ){. 
2d2f0 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b     goto too_big;
2d300 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
2d310 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
2d320 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
2d330 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  LE */..#ifndef S
2d340 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
2d350 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64  ALTABLE./* Opcod
2d360 65 3a 20 56 4e 65 78 74 20 50 31 20 50 32 20 2a  e: VNext P1 P2 *
2d370 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 64 76 61 6e   * *.**.** Advan
2d380 63 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  ce virtual table
2d390 20 50 31 20 74 6f 20 74 68 65 20 6e 65 78 74 20   P1 to the next 
2d3a0 72 6f 77 20 69 6e 20 69 74 73 20 72 65 73 75 6c  row in its resul
2d3b0 74 20 73 65 74 20 61 6e 64 0a 2a 2a 20 6a 75 6d  t set and.** jum
2d3c0 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e  p to instruction
2d3d0 20 50 32 2e 20 20 4f 72 2c 20 69 66 20 74 68 65   P2.  Or, if the
2d3e0 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 68   virtual table h
2d3f0 61 73 20 72 65 61 63 68 65 64 0a 2a 2a 20 74 68  as reached.** th
2d400 65 20 65 6e 64 20 6f 66 20 69 74 73 20 72 65 73  e end of its res
2d410 75 6c 74 20 73 65 74 2c 20 74 68 65 6e 20 66 61  ult set, then fa
2d420 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  ll through to th
2d430 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69  e next instructi
2d440 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56  on..*/.case OP_V
2d450 4e 65 78 74 3a 20 7b 20 20 20 2f 2a 20 6a 75 6d  Next: {   /* jum
2d460 70 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76  p */.  sqlite3_v
2d470 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f  tab *pVtab;.  co
2d480 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75  nst sqlite3_modu
2d490 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 69  le *pModule;.  i
2d4a0 6e 74 20 72 65 73 3b 0a 20 20 56 64 62 65 43 75  nt res;.  VdbeCu
2d4b0 72 73 6f 72 20 2a 70 43 75 72 3b 0a 0a 20 20 72  rsor *pCur;..  r
2d4c0 65 73 20 3d 20 30 3b 0a 20 20 70 43 75 72 20 3d  es = 0;.  pCur =
2d4d0 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
2d4e0 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
2d4f0 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 20  ur->pVtabCursor 
2d500 29 3b 0a 20 20 69 66 28 20 70 43 75 72 2d 3e 6e  );.  if( pCur->n
2d510 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 62 72  ullRow ){.    br
2d520 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 56 74 61 62  eak;.  }.  pVtab
2d530 20 3d 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75   = pCur->pVtabCu
2d540 72 73 6f 72 2d 3e 70 56 74 61 62 3b 0a 20 20 70  rsor->pVtab;.  p
2d550 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e  Module = pVtab->
2d560 70 4d 6f 64 75 6c 65 3b 0a 20 20 61 73 73 65 72  pModule;.  asser
2d570 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 4e 65 78  t( pModule->xNex
2d580 74 20 29 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b  t );..  /* Invok
2d590 65 20 74 68 65 20 78 4e 65 78 74 28 29 20 6d 65  e the xNext() me
2d5a0 74 68 6f 64 20 6f 66 20 74 68 65 20 6d 6f 64 75  thod of the modu
2d5b0 6c 65 2e 20 54 68 65 72 65 20 69 73 20 6e 6f 20  le. There is no 
2d5c0 77 61 79 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a  way for the.  **
2d5d0 20 75 6e 64 65 72 6c 79 69 6e 67 20 69 6d 70 6c   underlying impl
2d5e0 65 6d 65 6e 74 61 74 69 6f 6e 20 74 6f 20 72 65  ementation to re
2d5f0 74 75 72 6e 20 61 6e 20 65 72 72 6f 72 20 69 66  turn an error if
2d600 20 6f 6e 65 20 6f 63 63 75 72 73 20 64 75 72 69   one occurs duri
2d610 6e 67 0a 20 20 2a 2a 20 78 4e 65 78 74 28 29 2e  ng.  ** xNext().
2d620 20 49 6e 73 74 65 61 64 2c 20 69 66 20 61 6e 20   Instead, if an 
2d630 65 72 72 6f 72 20 6f 63 63 75 72 73 2c 20 74 72  error occurs, tr
2d640 75 65 20 69 73 20 72 65 74 75 72 6e 65 64 20 28  ue is returned (
2d650 69 6e 64 69 63 61 74 69 6e 67 20 74 68 61 74 20  indicating that 
2d660 0a 20 20 2a 2a 20 64 61 74 61 20 69 73 20 61 76  .  ** data is av
2d670 61 69 6c 61 62 6c 65 29 20 61 6e 64 20 74 68 65  ailable) and the
2d680 20 65 72 72 6f 72 20 63 6f 64 65 20 72 65 74 75   error code retu
2d690 72 6e 65 64 20 77 68 65 6e 20 78 43 6f 6c 75 6d  rned when xColum
2d6a0 6e 20 6f 72 0a 20 20 2a 2a 20 73 6f 6d 65 20 6f  n or.  ** some o
2d6b0 74 68 65 72 20 6d 65 74 68 6f 64 20 69 73 20 6e  ther method is n
2d6c0 65 78 74 20 69 6e 76 6f 6b 65 64 20 6f 6e 20 74  ext invoked on t
2d6d0 68 65 20 73 61 76 65 20 76 69 72 74 75 61 6c 20  he save virtual 
2d6e0 74 61 62 6c 65 20 63 75 72 73 6f 72 2e 0a 20 20  table cursor..  
2d6f0 2a 2f 0a 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65  */.  p->inVtabMe
2d700 74 68 6f 64 20 3d 20 31 3b 0a 20 20 72 63 20 3d  thod = 1;.  rc =
2d710 20 70 4d 6f 64 75 6c 65 2d 3e 78 4e 65 78 74 28   pModule->xNext(
2d720 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f  pCur->pVtabCurso
2d730 72 29 3b 0a 20 20 70 2d 3e 69 6e 56 74 61 62 4d  r);.  p->inVtabM
2d740 65 74 68 6f 64 20 3d 20 30 3b 0a 20 20 69 6d 70  ethod = 0;.  imp
2d750 6f 72 74 56 74 61 62 45 72 72 4d 73 67 28 70 2c  ortVtabErrMsg(p,
2d760 20 70 56 74 61 62 29 3b 0a 20 20 69 66 28 20 72   pVtab);.  if( r
2d770 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
2d780 20 20 20 20 72 65 73 20 3d 20 70 4d 6f 64 75 6c      res = pModul
2d790 65 2d 3e 78 45 6f 66 28 70 43 75 72 2d 3e 70 56  e->xEof(pCur->pV
2d7a0 74 61 62 43 75 72 73 6f 72 29 3b 0a 20 20 7d 0a  tabCursor);.  }.
2d7b0 0a 20 20 69 66 28 20 21 72 65 73 20 29 7b 0a 20  .  if( !res ){. 
2d7c0 20 20 20 2f 2a 20 49 66 20 74 68 65 72 65 20 69     /* If there i
2d7d0 73 20 64 61 74 61 2c 20 6a 75 6d 70 20 74 6f 20  s data, jump to 
2d7e0 50 32 20 2a 2f 0a 20 20 20 20 70 63 20 3d 20 70  P2 */.    pc = p
2d7f0 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a  Op->p2 - 1;.  }.
2d800 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
2d810 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
2d820 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f  _VIRTUALTABLE */
2d830 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
2d840 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
2d850 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 52  LE./* Opcode: VR
2d860 65 6e 61 6d 65 20 50 31 20 2a 20 2a 20 50 34 20  ename P1 * * P4 
2d870 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20  *.**.** P4 is a 
2d880 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 76 69 72  pointer to a vir
2d890 74 75 61 6c 20 74 61 62 6c 65 20 6f 62 6a 65 63  tual table objec
2d8a0 74 2c 20 61 6e 20 73 71 6c 69 74 65 33 5f 76 74  t, an sqlite3_vt
2d8b0 61 62 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a  ab structure..**
2d8c0 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 6e 76   This opcode inv
2d8d0 6f 6b 65 73 20 74 68 65 20 63 6f 72 72 65 73 70  okes the corresp
2d8e0 6f 6e 64 69 6e 67 20 78 52 65 6e 61 6d 65 20 6d  onding xRename m
2d8f0 65 74 68 6f 64 2e 20 54 68 65 20 76 61 6c 75 65  ethod. The value
2d900 0a 2a 2a 20 69 6e 20 72 65 67 69 73 74 65 72 20  .** in register 
2d910 50 31 20 69 73 20 70 61 73 73 65 64 20 61 73 20  P1 is passed as 
2d920 74 68 65 20 7a 4e 61 6d 65 20 61 72 67 75 6d 65  the zName argume
2d930 6e 74 20 74 6f 20 74 68 65 20 78 52 65 6e 61 6d  nt to the xRenam
2d940 65 20 6d 65 74 68 6f 64 2e 0a 2a 2f 0a 63 61 73  e method..*/.cas
2d950 65 20 4f 50 5f 56 52 65 6e 61 6d 65 3a 20 7b 0a  e OP_VRename: {.
2d960 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a    sqlite3_vtab *
2d970 70 56 74 61 62 3b 0a 20 20 4d 65 6d 20 2a 70 4e  pVtab;.  Mem *pN
2d980 61 6d 65 3b 0a 0a 20 20 70 56 74 61 62 20 3d 20  ame;..  pVtab = 
2d990 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62 2d 3e 70  pOp->p4.pVtab->p
2d9a0 56 74 61 62 3b 0a 20 20 70 4e 61 6d 65 20 3d 20  Vtab;.  pName = 
2d9b0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
2d9c0 20 20 61 73 73 65 72 74 28 20 70 56 74 61 62 2d    assert( pVtab-
2d9d0 3e 70 4d 6f 64 75 6c 65 2d 3e 78 52 65 6e 61 6d  >pModule->xRenam
2d9e0 65 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 6d  e );.  assert( m
2d9f0 65 6d 49 73 56 61 6c 69 64 28 70 4e 61 6d 65 29  emIsValid(pName)
2da00 20 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54   );.  REGISTER_T
2da10 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20 70 4e  RACE(pOp->p1, pN
2da20 61 6d 65 29 3b 0a 20 20 61 73 73 65 72 74 28 20  ame);.  assert( 
2da30 70 4e 61 6d 65 2d 3e 66 6c 61 67 73 20 26 20 4d  pName->flags & M
2da40 45 4d 5f 53 74 72 20 29 3b 0a 20 20 72 63 20 3d  EM_Str );.  rc =
2da50 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 2d   pVtab->pModule-
2da60 3e 78 52 65 6e 61 6d 65 28 70 56 74 61 62 2c 20  >xRename(pVtab, 
2da70 70 4e 61 6d 65 2d 3e 7a 29 3b 0a 20 20 69 6d 70  pName->z);.  imp
2da80 6f 72 74 56 74 61 62 45 72 72 4d 73 67 28 70 2c  ortVtabErrMsg(p,
2da90 20 70 56 74 61 62 29 3b 0a 20 20 70 2d 3e 65 78   pVtab);.  p->ex
2daa0 70 69 72 65 64 20 3d 20 30 3b 0a 0a 20 20 62 72  pired = 0;..  br
2dab0 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23  eak;.}.#endif..#
2dac0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2dad0 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
2dae0 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 55 70 64 61  /* Opcode: VUpda
2daf0 74 65 20 50 31 20 50 32 20 50 33 20 50 34 20 2a  te P1 P2 P3 P4 *
2db00 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70  .**.** P4 is a p
2db10 6f 69 6e 74 65 72 20 74 6f 20 61 20 76 69 72 74  ointer to a virt
2db20 75 61 6c 20 74 61 62 6c 65 20 6f 62 6a 65 63 74  ual table object
2db30 2c 20 61 6e 20 73 71 6c 69 74 65 33 5f 76 74 61  , an sqlite3_vta
2db40 62 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 20  b structure..** 
2db50 54 68 69 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f  This opcode invo
2db60 6b 65 73 20 74 68 65 20 63 6f 72 72 65 73 70 6f  kes the correspo
2db70 6e 64 69 6e 67 20 78 55 70 64 61 74 65 20 6d 65  nding xUpdate me
2db80 74 68 6f 64 2e 20 50 32 20 76 61 6c 75 65 73 0a  thod. P2 values.
2db90 2a 2a 20 61 72 65 20 63 6f 6e 74 69 67 75 6f 75  ** are contiguou
2dba0 73 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 73  s memory cells s
2dbb0 74 61 72 74 69 6e 67 20 61 74 20 50 33 20 74 6f  tarting at P3 to
2dbc0 20 70 61 73 73 20 74 6f 20 74 68 65 20 78 55 70   pass to the xUp
2dbd0 64 61 74 65 20 0a 2a 2a 20 69 6e 76 6f 63 61 74  date .** invocat
2dbe0 69 6f 6e 2e 20 54 68 65 20 76 61 6c 75 65 20 69  ion. The value i
2dbf0 6e 20 72 65 67 69 73 74 65 72 20 28 50 33 2b 50  n register (P3+P
2dc00 32 2d 31 29 20 63 6f 72 72 65 73 70 6f 6e 64 73  2-1) corresponds
2dc10 20 74 6f 20 74 68 65 20 0a 2a 2a 20 70 32 74 68   to the .** p2th
2dc20 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 20   element of the 
2dc30 61 72 67 76 20 61 72 72 61 79 20 70 61 73 73 65  argv array passe
2dc40 64 20 74 6f 20 78 55 70 64 61 74 65 2e 0a 2a 2a  d to xUpdate..**
2dc50 0a 2a 2a 20 54 68 65 20 78 55 70 64 61 74 65 20  .** The xUpdate 
2dc60 6d 65 74 68 6f 64 20 77 69 6c 6c 20 64 6f 20 61  method will do a
2dc70 20 44 45 4c 45 54 45 20 6f 72 20 61 6e 20 49 4e   DELETE or an IN
2dc80 53 45 52 54 20 6f 72 20 62 6f 74 68 2e 0a 2a 2a  SERT or both..**
2dc90 20 54 68 65 20 61 72 67 76 5b 30 5d 20 65 6c 65   The argv[0] ele
2dca0 6d 65 6e 74 20 28 77 68 69 63 68 20 63 6f 72 72  ment (which corr
2dcb0 65 73 70 6f 6e 64 73 20 74 6f 20 6d 65 6d 6f 72  esponds to memor
2dcc0 79 20 63 65 6c 6c 20 50 33 29 0a 2a 2a 20 69 73  y cell P3).** is
2dcd0 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20 61 20   the rowid of a 
2dce0 72 6f 77 20 74 6f 20 64 65 6c 65 74 65 2e 20 20  row to delete.  
2dcf0 49 66 20 61 72 67 76 5b 30 5d 20 69 73 20 4e 55  If argv[0] is NU
2dd00 4c 4c 20 74 68 65 6e 20 6e 6f 20 0a 2a 2a 20 64  LL then no .** d
2dd10 65 6c 65 74 69 6f 6e 20 6f 63 63 75 72 73 2e 20  eletion occurs. 
2dd20 20 54 68 65 20 61 72 67 76 5b 31 5d 20 65 6c 65   The argv[1] ele
2dd30 6d 65 6e 74 20 69 73 20 74 68 65 20 72 6f 77 69  ment is the rowi
2dd40 64 20 6f 66 20 74 68 65 20 6e 65 77 20 0a 2a 2a  d of the new .**
2dd50 20 72 6f 77 2e 20 20 54 68 69 73 20 63 61 6e 20   row.  This can 
2dd60 62 65 20 4e 55 4c 4c 20 74 6f 20 68 61 76 65 20  be NULL to have 
2dd70 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  the virtual tabl
2dd80 65 20 73 65 6c 65 63 74 20 74 68 65 20 6e 65 77  e select the new
2dd90 20 0a 2a 2a 20 72 6f 77 69 64 20 66 6f 72 20 69   .** rowid for i
2dda0 74 73 65 6c 66 2e 20 20 54 68 65 20 73 75 62 73  tself.  The subs
2ddb0 65 71 75 65 6e 74 20 65 6c 65 6d 65 6e 74 73 20  equent elements 
2ddc0 69 6e 20 74 68 65 20 61 72 72 61 79 20 61 72 65  in the array are
2ddd0 20 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 73 20   .** the values 
2dde0 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  of columns in th
2ddf0 65 20 6e 65 77 20 72 6f 77 2e 0a 2a 2a 0a 2a 2a  e new row..**.**
2de00 20 49 66 20 50 32 3d 3d 31 20 74 68 65 6e 20 6e   If P2==1 then n
2de10 6f 20 69 6e 73 65 72 74 20 69 73 20 70 65 72 66  o insert is perf
2de20 6f 72 6d 65 64 2e 20 20 61 72 67 76 5b 30 5d 20  ormed.  argv[0] 
2de30 69 73 20 74 68 65 20 72 6f 77 69 64 20 6f 66 0a  is the rowid of.
2de40 2a 2a 20 61 20 72 6f 77 20 74 6f 20 64 65 6c 65  ** a row to dele
2de50 74 65 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20  te..**.** P1 is 
2de60 61 20 62 6f 6f 6c 65 61 6e 20 66 6c 61 67 2e 20  a boolean flag. 
2de70 49 66 20 69 74 20 69 73 20 73 65 74 20 74 6f 20  If it is set to 
2de80 74 72 75 65 20 61 6e 64 20 74 68 65 20 78 55 70  true and the xUp
2de90 64 61 74 65 20 63 61 6c 6c 0a 2a 2a 20 69 73 20  date call.** is 
2dea0 73 75 63 63 65 73 73 66 75 6c 2c 20 74 68 65 6e  successful, then
2deb0 20 74 68 65 20 76 61 6c 75 65 20 72 65 74 75 72   the value retur
2dec0 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 6c  ned by sqlite3_l
2ded0 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64  ast_insert_rowid
2dee0 28 29 20 0a 2a 2a 20 69 73 20 73 65 74 20 74 6f  () .** is set to
2def0 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   the value of th
2df00 65 20 72 6f 77 69 64 20 66 6f 72 20 74 68 65 20  e rowid for the 
2df10 72 6f 77 20 6a 75 73 74 20 69 6e 73 65 72 74 65  row just inserte
2df20 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 55  d..*/.case OP_VU
2df30 70 64 61 74 65 3a 20 7b 0a 20 20 73 71 6c 69 74  pdate: {.  sqlit
2df40 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a  e3_vtab *pVtab;.
2df50 20 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65    sqlite3_module
2df60 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 69 6e 74   *pModule;.  int
2df70 20 6e 41 72 67 3b 0a 20 20 69 6e 74 20 69 3b 0a   nArg;.  int i;.
2df80 20 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 20 72    sqlite_int64 r
2df90 6f 77 69 64 3b 0a 20 20 4d 65 6d 20 2a 2a 61 70  owid;.  Mem **ap
2dfa0 41 72 67 3b 0a 20 20 4d 65 6d 20 2a 70 58 3b 0a  Arg;.  Mem *pX;.
2dfb0 0a 20 20 70 56 74 61 62 20 3d 20 70 4f 70 2d 3e  .  pVtab = pOp->
2dfc0 70 34 2e 70 56 74 61 62 2d 3e 70 56 74 61 62 3b  p4.pVtab->pVtab;
2dfd0 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20 28 73 71  .  pModule = (sq
2dfe0 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 29 70  lite3_module *)p
2dff0 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20  Vtab->pModule;. 
2e000 20 6e 41 72 67 20 3d 20 70 4f 70 2d 3e 70 32 3b   nArg = pOp->p2;
2e010 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
2e020 70 34 74 79 70 65 3d 3d 50 34 5f 56 54 41 42 20  p4type==P4_VTAB 
2e030 29 3b 0a 20 20 69 66 28 20 41 4c 57 41 59 53 28  );.  if( ALWAYS(
2e040 70 4d 6f 64 75 6c 65 2d 3e 78 55 70 64 61 74 65  pModule->xUpdate
2e050 29 20 29 7b 0a 20 20 20 20 61 70 41 72 67 20 3d  ) ){.    apArg =
2e060 20 70 2d 3e 61 70 41 72 67 3b 0a 20 20 20 20 70   p->apArg;.    p
2e070 58 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  X = &aMem[pOp->p
2e080 33 5d 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b  3];.    for(i=0;
2e090 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20   i<nArg; i++){. 
2e0a0 20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d       assert( mem
2e0b0 49 73 56 61 6c 69 64 28 70 58 29 20 29 3b 0a 20  IsValid(pX) );. 
2e0c0 20 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43       memAboutToC
2e0d0 68 61 6e 67 65 28 70 2c 20 70 58 29 3b 0a 20 20  hange(p, pX);.  
2e0e0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
2e0f0 65 6d 53 74 6f 72 65 54 79 70 65 28 70 58 29 3b  emStoreType(pX);
2e100 0a 20 20 20 20 20 20 61 70 41 72 67 5b 69 5d 20  .      apArg[i] 
2e110 3d 20 70 58 3b 0a 20 20 20 20 20 20 70 58 2b 2b  = pX;.      pX++
2e120 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72 63 20 3d  ;.    }.    rc =
2e130 20 70 4d 6f 64 75 6c 65 2d 3e 78 55 70 64 61 74   pModule->xUpdat
2e140 65 28 70 56 74 61 62 2c 20 6e 41 72 67 2c 20 61  e(pVtab, nArg, a
2e150 70 41 72 67 2c 20 26 72 6f 77 69 64 29 3b 0a 20  pArg, &rowid);. 
2e160 20 20 20 69 6d 70 6f 72 74 56 74 61 62 45 72 72     importVtabErr
2e170 4d 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20  Msg(p, pVtab);. 
2e180 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54     if( rc==SQLIT
2e190 45 5f 4f 4b 20 26 26 20 70 4f 70 2d 3e 70 31 20  E_OK && pOp->p1 
2e1a0 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ){.      assert(
2e1b0 20 6e 41 72 67 3e 31 20 26 26 20 61 70 41 72 67   nArg>1 && apArg
2e1c0 5b 30 5d 20 26 26 20 28 61 70 41 72 67 5b 30 5d  [0] && (apArg[0]
2e1d0 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 4e 75 6c 6c  ->flags&MEM_Null
2e1e0 29 20 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 6c  ) );.      db->l
2e1f0 61 73 74 52 6f 77 69 64 20 3d 20 72 6f 77 69 64  astRowid = rowid
2e200 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 2d 3e 6e  ;.    }.    p->n
2e210 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 7d 0a 20 20  Change++;.  }.  
2e220 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20  break;.}.#endif 
2e230 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  /* SQLITE_OMIT_V
2e240 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a  IRTUALTABLE */..
2e250 23 69 66 6e 64 65 66 20 20 53 51 4c 49 54 45 5f  #ifndef  SQLITE_
2e260 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d  OMIT_PAGER_PRAGM
2e270 41 53 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 61  AS./* Opcode: Pa
2e280 67 65 63 6f 75 6e 74 20 50 31 20 50 32 20 2a 20  gecount P1 P2 * 
2e290 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20  * *.**.** Write 
2e2a0 74 68 65 20 63 75 72 72 65 6e 74 20 6e 75 6d 62  the current numb
2e2b0 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20 64  er of pages in d
2e2c0 61 74 61 62 61 73 65 20 50 31 20 74 6f 20 6d 65  atabase P1 to me
2e2d0 6d 6f 72 79 20 63 65 6c 6c 20 50 32 2e 0a 2a 2f  mory cell P2..*/
2e2e0 0a 63 61 73 65 20 4f 50 5f 50 61 67 65 63 6f 75  .case OP_Pagecou
2e2f0 6e 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  nt: {           
2e300 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65   /* out2-prerele
2e310 61 73 65 20 2a 2f 0a 20 20 70 4f 75 74 2d 3e 75  ase */.  pOut->u
2e320 2e 69 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  .i = sqlite3Btre
2e330 65 4c 61 73 74 50 61 67 65 28 64 62 2d 3e 61 44  eLastPage(db->aD
2e340 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 29 3b  b[pOp->p1].pBt);
2e350 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
2e360 69 66 0a 0a 0a 23 69 66 6e 64 65 66 20 20 53 51  if...#ifndef  SQ
2e370 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f  LITE_OMIT_PAGER_
2e380 50 52 41 47 4d 41 53 0a 2f 2a 20 4f 70 63 6f 64  PRAGMAS./* Opcod
2e390 65 3a 20 4d 61 78 50 67 63 6e 74 20 50 31 20 50  e: MaxPgcnt P1 P
2e3a0 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54  2 P3 * *.**.** T
2e3b0 72 79 20 74 6f 20 73 65 74 20 74 68 65 20 6d 61  ry to set the ma
2e3c0 78 69 6d 75 6d 20 70 61 67 65 20 63 6f 75 6e 74  ximum page count
2e3d0 20 66 6f 72 20 64 61 74 61 62 61 73 65 20 50 31   for database P1
2e3e0 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 69 6e   to the value in
2e3f0 20 50 33 2e 0a 2a 2a 20 44 6f 20 6e 6f 74 20 6c   P3..** Do not l
2e400 65 74 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 70  et the maximum p
2e410 61 67 65 20 63 6f 75 6e 74 20 66 61 6c 6c 20 62  age count fall b
2e420 65 6c 6f 77 20 74 68 65 20 63 75 72 72 65 6e 74  elow the current
2e430 20 70 61 67 65 20 63 6f 75 6e 74 20 61 6e 64 0a   page count and.
2e440 2a 2a 20 64 6f 20 6e 6f 74 20 63 68 61 6e 67 65  ** do not change
2e450 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 70 61 67   the maximum pag
2e460 65 20 63 6f 75 6e 74 20 76 61 6c 75 65 20 69 66  e count value if
2e470 20 50 33 3d 3d 30 2e 0a 2a 2a 0a 2a 2a 20 53 74   P3==0..**.** St
2e480 6f 72 65 20 74 68 65 20 6d 61 78 69 6d 75 6d 20  ore the maximum 
2e490 70 61 67 65 20 63 6f 75 6e 74 20 61 66 74 65 72  page count after
2e4a0 20 74 68 65 20 63 68 61 6e 67 65 20 69 6e 20 72   the change in r
2e4b0 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63  egister P2..*/.c
2e4c0 61 73 65 20 4f 50 5f 4d 61 78 50 67 63 6e 74 3a  ase OP_MaxPgcnt:
2e4d0 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
2e4e0 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65   out2-prerelease
2e4f0 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69   */.  unsigned i
2e500 6e 74 20 6e 65 77 4d 61 78 3b 0a 20 20 42 74 72  nt newMax;.  Btr
2e510 65 65 20 2a 70 42 74 3b 0a 0a 20 20 70 42 74 20  ee *pBt;..  pBt 
2e520 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70  = db->aDb[pOp->p
2e530 31 5d 2e 70 42 74 3b 0a 20 20 6e 65 77 4d 61 78  1].pBt;.  newMax
2e540 20 3d 20 30 3b 0a 20 20 69 66 28 20 70 4f 70 2d   = 0;.  if( pOp-
2e550 3e 70 33 20 29 7b 0a 20 20 20 20 6e 65 77 4d 61  >p3 ){.    newMa
2e560 78 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  x = sqlite3Btree
2e570 4c 61 73 74 50 61 67 65 28 70 42 74 29 3b 0a 20  LastPage(pBt);. 
2e580 20 20 20 69 66 28 20 6e 65 77 4d 61 78 20 3c 20     if( newMax < 
2e590 28 75 6e 73 69 67 6e 65 64 29 70 4f 70 2d 3e 70  (unsigned)pOp->p
2e5a0 33 20 29 20 6e 65 77 4d 61 78 20 3d 20 28 75 6e  3 ) newMax = (un
2e5b0 73 69 67 6e 65 64 29 70 4f 70 2d 3e 70 33 3b 0a  signed)pOp->p3;.
2e5c0 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20    }.  pOut->u.i 
2e5d0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 61  = sqlite3BtreeMa
2e5e0 78 50 61 67 65 43 6f 75 6e 74 28 70 42 74 2c 20  xPageCount(pBt, 
2e5f0 6e 65 77 4d 61 78 29 3b 0a 20 20 62 72 65 61 6b  newMax);.  break
2e600 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a 23 69 66  ;.}.#endif...#if
2e610 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
2e620 5f 54 52 41 43 45 0a 2f 2a 20 4f 70 63 6f 64 65  _TRACE./* Opcode
2e630 3a 20 54 72 61 63 65 20 2a 20 2a 20 2a 20 50 34  : Trace * * * P4
2e640 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 74 72 61 63   *.**.** If trac
2e650 69 6e 67 20 69 73 20 65 6e 61 62 6c 65 64 20 28  ing is enabled (
2e660 62 79 20 74 68 65 20 73 71 6c 69 74 65 33 5f 74  by the sqlite3_t
2e670 72 61 63 65 28 29 29 20 69 6e 74 65 72 66 61 63  race()) interfac
2e680 65 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20 55  e, then.** the U
2e690 54 46 2d 38 20 73 74 72 69 6e 67 20 63 6f 6e 74  TF-8 string cont
2e6a0 61 69 6e 65 64 20 69 6e 20 50 34 20 69 73 20 65  ained in P4 is e
2e6b0 6d 69 74 74 65 64 20 6f 6e 20 74 68 65 20 74 72  mitted on the tr
2e6c0 61 63 65 20 63 61 6c 6c 62 61 63 6b 2e 0a 2a 2f  ace callback..*/
2e6d0 0a 63 61 73 65 20 4f 50 5f 54 72 61 63 65 3a 20  .case OP_Trace: 
2e6e0 7b 0a 20 20 63 68 61 72 20 2a 7a 54 72 61 63 65  {.  char *zTrace
2e6f0 3b 0a 0a 20 20 7a 54 72 61 63 65 20 3d 20 28 70  ;..  zTrace = (p
2e700 4f 70 2d 3e 70 34 2e 7a 20 3f 20 70 4f 70 2d 3e  Op->p4.z ? pOp->
2e710 70 34 2e 7a 20 3a 20 70 2d 3e 7a 53 71 6c 29 3b  p4.z : p->zSql);
2e720 0a 20 20 69 66 28 20 7a 54 72 61 63 65 20 29 7b  .  if( zTrace ){
2e730 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 78 54 72  .    if( db->xTr
2e740 61 63 65 20 29 7b 0a 20 20 20 20 20 20 63 68 61  ace ){.      cha
2e750 72 20 2a 7a 20 3d 20 73 71 6c 69 74 65 33 56 64  r *z = sqlite3Vd
2e760 62 65 45 78 70 61 6e 64 53 71 6c 28 70 2c 20 7a  beExpandSql(p, z
2e770 54 72 61 63 65 29 3b 0a 20 20 20 20 20 20 64 62  Trace);.      db
2e780 2d 3e 78 54 72 61 63 65 28 64 62 2d 3e 70 54 72  ->xTrace(db->pTr
2e790 61 63 65 41 72 67 2c 20 7a 29 3b 0a 20 20 20 20  aceArg, z);.    
2e7a0 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28    sqlite3DbFree(
2e7b0 64 62 2c 20 7a 29 3b 0a 20 20 20 20 7d 0a 23 69  db, z);.    }.#i
2e7c0 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
2e7d0 47 0a 20 20 20 20 69 66 28 20 28 64 62 2d 3e 66  G.    if( (db->f
2e7e0 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 53 71  lags & SQLITE_Sq
2e7f0 6c 54 72 61 63 65 29 21 3d 30 20 29 7b 0a 20 20  lTrace)!=0 ){.  
2e800 20 20 20 20 73 71 6c 69 74 65 33 44 65 62 75 67      sqlite3Debug
2e810 50 72 69 6e 74 66 28 22 53 51 4c 2d 74 72 61 63  Printf("SQL-trac
2e820 65 3a 20 25 73 5c 6e 22 2c 20 7a 54 72 61 63 65  e: %s\n", zTrace
2e830 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 20  );.    }.#endif 
2e840 2f 2a 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20  /* SQLITE_DEBUG 
2e850 2a 2f 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  */.  }.  break;.
2e860 7d 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 20 4f 70  }.#endif.../* Op
2e870 63 6f 64 65 3a 20 4e 6f 6f 70 20 2a 20 2a 20 2a  code: Noop * * *
2e880 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 6f 20 6e 6f   * *.**.** Do no
2e890 74 68 69 6e 67 2e 20 20 54 68 69 73 20 69 6e 73  thing.  This ins
2e8a0 74 72 75 63 74 69 6f 6e 20 69 73 20 6f 66 74 65  truction is ofte
2e8b0 6e 20 75 73 65 66 75 6c 20 61 73 20 61 20 6a 75  n useful as a ju
2e8c0 6d 70 0a 2a 2a 20 64 65 73 74 69 6e 61 74 69 6f  mp.** destinatio
2e8d0 6e 2e 0a 2a 2f 0a 2f 2a 0a 2a 2a 20 54 68 65 20  n..*/./*.** The 
2e8e0 6d 61 67 69 63 20 45 78 70 6c 61 69 6e 20 6f 70  magic Explain op
2e8f0 63 6f 64 65 20 61 72 65 20 6f 6e 6c 79 20 69 6e  code are only in
2e900 73 65 72 74 65 64 20 77 68 65 6e 20 65 78 70 6c  serted when expl
2e910 61 69 6e 3d 3d 32 20 28 77 68 69 63 68 0a 2a 2a  ain==2 (which.**
2e920 20 69 73 20 74 6f 20 73 61 79 20 77 68 65 6e 20   is to say when 
2e930 74 68 65 20 45 58 50 4c 41 49 4e 20 51 55 45 52  the EXPLAIN QUER
2e940 59 20 50 4c 41 4e 20 73 79 6e 74 61 78 20 69 73  Y PLAN syntax is
2e950 20 75 73 65 64 2e 29 0a 2a 2a 20 54 68 69 73 20   used.).** This 
2e960 6f 70 63 6f 64 65 20 72 65 63 6f 72 64 73 20 69  opcode records i
2e970 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 72 6f 6d 20  nformation from 
2e980 74 68 65 20 6f 70 74 69 6d 69 7a 65 72 2e 20 20  the optimizer.  
2e990 49 74 20 69 73 20 74 68 65 0a 2a 2a 20 74 68 65  It is the.** the
2e9a0 20 73 61 6d 65 20 61 73 20 61 20 6e 6f 2d 6f 70   same as a no-op
2e9b0 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65 73 6e  .  This opcodesn
2e9c0 65 76 65 72 20 61 70 70 65 61 72 73 20 69 6e 20  ever appears in 
2e9d0 61 20 72 65 61 6c 20 56 4d 20 70 72 6f 67 72 61  a real VM progra
2e9e0 6d 2e 0a 2a 2f 0a 64 65 66 61 75 6c 74 3a 20 7b  m..*/.default: {
2e9f0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 69            /* Thi
2ea00 73 20 69 73 20 72 65 61 6c 6c 79 20 4f 50 5f 4e  s is really OP_N
2ea10 6f 6f 70 20 61 6e 64 20 4f 50 5f 45 78 70 6c 61  oop and OP_Expla
2ea20 69 6e 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  in */.  assert( 
2ea30 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
2ea40 4e 6f 6f 70 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63  Noop || pOp->opc
2ea50 6f 64 65 3d 3d 4f 50 5f 45 78 70 6c 61 69 6e 20  ode==OP_Explain 
2ea60 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
2ea70 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2ea80 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2ea90 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2eaa0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2eab0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a  *************.**
2eac0 20 54 68 65 20 63 61 73 65 73 20 6f 66 20 74 68   The cases of th
2ead0 65 20 73 77 69 74 63 68 20 73 74 61 74 65 6d 65  e switch stateme
2eae0 6e 74 20 61 62 6f 76 65 20 74 68 69 73 20 6c 69  nt above this li
2eaf0 6e 65 20 73 68 6f 75 6c 64 20 61 6c 6c 20 62 65  ne should all be
2eb00 20 69 6e 64 65 6e 74 65 64 0a 2a 2a 20 62 79 20   indented.** by 
2eb10 36 20 73 70 61 63 65 73 2e 20 20 42 75 74 20 74  6 spaces.  But t
2eb20 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20 36 20 73  he left-most 6 s
2eb30 70 61 63 65 73 20 68 61 76 65 20 62 65 65 6e 20  paces have been 
2eb40 72 65 6d 6f 76 65 64 20 74 6f 20 69 6d 70 72 6f  removed to impro
2eb50 76 65 20 74 68 65 0a 2a 2a 20 72 65 61 64 61 62  ve the.** readab
2eb60 69 6c 69 74 79 2e 20 20 46 72 6f 6d 20 74 68 69  ility.  From thi
2eb70 73 20 70 6f 69 6e 74 20 6f 6e 20 64 6f 77 6e 2c  s point on down,
2eb80 20 74 68 65 20 6e 6f 72 6d 61 6c 20 69 6e 64 65   the normal inde
2eb90 6e 74 61 74 69 6f 6e 20 72 75 6c 65 73 20 61 72  ntation rules ar
2eba0 65 0a 2a 2a 20 72 65 73 74 6f 72 65 64 2e 0a 2a  e.** restored..*
2ebb0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2ebc0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2ebd0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2ebe0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2ebf0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 20 20  ************/.  
2ec00 20 20 7d 0a 0a 23 69 66 64 65 66 20 56 44 42 45    }..#ifdef VDBE
2ec10 5f 50 52 4f 46 49 4c 45 0a 20 20 20 20 7b 0a 20  _PROFILE.    {. 
2ec20 20 20 20 20 20 75 36 34 20 65 6c 61 70 73 65 64       u64 elapsed
2ec30 20 3d 20 73 71 6c 69 74 65 33 48 77 74 69 6d 65   = sqlite3Hwtime
2ec40 28 29 20 2d 20 73 74 61 72 74 3b 0a 20 20 20 20  () - start;.    
2ec50 20 20 70 4f 70 2d 3e 63 79 63 6c 65 73 20 2b 3d    pOp->cycles +=
2ec60 20 65 6c 61 70 73 65 64 3b 0a 20 20 20 20 20 20   elapsed;.      
2ec70 70 4f 70 2d 3e 63 6e 74 2b 2b 3b 0a 23 69 66 20  pOp->cnt++;.#if 
2ec80 30 0a 20 20 20 20 20 20 20 20 66 70 72 69 6e 74  0.        fprint
2ec90 66 28 73 74 64 6f 75 74 2c 20 22 25 31 30 6c 6c  f(stdout, "%10ll
2eca0 75 20 22 2c 20 65 6c 61 70 73 65 64 29 3b 0a 20  u ", elapsed);. 
2ecb0 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
2ecc0 62 65 50 72 69 6e 74 4f 70 28 73 74 64 6f 75 74  bePrintOp(stdout
2ecd0 2c 20 6f 72 69 67 50 63 2c 20 26 61 4f 70 5b 6f  , origPc, &aOp[o
2ece0 72 69 67 50 63 5d 29 3b 0a 23 65 6e 64 69 66 0a  rigPc]);.#endif.
2ecf0 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20      }.#endif..  
2ed00 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69    /* The followi
2ed10 6e 67 20 63 6f 64 65 20 61 64 64 73 20 6e 6f 74  ng code adds not
2ed20 68 69 6e 67 20 74 6f 20 74 68 65 20 61 63 74 75  hing to the actu
2ed30 61 6c 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79  al functionality
2ed40 0a 20 20 20 20 2a 2a 20 6f 66 20 74 68 65 20 70  .    ** of the p
2ed50 72 6f 67 72 61 6d 2e 20 20 49 74 20 69 73 20 6f  rogram.  It is o
2ed60 6e 6c 79 20 68 65 72 65 20 66 6f 72 20 74 65 73  nly here for tes
2ed70 74 69 6e 67 20 61 6e 64 20 64 65 62 75 67 67 69  ting and debuggi
2ed80 6e 67 2e 0a 20 20 20 20 2a 2a 20 4f 6e 20 74 68  ng..    ** On th
2ed90 65 20 6f 74 68 65 72 20 68 61 6e 64 2c 20 69 74  e other hand, it
2eda0 20 64 6f 65 73 20 62 75 72 6e 20 43 50 55 20 63   does burn CPU c
2edb0 79 63 6c 65 73 20 65 76 65 72 79 20 74 69 6d 65  ycles every time
2edc0 20 74 68 72 6f 75 67 68 0a 20 20 20 20 2a 2a 20   through.    ** 
2edd0 74 68 65 20 65 76 61 6c 75 61 74 6f 72 20 6c 6f  the evaluator lo
2ede0 6f 70 2e 20 20 53 6f 20 77 65 20 63 61 6e 20 6c  op.  So we can l
2edf0 65 61 76 65 20 69 74 20 6f 75 74 20 77 68 65 6e  eave it out when
2ee00 20 4e 44 45 42 55 47 20 69 73 20 64 65 66 69 6e   NDEBUG is defin
2ee10 65 64 2e 0a 20 20 20 20 2a 2f 0a 23 69 66 6e 64  ed..    */.#ifnd
2ee20 65 66 20 4e 44 45 42 55 47 0a 20 20 20 20 61 73  ef NDEBUG.    as
2ee30 73 65 72 74 28 20 70 63 3e 3d 2d 31 20 26 26 20  sert( pc>=-1 && 
2ee40 70 63 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 0a 23 69  pc<p->nOp );..#i
2ee50 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
2ee60 47 0a 20 20 20 20 69 66 28 20 70 2d 3e 74 72 61  G.    if( p->tra
2ee70 63 65 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20  ce ){.      if( 
2ee80 72 63 21 3d 30 20 29 20 66 70 72 69 6e 74 66 28  rc!=0 ) fprintf(
2ee90 70 2d 3e 74 72 61 63 65 2c 22 72 63 3d 25 64 5c  p->trace,"rc=%d\
2eea0 6e 22 2c 72 63 29 3b 0a 20 20 20 20 20 20 69 66  n",rc);.      if
2eeb0 28 20 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26  ( pOp->opflags &
2eec0 20 28 4f 50 46 4c 47 5f 4f 55 54 32 5f 50 52 45   (OPFLG_OUT2_PRE
2eed0 52 45 4c 45 41 53 45 7c 4f 50 46 4c 47 5f 4f 55  RELEASE|OPFLG_OU
2eee0 54 32 29 20 29 7b 0a 20 20 20 20 20 20 20 20 72  T2) ){.        r
2eef0 65 67 69 73 74 65 72 54 72 61 63 65 28 70 2d 3e  egisterTrace(p->
2ef00 74 72 61 63 65 2c 20 70 4f 70 2d 3e 70 32 2c 20  trace, pOp->p2, 
2ef10 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 3b  &aMem[pOp->p2]);
2ef20 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69  .      }.      i
2ef30 66 28 20 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20  f( pOp->opflags 
2ef40 26 20 4f 50 46 4c 47 5f 4f 55 54 33 20 29 7b 0a  & OPFLG_OUT3 ){.
2ef50 20 20 20 20 20 20 20 20 72 65 67 69 73 74 65 72          register
2ef60 54 72 61 63 65 28 70 2d 3e 74 72 61 63 65 2c 20  Trace(p->trace, 
2ef70 70 4f 70 2d 3e 70 33 2c 20 26 61 4d 65 6d 5b 70  pOp->p3, &aMem[p
2ef80 4f 70 2d 3e 70 33 5d 29 3b 0a 20 20 20 20 20 20  Op->p3]);.      
2ef90 7d 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 20 20  }.    }.#endif  
2efa0 2f 2a 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20  /* SQLITE_DEBUG 
2efb0 2a 2f 0a 23 65 6e 64 69 66 20 20 2f 2a 20 4e 44  */.#endif  /* ND
2efc0 45 42 55 47 20 2a 2f 0a 20 20 7d 20 20 2f 2a 20  EBUG */.  }  /* 
2efd0 54 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 66  The end of the f
2efe0 6f 72 28 3b 3b 29 20 6c 6f 6f 70 20 74 68 65 20  or(;;) loop the 
2eff0 6c 6f 6f 70 73 20 74 68 72 6f 75 67 68 20 6f 70  loops through op
2f000 63 6f 64 65 73 20 2a 2f 0a 0a 20 20 2f 2a 20 49  codes */..  /* I
2f010 66 20 77 65 20 72 65 61 63 68 20 74 68 69 73 20  f we reach this 
2f020 70 6f 69 6e 74 2c 20 69 74 20 6d 65 61 6e 73 20  point, it means 
2f030 74 68 61 74 20 65 78 65 63 75 74 69 6f 6e 20 69  that execution i
2f040 73 20 66 69 6e 69 73 68 65 64 20 77 69 74 68 0a  s finished with.
2f050 20 20 2a 2a 20 61 6e 20 65 72 72 6f 72 20 6f 66    ** an error of
2f060 20 73 6f 6d 65 20 6b 69 6e 64 2e 0a 20 20 2a 2f   some kind..  */
2f070 0a 76 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74  .vdbe_error_halt
2f080 3a 0a 20 20 61 73 73 65 72 74 28 20 72 63 20 29  :.  assert( rc )
2f090 3b 0a 20 20 70 2d 3e 72 63 20 3d 20 72 63 3b 0a  ;.  p->rc = rc;.
2f0a0 20 20 74 65 73 74 63 61 73 65 28 20 73 71 6c 69    testcase( sqli
2f0b0 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e  te3GlobalConfig.
2f0c0 78 4c 6f 67 21 3d 30 20 29 3b 0a 20 20 73 71 6c  xLog!=0 );.  sql
2f0d0 69 74 65 33 5f 6c 6f 67 28 72 63 2c 20 22 73 74  ite3_log(rc, "st
2f0e0 61 74 65 6d 65 6e 74 20 61 62 6f 72 74 73 20 61  atement aborts a
2f0f0 74 20 25 64 3a 20 5b 25 73 5d 20 25 73 22 2c 20  t %d: [%s] %s", 
2f100 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2f110 20 20 20 20 70 63 2c 20 70 2d 3e 7a 53 71 6c 2c      pc, p->zSql,
2f120 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20   p->zErrMsg);.  
2f130 73 71 6c 69 74 65 33 56 64 62 65 48 61 6c 74 28  sqlite3VdbeHalt(
2f140 70 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51  p);.  if( rc==SQ
2f150 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d  LITE_IOERR_NOMEM
2f160 20 29 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69   ) db->mallocFai
2f170 6c 65 64 20 3d 20 31 3b 0a 20 20 72 63 20 3d 20  led = 1;.  rc = 
2f180 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20  SQLITE_ERROR;.  
2f190 69 66 28 20 72 65 73 65 74 53 63 68 65 6d 61 4f  if( resetSchemaO
2f1a0 6e 46 61 75 6c 74 20 29 20 73 71 6c 69 74 65 33  nFault ) sqlite3
2f1b0 52 65 73 65 74 49 6e 74 65 72 6e 61 6c 53 63 68  ResetInternalSch
2f1c0 65 6d 61 28 64 62 2c 20 30 29 3b 0a 0a 20 20 2f  ema(db, 0);..  /
2f1d0 2a 20 54 68 69 73 20 69 73 20 74 68 65 20 6f 6e  * This is the on
2f1e0 6c 79 20 77 61 79 20 6f 75 74 20 6f 66 20 74 68  ly way out of th
2f1f0 69 73 20 70 72 6f 63 65 64 75 72 65 2e 20 20 57  is procedure.  W
2f200 65 20 68 61 76 65 20 74 6f 0a 20 20 2a 2a 20 72  e have to.  ** r
2f210 65 6c 65 61 73 65 20 74 68 65 20 6d 75 74 65 78  elease the mutex
2f220 65 73 20 6f 6e 20 62 74 72 65 65 73 20 74 68 61  es on btrees tha
2f230 74 20 77 65 72 65 20 61 63 71 75 69 72 65 64 20  t were acquired 
2f240 61 74 20 74 68 65 0a 20 20 2a 2a 20 74 6f 70 2e  at the.  ** top.
2f250 20 2a 2f 0a 76 64 62 65 5f 72 65 74 75 72 6e 3a   */.vdbe_return:
2f260 0a 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d  .  sqlite3BtreeM
2f270 75 74 65 78 41 72 72 61 79 4c 65 61 76 65 28 26  utexArrayLeave(&
2f280 70 2d 3e 61 4d 75 74 65 78 29 3b 0a 20 20 72 65  p->aMutex);.  re
2f290 74 75 72 6e 20 72 63 3b 0a 0a 20 20 2f 2a 20 4a  turn rc;..  /* J
2f2a0 75 6d 70 20 74 6f 20 68 65 72 65 20 69 66 20 61  ump to here if a
2f2b0 20 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20   string or blob 
2f2c0 6c 61 72 67 65 72 20 74 68 61 6e 20 53 51 4c 49  larger than SQLI
2f2d0 54 45 5f 4d 41 58 5f 4c 45 4e 47 54 48 0a 20 20  TE_MAX_LENGTH.  
2f2e0 2a 2a 20 69 73 20 65 6e 63 6f 75 6e 74 65 72 65  ** is encountere
2f2f0 64 2e 0a 20 20 2a 2f 0a 74 6f 6f 5f 62 69 67 3a  d..  */.too_big:
2f300 0a 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72  .  sqlite3SetStr
2f310 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c  ing(&p->zErrMsg,
2f320 20 64 62 2c 20 22 73 74 72 69 6e 67 20 6f 72 20   db, "string or 
2f330 62 6c 6f 62 20 74 6f 6f 20 62 69 67 22 29 3b 0a  blob too big");.
2f340 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 54 4f    rc = SQLITE_TO
2f350 4f 42 49 47 3b 0a 20 20 67 6f 74 6f 20 76 64 62  OBIG;.  goto vdb
2f360 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 0a 20  e_error_halt;.. 
2f370 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72 65   /* Jump to here
2f380 20 69 66 20 61 20 6d 61 6c 6c 6f 63 28 29 20 66   if a malloc() f
2f390 61 69 6c 73 2e 0a 20 20 2a 2f 0a 6e 6f 5f 6d 65  ails..  */.no_me
2f3a0 6d 3a 0a 20 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46  m:.  db->mallocF
2f3b0 61 69 6c 65 64 20 3d 20 31 3b 0a 20 20 73 71 6c  ailed = 1;.  sql
2f3c0 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70  ite3SetString(&p
2f3d0 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22  ->zErrMsg, db, "
2f3e0 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79 22 29 3b  out of memory");
2f3f0 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e  .  rc = SQLITE_N
2f400 4f 4d 45 4d 3b 0a 20 20 67 6f 74 6f 20 76 64 62  OMEM;.  goto vdb
2f410 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 0a 20  e_error_halt;.. 
2f420 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72 65   /* Jump to here
2f430 20 66 6f 72 20 61 6e 79 20 6f 74 68 65 72 20 6b   for any other k
2f440 69 6e 64 20 6f 66 20 66 61 74 61 6c 20 65 72 72  ind of fatal err
2f450 6f 72 2e 20 20 54 68 65 20 22 72 63 22 20 76 61  or.  The "rc" va
2f460 72 69 61 62 6c 65 0a 20 20 2a 2a 20 73 68 6f 75  riable.  ** shou
2f470 6c 64 20 68 6f 6c 64 20 74 68 65 20 65 72 72 6f  ld hold the erro
2f480 72 20 6e 75 6d 62 65 72 2e 0a 20 20 2a 2f 0a 61  r number..  */.a
2f490 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
2f4a0 72 3a 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  r:.  assert( p->
2f4b0 7a 45 72 72 4d 73 67 3d 3d 30 20 29 3b 0a 20 20  zErrMsg==0 );.  
2f4c0 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61  if( db->mallocFa
2f4d0 69 6c 65 64 20 29 20 72 63 20 3d 20 53 51 4c 49  iled ) rc = SQLI
2f4e0 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 69 66 28 20  TE_NOMEM;.  if( 
2f4f0 72 63 21 3d 53 51 4c 49 54 45 5f 49 4f 45 52 52  rc!=SQLITE_IOERR
2f500 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20 20 73 71  _NOMEM ){.    sq
2f510 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26  lite3SetString(&
2f520 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20  p->zErrMsg, db, 
2f530 22 25 73 22 2c 20 73 71 6c 69 74 65 33 45 72 72  "%s", sqlite3Err
2f540 53 74 72 28 72 63 29 29 3b 0a 20 20 7d 0a 20 20  Str(rc));.  }.  
2f550 67 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f  goto vdbe_error_
2f560 68 61 6c 74 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70  halt;..  /* Jump
2f570 20 74 6f 20 68 65 72 65 20 69 66 20 74 68 65 20   to here if the 
2f580 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70  sqlite3_interrup
2f590 74 28 29 20 41 50 49 20 73 65 74 73 20 74 68 65  t() API sets the
2f5a0 20 69 6e 74 65 72 72 75 70 74 0a 20 20 2a 2a 20   interrupt.  ** 
2f5b0 66 6c 61 67 2e 0a 20 20 2a 2f 0a 61 62 6f 72 74  flag..  */.abort
2f5c0 5f 64 75 65 5f 74 6f 5f 69 6e 74 65 72 72 75 70  _due_to_interrup
2f5d0 74 3a 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d  t:.  assert( db-
2f5e0 3e 75 31 2e 69 73 49 6e 74 65 72 72 75 70 74 65  >u1.isInterrupte
2f5f0 64 20 29 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49  d );.  rc = SQLI
2f600 54 45 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20  TE_INTERRUPT;.  
2f610 70 2d 3e 72 63 20 3d 20 72 63 3b 0a 20 20 73 71  p->rc = rc;.  sq
2f620 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26  lite3SetString(&
2f630 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20  p->zErrMsg, db, 
2f640 22 25 73 22 2c 20 73 71 6c 69 74 65 33 45 72 72  "%s", sqlite3Err
2f650 53 74 72 28 72 63 29 29 3b 0a 20 20 67 6f 74 6f  Str(rc));.  goto
2f660 20 76 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74   vdbe_error_halt
2f670 3b 0a 7d 0a                                      ;.}.