/ Hex Artifact Content
Login

Artifact 038e5689e48cd6597158c5dc34f8d40a03a87ad7:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f  ******.** The co
0180: 64 65 20 69 6e 20 74 68 69 73 20 66 69 6c 65 20  de in this file 
0190: 69 6d 70 6c 65 6d 65 6e 74 73 20 65 78 65 63 75  implements execu
01a0: 74 69 6f 6e 20 6d 65 74 68 6f 64 20 6f 66 20 74  tion method of t
01b0: 68 65 20 0a 2a 2a 20 56 69 72 74 75 61 6c 20 44  he .** Virtual D
01c0: 61 74 61 62 61 73 65 20 45 6e 67 69 6e 65 20 28  atabase Engine (
01d0: 56 44 42 45 29 2e 20 20 41 20 73 65 70 61 72 61  VDBE).  A separa
01e0: 74 65 20 66 69 6c 65 20 28 22 76 64 62 65 61 75  te file ("vdbeau
01f0: 78 2e 63 22 29 0a 2a 2a 20 68 61 6e 64 6c 65 73  x.c").** handles
0200: 20 68 6f 75 73 65 6b 65 65 70 69 6e 67 20 64 65   housekeeping de
0210: 74 61 69 6c 73 20 73 75 63 68 20 61 73 20 63 72  tails such as cr
0220: 65 61 74 69 6e 67 20 61 6e 64 20 64 65 6c 65 74  eating and delet
0230: 69 6e 67 0a 2a 2a 20 56 44 42 45 20 69 6e 73 74  ing.** VDBE inst
0240: 61 6e 63 65 73 2e 20 20 54 68 69 73 20 66 69 6c  ances.  This fil
0250: 65 20 69 73 20 73 6f 6c 65 6c 79 20 69 6e 74 65  e is solely inte
0260: 72 65 73 74 65 64 20 69 6e 20 65 78 65 63 75 74  rested in execut
0270: 69 6e 67 0a 2a 2a 20 74 68 65 20 56 44 42 45 20  ing.** the VDBE 
0280: 70 72 6f 67 72 61 6d 2e 0a 2a 2a 0a 2a 2a 20 49  program..**.** I
0290: 6e 20 74 68 65 20 65 78 74 65 72 6e 61 6c 20 69  n the external i
02a0: 6e 74 65 72 66 61 63 65 2c 20 61 6e 20 22 73 71  nterface, an "sq
02b0: 6c 69 74 65 33 5f 73 74 6d 74 2a 22 20 69 73 20  lite3_stmt*" is 
02c0: 61 6e 20 6f 70 61 71 75 65 20 70 6f 69 6e 74 65  an opaque pointe
02d0: 72 0a 2a 2a 20 74 6f 20 61 20 56 44 42 45 2e 0a  r.** to a VDBE..
02e0: 2a 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 20 70 61  **.** The SQL pa
02f0: 72 73 65 72 20 67 65 6e 65 72 61 74 65 73 20 61  rser generates a
0300: 20 70 72 6f 67 72 61 6d 20 77 68 69 63 68 20 69   program which i
0310: 73 20 74 68 65 6e 20 65 78 65 63 75 74 65 64 20  s then executed 
0320: 62 79 0a 2a 2a 20 74 68 65 20 56 44 42 45 20 74  by.** the VDBE t
0330: 6f 20 64 6f 20 74 68 65 20 77 6f 72 6b 20 6f 66  o do the work of
0340: 20 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65   the SQL stateme
0350: 6e 74 2e 20 20 56 44 42 45 20 70 72 6f 67 72 61  nt.  VDBE progra
0360: 6d 73 20 61 72 65 20 0a 2a 2a 20 73 69 6d 69 6c  ms are .** simil
0370: 61 72 20 69 6e 20 66 6f 72 6d 20 74 6f 20 61 73  ar in form to as
0380: 73 65 6d 62 6c 79 20 6c 61 6e 67 75 61 67 65 2e  sembly language.
0390: 20 20 54 68 65 20 70 72 6f 67 72 61 6d 20 63 6f    The program co
03a0: 6e 73 69 73 74 73 20 6f 66 0a 2a 2a 20 61 20 6c  nsists of.** a l
03b0: 69 6e 65 61 72 20 73 65 71 75 65 6e 63 65 20 6f  inear sequence o
03c0: 66 20 6f 70 65 72 61 74 69 6f 6e 73 2e 20 20 45  f operations.  E
03d0: 61 63 68 20 6f 70 65 72 61 74 69 6f 6e 20 68 61  ach operation ha
03e0: 73 20 61 6e 20 6f 70 63 6f 64 65 20 0a 2a 2a 20  s an opcode .** 
03f0: 61 6e 64 20 35 20 6f 70 65 72 61 6e 64 73 2e 20  and 5 operands. 
0400: 20 4f 70 65 72 61 6e 64 73 20 50 31 2c 20 50 32   Operands P1, P2
0410: 2c 20 61 6e 64 20 50 33 20 61 72 65 20 69 6e 74  , and P3 are int
0420: 65 67 65 72 73 2e 20 20 4f 70 65 72 61 6e 64 20  egers.  Operand 
0430: 50 34 20 0a 2a 2a 20 69 73 20 61 20 6e 75 6c 6c  P4 .** is a null
0440: 2d 74 65 72 6d 69 6e 61 74 65 64 20 73 74 72 69  -terminated stri
0450: 6e 67 2e 20 20 4f 70 65 72 61 6e 64 20 50 35 20  ng.  Operand P5 
0460: 69 73 20 61 6e 20 75 6e 73 69 67 6e 65 64 20 63  is an unsigned c
0470: 68 61 72 61 63 74 65 72 2e 0a 2a 2a 20 46 65 77  haracter..** Few
0480: 20 6f 70 63 6f 64 65 73 20 75 73 65 20 61 6c 6c   opcodes use all
0490: 20 35 20 6f 70 65 72 61 6e 64 73 2e 0a 2a 2a 0a   5 operands..**.
04a0: 2a 2a 20 43 6f 6d 70 75 74 61 74 69 6f 6e 20 72  ** Computation r
04b0: 65 73 75 6c 74 73 20 61 72 65 20 73 74 6f 72 65  esults are store
04c0: 64 20 6f 6e 20 61 20 73 65 74 20 6f 66 20 72 65  d on a set of re
04d0: 67 69 73 74 65 72 73 20 6e 75 6d 62 65 72 65 64  gisters numbered
04e0: 20 62 65 67 69 6e 6e 69 6e 67 0a 2a 2a 20 77 69   beginning.** wi
04f0: 74 68 20 31 20 61 6e 64 20 67 6f 69 6e 67 20 75  th 1 and going u
0500: 70 20 74 6f 20 56 64 62 65 2e 6e 4d 65 6d 2e 20  p to Vdbe.nMem. 
0510: 20 45 61 63 68 20 72 65 67 69 73 74 65 72 20 63   Each register c
0520: 61 6e 20 73 74 6f 72 65 0a 2a 2a 20 65 69 74 68  an store.** eith
0530: 65 72 20 61 6e 20 69 6e 74 65 67 65 72 2c 20 61  er an integer, a
0540: 20 6e 75 6c 6c 2d 74 65 72 6d 69 6e 61 74 65 64   null-terminated
0550: 20 73 74 72 69 6e 67 2c 20 61 20 66 6c 6f 61 74   string, a float
0560: 69 6e 67 20 70 6f 69 6e 74 0a 2a 2a 20 6e 75 6d  ing point.** num
0570: 62 65 72 2c 20 6f 72 20 74 68 65 20 53 51 4c 20  ber, or the SQL 
0580: 22 4e 55 4c 4c 22 20 76 61 6c 75 65 2e 20 20 41  "NULL" value.  A
0590: 6e 20 69 6d 70 6c 69 63 69 74 20 63 6f 6e 76 65  n implicit conve
05a0: 72 73 69 6f 6e 20 66 72 6f 6d 20 6f 6e 65 0a 2a  rsion from one.*
05b0: 2a 20 74 79 70 65 20 74 6f 20 74 68 65 20 6f 74  * type to the ot
05c0: 68 65 72 20 6f 63 63 75 72 73 20 61 73 20 6e 65  her occurs as ne
05d0: 63 65 73 73 61 72 79 2e 0a 2a 2a 20 0a 2a 2a 20  cessary..** .** 
05e0: 4d 6f 73 74 20 6f 66 20 74 68 65 20 63 6f 64 65  Most of the code
05f0: 20 69 6e 20 74 68 69 73 20 66 69 6c 65 20 69 73   in this file is
0600: 20 74 61 6b 65 6e 20 75 70 20 62 79 20 74 68 65   taken up by the
0610: 20 73 71 6c 69 74 65 33 56 64 62 65 45 78 65 63   sqlite3VdbeExec
0620: 28 29 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 20 77  ().** function w
0630: 68 69 63 68 20 64 6f 65 73 20 74 68 65 20 77 6f  hich does the wo
0640: 72 6b 20 6f 66 20 69 6e 74 65 72 70 72 65 74 69  rk of interpreti
0650: 6e 67 20 61 20 56 44 42 45 20 70 72 6f 67 72 61  ng a VDBE progra
0660: 6d 2e 0a 2a 2a 20 42 75 74 20 6f 74 68 65 72 20  m..** But other 
0670: 72 6f 75 74 69 6e 65 73 20 61 72 65 20 61 6c 73  routines are als
0680: 6f 20 70 72 6f 76 69 64 65 64 20 74 6f 20 68 65  o provided to he
0690: 6c 70 20 69 6e 20 62 75 69 6c 64 69 6e 67 20 75  lp in building u
06a0: 70 0a 2a 2a 20 61 20 70 72 6f 67 72 61 6d 20 69  p.** a program i
06b0: 6e 73 74 72 75 63 74 69 6f 6e 20 62 79 20 69 6e  nstruction by in
06c0: 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  struction..**.**
06d0: 20 56 61 72 69 6f 75 73 20 73 63 72 69 70 74 73   Various scripts
06e0: 20 73 63 61 6e 20 74 68 69 73 20 73 6f 75 72 63   scan this sourc
06f0: 65 20 66 69 6c 65 20 69 6e 20 6f 72 64 65 72 20  e file in order 
0700: 74 6f 20 67 65 6e 65 72 61 74 65 20 48 54 4d 4c  to generate HTML
0710: 0a 2a 2a 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  .** documentatio
0720: 6e 2c 20 68 65 61 64 65 72 73 20 66 69 6c 65 73  n, headers files
0730: 2c 20 6f 72 20 6f 74 68 65 72 20 64 65 72 69 76  , or other deriv
0740: 65 64 20 66 69 6c 65 73 2e 20 20 54 68 65 20 66  ed files.  The f
0750: 6f 72 6d 61 74 74 69 6e 67 0a 2a 2a 20 6f 66 20  ormatting.** of 
0760: 74 68 65 20 63 6f 64 65 20 69 6e 20 74 68 69 73  the code in this
0770: 20 66 69 6c 65 20 69 73 2c 20 74 68 65 72 65 66   file is, theref
0780: 6f 72 65 2c 20 69 6d 70 6f 72 74 61 6e 74 2e 20  ore, important. 
0790: 20 53 65 65 20 6f 74 68 65 72 20 63 6f 6d 6d 65   See other comme
07a0: 6e 74 73 0a 2a 2a 20 69 6e 20 74 68 69 73 20 66  nts.** in this f
07b0: 69 6c 65 20 66 6f 72 20 64 65 74 61 69 6c 73 2e  ile for details.
07c0: 20 20 49 66 20 69 6e 20 64 6f 75 62 74 2c 20 64    If in doubt, d
07d0: 6f 20 6e 6f 74 20 64 65 76 69 61 74 65 20 66 72  o not deviate fr
07e0: 6f 6d 20 65 78 69 73 74 69 6e 67 0a 2a 2a 20 63  om existing.** c
07f0: 6f 6d 6d 65 6e 74 69 6e 67 20 61 6e 64 20 69 6e  ommenting and in
0800: 64 65 6e 74 61 74 69 6f 6e 20 70 72 61 63 74 69  dentation practi
0810: 63 65 73 20 77 68 65 6e 20 63 68 61 6e 67 69 6e  ces when changin
0820: 67 20 6f 72 20 61 64 64 69 6e 67 20 63 6f 64 65  g or adding code
0830: 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 73  ..*/.#include "s
0840: 71 6c 69 74 65 49 6e 74 2e 68 22 0a 23 69 6e 63  qliteInt.h".#inc
0850: 6c 75 64 65 20 22 76 64 62 65 49 6e 74 2e 68 22  lude "vdbeInt.h"
0860: 0a 0a 2f 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 74  ../*.** Invoke t
0870: 68 69 73 20 6d 61 63 72 6f 20 6f 6e 20 6d 65 6d  his macro on mem
0880: 6f 72 79 20 63 65 6c 6c 73 20 6a 75 73 74 20 70  ory cells just p
0890: 72 69 6f 72 20 74 6f 20 63 68 61 6e 67 69 6e 67  rior to changing
08a0: 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 6f 66   the.** value of
08b0: 20 74 68 65 20 63 65 6c 6c 2e 20 20 54 68 69 73   the cell.  This
08c0: 20 6d 61 63 72 6f 20 76 65 72 69 66 69 65 73 20   macro verifies 
08d0: 74 68 61 74 20 73 68 61 6c 6c 6f 77 20 63 6f 70  that shallow cop
08e0: 69 65 73 20 61 72 65 0a 2a 2a 20 6e 6f 74 20 6d  ies are.** not m
08f0: 69 73 75 73 65 64 2e 0a 2a 2f 0a 23 69 66 64 65  isused..*/.#ifde
0900: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 23  f SQLITE_DEBUG.#
0910: 20 64 65 66 69 6e 65 20 6d 65 6d 41 62 6f 75 74   define memAbout
0920: 54 6f 43 68 61 6e 67 65 28 50 2c 4d 29 20 73 71  ToChange(P,M) sq
0930: 6c 69 74 65 33 56 64 62 65 4d 65 6d 50 72 65 70  lite3VdbeMemPrep
0940: 61 72 65 54 6f 43 68 61 6e 67 65 28 50 2c 4d 29  areToChange(P,M)
0950: 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
0960: 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
0970: 28 50 2c 4d 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  (P,M).#endif../*
0980: 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
0990: 67 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c  g global variabl
09a0: 65 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64  e is incremented
09b0: 20 65 76 65 72 79 20 74 69 6d 65 20 61 20 63 75   every time a cu
09c0: 72 73 6f 72 0a 2a 2a 20 6d 6f 76 65 73 2c 20 65  rsor.** moves, e
09d0: 69 74 68 65 72 20 62 79 20 74 68 65 20 4f 50 5f  ither by the OP_
09e0: 53 65 65 6b 58 58 2c 20 4f 50 5f 4e 65 78 74 2c  SeekXX, OP_Next,
09f0: 20 6f 72 20 4f 50 5f 50 72 65 76 20 6f 70 63 6f   or OP_Prev opco
0a00: 64 65 73 2e 20 20 54 68 65 20 74 65 73 74 0a 2a  des.  The test.*
0a10: 2a 20 70 72 6f 63 65 64 75 72 65 73 20 75 73 65  * procedures use
0a20: 20 74 68 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f   this informatio
0a30: 6e 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 74  n to make sure t
0a40: 68 61 74 20 69 6e 64 69 63 65 73 20 61 72 65 0a  hat indices are.
0a50: 2a 2a 20 77 6f 72 6b 69 6e 67 20 63 6f 72 72 65  ** working corre
0a60: 63 74 6c 79 2e 20 20 54 68 69 73 20 76 61 72 69  ctly.  This vari
0a70: 61 62 6c 65 20 68 61 73 20 6e 6f 20 66 75 6e 63  able has no func
0a80: 74 69 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20  tion other than 
0a90: 74 6f 0a 2a 2a 20 68 65 6c 70 20 76 65 72 69 66  to.** help verif
0aa0: 79 20 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70  y the correct op
0ab0: 65 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c  eration of the l
0ac0: 69 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65  ibrary..*/.#ifde
0ad0: 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e  f SQLITE_TEST.in
0ae0: 74 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68  t sqlite3_search
0af0: 5f 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64  _count = 0;.#end
0b00: 69 66 0a 0a 2f 2a 0a 2a 2a 20 57 68 65 6e 20 74  if../*.** When t
0b10: 68 69 73 20 67 6c 6f 62 61 6c 20 76 61 72 69 61  his global varia
0b20: 62 6c 65 20 69 73 20 70 6f 73 69 74 69 76 65 2c  ble is positive,
0b30: 20 69 74 20 67 65 74 73 20 64 65 63 72 65 6d 65   it gets decreme
0b40: 6e 74 65 64 20 6f 6e 63 65 20 62 65 66 6f 72 65  nted once before
0b50: 0a 2a 2a 20 65 61 63 68 20 69 6e 73 74 72 75 63  .** each instruc
0b60: 74 69 6f 6e 20 69 6e 20 74 68 65 20 56 44 42 45  tion in the VDBE
0b70: 2e 20 20 57 68 65 6e 20 72 65 61 63 68 65 73 20  .  When reaches 
0b80: 7a 65 72 6f 2c 20 74 68 65 20 75 31 2e 69 73 49  zero, the u1.isI
0b90: 6e 74 65 72 72 75 70 74 65 64 0a 2a 2a 20 66 69  nterrupted.** fi
0ba0: 65 6c 64 20 6f 66 20 74 68 65 20 73 71 6c 69 74  eld of the sqlit
0bb0: 65 33 20 73 74 72 75 63 74 75 72 65 20 69 73 20  e3 structure is 
0bc0: 73 65 74 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  set in order to 
0bd0: 73 69 6d 75 6c 61 74 65 20 61 6e 64 20 69 6e 74  simulate and int
0be0: 65 72 72 75 70 74 2e 0a 2a 2a 0a 2a 2a 20 54 68  errupt..**.** Th
0bf0: 69 73 20 66 61 63 69 6c 69 74 79 20 69 73 20 75  is facility is u
0c00: 73 65 64 20 66 6f 72 20 74 65 73 74 69 6e 67 20  sed for testing 
0c10: 70 75 72 70 6f 73 65 73 20 6f 6e 6c 79 2e 20 20  purposes only.  
0c20: 49 74 20 64 6f 65 73 20 6e 6f 74 20 66 75 6e 63  It does not func
0c30: 74 69 6f 6e 0a 2a 2a 20 69 6e 20 61 6e 20 6f 72  tion.** in an or
0c40: 64 69 6e 61 72 79 20 62 75 69 6c 64 2e 0a 2a 2f  dinary build..*/
0c50: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54  .#ifdef SQLITE_T
0c60: 45 53 54 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f  EST.int sqlite3_
0c70: 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74 20  interrupt_count 
0c80: 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  = 0;.#endif../*.
0c90: 2a 2a 20 54 68 65 20 6e 65 78 74 20 67 6c 6f 62  ** The next glob
0ca0: 61 6c 20 76 61 72 69 61 62 6c 65 20 69 73 20 69  al variable is i
0cb0: 6e 63 72 65 6d 65 6e 74 65 64 20 65 61 63 68 20  ncremented each 
0cc0: 74 79 70 65 20 74 68 65 20 4f 50 5f 53 6f 72 74  type the OP_Sort
0cd0: 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 65 78   opcode.** is ex
0ce0: 65 63 75 74 65 64 2e 20 20 54 68 65 20 74 65 73  ecuted.  The tes
0cf0: 74 20 70 72 6f 63 65 64 75 72 65 73 20 75 73 65  t procedures use
0d00: 20 74 68 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f   this informatio
0d10: 6e 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 74  n to make sure t
0d20: 68 61 74 0a 2a 2a 20 73 6f 72 74 69 6e 67 20 69  hat.** sorting i
0d30: 73 20 6f 63 63 75 72 72 69 6e 67 20 6f 72 20 6e  s occurring or n
0d40: 6f 74 20 6f 63 63 75 72 72 69 6e 67 20 61 74 20  ot occurring at 
0d50: 61 70 70 72 6f 70 72 69 61 74 65 20 74 69 6d 65  appropriate time
0d60: 73 2e 20 20 20 54 68 69 73 20 76 61 72 69 61 62  s.   This variab
0d70: 6c 65 0a 2a 2a 20 68 61 73 20 6e 6f 20 66 75 6e  le.** has no fun
0d80: 63 74 69 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e  ction other than
0d90: 20 74 6f 20 68 65 6c 70 20 76 65 72 69 66 79 20   to help verify 
0da0: 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65 72  the correct oper
0db0: 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20  ation of the.** 
0dc0: 6c 69 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64  library..*/.#ifd
0dd0: 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 69  ef SQLITE_TEST.i
0de0: 6e 74 20 73 71 6c 69 74 65 33 5f 73 6f 72 74 5f  nt sqlite3_sort_
0df0: 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64 69  count = 0;.#endi
0e00: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 65 78  f../*.** The nex
0e10: 74 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c  t global variabl
0e20: 65 20 72 65 63 6f 72 64 73 20 74 68 65 20 73 69  e records the si
0e30: 7a 65 20 6f 66 20 74 68 65 20 6c 61 72 67 65 73  ze of the larges
0e40: 74 20 4d 45 4d 5f 42 6c 6f 62 0a 2a 2a 20 6f 72  t MEM_Blob.** or
0e50: 20 4d 45 4d 5f 53 74 72 20 74 68 61 74 20 68 61   MEM_Str that ha
0e60: 73 20 62 65 65 6e 20 75 73 65 64 20 62 79 20 61  s been used by a
0e70: 20 56 44 42 45 20 6f 70 63 6f 64 65 2e 20 20 54   VDBE opcode.  T
0e80: 68 65 20 74 65 73 74 20 70 72 6f 63 65 64 75 72  he test procedur
0e90: 65 73 0a 2a 2a 20 75 73 65 20 74 68 69 73 20 69  es.** use this i
0ea0: 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 6f 20 6d 61  nformation to ma
0eb0: 6b 65 20 73 75 72 65 20 74 68 61 74 20 74 68 65  ke sure that the
0ec0: 20 7a 65 72 6f 2d 62 6c 6f 62 20 66 75 6e 63 74   zero-blob funct
0ed0: 69 6f 6e 61 6c 69 74 79 0a 2a 2a 20 69 73 20 77  ionality.** is w
0ee0: 6f 72 6b 69 6e 67 20 63 6f 72 72 65 63 74 6c 79  orking correctly
0ef0: 2e 20 20 20 54 68 69 73 20 76 61 72 69 61 62 6c  .   This variabl
0f00: 65 20 68 61 73 20 6e 6f 20 66 75 6e 63 74 69 6f  e has no functio
0f10: 6e 20 6f 74 68 65 72 20 74 68 61 6e 20 74 6f 0a  n other than to.
0f20: 2a 2a 20 68 65 6c 70 20 76 65 72 69 66 79 20 74  ** help verify t
0f30: 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65 72 61  he correct opera
0f40: 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c 69 62 72  tion of the libr
0f50: 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  ary..*/.#ifdef S
0f60: 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74 20 73  QLITE_TEST.int s
0f70: 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62 73  qlite3_max_blobs
0f80: 69 7a 65 20 3d 20 30 3b 0a 73 74 61 74 69 63 20  ize = 0;.static 
0f90: 76 6f 69 64 20 75 70 64 61 74 65 4d 61 78 42 6c  void updateMaxBl
0fa0: 6f 62 73 69 7a 65 28 4d 65 6d 20 2a 70 29 7b 0a  obsize(Mem *p){.
0fb0: 20 20 69 66 28 20 28 70 2d 3e 66 6c 61 67 73 20    if( (p->flags 
0fc0: 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42  & (MEM_Str|MEM_B
0fd0: 6c 6f 62 29 29 21 3d 30 20 26 26 20 70 2d 3e 6e  lob))!=0 && p->n
0fe0: 3e 73 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f  >sqlite3_max_blo
0ff0: 62 73 69 7a 65 20 29 7b 0a 20 20 20 20 73 71 6c  bsize ){.    sql
1000: 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62 73 69 7a  ite3_max_blobsiz
1010: 65 20 3d 20 70 2d 3e 6e 3b 0a 20 20 7d 0a 7d 0a  e = p->n;.  }.}.
1020: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
1030: 65 20 6e 65 78 74 20 67 6c 6f 62 61 6c 20 76 61  e next global va
1040: 72 69 61 62 6c 65 20 69 73 20 69 6e 63 72 65 6d  riable is increm
1050: 65 6e 74 65 64 20 65 61 63 68 20 74 79 70 65 20  ented each type 
1060: 74 68 65 20 4f 50 5f 46 6f 75 6e 64 20 6f 70 63  the OP_Found opc
1070: 6f 64 65 0a 2a 2a 20 69 73 20 65 78 65 63 75 74  ode.** is execut
1080: 65 64 2e 20 54 68 69 73 20 69 73 20 75 73 65 64  ed. This is used
1090: 20 74 6f 20 74 65 73 74 20 77 68 65 74 68 65 72   to test whether
10a0: 20 6f 72 20 6e 6f 74 20 74 68 65 20 66 6f 72 65   or not the fore
10b0: 69 67 6e 20 6b 65 79 0a 2a 2a 20 6f 70 65 72 61  ign key.** opera
10c0: 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 65 64  tion implemented
10d0: 20 75 73 69 6e 67 20 4f 50 5f 46 6b 49 73 5a 65   using OP_FkIsZe
10e0: 72 6f 20 69 73 20 77 6f 72 6b 69 6e 67 2e 20 54  ro is working. T
10f0: 68 69 73 20 76 61 72 69 61 62 6c 65 0a 2a 2a 20  his variable.** 
1100: 68 61 73 20 6e 6f 20 66 75 6e 63 74 69 6f 6e 20  has no function 
1110: 6f 74 68 65 72 20 74 68 61 6e 20 74 6f 20 68 65  other than to he
1120: 6c 70 20 76 65 72 69 66 79 20 74 68 65 20 63 6f  lp verify the co
1130: 72 72 65 63 74 20 6f 70 65 72 61 74 69 6f 6e 20  rrect operation 
1140: 6f 66 20 74 68 65 0a 2a 2a 20 6c 69 62 72 61 72  of the.** librar
1150: 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  y..*/.#ifdef SQL
1160: 49 54 45 5f 54 45 53 54 0a 69 6e 74 20 73 71 6c  ITE_TEST.int sql
1170: 69 74 65 33 5f 66 6f 75 6e 64 5f 63 6f 75 6e 74  ite3_found_count
1180: 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a   = 0;.#endif../*
1190: 0a 2a 2a 20 54 65 73 74 20 61 20 72 65 67 69 73  .** Test a regis
11a0: 74 65 72 20 74 6f 20 73 65 65 20 69 66 20 69 74  ter to see if it
11b0: 20 65 78 63 65 65 64 73 20 74 68 65 20 63 75 72   exceeds the cur
11c0: 72 65 6e 74 20 6d 61 78 69 6d 75 6d 20 62 6c 6f  rent maximum blo
11d0: 62 20 73 69 7a 65 2e 0a 2a 2a 20 49 66 20 69 74  b size..** If it
11e0: 20 64 6f 65 73 2c 20 72 65 63 6f 72 64 20 74 68   does, record th
11f0: 65 20 6e 65 77 20 6d 61 78 69 6d 75 6d 20 62 6c  e new maximum bl
1200: 6f 62 20 73 69 7a 65 2e 0a 2a 2f 0a 23 69 66 20  ob size..*/.#if 
1210: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54  defined(SQLITE_T
1220: 45 53 54 29 20 26 26 20 21 64 65 66 69 6e 65 64  EST) && !defined
1230: 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49  (SQLITE_OMIT_BUI
1240: 4c 54 49 4e 5f 54 45 53 54 29 0a 23 20 64 65 66  LTIN_TEST).# def
1250: 69 6e 65 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  ine UPDATE_MAX_B
1260: 4c 4f 42 53 49 5a 45 28 50 29 20 20 75 70 64 61  LOBSIZE(P)  upda
1270: 74 65 4d 61 78 42 6c 6f 62 73 69 7a 65 28 50 29  teMaxBlobsize(P)
1280: 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
1290: 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53  UPDATE_MAX_BLOBS
12a0: 49 5a 45 28 50 29 0a 23 65 6e 64 69 66 0a 0a 2f  IZE(P).#endif../
12b0: 2a 0a 2a 2a 20 43 6f 6e 76 65 72 74 20 74 68 65  *.** Convert the
12c0: 20 67 69 76 65 6e 20 72 65 67 69 73 74 65 72 20   given register 
12d0: 69 6e 74 6f 20 61 20 73 74 72 69 6e 67 20 69 66  into a string if
12e0: 20 69 74 20 69 73 6e 27 74 20 6f 6e 65 0a 2a 2a   it isn't one.**
12f0: 20 61 6c 72 65 61 64 79 2e 20 52 65 74 75 72 6e   already. Return
1300: 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 61 20 6d   non-zero if a m
1310: 61 6c 6c 6f 63 28 29 20 66 61 69 6c 73 2e 0a 2a  alloc() fails..*
1320: 2f 0a 23 64 65 66 69 6e 65 20 53 74 72 69 6e 67  /.#define String
1330: 69 66 79 28 50 2c 20 65 6e 63 29 20 5c 0a 20 20  ify(P, enc) \.  
1340: 20 69 66 28 28 28 50 29 2d 3e 66 6c 61 67 73 26   if(((P)->flags&
1350: 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f  (MEM_Str|MEM_Blo
1360: 62 29 29 3d 3d 30 20 26 26 20 73 71 6c 69 74 65  b))==0 && sqlite
1370: 33 56 64 62 65 4d 65 6d 53 74 72 69 6e 67 69 66  3VdbeMemStringif
1380: 79 28 50 2c 65 6e 63 29 29 20 5c 0a 20 20 20 20  y(P,enc)) \.    
1390: 20 7b 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 20   { goto no_mem; 
13a0: 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 65 70 68 65  }../*.** An ephe
13b0: 6d 65 72 61 6c 20 73 74 72 69 6e 67 20 76 61 6c  meral string val
13c0: 75 65 20 28 73 69 67 6e 69 66 69 65 64 20 62 79  ue (signified by
13d0: 20 74 68 65 20 4d 45 4d 5f 45 70 68 65 6d 20 66   the MEM_Ephem f
13e0: 6c 61 67 29 20 63 6f 6e 74 61 69 6e 73 0a 2a 2a  lag) contains.**
13f0: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20   a pointer to a 
1400: 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f  dynamically allo
1410: 63 61 74 65 64 20 73 74 72 69 6e 67 20 77 68 65  cated string whe
1420: 72 65 20 73 6f 6d 65 20 6f 74 68 65 72 20 65 6e  re some other en
1430: 74 69 74 79 0a 2a 2a 20 69 73 20 72 65 73 70 6f  tity.** is respo
1440: 6e 73 69 62 6c 65 20 66 6f 72 20 64 65 61 6c 6c  nsible for deall
1450: 6f 63 61 74 69 6e 67 20 74 68 61 74 20 73 74 72  ocating that str
1460: 69 6e 67 2e 20 20 42 65 63 61 75 73 65 20 74 68  ing.  Because th
1470: 65 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 64 6f  e register.** do
1480: 65 73 20 6e 6f 74 20 63 6f 6e 74 72 6f 6c 20 74  es not control t
1490: 68 65 20 73 74 72 69 6e 67 2c 20 69 74 20 6d 69  he string, it mi
14a0: 67 68 74 20 62 65 20 64 65 6c 65 74 65 64 20 77  ght be deleted w
14b0: 69 74 68 6f 75 74 20 74 68 65 20 72 65 67 69 73  ithout the regis
14c0: 74 65 72 0a 2a 2a 20 6b 6e 6f 77 69 6e 67 20 69  ter.** knowing i
14d0: 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 72 6f  t..**.** This ro
14e0: 75 74 69 6e 65 20 63 6f 6e 76 65 72 74 73 20 61  utine converts a
14f0: 6e 20 65 70 68 65 6d 65 72 61 6c 20 73 74 72 69  n ephemeral stri
1500: 6e 67 20 69 6e 74 6f 20 61 20 64 79 6e 61 6d 69  ng into a dynami
1510: 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 0a  cally allocated.
1520: 2a 2a 20 73 74 72 69 6e 67 20 74 68 61 74 20 74  ** string that t
1530: 68 65 20 72 65 67 69 73 74 65 72 20 69 74 73 65  he register itse
1540: 6c 66 20 63 6f 6e 74 72 6f 6c 73 2e 20 20 49 6e  lf controls.  In
1550: 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 69 74   other words, it
1560: 0a 2a 2a 20 63 6f 6e 76 65 72 74 73 20 61 6e 20  .** converts an 
1570: 4d 45 4d 5f 45 70 68 65 6d 20 73 74 72 69 6e 67  MEM_Ephem string
1580: 20 69 6e 74 6f 20 61 6e 20 4d 45 4d 5f 44 79 6e   into an MEM_Dyn
1590: 20 73 74 72 69 6e 67 2e 0a 2a 2f 0a 23 64 65 66   string..*/.#def
15a0: 69 6e 65 20 44 65 65 70 68 65 6d 65 72 61 6c 69  ine Deephemerali
15b0: 7a 65 28 50 29 20 5c 0a 20 20 20 69 66 28 20 28  ze(P) \.   if( (
15c0: 28 50 29 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 45  (P)->flags&MEM_E
15d0: 70 68 65 6d 29 21 3d 30 20 5c 0a 20 20 20 20 20  phem)!=0 \.     
15e0: 20 20 26 26 20 73 71 6c 69 74 65 33 56 64 62 65    && sqlite3Vdbe
15f0: 4d 65 6d 4d 61 6b 65 57 72 69 74 65 61 62 6c 65  MemMakeWriteable
1600: 28 50 29 20 29 7b 20 67 6f 74 6f 20 6e 6f 5f 6d  (P) ){ goto no_m
1610: 65 6d 3b 7d 0a 0a 2f 2a 0a 2a 2a 20 43 61 6c 6c  em;}../*.** Call
1620: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 45   sqlite3VdbeMemE
1630: 78 70 61 6e 64 42 6c 6f 62 28 29 20 6f 6e 20 74  xpandBlob() on t
1640: 68 65 20 73 75 70 70 6c 69 65 64 20 76 61 6c 75  he supplied valu
1650: 65 20 28 74 79 70 65 20 4d 65 6d 2a 29 0a 2a 2a  e (type Mem*).**
1660: 20 50 20 69 66 20 72 65 71 75 69 72 65 64 2e 0a   P if required..
1670: 2a 2f 0a 23 64 65 66 69 6e 65 20 45 78 70 61 6e  */.#define Expan
1680: 64 42 6c 6f 62 28 50 29 20 28 28 28 50 29 2d 3e  dBlob(P) (((P)->
1690: 66 6c 61 67 73 26 4d 45 4d 5f 5a 65 72 6f 29 3f  flags&MEM_Zero)?
16a0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 45 78  sqlite3VdbeMemEx
16b0: 70 61 6e 64 42 6c 6f 62 28 50 29 3a 30 29 0a 0a  pandBlob(P):0)..
16c0: 2f 2a 0a 2a 2a 20 41 72 67 75 6d 65 6e 74 20 70  /*.** Argument p
16d0: 4d 65 6d 20 70 6f 69 6e 74 73 20 61 74 20 61 20  Mem points at a 
16e0: 72 65 67 69 73 74 65 72 20 74 68 61 74 20 77 69  register that wi
16f0: 6c 6c 20 62 65 20 70 61 73 73 65 64 20 74 6f 20  ll be passed to 
1700: 61 0a 2a 2a 20 75 73 65 72 2d 64 65 66 69 6e 65  a.** user-define
1710: 64 20 66 75 6e 63 74 69 6f 6e 20 6f 72 20 72 65  d function or re
1720: 74 75 72 6e 65 64 20 74 6f 20 74 68 65 20 75 73  turned to the us
1730: 65 72 20 61 73 20 74 68 65 20 72 65 73 75 6c 74  er as the result
1740: 20 6f 66 20 61 20 71 75 65 72 79 2e 0a 2a 2a 20   of a query..** 
1750: 54 68 69 73 20 72 6f 75 74 69 6e 65 20 73 65 74  This routine set
1760: 73 20 74 68 65 20 70 4d 65 6d 2d 3e 74 79 70 65  s the pMem->type
1770: 20 76 61 72 69 61 62 6c 65 20 75 73 65 64 20 62   variable used b
1780: 79 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 61  y the sqlite3_va
1790: 6c 75 65 5f 2a 28 29 20 0a 2a 2a 20 72 6f 75 74  lue_*() .** rout
17a0: 69 6e 65 73 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71  ines..*/.void sq
17b0: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74 6f 72  lite3VdbeMemStor
17c0: 65 54 79 70 65 28 4d 65 6d 20 2a 70 4d 65 6d 29  eType(Mem *pMem)
17d0: 7b 0a 20 20 69 6e 74 20 66 6c 61 67 73 20 3d 20  {.  int flags = 
17e0: 70 4d 65 6d 2d 3e 66 6c 61 67 73 3b 0a 20 20 69  pMem->flags;.  i
17f0: 66 28 20 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  f( flags & MEM_N
1800: 75 6c 6c 20 29 7b 0a 20 20 20 20 70 4d 65 6d 2d  ull ){.    pMem-
1810: 3e 74 79 70 65 20 3d 20 53 51 4c 49 54 45 5f 4e  >type = SQLITE_N
1820: 55 4c 4c 3b 0a 20 20 7d 0a 20 20 65 6c 73 65 20  ULL;.  }.  else 
1830: 69 66 28 20 66 6c 61 67 73 20 26 20 4d 45 4d 5f  if( flags & MEM_
1840: 49 6e 74 20 29 7b 0a 20 20 20 20 70 4d 65 6d 2d  Int ){.    pMem-
1850: 3e 74 79 70 65 20 3d 20 53 51 4c 49 54 45 5f 49  >type = SQLITE_I
1860: 4e 54 45 47 45 52 3b 0a 20 20 7d 0a 20 20 65 6c  NTEGER;.  }.  el
1870: 73 65 20 69 66 28 20 66 6c 61 67 73 20 26 20 4d  se if( flags & M
1880: 45 4d 5f 52 65 61 6c 20 29 7b 0a 20 20 20 20 70  EM_Real ){.    p
1890: 4d 65 6d 2d 3e 74 79 70 65 20 3d 20 53 51 4c 49  Mem->type = SQLI
18a0: 54 45 5f 46 4c 4f 41 54 3b 0a 20 20 7d 0a 20 20  TE_FLOAT;.  }.  
18b0: 65 6c 73 65 20 69 66 28 20 66 6c 61 67 73 20 26  else if( flags &
18c0: 20 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20 20   MEM_Str ){.    
18d0: 70 4d 65 6d 2d 3e 74 79 70 65 20 3d 20 53 51 4c  pMem->type = SQL
18e0: 49 54 45 5f 54 45 58 54 3b 0a 20 20 7d 65 6c 73  ITE_TEXT;.  }els
18f0: 65 7b 0a 20 20 20 20 70 4d 65 6d 2d 3e 74 79 70  e{.    pMem->typ
1900: 65 20 3d 20 53 51 4c 49 54 45 5f 42 4c 4f 42 3b  e = SQLITE_BLOB;
1910: 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6c  .  }.}../*.** Al
1920: 6c 6f 63 61 74 65 20 56 64 62 65 43 75 72 73 6f  locate VdbeCurso
1930: 72 20 6e 75 6d 62 65 72 20 69 43 75 72 2e 20 20  r number iCur.  
1940: 52 65 74 75 72 6e 20 61 20 70 6f 69 6e 74 65 72  Return a pointer
1950: 20 74 6f 20 69 74 2e 20 20 52 65 74 75 72 6e 20   to it.  Return 
1960: 4e 55 4c 4c 0a 2a 2a 20 69 66 20 77 65 20 72 75  NULL.** if we ru
1970: 6e 20 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79 2e  n out of memory.
1980: 0a 2a 2f 0a 73 74 61 74 69 63 20 56 64 62 65 43  .*/.static VdbeC
1990: 75 72 73 6f 72 20 2a 61 6c 6c 6f 63 61 74 65 43  ursor *allocateC
19a0: 75 72 73 6f 72 28 0a 20 20 56 64 62 65 20 2a 70  ursor(.  Vdbe *p
19b0: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ,              /
19c0: 2a 20 54 68 65 20 76 69 72 74 75 61 6c 20 6d 61  * The virtual ma
19d0: 63 68 69 6e 65 20 2a 2f 0a 20 20 69 6e 74 20 69  chine */.  int i
19e0: 43 75 72 2c 20 20 20 20 20 20 20 20 20 20 20 20  Cur,            
19f0: 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20 74 68 65   /* Index of the
1a00: 20 6e 65 77 20 56 64 62 65 43 75 72 73 6f 72 20   new VdbeCursor 
1a10: 2a 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 2c  */.  int nField,
1a20: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1a30: 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20 69  mber of fields i
1a40: 6e 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69  n the table or i
1a50: 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 69 44  ndex */.  int iD
1a60: 62 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  b,              
1a70: 2f 2a 20 57 68 65 6e 20 64 61 74 61 62 61 73 65  /* When database
1a80: 20 74 68 65 20 63 75 72 73 6f 72 20 62 65 6c 6f   the cursor belo
1a90: 6e 67 73 20 74 6f 2c 20 6f 72 20 2d 31 20 2a 2f  ngs to, or -1 */
1aa0: 0a 20 20 69 6e 74 20 69 73 42 74 72 65 65 43 75  .  int isBtreeCu
1ab0: 72 73 6f 72 20 20 20 20 20 2f 2a 20 54 72 75 65  rsor     /* True
1ac0: 20 66 6f 72 20 42 2d 54 72 65 65 2e 20 20 46 61   for B-Tree.  Fa
1ad0: 6c 73 65 20 66 6f 72 20 70 73 65 75 64 6f 2d 74  lse for pseudo-t
1ae0: 61 62 6c 65 20 6f 72 20 76 74 61 62 20 2a 2f 0a  able or vtab */.
1af0: 29 7b 0a 20 20 2f 2a 20 46 69 6e 64 20 74 68 65  ){.  /* Find the
1b00: 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74 68 61   memory cell tha
1b10: 74 20 77 69 6c 6c 20 62 65 20 75 73 65 64 20 74  t will be used t
1b20: 6f 20 73 74 6f 72 65 20 74 68 65 20 62 6c 6f 62  o store the blob
1b30: 20 6f 66 20 6d 65 6d 6f 72 79 0a 20 20 2a 2a 20   of memory.  ** 
1b40: 72 65 71 75 69 72 65 64 20 66 6f 72 20 74 68 69  required for thi
1b50: 73 20 56 64 62 65 43 75 72 73 6f 72 20 73 74 72  s VdbeCursor str
1b60: 75 63 74 75 72 65 2e 20 49 74 20 69 73 20 63 6f  ucture. It is co
1b70: 6e 76 65 6e 69 65 6e 74 20 74 6f 20 75 73 65 20  nvenient to use 
1b80: 61 20 0a 20 20 2a 2a 20 76 64 62 65 20 6d 65 6d  a .  ** vdbe mem
1b90: 6f 72 79 20 63 65 6c 6c 20 74 6f 20 6d 61 6e 61  ory cell to mana
1ba0: 67 65 20 74 68 65 20 6d 65 6d 6f 72 79 20 61 6c  ge the memory al
1bb0: 6c 6f 63 61 74 69 6f 6e 20 72 65 71 75 69 72 65  location require
1bc0: 64 20 66 6f 72 20 61 0a 20 20 2a 2a 20 56 64 62  d for a.  ** Vdb
1bd0: 65 43 75 72 73 6f 72 20 73 74 72 75 63 74 75 72  eCursor structur
1be0: 65 20 66 6f 72 20 74 68 65 20 66 6f 6c 6c 6f 77  e for the follow
1bf0: 69 6e 67 20 72 65 61 73 6f 6e 73 3a 0a 20 20 2a  ing reasons:.  *
1c00: 2a 0a 20 20 2a 2a 20 20 20 2a 20 53 6f 6d 65 74  *.  **   * Somet
1c10: 69 6d 65 73 20 63 75 72 73 6f 72 20 6e 75 6d 62  imes cursor numb
1c20: 65 72 73 20 61 72 65 20 75 73 65 64 20 66 6f 72  ers are used for
1c30: 20 61 20 63 6f 75 70 6c 65 20 6f 66 20 64 69 66   a couple of dif
1c40: 66 65 72 65 6e 74 0a 20 20 2a 2a 20 20 20 20 20  ferent.  **     
1c50: 70 75 72 70 6f 73 65 73 20 69 6e 20 61 20 76 64  purposes in a vd
1c60: 62 65 20 70 72 6f 67 72 61 6d 2e 20 54 68 65 20  be program. The 
1c70: 64 69 66 66 65 72 65 6e 74 20 75 73 65 73 20 6d  different uses m
1c80: 69 67 68 74 20 72 65 71 75 69 72 65 0a 20 20 2a  ight require.  *
1c90: 2a 20 20 20 20 20 64 69 66 66 65 72 65 6e 74 20  *     different 
1ca0: 73 69 7a 65 64 20 61 6c 6c 6f 63 61 74 69 6f 6e  sized allocation
1cb0: 73 2e 20 4d 65 6d 6f 72 79 20 63 65 6c 6c 73 20  s. Memory cells 
1cc0: 70 72 6f 76 69 64 65 20 67 72 6f 77 61 62 6c 65  provide growable
1cd0: 0a 20 20 2a 2a 20 20 20 20 20 61 6c 6c 6f 63 61  .  **     alloca
1ce0: 74 69 6f 6e 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a  tions..  **.  **
1cf0: 20 20 20 2a 20 57 68 65 6e 20 75 73 69 6e 67 20     * When using 
1d00: 45 4e 41 42 4c 45 5f 4d 45 4d 4f 52 59 5f 4d 41  ENABLE_MEMORY_MA
1d10: 4e 41 47 45 4d 45 4e 54 2c 20 6d 65 6d 6f 72 79  NAGEMENT, memory
1d20: 20 63 65 6c 6c 20 62 75 66 66 65 72 73 20 63 61   cell buffers ca
1d30: 6e 0a 20 20 2a 2a 20 20 20 20 20 62 65 20 66 72  n.  **     be fr
1d40: 65 65 64 20 6c 61 7a 69 6c 79 20 76 69 61 20 74  eed lazily via t
1d50: 68 65 20 73 71 6c 69 74 65 33 5f 72 65 6c 65 61  he sqlite3_relea
1d60: 73 65 5f 6d 65 6d 6f 72 79 28 29 20 41 50 49 2e  se_memory() API.
1d70: 20 54 68 69 73 0a 20 20 2a 2a 20 20 20 20 20 6d   This.  **     m
1d80: 69 6e 69 6d 69 7a 65 73 20 74 68 65 20 6e 75 6d  inimizes the num
1d90: 62 65 72 20 6f 66 20 6d 61 6c 6c 6f 63 20 63 61  ber of malloc ca
1da0: 6c 6c 73 20 6d 61 64 65 20 62 79 20 74 68 65 20  lls made by the 
1db0: 73 79 73 74 65 6d 2e 0a 20 20 2a 2a 0a 20 20 2a  system..  **.  *
1dc0: 2a 20 4d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 66  * Memory cells f
1dd0: 6f 72 20 63 75 72 73 6f 72 73 20 61 72 65 20 61  or cursors are a
1de0: 6c 6c 6f 63 61 74 65 64 20 61 74 20 74 68 65 20  llocated at the 
1df0: 74 6f 70 20 6f 66 20 74 68 65 20 61 64 64 72 65  top of the addre
1e00: 73 73 0a 20 20 2a 2a 20 73 70 61 63 65 2e 20 4d  ss.  ** space. M
1e10: 65 6d 6f 72 79 20 63 65 6c 6c 20 28 70 2d 3e 6e  emory cell (p->n
1e20: 4d 65 6d 29 20 63 6f 72 72 65 73 70 6f 6e 64 73  Mem) corresponds
1e30: 20 74 6f 20 63 75 72 73 6f 72 20 30 2e 20 53 70   to cursor 0. Sp
1e40: 61 63 65 20 66 6f 72 0a 20 20 2a 2a 20 63 75 72  ace for.  ** cur
1e50: 73 6f 72 20 31 20 69 73 20 6d 61 6e 61 67 65 64  sor 1 is managed
1e60: 20 62 79 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20   by memory cell 
1e70: 28 70 2d 3e 6e 4d 65 6d 2d 31 29 2c 20 65 74 63  (p->nMem-1), etc
1e80: 2e 0a 20 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d  ..  */.  Mem *pM
1e90: 65 6d 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 2d  em = &p->aMem[p-
1ea0: 3e 6e 4d 65 6d 2d 69 43 75 72 5d 3b 0a 0a 20 20  >nMem-iCur];..  
1eb0: 69 6e 74 20 6e 42 79 74 65 3b 0a 20 20 56 64 62  int nByte;.  Vdb
1ec0: 65 43 75 72 73 6f 72 20 2a 70 43 78 20 3d 20 30  eCursor *pCx = 0
1ed0: 3b 0a 20 20 6e 42 79 74 65 20 3d 20 0a 20 20 20  ;.  nByte = .   
1ee0: 20 20 20 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66     ROUND8(sizeof
1ef0: 28 56 64 62 65 43 75 72 73 6f 72 29 29 20 2b 20  (VdbeCursor)) + 
1f00: 0a 20 20 20 20 20 20 28 69 73 42 74 72 65 65 43  .      (isBtreeC
1f10: 75 72 73 6f 72 3f 73 71 6c 69 74 65 33 42 74 72  ursor?sqlite3Btr
1f20: 65 65 43 75 72 73 6f 72 53 69 7a 65 28 29 3a 30  eeCursorSize():0
1f30: 29 20 2b 20 0a 20 20 20 20 20 20 32 2a 6e 46 69  ) + .      2*nFi
1f40: 65 6c 64 2a 73 69 7a 65 6f 66 28 75 33 32 29 3b  eld*sizeof(u32);
1f50: 0a 0a 20 20 61 73 73 65 72 74 28 20 69 43 75 72  ..  assert( iCur
1f60: 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
1f70: 20 69 66 28 20 70 2d 3e 61 70 43 73 72 5b 69 43   if( p->apCsr[iC
1f80: 75 72 5d 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  ur] ){.    sqlit
1f90: 65 33 56 64 62 65 46 72 65 65 43 75 72 73 6f 72  e3VdbeFreeCursor
1fa0: 28 70 2c 20 70 2d 3e 61 70 43 73 72 5b 69 43 75  (p, p->apCsr[iCu
1fb0: 72 5d 29 3b 0a 20 20 20 20 70 2d 3e 61 70 43 73  r]);.    p->apCs
1fc0: 72 5b 69 43 75 72 5d 20 3d 20 30 3b 0a 20 20 7d  r[iCur] = 0;.  }
1fd0: 0a 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b  .  if( SQLITE_OK
1fe0: 3d 3d 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  ==sqlite3VdbeMem
1ff0: 47 72 6f 77 28 70 4d 65 6d 2c 20 6e 42 79 74 65  Grow(pMem, nByte
2000: 2c 20 30 29 20 29 7b 0a 20 20 20 20 70 2d 3e 61  , 0) ){.    p->a
2010: 70 43 73 72 5b 69 43 75 72 5d 20 3d 20 70 43 78  pCsr[iCur] = pCx
2020: 20 3d 20 28 56 64 62 65 43 75 72 73 6f 72 2a 29   = (VdbeCursor*)
2030: 70 4d 65 6d 2d 3e 7a 3b 0a 20 20 20 20 6d 65 6d  pMem->z;.    mem
2040: 73 65 74 28 70 43 78 2c 20 30 2c 20 73 69 7a 65  set(pCx, 0, size
2050: 6f 66 28 56 64 62 65 43 75 72 73 6f 72 29 29 3b  of(VdbeCursor));
2060: 0a 20 20 20 20 70 43 78 2d 3e 69 44 62 20 3d 20  .    pCx->iDb = 
2070: 69 44 62 3b 0a 20 20 20 20 70 43 78 2d 3e 6e 46  iDb;.    pCx->nF
2080: 69 65 6c 64 20 3d 20 6e 46 69 65 6c 64 3b 0a 20  ield = nField;. 
2090: 20 20 20 69 66 28 20 6e 46 69 65 6c 64 20 29 7b     if( nField ){
20a0: 0a 20 20 20 20 20 20 70 43 78 2d 3e 61 54 79 70  .      pCx->aTyp
20b0: 65 20 3d 20 28 75 33 32 20 2a 29 26 70 4d 65 6d  e = (u32 *)&pMem
20c0: 2d 3e 7a 5b 52 4f 55 4e 44 38 28 73 69 7a 65 6f  ->z[ROUND8(sizeo
20d0: 66 28 56 64 62 65 43 75 72 73 6f 72 29 29 5d 3b  f(VdbeCursor))];
20e0: 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 69  .    }.    if( i
20f0: 73 42 74 72 65 65 43 75 72 73 6f 72 20 29 7b 0a  sBtreeCursor ){.
2100: 20 20 20 20 20 20 70 43 78 2d 3e 70 43 75 72 73        pCx->pCurs
2110: 6f 72 20 3d 20 28 42 74 43 75 72 73 6f 72 2a 29  or = (BtCursor*)
2120: 0a 20 20 20 20 20 20 20 20 20 20 26 70 4d 65 6d  .          &pMem
2130: 2d 3e 7a 5b 52 4f 55 4e 44 38 28 73 69 7a 65 6f  ->z[ROUND8(sizeo
2140: 66 28 56 64 62 65 43 75 72 73 6f 72 29 29 2b 32  f(VdbeCursor))+2
2150: 2a 6e 46 69 65 6c 64 2a 73 69 7a 65 6f 66 28 75  *nField*sizeof(u
2160: 33 32 29 5d 3b 0a 20 20 20 20 20 20 73 71 6c 69  32)];.      sqli
2170: 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 5a 65  te3BtreeCursorZe
2180: 72 6f 28 70 43 78 2d 3e 70 43 75 72 73 6f 72 29  ro(pCx->pCursor)
2190: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65  ;.    }.  }.  re
21a0: 74 75 72 6e 20 70 43 78 3b 0a 7d 0a 0a 2f 2a 0a  turn pCx;.}../*.
21b0: 2a 2a 20 54 72 79 20 74 6f 20 63 6f 6e 76 65 72  ** Try to conver
21c0: 74 20 61 20 76 61 6c 75 65 20 69 6e 74 6f 20 61  t a value into a
21d0: 20 6e 75 6d 65 72 69 63 20 72 65 70 72 65 73 65   numeric represe
21e0: 6e 74 61 74 69 6f 6e 20 69 66 20 77 65 20 63 61  ntation if we ca
21f0: 6e 0a 2a 2a 20 64 6f 20 73 6f 20 77 69 74 68 6f  n.** do so witho
2200: 75 74 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72  ut loss of infor
2210: 6d 61 74 69 6f 6e 2e 20 20 49 6e 20 6f 74 68 65  mation.  In othe
2220: 72 20 77 6f 72 64 73 2c 20 69 66 20 74 68 65 20  r words, if the 
2230: 73 74 72 69 6e 67 0a 2a 2a 20 6c 6f 6f 6b 73 20  string.** looks 
2240: 6c 69 6b 65 20 61 20 6e 75 6d 62 65 72 2c 20 63  like a number, c
2250: 6f 6e 76 65 72 74 20 69 74 20 69 6e 74 6f 20 61  onvert it into a
2260: 20 6e 75 6d 62 65 72 2e 20 20 49 66 20 69 74 20   number.  If it 
2270: 64 6f 65 73 20 6e 6f 74 0a 2a 2a 20 6c 6f 6f 6b  does not.** look
2280: 20 6c 69 6b 65 20 61 20 6e 75 6d 62 65 72 2c 20   like a number, 
2290: 6c 65 61 76 65 20 69 74 20 61 6c 6f 6e 65 2e 0a  leave it alone..
22a0: 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 61  */.static void a
22b0: 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e  pplyNumericAffin
22c0: 69 74 79 28 4d 65 6d 20 2a 70 52 65 63 29 7b 0a  ity(Mem *pRec){.
22d0: 20 20 69 66 28 20 28 70 52 65 63 2d 3e 66 6c 61    if( (pRec->fla
22e0: 67 73 20 26 20 28 4d 45 4d 5f 52 65 61 6c 7c 4d  gs & (MEM_Real|M
22f0: 45 4d 5f 49 6e 74 29 29 3d 3d 30 20 29 7b 0a 20  EM_Int))==0 ){. 
2300: 20 20 20 64 6f 75 62 6c 65 20 72 56 61 6c 75 65     double rValue
2310: 3b 0a 20 20 20 20 69 36 34 20 69 56 61 6c 75 65  ;.    i64 iValue
2320: 3b 0a 20 20 20 20 75 38 20 65 6e 63 20 3d 20 70  ;.    u8 enc = p
2330: 52 65 63 2d 3e 65 6e 63 3b 0a 20 20 20 20 69 66  Rec->enc;.    if
2340: 28 20 28 70 52 65 63 2d 3e 66 6c 61 67 73 26 4d  ( (pRec->flags&M
2350: 45 4d 5f 53 74 72 29 3d 3d 30 20 29 20 72 65 74  EM_Str)==0 ) ret
2360: 75 72 6e 3b 0a 20 20 20 20 69 66 28 20 73 71 6c  urn;.    if( sql
2370: 69 74 65 33 41 74 6f 46 28 70 52 65 63 2d 3e 7a  ite3AtoF(pRec->z
2380: 2c 20 26 72 56 61 6c 75 65 2c 20 70 52 65 63 2d  , &rValue, pRec-
2390: 3e 6e 2c 20 65 6e 63 29 3d 3d 30 20 29 20 72 65  >n, enc)==0 ) re
23a0: 74 75 72 6e 3b 0a 20 20 20 20 69 66 28 20 30 3d  turn;.    if( 0=
23b0: 3d 73 71 6c 69 74 65 33 41 74 6f 69 36 34 28 70  =sqlite3Atoi64(p
23c0: 52 65 63 2d 3e 7a 2c 20 26 69 56 61 6c 75 65 2c  Rec->z, &iValue,
23d0: 20 70 52 65 63 2d 3e 6e 2c 20 65 6e 63 29 20 29   pRec->n, enc) )
23e0: 7b 0a 20 20 20 20 20 20 70 52 65 63 2d 3e 75 2e  {.      pRec->u.
23f0: 69 20 3d 20 69 56 61 6c 75 65 3b 0a 20 20 20 20  i = iValue;.    
2400: 20 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 7c 3d    pRec->flags |=
2410: 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 7d 65   MEM_Int;.    }e
2420: 6c 73 65 7b 0a 20 20 20 20 20 20 70 52 65 63 2d  lse{.      pRec-
2430: 3e 72 20 3d 20 72 56 61 6c 75 65 3b 0a 20 20 20  >r = rValue;.   
2440: 20 20 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 7c     pRec->flags |
2450: 3d 20 4d 45 4d 5f 52 65 61 6c 3b 0a 20 20 20 20  = MEM_Real;.    
2460: 7d 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 50  }.  }.}../*.** P
2470: 72 6f 63 65 73 73 69 6e 67 20 69 73 20 64 65 74  rocessing is det
2480: 65 72 6d 69 6e 65 20 62 79 20 74 68 65 20 61 66  ermine by the af
2490: 66 69 6e 69 74 79 20 70 61 72 61 6d 65 74 65 72  finity parameter
24a0: 3a 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41  :.**.** SQLITE_A
24b0: 46 46 5f 49 4e 54 45 47 45 52 3a 0a 2a 2a 20 53  FF_INTEGER:.** S
24c0: 51 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c 3a 0a  QLITE_AFF_REAL:.
24d0: 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55  ** SQLITE_AFF_NU
24e0: 4d 45 52 49 43 3a 0a 2a 2a 20 20 20 20 54 72 79  MERIC:.**    Try
24f0: 20 74 6f 20 63 6f 6e 76 65 72 74 20 70 52 65 63   to convert pRec
2500: 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 72   to an integer r
2510: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 72  epresentation or
2520: 20 61 20 0a 2a 2a 20 20 20 20 66 6c 6f 61 74 69   a .**    floati
2530: 6e 67 2d 70 6f 69 6e 74 20 72 65 70 72 65 73 65  ng-point represe
2540: 6e 74 61 74 69 6f 6e 20 69 66 20 61 6e 20 69 6e  ntation if an in
2550: 74 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 61  teger representa
2560: 74 69 6f 6e 0a 2a 2a 20 20 20 20 69 73 20 6e 6f  tion.**    is no
2570: 74 20 70 6f 73 73 69 62 6c 65 2e 20 20 4e 6f 74  t possible.  Not
2580: 65 20 74 68 61 74 20 74 68 65 20 69 6e 74 65 67  e that the integ
2590: 65 72 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  er representatio
25a0: 6e 20 69 73 0a 2a 2a 20 20 20 20 61 6c 77 61 79  n is.**    alway
25b0: 73 20 70 72 65 66 65 72 72 65 64 2c 20 65 76 65  s preferred, eve
25c0: 6e 20 69 66 20 74 68 65 20 61 66 66 69 6e 69 74  n if the affinit
25d0: 79 20 69 73 20 52 45 41 4c 2c 20 62 65 63 61 75  y is REAL, becau
25e0: 73 65 0a 2a 2a 20 20 20 20 61 6e 20 69 6e 74 65  se.**    an inte
25f0: 67 65 72 20 72 65 70 72 65 73 65 6e 74 61 74 69  ger representati
2600: 6f 6e 20 69 73 20 6d 6f 72 65 20 73 70 61 63 65  on is more space
2610: 20 65 66 66 69 63 69 65 6e 74 20 6f 6e 20 64 69   efficient on di
2620: 73 6b 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45  sk..**.** SQLITE
2630: 5f 41 46 46 5f 54 45 58 54 3a 0a 2a 2a 20 20 20  _AFF_TEXT:.**   
2640: 20 43 6f 6e 76 65 72 74 20 70 52 65 63 20 74 6f   Convert pRec to
2650: 20 61 20 74 65 78 74 20 72 65 70 72 65 73 65 6e   a text represen
2660: 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 51  tation..**.** SQ
2670: 4c 49 54 45 5f 41 46 46 5f 4e 4f 4e 45 3a 0a 2a  LITE_AFF_NONE:.*
2680: 2a 20 20 20 20 4e 6f 2d 6f 70 2e 20 20 70 52 65  *    No-op.  pRe
2690: 63 20 69 73 20 75 6e 63 68 61 6e 67 65 64 2e 0a  c is unchanged..
26a0: 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 61  */.static void a
26b0: 70 70 6c 79 41 66 66 69 6e 69 74 79 28 0a 20 20  pplyAffinity(.  
26c0: 4d 65 6d 20 2a 70 52 65 63 2c 20 20 20 20 20 20  Mem *pRec,      
26d0: 20 20 20 20 2f 2a 20 54 68 65 20 76 61 6c 75 65      /* The value
26e0: 20 74 6f 20 61 70 70 6c 79 20 61 66 66 69 6e 69   to apply affini
26f0: 74 79 20 74 6f 20 2a 2f 0a 20 20 63 68 61 72 20  ty to */.  char 
2700: 61 66 66 69 6e 69 74 79 2c 20 20 20 20 20 20 2f  affinity,      /
2710: 2a 20 54 68 65 20 61 66 66 69 6e 69 74 79 20 74  * The affinity t
2720: 6f 20 62 65 20 61 70 70 6c 69 65 64 20 2a 2f 0a  o be applied */.
2730: 20 20 75 38 20 65 6e 63 20 20 20 20 20 20 20 20    u8 enc        
2740: 20 20 20 20 20 20 2f 2a 20 55 73 65 20 74 68 69        /* Use thi
2750: 73 20 74 65 78 74 20 65 6e 63 6f 64 69 6e 67 20  s text encoding 
2760: 2a 2f 0a 29 7b 0a 20 20 69 66 28 20 61 66 66 69  */.){.  if( affi
2770: 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46  nity==SQLITE_AFF
2780: 5f 54 45 58 54 20 29 7b 0a 20 20 20 20 2f 2a 20  _TEXT ){.    /* 
2790: 4f 6e 6c 79 20 61 74 74 65 6d 70 74 20 74 68 65  Only attempt the
27a0: 20 63 6f 6e 76 65 72 73 69 6f 6e 20 74 6f 20 54   conversion to T
27b0: 45 58 54 20 69 66 20 74 68 65 72 65 20 69 73 20  EXT if there is 
27c0: 61 6e 20 69 6e 74 65 67 65 72 20 6f 72 20 72 65  an integer or re
27d0: 61 6c 0a 20 20 20 20 2a 2a 20 72 65 70 72 65 73  al.    ** repres
27e0: 65 6e 74 61 74 69 6f 6e 20 28 62 6c 6f 62 20 61  entation (blob a
27f0: 6e 64 20 4e 55 4c 4c 20 64 6f 20 6e 6f 74 20 67  nd NULL do not g
2800: 65 74 20 63 6f 6e 76 65 72 74 65 64 29 20 62 75  et converted) bu
2810: 74 20 6e 6f 20 73 74 72 69 6e 67 0a 20 20 20 20  t no string.    
2820: 2a 2a 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  ** representatio
2830: 6e 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66  n..    */.    if
2840: 28 20 30 3d 3d 28 70 52 65 63 2d 3e 66 6c 61 67  ( 0==(pRec->flag
2850: 73 26 4d 45 4d 5f 53 74 72 29 20 26 26 20 28 70  s&MEM_Str) && (p
2860: 52 65 63 2d 3e 66 6c 61 67 73 26 28 4d 45 4d 5f  Rec->flags&(MEM_
2870: 52 65 61 6c 7c 4d 45 4d 5f 49 6e 74 29 29 20 29  Real|MEM_Int)) )
2880: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  {.      sqlite3V
2890: 64 62 65 4d 65 6d 53 74 72 69 6e 67 69 66 79 28  dbeMemStringify(
28a0: 70 52 65 63 2c 20 65 6e 63 29 3b 0a 20 20 20 20  pRec, enc);.    
28b0: 7d 0a 20 20 20 20 70 52 65 63 2d 3e 66 6c 61 67  }.    pRec->flag
28c0: 73 20 26 3d 20 7e 28 4d 45 4d 5f 52 65 61 6c 7c  s &= ~(MEM_Real|
28d0: 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d 65 6c 73  MEM_Int);.  }els
28e0: 65 20 69 66 28 20 61 66 66 69 6e 69 74 79 21 3d  e if( affinity!=
28f0: 53 51 4c 49 54 45 5f 41 46 46 5f 4e 4f 4e 45 20  SQLITE_AFF_NONE 
2900: 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 61  ){.    assert( a
2910: 66 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f  ffinity==SQLITE_
2920: 41 46 46 5f 49 4e 54 45 47 45 52 20 7c 7c 20 61  AFF_INTEGER || a
2930: 66 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f  ffinity==SQLITE_
2940: 41 46 46 5f 52 45 41 4c 0a 20 20 20 20 20 20 20  AFF_REAL.       
2950: 20 20 20 20 20 20 7c 7c 20 61 66 66 69 6e 69 74        || affinit
2960: 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55  y==SQLITE_AFF_NU
2970: 4d 45 52 49 43 20 29 3b 0a 20 20 20 20 61 70 70  MERIC );.    app
2980: 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74  lyNumericAffinit
2990: 79 28 70 52 65 63 29 3b 0a 20 20 20 20 69 66 28  y(pRec);.    if(
29a0: 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d   pRec->flags & M
29b0: 45 4d 5f 52 65 61 6c 20 29 7b 0a 20 20 20 20 20  EM_Real ){.     
29c0: 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 65   sqlite3VdbeInte
29d0: 67 65 72 41 66 66 69 6e 69 74 79 28 70 52 65 63  gerAffinity(pRec
29e0: 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a 0a  );.    }.  }.}..
29f0: 2f 2a 0a 2a 2a 20 54 72 79 20 74 6f 20 63 6f 6e  /*.** Try to con
2a00: 76 65 72 74 20 74 68 65 20 74 79 70 65 20 6f 66  vert the type of
2a10: 20 61 20 66 75 6e 63 74 69 6f 6e 20 61 72 67 75   a function argu
2a20: 6d 65 6e 74 20 6f 72 20 61 20 72 65 73 75 6c 74  ment or a result
2a30: 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 69 6e 74 6f 20   column.** into 
2a40: 61 20 6e 75 6d 65 72 69 63 20 72 65 70 72 65 73  a numeric repres
2a50: 65 6e 74 61 74 69 6f 6e 2e 20 20 55 73 65 20 65  entation.  Use e
2a60: 69 74 68 65 72 20 49 4e 54 45 47 45 52 20 6f 72  ither INTEGER or
2a70: 20 52 45 41 4c 20 77 68 69 63 68 65 76 65 72 0a   REAL whichever.
2a80: 2a 2a 20 69 73 20 61 70 70 72 6f 70 72 69 61 74  ** is appropriat
2a90: 65 2e 20 20 42 75 74 20 6f 6e 6c 79 20 64 6f 20  e.  But only do 
2aa0: 74 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69  the conversion i
2ab0: 66 20 69 74 20 69 73 20 70 6f 73 73 69 62 6c 65  f it is possible
2ac0: 20 77 69 74 68 6f 75 74 0a 2a 2a 20 6c 6f 73 73   without.** loss
2ad0: 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20   of information 
2ae0: 61 6e 64 20 72 65 74 75 72 6e 20 74 68 65 20 72  and return the r
2af0: 65 76 69 73 65 64 20 74 79 70 65 20 6f 66 20 74  evised type of t
2b00: 68 65 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a  he argument..*/.
2b10: 69 6e 74 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  int sqlite3_valu
2b20: 65 5f 6e 75 6d 65 72 69 63 5f 74 79 70 65 28 73  e_numeric_type(s
2b30: 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 56  qlite3_value *pV
2b40: 61 6c 29 7b 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d  al){.  Mem *pMem
2b50: 20 3d 20 28 4d 65 6d 2a 29 70 56 61 6c 3b 0a 20   = (Mem*)pVal;. 
2b60: 20 69 66 28 20 70 4d 65 6d 2d 3e 74 79 70 65 3d   if( pMem->type=
2b70: 3d 53 51 4c 49 54 45 5f 54 45 58 54 20 29 7b 0a  =SQLITE_TEXT ){.
2b80: 20 20 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63      applyNumeric
2b90: 41 66 66 69 6e 69 74 79 28 70 4d 65 6d 29 3b 0a  Affinity(pMem);.
2ba0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
2bb0: 65 6d 53 74 6f 72 65 54 79 70 65 28 70 4d 65 6d  emStoreType(pMem
2bc0: 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20  );.  }.  return 
2bd0: 70 4d 65 6d 2d 3e 74 79 70 65 3b 0a 7d 0a 0a 2f  pMem->type;.}../
2be0: 2a 0a 2a 2a 20 45 78 70 6f 72 74 65 64 20 76 65  *.** Exported ve
2bf0: 72 73 69 6f 6e 20 6f 66 20 61 70 70 6c 79 41 66  rsion of applyAf
2c00: 66 69 6e 69 74 79 28 29 2e 20 54 68 69 73 20 6f  finity(). This o
2c10: 6e 65 20 77 6f 72 6b 73 20 6f 6e 20 73 71 6c 69  ne works on sqli
2c20: 74 65 33 5f 76 61 6c 75 65 2a 2c 20 0a 2a 2a 20  te3_value*, .** 
2c30: 6e 6f 74 20 74 68 65 20 69 6e 74 65 72 6e 61 6c  not the internal
2c40: 20 4d 65 6d 2a 20 74 79 70 65 2e 0a 2a 2f 0a 76   Mem* type..*/.v
2c50: 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65  oid sqlite3Value
2c60: 41 70 70 6c 79 41 66 66 69 6e 69 74 79 28 0a 20  ApplyAffinity(. 
2c70: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a   sqlite3_value *
2c80: 70 56 61 6c 2c 20 0a 20 20 75 38 20 61 66 66 69  pVal, .  u8 affi
2c90: 6e 69 74 79 2c 20 0a 20 20 75 38 20 65 6e 63 0a  nity, .  u8 enc.
2ca0: 29 7b 0a 20 20 61 70 70 6c 79 41 66 66 69 6e 69  ){.  applyAffini
2cb0: 74 79 28 28 4d 65 6d 20 2a 29 70 56 61 6c 2c 20  ty((Mem *)pVal, 
2cc0: 61 66 66 69 6e 69 74 79 2c 20 65 6e 63 29 3b 0a  affinity, enc);.
2cd0: 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  }..#ifdef SQLITE
2ce0: 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20 57 72 69  _DEBUG./*.** Wri
2cf0: 74 65 20 61 20 6e 69 63 65 20 73 74 72 69 6e 67  te a nice string
2d00: 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   representation 
2d10: 6f 66 20 74 68 65 20 63 6f 6e 74 65 6e 74 73 20  of the contents 
2d20: 6f 66 20 63 65 6c 6c 20 70 4d 65 6d 0a 2a 2a 20  of cell pMem.** 
2d30: 69 6e 74 6f 20 62 75 66 66 65 72 20 7a 42 75 66  into buffer zBuf
2d40: 2c 20 6c 65 6e 67 74 68 20 6e 42 75 66 2e 0a 2a  , length nBuf..*
2d50: 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64  /.void sqlite3Vd
2d60: 62 65 4d 65 6d 50 72 65 74 74 79 50 72 69 6e 74  beMemPrettyPrint
2d70: 28 4d 65 6d 20 2a 70 4d 65 6d 2c 20 63 68 61 72  (Mem *pMem, char
2d80: 20 2a 7a 42 75 66 29 7b 0a 20 20 63 68 61 72 20   *zBuf){.  char 
2d90: 2a 7a 43 73 72 20 3d 20 7a 42 75 66 3b 0a 20 20  *zCsr = zBuf;.  
2da0: 69 6e 74 20 66 20 3d 20 70 4d 65 6d 2d 3e 66 6c  int f = pMem->fl
2db0: 61 67 73 3b 0a 0a 20 20 73 74 61 74 69 63 20 63  ags;..  static c
2dc0: 6f 6e 73 74 20 63 68 61 72 20 2a 63 6f 6e 73 74  onst char *const
2dd0: 20 65 6e 63 6e 61 6d 65 73 5b 5d 20 3d 20 7b 22   encnames[] = {"
2de0: 28 58 29 22 2c 20 22 28 38 29 22 2c 20 22 28 31  (X)", "(8)", "(1
2df0: 36 4c 45 29 22 2c 20 22 28 31 36 42 45 29 22 7d  6LE)", "(16BE)"}
2e00: 3b 0a 0a 20 20 69 66 28 20 66 26 4d 45 4d 5f 42  ;..  if( f&MEM_B
2e10: 6c 6f 62 20 29 7b 0a 20 20 20 20 69 6e 74 20 69  lob ){.    int i
2e20: 3b 0a 20 20 20 20 63 68 61 72 20 63 3b 0a 20 20  ;.    char c;.  
2e30: 20 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 44 79    if( f & MEM_Dy
2e40: 6e 20 29 7b 0a 20 20 20 20 20 20 63 20 3d 20 27  n ){.      c = '
2e50: 7a 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  z';.      assert
2e60: 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74 61 74  ( (f & (MEM_Stat
2e70: 69 63 7c 4d 45 4d 5f 45 70 68 65 6d 29 29 3d 3d  ic|MEM_Ephem))==
2e80: 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69  0 );.    }else i
2e90: 66 28 20 66 20 26 20 4d 45 4d 5f 53 74 61 74 69  f( f & MEM_Stati
2ea0: 63 20 29 7b 0a 20 20 20 20 20 20 63 20 3d 20 27  c ){.      c = '
2eb0: 74 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  t';.      assert
2ec0: 28 20 28 66 20 26 20 28 4d 45 4d 5f 44 79 6e 7c  ( (f & (MEM_Dyn|
2ed0: 4d 45 4d 5f 45 70 68 65 6d 29 29 3d 3d 30 20 29  MEM_Ephem))==0 )
2ee0: 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
2ef0: 66 20 26 20 4d 45 4d 5f 45 70 68 65 6d 20 29 7b  f & MEM_Ephem ){
2f00: 0a 20 20 20 20 20 20 63 20 3d 20 27 65 27 3b 0a  .      c = 'e';.
2f10: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28 66        assert( (f
2f20: 20 26 20 28 4d 45 4d 5f 53 74 61 74 69 63 7c 4d   & (MEM_Static|M
2f30: 45 4d 5f 44 79 6e 29 29 3d 3d 30 20 29 3b 0a 20  EM_Dyn))==0 );. 
2f40: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
2f50: 63 20 3d 20 27 73 27 3b 0a 20 20 20 20 7d 0a 0a  c = 's';.    }..
2f60: 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72      sqlite3_snpr
2f70: 69 6e 74 66 28 31 30 30 2c 20 7a 43 73 72 2c 20  intf(100, zCsr, 
2f80: 22 25 63 22 2c 20 63 29 3b 0a 20 20 20 20 7a 43  "%c", c);.    zC
2f90: 73 72 20 2b 3d 20 73 71 6c 69 74 65 33 53 74 72  sr += sqlite3Str
2fa0: 6c 65 6e 33 30 28 7a 43 73 72 29 3b 0a 20 20 20  len30(zCsr);.   
2fb0: 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74   sqlite3_snprint
2fc0: 66 28 31 30 30 2c 20 7a 43 73 72 2c 20 22 25 64  f(100, zCsr, "%d
2fd0: 5b 22 2c 20 70 4d 65 6d 2d 3e 6e 29 3b 0a 20 20  [", pMem->n);.  
2fe0: 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74 65    zCsr += sqlite
2ff0: 33 53 74 72 6c 65 6e 33 30 28 7a 43 73 72 29 3b  3Strlen30(zCsr);
3000: 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  .    for(i=0; i<
3010: 31 36 20 26 26 20 69 3c 70 4d 65 6d 2d 3e 6e 3b  16 && i<pMem->n;
3020: 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 73 71 6c   i++){.      sql
3030: 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30  ite3_snprintf(10
3040: 30 2c 20 7a 43 73 72 2c 20 22 25 30 32 58 22 2c  0, zCsr, "%02X",
3050: 20 28 28 69 6e 74 29 70 4d 65 6d 2d 3e 7a 5b 69   ((int)pMem->z[i
3060: 5d 20 26 20 30 78 46 46 29 29 3b 0a 20 20 20 20  ] & 0xFF));.    
3070: 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74 65    zCsr += sqlite
3080: 33 53 74 72 6c 65 6e 33 30 28 7a 43 73 72 29 3b  3Strlen30(zCsr);
3090: 0a 20 20 20 20 7d 0a 20 20 20 20 66 6f 72 28 69  .    }.    for(i
30a0: 3d 30 3b 20 69 3c 31 36 20 26 26 20 69 3c 70 4d  =0; i<16 && i<pM
30b0: 65 6d 2d 3e 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20  em->n; i++){.   
30c0: 20 20 20 63 68 61 72 20 7a 20 3d 20 70 4d 65 6d     char z = pMem
30d0: 2d 3e 7a 5b 69 5d 3b 0a 20 20 20 20 20 20 69 66  ->z[i];.      if
30e0: 28 20 7a 3c 33 32 20 7c 7c 20 7a 3e 31 32 36 20  ( z<32 || z>126 
30f0: 29 20 2a 7a 43 73 72 2b 2b 20 3d 20 27 2e 27 3b  ) *zCsr++ = '.';
3100: 0a 20 20 20 20 20 20 65 6c 73 65 20 2a 7a 43 73  .      else *zCs
3110: 72 2b 2b 20 3d 20 7a 3b 0a 20 20 20 20 7d 0a 0a  r++ = z;.    }..
3120: 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72      sqlite3_snpr
3130: 69 6e 74 66 28 31 30 30 2c 20 7a 43 73 72 2c 20  intf(100, zCsr, 
3140: 22 5d 25 73 22 2c 20 65 6e 63 6e 61 6d 65 73 5b  "]%s", encnames[
3150: 70 4d 65 6d 2d 3e 65 6e 63 5d 29 3b 0a 20 20 20  pMem->enc]);.   
3160: 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74 65 33   zCsr += sqlite3
3170: 53 74 72 6c 65 6e 33 30 28 7a 43 73 72 29 3b 0a  Strlen30(zCsr);.
3180: 20 20 20 20 69 66 28 20 66 20 26 20 4d 45 4d 5f      if( f & MEM_
3190: 5a 65 72 6f 20 29 7b 0a 20 20 20 20 20 20 73 71  Zero ){.      sq
31a0: 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31  lite3_snprintf(1
31b0: 30 30 2c 20 7a 43 73 72 2c 22 2b 25 64 7a 22 2c  00, zCsr,"+%dz",
31c0: 70 4d 65 6d 2d 3e 75 2e 6e 5a 65 72 6f 29 3b 0a  pMem->u.nZero);.
31d0: 20 20 20 20 20 20 7a 43 73 72 20 2b 3d 20 73 71        zCsr += sq
31e0: 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 43  lite3Strlen30(zC
31f0: 73 72 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 2a  sr);.    }.    *
3200: 7a 43 73 72 20 3d 20 27 5c 30 27 3b 0a 20 20 7d  zCsr = '\0';.  }
3210: 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d  else if( f & MEM
3220: 5f 53 74 72 20 29 7b 0a 20 20 20 20 69 6e 74 20  _Str ){.    int 
3230: 6a 2c 20 6b 3b 0a 20 20 20 20 7a 42 75 66 5b 30  j, k;.    zBuf[0
3240: 5d 20 3d 20 27 20 27 3b 0a 20 20 20 20 69 66 28  ] = ' ';.    if(
3250: 20 66 20 26 20 4d 45 4d 5f 44 79 6e 20 29 7b 0a   f & MEM_Dyn ){.
3260: 20 20 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20        zBuf[1] = 
3270: 27 7a 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72  'z';.      asser
3280: 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74 61  t( (f & (MEM_Sta
3290: 74 69 63 7c 4d 45 4d 5f 45 70 68 65 6d 29 29 3d  tic|MEM_Ephem))=
32a0: 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20  =0 );.    }else 
32b0: 69 66 28 20 66 20 26 20 4d 45 4d 5f 53 74 61 74  if( f & MEM_Stat
32c0: 69 63 20 29 7b 0a 20 20 20 20 20 20 7a 42 75 66  ic ){.      zBuf
32d0: 5b 31 5d 20 3d 20 27 74 27 3b 0a 20 20 20 20 20  [1] = 't';.     
32e0: 20 61 73 73 65 72 74 28 20 28 66 20 26 20 28 4d   assert( (f & (M
32f0: 45 4d 5f 44 79 6e 7c 4d 45 4d 5f 45 70 68 65 6d  EM_Dyn|MEM_Ephem
3300: 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c  ))==0 );.    }el
3310: 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 45  se if( f & MEM_E
3320: 70 68 65 6d 20 29 7b 0a 20 20 20 20 20 20 7a 42  phem ){.      zB
3330: 75 66 5b 31 5d 20 3d 20 27 65 27 3b 0a 20 20 20  uf[1] = 'e';.   
3340: 20 20 20 61 73 73 65 72 74 28 20 28 66 20 26 20     assert( (f & 
3350: 28 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f  (MEM_Static|MEM_
3360: 44 79 6e 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20  Dyn))==0 );.    
3370: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 7a 42 75  }else{.      zBu
3380: 66 5b 31 5d 20 3d 20 27 73 27 3b 0a 20 20 20 20  f[1] = 's';.    
3390: 7d 0a 20 20 20 20 6b 20 3d 20 32 3b 0a 20 20 20  }.    k = 2;.   
33a0: 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74   sqlite3_snprint
33b0: 66 28 31 30 30 2c 20 26 7a 42 75 66 5b 6b 5d 2c  f(100, &zBuf[k],
33c0: 20 22 25 64 22 2c 20 70 4d 65 6d 2d 3e 6e 29 3b   "%d", pMem->n);
33d0: 0a 20 20 20 20 6b 20 2b 3d 20 73 71 6c 69 74 65  .    k += sqlite
33e0: 33 53 74 72 6c 65 6e 33 30 28 26 7a 42 75 66 5b  3Strlen30(&zBuf[
33f0: 6b 5d 29 3b 0a 20 20 20 20 7a 42 75 66 5b 6b 2b  k]);.    zBuf[k+
3400: 2b 5d 20 3d 20 27 5b 27 3b 0a 20 20 20 20 66 6f  +] = '[';.    fo
3410: 72 28 6a 3d 30 3b 20 6a 3c 31 35 20 26 26 20 6a  r(j=0; j<15 && j
3420: 3c 70 4d 65 6d 2d 3e 6e 3b 20 6a 2b 2b 29 7b 0a  <pMem->n; j++){.
3430: 20 20 20 20 20 20 75 38 20 63 20 3d 20 70 4d 65        u8 c = pMe
3440: 6d 2d 3e 7a 5b 6a 5d 3b 0a 20 20 20 20 20 20 69  m->z[j];.      i
3450: 66 28 20 63 3e 3d 30 78 32 30 20 26 26 20 63 3c  f( c>=0x20 && c<
3460: 30 78 37 66 20 29 7b 0a 20 20 20 20 20 20 20 20  0x7f ){.        
3470: 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 63 3b 0a 20  zBuf[k++] = c;. 
3480: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
3490: 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20      zBuf[k++] = 
34a0: 27 2e 27 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  '.';.      }.   
34b0: 20 7d 0a 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d   }.    zBuf[k++]
34c0: 20 3d 20 27 5d 27 3b 0a 20 20 20 20 73 71 6c 69   = ']';.    sqli
34d0: 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30  te3_snprintf(100
34e0: 2c 26 7a 42 75 66 5b 6b 5d 2c 20 65 6e 63 6e 61  ,&zBuf[k], encna
34f0: 6d 65 73 5b 70 4d 65 6d 2d 3e 65 6e 63 5d 29 3b  mes[pMem->enc]);
3500: 0a 20 20 20 20 6b 20 2b 3d 20 73 71 6c 69 74 65  .    k += sqlite
3510: 33 53 74 72 6c 65 6e 33 30 28 26 7a 42 75 66 5b  3Strlen30(&zBuf[
3520: 6b 5d 29 3b 0a 20 20 20 20 7a 42 75 66 5b 6b 2b  k]);.    zBuf[k+
3530: 2b 5d 20 3d 20 30 3b 0a 20 20 7d 0a 7d 0a 23 65  +] = 0;.  }.}.#e
3540: 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c  ndif..#ifdef SQL
3550: 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20  ITE_DEBUG./*.** 
3560: 50 72 69 6e 74 20 74 68 65 20 76 61 6c 75 65 20  Print the value 
3570: 6f 66 20 61 20 72 65 67 69 73 74 65 72 20 66 6f  of a register fo
3580: 72 20 74 72 61 63 69 6e 67 20 70 75 72 70 6f 73  r tracing purpos
3590: 65 73 3a 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f  es:.*/.static vo
35a0: 69 64 20 6d 65 6d 54 72 61 63 65 50 72 69 6e 74  id memTracePrint
35b0: 28 46 49 4c 45 20 2a 6f 75 74 2c 20 4d 65 6d 20  (FILE *out, Mem 
35c0: 2a 70 29 7b 0a 20 20 69 66 28 20 70 2d 3e 66 6c  *p){.  if( p->fl
35d0: 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29  ags & MEM_Null )
35e0: 7b 0a 20 20 20 20 66 70 72 69 6e 74 66 28 6f 75  {.    fprintf(ou
35f0: 74 2c 20 22 20 4e 55 4c 4c 22 29 3b 0a 20 20 7d  t, " NULL");.  }
3600: 65 6c 73 65 20 69 66 28 20 28 70 2d 3e 66 6c 61  else if( (p->fla
3610: 67 73 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45  gs & (MEM_Int|ME
3620: 4d 5f 53 74 72 29 29 3d 3d 28 4d 45 4d 5f 49 6e  M_Str))==(MEM_In
3630: 74 7c 4d 45 4d 5f 53 74 72 29 20 29 7b 0a 20 20  t|MEM_Str) ){.  
3640: 20 20 66 70 72 69 6e 74 66 28 6f 75 74 2c 20 22    fprintf(out, "
3650: 20 73 69 3a 25 6c 6c 64 22 2c 20 70 2d 3e 75 2e   si:%lld", p->u.
3660: 69 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  i);.  }else if( 
3670: 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  p->flags & MEM_I
3680: 6e 74 20 29 7b 0a 20 20 20 20 66 70 72 69 6e 74  nt ){.    fprint
3690: 66 28 6f 75 74 2c 20 22 20 69 3a 25 6c 6c 64 22  f(out, " i:%lld"
36a0: 2c 20 70 2d 3e 75 2e 69 29 3b 0a 23 69 66 6e 64  , p->u.i);.#ifnd
36b0: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ef SQLITE_OMIT_F
36c0: 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20  LOATING_POINT.  
36d0: 7d 65 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c 61  }else if( p->fla
36e0: 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 20 29 7b  gs & MEM_Real ){
36f0: 0a 20 20 20 20 66 70 72 69 6e 74 66 28 6f 75 74  .    fprintf(out
3700: 2c 20 22 20 72 3a 25 67 22 2c 20 70 2d 3e 72 29  , " r:%g", p->r)
3710: 3b 0a 23 65 6e 64 69 66 0a 20 20 7d 65 6c 73 65  ;.#endif.  }else
3720: 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20   if( p->flags & 
3730: 4d 45 4d 5f 52 6f 77 53 65 74 20 29 7b 0a 20 20  MEM_RowSet ){.  
3740: 20 20 66 70 72 69 6e 74 66 28 6f 75 74 2c 20 22    fprintf(out, "
3750: 20 28 72 6f 77 73 65 74 29 22 29 3b 0a 20 20 7d   (rowset)");.  }
3760: 65 6c 73 65 7b 0a 20 20 20 20 63 68 61 72 20 7a  else{.    char z
3770: 42 75 66 5b 32 30 30 5d 3b 0a 20 20 20 20 73 71  Buf[200];.    sq
3780: 6c 69 74 65 33 56 64 62 65 4d 65 6d 50 72 65 74  lite3VdbeMemPret
3790: 74 79 50 72 69 6e 74 28 70 2c 20 7a 42 75 66 29  tyPrint(p, zBuf)
37a0: 3b 0a 20 20 20 20 66 70 72 69 6e 74 66 28 6f 75  ;.    fprintf(ou
37b0: 74 2c 20 22 20 22 29 3b 0a 20 20 20 20 66 70 72  t, " ");.    fpr
37c0: 69 6e 74 66 28 6f 75 74 2c 20 22 25 73 22 2c 20  intf(out, "%s", 
37d0: 7a 42 75 66 29 3b 0a 20 20 7d 0a 7d 0a 73 74 61  zBuf);.  }.}.sta
37e0: 74 69 63 20 76 6f 69 64 20 72 65 67 69 73 74 65  tic void registe
37f0: 72 54 72 61 63 65 28 46 49 4c 45 20 2a 6f 75 74  rTrace(FILE *out
3800: 2c 20 69 6e 74 20 69 52 65 67 2c 20 4d 65 6d 20  , int iReg, Mem 
3810: 2a 70 29 7b 0a 20 20 66 70 72 69 6e 74 66 28 6f  *p){.  fprintf(o
3820: 75 74 2c 20 22 52 45 47 5b 25 64 5d 20 3d 20 22  ut, "REG[%d] = "
3830: 2c 20 69 52 65 67 29 3b 0a 20 20 6d 65 6d 54 72  , iReg);.  memTr
3840: 61 63 65 50 72 69 6e 74 28 6f 75 74 2c 20 70 29  acePrint(out, p)
3850: 3b 0a 20 20 66 70 72 69 6e 74 66 28 6f 75 74 2c  ;.  fprintf(out,
3860: 20 22 5c 6e 22 29 3b 0a 7d 0a 23 65 6e 64 69 66   "\n");.}.#endif
3870: 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
3880: 44 45 42 55 47 0a 23 20 20 64 65 66 69 6e 65 20  DEBUG.#  define 
3890: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 52  REGISTER_TRACE(R
38a0: 2c 4d 29 20 69 66 28 70 2d 3e 74 72 61 63 65 29  ,M) if(p->trace)
38b0: 72 65 67 69 73 74 65 72 54 72 61 63 65 28 70 2d  registerTrace(p-
38c0: 3e 74 72 61 63 65 2c 52 2c 4d 29 0a 23 65 6c 73  >trace,R,M).#els
38d0: 65 0a 23 20 20 64 65 66 69 6e 65 20 52 45 47 49  e.#  define REGI
38e0: 53 54 45 52 5f 54 52 41 43 45 28 52 2c 4d 29 0a  STER_TRACE(R,M).
38f0: 23 65 6e 64 69 66 0a 0a 0a 23 69 66 64 65 66 20  #endif...#ifdef 
3900: 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 0a 2f 2a  VDBE_PROFILE../*
3910: 20 0a 2a 2a 20 68 77 74 69 6d 65 2e 68 20 63 6f   .** hwtime.h co
3920: 6e 74 61 69 6e 73 20 69 6e 6c 69 6e 65 20 61 73  ntains inline as
3930: 73 65 6d 62 6c 65 72 20 63 6f 64 65 20 66 6f 72  sembler code for
3940: 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 0a 2a   implementing .*
3950: 2a 20 68 69 67 68 2d 70 65 72 66 6f 72 6d 61 6e  * high-performan
3960: 63 65 20 74 69 6d 69 6e 67 20 72 6f 75 74 69 6e  ce timing routin
3970: 65 73 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20  es..*/.#include 
3980: 22 68 77 74 69 6d 65 2e 68 22 0a 0a 23 65 6e 64  "hwtime.h"..#end
3990: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 43 48  if../*.** The CH
39a0: 45 43 4b 5f 46 4f 52 5f 49 4e 54 45 52 52 55 50  ECK_FOR_INTERRUP
39b0: 54 20 6d 61 63 72 6f 20 64 65 66 69 6e 65 64 20  T macro defined 
39c0: 68 65 72 65 20 6c 6f 6f 6b 73 20 74 6f 20 73 65  here looks to se
39d0: 65 20 69 66 20 74 68 65 0a 2a 2a 20 73 71 6c 69  e if the.** sqli
39e0: 74 65 33 5f 69 6e 74 65 72 72 75 70 74 28 29 20  te3_interrupt() 
39f0: 72 6f 75 74 69 6e 65 20 68 61 73 20 62 65 65 6e  routine has been
3a00: 20 63 61 6c 6c 65 64 2e 20 20 49 66 20 69 74 20   called.  If it 
3a10: 68 61 73 20 62 65 65 6e 2c 20 74 68 65 6e 0a 2a  has been, then.*
3a20: 2a 20 70 72 6f 63 65 73 73 69 6e 67 20 6f 66 20  * processing of 
3a30: 74 68 65 20 56 44 42 45 20 70 72 6f 67 72 61 6d  the VDBE program
3a40: 20 69 73 20 69 6e 74 65 72 72 75 70 74 65 64 2e   is interrupted.
3a50: 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6d 61 63 72  .**.** This macr
3a60: 6f 20 61 64 64 65 64 20 74 6f 20 65 76 65 72 79  o added to every
3a70: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 74 68 61   instruction tha
3a80: 74 20 64 6f 65 73 20 61 20 6a 75 6d 70 20 69 6e  t does a jump in
3a90: 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 69 6d 70   order to.** imp
3aa0: 6c 65 6d 65 6e 74 20 61 20 6c 6f 6f 70 2e 20 20  lement a loop.  
3ab0: 54 68 69 73 20 74 65 73 74 20 75 73 65 64 20 74  This test used t
3ac0: 6f 20 62 65 20 6f 6e 20 65 76 65 72 79 20 73 69  o be on every si
3ad0: 6e 67 6c 65 20 69 6e 73 74 72 75 63 74 69 6f 6e  ngle instruction
3ae0: 2c 0a 2a 2a 20 62 75 74 20 74 68 61 74 20 6d 65  ,.** but that me
3af0: 61 6e 74 20 77 65 20 6d 6f 72 65 20 74 65 73 74  ant we more test
3b00: 69 6e 67 20 74 68 61 74 20 77 65 20 6e 65 65 64  ing that we need
3b10: 65 64 2e 20 20 42 79 20 6f 6e 6c 79 20 74 65 73  ed.  By only tes
3b20: 74 69 6e 67 20 74 68 65 0a 2a 2a 20 66 6c 61 67  ting the.** flag
3b30: 20 6f 6e 20 6a 75 6d 70 20 69 6e 73 74 72 75 63   on jump instruc
3b40: 74 69 6f 6e 73 2c 20 77 65 20 67 65 74 20 61 20  tions, we get a 
3b50: 28 73 6d 61 6c 6c 29 20 73 70 65 65 64 20 69 6d  (small) speed im
3b60: 70 72 6f 76 65 6d 65 6e 74 2e 0a 2a 2f 0a 23 64  provement..*/.#d
3b70: 65 66 69 6e 65 20 43 48 45 43 4b 5f 46 4f 52 5f  efine CHECK_FOR_
3b80: 49 4e 54 45 52 52 55 50 54 20 5c 0a 20 20 20 69  INTERRUPT \.   i
3b90: 66 28 20 64 62 2d 3e 75 31 2e 69 73 49 6e 74 65  f( db->u1.isInte
3ba0: 72 72 75 70 74 65 64 20 29 20 67 6f 74 6f 20 61  rrupted ) goto a
3bb0: 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 69 6e 74 65  bort_due_to_inte
3bc0: 72 72 75 70 74 3b 0a 0a 0a 23 69 66 6e 64 65 66  rrupt;...#ifndef
3bd0: 20 4e 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20 54 68   NDEBUG./*.** Th
3be0: 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 6f  is function is o
3bf0: 6e 6c 79 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20  nly called from 
3c00: 77 69 74 68 69 6e 20 61 6e 20 61 73 73 65 72 74  within an assert
3c10: 28 29 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 49  () expression. I
3c20: 74 0a 2a 2a 20 63 68 65 63 6b 73 20 74 68 61 74  t.** checks that
3c30: 20 74 68 65 20 73 71 6c 69 74 65 33 2e 6e 54 72   the sqlite3.nTr
3c40: 61 6e 73 61 63 74 69 6f 6e 20 76 61 72 69 61 62  ansaction variab
3c50: 6c 65 20 69 73 20 63 6f 72 72 65 63 74 6c 79 20  le is correctly 
3c60: 73 65 74 20 74 6f 0a 2a 2a 20 74 68 65 20 6e 75  set to.** the nu
3c70: 6d 62 65 72 20 6f 66 20 6e 6f 6e 2d 74 72 61 6e  mber of non-tran
3c80: 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e  saction savepoin
3c90: 74 73 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20  ts currently in 
3ca0: 74 68 65 20 0a 2a 2a 20 6c 69 6e 6b 65 64 20 6c  the .** linked l
3cb0: 69 73 74 20 73 74 61 72 74 69 6e 67 20 61 74 20  ist starting at 
3cc0: 73 71 6c 69 74 65 33 2e 70 53 61 76 65 70 6f 69  sqlite3.pSavepoi
3cd0: 6e 74 2e 0a 2a 2a 20 0a 2a 2a 20 55 73 61 67 65  nt..** .** Usage
3ce0: 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 61 73 73 65  :.**.**     asse
3cf0: 72 74 28 20 63 68 65 63 6b 53 61 76 65 70 6f 69  rt( checkSavepoi
3d00: 6e 74 43 6f 75 6e 74 28 64 62 29 20 29 3b 0a 2a  ntCount(db) );.*
3d10: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 63 68 65  /.static int che
3d20: 63 6b 53 61 76 65 70 6f 69 6e 74 43 6f 75 6e 74  ckSavepointCount
3d30: 28 73 71 6c 69 74 65 33 20 2a 64 62 29 7b 0a 20  (sqlite3 *db){. 
3d40: 20 69 6e 74 20 6e 20 3d 20 30 3b 0a 20 20 53 61   int n = 0;.  Sa
3d50: 76 65 70 6f 69 6e 74 20 2a 70 3b 0a 20 20 66 6f  vepoint *p;.  fo
3d60: 72 28 70 3d 64 62 2d 3e 70 53 61 76 65 70 6f 69  r(p=db->pSavepoi
3d70: 6e 74 3b 20 70 3b 20 70 3d 70 2d 3e 70 4e 65 78  nt; p; p=p->pNex
3d80: 74 29 20 6e 2b 2b 3b 0a 20 20 61 73 73 65 72 74  t) n++;.  assert
3d90: 28 20 6e 3d 3d 28 64 62 2d 3e 6e 53 61 76 65 70  ( n==(db->nSavep
3da0: 6f 69 6e 74 20 2b 20 64 62 2d 3e 69 73 54 72 61  oint + db->isTra
3db0: 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e  nsactionSavepoin
3dc0: 74 29 20 29 3b 0a 20 20 72 65 74 75 72 6e 20 31  t) );.  return 1
3dd0: 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  ;.}.#endif../*.*
3de0: 2a 20 54 72 61 6e 73 66 65 72 20 65 72 72 6f 72  * Transfer error
3df0: 20 6d 65 73 73 61 67 65 20 74 65 78 74 20 66 72   message text fr
3e00: 6f 6d 20 61 6e 20 73 71 6c 69 74 65 33 5f 76 74  om an sqlite3_vt
3e10: 61 62 2e 7a 45 72 72 4d 73 67 20 28 74 65 78 74  ab.zErrMsg (text
3e20: 20 73 74 6f 72 65 64 0a 2a 2a 20 69 6e 20 6d 65   stored.** in me
3e30: 6d 6f 72 79 20 6f 62 74 61 69 6e 65 64 20 66 72  mory obtained fr
3e40: 6f 6d 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f  om sqlite3_mallo
3e50: 63 29 20 69 6e 74 6f 20 61 20 56 64 62 65 2e 7a  c) into a Vdbe.z
3e60: 45 72 72 4d 73 67 20 28 74 65 78 74 20 73 74 6f  ErrMsg (text sto
3e70: 72 65 64 0a 2a 2a 20 69 6e 20 6d 65 6d 6f 72 79  red.** in memory
3e80: 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 73   obtained from s
3e90: 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 29 2e  qlite3DbMalloc).
3ea0: 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20  .*/.static void 
3eb0: 69 6d 70 6f 72 74 56 74 61 62 45 72 72 4d 73 67  importVtabErrMsg
3ec0: 28 56 64 62 65 20 2a 70 2c 20 73 71 6c 69 74 65  (Vdbe *p, sqlite
3ed0: 33 5f 76 74 61 62 20 2a 70 56 74 61 62 29 7b 0a  3_vtab *pVtab){.
3ee0: 20 20 73 71 6c 69 74 65 33 20 2a 64 62 20 3d 20    sqlite3 *db = 
3ef0: 70 2d 3e 64 62 3b 0a 20 20 73 71 6c 69 74 65 33  p->db;.  sqlite3
3f00: 44 62 46 72 65 65 28 64 62 2c 20 70 2d 3e 7a 45  DbFree(db, p->zE
3f10: 72 72 4d 73 67 29 3b 0a 20 20 70 2d 3e 7a 45 72  rrMsg);.  p->zEr
3f20: 72 4d 73 67 20 3d 20 73 71 6c 69 74 65 33 44 62  rMsg = sqlite3Db
3f30: 53 74 72 44 75 70 28 64 62 2c 20 70 56 74 61 62  StrDup(db, pVtab
3f40: 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 73 71  ->zErrMsg);.  sq
3f50: 6c 69 74 65 33 5f 66 72 65 65 28 70 56 74 61 62  lite3_free(pVtab
3f60: 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 70 56  ->zErrMsg);.  pV
3f70: 74 61 62 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 30  tab->zErrMsg = 0
3f80: 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 45 78 65 63  ;.}.../*.** Exec
3f90: 75 74 65 20 61 73 20 6d 75 63 68 20 6f 66 20 61  ute as much of a
3fa0: 20 56 44 42 45 20 70 72 6f 67 72 61 6d 20 61 73   VDBE program as
3fb0: 20 77 65 20 63 61 6e 20 74 68 65 6e 20 72 65 74   we can then ret
3fc0: 75 72 6e 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74  urn..**.** sqlit
3fd0: 65 33 56 64 62 65 4d 61 6b 65 52 65 61 64 79 28  e3VdbeMakeReady(
3fe0: 29 20 6d 75 73 74 20 62 65 20 63 61 6c 6c 65 64  ) must be called
3ff0: 20 62 65 66 6f 72 65 20 74 68 69 73 20 72 6f 75   before this rou
4000: 74 69 6e 65 20 69 6e 20 6f 72 64 65 72 20 74 6f  tine in order to
4010: 0a 2a 2a 20 63 6c 6f 73 65 20 74 68 65 20 70 72  .** close the pr
4020: 6f 67 72 61 6d 20 77 69 74 68 20 61 20 66 69 6e  ogram with a fin
4030: 61 6c 20 4f 50 5f 48 61 6c 74 20 61 6e 64 20 74  al OP_Halt and t
4040: 6f 20 73 65 74 20 75 70 20 74 68 65 20 63 61 6c  o set up the cal
4050: 6c 62 61 63 6b 73 0a 2a 2a 20 61 6e 64 20 74 68  lbacks.** and th
4060: 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20  e error message 
4070: 70 6f 69 6e 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 57  pointer..**.** W
4080: 68 65 6e 65 76 65 72 20 61 20 72 6f 77 20 6f 72  henever a row or
4090: 20 72 65 73 75 6c 74 20 64 61 74 61 20 69 73 20   result data is 
40a0: 61 76 61 69 6c 61 62 6c 65 2c 20 74 68 69 73 20  available, this 
40b0: 72 6f 75 74 69 6e 65 20 77 69 6c 6c 20 65 69 74  routine will eit
40c0: 68 65 72 0a 2a 2a 20 69 6e 76 6f 6b 65 20 74 68  her.** invoke th
40d0: 65 20 72 65 73 75 6c 74 20 63 61 6c 6c 62 61 63  e result callbac
40e0: 6b 20 28 69 66 20 74 68 65 72 65 20 69 73 20 6f  k (if there is o
40f0: 6e 65 29 20 6f 72 20 72 65 74 75 72 6e 20 77 69  ne) or return wi
4100: 74 68 0a 2a 2a 20 53 51 4c 49 54 45 5f 52 4f 57  th.** SQLITE_ROW
4110: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 61 6e 20 61 74  ..**.** If an at
4120: 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20 74 6f  tempt is made to
4130: 20 6f 70 65 6e 20 61 20 6c 6f 63 6b 65 64 20 64   open a locked d
4140: 61 74 61 62 61 73 65 2c 20 74 68 65 6e 20 74 68  atabase, then th
4150: 69 73 20 72 6f 75 74 69 6e 65 0a 2a 2a 20 77 69  is routine.** wi
4160: 6c 6c 20 65 69 74 68 65 72 20 69 6e 76 6f 6b 65  ll either invoke
4170: 20 74 68 65 20 62 75 73 79 20 63 61 6c 6c 62 61   the busy callba
4180: 63 6b 20 28 69 66 20 74 68 65 72 65 20 69 73 20  ck (if there is 
4190: 6f 6e 65 29 20 6f 72 20 69 74 20 77 69 6c 6c 0a  one) or it will.
41a0: 2a 2a 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45  ** return SQLITE
41b0: 5f 42 55 53 59 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  _BUSY..**.** If 
41c0: 61 6e 20 65 72 72 6f 72 20 6f 63 63 75 72 73 2c  an error occurs,
41d0: 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67   an error messag
41e0: 65 20 69 73 20 77 72 69 74 74 65 6e 20 74 6f 20  e is written to 
41f0: 6d 65 6d 6f 72 79 20 6f 62 74 61 69 6e 65 64 0a  memory obtained.
4200: 2a 2a 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 5f  ** from sqlite3_
4210: 6d 61 6c 6c 6f 63 28 29 20 61 6e 64 20 70 2d 3e  malloc() and p->
4220: 7a 45 72 72 4d 73 67 20 69 73 20 6d 61 64 65 20  zErrMsg is made 
4230: 74 6f 20 70 6f 69 6e 74 20 74 6f 20 74 68 61 74  to point to that
4240: 20 6d 65 6d 6f 72 79 2e 0a 2a 2a 20 54 68 65 20   memory..** The 
4250: 65 72 72 6f 72 20 63 6f 64 65 20 69 73 20 73 74  error code is st
4260: 6f 72 65 64 20 69 6e 20 70 2d 3e 72 63 20 61 6e  ored in p->rc an
4270: 64 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 72  d this routine r
4280: 65 74 75 72 6e 73 20 53 51 4c 49 54 45 5f 45 52  eturns SQLITE_ER
4290: 52 4f 52 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ROR..**.** If th
42a0: 65 20 63 61 6c 6c 62 61 63 6b 20 65 76 65 72 20  e callback ever 
42b0: 72 65 74 75 72 6e 73 20 6e 6f 6e 2d 7a 65 72 6f  returns non-zero
42c0: 2c 20 74 68 65 6e 20 74 68 65 20 70 72 6f 67 72  , then the progr
42d0: 61 6d 20 65 78 69 74 73 0a 2a 2a 20 69 6d 6d 65  am exits.** imme
42e0: 64 69 61 74 65 6c 79 2e 20 20 54 68 65 72 65 20  diately.  There 
42f0: 77 69 6c 6c 20 62 65 20 6e 6f 20 65 72 72 6f 72  will be no error
4300: 20 6d 65 73 73 61 67 65 20 62 75 74 20 74 68 65   message but the
4310: 20 70 2d 3e 72 63 20 66 69 65 6c 64 20 69 73 0a   p->rc field is.
4320: 2a 2a 20 73 65 74 20 74 6f 20 53 51 4c 49 54 45  ** set to SQLITE
4330: 5f 41 42 4f 52 54 20 61 6e 64 20 74 68 69 73 20  _ABORT and this 
4340: 72 6f 75 74 69 6e 65 20 77 69 6c 6c 20 72 65 74  routine will ret
4350: 75 72 6e 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  urn SQLITE_ERROR
4360: 2e 0a 2a 2a 0a 2a 2a 20 41 20 6d 65 6d 6f 72 79  ..**.** A memory
4370: 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 65 72 72 6f   allocation erro
4380: 72 20 63 61 75 73 65 73 20 70 2d 3e 72 63 20 74  r causes p->rc t
4390: 6f 20 62 65 20 73 65 74 20 74 6f 20 53 51 4c 49  o be set to SQLI
43a0: 54 45 5f 4e 4f 4d 45 4d 20 61 6e 64 20 74 68 69  TE_NOMEM and thi
43b0: 73 0a 2a 2a 20 72 6f 75 74 69 6e 65 20 74 6f 20  s.** routine to 
43c0: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 45 52  return SQLITE_ER
43d0: 52 4f 52 2e 0a 2a 2a 0a 2a 2a 20 4f 74 68 65 72  ROR..**.** Other
43e0: 20 66 61 74 61 6c 20 65 72 72 6f 72 73 20 72 65   fatal errors re
43f0: 74 75 72 6e 20 53 51 4c 49 54 45 5f 45 52 52 4f  turn SQLITE_ERRO
4400: 52 2e 0a 2a 2a 0a 2a 2a 20 41 66 74 65 72 20 74  R..**.** After t
4410: 68 69 73 20 72 6f 75 74 69 6e 65 20 68 61 73 20  his routine has 
4420: 66 69 6e 69 73 68 65 64 2c 20 73 71 6c 69 74 65  finished, sqlite
4430: 33 56 64 62 65 46 69 6e 61 6c 69 7a 65 28 29 20  3VdbeFinalize() 
4440: 73 68 6f 75 6c 64 20 62 65 0a 2a 2a 20 75 73 65  should be.** use
4450: 64 20 74 6f 20 63 6c 65 61 6e 20 75 70 20 74 68  d to clean up th
4460: 65 20 6d 65 73 73 20 74 68 61 74 20 77 61 73 20  e mess that was 
4470: 6c 65 66 74 20 62 65 68 69 6e 64 2e 0a 2a 2f 0a  left behind..*/.
4480: 69 6e 74 20 73 71 6c 69 74 65 33 56 64 62 65 45  int sqlite3VdbeE
4490: 78 65 63 28 0a 20 20 56 64 62 65 20 2a 70 20 20  xec(.  Vdbe *p  
44a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
44b0: 20 20 2f 2a 20 54 68 65 20 56 44 42 45 20 2a 2f    /* The VDBE */
44c0: 0a 29 7b 0a 20 20 69 6e 74 20 70 63 3d 30 3b 20  .){.  int pc=0; 
44d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
44e0: 20 2f 2a 20 54 68 65 20 70 72 6f 67 72 61 6d 20   /* The program 
44f0: 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 4f 70 20  counter */.  Op 
4500: 2a 61 4f 70 20 3d 20 70 2d 3e 61 4f 70 3b 20 20  *aOp = p->aOp;  
4510: 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 70 79 20          /* Copy 
4520: 6f 66 20 70 2d 3e 61 4f 70 20 2a 2f 0a 20 20 4f  of p->aOp */.  O
4530: 70 20 2a 70 4f 70 3b 20 20 20 20 20 20 20 20 20  p *pOp;         
4540: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72            /* Cur
4550: 72 65 6e 74 20 6f 70 65 72 61 74 69 6f 6e 20 2a  rent operation *
4560: 2f 0a 20 20 69 6e 74 20 72 63 20 3d 20 53 51 4c  /.  int rc = SQL
4570: 49 54 45 5f 4f 4b 3b 20 20 20 20 20 20 20 20 2f  ITE_OK;        /
4580: 2a 20 56 61 6c 75 65 20 74 6f 20 72 65 74 75 72  * Value to retur
4590: 6e 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a  n */.  sqlite3 *
45a0: 64 62 20 3d 20 70 2d 3e 64 62 3b 20 20 20 20 20  db = p->db;     
45b0: 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73    /* The databas
45c0: 65 20 2a 2f 0a 20 20 75 38 20 72 65 73 65 74 53  e */.  u8 resetS
45d0: 63 68 65 6d 61 4f 6e 46 61 75 6c 74 20 3d 20 30  chemaOnFault = 0
45e0: 3b 20 2f 2a 20 52 65 73 65 74 20 73 63 68 65 6d  ; /* Reset schem
45f0: 61 20 61 66 74 65 72 20 61 6e 20 65 72 72 6f 72  a after an error
4600: 20 69 66 20 74 72 75 65 20 2a 2f 0a 20 20 75 38   if true */.  u8
4610: 20 65 6e 63 6f 64 69 6e 67 20 3d 20 45 4e 43 28   encoding = ENC(
4620: 64 62 29 3b 20 20 20 20 20 2f 2a 20 54 68 65 20  db);     /* The 
4630: 64 61 74 61 62 61 73 65 20 65 6e 63 6f 64 69 6e  database encodin
4640: 67 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  g */.#ifndef SQL
4650: 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53  ITE_OMIT_PROGRES
4660: 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 69 6e 74  S_CALLBACK.  int
4670: 20 63 68 65 63 6b 50 72 6f 67 72 65 73 73 3b 20   checkProgress; 
4680: 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
4690: 69 66 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c  if progress call
46a0: 62 61 63 6b 73 20 61 72 65 20 65 6e 61 62 6c 65  backs are enable
46b0: 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 50 72 6f 67  d */.  int nProg
46c0: 72 65 73 73 4f 70 73 20 3d 20 30 3b 20 20 20 20  ressOps = 0;    
46d0: 20 20 2f 2a 20 4f 70 63 6f 64 65 73 20 65 78 65    /* Opcodes exe
46e0: 63 75 74 65 64 20 73 69 6e 63 65 20 70 72 6f 67  cuted since prog
46f0: 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 2e 20 2a  ress callback. *
4700: 2f 0a 23 65 6e 64 69 66 0a 20 20 4d 65 6d 20 2a  /.#endif.  Mem *
4710: 61 4d 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b 20  aMem = p->aMem; 
4720: 20 20 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66        /* Copy of
4730: 20 70 2d 3e 61 4d 65 6d 20 2a 2f 0a 20 20 4d 65   p->aMem */.  Me
4740: 6d 20 2a 70 49 6e 31 20 3d 20 30 3b 20 20 20 20  m *pIn1 = 0;    
4750: 20 20 20 20 20 20 20 20 20 2f 2a 20 31 73 74 20           /* 1st 
4760: 69 6e 70 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f  input operand */
4770: 0a 20 20 4d 65 6d 20 2a 70 49 6e 32 20 3d 20 30  .  Mem *pIn2 = 0
4780: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
4790: 20 32 6e 64 20 69 6e 70 75 74 20 6f 70 65 72 61   2nd input opera
47a0: 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e  nd */.  Mem *pIn
47b0: 33 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20  3 = 0;          
47c0: 20 20 20 2f 2a 20 33 72 64 20 69 6e 70 75 74 20     /* 3rd input 
47d0: 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d  operand */.  Mem
47e0: 20 2a 70 4f 75 74 20 3d 20 30 3b 20 20 20 20 20   *pOut = 0;     
47f0: 20 20 20 20 20 20 20 20 2f 2a 20 4f 75 74 70 75          /* Outpu
4800: 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 69  t operand */.  i
4810: 6e 74 20 69 43 6f 6d 70 61 72 65 20 3d 20 30 3b  nt iCompare = 0;
4820: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73            /* Res
4830: 75 6c 74 20 6f 66 20 6c 61 73 74 20 4f 50 5f 43  ult of last OP_C
4840: 6f 6d 70 61 72 65 20 6f 70 65 72 61 74 69 6f 6e  ompare operation
4850: 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 50 65 72 6d   */.  int *aPerm
4860: 75 74 65 20 3d 20 30 3b 20 20 20 20 20 20 20 20  ute = 0;        
4870: 20 2f 2a 20 50 65 72 6d 75 74 61 74 69 6f 6e 20   /* Permutation 
4880: 6f 66 20 63 6f 6c 75 6d 6e 73 20 66 6f 72 20 4f  of columns for O
4890: 50 5f 43 6f 6d 70 61 72 65 20 2a 2f 0a 23 69 66  P_Compare */.#if
48a0: 64 65 66 20 56 44 42 45 5f 50 52 4f 46 49 4c 45  def VDBE_PROFILE
48b0: 0a 20 20 75 36 34 20 73 74 61 72 74 3b 20 20 20  .  u64 start;   
48c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
48d0: 20 43 50 55 20 63 6c 6f 63 6b 20 63 6f 75 6e 74   CPU clock count
48e0: 20 61 74 20 73 74 61 72 74 20 6f 66 20 6f 70 63   at start of opc
48f0: 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20 6f 72 69  ode */.  int ori
4900: 67 50 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  gPc;            
4910: 20 20 20 20 2f 2a 20 50 72 6f 67 72 61 6d 20 63      /* Program c
4920: 6f 75 6e 74 65 72 20 61 74 20 73 74 61 72 74 20  ounter at start 
4930: 6f 66 20 6f 70 63 6f 64 65 20 2a 2f 0a 23 65 6e  of opcode */.#en
4940: 64 69 66 0a 20 20 2f 2a 2a 2a 20 49 4e 53 45 52  dif.  /*** INSER
4950: 54 20 53 54 41 43 4b 20 55 4e 49 4f 4e 20 48 45  T STACK UNION HE
4960: 52 45 20 2a 2a 2a 2f 0a 0a 20 20 61 73 73 65 72  RE ***/..  asser
4970: 74 28 20 70 2d 3e 6d 61 67 69 63 3d 3d 56 44 42  t( p->magic==VDB
4980: 45 5f 4d 41 47 49 43 5f 52 55 4e 20 29 3b 20 20  E_MAGIC_RUN );  
4990: 2f 2a 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28  /* sqlite3_step(
49a0: 29 20 76 65 72 69 66 69 65 73 20 74 68 69 73 20  ) verifies this 
49b0: 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  */.  sqlite3Vdbe
49c0: 4d 75 74 65 78 41 72 72 61 79 45 6e 74 65 72 28  MutexArrayEnter(
49d0: 70 29 3b 0a 20 20 69 66 28 20 70 2d 3e 72 63 3d  p);.  if( p->rc=
49e0: 3d 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 29 7b  =SQLITE_NOMEM ){
49f0: 0a 20 20 20 20 2f 2a 20 54 68 69 73 20 68 61 70  .    /* This hap
4a00: 70 65 6e 73 20 69 66 20 61 20 6d 61 6c 6c 6f 63  pens if a malloc
4a10: 28 29 20 69 6e 73 69 64 65 20 61 20 63 61 6c 6c  () inside a call
4a20: 20 74 6f 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75   to sqlite3_colu
4a30: 6d 6e 5f 74 65 78 74 28 29 20 6f 72 0a 20 20 20  mn_text() or.   
4a40: 20 2a 2a 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75   ** sqlite3_colu
4a50: 6d 6e 5f 74 65 78 74 31 36 28 29 20 66 61 69 6c  mn_text16() fail
4a60: 65 64 2e 20 20 2a 2f 0a 20 20 20 20 67 6f 74 6f  ed.  */.    goto
4a70: 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 61   no_mem;.  }.  a
4a80: 73 73 65 72 74 28 20 70 2d 3e 72 63 3d 3d 53 51  ssert( p->rc==SQ
4a90: 4c 49 54 45 5f 4f 4b 20 7c 7c 20 70 2d 3e 72 63  LITE_OK || p->rc
4aa0: 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29 3b  ==SQLITE_BUSY );
4ab0: 0a 20 20 70 2d 3e 72 63 20 3d 20 53 51 4c 49 54  .  p->rc = SQLIT
4ac0: 45 5f 4f 4b 3b 0a 20 20 61 73 73 65 72 74 28 20  E_OK;.  assert( 
4ad0: 70 2d 3e 65 78 70 6c 61 69 6e 3d 3d 30 20 29 3b  p->explain==0 );
4ae0: 0a 20 20 70 2d 3e 70 52 65 73 75 6c 74 53 65 74  .  p->pResultSet
4af0: 20 3d 20 30 3b 0a 20 20 64 62 2d 3e 62 75 73 79   = 0;.  db->busy
4b00: 48 61 6e 64 6c 65 72 2e 6e 42 75 73 79 20 3d 20  Handler.nBusy = 
4b10: 30 3b 0a 20 20 43 48 45 43 4b 5f 46 4f 52 5f 49  0;.  CHECK_FOR_I
4b20: 4e 54 45 52 52 55 50 54 3b 0a 20 20 73 71 6c 69  NTERRUPT;.  sqli
4b30: 74 65 33 56 64 62 65 49 4f 54 72 61 63 65 53 71  te3VdbeIOTraceSq
4b40: 6c 28 70 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  l(p);.#ifndef SQ
4b50: 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45  LITE_OMIT_PROGRE
4b60: 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 63 68  SS_CALLBACK.  ch
4b70: 65 63 6b 50 72 6f 67 72 65 73 73 20 3d 20 64 62  eckProgress = db
4b80: 2d 3e 78 50 72 6f 67 72 65 73 73 21 3d 30 3b 0a  ->xProgress!=0;.
4b90: 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51  #endif.#ifdef SQ
4ba0: 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 73 71 6c  LITE_DEBUG.  sql
4bb0: 69 74 65 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d  ite3BeginBenignM
4bc0: 61 6c 6c 6f 63 28 29 3b 0a 20 20 69 66 28 20 70  alloc();.  if( p
4bd0: 2d 3e 70 63 3d 3d 30 20 20 26 26 20 28 70 2d 3e  ->pc==0  && (p->
4be0: 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49  db->flags & SQLI
4bf0: 54 45 5f 56 64 62 65 4c 69 73 74 69 6e 67 29 21  TE_VdbeListing)!
4c00: 3d 30 20 29 7b 0a 20 20 20 20 69 6e 74 20 69 3b  =0 ){.    int i;
4c10: 0a 20 20 20 20 70 72 69 6e 74 66 28 22 56 44 42  .    printf("VDB
4c20: 45 20 50 72 6f 67 72 61 6d 20 4c 69 73 74 69 6e  E Program Listin
4c30: 67 3a 5c 6e 22 29 3b 0a 20 20 20 20 73 71 6c 69  g:\n");.    sqli
4c40: 74 65 33 56 64 62 65 50 72 69 6e 74 53 71 6c 28  te3VdbePrintSql(
4c50: 70 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b  p);.    for(i=0;
4c60: 20 69 3c 70 2d 3e 6e 4f 70 3b 20 69 2b 2b 29 7b   i<p->nOp; i++){
4c70: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
4c80: 62 65 50 72 69 6e 74 4f 70 28 73 74 64 6f 75 74  bePrintOp(stdout
4c90: 2c 20 69 2c 20 26 61 4f 70 5b 69 5d 29 3b 0a 20  , i, &aOp[i]);. 
4ca0: 20 20 20 7d 0a 20 20 7d 0a 20 20 73 71 6c 69 74     }.  }.  sqlit
4cb0: 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f  e3EndBenignMallo
4cc0: 63 28 29 3b 0a 23 65 6e 64 69 66 0a 20 20 66 6f  c();.#endif.  fo
4cd0: 72 28 70 63 3d 70 2d 3e 70 63 3b 20 72 63 3d 3d  r(pc=p->pc; rc==
4ce0: 53 51 4c 49 54 45 5f 4f 4b 3b 20 70 63 2b 2b 29  SQLITE_OK; pc++)
4cf0: 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 63  {.    assert( pc
4d00: 3e 3d 30 20 26 26 20 70 63 3c 70 2d 3e 6e 4f 70  >=0 && pc<p->nOp
4d10: 20 29 3b 0a 20 20 20 20 69 66 28 20 64 62 2d 3e   );.    if( db->
4d20: 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 20 67  mallocFailed ) g
4d30: 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 23 69 66 64  oto no_mem;.#ifd
4d40: 65 66 20 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a  ef VDBE_PROFILE.
4d50: 20 20 20 20 6f 72 69 67 50 63 20 3d 20 70 63 3b      origPc = pc;
4d60: 0a 20 20 20 20 73 74 61 72 74 20 3d 20 73 71 6c  .    start = sql
4d70: 69 74 65 33 48 77 74 69 6d 65 28 29 3b 0a 23 65  ite3Hwtime();.#e
4d80: 6e 64 69 66 0a 20 20 20 20 70 4f 70 20 3d 20 26  ndif.    pOp = &
4d90: 61 4f 70 5b 70 63 5d 3b 0a 0a 20 20 20 20 2f 2a  aOp[pc];..    /*
4da0: 20 4f 6e 6c 79 20 61 6c 6c 6f 77 20 74 72 61 63   Only allow trac
4db0: 69 6e 67 20 69 66 20 53 51 4c 49 54 45 5f 44 45  ing if SQLITE_DE
4dc0: 42 55 47 20 69 73 20 64 65 66 69 6e 65 64 2e 0a  BUG is defined..
4dd0: 20 20 20 20 2a 2f 0a 23 69 66 64 65 66 20 53 51      */.#ifdef SQ
4de0: 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20 69  LITE_DEBUG.    i
4df0: 66 28 20 70 2d 3e 74 72 61 63 65 20 29 7b 0a 20  f( p->trace ){. 
4e00: 20 20 20 20 20 69 66 28 20 70 63 3d 3d 30 20 29       if( pc==0 )
4e10: 7b 0a 20 20 20 20 20 20 20 20 70 72 69 6e 74 66  {.        printf
4e20: 28 22 56 44 42 45 20 45 78 65 63 75 74 69 6f 6e  ("VDBE Execution
4e30: 20 54 72 61 63 65 3a 5c 6e 22 29 3b 0a 20 20 20   Trace:\n");.   
4e40: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
4e50: 50 72 69 6e 74 53 71 6c 28 70 29 3b 0a 20 20 20  PrintSql(p);.   
4e60: 20 20 20 7d 0a 20 20 20 20 20 20 73 71 6c 69 74     }.      sqlit
4e70: 65 33 56 64 62 65 50 72 69 6e 74 4f 70 28 70 2d  e3VdbePrintOp(p-
4e80: 3e 74 72 61 63 65 2c 20 70 63 2c 20 70 4f 70 29  >trace, pc, pOp)
4e90: 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20  ;.    }.#endif. 
4ea0: 20 20 20 20 20 0a 0a 20 20 20 20 2f 2a 20 43 68       ..    /* Ch
4eb0: 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 77 65  eck to see if we
4ec0: 20 6e 65 65 64 20 74 6f 20 73 69 6d 75 6c 61 74   need to simulat
4ed0: 65 20 61 6e 20 69 6e 74 65 72 72 75 70 74 2e 20  e an interrupt. 
4ee0: 20 54 68 69 73 20 6f 6e 6c 79 20 68 61 70 70 65   This only happe
4ef0: 6e 73 0a 20 20 20 20 2a 2a 20 69 66 20 77 65 20  ns.    ** if we 
4f00: 68 61 76 65 20 61 20 73 70 65 63 69 61 6c 20 74  have a special t
4f10: 65 73 74 20 62 75 69 6c 64 2e 0a 20 20 20 20 2a  est build..    *
4f20: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
4f30: 54 45 53 54 0a 20 20 20 20 69 66 28 20 73 71 6c  TEST.    if( sql
4f40: 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 5f 63  ite3_interrupt_c
4f50: 6f 75 6e 74 3e 30 20 29 7b 0a 20 20 20 20 20 20  ount>0 ){.      
4f60: 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70  sqlite3_interrup
4f70: 74 5f 63 6f 75 6e 74 2d 2d 3b 0a 20 20 20 20 20  t_count--;.     
4f80: 20 69 66 28 20 73 71 6c 69 74 65 33 5f 69 6e 74   if( sqlite3_int
4f90: 65 72 72 75 70 74 5f 63 6f 75 6e 74 3d 3d 30 20  errupt_count==0 
4fa0: 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  ){.        sqlit
4fb0: 65 33 5f 69 6e 74 65 72 72 75 70 74 28 64 62 29  e3_interrupt(db)
4fc0: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
4fd0: 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20  #endif..#ifndef 
4fe0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47  SQLITE_OMIT_PROG
4ff0: 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20  RESS_CALLBACK.  
5000: 20 20 2f 2a 20 43 61 6c 6c 20 74 68 65 20 70 72    /* Call the pr
5010: 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20  ogress callback 
5020: 69 66 20 69 74 20 69 73 20 63 6f 6e 66 69 67 75  if it is configu
5030: 72 65 64 20 61 6e 64 20 74 68 65 20 72 65 71 75  red and the requ
5040: 69 72 65 64 20 6e 75 6d 62 65 72 0a 20 20 20 20  ired number.    
5050: 2a 2a 20 6f 66 20 56 44 42 45 20 6f 70 73 20 68  ** of VDBE ops h
5060: 61 76 65 20 62 65 65 6e 20 65 78 65 63 75 74 65  ave been execute
5070: 64 20 28 65 69 74 68 65 72 20 73 69 6e 63 65 20  d (either since 
5080: 74 68 69 73 20 69 6e 76 6f 63 61 74 69 6f 6e 20  this invocation 
5090: 6f 66 0a 20 20 20 20 2a 2a 20 73 71 6c 69 74 65  of.    ** sqlite
50a0: 33 56 64 62 65 45 78 65 63 28 29 20 6f 72 20 73  3VdbeExec() or s
50b0: 69 6e 63 65 20 6c 61 73 74 20 74 69 6d 65 20 74  ince last time t
50c0: 68 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c  he progress call
50d0: 62 61 63 6b 20 77 61 73 20 63 61 6c 6c 65 64 29  back was called)
50e0: 2e 0a 20 20 20 20 2a 2a 20 49 66 20 74 68 65 20  ..    ** If the 
50f0: 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63  progress callbac
5100: 6b 20 72 65 74 75 72 6e 73 20 6e 6f 6e 2d 7a 65  k returns non-ze
5110: 72 6f 2c 20 65 78 69 74 20 74 68 65 20 76 69 72  ro, exit the vir
5120: 74 75 61 6c 20 6d 61 63 68 69 6e 65 20 77 69 74  tual machine wit
5130: 68 0a 20 20 20 20 2a 2a 20 61 20 72 65 74 75 72  h.    ** a retur
5140: 6e 20 63 6f 64 65 20 53 51 4c 49 54 45 5f 41 42  n code SQLITE_AB
5150: 4f 52 54 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  ORT..    */.    
5160: 69 66 28 20 63 68 65 63 6b 50 72 6f 67 72 65 73  if( checkProgres
5170: 73 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 64  s ){.      if( d
5180: 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 3d  b->nProgressOps=
5190: 3d 6e 50 72 6f 67 72 65 73 73 4f 70 73 20 29 7b  =nProgressOps ){
51a0: 0a 20 20 20 20 20 20 20 20 69 6e 74 20 70 72 63  .        int prc
51b0: 3b 0a 20 20 20 20 20 20 20 20 70 72 63 20 3d 20  ;.        prc = 
51c0: 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 28 64 62  db->xProgress(db
51d0: 2d 3e 70 50 72 6f 67 72 65 73 73 41 72 67 29 3b  ->pProgressArg);
51e0: 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 72 63  .        if( prc
51f0: 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20  !=0 ){.         
5200: 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54   rc = SQLITE_INT
5210: 45 52 52 55 50 54 3b 0a 20 20 20 20 20 20 20 20  ERRUPT;.        
5220: 20 20 67 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f    goto vdbe_erro
5230: 72 5f 68 61 6c 74 3b 0a 20 20 20 20 20 20 20 20  r_halt;.        
5240: 7d 0a 20 20 20 20 20 20 20 20 6e 50 72 6f 67 72  }.        nProgr
5250: 65 73 73 4f 70 73 20 3d 20 30 3b 0a 20 20 20 20  essOps = 0;.    
5260: 20 20 7d 0a 20 20 20 20 20 20 6e 50 72 6f 67 72    }.      nProgr
5270: 65 73 73 4f 70 73 2b 2b 3b 0a 20 20 20 20 7d 0a  essOps++;.    }.
5280: 23 65 6e 64 69 66 0a 0a 20 20 20 20 2f 2a 20 4f  #endif..    /* O
5290: 6e 20 61 6e 79 20 6f 70 63 6f 64 65 20 77 69 74  n any opcode wit
52a0: 68 20 74 68 65 20 22 6f 75 74 32 2d 70 72 65 72  h the "out2-prer
52b0: 65 6c 61 73 65 22 20 74 61 67 2c 20 66 72 65 65  elase" tag, free
52c0: 20 61 6e 79 0a 20 20 20 20 2a 2a 20 65 78 74 65   any.    ** exte
52d0: 72 6e 61 6c 20 61 6c 6c 6f 63 61 74 69 6f 6e 73  rnal allocations
52e0: 20 6f 75 74 20 6f 66 20 6d 65 6d 5b 70 32 5d 20   out of mem[p2] 
52f0: 61 6e 64 20 73 65 74 20 6d 65 6d 5b 70 32 5d 20  and set mem[p2] 
5300: 74 6f 20 62 65 0a 20 20 20 20 2a 2a 20 61 6e 20  to be.    ** an 
5310: 75 6e 64 65 66 69 6e 65 64 20 69 6e 74 65 67 65  undefined intege
5320: 72 2e 20 20 4f 70 63 6f 64 65 73 20 77 69 6c 6c  r.  Opcodes will
5330: 20 65 69 74 68 65 72 20 66 69 6c 6c 20 69 6e 20   either fill in 
5340: 74 68 65 20 69 6e 74 65 67 65 72 0a 20 20 20 20  the integer.    
5350: 2a 2a 20 76 61 6c 75 65 20 6f 72 20 63 6f 6e 76  ** value or conv
5360: 65 72 74 20 6d 65 6d 5b 70 32 5d 20 74 6f 20 61  ert mem[p2] to a
5370: 20 64 69 66 66 65 72 65 6e 74 20 74 79 70 65 2e   different type.
5380: 0a 20 20 20 20 2a 2f 0a 20 20 20 20 61 73 73 65  .    */.    asse
5390: 72 74 28 20 70 4f 70 2d 3e 6f 70 66 6c 61 67 73  rt( pOp->opflags
53a0: 3d 3d 73 71 6c 69 74 65 33 4f 70 63 6f 64 65 50  ==sqlite3OpcodeP
53b0: 72 6f 70 65 72 74 79 5b 70 4f 70 2d 3e 6f 70 63  roperty[pOp->opc
53c0: 6f 64 65 5d 20 29 3b 0a 20 20 20 20 69 66 28 20  ode] );.    if( 
53d0: 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f  pOp->opflags & O
53e0: 50 46 4c 47 5f 4f 55 54 32 5f 50 52 45 52 45 4c  PFLG_OUT2_PREREL
53f0: 45 41 53 45 20 29 7b 0a 20 20 20 20 20 20 61 73  EASE ){.      as
5400: 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20  sert( pOp->p2>0 
5410: 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
5420: 20 70 4f 70 2d 3e 70 32 3c 3d 70 2d 3e 6e 4d 65   pOp->p2<=p->nMe
5430: 6d 20 29 3b 0a 20 20 20 20 20 20 70 4f 75 74 20  m );.      pOut 
5440: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
5450: 3b 0a 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74  ;.      memAbout
5460: 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74  ToChange(p, pOut
5470: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
5480: 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 45 78  VdbeMemReleaseEx
5490: 74 65 72 6e 61 6c 28 70 4f 75 74 29 3b 0a 20 20  ternal(pOut);.  
54a0: 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20      pOut->flags 
54b0: 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 7d  = MEM_Int;.    }
54c0: 0a 0a 20 20 20 20 2f 2a 20 53 61 6e 69 74 79 20  ..    /* Sanity 
54d0: 63 68 65 63 6b 69 6e 67 20 6f 6e 20 6f 74 68 65  checking on othe
54e0: 72 20 6f 70 65 72 61 6e 64 73 20 2a 2f 0a 23 69  r operands */.#i
54f0: 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
5500: 47 0a 20 20 20 20 69 66 28 20 28 70 4f 70 2d 3e  G.    if( (pOp->
5510: 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f  opflags & OPFLG_
5520: 49 4e 31 29 21 3d 30 20 29 7b 0a 20 20 20 20 20  IN1)!=0 ){.     
5530: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
5540: 3e 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  >0 );.      asse
5550: 72 74 28 20 70 4f 70 2d 3e 70 31 3c 3d 70 2d 3e  rt( pOp->p1<=p->
5560: 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20 61 73  nMem );.      as
5570: 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
5580: 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 29  (&aMem[pOp->p1])
5590: 20 29 3b 0a 20 20 20 20 20 20 52 45 47 49 53 54   );.      REGIST
55a0: 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31  ER_TRACE(pOp->p1
55b0: 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  , &aMem[pOp->p1]
55c0: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  );.    }.    if(
55d0: 20 28 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26   (pOp->opflags &
55e0: 20 4f 50 46 4c 47 5f 49 4e 32 29 21 3d 30 20 29   OPFLG_IN2)!=0 )
55f0: 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  {.      assert( 
5600: 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 20  pOp->p2>0 );.   
5610: 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
5620: 70 32 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20  p2<=p->nMem );. 
5630: 20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d       assert( mem
5640: 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f  IsValid(&aMem[pO
5650: 70 2d 3e 70 32 5d 29 20 29 3b 0a 20 20 20 20 20  p->p2]) );.     
5660: 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
5670: 70 4f 70 2d 3e 70 32 2c 20 26 61 4d 65 6d 5b 70  pOp->p2, &aMem[p
5680: 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20 20 20 7d 0a  Op->p2]);.    }.
5690: 20 20 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70      if( (pOp->op
56a0: 66 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f 49 4e  flags & OPFLG_IN
56b0: 33 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 61  3)!=0 ){.      a
56c0: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30  ssert( pOp->p3>0
56d0: 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
56e0: 28 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d  ( pOp->p3<=p->nM
56f0: 65 6d 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  em );.      asse
5700: 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26  rt( memIsValid(&
5710: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 20 29  aMem[pOp->p3]) )
5720: 3b 0a 20 20 20 20 20 20 52 45 47 49 53 54 45 52  ;.      REGISTER
5730: 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20  _TRACE(pOp->p3, 
5740: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b  &aMem[pOp->p3]);
5750: 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 28  .    }.    if( (
5760: 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f  pOp->opflags & O
5770: 50 46 4c 47 5f 4f 55 54 32 29 21 3d 30 20 29 7b  PFLG_OUT2)!=0 ){
5780: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
5790: 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 20 20  Op->p2>0 );.    
57a0: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
57b0: 32 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20  2<=p->nMem );.  
57c0: 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68      memAboutToCh
57d0: 61 6e 67 65 28 70 2c 20 26 61 4d 65 6d 5b 70 4f  ange(p, &aMem[pO
57e0: 70 2d 3e 70 32 5d 29 3b 0a 20 20 20 20 7d 0a 20  p->p2]);.    }. 
57f0: 20 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70 66     if( (pOp->opf
5800: 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f 4f 55 54  lags & OPFLG_OUT
5810: 33 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 61  3)!=0 ){.      a
5820: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30  ssert( pOp->p3>0
5830: 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
5840: 28 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d  ( pOp->p3<=p->nM
5850: 65 6d 20 29 3b 0a 20 20 20 20 20 20 6d 65 6d 41  em );.      memA
5860: 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
5870: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b  &aMem[pOp->p3]);
5880: 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20  .    }.#endif.  
5890: 0a 20 20 20 20 73 77 69 74 63 68 28 20 70 4f 70  .    switch( pOp
58a0: 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 0a 2f 2a 2a  ->opcode ){../**
58b0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
58c0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
58d0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
58e0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
58f0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 57  ***********.** W
5900: 68 61 74 20 66 6f 6c 6c 6f 77 73 20 69 73 20 61  hat follows is a
5910: 20 6d 61 73 73 69 76 65 20 73 77 69 74 63 68 20   massive switch 
5920: 73 74 61 74 65 6d 65 6e 74 20 77 68 65 72 65 20  statement where 
5930: 65 61 63 68 20 63 61 73 65 20 69 6d 70 6c 65 6d  each case implem
5940: 65 6e 74 73 20 61 0a 2a 2a 20 73 65 70 61 72 61  ents a.** separa
5950: 74 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69  te instruction i
5960: 6e 20 74 68 65 20 76 69 72 74 75 61 6c 20 6d 61  n the virtual ma
5970: 63 68 69 6e 65 2e 20 20 49 66 20 77 65 20 66 6f  chine.  If we fo
5980: 6c 6c 6f 77 20 74 68 65 20 75 73 75 61 6c 0a 2a  llow the usual.*
5990: 2a 20 69 6e 64 65 6e 74 61 74 69 6f 6e 20 63 6f  * indentation co
59a0: 6e 76 65 6e 74 69 6f 6e 73 2c 20 65 61 63 68 20  nventions, each 
59b0: 63 61 73 65 20 73 68 6f 75 6c 64 20 62 65 20 69  case should be i
59c0: 6e 64 65 6e 74 65 64 20 62 79 20 36 20 73 70 61  ndented by 6 spa
59d0: 63 65 73 2e 20 20 42 75 74 0a 2a 2a 20 74 68 61  ces.  But.** tha
59e0: 74 20 69 73 20 61 20 6c 6f 74 20 6f 66 20 77 61  t is a lot of wa
59f0: 73 74 65 64 20 73 70 61 63 65 20 6f 6e 20 74 68  sted space on th
5a00: 65 20 6c 65 66 74 20 6d 61 72 67 69 6e 2e 20 20  e left margin.  
5a10: 53 6f 20 74 68 65 20 63 6f 64 65 20 77 69 74 68  So the code with
5a20: 69 6e 0a 2a 2a 20 74 68 65 20 73 77 69 74 63 68  in.** the switch
5a30: 20 73 74 61 74 65 6d 65 6e 74 20 77 69 6c 6c 20   statement will 
5a40: 62 72 65 61 6b 20 77 69 74 68 20 63 6f 6e 76 65  break with conve
5a50: 6e 74 69 6f 6e 20 61 6e 64 20 62 65 20 66 6c 75  ntion and be flu
5a60: 73 68 2d 6c 65 66 74 2e 20 41 6e 6f 74 68 65 72  sh-left. Another
5a70: 0a 2a 2a 20 62 69 67 20 63 6f 6d 6d 65 6e 74 20  .** big comment 
5a80: 28 73 69 6d 69 6c 61 72 20 74 6f 20 74 68 69 73  (similar to this
5a90: 20 6f 6e 65 29 20 77 69 6c 6c 20 6d 61 72 6b 20   one) will mark 
5aa0: 74 68 65 20 70 6f 69 6e 74 20 69 6e 20 74 68 65  the point in the
5ab0: 20 63 6f 64 65 20 77 68 65 72 65 0a 2a 2a 20 77   code where.** w
5ac0: 65 20 74 72 61 6e 73 69 74 69 6f 6e 20 62 61 63  e transition bac
5ad0: 6b 20 74 6f 20 6e 6f 72 6d 61 6c 20 69 6e 64 65  k to normal inde
5ae0: 6e 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54  ntation..**.** T
5af0: 68 65 20 66 6f 72 6d 61 74 74 69 6e 67 20 6f 66  he formatting of
5b00: 20 65 61 63 68 20 63 61 73 65 20 69 73 20 69 6d   each case is im
5b10: 70 6f 72 74 61 6e 74 2e 20 20 54 68 65 20 6d 61  portant.  The ma
5b20: 6b 65 66 69 6c 65 20 66 6f 72 20 53 51 4c 69 74  kefile for SQLit
5b30: 65 0a 2a 2a 20 67 65 6e 65 72 61 74 65 73 20 74  e.** generates t
5b40: 77 6f 20 43 20 66 69 6c 65 73 20 22 6f 70 63 6f  wo C files "opco
5b50: 64 65 73 2e 68 22 20 61 6e 64 20 22 6f 70 63 6f  des.h" and "opco
5b60: 64 65 73 2e 63 22 20 62 79 20 73 63 61 6e 6e 69  des.c" by scanni
5b70: 6e 67 20 74 68 69 73 0a 2a 2a 20 66 69 6c 65 20  ng this.** file 
5b80: 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20 6c 69 6e 65  looking for line
5b90: 73 20 74 68 61 74 20 62 65 67 69 6e 20 77 69 74  s that begin wit
5ba0: 68 20 22 63 61 73 65 20 4f 50 5f 22 2e 20 20 54  h "case OP_".  T
5bb0: 68 65 20 6f 70 63 6f 64 65 73 2e 68 20 66 69 6c  he opcodes.h fil
5bc0: 65 73 0a 2a 2a 20 77 69 6c 6c 20 62 65 20 66 69  es.** will be fi
5bd0: 6c 6c 65 64 20 77 69 74 68 20 23 64 65 66 69 6e  lled with #defin
5be0: 65 73 20 74 68 61 74 20 67 69 76 65 20 75 6e 69  es that give uni
5bf0: 71 75 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75  que integer valu
5c00: 65 73 20 74 6f 20 65 61 63 68 0a 2a 2a 20 6f 70  es to each.** op
5c10: 63 6f 64 65 20 61 6e 64 20 74 68 65 20 6f 70 63  code and the opc
5c20: 6f 64 65 73 2e 63 20 66 69 6c 65 20 69 73 20 66  odes.c file is f
5c30: 69 6c 6c 65 64 20 77 69 74 68 20 61 6e 20 61 72  illed with an ar
5c40: 72 61 79 20 6f 66 20 73 74 72 69 6e 67 73 20 77  ray of strings w
5c50: 68 65 72 65 0a 2a 2a 20 65 61 63 68 20 73 74 72  here.** each str
5c60: 69 6e 67 20 69 73 20 74 68 65 20 73 79 6d 62 6f  ing is the symbo
5c70: 6c 69 63 20 6e 61 6d 65 20 66 6f 72 20 74 68 65  lic name for the
5c80: 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 6f   corresponding o
5c90: 70 63 6f 64 65 2e 20 20 49 66 20 74 68 65 0a 2a  pcode.  If the.*
5ca0: 2a 20 63 61 73 65 20 73 74 61 74 65 6d 65 6e 74  * case statement
5cb0: 20 69 73 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20   is followed by 
5cc0: 61 20 63 6f 6d 6d 65 6e 74 20 6f 66 20 74 68 65  a comment of the
5cd0: 20 66 6f 72 6d 20 22 2f 23 20 73 61 6d 65 20 61   form "/# same a
5ce0: 73 20 2e 2e 2e 20 23 2f 22 0a 2a 2a 20 74 68 61  s ... #/".** tha
5cf0: 74 20 63 6f 6d 6d 65 6e 74 20 69 73 20 75 73 65  t comment is use
5d00: 64 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74  d to determine t
5d10: 68 65 20 70 61 72 74 69 63 75 6c 61 72 20 76 61  he particular va
5d20: 6c 75 65 20 6f 66 20 74 68 65 20 6f 70 63 6f 64  lue of the opcod
5d30: 65 2e 0a 2a 2a 0a 2a 2a 20 4f 74 68 65 72 20 6b  e..**.** Other k
5d40: 65 79 77 6f 72 64 73 20 69 6e 20 74 68 65 20 63  eywords in the c
5d50: 6f 6d 6d 65 6e 74 20 74 68 61 74 20 66 6f 6c 6c  omment that foll
5d60: 6f 77 73 20 65 61 63 68 20 63 61 73 65 20 61 72  ows each case ar
5d70: 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 63 6f 6e  e used to.** con
5d80: 73 74 72 75 63 74 20 74 68 65 20 4f 50 46 4c 47  struct the OPFLG
5d90: 5f 49 4e 49 54 49 41 4c 49 5a 45 52 20 76 61 6c  _INITIALIZER val
5da0: 75 65 20 74 68 61 74 20 69 6e 69 74 69 61 6c 69  ue that initiali
5db0: 7a 65 73 20 6f 70 63 6f 64 65 50 72 6f 70 65 72  zes opcodeProper
5dc0: 74 79 5b 5d 2e 0a 2a 2a 20 4b 65 79 77 6f 72 64  ty[]..** Keyword
5dd0: 73 20 69 6e 63 6c 75 64 65 3a 20 69 6e 31 2c 20  s include: in1, 
5de0: 69 6e 32 2c 20 69 6e 33 2c 20 6f 75 74 32 5f 70  in2, in3, out2_p
5df0: 72 65 72 65 6c 65 61 73 65 2c 20 6f 75 74 32 2c  rerelease, out2,
5e00: 20 6f 75 74 33 2e 20 20 53 65 65 0a 2a 2a 20 74   out3.  See.** t
5e10: 68 65 20 6d 6b 6f 70 63 6f 64 65 68 2e 61 77 6b  he mkopcodeh.awk
5e20: 20 73 63 72 69 70 74 20 66 6f 72 20 61 64 64 69   script for addi
5e30: 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69  tional informati
5e40: 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 44 6f 63 75 6d 65  on..**.** Docume
5e50: 6e 74 61 74 69 6f 6e 20 61 62 6f 75 74 20 56 44  ntation about VD
5e60: 42 45 20 6f 70 63 6f 64 65 73 20 69 73 20 67 65  BE opcodes is ge
5e70: 6e 65 72 61 74 65 64 20 62 79 20 73 63 61 6e 6e  nerated by scann
5e80: 69 6e 67 20 74 68 69 73 20 66 69 6c 65 0a 2a 2a  ing this file.**
5e90: 20 66 6f 72 20 6c 69 6e 65 73 20 6f 66 20 74 68   for lines of th
5ea0: 61 74 20 63 6f 6e 74 61 69 6e 20 22 4f 70 63 6f  at contain "Opco
5eb0: 64 65 3a 22 2e 20 20 54 68 61 74 20 6c 69 6e 65  de:".  That line
5ec0: 20 61 6e 64 20 61 6c 6c 20 73 75 62 73 65 71 75   and all subsequ
5ed0: 65 6e 74 0a 2a 2a 20 63 6f 6d 6d 65 6e 74 20 6c  ent.** comment l
5ee0: 69 6e 65 73 20 61 72 65 20 75 73 65 64 20 69 6e  ines are used in
5ef0: 20 74 68 65 20 67 65 6e 65 72 61 74 69 6f 6e 20   the generation 
5f00: 6f 66 20 74 68 65 20 6f 70 63 6f 64 65 2e 68 74  of the opcode.ht
5f10: 6d 6c 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e  ml documentation
5f20: 0a 2a 2a 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20  .** file..**.** 
5f30: 53 55 4d 4d 41 52 59 3a 0a 2a 2a 0a 2a 2a 20 20  SUMMARY:.**.**  
5f40: 20 20 20 46 6f 72 6d 61 74 74 69 6e 67 20 69 73     Formatting is
5f50: 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20 73 63   important to sc
5f60: 72 69 70 74 73 20 74 68 61 74 20 73 63 61 6e 20  ripts that scan 
5f70: 74 68 69 73 20 66 69 6c 65 2e 0a 2a 2a 20 20 20  this file..**   
5f80: 20 20 44 6f 20 6e 6f 74 20 64 65 76 69 61 74 65    Do not deviate
5f90: 20 66 72 6f 6d 20 74 68 65 20 66 6f 72 6d 61 74   from the format
5fa0: 74 69 6e 67 20 73 74 79 6c 65 20 63 75 72 72 65  ting style curre
5fb0: 6e 74 6c 79 20 69 6e 20 75 73 65 2e 0a 2a 2a 0a  ntly in use..**.
5fc0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5fd0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5fe0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5ff0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6000: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a  *************/..
6010: 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 47 6f 74 6f  /* Opcode:  Goto
6020: 20 2a 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   * P2 * * *.**.*
6030: 2a 20 41 6e 20 75 6e 63 6f 6e 64 69 74 69 6f 6e  * An uncondition
6040: 61 6c 20 6a 75 6d 70 20 74 6f 20 61 64 64 72 65  al jump to addre
6050: 73 73 20 50 32 2e 0a 2a 2a 20 54 68 65 20 6e 65  ss P2..** The ne
6060: 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 65  xt instruction e
6070: 78 65 63 75 74 65 64 20 77 69 6c 6c 20 62 65 20  xecuted will be 
6080: 0a 2a 2a 20 74 68 65 20 6f 6e 65 20 61 74 20 69  .** the one at i
6090: 6e 64 65 78 20 50 32 20 66 72 6f 6d 20 74 68 65  ndex P2 from the
60a0: 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 0a 2a 2a   beginning of.**
60b0: 20 74 68 65 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f   the program..*/
60c0: 0a 63 61 73 65 20 4f 50 5f 47 6f 74 6f 3a 20 7b  .case OP_Goto: {
60d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
60e0: 6a 75 6d 70 20 2a 2f 0a 20 20 43 48 45 43 4b 5f  jump */.  CHECK_
60f0: 46 4f 52 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20  FOR_INTERRUPT;. 
6100: 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
6110: 31 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  1;.  break;.}../
6120: 2a 20 4f 70 63 6f 64 65 3a 20 20 47 6f 73 75 62  * Opcode:  Gosub
6130: 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
6140: 2a 2a 20 57 72 69 74 65 20 74 68 65 20 63 75 72  ** Write the cur
6150: 72 65 6e 74 20 61 64 64 72 65 73 73 20 6f 6e 74  rent address ont
6160: 6f 20 72 65 67 69 73 74 65 72 20 50 31 0a 2a 2a  o register P1.**
6170: 20 61 6e 64 20 74 68 65 6e 20 6a 75 6d 70 20 74   and then jump t
6180: 6f 20 61 64 64 72 65 73 73 20 50 32 2e 0a 2a 2f  o address P2..*/
6190: 0a 63 61 73 65 20 4f 50 5f 47 6f 73 75 62 3a 20  .case OP_Gosub: 
61a0: 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  {            /* 
61b0: 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70  jump, in1 */.  p
61c0: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
61d0: 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
61e0: 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn1->flags & M
61f0: 45 4d 5f 44 79 6e 29 3d 3d 30 20 29 3b 0a 20 20  EM_Dyn)==0 );.  
6200: 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
6210: 28 70 2c 20 70 49 6e 31 29 3b 0a 20 20 70 49 6e  (p, pIn1);.  pIn
6220: 31 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49  1->flags = MEM_I
6230: 6e 74 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 20  nt;.  pIn1->u.i 
6240: 3d 20 70 63 3b 0a 20 20 52 45 47 49 53 54 45 52  = pc;.  REGISTER
6250: 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20  _TRACE(pOp->p1, 
6260: 70 49 6e 31 29 3b 0a 20 20 70 63 20 3d 20 70 4f  pIn1);.  pc = pO
6270: 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 62 72 65  p->p2 - 1;.  bre
6280: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
6290: 3a 20 20 52 65 74 75 72 6e 20 50 31 20 2a 20 2a  :  Return P1 * *
62a0: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20   * *.**.** Jump 
62b0: 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74  to the next inst
62c0: 72 75 63 74 69 6f 6e 20 61 66 74 65 72 20 74 68  ruction after th
62d0: 65 20 61 64 64 72 65 73 73 20 69 6e 20 72 65 67  e address in reg
62e0: 69 73 74 65 72 20 50 31 2e 0a 2a 2f 0a 63 61 73  ister P1..*/.cas
62f0: 65 20 4f 50 5f 52 65 74 75 72 6e 3a 20 7b 20 20  e OP_Return: {  
6300: 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20           /* in1 
6310: 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
6320: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  m[pOp->p1];.  as
6330: 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67  sert( pIn1->flag
6340: 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20  s & MEM_Int );. 
6350: 20 70 63 20 3d 20 28 69 6e 74 29 70 49 6e 31 2d   pc = (int)pIn1-
6360: 3e 75 2e 69 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  >u.i;.  break;.}
6370: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 59 69  ../* Opcode:  Yi
6380: 65 6c 64 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a  eld P1 * * * *.*
6390: 2a 0a 2a 2a 20 53 77 61 70 20 74 68 65 20 70 72  *.** Swap the pr
63a0: 6f 67 72 61 6d 20 63 6f 75 6e 74 65 72 20 77 69  ogram counter wi
63b0: 74 68 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  th the value in 
63c0: 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2f 0a  register P1..*/.
63d0: 63 61 73 65 20 4f 50 5f 59 69 65 6c 64 3a 20 7b  case OP_Yield: {
63e0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69              /* i
63f0: 6e 31 20 2a 2f 0a 20 20 69 6e 74 20 70 63 44 65  n1 */.  int pcDe
6400: 73 74 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d  st;.  pIn1 = &aM
6410: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  em[pOp->p1];.  a
6420: 73 73 65 72 74 28 20 28 70 49 6e 31 2d 3e 66 6c  ssert( (pIn1->fl
6430: 61 67 73 20 26 20 4d 45 4d 5f 44 79 6e 29 3d 3d  ags & MEM_Dyn)==
6440: 30 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61  0 );.  pIn1->fla
6450: 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20  gs = MEM_Int;.  
6460: 70 63 44 65 73 74 20 3d 20 28 69 6e 74 29 70 49  pcDest = (int)pI
6470: 6e 31 2d 3e 75 2e 69 3b 0a 20 20 70 49 6e 31 2d  n1->u.i;.  pIn1-
6480: 3e 75 2e 69 20 3d 20 70 63 3b 0a 20 20 52 45 47  >u.i = pc;.  REG
6490: 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
64a0: 3e 70 31 2c 20 70 49 6e 31 29 3b 0a 20 20 70 63  >p1, pIn1);.  pc
64b0: 20 3d 20 70 63 44 65 73 74 3b 0a 20 20 62 72 65   = pcDest;.  bre
64c0: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
64d0: 3a 20 20 48 61 6c 74 49 66 4e 75 6c 6c 20 20 50  :  HaltIfNull  P
64e0: 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a  1 P2 P3 P4 *.**.
64f0: 2a 2a 20 43 68 65 63 6b 20 74 68 65 20 76 61 6c  ** Check the val
6500: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
6510: 33 2e 20 20 49 66 20 69 73 20 69 73 20 4e 55 4c  3.  If is is NUL
6520: 4c 20 74 68 65 6e 20 48 61 6c 74 20 75 73 69 6e  L then Halt usin
6530: 67 0a 2a 2a 20 70 61 72 61 6d 65 74 65 72 20 50  g.** parameter P
6540: 31 2c 20 50 32 2c 20 61 6e 64 20 50 34 20 61 73  1, P2, and P4 as
6550: 20 69 66 20 74 68 69 73 20 77 65 72 65 20 61 20   if this were a 
6560: 48 61 6c 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  Halt instruction
6570: 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 76 61 6c  .  If the.** val
6580: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
6590: 33 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 74  3 is not NULL, t
65a0: 68 65 6e 20 74 68 69 73 20 72 6f 75 74 69 6e 65  hen this routine
65b0: 20 69 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a   is a no-op..*/.
65c0: 63 61 73 65 20 4f 50 5f 48 61 6c 74 49 66 4e 75  case OP_HaltIfNu
65d0: 6c 6c 3a 20 7b 20 20 20 20 20 20 2f 2a 20 69 6e  ll: {      /* in
65e0: 33 20 2a 2f 0a 20 20 70 49 6e 33 20 3d 20 26 61  3 */.  pIn3 = &a
65f0: 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
6600: 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73  if( (pIn3->flags
6610: 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20   & MEM_Null)==0 
6620: 29 20 62 72 65 61 6b 3b 0a 20 20 2f 2a 20 46 61  ) break;.  /* Fa
6630: 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e 74 6f 20  ll through into 
6640: 4f 50 5f 48 61 6c 74 20 2a 2f 0a 7d 0a 0a 2f 2a  OP_Halt */.}../*
6650: 20 4f 70 63 6f 64 65 3a 20 20 48 61 6c 74 20 50   Opcode:  Halt P
6660: 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a  1 P2 * P4 *.**.*
6670: 2a 20 45 78 69 74 20 69 6d 6d 65 64 69 61 74 65  * Exit immediate
6680: 6c 79 2e 20 20 41 6c 6c 20 6f 70 65 6e 20 63 75  ly.  All open cu
6690: 72 73 6f 72 73 2c 20 65 74 63 20 61 72 65 20 63  rsors, etc are c
66a0: 6c 6f 73 65 64 0a 2a 2a 20 61 75 74 6f 6d 61 74  losed.** automat
66b0: 69 63 61 6c 6c 79 2e 0a 2a 2a 0a 2a 2a 20 50 31  ically..**.** P1
66c0: 20 69 73 20 74 68 65 20 72 65 73 75 6c 74 20 63   is the result c
66d0: 6f 64 65 20 72 65 74 75 72 6e 65 64 20 62 79 20  ode returned by 
66e0: 73 71 6c 69 74 65 33 5f 65 78 65 63 28 29 2c 20  sqlite3_exec(), 
66f0: 73 71 6c 69 74 65 33 5f 72 65 73 65 74 28 29 2c  sqlite3_reset(),
6700: 0a 2a 2a 20 6f 72 20 73 71 6c 69 74 65 33 5f 66  .** or sqlite3_f
6710: 69 6e 61 6c 69 7a 65 28 29 2e 20 20 46 6f 72 20  inalize().  For 
6720: 61 20 6e 6f 72 6d 61 6c 20 68 61 6c 74 2c 20 74  a normal halt, t
6730: 68 69 73 20 73 68 6f 75 6c 64 20 62 65 20 53 51  his should be SQ
6740: 4c 49 54 45 5f 4f 4b 20 28 30 29 2e 0a 2a 2a 20  LITE_OK (0)..** 
6750: 46 6f 72 20 65 72 72 6f 72 73 2c 20 69 74 20 63  For errors, it c
6760: 61 6e 20 62 65 20 73 6f 6d 65 20 6f 74 68 65 72  an be some other
6770: 20 76 61 6c 75 65 2e 20 20 49 66 20 50 31 21 3d   value.  If P1!=
6780: 30 20 74 68 65 6e 20 50 32 20 77 69 6c 6c 20 64  0 then P2 will d
6790: 65 74 65 72 6d 69 6e 65 0a 2a 2a 20 77 68 65 74  etermine.** whet
67a0: 68 65 72 20 6f 72 20 6e 6f 74 20 74 6f 20 72 6f  her or not to ro
67b0: 6c 6c 62 61 63 6b 20 74 68 65 20 63 75 72 72 65  llback the curre
67c0: 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20  nt transaction. 
67d0: 20 44 6f 20 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b   Do not rollback
67e0: 0a 2a 2a 20 69 66 20 50 32 3d 3d 4f 45 5f 46 61  .** if P2==OE_Fa
67f0: 69 6c 2e 20 44 6f 20 74 68 65 20 72 6f 6c 6c 62  il. Do the rollb
6800: 61 63 6b 20 69 66 20 50 32 3d 3d 4f 45 5f 52 6f  ack if P2==OE_Ro
6810: 6c 6c 62 61 63 6b 2e 20 20 49 66 20 50 32 3d 3d  llback.  If P2==
6820: 4f 45 5f 41 62 6f 72 74 2c 0a 2a 2a 20 74 68 65  OE_Abort,.** the
6830: 6e 20 62 61 63 6b 20 6f 75 74 20 61 6c 6c 20 63  n back out all c
6840: 68 61 6e 67 65 73 20 74 68 61 74 20 68 61 76 65  hanges that have
6850: 20 6f 63 63 75 72 72 65 64 20 64 75 72 69 6e 67   occurred during
6860: 20 74 68 69 73 20 65 78 65 63 75 74 69 6f 6e 20   this execution 
6870: 6f 66 20 74 68 65 0a 2a 2a 20 56 44 42 45 2c 20  of the.** VDBE, 
6880: 62 75 74 20 64 6f 20 6e 6f 74 20 72 6f 6c 6c 62  but do not rollb
6890: 61 63 6b 20 74 68 65 20 74 72 61 6e 73 61 63 74  ack the transact
68a0: 69 6f 6e 2e 20 0a 2a 2a 0a 2a 2a 20 49 66 20 50  ion. .**.** If P
68b0: 34 20 69 73 20 6e 6f 74 20 6e 75 6c 6c 20 74 68  4 is not null th
68c0: 65 6e 20 69 74 20 69 73 20 61 6e 20 65 72 72 6f  en it is an erro
68d0: 72 20 6d 65 73 73 61 67 65 20 73 74 72 69 6e 67  r message string
68e0: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 69 73  ..**.** There is
68f0: 20 61 6e 20 69 6d 70 6c 69 65 64 20 22 48 61 6c   an implied "Hal
6900: 74 20 30 20 30 20 30 22 20 69 6e 73 74 72 75 63  t 0 0 0" instruc
6910: 74 69 6f 6e 20 69 6e 73 65 72 74 65 64 20 61 74  tion inserted at
6920: 20 74 68 65 20 76 65 72 79 20 65 6e 64 20 6f 66   the very end of
6930: 0a 2a 2a 20 65 76 65 72 79 20 70 72 6f 67 72 61  .** every progra
6940: 6d 2e 20 20 53 6f 20 61 20 6a 75 6d 70 20 70 61  m.  So a jump pa
6950: 73 74 20 74 68 65 20 6c 61 73 74 20 69 6e 73 74  st the last inst
6960: 72 75 63 74 69 6f 6e 20 6f 66 20 74 68 65 20 70  ruction of the p
6970: 72 6f 67 72 61 6d 0a 2a 2a 20 69 73 20 74 68 65  rogram.** is the
6980: 20 73 61 6d 65 20 61 73 20 65 78 65 63 75 74 69   same as executi
6990: 6e 67 20 48 61 6c 74 2e 0a 2a 2f 0a 63 61 73 65  ng Halt..*/.case
69a0: 20 4f 50 5f 48 61 6c 74 3a 20 7b 0a 20 20 69 66   OP_Halt: {.  if
69b0: 28 20 70 4f 70 2d 3e 70 31 3d 3d 53 51 4c 49 54  ( pOp->p1==SQLIT
69c0: 45 5f 4f 4b 20 26 26 20 70 2d 3e 70 46 72 61 6d  E_OK && p->pFram
69d0: 65 20 29 7b 0a 20 20 20 20 2f 2a 20 48 61 6c 74  e ){.    /* Halt
69e0: 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d   the sub-program
69f0: 2e 20 52 65 74 75 72 6e 20 63 6f 6e 74 72 6f 6c  . Return control
6a00: 20 74 6f 20 74 68 65 20 70 61 72 65 6e 74 20 66   to the parent f
6a10: 72 61 6d 65 2e 20 2a 2f 0a 20 20 20 20 56 64 62  rame. */.    Vdb
6a20: 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 20 3d  eFrame *pFrame =
6a30: 20 70 2d 3e 70 46 72 61 6d 65 3b 0a 20 20 20 20   p->pFrame;.    
6a40: 70 2d 3e 70 46 72 61 6d 65 20 3d 20 70 46 72 61  p->pFrame = pFra
6a50: 6d 65 2d 3e 70 50 61 72 65 6e 74 3b 0a 20 20 20  me->pParent;.   
6a60: 20 70 2d 3e 6e 46 72 61 6d 65 2d 2d 3b 0a 20 20   p->nFrame--;.  
6a70: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
6a80: 43 68 61 6e 67 65 73 28 64 62 2c 20 70 2d 3e 6e  Changes(db, p->n
6a90: 43 68 61 6e 67 65 29 3b 0a 20 20 20 20 70 63 20  Change);.    pc 
6aa0: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 46 72 61  = sqlite3VdbeFra
6ab0: 6d 65 52 65 73 74 6f 72 65 28 70 46 72 61 6d 65  meRestore(pFrame
6ac0: 29 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  );.    if( pOp->
6ad0: 70 32 3d 3d 4f 45 5f 49 67 6e 6f 72 65 20 29 7b  p2==OE_Ignore ){
6ae0: 0a 20 20 20 20 20 20 2f 2a 20 49 6e 73 74 72 75  .      /* Instru
6af0: 63 74 69 6f 6e 20 70 63 20 69 73 20 74 68 65 20  ction pc is the 
6b00: 4f 50 5f 50 72 6f 67 72 61 6d 20 74 68 61 74 20  OP_Program that 
6b10: 69 6e 76 6f 6b 65 64 20 74 68 65 20 73 75 62 2d  invoked the sub-
6b20: 70 72 6f 67 72 61 6d 20 0a 20 20 20 20 20 20 2a  program .      *
6b30: 2a 20 63 75 72 72 65 6e 74 6c 79 20 62 65 69 6e  * currently bein
6b40: 67 20 68 61 6c 74 65 64 2e 20 49 66 20 74 68 65  g halted. If the
6b50: 20 70 32 20 69 6e 73 74 72 75 63 74 69 6f 6e 20   p2 instruction 
6b60: 6f 66 20 74 68 69 73 20 4f 50 5f 48 61 6c 74 0a  of this OP_Halt.
6b70: 20 20 20 20 20 20 2a 2a 20 69 6e 73 74 72 75 63        ** instruc
6b80: 74 69 6f 6e 20 69 73 20 73 65 74 20 74 6f 20 4f  tion is set to O
6b90: 45 5f 49 67 6e 6f 72 65 2c 20 74 68 65 6e 20 74  E_Ignore, then t
6ba0: 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 69  he sub-program i
6bb0: 73 20 74 68 72 6f 77 69 6e 67 0a 20 20 20 20 20  s throwing.     
6bc0: 20 2a 2a 20 61 6e 20 49 47 4e 4f 52 45 20 65 78   ** an IGNORE ex
6bd0: 63 65 70 74 69 6f 6e 2e 20 49 6e 20 74 68 69 73  ception. In this
6be0: 20 63 61 73 65 20 6a 75 6d 70 20 74 6f 20 74 68   case jump to th
6bf0: 65 20 61 64 64 72 65 73 73 20 73 70 65 63 69 66  e address specif
6c00: 69 65 64 0a 20 20 20 20 20 20 2a 2a 20 61 73 20  ied.      ** as 
6c10: 74 68 65 20 70 32 20 6f 66 20 74 68 65 20 63 61  the p2 of the ca
6c20: 6c 6c 69 6e 67 20 4f 50 5f 50 72 6f 67 72 61 6d  lling OP_Program
6c30: 2e 20 20 2a 2f 0a 20 20 20 20 20 20 70 63 20 3d  .  */.      pc =
6c40: 20 70 2d 3e 61 4f 70 5b 70 63 5d 2e 70 32 2d 31   p->aOp[pc].p2-1
6c50: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 61 4f 70 20  ;.    }.    aOp 
6c60: 3d 20 70 2d 3e 61 4f 70 3b 0a 20 20 20 20 61 4d  = p->aOp;.    aM
6c70: 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b 0a 20 20  em = p->aMem;.  
6c80: 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20    break;.  }..  
6c90: 70 2d 3e 72 63 20 3d 20 70 4f 70 2d 3e 70 31 3b  p->rc = pOp->p1;
6ca0: 0a 20 20 70 2d 3e 65 72 72 6f 72 41 63 74 69 6f  .  p->errorActio
6cb0: 6e 20 3d 20 28 75 38 29 70 4f 70 2d 3e 70 32 3b  n = (u8)pOp->p2;
6cc0: 0a 20 20 70 2d 3e 70 63 20 3d 20 70 63 3b 0a 20  .  p->pc = pc;. 
6cd0: 20 69 66 28 20 70 4f 70 2d 3e 70 34 2e 7a 20 29   if( pOp->p4.z )
6ce0: 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 2d  {.    assert( p-
6cf0: 3e 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29  >rc!=SQLITE_OK )
6d00: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65 74  ;.    sqlite3Set
6d10: 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d  String(&p->zErrM
6d20: 73 67 2c 20 64 62 2c 20 22 25 73 22 2c 20 70 4f  sg, db, "%s", pO
6d30: 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 74 65  p->p4.z);.    te
6d40: 73 74 63 61 73 65 28 20 73 71 6c 69 74 65 33 47  stcase( sqlite3G
6d50: 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 78 4c 6f 67  lobalConfig.xLog
6d60: 21 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c 69 74  !=0 );.    sqlit
6d70: 65 33 5f 6c 6f 67 28 70 4f 70 2d 3e 70 31 2c 20  e3_log(pOp->p1, 
6d80: 22 61 62 6f 72 74 20 61 74 20 25 64 20 69 6e 20  "abort at %d in 
6d90: 5b 25 73 5d 3a 20 25 73 22 2c 20 70 63 2c 20 70  [%s]: %s", pc, p
6da0: 2d 3e 7a 53 71 6c 2c 20 70 4f 70 2d 3e 70 34 2e  ->zSql, pOp->p4.
6db0: 7a 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  z);.  }else if( 
6dc0: 70 2d 3e 72 63 20 29 7b 0a 20 20 20 20 74 65 73  p->rc ){.    tes
6dd0: 74 63 61 73 65 28 20 73 71 6c 69 74 65 33 47 6c  tcase( sqlite3Gl
6de0: 6f 62 61 6c 43 6f 6e 66 69 67 2e 78 4c 6f 67 21  obalConfig.xLog!
6df0: 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  =0 );.    sqlite
6e00: 33 5f 6c 6f 67 28 70 4f 70 2d 3e 70 31 2c 20 22  3_log(pOp->p1, "
6e10: 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65  constraint faile
6e20: 64 20 61 74 20 25 64 20 69 6e 20 5b 25 73 5d 22  d at %d in [%s]"
6e30: 2c 20 70 63 2c 20 70 2d 3e 7a 53 71 6c 29 3b 0a  , pc, p->zSql);.
6e40: 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74    }.  rc = sqlit
6e50: 65 33 56 64 62 65 48 61 6c 74 28 70 29 3b 0a 20  e3VdbeHalt(p);. 
6e60: 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c   assert( rc==SQL
6e70: 49 54 45 5f 42 55 53 59 20 7c 7c 20 72 63 3d 3d  ITE_BUSY || rc==
6e80: 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 72 63 3d  SQLITE_OK || rc=
6e90: 3d 53 51 4c 49 54 45 5f 45 52 52 4f 52 20 29 3b  =SQLITE_ERROR );
6ea0: 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54  .  if( rc==SQLIT
6eb0: 45 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 70 2d  E_BUSY ){.    p-
6ec0: 3e 72 63 20 3d 20 72 63 20 3d 20 53 51 4c 49 54  >rc = rc = SQLIT
6ed0: 45 5f 42 55 53 59 3b 0a 20 20 7d 65 6c 73 65 7b  E_BUSY;.  }else{
6ee0: 0a 20 20 20 20 61 73 73 65 72 74 28 20 72 63 3d  .    assert( rc=
6ef0: 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 70 2d  =SQLITE_OK || p-
6f00: 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 43 4f 4e 53  >rc==SQLITE_CONS
6f10: 54 52 41 49 4e 54 20 29 3b 0a 20 20 20 20 61 73  TRAINT );.    as
6f20: 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45  sert( rc==SQLITE
6f30: 5f 4f 4b 20 7c 7c 20 64 62 2d 3e 6e 44 65 66 65  _OK || db->nDefe
6f40: 72 72 65 64 43 6f 6e 73 3e 30 20 29 3b 0a 20 20  rredCons>0 );.  
6f50: 20 20 72 63 20 3d 20 70 2d 3e 72 63 20 3f 20 53    rc = p->rc ? S
6f60: 51 4c 49 54 45 5f 45 52 52 4f 52 20 3a 20 53 51  QLITE_ERROR : SQ
6f70: 4c 49 54 45 5f 44 4f 4e 45 3b 0a 20 20 7d 0a 20  LITE_DONE;.  }. 
6f80: 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72   goto vdbe_retur
6f90: 6e 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  n;.}../* Opcode:
6fa0: 20 49 6e 74 65 67 65 72 20 50 31 20 50 32 20 2a   Integer P1 P2 *
6fb0: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 33   * *.**.** The 3
6fc0: 32 2d 62 69 74 20 69 6e 74 65 67 65 72 20 76 61  2-bit integer va
6fd0: 6c 75 65 20 50 31 20 69 73 20 77 72 69 74 74 65  lue P1 is writte
6fe0: 6e 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  n into register 
6ff0: 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  P2..*/.case OP_I
7000: 6e 74 65 67 65 72 3a 20 7b 20 20 20 20 20 20 20  nteger: {       
7010: 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c    /* out2-prerel
7020: 65 61 73 65 20 2a 2f 0a 20 20 70 4f 75 74 2d 3e  ease */.  pOut->
7030: 75 2e 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20  u.i = pOp->p1;. 
7040: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
7050: 63 6f 64 65 3a 20 49 6e 74 36 34 20 2a 20 50 32  code: Int64 * P2
7060: 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34   * P4 *.**.** P4
7070: 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
7080: 20 61 20 36 34 2d 62 69 74 20 69 6e 74 65 67 65   a 64-bit intege
7090: 72 20 76 61 6c 75 65 2e 0a 2a 2a 20 57 72 69 74  r value..** Writ
70a0: 65 20 74 68 61 74 20 76 61 6c 75 65 20 69 6e 74  e that value int
70b0: 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  o register P2..*
70c0: 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74 36 34 3a  /.case OP_Int64:
70d0: 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20   {           /* 
70e0: 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20  out2-prerelease 
70f0: 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  */.  assert( pOp
7100: 2d 3e 70 34 2e 70 49 36 34 21 3d 30 20 29 3b 0a  ->p4.pI64!=0 );.
7110: 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 2a 70    pOut->u.i = *p
7120: 4f 70 2d 3e 70 34 2e 70 49 36 34 3b 0a 20 20 62  Op->p4.pI64;.  b
7130: 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66  reak;.}..#ifndef
7140: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f   SQLITE_OMIT_FLO
7150: 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 2f 2a 20 4f  ATING_POINT./* O
7160: 70 63 6f 64 65 3a 20 52 65 61 6c 20 2a 20 50 32  pcode: Real * P2
7170: 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34   * P4 *.**.** P4
7180: 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
7190: 20 61 20 36 34 2d 62 69 74 20 66 6c 6f 61 74 69   a 64-bit floati
71a0: 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75 65 2e 0a  ng point value..
71b0: 2a 2a 20 57 72 69 74 65 20 74 68 61 74 20 76 61  ** Write that va
71c0: 6c 75 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65  lue into registe
71d0: 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  r P2..*/.case OP
71e0: 5f 52 65 61 6c 3a 20 7b 20 20 20 20 20 20 20 20  _Real: {        
71f0: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
7200: 4b 5f 46 4c 4f 41 54 2c 20 6f 75 74 32 2d 70 72  K_FLOAT, out2-pr
7210: 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 70 4f  erelease */.  pO
7220: 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  ut->flags = MEM_
7230: 52 65 61 6c 3b 0a 20 20 61 73 73 65 72 74 28 20  Real;.  assert( 
7240: 21 73 71 6c 69 74 65 33 49 73 4e 61 4e 28 2a 70  !sqlite3IsNaN(*p
7250: 4f 70 2d 3e 70 34 2e 70 52 65 61 6c 29 20 29 3b  Op->p4.pReal) );
7260: 0a 20 20 70 4f 75 74 2d 3e 72 20 3d 20 2a 70 4f  .  pOut->r = *pO
7270: 70 2d 3e 70 34 2e 70 52 65 61 6c 3b 0a 20 20 62  p->p4.pReal;.  b
7280: 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a  reak;.}.#endif..
7290: 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 74 72 69 6e  /* Opcode: Strin
72a0: 67 38 20 2a 20 50 32 20 2a 20 50 34 20 2a 0a 2a  g8 * P2 * P4 *.*
72b0: 2a 0a 2a 2a 20 50 34 20 70 6f 69 6e 74 73 20 74  *.** P4 points t
72c0: 6f 20 61 20 6e 75 6c 20 74 65 72 6d 69 6e 61 74  o a nul terminat
72d0: 65 64 20 55 54 46 2d 38 20 73 74 72 69 6e 67 2e  ed UTF-8 string.
72e0: 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20   This opcode is 
72f0: 74 72 61 6e 73 66 6f 72 6d 65 64 20 0a 2a 2a 20  transformed .** 
7300: 69 6e 74 6f 20 61 6e 20 4f 50 5f 53 74 72 69 6e  into an OP_Strin
7310: 67 20 62 65 66 6f 72 65 20 69 74 20 69 73 20 65  g before it is e
7320: 78 65 63 75 74 65 64 20 66 6f 72 20 74 68 65 20  xecuted for the 
7330: 66 69 72 73 74 20 74 69 6d 65 2e 0a 2a 2f 0a 63  first time..*/.c
7340: 61 73 65 20 4f 50 5f 53 74 72 69 6e 67 38 3a 20  ase OP_String8: 
7350: 7b 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d  {         /* sam
7360: 65 20 61 73 20 54 4b 5f 53 54 52 49 4e 47 2c 20  e as TK_STRING, 
7370: 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20  out2-prerelease 
7380: 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  */.  assert( pOp
7390: 2d 3e 70 34 2e 7a 21 3d 30 20 29 3b 0a 20 20 70  ->p4.z!=0 );.  p
73a0: 4f 70 2d 3e 6f 70 63 6f 64 65 20 3d 20 4f 50 5f  Op->opcode = OP_
73b0: 53 74 72 69 6e 67 3b 0a 20 20 70 4f 70 2d 3e 70  String;.  pOp->p
73c0: 31 20 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65  1 = sqlite3Strle
73d0: 6e 33 30 28 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a  n30(pOp->p4.z);.
73e0: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
73f0: 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20 69 66 28  OMIT_UTF16.  if(
7400: 20 65 6e 63 6f 64 69 6e 67 21 3d 53 51 4c 49 54   encoding!=SQLIT
7410: 45 5f 55 54 46 38 20 29 7b 0a 20 20 20 20 72 63  E_UTF8 ){.    rc
7420: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65   = sqlite3VdbeMe
7430: 6d 53 65 74 53 74 72 28 70 4f 75 74 2c 20 70 4f  mSetStr(pOut, pO
7440: 70 2d 3e 70 34 2e 7a 2c 20 2d 31 2c 20 53 51 4c  p->p4.z, -1, SQL
7450: 49 54 45 5f 55 54 46 38 2c 20 53 51 4c 49 54 45  ITE_UTF8, SQLITE
7460: 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 69 66  _STATIC);.    if
7470: 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 54 4f 4f  ( rc==SQLITE_TOO
7480: 42 49 47 20 29 20 67 6f 74 6f 20 74 6f 6f 5f 62  BIG ) goto too_b
7490: 69 67 3b 0a 20 20 20 20 69 66 28 20 53 51 4c 49  ig;.    if( SQLI
74a0: 54 45 5f 4f 4b 21 3d 73 71 6c 69 74 65 33 56 64  TE_OK!=sqlite3Vd
74b0: 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67  beChangeEncoding
74c0: 28 70 4f 75 74 2c 20 65 6e 63 6f 64 69 6e 67 29  (pOut, encoding)
74d0: 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
74e0: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 75 74      assert( pOut
74f0: 2d 3e 7a 4d 61 6c 6c 6f 63 3d 3d 70 4f 75 74 2d  ->zMalloc==pOut-
7500: 3e 7a 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  >z );.    assert
7510: 28 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 26 20  ( pOut->flags & 
7520: 4d 45 4d 5f 44 79 6e 20 29 3b 0a 20 20 20 20 70  MEM_Dyn );.    p
7530: 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d 20 30  Out->zMalloc = 0
7540: 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67  ;.    pOut->flag
7550: 73 20 7c 3d 20 4d 45 4d 5f 53 74 61 74 69 63 3b  s |= MEM_Static;
7560: 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  .    pOut->flags
7570: 20 26 3d 20 7e 4d 45 4d 5f 44 79 6e 3b 0a 20 20   &= ~MEM_Dyn;.  
7580: 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70    if( pOp->p4typ
7590: 65 3d 3d 50 34 5f 44 59 4e 41 4d 49 43 20 29 7b  e==P4_DYNAMIC ){
75a0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 62  .      sqlite3Db
75b0: 46 72 65 65 28 64 62 2c 20 70 4f 70 2d 3e 70 34  Free(db, pOp->p4
75c0: 2e 7a 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70  .z);.    }.    p
75d0: 4f 70 2d 3e 70 34 74 79 70 65 20 3d 20 50 34 5f  Op->p4type = P4_
75e0: 44 59 4e 41 4d 49 43 3b 0a 20 20 20 20 70 4f 70  DYNAMIC;.    pOp
75f0: 2d 3e 70 34 2e 7a 20 3d 20 70 4f 75 74 2d 3e 7a  ->p4.z = pOut->z
7600: 3b 0a 20 20 20 20 70 4f 70 2d 3e 70 31 20 3d 20  ;.    pOp->p1 = 
7610: 70 4f 75 74 2d 3e 6e 3b 0a 20 20 7d 0a 23 65 6e  pOut->n;.  }.#en
7620: 64 69 66 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70  dif.  if( pOp->p
7630: 31 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c  1>db->aLimit[SQL
7640: 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48  ITE_LIMIT_LENGTH
7650: 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f  ] ){.    goto to
7660: 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 2f 2a 20  o_big;.  }.  /* 
7670: 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  Fall through to 
7680: 74 68 65 20 6e 65 78 74 20 63 61 73 65 2c 20 4f  the next case, O
7690: 50 5f 53 74 72 69 6e 67 20 2a 2f 0a 7d 0a 20 20  P_String */.}.  
76a0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 74 72 69  ./* Opcode: Stri
76b0: 6e 67 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a  ng P1 P2 * P4 *.
76c0: 2a 2a 0a 2a 2a 20 54 68 65 20 73 74 72 69 6e 67  **.** The string
76d0: 20 76 61 6c 75 65 20 50 34 20 6f 66 20 6c 65 6e   value P4 of len
76e0: 67 74 68 20 50 31 20 28 62 79 74 65 73 29 20 69  gth P1 (bytes) i
76f0: 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  s stored in regi
7700: 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65  ster P2..*/.case
7710: 20 4f 50 5f 53 74 72 69 6e 67 3a 20 7b 20 20 20   OP_String: {   
7720: 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70         /* out2-p
7730: 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 61  rerelease */.  a
7740: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 7a  ssert( pOp->p4.z
7750: 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 66  !=0 );.  pOut->f
7760: 6c 61 67 73 20 3d 20 4d 45 4d 5f 53 74 72 7c 4d  lags = MEM_Str|M
7770: 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 54 65  EM_Static|MEM_Te
7780: 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e 7a 20 3d 20  rm;.  pOut->z = 
7790: 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 70 4f 75  pOp->p4.z;.  pOu
77a0: 74 2d 3e 6e 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a  t->n = pOp->p1;.
77b0: 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e    pOut->enc = en
77c0: 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44 41 54 45  coding;.  UPDATE
77d0: 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f  _MAX_BLOBSIZE(pO
77e0: 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ut);.  break;.}.
77f0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 75 6c 6c  ./* Opcode: Null
7800: 20 2a 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   * P2 * * *.**.*
7810: 2a 20 57 72 69 74 65 20 61 20 4e 55 4c 4c 20 69  * Write a NULL i
7820: 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e  nto register P2.
7830: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 75 6c 6c  .*/.case OP_Null
7840: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  : {           /*
7850: 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65   out2-prerelease
7860: 20 2a 2f 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67   */.  pOut->flag
7870: 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20  s = MEM_Null;.  
7880: 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70  break;.}.../* Op
7890: 63 6f 64 65 3a 20 42 6c 6f 62 20 50 31 20 50 32  code: Blob P1 P2
78a0: 20 2a 20 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20 70   * P4.**.** P4 p
78b0: 6f 69 6e 74 73 20 74 6f 20 61 20 62 6c 6f 62 20  oints to a blob 
78c0: 6f 66 20 64 61 74 61 20 50 31 20 62 79 74 65 73  of data P1 bytes
78d0: 20 6c 6f 6e 67 2e 20 20 53 74 6f 72 65 20 74 68   long.  Store th
78e0: 69 73 0a 2a 2a 20 62 6c 6f 62 20 69 6e 20 72 65  is.** blob in re
78f0: 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61  gister P2..*/.ca
7900: 73 65 20 4f 50 5f 42 6c 6f 62 3a 20 7b 20 20 20  se OP_Blob: {   
7910: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
7920: 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20  out2-prerelease 
7930: 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  */.  assert( pOp
7940: 2d 3e 70 31 20 3c 3d 20 53 51 4c 49 54 45 5f 4d  ->p1 <= SQLITE_M
7950: 41 58 5f 4c 45 4e 47 54 48 20 29 3b 0a 20 20 73  AX_LENGTH );.  s
7960: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
7970: 53 74 72 28 70 4f 75 74 2c 20 70 4f 70 2d 3e 70  Str(pOut, pOp->p
7980: 34 2e 7a 2c 20 70 4f 70 2d 3e 70 31 2c 20 30 2c  4.z, pOp->p1, 0,
7990: 20 30 29 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63   0);.  pOut->enc
79a0: 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55   = encoding;.  U
79b0: 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49  PDATE_MAX_BLOBSI
79c0: 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61  ZE(pOut);.  brea
79d0: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
79e0: 20 56 61 72 69 61 62 6c 65 20 50 31 20 50 32 20   Variable P1 P2 
79f0: 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 54 72 61  * P4 *.**.** Tra
7a00: 6e 73 66 65 72 20 74 68 65 20 76 61 6c 75 65 73  nsfer the values
7a10: 20 6f 66 20 62 6f 75 6e 64 20 70 61 72 61 6d 65   of bound parame
7a20: 74 65 72 20 50 31 20 69 6e 74 6f 20 72 65 67 69  ter P1 into regi
7a30: 73 74 65 72 20 50 32 0a 2a 2a 0a 2a 2a 20 49 66  ster P2.**.** If
7a40: 20 74 68 65 20 70 61 72 61 6d 65 74 65 72 20 69   the parameter i
7a50: 73 20 6e 61 6d 65 64 2c 20 74 68 65 6e 20 69 74  s named, then it
7a60: 73 20 6e 61 6d 65 20 61 70 70 65 61 72 73 20 69  s name appears i
7a70: 6e 20 50 34 20 61 6e 64 20 50 33 3d 3d 31 2e 0a  n P4 and P3==1..
7a80: 2a 2a 20 54 68 65 20 50 34 20 76 61 6c 75 65 20  ** The P4 value 
7a90: 69 73 20 75 73 65 64 20 62 79 20 73 71 6c 69 74  is used by sqlit
7aa0: 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65  e3_bind_paramete
7ab0: 72 5f 6e 61 6d 65 28 29 2e 0a 2a 2f 0a 63 61 73  r_name()..*/.cas
7ac0: 65 20 4f 50 5f 56 61 72 69 61 62 6c 65 3a 20 7b  e OP_Variable: {
7ad0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f              /* o
7ae0: 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a  ut2-prerelease *
7af0: 2f 0a 20 20 4d 65 6d 20 2a 70 56 61 72 3b 20 20  /.  Mem *pVar;  
7b00: 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 62 65       /* Value be
7b10: 69 6e 67 20 74 72 61 6e 73 66 65 72 72 65 64 20  ing transferred 
7b20: 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  */..  assert( pO
7b30: 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p1>0 && pOp->
7b40: 70 31 3c 3d 70 2d 3e 6e 56 61 72 20 29 3b 0a 20  p1<=p->nVar );. 
7b50: 20 70 56 61 72 20 3d 20 26 70 2d 3e 61 56 61 72   pVar = &p->aVar
7b60: 5b 70 4f 70 2d 3e 70 31 20 2d 20 31 5d 3b 0a 20  [pOp->p1 - 1];. 
7b70: 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65   if( sqlite3Vdbe
7b80: 4d 65 6d 54 6f 6f 42 69 67 28 70 56 61 72 29 20  MemTooBig(pVar) 
7b90: 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f  ){.    goto too_
7ba0: 62 69 67 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74  big;.  }.  sqlit
7bb0: 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77  e3VdbeMemShallow
7bc0: 43 6f 70 79 28 70 4f 75 74 2c 20 70 56 61 72 2c  Copy(pOut, pVar,
7bd0: 20 4d 45 4d 5f 53 74 61 74 69 63 29 3b 0a 20 20   MEM_Static);.  
7be0: 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53  UPDATE_MAX_BLOBS
7bf0: 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65  IZE(pOut);.  bre
7c00: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
7c10: 3a 20 4d 6f 76 65 20 50 31 20 50 32 20 50 33 20  : Move P1 P2 P3 
7c20: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4d 6f 76 65 20 74  * *.**.** Move t
7c30: 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67  he values in reg
7c40: 69 73 74 65 72 20 50 31 2e 2e 50 31 2b 50 33 2d  ister P1..P1+P3-
7c50: 31 20 6f 76 65 72 20 69 6e 74 6f 0a 2a 2a 20 72  1 over into.** r
7c60: 65 67 69 73 74 65 72 73 20 50 32 2e 2e 50 32 2b  egisters P2..P2+
7c70: 50 33 2d 31 2e 20 20 52 65 67 69 73 74 65 72 73  P3-1.  Registers
7c80: 20 50 31 2e 2e 50 31 2b 50 31 2d 31 20 61 72 65   P1..P1+P1-1 are
7c90: 0a 2a 2a 20 6c 65 66 74 20 68 6f 6c 64 69 6e 67  .** left holding
7ca0: 20 61 20 4e 55 4c 4c 2e 20 20 49 74 20 69 73 20   a NULL.  It is 
7cb0: 61 6e 20 65 72 72 6f 72 20 66 6f 72 20 72 65 67  an error for reg
7cc0: 69 73 74 65 72 20 72 61 6e 67 65 73 0a 2a 2a 20  ister ranges.** 
7cd0: 50 31 2e 2e 50 31 2b 50 33 2d 31 20 61 6e 64 20  P1..P1+P3-1 and 
7ce0: 50 32 2e 2e 50 32 2b 50 33 2d 31 20 74 6f 20 6f  P2..P2+P3-1 to o
7cf0: 76 65 72 6c 61 70 2e 0a 2a 2f 0a 63 61 73 65 20  verlap..*/.case 
7d00: 4f 50 5f 4d 6f 76 65 3a 20 7b 0a 20 20 63 68 61  OP_Move: {.  cha
7d10: 72 20 2a 7a 4d 61 6c 6c 6f 63 3b 20 20 20 2f 2a  r *zMalloc;   /*
7d20: 20 48 6f 6c 64 69 6e 67 20 76 61 72 69 61 62 6c   Holding variabl
7d30: 65 20 66 6f 72 20 61 6c 6c 6f 63 61 74 65 64 20  e for allocated 
7d40: 6d 65 6d 6f 72 79 20 2a 2f 0a 20 20 69 6e 74 20  memory */.  int 
7d50: 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  n;           /* 
7d60: 4e 75 6d 62 65 72 20 6f 66 20 72 65 67 69 73 74  Number of regist
7d70: 65 72 73 20 6c 65 66 74 20 74 6f 20 63 6f 70 79  ers left to copy
7d80: 20 2a 2f 0a 20 20 69 6e 74 20 70 31 3b 20 20 20   */.  int p1;   
7d90: 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74         /* Regist
7da0: 65 72 20 74 6f 20 63 6f 70 79 20 66 72 6f 6d 20  er to copy from 
7db0: 2a 2f 0a 20 20 69 6e 74 20 70 32 3b 20 20 20 20  */.  int p2;    
7dc0: 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65        /* Registe
7dd0: 72 20 74 6f 20 63 6f 70 79 20 74 6f 20 2a 2f 0a  r to copy to */.
7de0: 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a  .  n = pOp->p3;.
7df0: 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a    p1 = pOp->p1;.
7e00: 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a    p2 = pOp->p2;.
7e10: 20 20 61 73 73 65 72 74 28 20 6e 3e 30 20 26 26    assert( n>0 &&
7e20: 20 70 31 3e 30 20 26 26 20 70 32 3e 30 20 29 3b   p1>0 && p2>0 );
7e30: 0a 20 20 61 73 73 65 72 74 28 20 70 31 2b 6e 3c  .  assert( p1+n<
7e40: 3d 70 32 20 7c 7c 20 70 32 2b 6e 3c 3d 70 31 20  =p2 || p2+n<=p1 
7e50: 29 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d  );..  pIn1 = &aM
7e60: 65 6d 5b 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d  em[p1];.  pOut =
7e70: 20 26 61 4d 65 6d 5b 70 32 5d 3b 0a 20 20 77 68   &aMem[p2];.  wh
7e80: 69 6c 65 28 20 6e 2d 2d 20 29 7b 0a 20 20 20 20  ile( n-- ){.    
7e90: 61 73 73 65 72 74 28 20 70 4f 75 74 3c 3d 26 61  assert( pOut<=&a
7ea0: 4d 65 6d 5b 70 2d 3e 6e 4d 65 6d 5d 20 29 3b 0a  Mem[p->nMem] );.
7eb0: 20 20 20 20 61 73 73 65 72 74 28 20 70 49 6e 31      assert( pIn1
7ec0: 3c 3d 26 61 4d 65 6d 5b 70 2d 3e 6e 4d 65 6d 5d  <=&aMem[p->nMem]
7ed0: 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
7ee0: 6d 65 6d 49 73 56 61 6c 69 64 28 70 49 6e 31 29  memIsValid(pIn1)
7ef0: 20 29 3b 0a 20 20 20 20 6d 65 6d 41 62 6f 75 74   );.    memAbout
7f00: 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74  ToChange(p, pOut
7f10: 29 3b 0a 20 20 20 20 7a 4d 61 6c 6c 6f 63 20 3d  );.    zMalloc =
7f20: 20 70 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f 63 3b 0a   pOut->zMalloc;.
7f30: 20 20 20 20 70 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f      pOut->zMallo
7f40: 63 20 3d 20 30 3b 0a 20 20 20 20 73 71 6c 69 74  c = 0;.    sqlit
7f50: 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28 70 4f  e3VdbeMemMove(pO
7f60: 75 74 2c 20 70 49 6e 31 29 3b 0a 20 20 20 20 70  ut, pIn1);.    p
7f70: 49 6e 31 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d 20 7a  In1->zMalloc = z
7f80: 4d 61 6c 6c 6f 63 3b 0a 20 20 20 20 52 45 47 49  Malloc;.    REGI
7f90: 53 54 45 52 5f 54 52 41 43 45 28 70 32 2b 2b 2c  STER_TRACE(p2++,
7fa0: 20 70 4f 75 74 29 3b 0a 20 20 20 20 70 49 6e 31   pOut);.    pIn1
7fb0: 2b 2b 3b 0a 20 20 20 20 70 4f 75 74 2b 2b 3b 0a  ++;.    pOut++;.
7fc0: 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
7fd0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 70 79 20  /* Opcode: Copy 
7fe0: 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
7ff0: 2a 20 4d 61 6b 65 20 61 20 63 6f 70 79 20 6f 66  * Make a copy of
8000: 20 72 65 67 69 73 74 65 72 20 50 31 20 69 6e 74   register P1 int
8010: 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  o register P2..*
8020: 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75  *.** This instru
8030: 63 74 69 6f 6e 20 6d 61 6b 65 73 20 61 20 64 65  ction makes a de
8040: 65 70 20 63 6f 70 79 20 6f 66 20 74 68 65 20 76  ep copy of the v
8050: 61 6c 75 65 2e 20 20 41 20 64 75 70 6c 69 63 61  alue.  A duplica
8060: 74 65 0a 2a 2a 20 69 73 20 6d 61 64 65 20 6f 66  te.** is made of
8070: 20 61 6e 79 20 73 74 72 69 6e 67 20 6f 72 20 62   any string or b
8080: 6c 6f 62 20 63 6f 6e 73 74 61 6e 74 2e 20 20 53  lob constant.  S
8090: 65 65 20 61 6c 73 6f 20 4f 50 5f 53 43 6f 70 79  ee also OP_SCopy
80a0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 70  ..*/.case OP_Cop
80b0: 79 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  y: {            
80c0: 20 2f 2a 20 69 6e 31 2c 20 6f 75 74 32 20 2a 2f   /* in1, out2 */
80d0: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
80e0: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74  pOp->p1];.  pOut
80f0: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
8100: 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 75  ];.  assert( pOu
8110: 74 21 3d 70 49 6e 31 20 29 3b 0a 20 20 73 71 6c  t!=pIn1 );.  sql
8120: 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c  ite3VdbeMemShall
8130: 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20 70 49 6e  owCopy(pOut, pIn
8140: 31 2c 20 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a 20  1, MEM_Ephem);. 
8150: 20 44 65 65 70 68 65 6d 65 72 61 6c 69 7a 65 28   Deephemeralize(
8160: 70 4f 75 74 29 3b 0a 20 20 52 45 47 49 53 54 45  pOut);.  REGISTE
8170: 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c  R_TRACE(pOp->p2,
8180: 20 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b   pOut);.  break;
8190: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .}../* Opcode: S
81a0: 43 6f 70 79 20 50 31 20 50 32 20 2a 20 2a 20 2a  Copy P1 P2 * * *
81b0: 0a 2a 2a 0a 2a 2a 20 4d 61 6b 65 20 61 20 73 68  .**.** Make a sh
81c0: 61 6c 6c 6f 77 20 63 6f 70 79 20 6f 66 20 72 65  allow copy of re
81d0: 67 69 73 74 65 72 20 50 31 20 69 6e 74 6f 20 72  gister P1 into r
81e0: 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a  egister P2..**.*
81f0: 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69  * This instructi
8200: 6f 6e 20 6d 61 6b 65 73 20 61 20 73 68 61 6c 6c  on makes a shall
8210: 6f 77 20 63 6f 70 79 20 6f 66 20 74 68 65 20 76  ow copy of the v
8220: 61 6c 75 65 2e 20 20 49 66 20 74 68 65 20 76 61  alue.  If the va
8230: 6c 75 65 0a 2a 2a 20 69 73 20 61 20 73 74 72 69  lue.** is a stri
8240: 6e 67 20 6f 72 20 62 6c 6f 62 2c 20 74 68 65 6e  ng or blob, then
8250: 20 74 68 65 20 63 6f 70 79 20 69 73 20 6f 6e 6c   the copy is onl
8260: 79 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  y a pointer to t
8270: 68 65 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c 20 61  he.** original a
8280: 6e 64 20 68 65 6e 63 65 20 69 66 20 74 68 65 20  nd hence if the 
8290: 6f 72 69 67 69 6e 61 6c 20 63 68 61 6e 67 65 73  original changes
82a0: 20 73 6f 20 77 69 6c 6c 20 74 68 65 20 63 6f 70   so will the cop
82b0: 79 2e 0a 2a 2a 20 57 6f 72 73 65 2c 20 69 66 20  y..** Worse, if 
82c0: 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 69 73 20  the original is 
82d0: 64 65 61 6c 6c 6f 63 61 74 65 64 2c 20 74 68 65  deallocated, the
82e0: 20 63 6f 70 79 20 62 65 63 6f 6d 65 73 20 69 6e   copy becomes in
82f0: 76 61 6c 69 64 2e 0a 2a 2a 20 54 68 75 73 20 74  valid..** Thus t
8300: 68 65 20 70 72 6f 67 72 61 6d 20 6d 75 73 74 20  he program must 
8310: 67 75 61 72 61 6e 74 65 65 20 74 68 61 74 20 74  guarantee that t
8320: 68 65 20 6f 72 69 67 69 6e 61 6c 20 77 69 6c 6c  he original will
8330: 20 6e 6f 74 20 63 68 61 6e 67 65 0a 2a 2a 20 64   not change.** d
8340: 75 72 69 6e 67 20 74 68 65 20 6c 69 66 65 74 69  uring the lifeti
8350: 6d 65 20 6f 66 20 74 68 65 20 63 6f 70 79 2e 20  me of the copy. 
8360: 20 55 73 65 20 4f 50 5f 43 6f 70 79 20 74 6f 20   Use OP_Copy to 
8370: 6d 61 6b 65 20 61 20 63 6f 6d 70 6c 65 74 65 0a  make a complete.
8380: 2a 2a 20 63 6f 70 79 2e 0a 2a 2f 0a 63 61 73 65  ** copy..*/.case
8390: 20 4f 50 5f 53 43 6f 70 79 3a 20 7b 20 20 20 20   OP_SCopy: {    
83a0: 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 2c 20          /* in1, 
83b0: 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d  out2 */.  pIn1 =
83c0: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
83d0: 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b  .  pOut = &aMem[
83e0: 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65  pOp->p2];.  asse
83f0: 72 74 28 20 70 4f 75 74 21 3d 70 49 6e 31 20 29  rt( pOut!=pIn1 )
8400: 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
8410: 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f  emShallowCopy(pO
8420: 75 74 2c 20 70 49 6e 31 2c 20 4d 45 4d 5f 45 70  ut, pIn1, MEM_Ep
8430: 68 65 6d 29 3b 0a 23 69 66 64 65 66 20 53 51 4c  hem);.#ifdef SQL
8440: 49 54 45 5f 44 45 42 55 47 0a 20 20 69 66 28 20  ITE_DEBUG.  if( 
8450: 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d  pOut->pScopyFrom
8460: 3d 3d 30 20 29 20 70 4f 75 74 2d 3e 70 53 63 6f  ==0 ) pOut->pSco
8470: 70 79 46 72 6f 6d 20 3d 20 70 49 6e 31 3b 0a 23  pyFrom = pIn1;.#
8480: 65 6e 64 69 66 0a 20 20 52 45 47 49 53 54 45 52  endif.  REGISTER
8490: 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20  _TRACE(pOp->p2, 
84a0: 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  pOut);.  break;.
84b0: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65  }../* Opcode: Re
84c0: 73 75 6c 74 52 6f 77 20 50 31 20 50 32 20 2a 20  sultRow P1 P2 * 
84d0: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 65  * *.**.** The re
84e0: 67 69 73 74 65 72 73 20 50 31 20 74 68 72 6f 75  gisters P1 throu
84f0: 67 68 20 50 31 2b 50 32 2d 31 20 63 6f 6e 74 61  gh P1+P2-1 conta
8500: 69 6e 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20  in a single row 
8510: 6f 66 0a 2a 2a 20 72 65 73 75 6c 74 73 2e 20 54  of.** results. T
8520: 68 69 73 20 6f 70 63 6f 64 65 20 63 61 75 73 65  his opcode cause
8530: 73 20 74 68 65 20 73 71 6c 69 74 65 33 5f 73 74  s the sqlite3_st
8540: 65 70 28 29 20 63 61 6c 6c 20 74 6f 20 74 65 72  ep() call to ter
8550: 6d 69 6e 61 74 65 0a 2a 2a 20 77 69 74 68 20 61  minate.** with a
8560: 6e 20 53 51 4c 49 54 45 5f 52 4f 57 20 72 65 74  n SQLITE_ROW ret
8570: 75 72 6e 20 63 6f 64 65 20 61 6e 64 20 69 74 20  urn code and it 
8580: 73 65 74 73 20 75 70 20 74 68 65 20 73 71 6c 69  sets up the sqli
8590: 74 65 33 5f 73 74 6d 74 0a 2a 2a 20 73 74 72 75  te3_stmt.** stru
85a0: 63 74 75 72 65 20 74 6f 20 70 72 6f 76 69 64 65  cture to provide
85b0: 20 61 63 63 65 73 73 20 74 6f 20 74 68 65 20 74   access to the t
85c0: 6f 70 20 50 31 20 76 61 6c 75 65 73 20 61 73 20  op P1 values as 
85d0: 74 68 65 20 72 65 73 75 6c 74 0a 2a 2a 20 72 6f  the result.** ro
85e0: 77 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65  w..*/.case OP_Re
85f0: 73 75 6c 74 52 6f 77 3a 20 7b 0a 20 20 4d 65 6d  sultRow: {.  Mem
8600: 20 2a 70 4d 65 6d 3b 0a 20 20 69 6e 74 20 69 3b   *pMem;.  int i;
8610: 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 6e 52  .  assert( p->nR
8620: 65 73 43 6f 6c 75 6d 6e 3d 3d 70 4f 70 2d 3e 70  esColumn==pOp->p
8630: 32 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  2 );.  assert( p
8640: 4f 70 2d 3e 70 31 3e 30 20 29 3b 0a 20 20 61 73  Op->p1>0 );.  as
8650: 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 2b 70 4f  sert( pOp->p1+pO
8660: 70 2d 3e 70 32 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31  p->p2<=p->nMem+1
8670: 20 29 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 69   );..  /* If thi
8680: 73 20 73 74 61 74 65 6d 65 6e 74 20 68 61 73 20  s statement has 
8690: 76 69 6f 6c 61 74 65 64 20 69 6d 6d 65 64 69 61  violated immedia
86a0: 74 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63  te foreign key c
86b0: 6f 6e 73 74 72 61 69 6e 74 73 2c 20 64 6f 0a 20  onstraints, do. 
86c0: 20 2a 2a 20 6e 6f 74 20 72 65 74 75 72 6e 20 74   ** not return t
86d0: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77  he number of row
86e0: 73 20 6d 6f 64 69 66 69 65 64 2e 20 41 6e 64 20  s modified. And 
86f0: 64 6f 20 6e 6f 74 20 52 45 4c 45 41 53 45 20 74  do not RELEASE t
8700: 68 65 20 73 74 61 74 65 6d 65 6e 74 0a 20 20 2a  he statement.  *
8710: 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 49  * transaction. I
8720: 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20 72 6f  t needs to be ro
8730: 6c 6c 65 64 20 62 61 63 6b 2e 20 20 2a 2f 0a 20  lled back.  */. 
8740: 20 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b 21 3d   if( SQLITE_OK!=
8750: 28 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62  (rc = sqlite3Vdb
8760: 65 43 68 65 63 6b 46 6b 28 70 2c 20 30 29 29 20  eCheckFk(p, 0)) 
8770: 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 64  ){.    assert( d
8780: 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54 45 5f  b->flags&SQLITE_
8790: 43 6f 75 6e 74 52 6f 77 73 20 29 3b 0a 20 20 20  CountRows );.   
87a0: 20 61 73 73 65 72 74 28 20 70 2d 3e 75 73 65 73   assert( p->uses
87b0: 53 74 6d 74 4a 6f 75 72 6e 61 6c 20 29 3b 0a 20  StmtJournal );. 
87c0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20     break;.  }.. 
87d0: 20 2f 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54   /* If the SQLIT
87e0: 45 5f 43 6f 75 6e 74 52 6f 77 73 20 66 6c 61 67  E_CountRows flag
87f0: 20 69 73 20 73 65 74 20 69 6e 20 73 71 6c 69 74   is set in sqlit
8800: 65 33 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74  e3.flags mask, t
8810: 68 65 6e 20 0a 20 20 2a 2a 20 44 4d 4c 20 73 74  hen .  ** DML st
8820: 61 74 65 6d 65 6e 74 73 20 69 6e 76 6f 6b 65 20  atements invoke 
8830: 74 68 69 73 20 6f 70 63 6f 64 65 20 74 6f 20 72  this opcode to r
8840: 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72  eturn the number
8850: 20 6f 66 20 72 6f 77 73 20 0a 20 20 2a 2a 20 6d   of rows .  ** m
8860: 6f 64 69 66 69 65 64 20 74 6f 20 74 68 65 20 75  odified to the u
8870: 73 65 72 2e 20 54 68 69 73 20 69 73 20 74 68 65  ser. This is the
8880: 20 6f 6e 6c 79 20 77 61 79 20 74 68 61 74 20 61   only way that a
8890: 20 56 4d 20 74 68 61 74 0a 20 20 2a 2a 20 6f 70   VM that.  ** op
88a0: 65 6e 73 20 61 20 73 74 61 74 65 6d 65 6e 74 20  ens a statement 
88b0: 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 61 79 20  transaction may 
88c0: 69 6e 76 6f 6b 65 20 74 68 69 73 20 6f 70 63 6f  invoke this opco
88d0: 64 65 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49 6e  de..  **.  ** In
88e0: 20 63 61 73 65 20 74 68 69 73 20 69 73 20 73 75   case this is su
88f0: 63 68 20 61 20 73 74 61 74 65 6d 65 6e 74 2c 20  ch a statement, 
8900: 63 6c 6f 73 65 20 61 6e 79 20 73 74 61 74 65 6d  close any statem
8910: 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a  ent transaction.
8920: 20 20 2a 2a 20 6f 70 65 6e 65 64 20 62 79 20 74    ** opened by t
8930: 68 69 73 20 56 4d 20 62 65 66 6f 72 65 20 72 65  his VM before re
8940: 74 75 72 6e 69 6e 67 20 63 6f 6e 74 72 6f 6c 20  turning control 
8950: 74 6f 20 74 68 65 20 75 73 65 72 2e 20 54 68 69  to the user. Thi
8960: 73 20 69 73 20 74 6f 0a 20 20 2a 2a 20 65 6e 73  s is to.  ** ens
8970: 75 72 65 20 74 68 61 74 20 73 74 61 74 65 6d 65  ure that stateme
8980: 6e 74 2d 74 72 61 6e 73 61 63 74 69 6f 6e 73 20  nt-transactions 
8990: 61 72 65 20 61 6c 77 61 79 73 20 6e 65 73 74 65  are always neste
89a0: 64 2c 20 6e 6f 74 20 6f 76 65 72 6c 61 70 70 69  d, not overlappi
89b0: 6e 67 2e 0a 20 20 2a 2a 20 49 66 20 74 68 65 20  ng..  ** If the 
89c0: 6f 70 65 6e 20 73 74 61 74 65 6d 65 6e 74 2d 74  open statement-t
89d0: 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e 6f  ransaction is no
89e0: 74 20 63 6c 6f 73 65 64 20 68 65 72 65 2c 20 74  t closed here, t
89f0: 68 65 6e 20 74 68 65 20 75 73 65 72 0a 20 20 2a  hen the user.  *
8a00: 2a 20 6d 61 79 20 73 74 65 70 20 61 6e 6f 74 68  * may step anoth
8a10: 65 72 20 56 4d 20 74 68 61 74 20 6f 70 65 6e 73  er VM that opens
8a20: 20 69 74 73 20 6f 77 6e 20 73 74 61 74 65 6d 65   its own stateme
8a30: 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20  nt transaction. 
8a40: 54 68 69 73 0a 20 20 2a 2a 20 6d 61 79 20 6c 65  This.  ** may le
8a50: 61 64 20 74 6f 20 6f 76 65 72 6c 61 70 70 69 6e  ad to overlappin
8a60: 67 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e  g statement tran
8a70: 73 61 63 74 69 6f 6e 73 2e 0a 20 20 2a 2a 0a 20  sactions..  **. 
8a80: 20 2a 2a 20 54 68 65 20 73 74 61 74 65 6d 65 6e   ** The statemen
8a90: 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  t transaction is
8aa0: 20 6e 65 76 65 72 20 61 20 74 6f 70 2d 6c 65 76   never a top-lev
8ab0: 65 6c 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20  el transaction. 
8ac0: 20 48 65 6e 63 65 0a 20 20 2a 2a 20 74 68 65 20   Hence.  ** the 
8ad0: 52 45 4c 45 41 53 45 20 63 61 6c 6c 20 62 65 6c  RELEASE call bel
8ae0: 6f 77 20 63 61 6e 20 6e 65 76 65 72 20 66 61 69  ow can never fai
8af0: 6c 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74  l..  */.  assert
8b00: 28 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 3d  ( p->iStatement=
8b10: 3d 30 20 7c 7c 20 64 62 2d 3e 66 6c 61 67 73 26  =0 || db->flags&
8b20: 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73  SQLITE_CountRows
8b30: 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   );.  rc = sqlit
8b40: 65 33 56 64 62 65 43 6c 6f 73 65 53 74 61 74 65  e3VdbeCloseState
8b50: 6d 65 6e 74 28 70 2c 20 53 41 56 45 50 4f 49 4e  ment(p, SAVEPOIN
8b60: 54 5f 52 45 4c 45 41 53 45 29 3b 0a 20 20 69 66  T_RELEASE);.  if
8b70: 28 20 4e 45 56 45 52 28 72 63 21 3d 53 51 4c 49  ( NEVER(rc!=SQLI
8b80: 54 45 5f 4f 4b 29 20 29 7b 0a 20 20 20 20 62 72  TE_OK) ){.    br
8b90: 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49  eak;.  }..  /* I
8ba0: 6e 76 61 6c 69 64 61 74 65 20 61 6c 6c 20 65 70  nvalidate all ep
8bb0: 68 65 6d 65 72 61 6c 20 63 75 72 73 6f 72 20 72  hemeral cursor r
8bc0: 6f 77 20 63 61 63 68 65 73 20 2a 2f 0a 20 20 70  ow caches */.  p
8bd0: 2d 3e 63 61 63 68 65 43 74 72 20 3d 20 28 70 2d  ->cacheCtr = (p-
8be0: 3e 63 61 63 68 65 43 74 72 20 2b 20 32 29 7c 31  >cacheCtr + 2)|1
8bf0: 3b 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72  ;..  /* Make sur
8c00: 65 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66  e the results of
8c10: 20 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77   the current row
8c20: 20 61 72 65 20 5c 30 30 30 20 74 65 72 6d 69 6e   are \000 termin
8c30: 61 74 65 64 0a 20 20 2a 2a 20 61 6e 64 20 68 61  ated.  ** and ha
8c40: 76 65 20 61 6e 20 61 73 73 69 67 6e 65 64 20 74  ve an assigned t
8c50: 79 70 65 2e 20 20 54 68 65 20 72 65 73 75 6c 74  ype.  The result
8c60: 73 20 61 72 65 20 64 65 2d 65 70 68 65 6d 65 72  s are de-ephemer
8c70: 61 6c 69 7a 65 64 20 61 73 0a 20 20 2a 2a 20 61  alized as.  ** a
8c80: 73 20 73 69 64 65 20 65 66 66 65 63 74 2e 0a 20  s side effect.. 
8c90: 20 2a 2f 0a 20 20 70 4d 65 6d 20 3d 20 70 2d 3e   */.  pMem = p->
8ca0: 70 52 65 73 75 6c 74 53 65 74 20 3d 20 26 61 4d  pResultSet = &aM
8cb0: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 66  em[pOp->p1];.  f
8cc0: 6f 72 28 69 3d 30 3b 20 69 3c 70 4f 70 2d 3e 70  or(i=0; i<pOp->p
8cd0: 32 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 61 73 73  2; i++){.    ass
8ce0: 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
8cf0: 26 70 4d 65 6d 5b 69 5d 29 20 29 3b 0a 20 20 20  &pMem[i]) );.   
8d00: 20 44 65 65 70 68 65 6d 65 72 61 6c 69 7a 65 28   Deephemeralize(
8d10: 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 20 20 61  &pMem[i]);.    a
8d20: 73 73 65 72 74 28 20 28 70 4d 65 6d 5b 69 5d 2e  ssert( (pMem[i].
8d30: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 45 70 68 65  flags & MEM_Ephe
8d40: 6d 29 3d 3d 30 0a 20 20 20 20 20 20 20 20 20 20  m)==0.          
8d50: 20 20 7c 7c 20 28 70 4d 65 6d 5b 69 5d 2e 66 6c    || (pMem[i].fl
8d60: 61 67 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d  ags & (MEM_Str|M
8d70: 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 29 3b 0a  EM_Blob))==0 );.
8d80: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
8d90: 65 6d 4e 75 6c 54 65 72 6d 69 6e 61 74 65 28 26  emNulTerminate(&
8da0: 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 20 20 73 71  pMem[i]);.    sq
8db0: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74 6f 72  lite3VdbeMemStor
8dc0: 65 54 79 70 65 28 26 70 4d 65 6d 5b 69 5d 29 3b  eType(&pMem[i]);
8dd0: 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52  .    REGISTER_TR
8de0: 41 43 45 28 70 4f 70 2d 3e 70 31 2b 69 2c 20 26  ACE(pOp->p1+i, &
8df0: 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 7d 0a 20 20  pMem[i]);.  }.  
8e00: 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61  if( db->mallocFa
8e10: 69 6c 65 64 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  iled ) goto no_m
8e20: 65 6d 3b 0a 0a 20 20 2f 2a 20 52 65 74 75 72 6e  em;..  /* Return
8e30: 20 53 51 4c 49 54 45 5f 52 4f 57 0a 20 20 2a 2f   SQLITE_ROW.  */
8e40: 0a 20 20 70 2d 3e 70 63 20 3d 20 70 63 20 2b 20  .  p->pc = pc + 
8e50: 31 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45  1;.  rc = SQLITE
8e60: 5f 52 4f 57 3b 0a 20 20 67 6f 74 6f 20 76 64 62  _ROW;.  goto vdb
8e70: 65 5f 72 65 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a 20  e_return;.}../* 
8e80: 4f 70 63 6f 64 65 3a 20 43 6f 6e 63 61 74 20 50  Opcode: Concat P
8e90: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
8ea0: 2a 20 41 64 64 20 74 68 65 20 74 65 78 74 20 69  * Add the text i
8eb0: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 6f 6e  n register P1 on
8ec0: 74 6f 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  to the end of th
8ed0: 65 20 74 65 78 74 20 69 6e 0a 2a 2a 20 72 65 67  e text in.** reg
8ee0: 69 73 74 65 72 20 50 32 20 61 6e 64 20 73 74 6f  ister P2 and sto
8ef0: 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e  re the result in
8f00: 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a   register P3..**
8f10: 20 49 66 20 65 69 74 68 65 72 20 74 68 65 20 50   If either the P
8f20: 31 20 6f 72 20 50 32 20 74 65 78 74 20 61 72 65  1 or P2 text are
8f30: 20 4e 55 4c 4c 20 74 68 65 6e 20 73 74 6f 72 65   NULL then store
8f40: 20 4e 55 4c 4c 20 69 6e 20 50 33 2e 0a 2a 2a 0a   NULL in P3..**.
8f50: 2a 2a 20 20 20 50 33 20 3d 20 50 32 20 7c 7c 20  **   P3 = P2 || 
8f60: 50 31 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69  P1.**.** It is i
8f70: 6c 6c 65 67 61 6c 20 66 6f 72 20 50 31 20 61 6e  llegal for P1 an
8f80: 64 20 50 33 20 74 6f 20 62 65 20 74 68 65 20 73  d P3 to be the s
8f90: 61 6d 65 20 72 65 67 69 73 74 65 72 2e 20 53 6f  ame register. So
8fa0: 6d 65 74 69 6d 65 73 2c 0a 2a 2a 20 69 66 20 50  metimes,.** if P
8fb0: 33 20 69 73 20 74 68 65 20 73 61 6d 65 20 72 65  3 is the same re
8fc0: 67 69 73 74 65 72 20 61 73 20 50 32 2c 20 74 68  gister as P2, th
8fd0: 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
8fe0: 20 69 73 20 61 62 6c 65 0a 2a 2a 20 74 6f 20 61   is able.** to a
8ff0: 76 6f 69 64 20 61 20 6d 65 6d 63 70 79 28 29 2e  void a memcpy().
9000: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6e 63  .*/.case OP_Conc
9010: 61 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  at: {           
9020: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 43 4f  /* same as TK_CO
9030: 4e 43 41 54 2c 20 69 6e 31 2c 20 69 6e 32 2c 20  NCAT, in1, in2, 
9040: 6f 75 74 33 20 2a 2f 0a 20 20 69 36 34 20 6e 42  out3 */.  i64 nB
9050: 79 74 65 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26  yte;..  pIn1 = &
9060: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
9070: 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn2 = &aMem[pO
9080: 70 2d 3e 70 32 5d 3b 0a 20 20 70 4f 75 74 20 3d  p->p2];.  pOut =
9090: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
90a0: 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 21  .  assert( pIn1!
90b0: 3d 70 4f 75 74 20 29 3b 0a 20 20 69 66 28 20 28  =pOut );.  if( (
90c0: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49  pIn1->flags | pI
90d0: 6e 32 2d 3e 66 6c 61 67 73 29 20 26 20 4d 45 4d  n2->flags) & MEM
90e0: 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 73 71 6c  _Null ){.    sql
90f0: 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75  ite3VdbeMemSetNu
9100: 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 20 20 62 72  ll(pOut);.    br
9110: 65 61 6b 3b 0a 20 20 7d 0a 20 20 69 66 28 20 45  eak;.  }.  if( E
9120: 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 31 29 20  xpandBlob(pIn1) 
9130: 7c 7c 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49  || ExpandBlob(pI
9140: 6e 32 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  n2) ) goto no_me
9150: 6d 3b 0a 20 20 53 74 72 69 6e 67 69 66 79 28 70  m;.  Stringify(p
9160: 49 6e 31 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a  In1, encoding);.
9170: 20 20 53 74 72 69 6e 67 69 66 79 28 70 49 6e 32    Stringify(pIn2
9180: 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 6e  , encoding);.  n
9190: 42 79 74 65 20 3d 20 70 49 6e 31 2d 3e 6e 20 2b  Byte = pIn1->n +
91a0: 20 70 49 6e 32 2d 3e 6e 3b 0a 20 20 69 66 28 20   pIn2->n;.  if( 
91b0: 6e 42 79 74 65 3e 64 62 2d 3e 61 4c 69 6d 69 74  nByte>db->aLimit
91c0: 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45  [SQLITE_LIMIT_LE
91d0: 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74  NGTH] ){.    got
91e0: 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20  o too_big;.  }. 
91f0: 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
9200: 70 4f 75 74 2c 20 4d 45 4d 5f 53 74 72 29 3b 0a  pOut, MEM_Str);.
9210: 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62    if( sqlite3Vdb
9220: 65 4d 65 6d 47 72 6f 77 28 70 4f 75 74 2c 20 28  eMemGrow(pOut, (
9230: 69 6e 74 29 6e 42 79 74 65 2b 32 2c 20 70 4f 75  int)nByte+2, pOu
9240: 74 3d 3d 70 49 6e 32 29 20 29 7b 0a 20 20 20 20  t==pIn2) ){.    
9250: 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d  goto no_mem;.  }
9260: 0a 20 20 69 66 28 20 70 4f 75 74 21 3d 70 49 6e  .  if( pOut!=pIn
9270: 32 20 29 7b 0a 20 20 20 20 6d 65 6d 63 70 79 28  2 ){.    memcpy(
9280: 70 4f 75 74 2d 3e 7a 2c 20 70 49 6e 32 2d 3e 7a  pOut->z, pIn2->z
9290: 2c 20 70 49 6e 32 2d 3e 6e 29 3b 0a 20 20 7d 0a  , pIn2->n);.  }.
92a0: 20 20 6d 65 6d 63 70 79 28 26 70 4f 75 74 2d 3e    memcpy(&pOut->
92b0: 7a 5b 70 49 6e 32 2d 3e 6e 5d 2c 20 70 49 6e 31  z[pIn2->n], pIn1
92c0: 2d 3e 7a 2c 20 70 49 6e 31 2d 3e 6e 29 3b 0a 20  ->z, pIn1->n);. 
92d0: 20 70 4f 75 74 2d 3e 7a 5b 6e 42 79 74 65 5d 20   pOut->z[nByte] 
92e0: 3d 20 30 3b 0a 20 20 70 4f 75 74 2d 3e 7a 5b 6e  = 0;.  pOut->z[n
92f0: 42 79 74 65 2b 31 5d 20 3d 20 30 3b 0a 20 20 70  Byte+1] = 0;.  p
9300: 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45  Out->flags |= ME
9310: 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e  M_Term;.  pOut->
9320: 6e 20 3d 20 28 69 6e 74 29 6e 42 79 74 65 3b 0a  n = (int)nByte;.
9330: 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e    pOut->enc = en
9340: 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44 41 54 45  coding;.  UPDATE
9350: 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f  _MAX_BLOBSIZE(pO
9360: 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ut);.  break;.}.
9370: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 64 64 20  ./* Opcode: Add 
9380: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
9390: 2a 2a 20 41 64 64 20 74 68 65 20 76 61 6c 75 65  ** Add the value
93a0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
93b0: 74 6f 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  to the value in 
93c0: 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 61  register P2.** a
93d0: 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73  nd store the res
93e0: 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ult in register 
93f0: 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  P3..** If either
9400: 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20   input is NULL, 
9410: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
9420: 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  LL..*/./* Opcode
9430: 3a 20 4d 75 6c 74 69 70 6c 79 20 50 31 20 50 32  : Multiply P1 P2
9440: 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 0a 2a 2a   P3 * *.**.**.**
9450: 20 4d 75 6c 74 69 70 6c 79 20 74 68 65 20 76 61   Multiply the va
9460: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
9470: 50 31 20 62 79 20 74 68 65 20 76 61 6c 75 65 20  P1 by the value 
9480: 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a  in register P2.*
9490: 2a 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20  * and store the 
94a0: 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74  result in regist
94b0: 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74  er P3..** If eit
94c0: 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c  her input is NUL
94d0: 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  L, the result is
94e0: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63   NULL..*/./* Opc
94f0: 6f 64 65 3a 20 53 75 62 74 72 61 63 74 20 50 31  ode: Subtract P1
9500: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
9510: 20 53 75 62 74 72 61 63 74 20 74 68 65 20 76 61   Subtract the va
9520: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
9530: 50 31 20 66 72 6f 6d 20 74 68 65 20 76 61 6c 75  P1 from the valu
9540: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  e in register P2
9550: 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20 74 68  .** and store th
9560: 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69  e result in regi
9570: 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65  ster P3..** If e
9580: 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e  ither input is N
9590: 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20  ULL, the result 
95a0: 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f  is NULL..*/./* O
95b0: 70 63 6f 64 65 3a 20 44 69 76 69 64 65 20 50 31  pcode: Divide P1
95c0: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
95d0: 20 44 69 76 69 64 65 20 74 68 65 20 76 61 6c 75   Divide the valu
95e0: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
95f0: 20 62 79 20 74 68 65 20 76 61 6c 75 65 20 69 6e   by the value in
9600: 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20   register P2.** 
9610: 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65  and store the re
9620: 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72  sult in register
9630: 20 50 33 20 28 50 33 3d 50 32 2f 50 31 29 2e 20   P3 (P3=P2/P1). 
9640: 49 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  If the value in 
9650: 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31 20  .** register P1 
9660: 69 73 20 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68  is zero, then th
9670: 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  e result is NULL
9680: 2e 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75  . If either inpu
9690: 74 20 69 73 20 0a 2a 2a 20 4e 55 4c 4c 2c 20 74  t is .** NULL, t
96a0: 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c  he result is NUL
96b0: 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  L..*/./* Opcode:
96c0: 20 52 65 6d 61 69 6e 64 65 72 20 50 31 20 50 32   Remainder P1 P2
96d0: 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 6f   P3 * *.**.** Co
96e0: 6d 70 75 74 65 20 74 68 65 20 72 65 6d 61 69 6e  mpute the remain
96f0: 64 65 72 20 61 66 74 65 72 20 69 6e 74 65 67 65  der after intege
9700: 72 20 64 69 76 69 73 69 6f 6e 20 6f 66 20 74 68  r division of th
9710: 65 20 76 61 6c 75 65 20 69 6e 0a 2a 2a 20 72 65  e value in.** re
9720: 67 69 73 74 65 72 20 50 31 20 62 79 20 74 68 65  gister P1 by the
9730: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
9740: 65 72 20 50 32 20 61 6e 64 20 73 74 6f 72 65 20  er P2 and store 
9750: 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 50 33  the result in P3
9760: 2e 20 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c  . .** If the val
9770: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
9780: 32 20 69 73 20 7a 65 72 6f 20 74 68 65 20 72 65  2 is zero the re
9790: 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a  sult is NULL..**
97a0: 20 49 66 20 65 69 74 68 65 72 20 6f 70 65 72 61   If either opera
97b0: 6e 64 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20  nd is NULL, the 
97c0: 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a  result is NULL..
97d0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 64 64 3a 20  */.case OP_Add: 
97e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
97f0: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
9800: 50 4c 55 53 2c 20 69 6e 31 2c 20 69 6e 32 2c 20  PLUS, in1, in2, 
9810: 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  out3 */.case OP_
9820: 53 75 62 74 72 61 63 74 3a 20 20 20 20 20 20 20  Subtract:       
9830: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
9840: 73 20 54 4b 5f 4d 49 4e 55 53 2c 20 69 6e 31 2c  s TK_MINUS, in1,
9850: 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61   in2, out3 */.ca
9860: 73 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a 20  se OP_Multiply: 
9870: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
9880: 73 61 6d 65 20 61 73 20 54 4b 5f 53 54 41 52 2c  same as TK_STAR,
9890: 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20   in1, in2, out3 
98a0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 69 76 69 64  */.case OP_Divid
98b0: 65 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e:              
98c0: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
98d0: 53 4c 41 53 48 2c 20 69 6e 31 2c 20 69 6e 32 2c  SLASH, in1, in2,
98e0: 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50   out3 */.case OP
98f0: 5f 52 65 6d 61 69 6e 64 65 72 3a 20 7b 20 20 20  _Remainder: {   
9900: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
9910: 61 73 20 54 4b 5f 52 45 4d 2c 20 69 6e 31 2c 20  as TK_REM, in1, 
9920: 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69  in2, out3 */.  i
9930: 6e 74 20 66 6c 61 67 73 3b 20 20 20 20 20 20 2f  nt flags;      /
9940: 2a 20 43 6f 6d 62 69 6e 65 64 20 4d 45 4d 5f 2a  * Combined MEM_*
9950: 20 66 6c 61 67 73 20 66 72 6f 6d 20 62 6f 74 68   flags from both
9960: 20 69 6e 70 75 74 73 20 2a 2f 0a 20 20 69 36 34   inputs */.  i64
9970: 20 69 41 3b 20 20 20 20 20 20 20 20 20 2f 2a 20   iA;         /* 
9980: 49 6e 74 65 67 65 72 20 76 61 6c 75 65 20 6f 66  Integer value of
9990: 20 6c 65 66 74 20 6f 70 65 72 61 6e 64 20 2a 2f   left operand */
99a0: 0a 20 20 69 36 34 20 69 42 3b 20 20 20 20 20 20  .  i64 iB;      
99b0: 20 20 20 2f 2a 20 49 6e 74 65 67 65 72 20 76 61     /* Integer va
99c0: 6c 75 65 20 6f 66 20 72 69 67 68 74 20 6f 70 65  lue of right ope
99d0: 72 61 6e 64 20 2a 2f 0a 20 20 64 6f 75 62 6c 65  rand */.  double
99e0: 20 72 41 3b 20 20 20 20 20 20 2f 2a 20 52 65 61   rA;      /* Rea
99f0: 6c 20 76 61 6c 75 65 20 6f 66 20 6c 65 66 74 20  l value of left 
9a00: 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 64 6f 75  operand */.  dou
9a10: 62 6c 65 20 72 42 3b 20 20 20 20 20 20 2f 2a 20  ble rB;      /* 
9a20: 52 65 61 6c 20 76 61 6c 75 65 20 6f 66 20 72 69  Real value of ri
9a30: 67 68 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 0a  ght operand */..
9a40: 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
9a50: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 70 70 6c 79  Op->p1];.  apply
9a60: 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28  NumericAffinity(
9a70: 70 49 6e 31 29 3b 0a 20 20 70 49 6e 32 20 3d 20  pIn1);.  pIn2 = 
9a80: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
9a90: 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66    applyNumericAf
9aa0: 66 69 6e 69 74 79 28 70 49 6e 32 29 3b 0a 20 20  finity(pIn2);.  
9ab0: 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
9ac0: 2d 3e 70 33 5d 3b 0a 20 20 66 6c 61 67 73 20 3d  ->p3];.  flags =
9ad0: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70   pIn1->flags | p
9ae0: 49 6e 32 2d 3e 66 6c 61 67 73 3b 0a 20 20 69 66  In2->flags;.  if
9af0: 28 20 28 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  ( (flags & MEM_N
9b00: 75 6c 6c 29 21 3d 30 20 29 20 67 6f 74 6f 20 61  ull)!=0 ) goto a
9b10: 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74  rithmetic_result
9b20: 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 69 66 28 20  _is_null;.  if( 
9b30: 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 70  (pIn1->flags & p
9b40: 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In2->flags & MEM
9b50: 5f 49 6e 74 29 3d 3d 4d 45 4d 5f 49 6e 74 20 29  _Int)==MEM_Int )
9b60: 7b 0a 20 20 20 20 69 41 20 3d 20 70 49 6e 31 2d  {.    iA = pIn1-
9b70: 3e 75 2e 69 3b 0a 20 20 20 20 69 42 20 3d 20 70  >u.i;.    iB = p
9b80: 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20 20 20 73 77  In2->u.i;.    sw
9b90: 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  itch( pOp->opcod
9ba0: 65 20 29 7b 0a 20 20 20 20 20 20 63 61 73 65 20  e ){.      case 
9bb0: 4f 50 5f 41 64 64 3a 20 20 20 20 20 20 20 69 66  OP_Add:       if
9bc0: 28 20 73 71 6c 69 74 65 33 41 64 64 49 6e 74 36  ( sqlite3AddInt6
9bd0: 34 28 26 69 42 2c 69 41 29 20 29 20 67 6f 74 6f  4(&iB,iA) ) goto
9be0: 20 66 70 5f 6d 61 74 68 3b 20 20 62 72 65 61 6b   fp_math;  break
9bf0: 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f  ;.      case OP_
9c00: 53 75 62 74 72 61 63 74 3a 20 20 69 66 28 20 73  Subtract:  if( s
9c10: 71 6c 69 74 65 33 53 75 62 49 6e 74 36 34 28 26  qlite3SubInt64(&
9c20: 69 42 2c 69 41 29 20 29 20 67 6f 74 6f 20 66 70  iB,iA) ) goto fp
9c30: 5f 6d 61 74 68 3b 20 20 62 72 65 61 6b 3b 0a 20  _math;  break;. 
9c40: 20 20 20 20 20 63 61 73 65 20 4f 50 5f 4d 75 6c       case OP_Mul
9c50: 74 69 70 6c 79 3a 20 20 69 66 28 20 73 71 6c 69  tiply:  if( sqli
9c60: 74 65 33 4d 75 6c 49 6e 74 36 34 28 26 69 42 2c  te3MulInt64(&iB,
9c70: 69 41 29 20 29 20 67 6f 74 6f 20 66 70 5f 6d 61  iA) ) goto fp_ma
9c80: 74 68 3b 20 20 62 72 65 61 6b 3b 0a 20 20 20 20  th;  break;.    
9c90: 20 20 63 61 73 65 20 4f 50 5f 44 69 76 69 64 65    case OP_Divide
9ca0: 3a 20 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20  : {.        if( 
9cb0: 69 41 3d 3d 30 20 29 20 67 6f 74 6f 20 61 72 69  iA==0 ) goto ari
9cc0: 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69  thmetic_result_i
9cd0: 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20  s_null;.        
9ce0: 69 66 28 20 69 41 3d 3d 2d 31 20 26 26 20 69 42  if( iA==-1 && iB
9cf0: 3d 3d 53 4d 41 4c 4c 45 53 54 5f 49 4e 54 36 34  ==SMALLEST_INT64
9d00: 20 29 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68 3b   ) goto fp_math;
9d10: 0a 20 20 20 20 20 20 20 20 69 42 20 2f 3d 20 69  .        iB /= i
9d20: 41 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b  A;.        break
9d30: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
9d40: 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20 20 20 20  default: {.     
9d50: 20 20 20 69 66 28 20 69 41 3d 3d 30 20 29 20 67     if( iA==0 ) g
9d60: 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72  oto arithmetic_r
9d70: 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20  esult_is_null;. 
9d80: 20 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d 2d         if( iA==-
9d90: 31 20 29 20 69 41 20 3d 20 31 3b 0a 20 20 20 20  1 ) iA = 1;.    
9da0: 20 20 20 20 69 42 20 25 3d 20 69 41 3b 0a 20 20      iB %= iA;.  
9db0: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
9dc0: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 70     }.    }.    p
9dd0: 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 42 3b 0a 20  Out->u.i = iB;. 
9de0: 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61     MemSetTypeFla
9df0: 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29  g(pOut, MEM_Int)
9e00: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 66 70 5f 6d 61  ;.  }else{.fp_ma
9e10: 74 68 3a 0a 20 20 20 20 72 41 20 3d 20 73 71 6c  th:.    rA = sql
9e20: 69 74 65 33 56 64 62 65 52 65 61 6c 56 61 6c 75  ite3VdbeRealValu
9e30: 65 28 70 49 6e 31 29 3b 0a 20 20 20 20 72 42 20  e(pIn1);.    rB 
9e40: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 52 65 61  = sqlite3VdbeRea
9e50: 6c 56 61 6c 75 65 28 70 49 6e 32 29 3b 0a 20 20  lValue(pIn2);.  
9e60: 20 20 73 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f    switch( pOp->o
9e70: 70 63 6f 64 65 20 29 7b 0a 20 20 20 20 20 20 63  pcode ){.      c
9e80: 61 73 65 20 4f 50 5f 41 64 64 3a 20 20 20 20 20  ase OP_Add:     
9e90: 20 20 20 20 72 42 20 2b 3d 20 72 41 3b 20 20 20      rB += rA;   
9ea0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
9eb0: 20 63 61 73 65 20 4f 50 5f 53 75 62 74 72 61 63   case OP_Subtrac
9ec0: 74 3a 20 20 20 20 72 42 20 2d 3d 20 72 41 3b 20  t:    rB -= rA; 
9ed0: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
9ee0: 20 20 20 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69     case OP_Multi
9ef0: 70 6c 79 3a 20 20 20 20 72 42 20 2a 3d 20 72 41  ply:    rB *= rA
9f00: 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  ;       break;. 
9f10: 20 20 20 20 20 63 61 73 65 20 4f 50 5f 44 69 76       case OP_Div
9f20: 69 64 65 3a 20 7b 0a 20 20 20 20 20 20 20 20 2f  ide: {.        /
9f30: 2a 20 28 64 6f 75 62 6c 65 29 30 20 49 6e 20 63  * (double)0 In c
9f40: 61 73 65 20 6f 66 20 53 51 4c 49 54 45 5f 4f 4d  ase of SQLITE_OM
9f50: 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e  IT_FLOATING_POIN
9f60: 54 2e 2e 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20  T... */.        
9f70: 69 66 28 20 72 41 3d 3d 28 64 6f 75 62 6c 65 29  if( rA==(double)
9f80: 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d 65  0 ) goto arithme
9f90: 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75  tic_result_is_nu
9fa0: 6c 6c 3b 0a 20 20 20 20 20 20 20 20 72 42 20 2f  ll;.        rB /
9fb0: 3d 20 72 41 3b 0a 20 20 20 20 20 20 20 20 62 72  = rA;.        br
9fc0: 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  eak;.      }.   
9fd0: 20 20 20 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20     default: {.  
9fe0: 20 20 20 20 20 20 69 41 20 3d 20 28 69 36 34 29        iA = (i64)
9ff0: 72 41 3b 0a 20 20 20 20 20 20 20 20 69 42 20 3d  rA;.        iB =
a000: 20 28 69 36 34 29 72 42 3b 0a 20 20 20 20 20 20   (i64)rB;.      
a010: 20 20 69 66 28 20 69 41 3d 3d 30 20 29 20 67 6f    if( iA==0 ) go
a020: 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65  to arithmetic_re
a030: 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20  sult_is_null;.  
a040: 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d 2d 31        if( iA==-1
a050: 20 29 20 69 41 20 3d 20 31 3b 0a 20 20 20 20 20   ) iA = 1;.     
a060: 20 20 20 72 42 20 3d 20 28 64 6f 75 62 6c 65 29     rB = (double)
a070: 28 69 42 20 25 20 69 41 29 3b 0a 20 20 20 20 20  (iB % iA);.     
a080: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
a090: 7d 0a 20 20 20 20 7d 0a 23 69 66 64 65 66 20 53  }.    }.#ifdef S
a0a0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54  QLITE_OMIT_FLOAT
a0b0: 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 20 20 70 4f  ING_POINT.    pO
a0c0: 75 74 2d 3e 75 2e 69 20 3d 20 72 42 3b 0a 20 20  ut->u.i = rB;.  
a0d0: 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
a0e0: 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b  (pOut, MEM_Int);
a0f0: 0a 23 65 6c 73 65 0a 20 20 20 20 69 66 28 20 73  .#else.    if( s
a100: 71 6c 69 74 65 33 49 73 4e 61 4e 28 72 42 29 20  qlite3IsNaN(rB) 
a110: 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 72  ){.      goto ar
a120: 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f  ithmetic_result_
a130: 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 7d 0a 20  is_null;.    }. 
a140: 20 20 20 70 4f 75 74 2d 3e 72 20 3d 20 72 42 3b     pOut->r = rB;
a150: 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46  .    MemSetTypeF
a160: 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 52 65  lag(pOut, MEM_Re
a170: 61 6c 29 3b 0a 20 20 20 20 69 66 28 20 28 66 6c  al);.    if( (fl
a180: 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 29 3d  ags & MEM_Real)=
a190: 3d 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  =0 ){.      sqli
a1a0: 74 65 33 56 64 62 65 49 6e 74 65 67 65 72 41 66  te3VdbeIntegerAf
a1b0: 66 69 6e 69 74 79 28 70 4f 75 74 29 3b 0a 20 20  finity(pOut);.  
a1c0: 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 7d 0a 20    }.#endif.  }. 
a1d0: 20 62 72 65 61 6b 3b 0a 0a 61 72 69 74 68 6d 65   break;..arithme
a1e0: 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75  tic_result_is_nu
a1f0: 6c 6c 3a 0a 20 20 73 71 6c 69 74 65 33 56 64 62  ll:.  sqlite3Vdb
a200: 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74  eMemSetNull(pOut
a210: 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
a220: 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6c 6c 53 65  * Opcode: CollSe
a230: 71 20 2a 20 2a 20 50 34 0a 2a 2a 0a 2a 2a 20 50  q * * P4.**.** P
a240: 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  4 is a pointer t
a250: 6f 20 61 20 43 6f 6c 6c 53 65 71 20 73 74 72 75  o a CollSeq stru
a260: 63 74 2e 20 49 66 20 74 68 65 20 6e 65 78 74 20  ct. If the next 
a270: 63 61 6c 6c 20 74 6f 20 61 20 75 73 65 72 20 66  call to a user f
a280: 75 6e 63 74 69 6f 6e 0a 2a 2a 20 6f 72 20 61 67  unction.** or ag
a290: 67 72 65 67 61 74 65 20 63 61 6c 6c 73 20 73 71  gregate calls sq
a2a0: 6c 69 74 65 33 47 65 74 46 75 6e 63 43 6f 6c 6c  lite3GetFuncColl
a2b0: 53 65 71 28 29 2c 20 74 68 69 73 20 63 6f 6c 6c  Seq(), this coll
a2c0: 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 77  ation sequence w
a2d0: 69 6c 6c 0a 2a 2a 20 62 65 20 72 65 74 75 72 6e  ill.** be return
a2e0: 65 64 2e 20 54 68 69 73 20 69 73 20 75 73 65 64  ed. This is used
a2f0: 20 62 79 20 74 68 65 20 62 75 69 6c 74 2d 69 6e   by the built-in
a300: 20 6d 69 6e 28 29 2c 20 6d 61 78 28 29 20 61 6e   min(), max() an
a310: 64 20 6e 75 6c 6c 69 66 28 29 0a 2a 2a 20 66 75  d nullif().** fu
a320: 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 54  nctions..**.** T
a330: 68 65 20 69 6e 74 65 72 66 61 63 65 20 75 73 65  he interface use
a340: 64 20 62 79 20 74 68 65 20 69 6d 70 6c 65 6d 65  d by the impleme
a350: 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 61  ntation of the a
a360: 66 6f 72 65 6d 65 6e 74 69 6f 6e 65 64 20 66 75  forementioned fu
a370: 6e 63 74 69 6f 6e 73 0a 2a 2a 20 74 6f 20 72 65  nctions.** to re
a380: 74 72 69 65 76 65 20 74 68 65 20 63 6f 6c 6c 61  trieve the colla
a390: 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 73 65  tion sequence se
a3a0: 74 20 62 79 20 74 68 69 73 20 6f 70 63 6f 64 65  t by this opcode
a3b0: 20 69 73 20 6e 6f 74 20 61 76 61 69 6c 61 62 6c   is not availabl
a3c0: 65 0a 2a 2a 20 70 75 62 6c 69 63 6c 79 2c 20 6f  e.** publicly, o
a3d0: 6e 6c 79 20 74 6f 20 75 73 65 72 20 66 75 6e 63  nly to user func
a3e0: 74 69 6f 6e 73 20 64 65 66 69 6e 65 64 20 69 6e  tions defined in
a3f0: 20 66 75 6e 63 2e 63 2e 0a 2a 2f 0a 63 61 73 65   func.c..*/.case
a400: 20 4f 50 5f 43 6f 6c 6c 53 65 71 3a 20 7b 0a 20   OP_CollSeq: {. 
a410: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
a420: 74 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51  type==P4_COLLSEQ
a430: 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a   );.  break;.}..
a440: 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 75 6e 63 74  /* Opcode: Funct
a450: 69 6f 6e 20 50 31 20 50 32 20 50 33 20 50 34 20  ion P1 P2 P3 P4 
a460: 50 35 0a 2a 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20  P5.**.** Invoke 
a470: 61 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20  a user function 
a480: 28 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72  (P4 is a pointer
a490: 20 74 6f 20 61 20 46 75 6e 63 74 69 6f 6e 20 73   to a Function s
a4a0: 74 72 75 63 74 75 72 65 20 74 68 61 74 0a 2a 2a  tructure that.**
a4b0: 20 64 65 66 69 6e 65 73 20 74 68 65 20 66 75 6e   defines the fun
a4c0: 63 74 69 6f 6e 29 20 77 69 74 68 20 50 35 20 61  ction) with P5 a
a4d0: 72 67 75 6d 65 6e 74 73 20 74 61 6b 65 6e 20 66  rguments taken f
a4e0: 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50 32 20  rom register P2 
a4f0: 61 6e 64 0a 2a 2a 20 73 75 63 63 65 73 73 6f 72  and.** successor
a500: 73 2e 20 20 54 68 65 20 72 65 73 75 6c 74 20 6f  s.  The result o
a510: 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 69  f the function i
a520: 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  s stored in regi
a530: 73 74 65 72 20 50 33 2e 0a 2a 2a 20 52 65 67 69  ster P3..** Regi
a540: 73 74 65 72 20 50 33 20 6d 75 73 74 20 6e 6f 74  ster P3 must not
a550: 20 62 65 20 6f 6e 65 20 6f 66 20 74 68 65 20 66   be one of the f
a560: 75 6e 63 74 69 6f 6e 20 69 6e 70 75 74 73 2e 0a  unction inputs..
a570: 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 33 32  **.** P1 is a 32
a580: 2d 62 69 74 20 62 69 74 6d 61 73 6b 20 69 6e 64  -bit bitmask ind
a590: 69 63 61 74 69 6e 67 20 77 68 65 74 68 65 72 20  icating whether 
a5a0: 6f 72 20 6e 6f 74 20 65 61 63 68 20 61 72 67 75  or not each argu
a5b0: 6d 65 6e 74 20 74 6f 20 74 68 65 20 0a 2a 2a 20  ment to the .** 
a5c0: 66 75 6e 63 74 69 6f 6e 20 77 61 73 20 64 65 74  function was det
a5d0: 65 72 6d 69 6e 65 64 20 74 6f 20 62 65 20 63 6f  ermined to be co
a5e0: 6e 73 74 61 6e 74 20 61 74 20 63 6f 6d 70 69 6c  nstant at compil
a5f0: 65 20 74 69 6d 65 2e 20 49 66 20 74 68 65 20 66  e time. If the f
a600: 69 72 73 74 0a 2a 2a 20 61 72 67 75 6d 65 6e 74  irst.** argument
a610: 20 77 61 73 20 63 6f 6e 73 74 61 6e 74 20 74 68   was constant th
a620: 65 6e 20 62 69 74 20 30 20 6f 66 20 50 31 20 69  en bit 0 of P1 i
a630: 73 20 73 65 74 2e 20 54 68 69 73 20 69 73 20 75  s set. This is u
a640: 73 65 64 20 74 6f 20 64 65 74 65 72 6d 69 6e 65  sed to determine
a650: 0a 2a 2a 20 77 68 65 74 68 65 72 20 6d 65 74 61  .** whether meta
a660: 20 64 61 74 61 20 61 73 73 6f 63 69 61 74 65 64   data associated
a670: 20 77 69 74 68 20 61 20 75 73 65 72 20 66 75 6e   with a user fun
a680: 63 74 69 6f 6e 20 61 72 67 75 6d 65 6e 74 20 75  ction argument u
a690: 73 69 6e 67 20 74 68 65 0a 2a 2a 20 73 71 6c 69  sing the.** sqli
a6a0: 74 65 33 5f 73 65 74 5f 61 75 78 64 61 74 61 28  te3_set_auxdata(
a6b0: 29 20 41 50 49 20 6d 61 79 20 62 65 20 73 61 66  ) API may be saf
a6c0: 65 6c 79 20 72 65 74 61 69 6e 65 64 20 75 6e 74  ely retained unt
a6d0: 69 6c 20 74 68 65 20 6e 65 78 74 0a 2a 2a 20 69  il the next.** i
a6e0: 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 69  nvocation of thi
a6f0: 73 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20  s opcode..**.** 
a700: 53 65 65 20 61 6c 73 6f 3a 20 41 67 67 53 74 65  See also: AggSte
a710: 70 20 61 6e 64 20 41 67 67 46 69 6e 61 6c 0a 2a  p and AggFinal.*
a720: 2f 0a 63 61 73 65 20 4f 50 5f 46 75 6e 63 74 69  /.case OP_Functi
a730: 6f 6e 3a 20 7b 0a 20 20 69 6e 74 20 69 3b 0a 20  on: {.  int i;. 
a740: 20 4d 65 6d 20 2a 70 41 72 67 3b 0a 20 20 73 71   Mem *pArg;.  sq
a750: 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 63 74  lite3_context ct
a760: 78 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c  x;.  sqlite3_val
a770: 75 65 20 2a 2a 61 70 56 61 6c 3b 0a 20 20 69 6e  ue **apVal;.  in
a780: 74 20 6e 3b 0a 0a 20 20 6e 20 3d 20 70 4f 70 2d  t n;..  n = pOp-
a790: 3e 70 35 3b 0a 20 20 61 70 56 61 6c 20 3d 20 70  >p5;.  apVal = p
a7a0: 2d 3e 61 70 41 72 67 3b 0a 20 20 61 73 73 65 72  ->apArg;.  asser
a7b0: 74 28 20 61 70 56 61 6c 20 7c 7c 20 6e 3d 3d 30  t( apVal || n==0
a7c0: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
a7d0: 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p3>0 && pOp->
a7e0: 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20  p3<=p->nMem );. 
a7f0: 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f   pOut = &aMem[pO
a800: 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41 62 6f  p->p3];.  memAbo
a810: 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f  utToChange(p, pO
a820: 75 74 29 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  ut);..  assert( 
a830: 6e 3d 3d 30 20 7c 7c 20 28 70 4f 70 2d 3e 70 32  n==0 || (pOp->p2
a840: 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 6e 3c  >0 && pOp->p2+n<
a850: 3d 70 2d 3e 6e 4d 65 6d 2b 31 29 20 29 3b 0a 20  =p->nMem+1) );. 
a860: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
a870: 3c 70 4f 70 2d 3e 70 32 20 7c 7c 20 70 4f 70 2d  <pOp->p2 || pOp-
a880: 3e 70 33 3e 3d 70 4f 70 2d 3e 70 32 2b 6e 20 29  >p3>=pOp->p2+n )
a890: 3b 0a 20 20 70 41 72 67 20 3d 20 26 61 4d 65 6d  ;.  pArg = &aMem
a8a0: 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 66 6f 72  [pOp->p2];.  for
a8b0: 28 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b 2b 2c 20  (i=0; i<n; i++, 
a8c0: 70 41 72 67 2b 2b 29 7b 0a 20 20 20 20 61 73 73  pArg++){.    ass
a8d0: 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
a8e0: 70 41 72 67 29 20 29 3b 0a 20 20 20 20 61 70 56  pArg) );.    apV
a8f0: 61 6c 5b 69 5d 20 3d 20 70 41 72 67 3b 0a 20 20  al[i] = pArg;.  
a900: 20 20 44 65 65 70 68 65 6d 65 72 61 6c 69 7a 65    Deephemeralize
a910: 28 70 41 72 67 29 3b 0a 20 20 20 20 73 71 6c 69  (pArg);.    sqli
a920: 74 65 33 56 64 62 65 4d 65 6d 53 74 6f 72 65 54  te3VdbeMemStoreT
a930: 79 70 65 28 70 41 72 67 29 3b 0a 20 20 20 20 52  ype(pArg);.    R
a940: 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
a950: 70 2d 3e 70 32 2b 69 2c 20 70 41 72 67 29 3b 0a  p->p2+i, pArg);.
a960: 20 20 7d 0a 0a 20 20 61 73 73 65 72 74 28 20 70    }..  assert( p
a970: 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 46  Op->p4type==P4_F
a980: 55 4e 43 44 45 46 20 7c 7c 20 70 4f 70 2d 3e 70  UNCDEF || pOp->p
a990: 34 74 79 70 65 3d 3d 50 34 5f 56 44 42 45 46 55  4type==P4_VDBEFU
a9a0: 4e 43 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d  NC );.  if( pOp-
a9b0: 3e 70 34 74 79 70 65 3d 3d 50 34 5f 46 55 4e 43  >p4type==P4_FUNC
a9c0: 44 45 46 20 29 7b 0a 20 20 20 20 63 74 78 2e 70  DEF ){.    ctx.p
a9d0: 46 75 6e 63 20 3d 20 70 4f 70 2d 3e 70 34 2e 70  Func = pOp->p4.p
a9e0: 46 75 6e 63 3b 0a 20 20 20 20 63 74 78 2e 70 56  Func;.    ctx.pV
a9f0: 64 62 65 46 75 6e 63 20 3d 20 30 3b 0a 20 20 7d  dbeFunc = 0;.  }
aa00: 65 6c 73 65 7b 0a 20 20 20 20 63 74 78 2e 70 56  else{.    ctx.pV
aa10: 64 62 65 46 75 6e 63 20 3d 20 28 56 64 62 65 46  dbeFunc = (VdbeF
aa20: 75 6e 63 2a 29 70 4f 70 2d 3e 70 34 2e 70 56 64  unc*)pOp->p4.pVd
aa30: 62 65 46 75 6e 63 3b 0a 20 20 20 20 63 74 78 2e  beFunc;.    ctx.
aa40: 70 46 75 6e 63 20 3d 20 63 74 78 2e 70 56 64 62  pFunc = ctx.pVdb
aa50: 65 46 75 6e 63 2d 3e 70 46 75 6e 63 3b 0a 20 20  eFunc->pFunc;.  
aa60: 7d 0a 0a 20 20 63 74 78 2e 73 2e 66 6c 61 67 73  }..  ctx.s.flags
aa70: 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 63   = MEM_Null;.  c
aa80: 74 78 2e 73 2e 64 62 20 3d 20 64 62 3b 0a 20 20  tx.s.db = db;.  
aa90: 63 74 78 2e 73 2e 78 44 65 6c 20 3d 20 30 3b 0a  ctx.s.xDel = 0;.
aaa0: 20 20 63 74 78 2e 73 2e 7a 4d 61 6c 6c 6f 63 20    ctx.s.zMalloc 
aab0: 3d 20 30 3b 0a 0a 20 20 2f 2a 20 54 68 65 20 6f  = 0;..  /* The o
aac0: 75 74 70 75 74 20 63 65 6c 6c 20 6d 61 79 20 61  utput cell may a
aad0: 6c 72 65 61 64 79 20 68 61 76 65 20 61 20 62 75  lready have a bu
aae0: 66 66 65 72 20 61 6c 6c 6f 63 61 74 65 64 2e 20  ffer allocated. 
aaf0: 4d 6f 76 65 0a 20 20 2a 2a 20 74 68 65 20 70 6f  Move.  ** the po
ab00: 69 6e 74 65 72 20 74 6f 20 63 74 78 2e 73 20 73  inter to ctx.s s
ab10: 6f 20 69 6e 20 63 61 73 65 20 74 68 65 20 75 73  o in case the us
ab20: 65 72 2d 66 75 6e 63 74 69 6f 6e 20 63 61 6e 20  er-function can 
ab30: 75 73 65 0a 20 20 2a 2a 20 74 68 65 20 61 6c 72  use.  ** the alr
ab40: 65 61 64 79 20 61 6c 6c 6f 63 61 74 65 64 20 62  eady allocated b
ab50: 75 66 66 65 72 20 69 6e 73 74 65 61 64 20 6f 66  uffer instead of
ab60: 20 61 6c 6c 6f 63 61 74 69 6e 67 20 61 20 6e 65   allocating a ne
ab70: 77 20 6f 6e 65 2e 0a 20 20 2a 2f 0a 20 20 73 71  w one..  */.  sq
ab80: 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65  lite3VdbeMemMove
ab90: 28 26 63 74 78 2e 73 2c 20 70 4f 75 74 29 3b 0a  (&ctx.s, pOut);.
aba0: 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
abb0: 28 26 63 74 78 2e 73 2c 20 4d 45 4d 5f 4e 75 6c  (&ctx.s, MEM_Nul
abc0: 6c 29 3b 0a 0a 20 20 63 74 78 2e 69 73 45 72 72  l);..  ctx.isErr
abd0: 6f 72 20 3d 20 30 3b 0a 20 20 69 66 28 20 63 74  or = 0;.  if( ct
abe0: 78 2e 70 46 75 6e 63 2d 3e 66 6c 61 67 73 20 26  x.pFunc->flags &
abf0: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45   SQLITE_FUNC_NEE
ac00: 44 43 4f 4c 4c 20 29 7b 0a 20 20 20 20 61 73 73  DCOLL ){.    ass
ac10: 65 72 74 28 20 70 4f 70 3e 61 4f 70 20 29 3b 0a  ert( pOp>aOp );.
ac20: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b      assert( pOp[
ac30: 2d 31 5d 2e 70 34 74 79 70 65 3d 3d 50 34 5f 43  -1].p4type==P4_C
ac40: 4f 4c 4c 53 45 51 20 29 3b 0a 20 20 20 20 61 73  OLLSEQ );.    as
ac50: 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 6f 70  sert( pOp[-1].op
ac60: 63 6f 64 65 3d 3d 4f 50 5f 43 6f 6c 6c 53 65 71  code==OP_CollSeq
ac70: 20 29 3b 0a 20 20 20 20 63 74 78 2e 70 43 6f 6c   );.    ctx.pCol
ac80: 6c 20 3d 20 70 4f 70 5b 2d 31 5d 2e 70 34 2e 70  l = pOp[-1].p4.p
ac90: 43 6f 6c 6c 3b 0a 20 20 7d 0a 20 20 28 2a 63 74  Coll;.  }.  (*ct
aca0: 78 2e 70 46 75 6e 63 2d 3e 78 46 75 6e 63 29 28  x.pFunc->xFunc)(
acb0: 26 63 74 78 2c 20 6e 2c 20 61 70 56 61 6c 29 3b  &ctx, n, apVal);
acc0: 20 2f 2a 20 49 4d 50 3a 20 52 2d 32 34 35 30 35   /* IMP: R-24505
acd0: 2d 32 33 32 33 30 20 2a 2f 0a 20 20 69 66 28 20  -23230 */.  if( 
ace0: 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64  db->mallocFailed
acf0: 20 29 7b 0a 20 20 20 20 2f 2a 20 45 76 65 6e 20   ){.    /* Even 
ad00: 74 68 6f 75 67 68 20 61 20 6d 61 6c 6c 6f 63 28  though a malloc(
ad10: 29 20 68 61 73 20 66 61 69 6c 65 64 2c 20 74 68  ) has failed, th
ad20: 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
ad30: 20 6f 66 20 74 68 65 0a 20 20 20 20 2a 2a 20 75   of the.    ** u
ad40: 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 6d 61 79  ser function may
ad50: 20 68 61 76 65 20 63 61 6c 6c 65 64 20 61 6e 20   have called an 
ad60: 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 58  sqlite3_result_X
ad70: 58 58 28 29 20 66 75 6e 63 74 69 6f 6e 0a 20 20  XX() function.  
ad80: 20 20 2a 2a 20 74 6f 20 72 65 74 75 72 6e 20 61    ** to return a
ad90: 20 76 61 6c 75 65 2e 20 54 68 65 20 66 6f 6c 6c   value. The foll
ada0: 6f 77 69 6e 67 20 63 61 6c 6c 20 72 65 6c 65 61  owing call relea
adb0: 73 65 73 20 61 6e 79 20 72 65 73 6f 75 72 63 65  ses any resource
adc0: 73 0a 20 20 20 20 2a 2a 20 61 73 73 6f 63 69 61  s.    ** associa
add0: 74 65 64 20 77 69 74 68 20 73 75 63 68 20 61 20  ted with such a 
ade0: 76 61 6c 75 65 2e 0a 20 20 20 20 2a 2f 0a 20 20  value..    */.  
adf0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
ae00: 52 65 6c 65 61 73 65 28 26 63 74 78 2e 73 29 3b  Release(&ctx.s);
ae10: 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  .    goto no_mem
ae20: 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20 61  ;.  }..  /* If a
ae30: 6e 79 20 61 75 78 69 6c 69 61 72 79 20 64 61 74  ny auxiliary dat
ae40: 61 20 66 75 6e 63 74 69 6f 6e 73 20 68 61 76 65  a functions have
ae50: 20 62 65 65 6e 20 63 61 6c 6c 65 64 20 62 79 20   been called by 
ae60: 74 68 69 73 20 75 73 65 72 20 66 75 6e 63 74 69  this user functi
ae70: 6f 6e 2c 0a 20 20 2a 2a 20 69 6d 6d 65 64 69 61  on,.  ** immedia
ae80: 74 65 6c 79 20 63 61 6c 6c 20 74 68 65 20 64 65  tely call the de
ae90: 73 74 72 75 63 74 6f 72 20 66 6f 72 20 61 6e 79  structor for any
aea0: 20 6e 6f 6e 2d 73 74 61 74 69 63 20 76 61 6c 75   non-static valu
aeb0: 65 73 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 63  es..  */.  if( c
aec0: 74 78 2e 70 56 64 62 65 46 75 6e 63 20 29 7b 0a  tx.pVdbeFunc ){.
aed0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 44      sqlite3VdbeD
aee0: 65 6c 65 74 65 41 75 78 44 61 74 61 28 63 74 78  eleteAuxData(ctx
aef0: 2e 70 56 64 62 65 46 75 6e 63 2c 20 70 4f 70 2d  .pVdbeFunc, pOp-
af00: 3e 70 31 29 3b 0a 20 20 20 20 70 4f 70 2d 3e 70  >p1);.    pOp->p
af10: 34 2e 70 56 64 62 65 46 75 6e 63 20 3d 20 63 74  4.pVdbeFunc = ct
af20: 78 2e 70 56 64 62 65 46 75 6e 63 3b 0a 20 20 20  x.pVdbeFunc;.   
af30: 20 70 4f 70 2d 3e 70 34 74 79 70 65 20 3d 20 50   pOp->p4type = P
af40: 34 5f 56 44 42 45 46 55 4e 43 3b 0a 20 20 7d 0a  4_VDBEFUNC;.  }.
af50: 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 66 75 6e  .  /* If the fun
af60: 63 74 69 6f 6e 20 72 65 74 75 72 6e 65 64 20 61  ction returned a
af70: 6e 20 65 72 72 6f 72 2c 20 74 68 72 6f 77 20 61  n error, throw a
af80: 6e 20 65 78 63 65 70 74 69 6f 6e 20 2a 2f 0a 20  n exception */. 
af90: 20 69 66 28 20 63 74 78 2e 69 73 45 72 72 6f 72   if( ctx.isError
afa0: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 53   ){.    sqlite3S
afb0: 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72  etString(&p->zEr
afc0: 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 22 2c 20  rMsg, db, "%s", 
afd0: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65  sqlite3_value_te
afe0: 78 74 28 26 63 74 78 2e 73 29 29 3b 0a 20 20 20  xt(&ctx.s));.   
aff0: 20 72 63 20 3d 20 63 74 78 2e 69 73 45 72 72 6f   rc = ctx.isErro
b000: 72 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 43 6f 70  r;.  }..  /* Cop
b010: 79 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20  y the result of 
b020: 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 69 6e 74  the function int
b030: 6f 20 72 65 67 69 73 74 65 72 20 50 33 20 2a 2f  o register P3 */
b040: 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68  .  sqlite3VdbeCh
b050: 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 26 63 74  angeEncoding(&ct
b060: 78 2e 73 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a  x.s, encoding);.
b070: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
b080: 4d 6f 76 65 28 70 4f 75 74 2c 20 26 63 74 78 2e  Move(pOut, &ctx.
b090: 73 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65  s);.  if( sqlite
b0a0: 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28 70  3VdbeMemTooBig(p
b0b0: 4f 75 74 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f  Out) ){.    goto
b0c0: 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20   too_big;.  }.  
b0d0: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
b0e0: 4f 70 2d 3e 70 33 2c 20 70 4f 75 74 29 3b 0a 20  Op->p3, pOut);. 
b0f0: 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42   UPDATE_MAX_BLOB
b100: 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72  SIZE(pOut);.  br
b110: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
b120: 65 3a 20 42 69 74 41 6e 64 20 50 31 20 50 32 20  e: BitAnd P1 P2 
b130: 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 61 6b  P3 * *.**.** Tak
b140: 65 20 74 68 65 20 62 69 74 2d 77 69 73 65 20 41  e the bit-wise A
b150: 4e 44 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73  ND of the values
b160: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
b170: 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20 73 74  and P2 and.** st
b180: 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69  ore the result i
b190: 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  n register P3..*
b1a0: 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75  * If either inpu
b1b0: 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72  t is NULL, the r
b1c0: 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a  esult is NULL..*
b1d0: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 69 74  /./* Opcode: Bit
b1e0: 4f 72 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  Or P1 P2 P3 * *.
b1f0: 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20 62  **.** Take the b
b200: 69 74 2d 77 69 73 65 20 4f 52 20 6f 66 20 74 68  it-wise OR of th
b210: 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69  e values in regi
b220: 73 74 65 72 20 50 31 20 61 6e 64 20 50 32 20 61  ster P1 and P2 a
b230: 6e 64 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65 20  nd.** store the 
b240: 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74  result in regist
b250: 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74  er P3..** If eit
b260: 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c  her input is NUL
b270: 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  L, the result is
b280: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63   NULL..*/./* Opc
b290: 6f 64 65 3a 20 53 68 69 66 74 4c 65 66 74 20 50  ode: ShiftLeft P
b2a0: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
b2b0: 2a 20 53 68 69 66 74 20 74 68 65 20 69 6e 74 65  * Shift the inte
b2c0: 67 65 72 20 76 61 6c 75 65 20 69 6e 20 72 65 67  ger value in reg
b2d0: 69 73 74 65 72 20 50 32 20 74 6f 20 74 68 65 20  ister P2 to the 
b2e0: 6c 65 66 74 20 62 79 20 74 68 65 0a 2a 2a 20 6e  left by the.** n
b2f0: 75 6d 62 65 72 20 6f 66 20 62 69 74 73 20 73 70  umber of bits sp
b300: 65 63 69 66 69 65 64 20 62 79 20 74 68 65 20 69  ecified by the i
b310: 6e 74 65 67 65 72 20 69 6e 20 72 65 67 69 73 74  nteger in regist
b320: 65 72 20 50 31 2e 0a 2a 2a 20 53 74 6f 72 65 20  er P1..** Store 
b330: 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65  the result in re
b340: 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66  gister P3..** If
b350: 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73   either input is
b360: 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c   NULL, the resul
b370: 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a  t is NULL..*/./*
b380: 20 4f 70 63 6f 64 65 3a 20 53 68 69 66 74 52 69   Opcode: ShiftRi
b390: 67 68 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a  ght P1 P2 P3 * *
b3a0: 0a 2a 2a 0a 2a 2a 20 53 68 69 66 74 20 74 68 65  .**.** Shift the
b3b0: 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69   integer value i
b3c0: 6e 20 72 65 67 69 73 74 65 72 20 50 32 20 74 6f  n register P2 to
b3d0: 20 74 68 65 20 72 69 67 68 74 20 62 79 20 74 68   the right by th
b3e0: 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 62  e.** number of b
b3f0: 69 74 73 20 73 70 65 63 69 66 69 65 64 20 62 79  its specified by
b400: 20 74 68 65 20 69 6e 74 65 67 65 72 20 69 6e 20   the integer in 
b410: 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 20  register P1..** 
b420: 53 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74  Store the result
b430: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e   in register P3.
b440: 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e  .** If either in
b450: 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65  put is NULL, the
b460: 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e   result is NULL.
b470: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 69 74 41  .*/.case OP_BitA
b480: 6e 64 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  nd:             
b490: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
b4a0: 4b 5f 42 49 54 41 4e 44 2c 20 69 6e 31 2c 20 69  K_BITAND, in1, i
b4b0: 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65  n2, out3 */.case
b4c0: 20 4f 50 5f 42 69 74 4f 72 3a 20 20 20 20 20 20   OP_BitOr:      
b4d0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
b4e0: 61 6d 65 20 61 73 20 54 4b 5f 42 49 54 4f 52 2c  ame as TK_BITOR,
b4f0: 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20   in1, in2, out3 
b500: 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 68 69 66 74  */.case OP_Shift
b510: 4c 65 66 74 3a 20 20 20 20 20 20 20 20 20 20 20  Left:           
b520: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
b530: 5f 4c 53 48 49 46 54 2c 20 69 6e 31 2c 20 69 6e  _LSHIFT, in1, in
b540: 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20  2, out3 */.case 
b550: 4f 50 5f 53 68 69 66 74 52 69 67 68 74 3a 20 7b  OP_ShiftRight: {
b560: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
b570: 6d 65 20 61 73 20 54 4b 5f 52 53 48 49 46 54 2c  me as TK_RSHIFT,
b580: 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20   in1, in2, out3 
b590: 2a 2f 0a 20 20 69 36 34 20 69 41 3b 0a 20 20 75  */.  i64 iA;.  u
b5a0: 36 34 20 75 41 3b 0a 20 20 69 36 34 20 69 42 3b  64 uA;.  i64 iB;
b5b0: 0a 20 20 75 38 20 6f 70 3b 0a 0a 20 20 70 49 6e  .  u8 op;..  pIn
b5c0: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
b5d0: 31 5d 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d  1];.  pIn2 = &aM
b5e0: 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70  em[pOp->p2];.  p
b5f0: 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
b600: 3e 70 33 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e  >p3];.  if( (pIn
b610: 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49 6e 32 2d  1->flags | pIn2-
b620: 3e 66 6c 61 67 73 29 20 26 20 4d 45 4d 5f 4e 75  >flags) & MEM_Nu
b630: 6c 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  ll ){.    sqlite
b640: 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28  3VdbeMemSetNull(
b650: 70 4f 75 74 29 3b 0a 20 20 20 20 62 72 65 61 6b  pOut);.    break
b660: 3b 0a 20 20 7d 0a 20 20 69 41 20 3d 20 73 71 6c  ;.  }.  iA = sql
b670: 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65  ite3VdbeIntValue
b680: 28 70 49 6e 32 29 3b 0a 20 20 69 42 20 3d 20 73  (pIn2);.  iB = s
b690: 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c  qlite3VdbeIntVal
b6a0: 75 65 28 70 49 6e 31 29 3b 0a 20 20 6f 70 20 3d  ue(pIn1);.  op =
b6b0: 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a 20 20   pOp->opcode;.  
b6c0: 69 66 28 20 6f 70 3d 3d 4f 50 5f 42 69 74 41 6e  if( op==OP_BitAn
b6d0: 64 20 29 7b 0a 20 20 20 20 69 41 20 26 3d 20 69  d ){.    iA &= i
b6e0: 42 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 6f  B;.  }else if( o
b6f0: 70 3d 3d 4f 50 5f 42 69 74 4f 72 20 29 7b 0a 20  p==OP_BitOr ){. 
b700: 20 20 20 69 41 20 7c 3d 20 69 42 3b 0a 20 20 7d     iA |= iB;.  }
b710: 65 6c 73 65 20 69 66 28 20 69 42 21 3d 30 20 29  else if( iB!=0 )
b720: 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6f 70  {.    assert( op
b730: 3d 3d 4f 50 5f 53 68 69 66 74 52 69 67 68 74 20  ==OP_ShiftRight 
b740: 7c 7c 20 6f 70 3d 3d 4f 50 5f 53 68 69 66 74 4c  || op==OP_ShiftL
b750: 65 66 74 20 29 3b 0a 0a 20 20 20 20 2f 2a 20 49  eft );..    /* I
b760: 66 20 73 68 69 66 74 69 6e 67 20 62 79 20 61 20  f shifting by a 
b770: 6e 65 67 61 74 69 76 65 20 61 6d 6f 75 6e 74 2c  negative amount,
b780: 20 73 68 69 66 74 20 69 6e 20 74 68 65 20 6f 74   shift in the ot
b790: 68 65 72 20 64 69 72 65 63 74 69 6f 6e 20 2a 2f  her direction */
b7a0: 0a 20 20 20 20 69 66 28 20 69 42 3c 30 20 29 7b  .    if( iB<0 ){
b7b0: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 4f  .      assert( O
b7c0: 50 5f 53 68 69 66 74 52 69 67 68 74 3d 3d 4f 50  P_ShiftRight==OP
b7d0: 5f 53 68 69 66 74 4c 65 66 74 2b 31 20 29 3b 0a  _ShiftLeft+1 );.
b7e0: 20 20 20 20 20 20 6f 70 20 3d 20 32 2a 4f 50 5f        op = 2*OP_
b7f0: 53 68 69 66 74 4c 65 66 74 20 2b 20 31 20 2d 20  ShiftLeft + 1 - 
b800: 6f 70 3b 0a 20 20 20 20 20 20 69 42 20 3d 20 69  op;.      iB = i
b810: 42 3e 28 2d 36 34 29 20 3f 20 2d 69 42 20 3a 20  B>(-64) ? -iB : 
b820: 36 34 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69  64;.    }..    i
b830: 66 28 20 69 42 3e 3d 36 34 20 29 7b 0a 20 20 20  f( iB>=64 ){.   
b840: 20 20 20 69 41 20 3d 20 28 69 41 3e 3d 30 20 7c     iA = (iA>=0 |
b850: 7c 20 6f 70 3d 3d 4f 50 5f 53 68 69 66 74 4c 65  | op==OP_ShiftLe
b860: 66 74 29 20 3f 20 30 20 3a 20 2d 31 3b 0a 20 20  ft) ? 0 : -1;.  
b870: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 6d    }else{.      m
b880: 65 6d 63 70 79 28 26 75 41 2c 20 26 69 41 2c 20  emcpy(&uA, &iA, 
b890: 73 69 7a 65 6f 66 28 75 41 29 29 3b 0a 20 20 20  sizeof(uA));.   
b8a0: 20 20 20 69 66 28 20 6f 70 3d 3d 4f 50 5f 53 68     if( op==OP_Sh
b8b0: 69 66 74 4c 65 66 74 20 29 7b 0a 20 20 20 20 20  iftLeft ){.     
b8c0: 20 20 20 75 41 20 3c 3c 3d 20 69 42 3b 0a 20 20     uA <<= iB;.  
b8d0: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
b8e0: 20 20 20 75 41 20 3e 3e 3d 20 69 42 3b 0a 20 20     uA >>= iB;.  
b8f0: 20 20 20 20 20 20 2f 2a 20 53 69 67 6e 2d 65 78        /* Sign-ex
b900: 74 65 6e 64 20 6f 6e 20 61 20 72 69 67 68 74 20  tend on a right 
b910: 73 68 69 66 74 20 6f 66 20 61 20 6e 65 67 61 74  shift of a negat
b920: 69 76 65 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20  ive number */.  
b930: 20 20 20 20 20 20 69 66 28 20 69 41 3c 30 20 29        if( iA<0 )
b940: 20 75 41 20 7c 3d 20 28 28 28 28 75 36 34 29 30   uA |= ((((u64)0
b950: 78 66 66 66 66 66 66 66 66 29 3c 3c 33 32 29 7c  xffffffff)<<32)|
b960: 30 78 66 66 66 66 66 66 66 66 29 20 3c 3c 20 28  0xffffffff) << (
b970: 36 34 2d 69 42 29 3b 0a 20 20 20 20 20 20 7d 0a  64-iB);.      }.
b980: 20 20 20 20 20 20 6d 65 6d 63 70 79 28 26 69 41        memcpy(&iA
b990: 2c 20 26 75 41 2c 20 73 69 7a 65 6f 66 28 69 41  , &uA, sizeof(iA
b9a0: 29 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  ));.    }.  }.  
b9b0: 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 41 3b 0a  pOut->u.i = iA;.
b9c0: 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
b9d0: 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b  (pOut, MEM_Int);
b9e0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
b9f0: 4f 70 63 6f 64 65 3a 20 41 64 64 49 6d 6d 20 20  Opcode: AddImm  
ba00: 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 0a  P1 P2 * * *.** .
ba10: 2a 2a 20 41 64 64 20 74 68 65 20 63 6f 6e 73 74  ** Add the const
ba20: 61 6e 74 20 50 32 20 74 6f 20 74 68 65 20 76 61  ant P2 to the va
ba30: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
ba40: 50 31 2e 0a 2a 2a 20 54 68 65 20 72 65 73 75 6c  P1..** The resul
ba50: 74 20 69 73 20 61 6c 77 61 79 73 20 61 6e 20 69  t is always an i
ba60: 6e 74 65 67 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 6f  nteger..**.** To
ba70: 20 66 6f 72 63 65 20 61 6e 79 20 72 65 67 69 73   force any regis
ba80: 74 65 72 20 74 6f 20 62 65 20 61 6e 20 69 6e 74  ter to be an int
ba90: 65 67 65 72 2c 20 6a 75 73 74 20 61 64 64 20 30  eger, just add 0
baa0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 64 64  ..*/.case OP_Add
bab0: 49 6d 6d 3a 20 7b 20 20 20 20 20 20 20 20 20 20  Imm: {          
bac0: 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 70 49    /* in1 */.  pI
bad0: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
bae0: 70 31 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54  p1];.  memAboutT
baf0: 6f 43 68 61 6e 67 65 28 70 2c 20 70 49 6e 31 29  oChange(p, pIn1)
bb00: 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
bb10: 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e  emIntegerify(pIn
bb20: 31 29 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 20  1);.  pIn1->u.i 
bb30: 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 62 72  += pOp->p2;.  br
bb40: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
bb50: 65 3a 20 4d 75 73 74 42 65 49 6e 74 20 50 31 20  e: MustBeInt P1 
bb60: 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 0a 2a 2a 20  P2 * * *.** .** 
bb70: 46 6f 72 63 65 20 74 68 65 20 76 61 6c 75 65 20  Force the value 
bb80: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 74  in register P1 t
bb90: 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72 2e  o be an integer.
bba0: 20 20 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a    If the value.*
bbb0: 2a 20 69 6e 20 50 31 20 69 73 20 6e 6f 74 20 61  * in P1 is not a
bbc0: 6e 20 69 6e 74 65 67 65 72 20 61 6e 64 20 63 61  n integer and ca
bbd0: 6e 6e 6f 74 20 62 65 20 63 6f 6e 76 65 72 74 65  nnot be converte
bbe0: 64 20 69 6e 74 6f 20 61 6e 20 69 6e 74 65 67 65  d into an intege
bbf0: 72 0a 2a 2a 20 77 69 74 68 6f 75 74 20 64 61 74  r.** without dat
bc00: 61 20 6c 6f 73 73 2c 20 74 68 65 6e 20 6a 75 6d  a loss, then jum
bc10: 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f  p immediately to
bc20: 20 50 32 2c 20 6f 72 20 69 66 20 50 32 3d 3d 30   P2, or if P2==0
bc30: 0a 2a 2a 20 72 61 69 73 65 20 61 6e 20 53 51 4c  .** raise an SQL
bc40: 49 54 45 5f 4d 49 53 4d 41 54 43 48 20 65 78 63  ITE_MISMATCH exc
bc50: 65 70 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20  eption..*/.case 
bc60: 4f 50 5f 4d 75 73 74 42 65 49 6e 74 3a 20 7b 20  OP_MustBeInt: { 
bc70: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75             /* ju
bc80: 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e  mp, in1 */.  pIn
bc90: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
bca0: 31 5d 3b 0a 20 20 61 70 70 6c 79 41 66 66 69 6e  1];.  applyAffin
bcb0: 69 74 79 28 70 49 6e 31 2c 20 53 51 4c 49 54 45  ity(pIn1, SQLITE
bcc0: 5f 41 46 46 5f 4e 55 4d 45 52 49 43 2c 20 65 6e  _AFF_NUMERIC, en
bcd0: 63 6f 64 69 6e 67 29 3b 0a 20 20 69 66 28 20 28  coding);.  if( (
bce0: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
bcf0: 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20  M_Int)==0 ){.   
bd00: 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 30 20   if( pOp->p2==0 
bd10: 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51  ){.      rc = SQ
bd20: 4c 49 54 45 5f 4d 49 53 4d 41 54 43 48 3b 0a 20  LITE_MISMATCH;. 
bd30: 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
bd40: 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
bd50: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 70    }else{.      p
bd60: 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
bd70: 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a  .    }.  }else{.
bd80: 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c      MemSetTypeFl
bd90: 61 67 28 70 49 6e 31 2c 20 4d 45 4d 5f 49 6e 74  ag(pIn1, MEM_Int
bda0: 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
bdb0: 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  }..#ifndef SQLIT
bdc0: 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f  E_OMIT_FLOATING_
bdd0: 50 4f 49 4e 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a  POINT./* Opcode:
bde0: 20 52 65 61 6c 41 66 66 69 6e 69 74 79 20 50 31   RealAffinity P1
bdf0: 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49   * * * *.**.** I
be00: 66 20 72 65 67 69 73 74 65 72 20 50 31 20 68 6f  f register P1 ho
be10: 6c 64 73 20 61 6e 20 69 6e 74 65 67 65 72 20 63  lds an integer c
be20: 6f 6e 76 65 72 74 20 69 74 20 74 6f 20 61 20 72  onvert it to a r
be30: 65 61 6c 20 76 61 6c 75 65 2e 0a 2a 2a 0a 2a 2a  eal value..**.**
be40: 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20   This opcode is 
be50: 75 73 65 64 20 77 68 65 6e 20 65 78 74 72 61 63  used when extrac
be60: 74 69 6e 67 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  ting information
be70: 20 66 72 6f 6d 20 61 20 63 6f 6c 75 6d 6e 20 74   from a column t
be80: 68 61 74 0a 2a 2a 20 68 61 73 20 52 45 41 4c 20  hat.** has REAL 
be90: 61 66 66 69 6e 69 74 79 2e 20 20 53 75 63 68 20  affinity.  Such 
bea0: 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 73 20 6d 61  column values ma
beb0: 79 20 73 74 69 6c 6c 20 62 65 20 73 74 6f 72 65  y still be store
bec0: 64 20 61 73 0a 2a 2a 20 69 6e 74 65 67 65 72 73  d as.** integers
bed0: 2c 20 66 6f 72 20 73 70 61 63 65 20 65 66 66 69  , for space effi
bee0: 63 69 65 6e 63 79 2c 20 62 75 74 20 61 66 74 65  ciency, but afte
bef0: 72 20 65 78 74 72 61 63 74 69 6f 6e 20 77 65 20  r extraction we 
bf00: 77 61 6e 74 20 74 68 65 6d 0a 2a 2a 20 74 6f 20  want them.** to 
bf10: 68 61 76 65 20 6f 6e 6c 79 20 61 20 72 65 61 6c  have only a real
bf20: 20 76 61 6c 75 65 2e 0a 2a 2f 0a 63 61 73 65 20   value..*/.case 
bf30: 4f 50 5f 52 65 61 6c 41 66 66 69 6e 69 74 79 3a  OP_RealAffinity:
bf40: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
bf50: 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20      /* in1 */.  
bf60: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
bf70: 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70 49 6e  ->p1];.  if( pIn
bf80: 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  1->flags & MEM_I
bf90: 6e 74 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  nt ){.    sqlite
bfa0: 33 56 64 62 65 4d 65 6d 52 65 61 6c 69 66 79 28  3VdbeMemRealify(
bfb0: 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65  pIn1);.  }.  bre
bfc0: 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69  ak;.}.#endif..#i
bfd0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
bfe0: 54 5f 43 41 53 54 0a 2f 2a 20 4f 70 63 6f 64 65  T_CAST./* Opcode
bff0: 3a 20 54 6f 54 65 78 74 20 50 31 20 2a 20 2a 20  : ToText P1 * * 
c000: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20  * *.**.** Force 
c010: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
c020: 69 73 74 65 72 20 50 31 20 74 6f 20 62 65 20 74  ister P1 to be t
c030: 65 78 74 2e 0a 2a 2a 20 49 66 20 74 68 65 20 76  ext..** If the v
c040: 61 6c 75 65 20 69 73 20 6e 75 6d 65 72 69 63 2c  alue is numeric,
c050: 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f 20 61   convert it to a
c060: 20 73 74 72 69 6e 67 20 75 73 69 6e 67 20 74 68   string using th
c070: 65 0a 2a 2a 20 65 71 75 69 76 61 6c 65 6e 74 20  e.** equivalent 
c080: 6f 66 20 70 72 69 6e 74 66 28 29 2e 20 20 42 6c  of printf().  Bl
c090: 6f 62 20 76 61 6c 75 65 73 20 61 72 65 20 75 6e  ob values are un
c0a0: 63 68 61 6e 67 65 64 20 61 6e 64 0a 2a 2a 20 61  changed and.** a
c0b0: 72 65 20 61 66 74 65 72 77 61 72 64 73 20 73 69  re afterwards si
c0c0: 6d 70 6c 79 20 69 6e 74 65 72 70 72 65 74 65 64  mply interpreted
c0d0: 20 61 73 20 74 65 78 74 2e 0a 2a 2a 0a 2a 2a 20   as text..**.** 
c0e0: 41 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69 73 20  A NULL value is 
c0f0: 6e 6f 74 20 63 68 61 6e 67 65 64 20 62 79 20 74  not changed by t
c100: 68 69 73 20 72 6f 75 74 69 6e 65 2e 20 20 49 74  his routine.  It
c110: 20 72 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a   remains NULL..*
c120: 2f 0a 63 61 73 65 20 4f 50 5f 54 6f 54 65 78 74  /.case OP_ToText
c130: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
c140: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
c150: 54 4b 5f 54 4f 5f 54 45 58 54 2c 20 69 6e 31 20  TK_TO_TEXT, in1 
c160: 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
c170: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 6d 65  m[pOp->p1];.  me
c180: 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
c190: 2c 20 70 49 6e 31 29 3b 0a 20 20 69 66 28 20 70  , pIn1);.  if( p
c1a0: 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
c1b0: 5f 4e 75 6c 6c 20 29 20 62 72 65 61 6b 3b 0a 20  _Null ) break;. 
c1c0: 20 61 73 73 65 72 74 28 20 4d 45 4d 5f 53 74 72   assert( MEM_Str
c1d0: 3d 3d 28 4d 45 4d 5f 42 6c 6f 62 3e 3e 33 29 20  ==(MEM_Blob>>3) 
c1e0: 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73  );.  pIn1->flags
c1f0: 20 7c 3d 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73   |= (pIn1->flags
c200: 26 4d 45 4d 5f 42 6c 6f 62 29 3e 3e 33 3b 0a 20  &MEM_Blob)>>3;. 
c210: 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70   applyAffinity(p
c220: 49 6e 31 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f  In1, SQLITE_AFF_
c230: 54 45 58 54 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  TEXT, encoding);
c240: 0a 20 20 72 63 20 3d 20 45 78 70 61 6e 64 42 6c  .  rc = ExpandBl
c250: 6f 62 28 70 49 6e 31 29 3b 0a 20 20 61 73 73 65  ob(pIn1);.  asse
c260: 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20  rt( pIn1->flags 
c270: 26 20 4d 45 4d 5f 53 74 72 20 7c 7c 20 64 62 2d  & MEM_Str || db-
c280: 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 3b  >mallocFailed );
c290: 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  .  pIn1->flags &
c2a0: 3d 20 7e 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f  = ~(MEM_Int|MEM_
c2b0: 52 65 61 6c 7c 4d 45 4d 5f 42 6c 6f 62 7c 4d 45  Real|MEM_Blob|ME
c2c0: 4d 5f 5a 65 72 6f 29 3b 0a 20 20 55 50 44 41 54  M_Zero);.  UPDAT
c2d0: 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70  E_MAX_BLOBSIZE(p
c2e0: 49 6e 31 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  In1);.  break;.}
c2f0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 6f 42  ../* Opcode: ToB
c300: 6c 6f 62 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a  lob P1 * * * *.*
c310: 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65 20 76  *.** Force the v
c320: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
c330: 20 50 31 20 74 6f 20 62 65 20 61 20 42 4c 4f 42   P1 to be a BLOB
c340: 2e 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75  ..** If the valu
c350: 65 20 69 73 20 6e 75 6d 65 72 69 63 2c 20 63 6f  e is numeric, co
c360: 6e 76 65 72 74 20 69 74 20 74 6f 20 61 20 73 74  nvert it to a st
c370: 72 69 6e 67 20 66 69 72 73 74 2e 0a 2a 2a 20 53  ring first..** S
c380: 74 72 69 6e 67 73 20 61 72 65 20 73 69 6d 70 6c  trings are simpl
c390: 79 20 72 65 69 6e 74 65 72 70 72 65 74 65 64 20  y reinterpreted 
c3a0: 61 73 20 62 6c 6f 62 73 20 77 69 74 68 20 6e 6f  as blobs with no
c3b0: 20 63 68 61 6e 67 65 0a 2a 2a 20 74 6f 20 74 68   change.** to th
c3c0: 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 64 61 74  e underlying dat
c3d0: 61 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20  a..**.** A NULL 
c3e0: 76 61 6c 75 65 20 69 73 20 6e 6f 74 20 63 68 61  value is not cha
c3f0: 6e 67 65 64 20 62 79 20 74 68 69 73 20 72 6f 75  nged by this rou
c400: 74 69 6e 65 2e 20 20 49 74 20 72 65 6d 61 69 6e  tine.  It remain
c410: 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20  s NULL..*/.case 
c420: 4f 50 5f 54 6f 42 6c 6f 62 3a 20 7b 20 20 20 20  OP_ToBlob: {    
c430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
c440: 20 73 61 6d 65 20 61 73 20 54 4b 5f 54 4f 5f 42   same as TK_TO_B
c450: 4c 4f 42 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49  LOB, in1 */.  pI
c460: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
c470: 70 31 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d  p1];.  if( pIn1-
c480: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
c490: 6c 20 29 20 62 72 65 61 6b 3b 0a 20 20 69 66 28  l ) break;.  if(
c4a0: 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
c4b0: 4d 45 4d 5f 42 6c 6f 62 29 3d 3d 30 20 29 7b 0a  MEM_Blob)==0 ){.
c4c0: 20 20 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74      applyAffinit
c4d0: 79 28 70 49 6e 31 2c 20 53 51 4c 49 54 45 5f 41  y(pIn1, SQLITE_A
c4e0: 46 46 5f 54 45 58 54 2c 20 65 6e 63 6f 64 69 6e  FF_TEXT, encodin
c4f0: 67 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  g);.    assert( 
c500: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
c510: 4d 5f 53 74 72 20 7c 7c 20 64 62 2d 3e 6d 61 6c  M_Str || db->mal
c520: 6c 6f 63 46 61 69 6c 65 64 20 29 3b 0a 20 20 20  locFailed );.   
c530: 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
c540: 70 49 6e 31 2c 20 4d 45 4d 5f 42 6c 6f 62 29 3b  pIn1, MEM_Blob);
c550: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 49  .  }else{.    pI
c560: 6e 31 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 28 4d  n1->flags &= ~(M
c570: 45 4d 5f 54 79 70 65 4d 61 73 6b 26 7e 4d 45 4d  EM_TypeMask&~MEM
c580: 5f 42 6c 6f 62 29 3b 0a 20 20 7d 0a 20 20 55 50  _Blob);.  }.  UP
c590: 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
c5a0: 45 28 70 49 6e 31 29 3b 0a 20 20 62 72 65 61 6b  E(pIn1);.  break
c5b0: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
c5c0: 54 6f 4e 75 6d 65 72 69 63 20 50 31 20 2a 20 2a  ToNumeric P1 * *
c5d0: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65   * *.**.** Force
c5e0: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
c5f0: 67 69 73 74 65 72 20 50 31 20 74 6f 20 62 65 20  gister P1 to be 
c600: 6e 75 6d 65 72 69 63 20 28 65 69 74 68 65 72 20  numeric (either 
c610: 61 6e 0a 2a 2a 20 69 6e 74 65 67 65 72 20 6f 72  an.** integer or
c620: 20 61 20 66 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e   a floating-poin
c630: 74 20 6e 75 6d 62 65 72 2e 29 0a 2a 2a 20 49 66  t number.).** If
c640: 20 74 68 65 20 76 61 6c 75 65 20 69 73 20 74 65   the value is te
c650: 78 74 20 6f 72 20 62 6c 6f 62 2c 20 74 72 79 20  xt or blob, try 
c660: 74 6f 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f  to convert it to
c670: 20 61 6e 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a   an using the.**
c680: 20 65 71 75 69 76 61 6c 65 6e 74 20 6f 66 20 61   equivalent of a
c690: 74 6f 69 28 29 20 6f 72 20 61 74 6f 66 28 29 20  toi() or atof() 
c6a0: 61 6e 64 20 73 74 6f 72 65 20 30 20 69 66 20 6e  and store 0 if n
c6b0: 6f 20 73 75 63 68 20 63 6f 6e 76 65 72 73 69 6f  o such conversio
c6c0: 6e 20 0a 2a 2a 20 69 73 20 70 6f 73 73 69 62 6c  n .** is possibl
c6d0: 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20  e..**.** A NULL 
c6e0: 76 61 6c 75 65 20 69 73 20 6e 6f 74 20 63 68 61  value is not cha
c6f0: 6e 67 65 64 20 62 79 20 74 68 69 73 20 72 6f 75  nged by this rou
c700: 74 69 6e 65 2e 20 20 49 74 20 72 65 6d 61 69 6e  tine.  It remain
c710: 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20  s NULL..*/.case 
c720: 4f 50 5f 54 6f 4e 75 6d 65 72 69 63 3a 20 7b 20  OP_ToNumeric: { 
c730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c740: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 54   /* same as TK_T
c750: 4f 5f 4e 55 4d 45 52 49 43 2c 20 69 6e 31 20 2a  O_NUMERIC, in1 *
c760: 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
c770: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 73 71 6c  [pOp->p1];.  sql
c780: 69 74 65 33 56 64 62 65 4d 65 6d 4e 75 6d 65 72  ite3VdbeMemNumer
c790: 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 62 72 65  ify(pIn1);.  bre
c7a0: 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ak;.}.#endif /* 
c7b0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 41 53 54  SQLITE_OMIT_CAST
c7c0: 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20   */../* Opcode: 
c7d0: 54 6f 49 6e 74 20 50 31 20 2a 20 2a 20 2a 20 2a  ToInt P1 * * * *
c7e0: 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65  .**.** Force the
c7f0: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
c800: 65 72 20 50 31 20 74 6f 20 62 65 20 61 6e 20 69  er P1 to be an i
c810: 6e 74 65 67 65 72 2e 20 20 49 66 0a 2a 2a 20 54  nteger.  If.** T
c820: 68 65 20 76 61 6c 75 65 20 69 73 20 63 75 72 72  he value is curr
c830: 65 6e 74 6c 79 20 61 20 72 65 61 6c 20 6e 75 6d  ently a real num
c840: 62 65 72 2c 20 64 72 6f 70 20 69 74 73 20 66 72  ber, drop its fr
c850: 61 63 74 69 6f 6e 61 6c 20 70 61 72 74 2e 0a 2a  actional part..*
c860: 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 69  * If the value i
c870: 73 20 74 65 78 74 20 6f 72 20 62 6c 6f 62 2c 20  s text or blob, 
c880: 74 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20 69  try to convert i
c890: 74 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20  t to an integer 
c8a0: 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 65 71 75  using the.** equ
c8b0: 69 76 61 6c 65 6e 74 20 6f 66 20 61 74 6f 69 28  ivalent of atoi(
c8c0: 29 20 61 6e 64 20 73 74 6f 72 65 20 30 20 69 66  ) and store 0 if
c8d0: 20 6e 6f 20 73 75 63 68 20 63 6f 6e 76 65 72 73   no such convers
c8e0: 69 6f 6e 20 69 73 20 70 6f 73 73 69 62 6c 65 2e  ion is possible.
c8f0: 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76 61  .**.** A NULL va
c900: 6c 75 65 20 69 73 20 6e 6f 74 20 63 68 61 6e 67  lue is not chang
c910: 65 64 20 62 79 20 74 68 69 73 20 72 6f 75 74 69  ed by this routi
c920: 6e 65 2e 20 20 49 74 20 72 65 6d 61 69 6e 73 20  ne.  It remains 
c930: 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  NULL..*/.case OP
c940: 5f 54 6f 49 6e 74 3a 20 7b 20 20 20 20 20 20 20  _ToInt: {       
c950: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
c960: 6d 65 20 61 73 20 54 4b 5f 54 4f 5f 49 4e 54 2c  me as TK_TO_INT,
c970: 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d   in1 */.  pIn1 =
c980: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
c990: 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c  .  if( (pIn1->fl
c9a0: 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d  ags & MEM_Null)=
c9b0: 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  =0 ){.    sqlite
c9c0: 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69  3VdbeMemIntegeri
c9d0: 66 79 28 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20  fy(pIn1);.  }.  
c9e0: 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 20 21 64  break;.}..#if !d
c9f0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
ca00: 49 54 5f 43 41 53 54 29 20 26 26 20 21 64 65 66  IT_CAST) && !def
ca10: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
ca20: 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 29  _FLOATING_POINT)
ca30: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 6f 52 65  ./* Opcode: ToRe
ca40: 61 6c 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a  al P1 * * * *.**
ca50: 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65 20 76 61  .** Force the va
ca60: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
ca70: 50 31 20 74 6f 20 62 65 20 61 20 66 6c 6f 61 74  P1 to be a float
ca80: 69 6e 67 20 70 6f 69 6e 74 20 6e 75 6d 62 65 72  ing point number
ca90: 2e 0a 2a 2a 20 49 66 20 54 68 65 20 76 61 6c 75  ..** If The valu
caa0: 65 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 61  e is currently a
cab0: 6e 20 69 6e 74 65 67 65 72 2c 20 63 6f 6e 76 65  n integer, conve
cac0: 72 74 20 69 74 2e 0a 2a 2a 20 49 66 20 74 68 65  rt it..** If the
cad0: 20 76 61 6c 75 65 20 69 73 20 74 65 78 74 20 6f   value is text o
cae0: 72 20 62 6c 6f 62 2c 20 74 72 79 20 74 6f 20 63  r blob, try to c
caf0: 6f 6e 76 65 72 74 20 69 74 20 74 6f 20 61 6e 20  onvert it to an 
cb00: 69 6e 74 65 67 65 72 20 75 73 69 6e 67 20 74 68  integer using th
cb10: 65 0a 2a 2a 20 65 71 75 69 76 61 6c 65 6e 74 20  e.** equivalent 
cb20: 6f 66 20 61 74 6f 69 28 29 20 61 6e 64 20 73 74  of atoi() and st
cb30: 6f 72 65 20 30 2e 30 20 69 66 20 6e 6f 20 73 75  ore 0.0 if no su
cb40: 63 68 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69 73  ch conversion is
cb50: 20 70 6f 73 73 69 62 6c 65 2e 0a 2a 2a 0a 2a 2a   possible..**.**
cb60: 20 41 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69 73   A NULL value is
cb70: 20 6e 6f 74 20 63 68 61 6e 67 65 64 20 62 79 20   not changed by 
cb80: 74 68 69 73 20 72 6f 75 74 69 6e 65 2e 20 20 49  this routine.  I
cb90: 74 20 72 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a  t remains NULL..
cba0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 6f 52 65 61  */.case OP_ToRea
cbb0: 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  l: {            
cbc0: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
cbd0: 20 54 4b 5f 54 4f 5f 52 45 41 4c 2c 20 69 6e 31   TK_TO_REAL, in1
cbe0: 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   */.  pIn1 = &aM
cbf0: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 6d  em[pOp->p1];.  m
cc00: 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
cc10: 70 2c 20 70 49 6e 31 29 3b 0a 20 20 69 66 28 20  p, pIn1);.  if( 
cc20: 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn1->flags & M
cc30: 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20  EM_Null)==0 ){. 
cc40: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
cc50: 6d 52 65 61 6c 69 66 79 28 70 49 6e 31 29 3b 0a  mRealify(pIn1);.
cc60: 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23    }.  break;.}.#
cc70: 65 6e 64 69 66 20 2f 2a 20 21 64 65 66 69 6e 65  endif /* !define
cc80: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 41  d(SQLITE_OMIT_CA
cc90: 53 54 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  ST) && !defined(
cca0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41  SQLITE_OMIT_FLOA
ccb0: 54 49 4e 47 5f 50 4f 49 4e 54 29 20 2a 2f 0a 0a  TING_POINT) */..
ccc0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 74 20 50 31  /* Opcode: Lt P1
ccd0: 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a   P2 P3 P4 P5.**.
cce0: 2a 2a 20 43 6f 6d 70 61 72 65 20 74 68 65 20 76  ** Compare the v
ccf0: 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74 65  alues in registe
cd00: 72 20 50 31 20 61 6e 64 20 50 33 2e 20 20 49 66  r P1 and P3.  If
cd10: 20 72 65 67 28 50 33 29 3c 72 65 67 28 50 31 29   reg(P3)<reg(P1)
cd20: 20 74 68 65 6e 0a 2a 2a 20 6a 75 6d 70 20 74 6f   then.** jump to
cd30: 20 61 64 64 72 65 73 73 20 50 32 2e 20 20 0a 2a   address P2.  .*
cd40: 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53 51 4c 49  *.** If the SQLI
cd50: 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 62 69  TE_JUMPIFNULL bi
cd60: 74 20 6f 66 20 50 35 20 69 73 20 73 65 74 20 61  t of P5 is set a
cd70: 6e 64 20 65 69 74 68 65 72 20 72 65 67 28 50 31  nd either reg(P1
cd80: 29 20 6f 72 0a 2a 2a 20 72 65 67 28 50 33 29 20  ) or.** reg(P3) 
cd90: 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 61 6b  is NULL then tak
cda0: 65 20 74 68 65 20 6a 75 6d 70 2e 20 20 49 66 20  e the jump.  If 
cdb0: 74 68 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49  the SQLITE_JUMPI
cdc0: 46 4e 55 4c 4c 20 0a 2a 2a 20 62 69 74 20 69 73  FNULL .** bit is
cdd0: 20 63 6c 65 61 72 20 74 68 65 6e 20 66 61 6c 6c   clear then fall
cde0: 20 74 68 72 6f 75 67 68 20 69 66 20 65 69 74 68   through if eith
cdf0: 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55  er operand is NU
ce00: 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 53 51  LL..**.** The SQ
ce10: 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 70 6f  LITE_AFF_MASK po
ce20: 72 74 69 6f 6e 20 6f 66 20 50 35 20 6d 75 73 74  rtion of P5 must
ce30: 20 62 65 20 61 6e 20 61 66 66 69 6e 69 74 79 20   be an affinity 
ce40: 63 68 61 72 61 63 74 65 72 20 2d 0a 2a 2a 20 53  character -.** S
ce50: 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 2c 20  QLITE_AFF_TEXT, 
ce60: 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47  SQLITE_AFF_INTEG
ce70: 45 52 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68  ER, and so forth
ce80: 2e 20 41 6e 20 61 74 74 65 6d 70 74 20 69 73 20  . An attempt is 
ce90: 6d 61 64 65 20 0a 2a 2a 20 74 6f 20 63 6f 65 72  made .** to coer
cea0: 63 65 20 62 6f 74 68 20 69 6e 70 75 74 73 20 61  ce both inputs a
ceb0: 63 63 6f 72 64 69 6e 67 20 74 6f 20 74 68 69 73  ccording to this
cec0: 20 61 66 66 69 6e 69 74 79 20 62 65 66 6f 72 65   affinity before
ced0: 20 74 68 65 0a 2a 2a 20 63 6f 6d 70 61 72 69 73   the.** comparis
cee0: 6f 6e 20 69 73 20 6d 61 64 65 2e 20 49 66 20 74  on is made. If t
cef0: 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41  he SQLITE_AFF_MA
cf00: 53 4b 20 69 73 20 30 78 30 30 2c 20 74 68 65 6e  SK is 0x00, then
cf10: 20 6e 75 6d 65 72 69 63 0a 2a 2a 20 61 66 66 69   numeric.** affi
cf20: 6e 69 74 79 20 69 73 20 75 73 65 64 2e 20 4e 6f  nity is used. No
cf30: 74 65 20 74 68 61 74 20 74 68 65 20 61 66 66 69  te that the affi
cf40: 6e 69 74 79 20 63 6f 6e 76 65 72 73 69 6f 6e 73  nity conversions
cf50: 20 61 72 65 20 73 74 6f 72 65 64 0a 2a 2a 20 62   are stored.** b
cf60: 61 63 6b 20 69 6e 74 6f 20 74 68 65 20 69 6e 70  ack into the inp
cf70: 75 74 20 72 65 67 69 73 74 65 72 73 20 50 31 20  ut registers P1 
cf80: 61 6e 64 20 50 33 2e 20 20 53 6f 20 74 68 69 73  and P3.  So this
cf90: 20 6f 70 63 6f 64 65 20 63 61 6e 20 63 61 75 73   opcode can caus
cfa0: 65 0a 2a 2a 20 70 65 72 73 69 73 74 65 6e 74 20  e.** persistent 
cfb0: 63 68 61 6e 67 65 73 20 74 6f 20 72 65 67 69 73  changes to regis
cfc0: 74 65 72 73 20 50 31 20 61 6e 64 20 50 33 2e 0a  ters P1 and P3..
cfd0: 2a 2a 0a 2a 2a 20 4f 6e 63 65 20 61 6e 79 20 63  **.** Once any c
cfe0: 6f 6e 76 65 72 73 69 6f 6e 73 20 68 61 76 65 20  onversions have 
cff0: 74 61 6b 65 6e 20 70 6c 61 63 65 2c 20 61 6e 64  taken place, and
d000: 20 6e 65 69 74 68 65 72 20 76 61 6c 75 65 20 69   neither value i
d010: 73 20 4e 55 4c 4c 2c 20 0a 2a 2a 20 74 68 65 20  s NULL, .** the 
d020: 76 61 6c 75 65 73 20 61 72 65 20 63 6f 6d 70 61  values are compa
d030: 72 65 64 2e 20 49 66 20 62 6f 74 68 20 76 61 6c  red. If both val
d040: 75 65 73 20 61 72 65 20 62 6c 6f 62 73 20 74 68  ues are blobs th
d050: 65 6e 20 6d 65 6d 63 6d 70 28 29 20 69 73 0a 2a  en memcmp() is.*
d060: 2a 20 75 73 65 64 20 74 6f 20 64 65 74 65 72 6d  * used to determ
d070: 69 6e 65 20 74 68 65 20 72 65 73 75 6c 74 73 20  ine the results 
d080: 6f 66 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f  of the compariso
d090: 6e 2e 20 20 49 66 20 62 6f 74 68 20 76 61 6c 75  n.  If both valu
d0a0: 65 73 0a 2a 2a 20 61 72 65 20 74 65 78 74 2c 20  es.** are text, 
d0b0: 74 68 65 6e 20 74 68 65 20 61 70 70 72 6f 70 72  then the appropr
d0c0: 69 61 74 65 20 63 6f 6c 6c 61 74 69 6e 67 20 66  iate collating f
d0d0: 75 6e 63 74 69 6f 6e 20 73 70 65 63 69 66 69 65  unction specifie
d0e0: 64 20 69 6e 0a 2a 2a 20 50 34 20 69 73 20 20 75  d in.** P4 is  u
d0f0: 73 65 64 20 74 6f 20 64 6f 20 74 68 65 20 63 6f  sed to do the co
d100: 6d 70 61 72 69 73 6f 6e 2e 20 20 49 66 20 50 34  mparison.  If P4
d110: 20 69 73 20 6e 6f 74 20 73 70 65 63 69 66 69 65   is not specifie
d120: 64 20 74 68 65 6e 0a 2a 2a 20 6d 65 6d 63 6d 70  d then.** memcmp
d130: 28 29 20 69 73 20 75 73 65 64 20 74 6f 20 63 6f  () is used to co
d140: 6d 70 61 72 65 20 74 65 78 74 20 73 74 72 69 6e  mpare text strin
d150: 67 2e 20 20 49 66 20 62 6f 74 68 20 76 61 6c 75  g.  If both valu
d160: 65 73 20 61 72 65 0a 2a 2a 20 6e 75 6d 65 72 69  es are.** numeri
d170: 63 2c 20 74 68 65 6e 20 61 20 6e 75 6d 65 72 69  c, then a numeri
d180: 63 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20  c comparison is 
d190: 75 73 65 64 2e 20 49 66 20 74 68 65 20 74 77 6f  used. If the two
d1a0: 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72 65 20 6f   values.** are o
d1b0: 66 20 64 69 66 66 65 72 65 6e 74 20 74 79 70 65  f different type
d1c0: 73 2c 20 74 68 65 6e 20 6e 75 6d 62 65 72 73 20  s, then numbers 
d1d0: 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20 6c  are considered l
d1e0: 65 73 73 20 74 68 61 6e 0a 2a 2a 20 73 74 72 69  ess than.** stri
d1f0: 6e 67 73 20 61 6e 64 20 73 74 72 69 6e 67 73 20  ngs and strings 
d200: 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20 6c  are considered l
d210: 65 73 73 20 74 68 61 6e 20 62 6c 6f 62 73 2e 0a  ess than blobs..
d220: 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53 51 4c  **.** If the SQL
d230: 49 54 45 5f 53 54 4f 52 45 50 32 20 62 69 74 20  ITE_STOREP2 bit 
d240: 6f 66 20 50 35 20 69 73 20 73 65 74 2c 20 74 68  of P5 is set, th
d250: 65 6e 20 64 6f 20 6e 6f 74 20 6a 75 6d 70 2e 20  en do not jump. 
d260: 20 49 6e 73 74 65 61 64 2c 0a 2a 2a 20 73 74 6f   Instead,.** sto
d270: 72 65 20 61 20 62 6f 6f 6c 65 61 6e 20 72 65 73  re a boolean res
d280: 75 6c 74 20 28 65 69 74 68 65 72 20 30 2c 20 6f  ult (either 0, o
d290: 72 20 31 2c 20 6f 72 20 4e 55 4c 4c 29 20 69 6e  r 1, or NULL) in
d2a0: 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f   register P2..*/
d2b0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 20 50  ./* Opcode: Ne P
d2c0: 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
d2d0: 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a  .** This works j
d2e0: 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20  ust like the Lt 
d2f0: 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20 74 68  opcode except th
d300: 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74  at the jump is t
d310: 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 6f  aken if.** the o
d320: 70 65 72 61 6e 64 73 20 69 6e 20 72 65 67 69 73  perands in regis
d330: 74 65 72 73 20 50 31 20 61 6e 64 20 50 33 20 61  ters P1 and P3 a
d340: 72 65 20 6e 6f 74 20 65 71 75 61 6c 2e 20 20 53  re not equal.  S
d350: 65 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65  ee the Lt opcode
d360: 20 66 6f 72 0a 2a 2a 20 61 64 64 69 74 69 6f 6e   for.** addition
d370: 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a  al information..
d380: 2a 2a 0a 2a 2a 20 49 66 20 53 51 4c 49 54 45 5f  **.** If SQLITE_
d390: 4e 55 4c 4c 45 51 20 69 73 20 73 65 74 20 69 6e  NULLEQ is set in
d3a0: 20 50 35 20 74 68 65 6e 20 74 68 65 20 72 65 73   P5 then the res
d3b0: 75 6c 74 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f  ult of compariso
d3c0: 6e 20 69 73 20 61 6c 77 61 79 73 20 65 69 74 68  n is always eith
d3d0: 65 72 0a 2a 2a 20 74 72 75 65 20 6f 72 20 66 61  er.** true or fa
d3e0: 6c 73 65 20 61 6e 64 20 69 73 20 6e 65 76 65 72  lse and is never
d3f0: 20 4e 55 4c 4c 2e 20 20 49 66 20 62 6f 74 68 20   NULL.  If both 
d400: 6f 70 65 72 61 6e 64 73 20 61 72 65 20 4e 55 4c  operands are NUL
d410: 4c 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c  L then the resul
d420: 74 0a 2a 2a 20 6f 66 20 63 6f 6d 70 61 72 69 73  t.** of comparis
d430: 6f 6e 20 69 73 20 66 61 6c 73 65 2e 20 20 49 66  on is false.  If
d440: 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20   either operand 
d450: 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65  is NULL then the
d460: 20 72 65 73 75 6c 74 20 69 73 20 74 72 75 65 2e   result is true.
d470: 0a 2a 2a 20 49 66 20 6e 65 69 74 68 65 72 20 6f  .** If neither o
d480: 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20 74  perand is NULL t
d490: 68 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  he the result is
d4a0: 20 74 68 65 20 73 61 6d 65 20 61 73 20 69 74 20   the same as it 
d4b0: 77 6f 75 6c 64 20 62 65 20 69 66 0a 2a 2a 20 74  would be if.** t
d4c0: 68 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51  he SQLITE_NULLEQ
d4d0: 20 66 6c 61 67 20 77 65 72 65 20 6f 6d 69 74 74   flag were omitt
d4e0: 65 64 20 66 72 6f 6d 20 50 35 2e 0a 2a 2f 0a 2f  ed from P5..*/./
d4f0: 2a 20 4f 70 63 6f 64 65 3a 20 45 71 20 50 31 20  * Opcode: Eq P1 
d500: 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a  P2 P3 P4 P5.**.*
d510: 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73  * This works jus
d520: 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70  t like the Lt op
d530: 63 6f 64 65 20 65 78 63 65 70 74 20 74 68 61 74  code except that
d540: 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b   the jump is tak
d550: 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 6f 70 65  en if.** the ope
d560: 72 61 6e 64 73 20 69 6e 20 72 65 67 69 73 74 65  rands in registe
d570: 72 73 20 50 31 20 61 6e 64 20 50 33 20 61 72 65  rs P1 and P3 are
d580: 20 65 71 75 61 6c 2e 0a 2a 2a 20 53 65 65 20 74   equal..** See t
d590: 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72  he Lt opcode for
d5a0: 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
d5b0: 72 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49  rmation..**.** I
d5c0: 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20  f SQLITE_NULLEQ 
d5d0: 69 73 20 73 65 74 20 69 6e 20 50 35 20 74 68 65  is set in P5 the
d5e0: 6e 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20  n the result of 
d5f0: 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 61 6c  comparison is al
d600: 77 61 79 73 20 65 69 74 68 65 72 0a 2a 2a 20 74  ways either.** t
d610: 72 75 65 20 6f 72 20 66 61 6c 73 65 20 61 6e 64  rue or false and
d620: 20 69 73 20 6e 65 76 65 72 20 4e 55 4c 4c 2e 20   is never NULL. 
d630: 20 49 66 20 62 6f 74 68 20 6f 70 65 72 61 6e 64   If both operand
d640: 73 20 61 72 65 20 4e 55 4c 4c 20 74 68 65 6e 20  s are NULL then 
d650: 74 68 65 20 72 65 73 75 6c 74 0a 2a 2a 20 6f 66  the result.** of
d660: 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 74   comparison is t
d670: 72 75 65 2e 20 20 49 66 20 65 69 74 68 65 72 20  rue.  If either 
d680: 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20  operand is NULL 
d690: 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20  then the result 
d6a0: 69 73 20 66 61 6c 73 65 2e 0a 2a 2a 20 49 66 20  is false..** If 
d6b0: 6e 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20  neither operand 
d6c0: 69 73 20 4e 55 4c 4c 20 74 68 65 20 74 68 65 20  is NULL the the 
d6d0: 72 65 73 75 6c 74 20 69 73 20 74 68 65 20 73 61  result is the sa
d6e0: 6d 65 20 61 73 20 69 74 20 77 6f 75 6c 64 20 62  me as it would b
d6f0: 65 20 69 66 0a 2a 2a 20 74 68 65 20 53 51 4c 49  e if.** the SQLI
d700: 54 45 5f 4e 55 4c 4c 45 51 20 66 6c 61 67 20 77  TE_NULLEQ flag w
d710: 65 72 65 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d  ere omitted from
d720: 20 50 35 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64   P5..*/./* Opcod
d730: 65 3a 20 4c 65 20 50 31 20 50 32 20 50 33 20 50  e: Le P1 P2 P3 P
d740: 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  4 P5.**.** This 
d750: 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20  works just like 
d760: 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78  the Lt opcode ex
d770: 63 65 70 74 20 74 68 61 74 20 74 68 65 20 6a 75  cept that the ju
d780: 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a  mp is taken if.*
d790: 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  * the content of
d7a0: 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20   register P3 is 
d7b0: 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75  less than or equ
d7c0: 61 6c 20 74 6f 20 74 68 65 20 63 6f 6e 74 65 6e  al to the conten
d7d0: 74 20 6f 66 0a 2a 2a 20 72 65 67 69 73 74 65 72  t of.** register
d7e0: 20 50 31 2e 20 20 53 65 65 20 74 68 65 20 4c 74   P1.  See the Lt
d7f0: 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64 64 69   opcode for addi
d800: 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69  tional informati
d810: 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  on..*/./* Opcode
d820: 3a 20 47 74 20 50 31 20 50 32 20 50 33 20 50 34  : Gt P1 P2 P3 P4
d830: 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77   P5.**.** This w
d840: 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 74  orks just like t
d850: 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78 63  he Lt opcode exc
d860: 65 70 74 20 74 68 61 74 20 74 68 65 20 6a 75 6d  ept that the jum
d870: 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a  p is taken if.**
d880: 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
d890: 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20 67  register P3 is g
d8a0: 72 65 61 74 65 72 20 74 68 61 6e 20 74 68 65 20  reater than the 
d8b0: 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 72 65  content of.** re
d8c0: 67 69 73 74 65 72 20 50 31 2e 20 20 53 65 65 20  gister P1.  See 
d8d0: 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f  the Lt opcode fo
d8e0: 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66  r additional inf
d8f0: 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20  ormation..*/./* 
d900: 4f 70 63 6f 64 65 3a 20 47 65 20 50 31 20 50 32  Opcode: Ge P1 P2
d910: 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20   P3 P4 P5.**.** 
d920: 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20  This works just 
d930: 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f  like the Lt opco
d940: 64 65 20 65 78 63 65 70 74 20 74 68 61 74 20 74  de except that t
d950: 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e  he jump is taken
d960: 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65   if.** the conte
d970: 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  nt of register P
d980: 33 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61  3 is greater tha
d990: 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68  n or equal to th
d9a0: 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20  e content of.** 
d9b0: 72 65 67 69 73 74 65 72 20 50 31 2e 20 20 53 65  register P1.  Se
d9c0: 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20  e the Lt opcode 
d9d0: 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69  for additional i
d9e0: 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 63  nformation..*/.c
d9f0: 61 73 65 20 4f 50 5f 45 71 3a 20 20 20 20 20 20  ase OP_Eq:      
da00: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
da10: 20 61 73 20 54 4b 5f 45 51 2c 20 6a 75 6d 70 2c   as TK_EQ, jump,
da20: 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73   in1, in3 */.cas
da30: 65 20 4f 50 5f 4e 65 3a 20 20 20 20 20 20 20 20  e OP_Ne:        
da40: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
da50: 73 20 54 4b 5f 4e 45 2c 20 6a 75 6d 70 2c 20 69  s TK_NE, jump, i
da60: 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20  n1, in3 */.case 
da70: 4f 50 5f 4c 74 3a 20 20 20 20 20 20 20 20 20 20  OP_Lt:          
da80: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
da90: 54 4b 5f 4c 54 2c 20 6a 75 6d 70 2c 20 69 6e 31  TK_LT, jump, in1
daa0: 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50  , in3 */.case OP
dab0: 5f 4c 65 3a 20 20 20 20 20 20 20 20 20 20 20 20  _Le:            
dac0: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
dad0: 5f 4c 45 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20  _LE, jump, in1, 
dae0: 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 47  in3 */.case OP_G
daf0: 74 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t:              
db00: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 47   /* same as TK_G
db10: 54 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e  T, jump, in1, in
db20: 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 65 3a  3 */.case OP_Ge:
db30: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f   {             /
db40: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 47 45 2c  * same as TK_GE,
db50: 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20   jump, in1, in3 
db60: 2a 2f 0a 20 20 69 6e 74 20 72 65 73 3b 20 20 20  */.  int res;   
db70: 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75           /* Resu
db80: 6c 74 20 6f 66 20 74 68 65 20 63 6f 6d 70 61 72  lt of the compar
db90: 69 73 6f 6e 20 6f 66 20 70 49 6e 31 20 61 67 61  ison of pIn1 aga
dba0: 69 6e 73 74 20 70 49 6e 33 20 2a 2f 0a 20 20 63  inst pIn3 */.  c
dbb0: 68 61 72 20 61 66 66 69 6e 69 74 79 3b 20 20 20  har affinity;   
dbc0: 20 20 20 2f 2a 20 41 66 66 69 6e 69 74 79 20 74     /* Affinity t
dbd0: 6f 20 75 73 65 20 66 6f 72 20 63 6f 6d 70 61 72  o use for compar
dbe0: 69 73 6f 6e 20 2a 2f 0a 20 20 75 31 36 20 66 6c  ison */.  u16 fl
dbf0: 61 67 73 31 3b 20 20 20 20 20 20 20 20 20 2f 2a  ags1;         /*
dc00: 20 43 6f 70 79 20 6f 66 20 69 6e 69 74 69 61 6c   Copy of initial
dc10: 20 76 61 6c 75 65 20 6f 66 20 70 49 6e 31 2d 3e   value of pIn1->
dc20: 66 6c 61 67 73 20 2a 2f 0a 20 20 75 31 36 20 66  flags */.  u16 f
dc30: 6c 61 67 73 33 3b 20 20 20 20 20 20 20 20 20 2f  lags3;         /
dc40: 2a 20 43 6f 70 79 20 6f 66 20 69 6e 69 74 69 61  * Copy of initia
dc50: 6c 20 76 61 6c 75 65 20 6f 66 20 70 49 6e 33 2d  l value of pIn3-
dc60: 3e 66 6c 61 67 73 20 2a 2f 0a 0a 20 20 70 49 6e  >flags */..  pIn
dc70: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
dc80: 31 5d 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d  1];.  pIn3 = &aM
dc90: 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 66  em[pOp->p3];.  f
dca0: 6c 61 67 73 31 20 3d 20 70 49 6e 31 2d 3e 66 6c  lags1 = pIn1->fl
dcb0: 61 67 73 3b 0a 20 20 66 6c 61 67 73 33 20 3d 20  ags;.  flags3 = 
dcc0: 70 49 6e 33 2d 3e 66 6c 61 67 73 3b 0a 20 20 69  pIn3->flags;.  i
dcd0: 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
dce0: 7c 20 70 49 6e 33 2d 3e 66 6c 61 67 73 29 26 4d  | pIn3->flags)&M
dcf0: 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 2f  EM_Null ){.    /
dd00: 2a 20 4f 6e 65 20 6f 72 20 62 6f 74 68 20 6f 70  * One or both op
dd10: 65 72 61 6e 64 73 20 61 72 65 20 4e 55 4c 4c 20  erands are NULL 
dd20: 2a 2f 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  */.    if( pOp->
dd30: 70 35 20 26 20 53 51 4c 49 54 45 5f 4e 55 4c 4c  p5 & SQLITE_NULL
dd40: 45 51 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49  EQ ){.      /* I
dd50: 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20  f SQLITE_NULLEQ 
dd60: 69 73 20 73 65 74 20 28 77 68 69 63 68 20 77 69  is set (which wi
dd70: 6c 6c 20 6f 6e 6c 79 20 68 61 70 70 65 6e 20 69  ll only happen i
dd80: 66 20 74 68 65 20 6f 70 65 72 61 74 6f 72 20 69  f the operator i
dd90: 73 0a 20 20 20 20 20 20 2a 2a 20 4f 50 5f 45 71  s.      ** OP_Eq
dda0: 20 6f 72 20 4f 50 5f 4e 65 29 20 74 68 65 6e 20   or OP_Ne) then 
ddb0: 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 20 6f 72  take the jump or
ddc0: 20 6e 6f 74 20 64 65 70 65 6e 64 69 6e 67 20 6f   not depending o
ddd0: 6e 20 77 68 65 74 68 65 72 0a 20 20 20 20 20 20  n whether.      
dde0: 2a 2a 20 6f 72 20 6e 6f 74 20 62 6f 74 68 20 6f  ** or not both o
ddf0: 70 65 72 61 6e 64 73 20 61 72 65 20 6e 75 6c 6c  perands are null
de00: 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
de10: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70   assert( pOp->op
de20: 63 6f 64 65 3d 3d 4f 50 5f 45 71 20 7c 7c 20 70  code==OP_Eq || p
de30: 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e  Op->opcode==OP_N
de40: 65 20 29 3b 0a 20 20 20 20 20 20 72 65 73 20 3d  e );.      res =
de50: 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
de60: 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn3->flags & ME
de70: 4d 5f 4e 75 6c 6c 29 3d 3d 30 3b 0a 20 20 20 20  M_Null)==0;.    
de80: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20  }else{.      /* 
de90: 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73  SQLITE_NULLEQ is
dea0: 20 63 6c 65 61 72 20 61 6e 64 20 61 74 20 6c 65   clear and at le
deb0: 61 73 74 20 6f 6e 65 20 6f 70 65 72 61 6e 64 20  ast one operand 
dec0: 69 73 20 4e 55 4c 4c 2c 0a 20 20 20 20 20 20 2a  is NULL,.      *
ded0: 2a 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c  * then the resul
dee0: 74 20 69 73 20 61 6c 77 61 79 73 20 4e 55 4c 4c  t is always NULL
def0: 2e 0a 20 20 20 20 20 20 2a 2a 20 54 68 65 20 6a  ..      ** The j
df00: 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 20  ump is taken if 
df10: 74 68 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49  the SQLITE_JUMPI
df20: 46 4e 55 4c 4c 20 62 69 74 20 69 73 20 73 65 74  FNULL bit is set
df30: 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
df40: 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 53   if( pOp->p5 & S
df50: 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 29 7b  QLITE_STOREP2 ){
df60: 0a 20 20 20 20 20 20 20 20 70 4f 75 74 20 3d 20  .        pOut = 
df70: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
df80: 20 20 20 20 20 20 20 20 4d 65 6d 53 65 74 54 79          MemSetTy
df90: 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d  peFlag(pOut, MEM
dfa0: 5f 4e 75 6c 6c 29 3b 0a 20 20 20 20 20 20 20 20  _Null);.        
dfb0: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
dfc0: 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20  Op->p2, pOut);. 
dfd0: 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 70       }else if( p
dfe0: 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f  Op->p5 & SQLITE_
dff0: 4a 55 4d 50 49 46 4e 55 4c 4c 20 29 7b 0a 20 20  JUMPIFNULL ){.  
e000: 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e        pc = pOp->
e010: 70 32 2d 31 3b 0a 20 20 20 20 20 20 7d 0a 20 20  p2-1;.      }.  
e020: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d      break;.    }
e030: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a  .  }else{.    /*
e040: 20 4e 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64   Neither operand
e050: 20 69 73 20 4e 55 4c 4c 2e 20 20 44 6f 20 61 20   is NULL.  Do a 
e060: 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 2a 2f 0a 20  comparison. */. 
e070: 20 20 20 61 66 66 69 6e 69 74 79 20 3d 20 70 4f     affinity = pO
e080: 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 41  p->p5 & SQLITE_A
e090: 46 46 5f 4d 41 53 4b 3b 0a 20 20 20 20 69 66 28  FF_MASK;.    if(
e0a0: 20 61 66 66 69 6e 69 74 79 20 29 7b 0a 20 20 20   affinity ){.   
e0b0: 20 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79     applyAffinity
e0c0: 28 70 49 6e 31 2c 20 61 66 66 69 6e 69 74 79 2c  (pIn1, affinity,
e0d0: 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20   encoding);.    
e0e0: 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28    applyAffinity(
e0f0: 70 49 6e 33 2c 20 61 66 66 69 6e 69 74 79 2c 20  pIn3, affinity, 
e100: 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 20  encoding);.     
e110: 20 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46   if( db->mallocF
e120: 61 69 6c 65 64 20 29 20 67 6f 74 6f 20 6e 6f 5f  ailed ) goto no_
e130: 6d 65 6d 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20  mem;.    }..    
e140: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
e150: 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51 20  ype==P4_COLLSEQ 
e160: 7c 7c 20 70 4f 70 2d 3e 70 34 2e 70 43 6f 6c 6c  || pOp->p4.pColl
e170: 3d 3d 30 20 29 3b 0a 20 20 20 20 45 78 70 61 6e  ==0 );.    Expan
e180: 64 42 6c 6f 62 28 70 49 6e 31 29 3b 0a 20 20 20  dBlob(pIn1);.   
e190: 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 33   ExpandBlob(pIn3
e1a0: 29 3b 0a 20 20 20 20 72 65 73 20 3d 20 73 71 6c  );.    res = sql
e1b0: 69 74 65 33 4d 65 6d 43 6f 6d 70 61 72 65 28 70  ite3MemCompare(p
e1c0: 49 6e 33 2c 20 70 49 6e 31 2c 20 70 4f 70 2d 3e  In3, pIn1, pOp->
e1d0: 70 34 2e 70 43 6f 6c 6c 29 3b 0a 20 20 7d 0a 20  p4.pColl);.  }. 
e1e0: 20 73 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70   switch( pOp->op
e1f0: 63 6f 64 65 20 29 7b 0a 20 20 20 20 63 61 73 65  code ){.    case
e200: 20 4f 50 5f 45 71 3a 20 20 20 20 72 65 73 20 3d   OP_Eq:    res =
e210: 20 72 65 73 3d 3d 30 3b 20 20 20 20 20 62 72 65   res==0;     bre
e220: 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f  ak;.    case OP_
e230: 4e 65 3a 20 20 20 20 72 65 73 20 3d 20 72 65 73  Ne:    res = res
e240: 21 3d 30 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a  !=0;     break;.
e250: 20 20 20 20 63 61 73 65 20 4f 50 5f 4c 74 3a 20      case OP_Lt: 
e260: 20 20 20 72 65 73 20 3d 20 72 65 73 3c 30 3b 20     res = res<0; 
e270: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
e280: 63 61 73 65 20 4f 50 5f 4c 65 3a 20 20 20 20 72  case OP_Le:    r
e290: 65 73 20 3d 20 72 65 73 3c 3d 30 3b 20 20 20 20  es = res<=0;    
e2a0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65   break;.    case
e2b0: 20 4f 50 5f 47 74 3a 20 20 20 20 72 65 73 20 3d   OP_Gt:    res =
e2c0: 20 72 65 73 3e 30 3b 20 20 20 20 20 20 62 72 65   res>0;      bre
e2d0: 61 6b 3b 0a 20 20 20 20 64 65 66 61 75 6c 74 3a  ak;.    default:
e2e0: 20 20 20 20 20 20 20 72 65 73 20 3d 20 72 65 73         res = res
e2f0: 3e 3d 30 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a  >=0;     break;.
e300: 20 20 7d 0a 0a 20 20 69 66 28 20 70 4f 70 2d 3e    }..  if( pOp->
e310: 70 35 20 26 20 53 51 4c 49 54 45 5f 53 54 4f 52  p5 & SQLITE_STOR
e320: 45 50 32 20 29 7b 0a 20 20 20 20 70 4f 75 74 20  EP2 ){.    pOut 
e330: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
e340: 3b 0a 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f  ;.    memAboutTo
e350: 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b  Change(p, pOut);
e360: 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46  .    MemSetTypeF
e370: 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e  lag(pOut, MEM_In
e380: 74 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e  t);.    pOut->u.
e390: 69 20 3d 20 72 65 73 3b 0a 20 20 20 20 52 45 47  i = res;.    REG
e3a0: 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
e3b0: 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20 20 7d 65  >p2, pOut);.  }e
e3c0: 6c 73 65 20 69 66 28 20 72 65 73 20 29 7b 0a 20  lse if( res ){. 
e3d0: 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d     pc = pOp->p2-
e3e0: 31 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 55 6e 64  1;.  }..  /* Und
e3f0: 6f 20 61 6e 79 20 63 68 61 6e 67 65 73 20 6d 61  o any changes ma
e400: 64 65 20 62 79 20 61 70 70 6c 79 41 66 66 69 6e  de by applyAffin
e410: 69 74 79 28 29 20 74 6f 20 74 68 65 20 69 6e 70  ity() to the inp
e420: 75 74 20 72 65 67 69 73 74 65 72 73 2e 20 2a 2f  ut registers. */
e430: 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d  .  pIn1->flags =
e440: 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 26 7e 4d   (pIn1->flags&~M
e450: 45 4d 5f 54 79 70 65 4d 61 73 6b 29 20 7c 20 28  EM_TypeMask) | (
e460: 66 6c 61 67 73 31 26 4d 45 4d 5f 54 79 70 65 4d  flags1&MEM_TypeM
e470: 61 73 6b 29 3b 0a 20 20 70 49 6e 33 2d 3e 66 6c  ask);.  pIn3->fl
e480: 61 67 73 20 3d 20 28 70 49 6e 33 2d 3e 66 6c 61  ags = (pIn3->fla
e490: 67 73 26 7e 4d 45 4d 5f 54 79 70 65 4d 61 73 6b  gs&~MEM_TypeMask
e4a0: 29 20 7c 20 28 66 6c 61 67 73 33 26 4d 45 4d 5f  ) | (flags3&MEM_
e4b0: 54 79 70 65 4d 61 73 6b 29 3b 0a 20 20 62 72 65  TypeMask);.  bre
e4c0: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
e4d0: 3a 20 50 65 72 6d 75 74 61 74 69 6f 6e 20 2a 20  : Permutation * 
e4e0: 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 53  * * P4 *.**.** S
e4f0: 65 74 20 74 68 65 20 70 65 72 6d 75 74 61 74 69  et the permutati
e500: 6f 6e 20 75 73 65 64 20 62 79 20 74 68 65 20 4f  on used by the O
e510: 50 5f 43 6f 6d 70 61 72 65 20 6f 70 65 72 61 74  P_Compare operat
e520: 6f 72 20 74 6f 20 62 65 20 74 68 65 20 61 72 72  or to be the arr
e530: 61 79 0a 2a 2a 20 6f 66 20 69 6e 74 65 67 65 72  ay.** of integer
e540: 73 20 69 6e 20 50 34 2e 0a 2a 2a 0a 2a 2a 20 54  s in P4..**.** T
e550: 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e 20 69  he permutation i
e560: 73 20 6f 6e 6c 79 20 76 61 6c 69 64 20 75 6e 74  s only valid unt
e570: 69 6c 20 74 68 65 20 6e 65 78 74 20 4f 50 5f 50  il the next OP_P
e580: 65 72 6d 75 74 61 74 69 6f 6e 2c 20 4f 50 5f 43  ermutation, OP_C
e590: 6f 6d 70 61 72 65 2c 0a 2a 2a 20 4f 50 5f 48 61  ompare,.** OP_Ha
e5a0: 6c 74 2c 20 6f 72 20 4f 50 5f 52 65 73 75 6c 74  lt, or OP_Result
e5b0: 52 6f 77 2e 20 20 54 79 70 69 63 61 6c 6c 79 20  Row.  Typically 
e5c0: 74 68 65 20 4f 50 5f 50 65 72 6d 75 74 61 74 69  the OP_Permutati
e5d0: 6f 6e 20 73 68 6f 75 6c 64 20 6f 63 63 75 72 0a  on should occur.
e5e0: 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 70  ** immediately p
e5f0: 72 69 6f 72 20 74 6f 20 74 68 65 20 4f 50 5f 43  rior to the OP_C
e600: 6f 6d 70 61 72 65 2e 0a 2a 2f 0a 63 61 73 65 20  ompare..*/.case 
e610: 4f 50 5f 50 65 72 6d 75 74 61 74 69 6f 6e 3a 20  OP_Permutation: 
e620: 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  {.  assert( pOp-
e630: 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 41  >p4type==P4_INTA
e640: 52 52 41 59 20 29 3b 0a 20 20 61 73 73 65 72 74  RRAY );.  assert
e650: 28 20 70 4f 70 2d 3e 70 34 2e 61 69 20 29 3b 0a  ( pOp->p4.ai );.
e660: 20 20 61 50 65 72 6d 75 74 65 20 3d 20 70 4f 70    aPermute = pOp
e670: 2d 3e 70 34 2e 61 69 3b 0a 20 20 62 72 65 61 6b  ->p4.ai;.  break
e680: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
e690: 43 6f 6d 70 61 72 65 20 50 31 20 50 32 20 50 33  Compare P1 P2 P3
e6a0: 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70   P4 *.**.** Comp
e6b0: 61 72 65 20 74 77 6f 20 76 65 63 74 6f 72 73 20  are two vectors 
e6c0: 6f 66 20 72 65 67 69 73 74 65 72 73 20 69 6e 20  of registers in 
e6d0: 72 65 67 28 50 31 29 2e 2e 72 65 67 28 50 31 2b  reg(P1)..reg(P1+
e6e0: 50 33 2d 31 29 20 28 63 61 6c 6c 20 74 68 69 73  P3-1) (call this
e6f0: 0a 2a 2a 20 76 65 63 74 6f 72 20 22 41 22 29 20  .** vector "A") 
e700: 61 6e 64 20 69 6e 20 72 65 67 28 50 32 29 2e 2e  and in reg(P2)..
e710: 72 65 67 28 50 32 2b 50 33 2d 31 29 20 28 22 42  reg(P2+P3-1) ("B
e720: 22 29 2e 20 20 53 61 76 65 20 74 68 65 20 72 65  ").  Save the re
e730: 73 75 6c 74 20 6f 66 0a 2a 2a 20 74 68 65 20 63  sult of.** the c
e740: 6f 6d 70 61 72 69 73 6f 6e 20 66 6f 72 20 75 73  omparison for us
e750: 65 20 62 79 20 74 68 65 20 6e 65 78 74 20 4f 50  e by the next OP
e760: 5f 4a 75 6d 70 20 69 6e 73 74 72 75 63 74 2e 0a  _Jump instruct..
e770: 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 4b 65  **.** P4 is a Ke
e780: 79 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65 20  yInfo structure 
e790: 74 68 61 74 20 64 65 66 69 6e 65 73 20 63 6f 6c  that defines col
e7a0: 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73  lating sequences
e7b0: 20 61 6e 64 20 73 6f 72 74 0a 2a 2a 20 6f 72 64   and sort.** ord
e7c0: 65 72 73 20 66 6f 72 20 74 68 65 20 63 6f 6d 70  ers for the comp
e7d0: 61 72 69 73 6f 6e 2e 20 20 54 68 65 20 70 65 72  arison.  The per
e7e0: 6d 75 74 61 74 69 6f 6e 20 61 70 70 6c 69 65 73  mutation applies
e7f0: 20 74 6f 20 72 65 67 69 73 74 65 72 73 0a 2a 2a   to registers.**
e800: 20 6f 6e 6c 79 2e 20 20 54 68 65 20 4b 65 79 49   only.  The KeyI
e810: 6e 66 6f 20 65 6c 65 6d 65 6e 74 73 20 61 72 65  nfo elements are
e820: 20 75 73 65 64 20 73 65 71 75 65 6e 74 69 61 6c   used sequential
e830: 6c 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f  ly..**.** The co
e840: 6d 70 61 72 69 73 6f 6e 20 69 73 20 61 20 73 6f  mparison is a so
e850: 72 74 20 63 6f 6d 70 61 72 69 73 6f 6e 2c 20 73  rt comparison, s
e860: 6f 20 4e 55 4c 4c 73 20 63 6f 6d 70 61 72 65 20  o NULLs compare 
e870: 65 71 75 61 6c 2c 0a 2a 2a 20 4e 55 4c 4c 73 20  equal,.** NULLs 
e880: 61 72 65 20 6c 65 73 73 20 74 68 61 6e 20 6e 75  are less than nu
e890: 6d 62 65 72 73 2c 20 6e 75 6d 62 65 72 73 20 61  mbers, numbers a
e8a0: 72 65 20 6c 65 73 73 20 74 68 61 6e 20 73 74 72  re less than str
e8b0: 69 6e 67 73 2c 0a 2a 2a 20 61 6e 64 20 73 74 72  ings,.** and str
e8c0: 69 6e 67 73 20 61 72 65 20 6c 65 73 73 20 74 68  ings are less th
e8d0: 61 6e 20 62 6c 6f 62 73 2e 0a 2a 2f 0a 63 61 73  an blobs..*/.cas
e8e0: 65 20 4f 50 5f 43 6f 6d 70 61 72 65 3a 20 7b 0a  e OP_Compare: {.
e8f0: 20 20 69 6e 74 20 6e 3b 0a 20 20 69 6e 74 20 69    int n;.  int i
e900: 3b 0a 20 20 69 6e 74 20 70 31 3b 0a 20 20 69 6e  ;.  int p1;.  in
e910: 74 20 70 32 3b 0a 20 20 63 6f 6e 73 74 20 4b 65  t p2;.  const Ke
e920: 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b  yInfo *pKeyInfo;
e930: 0a 20 20 69 6e 74 20 69 64 78 3b 0a 20 20 43 6f  .  int idx;.  Co
e940: 6c 6c 53 65 71 20 2a 70 43 6f 6c 6c 3b 20 20 20  llSeq *pColl;   
e950: 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65   /* Collating se
e960: 71 75 65 6e 63 65 20 74 6f 20 75 73 65 20 6f 6e  quence to use on
e970: 20 74 68 69 73 20 74 65 72 6d 20 2a 2f 0a 20 20   this term */.  
e980: 69 6e 74 20 62 52 65 76 3b 20 20 20 20 20 20 20  int bRev;       
e990: 20 20 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 44     /* True for D
e9a0: 45 53 43 45 4e 44 49 4e 47 20 73 6f 72 74 20 6f  ESCENDING sort o
e9b0: 72 64 65 72 20 2a 2f 0a 0a 20 20 6e 20 3d 20 70  rder */..  n = p
e9c0: 4f 70 2d 3e 70 33 3b 0a 20 20 70 4b 65 79 49 6e  Op->p3;.  pKeyIn
e9d0: 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65  fo = pOp->p4.pKe
e9e0: 79 49 6e 66 6f 3b 0a 20 20 61 73 73 65 72 74 28  yInfo;.  assert(
e9f0: 20 6e 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74   n>0 );.  assert
ea00: 28 20 70 4b 65 79 49 6e 66 6f 21 3d 30 20 29 3b  ( pKeyInfo!=0 );
ea10: 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b  .  p1 = pOp->p1;
ea20: 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b  .  p2 = pOp->p2;
ea30: 0a 23 69 66 20 53 51 4c 49 54 45 5f 44 45 42 55  .#if SQLITE_DEBU
ea40: 47 0a 20 20 69 66 28 20 61 50 65 72 6d 75 74 65  G.  if( aPermute
ea50: 20 29 7b 0a 20 20 20 20 69 6e 74 20 6b 2c 20 6d   ){.    int k, m
ea60: 78 20 3d 20 30 3b 0a 20 20 20 20 66 6f 72 28 6b  x = 0;.    for(k
ea70: 3d 30 3b 20 6b 3c 6e 3b 20 6b 2b 2b 29 20 69 66  =0; k<n; k++) if
ea80: 28 20 61 50 65 72 6d 75 74 65 5b 6b 5d 3e 6d 78  ( aPermute[k]>mx
ea90: 20 29 20 6d 78 20 3d 20 61 50 65 72 6d 75 74 65   ) mx = aPermute
eaa0: 5b 6b 5d 3b 0a 20 20 20 20 61 73 73 65 72 74 28  [k];.    assert(
eab0: 20 70 31 3e 30 20 26 26 20 70 31 2b 6d 78 3c 3d   p1>0 && p1+mx<=
eac0: 70 2d 3e 6e 4d 65 6d 2b 31 20 29 3b 0a 20 20 20  p->nMem+1 );.   
ead0: 20 61 73 73 65 72 74 28 20 70 32 3e 30 20 26 26   assert( p2>0 &&
eae0: 20 70 32 2b 6d 78 3c 3d 70 2d 3e 6e 4d 65 6d 2b   p2+mx<=p->nMem+
eaf0: 31 20 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  1 );.  }else{.  
eb00: 20 20 61 73 73 65 72 74 28 20 70 31 3e 30 20 26    assert( p1>0 &
eb10: 26 20 70 31 2b 6e 3c 3d 70 2d 3e 6e 4d 65 6d 2b  & p1+n<=p->nMem+
eb20: 31 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  1 );.    assert(
eb30: 20 70 32 3e 30 20 26 26 20 70 32 2b 6e 3c 3d 70   p2>0 && p2+n<=p
eb40: 2d 3e 6e 4d 65 6d 2b 31 20 29 3b 0a 20 20 7d 0a  ->nMem+1 );.  }.
eb50: 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
eb60: 5f 44 45 42 55 47 20 2a 2f 0a 20 20 66 6f 72 28  _DEBUG */.  for(
eb70: 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b 2b 29 7b 0a  i=0; i<n; i++){.
eb80: 20 20 20 20 69 64 78 20 3d 20 61 50 65 72 6d 75      idx = aPermu
eb90: 74 65 20 3f 20 61 50 65 72 6d 75 74 65 5b 69 5d  te ? aPermute[i]
eba0: 20 3a 20 69 3b 0a 20 20 20 20 61 73 73 65 72 74   : i;.    assert
ebb0: 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d  ( memIsValid(&aM
ebc0: 65 6d 5b 70 31 2b 69 64 78 5d 29 20 29 3b 0a 20  em[p1+idx]) );. 
ebd0: 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
ebe0: 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 32 2b 69  Valid(&aMem[p2+i
ebf0: 64 78 5d 29 20 29 3b 0a 20 20 20 20 52 45 47 49  dx]) );.    REGI
ec00: 53 54 45 52 5f 54 52 41 43 45 28 70 31 2b 69 64  STER_TRACE(p1+id
ec10: 78 2c 20 26 61 4d 65 6d 5b 70 31 2b 69 64 78 5d  x, &aMem[p1+idx]
ec20: 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f  );.    REGISTER_
ec30: 54 52 41 43 45 28 70 32 2b 69 64 78 2c 20 26 61  TRACE(p2+idx, &a
ec40: 4d 65 6d 5b 70 32 2b 69 64 78 5d 29 3b 0a 20 20  Mem[p2+idx]);.  
ec50: 20 20 61 73 73 65 72 74 28 20 69 3c 70 4b 65 79    assert( i<pKey
ec60: 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64 20 29 3b 0a  Info->nField );.
ec70: 20 20 20 20 70 43 6f 6c 6c 20 3d 20 70 4b 65 79      pColl = pKey
ec80: 49 6e 66 6f 2d 3e 61 43 6f 6c 6c 5b 69 5d 3b 0a  Info->aColl[i];.
ec90: 20 20 20 20 62 52 65 76 20 3d 20 70 4b 65 79 49      bRev = pKeyI
eca0: 6e 66 6f 2d 3e 61 53 6f 72 74 4f 72 64 65 72 5b  nfo->aSortOrder[
ecb0: 69 5d 3b 0a 20 20 20 20 69 43 6f 6d 70 61 72 65  i];.    iCompare
ecc0: 20 3d 20 73 71 6c 69 74 65 33 4d 65 6d 43 6f 6d   = sqlite3MemCom
ecd0: 70 61 72 65 28 26 61 4d 65 6d 5b 70 31 2b 69 64  pare(&aMem[p1+id
ece0: 78 5d 2c 20 26 61 4d 65 6d 5b 70 32 2b 69 64 78  x], &aMem[p2+idx
ecf0: 5d 2c 20 70 43 6f 6c 6c 29 3b 0a 20 20 20 20 69  ], pColl);.    i
ed00: 66 28 20 69 43 6f 6d 70 61 72 65 20 29 7b 0a 20  f( iCompare ){. 
ed10: 20 20 20 20 20 69 66 28 20 62 52 65 76 20 29 20       if( bRev ) 
ed20: 69 43 6f 6d 70 61 72 65 20 3d 20 2d 69 43 6f 6d  iCompare = -iCom
ed30: 70 61 72 65 3b 0a 20 20 20 20 20 20 62 72 65 61  pare;.      brea
ed40: 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 61  k;.    }.  }.  a
ed50: 50 65 72 6d 75 74 65 20 3d 20 30 3b 0a 20 20 62  Permute = 0;.  b
ed60: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
ed70: 64 65 3a 20 4a 75 6d 70 20 50 31 20 50 32 20 50  de: Jump P1 P2 P
ed80: 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70  3 * *.**.** Jump
ed90: 20 74 6f 20 74 68 65 20 69 6e 73 74 72 75 63 74   to the instruct
eda0: 69 6f 6e 20 61 74 20 61 64 64 72 65 73 73 20 50  ion at address P
edb0: 31 2c 20 50 32 2c 20 6f 72 20 50 33 20 64 65 70  1, P2, or P3 dep
edc0: 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65  ending on whethe
edd0: 72 0a 2a 2a 20 69 6e 20 74 68 65 20 6d 6f 73 74  r.** in the most
ede0: 20 72 65 63 65 6e 74 20 4f 50 5f 43 6f 6d 70 61   recent OP_Compa
edf0: 72 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 74  re instruction t
ee00: 68 65 20 50 31 20 76 65 63 74 6f 72 20 77 61 73  he P1 vector was
ee10: 20 6c 65 73 73 20 74 68 61 6e 0a 2a 2a 20 65 71   less than.** eq
ee20: 75 61 6c 20 74 6f 2c 20 6f 72 20 67 72 65 61 74  ual to, or great
ee30: 65 72 20 74 68 61 6e 20 74 68 65 20 50 32 20 76  er than the P2 v
ee40: 65 63 74 6f 72 2c 20 72 65 73 70 65 63 74 69 76  ector, respectiv
ee50: 65 6c 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ely..*/.case OP_
ee60: 4a 75 6d 70 3a 20 7b 20 20 20 20 20 20 20 20 20  Jump: {         
ee70: 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20      /* jump */. 
ee80: 20 69 66 28 20 69 43 6f 6d 70 61 72 65 3c 30 20   if( iCompare<0 
ee90: 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  ){.    pc = pOp-
eea0: 3e 70 31 20 2d 20 31 3b 0a 20 20 7d 65 6c 73 65  >p1 - 1;.  }else
eeb0: 20 69 66 28 20 69 43 6f 6d 70 61 72 65 3d 3d 30   if( iCompare==0
eec0: 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70   ){.    pc = pOp
eed0: 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 65 6c 73  ->p2 - 1;.  }els
eee0: 65 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  e{.    pc = pOp-
eef0: 3e 70 33 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62  >p3 - 1;.  }.  b
ef00: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
ef10: 64 65 3a 20 41 6e 64 20 50 31 20 50 32 20 50 33  de: And P1 P2 P3
ef20: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20   * *.**.** Take 
ef30: 74 68 65 20 6c 6f 67 69 63 61 6c 20 41 4e 44 20  the logical AND 
ef40: 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e  of the values in
ef50: 20 72 65 67 69 73 74 65 72 73 20 50 31 20 61 6e   registers P1 an
ef60: 64 20 50 32 20 61 6e 64 0a 2a 2a 20 77 72 69 74  d P2 and.** writ
ef70: 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 74  e the result int
ef80: 6f 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  o register P3..*
ef90: 2a 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 50  *.** If either P
efa0: 31 20 6f 72 20 50 32 20 69 73 20 30 20 28 66 61  1 or P2 is 0 (fa
efb0: 6c 73 65 29 20 74 68 65 6e 20 74 68 65 20 72 65  lse) then the re
efc0: 73 75 6c 74 20 69 73 20 30 20 65 76 65 6e 20 69  sult is 0 even i
efd0: 66 0a 2a 2a 20 74 68 65 20 6f 74 68 65 72 20 69  f.** the other i
efe0: 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2e 20 20 41  nput is NULL.  A
eff0: 20 4e 55 4c 4c 20 61 6e 64 20 74 72 75 65 20 6f   NULL and true o
f000: 72 20 74 77 6f 20 4e 55 4c 4c 73 20 67 69 76 65  r two NULLs give
f010: 0a 2a 2a 20 61 20 4e 55 4c 4c 20 6f 75 74 70 75  .** a NULL outpu
f020: 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  t..*/./* Opcode:
f030: 20 4f 72 20 50 31 20 50 32 20 50 33 20 2a 20 2a   Or P1 P2 P3 * *
f040: 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20  .**.** Take the 
f050: 6c 6f 67 69 63 61 6c 20 4f 52 20 6f 66 20 74 68  logical OR of th
f060: 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69  e values in regi
f070: 73 74 65 72 20 50 31 20 61 6e 64 20 50 32 20 61  ster P1 and P2 a
f080: 6e 64 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65 20  nd.** store the 
f090: 61 6e 73 77 65 72 20 69 6e 20 72 65 67 69 73 74  answer in regist
f0a0: 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  er P3..**.** If 
f0b0: 65 69 74 68 65 72 20 50 31 20 6f 72 20 50 32 20  either P1 or P2 
f0c0: 69 73 20 6e 6f 6e 7a 65 72 6f 20 28 74 72 75 65  is nonzero (true
f0d0: 29 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c  ) then the resul
f0e0: 74 20 69 73 20 31 20 28 74 72 75 65 29 0a 2a 2a  t is 1 (true).**
f0f0: 20 65 76 65 6e 20 69 66 20 74 68 65 20 6f 74 68   even if the oth
f100: 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c  er input is NULL
f110: 2e 20 20 41 20 4e 55 4c 4c 20 61 6e 64 20 66 61  .  A NULL and fa
f120: 6c 73 65 20 6f 72 20 74 77 6f 20 4e 55 4c 4c 73  lse or two NULLs
f130: 0a 2a 2a 20 67 69 76 65 20 61 20 4e 55 4c 4c 20  .** give a NULL 
f140: 6f 75 74 70 75 74 2e 0a 2a 2f 0a 63 61 73 65 20  output..*/.case 
f150: 4f 50 5f 41 6e 64 3a 20 20 20 20 20 20 20 20 20  OP_And:         
f160: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
f170: 54 4b 5f 41 4e 44 2c 20 69 6e 31 2c 20 69 6e 32  TK_AND, in1, in2
f180: 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f  , out3 */.case O
f190: 50 5f 4f 72 3a 20 7b 20 20 20 20 20 20 20 20 20  P_Or: {         
f1a0: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
f1b0: 4b 5f 4f 52 2c 20 69 6e 31 2c 20 69 6e 32 2c 20  K_OR, in1, in2, 
f1c0: 6f 75 74 33 20 2a 2f 0a 20 20 69 6e 74 20 76 31  out3 */.  int v1
f1d0: 3b 20 20 20 20 2f 2a 20 4c 65 66 74 20 6f 70 65  ;    /* Left ope
f1e0: 72 61 6e 64 3a 20 20 30 3d 3d 46 41 4c 53 45 2c  rand:  0==FALSE,
f1f0: 20 31 3d 3d 54 52 55 45 2c 20 32 3d 3d 55 4e 4b   1==TRUE, 2==UNK
f200: 4e 4f 57 4e 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a  NOWN or NULL */.
f210: 20 20 69 6e 74 20 76 32 3b 20 20 20 20 2f 2a 20    int v2;    /* 
f220: 52 69 67 68 74 20 6f 70 65 72 61 6e 64 3a 20 30  Right operand: 0
f230: 3d 3d 46 41 4c 53 45 2c 20 31 3d 3d 54 52 55 45  ==FALSE, 1==TRUE
f240: 2c 20 32 3d 3d 55 4e 4b 4e 4f 57 4e 20 6f 72 20  , 2==UNKNOWN or 
f250: 4e 55 4c 4c 20 2a 2f 0a 0a 20 20 70 49 6e 31 20  NULL */..  pIn1 
f260: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
f270: 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c  ;.  if( pIn1->fl
f280: 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29  ags & MEM_Null )
f290: 7b 0a 20 20 20 20 76 31 20 3d 20 32 3b 0a 20 20  {.    v1 = 2;.  
f2a0: 7d 65 6c 73 65 7b 0a 20 20 20 20 76 31 20 3d 20  }else{.    v1 = 
f2b0: 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61  sqlite3VdbeIntVa
f2c0: 6c 75 65 28 70 49 6e 31 29 21 3d 30 3b 0a 20 20  lue(pIn1)!=0;.  
f2d0: 7d 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d  }.  pIn2 = &aMem
f2e0: 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 69 66 28  [pOp->p2];.  if(
f2f0: 20 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn2->flags & M
f300: 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 76  EM_Null ){.    v
f310: 32 20 3d 20 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a  2 = 2;.  }else{.
f320: 20 20 20 20 76 32 20 3d 20 73 71 6c 69 74 65 33      v2 = sqlite3
f330: 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e  VdbeIntValue(pIn
f340: 32 29 21 3d 30 3b 0a 20 20 7d 0a 20 20 69 66 28  2)!=0;.  }.  if(
f350: 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
f360: 5f 41 6e 64 20 29 7b 0a 20 20 20 20 73 74 61 74  _And ){.    stat
f370: 69 63 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65  ic const unsigne
f380: 64 20 63 68 61 72 20 61 6e 64 5f 6c 6f 67 69 63  d char and_logic
f390: 5b 5d 20 3d 20 7b 20 30 2c 20 30 2c 20 30 2c 20  [] = { 0, 0, 0, 
f3a0: 30 2c 20 31 2c 20 32 2c 20 30 2c 20 32 2c 20 32  0, 1, 2, 0, 2, 2
f3b0: 20 7d 3b 0a 20 20 20 20 76 31 20 3d 20 61 6e 64   };.    v1 = and
f3c0: 5f 6c 6f 67 69 63 5b 76 31 2a 33 2b 76 32 5d 3b  _logic[v1*3+v2];
f3d0: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 74  .  }else{.    st
f3e0: 61 74 69 63 20 63 6f 6e 73 74 20 75 6e 73 69 67  atic const unsig
f3f0: 6e 65 64 20 63 68 61 72 20 6f 72 5f 6c 6f 67 69  ned char or_logi
f400: 63 5b 5d 20 3d 20 7b 20 30 2c 20 31 2c 20 32 2c  c[] = { 0, 1, 2,
f410: 20 31 2c 20 31 2c 20 31 2c 20 32 2c 20 31 2c 20   1, 1, 1, 2, 1, 
f420: 32 20 7d 3b 0a 20 20 20 20 76 31 20 3d 20 6f 72  2 };.    v1 = or
f430: 5f 6c 6f 67 69 63 5b 76 31 2a 33 2b 76 32 5d 3b  _logic[v1*3+v2];
f440: 0a 20 20 7d 0a 20 20 70 4f 75 74 20 3d 20 26 61  .  }.  pOut = &a
f450: 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
f460: 69 66 28 20 76 31 3d 3d 32 20 29 7b 0a 20 20 20  if( v1==2 ){.   
f470: 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
f480: 70 4f 75 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b  pOut, MEM_Null);
f490: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 4f  .  }else{.    pO
f4a0: 75 74 2d 3e 75 2e 69 20 3d 20 76 31 3b 0a 20 20  ut->u.i = v1;.  
f4b0: 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
f4c0: 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b  (pOut, MEM_Int);
f4d0: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
f4e0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 20  ./* Opcode: Not 
f4f0: 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
f500: 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68 65 20  * Interpret the 
f510: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
f520: 72 20 50 31 20 61 73 20 61 20 62 6f 6f 6c 65 61  r P1 as a boolea
f530: 6e 20 76 61 6c 75 65 2e 20 20 53 74 6f 72 65 20  n value.  Store 
f540: 74 68 65 0a 2a 2a 20 62 6f 6f 6c 65 61 6e 20 63  the.** boolean c
f550: 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e 20 72 65 67  omplement in reg
f560: 69 73 74 65 72 20 50 32 2e 20 20 49 66 20 74 68  ister P2.  If th
f570: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
f580: 74 65 72 20 50 31 20 69 73 20 0a 2a 2a 20 4e 55  ter P1 is .** NU
f590: 4c 4c 2c 20 74 68 65 6e 20 61 20 4e 55 4c 4c 20  LL, then a NULL 
f5a0: 69 73 20 73 74 6f 72 65 64 20 69 6e 20 50 32 2e  is stored in P2.
f5b0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 3a  .*/.case OP_Not:
f5c0: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
f5d0: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
f5e0: 4e 4f 54 2c 20 69 6e 31 2c 20 6f 75 74 32 20 2a  NOT, in1, out2 *
f5f0: 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
f600: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75  [pOp->p1];.  pOu
f610: 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
f620: 32 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e  2];.  if( pIn1->
f630: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
f640: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
f650: 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f  dbeMemSetNull(pO
f660: 75 74 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  ut);.  }else{.  
f670: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
f680: 53 65 74 49 6e 74 36 34 28 70 4f 75 74 2c 20 21  SetInt64(pOut, !
f690: 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61  sqlite3VdbeIntVa
f6a0: 6c 75 65 28 70 49 6e 31 29 29 3b 0a 20 20 7d 0a  lue(pIn1));.  }.
f6b0: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
f6c0: 70 63 6f 64 65 3a 20 42 69 74 4e 6f 74 20 50 31  pcode: BitNot P1
f6d0: 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
f6e0: 49 6e 74 65 72 70 72 65 74 20 74 68 65 20 63 6f  Interpret the co
f6f0: 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65  ntent of registe
f700: 72 20 50 31 20 61 73 20 61 6e 20 69 6e 74 65 67  r P1 as an integ
f710: 65 72 2e 20 20 53 74 6f 72 65 20 74 68 65 0a 2a  er.  Store the.*
f720: 2a 20 6f 6e 65 73 2d 63 6f 6d 70 6c 65 6d 65 6e  * ones-complemen
f730: 74 20 6f 66 20 74 68 65 20 50 31 20 76 61 6c 75  t of the P1 valu
f740: 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  e into register 
f750: 50 32 2e 20 20 49 66 20 50 31 20 68 6f 6c 64 73  P2.  If P1 holds
f760: 0a 2a 2a 20 61 20 4e 55 4c 4c 20 74 68 65 6e 20  .** a NULL then 
f770: 73 74 6f 72 65 20 61 20 4e 55 4c 4c 20 69 6e 20  store a NULL in 
f780: 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 42  P2..*/.case OP_B
f790: 69 74 4e 6f 74 3a 20 7b 20 20 20 20 20 20 20 20  itNot: {        
f7a0: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
f7b0: 54 4b 5f 42 49 54 4e 4f 54 2c 20 69 6e 31 2c 20  TK_BITNOT, in1, 
f7c0: 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d  out2 */.  pIn1 =
f7d0: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
f7e0: 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b  .  pOut = &aMem[
f7f0: 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 69 66 28 20  pOp->p2];.  if( 
f800: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
f810: 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 73 71  M_Null ){.    sq
f820: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e  lite3VdbeMemSetN
f830: 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 7d 65 6c  ull(pOut);.  }el
f840: 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  se{.    sqlite3V
f850: 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 70  dbeMemSetInt64(p
f860: 4f 75 74 2c 20 7e 73 71 6c 69 74 65 33 56 64 62  Out, ~sqlite3Vdb
f870: 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 29  eIntValue(pIn1))
f880: 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
f890: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 20  ../* Opcode: If 
f8a0: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
f8b0: 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66  ** Jump to P2 if
f8c0: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
f8d0: 67 69 73 74 65 72 20 50 31 20 69 73 20 74 72 75  gister P1 is tru
f8e0: 65 2e 20 20 54 68 65 20 76 61 6c 75 65 20 69 73  e.  The value is
f8f0: 0a 2a 2a 20 69 73 20 63 6f 6e 73 69 64 65 72 65  .** is considere
f900: 64 20 74 72 75 65 20 69 66 20 69 74 20 69 73 20  d true if it is 
f910: 6e 75 6d 65 72 69 63 20 61 6e 64 20 6e 6f 6e 2d  numeric and non-
f920: 7a 65 72 6f 2e 20 20 49 66 20 74 68 65 20 76 61  zero.  If the va
f930: 6c 75 65 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20  lue.** in P1 is 
f940: 4e 55 4c 4c 20 74 68 65 6e 20 74 61 6b 65 20 74  NULL then take t
f950: 68 65 20 6a 75 6d 70 20 69 66 20 50 33 20 69 73  he jump if P3 is
f960: 20 74 72 75 65 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63   true..*/./* Opc
f970: 6f 64 65 3a 20 49 66 4e 6f 74 20 50 31 20 50 32  ode: IfNot P1 P2
f980: 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75   P3 * *.**.** Ju
f990: 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68 65 20  mp to P2 if the 
f9a0: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
f9b0: 72 20 50 31 20 69 73 20 46 61 6c 73 65 2e 20 20  r P1 is False.  
f9c0: 54 68 65 20 76 61 6c 75 65 20 69 73 0a 2a 2a 20  The value is.** 
f9d0: 69 73 20 63 6f 6e 73 69 64 65 72 65 64 20 74 72  is considered tr
f9e0: 75 65 20 69 66 20 69 74 20 68 61 73 20 61 20 6e  ue if it has a n
f9f0: 75 6d 65 72 69 63 20 76 61 6c 75 65 20 6f 66 20  umeric value of 
fa00: 7a 65 72 6f 2e 20 20 49 66 20 74 68 65 20 76 61  zero.  If the va
fa10: 6c 75 65 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20  lue.** in P1 is 
fa20: 4e 55 4c 4c 20 74 68 65 6e 20 74 61 6b 65 20 74  NULL then take t
fa30: 68 65 20 6a 75 6d 70 20 69 66 20 50 33 20 69 73  he jump if P3 is
fa40: 20 74 72 75 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f   true..*/.case O
fa50: 50 5f 49 66 3a 20 20 20 20 20 20 20 20 20 20 20  P_If:           
fa60: 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
fa70: 6e 31 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66  n1 */.case OP_If
fa80: 4e 6f 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20  Not: {          
fa90: 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a    /* jump, in1 *
faa0: 2f 0a 20 20 69 6e 74 20 63 3b 0a 20 20 70 49 6e  /.  int c;.  pIn
fab0: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
fac0: 31 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e  1];.  if( pIn1->
fad0: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
fae0: 20 29 7b 0a 20 20 20 20 63 20 3d 20 70 4f 70 2d   ){.    c = pOp-
faf0: 3e 70 33 3b 0a 20 20 7d 65 6c 73 65 7b 0a 23 69  >p3;.  }else{.#i
fb00: 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fdef SQLITE_OMIT
fb10: 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a  _FLOATING_POINT.
fb20: 20 20 20 20 63 20 3d 20 73 71 6c 69 74 65 33 56      c = sqlite3V
fb30: 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31  dbeIntValue(pIn1
fb40: 29 21 3d 30 3b 0a 23 65 6c 73 65 0a 20 20 20 20  )!=0;.#else.    
fb50: 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 52  c = sqlite3VdbeR
fb60: 65 61 6c 56 61 6c 75 65 28 70 49 6e 31 29 21 3d  ealValue(pIn1)!=
fb70: 30 2e 30 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20  0.0;.#endif.    
fb80: 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  if( pOp->opcode=
fb90: 3d 4f 50 5f 49 66 4e 6f 74 20 29 20 63 20 3d 20  =OP_IfNot ) c = 
fba0: 21 63 3b 0a 20 20 7d 0a 20 20 69 66 28 20 63 20  !c;.  }.  if( c 
fbb0: 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  ){.    pc = pOp-
fbc0: 3e 70 32 2d 31 3b 0a 20 20 7d 0a 20 20 62 72 65  >p2-1;.  }.  bre
fbd0: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
fbe0: 3a 20 49 73 4e 75 6c 6c 20 50 31 20 50 32 20 2a  : IsNull P1 P2 *
fbf0: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20   * *.**.** Jump 
fc00: 74 6f 20 50 32 20 69 66 20 74 68 65 20 76 61 6c  to P2 if the val
fc10: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
fc20: 31 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61  1 is NULL..*/.ca
fc30: 73 65 20 4f 50 5f 49 73 4e 75 6c 6c 3a 20 7b 20  se OP_IsNull: { 
fc40: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
fc50: 6d 65 20 61 73 20 54 4b 5f 49 53 4e 55 4c 4c 2c  me as TK_ISNULL,
fc60: 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20   jump, in1 */.  
fc70: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
fc80: 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 28 70 49  ->p1];.  if( (pI
fc90: 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
fca0: 4e 75 6c 6c 29 21 3d 30 20 29 7b 0a 20 20 20 20  Null)!=0 ){.    
fcb0: 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
fcc0: 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
fcd0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74  ../* Opcode: Not
fce0: 4e 75 6c 6c 20 50 31 20 50 32 20 2a 20 2a 20 2a  Null P1 P2 * * *
fcf0: 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50  .**.** Jump to P
fd00: 32 20 69 66 20 74 68 65 20 76 61 6c 75 65 20 69  2 if the value i
fd10: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  n register P1 is
fd20: 20 6e 6f 74 20 4e 55 4c 4c 2e 20 20 0a 2a 2f 0a   not NULL.  .*/.
fd30: 63 61 73 65 20 4f 50 5f 4e 6f 74 4e 75 6c 6c 3a  case OP_NotNull:
fd40: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
fd50: 20 73 61 6d 65 20 61 73 20 54 4b 5f 4e 4f 54 4e   same as TK_NOTN
fd60: 55 4c 4c 2c 20 6a 75 6d 70 2c 20 69 6e 31 20 2a  ULL, jump, in1 *
fd70: 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
fd80: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28  [pOp->p1];.  if(
fd90: 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
fda0: 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a  MEM_Null)==0 ){.
fdb0: 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
fdc0: 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61   - 1;.  }.  brea
fdd0: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
fde0: 20 43 6f 6c 75 6d 6e 20 50 31 20 50 32 20 50 33   Column P1 P2 P3
fdf0: 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 49 6e 74   P4 P5.**.** Int
fe00: 65 72 70 72 65 74 20 74 68 65 20 64 61 74 61 20  erpret the data 
fe10: 74 68 61 74 20 63 75 72 73 6f 72 20 50 31 20 70  that cursor P1 p
fe20: 6f 69 6e 74 73 20 74 6f 20 61 73 20 61 20 73 74  oints to as a st
fe30: 72 75 63 74 75 72 65 20 62 75 69 6c 74 20 75 73  ructure built us
fe40: 69 6e 67 0a 2a 2a 20 74 68 65 20 4d 61 6b 65 52  ing.** the MakeR
fe50: 65 63 6f 72 64 20 69 6e 73 74 72 75 63 74 69 6f  ecord instructio
fe60: 6e 2e 20 20 28 53 65 65 20 74 68 65 20 4d 61 6b  n.  (See the Mak
fe70: 65 52 65 63 6f 72 64 20 6f 70 63 6f 64 65 20 66  eRecord opcode f
fe80: 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 0a 2a 2a  or additional.**
fe90: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   information abo
fea0: 75 74 20 74 68 65 20 66 6f 72 6d 61 74 20 6f 66  ut the format of
feb0: 20 74 68 65 20 64 61 74 61 2e 29 20 20 45 78 74   the data.)  Ext
fec0: 72 61 63 74 20 74 68 65 20 50 32 2d 74 68 20 63  ract the P2-th c
fed0: 6f 6c 75 6d 6e 0a 2a 2a 20 66 72 6f 6d 20 74 68  olumn.** from th
fee0: 69 73 20 72 65 63 6f 72 64 2e 20 20 49 66 20 74  is record.  If t
fef0: 68 65 72 65 20 61 72 65 20 6c 65 73 73 20 74 68  here are less th
ff00: 61 74 20 28 50 32 2b 31 29 20 0a 2a 2a 20 76 61  at (P2+1) .** va
ff10: 6c 75 65 73 20 69 6e 20 74 68 65 20 72 65 63 6f  lues in the reco
ff20: 72 64 2c 20 65 78 74 72 61 63 74 20 61 20 4e 55  rd, extract a NU
ff30: 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 76 61  LL..**.** The va
ff40: 6c 75 65 20 65 78 74 72 61 63 74 65 64 20 69 73  lue extracted is
ff50: 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73   stored in regis
ff60: 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66  ter P3..**.** If
ff70: 20 74 68 65 20 63 6f 6c 75 6d 6e 20 63 6f 6e 74   the column cont
ff80: 61 69 6e 73 20 66 65 77 65 72 20 74 68 61 6e 20  ains fewer than 
ff90: 50 32 20 66 69 65 6c 64 73 2c 20 74 68 65 6e 20  P2 fields, then 
ffa0: 65 78 74 72 61 63 74 20 61 20 4e 55 4c 4c 2e 20  extract a NULL. 
ffb0: 20 4f 72 2c 0a 2a 2a 20 69 66 20 74 68 65 20 50   Or,.** if the P
ffc0: 34 20 61 72 67 75 6d 65 6e 74 20 69 73 20 61 20  4 argument is a 
ffd0: 50 34 5f 4d 45 4d 20 75 73 65 20 74 68 65 20 76  P4_MEM use the v
ffe0: 61 6c 75 65 20 6f 66 20 74 68 65 20 50 34 20 61  alue of the P4 a
fff0: 72 67 75 6d 65 6e 74 20 61 73 0a 2a 2a 20 74 68  rgument as.** th
10000 65 20 72 65 73 75 6c 74 2e 0a 2a 2a 0a 2a 2a 20  e result..**.** 
10010 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 43 4c  If the OPFLAG_CL
10020 45 41 52 43 41 43 48 45 20 62 69 74 20 69 73 20  EARCACHE bit is 
10030 73 65 74 20 6f 6e 20 50 35 20 61 6e 64 20 50 31  set on P5 and P1
10040 20 69 73 20 61 20 70 73 65 75 64 6f 2d 74 61 62   is a pseudo-tab
10050 6c 65 20 63 75 72 73 6f 72 2c 0a 2a 2a 20 74 68  le cursor,.** th
10060 65 6e 20 74 68 65 20 63 61 63 68 65 20 6f 66 20  en the cache of 
10070 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 72 65  the cursor is re
10080 73 65 74 20 70 72 69 6f 72 20 74 6f 20 65 78 74  set prior to ext
10090 72 61 63 74 69 6e 67 20 74 68 65 20 63 6f 6c 75  racting the colu
100a0 6d 6e 2e 0a 2a 2a 20 54 68 65 20 66 69 72 73 74  mn..** The first
100b0 20 4f 50 5f 43 6f 6c 75 6d 6e 20 61 67 61 69 6e   OP_Column again
100c0 73 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c  st a pseudo-tabl
100d0 65 20 61 66 74 65 72 20 74 68 65 20 76 61 6c 75  e after the valu
100e0 65 20 6f 66 20 74 68 65 20 63 6f 6e 74 65 6e 74  e of the content
100f0 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 68 61 73  .** register has
10100 20 63 68 61 6e 67 65 64 20 73 68 6f 75 6c 64 20   changed should 
10110 68 61 76 65 20 74 68 69 73 20 62 69 74 20 73 65  have this bit se
10120 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f  t..*/.case OP_Co
10130 6c 75 6d 6e 3a 20 7b 0a 20 20 75 33 32 20 70 61  lumn: {.  u32 pa
10140 79 6c 6f 61 64 53 69 7a 65 3b 20 20 20 2f 2a 20  yloadSize;   /* 
10150 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20  Number of bytes 
10160 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f  in the record */
10170 0a 20 20 69 36 34 20 70 61 79 6c 6f 61 64 53 69  .  i64 payloadSi
10180 7a 65 36 34 3b 20 2f 2a 20 4e 75 6d 62 65 72 20  ze64; /* Number 
10190 6f 66 20 62 79 74 65 73 20 69 6e 20 74 68 65 20  of bytes in the 
101a0 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20  record */.  int 
101b0 70 31 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  p1;            /
101c0 2a 20 50 31 20 76 61 6c 75 65 20 6f 66 20 74 68  * P1 value of th
101d0 65 20 6f 70 63 6f 64 65 20 2a 2f 0a 20 20 69 6e  e opcode */.  in
101e0 74 20 70 32 3b 20 20 20 20 20 20 20 20 20 20 20  t p2;           
101f0 20 2f 2a 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65   /* column numbe
10200 72 20 74 6f 20 72 65 74 72 69 65 76 65 20 2a 2f  r to retrieve */
10210 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
10220 43 3b 20 20 20 20 2f 2a 20 54 68 65 20 56 44 42  C;    /* The VDB
10230 45 20 63 75 72 73 6f 72 20 2a 2f 0a 20 20 63 68  E cursor */.  ch
10240 61 72 20 2a 7a 52 65 63 3b 20 20 20 20 20 20 20  ar *zRec;       
10250 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 63   /* Pointer to c
10260 6f 6d 70 6c 65 74 65 20 72 65 63 6f 72 64 2d 64  omplete record-d
10270 61 74 61 20 2a 2f 0a 20 20 42 74 43 75 72 73 6f  ata */.  BtCurso
10280 72 20 2a 70 43 72 73 72 3b 20 20 20 2f 2a 20 54  r *pCrsr;   /* T
10290 68 65 20 42 54 72 65 65 20 63 75 72 73 6f 72 20  he BTree cursor 
102a0 2a 2f 0a 20 20 75 33 32 20 2a 61 54 79 70 65 3b  */.  u32 *aType;
102b0 20 20 20 20 20 20 20 20 2f 2a 20 61 54 79 70 65          /* aType
102c0 5b 69 5d 20 68 6f 6c 64 73 20 74 68 65 20 6e 75  [i] holds the nu
102d0 6d 65 72 69 63 20 74 79 70 65 20 6f 66 20 74 68  meric type of th
102e0 65 20 69 2d 74 68 20 63 6f 6c 75 6d 6e 20 2a 2f  e i-th column */
102f0 0a 20 20 75 33 32 20 2a 61 4f 66 66 73 65 74 3b  .  u32 *aOffset;
10300 20 20 20 20 20 20 2f 2a 20 61 4f 66 66 73 65 74        /* aOffset
10310 5b 69 5d 20 69 73 20 6f 66 66 73 65 74 20 74 6f  [i] is offset to
10320 20 73 74 61 72 74 20 6f 66 20 64 61 74 61 20 66   start of data f
10330 6f 72 20 69 2d 74 68 20 63 6f 6c 75 6d 6e 20 2a  or i-th column *
10340 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b 20  /.  int nField; 
10350 20 20 20 20 20 20 20 2f 2a 20 6e 75 6d 62 65 72         /* number
10360 20 6f 66 20 66 69 65 6c 64 73 20 69 6e 20 74 68   of fields in th
10370 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e  e record */.  in
10380 74 20 6c 65 6e 3b 20 20 20 20 20 20 20 20 20 20  t len;          
10390 20 2f 2a 20 54 68 65 20 6c 65 6e 67 74 68 20 6f   /* The length o
103a0 66 20 74 68 65 20 73 65 72 69 61 6c 69 7a 65 64  f the serialized
103b0 20 64 61 74 61 20 66 6f 72 20 74 68 65 20 63 6f   data for the co
103c0 6c 75 6d 6e 20 2a 2f 0a 20 20 69 6e 74 20 69 3b  lumn */.  int i;
103d0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
103e0 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a  Loop counter */.
103f0 20 20 63 68 61 72 20 2a 7a 44 61 74 61 3b 20 20    char *zData;  
10400 20 20 20 20 20 2f 2a 20 50 61 72 74 20 6f 66 20       /* Part of 
10410 74 68 65 20 72 65 63 6f 72 64 20 62 65 69 6e 67  the record being
10420 20 64 65 63 6f 64 65 64 20 2a 2f 0a 20 20 4d 65   decoded */.  Me
10430 6d 20 2a 70 44 65 73 74 3b 20 20 20 20 20 20 20  m *pDest;       
10440 20 2f 2a 20 57 68 65 72 65 20 74 6f 20 77 72 69   /* Where to wri
10450 74 65 20 74 68 65 20 65 78 74 72 61 63 74 65 64  te the extracted
10460 20 76 61 6c 75 65 20 2a 2f 0a 20 20 4d 65 6d 20   value */.  Mem 
10470 73 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 2f  sMem;          /
10480 2a 20 46 6f 72 20 73 74 6f 72 69 6e 67 20 74 68  * For storing th
10490 65 20 72 65 63 6f 72 64 20 62 65 69 6e 67 20 64  e record being d
104a0 65 63 6f 64 65 64 20 2a 2f 0a 20 20 75 38 20 2a  ecoded */.  u8 *
104b0 7a 49 64 78 3b 20 20 20 20 20 20 20 20 20 20 2f  zIdx;          /
104c0 2a 20 49 6e 64 65 78 20 69 6e 74 6f 20 68 65 61  * Index into hea
104d0 64 65 72 20 2a 2f 0a 20 20 75 38 20 2a 7a 45 6e  der */.  u8 *zEn
104e0 64 48 64 72 3b 20 20 20 20 20 20 20 2f 2a 20 50  dHdr;       /* P
104f0 6f 69 6e 74 65 72 20 74 6f 20 66 69 72 73 74 20  ointer to first 
10500 62 79 74 65 20 61 66 74 65 72 20 74 68 65 20 68  byte after the h
10510 65 61 64 65 72 20 2a 2f 0a 20 20 75 33 32 20 6f  eader */.  u32 o
10520 66 66 73 65 74 3b 20 20 20 20 20 20 20 20 2f 2a  ffset;        /*
10530 20 4f 66 66 73 65 74 20 69 6e 74 6f 20 74 68 65   Offset into the
10540 20 64 61 74 61 20 2a 2f 0a 20 20 75 33 32 20 73   data */.  u32 s
10550 7a 46 69 65 6c 64 3b 20 20 20 20 20 20 20 2f 2a  zField;       /*
10560 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   Number of bytes
10570 20 69 6e 20 74 68 65 20 63 6f 6e 74 65 6e 74 20   in the content 
10580 6f 66 20 61 20 66 69 65 6c 64 20 2a 2f 0a 20 20  of a field */.  
10590 69 6e 74 20 73 7a 48 64 72 3b 20 20 20 20 20 20  int szHdr;      
105a0 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 74 68     /* Size of th
105b0 65 20 68 65 61 64 65 72 20 73 69 7a 65 20 66 69  e header size fi
105c0 65 6c 64 20 61 74 20 73 74 61 72 74 20 6f 66 20  eld at start of 
105d0 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20  record */.  int 
105e0 61 76 61 69 6c 3b 20 20 20 20 20 20 20 20 20 2f  avail;         /
105f0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  * Number of byte
10600 73 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 64  s of available d
10610 61 74 61 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 52  ata */.  Mem *pR
10620 65 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 50  eg;         /* P
10630 73 65 75 64 6f 54 61 62 6c 65 20 69 6e 70 75 74  seudoTable input
10640 20 72 65 67 69 73 74 65 72 20 2a 2f 0a 0a 0a 20   register */... 
10650 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20   p1 = pOp->p1;. 
10660 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20   p2 = pOp->p2;. 
10670 20 70 43 20 3d 20 30 3b 0a 20 20 6d 65 6d 73 65   pC = 0;.  memse
10680 74 28 26 73 4d 65 6d 2c 20 30 2c 20 73 69 7a 65  t(&sMem, 0, size
10690 6f 66 28 73 4d 65 6d 29 29 3b 0a 20 20 61 73 73  of(sMem));.  ass
106a0 65 72 74 28 20 70 31 3c 70 2d 3e 6e 43 75 72 73  ert( p1<p->nCurs
106b0 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  or );.  assert( 
106c0 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70  pOp->p3>0 && pOp
106d0 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b  ->p3<=p->nMem );
106e0 0a 20 20 70 44 65 73 74 20 3d 20 26 61 4d 65 6d  .  pDest = &aMem
106f0 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d  [pOp->p3];.  mem
10700 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
10710 20 70 44 65 73 74 29 3b 0a 20 20 4d 65 6d 53 65   pDest);.  MemSe
10720 74 54 79 70 65 46 6c 61 67 28 70 44 65 73 74 2c  tTypeFlag(pDest,
10730 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 7a 52   MEM_Null);.  zR
10740 65 63 20 3d 20 30 3b 0a 0a 20 20 2f 2a 20 54 68  ec = 0;..  /* Th
10750 69 73 20 62 6c 6f 63 6b 20 73 65 74 73 20 74 68  is block sets th
10760 65 20 76 61 72 69 61 62 6c 65 20 70 61 79 6c 6f  e variable paylo
10770 61 64 53 69 7a 65 20 74 6f 20 62 65 20 74 68 65  adSize to be the
10780 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66   total number of
10790 0a 20 20 2a 2a 20 62 79 74 65 73 20 69 6e 20 74  .  ** bytes in t
107a0 68 65 20 72 65 63 6f 72 64 2e 0a 20 20 2a 2a 0a  he record..  **.
107b0 20 20 2a 2a 20 7a 52 65 63 20 69 73 20 73 65 74    ** zRec is set
107c0 20 74 6f 20 62 65 20 74 68 65 20 63 6f 6d 70 6c   to be the compl
107d0 65 74 65 20 74 65 78 74 20 6f 66 20 74 68 65 20  ete text of the 
107e0 72 65 63 6f 72 64 20 69 66 20 69 74 20 69 73 20  record if it is 
107f0 61 76 61 69 6c 61 62 6c 65 2e 0a 20 20 2a 2a 20  available..  ** 
10800 54 68 65 20 63 6f 6d 70 6c 65 74 65 20 72 65 63  The complete rec
10810 6f 72 64 20 74 65 78 74 20 69 73 20 61 6c 77 61  ord text is alwa
10820 79 73 20 61 76 61 69 6c 61 62 6c 65 20 66 6f 72  ys available for
10830 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 73 0a 20   pseudo-tables. 
10840 20 2a 2a 20 49 66 20 74 68 65 20 72 65 63 6f 72   ** If the recor
10850 64 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 61  d is stored in a
10860 20 63 75 72 73 6f 72 2c 20 74 68 65 20 63 6f 6d   cursor, the com
10870 70 6c 65 74 65 20 72 65 63 6f 72 64 20 74 65 78  plete record tex
10880 74 0a 20 20 2a 2a 20 6d 69 67 68 74 20 62 65 20  t.  ** might be 
10890 61 76 61 69 6c 61 62 6c 65 20 69 6e 20 74 68 65  available in the
108a0 20 20 70 43 2d 3e 61 52 6f 77 20 63 61 63 68 65    pC->aRow cache
108b0 2e 20 20 4f 72 20 69 74 20 6d 69 67 68 74 20 6e  .  Or it might n
108c0 6f 74 20 62 65 2e 0a 20 20 2a 2a 20 49 66 20 74  ot be..  ** If t
108d0 68 65 20 64 61 74 61 20 69 73 20 75 6e 61 76 61  he data is unava
108e0 69 6c 61 62 6c 65 2c 20 20 7a 52 65 63 20 69 73  ilable,  zRec is
108f0 20 73 65 74 20 74 6f 20 4e 55 4c 4c 2e 0a 20 20   set to NULL..  
10900 2a 2a 0a 20 20 2a 2a 20 57 65 20 61 6c 73 6f 20  **.  ** We also 
10910 63 6f 6d 70 75 74 65 20 74 68 65 20 6e 75 6d 62  compute the numb
10920 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
10930 20 74 68 65 20 72 65 63 6f 72 64 2e 20 20 46 6f   the record.  Fo
10940 72 20 63 75 72 73 6f 72 73 2c 0a 20 20 2a 2a 20  r cursors,.  ** 
10950 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f  the number of co
10960 6c 75 6d 6e 73 20 69 73 20 73 74 6f 72 65 64 20  lumns is stored 
10970 69 6e 20 74 68 65 20 56 64 62 65 43 75 72 73 6f  in the VdbeCurso
10980 72 2e 6e 46 69 65 6c 64 20 65 6c 65 6d 65 6e 74  r.nField element
10990 2e 0a 20 20 2a 2f 0a 20 20 70 43 20 3d 20 70 2d  ..  */.  pC = p-
109a0 3e 61 70 43 73 72 5b 70 31 5d 3b 0a 20 20 61 73  >apCsr[p1];.  as
109b0 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 23  sert( pC!=0 );.#
109c0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
109d0 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
109e0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 56    assert( pC->pV
109f0 74 61 62 43 75 72 73 6f 72 3d 3d 30 20 29 3b 0a  tabCursor==0 );.
10a00 23 65 6e 64 69 66 0a 20 20 70 43 72 73 72 20 3d  #endif.  pCrsr =
10a10 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20   pC->pCursor;.  
10a20 69 66 28 20 70 43 72 73 72 21 3d 30 20 29 7b 0a  if( pCrsr!=0 ){.
10a30 20 20 20 20 2f 2a 20 54 68 65 20 72 65 63 6f 72      /* The recor
10a40 64 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 61  d is stored in a
10a50 20 42 2d 54 72 65 65 20 2a 2f 0a 20 20 20 20 72   B-Tree */.    r
10a60 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43  c = sqlite3VdbeC
10a70 75 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b  ursorMoveto(pC);
10a80 0a 20 20 20 20 69 66 28 20 72 63 20 29 20 67 6f  .    if( rc ) go
10a90 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
10aa0 65 72 72 6f 72 3b 0a 20 20 20 20 69 66 28 20 70  error;.    if( p
10ab0 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20  C->nullRow ){.  
10ac0 20 20 20 20 70 61 79 6c 6f 61 64 53 69 7a 65 20      payloadSize 
10ad0 3d 20 30 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69  = 0;.    }else i
10ae0 66 28 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74  f( pC->cacheStat
10af0 75 73 3d 3d 70 2d 3e 63 61 63 68 65 43 74 72 20  us==p->cacheCtr 
10b00 29 7b 0a 20 20 20 20 20 20 70 61 79 6c 6f 61 64  ){.      payload
10b10 53 69 7a 65 20 3d 20 70 43 2d 3e 70 61 79 6c 6f  Size = pC->paylo
10b20 61 64 53 69 7a 65 3b 0a 20 20 20 20 20 20 7a 52  adSize;.      zR
10b30 65 63 20 3d 20 28 63 68 61 72 2a 29 70 43 2d 3e  ec = (char*)pC->
10b40 61 52 6f 77 3b 0a 20 20 20 20 7d 65 6c 73 65 20  aRow;.    }else 
10b50 69 66 28 20 70 43 2d 3e 69 73 49 6e 64 65 78 20  if( pC->isIndex 
10b60 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ){.      assert(
10b70 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72   sqlite3BtreeCur
10b80 73 6f 72 49 73 56 61 6c 69 64 28 70 43 72 73 72  sorIsValid(pCrsr
10b90 29 20 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  ) );.      rc = 
10ba0 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79 53  sqlite3BtreeKeyS
10bb0 69 7a 65 28 70 43 72 73 72 2c 20 26 70 61 79 6c  ize(pCrsr, &payl
10bc0 6f 61 64 53 69 7a 65 36 34 29 3b 0a 20 20 20 20  oadSize64);.    
10bd0 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51    assert( rc==SQ
10be0 4c 49 54 45 5f 4f 4b 20 29 3b 20 20 20 2f 2a 20  LITE_OK );   /* 
10bf0 54 72 75 65 20 62 65 63 61 75 73 65 20 6f 66 20  True because of 
10c00 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29 20 63  CursorMoveto() c
10c10 61 6c 6c 20 61 62 6f 76 65 20 2a 2f 0a 20 20 20  all above */.   
10c20 20 20 20 2f 2a 20 73 71 6c 69 74 65 33 42 74 72     /* sqlite3Btr
10c30 65 65 50 61 72 73 65 43 65 6c 6c 50 74 72 28 29  eeParseCellPtr()
10c40 20 75 73 65 73 20 67 65 74 56 61 72 69 6e 74 33   uses getVarint3
10c50 32 28 29 20 74 6f 20 65 78 74 72 61 63 74 20 74  2() to extract t
10c60 68 65 0a 20 20 20 20 20 20 2a 2a 20 70 61 79 6c  he.      ** payl
10c70 6f 61 64 20 73 69 7a 65 2c 20 73 6f 20 69 74 20  oad size, so it 
10c80 69 73 20 69 6d 70 6f 73 73 69 62 6c 65 20 66 6f  is impossible fo
10c90 72 20 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 20  r payloadSize64 
10ca0 74 6f 20 62 65 0a 20 20 20 20 20 20 2a 2a 20 6c  to be.      ** l
10cb0 61 72 67 65 72 20 74 68 61 6e 20 33 32 20 62 69  arger than 32 bi
10cc0 74 73 2e 20 2a 2f 0a 20 20 20 20 20 20 61 73 73  ts. */.      ass
10cd0 65 72 74 28 20 28 70 61 79 6c 6f 61 64 53 69 7a  ert( (payloadSiz
10ce0 65 36 34 20 26 20 53 51 4c 49 54 45 5f 4d 41 58  e64 & SQLITE_MAX
10cf0 5f 55 33 32 29 3d 3d 28 75 36 34 29 70 61 79 6c  _U32)==(u64)payl
10d00 6f 61 64 53 69 7a 65 36 34 20 29 3b 0a 20 20 20  oadSize64 );.   
10d10 20 20 20 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d     payloadSize =
10d20 20 28 75 33 32 29 70 61 79 6c 6f 61 64 53 69 7a   (u32)payloadSiz
10d30 65 36 34 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  e64;.    }else{.
10d40 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71        assert( sq
10d50 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72  lite3BtreeCursor
10d60 49 73 56 61 6c 69 64 28 70 43 72 73 72 29 20 29  IsValid(pCrsr) )
10d70 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  ;.      rc = sql
10d80 69 74 65 33 42 74 72 65 65 44 61 74 61 53 69 7a  ite3BtreeDataSiz
10d90 65 28 70 43 72 73 72 2c 20 26 70 61 79 6c 6f 61  e(pCrsr, &payloa
10da0 64 53 69 7a 65 29 3b 0a 20 20 20 20 20 20 61 73  dSize);.      as
10db0 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45  sert( rc==SQLITE
10dc0 5f 4f 4b 20 29 3b 20 20 20 2f 2a 20 44 61 74 61  _OK );   /* Data
10dd0 53 69 7a 65 28 29 20 63 61 6e 6e 6f 74 20 66 61  Size() cannot fa
10de0 69 6c 20 2a 2f 0a 20 20 20 20 7d 0a 20 20 7d 65  il */.    }.  }e
10df0 6c 73 65 20 69 66 28 20 70 43 2d 3e 70 73 65 75  lse if( pC->pseu
10e00 64 6f 54 61 62 6c 65 52 65 67 3e 30 20 29 7b 0a  doTableReg>0 ){.
10e10 20 20 20 20 70 52 65 67 20 3d 20 26 61 4d 65 6d      pReg = &aMem
10e20 5b 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65  [pC->pseudoTable
10e30 52 65 67 5d 3b 0a 20 20 20 20 61 73 73 65 72 74  Reg];.    assert
10e40 28 20 70 52 65 67 2d 3e 66 6c 61 67 73 20 26 20  ( pReg->flags & 
10e50 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20 20 20  MEM_Blob );.    
10e60 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
10e70 69 64 28 70 52 65 67 29 20 29 3b 0a 20 20 20 20  id(pReg) );.    
10e80 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20 70 52  payloadSize = pR
10e90 65 67 2d 3e 6e 3b 0a 20 20 20 20 7a 52 65 63 20  eg->n;.    zRec 
10ea0 3d 20 70 52 65 67 2d 3e 7a 3b 0a 20 20 20 20 70  = pReg->z;.    p
10eb0 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
10ec0 20 28 70 4f 70 2d 3e 70 35 26 4f 50 46 4c 41 47   (pOp->p5&OPFLAG
10ed0 5f 43 4c 45 41 52 43 41 43 48 45 29 20 3f 20 43  _CLEARCACHE) ? C
10ee0 41 43 48 45 5f 53 54 41 4c 45 20 3a 20 70 2d 3e  ACHE_STALE : p->
10ef0 63 61 63 68 65 43 74 72 3b 0a 20 20 20 20 61 73  cacheCtr;.    as
10f00 73 65 72 74 28 20 70 61 79 6c 6f 61 64 53 69 7a  sert( payloadSiz
10f10 65 3d 3d 30 20 7c 7c 20 7a 52 65 63 21 3d 30 20  e==0 || zRec!=0 
10f20 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
10f30 2f 2a 20 43 6f 6e 73 69 64 65 72 20 74 68 65 20  /* Consider the 
10f40 72 6f 77 20 74 6f 20 62 65 20 4e 55 4c 4c 20 2a  row to be NULL *
10f50 2f 0a 20 20 20 20 70 61 79 6c 6f 61 64 53 69 7a  /.    payloadSiz
10f60 65 20 3d 20 30 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  e = 0;.  }..  /*
10f70 20 49 66 20 70 61 79 6c 6f 61 64 53 69 7a 65 20   If payloadSize 
10f80 69 73 20 30 2c 20 74 68 65 6e 20 6a 75 73 74 20  is 0, then just 
10f90 73 74 6f 72 65 20 61 20 4e 55 4c 4c 20 2a 2f 0a  store a NULL */.
10fa0 20 20 69 66 28 20 70 61 79 6c 6f 61 64 53 69 7a    if( payloadSiz
10fb0 65 3d 3d 30 20 29 7b 0a 20 20 20 20 61 73 73 65  e==0 ){.    asse
10fc0 72 74 28 20 70 44 65 73 74 2d 3e 66 6c 61 67 73  rt( pDest->flags
10fd0 26 4d 45 4d 5f 4e 75 6c 6c 20 29 3b 0a 20 20 20  &MEM_Null );.   
10fe0 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f   goto op_column_
10ff0 6f 75 74 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72  out;.  }.  asser
11000 74 28 20 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51  t( db->aLimit[SQ
11010 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54  LITE_LIMIT_LENGT
11020 48 5d 3e 3d 30 20 29 3b 0a 20 20 69 66 28 20 70  H]>=0 );.  if( p
11030 61 79 6c 6f 61 64 53 69 7a 65 20 3e 20 28 75 33  ayloadSize > (u3
11040 32 29 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c  2)db->aLimit[SQL
11050 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48  ITE_LIMIT_LENGTH
11060 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f  ] ){.    goto to
11070 6f 5f 62 69 67 3b 0a 20 20 7d 0a 0a 20 20 6e 46  o_big;.  }..  nF
11080 69 65 6c 64 20 3d 20 70 43 2d 3e 6e 46 69 65 6c  ield = pC->nFiel
11090 64 3b 0a 20 20 61 73 73 65 72 74 28 20 70 32 3c  d;.  assert( p2<
110a0 6e 46 69 65 6c 64 20 29 3b 0a 0a 20 20 2f 2a 20  nField );..  /* 
110b0 52 65 61 64 20 61 6e 64 20 70 61 72 73 65 20 74  Read and parse t
110c0 68 65 20 74 61 62 6c 65 20 68 65 61 64 65 72 2e  he table header.
110d0 20 20 53 74 6f 72 65 20 74 68 65 20 72 65 73 75    Store the resu
110e0 6c 74 73 20 6f 66 20 74 68 65 20 70 61 72 73 65  lts of the parse
110f0 0a 20 20 2a 2a 20 69 6e 74 6f 20 74 68 65 20 72  .  ** into the r
11100 65 63 6f 72 64 20 68 65 61 64 65 72 20 63 61 63  ecord header cac
11110 68 65 20 66 69 65 6c 64 73 20 6f 66 20 74 68 65  he fields of the
11120 20 63 75 72 73 6f 72 2e 0a 20 20 2a 2f 0a 20 20   cursor..  */.  
11130 61 54 79 70 65 20 3d 20 70 43 2d 3e 61 54 79 70  aType = pC->aTyp
11140 65 3b 0a 20 20 69 66 28 20 70 43 2d 3e 63 61 63  e;.  if( pC->cac
11150 68 65 53 74 61 74 75 73 3d 3d 70 2d 3e 63 61 63  heStatus==p->cac
11160 68 65 43 74 72 20 29 7b 0a 20 20 20 20 61 4f 66  heCtr ){.    aOf
11170 66 73 65 74 20 3d 20 70 43 2d 3e 61 4f 66 66 73  fset = pC->aOffs
11180 65 74 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  et;.  }else{.   
11190 20 61 73 73 65 72 74 28 61 54 79 70 65 29 3b 0a   assert(aType);.
111a0 20 20 20 20 61 76 61 69 6c 20 3d 20 30 3b 0a 20      avail = 0;. 
111b0 20 20 20 70 43 2d 3e 61 4f 66 66 73 65 74 20 3d     pC->aOffset =
111c0 20 61 4f 66 66 73 65 74 20 3d 20 26 61 54 79 70   aOffset = &aTyp
111d0 65 5b 6e 46 69 65 6c 64 5d 3b 0a 20 20 20 20 70  e[nField];.    p
111e0 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d  C->payloadSize =
111f0 20 70 61 79 6c 6f 61 64 53 69 7a 65 3b 0a 20 20   payloadSize;.  
11200 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
11210 73 20 3d 20 70 2d 3e 63 61 63 68 65 43 74 72 3b  s = p->cacheCtr;
11220 0a 0a 20 20 20 20 2f 2a 20 46 69 67 75 72 65 20  ..    /* Figure 
11230 6f 75 74 20 68 6f 77 20 6d 61 6e 79 20 62 79 74  out how many byt
11240 65 73 20 61 72 65 20 69 6e 20 74 68 65 20 68 65  es are in the he
11250 61 64 65 72 20 2a 2f 0a 20 20 20 20 69 66 28 20  ader */.    if( 
11260 7a 52 65 63 20 29 7b 0a 20 20 20 20 20 20 7a 44  zRec ){.      zD
11270 61 74 61 20 3d 20 7a 52 65 63 3b 0a 20 20 20 20  ata = zRec;.    
11280 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 69 66 28  }else{.      if(
11290 20 70 43 2d 3e 69 73 49 6e 64 65 78 20 29 7b 0a   pC->isIndex ){.
112a0 20 20 20 20 20 20 20 20 7a 44 61 74 61 20 3d 20          zData = 
112b0 28 63 68 61 72 2a 29 73 71 6c 69 74 65 33 42 74  (char*)sqlite3Bt
112c0 72 65 65 4b 65 79 46 65 74 63 68 28 70 43 72 73  reeKeyFetch(pCrs
112d0 72 2c 20 26 61 76 61 69 6c 29 3b 0a 20 20 20 20  r, &avail);.    
112e0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
112f0 20 7a 44 61 74 61 20 3d 20 28 63 68 61 72 2a 29   zData = (char*)
11300 73 71 6c 69 74 65 33 42 74 72 65 65 44 61 74 61  sqlite3BtreeData
11310 46 65 74 63 68 28 70 43 72 73 72 2c 20 26 61 76  Fetch(pCrsr, &av
11320 61 69 6c 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  ail);.      }.  
11330 20 20 20 20 2f 2a 20 49 66 20 4b 65 79 46 65 74      /* If KeyFet
11340 63 68 28 29 2f 44 61 74 61 46 65 74 63 68 28 29  ch()/DataFetch()
11350 20 6d 61 6e 61 67 65 64 20 74 6f 20 67 65 74 20   managed to get 
11360 74 68 65 20 65 6e 74 69 72 65 20 70 61 79 6c 6f  the entire paylo
11370 61 64 2c 0a 20 20 20 20 20 20 2a 2a 20 73 61 76  ad,.      ** sav
11380 65 20 74 68 65 20 70 61 79 6c 6f 61 64 20 69 6e  e the payload in
11390 20 74 68 65 20 70 43 2d 3e 61 52 6f 77 20 63 61   the pC->aRow ca
113a0 63 68 65 2e 20 20 54 68 61 74 20 77 69 6c 6c 20  che.  That will 
113b0 73 61 76 65 20 75 73 20 66 72 6f 6d 0a 20 20 20  save us from.   
113c0 20 20 20 2a 2a 20 68 61 76 69 6e 67 20 74 6f 20     ** having to 
113d0 6d 61 6b 65 20 61 64 64 69 74 69 6f 6e 61 6c 20  make additional 
113e0 63 61 6c 6c 73 20 74 6f 20 66 65 74 63 68 20 74  calls to fetch t
113f0 68 65 20 63 6f 6e 74 65 6e 74 20 70 6f 72 74 69  he content porti
11400 6f 6e 20 6f 66 0a 20 20 20 20 20 20 2a 2a 20 74  on of.      ** t
11410 68 65 20 72 65 63 6f 72 64 2e 0a 20 20 20 20 20  he record..     
11420 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74   */.      assert
11430 28 20 61 76 61 69 6c 3e 3d 30 20 29 3b 0a 20 20  ( avail>=0 );.  
11440 20 20 20 20 69 66 28 20 70 61 79 6c 6f 61 64 53      if( payloadS
11450 69 7a 65 20 3c 3d 20 28 75 33 32 29 61 76 61 69  ize <= (u32)avai
11460 6c 20 29 7b 0a 20 20 20 20 20 20 20 20 7a 52 65  l ){.        zRe
11470 63 20 3d 20 7a 44 61 74 61 3b 0a 20 20 20 20 20  c = zData;.     
11480 20 20 20 70 43 2d 3e 61 52 6f 77 20 3d 20 28 75     pC->aRow = (u
11490 38 2a 29 7a 44 61 74 61 3b 0a 20 20 20 20 20 20  8*)zData;.      
114a0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 70  }else{.        p
114b0 43 2d 3e 61 52 6f 77 20 3d 20 30 3b 0a 20 20 20  C->aRow = 0;.   
114c0 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 2f     }.    }.    /
114d0 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
114e0 61 73 73 65 72 74 20 69 73 20 74 72 75 65 20 69  assert is true i
114f0 6e 20 61 6c 6c 20 63 61 73 65 73 20 61 63 63 65  n all cases acce
11500 70 74 20 77 68 65 6e 0a 20 20 20 20 2a 2a 20 74  pt when.    ** t
11510 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
11520 20 68 61 73 20 62 65 65 6e 20 63 6f 72 72 75 70   has been corrup
11530 74 65 64 20 65 78 74 65 72 6e 61 6c 6c 79 2e 0a  ted externally..
11540 20 20 20 20 2a 2a 20 20 20 20 61 73 73 65 72 74      **    assert
11550 28 20 7a 52 65 63 21 3d 30 20 7c 7c 20 61 76 61  ( zRec!=0 || ava
11560 69 6c 3e 3d 70 61 79 6c 6f 61 64 53 69 7a 65 20  il>=payloadSize 
11570 7c 7c 20 61 76 61 69 6c 3e 3d 39 20 29 3b 20 2a  || avail>=9 ); *
11580 2f 0a 20 20 20 20 73 7a 48 64 72 20 3d 20 67 65  /.    szHdr = ge
11590 74 56 61 72 69 6e 74 33 32 28 28 75 38 2a 29 7a  tVarint32((u8*)z
115a0 44 61 74 61 2c 20 6f 66 66 73 65 74 29 3b 0a 0a  Data, offset);..
115b0 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65      /* Make sure
115c0 20 61 20 63 6f 72 72 75 70 74 20 64 61 74 61 62   a corrupt datab
115d0 61 73 65 20 68 61 73 20 6e 6f 74 20 67 69 76 65  ase has not give
115e0 6e 20 75 73 20 61 6e 20 6f 76 65 72 73 69 7a 65  n us an oversize
115f0 20 68 65 61 64 65 72 2e 0a 20 20 20 20 2a 2a 20   header..    ** 
11600 44 6f 20 74 68 69 73 20 6e 6f 77 20 74 6f 20 61  Do this now to a
11610 76 6f 69 64 20 61 6e 20 6f 76 65 72 73 69 7a 65  void an oversize
11620 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
11630 6f 6e 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a  on..    **.    *
11640 2a 20 54 79 70 65 20 65 6e 74 72 69 65 73 20 63  * Type entries c
11650 61 6e 20 62 65 20 62 65 74 77 65 65 6e 20 31 20  an be between 1 
11660 61 6e 64 20 35 20 62 79 74 65 73 20 65 61 63 68  and 5 bytes each
11670 2e 20 20 42 75 74 20 34 20 61 6e 64 20 35 20 62  .  But 4 and 5 b
11680 79 74 65 0a 20 20 20 20 2a 2a 20 74 79 70 65 73  yte.    ** types
11690 20 75 73 65 20 73 6f 20 6d 75 63 68 20 64 61 74   use so much dat
116a0 61 20 73 70 61 63 65 20 74 68 61 74 20 74 68 65  a space that the
116b0 72 65 20 63 61 6e 20 6f 6e 6c 79 20 62 65 20 34  re can only be 4
116c0 30 39 36 20 61 6e 64 20 33 32 20 6f 66 0a 20 20  096 and 32 of.  
116d0 20 20 2a 2a 20 74 68 65 6d 2c 20 72 65 73 70 65    ** them, respe
116e0 63 74 69 76 65 6c 79 2e 20 20 53 6f 20 74 68 65  ctively.  So the
116f0 20 6d 61 78 69 6d 75 6d 20 68 65 61 64 65 72 20   maximum header 
11700 6c 65 6e 67 74 68 20 72 65 73 75 6c 74 73 20 66  length results f
11710 72 6f 6d 20 61 0a 20 20 20 20 2a 2a 20 33 2d 62  rom a.    ** 3-b
11720 79 74 65 20 74 79 70 65 20 66 6f 72 20 65 61 63  yte type for eac
11730 68 20 6f 66 20 74 68 65 20 6d 61 78 69 6d 75 6d  h of the maximum
11740 20 6f 66 20 33 32 37 36 38 20 63 6f 6c 75 6d 6e   of 32768 column
11750 73 20 70 6c 75 73 20 74 68 72 65 65 0a 20 20 20  s plus three.   
11760 20 2a 2a 20 65 78 74 72 61 20 62 79 74 65 73 20   ** extra bytes 
11770 66 6f 72 20 74 68 65 20 68 65 61 64 65 72 20 6c  for the header l
11780 65 6e 67 74 68 20 69 74 73 65 6c 66 2e 20 20 33  ength itself.  3
11790 32 37 36 38 2a 33 20 2b 20 33 20 3d 20 39 38 33  2768*3 + 3 = 983
117a0 30 37 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69  07..    */.    i
117b0 66 28 20 6f 66 66 73 65 74 20 3e 20 39 38 33 30  f( offset > 9830
117c0 37 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20  7 ){.      rc = 
117d0 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 42  SQLITE_CORRUPT_B
117e0 4b 50 54 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20  KPT;.      goto 
117f0 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20  op_column_out;. 
11800 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 20 43 6f 6d     }..    /* Com
11810 70 75 74 65 20 69 6e 20 6c 65 6e 20 74 68 65 20  pute in len the 
11820 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20  number of bytes 
11830 6f 66 20 64 61 74 61 20 77 65 20 6e 65 65 64 20  of data we need 
11840 74 6f 20 72 65 61 64 20 69 6e 20 6f 72 64 65 72  to read in order
11850 0a 20 20 20 20 2a 2a 20 74 6f 20 67 65 74 20 6e  .    ** to get n
11860 46 69 65 6c 64 20 74 79 70 65 20 76 61 6c 75 65  Field type value
11870 73 2e 20 20 6f 66 66 73 65 74 20 69 73 20 61 6e  s.  offset is an
11880 20 75 70 70 65 72 20 62 6f 75 6e 64 20 6f 6e 20   upper bound on 
11890 74 68 69 73 2e 20 20 42 75 74 0a 20 20 20 20 2a  this.  But.    *
118a0 2a 20 6e 46 69 65 6c 64 20 6d 69 67 68 74 20 62  * nField might b
118b0 65 20 73 69 67 6e 69 66 69 63 61 6e 74 6c 79 20  e significantly 
118c0 6c 65 73 73 20 74 68 61 6e 20 74 68 65 20 74 72  less than the tr
118d0 75 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  ue number of col
118e0 75 6d 6e 73 0a 20 20 20 20 2a 2a 20 69 6e 20 74  umns.    ** in t
118f0 68 65 20 74 61 62 6c 65 2c 20 61 6e 64 20 69 6e  he table, and in
11900 20 74 68 61 74 20 63 61 73 65 2c 20 35 2a 6e 46   that case, 5*nF
11910 69 65 6c 64 2b 33 20 6d 69 67 68 74 20 62 65 20  ield+3 might be 
11920 73 6d 61 6c 6c 65 72 20 74 68 61 6e 20 6f 66 66  smaller than off
11930 73 65 74 2e 0a 20 20 20 20 2a 2a 20 57 65 20 77  set..    ** We w
11940 61 6e 74 20 74 6f 20 6d 69 6e 69 6d 69 7a 65 20  ant to minimize 
11950 6c 65 6e 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  len in order to 
11960 6c 69 6d 69 74 20 74 68 65 20 73 69 7a 65 20 6f  limit the size o
11970 66 20 74 68 65 20 6d 65 6d 6f 72 79 0a 20 20 20  f the memory.   
11980 20 2a 2a 20 61 6c 6c 6f 63 61 74 69 6f 6e 2c 20   ** allocation, 
11990 65 73 70 65 63 69 61 6c 6c 79 20 69 66 20 61 20  especially if a 
119a0 63 6f 72 72 75 70 74 20 64 61 74 61 62 61 73 65  corrupt database
119b0 20 66 69 6c 65 20 68 61 73 20 63 61 75 73 65 64   file has caused
119c0 20 6f 66 66 73 65 74 0a 20 20 20 20 2a 2a 20 74   offset.    ** t
119d0 6f 20 62 65 20 6f 76 65 72 73 69 7a 65 64 2e 20  o be oversized. 
119e0 4f 66 66 73 65 74 20 69 73 20 6c 69 6d 69 74 65  Offset is limite
119f0 64 20 74 6f 20 39 38 33 30 37 20 61 62 6f 76 65  d to 98307 above
11a00 2e 20 20 42 75 74 20 39 38 33 30 37 20 6d 69 67  .  But 98307 mig
11a10 68 74 0a 20 20 20 20 2a 2a 20 73 74 69 6c 6c 20  ht.    ** still 
11a20 65 78 63 65 65 64 20 52 6f 62 73 6f 6e 20 6d 65  exceed Robson me
11a30 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20  mory allocation 
11a40 6c 69 6d 69 74 73 20 6f 6e 20 73 6f 6d 65 20 63  limits on some c
11a50 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73 2e 0a 20  onfigurations.. 
11a60 20 20 20 2a 2a 20 4f 6e 20 73 79 73 74 65 6d 73     ** On systems
11a70 20 74 68 61 74 20 63 61 6e 6e 6f 74 20 74 6f 6c   that cannot tol
11a80 65 72 61 74 65 20 6c 61 72 67 65 20 6d 65 6d 6f  erate large memo
11a90 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 2c 20  ry allocations, 
11aa0 6e 46 69 65 6c 64 2a 35 2b 33 0a 20 20 20 20 2a  nField*5+3.    *
11ab0 2a 20 77 69 6c 6c 20 6c 69 6b 65 6c 79 20 62 65  * will likely be
11ac0 20 6d 75 63 68 20 73 6d 61 6c 6c 65 72 20 73 69   much smaller si
11ad0 6e 63 65 20 6e 46 69 65 6c 64 20 77 69 6c 6c 20  nce nField will 
11ae0 6c 69 6b 65 6c 79 20 62 65 20 6c 65 73 73 20 74  likely be less t
11af0 68 61 6e 0a 20 20 20 20 2a 2a 20 32 30 20 6f 72  han.    ** 20 or
11b00 20 73 6f 2e 20 20 54 68 69 73 20 69 6e 73 75 72   so.  This insur
11b10 65 73 20 74 68 61 74 20 52 6f 62 73 6f 6e 20 6d  es that Robson m
11b20 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e  emory allocation
11b30 20 6c 69 6d 69 74 73 20 61 72 65 0a 20 20 20 20   limits are.    
11b40 2a 2a 20 6e 6f 74 20 65 78 63 65 65 64 65 64 20  ** not exceeded 
11b50 65 76 65 6e 20 66 6f 72 20 63 6f 72 72 75 70 74  even for corrupt
11b60 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 73 2e   database files.
11b70 0a 20 20 20 20 2a 2f 0a 20 20 20 20 6c 65 6e 20  .    */.    len 
11b80 3d 20 6e 46 69 65 6c 64 2a 35 20 2b 20 33 3b 0a  = nField*5 + 3;.
11b90 20 20 20 20 69 66 28 20 6c 65 6e 20 3e 20 28 69      if( len > (i
11ba0 6e 74 29 6f 66 66 73 65 74 20 29 20 6c 65 6e 20  nt)offset ) len 
11bb0 3d 20 28 69 6e 74 29 6f 66 66 73 65 74 3b 0a 0a  = (int)offset;..
11bc0 20 20 20 20 2f 2a 20 54 68 65 20 4b 65 79 46 65      /* The KeyFe
11bd0 74 63 68 28 29 20 6f 72 20 44 61 74 61 46 65 74  tch() or DataFet
11be0 63 68 28 29 20 61 62 6f 76 65 20 61 72 65 20 66  ch() above are f
11bf0 61 73 74 20 61 6e 64 20 77 69 6c 6c 20 67 65 74  ast and will get
11c00 20 74 68 65 20 65 6e 74 69 72 65 0a 20 20 20 20   the entire.    
11c10 2a 2a 20 72 65 63 6f 72 64 20 68 65 61 64 65 72  ** record header
11c20 20 69 6e 20 6d 6f 73 74 20 63 61 73 65 73 2e 20   in most cases. 
11c30 20 42 75 74 20 74 68 65 79 20 77 69 6c 6c 20 66   But they will f
11c40 61 69 6c 20 74 6f 20 67 65 74 20 74 68 65 20 63  ail to get the c
11c50 6f 6d 70 6c 65 74 65 0a 20 20 20 20 2a 2a 20 72  omplete.    ** r
11c60 65 63 6f 72 64 20 68 65 61 64 65 72 20 69 66 20  ecord header if 
11c70 74 68 65 20 72 65 63 6f 72 64 20 68 65 61 64 65  the record heade
11c80 72 20 64 6f 65 73 20 6e 6f 74 20 66 69 74 20 6f  r does not fit o
11c90 6e 20 61 20 73 69 6e 67 6c 65 20 70 61 67 65 0a  n a single page.
11ca0 20 20 20 20 2a 2a 20 69 6e 20 74 68 65 20 42 2d      ** in the B-
11cb0 54 72 65 65 2e 20 20 57 68 65 6e 20 74 68 61 74  Tree.  When that
11cc0 20 68 61 70 70 65 6e 73 2c 20 75 73 65 20 73 71   happens, use sq
11cd0 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d  lite3VdbeMemFrom
11ce0 42 74 72 65 65 28 29 20 74 6f 0a 20 20 20 20 2a  Btree() to.    *
11cf0 2a 20 61 63 71 75 69 72 65 20 74 68 65 20 63 6f  * acquire the co
11d00 6d 70 6c 65 74 65 20 68 65 61 64 65 72 20 74 65  mplete header te
11d10 78 74 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69  xt..    */.    i
11d20 66 28 20 21 7a 52 65 63 20 26 26 20 61 76 61 69  f( !zRec && avai
11d30 6c 3c 6c 65 6e 20 29 7b 0a 20 20 20 20 20 20 73  l<len ){.      s
11d40 4d 65 6d 2e 66 6c 61 67 73 20 3d 20 30 3b 0a 20  Mem.flags = 0;. 
11d50 20 20 20 20 20 73 4d 65 6d 2e 64 62 20 3d 20 30       sMem.db = 0
11d60 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  ;.      rc = sql
11d70 69 74 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d 42  ite3VdbeMemFromB
11d80 74 72 65 65 28 70 43 72 73 72 2c 20 30 2c 20 6c  tree(pCrsr, 0, l
11d90 65 6e 2c 20 70 43 2d 3e 69 73 49 6e 64 65 78 2c  en, pC->isIndex,
11da0 20 26 73 4d 65 6d 29 3b 0a 20 20 20 20 20 20 69   &sMem);.      i
11db0 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
11dc0 20 29 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f   ){.        goto
11dd0 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a   op_column_out;.
11de0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7a 44        }.      zD
11df0 61 74 61 20 3d 20 73 4d 65 6d 2e 7a 3b 0a 20 20  ata = sMem.z;.  
11e00 20 20 7d 0a 20 20 20 20 7a 45 6e 64 48 64 72 20    }.    zEndHdr 
11e10 3d 20 28 75 38 20 2a 29 26 7a 44 61 74 61 5b 6c  = (u8 *)&zData[l
11e20 65 6e 5d 3b 0a 20 20 20 20 7a 49 64 78 20 3d 20  en];.    zIdx = 
11e30 28 75 38 20 2a 29 26 7a 44 61 74 61 5b 73 7a 48  (u8 *)&zData[szH
11e40 64 72 5d 3b 0a 0a 20 20 20 20 2f 2a 20 53 63 61  dr];..    /* Sca
11e50 6e 20 74 68 65 20 68 65 61 64 65 72 20 61 6e 64  n the header and
11e60 20 75 73 65 20 69 74 20 74 6f 20 66 69 6c 6c 20   use it to fill 
11e70 69 6e 20 74 68 65 20 61 54 79 70 65 5b 5d 20 61  in the aType[] a
11e80 6e 64 20 61 4f 66 66 73 65 74 5b 5d 0a 20 20 20  nd aOffset[].   
11e90 20 2a 2a 20 61 72 72 61 79 73 2e 20 20 61 54 79   ** arrays.  aTy
11ea0 70 65 5b 69 5d 20 77 69 6c 6c 20 63 6f 6e 74 61  pe[i] will conta
11eb0 69 6e 20 74 68 65 20 74 79 70 65 20 69 6e 74 65  in the type inte
11ec0 67 65 72 20 66 6f 72 20 74 68 65 20 69 2d 74 68  ger for the i-th
11ed0 0a 20 20 20 20 2a 2a 20 63 6f 6c 75 6d 6e 20 61  .    ** column a
11ee0 6e 64 20 61 4f 66 66 73 65 74 5b 69 5d 20 77 69  nd aOffset[i] wi
11ef0 6c 6c 20 63 6f 6e 74 61 69 6e 20 74 68 65 20 6f  ll contain the o
11f00 66 66 73 65 74 20 66 72 6f 6d 20 74 68 65 20 62  ffset from the b
11f10 65 67 69 6e 6e 69 6e 67 0a 20 20 20 20 2a 2a 20  eginning.    ** 
11f20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f  of the record to
11f30 20 74 68 65 20 73 74 61 72 74 20 6f 66 20 74 68   the start of th
11f40 65 20 64 61 74 61 20 66 6f 72 20 74 68 65 20 69  e data for the i
11f50 2d 74 68 20 63 6f 6c 75 6d 6e 0a 20 20 20 20 2a  -th column.    *
11f60 2f 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69  /.    for(i=0; i
11f70 3c 6e 46 69 65 6c 64 3b 20 69 2b 2b 29 7b 0a 20  <nField; i++){. 
11f80 20 20 20 20 20 69 66 28 20 7a 49 64 78 3c 7a 45       if( zIdx<zE
11f90 6e 64 48 64 72 20 29 7b 0a 20 20 20 20 20 20 20  ndHdr ){.       
11fa0 20 61 4f 66 66 73 65 74 5b 69 5d 20 3d 20 6f 66   aOffset[i] = of
11fb0 66 73 65 74 3b 0a 20 20 20 20 20 20 20 20 7a 49  fset;.        zI
11fc0 64 78 20 2b 3d 20 67 65 74 56 61 72 69 6e 74 33  dx += getVarint3
11fd0 32 28 7a 49 64 78 2c 20 61 54 79 70 65 5b 69 5d  2(zIdx, aType[i]
11fe0 29 3b 0a 20 20 20 20 20 20 20 20 73 7a 46 69 65  );.        szFie
11ff0 6c 64 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  ld = sqlite3Vdbe
12000 53 65 72 69 61 6c 54 79 70 65 4c 65 6e 28 61 54  SerialTypeLen(aT
12010 79 70 65 5b 69 5d 29 3b 0a 20 20 20 20 20 20 20  ype[i]);.       
12020 20 6f 66 66 73 65 74 20 2b 3d 20 73 7a 46 69 65   offset += szFie
12030 6c 64 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  ld;.        if( 
12040 6f 66 66 73 65 74 3c 73 7a 46 69 65 6c 64 20 29  offset<szField )
12050 7b 20 20 2f 2a 20 54 72 75 65 20 69 66 20 6f 66  {  /* True if of
12060 66 73 65 74 20 6f 76 65 72 66 6c 6f 77 73 20 2a  fset overflows *
12070 2f 0a 20 20 20 20 20 20 20 20 20 20 7a 49 64 78  /.          zIdx
12080 20 3d 20 26 7a 45 6e 64 48 64 72 5b 31 5d 3b 20   = &zEndHdr[1]; 
12090 20 2f 2a 20 46 6f 72 63 65 73 20 53 51 4c 49 54   /* Forces SQLIT
120a0 45 5f 43 4f 52 52 55 50 54 20 72 65 74 75 72 6e  E_CORRUPT return
120b0 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 20 20 20 20   below */.      
120c0 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
120d0 20 20 20 7d 0a 20 20 20 20 20 20 7d 65 6c 73 65     }.      }else
120e0 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20  {.        /* If 
120f0 69 20 69 73 20 6c 65 73 73 20 74 68 61 74 20 6e  i is less that n
12100 46 69 65 6c 64 2c 20 74 68 65 6e 20 74 68 65 72  Field, then ther
12110 65 20 61 72 65 20 6c 65 73 73 20 66 69 65 6c 64  e are less field
12120 73 20 69 6e 20 74 68 69 73 0a 20 20 20 20 20 20  s in this.      
12130 20 20 2a 2a 20 72 65 63 6f 72 64 20 74 68 61 6e    ** record than
12140 20 53 65 74 4e 75 6d 43 6f 6c 75 6d 6e 73 20 69   SetNumColumns i
12150 6e 64 69 63 61 74 65 64 20 74 68 65 72 65 20 61  ndicated there a
12160 72 65 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  re columns in th
12170 65 0a 20 20 20 20 20 20 20 20 2a 2a 20 74 61 62  e.        ** tab
12180 6c 65 2e 20 53 65 74 20 74 68 65 20 6f 66 66 73  le. Set the offs
12190 65 74 20 66 6f 72 20 61 6e 79 20 65 78 74 72 61  et for any extra
121a0 20 63 6f 6c 75 6d 6e 73 20 6e 6f 74 20 70 72 65   columns not pre
121b0 73 65 6e 74 20 69 6e 0a 20 20 20 20 20 20 20 20  sent in.        
121c0 2a 2a 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f  ** the record to
121d0 20 30 2e 20 54 68 69 73 20 74 65 6c 6c 73 20 63   0. This tells c
121e0 6f 64 65 20 62 65 6c 6f 77 20 74 6f 20 73 74 6f  ode below to sto
121f0 72 65 20 61 20 4e 55 4c 4c 0a 20 20 20 20 20 20  re a NULL.      
12200 20 20 2a 2a 20 69 6e 73 74 65 61 64 20 6f 66 20    ** instead of 
12210 64 65 73 65 72 69 61 6c 69 7a 69 6e 67 20 61 20  deserializing a 
12220 76 61 6c 75 65 20 66 72 6f 6d 20 74 68 65 20 72  value from the r
12230 65 63 6f 72 64 2e 0a 20 20 20 20 20 20 20 20 2a  ecord..        *
12240 2f 0a 20 20 20 20 20 20 20 20 61 4f 66 66 73 65  /.        aOffse
12250 74 5b 69 5d 20 3d 20 30 3b 0a 20 20 20 20 20 20  t[i] = 0;.      
12260 7d 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69  }.    }.    sqli
12270 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73  te3VdbeMemReleas
12280 65 28 26 73 4d 65 6d 29 3b 0a 20 20 20 20 73 4d  e(&sMem);.    sM
12290 65 6d 2e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e  em.flags = MEM_N
122a0 75 6c 6c 3b 0a 0a 20 20 20 20 2f 2a 20 49 66 20  ull;..    /* If 
122b0 77 65 20 68 61 76 65 20 72 65 61 64 20 6d 6f 72  we have read mor
122c0 65 20 68 65 61 64 65 72 20 64 61 74 61 20 74 68  e header data th
122d0 61 6e 20 77 61 73 20 63 6f 6e 74 61 69 6e 65 64  an was contained
122e0 20 69 6e 20 74 68 65 20 68 65 61 64 65 72 2c 0a   in the header,.
122f0 20 20 20 20 2a 2a 20 6f 72 20 69 66 20 74 68 65      ** or if the
12300 20 65 6e 64 20 6f 66 20 74 68 65 20 6c 61 73 74   end of the last
12310 20 66 69 65 6c 64 20 61 70 70 65 61 72 73 20 74   field appears t
12320 6f 20 62 65 20 70 61 73 74 20 74 68 65 20 65 6e  o be past the en
12330 64 20 6f 66 20 74 68 65 0a 20 20 20 20 2a 2a 20  d of the.    ** 
12340 72 65 63 6f 72 64 2c 20 6f 72 20 69 66 20 74 68  record, or if th
12350 65 20 65 6e 64 20 6f 66 20 74 68 65 20 6c 61 73  e end of the las
12360 74 20 66 69 65 6c 64 20 61 70 70 65 61 72 73 20  t field appears 
12370 74 6f 20 62 65 20 62 65 66 6f 72 65 20 74 68 65  to be before the
12380 20 65 6e 64 0a 20 20 20 20 2a 2a 20 6f 66 20 74   end.    ** of t
12390 68 65 20 72 65 63 6f 72 64 20 28 77 68 65 6e 20  he record (when 
123a0 61 6c 6c 20 66 69 65 6c 64 73 20 70 72 65 73 65  all fields prese
123b0 6e 74 29 2c 20 74 68 65 6e 20 77 65 20 6d 75 73  nt), then we mus
123c0 74 20 62 65 20 64 65 61 6c 69 6e 67 20 0a 20 20  t be dealing .  
123d0 20 20 2a 2a 20 77 69 74 68 20 61 20 63 6f 72 72    ** with a corr
123e0 75 70 74 20 64 61 74 61 62 61 73 65 2e 0a 20 20  upt database..  
123f0 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 28 7a 49    */.    if( (zI
12400 64 78 20 3e 20 7a 45 6e 64 48 64 72 29 20 7c 7c  dx > zEndHdr) ||
12410 20 28 6f 66 66 73 65 74 20 3e 20 70 61 79 6c 6f   (offset > paylo
12420 61 64 53 69 7a 65 29 0a 20 20 20 20 20 20 20 20  adSize).        
12430 20 7c 7c 20 28 7a 49 64 78 3d 3d 7a 45 6e 64 48   || (zIdx==zEndH
12440 64 72 20 26 26 20 6f 66 66 73 65 74 21 3d 70 61  dr && offset!=pa
12450 79 6c 6f 61 64 53 69 7a 65 29 20 29 7b 0a 20 20  yloadSize) ){.  
12460 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
12470 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20  CORRUPT_BKPT;.  
12480 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75      goto op_colu
12490 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20 7d 0a 20 20  mn_out;.    }.  
124a0 7d 0a 0a 20 20 2f 2a 20 47 65 74 20 74 68 65 20  }..  /* Get the 
124b0 63 6f 6c 75 6d 6e 20 69 6e 66 6f 72 6d 61 74 69  column informati
124c0 6f 6e 2e 20 49 66 20 61 4f 66 66 73 65 74 5b 70  on. If aOffset[p
124d0 32 5d 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20  2] is non-zero, 
124e0 74 68 65 6e 20 0a 20 20 2a 2a 20 64 65 73 65 72  then .  ** deser
124f0 69 61 6c 69 7a 65 20 74 68 65 20 76 61 6c 75 65  ialize the value
12500 20 66 72 6f 6d 20 74 68 65 20 72 65 63 6f 72 64   from the record
12510 2e 20 49 66 20 61 4f 66 66 73 65 74 5b 70 32 5d  . If aOffset[p2]
12520 20 69 73 20 7a 65 72 6f 2c 0a 20 20 2a 2a 20 74   is zero,.  ** t
12530 68 65 6e 20 74 68 65 72 65 20 61 72 65 20 6e 6f  hen there are no
12540 74 20 65 6e 6f 75 67 68 20 66 69 65 6c 64 73 20  t enough fields 
12550 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f  in the record to
12560 20 73 61 74 69 73 66 79 20 74 68 65 0a 20 20 2a   satisfy the.  *
12570 2a 20 72 65 71 75 65 73 74 2e 20 20 49 6e 20 74  * request.  In t
12580 68 69 73 20 63 61 73 65 2c 20 73 65 74 20 74 68  his case, set th
12590 65 20 76 61 6c 75 65 20 4e 55 4c 4c 20 6f 72 20  e value NULL or 
125a0 74 6f 20 50 34 20 69 66 20 50 34 20 69 73 0a 20  to P4 if P4 is. 
125b0 20 2a 2a 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   ** a pointer to
125c0 20 61 20 4d 65 6d 20 6f 62 6a 65 63 74 2e 0a 20   a Mem object.. 
125d0 20 2a 2f 0a 20 20 69 66 28 20 61 4f 66 66 73 65   */.  if( aOffse
125e0 74 5b 70 32 5d 20 29 7b 0a 20 20 20 20 61 73 73  t[p2] ){.    ass
125f0 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f  ert( rc==SQLITE_
12600 4f 4b 20 29 3b 0a 20 20 20 20 69 66 28 20 7a 52  OK );.    if( zR
12610 65 63 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  ec ){.      sqli
12620 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73  te3VdbeMemReleas
12630 65 45 78 74 65 72 6e 61 6c 28 70 44 65 73 74 29  eExternal(pDest)
12640 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
12650 64 62 65 53 65 72 69 61 6c 47 65 74 28 28 75 38  dbeSerialGet((u8
12660 20 2a 29 26 7a 52 65 63 5b 61 4f 66 66 73 65 74   *)&zRec[aOffset
12670 5b 70 32 5d 5d 2c 20 61 54 79 70 65 5b 70 32 5d  [p2]], aType[p2]
12680 2c 20 70 44 65 73 74 29 3b 0a 20 20 20 20 7d 65  , pDest);.    }e
12690 6c 73 65 7b 0a 20 20 20 20 20 20 6c 65 6e 20 3d  lse{.      len =
126a0 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69   sqlite3VdbeSeri
126b0 61 6c 54 79 70 65 4c 65 6e 28 61 54 79 70 65 5b  alTypeLen(aType[
126c0 70 32 5d 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  p2]);.      sqli
126d0 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28 26  te3VdbeMemMove(&
126e0 73 4d 65 6d 2c 20 70 44 65 73 74 29 3b 0a 20 20  sMem, pDest);.  
126f0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
12700 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65  VdbeMemFromBtree
12710 28 70 43 72 73 72 2c 20 61 4f 66 66 73 65 74 5b  (pCrsr, aOffset[
12720 70 32 5d 2c 20 6c 65 6e 2c 20 70 43 2d 3e 69 73  p2], len, pC->is
12730 49 6e 64 65 78 2c 20 26 73 4d 65 6d 29 3b 0a 20  Index, &sMem);. 
12740 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c       if( rc!=SQL
12750 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
12760 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e    goto op_column
12770 5f 6f 75 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20  _out;.      }.  
12780 20 20 20 20 7a 44 61 74 61 20 3d 20 73 4d 65 6d      zData = sMem
12790 2e 7a 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  .z;.      sqlite
127a0 33 56 64 62 65 53 65 72 69 61 6c 47 65 74 28 28  3VdbeSerialGet((
127b0 75 38 2a 29 7a 44 61 74 61 2c 20 61 54 79 70 65  u8*)zData, aType
127c0 5b 70 32 5d 2c 20 70 44 65 73 74 29 3b 0a 20 20  [p2], pDest);.  
127d0 20 20 7d 0a 20 20 20 20 70 44 65 73 74 2d 3e 65    }.    pDest->e
127e0 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 20  nc = encoding;. 
127f0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69 66 28 20   }else{.    if( 
12800 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
12810 4d 45 4d 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  MEM ){.      sql
12820 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c  ite3VdbeMemShall
12830 6f 77 43 6f 70 79 28 70 44 65 73 74 2c 20 70 4f  owCopy(pDest, pO
12840 70 2d 3e 70 34 2e 70 4d 65 6d 2c 20 4d 45 4d 5f  p->p4.pMem, MEM_
12850 53 74 61 74 69 63 29 3b 0a 20 20 20 20 7d 65 6c  Static);.    }el
12860 73 65 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74  se{.      assert
12870 28 20 70 44 65 73 74 2d 3e 66 6c 61 67 73 26 4d  ( pDest->flags&M
12880 45 4d 5f 4e 75 6c 6c 20 29 3b 0a 20 20 20 20 7d  EM_Null );.    }
12890 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20 77 65  .  }..  /* If we
128a0 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c   dynamically all
128b0 6f 63 61 74 65 64 20 73 70 61 63 65 20 74 6f 20  ocated space to 
128c0 68 6f 6c 64 20 74 68 65 20 64 61 74 61 20 28 69  hold the data (i
128d0 6e 20 74 68 65 0a 20 20 2a 2a 20 73 71 6c 69 74  n the.  ** sqlit
128e0 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72  e3VdbeMemFromBtr
128f0 65 65 28 29 20 63 61 6c 6c 20 61 62 6f 76 65 29  ee() call above)
12900 20 74 68 65 6e 20 74 72 61 6e 73 66 65 72 20 63   then transfer c
12910 6f 6e 74 72 6f 6c 20 6f 66 20 74 68 61 74 0a 20  ontrol of that. 
12920 20 2a 2a 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20   ** dynamically 
12930 61 6c 6c 6f 63 61 74 65 64 20 73 70 61 63 65 20  allocated space 
12940 6f 76 65 72 20 74 6f 20 74 68 65 20 70 44 65 73  over to the pDes
12950 74 20 73 74 72 75 63 74 75 72 65 2e 0a 20 20 2a  t structure..  *
12960 2a 20 54 68 69 73 20 70 72 65 76 65 6e 74 73 20  * This prevents 
12970 61 20 6d 65 6d 6f 72 79 20 63 6f 70 79 2e 0a 20  a memory copy.. 
12980 20 2a 2f 0a 20 20 69 66 28 20 73 4d 65 6d 2e 7a   */.  if( sMem.z
12990 4d 61 6c 6c 6f 63 20 29 7b 0a 20 20 20 20 61 73  Malloc ){.    as
129a0 73 65 72 74 28 20 73 4d 65 6d 2e 7a 3d 3d 73 4d  sert( sMem.z==sM
129b0 65 6d 2e 7a 4d 61 6c 6c 6f 63 20 29 3b 0a 20 20  em.zMalloc );.  
129c0 20 20 61 73 73 65 72 74 28 20 21 28 70 44 65 73    assert( !(pDes
129d0 74 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 44  t->flags & MEM_D
129e0 79 6e 29 20 29 3b 0a 20 20 20 20 61 73 73 65 72  yn) );.    asser
129f0 74 28 20 21 28 70 44 65 73 74 2d 3e 66 6c 61 67  t( !(pDest->flag
12a00 73 20 26 20 28 4d 45 4d 5f 42 6c 6f 62 7c 4d 45  s & (MEM_Blob|ME
12a10 4d 5f 53 74 72 29 29 20 7c 7c 20 70 44 65 73 74  M_Str)) || pDest
12a20 2d 3e 7a 3d 3d 73 4d 65 6d 2e 7a 20 29 3b 0a 20  ->z==sMem.z );. 
12a30 20 20 20 70 44 65 73 74 2d 3e 66 6c 61 67 73 20     pDest->flags 
12a40 26 3d 20 7e 28 4d 45 4d 5f 45 70 68 65 6d 7c 4d  &= ~(MEM_Ephem|M
12a50 45 4d 5f 53 74 61 74 69 63 29 3b 0a 20 20 20 20  EM_Static);.    
12a60 70 44 65 73 74 2d 3e 66 6c 61 67 73 20 7c 3d 20  pDest->flags |= 
12a70 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 20 20 70 44  MEM_Term;.    pD
12a80 65 73 74 2d 3e 7a 20 3d 20 73 4d 65 6d 2e 7a 3b  est->z = sMem.z;
12a90 0a 20 20 20 20 70 44 65 73 74 2d 3e 7a 4d 61 6c  .    pDest->zMal
12aa0 6c 6f 63 20 3d 20 73 4d 65 6d 2e 7a 4d 61 6c 6c  loc = sMem.zMall
12ab0 6f 63 3b 0a 20 20 7d 0a 0a 20 20 72 63 20 3d 20  oc;.  }..  rc = 
12ac0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d 61  sqlite3VdbeMemMa
12ad0 6b 65 57 72 69 74 65 61 62 6c 65 28 70 44 65 73  keWriteable(pDes
12ae0 74 29 3b 0a 0a 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f  t);..op_column_o
12af0 75 74 3a 0a 20 20 55 50 44 41 54 45 5f 4d 41 58  ut:.  UPDATE_MAX
12b00 5f 42 4c 4f 42 53 49 5a 45 28 70 44 65 73 74 29  _BLOBSIZE(pDest)
12b10 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41  ;.  REGISTER_TRA
12b20 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 44 65 73  CE(pOp->p3, pDes
12b30 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
12b40 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 66 66 69 6e  /* Opcode: Affin
12b50 69 74 79 20 50 31 20 50 32 20 2a 20 50 34 20 2a  ity P1 P2 * P4 *
12b60 0a 2a 2a 0a 2a 2a 20 41 70 70 6c 79 20 61 66 66  .**.** Apply aff
12b70 69 6e 69 74 69 65 73 20 74 6f 20 61 20 72 61 6e  inities to a ran
12b80 67 65 20 6f 66 20 50 32 20 72 65 67 69 73 74 65  ge of P2 registe
12b90 72 73 20 73 74 61 72 74 69 6e 67 20 77 69 74 68  rs starting with
12ba0 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73   P1..**.** P4 is
12bb0 20 61 20 73 74 72 69 6e 67 20 74 68 61 74 20 69   a string that i
12bc0 73 20 50 32 20 63 68 61 72 61 63 74 65 72 73 20  s P2 characters 
12bd0 6c 6f 6e 67 2e 20 54 68 65 20 6e 74 68 20 63 68  long. The nth ch
12be0 61 72 61 63 74 65 72 20 6f 66 20 74 68 65 0a 2a  aracter of the.*
12bf0 2a 20 73 74 72 69 6e 67 20 69 6e 64 69 63 61 74  * string indicat
12c00 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61 66  es the column af
12c10 66 69 6e 69 74 79 20 74 68 61 74 20 73 68 6f 75  finity that shou
12c20 6c 64 20 62 65 20 75 73 65 64 20 66 6f 72 20 74  ld be used for t
12c30 68 65 20 6e 74 68 0a 2a 2a 20 6d 65 6d 6f 72 79  he nth.** memory
12c40 20 63 65 6c 6c 20 69 6e 20 74 68 65 20 72 61 6e   cell in the ran
12c50 67 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41  ge..*/.case OP_A
12c60 66 66 69 6e 69 74 79 3a 20 7b 0a 20 20 63 6f 6e  ffinity: {.  con
12c70 73 74 20 63 68 61 72 20 2a 7a 41 66 66 69 6e 69  st char *zAffini
12c80 74 79 3b 20 20 20 2f 2a 20 54 68 65 20 61 66 66  ty;   /* The aff
12c90 69 6e 69 74 79 20 74 6f 20 62 65 20 61 70 70 6c  inity to be appl
12ca0 69 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 63 41  ied */.  char cA
12cb0 66 66 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ff;             
12cc0 20 20 2f 2a 20 41 20 73 69 6e 67 6c 65 20 63 68    /* A single ch
12cd0 61 72 61 63 74 65 72 20 6f 66 20 61 66 66 69 6e  aracter of affin
12ce0 69 74 79 20 2a 2f 0a 0a 20 20 7a 41 66 66 69 6e  ity */..  zAffin
12cf0 69 74 79 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b  ity = pOp->p4.z;
12d00 0a 20 20 61 73 73 65 72 74 28 20 7a 41 66 66 69  .  assert( zAffi
12d10 6e 69 74 79 21 3d 30 20 29 3b 0a 20 20 61 73 73  nity!=0 );.  ass
12d20 65 72 74 28 20 7a 41 66 66 69 6e 69 74 79 5b 70  ert( zAffinity[p
12d30 4f 70 2d 3e 70 32 5d 3d 3d 30 20 29 3b 0a 20 20  Op->p2]==0 );.  
12d40 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
12d50 2d 3e 70 31 5d 3b 0a 20 20 77 68 69 6c 65 28 20  ->p1];.  while( 
12d60 28 63 41 66 66 20 3d 20 2a 28 7a 41 66 66 69 6e  (cAff = *(zAffin
12d70 69 74 79 2b 2b 29 29 21 3d 30 20 29 7b 0a 20 20  ity++))!=0 ){.  
12d80 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 20 3c    assert( pIn1 <
12d90 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 2d 3e 6e 4d  = &p->aMem[p->nM
12da0 65 6d 5d 20 29 3b 0a 20 20 20 20 61 73 73 65 72  em] );.    asser
12db0 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 49  t( memIsValid(pI
12dc0 6e 31 29 20 29 3b 0a 20 20 20 20 45 78 70 61 6e  n1) );.    Expan
12dd0 64 42 6c 6f 62 28 70 49 6e 31 29 3b 0a 20 20 20  dBlob(pIn1);.   
12de0 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70   applyAffinity(p
12df0 49 6e 31 2c 20 63 41 66 66 2c 20 65 6e 63 6f 64  In1, cAff, encod
12e00 69 6e 67 29 3b 0a 20 20 20 20 70 49 6e 31 2b 2b  ing);.    pIn1++
12e10 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
12e20 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 61 6b  ../* Opcode: Mak
12e30 65 52 65 63 6f 72 64 20 50 31 20 50 32 20 50 33  eRecord P1 P2 P3
12e40 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 43 6f 6e 76   P4 *.**.** Conv
12e50 65 72 74 20 50 32 20 72 65 67 69 73 74 65 72 73  ert P2 registers
12e60 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20   beginning with 
12e70 50 31 20 69 6e 74 6f 20 74 68 65 20 5b 72 65 63  P1 into the [rec
12e80 6f 72 64 20 66 6f 72 6d 61 74 5d 0a 2a 2a 20 75  ord format].** u
12e90 73 65 20 61 73 20 61 20 64 61 74 61 20 72 65 63  se as a data rec
12ea0 6f 72 64 20 69 6e 20 61 20 64 61 74 61 62 61 73  ord in a databas
12eb0 65 20 74 61 62 6c 65 20 6f 72 20 61 73 20 61 20  e table or as a 
12ec0 6b 65 79 0a 2a 2a 20 69 6e 20 61 6e 20 69 6e 64  key.** in an ind
12ed0 65 78 2e 20 20 54 68 65 20 4f 50 5f 43 6f 6c 75  ex.  The OP_Colu
12ee0 6d 6e 20 6f 70 63 6f 64 65 20 63 61 6e 20 64 65  mn opcode can de
12ef0 63 6f 64 65 20 74 68 65 20 72 65 63 6f 72 64 20  code the record 
12f00 6c 61 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 50 34 20  later..**.** P4 
12f10 6d 61 79 20 62 65 20 61 20 73 74 72 69 6e 67 20  may be a string 
12f20 74 68 61 74 20 69 73 20 50 32 20 63 68 61 72 61  that is P2 chara
12f30 63 74 65 72 73 20 6c 6f 6e 67 2e 20 20 54 68 65  cters long.  The
12f40 20 6e 74 68 20 63 68 61 72 61 63 74 65 72 20 6f   nth character o
12f50 66 20 74 68 65 0a 2a 2a 20 73 74 72 69 6e 67 20  f the.** string 
12f60 69 6e 64 69 63 61 74 65 73 20 74 68 65 20 63 6f  indicates the co
12f70 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 20 74 68  lumn affinity th
12f80 61 74 20 73 68 6f 75 6c 64 20 62 65 20 75 73 65  at should be use
12f90 64 20 66 6f 72 20 74 68 65 20 6e 74 68 0a 2a 2a  d for the nth.**
12fa0 20 66 69 65 6c 64 20 6f 66 20 74 68 65 20 69 6e   field of the in
12fb0 64 65 78 20 6b 65 79 2e 0a 2a 2a 0a 2a 2a 20 54  dex key..**.** T
12fc0 68 65 20 6d 61 70 70 69 6e 67 20 66 72 6f 6d 20  he mapping from 
12fd0 63 68 61 72 61 63 74 65 72 20 74 6f 20 61 66 66  character to aff
12fe0 69 6e 69 74 79 20 69 73 20 67 69 76 65 6e 20 62  inity is given b
12ff0 79 20 74 68 65 20 53 51 4c 49 54 45 5f 41 46 46  y the SQLITE_AFF
13000 5f 0a 2a 2a 20 6d 61 63 72 6f 73 20 64 65 66 69  _.** macros defi
13010 6e 65 64 20 69 6e 20 73 71 6c 69 74 65 49 6e 74  ned in sqliteInt
13020 2e 68 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20  .h..**.** If P4 
13030 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 61 6c 6c  is NULL then all
13040 20 69 6e 64 65 78 20 66 69 65 6c 64 73 20 68 61   index fields ha
13050 76 65 20 74 68 65 20 61 66 66 69 6e 69 74 79 20  ve the affinity 
13060 4e 4f 4e 45 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  NONE..*/.case OP
13070 5f 4d 61 6b 65 52 65 63 6f 72 64 3a 20 7b 0a 20  _MakeRecord: {. 
13080 20 75 38 20 2a 7a 4e 65 77 52 65 63 6f 72 64 3b   u8 *zNewRecord;
13090 20 20 20 20 20 20 20 20 2f 2a 20 41 20 62 75 66          /* A buf
130a0 66 65 72 20 74 6f 20 68 6f 6c 64 20 74 68 65 20  fer to hold the 
130b0 64 61 74 61 20 66 6f 72 20 74 68 65 20 6e 65 77  data for the new
130c0 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 4d 65 6d   record */.  Mem
130d0 20 2a 70 52 65 63 3b 20 20 20 20 20 20 20 20 20   *pRec;         
130e0 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 77 20 72      /* The new r
130f0 65 63 6f 72 64 20 2a 2f 0a 20 20 75 36 34 20 6e  ecord */.  u64 n
13100 44 61 74 61 3b 20 20 20 20 20 20 20 20 20 20 20  Data;           
13110 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62    /* Number of b
13120 79 74 65 73 20 6f 66 20 64 61 74 61 20 73 70 61  ytes of data spa
13130 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 48 64 72  ce */.  int nHdr
13140 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
13150 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  * Number of byte
13160 73 20 6f 66 20 68 65 61 64 65 72 20 73 70 61 63  s of header spac
13170 65 20 2a 2f 0a 20 20 69 36 34 20 6e 42 79 74 65  e */.  i64 nByte
13180 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
13190 20 44 61 74 61 20 73 70 61 63 65 20 72 65 71 75   Data space requ
131a0 69 72 65 64 20 66 6f 72 20 74 68 69 73 20 72 65  ired for this re
131b0 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 5a  cord */.  int nZ
131c0 65 72 6f 3b 20 20 20 20 20 20 20 20 20 20 20 20  ero;            
131d0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 7a 65   /* Number of ze
131e0 72 6f 20 62 79 74 65 73 20 61 74 20 74 68 65 20  ro bytes at the 
131f0 65 6e 64 20 6f 66 20 74 68 65 20 72 65 63 6f 72  end of the recor
13200 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 61 72 69  d */.  int nVari
13210 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  nt;           /*
13220 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   Number of bytes
13230 20 69 6e 20 61 20 76 61 72 69 6e 74 20 2a 2f 0a   in a varint */.
13240 20 20 75 33 32 20 73 65 72 69 61 6c 5f 74 79 70    u32 serial_typ
13250 65 3b 20 20 20 20 20 20 20 2f 2a 20 54 79 70 65  e;       /* Type
13260 20 66 69 65 6c 64 20 2a 2f 0a 20 20 4d 65 6d 20   field */.  Mem 
13270 2a 70 44 61 74 61 30 3b 20 20 20 20 20 20 20 20  *pData0;        
13280 20 20 20 2f 2a 20 46 69 72 73 74 20 66 69 65 6c     /* First fiel
13290 64 20 74 6f 20 62 65 20 63 6f 6d 62 69 6e 65 64  d to be combined
132a0 20 69 6e 74 6f 20 74 68 65 20 72 65 63 6f 72 64   into the record
132b0 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4c 61 73 74   */.  Mem *pLast
132c0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
132d0 4c 61 73 74 20 66 69 65 6c 64 20 6f 66 20 74 68  Last field of th
132e0 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e  e record */.  in
132f0 74 20 6e 46 69 65 6c 64 3b 20 20 20 20 20 20 20  t nField;       
13300 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
13310 66 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20  f fields in the 
13320 72 65 63 6f 72 64 20 2a 2f 0a 20 20 63 68 61 72  record */.  char
13330 20 2a 7a 41 66 66 69 6e 69 74 79 3b 20 20 20 20   *zAffinity;    
13340 20 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69     /* The affini
13350 74 79 20 73 74 72 69 6e 67 20 66 6f 72 20 74 68  ty string for th
13360 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e  e record */.  in
13370 74 20 66 69 6c 65 5f 66 6f 72 6d 61 74 3b 20 20  t file_format;  
13380 20 20 20 20 20 2f 2a 20 46 69 6c 65 20 66 6f 72       /* File for
13390 6d 61 74 20 74 6f 20 75 73 65 20 66 6f 72 20 65  mat to use for e
133a0 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20 20 69 6e 74  ncoding */.  int
133b0 20 69 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   i;             
133c0 20 20 20 20 2f 2a 20 53 70 61 63 65 20 75 73 65      /* Space use
133d0 64 20 69 6e 20 7a 4e 65 77 52 65 63 6f 72 64 5b  d in zNewRecord[
133e0 5d 20 2a 2f 0a 20 20 69 6e 74 20 6c 65 6e 3b 20  ] */.  int len; 
133f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
13400 20 4c 65 6e 67 74 68 20 6f 66 20 61 20 66 69 65   Length of a fie
13410 6c 64 20 2a 2f 0a 0a 20 20 2f 2a 20 41 73 73 75  ld */..  /* Assu
13420 6d 69 6e 67 20 74 68 65 20 72 65 63 6f 72 64 20  ming the record 
13430 63 6f 6e 74 61 69 6e 73 20 4e 20 66 69 65 6c 64  contains N field
13440 73 2c 20 74 68 65 20 72 65 63 6f 72 64 20 66 6f  s, the record fo
13450 72 6d 61 74 20 6c 6f 6f 6b 73 0a 20 20 2a 2a 20  rmat looks.  ** 
13460 6c 69 6b 65 20 74 68 69 73 3a 0a 20 20 2a 2a 0a  like this:.  **.
13470 20 20 2a 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d    ** -----------
13480 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13490 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
134a0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
134b0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20  -------------.  
134c0 2a 2a 20 7c 20 68 64 72 2d 73 69 7a 65 20 7c 20  ** | hdr-size | 
134d0 74 79 70 65 20 30 20 7c 20 74 79 70 65 20 31 20  type 0 | type 1 
134e0 7c 20 2e 2e 2e 20 7c 20 74 79 70 65 20 4e 2d 31  | ... | type N-1
134f0 20 7c 20 64 61 74 61 30 20 7c 20 2e 2e 2e 20 7c   | data0 | ... |
13500 20 64 61 74 61 20 4e 2d 31 20 7c 20 0a 20 20 2a   data N-1 | .  *
13510 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  * --------------
13520 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13530 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13540 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13550 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2a 0a  ----------.  **.
13560 20 20 2a 2a 20 44 61 74 61 28 30 29 20 69 73 20    ** Data(0) is 
13570 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69 73  taken from regis
13580 74 65 72 20 50 31 2e 20 20 44 61 74 61 28 31 29  ter P1.  Data(1)
13590 20 63 6f 6d 65 73 20 66 72 6f 6d 20 72 65 67 69   comes from regi
135a0 73 74 65 72 20 50 31 2b 31 0a 20 20 2a 2a 20 61  ster P1+1.  ** a
135b0 6e 64 20 73 6f 20 66 72 6f 74 68 2e 0a 20 20 2a  nd so froth..  *
135c0 2a 0a 20 20 2a 2a 20 45 61 63 68 20 74 79 70 65  *.  ** Each type
135d0 20 66 69 65 6c 64 20 69 73 20 61 20 76 61 72 69   field is a vari
135e0 6e 74 20 72 65 70 72 65 73 65 6e 74 69 6e 67 20  nt representing 
135f0 74 68 65 20 73 65 72 69 61 6c 20 74 79 70 65 20  the serial type 
13600 6f 66 20 74 68 65 20 0a 20 20 2a 2a 20 63 6f 72  of the .  ** cor
13610 72 65 73 70 6f 6e 64 69 6e 67 20 64 61 74 61 20  responding data 
13620 65 6c 65 6d 65 6e 74 20 28 73 65 65 20 73 71 6c  element (see sql
13630 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 54 79  ite3VdbeSerialTy
13640 70 65 28 29 29 2e 20 54 68 65 0a 20 20 2a 2a 20  pe()). The.  ** 
13650 68 64 72 2d 73 69 7a 65 20 66 69 65 6c 64 20 69  hdr-size field i
13660 73 20 61 6c 73 6f 20 61 20 76 61 72 69 6e 74 20  s also a varint 
13670 77 68 69 63 68 20 69 73 20 74 68 65 20 6f 66 66  which is the off
13680 73 65 74 20 66 72 6f 6d 20 74 68 65 20 62 65 67  set from the beg
13690 69 6e 6e 69 6e 67 0a 20 20 2a 2a 20 6f 66 20 74  inning.  ** of t
136a0 68 65 20 72 65 63 6f 72 64 20 74 6f 20 64 61 74  he record to dat
136b0 61 30 2e 0a 20 20 2a 2f 0a 20 20 6e 44 61 74 61  a0..  */.  nData
136c0 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 2f 2a   = 0;         /*
136d0 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   Number of bytes
136e0 20 6f 66 20 64 61 74 61 20 73 70 61 63 65 20 2a   of data space *
136f0 2f 0a 20 20 6e 48 64 72 20 3d 20 30 3b 20 20 20  /.  nHdr = 0;   
13700 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
13710 20 6f 66 20 62 79 74 65 73 20 6f 66 20 68 65 61   of bytes of hea
13720 64 65 72 20 73 70 61 63 65 20 2a 2f 0a 20 20 6e  der space */.  n
13730 42 79 74 65 20 3d 20 30 3b 20 20 20 20 20 20 20  Byte = 0;       
13740 20 20 2f 2a 20 44 61 74 61 20 73 70 61 63 65 20    /* Data space 
13750 72 65 71 75 69 72 65 64 20 66 6f 72 20 74 68 69  required for thi
13760 73 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 6e 5a  s record */.  nZ
13770 65 72 6f 20 3d 20 30 3b 20 20 20 20 20 20 20 20  ero = 0;        
13780 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 7a 65   /* Number of ze
13790 72 6f 20 62 79 74 65 73 20 61 74 20 74 68 65 20  ro bytes at the 
137a0 65 6e 64 20 6f 66 20 74 68 65 20 72 65 63 6f 72  end of the recor
137b0 64 20 2a 2f 0a 20 20 6e 46 69 65 6c 64 20 3d 20  d */.  nField = 
137c0 70 4f 70 2d 3e 70 31 3b 0a 20 20 7a 41 66 66 69  pOp->p1;.  zAffi
137d0 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a  nity = pOp->p4.z
137e0 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 46 69 65  ;.  assert( nFie
137f0 6c 64 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 3e  ld>0 && pOp->p2>
13800 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 6e 46 69  0 && pOp->p2+nFi
13810 65 6c 64 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31 20 29  eld<=p->nMem+1 )
13820 3b 0a 20 20 70 44 61 74 61 30 20 3d 20 26 61 4d  ;.  pData0 = &aM
13830 65 6d 5b 6e 46 69 65 6c 64 5d 3b 0a 20 20 6e 46  em[nField];.  nF
13840 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a  ield = pOp->p2;.
13850 20 20 70 4c 61 73 74 20 3d 20 26 70 44 61 74 61    pLast = &pData
13860 30 5b 6e 46 69 65 6c 64 2d 31 5d 3b 0a 20 20 66  0[nField-1];.  f
13870 69 6c 65 5f 66 6f 72 6d 61 74 20 3d 20 70 2d 3e  ile_format = p->
13880 6d 69 6e 57 72 69 74 65 46 69 6c 65 46 6f 72 6d  minWriteFileForm
13890 61 74 3b 0a 0a 20 20 2f 2a 20 49 64 65 6e 74 69  at;..  /* Identi
138a0 66 79 20 74 68 65 20 6f 75 74 70 75 74 20 72 65  fy the output re
138b0 67 69 73 74 65 72 20 2a 2f 0a 20 20 61 73 73 65  gister */.  asse
138c0 72 74 28 20 70 4f 70 2d 3e 70 33 3c 70 4f 70 2d  rt( pOp->p3<pOp-
138d0 3e 70 31 20 7c 7c 20 70 4f 70 2d 3e 70 33 3e 3d  >p1 || pOp->p3>=
138e0 70 4f 70 2d 3e 70 31 2b 70 4f 70 2d 3e 70 32 20  pOp->p1+pOp->p2 
138f0 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65  );.  pOut = &aMe
13900 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65  m[pOp->p3];.  me
13910 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
13920 2c 20 70 4f 75 74 29 3b 0a 0a 20 20 2f 2a 20 4c  , pOut);..  /* L
13930 6f 6f 70 20 74 68 72 6f 75 67 68 20 74 68 65 20  oop through the 
13940 65 6c 65 6d 65 6e 74 73 20 74 68 61 74 20 77 69  elements that wi
13950 6c 6c 20 6d 61 6b 65 20 75 70 20 74 68 65 20 72  ll make up the r
13960 65 63 6f 72 64 20 74 6f 20 66 69 67 75 72 65 0a  ecord to figure.
13970 20 20 2a 2a 20 6f 75 74 20 68 6f 77 20 6d 75 63    ** out how muc
13980 68 20 73 70 61 63 65 20 69 73 20 72 65 71 75 69  h space is requi
13990 72 65 64 20 66 6f 72 20 74 68 65 20 6e 65 77 20  red for the new 
139a0 72 65 63 6f 72 64 2e 0a 20 20 2a 2f 0a 20 20 66  record..  */.  f
139b0 6f 72 28 70 52 65 63 3d 70 44 61 74 61 30 3b 20  or(pRec=pData0; 
139c0 70 52 65 63 3c 3d 70 4c 61 73 74 3b 20 70 52 65  pRec<=pLast; pRe
139d0 63 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72 74  c++){.    assert
139e0 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 52 65  ( memIsValid(pRe
139f0 63 29 20 29 3b 0a 20 20 20 20 69 66 28 20 7a 41  c) );.    if( zA
13a00 66 66 69 6e 69 74 79 20 29 7b 0a 20 20 20 20 20  ffinity ){.     
13a10 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70   applyAffinity(p
13a20 52 65 63 2c 20 7a 41 66 66 69 6e 69 74 79 5b 70  Rec, zAffinity[p
13a30 52 65 63 2d 70 44 61 74 61 30 5d 2c 20 65 6e 63  Rec-pData0], enc
13a40 6f 64 69 6e 67 29 3b 0a 20 20 20 20 7d 0a 20 20  oding);.    }.  
13a50 20 20 69 66 28 20 70 52 65 63 2d 3e 66 6c 61 67    if( pRec->flag
13a60 73 26 4d 45 4d 5f 5a 65 72 6f 20 26 26 20 70 52  s&MEM_Zero && pR
13a70 65 63 2d 3e 6e 3e 30 20 29 7b 0a 20 20 20 20 20  ec->n>0 ){.     
13a80 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 45   sqlite3VdbeMemE
13a90 78 70 61 6e 64 42 6c 6f 62 28 70 52 65 63 29 3b  xpandBlob(pRec);
13aa0 0a 20 20 20 20 7d 0a 20 20 20 20 73 65 72 69 61  .    }.    seria
13ab0 6c 5f 74 79 70 65 20 3d 20 73 71 6c 69 74 65 33  l_type = sqlite3
13ac0 56 64 62 65 53 65 72 69 61 6c 54 79 70 65 28 70  VdbeSerialType(p
13ad0 52 65 63 2c 20 66 69 6c 65 5f 66 6f 72 6d 61 74  Rec, file_format
13ae0 29 3b 0a 20 20 20 20 6c 65 6e 20 3d 20 73 71 6c  );.    len = sql
13af0 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 54 79  ite3VdbeSerialTy
13b00 70 65 4c 65 6e 28 73 65 72 69 61 6c 5f 74 79 70  peLen(serial_typ
13b10 65 29 3b 0a 20 20 20 20 6e 44 61 74 61 20 2b 3d  e);.    nData +=
13b20 20 6c 65 6e 3b 0a 20 20 20 20 6e 48 64 72 20 2b   len;.    nHdr +
13b30 3d 20 73 71 6c 69 74 65 33 56 61 72 69 6e 74 4c  = sqlite3VarintL
13b40 65 6e 28 73 65 72 69 61 6c 5f 74 79 70 65 29 3b  en(serial_type);
13b50 0a 20 20 20 20 69 66 28 20 70 52 65 63 2d 3e 66  .    if( pRec->f
13b60 6c 61 67 73 20 26 20 4d 45 4d 5f 5a 65 72 6f 20  lags & MEM_Zero 
13b70 29 7b 0a 20 20 20 20 20 20 2f 2a 20 4f 6e 6c 79  ){.      /* Only
13b80 20 70 75 72 65 20 7a 65 72 6f 2d 66 69 6c 6c 65   pure zero-fille
13b90 64 20 42 4c 4f 42 73 20 63 61 6e 20 62 65 20 69  d BLOBs can be i
13ba0 6e 70 75 74 20 74 6f 20 74 68 69 73 20 4f 70 63  nput to this Opc
13bb0 6f 64 65 2e 0a 20 20 20 20 20 20 2a 2a 20 57 65  ode..      ** We
13bc0 20 64 6f 20 6e 6f 74 20 61 6c 6c 6f 77 20 62 6c   do not allow bl
13bd0 6f 62 73 20 77 69 74 68 20 61 20 70 72 65 66 69  obs with a prefi
13be0 78 20 61 6e 64 20 61 20 7a 65 72 6f 2d 66 69 6c  x and a zero-fil
13bf0 6c 65 64 20 74 61 69 6c 2e 20 2a 2f 0a 20 20 20  led tail. */.   
13c00 20 20 20 6e 5a 65 72 6f 20 2b 3d 20 70 52 65 63     nZero += pRec
13c10 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a 20 20 20 20 7d  ->u.nZero;.    }
13c20 65 6c 73 65 20 69 66 28 20 6c 65 6e 20 29 7b 0a  else if( len ){.
13c30 20 20 20 20 20 20 6e 5a 65 72 6f 20 3d 20 30 3b        nZero = 0;
13c40 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 2f 2a  .    }.  }..  /*
13c50 20 41 64 64 20 74 68 65 20 69 6e 69 74 69 61 6c   Add the initial
13c60 20 68 65 61 64 65 72 20 76 61 72 69 6e 74 20 61   header varint a
13c70 6e 64 20 74 6f 74 61 6c 20 74 68 65 20 73 69 7a  nd total the siz
13c80 65 20 2a 2f 0a 20 20 6e 48 64 72 20 2b 3d 20 6e  e */.  nHdr += n
13c90 56 61 72 69 6e 74 20 3d 20 73 71 6c 69 74 65 33  Varint = sqlite3
13ca0 56 61 72 69 6e 74 4c 65 6e 28 6e 48 64 72 29 3b  VarintLen(nHdr);
13cb0 0a 20 20 69 66 28 20 6e 56 61 72 69 6e 74 3c 73  .  if( nVarint<s
13cc0 71 6c 69 74 65 33 56 61 72 69 6e 74 4c 65 6e 28  qlite3VarintLen(
13cd0 6e 48 64 72 29 20 29 7b 0a 20 20 20 20 6e 48 64  nHdr) ){.    nHd
13ce0 72 2b 2b 3b 0a 20 20 7d 0a 20 20 6e 42 79 74 65  r++;.  }.  nByte
13cf0 20 3d 20 6e 48 64 72 2b 6e 44 61 74 61 2d 6e 5a   = nHdr+nData-nZ
13d00 65 72 6f 3b 0a 20 20 69 66 28 20 6e 42 79 74 65  ero;.  if( nByte
13d10 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49  >db->aLimit[SQLI
13d20 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d  TE_LIMIT_LENGTH]
13d30 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f   ){.    goto too
13d40 5f 62 69 67 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20  _big;.  }..  /* 
13d50 4d 61 6b 65 20 73 75 72 65 20 74 68 65 20 6f 75  Make sure the ou
13d60 74 70 75 74 20 72 65 67 69 73 74 65 72 20 68 61  tput register ha
13d70 73 20 61 20 62 75 66 66 65 72 20 6c 61 72 67 65  s a buffer large
13d80 20 65 6e 6f 75 67 68 20 74 6f 20 73 74 6f 72 65   enough to store
13d90 20 0a 20 20 2a 2a 20 74 68 65 20 6e 65 77 20 72   .  ** the new r
13da0 65 63 6f 72 64 2e 20 54 68 65 20 6f 75 74 70 75  ecord. The outpu
13db0 74 20 72 65 67 69 73 74 65 72 20 28 70 4f 70 2d  t register (pOp-
13dc0 3e 70 33 29 20 69 73 20 6e 6f 74 20 61 6c 6c 6f  >p3) is not allo
13dd0 77 65 64 20 74 6f 0a 20 20 2a 2a 20 62 65 20 6f  wed to.  ** be o
13de0 6e 65 20 6f 66 20 74 68 65 20 69 6e 70 75 74 20  ne of the input 
13df0 72 65 67 69 73 74 65 72 73 20 28 62 65 63 61 75  registers (becau
13e00 73 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  se the following
13e10 20 63 61 6c 6c 20 74 6f 0a 20 20 2a 2a 20 73 71   call to.  ** sq
13e20 6c 69 74 65 33 56 64 62 65 4d 65 6d 47 72 6f 77  lite3VdbeMemGrow
13e30 28 29 20 63 6f 75 6c 64 20 63 6c 6f 62 62 65 72  () could clobber
13e40 20 74 68 65 20 76 61 6c 75 65 20 62 65 66 6f 72   the value befor
13e50 65 20 69 74 20 69 73 20 75 73 65 64 29 2e 0a 20  e it is used).. 
13e60 20 2a 2f 0a 20 20 69 66 28 20 73 71 6c 69 74 65   */.  if( sqlite
13e70 33 56 64 62 65 4d 65 6d 47 72 6f 77 28 70 4f 75  3VdbeMemGrow(pOu
13e80 74 2c 20 28 69 6e 74 29 6e 42 79 74 65 2c 20 30  t, (int)nByte, 0
13e90 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f  ) ){.    goto no
13ea0 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 7a 4e 65 77  _mem;.  }.  zNew
13eb0 52 65 63 6f 72 64 20 3d 20 28 75 38 20 2a 29 70  Record = (u8 *)p
13ec0 4f 75 74 2d 3e 7a 3b 0a 0a 20 20 2f 2a 20 57 72  Out->z;..  /* Wr
13ed0 69 74 65 20 74 68 65 20 72 65 63 6f 72 64 20 2a  ite the record *
13ee0 2f 0a 20 20 69 20 3d 20 70 75 74 56 61 72 69 6e  /.  i = putVarin
13ef0 74 33 32 28 7a 4e 65 77 52 65 63 6f 72 64 2c 20  t32(zNewRecord, 
13f00 6e 48 64 72 29 3b 0a 20 20 66 6f 72 28 70 52 65  nHdr);.  for(pRe
13f10 63 3d 70 44 61 74 61 30 3b 20 70 52 65 63 3c 3d  c=pData0; pRec<=
13f20 70 4c 61 73 74 3b 20 70 52 65 63 2b 2b 29 7b 0a  pLast; pRec++){.
13f30 20 20 20 20 73 65 72 69 61 6c 5f 74 79 70 65 20      serial_type 
13f40 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72  = sqlite3VdbeSer
13f50 69 61 6c 54 79 70 65 28 70 52 65 63 2c 20 66 69  ialType(pRec, fi
13f60 6c 65 5f 66 6f 72 6d 61 74 29 3b 0a 20 20 20 20  le_format);.    
13f70 69 20 2b 3d 20 70 75 74 56 61 72 69 6e 74 33 32  i += putVarint32
13f80 28 26 7a 4e 65 77 52 65 63 6f 72 64 5b 69 5d 2c  (&zNewRecord[i],
13f90 20 73 65 72 69 61 6c 5f 74 79 70 65 29 3b 20 20   serial_type);  
13fa0 20 20 20 20 2f 2a 20 73 65 72 69 61 6c 20 74 79      /* serial ty
13fb0 70 65 20 2a 2f 0a 20 20 7d 0a 20 20 66 6f 72 28  pe */.  }.  for(
13fc0 70 52 65 63 3d 70 44 61 74 61 30 3b 20 70 52 65  pRec=pData0; pRe
13fd0 63 3c 3d 70 4c 61 73 74 3b 20 70 52 65 63 2b 2b  c<=pLast; pRec++
13fe0 29 7b 20 20 2f 2a 20 73 65 72 69 61 6c 20 64 61  ){  /* serial da
13ff0 74 61 20 2a 2f 0a 20 20 20 20 69 20 2b 3d 20 73  ta */.    i += s
14000 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c  qlite3VdbeSerial
14010 50 75 74 28 26 7a 4e 65 77 52 65 63 6f 72 64 5b  Put(&zNewRecord[
14020 69 5d 2c 20 28 69 6e 74 29 28 6e 42 79 74 65 2d  i], (int)(nByte-
14030 69 29 2c 20 70 52 65 63 2c 66 69 6c 65 5f 66 6f  i), pRec,file_fo
14040 72 6d 61 74 29 3b 0a 20 20 7d 0a 20 20 61 73 73  rmat);.  }.  ass
14050 65 72 74 28 20 69 3d 3d 6e 42 79 74 65 20 29 3b  ert( i==nByte );
14060 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
14070 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33  >p3>0 && pOp->p3
14080 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70  <=p->nMem );.  p
14090 4f 75 74 2d 3e 6e 20 3d 20 28 69 6e 74 29 6e 42  Out->n = (int)nB
140a0 79 74 65 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61  yte;.  pOut->fla
140b0 67 73 20 3d 20 4d 45 4d 5f 42 6c 6f 62 20 7c 20  gs = MEM_Blob | 
140c0 4d 45 4d 5f 44 79 6e 3b 0a 20 20 70 4f 75 74 2d  MEM_Dyn;.  pOut-
140d0 3e 78 44 65 6c 20 3d 20 30 3b 0a 20 20 69 66 28  >xDel = 0;.  if(
140e0 20 6e 5a 65 72 6f 20 29 7b 0a 20 20 20 20 70 4f   nZero ){.    pO
140f0 75 74 2d 3e 75 2e 6e 5a 65 72 6f 20 3d 20 6e 5a  ut->u.nZero = nZ
14100 65 72 6f 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66  ero;.    pOut->f
14110 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 5a 65 72 6f  lags |= MEM_Zero
14120 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 65 6e  ;.  }.  pOut->en
14130 63 20 3d 20 53 51 4c 49 54 45 5f 55 54 46 38 3b  c = SQLITE_UTF8;
14140 20 20 2f 2a 20 49 6e 20 63 61 73 65 20 74 68 65    /* In case the
14150 20 62 6c 6f 62 20 69 73 20 65 76 65 72 20 63 6f   blob is ever co
14160 6e 76 65 72 74 65 64 20 74 6f 20 74 65 78 74 20  nverted to text 
14170 2a 2f 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52  */.  REGISTER_TR
14180 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4f 75  ACE(pOp->p3, pOu
14190 74 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58  t);.  UPDATE_MAX
141a0 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b  _BLOBSIZE(pOut);
141b0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
141c0 4f 70 63 6f 64 65 3a 20 43 6f 75 6e 74 20 50 31  Opcode: Count P1
141d0 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
141e0 53 74 6f 72 65 20 74 68 65 20 6e 75 6d 62 65 72  Store the number
141f0 20 6f 66 20 65 6e 74 72 69 65 73 20 28 61 6e 20   of entries (an 
14200 69 6e 74 65 67 65 72 20 76 61 6c 75 65 29 20 69  integer value) i
14210 6e 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69  n the table or i
14220 6e 64 65 78 20 0a 2a 2a 20 6f 70 65 6e 65 64 20  ndex .** opened 
14230 62 79 20 63 75 72 73 6f 72 20 50 31 20 69 6e 20  by cursor P1 in 
14240 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2f 0a 23  register P2.*/.#
14250 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
14260 49 54 5f 42 54 52 45 45 43 4f 55 4e 54 0a 63 61  IT_BTREECOUNT.ca
14270 73 65 20 4f 50 5f 43 6f 75 6e 74 3a 20 7b 20 20  se OP_Count: {  
14280 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70         /* out2-p
14290 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69  rerelease */.  i
142a0 36 34 20 6e 45 6e 74 72 79 3b 0a 20 20 42 74 43  64 nEntry;.  BtC
142b0 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 0a 20  ursor *pCrsr;.. 
142c0 20 70 43 72 73 72 20 3d 20 70 2d 3e 61 70 43 73   pCrsr = p->apCs
142d0 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 70 43 75 72  r[pOp->p1]->pCur
142e0 73 6f 72 3b 0a 20 20 69 66 28 20 70 43 72 73 72  sor;.  if( pCrsr
142f0 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   ){.    rc = sql
14300 69 74 65 33 42 74 72 65 65 43 6f 75 6e 74 28 70  ite3BtreeCount(p
14310 43 72 73 72 2c 20 26 6e 45 6e 74 72 79 29 3b 0a  Crsr, &nEntry);.
14320 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 6e 45 6e    }else{.    nEn
14330 74 72 79 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 70  try = 0;.  }.  p
14340 4f 75 74 2d 3e 75 2e 69 20 3d 20 6e 45 6e 74 72  Out->u.i = nEntr
14350 79 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65  y;.  break;.}.#e
14360 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  ndif../* Opcode:
14370 20 53 61 76 65 70 6f 69 6e 74 20 50 31 20 2a 20   Savepoint P1 * 
14380 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 4f 70 65  * P4 *.**.** Ope
14390 6e 2c 20 72 65 6c 65 61 73 65 20 6f 72 20 72 6f  n, release or ro
143a0 6c 6c 62 61 63 6b 20 74 68 65 20 73 61 76 65 70  llback the savep
143b0 6f 69 6e 74 20 6e 61 6d 65 64 20 62 79 20 70 61  oint named by pa
143c0 72 61 6d 65 74 65 72 20 50 34 2c 20 64 65 70 65  rameter P4, depe
143d0 6e 64 69 6e 67 0a 2a 2a 20 6f 6e 20 74 68 65 20  nding.** on the 
143e0 76 61 6c 75 65 20 6f 66 20 50 31 2e 20 54 6f 20  value of P1. To 
143f0 6f 70 65 6e 20 61 20 6e 65 77 20 73 61 76 65 70  open a new savep
14400 6f 69 6e 74 2c 20 50 31 3d 3d 30 2e 20 54 6f 20  oint, P1==0. To 
14410 72 65 6c 65 61 73 65 20 28 63 6f 6d 6d 69 74 29  release (commit)
14420 20 61 6e 0a 2a 2a 20 65 78 69 73 74 69 6e 67 20   an.** existing 
14430 73 61 76 65 70 6f 69 6e 74 2c 20 50 31 3d 3d 31  savepoint, P1==1
14440 2c 20 6f 72 20 74 6f 20 72 6f 6c 6c 62 61 63 6b  , or to rollback
14450 20 61 6e 20 65 78 69 73 74 69 6e 67 20 73 61 76   an existing sav
14460 65 70 6f 69 6e 74 20 50 31 3d 3d 32 2e 0a 2a 2f  epoint P1==2..*/
14470 0a 63 61 73 65 20 4f 50 5f 53 61 76 65 70 6f 69  .case OP_Savepoi
14480 6e 74 3a 20 7b 0a 20 20 69 6e 74 20 70 31 3b 20  nt: {.  int p1; 
14490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
144a0 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65          /* Value
144b0 20 6f 66 20 50 31 20 6f 70 65 72 61 6e 64 20 2a   of P1 operand *
144c0 2f 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b  /.  char *zName;
144d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
144e0 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 73      /* Name of s
144f0 61 76 65 70 6f 69 6e 74 20 2a 2f 0a 20 20 69 6e  avepoint */.  in
14500 74 20 6e 4e 61 6d 65 3b 0a 20 20 53 61 76 65 70  t nName;.  Savep
14510 6f 69 6e 74 20 2a 70 4e 65 77 3b 0a 20 20 53 61  oint *pNew;.  Sa
14520 76 65 70 6f 69 6e 74 20 2a 70 53 61 76 65 70 6f  vepoint *pSavepo
14530 69 6e 74 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74  int;.  Savepoint
14540 20 2a 70 54 6d 70 3b 0a 20 20 69 6e 74 20 69 53   *pTmp;.  int iS
14550 61 76 65 70 6f 69 6e 74 3b 0a 20 20 69 6e 74 20  avepoint;.  int 
14560 69 69 3b 0a 0a 20 20 70 31 20 3d 20 70 4f 70 2d  ii;..  p1 = pOp-
14570 3e 70 31 3b 0a 20 20 7a 4e 61 6d 65 20 3d 20 70  >p1;.  zName = p
14580 4f 70 2d 3e 70 34 2e 7a 3b 0a 0a 20 20 2f 2a 20  Op->p4.z;..  /* 
14590 41 73 73 65 72 74 20 74 68 61 74 20 74 68 65 20  Assert that the 
145a0 70 31 20 70 61 72 61 6d 65 74 65 72 20 69 73 20  p1 parameter is 
145b0 76 61 6c 69 64 2e 20 41 6c 73 6f 20 74 68 61 74  valid. Also that
145c0 20 69 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20   if there is no 
145d0 6f 70 65 6e 0a 20 20 2a 2a 20 74 72 61 6e 73 61  open.  ** transa
145e0 63 74 69 6f 6e 2c 20 74 68 65 6e 20 74 68 65 72  ction, then ther
145f0 65 20 63 61 6e 6e 6f 74 20 62 65 20 61 6e 79 20  e cannot be any 
14600 73 61 76 65 70 6f 69 6e 74 73 2e 20 0a 20 20 2a  savepoints. .  *
14610 2f 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e  /.  assert( db->
14620 70 53 61 76 65 70 6f 69 6e 74 3d 3d 30 20 7c 7c  pSavepoint==0 ||
14630 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d   db->autoCommit=
14640 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
14650 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 42 45  p1==SAVEPOINT_BE
14660 47 49 4e 7c 7c 70 31 3d 3d 53 41 56 45 50 4f 49  GIN||p1==SAVEPOI
14670 4e 54 5f 52 45 4c 45 41 53 45 7c 7c 70 31 3d 3d  NT_RELEASE||p1==
14680 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41  SAVEPOINT_ROLLBA
14690 43 4b 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  CK );.  assert( 
146a0 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 7c  db->pSavepoint |
146b0 7c 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74  | db->isTransact
146c0 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3d 3d 30 20  ionSavepoint==0 
146d0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 63 68 65  );.  assert( che
146e0 63 6b 53 61 76 65 70 6f 69 6e 74 43 6f 75 6e 74  ckSavepointCount
146f0 28 64 62 29 20 29 3b 0a 0a 20 20 69 66 28 20 70  (db) );..  if( p
14700 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 42 45 47  1==SAVEPOINT_BEG
14710 49 4e 20 29 7b 0a 20 20 20 20 69 66 28 20 64 62  IN ){.    if( db
14720 2d 3e 77 72 69 74 65 56 64 62 65 43 6e 74 3e 30  ->writeVdbeCnt>0
14730 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 41 20 6e   ){.      /* A n
14740 65 77 20 73 61 76 65 70 6f 69 6e 74 20 63 61 6e  ew savepoint can
14750 6e 6f 74 20 62 65 20 63 72 65 61 74 65 64 20 69  not be created i
14760 66 20 74 68 65 72 65 20 61 72 65 20 61 63 74 69  f there are acti
14770 76 65 20 77 72 69 74 65 20 0a 20 20 20 20 20 20  ve write .      
14780 2a 2a 20 73 74 61 74 65 6d 65 6e 74 73 20 28 69  ** statements (i
14790 2e 65 2e 20 6f 70 65 6e 20 72 65 61 64 2f 77 72  .e. open read/wr
147a0 69 74 65 20 69 6e 63 72 65 6d 65 6e 74 61 6c 20  ite incremental 
147b0 62 6c 6f 62 20 68 61 6e 64 6c 65 73 29 2e 0a 20  blob handles).. 
147c0 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 73 71       */.      sq
147d0 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26  lite3SetString(&
147e0 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20  p->zErrMsg, db, 
147f0 22 63 61 6e 6e 6f 74 20 6f 70 65 6e 20 73 61 76  "cannot open sav
14800 65 70 6f 69 6e 74 20 2d 20 22 0a 20 20 20 20 20  epoint - ".     
14810 20 20 20 22 53 51 4c 20 73 74 61 74 65 6d 65 6e     "SQL statemen
14820 74 73 20 69 6e 20 70 72 6f 67 72 65 73 73 22 29  ts in progress")
14830 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c  ;.      rc = SQL
14840 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 7d 65  ITE_BUSY;.    }e
14850 6c 73 65 7b 0a 20 20 20 20 20 20 6e 4e 61 6d 65  lse{.      nName
14860 20 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e   = sqlite3Strlen
14870 33 30 28 7a 4e 61 6d 65 29 3b 0a 0a 20 20 20 20  30(zName);..    
14880 20 20 2f 2a 20 43 72 65 61 74 65 20 61 20 6e 65    /* Create a ne
14890 77 20 73 61 76 65 70 6f 69 6e 74 20 73 74 72 75  w savepoint stru
148a0 63 74 75 72 65 2e 20 2a 2f 0a 20 20 20 20 20 20  cture. */.      
148b0 70 4e 65 77 20 3d 20 73 71 6c 69 74 65 33 44 62  pNew = sqlite3Db
148c0 4d 61 6c 6c 6f 63 52 61 77 28 64 62 2c 20 73 69  MallocRaw(db, si
148d0 7a 65 6f 66 28 53 61 76 65 70 6f 69 6e 74 29 2b  zeof(Savepoint)+
148e0 6e 4e 61 6d 65 2b 31 29 3b 0a 20 20 20 20 20 20  nName+1);.      
148f0 69 66 28 20 70 4e 65 77 20 29 7b 0a 20 20 20 20  if( pNew ){.    
14900 20 20 20 20 70 4e 65 77 2d 3e 7a 4e 61 6d 65 20      pNew->zName 
14910 3d 20 28 63 68 61 72 20 2a 29 26 70 4e 65 77 5b  = (char *)&pNew[
14920 31 5d 3b 0a 20 20 20 20 20 20 20 20 6d 65 6d 63  1];.        memc
14930 70 79 28 70 4e 65 77 2d 3e 7a 4e 61 6d 65 2c 20  py(pNew->zName, 
14940 7a 4e 61 6d 65 2c 20 6e 4e 61 6d 65 2b 31 29 3b  zName, nName+1);
14950 0a 20 20 20 20 0a 20 20 20 20 20 20 20 20 2f 2a  .    .        /*
14960 20 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20   If there is no 
14970 6f 70 65 6e 20 74 72 61 6e 73 61 63 74 69 6f 6e  open transaction
14980 2c 20 74 68 65 6e 20 6d 61 72 6b 20 74 68 69 73  , then mark this
14990 20 61 73 20 61 20 73 70 65 63 69 61 6c 0a 20 20   as a special.  
149a0 20 20 20 20 20 20 2a 2a 20 22 74 72 61 6e 73 61        ** "transa
149b0 63 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 22  ction savepoint"
149c0 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28  . */.        if(
149d0 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20   db->autoCommit 
149e0 29 7b 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d  ){.          db-
149f0 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 30 3b  >autoCommit = 0;
14a00 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 69  .          db->i
14a10 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65  sTransactionSave
14a20 70 6f 69 6e 74 20 3d 20 31 3b 0a 20 20 20 20 20  point = 1;.     
14a30 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
14a40 20 20 20 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69      db->nSavepoi
14a50 6e 74 2b 2b 3b 0a 20 20 20 20 20 20 20 20 7d 0a  nt++;.        }.
14a60 20 20 20 20 0a 20 20 20 20 20 20 20 20 2f 2a 20      .        /* 
14a70 4c 69 6e 6b 20 74 68 65 20 6e 65 77 20 73 61 76  Link the new sav
14a80 65 70 6f 69 6e 74 20 69 6e 74 6f 20 74 68 65 20  epoint into the 
14a90 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 27  database handle'
14aa0 73 20 6c 69 73 74 2e 20 2a 2f 0a 20 20 20 20 20  s list. */.     
14ab0 20 20 20 70 4e 65 77 2d 3e 70 4e 65 78 74 20 3d     pNew->pNext =
14ac0 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b   db->pSavepoint;
14ad0 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 70 53 61  .        db->pSa
14ae0 76 65 70 6f 69 6e 74 20 3d 20 70 4e 65 77 3b 0a  vepoint = pNew;.
14af0 20 20 20 20 20 20 20 20 70 4e 65 77 2d 3e 6e 44          pNew->nD
14b00 65 66 65 72 72 65 64 43 6f 6e 73 20 3d 20 64 62  eferredCons = db
14b10 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b  ->nDeferredCons;
14b20 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
14b30 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69 53 61 76   }else{.    iSav
14b40 65 70 6f 69 6e 74 20 3d 20 30 3b 0a 0a 20 20 20  epoint = 0;..   
14b50 20 2f 2a 20 46 69 6e 64 20 74 68 65 20 6e 61 6d   /* Find the nam
14b60 65 64 20 73 61 76 65 70 6f 69 6e 74 2e 20 49 66  ed savepoint. If
14b70 20 74 68 65 72 65 20 69 73 20 6e 6f 20 73 75 63   there is no suc
14b80 68 20 73 61 76 65 70 6f 69 6e 74 2c 20 74 68 65  h savepoint, the
14b90 6e 20 61 6e 0a 20 20 20 20 2a 2a 20 61 6e 20 65  n an.    ** an e
14ba0 72 72 6f 72 20 69 73 20 72 65 74 75 72 6e 65 64  rror is returned
14bb0 20 74 6f 20 74 68 65 20 75 73 65 72 2e 20 20 2a   to the user.  *
14bc0 2f 0a 20 20 20 20 66 6f 72 28 0a 20 20 20 20 20  /.    for(.     
14bd0 20 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 64 62   pSavepoint = db
14be0 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b 20 0a 20  ->pSavepoint; . 
14bf0 20 20 20 20 20 70 53 61 76 65 70 6f 69 6e 74 20       pSavepoint 
14c00 26 26 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d  && sqlite3StrICm
14c10 70 28 70 53 61 76 65 70 6f 69 6e 74 2d 3e 7a 4e  p(pSavepoint->zN
14c20 61 6d 65 2c 20 7a 4e 61 6d 65 29 3b 0a 20 20 20  ame, zName);.   
14c30 20 20 20 70 53 61 76 65 70 6f 69 6e 74 20 3d 20     pSavepoint = 
14c40 70 53 61 76 65 70 6f 69 6e 74 2d 3e 70 4e 65 78  pSavepoint->pNex
14c50 74 0a 20 20 20 20 29 7b 0a 20 20 20 20 20 20 69  t.    ){.      i
14c60 53 61 76 65 70 6f 69 6e 74 2b 2b 3b 0a 20 20 20  Savepoint++;.   
14c70 20 7d 0a 20 20 20 20 69 66 28 20 21 70 53 61 76   }.    if( !pSav
14c80 65 70 6f 69 6e 74 20 29 7b 0a 20 20 20 20 20 20  epoint ){.      
14c90 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67  sqlite3SetString
14ca0 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62  (&p->zErrMsg, db
14cb0 2c 20 22 6e 6f 20 73 75 63 68 20 73 61 76 65 70  , "no such savep
14cc0 6f 69 6e 74 3a 20 25 73 22 2c 20 7a 4e 61 6d 65  oint: %s", zName
14cd0 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51  );.      rc = SQ
14ce0 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20  LITE_ERROR;.    
14cf0 7d 65 6c 73 65 20 69 66 28 20 0a 20 20 20 20 20  }else if( .     
14d00 20 20 20 64 62 2d 3e 77 72 69 74 65 56 64 62 65     db->writeVdbe
14d10 43 6e 74 3e 30 20 7c 7c 20 28 70 31 3d 3d 53 41  Cnt>0 || (p1==SA
14d20 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b  VEPOINT_ROLLBACK
14d30 20 26 26 20 64 62 2d 3e 61 63 74 69 76 65 56 64   && db->activeVd
14d40 62 65 43 6e 74 3e 31 29 20 0a 20 20 20 20 29 7b  beCnt>1) .    ){
14d50 0a 20 20 20 20 20 20 2f 2a 20 49 74 20 69 73 20  .      /* It is 
14d60 6e 6f 74 20 70 6f 73 73 69 62 6c 65 20 74 6f 20  not possible to 
14d70 72 65 6c 65 61 73 65 20 28 63 6f 6d 6d 69 74 29  release (commit)
14d80 20 61 20 73 61 76 65 70 6f 69 6e 74 20 69 66 20   a savepoint if 
14d90 74 68 65 72 65 20 61 72 65 20 0a 20 20 20 20 20  there are .     
14da0 20 2a 2a 20 61 63 74 69 76 65 20 77 72 69 74 65   ** active write
14db0 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 49 74 20   statements. It 
14dc0 69 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65 20  is not possible 
14dd0 74 6f 20 72 6f 6c 6c 62 61 63 6b 20 61 20 73 61  to rollback a sa
14de0 76 65 70 6f 69 6e 74 0a 20 20 20 20 20 20 2a 2a  vepoint.      **
14df0 20 69 66 20 74 68 65 72 65 20 61 72 65 20 61 6e   if there are an
14e00 79 20 61 63 74 69 76 65 20 73 74 61 74 65 6d 65  y active stateme
14e10 6e 74 73 20 61 74 20 61 6c 6c 2e 0a 20 20 20 20  nts at all..    
14e20 20 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69 74    */.      sqlit
14e30 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e  e3SetString(&p->
14e40 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 0a 20 20  zErrMsg, db, .  
14e50 20 20 20 20 20 20 22 63 61 6e 6e 6f 74 20 25 73        "cannot %s
14e60 20 73 61 76 65 70 6f 69 6e 74 20 2d 20 53 51 4c   savepoint - SQL
14e70 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 70   statements in p
14e80 72 6f 67 72 65 73 73 22 2c 0a 20 20 20 20 20 20  rogress",.      
14e90 20 20 28 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54    (p1==SAVEPOINT
14ea0 5f 52 4f 4c 4c 42 41 43 4b 20 3f 20 22 72 6f 6c  _ROLLBACK ? "rol
14eb0 6c 62 61 63 6b 22 3a 20 22 72 65 6c 65 61 73 65  lback": "release
14ec0 22 29 0a 20 20 20 20 20 20 29 3b 0a 20 20 20 20  ").      );.    
14ed0 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55    rc = SQLITE_BU
14ee0 53 59 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 0a  SY;.    }else{..
14ef0 20 20 20 20 20 20 2f 2a 20 44 65 74 65 72 6d 69        /* Determi
14f00 6e 65 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  ne whether or no
14f10 74 20 74 68 69 73 20 69 73 20 61 20 74 72 61 6e  t this is a tran
14f20 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e  saction savepoin
14f30 74 2e 20 49 66 20 73 6f 2c 0a 20 20 20 20 20 20  t. If so,.      
14f40 2a 2a 20 61 6e 64 20 74 68 69 73 20 69 73 20 61  ** and this is a
14f50 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64   RELEASE command
14f60 2c 20 74 68 65 6e 20 74 68 65 20 63 75 72 72 65  , then the curre
14f70 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 0a  nt transaction .
14f80 20 20 20 20 20 20 2a 2a 20 69 73 20 63 6f 6d 6d        ** is comm
14f90 69 74 74 65 64 2e 20 0a 20 20 20 20 20 20 2a 2f  itted. .      */
14fa0 0a 20 20 20 20 20 20 69 6e 74 20 69 73 54 72 61  .      int isTra
14fb0 6e 73 61 63 74 69 6f 6e 20 3d 20 70 53 61 76 65  nsaction = pSave
14fc0 70 6f 69 6e 74 2d 3e 70 4e 65 78 74 3d 3d 30 20  point->pNext==0 
14fd0 26 26 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63  && db->isTransac
14fe0 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3b 0a 20  tionSavepoint;. 
14ff0 20 20 20 20 20 69 66 28 20 69 73 54 72 61 6e 73       if( isTrans
15000 61 63 74 69 6f 6e 20 26 26 20 70 31 3d 3d 53 41  action && p1==SA
15010 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20  VEPOINT_RELEASE 
15020 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 28  ){.        if( (
15030 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
15040 43 68 65 63 6b 46 6b 28 70 2c 20 31 29 29 21 3d  CheckFk(p, 1))!=
15050 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
15060 20 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65         goto vdbe
15070 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 20  _return;.       
15080 20 7d 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 61   }.        db->a
15090 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 31 3b 0a 20  utoCommit = 1;. 
150a0 20 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74         if( sqlit
150b0 65 33 56 64 62 65 48 61 6c 74 28 70 29 3d 3d 53  e3VdbeHalt(p)==S
150c0 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20  QLITE_BUSY ){.  
150d0 20 20 20 20 20 20 20 20 70 2d 3e 70 63 20 3d 20          p->pc = 
150e0 70 63 3b 0a 20 20 20 20 20 20 20 20 20 20 64 62  pc;.          db
150f0 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 30  ->autoCommit = 0
15100 3b 0a 20 20 20 20 20 20 20 20 20 20 70 2d 3e 72  ;.          p->r
15110 63 20 3d 20 72 63 20 3d 20 53 51 4c 49 54 45 5f  c = rc = SQLITE_
15120 42 55 53 59 3b 0a 20 20 20 20 20 20 20 20 20 20  BUSY;.          
15130 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e  goto vdbe_return
15140 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
15150 20 20 20 20 64 62 2d 3e 69 73 54 72 61 6e 73 61      db->isTransa
15160 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 20 3d  ctionSavepoint =
15170 20 30 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d   0;.        rc =
15180 20 70 2d 3e 72 63 3b 0a 20 20 20 20 20 20 7d 65   p->rc;.      }e
15190 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 69 53 61  lse{.        iSa
151a0 76 65 70 6f 69 6e 74 20 3d 20 64 62 2d 3e 6e 53  vepoint = db->nS
151b0 61 76 65 70 6f 69 6e 74 20 2d 20 69 53 61 76 65  avepoint - iSave
151c0 70 6f 69 6e 74 20 2d 20 31 3b 0a 20 20 20 20 20  point - 1;.     
151d0 20 20 20 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c     for(ii=0; ii<
151e0 64 62 2d 3e 6e 44 62 3b 20 69 69 2b 2b 29 7b 0a  db->nDb; ii++){.
151f0 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 73            rc = s
15200 71 6c 69 74 65 33 42 74 72 65 65 53 61 76 65 70  qlite3BtreeSavep
15210 6f 69 6e 74 28 64 62 2d 3e 61 44 62 5b 69 69 5d  oint(db->aDb[ii]
15220 2e 70 42 74 2c 20 70 31 2c 20 69 53 61 76 65 70  .pBt, p1, iSavep
15230 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 20  oint);.         
15240 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
15250 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  OK ){.          
15260 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
15270 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20  _to_error;.     
15280 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d       }.        }
15290 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 31 3d  .        if( p1=
152a0 3d 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42  =SAVEPOINT_ROLLB
152b0 41 43 4b 20 26 26 20 28 64 62 2d 3e 66 6c 61 67  ACK && (db->flag
152c0 73 26 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43  s&SQLITE_InternC
152d0 68 61 6e 67 65 73 29 21 3d 30 20 29 7b 0a 20 20  hanges)!=0 ){.  
152e0 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 45          sqlite3E
152f0 78 70 69 72 65 50 72 65 70 61 72 65 64 53 74 61  xpirePreparedSta
15300 74 65 6d 65 6e 74 73 28 64 62 29 3b 0a 20 20 20  tements(db);.   
15310 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 52 65         sqlite3Re
15320 73 65 74 49 6e 74 65 72 6e 61 6c 53 63 68 65 6d  setInternalSchem
15330 61 28 64 62 2c 20 30 29 3b 0a 20 20 20 20 20 20  a(db, 0);.      
15340 20 20 20 20 64 62 2d 3e 66 6c 61 67 73 20 3d 20      db->flags = 
15350 28 64 62 2d 3e 66 6c 61 67 73 20 7c 20 53 51 4c  (db->flags | SQL
15360 49 54 45 5f 49 6e 74 65 72 6e 43 68 61 6e 67 65  ITE_InternChange
15370 73 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  s);.        }.  
15380 20 20 20 20 7d 0a 20 20 0a 20 20 20 20 20 20 2f      }.  .      /
15390 2a 20 52 65 67 61 72 64 6c 65 73 73 20 6f 66 20  * Regardless of 
153a0 77 68 65 74 68 65 72 20 74 68 69 73 20 69 73 20  whether this is 
153b0 61 20 52 45 4c 45 41 53 45 20 6f 72 20 52 4f 4c  a RELEASE or ROL
153c0 4c 42 41 43 4b 2c 20 64 65 73 74 72 6f 79 20 61  LBACK, destroy a
153d0 6c 6c 20 0a 20 20 20 20 20 20 2a 2a 20 73 61 76  ll .      ** sav
153e0 65 70 6f 69 6e 74 73 20 6e 65 73 74 65 64 20 69  epoints nested i
153f0 6e 73 69 64 65 20 6f 66 20 74 68 65 20 73 61 76  nside of the sav
15400 65 70 6f 69 6e 74 20 62 65 69 6e 67 20 6f 70 65  epoint being ope
15410 72 61 74 65 64 20 6f 6e 2e 20 2a 2f 0a 20 20 20  rated on. */.   
15420 20 20 20 77 68 69 6c 65 28 20 64 62 2d 3e 70 53     while( db->pS
15430 61 76 65 70 6f 69 6e 74 21 3d 70 53 61 76 65 70  avepoint!=pSavep
15440 6f 69 6e 74 20 29 7b 0a 20 20 20 20 20 20 20 20  oint ){.        
15450 70 54 6d 70 20 3d 20 64 62 2d 3e 70 53 61 76 65  pTmp = db->pSave
15460 70 6f 69 6e 74 3b 0a 20 20 20 20 20 20 20 20 64  point;.        d
15470 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 3d 20  b->pSavepoint = 
15480 70 54 6d 70 2d 3e 70 4e 65 78 74 3b 0a 20 20 20  pTmp->pNext;.   
15490 20 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72       sqlite3DbFr
154a0 65 65 28 64 62 2c 20 70 54 6d 70 29 3b 0a 20 20  ee(db, pTmp);.  
154b0 20 20 20 20 20 20 64 62 2d 3e 6e 53 61 76 65 70        db->nSavep
154c0 6f 69 6e 74 2d 2d 3b 0a 20 20 20 20 20 20 7d 0a  oint--;.      }.
154d0 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 69 74 20  .      /* If it 
154e0 69 73 20 61 20 52 45 4c 45 41 53 45 2c 20 74 68  is a RELEASE, th
154f0 65 6e 20 64 65 73 74 72 6f 79 20 74 68 65 20 73  en destroy the s
15500 61 76 65 70 6f 69 6e 74 20 62 65 69 6e 67 20 6f  avepoint being o
15510 70 65 72 61 74 65 64 20 6f 6e 20 0a 20 20 20 20  perated on .    
15520 20 20 2a 2a 20 74 6f 6f 2e 20 49 66 20 69 74 20    ** too. If it 
15530 69 73 20 61 20 52 4f 4c 4c 42 41 43 4b 20 54 4f  is a ROLLBACK TO
15540 2c 20 74 68 65 6e 20 73 65 74 20 74 68 65 20 6e  , then set the n
15550 75 6d 62 65 72 20 6f 66 20 64 65 66 65 72 72 65  umber of deferre
15560 64 20 0a 20 20 20 20 20 20 2a 2a 20 63 6f 6e 73  d .      ** cons
15570 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e  traint violation
15580 73 20 70 72 65 73 65 6e 74 20 69 6e 20 74 68 65  s present in the
15590 20 64 61 74 61 62 61 73 65 20 74 6f 20 74 68 65   database to the
155a0 20 76 61 6c 75 65 20 73 74 6f 72 65 64 0a 20 20   value stored.  
155b0 20 20 20 20 2a 2a 20 77 68 65 6e 20 74 68 65 20      ** when the 
155c0 73 61 76 65 70 6f 69 6e 74 20 77 61 73 20 63 72  savepoint was cr
155d0 65 61 74 65 64 2e 20 20 2a 2f 0a 20 20 20 20 20  eated.  */.     
155e0 20 69 66 28 20 70 31 3d 3d 53 41 56 45 50 4f 49   if( p1==SAVEPOI
155f0 4e 54 5f 52 45 4c 45 41 53 45 20 29 7b 0a 20 20  NT_RELEASE ){.  
15600 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 53        assert( pS
15610 61 76 65 70 6f 69 6e 74 3d 3d 64 62 2d 3e 70 53  avepoint==db->pS
15620 61 76 65 70 6f 69 6e 74 20 29 3b 0a 20 20 20 20  avepoint );.    
15630 20 20 20 20 64 62 2d 3e 70 53 61 76 65 70 6f 69      db->pSavepoi
15640 6e 74 20 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d  nt = pSavepoint-
15650 3e 70 4e 65 78 74 3b 0a 20 20 20 20 20 20 20 20  >pNext;.        
15660 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62  sqlite3DbFree(db
15670 2c 20 70 53 61 76 65 70 6f 69 6e 74 29 3b 0a 20  , pSavepoint);. 
15680 20 20 20 20 20 20 20 69 66 28 20 21 69 73 54 72         if( !isTr
15690 61 6e 73 61 63 74 69 6f 6e 20 29 7b 0a 20 20 20  ansaction ){.   
156a0 20 20 20 20 20 20 20 64 62 2d 3e 6e 53 61 76 65         db->nSave
156b0 70 6f 69 6e 74 2d 2d 3b 0a 20 20 20 20 20 20 20  point--;.       
156c0 20 7d 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a   }.      }else{.
156d0 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 44 65 66          db->nDef
156e0 65 72 72 65 64 43 6f 6e 73 20 3d 20 70 53 61 76  erredCons = pSav
156f0 65 70 6f 69 6e 74 2d 3e 6e 44 65 66 65 72 72 65  epoint->nDeferre
15700 64 43 6f 6e 73 3b 0a 20 20 20 20 20 20 7d 0a 20  dCons;.      }. 
15710 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 62 72 65 61     }.  }..  brea
15720 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
15730 20 41 75 74 6f 43 6f 6d 6d 69 74 20 50 31 20 50   AutoCommit P1 P
15740 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 65  2 * * *.**.** Se
15750 74 20 74 68 65 20 64 61 74 61 62 61 73 65 20 61  t the database a
15760 75 74 6f 2d 63 6f 6d 6d 69 74 20 66 6c 61 67 20  uto-commit flag 
15770 74 6f 20 50 31 20 28 31 20 6f 72 20 30 29 2e 20  to P1 (1 or 0). 
15780 49 66 20 50 32 20 69 73 20 74 72 75 65 2c 20 72  If P2 is true, r
15790 6f 6c 6c 0a 2a 2a 20 62 61 63 6b 20 61 6e 79 20  oll.** back any 
157a0 63 75 72 72 65 6e 74 6c 79 20 61 63 74 69 76 65  currently active
157b0 20 62 74 72 65 65 20 74 72 61 6e 73 61 63 74 69   btree transacti
157c0 6f 6e 73 2e 20 49 66 20 74 68 65 72 65 20 61 72  ons. If there ar
157d0 65 20 61 6e 79 20 61 63 74 69 76 65 0a 2a 2a 20  e any active.** 
157e0 56 4d 73 20 28 61 70 61 72 74 20 66 72 6f 6d 20  VMs (apart from 
157f0 74 68 69 73 20 6f 6e 65 29 2c 20 74 68 65 6e 20  this one), then 
15800 61 20 52 4f 4c 4c 42 41 43 4b 20 66 61 69 6c 73  a ROLLBACK fails
15810 2e 20 20 41 20 43 4f 4d 4d 49 54 20 66 61 69 6c  .  A COMMIT fail
15820 73 20 69 66 0a 2a 2a 20 74 68 65 72 65 20 61 72  s if.** there ar
15830 65 20 61 63 74 69 76 65 20 77 72 69 74 69 6e 67  e active writing
15840 20 56 4d 73 20 6f 72 20 61 63 74 69 76 65 20 56   VMs or active V
15850 4d 73 20 74 68 61 74 20 75 73 65 20 73 68 61 72  Ms that use shar
15860 65 64 20 63 61 63 68 65 2e 0a 2a 2a 0a 2a 2a 20  ed cache..**.** 
15870 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  This instruction
15880 20 63 61 75 73 65 73 20 74 68 65 20 56 4d 20 74   causes the VM t
15890 6f 20 68 61 6c 74 2e 0a 2a 2f 0a 63 61 73 65 20  o halt..*/.case 
158a0 4f 50 5f 41 75 74 6f 43 6f 6d 6d 69 74 3a 20 7b  OP_AutoCommit: {
158b0 0a 20 20 69 6e 74 20 64 65 73 69 72 65 64 41 75  .  int desiredAu
158c0 74 6f 43 6f 6d 6d 69 74 3b 0a 20 20 69 6e 74 20  toCommit;.  int 
158d0 69 52 6f 6c 6c 62 61 63 6b 3b 0a 20 20 69 6e 74  iRollback;.  int
158e0 20 74 75 72 6e 4f 6e 41 43 3b 0a 0a 20 20 64 65   turnOnAC;..  de
158f0 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 20  siredAutoCommit 
15900 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 69 52 6f  = pOp->p1;.  iRo
15910 6c 6c 62 61 63 6b 20 3d 20 70 4f 70 2d 3e 70 32  llback = pOp->p2
15920 3b 0a 20 20 74 75 72 6e 4f 6e 41 43 20 3d 20 64  ;.  turnOnAC = d
15930 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74  esiredAutoCommit
15940 20 26 26 20 21 64 62 2d 3e 61 75 74 6f 43 6f 6d   && !db->autoCom
15950 6d 69 74 3b 0a 20 20 61 73 73 65 72 74 28 20 64  mit;.  assert( d
15960 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74  esiredAutoCommit
15970 3d 3d 31 20 7c 7c 20 64 65 73 69 72 65 64 41 75  ==1 || desiredAu
15980 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 29 3b 0a 20  toCommit==0 );. 
15990 20 61 73 73 65 72 74 28 20 64 65 73 69 72 65 64   assert( desired
159a0 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20 7c 7c  AutoCommit==1 ||
159b0 20 69 52 6f 6c 6c 62 61 63 6b 3d 3d 30 20 29 3b   iRollback==0 );
159c0 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 61  .  assert( db->a
159d0 63 74 69 76 65 56 64 62 65 43 6e 74 3e 30 20 29  ctiveVdbeCnt>0 )
159e0 3b 20 20 2f 2a 20 41 74 20 6c 65 61 73 74 20 74  ;  /* At least t
159f0 68 69 73 20 6f 6e 65 20 56 4d 20 69 73 20 61 63  his one VM is ac
15a00 74 69 76 65 20 2a 2f 0a 0a 20 20 69 66 28 20 74  tive */..  if( t
15a10 75 72 6e 4f 6e 41 43 20 26 26 20 69 52 6f 6c 6c  urnOnAC && iRoll
15a20 62 61 63 6b 20 26 26 20 64 62 2d 3e 61 63 74 69  back && db->acti
15a30 76 65 56 64 62 65 43 6e 74 3e 31 20 29 7b 0a 20  veVdbeCnt>1 ){. 
15a40 20 20 20 2f 2a 20 49 66 20 74 68 69 73 20 69 6e     /* If this in
15a50 73 74 72 75 63 74 69 6f 6e 20 69 6d 70 6c 65 6d  struction implem
15a60 65 6e 74 73 20 61 20 52 4f 4c 4c 42 41 43 4b 20  ents a ROLLBACK 
15a70 61 6e 64 20 6f 74 68 65 72 20 56 4d 73 20 61 72  and other VMs ar
15a80 65 0a 20 20 20 20 2a 2a 20 73 74 69 6c 6c 20 72  e.    ** still r
15a90 75 6e 6e 69 6e 67 2c 20 61 6e 64 20 61 20 74 72  unning, and a tr
15aa0 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 61 63 74  ansaction is act
15ab0 69 76 65 2c 20 72 65 74 75 72 6e 20 61 6e 20 65  ive, return an e
15ac0 72 72 6f 72 20 69 6e 64 69 63 61 74 69 6e 67 0a  rror indicating.
15ad0 20 20 20 20 2a 2a 20 74 68 61 74 20 74 68 65 20      ** that the 
15ae0 6f 74 68 65 72 20 56 4d 73 20 6d 75 73 74 20 63  other VMs must c
15af0 6f 6d 70 6c 65 74 65 20 66 69 72 73 74 2e 20 0a  omplete first. .
15b00 20 20 20 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74      */.    sqlit
15b10 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e  e3SetString(&p->
15b20 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 63 61  zErrMsg, db, "ca
15b30 6e 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 20 74 72  nnot rollback tr
15b40 61 6e 73 61 63 74 69 6f 6e 20 2d 20 22 0a 20 20  ansaction - ".  
15b50 20 20 20 20 20 20 22 53 51 4c 20 73 74 61 74 65        "SQL state
15b60 6d 65 6e 74 73 20 69 6e 20 70 72 6f 67 72 65 73  ments in progres
15b70 73 22 29 3b 0a 20 20 20 20 72 63 20 3d 20 53 51  s");.    rc = SQ
15b80 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 7d 65 6c  LITE_BUSY;.  }el
15b90 73 65 20 69 66 28 20 74 75 72 6e 4f 6e 41 43 20  se if( turnOnAC 
15ba0 26 26 20 21 69 52 6f 6c 6c 62 61 63 6b 20 26 26  && !iRollback &&
15bb0 20 64 62 2d 3e 77 72 69 74 65 56 64 62 65 43 6e   db->writeVdbeCn
15bc0 74 3e 30 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66  t>0 ){.    /* If
15bd0 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
15be0 6e 20 69 6d 70 6c 65 6d 65 6e 74 73 20 61 20 43  n implements a C
15bf0 4f 4d 4d 49 54 20 61 6e 64 20 6f 74 68 65 72 20  OMMIT and other 
15c00 56 4d 73 20 61 72 65 20 77 72 69 74 69 6e 67 0a  VMs are writing.
15c10 20 20 20 20 2a 2a 20 72 65 74 75 72 6e 20 61 6e      ** return an
15c20 20 65 72 72 6f 72 20 69 6e 64 69 63 61 74 69 6e   error indicatin
15c30 67 20 74 68 61 74 20 74 68 65 20 6f 74 68 65 72  g that the other
15c40 20 56 4d 73 20 6d 75 73 74 20 63 6f 6d 70 6c 65   VMs must comple
15c50 74 65 20 66 69 72 73 74 2e 20 0a 20 20 20 20 2a  te first. .    *
15c60 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65 74  /.    sqlite3Set
15c70 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d  String(&p->zErrM
15c80 73 67 2c 20 64 62 2c 20 22 63 61 6e 6e 6f 74 20  sg, db, "cannot 
15c90 63 6f 6d 6d 69 74 20 74 72 61 6e 73 61 63 74 69  commit transacti
15ca0 6f 6e 20 2d 20 22 0a 20 20 20 20 20 20 20 20 22  on - ".        "
15cb0 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69  SQL statements i
15cc0 6e 20 70 72 6f 67 72 65 73 73 22 29 3b 0a 20 20  n progress");.  
15cd0 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55    rc = SQLITE_BU
15ce0 53 59 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  SY;.  }else if( 
15cf0 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69  desiredAutoCommi
15d00 74 21 3d 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69  t!=db->autoCommi
15d10 74 20 29 7b 0a 20 20 20 20 69 66 28 20 69 52 6f  t ){.    if( iRo
15d20 6c 6c 62 61 63 6b 20 29 7b 0a 20 20 20 20 20 20  llback ){.      
15d30 61 73 73 65 72 74 28 20 64 65 73 69 72 65 64 41  assert( desiredA
15d40 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20 29 3b 0a  utoCommit==1 );.
15d50 20 20 20 20 20 20 73 71 6c 69 74 65 33 52 6f 6c        sqlite3Rol
15d60 6c 62 61 63 6b 41 6c 6c 28 64 62 29 3b 0a 20 20  lbackAll(db);.  
15d70 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d      db->autoComm
15d80 69 74 20 3d 20 31 3b 0a 20 20 20 20 7d 65 6c 73  it = 1;.    }els
15d90 65 20 69 66 28 20 28 72 63 20 3d 20 73 71 6c 69  e if( (rc = sqli
15da0 74 65 33 56 64 62 65 43 68 65 63 6b 46 6b 28 70  te3VdbeCheckFk(p
15db0 2c 20 31 29 29 21 3d 53 51 4c 49 54 45 5f 4f 4b  , 1))!=SQLITE_OK
15dc0 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 76   ){.      goto v
15dd0 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20  dbe_return;.    
15de0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 64 62 2d  }else{.      db-
15df0 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 28 75  >autoCommit = (u
15e00 38 29 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d  8)desiredAutoCom
15e10 6d 69 74 3b 0a 20 20 20 20 20 20 69 66 28 20 73  mit;.      if( s
15e20 71 6c 69 74 65 33 56 64 62 65 48 61 6c 74 28 70  qlite3VdbeHalt(p
15e30 29 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29  )==SQLITE_BUSY )
15e40 7b 0a 20 20 20 20 20 20 20 20 70 2d 3e 70 63 20  {.        p->pc 
15e50 3d 20 70 63 3b 0a 20 20 20 20 20 20 20 20 64 62  = pc;.        db
15e60 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 28  ->autoCommit = (
15e70 75 38 29 28 31 2d 64 65 73 69 72 65 64 41 75 74  u8)(1-desiredAut
15e80 6f 43 6f 6d 6d 69 74 29 3b 0a 20 20 20 20 20 20  oCommit);.      
15e90 20 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53    p->rc = rc = S
15ea0 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20  QLITE_BUSY;.    
15eb0 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65      goto vdbe_re
15ec0 74 75 72 6e 3b 0a 20 20 20 20 20 20 7d 0a 20 20  turn;.      }.  
15ed0 20 20 7d 0a 20 20 20 20 61 73 73 65 72 74 28 20    }.    assert( 
15ee0 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 3d 3d  db->nStatement==
15ef0 30 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  0 );.    sqlite3
15f00 43 6c 6f 73 65 53 61 76 65 70 6f 69 6e 74 73 28  CloseSavepoints(
15f10 64 62 29 3b 0a 20 20 20 20 69 66 28 20 70 2d 3e  db);.    if( p->
15f20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc==SQLITE_OK ){
15f30 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49  .      rc = SQLI
15f40 54 45 5f 44 4f 4e 45 3b 0a 20 20 20 20 7d 65 6c  TE_DONE;.    }el
15f50 73 65 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53  se{.      rc = S
15f60 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20  QLITE_ERROR;.   
15f70 20 7d 0a 20 20 20 20 67 6f 74 6f 20 76 64 62 65   }.    goto vdbe
15f80 5f 72 65 74 75 72 6e 3b 0a 20 20 7d 65 6c 73 65  _return;.  }else
15f90 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65 74  {.    sqlite3Set
15fa0 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d  String(&p->zErrM
15fb0 73 67 2c 20 64 62 2c 0a 20 20 20 20 20 20 20 20  sg, db,.        
15fc0 28 21 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d  (!desiredAutoCom
15fd0 6d 69 74 29 3f 22 63 61 6e 6e 6f 74 20 73 74 61  mit)?"cannot sta
15fe0 72 74 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  rt a transaction
15ff0 20 77 69 74 68 69 6e 20 61 20 74 72 61 6e 73 61   within a transa
16000 63 74 69 6f 6e 22 3a 28 0a 20 20 20 20 20 20 20  ction":(.       
16010 20 28 69 52 6f 6c 6c 62 61 63 6b 29 3f 22 63 61   (iRollback)?"ca
16020 6e 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 20 2d 20  nnot rollback - 
16030 6e 6f 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  no transaction i
16040 73 20 61 63 74 69 76 65 22 3a 0a 20 20 20 20 20  s active":.     
16050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63                "c
16060 61 6e 6e 6f 74 20 63 6f 6d 6d 69 74 20 2d 20 6e  annot commit - n
16070 6f 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  o transaction is
16080 20 61 63 74 69 76 65 22 29 29 3b 0a 20 20 20 20   active"));.    
16090 20 20 20 20 20 0a 20 20 20 20 72 63 20 3d 20 53       .    rc = S
160a0 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 7d  QLITE_ERROR;.  }
160b0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
160c0 4f 70 63 6f 64 65 3a 20 54 72 61 6e 73 61 63 74  Opcode: Transact
160d0 69 6f 6e 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ion P1 P2 * * *.
160e0 2a 2a 0a 2a 2a 20 42 65 67 69 6e 20 61 20 74 72  **.** Begin a tr
160f0 61 6e 73 61 63 74 69 6f 6e 2e 20 20 54 68 65 20  ansaction.  The 
16100 74 72 61 6e 73 61 63 74 69 6f 6e 20 65 6e 64 73  transaction ends
16110 20 77 68 65 6e 20 61 20 43 6f 6d 6d 69 74 20 6f   when a Commit o
16120 72 20 52 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 6f 70  r Rollback.** op
16130 63 6f 64 65 20 69 73 20 65 6e 63 6f 75 6e 74 65  code is encounte
16140 72 65 64 2e 20 20 44 65 70 65 6e 64 69 6e 67 20  red.  Depending 
16150 6f 6e 20 74 68 65 20 4f 4e 20 43 4f 4e 46 4c 49  on the ON CONFLI
16160 43 54 20 73 65 74 74 69 6e 67 2c 20 74 68 65 0a  CT setting, the.
16170 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d  ** transaction m
16180 69 67 68 74 20 61 6c 73 6f 20 62 65 20 72 6f 6c  ight also be rol
16190 6c 65 64 20 62 61 63 6b 20 69 66 20 61 6e 20 65  led back if an e
161a0 72 72 6f 72 20 69 73 20 65 6e 63 6f 75 6e 74 65  rror is encounte
161b0 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73  red..**.** P1 is
161c0 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68   the index of th
161d0 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
161e0 6f 6e 20 77 68 69 63 68 20 74 68 65 20 74 72 61  on which the tra
161f0 6e 73 61 63 74 69 6f 6e 20 69 73 0a 2a 2a 20 73  nsaction is.** s
16200 74 61 72 74 65 64 2e 20 20 49 6e 64 65 78 20 30  tarted.  Index 0
16210 20 69 73 20 74 68 65 20 6d 61 69 6e 20 64 61 74   is the main dat
16220 61 62 61 73 65 20 66 69 6c 65 20 61 6e 64 20 69  abase file and i
16230 6e 64 65 78 20 31 20 69 73 20 74 68 65 0a 2a 2a  ndex 1 is the.**
16240 20 66 69 6c 65 20 75 73 65 64 20 66 6f 72 20 74   file used for t
16250 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e  emporary tables.
16260 20 20 49 6e 64 69 63 65 73 20 6f 66 20 32 20 6f    Indices of 2 o
16270 72 20 6d 6f 72 65 20 61 72 65 20 75 73 65 64 20  r more are used 
16280 66 6f 72 0a 2a 2a 20 61 74 74 61 63 68 65 64 20  for.** attached 
16290 64 61 74 61 62 61 73 65 73 2e 0a 2a 2a 0a 2a 2a  databases..**.**
162a0 20 49 66 20 50 32 20 69 73 20 6e 6f 6e 2d 7a 65   If P2 is non-ze
162b0 72 6f 2c 20 74 68 65 6e 20 61 20 77 72 69 74 65  ro, then a write
162c0 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20  -transaction is 
162d0 73 74 61 72 74 65 64 2e 20 20 41 20 52 45 53 45  started.  A RESE
162e0 52 56 45 44 20 6c 6f 63 6b 20 69 73 0a 2a 2a 20  RVED lock is.** 
162f0 6f 62 74 61 69 6e 65 64 20 6f 6e 20 74 68 65 20  obtained on the 
16300 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 77 68  database file wh
16310 65 6e 20 61 20 77 72 69 74 65 2d 74 72 61 6e 73  en a write-trans
16320 61 63 74 69 6f 6e 20 69 73 20 73 74 61 72 74 65  action is starte
16330 64 2e 20 20 4e 6f 0a 2a 2a 20 6f 74 68 65 72 20  d.  No.** other 
16340 70 72 6f 63 65 73 73 20 63 61 6e 20 73 74 61 72  process can star
16350 74 20 61 6e 6f 74 68 65 72 20 77 72 69 74 65 20  t another write 
16360 74 72 61 6e 73 61 63 74 69 6f 6e 20 77 68 69 6c  transaction whil
16370 65 20 74 68 69 73 20 74 72 61 6e 73 61 63 74 69  e this transacti
16380 6f 6e 20 69 73 0a 2a 2a 20 75 6e 64 65 72 77 61  on is.** underwa
16390 79 2e 20 20 53 74 61 72 74 69 6e 67 20 61 20 77  y.  Starting a w
163a0 72 69 74 65 20 74 72 61 6e 73 61 63 74 69 6f 6e  rite transaction
163b0 20 61 6c 73 6f 20 63 72 65 61 74 65 73 20 61 20   also creates a 
163c0 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c  rollback journal
163d0 2e 20 41 0a 2a 2a 20 77 72 69 74 65 20 74 72 61  . A.** write tra
163e0 6e 73 61 63 74 69 6f 6e 20 6d 75 73 74 20 62 65  nsaction must be
163f0 20 73 74 61 72 74 65 64 20 62 65 66 6f 72 65 20   started before 
16400 61 6e 79 20 63 68 61 6e 67 65 73 20 63 61 6e 20  any changes can 
16410 62 65 20 6d 61 64 65 20 74 6f 20 74 68 65 0a 2a  be made to the.*
16420 2a 20 64 61 74 61 62 61 73 65 2e 20 20 49 66 20  * database.  If 
16430 50 32 20 69 73 20 32 20 6f 72 20 67 72 65 61 74  P2 is 2 or great
16440 65 72 20 74 68 65 6e 20 61 6e 20 45 58 43 4c 55  er then an EXCLU
16450 53 49 56 45 20 6c 6f 63 6b 20 69 73 20 61 6c 73  SIVE lock is als
16460 6f 20 6f 62 74 61 69 6e 65 64 0a 2a 2a 20 6f 6e  o obtained.** on
16470 20 74 68 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a   the file..**.**
16480 20 49 66 20 61 20 77 72 69 74 65 2d 74 72 61 6e   If a write-tran
16490 73 61 63 74 69 6f 6e 20 69 73 20 73 74 61 72 74  saction is start
164a0 65 64 20 61 6e 64 20 74 68 65 20 56 64 62 65 2e  ed and the Vdbe.
164b0 75 73 65 73 53 74 6d 74 4a 6f 75 72 6e 61 6c 20  usesStmtJournal 
164c0 66 6c 61 67 20 69 73 0a 2a 2a 20 74 72 75 65 20  flag is.** true 
164d0 28 74 68 69 73 20 66 6c 61 67 20 69 73 20 73 65  (this flag is se
164e0 74 20 69 66 20 74 68 65 20 56 64 62 65 20 6d 61  t if the Vdbe ma
164f0 79 20 6d 6f 64 69 66 79 20 6d 6f 72 65 20 74 68  y modify more th
16500 61 6e 20 6f 6e 65 20 72 6f 77 20 61 6e 64 20 6d  an one row and m
16510 61 79 0a 2a 2a 20 74 68 72 6f 77 20 61 6e 20 41  ay.** throw an A
16520 42 4f 52 54 20 65 78 63 65 70 74 69 6f 6e 29 2c  BORT exception),
16530 20 61 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61   a statement tra
16540 6e 73 61 63 74 69 6f 6e 20 6d 61 79 20 61 6c 73  nsaction may als
16550 6f 20 62 65 20 6f 70 65 6e 65 64 2e 0a 2a 2a 20  o be opened..** 
16560 4d 6f 72 65 20 73 70 65 63 69 66 69 63 61 6c 6c  More specificall
16570 79 2c 20 61 20 73 74 61 74 65 6d 65 6e 74 20 74  y, a statement t
16580 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6f 70  ransaction is op
16590 65 6e 65 64 20 69 66 66 20 74 68 65 20 64 61 74  ened iff the dat
165a0 61 62 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74  abase.** connect
165b0 69 6f 6e 20 69 73 20 63 75 72 72 65 6e 74 6c 79  ion is currently
165c0 20 6e 6f 74 20 69 6e 20 61 75 74 6f 63 6f 6d 6d   not in autocomm
165d0 69 74 20 6d 6f 64 65 2c 20 6f 72 20 69 66 20 74  it mode, or if t
165e0 68 65 72 65 20 61 72 65 20 6f 74 68 65 72 0a 2a  here are other.*
165f0 2a 20 61 63 74 69 76 65 20 73 74 61 74 65 6d 65  * active stateme
16600 6e 74 73 2e 20 41 20 73 74 61 74 65 6d 65 6e 74  nts. A statement
16610 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61 6c 6c   transaction all
16620 6f 77 73 20 74 68 65 20 61 66 66 65 63 74 73 20  ows the affects 
16630 6f 66 20 74 68 69 73 0a 2a 2a 20 56 44 42 45 20  of this.** VDBE 
16640 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63  to be rolled bac
16650 6b 20 61 66 74 65 72 20 61 6e 20 65 72 72 6f 72  k after an error
16660 20 77 69 74 68 6f 75 74 20 68 61 76 69 6e 67 20   without having 
16670 74 6f 20 72 6f 6c 6c 20 62 61 63 6b 20 74 68 65  to roll back the
16680 0a 2a 2a 20 65 6e 74 69 72 65 20 74 72 61 6e 73  .** entire trans
16690 61 63 74 69 6f 6e 2e 20 49 66 20 6e 6f 20 65 72  action. If no er
166a0 72 6f 72 20 69 73 20 65 6e 63 6f 75 6e 74 65 72  ror is encounter
166b0 65 64 2c 20 74 68 65 20 73 74 61 74 65 6d 65 6e  ed, the statemen
166c0 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a  t transaction.**
166d0 20 77 69 6c 6c 20 61 75 74 6f 6d 61 74 69 63 61   will automatica
166e0 6c 6c 79 20 63 6f 6d 6d 69 74 20 77 68 65 6e 20  lly commit when 
166f0 74 68 65 20 56 44 42 45 20 68 61 6c 74 73 2e 0a  the VDBE halts..
16700 2a 2a 0a 2a 2a 20 49 66 20 50 32 20 69 73 20 7a  **.** If P2 is z
16710 65 72 6f 2c 20 74 68 65 6e 20 61 20 72 65 61 64  ero, then a read
16720 2d 6c 6f 63 6b 20 69 73 20 6f 62 74 61 69 6e 65  -lock is obtaine
16730 64 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73  d on the databas
16740 65 20 66 69 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20  e file..*/.case 
16750 4f 50 5f 54 72 61 6e 73 61 63 74 69 6f 6e 3a 20  OP_Transaction: 
16760 7b 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b 0a  {.  Btree *pBt;.
16770 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
16780 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
16790 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73  <db->nDb );.  as
167a0 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d  sert( (p->btreeM
167b0 61 73 6b 20 26 20 28 31 3c 3c 70 4f 70 2d 3e 70  ask & (1<<pOp->p
167c0 31 29 29 21 3d 30 20 29 3b 0a 20 20 70 42 74 20  1))!=0 );.  pBt 
167d0 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70  = db->aDb[pOp->p
167e0 31 5d 2e 70 42 74 3b 0a 0a 20 20 69 66 28 20 70  1].pBt;..  if( p
167f0 42 74 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73  Bt ){.    rc = s
16800 71 6c 69 74 65 33 42 74 72 65 65 42 65 67 69 6e  qlite3BtreeBegin
16810 54 72 61 6e 73 28 70 42 74 2c 20 70 4f 70 2d 3e  Trans(pBt, pOp->
16820 70 32 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d  p2);.    if( rc=
16830 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a  =SQLITE_BUSY ){.
16840 20 20 20 20 20 20 70 2d 3e 70 63 20 3d 20 70 63        p->pc = pc
16850 3b 0a 20 20 20 20 20 20 70 2d 3e 72 63 20 3d 20  ;.      p->rc = 
16860 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59  rc = SQLITE_BUSY
16870 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62  ;.      goto vdb
16880 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 7d 0a  e_return;.    }.
16890 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
168a0 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67  TE_OK ){.      g
168b0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
168c0 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 0a 20  _error;.    }.. 
168d0 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 20 26     if( pOp->p2 &
168e0 26 20 70 2d 3e 75 73 65 73 53 74 6d 74 4a 6f 75  & p->usesStmtJou
168f0 72 6e 61 6c 20 0a 20 20 20 20 20 26 26 20 28 64  rnal .     && (d
16900 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30  b->autoCommit==0
16910 20 7c 7c 20 64 62 2d 3e 61 63 74 69 76 65 56 64   || db->activeVd
16920 62 65 43 6e 74 3e 31 29 20 0a 20 20 20 20 29 7b  beCnt>1) .    ){
16930 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73  .      assert( s
16940 71 6c 69 74 65 33 42 74 72 65 65 49 73 49 6e 54  qlite3BtreeIsInT
16950 72 61 6e 73 28 70 42 74 29 20 29 3b 0a 20 20 20  rans(pBt) );.   
16960 20 20 20 69 66 28 20 70 2d 3e 69 53 74 61 74 65     if( p->iState
16970 6d 65 6e 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20  ment==0 ){.     
16980 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 6e     assert( db->n
16990 53 74 61 74 65 6d 65 6e 74 3e 3d 30 20 26 26 20  Statement>=0 && 
169a0 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 3e 3d  db->nSavepoint>=
169b0 30 20 29 3b 0a 20 20 20 20 20 20 20 20 64 62 2d  0 );.        db-
169c0 3e 6e 53 74 61 74 65 6d 65 6e 74 2b 2b 3b 20 0a  >nStatement++; .
169d0 20 20 20 20 20 20 20 20 70 2d 3e 69 53 74 61 74          p->iStat
169e0 65 6d 65 6e 74 20 3d 20 64 62 2d 3e 6e 53 61 76  ement = db->nSav
169f0 65 70 6f 69 6e 74 20 2b 20 64 62 2d 3e 6e 53 74  epoint + db->nSt
16a00 61 74 65 6d 65 6e 74 3b 0a 20 20 20 20 20 20 7d  atement;.      }
16a10 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69  .      rc = sqli
16a20 74 65 33 42 74 72 65 65 42 65 67 69 6e 53 74 6d  te3BtreeBeginStm
16a30 74 28 70 42 74 2c 20 70 2d 3e 69 53 74 61 74 65  t(pBt, p->iState
16a40 6d 65 6e 74 29 3b 0a 0a 20 20 20 20 20 20 2f 2a  ment);..      /*
16a50 20 53 74 6f 72 65 20 74 68 65 20 63 75 72 72 65   Store the curre
16a60 6e 74 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  nt value of the 
16a70 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 73  database handles
16a80 20 64 65 66 65 72 72 65 64 20 63 6f 6e 73 74 72   deferred constr
16a90 61 69 6e 74 0a 20 20 20 20 20 20 2a 2a 20 63 6f  aint.      ** co
16aa0 75 6e 74 65 72 2e 20 49 66 20 74 68 65 20 73 74  unter. If the st
16ab0 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74  atement transact
16ac0 69 6f 6e 20 6e 65 65 64 73 20 74 6f 20 62 65 20  ion needs to be 
16ad0 72 6f 6c 6c 65 64 20 62 61 63 6b 2c 0a 20 20 20  rolled back,.   
16ae0 20 20 20 2a 2a 20 74 68 65 20 76 61 6c 75 65 20     ** the value 
16af0 6f 66 20 74 68 69 73 20 63 6f 75 6e 74 65 72 20  of this counter 
16b00 6e 65 65 64 73 20 74 6f 20 62 65 20 72 65 73 74  needs to be rest
16b10 6f 72 65 64 20 74 6f 6f 2e 20 20 2a 2f 0a 20 20  ored too.  */.  
16b20 20 20 20 20 70 2d 3e 6e 53 74 6d 74 44 65 66 43      p->nStmtDefC
16b30 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72  ons = db->nDefer
16b40 72 65 64 43 6f 6e 73 3b 0a 20 20 20 20 7d 0a 20  redCons;.    }. 
16b50 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
16b60 2a 20 4f 70 63 6f 64 65 3a 20 52 65 61 64 43 6f  * Opcode: ReadCo
16b70 6f 6b 69 65 20 50 31 20 50 32 20 50 33 20 2a 20  okie P1 P2 P3 * 
16b80 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 63 6f 6f  *.**.** Read coo
16b90 6b 69 65 20 6e 75 6d 62 65 72 20 50 33 20 66 72  kie number P3 fr
16ba0 6f 6d 20 64 61 74 61 62 61 73 65 20 50 31 20 61  om database P1 a
16bb0 6e 64 20 77 72 69 74 65 20 69 74 20 69 6e 74 6f  nd write it into
16bc0 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a   register P2..**
16bd0 20 50 33 3d 3d 31 20 69 73 20 74 68 65 20 73 63   P3==1 is the sc
16be0 68 65 6d 61 20 76 65 72 73 69 6f 6e 2e 20 20 50  hema version.  P
16bf0 33 3d 3d 32 20 69 73 20 74 68 65 20 64 61 74 61  3==2 is the data
16c00 62 61 73 65 20 66 6f 72 6d 61 74 2e 0a 2a 2a 20  base format..** 
16c10 50 33 3d 3d 33 20 69 73 20 74 68 65 20 72 65 63  P3==3 is the rec
16c20 6f 6d 6d 65 6e 64 65 64 20 70 61 67 65 72 20 63  ommended pager c
16c30 61 63 68 65 20 73 69 7a 65 2c 20 61 6e 64 20 73  ache size, and s
16c40 6f 20 66 6f 72 74 68 2e 20 20 50 31 3d 3d 30 20  o forth.  P1==0 
16c50 69 73 0a 2a 2a 20 74 68 65 20 6d 61 69 6e 20 64  is.** the main d
16c60 61 74 61 62 61 73 65 20 66 69 6c 65 20 61 6e 64  atabase file and
16c70 20 50 31 3d 3d 31 20 69 73 20 74 68 65 20 64 61   P1==1 is the da
16c80 74 61 62 61 73 65 20 66 69 6c 65 20 75 73 65 64  tabase file used
16c90 20 74 6f 20 73 74 6f 72 65 0a 2a 2a 20 74 65 6d   to store.** tem
16ca0 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 0a 2a  porary tables..*
16cb0 2a 0a 2a 2a 20 54 68 65 72 65 20 6d 75 73 74 20  *.** There must 
16cc0 62 65 20 61 20 72 65 61 64 2d 6c 6f 63 6b 20 6f  be a read-lock o
16cd0 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 28  n the database (
16ce0 65 69 74 68 65 72 20 61 20 74 72 61 6e 73 61 63  either a transac
16cf0 74 69 6f 6e 0a 2a 2a 20 6d 75 73 74 20 62 65 20  tion.** must be 
16d00 73 74 61 72 74 65 64 20 6f 72 20 74 68 65 72 65  started or there
16d10 20 6d 75 73 74 20 62 65 20 61 6e 20 6f 70 65 6e   must be an open
16d20 20 63 75 72 73 6f 72 29 20 62 65 66 6f 72 65 0a   cursor) before.
16d30 2a 2a 20 65 78 65 63 75 74 69 6e 67 20 74 68 69  ** executing thi
16d40 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  s instruction..*
16d50 2f 0a 63 61 73 65 20 4f 50 5f 52 65 61 64 43 6f  /.case OP_ReadCo
16d60 6f 6b 69 65 3a 20 7b 20 20 20 20 20 20 20 20 20  okie: {         
16d70 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72        /* out2-pr
16d80 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69 6e  erelease */.  in
16d90 74 20 69 4d 65 74 61 3b 0a 20 20 69 6e 74 20 69  t iMeta;.  int i
16da0 44 62 3b 0a 20 20 69 6e 74 20 69 43 6f 6f 6b 69  Db;.  int iCooki
16db0 65 3b 0a 0a 20 20 69 44 62 20 3d 20 70 4f 70 2d  e;..  iDb = pOp-
16dc0 3e 70 31 3b 0a 20 20 69 43 6f 6f 6b 69 65 20 3d  >p1;.  iCookie =
16dd0 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65   pOp->p3;.  asse
16de0 72 74 28 20 70 4f 70 2d 3e 70 33 3c 53 51 4c 49  rt( pOp->p3<SQLI
16df0 54 45 5f 4e 5f 42 54 52 45 45 5f 4d 45 54 41 20  TE_N_BTREE_META 
16e00 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69 44 62  );.  assert( iDb
16e10 3e 3d 30 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e  >=0 && iDb<db->n
16e20 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  Db );.  assert( 
16e30 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74  db->aDb[iDb].pBt
16e40 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
16e50 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26   (p->btreeMask &
16e60 20 28 31 3c 3c 69 44 62 29 29 21 3d 30 20 29 3b   (1<<iDb))!=0 );
16e70 0a 0a 20 20 73 71 6c 69 74 65 33 42 74 72 65 65  ..  sqlite3Btree
16e80 47 65 74 4d 65 74 61 28 64 62 2d 3e 61 44 62 5b  GetMeta(db->aDb[
16e90 69 44 62 5d 2e 70 42 74 2c 20 69 43 6f 6f 6b 69  iDb].pBt, iCooki
16ea0 65 2c 20 28 75 33 32 20 2a 29 26 69 4d 65 74 61  e, (u32 *)&iMeta
16eb0 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  );.  pOut->u.i =
16ec0 20 69 4d 65 74 61 3b 0a 20 20 62 72 65 61 6b 3b   iMeta;.  break;
16ed0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .}../* Opcode: S
16ee0 65 74 43 6f 6f 6b 69 65 20 50 31 20 50 32 20 50  etCookie P1 P2 P
16ef0 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74  3 * *.**.** Writ
16f00 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  e the content of
16f10 20 72 65 67 69 73 74 65 72 20 50 33 20 28 69 6e   register P3 (in
16f20 74 65 72 70 72 65 74 65 64 20 61 73 20 61 6e 20  terpreted as an 
16f30 69 6e 74 65 67 65 72 29 0a 2a 2a 20 69 6e 74 6f  integer).** into
16f40 20 63 6f 6f 6b 69 65 20 6e 75 6d 62 65 72 20 50   cookie number P
16f50 32 20 6f 66 20 64 61 74 61 62 61 73 65 20 50 31  2 of database P1
16f60 2e 20 20 50 32 3d 3d 31 20 69 73 20 74 68 65 20  .  P2==1 is the 
16f70 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e 2e 20  schema version. 
16f80 20 0a 2a 2a 20 50 32 3d 3d 32 20 69 73 20 74 68   .** P2==2 is th
16f90 65 20 64 61 74 61 62 61 73 65 20 66 6f 72 6d 61  e database forma
16fa0 74 2e 20 50 32 3d 3d 33 20 69 73 20 74 68 65 20  t. P2==3 is the 
16fb0 72 65 63 6f 6d 6d 65 6e 64 65 64 20 70 61 67 65  recommended page
16fc0 72 20 63 61 63 68 65 20 0a 2a 2a 20 73 69 7a 65  r cache .** size
16fd0 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20  , and so forth. 
16fe0 20 50 31 3d 3d 30 20 69 73 20 74 68 65 20 6d 61   P1==0 is the ma
16ff0 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  in database file
17000 20 61 6e 64 20 50 31 3d 3d 31 20 69 73 20 74 68   and P1==1 is th
17010 65 20 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 66  e .** database f
17020 69 6c 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72  ile used to stor
17030 65 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c  e temporary tabl
17040 65 73 2e 0a 2a 2a 0a 2a 2a 20 41 20 74 72 61 6e  es..**.** A tran
17050 73 61 63 74 69 6f 6e 20 6d 75 73 74 20 62 65 20  saction must be 
17060 73 74 61 72 74 65 64 20 62 65 66 6f 72 65 20 65  started before e
17070 78 65 63 75 74 69 6e 67 20 74 68 69 73 20 6f 70  xecuting this op
17080 63 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  code..*/.case OP
17090 5f 53 65 74 43 6f 6f 6b 69 65 3a 20 7b 20 20 20  _SetCookie: {   
170a0 20 20 20 20 2f 2a 20 69 6e 33 20 2a 2f 0a 20 20      /* in3 */.  
170b0 44 62 20 2a 70 44 62 3b 0a 20 20 61 73 73 65 72  Db *pDb;.  asser
170c0 74 28 20 70 4f 70 2d 3e 70 32 3c 53 51 4c 49 54  t( pOp->p2<SQLIT
170d0 45 5f 4e 5f 42 54 52 45 45 5f 4d 45 54 41 20 29  E_N_BTREE_META )
170e0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
170f0 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
17100 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61  1<db->nDb );.  a
17110 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65  ssert( (p->btree
17120 4d 61 73 6b 20 26 20 28 31 3c 3c 70 4f 70 2d 3e  Mask & (1<<pOp->
17130 70 31 29 29 21 3d 30 20 29 3b 0a 20 20 70 44 62  p1))!=0 );.  pDb
17140 20 3d 20 26 64 62 2d 3e 61 44 62 5b 70 4f 70 2d   = &db->aDb[pOp-
17150 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
17160 70 44 62 2d 3e 70 42 74 21 3d 30 20 29 3b 0a 20  pDb->pBt!=0 );. 
17170 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn3 = &aMem[pO
17180 70 2d 3e 70 33 5d 3b 0a 20 20 73 71 6c 69 74 65  p->p3];.  sqlite
17190 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69  3VdbeMemIntegeri
171a0 66 79 28 70 49 6e 33 29 3b 0a 20 20 2f 2a 20 53  fy(pIn3);.  /* S
171b0 65 65 20 6e 6f 74 65 20 61 62 6f 75 74 20 69 6e  ee note about in
171c0 64 65 78 20 73 68 69 66 74 69 6e 67 20 6f 6e 20  dex shifting on 
171d0 4f 50 5f 52 65 61 64 43 6f 6f 6b 69 65 20 2a 2f  OP_ReadCookie */
171e0 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42  .  rc = sqlite3B
171f0 74 72 65 65 55 70 64 61 74 65 4d 65 74 61 28 70  treeUpdateMeta(p
17200 44 62 2d 3e 70 42 74 2c 20 70 4f 70 2d 3e 70 32  Db->pBt, pOp->p2
17210 2c 20 28 69 6e 74 29 70 49 6e 33 2d 3e 75 2e 69  , (int)pIn3->u.i
17220 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 32  );.  if( pOp->p2
17230 3d 3d 42 54 52 45 45 5f 53 43 48 45 4d 41 5f 56  ==BTREE_SCHEMA_V
17240 45 52 53 49 4f 4e 20 29 7b 0a 20 20 20 20 2f 2a  ERSION ){.    /*
17250 20 57 68 65 6e 20 74 68 65 20 73 63 68 65 6d 61   When the schema
17260 20 63 6f 6f 6b 69 65 20 63 68 61 6e 67 65 73 2c   cookie changes,
17270 20 72 65 63 6f 72 64 20 74 68 65 20 6e 65 77 20   record the new 
17280 63 6f 6f 6b 69 65 20 69 6e 74 65 72 6e 61 6c 6c  cookie internall
17290 79 20 2a 2f 0a 20 20 20 20 70 44 62 2d 3e 70 53  y */.    pDb->pS
172a0 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 5f 63 6f  chema->schema_co
172b0 6f 6b 69 65 20 3d 20 28 69 6e 74 29 70 49 6e 33  okie = (int)pIn3
172c0 2d 3e 75 2e 69 3b 0a 20 20 20 20 64 62 2d 3e 66  ->u.i;.    db->f
172d0 6c 61 67 73 20 7c 3d 20 53 51 4c 49 54 45 5f 49  lags |= SQLITE_I
172e0 6e 74 65 72 6e 43 68 61 6e 67 65 73 3b 0a 20 20  nternChanges;.  
172f0 7d 65 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e 70  }else if( pOp->p
17300 32 3d 3d 42 54 52 45 45 5f 46 49 4c 45 5f 46 4f  2==BTREE_FILE_FO
17310 52 4d 41 54 20 29 7b 0a 20 20 20 20 2f 2a 20 52  RMAT ){.    /* R
17320 65 63 6f 72 64 20 63 68 61 6e 67 65 73 20 69 6e  ecord changes in
17330 20 74 68 65 20 66 69 6c 65 20 66 6f 72 6d 61 74   the file format
17340 20 2a 2f 0a 20 20 20 20 70 44 62 2d 3e 70 53 63   */.    pDb->pSc
17350 68 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61  hema->file_forma
17360 74 20 3d 20 28 75 38 29 70 49 6e 33 2d 3e 75 2e  t = (u8)pIn3->u.
17370 69 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70  i;.  }.  if( pOp
17380 2d 3e 70 31 3d 3d 31 20 29 7b 0a 20 20 20 20 2f  ->p1==1 ){.    /
17390 2a 20 49 6e 76 61 6c 69 64 61 74 65 20 61 6c 6c  * Invalidate all
173a0 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d   prepared statem
173b0 65 6e 74 73 20 77 68 65 6e 65 76 65 72 20 74 68  ents whenever th
173c0 65 20 54 45 4d 50 20 64 61 74 61 62 61 73 65 0a  e TEMP database.
173d0 20 20 20 20 2a 2a 20 73 63 68 65 6d 61 20 69 73      ** schema is
173e0 20 63 68 61 6e 67 65 64 2e 20 20 54 69 63 6b 65   changed.  Ticke
173f0 74 20 23 31 36 34 34 20 2a 2f 0a 20 20 20 20 73  t #1644 */.    s
17400 71 6c 69 74 65 33 45 78 70 69 72 65 50 72 65 70  qlite3ExpirePrep
17410 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28 64  aredStatements(d
17420 62 29 3b 0a 20 20 20 20 70 2d 3e 65 78 70 69 72  b);.    p->expir
17430 65 64 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 62 72  ed = 0;.  }.  br
17440 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
17450 65 3a 20 56 65 72 69 66 79 43 6f 6f 6b 69 65 20  e: VerifyCookie 
17460 50 31 20 50 32 20 2a 0a 2a 2a 0a 2a 2a 20 43 68  P1 P2 *.**.** Ch
17470 65 63 6b 20 74 68 65 20 76 61 6c 75 65 20 6f 66  eck the value of
17480 20 67 6c 6f 62 61 6c 20 64 61 74 61 62 61 73 65   global database
17490 20 70 61 72 61 6d 65 74 65 72 20 6e 75 6d 62 65   parameter numbe
174a0 72 20 30 20 28 74 68 65 0a 2a 2a 20 73 63 68 65  r 0 (the.** sche
174b0 6d 61 20 76 65 72 73 69 6f 6e 29 20 61 6e 64 20  ma version) and 
174c0 6d 61 6b 65 20 73 75 72 65 20 69 74 20 69 73 20  make sure it is 
174d0 65 71 75 61 6c 20 74 6f 20 50 32 2e 20 20 0a 2a  equal to P2.  .*
174e0 2a 20 50 31 20 69 73 20 74 68 65 20 64 61 74 61  * P1 is the data
174f0 62 61 73 65 20 6e 75 6d 62 65 72 20 77 68 69 63  base number whic
17500 68 20 69 73 20 30 20 66 6f 72 20 74 68 65 20 6d  h is 0 for the m
17510 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
17520 65 0a 2a 2a 20 61 6e 64 20 31 20 66 6f 72 20 74  e.** and 1 for t
17530 68 65 20 66 69 6c 65 20 68 6f 6c 64 69 6e 67 20  he file holding 
17540 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73  temporary tables
17550 20 61 6e 64 20 73 6f 6d 65 20 68 69 67 68 65 72   and some higher
17560 20 6e 75 6d 62 65 72 0a 2a 2a 20 66 6f 72 20 61   number.** for a
17570 75 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73  uxiliary databas
17580 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f  es..**.** The co
17590 6f 6b 69 65 20 63 68 61 6e 67 65 73 20 69 74 73  okie changes its
175a0 20 76 61 6c 75 65 20 77 68 65 6e 65 76 65 72 20   value whenever 
175b0 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68  the database sch
175c0 65 6d 61 20 63 68 61 6e 67 65 73 2e 0a 2a 2a 20  ema changes..** 
175d0 54 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 20 69  This operation i
175e0 73 20 75 73 65 64 20 74 6f 20 64 65 74 65 63 74  s used to detect
175f0 20 77 68 65 6e 20 74 68 61 74 20 74 68 65 20 63   when that the c
17600 6f 6f 6b 69 65 20 68 61 73 20 63 68 61 6e 67 65  ookie has change
17610 64 0a 2a 2a 20 61 6e 64 20 74 68 61 74 20 74 68  d.** and that th
17620 65 20 63 75 72 72 65 6e 74 20 70 72 6f 63 65 73  e current proces
17630 73 20 6e 65 65 64 73 20 74 6f 20 72 65 72 65 61  s needs to rerea
17640 64 20 74 68 65 20 73 63 68 65 6d 61 2e 0a 2a 2a  d the schema..**
17650 0a 2a 2a 20 45 69 74 68 65 72 20 61 20 74 72 61  .** Either a tra
17660 6e 73 61 63 74 69 6f 6e 20 6e 65 65 64 73 20 74  nsaction needs t
17670 6f 20 68 61 76 65 20 62 65 65 6e 20 73 74 61 72  o have been star
17680 74 65 64 20 6f 72 20 61 6e 20 4f 50 5f 4f 70 65  ted or an OP_Ope
17690 6e 20 6e 65 65 64 73 0a 2a 2a 20 74 6f 20 62 65  n needs.** to be
176a0 20 65 78 65 63 75 74 65 64 20 28 74 6f 20 65 73   executed (to es
176b0 74 61 62 6c 69 73 68 20 61 20 72 65 61 64 20 6c  tablish a read l
176c0 6f 63 6b 29 20 62 65 66 6f 72 65 20 74 68 69 73  ock) before this
176d0 20 6f 70 63 6f 64 65 20 69 73 0a 2a 2a 20 69 6e   opcode is.** in
176e0 76 6f 6b 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f  voked..*/.case O
176f0 50 5f 56 65 72 69 66 79 43 6f 6f 6b 69 65 3a 20  P_VerifyCookie: 
17700 7b 0a 20 20 69 6e 74 20 69 4d 65 74 61 3b 0a 20  {.  int iMeta;. 
17710 20 42 74 72 65 65 20 2a 70 42 74 3b 0a 20 20 61   Btree *pBt;.  a
17720 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
17730 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d  0 && pOp->p1<db-
17740 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74  >nDb );.  assert
17750 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20  ( (p->btreeMask 
17760 26 20 28 31 3c 3c 70 4f 70 2d 3e 70 31 29 29 21  & (1<<pOp->p1))!
17770 3d 30 20 29 3b 0a 20 20 70 42 74 20 3d 20 64 62  =0 );.  pBt = db
17780 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70  ->aDb[pOp->p1].p
17790 42 74 3b 0a 20 20 69 66 28 20 70 42 74 20 29 7b  Bt;.  if( pBt ){
177a0 0a 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65  .    sqlite3Btre
177b0 65 47 65 74 4d 65 74 61 28 70 42 74 2c 20 42 54  eGetMeta(pBt, BT
177c0 52 45 45 5f 53 43 48 45 4d 41 5f 56 45 52 53 49  REE_SCHEMA_VERSI
177d0 4f 4e 2c 20 28 75 33 32 20 2a 29 26 69 4d 65 74  ON, (u32 *)&iMet
177e0 61 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  a);.  }else{.   
177f0 20 69 4d 65 74 61 20 3d 20 30 3b 0a 20 20 7d 0a   iMeta = 0;.  }.
17800 20 20 69 66 28 20 69 4d 65 74 61 21 3d 70 4f 70    if( iMeta!=pOp
17810 2d 3e 70 32 20 29 7b 0a 20 20 20 20 73 71 6c 69  ->p2 ){.    sqli
17820 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 70 2d  te3DbFree(db, p-
17830 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 70  >zErrMsg);.    p
17840 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 73 71 6c 69  ->zErrMsg = sqli
17850 74 65 33 44 62 53 74 72 44 75 70 28 64 62 2c 20  te3DbStrDup(db, 
17860 22 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61  "database schema
17870 20 68 61 73 20 63 68 61 6e 67 65 64 22 29 3b 0a   has changed");.
17880 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20 73 63      /* If the sc
17890 68 65 6d 61 2d 63 6f 6f 6b 69 65 20 66 72 6f 6d  hema-cookie from
178a0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
178b0 6c 65 20 6d 61 74 63 68 65 73 20 74 68 65 20 63  le matches the c
178c0 6f 6f 6b 69 65 20 0a 20 20 20 20 2a 2a 20 73 74  ookie .    ** st
178d0 6f 72 65 64 20 77 69 74 68 20 74 68 65 20 69 6e  ored with the in
178e0 2d 6d 65 6d 6f 72 79 20 72 65 70 72 65 73 65 6e  -memory represen
178f0 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 73 63  tation of the sc
17900 68 65 6d 61 2c 20 64 6f 0a 20 20 20 20 2a 2a 20  hema, do.    ** 
17910 6e 6f 74 20 72 65 6c 6f 61 64 20 74 68 65 20 73  not reload the s
17920 63 68 65 6d 61 20 66 72 6f 6d 20 74 68 65 20 64  chema from the d
17930 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 20 20  atabase file..  
17940 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 49 66 20 76    **.    ** If v
17950 69 72 74 75 61 6c 2d 74 61 62 6c 65 73 20 61 72  irtual-tables ar
17960 65 20 69 6e 20 75 73 65 2c 20 74 68 69 73 20 69  e in use, this i
17970 73 20 6e 6f 74 20 6a 75 73 74 20 61 6e 20 6f 70  s not just an op
17980 74 69 6d 69 7a 61 74 69 6f 6e 2e 0a 20 20 20 20  timization..    
17990 2a 2a 20 4f 66 74 65 6e 2c 20 76 2d 74 61 62 6c  ** Often, v-tabl
179a0 65 73 20 73 74 6f 72 65 20 74 68 65 69 72 20 64  es store their d
179b0 61 74 61 20 69 6e 20 6f 74 68 65 72 20 53 51 4c  ata in other SQL
179c0 69 74 65 20 74 61 62 6c 65 73 2c 20 77 68 69 63  ite tables, whic
179d0 68 0a 20 20 20 20 2a 2a 20 61 72 65 20 71 75 65  h.    ** are que
179e0 72 69 65 64 20 66 72 6f 6d 20 77 69 74 68 69 6e  ried from within
179f0 20 78 4e 65 78 74 28 29 20 61 6e 64 20 6f 74 68   xNext() and oth
17a00 65 72 20 76 2d 74 61 62 6c 65 20 6d 65 74 68 6f  er v-table metho
17a10 64 73 20 75 73 69 6e 67 0a 20 20 20 20 2a 2a 20  ds using.    ** 
17a20 70 72 65 70 61 72 65 64 20 71 75 65 72 69 65 73  prepared queries
17a30 2e 20 49 66 20 73 75 63 68 20 61 20 71 75 65 72  . If such a quer
17a40 79 20 69 73 20 6f 75 74 2d 6f 66 2d 64 61 74 65  y is out-of-date
17a50 2c 20 77 65 20 64 6f 20 6e 6f 74 20 77 61 6e 74  , we do not want
17a60 20 74 6f 0a 20 20 20 20 2a 2a 20 64 69 73 63 61   to.    ** disca
17a70 72 64 20 74 68 65 20 64 61 74 61 62 61 73 65 20  rd the database 
17a80 73 63 68 65 6d 61 2c 20 61 73 20 74 68 65 20 75  schema, as the u
17a90 73 65 72 20 63 6f 64 65 20 69 6d 70 6c 65 6d 65  ser code impleme
17aa0 6e 74 69 6e 67 20 74 68 65 0a 20 20 20 20 2a 2a  nting the.    **
17ab0 20 76 2d 74 61 62 6c 65 20 77 6f 75 6c 64 20 68   v-table would h
17ac0 61 76 65 20 74 6f 20 62 65 20 72 65 61 64 79 20  ave to be ready 
17ad0 66 6f 72 20 74 68 65 20 73 71 6c 69 74 65 33 5f  for the sqlite3_
17ae0 76 74 61 62 20 73 74 72 75 63 74 75 72 65 20 69  vtab structure i
17af0 74 73 65 6c 66 0a 20 20 20 20 2a 2a 20 74 6f 20  tself.    ** to 
17b00 62 65 20 69 6e 76 61 6c 69 64 61 74 65 64 20 77  be invalidated w
17b10 68 65 6e 65 76 65 72 20 73 71 6c 69 74 65 33 5f  henever sqlite3_
17b20 73 74 65 70 28 29 20 69 73 20 63 61 6c 6c 65 64  step() is called
17b30 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 0a 20 20   from within .  
17b40 20 20 2a 2a 20 61 20 76 2d 74 61 62 6c 65 20 6d    ** a v-table m
17b50 65 74 68 6f 64 2e 0a 20 20 20 20 2a 2f 0a 20 20  ethod..    */.  
17b60 20 20 69 66 28 20 64 62 2d 3e 61 44 62 5b 70 4f    if( db->aDb[pO
17b70 70 2d 3e 70 31 5d 2e 70 53 63 68 65 6d 61 2d 3e  p->p1].pSchema->
17b80 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 21 3d 69  schema_cookie!=i
17b90 4d 65 74 61 20 29 7b 0a 20 20 20 20 20 20 73 71  Meta ){.      sq
17ba0 6c 69 74 65 33 52 65 73 65 74 49 6e 74 65 72 6e  lite3ResetIntern
17bb0 61 6c 53 63 68 65 6d 61 28 64 62 2c 20 70 4f 70  alSchema(db, pOp
17bc0 2d 3e 70 31 29 3b 0a 20 20 20 20 7d 0a 0a 20 20  ->p1);.    }..  
17bd0 20 20 70 2d 3e 65 78 70 69 72 65 64 20 3d 20 31    p->expired = 1
17be0 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54  ;.    rc = SQLIT
17bf0 45 5f 53 43 48 45 4d 41 3b 0a 20 20 7d 0a 20 20  E_SCHEMA;.  }.  
17c00 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
17c10 6f 64 65 3a 20 4f 70 65 6e 52 65 61 64 20 50 31  ode: OpenRead P1
17c20 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a   P2 P3 P4 P5.**.
17c30 2a 2a 20 4f 70 65 6e 20 61 20 72 65 61 64 2d 6f  ** Open a read-o
17c40 6e 6c 79 20 63 75 72 73 6f 72 20 66 6f 72 20 74  nly cursor for t
17c50 68 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c  he database tabl
17c60 65 20 77 68 6f 73 65 20 72 6f 6f 74 20 70 61 67  e whose root pag
17c70 65 20 69 73 0a 2a 2a 20 50 32 20 69 6e 20 61 20  e is.** P2 in a 
17c80 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20 20  database file.  
17c90 54 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  The database fil
17ca0 65 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20  e is determined 
17cb0 62 79 20 50 33 2e 20 0a 2a 2a 20 50 33 3d 3d 30  by P3. .** P3==0
17cc0 20 6d 65 61 6e 73 20 74 68 65 20 6d 61 69 6e 20   means the main 
17cd0 64 61 74 61 62 61 73 65 2c 20 50 33 3d 3d 31 20  database, P3==1 
17ce0 6d 65 61 6e 73 20 74 68 65 20 64 61 74 61 62 61  means the databa
17cf0 73 65 20 75 73 65 64 20 66 6f 72 20 0a 2a 2a 20  se used for .** 
17d00 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73  temporary tables
17d10 2c 20 61 6e 64 20 50 33 3e 31 20 6d 65 61 6e 73  , and P3>1 means
17d20 20 75 73 65 64 20 74 68 65 20 63 6f 72 72 65 73   used the corres
17d30 70 6f 6e 64 69 6e 67 20 61 74 74 61 63 68 65 64  ponding attached
17d40 0a 2a 2a 20 64 61 74 61 62 61 73 65 2e 20 20 47  .** database.  G
17d50 69 76 65 20 74 68 65 20 6e 65 77 20 63 75 72 73  ive the new curs
17d60 6f 72 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72  or an identifier
17d70 20 6f 66 20 50 31 2e 20 20 54 68 65 20 50 31 0a   of P1.  The P1.
17d80 2a 2a 20 76 61 6c 75 65 73 20 6e 65 65 64 20 6e  ** values need n
17d90 6f 74 20 62 65 20 63 6f 6e 74 69 67 75 6f 75 73  ot be contiguous
17da0 20 62 75 74 20 61 6c 6c 20 50 31 20 76 61 6c 75   but all P1 valu
17db0 65 73 20 73 68 6f 75 6c 64 20 62 65 20 73 6d 61  es should be sma
17dc0 6c 6c 20 69 6e 74 65 67 65 72 73 2e 0a 2a 2a 20  ll integers..** 
17dd0 49 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20 66  It is an error f
17de0 6f 72 20 50 31 20 74 6f 20 62 65 20 6e 65 67 61  or P1 to be nega
17df0 74 69 76 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  tive..**.** If P
17e00 35 21 3d 30 20 74 68 65 6e 20 75 73 65 20 74 68  5!=0 then use th
17e10 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67  e content of reg
17e20 69 73 74 65 72 20 50 32 20 61 73 20 74 68 65 20  ister P2 as the 
17e30 72 6f 6f 74 20 70 61 67 65 2c 20 6e 6f 74 0a 2a  root page, not.*
17e40 2a 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 50  * the value of P
17e50 32 20 69 74 73 65 6c 66 2e 0a 2a 2a 0a 2a 2a 20  2 itself..**.** 
17e60 54 68 65 72 65 20 77 69 6c 6c 20 62 65 20 61 20  There will be a 
17e70 72 65 61 64 20 6c 6f 63 6b 20 6f 6e 20 74 68 65  read lock on the
17e80 20 64 61 74 61 62 61 73 65 20 77 68 65 6e 65 76   database whenev
17e90 65 72 20 74 68 65 72 65 20 69 73 20 61 6e 0a 2a  er there is an.*
17ea0 2a 20 6f 70 65 6e 20 63 75 72 73 6f 72 2e 20 20  * open cursor.  
17eb0 49 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  If the database 
17ec0 77 61 73 20 75 6e 6c 6f 63 6b 65 64 20 70 72 69  was unlocked pri
17ed0 6f 72 20 74 6f 20 74 68 69 73 20 69 6e 73 74 72  or to this instr
17ee0 75 63 74 69 6f 6e 0a 2a 2a 20 74 68 65 6e 20 61  uction.** then a
17ef0 20 72 65 61 64 20 6c 6f 63 6b 20 69 73 20 61 63   read lock is ac
17f00 71 75 69 72 65 64 20 61 73 20 70 61 72 74 20 6f  quired as part o
17f10 66 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69  f this instructi
17f20 6f 6e 2e 20 20 41 20 72 65 61 64 0a 2a 2a 20 6c  on.  A read.** l
17f30 6f 63 6b 20 61 6c 6c 6f 77 73 20 6f 74 68 65 72  ock allows other
17f40 20 70 72 6f 63 65 73 73 65 73 20 74 6f 20 72 65   processes to re
17f50 61 64 20 74 68 65 20 64 61 74 61 62 61 73 65 20  ad the database 
17f60 62 75 74 20 70 72 6f 68 69 62 69 74 73 0a 2a 2a  but prohibits.**
17f70 20 61 6e 79 20 6f 74 68 65 72 20 70 72 6f 63 65   any other proce
17f80 73 73 20 66 72 6f 6d 20 6d 6f 64 69 66 79 69 6e  ss from modifyin
17f90 67 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 20  g the database. 
17fa0 20 54 68 65 20 72 65 61 64 20 6c 6f 63 6b 20 69   The read lock i
17fb0 73 0a 2a 2a 20 72 65 6c 65 61 73 65 64 20 77 68  s.** released wh
17fc0 65 6e 20 61 6c 6c 20 63 75 72 73 6f 72 73 20 61  en all cursors a
17fd0 72 65 20 63 6c 6f 73 65 64 2e 20 20 49 66 20 74  re closed.  If t
17fe0 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
17ff0 61 74 74 65 6d 70 74 73 0a 2a 2a 20 74 6f 20 67  attempts.** to g
18000 65 74 20 61 20 72 65 61 64 20 6c 6f 63 6b 20 62  et a read lock b
18010 75 74 20 66 61 69 6c 73 2c 20 74 68 65 20 73 63  ut fails, the sc
18020 72 69 70 74 20 74 65 72 6d 69 6e 61 74 65 73 20  ript terminates 
18030 77 69 74 68 20 61 6e 0a 2a 2a 20 53 51 4c 49 54  with an.** SQLIT
18040 45 5f 42 55 53 59 20 65 72 72 6f 72 20 63 6f 64  E_BUSY error cod
18050 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20  e..**.** The P4 
18060 76 61 6c 75 65 20 6d 61 79 20 62 65 20 65 69 74  value may be eit
18070 68 65 72 20 61 6e 20 69 6e 74 65 67 65 72 20 28  her an integer (
18080 50 34 5f 49 4e 54 33 32 29 20 6f 72 20 61 20 70  P4_INT32) or a p
18090 6f 69 6e 74 65 72 20 74 6f 0a 2a 2a 20 61 20 4b  ointer to.** a K
180a0 65 79 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65  eyInfo structure
180b0 20 28 50 34 5f 4b 45 59 49 4e 46 4f 29 2e 20 49   (P4_KEYINFO). I
180c0 66 20 69 74 20 69 73 20 61 20 70 6f 69 6e 74 65  f it is a pointe
180d0 72 20 74 6f 20 61 20 4b 65 79 49 6e 66 6f 20 0a  r to a KeyInfo .
180e0 2a 2a 20 73 74 72 75 63 74 75 72 65 2c 20 74 68  ** structure, th
180f0 65 6e 20 73 61 69 64 20 73 74 72 75 63 74 75 72  en said structur
18100 65 20 64 65 66 69 6e 65 73 20 74 68 65 20 63 6f  e defines the co
18110 6e 74 65 6e 74 20 61 6e 64 20 63 6f 6c 6c 61 74  ntent and collat
18120 69 6e 67 20 0a 2a 2a 20 73 65 71 75 65 6e 63 65  ing .** sequence
18130 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20 62 65   of the index be
18140 69 6e 67 20 6f 70 65 6e 65 64 2e 20 4f 74 68 65  ing opened. Othe
18150 72 77 69 73 65 2c 20 69 66 20 50 34 20 69 73 20  rwise, if P4 is 
18160 61 6e 20 69 6e 74 65 67 65 72 20 0a 2a 2a 20 76  an integer .** v
18170 61 6c 75 65 2c 20 69 74 20 69 73 20 73 65 74 20  alue, it is set 
18180 74 6f 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  to the number of
18190 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20   columns in the 
181a0 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  table..**.** See
181b0 20 61 6c 73 6f 20 4f 70 65 6e 57 72 69 74 65 2e   also OpenWrite.
181c0 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f  .*/./* Opcode: O
181d0 70 65 6e 57 72 69 74 65 20 50 31 20 50 32 20 50  penWrite P1 P2 P
181e0 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 4f 70  3 P4 P5.**.** Op
181f0 65 6e 20 61 20 72 65 61 64 2f 77 72 69 74 65 20  en a read/write 
18200 63 75 72 73 6f 72 20 6e 61 6d 65 64 20 50 31 20  cursor named P1 
18210 6f 6e 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20  on the table or 
18220 69 6e 64 65 78 20 77 68 6f 73 65 20 72 6f 6f 74  index whose root
18230 0a 2a 2a 20 70 61 67 65 20 69 73 20 50 32 2e 20  .** page is P2. 
18240 20 4f 72 20 69 66 20 50 35 21 3d 30 20 75 73 65   Or if P5!=0 use
18250 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
18260 72 65 67 69 73 74 65 72 20 50 32 20 74 6f 20 66  register P2 to f
18270 69 6e 64 20 74 68 65 0a 2a 2a 20 72 6f 6f 74 20  ind the.** root 
18280 70 61 67 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  page..**.** The 
18290 50 34 20 76 61 6c 75 65 20 6d 61 79 20 62 65 20  P4 value may be 
182a0 65 69 74 68 65 72 20 61 6e 20 69 6e 74 65 67 65  either an intege
182b0 72 20 28 50 34 5f 49 4e 54 33 32 29 20 6f 72 20  r (P4_INT32) or 
182c0 61 20 70 6f 69 6e 74 65 72 20 74 6f 0a 2a 2a 20  a pointer to.** 
182d0 61 20 4b 65 79 49 6e 66 6f 20 73 74 72 75 63 74  a KeyInfo struct
182e0 75 72 65 20 28 50 34 5f 4b 45 59 49 4e 46 4f 29  ure (P4_KEYINFO)
182f0 2e 20 49 66 20 69 74 20 69 73 20 61 20 70 6f 69  . If it is a poi
18300 6e 74 65 72 20 74 6f 20 61 20 4b 65 79 49 6e 66  nter to a KeyInf
18310 6f 20 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 2c  o .** structure,
18320 20 74 68 65 6e 20 73 61 69 64 20 73 74 72 75 63   then said struc
18330 74 75 72 65 20 64 65 66 69 6e 65 73 20 74 68 65  ture defines the
18340 20 63 6f 6e 74 65 6e 74 20 61 6e 64 20 63 6f 6c   content and col
18350 6c 61 74 69 6e 67 20 0a 2a 2a 20 73 65 71 75 65  lating .** seque
18360 6e 63 65 20 6f 66 20 74 68 65 20 69 6e 64 65 78  nce of the index
18370 20 62 65 69 6e 67 20 6f 70 65 6e 65 64 2e 20 4f   being opened. O
18380 74 68 65 72 77 69 73 65 2c 20 69 66 20 50 34 20  therwise, if P4 
18390 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 0a 2a  is an integer .*
183a0 2a 20 76 61 6c 75 65 2c 20 69 74 20 69 73 20 73  * value, it is s
183b0 65 74 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72  et to the number
183c0 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74   of columns in t
183d0 68 65 20 74 61 62 6c 65 2c 20 6f 72 20 74 6f 20  he table, or to 
183e0 74 68 65 0a 2a 2a 20 6c 61 72 67 65 73 74 20 69  the.** largest i
183f0 6e 64 65 78 20 6f 66 20 61 6e 79 20 63 6f 6c 75  ndex of any colu
18400 6d 6e 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  mn of the table 
18410 74 68 61 74 20 69 73 20 61 63 74 75 61 6c 6c 79  that is actually
18420 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 69   used..**.** Thi
18430 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 77 6f  s instruction wo
18440 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 4f 70  rks just like Op
18450 65 6e 52 65 61 64 20 65 78 63 65 70 74 20 74 68  enRead except th
18460 61 74 20 69 74 20 6f 70 65 6e 73 20 74 68 65 20  at it opens the 
18470 63 75 72 73 6f 72 0a 2a 2a 20 69 6e 20 72 65 61  cursor.** in rea
18480 64 2f 77 72 69 74 65 20 6d 6f 64 65 2e 20 20 46  d/write mode.  F
18490 6f 72 20 61 20 67 69 76 65 6e 20 74 61 62 6c 65  or a given table
184a0 2c 20 74 68 65 72 65 20 63 61 6e 20 62 65 20 6f  , there can be o
184b0 6e 65 20 6f 72 20 6d 6f 72 65 20 72 65 61 64 2d  ne or more read-
184c0 6f 6e 6c 79 0a 2a 2a 20 63 75 72 73 6f 72 73 20  only.** cursors 
184d0 6f 72 20 61 20 73 69 6e 67 6c 65 20 72 65 61 64  or a single read
184e0 2f 77 72 69 74 65 20 63 75 72 73 6f 72 20 62 75  /write cursor bu
184f0 74 20 6e 6f 74 20 62 6f 74 68 2e 0a 2a 2a 0a 2a  t not both..**.*
18500 2a 20 53 65 65 20 61 6c 73 6f 20 4f 70 65 6e 52  * See also OpenR
18510 65 61 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ead..*/.case OP_
18520 4f 70 65 6e 52 65 61 64 3a 0a 63 61 73 65 20 4f  OpenRead:.case O
18530 50 5f 4f 70 65 6e 57 72 69 74 65 3a 20 7b 0a 20  P_OpenWrite: {. 
18540 20 69 6e 74 20 6e 46 69 65 6c 64 3b 0a 20 20 4b   int nField;.  K
18550 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f  eyInfo *pKeyInfo
18560 3b 0a 20 20 69 6e 74 20 70 32 3b 0a 20 20 69 6e  ;.  int p2;.  in
18570 74 20 69 44 62 3b 0a 20 20 69 6e 74 20 77 72 46  t iDb;.  int wrF
18580 6c 61 67 3b 0a 20 20 42 74 72 65 65 20 2a 70 58  lag;.  Btree *pX
18590 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  ;.  VdbeCursor *
185a0 70 43 75 72 3b 0a 20 20 44 62 20 2a 70 44 62 3b  pCur;.  Db *pDb;
185b0 0a 0a 20 20 69 66 28 20 70 2d 3e 65 78 70 69 72  ..  if( p->expir
185c0 65 64 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53  ed ){.    rc = S
185d0 51 4c 49 54 45 5f 41 42 4f 52 54 3b 0a 20 20 20  QLITE_ABORT;.   
185e0 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 6e   break;.  }..  n
185f0 46 69 65 6c 64 20 3d 20 30 3b 0a 20 20 70 4b 65  Field = 0;.  pKe
18600 79 49 6e 66 6f 20 3d 20 30 3b 0a 20 20 70 32 20  yInfo = 0;.  p2 
18610 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 69 44 62  = pOp->p2;.  iDb
18620 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73   = pOp->p3;.  as
18630 73 65 72 74 28 20 69 44 62 3e 3d 30 20 26 26 20  sert( iDb>=0 && 
18640 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20  iDb<db->nDb );. 
18650 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72   assert( (p->btr
18660 65 65 4d 61 73 6b 20 26 20 28 31 3c 3c 69 44 62  eeMask & (1<<iDb
18670 29 29 21 3d 30 20 29 3b 0a 20 20 70 44 62 20 3d  ))!=0 );.  pDb =
18680 20 26 64 62 2d 3e 61 44 62 5b 69 44 62 5d 3b 0a   &db->aDb[iDb];.
18690 20 20 70 58 20 3d 20 70 44 62 2d 3e 70 42 74 3b    pX = pDb->pBt;
186a0 0a 20 20 61 73 73 65 72 74 28 20 70 58 21 3d 30  .  assert( pX!=0
186b0 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f   );.  if( pOp->o
186c0 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70 65 6e 57 72  pcode==OP_OpenWr
186d0 69 74 65 20 29 7b 0a 20 20 20 20 77 72 46 6c 61  ite ){.    wrFla
186e0 67 20 3d 20 31 3b 0a 20 20 20 20 69 66 28 20 70  g = 1;.    if( p
186f0 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 66 69 6c  Db->pSchema->fil
18700 65 5f 66 6f 72 6d 61 74 20 3c 20 70 2d 3e 6d 69  e_format < p->mi
18710 6e 57 72 69 74 65 46 69 6c 65 46 6f 72 6d 61 74  nWriteFileFormat
18720 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e 6d 69 6e   ){.      p->min
18730 57 72 69 74 65 46 69 6c 65 46 6f 72 6d 61 74 20  WriteFileFormat 
18740 3d 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e  = pDb->pSchema->
18750 66 69 6c 65 5f 66 6f 72 6d 61 74 3b 0a 20 20 20  file_format;.   
18760 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20   }.  }else{.    
18770 77 72 46 6c 61 67 20 3d 20 30 3b 0a 20 20 7d 0a  wrFlag = 0;.  }.
18780 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 29 7b    if( pOp->p5 ){
18790 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 32 3e  .    assert( p2>
187a0 30 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  0 );.    assert(
187b0 20 70 32 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a   p2<=p->nMem );.
187c0 20 20 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d      pIn2 = &aMem
187d0 5b 70 32 5d 3b 0a 20 20 20 20 61 73 73 65 72 74  [p2];.    assert
187e0 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 49 6e  ( memIsValid(pIn
187f0 32 29 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  2) );.    assert
18800 28 20 28 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26  ( (pIn2->flags &
18810 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 0a   MEM_Int)!=0 );.
18820 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
18830 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e  emIntegerify(pIn
18840 32 29 3b 0a 20 20 20 20 70 32 20 3d 20 28 69 6e  2);.    p2 = (in
18850 74 29 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20 20  t)pIn2->u.i;.   
18860 20 2f 2a 20 54 68 65 20 70 32 20 76 61 6c 75 65   /* The p2 value
18870 20 61 6c 77 61 79 73 20 63 6f 6d 65 73 20 66 72   always comes fr
18880 6f 6d 20 61 20 70 72 69 6f 72 20 4f 50 5f 43 72  om a prior OP_Cr
18890 65 61 74 65 54 61 62 6c 65 20 6f 70 63 6f 64 65  eateTable opcode
188a0 20 61 6e 64 0a 20 20 20 20 2a 2a 20 74 68 61 74   and.    ** that
188b0 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 61 6c 77   opcode will alw
188c0 61 79 73 20 73 65 74 20 74 68 65 20 70 32 20 76  ays set the p2 v
188d0 61 6c 75 65 20 74 6f 20 32 20 6f 72 20 6d 6f 72  alue to 2 or mor
188e0 65 20 6f 72 20 65 6c 73 65 20 66 61 69 6c 2e 0a  e or else fail..
188f0 20 20 20 20 2a 2a 20 49 66 20 74 68 65 72 65 20      ** If there 
18900 77 65 72 65 20 61 20 66 61 69 6c 75 72 65 2c 20  were a failure, 
18910 74 68 65 20 70 72 65 70 61 72 65 64 20 73 74 61  the prepared sta
18920 74 65 6d 65 6e 74 20 77 6f 75 6c 64 20 68 61 76  tement would hav
18930 65 20 68 61 6c 74 65 64 0a 20 20 20 20 2a 2a 20  e halted.    ** 
18940 62 65 66 6f 72 65 20 72 65 61 63 68 69 6e 67 20  before reaching 
18950 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
18960 2e 20 2a 2f 0a 20 20 20 20 69 66 28 20 4e 45 56  . */.    if( NEV
18970 45 52 28 70 32 3c 32 29 20 29 20 7b 0a 20 20 20  ER(p2<2) ) {.   
18980 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 43     rc = SQLITE_C
18990 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20  ORRUPT_BKPT;.   
189a0 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
189b0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
189c0 7d 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d  }.  }.  if( pOp-
189d0 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4b 45 59 49  >p4type==P4_KEYI
189e0 4e 46 4f 20 29 7b 0a 20 20 20 20 70 4b 65 79 49  NFO ){.    pKeyI
189f0 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b  nfo = pOp->p4.pK
18a00 65 79 49 6e 66 6f 3b 0a 20 20 20 20 70 4b 65 79  eyInfo;.    pKey
18a10 49 6e 66 6f 2d 3e 65 6e 63 20 3d 20 45 4e 43 28  Info->enc = ENC(
18a20 70 2d 3e 64 62 29 3b 0a 20 20 20 20 6e 46 69 65  p->db);.    nFie
18a30 6c 64 20 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e 6e  ld = pKeyInfo->n
18a40 46 69 65 6c 64 2b 31 3b 0a 20 20 7d 65 6c 73 65  Field+1;.  }else
18a50 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65   if( pOp->p4type
18a60 3d 3d 50 34 5f 49 4e 54 33 32 20 29 7b 0a 20 20  ==P4_INT32 ){.  
18a70 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e    nField = pOp->
18a80 70 34 2e 69 3b 0a 20 20 7d 0a 20 20 61 73 73 65  p4.i;.  }.  asse
18a90 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 29  rt( pOp->p1>=0 )
18aa0 3b 0a 20 20 70 43 75 72 20 3d 20 61 6c 6c 6f 63  ;.  pCur = alloc
18ab0 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70  ateCursor(p, pOp
18ac0 2d 3e 70 31 2c 20 6e 46 69 65 6c 64 2c 20 69 44  ->p1, nField, iD
18ad0 62 2c 20 31 29 3b 0a 20 20 69 66 28 20 70 43 75  b, 1);.  if( pCu
18ae0 72 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  r==0 ) goto no_m
18af0 65 6d 3b 0a 20 20 70 43 75 72 2d 3e 6e 75 6c 6c  em;.  pCur->null
18b00 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43 75 72 2d  Row = 1;.  pCur-
18b10 3e 69 73 4f 72 64 65 72 65 64 20 3d 20 31 3b 0a  >isOrdered = 1;.
18b20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
18b30 72 65 65 43 75 72 73 6f 72 28 70 58 2c 20 70 32  reeCursor(pX, p2
18b40 2c 20 77 72 46 6c 61 67 2c 20 70 4b 65 79 49 6e  , wrFlag, pKeyIn
18b50 66 6f 2c 20 70 43 75 72 2d 3e 70 43 75 72 73 6f  fo, pCur->pCurso
18b60 72 29 3b 0a 20 20 70 43 75 72 2d 3e 70 4b 65 79  r);.  pCur->pKey
18b70 49 6e 66 6f 20 3d 20 70 4b 65 79 49 6e 66 6f 3b  Info = pKeyInfo;
18b80 0a 0a 20 20 2f 2a 20 53 69 6e 63 65 20 69 74 20  ..  /* Since it 
18b90 70 65 72 66 6f 72 6d 73 20 6e 6f 20 6d 65 6d 6f  performs no memo
18ba0 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 6f 72  ry allocation or
18bb0 20 49 4f 2c 20 74 68 65 20 6f 6e 6c 79 20 76 61   IO, the only va
18bc0 6c 75 65 73 20 74 68 61 74 0a 20 20 2a 2a 20 73  lues that.  ** s
18bd0 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f  qlite3BtreeCurso
18be0 72 28 29 20 6d 61 79 20 72 65 74 75 72 6e 20 61  r() may return a
18bf0 72 65 20 53 51 4c 49 54 45 5f 45 4d 50 54 59 20  re SQLITE_EMPTY 
18c00 61 6e 64 20 53 51 4c 49 54 45 5f 4f 4b 2e 20 0a  and SQLITE_OK. .
18c10 20 20 2a 2a 20 53 51 4c 49 54 45 5f 45 4d 50 54    ** SQLITE_EMPT
18c20 59 20 69 73 20 6f 6e 6c 79 20 72 65 74 75 72 6e  Y is only return
18c30 65 64 20 77 68 65 6e 20 61 74 74 65 6d 70 74 69  ed when attempti
18c40 6e 67 20 74 6f 20 6f 70 65 6e 20 74 68 65 20 74  ng to open the t
18c50 61 62 6c 65 0a 20 20 2a 2a 20 72 6f 6f 74 65 64  able.  ** rooted
18c60 20 61 74 20 70 61 67 65 20 31 20 6f 66 20 61 20   at page 1 of a 
18c70 7a 65 72 6f 2d 62 79 74 65 20 64 61 74 61 62 61  zero-byte databa
18c80 73 65 2e 20 20 2a 2f 0a 20 20 61 73 73 65 72 74  se.  */.  assert
18c90 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 45 4d 50  ( rc==SQLITE_EMP
18ca0 54 59 20 7c 7c 20 72 63 3d 3d 53 51 4c 49 54 45  TY || rc==SQLITE
18cb0 5f 4f 4b 20 29 3b 0a 20 20 69 66 28 20 72 63 3d  _OK );.  if( rc=
18cc0 3d 53 51 4c 49 54 45 5f 45 4d 50 54 59 20 29 7b  =SQLITE_EMPTY ){
18cd0 0a 20 20 20 20 70 43 75 72 2d 3e 70 43 75 72 73  .    pCur->pCurs
18ce0 6f 72 20 3d 20 30 3b 0a 20 20 20 20 72 63 20 3d  or = 0;.    rc =
18cf0 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 7d 0a   SQLITE_OK;.  }.
18d00 0a 20 20 2f 2a 20 53 65 74 20 74 68 65 20 56 64  .  /* Set the Vd
18d10 62 65 43 75 72 73 6f 72 2e 69 73 54 61 62 6c 65  beCursor.isTable
18d20 20 61 6e 64 20 69 73 49 6e 64 65 78 20 76 61 72   and isIndex var
18d30 69 61 62 6c 65 73 2e 20 50 72 65 76 69 6f 75 73  iables. Previous
18d40 20 76 65 72 73 69 6f 6e 73 20 6f 66 0a 20 20 2a   versions of.  *
18d50 2a 20 53 51 4c 69 74 65 20 75 73 65 64 20 74 6f  * SQLite used to
18d60 20 63 68 65 63 6b 20 69 66 20 74 68 65 20 72 6f   check if the ro
18d70 6f 74 2d 70 61 67 65 20 66 6c 61 67 73 20 77 65  ot-page flags we
18d80 72 65 20 73 61 6e 65 20 61 74 20 74 68 69 73 20  re sane at this 
18d90 70 6f 69 6e 74 0a 20 20 2a 2a 20 61 6e 64 20 72  point.  ** and r
18da0 65 70 6f 72 74 20 64 61 74 61 62 61 73 65 20 63  eport database c
18db0 6f 72 72 75 70 74 69 6f 6e 20 69 66 20 74 68 65  orruption if the
18dc0 79 20 77 65 72 65 20 6e 6f 74 2c 20 62 75 74 20  y were not, but 
18dd0 74 68 69 73 20 63 68 65 63 6b 20 68 61 73 0a 20  this check has. 
18de0 20 2a 2a 20 73 69 6e 63 65 20 6d 6f 76 65 64 20   ** since moved 
18df0 69 6e 74 6f 20 74 68 65 20 62 74 72 65 65 20 6c  into the btree l
18e00 61 79 65 72 2e 20 20 2a 2f 20 20 0a 20 20 70 43  ayer.  */  .  pC
18e10 75 72 2d 3e 69 73 54 61 62 6c 65 20 3d 20 70 4f  ur->isTable = pO
18e20 70 2d 3e 70 34 74 79 70 65 21 3d 50 34 5f 4b 45  p->p4type!=P4_KE
18e30 59 49 4e 46 4f 3b 0a 20 20 70 43 75 72 2d 3e 69  YINFO;.  pCur->i
18e40 73 49 6e 64 65 78 20 3d 20 21 70 43 75 72 2d 3e  sIndex = !pCur->
18e50 69 73 54 61 62 6c 65 3b 0a 20 20 62 72 65 61 6b  isTable;.  break
18e60 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
18e70 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 50 31  OpenEphemeral P1
18e80 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a   P2 * P4 *.**.**
18e90 20 4f 70 65 6e 20 61 20 6e 65 77 20 63 75 72 73   Open a new curs
18ea0 6f 72 20 50 31 20 74 6f 20 61 20 74 72 61 6e 73  or P1 to a trans
18eb0 69 65 6e 74 20 74 61 62 6c 65 2e 0a 2a 2a 20 54  ient table..** T
18ec0 68 65 20 63 75 72 73 6f 72 20 69 73 20 61 6c 77  he cursor is alw
18ed0 61 79 73 20 6f 70 65 6e 65 64 20 72 65 61 64 2f  ays opened read/
18ee0 77 72 69 74 65 20 65 76 65 6e 20 69 66 20 0a 2a  write even if .*
18ef0 2a 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  * the main datab
18f00 61 73 65 20 69 73 20 72 65 61 64 2d 6f 6e 6c 79  ase is read-only
18f10 2e 20 20 54 68 65 20 65 70 68 65 6d 65 72 61 6c  .  The ephemeral
18f20 0a 2a 2a 20 74 61 62 6c 65 20 69 73 20 64 65 6c  .** table is del
18f30 65 74 65 64 20 61 75 74 6f 6d 61 74 69 63 61 6c  eted automatical
18f40 6c 79 20 77 68 65 6e 20 74 68 65 20 63 75 72 73  ly when the curs
18f50 6f 72 20 69 73 20 63 6c 6f 73 65 64 2e 0a 2a 2a  or is closed..**
18f60 0a 2a 2a 20 50 32 20 69 73 20 74 68 65 20 6e 75  .** P2 is the nu
18f70 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
18f80 69 6e 20 74 68 65 20 65 70 68 65 6d 65 72 61 6c  in the ephemeral
18f90 20 74 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 63   table..** The c
18fa0 75 72 73 6f 72 20 70 6f 69 6e 74 73 20 74 6f 20  ursor points to 
18fb0 61 20 42 54 72 65 65 20 74 61 62 6c 65 20 69 66  a BTree table if
18fc0 20 50 34 3d 3d 30 20 61 6e 64 20 74 6f 20 61 20   P4==0 and to a 
18fd0 42 54 72 65 65 20 69 6e 64 65 78 0a 2a 2a 20 69  BTree index.** i
18fe0 66 20 50 34 20 69 73 20 6e 6f 74 20 30 2e 20 20  f P4 is not 0.  
18ff0 49 66 20 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c  If P4 is not NUL
19000 4c 2c 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20  L, it points to 
19010 61 20 4b 65 79 49 6e 66 6f 20 73 74 72 75 63 74  a KeyInfo struct
19020 75 72 65 0a 2a 2a 20 74 68 61 74 20 64 65 66 69  ure.** that defi
19030 6e 65 73 20 74 68 65 20 66 6f 72 6d 61 74 20 6f  nes the format o
19040 66 20 6b 65 79 73 20 69 6e 20 74 68 65 20 69 6e  f keys in the in
19050 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  dex..**.** This 
19060 6f 70 63 6f 64 65 20 77 61 73 20 6f 6e 63 65 20  opcode was once 
19070 63 61 6c 6c 65 64 20 4f 70 65 6e 54 65 6d 70 2e  called OpenTemp.
19080 20 20 42 75 74 20 74 68 61 74 20 63 72 65 61 74    But that creat
19090 65 64 0a 2a 2a 20 63 6f 6e 66 75 73 69 6f 6e 20  ed.** confusion 
190a0 62 65 63 61 75 73 65 20 74 68 65 20 74 65 72 6d  because the term
190b0 20 22 74 65 6d 70 20 74 61 62 6c 65 22 2c 20 6d   "temp table", m
190c0 69 67 68 74 20 72 65 66 65 72 20 65 69 74 68 65  ight refer eithe
190d0 72 0a 2a 2a 20 74 6f 20 61 20 54 45 4d 50 20 74  r.** to a TEMP t
190e0 61 62 6c 65 20 61 74 20 74 68 65 20 53 51 4c 20  able at the SQL 
190f0 6c 65 76 65 6c 2c 20 6f 72 20 74 6f 20 61 20 74  level, or to a t
19100 61 62 6c 65 20 6f 70 65 6e 65 64 20 62 79 0a 2a  able opened by.*
19110 2a 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 20 20  * this opcode.  
19120 54 68 65 6e 20 74 68 69 73 20 6f 70 63 6f 64 65  Then this opcode
19130 20 77 61 73 20 63 61 6c 6c 20 4f 70 65 6e 56 69   was call OpenVi
19140 72 74 75 61 6c 2e 20 20 42 75 74 0a 2a 2a 20 74  rtual.  But.** t
19150 68 61 74 20 63 72 65 61 74 65 64 20 63 6f 6e 66  hat created conf
19160 75 73 69 6f 6e 20 77 69 74 68 20 74 68 65 20 77  usion with the w
19170 68 6f 6c 65 20 76 69 72 74 75 61 6c 2d 74 61 62  hole virtual-tab
19180 6c 65 20 69 64 65 61 2e 0a 2a 2f 0a 2f 2a 20 4f  le idea..*/./* O
19190 70 63 6f 64 65 3a 20 4f 70 65 6e 41 75 74 6f 69  pcode: OpenAutoi
191a0 6e 64 65 78 20 50 31 20 50 32 20 2a 20 50 34 20  ndex P1 P2 * P4 
191b0 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  *.**.** This opc
191c0 6f 64 65 20 77 6f 72 6b 73 20 74 68 65 20 73 61  ode works the sa
191d0 6d 65 20 61 73 20 4f 50 5f 4f 70 65 6e 45 70 68  me as OP_OpenEph
191e0 65 6d 65 72 61 6c 2e 20 20 49 74 20 68 61 73 20  emeral.  It has 
191f0 61 0a 2a 2a 20 64 69 66 66 65 72 65 6e 74 20 6e  a.** different n
19200 61 6d 65 20 74 6f 20 64 69 73 74 69 6e 67 75 69  ame to distingui
19210 73 68 20 69 74 73 20 75 73 65 2e 20 20 54 61 62  sh its use.  Tab
19220 6c 65 73 20 63 72 65 61 74 65 64 20 75 73 69 6e  les created usin
19230 67 0a 2a 2a 20 62 79 20 74 68 69 73 20 6f 70 63  g.** by this opc
19240 6f 64 65 20 77 69 6c 6c 20 62 65 20 75 73 65 64  ode will be used
19250 20 66 6f 72 20 61 75 74 6f 6d 61 74 69 63 61 6c   for automatical
19260 6c 79 20 63 72 65 61 74 65 64 20 74 72 61 6e 73  ly created trans
19270 69 65 6e 74 0a 2a 2a 20 69 6e 64 69 63 65 73 20  ient.** indices 
19280 69 6e 20 6a 6f 69 6e 73 2e 0a 2a 2f 0a 63 61 73  in joins..*/.cas
19290 65 20 4f 50 5f 4f 70 65 6e 41 75 74 6f 69 6e 64  e OP_OpenAutoind
192a0 65 78 3a 20 0a 63 61 73 65 20 4f 50 5f 4f 70 65  ex: .case OP_Ope
192b0 6e 45 70 68 65 6d 65 72 61 6c 3a 20 7b 0a 20 20  nEphemeral: {.  
192c0 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 78 3b  VdbeCursor *pCx;
192d0 0a 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20  .  static const 
192e0 69 6e 74 20 76 66 73 46 6c 61 67 73 20 3d 20 0a  int vfsFlags = .
192f0 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45        SQLITE_OPE
19300 4e 5f 52 45 41 44 57 52 49 54 45 20 7c 0a 20 20  N_READWRITE |.  
19310 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f      SQLITE_OPEN_
19320 43 52 45 41 54 45 20 7c 0a 20 20 20 20 20 20 53  CREATE |.      S
19330 51 4c 49 54 45 5f 4f 50 45 4e 5f 45 58 43 4c 55  QLITE_OPEN_EXCLU
19340 53 49 56 45 20 7c 0a 20 20 20 20 20 20 53 51 4c  SIVE |.      SQL
19350 49 54 45 5f 4f 50 45 4e 5f 44 45 4c 45 54 45 4f  ITE_OPEN_DELETEO
19360 4e 43 4c 4f 53 45 20 7c 0a 20 20 20 20 20 20 53  NCLOSE |.      S
19370 51 4c 49 54 45 5f 4f 50 45 4e 5f 54 52 41 4e 53  QLITE_OPEN_TRANS
19380 49 45 4e 54 5f 44 42 3b 0a 0a 20 20 61 73 73 65  IENT_DB;..  asse
19390 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 29  rt( pOp->p1>=0 )
193a0 3b 0a 20 20 70 43 78 20 3d 20 61 6c 6c 6f 63 61  ;.  pCx = alloca
193b0 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d  teCursor(p, pOp-
193c0 3e 70 31 2c 20 70 4f 70 2d 3e 70 32 2c 20 2d 31  >p1, pOp->p2, -1
193d0 2c 20 31 29 3b 0a 20 20 69 66 28 20 70 43 78 3d  , 1);.  if( pCx=
193e0 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  =0 ) goto no_mem
193f0 3b 0a 20 20 70 43 78 2d 3e 6e 75 6c 6c 52 6f 77  ;.  pCx->nullRow
19400 20 3d 20 31 3b 0a 20 20 72 63 20 3d 20 73 71 6c   = 1;.  rc = sql
19410 69 74 65 33 42 74 72 65 65 4f 70 65 6e 28 30 2c  ite3BtreeOpen(0,
19420 20 64 62 2c 20 26 70 43 78 2d 3e 70 42 74 2c 20   db, &pCx->pBt, 
19430 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19440 20 20 20 20 20 20 20 20 20 42 54 52 45 45 5f 4f           BTREE_O
19450 4d 49 54 5f 4a 4f 55 52 4e 41 4c 20 7c 20 42 54  MIT_JOURNAL | BT
19460 52 45 45 5f 53 49 4e 47 4c 45 20 7c 20 70 4f 70  REE_SINGLE | pOp
19470 2d 3e 70 35 2c 20 76 66 73 46 6c 61 67 73 29 3b  ->p5, vfsFlags);
19480 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54  .  if( rc==SQLIT
19490 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 63 20 3d  E_OK ){.    rc =
194a0 20 73 71 6c 69 74 65 33 42 74 72 65 65 42 65 67   sqlite3BtreeBeg
194b0 69 6e 54 72 61 6e 73 28 70 43 78 2d 3e 70 42 74  inTrans(pCx->pBt
194c0 2c 20 31 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20  , 1);.  }.  if( 
194d0 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc==SQLITE_OK ){
194e0 0a 20 20 20 20 2f 2a 20 49 66 20 61 20 74 72 61  .    /* If a tra
194f0 6e 73 69 65 6e 74 20 69 6e 64 65 78 20 69 73 20  nsient index is 
19500 72 65 71 75 69 72 65 64 2c 20 63 72 65 61 74 65  required, create
19510 20 69 74 20 62 79 20 63 61 6c 6c 69 6e 67 0a 20   it by calling. 
19520 20 20 20 2a 2a 20 73 71 6c 69 74 65 33 42 74 72     ** sqlite3Btr
19530 65 65 43 72 65 61 74 65 54 61 62 6c 65 28 29 20  eeCreateTable() 
19540 77 69 74 68 20 74 68 65 20 42 54 52 45 45 5f 42  with the BTREE_B
19550 4c 4f 42 4b 45 59 20 66 6c 61 67 20 62 65 66 6f  LOBKEY flag befo
19560 72 65 0a 20 20 20 20 2a 2a 20 6f 70 65 6e 69 6e  re.    ** openin
19570 67 20 69 74 2e 20 49 66 20 61 20 74 72 61 6e 73  g it. If a trans
19580 69 65 6e 74 20 74 61 62 6c 65 20 69 73 20 72 65  ient table is re
19590 71 75 69 72 65 64 2c 20 6a 75 73 74 20 75 73 65  quired, just use
195a0 20 74 68 65 0a 20 20 20 20 2a 2a 20 61 75 74 6f   the.    ** auto
195b0 6d 61 74 69 63 61 6c 6c 79 20 63 72 65 61 74 65  matically create
195c0 64 20 74 61 62 6c 65 20 77 69 74 68 20 72 6f 6f  d table with roo
195d0 74 2d 70 61 67 65 20 31 20 28 61 6e 20 42 4c 4f  t-page 1 (an BLO
195e0 42 5f 49 4e 54 4b 45 59 20 74 61 62 6c 65 29 2e  B_INTKEY table).
195f0 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20  .    */.    if( 
19600 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f  pOp->p4.pKeyInfo
19610 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 70 67   ){.      int pg
19620 6e 6f 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  no;.      assert
19630 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
19640 34 5f 4b 45 59 49 4e 46 4f 20 29 3b 0a 20 20 20  4_KEYINFO );.   
19650 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
19660 74 72 65 65 43 72 65 61 74 65 54 61 62 6c 65 28  treeCreateTable(
19670 70 43 78 2d 3e 70 42 74 2c 20 26 70 67 6e 6f 2c  pCx->pBt, &pgno,
19680 20 42 54 52 45 45 5f 42 4c 4f 42 4b 45 59 29 3b   BTREE_BLOBKEY);
19690 20 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d   .      if( rc==
196a0 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
196b0 20 20 20 20 20 61 73 73 65 72 74 28 20 70 67 6e       assert( pgn
196c0 6f 3d 3d 4d 41 53 54 45 52 5f 52 4f 4f 54 2b 31  o==MASTER_ROOT+1
196d0 20 29 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d   );.        rc =
196e0 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72   sqlite3BtreeCur
196f0 73 6f 72 28 70 43 78 2d 3e 70 42 74 2c 20 70 67  sor(pCx->pBt, pg
19700 6e 6f 2c 20 31 2c 20 0a 20 20 20 20 20 20 20 20  no, 1, .        
19710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19720 20 20 20 20 20 20 20 20 28 4b 65 79 49 6e 66 6f          (KeyInfo
19730 2a 29 70 4f 70 2d 3e 70 34 2e 7a 2c 20 70 43 78  *)pOp->p4.z, pCx
19740 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20  ->pCursor);.    
19750 20 20 20 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66      pCx->pKeyInf
19760 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79  o = pOp->p4.pKey
19770 49 6e 66 6f 3b 0a 20 20 20 20 20 20 20 20 70 43  Info;.        pC
19780 78 2d 3e 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63  x->pKeyInfo->enc
19790 20 3d 20 45 4e 43 28 70 2d 3e 64 62 29 3b 0a 20   = ENC(p->db);. 
197a0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 70 43 78       }.      pCx
197b0 2d 3e 69 73 54 61 62 6c 65 20 3d 20 30 3b 0a 20  ->isTable = 0;. 
197c0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
197d0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
197e0 65 43 75 72 73 6f 72 28 70 43 78 2d 3e 70 42 74  eCursor(pCx->pBt
197f0 2c 20 4d 41 53 54 45 52 5f 52 4f 4f 54 2c 20 31  , MASTER_ROOT, 1
19800 2c 20 30 2c 20 70 43 78 2d 3e 70 43 75 72 73 6f  , 0, pCx->pCurso
19810 72 29 3b 0a 20 20 20 20 20 20 70 43 78 2d 3e 69  r);.      pCx->i
19820 73 54 61 62 6c 65 20 3d 20 31 3b 0a 20 20 20 20  sTable = 1;.    
19830 7d 0a 20 20 7d 0a 20 20 70 43 78 2d 3e 69 73 4f  }.  }.  pCx->isO
19840 72 64 65 72 65 64 20 3d 20 28 70 4f 70 2d 3e 70  rdered = (pOp->p
19850 35 21 3d 42 54 52 45 45 5f 55 4e 4f 52 44 45 52  5!=BTREE_UNORDER
19860 45 44 29 3b 0a 20 20 70 43 78 2d 3e 69 73 49 6e  ED);.  pCx->isIn
19870 64 65 78 20 3d 20 21 70 43 78 2d 3e 69 73 54 61  dex = !pCx->isTa
19880 62 6c 65 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ble;.  break;.}.
19890 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e  ./* Opcode: Open
198a0 50 73 65 75 64 6f 20 50 31 20 50 32 20 50 33 20  Pseudo P1 P2 P3 
198b0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61  * *.**.** Open a
198c0 20 6e 65 77 20 63 75 72 73 6f 72 20 74 68 61 74   new cursor that
198d0 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 66 61 6b   points to a fak
198e0 65 20 74 61 62 6c 65 20 74 68 61 74 20 63 6f 6e  e table that con
198f0 74 61 69 6e 73 20 61 20 73 69 6e 67 6c 65 0a 2a  tains a single.*
19900 2a 20 72 6f 77 20 6f 66 20 64 61 74 61 2e 20 20  * row of data.  
19910 54 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74  The content of t
19920 68 61 74 20 6f 6e 65 20 72 6f 77 20 69 6e 20 74  hat one row in t
19930 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 6d 65  he content of me
19940 6d 6f 72 79 0a 2a 2a 20 72 65 67 69 73 74 65 72  mory.** register
19950 20 50 32 2e 20 20 49 6e 20 6f 74 68 65 72 20 77   P2.  In other w
19960 6f 72 64 73 2c 20 63 75 72 73 6f 72 20 50 31 20  ords, cursor P1 
19970 62 65 63 6f 6d 65 73 20 61 6e 20 61 6c 69 61 73  becomes an alias
19980 20 66 6f 72 20 74 68 65 20 0a 2a 2a 20 4d 45 4d   for the .** MEM
19990 5f 42 6c 6f 62 20 63 6f 6e 74 65 6e 74 20 63 6f  _Blob content co
199a0 6e 74 61 69 6e 65 64 20 69 6e 20 72 65 67 69 73  ntained in regis
199b0 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 41 20  ter P2..**.** A 
199c0 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 63 72 65  pseudo-table cre
199d0 61 74 65 64 20 62 79 20 74 68 69 73 20 6f 70 63  ated by this opc
199e0 6f 64 65 20 69 73 20 75 73 65 64 20 74 6f 20 68  ode is used to h
199f0 6f 6c 64 20 61 20 73 69 6e 67 6c 65 0a 2a 2a 20  old a single.** 
19a00 72 6f 77 20 6f 75 74 70 75 74 20 66 72 6f 6d 20  row output from 
19a10 74 68 65 20 73 6f 72 74 65 72 20 73 6f 20 74 68  the sorter so th
19a20 61 74 20 74 68 65 20 72 6f 77 20 63 61 6e 20 62  at the row can b
19a30 65 20 64 65 63 6f 6d 70 6f 73 65 64 20 69 6e 74  e decomposed int
19a40 6f 0a 2a 2a 20 69 6e 64 69 76 69 64 75 61 6c 20  o.** individual 
19a50 63 6f 6c 75 6d 6e 73 20 75 73 69 6e 67 20 74 68  columns using th
19a60 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f  e OP_Column opco
19a70 64 65 2e 20 20 54 68 65 20 4f 50 5f 43 6f 6c 75  de.  The OP_Colu
19a80 6d 6e 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20  mn opcode.** is 
19a90 74 68 65 20 6f 6e 6c 79 20 63 75 72 73 6f 72 20  the only cursor 
19aa0 6f 70 63 6f 64 65 20 74 68 61 74 20 77 6f 72 6b  opcode that work
19ab0 73 20 77 69 74 68 20 61 20 70 73 65 75 64 6f 2d  s with a pseudo-
19ac0 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 50 33 20  table..**.** P3 
19ad0 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  is the number of
19ae0 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20 72   fields in the r
19af0 65 63 6f 72 64 73 20 74 68 61 74 20 77 69 6c 6c  ecords that will
19b00 20 62 65 20 73 74 6f 72 65 64 20 62 79 0a 2a 2a   be stored by.**
19b10 20 74 68 65 20 70 73 65 75 64 6f 2d 74 61 62 6c   the pseudo-tabl
19b20 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 70  e..*/.case OP_Op
19b30 65 6e 50 73 65 75 64 6f 3a 20 7b 0a 20 20 56 64  enPseudo: {.  Vd
19b40 62 65 43 75 72 73 6f 72 20 2a 70 43 78 3b 0a 0a  beCursor *pCx;..
19b50 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
19b60 31 3e 3d 30 20 29 3b 0a 20 20 70 43 78 20 3d 20  1>=0 );.  pCx = 
19b70 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70  allocateCursor(p
19b80 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e  , pOp->p1, pOp->
19b90 70 33 2c 20 2d 31 2c 20 30 29 3b 0a 20 20 69 66  p3, -1, 0);.  if
19ba0 28 20 70 43 78 3d 3d 30 20 29 20 67 6f 74 6f 20  ( pCx==0 ) goto 
19bb0 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e 6e  no_mem;.  pCx->n
19bc0 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43  ullRow = 1;.  pC
19bd0 78 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65  x->pseudoTableRe
19be0 67 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 70  g = pOp->p2;.  p
19bf0 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d 20 31 3b  Cx->isTable = 1;
19c00 0a 20 20 70 43 78 2d 3e 69 73 49 6e 64 65 78 20  .  pCx->isIndex 
19c10 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  = 0;.  break;.}.
19c20 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6c 6f 73  ./* Opcode: Clos
19c30 65 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a  e P1 * * * *.**.
19c40 2a 2a 20 43 6c 6f 73 65 20 61 20 63 75 72 73 6f  ** Close a curso
19c50 72 20 70 72 65 76 69 6f 75 73 6c 79 20 6f 70 65  r previously ope
19c60 6e 65 64 20 61 73 20 50 31 2e 20 20 49 66 20 50  ned as P1.  If P
19c70 31 20 69 73 20 6e 6f 74 0a 2a 2a 20 63 75 72 72  1 is not.** curr
19c80 65 6e 74 6c 79 20 6f 70 65 6e 2c 20 74 68 69 73  ently open, this
19c90 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20   instruction is 
19ca0 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 63 61 73 65  a no-op..*/.case
19cb0 20 4f 50 5f 43 6c 6f 73 65 3a 20 7b 0a 20 20 61   OP_Close: {.  a
19cc0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
19cd0 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
19ce0 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 73 71 6c  nCursor );.  sql
19cf0 69 74 65 33 56 64 62 65 46 72 65 65 43 75 72 73  ite3VdbeFreeCurs
19d00 6f 72 28 70 2c 20 70 2d 3e 61 70 43 73 72 5b 70  or(p, p->apCsr[p
19d10 4f 70 2d 3e 70 31 5d 29 3b 0a 20 20 70 2d 3e 61  Op->p1]);.  p->a
19d20 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 20 3d 20  pCsr[pOp->p1] = 
19d30 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  0;.  break;.}../
19d40 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 47 65  * Opcode: SeekGe
19d50 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a   P1 P2 P3 P4 *.*
19d60 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72 20 50  *.** If cursor P
19d70 31 20 72 65 66 65 72 73 20 74 6f 20 61 6e 20 53  1 refers to an S
19d80 51 4c 20 74 61 62 6c 65 20 28 42 2d 54 72 65 65  QL table (B-Tree
19d90 20 74 68 61 74 20 75 73 65 73 20 69 6e 74 65 67   that uses integ
19da0 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73  er keys), .** us
19db0 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  e the value in r
19dc0 65 67 69 73 74 65 72 20 50 33 20 61 73 20 74 68  egister P3 as th
19dd0 65 20 6b 65 79 2e 20 20 49 66 20 63 75 72 73 6f  e key.  If curso
19de0 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a 20  r P1 refers .** 
19df0 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c  to an SQL index,
19e00 20 74 68 65 6e 20 50 33 20 69 73 20 74 68 65 20   then P3 is the 
19e10 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72 61  first in an arra
19e20 79 20 6f 66 20 50 34 20 72 65 67 69 73 74 65 72  y of P4 register
19e30 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 75  s .** that are u
19e40 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63 6b  sed as an unpack
19e50 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a  ed index key. .*
19e60 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20  *.** Reposition 
19e70 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61  cursor P1 so tha
19e80 74 20 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20  t  it points to 
19e90 74 68 65 20 73 6d 61 6c 6c 65 73 74 20 65 6e 74  the smallest ent
19ea0 72 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20 67  ry that .** is g
19eb0 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65  reater than or e
19ec0 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20  qual to the key 
19ed0 76 61 6c 75 65 2e 20 49 66 20 74 68 65 72 65 20  value. If there 
19ee0 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 0a  are no records .
19ef0 2a 2a 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  ** greater than 
19f00 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20  or equal to the 
19f10 6b 65 79 20 61 6e 64 20 50 32 20 69 73 20 6e 6f  key and P2 is no
19f20 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d  t zero, then jum
19f30 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53  p to P2..**.** S
19f40 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20  ee also: Found, 
19f50 4e 6f 74 46 6f 75 6e 64 2c 20 44 69 73 74 69 6e  NotFound, Distin
19f60 63 74 2c 20 53 65 65 6b 4c 74 2c 20 53 65 65 6b  ct, SeekLt, Seek
19f70 47 74 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a  Gt, SeekLe.*/./*
19f80 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 47 74 20   Opcode: SeekGt 
19f90 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a  P1 P2 P3 P4 *.**
19fa0 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72 20 50 31  .** If cursor P1
19fb0 20 72 65 66 65 72 73 20 74 6f 20 61 6e 20 53 51   refers to an SQ
19fc0 4c 20 74 61 62 6c 65 20 28 42 2d 54 72 65 65 20  L table (B-Tree 
19fd0 74 68 61 74 20 75 73 65 73 20 69 6e 74 65 67 65  that uses intege
19fe0 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65  r keys), .** use
19ff0 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
1a000 67 69 73 74 65 72 20 50 33 20 61 73 20 61 20 6b  gister P3 as a k
1a010 65 79 2e 20 49 66 20 63 75 72 73 6f 72 20 50 31  ey. If cursor P1
1a020 20 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61   refers .** to a
1a030 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20 74 68 65  n SQL index, the
1a040 6e 20 50 33 20 69 73 20 74 68 65 20 66 69 72 73  n P3 is the firs
1a050 74 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66  t in an array of
1a060 20 50 34 20 72 65 67 69 73 74 65 72 73 20 0a 2a   P4 registers .*
1a070 2a 20 74 68 61 74 20 61 72 65 20 75 73 65 64 20  * that are used 
1a080 61 73 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69  as an unpacked i
1a090 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a  ndex key. .**.**
1a0a0 20 52 65 70 6f 73 69 74 69 6f 6e 20 63 75 72 73   Reposition curs
1a0b0 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20 20 69  or P1 so that  i
1a0c0 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20  t points to the 
1a0d0 73 6d 61 6c 6c 65 73 74 20 65 6e 74 72 79 20 74  smallest entry t
1a0e0 68 61 74 20 0a 2a 2a 20 69 73 20 67 72 65 61 74  hat .** is great
1a0f0 65 72 20 74 68 61 6e 20 74 68 65 20 6b 65 79 20  er than the key 
1a100 76 61 6c 75 65 2e 20 49 66 20 74 68 65 72 65 20  value. If there 
1a110 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 67  are no records g
1a120 72 65 61 74 65 72 20 74 68 61 6e 20 0a 2a 2a 20  reater than .** 
1a130 74 68 65 20 6b 65 79 20 61 6e 64 20 50 32 20 69  the key and P2 i
1a140 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e  s not zero, then
1a150 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a   jump to P2..**.
1a160 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75  ** See also: Fou
1a170 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 44 69  nd, NotFound, Di
1a180 73 74 69 6e 63 74 2c 20 53 65 65 6b 4c 74 2c 20  stinct, SeekLt, 
1a190 53 65 65 6b 47 65 2c 20 53 65 65 6b 4c 65 0a 2a  SeekGe, SeekLe.*
1a1a0 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65  /./* Opcode: See
1a1b0 6b 4c 74 20 50 31 20 50 32 20 50 33 20 50 34 20  kLt P1 P2 P3 P4 
1a1c0 2a 20 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73  * .**.** If curs
1a1d0 6f 72 20 50 31 20 72 65 66 65 72 73 20 74 6f 20  or P1 refers to 
1a1e0 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d  an SQL table (B-
1a1f0 54 72 65 65 20 74 68 61 74 20 75 73 65 73 20 69  Tree that uses i
1a200 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a  nteger keys), .*
1a210 2a 20 75 73 65 20 74 68 65 20 76 61 6c 75 65 20  * use the value 
1a220 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 61  in register P3 a
1a230 73 20 61 20 6b 65 79 2e 20 49 66 20 63 75 72 73  s a key. If curs
1a240 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a  or P1 refers .**
1a250 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78   to an SQL index
1a260 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74 68 65  , then P3 is the
1a270 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72   first in an arr
1a280 61 79 20 6f 66 20 50 34 20 72 65 67 69 73 74 65  ay of P4 registe
1a290 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20  rs .** that are 
1a2a0 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63  used as an unpac
1a2b0 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a  ked index key. .
1a2c0 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e  **.** Reposition
1a2d0 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68   cursor P1 so th
1a2e0 61 74 20 20 69 74 20 70 6f 69 6e 74 73 20 74 6f  at  it points to
1a2f0 20 74 68 65 20 6c 61 72 67 65 73 74 20 65 6e 74   the largest ent
1a300 72 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20 6c  ry that .** is l
1a310 65 73 73 20 74 68 61 6e 20 74 68 65 20 6b 65 79  ess than the key
1a320 20 76 61 6c 75 65 2e 20 49 66 20 74 68 65 72 65   value. If there
1a330 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20   are no records 
1a340 6c 65 73 73 20 74 68 61 6e 20 0a 2a 2a 20 74 68  less than .** th
1a350 65 20 6b 65 79 20 61 6e 64 20 50 32 20 69 73 20  e key and P2 is 
1a360 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a  not zero, then j
1a370 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a  ump to P2..**.**
1a380 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64   See also: Found
1a390 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 44 69 73 74  , NotFound, Dist
1a3a0 69 6e 63 74 2c 20 53 65 65 6b 47 74 2c 20 53 65  inct, SeekGt, Se
1a3b0 65 6b 47 65 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a  ekGe, SeekLe.*/.
1a3c0 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 4c  /* Opcode: SeekL
1a3d0 65 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a  e P1 P2 P3 P4 *.
1a3e0 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72 20  **.** If cursor 
1a3f0 50 31 20 72 65 66 65 72 73 20 74 6f 20 61 6e 20  P1 refers to an 
1a400 53 51 4c 20 74 61 62 6c 65 20 28 42 2d 54 72 65  SQL table (B-Tre
1a410 65 20 74 68 61 74 20 75 73 65 73 20 69 6e 74 65  e that uses inte
1a420 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75  ger keys), .** u
1a430 73 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  se the value in 
1a440 72 65 67 69 73 74 65 72 20 50 33 20 61 73 20 61  register P3 as a
1a450 20 6b 65 79 2e 20 49 66 20 63 75 72 73 6f 72 20   key. If cursor 
1a460 50 31 20 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f  P1 refers .** to
1a470 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20 74   an SQL index, t
1a480 68 65 6e 20 50 33 20 69 73 20 74 68 65 20 66 69  hen P3 is the fi
1a490 72 73 74 20 69 6e 20 61 6e 20 61 72 72 61 79 20  rst in an array 
1a4a0 6f 66 20 50 34 20 72 65 67 69 73 74 65 72 73 20  of P4 registers 
1a4b0 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 75 73 65  .** that are use
1a4c0 64 20 61 73 20 61 6e 20 75 6e 70 61 63 6b 65 64  d as an unpacked
1a4d0 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a   index key. .**.
1a4e0 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20 63 75  ** Reposition cu
1a4f0 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20  rsor P1 so that 
1a500 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65  it points to the
1a510 20 6c 61 72 67 65 73 74 20 65 6e 74 72 79 20 74   largest entry t
1a520 68 61 74 20 0a 2a 2a 20 69 73 20 6c 65 73 73 20  hat .** is less 
1a530 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f  than or equal to
1a540 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20   the key value. 
1a550 49 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20  If there are no 
1a560 72 65 63 6f 72 64 73 20 0a 2a 2a 20 6c 65 73 73  records .** less
1a570 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74   than or equal t
1a580 6f 20 74 68 65 20 6b 65 79 20 61 6e 64 20 50 32  o the key and P2
1a590 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68   is not zero, th
1a5a0 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a  en jump to P2..*
1a5b0 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46  *.** See also: F
1a5c0 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20  ound, NotFound, 
1a5d0 44 69 73 74 69 6e 63 74 2c 20 53 65 65 6b 47 74  Distinct, SeekGt
1a5e0 2c 20 53 65 65 6b 47 65 2c 20 53 65 65 6b 4c 74  , SeekGe, SeekLt
1a5f0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b  .*/.case OP_Seek
1a600 4c 74 3a 20 20 20 20 20 20 20 20 20 2f 2a 20 6a  Lt:         /* j
1a610 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65  ump, in3 */.case
1a620 20 4f 50 5f 53 65 65 6b 4c 65 3a 20 20 20 20 20   OP_SeekLe:     
1a630 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33      /* jump, in3
1a640 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b   */.case OP_Seek
1a650 47 65 3a 20 20 20 20 20 20 20 20 20 2f 2a 20 6a  Ge:         /* j
1a660 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65  ump, in3 */.case
1a670 20 4f 50 5f 53 65 65 6b 47 74 3a 20 7b 20 20 20   OP_SeekGt: {   
1a680 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33      /* jump, in3
1a690 20 2a 2f 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20   */.  int res;. 
1a6a0 20 69 6e 74 20 6f 63 3b 0a 20 20 56 64 62 65 43   int oc;.  VdbeC
1a6b0 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 55 6e 70  ursor *pC;.  Unp
1a6c0 61 63 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a 20  ackedRecord r;. 
1a6d0 20 69 6e 74 20 6e 46 69 65 6c 64 3b 0a 20 20 69   int nField;.  i
1a6e0 36 34 20 69 4b 65 79 3b 20 20 20 20 20 20 2f 2a  64 iKey;      /*
1a6f0 20 54 68 65 20 72 6f 77 69 64 20 77 65 20 61 72   The rowid we ar
1a700 65 20 74 6f 20 73 65 65 6b 20 74 6f 20 2a 2f 0a  e to seek to */.
1a710 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1a720 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
1a730 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
1a740 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
1a750 21 3d 30 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  !=0 );.  pC = p-
1a760 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
1a770 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
1a780 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
1a790 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67  ->pseudoTableReg
1a7a0 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==0 );.  assert(
1a7b0 20 4f 50 5f 53 65 65 6b 4c 65 20 3d 3d 20 4f 50   OP_SeekLe == OP
1a7c0 5f 53 65 65 6b 4c 74 2b 31 20 29 3b 0a 20 20 61  _SeekLt+1 );.  a
1a7d0 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 47 65  ssert( OP_SeekGe
1a7e0 20 3d 3d 20 4f 50 5f 53 65 65 6b 4c 74 2b 32 20   == OP_SeekLt+2 
1a7f0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50 5f  );.  assert( OP_
1a800 53 65 65 6b 47 74 20 3d 3d 20 4f 50 5f 53 65 65  SeekGt == OP_See
1a810 6b 4c 74 2b 33 20 29 3b 0a 20 20 61 73 73 65 72  kLt+3 );.  asser
1a820 74 28 20 70 43 2d 3e 69 73 4f 72 64 65 72 65 64  t( pC->isOrdered
1a830 20 29 3b 0a 20 20 69 66 28 20 70 43 2d 3e 70 43   );.  if( pC->pC
1a840 75 72 73 6f 72 21 3d 30 20 29 7b 0a 20 20 20 20  ursor!=0 ){.    
1a850 6f 63 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  oc = pOp->opcode
1a860 3b 0a 20 20 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f  ;.    pC->nullRo
1a870 77 20 3d 20 30 3b 0a 20 20 20 20 69 66 28 20 70  w = 0;.    if( p
1a880 43 2d 3e 69 73 54 61 62 6c 65 20 29 7b 0a 20 20  C->isTable ){.  
1a890 20 20 20 20 2f 2a 20 54 68 65 20 69 6e 70 75 74      /* The input
1a8a0 20 76 61 6c 75 65 20 69 6e 20 50 33 20 6d 69 67   value in P3 mig
1a8b0 68 74 20 62 65 20 6f 66 20 61 6e 79 20 74 79 70  ht be of any typ
1a8c0 65 3a 20 69 6e 74 65 67 65 72 2c 20 72 65 61 6c  e: integer, real
1a8d0 2c 20 73 74 72 69 6e 67 2c 0a 20 20 20 20 20 20  , string,.      
1a8e0 2a 2a 20 62 6c 6f 62 2c 20 6f 72 20 4e 55 4c 4c  ** blob, or NULL
1a8f0 2e 20 20 42 75 74 20 69 74 20 6e 65 65 64 73 20  .  But it needs 
1a900 74 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72  to be an integer
1a910 20 62 65 66 6f 72 65 20 77 65 20 63 61 6e 20 64   before we can d
1a920 6f 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 20 73  o.      ** the s
1a930 65 65 6b 2c 20 73 6f 20 63 6f 76 65 72 74 20 69  eek, so covert i
1a940 74 2e 20 2a 2f 0a 20 20 20 20 20 20 70 49 6e 33  t. */.      pIn3
1a950 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
1a960 5d 3b 0a 20 20 20 20 20 20 61 70 70 6c 79 4e 75  ];.      applyNu
1a970 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 70 49  mericAffinity(pI
1a980 6e 33 29 3b 0a 20 20 20 20 20 20 69 4b 65 79 20  n3);.      iKey 
1a990 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74  = sqlite3VdbeInt
1a9a0 56 61 6c 75 65 28 70 49 6e 33 29 3b 0a 20 20 20  Value(pIn3);.   
1a9b0 20 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61     pC->rowidIsVa
1a9c0 6c 69 64 20 3d 20 30 3b 0a 0a 20 20 20 20 20 20  lid = 0;..      
1a9d0 2f 2a 20 49 66 20 74 68 65 20 50 33 20 76 61 6c  /* If the P3 val
1a9e0 75 65 20 63 6f 75 6c 64 20 6e 6f 74 20 62 65 20  ue could not be 
1a9f0 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f 20 61  converted into a
1aa00 6e 20 69 6e 74 65 67 65 72 20 77 69 74 68 6f 75  n integer withou
1aa10 74 0a 20 20 20 20 20 20 2a 2a 20 6c 6f 73 73 20  t.      ** loss 
1aa20 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20  of information, 
1aa30 74 68 65 6e 20 73 70 65 63 69 61 6c 20 70 72 6f  then special pro
1aa40 63 65 73 73 69 6e 67 20 69 73 20 72 65 71 75 69  cessing is requi
1aa50 72 65 64 2e 2e 2e 20 2a 2f 0a 20 20 20 20 20 20  red... */.      
1aa60 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73  if( (pIn3->flags
1aa70 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20 29   & MEM_Int)==0 )
1aa80 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 28 70  {.        if( (p
1aa90 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In3->flags & MEM
1aaa0 5f 52 65 61 6c 29 3d 3d 30 20 29 7b 0a 20 20 20  _Real)==0 ){.   
1aab0 20 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65         /* If the
1aac0 20 50 33 20 76 61 6c 75 65 20 63 61 6e 6e 6f 74   P3 value cannot
1aad0 20 62 65 20 63 6f 6e 76 65 72 74 65 64 20 69 6e   be converted in
1aae0 74 6f 20 61 6e 79 20 6b 69 6e 64 20 6f 66 20 61  to any kind of a
1aaf0 20 6e 75 6d 62 65 72 2c 0a 20 20 20 20 20 20 20   number,.       
1ab00 20 20 20 2a 2a 20 74 68 65 6e 20 74 68 65 20 73     ** then the s
1ab10 65 65 6b 20 69 73 20 6e 6f 74 20 70 6f 73 73 69  eek is not possi
1ab20 62 6c 65 2c 20 73 6f 20 6a 75 6d 70 20 74 6f 20  ble, so jump to 
1ab30 50 32 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  P2 */.          
1ab40 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
1ab50 3b 0a 20 20 20 20 20 20 20 20 20 20 62 72 65 61  ;.          brea
1ab60 6b 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  k;.        }.   
1ab70 20 20 20 20 20 2f 2a 20 49 66 20 77 65 20 72 65       /* If we re
1ab80 61 63 68 20 74 68 69 73 20 70 6f 69 6e 74 2c 20  ach this point, 
1ab90 74 68 65 6e 20 74 68 65 20 50 33 20 76 61 6c 75  then the P3 valu
1aba0 65 20 6d 75 73 74 20 62 65 20 61 20 66 6c 6f 61  e must be a floa
1abb0 74 69 6e 67 0a 20 20 20 20 20 20 20 20 2a 2a 20  ting.        ** 
1abc0 70 6f 69 6e 74 20 6e 75 6d 62 65 72 2e 20 2a 2f  point number. */
1abd0 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
1abe0 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20   (pIn3->flags & 
1abf0 4d 45 4d 5f 52 65 61 6c 29 21 3d 30 20 29 3b 0a  MEM_Real)!=0 );.
1ac00 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 4b 65  .        if( iKe
1ac10 79 3d 3d 53 4d 41 4c 4c 45 53 54 5f 49 4e 54 36  y==SMALLEST_INT6
1ac20 34 20 26 26 20 28 70 49 6e 33 2d 3e 72 3c 28 64  4 && (pIn3->r<(d
1ac30 6f 75 62 6c 65 29 69 4b 65 79 20 7c 7c 20 70 49  ouble)iKey || pI
1ac40 6e 33 2d 3e 72 3e 30 29 20 29 7b 0a 20 20 20 20  n3->r>0) ){.    
1ac50 20 20 20 20 20 20 2f 2a 20 54 68 65 20 50 33 20        /* The P3 
1ac60 76 61 6c 75 65 20 69 73 20 74 6f 6f 20 6c 61 72  value is too lar
1ac70 67 65 20 69 6e 20 6d 61 67 6e 69 74 75 64 65 20  ge in magnitude 
1ac80 74 6f 20 62 65 20 65 78 70 72 65 73 73 65 64 20  to be expressed 
1ac90 61 73 20 61 6e 0a 20 20 20 20 20 20 20 20 20 20  as an.          
1aca0 2a 2a 20 69 6e 74 65 67 65 72 2e 20 2a 2f 0a 20  ** integer. */. 
1acb0 20 20 20 20 20 20 20 20 20 72 65 73 20 3d 20 31           res = 1
1acc0 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20  ;.          if( 
1acd0 70 49 6e 33 2d 3e 72 3c 30 20 29 7b 0a 20 20 20  pIn3->r<0 ){.   
1ace0 20 20 20 20 20 20 20 20 20 69 66 28 20 6f 63 3e           if( oc>
1acf0 3d 4f 50 5f 53 65 65 6b 47 65 20 29 7b 20 20 61  =OP_SeekGe ){  a
1ad00 73 73 65 72 74 28 20 6f 63 3d 3d 4f 50 5f 53 65  ssert( oc==OP_Se
1ad10 65 6b 47 65 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53  ekGe || oc==OP_S
1ad20 65 65 6b 47 74 20 29 3b 0a 20 20 20 20 20 20 20  eekGt );.       
1ad30 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69         rc = sqli
1ad40 74 65 33 42 74 72 65 65 46 69 72 73 74 28 70 43  te3BtreeFirst(pC
1ad50 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29  ->pCursor, &res)
1ad60 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;.              
1ad70 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
1ad80 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  K ) goto abort_d
1ad90 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
1ada0 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
1adb0 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
1adc0 20 20 20 20 20 20 20 20 69 66 28 20 6f 63 3c 3d          if( oc<=
1add0 4f 50 5f 53 65 65 6b 4c 65 20 29 7b 20 20 61 73  OP_SeekLe ){  as
1ade0 73 65 72 74 28 20 6f 63 3d 3d 4f 50 5f 53 65 65  sert( oc==OP_See
1adf0 6b 4c 74 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65  kLt || oc==OP_Se
1ae00 65 6b 4c 65 20 29 3b 0a 20 20 20 20 20 20 20 20  ekLe );.        
1ae10 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
1ae20 65 33 42 74 72 65 65 4c 61 73 74 28 70 43 2d 3e  e3BtreeLast(pC->
1ae30 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a  pCursor, &res);.
1ae40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
1ae50 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
1ae60 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
1ae70 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20  _to_error;.     
1ae80 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
1ae90 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 69     }.          i
1aea0 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20 20 20  f( res ){.      
1aeb0 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e        pc = pOp->
1aec0 70 32 20 2d 20 31 3b 0a 20 20 20 20 20 20 20 20  p2 - 1;.        
1aed0 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 62 72    }.          br
1aee0 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c  eak;.        }el
1aef0 73 65 20 69 66 28 20 6f 63 3d 3d 4f 50 5f 53 65  se if( oc==OP_Se
1af00 65 6b 4c 74 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53  ekLt || oc==OP_S
1af10 65 65 6b 47 65 20 29 7b 0a 20 20 20 20 20 20 20  eekGe ){.       
1af20 20 20 20 2f 2a 20 55 73 65 20 74 68 65 20 63 65     /* Use the ce
1af30 69 6c 69 6e 67 28 29 20 66 75 6e 63 74 69 6f 6e  iling() function
1af40 20 74 6f 20 63 6f 6e 76 65 72 74 20 72 65 61 6c   to convert real
1af50 2d 3e 69 6e 74 20 2a 2f 0a 20 20 20 20 20 20 20  ->int */.       
1af60 20 20 20 69 66 28 20 70 49 6e 33 2d 3e 72 20 3e     if( pIn3->r >
1af70 20 28 64 6f 75 62 6c 65 29 69 4b 65 79 20 29 20   (double)iKey ) 
1af80 69 4b 65 79 2b 2b 3b 0a 20 20 20 20 20 20 20 20  iKey++;.        
1af90 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20  }else{.         
1afa0 20 2f 2a 20 55 73 65 20 74 68 65 20 66 6c 6f 6f   /* Use the floo
1afb0 72 28 29 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20  r() function to 
1afc0 63 6f 6e 76 65 72 74 20 72 65 61 6c 2d 3e 69 6e  convert real->in
1afd0 74 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 61  t */.          a
1afe0 73 73 65 72 74 28 20 6f 63 3d 3d 4f 50 5f 53 65  ssert( oc==OP_Se
1aff0 65 6b 4c 65 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53  ekLe || oc==OP_S
1b000 65 65 6b 47 74 20 29 3b 0a 20 20 20 20 20 20 20  eekGt );.       
1b010 20 20 20 69 66 28 20 70 49 6e 33 2d 3e 72 20 3c     if( pIn3->r <
1b020 20 28 64 6f 75 62 6c 65 29 69 4b 65 79 20 29 20   (double)iKey ) 
1b030 69 4b 65 79 2d 2d 3b 0a 20 20 20 20 20 20 20 20  iKey--;.        
1b040 7d 0a 20 20 20 20 20 20 7d 20 0a 20 20 20 20 20  }.      } .     
1b050 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
1b060 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64  eeMovetoUnpacked
1b070 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 30 2c  (pC->pCursor, 0,
1b080 20 28 75 36 34 29 69 4b 65 79 2c 20 30 2c 20 26   (u64)iKey, 0, &
1b090 72 65 73 29 3b 0a 20 20 20 20 20 20 69 66 28 20  res);.      if( 
1b0a0 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc!=SQLITE_OK ){
1b0b0 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62  .        goto ab
1b0c0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
1b0d0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
1b0e0 69 66 28 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20  if( res==0 ){.  
1b0f0 20 20 20 20 20 20 70 43 2d 3e 72 6f 77 69 64 49        pC->rowidI
1b100 73 56 61 6c 69 64 20 3d 20 31 3b 0a 20 20 20 20  sValid = 1;.    
1b110 20 20 20 20 70 43 2d 3e 6c 61 73 74 52 6f 77 69      pC->lastRowi
1b120 64 20 3d 20 69 4b 65 79 3b 0a 20 20 20 20 20 20  d = iKey;.      
1b130 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  }.    }else{.   
1b140 20 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d     nField = pOp-
1b150 3e 70 34 2e 69 3b 0a 20 20 20 20 20 20 61 73 73  >p4.i;.      ass
1b160 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65  ert( pOp->p4type
1b170 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20  ==P4_INT32 );.  
1b180 20 20 20 20 61 73 73 65 72 74 28 20 6e 46 69 65      assert( nFie
1b190 6c 64 3e 30 20 29 3b 0a 20 20 20 20 20 20 72 2e  ld>0 );.      r.
1b1a0 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70  pKeyInfo = pC->p
1b1b0 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 20 20 72  KeyInfo;.      r
1b1c0 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31 36 29 6e  .nField = (u16)n
1b1d0 46 69 65 6c 64 3b 0a 0a 20 20 20 20 20 20 2f 2a  Field;..      /*
1b1e0 20 54 68 65 20 6e 65 78 74 20 6c 69 6e 65 20 6f   The next line o
1b1f0 66 20 63 6f 64 65 20 63 6f 6d 70 75 74 65 73 20  f code computes 
1b200 61 73 20 66 6f 6c 6c 6f 77 73 2c 20 6f 6e 6c 79  as follows, only
1b210 20 66 61 73 74 65 72 3a 0a 20 20 20 20 20 20 2a   faster:.      *
1b220 2a 20 20 20 69 66 28 20 6f 63 3d 3d 4f 50 5f 53  *   if( oc==OP_S
1b230 65 65 6b 47 74 20 7c 7c 20 6f 63 3d 3d 4f 50 5f  eekGt || oc==OP_
1b240 53 65 65 6b 4c 65 20 29 7b 0a 20 20 20 20 20 20  SeekLe ){.      
1b250 2a 2a 20 20 20 20 20 72 2e 66 6c 61 67 73 20 3d  **     r.flags =
1b260 20 55 4e 50 41 43 4b 45 44 5f 49 4e 43 52 4b 45   UNPACKED_INCRKE
1b270 59 3b 0a 20 20 20 20 20 20 2a 2a 20 20 20 7d 65  Y;.      **   }e
1b280 6c 73 65 7b 0a 20 20 20 20 20 20 2a 2a 20 20 20  lse{.      **   
1b290 20 20 72 2e 66 6c 61 67 73 20 3d 20 30 3b 0a 20    r.flags = 0;. 
1b2a0 20 20 20 20 20 2a 2a 20 20 20 7d 0a 20 20 20 20       **   }.    
1b2b0 20 20 2a 2f 0a 20 20 20 20 20 20 72 2e 66 6c 61    */.      r.fla
1b2c0 67 73 20 3d 20 28 75 31 36 29 28 55 4e 50 41 43  gs = (u16)(UNPAC
1b2d0 4b 45 44 5f 49 4e 43 52 4b 45 59 20 2a 20 28 31  KED_INCRKEY * (1
1b2e0 20 26 20 28 6f 63 20 2d 20 4f 50 5f 53 65 65 6b   & (oc - OP_Seek
1b2f0 4c 74 29 29 29 3b 0a 20 20 20 20 20 20 61 73 73  Lt)));.      ass
1b300 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b  ert( oc!=OP_Seek
1b310 47 74 20 7c 7c 20 72 2e 66 6c 61 67 73 3d 3d 55  Gt || r.flags==U
1b320 4e 50 41 43 4b 45 44 5f 49 4e 43 52 4b 45 59 20  NPACKED_INCRKEY 
1b330 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
1b340 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 4c 65 20 7c   oc!=OP_SeekLe |
1b350 7c 20 72 2e 66 6c 61 67 73 3d 3d 55 4e 50 41 43  | r.flags==UNPAC
1b360 4b 45 44 5f 49 4e 43 52 4b 45 59 20 29 3b 0a 20  KED_INCRKEY );. 
1b370 20 20 20 20 20 61 73 73 65 72 74 28 20 6f 63 21       assert( oc!
1b380 3d 4f 50 5f 53 65 65 6b 47 65 20 7c 7c 20 72 2e  =OP_SeekGe || r.
1b390 66 6c 61 67 73 3d 3d 30 20 29 3b 0a 20 20 20 20  flags==0 );.    
1b3a0 20 20 61 73 73 65 72 74 28 20 6f 63 21 3d 4f 50    assert( oc!=OP
1b3b0 5f 53 65 65 6b 4c 74 20 7c 7c 20 72 2e 66 6c 61  _SeekLt || r.fla
1b3c0 67 73 3d 3d 30 20 29 3b 0a 0a 20 20 20 20 20 20  gs==0 );..      
1b3d0 72 2e 61 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70  r.aMem = &aMem[p
1b3e0 4f 70 2d 3e 70 33 5d 3b 0a 23 69 66 64 65 66 20  Op->p3];.#ifdef 
1b3f0 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20  SQLITE_DEBUG.   
1b400 20 20 20 7b 20 69 6e 74 20 69 3b 20 66 6f 72 28     { int i; for(
1b410 69 3d 30 3b 20 69 3c 72 2e 6e 46 69 65 6c 64 3b  i=0; i<r.nField;
1b420 20 69 2b 2b 29 20 61 73 73 65 72 74 28 20 6d 65   i++) assert( me
1b430 6d 49 73 56 61 6c 69 64 28 26 72 2e 61 4d 65 6d  mIsValid(&r.aMem
1b440 5b 69 5d 29 20 29 3b 20 7d 0a 23 65 6e 64 69 66  [i]) ); }.#endif
1b450 0a 20 20 20 20 20 20 45 78 70 61 6e 64 42 6c 6f  .      ExpandBlo
1b460 62 28 72 2e 61 4d 65 6d 29 3b 0a 20 20 20 20 20  b(r.aMem);.     
1b470 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
1b480 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64  eeMovetoUnpacked
1b490 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72  (pC->pCursor, &r
1b4a0 2c 20 30 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20  , 0, 0, &res);. 
1b4b0 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c       if( rc!=SQL
1b4c0 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
1b4d0 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
1b4e0 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20  _to_error;.     
1b4f0 20 7d 0a 20 20 20 20 20 20 70 43 2d 3e 72 6f 77   }.      pC->row
1b500 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20  idIsValid = 0;. 
1b510 20 20 20 7d 0a 20 20 20 20 70 43 2d 3e 64 65 66     }.    pC->def
1b520 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b  erredMoveto = 0;
1b530 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74  .    pC->cacheSt
1b540 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
1b550 4c 45 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  LE;.#ifdef SQLIT
1b560 45 5f 54 45 53 54 0a 20 20 20 20 73 71 6c 69 74  E_TEST.    sqlit
1b570 65 33 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74 2b  e3_search_count+
1b580 2b 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 69 66  +;.#endif.    if
1b590 28 20 6f 63 3e 3d 4f 50 5f 53 65 65 6b 47 65 20  ( oc>=OP_SeekGe 
1b5a0 29 7b 20 20 61 73 73 65 72 74 28 20 6f 63 3d 3d  ){  assert( oc==
1b5b0 4f 50 5f 53 65 65 6b 47 65 20 7c 7c 20 6f 63 3d  OP_SeekGe || oc=
1b5c0 3d 4f 50 5f 53 65 65 6b 47 74 20 29 3b 0a 20 20  =OP_SeekGt );.  
1b5d0 20 20 20 20 69 66 28 20 72 65 73 3c 30 20 7c 7c      if( res<0 ||
1b5e0 20 28 72 65 73 3d 3d 30 20 26 26 20 6f 63 3d 3d   (res==0 && oc==
1b5f0 4f 50 5f 53 65 65 6b 47 74 29 20 29 7b 0a 20 20  OP_SeekGt) ){.  
1b600 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
1b610 65 33 42 74 72 65 65 4e 65 78 74 28 70 43 2d 3e  e3BtreeNext(pC->
1b620 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a  pCursor, &res);.
1b630 20 20 20 20 20 20 20 20 69 66 28 20 72 63 21 3d          if( rc!=
1b640 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f  SQLITE_OK ) goto
1b650 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
1b660 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 70 43 2d  ror;.        pC-
1b670 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20  >rowidIsValid = 
1b680 30 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  0;.      }else{.
1b690 20 20 20 20 20 20 20 20 72 65 73 20 3d 20 30 3b          res = 0;
1b6a0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c  .      }.    }el
1b6b0 73 65 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74  se{.      assert
1b6c0 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 74 20  ( oc==OP_SeekLt 
1b6d0 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 65  || oc==OP_SeekLe
1b6e0 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 65   );.      if( re
1b6f0 73 3e 30 20 7c 7c 20 28 72 65 73 3d 3d 30 20 26  s>0 || (res==0 &
1b700 26 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 74 29  & oc==OP_SeekLt)
1b710 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d   ){.        rc =
1b720 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 72 65   sqlite3BtreePre
1b730 76 69 6f 75 73 28 70 43 2d 3e 70 43 75 72 73 6f  vious(pC->pCurso
1b740 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20  r, &res);.      
1b750 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
1b760 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74  _OK ) goto abort
1b770 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
1b780 20 20 20 20 20 20 20 70 43 2d 3e 72 6f 77 69 64         pC->rowid
1b790 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 20  IsValid = 0;.   
1b7a0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
1b7b0 20 20 2f 2a 20 72 65 73 20 6d 69 67 68 74 20 62    /* res might b
1b7c0 65 20 6e 65 67 61 74 69 76 65 20 62 65 63 61 75  e negative becau
1b7d0 73 65 20 74 68 65 20 74 61 62 6c 65 20 69 73 20  se the table is 
1b7e0 65 6d 70 74 79 2e 20 20 43 68 65 63 6b 20 74 6f  empty.  Check to
1b7f0 0a 20 20 20 20 20 20 20 20 2a 2a 20 73 65 65 20  .        ** see 
1b800 69 66 20 74 68 69 73 20 69 73 20 74 68 65 20 63  if this is the c
1b810 61 73 65 2e 0a 20 20 20 20 20 20 20 20 2a 2f 0a  ase..        */.
1b820 20 20 20 20 20 20 20 20 72 65 73 20 3d 20 73 71          res = sq
1b830 6c 69 74 65 33 42 74 72 65 65 45 6f 66 28 70 43  lite3BtreeEof(pC
1b840 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20  ->pCursor);.    
1b850 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 61 73    }.    }.    as
1b860 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20  sert( pOp->p2>0 
1b870 29 3b 0a 20 20 20 20 69 66 28 20 72 65 73 20 29  );.    if( res )
1b880 7b 0a 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70  {.      pc = pOp
1b890 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 7d 0a  ->p2 - 1;.    }.
1b8a0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20    }else{.    /* 
1b8b0 54 68 69 73 20 68 61 70 70 65 6e 73 20 77 68 65  This happens whe
1b8c0 6e 20 61 74 74 65 6d 70 74 69 6e 67 20 74 6f 20  n attempting to 
1b8d0 6f 70 65 6e 20 74 68 65 20 73 71 6c 69 74 65 33  open the sqlite3
1b8e0 5f 6d 61 73 74 65 72 20 74 61 62 6c 65 0a 20 20  _master table.  
1b8f0 20 20 2a 2a 20 66 6f 72 20 72 65 61 64 20 61 63    ** for read ac
1b900 63 65 73 73 20 72 65 74 75 72 6e 73 20 53 51 4c  cess returns SQL
1b910 49 54 45 5f 45 4d 50 54 59 2e 20 49 6e 20 74 68  ITE_EMPTY. In th
1b920 69 73 20 63 61 73 65 20 61 6c 77 61 79 73 0a 20  is case always. 
1b930 20 20 20 2a 2a 20 74 61 6b 65 20 74 68 65 20 6a     ** take the j
1b940 75 6d 70 20 28 73 69 6e 63 65 20 74 68 65 72 65  ump (since there
1b950 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20   are no records 
1b960 69 6e 20 74 68 65 20 74 61 62 6c 65 29 2e 0a 20  in the table).. 
1b970 20 20 20 2a 2f 0a 20 20 20 20 70 63 20 3d 20 70     */.    pc = p
1b980 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a  Op->p2 - 1;.  }.
1b990 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
1b9a0 70 63 6f 64 65 3a 20 53 65 65 6b 20 50 31 20 50  pcode: Seek P1 P
1b9b0 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50 31  2 * * *.**.** P1
1b9c0 20 69 73 20 61 6e 20 6f 70 65 6e 20 74 61 62 6c   is an open tabl
1b9d0 65 20 63 75 72 73 6f 72 20 61 6e 64 20 50 32 20  e cursor and P2 
1b9e0 69 73 20 61 20 72 6f 77 69 64 20 69 6e 74 65 67  is a rowid integ
1b9f0 65 72 2e 20 20 41 72 72 61 6e 67 65 0a 2a 2a 20  er.  Arrange.** 
1ba00 66 6f 72 20 50 31 20 74 6f 20 6d 6f 76 65 20 73  for P1 to move s
1ba10 6f 20 74 68 61 74 20 69 74 20 70 6f 69 6e 74 73  o that it points
1ba20 20 74 6f 20 74 68 65 20 72 6f 77 69 64 20 67 69   to the rowid gi
1ba30 76 65 6e 20 62 79 20 50 32 2e 0a 2a 2a 0a 2a 2a  ven by P2..**.**
1ba40 20 54 68 69 73 20 69 73 20 61 63 74 75 61 6c 6c   This is actuall
1ba50 79 20 61 20 64 65 66 65 72 72 65 64 20 73 65 65  y a deferred see
1ba60 6b 2e 20 20 4e 6f 74 68 69 6e 67 20 61 63 74 75  k.  Nothing actu
1ba70 61 6c 6c 79 20 68 61 70 70 65 6e 73 20 75 6e 74  ally happens unt
1ba80 69 6c 0a 2a 2a 20 74 68 65 20 63 75 72 73 6f 72  il.** the cursor
1ba90 20 69 73 20 75 73 65 64 20 74 6f 20 72 65 61 64   is used to read
1baa0 20 61 20 72 65 63 6f 72 64 2e 20 20 54 68 61 74   a record.  That
1bab0 20 77 61 79 2c 20 69 66 20 6e 6f 20 72 65 61 64   way, if no read
1bac0 73 0a 2a 2a 20 6f 63 63 75 72 2c 20 6e 6f 20 75  s.** occur, no u
1bad0 6e 6e 65 63 65 73 73 61 72 79 20 49 2f 4f 20 68  nnecessary I/O h
1bae0 61 70 70 65 6e 73 2e 0a 2a 2f 0a 63 61 73 65 20  appens..*/.case 
1baf0 4f 50 5f 53 65 65 6b 3a 20 7b 20 20 20 20 2f 2a  OP_Seek: {    /*
1bb00 20 69 6e 32 20 2a 2f 0a 20 20 56 64 62 65 43 75   in2 */.  VdbeCu
1bb10 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 61 73 73  rsor *pC;..  ass
1bb20 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
1bb30 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
1bb40 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
1bb50 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
1bb60 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
1bb70 3d 30 20 29 3b 0a 20 20 69 66 28 20 41 4c 57 41  =0 );.  if( ALWA
1bb80 59 53 28 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d  YS(pC->pCursor!=
1bb90 30 29 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  0) ){.    assert
1bba0 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b  ( pC->isTable );
1bbb0 0a 20 20 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77  .    pC->nullRow
1bbc0 20 3d 20 30 3b 0a 20 20 20 20 70 49 6e 32 20 3d   = 0;.    pIn2 =
1bbd0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
1bbe0 0a 20 20 20 20 70 43 2d 3e 6d 6f 76 65 74 6f 54  .    pC->movetoT
1bbf0 61 72 67 65 74 20 3d 20 73 71 6c 69 74 65 33 56  arget = sqlite3V
1bc00 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 32  dbeIntValue(pIn2
1bc10 29 3b 0a 20 20 20 20 70 43 2d 3e 72 6f 77 69 64  );.    pC->rowid
1bc20 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 20  IsValid = 0;.   
1bc30 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
1bc40 65 74 6f 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 62  eto = 1;.  }.  b
1bc50 72 65 61 6b 3b 0a 7d 0a 20 20 0a 0a 2f 2a 20 4f  reak;.}.  ../* O
1bc60 70 63 6f 64 65 3a 20 46 6f 75 6e 64 20 50 31 20  pcode: Found P1 
1bc70 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  P2 P3 P4 *.**.**
1bc80 20 49 66 20 50 34 3d 3d 30 20 74 68 65 6e 20 72   If P4==0 then r
1bc90 65 67 69 73 74 65 72 20 50 33 20 68 6f 6c 64 73  egister P3 holds
1bca0 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74 72 75 63   a blob construc
1bcb0 74 65 64 20 62 79 20 4d 61 6b 65 52 65 63 6f 72  ted by MakeRecor
1bcc0 64 2e 20 20 49 66 0a 2a 2a 20 50 34 3e 30 20 74  d.  If.** P4>0 t
1bcd0 68 65 6e 20 72 65 67 69 73 74 65 72 20 50 33 20  hen register P3 
1bce0 69 73 20 74 68 65 20 66 69 72 73 74 20 6f 66 20  is the first of 
1bcf0 50 34 20 72 65 67 69 73 74 65 72 73 20 74 68 61  P4 registers tha
1bd00 74 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b  t form an unpack
1bd10 65 64 0a 2a 2a 20 72 65 63 6f 72 64 2e 0a 2a 2a  ed.** record..**
1bd20 0a 2a 2a 20 43 75 72 73 6f 72 20 50 31 20 69 73  .** Cursor P1 is
1bd30 20 6f 6e 20 61 6e 20 69 6e 64 65 78 20 62 74 72   on an index btr
1bd40 65 65 2e 20 20 49 66 20 74 68 65 20 72 65 63 6f  ee.  If the reco
1bd50 72 64 20 69 64 65 6e 74 69 66 69 65 64 20 62 79  rd identified by
1bd60 20 50 33 20 61 6e 64 20 50 34 0a 2a 2a 20 69 73   P3 and P4.** is
1bd70 20 61 20 70 72 65 66 69 78 20 6f 66 20 61 6e 79   a prefix of any
1bd80 20 65 6e 74 72 79 20 69 6e 20 50 31 20 74 68 65   entry in P1 the
1bd90 6e 20 61 20 6a 75 6d 70 20 69 73 20 6d 61 64 65  n a jump is made
1bda0 20 74 6f 20 50 32 20 61 6e 64 0a 2a 2a 20 50 31   to P2 and.** P1
1bdb0 20 69 73 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e   is left pointin
1bdc0 67 20 61 74 20 74 68 65 20 6d 61 74 63 68 69 6e  g at the matchin
1bdd0 67 20 65 6e 74 72 79 2e 0a 2a 2f 0a 2f 2a 20 4f  g entry..*/./* O
1bde0 70 63 6f 64 65 3a 20 4e 6f 74 46 6f 75 6e 64 20  pcode: NotFound 
1bdf0 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a  P1 P2 P3 P4 *.**
1be00 0a 2a 2a 20 49 66 20 50 34 3d 3d 30 20 74 68 65  .** If P4==0 the
1be10 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 68 6f  n register P3 ho
1be20 6c 64 73 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74  lds a blob const
1be30 72 75 63 74 65 64 20 62 79 20 4d 61 6b 65 52 65  ructed by MakeRe
1be40 63 6f 72 64 2e 20 20 49 66 0a 2a 2a 20 50 34 3e  cord.  If.** P4>
1be50 30 20 74 68 65 6e 20 72 65 67 69 73 74 65 72 20  0 then register 
1be60 50 33 20 69 73 20 74 68 65 20 66 69 72 73 74 20  P3 is the first 
1be70 6f 66 20 50 34 20 72 65 67 69 73 74 65 72 73 20  of P4 registers 
1be80 74 68 61 74 20 66 6f 72 6d 20 61 6e 20 75 6e 70  that form an unp
1be90 61 63 6b 65 64 0a 2a 2a 20 72 65 63 6f 72 64 2e  acked.** record.
1bea0 0a 2a 2a 20 0a 2a 2a 20 43 75 72 73 6f 72 20 50  .** .** Cursor P
1beb0 31 20 69 73 20 6f 6e 20 61 6e 20 69 6e 64 65 78  1 is on an index
1bec0 20 62 74 72 65 65 2e 20 20 49 66 20 74 68 65 20   btree.  If the 
1bed0 72 65 63 6f 72 64 20 69 64 65 6e 74 69 66 69 65  record identifie
1bee0 64 20 62 79 20 50 33 20 61 6e 64 20 50 34 0a 2a  d by P3 and P4.*
1bef0 2a 20 69 73 20 6e 6f 74 20 74 68 65 20 70 72 65  * is not the pre
1bf00 66 69 78 20 6f 66 20 61 6e 79 20 65 6e 74 72 79  fix of any entry
1bf10 20 69 6e 20 50 31 20 74 68 65 6e 20 61 20 6a 75   in P1 then a ju
1bf20 6d 70 20 69 73 20 6d 61 64 65 20 74 6f 20 50 32  mp is made to P2
1bf30 2e 20 20 49 66 20 50 31 20 0a 2a 2a 20 64 6f 65  .  If P1 .** doe
1bf40 73 20 63 6f 6e 74 61 69 6e 20 61 6e 20 65 6e 74  s contain an ent
1bf50 72 79 20 77 68 6f 73 65 20 70 72 65 66 69 78 20  ry whose prefix 
1bf60 6d 61 74 63 68 65 73 20 74 68 65 20 50 33 2f 50  matches the P3/P
1bf70 34 20 72 65 63 6f 72 64 20 74 68 65 6e 20 63 6f  4 record then co
1bf80 6e 74 72 6f 6c 0a 2a 2a 20 66 61 6c 6c 73 20 74  ntrol.** falls t
1bf90 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65  hrough to the ne
1bfa0 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61  xt instruction a
1bfb0 6e 64 20 50 31 20 69 73 20 6c 65 66 74 20 70 6f  nd P1 is left po
1bfc0 69 6e 74 69 6e 67 20 61 74 20 74 68 65 0a 2a 2a  inting at the.**
1bfd0 20 6d 61 74 63 68 69 6e 67 20 65 6e 74 72 79 2e   matching entry.
1bfe0 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
1bff0 20 46 6f 75 6e 64 2c 20 4e 6f 74 45 78 69 73 74   Found, NotExist
1c000 73 2c 20 49 73 55 6e 69 71 75 65 0a 2a 2f 0a 63  s, IsUnique.*/.c
1c010 61 73 65 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 3a  ase OP_NotFound:
1c020 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
1c030 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 46  in3 */.case OP_F
1c040 6f 75 6e 64 3a 20 7b 20 20 20 20 20 20 20 20 2f  ound: {        /
1c050 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20  * jump, in3 */. 
1c060 20 69 6e 74 20 61 6c 72 65 61 64 79 45 78 69 73   int alreadyExis
1c070 74 73 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  ts;.  VdbeCursor
1c080 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65 73 3b   *pC;.  int res;
1c090 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72  .  UnpackedRecor
1c0a0 64 20 2a 70 49 64 78 4b 65 79 3b 0a 20 20 55 6e  d *pIdxKey;.  Un
1c0b0 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a  packedRecord r;.
1c0c0 20 20 63 68 61 72 20 61 54 65 6d 70 52 65 63 5b    char aTempRec[
1c0d0 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28 55 6e  ROUND8(sizeof(Un
1c0e0 70 61 63 6b 65 64 52 65 63 6f 72 64 29 29 20 2b  packedRecord)) +
1c0f0 20 73 69 7a 65 6f 66 28 4d 65 6d 29 2a 33 20 2b   sizeof(Mem)*3 +
1c100 20 37 5d 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c   7];..#ifdef SQL
1c110 49 54 45 5f 54 45 53 54 0a 20 20 73 71 6c 69 74  ITE_TEST.  sqlit
1c120 65 33 5f 66 6f 75 6e 64 5f 63 6f 75 6e 74 2b 2b  e3_found_count++
1c130 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 61 6c 72 65  ;.#endif..  alre
1c140 61 64 79 45 78 69 73 74 73 20 3d 20 30 3b 0a 20  adyExists = 0;. 
1c150 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
1c160 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
1c170 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61  ->nCursor );.  a
1c180 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79  ssert( pOp->p4ty
1c190 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a  pe==P4_INT32 );.
1c1a0 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
1c1b0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
1c1c0 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 70  rt( pC!=0 );.  p
1c1d0 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In3 = &aMem[pOp-
1c1e0 3e 70 33 5d 3b 0a 20 20 69 66 28 20 41 4c 57 41  >p3];.  if( ALWA
1c1f0 59 53 28 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d  YS(pC->pCursor!=
1c200 30 29 20 29 7b 0a 0a 20 20 20 20 61 73 73 65 72  0) ){..    asser
1c210 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d  t( pC->isTable==
1c220 30 20 29 3b 0a 20 20 20 20 69 66 28 20 70 4f 70  0 );.    if( pOp
1c230 2d 3e 70 34 2e 69 3e 30 20 29 7b 0a 20 20 20 20  ->p4.i>0 ){.    
1c240 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70    r.pKeyInfo = p
1c250 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20  C->pKeyInfo;.   
1c260 20 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75     r.nField = (u
1c270 31 36 29 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20  16)pOp->p4.i;.  
1c280 20 20 20 20 72 2e 61 4d 65 6d 20 3d 20 70 49 6e      r.aMem = pIn
1c290 33 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  3;.#ifdef SQLITE
1c2a0 5f 44 45 42 55 47 0a 20 20 20 20 20 20 7b 20 69  _DEBUG.      { i
1c2b0 6e 74 20 69 3b 20 66 6f 72 28 69 3d 30 3b 20 69  nt i; for(i=0; i
1c2c0 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b 29 20  <r.nField; i++) 
1c2d0 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
1c2e0 69 64 28 26 72 2e 61 4d 65 6d 5b 69 5d 29 20 29  id(&r.aMem[i]) )
1c2f0 3b 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 20  ; }.#endif.     
1c300 20 72 2e 66 6c 61 67 73 20 3d 20 55 4e 50 41 43   r.flags = UNPAC
1c310 4b 45 44 5f 50 52 45 46 49 58 5f 4d 41 54 43 48  KED_PREFIX_MATCH
1c320 3b 0a 20 20 20 20 20 20 70 49 64 78 4b 65 79 20  ;.      pIdxKey 
1c330 3d 20 26 72 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  = &r;.    }else{
1c340 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
1c350 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In3->flags & MEM
1c360 5f 42 6c 6f 62 20 29 3b 0a 20 20 20 20 20 20 61  _Blob );.      a
1c370 73 73 65 72 74 28 20 28 70 49 6e 33 2d 3e 66 6c  ssert( (pIn3->fl
1c380 61 67 73 20 26 20 4d 45 4d 5f 5a 65 72 6f 29 3d  ags & MEM_Zero)=
1c390 3d 30 20 29 3b 20 20 2f 2a 20 7a 65 72 6f 62 6c  =0 );  /* zerobl
1c3a0 6f 62 73 20 61 6c 72 65 61 64 79 20 65 78 70 61  obs already expa
1c3b0 6e 64 65 64 20 2a 2f 0a 20 20 20 20 20 20 70 49  nded */.      pI
1c3c0 64 78 4b 65 79 20 3d 20 73 71 6c 69 74 65 33 56  dxKey = sqlite3V
1c3d0 64 62 65 52 65 63 6f 72 64 55 6e 70 61 63 6b 28  dbeRecordUnpack(
1c3e0 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 2c 20 70 49  pC->pKeyInfo, pI
1c3f0 6e 33 2d 3e 6e 2c 20 70 49 6e 33 2d 3e 7a 2c 0a  n3->n, pIn3->z,.
1c400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c420 20 20 20 20 20 20 20 20 61 54 65 6d 70 52 65 63          aTempRec
1c430 2c 20 73 69 7a 65 6f 66 28 61 54 65 6d 70 52 65  , sizeof(aTempRe
1c440 63 29 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70  c));.      if( p
1c450 49 64 78 4b 65 79 3d 3d 30 20 29 7b 0a 20 20 20  IdxKey==0 ){.   
1c460 20 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d       goto no_mem
1c470 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
1c480 70 49 64 78 4b 65 79 2d 3e 66 6c 61 67 73 20 7c  pIdxKey->flags |
1c490 3d 20 55 4e 50 41 43 4b 45 44 5f 50 52 45 46 49  = UNPACKED_PREFI
1c4a0 58 5f 4d 41 54 43 48 3b 0a 20 20 20 20 7d 0a 20  X_MATCH;.    }. 
1c4b0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
1c4c0 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b  treeMovetoUnpack
1c4d0 65 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20  ed(pC->pCursor, 
1c4e0 70 49 64 78 4b 65 79 2c 20 30 2c 20 30 2c 20 26  pIdxKey, 0, 0, &
1c4f0 72 65 73 29 3b 0a 20 20 20 20 69 66 28 20 70 4f  res);.    if( pO
1c500 70 2d 3e 70 34 2e 69 3d 3d 30 20 29 7b 0a 20 20  p->p4.i==0 ){.  
1c510 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 44      sqlite3VdbeD
1c520 65 6c 65 74 65 55 6e 70 61 63 6b 65 64 52 65 63  eleteUnpackedRec
1c530 6f 72 64 28 70 49 64 78 4b 65 79 29 3b 0a 20 20  ord(pIdxKey);.  
1c540 20 20 7d 0a 20 20 20 20 69 66 28 20 72 63 21 3d    }.    if( rc!=
1c550 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
1c560 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a     break;.    }.
1c570 20 20 20 20 61 6c 72 65 61 64 79 45 78 69 73 74      alreadyExist
1c580 73 20 3d 20 28 72 65 73 3d 3d 30 29 3b 0a 20 20  s = (res==0);.  
1c590 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f    pC->deferredMo
1c5a0 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20 20 70 43  veto = 0;.    pC
1c5b0 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
1c5c0 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 7d  CACHE_STALE;.  }
1c5d0 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f  .  if( pOp->opco
1c5e0 64 65 3d 3d 4f 50 5f 46 6f 75 6e 64 20 29 7b 0a  de==OP_Found ){.
1c5f0 20 20 20 20 69 66 28 20 61 6c 72 65 61 64 79 45      if( alreadyE
1c600 78 69 73 74 73 20 29 20 70 63 20 3d 20 70 4f 70  xists ) pc = pOp
1c610 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 65 6c 73  ->p2 - 1;.  }els
1c620 65 7b 0a 20 20 20 20 69 66 28 20 21 61 6c 72 65  e{.    if( !alre
1c630 61 64 79 45 78 69 73 74 73 20 29 20 70 63 20 3d  adyExists ) pc =
1c640 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
1c650 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
1c660 20 4f 70 63 6f 64 65 3a 20 49 73 55 6e 69 71 75   Opcode: IsUniqu
1c670 65 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a  e P1 P2 P3 P4 *.
1c680 2a 2a 0a 2a 2a 20 43 75 72 73 6f 72 20 50 31 20  **.** Cursor P1 
1c690 69 73 20 6f 70 65 6e 20 6f 6e 20 61 6e 20 69 6e  is open on an in
1c6a0 64 65 78 20 62 2d 74 72 65 65 20 2d 20 74 68 61  dex b-tree - tha
1c6b0 74 20 69 73 20 74 6f 20 73 61 79 2c 20 61 20 62  t is to say, a b
1c6c0 74 72 65 65 20 77 68 69 63 68 0a 2a 2a 20 6e 6f  tree which.** no
1c6d0 20 64 61 74 61 20 61 6e 64 20 77 68 65 72 65 20   data and where 
1c6e0 74 68 65 20 6b 65 79 20 61 72 65 20 72 65 63 6f  the key are reco
1c6f0 72 64 73 20 67 65 6e 65 72 61 74 65 64 20 62 79  rds generated by
1c700 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64 20 77   OP_MakeRecord w
1c710 69 74 68 0a 2a 2a 20 74 68 65 20 6c 69 73 74 20  ith.** the list 
1c720 66 69 65 6c 64 20 62 65 69 6e 67 20 74 68 65 20  field being the 
1c730 69 6e 74 65 67 65 72 20 52 4f 57 49 44 20 6f 66  integer ROWID of
1c740 20 74 68 65 20 65 6e 74 72 79 20 74 68 61 74 20   the entry that 
1c750 74 68 65 20 69 6e 64 65 78 0a 2a 2a 20 65 6e 74  the index.** ent
1c760 72 79 20 72 65 66 65 72 73 20 74 6f 2e 0a 2a 2a  ry refers to..**
1c770 0a 2a 2a 20 54 68 65 20 50 33 20 72 65 67 69 73  .** The P3 regis
1c780 74 65 72 20 63 6f 6e 74 61 69 6e 73 20 61 6e 20  ter contains an 
1c790 69 6e 74 65 67 65 72 20 72 65 63 6f 72 64 20 6e  integer record n
1c7a0 75 6d 62 65 72 2e 20 43 61 6c 6c 20 74 68 69 73  umber. Call this
1c7b0 20 72 65 63 6f 72 64 20 0a 2a 2a 20 6e 75 6d 62   record .** numb
1c7c0 65 72 20 52 2e 20 52 65 67 69 73 74 65 72 20 50  er R. Register P
1c7d0 34 20 69 73 20 74 68 65 20 66 69 72 73 74 20 69  4 is the first i
1c7e0 6e 20 61 20 73 65 74 20 6f 66 20 4e 20 63 6f 6e  n a set of N con
1c7f0 74 69 67 75 6f 75 73 20 72 65 67 69 73 74 65 72  tiguous register
1c800 73 0a 2a 2a 20 74 68 61 74 20 6d 61 6b 65 20 75  s.** that make u
1c810 70 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e  p an unpacked in
1c820 64 65 78 20 6b 65 79 20 74 68 61 74 20 63 61 6e  dex key that can
1c830 20 62 65 20 75 73 65 64 20 77 69 74 68 20 63 75   be used with cu
1c840 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 54 68 65 20  rsor P1..** The 
1c850 76 61 6c 75 65 20 6f 66 20 4e 20 63 61 6e 20 62  value of N can b
1c860 65 20 69 6e 66 65 72 72 65 64 20 66 72 6f 6d 20  e inferred from 
1c870 74 68 65 20 63 75 72 73 6f 72 2e 20 4e 20 69 6e  the cursor. N in
1c880 63 6c 75 64 65 73 20 74 68 65 20 72 6f 77 69 64  cludes the rowid
1c890 0a 2a 2a 20 76 61 6c 75 65 20 61 70 70 65 6e 64  .** value append
1c8a0 65 64 20 74 6f 20 74 68 65 20 65 6e 64 20 6f 66  ed to the end of
1c8b0 20 74 68 65 20 69 6e 64 65 78 20 72 65 63 6f 72   the index recor
1c8c0 64 2e 20 54 68 69 73 20 72 6f 77 69 64 20 76 61  d. This rowid va
1c8d0 6c 75 65 20 6d 61 79 0a 2a 2a 20 6f 72 20 6d 61  lue may.** or ma
1c8e0 79 20 6e 6f 74 20 62 65 20 74 68 65 20 73 61 6d  y not be the sam
1c8f0 65 20 61 73 20 52 2e 0a 2a 2a 0a 2a 2a 20 49 66  e as R..**.** If
1c900 20 61 6e 79 20 6f 66 20 74 68 65 20 4e 20 72 65   any of the N re
1c910 67 69 73 74 65 72 73 20 62 65 67 69 6e 6e 69 6e  gisters beginnin
1c920 67 20 77 69 74 68 20 72 65 67 69 73 74 65 72 20  g with register 
1c930 50 34 20 63 6f 6e 74 61 69 6e 73 20 61 20 4e 55  P4 contains a NU
1c940 4c 4c 0a 2a 2a 20 76 61 6c 75 65 2c 20 6a 75 6d  LL.** value, jum
1c950 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f  p immediately to
1c960 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 4f 74 68 65 72   P2..**.** Other
1c970 77 69 73 65 2c 20 74 68 69 73 20 69 6e 73 74 72  wise, this instr
1c980 75 63 74 69 6f 6e 20 63 68 65 63 6b 73 20 69 66  uction checks if
1c990 20 63 75 72 73 6f 72 20 50 31 20 63 6f 6e 74 61   cursor P1 conta
1c9a0 69 6e 73 20 61 6e 20 65 6e 74 72 79 0a 2a 2a 20  ins an entry.** 
1c9b0 77 68 65 72 65 20 74 68 65 20 66 69 72 73 74 20  where the first 
1c9c0 28 4e 2d 31 29 20 66 69 65 6c 64 73 20 6d 61 74  (N-1) fields mat
1c9d0 63 68 20 62 75 74 20 74 68 65 20 72 6f 77 69 64  ch but the rowid
1c9e0 20 76 61 6c 75 65 20 61 74 20 74 68 65 20 65 6e   value at the en
1c9f0 64 0a 2a 2a 20 6f 66 20 74 68 65 20 69 6e 64 65  d.** of the inde
1ca00 78 20 65 6e 74 72 79 20 69 73 20 6e 6f 74 20 52  x entry is not R
1ca10 2e 20 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f  . If there is no
1ca20 20 73 75 63 68 20 65 6e 74 72 79 2c 20 63 6f 6e   such entry, con
1ca30 74 72 6f 6c 20 6a 75 6d 70 73 0a 2a 2a 20 74 6f  trol jumps.** to
1ca40 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 50 32 2e   instruction P2.
1ca50 20 4f 74 68 65 72 77 69 73 65 2c 20 74 68 65 20   Otherwise, the 
1ca60 72 6f 77 69 64 20 6f 66 20 74 68 65 20 63 6f 6e  rowid of the con
1ca70 66 6c 69 63 74 69 6e 67 20 69 6e 64 65 78 0a 2a  flicting index.*
1ca80 2a 20 65 6e 74 72 79 20 69 73 20 63 6f 70 69 65  * entry is copie
1ca90 64 20 74 6f 20 72 65 67 69 73 74 65 72 20 50 33  d to register P3
1caa0 20 61 6e 64 20 63 6f 6e 74 72 6f 6c 20 66 61 6c   and control fal
1cab0 6c 73 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  ls through to th
1cac0 65 20 6e 65 78 74 0a 2a 2a 20 69 6e 73 74 72 75  e next.** instru
1cad0 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  ction..**.** See
1cae0 20 61 6c 73 6f 3a 20 4e 6f 74 46 6f 75 6e 64 2c   also: NotFound,
1caf0 20 4e 6f 74 45 78 69 73 74 73 2c 20 46 6f 75 6e   NotExists, Foun
1cb00 64 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 73 55  d.*/.case OP_IsU
1cb10 6e 69 71 75 65 3a 20 7b 20 20 20 20 20 20 20 20  nique: {        
1cb20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a  /* jump, in3 */.
1cb30 20 20 75 31 36 20 69 69 3b 0a 20 20 56 64 62 65    u16 ii;.  Vdbe
1cb40 43 75 72 73 6f 72 20 2a 70 43 78 3b 0a 20 20 42  Cursor *pCx;.  B
1cb50 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a  tCursor *pCrsr;.
1cb60 20 20 75 31 36 20 6e 46 69 65 6c 64 3b 0a 20 20    u16 nField;.  
1cb70 4d 65 6d 20 2a 61 4d 78 3b 0a 20 20 55 6e 70 61  Mem *aMx;.  Unpa
1cb80 63 6b 65 64 52 65 63 6f 72 64 20 72 3b 20 20 20  ckedRecord r;   
1cb90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1cba0 2a 20 42 2d 54 72 65 65 20 69 6e 64 65 78 20 73  * B-Tree index s
1cbb0 65 61 72 63 68 20 6b 65 79 20 2a 2f 0a 20 20 69  earch key */.  i
1cbc0 36 34 20 52 3b 20 20 20 20 20 20 20 20 20 20 20  64 R;           
1cbd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cbe0 20 20 2f 2a 20 52 6f 77 69 64 20 73 74 6f 72 65    /* Rowid store
1cbf0 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  d in register P3
1cc00 20 2a 2f 0a 0a 20 20 70 49 6e 33 20 3d 20 26 61   */..  pIn3 = &a
1cc10 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
1cc20 61 4d 78 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  aMx = &aMem[pOp-
1cc30 3e 70 34 2e 69 5d 3b 0a 20 20 2f 2a 20 41 73 73  >p4.i];.  /* Ass
1cc40 65 72 74 20 74 68 61 74 20 74 68 65 20 76 61 6c  ert that the val
1cc50 75 65 73 20 6f 66 20 70 61 72 61 6d 65 74 65 72  ues of parameter
1cc60 73 20 50 31 20 61 6e 64 20 50 34 20 61 72 65 20  s P1 and P4 are 
1cc70 69 6e 20 72 61 6e 67 65 2e 20 2a 2f 0a 20 20 61  in range. */.  a
1cc80 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79  ssert( pOp->p4ty
1cc90 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a  pe==P4_INT32 );.
1cca0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1ccb0 34 2e 69 3e 30 20 26 26 20 70 4f 70 2d 3e 70 34  4.i>0 && pOp->p4
1ccc0 2e 69 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20  .i<=p->nMem );. 
1ccd0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
1cce0 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
1ccf0 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 0a 20 20  ->nCursor );..  
1cd00 2f 2a 20 46 69 6e 64 20 74 68 65 20 69 6e 64 65  /* Find the inde
1cd10 78 20 63 75 72 73 6f 72 2e 20 2a 2f 0a 20 20 70  x cursor. */.  p
1cd20 43 78 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  Cx = p->apCsr[pO
1cd30 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
1cd40 28 20 70 43 78 2d 3e 64 65 66 65 72 72 65 64 4d  ( pCx->deferredM
1cd50 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 70 43  oveto==0 );.  pC
1cd60 78 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d 20  x->seekResult = 
1cd70 30 3b 0a 20 20 70 43 78 2d 3e 63 61 63 68 65 53  0;.  pCx->cacheS
1cd80 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
1cd90 41 4c 45 3b 0a 20 20 70 43 72 73 72 20 3d 20 70  ALE;.  pCrsr = p
1cda0 43 78 2d 3e 70 43 75 72 73 6f 72 3b 0a 0a 20 20  Cx->pCursor;..  
1cdb0 2f 2a 20 49 66 20 61 6e 79 20 6f 66 20 74 68 65  /* If any of the
1cdc0 20 76 61 6c 75 65 73 20 61 72 65 20 4e 55 4c 4c   values are NULL
1cdd0 2c 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 2e  , take the jump.
1cde0 20 2a 2f 0a 20 20 6e 46 69 65 6c 64 20 3d 20 70   */.  nField = p
1cdf0 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46  Cx->pKeyInfo->nF
1ce00 69 65 6c 64 3b 0a 20 20 66 6f 72 28 69 69 3d 30  ield;.  for(ii=0
1ce10 3b 20 69 69 3c 6e 46 69 65 6c 64 3b 20 69 69 2b  ; ii<nField; ii+
1ce20 2b 29 7b 0a 20 20 20 20 69 66 28 20 61 4d 78 5b  +){.    if( aMx[
1ce30 69 69 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  ii].flags & MEM_
1ce40 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 20 20 70 63  Null ){.      pc
1ce50 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
1ce60 20 20 20 20 20 20 70 43 72 73 72 20 3d 20 30 3b        pCrsr = 0;
1ce70 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  .      break;.  
1ce80 20 20 7d 0a 20 20 7d 0a 20 20 61 73 73 65 72 74    }.  }.  assert
1ce90 28 20 28 61 4d 78 5b 6e 46 69 65 6c 64 5d 2e 66  ( (aMx[nField].f
1cea0 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29  lags & MEM_Null)
1ceb0 3d 3d 30 20 29 3b 0a 0a 20 20 69 66 28 20 70 43  ==0 );..  if( pC
1cec0 72 73 72 21 3d 30 20 29 7b 0a 20 20 20 20 2f 2a  rsr!=0 ){.    /*
1ced0 20 50 6f 70 75 6c 61 74 65 20 74 68 65 20 69 6e   Populate the in
1cee0 64 65 78 20 73 65 61 72 63 68 20 6b 65 79 2e 20  dex search key. 
1cef0 2a 2f 0a 20 20 20 20 72 2e 70 4b 65 79 49 6e 66  */.    r.pKeyInf
1cf00 6f 20 3d 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66  o = pCx->pKeyInf
1cf10 6f 3b 0a 20 20 20 20 72 2e 6e 46 69 65 6c 64 20  o;.    r.nField 
1cf20 3d 20 6e 46 69 65 6c 64 20 2b 20 31 3b 0a 20 20  = nField + 1;.  
1cf30 20 20 72 2e 66 6c 61 67 73 20 3d 20 55 4e 50 41    r.flags = UNPA
1cf40 43 4b 45 44 5f 50 52 45 46 49 58 5f 53 45 41 52  CKED_PREFIX_SEAR
1cf50 43 48 3b 0a 20 20 20 20 72 2e 61 4d 65 6d 20 3d  CH;.    r.aMem =
1cf60 20 61 4d 78 3b 0a 23 69 66 64 65 66 20 53 51 4c   aMx;.#ifdef SQL
1cf70 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20 7b 20  ITE_DEBUG.    { 
1cf80 69 6e 74 20 69 3b 20 66 6f 72 28 69 3d 30 3b 20  int i; for(i=0; 
1cf90 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b 29  i<r.nField; i++)
1cfa0 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
1cfb0 6c 69 64 28 26 72 2e 61 4d 65 6d 5b 69 5d 29 20  lid(&r.aMem[i]) 
1cfc0 29 3b 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 20  ); }.#endif..   
1cfd0 20 2f 2a 20 45 78 74 72 61 63 74 20 74 68 65 20   /* Extract the 
1cfe0 76 61 6c 75 65 20 6f 66 20 52 20 66 72 6f 6d 20  value of R from 
1cff0 72 65 67 69 73 74 65 72 20 50 33 2e 20 2a 2f 0a  register P3. */.
1d000 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
1d010 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e  emIntegerify(pIn
1d020 33 29 3b 0a 20 20 20 20 52 20 3d 20 70 49 6e 33  3);.    R = pIn3
1d030 2d 3e 75 2e 69 3b 0a 0a 20 20 20 20 2f 2a 20 53  ->u.i;..    /* S
1d040 65 61 72 63 68 20 74 68 65 20 42 2d 54 72 65 65  earch the B-Tree
1d050 20 69 6e 64 65 78 2e 20 49 66 20 6e 6f 20 63 6f   index. If no co
1d060 6e 66 6c 69 63 74 69 6e 67 20 72 65 63 6f 72 64  nflicting record
1d070 20 69 73 20 66 6f 75 6e 64 2c 20 6a 75 6d 70 0a   is found, jump.
1d080 20 20 20 20 2a 2a 20 74 6f 20 50 32 2e 20 4f 74      ** to P2. Ot
1d090 68 65 72 77 69 73 65 2c 20 63 6f 70 79 20 74 68  herwise, copy th
1d0a0 65 20 72 6f 77 69 64 20 6f 66 20 74 68 65 20 63  e rowid of the c
1d0b0 6f 6e 66 6c 69 63 74 69 6e 67 20 72 65 63 6f 72  onflicting recor
1d0c0 64 20 74 6f 0a 20 20 20 20 2a 2a 20 72 65 67 69  d to.    ** regi
1d0d0 73 74 65 72 20 50 33 20 61 6e 64 20 66 61 6c 6c  ster P3 and fall
1d0e0 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
1d0f0 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
1d100 2e 20 20 2a 2f 0a 20 20 20 20 72 63 20 3d 20 73  .  */.    rc = s
1d110 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74  qlite3BtreeMovet
1d120 6f 55 6e 70 61 63 6b 65 64 28 70 43 72 73 72 2c  oUnpacked(pCrsr,
1d130 20 26 72 2c 20 30 2c 20 30 2c 20 26 70 43 78 2d   &r, 0, 0, &pCx-
1d140 3e 73 65 65 6b 52 65 73 75 6c 74 29 3b 0a 20 20  >seekResult);.  
1d150 20 20 69 66 28 20 28 72 2e 66 6c 61 67 73 20 26    if( (r.flags &
1d160 20 55 4e 50 41 43 4b 45 44 5f 50 52 45 46 49 58   UNPACKED_PREFIX
1d170 5f 53 45 41 52 43 48 29 20 7c 7c 20 72 2e 72 6f  _SEARCH) || r.ro
1d180 77 69 64 3d 3d 52 20 29 7b 0a 20 20 20 20 20 20  wid==R ){.      
1d190 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
1d1a0 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
1d1b0 20 20 20 70 49 6e 33 2d 3e 75 2e 69 20 3d 20 72     pIn3->u.i = r
1d1c0 2e 72 6f 77 69 64 3b 0a 20 20 20 20 7d 0a 20 20  .rowid;.    }.  
1d1d0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
1d1e0 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 45 78 69 73   Opcode: NotExis
1d1f0 74 73 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ts P1 P2 P3 * *.
1d200 2a 2a 0a 2a 2a 20 55 73 65 20 74 68 65 20 63 6f  **.** Use the co
1d210 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65  ntent of registe
1d220 72 20 50 33 20 61 73 20 61 20 69 6e 74 65 67 65  r P3 as a intege
1d230 72 20 6b 65 79 2e 20 20 49 66 20 61 20 72 65 63  r key.  If a rec
1d240 6f 72 64 20 0a 2a 2a 20 77 69 74 68 20 74 68 61  ord .** with tha
1d250 74 20 6b 65 79 20 64 6f 65 73 20 6e 6f 74 20 65  t key does not e
1d260 78 69 73 74 20 69 6e 20 74 61 62 6c 65 20 6f 66  xist in table of
1d270 20 50 31 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74   P1, then jump t
1d280 6f 20 50 32 2e 20 0a 2a 2a 20 49 66 20 74 68 65  o P2. .** If the
1d290 20 72 65 63 6f 72 64 20 64 6f 65 73 20 65 78 69   record does exi
1d2a0 73 74 2c 20 74 68 65 6e 20 66 61 6c 6c 20 74 68  st, then fall th
1d2b0 72 6f 75 67 68 2e 20 20 54 68 65 20 63 75 72 73  rough.  The curs
1d2c0 6f 72 20 69 73 20 6c 65 66 74 20 0a 2a 2a 20 70  or is left .** p
1d2d0 6f 69 6e 74 69 6e 67 20 74 6f 20 74 68 65 20 72  ointing to the r
1d2e0 65 63 6f 72 64 20 69 66 20 69 74 20 65 78 69 73  ecord if it exis
1d2f0 74 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 64 69  ts..**.** The di
1d300 66 66 65 72 65 6e 63 65 20 62 65 74 77 65 65 6e  fference between
1d310 20 74 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 20   this operation 
1d320 61 6e 64 20 4e 6f 74 46 6f 75 6e 64 20 69 73 20  and NotFound is 
1d330 74 68 61 74 20 74 68 69 73 0a 2a 2a 20 6f 70 65  that this.** ope
1d340 72 61 74 69 6f 6e 20 61 73 73 75 6d 65 73 20 74  ration assumes t
1d350 68 65 20 6b 65 79 20 69 73 20 61 6e 20 69 6e 74  he key is an int
1d360 65 67 65 72 20 61 6e 64 20 74 68 61 74 20 50 31  eger and that P1
1d370 20 69 73 20 61 20 74 61 62 6c 65 20 77 68 65 72   is a table wher
1d380 65 61 73 0a 2a 2a 20 4e 6f 74 46 6f 75 6e 64 20  eas.** NotFound 
1d390 61 73 73 75 6d 65 73 20 6b 65 79 20 69 73 20 61  assumes key is a
1d3a0 20 62 6c 6f 62 20 63 6f 6e 73 74 72 75 63 74 65   blob constructe
1d3b0 64 20 66 72 6f 6d 20 4d 61 6b 65 52 65 63 6f 72  d from MakeRecor
1d3c0 64 20 61 6e 64 0a 2a 2a 20 50 31 20 69 73 20 61  d and.** P1 is a
1d3d0 6e 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 53  n index..**.** S
1d3e0 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20  ee also: Found, 
1d3f0 4e 6f 74 46 6f 75 6e 64 2c 20 49 73 55 6e 69 71  NotFound, IsUniq
1d400 75 65 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f  ue.*/.case OP_No
1d410 74 45 78 69 73 74 73 3a 20 7b 20 20 20 20 20 20  tExists: {      
1d420 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a    /* jump, in3 *
1d430 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  /.  VdbeCursor *
1d440 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a  pC;.  BtCursor *
1d450 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73  pCrsr;.  int res
1d460 3b 0a 20 20 75 36 34 20 69 4b 65 79 3b 0a 0a 20  ;.  u64 iKey;.. 
1d470 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn3 = &aMem[pO
1d480 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72 74  p->p3];.  assert
1d490 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20  ( pIn3->flags & 
1d4a0 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 61 73 73  MEM_Int );.  ass
1d4b0 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
1d4c0 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
1d4d0 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
1d4e0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
1d4f0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
1d500 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
1d510 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20  pC->isTable );. 
1d520 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 73 65   assert( pC->pse
1d530 75 64 6f 54 61 62 6c 65 52 65 67 3d 3d 30 20 29  udoTableReg==0 )
1d540 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e  ;.  pCrsr = pC->
1d550 70 43 75 72 73 6f 72 3b 0a 20 20 69 66 28 20 70  pCursor;.  if( p
1d560 43 72 73 72 21 3d 30 20 29 7b 0a 20 20 20 20 72  Crsr!=0 ){.    r
1d570 65 73 20 3d 20 30 3b 0a 20 20 20 20 69 4b 65 79  es = 0;.    iKey
1d580 20 3d 20 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20   = pIn3->u.i;.  
1d590 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
1d5a0 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65  reeMovetoUnpacke
1d5b0 64 28 70 43 72 73 72 2c 20 30 2c 20 69 4b 65 79  d(pCrsr, 0, iKey
1d5c0 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 20 20  , 0, &res);.    
1d5d0 70 43 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20  pC->lastRowid = 
1d5e0 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20 20 20 70  pIn3->u.i;.    p
1d5f0 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20  C->rowidIsValid 
1d600 3d 20 72 65 73 3d 3d 30 20 3f 31 3a 30 3b 0a 20  = res==0 ?1:0;. 
1d610 20 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d     pC->nullRow =
1d620 20 30 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68   0;.    pC->cach
1d630 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
1d640 53 54 41 4c 45 3b 0a 20 20 20 20 70 43 2d 3e 64  STALE;.    pC->d
1d650 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20  eferredMoveto = 
1d660 30 3b 0a 20 20 20 20 69 66 28 20 72 65 73 21 3d  0;.    if( res!=
1d670 30 20 29 7b 0a 20 20 20 20 20 20 70 63 20 3d 20  0 ){.      pc = 
1d680 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20  pOp->p2 - 1;.   
1d690 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 72     assert( pC->r
1d6a0 6f 77 69 64 49 73 56 61 6c 69 64 3d 3d 30 20 29  owidIsValid==0 )
1d6b0 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 43 2d 3e  ;.    }.    pC->
1d6c0 73 65 65 6b 52 65 73 75 6c 74 20 3d 20 72 65 73  seekResult = res
1d6d0 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f  ;.  }else{.    /
1d6e0 2a 20 54 68 69 73 20 68 61 70 70 65 6e 73 20 77  * This happens w
1d6f0 68 65 6e 20 61 6e 20 61 74 74 65 6d 70 74 20 74  hen an attempt t
1d700 6f 20 6f 70 65 6e 20 61 20 72 65 61 64 20 63 75  o open a read cu
1d710 72 73 6f 72 20 6f 6e 20 74 68 65 20 0a 20 20 20  rsor on the .   
1d720 20 2a 2a 20 73 71 6c 69 74 65 5f 6d 61 73 74 65   ** sqlite_maste
1d730 72 20 74 61 62 6c 65 20 72 65 74 75 72 6e 73 20  r table returns 
1d740 53 51 4c 49 54 45 5f 45 4d 50 54 59 2e 0a 20 20  SQLITE_EMPTY..  
1d750 20 20 2a 2f 0a 20 20 20 20 70 63 20 3d 20 70 4f    */.    pc = pO
1d760 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 61  p->p2 - 1;.    a
1d770 73 73 65 72 74 28 20 70 43 2d 3e 72 6f 77 69 64  ssert( pC->rowid
1d780 49 73 56 61 6c 69 64 3d 3d 30 20 29 3b 0a 20 20  IsValid==0 );.  
1d790 20 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74    pC->seekResult
1d7a0 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 62 72 65 61   = 0;.  }.  brea
1d7b0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
1d7c0 20 53 65 71 75 65 6e 63 65 20 50 31 20 50 32 20   Sequence P1 P2 
1d7d0 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 69 6e 64  * * *.**.** Find
1d7e0 20 74 68 65 20 6e 65 78 74 20 61 76 61 69 6c 61   the next availa
1d7f0 62 6c 65 20 73 65 71 75 65 6e 63 65 20 6e 75 6d  ble sequence num
1d800 62 65 72 20 66 6f 72 20 63 75 72 73 6f 72 20 50  ber for cursor P
1d810 31 2e 0a 2a 2a 20 57 72 69 74 65 20 74 68 65 20  1..** Write the 
1d820 73 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20  sequence number 
1d830 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  into register P2
1d840 2e 0a 2a 2a 20 54 68 65 20 73 65 71 75 65 6e 63  ..** The sequenc
1d850 65 20 6e 75 6d 62 65 72 20 6f 6e 20 74 68 65 20  e number on the 
1d860 63 75 72 73 6f 72 20 69 73 20 69 6e 63 72 65 6d  cursor is increm
1d870 65 6e 74 65 64 20 61 66 74 65 72 20 74 68 69 73  ented after this
1d880 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  .** instruction.
1d890 20 20 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65    .*/.case OP_Se
1d8a0 71 75 65 6e 63 65 3a 20 7b 20 20 20 20 20 20 20  quence: {       
1d8b0 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72      /* out2-prer
1d8c0 65 6c 65 61 73 65 20 2a 2f 0a 20 20 61 73 73 65  elease */.  asse
1d8d0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
1d8e0 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
1d8f0 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74  rsor );.  assert
1d900 28 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  ( p->apCsr[pOp->
1d910 70 31 5d 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74  p1]!=0 );.  pOut
1d920 2d 3e 75 2e 69 20 3d 20 70 2d 3e 61 70 43 73 72  ->u.i = p->apCsr
1d930 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 73 65 71 43 6f  [pOp->p1]->seqCo
1d940 75 6e 74 2b 2b 3b 0a 20 20 62 72 65 61 6b 3b 0a  unt++;.  break;.
1d950 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e  }.../* Opcode: N
1d960 65 77 52 6f 77 69 64 20 50 31 20 50 32 20 50 33  ewRowid P1 P2 P3
1d970 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 47 65 74 20 61   * *.**.** Get a
1d980 20 6e 65 77 20 69 6e 74 65 67 65 72 20 72 65 63   new integer rec
1d990 6f 72 64 20 6e 75 6d 62 65 72 20 28 61 2e 6b 2e  ord number (a.k.
1d9a0 61 20 22 72 6f 77 69 64 22 29 20 75 73 65 64 20  a "rowid") used 
1d9b0 61 73 20 74 68 65 20 6b 65 79 20 74 6f 20 61 20  as the key to a 
1d9c0 74 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 72 65  table..** The re
1d9d0 63 6f 72 64 20 6e 75 6d 62 65 72 20 69 73 20 6e  cord number is n
1d9e0 6f 74 20 70 72 65 76 69 6f 75 73 6c 79 20 75 73  ot previously us
1d9f0 65 64 20 61 73 20 61 20 6b 65 79 20 69 6e 20 74  ed as a key in t
1da00 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 74  he database.** t
1da10 61 62 6c 65 20 74 68 61 74 20 63 75 72 73 6f 72  able that cursor
1da20 20 50 31 20 70 6f 69 6e 74 73 20 74 6f 2e 20 20   P1 points to.  
1da30 54 68 65 20 6e 65 77 20 72 65 63 6f 72 64 20 6e  The new record n
1da40 75 6d 62 65 72 20 69 73 20 77 72 69 74 74 65 6e  umber is written
1da50 0a 2a 2a 20 77 72 69 74 74 65 6e 20 74 6f 20 72  .** written to r
1da60 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a  egister P2..**.*
1da70 2a 20 49 66 20 50 33 3e 30 20 74 68 65 6e 20 50  * If P3>0 then P
1da80 33 20 69 73 20 61 20 72 65 67 69 73 74 65 72 20  3 is a register 
1da90 69 6e 20 74 68 65 20 72 6f 6f 74 20 66 72 61 6d  in the root fram
1daa0 65 20 6f 66 20 74 68 69 73 20 56 44 42 45 20 74  e of this VDBE t
1dab0 68 61 74 20 68 6f 6c 64 73 20 0a 2a 2a 20 74 68  hat holds .** th
1dac0 65 20 6c 61 72 67 65 73 74 20 70 72 65 76 69 6f  e largest previo
1dad0 75 73 6c 79 20 67 65 6e 65 72 61 74 65 64 20 72  usly generated r
1dae0 65 63 6f 72 64 20 6e 75 6d 62 65 72 2e 20 4e 6f  ecord number. No
1daf0 20 6e 65 77 20 72 65 63 6f 72 64 20 6e 75 6d 62   new record numb
1db00 65 72 73 20 61 72 65 0a 2a 2a 20 61 6c 6c 6f 77  ers are.** allow
1db10 65 64 20 74 6f 20 62 65 20 6c 65 73 73 20 74 68  ed to be less th
1db20 61 6e 20 74 68 69 73 20 76 61 6c 75 65 2e 20 57  an this value. W
1db30 68 65 6e 20 74 68 69 73 20 76 61 6c 75 65 20 72  hen this value r
1db40 65 61 63 68 65 73 20 69 74 73 20 6d 61 78 69 6d  eaches its maxim
1db50 75 6d 2c 20 0a 2a 2a 20 61 20 53 51 4c 49 54 45  um, .** a SQLITE
1db60 5f 46 55 4c 4c 20 65 72 72 6f 72 20 69 73 20 67  _FULL error is g
1db70 65 6e 65 72 61 74 65 64 2e 20 54 68 65 20 50 33  enerated. The P3
1db80 20 72 65 67 69 73 74 65 72 20 69 73 20 75 70 64   register is upd
1db90 61 74 65 64 20 77 69 74 68 20 74 68 65 20 27 0a  ated with the '.
1dba0 2a 2a 20 67 65 6e 65 72 61 74 65 64 20 72 65 63  ** generated rec
1dbb0 6f 72 64 20 6e 75 6d 62 65 72 2e 20 54 68 69 73  ord number. This
1dbc0 20 50 33 20 6d 65 63 68 61 6e 69 73 6d 20 69 73   P3 mechanism is
1dbd0 20 75 73 65 64 20 74 6f 20 68 65 6c 70 20 69 6d   used to help im
1dbe0 70 6c 65 6d 65 6e 74 20 74 68 65 0a 2a 2a 20 41  plement the.** A
1dbf0 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 66 65 61  UTOINCREMENT fea
1dc00 74 75 72 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  ture..*/.case OP
1dc10 5f 4e 65 77 52 6f 77 69 64 3a 20 7b 20 20 20 20  _NewRowid: {    
1dc20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70         /* out2-p
1dc30 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69  rerelease */.  i
1dc40 36 34 20 76 3b 20 20 20 20 20 20 20 20 20 20 20  64 v;           
1dc50 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 77        /* The new
1dc60 20 72 6f 77 69 64 20 2a 2f 0a 20 20 56 64 62 65   rowid */.  Vdbe
1dc70 43 75 72 73 6f 72 20 2a 70 43 3b 20 20 20 20 20  Cursor *pC;     
1dc80 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6f 66 20     /* Cursor of 
1dc90 74 61 62 6c 65 20 74 6f 20 67 65 74 20 74 68 65  table to get the
1dca0 20 6e 65 77 20 72 6f 77 69 64 20 2a 2f 0a 20 20   new rowid */.  
1dcb0 69 6e 74 20 72 65 73 3b 20 20 20 20 20 20 20 20  int res;        
1dcc0 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74         /* Result
1dcd0 20 6f 66 20 61 6e 20 73 71 6c 69 74 65 33 42 74   of an sqlite3Bt
1dce0 72 65 65 4c 61 73 74 28 29 20 2a 2f 0a 20 20 69  reeLast() */.  i
1dcf0 6e 74 20 63 6e 74 3b 20 20 20 20 20 20 20 20 20  nt cnt;         
1dd00 20 20 20 20 20 20 2f 2a 20 43 6f 75 6e 74 65 72        /* Counter
1dd10 20 74 6f 20 6c 69 6d 69 74 20 74 68 65 20 6e 75   to limit the nu
1dd20 6d 62 65 72 20 6f 66 20 73 65 61 72 63 68 65 73  mber of searches
1dd30 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b   */.  Mem *pMem;
1dd40 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1dd50 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67  Register holding
1dd60 20 6c 61 72 67 65 73 74 20 72 6f 77 69 64 20 66   largest rowid f
1dd70 6f 72 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  or AUTOINCREMENT
1dd80 20 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d 65 20   */.  VdbeFrame 
1dd90 2a 70 46 72 61 6d 65 3b 20 20 20 20 20 2f 2a 20  *pFrame;     /* 
1dda0 52 6f 6f 74 20 66 72 61 6d 65 20 6f 66 20 56 44  Root frame of VD
1ddb0 42 45 20 2a 2f 0a 0a 20 20 76 20 3d 20 30 3b 0a  BE */..  v = 0;.
1ddc0 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 61 73 73    res = 0;.  ass
1ddd0 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
1dde0 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
1ddf0 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
1de00 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
1de10 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
1de20 3d 30 20 29 3b 0a 20 20 69 66 28 20 4e 45 56 45  =0 );.  if( NEVE
1de30 52 28 70 43 2d 3e 70 43 75 72 73 6f 72 3d 3d 30  R(pC->pCursor==0
1de40 29 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20  ) ){.    /* The 
1de50 7a 65 72 6f 20 69 6e 69 74 69 61 6c 69 7a 61 74  zero initializat
1de60 69 6f 6e 20 61 62 6f 76 65 20 69 73 20 61 6c 6c  ion above is all
1de70 20 74 68 61 74 20 69 73 20 6e 65 65 64 65 64 20   that is needed 
1de80 2a 2f 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  */.  }else{.    
1de90 2f 2a 20 54 68 65 20 6e 65 78 74 20 72 6f 77 69  /* The next rowi
1dea0 64 20 6f 72 20 72 65 63 6f 72 64 20 6e 75 6d 62  d or record numb
1deb0 65 72 20 28 64 69 66 66 65 72 65 6e 74 20 74 65  er (different te
1dec0 72 6d 73 20 66 6f 72 20 74 68 65 20 73 61 6d 65  rms for the same
1ded0 0a 20 20 20 20 2a 2a 20 74 68 69 6e 67 29 20 69  .    ** thing) i
1dee0 73 20 6f 62 74 61 69 6e 65 64 20 69 6e 20 61 20  s obtained in a 
1def0 74 77 6f 2d 73 74 65 70 20 61 6c 67 6f 72 69 74  two-step algorit
1df00 68 6d 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a  hm..    **.    *
1df10 2a 20 46 69 72 73 74 20 77 65 20 61 74 74 65 6d  * First we attem
1df20 70 74 20 74 6f 20 66 69 6e 64 20 74 68 65 20 6c  pt to find the l
1df30 61 72 67 65 73 74 20 65 78 69 73 74 69 6e 67 20  argest existing 
1df40 72 6f 77 69 64 20 61 6e 64 20 61 64 64 20 6f 6e  rowid and add on
1df50 65 0a 20 20 20 20 2a 2a 20 74 6f 20 74 68 61 74  e.    ** to that
1df60 2e 20 20 42 75 74 20 69 66 20 74 68 65 20 6c 61  .  But if the la
1df70 72 67 65 73 74 20 65 78 69 73 74 69 6e 67 20 72  rgest existing r
1df80 6f 77 69 64 20 69 73 20 61 6c 72 65 61 64 79 20  owid is already 
1df90 74 68 65 20 6d 61 78 69 6d 75 6d 0a 20 20 20 20  the maximum.    
1dfa0 2a 2a 20 70 6f 73 69 74 69 76 65 20 69 6e 74 65  ** positive inte
1dfb0 67 65 72 2c 20 77 65 20 68 61 76 65 20 74 6f 20  ger, we have to 
1dfc0 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  fall through to 
1dfd0 74 68 65 20 73 65 63 6f 6e 64 0a 20 20 20 20 2a  the second.    *
1dfe0 2a 20 70 72 6f 62 61 62 69 6c 69 73 74 69 63 20  * probabilistic 
1dff0 61 6c 67 6f 72 69 74 68 6d 0a 20 20 20 20 2a 2a  algorithm.    **
1e000 0a 20 20 20 20 2a 2a 20 54 68 65 20 73 65 63 6f  .    ** The seco
1e010 6e 64 20 61 6c 67 6f 72 69 74 68 6d 20 69 73 20  nd algorithm is 
1e020 74 6f 20 73 65 6c 65 63 74 20 61 20 72 6f 77 69  to select a rowi
1e030 64 20 61 74 20 72 61 6e 64 6f 6d 20 61 6e 64 20  d at random and 
1e040 73 65 65 20 69 66 0a 20 20 20 20 2a 2a 20 69 74  see if.    ** it
1e050 20 61 6c 72 65 61 64 79 20 65 78 69 73 74 73 20   already exists 
1e060 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 20 49  in the table.  I
1e070 66 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 78  f it does not ex
1e080 69 73 74 2c 20 77 65 20 68 61 76 65 0a 20 20 20  ist, we have.   
1e090 20 2a 2a 20 73 75 63 63 65 65 64 65 64 2e 20 20   ** succeeded.  
1e0a0 49 66 20 74 68 65 20 72 61 6e 64 6f 6d 20 72 6f  If the random ro
1e0b0 77 69 64 20 64 6f 65 73 20 65 78 69 73 74 2c 20  wid does exist, 
1e0c0 77 65 20 73 65 6c 65 63 74 20 61 20 6e 65 77 20  we select a new 
1e0d0 6f 6e 65 0a 20 20 20 20 2a 2a 20 61 6e 64 20 74  one.    ** and t
1e0e0 72 79 20 61 67 61 69 6e 2c 20 75 70 20 74 6f 20  ry again, up to 
1e0f0 31 30 30 20 74 69 6d 65 73 2e 0a 20 20 20 20 2a  100 times..    *
1e100 2f 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  /.    assert( pC
1e110 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 20  ->isTable );.   
1e120 20 63 6e 74 20 3d 20 30 3b 0a 0a 23 69 66 64 65   cnt = 0;..#ifde
1e130 66 20 53 51 4c 49 54 45 5f 33 32 42 49 54 5f 52  f SQLITE_32BIT_R
1e140 4f 57 49 44 0a 23 20 20 20 64 65 66 69 6e 65 20  OWID.#   define 
1e150 4d 41 58 5f 52 4f 57 49 44 20 30 78 37 66 66 66  MAX_ROWID 0x7fff
1e160 66 66 66 66 0a 23 65 6c 73 65 0a 20 20 20 20 2f  ffff.#else.    /
1e170 2a 20 53 6f 6d 65 20 63 6f 6d 70 69 6c 65 72 73  * Some compilers
1e180 20 63 6f 6d 70 6c 61 69 6e 20 61 62 6f 75 74 20   complain about 
1e190 63 6f 6e 73 74 61 6e 74 73 20 6f 66 20 74 68 65  constants of the
1e1a0 20 66 6f 72 6d 20 30 78 37 66 66 66 66 66 66 66   form 0x7fffffff
1e1b0 66 66 66 66 66 66 66 66 2e 0a 20 20 20 20 2a 2a  ffffffff..    **
1e1c0 20 4f 74 68 65 72 73 20 63 6f 6d 70 6c 61 69 6e   Others complain
1e1d0 20 61 62 6f 75 74 20 30 78 37 66 66 66 66 66 66   about 0x7ffffff
1e1e0 66 66 66 66 66 66 66 66 66 66 4c 4c 2e 20 20 54  ffffffffffLL.  T
1e1f0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63  he following mac
1e200 72 6f 20 73 65 65 6d 73 0a 20 20 20 20 2a 2a 20  ro seems.    ** 
1e210 74 6f 20 70 72 6f 76 69 64 65 20 74 68 65 20 63  to provide the c
1e220 6f 6e 73 74 61 6e 74 20 77 68 69 6c 65 20 6d 61  onstant while ma
1e230 6b 69 6e 67 20 61 6c 6c 20 63 6f 6d 70 69 6c 65  king all compile
1e240 72 73 20 68 61 70 70 79 2e 0a 20 20 20 20 2a 2f  rs happy..    */
1e250 0a 23 20 20 20 64 65 66 69 6e 65 20 4d 41 58 5f  .#   define MAX_
1e260 52 4f 57 49 44 20 20 28 69 36 34 29 28 20 28 28  ROWID  (i64)( ((
1e270 28 75 36 34 29 30 78 37 66 66 66 66 66 66 66 29  (u64)0x7fffffff)
1e280 3c 3c 33 32 29 20 7c 20 28 75 36 34 29 30 78 66  <<32) | (u64)0xf
1e290 66 66 66 66 66 66 66 20 29 0a 23 65 6e 64 69 66  fffffff ).#endif
1e2a0 0a 0a 20 20 20 20 69 66 28 20 21 70 43 2d 3e 75  ..    if( !pC->u
1e2b0 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20 29 7b  seRandomRowid ){
1e2c0 0a 20 20 20 20 20 20 76 20 3d 20 73 71 6c 69 74  .      v = sqlit
1e2d0 65 33 42 74 72 65 65 47 65 74 43 61 63 68 65 64  e3BtreeGetCached
1e2e0 52 6f 77 69 64 28 70 43 2d 3e 70 43 75 72 73 6f  Rowid(pC->pCurso
1e2f0 72 29 3b 0a 20 20 20 20 20 20 69 66 28 20 76 3d  r);.      if( v=
1e300 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63  =0 ){.        rc
1e310 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c   = sqlite3BtreeL
1e320 61 73 74 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c  ast(pC->pCursor,
1e330 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20 20 20   &res);.        
1e340 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
1e350 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 67  K ){.          g
1e360 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
1e370 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20  _error;.        
1e380 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20 72 65  }.        if( re
1e390 73 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 76  s ){.          v
1e3a0 20 3d 20 31 3b 20 20 20 2f 2a 20 49 4d 50 3a 20   = 1;   /* IMP: 
1e3b0 52 2d 36 31 39 31 34 2d 34 38 30 37 34 20 2a 2f  R-61914-48074 */
1e3c0 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  .        }else{.
1e3d0 20 20 20 20 20 20 20 20 20 20 61 73 73 65 72 74            assert
1e3e0 28 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75  ( sqlite3BtreeCu
1e3f0 72 73 6f 72 49 73 56 61 6c 69 64 28 70 43 2d 3e  rsorIsValid(pC->
1e400 70 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20  pCursor) );.    
1e410 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
1e420 65 33 42 74 72 65 65 4b 65 79 53 69 7a 65 28 70  e3BtreeKeySize(p
1e430 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 76 29 3b  C->pCursor, &v);
1e440 0a 20 20 20 20 20 20 20 20 20 20 61 73 73 65 72  .          asser
1e450 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  t( rc==SQLITE_OK
1e460 20 29 3b 20 20 20 2f 2a 20 43 61 6e 6e 6f 74 20   );   /* Cannot 
1e470 66 61 69 6c 20 66 6f 6c 6c 6f 77 69 6e 67 20 42  fail following B
1e480 74 72 65 65 4c 61 73 74 28 29 20 2a 2f 0a 20 20  treeLast() */.  
1e490 20 20 20 20 20 20 20 20 69 66 28 20 76 3d 3d 4d          if( v==M
1e4a0 41 58 5f 52 4f 57 49 44 20 29 7b 0a 20 20 20 20  AX_ROWID ){.    
1e4b0 20 20 20 20 20 20 20 20 70 43 2d 3e 75 73 65 52          pC->useR
1e4c0 61 6e 64 6f 6d 52 6f 77 69 64 20 3d 20 31 3b 0a  andomRowid = 1;.
1e4d0 20 20 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b            }else{
1e4e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 76 2b 2b  .            v++
1e4f0 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 32 39  ;   /* IMP: R-29
1e500 35 33 38 2d 33 34 39 38 37 20 2a 2f 0a 20 20 20  538-34987 */.   
1e510 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
1e520 20 7d 0a 20 20 20 20 20 20 7d 0a 0a 23 69 66 6e   }.      }..#ifn
1e530 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
1e540 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 20 20  AUTOINCREMENT.  
1e550 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 33 20      if( pOp->p3 
1e560 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 41 73  ){.        /* As
1e570 73 65 72 74 20 74 68 61 74 20 50 33 20 69 73 20  sert that P3 is 
1e580 61 20 76 61 6c 69 64 20 6d 65 6d 6f 72 79 20 63  a valid memory c
1e590 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20  ell. */.        
1e5a0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e  assert( pOp->p3>
1e5b0 30 20 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28  0 );.        if(
1e5c0 20 70 2d 3e 70 46 72 61 6d 65 20 29 7b 0a 20 20   p->pFrame ){.  
1e5d0 20 20 20 20 20 20 20 20 66 6f 72 28 70 46 72 61          for(pFra
1e5e0 6d 65 3d 70 2d 3e 70 46 72 61 6d 65 3b 20 70 46  me=p->pFrame; pF
1e5f0 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 3b 20 70  rame->pParent; p
1e600 46 72 61 6d 65 3d 70 46 72 61 6d 65 2d 3e 70 50  Frame=pFrame->pP
1e610 61 72 65 6e 74 29 3b 0a 20 20 20 20 20 20 20 20  arent);.        
1e620 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68 61 74    /* Assert that
1e630 20 50 33 20 69 73 20 61 20 76 61 6c 69 64 20 6d   P3 is a valid m
1e640 65 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a 20  emory cell. */. 
1e650 20 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28           assert(
1e660 20 70 4f 70 2d 3e 70 33 3c 3d 70 46 72 61 6d 65   pOp->p3<=pFrame
1e670 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20  ->nMem );.      
1e680 20 20 20 20 70 4d 65 6d 20 3d 20 26 70 46 72 61      pMem = &pFra
1e690 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33  me->aMem[pOp->p3
1e6a0 5d 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65  ];.        }else
1e6b0 7b 0a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41  {.          /* A
1e6c0 73 73 65 72 74 20 74 68 61 74 20 50 33 20 69 73  ssert that P3 is
1e6d0 20 61 20 76 61 6c 69 64 20 6d 65 6d 6f 72 79 20   a valid memory 
1e6e0 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 20  cell. */.       
1e6f0 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
1e700 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20  p3<=p->nMem );. 
1e710 20 20 20 20 20 20 20 20 20 70 4d 65 6d 20 3d 20           pMem = 
1e720 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
1e730 20 20 20 20 20 20 20 20 20 20 6d 65 6d 41 62 6f            memAbo
1e740 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4d  utToChange(p, pM
1e750 65 6d 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  em);.        }. 
1e760 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d         assert( m
1e770 65 6d 49 73 56 61 6c 69 64 28 70 4d 65 6d 29 20  emIsValid(pMem) 
1e780 29 3b 0a 0a 20 20 20 20 20 20 20 20 52 45 47 49  );..        REGI
1e790 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
1e7a0 70 33 2c 20 70 4d 65 6d 29 3b 0a 20 20 20 20 20  p3, pMem);.     
1e7b0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
1e7c0 6d 49 6e 74 65 67 65 72 69 66 79 28 70 4d 65 6d  mIntegerify(pMem
1e7d0 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  );.        asser
1e7e0 74 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20  t( (pMem->flags 
1e7f0 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b  & MEM_Int)!=0 );
1e800 20 20 2f 2a 20 6d 65 6d 28 50 33 29 20 68 6f 6c    /* mem(P3) hol
1e810 64 73 20 61 6e 20 69 6e 74 65 67 65 72 20 2a 2f  ds an integer */
1e820 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 4d 65  .        if( pMe
1e830 6d 2d 3e 75 2e 69 3d 3d 4d 41 58 5f 52 4f 57 49  m->u.i==MAX_ROWI
1e840 44 20 7c 7c 20 70 43 2d 3e 75 73 65 52 61 6e 64  D || pC->useRand
1e850 6f 6d 52 6f 77 69 64 20 29 7b 0a 20 20 20 20 20  omRowid ){.     
1e860 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
1e870 5f 46 55 4c 4c 3b 20 20 20 2f 2a 20 49 4d 50 3a  _FULL;   /* IMP:
1e880 20 52 2d 31 32 32 37 35 2d 36 31 33 33 38 20 2a   R-12275-61338 *
1e890 2f 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f  /.          goto
1e8a0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
1e8b0 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  ror;.        }. 
1e8c0 20 20 20 20 20 20 20 69 66 28 20 76 3c 70 4d 65         if( v<pMe
1e8d0 6d 2d 3e 75 2e 69 2b 31 20 29 7b 0a 20 20 20 20  m->u.i+1 ){.    
1e8e0 20 20 20 20 20 20 76 20 3d 20 70 4d 65 6d 2d 3e        v = pMem->
1e8f0 75 2e 69 20 2b 20 31 3b 0a 20 20 20 20 20 20 20  u.i + 1;.       
1e900 20 7d 0a 20 20 20 20 20 20 20 20 70 4d 65 6d 2d   }.        pMem-
1e910 3e 75 2e 69 20 3d 20 76 3b 0a 20 20 20 20 20 20  >u.i = v;.      
1e920 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 20 20  }.#endif..      
1e930 73 71 6c 69 74 65 33 42 74 72 65 65 53 65 74 43  sqlite3BtreeSetC
1e940 61 63 68 65 64 52 6f 77 69 64 28 70 43 2d 3e 70  achedRowid(pC->p
1e950 43 75 72 73 6f 72 2c 20 76 3c 4d 41 58 5f 52 4f  Cursor, v<MAX_RO
1e960 57 49 44 20 3f 20 76 2b 31 20 3a 20 30 29 3b 0a  WID ? v+1 : 0);.
1e970 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70 43      }.    if( pC
1e980 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64  ->useRandomRowid
1e990 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 4d 50   ){.      /* IMP
1e9a0 4c 45 4d 45 4e 54 41 54 49 4f 4e 2d 4f 46 3a 20  LEMENTATION-OF: 
1e9b0 52 2d 30 37 36 37 37 2d 34 31 38 38 31 20 49 66  R-07677-41881 If
1e9c0 20 74 68 65 20 6c 61 72 67 65 73 74 20 52 4f 57   the largest ROW
1e9d0 49 44 20 69 73 20 65 71 75 61 6c 20 74 6f 20 74  ID is equal to t
1e9e0 68 65 0a 20 20 20 20 20 20 2a 2a 20 6c 61 72 67  he.      ** larg
1e9f0 65 73 74 20 70 6f 73 73 69 62 6c 65 20 69 6e 74  est possible int
1ea00 65 67 65 72 20 28 39 32 32 33 33 37 32 30 33 36  eger (9223372036
1ea10 38 35 34 37 37 35 38 30 37 29 20 74 68 65 6e 20  854775807) then 
1ea20 74 68 65 20 64 61 74 61 62 61 73 65 0a 20 20 20  the database.   
1ea30 20 20 20 2a 2a 20 65 6e 67 69 6e 65 20 73 74 61     ** engine sta
1ea40 72 74 73 20 70 69 63 6b 69 6e 67 20 70 6f 73 69  rts picking posi
1ea50 74 69 76 65 20 63 61 6e 64 69 64 61 74 65 20 52  tive candidate R
1ea60 4f 57 49 44 73 20 61 74 20 72 61 6e 64 6f 6d 20  OWIDs at random 
1ea70 75 6e 74 69 6c 0a 20 20 20 20 20 20 2a 2a 20 69  until.      ** i
1ea80 74 20 66 69 6e 64 73 20 6f 6e 65 20 74 68 61 74  t finds one that
1ea90 20 69 73 20 6e 6f 74 20 70 72 65 76 69 6f 75 73   is not previous
1eaa0 6c 79 20 75 73 65 64 2e 20 2a 2f 0a 20 20 20 20  ly used. */.    
1eab0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1eac0 33 3d 3d 30 20 29 3b 20 20 2f 2a 20 57 65 20 63  3==0 );  /* We c
1ead0 61 6e 6e 6f 74 20 62 65 20 69 6e 20 72 61 6e 64  annot be in rand
1eae0 6f 6d 20 72 6f 77 69 64 20 6d 6f 64 65 20 69 66  om rowid mode if
1eaf0 20 74 68 69 73 20 69 73 0a 20 20 20 20 20 20 20   this is.       
1eb00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eb10 20 20 20 20 20 20 2a 2a 20 61 6e 20 41 55 54 4f        ** an AUTO
1eb20 49 4e 43 52 45 4d 45 4e 54 20 74 61 62 6c 65 2e  INCREMENT table.
1eb30 20 2a 2f 0a 20 20 20 20 20 20 2f 2a 20 6f 6e 20   */.      /* on 
1eb40 74 68 65 20 66 69 72 73 74 20 61 74 74 65 6d 70  the first attemp
1eb50 74 2c 20 73 69 6d 70 6c 79 20 64 6f 20 6f 6e 65  t, simply do one
1eb60 20 6d 6f 72 65 20 74 68 61 6e 20 70 72 65 76 69   more than previ
1eb70 6f 75 73 20 2a 2f 0a 20 20 20 20 20 20 76 20 3d  ous */.      v =
1eb80 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 0a   db->lastRowid;.
1eb90 20 20 20 20 20 20 76 20 26 3d 20 28 4d 41 58 5f        v &= (MAX_
1eba0 52 4f 57 49 44 3e 3e 31 29 3b 20 2f 2a 20 65 6e  ROWID>>1); /* en
1ebb0 73 75 72 65 20 64 6f 65 73 6e 27 74 20 67 6f 20  sure doesn't go 
1ebc0 6e 65 67 61 74 69 76 65 20 2a 2f 0a 20 20 20 20  negative */.    
1ebd0 20 20 76 2b 2b 3b 20 2f 2a 20 65 6e 73 75 72 65    v++; /* ensure
1ebe0 20 6e 6f 6e 2d 7a 65 72 6f 20 2a 2f 0a 20 20 20   non-zero */.   
1ebf0 20 20 20 63 6e 74 20 3d 20 30 3b 0a 20 20 20 20     cnt = 0;.    
1ec00 20 20 77 68 69 6c 65 28 20 20 20 28 28 72 63 20    while(   ((rc 
1ec10 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f  = sqlite3BtreeMo
1ec20 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d  vetoUnpacked(pC-
1ec30 3e 70 43 75 72 73 6f 72 2c 20 30 2c 20 28 75 36  >pCursor, 0, (u6
1ec40 34 29 76 2c 0a 20 20 20 20 20 20 20 20 20 20 20  4)v,.           
1ec50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ec60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ec70 20 20 20 20 20 20 30 2c 20 26 72 65 73 29 29 3d        0, &res))=
1ec80 3d 53 51 4c 49 54 45 5f 4f 4b 29 0a 20 20 20 20  =SQLITE_OK).    
1ec90 20 20 20 20 20 20 20 20 26 26 20 28 72 65 73 3d          && (res=
1eca0 3d 30 29 0a 20 20 20 20 20 20 20 20 20 20 20 20  =0).            
1ecb0 26 26 20 28 2b 2b 63 6e 74 3c 31 30 30 29 29 7b  && (++cnt<100)){
1ecc0 0a 20 20 20 20 20 20 20 20 2f 2a 20 63 6f 6c 6c  .        /* coll
1ecd0 69 73 69 6f 6e 20 2d 20 74 72 79 20 61 6e 6f 74  ision - try anot
1ece0 68 65 72 20 72 61 6e 64 6f 6d 20 72 6f 77 69 64  her random rowid
1ecf0 20 2a 2f 0a 20 20 20 20 20 20 20 20 73 71 6c 69   */.        sqli
1ed00 74 65 33 5f 72 61 6e 64 6f 6d 6e 65 73 73 28 73  te3_randomness(s
1ed10 69 7a 65 6f 66 28 76 29 2c 20 26 76 29 3b 0a 20  izeof(v), &v);. 
1ed20 20 20 20 20 20 20 20 69 66 28 20 63 6e 74 3c 35         if( cnt<5
1ed30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 2f 2a   ){.          /*
1ed40 20 74 72 79 20 22 73 6d 61 6c 6c 22 20 72 61 6e   try "small" ran
1ed50 64 6f 6d 20 72 6f 77 69 64 73 20 66 6f 72 20 74  dom rowids for t
1ed60 68 65 20 69 6e 69 74 69 61 6c 20 61 74 74 65 6d  he initial attem
1ed70 70 74 73 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  pts */.         
1ed80 20 76 20 26 3d 20 30 78 66 66 66 66 66 66 3b 0a   v &= 0xffffff;.
1ed90 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20          }else{. 
1eda0 20 20 20 20 20 20 20 20 20 76 20 26 3d 20 28 4d           v &= (M
1edb0 41 58 5f 52 4f 57 49 44 3e 3e 31 29 3b 20 2f 2a  AX_ROWID>>1); /*
1edc0 20 65 6e 73 75 72 65 20 64 6f 65 73 6e 27 74 20   ensure doesn't 
1edd0 67 6f 20 6e 65 67 61 74 69 76 65 20 2a 2f 0a 20  go negative */. 
1ede0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
1edf0 20 76 2b 2b 3b 20 2f 2a 20 65 6e 73 75 72 65 20   v++; /* ensure 
1ee00 6e 6f 6e 2d 7a 65 72 6f 20 2a 2f 0a 20 20 20 20  non-zero */.    
1ee10 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 72 63    }.      if( rc
1ee20 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 72  ==SQLITE_OK && r
1ee30 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  es==0 ){.       
1ee40 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 46 55 4c   rc = SQLITE_FUL
1ee50 4c 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 33  L;   /* IMP: R-3
1ee60 38 32 31 39 2d 35 33 30 30 32 20 2a 2f 0a 20 20  8219-53002 */.  
1ee70 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74        goto abort
1ee80 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
1ee90 20 20 20 20 20 7d 0a 20 20 20 20 20 20 61 73 73       }.      ass
1eea0 65 72 74 28 20 76 3e 30 20 29 3b 20 20 2f 2a 20  ert( v>0 );  /* 
1eeb0 45 56 3a 20 52 2d 34 30 38 31 32 2d 30 33 35 37  EV: R-40812-0357
1eec0 30 20 2a 2f 0a 20 20 20 20 7d 0a 20 20 20 20 70  0 */.    }.    p
1eed0 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20  C->rowidIsValid 
1eee0 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e 64 65 66  = 0;.    pC->def
1eef0 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b  erredMoveto = 0;
1ef00 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74  .    pC->cacheSt
1ef10 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
1ef20 4c 45 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e  LE;.  }.  pOut->
1ef30 75 2e 69 20 3d 20 76 3b 0a 20 20 62 72 65 61 6b  u.i = v;.  break
1ef40 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
1ef50 49 6e 73 65 72 74 20 50 31 20 50 32 20 50 33 20  Insert P1 P2 P3 
1ef60 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 57 72 69 74  P4 P5.**.** Writ
1ef70 65 20 61 6e 20 65 6e 74 72 79 20 69 6e 74 6f 20  e an entry into 
1ef80 74 68 65 20 74 61 62 6c 65 20 6f 66 20 63 75 72  the table of cur
1ef90 73 6f 72 20 50 31 2e 20 20 41 20 6e 65 77 20 65  sor P1.  A new e
1efa0 6e 74 72 79 20 69 73 0a 2a 2a 20 63 72 65 61 74  ntry is.** creat
1efb0 65 64 20 69 66 20 69 74 20 64 6f 65 73 6e 27 74  ed if it doesn't
1efc0 20 61 6c 72 65 61 64 79 20 65 78 69 73 74 20 6f   already exist o
1efd0 72 20 74 68 65 20 64 61 74 61 20 66 6f 72 20 61  r the data for a
1efe0 6e 20 65 78 69 73 74 69 6e 67 0a 2a 2a 20 65 6e  n existing.** en
1eff0 74 72 79 20 69 73 20 6f 76 65 72 77 72 69 74 74  try is overwritt
1f000 65 6e 2e 20 20 54 68 65 20 64 61 74 61 20 69 73  en.  The data is
1f010 20 74 68 65 20 76 61 6c 75 65 20 4d 45 4d 5f 42   the value MEM_B
1f020 6c 6f 62 20 73 74 6f 72 65 64 20 69 6e 20 72 65  lob stored in re
1f030 67 69 73 74 65 72 0a 2a 2a 20 6e 75 6d 62 65 72  gister.** number
1f040 20 50 32 2e 20 54 68 65 20 6b 65 79 20 69 73 20   P2. The key is 
1f050 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74  stored in regist
1f060 65 72 20 50 33 2e 20 54 68 65 20 6b 65 79 20 6d  er P3. The key m
1f070 75 73 74 0a 2a 2a 20 62 65 20 61 20 4d 45 4d 5f  ust.** be a MEM_
1f080 49 6e 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  Int..**.** If th
1f090 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45  e OPFLAG_NCHANGE
1f0a0 20 66 6c 61 67 20 6f 66 20 50 35 20 69 73 20 73   flag of P5 is s
1f0b0 65 74 2c 20 74 68 65 6e 20 74 68 65 20 72 6f 77  et, then the row
1f0c0 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 20 69 73   change count is
1f0d0 0a 2a 2a 20 69 6e 63 72 65 6d 65 6e 74 65 64 20  .** incremented 
1f0e0 28 6f 74 68 65 72 77 69 73 65 20 6e 6f 74 29 2e  (otherwise not).
1f0f0 20 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f    If the OPFLAG_
1f100 4c 41 53 54 52 4f 57 49 44 20 66 6c 61 67 20 6f  LASTROWID flag o
1f110 66 20 50 35 20 69 73 20 73 65 74 2c 0a 2a 2a 20  f P5 is set,.** 
1f120 74 68 65 6e 20 72 6f 77 69 64 20 69 73 20 73 74  then rowid is st
1f130 6f 72 65 64 20 66 6f 72 20 73 75 62 73 65 71 75  ored for subsequ
1f140 65 6e 74 20 72 65 74 75 72 6e 20 62 79 20 74 68  ent return by th
1f150 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 6c 61 73  e.** sqlite3_las
1f160 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 29  t_insert_rowid()
1f170 20 66 75 6e 63 74 69 6f 6e 20 28 6f 74 68 65 72   function (other
1f180 77 69 73 65 20 69 74 20 69 73 20 75 6e 6d 6f 64  wise it is unmod
1f190 69 66 69 65 64 29 2e 0a 2a 2a 0a 2a 2a 20 49 66  ified)..**.** If
1f1a0 20 74 68 65 20 4f 50 46 4c 41 47 5f 55 53 45 53   the OPFLAG_USES
1f1b0 45 45 4b 52 45 53 55 4c 54 20 66 6c 61 67 20 6f  EEKRESULT flag o
1f1c0 66 20 50 35 20 69 73 20 73 65 74 20 61 6e 64 20  f P5 is set and 
1f1d0 69 66 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  if the result of
1f1e0 0a 2a 2a 20 74 68 65 20 6c 61 73 74 20 73 65 65  .** the last see
1f1f0 6b 20 6f 70 65 72 61 74 69 6f 6e 20 28 4f 50 5f  k operation (OP_
1f200 4e 6f 74 45 78 69 73 74 73 29 20 77 61 73 20 61  NotExists) was a
1f210 20 73 75 63 63 65 73 73 2c 20 74 68 65 6e 20 74   success, then t
1f220 68 69 73 0a 2a 2a 20 6f 70 65 72 61 74 69 6f 6e  his.** operation
1f230 20 77 69 6c 6c 20 6e 6f 74 20 61 74 74 65 6d 70   will not attemp
1f240 74 20 74 6f 20 66 69 6e 64 20 74 68 65 20 61 70  t to find the ap
1f250 70 72 6f 70 72 69 61 74 65 20 72 6f 77 20 62 65  propriate row be
1f260 66 6f 72 65 20 64 6f 69 6e 67 0a 2a 2a 20 74 68  fore doing.** th
1f270 65 20 69 6e 73 65 72 74 20 62 75 74 20 77 69 6c  e insert but wil
1f280 6c 20 69 6e 73 74 65 61 64 20 6f 76 65 72 77 72  l instead overwr
1f290 69 74 65 20 74 68 65 20 72 6f 77 20 74 68 61 74  ite the row that
1f2a0 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a 2a   the cursor is.*
1f2b0 2a 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e  * currently poin
1f2c0 74 69 6e 67 20 74 6f 2e 20 20 50 72 65 73 75 6d  ting to.  Presum
1f2d0 61 62 6c 79 2c 20 74 68 65 20 70 72 69 6f 72 20  ably, the prior 
1f2e0 4f 50 5f 4e 6f 74 45 78 69 73 74 73 20 6f 70 63  OP_NotExists opc
1f2f0 6f 64 65 0a 2a 2a 20 68 61 73 20 61 6c 72 65 61  ode.** has alrea
1f300 64 79 20 70 6f 73 69 74 69 6f 6e 65 64 20 74 68  dy positioned th
1f310 65 20 63 75 72 73 6f 72 20 63 6f 72 72 65 63 74  e cursor correct
1f320 6c 79 2e 20 20 54 68 69 73 20 69 73 20 61 6e 20  ly.  This is an 
1f330 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 0a 2a 2a 20  optimization.** 
1f340 74 68 61 74 20 62 6f 6f 73 74 73 20 70 65 72 66  that boosts perf
1f350 6f 72 6d 61 6e 63 65 20 62 79 20 61 76 6f 69 64  ormance by avoid
1f360 69 6e 67 20 72 65 64 75 6e 64 61 6e 74 20 73 65  ing redundant se
1f370 65 6b 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  eks..**.** If th
1f380 65 20 4f 50 46 4c 41 47 5f 49 53 55 50 44 41 54  e OPFLAG_ISUPDAT
1f390 45 20 66 6c 61 67 20 69 73 20 73 65 74 2c 20 74  E flag is set, t
1f3a0 68 65 6e 20 74 68 69 73 20 6f 70 63 6f 64 65 20  hen this opcode 
1f3b0 69 73 20 70 61 72 74 20 6f 66 20 61 6e 0a 2a 2a  is part of an.**
1f3c0 20 55 50 44 41 54 45 20 6f 70 65 72 61 74 69 6f   UPDATE operatio
1f3d0 6e 2e 20 20 4f 74 68 65 72 77 69 73 65 20 28 69  n.  Otherwise (i
1f3e0 66 20 74 68 65 20 66 6c 61 67 20 69 73 20 63 6c  f the flag is cl
1f3f0 65 61 72 29 20 74 68 65 6e 20 74 68 69 73 20 6f  ear) then this o
1f400 70 63 6f 64 65 0a 2a 2a 20 69 73 20 70 61 72 74  pcode.** is part
1f410 20 6f 66 20 61 6e 20 49 4e 53 45 52 54 20 6f 70   of an INSERT op
1f420 65 72 61 74 69 6f 6e 2e 20 20 54 68 65 20 64 69  eration.  The di
1f430 66 66 65 72 65 6e 63 65 20 69 73 20 6f 6e 6c 79  fference is only
1f440 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 0a 2a 2a   important to.**
1f450 20 74 68 65 20 75 70 64 61 74 65 20 68 6f 6f 6b   the update hook
1f460 2e 0a 2a 2a 0a 2a 2a 20 50 61 72 61 6d 65 74 65  ..**.** Paramete
1f470 72 20 50 34 20 6d 61 79 20 70 6f 69 6e 74 20 74  r P4 may point t
1f480 6f 20 61 20 73 74 72 69 6e 67 20 63 6f 6e 74 61  o a string conta
1f490 69 6e 69 6e 67 20 74 68 65 20 74 61 62 6c 65 2d  ining the table-
1f4a0 6e 61 6d 65 2c 20 6f 72 0a 2a 2a 20 6d 61 79 20  name, or.** may 
1f4b0 62 65 20 4e 55 4c 4c 2e 20 49 66 20 69 74 20 69  be NULL. If it i
1f4c0 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68 65 6e  s not NULL, then
1f4d0 20 74 68 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b   the update-hook
1f4e0 20 0a 2a 2a 20 28 73 71 6c 69 74 65 33 2e 78 55   .** (sqlite3.xU
1f4f0 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 29 20 69  pdateCallback) i
1f500 73 20 69 6e 76 6f 6b 65 64 20 66 6f 6c 6c 6f 77  s invoked follow
1f510 69 6e 67 20 61 20 73 75 63 63 65 73 73 66 75 6c  ing a successful
1f520 20 69 6e 73 65 72 74 2e 0a 2a 2a 0a 2a 2a 20 28   insert..**.** (
1f530 57 41 52 4e 49 4e 47 2f 54 4f 44 4f 3a 20 49 66  WARNING/TODO: If
1f540 20 50 31 20 69 73 20 61 20 70 73 65 75 64 6f 2d   P1 is a pseudo-
1f550 63 75 72 73 6f 72 20 61 6e 64 20 50 32 20 69 73  cursor and P2 is
1f560 20 64 79 6e 61 6d 69 63 61 6c 6c 79 0a 2a 2a 20   dynamically.** 
1f570 61 6c 6c 6f 63 61 74 65 64 2c 20 74 68 65 6e 20  allocated, then 
1f580 6f 77 6e 65 72 73 68 69 70 20 6f 66 20 50 32 20  ownership of P2 
1f590 69 73 20 74 72 61 6e 73 66 65 72 72 65 64 20 74  is transferred t
1f5a0 6f 20 74 68 65 20 70 73 65 75 64 6f 2d 63 75 72  o the pseudo-cur
1f5b0 73 6f 72 0a 2a 2a 20 61 6e 64 20 72 65 67 69 73  sor.** and regis
1f5c0 74 65 72 20 50 32 20 62 65 63 6f 6d 65 73 20 65  ter P2 becomes e
1f5d0 70 68 65 6d 65 72 61 6c 2e 20 20 49 66 20 74 68  phemeral.  If th
1f5e0 65 20 63 75 72 73 6f 72 20 69 73 20 63 68 61 6e  e cursor is chan
1f5f0 67 65 64 2c 20 74 68 65 0a 2a 2a 20 76 61 6c 75  ged, the.** valu
1f600 65 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 32  e of register P2
1f610 20 77 69 6c 6c 20 74 68 65 6e 20 63 68 61 6e 67   will then chang
1f620 65 2e 20 20 4d 61 6b 65 20 73 75 72 65 20 74 68  e.  Make sure th
1f630 69 73 20 64 6f 65 73 20 6e 6f 74 0a 2a 2a 20 63  is does not.** c
1f640 61 75 73 65 20 61 6e 79 20 70 72 6f 62 6c 65 6d  ause any problem
1f650 73 2e 29 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69  s.).**.** This i
1f660 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 6c 79 20  nstruction only 
1f670 77 6f 72 6b 73 20 6f 6e 20 74 61 62 6c 65 73 2e  works on tables.
1f680 20 20 54 68 65 20 65 71 75 69 76 61 6c 65 6e 74    The equivalent
1f690 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20   instruction.** 
1f6a0 66 6f 72 20 69 6e 64 69 63 65 73 20 69 73 20 4f  for indices is O
1f6b0 50 5f 49 64 78 49 6e 73 65 72 74 2e 0a 2a 2f 0a  P_IdxInsert..*/.
1f6c0 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 73 65 72  /* Opcode: Inser
1f6d0 74 49 6e 74 20 50 31 20 50 32 20 50 33 20 50 34  tInt P1 P2 P3 P4
1f6e0 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77   P5.**.** This w
1f6f0 6f 72 6b 73 20 65 78 61 63 74 6c 79 20 6c 69 6b  orks exactly lik
1f700 65 20 4f 50 5f 49 6e 73 65 72 74 20 65 78 63 65  e OP_Insert exce
1f710 70 74 20 74 68 61 74 20 74 68 65 20 6b 65 79 20  pt that the key 
1f720 69 73 20 74 68 65 0a 2a 2a 20 69 6e 74 65 67 65  is the.** intege
1f730 72 20 76 61 6c 75 65 20 50 33 2c 20 6e 6f 74 20  r value P3, not 
1f740 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
1f750 20 69 6e 74 65 67 65 72 20 73 74 6f 72 65 64 20   integer stored 
1f760 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  in register P3..
1f770 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 73 65 72  */.case OP_Inser
1f780 74 3a 20 0a 63 61 73 65 20 4f 50 5f 49 6e 73 65  t: .case OP_Inse
1f790 72 74 49 6e 74 3a 20 7b 0a 20 20 4d 65 6d 20 2a  rtInt: {.  Mem *
1f7a0 70 44 61 74 61 3b 20 20 20 20 20 20 20 2f 2a 20  pData;       /* 
1f7b0 4d 45 4d 20 63 65 6c 6c 20 68 6f 6c 64 69 6e 67  MEM cell holding
1f7c0 20 64 61 74 61 20 66 6f 72 20 74 68 65 20 72 65   data for the re
1f7d0 63 6f 72 64 20 74 6f 20 62 65 20 69 6e 73 65 72  cord to be inser
1f7e0 74 65 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4b  ted */.  Mem *pK
1f7f0 65 79 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 45  ey;        /* ME
1f800 4d 20 63 65 6c 6c 20 68 6f 6c 64 69 6e 67 20 6b  M cell holding k
1f810 65 79 20 20 66 6f 72 20 74 68 65 20 72 65 63 6f  ey  for the reco
1f820 72 64 20 2a 2f 0a 20 20 69 36 34 20 69 4b 65 79  rd */.  i64 iKey
1f830 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  ;         /* The
1f840 20 69 6e 74 65 67 65 72 20 52 4f 57 49 44 20 6f   integer ROWID o
1f850 72 20 6b 65 79 20 66 6f 72 20 74 68 65 20 72 65  r key for the re
1f860 63 6f 72 64 20 74 6f 20 62 65 20 69 6e 73 65 72  cord to be inser
1f870 74 65 64 20 2a 2f 0a 20 20 56 64 62 65 43 75 72  ted */.  VdbeCur
1f880 73 6f 72 20 2a 70 43 3b 20 20 20 2f 2a 20 43 75  sor *pC;   /* Cu
1f890 72 73 6f 72 20 74 6f 20 74 61 62 6c 65 20 69 6e  rsor to table in
1f8a0 74 6f 20 77 68 69 63 68 20 69 6e 73 65 72 74 20  to which insert 
1f8b0 69 73 20 77 72 69 74 74 65 6e 20 2a 2f 0a 20 20  is written */.  
1f8c0 69 6e 74 20 6e 5a 65 72 6f 3b 20 20 20 20 20 20  int nZero;      
1f8d0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 7a    /* Number of z
1f8e0 65 72 6f 2d 62 79 74 65 73 20 74 6f 20 61 70 70  ero-bytes to app
1f8f0 65 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 73 65 65  end */.  int see
1f900 6b 52 65 73 75 6c 74 3b 20 20 20 2f 2a 20 52 65  kResult;   /* Re
1f910 73 75 6c 74 20 6f 66 20 70 72 69 6f 72 20 73 65  sult of prior se
1f920 65 6b 20 6f 72 20 30 20 69 66 20 6e 6f 20 55 53  ek or 0 if no US
1f930 45 53 45 45 4b 52 45 53 55 4c 54 20 66 6c 61 67  ESEEKRESULT flag
1f940 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
1f950 20 2a 7a 44 62 3b 20 20 2f 2a 20 64 61 74 61 62   *zDb;  /* datab
1f960 61 73 65 20 6e 61 6d 65 20 2d 20 75 73 65 64 20  ase name - used 
1f970 62 79 20 74 68 65 20 75 70 64 61 74 65 20 68 6f  by the update ho
1f980 6f 6b 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  ok */.  const ch
1f990 61 72 20 2a 7a 54 62 6c 3b 20 2f 2a 20 54 61 62  ar *zTbl; /* Tab
1f9a0 6c 65 20 6e 61 6d 65 20 2d 20 75 73 65 64 20 62  le name - used b
1f9b0 79 20 74 68 65 20 6f 70 64 61 74 65 20 68 6f 6f  y the opdate hoo
1f9c0 6b 20 2a 2f 0a 20 20 69 6e 74 20 6f 70 3b 20 20  k */.  int op;  
1f9d0 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 70 63 6f           /* Opco
1f9e0 64 65 20 66 6f 72 20 75 70 64 61 74 65 20 68 6f  de for update ho
1f9f0 6f 6b 3a 20 53 51 4c 49 54 45 5f 55 50 44 41 54  ok: SQLITE_UPDAT
1fa00 45 20 6f 72 20 53 51 4c 49 54 45 5f 49 4e 53 45  E or SQLITE_INSE
1fa10 52 54 20 2a 2f 0a 0a 20 20 70 44 61 74 61 20 3d  RT */..  pData =
1fa20 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
1fa30 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1fa40 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
1fa50 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
1fa60 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
1fa70 6c 69 64 28 70 44 61 74 61 29 20 29 3b 0a 20 20  lid(pData) );.  
1fa80 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
1fa90 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
1faa0 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73  ( pC!=0 );.  ass
1fab0 65 72 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72  ert( pC->pCursor
1fac0 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
1fad0 20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65   pC->pseudoTable
1fae0 52 65 67 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  Reg==0 );.  asse
1faf0 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20  rt( pC->isTable 
1fb00 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52  );.  REGISTER_TR
1fb10 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 44 61  ACE(pOp->p2, pDa
1fb20 74 61 29 3b 0a 0a 20 20 69 66 28 20 70 4f 70 2d  ta);..  if( pOp-
1fb30 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 6e 73 65  >opcode==OP_Inse
1fb40 72 74 20 29 7b 0a 20 20 20 20 70 4b 65 79 20 3d  rt ){.    pKey =
1fb50 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
1fb60 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4b 65  .    assert( pKe
1fb70 79 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  y->flags & MEM_I
1fb80 6e 74 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  nt );.    assert
1fb90 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 4b 65  ( memIsValid(pKe
1fba0 79 29 20 29 3b 0a 20 20 20 20 52 45 47 49 53 54  y) );.    REGIST
1fbb0 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33  ER_TRACE(pOp->p3
1fbc0 2c 20 70 4b 65 79 29 3b 0a 20 20 20 20 69 4b 65  , pKey);.    iKe
1fbd0 79 20 3d 20 70 4b 65 79 2d 3e 75 2e 69 3b 0a 20  y = pKey->u.i;. 
1fbe0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65   }else{.    asse
1fbf0 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  rt( pOp->opcode=
1fc00 3d 4f 50 5f 49 6e 73 65 72 74 49 6e 74 20 29 3b  =OP_InsertInt );
1fc10 0a 20 20 20 20 69 4b 65 79 20 3d 20 70 4f 70 2d  .    iKey = pOp-
1fc20 3e 70 33 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20  >p3;.  }..  if( 
1fc30 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47  pOp->p5 & OPFLAG
1fc40 5f 4e 43 48 41 4e 47 45 20 29 20 70 2d 3e 6e 43  _NCHANGE ) p->nC
1fc50 68 61 6e 67 65 2b 2b 3b 0a 20 20 69 66 28 20 70  hange++;.  if( p
1fc60 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f  Op->p5 & OPFLAG_
1fc70 4c 41 53 54 52 4f 57 49 44 20 29 20 64 62 2d 3e  LASTROWID ) db->
1fc80 6c 61 73 74 52 6f 77 69 64 20 3d 20 69 4b 65 79  lastRowid = iKey
1fc90 3b 0a 20 20 69 66 28 20 70 44 61 74 61 2d 3e 66  ;.  if( pData->f
1fca0 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20  lags & MEM_Null 
1fcb0 29 7b 0a 20 20 20 20 70 44 61 74 61 2d 3e 7a 20  ){.    pData->z 
1fcc0 3d 20 30 3b 0a 20 20 20 20 70 44 61 74 61 2d 3e  = 0;.    pData->
1fcd0 6e 20 3d 20 30 3b 0a 20 20 7d 65 6c 73 65 7b 0a  n = 0;.  }else{.
1fce0 20 20 20 20 61 73 73 65 72 74 28 20 70 44 61 74      assert( pDat
1fcf0 61 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  a->flags & (MEM_
1fd00 42 6c 6f 62 7c 4d 45 4d 5f 53 74 72 29 20 29 3b  Blob|MEM_Str) );
1fd10 0a 20 20 7d 0a 20 20 73 65 65 6b 52 65 73 75 6c  .  }.  seekResul
1fd20 74 20 3d 20 28 28 70 4f 70 2d 3e 70 35 20 26 20  t = ((pOp->p5 & 
1fd30 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45  OPFLAG_USESEEKRE
1fd40 53 55 4c 54 29 20 3f 20 70 43 2d 3e 73 65 65 6b  SULT) ? pC->seek
1fd50 52 65 73 75 6c 74 20 3a 20 30 29 3b 0a 20 20 69  Result : 0);.  i
1fd60 66 28 20 70 44 61 74 61 2d 3e 66 6c 61 67 73 20  f( pData->flags 
1fd70 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20  & MEM_Zero ){.  
1fd80 20 20 6e 5a 65 72 6f 20 3d 20 70 44 61 74 61 2d    nZero = pData-
1fd90 3e 75 2e 6e 5a 65 72 6f 3b 0a 20 20 7d 65 6c 73  >u.nZero;.  }els
1fda0 65 7b 0a 20 20 20 20 6e 5a 65 72 6f 20 3d 20 30  e{.    nZero = 0
1fdb0 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 42  ;.  }.  sqlite3B
1fdc0 74 72 65 65 53 65 74 43 61 63 68 65 64 52 6f 77  treeSetCachedRow
1fdd0 69 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20  id(pC->pCursor, 
1fde0 30 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74  0);.  rc = sqlit
1fdf0 65 33 42 74 72 65 65 49 6e 73 65 72 74 28 70 43  e3BtreeInsert(pC
1fe00 2d 3e 70 43 75 72 73 6f 72 2c 20 30 2c 20 69 4b  ->pCursor, 0, iK
1fe10 65 79 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  ey,.            
1fe20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 44                pD
1fe30 61 74 61 2d 3e 7a 2c 20 70 44 61 74 61 2d 3e 6e  ata->z, pData->n
1fe40 2c 20 6e 5a 65 72 6f 2c 0a 20 20 20 20 20 20 20  , nZero,.       
1fe50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fe60 20 20 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46     pOp->p5 & OPF
1fe70 4c 41 47 5f 41 50 50 45 4e 44 2c 20 73 65 65 6b  LAG_APPEND, seek
1fe80 52 65 73 75 6c 74 0a 20 20 29 3b 0a 20 20 70 43  Result.  );.  pC
1fe90 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d  ->rowidIsValid =
1fea0 20 30 3b 0a 20 20 70 43 2d 3e 64 65 66 65 72 72   0;.  pC->deferr
1feb0 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20  edMoveto = 0;.  
1fec0 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20  pC->cacheStatus 
1fed0 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 0a  = CACHE_STALE;..
1fee0 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20    /* Invoke the 
1fef0 75 70 64 61 74 65 2d 68 6f 6f 6b 20 69 66 20 72  update-hook if r
1ff00 65 71 75 69 72 65 64 2e 20 2a 2f 0a 20 20 69 66  equired. */.  if
1ff10 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
1ff20 26 26 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61  && db->xUpdateCa
1ff30 6c 6c 62 61 63 6b 20 26 26 20 70 4f 70 2d 3e 70  llback && pOp->p
1ff40 34 2e 7a 20 29 7b 0a 20 20 20 20 7a 44 62 20 3d  4.z ){.    zDb =
1ff50 20 64 62 2d 3e 61 44 62 5b 70 43 2d 3e 69 44 62   db->aDb[pC->iDb
1ff60 5d 2e 7a 4e 61 6d 65 3b 0a 20 20 20 20 7a 54 62  ].zName;.    zTb
1ff70 6c 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20  l = pOp->p4.z;. 
1ff80 20 20 20 6f 70 20 3d 20 28 28 70 4f 70 2d 3e 70     op = ((pOp->p
1ff90 35 20 26 20 4f 50 46 4c 41 47 5f 49 53 55 50 44  5 & OPFLAG_ISUPD
1ffa0 41 54 45 29 20 3f 20 53 51 4c 49 54 45 5f 55 50  ATE) ? SQLITE_UP
1ffb0 44 41 54 45 20 3a 20 53 51 4c 49 54 45 5f 49 4e  DATE : SQLITE_IN
1ffc0 53 45 52 54 29 3b 0a 20 20 20 20 61 73 73 65 72  SERT);.    asser
1ffd0 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29  t( pC->isTable )
1ffe0 3b 0a 20 20 20 20 64 62 2d 3e 78 55 70 64 61 74  ;.    db->xUpdat
1fff0 65 43 61 6c 6c 62 61 63 6b 28 64 62 2d 3e 70 55  eCallback(db->pU
20000 70 64 61 74 65 41 72 67 2c 20 6f 70 2c 20 7a 44  pdateArg, op, zD
20010 62 2c 20 7a 54 62 6c 2c 20 69 4b 65 79 29 3b 0a  b, zTbl, iKey);.
20020 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
20030 69 44 62 3e 3d 30 20 29 3b 0a 20 20 7d 0a 20 20  iDb>=0 );.  }.  
20040 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
20050 6f 64 65 3a 20 44 65 6c 65 74 65 20 50 31 20 50  ode: Delete P1 P
20060 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 44  2 * P4 *.**.** D
20070 65 6c 65 74 65 20 74 68 65 20 72 65 63 6f 72 64  elete the record
20080 20 61 74 20 77 68 69 63 68 20 74 68 65 20 50 31   at which the P1
20090 20 63 75 72 73 6f 72 20 69 73 20 63 75 72 72 65   cursor is curre
200a0 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 2e 0a 2a  ntly pointing..*
200b0 2a 0a 2a 2a 20 54 68 65 20 63 75 72 73 6f 72 20  *.** The cursor 
200c0 77 69 6c 6c 20 62 65 20 6c 65 66 74 20 70 6f 69  will be left poi
200d0 6e 74 69 6e 67 20 61 74 20 65 69 74 68 65 72 20  nting at either 
200e0 74 68 65 20 6e 65 78 74 20 6f 72 20 74 68 65 20  the next or the 
200f0 70 72 65 76 69 6f 75 73 0a 2a 2a 20 72 65 63 6f  previous.** reco
20100 72 64 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e  rd in the table.
20110 20 49 66 20 69 74 20 69 73 20 6c 65 66 74 20 70   If it is left p
20120 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 65 20 6e  ointing at the n
20130 65 78 74 20 72 65 63 6f 72 64 2c 20 74 68 65 6e  ext record, then
20140 0a 2a 2a 20 74 68 65 20 6e 65 78 74 20 4e 65 78  .** the next Nex
20150 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 77 69  t instruction wi
20160 6c 6c 20 62 65 20 61 20 6e 6f 2d 6f 70 2e 20 20  ll be a no-op.  
20170 48 65 6e 63 65 20 69 74 20 69 73 20 4f 4b 20 74  Hence it is OK t
20180 6f 20 64 65 6c 65 74 65 0a 2a 2a 20 61 20 72 65  o delete.** a re
20190 63 6f 72 64 20 66 72 6f 6d 20 77 69 74 68 69 6e  cord from within
201a0 20 61 6e 20 4e 65 78 74 20 6c 6f 6f 70 2e 0a 2a   an Next loop..*
201b0 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c  *.** If the OPFL
201c0 41 47 5f 4e 43 48 41 4e 47 45 20 66 6c 61 67 20  AG_NCHANGE flag 
201d0 6f 66 20 50 32 20 69 73 20 73 65 74 2c 20 74 68  of P2 is set, th
201e0 65 6e 20 74 68 65 20 72 6f 77 20 63 68 61 6e 67  en the row chang
201f0 65 20 63 6f 75 6e 74 20 69 73 0a 2a 2a 20 69 6e  e count is.** in
20200 63 72 65 6d 65 6e 74 65 64 20 28 6f 74 68 65 72  cremented (other
20210 77 69 73 65 20 6e 6f 74 29 2e 0a 2a 2a 0a 2a 2a  wise not)..**.**
20220 20 50 31 20 6d 75 73 74 20 6e 6f 74 20 62 65 20   P1 must not be 
20230 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 20 20 49  pseudo-table.  I
20240 74 20 68 61 73 20 74 6f 20 62 65 20 61 20 72 65  t has to be a re
20250 61 6c 20 74 61 62 6c 65 20 77 69 74 68 0a 2a 2a  al table with.**
20260 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 2e 0a   multiple rows..
20270 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69 73 20 6e  **.** If P4 is n
20280 6f 74 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 69 74  ot NULL, then it
20290 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20   is the name of 
202a0 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 50  the table that P
202b0 31 20 69 73 0a 2a 2a 20 70 6f 69 6e 74 69 6e 67  1 is.** pointing
202c0 20 74 6f 2e 20 20 54 68 65 20 75 70 64 61 74 65   to.  The update
202d0 20 68 6f 6f 6b 20 77 69 6c 6c 20 62 65 20 69 6e   hook will be in
202e0 76 6f 6b 65 64 2c 20 69 66 20 69 74 20 65 78 69  voked, if it exi
202f0 73 74 73 2e 0a 2a 2a 20 49 66 20 50 34 20 69 73  sts..** If P4 is
20300 20 6e 6f 74 20 4e 55 4c 4c 20 74 68 65 6e 20 74   not NULL then t
20310 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d 75 73  he P1 cursor mus
20320 74 20 68 61 76 65 20 62 65 65 6e 20 70 6f 73 69  t have been posi
20330 74 69 6f 6e 65 64 0a 2a 2a 20 75 73 69 6e 67 20  tioned.** using 
20340 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20 70 72 69 6f  OP_NotFound prio
20350 72 20 74 6f 20 69 6e 76 6f 6b 69 6e 67 20 74 68  r to invoking th
20360 69 73 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a 63 61  is opcode..*/.ca
20370 73 65 20 4f 50 5f 44 65 6c 65 74 65 3a 20 7b 0a  se OP_Delete: {.
20380 20 20 69 36 34 20 69 4b 65 79 3b 0a 20 20 56 64    i64 iKey;.  Vd
20390 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20  beCursor *pC;.. 
203a0 20 69 4b 65 79 20 3d 20 30 3b 0a 20 20 61 73 73   iKey = 0;.  ass
203b0 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
203c0 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
203d0 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
203e0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
203f0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
20400 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
20410 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20 29  pC->pCursor!=0 )
20420 3b 20 20 2f 2a 20 4f 6e 6c 79 20 76 61 6c 69 64  ;  /* Only valid
20430 20 66 6f 72 20 72 65 61 6c 20 74 61 62 6c 65 73   for real tables
20440 2c 20 6e 6f 20 70 73 65 75 64 6f 74 61 62 6c 65  , no pseudotable
20450 73 20 2a 2f 0a 0a 20 20 2f 2a 20 49 66 20 74 68  s */..  /* If th
20460 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20 77 69  e update-hook wi
20470 6c 6c 20 62 65 20 69 6e 76 6f 6b 65 64 2c 20 73  ll be invoked, s
20480 65 74 20 69 4b 65 79 20 74 6f 20 74 68 65 20 72  et iKey to the r
20490 6f 77 69 64 20 6f 66 20 74 68 65 0a 20 20 2a 2a  owid of the.  **
204a0 20 72 6f 77 20 62 65 69 6e 67 20 64 65 6c 65 74   row being delet
204b0 65 64 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 64  ed..  */.  if( d
204c0 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61  b->xUpdateCallba
204d0 63 6b 20 26 26 20 70 4f 70 2d 3e 70 34 2e 7a 20  ck && pOp->p4.z 
204e0 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ){.    assert( p
204f0 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20  C->isTable );.  
20500 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 72 6f    assert( pC->ro
20510 77 69 64 49 73 56 61 6c 69 64 20 29 3b 20 20 2f  widIsValid );  /
20520 2a 20 6c 61 73 74 52 6f 77 69 64 20 73 65 74 20  * lastRowid set 
20530 62 79 20 70 72 65 76 69 6f 75 73 20 4f 50 5f 4e  by previous OP_N
20540 6f 74 46 6f 75 6e 64 20 2a 2f 0a 20 20 20 20 69  otFound */.    i
20550 4b 65 79 20 3d 20 70 43 2d 3e 6c 61 73 74 52 6f  Key = pC->lastRo
20560 77 69 64 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 54  wid;.  }..  /* T
20570 68 65 20 4f 50 5f 44 65 6c 65 74 65 20 6f 70 63  he OP_Delete opc
20580 6f 64 65 20 61 6c 77 61 79 73 20 66 6f 6c 6c 6f  ode always follo
20590 77 73 20 61 6e 20 4f 50 5f 4e 6f 74 45 78 69 73  ws an OP_NotExis
205a0 74 73 20 6f 72 20 4f 50 5f 4c 61 73 74 20 6f 72  ts or OP_Last or
205b0 0a 20 20 2a 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20  .  ** OP_Column 
205c0 6f 6e 20 74 68 65 20 73 61 6d 65 20 74 61 62 6c  on the same tabl
205d0 65 20 77 69 74 68 6f 75 74 20 61 6e 79 20 69 6e  e without any in
205e0 74 65 72 76 65 6e 69 6e 67 20 6f 70 65 72 61 74  tervening operat
205f0 69 6f 6e 73 20 74 68 61 74 0a 20 20 2a 2a 20 6d  ions that.  ** m
20600 69 67 68 74 20 6d 6f 76 65 20 6f 72 20 69 6e 76  ight move or inv
20610 61 6c 69 64 61 74 65 20 74 68 65 20 63 75 72 73  alidate the curs
20620 6f 72 2e 20 20 48 65 6e 63 65 20 63 75 72 73 6f  or.  Hence curso
20630 72 20 70 43 20 69 73 20 61 6c 77 61 79 73 20 70  r pC is always p
20640 6f 69 6e 74 69 6e 67 0a 20 20 2a 2a 20 74 6f 20  ointing.  ** to 
20650 74 68 65 20 72 6f 77 20 74 6f 20 62 65 20 64 65  the row to be de
20660 6c 65 74 65 64 20 61 6e 64 20 74 68 65 20 73 71  leted and the sq
20670 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d  lite3VdbeCursorM
20680 6f 76 65 74 6f 28 29 20 6f 70 65 72 61 74 69 6f  oveto() operatio
20690 6e 0a 20 20 2a 2a 20 62 65 6c 6f 77 20 69 73 20  n.  ** below is 
206a0 61 6c 77 61 79 73 20 61 20 6e 6f 2d 6f 70 20 61  always a no-op a
206b0 6e 64 20 63 61 6e 6e 6f 74 20 66 61 69 6c 2e 20  nd cannot fail. 
206c0 20 57 65 20 77 69 6c 6c 20 72 75 6e 20 69 74 20   We will run it 
206d0 61 6e 79 68 6f 77 2c 20 74 68 6f 75 67 68 2c 0a  anyhow, though,.
206e0 20 20 2a 2a 20 74 6f 20 67 75 61 72 64 20 61 67    ** to guard ag
206f0 61 69 6e 73 74 20 66 75 74 75 72 65 20 63 68 61  ainst future cha
20700 6e 67 65 73 20 74 6f 20 74 68 65 20 63 6f 64 65  nges to the code
20710 20 67 65 6e 65 72 61 74 6f 72 2e 0a 20 20 2a 2a   generator..  **
20720 2f 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  /.  assert( pC->
20730 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d  deferredMoveto==
20740 30 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  0 );.  rc = sqli
20750 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76  te3VdbeCursorMov
20760 65 74 6f 28 70 43 29 3b 0a 20 20 69 66 28 20 4e  eto(pC);.  if( N
20770 45 56 45 52 28 72 63 21 3d 53 51 4c 49 54 45 5f  EVER(rc!=SQLITE_
20780 4f 4b 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74  OK) ) goto abort
20790 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a  _due_to_error;..
207a0 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 53 65    sqlite3BtreeSe
207b0 74 43 61 63 68 65 64 52 6f 77 69 64 28 70 43 2d  tCachedRowid(pC-
207c0 3e 70 43 75 72 73 6f 72 2c 20 30 29 3b 0a 20 20  >pCursor, 0);.  
207d0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
207e0 65 44 65 6c 65 74 65 28 70 43 2d 3e 70 43 75 72  eDelete(pC->pCur
207f0 73 6f 72 29 3b 0a 20 20 70 43 2d 3e 63 61 63 68  sor);.  pC->cach
20800 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
20810 53 54 41 4c 45 3b 0a 0a 20 20 2f 2a 20 49 6e 76  STALE;..  /* Inv
20820 6f 6b 65 20 74 68 65 20 75 70 64 61 74 65 2d 68  oke the update-h
20830 6f 6f 6b 20 69 66 20 72 65 71 75 69 72 65 64 2e  ook if required.
20840 20 2a 2f 0a 20 20 69 66 28 20 72 63 3d 3d 53 51   */.  if( rc==SQ
20850 4c 49 54 45 5f 4f 4b 20 26 26 20 64 62 2d 3e 78  LITE_OK && db->x
20860 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20 26  UpdateCallback &
20870 26 20 70 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20  & pOp->p4.z ){. 
20880 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a     const char *z
20890 44 62 20 3d 20 64 62 2d 3e 61 44 62 5b 70 43 2d  Db = db->aDb[pC-
208a0 3e 69 44 62 5d 2e 7a 4e 61 6d 65 3b 0a 20 20 20  >iDb].zName;.   
208b0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 62   const char *zTb
208c0 6c 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20  l = pOp->p4.z;. 
208d0 20 20 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61     db->xUpdateCa
208e0 6c 6c 62 61 63 6b 28 64 62 2d 3e 70 55 70 64 61  llback(db->pUpda
208f0 74 65 41 72 67 2c 20 53 51 4c 49 54 45 5f 44 45  teArg, SQLITE_DE
20900 4c 45 54 45 2c 20 7a 44 62 2c 20 7a 54 62 6c 2c  LETE, zDb, zTbl,
20910 20 69 4b 65 79 29 3b 0a 20 20 20 20 61 73 73 65   iKey);.    asse
20920 72 74 28 20 70 43 2d 3e 69 44 62 3e 3d 30 20 29  rt( pC->iDb>=0 )
20930 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d  ;.  }.  if( pOp-
20940 3e 70 32 20 26 20 4f 50 46 4c 41 47 5f 4e 43 48  >p2 & OPFLAG_NCH
20950 41 4e 47 45 20 29 20 70 2d 3e 6e 43 68 61 6e 67  ANGE ) p->nChang
20960 65 2b 2b 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  e++;.  break;.}.
20970 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 73 65 74  /* Opcode: Reset
20980 43 6f 75 6e 74 20 2a 20 2a 20 2a 20 2a 20 2a 0a  Count * * * * *.
20990 2a 2a 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65 20  **.** The value 
209a0 6f 66 20 74 68 65 20 63 68 61 6e 67 65 20 63 6f  of the change co
209b0 75 6e 74 65 72 20 69 73 20 63 6f 70 69 65 64 20  unter is copied 
209c0 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20  to the database 
209d0 68 61 6e 64 6c 65 0a 2a 2a 20 63 68 61 6e 67 65  handle.** change
209e0 20 63 6f 75 6e 74 65 72 20 28 72 65 74 75 72 6e   counter (return
209f0 65 64 20 62 79 20 73 75 62 73 65 71 75 65 6e 74  ed by subsequent
20a00 20 63 61 6c 6c 73 20 74 6f 20 73 71 6c 69 74 65   calls to sqlite
20a10 33 5f 63 68 61 6e 67 65 73 28 29 29 2e 0a 2a 2a  3_changes())..**
20a20 20 54 68 65 6e 20 74 68 65 20 56 4d 73 20 69 6e   Then the VMs in
20a30 74 65 72 6e 61 6c 20 63 68 61 6e 67 65 20 63 6f  ternal change co
20a40 75 6e 74 65 72 20 72 65 73 65 74 73 20 74 6f 20  unter resets to 
20a50 30 2e 0a 2a 2a 20 54 68 69 73 20 69 73 20 75 73  0..** This is us
20a60 65 64 20 62 79 20 74 72 69 67 67 65 72 20 70 72  ed by trigger pr
20a70 6f 67 72 61 6d 73 2e 0a 2a 2f 0a 63 61 73 65 20  ograms..*/.case 
20a80 4f 50 5f 52 65 73 65 74 43 6f 75 6e 74 3a 20 7b  OP_ResetCount: {
20a90 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65  .  sqlite3VdbeSe
20aa0 74 43 68 61 6e 67 65 73 28 64 62 2c 20 70 2d 3e  tChanges(db, p->
20ab0 6e 43 68 61 6e 67 65 29 3b 0a 20 20 70 2d 3e 6e  nChange);.  p->n
20ac0 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20 62 72  Change = 0;.  br
20ad0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
20ae0 65 3a 20 52 6f 77 44 61 74 61 20 50 31 20 50 32  e: RowData P1 P2
20af0 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69   * * *.**.** Wri
20b00 74 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  te into register
20b10 20 50 32 20 74 68 65 20 63 6f 6d 70 6c 65 74 65   P2 the complete
20b20 20 72 6f 77 20 64 61 74 61 20 66 6f 72 20 63 75   row data for cu
20b30 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 54 68 65 72  rsor P1..** Ther
20b40 65 20 69 73 20 6e 6f 20 69 6e 74 65 72 70 72 65  e is no interpre
20b50 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 64 61  tation of the da
20b60 74 61 2e 20 20 0a 2a 2a 20 49 74 20 69 73 20 6a  ta.  .** It is j
20b70 75 73 74 20 63 6f 70 69 65 64 20 6f 6e 74 6f 20  ust copied onto 
20b80 74 68 65 20 50 32 20 72 65 67 69 73 74 65 72 20  the P2 register 
20b90 65 78 61 63 74 6c 79 20 61 73 20 0a 2a 2a 20 69  exactly as .** i
20ba0 74 20 69 73 20 66 6f 75 6e 64 20 69 6e 20 74 68  t is found in th
20bb0 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e  e database file.
20bc0 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31  .**.** If the P1
20bd0 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20   cursor must be 
20be0 70 6f 69 6e 74 69 6e 67 20 74 6f 20 61 20 76 61  pointing to a va
20bf0 6c 69 64 20 72 6f 77 20 28 6e 6f 74 20 61 20 4e  lid row (not a N
20c00 55 4c 4c 20 72 6f 77 29 0a 2a 2a 20 6f 66 20 61  ULL row).** of a
20c10 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74   real table, not
20c20 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e   a pseudo-table.
20c30 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  .*/./* Opcode: R
20c40 6f 77 4b 65 79 20 50 31 20 50 32 20 2a 20 2a 20  owKey P1 P2 * * 
20c50 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 69 6e  *.**.** Write in
20c60 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 20 74  to register P2 t
20c70 68 65 20 63 6f 6d 70 6c 65 74 65 20 72 6f 77 20  he complete row 
20c80 6b 65 79 20 66 6f 72 20 63 75 72 73 6f 72 20 50  key for cursor P
20c90 31 2e 0a 2a 2a 20 54 68 65 72 65 20 69 73 20 6e  1..** There is n
20ca0 6f 20 69 6e 74 65 72 70 72 65 74 61 74 69 6f 6e  o interpretation
20cb0 20 6f 66 20 74 68 65 20 64 61 74 61 2e 20 20 0a   of the data.  .
20cc0 2a 2a 20 54 68 65 20 6b 65 79 20 69 73 20 63 6f  ** The key is co
20cd0 70 69 65 64 20 6f 6e 74 6f 20 74 68 65 20 50 33  pied onto the P3
20ce0 20 72 65 67 69 73 74 65 72 20 65 78 61 63 74 6c   register exactl
20cf0 79 20 61 73 20 0a 2a 2a 20 69 74 20 69 73 20 66  y as .** it is f
20d00 6f 75 6e 64 20 69 6e 20 74 68 65 20 64 61 74 61  ound in the data
20d10 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a  base file..**.**
20d20 20 49 66 20 74 68 65 20 50 31 20 63 75 72 73 6f   If the P1 curso
20d30 72 20 6d 75 73 74 20 62 65 20 70 6f 69 6e 74 69  r must be pointi
20d40 6e 67 20 74 6f 20 61 20 76 61 6c 69 64 20 72 6f  ng to a valid ro
20d50 77 20 28 6e 6f 74 20 61 20 4e 55 4c 4c 20 72 6f  w (not a NULL ro
20d60 77 29 0a 2a 2a 20 6f 66 20 61 20 72 65 61 6c 20  w).** of a real 
20d70 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65  table, not a pse
20d80 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61  udo-table..*/.ca
20d90 73 65 20 4f 50 5f 52 6f 77 4b 65 79 3a 0a 63 61  se OP_RowKey:.ca
20da0 73 65 20 4f 50 5f 52 6f 77 44 61 74 61 3a 20 7b  se OP_RowData: {
20db0 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
20dc0 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70  C;.  BtCursor *p
20dd0 43 72 73 72 3b 0a 20 20 75 33 32 20 6e 3b 0a 20  Crsr;.  u32 n;. 
20de0 20 69 36 34 20 6e 36 34 3b 0a 0a 20 20 70 4f 75   i64 n64;..  pOu
20df0 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
20e00 32 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f  2];.  memAboutTo
20e10 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b  Change(p, pOut);
20e20 0a 0a 20 20 2f 2a 20 4e 6f 74 65 20 74 68 61 74  ..  /* Note that
20e30 20 52 6f 77 4b 65 79 20 61 6e 64 20 52 6f 77 44   RowKey and RowD
20e40 61 74 61 20 61 72 65 20 72 65 61 6c 6c 79 20 65  ata are really e
20e50 78 61 63 74 6c 79 20 74 68 65 20 73 61 6d 65 20  xactly the same 
20e60 69 6e 73 74 72 75 63 74 69 6f 6e 20 2a 2f 0a 20  instruction */. 
20e70 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
20e80 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
20e90 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  ->nCursor );.  p
20ea0 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
20eb0 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
20ec0 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 7c 7c 20   pC->isTable || 
20ed0 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
20ee0 52 6f 77 4b 65 79 20 29 3b 0a 20 20 61 73 73 65  RowKey );.  asse
20ef0 72 74 28 20 70 43 2d 3e 69 73 49 6e 64 65 78 20  rt( pC->isIndex 
20f00 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  || pOp->opcode==
20f10 4f 50 5f 52 6f 77 44 61 74 61 20 29 3b 0a 20 20  OP_RowData );.  
20f20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
20f30 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 6e  .  assert( pC->n
20f40 75 6c 6c 52 6f 77 3d 3d 30 20 29 3b 0a 20 20 61  ullRow==0 );.  a
20f50 73 73 65 72 74 28 20 70 43 2d 3e 70 73 65 75 64  ssert( pC->pseud
20f60 6f 54 61 62 6c 65 52 65 67 3d 3d 30 20 29 3b 0a  oTableReg==0 );.
20f70 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43    assert( pC->pC
20f80 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 70 43  ursor!=0 );.  pC
20f90 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f  rsr = pC->pCurso
20fa0 72 3b 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c  r;.  assert( sql
20fb0 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 49  ite3BtreeCursorI
20fc0 73 56 61 6c 69 64 28 70 43 72 73 72 29 20 29 3b  sValid(pCrsr) );
20fd0 0a 0a 20 20 2f 2a 20 54 68 65 20 4f 50 5f 52 6f  ..  /* The OP_Ro
20fe0 77 4b 65 79 20 61 6e 64 20 4f 50 5f 52 6f 77 44  wKey and OP_RowD
20ff0 61 74 61 20 6f 70 63 6f 64 65 73 20 61 6c 77 61  ata opcodes alwa
21000 79 73 20 66 6f 6c 6c 6f 77 20 4f 50 5f 4e 6f 74  ys follow OP_Not
21010 45 78 69 73 74 73 20 6f 72 0a 20 20 2a 2a 20 4f  Exists or.  ** O
21020 50 5f 52 65 77 69 6e 64 2f 4f 70 5f 4e 65 78 74  P_Rewind/Op_Next
21030 20 77 69 74 68 20 6e 6f 20 69 6e 74 65 72 76 65   with no interve
21040 6e 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e  ning instruction
21050 73 20 74 68 61 74 20 6d 69 67 68 74 20 69 6e 76  s that might inv
21060 61 6c 69 64 61 74 65 0a 20 20 2a 2a 20 74 68 65  alidate.  ** the
21070 20 63 75 72 73 6f 72 2e 20 20 48 65 6e 63 65 20   cursor.  Hence 
21080 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 71  the following sq
21090 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d  lite3VdbeCursorM
210a0 6f 76 65 74 6f 28 29 20 63 61 6c 6c 20 69 73 20  oveto() call is 
210b0 61 6c 77 61 79 73 0a 20 20 2a 2a 20 61 20 6e 6f  always.  ** a no
210c0 2d 6f 70 20 61 6e 64 20 63 61 6e 20 6e 65 76 65  -op and can neve
210d0 72 20 66 61 69 6c 2e 20 20 42 75 74 20 77 65 20  r fail.  But we 
210e0 6c 65 61 76 65 20 69 74 20 69 6e 20 70 6c 61 63  leave it in plac
210f0 65 20 61 73 20 61 20 73 61 66 65 74 79 2e 0a 20  e as a safety.. 
21100 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 43   */.  assert( pC
21110 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
21120 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 73 71  ==0 );.  rc = sq
21130 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d  lite3VdbeCursorM
21140 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20 69 66 28  oveto(pC);.  if(
21150 20 4e 45 56 45 52 28 72 63 21 3d 53 51 4c 49 54   NEVER(rc!=SQLIT
21160 45 5f 4f 4b 29 20 29 20 67 6f 74 6f 20 61 62 6f  E_OK) ) goto abo
21170 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
21180 0a 0a 20 20 69 66 28 20 70 43 2d 3e 69 73 49 6e  ..  if( pC->isIn
21190 64 65 78 20 29 7b 0a 20 20 20 20 61 73 73 65 72  dex ){.    asser
211a0 74 28 20 21 70 43 2d 3e 69 73 54 61 62 6c 65 20  t( !pC->isTable 
211b0 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  );.    rc = sqli
211c0 74 65 33 42 74 72 65 65 4b 65 79 53 69 7a 65 28  te3BtreeKeySize(
211d0 70 43 72 73 72 2c 20 26 6e 36 34 29 3b 0a 20 20  pCrsr, &n64);.  
211e0 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51    assert( rc==SQ
211f0 4c 49 54 45 5f 4f 4b 20 29 3b 20 20 20 20 2f 2a  LITE_OK );    /*
21200 20 54 72 75 65 20 62 65 63 61 75 73 65 20 6f 66   True because of
21210 20 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29 20   CursorMoveto() 
21220 63 61 6c 6c 20 61 62 6f 76 65 20 2a 2f 0a 20 20  call above */.  
21230 20 20 69 66 28 20 6e 36 34 3e 64 62 2d 3e 61 4c    if( n64>db->aL
21240 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49  imit[SQLITE_LIMI
21250 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20  T_LENGTH] ){.   
21260 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b     goto too_big;
21270 0a 20 20 20 20 7d 0a 20 20 20 20 6e 20 3d 20 28  .    }.    n = (
21280 75 33 32 29 6e 36 34 3b 0a 20 20 7d 65 6c 73 65  u32)n64;.  }else
21290 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  {.    rc = sqlit
212a0 65 33 42 74 72 65 65 44 61 74 61 53 69 7a 65 28  e3BtreeDataSize(
212b0 70 43 72 73 72 2c 20 26 6e 29 3b 0a 20 20 20 20  pCrsr, &n);.    
212c0 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49  assert( rc==SQLI
212d0 54 45 5f 4f 4b 20 29 3b 20 20 20 20 2f 2a 20 44  TE_OK );    /* D
212e0 61 74 61 53 69 7a 65 28 29 20 63 61 6e 6e 6f 74  ataSize() cannot
212f0 20 66 61 69 6c 20 2a 2f 0a 20 20 20 20 69 66 28   fail */.    if(
21300 20 6e 3e 28 75 33 32 29 64 62 2d 3e 61 4c 69 6d   n>(u32)db->aLim
21310 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f  it[SQLITE_LIMIT_
21320 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 20  LENGTH] ){.     
21330 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20   goto too_big;. 
21340 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 73     }.  }.  if( s
21350 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 47 72 6f  qlite3VdbeMemGro
21360 77 28 70 4f 75 74 2c 20 6e 2c 20 30 29 20 29 7b  w(pOut, n, 0) ){
21370 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  .    goto no_mem
21380 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 6e 20  ;.  }.  pOut->n 
21390 3d 20 6e 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70  = n;.  MemSetTyp
213a0 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f  eFlag(pOut, MEM_
213b0 42 6c 6f 62 29 3b 0a 20 20 69 66 28 20 70 43 2d  Blob);.  if( pC-
213c0 3e 69 73 49 6e 64 65 78 20 29 7b 0a 20 20 20 20  >isIndex ){.    
213d0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
213e0 65 4b 65 79 28 70 43 72 73 72 2c 20 30 2c 20 6e  eKey(pCrsr, 0, n
213f0 2c 20 70 4f 75 74 2d 3e 7a 29 3b 0a 20 20 7d 65  , pOut->z);.  }e
21400 6c 73 65 7b 0a 20 20 20 20 72 63 20 3d 20 73 71  lse{.    rc = sq
21410 6c 69 74 65 33 42 74 72 65 65 44 61 74 61 28 70  lite3BtreeData(p
21420 43 72 73 72 2c 20 30 2c 20 6e 2c 20 70 4f 75 74  Crsr, 0, n, pOut
21430 2d 3e 7a 29 3b 0a 20 20 7d 0a 20 20 70 4f 75 74  ->z);.  }.  pOut
21440 2d 3e 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55  ->enc = SQLITE_U
21450 54 46 38 3b 20 20 2f 2a 20 49 6e 20 63 61 73 65  TF8;  /* In case
21460 20 74 68 65 20 62 6c 6f 62 20 69 73 20 65 76 65   the blob is eve
21470 72 20 63 61 73 74 20 74 6f 20 74 65 78 74 20 2a  r cast to text *
21480 2f 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  /.  UPDATE_MAX_B
21490 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20  LOBSIZE(pOut);. 
214a0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
214b0 63 6f 64 65 3a 20 52 6f 77 69 64 20 50 31 20 50  code: Rowid P1 P
214c0 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 74  2 * * *.**.** St
214d0 6f 72 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  ore in register 
214e0 50 32 20 61 6e 20 69 6e 74 65 67 65 72 20 77 68  P2 an integer wh
214f0 69 63 68 20 69 73 20 74 68 65 20 6b 65 79 20 6f  ich is the key o
21500 66 20 74 68 65 20 74 61 62 6c 65 20 65 6e 74 72  f the table entr
21510 79 20 74 68 61 74 0a 2a 2a 20 50 31 20 69 73 20  y that.** P1 is 
21520 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 20  currently point 
21530 74 6f 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 63 61 6e  to..**.** P1 can
21540 20 62 65 20 65 69 74 68 65 72 20 61 6e 20 6f 72   be either an or
21550 64 69 6e 61 72 79 20 74 61 62 6c 65 20 6f 72 20  dinary table or 
21560 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e  a virtual table.
21570 20 20 54 68 65 72 65 20 75 73 65 64 20 74 6f 0a    There used to.
21580 2a 2a 20 62 65 20 61 20 73 65 70 61 72 61 74 65  ** be a separate
21590 20 4f 50 5f 56 52 6f 77 69 64 20 6f 70 63 6f 64   OP_VRowid opcod
215a0 65 20 66 6f 72 20 75 73 65 20 77 69 74 68 20 76  e for use with v
215b0 69 72 74 75 61 6c 20 74 61 62 6c 65 73 2c 20 62  irtual tables, b
215c0 75 74 20 74 68 69 73 0a 2a 2a 20 6f 6e 65 20 6f  ut this.** one o
215d0 70 63 6f 64 65 20 6e 6f 77 20 77 6f 72 6b 73 20  pcode now works 
215e0 66 6f 72 20 62 6f 74 68 20 74 61 62 6c 65 20 74  for both table t
215f0 79 70 65 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  ypes..*/.case OP
21600 5f 52 6f 77 69 64 3a 20 7b 20 20 20 20 20 20 20  _Rowid: {       
21610 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
21620 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a  2-prerelease */.
21630 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
21640 3b 0a 20 20 69 36 34 20 76 3b 0a 20 20 73 71 6c  ;.  i64 v;.  sql
21650 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62  ite3_vtab *pVtab
21660 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65  ;.  const sqlite
21670 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c  3_module *pModul
21680 65 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  e;..  assert( pO
21690 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
216a0 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
216b0 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
216c0 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
216d0 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
216e0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 73 65   assert( pC->pse
216f0 75 64 6f 54 61 62 6c 65 52 65 67 3d 3d 30 20 29  udoTableReg==0 )
21700 3b 0a 20 20 69 66 28 20 70 43 2d 3e 6e 75 6c 6c  ;.  if( pC->null
21710 52 6f 77 20 29 7b 0a 20 20 20 20 70 4f 75 74 2d  Row ){.    pOut-
21720 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c  >flags = MEM_Nul
21730 6c 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  l;.    break;.  
21740 7d 65 6c 73 65 20 69 66 28 20 70 43 2d 3e 64 65  }else if( pC->de
21750 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 29 7b 0a  ferredMoveto ){.
21760 20 20 20 20 76 20 3d 20 70 43 2d 3e 6d 6f 76 65      v = pC->move
21770 74 6f 54 61 72 67 65 74 3b 0a 23 69 66 6e 64 65  toTarget;.#ifnde
21780 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
21790 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 7d 65 6c  RTUALTABLE.  }el
217a0 73 65 20 69 66 28 20 70 43 2d 3e 70 56 74 61 62  se if( pC->pVtab
217b0 43 75 72 73 6f 72 20 29 7b 0a 20 20 20 20 70 56  Cursor ){.    pV
217c0 74 61 62 20 3d 20 70 43 2d 3e 70 56 74 61 62 43  tab = pC->pVtabC
217d0 75 72 73 6f 72 2d 3e 70 56 74 61 62 3b 0a 20 20  ursor->pVtab;.  
217e0 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61    pModule = pVta
217f0 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 20 20  b->pModule;.    
21800 61 73 73 65 72 74 28 20 70 4d 6f 64 75 6c 65 2d  assert( pModule-
21810 3e 78 52 6f 77 69 64 20 29 3b 0a 20 20 20 20 72  >xRowid );.    r
21820 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 52 6f  c = pModule->xRo
21830 77 69 64 28 70 43 2d 3e 70 56 74 61 62 43 75 72  wid(pC->pVtabCur
21840 73 6f 72 2c 20 26 76 29 3b 0a 20 20 20 20 69 6d  sor, &v);.    im
21850 70 6f 72 74 56 74 61 62 45 72 72 4d 73 67 28 70  portVtabErrMsg(p
21860 2c 20 70 56 74 61 62 29 3b 0a 23 65 6e 64 69 66  , pVtab);.#endif
21870 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
21880 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a  VIRTUALTABLE */.
21890 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73    }else{.    ass
218a0 65 72 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72  ert( pC->pCursor
218b0 21 3d 30 20 29 3b 0a 20 20 20 20 72 63 20 3d 20  !=0 );.    rc = 
218c0 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f  sqlite3VdbeCurso
218d0 72 4d 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20 20  rMoveto(pC);.   
218e0 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61   if( rc ) goto a
218f0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
21900 72 3b 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 72  r;.    if( pC->r
21910 6f 77 69 64 49 73 56 61 6c 69 64 20 29 7b 0a 20  owidIsValid ){. 
21920 20 20 20 20 20 76 20 3d 20 70 43 2d 3e 6c 61 73       v = pC->las
21930 74 52 6f 77 69 64 3b 0a 20 20 20 20 7d 65 6c 73  tRowid;.    }els
21940 65 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71  e{.      rc = sq
21950 6c 69 74 65 33 42 74 72 65 65 4b 65 79 53 69 7a  lite3BtreeKeySiz
21960 65 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26  e(pC->pCursor, &
21970 76 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  v);.      assert
21980 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
21990 29 3b 20 20 2f 2a 20 41 6c 77 61 79 73 20 73 6f  );  /* Always so
219a0 20 62 65 63 61 75 73 65 20 6f 66 20 43 75 72 73   because of Curs
219b0 6f 72 4d 6f 76 65 74 6f 28 29 20 61 62 6f 76 65  orMoveto() above
219c0 20 2a 2f 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20   */.    }.  }.  
219d0 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20  pOut->u.i = v;. 
219e0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
219f0 63 6f 64 65 3a 20 4e 75 6c 6c 52 6f 77 20 50 31  code: NullRow P1
21a00 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4d   * * * *.**.** M
21a10 6f 76 65 20 74 68 65 20 63 75 72 73 6f 72 20 50  ove the cursor P
21a20 31 20 74 6f 20 61 20 6e 75 6c 6c 20 72 6f 77 2e  1 to a null row.
21a30 20 20 41 6e 79 20 4f 50 5f 43 6f 6c 75 6d 6e 20    Any OP_Column 
21a40 6f 70 65 72 61 74 69 6f 6e 73 0a 2a 2a 20 74 68  operations.** th
21a50 61 74 20 6f 63 63 75 72 20 77 68 69 6c 65 20 74  at occur while t
21a60 68 65 20 63 75 72 73 6f 72 20 69 73 20 6f 6e 20  he cursor is on 
21a70 74 68 65 20 6e 75 6c 6c 20 72 6f 77 20 77 69 6c  the null row wil
21a80 6c 20 61 6c 77 61 79 73 0a 2a 2a 20 77 72 69 74  l always.** writ
21a90 65 20 61 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73  e a NULL..*/.cas
21aa0 65 20 4f 50 5f 4e 75 6c 6c 52 6f 77 3a 20 7b 0a  e OP_NullRow: {.
21ab0 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
21ac0 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
21ad0 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
21ae0 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
21af0 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
21b00 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
21b10 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
21b20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b  pC->nullRow = 1;
21b30 0a 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61  .  pC->rowidIsVa
21b40 6c 69 64 20 3d 20 30 3b 0a 20 20 69 66 28 20 70  lid = 0;.  if( p
21b50 43 2d 3e 70 43 75 72 73 6f 72 20 29 7b 0a 20 20  C->pCursor ){.  
21b60 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 6c    sqlite3BtreeCl
21b70 65 61 72 43 75 72 73 6f 72 28 70 43 2d 3e 70 43  earCursor(pC->pC
21b80 75 72 73 6f 72 29 3b 0a 20 20 7d 0a 20 20 62 72  ursor);.  }.  br
21b90 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
21ba0 65 3a 20 4c 61 73 74 20 50 31 20 50 32 20 2a 20  e: Last P1 P2 * 
21bb0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e 65  * *.**.** The ne
21bc0 78 74 20 75 73 65 20 6f 66 20 74 68 65 20 52 6f  xt use of the Ro
21bd0 77 69 64 20 6f 72 20 43 6f 6c 75 6d 6e 20 6f 72  wid or Column or
21be0 20 4e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   Next instructio
21bf0 6e 20 66 6f 72 20 50 31 20 0a 2a 2a 20 77 69 6c  n for P1 .** wil
21c00 6c 20 72 65 66 65 72 20 74 6f 20 74 68 65 20 6c  l refer to the l
21c10 61 73 74 20 65 6e 74 72 79 20 69 6e 20 74 68 65  ast entry in the
21c20 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20   database table 
21c30 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a 20 49 66 20  or index..** If 
21c40 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  the table or ind
21c50 65 78 20 69 73 20 65 6d 70 74 79 20 61 6e 64 20  ex is empty and 
21c60 50 32 3e 30 2c 20 74 68 65 6e 20 6a 75 6d 70 20  P2>0, then jump 
21c70 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50  immediately to P
21c80 32 2e 0a 2a 2a 20 49 66 20 50 32 20 69 73 20 30  2..** If P2 is 0
21c90 20 6f 72 20 69 66 20 74 68 65 20 74 61 62 6c 65   or if the table
21ca0 20 6f 72 20 69 6e 64 65 78 20 69 73 20 6e 6f 74   or index is not
21cb0 20 65 6d 70 74 79 2c 20 66 61 6c 6c 20 74 68 72   empty, fall thr
21cc0 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66  ough.** to the f
21cd0 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75 63  ollowing instruc
21ce0 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  tion..*/.case OP
21cf0 5f 4c 61 73 74 3a 20 7b 20 20 20 20 20 20 20 20  _Last: {        
21d00 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62  /* jump */.  Vdb
21d10 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42  eCursor *pC;.  B
21d20 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a  tCursor *pCrsr;.
21d30 20 20 69 6e 74 20 72 65 73 3b 0a 0a 20 20 61 73    int res;..  as
21d40 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
21d50 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
21d60 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
21d70 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
21d80 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
21d90 21 3d 30 20 29 3b 0a 20 20 70 43 72 73 72 20 3d  !=0 );.  pCrsr =
21da0 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20   pC->pCursor;.  
21db0 69 66 28 20 70 43 72 73 72 3d 3d 30 20 29 7b 0a  if( pCrsr==0 ){.
21dc0 20 20 20 20 72 65 73 20 3d 20 31 3b 0a 20 20 7d      res = 1;.  }
21dd0 65 6c 73 65 7b 0a 20 20 20 20 72 63 20 3d 20 73  else{.    rc = s
21de0 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74 28  qlite3BtreeLast(
21df0 70 43 72 73 72 2c 20 26 72 65 73 29 3b 0a 20 20  pCrsr, &res);.  
21e00 7d 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20  }.  pC->nullRow 
21e10 3d 20 28 75 38 29 72 65 73 3b 0a 20 20 70 43 2d  = (u8)res;.  pC-
21e20 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20  >deferredMoveto 
21e30 3d 20 30 3b 0a 20 20 70 43 2d 3e 72 6f 77 69 64  = 0;.  pC->rowid
21e40 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 70  IsValid = 0;.  p
21e50 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
21e60 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20   CACHE_STALE;.  
21e70 69 66 28 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26  if( pOp->p2>0 &&
21e80 20 72 65 73 20 29 7b 0a 20 20 20 20 70 63 20 3d   res ){.    pc =
21e90 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
21ea0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f  }.  break;.}.../
21eb0 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 20 50  * Opcode: Sort P
21ec0 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
21ed0 20 54 68 69 73 20 6f 70 63 6f 64 65 20 64 6f 65   This opcode doe
21ee0 73 20 65 78 61 63 74 6c 79 20 74 68 65 20 73 61  s exactly the sa
21ef0 6d 65 20 74 68 69 6e 67 20 61 73 20 4f 50 5f 52  me thing as OP_R
21f00 65 77 69 6e 64 20 65 78 63 65 70 74 20 74 68 61  ewind except tha
21f10 74 0a 2a 2a 20 69 74 20 69 6e 63 72 65 6d 65 6e  t.** it incremen
21f20 74 73 20 61 6e 20 75 6e 64 6f 63 75 6d 65 6e 74  ts an undocument
21f30 65 64 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  ed global variab
21f40 6c 65 20 75 73 65 64 20 66 6f 72 20 74 65 73 74  le used for test
21f50 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 53 6f 72 74 69  ing..**.** Sorti
21f60 6e 67 20 69 73 20 61 63 63 6f 6d 70 6c 69 73 68  ng is accomplish
21f70 65 64 20 62 79 20 77 72 69 74 69 6e 67 20 72 65  ed by writing re
21f80 63 6f 72 64 73 20 69 6e 74 6f 20 61 20 73 6f 72  cords into a sor
21f90 74 69 6e 67 20 69 6e 64 65 78 2c 0a 2a 2a 20 74  ting index,.** t
21fa0 68 65 6e 20 72 65 77 69 6e 64 69 6e 67 20 74 68  hen rewinding th
21fb0 61 74 20 69 6e 64 65 78 20 61 6e 64 20 70 6c 61  at index and pla
21fc0 79 69 6e 67 20 69 74 20 62 61 63 6b 20 66 72 6f  ying it back fro
21fd0 6d 20 62 65 67 69 6e 6e 69 6e 67 20 74 6f 0a 2a  m beginning to.*
21fe0 2a 20 65 6e 64 2e 20 20 57 65 20 75 73 65 20 74  * end.  We use t
21ff0 68 65 20 4f 50 5f 53 6f 72 74 20 6f 70 63 6f 64  he OP_Sort opcod
22000 65 20 69 6e 73 74 65 61 64 20 6f 66 20 4f 50 5f  e instead of OP_
22010 52 65 77 69 6e 64 20 74 6f 20 64 6f 20 74 68 65  Rewind to do the
22020 0a 2a 2a 20 72 65 77 69 6e 64 69 6e 67 20 73 6f  .** rewinding so
22030 20 74 68 61 74 20 74 68 65 20 67 6c 6f 62 61 6c   that the global
22040 20 76 61 72 69 61 62 6c 65 20 77 69 6c 6c 20 62   variable will b
22050 65 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 61 6e  e incremented an
22060 64 0a 2a 2a 20 72 65 67 72 65 73 73 69 6f 6e 20  d.** regression 
22070 74 65 73 74 73 20 63 61 6e 20 64 65 74 65 72 6d  tests can determ
22080 69 6e 65 20 77 68 65 74 68 65 72 20 6f 72 20 6e  ine whether or n
22090 6f 74 20 74 68 65 20 6f 70 74 69 6d 69 7a 65 72  ot the optimizer
220a0 20 69 73 0a 2a 2a 20 63 6f 72 72 65 63 74 6c 79   is.** correctly
220b0 20 6f 70 74 69 6d 69 7a 69 6e 67 20 6f 75 74 20   optimizing out 
220c0 73 6f 72 74 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f  sorts..*/.case O
220d0 50 5f 53 6f 72 74 3a 20 7b 20 20 20 20 20 20 20  P_Sort: {       
220e0 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 23 69 66 64   /* jump */.#ifd
220f0 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20  ef SQLITE_TEST. 
22100 20 73 71 6c 69 74 65 33 5f 73 6f 72 74 5f 63 6f   sqlite3_sort_co
22110 75 6e 74 2b 2b 3b 0a 20 20 73 71 6c 69 74 65 33  unt++;.  sqlite3
22120 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74 2d 2d 3b  _search_count--;
22130 0a 23 65 6e 64 69 66 0a 20 20 70 2d 3e 61 43 6f  .#endif.  p->aCo
22140 75 6e 74 65 72 5b 53 51 4c 49 54 45 5f 53 54 4d  unter[SQLITE_STM
22150 54 53 54 41 54 55 53 5f 53 4f 52 54 2d 31 5d 2b  TSTATUS_SORT-1]+
22160 2b 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72  +;.  /* Fall thr
22170 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f 52 65 77  ough into OP_Rew
22180 69 6e 64 20 2a 2f 0a 7d 0a 2f 2a 20 4f 70 63 6f  ind */.}./* Opco
22190 64 65 3a 20 52 65 77 69 6e 64 20 50 31 20 50 32  de: Rewind P1 P2
221a0 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65   * * *.**.** The
221b0 20 6e 65 78 74 20 75 73 65 20 6f 66 20 74 68 65   next use of the
221c0 20 52 6f 77 69 64 20 6f 72 20 43 6f 6c 75 6d 6e   Rowid or Column
221d0 20 6f 72 20 4e 65 78 74 20 69 6e 73 74 72 75 63   or Next instruc
221e0 74 69 6f 6e 20 66 6f 72 20 50 31 20 0a 2a 2a 20  tion for P1 .** 
221f0 77 69 6c 6c 20 72 65 66 65 72 20 74 6f 20 74 68  will refer to th
22200 65 20 66 69 72 73 74 20 65 6e 74 72 79 20 69 6e  e first entry in
22210 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74 61   the database ta
22220 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a  ble or index..**
22230 20 49 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72   If the table or
22240 20 69 6e 64 65 78 20 69 73 20 65 6d 70 74 79 20   index is empty 
22250 61 6e 64 20 50 32 3e 30 2c 20 74 68 65 6e 20 6a  and P2>0, then j
22260 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20  ump immediately 
22270 74 6f 20 50 32 2e 0a 2a 2a 20 49 66 20 50 32 20  to P2..** If P2 
22280 69 73 20 30 20 6f 72 20 69 66 20 74 68 65 20 74  is 0 or if the t
22290 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 69 73  able or index is
222a0 20 6e 6f 74 20 65 6d 70 74 79 2c 20 66 61 6c 6c   not empty, fall
222b0 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74   through.** to t
222c0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73  he following ins
222d0 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73  truction..*/.cas
222e0 65 20 4f 50 5f 52 65 77 69 6e 64 3a 20 7b 20 20  e OP_Rewind: {  
222f0 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
22300 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
22310 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70  C;.  BtCursor *p
22320 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b  Crsr;.  int res;
22330 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
22340 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
22350 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
22360 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
22370 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
22380 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 72  rt( pC!=0 );.  r
22390 65 73 20 3d 20 31 3b 0a 20 20 69 66 28 20 28 70  es = 1;.  if( (p
223a0 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73  Crsr = pC->pCurs
223b0 6f 72 29 21 3d 30 20 29 7b 0a 20 20 20 20 72 63  or)!=0 ){.    rc
223c0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 46   = sqlite3BtreeF
223d0 69 72 73 74 28 70 43 72 73 72 2c 20 26 72 65 73  irst(pCrsr, &res
223e0 29 3b 0a 20 20 20 20 70 43 2d 3e 61 74 46 69 72  );.    pC->atFir
223f0 73 74 20 3d 20 72 65 73 3d 3d 30 20 3f 31 3a 30  st = res==0 ?1:0
22400 3b 0a 20 20 20 20 70 43 2d 3e 64 65 66 65 72 72  ;.    pC->deferr
22410 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20  edMoveto = 0;.  
22420 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
22430 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
22440 0a 20 20 20 20 70 43 2d 3e 72 6f 77 69 64 49 73  .    pC->rowidIs
22450 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 7d 0a 20  Valid = 0;.  }. 
22460 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 28   pC->nullRow = (
22470 75 38 29 72 65 73 3b 0a 20 20 61 73 73 65 72 74  u8)res;.  assert
22480 28 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70  ( pOp->p2>0 && p
22490 4f 70 2d 3e 70 32 3c 70 2d 3e 6e 4f 70 20 29 3b  Op->p2<p->nOp );
224a0 0a 20 20 69 66 28 20 72 65 73 20 29 7b 0a 20 20  .  if( res ){.  
224b0 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
224c0 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b   1;.  }.  break;
224d0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e  .}../* Opcode: N
224e0 65 78 74 20 50 31 20 50 32 20 2a 20 2a 20 50 35  ext P1 P2 * * P5
224f0 0a 2a 2a 0a 2a 2a 20 41 64 76 61 6e 63 65 20 63  .**.** Advance c
22500 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74  ursor P1 so that
22510 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68   it points to th
22520 65 20 6e 65 78 74 20 6b 65 79 2f 64 61 74 61 20  e next key/data 
22530 70 61 69 72 20 69 6e 20 69 74 73 0a 2a 2a 20 74  pair in its.** t
22540 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 20 20  able or index.  
22550 49 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20  If there are no 
22560 6d 6f 72 65 20 6b 65 79 2f 76 61 6c 75 65 20 70  more key/value p
22570 61 69 72 73 20 74 68 65 6e 20 66 61 6c 6c 20 74  airs then fall t
22580 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65  hrough.** to the
22590 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72   following instr
225a0 75 63 74 69 6f 6e 2e 20 20 42 75 74 20 69 66 20  uction.  But if 
225b0 74 68 65 20 63 75 72 73 6f 72 20 61 64 76 61 6e  the cursor advan
225c0 63 65 20 77 61 73 20 73 75 63 63 65 73 73 66 75  ce was successfu
225d0 6c 2c 0a 2a 2a 20 6a 75 6d 70 20 69 6d 6d 65 64  l,.** jump immed
225e0 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a  iately to P2..**
225f0 0a 2a 2a 20 54 68 65 20 50 31 20 63 75 72 73 6f  .** The P1 curso
22600 72 20 6d 75 73 74 20 62 65 20 66 6f 72 20 61 20  r must be for a 
22610 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20  real table, not 
22620 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a  a pseudo-table..
22630 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 70  **.** If P5 is p
22640 6f 73 69 74 69 76 65 20 61 6e 64 20 74 68 65 20  ositive and the 
22650 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 2c 20 74  jump is taken, t
22660 68 65 6e 20 65 76 65 6e 74 20 63 6f 75 6e 74 65  hen event counte
22670 72 0a 2a 2a 20 6e 75 6d 62 65 72 20 50 35 2d 31  r.** number P5-1
22680 20 69 6e 20 74 68 65 20 70 72 65 70 61 72 65 64   in the prepared
22690 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 69 6e   statement is in
226a0 63 72 65 6d 65 6e 74 65 64 2e 0a 2a 2a 0a 2a 2a  cremented..**.**
226b0 20 53 65 65 20 61 6c 73 6f 3a 20 50 72 65 76 0a   See also: Prev.
226c0 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 72  */./* Opcode: Pr
226d0 65 76 20 50 31 20 50 32 20 2a 20 2a 20 50 35 0a  ev P1 P2 * * P5.
226e0 2a 2a 0a 2a 2a 20 42 61 63 6b 20 75 70 20 63 75  **.** Back up cu
226f0 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20  rsor P1 so that 
22700 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65  it points to the
22710 20 70 72 65 76 69 6f 75 73 20 6b 65 79 2f 64 61   previous key/da
22720 74 61 20 70 61 69 72 20 69 6e 20 69 74 73 0a 2a  ta pair in its.*
22730 2a 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  * table or index
22740 2e 20 20 49 66 20 74 68 65 72 65 20 69 73 20 6e  .  If there is n
22750 6f 20 70 72 65 76 69 6f 75 73 20 6b 65 79 2f 76  o previous key/v
22760 61 6c 75 65 20 70 61 69 72 73 20 74 68 65 6e 20  alue pairs then 
22770 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20  fall through.** 
22780 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  to the following
22790 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 42   instruction.  B
227a0 75 74 20 69 66 20 74 68 65 20 63 75 72 73 6f 72  ut if the cursor
227b0 20 62 61 63 6b 75 70 20 77 61 73 20 73 75 63 63   backup was succ
227c0 65 73 73 66 75 6c 2c 0a 2a 2a 20 6a 75 6d 70 20  essful,.** jump 
227d0 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50  immediately to P
227e0 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 31 20  2..**.** The P1 
227f0 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20 66  cursor must be f
22800 6f 72 20 61 20 72 65 61 6c 20 74 61 62 6c 65 2c  or a real table,
22810 20 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d 74 61   not a pseudo-ta
22820 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35  ble..**.** If P5
22830 20 69 73 20 70 6f 73 69 74 69 76 65 20 61 6e 64   is positive and
22840 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b   the jump is tak
22850 65 6e 2c 20 74 68 65 6e 20 65 76 65 6e 74 20 63  en, then event c
22860 6f 75 6e 74 65 72 0a 2a 2a 20 6e 75 6d 62 65 72  ounter.** number
22870 20 50 35 2d 31 20 69 6e 20 74 68 65 20 70 72 65   P5-1 in the pre
22880 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20  pared statement 
22890 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e 0a  is incremented..
228a0 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 72 65 76 3a  */.case OP_Prev:
228b0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d            /* jum
228c0 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 78  p */.case OP_Nex
228d0 74 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a  t: {        /* j
228e0 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43 75 72  ump */.  VdbeCur
228f0 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72  sor *pC;.  BtCur
22900 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e  sor *pCrsr;.  in
22910 74 20 72 65 73 3b 0a 0a 20 20 43 48 45 43 4b 5f  t res;..  CHECK_
22920 46 4f 52 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20  FOR_INTERRUPT;. 
22930 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
22940 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
22950 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61  ->nCursor );.  a
22960 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3c 3d  ssert( pOp->p5<=
22970 41 72 72 61 79 53 69 7a 65 28 70 2d 3e 61 43 6f  ArraySize(p->aCo
22980 75 6e 74 65 72 29 20 29 3b 0a 20 20 70 43 20 3d  unter) );.  pC =
22990 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
229a0 31 5d 3b 0a 20 20 69 66 28 20 70 43 3d 3d 30 20  1];.  if( pC==0 
229b0 29 7b 0a 20 20 20 20 62 72 65 61 6b 3b 20 20 2f  ){.    break;  /
229c0 2a 20 53 65 65 20 74 69 63 6b 65 74 20 23 32 32  * See ticket #22
229d0 37 33 20 2a 2f 0a 20 20 7d 0a 20 20 70 43 72 73  73 */.  }.  pCrs
229e0 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b  r = pC->pCursor;
229f0 0a 20 20 69 66 28 20 70 43 72 73 72 3d 3d 30 20  .  if( pCrsr==0 
22a00 29 7b 0a 20 20 20 20 70 43 2d 3e 6e 75 6c 6c 52  ){.    pC->nullR
22a10 6f 77 20 3d 20 31 3b 0a 20 20 20 20 62 72 65 61  ow = 1;.    brea
22a20 6b 3b 0a 20 20 7d 0a 20 20 72 65 73 20 3d 20 31  k;.  }.  res = 1
22a30 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
22a40 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d  deferredMoveto==
22a50 30 20 29 3b 0a 20 20 72 63 20 3d 20 70 4f 70 2d  0 );.  rc = pOp-
22a60 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 65 78 74  >opcode==OP_Next
22a70 20 3f 20 73 71 6c 69 74 65 33 42 74 72 65 65 4e   ? sqlite3BtreeN
22a80 65 78 74 28 70 43 72 73 72 2c 20 26 72 65 73 29  ext(pCrsr, &res)
22a90 20 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   :.             
22aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22ab0 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 72 65   sqlite3BtreePre
22ac0 76 69 6f 75 73 28 70 43 72 73 72 2c 20 26 72 65  vious(pCrsr, &re
22ad0 73 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f  s);.  pC->nullRo
22ae0 77 20 3d 20 28 75 38 29 72 65 73 3b 0a 20 20 70  w = (u8)res;.  p
22af0 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
22b00 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20   CACHE_STALE;.  
22b10 69 66 28 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20  if( res==0 ){.  
22b20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
22b30 20 31 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d   1;.    if( pOp-
22b40 3e 70 35 20 29 20 70 2d 3e 61 43 6f 75 6e 74 65  >p5 ) p->aCounte
22b50 72 5b 70 4f 70 2d 3e 70 35 2d 31 5d 2b 2b 3b 0a  r[pOp->p5-1]++;.
22b60 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45  #ifdef SQLITE_TE
22b70 53 54 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73  ST.    sqlite3_s
22b80 65 61 72 63 68 5f 63 6f 75 6e 74 2b 2b 3b 0a 23  earch_count++;.#
22b90 65 6e 64 69 66 0a 20 20 7d 0a 20 20 70 43 2d 3e  endif.  }.  pC->
22ba0 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30  rowidIsValid = 0
22bb0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
22bc0 20 4f 70 63 6f 64 65 3a 20 49 64 78 49 6e 73 65   Opcode: IdxInse
22bd0 72 74 20 50 31 20 50 32 20 50 33 20 2a 20 50 35  rt P1 P2 P3 * P5
22be0 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20  .**.** Register 
22bf0 50 32 20 68 6f 6c 64 73 20 61 20 53 51 4c 20 69  P2 holds a SQL i
22c00 6e 64 65 78 20 6b 65 79 20 6d 61 64 65 20 75 73  ndex key made us
22c10 69 6e 67 20 74 68 65 0a 2a 2a 20 4d 61 6b 65 52  ing the.** MakeR
22c20 65 63 6f 72 64 20 69 6e 73 74 72 75 63 74 69 6f  ecord instructio
22c30 6e 73 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65  ns.  This opcode
22c40 20 77 72 69 74 65 73 20 74 68 61 74 20 6b 65 79   writes that key
22c50 0a 2a 2a 20 69 6e 74 6f 20 74 68 65 20 69 6e 64  .** into the ind
22c60 65 78 20 50 31 2e 20 20 44 61 74 61 20 66 6f 72  ex P1.  Data for
22c70 20 74 68 65 20 65 6e 74 72 79 20 69 73 20 6e 69   the entry is ni
22c80 6c 2e 0a 2a 2a 0a 2a 2a 20 50 33 20 69 73 20 61  l..**.** P3 is a
22c90 20 66 6c 61 67 20 74 68 61 74 20 70 72 6f 76 69   flag that provi
22ca0 64 65 73 20 61 20 68 69 6e 74 20 74 6f 20 74 68  des a hint to th
22cb0 65 20 62 2d 74 72 65 65 20 6c 61 79 65 72 20 74  e b-tree layer t
22cc0 68 61 74 20 74 68 69 73 0a 2a 2a 20 69 6e 73 65  hat this.** inse
22cd0 72 74 20 69 73 20 6c 69 6b 65 6c 79 20 74 6f 20  rt is likely to 
22ce0 62 65 20 61 6e 20 61 70 70 65 6e 64 2e 0a 2a 2a  be an append..**
22cf0 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63  .** This instruc
22d00 74 69 6f 6e 20 6f 6e 6c 79 20 77 6f 72 6b 73 20  tion only works 
22d10 66 6f 72 20 69 6e 64 69 63 65 73 2e 20 20 54 68  for indices.  Th
22d20 65 20 65 71 75 69 76 61 6c 65 6e 74 20 69 6e 73  e equivalent ins
22d30 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 66 6f 72 20  truction.** for 
22d40 74 61 62 6c 65 73 20 69 73 20 4f 50 5f 49 6e 73  tables is OP_Ins
22d50 65 72 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ert..*/.case OP_
22d60 49 64 78 49 6e 73 65 72 74 3a 20 7b 20 20 20 20  IdxInsert: {    
22d70 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20      /* in2 */.  
22d80 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
22d90 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73    BtCursor *pCrs
22da0 72 3b 0a 20 20 69 6e 74 20 6e 4b 65 79 3b 0a 20  r;.  int nKey;. 
22db0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4b 65   const char *zKe
22dc0 79 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  y;..  assert( pO
22dd0 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
22de0 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
22df0 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
22e00 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
22e10 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
22e20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn2 = &aMem[pO
22e30 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74  p->p2];.  assert
22e40 28 20 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20  ( pIn2->flags & 
22e50 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20 70 43  MEM_Blob );.  pC
22e60 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f  rsr = pC->pCurso
22e70 72 3b 0a 20 20 69 66 28 20 41 4c 57 41 59 53 28  r;.  if( ALWAYS(
22e80 70 43 72 73 72 21 3d 30 29 20 29 7b 0a 20 20 20  pCrsr!=0) ){.   
22e90 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54   assert( pC->isT
22ea0 61 62 6c 65 3d 3d 30 20 29 3b 0a 20 20 20 20 72  able==0 );.    r
22eb0 63 20 3d 20 45 78 70 61 6e 64 42 6c 6f 62 28 70  c = ExpandBlob(p
22ec0 49 6e 32 29 3b 0a 20 20 20 20 69 66 28 20 72 63  In2);.    if( rc
22ed0 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
22ee0 20 20 20 20 20 6e 4b 65 79 20 3d 20 70 49 6e 32       nKey = pIn2
22ef0 2d 3e 6e 3b 0a 20 20 20 20 20 20 7a 4b 65 79 20  ->n;.      zKey 
22f00 3d 20 70 49 6e 32 2d 3e 7a 3b 0a 20 20 20 20 20  = pIn2->z;.     
22f10 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
22f20 65 65 49 6e 73 65 72 74 28 70 43 72 73 72 2c 20  eeInsert(pCrsr, 
22f30 7a 4b 65 79 2c 20 6e 4b 65 79 2c 20 22 22 2c 20  zKey, nKey, "", 
22f40 30 2c 20 30 2c 20 70 4f 70 2d 3e 70 33 2c 20 0a  0, 0, pOp->p3, .
22f50 20 20 20 20 20 20 20 20 20 20 28 28 70 4f 70 2d            ((pOp-
22f60 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 55 53 45  >p5 & OPFLAG_USE
22f70 53 45 45 4b 52 45 53 55 4c 54 29 20 3f 20 70 43  SEEKRESULT) ? pC
22f80 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3a 20 30  ->seekResult : 0
22f90 29 0a 20 20 20 20 20 20 29 3b 0a 20 20 20 20 20  ).      );.     
22fa0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66   assert( pC->def
22fb0 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29  erredMoveto==0 )
22fc0 3b 0a 20 20 20 20 20 20 70 43 2d 3e 63 61 63 68  ;.      pC->cach
22fd0 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
22fe0 53 54 41 4c 45 3b 0a 20 20 20 20 7d 0a 20 20 7d  STALE;.    }.  }
22ff0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
23000 4f 70 63 6f 64 65 3a 20 49 64 78 44 65 6c 65 74  Opcode: IdxDelet
23010 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  e P1 P2 P3 * *.*
23020 2a 0a 2a 2a 20 54 68 65 20 63 6f 6e 74 65 6e 74  *.** The content
23030 20 6f 66 20 50 33 20 72 65 67 69 73 74 65 72 73   of P3 registers
23040 20 73 74 61 72 74 69 6e 67 20 61 74 20 72 65 67   starting at reg
23050 69 73 74 65 72 20 50 32 20 66 6f 72 6d 0a 2a 2a  ister P2 form.**
23060 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64   an unpacked ind
23070 65 78 20 6b 65 79 2e 20 54 68 69 73 20 6f 70 63  ex key. This opc
23080 6f 64 65 20 72 65 6d 6f 76 65 73 20 74 68 61 74  ode removes that
23090 20 65 6e 74 72 79 20 66 72 6f 6d 20 74 68 65 20   entry from the 
230a0 0a 2a 2a 20 69 6e 64 65 78 20 6f 70 65 6e 65 64  .** index opened
230b0 20 62 79 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a   by cursor P1..*
230c0 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 44 65 6c  /.case OP_IdxDel
230d0 65 74 65 3a 20 7b 0a 20 20 56 64 62 65 43 75 72  ete: {.  VdbeCur
230e0 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72  sor *pC;.  BtCur
230f0 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e  sor *pCrsr;.  in
23100 74 20 72 65 73 3b 0a 20 20 55 6e 70 61 63 6b 65  t res;.  Unpacke
23110 64 52 65 63 6f 72 64 20 72 3b 0a 0a 20 20 61 73  dRecord r;..  as
23120 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20  sert( pOp->p3>0 
23130 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
23140 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p2>0 && pOp->p
23150 32 2b 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d  2+pOp->p3<=p->nM
23160 65 6d 2b 31 20 29 3b 0a 20 20 61 73 73 65 72 74  em+1 );.  assert
23170 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
23180 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
23190 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
231a0 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
231b0 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
231c0 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d  );.  pCrsr = pC-
231d0 3e 70 43 75 72 73 6f 72 3b 0a 20 20 69 66 28 20  >pCursor;.  if( 
231e0 41 4c 57 41 59 53 28 70 43 72 73 72 21 3d 30 29  ALWAYS(pCrsr!=0)
231f0 20 29 7b 0a 20 20 20 20 72 2e 70 4b 65 79 49 6e   ){.    r.pKeyIn
23200 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66  fo = pC->pKeyInf
23210 6f 3b 0a 20 20 20 20 72 2e 6e 46 69 65 6c 64 20  o;.    r.nField 
23220 3d 20 28 75 31 36 29 70 4f 70 2d 3e 70 33 3b 0a  = (u16)pOp->p3;.
23230 20 20 20 20 72 2e 66 6c 61 67 73 20 3d 20 30 3b      r.flags = 0;
23240 0a 20 20 20 20 72 2e 61 4d 65 6d 20 3d 20 26 61  .    r.aMem = &a
23250 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 23 69  Mem[pOp->p2];.#i
23260 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
23270 47 0a 20 20 20 20 7b 20 69 6e 74 20 69 3b 20 66  G.    { int i; f
23280 6f 72 28 69 3d 30 3b 20 69 3c 72 2e 6e 46 69 65  or(i=0; i<r.nFie
23290 6c 64 3b 20 69 2b 2b 29 20 61 73 73 65 72 74 28  ld; i++) assert(
232a0 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 72 2e 61   memIsValid(&r.a
232b0 4d 65 6d 5b 69 5d 29 20 29 3b 20 7d 0a 23 65 6e  Mem[i]) ); }.#en
232c0 64 69 66 0a 20 20 20 20 72 63 20 3d 20 73 71 6c  dif.    rc = sql
232d0 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55  ite3BtreeMovetoU
232e0 6e 70 61 63 6b 65 64 28 70 43 72 73 72 2c 20 26  npacked(pCrsr, &
232f0 72 2c 20 30 2c 20 30 2c 20 26 72 65 73 29 3b 0a  r, 0, 0, &res);.
23300 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
23310 54 45 5f 4f 4b 20 26 26 20 72 65 73 3d 3d 30 20  TE_OK && res==0 
23320 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71  ){.      rc = sq
23330 6c 69 74 65 33 42 74 72 65 65 44 65 6c 65 74 65  lite3BtreeDelete
23340 28 70 43 72 73 72 29 3b 0a 20 20 20 20 7d 0a 20  (pCrsr);.    }. 
23350 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64     assert( pC->d
23360 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30  eferredMoveto==0
23370 20 29 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68   );.    pC->cach
23380 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
23390 53 54 41 4c 45 3b 0a 20 20 7d 0a 20 20 62 72 65  STALE;.  }.  bre
233a0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
233b0 3a 20 49 64 78 52 6f 77 69 64 20 50 31 20 50 32  : IdxRowid P1 P2
233c0 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69   * * *.**.** Wri
233d0 74 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  te into register
233e0 20 50 32 20 61 6e 20 69 6e 74 65 67 65 72 20 77   P2 an integer w
233f0 68 69 63 68 20 69 73 20 74 68 65 20 6c 61 73 74  hich is the last
23400 20 65 6e 74 72 79 20 69 6e 20 74 68 65 20 72 65   entry in the re
23410 63 6f 72 64 20 61 74 0a 2a 2a 20 74 68 65 20 65  cord at.** the e
23420 6e 64 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20  nd of the index 
23430 6b 65 79 20 70 6f 69 6e 74 65 64 20 74 6f 20 62  key pointed to b
23440 79 20 63 75 72 73 6f 72 20 50 31 2e 20 20 54 68  y cursor P1.  Th
23450 69 73 20 69 6e 74 65 67 65 72 20 73 68 6f 75 6c  is integer shoul
23460 64 20 62 65 0a 2a 2a 20 74 68 65 20 72 6f 77 69  d be.** the rowi
23470 64 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 65  d of the table e
23480 6e 74 72 79 20 74 6f 20 77 68 69 63 68 20 74 68  ntry to which th
23490 69 73 20 69 6e 64 65 78 20 65 6e 74 72 79 20 70  is index entry p
234a0 6f 69 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  oints..**.** See
234b0 20 61 6c 73 6f 3a 20 52 6f 77 69 64 2c 20 4d 61   also: Rowid, Ma
234c0 6b 65 52 65 63 6f 72 64 2e 0a 2a 2f 0a 63 61 73  keRecord..*/.cas
234d0 65 20 4f 50 5f 49 64 78 52 6f 77 69 64 3a 20 7b  e OP_IdxRowid: {
234e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
234f0 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65   out2-prerelease
23500 20 2a 2f 0a 20 20 42 74 43 75 72 73 6f 72 20 2a   */.  BtCursor *
23510 70 43 72 73 72 3b 0a 20 20 56 64 62 65 43 75 72  pCrsr;.  VdbeCur
23520 73 6f 72 20 2a 70 43 3b 0a 20 20 69 36 34 20 72  sor *pC;.  i64 r
23530 6f 77 69 64 3b 0a 0a 20 20 61 73 73 65 72 74 28  owid;..  assert(
23540 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
23550 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
23560 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
23570 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
23580 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
23590 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e  ;.  pCrsr = pC->
235a0 70 43 75 72 73 6f 72 3b 0a 20 20 70 4f 75 74 2d  pCursor;.  pOut-
235b0 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c  >flags = MEM_Nul
235c0 6c 3b 0a 20 20 69 66 28 20 41 4c 57 41 59 53 28  l;.  if( ALWAYS(
235d0 70 43 72 73 72 21 3d 30 29 20 29 7b 0a 20 20 20  pCrsr!=0) ){.   
235e0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
235f0 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43  eCursorMoveto(pC
23600 29 3b 0a 20 20 20 20 69 66 28 20 4e 45 56 45 52  );.    if( NEVER
23610 28 72 63 29 20 29 20 67 6f 74 6f 20 61 62 6f 72  (rc) ) goto abor
23620 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
23630 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
23640 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d  deferredMoveto==
23650 30 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  0 );.    assert(
23660 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20   pC->isTable==0 
23670 29 3b 0a 20 20 20 20 69 66 28 20 21 70 43 2d 3e  );.    if( !pC->
23680 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 20  nullRow ){.     
23690 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
236a0 65 49 64 78 52 6f 77 69 64 28 64 62 2c 20 70 43  eIdxRowid(db, pC
236b0 72 73 72 2c 20 26 72 6f 77 69 64 29 3b 0a 20 20  rsr, &rowid);.  
236c0 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
236d0 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20  TE_OK ){.       
236e0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
236f0 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20  to_error;.      
23700 7d 0a 20 20 20 20 20 20 70 4f 75 74 2d 3e 75 2e  }.      pOut->u.
23710 69 20 3d 20 72 6f 77 69 64 3b 0a 20 20 20 20 20  i = rowid;.     
23720 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
23730 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 7d 0a 20 20  EM_Int;.    }.  
23740 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
23750 20 4f 70 63 6f 64 65 3a 20 49 64 78 47 45 20 50   Opcode: IdxGE P
23760 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
23770 0a 2a 2a 20 54 68 65 20 50 34 20 72 65 67 69 73  .** The P4 regis
23780 74 65 72 20 76 61 6c 75 65 73 20 62 65 67 69 6e  ter values begin
23790 6e 69 6e 67 20 77 69 74 68 20 50 33 20 66 6f 72  ning with P3 for
237a0 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e  m an unpacked in
237b0 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74  dex .** key that
237c0 20 6f 6d 69 74 73 20 74 68 65 20 52 4f 57 49 44   omits the ROWID
237d0 2e 20 20 43 6f 6d 70 61 72 65 20 74 68 69 73 20  .  Compare this 
237e0 6b 65 79 20 76 61 6c 75 65 20 61 67 61 69 6e 73  key value agains
237f0 74 20 74 68 65 20 69 6e 64 65 78 20 0a 2a 2a 20  t the index .** 
23800 74 68 61 74 20 50 31 20 69 73 20 63 75 72 72 65  that P1 is curre
23810 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f  ntly pointing to
23820 2c 20 69 67 6e 6f 72 69 6e 67 20 74 68 65 20 52  , ignoring the R
23830 4f 57 49 44 20 6f 6e 20 74 68 65 20 50 31 20 69  OWID on the P1 i
23840 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  ndex..**.** If t
23850 68 65 20 50 31 20 69 6e 64 65 78 20 65 6e 74 72  he P1 index entr
23860 79 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61  y is greater tha
23870 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68  n or equal to th
23880 65 20 6b 65 79 20 76 61 6c 75 65 0a 2a 2a 20 74  e key value.** t
23890 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20  hen jump to P2. 
238a0 20 4f 74 68 65 72 77 69 73 65 20 66 61 6c 6c 20   Otherwise fall 
238b0 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e  through to the n
238c0 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ext instruction.
238d0 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20  .**.** If P5 is 
238e0 6e 6f 6e 2d 7a 65 72 6f 20 74 68 65 6e 20 74 68  non-zero then th
238f0 65 20 6b 65 79 20 76 61 6c 75 65 20 69 73 20 69  e key value is i
23900 6e 63 72 65 61 73 65 64 20 62 79 20 61 6e 20 65  ncreased by an e
23910 70 73 69 6c 6f 6e 20 0a 2a 2a 20 70 72 69 6f 72  psilon .** prior
23920 20 74 6f 20 74 68 65 20 63 6f 6d 70 61 72 69 73   to the comparis
23930 6f 6e 2e 20 20 54 68 69 73 20 6d 61 6b 65 20 74  on.  This make t
23940 68 65 20 6f 70 63 6f 64 65 20 77 6f 72 6b 20 6c  he opcode work l
23950 69 6b 65 20 49 64 78 47 54 20 65 78 63 65 70 74  ike IdxGT except
23960 0a 2a 2a 20 74 68 61 74 20 69 66 20 74 68 65 20  .** that if the 
23970 6b 65 79 20 66 72 6f 6d 20 72 65 67 69 73 74 65  key from registe
23980 72 20 50 33 20 69 73 20 61 20 70 72 65 66 69 78  r P3 is a prefix
23990 20 6f 66 20 74 68 65 20 6b 65 79 20 69 6e 20 74   of the key in t
239a0 68 65 20 63 75 72 73 6f 72 2c 0a 2a 2a 20 74 68  he cursor,.** th
239b0 65 20 72 65 73 75 6c 74 20 69 73 20 66 61 6c 73  e result is fals
239c0 65 20 77 68 65 72 65 61 73 20 69 74 20 77 6f 75  e whereas it wou
239d0 6c 64 20 62 65 20 74 72 75 65 20 77 69 74 68 20  ld be true with 
239e0 49 64 78 47 54 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  IdxGT..*/./* Opc
239f0 6f 64 65 3a 20 49 64 78 4c 54 20 50 31 20 50 32  ode: IdxLT P1 P2
23a00 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20   P3 P4 P5.**.** 
23a10 54 68 65 20 50 34 20 72 65 67 69 73 74 65 72 20  The P4 register 
23a20 76 61 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e 67  values beginning
23a30 20 77 69 74 68 20 50 33 20 66 6f 72 6d 20 61 6e   with P3 form an
23a40 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20   unpacked index 
23a50 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d 69  .** key that omi
23a60 74 73 20 74 68 65 20 52 4f 57 49 44 2e 20 20 43  ts the ROWID.  C
23a70 6f 6d 70 61 72 65 20 74 68 69 73 20 6b 65 79 20  ompare this key 
23a80 76 61 6c 75 65 20 61 67 61 69 6e 73 74 20 74 68  value against th
23a90 65 20 69 6e 64 65 78 20 0a 2a 2a 20 74 68 61 74  e index .** that
23aa0 20 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79   P1 is currently
23ab0 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67   pointing to, ig
23ac0 6e 6f 72 69 6e 67 20 74 68 65 20 52 4f 57 49 44  noring the ROWID
23ad0 20 6f 6e 20 74 68 65 20 50 31 20 69 6e 64 65 78   on the P1 index
23ae0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50  ..**.** If the P
23af0 31 20 69 6e 64 65 78 20 65 6e 74 72 79 20 69 73  1 index entry is
23b00 20 6c 65 73 73 20 74 68 61 6e 20 74 68 65 20 6b   less than the k
23b10 65 79 20 76 61 6c 75 65 20 74 68 65 6e 20 6a 75  ey value then ju
23b20 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 20 4f 74 68  mp to P2..** Oth
23b30 65 72 77 69 73 65 20 66 61 6c 6c 20 74 68 72 6f  erwise fall thro
23b40 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ugh to the next 
23b50 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a  instruction..**.
23b60 2a 2a 20 49 66 20 50 35 20 69 73 20 6e 6f 6e 2d  ** If P5 is non-
23b70 7a 65 72 6f 20 74 68 65 6e 20 74 68 65 20 6b 65  zero then the ke
23b80 79 20 76 61 6c 75 65 20 69 73 20 69 6e 63 72 65  y value is incre
23b90 61 73 65 64 20 62 79 20 61 6e 20 65 70 73 69 6c  ased by an epsil
23ba0 6f 6e 20 70 72 69 6f 72 20 0a 2a 2a 20 74 6f 20  on prior .** to 
23bb0 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20  the comparison. 
23bc0 20 54 68 69 73 20 6d 61 6b 65 73 20 74 68 65 20   This makes the 
23bd0 6f 70 63 6f 64 65 20 77 6f 72 6b 20 6c 69 6b 65  opcode work like
23be0 20 49 64 78 4c 45 2e 0a 2a 2f 0a 63 61 73 65 20   IdxLE..*/.case 
23bf0 4f 50 5f 49 64 78 4c 54 3a 20 20 20 20 20 20 20  OP_IdxLT:       
23c00 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61     /* jump */.ca
23c10 73 65 20 4f 50 5f 49 64 78 47 45 3a 20 7b 20 20  se OP_IdxGE: {  
23c20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
23c30 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
23c40 43 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20  C;.  int res;.  
23c50 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72  UnpackedRecord r
23c60 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
23c70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
23c80 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
23c90 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
23ca0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
23cb0 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
23cc0 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 4f 72  assert( pC->isOr
23cd0 64 65 72 65 64 20 29 3b 0a 20 20 69 66 28 20 41  dered );.  if( A
23ce0 4c 57 41 59 53 28 70 43 2d 3e 70 43 75 72 73 6f  LWAYS(pC->pCurso
23cf0 72 21 3d 30 29 20 29 7b 0a 20 20 20 20 61 73 73  r!=0) ){.    ass
23d00 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65  ert( pC->deferre
23d10 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20  dMoveto==0 );.  
23d20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
23d30 35 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d  5==0 || pOp->p5=
23d40 3d 31 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  =1 );.    assert
23d50 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
23d60 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 20 20 72  4_INT32 );.    r
23d70 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e  .pKeyInfo = pC->
23d80 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 72 2e  pKeyInfo;.    r.
23d90 6e 46 69 65 6c 64 20 3d 20 28 75 31 36 29 70 4f  nField = (u16)pO
23da0 70 2d 3e 70 34 2e 69 3b 0a 20 20 20 20 69 66 28  p->p4.i;.    if(
23db0 20 70 4f 70 2d 3e 70 35 20 29 7b 0a 20 20 20 20   pOp->p5 ){.    
23dc0 20 20 72 2e 66 6c 61 67 73 20 3d 20 55 4e 50 41    r.flags = UNPA
23dd0 43 4b 45 44 5f 49 4e 43 52 4b 45 59 20 7c 20 55  CKED_INCRKEY | U
23de0 4e 50 41 43 4b 45 44 5f 49 47 4e 4f 52 45 5f 52  NPACKED_IGNORE_R
23df0 4f 57 49 44 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  OWID;.    }else{
23e00 0a 20 20 20 20 20 20 72 2e 66 6c 61 67 73 20 3d  .      r.flags =
23e10 20 55 4e 50 41 43 4b 45 44 5f 49 47 4e 4f 52 45   UNPACKED_IGNORE
23e20 5f 52 4f 57 49 44 3b 0a 20 20 20 20 7d 0a 20 20  _ROWID;.    }.  
23e30 20 20 72 2e 61 4d 65 6d 20 3d 20 26 61 4d 65 6d    r.aMem = &aMem
23e40 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 23 69 66 64 65  [pOp->p3];.#ifde
23e50 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
23e60 20 20 20 7b 20 69 6e 74 20 69 3b 20 66 6f 72 28     { int i; for(
23e70 69 3d 30 3b 20 69 3c 72 2e 6e 46 69 65 6c 64 3b  i=0; i<r.nField;
23e80 20 69 2b 2b 29 20 61 73 73 65 72 74 28 20 6d 65   i++) assert( me
23e90 6d 49 73 56 61 6c 69 64 28 26 72 2e 61 4d 65 6d  mIsValid(&r.aMem
23ea0 5b 69 5d 29 20 29 3b 20 7d 0a 23 65 6e 64 69 66  [i]) ); }.#endif
23eb0 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
23ec0 33 56 64 62 65 49 64 78 4b 65 79 43 6f 6d 70 61  3VdbeIdxKeyCompa
23ed0 72 65 28 70 43 2c 20 26 72 2c 20 26 72 65 73 29  re(pC, &r, &res)
23ee0 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 6f  ;.    if( pOp->o
23ef0 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 54 20  pcode==OP_IdxLT 
23f00 29 7b 0a 20 20 20 20 20 20 72 65 73 20 3d 20 2d  ){.      res = -
23f10 72 65 73 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  res;.    }else{.
23f20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
23f30 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64  p->opcode==OP_Id
23f40 78 47 45 20 29 3b 0a 20 20 20 20 20 20 72 65 73  xGE );.      res
23f50 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  ++;.    }.    if
23f60 28 20 72 65 73 3e 30 20 29 7b 0a 20 20 20 20 20  ( res>0 ){.     
23f70 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
23f80 31 20 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  1 ;.    }.  }.  
23f90 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
23fa0 6f 64 65 3a 20 44 65 73 74 72 6f 79 20 50 31 20  ode: Destroy P1 
23fb0 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
23fc0 44 65 6c 65 74 65 20 61 6e 20 65 6e 74 69 72 65  Delete an entire
23fd0 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20   database table 
23fe0 6f 72 20 69 6e 64 65 78 20 77 68 6f 73 65 20 72  or index whose r
23ff0 6f 6f 74 20 70 61 67 65 20 69 6e 20 74 68 65 20  oot page in the 
24000 64 61 74 61 62 61 73 65 0a 2a 2a 20 66 69 6c 65  database.** file
24010 20 69 73 20 67 69 76 65 6e 20 62 79 20 50 31 2e   is given by P1.
24020 0a 2a 2a 0a 2a 2a 20 54 68 65 20 74 61 62 6c 65  .**.** The table
24030 20 62 65 69 6e 67 20 64 65 73 74 72 6f 79 65 64   being destroyed
24040 20 69 73 20 69 6e 20 74 68 65 20 6d 61 69 6e 20   is in the main 
24050 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66  database file if
24060 20 50 33 3d 3d 30 2e 20 20 49 66 0a 2a 2a 20 50   P3==0.  If.** P
24070 33 3d 3d 31 20 74 68 65 6e 20 74 68 65 20 74 61  3==1 then the ta
24080 62 6c 65 20 74 6f 20 62 65 20 63 6c 65 61 72 20  ble to be clear 
24090 69 73 20 69 6e 20 74 68 65 20 61 75 78 69 6c 69  is in the auxili
240a0 61 72 79 20 64 61 74 61 62 61 73 65 20 66 69 6c  ary database fil
240b0 65 0a 2a 2a 20 74 68 61 74 20 69 73 20 75 73 65  e.** that is use
240c0 64 20 74 6f 20 73 74 6f 72 65 20 74 61 62 6c 65  d to store table
240d0 73 20 63 72 65 61 74 65 20 75 73 69 6e 67 20 43  s create using C
240e0 52 45 41 54 45 20 54 45 4d 50 4f 52 41 52 59 20  REATE TEMPORARY 
240f0 54 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  TABLE..**.** If 
24100 41 55 54 4f 56 41 43 55 55 4d 20 69 73 20 65 6e  AUTOVACUUM is en
24110 61 62 6c 65 64 20 74 68 65 6e 20 69 74 20 69 73  abled then it is
24120 20 70 6f 73 73 69 62 6c 65 20 74 68 61 74 20 61   possible that a
24130 6e 6f 74 68 65 72 20 72 6f 6f 74 20 70 61 67 65  nother root page
24140 0a 2a 2a 20 6d 69 67 68 74 20 62 65 20 6d 6f 76  .** might be mov
24150 65 64 20 69 6e 74 6f 20 74 68 65 20 6e 65 77 6c  ed into the newl
24160 79 20 64 65 6c 65 74 65 64 20 72 6f 6f 74 20 70  y deleted root p
24170 61 67 65 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  age in order to 
24180 6b 65 65 70 20 61 6c 6c 0a 2a 2a 20 72 6f 6f 74  keep all.** root
24190 20 70 61 67 65 73 20 63 6f 6e 74 69 67 75 6f 75   pages contiguou
241a0 73 20 61 74 20 74 68 65 20 62 65 67 69 6e 6e 69  s at the beginni
241b0 6e 67 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  ng of the databa
241c0 73 65 2e 20 20 54 68 65 20 66 6f 72 6d 65 72 0a  se.  The former.
241d0 2a 2a 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  ** value of the 
241e0 72 6f 6f 74 20 70 61 67 65 20 74 68 61 74 20 6d  root page that m
241f0 6f 76 65 64 20 2d 20 69 74 73 20 76 61 6c 75 65  oved - its value
24200 20 62 65 66 6f 72 65 20 74 68 65 20 6d 6f 76 65   before the move
24210 20 6f 63 63 75 72 72 65 64 20 2d 0a 2a 2a 20 69   occurred -.** i
24220 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  s stored in regi
24230 73 74 65 72 20 50 32 2e 20 20 49 66 20 6e 6f 20  ster P2.  If no 
24240 70 61 67 65 20 0a 2a 2a 20 6d 6f 76 65 6d 65 6e  page .** movemen
24250 74 20 77 61 73 20 72 65 71 75 69 72 65 64 20 28  t was required (
24260 62 65 63 61 75 73 65 20 74 68 65 20 74 61 62 6c  because the tabl
24270 65 20 62 65 69 6e 67 20 64 72 6f 70 70 65 64 20  e being dropped 
24280 77 61 73 20 61 6c 72 65 61 64 79 20 0a 2a 2a 20  was already .** 
24290 74 68 65 20 6c 61 73 74 20 6f 6e 65 20 69 6e 20  the last one in 
242a0 74 68 65 20 64 61 74 61 62 61 73 65 29 20 74 68  the database) th
242b0 65 6e 20 61 20 7a 65 72 6f 20 69 73 20 73 74 6f  en a zero is sto
242c0 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20  red in register 
242d0 50 32 2e 0a 2a 2a 20 49 66 20 41 55 54 4f 56 41  P2..** If AUTOVA
242e0 43 55 55 4d 20 69 73 20 64 69 73 61 62 6c 65 64  CUUM is disabled
242f0 20 74 68 65 6e 20 61 20 7a 65 72 6f 20 69 73 20   then a zero is 
24300 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74  stored in regist
24310 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  er P2..**.** See
24320 20 61 6c 73 6f 3a 20 43 6c 65 61 72 0a 2a 2f 0a   also: Clear.*/.
24330 63 61 73 65 20 4f 50 5f 44 65 73 74 72 6f 79 3a  case OP_Destroy:
24340 20 7b 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70   {     /* out2-p
24350 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69  rerelease */.  i
24360 6e 74 20 69 4d 6f 76 65 64 3b 0a 20 20 69 6e 74  nt iMoved;.  int
24370 20 69 43 6e 74 3b 0a 20 20 56 64 62 65 20 2a 70   iCnt;.  Vdbe *p
24380 56 64 62 65 3b 0a 20 20 69 6e 74 20 69 44 62 3b  Vdbe;.  int iDb;
24390 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
243a0 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
243b0 45 0a 20 20 69 43 6e 74 20 3d 20 30 3b 0a 20 20  E.  iCnt = 0;.  
243c0 66 6f 72 28 70 56 64 62 65 3d 64 62 2d 3e 70 56  for(pVdbe=db->pV
243d0 64 62 65 3b 20 70 56 64 62 65 3b 20 70 56 64 62  dbe; pVdbe; pVdb
243e0 65 20 3d 20 70 56 64 62 65 2d 3e 70 4e 65 78 74  e = pVdbe->pNext
243f0 29 7b 0a 20 20 20 20 69 66 28 20 70 56 64 62 65  ){.    if( pVdbe
24400 2d 3e 6d 61 67 69 63 3d 3d 56 44 42 45 5f 4d 41  ->magic==VDBE_MA
24410 47 49 43 5f 52 55 4e 20 26 26 20 70 56 64 62 65  GIC_RUN && pVdbe
24420 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64 3c 32  ->inVtabMethod<2
24430 20 26 26 20 70 56 64 62 65 2d 3e 70 63 3e 3d 30   && pVdbe->pc>=0
24440 20 29 7b 0a 20 20 20 20 20 20 69 43 6e 74 2b 2b   ){.      iCnt++
24450 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6c 73  ;.    }.  }.#els
24460 65 0a 20 20 69 43 6e 74 20 3d 20 64 62 2d 3e 61  e.  iCnt = db->a
24470 63 74 69 76 65 56 64 62 65 43 6e 74 3b 0a 23 65  ctiveVdbeCnt;.#e
24480 6e 64 69 66 0a 20 20 70 4f 75 74 2d 3e 66 6c 61  ndif.  pOut->fla
24490 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20  gs = MEM_Null;. 
244a0 20 69 66 28 20 69 43 6e 74 3e 31 20 29 7b 0a 20   if( iCnt>1 ){. 
244b0 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4c     rc = SQLITE_L
244c0 4f 43 4b 45 44 3b 0a 20 20 20 20 70 2d 3e 65 72  OCKED;.    p->er
244d0 72 6f 72 41 63 74 69 6f 6e 20 3d 20 4f 45 5f 41  rorAction = OE_A
244e0 62 6f 72 74 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  bort;.  }else{. 
244f0 20 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70 33     iDb = pOp->p3
24500 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 69 43  ;.    assert( iC
24510 6e 74 3d 3d 31 20 29 3b 0a 20 20 20 20 61 73 73  nt==1 );.    ass
24520 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61  ert( (p->btreeMa
24530 73 6b 20 26 20 28 31 3c 3c 69 44 62 29 29 21 3d  sk & (1<<iDb))!=
24540 30 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71  0 );.    rc = sq
24550 6c 69 74 65 33 42 74 72 65 65 44 72 6f 70 54 61  lite3BtreeDropTa
24560 62 6c 65 28 64 62 2d 3e 61 44 62 5b 69 44 62 5d  ble(db->aDb[iDb]
24570 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 31 2c 20 26  .pBt, pOp->p1, &
24580 69 4d 6f 76 65 64 29 3b 0a 20 20 20 20 70 4f 75  iMoved);.    pOu
24590 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49  t->flags = MEM_I
245a0 6e 74 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e  nt;.    pOut->u.
245b0 69 20 3d 20 69 4d 6f 76 65 64 3b 0a 23 69 66 6e  i = iMoved;.#ifn
245c0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
245d0 41 55 54 4f 56 41 43 55 55 4d 0a 20 20 20 20 69  AUTOVACUUM.    i
245e0 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
245f0 20 26 26 20 69 4d 6f 76 65 64 21 3d 30 20 29 7b   && iMoved!=0 ){
24600 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 52 6f  .      sqlite3Ro
24610 6f 74 50 61 67 65 4d 6f 76 65 64 28 26 64 62 2d  otPageMoved(&db-
24620 3e 61 44 62 5b 69 44 62 5d 2c 20 69 4d 6f 76 65  >aDb[iDb], iMove
24630 64 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 20  d, pOp->p1);.   
24640 20 20 20 72 65 73 65 74 53 63 68 65 6d 61 4f 6e     resetSchemaOn
24650 46 61 75 6c 74 20 3d 20 31 3b 0a 20 20 20 20 7d  Fault = 1;.    }
24660 0a 23 65 6e 64 69 66 0a 20 20 7d 0a 20 20 62 72  .#endif.  }.  br
24670 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
24680 65 3a 20 43 6c 65 61 72 20 50 31 20 50 32 20 50  e: Clear P1 P2 P
24690 33 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 61  3.**.** Delete a
246a0 6c 6c 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20 74  ll contents of t
246b0 68 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c  he database tabl
246c0 65 20 6f 72 20 69 6e 64 65 78 20 77 68 6f 73 65  e or index whose
246d0 20 72 6f 6f 74 20 70 61 67 65 0a 2a 2a 20 69 6e   root page.** in
246e0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
246f0 6c 65 20 69 73 20 67 69 76 65 6e 20 62 79 20 50  le is given by P
24700 31 2e 20 20 42 75 74 2c 20 75 6e 6c 69 6b 65 20  1.  But, unlike 
24710 44 65 73 74 72 6f 79 2c 20 64 6f 20 6e 6f 74 0a  Destroy, do not.
24720 2a 2a 20 72 65 6d 6f 76 65 20 74 68 65 20 74 61  ** remove the ta
24730 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 66 72 6f  ble or index fro
24740 6d 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  m the database f
24750 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 74  ile..**.** The t
24760 61 62 6c 65 20 62 65 69 6e 67 20 63 6c 65 61 72  able being clear
24770 20 69 73 20 69 6e 20 74 68 65 20 6d 61 69 6e 20   is in the main 
24780 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66  database file if
24790 20 50 32 3d 3d 30 2e 20 20 49 66 0a 2a 2a 20 50   P2==0.  If.** P
247a0 32 3d 3d 31 20 74 68 65 6e 20 74 68 65 20 74 61  2==1 then the ta
247b0 62 6c 65 20 74 6f 20 62 65 20 63 6c 65 61 72 20  ble to be clear 
247c0 69 73 20 69 6e 20 74 68 65 20 61 75 78 69 6c 69  is in the auxili
247d0 61 72 79 20 64 61 74 61 62 61 73 65 20 66 69 6c  ary database fil
247e0 65 0a 2a 2a 20 74 68 61 74 20 69 73 20 75 73 65  e.** that is use
247f0 64 20 74 6f 20 73 74 6f 72 65 20 74 61 62 6c 65  d to store table
24800 73 20 63 72 65 61 74 65 20 75 73 69 6e 67 20 43  s create using C
24810 52 45 41 54 45 20 54 45 4d 50 4f 52 41 52 59 20  REATE TEMPORARY 
24820 54 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  TABLE..**.** If 
24830 74 68 65 20 50 33 20 76 61 6c 75 65 20 69 73 20  the P3 value is 
24840 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 74  non-zero, then t
24850 68 65 20 74 61 62 6c 65 20 72 65 66 65 72 72 65  he table referre
24860 64 20 74 6f 20 6d 75 73 74 20 62 65 20 61 6e 0a  d to must be an.
24870 2a 2a 20 69 6e 74 6b 65 79 20 74 61 62 6c 65 20  ** intkey table 
24880 28 61 6e 20 53 51 4c 20 74 61 62 6c 65 2c 20 6e  (an SQL table, n
24890 6f 74 20 61 6e 20 69 6e 64 65 78 29 2e 20 49 6e  ot an index). In
248a0 20 74 68 69 73 20 63 61 73 65 20 74 68 65 20 72   this case the r
248b0 6f 77 20 63 68 61 6e 67 65 20 0a 2a 2a 20 63 6f  ow change .** co
248c0 75 6e 74 20 69 73 20 69 6e 63 72 65 6d 65 6e 74  unt is increment
248d0 65 64 20 62 79 20 74 68 65 20 6e 75 6d 62 65 72  ed by the number
248e0 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68 65 20   of rows in the 
248f0 74 61 62 6c 65 20 62 65 69 6e 67 20 63 6c 65 61  table being clea
24900 72 65 64 2e 20 0a 2a 2a 20 49 66 20 50 33 20 69  red. .** If P3 i
24910 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 7a  s greater than z
24920 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 76 61  ero, then the va
24930 6c 75 65 20 73 74 6f 72 65 64 20 69 6e 20 72 65  lue stored in re
24940 67 69 73 74 65 72 20 50 33 20 69 73 0a 2a 2a 20  gister P3 is.** 
24950 61 6c 73 6f 20 69 6e 63 72 65 6d 65 6e 74 65 64  also incremented
24960 20 62 79 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   by the number o
24970 66 20 72 6f 77 73 20 69 6e 20 74 68 65 20 74 61  f rows in the ta
24980 62 6c 65 20 62 65 69 6e 67 20 63 6c 65 61 72 65  ble being cleare
24990 64 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  d..**.** See als
249a0 6f 3a 20 44 65 73 74 72 6f 79 0a 2a 2f 0a 63 61  o: Destroy.*/.ca
249b0 73 65 20 4f 50 5f 43 6c 65 61 72 3a 20 7b 0a 20  se OP_Clear: {. 
249c0 20 69 6e 74 20 6e 43 68 61 6e 67 65 3b 0a 20 0a   int nChange;. .
249d0 20 20 6e 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20    nChange = 0;. 
249e0 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72   assert( (p->btr
249f0 65 65 4d 61 73 6b 20 26 20 28 31 3c 3c 70 4f 70  eeMask & (1<<pOp
24a00 2d 3e 70 32 29 29 21 3d 30 20 29 3b 0a 20 20 72  ->p2))!=0 );.  r
24a10 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
24a20 43 6c 65 61 72 54 61 62 6c 65 28 0a 20 20 20 20  ClearTable(.    
24a30 20 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70    db->aDb[pOp->p
24a40 32 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 31 2c  2].pBt, pOp->p1,
24a50 20 28 70 4f 70 2d 3e 70 33 20 3f 20 26 6e 43 68   (pOp->p3 ? &nCh
24a60 61 6e 67 65 20 3a 20 30 29 0a 20 20 29 3b 0a 20  ange : 0).  );. 
24a70 20 69 66 28 20 70 4f 70 2d 3e 70 33 20 29 7b 0a   if( pOp->p3 ){.
24a80 20 20 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20 2b      p->nChange +
24a90 3d 20 6e 43 68 61 6e 67 65 3b 0a 20 20 20 20 69  = nChange;.    i
24aa0 66 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 7b 0a  f( pOp->p3>0 ){.
24ab0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65        assert( me
24ac0 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70  mIsValid(&aMem[p
24ad0 4f 70 2d 3e 70 33 5d 29 20 29 3b 0a 20 20 20 20  Op->p3]) );.    
24ae0 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
24af0 67 65 28 70 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d  ge(p, &aMem[pOp-
24b00 3e 70 33 5d 29 3b 0a 20 20 20 20 20 20 61 4d 65  >p3]);.      aMe
24b10 6d 5b 70 4f 70 2d 3e 70 33 5d 2e 75 2e 69 20 2b  m[pOp->p3].u.i +
24b20 3d 20 6e 43 68 61 6e 67 65 3b 0a 20 20 20 20 7d  = nChange;.    }
24b30 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
24b40 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 72 65 61  ./* Opcode: Crea
24b50 74 65 54 61 62 6c 65 20 50 31 20 50 32 20 2a 20  teTable P1 P2 * 
24b60 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 6c 6c 6f 63 61  * *.**.** Alloca
24b70 74 65 20 61 20 6e 65 77 20 74 61 62 6c 65 20 69  te a new table i
24b80 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  n the main datab
24b90 61 73 65 20 66 69 6c 65 20 69 66 20 50 31 3d 3d  ase file if P1==
24ba0 30 20 6f 72 20 69 6e 20 74 68 65 0a 2a 2a 20 61  0 or in the.** a
24bb0 75 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73  uxiliary databas
24bc0 65 20 66 69 6c 65 20 69 66 20 50 31 3d 3d 31 20  e file if P1==1 
24bd0 6f 72 20 69 6e 20 61 6e 20 61 74 74 61 63 68 65  or in an attache
24be0 64 20 64 61 74 61 62 61 73 65 20 69 66 0a 2a 2a  d database if.**
24bf0 20 50 31 3e 31 2e 20 20 57 72 69 74 65 20 74 68   P1>1.  Write th
24c00 65 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62  e root page numb
24c10 65 72 20 6f 66 20 74 68 65 20 6e 65 77 20 74 61  er of the new ta
24c20 62 6c 65 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69  ble into.** regi
24c30 73 74 65 72 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68  ster P2.**.** Th
24c40 65 20 64 69 66 66 65 72 65 6e 63 65 20 62 65 74  e difference bet
24c50 77 65 65 6e 20 61 20 74 61 62 6c 65 20 61 6e 64  ween a table and
24c60 20 61 6e 20 69 6e 64 65 78 20 69 73 20 74 68 69   an index is thi
24c70 73 3a 20 20 41 20 74 61 62 6c 65 20 6d 75 73 74  s:  A table must
24c80 0a 2a 2a 20 68 61 76 65 20 61 20 34 2d 62 79 74  .** have a 4-byt
24c90 65 20 69 6e 74 65 67 65 72 20 6b 65 79 20 61 6e  e integer key an
24ca0 64 20 63 61 6e 20 68 61 76 65 20 61 72 62 69 74  d can have arbit
24cb0 72 61 72 79 20 64 61 74 61 2e 20 20 41 6e 20 69  rary data.  An i
24cc0 6e 64 65 78 0a 2a 2a 20 68 61 73 20 61 6e 20 61  ndex.** has an a
24cd0 72 62 69 74 72 61 72 79 20 6b 65 79 20 62 75 74  rbitrary key but
24ce0 20 6e 6f 20 64 61 74 61 2e 0a 2a 2a 0a 2a 2a 20   no data..**.** 
24cf0 53 65 65 20 61 6c 73 6f 3a 20 43 72 65 61 74 65  See also: Create
24d00 49 6e 64 65 78 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  Index.*/./* Opco
24d10 64 65 3a 20 43 72 65 61 74 65 49 6e 64 65 78 20  de: CreateIndex 
24d20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
24d30 2a 20 41 6c 6c 6f 63 61 74 65 20 61 20 6e 65 77  * Allocate a new
24d40 20 69 6e 64 65 78 20 69 6e 20 74 68 65 20 6d 61   index in the ma
24d50 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  in database file
24d60 20 69 66 20 50 31 3d 3d 30 20 6f 72 20 69 6e 20   if P1==0 or in 
24d70 74 68 65 0a 2a 2a 20 61 75 78 69 6c 69 61 72 79  the.** auxiliary
24d80 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69   database file i
24d90 66 20 50 31 3d 3d 31 20 6f 72 20 69 6e 20 61 6e  f P1==1 or in an
24da0 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61   attached databa
24db0 73 65 20 69 66 0a 2a 2a 20 50 31 3e 31 2e 20 20  se if.** P1>1.  
24dc0 57 72 69 74 65 20 74 68 65 20 72 6f 6f 74 20 70  Write the root p
24dd0 61 67 65 20 6e 75 6d 62 65 72 20 6f 66 20 74 68  age number of th
24de0 65 20 6e 65 77 20 74 61 62 6c 65 20 69 6e 74 6f  e new table into
24df0 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 32 2e  .** register P2.
24e00 0a 2a 2a 0a 2a 2a 20 53 65 65 20 64 6f 63 75 6d  .**.** See docum
24e10 65 6e 74 61 74 69 6f 6e 20 6f 6e 20 4f 50 5f 43  entation on OP_C
24e20 72 65 61 74 65 54 61 62 6c 65 20 66 6f 72 20 61  reateTable for a
24e30 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d  dditional inform
24e40 61 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ation..*/.case O
24e50 50 5f 43 72 65 61 74 65 49 6e 64 65 78 3a 20 20  P_CreateIndex:  
24e60 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
24e70 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a  2-prerelease */.
24e80 63 61 73 65 20 4f 50 5f 43 72 65 61 74 65 54 61  case OP_CreateTa
24e90 62 6c 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20  ble: {          
24ea0 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61  /* out2-prerelea
24eb0 73 65 20 2a 2f 0a 20 20 69 6e 74 20 70 67 6e 6f  se */.  int pgno
24ec0 3b 0a 20 20 69 6e 74 20 66 6c 61 67 73 3b 0a 20  ;.  int flags;. 
24ed0 20 44 62 20 2a 70 44 62 3b 0a 0a 20 20 70 67 6e   Db *pDb;..  pgn
24ee0 6f 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28  o = 0;.  assert(
24ef0 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
24f00 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29  Op->p1<db->nDb )
24f10 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e  ;.  assert( (p->
24f20 62 74 72 65 65 4d 61 73 6b 20 26 20 28 31 3c 3c  btreeMask & (1<<
24f30 70 4f 70 2d 3e 70 31 29 29 21 3d 30 20 29 3b 0a  pOp->p1))!=0 );.
24f40 20 20 70 44 62 20 3d 20 26 64 62 2d 3e 61 44 62    pDb = &db->aDb
24f50 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
24f60 65 72 74 28 20 70 44 62 2d 3e 70 42 74 21 3d 30  ert( pDb->pBt!=0
24f70 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f   );.  if( pOp->o
24f80 70 63 6f 64 65 3d 3d 4f 50 5f 43 72 65 61 74 65  pcode==OP_Create
24f90 54 61 62 6c 65 20 29 7b 0a 20 20 20 20 2f 2a 20  Table ){.    /* 
24fa0 66 6c 61 67 73 20 3d 20 42 54 52 45 45 5f 49 4e  flags = BTREE_IN
24fb0 54 4b 45 59 3b 20 2a 2f 0a 20 20 20 20 66 6c 61  TKEY; */.    fla
24fc0 67 73 20 3d 20 42 54 52 45 45 5f 49 4e 54 4b 45  gs = BTREE_INTKE
24fd0 59 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  Y;.  }else{.    
24fe0 66 6c 61 67 73 20 3d 20 42 54 52 45 45 5f 42 4c  flags = BTREE_BL
24ff0 4f 42 4b 45 59 3b 0a 20 20 7d 0a 20 20 72 63 20  OBKEY;.  }.  rc 
25000 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 72  = sqlite3BtreeCr
25010 65 61 74 65 54 61 62 6c 65 28 70 44 62 2d 3e 70  eateTable(pDb->p
25020 42 74 2c 20 26 70 67 6e 6f 2c 20 66 6c 61 67 73  Bt, &pgno, flags
25030 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  );.  pOut->u.i =
25040 20 70 67 6e 6f 3b 0a 20 20 62 72 65 61 6b 3b 0a   pgno;.  break;.
25050 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 61  }../* Opcode: Pa
25060 72 73 65 53 63 68 65 6d 61 20 50 31 20 50 32 20  rseSchema P1 P2 
25070 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61  * P4 *.**.** Rea
25080 64 20 61 6e 64 20 70 61 72 73 65 20 61 6c 6c 20  d and parse all 
25090 65 6e 74 72 69 65 73 20 66 72 6f 6d 20 74 68 65  entries from the
250a0 20 53 51 4c 49 54 45 5f 4d 41 53 54 45 52 20 74   SQLITE_MASTER t
250b0 61 62 6c 65 20 6f 66 20 64 61 74 61 62 61 73 65  able of database
250c0 20 50 31 0a 2a 2a 20 74 68 61 74 20 6d 61 74 63   P1.** that matc
250d0 68 20 74 68 65 20 57 48 45 52 45 20 63 6c 61 75  h the WHERE clau
250e0 73 65 20 50 34 2e 20 20 50 32 20 69 73 20 74 68  se P4.  P2 is th
250f0 65 20 22 66 6f 72 63 65 22 20 66 6c 61 67 2e 20  e "force" flag. 
25100 20 20 41 6c 77 61 79 73 20 64 6f 0a 2a 2a 20 74    Always do.** t
25110 68 65 20 70 61 72 73 69 6e 67 20 69 66 20 50 32  he parsing if P2
25120 20 69 73 20 74 72 75 65 2e 20 20 49 66 20 50 32   is true.  If P2
25130 20 69 73 20 66 61 6c 73 65 2c 20 74 68 65 6e 20   is false, then 
25140 74 68 69 73 20 72 6f 75 74 69 6e 65 20 69 73 20  this routine is 
25150 61 0a 2a 2a 20 6e 6f 2d 6f 70 20 69 66 20 74 68  a.** no-op if th
25160 65 20 73 63 68 65 6d 61 20 69 73 20 6e 6f 74 20  e schema is not 
25170 63 75 72 72 65 6e 74 6c 79 20 6c 6f 61 64 65 64  currently loaded
25180 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64  .  In other word
25190 73 2c 20 69 66 20 50 32 0a 2a 2a 20 69 73 20 66  s, if P2.** is f
251a0 61 6c 73 65 2c 20 74 68 65 20 53 51 4c 49 54 45  alse, the SQLITE
251b0 5f 4d 41 53 54 45 52 20 74 61 62 6c 65 20 69 73  _MASTER table is
251c0 20 6f 6e 6c 79 20 70 61 72 73 65 64 20 69 66 20   only parsed if 
251d0 74 68 65 20 72 65 73 74 20 6f 66 20 74 68 65 0a  the rest of the.
251e0 2a 2a 20 73 63 68 65 6d 61 20 69 73 20 61 6c 72  ** schema is alr
251f0 65 61 64 79 20 6c 6f 61 64 65 64 20 69 6e 74 6f  eady loaded into
25200 20 74 68 65 20 73 79 6d 62 6f 6c 20 74 61 62 6c   the symbol tabl
25210 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  e..**.** This op
25220 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74 68 65  code invokes the
25230 20 70 61 72 73 65 72 20 74 6f 20 63 72 65 61 74   parser to creat
25240 65 20 61 20 6e 65 77 20 76 69 72 74 75 61 6c 20  e a new virtual 
25250 6d 61 63 68 69 6e 65 2c 0a 2a 2a 20 74 68 65 6e  machine,.** then
25260 20 72 75 6e 73 20 74 68 65 20 6e 65 77 20 76 69   runs the new vi
25270 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 2e 20 20  rtual machine.  
25280 49 74 20 69 73 20 74 68 75 73 20 61 20 72 65 2d  It is thus a re-
25290 65 6e 74 72 61 6e 74 20 6f 70 63 6f 64 65 2e 0a  entrant opcode..
252a0 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 61 72 73 65  */.case OP_Parse
252b0 53 63 68 65 6d 61 3a 20 7b 0a 20 20 69 6e 74 20  Schema: {.  int 
252c0 69 44 62 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61  iDb;.  const cha
252d0 72 20 2a 7a 4d 61 73 74 65 72 3b 0a 20 20 63 68  r *zMaster;.  ch
252e0 61 72 20 2a 7a 53 71 6c 3b 0a 20 20 49 6e 69 74  ar *zSql;.  Init
252f0 44 61 74 61 20 69 6e 69 74 44 61 74 61 3b 0a 0a  Data initData;..
25300 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70 31 3b    iDb = pOp->p1;
25310 0a 20 20 61 73 73 65 72 74 28 20 69 44 62 3e 3d  .  assert( iDb>=
25320 30 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62  0 && iDb<db->nDb
25330 20 29 3b 0a 0a 20 20 2f 2a 20 49 66 20 70 4f 70   );..  /* If pOp
25340 2d 3e 70 32 20 69 73 20 30 2c 20 74 68 65 6e 20  ->p2 is 0, then 
25350 74 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 62  this opcode is b
25360 65 69 6e 67 20 65 78 65 63 75 74 65 64 20 74 6f  eing executed to
25370 20 72 65 61 64 20 61 0a 20 20 2a 2a 20 73 69 6e   read a.  ** sin
25380 67 6c 65 20 72 6f 77 2c 20 66 6f 72 20 65 78 61  gle row, for exa
25390 6d 70 6c 65 20 74 68 65 20 72 6f 77 20 63 6f 72  mple the row cor
253a0 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 61 20  responding to a 
253b0 6e 65 77 20 69 6e 64 65 78 0a 20 20 2a 2a 20 63  new index.  ** c
253c0 72 65 61 74 65 64 20 62 79 20 74 68 69 73 20 56  reated by this V
253d0 44 42 45 2c 20 66 72 6f 6d 20 74 68 65 20 73 71  DBE, from the sq
253e0 6c 69 74 65 5f 6d 61 73 74 65 72 20 74 61 62 6c  lite_master tabl
253f0 65 2e 20 49 74 20 6f 6e 6c 79 0a 20 20 2a 2a 20  e. It only.  ** 
25400 64 6f 65 73 20 74 68 69 73 20 69 66 20 74 68 65  does this if the
25410 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 69   corresponding i
25420 6e 2d 6d 65 6d 6f 72 79 20 73 63 68 65 6d 61 20  n-memory schema 
25430 69 73 20 63 75 72 72 65 6e 74 6c 79 0a 20 20 2a  is currently.  *
25440 2a 20 6c 6f 61 64 65 64 2e 20 4f 74 68 65 72 77  * loaded. Otherw
25450 69 73 65 2c 20 74 68 65 20 6e 65 77 20 69 6e 64  ise, the new ind
25460 65 78 20 64 65 66 69 6e 69 74 69 6f 6e 20 63 61  ex definition ca
25470 6e 20 62 65 20 6c 6f 61 64 65 64 20 61 6c 6f 6e  n be loaded alon
25480 67 0a 20 20 2a 2a 20 77 69 74 68 20 74 68 65 20  g.  ** with the 
25490 72 65 73 74 20 6f 66 20 74 68 65 20 73 63 68 65  rest of the sche
254a0 6d 61 20 77 68 65 6e 20 69 74 20 69 73 20 72 65  ma when it is re
254b0 71 75 69 72 65 64 2e 0a 20 20 2a 2a 0a 20 20 2a  quired..  **.  *
254c0 2a 20 41 6c 74 68 6f 75 67 68 20 74 68 65 20 6d  * Although the m
254d0 75 74 65 78 20 6f 6e 20 74 68 65 20 42 74 53 68  utex on the BtSh
254e0 61 72 65 64 20 6f 62 6a 65 63 74 20 74 68 61 74  ared object that
254f0 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 0a   corresponds to.
25500 20 20 2a 2a 20 64 61 74 61 62 61 73 65 20 69 44    ** database iD
25510 62 20 28 74 68 65 20 64 61 74 61 62 61 73 65 20  b (the database 
25520 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 73  containing the s
25530 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 74 61 62  qlite_master tab
25540 6c 65 0a 20 20 2a 2a 20 72 65 61 64 20 62 79 20  le.  ** read by 
25550 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
25560 29 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 68  ) is currently h
25570 65 6c 64 2c 20 69 74 20 69 73 20 6e 65 63 65 73  eld, it is neces
25580 73 61 72 79 20 74 6f 0a 20 20 2a 2a 20 6f 62 74  sary to.  ** obt
25590 61 69 6e 20 74 68 65 20 6d 75 74 65 78 65 73 20  ain the mutexes 
255a0 6f 6e 20 61 6c 6c 20 61 74 74 61 63 68 65 64 20  on all attached 
255b0 64 61 74 61 62 61 73 65 73 20 62 65 66 6f 72 65  databases before
255c0 20 63 68 65 63 6b 69 6e 67 20 69 66 0a 20 20 2a   checking if.  *
255d0 2a 20 74 68 65 20 73 63 68 65 6d 61 20 6f 66 20  * the schema of 
255e0 69 44 62 20 69 73 20 6c 6f 61 64 65 64 2e 20 54  iDb is loaded. T
255f0 68 69 73 20 69 73 20 62 65 63 61 75 73 65 2c 20  his is because, 
25600 61 74 20 74 68 65 20 73 74 61 72 74 20 6f 66 0a  at the start of.
25610 20 20 2a 2a 20 74 68 65 20 73 71 6c 69 74 65 33    ** the sqlite3
25620 5f 65 78 65 63 28 29 20 63 61 6c 6c 20 62 65 6c  _exec() call bel
25630 6f 77 2c 20 53 51 4c 69 74 65 20 77 69 6c 6c 20  ow, SQLite will 
25640 69 6e 76 6f 6b 65 20 0a 20 20 2a 2a 20 73 71 6c  invoke .  ** sql
25650 69 74 65 33 42 74 72 65 65 45 6e 74 65 72 41 6c  ite3BtreeEnterAl
25660 6c 28 29 2e 20 49 66 20 61 6c 6c 20 6d 75 74 65  l(). If all mute
25670 78 65 73 20 61 72 65 20 6e 6f 74 20 61 6c 72 65  xes are not alre
25680 61 64 79 20 68 65 6c 64 2c 20 74 68 65 0a 20 20  ady held, the.  
25690 2a 2a 20 69 44 62 20 6d 75 74 65 78 20 6d 61 79  ** iDb mutex may
256a0 20 62 65 20 74 65 6d 70 6f 72 61 72 69 6c 79 20   be temporarily 
256b0 72 65 6c 65 61 73 65 64 20 74 6f 20 61 76 6f 69  released to avoi
256c0 64 20 64 65 61 64 6c 6f 63 6b 2e 20 49 66 20 0a  d deadlock. If .
256d0 20 20 2a 2a 20 74 68 69 73 20 68 61 70 70 65 6e    ** this happen
256e0 73 2c 20 74 68 65 6e 20 73 6f 6d 65 20 6f 74 68  s, then some oth
256f0 65 72 20 74 68 72 65 61 64 20 6d 61 79 20 64 65  er thread may de
25700 6c 65 74 65 20 74 68 65 20 69 6e 2d 6d 65 6d 6f  lete the in-memo
25710 72 79 20 0a 20 20 2a 2a 20 73 63 68 65 6d 61 20  ry .  ** schema 
25720 6f 66 20 64 61 74 61 62 61 73 65 20 69 44 62 20  of database iDb 
25730 62 65 66 6f 72 65 20 74 68 65 20 53 51 4c 20 73  before the SQL s
25740 74 61 74 65 6d 65 6e 74 20 72 75 6e 73 2e 20 54  tatement runs. T
25750 68 65 20 73 63 68 65 6d 61 0a 20 20 2a 2a 20 77  he schema.  ** w
25760 69 6c 6c 20 6e 6f 74 20 62 65 20 72 65 6c 6f 61  ill not be reloa
25770 64 65 64 20 62 65 63 75 61 73 65 20 74 68 65 20  ded becuase the 
25780 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20 66 6c  db->init.busy fl
25790 61 67 20 69 73 20 73 65 74 2e 20 54 68 69 73 0a  ag is set. This.
257a0 20 20 2a 2a 20 63 61 6e 20 72 65 73 75 6c 74 20    ** can result 
257b0 69 6e 20 61 20 22 6e 6f 20 73 75 63 68 20 74 61  in a "no such ta
257c0 62 6c 65 3a 20 73 71 6c 69 74 65 5f 6d 61 73 74  ble: sqlite_mast
257d0 65 72 22 20 6f 72 20 22 6d 61 6c 66 6f 72 6d 65  er" or "malforme
257e0 64 0a 20 20 2a 2a 20 64 61 74 61 62 61 73 65 20  d.  ** database 
257f0 73 63 68 65 6d 61 22 20 65 72 72 6f 72 20 62 65  schema" error be
25800 69 6e 67 20 72 65 74 75 72 6e 65 64 20 74 6f 20  ing returned to 
25810 74 68 65 20 75 73 65 72 2e 0a 20 20 2a 2f 0a 20  the user..  */. 
25820 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
25830 42 74 72 65 65 48 6f 6c 64 73 4d 75 74 65 78 28  BtreeHoldsMutex(
25840 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74  db->aDb[iDb].pBt
25850 29 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 42 74  ) );.  sqlite3Bt
25860 72 65 65 45 6e 74 65 72 41 6c 6c 28 64 62 29 3b  reeEnterAll(db);
25870 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 20 7c  .  if( pOp->p2 |
25880 7c 20 44 62 48 61 73 50 72 6f 70 65 72 74 79 28  | DbHasProperty(
25890 64 62 2c 20 69 44 62 2c 20 44 42 5f 53 63 68 65  db, iDb, DB_Sche
258a0 6d 61 4c 6f 61 64 65 64 29 20 29 7b 0a 20 20 20  maLoaded) ){.   
258b0 20 7a 4d 61 73 74 65 72 20 3d 20 53 43 48 45 4d   zMaster = SCHEM
258c0 41 5f 54 41 42 4c 45 28 69 44 62 29 3b 0a 20 20  A_TABLE(iDb);.  
258d0 20 20 69 6e 69 74 44 61 74 61 2e 64 62 20 3d 20    initData.db = 
258e0 64 62 3b 0a 20 20 20 20 69 6e 69 74 44 61 74 61  db;.    initData
258f0 2e 69 44 62 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a  .iDb = pOp->p1;.
25900 20 20 20 20 69 6e 69 74 44 61 74 61 2e 70 7a 45      initData.pzE
25910 72 72 4d 73 67 20 3d 20 26 70 2d 3e 7a 45 72 72  rrMsg = &p->zErr
25920 4d 73 67 3b 0a 20 20 20 20 7a 53 71 6c 20 3d 20  Msg;.    zSql = 
25930 73 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 64  sqlite3MPrintf(d
25940 62 2c 0a 20 20 20 20 20 20 20 22 53 45 4c 45 43  b,.       "SELEC
25950 54 20 6e 61 6d 65 2c 20 72 6f 6f 74 70 61 67 65  T name, rootpage
25960 2c 20 73 71 6c 20 46 52 4f 4d 20 27 25 71 27 2e  , sql FROM '%q'.
25970 25 73 20 57 48 45 52 45 20 25 73 20 4f 52 44 45  %s WHERE %s ORDE
25980 52 20 42 59 20 72 6f 77 69 64 22 2c 0a 20 20 20  R BY rowid",.   
25990 20 20 20 20 64 62 2d 3e 61 44 62 5b 69 44 62 5d      db->aDb[iDb]
259a0 2e 7a 4e 61 6d 65 2c 20 7a 4d 61 73 74 65 72 2c  .zName, zMaster,
259b0 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20   pOp->p4.z);.   
259c0 20 69 66 28 20 7a 53 71 6c 3d 3d 30 20 29 7b 0a   if( zSql==0 ){.
259d0 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
259e0 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 20 20 7d 65 6c  E_NOMEM;.    }el
259f0 73 65 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74  se{.      assert
25a00 28 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 3d  ( db->init.busy=
25a10 3d 30 20 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e  =0 );.      db->
25a20 69 6e 69 74 2e 62 75 73 79 20 3d 20 31 3b 0a 20  init.busy = 1;. 
25a30 20 20 20 20 20 69 6e 69 74 44 61 74 61 2e 72 63       initData.rc
25a40 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20   = SQLITE_OK;.  
25a50 20 20 20 20 61 73 73 65 72 74 28 20 21 64 62 2d      assert( !db-
25a60 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 3b  >mallocFailed );
25a70 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69  .      rc = sqli
25a80 74 65 33 5f 65 78 65 63 28 64 62 2c 20 7a 53 71  te3_exec(db, zSq
25a90 6c 2c 20 73 71 6c 69 74 65 33 49 6e 69 74 43 61  l, sqlite3InitCa
25aa0 6c 6c 62 61 63 6b 2c 20 26 69 6e 69 74 44 61 74  llback, &initDat
25ab0 61 2c 20 30 29 3b 0a 20 20 20 20 20 20 69 66 28  a, 0);.      if(
25ac0 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
25ad0 20 72 63 20 3d 20 69 6e 69 74 44 61 74 61 2e 72   rc = initData.r
25ae0 63 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  c;.      sqlite3
25af0 44 62 46 72 65 65 28 64 62 2c 20 7a 53 71 6c 29  DbFree(db, zSql)
25b00 3b 0a 20 20 20 20 20 20 64 62 2d 3e 69 6e 69 74  ;.      db->init
25b10 2e 62 75 73 79 20 3d 20 30 3b 0a 20 20 20 20 7d  .busy = 0;.    }
25b20 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 42 74  .  }.  sqlite3Bt
25b30 72 65 65 4c 65 61 76 65 41 6c 6c 28 64 62 29 3b  reeLeaveAll(db);
25b40 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54  .  if( rc==SQLIT
25b50 45 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20 20 67  E_NOMEM ){.    g
25b60 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a  oto no_mem;.  }.
25b70 20 20 62 72 65 61 6b 3b 20 20 0a 7d 0a 0a 23 69    break;  .}..#i
25b80 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
25b90 45 5f 4f 4d 49 54 5f 41 4e 41 4c 59 5a 45 29 0a  E_OMIT_ANALYZE).
25ba0 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 6f 61 64 41  /* Opcode: LoadA
25bb0 6e 61 6c 79 73 69 73 20 50 31 20 2a 20 2a 20 2a  nalysis P1 * * *
25bc0 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 74 68   *.**.** Read th
25bd0 65 20 73 71 6c 69 74 65 5f 73 74 61 74 31 20 74  e sqlite_stat1 t
25be0 61 62 6c 65 20 66 6f 72 20 64 61 74 61 62 61 73  able for databas
25bf0 65 20 50 31 20 61 6e 64 20 6c 6f 61 64 20 74 68  e P1 and load th
25c00 65 20 63 6f 6e 74 65 6e 74 0a 2a 2a 20 6f 66 20  e content.** of 
25c10 74 68 61 74 20 74 61 62 6c 65 20 69 6e 74 6f 20  that table into 
25c20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 69 6e 64  the internal ind
25c30 65 78 20 68 61 73 68 20 74 61 62 6c 65 2e 20 20  ex hash table.  
25c40 54 68 69 73 20 77 69 6c 6c 20 63 61 75 73 65 0a  This will cause.
25c50 2a 2a 20 74 68 65 20 61 6e 61 6c 79 73 69 73 20  ** the analysis 
25c60 74 6f 20 62 65 20 75 73 65 64 20 77 68 65 6e 20  to be used when 
25c70 70 72 65 70 61 72 69 6e 67 20 61 6c 6c 20 73 75  preparing all su
25c80 62 73 65 71 75 65 6e 74 20 71 75 65 72 69 65 73  bsequent queries
25c90 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 6f 61  ..*/.case OP_Loa
25ca0 64 41 6e 61 6c 79 73 69 73 3a 20 7b 0a 20 20 61  dAnalysis: {.  a
25cb0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
25cc0 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d  0 && pOp->p1<db-
25cd0 3e 6e 44 62 20 29 3b 0a 20 20 72 63 20 3d 20 73  >nDb );.  rc = s
25ce0 71 6c 69 74 65 33 41 6e 61 6c 79 73 69 73 4c 6f  qlite3AnalysisLo
25cf0 61 64 28 64 62 2c 20 70 4f 70 2d 3e 70 31 29 3b  ad(db, pOp->p1);
25d00 0a 20 20 62 72 65 61 6b 3b 20 20 0a 7d 0a 23 65  .  break;  .}.#e
25d10 6e 64 69 66 20 2f 2a 20 21 64 65 66 69 6e 65 64  ndif /* !defined
25d20 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4e 41  (SQLITE_OMIT_ANA
25d30 4c 59 5a 45 29 20 2a 2f 0a 0a 2f 2a 20 4f 70 63  LYZE) */../* Opc
25d40 6f 64 65 3a 20 44 72 6f 70 54 61 62 6c 65 20 50  ode: DropTable P
25d50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  1 * * P4 *.**.**
25d60 20 52 65 6d 6f 76 65 20 74 68 65 20 69 6e 74 65   Remove the inte
25d70 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79 29  rnal (in-memory)
25d80 20 64 61 74 61 20 73 74 72 75 63 74 75 72 65 73   data structures
25d90 20 74 68 61 74 20 64 65 73 63 72 69 62 65 0a 2a   that describe.*
25da0 2a 20 74 68 65 20 74 61 62 6c 65 20 6e 61 6d 65  * the table name
25db0 64 20 50 34 20 69 6e 20 64 61 74 61 62 61 73 65  d P4 in database
25dc0 20 50 31 2e 20 20 54 68 69 73 20 69 73 20 63 61   P1.  This is ca
25dd0 6c 6c 65 64 20 61 66 74 65 72 20 61 20 74 61 62  lled after a tab
25de0 6c 65 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65 64  le.** is dropped
25df0 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65   in order to kee
25e00 70 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 72  p the internal r
25e10 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66  epresentation of
25e20 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 63   the.** schema c
25e30 6f 6e 73 69 73 74 65 6e 74 20 77 69 74 68 20 77  onsistent with w
25e40 68 61 74 20 69 73 20 6f 6e 20 64 69 73 6b 2e 0a  hat is on disk..
25e50 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 72 6f 70 54  */.case OP_DropT
25e60 61 62 6c 65 3a 20 7b 0a 20 20 73 71 6c 69 74 65  able: {.  sqlite
25e70 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65  3UnlinkAndDelete
25e80 54 61 62 6c 65 28 64 62 2c 20 70 4f 70 2d 3e 70  Table(db, pOp->p
25e90 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20  1, pOp->p4.z);. 
25ea0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
25eb0 63 6f 64 65 3a 20 44 72 6f 70 49 6e 64 65 78 20  code: DropIndex 
25ec0 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a  P1 * * P4 *.**.*
25ed0 2a 20 52 65 6d 6f 76 65 20 74 68 65 20 69 6e 74  * Remove the int
25ee0 65 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79  ernal (in-memory
25ef0 29 20 64 61 74 61 20 73 74 72 75 63 74 75 72 65  ) data structure
25f00 73 20 74 68 61 74 20 64 65 73 63 72 69 62 65 0a  s that describe.
25f10 2a 2a 20 74 68 65 20 69 6e 64 65 78 20 6e 61 6d  ** the index nam
25f20 65 64 20 50 34 20 69 6e 20 64 61 74 61 62 61 73  ed P4 in databas
25f30 65 20 50 31 2e 20 20 54 68 69 73 20 69 73 20 63  e P1.  This is c
25f40 61 6c 6c 65 64 20 61 66 74 65 72 20 61 6e 20 69  alled after an i
25f50 6e 64 65 78 0a 2a 2a 20 69 73 20 64 72 6f 70 70  ndex.** is dropp
25f60 65 64 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b  ed in order to k
25f70 65 65 70 20 74 68 65 20 69 6e 74 65 72 6e 61 6c  eep the internal
25f80 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   representation 
25f90 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61  of the.** schema
25fa0 20 63 6f 6e 73 69 73 74 65 6e 74 20 77 69 74 68   consistent with
25fb0 20 77 68 61 74 20 69 73 20 6f 6e 20 64 69 73 6b   what is on disk
25fc0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 72 6f  ..*/.case OP_Dro
25fd0 70 49 6e 64 65 78 3a 20 7b 0a 20 20 73 71 6c 69  pIndex: {.  sqli
25fe0 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65  te3UnlinkAndDele
25ff0 74 65 49 6e 64 65 78 28 64 62 2c 20 70 4f 70 2d  teIndex(db, pOp-
26000 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b  >p1, pOp->p4.z);
26010 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
26020 4f 70 63 6f 64 65 3a 20 44 72 6f 70 54 72 69 67  Opcode: DropTrig
26030 67 65 72 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a  ger P1 * * P4 *.
26040 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74 68 65  **.** Remove the
26050 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d 6d 65   internal (in-me
26060 6d 6f 72 79 29 20 64 61 74 61 20 73 74 72 75 63  mory) data struc
26070 74 75 72 65 73 20 74 68 61 74 20 64 65 73 63 72  tures that descr
26080 69 62 65 0a 2a 2a 20 74 68 65 20 74 72 69 67 67  ibe.** the trigg
26090 65 72 20 6e 61 6d 65 64 20 50 34 20 69 6e 20 64  er named P4 in d
260a0 61 74 61 62 61 73 65 20 50 31 2e 20 20 54 68 69  atabase P1.  Thi
260b0 73 20 69 73 20 63 61 6c 6c 65 64 20 61 66 74 65  s is called afte
260c0 72 20 61 20 74 72 69 67 67 65 72 0a 2a 2a 20 69  r a trigger.** i
260d0 73 20 64 72 6f 70 70 65 64 20 69 6e 20 6f 72 64  s dropped in ord
260e0 65 72 20 74 6f 20 6b 65 65 70 20 74 68 65 20 69  er to keep the i
260f0 6e 74 65 72 6e 61 6c 20 72 65 70 72 65 73 65 6e  nternal represen
26100 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a  tation of the.**
26110 20 73 63 68 65 6d 61 20 63 6f 6e 73 69 73 74 65   schema consiste
26120 6e 74 20 77 69 74 68 20 77 68 61 74 20 69 73 20  nt with what is 
26130 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65  on disk..*/.case
26140 20 4f 50 5f 44 72 6f 70 54 72 69 67 67 65 72 3a   OP_DropTrigger:
26150 20 7b 0a 20 20 73 71 6c 69 74 65 33 55 6e 6c 69   {.  sqlite3Unli
26160 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72 69 67 67  nkAndDeleteTrigg
26170 65 72 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20  er(db, pOp->p1, 
26180 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62 72  pOp->p4.z);.  br
26190 65 61 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e 64 65 66  eak;.}...#ifndef
261a0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 54   SQLITE_OMIT_INT
261b0 45 47 52 49 54 59 5f 43 48 45 43 4b 0a 2f 2a 20  EGRITY_CHECK./* 
261c0 4f 70 63 6f 64 65 3a 20 49 6e 74 65 67 72 69 74  Opcode: Integrit
261d0 79 43 6b 20 50 31 20 50 32 20 50 33 20 2a 20 50  yCk P1 P2 P3 * P
261e0 35 0a 2a 2a 0a 2a 2a 20 44 6f 20 61 6e 20 61 6e  5.**.** Do an an
261f0 61 6c 79 73 69 73 20 6f 66 20 74 68 65 20 63 75  alysis of the cu
26200 72 72 65 6e 74 6c 79 20 6f 70 65 6e 20 64 61 74  rrently open dat
26210 61 62 61 73 65 2e 20 20 53 74 6f 72 65 20 69 6e  abase.  Store in
26220 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31 20  .** register P1 
26230 74 68 65 20 74 65 78 74 20 6f 66 20 61 6e 20 65  the text of an e
26240 72 72 6f 72 20 6d 65 73 73 61 67 65 20 64 65 73  rror message des
26250 63 72 69 62 69 6e 67 20 61 6e 79 20 70 72 6f 62  cribing any prob
26260 6c 65 6d 73 2e 0a 2a 2a 20 49 66 20 6e 6f 20 70  lems..** If no p
26270 72 6f 62 6c 65 6d 73 20 61 72 65 20 66 6f 75 6e  roblems are foun
26280 64 2c 20 73 74 6f 72 65 20 61 20 4e 55 4c 4c 20  d, store a NULL 
26290 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a  in register P1..
262a0 2a 2a 0a 2a 2a 20 54 68 65 20 72 65 67 69 73 74  **.** The regist
262b0 65 72 20 50 33 20 63 6f 6e 74 61 69 6e 73 20 74  er P3 contains t
262c0 68 65 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65  he maximum numbe
262d0 72 20 6f 66 20 61 6c 6c 6f 77 65 64 20 65 72 72  r of allowed err
262e0 6f 72 73 2e 0a 2a 2a 20 41 74 20 6d 6f 73 74 20  ors..** At most 
262f0 72 65 67 28 50 33 29 20 65 72 72 6f 72 73 20 77  reg(P3) errors w
26300 69 6c 6c 20 62 65 20 72 65 70 6f 72 74 65 64 2e  ill be reported.
26310 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  .** In other wor
26320 64 73 2c 20 74 68 65 20 61 6e 61 6c 79 73 69 73  ds, the analysis
26330 20 73 74 6f 70 73 20 61 73 20 73 6f 6f 6e 20 61   stops as soon a
26340 73 20 72 65 67 28 50 31 29 20 65 72 72 6f 72 73  s reg(P1) errors
26350 20 61 72 65 20 0a 2a 2a 20 73 65 65 6e 2e 20 20   are .** seen.  
26360 52 65 67 28 50 31 29 20 69 73 20 75 70 64 61 74  Reg(P1) is updat
26370 65 64 20 77 69 74 68 20 74 68 65 20 6e 75 6d 62  ed with the numb
26380 65 72 20 6f 66 20 65 72 72 6f 72 73 20 72 65 6d  er of errors rem
26390 61 69 6e 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 54 68  aining..**.** Th
263a0 65 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62  e root page numb
263b0 65 72 73 20 6f 66 20 61 6c 6c 20 74 61 62 6c 65  ers of all table
263c0 73 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  s in the databas
263d0 65 20 61 72 65 20 69 6e 74 65 67 65 72 0a 2a 2a  e are integer.**
263e0 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 28 50   stored in reg(P
263f0 31 29 2c 20 72 65 67 28 50 31 2b 31 29 2c 20 72  1), reg(P1+1), r
26400 65 67 28 50 31 2b 32 29 2c 20 2e 2e 2e 2e 20 20  eg(P1+2), ....  
26410 54 68 65 72 65 20 61 72 65 20 50 32 20 74 61 62  There are P2 tab
26420 6c 65 73 0a 2a 2a 20 74 6f 74 61 6c 2e 0a 2a 2a  les.** total..**
26430 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 6e 6f 74  .** If P5 is not
26440 20 7a 65 72 6f 2c 20 74 68 65 20 63 68 65 63 6b   zero, the check
26450 20 69 73 20 64 6f 6e 65 20 6f 6e 20 74 68 65 20   is done on the 
26460 61 75 78 69 6c 69 61 72 79 20 64 61 74 61 62 61  auxiliary databa
26470 73 65 0a 2a 2a 20 66 69 6c 65 2c 20 6e 6f 74 20  se.** file, not 
26480 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
26490 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68  e file..**.** Th
264a0 69 73 20 6f 70 63 6f 64 65 20 69 73 20 75 73 65  is opcode is use
264b0 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74  d to implement t
264c0 68 65 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65  he integrity_che
264d0 63 6b 20 70 72 61 67 6d 61 2e 0a 2a 2f 0a 63 61  ck pragma..*/.ca
264e0 73 65 20 4f 50 5f 49 6e 74 65 67 72 69 74 79 43  se OP_IntegrityC
264f0 6b 3a 20 7b 0a 20 20 69 6e 74 20 6e 52 6f 6f 74  k: {.  int nRoot
26500 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72  ;      /* Number
26510 20 6f 66 20 74 61 62 6c 65 73 20 74 6f 20 63 68   of tables to ch
26520 65 63 6b 2e 20 20 28 4e 75 6d 62 65 72 20 6f 66  eck.  (Number of
26530 20 72 6f 6f 74 20 70 61 67 65 73 2e 29 20 2a 2f   root pages.) */
26540 0a 20 20 69 6e 74 20 2a 61 52 6f 6f 74 3b 20 20  .  int *aRoot;  
26550 20 20 20 2f 2a 20 41 72 72 61 79 20 6f 66 20 72     /* Array of r
26560 6f 6f 74 70 61 67 65 20 6e 75 6d 62 65 72 73 20  ootpage numbers 
26570 66 6f 72 20 74 61 62 6c 65 73 20 74 6f 20 62 65  for tables to be
26580 20 63 68 65 63 6b 65 64 20 2a 2f 0a 20 20 69 6e   checked */.  in
26590 74 20 6a 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  t j;          /*
265a0 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 20 2a 2f   Loop counter */
265b0 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20 20 20 20  .  int nErr;    
265c0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
265d0 65 72 72 6f 72 73 20 72 65 70 6f 72 74 65 64 20  errors reported 
265e0 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 3b 20 20 20  */.  char *z;   
265f0 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20       /* Text of 
26600 74 68 65 20 65 72 72 6f 72 20 72 65 70 6f 72 74  the error report
26610 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 6e 45 72 72   */.  Mem *pnErr
26620 3b 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65  ;     /* Registe
26630 72 20 6b 65 65 70 69 6e 67 20 74 72 61 63 6b 20  r keeping track 
26640 6f 66 20 65 72 72 6f 72 73 20 72 65 6d 61 69 6e  of errors remain
26650 69 6e 67 20 2a 2f 0a 20 20 0a 20 20 6e 52 6f 6f  ing */.  .  nRoo
26660 74 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61  t = pOp->p2;.  a
26670 73 73 65 72 74 28 20 6e 52 6f 6f 74 3e 30 20 29  ssert( nRoot>0 )
26680 3b 0a 20 20 61 52 6f 6f 74 20 3d 20 73 71 6c 69  ;.  aRoot = sqli
26690 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28 64  te3DbMallocRaw(d
266a0 62 2c 20 73 69 7a 65 6f 66 28 69 6e 74 29 2a 28  b, sizeof(int)*(
266b0 6e 52 6f 6f 74 2b 31 29 20 29 3b 0a 20 20 69 66  nRoot+1) );.  if
266c0 28 20 61 52 6f 6f 74 3d 3d 30 20 29 20 67 6f 74  ( aRoot==0 ) got
266d0 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 61 73 73 65  o no_mem;.  asse
266e0 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26  rt( pOp->p3>0 &&
266f0 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65   pOp->p3<=p->nMe
26700 6d 20 29 3b 0a 20 20 70 6e 45 72 72 20 3d 20 26  m );.  pnErr = &
26710 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
26720 20 61 73 73 65 72 74 28 20 28 70 6e 45 72 72 2d   assert( (pnErr-
26730 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
26740 29 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  )!=0 );.  assert
26750 28 20 28 70 6e 45 72 72 2d 3e 66 6c 61 67 73 20  ( (pnErr->flags 
26760 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42  & (MEM_Str|MEM_B
26770 6c 6f 62 29 29 3d 3d 30 20 29 3b 0a 20 20 70 49  lob))==0 );.  pI
26780 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
26790 70 31 5d 3b 0a 20 20 66 6f 72 28 6a 3d 30 3b 20  p1];.  for(j=0; 
267a0 6a 3c 6e 52 6f 6f 74 3b 20 6a 2b 2b 29 7b 0a 20  j<nRoot; j++){. 
267b0 20 20 20 61 52 6f 6f 74 5b 6a 5d 20 3d 20 28 69     aRoot[j] = (i
267c0 6e 74 29 73 71 6c 69 74 65 33 56 64 62 65 49 6e  nt)sqlite3VdbeIn
267d0 74 56 61 6c 75 65 28 26 70 49 6e 31 5b 6a 5d 29  tValue(&pIn1[j])
267e0 3b 0a 20 20 7d 0a 20 20 61 52 6f 6f 74 5b 6a 5d  ;.  }.  aRoot[j]
267f0 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20   = 0;.  assert( 
26800 70 4f 70 2d 3e 70 35 3c 64 62 2d 3e 6e 44 62 20  pOp->p5<db->nDb 
26810 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d  );.  assert( (p-
26820 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28 31 3c  >btreeMask & (1<
26830 3c 70 4f 70 2d 3e 70 35 29 29 21 3d 30 20 29 3b  <pOp->p5))!=0 );
26840 0a 20 20 7a 20 3d 20 73 71 6c 69 74 65 33 42 74  .  z = sqlite3Bt
26850 72 65 65 49 6e 74 65 67 72 69 74 79 43 68 65 63  reeIntegrityChec
26860 6b 28 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70  k(db->aDb[pOp->p
26870 35 5d 2e 70 42 74 2c 20 61 52 6f 6f 74 2c 20 6e  5].pBt, aRoot, n
26880 52 6f 6f 74 2c 0a 20 20 20 20 20 20 20 20 20 20  Root,.          
26890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
268a0 20 20 20 20 20 20 20 28 69 6e 74 29 70 6e 45 72         (int)pnEr
268b0 72 2d 3e 75 2e 69 2c 20 26 6e 45 72 72 29 3b 0a  r->u.i, &nErr);.
268c0 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28    sqlite3DbFree(
268d0 64 62 2c 20 61 52 6f 6f 74 29 3b 0a 20 20 70 6e  db, aRoot);.  pn
268e0 45 72 72 2d 3e 75 2e 69 20 2d 3d 20 6e 45 72 72  Err->u.i -= nErr
268f0 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
26900 65 6d 53 65 74 4e 75 6c 6c 28 70 49 6e 31 29 3b  emSetNull(pIn1);
26910 0a 20 20 69 66 28 20 6e 45 72 72 3d 3d 30 20 29  .  if( nErr==0 )
26920 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 7a 3d  {.    assert( z=
26930 3d 30 20 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66  =0 );.  }else if
26940 28 20 7a 3d 3d 30 20 29 7b 0a 20 20 20 20 67 6f  ( z==0 ){.    go
26950 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 65 6c  to no_mem;.  }el
26960 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  se{.    sqlite3V
26970 64 62 65 4d 65 6d 53 65 74 53 74 72 28 70 49 6e  dbeMemSetStr(pIn
26980 31 2c 20 7a 2c 20 2d 31 2c 20 53 51 4c 49 54 45  1, z, -1, SQLITE
26990 5f 55 54 46 38 2c 20 73 71 6c 69 74 65 33 5f 66  _UTF8, sqlite3_f
269a0 72 65 65 29 3b 0a 20 20 7d 0a 20 20 55 50 44 41  ree);.  }.  UPDA
269b0 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
269c0 70 49 6e 31 29 3b 0a 20 20 73 71 6c 69 74 65 33  pIn1);.  sqlite3
269d0 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69  VdbeChangeEncodi
269e0 6e 67 28 70 49 6e 31 2c 20 65 6e 63 6f 64 69 6e  ng(pIn1, encodin
269f0 67 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23  g);.  break;.}.#
26a00 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
26a10 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54 59 5f 43  OMIT_INTEGRITY_C
26a20 48 45 43 4b 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f  HECK */../* Opco
26a30 64 65 3a 20 52 6f 77 53 65 74 41 64 64 20 50 31  de: RowSetAdd P1
26a40 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
26a50 49 6e 73 65 72 74 20 74 68 65 20 69 6e 74 65 67  Insert the integ
26a60 65 72 20 76 61 6c 75 65 20 68 65 6c 64 20 62 79  er value held by
26a70 20 72 65 67 69 73 74 65 72 20 50 32 20 69 6e 74   register P2 int
26a80 6f 20 61 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65  o a boolean inde
26a90 78 0a 2a 2a 20 68 65 6c 64 20 69 6e 20 72 65 67  x.** held in reg
26aa0 69 73 74 65 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20  ister P1..**.** 
26ab0 41 6e 20 61 73 73 65 72 74 69 6f 6e 20 66 61 69  An assertion fai
26ac0 6c 73 20 69 66 20 50 32 20 69 73 20 6e 6f 74 20  ls if P2 is not 
26ad0 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2f 0a 63  an integer..*/.c
26ae0 61 73 65 20 4f 50 5f 52 6f 77 53 65 74 41 64 64  ase OP_RowSetAdd
26af0 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20 69 6e 31  : {       /* in1
26b00 2c 20 69 6e 32 20 2a 2f 0a 20 20 70 49 6e 31 20  , in2 */.  pIn1 
26b10 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
26b20 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d  ;.  pIn2 = &aMem
26b30 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73  [pOp->p2];.  ass
26b40 65 72 74 28 20 28 70 49 6e 32 2d 3e 66 6c 61 67  ert( (pIn2->flag
26b50 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20  s & MEM_Int)!=0 
26b60 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  );.  if( (pIn1->
26b70 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53  flags & MEM_RowS
26b80 65 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71  et)==0 ){.    sq
26b90 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 52  lite3VdbeMemSetR
26ba0 6f 77 53 65 74 28 70 49 6e 31 29 3b 0a 20 20 20  owSet(pIn1);.   
26bb0 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67   if( (pIn1->flag
26bc0 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d  s & MEM_RowSet)=
26bd0 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  =0 ) goto no_mem
26be0 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 52  ;.  }.  sqlite3R
26bf0 6f 77 53 65 74 49 6e 73 65 72 74 28 70 49 6e 31  owSetInsert(pIn1
26c00 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20 70 49 6e  ->u.pRowSet, pIn
26c10 32 2d 3e 75 2e 69 29 3b 0a 20 20 62 72 65 61 6b  2->u.i);.  break
26c20 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
26c30 52 6f 77 53 65 74 52 65 61 64 20 50 31 20 50 32  RowSetRead P1 P2
26c40 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 45 78   P3 * *.**.** Ex
26c50 74 72 61 63 74 20 74 68 65 20 73 6d 61 6c 6c 65  tract the smalle
26c60 73 74 20 76 61 6c 75 65 20 66 72 6f 6d 20 62 6f  st value from bo
26c70 6f 6c 65 61 6e 20 69 6e 64 65 78 20 50 31 20 61  olean index P1 a
26c80 6e 64 20 70 75 74 20 74 68 61 74 20 76 61 6c 75  nd put that valu
26c90 65 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74  e into.** regist
26ca0 65 72 20 50 33 2e 20 20 4f 72 2c 20 69 66 20 62  er P3.  Or, if b
26cb0 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 20 50 31 20  oolean index P1 
26cc0 69 73 20 69 6e 69 74 69 61 6c 6c 79 20 65 6d 70  is initially emp
26cd0 74 79 2c 20 6c 65 61 76 65 20 50 33 0a 2a 2a 20  ty, leave P3.** 
26ce0 75 6e 63 68 61 6e 67 65 64 20 61 6e 64 20 6a 75  unchanged and ju
26cf0 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f  mp to instructio
26d00 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  n P2..*/.case OP
26d10 5f 52 6f 77 53 65 74 52 65 61 64 3a 20 7b 20 20  _RowSetRead: {  
26d20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
26d30 31 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69 36 34  1, out3 */.  i64
26d40 20 76 61 6c 3b 0a 20 20 43 48 45 43 4b 5f 46 4f   val;.  CHECK_FO
26d50 52 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20 70  R_INTERRUPT;.  p
26d60 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
26d70 3e 70 31 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e  >p1];.  if( (pIn
26d80 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52  1->flags & MEM_R
26d90 6f 77 53 65 74 29 3d 3d 30 20 0a 20 20 20 7c 7c  owSet)==0 .   ||
26da0 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 4e 65   sqlite3RowSetNe
26db0 78 74 28 70 49 6e 31 2d 3e 75 2e 70 52 6f 77 53  xt(pIn1->u.pRowS
26dc0 65 74 2c 20 26 76 61 6c 29 3d 3d 30 0a 20 20 29  et, &val)==0.  )
26dd0 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20 62 6f 6f  {.    /* The boo
26de0 6c 65 61 6e 20 69 6e 64 65 78 20 69 73 20 65 6d  lean index is em
26df0 70 74 79 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74  pty */.    sqlit
26e00 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c  e3VdbeMemSetNull
26e10 28 70 49 6e 31 29 3b 0a 20 20 20 20 70 63 20 3d  (pIn1);.    pc =
26e20 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
26e30 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 41 20  }else{.    /* A 
26e40 76 61 6c 75 65 20 77 61 73 20 70 75 6c 6c 65 64  value was pulled
26e50 20 66 72 6f 6d 20 74 68 65 20 69 6e 64 65 78 20   from the index 
26e60 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  */.    sqlite3Vd
26e70 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 26 61  beMemSetInt64(&a
26e80 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 2c 20 76 61  Mem[pOp->p3], va
26e90 6c 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  l);.  }.  break;
26ea0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  .}../* Opcode: R
26eb0 6f 77 53 65 74 54 65 73 74 20 50 31 20 50 32 20  owSetTest P1 P2 
26ec0 50 33 20 50 34 0a 2a 2a 0a 2a 2a 20 52 65 67 69  P3 P4.**.** Regi
26ed0 73 74 65 72 20 50 33 20 69 73 20 61 73 73 75 6d  ster P3 is assum
26ee0 65 64 20 74 6f 20 68 6f 6c 64 20 61 20 36 34 2d  ed to hold a 64-
26ef0 62 69 74 20 69 6e 74 65 67 65 72 20 76 61 6c 75  bit integer valu
26f00 65 2e 20 49 66 20 72 65 67 69 73 74 65 72 20 50  e. If register P
26f10 31 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 61 20  1.** contains a 
26f20 52 6f 77 53 65 74 20 6f 62 6a 65 63 74 20 61 6e  RowSet object an
26f30 64 20 74 68 61 74 20 52 6f 77 53 65 74 20 6f 62  d that RowSet ob
26f40 6a 65 63 74 20 63 6f 6e 74 61 69 6e 73 0a 2a 2a  ject contains.**
26f50 20 74 68 65 20 76 61 6c 75 65 20 68 65 6c 64 20   the value held 
26f60 69 6e 20 50 33 2c 20 6a 75 6d 70 20 74 6f 20 72  in P3, jump to r
26f70 65 67 69 73 74 65 72 20 50 32 2e 20 4f 74 68 65  egister P2. Othe
26f80 72 77 69 73 65 2c 20 69 6e 73 65 72 74 20 74 68  rwise, insert th
26f90 65 0a 2a 2a 20 69 6e 74 65 67 65 72 20 69 6e 20  e.** integer in 
26fa0 50 33 20 69 6e 74 6f 20 74 68 65 20 52 6f 77 53  P3 into the RowS
26fb0 65 74 20 61 6e 64 20 63 6f 6e 74 69 6e 75 65 20  et and continue 
26fc0 6f 6e 20 74 6f 20 74 68 65 0a 2a 2a 20 6e 65 78  on to the.** nex
26fd0 74 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20  t opcode..**.** 
26fe0 54 68 65 20 52 6f 77 53 65 74 20 6f 62 6a 65 63  The RowSet objec
26ff0 74 20 69 73 20 6f 70 74 69 6d 69 7a 65 64 20 66  t is optimized f
27000 6f 72 20 74 68 65 20 63 61 73 65 20 77 68 65 72  or the case wher
27010 65 20 73 75 63 63 65 73 73 69 76 65 20 73 65 74  e successive set
27020 73 0a 2a 2a 20 6f 66 20 69 6e 74 65 67 65 72 73  s.** of integers
27030 2c 20 77 68 65 72 65 20 65 61 63 68 20 73 65 74  , where each set
27040 20 63 6f 6e 74 61 69 6e 73 20 6e 6f 20 64 75 70   contains no dup
27050 6c 69 63 61 74 65 73 2e 20 45 61 63 68 20 73 65  licates. Each se
27060 74 0a 2a 2a 20 6f 66 20 76 61 6c 75 65 73 20 69  t.** of values i
27070 73 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20  s identified by 
27080 61 20 75 6e 69 71 75 65 20 50 34 20 76 61 6c 75  a unique P4 valu
27090 65 2e 20 54 68 65 20 66 69 72 73 74 20 73 65 74  e. The first set
270a0 0a 2a 2a 20 6d 75 73 74 20 68 61 76 65 20 50 34  .** must have P4
270b0 3d 3d 30 2c 20 74 68 65 20 66 69 6e 61 6c 20 73  ==0, the final s
270c0 65 74 20 50 34 3d 2d 31 2e 20 20 50 34 20 6d 75  et P4=-1.  P4 mu
270d0 73 74 20 62 65 20 65 69 74 68 65 72 20 2d 31 20  st be either -1 
270e0 6f 72 0a 2a 2a 20 6e 6f 6e 2d 6e 65 67 61 74 69  or.** non-negati
270f0 76 65 2e 20 20 46 6f 72 20 6e 6f 6e 2d 6e 65 67  ve.  For non-neg
27100 61 74 69 76 65 20 76 61 6c 75 65 73 20 6f 66 20  ative values of 
27110 50 34 20 6f 6e 6c 79 20 74 68 65 20 6c 6f 77 65  P4 only the lowe
27120 72 20 34 0a 2a 2a 20 62 69 74 73 20 61 72 65 20  r 4.** bits are 
27130 73 69 67 6e 69 66 69 63 61 6e 74 2e 0a 2a 2a 0a  significant..**.
27140 2a 2a 20 54 68 69 73 20 61 6c 6c 6f 77 73 20 6f  ** This allows o
27150 70 74 69 6d 69 7a 61 74 69 6f 6e 73 3a 20 28 61  ptimizations: (a
27160 29 20 77 68 65 6e 20 50 34 3d 3d 30 20 74 68 65  ) when P4==0 the
27170 72 65 20 69 73 20 6e 6f 20 6e 65 65 64 20 74 6f  re is no need to
27180 20 74 65 73 74 0a 2a 2a 20 74 68 65 20 72 6f 77   test.** the row
27190 73 65 74 20 6f 62 6a 65 63 74 20 66 6f 72 20 50  set object for P
271a0 33 2c 20 61 73 20 69 74 20 69 73 20 67 75 61 72  3, as it is guar
271b0 61 6e 74 65 65 64 20 6e 6f 74 20 74 6f 20 63 6f  anteed not to co
271c0 6e 74 61 69 6e 20 69 74 2c 0a 2a 2a 20 28 62 29  ntain it,.** (b)
271d0 20 77 68 65 6e 20 50 34 3d 3d 2d 31 20 74 68 65   when P4==-1 the
271e0 72 65 20 69 73 20 6e 6f 20 6e 65 65 64 20 74 6f  re is no need to
271f0 20 69 6e 73 65 72 74 20 74 68 65 20 76 61 6c 75   insert the valu
27200 65 2c 20 61 73 20 69 74 20 77 69 6c 6c 0a 2a 2a  e, as it will.**
27210 20 6e 65 76 65 72 20 62 65 20 74 65 73 74 65 64   never be tested
27220 20 66 6f 72 2c 20 61 6e 64 20 28 63 29 20 77 68   for, and (c) wh
27230 65 6e 20 61 20 76 61 6c 75 65 20 74 68 61 74 20  en a value that 
27240 69 73 20 70 61 72 74 20 6f 66 20 73 65 74 20 58  is part of set X
27250 20 69 73 0a 2a 2a 20 69 6e 73 65 72 74 65 64 2c   is.** inserted,
27260 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6e 65 65   there is no nee
27270 64 20 74 6f 20 73 65 61 72 63 68 20 74 6f 20 73  d to search to s
27280 65 65 20 69 66 20 74 68 65 20 73 61 6d 65 20 76  ee if the same v
27290 61 6c 75 65 20 77 61 73 0a 2a 2a 20 70 72 65 76  alue was.** prev
272a0 69 6f 75 73 6c 79 20 69 6e 73 65 72 74 65 64 20  iously inserted 
272b0 61 73 20 70 61 72 74 20 6f 66 20 73 65 74 20 58  as part of set X
272c0 20 28 6f 6e 6c 79 20 69 66 20 69 74 20 77 61 73   (only if it was
272d0 20 70 72 65 76 69 6f 75 73 6c 79 0a 2a 2a 20 69   previously.** i
272e0 6e 73 65 72 74 65 64 20 61 73 20 70 61 72 74 20  nserted as part 
272f0 6f 66 20 73 6f 6d 65 20 6f 74 68 65 72 20 73 65  of some other se
27300 74 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  t)..*/.case OP_R
27310 6f 77 53 65 74 54 65 73 74 3a 20 7b 20 20 20 20  owSetTest: {    
27320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27330 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69   /* jump, in1, i
27340 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 69 53 65 74  n3 */.  int iSet
27350 3b 0a 20 20 69 6e 74 20 65 78 69 73 74 73 3b 0a  ;.  int exists;.
27360 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
27370 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 33  pOp->p1];.  pIn3
27380 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
27390 5d 3b 0a 20 20 69 53 65 74 20 3d 20 70 4f 70 2d  ];.  iSet = pOp-
273a0 3e 70 34 2e 69 3b 0a 20 20 61 73 73 65 72 74 28  >p4.i;.  assert(
273b0 20 70 49 6e 33 2d 3e 66 6c 61 67 73 26 4d 45 4d   pIn3->flags&MEM
273c0 5f 49 6e 74 20 29 3b 0a 0a 20 20 2f 2a 20 49 66  _Int );..  /* If
273d0 20 74 68 65 72 65 20 69 73 20 61 6e 79 74 68 69   there is anythi
273e0 6e 67 20 6f 74 68 65 72 20 74 68 61 6e 20 61 20  ng other than a 
273f0 72 6f 77 73 65 74 20 6f 62 6a 65 63 74 20 69 6e  rowset object in
27400 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 50 31 2c   memory cell P1,
27410 0a 20 20 2a 2a 20 64 65 6c 65 74 65 20 69 74 20  .  ** delete it 
27420 6e 6f 77 20 61 6e 64 20 69 6e 69 74 69 61 6c 69  now and initiali
27430 7a 65 20 50 31 20 77 69 74 68 20 61 6e 20 65 6d  ze P1 with an em
27440 70 74 79 20 72 6f 77 73 65 74 0a 20 20 2a 2f 0a  pty rowset.  */.
27450 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
27460 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29  gs & MEM_RowSet)
27470 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  ==0 ){.    sqlit
27480 65 33 56 64 62 65 4d 65 6d 53 65 74 52 6f 77 53  e3VdbeMemSetRowS
27490 65 74 28 70 49 6e 31 29 3b 0a 20 20 20 20 69 66  et(pIn1);.    if
274a0 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
274b0 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20   MEM_RowSet)==0 
274c0 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
274d0 20 7d 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f   }..  assert( pO
274e0 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e  p->p4type==P4_IN
274f0 54 33 32 20 29 3b 0a 20 20 61 73 73 65 72 74 28  T32 );.  assert(
27500 20 69 53 65 74 3d 3d 2d 31 20 7c 7c 20 69 53 65   iSet==-1 || iSe
27510 74 3e 3d 30 20 29 3b 0a 20 20 69 66 28 20 69 53  t>=0 );.  if( iS
27520 65 74 20 29 7b 0a 20 20 20 20 65 78 69 73 74 73  et ){.    exists
27530 20 3d 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74   = sqlite3RowSet
27540 54 65 73 74 28 70 49 6e 31 2d 3e 75 2e 70 52 6f  Test(pIn1->u.pRo
27550 77 53 65 74 2c 20 0a 20 20 20 20 20 20 20 20 20  wSet, .         
27560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27570 20 20 20 20 20 20 28 75 38 29 28 69 53 65 74 3e        (u8)(iSet>
27580 3d 30 20 3f 20 69 53 65 74 20 26 20 30 78 66 20  =0 ? iSet & 0xf 
27590 3a 20 30 78 66 66 29 2c 0a 20 20 20 20 20 20 20  : 0xff),.       
275a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
275b0 20 20 20 20 20 20 20 20 70 49 6e 33 2d 3e 75 2e          pIn3->u.
275c0 69 29 3b 0a 20 20 20 20 69 66 28 20 65 78 69 73  i);.    if( exis
275d0 74 73 20 29 7b 0a 20 20 20 20 20 20 70 63 20 3d  ts ){.      pc =
275e0 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
275f0 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d      break;.    }
27600 0a 20 20 7d 0a 20 20 69 66 28 20 69 53 65 74 3e  .  }.  if( iSet>
27610 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  =0 ){.    sqlite
27620 33 52 6f 77 53 65 74 49 6e 73 65 72 74 28 70 49  3RowSetInsert(pI
27630 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20 70  n1->u.pRowSet, p
27640 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20 20 7d 0a 20  In3->u.i);.  }. 
27650 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e   break;.}...#ifn
27660 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
27670 54 52 49 47 47 45 52 0a 0a 2f 2a 20 4f 70 63 6f  TRIGGER../* Opco
27680 64 65 3a 20 50 72 6f 67 72 61 6d 20 50 31 20 50  de: Program P1 P
27690 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20  2 P3 P4 *.**.** 
276a0 45 78 65 63 75 74 65 20 74 68 65 20 74 72 69 67  Execute the trig
276b0 67 65 72 20 70 72 6f 67 72 61 6d 20 70 61 73 73  ger program pass
276c0 65 64 20 61 73 20 50 34 20 28 74 79 70 65 20 50  ed as P4 (type P
276d0 34 5f 53 55 42 50 52 4f 47 52 41 4d 29 2e 20 0a  4_SUBPROGRAM). .
276e0 2a 2a 0a 2a 2a 20 50 31 20 63 6f 6e 74 61 69 6e  **.** P1 contain
276f0 73 20 74 68 65 20 61 64 64 72 65 73 73 20 6f 66  s the address of
27700 20 74 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c   the memory cell
27710 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74   that contains t
27720 68 65 20 66 69 72 73 74 20 6d 65 6d 6f 72 79 20  he first memory 
27730 0a 2a 2a 20 63 65 6c 6c 20 69 6e 20 61 6e 20 61  .** cell in an a
27740 72 72 61 79 20 6f 66 20 76 61 6c 75 65 73 20 75  rray of values u
27750 73 65 64 20 61 73 20 61 72 67 75 6d 65 6e 74 73  sed as arguments
27760 20 74 6f 20 74 68 65 20 73 75 62 2d 70 72 6f 67   to the sub-prog
27770 72 61 6d 2e 20 50 32 20 0a 2a 2a 20 63 6f 6e 74  ram. P2 .** cont
27780 61 69 6e 73 20 74 68 65 20 61 64 64 72 65 73 73  ains the address
27790 20 74 6f 20 6a 75 6d 70 20 74 6f 20 69 66 20 74   to jump to if t
277a0 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 74  he sub-program t
277b0 68 72 6f 77 73 20 61 6e 20 49 47 4e 4f 52 45 20  hrows an IGNORE 
277c0 0a 2a 2a 20 65 78 63 65 70 74 69 6f 6e 20 75 73  .** exception us
277d0 69 6e 67 20 74 68 65 20 52 41 49 53 45 28 29 20  ing the RAISE() 
277e0 66 75 6e 63 74 69 6f 6e 2e 20 52 65 67 69 73 74  function. Regist
277f0 65 72 20 50 33 20 63 6f 6e 74 61 69 6e 73 20 74  er P3 contains t
27800 68 65 20 61 64 64 72 65 73 73 20 0a 2a 2a 20 6f  he address .** o
27810 66 20 61 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20  f a memory cell 
27820 69 6e 20 74 68 69 73 20 28 74 68 65 20 70 61 72  in this (the par
27830 65 6e 74 29 20 56 4d 20 74 68 61 74 20 69 73 20  ent) VM that is 
27840 75 73 65 64 20 74 6f 20 61 6c 6c 6f 63 61 74 65  used to allocate
27850 20 74 68 65 20 0a 2a 2a 20 6d 65 6d 6f 72 79 20   the .** memory 
27860 72 65 71 75 69 72 65 64 20 62 79 20 74 68 65 20  required by the 
27870 73 75 62 2d 76 64 62 65 20 61 74 20 72 75 6e 74  sub-vdbe at runt
27880 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73  ime..**.** P4 is
27890 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68   a pointer to th
278a0 65 20 56 4d 20 63 6f 6e 74 61 69 6e 69 6e 67 20  e VM containing 
278b0 74 68 65 20 74 72 69 67 67 65 72 20 70 72 6f 67  the trigger prog
278c0 72 61 6d 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ram..*/.case OP_
278d0 50 72 6f 67 72 61 6d 3a 20 7b 20 20 20 20 20 20  Program: {      
278e0 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69    /* jump */.  i
278f0 6e 74 20 6e 4d 65 6d 3b 20 20 20 20 20 20 20 20  nt nMem;        
27900 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
27910 20 6f 66 20 6d 65 6d 6f 72 79 20 72 65 67 69 73   of memory regis
27920 74 65 72 73 20 66 6f 72 20 73 75 62 2d 70 72 6f  ters for sub-pro
27930 67 72 61 6d 20 2a 2f 0a 20 20 69 6e 74 20 6e 42  gram */.  int nB
27940 79 74 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  yte;            
27950 20 20 2f 2a 20 42 79 74 65 73 20 6f 66 20 72 75    /* Bytes of ru
27960 6e 74 69 6d 65 20 73 70 61 63 65 20 72 65 71 75  ntime space requ
27970 69 72 65 64 20 66 6f 72 20 73 75 62 2d 70 72 6f  ired for sub-pro
27980 67 72 61 6d 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  gram */.  Mem *p
27990 52 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  Rt;             
279a0 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 74 6f    /* Register to
279b0 20 61 6c 6c 6f 63 61 74 65 20 72 75 6e 74 69 6d   allocate runtim
279c0 65 20 73 70 61 63 65 20 2a 2f 0a 20 20 4d 65 6d  e space */.  Mem
279d0 20 2a 70 4d 65 6d 3b 20 20 20 20 20 20 20 20 20   *pMem;         
279e0 20 20 20 20 20 2f 2a 20 55 73 65 64 20 74 6f 20       /* Used to 
279f0 69 74 65 72 61 74 65 20 74 68 72 6f 75 67 68 20  iterate through 
27a00 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 2a 2f 0a  memory cells */.
27a10 20 20 4d 65 6d 20 2a 70 45 6e 64 3b 20 20 20 20    Mem *pEnd;    
27a20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 61 73            /* Las
27a30 74 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69 6e  t memory cell in
27a40 20 6e 65 77 20 61 72 72 61 79 20 2a 2f 0a 20 20   new array */.  
27a50 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d  VdbeFrame *pFram
27a60 65 3b 20 20 20 20 20 20 2f 2a 20 4e 65 77 20 76  e;      /* New v
27a70 64 62 65 20 66 72 61 6d 65 20 74 6f 20 65 78 65  dbe frame to exe
27a80 63 75 74 65 20 69 6e 20 2a 2f 0a 20 20 53 75 62  cute in */.  Sub
27a90 50 72 6f 67 72 61 6d 20 2a 70 50 72 6f 67 72 61  Program *pProgra
27aa0 6d 3b 20 20 20 2f 2a 20 53 75 62 2d 70 72 6f 67  m;   /* Sub-prog
27ab0 72 61 6d 20 74 6f 20 65 78 65 63 75 74 65 20 2a  ram to execute *
27ac0 2f 0a 20 20 76 6f 69 64 20 2a 74 3b 20 20 20 20  /.  void *t;    
27ad0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
27ae0 6f 6b 65 6e 20 69 64 65 6e 74 69 66 79 69 6e 67  oken identifying
27af0 20 74 72 69 67 67 65 72 20 2a 2f 0a 0a 20 20 70   trigger */..  p
27b00 50 72 6f 67 72 61 6d 20 3d 20 70 4f 70 2d 3e 70  Program = pOp->p
27b10 34 2e 70 50 72 6f 67 72 61 6d 3b 0a 20 20 70 52  4.pProgram;.  pR
27b20 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
27b30 33 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 6d 65  3];.  assert( me
27b40 6d 49 73 56 61 6c 69 64 28 70 52 74 29 20 29 3b  mIsValid(pRt) );
27b50 0a 20 20 61 73 73 65 72 74 28 20 70 50 72 6f 67  .  assert( pProg
27b60 72 61 6d 2d 3e 6e 4f 70 3e 30 20 29 3b 0a 20 20  ram->nOp>0 );.  
27b70 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 70 35 20  .  /* If the p5 
27b80 66 6c 61 67 20 69 73 20 63 6c 65 61 72 2c 20 74  flag is clear, t
27b90 68 65 6e 20 72 65 63 75 72 73 69 76 65 20 69 6e  hen recursive in
27ba0 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74 72 69 67  vocation of trig
27bb0 67 65 72 73 20 69 73 20 0a 20 20 2a 2a 20 64 69  gers is .  ** di
27bc0 73 61 62 6c 65 64 20 66 6f 72 20 62 61 63 6b 77  sabled for backw
27bd0 61 72 64 73 20 63 6f 6d 70 61 74 69 62 69 6c 69  ards compatibili
27be0 74 79 20 28 70 35 20 69 73 20 73 65 74 20 69 66  ty (p5 is set if
27bf0 20 74 68 69 73 20 73 75 62 2d 70 72 6f 67 72 61   this sub-progra
27c00 6d 0a 20 20 2a 2a 20 69 73 20 72 65 61 6c 6c 79  m.  ** is really
27c10 20 61 20 74 72 69 67 67 65 72 2c 20 6e 6f 74 20   a trigger, not 
27c20 61 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 61 63  a foreign key ac
27c30 74 69 6f 6e 2c 20 61 6e 64 20 74 68 65 20 66 6c  tion, and the fl
27c40 61 67 20 73 65 74 0a 20 20 2a 2a 20 61 6e 64 20  ag set.  ** and 
27c50 63 6c 65 61 72 65 64 20 62 79 20 74 68 65 20 22  cleared by the "
27c60 50 52 41 47 4d 41 20 72 65 63 75 72 73 69 76 65  PRAGMA recursive
27c70 5f 74 72 69 67 67 65 72 73 22 20 63 6f 6d 6d 61  _triggers" comma
27c80 6e 64 20 69 73 20 63 6c 65 61 72 29 2e 0a 20 20  nd is clear)..  
27c90 2a 2a 20 0a 20 20 2a 2a 20 49 74 20 69 73 20 72  ** .  ** It is r
27ca0 65 63 75 72 73 69 76 65 20 69 6e 76 6f 63 61 74  ecursive invocat
27cb0 69 6f 6e 20 6f 66 20 74 72 69 67 67 65 72 73 2c  ion of triggers,
27cc0 20 61 74 20 74 68 65 20 53 51 4c 20 6c 65 76 65   at the SQL leve
27cd0 6c 2c 20 74 68 61 74 20 69 73 20 0a 20 20 2a 2a  l, that is .  **
27ce0 20 64 69 73 61 62 6c 65 64 2e 20 49 6e 20 73 6f   disabled. In so
27cf0 6d 65 20 63 61 73 65 73 20 61 20 73 69 6e 67 6c  me cases a singl
27d00 65 20 74 72 69 67 67 65 72 20 6d 61 79 20 67 65  e trigger may ge
27d10 6e 65 72 61 74 65 20 6d 6f 72 65 20 74 68 61 6e  nerate more than
27d20 20 6f 6e 65 20 0a 20 20 2a 2a 20 53 75 62 50 72   one .  ** SubPr
27d30 6f 67 72 61 6d 20 28 69 66 20 74 68 65 20 74 72  ogram (if the tr
27d40 69 67 67 65 72 20 6d 61 79 20 62 65 20 65 78 65  igger may be exe
27d50 63 75 74 65 64 20 77 69 74 68 20 6d 6f 72 65 20  cuted with more 
27d60 74 68 61 6e 20 6f 6e 65 20 64 69 66 66 65 72 65  than one differe
27d70 6e 74 20 0a 20 20 2a 2a 20 4f 4e 20 43 4f 4e 46  nt .  ** ON CONF
27d80 4c 49 43 54 20 61 6c 67 6f 72 69 74 68 6d 29 2e  LICT algorithm).
27d90 20 53 75 62 50 72 6f 67 72 61 6d 20 73 74 72 75   SubProgram stru
27da0 63 74 75 72 65 73 20 61 73 73 6f 63 69 61 74 65  ctures associate
27db0 64 20 77 69 74 68 20 61 0a 20 20 2a 2a 20 73 69  d with a.  ** si
27dc0 6e 67 6c 65 20 74 72 69 67 67 65 72 20 61 6c 6c  ngle trigger all
27dd0 20 68 61 76 65 20 74 68 65 20 73 61 6d 65 20 76   have the same v
27de0 61 6c 75 65 20 66 6f 72 20 74 68 65 20 53 75 62  alue for the Sub
27df0 50 72 6f 67 72 61 6d 2e 74 6f 6b 65 6e 20 0a 20  Program.token . 
27e00 20 2a 2a 20 76 61 72 69 61 62 6c 65 2e 20 20 2a   ** variable.  *
27e10 2f 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20  /.  if( pOp->p5 
27e20 29 7b 0a 20 20 20 20 74 20 3d 20 70 50 72 6f 67  ){.    t = pProg
27e30 72 61 6d 2d 3e 74 6f 6b 65 6e 3b 0a 20 20 20 20  ram->token;.    
27e40 66 6f 72 28 70 46 72 61 6d 65 3d 70 2d 3e 70 46  for(pFrame=p->pF
27e50 72 61 6d 65 3b 20 70 46 72 61 6d 65 20 26 26 20  rame; pFrame && 
27e60 70 46 72 61 6d 65 2d 3e 74 6f 6b 65 6e 21 3d 74  pFrame->token!=t
27e70 3b 20 70 46 72 61 6d 65 3d 70 46 72 61 6d 65 2d  ; pFrame=pFrame-
27e80 3e 70 50 61 72 65 6e 74 29 3b 0a 20 20 20 20 69  >pParent);.    i
27e90 66 28 20 70 46 72 61 6d 65 20 29 20 62 72 65 61  f( pFrame ) brea
27ea0 6b 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 70 2d  k;.  }..  if( p-
27eb0 3e 6e 46 72 61 6d 65 3e 3d 64 62 2d 3e 61 4c 69  >nFrame>=db->aLi
27ec0 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54  mit[SQLITE_LIMIT
27ed0 5f 54 52 49 47 47 45 52 5f 44 45 50 54 48 5d 20  _TRIGGER_DEPTH] 
27ee0 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49  ){.    rc = SQLI
27ef0 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 73 71  TE_ERROR;.    sq
27f00 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26  lite3SetString(&
27f10 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20  p->zErrMsg, db, 
27f20 22 74 6f 6f 20 6d 61 6e 79 20 6c 65 76 65 6c 73  "too many levels
27f30 20 6f 66 20 74 72 69 67 67 65 72 20 72 65 63 75   of trigger recu
27f40 72 73 69 6f 6e 22 29 3b 0a 20 20 20 20 62 72 65  rsion");.    bre
27f50 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 52 65  ak;.  }..  /* Re
27f60 67 69 73 74 65 72 20 70 52 74 20 69 73 20 75 73  gister pRt is us
27f70 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20  ed to store the 
27f80 6d 65 6d 6f 72 79 20 72 65 71 75 69 72 65 64 20  memory required 
27f90 74 6f 20 73 61 76 65 20 74 68 65 20 73 74 61 74  to save the stat
27fa0 65 0a 20 20 2a 2a 20 6f 66 20 74 68 65 20 63 75  e.  ** of the cu
27fb0 72 72 65 6e 74 20 70 72 6f 67 72 61 6d 2c 20 61  rrent program, a
27fc0 6e 64 20 74 68 65 20 6d 65 6d 6f 72 79 20 72 65  nd the memory re
27fd0 71 75 69 72 65 64 20 61 74 20 72 75 6e 74 69 6d  quired at runtim
27fe0 65 20 74 6f 20 65 78 65 63 75 74 65 0a 20 20 2a  e to execute.  *
27ff0 2a 20 74 68 65 20 74 72 69 67 67 65 72 20 70 72  * the trigger pr
28000 6f 67 72 61 6d 2e 20 49 66 20 74 68 69 73 20 74  ogram. If this t
28010 72 69 67 67 65 72 20 68 61 73 20 62 65 65 6e 20  rigger has been 
28020 66 69 72 65 64 20 62 65 66 6f 72 65 2c 20 74 68  fired before, th
28030 65 6e 20 70 52 74 20 0a 20 20 2a 2a 20 69 73 20  en pRt .  ** is 
28040 61 6c 72 65 61 64 79 20 61 6c 6c 6f 63 61 74 65  already allocate
28050 64 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69 74  d. Otherwise, it
28060 20 6d 75 73 74 20 62 65 20 69 6e 69 74 69 61 6c   must be initial
28070 69 7a 65 64 2e 20 20 2a 2f 0a 20 20 69 66 28 20  ized.  */.  if( 
28080 28 70 52 74 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  (pRt->flags&MEM_
28090 46 72 61 6d 65 29 3d 3d 30 20 29 7b 0a 20 20 20  Frame)==0 ){.   
280a0 20 2f 2a 20 53 75 62 50 72 6f 67 72 61 6d 2e 6e   /* SubProgram.n
280b0 4d 65 6d 20 69 73 20 73 65 74 20 74 6f 20 74 68  Mem is set to th
280c0 65 20 6e 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f  e number of memo
280d0 72 79 20 63 65 6c 6c 73 20 75 73 65 64 20 62 79  ry cells used by
280e0 20 74 68 65 20 0a 20 20 20 20 2a 2a 20 70 72 6f   the .    ** pro
280f0 67 72 61 6d 20 73 74 6f 72 65 64 20 69 6e 20 53  gram stored in S
28100 75 62 50 72 6f 67 72 61 6d 2e 61 4f 70 2e 20 41  ubProgram.aOp. A
28110 73 20 77 65 6c 6c 20 61 73 20 74 68 65 73 65 2c  s well as these,
28120 20 6f 6e 65 20 6d 65 6d 6f 72 79 0a 20 20 20 20   one memory.    
28130 2a 2a 20 63 65 6c 6c 20 69 73 20 72 65 71 75 69  ** cell is requi
28140 72 65 64 20 66 6f 72 20 65 61 63 68 20 63 75 72  red for each cur
28150 73 6f 72 20 75 73 65 64 20 62 79 20 74 68 65 20  sor used by the 
28160 70 72 6f 67 72 61 6d 2e 20 53 65 74 20 6c 6f 63  program. Set loc
28170 61 6c 0a 20 20 20 20 2a 2a 20 76 61 72 69 61 62  al.    ** variab
28180 6c 65 20 6e 4d 65 6d 20 28 61 6e 64 20 6c 61 74  le nMem (and lat
28190 65 72 2c 20 56 64 62 65 46 72 61 6d 65 2e 6e 43  er, VdbeFrame.nC
281a0 68 69 6c 64 4d 65 6d 29 20 74 6f 20 74 68 69 73  hildMem) to this
281b0 20 76 61 6c 75 65 2e 0a 20 20 20 20 2a 2f 0a 20   value..    */. 
281c0 20 20 20 6e 4d 65 6d 20 3d 20 70 50 72 6f 67 72     nMem = pProgr
281d0 61 6d 2d 3e 6e 4d 65 6d 20 2b 20 70 50 72 6f 67  am->nMem + pProg
281e0 72 61 6d 2d 3e 6e 43 73 72 3b 0a 20 20 20 20 6e  ram->nCsr;.    n
281f0 42 79 74 65 20 3d 20 52 4f 55 4e 44 38 28 73 69  Byte = ROUND8(si
28200 7a 65 6f 66 28 56 64 62 65 46 72 61 6d 65 29 29  zeof(VdbeFrame))
28210 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2b  .              +
28220 20 6e 4d 65 6d 20 2a 20 73 69 7a 65 6f 66 28 4d   nMem * sizeof(M
28230 65 6d 29 0a 20 20 20 20 20 20 20 20 20 20 20 20  em).            
28240 20 20 2b 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43    + pProgram->nC
28250 73 72 20 2a 20 73 69 7a 65 6f 66 28 56 64 62 65  sr * sizeof(Vdbe
28260 43 75 72 73 6f 72 20 2a 29 3b 0a 20 20 20 20 70  Cursor *);.    p
28270 46 72 61 6d 65 20 3d 20 73 71 6c 69 74 65 33 44  Frame = sqlite3D
28280 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 64 62 2c 20  bMallocZero(db, 
28290 6e 42 79 74 65 29 3b 0a 20 20 20 20 69 66 28 20  nByte);.    if( 
282a0 21 70 46 72 61 6d 65 20 29 7b 0a 20 20 20 20 20  !pFrame ){.     
282b0 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
282c0 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 56    }.    sqlite3V
282d0 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 70 52  dbeMemRelease(pR
282e0 74 29 3b 0a 20 20 20 20 70 52 74 2d 3e 66 6c 61  t);.    pRt->fla
282f0 67 73 20 3d 20 4d 45 4d 5f 46 72 61 6d 65 3b 0a  gs = MEM_Frame;.
28300 20 20 20 20 70 52 74 2d 3e 75 2e 70 46 72 61 6d      pRt->u.pFram
28310 65 20 3d 20 70 46 72 61 6d 65 3b 0a 0a 20 20 20  e = pFrame;..   
28320 20 70 46 72 61 6d 65 2d 3e 76 20 3d 20 70 3b 0a   pFrame->v = p;.
28330 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 43 68 69      pFrame->nChi
28340 6c 64 4d 65 6d 20 3d 20 6e 4d 65 6d 3b 0a 20 20  ldMem = nMem;.  
28350 20 20 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64    pFrame->nChild
28360 43 73 72 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e  Csr = pProgram->
28370 6e 43 73 72 3b 0a 20 20 20 20 70 46 72 61 6d 65  nCsr;.    pFrame
28380 2d 3e 70 63 20 3d 20 70 63 3b 0a 20 20 20 20 70  ->pc = pc;.    p
28390 46 72 61 6d 65 2d 3e 61 4d 65 6d 20 3d 20 70 2d  Frame->aMem = p-
283a0 3e 61 4d 65 6d 3b 0a 20 20 20 20 70 46 72 61 6d  >aMem;.    pFram
283b0 65 2d 3e 6e 4d 65 6d 20 3d 20 70 2d 3e 6e 4d 65  e->nMem = p->nMe
283c0 6d 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 61  m;.    pFrame->a
283d0 70 43 73 72 20 3d 20 70 2d 3e 61 70 43 73 72 3b  pCsr = p->apCsr;
283e0 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 43 75  .    pFrame->nCu
283f0 72 73 6f 72 20 3d 20 70 2d 3e 6e 43 75 72 73 6f  rsor = p->nCurso
28400 72 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 61  r;.    pFrame->a
28410 4f 70 20 3d 20 70 2d 3e 61 4f 70 3b 0a 20 20 20  Op = p->aOp;.   
28420 20 70 46 72 61 6d 65 2d 3e 6e 4f 70 20 3d 20 70   pFrame->nOp = p
28430 2d 3e 6e 4f 70 3b 0a 20 20 20 20 70 46 72 61 6d  ->nOp;.    pFram
28440 65 2d 3e 74 6f 6b 65 6e 20 3d 20 70 50 72 6f 67  e->token = pProg
28450 72 61 6d 2d 3e 74 6f 6b 65 6e 3b 0a 0a 20 20 20  ram->token;..   
28460 20 70 45 6e 64 20 3d 20 26 56 64 62 65 46 72 61   pEnd = &VdbeFra
28470 6d 65 4d 65 6d 28 70 46 72 61 6d 65 29 5b 70 46  meMem(pFrame)[pF
28480 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 5d  rame->nChildMem]
28490 3b 0a 20 20 20 20 66 6f 72 28 70 4d 65 6d 3d 56  ;.    for(pMem=V
284a0 64 62 65 46 72 61 6d 65 4d 65 6d 28 70 46 72 61  dbeFrameMem(pFra
284b0 6d 65 29 3b 20 70 4d 65 6d 21 3d 70 45 6e 64 3b  me); pMem!=pEnd;
284c0 20 70 4d 65 6d 2b 2b 29 7b 0a 20 20 20 20 20 20   pMem++){.      
284d0 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pMem->flags = ME
284e0 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20 20 20 70 4d  M_Null;.      pM
284f0 65 6d 2d 3e 64 62 20 3d 20 64 62 3b 0a 20 20 20  em->db = db;.   
28500 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20   }.  }else{.    
28510 70 46 72 61 6d 65 20 3d 20 70 52 74 2d 3e 75 2e  pFrame = pRt->u.
28520 70 46 72 61 6d 65 3b 0a 20 20 20 20 61 73 73 65  pFrame;.    asse
28530 72 74 28 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4d  rt( pProgram->nM
28540 65 6d 2b 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73  em+pProgram->nCs
28550 72 3d 3d 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c  r==pFrame->nChil
28560 64 4d 65 6d 20 29 3b 0a 20 20 20 20 61 73 73 65  dMem );.    asse
28570 72 74 28 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43  rt( pProgram->nC
28580 73 72 3d 3d 70 46 72 61 6d 65 2d 3e 6e 43 68 69  sr==pFrame->nChi
28590 6c 64 43 73 72 20 29 3b 0a 20 20 20 20 61 73 73  ldCsr );.    ass
285a0 65 72 74 28 20 70 63 3d 3d 70 46 72 61 6d 65 2d  ert( pc==pFrame-
285b0 3e 70 63 20 29 3b 0a 20 20 7d 0a 0a 20 20 70 2d  >pc );.  }..  p-
285c0 3e 6e 46 72 61 6d 65 2b 2b 3b 0a 20 20 70 46 72  >nFrame++;.  pFr
285d0 61 6d 65 2d 3e 70 50 61 72 65 6e 74 20 3d 20 70  ame->pParent = p
285e0 2d 3e 70 46 72 61 6d 65 3b 0a 20 20 70 46 72 61  ->pFrame;.  pFra
285f0 6d 65 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20  me->lastRowid = 
28600 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 0a 20  db->lastRowid;. 
28610 20 70 46 72 61 6d 65 2d 3e 6e 43 68 61 6e 67 65   pFrame->nChange
28620 20 3d 20 70 2d 3e 6e 43 68 61 6e 67 65 3b 0a 20   = p->nChange;. 
28630 20 70 2d 3e 6e 43 68 61 6e 67 65 20 3d 20 30 3b   p->nChange = 0;
28640 0a 20 20 70 2d 3e 70 46 72 61 6d 65 20 3d 20 70  .  p->pFrame = p
28650 46 72 61 6d 65 3b 0a 20 20 70 2d 3e 61 4d 65 6d  Frame;.  p->aMem
28660 20 3d 20 61 4d 65 6d 20 3d 20 26 56 64 62 65 46   = aMem = &VdbeF
28670 72 61 6d 65 4d 65 6d 28 70 46 72 61 6d 65 29 5b  rameMem(pFrame)[
28680 2d 31 5d 3b 0a 20 20 70 2d 3e 6e 4d 65 6d 20 3d  -1];.  p->nMem =
28690 20 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d   pFrame->nChildM
286a0 65 6d 3b 0a 20 20 70 2d 3e 6e 43 75 72 73 6f 72  em;.  p->nCursor
286b0 20 3d 20 28 75 31 36 29 70 46 72 61 6d 65 2d 3e   = (u16)pFrame->
286c0 6e 43 68 69 6c 64 43 73 72 3b 0a 20 20 70 2d 3e  nChildCsr;.  p->
286d0 61 70 43 73 72 20 3d 20 28 56 64 62 65 43 75 72  apCsr = (VdbeCur
286e0 73 6f 72 20 2a 2a 29 26 61 4d 65 6d 5b 70 2d 3e  sor **)&aMem[p->
286f0 6e 4d 65 6d 2b 31 5d 3b 0a 20 20 70 2d 3e 61 4f  nMem+1];.  p->aO
28700 70 20 3d 20 61 4f 70 20 3d 20 70 50 72 6f 67 72  p = aOp = pProgr
28710 61 6d 2d 3e 61 4f 70 3b 0a 20 20 70 2d 3e 6e 4f  am->aOp;.  p->nO
28720 70 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f  p = pProgram->nO
28730 70 3b 0a 20 20 70 63 20 3d 20 2d 31 3b 0a 0a 20  p;.  pc = -1;.. 
28740 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
28750 63 6f 64 65 3a 20 50 61 72 61 6d 20 50 31 20 50  code: Param P1 P
28760 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68  2 * * *.**.** Th
28770 69 73 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c  is opcode is onl
28780 79 20 65 76 65 72 20 70 72 65 73 65 6e 74 20 69  y ever present i
28790 6e 20 73 75 62 2d 70 72 6f 67 72 61 6d 73 20 63  n sub-programs c
287a0 61 6c 6c 65 64 20 76 69 61 20 74 68 65 20 0a 2a  alled via the .*
287b0 2a 20 4f 50 5f 50 72 6f 67 72 61 6d 20 69 6e 73  * OP_Program ins
287c0 74 72 75 63 74 69 6f 6e 2e 20 43 6f 70 79 20 61  truction. Copy a
287d0 20 76 61 6c 75 65 20 63 75 72 72 65 6e 74 6c 79   value currently
287e0 20 73 74 6f 72 65 64 20 69 6e 20 61 20 6d 65 6d   stored in a mem
287f0 6f 72 79 20 0a 2a 2a 20 63 65 6c 6c 20 6f 66 20  ory .** cell of 
28800 74 68 65 20 63 61 6c 6c 69 6e 67 20 28 70 61 72  the calling (par
28810 65 6e 74 29 20 66 72 61 6d 65 20 74 6f 20 63 65  ent) frame to ce
28820 6c 6c 20 50 32 20 69 6e 20 74 68 65 20 63 75 72  ll P2 in the cur
28830 72 65 6e 74 20 66 72 61 6d 65 73 20 0a 2a 2a 20  rent frames .** 
28840 61 64 64 72 65 73 73 20 73 70 61 63 65 2e 20 54  address space. T
28850 68 69 73 20 69 73 20 75 73 65 64 20 62 79 20 74  his is used by t
28860 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 73 20  rigger programs 
28870 74 6f 20 61 63 63 65 73 73 20 74 68 65 20 6e 65  to access the ne
28880 77 2e 2a 20 0a 2a 2a 20 61 6e 64 20 6f 6c 64 2e  w.* .** and old.
28890 2a 20 76 61 6c 75 65 73 2e 0a 2a 2a 0a 2a 2a 20  * values..**.** 
288a0 54 68 65 20 61 64 64 72 65 73 73 20 6f 66 20 74  The address of t
288b0 68 65 20 63 65 6c 6c 20 69 6e 20 74 68 65 20 70  he cell in the p
288c0 61 72 65 6e 74 20 66 72 61 6d 65 20 69 73 20 64  arent frame is d
288d0 65 74 65 72 6d 69 6e 65 64 20 62 79 20 61 64 64  etermined by add
288e0 69 6e 67 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65  ing.** the value
288f0 20 6f 66 20 74 68 65 20 50 31 20 61 72 67 75 6d   of the P1 argum
28900 65 6e 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65  ent to the value
28910 20 6f 66 20 74 68 65 20 50 31 20 61 72 67 75 6d   of the P1 argum
28920 65 6e 74 20 74 6f 20 74 68 65 0a 2a 2a 20 63 61  ent to the.** ca
28930 6c 6c 69 6e 67 20 4f 50 5f 50 72 6f 67 72 61 6d  lling OP_Program
28940 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f   instruction..*/
28950 0a 63 61 73 65 20 4f 50 5f 50 61 72 61 6d 3a 20  .case OP_Param: 
28960 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f  {           /* o
28970 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a  ut2-prerelease *
28980 2f 0a 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70  /.  VdbeFrame *p
28990 46 72 61 6d 65 3b 0a 20 20 4d 65 6d 20 2a 70 49  Frame;.  Mem *pI
289a0 6e 3b 0a 20 20 70 46 72 61 6d 65 20 3d 20 70 2d  n;.  pFrame = p-
289b0 3e 70 46 72 61 6d 65 3b 0a 20 20 70 49 6e 20 3d  >pFrame;.  pIn =
289c0 20 26 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70   &pFrame->aMem[p
289d0 4f 70 2d 3e 70 31 20 2b 20 70 46 72 61 6d 65 2d  Op->p1 + pFrame-
289e0 3e 61 4f 70 5b 70 46 72 61 6d 65 2d 3e 70 63 5d  >aOp[pFrame->pc]
289f0 2e 70 31 5d 3b 20 20 20 0a 20 20 73 71 6c 69 74  .p1];   .  sqlit
28a00 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77  e3VdbeMemShallow
28a10 43 6f 70 79 28 70 4f 75 74 2c 20 70 49 6e 2c 20  Copy(pOut, pIn, 
28a20 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a 20 20 62 72  MEM_Ephem);.  br
28a30 65 61 6b 3b 0a 7d 0a 0a 23 65 6e 64 69 66 20 2f  eak;.}..#endif /
28a40 2a 20 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  * #ifndef SQLITE
28a50 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 20 2a 2f  _OMIT_TRIGGER */
28a60 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
28a70 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45  _OMIT_FOREIGN_KE
28a80 59 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 6b 43  Y./* Opcode: FkC
28a90 6f 75 6e 74 65 72 20 50 31 20 50 32 20 2a 20 2a  ounter P1 P2 * *
28aa0 20 2a 0a 2a 2a 0a 2a 2a 20 49 6e 63 72 65 6d 65   *.**.** Increme
28ab0 6e 74 20 61 20 22 63 6f 6e 73 74 72 61 69 6e 74  nt a "constraint
28ac0 20 63 6f 75 6e 74 65 72 22 20 62 79 20 50 32 20   counter" by P2 
28ad0 28 50 32 20 6d 61 79 20 62 65 20 6e 65 67 61 74  (P2 may be negat
28ae0 69 76 65 20 6f 72 20 70 6f 73 69 74 69 76 65 29  ive or positive)
28af0 2e 0a 2a 2a 20 49 66 20 50 31 20 69 73 20 6e 6f  ..** If P1 is no
28b00 6e 2d 7a 65 72 6f 2c 20 74 68 65 20 64 61 74 61  n-zero, the data
28b10 62 61 73 65 20 63 6f 6e 73 74 72 61 69 6e 74 20  base constraint 
28b20 63 6f 75 6e 74 65 72 20 69 73 20 69 6e 63 72 65  counter is incre
28b30 6d 65 6e 74 65 64 20 0a 2a 2a 20 28 64 65 66 65  mented .** (defe
28b40 72 72 65 64 20 66 6f 72 65 69 67 6e 20 6b 65 79  rred foreign key
28b50 20 63 6f 6e 73 74 72 61 69 6e 74 73 29 2e 20 4f   constraints). O
28b60 74 68 65 72 77 69 73 65 2c 20 69 66 20 50 31 20  therwise, if P1 
28b70 69 73 20 7a 65 72 6f 2c 20 74 68 65 20 0a 2a 2a  is zero, the .**
28b80 20 73 74 61 74 65 6d 65 6e 74 20 63 6f 75 6e 74   statement count
28b90 65 72 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65  er is incremente
28ba0 64 20 28 69 6d 6d 65 64 69 61 74 65 20 66 6f 72  d (immediate for
28bb0 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61  eign key constra
28bc0 69 6e 74 73 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ints)..*/.case O
28bd0 50 5f 46 6b 43 6f 75 6e 74 65 72 3a 20 7b 0a 20  P_FkCounter: {. 
28be0 20 69 66 28 20 70 4f 70 2d 3e 70 31 20 29 7b 0a   if( pOp->p1 ){.
28bf0 20 20 20 20 64 62 2d 3e 6e 44 65 66 65 72 72 65      db->nDeferre
28c00 64 43 6f 6e 73 20 2b 3d 20 70 4f 70 2d 3e 70 32  dCons += pOp->p2
28c10 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70  ;.  }else{.    p
28c20 2d 3e 6e 46 6b 43 6f 6e 73 74 72 61 69 6e 74 20  ->nFkConstraint 
28c30 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 7d 0a  += pOp->p2;.  }.
28c40 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
28c50 70 63 6f 64 65 3a 20 46 6b 49 66 5a 65 72 6f 20  pcode: FkIfZero 
28c60 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
28c70 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 74 65  * This opcode te
28c80 73 74 73 20 69 66 20 61 20 66 6f 72 65 69 67 6e  sts if a foreign
28c90 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 2d   key constraint-
28ca0 63 6f 75 6e 74 65 72 20 69 73 20 63 75 72 72 65  counter is curre
28cb0 6e 74 6c 79 20 7a 65 72 6f 2e 0a 2a 2a 20 49 66  ntly zero..** If
28cc0 20 73 6f 2c 20 6a 75 6d 70 20 74 6f 20 69 6e 73   so, jump to ins
28cd0 74 72 75 63 74 69 6f 6e 20 50 32 2e 20 4f 74 68  truction P2. Oth
28ce0 65 72 77 69 73 65 2c 20 66 61 6c 6c 20 74 68 72  erwise, fall thr
28cf0 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74  ough to the next
28d00 20 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e   .** instruction
28d10 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 31 20 69 73  ..**.** If P1 is
28d20 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20   non-zero, then 
28d30 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65  the jump is take
28d40 6e 20 69 66 20 74 68 65 20 64 61 74 61 62 61 73  n if the databas
28d50 65 20 63 6f 6e 73 74 72 61 69 6e 74 2d 63 6f 75  e constraint-cou
28d60 6e 74 65 72 0a 2a 2a 20 69 73 20 7a 65 72 6f 20  nter.** is zero 
28d70 28 74 68 65 20 6f 6e 65 20 74 68 61 74 20 63 6f  (the one that co
28d80 75 6e 74 73 20 64 65 66 65 72 72 65 64 20 63 6f  unts deferred co
28d90 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69  nstraint violati
28da0 6f 6e 73 29 2e 20 49 66 20 50 31 20 69 73 0a 2a  ons). If P1 is.*
28db0 2a 20 7a 65 72 6f 2c 20 74 68 65 20 6a 75 6d 70  * zero, the jump
28dc0 20 69 73 20 74 61 6b 65 6e 20 69 66 20 74 68 65   is taken if the
28dd0 20 73 74 61 74 65 6d 65 6e 74 20 63 6f 6e 73 74   statement const
28de0 72 61 69 6e 74 2d 63 6f 75 6e 74 65 72 20 69 73  raint-counter is
28df0 20 7a 65 72 6f 0a 2a 2a 20 28 69 6d 6d 65 64 69   zero.** (immedi
28e00 61 74 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  ate foreign key 
28e10 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61  constraint viola
28e20 74 69 6f 6e 73 29 2e 0a 2a 2f 0a 63 61 73 65 20  tions)..*/.case 
28e30 4f 50 5f 46 6b 49 66 5a 65 72 6f 3a 20 7b 20 20  OP_FkIfZero: {  
28e40 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
28e50 2f 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 20  /.  if( pOp->p1 
28e60 29 7b 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 6e  ){.    if( db->n
28e70 44 65 66 65 72 72 65 64 43 6f 6e 73 3d 3d 30 20  DeferredCons==0 
28e80 29 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31  ) pc = pOp->p2-1
28e90 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69  ;.  }else{.    i
28ea0 66 28 20 70 2d 3e 6e 46 6b 43 6f 6e 73 74 72 61  f( p->nFkConstra
28eb0 69 6e 74 3d 3d 30 20 29 20 70 63 20 3d 20 70 4f  int==0 ) pc = pO
28ec0 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d 0a 20 20 62  p->p2-1;.  }.  b
28ed0 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  reak;.}.#endif /
28ee0 2a 20 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  * #ifndef SQLITE
28ef0 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45  _OMIT_FOREIGN_KE
28f00 59 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  Y */..#ifndef SQ
28f10 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e  LITE_OMIT_AUTOIN
28f20 43 52 45 4d 45 4e 54 0a 2f 2a 20 4f 70 63 6f 64  CREMENT./* Opcod
28f30 65 3a 20 4d 65 6d 4d 61 78 20 50 31 20 50 32 20  e: MemMax P1 P2 
28f40 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50 31 20 69  * * *.**.** P1 i
28f50 73 20 61 20 72 65 67 69 73 74 65 72 20 69 6e 20  s a register in 
28f60 74 68 65 20 72 6f 6f 74 20 66 72 61 6d 65 20 6f  the root frame o
28f70 66 20 74 68 69 73 20 56 4d 20 28 74 68 65 20 72  f this VM (the r
28f80 6f 6f 74 20 66 72 61 6d 65 20 69 73 0a 2a 2a 20  oot frame is.** 
28f90 64 69 66 66 65 72 65 6e 74 20 66 72 6f 6d 20 74  different from t
28fa0 68 65 20 63 75 72 72 65 6e 74 20 66 72 61 6d 65  he current frame
28fb0 20 69 66 20 74 68 69 73 20 69 6e 73 74 72 75 63   if this instruc
28fc0 74 69 6f 6e 20 69 73 20 62 65 69 6e 67 20 65 78  tion is being ex
28fd0 65 63 75 74 65 64 0a 2a 2a 20 77 69 74 68 69 6e  ecuted.** within
28fe0 20 61 20 73 75 62 2d 70 72 6f 67 72 61 6d 29 2e   a sub-program).
28ff0 20 53 65 74 20 74 68 65 20 76 61 6c 75 65 20 6f   Set the value o
29000 66 20 72 65 67 69 73 74 65 72 20 50 31 20 74 6f  f register P1 to
29010 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6f 66 20   the maximum of 
29020 0a 2a 2a 20 69 74 73 20 63 75 72 72 65 6e 74 20  .** its current 
29030 76 61 6c 75 65 20 61 6e 64 20 74 68 65 20 76 61  value and the va
29040 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
29050 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69  P2..**.** This i
29060 6e 73 74 72 75 63 74 69 6f 6e 20 74 68 72 6f 77  nstruction throw
29070 73 20 61 6e 20 65 72 72 6f 72 20 69 66 20 74 68  s an error if th
29080 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69 73  e memory cell is
29090 20 6e 6f 74 20 69 6e 69 74 69 61 6c 6c 79 0a 2a   not initially.*
290a0 2a 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2f  * an integer..*/
290b0 0a 63 61 73 65 20 4f 50 5f 4d 65 6d 4d 61 78 3a  .case OP_MemMax:
290c0 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 32   {        /* in2
290d0 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e 31 3b   */.  Mem *pIn1;
290e0 0a 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46  .  VdbeFrame *pF
290f0 72 61 6d 65 3b 0a 20 20 69 66 28 20 70 2d 3e 70  rame;.  if( p->p
29100 46 72 61 6d 65 20 29 7b 0a 20 20 20 20 66 6f 72  Frame ){.    for
29110 28 70 46 72 61 6d 65 3d 70 2d 3e 70 46 72 61 6d  (pFrame=p->pFram
29120 65 3b 20 70 46 72 61 6d 65 2d 3e 70 50 61 72 65  e; pFrame->pPare
29130 6e 74 3b 20 70 46 72 61 6d 65 3d 70 46 72 61 6d  nt; pFrame=pFram
29140 65 2d 3e 70 50 61 72 65 6e 74 29 3b 0a 20 20 20  e->pParent);.   
29150 20 70 49 6e 31 20 3d 20 26 70 46 72 61 6d 65 2d   pIn1 = &pFrame-
29160 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  >aMem[pOp->p1];.
29170 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 49 6e    }else{.    pIn
29180 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
29190 31 5d 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74  1];.  }.  assert
291a0 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 49 6e  ( memIsValid(pIn
291b0 31 29 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56  1) );.  sqlite3V
291c0 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79  dbeMemIntegerify
291d0 28 70 49 6e 31 29 3b 0a 20 20 70 49 6e 32 20 3d  (pIn1);.  pIn2 =
291e0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
291f0 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
29200 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e 32  mIntegerify(pIn2
29210 29 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 75  );.  if( pIn1->u
29220 2e 69 3c 70 49 6e 32 2d 3e 75 2e 69 29 7b 0a 20  .i<pIn2->u.i){. 
29230 20 20 20 70 49 6e 31 2d 3e 75 2e 69 20 3d 20 70     pIn1->u.i = p
29240 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20 7d 0a 20 20  In2->u.i;.  }.  
29250 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20  break;.}.#endif 
29260 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  /* SQLITE_OMIT_A
29270 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 2a 2f 0a  UTOINCREMENT */.
29280 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 50 6f  ./* Opcode: IfPo
29290 73 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  s P1 P2 * * *.**
292a0 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65  .** If the value
292b0 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 31 20   of register P1 
292c0 69 73 20 31 20 6f 72 20 67 72 65 61 74 65 72 2c  is 1 or greater,
292d0 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a   jump to P2..**.
292e0 2a 2a 20 49 74 20 69 73 20 69 6c 6c 65 67 61 6c  ** It is illegal
292f0 20 74 6f 20 75 73 65 20 74 68 69 73 20 69 6e 73   to use this ins
29300 74 72 75 63 74 69 6f 6e 20 6f 6e 20 61 20 72 65  truction on a re
29310 67 69 73 74 65 72 20 74 68 61 74 20 64 6f 65 73  gister that does
29320 0a 2a 2a 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20  .** not contain 
29330 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 41 6e 20  an integer.  An 
29340 61 73 73 65 72 74 69 6f 6e 20 66 61 75 6c 74 20  assertion fault 
29350 77 69 6c 6c 20 72 65 73 75 6c 74 20 69 66 20 79  will result if y
29360 6f 75 20 74 72 79 2e 0a 2a 2f 0a 63 61 73 65 20  ou try..*/.case 
29370 4f 50 5f 49 66 50 6f 73 3a 20 7b 20 20 20 20 20  OP_IfPos: {     
29380 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20     /* jump, in1 
29390 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
293a0 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  m[pOp->p1];.  as
293b0 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67  sert( pIn1->flag
293c0 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 69  s&MEM_Int );.  i
293d0 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3e 30 20 29  f( pIn1->u.i>0 )
293e0 7b 0a 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  {.     pc = pOp-
293f0 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62  >p2 - 1;.  }.  b
29400 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
29410 64 65 3a 20 49 66 4e 65 67 20 50 31 20 50 32 20  de: IfNeg P1 P2 
29420 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 74  * * *.**.** If t
29430 68 65 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69  he value of regi
29440 73 74 65 72 20 50 31 20 69 73 20 6c 65 73 73 20  ster P1 is less 
29450 74 68 61 6e 20 7a 65 72 6f 2c 20 6a 75 6d 70 20  than zero, jump 
29460 74 6f 20 50 32 2e 20 0a 2a 2a 0a 2a 2a 20 49 74  to P2. .**.** It
29470 20 69 73 20 69 6c 6c 65 67 61 6c 20 74 6f 20 75   is illegal to u
29480 73 65 20 74 68 69 73 20 69 6e 73 74 72 75 63 74  se this instruct
29490 69 6f 6e 20 6f 6e 20 61 20 72 65 67 69 73 74 65  ion on a registe
294a0 72 20 74 68 61 74 20 64 6f 65 73 0a 2a 2a 20 6e  r that does.** n
294b0 6f 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e  ot contain an in
294c0 74 65 67 65 72 2e 20 20 41 6e 20 61 73 73 65 72  teger.  An asser
294d0 74 69 6f 6e 20 66 61 75 6c 74 20 77 69 6c 6c 20  tion fault will 
294e0 72 65 73 75 6c 74 20 69 66 20 79 6f 75 20 74 72  result if you tr
294f0 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66  y..*/.case OP_If
29500 4e 65 67 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  Neg: {        /*
29510 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20   jump, in1 */.  
29520 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
29530 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
29540 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d   pIn1->flags&MEM
29550 5f 49 6e 74 20 29 3b 0a 20 20 69 66 28 20 70 49  _Int );.  if( pI
29560 6e 31 2d 3e 75 2e 69 3c 30 20 29 7b 0a 20 20 20  n1->u.i<0 ){.   
29570 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
29580 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b   1;.  }.  break;
29590 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
295a0 66 5a 65 72 6f 20 50 31 20 50 32 20 50 33 20 2a  fZero P1 P2 P3 *
295b0 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 65 67   *.**.** The reg
295c0 69 73 74 65 72 20 50 31 20 6d 75 73 74 20 63 6f  ister P1 must co
295d0 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72  ntain an integer
295e0 2e 20 20 41 64 64 20 6c 69 74 65 72 61 6c 20 50  .  Add literal P
295f0 33 20 74 6f 20 74 68 65 0a 2a 2a 20 76 61 6c 75  3 to the.** valu
29600 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
29610 2e 20 20 49 66 20 74 68 65 20 72 65 73 75 6c 74  .  If the result
29620 20 69 73 20 65 78 61 63 74 6c 79 20 30 2c 20 6a   is exactly 0, j
29630 75 6d 70 20 74 6f 20 50 32 2e 20 0a 2a 2a 0a 2a  ump to P2. .**.*
29640 2a 20 49 74 20 69 73 20 69 6c 6c 65 67 61 6c 20  * It is illegal 
29650 74 6f 20 75 73 65 20 74 68 69 73 20 69 6e 73 74  to use this inst
29660 72 75 63 74 69 6f 6e 20 6f 6e 20 61 20 72 65 67  ruction on a reg
29670 69 73 74 65 72 20 74 68 61 74 20 64 6f 65 73 0a  ister that does.
29680 2a 2a 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 61  ** not contain a
29690 6e 20 69 6e 74 65 67 65 72 2e 20 20 41 6e 20 61  n integer.  An a
296a0 73 73 65 72 74 69 6f 6e 20 66 61 75 6c 74 20 77  ssertion fault w
296b0 69 6c 6c 20 72 65 73 75 6c 74 20 69 66 20 79 6f  ill result if yo
296c0 75 20 74 72 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f  u try..*/.case O
296d0 50 5f 49 66 5a 65 72 6f 3a 20 7b 20 20 20 20 20  P_IfZero: {     
296e0 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20     /* jump, in1 
296f0 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
29700 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  m[pOp->p1];.  as
29710 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67  sert( pIn1->flag
29720 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 70  s&MEM_Int );.  p
29730 49 6e 31 2d 3e 75 2e 69 20 2b 3d 20 70 4f 70 2d  In1->u.i += pOp-
29740 3e 70 33 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d  >p3;.  if( pIn1-
29750 3e 75 2e 69 3d 3d 30 20 29 7b 0a 20 20 20 20 20  >u.i==0 ){.     
29760 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
29770 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
29780 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 67 67  ../* Opcode: Agg
29790 53 74 65 70 20 2a 20 50 32 20 50 33 20 50 34 20  Step * P2 P3 P4 
297a0 50 35 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74 65  P5.**.** Execute
297b0 20 74 68 65 20 73 74 65 70 20 66 75 6e 63 74 69   the step functi
297c0 6f 6e 20 66 6f 72 20 61 6e 20 61 67 67 72 65 67  on for an aggreg
297d0 61 74 65 2e 20 20 54 68 65 0a 2a 2a 20 66 75 6e  ate.  The.** fun
297e0 63 74 69 6f 6e 20 68 61 73 20 50 35 20 61 72 67  ction has P5 arg
297f0 75 6d 65 6e 74 73 2e 20 20 20 50 34 20 69 73 20  uments.   P4 is 
29800 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65  a pointer to the
29810 20 46 75 6e 63 44 65 66 0a 2a 2a 20 73 74 72 75   FuncDef.** stru
29820 63 74 75 72 65 20 74 68 61 74 20 73 70 65 63 69  cture that speci
29830 66 69 65 73 20 74 68 65 20 66 75 6e 63 74 69 6f  fies the functio
29840 6e 2e 20 20 55 73 65 20 72 65 67 69 73 74 65 72  n.  Use register
29850 0a 2a 2a 20 50 33 20 61 73 20 74 68 65 20 61 63  .** P3 as the ac
29860 63 75 6d 75 6c 61 74 6f 72 2e 0a 2a 2a 0a 2a 2a  cumulator..**.**
29870 20 54 68 65 20 50 35 20 61 72 67 75 6d 65 6e 74   The P5 argument
29880 73 20 61 72 65 20 74 61 6b 65 6e 20 66 72 6f 6d  s are taken from
29890 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e 64   register P2 and
298a0 20 69 74 73 0a 2a 2a 20 73 75 63 63 65 73 73 6f   its.** successo
298b0 72 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41  rs..*/.case OP_A
298c0 67 67 53 74 65 70 3a 20 7b 0a 20 20 69 6e 74 20  ggStep: {.  int 
298d0 6e 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 4d 65  n;.  int i;.  Me
298e0 6d 20 2a 70 4d 65 6d 3b 0a 20 20 4d 65 6d 20 2a  m *pMem;.  Mem *
298f0 70 52 65 63 3b 0a 20 20 73 71 6c 69 74 65 33 5f  pRec;.  sqlite3_
29900 63 6f 6e 74 65 78 74 20 63 74 78 3b 0a 20 20 73  context ctx;.  s
29910 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61  qlite3_value **a
29920 70 56 61 6c 3b 0a 0a 20 20 6e 20 3d 20 70 4f 70  pVal;..  n = pOp
29930 2d 3e 70 35 3b 0a 20 20 61 73 73 65 72 74 28 20  ->p5;.  assert( 
29940 6e 3e 3d 30 20 29 3b 0a 20 20 70 52 65 63 20 3d  n>=0 );.  pRec =
29950 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
29960 0a 20 20 61 70 56 61 6c 20 3d 20 70 2d 3e 61 70  .  apVal = p->ap
29970 41 72 67 3b 0a 20 20 61 73 73 65 72 74 28 20 61  Arg;.  assert( a
29980 70 56 61 6c 20 7c 7c 20 6e 3d 3d 30 20 29 3b 0a  pVal || n==0 );.
29990 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b 20    for(i=0; i<n; 
299a0 69 2b 2b 2c 20 70 52 65 63 2b 2b 29 7b 0a 20 20  i++, pRec++){.  
299b0 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
299c0 61 6c 69 64 28 70 52 65 63 29 20 29 3b 0a 20 20  alid(pRec) );.  
299d0 20 20 61 70 56 61 6c 5b 69 5d 20 3d 20 70 52 65    apVal[i] = pRe
299e0 63 3b 0a 20 20 20 20 6d 65 6d 41 62 6f 75 74 54  c;.    memAboutT
299f0 6f 43 68 61 6e 67 65 28 70 2c 20 70 52 65 63 29  oChange(p, pRec)
29a00 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
29a10 65 4d 65 6d 53 74 6f 72 65 54 79 70 65 28 70 52  eMemStoreType(pR
29a20 65 63 29 3b 0a 20 20 7d 0a 20 20 63 74 78 2e 70  ec);.  }.  ctx.p
29a30 46 75 6e 63 20 3d 20 70 4f 70 2d 3e 70 34 2e 70  Func = pOp->p4.p
29a40 46 75 6e 63 3b 0a 20 20 61 73 73 65 72 74 28 20  Func;.  assert( 
29a50 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70  pOp->p3>0 && pOp
29a60 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b  ->p3<=p->nMem );
29a70 0a 20 20 63 74 78 2e 70 4d 65 6d 20 3d 20 70 4d  .  ctx.pMem = pM
29a80 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  em = &aMem[pOp->
29a90 70 33 5d 3b 0a 20 20 70 4d 65 6d 2d 3e 6e 2b 2b  p3];.  pMem->n++
29aa0 3b 0a 20 20 63 74 78 2e 73 2e 66 6c 61 67 73 20  ;.  ctx.s.flags 
29ab0 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 63 74  = MEM_Null;.  ct
29ac0 78 2e 73 2e 7a 20 3d 20 30 3b 0a 20 20 63 74 78  x.s.z = 0;.  ctx
29ad0 2e 73 2e 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a  .s.zMalloc = 0;.
29ae0 20 20 63 74 78 2e 73 2e 78 44 65 6c 20 3d 20 30    ctx.s.xDel = 0
29af0 3b 0a 20 20 63 74 78 2e 73 2e 64 62 20 3d 20 64  ;.  ctx.s.db = d
29b00 62 3b 0a 20 20 63 74 78 2e 69 73 45 72 72 6f 72  b;.  ctx.isError
29b10 20 3d 20 30 3b 0a 20 20 63 74 78 2e 70 43 6f 6c   = 0;.  ctx.pCol
29b20 6c 20 3d 20 30 3b 0a 20 20 69 66 28 20 63 74 78  l = 0;.  if( ctx
29b30 2e 70 46 75 6e 63 2d 3e 66 6c 61 67 73 20 26 20  .pFunc->flags & 
29b40 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44  SQLITE_FUNC_NEED
29b50 43 4f 4c 4c 20 29 7b 0a 20 20 20 20 61 73 73 65  COLL ){.    asse
29b60 72 74 28 20 70 4f 70 3e 70 2d 3e 61 4f 70 20 29  rt( pOp>p->aOp )
29b70 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  ;.    assert( pO
29b80 70 5b 2d 31 5d 2e 70 34 74 79 70 65 3d 3d 50 34  p[-1].p4type==P4
29b90 5f 43 4f 4c 4c 53 45 51 20 29 3b 0a 20 20 20 20  _COLLSEQ );.    
29ba0 61 73 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e  assert( pOp[-1].
29bb0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43 6f 6c 6c 53  opcode==OP_CollS
29bc0 65 71 20 29 3b 0a 20 20 20 20 63 74 78 2e 70 43  eq );.    ctx.pC
29bd0 6f 6c 6c 20 3d 20 70 4f 70 5b 2d 31 5d 2e 70 34  oll = pOp[-1].p4
29be0 2e 70 43 6f 6c 6c 3b 0a 20 20 7d 0a 20 20 28 63  .pColl;.  }.  (c
29bf0 74 78 2e 70 46 75 6e 63 2d 3e 78 53 74 65 70 29  tx.pFunc->xStep)
29c00 28 26 63 74 78 2c 20 6e 2c 20 61 70 56 61 6c 29  (&ctx, n, apVal)
29c10 3b 20 2f 2a 20 49 4d 50 3a 20 52 2d 32 34 35 30  ; /* IMP: R-2450
29c20 35 2d 32 33 32 33 30 20 2a 2f 0a 20 20 69 66 28  5-23230 */.  if(
29c30 20 63 74 78 2e 69 73 45 72 72 6f 72 20 29 7b 0a   ctx.isError ){.
29c40 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74      sqlite3SetSt
29c50 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67  ring(&p->zErrMsg
29c60 2c 20 64 62 2c 20 22 25 73 22 2c 20 73 71 6c 69  , db, "%s", sqli
29c70 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 26  te3_value_text(&
29c80 63 74 78 2e 73 29 29 3b 0a 20 20 20 20 72 63 20  ctx.s));.    rc 
29c90 3d 20 63 74 78 2e 69 73 45 72 72 6f 72 3b 0a 20  = ctx.isError;. 
29ca0 20 7d 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65   }.  sqlite3Vdbe
29cb0 4d 65 6d 52 65 6c 65 61 73 65 28 26 63 74 78 2e  MemRelease(&ctx.
29cc0 73 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  s);.  break;.}..
29cd0 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 67 67 46 69  /* Opcode: AggFi
29ce0 6e 61 6c 20 50 31 20 50 32 20 2a 20 50 34 20 2a  nal P1 P2 * P4 *
29cf0 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20 74  .**.** Execute t
29d00 68 65 20 66 69 6e 61 6c 69 7a 65 72 20 66 75 6e  he finalizer fun
29d10 63 74 69 6f 6e 20 66 6f 72 20 61 6e 20 61 67 67  ction for an agg
29d20 72 65 67 61 74 65 2e 20 20 50 31 20 69 73 0a 2a  regate.  P1 is.*
29d30 2a 20 74 68 65 20 6d 65 6d 6f 72 79 20 6c 6f 63  * the memory loc
29d40 61 74 69 6f 6e 20 74 68 61 74 20 69 73 20 74 68  ation that is th
29d50 65 20 61 63 63 75 6d 75 6c 61 74 6f 72 20 66 6f  e accumulator fo
29d60 72 20 74 68 65 20 61 67 67 72 65 67 61 74 65 2e  r the aggregate.
29d70 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73 20 74 68 65  .**.** P2 is the
29d80 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   number of argum
29d90 65 6e 74 73 20 74 68 61 74 20 74 68 65 20 73 74  ents that the st
29da0 65 70 20 66 75 6e 63 74 69 6f 6e 20 74 61 6b 65  ep function take
29db0 73 20 61 6e 64 0a 2a 2a 20 50 34 20 69 73 20 61  s and.** P4 is a
29dc0 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20   pointer to the 
29dd0 46 75 6e 63 44 65 66 20 66 6f 72 20 74 68 69 73  FuncDef for this
29de0 20 66 75 6e 63 74 69 6f 6e 2e 20 20 54 68 65 20   function.  The 
29df0 50 32 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 69  P2.** argument i
29e00 73 20 6e 6f 74 20 75 73 65 64 20 62 79 20 74 68  s not used by th
29e10 69 73 20 6f 70 63 6f 64 65 2e 20 20 49 74 20 69  is opcode.  It i
29e20 73 20 6f 6e 6c 79 20 74 68 65 72 65 20 74 6f 20  s only there to 
29e30 64 69 73 61 6d 62 69 67 75 61 74 65 0a 2a 2a 20  disambiguate.** 
29e40 66 75 6e 63 74 69 6f 6e 73 20 74 68 61 74 20 63  functions that c
29e50 61 6e 20 74 61 6b 65 20 76 61 72 79 69 6e 67 20  an take varying 
29e60 6e 75 6d 62 65 72 73 20 6f 66 20 61 72 67 75 6d  numbers of argum
29e70 65 6e 74 73 2e 20 20 54 68 65 0a 2a 2a 20 50 34  ents.  The.** P4
29e80 20 61 72 67 75 6d 65 6e 74 20 69 73 20 6f 6e 6c   argument is onl
29e90 79 20 6e 65 65 64 65 64 20 66 6f 72 20 74 68 65  y needed for the
29ea0 20 64 65 67 65 6e 65 72 61 74 65 20 63 61 73 65   degenerate case
29eb0 20 77 68 65 72 65 0a 2a 2a 20 74 68 65 20 73 74   where.** the st
29ec0 65 70 20 66 75 6e 63 74 69 6f 6e 20 77 61 73 20  ep function was 
29ed0 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c 79 20 63  not previously c
29ee0 61 6c 6c 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f  alled..*/.case O
29ef0 50 5f 41 67 67 46 69 6e 61 6c 3a 20 7b 0a 20 20  P_AggFinal: {.  
29f00 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20 61 73 73  Mem *pMem;.  ass
29f10 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26  ert( pOp->p1>0 &
29f20 26 20 70 4f 70 2d 3e 70 31 3c 3d 70 2d 3e 6e 4d  & pOp->p1<=p->nM
29f30 65 6d 20 29 3b 0a 20 20 70 4d 65 6d 20 3d 20 26  em );.  pMem = &
29f40 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
29f50 20 61 73 73 65 72 74 28 20 28 70 4d 65 6d 2d 3e   assert( (pMem->
29f60 66 6c 61 67 73 20 26 20 7e 28 4d 45 4d 5f 4e 75  flags & ~(MEM_Nu
29f70 6c 6c 7c 4d 45 4d 5f 41 67 67 29 29 3d 3d 30 20  ll|MEM_Agg))==0 
29f80 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  );.  rc = sqlite
29f90 33 56 64 62 65 4d 65 6d 46 69 6e 61 6c 69 7a 65  3VdbeMemFinalize
29fa0 28 70 4d 65 6d 2c 20 70 4f 70 2d 3e 70 34 2e 70  (pMem, pOp->p4.p
29fb0 46 75 6e 63 29 3b 0a 20 20 69 66 28 20 72 63 20  Func);.  if( rc 
29fc0 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65  ){.    sqlite3Se
29fd0 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72  tString(&p->zErr
29fe0 4d 73 67 2c 20 64 62 2c 20 22 25 73 22 2c 20 73  Msg, db, "%s", s
29ff0 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78  qlite3_value_tex
2a000 74 28 70 4d 65 6d 29 29 3b 0a 20 20 7d 0a 20 20  t(pMem));.  }.  
2a010 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67  sqlite3VdbeChang
2a020 65 45 6e 63 6f 64 69 6e 67 28 70 4d 65 6d 2c 20  eEncoding(pMem, 
2a030 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 55 50 44  encoding);.  UPD
2a040 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45  ATE_MAX_BLOBSIZE
2a050 28 70 4d 65 6d 29 3b 0a 20 20 69 66 28 20 73 71  (pMem);.  if( sq
2a060 6c 69 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42  lite3VdbeMemTooB
2a070 69 67 28 70 4d 65 6d 29 20 29 7b 0a 20 20 20 20  ig(pMem) ){.    
2a080 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20  goto too_big;.  
2a090 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69  }.  break;.}..#i
2a0a0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2a0b0 54 5f 57 41 4c 0a 2f 2a 20 4f 70 63 6f 64 65 3a  T_WAL./* Opcode:
2a0c0 20 43 68 65 63 6b 70 6f 69 6e 74 20 50 31 20 50   Checkpoint P1 P
2a0d0 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43  2 P3 * *.**.** C
2a0e0 68 65 63 6b 70 6f 69 6e 74 20 64 61 74 61 62 61  heckpoint databa
2a0f0 73 65 20 50 31 2e 20 54 68 69 73 20 69 73 20 61  se P1. This is a
2a100 20 6e 6f 2d 6f 70 20 69 66 20 50 31 20 69 73 20   no-op if P1 is 
2a110 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 69 6e  not currently in
2a120 0a 2a 2a 20 57 41 4c 20 6d 6f 64 65 2e 20 50 61  .** WAL mode. Pa
2a130 72 61 6d 65 74 65 72 20 50 32 20 69 73 20 6f 6e  rameter P2 is on
2a140 65 20 6f 66 20 53 51 4c 49 54 45 5f 43 48 45 43  e of SQLITE_CHEC
2a150 4b 50 4f 49 4e 54 5f 50 41 53 53 49 56 45 2c 20  KPOINT_PASSIVE, 
2a160 46 55 4c 4c 0a 2a 2a 20 6f 72 20 52 45 53 54 41  FULL.** or RESTA
2a170 52 54 2e 20 20 57 72 69 74 65 20 31 20 6f 72 20  RT.  Write 1 or 
2a180 30 20 69 6e 74 6f 20 6d 65 6d 5b 50 33 5d 20 69  0 into mem[P3] i
2a190 66 20 74 68 65 20 63 68 65 63 6b 70 6f 69 6e 74  f the checkpoint
2a1a0 20 72 65 74 75 72 6e 73 0a 2a 2a 20 53 51 4c 49   returns.** SQLI
2a1b0 54 45 5f 42 55 53 59 20 6f 72 20 6e 6f 74 2c 20  TE_BUSY or not, 
2a1c0 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20 20 57  respectively.  W
2a1d0 72 69 74 65 20 74 68 65 20 6e 75 6d 62 65 72 20  rite the number 
2a1e0 6f 66 20 70 61 67 65 73 20 69 6e 20 74 68 65 0a  of pages in the.
2a1f0 2a 2a 20 57 41 4c 20 61 66 74 65 72 20 74 68 65  ** WAL after the
2a200 20 63 68 65 63 6b 70 6f 69 6e 74 20 69 6e 74 6f   checkpoint into
2a210 20 6d 65 6d 5b 50 33 2b 31 5d 20 61 6e 64 20 74   mem[P3+1] and t
2a220 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67  he number of pag
2a230 65 73 0a 2a 2a 20 69 6e 20 74 68 65 20 57 41 4c  es.** in the WAL
2a240 20 74 68 61 74 20 68 61 76 65 20 62 65 65 6e 20   that have been 
2a250 63 68 65 63 6b 70 6f 69 6e 74 65 64 20 61 66 74  checkpointed aft
2a260 65 72 20 74 68 65 20 63 68 65 63 6b 70 6f 69 6e  er the checkpoin
2a270 74 0a 2a 2a 20 63 6f 6d 70 6c 65 74 65 73 20 69  t.** completes i
2a280 6e 74 6f 20 6d 65 6d 5b 50 33 2b 32 5d 2e 20 20  nto mem[P3+2].  
2a290 48 6f 77 65 76 65 72 20 6f 6e 20 61 6e 20 65 72  However on an er
2a2a0 72 6f 72 2c 20 6d 65 6d 5b 50 33 2b 31 5d 20 61  ror, mem[P3+1] a
2a2b0 6e 64 0a 2a 2a 20 6d 65 6d 5b 50 33 2b 32 5d 20  nd.** mem[P3+2] 
2a2c0 61 72 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 20  are initialized 
2a2d0 74 6f 20 2d 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f  to -1..*/.case O
2a2e0 50 5f 43 68 65 63 6b 70 6f 69 6e 74 3a 20 7b 0a  P_Checkpoint: {.
2a2f0 20 20 69 6e 74 20 69 3b 20 20 20 20 20 20 20 20    int i;        
2a300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a310 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65    /* Loop counte
2a320 72 20 2a 2f 0a 20 20 69 6e 74 20 61 52 65 73 5b  r */.  int aRes[
2a330 33 5d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  3];             
2a340 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74         /* Result
2a350 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d  s */.  Mem *pMem
2a360 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
2a370 20 20 20 20 20 20 20 2f 2a 20 57 72 69 74 65 20         /* Write 
2a380 72 65 73 75 6c 74 73 20 68 65 72 65 20 2a 2f 0a  results here */.
2a390 0a 20 20 61 52 65 73 5b 30 5d 20 3d 20 30 3b 0a  .  aRes[0] = 0;.
2a3a0 20 20 61 52 65 73 5b 31 5d 20 3d 20 61 52 65 73    aRes[1] = aRes
2a3b0 5b 32 5d 20 3d 20 2d 31 3b 0a 20 20 61 73 73 65  [2] = -1;.  asse
2a3c0 72 74 28 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c  rt( pOp->p2==SQL
2a3d0 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 50  ITE_CHECKPOINT_P
2a3e0 41 53 53 49 56 45 0a 20 20 20 20 20 20 20 7c 7c  ASSIVE.       ||
2a3f0 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45   pOp->p2==SQLITE
2a400 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 46 55 4c 4c  _CHECKPOINT_FULL
2a410 0a 20 20 20 20 20 20 20 7c 7c 20 70 4f 70 2d 3e  .       || pOp->
2a420 70 32 3d 3d 53 51 4c 49 54 45 5f 43 48 45 43 4b  p2==SQLITE_CHECK
2a430 50 4f 49 4e 54 5f 52 45 53 54 41 52 54 0a 20 20  POINT_RESTART.  
2a440 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  );.  rc = sqlite
2a450 33 43 68 65 63 6b 70 6f 69 6e 74 28 64 62 2c 20  3Checkpoint(db, 
2a460 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 32  pOp->p1, pOp->p2
2a470 2c 20 26 61 52 65 73 5b 31 5d 2c 20 26 61 52 65  , &aRes[1], &aRe
2a480 73 5b 32 5d 29 3b 0a 20 20 69 66 28 20 72 63 3d  s[2]);.  if( rc=
2a490 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a  =SQLITE_BUSY ){.
2a4a0 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
2a4b0 4f 4b 3b 0a 20 20 20 20 61 52 65 73 5b 30 5d 20  OK;.    aRes[0] 
2a4c0 3d 20 31 3b 0a 20 20 7d 0a 20 20 66 6f 72 28 69  = 1;.  }.  for(i
2a4d0 3d 30 2c 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d  =0, pMem = &aMem
2a4e0 5b 70 4f 70 2d 3e 70 33 5d 3b 20 69 3c 33 3b 20  [pOp->p3]; i<3; 
2a4f0 69 2b 2b 2c 20 70 4d 65 6d 2b 2b 29 7b 0a 20 20  i++, pMem++){.  
2a500 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
2a510 53 65 74 49 6e 74 36 34 28 70 4d 65 6d 2c 20 28  SetInt64(pMem, (
2a520 69 36 34 29 61 52 65 73 5b 69 5d 29 3b 0a 20 20  i64)aRes[i]);.  
2a530 7d 20 20 20 20 0a 20 20 62 72 65 61 6b 3b 0a 7d  }    .  break;.}
2a540 3b 20 20 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e  ;  .#endif..#ifn
2a550 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2a560 50 52 41 47 4d 41 0a 2f 2a 20 4f 70 63 6f 64 65  PRAGMA./* Opcode
2a570 3a 20 4a 6f 75 72 6e 61 6c 4d 6f 64 65 20 50 31  : JournalMode P1
2a580 20 50 32 20 50 33 20 2a 20 50 35 0a 2a 2a 0a 2a   P2 P3 * P5.**.*
2a590 2a 20 43 68 61 6e 67 65 20 74 68 65 20 6a 6f 75  * Change the jou
2a5a0 72 6e 61 6c 20 6d 6f 64 65 20 6f 66 20 64 61 74  rnal mode of dat
2a5b0 61 62 61 73 65 20 50 31 20 74 6f 20 50 33 2e 20  abase P1 to P3. 
2a5c0 50 33 20 6d 75 73 74 20 62 65 20 6f 6e 65 20 6f  P3 must be one o
2a5d0 66 20 74 68 65 0a 2a 2a 20 50 41 47 45 52 5f 4a  f the.** PAGER_J
2a5e0 4f 55 52 4e 41 4c 4d 4f 44 45 5f 58 58 58 20 76  OURNALMODE_XXX v
2a5f0 61 6c 75 65 73 2e 20 49 66 20 63 68 61 6e 67 69  alues. If changi
2a600 6e 67 20 62 65 74 77 65 65 6e 20 74 68 65 20 76  ng between the v
2a610 61 72 69 6f 75 73 20 72 6f 6c 6c 62 61 63 6b 0a  arious rollback.
2a620 2a 2a 20 6d 6f 64 65 73 20 28 64 65 6c 65 74 65  ** modes (delete
2a630 2c 20 74 72 75 6e 63 61 74 65 2c 20 70 65 72 73  , truncate, pers
2a640 69 73 74 2c 20 6f 66 66 20 61 6e 64 20 6d 65 6d  ist, off and mem
2a650 6f 72 79 29 2c 20 74 68 69 73 20 69 73 20 61 20  ory), this is a 
2a660 73 69 6d 70 6c 65 0a 2a 2a 20 6f 70 65 72 61 74  simple.** operat
2a670 69 6f 6e 2e 20 4e 6f 20 49 4f 20 69 73 20 72 65  ion. No IO is re
2a680 71 75 69 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66  quired..**.** If
2a690 20 63 68 61 6e 67 69 6e 67 20 69 6e 74 6f 20 6f   changing into o
2a6a0 72 20 6f 75 74 20 6f 66 20 57 41 4c 20 6d 6f 64  r out of WAL mod
2a6b0 65 20 74 68 65 20 70 72 6f 63 65 64 75 72 65 20  e the procedure 
2a6c0 69 73 20 6d 6f 72 65 20 63 6f 6d 70 6c 69 63 61  is more complica
2a6d0 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65  ted..**.** Write
2a6e0 20 61 20 73 74 72 69 6e 67 20 63 6f 6e 74 61 69   a string contai
2a6f0 6e 69 6e 67 20 74 68 65 20 66 69 6e 61 6c 20 6a  ning the final j
2a700 6f 75 72 6e 61 6c 2d 6d 6f 64 65 20 74 6f 20 72  ournal-mode to r
2a710 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63  egister P2..*/.c
2a720 61 73 65 20 4f 50 5f 4a 6f 75 72 6e 61 6c 4d 6f  ase OP_JournalMo
2a730 64 65 3a 20 7b 20 20 20 20 2f 2a 20 6f 75 74 32  de: {    /* out2
2a740 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20  -prerelease */. 
2a750 20 42 74 72 65 65 20 2a 70 42 74 3b 20 20 20 20   Btree *pBt;    
2a760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a770 20 2f 2a 20 42 74 72 65 65 20 74 6f 20 63 68 61   /* Btree to cha
2a780 6e 67 65 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65  nge journal mode
2a790 20 6f 66 20 2a 2f 0a 20 20 50 61 67 65 72 20 2a   of */.  Pager *
2a7a0 70 50 61 67 65 72 3b 20 20 20 20 20 20 20 20 20  pPager;         
2a7b0 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 67 65           /* Page
2a7c0 72 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  r associated wit
2a7d0 68 20 70 42 74 20 2a 2f 0a 20 20 69 6e 74 20 65  h pBt */.  int e
2a7e0 4e 65 77 3b 20 20 20 20 20 20 20 20 20 20 20 20  New;            
2a7f0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65             /* Ne
2a800 77 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 2a  w journal mode *
2a810 2f 0a 20 20 69 6e 74 20 65 4f 6c 64 3b 20 20 20  /.  int eOld;   
2a820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a830 20 20 20 20 2f 2a 20 54 68 65 20 6f 6c 64 20 6a      /* The old j
2a840 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 2a 2f 0a 20  ournal mode */. 
2a850 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 69   const char *zFi
2a860 6c 65 6e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  lename;         
2a870 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 64 61 74 61   /* Name of data
2a880 62 61 73 65 20 66 69 6c 65 20 66 6f 72 20 70 50  base file for pP
2a890 61 67 65 72 20 2a 2f 0a 0a 20 20 65 4e 65 77 20  ager */..  eNew 
2a8a0 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73  = pOp->p3;.  ass
2a8b0 65 72 74 28 20 65 4e 65 77 3d 3d 50 41 47 45 52  ert( eNew==PAGER
2a8c0 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 44 45 4c  _JOURNALMODE_DEL
2a8d0 45 54 45 20 0a 20 20 20 20 20 20 20 7c 7c 20 65  ETE .       || e
2a8e0 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e  New==PAGER_JOURN
2a8f0 41 4c 4d 4f 44 45 5f 54 52 55 4e 43 41 54 45 20  ALMODE_TRUNCATE 
2a900 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d  .       || eNew=
2a910 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f  =PAGER_JOURNALMO
2a920 44 45 5f 50 45 52 53 49 53 54 20 0a 20 20 20 20  DE_PERSIST .    
2a930 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45     || eNew==PAGE
2a940 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4f 46  R_JOURNALMODE_OF
2a950 46 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77  F.       || eNew
2a960 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
2a970 4f 44 45 5f 4d 45 4d 4f 52 59 0a 20 20 20 20 20  ODE_MEMORY.     
2a980 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52    || eNew==PAGER
2a990 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c  _JOURNALMODE_WAL
2a9a0 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d  .       || eNew=
2a9b0 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f  =PAGER_JOURNALMO
2a9c0 44 45 5f 51 55 45 52 59 0a 20 20 29 3b 0a 20 20  DE_QUERY.  );.  
2a9d0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
2a9e0 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62  =0 && pOp->p1<db
2a9f0 2d 3e 6e 44 62 20 29 3b 0a 0a 20 20 2f 2a 20 54  ->nDb );..  /* T
2aa00 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 75 73  his opcode is us
2aa10 65 64 20 69 6e 20 74 77 6f 20 70 6c 61 63 65 73  ed in two places
2aa20 3a 20 50 52 41 47 4d 41 20 6a 6f 75 72 6e 61 6c  : PRAGMA journal
2aa30 5f 6d 6f 64 65 20 61 6e 64 20 41 54 54 41 43 48  _mode and ATTACH
2aa40 2e 0a 20 20 2a 2a 20 49 6e 20 50 52 41 47 4d 41  ..  ** In PRAGMA
2aa50 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 2c 20 74   journal_mode, t
2aa60 68 65 20 73 71 6c 69 74 65 33 56 64 62 65 55 73  he sqlite3VdbeUs
2aa70 65 73 42 74 72 65 65 28 29 20 72 6f 75 74 69 6e  esBtree() routin
2aa80 65 20 69 73 20 63 61 6c 6c 65 64 0a 20 20 2a 2a  e is called.  **
2aa90 20 77 68 65 6e 20 74 68 65 20 73 74 61 74 6d 65   when the statme
2aaa0 6e 74 20 69 73 20 70 72 65 70 61 72 65 64 20 61  nt is prepared a
2aab0 6e 64 20 73 6f 20 70 2d 3e 61 4d 75 74 65 78 2e  nd so p->aMutex.
2aac0 6e 4d 75 74 65 78 3e 30 2e 20 20 41 6c 6c 20 6d  nMutex>0.  All m
2aad0 75 74 65 78 65 73 0a 20 20 2a 2a 20 61 72 65 20  utexes.  ** are 
2aae0 61 6c 72 65 61 64 79 20 61 63 71 75 69 72 65 64  already acquired
2aaf0 2e 20 20 42 75 74 20 77 68 65 6e 20 75 73 65 64  .  But when used
2ab00 20 69 6e 20 41 54 54 41 43 48 2c 20 73 71 6c 69   in ATTACH, sqli
2ab10 74 65 33 56 64 62 65 55 73 65 73 42 74 72 65 65  te3VdbeUsesBtree
2ab20 28 29 0a 20 20 2a 2a 20 69 73 20 6e 6f 74 20 63  ().  ** is not c
2ab30 61 6c 6c 65 64 20 77 68 65 6e 20 74 68 65 20 73  alled when the s
2ab40 74 61 74 65 6d 65 6e 74 20 69 73 20 70 72 65 70  tatement is prep
2ab50 61 72 65 64 20 62 65 63 61 75 73 65 20 69 74 20  ared because it 
2ab60 72 65 71 75 69 72 65 73 20 74 68 65 0a 20 20 2a  requires the.  *
2ab70 2a 20 69 44 62 20 69 6e 64 65 78 20 6f 66 20 74  * iDb index of t
2ab80 68 65 20 64 61 74 61 62 61 73 65 20 61 73 20 61  he database as a
2ab90 20 70 61 72 61 6d 65 74 65 72 2c 20 61 6e 64 20   parameter, and 
2aba0 74 68 65 20 64 61 74 61 62 61 73 65 20 68 61 73  the database has
2abb0 20 6e 6f 74 0a 20 20 2a 2a 20 79 65 74 20 62 65   not.  ** yet be
2abc0 65 6e 20 61 74 74 61 63 68 65 64 20 73 6f 20 74  en attached so t
2abd0 68 61 74 20 69 6e 64 65 78 20 69 73 20 75 6e 61  hat index is una
2abe0 76 61 69 6c 61 62 6c 65 2e 20 20 57 65 20 68 61  vailable.  We ha
2abf0 76 65 20 74 6f 20 77 61 69 74 0a 20 20 2a 2a 20  ve to wait.  ** 
2ac00 75 6e 74 69 6c 20 72 75 6e 74 69 6d 65 20 28 6e  until runtime (n
2ac10 6f 77 29 20 74 6f 20 67 65 74 20 74 68 65 20 6d  ow) to get the m
2ac20 75 74 65 78 20 6f 6e 20 74 68 65 20 6e 65 77 6c  utex on the newl
2ac30 79 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62  y attached datab
2ac40 61 73 65 2e 0a 20 20 2a 2a 20 4e 6f 20 6f 74 68  ase..  ** No oth
2ac50 65 72 20 6d 75 74 65 78 65 73 20 61 72 65 20 72  er mutexes are r
2ac60 65 71 75 69 72 65 64 20 62 79 20 74 68 65 20 41  equired by the A
2ac70 54 54 41 43 48 20 63 6f 6d 6d 61 6e 64 20 73 6f  TTACH command so
2ac80 20 74 68 69 73 20 69 73 20 73 61 66 65 0a 20 20   this is safe.  
2ac90 2a 2a 20 74 6f 20 64 6f 2e 0a 20 20 2a 2f 0a 20  ** to do..  */. 
2aca0 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72   assert( (p->btr
2acb0 65 65 4d 61 73 6b 20 26 20 28 31 3c 3c 70 4f 70  eeMask & (1<<pOp
2acc0 2d 3e 70 31 29 29 21 3d 30 20 7c 7c 20 70 2d 3e  ->p1))!=0 || p->
2acd0 61 4d 75 74 65 78 2e 6e 4d 75 74 65 78 3d 3d 30  aMutex.nMutex==0
2ace0 20 29 3b 0a 20 20 69 66 28 20 70 2d 3e 61 4d 75   );.  if( p->aMu
2acf0 74 65 78 2e 6e 4d 75 74 65 78 3d 3d 30 20 29 7b  tex.nMutex==0 ){
2ad00 0a 20 20 20 20 2f 2a 20 54 68 69 73 20 6f 63 63  .    /* This occ
2ad10 75 72 73 20 72 69 67 68 74 20 61 66 74 65 72 20  urs right after 
2ad20 41 54 54 41 43 48 2e 20 20 47 65 74 20 61 20 6d  ATTACH.  Get a m
2ad30 75 74 65 78 20 6f 6e 20 74 68 65 20 6e 65 77 6c  utex on the newl
2ad40 79 20 41 54 54 41 43 48 65 64 0a 20 20 20 20 2a  y ATTACHed.    *
2ad50 2a 20 64 61 74 61 62 61 73 65 2e 20 2a 2f 0a 20  * database. */. 
2ad60 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 55 73     sqlite3VdbeUs
2ad70 65 73 42 74 72 65 65 28 70 2c 20 70 4f 70 2d 3e  esBtree(p, pOp->
2ad80 70 31 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  p1);.    sqlite3
2ad90 56 64 62 65 4d 75 74 65 78 41 72 72 61 79 45 6e  VdbeMutexArrayEn
2ada0 74 65 72 28 70 29 3b 0a 20 20 7d 0a 0a 20 20 70  ter(p);.  }..  p
2adb0 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70  Bt = db->aDb[pOp
2adc0 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20 20 70 50 61  ->p1].pBt;.  pPa
2add0 67 65 72 20 3d 20 73 71 6c 69 74 65 33 42 74 72  ger = sqlite3Btr
2ade0 65 65 50 61 67 65 72 28 70 42 74 29 3b 0a 20 20  eePager(pBt);.  
2adf0 65 4f 6c 64 20 3d 20 73 71 6c 69 74 65 33 50 61  eOld = sqlite3Pa
2ae00 67 65 72 47 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64  gerGetJournalMod
2ae10 65 28 70 50 61 67 65 72 29 3b 0a 20 20 69 66 28  e(pPager);.  if(
2ae20 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55   eNew==PAGER_JOU
2ae30 52 4e 41 4c 4d 4f 44 45 5f 51 55 45 52 59 20 29  RNALMODE_QUERY )
2ae40 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a 20 20   eNew = eOld;.  
2ae50 69 66 28 20 21 73 71 6c 69 74 65 33 50 61 67 65  if( !sqlite3Page
2ae60 72 4f 6b 54 6f 43 68 61 6e 67 65 4a 6f 75 72 6e  rOkToChangeJourn
2ae70 61 6c 4d 6f 64 65 28 70 50 61 67 65 72 29 20 29  alMode(pPager) )
2ae80 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a 0a 23   eNew = eOld;..#
2ae90 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2aea0 49 54 5f 57 41 4c 0a 20 20 7a 46 69 6c 65 6e 61  IT_WAL.  zFilena
2aeb0 6d 65 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65  me = sqlite3Page
2aec0 72 46 69 6c 65 6e 61 6d 65 28 70 50 61 67 65 72  rFilename(pPager
2aed0 29 3b 0a 0a 20 20 2f 2a 20 44 6f 20 6e 6f 74 20  );..  /* Do not 
2aee0 61 6c 6c 6f 77 20 61 20 74 72 61 6e 73 69 74 69  allow a transiti
2aef0 6f 6e 20 74 6f 20 6a 6f 75 72 6e 61 6c 5f 6d 6f  on to journal_mo
2af00 64 65 3d 57 41 4c 20 66 6f 72 20 61 20 64 61 74  de=WAL for a dat
2af10 61 62 61 73 65 0a 20 20 2a 2a 20 69 6e 20 74 65  abase.  ** in te
2af20 6d 70 6f 72 61 72 79 20 73 74 6f 72 61 67 65 20  mporary storage 
2af30 6f 72 20 69 66 20 74 68 65 20 56 46 53 20 64 6f  or if the VFS do
2af40 65 73 20 6e 6f 74 20 73 75 70 70 6f 72 74 20 73  es not support s
2af50 68 61 72 65 64 20 6d 65 6d 6f 72 79 20 0a 20 20  hared memory .  
2af60 2a 2f 0a 20 20 69 66 28 20 65 4e 65 77 3d 3d 50  */.  if( eNew==P
2af70 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
2af80 5f 57 41 4c 0a 20 20 20 26 26 20 28 7a 46 69 6c  _WAL.   && (zFil
2af90 65 6e 61 6d 65 5b 30 5d 3d 3d 30 20 20 20 20 20  ename[0]==0     
2afa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2afb0 20 20 20 20 2f 2a 20 54 65 6d 70 20 66 69 6c 65      /* Temp file
2afc0 20 2a 2f 0a 20 20 20 20 20 20 20 7c 7c 20 21 73   */.       || !s
2afd0 71 6c 69 74 65 33 50 61 67 65 72 57 61 6c 53 75  qlite3PagerWalSu
2afe0 70 70 6f 72 74 65 64 28 70 50 61 67 65 72 29 29  pported(pPager))
2aff0 20 20 20 2f 2a 20 4e 6f 20 73 68 61 72 65 64 2d     /* No shared-
2b000 6d 65 6d 6f 72 79 20 73 75 70 70 6f 72 74 20 2a  memory support *
2b010 2f 0a 20 20 29 7b 0a 20 20 20 20 65 4e 65 77 20  /.  ){.    eNew 
2b020 3d 20 65 4f 6c 64 3b 0a 20 20 7d 0a 0a 20 20 69  = eOld;.  }..  i
2b030 66 28 20 28 65 4e 65 77 21 3d 65 4f 6c 64 29 0a  f( (eNew!=eOld).
2b040 20 20 20 26 26 20 28 65 4f 6c 64 3d 3d 50 41 47     && (eOld==PAG
2b050 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57  ER_JOURNALMODE_W
2b060 41 4c 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45  AL || eNew==PAGE
2b070 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41  R_JOURNALMODE_WA
2b080 4c 29 0a 20 20 29 7b 0a 20 20 20 20 69 66 28 20  L).  ){.    if( 
2b090 21 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20  !db->autoCommit 
2b0a0 7c 7c 20 64 62 2d 3e 61 63 74 69 76 65 56 64 62  || db->activeVdb
2b0b0 65 43 6e 74 3e 31 20 29 7b 0a 20 20 20 20 20 20  eCnt>1 ){.      
2b0c0 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f  rc = SQLITE_ERRO
2b0d0 52 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  R;.      sqlite3
2b0e0 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45  SetString(&p->zE
2b0f0 72 72 4d 73 67 2c 20 64 62 2c 20 0a 20 20 20 20  rrMsg, db, .    
2b100 20 20 20 20 20 20 22 63 61 6e 6e 6f 74 20 63 68        "cannot ch
2b110 61 6e 67 65 20 25 73 20 77 61 6c 20 6d 6f 64 65  ange %s wal mode
2b120 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 61 20 74   from within a t
2b130 72 61 6e 73 61 63 74 69 6f 6e 22 2c 0a 20 20 20  ransaction",.   
2b140 20 20 20 20 20 20 20 28 65 4e 65 77 3d 3d 50 41         (eNew==PA
2b150 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
2b160 57 41 4c 20 3f 20 22 69 6e 74 6f 22 20 3a 20 22  WAL ? "into" : "
2b170 6f 75 74 20 6f 66 22 29 0a 20 20 20 20 20 20 29  out of").      )
2b180 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  ;.      break;. 
2b190 20 20 20 7d 65 6c 73 65 7b 0a 20 0a 20 20 20 20     }else{. .    
2b1a0 20 20 69 66 28 20 65 4f 6c 64 3d 3d 50 41 47 45    if( eOld==PAGE
2b1b0 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41  R_JOURNALMODE_WA
2b1c0 4c 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20  L ){.        /* 
2b1d0 49 66 20 6c 65 61 76 69 6e 67 20 57 41 4c 20 6d  If leaving WAL m
2b1e0 6f 64 65 2c 20 63 6c 6f 73 65 20 74 68 65 20 6c  ode, close the l
2b1f0 6f 67 20 66 69 6c 65 2e 20 49 66 20 73 75 63 63  og file. If succ
2b200 65 73 73 66 75 6c 2c 20 74 68 65 20 63 61 6c 6c  essful, the call
2b210 0a 20 20 20 20 20 20 20 20 2a 2a 20 74 6f 20 50  .        ** to P
2b220 61 67 65 72 43 6c 6f 73 65 57 61 6c 28 29 20 63  agerCloseWal() c
2b230 68 65 63 6b 70 6f 69 6e 74 73 20 61 6e 64 20 64  heckpoints and d
2b240 65 6c 65 74 65 73 20 74 68 65 20 77 72 69 74 65  eletes the write
2b250 2d 61 68 65 61 64 2d 6c 6f 67 20 0a 20 20 20 20  -ahead-log .    
2b260 20 20 20 20 2a 2a 20 66 69 6c 65 2e 20 41 6e 20      ** file. An 
2b270 45 58 43 4c 55 53 49 56 45 20 6c 6f 63 6b 20 6d  EXCLUSIVE lock m
2b280 61 79 20 73 74 69 6c 6c 20 62 65 20 68 65 6c 64  ay still be held
2b290 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   on the database
2b2a0 20 66 69 6c 65 20 0a 20 20 20 20 20 20 20 20 2a   file .        *
2b2b0 2a 20 61 66 74 65 72 20 61 20 73 75 63 63 65 73  * after a succes
2b2c0 73 66 75 6c 20 72 65 74 75 72 6e 2e 20 0a 20 20  sful return. .  
2b2d0 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 20        */.       
2b2e0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 50 61 67   rc = sqlite3Pag
2b2f0 65 72 43 6c 6f 73 65 57 61 6c 28 70 50 61 67 65  erCloseWal(pPage
2b300 72 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  r);.        if( 
2b310 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc==SQLITE_OK ){
2b320 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
2b330 65 33 50 61 67 65 72 53 65 74 4a 6f 75 72 6e 61  e3PagerSetJourna
2b340 6c 4d 6f 64 65 28 70 50 61 67 65 72 2c 20 65 4e  lMode(pPager, eN
2b350 65 77 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  ew);.        }. 
2b360 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 65       }else if( e
2b370 4f 6c 64 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e  Old==PAGER_JOURN
2b380 41 4c 4d 4f 44 45 5f 4d 45 4d 4f 52 59 20 29 7b  ALMODE_MEMORY ){
2b390 0a 20 20 20 20 20 20 20 20 2f 2a 20 43 61 6e 6e  .        /* Cann
2b3a0 6f 74 20 74 72 61 6e 73 69 74 69 6f 6e 20 64 69  ot transition di
2b3b0 72 65 63 74 6c 79 20 66 72 6f 6d 20 4d 45 4d 4f  rectly from MEMO
2b3c0 52 59 20 74 6f 20 57 41 4c 2e 20 20 55 73 65 20  RY to WAL.  Use 
2b3d0 6d 6f 64 65 20 4f 46 46 0a 20 20 20 20 20 20 20  mode OFF.       
2b3e0 20 2a 2a 20 61 73 20 61 6e 20 69 6e 74 65 72 6d   ** as an interm
2b3f0 65 64 69 61 74 65 20 2a 2f 0a 20 20 20 20 20 20  ediate */.      
2b400 20 20 73 71 6c 69 74 65 33 50 61 67 65 72 53 65    sqlite3PagerSe
2b410 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61  tJournalMode(pPa
2b420 67 65 72 2c 20 50 41 47 45 52 5f 4a 4f 55 52 4e  ger, PAGER_JOURN
2b430 41 4c 4d 4f 44 45 5f 4f 46 46 29 3b 0a 20 20 20  ALMODE_OFF);.   
2b440 20 20 20 7d 0a 20 20 0a 20 20 20 20 20 20 2f 2a     }.  .      /*
2b450 20 4f 70 65 6e 20 61 20 74 72 61 6e 73 61 63 74   Open a transact
2b460 69 6f 6e 20 6f 6e 20 74 68 65 20 64 61 74 61 62  ion on the datab
2b470 61 73 65 20 66 69 6c 65 2e 20 52 65 67 61 72 64  ase file. Regard
2b480 6c 65 73 73 20 6f 66 20 74 68 65 20 6a 6f 75 72  less of the jour
2b490 6e 61 6c 0a 20 20 20 20 20 20 2a 2a 20 6d 6f 64  nal.      ** mod
2b4a0 65 2c 20 74 68 69 73 20 74 72 61 6e 73 61 63 74  e, this transact
2b4b0 69 6f 6e 20 61 6c 77 61 79 73 20 75 73 65 73 20  ion always uses 
2b4c0 61 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e  a rollback journ
2b4d0 61 6c 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20  al..      */.   
2b4e0 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74     assert( sqlit
2b4f0 65 33 42 74 72 65 65 49 73 49 6e 54 72 61 6e 73  e3BtreeIsInTrans
2b500 28 70 42 74 29 3d 3d 30 20 29 3b 0a 20 20 20 20  (pBt)==0 );.    
2b510 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
2b520 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 72  _OK ){.        r
2b530 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
2b540 53 65 74 56 65 72 73 69 6f 6e 28 70 42 74 2c 20  SetVersion(pBt, 
2b550 28 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55  (eNew==PAGER_JOU
2b560 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 3f 20 32  RNALMODE_WAL ? 2
2b570 20 3a 20 31 29 29 3b 0a 20 20 20 20 20 20 7d 0a   : 1));.      }.
2b580 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66      }.  }.#endif
2b590 20 2f 2a 20 69 66 6e 64 65 66 20 53 51 4c 49 54   /* ifndef SQLIT
2b5a0 45 5f 4f 4d 49 54 5f 57 41 4c 20 2a 2f 0a 0a 20  E_OMIT_WAL */.. 
2b5b0 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20 65   if( rc ){.    e
2b5c0 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a 20 20 7d 0a  New = eOld;.  }.
2b5d0 20 20 65 4e 65 77 20 3d 20 73 71 6c 69 74 65 33    eNew = sqlite3
2b5e0 50 61 67 65 72 53 65 74 4a 6f 75 72 6e 61 6c 4d  PagerSetJournalM
2b5f0 6f 64 65 28 70 50 61 67 65 72 2c 20 65 4e 65 77  ode(pPager, eNew
2b600 29 3b 0a 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d  );..  pOut = &aM
2b610 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70  em[pOp->p2];.  p
2b620 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
2b630 5f 53 74 72 7c 4d 45 4d 5f 53 74 61 74 69 63 7c  _Str|MEM_Static|
2b640 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f 75 74  MEM_Term;.  pOut
2b650 2d 3e 7a 20 3d 20 28 63 68 61 72 20 2a 29 73 71  ->z = (char *)sq
2b660 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4d 6f 64 65  lite3JournalMode
2b670 6e 61 6d 65 28 65 4e 65 77 29 3b 0a 20 20 70 4f  name(eNew);.  pO
2b680 75 74 2d 3e 6e 20 3d 20 73 71 6c 69 74 65 33 53  ut->n = sqlite3S
2b690 74 72 6c 65 6e 33 30 28 70 4f 75 74 2d 3e 7a 29  trlen30(pOut->z)
2b6a0 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20  ;.  pOut->enc = 
2b6b0 53 51 4c 49 54 45 5f 55 54 46 38 3b 0a 20 20 73  SQLITE_UTF8;.  s
2b6c0 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
2b6d0 45 6e 63 6f 64 69 6e 67 28 70 4f 75 74 2c 20 65  Encoding(pOut, e
2b6e0 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 62 72 65 61  ncoding);.  brea
2b6f0 6b 3b 0a 7d 3b 0a 23 65 6e 64 69 66 20 2f 2a 20  k;.};.#endif /* 
2b700 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 41 47  SQLITE_OMIT_PRAG
2b710 4d 41 20 2a 2f 0a 0a 23 69 66 20 21 64 65 66 69  MA */..#if !defi
2b720 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
2b730 56 41 43 55 55 4d 29 20 26 26 20 21 64 65 66 69  VACUUM) && !defi
2b740 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
2b750 41 54 54 41 43 48 29 0a 2f 2a 20 4f 70 63 6f 64  ATTACH)./* Opcod
2b760 65 3a 20 56 61 63 75 75 6d 20 2a 20 2a 20 2a 20  e: Vacuum * * * 
2b770 2a 20 2a 0a 2a 2a 0a 2a 2a 20 56 61 63 75 75 6d  * *.**.** Vacuum
2b780 20 74 68 65 20 65 6e 74 69 72 65 20 64 61 74 61   the entire data
2b790 62 61 73 65 2e 20 20 54 68 69 73 20 6f 70 63 6f  base.  This opco
2b7a0 64 65 20 77 69 6c 6c 20 63 61 75 73 65 20 6f 74  de will cause ot
2b7b0 68 65 72 20 76 69 72 74 75 61 6c 0a 2a 2a 20 6d  her virtual.** m
2b7c0 61 63 68 69 6e 65 73 20 74 6f 20 62 65 20 63 72  achines to be cr
2b7d0 65 61 74 65 64 20 61 6e 64 20 72 75 6e 2e 20 20  eated and run.  
2b7e0 49 74 20 6d 61 79 20 6e 6f 74 20 62 65 20 63 61  It may not be ca
2b7f0 6c 6c 65 64 20 66 72 6f 6d 20 77 69 74 68 69 6e  lled from within
2b800 0a 2a 2a 20 61 20 74 72 61 6e 73 61 63 74 69 6f  .** a transactio
2b810 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 61  n..*/.case OP_Va
2b820 63 75 75 6d 3a 20 7b 0a 20 20 72 63 20 3d 20 73  cuum: {.  rc = s
2b830 71 6c 69 74 65 33 52 75 6e 56 61 63 75 75 6d 28  qlite3RunVacuum(
2b840 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 29  &p->zErrMsg, db)
2b850 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  ;.  break;.}.#en
2b860 64 69 66 0a 0a 23 69 66 20 21 64 65 66 69 6e 65  dif..#if !define
2b870 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55  d(SQLITE_OMIT_AU
2b880 54 4f 56 41 43 55 55 4d 29 0a 2f 2a 20 4f 70 63  TOVACUUM)./* Opc
2b890 6f 64 65 3a 20 49 6e 63 72 56 61 63 75 75 6d 20  ode: IncrVacuum 
2b8a0 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
2b8b0 2a 20 50 65 72 66 6f 72 6d 20 61 20 73 69 6e 67  * Perform a sing
2b8c0 6c 65 20 73 74 65 70 20 6f 66 20 74 68 65 20 69  le step of the i
2b8d0 6e 63 72 65 6d 65 6e 74 61 6c 20 76 61 63 75 75  ncremental vacuu
2b8e0 6d 20 70 72 6f 63 65 64 75 72 65 20 6f 6e 0a 2a  m procedure on.*
2b8f0 2a 20 74 68 65 20 50 31 20 64 61 74 61 62 61 73  * the P1 databas
2b900 65 2e 20 49 66 20 74 68 65 20 76 61 63 75 75 6d  e. If the vacuum
2b910 20 68 61 73 20 66 69 6e 69 73 68 65 64 2c 20 6a   has finished, j
2b920 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69  ump to instructi
2b930 6f 6e 0a 2a 2a 20 50 32 2e 20 4f 74 68 65 72 77  on.** P2. Otherw
2b940 69 73 65 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67  ise, fall throug
2b950 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e  h to the next in
2b960 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61  struction..*/.ca
2b970 73 65 20 4f 50 5f 49 6e 63 72 56 61 63 75 75 6d  se OP_IncrVacuum
2b980 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  : {        /* ju
2b990 6d 70 20 2a 2f 0a 20 20 42 74 72 65 65 20 2a 70  mp */.  Btree *p
2b9a0 42 74 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  Bt;..  assert( p
2b9b0 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
2b9c0 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a  ->p1<db->nDb );.
2b9d0 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74    assert( (p->bt
2b9e0 72 65 65 4d 61 73 6b 20 26 20 28 31 3c 3c 70 4f  reeMask & (1<<pO
2b9f0 70 2d 3e 70 31 29 29 21 3d 30 20 29 3b 0a 20 20  p->p1))!=0 );.  
2ba00 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f  pBt = db->aDb[pO
2ba10 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20 20 72 63  p->p1].pBt;.  rc
2ba20 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 49   = sqlite3BtreeI
2ba30 6e 63 72 56 61 63 75 75 6d 28 70 42 74 29 3b 0a  ncrVacuum(pBt);.
2ba40 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
2ba50 5f 44 4f 4e 45 20 29 7b 0a 20 20 20 20 70 63 20  _DONE ){.    pc 
2ba60 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
2ba70 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f     rc = SQLITE_O
2ba80 4b 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  K;.  }.  break;.
2ba90 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63  }.#endif../* Opc
2baa0 6f 64 65 3a 20 45 78 70 69 72 65 20 50 31 20 2a  ode: Expire P1 *
2bab0 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 61 75   * * *.**.** Cau
2bac0 73 65 20 70 72 65 63 6f 6d 70 69 6c 65 64 20 73  se precompiled s
2bad0 74 61 74 65 6d 65 6e 74 73 20 74 6f 20 62 65 63  tatements to bec
2bae0 6f 6d 65 20 65 78 70 69 72 65 64 2e 20 41 6e 20  ome expired. An 
2baf0 65 78 70 69 72 65 64 20 73 74 61 74 65 6d 65 6e  expired statemen
2bb00 74 0a 2a 2a 20 66 61 69 6c 73 20 77 69 74 68 20  t.** fails with 
2bb10 61 6e 20 65 72 72 6f 72 20 63 6f 64 65 20 6f 66  an error code of
2bb20 20 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 20 69   SQLITE_SCHEMA i
2bb30 66 20 69 74 20 69 73 20 65 76 65 72 20 65 78 65  f it is ever exe
2bb40 63 75 74 65 64 20 0a 2a 2a 20 28 76 69 61 20 73  cuted .** (via s
2bb50 71 6c 69 74 65 33 5f 73 74 65 70 28 29 29 2e 0a  qlite3_step())..
2bb60 2a 2a 20 0a 2a 2a 20 49 66 20 50 31 20 69 73 20  ** .** If P1 is 
2bb70 30 2c 20 74 68 65 6e 20 61 6c 6c 20 53 51 4c 20  0, then all SQL 
2bb80 73 74 61 74 65 6d 65 6e 74 73 20 62 65 63 6f 6d  statements becom
2bb90 65 20 65 78 70 69 72 65 64 2e 20 49 66 20 50 31  e expired. If P1
2bba0 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 0a 2a 2a   is non-zero,.**
2bbb0 20 74 68 65 6e 20 6f 6e 6c 79 20 74 68 65 20 63   then only the c
2bbc0 75 72 72 65 6e 74 6c 79 20 65 78 65 63 75 74 69  urrently executi
2bbd0 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  ng statement is 
2bbe0 61 66 66 65 63 74 65 64 2e 20 0a 2a 2f 0a 63 61  affected. .*/.ca
2bbf0 73 65 20 4f 50 5f 45 78 70 69 72 65 3a 20 7b 0a  se OP_Expire: {.
2bc00 20 20 69 66 28 20 21 70 4f 70 2d 3e 70 31 20 29    if( !pOp->p1 )
2bc10 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 45 78 70  {.    sqlite3Exp
2bc20 69 72 65 50 72 65 70 61 72 65 64 53 74 61 74 65  irePreparedState
2bc30 6d 65 6e 74 73 28 64 62 29 3b 0a 20 20 7d 65 6c  ments(db);.  }el
2bc40 73 65 7b 0a 20 20 20 20 70 2d 3e 65 78 70 69 72  se{.    p->expir
2bc50 65 64 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 62 72  ed = 1;.  }.  br
2bc60 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20  eak;.}..#ifndef 
2bc70 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52  SQLITE_OMIT_SHAR
2bc80 45 44 5f 43 41 43 48 45 0a 2f 2a 20 4f 70 63 6f  ED_CACHE./* Opco
2bc90 64 65 3a 20 54 61 62 6c 65 4c 6f 63 6b 20 50 31  de: TableLock P1
2bca0 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a   P2 P3 P4 *.**.*
2bcb0 2a 20 4f 62 74 61 69 6e 20 61 20 6c 6f 63 6b 20  * Obtain a lock 
2bcc0 6f 6e 20 61 20 70 61 72 74 69 63 75 6c 61 72 20  on a particular 
2bcd0 74 61 62 6c 65 2e 20 54 68 69 73 20 69 6e 73 74  table. This inst
2bce0 72 75 63 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20  ruction is only 
2bcf0 75 73 65 64 20 77 68 65 6e 0a 2a 2a 20 74 68 65  used when.** the
2bd00 20 73 68 61 72 65 64 2d 63 61 63 68 65 20 66 65   shared-cache fe
2bd10 61 74 75 72 65 20 69 73 20 65 6e 61 62 6c 65 64  ature is enabled
2bd20 2e 20 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74  . .**.** P1 is t
2bd30 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20  he index of the 
2bd40 64 61 74 61 62 61 73 65 20 69 6e 20 73 71 6c 69  database in sqli
2bd50 74 65 33 2e 61 44 62 5b 5d 20 6f 66 20 74 68 65  te3.aDb[] of the
2bd60 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 6f 6e 20   database.** on 
2bd70 77 68 69 63 68 20 74 68 65 20 6c 6f 63 6b 20 69  which the lock i
2bd80 73 20 61 63 71 75 69 72 65 64 2e 20 20 41 20 72  s acquired.  A r
2bd90 65 61 64 6c 6f 63 6b 20 69 73 20 6f 62 74 61 69  eadlock is obtai
2bda0 6e 65 64 20 69 66 20 50 33 3d 3d 30 20 6f 72 0a  ned if P3==0 or.
2bdb0 2a 2a 20 61 20 77 72 69 74 65 20 6c 6f 63 6b 20  ** a write lock 
2bdc0 69 66 20 50 33 3d 3d 31 2e 0a 2a 2a 0a 2a 2a 20  if P3==1..**.** 
2bdd0 50 32 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20  P2 contains the 
2bde0 72 6f 6f 74 2d 70 61 67 65 20 6f 66 20 74 68 65  root-page of the
2bdf0 20 74 61 62 6c 65 20 74 6f 20 6c 6f 63 6b 2e 0a   table to lock..
2be00 2a 2a 0a 2a 2a 20 50 34 20 63 6f 6e 74 61 69 6e  **.** P4 contain
2be10 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  s a pointer to t
2be20 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74  he name of the t
2be30 61 62 6c 65 20 62 65 69 6e 67 20 6c 6f 63 6b 65  able being locke
2be40 64 2e 20 54 68 69 73 20 69 73 20 6f 6e 6c 79 0a  d. This is only.
2be50 2a 2a 20 75 73 65 64 20 74 6f 20 67 65 6e 65 72  ** used to gener
2be60 61 74 65 20 61 6e 20 65 72 72 6f 72 20 6d 65 73  ate an error mes
2be70 73 61 67 65 20 69 66 20 74 68 65 20 6c 6f 63 6b  sage if the lock
2be80 20 63 61 6e 6e 6f 74 20 62 65 20 6f 62 74 61 69   cannot be obtai
2be90 6e 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ned..*/.case OP_
2bea0 54 61 62 6c 65 4c 6f 63 6b 3a 20 7b 0a 20 20 75  TableLock: {.  u
2beb0 38 20 69 73 57 72 69 74 65 4c 6f 63 6b 20 3d 20  8 isWriteLock = 
2bec0 28 75 38 29 70 4f 70 2d 3e 70 33 3b 0a 20 20 69  (u8)pOp->p3;.  i
2bed0 66 28 20 69 73 57 72 69 74 65 4c 6f 63 6b 20 7c  f( isWriteLock |
2bee0 7c 20 30 3d 3d 28 64 62 2d 3e 66 6c 61 67 73 26  | 0==(db->flags&
2bef0 53 51 4c 49 54 45 5f 52 65 61 64 55 6e 63 6f 6d  SQLITE_ReadUncom
2bf00 6d 69 74 74 65 64 29 20 29 7b 0a 20 20 20 20 69  mitted) ){.    i
2bf10 6e 74 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b  nt p1 = pOp->p1;
2bf20 20 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 31   .    assert( p1
2bf30 3e 3d 30 20 26 26 20 70 31 3c 64 62 2d 3e 6e 44  >=0 && p1<db->nD
2bf40 62 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  b );.    assert(
2bf50 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26   (p->btreeMask &
2bf60 20 28 31 3c 3c 70 31 29 29 21 3d 30 20 29 3b 0a   (1<<p1))!=0 );.
2bf70 20 20 20 20 61 73 73 65 72 74 28 20 69 73 57 72      assert( isWr
2bf80 69 74 65 4c 6f 63 6b 3d 3d 30 20 7c 7c 20 69 73  iteLock==0 || is
2bf90 57 72 69 74 65 4c 6f 63 6b 3d 3d 31 20 29 3b 0a  WriteLock==1 );.
2bfa0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
2bfb0 42 74 72 65 65 4c 6f 63 6b 54 61 62 6c 65 28 64  BtreeLockTable(d
2bfc0 62 2d 3e 61 44 62 5b 70 31 5d 2e 70 42 74 2c 20  b->aDb[p1].pBt, 
2bfd0 70 4f 70 2d 3e 70 32 2c 20 69 73 57 72 69 74 65  pOp->p2, isWrite
2bfe0 4c 6f 63 6b 29 3b 0a 20 20 20 20 69 66 28 20 28  Lock);.    if( (
2bff0 72 63 26 30 78 46 46 29 3d 3d 53 51 4c 49 54 45  rc&0xFF)==SQLITE
2c000 5f 4c 4f 43 4b 45 44 20 29 7b 0a 20 20 20 20 20  _LOCKED ){.     
2c010 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 20 3d   const char *z =
2c020 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 20 20   pOp->p4.z;.    
2c030 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69    sqlite3SetStri
2c040 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20  ng(&p->zErrMsg, 
2c050 64 62 2c 20 22 64 61 74 61 62 61 73 65 20 74 61  db, "database ta
2c060 62 6c 65 20 69 73 20 6c 6f 63 6b 65 64 3a 20 25  ble is locked: %
2c070 73 22 2c 20 7a 29 3b 0a 20 20 20 20 7d 0a 20 20  s", z);.    }.  
2c080 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  }.  break;.}.#en
2c090 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
2c0a0 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48 45 20  IT_SHARED_CACHE 
2c0b0 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
2c0c0 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
2c0d0 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ABLE./* Opcode: 
2c0e0 56 42 65 67 69 6e 20 2a 20 2a 20 2a 20 50 34 20  VBegin * * * P4 
2c0f0 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 6d 61 79 20 62  *.**.** P4 may b
2c100 65 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  e a pointer to a
2c110 6e 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73  n sqlite3_vtab s
2c120 74 72 75 63 74 75 72 65 2e 20 49 66 20 73 6f 2c  tructure. If so,
2c130 20 63 61 6c 6c 20 74 68 65 20 0a 2a 2a 20 78 42   call the .** xB
2c140 65 67 69 6e 20 6d 65 74 68 6f 64 20 66 6f 72 20  egin method for 
2c150 74 68 61 74 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a  that table..**.*
2c160 2a 20 41 6c 73 6f 2c 20 77 68 65 74 68 65 72 20  * Also, whether 
2c170 6f 72 20 6e 6f 74 20 50 34 20 69 73 20 73 65 74  or not P4 is set
2c180 2c 20 63 68 65 63 6b 20 74 68 61 74 20 74 68 69  , check that thi
2c190 73 20 69 73 20 6e 6f 74 20 62 65 69 6e 67 20 63  s is not being c
2c1a0 61 6c 6c 65 64 20 66 72 6f 6d 0a 2a 2a 20 77 69  alled from.** wi
2c1b0 74 68 69 6e 20 61 20 63 61 6c 6c 62 61 63 6b 20  thin a callback 
2c1c0 74 6f 20 61 20 76 69 72 74 75 61 6c 20 74 61 62  to a virtual tab
2c1d0 6c 65 20 78 53 79 6e 63 28 29 20 6d 65 74 68 6f  le xSync() metho
2c1e0 64 2e 20 49 66 20 69 74 20 69 73 2c 20 74 68 65  d. If it is, the
2c1f0 20 65 72 72 6f 72 0a 2a 2a 20 63 6f 64 65 20 77   error.** code w
2c200 69 6c 6c 20 62 65 20 73 65 74 20 74 6f 20 53 51  ill be set to SQ
2c210 4c 49 54 45 5f 4c 4f 43 4b 45 44 2e 0a 2a 2f 0a  LITE_LOCKED..*/.
2c220 63 61 73 65 20 4f 50 5f 56 42 65 67 69 6e 3a 20  case OP_VBegin: 
2c230 7b 0a 20 20 56 54 61 62 6c 65 20 2a 70 56 54 61  {.  VTable *pVTa
2c240 62 3b 0a 20 20 70 56 54 61 62 20 3d 20 70 4f 70  b;.  pVTab = pOp
2c250 2d 3e 70 34 2e 70 56 74 61 62 3b 0a 20 20 72 63  ->p4.pVtab;.  rc
2c260 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62 42 65   = sqlite3VtabBe
2c270 67 69 6e 28 64 62 2c 20 70 56 54 61 62 29 3b 0a  gin(db, pVTab);.
2c280 20 20 69 66 28 20 70 56 54 61 62 20 29 20 69 6d    if( pVTab ) im
2c290 70 6f 72 74 56 74 61 62 45 72 72 4d 73 67 28 70  portVtabErrMsg(p
2c2a0 2c 20 70 56 54 61 62 2d 3e 70 56 74 61 62 29 3b  , pVTab->pVtab);
2c2b0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
2c2c0 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
2c2d0 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a  T_VIRTUALTABLE *
2c2e0 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  /..#ifndef SQLIT
2c2f0 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
2c300 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56  BLE./* Opcode: V
2c310 43 72 65 61 74 65 20 50 31 20 2a 20 2a 20 50 34  Create P1 * * P4
2c320 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 74   *.**.** P4 is t
2c330 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 76 69 72  he name of a vir
2c340 74 75 61 6c 20 74 61 62 6c 65 20 69 6e 20 64 61  tual table in da
2c350 74 61 62 61 73 65 20 50 31 2e 20 43 61 6c 6c 20  tabase P1. Call 
2c360 74 68 65 20 78 43 72 65 61 74 65 20 6d 65 74 68  the xCreate meth
2c370 6f 64 0a 2a 2a 20 66 6f 72 20 74 68 61 74 20 74  od.** for that t
2c380 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  able..*/.case OP
2c390 5f 56 43 72 65 61 74 65 3a 20 7b 0a 20 20 72 63  _VCreate: {.  rc
2c3a0 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62 43 61   = sqlite3VtabCa
2c3b0 6c 6c 43 72 65 61 74 65 28 64 62 2c 20 70 4f 70  llCreate(db, pOp
2c3c0 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c  ->p1, pOp->p4.z,
2c3d0 20 26 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20   &p->zErrMsg);. 
2c3e0 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
2c3f0 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
2c400 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a  VIRTUALTABLE */.
2c410 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2c420 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
2c430 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 44 65  E./* Opcode: VDe
2c440 73 74 72 6f 79 20 50 31 20 2a 20 2a 20 50 34 20  stroy P1 * * P4 
2c450 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 74 68  *.**.** P4 is th
2c460 65 20 6e 61 6d 65 20 6f 66 20 61 20 76 69 72 74  e name of a virt
2c470 75 61 6c 20 74 61 62 6c 65 20 69 6e 20 64 61 74  ual table in dat
2c480 61 62 61 73 65 20 50 31 2e 20 20 43 61 6c 6c 20  abase P1.  Call 
2c490 74 68 65 20 78 44 65 73 74 72 6f 79 20 6d 65 74  the xDestroy met
2c4a0 68 6f 64 0a 2a 2a 20 6f 66 20 74 68 61 74 20 74  hod.** of that t
2c4b0 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  able..*/.case OP
2c4c0 5f 56 44 65 73 74 72 6f 79 3a 20 7b 0a 20 20 70  _VDestroy: {.  p
2c4d0 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64 20 3d  ->inVtabMethod =
2c4e0 20 32 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   2;.  rc = sqlit
2c4f0 65 33 56 74 61 62 43 61 6c 6c 44 65 73 74 72 6f  e3VtabCallDestro
2c500 79 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70  y(db, pOp->p1, p
2c510 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 70 2d 3e  Op->p4.z);.  p->
2c520 69 6e 56 74 61 62 4d 65 74 68 6f 64 20 3d 20 30  inVtabMethod = 0
2c530 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  ;.  break;.}.#en
2c540 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
2c550 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20  IT_VIRTUALTABLE 
2c560 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
2c570 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
2c580 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ABLE./* Opcode: 
2c590 56 4f 70 65 6e 20 50 31 20 2a 20 2a 20 50 34 20  VOpen P1 * * P4 
2c5a0 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20  *.**.** P4 is a 
2c5b0 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 76 69 72  pointer to a vir
2c5c0 74 75 61 6c 20 74 61 62 6c 65 20 6f 62 6a 65 63  tual table objec
2c5d0 74 2c 20 61 6e 20 73 71 6c 69 74 65 33 5f 76 74  t, an sqlite3_vt
2c5e0 61 62 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a  ab structure..**
2c5f0 20 50 31 20 69 73 20 61 20 63 75 72 73 6f 72 20   P1 is a cursor 
2c600 6e 75 6d 62 65 72 2e 20 20 54 68 69 73 20 6f 70  number.  This op
2c610 63 6f 64 65 20 6f 70 65 6e 73 20 61 20 63 75 72  code opens a cur
2c620 73 6f 72 20 74 6f 20 74 68 65 20 76 69 72 74 75  sor to the virtu
2c630 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 61 6e 64 20  al.** table and 
2c640 73 74 6f 72 65 73 20 74 68 61 74 20 63 75 72 73  stores that curs
2c650 6f 72 20 69 6e 20 50 31 2e 0a 2a 2f 0a 63 61 73  or in P1..*/.cas
2c660 65 20 4f 50 5f 56 4f 70 65 6e 3a 20 7b 0a 20 20  e OP_VOpen: {.  
2c670 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72  VdbeCursor *pCur
2c680 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62  ;.  sqlite3_vtab
2c690 5f 63 75 72 73 6f 72 20 2a 70 56 74 61 62 43 75  _cursor *pVtabCu
2c6a0 72 73 6f 72 3b 0a 20 20 73 71 6c 69 74 65 33 5f  rsor;.  sqlite3_
2c6b0 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 73  vtab *pVtab;.  s
2c6c0 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70  qlite3_module *p
2c6d0 4d 6f 64 75 6c 65 3b 0a 0a 20 20 70 43 75 72 20  Module;..  pCur 
2c6e0 3d 20 30 3b 0a 20 20 70 56 74 61 62 43 75 72 73  = 0;.  pVtabCurs
2c6f0 6f 72 20 3d 20 30 3b 0a 20 20 70 56 74 61 62 20  or = 0;.  pVtab 
2c700 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62 2d  = pOp->p4.pVtab-
2c710 3e 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c  >pVtab;.  pModul
2c720 65 20 3d 20 28 73 71 6c 69 74 65 33 5f 6d 6f 64  e = (sqlite3_mod
2c730 75 6c 65 20 2a 29 70 56 74 61 62 2d 3e 70 4d 6f  ule *)pVtab->pMo
2c740 64 75 6c 65 3b 0a 20 20 61 73 73 65 72 74 28 70  dule;.  assert(p
2c750 56 74 61 62 20 26 26 20 70 4d 6f 64 75 6c 65 29  Vtab && pModule)
2c760 3b 0a 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65  ;.  rc = pModule
2c770 2d 3e 78 4f 70 65 6e 28 70 56 74 61 62 2c 20 26  ->xOpen(pVtab, &
2c780 70 56 74 61 62 43 75 72 73 6f 72 29 3b 0a 20 20  pVtabCursor);.  
2c790 69 6d 70 6f 72 74 56 74 61 62 45 72 72 4d 73 67  importVtabErrMsg
2c7a0 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 69 66  (p, pVtab);.  if
2c7b0 28 20 53 51 4c 49 54 45 5f 4f 4b 3d 3d 72 63 20  ( SQLITE_OK==rc 
2c7c0 29 7b 0a 20 20 20 20 2f 2a 20 49 6e 69 74 69 61  ){.    /* Initia
2c7d0 6c 69 7a 65 20 73 71 6c 69 74 65 33 5f 76 74 61  lize sqlite3_vta
2c7e0 62 5f 63 75 72 73 6f 72 20 62 61 73 65 20 63 6c  b_cursor base cl
2c7f0 61 73 73 20 2a 2f 0a 20 20 20 20 70 56 74 61 62  ass */.    pVtab
2c800 43 75 72 73 6f 72 2d 3e 70 56 74 61 62 20 3d 20  Cursor->pVtab = 
2c810 70 56 74 61 62 3b 0a 0a 20 20 20 20 2f 2a 20 49  pVtab;..    /* I
2c820 6e 69 74 69 61 6c 69 73 65 20 76 64 62 65 20 63  nitialise vdbe c
2c830 75 72 73 6f 72 20 6f 62 6a 65 63 74 20 2a 2f 0a  ursor object */.
2c840 20 20 20 20 70 43 75 72 20 3d 20 61 6c 6c 6f 63      pCur = alloc
2c850 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70  ateCursor(p, pOp
2c860 2d 3e 70 31 2c 20 30 2c 20 2d 31 2c 20 30 29 3b  ->p1, 0, -1, 0);
2c870 0a 20 20 20 20 69 66 28 20 70 43 75 72 20 29 7b  .    if( pCur ){
2c880 0a 20 20 20 20 20 20 70 43 75 72 2d 3e 70 56 74  .      pCur->pVt
2c890 61 62 43 75 72 73 6f 72 20 3d 20 70 56 74 61 62  abCursor = pVtab
2c8a0 43 75 72 73 6f 72 3b 0a 20 20 20 20 20 20 70 43  Cursor;.      pC
2c8b0 75 72 2d 3e 70 4d 6f 64 75 6c 65 20 3d 20 70 56  ur->pModule = pV
2c8c0 74 61 62 43 75 72 73 6f 72 2d 3e 70 56 74 61 62  tabCursor->pVtab
2c8d0 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 20 20 7d  ->pModule;.    }
2c8e0 65 6c 73 65 7b 0a 20 20 20 20 20 20 64 62 2d 3e  else{.      db->
2c8f0 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 3d 20 31  mallocFailed = 1
2c900 3b 0a 20 20 20 20 20 20 70 4d 6f 64 75 6c 65 2d  ;.      pModule-
2c910 3e 78 43 6c 6f 73 65 28 70 56 74 61 62 43 75 72  >xClose(pVtabCur
2c920 73 6f 72 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  sor);.    }.  }.
2c930 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
2c940 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
2c950 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f  _VIRTUALTABLE */
2c960 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
2c970 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
2c980 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 46  LE./* Opcode: VF
2c990 69 6c 74 65 72 20 50 31 20 50 32 20 50 33 20 50  ilter P1 P2 P3 P
2c9a0 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20  4 *.**.** P1 is 
2c9b0 61 20 63 75 72 73 6f 72 20 6f 70 65 6e 65 64 20  a cursor opened 
2c9c0 75 73 69 6e 67 20 56 4f 70 65 6e 2e 20 20 50 32  using VOpen.  P2
2c9d0 20 69 73 20 61 6e 20 61 64 64 72 65 73 73 20 74   is an address t
2c9e0 6f 20 6a 75 6d 70 20 74 6f 20 69 66 0a 2a 2a 20  o jump to if.** 
2c9f0 74 68 65 20 66 69 6c 74 65 72 65 64 20 72 65 73  the filtered res
2ca00 75 6c 74 20 73 65 74 20 69 73 20 65 6d 70 74 79  ult set is empty
2ca10 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 65 69  ..**.** P4 is ei
2ca20 74 68 65 72 20 4e 55 4c 4c 20 6f 72 20 61 20 73  ther NULL or a s
2ca30 74 72 69 6e 67 20 74 68 61 74 20 77 61 73 20 67  tring that was g
2ca40 65 6e 65 72 61 74 65 64 20 62 79 20 74 68 65 20  enerated by the 
2ca50 78 42 65 73 74 49 6e 64 65 78 0a 2a 2a 20 6d 65  xBestIndex.** me
2ca60 74 68 6f 64 20 6f 66 20 74 68 65 20 6d 6f 64 75  thod of the modu
2ca70 6c 65 2e 20 20 54 68 65 20 69 6e 74 65 72 70 72  le.  The interpr
2ca80 65 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 50  etation of the P
2ca90 34 20 73 74 72 69 6e 67 20 69 73 20 6c 65 66 74  4 string is left
2caa0 0a 2a 2a 20 74 6f 20 74 68 65 20 6d 6f 64 75 6c  .** to the modul
2cab0 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
2cac0 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ..**.** This opc
2cad0 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74 68 65 20  ode invokes the 
2cae0 78 46 69 6c 74 65 72 20 6d 65 74 68 6f 64 20 6f  xFilter method o
2caf0 6e 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61  n the virtual ta
2cb00 62 6c 65 20 73 70 65 63 69 66 69 65 64 0a 2a 2a  ble specified.**
2cb10 20 62 79 20 50 31 2e 20 20 54 68 65 20 69 6e 74   by P1.  The int
2cb20 65 67 65 72 20 71 75 65 72 79 20 70 6c 61 6e 20  eger query plan 
2cb30 70 61 72 61 6d 65 74 65 72 20 74 6f 20 78 46 69  parameter to xFi
2cb40 6c 74 65 72 20 69 73 20 73 74 6f 72 65 64 20 69  lter is stored i
2cb50 6e 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 50 33  n register.** P3
2cb60 2e 20 52 65 67 69 73 74 65 72 20 50 33 2b 31 20  . Register P3+1 
2cb70 73 74 6f 72 65 73 20 74 68 65 20 61 72 67 63 20  stores the argc 
2cb80 70 61 72 61 6d 65 74 65 72 20 74 6f 20 62 65 20  parameter to be 
2cb90 70 61 73 73 65 64 20 74 6f 20 74 68 65 0a 2a 2a  passed to the.**
2cba0 20 78 46 69 6c 74 65 72 20 6d 65 74 68 6f 64 2e   xFilter method.
2cbb0 20 52 65 67 69 73 74 65 72 73 20 50 33 2b 32 2e   Registers P3+2.
2cbc0 2e 50 33 2b 31 2b 61 72 67 63 20 61 72 65 20 74  .P3+1+argc are t
2cbd0 68 65 20 61 72 67 63 0a 2a 2a 20 61 64 64 69 74  he argc.** addit
2cbe0 69 6f 6e 61 6c 20 70 61 72 61 6d 65 74 65 72 73  ional parameters
2cbf0 20 77 68 69 63 68 20 61 72 65 20 70 61 73 73 65   which are passe
2cc00 64 20 74 6f 0a 2a 2a 20 78 46 69 6c 74 65 72 20  d to.** xFilter 
2cc10 61 73 20 61 72 67 76 2e 20 52 65 67 69 73 74 65  as argv. Registe
2cc20 72 20 50 33 2b 32 20 62 65 63 6f 6d 65 73 20 61  r P3+2 becomes a
2cc30 72 67 76 5b 30 5d 20 77 68 65 6e 20 70 61 73 73  rgv[0] when pass
2cc40 65 64 20 74 6f 20 78 46 69 6c 74 65 72 2e 0a 2a  ed to xFilter..*
2cc50 2a 0a 2a 2a 20 41 20 6a 75 6d 70 20 69 73 20 6d  *.** A jump is m
2cc60 61 64 65 20 74 6f 20 50 32 20 69 66 20 74 68 65  ade to P2 if the
2cc70 20 72 65 73 75 6c 74 20 73 65 74 20 61 66 74 65   result set afte
2cc80 72 20 66 69 6c 74 65 72 69 6e 67 20 77 6f 75 6c  r filtering woul
2cc90 64 20 62 65 20 65 6d 70 74 79 2e 0a 2a 2f 0a 63  d be empty..*/.c
2cca0 61 73 65 20 4f 50 5f 56 46 69 6c 74 65 72 3a 20  ase OP_VFilter: 
2ccb0 7b 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20  {   /* jump */. 
2ccc0 20 69 6e 74 20 6e 41 72 67 3b 0a 20 20 69 6e 74   int nArg;.  int
2ccd0 20 69 51 75 65 72 79 3b 0a 20 20 63 6f 6e 73 74   iQuery;.  const
2cce0 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20   sqlite3_module 
2ccf0 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 4d 65 6d 20  *pModule;.  Mem 
2cd00 2a 70 51 75 65 72 79 3b 0a 20 20 4d 65 6d 20 2a  *pQuery;.  Mem *
2cd10 70 41 72 67 63 3b 0a 20 20 73 71 6c 69 74 65 33  pArgc;.  sqlite3
2cd20 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 2a 70 56  _vtab_cursor *pV
2cd30 74 61 62 43 75 72 73 6f 72 3b 0a 20 20 73 71 6c  tabCursor;.  sql
2cd40 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62  ite3_vtab *pVtab
2cd50 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  ;.  VdbeCursor *
2cd60 70 43 75 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b  pCur;.  int res;
2cd70 0a 20 20 69 6e 74 20 69 3b 0a 20 20 4d 65 6d 20  .  int i;.  Mem 
2cd80 2a 2a 61 70 41 72 67 3b 0a 0a 20 20 70 51 75 65  **apArg;..  pQue
2cd90 72 79 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ry = &aMem[pOp->
2cda0 70 33 5d 3b 0a 20 20 70 41 72 67 63 20 3d 20 26  p3];.  pArgc = &
2cdb0 70 51 75 65 72 79 5b 31 5d 3b 0a 20 20 70 43 75  pQuery[1];.  pCu
2cdc0 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  r = p->apCsr[pOp
2cdd0 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
2cde0 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 51 75 65   memIsValid(pQue
2cdf0 72 79 29 20 29 3b 0a 20 20 52 45 47 49 53 54 45  ry) );.  REGISTE
2ce00 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c  R_TRACE(pOp->p3,
2ce10 20 70 51 75 65 72 79 29 3b 0a 20 20 61 73 73 65   pQuery);.  asse
2ce20 72 74 28 20 70 43 75 72 2d 3e 70 56 74 61 62 43  rt( pCur->pVtabC
2ce30 75 72 73 6f 72 20 29 3b 0a 20 20 70 56 74 61 62  ursor );.  pVtab
2ce40 43 75 72 73 6f 72 20 3d 20 70 43 75 72 2d 3e 70  Cursor = pCur->p
2ce50 56 74 61 62 43 75 72 73 6f 72 3b 0a 20 20 70 56  VtabCursor;.  pV
2ce60 74 61 62 20 3d 20 70 56 74 61 62 43 75 72 73 6f  tab = pVtabCurso
2ce70 72 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64  r->pVtab;.  pMod
2ce80 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f  ule = pVtab->pMo
2ce90 64 75 6c 65 3b 0a 0a 20 20 2f 2a 20 47 72 61 62  dule;..  /* Grab
2cea0 20 74 68 65 20 69 6e 64 65 78 20 6e 75 6d 62 65   the index numbe
2ceb0 72 20 61 6e 64 20 61 72 67 63 20 70 61 72 61 6d  r and argc param
2cec0 65 74 65 72 73 20 2a 2f 0a 20 20 61 73 73 65 72  eters */.  asser
2ced0 74 28 20 28 70 51 75 65 72 79 2d 3e 66 6c 61 67  t( (pQuery->flag
2cee0 73 26 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 26 26  s&MEM_Int)!=0 &&
2cef0 20 70 41 72 67 63 2d 3e 66 6c 61 67 73 3d 3d 4d   pArgc->flags==M
2cf00 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 6e 41 72 67  EM_Int );.  nArg
2cf10 20 3d 20 28 69 6e 74 29 70 41 72 67 63 2d 3e 75   = (int)pArgc->u
2cf20 2e 69 3b 0a 20 20 69 51 75 65 72 79 20 3d 20 28  .i;.  iQuery = (
2cf30 69 6e 74 29 70 51 75 65 72 79 2d 3e 75 2e 69 3b  int)pQuery->u.i;
2cf40 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68  ..  /* Invoke th
2cf50 65 20 78 46 69 6c 74 65 72 20 6d 65 74 68 6f 64  e xFilter method
2cf60 20 2a 2f 0a 20 20 7b 0a 20 20 20 20 72 65 73 20   */.  {.    res 
2cf70 3d 20 30 3b 0a 20 20 20 20 61 70 41 72 67 20 3d  = 0;.    apArg =
2cf80 20 70 2d 3e 61 70 41 72 67 3b 0a 20 20 20 20 66   p->apArg;.    f
2cf90 6f 72 28 69 20 3d 20 30 3b 20 69 3c 6e 41 72 67  or(i = 0; i<nArg
2cfa0 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 61 70  ; i++){.      ap
2cfb0 41 72 67 5b 69 5d 20 3d 20 26 70 41 72 67 63 5b  Arg[i] = &pArgc[
2cfc0 69 2b 31 5d 3b 0a 20 20 20 20 20 20 73 71 6c 69  i+1];.      sqli
2cfd0 74 65 33 56 64 62 65 4d 65 6d 53 74 6f 72 65 54  te3VdbeMemStoreT
2cfe0 79 70 65 28 61 70 41 72 67 5b 69 5d 29 3b 0a 20  ype(apArg[i]);. 
2cff0 20 20 20 7d 0a 0a 20 20 20 20 70 2d 3e 69 6e 56     }..    p->inV
2d000 74 61 62 4d 65 74 68 6f 64 20 3d 20 31 3b 0a 20  tabMethod = 1;. 
2d010 20 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d     rc = pModule-
2d020 3e 78 46 69 6c 74 65 72 28 70 56 74 61 62 43 75  >xFilter(pVtabCu
2d030 72 73 6f 72 2c 20 69 51 75 65 72 79 2c 20 70 4f  rsor, iQuery, pO
2d040 70 2d 3e 70 34 2e 7a 2c 20 6e 41 72 67 2c 20 61  p->p4.z, nArg, a
2d050 70 41 72 67 29 3b 0a 20 20 20 20 70 2d 3e 69 6e  pArg);.    p->in
2d060 56 74 61 62 4d 65 74 68 6f 64 20 3d 20 30 3b 0a  VtabMethod = 0;.
2d070 20 20 20 20 69 6d 70 6f 72 74 56 74 61 62 45 72      importVtabEr
2d080 72 4d 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a  rMsg(p, pVtab);.
2d090 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
2d0a0 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 72  TE_OK ){.      r
2d0b0 65 73 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 45  es = pModule->xE
2d0c0 6f 66 28 70 56 74 61 62 43 75 72 73 6f 72 29 3b  of(pVtabCursor);
2d0d0 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69 66 28 20  .    }..    if( 
2d0e0 72 65 73 20 29 7b 0a 20 20 20 20 20 20 70 63 20  res ){.      pc 
2d0f0 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
2d100 20 20 20 7d 0a 20 20 7d 0a 20 20 70 43 75 72 2d     }.  }.  pCur-
2d110 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 0a 20  >nullRow = 0;.. 
2d120 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
2d130 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
2d140 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a  VIRTUALTABLE */.
2d150 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2d160 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
2d170 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 43 6f  E./* Opcode: VCo
2d180 6c 75 6d 6e 20 50 31 20 50 32 20 50 33 20 2a 20  lumn P1 P2 P3 * 
2d190 2a 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 74 68  *.**.** Store th
2d1a0 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 50  e value of the P
2d1b0 32 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f 66 0a 2a  2-th column of.*
2d1c0 2a 20 74 68 65 20 72 6f 77 20 6f 66 20 74 68 65  * the row of the
2d1d0 20 76 69 72 74 75 61 6c 2d 74 61 62 6c 65 20 74   virtual-table t
2d1e0 68 61 74 20 74 68 65 20 0a 2a 2a 20 50 31 20 63  hat the .** P1 c
2d1f0 75 72 73 6f 72 20 69 73 20 70 6f 69 6e 74 69 6e  ursor is pointin
2d200 67 20 74 6f 20 69 6e 74 6f 20 72 65 67 69 73 74  g to into regist
2d210 65 72 20 50 33 2e 0a 2a 2f 0a 63 61 73 65 20 4f  er P3..*/.case O
2d220 50 5f 56 43 6f 6c 75 6d 6e 3a 20 7b 0a 20 20 73  P_VColumn: {.  s
2d230 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74  qlite3_vtab *pVt
2d240 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69  ab;.  const sqli
2d250 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64  te3_module *pMod
2d260 75 6c 65 3b 0a 20 20 4d 65 6d 20 2a 70 44 65 73  ule;.  Mem *pDes
2d270 74 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e  t;.  sqlite3_con
2d280 74 65 78 74 20 73 43 6f 6e 74 65 78 74 3b 0a 0a  text sContext;..
2d290 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
2d2a0 75 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  ur = p->apCsr[pO
2d2b0 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
2d2c0 28 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72  ( pCur->pVtabCur
2d2d0 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28  sor );.  assert(
2d2e0 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f   pOp->p3>0 && pO
2d2f0 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29  p->p3<=p->nMem )
2d300 3b 0a 20 20 70 44 65 73 74 20 3d 20 26 61 4d 65  ;.  pDest = &aMe
2d310 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65  m[pOp->p3];.  me
2d320 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
2d330 2c 20 70 44 65 73 74 29 3b 0a 20 20 69 66 28 20  , pDest);.  if( 
2d340 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b  pCur->nullRow ){
2d350 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
2d360 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 44 65 73 74  MemSetNull(pDest
2d370 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  );.    break;.  
2d380 7d 0a 20 20 70 56 74 61 62 20 3d 20 70 43 75 72  }.  pVtab = pCur
2d390 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 2d 3e 70  ->pVtabCursor->p
2d3a0 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20  Vtab;.  pModule 
2d3b0 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65  = pVtab->pModule
2d3c0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4d 6f 64  ;.  assert( pMod
2d3d0 75 6c 65 2d 3e 78 43 6f 6c 75 6d 6e 20 29 3b 0a  ule->xColumn );.
2d3e0 20 20 6d 65 6d 73 65 74 28 26 73 43 6f 6e 74 65    memset(&sConte
2d3f0 78 74 2c 20 30 2c 20 73 69 7a 65 6f 66 28 73 43  xt, 0, sizeof(sC
2d400 6f 6e 74 65 78 74 29 29 3b 0a 0a 20 20 2f 2a 20  ontext));..  /* 
2d410 54 68 65 20 6f 75 74 70 75 74 20 63 65 6c 6c 20  The output cell 
2d420 6d 61 79 20 61 6c 72 65 61 64 79 20 68 61 76 65  may already have
2d430 20 61 20 62 75 66 66 65 72 20 61 6c 6c 6f 63 61   a buffer alloca
2d440 74 65 64 2e 20 4d 6f 76 65 0a 20 20 2a 2a 20 74  ted. Move.  ** t
2d450 68 65 20 63 75 72 72 65 6e 74 20 63 6f 6e 74 65  he current conte
2d460 6e 74 73 20 74 6f 20 73 43 6f 6e 74 65 78 74 2e  nts to sContext.
2d470 73 20 73 6f 20 69 6e 20 63 61 73 65 20 74 68 65  s so in case the
2d480 20 75 73 65 72 2d 66 75 6e 63 74 69 6f 6e 20 0a   user-function .
2d490 20 20 2a 2a 20 63 61 6e 20 75 73 65 20 74 68 65    ** can use the
2d4a0 20 61 6c 72 65 61 64 79 20 61 6c 6c 6f 63 61 74   already allocat
2d4b0 65 64 20 62 75 66 66 65 72 20 69 6e 73 74 65 61  ed buffer instea
2d4c0 64 20 6f 66 20 61 6c 6c 6f 63 61 74 69 6e 67 20  d of allocating 
2d4d0 61 20 0a 20 20 2a 2a 20 6e 65 77 20 6f 6e 65 2e  a .  ** new one.
2d4e0 0a 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56  .  */.  sqlite3V
2d4f0 64 62 65 4d 65 6d 4d 6f 76 65 28 26 73 43 6f 6e  dbeMemMove(&sCon
2d500 74 65 78 74 2e 73 2c 20 70 44 65 73 74 29 3b 0a  text.s, pDest);.
2d510 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
2d520 28 26 73 43 6f 6e 74 65 78 74 2e 73 2c 20 4d 45  (&sContext.s, ME
2d530 4d 5f 4e 75 6c 6c 29 3b 0a 0a 20 20 72 63 20 3d  M_Null);..  rc =
2d540 20 70 4d 6f 64 75 6c 65 2d 3e 78 43 6f 6c 75 6d   pModule->xColum
2d550 6e 28 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72  n(pCur->pVtabCur
2d560 73 6f 72 2c 20 26 73 43 6f 6e 74 65 78 74 2c 20  sor, &sContext, 
2d570 70 4f 70 2d 3e 70 32 29 3b 0a 20 20 69 6d 70 6f  pOp->p2);.  impo
2d580 72 74 56 74 61 62 45 72 72 4d 73 67 28 70 2c 20  rtVtabErrMsg(p, 
2d590 70 56 74 61 62 29 3b 0a 20 20 69 66 28 20 73 43  pVtab);.  if( sC
2d5a0 6f 6e 74 65 78 74 2e 69 73 45 72 72 6f 72 20 29  ontext.isError )
2d5b0 7b 0a 20 20 20 20 72 63 20 3d 20 73 43 6f 6e 74  {.    rc = sCont
2d5c0 65 78 74 2e 69 73 45 72 72 6f 72 3b 0a 20 20 7d  ext.isError;.  }
2d5d0 0a 0a 20 20 2f 2a 20 43 6f 70 79 20 74 68 65 20  ..  /* Copy the 
2d5e0 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 66 75  result of the fu
2d5f0 6e 63 74 69 6f 6e 20 74 6f 20 74 68 65 20 50 33  nction to the P3
2d600 20 72 65 67 69 73 74 65 72 2e 20 57 65 0a 20 20   register. We.  
2d610 2a 2a 20 64 6f 20 74 68 69 73 20 72 65 67 61 72  ** do this regar
2d620 64 6c 65 73 73 20 6f 66 20 77 68 65 74 68 65 72  dless of whether
2d630 20 6f 72 20 6e 6f 74 20 61 6e 20 65 72 72 6f 72   or not an error
2d640 20 6f 63 63 75 72 72 65 64 20 74 6f 20 65 6e 73   occurred to ens
2d650 75 72 65 20 61 6e 79 0a 20 20 2a 2a 20 64 79 6e  ure any.  ** dyn
2d660 61 6d 69 63 20 61 6c 6c 6f 63 61 74 69 6f 6e 20  amic allocation 
2d670 69 6e 20 73 43 6f 6e 74 65 78 74 2e 73 20 28 61  in sContext.s (a
2d680 20 4d 65 6d 20 73 74 72 75 63 74 29 20 69 73 20   Mem struct) is 
2d690 20 72 65 6c 65 61 73 65 64 2e 0a 20 20 2a 2f 0a   released..  */.
2d6a0 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61    sqlite3VdbeCha
2d6b0 6e 67 65 45 6e 63 6f 64 69 6e 67 28 26 73 43 6f  ngeEncoding(&sCo
2d6c0 6e 74 65 78 74 2e 73 2c 20 65 6e 63 6f 64 69 6e  ntext.s, encodin
2d6d0 67 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  g);.  sqlite3Vdb
2d6e0 65 4d 65 6d 4d 6f 76 65 28 70 44 65 73 74 2c 20  eMemMove(pDest, 
2d6f0 26 73 43 6f 6e 74 65 78 74 2e 73 29 3b 0a 20 20  &sContext.s);.  
2d700 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
2d710 4f 70 2d 3e 70 33 2c 20 70 44 65 73 74 29 3b 0a  Op->p3, pDest);.
2d720 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f    UPDATE_MAX_BLO
2d730 42 53 49 5a 45 28 70 44 65 73 74 29 3b 0a 0a 20  BSIZE(pDest);.. 
2d740 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65   if( sqlite3Vdbe
2d750 4d 65 6d 54 6f 6f 42 69 67 28 70 44 65 73 74 29  MemTooBig(pDest)
2d760 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f   ){.    goto too
2d770 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 62 72 65 61  _big;.  }.  brea
2d780 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k;.}.#endif /* S
2d790 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
2d7a0 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e  ALTABLE */..#ifn
2d7b0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2d7c0 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20  VIRTUALTABLE./* 
2d7d0 4f 70 63 6f 64 65 3a 20 56 4e 65 78 74 20 50 31  Opcode: VNext P1
2d7e0 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
2d7f0 41 64 76 61 6e 63 65 20 76 69 72 74 75 61 6c 20  Advance virtual 
2d800 74 61 62 6c 65 20 50 31 20 74 6f 20 74 68 65 20  table P1 to the 
2d810 6e 65 78 74 20 72 6f 77 20 69 6e 20 69 74 73 20  next row in its 
2d820 72 65 73 75 6c 74 20 73 65 74 20 61 6e 64 0a 2a  result set and.*
2d830 2a 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75  * jump to instru
2d840 63 74 69 6f 6e 20 50 32 2e 20 20 4f 72 2c 20 69  ction P2.  Or, i
2d850 66 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61  f the virtual ta
2d860 62 6c 65 20 68 61 73 20 72 65 61 63 68 65 64 0a  ble has reached.
2d870 2a 2a 20 74 68 65 20 65 6e 64 20 6f 66 20 69 74  ** the end of it
2d880 73 20 72 65 73 75 6c 74 20 73 65 74 2c 20 74 68  s result set, th
2d890 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20  en fall through 
2d8a0 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74  to the next inst
2d8b0 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65  ruction..*/.case
2d8c0 20 4f 50 5f 56 4e 65 78 74 3a 20 7b 20 20 20 2f   OP_VNext: {   /
2d8d0 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 73 71 6c 69  * jump */.  sqli
2d8e0 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b  te3_vtab *pVtab;
2d8f0 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33  .  const sqlite3
2d900 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65  _module *pModule
2d910 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 56  ;.  int res;.  V
2d920 64 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72 3b  dbeCursor *pCur;
2d930 0a 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 70  ..  res = 0;.  p
2d940 43 75 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70  Cur = p->apCsr[p
2d950 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
2d960 74 28 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75  t( pCur->pVtabCu
2d970 72 73 6f 72 20 29 3b 0a 20 20 69 66 28 20 70 43  rsor );.  if( pC
2d980 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20  ur->nullRow ){. 
2d990 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20     break;.  }.  
2d9a0 70 56 74 61 62 20 3d 20 70 43 75 72 2d 3e 70 56  pVtab = pCur->pV
2d9b0 74 61 62 43 75 72 73 6f 72 2d 3e 70 56 74 61 62  tabCursor->pVtab
2d9c0 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56  ;.  pModule = pV
2d9d0 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20  tab->pModule;.  
2d9e0 61 73 73 65 72 74 28 20 70 4d 6f 64 75 6c 65 2d  assert( pModule-
2d9f0 3e 78 4e 65 78 74 20 29 3b 0a 0a 20 20 2f 2a 20  >xNext );..  /* 
2da00 49 6e 76 6f 6b 65 20 74 68 65 20 78 4e 65 78 74  Invoke the xNext
2da10 28 29 20 6d 65 74 68 6f 64 20 6f 66 20 74 68 65  () method of the
2da20 20 6d 6f 64 75 6c 65 2e 20 54 68 65 72 65 20 69   module. There i
2da30 73 20 6e 6f 20 77 61 79 20 66 6f 72 20 74 68 65  s no way for the
2da40 0a 20 20 2a 2a 20 75 6e 64 65 72 6c 79 69 6e 67  .  ** underlying
2da50 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
2da60 74 6f 20 72 65 74 75 72 6e 20 61 6e 20 65 72 72  to return an err
2da70 6f 72 20 69 66 20 6f 6e 65 20 6f 63 63 75 72 73  or if one occurs
2da80 20 64 75 72 69 6e 67 0a 20 20 2a 2a 20 78 4e 65   during.  ** xNe
2da90 78 74 28 29 2e 20 49 6e 73 74 65 61 64 2c 20 69  xt(). Instead, i
2daa0 66 20 61 6e 20 65 72 72 6f 72 20 6f 63 63 75 72  f an error occur
2dab0 73 2c 20 74 72 75 65 20 69 73 20 72 65 74 75 72  s, true is retur
2dac0 6e 65 64 20 28 69 6e 64 69 63 61 74 69 6e 67 20  ned (indicating 
2dad0 74 68 61 74 20 0a 20 20 2a 2a 20 64 61 74 61 20  that .  ** data 
2dae0 69 73 20 61 76 61 69 6c 61 62 6c 65 29 20 61 6e  is available) an
2daf0 64 20 74 68 65 20 65 72 72 6f 72 20 63 6f 64 65  d the error code
2db00 20 72 65 74 75 72 6e 65 64 20 77 68 65 6e 20 78   returned when x
2db10 43 6f 6c 75 6d 6e 20 6f 72 0a 20 20 2a 2a 20 73  Column or.  ** s
2db20 6f 6d 65 20 6f 74 68 65 72 20 6d 65 74 68 6f 64  ome other method
2db30 20 69 73 20 6e 65 78 74 20 69 6e 76 6f 6b 65 64   is next invoked
2db40 20 6f 6e 20 74 68 65 20 73 61 76 65 20 76 69 72   on the save vir
2db50 74 75 61 6c 20 74 61 62 6c 65 20 63 75 72 73 6f  tual table curso
2db60 72 2e 0a 20 20 2a 2f 0a 20 20 70 2d 3e 69 6e 56  r..  */.  p->inV
2db70 74 61 62 4d 65 74 68 6f 64 20 3d 20 31 3b 0a 20  tabMethod = 1;. 
2db80 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78   rc = pModule->x
2db90 4e 65 78 74 28 70 43 75 72 2d 3e 70 56 74 61 62  Next(pCur->pVtab
2dba0 43 75 72 73 6f 72 29 3b 0a 20 20 70 2d 3e 69 6e  Cursor);.  p->in
2dbb0 56 74 61 62 4d 65 74 68 6f 64 20 3d 20 30 3b 0a  VtabMethod = 0;.
2dbc0 20 20 69 6d 70 6f 72 74 56 74 61 62 45 72 72 4d    importVtabErrM
2dbd0 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20  sg(p, pVtab);.  
2dbe0 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
2dbf0 4b 20 29 7b 0a 20 20 20 20 72 65 73 20 3d 20 70  K ){.    res = p
2dc00 4d 6f 64 75 6c 65 2d 3e 78 45 6f 66 28 70 43 75  Module->xEof(pCu
2dc10 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 29 3b  r->pVtabCursor);
2dc20 0a 20 20 7d 0a 0a 20 20 69 66 28 20 21 72 65 73  .  }..  if( !res
2dc30 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68   ){.    /* If th
2dc40 65 72 65 20 69 73 20 64 61 74 61 2c 20 6a 75 6d  ere is data, jum
2dc50 70 20 74 6f 20 50 32 20 2a 2f 0a 20 20 20 20 70  p to P2 */.    p
2dc60 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
2dc70 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
2dc80 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
2dc90 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
2dca0 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  LE */..#ifndef S
2dcb0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
2dcc0 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64  ALTABLE./* Opcod
2dcd0 65 3a 20 56 52 65 6e 61 6d 65 20 50 31 20 2a 20  e: VRename P1 * 
2dce0 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20  * P4 *.**.** P4 
2dcf0 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
2dd00 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  a virtual table 
2dd10 6f 62 6a 65 63 74 2c 20 61 6e 20 73 71 6c 69 74  object, an sqlit
2dd20 65 33 5f 76 74 61 62 20 73 74 72 75 63 74 75 72  e3_vtab structur
2dd30 65 2e 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  e..** This opcod
2dd40 65 20 69 6e 76 6f 6b 65 73 20 74 68 65 20 63 6f  e invokes the co
2dd50 72 72 65 73 70 6f 6e 64 69 6e 67 20 78 52 65 6e  rresponding xRen
2dd60 61 6d 65 20 6d 65 74 68 6f 64 2e 20 54 68 65 20  ame method. The 
2dd70 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 72 65 67 69  value.** in regi
2dd80 73 74 65 72 20 50 31 20 69 73 20 70 61 73 73 65  ster P1 is passe
2dd90 64 20 61 73 20 74 68 65 20 7a 4e 61 6d 65 20 61  d as the zName a
2dda0 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 78  rgument to the x
2ddb0 52 65 6e 61 6d 65 20 6d 65 74 68 6f 64 2e 0a 2a  Rename method..*
2ddc0 2f 0a 63 61 73 65 20 4f 50 5f 56 52 65 6e 61 6d  /.case OP_VRenam
2ddd0 65 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76  e: {.  sqlite3_v
2dde0 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 4d 65  tab *pVtab;.  Me
2ddf0 6d 20 2a 70 4e 61 6d 65 3b 0a 0a 20 20 70 56 74  m *pName;..  pVt
2de00 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74  ab = pOp->p4.pVt
2de10 61 62 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4e 61  ab->pVtab;.  pNa
2de20 6d 65 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  me = &aMem[pOp->
2de30 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
2de40 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 2d 3e 78  Vtab->pModule->x
2de50 52 65 6e 61 6d 65 20 29 3b 0a 20 20 61 73 73 65  Rename );.  asse
2de60 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70  rt( memIsValid(p
2de70 4e 61 6d 65 29 20 29 3b 0a 20 20 52 45 47 49 53  Name) );.  REGIS
2de80 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
2de90 31 2c 20 70 4e 61 6d 65 29 3b 0a 20 20 61 73 73  1, pName);.  ass
2dea0 65 72 74 28 20 70 4e 61 6d 65 2d 3e 66 6c 61 67  ert( pName->flag
2deb0 73 20 26 20 4d 45 4d 5f 53 74 72 20 29 3b 0a 20  s & MEM_Str );. 
2dec0 20 72 63 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f   rc = pVtab->pMo
2ded0 64 75 6c 65 2d 3e 78 52 65 6e 61 6d 65 28 70 56  dule->xRename(pV
2dee0 74 61 62 2c 20 70 4e 61 6d 65 2d 3e 7a 29 3b 0a  tab, pName->z);.
2def0 20 20 69 6d 70 6f 72 74 56 74 61 62 45 72 72 4d    importVtabErrM
2df00 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20  sg(p, pVtab);.  
2df10 70 2d 3e 65 78 70 69 72 65 64 20 3d 20 30 3b 0a  p->expired = 0;.
2df20 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
2df30 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  if..#ifndef SQLI
2df40 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
2df50 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ABLE./* Opcode: 
2df60 56 55 70 64 61 74 65 20 50 31 20 50 32 20 50 33  VUpdate P1 P2 P3
2df70 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69   P4 *.**.** P4 i
2df80 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  s a pointer to a
2df90 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6f   virtual table o
2dfa0 62 6a 65 63 74 2c 20 61 6e 20 73 71 6c 69 74 65  bject, an sqlite
2dfb0 33 5f 76 74 61 62 20 73 74 72 75 63 74 75 72 65  3_vtab structure
2dfc0 2e 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  ..** This opcode
2dfd0 20 69 6e 76 6f 6b 65 73 20 74 68 65 20 63 6f 72   invokes the cor
2dfe0 72 65 73 70 6f 6e 64 69 6e 67 20 78 55 70 64 61  responding xUpda
2dff0 74 65 20 6d 65 74 68 6f 64 2e 20 50 32 20 76 61  te method. P2 va
2e000 6c 75 65 73 0a 2a 2a 20 61 72 65 20 63 6f 6e 74  lues.** are cont
2e010 69 67 75 6f 75 73 20 6d 65 6d 6f 72 79 20 63 65  iguous memory ce
2e020 6c 6c 73 20 73 74 61 72 74 69 6e 67 20 61 74 20  lls starting at 
2e030 50 33 20 74 6f 20 70 61 73 73 20 74 6f 20 74 68  P3 to pass to th
2e040 65 20 78 55 70 64 61 74 65 20 0a 2a 2a 20 69 6e  e xUpdate .** in
2e050 76 6f 63 61 74 69 6f 6e 2e 20 54 68 65 20 76 61  vocation. The va
2e060 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
2e070 28 50 33 2b 50 32 2d 31 29 20 63 6f 72 72 65 73  (P3+P2-1) corres
2e080 70 6f 6e 64 73 20 74 6f 20 74 68 65 20 0a 2a 2a  ponds to the .**
2e090 20 70 32 74 68 20 65 6c 65 6d 65 6e 74 20 6f 66   p2th element of
2e0a0 20 74 68 65 20 61 72 67 76 20 61 72 72 61 79 20   the argv array 
2e0b0 70 61 73 73 65 64 20 74 6f 20 78 55 70 64 61 74  passed to xUpdat
2e0c0 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 78 55 70  e..**.** The xUp
2e0d0 64 61 74 65 20 6d 65 74 68 6f 64 20 77 69 6c 6c  date method will
2e0e0 20 64 6f 20 61 20 44 45 4c 45 54 45 20 6f 72 20   do a DELETE or 
2e0f0 61 6e 20 49 4e 53 45 52 54 20 6f 72 20 62 6f 74  an INSERT or bot
2e100 68 2e 0a 2a 2a 20 54 68 65 20 61 72 67 76 5b 30  h..** The argv[0
2e110 5d 20 65 6c 65 6d 65 6e 74 20 28 77 68 69 63 68  ] element (which
2e120 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20   corresponds to 
2e130 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 50 33 29 0a  memory cell P3).
2e140 2a 2a 20 69 73 20 74 68 65 20 72 6f 77 69 64 20  ** is the rowid 
2e150 6f 66 20 61 20 72 6f 77 20 74 6f 20 64 65 6c 65  of a row to dele
2e160 74 65 2e 20 20 49 66 20 61 72 67 76 5b 30 5d 20  te.  If argv[0] 
2e170 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 6e 6f 20  is NULL then no 
2e180 0a 2a 2a 20 64 65 6c 65 74 69 6f 6e 20 6f 63 63  .** deletion occ
2e190 75 72 73 2e 20 20 54 68 65 20 61 72 67 76 5b 31  urs.  The argv[1
2e1a0 5d 20 65 6c 65 6d 65 6e 74 20 69 73 20 74 68 65  ] element is the
2e1b0 20 72 6f 77 69 64 20 6f 66 20 74 68 65 20 6e 65   rowid of the ne
2e1c0 77 20 0a 2a 2a 20 72 6f 77 2e 20 20 54 68 69 73  w .** row.  This
2e1d0 20 63 61 6e 20 62 65 20 4e 55 4c 4c 20 74 6f 20   can be NULL to 
2e1e0 68 61 76 65 20 74 68 65 20 76 69 72 74 75 61 6c  have the virtual
2e1f0 20 74 61 62 6c 65 20 73 65 6c 65 63 74 20 74 68   table select th
2e200 65 20 6e 65 77 20 0a 2a 2a 20 72 6f 77 69 64 20  e new .** rowid 
2e210 66 6f 72 20 69 74 73 65 6c 66 2e 20 20 54 68 65  for itself.  The
2e220 20 73 75 62 73 65 71 75 65 6e 74 20 65 6c 65 6d   subsequent elem
2e230 65 6e 74 73 20 69 6e 20 74 68 65 20 61 72 72 61  ents in the arra
2e240 79 20 61 72 65 20 0a 2a 2a 20 74 68 65 20 76 61  y are .** the va
2e250 6c 75 65 73 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  lues of columns 
2e260 69 6e 20 74 68 65 20 6e 65 77 20 72 6f 77 2e 0a  in the new row..
2e270 2a 2a 0a 2a 2a 20 49 66 20 50 32 3d 3d 31 20 74  **.** If P2==1 t
2e280 68 65 6e 20 6e 6f 20 69 6e 73 65 72 74 20 69 73  hen no insert is
2e290 20 70 65 72 66 6f 72 6d 65 64 2e 20 20 61 72 67   performed.  arg
2e2a0 76 5b 30 5d 20 69 73 20 74 68 65 20 72 6f 77 69  v[0] is the rowi
2e2b0 64 20 6f 66 0a 2a 2a 20 61 20 72 6f 77 20 74 6f  d of.** a row to
2e2c0 20 64 65 6c 65 74 65 2e 0a 2a 2a 0a 2a 2a 20 50   delete..**.** P
2e2d0 31 20 69 73 20 61 20 62 6f 6f 6c 65 61 6e 20 66  1 is a boolean f
2e2e0 6c 61 67 2e 20 49 66 20 69 74 20 69 73 20 73 65  lag. If it is se
2e2f0 74 20 74 6f 20 74 72 75 65 20 61 6e 64 20 74 68  t to true and th
2e300 65 20 78 55 70 64 61 74 65 20 63 61 6c 6c 0a 2a  e xUpdate call.*
2e310 2a 20 69 73 20 73 75 63 63 65 73 73 66 75 6c 2c  * is successful,
2e320 20 74 68 65 6e 20 74 68 65 20 76 61 6c 75 65 20   then the value 
2e330 72 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69  returned by sqli
2e340 74 65 33 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f  te3_last_insert_
2e350 72 6f 77 69 64 28 29 20 0a 2a 2a 20 69 73 20 73  rowid() .** is s
2e360 65 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20  et to the value 
2e370 6f 66 20 74 68 65 20 72 6f 77 69 64 20 66 6f 72  of the rowid for
2e380 20 74 68 65 20 72 6f 77 20 6a 75 73 74 20 69 6e   the row just in
2e390 73 65 72 74 65 64 2e 0a 2a 2f 0a 63 61 73 65 20  serted..*/.case 
2e3a0 4f 50 5f 56 55 70 64 61 74 65 3a 20 7b 0a 20 20  OP_VUpdate: {.  
2e3b0 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56  sqlite3_vtab *pV
2e3c0 74 61 62 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d  tab;.  sqlite3_m
2e3d0 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a  odule *pModule;.
2e3e0 20 20 69 6e 74 20 6e 41 72 67 3b 0a 20 20 69 6e    int nArg;.  in
2e3f0 74 20 69 3b 0a 20 20 73 71 6c 69 74 65 5f 69 6e  t i;.  sqlite_in
2e400 74 36 34 20 72 6f 77 69 64 3b 0a 20 20 4d 65 6d  t64 rowid;.  Mem
2e410 20 2a 2a 61 70 41 72 67 3b 0a 20 20 4d 65 6d 20   **apArg;.  Mem 
2e420 2a 70 58 3b 0a 0a 20 20 70 56 74 61 62 20 3d 20  *pX;..  pVtab = 
2e430 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62 2d 3e 70  pOp->p4.pVtab->p
2e440 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20  Vtab;.  pModule 
2e450 3d 20 28 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c  = (sqlite3_modul
2e460 65 20 2a 29 70 56 74 61 62 2d 3e 70 4d 6f 64 75  e *)pVtab->pModu
2e470 6c 65 3b 0a 20 20 6e 41 72 67 20 3d 20 70 4f 70  le;.  nArg = pOp
2e480 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20  ->p2;.  assert( 
2e490 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
2e4a0 56 54 41 42 20 29 3b 0a 20 20 69 66 28 20 41 4c  VTAB );.  if( AL
2e4b0 57 41 59 53 28 70 4d 6f 64 75 6c 65 2d 3e 78 55  WAYS(pModule->xU
2e4c0 70 64 61 74 65 29 20 29 7b 0a 20 20 20 20 61 70  pdate) ){.    ap
2e4d0 41 72 67 20 3d 20 70 2d 3e 61 70 41 72 67 3b 0a  Arg = p->apArg;.
2e4e0 20 20 20 20 70 58 20 3d 20 26 61 4d 65 6d 5b 70      pX = &aMem[p
2e4f0 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 66 6f 72  Op->p3];.    for
2e500 28 69 3d 30 3b 20 69 3c 6e 41 72 67 3b 20 69 2b  (i=0; i<nArg; i+
2e510 2b 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74  +){.      assert
2e520 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 58 29  ( memIsValid(pX)
2e530 20 29 3b 0a 20 20 20 20 20 20 6d 65 6d 41 62 6f   );.      memAbo
2e540 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 58  utToChange(p, pX
2e550 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
2e560 56 64 62 65 4d 65 6d 53 74 6f 72 65 54 79 70 65  VdbeMemStoreType
2e570 28 70 58 29 3b 0a 20 20 20 20 20 20 61 70 41 72  (pX);.      apAr
2e580 67 5b 69 5d 20 3d 20 70 58 3b 0a 20 20 20 20 20  g[i] = pX;.     
2e590 20 70 58 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20   pX++;.    }.   
2e5a0 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78   rc = pModule->x
2e5b0 55 70 64 61 74 65 28 70 56 74 61 62 2c 20 6e 41  Update(pVtab, nA
2e5c0 72 67 2c 20 61 70 41 72 67 2c 20 26 72 6f 77 69  rg, apArg, &rowi
2e5d0 64 29 3b 0a 20 20 20 20 69 6d 70 6f 72 74 56 74  d);.    importVt
2e5e0 61 62 45 72 72 4d 73 67 28 70 2c 20 70 56 74 61  abErrMsg(p, pVta
2e5f0 62 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d  b);.    if( rc==
2e600 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 70 4f 70  SQLITE_OK && pOp
2e610 2d 3e 70 31 20 29 7b 0a 20 20 20 20 20 20 61 73  ->p1 ){.      as
2e620 73 65 72 74 28 20 6e 41 72 67 3e 31 20 26 26 20  sert( nArg>1 && 
2e630 61 70 41 72 67 5b 30 5d 20 26 26 20 28 61 70 41  apArg[0] && (apA
2e640 72 67 5b 30 5d 2d 3e 66 6c 61 67 73 26 4d 45 4d  rg[0]->flags&MEM
2e650 5f 4e 75 6c 6c 29 20 29 3b 0a 20 20 20 20 20 20  _Null) );.      
2e660 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20  db->lastRowid = 
2e670 72 6f 77 69 64 3b 0a 20 20 20 20 7d 0a 20 20 20  rowid;.    }.   
2e680 20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20   p->nChange++;. 
2e690 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65   }.  break;.}.#e
2e6a0 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
2e6b0 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
2e6c0 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 20 53 51   */..#ifndef  SQ
2e6d0 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f  LITE_OMIT_PAGER_
2e6e0 50 52 41 47 4d 41 53 0a 2f 2a 20 4f 70 63 6f 64  PRAGMAS./* Opcod
2e6f0 65 3a 20 50 61 67 65 63 6f 75 6e 74 20 50 31 20  e: Pagecount P1 
2e700 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57  P2 * * *.**.** W
2e710 72 69 74 65 20 74 68 65 20 63 75 72 72 65 6e 74  rite the current
2e720 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73   number of pages
2e730 20 69 6e 20 64 61 74 61 62 61 73 65 20 50 31 20   in database P1 
2e740 74 6f 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 50  to memory cell P
2e750 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 61  2..*/.case OP_Pa
2e760 67 65 63 6f 75 6e 74 3a 20 7b 20 20 20 20 20 20  gecount: {      
2e770 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72        /* out2-pr
2e780 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 70 4f  erelease */.  pO
2e790 75 74 2d 3e 75 2e 69 20 3d 20 73 71 6c 69 74 65  ut->u.i = sqlite
2e7a0 33 42 74 72 65 65 4c 61 73 74 50 61 67 65 28 64  3BtreeLastPage(d
2e7b0 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e  b->aDb[pOp->p1].
2e7c0 70 42 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  pBt);.  break;.}
2e7d0 0a 23 65 6e 64 69 66 0a 0a 0a 23 69 66 6e 64 65  .#endif...#ifnde
2e7e0 66 20 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  f  SQLITE_OMIT_P
2e7f0 41 47 45 52 5f 50 52 41 47 4d 41 53 0a 2f 2a 20  AGER_PRAGMAS./* 
2e800 4f 70 63 6f 64 65 3a 20 4d 61 78 50 67 63 6e 74  Opcode: MaxPgcnt
2e810 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
2e820 0a 2a 2a 20 54 72 79 20 74 6f 20 73 65 74 20 74  .** Try to set t
2e830 68 65 20 6d 61 78 69 6d 75 6d 20 70 61 67 65 20  he maximum page 
2e840 63 6f 75 6e 74 20 66 6f 72 20 64 61 74 61 62 61  count for databa
2e850 73 65 20 50 31 20 74 6f 20 74 68 65 20 76 61 6c  se P1 to the val
2e860 75 65 20 69 6e 20 50 33 2e 0a 2a 2a 20 44 6f 20  ue in P3..** Do 
2e870 6e 6f 74 20 6c 65 74 20 74 68 65 20 6d 61 78 69  not let the maxi
2e880 6d 75 6d 20 70 61 67 65 20 63 6f 75 6e 74 20 66  mum page count f
2e890 61 6c 6c 20 62 65 6c 6f 77 20 74 68 65 20 63 75  all below the cu
2e8a0 72 72 65 6e 74 20 70 61 67 65 20 63 6f 75 6e 74  rrent page count
2e8b0 20 61 6e 64 0a 2a 2a 20 64 6f 20 6e 6f 74 20 63   and.** do not c
2e8c0 68 61 6e 67 65 20 74 68 65 20 6d 61 78 69 6d 75  hange the maximu
2e8d0 6d 20 70 61 67 65 20 63 6f 75 6e 74 20 76 61 6c  m page count val
2e8e0 75 65 20 69 66 20 50 33 3d 3d 30 2e 0a 2a 2a 0a  ue if P3==0..**.
2e8f0 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 6d 61 78  ** Store the max
2e900 69 6d 75 6d 20 70 61 67 65 20 63 6f 75 6e 74 20  imum page count 
2e910 61 66 74 65 72 20 74 68 65 20 63 68 61 6e 67 65  after the change
2e920 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e   in register P2.
2e930 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 61 78 50  .*/.case OP_MaxP
2e940 67 63 6e 74 3a 20 7b 20 20 20 20 20 20 20 20 20  gcnt: {         
2e950 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65     /* out2-prere
2e960 6c 65 61 73 65 20 2a 2f 0a 20 20 75 6e 73 69 67  lease */.  unsig
2e970 6e 65 64 20 69 6e 74 20 6e 65 77 4d 61 78 3b 0a  ned int newMax;.
2e980 20 20 42 74 72 65 65 20 2a 70 42 74 3b 0a 0a 20    Btree *pBt;.. 
2e990 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70   pBt = db->aDb[p
2e9a0 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20 20 6e  Op->p1].pBt;.  n
2e9b0 65 77 4d 61 78 20 3d 20 30 3b 0a 20 20 69 66 28  ewMax = 0;.  if(
2e9c0 20 70 4f 70 2d 3e 70 33 20 29 7b 0a 20 20 20 20   pOp->p3 ){.    
2e9d0 6e 65 77 4d 61 78 20 3d 20 73 71 6c 69 74 65 33  newMax = sqlite3
2e9e0 42 74 72 65 65 4c 61 73 74 50 61 67 65 28 70 42  BtreeLastPage(pB
2e9f0 74 29 3b 0a 20 20 20 20 69 66 28 20 6e 65 77 4d  t);.    if( newM
2ea00 61 78 20 3c 20 28 75 6e 73 69 67 6e 65 64 29 70  ax < (unsigned)p
2ea10 4f 70 2d 3e 70 33 20 29 20 6e 65 77 4d 61 78 20  Op->p3 ) newMax 
2ea20 3d 20 28 75 6e 73 69 67 6e 65 64 29 70 4f 70 2d  = (unsigned)pOp-
2ea30 3e 70 33 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d  >p3;.  }.  pOut-
2ea40 3e 75 2e 69 20 3d 20 73 71 6c 69 74 65 33 42 74  >u.i = sqlite3Bt
2ea50 72 65 65 4d 61 78 50 61 67 65 43 6f 75 6e 74 28  reeMaxPageCount(
2ea60 70 42 74 2c 20 6e 65 77 4d 61 78 29 3b 0a 20 20  pBt, newMax);.  
2ea70 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a  break;.}.#endif.
2ea80 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
2ea90 5f 4f 4d 49 54 5f 54 52 41 43 45 0a 2f 2a 20 4f  _OMIT_TRACE./* O
2eaa0 70 63 6f 64 65 3a 20 54 72 61 63 65 20 2a 20 2a  pcode: Trace * *
2eab0 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 49 66   * P4 *.**.** If
2eac0 20 74 72 61 63 69 6e 67 20 69 73 20 65 6e 61 62   tracing is enab
2ead0 6c 65 64 20 28 62 79 20 74 68 65 20 73 71 6c 69  led (by the sqli
2eae0 74 65 33 5f 74 72 61 63 65 28 29 29 20 69 6e 74  te3_trace()) int
2eaf0 65 72 66 61 63 65 2c 20 74 68 65 6e 0a 2a 2a 20  erface, then.** 
2eb00 74 68 65 20 55 54 46 2d 38 20 73 74 72 69 6e 67  the UTF-8 string
2eb10 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 50 34   contained in P4
2eb20 20 69 73 20 65 6d 69 74 74 65 64 20 6f 6e 20 74   is emitted on t
2eb30 68 65 20 74 72 61 63 65 20 63 61 6c 6c 62 61 63  he trace callbac
2eb40 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 72  k..*/.case OP_Tr
2eb50 61 63 65 3a 20 7b 0a 20 20 63 68 61 72 20 2a 7a  ace: {.  char *z
2eb60 54 72 61 63 65 3b 0a 0a 20 20 7a 54 72 61 63 65  Trace;..  zTrace
2eb70 20 3d 20 28 70 4f 70 2d 3e 70 34 2e 7a 20 3f 20   = (pOp->p4.z ? 
2eb80 70 4f 70 2d 3e 70 34 2e 7a 20 3a 20 70 2d 3e 7a  pOp->p4.z : p->z
2eb90 53 71 6c 29 3b 0a 20 20 69 66 28 20 7a 54 72 61  Sql);.  if( zTra
2eba0 63 65 20 29 7b 0a 20 20 20 20 69 66 28 20 64 62  ce ){.    if( db
2ebb0 2d 3e 78 54 72 61 63 65 20 29 7b 0a 20 20 20 20  ->xTrace ){.    
2ebc0 20 20 63 68 61 72 20 2a 7a 20 3d 20 73 71 6c 69    char *z = sqli
2ebd0 74 65 33 56 64 62 65 45 78 70 61 6e 64 53 71 6c  te3VdbeExpandSql
2ebe0 28 70 2c 20 7a 54 72 61 63 65 29 3b 0a 20 20 20  (p, zTrace);.   
2ebf0 20 20 20 64 62 2d 3e 78 54 72 61 63 65 28 64 62     db->xTrace(db
2ec00 2d 3e 70 54 72 61 63 65 41 72 67 2c 20 7a 29 3b  ->pTraceArg, z);
2ec10 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 62  .      sqlite3Db
2ec20 46 72 65 65 28 64 62 2c 20 7a 29 3b 0a 20 20 20  Free(db, z);.   
2ec30 20 7d 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45   }.#ifdef SQLITE
2ec40 5f 44 45 42 55 47 0a 20 20 20 20 69 66 28 20 28  _DEBUG.    if( (
2ec50 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49  db->flags & SQLI
2ec60 54 45 5f 53 71 6c 54 72 61 63 65 29 21 3d 30 20  TE_SqlTrace)!=0 
2ec70 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
2ec80 44 65 62 75 67 50 72 69 6e 74 66 28 22 53 51 4c  DebugPrintf("SQL
2ec90 2d 74 72 61 63 65 3a 20 25 73 5c 6e 22 2c 20 7a  -trace: %s\n", z
2eca0 54 72 61 63 65 29 3b 0a 20 20 20 20 7d 0a 23 65  Trace);.    }.#e
2ecb0 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 44  ndif /* SQLITE_D
2ecc0 45 42 55 47 20 2a 2f 0a 20 20 7d 0a 20 20 62 72  EBUG */.  }.  br
2ecd0 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a  eak;.}.#endif...
2ece0 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 6f 70 20  /* Opcode: Noop 
2ecf0 2a 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  * * * * *.**.** 
2ed00 44 6f 20 6e 6f 74 68 69 6e 67 2e 20 20 54 68 69  Do nothing.  Thi
2ed10 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73  s instruction is
2ed20 20 6f 66 74 65 6e 20 75 73 65 66 75 6c 20 61 73   often useful as
2ed30 20 61 20 6a 75 6d 70 0a 2a 2a 20 64 65 73 74 69   a jump.** desti
2ed40 6e 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 0a 2a 2a  nation..*/./*.**
2ed50 20 54 68 65 20 6d 61 67 69 63 20 45 78 70 6c 61   The magic Expla
2ed60 69 6e 20 6f 70 63 6f 64 65 20 61 72 65 20 6f 6e  in opcode are on
2ed70 6c 79 20 69 6e 73 65 72 74 65 64 20 77 68 65 6e  ly inserted when
2ed80 20 65 78 70 6c 61 69 6e 3d 3d 32 20 28 77 68 69   explain==2 (whi
2ed90 63 68 0a 2a 2a 20 69 73 20 74 6f 20 73 61 79 20  ch.** is to say 
2eda0 77 68 65 6e 20 74 68 65 20 45 58 50 4c 41 49 4e  when the EXPLAIN
2edb0 20 51 55 45 52 59 20 50 4c 41 4e 20 73 79 6e 74   QUERY PLAN synt
2edc0 61 78 20 69 73 20 75 73 65 64 2e 29 0a 2a 2a 20  ax is used.).** 
2edd0 54 68 69 73 20 6f 70 63 6f 64 65 20 72 65 63 6f  This opcode reco
2ede0 72 64 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  rds information 
2edf0 66 72 6f 6d 20 74 68 65 20 6f 70 74 69 6d 69 7a  from the optimiz
2ee00 65 72 2e 20 20 49 74 20 69 73 20 74 68 65 0a 2a  er.  It is the.*
2ee10 2a 20 74 68 65 20 73 61 6d 65 20 61 73 20 61 20  * the same as a 
2ee20 6e 6f 2d 6f 70 2e 20 20 54 68 69 73 20 6f 70 63  no-op.  This opc
2ee30 6f 64 65 73 6e 65 76 65 72 20 61 70 70 65 61 72  odesnever appear
2ee40 73 20 69 6e 20 61 20 72 65 61 6c 20 56 4d 20 70  s in a real VM p
2ee50 72 6f 67 72 61 6d 2e 0a 2a 2f 0a 64 65 66 61 75  rogram..*/.defau
2ee60 6c 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 2f  lt: {          /
2ee70 2a 20 54 68 69 73 20 69 73 20 72 65 61 6c 6c 79  * This is really
2ee80 20 4f 50 5f 4e 6f 6f 70 20 61 6e 64 20 4f 50 5f   OP_Noop and OP_
2ee90 45 78 70 6c 61 69 6e 20 2a 2f 0a 20 20 61 73 73  Explain */.  ass
2eea0 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  ert( pOp->opcode
2eeb0 3d 3d 4f 50 5f 4e 6f 6f 70 20 7c 7c 20 70 4f 70  ==OP_Noop || pOp
2eec0 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45 78 70  ->opcode==OP_Exp
2eed0 6c 61 69 6e 20 29 3b 0a 20 20 62 72 65 61 6b 3b  lain );.  break;
2eee0 0a 7d 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .}../***********
2eef0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2ef00 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2ef10 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2ef20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2ef30 2a 2a 0a 2a 2a 20 54 68 65 20 63 61 73 65 73 20  **.** The cases 
2ef40 6f 66 20 74 68 65 20 73 77 69 74 63 68 20 73 74  of the switch st
2ef50 61 74 65 6d 65 6e 74 20 61 62 6f 76 65 20 74 68  atement above th
2ef60 69 73 20 6c 69 6e 65 20 73 68 6f 75 6c 64 20 61  is line should a
2ef70 6c 6c 20 62 65 20 69 6e 64 65 6e 74 65 64 0a 2a  ll be indented.*
2ef80 2a 20 62 79 20 36 20 73 70 61 63 65 73 2e 20 20  * by 6 spaces.  
2ef90 42 75 74 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73  But the left-mos
2efa0 74 20 36 20 73 70 61 63 65 73 20 68 61 76 65 20  t 6 spaces have 
2efb0 62 65 65 6e 20 72 65 6d 6f 76 65 64 20 74 6f 20  been removed to 
2efc0 69 6d 70 72 6f 76 65 20 74 68 65 0a 2a 2a 20 72  improve the.** r
2efd0 65 61 64 61 62 69 6c 69 74 79 2e 20 20 46 72 6f  eadability.  Fro
2efe0 6d 20 74 68 69 73 20 70 6f 69 6e 74 20 6f 6e 20  m this point on 
2eff0 64 6f 77 6e 2c 20 74 68 65 20 6e 6f 72 6d 61 6c  down, the normal
2f000 20 69 6e 64 65 6e 74 61 74 69 6f 6e 20 72 75 6c   indentation rul
2f010 65 73 20 61 72 65 0a 2a 2a 20 72 65 73 74 6f 72  es are.** restor
2f020 65 64 2e 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ed..************
2f030 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2f040 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2f050 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2f060 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2f070 2a 2f 0a 20 20 20 20 7d 0a 0a 23 69 66 64 65 66  */.    }..#ifdef
2f080 20 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 20 20   VDBE_PROFILE.  
2f090 20 20 7b 0a 20 20 20 20 20 20 75 36 34 20 65 6c    {.      u64 el
2f0a0 61 70 73 65 64 20 3d 20 73 71 6c 69 74 65 33 48  apsed = sqlite3H
2f0b0 77 74 69 6d 65 28 29 20 2d 20 73 74 61 72 74 3b  wtime() - start;
2f0c0 0a 20 20 20 20 20 20 70 4f 70 2d 3e 63 79 63 6c  .      pOp->cycl
2f0d0 65 73 20 2b 3d 20 65 6c 61 70 73 65 64 3b 0a 20  es += elapsed;. 
2f0e0 20 20 20 20 20 70 4f 70 2d 3e 63 6e 74 2b 2b 3b       pOp->cnt++;
2f0f0 0a 23 69 66 20 30 0a 20 20 20 20 20 20 20 20 66  .#if 0.        f
2f100 70 72 69 6e 74 66 28 73 74 64 6f 75 74 2c 20 22  printf(stdout, "
2f110 25 31 30 6c 6c 75 20 22 2c 20 65 6c 61 70 73 65  %10llu ", elapse
2f120 64 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  d);.        sqli
2f130 74 65 33 56 64 62 65 50 72 69 6e 74 4f 70 28 73  te3VdbePrintOp(s
2f140 74 64 6f 75 74 2c 20 6f 72 69 67 50 63 2c 20 26  tdout, origPc, &
2f150 61 4f 70 5b 6f 72 69 67 50 63 5d 29 3b 0a 23 65  aOp[origPc]);.#e
2f160 6e 64 69 66 0a 20 20 20 20 7d 0a 23 65 6e 64 69  ndif.    }.#endi
2f170 66 0a 0a 20 20 20 20 2f 2a 20 54 68 65 20 66 6f  f..    /* The fo
2f180 6c 6c 6f 77 69 6e 67 20 63 6f 64 65 20 61 64 64  llowing code add
2f190 73 20 6e 6f 74 68 69 6e 67 20 74 6f 20 74 68 65  s nothing to the
2f1a0 20 61 63 74 75 61 6c 20 66 75 6e 63 74 69 6f 6e   actual function
2f1b0 61 6c 69 74 79 0a 20 20 20 20 2a 2a 20 6f 66 20  ality.    ** of 
2f1c0 74 68 65 20 70 72 6f 67 72 61 6d 2e 20 20 49 74  the program.  It
2f1d0 20 69 73 20 6f 6e 6c 79 20 68 65 72 65 20 66 6f   is only here fo
2f1e0 72 20 74 65 73 74 69 6e 67 20 61 6e 64 20 64 65  r testing and de
2f1f0 62 75 67 67 69 6e 67 2e 0a 20 20 20 20 2a 2a 20  bugging..    ** 
2f200 4f 6e 20 74 68 65 20 6f 74 68 65 72 20 68 61 6e  On the other han
2f210 64 2c 20 69 74 20 64 6f 65 73 20 62 75 72 6e 20  d, it does burn 
2f220 43 50 55 20 63 79 63 6c 65 73 20 65 76 65 72 79  CPU cycles every
2f230 20 74 69 6d 65 20 74 68 72 6f 75 67 68 0a 20 20   time through.  
2f240 20 20 2a 2a 20 74 68 65 20 65 76 61 6c 75 61 74    ** the evaluat
2f250 6f 72 20 6c 6f 6f 70 2e 20 20 53 6f 20 77 65 20  or loop.  So we 
2f260 63 61 6e 20 6c 65 61 76 65 20 69 74 20 6f 75 74  can leave it out
2f270 20 77 68 65 6e 20 4e 44 45 42 55 47 20 69 73 20   when NDEBUG is 
2f280 64 65 66 69 6e 65 64 2e 0a 20 20 20 20 2a 2f 0a  defined..    */.
2f290 23 69 66 6e 64 65 66 20 4e 44 45 42 55 47 0a 20  #ifndef NDEBUG. 
2f2a0 20 20 20 61 73 73 65 72 74 28 20 70 63 3e 3d 2d     assert( pc>=-
2f2b0 31 20 26 26 20 70 63 3c 70 2d 3e 6e 4f 70 20 29  1 && pc<p->nOp )
2f2c0 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  ;..#ifdef SQLITE
2f2d0 5f 44 45 42 55 47 0a 20 20 20 20 69 66 28 20 70  _DEBUG.    if( p
2f2e0 2d 3e 74 72 61 63 65 20 29 7b 0a 20 20 20 20 20  ->trace ){.     
2f2f0 20 69 66 28 20 72 63 21 3d 30 20 29 20 66 70 72   if( rc!=0 ) fpr
2f300 69 6e 74 66 28 70 2d 3e 74 72 61 63 65 2c 22 72  intf(p->trace,"r
2f310 63 3d 25 64 5c 6e 22 2c 72 63 29 3b 0a 20 20 20  c=%d\n",rc);.   
2f320 20 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 66 6c     if( pOp->opfl
2f330 61 67 73 20 26 20 28 4f 50 46 4c 47 5f 4f 55 54  ags & (OPFLG_OUT
2f340 32 5f 50 52 45 52 45 4c 45 41 53 45 7c 4f 50 46  2_PRERELEASE|OPF
2f350 4c 47 5f 4f 55 54 32 29 20 29 7b 0a 20 20 20 20  LG_OUT2) ){.    
2f360 20 20 20 20 72 65 67 69 73 74 65 72 54 72 61 63      registerTrac
2f370 65 28 70 2d 3e 74 72 61 63 65 2c 20 70 4f 70 2d  e(p->trace, pOp-
2f380 3e 70 32 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  >p2, &aMem[pOp->
2f390 70 32 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  p2]);.      }.  
2f3a0 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 66      if( pOp->opf
2f3b0 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f 4f 55 54  lags & OPFLG_OUT
2f3c0 33 20 29 7b 0a 20 20 20 20 20 20 20 20 72 65 67  3 ){.        reg
2f3d0 69 73 74 65 72 54 72 61 63 65 28 70 2d 3e 74 72  isterTrace(p->tr
2f3e0 61 63 65 2c 20 70 4f 70 2d 3e 70 33 2c 20 26 61  ace, pOp->p3, &a
2f3f0 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20  Mem[pOp->p3]);. 
2f400 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 23 65 6e       }.    }.#en
2f410 64 69 66 20 20 2f 2a 20 53 51 4c 49 54 45 5f 44  dif  /* SQLITE_D
2f420 45 42 55 47 20 2a 2f 0a 23 65 6e 64 69 66 20 20  EBUG */.#endif  
2f430 2f 2a 20 4e 44 45 42 55 47 20 2a 2f 0a 20 20 7d  /* NDEBUG */.  }
2f440 20 20 2f 2a 20 54 68 65 20 65 6e 64 20 6f 66 20    /* The end of 
2f450 74 68 65 20 66 6f 72 28 3b 3b 29 20 6c 6f 6f 70  the for(;;) loop
2f460 20 74 68 65 20 6c 6f 6f 70 73 20 74 68 72 6f 75   the loops throu
2f470 67 68 20 6f 70 63 6f 64 65 73 20 2a 2f 0a 0a 20  gh opcodes */.. 
2f480 20 2f 2a 20 49 66 20 77 65 20 72 65 61 63 68 20   /* If we reach 
2f490 74 68 69 73 20 70 6f 69 6e 74 2c 20 69 74 20 6d  this point, it m
2f4a0 65 61 6e 73 20 74 68 61 74 20 65 78 65 63 75 74  eans that execut
2f4b0 69 6f 6e 20 69 73 20 66 69 6e 69 73 68 65 64 20  ion is finished 
2f4c0 77 69 74 68 0a 20 20 2a 2a 20 61 6e 20 65 72 72  with.  ** an err
2f4d0 6f 72 20 6f 66 20 73 6f 6d 65 20 6b 69 6e 64 2e  or of some kind.
2f4e0 0a 20 20 2a 2f 0a 76 64 62 65 5f 65 72 72 6f 72  .  */.vdbe_error
2f4f0 5f 68 61 6c 74 3a 0a 20 20 61 73 73 65 72 74 28  _halt:.  assert(
2f500 20 72 63 20 29 3b 0a 20 20 70 2d 3e 72 63 20 3d   rc );.  p->rc =
2f510 20 72 63 3b 0a 20 20 74 65 73 74 63 61 73 65 28   rc;.  testcase(
2f520 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f   sqlite3GlobalCo
2f530 6e 66 69 67 2e 78 4c 6f 67 21 3d 30 20 29 3b 0a  nfig.xLog!=0 );.
2f540 20 20 73 71 6c 69 74 65 33 5f 6c 6f 67 28 72 63    sqlite3_log(rc
2f550 2c 20 22 73 74 61 74 65 6d 65 6e 74 20 61 62 6f  , "statement abo
2f560 72 74 73 20 61 74 20 25 64 3a 20 5b 25 73 5d 20  rts at %d: [%s] 
2f570 25 73 22 2c 20 0a 20 20 20 20 20 20 20 20 20 20  %s", .          
2f580 20 20 20 20 20 20 20 20 20 70 63 2c 20 70 2d 3e           pc, p->
2f590 7a 53 71 6c 2c 20 70 2d 3e 7a 45 72 72 4d 73 67  zSql, p->zErrMsg
2f5a0 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  );.  sqlite3Vdbe
2f5b0 48 61 6c 74 28 70 29 3b 0a 20 20 69 66 28 20 72  Halt(p);.  if( r
2f5c0 63 3d 3d 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f  c==SQLITE_IOERR_
2f5d0 4e 4f 4d 45 4d 20 29 20 64 62 2d 3e 6d 61 6c 6c  NOMEM ) db->mall
2f5e0 6f 63 46 61 69 6c 65 64 20 3d 20 31 3b 0a 20 20  ocFailed = 1;.  
2f5f0 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f  rc = SQLITE_ERRO
2f600 52 3b 0a 20 20 69 66 28 20 72 65 73 65 74 53 63  R;.  if( resetSc
2f610 68 65 6d 61 4f 6e 46 61 75 6c 74 20 29 20 73 71  hemaOnFault ) sq
2f620 6c 69 74 65 33 52 65 73 65 74 49 6e 74 65 72 6e  lite3ResetIntern
2f630 61 6c 53 63 68 65 6d 61 28 64 62 2c 20 30 29 3b  alSchema(db, 0);
2f640 0a 0a 20 20 2f 2a 20 54 68 69 73 20 69 73 20 74  ..  /* This is t
2f650 68 65 20 6f 6e 6c 79 20 77 61 79 20 6f 75 74 20  he only way out 
2f660 6f 66 20 74 68 69 73 20 70 72 6f 63 65 64 75 72  of this procedur
2f670 65 2e 20 20 57 65 20 68 61 76 65 20 74 6f 0a 20  e.  We have to. 
2f680 20 2a 2a 20 72 65 6c 65 61 73 65 20 74 68 65 20   ** release the 
2f690 6d 75 74 65 78 65 73 20 6f 6e 20 62 74 72 65 65  mutexes on btree
2f6a0 73 20 74 68 61 74 20 77 65 72 65 20 61 63 71 75  s that were acqu
2f6b0 69 72 65 64 20 61 74 20 74 68 65 0a 20 20 2a 2a  ired at the.  **
2f6c0 20 74 6f 70 2e 20 2a 2f 0a 76 64 62 65 5f 72 65   top. */.vdbe_re
2f6d0 74 75 72 6e 3a 0a 20 20 73 71 6c 69 74 65 33 42  turn:.  sqlite3B
2f6e0 74 72 65 65 4d 75 74 65 78 41 72 72 61 79 4c 65  treeMutexArrayLe
2f6f0 61 76 65 28 26 70 2d 3e 61 4d 75 74 65 78 29 3b  ave(&p->aMutex);
2f700 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 0a 20  .  return rc;.. 
2f710 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72 65   /* Jump to here
2f720 20 69 66 20 61 20 73 74 72 69 6e 67 20 6f 72 20   if a string or 
2f730 62 6c 6f 62 20 6c 61 72 67 65 72 20 74 68 61 6e  blob larger than
2f740 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4c 45 4e 47   SQLITE_MAX_LENG
2f750 54 48 0a 20 20 2a 2a 20 69 73 20 65 6e 63 6f 75  TH.  ** is encou
2f760 6e 74 65 72 65 64 2e 0a 20 20 2a 2f 0a 74 6f 6f  ntered..  */.too
2f770 5f 62 69 67 3a 0a 20 20 73 71 6c 69 74 65 33 53  _big:.  sqlite3S
2f780 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72  etString(&p->zEr
2f790 72 4d 73 67 2c 20 64 62 2c 20 22 73 74 72 69 6e  rMsg, db, "strin
2f7a0 67 20 6f 72 20 62 6c 6f 62 20 74 6f 6f 20 62 69  g or blob too bi
2f7b0 67 22 29 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49  g");.  rc = SQLI
2f7c0 54 45 5f 54 4f 4f 42 49 47 3b 0a 20 20 67 6f 74  TE_TOOBIG;.  got
2f7d0 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c  o vdbe_error_hal
2f7e0 74 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f  t;..  /* Jump to
2f7f0 20 68 65 72 65 20 69 66 20 61 20 6d 61 6c 6c 6f   here if a mallo
2f800 63 28 29 20 66 61 69 6c 73 2e 0a 20 20 2a 2f 0a  c() fails..  */.
2f810 6e 6f 5f 6d 65 6d 3a 0a 20 20 64 62 2d 3e 6d 61  no_mem:.  db->ma
2f820 6c 6c 6f 63 46 61 69 6c 65 64 20 3d 20 31 3b 0a  llocFailed = 1;.
2f830 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69    sqlite3SetStri
2f840 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20  ng(&p->zErrMsg, 
2f850 64 62 2c 20 22 6f 75 74 20 6f 66 20 6d 65 6d 6f  db, "out of memo
2f860 72 79 22 29 3b 0a 20 20 72 63 20 3d 20 53 51 4c  ry");.  rc = SQL
2f870 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 67 6f 74  ITE_NOMEM;.  got
2f880 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c  o vdbe_error_hal
2f890 74 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f  t;..  /* Jump to
2f8a0 20 68 65 72 65 20 66 6f 72 20 61 6e 79 20 6f 74   here for any ot
2f8b0 68 65 72 20 6b 69 6e 64 20 6f 66 20 66 61 74 61  her kind of fata
2f8c0 6c 20 65 72 72 6f 72 2e 20 20 54 68 65 20 22 72  l error.  The "r
2f8d0 63 22 20 76 61 72 69 61 62 6c 65 0a 20 20 2a 2a  c" variable.  **
2f8e0 20 73 68 6f 75 6c 64 20 68 6f 6c 64 20 74 68 65   should hold the
2f8f0 20 65 72 72 6f 72 20 6e 75 6d 62 65 72 2e 0a 20   error number.. 
2f900 20 2a 2f 0a 61 62 6f 72 74 5f 64 75 65 5f 74 6f   */.abort_due_to
2f910 5f 65 72 72 6f 72 3a 0a 20 20 61 73 73 65 72 74  _error:.  assert
2f920 28 20 70 2d 3e 7a 45 72 72 4d 73 67 3d 3d 30 20  ( p->zErrMsg==0 
2f930 29 3b 0a 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c  );.  if( db->mal
2f940 6c 6f 63 46 61 69 6c 65 64 20 29 20 72 63 20 3d  locFailed ) rc =
2f950 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20   SQLITE_NOMEM;. 
2f960 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
2f970 49 4f 45 52 52 5f 4e 4f 4d 45 4d 20 29 7b 0a 20  IOERR_NOMEM ){. 
2f980 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72     sqlite3SetStr
2f990 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c  ing(&p->zErrMsg,
2f9a0 20 64 62 2c 20 22 25 73 22 2c 20 73 71 6c 69 74   db, "%s", sqlit
2f9b0 65 33 45 72 72 53 74 72 28 72 63 29 29 3b 0a 20  e3ErrStr(rc));. 
2f9c0 20 7d 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 65   }.  goto vdbe_e
2f9d0 72 72 6f 72 5f 68 61 6c 74 3b 0a 0a 20 20 2f 2a  rror_halt;..  /*
2f9e0 20 4a 75 6d 70 20 74 6f 20 68 65 72 65 20 69 66   Jump to here if
2f9f0 20 74 68 65 20 73 71 6c 69 74 65 33 5f 69 6e 74   the sqlite3_int
2fa00 65 72 72 75 70 74 28 29 20 41 50 49 20 73 65 74  errupt() API set
2fa10 73 20 74 68 65 20 69 6e 74 65 72 72 75 70 74 0a  s the interrupt.
2fa20 20 20 2a 2a 20 66 6c 61 67 2e 0a 20 20 2a 2f 0a    ** flag..  */.
2fa30 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 69 6e 74  abort_due_to_int
2fa40 65 72 72 75 70 74 3a 0a 20 20 61 73 73 65 72 74  errupt:.  assert
2fa50 28 20 64 62 2d 3e 75 31 2e 69 73 49 6e 74 65 72  ( db->u1.isInter
2fa60 72 75 70 74 65 64 20 29 3b 0a 20 20 72 63 20 3d  rupted );.  rc =
2fa70 20 53 51 4c 49 54 45 5f 49 4e 54 45 52 52 55 50   SQLITE_INTERRUP
2fa80 54 3b 0a 20 20 70 2d 3e 72 63 20 3d 20 72 63 3b  T;.  p->rc = rc;
2fa90 0a 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72  .  sqlite3SetStr
2faa0 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c  ing(&p->zErrMsg,
2fab0 20 64 62 2c 20 22 25 73 22 2c 20 73 71 6c 69 74   db, "%s", sqlit
2fac0 65 33 45 72 72 53 74 72 28 72 63 29 29 3b 0a 20  e3ErrStr(rc));. 
2fad0 20 67 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f 72   goto vdbe_error
2fae0 5f 68 61 6c 74 3b 0a 7d 0a                       _halt;.}.