/ Hex Artifact Content
Login

Artifact 48fe95bd84b7cdeb155c4d2b825c7d19a65c5b3d:


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: 45 6e 74 65 72 28 70 29 3b 0a 20 20 69 66 28 20  Enter(p);.  if( 
49d0: 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 4e 4f  p->rc==SQLITE_NO
49e0: 4d 45 4d 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68  MEM ){.    /* Th
49f0: 69 73 20 68 61 70 70 65 6e 73 20 69 66 20 61 20  is happens if a 
4a00: 6d 61 6c 6c 6f 63 28 29 20 69 6e 73 69 64 65 20  malloc() inside 
4a10: 61 20 63 61 6c 6c 20 74 6f 20 73 71 6c 69 74 65  a call to sqlite
4a20: 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 29 20  3_column_text() 
4a30: 6f 72 0a 20 20 20 20 2a 2a 20 73 71 6c 69 74 65  or.    ** sqlite
4a40: 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 31 36 28  3_column_text16(
4a50: 29 20 66 61 69 6c 65 64 2e 20 20 2a 2f 0a 20 20  ) failed.  */.  
4a60: 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20    goto no_mem;. 
4a70: 20 7d 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e   }.  assert( p->
4a80: 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c  rc==SQLITE_OK ||
4a90: 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 42   p->rc==SQLITE_B
4aa0: 55 53 59 20 29 3b 0a 20 20 70 2d 3e 72 63 20 3d  USY );.  p->rc =
4ab0: 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 61 73   SQLITE_OK;.  as
4ac0: 73 65 72 74 28 20 70 2d 3e 65 78 70 6c 61 69 6e  sert( p->explain
4ad0: 3d 3d 30 20 29 3b 0a 20 20 70 2d 3e 70 52 65 73  ==0 );.  p->pRes
4ae0: 75 6c 74 53 65 74 20 3d 20 30 3b 0a 20 20 64 62  ultSet = 0;.  db
4af0: 2d 3e 62 75 73 79 48 61 6e 64 6c 65 72 2e 6e 42  ->busyHandler.nB
4b00: 75 73 79 20 3d 20 30 3b 0a 20 20 43 48 45 43 4b  usy = 0;.  CHECK
4b10: 5f 46 4f 52 5f 49 4e 54 45 52 52 55 50 54 3b 0a  _FOR_INTERRUPT;.
4b20: 20 20 73 71 6c 69 74 65 33 56 64 62 65 49 4f 54    sqlite3VdbeIOT
4b30: 72 61 63 65 53 71 6c 28 70 29 3b 0a 23 69 66 6e  raceSql(p);.#ifn
4b40: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
4b50: 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43  PROGRESS_CALLBAC
4b60: 4b 0a 20 20 63 68 65 63 6b 50 72 6f 67 72 65 73  K.  checkProgres
4b70: 73 20 3d 20 64 62 2d 3e 78 50 72 6f 67 72 65 73  s = db->xProgres
4b80: 73 21 3d 30 3b 0a 23 65 6e 64 69 66 0a 23 69 66  s!=0;.#endif.#if
4b90: 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
4ba0: 0a 20 20 73 71 6c 69 74 65 33 42 65 67 69 6e 42  .  sqlite3BeginB
4bb0: 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 3b 0a 20  enignMalloc();. 
4bc0: 20 69 66 28 20 70 2d 3e 70 63 3d 3d 30 20 20 26   if( p->pc==0  &
4bd0: 26 20 28 70 2d 3e 64 62 2d 3e 66 6c 61 67 73 20  & (p->db->flags 
4be0: 26 20 53 51 4c 49 54 45 5f 56 64 62 65 4c 69 73  & SQLITE_VdbeLis
4bf0: 74 69 6e 67 29 21 3d 30 20 29 7b 0a 20 20 20 20  ting)!=0 ){.    
4c00: 69 6e 74 20 69 3b 0a 20 20 20 20 70 72 69 6e 74  int i;.    print
4c10: 66 28 22 56 44 42 45 20 50 72 6f 67 72 61 6d 20  f("VDBE Program 
4c20: 4c 69 73 74 69 6e 67 3a 5c 6e 22 29 3b 0a 20 20  Listing:\n");.  
4c30: 20 20 73 71 6c 69 74 65 33 56 64 62 65 50 72 69    sqlite3VdbePri
4c40: 6e 74 53 71 6c 28 70 29 3b 0a 20 20 20 20 66 6f  ntSql(p);.    fo
4c50: 72 28 69 3d 30 3b 20 69 3c 70 2d 3e 6e 4f 70 3b  r(i=0; i<p->nOp;
4c60: 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 73 71 6c   i++){.      sql
4c70: 69 74 65 33 56 64 62 65 50 72 69 6e 74 4f 70 28  ite3VdbePrintOp(
4c80: 73 74 64 6f 75 74 2c 20 69 2c 20 26 61 4f 70 5b  stdout, i, &aOp[
4c90: 69 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  i]);.    }.  }. 
4ca0: 20 73 71 6c 69 74 65 33 45 6e 64 42 65 6e 69 67   sqlite3EndBenig
4cb0: 6e 4d 61 6c 6c 6f 63 28 29 3b 0a 23 65 6e 64 69  nMalloc();.#endi
4cc0: 66 0a 20 20 66 6f 72 28 70 63 3d 70 2d 3e 70 63  f.  for(pc=p->pc
4cd0: 3b 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 3b  ; rc==SQLITE_OK;
4ce0: 20 70 63 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65   pc++){.    asse
4cf0: 72 74 28 20 70 63 3e 3d 30 20 26 26 20 70 63 3c  rt( pc>=0 && pc<
4d00: 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 20 20 69 66  p->nOp );.    if
4d10: 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c  ( db->mallocFail
4d20: 65 64 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  ed ) goto no_mem
4d30: 3b 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50 52  ;.#ifdef VDBE_PR
4d40: 4f 46 49 4c 45 0a 20 20 20 20 6f 72 69 67 50 63  OFILE.    origPc
4d50: 20 3d 20 70 63 3b 0a 20 20 20 20 73 74 61 72 74   = pc;.    start
4d60: 20 3d 20 73 71 6c 69 74 65 33 48 77 74 69 6d 65   = sqlite3Hwtime
4d70: 28 29 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 70  ();.#endif.    p
4d80: 4f 70 20 3d 20 26 61 4f 70 5b 70 63 5d 3b 0a 0a  Op = &aOp[pc];..
4d90: 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 61 6c 6c 6f      /* Only allo
4da0: 77 20 74 72 61 63 69 6e 67 20 69 66 20 53 51 4c  w tracing if SQL
4db0: 49 54 45 5f 44 45 42 55 47 20 69 73 20 64 65 66  ITE_DEBUG is def
4dc0: 69 6e 65 64 2e 0a 20 20 20 20 2a 2f 0a 23 69 66  ined..    */.#if
4dd0: 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
4de0: 0a 20 20 20 20 69 66 28 20 70 2d 3e 74 72 61 63  .    if( p->trac
4df0: 65 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 70  e ){.      if( p
4e00: 63 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  c==0 ){.        
4e10: 70 72 69 6e 74 66 28 22 56 44 42 45 20 45 78 65  printf("VDBE Exe
4e20: 63 75 74 69 6f 6e 20 54 72 61 63 65 3a 5c 6e 22  cution Trace:\n"
4e30: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
4e40: 65 33 56 64 62 65 50 72 69 6e 74 53 71 6c 28 70  e3VdbePrintSql(p
4e50: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  );.      }.     
4e60: 20 73 71 6c 69 74 65 33 56 64 62 65 50 72 69 6e   sqlite3VdbePrin
4e70: 74 4f 70 28 70 2d 3e 74 72 61 63 65 2c 20 70 63  tOp(p->trace, pc
4e80: 2c 20 70 4f 70 29 3b 0a 20 20 20 20 7d 0a 23 65  , pOp);.    }.#e
4e90: 6e 64 69 66 0a 20 20 20 20 20 20 0a 0a 20 20 20  ndif.      ..   
4ea0: 20 2f 2a 20 43 68 65 63 6b 20 74 6f 20 73 65 65   /* Check to see
4eb0: 20 69 66 20 77 65 20 6e 65 65 64 20 74 6f 20 73   if we need to s
4ec0: 69 6d 75 6c 61 74 65 20 61 6e 20 69 6e 74 65 72  imulate an inter
4ed0: 72 75 70 74 2e 20 20 54 68 69 73 20 6f 6e 6c 79  rupt.  This only
4ee0: 20 68 61 70 70 65 6e 73 0a 20 20 20 20 2a 2a 20   happens.    ** 
4ef0: 69 66 20 77 65 20 68 61 76 65 20 61 20 73 70 65  if we have a spe
4f00: 63 69 61 6c 20 74 65 73 74 20 62 75 69 6c 64 2e  cial test build.
4f10: 0a 20 20 20 20 2a 2f 0a 23 69 66 64 65 66 20 53  .    */.#ifdef S
4f20: 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 20 20 69  QLITE_TEST.    i
4f30: 66 28 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72  f( sqlite3_inter
4f40: 72 75 70 74 5f 63 6f 75 6e 74 3e 30 20 29 7b 0a  rupt_count>0 ){.
4f50: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 69 6e        sqlite3_in
4f60: 74 65 72 72 75 70 74 5f 63 6f 75 6e 74 2d 2d 3b  terrupt_count--;
4f70: 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74  .      if( sqlit
4f80: 65 33 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75  e3_interrupt_cou
4f90: 6e 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  nt==0 ){.       
4fa0: 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75   sqlite3_interru
4fb0: 70 74 28 64 62 29 3b 0a 20 20 20 20 20 20 7d 0a  pt(db);.      }.
4fc0: 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 23 69      }.#endif..#i
4fd0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
4fe0: 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42  T_PROGRESS_CALLB
4ff0: 41 43 4b 0a 20 20 20 20 2f 2a 20 43 61 6c 6c 20  ACK.    /* Call 
5000: 74 68 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c  the progress cal
5010: 6c 62 61 63 6b 20 69 66 20 69 74 20 69 73 20 63  lback if it is c
5020: 6f 6e 66 69 67 75 72 65 64 20 61 6e 64 20 74 68  onfigured and th
5030: 65 20 72 65 71 75 69 72 65 64 20 6e 75 6d 62 65  e required numbe
5040: 72 0a 20 20 20 20 2a 2a 20 6f 66 20 56 44 42 45  r.    ** of VDBE
5050: 20 6f 70 73 20 68 61 76 65 20 62 65 65 6e 20 65   ops have been e
5060: 78 65 63 75 74 65 64 20 28 65 69 74 68 65 72 20  xecuted (either 
5070: 73 69 6e 63 65 20 74 68 69 73 20 69 6e 76 6f 63  since this invoc
5080: 61 74 69 6f 6e 20 6f 66 0a 20 20 20 20 2a 2a 20  ation of.    ** 
5090: 73 71 6c 69 74 65 33 56 64 62 65 45 78 65 63 28  sqlite3VdbeExec(
50a0: 29 20 6f 72 20 73 69 6e 63 65 20 6c 61 73 74 20  ) or since last 
50b0: 74 69 6d 65 20 74 68 65 20 70 72 6f 67 72 65 73  time the progres
50c0: 73 20 63 61 6c 6c 62 61 63 6b 20 77 61 73 20 63  s callback was c
50d0: 61 6c 6c 65 64 29 2e 0a 20 20 20 20 2a 2a 20 49  alled)..    ** I
50e0: 66 20 74 68 65 20 70 72 6f 67 72 65 73 73 20 63  f the progress c
50f0: 61 6c 6c 62 61 63 6b 20 72 65 74 75 72 6e 73 20  allback returns 
5100: 6e 6f 6e 2d 7a 65 72 6f 2c 20 65 78 69 74 20 74  non-zero, exit t
5110: 68 65 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69  he virtual machi
5120: 6e 65 20 77 69 74 68 0a 20 20 20 20 2a 2a 20 61  ne with.    ** a
5130: 20 72 65 74 75 72 6e 20 63 6f 64 65 20 53 51 4c   return code SQL
5140: 49 54 45 5f 41 42 4f 52 54 2e 0a 20 20 20 20 2a  ITE_ABORT..    *
5150: 2f 0a 20 20 20 20 69 66 28 20 63 68 65 63 6b 50  /.    if( checkP
5160: 72 6f 67 72 65 73 73 20 29 7b 0a 20 20 20 20 20  rogress ){.     
5170: 20 69 66 28 20 64 62 2d 3e 6e 50 72 6f 67 72 65   if( db->nProgre
5180: 73 73 4f 70 73 3d 3d 6e 50 72 6f 67 72 65 73 73  ssOps==nProgress
5190: 4f 70 73 20 29 7b 0a 20 20 20 20 20 20 20 20 69  Ops ){.        i
51a0: 6e 74 20 70 72 63 3b 0a 20 20 20 20 20 20 20 20  nt prc;.        
51b0: 70 72 63 20 3d 20 64 62 2d 3e 78 50 72 6f 67 72  prc = db->xProgr
51c0: 65 73 73 28 64 62 2d 3e 70 50 72 6f 67 72 65 73  ess(db->pProgres
51d0: 73 41 72 67 29 3b 0a 20 20 20 20 20 20 20 20 69  sArg);.        i
51e0: 66 28 20 70 72 63 21 3d 30 20 29 7b 0a 20 20 20  f( prc!=0 ){.   
51f0: 20 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49         rc = SQLI
5200: 54 45 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20  TE_INTERRUPT;.  
5210: 20 20 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62          goto vdb
5220: 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 20 20  e_error_halt;.  
5230: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
5240: 6e 50 72 6f 67 72 65 73 73 4f 70 73 20 3d 20 30  nProgressOps = 0
5250: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
5260: 6e 50 72 6f 67 72 65 73 73 4f 70 73 2b 2b 3b 0a  nProgressOps++;.
5270: 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20      }.#endif..  
5280: 20 20 2f 2a 20 4f 6e 20 61 6e 79 20 6f 70 63 6f    /* On any opco
5290: 64 65 20 77 69 74 68 20 74 68 65 20 22 6f 75 74  de with the "out
52a0: 32 2d 70 72 65 72 65 6c 61 73 65 22 20 74 61 67  2-prerelase" tag
52b0: 2c 20 66 72 65 65 20 61 6e 79 0a 20 20 20 20 2a  , free any.    *
52c0: 2a 20 65 78 74 65 72 6e 61 6c 20 61 6c 6c 6f 63  * external alloc
52d0: 61 74 69 6f 6e 73 20 6f 75 74 20 6f 66 20 6d 65  ations out of me
52e0: 6d 5b 70 32 5d 20 61 6e 64 20 73 65 74 20 6d 65  m[p2] and set me
52f0: 6d 5b 70 32 5d 20 74 6f 20 62 65 0a 20 20 20 20  m[p2] to be.    
5300: 2a 2a 20 61 6e 20 75 6e 64 65 66 69 6e 65 64 20  ** an undefined 
5310: 69 6e 74 65 67 65 72 2e 20 20 4f 70 63 6f 64 65  integer.  Opcode
5320: 73 20 77 69 6c 6c 20 65 69 74 68 65 72 20 66 69  s will either fi
5330: 6c 6c 20 69 6e 20 74 68 65 20 69 6e 74 65 67 65  ll in the intege
5340: 72 0a 20 20 20 20 2a 2a 20 76 61 6c 75 65 20 6f  r.    ** value o
5350: 72 20 63 6f 6e 76 65 72 74 20 6d 65 6d 5b 70 32  r convert mem[p2
5360: 5d 20 74 6f 20 61 20 64 69 66 66 65 72 65 6e 74  ] to a different
5370: 20 74 79 70 65 2e 0a 20 20 20 20 2a 2f 0a 20 20   type..    */.  
5380: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f    assert( pOp->o
5390: 70 66 6c 61 67 73 3d 3d 73 71 6c 69 74 65 33 4f  pflags==sqlite3O
53a0: 70 63 6f 64 65 50 72 6f 70 65 72 74 79 5b 70 4f  pcodeProperty[pO
53b0: 70 2d 3e 6f 70 63 6f 64 65 5d 20 29 3b 0a 20 20  p->opcode] );.  
53c0: 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 66 6c 61    if( pOp->opfla
53d0: 67 73 20 26 20 4f 50 46 4c 47 5f 4f 55 54 32 5f  gs & OPFLG_OUT2_
53e0: 50 52 45 52 45 4c 45 41 53 45 20 29 7b 0a 20 20  PRERELEASE ){.  
53f0: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
5400: 3e 70 32 3e 30 20 29 3b 0a 20 20 20 20 20 20 61  >p2>0 );.      a
5410: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d  ssert( pOp->p2<=
5420: 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20  p->nMem );.     
5430: 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f   pOut = &aMem[pO
5440: 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 20 20 6d 65  p->p2];.      me
5450: 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
5460: 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 20 20 73  , pOut);.      s
5470: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c  qlite3VdbeMemRel
5480: 65 61 73 65 45 78 74 65 72 6e 61 6c 28 70 4f 75  easeExternal(pOu
5490: 74 29 3b 0a 20 20 20 20 20 20 70 4f 75 74 2d 3e  t);.      pOut->
54a0: 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b  flags = MEM_Int;
54b0: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 20 53  .    }..    /* S
54c0: 61 6e 69 74 79 20 63 68 65 63 6b 69 6e 67 20 6f  anity checking o
54d0: 6e 20 6f 74 68 65 72 20 6f 70 65 72 61 6e 64 73  n other operands
54e0: 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54   */.#ifdef SQLIT
54f0: 45 5f 44 45 42 55 47 0a 20 20 20 20 69 66 28 20  E_DEBUG.    if( 
5500: 28 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20  (pOp->opflags & 
5510: 4f 50 46 4c 47 5f 49 4e 31 29 21 3d 30 20 29 7b  OPFLG_IN1)!=0 ){
5520: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
5530: 4f 70 2d 3e 70 31 3e 30 20 29 3b 0a 20 20 20 20  Op->p1>0 );.    
5540: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
5550: 31 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20  1<=p->nMem );.  
5560: 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
5570: 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70  sValid(&aMem[pOp
5580: 2d 3e 70 31 5d 29 20 29 3b 0a 20 20 20 20 20 20  ->p1]) );.      
5590: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
55a0: 4f 70 2d 3e 70 31 2c 20 26 61 4d 65 6d 5b 70 4f  Op->p1, &aMem[pO
55b0: 70 2d 3e 70 31 5d 29 3b 0a 20 20 20 20 7d 0a 20  p->p1]);.    }. 
55c0: 20 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70 66     if( (pOp->opf
55d0: 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f 49 4e 32  lags & OPFLG_IN2
55e0: 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 61 73  )!=0 ){.      as
55f0: 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20  sert( pOp->p2>0 
5600: 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
5610: 20 70 4f 70 2d 3e 70 32 3c 3d 70 2d 3e 6e 4d 65   pOp->p2<=p->nMe
5620: 6d 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  m );.      asser
5630: 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61  t( memIsValid(&a
5640: 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 20 29 3b  Mem[pOp->p2]) );
5650: 0a 20 20 20 20 20 20 52 45 47 49 53 54 45 52 5f  .      REGISTER_
5660: 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 26  TRACE(pOp->p2, &
5670: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 3b 0a  aMem[pOp->p2]);.
5680: 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 28 70      }.    if( (p
5690: 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50  Op->opflags & OP
56a0: 46 4c 47 5f 49 4e 33 29 21 3d 30 20 29 7b 0a 20  FLG_IN3)!=0 ){. 
56b0: 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
56c0: 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 20 20 20 20  ->p3>0 );.      
56d0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c  assert( pOp->p3<
56e0: 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20  =p->nMem );.    
56f0: 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
5700: 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e  alid(&aMem[pOp->
5710: 70 33 5d 29 20 29 3b 0a 20 20 20 20 20 20 52 45  p3]) );.      RE
5720: 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
5730: 2d 3e 70 33 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d  ->p3, &aMem[pOp-
5740: 3e 70 33 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 20  >p3]);.    }.   
5750: 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70 66 6c 61   if( (pOp->opfla
5760: 67 73 20 26 20 4f 50 46 4c 47 5f 4f 55 54 32 29  gs & OPFLG_OUT2)
5770: 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73  !=0 ){.      ass
5780: 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29  ert( pOp->p2>0 )
5790: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
57a0: 70 4f 70 2d 3e 70 32 3c 3d 70 2d 3e 6e 4d 65 6d  pOp->p2<=p->nMem
57b0: 20 29 3b 0a 20 20 20 20 20 20 6d 65 6d 41 62 6f   );.      memAbo
57c0: 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 26 61  utToChange(p, &a
57d0: 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 3b 0a 20  Mem[pOp->p2]);. 
57e0: 20 20 20 7d 0a 20 20 20 20 69 66 28 20 28 70 4f     }.    if( (pO
57f0: 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50 46  p->opflags & OPF
5800: 4c 47 5f 4f 55 54 33 29 21 3d 30 20 29 7b 0a 20  LG_OUT3)!=0 ){. 
5810: 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
5820: 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 20 20 20 20  ->p3>0 );.      
5830: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c  assert( pOp->p3<
5840: 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20  =p->nMem );.    
5850: 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
5860: 67 65 28 70 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d  ge(p, &aMem[pOp-
5870: 3e 70 33 5d 29 3b 0a 20 20 20 20 7d 0a 23 65 6e  >p3]);.    }.#en
5880: 64 69 66 0a 20 20 0a 20 20 20 20 73 77 69 74 63  dif.  .    switc
5890: 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29  h( pOp->opcode )
58a0: 7b 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  {../************
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 0a 2a 2a 20 57 68 61 74 20 66 6f 6c 6c 6f 77  *.** What follow
5900: 73 20 69 73 20 61 20 6d 61 73 73 69 76 65 20 73  s is a massive s
5910: 77 69 74 63 68 20 73 74 61 74 65 6d 65 6e 74 20  witch statement 
5920: 77 68 65 72 65 20 65 61 63 68 20 63 61 73 65 20  where each case 
5930: 69 6d 70 6c 65 6d 65 6e 74 73 20 61 0a 2a 2a 20  implements a.** 
5940: 73 65 70 61 72 61 74 65 20 69 6e 73 74 72 75 63  separate instruc
5950: 74 69 6f 6e 20 69 6e 20 74 68 65 20 76 69 72 74  tion in the virt
5960: 75 61 6c 20 6d 61 63 68 69 6e 65 2e 20 20 49 66  ual machine.  If
5970: 20 77 65 20 66 6f 6c 6c 6f 77 20 74 68 65 20 75   we follow the u
5980: 73 75 61 6c 0a 2a 2a 20 69 6e 64 65 6e 74 61 74  sual.** indentat
5990: 69 6f 6e 20 63 6f 6e 76 65 6e 74 69 6f 6e 73 2c  ion conventions,
59a0: 20 65 61 63 68 20 63 61 73 65 20 73 68 6f 75 6c   each case shoul
59b0: 64 20 62 65 20 69 6e 64 65 6e 74 65 64 20 62 79  d be indented by
59c0: 20 36 20 73 70 61 63 65 73 2e 20 20 42 75 74 0a   6 spaces.  But.
59d0: 2a 2a 20 74 68 61 74 20 69 73 20 61 20 6c 6f 74  ** that is a lot
59e0: 20 6f 66 20 77 61 73 74 65 64 20 73 70 61 63 65   of wasted space
59f0: 20 6f 6e 20 74 68 65 20 6c 65 66 74 20 6d 61 72   on the left mar
5a00: 67 69 6e 2e 20 20 53 6f 20 74 68 65 20 63 6f 64  gin.  So the cod
5a10: 65 20 77 69 74 68 69 6e 0a 2a 2a 20 74 68 65 20  e within.** the 
5a20: 73 77 69 74 63 68 20 73 74 61 74 65 6d 65 6e 74  switch statement
5a30: 20 77 69 6c 6c 20 62 72 65 61 6b 20 77 69 74 68   will break with
5a40: 20 63 6f 6e 76 65 6e 74 69 6f 6e 20 61 6e 64 20   convention and 
5a50: 62 65 20 66 6c 75 73 68 2d 6c 65 66 74 2e 20 41  be flush-left. A
5a60: 6e 6f 74 68 65 72 0a 2a 2a 20 62 69 67 20 63 6f  nother.** big co
5a70: 6d 6d 65 6e 74 20 28 73 69 6d 69 6c 61 72 20 74  mment (similar t
5a80: 6f 20 74 68 69 73 20 6f 6e 65 29 20 77 69 6c 6c  o this one) will
5a90: 20 6d 61 72 6b 20 74 68 65 20 70 6f 69 6e 74 20   mark the point 
5aa0: 69 6e 20 74 68 65 20 63 6f 64 65 20 77 68 65 72  in the code wher
5ab0: 65 0a 2a 2a 20 77 65 20 74 72 61 6e 73 69 74 69  e.** we transiti
5ac0: 6f 6e 20 62 61 63 6b 20 74 6f 20 6e 6f 72 6d 61  on back to norma
5ad0: 6c 20 69 6e 64 65 6e 74 61 74 69 6f 6e 2e 0a 2a  l indentation..*
5ae0: 2a 0a 2a 2a 20 54 68 65 20 66 6f 72 6d 61 74 74  *.** The formatt
5af0: 69 6e 67 20 6f 66 20 65 61 63 68 20 63 61 73 65  ing of each case
5b00: 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 2e 20 20   is important.  
5b10: 54 68 65 20 6d 61 6b 65 66 69 6c 65 20 66 6f 72  The makefile for
5b20: 20 53 51 4c 69 74 65 0a 2a 2a 20 67 65 6e 65 72   SQLite.** gener
5b30: 61 74 65 73 20 74 77 6f 20 43 20 66 69 6c 65 73  ates two C files
5b40: 20 22 6f 70 63 6f 64 65 73 2e 68 22 20 61 6e 64   "opcodes.h" and
5b50: 20 22 6f 70 63 6f 64 65 73 2e 63 22 20 62 79 20   "opcodes.c" by 
5b60: 73 63 61 6e 6e 69 6e 67 20 74 68 69 73 0a 2a 2a  scanning this.**
5b70: 20 66 69 6c 65 20 6c 6f 6f 6b 69 6e 67 20 66 6f   file looking fo
5b80: 72 20 6c 69 6e 65 73 20 74 68 61 74 20 62 65 67  r lines that beg
5b90: 69 6e 20 77 69 74 68 20 22 63 61 73 65 20 4f 50  in with "case OP
5ba0: 5f 22 2e 20 20 54 68 65 20 6f 70 63 6f 64 65 73  _".  The opcodes
5bb0: 2e 68 20 66 69 6c 65 73 0a 2a 2a 20 77 69 6c 6c  .h files.** will
5bc0: 20 62 65 20 66 69 6c 6c 65 64 20 77 69 74 68 20   be filled with 
5bd0: 23 64 65 66 69 6e 65 73 20 74 68 61 74 20 67 69  #defines that gi
5be0: 76 65 20 75 6e 69 71 75 65 20 69 6e 74 65 67 65  ve unique intege
5bf0: 72 20 76 61 6c 75 65 73 20 74 6f 20 65 61 63 68  r values to each
5c00: 0a 2a 2a 20 6f 70 63 6f 64 65 20 61 6e 64 20 74  .** opcode and t
5c10: 68 65 20 6f 70 63 6f 64 65 73 2e 63 20 66 69 6c  he opcodes.c fil
5c20: 65 20 69 73 20 66 69 6c 6c 65 64 20 77 69 74 68  e is filled with
5c30: 20 61 6e 20 61 72 72 61 79 20 6f 66 20 73 74 72   an array of str
5c40: 69 6e 67 73 20 77 68 65 72 65 0a 2a 2a 20 65 61  ings where.** ea
5c50: 63 68 20 73 74 72 69 6e 67 20 69 73 20 74 68 65  ch string is the
5c60: 20 73 79 6d 62 6f 6c 69 63 20 6e 61 6d 65 20 66   symbolic name f
5c70: 6f 72 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e  or the correspon
5c80: 64 69 6e 67 20 6f 70 63 6f 64 65 2e 20 20 49 66  ding opcode.  If
5c90: 20 74 68 65 0a 2a 2a 20 63 61 73 65 20 73 74 61   the.** case sta
5ca0: 74 65 6d 65 6e 74 20 69 73 20 66 6f 6c 6c 6f 77  tement is follow
5cb0: 65 64 20 62 79 20 61 20 63 6f 6d 6d 65 6e 74 20  ed by a comment 
5cc0: 6f 66 20 74 68 65 20 66 6f 72 6d 20 22 2f 23 20  of the form "/# 
5cd0: 73 61 6d 65 20 61 73 20 2e 2e 2e 20 23 2f 22 0a  same as ... #/".
5ce0: 2a 2a 20 74 68 61 74 20 63 6f 6d 6d 65 6e 74 20  ** that comment 
5cf0: 69 73 20 75 73 65 64 20 74 6f 20 64 65 74 65 72  is used to deter
5d00: 6d 69 6e 65 20 74 68 65 20 70 61 72 74 69 63 75  mine the particu
5d10: 6c 61 72 20 76 61 6c 75 65 20 6f 66 20 74 68 65  lar value of the
5d20: 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 4f   opcode..**.** O
5d30: 74 68 65 72 20 6b 65 79 77 6f 72 64 73 20 69 6e  ther keywords in
5d40: 20 74 68 65 20 63 6f 6d 6d 65 6e 74 20 74 68 61   the comment tha
5d50: 74 20 66 6f 6c 6c 6f 77 73 20 65 61 63 68 20 63  t follows each c
5d60: 61 73 65 20 61 72 65 20 75 73 65 64 20 74 6f 0a  ase are used to.
5d70: 2a 2a 20 63 6f 6e 73 74 72 75 63 74 20 74 68 65  ** construct the
5d80: 20 4f 50 46 4c 47 5f 49 4e 49 54 49 41 4c 49 5a   OPFLG_INITIALIZ
5d90: 45 52 20 76 61 6c 75 65 20 74 68 61 74 20 69 6e  ER value that in
5da0: 69 74 69 61 6c 69 7a 65 73 20 6f 70 63 6f 64 65  itializes opcode
5db0: 50 72 6f 70 65 72 74 79 5b 5d 2e 0a 2a 2a 20 4b  Property[]..** K
5dc0: 65 79 77 6f 72 64 73 20 69 6e 63 6c 75 64 65 3a  eywords include:
5dd0: 20 69 6e 31 2c 20 69 6e 32 2c 20 69 6e 33 2c 20   in1, in2, in3, 
5de0: 6f 75 74 32 5f 70 72 65 72 65 6c 65 61 73 65 2c  out2_prerelease,
5df0: 20 6f 75 74 32 2c 20 6f 75 74 33 2e 20 20 53 65   out2, out3.  Se
5e00: 65 0a 2a 2a 20 74 68 65 20 6d 6b 6f 70 63 6f 64  e.** the mkopcod
5e10: 65 68 2e 61 77 6b 20 73 63 72 69 70 74 20 66 6f  eh.awk script fo
5e20: 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66  r additional inf
5e30: 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  ormation..**.** 
5e40: 44 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 61 62  Documentation ab
5e50: 6f 75 74 20 56 44 42 45 20 6f 70 63 6f 64 65 73  out VDBE opcodes
5e60: 20 69 73 20 67 65 6e 65 72 61 74 65 64 20 62 79   is generated by
5e70: 20 73 63 61 6e 6e 69 6e 67 20 74 68 69 73 20 66   scanning this f
5e80: 69 6c 65 0a 2a 2a 20 66 6f 72 20 6c 69 6e 65 73  ile.** for lines
5e90: 20 6f 66 20 74 68 61 74 20 63 6f 6e 74 61 69 6e   of that contain
5ea0: 20 22 4f 70 63 6f 64 65 3a 22 2e 20 20 54 68 61   "Opcode:".  Tha
5eb0: 74 20 6c 69 6e 65 20 61 6e 64 20 61 6c 6c 20 73  t line and all s
5ec0: 75 62 73 65 71 75 65 6e 74 0a 2a 2a 20 63 6f 6d  ubsequent.** com
5ed0: 6d 65 6e 74 20 6c 69 6e 65 73 20 61 72 65 20 75  ment lines are u
5ee0: 73 65 64 20 69 6e 20 74 68 65 20 67 65 6e 65 72  sed in the gener
5ef0: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6f 70 63  ation of the opc
5f00: 6f 64 65 2e 68 74 6d 6c 20 64 6f 63 75 6d 65 6e  ode.html documen
5f10: 74 61 74 69 6f 6e 0a 2a 2a 20 66 69 6c 65 2e 0a  tation.** file..
5f20: 2a 2a 0a 2a 2a 20 53 55 4d 4d 41 52 59 3a 0a 2a  **.** SUMMARY:.*
5f30: 2a 0a 2a 2a 20 20 20 20 20 46 6f 72 6d 61 74 74  *.**     Formatt
5f40: 69 6e 67 20 69 73 20 69 6d 70 6f 72 74 61 6e 74  ing is important
5f50: 20 74 6f 20 73 63 72 69 70 74 73 20 74 68 61 74   to scripts that
5f60: 20 73 63 61 6e 20 74 68 69 73 20 66 69 6c 65 2e   scan this file.
5f70: 0a 2a 2a 20 20 20 20 20 44 6f 20 6e 6f 74 20 64  .**     Do not d
5f80: 65 76 69 61 74 65 20 66 72 6f 6d 20 74 68 65 20  eviate from the 
5f90: 66 6f 72 6d 61 74 74 69 6e 67 20 73 74 79 6c 65  formatting style
5fa0: 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 75 73   currently in us
5fb0: 65 2e 0a 2a 2a 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  e..**.**********
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 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  ***/../* Opcode:
6010: 20 20 47 6f 74 6f 20 2a 20 50 32 20 2a 20 2a 20    Goto * P2 * * 
6020: 2a 0a 2a 2a 0a 2a 2a 20 41 6e 20 75 6e 63 6f 6e  *.**.** An uncon
6030: 64 69 74 69 6f 6e 61 6c 20 6a 75 6d 70 20 74 6f  ditional jump to
6040: 20 61 64 64 72 65 73 73 20 50 32 2e 0a 2a 2a 20   address P2..** 
6050: 54 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63  The next instruc
6060: 74 69 6f 6e 20 65 78 65 63 75 74 65 64 20 77 69  tion executed wi
6070: 6c 6c 20 62 65 20 0a 2a 2a 20 74 68 65 20 6f 6e  ll be .** the on
6080: 65 20 61 74 20 69 6e 64 65 78 20 50 32 20 66 72  e at index P2 fr
6090: 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67  om the beginning
60a0: 20 6f 66 0a 2a 2a 20 74 68 65 20 70 72 6f 67 72   of.** the progr
60b0: 61 6d 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 47  am..*/.case OP_G
60c0: 6f 74 6f 3a 20 7b 20 20 20 20 20 20 20 20 20 20  oto: {          
60d0: 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
60e0: 43 48 45 43 4b 5f 46 4f 52 5f 49 4e 54 45 52 52  CHECK_FOR_INTERR
60f0: 55 50 54 3b 0a 20 20 70 63 20 3d 20 70 4f 70 2d  UPT;.  pc = pOp-
6100: 3e 70 32 20 2d 20 31 3b 0a 20 20 62 72 65 61 6b  >p2 - 1;.  break
6110: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
6120: 20 47 6f 73 75 62 20 50 31 20 50 32 20 2a 20 2a   Gosub P1 P2 * *
6130: 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 74   *.**.** Write t
6140: 68 65 20 63 75 72 72 65 6e 74 20 61 64 64 72 65  he current addre
6150: 73 73 20 6f 6e 74 6f 20 72 65 67 69 73 74 65 72  ss onto register
6160: 20 50 31 0a 2a 2a 20 61 6e 64 20 74 68 65 6e 20   P1.** and then 
6170: 6a 75 6d 70 20 74 6f 20 61 64 64 72 65 73 73 20  jump to address 
6180: 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 47  P2..*/.case OP_G
6190: 6f 73 75 62 3a 20 7b 20 20 20 20 20 20 20 20 20  osub: {         
61a0: 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20     /* jump, in1 
61b0: 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
61c0: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  m[pOp->p1];.  as
61d0: 73 65 72 74 28 20 28 70 49 6e 31 2d 3e 66 6c 61  sert( (pIn1->fla
61e0: 67 73 20 26 20 4d 45 4d 5f 44 79 6e 29 3d 3d 30  gs & MEM_Dyn)==0
61f0: 20 29 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f   );.  memAboutTo
6200: 43 68 61 6e 67 65 28 70 2c 20 70 49 6e 31 29 3b  Change(p, pIn1);
6210: 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d  .  pIn1->flags =
6220: 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 70 49 6e 31   MEM_Int;.  pIn1
6230: 2d 3e 75 2e 69 20 3d 20 70 63 3b 0a 20 20 52 45  ->u.i = pc;.  RE
6240: 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
6250: 2d 3e 70 31 2c 20 70 49 6e 31 29 3b 0a 20 20 70  ->p1, pIn1);.  p
6260: 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
6270: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
6280: 4f 70 63 6f 64 65 3a 20 20 52 65 74 75 72 6e 20  Opcode:  Return 
6290: 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  P1 * * * *.**.**
62a0: 20 4a 75 6d 70 20 74 6f 20 74 68 65 20 6e 65 78   Jump to the nex
62b0: 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 66  t instruction af
62c0: 74 65 72 20 74 68 65 20 61 64 64 72 65 73 73 20  ter the address 
62d0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a  in register P1..
62e0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 74 75 72  */.case OP_Retur
62f0: 6e 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f  n: {           /
6300: 2a 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20  * in1 */.  pIn1 
6310: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
6320: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 31  ;.  assert( pIn1
6330: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
6340: 74 20 29 3b 0a 20 20 70 63 20 3d 20 28 69 6e 74  t );.  pc = (int
6350: 29 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20 62 72  )pIn1->u.i;.  br
6360: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
6370: 65 3a 20 20 59 69 65 6c 64 20 50 31 20 2a 20 2a  e:  Yield P1 * *
6380: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 77 61 70 20   * *.**.** Swap 
6390: 74 68 65 20 70 72 6f 67 72 61 6d 20 63 6f 75 6e  the program coun
63a0: 74 65 72 20 77 69 74 68 20 74 68 65 20 76 61 6c  ter with the val
63b0: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
63c0: 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 59 69  1..*/.case OP_Yi
63d0: 65 6c 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20  eld: {          
63e0: 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 69 6e    /* in1 */.  in
63f0: 74 20 70 63 44 65 73 74 3b 0a 20 20 70 49 6e 31  t pcDest;.  pIn1
6400: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
6410: 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 49  ];.  assert( (pI
6420: 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
6430: 44 79 6e 29 3d 3d 30 20 29 3b 0a 20 20 70 49 6e  Dyn)==0 );.  pIn
6440: 31 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49  1->flags = MEM_I
6450: 6e 74 3b 0a 20 20 70 63 44 65 73 74 20 3d 20 28  nt;.  pcDest = (
6460: 69 6e 74 29 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20  int)pIn1->u.i;. 
6470: 20 70 49 6e 31 2d 3e 75 2e 69 20 3d 20 70 63 3b   pIn1->u.i = pc;
6480: 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43  .  REGISTER_TRAC
6490: 45 28 70 4f 70 2d 3e 70 31 2c 20 70 49 6e 31 29  E(pOp->p1, pIn1)
64a0: 3b 0a 20 20 70 63 20 3d 20 70 63 44 65 73 74 3b  ;.  pc = pcDest;
64b0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
64c0: 4f 70 63 6f 64 65 3a 20 20 48 61 6c 74 49 66 4e  Opcode:  HaltIfN
64d0: 75 6c 6c 20 20 50 31 20 50 32 20 50 33 20 50 34  ull  P1 P2 P3 P4
64e0: 20 2a 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b 20 74   *.**.** Check t
64f0: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
6500: 73 74 65 72 20 50 33 2e 20 20 49 66 20 69 73 20  ster P3.  If is 
6510: 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 48 61 6c  is NULL then Hal
6520: 74 20 75 73 69 6e 67 0a 2a 2a 20 70 61 72 61 6d  t using.** param
6530: 65 74 65 72 20 50 31 2c 20 50 32 2c 20 61 6e 64  eter P1, P2, and
6540: 20 50 34 20 61 73 20 69 66 20 74 68 69 73 20 77   P4 as if this w
6550: 65 72 65 20 61 20 48 61 6c 74 20 69 6e 73 74 72  ere a Halt instr
6560: 75 63 74 69 6f 6e 2e 20 20 49 66 20 74 68 65 0a  uction.  If the.
6570: 2a 2a 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  ** value in regi
6580: 73 74 65 72 20 50 33 20 69 73 20 6e 6f 74 20 4e  ster P3 is not N
6590: 55 4c 4c 2c 20 74 68 65 6e 20 74 68 69 73 20 72  ULL, then this r
65a0: 6f 75 74 69 6e 65 20 69 73 20 61 20 6e 6f 2d 6f  outine is a no-o
65b0: 70 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 48 61  p..*/.case OP_Ha
65c0: 6c 74 49 66 4e 75 6c 6c 3a 20 7b 20 20 20 20 20  ltIfNull: {     
65d0: 20 2f 2a 20 69 6e 33 20 2a 2f 0a 20 20 70 49 6e   /* in3 */.  pIn
65e0: 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  3 = &aMem[pOp->p
65f0: 33 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 33 2d  3];.  if( (pIn3-
6600: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
6610: 6c 29 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20  l)==0 ) break;. 
6620: 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68   /* Fall through
6630: 20 69 6e 74 6f 20 4f 50 5f 48 61 6c 74 20 2a 2f   into OP_Halt */
6640: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20  .}../* Opcode:  
6650: 48 61 6c 74 20 50 31 20 50 32 20 2a 20 50 34 20  Halt P1 P2 * P4 
6660: 2a 0a 2a 2a 0a 2a 2a 20 45 78 69 74 20 69 6d 6d  *.**.** Exit imm
6670: 65 64 69 61 74 65 6c 79 2e 20 20 41 6c 6c 20 6f  ediately.  All o
6680: 70 65 6e 20 63 75 72 73 6f 72 73 2c 20 65 74 63  pen cursors, etc
6690: 20 61 72 65 20 63 6c 6f 73 65 64 0a 2a 2a 20 61   are closed.** a
66a0: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 2e 0a 2a 2a  utomatically..**
66b0: 0a 2a 2a 20 50 31 20 69 73 20 74 68 65 20 72 65  .** P1 is the re
66c0: 73 75 6c 74 20 63 6f 64 65 20 72 65 74 75 72 6e  sult code return
66d0: 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 65 78  ed by sqlite3_ex
66e0: 65 63 28 29 2c 20 73 71 6c 69 74 65 33 5f 72 65  ec(), sqlite3_re
66f0: 73 65 74 28 29 2c 0a 2a 2a 20 6f 72 20 73 71 6c  set(),.** or sql
6700: 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 29 2e  ite3_finalize().
6710: 20 20 46 6f 72 20 61 20 6e 6f 72 6d 61 6c 20 68    For a normal h
6720: 61 6c 74 2c 20 74 68 69 73 20 73 68 6f 75 6c 64  alt, this should
6730: 20 62 65 20 53 51 4c 49 54 45 5f 4f 4b 20 28 30   be SQLITE_OK (0
6740: 29 2e 0a 2a 2a 20 46 6f 72 20 65 72 72 6f 72 73  )..** For errors
6750: 2c 20 69 74 20 63 61 6e 20 62 65 20 73 6f 6d 65  , it can be some
6760: 20 6f 74 68 65 72 20 76 61 6c 75 65 2e 20 20 49   other value.  I
6770: 66 20 50 31 21 3d 30 20 74 68 65 6e 20 50 32 20  f P1!=0 then P2 
6780: 77 69 6c 6c 20 64 65 74 65 72 6d 69 6e 65 0a 2a  will determine.*
6790: 2a 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  * whether or not
67a0: 20 74 6f 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65   to rollback the
67b0: 20 63 75 72 72 65 6e 74 20 74 72 61 6e 73 61 63   current transac
67c0: 74 69 6f 6e 2e 20 20 44 6f 20 6e 6f 74 20 72 6f  tion.  Do not ro
67d0: 6c 6c 62 61 63 6b 0a 2a 2a 20 69 66 20 50 32 3d  llback.** if P2=
67e0: 3d 4f 45 5f 46 61 69 6c 2e 20 44 6f 20 74 68 65  =OE_Fail. Do the
67f0: 20 72 6f 6c 6c 62 61 63 6b 20 69 66 20 50 32 3d   rollback if P2=
6800: 3d 4f 45 5f 52 6f 6c 6c 62 61 63 6b 2e 20 20 49  =OE_Rollback.  I
6810: 66 20 50 32 3d 3d 4f 45 5f 41 62 6f 72 74 2c 0a  f P2==OE_Abort,.
6820: 2a 2a 20 74 68 65 6e 20 62 61 63 6b 20 6f 75 74  ** then back out
6830: 20 61 6c 6c 20 63 68 61 6e 67 65 73 20 74 68 61   all changes tha
6840: 74 20 68 61 76 65 20 6f 63 63 75 72 72 65 64 20  t have occurred 
6850: 64 75 72 69 6e 67 20 74 68 69 73 20 65 78 65 63  during this exec
6860: 75 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20  ution of the.** 
6870: 56 44 42 45 2c 20 62 75 74 20 64 6f 20 6e 6f 74  VDBE, but do not
6880: 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20 74 72   rollback the tr
6890: 61 6e 73 61 63 74 69 6f 6e 2e 20 0a 2a 2a 0a 2a  ansaction. .**.*
68a0: 2a 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20 6e  * If P4 is not n
68b0: 75 6c 6c 20 74 68 65 6e 20 69 74 20 69 73 20 61  ull then it is a
68c0: 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20  n error message 
68d0: 73 74 72 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 54 68  string..**.** Th
68e0: 65 72 65 20 69 73 20 61 6e 20 69 6d 70 6c 69 65  ere is an implie
68f0: 64 20 22 48 61 6c 74 20 30 20 30 20 30 22 20 69  d "Halt 0 0 0" i
6900: 6e 73 74 72 75 63 74 69 6f 6e 20 69 6e 73 65 72  nstruction inser
6910: 74 65 64 20 61 74 20 74 68 65 20 76 65 72 79 20  ted at the very 
6920: 65 6e 64 20 6f 66 0a 2a 2a 20 65 76 65 72 79 20  end of.** every 
6930: 70 72 6f 67 72 61 6d 2e 20 20 53 6f 20 61 20 6a  program.  So a j
6940: 75 6d 70 20 70 61 73 74 20 74 68 65 20 6c 61 73  ump past the las
6950: 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 66  t instruction of
6960: 20 74 68 65 20 70 72 6f 67 72 61 6d 0a 2a 2a 20   the program.** 
6970: 69 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 65  is the same as e
6980: 78 65 63 75 74 69 6e 67 20 48 61 6c 74 2e 0a 2a  xecuting Halt..*
6990: 2f 0a 63 61 73 65 20 4f 50 5f 48 61 6c 74 3a 20  /.case OP_Halt: 
69a0: 7b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 3d  {.  if( pOp->p1=
69b0: 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 70 2d  =SQLITE_OK && p-
69c0: 3e 70 46 72 61 6d 65 20 29 7b 0a 20 20 20 20 2f  >pFrame ){.    /
69d0: 2a 20 48 61 6c 74 20 74 68 65 20 73 75 62 2d 70  * Halt the sub-p
69e0: 72 6f 67 72 61 6d 2e 20 52 65 74 75 72 6e 20 63  rogram. Return c
69f0: 6f 6e 74 72 6f 6c 20 74 6f 20 74 68 65 20 70 61  ontrol to the pa
6a00: 72 65 6e 74 20 66 72 61 6d 65 2e 20 2a 2f 0a 20  rent frame. */. 
6a10: 20 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46     VdbeFrame *pF
6a20: 72 61 6d 65 20 3d 20 70 2d 3e 70 46 72 61 6d 65  rame = p->pFrame
6a30: 3b 0a 20 20 20 20 70 2d 3e 70 46 72 61 6d 65 20  ;.    p->pFrame 
6a40: 3d 20 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e  = pFrame->pParen
6a50: 74 3b 0a 20 20 20 20 70 2d 3e 6e 46 72 61 6d 65  t;.    p->nFrame
6a60: 2d 2d 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  --;.    sqlite3V
6a70: 64 62 65 53 65 74 43 68 61 6e 67 65 73 28 64 62  dbeSetChanges(db
6a80: 2c 20 70 2d 3e 6e 43 68 61 6e 67 65 29 3b 0a 20  , p->nChange);. 
6a90: 20 20 20 70 63 20 3d 20 73 71 6c 69 74 65 33 56     pc = sqlite3V
6aa0: 64 62 65 46 72 61 6d 65 52 65 73 74 6f 72 65 28  dbeFrameRestore(
6ab0: 70 46 72 61 6d 65 29 3b 0a 20 20 20 20 69 66 28  pFrame);.    if(
6ac0: 20 70 4f 70 2d 3e 70 32 3d 3d 4f 45 5f 49 67 6e   pOp->p2==OE_Ign
6ad0: 6f 72 65 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20  ore ){.      /* 
6ae0: 49 6e 73 74 72 75 63 74 69 6f 6e 20 70 63 20 69  Instruction pc i
6af0: 73 20 74 68 65 20 4f 50 5f 50 72 6f 67 72 61 6d  s the OP_Program
6b00: 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68   that invoked th
6b10: 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 0a 20  e sub-program . 
6b20: 20 20 20 20 20 2a 2a 20 63 75 72 72 65 6e 74 6c       ** currentl
6b30: 79 20 62 65 69 6e 67 20 68 61 6c 74 65 64 2e 20  y being halted. 
6b40: 49 66 20 74 68 65 20 70 32 20 69 6e 73 74 72 75  If the p2 instru
6b50: 63 74 69 6f 6e 20 6f 66 20 74 68 69 73 20 4f 50  ction of this OP
6b60: 5f 48 61 6c 74 0a 20 20 20 20 20 20 2a 2a 20 69  _Halt.      ** i
6b70: 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 73 65  nstruction is se
6b80: 74 20 74 6f 20 4f 45 5f 49 67 6e 6f 72 65 2c 20  t to OE_Ignore, 
6b90: 74 68 65 6e 20 74 68 65 20 73 75 62 2d 70 72 6f  then the sub-pro
6ba0: 67 72 61 6d 20 69 73 20 74 68 72 6f 77 69 6e 67  gram is throwing
6bb0: 0a 20 20 20 20 20 20 2a 2a 20 61 6e 20 49 47 4e  .      ** an IGN
6bc0: 4f 52 45 20 65 78 63 65 70 74 69 6f 6e 2e 20 49  ORE exception. I
6bd0: 6e 20 74 68 69 73 20 63 61 73 65 20 6a 75 6d 70  n this case jump
6be0: 20 74 6f 20 74 68 65 20 61 64 64 72 65 73 73 20   to the address 
6bf0: 73 70 65 63 69 66 69 65 64 0a 20 20 20 20 20 20  specified.      
6c00: 2a 2a 20 61 73 20 74 68 65 20 70 32 20 6f 66 20  ** as the p2 of 
6c10: 74 68 65 20 63 61 6c 6c 69 6e 67 20 4f 50 5f 50  the calling OP_P
6c20: 72 6f 67 72 61 6d 2e 20 20 2a 2f 0a 20 20 20 20  rogram.  */.    
6c30: 20 20 70 63 20 3d 20 70 2d 3e 61 4f 70 5b 70 63    pc = p->aOp[pc
6c40: 5d 2e 70 32 2d 31 3b 0a 20 20 20 20 7d 0a 20 20  ].p2-1;.    }.  
6c50: 20 20 61 4f 70 20 3d 20 70 2d 3e 61 4f 70 3b 0a    aOp = p->aOp;.
6c60: 20 20 20 20 61 4d 65 6d 20 3d 20 70 2d 3e 61 4d      aMem = p->aM
6c70: 65 6d 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20  em;.    break;. 
6c80: 20 7d 0a 0a 20 20 70 2d 3e 72 63 20 3d 20 70 4f   }..  p->rc = pO
6c90: 70 2d 3e 70 31 3b 0a 20 20 70 2d 3e 65 72 72 6f  p->p1;.  p->erro
6ca0: 72 41 63 74 69 6f 6e 20 3d 20 28 75 38 29 70 4f  rAction = (u8)pO
6cb0: 70 2d 3e 70 32 3b 0a 20 20 70 2d 3e 70 63 20 3d  p->p2;.  p->pc =
6cc0: 20 70 63 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e   pc;.  if( pOp->
6cd0: 70 34 2e 7a 20 29 7b 0a 20 20 20 20 61 73 73 65  p4.z ){.    asse
6ce0: 72 74 28 20 70 2d 3e 72 63 21 3d 53 51 4c 49 54  rt( p->rc!=SQLIT
6cf0: 45 5f 4f 4b 20 29 3b 0a 20 20 20 20 73 71 6c 69  E_OK );.    sqli
6d00: 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d  te3SetString(&p-
6d10: 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 25  >zErrMsg, db, "%
6d20: 73 22 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a  s", pOp->p4.z);.
6d30: 20 20 20 20 74 65 73 74 63 61 73 65 28 20 73 71      testcase( sq
6d40: 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69  lite3GlobalConfi
6d50: 67 2e 78 4c 6f 67 21 3d 30 20 29 3b 0a 20 20 20  g.xLog!=0 );.   
6d60: 20 73 71 6c 69 74 65 33 5f 6c 6f 67 28 70 4f 70   sqlite3_log(pOp
6d70: 2d 3e 70 31 2c 20 22 61 62 6f 72 74 20 61 74 20  ->p1, "abort at 
6d80: 25 64 20 69 6e 20 5b 25 73 5d 3a 20 25 73 22 2c  %d in [%s]: %s",
6d90: 20 70 63 2c 20 70 2d 3e 7a 53 71 6c 2c 20 70 4f   pc, p->zSql, pO
6da0: 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 7d 65 6c 73  p->p4.z);.  }els
6db0: 65 20 69 66 28 20 70 2d 3e 72 63 20 29 7b 0a 20  e if( p->rc ){. 
6dc0: 20 20 20 74 65 73 74 63 61 73 65 28 20 73 71 6c     testcase( sql
6dd0: 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67  ite3GlobalConfig
6de0: 2e 78 4c 6f 67 21 3d 30 20 29 3b 0a 20 20 20 20  .xLog!=0 );.    
6df0: 73 71 6c 69 74 65 33 5f 6c 6f 67 28 70 4f 70 2d  sqlite3_log(pOp-
6e00: 3e 70 31 2c 20 22 63 6f 6e 73 74 72 61 69 6e 74  >p1, "constraint
6e10: 20 66 61 69 6c 65 64 20 61 74 20 25 64 20 69 6e   failed at %d in
6e20: 20 5b 25 73 5d 22 2c 20 70 63 2c 20 70 2d 3e 7a   [%s]", pc, p->z
6e30: 53 71 6c 29 3b 0a 20 20 7d 0a 20 20 72 63 20 3d  Sql);.  }.  rc =
6e40: 20 73 71 6c 69 74 65 33 56 64 62 65 48 61 6c 74   sqlite3VdbeHalt
6e50: 28 70 29 3b 0a 20 20 61 73 73 65 72 74 28 20 72  (p);.  assert( r
6e60: 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 7c  c==SQLITE_BUSY |
6e70: 7c 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  | rc==SQLITE_OK 
6e80: 7c 7c 20 72 63 3d 3d 53 51 4c 49 54 45 5f 45 52  || rc==SQLITE_ER
6e90: 52 4f 52 20 29 3b 0a 20 20 69 66 28 20 72 63 3d  ROR );.  if( rc=
6ea0: 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a  =SQLITE_BUSY ){.
6eb0: 20 20 20 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d      p->rc = rc =
6ec0: 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20   SQLITE_BUSY;.  
6ed0: 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72  }else{.    asser
6ee0: 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  t( rc==SQLITE_OK
6ef0: 20 7c 7c 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54   || p->rc==SQLIT
6f00: 45 5f 43 4f 4e 53 54 52 41 49 4e 54 20 29 3b 0a  E_CONSTRAINT );.
6f10: 20 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d      assert( rc==
6f20: 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 64 62 2d  SQLITE_OK || db-
6f30: 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3e 30  >nDeferredCons>0
6f40: 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 70 2d 3e   );.    rc = p->
6f50: 72 63 20 3f 20 53 51 4c 49 54 45 5f 45 52 52 4f  rc ? SQLITE_ERRO
6f60: 52 20 3a 20 53 51 4c 49 54 45 5f 44 4f 4e 45 3b  R : SQLITE_DONE;
6f70: 0a 20 20 7d 0a 20 20 67 6f 74 6f 20 76 64 62 65  .  }.  goto vdbe
6f80: 5f 72 65 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a 20 4f  _return;.}../* O
6f90: 70 63 6f 64 65 3a 20 49 6e 74 65 67 65 72 20 50  pcode: Integer P
6fa0: 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
6fb0: 20 54 68 65 20 33 32 2d 62 69 74 20 69 6e 74 65   The 32-bit inte
6fc0: 67 65 72 20 76 61 6c 75 65 20 50 31 20 69 73 20  ger value P1 is 
6fd0: 77 72 69 74 74 65 6e 20 69 6e 74 6f 20 72 65 67  written into reg
6fe0: 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73  ister P2..*/.cas
6ff0: 65 20 4f 50 5f 49 6e 74 65 67 65 72 3a 20 7b 20  e OP_Integer: { 
7000: 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d          /* out2-
7010: 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20  prerelease */.  
7020: 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 4f 70 2d  pOut->u.i = pOp-
7030: 3e 70 31 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  >p1;.  break;.}.
7040: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 74 36  ./* Opcode: Int6
7050: 34 20 2a 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a  4 * P2 * P4 *.**
7060: 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e  .** P4 is a poin
7070: 74 65 72 20 74 6f 20 61 20 36 34 2d 62 69 74 20  ter to a 64-bit 
7080: 69 6e 74 65 67 65 72 20 76 61 6c 75 65 2e 0a 2a  integer value..*
7090: 2a 20 57 72 69 74 65 20 74 68 61 74 20 76 61 6c  * Write that val
70a0: 75 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  ue into register
70b0: 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P2..*/.case OP_
70c0: 49 6e 74 36 34 3a 20 7b 20 20 20 20 20 20 20 20  Int64: {        
70d0: 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65     /* out2-prere
70e0: 6c 65 61 73 65 20 2a 2f 0a 20 20 61 73 73 65 72  lease */.  asser
70f0: 74 28 20 70 4f 70 2d 3e 70 34 2e 70 49 36 34 21  t( pOp->p4.pI64!
7100: 3d 30 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e  =0 );.  pOut->u.
7110: 69 20 3d 20 2a 70 4f 70 2d 3e 70 34 2e 70 49 36  i = *pOp->p4.pI6
7120: 34 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23  4;.  break;.}..#
7130: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
7140: 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e  IT_FLOATING_POIN
7150: 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 61  T./* Opcode: Rea
7160: 6c 20 2a 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a  l * P2 * P4 *.**
7170: 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e  .** P4 is a poin
7180: 74 65 72 20 74 6f 20 61 20 36 34 2d 62 69 74 20  ter to a 64-bit 
7190: 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 76  floating point v
71a0: 61 6c 75 65 2e 0a 2a 2a 20 57 72 69 74 65 20 74  alue..** Write t
71b0: 68 61 74 20 76 61 6c 75 65 20 69 6e 74 6f 20 72  hat value into r
71c0: 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63  egister P2..*/.c
71d0: 61 73 65 20 4f 50 5f 52 65 61 6c 3a 20 7b 20 20  ase OP_Real: {  
71e0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
71f0: 65 20 61 73 20 54 4b 5f 46 4c 4f 41 54 2c 20 6f  e as TK_FLOAT, o
7200: 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a  ut2-prerelease *
7210: 2f 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20  /.  pOut->flags 
7220: 3d 20 4d 45 4d 5f 52 65 61 6c 3b 0a 20 20 61 73  = MEM_Real;.  as
7230: 73 65 72 74 28 20 21 73 71 6c 69 74 65 33 49 73  sert( !sqlite3Is
7240: 4e 61 4e 28 2a 70 4f 70 2d 3e 70 34 2e 70 52 65  NaN(*pOp->p4.pRe
7250: 61 6c 29 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 72  al) );.  pOut->r
7260: 20 3d 20 2a 70 4f 70 2d 3e 70 34 2e 70 52 65 61   = *pOp->p4.pRea
7270: 6c 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65  l;.  break;.}.#e
7280: 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  ndif../* Opcode:
7290: 20 53 74 72 69 6e 67 38 20 2a 20 50 32 20 2a 20   String8 * P2 * 
72a0: 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 70 6f  P4 *.**.** P4 po
72b0: 69 6e 74 73 20 74 6f 20 61 20 6e 75 6c 20 74 65  ints to a nul te
72c0: 72 6d 69 6e 61 74 65 64 20 55 54 46 2d 38 20 73  rminated UTF-8 s
72d0: 74 72 69 6e 67 2e 20 54 68 69 73 20 6f 70 63 6f  tring. This opco
72e0: 64 65 20 69 73 20 74 72 61 6e 73 66 6f 72 6d 65  de is transforme
72f0: 64 20 0a 2a 2a 20 69 6e 74 6f 20 61 6e 20 4f 50  d .** into an OP
7300: 5f 53 74 72 69 6e 67 20 62 65 66 6f 72 65 20 69  _String before i
7310: 74 20 69 73 20 65 78 65 63 75 74 65 64 20 66 6f  t is executed fo
7320: 72 20 74 68 65 20 66 69 72 73 74 20 74 69 6d 65  r the first time
7330: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 74 72  ..*/.case OP_Str
7340: 69 6e 67 38 3a 20 7b 20 20 20 20 20 20 20 20 20  ing8: {         
7350: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 53 54  /* same as TK_ST
7360: 52 49 4e 47 2c 20 6f 75 74 32 2d 70 72 65 72 65  RING, out2-prere
7370: 6c 65 61 73 65 20 2a 2f 0a 20 20 61 73 73 65 72  lease */.  asser
7380: 74 28 20 70 4f 70 2d 3e 70 34 2e 7a 21 3d 30 20  t( pOp->p4.z!=0 
7390: 29 3b 0a 20 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  );.  pOp->opcode
73a0: 20 3d 20 4f 50 5f 53 74 72 69 6e 67 3b 0a 20 20   = OP_String;.  
73b0: 70 4f 70 2d 3e 70 31 20 3d 20 73 71 6c 69 74 65  pOp->p1 = sqlite
73c0: 33 53 74 72 6c 65 6e 33 30 28 70 4f 70 2d 3e 70  3Strlen30(pOp->p
73d0: 34 2e 7a 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53  4.z);..#ifndef S
73e0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36  QLITE_OMIT_UTF16
73f0: 0a 20 20 69 66 28 20 65 6e 63 6f 64 69 6e 67 21  .  if( encoding!
7400: 3d 53 51 4c 49 54 45 5f 55 54 46 38 20 29 7b 0a  =SQLITE_UTF8 ){.
7410: 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
7420: 56 64 62 65 4d 65 6d 53 65 74 53 74 72 28 70 4f  VdbeMemSetStr(pO
7430: 75 74 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 2d  ut, pOp->p4.z, -
7440: 31 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20  1, SQLITE_UTF8, 
7450: 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
7460: 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
7470: 54 45 5f 54 4f 4f 42 49 47 20 29 20 67 6f 74 6f  TE_TOOBIG ) goto
7480: 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 20 20 69 66   too_big;.    if
7490: 28 20 53 51 4c 49 54 45 5f 4f 4b 21 3d 73 71 6c  ( SQLITE_OK!=sql
74a0: 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e  ite3VdbeChangeEn
74b0: 63 6f 64 69 6e 67 28 70 4f 75 74 2c 20 65 6e 63  coding(pOut, enc
74c0: 6f 64 69 6e 67 29 20 29 20 67 6f 74 6f 20 6e 6f  oding) ) goto no
74d0: 5f 6d 65 6d 3b 0a 20 20 20 20 61 73 73 65 72 74  _mem;.    assert
74e0: 28 20 70 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f 63 3d  ( pOut->zMalloc=
74f0: 3d 70 4f 75 74 2d 3e 7a 20 29 3b 0a 20 20 20 20  =pOut->z );.    
7500: 61 73 73 65 72 74 28 20 70 4f 75 74 2d 3e 66 6c  assert( pOut->fl
7510: 61 67 73 20 26 20 4d 45 4d 5f 44 79 6e 20 29 3b  ags & MEM_Dyn );
7520: 0a 20 20 20 20 70 4f 75 74 2d 3e 7a 4d 61 6c 6c  .    pOut->zMall
7530: 6f 63 20 3d 20 30 3b 0a 20 20 20 20 70 4f 75 74  oc = 0;.    pOut
7540: 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 53  ->flags |= MEM_S
7550: 74 61 74 69 63 3b 0a 20 20 20 20 70 4f 75 74 2d  tatic;.    pOut-
7560: 3e 66 6c 61 67 73 20 26 3d 20 7e 4d 45 4d 5f 44  >flags &= ~MEM_D
7570: 79 6e 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d  yn;.    if( pOp-
7580: 3e 70 34 74 79 70 65 3d 3d 50 34 5f 44 59 4e 41  >p4type==P4_DYNA
7590: 4d 49 43 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  MIC ){.      sql
75a0: 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 70  ite3DbFree(db, p
75b0: 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 7d  Op->p4.z);.    }
75c0: 0a 20 20 20 20 70 4f 70 2d 3e 70 34 74 79 70 65  .    pOp->p4type
75d0: 20 3d 20 50 34 5f 44 59 4e 41 4d 49 43 3b 0a 20   = P4_DYNAMIC;. 
75e0: 20 20 20 70 4f 70 2d 3e 70 34 2e 7a 20 3d 20 70     pOp->p4.z = p
75f0: 4f 75 74 2d 3e 7a 3b 0a 20 20 20 20 70 4f 70 2d  Out->z;.    pOp-
7600: 3e 70 31 20 3d 20 70 4f 75 74 2d 3e 6e 3b 0a 20  >p1 = pOut->n;. 
7610: 20 7d 0a 23 65 6e 64 69 66 0a 20 20 69 66 28 20   }.#endif.  if( 
7620: 70 4f 70 2d 3e 70 31 3e 64 62 2d 3e 61 4c 69 6d  pOp->p1>db->aLim
7630: 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f  it[SQLITE_LIMIT_
7640: 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 67  LENGTH] ){.    g
7650: 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d  oto too_big;.  }
7660: 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75  .  /* Fall throu
7670: 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 63  gh to the next c
7680: 61 73 65 2c 20 4f 50 5f 53 74 72 69 6e 67 20 2a  ase, OP_String *
7690: 2f 0a 7d 0a 20 20 0a 2f 2a 20 4f 70 63 6f 64 65  /.}.  ./* Opcode
76a0: 3a 20 53 74 72 69 6e 67 20 50 31 20 50 32 20 2a  : String P1 P2 *
76b0: 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20   P4 *.**.** The 
76c0: 73 74 72 69 6e 67 20 76 61 6c 75 65 20 50 34 20  string value P4 
76d0: 6f 66 20 6c 65 6e 67 74 68 20 50 31 20 28 62 79  of length P1 (by
76e0: 74 65 73 29 20 69 73 20 73 74 6f 72 65 64 20 69  tes) is stored i
76f0: 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  n register P2..*
7700: 2f 0a 63 61 73 65 20 4f 50 5f 53 74 72 69 6e 67  /.case OP_String
7710: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  : {          /* 
7720: 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20  out2-prerelease 
7730: 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  */.  assert( pOp
7740: 2d 3e 70 34 2e 7a 21 3d 30 20 29 3b 0a 20 20 70  ->p4.z!=0 );.  p
7750: 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
7760: 5f 53 74 72 7c 4d 45 4d 5f 53 74 61 74 69 63 7c  _Str|MEM_Static|
7770: 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f 75 74  MEM_Term;.  pOut
7780: 2d 3e 7a 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b  ->z = pOp->p4.z;
7790: 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 70 4f 70  .  pOut->n = pOp
77a0: 2d 3e 70 31 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e  ->p1;.  pOut->en
77b0: 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20  c = encoding;.  
77c0: 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53  UPDATE_MAX_BLOBS
77d0: 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65  IZE(pOut);.  bre
77e0: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
77f0: 3a 20 4e 75 6c 6c 20 2a 20 50 32 20 2a 20 2a 20  : Null * P2 * * 
7800: 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 61 20  *.**.** Write a 
7810: 4e 55 4c 4c 20 69 6e 74 6f 20 72 65 67 69 73 74  NULL into regist
7820: 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f  er P2..*/.case O
7830: 50 5f 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20 20  P_Null: {       
7840: 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72      /* out2-prer
7850: 65 6c 65 61 73 65 20 2a 2f 0a 20 20 70 4f 75 74  elease */.  pOut
7860: 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75  ->flags = MEM_Nu
7870: 6c 6c 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  ll;.  break;.}..
7880: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 6c 6f 62  ./* Opcode: Blob
7890: 20 50 31 20 50 32 20 2a 20 50 34 0a 2a 2a 0a 2a   P1 P2 * P4.**.*
78a0: 2a 20 50 34 20 70 6f 69 6e 74 73 20 74 6f 20 61  * P4 points to a
78b0: 20 62 6c 6f 62 20 6f 66 20 64 61 74 61 20 50 31   blob of data P1
78c0: 20 62 79 74 65 73 20 6c 6f 6e 67 2e 20 20 53 74   bytes long.  St
78d0: 6f 72 65 20 74 68 69 73 0a 2a 2a 20 62 6c 6f 62  ore this.** blob
78e0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e   in register P2.
78f0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 6c 6f 62  .*/.case OP_Blob
7900: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
7910: 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65     /* out2-prere
7920: 6c 65 61 73 65 20 2a 2f 0a 20 20 61 73 73 65 72  lease */.  asser
7930: 74 28 20 70 4f 70 2d 3e 70 31 20 3c 3d 20 53 51  t( pOp->p1 <= SQ
7940: 4c 49 54 45 5f 4d 41 58 5f 4c 45 4e 47 54 48 20  LITE_MAX_LENGTH 
7950: 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  );.  sqlite3Vdbe
7960: 4d 65 6d 53 65 74 53 74 72 28 70 4f 75 74 2c 20  MemSetStr(pOut, 
7970: 70 4f 70 2d 3e 70 34 2e 7a 2c 20 70 4f 70 2d 3e  pOp->p4.z, pOp->
7980: 70 31 2c 20 30 2c 20 30 29 3b 0a 20 20 70 4f 75  p1, 0, 0);.  pOu
7990: 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e  t->enc = encodin
79a0: 67 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f  g;.  UPDATE_MAX_
79b0: 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a  BLOBSIZE(pOut);.
79c0: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
79d0: 70 63 6f 64 65 3a 20 56 61 72 69 61 62 6c 65 20  pcode: Variable 
79e0: 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a  P1 P2 * P4 *.**.
79f0: 2a 2a 20 54 72 61 6e 73 66 65 72 20 74 68 65 20  ** Transfer the 
7a00: 76 61 6c 75 65 73 20 6f 66 20 62 6f 75 6e 64 20  values of bound 
7a10: 70 61 72 61 6d 65 74 65 72 20 50 31 20 69 6e 74  parameter P1 int
7a20: 6f 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a  o register P2.**
7a30: 0a 2a 2a 20 49 66 20 74 68 65 20 70 61 72 61 6d  .** If the param
7a40: 65 74 65 72 20 69 73 20 6e 61 6d 65 64 2c 20 74  eter is named, t
7a50: 68 65 6e 20 69 74 73 20 6e 61 6d 65 20 61 70 70  hen its name app
7a60: 65 61 72 73 20 69 6e 20 50 34 20 61 6e 64 20 50  ears in P4 and P
7a70: 33 3d 3d 31 2e 0a 2a 2a 20 54 68 65 20 50 34 20  3==1..** The P4 
7a80: 76 61 6c 75 65 20 69 73 20 75 73 65 64 20 62 79  value is used by
7a90: 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61   sqlite3_bind_pa
7aa0: 72 61 6d 65 74 65 72 5f 6e 61 6d 65 28 29 2e 0a  rameter_name()..
7ab0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 61 72 69 61  */.case OP_Varia
7ac0: 62 6c 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20  ble: {          
7ad0: 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c    /* out2-prerel
7ae0: 65 61 73 65 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  ease */.  Mem *p
7af0: 56 61 72 3b 20 20 20 20 20 20 20 2f 2a 20 56 61  Var;       /* Va
7b00: 6c 75 65 20 62 65 69 6e 67 20 74 72 61 6e 73 66  lue being transf
7b10: 65 72 72 65 64 20 2a 2f 0a 0a 20 20 61 73 73 65  erred */..  asse
7b20: 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26 26  rt( pOp->p1>0 &&
7b30: 20 70 4f 70 2d 3e 70 31 3c 3d 70 2d 3e 6e 56 61   pOp->p1<=p->nVa
7b40: 72 20 29 3b 0a 20 20 70 56 61 72 20 3d 20 26 70  r );.  pVar = &p
7b50: 2d 3e 61 56 61 72 5b 70 4f 70 2d 3e 70 31 20 2d  ->aVar[pOp->p1 -
7b60: 20 31 5d 3b 0a 20 20 69 66 28 20 73 71 6c 69 74   1];.  if( sqlit
7b70: 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28  e3VdbeMemTooBig(
7b80: 70 56 61 72 29 20 29 7b 0a 20 20 20 20 67 6f 74  pVar) ){.    got
7b90: 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20  o too_big;.  }. 
7ba0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
7bb0: 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c  hallowCopy(pOut,
7bc0: 20 70 56 61 72 2c 20 4d 45 4d 5f 53 74 61 74 69   pVar, MEM_Stati
7bd0: 63 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58  c);.  UPDATE_MAX
7be0: 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b  _BLOBSIZE(pOut);
7bf0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
7c00: 4f 70 63 6f 64 65 3a 20 4d 6f 76 65 20 50 31 20  Opcode: Move P1 
7c10: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
7c20: 4d 6f 76 65 20 74 68 65 20 76 61 6c 75 65 73 20  Move the values 
7c30: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 2e  in register P1..
7c40: 50 31 2b 50 33 2d 31 20 6f 76 65 72 20 69 6e 74  P1+P3-1 over int
7c50: 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72 73 20 50  o.** registers P
7c60: 32 2e 2e 50 32 2b 50 33 2d 31 2e 20 20 52 65 67  2..P2+P3-1.  Reg
7c70: 69 73 74 65 72 73 20 50 31 2e 2e 50 31 2b 50 31  isters P1..P1+P1
7c80: 2d 31 20 61 72 65 0a 2a 2a 20 6c 65 66 74 20 68  -1 are.** left h
7c90: 6f 6c 64 69 6e 67 20 61 20 4e 55 4c 4c 2e 20 20  olding a NULL.  
7ca0: 49 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20 66  It is an error f
7cb0: 6f 72 20 72 65 67 69 73 74 65 72 20 72 61 6e 67  or register rang
7cc0: 65 73 0a 2a 2a 20 50 31 2e 2e 50 31 2b 50 33 2d  es.** P1..P1+P3-
7cd0: 31 20 61 6e 64 20 50 32 2e 2e 50 32 2b 50 33 2d  1 and P2..P2+P3-
7ce0: 31 20 74 6f 20 6f 76 65 72 6c 61 70 2e 0a 2a 2f  1 to overlap..*/
7cf0: 0a 63 61 73 65 20 4f 50 5f 4d 6f 76 65 3a 20 7b  .case OP_Move: {
7d00: 0a 20 20 63 68 61 72 20 2a 7a 4d 61 6c 6c 6f 63  .  char *zMalloc
7d10: 3b 20 20 20 2f 2a 20 48 6f 6c 64 69 6e 67 20 76  ;   /* Holding v
7d20: 61 72 69 61 62 6c 65 20 66 6f 72 20 61 6c 6c 6f  ariable for allo
7d30: 63 61 74 65 64 20 6d 65 6d 6f 72 79 20 2a 2f 0a  cated memory */.
7d40: 20 20 69 6e 74 20 6e 3b 20 20 20 20 20 20 20 20    int n;        
7d50: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
7d60: 72 65 67 69 73 74 65 72 73 20 6c 65 66 74 20 74  registers left t
7d70: 6f 20 63 6f 70 79 20 2a 2f 0a 20 20 69 6e 74 20  o copy */.  int 
7d80: 70 31 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  p1;          /* 
7d90: 52 65 67 69 73 74 65 72 20 74 6f 20 63 6f 70 79  Register to copy
7da0: 20 66 72 6f 6d 20 2a 2f 0a 20 20 69 6e 74 20 70   from */.  int p
7db0: 32 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52  2;          /* R
7dc0: 65 67 69 73 74 65 72 20 74 6f 20 63 6f 70 79 20  egister to copy 
7dd0: 74 6f 20 2a 2f 0a 0a 20 20 6e 20 3d 20 70 4f 70  to */..  n = pOp
7de0: 2d 3e 70 33 3b 0a 20 20 70 31 20 3d 20 70 4f 70  ->p3;.  p1 = pOp
7df0: 2d 3e 70 31 3b 0a 20 20 70 32 20 3d 20 70 4f 70  ->p1;.  p2 = pOp
7e00: 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20  ->p2;.  assert( 
7e10: 6e 3e 30 20 26 26 20 70 31 3e 30 20 26 26 20 70  n>0 && p1>0 && p
7e20: 32 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  2>0 );.  assert(
7e30: 20 70 31 2b 6e 3c 3d 70 32 20 7c 7c 20 70 32 2b   p1+n<=p2 || p2+
7e40: 6e 3c 3d 70 31 20 29 3b 0a 0a 20 20 70 49 6e 31  n<=p1 );..  pIn1
7e50: 20 3d 20 26 61 4d 65 6d 5b 70 31 5d 3b 0a 20 20   = &aMem[p1];.  
7e60: 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 32 5d  pOut = &aMem[p2]
7e70: 3b 0a 20 20 77 68 69 6c 65 28 20 6e 2d 2d 20 29  ;.  while( n-- )
7e80: 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  {.    assert( pO
7e90: 75 74 3c 3d 26 61 4d 65 6d 5b 70 2d 3e 6e 4d 65  ut<=&aMem[p->nMe
7ea0: 6d 5d 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  m] );.    assert
7eb0: 28 20 70 49 6e 31 3c 3d 26 61 4d 65 6d 5b 70 2d  ( pIn1<=&aMem[p-
7ec0: 3e 6e 4d 65 6d 5d 20 29 3b 0a 20 20 20 20 61 73  >nMem] );.    as
7ed0: 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
7ee0: 28 70 49 6e 31 29 20 29 3b 0a 20 20 20 20 6d 65  (pIn1) );.    me
7ef0: 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
7f00: 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 7a 4d 61  , pOut);.    zMa
7f10: 6c 6c 6f 63 20 3d 20 70 4f 75 74 2d 3e 7a 4d 61  lloc = pOut->zMa
7f20: 6c 6c 6f 63 3b 0a 20 20 20 20 70 4f 75 74 2d 3e  lloc;.    pOut->
7f30: 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20 20  zMalloc = 0;.   
7f40: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d   sqlite3VdbeMemM
7f50: 6f 76 65 28 70 4f 75 74 2c 20 70 49 6e 31 29 3b  ove(pOut, pIn1);
7f60: 0a 20 20 20 20 70 49 6e 31 2d 3e 7a 4d 61 6c 6c  .    pIn1->zMall
7f70: 6f 63 20 3d 20 7a 4d 61 6c 6c 6f 63 3b 0a 20 20  oc = zMalloc;.  
7f80: 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
7f90: 28 70 32 2b 2b 2c 20 70 4f 75 74 29 3b 0a 20 20  (p2++, pOut);.  
7fa0: 20 20 70 49 6e 31 2b 2b 3b 0a 20 20 20 20 70 4f    pIn1++;.    pO
7fb0: 75 74 2b 2b 3b 0a 20 20 7d 0a 20 20 62 72 65 61  ut++;.  }.  brea
7fc0: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
7fd0: 20 43 6f 70 79 20 50 31 20 50 32 20 2a 20 2a 20   Copy P1 P2 * * 
7fe0: 2a 0a 2a 2a 0a 2a 2a 20 4d 61 6b 65 20 61 20 63  *.**.** Make a c
7ff0: 6f 70 79 20 6f 66 20 72 65 67 69 73 74 65 72 20  opy of register 
8000: 50 31 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  P1 into register
8010: 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20   P2..**.** This 
8020: 69 6e 73 74 72 75 63 74 69 6f 6e 20 6d 61 6b 65  instruction make
8030: 73 20 61 20 64 65 65 70 20 63 6f 70 79 20 6f 66  s a deep copy of
8040: 20 74 68 65 20 76 61 6c 75 65 2e 20 20 41 20 64   the value.  A d
8050: 75 70 6c 69 63 61 74 65 0a 2a 2a 20 69 73 20 6d  uplicate.** is m
8060: 61 64 65 20 6f 66 20 61 6e 79 20 73 74 72 69 6e  ade of any strin
8070: 67 20 6f 72 20 62 6c 6f 62 20 63 6f 6e 73 74 61  g or blob consta
8080: 6e 74 2e 20 20 53 65 65 20 61 6c 73 6f 20 4f 50  nt.  See also OP
8090: 5f 53 43 6f 70 79 2e 0a 2a 2f 0a 63 61 73 65 20  _SCopy..*/.case 
80a0: 4f 50 5f 43 6f 70 79 3a 20 7b 20 20 20 20 20 20  OP_Copy: {      
80b0: 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 2c 20 6f         /* in1, o
80c0: 75 74 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  ut2 */.  pIn1 = 
80d0: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
80e0: 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
80f0: 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72  Op->p2];.  asser
8100: 74 28 20 70 4f 75 74 21 3d 70 49 6e 31 20 29 3b  t( pOut!=pIn1 );
8110: 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
8120: 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75  mShallowCopy(pOu
8130: 74 2c 20 70 49 6e 31 2c 20 4d 45 4d 5f 45 70 68  t, pIn1, MEM_Eph
8140: 65 6d 29 3b 0a 20 20 44 65 65 70 68 65 6d 65 72  em);.  Deephemer
8150: 61 6c 69 7a 65 28 70 4f 75 74 29 3b 0a 20 20 52  alize(pOut);.  R
8160: 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
8170: 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20 20  p->p2, pOut);.  
8180: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
8190: 6f 64 65 3a 20 53 43 6f 70 79 20 50 31 20 50 32  ode: SCopy P1 P2
81a0: 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4d 61 6b   * * *.**.** Mak
81b0: 65 20 61 20 73 68 61 6c 6c 6f 77 20 63 6f 70 79  e a shallow copy
81c0: 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 31 20   of register P1 
81d0: 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  into register P2
81e0: 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73  ..**.** This ins
81f0: 74 72 75 63 74 69 6f 6e 20 6d 61 6b 65 73 20 61  truction makes a
8200: 20 73 68 61 6c 6c 6f 77 20 63 6f 70 79 20 6f 66   shallow copy of
8210: 20 74 68 65 20 76 61 6c 75 65 2e 20 20 49 66 20   the value.  If 
8220: 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20  the value.** is 
8230: 61 20 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62  a string or blob
8240: 2c 20 74 68 65 6e 20 74 68 65 20 63 6f 70 79 20  , then the copy 
8250: 69 73 20 6f 6e 6c 79 20 61 20 70 6f 69 6e 74 65  is only a pointe
8260: 72 20 74 6f 20 74 68 65 0a 2a 2a 20 6f 72 69 67  r to the.** orig
8270: 69 6e 61 6c 20 61 6e 64 20 68 65 6e 63 65 20 69  inal and hence i
8280: 66 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 63  f the original c
8290: 68 61 6e 67 65 73 20 73 6f 20 77 69 6c 6c 20 74  hanges so will t
82a0: 68 65 20 63 6f 70 79 2e 0a 2a 2a 20 57 6f 72 73  he copy..** Wors
82b0: 65 2c 20 69 66 20 74 68 65 20 6f 72 69 67 69 6e  e, if the origin
82c0: 61 6c 20 69 73 20 64 65 61 6c 6c 6f 63 61 74 65  al is deallocate
82d0: 64 2c 20 74 68 65 20 63 6f 70 79 20 62 65 63 6f  d, the copy beco
82e0: 6d 65 73 20 69 6e 76 61 6c 69 64 2e 0a 2a 2a 20  mes invalid..** 
82f0: 54 68 75 73 20 74 68 65 20 70 72 6f 67 72 61 6d  Thus the program
8300: 20 6d 75 73 74 20 67 75 61 72 61 6e 74 65 65 20   must guarantee 
8310: 74 68 61 74 20 74 68 65 20 6f 72 69 67 69 6e 61  that the origina
8320: 6c 20 77 69 6c 6c 20 6e 6f 74 20 63 68 61 6e 67  l will not chang
8330: 65 0a 2a 2a 20 64 75 72 69 6e 67 20 74 68 65 20  e.** during the 
8340: 6c 69 66 65 74 69 6d 65 20 6f 66 20 74 68 65 20  lifetime of the 
8350: 63 6f 70 79 2e 20 20 55 73 65 20 4f 50 5f 43 6f  copy.  Use OP_Co
8360: 70 79 20 74 6f 20 6d 61 6b 65 20 61 20 63 6f 6d  py to make a com
8370: 70 6c 65 74 65 0a 2a 2a 20 63 6f 70 79 2e 0a 2a  plete.** copy..*
8380: 2f 0a 63 61 73 65 20 4f 50 5f 53 43 6f 70 79 3a  /.case OP_SCopy:
8390: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
83a0: 20 69 6e 31 2c 20 6f 75 74 32 20 2a 2f 0a 20 20   in1, out2 */.  
83b0: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
83c0: 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20  ->p1];.  pOut = 
83d0: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
83e0: 20 20 61 73 73 65 72 74 28 20 70 4f 75 74 21 3d    assert( pOut!=
83f0: 70 49 6e 31 20 29 3b 0a 20 20 73 71 6c 69 74 65  pIn1 );.  sqlite
8400: 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43  3VdbeMemShallowC
8410: 6f 70 79 28 70 4f 75 74 2c 20 70 49 6e 31 2c 20  opy(pOut, pIn1, 
8420: 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a 23 69 66 64  MEM_Ephem);.#ifd
8430: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
8440: 20 20 69 66 28 20 70 4f 75 74 2d 3e 70 53 63 6f    if( pOut->pSco
8450: 70 79 46 72 6f 6d 3d 3d 30 20 29 20 70 4f 75 74  pyFrom==0 ) pOut
8460: 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 20 3d 20 70  ->pScopyFrom = p
8470: 49 6e 31 3b 0a 23 65 6e 64 69 66 0a 20 20 52 45  In1;.#endif.  RE
8480: 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
8490: 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20 20 62  ->p2, pOut);.  b
84a0: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
84b0: 64 65 3a 20 52 65 73 75 6c 74 52 6f 77 20 50 31  de: ResultRow P1
84c0: 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
84d0: 54 68 65 20 72 65 67 69 73 74 65 72 73 20 50 31  The registers P1
84e0: 20 74 68 72 6f 75 67 68 20 50 31 2b 50 32 2d 31   through P1+P2-1
84f0: 20 63 6f 6e 74 61 69 6e 20 61 20 73 69 6e 67 6c   contain a singl
8500: 65 20 72 6f 77 20 6f 66 0a 2a 2a 20 72 65 73 75  e row of.** resu
8510: 6c 74 73 2e 20 54 68 69 73 20 6f 70 63 6f 64 65  lts. This opcode
8520: 20 63 61 75 73 65 73 20 74 68 65 20 73 71 6c 69   causes the sqli
8530: 74 65 33 5f 73 74 65 70 28 29 20 63 61 6c 6c 20  te3_step() call 
8540: 74 6f 20 74 65 72 6d 69 6e 61 74 65 0a 2a 2a 20  to terminate.** 
8550: 77 69 74 68 20 61 6e 20 53 51 4c 49 54 45 5f 52  with an SQLITE_R
8560: 4f 57 20 72 65 74 75 72 6e 20 63 6f 64 65 20 61  OW return code a
8570: 6e 64 20 69 74 20 73 65 74 73 20 75 70 20 74 68  nd it sets up th
8580: 65 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 0a 2a  e sqlite3_stmt.*
8590: 2a 20 73 74 72 75 63 74 75 72 65 20 74 6f 20 70  * structure to p
85a0: 72 6f 76 69 64 65 20 61 63 63 65 73 73 20 74 6f  rovide access to
85b0: 20 74 68 65 20 74 6f 70 20 50 31 20 76 61 6c 75   the top P1 valu
85c0: 65 73 20 61 73 20 74 68 65 20 72 65 73 75 6c 74  es as the result
85d0: 0a 2a 2a 20 72 6f 77 2e 0a 2a 2f 0a 63 61 73 65  .** row..*/.case
85e0: 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 3a 20 7b   OP_ResultRow: {
85f0: 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20  .  Mem *pMem;.  
8600: 69 6e 74 20 69 3b 0a 20 20 61 73 73 65 72 74 28  int i;.  assert(
8610: 20 70 2d 3e 6e 52 65 73 43 6f 6c 75 6d 6e 3d 3d   p->nResColumn==
8620: 70 4f 70 2d 3e 70 32 20 29 3b 0a 20 20 61 73 73  pOp->p2 );.  ass
8630: 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 29  ert( pOp->p1>0 )
8640: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
8650: 3e 70 31 2b 70 4f 70 2d 3e 70 32 3c 3d 70 2d 3e  >p1+pOp->p2<=p->
8660: 6e 4d 65 6d 2b 31 20 29 3b 0a 0a 20 20 2f 2a 20  nMem+1 );..  /* 
8670: 49 66 20 74 68 69 73 20 73 74 61 74 65 6d 65 6e  If this statemen
8680: 74 20 68 61 73 20 76 69 6f 6c 61 74 65 64 20 69  t has violated i
8690: 6d 6d 65 64 69 61 74 65 20 66 6f 72 65 69 67 6e  mmediate foreign
86a0: 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73   key constraints
86b0: 2c 20 64 6f 0a 20 20 2a 2a 20 6e 6f 74 20 72 65  , do.  ** not re
86c0: 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72 20  turn the number 
86d0: 6f 66 20 72 6f 77 73 20 6d 6f 64 69 66 69 65 64  of rows modified
86e0: 2e 20 41 6e 64 20 64 6f 20 6e 6f 74 20 52 45 4c  . And do not REL
86f0: 45 41 53 45 20 74 68 65 20 73 74 61 74 65 6d 65  EASE the stateme
8700: 6e 74 0a 20 20 2a 2a 20 74 72 61 6e 73 61 63 74  nt.  ** transact
8710: 69 6f 6e 2e 20 49 74 20 6e 65 65 64 73 20 74 6f  ion. It needs to
8720: 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e   be rolled back.
8730: 20 20 2a 2f 0a 20 20 69 66 28 20 53 51 4c 49 54    */.  if( SQLIT
8740: 45 5f 4f 4b 21 3d 28 72 63 20 3d 20 73 71 6c 69  E_OK!=(rc = sqli
8750: 74 65 33 56 64 62 65 43 68 65 63 6b 46 6b 28 70  te3VdbeCheckFk(p
8760: 2c 20 30 29 29 20 29 7b 0a 20 20 20 20 61 73 73  , 0)) ){.    ass
8770: 65 72 74 28 20 64 62 2d 3e 66 6c 61 67 73 26 53  ert( db->flags&S
8780: 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20  QLITE_CountRows 
8790: 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
87a0: 2d 3e 75 73 65 73 53 74 6d 74 4a 6f 75 72 6e 61  ->usesStmtJourna
87b0: 6c 20 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a  l );.    break;.
87c0: 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65    }..  /* If the
87d0: 20 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77   SQLITE_CountRow
87e0: 73 20 66 6c 61 67 20 69 73 20 73 65 74 20 69 6e  s flag is set in
87f0: 20 73 71 6c 69 74 65 33 2e 66 6c 61 67 73 20 6d   sqlite3.flags m
8800: 61 73 6b 2c 20 74 68 65 6e 20 0a 20 20 2a 2a 20  ask, then .  ** 
8810: 44 4d 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69  DML statements i
8820: 6e 76 6f 6b 65 20 74 68 69 73 20 6f 70 63 6f 64  nvoke this opcod
8830: 65 20 74 6f 20 72 65 74 75 72 6e 20 74 68 65 20  e to return the 
8840: 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 0a  number of rows .
8850: 20 20 2a 2a 20 6d 6f 64 69 66 69 65 64 20 74 6f    ** modified to
8860: 20 74 68 65 20 75 73 65 72 2e 20 54 68 69 73 20   the user. This 
8870: 69 73 20 74 68 65 20 6f 6e 6c 79 20 77 61 79 20  is the only way 
8880: 74 68 61 74 20 61 20 56 4d 20 74 68 61 74 0a 20  that a VM that. 
8890: 20 2a 2a 20 6f 70 65 6e 73 20 61 20 73 74 61 74   ** opens a stat
88a0: 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  ement transactio
88b0: 6e 20 6d 61 79 20 69 6e 76 6f 6b 65 20 74 68 69  n may invoke thi
88c0: 73 20 6f 70 63 6f 64 65 2e 0a 20 20 2a 2a 0a 20  s opcode..  **. 
88d0: 20 2a 2a 20 49 6e 20 63 61 73 65 20 74 68 69 73   ** In case this
88e0: 20 69 73 20 73 75 63 68 20 61 20 73 74 61 74 65   is such a state
88f0: 6d 65 6e 74 2c 20 63 6c 6f 73 65 20 61 6e 79 20  ment, close any 
8900: 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61  statement transa
8910: 63 74 69 6f 6e 0a 20 20 2a 2a 20 6f 70 65 6e 65  ction.  ** opene
8920: 64 20 62 79 20 74 68 69 73 20 56 4d 20 62 65 66  d by this VM bef
8930: 6f 72 65 20 72 65 74 75 72 6e 69 6e 67 20 63 6f  ore returning co
8940: 6e 74 72 6f 6c 20 74 6f 20 74 68 65 20 75 73 65  ntrol to the use
8950: 72 2e 20 54 68 69 73 20 69 73 20 74 6f 0a 20 20  r. This is to.  
8960: 2a 2a 20 65 6e 73 75 72 65 20 74 68 61 74 20 73  ** ensure that s
8970: 74 61 74 65 6d 65 6e 74 2d 74 72 61 6e 73 61 63  tatement-transac
8980: 74 69 6f 6e 73 20 61 72 65 20 61 6c 77 61 79 73  tions are always
8990: 20 6e 65 73 74 65 64 2c 20 6e 6f 74 20 6f 76 65   nested, not ove
89a0: 72 6c 61 70 70 69 6e 67 2e 0a 20 20 2a 2a 20 49  rlapping..  ** I
89b0: 66 20 74 68 65 20 6f 70 65 6e 20 73 74 61 74 65  f the open state
89c0: 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74 69 6f 6e  ment-transaction
89d0: 20 69 73 20 6e 6f 74 20 63 6c 6f 73 65 64 20 68   is not closed h
89e0: 65 72 65 2c 20 74 68 65 6e 20 74 68 65 20 75 73  ere, then the us
89f0: 65 72 0a 20 20 2a 2a 20 6d 61 79 20 73 74 65 70  er.  ** may step
8a00: 20 61 6e 6f 74 68 65 72 20 56 4d 20 74 68 61 74   another VM that
8a10: 20 6f 70 65 6e 73 20 69 74 73 20 6f 77 6e 20 73   opens its own s
8a20: 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63  tatement transac
8a30: 74 69 6f 6e 2e 20 54 68 69 73 0a 20 20 2a 2a 20  tion. This.  ** 
8a40: 6d 61 79 20 6c 65 61 64 20 74 6f 20 6f 76 65 72  may lead to over
8a50: 6c 61 70 70 69 6e 67 20 73 74 61 74 65 6d 65 6e  lapping statemen
8a60: 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 2e 0a  t transactions..
8a70: 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 73 74    **.  ** The st
8a80: 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74  atement transact
8a90: 69 6f 6e 20 69 73 20 6e 65 76 65 72 20 61 20 74  ion is never a t
8aa0: 6f 70 2d 6c 65 76 65 6c 20 74 72 61 6e 73 61 63  op-level transac
8ab0: 74 69 6f 6e 2e 20 20 48 65 6e 63 65 0a 20 20 2a  tion.  Hence.  *
8ac0: 2a 20 74 68 65 20 52 45 4c 45 41 53 45 20 63 61  * the RELEASE ca
8ad0: 6c 6c 20 62 65 6c 6f 77 20 63 61 6e 20 6e 65 76  ll below can nev
8ae0: 65 72 20 66 61 69 6c 2e 0a 20 20 2a 2f 0a 20 20  er fail..  */.  
8af0: 61 73 73 65 72 74 28 20 70 2d 3e 69 53 74 61 74  assert( p->iStat
8b00: 65 6d 65 6e 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e  ement==0 || db->
8b10: 66 6c 61 67 73 26 53 51 4c 49 54 45 5f 43 6f 75  flags&SQLITE_Cou
8b20: 6e 74 52 6f 77 73 20 29 3b 0a 20 20 72 63 20 3d  ntRows );.  rc =
8b30: 20 73 71 6c 69 74 65 33 56 64 62 65 43 6c 6f 73   sqlite3VdbeClos
8b40: 65 53 74 61 74 65 6d 65 6e 74 28 70 2c 20 53 41  eStatement(p, SA
8b50: 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 29  VEPOINT_RELEASE)
8b60: 3b 0a 20 20 69 66 28 20 4e 45 56 45 52 28 72 63  ;.  if( NEVER(rc
8b70: 21 3d 53 51 4c 49 54 45 5f 4f 4b 29 20 29 7b 0a  !=SQLITE_OK) ){.
8b80: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a      break;.  }..
8b90: 20 20 2f 2a 20 49 6e 76 61 6c 69 64 61 74 65 20    /* Invalidate 
8ba0: 61 6c 6c 20 65 70 68 65 6d 65 72 61 6c 20 63 75  all ephemeral cu
8bb0: 72 73 6f 72 20 72 6f 77 20 63 61 63 68 65 73 20  rsor row caches 
8bc0: 2a 2f 0a 20 20 70 2d 3e 63 61 63 68 65 43 74 72  */.  p->cacheCtr
8bd0: 20 3d 20 28 70 2d 3e 63 61 63 68 65 43 74 72 20   = (p->cacheCtr 
8be0: 2b 20 32 29 7c 31 3b 0a 0a 20 20 2f 2a 20 4d 61  + 2)|1;..  /* Ma
8bf0: 6b 65 20 73 75 72 65 20 74 68 65 20 72 65 73 75  ke sure the resu
8c00: 6c 74 73 20 6f 66 20 74 68 65 20 63 75 72 72 65  lts of the curre
8c10: 6e 74 20 72 6f 77 20 61 72 65 20 5c 30 30 30 20  nt row are \000 
8c20: 74 65 72 6d 69 6e 61 74 65 64 0a 20 20 2a 2a 20  terminated.  ** 
8c30: 61 6e 64 20 68 61 76 65 20 61 6e 20 61 73 73 69  and have an assi
8c40: 67 6e 65 64 20 74 79 70 65 2e 20 20 54 68 65 20  gned type.  The 
8c50: 72 65 73 75 6c 74 73 20 61 72 65 20 64 65 2d 65  results are de-e
8c60: 70 68 65 6d 65 72 61 6c 69 7a 65 64 20 61 73 0a  phemeralized as.
8c70: 20 20 2a 2a 20 61 73 20 73 69 64 65 20 65 66 66    ** as side eff
8c80: 65 63 74 2e 0a 20 20 2a 2f 0a 20 20 70 4d 65 6d  ect..  */.  pMem
8c90: 20 3d 20 70 2d 3e 70 52 65 73 75 6c 74 53 65 74   = p->pResultSet
8ca0: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
8cb0: 5d 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  ];.  for(i=0; i<
8cc0: 70 4f 70 2d 3e 70 32 3b 20 69 2b 2b 29 7b 0a 20  pOp->p2; i++){. 
8cd0: 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
8ce0: 56 61 6c 69 64 28 26 70 4d 65 6d 5b 69 5d 29 20  Valid(&pMem[i]) 
8cf0: 29 3b 0a 20 20 20 20 44 65 65 70 68 65 6d 65 72  );.    Deephemer
8d00: 61 6c 69 7a 65 28 26 70 4d 65 6d 5b 69 5d 29 3b  alize(&pMem[i]);
8d10: 0a 20 20 20 20 61 73 73 65 72 74 28 20 28 70 4d  .    assert( (pM
8d20: 65 6d 5b 69 5d 2e 66 6c 61 67 73 20 26 20 4d 45  em[i].flags & ME
8d30: 4d 5f 45 70 68 65 6d 29 3d 3d 30 0a 20 20 20 20  M_Ephem)==0.    
8d40: 20 20 20 20 20 20 20 20 7c 7c 20 28 70 4d 65 6d          || (pMem
8d50: 5b 69 5d 2e 66 6c 61 67 73 20 26 20 28 4d 45 4d  [i].flags & (MEM
8d60: 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29 3d  _Str|MEM_Blob))=
8d70: 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  =0 );.    sqlite
8d80: 33 56 64 62 65 4d 65 6d 4e 75 6c 54 65 72 6d 69  3VdbeMemNulTermi
8d90: 6e 61 74 65 28 26 70 4d 65 6d 5b 69 5d 29 3b 0a  nate(&pMem[i]);.
8da0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
8db0: 65 6d 53 74 6f 72 65 54 79 70 65 28 26 70 4d 65  emStoreType(&pMe
8dc0: 6d 5b 69 5d 29 3b 0a 20 20 20 20 52 45 47 49 53  m[i]);.    REGIS
8dd0: 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
8de0: 31 2b 69 2c 20 26 70 4d 65 6d 5b 69 5d 29 3b 0a  1+i, &pMem[i]);.
8df0: 20 20 7d 0a 20 20 69 66 28 20 64 62 2d 3e 6d 61    }.  if( db->ma
8e00: 6c 6c 6f 63 46 61 69 6c 65 64 20 29 20 67 6f 74  llocFailed ) got
8e10: 6f 20 6e 6f 5f 6d 65 6d 3b 0a 0a 20 20 2f 2a 20  o no_mem;..  /* 
8e20: 52 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 52 4f  Return SQLITE_RO
8e30: 57 0a 20 20 2a 2f 0a 20 20 70 2d 3e 70 63 20 3d  W.  */.  p->pc =
8e40: 20 70 63 20 2b 20 31 3b 0a 20 20 72 63 20 3d 20   pc + 1;.  rc = 
8e50: 53 51 4c 49 54 45 5f 52 4f 57 3b 0a 20 20 67 6f  SQLITE_ROW;.  go
8e60: 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a  to vdbe_return;.
8e70: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f  }../* Opcode: Co
8e80: 6e 63 61 74 20 50 31 20 50 32 20 50 33 20 2a 20  ncat P1 P2 P3 * 
8e90: 2a 0a 2a 2a 0a 2a 2a 20 41 64 64 20 74 68 65 20  *.**.** Add the 
8ea0: 74 65 78 74 20 69 6e 20 72 65 67 69 73 74 65 72  text in register
8eb0: 20 50 31 20 6f 6e 74 6f 20 74 68 65 20 65 6e 64   P1 onto the end
8ec0: 20 6f 66 20 74 68 65 20 74 65 78 74 20 69 6e 0a   of the text in.
8ed0: 2a 2a 20 72 65 67 69 73 74 65 72 20 50 32 20 61  ** register P2 a
8ee0: 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73  nd store the res
8ef0: 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ult in register 
8f00: 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  P3..** If either
8f10: 20 74 68 65 20 50 31 20 6f 72 20 50 32 20 74 65   the P1 or P2 te
8f20: 78 74 20 61 72 65 20 4e 55 4c 4c 20 74 68 65 6e  xt are NULL then
8f30: 20 73 74 6f 72 65 20 4e 55 4c 4c 20 69 6e 20 50   store NULL in P
8f40: 33 2e 0a 2a 2a 0a 2a 2a 20 20 20 50 33 20 3d 20  3..**.**   P3 = 
8f50: 50 32 20 7c 7c 20 50 31 0a 2a 2a 0a 2a 2a 20 49  P2 || P1.**.** I
8f60: 74 20 69 73 20 69 6c 6c 65 67 61 6c 20 66 6f 72  t is illegal for
8f70: 20 50 31 20 61 6e 64 20 50 33 20 74 6f 20 62 65   P1 and P3 to be
8f80: 20 74 68 65 20 73 61 6d 65 20 72 65 67 69 73 74   the same regist
8f90: 65 72 2e 20 53 6f 6d 65 74 69 6d 65 73 2c 0a 2a  er. Sometimes,.*
8fa0: 2a 20 69 66 20 50 33 20 69 73 20 74 68 65 20 73  * if P3 is the s
8fb0: 61 6d 65 20 72 65 67 69 73 74 65 72 20 61 73 20  ame register as 
8fc0: 50 32 2c 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e  P2, the implemen
8fd0: 74 61 74 69 6f 6e 20 69 73 20 61 62 6c 65 0a 2a  tation is able.*
8fe0: 2a 20 74 6f 20 61 76 6f 69 64 20 61 20 6d 65 6d  * to avoid a mem
8ff0: 63 70 79 28 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f  cpy()..*/.case O
9000: 50 5f 43 6f 6e 63 61 74 3a 20 7b 20 20 20 20 20  P_Concat: {     
9010: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
9020: 20 54 4b 5f 43 4f 4e 43 41 54 2c 20 69 6e 31 2c   TK_CONCAT, in1,
9030: 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20   in2, out3 */.  
9040: 69 36 34 20 6e 42 79 74 65 3b 0a 0a 20 20 70 49  i64 nByte;..  pI
9050: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
9060: 70 31 5d 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61  p1];.  pIn2 = &a
9070: 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
9080: 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
9090: 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p3];.  assert(
90a0: 20 70 49 6e 31 21 3d 70 4f 75 74 20 29 3b 0a 20   pIn1!=pOut );. 
90b0: 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67   if( (pIn1->flag
90c0: 73 20 7c 20 70 49 6e 32 2d 3e 66 6c 61 67 73 29  s | pIn2->flags)
90d0: 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20   & MEM_Null ){. 
90e0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
90f0: 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a  mSetNull(pOut);.
9100: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20      break;.  }. 
9110: 20 69 66 28 20 45 78 70 61 6e 64 42 6c 6f 62 28   if( ExpandBlob(
9120: 70 49 6e 31 29 20 7c 7c 20 45 78 70 61 6e 64 42  pIn1) || ExpandB
9130: 6c 6f 62 28 70 49 6e 32 29 20 29 20 67 6f 74 6f  lob(pIn2) ) goto
9140: 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 53 74 72 69 6e   no_mem;.  Strin
9150: 67 69 66 79 28 70 49 6e 31 2c 20 65 6e 63 6f 64  gify(pIn1, encod
9160: 69 6e 67 29 3b 0a 20 20 53 74 72 69 6e 67 69 66  ing);.  Stringif
9170: 79 28 70 49 6e 32 2c 20 65 6e 63 6f 64 69 6e 67  y(pIn2, encoding
9180: 29 3b 0a 20 20 6e 42 79 74 65 20 3d 20 70 49 6e  );.  nByte = pIn
9190: 31 2d 3e 6e 20 2b 20 70 49 6e 32 2d 3e 6e 3b 0a  1->n + pIn2->n;.
91a0: 20 20 69 66 28 20 6e 42 79 74 65 3e 64 62 2d 3e    if( nByte>db->
91b0: 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49  aLimit[SQLITE_LI
91c0: 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20  MIT_LENGTH] ){. 
91d0: 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b     goto too_big;
91e0: 0a 20 20 7d 0a 20 20 4d 65 6d 53 65 74 54 79 70  .  }.  MemSetTyp
91f0: 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f  eFlag(pOut, MEM_
9200: 53 74 72 29 3b 0a 20 20 69 66 28 20 73 71 6c 69  Str);.  if( sqli
9210: 74 65 33 56 64 62 65 4d 65 6d 47 72 6f 77 28 70  te3VdbeMemGrow(p
9220: 4f 75 74 2c 20 28 69 6e 74 29 6e 42 79 74 65 2b  Out, (int)nByte+
9230: 32 2c 20 70 4f 75 74 3d 3d 70 49 6e 32 29 20 29  2, pOut==pIn2) )
9240: 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65  {.    goto no_me
9250: 6d 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 75  m;.  }.  if( pOu
9260: 74 21 3d 70 49 6e 32 20 29 7b 0a 20 20 20 20 6d  t!=pIn2 ){.    m
9270: 65 6d 63 70 79 28 70 4f 75 74 2d 3e 7a 2c 20 70  emcpy(pOut->z, p
9280: 49 6e 32 2d 3e 7a 2c 20 70 49 6e 32 2d 3e 6e 29  In2->z, pIn2->n)
9290: 3b 0a 20 20 7d 0a 20 20 6d 65 6d 63 70 79 28 26  ;.  }.  memcpy(&
92a0: 70 4f 75 74 2d 3e 7a 5b 70 49 6e 32 2d 3e 6e 5d  pOut->z[pIn2->n]
92b0: 2c 20 70 49 6e 31 2d 3e 7a 2c 20 70 49 6e 31 2d  , pIn1->z, pIn1-
92c0: 3e 6e 29 3b 0a 20 20 70 4f 75 74 2d 3e 7a 5b 6e  >n);.  pOut->z[n
92d0: 42 79 74 65 5d 20 3d 20 30 3b 0a 20 20 70 4f 75  Byte] = 0;.  pOu
92e0: 74 2d 3e 7a 5b 6e 42 79 74 65 2b 31 5d 20 3d 20  t->z[nByte+1] = 
92f0: 30 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  0;.  pOut->flags
9300: 20 7c 3d 20 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20   |= MEM_Term;.  
9310: 70 4f 75 74 2d 3e 6e 20 3d 20 28 69 6e 74 29 6e  pOut->n = (int)n
9320: 42 79 74 65 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e  Byte;.  pOut->en
9330: 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20  c = encoding;.  
9340: 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53  UPDATE_MAX_BLOBS
9350: 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65  IZE(pOut);.  bre
9360: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
9370: 3a 20 41 64 64 20 50 31 20 50 32 20 50 33 20 2a  : Add P1 P2 P3 *
9380: 20 2a 0a 2a 2a 0a 2a 2a 20 41 64 64 20 74 68 65   *.**.** Add the
9390: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
93a0: 65 72 20 50 31 20 74 6f 20 74 68 65 20 76 61 6c  er P1 to the val
93b0: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
93c0: 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20 74  2.** and store t
93d0: 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67  he result in reg
93e0: 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20  ister P3..** If 
93f0: 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20  either input is 
9400: 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74  NULL, the result
9410: 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20   is NULL..*/./* 
9420: 4f 70 63 6f 64 65 3a 20 4d 75 6c 74 69 70 6c 79  Opcode: Multiply
9430: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
9440: 0a 2a 2a 0a 2a 2a 20 4d 75 6c 74 69 70 6c 79 20  .**.** Multiply 
9450: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
9460: 69 73 74 65 72 20 50 31 20 62 79 20 74 68 65 20  ister P1 by the 
9470: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
9480: 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72  r P2.** and stor
9490: 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20  e the result in 
94a0: 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20  register P3..** 
94b0: 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20  If either input 
94c0: 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73  is NULL, the res
94d0: 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a  ult is NULL..*/.
94e0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 75 62 74 72  /* Opcode: Subtr
94f0: 61 63 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a  act P1 P2 P3 * *
9500: 0a 2a 2a 0a 2a 2a 20 53 75 62 74 72 61 63 74 20  .**.** Subtract 
9510: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
9520: 69 73 74 65 72 20 50 31 20 66 72 6f 6d 20 74 68  ister P1 from th
9530: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
9540: 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74  ter P2.** and st
9550: 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69  ore the result i
9560: 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  n register P3..*
9570: 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75  * If either inpu
9580: 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72  t is NULL, the r
9590: 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a  esult is NULL..*
95a0: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 69 76  /./* Opcode: Div
95b0: 69 64 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a  ide P1 P2 P3 * *
95c0: 0a 2a 2a 0a 2a 2a 20 44 69 76 69 64 65 20 74 68  .**.** Divide th
95d0: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
95e0: 74 65 72 20 50 31 20 62 79 20 74 68 65 20 76 61  ter P1 by the va
95f0: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
9600: 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20  P2.** and store 
9610: 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65  the result in re
9620: 67 69 73 74 65 72 20 50 33 20 28 50 33 3d 50 32  gister P3 (P3=P2
9630: 2f 50 31 29 2e 20 49 66 20 74 68 65 20 76 61 6c  /P1). If the val
9640: 75 65 20 69 6e 20 0a 2a 2a 20 72 65 67 69 73 74  ue in .** regist
9650: 65 72 20 50 31 20 69 73 20 7a 65 72 6f 2c 20 74  er P1 is zero, t
9660: 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69  hen the result i
9670: 73 20 4e 55 4c 4c 2e 20 49 66 20 65 69 74 68 65  s NULL. If eithe
9680: 72 20 69 6e 70 75 74 20 69 73 20 0a 2a 2a 20 4e  r input is .** N
9690: 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20  ULL, the result 
96a0: 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f  is NULL..*/./* O
96b0: 70 63 6f 64 65 3a 20 52 65 6d 61 69 6e 64 65 72  pcode: Remainder
96c0: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
96d0: 0a 2a 2a 20 43 6f 6d 70 75 74 65 20 74 68 65 20  .** Compute the 
96e0: 72 65 6d 61 69 6e 64 65 72 20 61 66 74 65 72 20  remainder after 
96f0: 69 6e 74 65 67 65 72 20 64 69 76 69 73 69 6f 6e  integer division
9700: 20 6f 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e   of the value in
9710: 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31 20  .** register P1 
9720: 62 79 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  by the value in 
9730: 72 65 67 69 73 74 65 72 20 50 32 20 61 6e 64 20  register P2 and 
9740: 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74  store the result
9750: 20 69 6e 20 50 33 2e 20 0a 2a 2a 20 49 66 20 74   in P3. .** If t
9760: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
9770: 73 74 65 72 20 50 32 20 69 73 20 7a 65 72 6f 20  ster P2 is zero 
9780: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
9790: 4c 4c 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  LL..** If either
97a0: 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c   operand is NULL
97b0: 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  , the result is 
97c0: 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  NULL..*/.case OP
97d0: 5f 41 64 64 3a 20 20 20 20 20 20 20 20 20 20 20  _Add:           
97e0: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
97f0: 61 73 20 54 4b 5f 50 4c 55 53 2c 20 69 6e 31 2c  as TK_PLUS, in1,
9800: 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61   in2, out3 */.ca
9810: 73 65 20 4f 50 5f 53 75 62 74 72 61 63 74 3a 20  se OP_Subtract: 
9820: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
9830: 73 61 6d 65 20 61 73 20 54 4b 5f 4d 49 4e 55 53  same as TK_MINUS
9840: 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33  , in1, in2, out3
9850: 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 75 6c 74   */.case OP_Mult
9860: 69 70 6c 79 3a 20 20 20 20 20 20 20 20 20 20 20  iply:           
9870: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
9880: 5f 53 54 41 52 2c 20 69 6e 31 2c 20 69 6e 32 2c  _STAR, in1, in2,
9890: 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50   out3 */.case OP
98a0: 5f 44 69 76 69 64 65 3a 20 20 20 20 20 20 20 20  _Divide:        
98b0: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
98c0: 61 73 20 54 4b 5f 53 4c 41 53 48 2c 20 69 6e 31  as TK_SLASH, in1
98d0: 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63  , in2, out3 */.c
98e0: 61 73 65 20 4f 50 5f 52 65 6d 61 69 6e 64 65 72  ase OP_Remainder
98f0: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  : {           /*
9900: 20 73 61 6d 65 20 61 73 20 54 4b 5f 52 45 4d 2c   same as TK_REM,
9910: 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20   in1, in2, out3 
9920: 2a 2f 0a 20 20 69 6e 74 20 66 6c 61 67 73 3b 20  */.  int flags; 
9930: 20 20 20 20 20 2f 2a 20 43 6f 6d 62 69 6e 65 64       /* Combined
9940: 20 4d 45 4d 5f 2a 20 66 6c 61 67 73 20 66 72 6f   MEM_* flags fro
9950: 6d 20 62 6f 74 68 20 69 6e 70 75 74 73 20 2a 2f  m both inputs */
9960: 0a 20 20 69 36 34 20 69 41 3b 20 20 20 20 20 20  .  i64 iA;      
9970: 20 20 20 2f 2a 20 49 6e 74 65 67 65 72 20 76 61     /* Integer va
9980: 6c 75 65 20 6f 66 20 6c 65 66 74 20 6f 70 65 72  lue of left oper
9990: 61 6e 64 20 2a 2f 0a 20 20 69 36 34 20 69 42 3b  and */.  i64 iB;
99a0: 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 74 65           /* Inte
99b0: 67 65 72 20 76 61 6c 75 65 20 6f 66 20 72 69 67  ger value of rig
99c0: 68 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20  ht operand */.  
99d0: 64 6f 75 62 6c 65 20 72 41 3b 20 20 20 20 20 20  double rA;      
99e0: 2f 2a 20 52 65 61 6c 20 76 61 6c 75 65 20 6f 66  /* Real value of
99f0: 20 6c 65 66 74 20 6f 70 65 72 61 6e 64 20 2a 2f   left operand */
9a00: 0a 20 20 64 6f 75 62 6c 65 20 72 42 3b 20 20 20  .  double rB;   
9a10: 20 20 20 2f 2a 20 52 65 61 6c 20 76 61 6c 75 65     /* Real value
9a20: 20 6f 66 20 72 69 67 68 74 20 6f 70 65 72 61 6e   of right operan
9a30: 64 20 2a 2f 0a 0a 20 20 70 49 6e 31 20 3d 20 26  d */..  pIn1 = &
9a40: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
9a50: 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66   applyNumericAff
9a60: 69 6e 69 74 79 28 70 49 6e 31 29 3b 0a 20 20 70  inity(pIn1);.  p
9a70: 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In2 = &aMem[pOp-
9a80: 3e 70 32 5d 3b 0a 20 20 61 70 70 6c 79 4e 75 6d  >p2];.  applyNum
9a90: 65 72 69 63 41 66 66 69 6e 69 74 79 28 70 49 6e  ericAffinity(pIn
9aa0: 32 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d  2);.  pOut = &aM
9ab0: 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 66  em[pOp->p3];.  f
9ac0: 6c 61 67 73 20 3d 20 70 49 6e 31 2d 3e 66 6c 61  lags = pIn1->fla
9ad0: 67 73 20 7c 20 70 49 6e 32 2d 3e 66 6c 61 67 73  gs | pIn2->flags
9ae0: 3b 0a 20 20 69 66 28 20 28 66 6c 61 67 73 20 26  ;.  if( (flags &
9af0: 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 20 29 20   MEM_Null)!=0 ) 
9b00: 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f  goto arithmetic_
9b10: 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a  result_is_null;.
9b20: 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
9b30: 67 73 20 26 20 70 49 6e 32 2d 3e 66 6c 61 67 73  gs & pIn2->flags
9b40: 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 4d 45 4d   & MEM_Int)==MEM
9b50: 5f 49 6e 74 20 29 7b 0a 20 20 20 20 69 41 20 3d  _Int ){.    iA =
9b60: 20 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20 20 20   pIn1->u.i;.    
9b70: 69 42 20 3d 20 70 49 6e 32 2d 3e 75 2e 69 3b 0a  iB = pIn2->u.i;.
9b80: 20 20 20 20 73 77 69 74 63 68 28 20 70 4f 70 2d      switch( pOp-
9b90: 3e 6f 70 63 6f 64 65 20 29 7b 0a 20 20 20 20 20  >opcode ){.     
9ba0: 20 63 61 73 65 20 4f 50 5f 41 64 64 3a 20 20 20   case OP_Add:   
9bb0: 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 41      if( sqlite3A
9bc0: 64 64 49 6e 74 36 34 28 26 69 42 2c 69 41 29 20  ddInt64(&iB,iA) 
9bd0: 29 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68 3b 20  ) goto fp_math; 
9be0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61   break;.      ca
9bf0: 73 65 20 4f 50 5f 53 75 62 74 72 61 63 74 3a 20  se OP_Subtract: 
9c00: 20 69 66 28 20 73 71 6c 69 74 65 33 53 75 62 49   if( sqlite3SubI
9c10: 6e 74 36 34 28 26 69 42 2c 69 41 29 20 29 20 67  nt64(&iB,iA) ) g
9c20: 6f 74 6f 20 66 70 5f 6d 61 74 68 3b 20 20 62 72  oto fp_math;  br
9c30: 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20  eak;.      case 
9c40: 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a 20 20 69 66  OP_Multiply:  if
9c50: 28 20 73 71 6c 69 74 65 33 4d 75 6c 49 6e 74 36  ( sqlite3MulInt6
9c60: 34 28 26 69 42 2c 69 41 29 20 29 20 67 6f 74 6f  4(&iB,iA) ) goto
9c70: 20 66 70 5f 6d 61 74 68 3b 20 20 62 72 65 61 6b   fp_math;  break
9c80: 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f  ;.      case OP_
9c90: 44 69 76 69 64 65 3a 20 7b 0a 20 20 20 20 20 20  Divide: {.      
9ca0: 20 20 69 66 28 20 69 41 3d 3d 30 20 29 20 67 6f    if( iA==0 ) go
9cb0: 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65  to arithmetic_re
9cc0: 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20  sult_is_null;.  
9cd0: 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d 2d 31        if( iA==-1
9ce0: 20 26 26 20 69 42 3d 3d 53 4d 41 4c 4c 45 53 54   && iB==SMALLEST
9cf0: 5f 49 4e 54 36 34 20 29 20 67 6f 74 6f 20 66 70  _INT64 ) goto fp
9d00: 5f 6d 61 74 68 3b 0a 20 20 20 20 20 20 20 20 69  _math;.        i
9d10: 42 20 2f 3d 20 69 41 3b 0a 20 20 20 20 20 20 20  B /= iA;.       
9d20: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a   break;.      }.
9d30: 20 20 20 20 20 20 64 65 66 61 75 6c 74 3a 20 7b        default: {
9d40: 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d  .        if( iA=
9d50: 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d  =0 ) goto arithm
9d60: 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e  etic_result_is_n
9d70: 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69 66 28  ull;.        if(
9d80: 20 69 41 3d 3d 2d 31 20 29 20 69 41 20 3d 20 31   iA==-1 ) iA = 1
9d90: 3b 0a 20 20 20 20 20 20 20 20 69 42 20 25 3d 20  ;.        iB %= 
9da0: 69 41 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61  iA;.        brea
9db0: 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  k;.      }.    }
9dc0: 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  .    pOut->u.i =
9dd0: 20 69 42 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54   iB;.    MemSetT
9de0: 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45  ypeFlag(pOut, ME
9df0: 4d 5f 49 6e 74 29 3b 0a 20 20 7d 65 6c 73 65 7b  M_Int);.  }else{
9e00: 0a 66 70 5f 6d 61 74 68 3a 0a 20 20 20 20 72 41  .fp_math:.    rA
9e10: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 52 65   = sqlite3VdbeRe
9e20: 61 6c 56 61 6c 75 65 28 70 49 6e 31 29 3b 0a 20  alValue(pIn1);. 
9e30: 20 20 20 72 42 20 3d 20 73 71 6c 69 74 65 33 56     rB = sqlite3V
9e40: 64 62 65 52 65 61 6c 56 61 6c 75 65 28 70 49 6e  dbeRealValue(pIn
9e50: 32 29 3b 0a 20 20 20 20 73 77 69 74 63 68 28 20  2);.    switch( 
9e60: 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 20  pOp->opcode ){. 
9e70: 20 20 20 20 20 63 61 73 65 20 4f 50 5f 41 64 64       case OP_Add
9e80: 3a 20 20 20 20 20 20 20 20 20 72 42 20 2b 3d 20  :         rB += 
9e90: 72 41 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b  rA;       break;
9ea0: 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 53  .      case OP_S
9eb0: 75 62 74 72 61 63 74 3a 20 20 20 20 72 42 20 2d  ubtract:    rB -
9ec0: 3d 20 72 41 3b 20 20 20 20 20 20 20 62 72 65 61  = rA;       brea
9ed0: 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50  k;.      case OP
9ee0: 5f 4d 75 6c 74 69 70 6c 79 3a 20 20 20 20 72 42  _Multiply:    rB
9ef0: 20 2a 3d 20 72 41 3b 20 20 20 20 20 20 20 62 72   *= rA;       br
9f00: 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20  eak;.      case 
9f10: 4f 50 5f 44 69 76 69 64 65 3a 20 7b 0a 20 20 20  OP_Divide: {.   
9f20: 20 20 20 20 20 2f 2a 20 28 64 6f 75 62 6c 65 29       /* (double)
9f30: 30 20 49 6e 20 63 61 73 65 20 6f 66 20 53 51 4c  0 In case of SQL
9f40: 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e  ITE_OMIT_FLOATIN
9f50: 47 5f 50 4f 49 4e 54 2e 2e 2e 20 2a 2f 0a 20 20  G_POINT... */.  
9f60: 20 20 20 20 20 20 69 66 28 20 72 41 3d 3d 28 64        if( rA==(d
9f70: 6f 75 62 6c 65 29 30 20 29 20 67 6f 74 6f 20 61  ouble)0 ) goto a
9f80: 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74  rithmetic_result
9f90: 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20  _is_null;.      
9fa0: 20 20 72 42 20 2f 3d 20 72 41 3b 0a 20 20 20 20    rB /= rA;.    
9fb0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
9fc0: 20 7d 0a 20 20 20 20 20 20 64 65 66 61 75 6c 74   }.      default
9fd0: 3a 20 7b 0a 20 20 20 20 20 20 20 20 69 41 20 3d  : {.        iA =
9fe0: 20 28 69 36 34 29 72 41 3b 0a 20 20 20 20 20 20   (i64)rA;.      
9ff0: 20 20 69 42 20 3d 20 28 69 36 34 29 72 42 3b 0a    iB = (i64)rB;.
a000: 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d          if( iA==
a010: 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d 65  0 ) goto arithme
a020: 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75  tic_result_is_nu
a030: 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  ll;.        if( 
a040: 69 41 3d 3d 2d 31 20 29 20 69 41 20 3d 20 31 3b  iA==-1 ) iA = 1;
a050: 0a 20 20 20 20 20 20 20 20 72 42 20 3d 20 28 64  .        rB = (d
a060: 6f 75 62 6c 65 29 28 69 42 20 25 20 69 41 29 3b  ouble)(iB % iA);
a070: 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  .        break;.
a080: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 23 69        }.    }.#i
a090: 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fdef SQLITE_OMIT
a0a0: 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a  _FLOATING_POINT.
a0b0: 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20      pOut->u.i = 
a0c0: 72 42 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79  rB;.    MemSetTy
a0d0: 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d  peFlag(pOut, MEM
a0e0: 5f 49 6e 74 29 3b 0a 23 65 6c 73 65 0a 20 20 20  _Int);.#else.   
a0f0: 20 69 66 28 20 73 71 6c 69 74 65 33 49 73 4e 61   if( sqlite3IsNa
a100: 4e 28 72 42 29 20 29 7b 0a 20 20 20 20 20 20 67  N(rB) ){.      g
a110: 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72  oto arithmetic_r
a120: 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20  esult_is_null;. 
a130: 20 20 20 7d 0a 20 20 20 20 70 4f 75 74 2d 3e 72     }.    pOut->r
a140: 20 3d 20 72 42 3b 0a 20 20 20 20 4d 65 6d 53 65   = rB;.    MemSe
a150: 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20  tTypeFlag(pOut, 
a160: 4d 45 4d 5f 52 65 61 6c 29 3b 0a 20 20 20 20 69  MEM_Real);.    i
a170: 66 28 20 28 66 6c 61 67 73 20 26 20 4d 45 4d 5f  f( (flags & MEM_
a180: 52 65 61 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20  Real)==0 ){.    
a190: 20 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74    sqlite3VdbeInt
a1a0: 65 67 65 72 41 66 66 69 6e 69 74 79 28 70 4f 75  egerAffinity(pOu
a1b0: 74 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66  t);.    }.#endif
a1c0: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 61  .  }.  break;..a
a1d0: 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74  rithmetic_result
a1e0: 5f 69 73 5f 6e 75 6c 6c 3a 0a 20 20 73 71 6c 69  _is_null:.  sqli
a1f0: 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c  te3VdbeMemSetNul
a200: 6c 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b  l(pOut);.  break
a210: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
a220: 43 6f 6c 6c 53 65 71 20 2a 20 2a 20 50 34 0a 2a  CollSeq * * P4.*
a230: 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69  *.** P4 is a poi
a240: 6e 74 65 72 20 74 6f 20 61 20 43 6f 6c 6c 53 65  nter to a CollSe
a250: 71 20 73 74 72 75 63 74 2e 20 49 66 20 74 68 65  q struct. If the
a260: 20 6e 65 78 74 20 63 61 6c 6c 20 74 6f 20 61 20   next call to a 
a270: 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 0a 2a 2a  user function.**
a280: 20 6f 72 20 61 67 67 72 65 67 61 74 65 20 63 61   or aggregate ca
a290: 6c 6c 73 20 73 71 6c 69 74 65 33 47 65 74 46 75  lls sqlite3GetFu
a2a0: 6e 63 43 6f 6c 6c 53 65 71 28 29 2c 20 74 68 69  ncCollSeq(), thi
a2b0: 73 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75  s collation sequ
a2c0: 65 6e 63 65 20 77 69 6c 6c 0a 2a 2a 20 62 65 20  ence will.** be 
a2d0: 72 65 74 75 72 6e 65 64 2e 20 54 68 69 73 20 69  returned. This i
a2e0: 73 20 75 73 65 64 20 62 79 20 74 68 65 20 62 75  s used by the bu
a2f0: 69 6c 74 2d 69 6e 20 6d 69 6e 28 29 2c 20 6d 61  ilt-in min(), ma
a300: 78 28 29 20 61 6e 64 20 6e 75 6c 6c 69 66 28 29  x() and nullif()
a310: 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a  .** functions..*
a320: 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72 66 61  *.** The interfa
a330: 63 65 20 75 73 65 64 20 62 79 20 74 68 65 20 69  ce used by the i
a340: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66  mplementation of
a350: 20 74 68 65 20 61 66 6f 72 65 6d 65 6e 74 69 6f   the aforementio
a360: 6e 65 64 20 66 75 6e 63 74 69 6f 6e 73 0a 2a 2a  ned functions.**
a370: 20 74 6f 20 72 65 74 72 69 65 76 65 20 74 68 65   to retrieve the
a380: 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65   collation seque
a390: 6e 63 65 20 73 65 74 20 62 79 20 74 68 69 73 20  nce set by this 
a3a0: 6f 70 63 6f 64 65 20 69 73 20 6e 6f 74 20 61 76  opcode is not av
a3b0: 61 69 6c 61 62 6c 65 0a 2a 2a 20 70 75 62 6c 69  ailable.** publi
a3c0: 63 6c 79 2c 20 6f 6e 6c 79 20 74 6f 20 75 73 65  cly, only to use
a3d0: 72 20 66 75 6e 63 74 69 6f 6e 73 20 64 65 66 69  r functions defi
a3e0: 6e 65 64 20 69 6e 20 66 75 6e 63 2e 63 2e 0a 2a  ned in func.c..*
a3f0: 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6c 6c 53 65  /.case OP_CollSe
a400: 71 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70  q: {.  assert( p
a410: 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 43  Op->p4type==P4_C
a420: 4f 4c 4c 53 45 51 20 29 3b 0a 20 20 62 72 65 61  OLLSEQ );.  brea
a430: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
a440: 20 46 75 6e 63 74 69 6f 6e 20 50 31 20 50 32 20   Function P1 P2 
a450: 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 49  P3 P4 P5.**.** I
a460: 6e 76 6f 6b 65 20 61 20 75 73 65 72 20 66 75 6e  nvoke a user fun
a470: 63 74 69 6f 6e 20 28 50 34 20 69 73 20 61 20 70  ction (P4 is a p
a480: 6f 69 6e 74 65 72 20 74 6f 20 61 20 46 75 6e 63  ointer to a Func
a490: 74 69 6f 6e 20 73 74 72 75 63 74 75 72 65 20 74  tion structure t
a4a0: 68 61 74 0a 2a 2a 20 64 65 66 69 6e 65 73 20 74  hat.** defines t
a4b0: 68 65 20 66 75 6e 63 74 69 6f 6e 29 20 77 69 74  he function) wit
a4c0: 68 20 50 35 20 61 72 67 75 6d 65 6e 74 73 20 74  h P5 arguments t
a4d0: 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69 73 74  aken from regist
a4e0: 65 72 20 50 32 20 61 6e 64 0a 2a 2a 20 73 75 63  er P2 and.** suc
a4f0: 63 65 73 73 6f 72 73 2e 20 20 54 68 65 20 72 65  cessors.  The re
a500: 73 75 6c 74 20 6f 66 20 74 68 65 20 66 75 6e 63  sult of the func
a510: 74 69 6f 6e 20 69 73 20 73 74 6f 72 65 64 20 69  tion is stored i
a520: 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  n register P3..*
a530: 2a 20 52 65 67 69 73 74 65 72 20 50 33 20 6d 75  * Register P3 mu
a540: 73 74 20 6e 6f 74 20 62 65 20 6f 6e 65 20 6f 66  st not be one of
a550: 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 69 6e   the function in
a560: 70 75 74 73 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69  puts..**.** P1 i
a570: 73 20 61 20 33 32 2d 62 69 74 20 62 69 74 6d 61  s a 32-bit bitma
a580: 73 6b 20 69 6e 64 69 63 61 74 69 6e 67 20 77 68  sk indicating wh
a590: 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 65 61 63  ether or not eac
a5a0: 68 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68  h argument to th
a5b0: 65 20 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 20 77  e .** function w
a5c0: 61 73 20 64 65 74 65 72 6d 69 6e 65 64 20 74 6f  as determined to
a5d0: 20 62 65 20 63 6f 6e 73 74 61 6e 74 20 61 74 20   be constant at 
a5e0: 63 6f 6d 70 69 6c 65 20 74 69 6d 65 2e 20 49 66  compile time. If
a5f0: 20 74 68 65 20 66 69 72 73 74 0a 2a 2a 20 61 72   the first.** ar
a600: 67 75 6d 65 6e 74 20 77 61 73 20 63 6f 6e 73 74  gument was const
a610: 61 6e 74 20 74 68 65 6e 20 62 69 74 20 30 20 6f  ant then bit 0 o
a620: 66 20 50 31 20 69 73 20 73 65 74 2e 20 54 68 69  f P1 is set. Thi
a630: 73 20 69 73 20 75 73 65 64 20 74 6f 20 64 65 74  s is used to det
a640: 65 72 6d 69 6e 65 0a 2a 2a 20 77 68 65 74 68 65  ermine.** whethe
a650: 72 20 6d 65 74 61 20 64 61 74 61 20 61 73 73 6f  r meta data asso
a660: 63 69 61 74 65 64 20 77 69 74 68 20 61 20 75 73  ciated with a us
a670: 65 72 20 66 75 6e 63 74 69 6f 6e 20 61 72 67 75  er function argu
a680: 6d 65 6e 74 20 75 73 69 6e 67 20 74 68 65 0a 2a  ment using the.*
a690: 2a 20 73 71 6c 69 74 65 33 5f 73 65 74 5f 61 75  * sqlite3_set_au
a6a0: 78 64 61 74 61 28 29 20 41 50 49 20 6d 61 79 20  xdata() API may 
a6b0: 62 65 20 73 61 66 65 6c 79 20 72 65 74 61 69 6e  be safely retain
a6c0: 65 64 20 75 6e 74 69 6c 20 74 68 65 20 6e 65 78  ed until the nex
a6d0: 74 0a 2a 2a 20 69 6e 76 6f 63 61 74 69 6f 6e 20  t.** invocation 
a6e0: 6f 66 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a  of this opcode..
a6f0: 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
a700: 41 67 67 53 74 65 70 20 61 6e 64 20 41 67 67 46  AggStep and AggF
a710: 69 6e 61 6c 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  inal.*/.case OP_
a720: 46 75 6e 63 74 69 6f 6e 3a 20 7b 0a 20 20 69 6e  Function: {.  in
a730: 74 20 69 3b 0a 20 20 4d 65 6d 20 2a 70 41 72 67  t i;.  Mem *pArg
a740: 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74  ;.  sqlite3_cont
a750: 65 78 74 20 63 74 78 3b 0a 20 20 73 71 6c 69 74  ext ctx;.  sqlit
a760: 65 33 5f 76 61 6c 75 65 20 2a 2a 61 70 56 61 6c  e3_value **apVal
a770: 3b 0a 20 20 69 6e 74 20 6e 3b 0a 0a 20 20 6e 20  ;.  int n;..  n 
a780: 3d 20 70 4f 70 2d 3e 70 35 3b 0a 20 20 61 70 56  = pOp->p5;.  apV
a790: 61 6c 20 3d 20 70 2d 3e 61 70 41 72 67 3b 0a 20  al = p->apArg;. 
a7a0: 20 61 73 73 65 72 74 28 20 61 70 56 61 6c 20 7c   assert( apVal |
a7b0: 7c 20 6e 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  | n==0 );.  asse
a7c0: 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26  rt( pOp->p3>0 &&
a7d0: 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65   pOp->p3<=p->nMe
a7e0: 6d 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61  m );.  pOut = &a
a7f0: 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
a800: 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
a810: 28 70 2c 20 70 4f 75 74 29 3b 0a 0a 20 20 61 73  (p, pOut);..  as
a820: 73 65 72 74 28 20 6e 3d 3d 30 20 7c 7c 20 28 70  sert( n==0 || (p
a830: 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d  Op->p2>0 && pOp-
a840: 3e 70 32 2b 6e 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31  >p2+n<=p->nMem+1
a850: 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  ) );.  assert( p
a860: 4f 70 2d 3e 70 33 3c 70 4f 70 2d 3e 70 32 20 7c  Op->p3<pOp->p2 |
a870: 7c 20 70 4f 70 2d 3e 70 33 3e 3d 70 4f 70 2d 3e  | pOp->p3>=pOp->
a880: 70 32 2b 6e 20 29 3b 0a 20 20 70 41 72 67 20 3d  p2+n );.  pArg =
a890: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
a8a0: 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b  .  for(i=0; i<n;
a8b0: 20 69 2b 2b 2c 20 70 41 72 67 2b 2b 29 7b 0a 20   i++, pArg++){. 
a8c0: 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
a8d0: 56 61 6c 69 64 28 70 41 72 67 29 20 29 3b 0a 20  Valid(pArg) );. 
a8e0: 20 20 20 61 70 56 61 6c 5b 69 5d 20 3d 20 70 41     apVal[i] = pA
a8f0: 72 67 3b 0a 20 20 20 20 44 65 65 70 68 65 6d 65  rg;.    Deepheme
a900: 72 61 6c 69 7a 65 28 70 41 72 67 29 3b 0a 20 20  ralize(pArg);.  
a910: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
a920: 53 74 6f 72 65 54 79 70 65 28 70 41 72 67 29 3b  StoreType(pArg);
a930: 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52  .    REGISTER_TR
a940: 41 43 45 28 70 4f 70 2d 3e 70 32 2b 69 2c 20 70  ACE(pOp->p2+i, p
a950: 41 72 67 29 3b 0a 20 20 7d 0a 0a 20 20 61 73 73  Arg);.  }..  ass
a960: 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65  ert( pOp->p4type
a970: 3d 3d 50 34 5f 46 55 4e 43 44 45 46 20 7c 7c 20  ==P4_FUNCDEF || 
a980: 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
a990: 56 44 42 45 46 55 4e 43 20 29 3b 0a 20 20 69 66  VDBEFUNC );.  if
a9a0: 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
a9b0: 34 5f 46 55 4e 43 44 45 46 20 29 7b 0a 20 20 20  4_FUNCDEF ){.   
a9c0: 20 63 74 78 2e 70 46 75 6e 63 20 3d 20 70 4f 70   ctx.pFunc = pOp
a9d0: 2d 3e 70 34 2e 70 46 75 6e 63 3b 0a 20 20 20 20  ->p4.pFunc;.    
a9e0: 63 74 78 2e 70 56 64 62 65 46 75 6e 63 20 3d 20  ctx.pVdbeFunc = 
a9f0: 30 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  0;.  }else{.    
aa00: 63 74 78 2e 70 56 64 62 65 46 75 6e 63 20 3d 20  ctx.pVdbeFunc = 
aa10: 28 56 64 62 65 46 75 6e 63 2a 29 70 4f 70 2d 3e  (VdbeFunc*)pOp->
aa20: 70 34 2e 70 56 64 62 65 46 75 6e 63 3b 0a 20 20  p4.pVdbeFunc;.  
aa30: 20 20 63 74 78 2e 70 46 75 6e 63 20 3d 20 63 74    ctx.pFunc = ct
aa40: 78 2e 70 56 64 62 65 46 75 6e 63 2d 3e 70 46 75  x.pVdbeFunc->pFu
aa50: 6e 63 3b 0a 20 20 7d 0a 0a 20 20 63 74 78 2e 73  nc;.  }..  ctx.s
aa60: 2e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c  .flags = MEM_Nul
aa70: 6c 3b 0a 20 20 63 74 78 2e 73 2e 64 62 20 3d 20  l;.  ctx.s.db = 
aa80: 64 62 3b 0a 20 20 63 74 78 2e 73 2e 78 44 65 6c  db;.  ctx.s.xDel
aa90: 20 3d 20 30 3b 0a 20 20 63 74 78 2e 73 2e 7a 4d   = 0;.  ctx.s.zM
aaa0: 61 6c 6c 6f 63 20 3d 20 30 3b 0a 0a 20 20 2f 2a  alloc = 0;..  /*
aab0: 20 54 68 65 20 6f 75 74 70 75 74 20 63 65 6c 6c   The output cell
aac0: 20 6d 61 79 20 61 6c 72 65 61 64 79 20 68 61 76   may already hav
aad0: 65 20 61 20 62 75 66 66 65 72 20 61 6c 6c 6f 63  e a buffer alloc
aae0: 61 74 65 64 2e 20 4d 6f 76 65 0a 20 20 2a 2a 20  ated. Move.  ** 
aaf0: 74 68 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 63  the pointer to c
ab00: 74 78 2e 73 20 73 6f 20 69 6e 20 63 61 73 65 20  tx.s so in case 
ab10: 74 68 65 20 75 73 65 72 2d 66 75 6e 63 74 69 6f  the user-functio
ab20: 6e 20 63 61 6e 20 75 73 65 0a 20 20 2a 2a 20 74  n can use.  ** t
ab30: 68 65 20 61 6c 72 65 61 64 79 20 61 6c 6c 6f 63  he already alloc
ab40: 61 74 65 64 20 62 75 66 66 65 72 20 69 6e 73 74  ated buffer inst
ab50: 65 61 64 20 6f 66 20 61 6c 6c 6f 63 61 74 69 6e  ead of allocatin
ab60: 67 20 61 20 6e 65 77 20 6f 6e 65 2e 0a 20 20 2a  g a new one..  *
ab70: 2f 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  /.  sqlite3VdbeM
ab80: 65 6d 4d 6f 76 65 28 26 63 74 78 2e 73 2c 20 70  emMove(&ctx.s, p
ab90: 4f 75 74 29 3b 0a 20 20 4d 65 6d 53 65 74 54 79  Out);.  MemSetTy
aba0: 70 65 46 6c 61 67 28 26 63 74 78 2e 73 2c 20 4d  peFlag(&ctx.s, M
abb0: 45 4d 5f 4e 75 6c 6c 29 3b 0a 0a 20 20 63 74 78  EM_Null);..  ctx
abc0: 2e 69 73 45 72 72 6f 72 20 3d 20 30 3b 0a 20 20  .isError = 0;.  
abd0: 69 66 28 20 63 74 78 2e 70 46 75 6e 63 2d 3e 66  if( ctx.pFunc->f
abe0: 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 46 55  lags & SQLITE_FU
abf0: 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20 29 7b 0a 20  NC_NEEDCOLL ){. 
ac00: 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 3e 61     assert( pOp>a
ac10: 4f 70 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  Op );.    assert
ac20: 28 20 70 4f 70 5b 2d 31 5d 2e 70 34 74 79 70 65  ( pOp[-1].p4type
ac30: 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51 20 29 3b 0a  ==P4_COLLSEQ );.
ac40: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b      assert( pOp[
ac50: 2d 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43  -1].opcode==OP_C
ac60: 6f 6c 6c 53 65 71 20 29 3b 0a 20 20 20 20 63 74  ollSeq );.    ct
ac70: 78 2e 70 43 6f 6c 6c 20 3d 20 70 4f 70 5b 2d 31  x.pColl = pOp[-1
ac80: 5d 2e 70 34 2e 70 43 6f 6c 6c 3b 0a 20 20 7d 0a  ].p4.pColl;.  }.
ac90: 20 20 28 2a 63 74 78 2e 70 46 75 6e 63 2d 3e 78    (*ctx.pFunc->x
aca0: 46 75 6e 63 29 28 26 63 74 78 2c 20 6e 2c 20 61  Func)(&ctx, n, a
acb0: 70 56 61 6c 29 3b 20 2f 2a 20 49 4d 50 3a 20 52  pVal); /* IMP: R
acc0: 2d 32 34 35 30 35 2d 32 33 32 33 30 20 2a 2f 0a  -24505-23230 */.
acd0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 75 74    sqlite3VdbeMut
ace0: 65 78 52 65 73 79 6e 63 28 70 29 3b 0a 20 20 69  exResync(p);.  i
acf0: 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69  f( db->mallocFai
ad00: 6c 65 64 20 29 7b 0a 20 20 20 20 2f 2a 20 45 76  led ){.    /* Ev
ad10: 65 6e 20 74 68 6f 75 67 68 20 61 20 6d 61 6c 6c  en though a mall
ad20: 6f 63 28 29 20 68 61 73 20 66 61 69 6c 65 64 2c  oc() has failed,
ad30: 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74   the implementat
ad40: 69 6f 6e 20 6f 66 20 74 68 65 0a 20 20 20 20 2a  ion of the.    *
ad50: 2a 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20  * user function 
ad60: 6d 61 79 20 68 61 76 65 20 63 61 6c 6c 65 64 20  may have called 
ad70: 61 6e 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c  an sqlite3_resul
ad80: 74 5f 58 58 58 28 29 20 66 75 6e 63 74 69 6f 6e  t_XXX() function
ad90: 0a 20 20 20 20 2a 2a 20 74 6f 20 72 65 74 75 72  .    ** to retur
ada0: 6e 20 61 20 76 61 6c 75 65 2e 20 54 68 65 20 66  n a value. The f
adb0: 6f 6c 6c 6f 77 69 6e 67 20 63 61 6c 6c 20 72 65  ollowing call re
adc0: 6c 65 61 73 65 73 20 61 6e 79 20 72 65 73 6f 75  leases any resou
add0: 72 63 65 73 0a 20 20 20 20 2a 2a 20 61 73 73 6f  rces.    ** asso
ade0: 63 69 61 74 65 64 20 77 69 74 68 20 73 75 63 68  ciated with such
adf0: 20 61 20 76 61 6c 75 65 2e 0a 20 20 20 20 2a 2f   a value..    */
ae00: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
ae10: 4d 65 6d 52 65 6c 65 61 73 65 28 26 63 74 78 2e  MemRelease(&ctx.
ae20: 73 29 3b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f  s);.    goto no_
ae30: 6d 65 6d 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49  mem;.  }..  /* I
ae40: 66 20 61 6e 79 20 61 75 78 69 6c 69 61 72 79 20  f any auxiliary 
ae50: 64 61 74 61 20 66 75 6e 63 74 69 6f 6e 73 20 68  data functions h
ae60: 61 76 65 20 62 65 65 6e 20 63 61 6c 6c 65 64 20  ave been called 
ae70: 62 79 20 74 68 69 73 20 75 73 65 72 20 66 75 6e  by this user fun
ae80: 63 74 69 6f 6e 2c 0a 20 20 2a 2a 20 69 6d 6d 65  ction,.  ** imme
ae90: 64 69 61 74 65 6c 79 20 63 61 6c 6c 20 74 68 65  diately call the
aea0: 20 64 65 73 74 72 75 63 74 6f 72 20 66 6f 72 20   destructor for 
aeb0: 61 6e 79 20 6e 6f 6e 2d 73 74 61 74 69 63 20 76  any non-static v
aec0: 61 6c 75 65 73 2e 0a 20 20 2a 2f 0a 20 20 69 66  alues..  */.  if
aed0: 28 20 63 74 78 2e 70 56 64 62 65 46 75 6e 63 20  ( ctx.pVdbeFunc 
aee0: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
aef0: 62 65 44 65 6c 65 74 65 41 75 78 44 61 74 61 28  beDeleteAuxData(
af00: 63 74 78 2e 70 56 64 62 65 46 75 6e 63 2c 20 70  ctx.pVdbeFunc, p
af10: 4f 70 2d 3e 70 31 29 3b 0a 20 20 20 20 70 4f 70  Op->p1);.    pOp
af20: 2d 3e 70 34 2e 70 56 64 62 65 46 75 6e 63 20 3d  ->p4.pVdbeFunc =
af30: 20 63 74 78 2e 70 56 64 62 65 46 75 6e 63 3b 0a   ctx.pVdbeFunc;.
af40: 20 20 20 20 70 4f 70 2d 3e 70 34 74 79 70 65 20      pOp->p4type 
af50: 3d 20 50 34 5f 56 44 42 45 46 55 4e 43 3b 0a 20  = P4_VDBEFUNC;. 
af60: 20 7d 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20   }..  /* If the 
af70: 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 65  function returne
af80: 64 20 61 6e 20 65 72 72 6f 72 2c 20 74 68 72 6f  d an error, thro
af90: 77 20 61 6e 20 65 78 63 65 70 74 69 6f 6e 20 2a  w an exception *
afa0: 2f 0a 20 20 69 66 28 20 63 74 78 2e 69 73 45 72  /.  if( ctx.isEr
afb0: 72 6f 72 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  ror ){.    sqlit
afc0: 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e  e3SetString(&p->
afd0: 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73  zErrMsg, db, "%s
afe0: 22 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  ", sqlite3_value
aff0: 5f 74 65 78 74 28 26 63 74 78 2e 73 29 29 3b 0a  _text(&ctx.s));.
b000: 20 20 20 20 72 63 20 3d 20 63 74 78 2e 69 73 45      rc = ctx.isE
b010: 72 72 6f 72 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20  rror;.  }..  /* 
b020: 43 6f 70 79 20 74 68 65 20 72 65 73 75 6c 74 20  Copy the result 
b030: 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20  of the function 
b040: 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 33  into register P3
b050: 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56 64 62   */.  sqlite3Vdb
b060: 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28  eChangeEncoding(
b070: 26 63 74 78 2e 73 2c 20 65 6e 63 6f 64 69 6e 67  &ctx.s, encoding
b080: 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  );.  sqlite3Vdbe
b090: 4d 65 6d 4d 6f 76 65 28 70 4f 75 74 2c 20 26 63  MemMove(pOut, &c
b0a0: 74 78 2e 73 29 3b 0a 20 20 69 66 28 20 73 71 6c  tx.s);.  if( sql
b0b0: 69 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69  ite3VdbeMemTooBi
b0c0: 67 28 70 4f 75 74 29 20 29 7b 0a 20 20 20 20 67  g(pOut) ){.    g
b0d0: 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d  oto too_big;.  }
b0e0: 0a 0a 23 69 66 20 30 0a 20 20 2f 2a 20 54 68 65  ..#if 0.  /* The
b0f0: 20 61 70 70 2d 64 65 66 69 6e 65 64 20 66 75 6e   app-defined fun
b100: 63 74 69 6f 6e 20 68 61 73 20 64 6f 6e 65 20 73  ction has done s
b110: 6f 6d 65 74 68 69 6e 67 20 74 68 61 74 20 61 73  omething that as
b120: 20 63 61 75 73 65 64 20 74 68 69 73 0a 20 20 2a   caused this.  *
b130: 2a 20 73 74 61 74 65 6d 65 6e 74 20 74 6f 20 65  * statement to e
b140: 78 70 69 72 65 2e 20 20 28 50 65 72 68 61 70 73  xpire.  (Perhaps
b150: 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 63 61   the function ca
b160: 6c 6c 65 64 20 73 71 6c 69 74 65 33 5f 65 78 65  lled sqlite3_exe
b170: 63 28 29 0a 20 20 2a 2a 20 77 69 74 68 20 61 20  c().  ** with a 
b180: 43 52 45 41 54 45 20 54 41 42 4c 45 20 73 74 61  CREATE TABLE sta
b190: 74 65 6d 65 6e 74 2e 29 0a 20 20 2a 2f 0a 20 20  tement.).  */.  
b1a0: 69 66 28 20 70 2d 3e 65 78 70 69 72 65 64 20 29  if( p->expired )
b1b0: 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 41 42 4f   rc = SQLITE_ABO
b1c0: 52 54 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 52 45  RT;.#endif..  RE
b1d0: 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
b1e0: 2d 3e 70 33 2c 20 70 4f 75 74 29 3b 0a 20 20 55  ->p3, pOut);.  U
b1f0: 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49  PDATE_MAX_BLOBSI
b200: 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61  ZE(pOut);.  brea
b210: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
b220: 20 42 69 74 41 6e 64 20 50 31 20 50 32 20 50 33   BitAnd P1 P2 P3
b230: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20   * *.**.** Take 
b240: 74 68 65 20 62 69 74 2d 77 69 73 65 20 41 4e 44  the bit-wise AND
b250: 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20 69   of the values i
b260: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 61 6e  n register P1 an
b270: 64 20 50 32 20 61 6e 64 0a 2a 2a 20 73 74 6f 72  d P2 and.** stor
b280: 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20  e the result in 
b290: 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20  register P3..** 
b2a0: 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20  If either input 
b2b0: 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73  is NULL, the res
b2c0: 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a  ult is NULL..*/.
b2d0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 69 74 4f 72  /* Opcode: BitOr
b2e0: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
b2f0: 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20 62 69 74  .** Take the bit
b300: 2d 77 69 73 65 20 4f 52 20 6f 66 20 74 68 65 20  -wise OR of the 
b310: 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74  values in regist
b320: 65 72 20 50 31 20 61 6e 64 20 50 32 20 61 6e 64  er P1 and P2 and
b330: 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65 20 72 65  .** store the re
b340: 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72  sult in register
b350: 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65   P3..** If eithe
b360: 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c  r input is NULL,
b370: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e   the result is N
b380: 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ULL..*/./* Opcod
b390: 65 3a 20 53 68 69 66 74 4c 65 66 74 20 50 31 20  e: ShiftLeft P1 
b3a0: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
b3b0: 53 68 69 66 74 20 74 68 65 20 69 6e 74 65 67 65  Shift the intege
b3c0: 72 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  r value in regis
b3d0: 74 65 72 20 50 32 20 74 6f 20 74 68 65 20 6c 65  ter P2 to the le
b3e0: 66 74 20 62 79 20 74 68 65 0a 2a 2a 20 6e 75 6d  ft by the.** num
b3f0: 62 65 72 20 6f 66 20 62 69 74 73 20 73 70 65 63  ber of bits spec
b400: 69 66 69 65 64 20 62 79 20 74 68 65 20 69 6e 74  ified by the int
b410: 65 67 65 72 20 69 6e 20 72 65 67 69 73 74 65 72  eger in register
b420: 20 50 31 2e 0a 2a 2a 20 53 74 6f 72 65 20 74 68   P1..** Store th
b430: 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69  e result in regi
b440: 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65  ster P3..** If e
b450: 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e  ither input is N
b460: 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20  ULL, the result 
b470: 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f  is NULL..*/./* O
b480: 70 63 6f 64 65 3a 20 53 68 69 66 74 52 69 67 68  pcode: ShiftRigh
b490: 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  t P1 P2 P3 * *.*
b4a0: 2a 0a 2a 2a 20 53 68 69 66 74 20 74 68 65 20 69  *.** Shift the i
b4b0: 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69 6e 20  nteger value in 
b4c0: 72 65 67 69 73 74 65 72 20 50 32 20 74 6f 20 74  register P2 to t
b4d0: 68 65 20 72 69 67 68 74 20 62 79 20 74 68 65 0a  he right by the.
b4e0: 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 62 69 74  ** number of bit
b4f0: 73 20 73 70 65 63 69 66 69 65 64 20 62 79 20 74  s specified by t
b500: 68 65 20 69 6e 74 65 67 65 72 20 69 6e 20 72 65  he integer in re
b510: 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 20 53 74  gister P1..** St
b520: 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69  ore the result i
b530: 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  n register P3..*
b540: 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75  * If either inpu
b550: 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72  t is NULL, the r
b560: 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a  esult is NULL..*
b570: 2f 0a 63 61 73 65 20 4f 50 5f 42 69 74 41 6e 64  /.case OP_BitAnd
b580: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :               
b590: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
b5a0: 42 49 54 41 4e 44 2c 20 69 6e 31 2c 20 69 6e 32  BITAND, in1, in2
b5b0: 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f  , out3 */.case O
b5c0: 50 5f 42 69 74 4f 72 3a 20 20 20 20 20 20 20 20  P_BitOr:        
b5d0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
b5e0: 65 20 61 73 20 54 4b 5f 42 49 54 4f 52 2c 20 69  e as TK_BITOR, i
b5f0: 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f  n1, in2, out3 */
b600: 0a 63 61 73 65 20 4f 50 5f 53 68 69 66 74 4c 65  .case OP_ShiftLe
b610: 66 74 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  ft:             
b620: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4c   /* same as TK_L
b630: 53 48 49 46 54 2c 20 69 6e 31 2c 20 69 6e 32 2c  SHIFT, in1, in2,
b640: 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50   out3 */.case OP
b650: 5f 53 68 69 66 74 52 69 67 68 74 3a 20 7b 20 20  _ShiftRight: {  
b660: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
b670: 20 61 73 20 54 4b 5f 52 53 48 49 46 54 2c 20 69   as TK_RSHIFT, i
b680: 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f  n1, in2, out3 */
b690: 0a 20 20 69 36 34 20 69 41 3b 0a 20 20 75 36 34  .  i64 iA;.  u64
b6a0: 20 75 41 3b 0a 20 20 69 36 34 20 69 42 3b 0a 20   uA;.  i64 iB;. 
b6b0: 20 75 38 20 6f 70 3b 0a 0a 20 20 70 49 6e 31 20   u8 op;..  pIn1 
b6c0: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
b6d0: 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d  ;.  pIn2 = &aMem
b6e0: 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70 4f 75  [pOp->p2];.  pOu
b6f0: 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
b700: 33 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d  3];.  if( (pIn1-
b710: 3e 66 6c 61 67 73 20 7c 20 70 49 6e 32 2d 3e 66  >flags | pIn2->f
b720: 6c 61 67 73 29 20 26 20 4d 45 4d 5f 4e 75 6c 6c  lags) & MEM_Null
b730: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
b740: 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f  dbeMemSetNull(pO
b750: 75 74 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a  ut);.    break;.
b760: 20 20 7d 0a 20 20 69 41 20 3d 20 73 71 6c 69 74    }.  iA = sqlit
b770: 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70  e3VdbeIntValue(p
b780: 49 6e 32 29 3b 0a 20 20 69 42 20 3d 20 73 71 6c  In2);.  iB = sql
b790: 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65  ite3VdbeIntValue
b7a0: 28 70 49 6e 31 29 3b 0a 20 20 6f 70 20 3d 20 70  (pIn1);.  op = p
b7b0: 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a 20 20 69 66  Op->opcode;.  if
b7c0: 28 20 6f 70 3d 3d 4f 50 5f 42 69 74 41 6e 64 20  ( op==OP_BitAnd 
b7d0: 29 7b 0a 20 20 20 20 69 41 20 26 3d 20 69 42 3b  ){.    iA &= iB;
b7e0: 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 6f 70 3d  .  }else if( op=
b7f0: 3d 4f 50 5f 42 69 74 4f 72 20 29 7b 0a 20 20 20  =OP_BitOr ){.   
b800: 20 69 41 20 7c 3d 20 69 42 3b 0a 20 20 7d 65 6c   iA |= iB;.  }el
b810: 73 65 20 69 66 28 20 69 42 21 3d 30 20 29 7b 0a  se if( iB!=0 ){.
b820: 20 20 20 20 61 73 73 65 72 74 28 20 6f 70 3d 3d      assert( op==
b830: 4f 50 5f 53 68 69 66 74 52 69 67 68 74 20 7c 7c  OP_ShiftRight ||
b840: 20 6f 70 3d 3d 4f 50 5f 53 68 69 66 74 4c 65 66   op==OP_ShiftLef
b850: 74 20 29 3b 0a 0a 20 20 20 20 2f 2a 20 49 66 20  t );..    /* If 
b860: 73 68 69 66 74 69 6e 67 20 62 79 20 61 20 6e 65  shifting by a ne
b870: 67 61 74 69 76 65 20 61 6d 6f 75 6e 74 2c 20 73  gative amount, s
b880: 68 69 66 74 20 69 6e 20 74 68 65 20 6f 74 68 65  hift in the othe
b890: 72 20 64 69 72 65 63 74 69 6f 6e 20 2a 2f 0a 20  r direction */. 
b8a0: 20 20 20 69 66 28 20 69 42 3c 30 20 29 7b 0a 20     if( iB<0 ){. 
b8b0: 20 20 20 20 20 61 73 73 65 72 74 28 20 4f 50 5f       assert( OP_
b8c0: 53 68 69 66 74 52 69 67 68 74 3d 3d 4f 50 5f 53  ShiftRight==OP_S
b8d0: 68 69 66 74 4c 65 66 74 2b 31 20 29 3b 0a 20 20  hiftLeft+1 );.  
b8e0: 20 20 20 20 6f 70 20 3d 20 32 2a 4f 50 5f 53 68      op = 2*OP_Sh
b8f0: 69 66 74 4c 65 66 74 20 2b 20 31 20 2d 20 6f 70  iftLeft + 1 - op
b900: 3b 0a 20 20 20 20 20 20 69 42 20 3d 20 69 42 3e  ;.      iB = iB>
b910: 28 2d 36 34 29 20 3f 20 2d 69 42 20 3a 20 36 34  (-64) ? -iB : 64
b920: 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69 66 28  ;.    }..    if(
b930: 20 69 42 3e 3d 36 34 20 29 7b 0a 20 20 20 20 20   iB>=64 ){.     
b940: 20 69 41 20 3d 20 28 69 41 3e 3d 30 20 7c 7c 20   iA = (iA>=0 || 
b950: 6f 70 3d 3d 4f 50 5f 53 68 69 66 74 4c 65 66 74  op==OP_ShiftLeft
b960: 29 20 3f 20 30 20 3a 20 2d 31 3b 0a 20 20 20 20  ) ? 0 : -1;.    
b970: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 6d 65 6d  }else{.      mem
b980: 63 70 79 28 26 75 41 2c 20 26 69 41 2c 20 73 69  cpy(&uA, &iA, si
b990: 7a 65 6f 66 28 75 41 29 29 3b 0a 20 20 20 20 20  zeof(uA));.     
b9a0: 20 69 66 28 20 6f 70 3d 3d 4f 50 5f 53 68 69 66   if( op==OP_Shif
b9b0: 74 4c 65 66 74 20 29 7b 0a 20 20 20 20 20 20 20  tLeft ){.       
b9c0: 20 75 41 20 3c 3c 3d 20 69 42 3b 0a 20 20 20 20   uA <<= iB;.    
b9d0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
b9e0: 20 75 41 20 3e 3e 3d 20 69 42 3b 0a 20 20 20 20   uA >>= iB;.    
b9f0: 20 20 20 20 2f 2a 20 53 69 67 6e 2d 65 78 74 65      /* Sign-exte
ba00: 6e 64 20 6f 6e 20 61 20 72 69 67 68 74 20 73 68  nd on a right sh
ba10: 69 66 74 20 6f 66 20 61 20 6e 65 67 61 74 69 76  ift of a negativ
ba20: 65 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20  e number */.    
ba30: 20 20 20 20 69 66 28 20 69 41 3c 30 20 29 20 75      if( iA<0 ) u
ba40: 41 20 7c 3d 20 28 28 28 28 75 36 34 29 30 78 66  A |= ((((u64)0xf
ba50: 66 66 66 66 66 66 66 29 3c 3c 33 32 29 7c 30 78  fffffff)<<32)|0x
ba60: 66 66 66 66 66 66 66 66 29 20 3c 3c 20 28 36 34  ffffffff) << (64
ba70: 2d 69 42 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  -iB);.      }.  
ba80: 20 20 20 20 6d 65 6d 63 70 79 28 26 69 41 2c 20      memcpy(&iA, 
ba90: 26 75 41 2c 20 73 69 7a 65 6f 66 28 69 41 29 29  &uA, sizeof(iA))
baa0: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 70 4f  ;.    }.  }.  pO
bab0: 75 74 2d 3e 75 2e 69 20 3d 20 69 41 3b 0a 20 20  ut->u.i = iA;.  
bac0: 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
bad0: 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20  Out, MEM_Int);. 
bae0: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
baf0: 63 6f 64 65 3a 20 41 64 64 49 6d 6d 20 20 50 31  code: AddImm  P1
bb00: 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 0a 2a 2a   P2 * * *.** .**
bb10: 20 41 64 64 20 74 68 65 20 63 6f 6e 73 74 61 6e   Add the constan
bb20: 74 20 50 32 20 74 6f 20 74 68 65 20 76 61 6c 75  t P2 to the valu
bb30: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
bb40: 2e 0a 2a 2a 20 54 68 65 20 72 65 73 75 6c 74 20  ..** The result 
bb50: 69 73 20 61 6c 77 61 79 73 20 61 6e 20 69 6e 74  is always an int
bb60: 65 67 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 6f 20 66  eger..**.** To f
bb70: 6f 72 63 65 20 61 6e 79 20 72 65 67 69 73 74 65  orce any registe
bb80: 72 20 74 6f 20 62 65 20 61 6e 20 69 6e 74 65 67  r to be an integ
bb90: 65 72 2c 20 6a 75 73 74 20 61 64 64 20 30 2e 0a  er, just add 0..
bba0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 64 64 49 6d  */.case OP_AddIm
bbb0: 6d 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  m: {            
bbc0: 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31  /* in1 */.  pIn1
bbd0: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
bbe0: 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43  ];.  memAboutToC
bbf0: 68 61 6e 67 65 28 70 2c 20 70 49 6e 31 29 3b 0a  hange(p, pIn1);.
bc00: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
bc10: 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e 31 29  Integerify(pIn1)
bc20: 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 20 2b 3d  ;.  pIn1->u.i +=
bc30: 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 62 72 65 61   pOp->p2;.  brea
bc40: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
bc50: 20 4d 75 73 74 42 65 49 6e 74 20 50 31 20 50 32   MustBeInt P1 P2
bc60: 20 2a 20 2a 20 2a 0a 2a 2a 20 0a 2a 2a 20 46 6f   * * *.** .** Fo
bc70: 72 63 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e  rce the value in
bc80: 20 72 65 67 69 73 74 65 72 20 50 31 20 74 6f 20   register P1 to 
bc90: 62 65 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20  be an integer.  
bca0: 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20  If the value.** 
bcb0: 69 6e 20 50 31 20 69 73 20 6e 6f 74 20 61 6e 20  in P1 is not an 
bcc0: 69 6e 74 65 67 65 72 20 61 6e 64 20 63 61 6e 6e  integer and cann
bcd0: 6f 74 20 62 65 20 63 6f 6e 76 65 72 74 65 64 20  ot be converted 
bce0: 69 6e 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 0a  into an integer.
bcf0: 2a 2a 20 77 69 74 68 6f 75 74 20 64 61 74 61 20  ** without data 
bd00: 6c 6f 73 73 2c 20 74 68 65 6e 20 6a 75 6d 70 20  loss, then jump 
bd10: 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50  immediately to P
bd20: 32 2c 20 6f 72 20 69 66 20 50 32 3d 3d 30 0a 2a  2, or if P2==0.*
bd30: 2a 20 72 61 69 73 65 20 61 6e 20 53 51 4c 49 54  * raise an SQLIT
bd40: 45 5f 4d 49 53 4d 41 54 43 48 20 65 78 63 65 70  E_MISMATCH excep
bd50: 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  tion..*/.case OP
bd60: 5f 4d 75 73 74 42 65 49 6e 74 3a 20 7b 20 20 20  _MustBeInt: {   
bd70: 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
bd80: 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20  , in1 */.  pIn1 
bd90: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
bda0: 3b 0a 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74  ;.  applyAffinit
bdb0: 79 28 70 49 6e 31 2c 20 53 51 4c 49 54 45 5f 41  y(pIn1, SQLITE_A
bdc0: 46 46 5f 4e 55 4d 45 52 49 43 2c 20 65 6e 63 6f  FF_NUMERIC, enco
bdd0: 64 69 6e 67 29 3b 0a 20 20 69 66 28 20 28 70 49  ding);.  if( (pI
bde0: 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
bdf0: 49 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69  Int)==0 ){.    i
be00: 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 30 20 29 7b  f( pOp->p2==0 ){
be10: 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49  .      rc = SQLI
be20: 54 45 5f 4d 49 53 4d 41 54 43 48 3b 0a 20 20 20  TE_MISMATCH;.   
be30: 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
be40: 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
be50: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 70 63 20  }else{.      pc 
be60: 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
be70: 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20     }.  }else{.  
be80: 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
be90: 28 70 49 6e 31 2c 20 4d 45 4d 5f 49 6e 74 29 3b  (pIn1, MEM_Int);
bea0: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
beb0: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
bec0: 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f  OMIT_FLOATING_PO
bed0: 49 4e 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  INT./* Opcode: R
bee0: 65 61 6c 41 66 66 69 6e 69 74 79 20 50 31 20 2a  ealAffinity P1 *
bef0: 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20   * * *.**.** If 
bf00: 72 65 67 69 73 74 65 72 20 50 31 20 68 6f 6c 64  register P1 hold
bf10: 73 20 61 6e 20 69 6e 74 65 67 65 72 20 63 6f 6e  s an integer con
bf20: 76 65 72 74 20 69 74 20 74 6f 20 61 20 72 65 61  vert it to a rea
bf30: 6c 20 76 61 6c 75 65 2e 0a 2a 2a 0a 2a 2a 20 54  l value..**.** T
bf40: 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 75 73  his opcode is us
bf50: 65 64 20 77 68 65 6e 20 65 78 74 72 61 63 74 69  ed when extracti
bf60: 6e 67 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66  ng information f
bf70: 72 6f 6d 20 61 20 63 6f 6c 75 6d 6e 20 74 68 61  rom a column tha
bf80: 74 0a 2a 2a 20 68 61 73 20 52 45 41 4c 20 61 66  t.** has REAL af
bf90: 66 69 6e 69 74 79 2e 20 20 53 75 63 68 20 63 6f  finity.  Such co
bfa0: 6c 75 6d 6e 20 76 61 6c 75 65 73 20 6d 61 79 20  lumn values may 
bfb0: 73 74 69 6c 6c 20 62 65 20 73 74 6f 72 65 64 20  still be stored 
bfc0: 61 73 0a 2a 2a 20 69 6e 74 65 67 65 72 73 2c 20  as.** integers, 
bfd0: 66 6f 72 20 73 70 61 63 65 20 65 66 66 69 63 69  for space effici
bfe0: 65 6e 63 79 2c 20 62 75 74 20 61 66 74 65 72 20  ency, but after 
bff0: 65 78 74 72 61 63 74 69 6f 6e 20 77 65 20 77 61  extraction we wa
c000: 6e 74 20 74 68 65 6d 0a 2a 2a 20 74 6f 20 68 61  nt them.** to ha
c010: 76 65 20 6f 6e 6c 79 20 61 20 72 65 61 6c 20 76  ve only a real v
c020: 61 6c 75 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  alue..*/.case OP
c030: 5f 52 65 61 6c 41 66 66 69 6e 69 74 79 3a 20 7b  _RealAffinity: {
c040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c050: 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 70 49    /* in1 */.  pI
c060: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
c070: 70 31 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d  p1];.  if( pIn1-
c080: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
c090: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
c0a0: 64 62 65 4d 65 6d 52 65 61 6c 69 66 79 28 70 49  dbeMemRealify(pI
c0b0: 6e 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  n1);.  }.  break
c0c0: 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e  ;.}.#endif..#ifn
c0d0: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
c0e0: 43 41 53 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  CAST./* Opcode: 
c0f0: 54 6f 54 65 78 74 20 50 31 20 2a 20 2a 20 2a 20  ToText P1 * * * 
c100: 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68  *.**.** Force th
c110: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
c120: 74 65 72 20 50 31 20 74 6f 20 62 65 20 74 65 78  ter P1 to be tex
c130: 74 2e 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c  t..** If the val
c140: 75 65 20 69 73 20 6e 75 6d 65 72 69 63 2c 20 63  ue is numeric, c
c150: 6f 6e 76 65 72 74 20 69 74 20 74 6f 20 61 20 73  onvert it to a s
c160: 74 72 69 6e 67 20 75 73 69 6e 67 20 74 68 65 0a  tring using the.
c170: 2a 2a 20 65 71 75 69 76 61 6c 65 6e 74 20 6f 66  ** equivalent of
c180: 20 70 72 69 6e 74 66 28 29 2e 20 20 42 6c 6f 62   printf().  Blob
c190: 20 76 61 6c 75 65 73 20 61 72 65 20 75 6e 63 68   values are unch
c1a0: 61 6e 67 65 64 20 61 6e 64 0a 2a 2a 20 61 72 65  anged and.** are
c1b0: 20 61 66 74 65 72 77 61 72 64 73 20 73 69 6d 70   afterwards simp
c1c0: 6c 79 20 69 6e 74 65 72 70 72 65 74 65 64 20 61  ly interpreted a
c1d0: 73 20 74 65 78 74 2e 0a 2a 2a 0a 2a 2a 20 41 20  s text..**.** A 
c1e0: 4e 55 4c 4c 20 76 61 6c 75 65 20 69 73 20 6e 6f  NULL value is no
c1f0: 74 20 63 68 61 6e 67 65 64 20 62 79 20 74 68 69  t changed by thi
c200: 73 20 72 6f 75 74 69 6e 65 2e 20 20 49 74 20 72  s routine.  It r
c210: 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a  emains NULL..*/.
c220: 63 61 73 65 20 4f 50 5f 54 6f 54 65 78 74 3a 20  case OP_ToText: 
c230: 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
c240: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
c250: 5f 54 4f 5f 54 45 58 54 2c 20 69 6e 31 20 2a 2f  _TO_TEXT, in1 */
c260: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
c270: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 6d 65 6d 41  pOp->p1];.  memA
c280: 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
c290: 70 49 6e 31 29 3b 0a 20 20 69 66 28 20 70 49 6e  pIn1);.  if( pIn
c2a0: 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  1->flags & MEM_N
c2b0: 75 6c 6c 20 29 20 62 72 65 61 6b 3b 0a 20 20 61  ull ) break;.  a
c2c0: 73 73 65 72 74 28 20 4d 45 4d 5f 53 74 72 3d 3d  ssert( MEM_Str==
c2d0: 28 4d 45 4d 5f 42 6c 6f 62 3e 3e 33 29 20 29 3b  (MEM_Blob>>3) );
c2e0: 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c  .  pIn1->flags |
c2f0: 3d 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d  = (pIn1->flags&M
c300: 45 4d 5f 42 6c 6f 62 29 3e 3e 33 3b 0a 20 20 61  EM_Blob)>>3;.  a
c310: 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70 49 6e  pplyAffinity(pIn
c320: 31 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45  1, SQLITE_AFF_TE
c330: 58 54 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  XT, encoding);. 
c340: 20 72 63 20 3d 20 45 78 70 61 6e 64 42 6c 6f 62   rc = ExpandBlob
c350: 28 70 49 6e 31 29 3b 0a 20 20 61 73 73 65 72 74  (pIn1);.  assert
c360: 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20  ( pIn1->flags & 
c370: 4d 45 4d 5f 53 74 72 20 7c 7c 20 64 62 2d 3e 6d  MEM_Str || db->m
c380: 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 3b 0a 20  allocFailed );. 
c390: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 3d 20   pIn1->flags &= 
c3a0: 7e 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65  ~(MEM_Int|MEM_Re
c3b0: 61 6c 7c 4d 45 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f  al|MEM_Blob|MEM_
c3c0: 5a 65 72 6f 29 3b 0a 20 20 55 50 44 41 54 45 5f  Zero);.  UPDATE_
c3d0: 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 49 6e  MAX_BLOBSIZE(pIn
c3e0: 31 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  1);.  break;.}..
c3f0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 6f 42 6c 6f  /* Opcode: ToBlo
c400: 62 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a  b P1 * * * *.**.
c410: 2a 2a 20 46 6f 72 63 65 20 74 68 65 20 76 61 6c  ** Force the val
c420: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
c430: 31 20 74 6f 20 62 65 20 61 20 42 4c 4f 42 2e 0a  1 to be a BLOB..
c440: 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65 20  ** If the value 
c450: 69 73 20 6e 75 6d 65 72 69 63 2c 20 63 6f 6e 76  is numeric, conv
c460: 65 72 74 20 69 74 20 74 6f 20 61 20 73 74 72 69  ert it to a stri
c470: 6e 67 20 66 69 72 73 74 2e 0a 2a 2a 20 53 74 72  ng first..** Str
c480: 69 6e 67 73 20 61 72 65 20 73 69 6d 70 6c 79 20  ings are simply 
c490: 72 65 69 6e 74 65 72 70 72 65 74 65 64 20 61 73  reinterpreted as
c4a0: 20 62 6c 6f 62 73 20 77 69 74 68 20 6e 6f 20 63   blobs with no c
c4b0: 68 61 6e 67 65 0a 2a 2a 20 74 6f 20 74 68 65 20  hange.** to the 
c4c0: 75 6e 64 65 72 6c 79 69 6e 67 20 64 61 74 61 2e  underlying data.
c4d0: 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76 61  .**.** A NULL va
c4e0: 6c 75 65 20 69 73 20 6e 6f 74 20 63 68 61 6e 67  lue is not chang
c4f0: 65 64 20 62 79 20 74 68 69 73 20 72 6f 75 74 69  ed by this routi
c500: 6e 65 2e 20 20 49 74 20 72 65 6d 61 69 6e 73 20  ne.  It remains 
c510: 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  NULL..*/.case OP
c520: 5f 54 6f 42 6c 6f 62 3a 20 7b 20 20 20 20 20 20  _ToBlob: {      
c530: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
c540: 61 6d 65 20 61 73 20 54 4b 5f 54 4f 5f 42 4c 4f  ame as TK_TO_BLO
c550: 42 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31  B, in1 */.  pIn1
c560: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
c570: 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66  ];.  if( pIn1->f
c580: 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20  lags & MEM_Null 
c590: 29 20 62 72 65 61 6b 3b 0a 20 20 69 66 28 20 28  ) break;.  if( (
c5a0: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
c5b0: 4d 5f 42 6c 6f 62 29 3d 3d 30 20 29 7b 0a 20 20  M_Blob)==0 ){.  
c5c0: 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28    applyAffinity(
c5d0: 70 49 6e 31 2c 20 53 51 4c 49 54 45 5f 41 46 46  pIn1, SQLITE_AFF
c5e0: 5f 54 45 58 54 2c 20 65 6e 63 6f 64 69 6e 67 29  _TEXT, encoding)
c5f0: 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 49  ;.    assert( pI
c600: 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
c610: 53 74 72 20 7c 7c 20 64 62 2d 3e 6d 61 6c 6c 6f  Str || db->mallo
c620: 63 46 61 69 6c 65 64 20 29 3b 0a 20 20 20 20 4d  cFailed );.    M
c630: 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 49  emSetTypeFlag(pI
c640: 6e 31 2c 20 4d 45 4d 5f 42 6c 6f 62 29 3b 0a 20  n1, MEM_Blob);. 
c650: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 49 6e 31   }else{.    pIn1
c660: 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 28 4d 45 4d  ->flags &= ~(MEM
c670: 5f 54 79 70 65 4d 61 73 6b 26 7e 4d 45 4d 5f 42  _TypeMask&~MEM_B
c680: 6c 6f 62 29 3b 0a 20 20 7d 0a 20 20 55 50 44 41  lob);.  }.  UPDA
c690: 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
c6a0: 70 49 6e 31 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  pIn1);.  break;.
c6b0: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 6f  }../* Opcode: To
c6c0: 4e 75 6d 65 72 69 63 20 50 31 20 2a 20 2a 20 2a  Numeric P1 * * *
c6d0: 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74   *.**.** Force t
c6e0: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
c6f0: 73 74 65 72 20 50 31 20 74 6f 20 62 65 20 6e 75  ster P1 to be nu
c700: 6d 65 72 69 63 20 28 65 69 74 68 65 72 20 61 6e  meric (either an
c710: 0a 2a 2a 20 69 6e 74 65 67 65 72 20 6f 72 20 61  .** integer or a
c720: 20 66 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e 74 20   floating-point 
c730: 6e 75 6d 62 65 72 2e 29 0a 2a 2a 20 49 66 20 74  number.).** If t
c740: 68 65 20 76 61 6c 75 65 20 69 73 20 74 65 78 74  he value is text
c750: 20 6f 72 20 62 6c 6f 62 2c 20 74 72 79 20 74 6f   or blob, try to
c760: 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f 20 61   convert it to a
c770: 6e 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 65  n using the.** e
c780: 71 75 69 76 61 6c 65 6e 74 20 6f 66 20 61 74 6f  quivalent of ato
c790: 69 28 29 20 6f 72 20 61 74 6f 66 28 29 20 61 6e  i() or atof() an
c7a0: 64 20 73 74 6f 72 65 20 30 20 69 66 20 6e 6f 20  d store 0 if no 
c7b0: 73 75 63 68 20 63 6f 6e 76 65 72 73 69 6f 6e 20  such conversion 
c7c0: 0a 2a 2a 20 69 73 20 70 6f 73 73 69 62 6c 65 2e  .** is possible.
c7d0: 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76 61  .**.** A NULL va
c7e0: 6c 75 65 20 69 73 20 6e 6f 74 20 63 68 61 6e 67  lue is not chang
c7f0: 65 64 20 62 79 20 74 68 69 73 20 72 6f 75 74 69  ed by this routi
c800: 6e 65 2e 20 20 49 74 20 72 65 6d 61 69 6e 73 20  ne.  It remains 
c810: 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  NULL..*/.case OP
c820: 5f 54 6f 4e 75 6d 65 72 69 63 3a 20 7b 20 20 20  _ToNumeric: {   
c830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c840: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 54 4f 5f  * same as TK_TO_
c850: 4e 55 4d 45 52 49 43 2c 20 69 6e 31 20 2a 2f 0a  NUMERIC, in1 */.
c860: 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
c870: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 73 71 6c 69 74  Op->p1];.  sqlit
c880: 65 33 56 64 62 65 4d 65 6d 4e 75 6d 65 72 69 66  e3VdbeMemNumerif
c890: 79 28 70 49 6e 31 29 3b 0a 20 20 62 72 65 61 6b  y(pIn1);.  break
c8a0: 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ;.}.#endif /* SQ
c8b0: 4c 49 54 45 5f 4f 4d 49 54 5f 43 41 53 54 20 2a  LITE_OMIT_CAST *
c8c0: 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 6f  /../* Opcode: To
c8d0: 49 6e 74 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a  Int P1 * * * *.*
c8e0: 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65 20 76  *.** Force the v
c8f0: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
c900: 20 50 31 20 74 6f 20 62 65 20 61 6e 20 69 6e 74   P1 to be an int
c910: 65 67 65 72 2e 20 20 49 66 0a 2a 2a 20 54 68 65  eger.  If.** The
c920: 20 76 61 6c 75 65 20 69 73 20 63 75 72 72 65 6e   value is curren
c930: 74 6c 79 20 61 20 72 65 61 6c 20 6e 75 6d 62 65  tly a real numbe
c940: 72 2c 20 64 72 6f 70 20 69 74 73 20 66 72 61 63  r, drop its frac
c950: 74 69 6f 6e 61 6c 20 70 61 72 74 2e 0a 2a 2a 20  tional part..** 
c960: 49 66 20 74 68 65 20 76 61 6c 75 65 20 69 73 20  If the value is 
c970: 74 65 78 74 20 6f 72 20 62 6c 6f 62 2c 20 74 72  text or blob, tr
c980: 79 20 74 6f 20 63 6f 6e 76 65 72 74 20 69 74 20  y to convert it 
c990: 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 75 73  to an integer us
c9a0: 69 6e 67 20 74 68 65 0a 2a 2a 20 65 71 75 69 76  ing the.** equiv
c9b0: 61 6c 65 6e 74 20 6f 66 20 61 74 6f 69 28 29 20  alent of atoi() 
c9c0: 61 6e 64 20 73 74 6f 72 65 20 30 20 69 66 20 6e  and store 0 if n
c9d0: 6f 20 73 75 63 68 20 63 6f 6e 76 65 72 73 69 6f  o such conversio
c9e0: 6e 20 69 73 20 70 6f 73 73 69 62 6c 65 2e 0a 2a  n is possible..*
c9f0: 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76 61 6c 75  *.** A NULL valu
ca00: 65 20 69 73 20 6e 6f 74 20 63 68 61 6e 67 65 64  e is not changed
ca10: 20 62 79 20 74 68 69 73 20 72 6f 75 74 69 6e 65   by this routine
ca20: 2e 20 20 49 74 20 72 65 6d 61 69 6e 73 20 4e 55  .  It remains NU
ca30: 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54  LL..*/.case OP_T
ca40: 6f 49 6e 74 3a 20 7b 20 20 20 20 20 20 20 20 20  oInt: {         
ca50: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
ca60: 20 61 73 20 54 4b 5f 54 4f 5f 49 4e 54 2c 20 69   as TK_TO_INT, i
ca70: 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26  n1 */.  pIn1 = &
ca80: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
ca90: 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67   if( (pIn1->flag
caa0: 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30  s & MEM_Null)==0
cab0: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
cac0: 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79  dbeMemIntegerify
cad0: 28 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20 62 72  (pIn1);.  }.  br
cae0: 65 61 6b 3b 0a 7d 0a 0a 23 69 66 20 21 64 65 66  eak;.}..#if !def
caf0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
cb00: 5f 43 41 53 54 29 20 26 26 20 21 64 65 66 69 6e  _CAST) && !defin
cb10: 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ed(SQLITE_OMIT_F
cb20: 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 29 0a 2f  LOATING_POINT)./
cb30: 2a 20 4f 70 63 6f 64 65 3a 20 54 6f 52 65 61 6c  * Opcode: ToReal
cb40: 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   P1 * * * *.**.*
cb50: 2a 20 46 6f 72 63 65 20 74 68 65 20 76 61 6c 75  * Force the valu
cb60: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
cb70: 20 74 6f 20 62 65 20 61 20 66 6c 6f 61 74 69 6e   to be a floatin
cb80: 67 20 70 6f 69 6e 74 20 6e 75 6d 62 65 72 2e 0a  g point number..
cb90: 2a 2a 20 49 66 20 54 68 65 20 76 61 6c 75 65 20  ** If The value 
cba0: 69 73 20 63 75 72 72 65 6e 74 6c 79 20 61 6e 20  is currently an 
cbb0: 69 6e 74 65 67 65 72 2c 20 63 6f 6e 76 65 72 74  integer, convert
cbc0: 20 69 74 2e 0a 2a 2a 20 49 66 20 74 68 65 20 76   it..** If the v
cbd0: 61 6c 75 65 20 69 73 20 74 65 78 74 20 6f 72 20  alue is text or 
cbe0: 62 6c 6f 62 2c 20 74 72 79 20 74 6f 20 63 6f 6e  blob, try to con
cbf0: 76 65 72 74 20 69 74 20 74 6f 20 61 6e 20 69 6e  vert it to an in
cc00: 74 65 67 65 72 20 75 73 69 6e 67 20 74 68 65 0a  teger using the.
cc10: 2a 2a 20 65 71 75 69 76 61 6c 65 6e 74 20 6f 66  ** equivalent of
cc20: 20 61 74 6f 69 28 29 20 61 6e 64 20 73 74 6f 72   atoi() and stor
cc30: 65 20 30 2e 30 20 69 66 20 6e 6f 20 73 75 63 68  e 0.0 if no such
cc40: 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69 73 20 70   conversion is p
cc50: 6f 73 73 69 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41  ossible..**.** A
cc60: 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69 73 20 6e   NULL value is n
cc70: 6f 74 20 63 68 61 6e 67 65 64 20 62 79 20 74 68  ot changed by th
cc80: 69 73 20 72 6f 75 74 69 6e 65 2e 20 20 49 74 20  is routine.  It 
cc90: 72 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f  remains NULL..*/
cca0: 0a 63 61 73 65 20 4f 50 5f 54 6f 52 65 61 6c 3a  .case OP_ToReal:
ccb0: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
ccc0: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
ccd0: 4b 5f 54 4f 5f 52 45 41 4c 2c 20 69 6e 31 20 2a  K_TO_REAL, in1 *
cce0: 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
ccf0: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 6d 65 6d  [pOp->p1];.  mem
cd00: 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
cd10: 20 70 49 6e 31 29 3b 0a 20 20 69 66 28 20 28 70   pIn1);.  if( (p
cd20: 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
cd30: 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20 20  _Null)==0 ){.   
cd40: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52   sqlite3VdbeMemR
cd50: 65 61 6c 69 66 79 28 70 49 6e 31 29 3b 0a 20 20  ealify(pIn1);.  
cd60: 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  }.  break;.}.#en
cd70: 64 69 66 20 2f 2a 20 21 64 65 66 69 6e 65 64 28  dif /* !defined(
cd80: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 41 53 54  SQLITE_OMIT_CAST
cd90: 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51  ) && !defined(SQ
cda0: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49  LITE_OMIT_FLOATI
cdb0: 4e 47 5f 50 4f 49 4e 54 29 20 2a 2f 0a 0a 2f 2a  NG_POINT) */../*
cdc0: 20 4f 70 63 6f 64 65 3a 20 4c 74 20 50 31 20 50   Opcode: Lt P1 P
cdd0: 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a  2 P3 P4 P5.**.**
cde0: 20 43 6f 6d 70 61 72 65 20 74 68 65 20 76 61 6c   Compare the val
cdf0: 75 65 73 20 69 6e 20 72 65 67 69 73 74 65 72 20  ues in register 
ce00: 50 31 20 61 6e 64 20 50 33 2e 20 20 49 66 20 72  P1 and P3.  If r
ce10: 65 67 28 50 33 29 3c 72 65 67 28 50 31 29 20 74  eg(P3)<reg(P1) t
ce20: 68 65 6e 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20 61  hen.** jump to a
ce30: 64 64 72 65 73 73 20 50 32 2e 20 20 0a 2a 2a 0a  ddress P2.  .**.
ce40: 2a 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54 45  ** If the SQLITE
ce50: 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 62 69 74 20  _JUMPIFNULL bit 
ce60: 6f 66 20 50 35 20 69 73 20 73 65 74 20 61 6e 64  of P5 is set and
ce70: 20 65 69 74 68 65 72 20 72 65 67 28 50 31 29 20   either reg(P1) 
ce80: 6f 72 0a 2a 2a 20 72 65 67 28 50 33 29 20 69 73  or.** reg(P3) is
ce90: 20 4e 55 4c 4c 20 74 68 65 6e 20 74 61 6b 65 20   NULL then take 
cea0: 74 68 65 20 6a 75 6d 70 2e 20 20 49 66 20 74 68  the jump.  If th
ceb0: 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e  e SQLITE_JUMPIFN
cec0: 55 4c 4c 20 0a 2a 2a 20 62 69 74 20 69 73 20 63  ULL .** bit is c
ced0: 6c 65 61 72 20 74 68 65 6e 20 66 61 6c 6c 20 74  lear then fall t
cee0: 68 72 6f 75 67 68 20 69 66 20 65 69 74 68 65 72  hrough if either
cef0: 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c   operand is NULL
cf00: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49  ..**.** The SQLI
cf10: 54 45 5f 41 46 46 5f 4d 41 53 4b 20 70 6f 72 74  TE_AFF_MASK port
cf20: 69 6f 6e 20 6f 66 20 50 35 20 6d 75 73 74 20 62  ion of P5 must b
cf30: 65 20 61 6e 20 61 66 66 69 6e 69 74 79 20 63 68  e an affinity ch
cf40: 61 72 61 63 74 65 72 20 2d 0a 2a 2a 20 53 51 4c  aracter -.** SQL
cf50: 49 54 45 5f 41 46 46 5f 54 45 58 54 2c 20 53 51  ITE_AFF_TEXT, SQ
cf60: 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52  LITE_AFF_INTEGER
cf70: 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20  , and so forth. 
cf80: 41 6e 20 61 74 74 65 6d 70 74 20 69 73 20 6d 61  An attempt is ma
cf90: 64 65 20 0a 2a 2a 20 74 6f 20 63 6f 65 72 63 65  de .** to coerce
cfa0: 20 62 6f 74 68 20 69 6e 70 75 74 73 20 61 63 63   both inputs acc
cfb0: 6f 72 64 69 6e 67 20 74 6f 20 74 68 69 73 20 61  ording to this a
cfc0: 66 66 69 6e 69 74 79 20 62 65 66 6f 72 65 20 74  ffinity before t
cfd0: 68 65 0a 2a 2a 20 63 6f 6d 70 61 72 69 73 6f 6e  he.** comparison
cfe0: 20 69 73 20 6d 61 64 65 2e 20 49 66 20 74 68 65   is made. If the
cff0: 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b   SQLITE_AFF_MASK
d000: 20 69 73 20 30 78 30 30 2c 20 74 68 65 6e 20 6e   is 0x00, then n
d010: 75 6d 65 72 69 63 0a 2a 2a 20 61 66 66 69 6e 69  umeric.** affini
d020: 74 79 20 69 73 20 75 73 65 64 2e 20 4e 6f 74 65  ty is used. Note
d030: 20 74 68 61 74 20 74 68 65 20 61 66 66 69 6e 69   that the affini
d040: 74 79 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20 61  ty conversions a
d050: 72 65 20 73 74 6f 72 65 64 0a 2a 2a 20 62 61 63  re stored.** bac
d060: 6b 20 69 6e 74 6f 20 74 68 65 20 69 6e 70 75 74  k into the input
d070: 20 72 65 67 69 73 74 65 72 73 20 50 31 20 61 6e   registers P1 an
d080: 64 20 50 33 2e 20 20 53 6f 20 74 68 69 73 20 6f  d P3.  So this o
d090: 70 63 6f 64 65 20 63 61 6e 20 63 61 75 73 65 0a  pcode can cause.
d0a0: 2a 2a 20 70 65 72 73 69 73 74 65 6e 74 20 63 68  ** persistent ch
d0b0: 61 6e 67 65 73 20 74 6f 20 72 65 67 69 73 74 65  anges to registe
d0c0: 72 73 20 50 31 20 61 6e 64 20 50 33 2e 0a 2a 2a  rs P1 and P3..**
d0d0: 0a 2a 2a 20 4f 6e 63 65 20 61 6e 79 20 63 6f 6e  .** Once any con
d0e0: 76 65 72 73 69 6f 6e 73 20 68 61 76 65 20 74 61  versions have ta
d0f0: 6b 65 6e 20 70 6c 61 63 65 2c 20 61 6e 64 20 6e  ken place, and n
d100: 65 69 74 68 65 72 20 76 61 6c 75 65 20 69 73 20  either value is 
d110: 4e 55 4c 4c 2c 20 0a 2a 2a 20 74 68 65 20 76 61  NULL, .** the va
d120: 6c 75 65 73 20 61 72 65 20 63 6f 6d 70 61 72 65  lues are compare
d130: 64 2e 20 49 66 20 62 6f 74 68 20 76 61 6c 75 65  d. If both value
d140: 73 20 61 72 65 20 62 6c 6f 62 73 20 74 68 65 6e  s are blobs then
d150: 20 6d 65 6d 63 6d 70 28 29 20 69 73 0a 2a 2a 20   memcmp() is.** 
d160: 75 73 65 64 20 74 6f 20 64 65 74 65 72 6d 69 6e  used to determin
d170: 65 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66  e the results of
d180: 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e   the comparison.
d190: 20 20 49 66 20 62 6f 74 68 20 76 61 6c 75 65 73    If both values
d1a0: 0a 2a 2a 20 61 72 65 20 74 65 78 74 2c 20 74 68  .** are text, th
d1b0: 65 6e 20 74 68 65 20 61 70 70 72 6f 70 72 69 61  en the appropria
d1c0: 74 65 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e  te collating fun
d1d0: 63 74 69 6f 6e 20 73 70 65 63 69 66 69 65 64 20  ction specified 
d1e0: 69 6e 0a 2a 2a 20 50 34 20 69 73 20 20 75 73 65  in.** P4 is  use
d1f0: 64 20 74 6f 20 64 6f 20 74 68 65 20 63 6f 6d 70  d to do the comp
d200: 61 72 69 73 6f 6e 2e 20 20 49 66 20 50 34 20 69  arison.  If P4 i
d210: 73 20 6e 6f 74 20 73 70 65 63 69 66 69 65 64 20  s not specified 
d220: 74 68 65 6e 0a 2a 2a 20 6d 65 6d 63 6d 70 28 29  then.** memcmp()
d230: 20 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6d 70   is used to comp
d240: 61 72 65 20 74 65 78 74 20 73 74 72 69 6e 67 2e  are text string.
d250: 20 20 49 66 20 62 6f 74 68 20 76 61 6c 75 65 73    If both values
d260: 20 61 72 65 0a 2a 2a 20 6e 75 6d 65 72 69 63 2c   are.** numeric,
d270: 20 74 68 65 6e 20 61 20 6e 75 6d 65 72 69 63 20   then a numeric 
d280: 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 75 73  comparison is us
d290: 65 64 2e 20 49 66 20 74 68 65 20 74 77 6f 20 76  ed. If the two v
d2a0: 61 6c 75 65 73 0a 2a 2a 20 61 72 65 20 6f 66 20  alues.** are of 
d2b0: 64 69 66 66 65 72 65 6e 74 20 74 79 70 65 73 2c  different types,
d2c0: 20 74 68 65 6e 20 6e 75 6d 62 65 72 73 20 61 72   then numbers ar
d2d0: 65 20 63 6f 6e 73 69 64 65 72 65 64 20 6c 65 73  e considered les
d2e0: 73 20 74 68 61 6e 0a 2a 2a 20 73 74 72 69 6e 67  s than.** string
d2f0: 73 20 61 6e 64 20 73 74 72 69 6e 67 73 20 61 72  s and strings ar
d300: 65 20 63 6f 6e 73 69 64 65 72 65 64 20 6c 65 73  e considered les
d310: 73 20 74 68 61 6e 20 62 6c 6f 62 73 2e 0a 2a 2a  s than blobs..**
d320: 0a 2a 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54  .** If the SQLIT
d330: 45 5f 53 54 4f 52 45 50 32 20 62 69 74 20 6f 66  E_STOREP2 bit of
d340: 20 50 35 20 69 73 20 73 65 74 2c 20 74 68 65 6e   P5 is set, then
d350: 20 64 6f 20 6e 6f 74 20 6a 75 6d 70 2e 20 20 49   do not jump.  I
d360: 6e 73 74 65 61 64 2c 0a 2a 2a 20 73 74 6f 72 65  nstead,.** store
d370: 20 61 20 62 6f 6f 6c 65 61 6e 20 72 65 73 75 6c   a boolean resul
d380: 74 20 28 65 69 74 68 65 72 20 30 2c 20 6f 72 20  t (either 0, or 
d390: 31 2c 20 6f 72 20 4e 55 4c 4c 29 20 69 6e 20 72  1, or NULL) in r
d3a0: 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 2f  egister P2..*/./
d3b0: 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 20 50 31 20  * Opcode: Ne P1 
d3c0: 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a  P2 P3 P4 P5.**.*
d3d0: 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73  * This works jus
d3e0: 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70  t like the Lt op
d3f0: 63 6f 64 65 20 65 78 63 65 70 74 20 74 68 61 74  code except that
d400: 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b   the jump is tak
d410: 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 6f 70 65  en if.** the ope
d420: 72 61 6e 64 73 20 69 6e 20 72 65 67 69 73 74 65  rands in registe
d430: 72 73 20 50 31 20 61 6e 64 20 50 33 20 61 72 65  rs P1 and P3 are
d440: 20 6e 6f 74 20 65 71 75 61 6c 2e 20 20 53 65 65   not equal.  See
d450: 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66   the Lt opcode f
d460: 6f 72 0a 2a 2a 20 61 64 64 69 74 69 6f 6e 61 6c  or.** additional
d470: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2a   information..**
d480: 0a 2a 2a 20 49 66 20 53 51 4c 49 54 45 5f 4e 55  .** If SQLITE_NU
d490: 4c 4c 45 51 20 69 73 20 73 65 74 20 69 6e 20 50  LLEQ is set in P
d4a0: 35 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c  5 then the resul
d4b0: 74 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20  t of comparison 
d4c0: 69 73 20 61 6c 77 61 79 73 20 65 69 74 68 65 72  is always either
d4d0: 0a 2a 2a 20 74 72 75 65 20 6f 72 20 66 61 6c 73  .** true or fals
d4e0: 65 20 61 6e 64 20 69 73 20 6e 65 76 65 72 20 4e  e and is never N
d4f0: 55 4c 4c 2e 20 20 49 66 20 62 6f 74 68 20 6f 70  ULL.  If both op
d500: 65 72 61 6e 64 73 20 61 72 65 20 4e 55 4c 4c 20  erands are NULL 
d510: 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 0a  then the result.
d520: 2a 2a 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e  ** of comparison
d530: 20 69 73 20 66 61 6c 73 65 2e 20 20 49 66 20 65   is false.  If e
d540: 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73  ither operand is
d550: 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65 20 72   NULL then the r
d560: 65 73 75 6c 74 20 69 73 20 74 72 75 65 2e 0a 2a  esult is true..*
d570: 2a 20 49 66 20 6e 65 69 74 68 65 72 20 6f 70 65  * If neither ope
d580: 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20 74 68 65  rand is NULL the
d590: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 74   the result is t
d5a0: 68 65 20 73 61 6d 65 20 61 73 20 69 74 20 77 6f  he same as it wo
d5b0: 75 6c 64 20 62 65 20 69 66 0a 2a 2a 20 74 68 65  uld be if.** the
d5c0: 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 66   SQLITE_NULLEQ f
d5d0: 6c 61 67 20 77 65 72 65 20 6f 6d 69 74 74 65 64  lag were omitted
d5e0: 20 66 72 6f 6d 20 50 35 2e 0a 2a 2f 0a 2f 2a 20   from P5..*/./* 
d5f0: 4f 70 63 6f 64 65 3a 20 45 71 20 50 31 20 50 32  Opcode: Eq P1 P2
d600: 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20   P3 P4 P5.**.** 
d610: 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20  This works just 
d620: 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f  like the Lt opco
d630: 64 65 20 65 78 63 65 70 74 20 74 68 61 74 20 74  de except that t
d640: 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e  he jump is taken
d650: 20 69 66 0a 2a 2a 20 74 68 65 20 6f 70 65 72 61   if.** the opera
d660: 6e 64 73 20 69 6e 20 72 65 67 69 73 74 65 72 73  nds in registers
d670: 20 50 31 20 61 6e 64 20 50 33 20 61 72 65 20 65   P1 and P3 are e
d680: 71 75 61 6c 2e 0a 2a 2a 20 53 65 65 20 74 68 65  qual..** See the
d690: 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61   Lt opcode for a
d6a0: 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d  dditional inform
d6b0: 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  ation..**.** If 
d6c0: 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73  SQLITE_NULLEQ is
d6d0: 20 73 65 74 20 69 6e 20 50 35 20 74 68 65 6e 20   set in P5 then 
d6e0: 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 63 6f  the result of co
d6f0: 6d 70 61 72 69 73 6f 6e 20 69 73 20 61 6c 77 61  mparison is alwa
d700: 79 73 20 65 69 74 68 65 72 0a 2a 2a 20 74 72 75  ys either.** tru
d710: 65 20 6f 72 20 66 61 6c 73 65 20 61 6e 64 20 69  e or false and i
d720: 73 20 6e 65 76 65 72 20 4e 55 4c 4c 2e 20 20 49  s never NULL.  I
d730: 66 20 62 6f 74 68 20 6f 70 65 72 61 6e 64 73 20  f both operands 
d740: 61 72 65 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68  are NULL then th
d750: 65 20 72 65 73 75 6c 74 0a 2a 2a 20 6f 66 20 63  e result.** of c
d760: 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 74 72 75  omparison is tru
d770: 65 2e 20 20 49 66 20 65 69 74 68 65 72 20 6f 70  e.  If either op
d780: 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20 74 68  erand is NULL th
d790: 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  en the result is
d7a0: 20 66 61 6c 73 65 2e 0a 2a 2a 20 49 66 20 6e 65   false..** If ne
d7b0: 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73  ither operand is
d7c0: 20 4e 55 4c 4c 20 74 68 65 20 74 68 65 20 72 65   NULL the the re
d7d0: 73 75 6c 74 20 69 73 20 74 68 65 20 73 61 6d 65  sult is the same
d7e0: 20 61 73 20 69 74 20 77 6f 75 6c 64 20 62 65 20   as it would be 
d7f0: 69 66 0a 2a 2a 20 74 68 65 20 53 51 4c 49 54 45  if.** the SQLITE
d800: 5f 4e 55 4c 4c 45 51 20 66 6c 61 67 20 77 65 72  _NULLEQ flag wer
d810: 65 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 50  e omitted from P
d820: 35 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  5..*/./* Opcode:
d830: 20 4c 65 20 50 31 20 50 32 20 50 33 20 50 34 20   Le P1 P2 P3 P4 
d840: 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f  P5.**.** This wo
d850: 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 74 68  rks just like th
d860: 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78 63 65  e Lt opcode exce
d870: 70 74 20 74 68 61 74 20 74 68 65 20 6a 75 6d 70  pt that the jump
d880: 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20   is taken if.** 
d890: 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72  the content of r
d8a0: 65 67 69 73 74 65 72 20 50 33 20 69 73 20 6c 65  egister P3 is le
d8b0: 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c  ss than or equal
d8c0: 20 74 6f 20 74 68 65 20 63 6f 6e 74 65 6e 74 20   to the content 
d8d0: 6f 66 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50  of.** register P
d8e0: 31 2e 20 20 53 65 65 20 74 68 65 20 4c 74 20 6f  1.  See the Lt o
d8f0: 70 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69  pcode for additi
d900: 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  onal information
d910: 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
d920: 47 74 20 50 31 20 50 32 20 50 33 20 50 34 20 50  Gt P1 P2 P3 P4 P
d930: 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72  5.**.** This wor
d940: 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 74 68 65  ks just like the
d950: 20 4c 74 20 6f 70 63 6f 64 65 20 65 78 63 65 70   Lt opcode excep
d960: 74 20 74 68 61 74 20 74 68 65 20 6a 75 6d 70 20  t that the jump 
d970: 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74  is taken if.** t
d980: 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65  he content of re
d990: 67 69 73 74 65 72 20 50 33 20 69 73 20 67 72 65  gister P3 is gre
d9a0: 61 74 65 72 20 74 68 61 6e 20 74 68 65 20 63 6f  ater than the co
d9b0: 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69  ntent of.** regi
d9c0: 73 74 65 72 20 50 31 2e 20 20 53 65 65 20 74 68  ster P1.  See th
d9d0: 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 20  e Lt opcode for 
d9e0: 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72  additional infor
d9f0: 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70  mation..*/./* Op
da00: 63 6f 64 65 3a 20 47 65 20 50 31 20 50 32 20 50  code: Ge P1 P2 P
da10: 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68  3 P4 P5.**.** Th
da20: 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69  is works just li
da30: 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65  ke the Lt opcode
da40: 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65   except that the
da50: 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69   jump is taken i
da60: 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74  f.** the content
da70: 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 33 20   of register P3 
da80: 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  is greater than 
da90: 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20  or equal to the 
daa0: 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 72 65  content of.** re
dab0: 67 69 73 74 65 72 20 50 31 2e 20 20 53 65 65 20  gister P1.  See 
dac0: 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f  the Lt opcode fo
dad0: 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66  r additional inf
dae0: 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73  ormation..*/.cas
daf0: 65 20 4f 50 5f 45 71 3a 20 20 20 20 20 20 20 20  e OP_Eq:        
db00: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
db10: 73 20 54 4b 5f 45 51 2c 20 6a 75 6d 70 2c 20 69  s TK_EQ, jump, i
db20: 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20  n1, in3 */.case 
db30: 4f 50 5f 4e 65 3a 20 20 20 20 20 20 20 20 20 20  OP_Ne:          
db40: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
db50: 54 4b 5f 4e 45 2c 20 6a 75 6d 70 2c 20 69 6e 31  TK_NE, jump, in1
db60: 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50  , in3 */.case OP
db70: 5f 4c 74 3a 20 20 20 20 20 20 20 20 20 20 20 20  _Lt:            
db80: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
db90: 5f 4c 54 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20  _LT, jump, in1, 
dba0: 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c  in3 */.case OP_L
dbb0: 65 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e:              
dbc0: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4c   /* same as TK_L
dbd0: 45 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e  E, jump, in1, in
dbe0: 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 74 3a  3 */.case OP_Gt:
dbf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
dc00: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 47 54 2c  * same as TK_GT,
dc10: 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20   jump, in1, in3 
dc20: 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 65 3a 20 7b  */.case OP_Ge: {
dc30: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
dc40: 73 61 6d 65 20 61 73 20 54 4b 5f 47 45 2c 20 6a  same as TK_GE, j
dc50: 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f  ump, in1, in3 */
dc60: 0a 20 20 69 6e 74 20 72 65 73 3b 20 20 20 20 20  .  int res;     
dc70: 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74         /* Result
dc80: 20 6f 66 20 74 68 65 20 63 6f 6d 70 61 72 69 73   of the comparis
dc90: 6f 6e 20 6f 66 20 70 49 6e 31 20 61 67 61 69 6e  on of pIn1 again
dca0: 73 74 20 70 49 6e 33 20 2a 2f 0a 20 20 63 68 61  st pIn3 */.  cha
dcb0: 72 20 61 66 66 69 6e 69 74 79 3b 20 20 20 20 20  r affinity;     
dcc0: 20 2f 2a 20 41 66 66 69 6e 69 74 79 20 74 6f 20   /* Affinity to 
dcd0: 75 73 65 20 66 6f 72 20 63 6f 6d 70 61 72 69 73  use for comparis
dce0: 6f 6e 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67  on */.  u16 flag
dcf0: 73 31 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43  s1;         /* C
dd00: 6f 70 79 20 6f 66 20 69 6e 69 74 69 61 6c 20 76  opy of initial v
dd10: 61 6c 75 65 20 6f 66 20 70 49 6e 31 2d 3e 66 6c  alue of pIn1->fl
dd20: 61 67 73 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61  ags */.  u16 fla
dd30: 67 73 33 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  gs3;         /* 
dd40: 43 6f 70 79 20 6f 66 20 69 6e 69 74 69 61 6c 20  Copy of initial 
dd50: 76 61 6c 75 65 20 6f 66 20 70 49 6e 33 2d 3e 66  value of pIn3->f
dd60: 6c 61 67 73 20 2a 2f 0a 0a 20 20 70 49 6e 31 20  lags */..  pIn1 
dd70: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
dd80: 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d  ;.  pIn3 = &aMem
dd90: 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 66 6c 61  [pOp->p3];.  fla
dda0: 67 73 31 20 3d 20 70 49 6e 31 2d 3e 66 6c 61 67  gs1 = pIn1->flag
ddb0: 73 3b 0a 20 20 66 6c 61 67 73 33 20 3d 20 70 49  s;.  flags3 = pI
ddc0: 6e 33 2d 3e 66 6c 61 67 73 3b 0a 20 20 69 66 28  n3->flags;.  if(
ddd0: 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20   (pIn1->flags | 
dde0: 70 49 6e 33 2d 3e 66 6c 61 67 73 29 26 4d 45 4d  pIn3->flags)&MEM
ddf0: 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 2f 2a 20  _Null ){.    /* 
de00: 4f 6e 65 20 6f 72 20 62 6f 74 68 20 6f 70 65 72  One or both oper
de10: 61 6e 64 73 20 61 72 65 20 4e 55 4c 4c 20 2a 2f  ands are NULL */
de20: 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35  .    if( pOp->p5
de30: 20 26 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51   & SQLITE_NULLEQ
de40: 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 66 20   ){.      /* If 
de50: 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73  SQLITE_NULLEQ is
de60: 20 73 65 74 20 28 77 68 69 63 68 20 77 69 6c 6c   set (which will
de70: 20 6f 6e 6c 79 20 68 61 70 70 65 6e 20 69 66 20   only happen if 
de80: 74 68 65 20 6f 70 65 72 61 74 6f 72 20 69 73 0a  the operator is.
de90: 20 20 20 20 20 20 2a 2a 20 4f 50 5f 45 71 20 6f        ** OP_Eq o
dea0: 72 20 4f 50 5f 4e 65 29 20 74 68 65 6e 20 74 61  r OP_Ne) then ta
deb0: 6b 65 20 74 68 65 20 6a 75 6d 70 20 6f 72 20 6e  ke the jump or n
dec0: 6f 74 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20  ot depending on 
ded0: 77 68 65 74 68 65 72 0a 20 20 20 20 20 20 2a 2a  whether.      **
dee0: 20 6f 72 20 6e 6f 74 20 62 6f 74 68 20 6f 70 65   or not both ope
def0: 72 61 6e 64 73 20 61 72 65 20 6e 75 6c 6c 2e 0a  rands are null..
df00: 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 61        */.      a
df10: 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f  ssert( pOp->opco
df20: 64 65 3d 3d 4f 50 5f 45 71 20 7c 7c 20 70 4f 70  de==OP_Eq || pOp
df30: 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 65 20  ->opcode==OP_Ne 
df40: 29 3b 0a 20 20 20 20 20 20 72 65 73 20 3d 20 28  );.      res = (
df50: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 70 49  pIn1->flags & pI
df60: 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n3->flags & MEM_
df70: 4e 75 6c 6c 29 3d 3d 30 3b 0a 20 20 20 20 7d 65  Null)==0;.    }e
df80: 6c 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20 53 51  lse{.      /* SQ
df90: 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20 63  LITE_NULLEQ is c
dfa0: 6c 65 61 72 20 61 6e 64 20 61 74 20 6c 65 61 73  lear and at leas
dfb0: 74 20 6f 6e 65 20 6f 70 65 72 61 6e 64 20 69 73  t one operand is
dfc0: 20 4e 55 4c 4c 2c 0a 20 20 20 20 20 20 2a 2a 20   NULL,.      ** 
dfd0: 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20  then the result 
dfe0: 69 73 20 61 6c 77 61 79 73 20 4e 55 4c 4c 2e 0a  is always NULL..
dff0: 20 20 20 20 20 20 2a 2a 20 54 68 65 20 6a 75 6d        ** The jum
e000: 70 20 69 73 20 74 61 6b 65 6e 20 69 66 20 74 68  p is taken if th
e010: 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e  e SQLITE_JUMPIFN
e020: 55 4c 4c 20 62 69 74 20 69 73 20 73 65 74 2e 0a  ULL bit is set..
e030: 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 69        */.      i
e040: 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c  f( pOp->p5 & SQL
e050: 49 54 45 5f 53 54 4f 52 45 50 32 20 29 7b 0a 20  ITE_STOREP2 ){. 
e060: 20 20 20 20 20 20 20 70 4f 75 74 20 3d 20 26 61         pOut = &a
e070: 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
e080: 20 20 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65        MemSetType
e090: 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 4e  Flag(pOut, MEM_N
e0a0: 75 6c 6c 29 3b 0a 20 20 20 20 20 20 20 20 52 45  ull);.        RE
e0b0: 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
e0c0: 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20 20 20  ->p2, pOut);.   
e0d0: 20 20 20 7d 65 6c 73 65 20 69 66 28 20 70 4f 70     }else if( pOp
e0e0: 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 4a 55  ->p5 & SQLITE_JU
e0f0: 4d 50 49 46 4e 55 4c 4c 20 29 7b 0a 20 20 20 20  MPIFNULL ){.    
e100: 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
e110: 2d 31 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  -1;.      }.    
e120: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20    break;.    }. 
e130: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 4e   }else{.    /* N
e140: 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69  either operand i
e150: 73 20 4e 55 4c 4c 2e 20 20 44 6f 20 61 20 63 6f  s NULL.  Do a co
e160: 6d 70 61 72 69 73 6f 6e 2e 20 2a 2f 0a 20 20 20  mparison. */.   
e170: 20 61 66 66 69 6e 69 74 79 20 3d 20 70 4f 70 2d   affinity = pOp-
e180: 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 41 46 46  >p5 & SQLITE_AFF
e190: 5f 4d 41 53 4b 3b 0a 20 20 20 20 69 66 28 20 61  _MASK;.    if( a
e1a0: 66 66 69 6e 69 74 79 20 29 7b 0a 20 20 20 20 20  ffinity ){.     
e1b0: 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70   applyAffinity(p
e1c0: 49 6e 31 2c 20 61 66 66 69 6e 69 74 79 2c 20 65  In1, affinity, e
e1d0: 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 20 20  ncoding);.      
e1e0: 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70 49  applyAffinity(pI
e1f0: 6e 33 2c 20 61 66 66 69 6e 69 74 79 2c 20 65 6e  n3, affinity, en
e200: 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 20 20 69  coding);.      i
e210: 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69  f( db->mallocFai
e220: 6c 65 64 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  led ) goto no_me
e230: 6d 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 61 73  m;.    }..    as
e240: 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70  sert( pOp->p4typ
e250: 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51 20 7c 7c  e==P4_COLLSEQ ||
e260: 20 70 4f 70 2d 3e 70 34 2e 70 43 6f 6c 6c 3d 3d   pOp->p4.pColl==
e270: 30 20 29 3b 0a 20 20 20 20 45 78 70 61 6e 64 42  0 );.    ExpandB
e280: 6c 6f 62 28 70 49 6e 31 29 3b 0a 20 20 20 20 45  lob(pIn1);.    E
e290: 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 33 29 3b  xpandBlob(pIn3);
e2a0: 0a 20 20 20 20 72 65 73 20 3d 20 73 71 6c 69 74  .    res = sqlit
e2b0: 65 33 4d 65 6d 43 6f 6d 70 61 72 65 28 70 49 6e  e3MemCompare(pIn
e2c0: 33 2c 20 70 49 6e 31 2c 20 70 4f 70 2d 3e 70 34  3, pIn1, pOp->p4
e2d0: 2e 70 43 6f 6c 6c 29 3b 0a 20 20 7d 0a 20 20 73  .pColl);.  }.  s
e2e0: 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f  witch( pOp->opco
e2f0: 64 65 20 29 7b 0a 20 20 20 20 63 61 73 65 20 4f  de ){.    case O
e300: 50 5f 45 71 3a 20 20 20 20 72 65 73 20 3d 20 72  P_Eq:    res = r
e310: 65 73 3d 3d 30 3b 20 20 20 20 20 62 72 65 61 6b  es==0;     break
e320: 3b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 4e 65  ;.    case OP_Ne
e330: 3a 20 20 20 20 72 65 73 20 3d 20 72 65 73 21 3d  :    res = res!=
e340: 30 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  0;     break;.  
e350: 20 20 63 61 73 65 20 4f 50 5f 4c 74 3a 20 20 20    case OP_Lt:   
e360: 20 72 65 73 20 3d 20 72 65 73 3c 30 3b 20 20 20   res = res<0;   
e370: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61     break;.    ca
e380: 73 65 20 4f 50 5f 4c 65 3a 20 20 20 20 72 65 73  se OP_Le:    res
e390: 20 3d 20 72 65 73 3c 3d 30 3b 20 20 20 20 20 62   = res<=0;     b
e3a0: 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f  reak;.    case O
e3b0: 50 5f 47 74 3a 20 20 20 20 72 65 73 20 3d 20 72  P_Gt:    res = r
e3c0: 65 73 3e 30 3b 20 20 20 20 20 20 62 72 65 61 6b  es>0;      break
e3d0: 3b 0a 20 20 20 20 64 65 66 61 75 6c 74 3a 20 20  ;.    default:  
e3e0: 20 20 20 20 20 72 65 73 20 3d 20 72 65 73 3e 3d       res = res>=
e3f0: 30 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  0;     break;.  
e400: 7d 0a 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35  }..  if( pOp->p5
e410: 20 26 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50   & SQLITE_STOREP
e420: 32 20 29 7b 0a 20 20 20 20 70 4f 75 74 20 3d 20  2 ){.    pOut = 
e430: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
e440: 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68      memAboutToCh
e450: 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 20  ange(p, pOut);. 
e460: 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61     MemSetTypeFla
e470: 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29  g(pOut, MEM_Int)
e480: 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20  ;.    pOut->u.i 
e490: 3d 20 72 65 73 3b 0a 20 20 20 20 52 45 47 49 53  = res;.    REGIS
e4a0: 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
e4b0: 32 2c 20 70 4f 75 74 29 3b 0a 20 20 7d 65 6c 73  2, pOut);.  }els
e4c0: 65 20 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20  e if( res ){.   
e4d0: 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b   pc = pOp->p2-1;
e4e0: 0a 20 20 7d 0a 0a 20 20 2f 2a 20 55 6e 64 6f 20  .  }..  /* Undo 
e4f0: 61 6e 79 20 63 68 61 6e 67 65 73 20 6d 61 64 65  any changes made
e500: 20 62 79 20 61 70 70 6c 79 41 66 66 69 6e 69 74   by applyAffinit
e510: 79 28 29 20 74 6f 20 74 68 65 20 69 6e 70 75 74  y() to the input
e520: 20 72 65 67 69 73 74 65 72 73 2e 20 2a 2f 0a 20   registers. */. 
e530: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 28   pIn1->flags = (
e540: 70 49 6e 31 2d 3e 66 6c 61 67 73 26 7e 4d 45 4d  pIn1->flags&~MEM
e550: 5f 54 79 70 65 4d 61 73 6b 29 20 7c 20 28 66 6c  _TypeMask) | (fl
e560: 61 67 73 31 26 4d 45 4d 5f 54 79 70 65 4d 61 73  ags1&MEM_TypeMas
e570: 6b 29 3b 0a 20 20 70 49 6e 33 2d 3e 66 6c 61 67  k);.  pIn3->flag
e580: 73 20 3d 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73  s = (pIn3->flags
e590: 26 7e 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 29 20  &~MEM_TypeMask) 
e5a0: 7c 20 28 66 6c 61 67 73 33 26 4d 45 4d 5f 54 79  | (flags3&MEM_Ty
e5b0: 70 65 4d 61 73 6b 29 3b 0a 20 20 62 72 65 61 6b  peMask);.  break
e5c0: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
e5d0: 50 65 72 6d 75 74 61 74 69 6f 6e 20 2a 20 2a 20  Permutation * * 
e5e0: 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 53 65 74  * P4 *.**.** Set
e5f0: 20 74 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e   the permutation
e600: 20 75 73 65 64 20 62 79 20 74 68 65 20 4f 50 5f   used by the OP_
e610: 43 6f 6d 70 61 72 65 20 6f 70 65 72 61 74 6f 72  Compare operator
e620: 20 74 6f 20 62 65 20 74 68 65 20 61 72 72 61 79   to be the array
e630: 0a 2a 2a 20 6f 66 20 69 6e 74 65 67 65 72 73 20  .** of integers 
e640: 69 6e 20 50 34 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  in P4..**.** The
e650: 20 70 65 72 6d 75 74 61 74 69 6f 6e 20 69 73 20   permutation is 
e660: 6f 6e 6c 79 20 76 61 6c 69 64 20 75 6e 74 69 6c  only valid until
e670: 20 74 68 65 20 6e 65 78 74 20 4f 50 5f 50 65 72   the next OP_Per
e680: 6d 75 74 61 74 69 6f 6e 2c 20 4f 50 5f 43 6f 6d  mutation, OP_Com
e690: 70 61 72 65 2c 0a 2a 2a 20 4f 50 5f 48 61 6c 74  pare,.** OP_Halt
e6a0: 2c 20 6f 72 20 4f 50 5f 52 65 73 75 6c 74 52 6f  , or OP_ResultRo
e6b0: 77 2e 20 20 54 79 70 69 63 61 6c 6c 79 20 74 68  w.  Typically th
e6c0: 65 20 4f 50 5f 50 65 72 6d 75 74 61 74 69 6f 6e  e OP_Permutation
e6d0: 20 73 68 6f 75 6c 64 20 6f 63 63 75 72 0a 2a 2a   should occur.**
e6e0: 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 70 72 69   immediately pri
e6f0: 6f 72 20 74 6f 20 74 68 65 20 4f 50 5f 43 6f 6d  or to the OP_Com
e700: 70 61 72 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  pare..*/.case OP
e710: 5f 50 65 72 6d 75 74 61 74 69 6f 6e 3a 20 7b 0a  _Permutation: {.
e720: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
e730: 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 41 52 52  4type==P4_INTARR
e740: 41 59 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  AY );.  assert( 
e750: 70 4f 70 2d 3e 70 34 2e 61 69 20 29 3b 0a 20 20  pOp->p4.ai );.  
e760: 61 50 65 72 6d 75 74 65 20 3d 20 70 4f 70 2d 3e  aPermute = pOp->
e770: 70 34 2e 61 69 3b 0a 20 20 62 72 65 61 6b 3b 0a  p4.ai;.  break;.
e780: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f  }../* Opcode: Co
e790: 6d 70 61 72 65 20 50 31 20 50 32 20 50 33 20 50  mpare P1 P2 P3 P
e7a0: 34 20 2a 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 61 72  4 *.**.** Compar
e7b0: 65 20 74 77 6f 20 76 65 63 74 6f 72 73 20 6f 66  e two vectors of
e7c0: 20 72 65 67 69 73 74 65 72 73 20 69 6e 20 72 65   registers in re
e7d0: 67 28 50 31 29 2e 2e 72 65 67 28 50 31 2b 50 33  g(P1)..reg(P1+P3
e7e0: 2d 31 29 20 28 63 61 6c 6c 20 74 68 69 73 0a 2a  -1) (call this.*
e7f0: 2a 20 76 65 63 74 6f 72 20 22 41 22 29 20 61 6e  * vector "A") an
e800: 64 20 69 6e 20 72 65 67 28 50 32 29 2e 2e 72 65  d in reg(P2)..re
e810: 67 28 50 32 2b 50 33 2d 31 29 20 28 22 42 22 29  g(P2+P3-1) ("B")
e820: 2e 20 20 53 61 76 65 20 74 68 65 20 72 65 73 75  .  Save the resu
e830: 6c 74 20 6f 66 0a 2a 2a 20 74 68 65 20 63 6f 6d  lt of.** the com
e840: 70 61 72 69 73 6f 6e 20 66 6f 72 20 75 73 65 20  parison for use 
e850: 62 79 20 74 68 65 20 6e 65 78 74 20 4f 50 5f 4a  by the next OP_J
e860: 75 6d 70 20 69 6e 73 74 72 75 63 74 2e 0a 2a 2a  ump instruct..**
e870: 0a 2a 2a 20 50 34 20 69 73 20 61 20 4b 65 79 49  .** P4 is a KeyI
e880: 6e 66 6f 20 73 74 72 75 63 74 75 72 65 20 74 68  nfo structure th
e890: 61 74 20 64 65 66 69 6e 65 73 20 63 6f 6c 6c 61  at defines colla
e8a0: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 20 61  ting sequences a
e8b0: 6e 64 20 73 6f 72 74 0a 2a 2a 20 6f 72 64 65 72  nd sort.** order
e8c0: 73 20 66 6f 72 20 74 68 65 20 63 6f 6d 70 61 72  s for the compar
e8d0: 69 73 6f 6e 2e 20 20 54 68 65 20 70 65 72 6d 75  ison.  The permu
e8e0: 74 61 74 69 6f 6e 20 61 70 70 6c 69 65 73 20 74  tation applies t
e8f0: 6f 20 72 65 67 69 73 74 65 72 73 0a 2a 2a 20 6f  o registers.** o
e900: 6e 6c 79 2e 20 20 54 68 65 20 4b 65 79 49 6e 66  nly.  The KeyInf
e910: 6f 20 65 6c 65 6d 65 6e 74 73 20 61 72 65 20 75  o elements are u
e920: 73 65 64 20 73 65 71 75 65 6e 74 69 61 6c 6c 79  sed sequentially
e930: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d 70  ..**.** The comp
e940: 61 72 69 73 6f 6e 20 69 73 20 61 20 73 6f 72 74  arison is a sort
e950: 20 63 6f 6d 70 61 72 69 73 6f 6e 2c 20 73 6f 20   comparison, so 
e960: 4e 55 4c 4c 73 20 63 6f 6d 70 61 72 65 20 65 71  NULLs compare eq
e970: 75 61 6c 2c 0a 2a 2a 20 4e 55 4c 4c 73 20 61 72  ual,.** NULLs ar
e980: 65 20 6c 65 73 73 20 74 68 61 6e 20 6e 75 6d 62  e less than numb
e990: 65 72 73 2c 20 6e 75 6d 62 65 72 73 20 61 72 65  ers, numbers are
e9a0: 20 6c 65 73 73 20 74 68 61 6e 20 73 74 72 69 6e   less than strin
e9b0: 67 73 2c 0a 2a 2a 20 61 6e 64 20 73 74 72 69 6e  gs,.** and strin
e9c0: 67 73 20 61 72 65 20 6c 65 73 73 20 74 68 61 6e  gs are less than
e9d0: 20 62 6c 6f 62 73 2e 0a 2a 2f 0a 63 61 73 65 20   blobs..*/.case 
e9e0: 4f 50 5f 43 6f 6d 70 61 72 65 3a 20 7b 0a 20 20  OP_Compare: {.  
e9f0: 69 6e 74 20 6e 3b 0a 20 20 69 6e 74 20 69 3b 0a  int n;.  int i;.
ea00: 20 20 69 6e 74 20 70 31 3b 0a 20 20 69 6e 74 20    int p1;.  int 
ea10: 70 32 3b 0a 20 20 63 6f 6e 73 74 20 4b 65 79 49  p2;.  const KeyI
ea20: 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 0a 20  nfo *pKeyInfo;. 
ea30: 20 69 6e 74 20 69 64 78 3b 0a 20 20 43 6f 6c 6c   int idx;.  Coll
ea40: 53 65 71 20 2a 70 43 6f 6c 6c 3b 20 20 20 20 2f  Seq *pColl;    /
ea50: 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  * Collating sequ
ea60: 65 6e 63 65 20 74 6f 20 75 73 65 20 6f 6e 20 74  ence to use on t
ea70: 68 69 73 20 74 65 72 6d 20 2a 2f 0a 20 20 69 6e  his term */.  in
ea80: 74 20 62 52 65 76 3b 20 20 20 20 20 20 20 20 20  t bRev;         
ea90: 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 44 45 53   /* True for DES
eaa0: 43 45 4e 44 49 4e 47 20 73 6f 72 74 20 6f 72 64  CENDING sort ord
eab0: 65 72 20 2a 2f 0a 0a 20 20 6e 20 3d 20 70 4f 70  er */..  n = pOp
eac0: 2d 3e 70 33 3b 0a 20 20 70 4b 65 79 49 6e 66 6f  ->p3;.  pKeyInfo
ead0: 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49   = pOp->p4.pKeyI
eae0: 6e 66 6f 3b 0a 20 20 61 73 73 65 72 74 28 20 6e  nfo;.  assert( n
eaf0: 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  >0 );.  assert( 
eb00: 70 4b 65 79 49 6e 66 6f 21 3d 30 20 29 3b 0a 20  pKeyInfo!=0 );. 
eb10: 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20   p1 = pOp->p1;. 
eb20: 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 23   p2 = pOp->p2;.#
eb30: 69 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  if SQLITE_DEBUG.
eb40: 20 20 69 66 28 20 61 50 65 72 6d 75 74 65 20 29    if( aPermute )
eb50: 7b 0a 20 20 20 20 69 6e 74 20 6b 2c 20 6d 78 20  {.    int k, mx 
eb60: 3d 20 30 3b 0a 20 20 20 20 66 6f 72 28 6b 3d 30  = 0;.    for(k=0
eb70: 3b 20 6b 3c 6e 3b 20 6b 2b 2b 29 20 69 66 28 20  ; k<n; k++) if( 
eb80: 61 50 65 72 6d 75 74 65 5b 6b 5d 3e 6d 78 20 29  aPermute[k]>mx )
eb90: 20 6d 78 20 3d 20 61 50 65 72 6d 75 74 65 5b 6b   mx = aPermute[k
eba0: 5d 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ];.    assert( p
ebb0: 31 3e 30 20 26 26 20 70 31 2b 6d 78 3c 3d 70 2d  1>0 && p1+mx<=p-
ebc0: 3e 6e 4d 65 6d 2b 31 20 29 3b 0a 20 20 20 20 61  >nMem+1 );.    a
ebd0: 73 73 65 72 74 28 20 70 32 3e 30 20 26 26 20 70  ssert( p2>0 && p
ebe0: 32 2b 6d 78 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31 20  2+mx<=p->nMem+1 
ebf0: 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
ec00: 61 73 73 65 72 74 28 20 70 31 3e 30 20 26 26 20  assert( p1>0 && 
ec10: 70 31 2b 6e 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31 20  p1+n<=p->nMem+1 
ec20: 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
ec30: 32 3e 30 20 26 26 20 70 32 2b 6e 3c 3d 70 2d 3e  2>0 && p2+n<=p->
ec40: 6e 4d 65 6d 2b 31 20 29 3b 0a 20 20 7d 0a 23 65  nMem+1 );.  }.#e
ec50: 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 44  ndif /* SQLITE_D
ec60: 45 42 55 47 20 2a 2f 0a 20 20 66 6f 72 28 69 3d  EBUG */.  for(i=
ec70: 30 3b 20 69 3c 6e 3b 20 69 2b 2b 29 7b 0a 20 20  0; i<n; i++){.  
ec80: 20 20 69 64 78 20 3d 20 61 50 65 72 6d 75 74 65    idx = aPermute
ec90: 20 3f 20 61 50 65 72 6d 75 74 65 5b 69 5d 20 3a   ? aPermute[i] :
eca0: 20 69 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   i;.    assert( 
ecb0: 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d  memIsValid(&aMem
ecc0: 5b 70 31 2b 69 64 78 5d 29 20 29 3b 0a 20 20 20  [p1+idx]) );.   
ecd0: 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
ece0: 6c 69 64 28 26 61 4d 65 6d 5b 70 32 2b 69 64 78  lid(&aMem[p2+idx
ecf0: 5d 29 20 29 3b 0a 20 20 20 20 52 45 47 49 53 54  ]) );.    REGIST
ed00: 45 52 5f 54 52 41 43 45 28 70 31 2b 69 64 78 2c  ER_TRACE(p1+idx,
ed10: 20 26 61 4d 65 6d 5b 70 31 2b 69 64 78 5d 29 3b   &aMem[p1+idx]);
ed20: 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52  .    REGISTER_TR
ed30: 41 43 45 28 70 32 2b 69 64 78 2c 20 26 61 4d 65  ACE(p2+idx, &aMe
ed40: 6d 5b 70 32 2b 69 64 78 5d 29 3b 0a 20 20 20 20  m[p2+idx]);.    
ed50: 61 73 73 65 72 74 28 20 69 3c 70 4b 65 79 49 6e  assert( i<pKeyIn
ed60: 66 6f 2d 3e 6e 46 69 65 6c 64 20 29 3b 0a 20 20  fo->nField );.  
ed70: 20 20 70 43 6f 6c 6c 20 3d 20 70 4b 65 79 49 6e    pColl = pKeyIn
ed80: 66 6f 2d 3e 61 43 6f 6c 6c 5b 69 5d 3b 0a 20 20  fo->aColl[i];.  
ed90: 20 20 62 52 65 76 20 3d 20 70 4b 65 79 49 6e 66    bRev = pKeyInf
eda0: 6f 2d 3e 61 53 6f 72 74 4f 72 64 65 72 5b 69 5d  o->aSortOrder[i]
edb0: 3b 0a 20 20 20 20 69 43 6f 6d 70 61 72 65 20 3d  ;.    iCompare =
edc0: 20 73 71 6c 69 74 65 33 4d 65 6d 43 6f 6d 70 61   sqlite3MemCompa
edd0: 72 65 28 26 61 4d 65 6d 5b 70 31 2b 69 64 78 5d  re(&aMem[p1+idx]
ede0: 2c 20 26 61 4d 65 6d 5b 70 32 2b 69 64 78 5d 2c  , &aMem[p2+idx],
edf0: 20 70 43 6f 6c 6c 29 3b 0a 20 20 20 20 69 66 28   pColl);.    if(
ee00: 20 69 43 6f 6d 70 61 72 65 20 29 7b 0a 20 20 20   iCompare ){.   
ee10: 20 20 20 69 66 28 20 62 52 65 76 20 29 20 69 43     if( bRev ) iC
ee20: 6f 6d 70 61 72 65 20 3d 20 2d 69 43 6f 6d 70 61  ompare = -iCompa
ee30: 72 65 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b  re;.      break;
ee40: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 61 50 65  .    }.  }.  aPe
ee50: 72 6d 75 74 65 20 3d 20 30 3b 0a 20 20 62 72 65  rmute = 0;.  bre
ee60: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
ee70: 3a 20 4a 75 6d 70 20 50 31 20 50 32 20 50 33 20  : Jump P1 P2 P3 
ee80: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74  * *.**.** Jump t
ee90: 6f 20 74 68 65 20 69 6e 73 74 72 75 63 74 69 6f  o the instructio
eea0: 6e 20 61 74 20 61 64 64 72 65 73 73 20 50 31 2c  n at address P1,
eeb0: 20 50 32 2c 20 6f 72 20 50 33 20 64 65 70 65 6e   P2, or P3 depen
eec0: 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65 72 0a  ding on whether.
eed0: 2a 2a 20 69 6e 20 74 68 65 20 6d 6f 73 74 20 72  ** in the most r
eee0: 65 63 65 6e 74 20 4f 50 5f 43 6f 6d 70 61 72 65  ecent OP_Compare
eef0: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 74 68 65   instruction the
ef00: 20 50 31 20 76 65 63 74 6f 72 20 77 61 73 20 6c   P1 vector was l
ef10: 65 73 73 20 74 68 61 6e 0a 2a 2a 20 65 71 75 61  ess than.** equa
ef20: 6c 20 74 6f 2c 20 6f 72 20 67 72 65 61 74 65 72  l to, or greater
ef30: 20 74 68 61 6e 20 74 68 65 20 50 32 20 76 65 63   than the P2 vec
ef40: 74 6f 72 2c 20 72 65 73 70 65 63 74 69 76 65 6c  tor, respectivel
ef50: 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4a 75  y..*/.case OP_Ju
ef60: 6d 70 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  mp: {           
ef70: 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69    /* jump */.  i
ef80: 66 28 20 69 43 6f 6d 70 61 72 65 3c 30 20 29 7b  f( iCompare<0 ){
ef90: 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70  .    pc = pOp->p
efa0: 31 20 2d 20 31 3b 0a 20 20 7d 65 6c 73 65 20 69  1 - 1;.  }else i
efb0: 66 28 20 69 43 6f 6d 70 61 72 65 3d 3d 30 20 29  f( iCompare==0 )
efc0: 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e  {.    pc = pOp->
efd0: 70 32 20 2d 20 31 3b 0a 20 20 7d 65 6c 73 65 7b  p2 - 1;.  }else{
efe0: 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70  .    pc = pOp->p
eff0: 33 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65  3 - 1;.  }.  bre
f000: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
f010: 3a 20 41 6e 64 20 50 31 20 50 32 20 50 33 20 2a  : And P1 P2 P3 *
f020: 20 2a 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68   *.**.** Take th
f030: 65 20 6c 6f 67 69 63 61 6c 20 41 4e 44 20 6f 66  e logical AND of
f040: 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72   the values in r
f050: 65 67 69 73 74 65 72 73 20 50 31 20 61 6e 64 20  egisters P1 and 
f060: 50 32 20 61 6e 64 0a 2a 2a 20 77 72 69 74 65 20  P2 and.** write 
f070: 74 68 65 20 72 65 73 75 6c 74 20 69 6e 74 6f 20  the result into 
f080: 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 0a  register P3..**.
f090: 2a 2a 20 49 66 20 65 69 74 68 65 72 20 50 31 20  ** If either P1 
f0a0: 6f 72 20 50 32 20 69 73 20 30 20 28 66 61 6c 73  or P2 is 0 (fals
f0b0: 65 29 20 74 68 65 6e 20 74 68 65 20 72 65 73 75  e) then the resu
f0c0: 6c 74 20 69 73 20 30 20 65 76 65 6e 20 69 66 0a  lt is 0 even if.
f0d0: 2a 2a 20 74 68 65 20 6f 74 68 65 72 20 69 6e 70  ** the other inp
f0e0: 75 74 20 69 73 20 4e 55 4c 4c 2e 20 20 41 20 4e  ut is NULL.  A N
f0f0: 55 4c 4c 20 61 6e 64 20 74 72 75 65 20 6f 72 20  ULL and true or 
f100: 74 77 6f 20 4e 55 4c 4c 73 20 67 69 76 65 0a 2a  two NULLs give.*
f110: 2a 20 61 20 4e 55 4c 4c 20 6f 75 74 70 75 74 2e  * a NULL output.
f120: 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f  .*/./* Opcode: O
f130: 72 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  r P1 P2 P3 * *.*
f140: 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20 6c 6f  *.** Take the lo
f150: 67 69 63 61 6c 20 4f 52 20 6f 66 20 74 68 65 20  gical OR of the 
f160: 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74  values in regist
f170: 65 72 20 50 31 20 61 6e 64 20 50 32 20 61 6e 64  er P1 and P2 and
f180: 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65 20 61 6e  .** store the an
f190: 73 77 65 72 20 69 6e 20 72 65 67 69 73 74 65 72  swer in register
f1a0: 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69   P3..**.** If ei
f1b0: 74 68 65 72 20 50 31 20 6f 72 20 50 32 20 69 73  ther P1 or P2 is
f1c0: 20 6e 6f 6e 7a 65 72 6f 20 28 74 72 75 65 29 20   nonzero (true) 
f1d0: 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20  then the result 
f1e0: 69 73 20 31 20 28 74 72 75 65 29 0a 2a 2a 20 65  is 1 (true).** e
f1f0: 76 65 6e 20 69 66 20 74 68 65 20 6f 74 68 65 72  ven if the other
f200: 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2e 20   input is NULL. 
f210: 20 41 20 4e 55 4c 4c 20 61 6e 64 20 66 61 6c 73   A NULL and fals
f220: 65 20 6f 72 20 74 77 6f 20 4e 55 4c 4c 73 0a 2a  e or two NULLs.*
f230: 2a 20 67 69 76 65 20 61 20 4e 55 4c 4c 20 6f 75  * give a NULL ou
f240: 74 70 75 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  tput..*/.case OP
f250: 5f 41 6e 64 3a 20 20 20 20 20 20 20 20 20 20 20  _And:           
f260: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
f270: 5f 41 4e 44 2c 20 69 6e 31 2c 20 69 6e 32 2c 20  _AND, in1, in2, 
f280: 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  out3 */.case OP_
f290: 4f 72 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  Or: {           
f2a0: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
f2b0: 4f 52 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75  OR, in1, in2, ou
f2c0: 74 33 20 2a 2f 0a 20 20 69 6e 74 20 76 31 3b 20  t3 */.  int v1; 
f2d0: 20 20 20 2f 2a 20 4c 65 66 74 20 6f 70 65 72 61     /* Left opera
f2e0: 6e 64 3a 20 20 30 3d 3d 46 41 4c 53 45 2c 20 31  nd:  0==FALSE, 1
f2f0: 3d 3d 54 52 55 45 2c 20 32 3d 3d 55 4e 4b 4e 4f  ==TRUE, 2==UNKNO
f300: 57 4e 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20  WN or NULL */.  
f310: 69 6e 74 20 76 32 3b 20 20 20 20 2f 2a 20 52 69  int v2;    /* Ri
f320: 67 68 74 20 6f 70 65 72 61 6e 64 3a 20 30 3d 3d  ght operand: 0==
f330: 46 41 4c 53 45 2c 20 31 3d 3d 54 52 55 45 2c 20  FALSE, 1==TRUE, 
f340: 32 3d 3d 55 4e 4b 4e 4f 57 4e 20 6f 72 20 4e 55  2==UNKNOWN or NU
f350: 4c 4c 20 2a 2f 0a 0a 20 20 70 49 6e 31 20 3d 20  LL */..  pIn1 = 
f360: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
f370: 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67    if( pIn1->flag
f380: 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a  s & MEM_Null ){.
f390: 20 20 20 20 76 31 20 3d 20 32 3b 0a 20 20 7d 65      v1 = 2;.  }e
f3a0: 6c 73 65 7b 0a 20 20 20 20 76 31 20 3d 20 73 71  lse{.    v1 = sq
f3b0: 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75  lite3VdbeIntValu
f3c0: 65 28 70 49 6e 31 29 21 3d 30 3b 0a 20 20 7d 0a  e(pIn1)!=0;.  }.
f3d0: 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70    pIn2 = &aMem[p
f3e0: 4f 70 2d 3e 70 32 5d 3b 0a 20 20 69 66 28 20 70  Op->p2];.  if( p
f3f0: 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In2->flags & MEM
f400: 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 76 32 20  _Null ){.    v2 
f410: 3d 20 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  = 2;.  }else{.  
f420: 20 20 76 32 20 3d 20 73 71 6c 69 74 65 33 56 64    v2 = sqlite3Vd
f430: 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 32 29  beIntValue(pIn2)
f440: 21 3d 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70  !=0;.  }.  if( p
f450: 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 41  Op->opcode==OP_A
f460: 6e 64 20 29 7b 0a 20 20 20 20 73 74 61 74 69 63  nd ){.    static
f470: 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20   const unsigned 
f480: 63 68 61 72 20 61 6e 64 5f 6c 6f 67 69 63 5b 5d  char and_logic[]
f490: 20 3d 20 7b 20 30 2c 20 30 2c 20 30 2c 20 30 2c   = { 0, 0, 0, 0,
f4a0: 20 31 2c 20 32 2c 20 30 2c 20 32 2c 20 32 20 7d   1, 2, 0, 2, 2 }
f4b0: 3b 0a 20 20 20 20 76 31 20 3d 20 61 6e 64 5f 6c  ;.    v1 = and_l
f4c0: 6f 67 69 63 5b 76 31 2a 33 2b 76 32 5d 3b 0a 20  ogic[v1*3+v2];. 
f4d0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 74 61 74   }else{.    stat
f4e0: 69 63 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65  ic const unsigne
f4f0: 64 20 63 68 61 72 20 6f 72 5f 6c 6f 67 69 63 5b  d char or_logic[
f500: 5d 20 3d 20 7b 20 30 2c 20 31 2c 20 32 2c 20 31  ] = { 0, 1, 2, 1
f510: 2c 20 31 2c 20 31 2c 20 32 2c 20 31 2c 20 32 20  , 1, 1, 2, 1, 2 
f520: 7d 3b 0a 20 20 20 20 76 31 20 3d 20 6f 72 5f 6c  };.    v1 = or_l
f530: 6f 67 69 63 5b 76 31 2a 33 2b 76 32 5d 3b 0a 20  ogic[v1*3+v2];. 
f540: 20 7d 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65   }.  pOut = &aMe
f550: 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66  m[pOp->p3];.  if
f560: 28 20 76 31 3d 3d 32 20 29 7b 0a 20 20 20 20 4d  ( v1==2 ){.    M
f570: 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f  emSetTypeFlag(pO
f580: 75 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20  ut, MEM_Null);. 
f590: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 4f 75 74   }else{.    pOut
f5a0: 2d 3e 75 2e 69 20 3d 20 76 31 3b 0a 20 20 20 20  ->u.i = v1;.    
f5b0: 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
f5c0: 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20  Out, MEM_Int);. 
f5d0: 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
f5e0: 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 20 50 31  * Opcode: Not P1
f5f0: 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
f600: 49 6e 74 65 72 70 72 65 74 20 74 68 65 20 76 61  Interpret the va
f610: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
f620: 50 31 20 61 73 20 61 20 62 6f 6f 6c 65 61 6e 20  P1 as a boolean 
f630: 76 61 6c 75 65 2e 20 20 53 74 6f 72 65 20 74 68  value.  Store th
f640: 65 0a 2a 2a 20 62 6f 6f 6c 65 61 6e 20 63 6f 6d  e.** boolean com
f650: 70 6c 65 6d 65 6e 74 20 69 6e 20 72 65 67 69 73  plement in regis
f660: 74 65 72 20 50 32 2e 20 20 49 66 20 74 68 65 20  ter P2.  If the 
f670: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
f680: 72 20 50 31 20 69 73 20 0a 2a 2a 20 4e 55 4c 4c  r P1 is .** NULL
f690: 2c 20 74 68 65 6e 20 61 20 4e 55 4c 4c 20 69 73  , then a NULL is
f6a0: 20 73 74 6f 72 65 64 20 69 6e 20 50 32 2e 0a 2a   stored in P2..*
f6b0: 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 3a 20 7b  /.case OP_Not: {
f6c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f6d0: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4e 4f  /* same as TK_NO
f6e0: 54 2c 20 69 6e 31 2c 20 6f 75 74 32 20 2a 2f 0a  T, in1, out2 */.
f6f0: 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
f700: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20  Op->p1];.  pOut 
f710: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
f720: 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c  ;.  if( pIn1->fl
f730: 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29  ags & MEM_Null )
f740: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
f750: 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74  eMemSetNull(pOut
f760: 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
f770: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
f780: 74 49 6e 74 36 34 28 70 4f 75 74 2c 20 21 73 71  tInt64(pOut, !sq
f790: 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75  lite3VdbeIntValu
f7a0: 65 28 70 49 6e 31 29 29 3b 0a 20 20 7d 0a 20 20  e(pIn1));.  }.  
f7b0: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
f7c0: 6f 64 65 3a 20 42 69 74 4e 6f 74 20 50 31 20 50  ode: BitNot P1 P
f7d0: 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 6e  2 * * *.**.** In
f7e0: 74 65 72 70 72 65 74 20 74 68 65 20 63 6f 6e 74  terpret the cont
f7f0: 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20  ent of register 
f800: 50 31 20 61 73 20 61 6e 20 69 6e 74 65 67 65 72  P1 as an integer
f810: 2e 20 20 53 74 6f 72 65 20 74 68 65 0a 2a 2a 20  .  Store the.** 
f820: 6f 6e 65 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20  ones-complement 
f830: 6f 66 20 74 68 65 20 50 31 20 76 61 6c 75 65 20  of the P1 value 
f840: 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  into register P2
f850: 2e 20 20 49 66 20 50 31 20 68 6f 6c 64 73 0a 2a  .  If P1 holds.*
f860: 2a 20 61 20 4e 55 4c 4c 20 74 68 65 6e 20 73 74  * a NULL then st
f870: 6f 72 65 20 61 20 4e 55 4c 4c 20 69 6e 20 50 32  ore a NULL in P2
f880: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 69 74  ..*/.case OP_Bit
f890: 4e 6f 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20  Not: {          
f8a0: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
f8b0: 5f 42 49 54 4e 4f 54 2c 20 69 6e 31 2c 20 6f 75  _BITNOT, in1, ou
f8c0: 74 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26  t2 */.  pIn1 = &
f8d0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
f8e0: 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f   pOut = &aMem[pO
f8f0: 70 2d 3e 70 32 5d 3b 0a 20 20 69 66 28 20 70 49  p->p2];.  if( pI
f900: 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
f910: 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69  Null ){.    sqli
f920: 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c  te3VdbeMemSetNul
f930: 6c 28 70 4f 75 74 29 3b 0a 20 20 7d 65 6c 73 65  l(pOut);.  }else
f940: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
f950: 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 70 4f 75  eMemSetInt64(pOu
f960: 74 2c 20 7e 73 71 6c 69 74 65 33 56 64 62 65 49  t, ~sqlite3VdbeI
f970: 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 29 3b 0a  ntValue(pIn1));.
f980: 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
f990: 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 20 50 31  /* Opcode: If P1
f9a0: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
f9b0: 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74   Jump to P2 if t
f9c0: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
f9d0: 73 74 65 72 20 50 31 20 69 73 20 74 72 75 65 2e  ster P1 is true.
f9e0: 20 20 54 68 65 20 76 61 6c 75 65 20 69 73 0a 2a    The value is.*
f9f0: 2a 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64 20  * is considered 
fa00: 74 72 75 65 20 69 66 20 69 74 20 69 73 20 6e 75  true if it is nu
fa10: 6d 65 72 69 63 20 61 6e 64 20 6e 6f 6e 2d 7a 65  meric and non-ze
fa20: 72 6f 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75  ro.  If the valu
fa30: 65 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20 4e 55  e.** in P1 is NU
fa40: 4c 4c 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65  LL then take the
fa50: 20 6a 75 6d 70 20 69 66 20 50 33 20 69 73 20 74   jump if P3 is t
fa60: 72 75 65 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  rue..*/./* Opcod
fa70: 65 3a 20 49 66 4e 6f 74 20 50 31 20 50 32 20 50  e: IfNot P1 P2 P
fa80: 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70  3 * *.**.** Jump
fa90: 20 74 6f 20 50 32 20 69 66 20 74 68 65 20 76 61   to P2 if the va
faa0: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
fab0: 50 31 20 69 73 20 46 61 6c 73 65 2e 20 20 54 68  P1 is False.  Th
fac0: 65 20 76 61 6c 75 65 20 69 73 0a 2a 2a 20 69 73  e value is.** is
fad0: 20 63 6f 6e 73 69 64 65 72 65 64 20 74 72 75 65   considered true
fae0: 20 69 66 20 69 74 20 68 61 73 20 61 20 6e 75 6d   if it has a num
faf0: 65 72 69 63 20 76 61 6c 75 65 20 6f 66 20 7a 65  eric value of ze
fb00: 72 6f 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75  ro.  If the valu
fb10: 65 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20 4e 55  e.** in P1 is NU
fb20: 4c 4c 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65  LL then take the
fb30: 20 6a 75 6d 70 20 69 66 20 50 33 20 69 73 20 74   jump if P3 is t
fb40: 72 75 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  rue..*/.case OP_
fb50: 49 66 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  If:             
fb60: 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31      /* jump, in1
fb70: 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 4e 6f   */.case OP_IfNo
fb80: 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  t: {            
fb90: 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a  /* jump, in1 */.
fba0: 20 20 69 6e 74 20 63 3b 0a 20 20 70 49 6e 31 20    int c;.  pIn1 
fbb0: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
fbc0: 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c  ;.  if( pIn1->fl
fbd0: 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29  ags & MEM_Null )
fbe0: 7b 0a 20 20 20 20 63 20 3d 20 70 4f 70 2d 3e 70  {.    c = pOp->p
fbf0: 33 3b 0a 20 20 7d 65 6c 73 65 7b 0a 23 69 66 64  3;.  }else{.#ifd
fc00: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ef SQLITE_OMIT_F
fc10: 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20  LOATING_POINT.  
fc20: 20 20 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62    c = sqlite3Vdb
fc30: 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 21  eIntValue(pIn1)!
fc40: 3d 30 3b 0a 23 65 6c 73 65 0a 20 20 20 20 63 20  =0;.#else.    c 
fc50: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 52 65 61  = sqlite3VdbeRea
fc60: 6c 56 61 6c 75 65 28 70 49 6e 31 29 21 3d 30 2e  lValue(pIn1)!=0.
fc70: 30 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 69 66  0;.#endif.    if
fc80: 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
fc90: 50 5f 49 66 4e 6f 74 20 29 20 63 20 3d 20 21 63  P_IfNot ) c = !c
fca0: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 63 20 29 7b  ;.  }.  if( c ){
fcb0: 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70  .    pc = pOp->p
fcc0: 32 2d 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  2-1;.  }.  break
fcd0: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
fce0: 49 73 4e 75 6c 6c 20 50 31 20 50 32 20 2a 20 2a  IsNull P1 P2 * *
fcf0: 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f   *.**.** Jump to
fd00: 20 50 32 20 69 66 20 74 68 65 20 76 61 6c 75 65   P2 if the value
fd10: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
fd20: 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65  is NULL..*/.case
fd30: 20 4f 50 5f 49 73 4e 75 6c 6c 3a 20 7b 20 20 20   OP_IsNull: {   
fd40: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
fd50: 20 61 73 20 54 4b 5f 49 53 4e 55 4c 4c 2c 20 6a   as TK_ISNULL, j
fd60: 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49  ump, in1 */.  pI
fd70: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
fd80: 70 31 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 31  p1];.  if( (pIn1
fd90: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ->flags & MEM_Nu
fda0: 6c 6c 29 21 3d 30 20 29 7b 0a 20 20 20 20 70 63  ll)!=0 ){.    pc
fdb0: 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
fdc0: 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
fdd0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 4e 75  /* Opcode: NotNu
fde0: 6c 6c 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  ll P1 P2 * * *.*
fdf0: 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20  *.** Jump to P2 
fe00: 69 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  if the value in 
fe10: 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20 6e  register P1 is n
fe20: 6f 74 20 4e 55 4c 4c 2e 20 20 0a 2a 2f 0a 63 61  ot NULL.  .*/.ca
fe30: 73 65 20 4f 50 5f 4e 6f 74 4e 75 6c 6c 3a 20 7b  se OP_NotNull: {
fe40: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
fe50: 61 6d 65 20 61 73 20 54 4b 5f 4e 4f 54 4e 55 4c  ame as TK_NOTNUL
fe60: 4c 2c 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a  L, jump, in1 */.
fe70: 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
fe80: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 28  Op->p1];.  if( (
fe90: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
fea0: 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20  M_Null)==0 ){.  
feb0: 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
fec0: 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b   1;.  }.  break;
fed0: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43  .}../* Opcode: C
fee0: 6f 6c 75 6d 6e 20 50 31 20 50 32 20 50 33 20 50  olumn P1 P2 P3 P
fef0: 34 20 50 35 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72  4 P5.**.** Inter
ff00: 70 72 65 74 20 74 68 65 20 64 61 74 61 20 74 68  pret the data th
ff10: 61 74 20 63 75 72 73 6f 72 20 50 31 20 70 6f 69  at cursor P1 poi
ff20: 6e 74 73 20 74 6f 20 61 73 20 61 20 73 74 72 75  nts to as a stru
ff30: 63 74 75 72 65 20 62 75 69 6c 74 20 75 73 69 6e  cture built usin
ff40: 67 0a 2a 2a 20 74 68 65 20 4d 61 6b 65 52 65 63  g.** the MakeRec
ff50: 6f 72 64 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ord instruction.
ff60: 20 20 28 53 65 65 20 74 68 65 20 4d 61 6b 65 52    (See the MakeR
ff70: 65 63 6f 72 64 20 6f 70 63 6f 64 65 20 66 6f 72  ecord opcode for
ff80: 20 61 64 64 69 74 69 6f 6e 61 6c 0a 2a 2a 20 69   additional.** i
ff90: 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74  nformation about
ffa0: 20 74 68 65 20 66 6f 72 6d 61 74 20 6f 66 20 74   the format of t
ffb0: 68 65 20 64 61 74 61 2e 29 20 20 45 78 74 72 61  he data.)  Extra
ffc0: 63 74 20 74 68 65 20 50 32 2d 74 68 20 63 6f 6c  ct the P2-th col
ffd0: 75 6d 6e 0a 2a 2a 20 66 72 6f 6d 20 74 68 69 73  umn.** from this
ffe0: 20 72 65 63 6f 72 64 2e 20 20 49 66 20 74 68 65   record.  If the
fff0: 72 65 20 61 72 65 20 6c 65 73 73 20 74 68 61 74  re are less that
10000 20 28 50 32 2b 31 29 20 0a 2a 2a 20 76 61 6c 75   (P2+1) .** valu
10010 65 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64  es in the record
10020 2c 20 65 78 74 72 61 63 74 20 61 20 4e 55 4c 4c  , extract a NULL
10030 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 76 61 6c 75  ..**.** The valu
10040 65 20 65 78 74 72 61 63 74 65 64 20 69 73 20 73  e extracted is s
10050 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65  tored in registe
10060 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  r P3..**.** If t
10070 68 65 20 63 6f 6c 75 6d 6e 20 63 6f 6e 74 61 69  he column contai
10080 6e 73 20 66 65 77 65 72 20 74 68 61 6e 20 50 32  ns fewer than P2
10090 20 66 69 65 6c 64 73 2c 20 74 68 65 6e 20 65 78   fields, then ex
100a0 74 72 61 63 74 20 61 20 4e 55 4c 4c 2e 20 20 4f  tract a NULL.  O
100b0 72 2c 0a 2a 2a 20 69 66 20 74 68 65 20 50 34 20  r,.** if the P4 
100c0 61 72 67 75 6d 65 6e 74 20 69 73 20 61 20 50 34  argument is a P4
100d0 5f 4d 45 4d 20 75 73 65 20 74 68 65 20 76 61 6c  _MEM use the val
100e0 75 65 20 6f 66 20 74 68 65 20 50 34 20 61 72 67  ue of the P4 arg
100f0 75 6d 65 6e 74 20 61 73 0a 2a 2a 20 74 68 65 20  ument as.** the 
10100 72 65 73 75 6c 74 2e 0a 2a 2a 0a 2a 2a 20 49 66  result..**.** If
10110 20 74 68 65 20 4f 50 46 4c 41 47 5f 43 4c 45 41   the OPFLAG_CLEA
10120 52 43 41 43 48 45 20 62 69 74 20 69 73 20 73 65  RCACHE bit is se
10130 74 20 6f 6e 20 50 35 20 61 6e 64 20 50 31 20 69  t on P5 and P1 i
10140 73 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65  s a pseudo-table
10150 20 63 75 72 73 6f 72 2c 0a 2a 2a 20 74 68 65 6e   cursor,.** then
10160 20 74 68 65 20 63 61 63 68 65 20 6f 66 20 74 68   the cache of th
10170 65 20 63 75 72 73 6f 72 20 69 73 20 72 65 73 65  e cursor is rese
10180 74 20 70 72 69 6f 72 20 74 6f 20 65 78 74 72 61  t prior to extra
10190 63 74 69 6e 67 20 74 68 65 20 63 6f 6c 75 6d 6e  cting the column
101a0 2e 0a 2a 2a 20 54 68 65 20 66 69 72 73 74 20 4f  ..** The first O
101b0 50 5f 43 6f 6c 75 6d 6e 20 61 67 61 69 6e 73 74  P_Column against
101c0 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20   a pseudo-table 
101d0 61 66 74 65 72 20 74 68 65 20 76 61 6c 75 65 20  after the value 
101e0 6f 66 20 74 68 65 20 63 6f 6e 74 65 6e 74 0a 2a  of the content.*
101f0 2a 20 72 65 67 69 73 74 65 72 20 68 61 73 20 63  * register has c
10200 68 61 6e 67 65 64 20 73 68 6f 75 6c 64 20 68 61  hanged should ha
10210 76 65 20 74 68 69 73 20 62 69 74 20 73 65 74 2e  ve this bit set.
10220 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6c 75  .*/.case OP_Colu
10230 6d 6e 3a 20 7b 0a 20 20 75 33 32 20 70 61 79 6c  mn: {.  u32 payl
10240 6f 61 64 53 69 7a 65 3b 20 20 20 2f 2a 20 4e 75  oadSize;   /* Nu
10250 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 69 6e  mber of bytes in
10260 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20   the record */. 
10270 20 69 36 34 20 70 61 79 6c 6f 61 64 53 69 7a 65   i64 payloadSize
10280 36 34 3b 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66  64; /* Number of
10290 20 62 79 74 65 73 20 69 6e 20 74 68 65 20 72 65   bytes in the re
102a0 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 70 31  cord */.  int p1
102b0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
102c0 50 31 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  P1 value of the 
102d0 6f 70 63 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20  opcode */.  int 
102e0 70 32 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  p2;            /
102f0 2a 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20  * column number 
10300 74 6f 20 72 65 74 72 69 65 76 65 20 2a 2f 0a 20  to retrieve */. 
10310 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
10320 20 20 20 20 2f 2a 20 54 68 65 20 56 44 42 45 20      /* The VDBE 
10330 63 75 72 73 6f 72 20 2a 2f 0a 20 20 63 68 61 72  cursor */.  char
10340 20 2a 7a 52 65 63 3b 20 20 20 20 20 20 20 20 2f   *zRec;        /
10350 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 63 6f 6d  * Pointer to com
10360 70 6c 65 74 65 20 72 65 63 6f 72 64 2d 64 61 74  plete record-dat
10370 61 20 2a 2f 0a 20 20 42 74 43 75 72 73 6f 72 20  a */.  BtCursor 
10380 2a 70 43 72 73 72 3b 20 20 20 2f 2a 20 54 68 65  *pCrsr;   /* The
10390 20 42 54 72 65 65 20 63 75 72 73 6f 72 20 2a 2f   BTree cursor */
103a0 0a 20 20 75 33 32 20 2a 61 54 79 70 65 3b 20 20  .  u32 *aType;  
103b0 20 20 20 20 20 20 2f 2a 20 61 54 79 70 65 5b 69        /* aType[i
103c0 5d 20 68 6f 6c 64 73 20 74 68 65 20 6e 75 6d 65  ] holds the nume
103d0 72 69 63 20 74 79 70 65 20 6f 66 20 74 68 65 20  ric type of the 
103e0 69 2d 74 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20  i-th column */. 
103f0 20 75 33 32 20 2a 61 4f 66 66 73 65 74 3b 20 20   u32 *aOffset;  
10400 20 20 20 20 2f 2a 20 61 4f 66 66 73 65 74 5b 69      /* aOffset[i
10410 5d 20 69 73 20 6f 66 66 73 65 74 20 74 6f 20 73  ] is offset to s
10420 74 61 72 74 20 6f 66 20 64 61 74 61 20 66 6f 72  tart of data for
10430 20 69 2d 74 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a   i-th column */.
10440 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b 20 20 20    int nField;   
10450 20 20 20 20 20 2f 2a 20 6e 75 6d 62 65 72 20 6f       /* number o
10460 66 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20  f fields in the 
10470 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20  record */.  int 
10480 6c 65 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f  len;           /
10490 2a 20 54 68 65 20 6c 65 6e 67 74 68 20 6f 66 20  * The length of 
104a0 74 68 65 20 73 65 72 69 61 6c 69 7a 65 64 20 64  the serialized d
104b0 61 74 61 20 66 6f 72 20 74 68 65 20 63 6f 6c 75  ata for the colu
104c0 6d 6e 20 2a 2f 0a 20 20 69 6e 74 20 69 3b 20 20  mn */.  int i;  
104d0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f             /* Lo
104e0 6f 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20  op counter */.  
104f0 63 68 61 72 20 2a 7a 44 61 74 61 3b 20 20 20 20  char *zData;    
10500 20 20 20 2f 2a 20 50 61 72 74 20 6f 66 20 74 68     /* Part of th
10510 65 20 72 65 63 6f 72 64 20 62 65 69 6e 67 20 64  e record being d
10520 65 63 6f 64 65 64 20 2a 2f 0a 20 20 4d 65 6d 20  ecoded */.  Mem 
10530 2a 70 44 65 73 74 3b 20 20 20 20 20 20 20 20 2f  *pDest;        /
10540 2a 20 57 68 65 72 65 20 74 6f 20 77 72 69 74 65  * Where to write
10550 20 74 68 65 20 65 78 74 72 61 63 74 65 64 20 76   the extracted v
10560 61 6c 75 65 20 2a 2f 0a 20 20 4d 65 6d 20 73 4d  alue */.  Mem sM
10570 65 6d 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  em;          /* 
10580 46 6f 72 20 73 74 6f 72 69 6e 67 20 74 68 65 20  For storing the 
10590 72 65 63 6f 72 64 20 62 65 69 6e 67 20 64 65 63  record being dec
105a0 6f 64 65 64 20 2a 2f 0a 20 20 75 38 20 2a 7a 49  oded */.  u8 *zI
105b0 64 78 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  dx;          /* 
105c0 49 6e 64 65 78 20 69 6e 74 6f 20 68 65 61 64 65  Index into heade
105d0 72 20 2a 2f 0a 20 20 75 38 20 2a 7a 45 6e 64 48  r */.  u8 *zEndH
105e0 64 72 3b 20 20 20 20 20 20 20 2f 2a 20 50 6f 69  dr;       /* Poi
105f0 6e 74 65 72 20 74 6f 20 66 69 72 73 74 20 62 79  nter to first by
10600 74 65 20 61 66 74 65 72 20 74 68 65 20 68 65 61  te after the hea
10610 64 65 72 20 2a 2f 0a 20 20 75 33 32 20 6f 66 66  der */.  u32 off
10620 73 65 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 4f  set;        /* O
10630 66 66 73 65 74 20 69 6e 74 6f 20 74 68 65 20 64  ffset into the d
10640 61 74 61 20 2a 2f 0a 20 20 75 33 32 20 73 7a 46  ata */.  u32 szF
10650 69 65 6c 64 3b 20 20 20 20 20 20 20 2f 2a 20 4e  ield;       /* N
10660 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 69  umber of bytes i
10670 6e 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  n the content of
10680 20 61 20 66 69 65 6c 64 20 2a 2f 0a 20 20 69 6e   a field */.  in
10690 74 20 73 7a 48 64 72 3b 20 20 20 20 20 20 20 20  t szHdr;        
106a0 20 2f 2a 20 53 69 7a 65 20 6f 66 20 74 68 65 20   /* Size of the 
106b0 68 65 61 64 65 72 20 73 69 7a 65 20 66 69 65 6c  header size fiel
106c0 64 20 61 74 20 73 74 61 72 74 20 6f 66 20 72 65  d at start of re
106d0 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 61 76  cord */.  int av
106e0 61 69 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ail;         /* 
106f0 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20  Number of bytes 
10700 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 64 61 74  of available dat
10710 61 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 52 65 67  a */.  Mem *pReg
10720 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 50 73 65  ;         /* Pse
10730 75 64 6f 54 61 62 6c 65 20 69 6e 70 75 74 20 72  udoTable input r
10740 65 67 69 73 74 65 72 20 2a 2f 0a 0a 0a 20 20 70  egister */...  p
10750 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70  1 = pOp->p1;.  p
10760 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 70  2 = pOp->p2;.  p
10770 43 20 3d 20 30 3b 0a 20 20 6d 65 6d 73 65 74 28  C = 0;.  memset(
10780 26 73 4d 65 6d 2c 20 30 2c 20 73 69 7a 65 6f 66  &sMem, 0, sizeof
10790 28 73 4d 65 6d 29 29 3b 0a 20 20 61 73 73 65 72  (sMem));.  asser
107a0 74 28 20 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  t( p1<p->nCursor
107b0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
107c0 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p3>0 && pOp->
107d0 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20  p3<=p->nMem );. 
107e0 20 70 44 65 73 74 20 3d 20 26 61 4d 65 6d 5b 70   pDest = &aMem[p
107f0 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41 62  Op->p3];.  memAb
10800 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70  outToChange(p, p
10810 44 65 73 74 29 3b 0a 20 20 4d 65 6d 53 65 74 54  Dest);.  MemSetT
10820 79 70 65 46 6c 61 67 28 70 44 65 73 74 2c 20 4d  ypeFlag(pDest, M
10830 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 7a 52 65 63  EM_Null);.  zRec
10840 20 3d 20 30 3b 0a 0a 20 20 2f 2a 20 54 68 69 73   = 0;..  /* This
10850 20 62 6c 6f 63 6b 20 73 65 74 73 20 74 68 65 20   block sets the 
10860 76 61 72 69 61 62 6c 65 20 70 61 79 6c 6f 61 64  variable payload
10870 53 69 7a 65 20 74 6f 20 62 65 20 74 68 65 20 74  Size to be the t
10880 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 0a 20  otal number of. 
10890 20 2a 2a 20 62 79 74 65 73 20 69 6e 20 74 68 65   ** bytes in the
108a0 20 72 65 63 6f 72 64 2e 0a 20 20 2a 2a 0a 20 20   record..  **.  
108b0 2a 2a 20 7a 52 65 63 20 69 73 20 73 65 74 20 74  ** zRec is set t
108c0 6f 20 62 65 20 74 68 65 20 63 6f 6d 70 6c 65 74  o be the complet
108d0 65 20 74 65 78 74 20 6f 66 20 74 68 65 20 72 65  e text of the re
108e0 63 6f 72 64 20 69 66 20 69 74 20 69 73 20 61 76  cord if it is av
108f0 61 69 6c 61 62 6c 65 2e 0a 20 20 2a 2a 20 54 68  ailable..  ** Th
10900 65 20 63 6f 6d 70 6c 65 74 65 20 72 65 63 6f 72  e complete recor
10910 64 20 74 65 78 74 20 69 73 20 61 6c 77 61 79 73  d text is always
10920 20 61 76 61 69 6c 61 62 6c 65 20 66 6f 72 20 70   available for p
10930 73 65 75 64 6f 2d 74 61 62 6c 65 73 0a 20 20 2a  seudo-tables.  *
10940 2a 20 49 66 20 74 68 65 20 72 65 63 6f 72 64 20  * If the record 
10950 69 73 20 73 74 6f 72 65 64 20 69 6e 20 61 20 63  is stored in a c
10960 75 72 73 6f 72 2c 20 74 68 65 20 63 6f 6d 70 6c  ursor, the compl
10970 65 74 65 20 72 65 63 6f 72 64 20 74 65 78 74 0a  ete record text.
10980 20 20 2a 2a 20 6d 69 67 68 74 20 62 65 20 61 76    ** might be av
10990 61 69 6c 61 62 6c 65 20 69 6e 20 74 68 65 20 20  ailable in the  
109a0 70 43 2d 3e 61 52 6f 77 20 63 61 63 68 65 2e 20  pC->aRow cache. 
109b0 20 4f 72 20 69 74 20 6d 69 67 68 74 20 6e 6f 74   Or it might not
109c0 20 62 65 2e 0a 20 20 2a 2a 20 49 66 20 74 68 65   be..  ** If the
109d0 20 64 61 74 61 20 69 73 20 75 6e 61 76 61 69 6c   data is unavail
109e0 61 62 6c 65 2c 20 20 7a 52 65 63 20 69 73 20 73  able,  zRec is s
109f0 65 74 20 74 6f 20 4e 55 4c 4c 2e 0a 20 20 2a 2a  et to NULL..  **
10a00 0a 20 20 2a 2a 20 57 65 20 61 6c 73 6f 20 63 6f  .  ** We also co
10a10 6d 70 75 74 65 20 74 68 65 20 6e 75 6d 62 65 72  mpute the number
10a20 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74   of columns in t
10a30 68 65 20 72 65 63 6f 72 64 2e 20 20 46 6f 72 20  he record.  For 
10a40 63 75 72 73 6f 72 73 2c 0a 20 20 2a 2a 20 74 68  cursors,.  ** th
10a50 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  e number of colu
10a60 6d 6e 73 20 69 73 20 73 74 6f 72 65 64 20 69 6e  mns is stored in
10a70 20 74 68 65 20 56 64 62 65 43 75 72 73 6f 72 2e   the VdbeCursor.
10a80 6e 46 69 65 6c 64 20 65 6c 65 6d 65 6e 74 2e 0a  nField element..
10a90 20 20 2a 2f 0a 20 20 70 43 20 3d 20 70 2d 3e 61    */.  pC = p->a
10aa0 70 43 73 72 5b 70 31 5d 3b 0a 20 20 61 73 73 65  pCsr[p1];.  asse
10ab0 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 23 69 66  rt( pC!=0 );.#if
10ac0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
10ad0 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20  _VIRTUALTABLE.  
10ae0 61 73 73 65 72 74 28 20 70 43 2d 3e 70 56 74 61  assert( pC->pVta
10af0 62 43 75 72 73 6f 72 3d 3d 30 20 29 3b 0a 23 65  bCursor==0 );.#e
10b00 6e 64 69 66 0a 20 20 70 43 72 73 72 20 3d 20 70  ndif.  pCrsr = p
10b10 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 69 66  C->pCursor;.  if
10b20 28 20 70 43 72 73 72 21 3d 30 20 29 7b 0a 20 20  ( pCrsr!=0 ){.  
10b30 20 20 2f 2a 20 54 68 65 20 72 65 63 6f 72 64 20    /* The record 
10b40 69 73 20 73 74 6f 72 65 64 20 69 6e 20 61 20 42  is stored in a B
10b50 2d 54 72 65 65 20 2a 2f 0a 20 20 20 20 72 63 20  -Tree */.    rc 
10b60 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72  = sqlite3VdbeCur
10b70 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b 0a 20  sorMoveto(pC);. 
10b80 20 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f     if( rc ) goto
10b90 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
10ba0 72 6f 72 3b 0a 20 20 20 20 69 66 28 20 70 43 2d  ror;.    if( pC-
10bb0 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20  >nullRow ){.    
10bc0 20 20 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20    payloadSize = 
10bd0 30 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  0;.    }else if(
10be0 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
10bf0 3d 3d 70 2d 3e 63 61 63 68 65 43 74 72 20 29 7b  ==p->cacheCtr ){
10c00 0a 20 20 20 20 20 20 70 61 79 6c 6f 61 64 53 69  .      payloadSi
10c10 7a 65 20 3d 20 70 43 2d 3e 70 61 79 6c 6f 61 64  ze = pC->payload
10c20 53 69 7a 65 3b 0a 20 20 20 20 20 20 7a 52 65 63  Size;.      zRec
10c30 20 3d 20 28 63 68 61 72 2a 29 70 43 2d 3e 61 52   = (char*)pC->aR
10c40 6f 77 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66  ow;.    }else if
10c50 28 20 70 43 2d 3e 69 73 49 6e 64 65 78 20 29 7b  ( pC->isIndex ){
10c60 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73  .      assert( s
10c70 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f  qlite3BtreeCurso
10c80 72 49 73 56 61 6c 69 64 28 70 43 72 73 72 29 20  rIsValid(pCrsr) 
10c90 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71  );.      rc = sq
10ca0 6c 69 74 65 33 42 74 72 65 65 4b 65 79 53 69 7a  lite3BtreeKeySiz
10cb0 65 28 70 43 72 73 72 2c 20 26 70 61 79 6c 6f 61  e(pCrsr, &payloa
10cc0 64 53 69 7a 65 36 34 29 3b 0a 20 20 20 20 20 20  dSize64);.      
10cd0 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49  assert( rc==SQLI
10ce0 54 45 5f 4f 4b 20 29 3b 20 20 20 2f 2a 20 54 72  TE_OK );   /* Tr
10cf0 75 65 20 62 65 63 61 75 73 65 20 6f 66 20 43 75  ue because of Cu
10d00 72 73 6f 72 4d 6f 76 65 74 6f 28 29 20 63 61 6c  rsorMoveto() cal
10d10 6c 20 61 62 6f 76 65 20 2a 2f 0a 20 20 20 20 20  l above */.     
10d20 20 2f 2a 20 73 71 6c 69 74 65 33 42 74 72 65 65   /* sqlite3Btree
10d30 50 61 72 73 65 43 65 6c 6c 50 74 72 28 29 20 75  ParseCellPtr() u
10d40 73 65 73 20 67 65 74 56 61 72 69 6e 74 33 32 28  ses getVarint32(
10d50 29 20 74 6f 20 65 78 74 72 61 63 74 20 74 68 65  ) to extract the
10d60 0a 20 20 20 20 20 20 2a 2a 20 70 61 79 6c 6f 61  .      ** payloa
10d70 64 20 73 69 7a 65 2c 20 73 6f 20 69 74 20 69 73  d size, so it is
10d80 20 69 6d 70 6f 73 73 69 62 6c 65 20 66 6f 72 20   impossible for 
10d90 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 20 74 6f  payloadSize64 to
10da0 20 62 65 0a 20 20 20 20 20 20 2a 2a 20 6c 61 72   be.      ** lar
10db0 67 65 72 20 74 68 61 6e 20 33 32 20 62 69 74 73  ger than 32 bits
10dc0 2e 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72  . */.      asser
10dd0 74 28 20 28 70 61 79 6c 6f 61 64 53 69 7a 65 36  t( (payloadSize6
10de0 34 20 26 20 53 51 4c 49 54 45 5f 4d 41 58 5f 55  4 & SQLITE_MAX_U
10df0 33 32 29 3d 3d 28 75 36 34 29 70 61 79 6c 6f 61  32)==(u64)payloa
10e00 64 53 69 7a 65 36 34 20 29 3b 0a 20 20 20 20 20  dSize64 );.     
10e10 20 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20 28   payloadSize = (
10e20 75 33 32 29 70 61 79 6c 6f 61 64 53 69 7a 65 36  u32)payloadSize6
10e30 34 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  4;.    }else{.  
10e40 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69      assert( sqli
10e50 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 49 73  te3BtreeCursorIs
10e60 56 61 6c 69 64 28 70 43 72 73 72 29 20 29 3b 0a  Valid(pCrsr) );.
10e70 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
10e80 65 33 42 74 72 65 65 44 61 74 61 53 69 7a 65 28  e3BtreeDataSize(
10e90 70 43 72 73 72 2c 20 26 70 61 79 6c 6f 61 64 53  pCrsr, &payloadS
10ea0 69 7a 65 29 3b 0a 20 20 20 20 20 20 61 73 73 65  ize);.      asse
10eb0 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  rt( rc==SQLITE_O
10ec0 4b 20 29 3b 20 20 20 2f 2a 20 44 61 74 61 53 69  K );   /* DataSi
10ed0 7a 65 28 29 20 63 61 6e 6e 6f 74 20 66 61 69 6c  ze() cannot fail
10ee0 20 2a 2f 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73   */.    }.  }els
10ef0 65 20 69 66 28 20 70 43 2d 3e 70 73 65 75 64 6f  e if( pC->pseudo
10f00 54 61 62 6c 65 52 65 67 3e 30 20 29 7b 0a 20 20  TableReg>0 ){.  
10f10 20 20 70 52 65 67 20 3d 20 26 61 4d 65 6d 5b 70    pReg = &aMem[p
10f20 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65  C->pseudoTableRe
10f30 67 5d 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  g];.    assert( 
10f40 70 52 65 67 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pReg->flags & ME
10f50 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20 20 20 61 73  M_Blob );.    as
10f60 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
10f70 28 70 52 65 67 29 20 29 3b 0a 20 20 20 20 70 61  (pReg) );.    pa
10f80 79 6c 6f 61 64 53 69 7a 65 20 3d 20 70 52 65 67  yloadSize = pReg
10f90 2d 3e 6e 3b 0a 20 20 20 20 7a 52 65 63 20 3d 20  ->n;.    zRec = 
10fa0 70 52 65 67 2d 3e 7a 3b 0a 20 20 20 20 70 43 2d  pReg->z;.    pC-
10fb0 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 28  >cacheStatus = (
10fc0 70 4f 70 2d 3e 70 35 26 4f 50 46 4c 41 47 5f 43  pOp->p5&OPFLAG_C
10fd0 4c 45 41 52 43 41 43 48 45 29 20 3f 20 43 41 43  LEARCACHE) ? CAC
10fe0 48 45 5f 53 54 41 4c 45 20 3a 20 70 2d 3e 63 61  HE_STALE : p->ca
10ff0 63 68 65 43 74 72 3b 0a 20 20 20 20 61 73 73 65  cheCtr;.    asse
11000 72 74 28 20 70 61 79 6c 6f 61 64 53 69 7a 65 3d  rt( payloadSize=
11010 3d 30 20 7c 7c 20 7a 52 65 63 21 3d 30 20 29 3b  =0 || zRec!=0 );
11020 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a  .  }else{.    /*
11030 20 43 6f 6e 73 69 64 65 72 20 74 68 65 20 72 6f   Consider the ro
11040 77 20 74 6f 20 62 65 20 4e 55 4c 4c 20 2a 2f 0a  w to be NULL */.
11050 20 20 20 20 70 61 79 6c 6f 61 64 53 69 7a 65 20      payloadSize 
11060 3d 20 30 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49  = 0;.  }..  /* I
11070 66 20 70 61 79 6c 6f 61 64 53 69 7a 65 20 69 73  f payloadSize is
11080 20 30 2c 20 74 68 65 6e 20 6a 75 73 74 20 73 74   0, then just st
11090 6f 72 65 20 61 20 4e 55 4c 4c 20 2a 2f 0a 20 20  ore a NULL */.  
110a0 69 66 28 20 70 61 79 6c 6f 61 64 53 69 7a 65 3d  if( payloadSize=
110b0 3d 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  =0 ){.    assert
110c0 28 20 70 44 65 73 74 2d 3e 66 6c 61 67 73 26 4d  ( pDest->flags&M
110d0 45 4d 5f 4e 75 6c 6c 20 29 3b 0a 20 20 20 20 67  EM_Null );.    g
110e0 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75  oto op_column_ou
110f0 74 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28  t;.  }.  assert(
11100 20 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49   db->aLimit[SQLI
11110 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d  TE_LIMIT_LENGTH]
11120 3e 3d 30 20 29 3b 0a 20 20 69 66 28 20 70 61 79  >=0 );.  if( pay
11130 6c 6f 61 64 53 69 7a 65 20 3e 20 28 75 33 32 29  loadSize > (u32)
11140 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54  db->aLimit[SQLIT
11150 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20  E_LIMIT_LENGTH] 
11160 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f  ){.    goto too_
11170 62 69 67 3b 0a 20 20 7d 0a 0a 20 20 6e 46 69 65  big;.  }..  nFie
11180 6c 64 20 3d 20 70 43 2d 3e 6e 46 69 65 6c 64 3b  ld = pC->nField;
11190 0a 20 20 61 73 73 65 72 74 28 20 70 32 3c 6e 46  .  assert( p2<nF
111a0 69 65 6c 64 20 29 3b 0a 0a 20 20 2f 2a 20 52 65  ield );..  /* Re
111b0 61 64 20 61 6e 64 20 70 61 72 73 65 20 74 68 65  ad and parse the
111c0 20 74 61 62 6c 65 20 68 65 61 64 65 72 2e 20 20   table header.  
111d0 53 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74  Store the result
111e0 73 20 6f 66 20 74 68 65 20 70 61 72 73 65 0a 20  s of the parse. 
111f0 20 2a 2a 20 69 6e 74 6f 20 74 68 65 20 72 65 63   ** into the rec
11200 6f 72 64 20 68 65 61 64 65 72 20 63 61 63 68 65  ord header cache
11210 20 66 69 65 6c 64 73 20 6f 66 20 74 68 65 20 63   fields of the c
11220 75 72 73 6f 72 2e 0a 20 20 2a 2f 0a 20 20 61 54  ursor..  */.  aT
11230 79 70 65 20 3d 20 70 43 2d 3e 61 54 79 70 65 3b  ype = pC->aType;
11240 0a 20 20 69 66 28 20 70 43 2d 3e 63 61 63 68 65  .  if( pC->cache
11250 53 74 61 74 75 73 3d 3d 70 2d 3e 63 61 63 68 65  Status==p->cache
11260 43 74 72 20 29 7b 0a 20 20 20 20 61 4f 66 66 73  Ctr ){.    aOffs
11270 65 74 20 3d 20 70 43 2d 3e 61 4f 66 66 73 65 74  et = pC->aOffset
11280 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61  ;.  }else{.    a
11290 73 73 65 72 74 28 61 54 79 70 65 29 3b 0a 20 20  ssert(aType);.  
112a0 20 20 61 76 61 69 6c 20 3d 20 30 3b 0a 20 20 20    avail = 0;.   
112b0 20 70 43 2d 3e 61 4f 66 66 73 65 74 20 3d 20 61   pC->aOffset = a
112c0 4f 66 66 73 65 74 20 3d 20 26 61 54 79 70 65 5b  Offset = &aType[
112d0 6e 46 69 65 6c 64 5d 3b 0a 20 20 20 20 70 43 2d  nField];.    pC-
112e0 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20 70  >payloadSize = p
112f0 61 79 6c 6f 61 64 53 69 7a 65 3b 0a 20 20 20 20  ayloadSize;.    
11300 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20  pC->cacheStatus 
11310 3d 20 70 2d 3e 63 61 63 68 65 43 74 72 3b 0a 0a  = p->cacheCtr;..
11320 20 20 20 20 2f 2a 20 46 69 67 75 72 65 20 6f 75      /* Figure ou
11330 74 20 68 6f 77 20 6d 61 6e 79 20 62 79 74 65 73  t how many bytes
11340 20 61 72 65 20 69 6e 20 74 68 65 20 68 65 61 64   are in the head
11350 65 72 20 2a 2f 0a 20 20 20 20 69 66 28 20 7a 52  er */.    if( zR
11360 65 63 20 29 7b 0a 20 20 20 20 20 20 7a 44 61 74  ec ){.      zDat
11370 61 20 3d 20 7a 52 65 63 3b 0a 20 20 20 20 7d 65  a = zRec;.    }e
11380 6c 73 65 7b 0a 20 20 20 20 20 20 69 66 28 20 70  lse{.      if( p
11390 43 2d 3e 69 73 49 6e 64 65 78 20 29 7b 0a 20 20  C->isIndex ){.  
113a0 20 20 20 20 20 20 7a 44 61 74 61 20 3d 20 28 63        zData = (c
113b0 68 61 72 2a 29 73 71 6c 69 74 65 33 42 74 72 65  har*)sqlite3Btre
113c0 65 4b 65 79 46 65 74 63 68 28 70 43 72 73 72 2c  eKeyFetch(pCrsr,
113d0 20 26 61 76 61 69 6c 29 3b 0a 20 20 20 20 20 20   &avail);.      
113e0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 7a  }else{.        z
113f0 44 61 74 61 20 3d 20 28 63 68 61 72 2a 29 73 71  Data = (char*)sq
11400 6c 69 74 65 33 42 74 72 65 65 44 61 74 61 46 65  lite3BtreeDataFe
11410 74 63 68 28 70 43 72 73 72 2c 20 26 61 76 61 69  tch(pCrsr, &avai
11420 6c 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  l);.      }.    
11430 20 20 2f 2a 20 49 66 20 4b 65 79 46 65 74 63 68    /* If KeyFetch
11440 28 29 2f 44 61 74 61 46 65 74 63 68 28 29 20 6d  ()/DataFetch() m
11450 61 6e 61 67 65 64 20 74 6f 20 67 65 74 20 74 68  anaged to get th
11460 65 20 65 6e 74 69 72 65 20 70 61 79 6c 6f 61 64  e entire payload
11470 2c 0a 20 20 20 20 20 20 2a 2a 20 73 61 76 65 20  ,.      ** save 
11480 74 68 65 20 70 61 79 6c 6f 61 64 20 69 6e 20 74  the payload in t
11490 68 65 20 70 43 2d 3e 61 52 6f 77 20 63 61 63 68  he pC->aRow cach
114a0 65 2e 20 20 54 68 61 74 20 77 69 6c 6c 20 73 61  e.  That will sa
114b0 76 65 20 75 73 20 66 72 6f 6d 0a 20 20 20 20 20  ve us from.     
114c0 20 2a 2a 20 68 61 76 69 6e 67 20 74 6f 20 6d 61   ** having to ma
114d0 6b 65 20 61 64 64 69 74 69 6f 6e 61 6c 20 63 61  ke additional ca
114e0 6c 6c 73 20 74 6f 20 66 65 74 63 68 20 74 68 65  lls to fetch the
114f0 20 63 6f 6e 74 65 6e 74 20 70 6f 72 74 69 6f 6e   content portion
11500 20 6f 66 0a 20 20 20 20 20 20 2a 2a 20 74 68 65   of.      ** the
11510 20 72 65 63 6f 72 64 2e 0a 20 20 20 20 20 20 2a   record..      *
11520 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  /.      assert( 
11530 61 76 61 69 6c 3e 3d 30 20 29 3b 0a 20 20 20 20  avail>=0 );.    
11540 20 20 69 66 28 20 70 61 79 6c 6f 61 64 53 69 7a    if( payloadSiz
11550 65 20 3c 3d 20 28 75 33 32 29 61 76 61 69 6c 20  e <= (u32)avail 
11560 29 7b 0a 20 20 20 20 20 20 20 20 7a 52 65 63 20  ){.        zRec 
11570 3d 20 7a 44 61 74 61 3b 0a 20 20 20 20 20 20 20  = zData;.       
11580 20 70 43 2d 3e 61 52 6f 77 20 3d 20 28 75 38 2a   pC->aRow = (u8*
11590 29 7a 44 61 74 61 3b 0a 20 20 20 20 20 20 7d 65  )zData;.      }e
115a0 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 70 43 2d  lse{.        pC-
115b0 3e 61 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20 20  >aRow = 0;.     
115c0 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 2f 2a 20   }.    }.    /* 
115d0 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 73  The following as
115e0 73 65 72 74 20 69 73 20 74 72 75 65 20 69 6e 20  sert is true in 
115f0 61 6c 6c 20 63 61 73 65 73 20 61 63 63 65 70 74  all cases accept
11600 20 77 68 65 6e 0a 20 20 20 20 2a 2a 20 74 68 65   when.    ** the
11610 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 68   database file h
11620 61 73 20 62 65 65 6e 20 63 6f 72 72 75 70 74 65  as been corrupte
11630 64 20 65 78 74 65 72 6e 61 6c 6c 79 2e 0a 20 20  d externally..  
11640 20 20 2a 2a 20 20 20 20 61 73 73 65 72 74 28 20    **    assert( 
11650 7a 52 65 63 21 3d 30 20 7c 7c 20 61 76 61 69 6c  zRec!=0 || avail
11660 3e 3d 70 61 79 6c 6f 61 64 53 69 7a 65 20 7c 7c  >=payloadSize ||
11670 20 61 76 61 69 6c 3e 3d 39 20 29 3b 20 2a 2f 0a   avail>=9 ); */.
11680 20 20 20 20 73 7a 48 64 72 20 3d 20 67 65 74 56      szHdr = getV
11690 61 72 69 6e 74 33 32 28 28 75 38 2a 29 7a 44 61  arint32((u8*)zDa
116a0 74 61 2c 20 6f 66 66 73 65 74 29 3b 0a 0a 20 20  ta, offset);..  
116b0 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 61    /* Make sure a
116c0 20 63 6f 72 72 75 70 74 20 64 61 74 61 62 61 73   corrupt databas
116d0 65 20 68 61 73 20 6e 6f 74 20 67 69 76 65 6e 20  e has not given 
116e0 75 73 20 61 6e 20 6f 76 65 72 73 69 7a 65 20 68  us an oversize h
116f0 65 61 64 65 72 2e 0a 20 20 20 20 2a 2a 20 44 6f  eader..    ** Do
11700 20 74 68 69 73 20 6e 6f 77 20 74 6f 20 61 76 6f   this now to avo
11710 69 64 20 61 6e 20 6f 76 65 72 73 69 7a 65 20 6d  id an oversize m
11720 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e  emory allocation
11730 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20  ..    **.    ** 
11740 54 79 70 65 20 65 6e 74 72 69 65 73 20 63 61 6e  Type entries can
11750 20 62 65 20 62 65 74 77 65 65 6e 20 31 20 61 6e   be between 1 an
11760 64 20 35 20 62 79 74 65 73 20 65 61 63 68 2e 20  d 5 bytes each. 
11770 20 42 75 74 20 34 20 61 6e 64 20 35 20 62 79 74   But 4 and 5 byt
11780 65 0a 20 20 20 20 2a 2a 20 74 79 70 65 73 20 75  e.    ** types u
11790 73 65 20 73 6f 20 6d 75 63 68 20 64 61 74 61 20  se so much data 
117a0 73 70 61 63 65 20 74 68 61 74 20 74 68 65 72 65  space that there
117b0 20 63 61 6e 20 6f 6e 6c 79 20 62 65 20 34 30 39   can only be 409
117c0 36 20 61 6e 64 20 33 32 20 6f 66 0a 20 20 20 20  6 and 32 of.    
117d0 2a 2a 20 74 68 65 6d 2c 20 72 65 73 70 65 63 74  ** them, respect
117e0 69 76 65 6c 79 2e 20 20 53 6f 20 74 68 65 20 6d  ively.  So the m
117f0 61 78 69 6d 75 6d 20 68 65 61 64 65 72 20 6c 65  aximum header le
11800 6e 67 74 68 20 72 65 73 75 6c 74 73 20 66 72 6f  ngth results fro
11810 6d 20 61 0a 20 20 20 20 2a 2a 20 33 2d 62 79 74  m a.    ** 3-byt
11820 65 20 74 79 70 65 20 66 6f 72 20 65 61 63 68 20  e type for each 
11830 6f 66 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6f  of the maximum o
11840 66 20 33 32 37 36 38 20 63 6f 6c 75 6d 6e 73 20  f 32768 columns 
11850 70 6c 75 73 20 74 68 72 65 65 0a 20 20 20 20 2a  plus three.    *
11860 2a 20 65 78 74 72 61 20 62 79 74 65 73 20 66 6f  * extra bytes fo
11870 72 20 74 68 65 20 68 65 61 64 65 72 20 6c 65 6e  r the header len
11880 67 74 68 20 69 74 73 65 6c 66 2e 20 20 33 32 37  gth itself.  327
11890 36 38 2a 33 20 2b 20 33 20 3d 20 39 38 33 30 37  68*3 + 3 = 98307
118a0 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28  ..    */.    if(
118b0 20 6f 66 66 73 65 74 20 3e 20 39 38 33 30 37 20   offset > 98307 
118c0 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51  ){.      rc = SQ
118d0 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50  LITE_CORRUPT_BKP
118e0 54 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6f 70  T;.      goto op
118f0 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20  _column_out;.   
11900 20 7d 0a 0a 20 20 20 20 2f 2a 20 43 6f 6d 70 75   }..    /* Compu
11910 74 65 20 69 6e 20 6c 65 6e 20 74 68 65 20 6e 75  te in len the nu
11920 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66  mber of bytes of
11930 20 64 61 74 61 20 77 65 20 6e 65 65 64 20 74 6f   data we need to
11940 20 72 65 61 64 20 69 6e 20 6f 72 64 65 72 0a 20   read in order. 
11950 20 20 20 2a 2a 20 74 6f 20 67 65 74 20 6e 46 69     ** to get nFi
11960 65 6c 64 20 74 79 70 65 20 76 61 6c 75 65 73 2e  eld type values.
11970 20 20 6f 66 66 73 65 74 20 69 73 20 61 6e 20 75    offset is an u
11980 70 70 65 72 20 62 6f 75 6e 64 20 6f 6e 20 74 68  pper bound on th
11990 69 73 2e 20 20 42 75 74 0a 20 20 20 20 2a 2a 20  is.  But.    ** 
119a0 6e 46 69 65 6c 64 20 6d 69 67 68 74 20 62 65 20  nField might be 
119b0 73 69 67 6e 69 66 69 63 61 6e 74 6c 79 20 6c 65  significantly le
119c0 73 73 20 74 68 61 6e 20 74 68 65 20 74 72 75 65  ss than the true
119d0 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   number of colum
119e0 6e 73 0a 20 20 20 20 2a 2a 20 69 6e 20 74 68 65  ns.    ** in the
119f0 20 74 61 62 6c 65 2c 20 61 6e 64 20 69 6e 20 74   table, and in t
11a00 68 61 74 20 63 61 73 65 2c 20 35 2a 6e 46 69 65  hat case, 5*nFie
11a10 6c 64 2b 33 20 6d 69 67 68 74 20 62 65 20 73 6d  ld+3 might be sm
11a20 61 6c 6c 65 72 20 74 68 61 6e 20 6f 66 66 73 65  aller than offse
11a30 74 2e 0a 20 20 20 20 2a 2a 20 57 65 20 77 61 6e  t..    ** We wan
11a40 74 20 74 6f 20 6d 69 6e 69 6d 69 7a 65 20 6c 65  t to minimize le
11a50 6e 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6c 69  n in order to li
11a60 6d 69 74 20 74 68 65 20 73 69 7a 65 20 6f 66 20  mit the size of 
11a70 74 68 65 20 6d 65 6d 6f 72 79 0a 20 20 20 20 2a  the memory.    *
11a80 2a 20 61 6c 6c 6f 63 61 74 69 6f 6e 2c 20 65 73  * allocation, es
11a90 70 65 63 69 61 6c 6c 79 20 69 66 20 61 20 63 6f  pecially if a co
11aa0 72 72 75 70 74 20 64 61 74 61 62 61 73 65 20 66  rrupt database f
11ab0 69 6c 65 20 68 61 73 20 63 61 75 73 65 64 20 6f  ile has caused o
11ac0 66 66 73 65 74 0a 20 20 20 20 2a 2a 20 74 6f 20  ffset.    ** to 
11ad0 62 65 20 6f 76 65 72 73 69 7a 65 64 2e 20 4f 66  be oversized. Of
11ae0 66 73 65 74 20 69 73 20 6c 69 6d 69 74 65 64 20  fset is limited 
11af0 74 6f 20 39 38 33 30 37 20 61 62 6f 76 65 2e 20  to 98307 above. 
11b00 20 42 75 74 20 39 38 33 30 37 20 6d 69 67 68 74   But 98307 might
11b10 0a 20 20 20 20 2a 2a 20 73 74 69 6c 6c 20 65 78  .    ** still ex
11b20 63 65 65 64 20 52 6f 62 73 6f 6e 20 6d 65 6d 6f  ceed Robson memo
11b30 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 6c 69  ry allocation li
11b40 6d 69 74 73 20 6f 6e 20 73 6f 6d 65 20 63 6f 6e  mits on some con
11b50 66 69 67 75 72 61 74 69 6f 6e 73 2e 0a 20 20 20  figurations..   
11b60 20 2a 2a 20 4f 6e 20 73 79 73 74 65 6d 73 20 74   ** On systems t
11b70 68 61 74 20 63 61 6e 6e 6f 74 20 74 6f 6c 65 72  hat cannot toler
11b80 61 74 65 20 6c 61 72 67 65 20 6d 65 6d 6f 72 79  ate large memory
11b90 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 2c 20 6e 46   allocations, nF
11ba0 69 65 6c 64 2a 35 2b 33 0a 20 20 20 20 2a 2a 20  ield*5+3.    ** 
11bb0 77 69 6c 6c 20 6c 69 6b 65 6c 79 20 62 65 20 6d  will likely be m
11bc0 75 63 68 20 73 6d 61 6c 6c 65 72 20 73 69 6e 63  uch smaller sinc
11bd0 65 20 6e 46 69 65 6c 64 20 77 69 6c 6c 20 6c 69  e nField will li
11be0 6b 65 6c 79 20 62 65 20 6c 65 73 73 20 74 68 61  kely be less tha
11bf0 6e 0a 20 20 20 20 2a 2a 20 32 30 20 6f 72 20 73  n.    ** 20 or s
11c00 6f 2e 20 20 54 68 69 73 20 69 6e 73 75 72 65 73  o.  This insures
11c10 20 74 68 61 74 20 52 6f 62 73 6f 6e 20 6d 65 6d   that Robson mem
11c20 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 6c  ory allocation l
11c30 69 6d 69 74 73 20 61 72 65 0a 20 20 20 20 2a 2a  imits are.    **
11c40 20 6e 6f 74 20 65 78 63 65 65 64 65 64 20 65 76   not exceeded ev
11c50 65 6e 20 66 6f 72 20 63 6f 72 72 75 70 74 20 64  en for corrupt d
11c60 61 74 61 62 61 73 65 20 66 69 6c 65 73 2e 0a 20  atabase files.. 
11c70 20 20 20 2a 2f 0a 20 20 20 20 6c 65 6e 20 3d 20     */.    len = 
11c80 6e 46 69 65 6c 64 2a 35 20 2b 20 33 3b 0a 20 20  nField*5 + 3;.  
11c90 20 20 69 66 28 20 6c 65 6e 20 3e 20 28 69 6e 74    if( len > (int
11ca0 29 6f 66 66 73 65 74 20 29 20 6c 65 6e 20 3d 20  )offset ) len = 
11cb0 28 69 6e 74 29 6f 66 66 73 65 74 3b 0a 0a 20 20  (int)offset;..  
11cc0 20 20 2f 2a 20 54 68 65 20 4b 65 79 46 65 74 63    /* The KeyFetc
11cd0 68 28 29 20 6f 72 20 44 61 74 61 46 65 74 63 68  h() or DataFetch
11ce0 28 29 20 61 62 6f 76 65 20 61 72 65 20 66 61 73  () above are fas
11cf0 74 20 61 6e 64 20 77 69 6c 6c 20 67 65 74 20 74  t and will get t
11d00 68 65 20 65 6e 74 69 72 65 0a 20 20 20 20 2a 2a  he entire.    **
11d10 20 72 65 63 6f 72 64 20 68 65 61 64 65 72 20 69   record header i
11d20 6e 20 6d 6f 73 74 20 63 61 73 65 73 2e 20 20 42  n most cases.  B
11d30 75 74 20 74 68 65 79 20 77 69 6c 6c 20 66 61 69  ut they will fai
11d40 6c 20 74 6f 20 67 65 74 20 74 68 65 20 63 6f 6d  l to get the com
11d50 70 6c 65 74 65 0a 20 20 20 20 2a 2a 20 72 65 63  plete.    ** rec
11d60 6f 72 64 20 68 65 61 64 65 72 20 69 66 20 74 68  ord header if th
11d70 65 20 72 65 63 6f 72 64 20 68 65 61 64 65 72 20  e record header 
11d80 64 6f 65 73 20 6e 6f 74 20 66 69 74 20 6f 6e 20  does not fit on 
11d90 61 20 73 69 6e 67 6c 65 20 70 61 67 65 0a 20 20  a single page.  
11da0 20 20 2a 2a 20 69 6e 20 74 68 65 20 42 2d 54 72    ** in the B-Tr
11db0 65 65 2e 20 20 57 68 65 6e 20 74 68 61 74 20 68  ee.  When that h
11dc0 61 70 70 65 6e 73 2c 20 75 73 65 20 73 71 6c 69  appens, use sqli
11dd0 74 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74  te3VdbeMemFromBt
11de0 72 65 65 28 29 20 74 6f 0a 20 20 20 20 2a 2a 20  ree() to.    ** 
11df0 61 63 71 75 69 72 65 20 74 68 65 20 63 6f 6d 70  acquire the comp
11e00 6c 65 74 65 20 68 65 61 64 65 72 20 74 65 78 74  lete header text
11e10 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28  ..    */.    if(
11e20 20 21 7a 52 65 63 20 26 26 20 61 76 61 69 6c 3c   !zRec && avail<
11e30 6c 65 6e 20 29 7b 0a 20 20 20 20 20 20 73 4d 65  len ){.      sMe
11e40 6d 2e 66 6c 61 67 73 20 3d 20 30 3b 0a 20 20 20  m.flags = 0;.   
11e50 20 20 20 73 4d 65 6d 2e 64 62 20 3d 20 30 3b 0a     sMem.db = 0;.
11e60 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
11e70 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72  e3VdbeMemFromBtr
11e80 65 65 28 70 43 72 73 72 2c 20 30 2c 20 6c 65 6e  ee(pCrsr, 0, len
11e90 2c 20 70 43 2d 3e 69 73 49 6e 64 65 78 2c 20 26  , pC->isIndex, &
11ea0 73 4d 65 6d 29 3b 0a 20 20 20 20 20 20 69 66 28  sMem);.      if(
11eb0 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
11ec0 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6f  {.        goto o
11ed0 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20  p_column_out;.  
11ee0 20 20 20 20 7d 0a 20 20 20 20 20 20 7a 44 61 74      }.      zDat
11ef0 61 20 3d 20 73 4d 65 6d 2e 7a 3b 0a 20 20 20 20  a = sMem.z;.    
11f00 7d 0a 20 20 20 20 7a 45 6e 64 48 64 72 20 3d 20  }.    zEndHdr = 
11f10 28 75 38 20 2a 29 26 7a 44 61 74 61 5b 6c 65 6e  (u8 *)&zData[len
11f20 5d 3b 0a 20 20 20 20 7a 49 64 78 20 3d 20 28 75  ];.    zIdx = (u
11f30 38 20 2a 29 26 7a 44 61 74 61 5b 73 7a 48 64 72  8 *)&zData[szHdr
11f40 5d 3b 0a 0a 20 20 20 20 2f 2a 20 53 63 61 6e 20  ];..    /* Scan 
11f50 74 68 65 20 68 65 61 64 65 72 20 61 6e 64 20 75  the header and u
11f60 73 65 20 69 74 20 74 6f 20 66 69 6c 6c 20 69 6e  se it to fill in
11f70 20 74 68 65 20 61 54 79 70 65 5b 5d 20 61 6e 64   the aType[] and
11f80 20 61 4f 66 66 73 65 74 5b 5d 0a 20 20 20 20 2a   aOffset[].    *
11f90 2a 20 61 72 72 61 79 73 2e 20 20 61 54 79 70 65  * arrays.  aType
11fa0 5b 69 5d 20 77 69 6c 6c 20 63 6f 6e 74 61 69 6e  [i] will contain
11fb0 20 74 68 65 20 74 79 70 65 20 69 6e 74 65 67 65   the type intege
11fc0 72 20 66 6f 72 20 74 68 65 20 69 2d 74 68 0a 20  r for the i-th. 
11fd0 20 20 20 2a 2a 20 63 6f 6c 75 6d 6e 20 61 6e 64     ** column and
11fe0 20 61 4f 66 66 73 65 74 5b 69 5d 20 77 69 6c 6c   aOffset[i] will
11ff0 20 63 6f 6e 74 61 69 6e 20 74 68 65 20 6f 66 66   contain the off
12000 73 65 74 20 66 72 6f 6d 20 74 68 65 20 62 65 67  set from the beg
12010 69 6e 6e 69 6e 67 0a 20 20 20 20 2a 2a 20 6f 66  inning.    ** of
12020 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20 74   the record to t
12030 68 65 20 73 74 61 72 74 20 6f 66 20 74 68 65 20  he start of the 
12040 64 61 74 61 20 66 6f 72 20 74 68 65 20 69 2d 74  data for the i-t
12050 68 20 63 6f 6c 75 6d 6e 0a 20 20 20 20 2a 2f 0a  h column.    */.
12060 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e      for(i=0; i<n
12070 46 69 65 6c 64 3b 20 69 2b 2b 29 7b 0a 20 20 20  Field; i++){.   
12080 20 20 20 69 66 28 20 7a 49 64 78 3c 7a 45 6e 64     if( zIdx<zEnd
12090 48 64 72 20 29 7b 0a 20 20 20 20 20 20 20 20 61  Hdr ){.        a
120a0 4f 66 66 73 65 74 5b 69 5d 20 3d 20 6f 66 66 73  Offset[i] = offs
120b0 65 74 3b 0a 20 20 20 20 20 20 20 20 7a 49 64 78  et;.        zIdx
120c0 20 2b 3d 20 67 65 74 56 61 72 69 6e 74 33 32 28   += getVarint32(
120d0 7a 49 64 78 2c 20 61 54 79 70 65 5b 69 5d 29 3b  zIdx, aType[i]);
120e0 0a 20 20 20 20 20 20 20 20 73 7a 46 69 65 6c 64  .        szField
120f0 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 65   = sqlite3VdbeSe
12100 72 69 61 6c 54 79 70 65 4c 65 6e 28 61 54 79 70  rialTypeLen(aTyp
12110 65 5b 69 5d 29 3b 0a 20 20 20 20 20 20 20 20 6f  e[i]);.        o
12120 66 66 73 65 74 20 2b 3d 20 73 7a 46 69 65 6c 64  ffset += szField
12130 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 6f 66  ;.        if( of
12140 66 73 65 74 3c 73 7a 46 69 65 6c 64 20 29 7b 20  fset<szField ){ 
12150 20 2f 2a 20 54 72 75 65 20 69 66 20 6f 66 66 73   /* True if offs
12160 65 74 20 6f 76 65 72 66 6c 6f 77 73 20 2a 2f 0a  et overflows */.
12170 20 20 20 20 20 20 20 20 20 20 7a 49 64 78 20 3d            zIdx =
12180 20 26 7a 45 6e 64 48 64 72 5b 31 5d 3b 20 20 2f   &zEndHdr[1];  /
12190 2a 20 46 6f 72 63 65 73 20 53 51 4c 49 54 45 5f  * Forces SQLITE_
121a0 43 4f 52 52 55 50 54 20 72 65 74 75 72 6e 20 62  CORRUPT return b
121b0 65 6c 6f 77 20 2a 2f 0a 20 20 20 20 20 20 20 20  elow */.        
121c0 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20    break;.       
121d0 20 7d 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a   }.      }else{.
121e0 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20 69 20          /* If i 
121f0 69 73 20 6c 65 73 73 20 74 68 61 74 20 6e 46 69  is less that nFi
12200 65 6c 64 2c 20 74 68 65 6e 20 74 68 65 72 65 20  eld, then there 
12210 61 72 65 20 6c 65 73 73 20 66 69 65 6c 64 73 20  are less fields 
12220 69 6e 20 74 68 69 73 0a 20 20 20 20 20 20 20 20  in this.        
12230 2a 2a 20 72 65 63 6f 72 64 20 74 68 61 6e 20 53  ** record than S
12240 65 74 4e 75 6d 43 6f 6c 75 6d 6e 73 20 69 6e 64  etNumColumns ind
12250 69 63 61 74 65 64 20 74 68 65 72 65 20 61 72 65  icated there are
12260 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 0a   columns in the.
12270 20 20 20 20 20 20 20 20 2a 2a 20 74 61 62 6c 65          ** table
12280 2e 20 53 65 74 20 74 68 65 20 6f 66 66 73 65 74  . Set the offset
12290 20 66 6f 72 20 61 6e 79 20 65 78 74 72 61 20 63   for any extra c
122a0 6f 6c 75 6d 6e 73 20 6e 6f 74 20 70 72 65 73 65  olumns not prese
122b0 6e 74 20 69 6e 0a 20 20 20 20 20 20 20 20 2a 2a  nt in.        **
122c0 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20 30   the record to 0
122d0 2e 20 54 68 69 73 20 74 65 6c 6c 73 20 63 6f 64  . This tells cod
122e0 65 20 62 65 6c 6f 77 20 74 6f 20 73 74 6f 72 65  e below to store
122f0 20 61 20 4e 55 4c 4c 0a 20 20 20 20 20 20 20 20   a NULL.        
12300 2a 2a 20 69 6e 73 74 65 61 64 20 6f 66 20 64 65  ** instead of de
12310 73 65 72 69 61 6c 69 7a 69 6e 67 20 61 20 76 61  serializing a va
12320 6c 75 65 20 66 72 6f 6d 20 74 68 65 20 72 65 63  lue from the rec
12330 6f 72 64 2e 0a 20 20 20 20 20 20 20 20 2a 2f 0a  ord..        */.
12340 20 20 20 20 20 20 20 20 61 4f 66 66 73 65 74 5b          aOffset[
12350 69 5d 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a  i] = 0;.      }.
12360 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65      }.    sqlite
12370 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28  3VdbeMemRelease(
12380 26 73 4d 65 6d 29 3b 0a 20 20 20 20 73 4d 65 6d  &sMem);.    sMem
12390 2e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c  .flags = MEM_Nul
123a0 6c 3b 0a 0a 20 20 20 20 2f 2a 20 49 66 20 77 65  l;..    /* If we
123b0 20 68 61 76 65 20 72 65 61 64 20 6d 6f 72 65 20   have read more 
123c0 68 65 61 64 65 72 20 64 61 74 61 20 74 68 61 6e  header data than
123d0 20 77 61 73 20 63 6f 6e 74 61 69 6e 65 64 20 69   was contained i
123e0 6e 20 74 68 65 20 68 65 61 64 65 72 2c 0a 20 20  n the header,.  
123f0 20 20 2a 2a 20 6f 72 20 69 66 20 74 68 65 20 65    ** or if the e
12400 6e 64 20 6f 66 20 74 68 65 20 6c 61 73 74 20 66  nd of the last f
12410 69 65 6c 64 20 61 70 70 65 61 72 73 20 74 6f 20  ield appears to 
12420 62 65 20 70 61 73 74 20 74 68 65 20 65 6e 64 20  be past the end 
12430 6f 66 20 74 68 65 0a 20 20 20 20 2a 2a 20 72 65  of the.    ** re
12440 63 6f 72 64 2c 20 6f 72 20 69 66 20 74 68 65 20  cord, or if the 
12450 65 6e 64 20 6f 66 20 74 68 65 20 6c 61 73 74 20  end of the last 
12460 66 69 65 6c 64 20 61 70 70 65 61 72 73 20 74 6f  field appears to
12470 20 62 65 20 62 65 66 6f 72 65 20 74 68 65 20 65   be before the e
12480 6e 64 0a 20 20 20 20 2a 2a 20 6f 66 20 74 68 65  nd.    ** of the
12490 20 72 65 63 6f 72 64 20 28 77 68 65 6e 20 61 6c   record (when al
124a0 6c 20 66 69 65 6c 64 73 20 70 72 65 73 65 6e 74  l fields present
124b0 29 2c 20 74 68 65 6e 20 77 65 20 6d 75 73 74 20  ), then we must 
124c0 62 65 20 64 65 61 6c 69 6e 67 20 0a 20 20 20 20  be dealing .    
124d0 2a 2a 20 77 69 74 68 20 61 20 63 6f 72 72 75 70  ** with a corrup
124e0 74 20 64 61 74 61 62 61 73 65 2e 0a 20 20 20 20  t database..    
124f0 2a 2f 0a 20 20 20 20 69 66 28 20 28 7a 49 64 78  */.    if( (zIdx
12500 20 3e 20 7a 45 6e 64 48 64 72 29 20 7c 7c 20 28   > zEndHdr) || (
12510 6f 66 66 73 65 74 20 3e 20 70 61 79 6c 6f 61 64  offset > payload
12520 53 69 7a 65 29 0a 20 20 20 20 20 20 20 20 20 7c  Size).         |
12530 7c 20 28 7a 49 64 78 3d 3d 7a 45 6e 64 48 64 72  | (zIdx==zEndHdr
12540 20 26 26 20 6f 66 66 73 65 74 21 3d 70 61 79 6c   && offset!=payl
12550 6f 61 64 53 69 7a 65 29 20 29 7b 0a 20 20 20 20  oadSize) ){.    
12560 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f    rc = SQLITE_CO
12570 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20  RRUPT_BKPT;.    
12580 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e    goto op_column
12590 5f 6f 75 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  _out;.    }.  }.
125a0 0a 20 20 2f 2a 20 47 65 74 20 74 68 65 20 63 6f  .  /* Get the co
125b0 6c 75 6d 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  lumn information
125c0 2e 20 49 66 20 61 4f 66 66 73 65 74 5b 70 32 5d  . If aOffset[p2]
125d0 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68   is non-zero, th
125e0 65 6e 20 0a 20 20 2a 2a 20 64 65 73 65 72 69 61  en .  ** deseria
125f0 6c 69 7a 65 20 74 68 65 20 76 61 6c 75 65 20 66  lize the value f
12600 72 6f 6d 20 74 68 65 20 72 65 63 6f 72 64 2e 20  rom the record. 
12610 49 66 20 61 4f 66 66 73 65 74 5b 70 32 5d 20 69  If aOffset[p2] i
12620 73 20 7a 65 72 6f 2c 0a 20 20 2a 2a 20 74 68 65  s zero,.  ** the
12630 6e 20 74 68 65 72 65 20 61 72 65 20 6e 6f 74 20  n there are not 
12640 65 6e 6f 75 67 68 20 66 69 65 6c 64 73 20 69 6e  enough fields in
12650 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20 73   the record to s
12660 61 74 69 73 66 79 20 74 68 65 0a 20 20 2a 2a 20  atisfy the.  ** 
12670 72 65 71 75 65 73 74 2e 20 20 49 6e 20 74 68 69  request.  In thi
12680 73 20 63 61 73 65 2c 20 73 65 74 20 74 68 65 20  s case, set the 
12690 76 61 6c 75 65 20 4e 55 4c 4c 20 6f 72 20 74 6f  value NULL or to
126a0 20 50 34 20 69 66 20 50 34 20 69 73 0a 20 20 2a   P4 if P4 is.  *
126b0 2a 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  * a pointer to a
126c0 20 4d 65 6d 20 6f 62 6a 65 63 74 2e 0a 20 20 2a   Mem object..  *
126d0 2f 0a 20 20 69 66 28 20 61 4f 66 66 73 65 74 5b  /.  if( aOffset[
126e0 70 32 5d 20 29 7b 0a 20 20 20 20 61 73 73 65 72  p2] ){.    asser
126f0 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  t( rc==SQLITE_OK
12700 20 29 3b 0a 20 20 20 20 69 66 28 20 7a 52 65 63   );.    if( zRec
12710 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
12720 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 45  3VdbeMemReleaseE
12730 78 74 65 72 6e 61 6c 28 70 44 65 73 74 29 3b 0a  xternal(pDest);.
12740 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
12750 65 53 65 72 69 61 6c 47 65 74 28 28 75 38 20 2a  eSerialGet((u8 *
12760 29 26 7a 52 65 63 5b 61 4f 66 66 73 65 74 5b 70  )&zRec[aOffset[p
12770 32 5d 5d 2c 20 61 54 79 70 65 5b 70 32 5d 2c 20  2]], aType[p2], 
12780 70 44 65 73 74 29 3b 0a 20 20 20 20 7d 65 6c 73  pDest);.    }els
12790 65 7b 0a 20 20 20 20 20 20 6c 65 6e 20 3d 20 73  e{.      len = s
127a0 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c  qlite3VdbeSerial
127b0 54 79 70 65 4c 65 6e 28 61 54 79 70 65 5b 70 32  TypeLen(aType[p2
127c0 5d 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  ]);.      sqlite
127d0 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28 26 73 4d  3VdbeMemMove(&sM
127e0 65 6d 2c 20 70 44 65 73 74 29 3b 0a 20 20 20 20  em, pDest);.    
127f0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
12800 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65 28 70  beMemFromBtree(p
12810 43 72 73 72 2c 20 61 4f 66 66 73 65 74 5b 70 32  Crsr, aOffset[p2
12820 5d 2c 20 6c 65 6e 2c 20 70 43 2d 3e 69 73 49 6e  ], len, pC->isIn
12830 64 65 78 2c 20 26 73 4d 65 6d 29 3b 0a 20 20 20  dex, &sMem);.   
12840 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
12850 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20  E_OK ){.        
12860 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f  goto op_column_o
12870 75 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ut;.      }.    
12880 20 20 7a 44 61 74 61 20 3d 20 73 4d 65 6d 2e 7a    zData = sMem.z
12890 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
128a0 64 62 65 53 65 72 69 61 6c 47 65 74 28 28 75 38  dbeSerialGet((u8
128b0 2a 29 7a 44 61 74 61 2c 20 61 54 79 70 65 5b 70  *)zData, aType[p
128c0 32 5d 2c 20 70 44 65 73 74 29 3b 0a 20 20 20 20  2], pDest);.    
128d0 7d 0a 20 20 20 20 70 44 65 73 74 2d 3e 65 6e 63  }.    pDest->enc
128e0 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 7d   = encoding;.  }
128f0 65 6c 73 65 7b 0a 20 20 20 20 69 66 28 20 70 4f  else{.    if( pO
12900 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4d 45  p->p4type==P4_ME
12910 4d 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  M ){.      sqlit
12920 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77  e3VdbeMemShallow
12930 43 6f 70 79 28 70 44 65 73 74 2c 20 70 4f 70 2d  Copy(pDest, pOp-
12940 3e 70 34 2e 70 4d 65 6d 2c 20 4d 45 4d 5f 53 74  >p4.pMem, MEM_St
12950 61 74 69 63 29 3b 0a 20 20 20 20 7d 65 6c 73 65  atic);.    }else
12960 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  {.      assert( 
12970 70 44 65 73 74 2d 3e 66 6c 61 67 73 26 4d 45 4d  pDest->flags&MEM
12980 5f 4e 75 6c 6c 20 29 3b 0a 20 20 20 20 7d 0a 20  _Null );.    }. 
12990 20 7d 0a 0a 20 20 2f 2a 20 49 66 20 77 65 20 64   }..  /* If we d
129a0 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f 63  ynamically alloc
129b0 61 74 65 64 20 73 70 61 63 65 20 74 6f 20 68 6f  ated space to ho
129c0 6c 64 20 74 68 65 20 64 61 74 61 20 28 69 6e 20  ld the data (in 
129d0 74 68 65 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33  the.  ** sqlite3
129e0 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65  VdbeMemFromBtree
129f0 28 29 20 63 61 6c 6c 20 61 62 6f 76 65 29 20 74  () call above) t
12a00 68 65 6e 20 74 72 61 6e 73 66 65 72 20 63 6f 6e  hen transfer con
12a10 74 72 6f 6c 20 6f 66 20 74 68 61 74 0a 20 20 2a  trol of that.  *
12a20 2a 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c  * dynamically al
12a30 6c 6f 63 61 74 65 64 20 73 70 61 63 65 20 6f 76  located space ov
12a40 65 72 20 74 6f 20 74 68 65 20 70 44 65 73 74 20  er to the pDest 
12a50 73 74 72 75 63 74 75 72 65 2e 0a 20 20 2a 2a 20  structure..  ** 
12a60 54 68 69 73 20 70 72 65 76 65 6e 74 73 20 61 20  This prevents a 
12a70 6d 65 6d 6f 72 79 20 63 6f 70 79 2e 0a 20 20 2a  memory copy..  *
12a80 2f 0a 20 20 69 66 28 20 73 4d 65 6d 2e 7a 4d 61  /.  if( sMem.zMa
12a90 6c 6c 6f 63 20 29 7b 0a 20 20 20 20 61 73 73 65  lloc ){.    asse
12aa0 72 74 28 20 73 4d 65 6d 2e 7a 3d 3d 73 4d 65 6d  rt( sMem.z==sMem
12ab0 2e 7a 4d 61 6c 6c 6f 63 20 29 3b 0a 20 20 20 20  .zMalloc );.    
12ac0 61 73 73 65 72 74 28 20 21 28 70 44 65 73 74 2d  assert( !(pDest-
12ad0 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 44 79 6e  >flags & MEM_Dyn
12ae0 29 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  ) );.    assert(
12af0 20 21 28 70 44 65 73 74 2d 3e 66 6c 61 67 73 20   !(pDest->flags 
12b00 26 20 28 4d 45 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f  & (MEM_Blob|MEM_
12b10 53 74 72 29 29 20 7c 7c 20 70 44 65 73 74 2d 3e  Str)) || pDest->
12b20 7a 3d 3d 73 4d 65 6d 2e 7a 20 29 3b 0a 20 20 20  z==sMem.z );.   
12b30 20 70 44 65 73 74 2d 3e 66 6c 61 67 73 20 26 3d   pDest->flags &=
12b40 20 7e 28 4d 45 4d 5f 45 70 68 65 6d 7c 4d 45 4d   ~(MEM_Ephem|MEM
12b50 5f 53 74 61 74 69 63 29 3b 0a 20 20 20 20 70 44  _Static);.    pD
12b60 65 73 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45  est->flags |= ME
12b70 4d 5f 54 65 72 6d 3b 0a 20 20 20 20 70 44 65 73  M_Term;.    pDes
12b80 74 2d 3e 7a 20 3d 20 73 4d 65 6d 2e 7a 3b 0a 20  t->z = sMem.z;. 
12b90 20 20 20 70 44 65 73 74 2d 3e 7a 4d 61 6c 6c 6f     pDest->zMallo
12ba0 63 20 3d 20 73 4d 65 6d 2e 7a 4d 61 6c 6c 6f 63  c = sMem.zMalloc
12bb0 3b 0a 20 20 7d 0a 0a 20 20 72 63 20 3d 20 73 71  ;.  }..  rc = sq
12bc0 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d 61 6b 65  lite3VdbeMemMake
12bd0 57 72 69 74 65 61 62 6c 65 28 70 44 65 73 74 29  Writeable(pDest)
12be0 3b 0a 0a 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74  ;..op_column_out
12bf0 3a 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  :.  UPDATE_MAX_B
12c00 4c 4f 42 53 49 5a 45 28 70 44 65 73 74 29 3b 0a  LOBSIZE(pDest);.
12c10 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
12c20 28 70 4f 70 2d 3e 70 33 2c 20 70 44 65 73 74 29  (pOp->p3, pDest)
12c30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
12c40 20 4f 70 63 6f 64 65 3a 20 41 66 66 69 6e 69 74   Opcode: Affinit
12c50 79 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a  y P1 P2 * P4 *.*
12c60 2a 0a 2a 2a 20 41 70 70 6c 79 20 61 66 66 69 6e  *.** Apply affin
12c70 69 74 69 65 73 20 74 6f 20 61 20 72 61 6e 67 65  ities to a range
12c80 20 6f 66 20 50 32 20 72 65 67 69 73 74 65 72 73   of P2 registers
12c90 20 73 74 61 72 74 69 6e 67 20 77 69 74 68 20 50   starting with P
12ca0 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61  1..**.** P4 is a
12cb0 20 73 74 72 69 6e 67 20 74 68 61 74 20 69 73 20   string that is 
12cc0 50 32 20 63 68 61 72 61 63 74 65 72 73 20 6c 6f  P2 characters lo
12cd0 6e 67 2e 20 54 68 65 20 6e 74 68 20 63 68 61 72  ng. The nth char
12ce0 61 63 74 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20  acter of the.** 
12cf0 73 74 72 69 6e 67 20 69 6e 64 69 63 61 74 65 73  string indicates
12d00 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61 66 66 69   the column affi
12d10 6e 69 74 79 20 74 68 61 74 20 73 68 6f 75 6c 64  nity that should
12d20 20 62 65 20 75 73 65 64 20 66 6f 72 20 74 68 65   be used for the
12d30 20 6e 74 68 0a 2a 2a 20 6d 65 6d 6f 72 79 20 63   nth.** memory c
12d40 65 6c 6c 20 69 6e 20 74 68 65 20 72 61 6e 67 65  ell in the range
12d50 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 66 66  ..*/.case OP_Aff
12d60 69 6e 69 74 79 3a 20 7b 0a 20 20 63 6f 6e 73 74  inity: {.  const
12d70 20 63 68 61 72 20 2a 7a 41 66 66 69 6e 69 74 79   char *zAffinity
12d80 3b 20 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e  ;   /* The affin
12d90 69 74 79 20 74 6f 20 62 65 20 61 70 70 6c 69 65  ity to be applie
12da0 64 20 2a 2f 0a 20 20 63 68 61 72 20 63 41 66 66  d */.  char cAff
12db0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
12dc0 2f 2a 20 41 20 73 69 6e 67 6c 65 20 63 68 61 72  /* A single char
12dd0 61 63 74 65 72 20 6f 66 20 61 66 66 69 6e 69 74  acter of affinit
12de0 79 20 2a 2f 0a 0a 20 20 7a 41 66 66 69 6e 69 74  y */..  zAffinit
12df0 79 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20  y = pOp->p4.z;. 
12e00 20 61 73 73 65 72 74 28 20 7a 41 66 66 69 6e 69   assert( zAffini
12e10 74 79 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  ty!=0 );.  asser
12e20 74 28 20 7a 41 66 66 69 6e 69 74 79 5b 70 4f 70  t( zAffinity[pOp
12e30 2d 3e 70 32 5d 3d 3d 30 20 29 3b 0a 20 20 70 49  ->p2]==0 );.  pI
12e40 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
12e50 70 31 5d 3b 0a 20 20 77 68 69 6c 65 28 20 28 63  p1];.  while( (c
12e60 41 66 66 20 3d 20 2a 28 7a 41 66 66 69 6e 69 74  Aff = *(zAffinit
12e70 79 2b 2b 29 29 21 3d 30 20 29 7b 0a 20 20 20 20  y++))!=0 ){.    
12e80 61 73 73 65 72 74 28 20 70 49 6e 31 20 3c 3d 20  assert( pIn1 <= 
12e90 26 70 2d 3e 61 4d 65 6d 5b 70 2d 3e 6e 4d 65 6d  &p->aMem[p->nMem
12ea0 5d 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  ] );.    assert(
12eb0 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 49 6e 31   memIsValid(pIn1
12ec0 29 20 29 3b 0a 20 20 20 20 45 78 70 61 6e 64 42  ) );.    ExpandB
12ed0 6c 6f 62 28 70 49 6e 31 29 3b 0a 20 20 20 20 61  lob(pIn1);.    a
12ee0 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70 49 6e  pplyAffinity(pIn
12ef0 31 2c 20 63 41 66 66 2c 20 65 6e 63 6f 64 69 6e  1, cAff, encodin
12f00 67 29 3b 0a 20 20 20 20 70 49 6e 31 2b 2b 3b 0a  g);.    pIn1++;.
12f10 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
12f20 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 61 6b 65 52  /* Opcode: MakeR
12f30 65 63 6f 72 64 20 50 31 20 50 32 20 50 33 20 50  ecord P1 P2 P3 P
12f40 34 20 2a 0a 2a 2a 0a 2a 2a 20 43 6f 6e 76 65 72  4 *.**.** Conver
12f50 74 20 50 32 20 72 65 67 69 73 74 65 72 73 20 62  t P2 registers b
12f60 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 50 31  eginning with P1
12f70 20 69 6e 74 6f 20 74 68 65 20 5b 72 65 63 6f 72   into the [recor
12f80 64 20 66 6f 72 6d 61 74 5d 0a 2a 2a 20 75 73 65  d format].** use
12f90 20 61 73 20 61 20 64 61 74 61 20 72 65 63 6f 72   as a data recor
12fa0 64 20 69 6e 20 61 20 64 61 74 61 62 61 73 65 20  d in a database 
12fb0 74 61 62 6c 65 20 6f 72 20 61 73 20 61 20 6b 65  table or as a ke
12fc0 79 0a 2a 2a 20 69 6e 20 61 6e 20 69 6e 64 65 78  y.** in an index
12fd0 2e 20 20 54 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e  .  The OP_Column
12fe0 20 6f 70 63 6f 64 65 20 63 61 6e 20 64 65 63 6f   opcode can deco
12ff0 64 65 20 74 68 65 20 72 65 63 6f 72 64 20 6c 61  de the record la
13000 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 6d 61  ter..**.** P4 ma
13010 79 20 62 65 20 61 20 73 74 72 69 6e 67 20 74 68  y be a string th
13020 61 74 20 69 73 20 50 32 20 63 68 61 72 61 63 74  at is P2 charact
13030 65 72 73 20 6c 6f 6e 67 2e 20 20 54 68 65 20 6e  ers long.  The n
13040 74 68 20 63 68 61 72 61 63 74 65 72 20 6f 66 20  th character of 
13050 74 68 65 0a 2a 2a 20 73 74 72 69 6e 67 20 69 6e  the.** string in
13060 64 69 63 61 74 65 73 20 74 68 65 20 63 6f 6c 75  dicates the colu
13070 6d 6e 20 61 66 66 69 6e 69 74 79 20 74 68 61 74  mn affinity that
13080 20 73 68 6f 75 6c 64 20 62 65 20 75 73 65 64 20   should be used 
13090 66 6f 72 20 74 68 65 20 6e 74 68 0a 2a 2a 20 66  for the nth.** f
130a0 69 65 6c 64 20 6f 66 20 74 68 65 20 69 6e 64 65  ield of the inde
130b0 78 20 6b 65 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  x key..**.** The
130c0 20 6d 61 70 70 69 6e 67 20 66 72 6f 6d 20 63 68   mapping from ch
130d0 61 72 61 63 74 65 72 20 74 6f 20 61 66 66 69 6e  aracter to affin
130e0 69 74 79 20 69 73 20 67 69 76 65 6e 20 62 79 20  ity is given by 
130f0 74 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 0a  the SQLITE_AFF_.
13100 2a 2a 20 6d 61 63 72 6f 73 20 64 65 66 69 6e 65  ** macros define
13110 64 20 69 6e 20 73 71 6c 69 74 65 49 6e 74 2e 68  d in sqliteInt.h
13120 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69 73  ..**.** If P4 is
13130 20 4e 55 4c 4c 20 74 68 65 6e 20 61 6c 6c 20 69   NULL then all i
13140 6e 64 65 78 20 66 69 65 6c 64 73 20 68 61 76 65  ndex fields have
13150 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 4e 4f   the affinity NO
13160 4e 45 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d  NE..*/.case OP_M
13170 61 6b 65 52 65 63 6f 72 64 3a 20 7b 0a 20 20 75  akeRecord: {.  u
13180 38 20 2a 7a 4e 65 77 52 65 63 6f 72 64 3b 20 20  8 *zNewRecord;  
13190 20 20 20 20 20 20 2f 2a 20 41 20 62 75 66 66 65        /* A buffe
131a0 72 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 64 61  r to hold the da
131b0 74 61 20 66 6f 72 20 74 68 65 20 6e 65 77 20 72  ta for the new r
131c0 65 63 6f 72 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a  ecord */.  Mem *
131d0 70 52 65 63 3b 20 20 20 20 20 20 20 20 20 20 20  pRec;           
131e0 20 20 2f 2a 20 54 68 65 20 6e 65 77 20 72 65 63    /* The new rec
131f0 6f 72 64 20 2a 2f 0a 20 20 75 36 34 20 6e 44 61  ord */.  u64 nDa
13200 74 61 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ta;             
13210 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74  /* Number of byt
13220 65 73 20 6f 66 20 64 61 74 61 20 73 70 61 63 65  es of data space
13230 20 2a 2f 0a 20 20 69 6e 74 20 6e 48 64 72 3b 20   */.  int nHdr; 
13240 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
13250 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20  Number of bytes 
13260 6f 66 20 68 65 61 64 65 72 20 73 70 61 63 65 20  of header space 
13270 2a 2f 0a 20 20 69 36 34 20 6e 42 79 74 65 3b 20  */.  i64 nByte; 
13280 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
13290 61 74 61 20 73 70 61 63 65 20 72 65 71 75 69 72  ata space requir
132a0 65 64 20 66 6f 72 20 74 68 69 73 20 72 65 63 6f  ed for this reco
132b0 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 5a 65 72  rd */.  int nZer
132c0 6f 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  o;             /
132d0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 7a 65 72 6f  * Number of zero
132e0 20 62 79 74 65 73 20 61 74 20 74 68 65 20 65 6e   bytes at the en
132f0 64 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20  d of the record 
13300 2a 2f 0a 20 20 69 6e 74 20 6e 56 61 72 69 6e 74  */.  int nVarint
13310 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  ;           /* N
13320 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 69  umber of bytes i
13330 6e 20 61 20 76 61 72 69 6e 74 20 2a 2f 0a 20 20  n a varint */.  
13340 75 33 32 20 73 65 72 69 61 6c 5f 74 79 70 65 3b  u32 serial_type;
13350 20 20 20 20 20 20 20 2f 2a 20 54 79 70 65 20 66         /* Type f
13360 69 65 6c 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  ield */.  Mem *p
13370 44 61 74 61 30 3b 20 20 20 20 20 20 20 20 20 20  Data0;          
13380 20 2f 2a 20 46 69 72 73 74 20 66 69 65 6c 64 20   /* First field 
13390 74 6f 20 62 65 20 63 6f 6d 62 69 6e 65 64 20 69  to be combined i
133a0 6e 74 6f 20 74 68 65 20 72 65 63 6f 72 64 20 2a  nto the record *
133b0 2f 0a 20 20 4d 65 6d 20 2a 70 4c 61 73 74 3b 20  /.  Mem *pLast; 
133c0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 61             /* La
133d0 73 74 20 66 69 65 6c 64 20 6f 66 20 74 68 65 20  st field of the 
133e0 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20  record */.  int 
133f0 6e 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20 20  nField;         
13400 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
13410 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20 72 65  fields in the re
13420 63 6f 72 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a  cord */.  char *
13430 7a 41 66 66 69 6e 69 74 79 3b 20 20 20 20 20 20  zAffinity;      
13440 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69 74 79   /* The affinity
13450 20 73 74 72 69 6e 67 20 66 6f 72 20 74 68 65 20   string for the 
13460 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20  record */.  int 
13470 66 69 6c 65 5f 66 6f 72 6d 61 74 3b 20 20 20 20  file_format;    
13480 20 20 20 2f 2a 20 46 69 6c 65 20 66 6f 72 6d 61     /* File forma
13490 74 20 74 6f 20 75 73 65 20 66 6f 72 20 65 6e 63  t to use for enc
134a0 6f 64 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 69  oding */.  int i
134b0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
134c0 20 20 2f 2a 20 53 70 61 63 65 20 75 73 65 64 20    /* Space used 
134d0 69 6e 20 7a 4e 65 77 52 65 63 6f 72 64 5b 5d 20  in zNewRecord[] 
134e0 2a 2f 0a 20 20 69 6e 74 20 6c 65 6e 3b 20 20 20  */.  int len;   
134f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c              /* L
13500 65 6e 67 74 68 20 6f 66 20 61 20 66 69 65 6c 64  ength of a field
13510 20 2a 2f 0a 0a 20 20 2f 2a 20 41 73 73 75 6d 69   */..  /* Assumi
13520 6e 67 20 74 68 65 20 72 65 63 6f 72 64 20 63 6f  ng the record co
13530 6e 74 61 69 6e 73 20 4e 20 66 69 65 6c 64 73 2c  ntains N fields,
13540 20 74 68 65 20 72 65 63 6f 72 64 20 66 6f 72 6d   the record form
13550 61 74 20 6c 6f 6f 6b 73 0a 20 20 2a 2a 20 6c 69  at looks.  ** li
13560 6b 65 20 74 68 69 73 3a 0a 20 20 2a 2a 0a 20 20  ke this:.  **.  
13570 2a 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ** -------------
13580 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13590 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
135a0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
135b0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2a  -----------.  **
135c0 20 7c 20 68 64 72 2d 73 69 7a 65 20 7c 20 74 79   | hdr-size | ty
135d0 70 65 20 30 20 7c 20 74 79 70 65 20 31 20 7c 20  pe 0 | type 1 | 
135e0 2e 2e 2e 20 7c 20 74 79 70 65 20 4e 2d 31 20 7c  ... | type N-1 |
135f0 20 64 61 74 61 30 20 7c 20 2e 2e 2e 20 7c 20 64   data0 | ... | d
13600 61 74 61 20 4e 2d 31 20 7c 20 0a 20 20 2a 2a 20  ata N-1 | .  ** 
13610 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13620 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13630 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13640 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13650 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2a 0a 20 20  --------.  **.  
13660 2a 2a 20 44 61 74 61 28 30 29 20 69 73 20 74 61  ** Data(0) is ta
13670 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69 73 74 65  ken from registe
13680 72 20 50 31 2e 20 20 44 61 74 61 28 31 29 20 63  r P1.  Data(1) c
13690 6f 6d 65 73 20 66 72 6f 6d 20 72 65 67 69 73 74  omes from regist
136a0 65 72 20 50 31 2b 31 0a 20 20 2a 2a 20 61 6e 64  er P1+1.  ** and
136b0 20 73 6f 20 66 72 6f 74 68 2e 0a 20 20 2a 2a 0a   so froth..  **.
136c0 20 20 2a 2a 20 45 61 63 68 20 74 79 70 65 20 66    ** Each type f
136d0 69 65 6c 64 20 69 73 20 61 20 76 61 72 69 6e 74  ield is a varint
136e0 20 72 65 70 72 65 73 65 6e 74 69 6e 67 20 74 68   representing th
136f0 65 20 73 65 72 69 61 6c 20 74 79 70 65 20 6f 66  e serial type of
13700 20 74 68 65 20 0a 20 20 2a 2a 20 63 6f 72 72 65   the .  ** corre
13710 73 70 6f 6e 64 69 6e 67 20 64 61 74 61 20 65 6c  sponding data el
13720 65 6d 65 6e 74 20 28 73 65 65 20 73 71 6c 69 74  ement (see sqlit
13730 65 33 56 64 62 65 53 65 72 69 61 6c 54 79 70 65  e3VdbeSerialType
13740 28 29 29 2e 20 54 68 65 0a 20 20 2a 2a 20 68 64  ()). The.  ** hd
13750 72 2d 73 69 7a 65 20 66 69 65 6c 64 20 69 73 20  r-size field is 
13760 61 6c 73 6f 20 61 20 76 61 72 69 6e 74 20 77 68  also a varint wh
13770 69 63 68 20 69 73 20 74 68 65 20 6f 66 66 73 65  ich is the offse
13780 74 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e  t from the begin
13790 6e 69 6e 67 0a 20 20 2a 2a 20 6f 66 20 74 68 65  ning.  ** of the
137a0 20 72 65 63 6f 72 64 20 74 6f 20 64 61 74 61 30   record to data0
137b0 2e 0a 20 20 2a 2f 0a 20 20 6e 44 61 74 61 20 3d  ..  */.  nData =
137c0 20 30 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e   0;         /* N
137d0 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f  umber of bytes o
137e0 66 20 64 61 74 61 20 73 70 61 63 65 20 2a 2f 0a  f data space */.
137f0 20 20 6e 48 64 72 20 3d 20 30 3b 20 20 20 20 20    nHdr = 0;     
13800 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
13810 66 20 62 79 74 65 73 20 6f 66 20 68 65 61 64 65  f bytes of heade
13820 72 20 73 70 61 63 65 20 2a 2f 0a 20 20 6e 5a 65  r space */.  nZe
13830 72 6f 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20  ro = 0;         
13840 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 7a 65 72  /* Number of zer
13850 6f 20 62 79 74 65 73 20 61 74 20 74 68 65 20 65  o bytes at the e
13860 6e 64 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64  nd of the record
13870 20 2a 2f 0a 20 20 6e 46 69 65 6c 64 20 3d 20 70   */.  nField = p
13880 4f 70 2d 3e 70 31 3b 0a 20 20 7a 41 66 66 69 6e  Op->p1;.  zAffin
13890 69 74 79 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b  ity = pOp->p4.z;
138a0 0a 20 20 61 73 73 65 72 74 28 20 6e 46 69 65 6c  .  assert( nFiel
138b0 64 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 3e 30  d>0 && pOp->p2>0
138c0 20 26 26 20 70 4f 70 2d 3e 70 32 2b 6e 46 69 65   && pOp->p2+nFie
138d0 6c 64 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31 20 29 3b  ld<=p->nMem+1 );
138e0 0a 20 20 70 44 61 74 61 30 20 3d 20 26 61 4d 65  .  pData0 = &aMe
138f0 6d 5b 6e 46 69 65 6c 64 5d 3b 0a 20 20 6e 46 69  m[nField];.  nFi
13900 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20  eld = pOp->p2;. 
13910 20 70 4c 61 73 74 20 3d 20 26 70 44 61 74 61 30   pLast = &pData0
13920 5b 6e 46 69 65 6c 64 2d 31 5d 3b 0a 20 20 66 69  [nField-1];.  fi
13930 6c 65 5f 66 6f 72 6d 61 74 20 3d 20 70 2d 3e 6d  le_format = p->m
13940 69 6e 57 72 69 74 65 46 69 6c 65 46 6f 72 6d 61  inWriteFileForma
13950 74 3b 0a 0a 20 20 2f 2a 20 49 64 65 6e 74 69 66  t;..  /* Identif
13960 79 20 74 68 65 20 6f 75 74 70 75 74 20 72 65 67  y the output reg
13970 69 73 74 65 72 20 2a 2f 0a 20 20 61 73 73 65 72  ister */.  asser
13980 74 28 20 70 4f 70 2d 3e 70 33 3c 70 4f 70 2d 3e  t( pOp->p3<pOp->
13990 70 31 20 7c 7c 20 70 4f 70 2d 3e 70 33 3e 3d 70  p1 || pOp->p3>=p
139a0 4f 70 2d 3e 70 31 2b 70 4f 70 2d 3e 70 32 20 29  Op->p1+pOp->p2 )
139b0 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d  ;.  pOut = &aMem
139c0 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d  [pOp->p3];.  mem
139d0 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
139e0 20 70 4f 75 74 29 3b 0a 0a 20 20 2f 2a 20 4c 6f   pOut);..  /* Lo
139f0 6f 70 20 74 68 72 6f 75 67 68 20 74 68 65 20 65  op through the e
13a00 6c 65 6d 65 6e 74 73 20 74 68 61 74 20 77 69 6c  lements that wil
13a10 6c 20 6d 61 6b 65 20 75 70 20 74 68 65 20 72 65  l make up the re
13a20 63 6f 72 64 20 74 6f 20 66 69 67 75 72 65 0a 20  cord to figure. 
13a30 20 2a 2a 20 6f 75 74 20 68 6f 77 20 6d 75 63 68   ** out how much
13a40 20 73 70 61 63 65 20 69 73 20 72 65 71 75 69 72   space is requir
13a50 65 64 20 66 6f 72 20 74 68 65 20 6e 65 77 20 72  ed for the new r
13a60 65 63 6f 72 64 2e 0a 20 20 2a 2f 0a 20 20 66 6f  ecord..  */.  fo
13a70 72 28 70 52 65 63 3d 70 44 61 74 61 30 3b 20 70  r(pRec=pData0; p
13a80 52 65 63 3c 3d 70 4c 61 73 74 3b 20 70 52 65 63  Rec<=pLast; pRec
13a90 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  ++){.    assert(
13aa0 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 52 65 63   memIsValid(pRec
13ab0 29 20 29 3b 0a 20 20 20 20 69 66 28 20 7a 41 66  ) );.    if( zAf
13ac0 66 69 6e 69 74 79 20 29 7b 0a 20 20 20 20 20 20  finity ){.      
13ad0 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70 52  applyAffinity(pR
13ae0 65 63 2c 20 7a 41 66 66 69 6e 69 74 79 5b 70 52  ec, zAffinity[pR
13af0 65 63 2d 70 44 61 74 61 30 5d 2c 20 65 6e 63 6f  ec-pData0], enco
13b00 64 69 6e 67 29 3b 0a 20 20 20 20 7d 0a 20 20 20  ding);.    }.   
13b10 20 69 66 28 20 70 52 65 63 2d 3e 66 6c 61 67 73   if( pRec->flags
13b20 26 4d 45 4d 5f 5a 65 72 6f 20 26 26 20 70 52 65  &MEM_Zero && pRe
13b30 63 2d 3e 6e 3e 30 20 29 7b 0a 20 20 20 20 20 20  c->n>0 ){.      
13b40 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 45 78  sqlite3VdbeMemEx
13b50 70 61 6e 64 42 6c 6f 62 28 70 52 65 63 29 3b 0a  pandBlob(pRec);.
13b60 20 20 20 20 7d 0a 20 20 20 20 73 65 72 69 61 6c      }.    serial
13b70 5f 74 79 70 65 20 3d 20 73 71 6c 69 74 65 33 56  _type = sqlite3V
13b80 64 62 65 53 65 72 69 61 6c 54 79 70 65 28 70 52  dbeSerialType(pR
13b90 65 63 2c 20 66 69 6c 65 5f 66 6f 72 6d 61 74 29  ec, file_format)
13ba0 3b 0a 20 20 20 20 6c 65 6e 20 3d 20 73 71 6c 69  ;.    len = sqli
13bb0 74 65 33 56 64 62 65 53 65 72 69 61 6c 54 79 70  te3VdbeSerialTyp
13bc0 65 4c 65 6e 28 73 65 72 69 61 6c 5f 74 79 70 65  eLen(serial_type
13bd0 29 3b 0a 20 20 20 20 6e 44 61 74 61 20 2b 3d 20  );.    nData += 
13be0 6c 65 6e 3b 0a 20 20 20 20 6e 48 64 72 20 2b 3d  len;.    nHdr +=
13bf0 20 73 71 6c 69 74 65 33 56 61 72 69 6e 74 4c 65   sqlite3VarintLe
13c00 6e 28 73 65 72 69 61 6c 5f 74 79 70 65 29 3b 0a  n(serial_type);.
13c10 20 20 20 20 69 66 28 20 70 52 65 63 2d 3e 66 6c      if( pRec->fl
13c20 61 67 73 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29  ags & MEM_Zero )
13c30 7b 0a 20 20 20 20 20 20 2f 2a 20 4f 6e 6c 79 20  {.      /* Only 
13c40 70 75 72 65 20 7a 65 72 6f 2d 66 69 6c 6c 65 64  pure zero-filled
13c50 20 42 4c 4f 42 73 20 63 61 6e 20 62 65 20 69 6e   BLOBs can be in
13c60 70 75 74 20 74 6f 20 74 68 69 73 20 4f 70 63 6f  put to this Opco
13c70 64 65 2e 0a 20 20 20 20 20 20 2a 2a 20 57 65 20  de..      ** We 
13c80 64 6f 20 6e 6f 74 20 61 6c 6c 6f 77 20 62 6c 6f  do not allow blo
13c90 62 73 20 77 69 74 68 20 61 20 70 72 65 66 69 78  bs with a prefix
13ca0 20 61 6e 64 20 61 20 7a 65 72 6f 2d 66 69 6c 6c   and a zero-fill
13cb0 65 64 20 74 61 69 6c 2e 20 2a 2f 0a 20 20 20 20  ed tail. */.    
13cc0 20 20 6e 5a 65 72 6f 20 2b 3d 20 70 52 65 63 2d    nZero += pRec-
13cd0 3e 75 2e 6e 5a 65 72 6f 3b 0a 20 20 20 20 7d 65  >u.nZero;.    }e
13ce0 6c 73 65 20 69 66 28 20 6c 65 6e 20 29 7b 0a 20  lse if( len ){. 
13cf0 20 20 20 20 20 6e 5a 65 72 6f 20 3d 20 30 3b 0a       nZero = 0;.
13d00 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 2f 2a 20      }.  }..  /* 
13d10 41 64 64 20 74 68 65 20 69 6e 69 74 69 61 6c 20  Add the initial 
13d20 68 65 61 64 65 72 20 76 61 72 69 6e 74 20 61 6e  header varint an
13d30 64 20 74 6f 74 61 6c 20 74 68 65 20 73 69 7a 65  d total the size
13d40 20 2a 2f 0a 20 20 6e 48 64 72 20 2b 3d 20 6e 56   */.  nHdr += nV
13d50 61 72 69 6e 74 20 3d 20 73 71 6c 69 74 65 33 56  arint = sqlite3V
13d60 61 72 69 6e 74 4c 65 6e 28 6e 48 64 72 29 3b 0a  arintLen(nHdr);.
13d70 20 20 69 66 28 20 6e 56 61 72 69 6e 74 3c 73 71    if( nVarint<sq
13d80 6c 69 74 65 33 56 61 72 69 6e 74 4c 65 6e 28 6e  lite3VarintLen(n
13d90 48 64 72 29 20 29 7b 0a 20 20 20 20 6e 48 64 72  Hdr) ){.    nHdr
13da0 2b 2b 3b 0a 20 20 7d 0a 20 20 6e 42 79 74 65 20  ++;.  }.  nByte 
13db0 3d 20 6e 48 64 72 2b 6e 44 61 74 61 2d 6e 5a 65  = nHdr+nData-nZe
13dc0 72 6f 3b 0a 20 20 69 66 28 20 6e 42 79 74 65 3e  ro;.  if( nByte>
13dd0 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54  db->aLimit[SQLIT
13de0 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20  E_LIMIT_LENGTH] 
13df0 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f  ){.    goto too_
13e00 62 69 67 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 4d  big;.  }..  /* M
13e10 61 6b 65 20 73 75 72 65 20 74 68 65 20 6f 75 74  ake sure the out
13e20 70 75 74 20 72 65 67 69 73 74 65 72 20 68 61 73  put register has
13e30 20 61 20 62 75 66 66 65 72 20 6c 61 72 67 65 20   a buffer large 
13e40 65 6e 6f 75 67 68 20 74 6f 20 73 74 6f 72 65 20  enough to store 
13e50 0a 20 20 2a 2a 20 74 68 65 20 6e 65 77 20 72 65  .  ** the new re
13e60 63 6f 72 64 2e 20 54 68 65 20 6f 75 74 70 75 74  cord. The output
13e70 20 72 65 67 69 73 74 65 72 20 28 70 4f 70 2d 3e   register (pOp->
13e80 70 33 29 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 77  p3) is not allow
13e90 65 64 20 74 6f 0a 20 20 2a 2a 20 62 65 20 6f 6e  ed to.  ** be on
13ea0 65 20 6f 66 20 74 68 65 20 69 6e 70 75 74 20 72  e of the input r
13eb0 65 67 69 73 74 65 72 73 20 28 62 65 63 61 75 73  egisters (becaus
13ec0 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  e the following 
13ed0 63 61 6c 6c 20 74 6f 0a 20 20 2a 2a 20 73 71 6c  call to.  ** sql
13ee0 69 74 65 33 56 64 62 65 4d 65 6d 47 72 6f 77 28  ite3VdbeMemGrow(
13ef0 29 20 63 6f 75 6c 64 20 63 6c 6f 62 62 65 72 20  ) could clobber 
13f00 74 68 65 20 76 61 6c 75 65 20 62 65 66 6f 72 65  the value before
13f10 20 69 74 20 69 73 20 75 73 65 64 29 2e 0a 20 20   it is used)..  
13f20 2a 2f 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  */.  if( sqlite3
13f30 56 64 62 65 4d 65 6d 47 72 6f 77 28 70 4f 75 74  VdbeMemGrow(pOut
13f40 2c 20 28 69 6e 74 29 6e 42 79 74 65 2c 20 30 29  , (int)nByte, 0)
13f50 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f   ){.    goto no_
13f60 6d 65 6d 3b 0a 20 20 7d 0a 20 20 7a 4e 65 77 52  mem;.  }.  zNewR
13f70 65 63 6f 72 64 20 3d 20 28 75 38 20 2a 29 70 4f  ecord = (u8 *)pO
13f80 75 74 2d 3e 7a 3b 0a 0a 20 20 2f 2a 20 57 72 69  ut->z;..  /* Wri
13f90 74 65 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f  te the record */
13fa0 0a 20 20 69 20 3d 20 70 75 74 56 61 72 69 6e 74  .  i = putVarint
13fb0 33 32 28 7a 4e 65 77 52 65 63 6f 72 64 2c 20 6e  32(zNewRecord, n
13fc0 48 64 72 29 3b 0a 20 20 66 6f 72 28 70 52 65 63  Hdr);.  for(pRec
13fd0 3d 70 44 61 74 61 30 3b 20 70 52 65 63 3c 3d 70  =pData0; pRec<=p
13fe0 4c 61 73 74 3b 20 70 52 65 63 2b 2b 29 7b 0a 20  Last; pRec++){. 
13ff0 20 20 20 73 65 72 69 61 6c 5f 74 79 70 65 20 3d     serial_type =
14000 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69   sqlite3VdbeSeri
14010 61 6c 54 79 70 65 28 70 52 65 63 2c 20 66 69 6c  alType(pRec, fil
14020 65 5f 66 6f 72 6d 61 74 29 3b 0a 20 20 20 20 69  e_format);.    i
14030 20 2b 3d 20 70 75 74 56 61 72 69 6e 74 33 32 28   += putVarint32(
14040 26 7a 4e 65 77 52 65 63 6f 72 64 5b 69 5d 2c 20  &zNewRecord[i], 
14050 73 65 72 69 61 6c 5f 74 79 70 65 29 3b 20 20 20  serial_type);   
14060 20 20 20 2f 2a 20 73 65 72 69 61 6c 20 74 79 70     /* serial typ
14070 65 20 2a 2f 0a 20 20 7d 0a 20 20 66 6f 72 28 70  e */.  }.  for(p
14080 52 65 63 3d 70 44 61 74 61 30 3b 20 70 52 65 63  Rec=pData0; pRec
14090 3c 3d 70 4c 61 73 74 3b 20 70 52 65 63 2b 2b 29  <=pLast; pRec++)
140a0 7b 20 20 2f 2a 20 73 65 72 69 61 6c 20 64 61 74  {  /* serial dat
140b0 61 20 2a 2f 0a 20 20 20 20 69 20 2b 3d 20 73 71  a */.    i += sq
140c0 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 50  lite3VdbeSerialP
140d0 75 74 28 26 7a 4e 65 77 52 65 63 6f 72 64 5b 69  ut(&zNewRecord[i
140e0 5d 2c 20 28 69 6e 74 29 28 6e 42 79 74 65 2d 69  ], (int)(nByte-i
140f0 29 2c 20 70 52 65 63 2c 66 69 6c 65 5f 66 6f 72  ), pRec,file_for
14100 6d 61 74 29 3b 0a 20 20 7d 0a 20 20 61 73 73 65  mat);.  }.  asse
14110 72 74 28 20 69 3d 3d 6e 42 79 74 65 20 29 3b 0a  rt( i==nByte );.
14120 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
14130 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c  p3>0 && pOp->p3<
14140 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 4f  =p->nMem );.  pO
14150 75 74 2d 3e 6e 20 3d 20 28 69 6e 74 29 6e 42 79  ut->n = (int)nBy
14160 74 65 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67  te;.  pOut->flag
14170 73 20 3d 20 4d 45 4d 5f 42 6c 6f 62 20 7c 20 4d  s = MEM_Blob | M
14180 45 4d 5f 44 79 6e 3b 0a 20 20 70 4f 75 74 2d 3e  EM_Dyn;.  pOut->
14190 78 44 65 6c 20 3d 20 30 3b 0a 20 20 69 66 28 20  xDel = 0;.  if( 
141a0 6e 5a 65 72 6f 20 29 7b 0a 20 20 20 20 70 4f 75  nZero ){.    pOu
141b0 74 2d 3e 75 2e 6e 5a 65 72 6f 20 3d 20 6e 5a 65  t->u.nZero = nZe
141c0 72 6f 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c  ro;.    pOut->fl
141d0 61 67 73 20 7c 3d 20 4d 45 4d 5f 5a 65 72 6f 3b  ags |= MEM_Zero;
141e0 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 65 6e 63  .  }.  pOut->enc
141f0 20 3d 20 53 51 4c 49 54 45 5f 55 54 46 38 3b 20   = SQLITE_UTF8; 
14200 20 2f 2a 20 49 6e 20 63 61 73 65 20 74 68 65 20   /* In case the 
14210 62 6c 6f 62 20 69 73 20 65 76 65 72 20 63 6f 6e  blob is ever con
14220 76 65 72 74 65 64 20 74 6f 20 74 65 78 74 20 2a  verted to text *
14230 2f 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41  /.  REGISTER_TRA
14240 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4f 75 74  CE(pOp->p3, pOut
14250 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f  );.  UPDATE_MAX_
14260 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a  BLOBSIZE(pOut);.
14270 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
14280 70 63 6f 64 65 3a 20 43 6f 75 6e 74 20 50 31 20  pcode: Count P1 
14290 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53  P2 * * *.**.** S
142a0 74 6f 72 65 20 74 68 65 20 6e 75 6d 62 65 72 20  tore the number 
142b0 6f 66 20 65 6e 74 72 69 65 73 20 28 61 6e 20 69  of entries (an i
142c0 6e 74 65 67 65 72 20 76 61 6c 75 65 29 20 69 6e  nteger value) in
142d0 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e   the table or in
142e0 64 65 78 20 0a 2a 2a 20 6f 70 65 6e 65 64 20 62  dex .** opened b
142f0 79 20 63 75 72 73 6f 72 20 50 31 20 69 6e 20 72  y cursor P1 in r
14300 65 67 69 73 74 65 72 20 50 32 0a 2a 2f 0a 23 69  egister P2.*/.#i
14310 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
14320 54 5f 42 54 52 45 45 43 4f 55 4e 54 0a 63 61 73  T_BTREECOUNT.cas
14330 65 20 4f 50 5f 43 6f 75 6e 74 3a 20 7b 20 20 20  e OP_Count: {   
14340 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72        /* out2-pr
14350 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69 36  erelease */.  i6
14360 34 20 6e 45 6e 74 72 79 3b 0a 20 20 42 74 43 75  4 nEntry;.  BtCu
14370 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 0a 20 20  rsor *pCrsr;..  
14380 70 43 72 73 72 20 3d 20 70 2d 3e 61 70 43 73 72  pCrsr = p->apCsr
14390 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 70 43 75 72 73  [pOp->p1]->pCurs
143a0 6f 72 3b 0a 20 20 69 66 28 20 70 43 72 73 72 20  or;.  if( pCrsr 
143b0 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  ){.    rc = sqli
143c0 74 65 33 42 74 72 65 65 43 6f 75 6e 74 28 70 43  te3BtreeCount(pC
143d0 72 73 72 2c 20 26 6e 45 6e 74 72 79 29 3b 0a 20  rsr, &nEntry);. 
143e0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 6e 45 6e 74   }else{.    nEnt
143f0 72 79 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 70 4f  ry = 0;.  }.  pO
14400 75 74 2d 3e 75 2e 69 20 3d 20 6e 45 6e 74 72 79  ut->u.i = nEntry
14410 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  ;.  break;.}.#en
14420 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  dif../* Opcode: 
14430 53 61 76 65 70 6f 69 6e 74 20 50 31 20 2a 20 2a  Savepoint P1 * *
14440 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e   P4 *.**.** Open
14450 2c 20 72 65 6c 65 61 73 65 20 6f 72 20 72 6f 6c  , release or rol
14460 6c 62 61 63 6b 20 74 68 65 20 73 61 76 65 70 6f  lback the savepo
14470 69 6e 74 20 6e 61 6d 65 64 20 62 79 20 70 61 72  int named by par
14480 61 6d 65 74 65 72 20 50 34 2c 20 64 65 70 65 6e  ameter P4, depen
14490 64 69 6e 67 0a 2a 2a 20 6f 6e 20 74 68 65 20 76  ding.** on the v
144a0 61 6c 75 65 20 6f 66 20 50 31 2e 20 54 6f 20 6f  alue of P1. To o
144b0 70 65 6e 20 61 20 6e 65 77 20 73 61 76 65 70 6f  pen a new savepo
144c0 69 6e 74 2c 20 50 31 3d 3d 30 2e 20 54 6f 20 72  int, P1==0. To r
144d0 65 6c 65 61 73 65 20 28 63 6f 6d 6d 69 74 29 20  elease (commit) 
144e0 61 6e 0a 2a 2a 20 65 78 69 73 74 69 6e 67 20 73  an.** existing s
144f0 61 76 65 70 6f 69 6e 74 2c 20 50 31 3d 3d 31 2c  avepoint, P1==1,
14500 20 6f 72 20 74 6f 20 72 6f 6c 6c 62 61 63 6b 20   or to rollback 
14510 61 6e 20 65 78 69 73 74 69 6e 67 20 73 61 76 65  an existing save
14520 70 6f 69 6e 74 20 50 31 3d 3d 32 2e 0a 2a 2f 0a  point P1==2..*/.
14530 63 61 73 65 20 4f 50 5f 53 61 76 65 70 6f 69 6e  case OP_Savepoin
14540 74 3a 20 7b 0a 20 20 69 6e 74 20 70 31 3b 20 20  t: {.  int p1;  
14550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14560 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20         /* Value 
14570 6f 66 20 50 31 20 6f 70 65 72 61 6e 64 20 2a 2f  of P1 operand */
14580 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20  .  char *zName; 
14590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
145a0 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 73 61     /* Name of sa
145b0 76 65 70 6f 69 6e 74 20 2a 2f 0a 20 20 69 6e 74  vepoint */.  int
145c0 20 6e 4e 61 6d 65 3b 0a 20 20 53 61 76 65 70 6f   nName;.  Savepo
145d0 69 6e 74 20 2a 70 4e 65 77 3b 0a 20 20 53 61 76  int *pNew;.  Sav
145e0 65 70 6f 69 6e 74 20 2a 70 53 61 76 65 70 6f 69  epoint *pSavepoi
145f0 6e 74 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20  nt;.  Savepoint 
14600 2a 70 54 6d 70 3b 0a 20 20 69 6e 74 20 69 53 61  *pTmp;.  int iSa
14610 76 65 70 6f 69 6e 74 3b 0a 20 20 69 6e 74 20 69  vepoint;.  int i
14620 69 3b 0a 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e  i;..  p1 = pOp->
14630 70 31 3b 0a 20 20 7a 4e 61 6d 65 20 3d 20 70 4f  p1;.  zName = pO
14640 70 2d 3e 70 34 2e 7a 3b 0a 0a 20 20 2f 2a 20 41  p->p4.z;..  /* A
14650 73 73 65 72 74 20 74 68 61 74 20 74 68 65 20 70  ssert that the p
14660 31 20 70 61 72 61 6d 65 74 65 72 20 69 73 20 76  1 parameter is v
14670 61 6c 69 64 2e 20 41 6c 73 6f 20 74 68 61 74 20  alid. Also that 
14680 69 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6f  if there is no o
14690 70 65 6e 0a 20 20 2a 2a 20 74 72 61 6e 73 61 63  pen.  ** transac
146a0 74 69 6f 6e 2c 20 74 68 65 6e 20 74 68 65 72 65  tion, then there
146b0 20 63 61 6e 6e 6f 74 20 62 65 20 61 6e 79 20 73   cannot be any s
146c0 61 76 65 70 6f 69 6e 74 73 2e 20 0a 20 20 2a 2f  avepoints. .  */
146d0 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 70  .  assert( db->p
146e0 53 61 76 65 70 6f 69 6e 74 3d 3d 30 20 7c 7c 20  Savepoint==0 || 
146f0 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d  db->autoCommit==
14700 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
14710 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 42 45 47  1==SAVEPOINT_BEG
14720 49 4e 7c 7c 70 31 3d 3d 53 41 56 45 50 4f 49 4e  IN||p1==SAVEPOIN
14730 54 5f 52 45 4c 45 41 53 45 7c 7c 70 31 3d 3d 53  T_RELEASE||p1==S
14740 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43  AVEPOINT_ROLLBAC
14750 4b 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64  K );.  assert( d
14760 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 7c 7c  b->pSavepoint ||
14770 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69   db->isTransacti
14780 6f 6e 53 61 76 65 70 6f 69 6e 74 3d 3d 30 20 29  onSavepoint==0 )
14790 3b 0a 20 20 61 73 73 65 72 74 28 20 63 68 65 63  ;.  assert( chec
147a0 6b 53 61 76 65 70 6f 69 6e 74 43 6f 75 6e 74 28  kSavepointCount(
147b0 64 62 29 20 29 3b 0a 0a 20 20 69 66 28 20 70 31  db) );..  if( p1
147c0 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 42 45 47 49  ==SAVEPOINT_BEGI
147d0 4e 20 29 7b 0a 20 20 20 20 69 66 28 20 64 62 2d  N ){.    if( db-
147e0 3e 77 72 69 74 65 56 64 62 65 43 6e 74 3e 30 20  >writeVdbeCnt>0 
147f0 29 7b 0a 20 20 20 20 20 20 2f 2a 20 41 20 6e 65  ){.      /* A ne
14800 77 20 73 61 76 65 70 6f 69 6e 74 20 63 61 6e 6e  w savepoint cann
14810 6f 74 20 62 65 20 63 72 65 61 74 65 64 20 69 66  ot be created if
14820 20 74 68 65 72 65 20 61 72 65 20 61 63 74 69 76   there are activ
14830 65 20 77 72 69 74 65 20 0a 20 20 20 20 20 20 2a  e write .      *
14840 2a 20 73 74 61 74 65 6d 65 6e 74 73 20 28 69 2e  * statements (i.
14850 65 2e 20 6f 70 65 6e 20 72 65 61 64 2f 77 72 69  e. open read/wri
14860 74 65 20 69 6e 63 72 65 6d 65 6e 74 61 6c 20 62  te incremental b
14870 6c 6f 62 20 68 61 6e 64 6c 65 73 29 2e 0a 20 20  lob handles)..  
14880 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c      */.      sql
14890 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70  ite3SetString(&p
148a0 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22  ->zErrMsg, db, "
148b0 63 61 6e 6e 6f 74 20 6f 70 65 6e 20 73 61 76 65  cannot open save
148c0 70 6f 69 6e 74 20 2d 20 22 0a 20 20 20 20 20 20  point - ".      
148d0 20 20 22 53 51 4c 20 73 74 61 74 65 6d 65 6e 74    "SQL statement
148e0 73 20 69 6e 20 70 72 6f 67 72 65 73 73 22 29 3b  s in progress");
148f0 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49  .      rc = SQLI
14900 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 7d 65 6c  TE_BUSY;.    }el
14910 73 65 7b 0a 20 20 20 20 20 20 6e 4e 61 6d 65 20  se{.      nName 
14920 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33  = sqlite3Strlen3
14930 30 28 7a 4e 61 6d 65 29 3b 0a 0a 20 20 20 20 20  0(zName);..     
14940 20 2f 2a 20 43 72 65 61 74 65 20 61 20 6e 65 77   /* Create a new
14950 20 73 61 76 65 70 6f 69 6e 74 20 73 74 72 75 63   savepoint struc
14960 74 75 72 65 2e 20 2a 2f 0a 20 20 20 20 20 20 70  ture. */.      p
14970 4e 65 77 20 3d 20 73 71 6c 69 74 65 33 44 62 4d  New = sqlite3DbM
14980 61 6c 6c 6f 63 52 61 77 28 64 62 2c 20 73 69 7a  allocRaw(db, siz
14990 65 6f 66 28 53 61 76 65 70 6f 69 6e 74 29 2b 6e  eof(Savepoint)+n
149a0 4e 61 6d 65 2b 31 29 3b 0a 20 20 20 20 20 20 69  Name+1);.      i
149b0 66 28 20 70 4e 65 77 20 29 7b 0a 20 20 20 20 20  f( pNew ){.     
149c0 20 20 20 70 4e 65 77 2d 3e 7a 4e 61 6d 65 20 3d     pNew->zName =
149d0 20 28 63 68 61 72 20 2a 29 26 70 4e 65 77 5b 31   (char *)&pNew[1
149e0 5d 3b 0a 20 20 20 20 20 20 20 20 6d 65 6d 63 70  ];.        memcp
149f0 79 28 70 4e 65 77 2d 3e 7a 4e 61 6d 65 2c 20 7a  y(pNew->zName, z
14a00 4e 61 6d 65 2c 20 6e 4e 61 6d 65 2b 31 29 3b 0a  Name, nName+1);.
14a10 20 20 20 20 0a 20 20 20 20 20 20 20 20 2f 2a 20      .        /* 
14a20 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6f  If there is no o
14a30 70 65 6e 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c  pen transaction,
14a40 20 74 68 65 6e 20 6d 61 72 6b 20 74 68 69 73 20   then mark this 
14a50 61 73 20 61 20 73 70 65 63 69 61 6c 0a 20 20 20  as a special.   
14a60 20 20 20 20 20 2a 2a 20 22 74 72 61 6e 73 61 63       ** "transac
14a70 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 22 2e  tion savepoint".
14a80 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20   */.        if( 
14a90 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 29  db->autoCommit )
14aa0 7b 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e  {.          db->
14ab0 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 30 3b 0a  autoCommit = 0;.
14ac0 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 69 73            db->is
14ad0 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70  TransactionSavep
14ae0 6f 69 6e 74 20 3d 20 31 3b 0a 20 20 20 20 20 20  oint = 1;.      
14af0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
14b00 20 20 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e     db->nSavepoin
14b10 74 2b 2b 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  t++;.        }. 
14b20 20 20 20 0a 20 20 20 20 20 20 20 20 2f 2a 20 4c     .        /* L
14b30 69 6e 6b 20 74 68 65 20 6e 65 77 20 73 61 76 65  ink the new save
14b40 70 6f 69 6e 74 20 69 6e 74 6f 20 74 68 65 20 64  point into the d
14b50 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 27 73  atabase handle's
14b60 20 6c 69 73 74 2e 20 2a 2f 0a 20 20 20 20 20 20   list. */.      
14b70 20 20 70 4e 65 77 2d 3e 70 4e 65 78 74 20 3d 20    pNew->pNext = 
14b80 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b 0a  db->pSavepoint;.
14b90 20 20 20 20 20 20 20 20 64 62 2d 3e 70 53 61 76          db->pSav
14ba0 65 70 6f 69 6e 74 20 3d 20 70 4e 65 77 3b 0a 20  epoint = pNew;. 
14bb0 20 20 20 20 20 20 20 70 4e 65 77 2d 3e 6e 44 65         pNew->nDe
14bc0 66 65 72 72 65 64 43 6f 6e 73 20 3d 20 64 62 2d  ferredCons = db-
14bd0 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 0a  >nDeferredCons;.
14be0 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
14bf0 7d 65 6c 73 65 7b 0a 20 20 20 20 69 53 61 76 65  }else{.    iSave
14c00 70 6f 69 6e 74 20 3d 20 30 3b 0a 0a 20 20 20 20  point = 0;..    
14c10 2f 2a 20 46 69 6e 64 20 74 68 65 20 6e 61 6d 65  /* Find the name
14c20 64 20 73 61 76 65 70 6f 69 6e 74 2e 20 49 66 20  d savepoint. If 
14c30 74 68 65 72 65 20 69 73 20 6e 6f 20 73 75 63 68  there is no such
14c40 20 73 61 76 65 70 6f 69 6e 74 2c 20 74 68 65 6e   savepoint, then
14c50 20 61 6e 0a 20 20 20 20 2a 2a 20 61 6e 20 65 72   an.    ** an er
14c60 72 6f 72 20 69 73 20 72 65 74 75 72 6e 65 64 20  ror is returned 
14c70 74 6f 20 74 68 65 20 75 73 65 72 2e 20 20 2a 2f  to the user.  */
14c80 0a 20 20 20 20 66 6f 72 28 0a 20 20 20 20 20 20  .    for(.      
14c90 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 64 62 2d  pSavepoint = db-
14ca0 3e 70 53 61 76 65 70 6f 69 6e 74 3b 20 0a 20 20  >pSavepoint; .  
14cb0 20 20 20 20 70 53 61 76 65 70 6f 69 6e 74 20 26      pSavepoint &
14cc0 26 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70  & sqlite3StrICmp
14cd0 28 70 53 61 76 65 70 6f 69 6e 74 2d 3e 7a 4e 61  (pSavepoint->zNa
14ce0 6d 65 2c 20 7a 4e 61 6d 65 29 3b 0a 20 20 20 20  me, zName);.    
14cf0 20 20 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 70    pSavepoint = p
14d00 53 61 76 65 70 6f 69 6e 74 2d 3e 70 4e 65 78 74  Savepoint->pNext
14d10 0a 20 20 20 20 29 7b 0a 20 20 20 20 20 20 69 53  .    ){.      iS
14d20 61 76 65 70 6f 69 6e 74 2b 2b 3b 0a 20 20 20 20  avepoint++;.    
14d30 7d 0a 20 20 20 20 69 66 28 20 21 70 53 61 76 65  }.    if( !pSave
14d40 70 6f 69 6e 74 20 29 7b 0a 20 20 20 20 20 20 73  point ){.      s
14d50 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28  qlite3SetString(
14d60 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c  &p->zErrMsg, db,
14d70 20 22 6e 6f 20 73 75 63 68 20 73 61 76 65 70 6f   "no such savepo
14d80 69 6e 74 3a 20 25 73 22 2c 20 7a 4e 61 6d 65 29  int: %s", zName)
14d90 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c  ;.      rc = SQL
14da0 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d  ITE_ERROR;.    }
14db0 65 6c 73 65 20 69 66 28 20 0a 20 20 20 20 20 20  else if( .      
14dc0 20 20 64 62 2d 3e 77 72 69 74 65 56 64 62 65 43    db->writeVdbeC
14dd0 6e 74 3e 30 20 7c 7c 20 28 70 31 3d 3d 53 41 56  nt>0 || (p1==SAV
14de0 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20  EPOINT_ROLLBACK 
14df0 26 26 20 64 62 2d 3e 61 63 74 69 76 65 56 64 62  && db->activeVdb
14e00 65 43 6e 74 3e 31 29 20 0a 20 20 20 20 29 7b 0a  eCnt>1) .    ){.
14e10 20 20 20 20 20 20 2f 2a 20 49 74 20 69 73 20 6e        /* It is n
14e20 6f 74 20 70 6f 73 73 69 62 6c 65 20 74 6f 20 72  ot possible to r
14e30 65 6c 65 61 73 65 20 28 63 6f 6d 6d 69 74 29 20  elease (commit) 
14e40 61 20 73 61 76 65 70 6f 69 6e 74 20 69 66 20 74  a savepoint if t
14e50 68 65 72 65 20 61 72 65 20 0a 20 20 20 20 20 20  here are .      
14e60 2a 2a 20 61 63 74 69 76 65 20 77 72 69 74 65 20  ** active write 
14e70 73 74 61 74 65 6d 65 6e 74 73 2e 20 49 74 20 69  statements. It i
14e80 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65 20 74  s not possible t
14e90 6f 20 72 6f 6c 6c 62 61 63 6b 20 61 20 73 61 76  o rollback a sav
14ea0 65 70 6f 69 6e 74 0a 20 20 20 20 20 20 2a 2a 20  epoint.      ** 
14eb0 69 66 20 74 68 65 72 65 20 61 72 65 20 61 6e 79  if there are any
14ec0 20 61 63 74 69 76 65 20 73 74 61 74 65 6d 65 6e   active statemen
14ed0 74 73 20 61 74 20 61 6c 6c 2e 0a 20 20 20 20 20  ts at all..     
14ee0 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65   */.      sqlite
14ef0 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a  3SetString(&p->z
14f00 45 72 72 4d 73 67 2c 20 64 62 2c 20 0a 20 20 20  ErrMsg, db, .   
14f10 20 20 20 20 20 22 63 61 6e 6e 6f 74 20 25 73 20       "cannot %s 
14f20 73 61 76 65 70 6f 69 6e 74 20 2d 20 53 51 4c 20  savepoint - SQL 
14f30 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 70 72  statements in pr
14f40 6f 67 72 65 73 73 22 2c 0a 20 20 20 20 20 20 20  ogress",.       
14f50 20 28 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f   (p1==SAVEPOINT_
14f60 52 4f 4c 4c 42 41 43 4b 20 3f 20 22 72 6f 6c 6c  ROLLBACK ? "roll
14f70 62 61 63 6b 22 3a 20 22 72 65 6c 65 61 73 65 22  back": "release"
14f80 29 0a 20 20 20 20 20 20 29 3b 0a 20 20 20 20 20  ).      );.     
14f90 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53   rc = SQLITE_BUS
14fa0 59 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 0a 20  Y;.    }else{.. 
14fb0 20 20 20 20 20 2f 2a 20 44 65 74 65 72 6d 69 6e       /* Determin
14fc0 65 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  e whether or not
14fd0 20 74 68 69 73 20 69 73 20 61 20 74 72 61 6e 73   this is a trans
14fe0 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74  action savepoint
14ff0 2e 20 49 66 20 73 6f 2c 0a 20 20 20 20 20 20 2a  . If so,.      *
15000 2a 20 61 6e 64 20 74 68 69 73 20 69 73 20 61 20  * and this is a 
15010 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 2c  RELEASE command,
15020 20 74 68 65 6e 20 74 68 65 20 63 75 72 72 65 6e   then the curren
15030 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 0a 20  t transaction . 
15040 20 20 20 20 20 2a 2a 20 69 73 20 63 6f 6d 6d 69       ** is commi
15050 74 74 65 64 2e 20 0a 20 20 20 20 20 20 2a 2f 0a  tted. .      */.
15060 20 20 20 20 20 20 69 6e 74 20 69 73 54 72 61 6e        int isTran
15070 73 61 63 74 69 6f 6e 20 3d 20 70 53 61 76 65 70  saction = pSavep
15080 6f 69 6e 74 2d 3e 70 4e 65 78 74 3d 3d 30 20 26  oint->pNext==0 &
15090 26 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74  & db->isTransact
150a0 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20  ionSavepoint;.  
150b0 20 20 20 20 69 66 28 20 69 73 54 72 61 6e 73 61      if( isTransa
150c0 63 74 69 6f 6e 20 26 26 20 70 31 3d 3d 53 41 56  ction && p1==SAV
150d0 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20 29  EPOINT_RELEASE )
150e0 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 28 72  {.        if( (r
150f0 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43  c = sqlite3VdbeC
15100 68 65 63 6b 46 6b 28 70 2c 20 31 29 29 21 3d 53  heckFk(p, 1))!=S
15110 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
15120 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f        goto vdbe_
15130 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 20 20  return;.        
15140 7d 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 61 75  }.        db->au
15150 74 6f 43 6f 6d 6d 69 74 20 3d 20 31 3b 0a 20 20  toCommit = 1;.  
15160 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65        if( sqlite
15170 33 56 64 62 65 48 61 6c 74 28 70 29 3d 3d 53 51  3VdbeHalt(p)==SQ
15180 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20  LITE_BUSY ){.   
15190 20 20 20 20 20 20 20 70 2d 3e 70 63 20 3d 20 70         p->pc = p
151a0 63 3b 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d  c;.          db-
151b0 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 30 3b  >autoCommit = 0;
151c0 0a 20 20 20 20 20 20 20 20 20 20 70 2d 3e 72 63  .          p->rc
151d0 20 3d 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42   = rc = SQLITE_B
151e0 55 53 59 3b 0a 20 20 20 20 20 20 20 20 20 20 67  USY;.          g
151f0 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b  oto vdbe_return;
15200 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
15210 20 20 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63     db->isTransac
15220 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 20 3d 20  tionSavepoint = 
15230 30 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  0;.        rc = 
15240 70 2d 3e 72 63 3b 0a 20 20 20 20 20 20 7d 65 6c  p->rc;.      }el
15250 73 65 7b 0a 20 20 20 20 20 20 20 20 69 53 61 76  se{.        iSav
15260 65 70 6f 69 6e 74 20 3d 20 64 62 2d 3e 6e 53 61  epoint = db->nSa
15270 76 65 70 6f 69 6e 74 20 2d 20 69 53 61 76 65 70  vepoint - iSavep
15280 6f 69 6e 74 20 2d 20 31 3b 0a 20 20 20 20 20 20  oint - 1;.      
15290 20 20 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 64    for(ii=0; ii<d
152a0 62 2d 3e 6e 44 62 3b 20 69 69 2b 2b 29 7b 0a 20  b->nDb; ii++){. 
152b0 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71           rc = sq
152c0 6c 69 74 65 33 42 74 72 65 65 53 61 76 65 70 6f  lite3BtreeSavepo
152d0 69 6e 74 28 64 62 2d 3e 61 44 62 5b 69 69 5d 2e  int(db->aDb[ii].
152e0 70 42 74 2c 20 70 31 2c 20 69 53 61 76 65 70 6f  pBt, p1, iSavepo
152f0 69 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20  int);.          
15300 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
15310 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20  K ){.           
15320 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
15330 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20  to_error;.      
15340 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a      }.        }.
15350 20 20 20 20 20 20 20 20 69 66 28 20 70 31 3d 3d          if( p1==
15360 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41  SAVEPOINT_ROLLBA
15370 43 4b 20 26 26 20 28 64 62 2d 3e 66 6c 61 67 73  CK && (db->flags
15380 26 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68  &SQLITE_InternCh
15390 61 6e 67 65 73 29 21 3d 30 20 29 7b 0a 20 20 20  anges)!=0 ){.   
153a0 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 45 78         sqlite3Ex
153b0 70 69 72 65 50 72 65 70 61 72 65 64 53 74 61 74  pirePreparedStat
153c0 65 6d 65 6e 74 73 28 64 62 29 3b 0a 20 20 20 20  ements(db);.    
153d0 20 20 20 20 20 20 73 71 6c 69 74 65 33 52 65 73        sqlite3Res
153e0 65 74 49 6e 74 65 72 6e 61 6c 53 63 68 65 6d 61  etInternalSchema
153f0 28 64 62 2c 20 2d 31 29 3b 0a 20 20 20 20 20 20  (db, -1);.      
15400 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
15410 75 74 65 78 52 65 73 79 6e 63 28 70 29 3b 0a 20  utexResync(p);. 
15420 20 20 20 20 20 20 20 20 20 64 62 2d 3e 66 6c 61           db->fla
15430 67 73 20 3d 20 28 64 62 2d 3e 66 6c 61 67 73 20  gs = (db->flags 
15440 7c 20 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43  | SQLITE_InternC
15450 68 61 6e 67 65 73 29 3b 0a 20 20 20 20 20 20 20  hanges);.       
15460 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 0a 20 20   }.      }.  .  
15470 20 20 20 20 2f 2a 20 52 65 67 61 72 64 6c 65 73      /* Regardles
15480 73 20 6f 66 20 77 68 65 74 68 65 72 20 74 68 69  s of whether thi
15490 73 20 69 73 20 61 20 52 45 4c 45 41 53 45 20 6f  s is a RELEASE o
154a0 72 20 52 4f 4c 4c 42 41 43 4b 2c 20 64 65 73 74  r ROLLBACK, dest
154b0 72 6f 79 20 61 6c 6c 20 0a 20 20 20 20 20 20 2a  roy all .      *
154c0 2a 20 73 61 76 65 70 6f 69 6e 74 73 20 6e 65 73  * savepoints nes
154d0 74 65 64 20 69 6e 73 69 64 65 20 6f 66 20 74 68  ted inside of th
154e0 65 20 73 61 76 65 70 6f 69 6e 74 20 62 65 69 6e  e savepoint bein
154f0 67 20 6f 70 65 72 61 74 65 64 20 6f 6e 2e 20 2a  g operated on. *
15500 2f 0a 20 20 20 20 20 20 77 68 69 6c 65 28 20 64  /.      while( d
15510 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 21 3d 70  b->pSavepoint!=p
15520 53 61 76 65 70 6f 69 6e 74 20 29 7b 0a 20 20 20  Savepoint ){.   
15530 20 20 20 20 20 70 54 6d 70 20 3d 20 64 62 2d 3e       pTmp = db->
15540 70 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 20 20  pSavepoint;.    
15550 20 20 20 20 64 62 2d 3e 70 53 61 76 65 70 6f 69      db->pSavepoi
15560 6e 74 20 3d 20 70 54 6d 70 2d 3e 70 4e 65 78 74  nt = pTmp->pNext
15570 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
15580 33 44 62 46 72 65 65 28 64 62 2c 20 70 54 6d 70  3DbFree(db, pTmp
15590 29 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 6e  );.        db->n
155a0 53 61 76 65 70 6f 69 6e 74 2d 2d 3b 0a 20 20 20  Savepoint--;.   
155b0 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 49     }..      /* I
155c0 66 20 69 74 20 69 73 20 61 20 52 45 4c 45 41 53  f it is a RELEAS
155d0 45 2c 20 74 68 65 6e 20 64 65 73 74 72 6f 79 20  E, then destroy 
155e0 74 68 65 20 73 61 76 65 70 6f 69 6e 74 20 62 65  the savepoint be
155f0 69 6e 67 20 6f 70 65 72 61 74 65 64 20 6f 6e 20  ing operated on 
15600 0a 20 20 20 20 20 20 2a 2a 20 74 6f 6f 2e 20 49  .      ** too. I
15610 66 20 69 74 20 69 73 20 61 20 52 4f 4c 4c 42 41  f it is a ROLLBA
15620 43 4b 20 54 4f 2c 20 74 68 65 6e 20 73 65 74 20  CK TO, then set 
15630 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 64 65  the number of de
15640 66 65 72 72 65 64 20 0a 20 20 20 20 20 20 2a 2a  ferred .      **
15650 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c   constraint viol
15660 61 74 69 6f 6e 73 20 70 72 65 73 65 6e 74 20 69  ations present i
15670 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74  n the database t
15680 6f 20 74 68 65 20 76 61 6c 75 65 20 73 74 6f 72  o the value stor
15690 65 64 0a 20 20 20 20 20 20 2a 2a 20 77 68 65 6e  ed.      ** when
156a0 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74 20 77   the savepoint w
156b0 61 73 20 63 72 65 61 74 65 64 2e 20 20 2a 2f 0a  as created.  */.
156c0 20 20 20 20 20 20 69 66 28 20 70 31 3d 3d 53 41        if( p1==SA
156d0 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20  VEPOINT_RELEASE 
156e0 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  ){.        asser
156f0 74 28 20 70 53 61 76 65 70 6f 69 6e 74 3d 3d 64  t( pSavepoint==d
15700 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 29 3b  b->pSavepoint );
15710 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 70 53 61  .        db->pSa
15720 76 65 70 6f 69 6e 74 20 3d 20 70 53 61 76 65 70  vepoint = pSavep
15730 6f 69 6e 74 2d 3e 70 4e 65 78 74 3b 0a 20 20 20  oint->pNext;.   
15740 20 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72       sqlite3DbFr
15750 65 65 28 64 62 2c 20 70 53 61 76 65 70 6f 69 6e  ee(db, pSavepoin
15760 74 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  t);.        if( 
15770 21 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 20 29  !isTransaction )
15780 7b 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e  {.          db->
15790 6e 53 61 76 65 70 6f 69 6e 74 2d 2d 3b 0a 20 20  nSavepoint--;.  
157a0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 65        }.      }e
157b0 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 64 62 2d  lse{.        db-
157c0 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 20 3d  >nDeferredCons =
157d0 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 6e 44 65   pSavepoint->nDe
157e0 66 65 72 72 65 64 43 6f 6e 73 3b 0a 20 20 20 20  ferredCons;.    
157f0 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20    }.    }.  }.. 
15800 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
15810 63 6f 64 65 3a 20 41 75 74 6f 43 6f 6d 6d 69 74  code: AutoCommit
15820 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
15830 2a 2a 20 53 65 74 20 74 68 65 20 64 61 74 61 62  ** Set the datab
15840 61 73 65 20 61 75 74 6f 2d 63 6f 6d 6d 69 74 20  ase auto-commit 
15850 66 6c 61 67 20 74 6f 20 50 31 20 28 31 20 6f 72  flag to P1 (1 or
15860 20 30 29 2e 20 49 66 20 50 32 20 69 73 20 74 72   0). If P2 is tr
15870 75 65 2c 20 72 6f 6c 6c 0a 2a 2a 20 62 61 63 6b  ue, roll.** back
15880 20 61 6e 79 20 63 75 72 72 65 6e 74 6c 79 20 61   any currently a
15890 63 74 69 76 65 20 62 74 72 65 65 20 74 72 61 6e  ctive btree tran
158a0 73 61 63 74 69 6f 6e 73 2e 20 49 66 20 74 68 65  sactions. If the
158b0 72 65 20 61 72 65 20 61 6e 79 20 61 63 74 69 76  re are any activ
158c0 65 0a 2a 2a 20 56 4d 73 20 28 61 70 61 72 74 20  e.** VMs (apart 
158d0 66 72 6f 6d 20 74 68 69 73 20 6f 6e 65 29 2c 20  from this one), 
158e0 74 68 65 6e 20 61 20 52 4f 4c 4c 42 41 43 4b 20  then a ROLLBACK 
158f0 66 61 69 6c 73 2e 20 20 41 20 43 4f 4d 4d 49 54  fails.  A COMMIT
15900 20 66 61 69 6c 73 20 69 66 0a 2a 2a 20 74 68 65   fails if.** the
15910 72 65 20 61 72 65 20 61 63 74 69 76 65 20 77 72  re are active wr
15920 69 74 69 6e 67 20 56 4d 73 20 6f 72 20 61 63 74  iting VMs or act
15930 69 76 65 20 56 4d 73 20 74 68 61 74 20 75 73 65  ive VMs that use
15940 20 73 68 61 72 65 64 20 63 61 63 68 65 2e 0a 2a   shared cache..*
15950 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75  *.** This instru
15960 63 74 69 6f 6e 20 63 61 75 73 65 73 20 74 68 65  ction causes the
15970 20 56 4d 20 74 6f 20 68 61 6c 74 2e 0a 2a 2f 0a   VM to halt..*/.
15980 63 61 73 65 20 4f 50 5f 41 75 74 6f 43 6f 6d 6d  case OP_AutoComm
15990 69 74 3a 20 7b 0a 20 20 69 6e 74 20 64 65 73 69  it: {.  int desi
159a0 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3b 0a 20  redAutoCommit;. 
159b0 20 69 6e 74 20 69 52 6f 6c 6c 62 61 63 6b 3b 0a   int iRollback;.
159c0 20 20 69 6e 74 20 74 75 72 6e 4f 6e 41 43 3b 0a    int turnOnAC;.
159d0 0a 20 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f  .  desiredAutoCo
159e0 6d 6d 69 74 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a  mmit = pOp->p1;.
159f0 20 20 69 52 6f 6c 6c 62 61 63 6b 20 3d 20 70 4f    iRollback = pO
15a00 70 2d 3e 70 32 3b 0a 20 20 74 75 72 6e 4f 6e 41  p->p2;.  turnOnA
15a10 43 20 3d 20 64 65 73 69 72 65 64 41 75 74 6f 43  C = desiredAutoC
15a20 6f 6d 6d 69 74 20 26 26 20 21 64 62 2d 3e 61 75  ommit && !db->au
15a30 74 6f 43 6f 6d 6d 69 74 3b 0a 20 20 61 73 73 65  toCommit;.  asse
15a40 72 74 28 20 64 65 73 69 72 65 64 41 75 74 6f 43  rt( desiredAutoC
15a50 6f 6d 6d 69 74 3d 3d 31 20 7c 7c 20 64 65 73 69  ommit==1 || desi
15a60 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30  redAutoCommit==0
15a70 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64 65   );.  assert( de
15a80 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d  siredAutoCommit=
15a90 3d 31 20 7c 7c 20 69 52 6f 6c 6c 62 61 63 6b 3d  =1 || iRollback=
15aa0 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
15ab0 64 62 2d 3e 61 63 74 69 76 65 56 64 62 65 43 6e  db->activeVdbeCn
15ac0 74 3e 30 20 29 3b 20 20 2f 2a 20 41 74 20 6c 65  t>0 );  /* At le
15ad0 61 73 74 20 74 68 69 73 20 6f 6e 65 20 56 4d 20  ast this one VM 
15ae0 69 73 20 61 63 74 69 76 65 20 2a 2f 0a 0a 20 20  is active */..  
15af0 69 66 28 20 74 75 72 6e 4f 6e 41 43 20 26 26 20  if( turnOnAC && 
15b00 69 52 6f 6c 6c 62 61 63 6b 20 26 26 20 64 62 2d  iRollback && db-
15b10 3e 61 63 74 69 76 65 56 64 62 65 43 6e 74 3e 31  >activeVdbeCnt>1
15b20 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68   ){.    /* If th
15b30 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69  is instruction i
15b40 6d 70 6c 65 6d 65 6e 74 73 20 61 20 52 4f 4c 4c  mplements a ROLL
15b50 42 41 43 4b 20 61 6e 64 20 6f 74 68 65 72 20 56  BACK and other V
15b60 4d 73 20 61 72 65 0a 20 20 20 20 2a 2a 20 73 74  Ms are.    ** st
15b70 69 6c 6c 20 72 75 6e 6e 69 6e 67 2c 20 61 6e 64  ill running, and
15b80 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69   a transaction i
15b90 73 20 61 63 74 69 76 65 2c 20 72 65 74 75 72 6e  s active, return
15ba0 20 61 6e 20 65 72 72 6f 72 20 69 6e 64 69 63 61   an error indica
15bb0 74 69 6e 67 0a 20 20 20 20 2a 2a 20 74 68 61 74  ting.    ** that
15bc0 20 74 68 65 20 6f 74 68 65 72 20 56 4d 73 20 6d   the other VMs m
15bd0 75 73 74 20 63 6f 6d 70 6c 65 74 65 20 66 69 72  ust complete fir
15be0 73 74 2e 20 0a 20 20 20 20 2a 2f 0a 20 20 20 20  st. .    */.    
15bf0 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67  sqlite3SetString
15c00 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62  (&p->zErrMsg, db
15c10 2c 20 22 63 61 6e 6e 6f 74 20 72 6f 6c 6c 62 61  , "cannot rollba
15c20 63 6b 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2d  ck transaction -
15c30 20 22 0a 20 20 20 20 20 20 20 20 22 53 51 4c 20   ".        "SQL 
15c40 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 70 72  statements in pr
15c50 6f 67 72 65 73 73 22 29 3b 0a 20 20 20 20 72 63  ogress");.    rc
15c60 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a   = SQLITE_BUSY;.
15c70 20 20 7d 65 6c 73 65 20 69 66 28 20 74 75 72 6e    }else if( turn
15c80 4f 6e 41 43 20 26 26 20 21 69 52 6f 6c 6c 62 61  OnAC && !iRollba
15c90 63 6b 20 26 26 20 64 62 2d 3e 77 72 69 74 65 56  ck && db->writeV
15ca0 64 62 65 43 6e 74 3e 30 20 29 7b 0a 20 20 20 20  dbeCnt>0 ){.    
15cb0 2f 2a 20 49 66 20 74 68 69 73 20 69 6e 73 74 72  /* If this instr
15cc0 75 63 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74  uction implement
15cd0 73 20 61 20 43 4f 4d 4d 49 54 20 61 6e 64 20 6f  s a COMMIT and o
15ce0 74 68 65 72 20 56 4d 73 20 61 72 65 20 77 72 69  ther VMs are wri
15cf0 74 69 6e 67 0a 20 20 20 20 2a 2a 20 72 65 74 75  ting.    ** retu
15d00 72 6e 20 61 6e 20 65 72 72 6f 72 20 69 6e 64 69  rn an error indi
15d10 63 61 74 69 6e 67 20 74 68 61 74 20 74 68 65 20  cating that the 
15d20 6f 74 68 65 72 20 56 4d 73 20 6d 75 73 74 20 63  other VMs must c
15d30 6f 6d 70 6c 65 74 65 20 66 69 72 73 74 2e 20 0a  omplete first. .
15d40 20 20 20 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74      */.    sqlit
15d50 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e  e3SetString(&p->
15d60 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 63 61  zErrMsg, db, "ca
15d70 6e 6e 6f 74 20 63 6f 6d 6d 69 74 20 74 72 61 6e  nnot commit tran
15d80 73 61 63 74 69 6f 6e 20 2d 20 22 0a 20 20 20 20  saction - ".    
15d90 20 20 20 20 22 53 51 4c 20 73 74 61 74 65 6d 65      "SQL stateme
15da0 6e 74 73 20 69 6e 20 70 72 6f 67 72 65 73 73 22  nts in progress"
15db0 29 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49  );.    rc = SQLI
15dc0 54 45 5f 42 55 53 59 3b 0a 20 20 7d 65 6c 73 65  TE_BUSY;.  }else
15dd0 20 69 66 28 20 64 65 73 69 72 65 64 41 75 74 6f   if( desiredAuto
15de0 43 6f 6d 6d 69 74 21 3d 64 62 2d 3e 61 75 74 6f  Commit!=db->auto
15df0 43 6f 6d 6d 69 74 20 29 7b 0a 20 20 20 20 69 66  Commit ){.    if
15e00 28 20 69 52 6f 6c 6c 62 61 63 6b 20 29 7b 0a 20  ( iRollback ){. 
15e10 20 20 20 20 20 61 73 73 65 72 74 28 20 64 65 73       assert( des
15e20 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d  iredAutoCommit==
15e30 31 20 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  1 );.      sqlit
15e40 65 33 52 6f 6c 6c 62 61 63 6b 41 6c 6c 28 64 62  e3RollbackAll(db
15e50 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 61 75 74  );.      db->aut
15e60 6f 43 6f 6d 6d 69 74 20 3d 20 31 3b 0a 20 20 20  oCommit = 1;.   
15e70 20 7d 65 6c 73 65 20 69 66 28 20 28 72 63 20 3d   }else if( (rc =
15e80 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 65 63   sqlite3VdbeChec
15e90 6b 46 6b 28 70 2c 20 31 29 29 21 3d 53 51 4c 49  kFk(p, 1))!=SQLI
15ea0 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67  TE_OK ){.      g
15eb0 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b  oto vdbe_return;
15ec0 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
15ed0 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74    db->autoCommit
15ee0 20 3d 20 28 75 38 29 64 65 73 69 72 65 64 41 75   = (u8)desiredAu
15ef0 74 6f 43 6f 6d 6d 69 74 3b 0a 20 20 20 20 20 20  toCommit;.      
15f00 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 48  if( sqlite3VdbeH
15f10 61 6c 74 28 70 29 3d 3d 53 51 4c 49 54 45 5f 42  alt(p)==SQLITE_B
15f20 55 53 59 20 29 7b 0a 20 20 20 20 20 20 20 20 70  USY ){.        p
15f30 2d 3e 70 63 20 3d 20 70 63 3b 0a 20 20 20 20 20  ->pc = pc;.     
15f40 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69     db->autoCommi
15f50 74 20 3d 20 28 75 38 29 28 31 2d 64 65 73 69 72  t = (u8)(1-desir
15f60 65 64 41 75 74 6f 43 6f 6d 6d 69 74 29 3b 0a 20  edAutoCommit);. 
15f70 20 20 20 20 20 20 20 70 2d 3e 72 63 20 3d 20 72         p->rc = r
15f80 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b  c = SQLITE_BUSY;
15f90 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 76 64  .        goto vd
15fa0 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 20  be_return;.     
15fb0 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 61 73 73   }.    }.    ass
15fc0 65 72 74 28 20 64 62 2d 3e 6e 53 74 61 74 65 6d  ert( db->nStatem
15fd0 65 6e 74 3d 3d 30 20 29 3b 0a 20 20 20 20 73 71  ent==0 );.    sq
15fe0 6c 69 74 65 33 43 6c 6f 73 65 53 61 76 65 70 6f  lite3CloseSavepo
15ff0 69 6e 74 73 28 64 62 29 3b 0a 20 20 20 20 69 66  ints(db);.    if
16000 28 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f  ( p->rc==SQLITE_
16010 4f 4b 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d  OK ){.      rc =
16020 20 53 51 4c 49 54 45 5f 44 4f 4e 45 3b 0a 20 20   SQLITE_DONE;.  
16030 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72    }else{.      r
16040 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  c = SQLITE_ERROR
16050 3b 0a 20 20 20 20 7d 0a 20 20 20 20 67 6f 74 6f  ;.    }.    goto
16060 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20   vdbe_return;.  
16070 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74  }else{.    sqlit
16080 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e  e3SetString(&p->
16090 7a 45 72 72 4d 73 67 2c 20 64 62 2c 0a 20 20 20  zErrMsg, db,.   
160a0 20 20 20 20 20 28 21 64 65 73 69 72 65 64 41 75       (!desiredAu
160b0 74 6f 43 6f 6d 6d 69 74 29 3f 22 63 61 6e 6e 6f  toCommit)?"canno
160c0 74 20 73 74 61 72 74 20 61 20 74 72 61 6e 73 61  t start a transa
160d0 63 74 69 6f 6e 20 77 69 74 68 69 6e 20 61 20 74  ction within a t
160e0 72 61 6e 73 61 63 74 69 6f 6e 22 3a 28 0a 20 20  ransaction":(.  
160f0 20 20 20 20 20 20 28 69 52 6f 6c 6c 62 61 63 6b        (iRollback
16100 29 3f 22 63 61 6e 6e 6f 74 20 72 6f 6c 6c 62 61  )?"cannot rollba
16110 63 6b 20 2d 20 6e 6f 20 74 72 61 6e 73 61 63 74  ck - no transact
16120 69 6f 6e 20 69 73 20 61 63 74 69 76 65 22 3a 0a  ion is active":.
16130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16140 20 20 20 22 63 61 6e 6e 6f 74 20 63 6f 6d 6d 69     "cannot commi
16150 74 20 2d 20 6e 6f 20 74 72 61 6e 73 61 63 74 69  t - no transacti
16160 6f 6e 20 69 73 20 61 63 74 69 76 65 22 29 29 3b  on is active"));
16170 0a 20 20 20 20 20 20 20 20 20 0a 20 20 20 20 72  .         .    r
16180 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  c = SQLITE_ERROR
16190 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
161a0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 72 61  ../* Opcode: Tra
161b0 6e 73 61 63 74 69 6f 6e 20 50 31 20 50 32 20 2a  nsaction P1 P2 *
161c0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 42 65 67 69 6e   * *.**.** Begin
161d0 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20   a transaction. 
161e0 20 54 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e   The transaction
161f0 20 65 6e 64 73 20 77 68 65 6e 20 61 20 43 6f 6d   ends when a Com
16200 6d 69 74 20 6f 72 20 52 6f 6c 6c 62 61 63 6b 0a  mit or Rollback.
16210 2a 2a 20 6f 70 63 6f 64 65 20 69 73 20 65 6e 63  ** opcode is enc
16220 6f 75 6e 74 65 72 65 64 2e 20 20 44 65 70 65 6e  ountered.  Depen
16230 64 69 6e 67 20 6f 6e 20 74 68 65 20 4f 4e 20 43  ding on the ON C
16240 4f 4e 46 4c 49 43 54 20 73 65 74 74 69 6e 67 2c  ONFLICT setting,
16250 20 74 68 65 0a 2a 2a 20 74 72 61 6e 73 61 63 74   the.** transact
16260 69 6f 6e 20 6d 69 67 68 74 20 61 6c 73 6f 20 62  ion might also b
16270 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 20 69 66  e rolled back if
16280 20 61 6e 20 65 72 72 6f 72 20 69 73 20 65 6e 63   an error is enc
16290 6f 75 6e 74 65 72 65 64 2e 0a 2a 2a 0a 2a 2a 20  ountered..**.** 
162a0 50 31 20 69 73 20 74 68 65 20 69 6e 64 65 78 20  P1 is the index 
162b0 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  of the database 
162c0 66 69 6c 65 20 6f 6e 20 77 68 69 63 68 20 74 68  file on which th
162d0 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  e transaction is
162e0 0a 2a 2a 20 73 74 61 72 74 65 64 2e 20 20 49 6e  .** started.  In
162f0 64 65 78 20 30 20 69 73 20 74 68 65 20 6d 61 69  dex 0 is the mai
16300 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  n database file 
16310 61 6e 64 20 69 6e 64 65 78 20 31 20 69 73 20 74  and index 1 is t
16320 68 65 0a 2a 2a 20 66 69 6c 65 20 75 73 65 64 20  he.** file used 
16330 66 6f 72 20 74 65 6d 70 6f 72 61 72 79 20 74 61  for temporary ta
16340 62 6c 65 73 2e 20 20 49 6e 64 69 63 65 73 20 6f  bles.  Indices o
16350 66 20 32 20 6f 72 20 6d 6f 72 65 20 61 72 65 20  f 2 or more are 
16360 75 73 65 64 20 66 6f 72 0a 2a 2a 20 61 74 74 61  used for.** atta
16370 63 68 65 64 20 64 61 74 61 62 61 73 65 73 2e 0a  ched databases..
16380 2a 2a 0a 2a 2a 20 49 66 20 50 32 20 69 73 20 6e  **.** If P2 is n
16390 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 61 20  on-zero, then a 
163a0 77 72 69 74 65 2d 74 72 61 6e 73 61 63 74 69 6f  write-transactio
163b0 6e 20 69 73 20 73 74 61 72 74 65 64 2e 20 20 41  n is started.  A
163c0 20 52 45 53 45 52 56 45 44 20 6c 6f 63 6b 20 69   RESERVED lock i
163d0 73 0a 2a 2a 20 6f 62 74 61 69 6e 65 64 20 6f 6e  s.** obtained on
163e0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
163f0 6c 65 20 77 68 65 6e 20 61 20 77 72 69 74 65 2d  le when a write-
16400 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 73  transaction is s
16410 74 61 72 74 65 64 2e 20 20 4e 6f 0a 2a 2a 20 6f  tarted.  No.** o
16420 74 68 65 72 20 70 72 6f 63 65 73 73 20 63 61 6e  ther process can
16430 20 73 74 61 72 74 20 61 6e 6f 74 68 65 72 20 77   start another w
16440 72 69 74 65 20 74 72 61 6e 73 61 63 74 69 6f 6e  rite transaction
16450 20 77 68 69 6c 65 20 74 68 69 73 20 74 72 61 6e   while this tran
16460 73 61 63 74 69 6f 6e 20 69 73 0a 2a 2a 20 75 6e  saction is.** un
16470 64 65 72 77 61 79 2e 20 20 53 74 61 72 74 69 6e  derway.  Startin
16480 67 20 61 20 77 72 69 74 65 20 74 72 61 6e 73 61  g a write transa
16490 63 74 69 6f 6e 20 61 6c 73 6f 20 63 72 65 61 74  ction also creat
164a0 65 73 20 61 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f  es a rollback jo
164b0 75 72 6e 61 6c 2e 20 41 0a 2a 2a 20 77 72 69 74  urnal. A.** writ
164c0 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 75  e transaction mu
164d0 73 74 20 62 65 20 73 74 61 72 74 65 64 20 62 65  st be started be
164e0 66 6f 72 65 20 61 6e 79 20 63 68 61 6e 67 65 73  fore any changes
164f0 20 63 61 6e 20 62 65 20 6d 61 64 65 20 74 6f 20   can be made to 
16500 74 68 65 0a 2a 2a 20 64 61 74 61 62 61 73 65 2e  the.** database.
16510 20 20 49 66 20 50 32 20 69 73 20 32 20 6f 72 20    If P2 is 2 or 
16520 67 72 65 61 74 65 72 20 74 68 65 6e 20 61 6e 20  greater then an 
16530 45 58 43 4c 55 53 49 56 45 20 6c 6f 63 6b 20 69  EXCLUSIVE lock i
16540 73 20 61 6c 73 6f 20 6f 62 74 61 69 6e 65 64 0a  s also obtained.
16550 2a 2a 20 6f 6e 20 74 68 65 20 66 69 6c 65 2e 0a  ** on the file..
16560 2a 2a 0a 2a 2a 20 49 66 20 61 20 77 72 69 74 65  **.** If a write
16570 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20  -transaction is 
16580 73 74 61 72 74 65 64 20 61 6e 64 20 74 68 65 20  started and the 
16590 56 64 62 65 2e 75 73 65 73 53 74 6d 74 4a 6f 75  Vdbe.usesStmtJou
165a0 72 6e 61 6c 20 66 6c 61 67 20 69 73 0a 2a 2a 20  rnal flag is.** 
165b0 74 72 75 65 20 28 74 68 69 73 20 66 6c 61 67 20  true (this flag 
165c0 69 73 20 73 65 74 20 69 66 20 74 68 65 20 56 64  is set if the Vd
165d0 62 65 20 6d 61 79 20 6d 6f 64 69 66 79 20 6d 6f  be may modify mo
165e0 72 65 20 74 68 61 6e 20 6f 6e 65 20 72 6f 77 20  re than one row 
165f0 61 6e 64 20 6d 61 79 0a 2a 2a 20 74 68 72 6f 77  and may.** throw
16600 20 61 6e 20 41 42 4f 52 54 20 65 78 63 65 70 74   an ABORT except
16610 69 6f 6e 29 2c 20 61 20 73 74 61 74 65 6d 65 6e  ion), a statemen
16620 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 61  t transaction ma
16630 79 20 61 6c 73 6f 20 62 65 20 6f 70 65 6e 65 64  y also be opened
16640 2e 0a 2a 2a 20 4d 6f 72 65 20 73 70 65 63 69 66  ..** More specif
16650 69 63 61 6c 6c 79 2c 20 61 20 73 74 61 74 65 6d  ically, a statem
16660 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ent transaction 
16670 69 73 20 6f 70 65 6e 65 64 20 69 66 66 20 74 68  is opened iff th
16680 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 63 6f  e database.** co
16690 6e 6e 65 63 74 69 6f 6e 20 69 73 20 63 75 72 72  nnection is curr
166a0 65 6e 74 6c 79 20 6e 6f 74 20 69 6e 20 61 75 74  ently not in aut
166b0 6f 63 6f 6d 6d 69 74 20 6d 6f 64 65 2c 20 6f 72  ocommit mode, or
166c0 20 69 66 20 74 68 65 72 65 20 61 72 65 20 6f 74   if there are ot
166d0 68 65 72 0a 2a 2a 20 61 63 74 69 76 65 20 73 74  her.** active st
166e0 61 74 65 6d 65 6e 74 73 2e 20 41 20 73 74 61 74  atements. A stat
166f0 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  ement transactio
16700 6e 20 61 6c 6c 6f 77 73 20 74 68 65 20 61 66 66  n allows the aff
16710 65 63 74 73 20 6f 66 20 74 68 69 73 0a 2a 2a 20  ects of this.** 
16720 56 44 42 45 20 74 6f 20 62 65 20 72 6f 6c 6c 65  VDBE to be rolle
16730 64 20 62 61 63 6b 20 61 66 74 65 72 20 61 6e 20  d back after an 
16740 65 72 72 6f 72 20 77 69 74 68 6f 75 74 20 68 61  error without ha
16750 76 69 6e 67 20 74 6f 20 72 6f 6c 6c 20 62 61 63  ving to roll bac
16760 6b 20 74 68 65 0a 2a 2a 20 65 6e 74 69 72 65 20  k the.** entire 
16770 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 49 66 20  transaction. If 
16780 6e 6f 20 65 72 72 6f 72 20 69 73 20 65 6e 63 6f  no error is enco
16790 75 6e 74 65 72 65 64 2c 20 74 68 65 20 73 74 61  untered, the sta
167a0 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69  tement transacti
167b0 6f 6e 0a 2a 2a 20 77 69 6c 6c 20 61 75 74 6f 6d  on.** will autom
167c0 61 74 69 63 61 6c 6c 79 20 63 6f 6d 6d 69 74 20  atically commit 
167d0 77 68 65 6e 20 74 68 65 20 56 44 42 45 20 68 61  when the VDBE ha
167e0 6c 74 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 32  lts..**.** If P2
167f0 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 6e 20 61   is zero, then a
16800 20 72 65 61 64 2d 6c 6f 63 6b 20 69 73 20 6f 62   read-lock is ob
16810 74 61 69 6e 65 64 20 6f 6e 20 74 68 65 20 64 61  tained on the da
16820 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2f 0a  tabase file..*/.
16830 63 61 73 65 20 4f 50 5f 54 72 61 6e 73 61 63 74  case OP_Transact
16840 69 6f 6e 3a 20 7b 0a 20 20 42 74 72 65 65 20 2a  ion: {.  Btree *
16850 70 42 74 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  pBt;..  assert( 
16860 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
16870 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b  p->p1<db->nDb );
16880 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62  .  assert( (p->b
16890 74 72 65 65 4d 61 73 6b 20 26 20 28 28 28 79 44  treeMask & (((yD
168a0 62 4d 61 73 6b 29 31 29 3c 3c 70 4f 70 2d 3e 70  bMask)1)<<pOp->p
168b0 31 29 29 21 3d 30 20 29 3b 0a 20 20 70 42 74 20  1))!=0 );.  pBt 
168c0 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70  = db->aDb[pOp->p
168d0 31 5d 2e 70 42 74 3b 0a 0a 20 20 69 66 28 20 70  1].pBt;..  if( p
168e0 42 74 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73  Bt ){.    rc = s
168f0 71 6c 69 74 65 33 42 74 72 65 65 42 65 67 69 6e  qlite3BtreeBegin
16900 54 72 61 6e 73 28 70 42 74 2c 20 70 4f 70 2d 3e  Trans(pBt, pOp->
16910 70 32 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d  p2);.    if( rc=
16920 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a  =SQLITE_BUSY ){.
16930 20 20 20 20 20 20 70 2d 3e 70 63 20 3d 20 70 63        p->pc = pc
16940 3b 0a 20 20 20 20 20 20 70 2d 3e 72 63 20 3d 20  ;.      p->rc = 
16950 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59  rc = SQLITE_BUSY
16960 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62  ;.      goto vdb
16970 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 7d 0a  e_return;.    }.
16980 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
16990 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67  TE_OK ){.      g
169a0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
169b0 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 0a 20  _error;.    }.. 
169c0 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 20 26     if( pOp->p2 &
169d0 26 20 70 2d 3e 75 73 65 73 53 74 6d 74 4a 6f 75  & p->usesStmtJou
169e0 72 6e 61 6c 20 0a 20 20 20 20 20 26 26 20 28 64  rnal .     && (d
169f0 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30  b->autoCommit==0
16a00 20 7c 7c 20 64 62 2d 3e 61 63 74 69 76 65 56 64   || db->activeVd
16a10 62 65 43 6e 74 3e 31 29 20 0a 20 20 20 20 29 7b  beCnt>1) .    ){
16a20 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73  .      assert( s
16a30 71 6c 69 74 65 33 42 74 72 65 65 49 73 49 6e 54  qlite3BtreeIsInT
16a40 72 61 6e 73 28 70 42 74 29 20 29 3b 0a 20 20 20  rans(pBt) );.   
16a50 20 20 20 69 66 28 20 70 2d 3e 69 53 74 61 74 65     if( p->iState
16a60 6d 65 6e 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20  ment==0 ){.     
16a70 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 6e     assert( db->n
16a80 53 74 61 74 65 6d 65 6e 74 3e 3d 30 20 26 26 20  Statement>=0 && 
16a90 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 3e 3d  db->nSavepoint>=
16aa0 30 20 29 3b 0a 20 20 20 20 20 20 20 20 64 62 2d  0 );.        db-
16ab0 3e 6e 53 74 61 74 65 6d 65 6e 74 2b 2b 3b 20 0a  >nStatement++; .
16ac0 20 20 20 20 20 20 20 20 70 2d 3e 69 53 74 61 74          p->iStat
16ad0 65 6d 65 6e 74 20 3d 20 64 62 2d 3e 6e 53 61 76  ement = db->nSav
16ae0 65 70 6f 69 6e 74 20 2b 20 64 62 2d 3e 6e 53 74  epoint + db->nSt
16af0 61 74 65 6d 65 6e 74 3b 0a 20 20 20 20 20 20 7d  atement;.      }
16b00 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69  .      rc = sqli
16b10 74 65 33 42 74 72 65 65 42 65 67 69 6e 53 74 6d  te3BtreeBeginStm
16b20 74 28 70 42 74 2c 20 70 2d 3e 69 53 74 61 74 65  t(pBt, p->iState
16b30 6d 65 6e 74 29 3b 0a 0a 20 20 20 20 20 20 2f 2a  ment);..      /*
16b40 20 53 74 6f 72 65 20 74 68 65 20 63 75 72 72 65   Store the curre
16b50 6e 74 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  nt value of the 
16b60 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 73  database handles
16b70 20 64 65 66 65 72 72 65 64 20 63 6f 6e 73 74 72   deferred constr
16b80 61 69 6e 74 0a 20 20 20 20 20 20 2a 2a 20 63 6f  aint.      ** co
16b90 75 6e 74 65 72 2e 20 49 66 20 74 68 65 20 73 74  unter. If the st
16ba0 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74  atement transact
16bb0 69 6f 6e 20 6e 65 65 64 73 20 74 6f 20 62 65 20  ion needs to be 
16bc0 72 6f 6c 6c 65 64 20 62 61 63 6b 2c 0a 20 20 20  rolled back,.   
16bd0 20 20 20 2a 2a 20 74 68 65 20 76 61 6c 75 65 20     ** the value 
16be0 6f 66 20 74 68 69 73 20 63 6f 75 6e 74 65 72 20  of this counter 
16bf0 6e 65 65 64 73 20 74 6f 20 62 65 20 72 65 73 74  needs to be rest
16c00 6f 72 65 64 20 74 6f 6f 2e 20 20 2a 2f 0a 20 20  ored too.  */.  
16c10 20 20 20 20 70 2d 3e 6e 53 74 6d 74 44 65 66 43      p->nStmtDefC
16c20 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72  ons = db->nDefer
16c30 72 65 64 43 6f 6e 73 3b 0a 20 20 20 20 7d 0a 20  redCons;.    }. 
16c40 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
16c50 2a 20 4f 70 63 6f 64 65 3a 20 52 65 61 64 43 6f  * Opcode: ReadCo
16c60 6f 6b 69 65 20 50 31 20 50 32 20 50 33 20 2a 20  okie P1 P2 P3 * 
16c70 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 63 6f 6f  *.**.** Read coo
16c80 6b 69 65 20 6e 75 6d 62 65 72 20 50 33 20 66 72  kie number P3 fr
16c90 6f 6d 20 64 61 74 61 62 61 73 65 20 50 31 20 61  om database P1 a
16ca0 6e 64 20 77 72 69 74 65 20 69 74 20 69 6e 74 6f  nd write it into
16cb0 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a   register P2..**
16cc0 20 50 33 3d 3d 31 20 69 73 20 74 68 65 20 73 63   P3==1 is the sc
16cd0 68 65 6d 61 20 76 65 72 73 69 6f 6e 2e 20 20 50  hema version.  P
16ce0 33 3d 3d 32 20 69 73 20 74 68 65 20 64 61 74 61  3==2 is the data
16cf0 62 61 73 65 20 66 6f 72 6d 61 74 2e 0a 2a 2a 20  base format..** 
16d00 50 33 3d 3d 33 20 69 73 20 74 68 65 20 72 65 63  P3==3 is the rec
16d10 6f 6d 6d 65 6e 64 65 64 20 70 61 67 65 72 20 63  ommended pager c
16d20 61 63 68 65 20 73 69 7a 65 2c 20 61 6e 64 20 73  ache size, and s
16d30 6f 20 66 6f 72 74 68 2e 20 20 50 31 3d 3d 30 20  o forth.  P1==0 
16d40 69 73 0a 2a 2a 20 74 68 65 20 6d 61 69 6e 20 64  is.** the main d
16d50 61 74 61 62 61 73 65 20 66 69 6c 65 20 61 6e 64  atabase file and
16d60 20 50 31 3d 3d 31 20 69 73 20 74 68 65 20 64 61   P1==1 is the da
16d70 74 61 62 61 73 65 20 66 69 6c 65 20 75 73 65 64  tabase file used
16d80 20 74 6f 20 73 74 6f 72 65 0a 2a 2a 20 74 65 6d   to store.** tem
16d90 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 0a 2a  porary tables..*
16da0 2a 0a 2a 2a 20 54 68 65 72 65 20 6d 75 73 74 20  *.** There must 
16db0 62 65 20 61 20 72 65 61 64 2d 6c 6f 63 6b 20 6f  be a read-lock o
16dc0 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 28  n the database (
16dd0 65 69 74 68 65 72 20 61 20 74 72 61 6e 73 61 63  either a transac
16de0 74 69 6f 6e 0a 2a 2a 20 6d 75 73 74 20 62 65 20  tion.** must be 
16df0 73 74 61 72 74 65 64 20 6f 72 20 74 68 65 72 65  started or there
16e00 20 6d 75 73 74 20 62 65 20 61 6e 20 6f 70 65 6e   must be an open
16e10 20 63 75 72 73 6f 72 29 20 62 65 66 6f 72 65 0a   cursor) before.
16e20 2a 2a 20 65 78 65 63 75 74 69 6e 67 20 74 68 69  ** executing thi
16e30 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  s instruction..*
16e40 2f 0a 63 61 73 65 20 4f 50 5f 52 65 61 64 43 6f  /.case OP_ReadCo
16e50 6f 6b 69 65 3a 20 7b 20 20 20 20 20 20 20 20 20  okie: {         
16e60 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72        /* out2-pr
16e70 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69 6e  erelease */.  in
16e80 74 20 69 4d 65 74 61 3b 0a 20 20 69 6e 74 20 69  t iMeta;.  int i
16e90 44 62 3b 0a 20 20 69 6e 74 20 69 43 6f 6f 6b 69  Db;.  int iCooki
16ea0 65 3b 0a 0a 20 20 69 44 62 20 3d 20 70 4f 70 2d  e;..  iDb = pOp-
16eb0 3e 70 31 3b 0a 20 20 69 43 6f 6f 6b 69 65 20 3d  >p1;.  iCookie =
16ec0 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65   pOp->p3;.  asse
16ed0 72 74 28 20 70 4f 70 2d 3e 70 33 3c 53 51 4c 49  rt( pOp->p3<SQLI
16ee0 54 45 5f 4e 5f 42 54 52 45 45 5f 4d 45 54 41 20  TE_N_BTREE_META 
16ef0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69 44 62  );.  assert( iDb
16f00 3e 3d 30 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e  >=0 && iDb<db->n
16f10 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  Db );.  assert( 
16f20 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74  db->aDb[iDb].pBt
16f30 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
16f40 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26   (p->btreeMask &
16f50 20 28 28 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c   (((yDbMask)1)<<
16f60 69 44 62 29 29 21 3d 30 20 29 3b 0a 0a 20 20 73  iDb))!=0 );..  s
16f70 71 6c 69 74 65 33 42 74 72 65 65 47 65 74 4d 65  qlite3BtreeGetMe
16f80 74 61 28 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e  ta(db->aDb[iDb].
16f90 70 42 74 2c 20 69 43 6f 6f 6b 69 65 2c 20 28 75  pBt, iCookie, (u
16fa0 33 32 20 2a 29 26 69 4d 65 74 61 29 3b 0a 20 20  32 *)&iMeta);.  
16fb0 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 4d 65 74  pOut->u.i = iMet
16fc0 61 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  a;.  break;.}../
16fd0 2a 20 4f 70 63 6f 64 65 3a 20 53 65 74 43 6f 6f  * Opcode: SetCoo
16fe0 6b 69 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a  kie P1 P2 P3 * *
16ff0 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 74 68 65  .**.** Write the
17000 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69   content of regi
17010 73 74 65 72 20 50 33 20 28 69 6e 74 65 72 70 72  ster P3 (interpr
17020 65 74 65 64 20 61 73 20 61 6e 20 69 6e 74 65 67  eted as an integ
17030 65 72 29 0a 2a 2a 20 69 6e 74 6f 20 63 6f 6f 6b  er).** into cook
17040 69 65 20 6e 75 6d 62 65 72 20 50 32 20 6f 66 20  ie number P2 of 
17050 64 61 74 61 62 61 73 65 20 50 31 2e 20 20 50 32  database P1.  P2
17060 3d 3d 31 20 69 73 20 74 68 65 20 73 63 68 65 6d  ==1 is the schem
17070 61 20 76 65 72 73 69 6f 6e 2e 20 20 0a 2a 2a 20  a version.  .** 
17080 50 32 3d 3d 32 20 69 73 20 74 68 65 20 64 61 74  P2==2 is the dat
17090 61 62 61 73 65 20 66 6f 72 6d 61 74 2e 20 50 32  abase format. P2
170a0 3d 3d 33 20 69 73 20 74 68 65 20 72 65 63 6f 6d  ==3 is the recom
170b0 6d 65 6e 64 65 64 20 70 61 67 65 72 20 63 61 63  mended pager cac
170c0 68 65 20 0a 2a 2a 20 73 69 7a 65 2c 20 61 6e 64  he .** size, and
170d0 20 73 6f 20 66 6f 72 74 68 2e 20 20 50 31 3d 3d   so forth.  P1==
170e0 30 20 69 73 20 74 68 65 20 6d 61 69 6e 20 64 61  0 is the main da
170f0 74 61 62 61 73 65 20 66 69 6c 65 20 61 6e 64 20  tabase file and 
17100 50 31 3d 3d 31 20 69 73 20 74 68 65 20 0a 2a 2a  P1==1 is the .**
17110 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 75   database file u
17120 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 65 6d  sed to store tem
17130 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 0a 2a  porary tables..*
17140 2a 0a 2a 2a 20 41 20 74 72 61 6e 73 61 63 74 69  *.** A transacti
17150 6f 6e 20 6d 75 73 74 20 62 65 20 73 74 61 72 74  on must be start
17160 65 64 20 62 65 66 6f 72 65 20 65 78 65 63 75 74  ed before execut
17170 69 6e 67 20 74 68 69 73 20 6f 70 63 6f 64 65 2e  ing this opcode.
17180 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 74 43  .*/.case OP_SetC
17190 6f 6f 6b 69 65 3a 20 7b 20 20 20 20 20 20 20 2f  ookie: {       /
171a0 2a 20 69 6e 33 20 2a 2f 0a 20 20 44 62 20 2a 70  * in3 */.  Db *p
171b0 44 62 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  Db;.  assert( pO
171c0 70 2d 3e 70 32 3c 53 51 4c 49 54 45 5f 4e 5f 42  p->p2<SQLITE_N_B
171d0 54 52 45 45 5f 4d 45 54 41 20 29 3b 0a 20 20 61  TREE_META );.  a
171e0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
171f0 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d  0 && pOp->p1<db-
17200 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74  >nDb );.  assert
17210 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20  ( (p->btreeMask 
17220 26 20 28 28 28 79 44 62 4d 61 73 6b 29 31 29 3c  & (((yDbMask)1)<
17230 3c 70 4f 70 2d 3e 70 31 29 29 21 3d 30 20 29 3b  <pOp->p1))!=0 );
17240 0a 20 20 70 44 62 20 3d 20 26 64 62 2d 3e 61 44  .  pDb = &db->aD
17250 62 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  b[pOp->p1];.  as
17260 73 65 72 74 28 20 70 44 62 2d 3e 70 42 74 21 3d  sert( pDb->pBt!=
17270 30 20 29 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61  0 );.  pIn3 = &a
17280 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
17290 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e  sqlite3VdbeMemIn
172a0 74 65 67 65 72 69 66 79 28 70 49 6e 33 29 3b 0a  tegerify(pIn3);.
172b0 20 20 2f 2a 20 53 65 65 20 6e 6f 74 65 20 61 62    /* See note ab
172c0 6f 75 74 20 69 6e 64 65 78 20 73 68 69 66 74 69  out index shifti
172d0 6e 67 20 6f 6e 20 4f 50 5f 52 65 61 64 43 6f 6f  ng on OP_ReadCoo
172e0 6b 69 65 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71  kie */.  rc = sq
172f0 6c 69 74 65 33 42 74 72 65 65 55 70 64 61 74 65  lite3BtreeUpdate
17300 4d 65 74 61 28 70 44 62 2d 3e 70 42 74 2c 20 70  Meta(pDb->pBt, p
17310 4f 70 2d 3e 70 32 2c 20 28 69 6e 74 29 70 49 6e  Op->p2, (int)pIn
17320 33 2d 3e 75 2e 69 29 3b 0a 20 20 69 66 28 20 70  3->u.i);.  if( p
17330 4f 70 2d 3e 70 32 3d 3d 42 54 52 45 45 5f 53 43  Op->p2==BTREE_SC
17340 48 45 4d 41 5f 56 45 52 53 49 4f 4e 20 29 7b 0a  HEMA_VERSION ){.
17350 20 20 20 20 2f 2a 20 57 68 65 6e 20 74 68 65 20      /* When the 
17360 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20 63 68  schema cookie ch
17370 61 6e 67 65 73 2c 20 72 65 63 6f 72 64 20 74 68  anges, record th
17380 65 20 6e 65 77 20 63 6f 6f 6b 69 65 20 69 6e 74  e new cookie int
17390 65 72 6e 61 6c 6c 79 20 2a 2f 0a 20 20 20 20 70  ernally */.    p
173a0 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 73 63 68  Db->pSchema->sch
173b0 65 6d 61 5f 63 6f 6f 6b 69 65 20 3d 20 28 69 6e  ema_cookie = (in
173c0 74 29 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20 20  t)pIn3->u.i;.   
173d0 20 64 62 2d 3e 66 6c 61 67 73 20 7c 3d 20 53 51   db->flags |= SQ
173e0 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68 61 6e 67  LITE_InternChang
173f0 65 73 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  es;.  }else if( 
17400 70 4f 70 2d 3e 70 32 3d 3d 42 54 52 45 45 5f 46  pOp->p2==BTREE_F
17410 49 4c 45 5f 46 4f 52 4d 41 54 20 29 7b 0a 20 20  ILE_FORMAT ){.  
17420 20 20 2f 2a 20 52 65 63 6f 72 64 20 63 68 61 6e    /* Record chan
17430 67 65 73 20 69 6e 20 74 68 65 20 66 69 6c 65 20  ges in the file 
17440 66 6f 72 6d 61 74 20 2a 2f 0a 20 20 20 20 70 44  format */.    pD
17450 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 66 69 6c 65  b->pSchema->file
17460 5f 66 6f 72 6d 61 74 20 3d 20 28 75 38 29 70 49  _format = (u8)pI
17470 6e 33 2d 3e 75 2e 69 3b 0a 20 20 7d 0a 20 20 69  n3->u.i;.  }.  i
17480 66 28 20 70 4f 70 2d 3e 70 31 3d 3d 31 20 29 7b  f( pOp->p1==1 ){
17490 0a 20 20 20 20 2f 2a 20 49 6e 76 61 6c 69 64 61  .    /* Invalida
174a0 74 65 20 61 6c 6c 20 70 72 65 70 61 72 65 64 20  te all prepared 
174b0 73 74 61 74 65 6d 65 6e 74 73 20 77 68 65 6e 65  statements whene
174c0 76 65 72 20 74 68 65 20 54 45 4d 50 20 64 61 74  ver the TEMP dat
174d0 61 62 61 73 65 0a 20 20 20 20 2a 2a 20 73 63 68  abase.    ** sch
174e0 65 6d 61 20 69 73 20 63 68 61 6e 67 65 64 2e 20  ema is changed. 
174f0 20 54 69 63 6b 65 74 20 23 31 36 34 34 20 2a 2f   Ticket #1644 */
17500 0a 20 20 20 20 73 71 6c 69 74 65 33 45 78 70 69  .    sqlite3Expi
17510 72 65 50 72 65 70 61 72 65 64 53 74 61 74 65 6d  rePreparedStatem
17520 65 6e 74 73 28 64 62 29 3b 0a 20 20 20 20 70 2d  ents(db);.    p-
17530 3e 65 78 70 69 72 65 64 20 3d 20 30 3b 0a 20 20  >expired = 0;.  
17540 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
17550 20 4f 70 63 6f 64 65 3a 20 56 65 72 69 66 79 43   Opcode: VerifyC
17560 6f 6f 6b 69 65 20 50 31 20 50 32 20 50 33 20 2a  ookie P1 P2 P3 *
17570 20 2a 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b 20 74   *.**.** Check t
17580 68 65 20 76 61 6c 75 65 20 6f 66 20 67 6c 6f 62  he value of glob
17590 61 6c 20 64 61 74 61 62 61 73 65 20 70 61 72 61  al database para
175a0 6d 65 74 65 72 20 6e 75 6d 62 65 72 20 30 20 28  meter number 0 (
175b0 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 76 65  the.** schema ve
175c0 72 73 69 6f 6e 29 20 61 6e 64 20 6d 61 6b 65 20  rsion) and make 
175d0 73 75 72 65 20 69 74 20 69 73 20 65 71 75 61 6c  sure it is equal
175e0 20 74 6f 20 50 32 20 61 6e 64 20 74 68 61 74 20   to P2 and that 
175f0 74 68 65 0a 2a 2a 20 67 65 6e 65 72 61 74 69 6f  the.** generatio
17600 6e 20 63 6f 75 6e 74 65 72 20 6f 6e 20 74 68 65  n counter on the
17610 20 6c 6f 63 61 6c 20 73 63 68 65 6d 61 20 70 61   local schema pa
17620 72 73 65 20 65 71 75 61 6c 73 20 50 33 2e 0a 2a  rse equals P3..*
17630 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68 65 20 64  *.** P1 is the d
17640 61 74 61 62 61 73 65 20 6e 75 6d 62 65 72 20 77  atabase number w
17650 68 69 63 68 20 69 73 20 30 20 66 6f 72 20 74 68  hich is 0 for th
17660 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
17670 66 69 6c 65 0a 2a 2a 20 61 6e 64 20 31 20 66 6f  file.** and 1 fo
17680 72 20 74 68 65 20 66 69 6c 65 20 68 6f 6c 64 69  r the file holdi
17690 6e 67 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62  ng temporary tab
176a0 6c 65 73 20 61 6e 64 20 73 6f 6d 65 20 68 69 67  les and some hig
176b0 68 65 72 20 6e 75 6d 62 65 72 0a 2a 2a 20 66 6f  her number.** fo
176c0 72 20 61 75 78 69 6c 69 61 72 79 20 64 61 74 61  r auxiliary data
176d0 62 61 73 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  bases..**.** The
176e0 20 63 6f 6f 6b 69 65 20 63 68 61 6e 67 65 73 20   cookie changes 
176f0 69 74 73 20 76 61 6c 75 65 20 77 68 65 6e 65 76  its value whenev
17700 65 72 20 74 68 65 20 64 61 74 61 62 61 73 65 20  er the database 
17710 73 63 68 65 6d 61 20 63 68 61 6e 67 65 73 2e 0a  schema changes..
17720 2a 2a 20 54 68 69 73 20 6f 70 65 72 61 74 69 6f  ** This operatio
17730 6e 20 69 73 20 75 73 65 64 20 74 6f 20 64 65 74  n is used to det
17740 65 63 74 20 77 68 65 6e 20 74 68 61 74 20 74 68  ect when that th
17750 65 20 63 6f 6f 6b 69 65 20 68 61 73 20 63 68 61  e cookie has cha
17760 6e 67 65 64 0a 2a 2a 20 61 6e 64 20 74 68 61 74  nged.** and that
17770 20 74 68 65 20 63 75 72 72 65 6e 74 20 70 72 6f   the current pro
17780 63 65 73 73 20 6e 65 65 64 73 20 74 6f 20 72 65  cess needs to re
17790 72 65 61 64 20 74 68 65 20 73 63 68 65 6d 61 2e  read the schema.
177a0 0a 2a 2a 0a 2a 2a 20 45 69 74 68 65 72 20 61 20  .**.** Either a 
177b0 74 72 61 6e 73 61 63 74 69 6f 6e 20 6e 65 65 64  transaction need
177c0 73 20 74 6f 20 68 61 76 65 20 62 65 65 6e 20 73  s to have been s
177d0 74 61 72 74 65 64 20 6f 72 20 61 6e 20 4f 50 5f  tarted or an OP_
177e0 4f 70 65 6e 20 6e 65 65 64 73 0a 2a 2a 20 74 6f  Open needs.** to
177f0 20 62 65 20 65 78 65 63 75 74 65 64 20 28 74 6f   be executed (to
17800 20 65 73 74 61 62 6c 69 73 68 20 61 20 72 65 61   establish a rea
17810 64 20 6c 6f 63 6b 29 20 62 65 66 6f 72 65 20 74  d lock) before t
17820 68 69 73 20 6f 70 63 6f 64 65 20 69 73 0a 2a 2a  his opcode is.**
17830 20 69 6e 76 6f 6b 65 64 2e 0a 2a 2f 0a 63 61 73   invoked..*/.cas
17840 65 20 4f 50 5f 56 65 72 69 66 79 43 6f 6f 6b 69  e OP_VerifyCooki
17850 65 3a 20 7b 0a 20 20 69 6e 74 20 69 4d 65 74 61  e: {.  int iMeta
17860 3b 0a 20 20 69 6e 74 20 69 47 65 6e 3b 0a 20 20  ;.  int iGen;.  
17870 42 74 72 65 65 20 2a 70 42 74 3b 0a 0a 20 20 61  Btree *pBt;..  a
17880 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
17890 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d  0 && pOp->p1<db-
178a0 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74  >nDb );.  assert
178b0 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20  ( (p->btreeMask 
178c0 26 20 28 28 28 79 44 62 4d 61 73 6b 29 31 29 3c  & (((yDbMask)1)<
178d0 3c 70 4f 70 2d 3e 70 31 29 29 21 3d 30 20 29 3b  <pOp->p1))!=0 );
178e0 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62  .  pBt = db->aDb
178f0 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20  [pOp->p1].pBt;. 
17900 20 69 66 28 20 70 42 74 20 29 7b 0a 20 20 20 20   if( pBt ){.    
17910 73 71 6c 69 74 65 33 42 74 72 65 65 47 65 74 4d  sqlite3BtreeGetM
17920 65 74 61 28 70 42 74 2c 20 42 54 52 45 45 5f 53  eta(pBt, BTREE_S
17930 43 48 45 4d 41 5f 56 45 52 53 49 4f 4e 2c 20 28  CHEMA_VERSION, (
17940 75 33 32 20 2a 29 26 69 4d 65 74 61 29 3b 0a 20  u32 *)&iMeta);. 
17950 20 20 20 69 47 65 6e 20 3d 20 64 62 2d 3e 61 44     iGen = db->aD
17960 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 53 63 68 65  b[pOp->p1].pSche
17970 6d 61 2d 3e 69 47 65 6e 65 72 61 74 69 6f 6e 3b  ma->iGeneration;
17980 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69 4d  .  }else{.    iM
17990 65 74 61 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 69  eta = 0;.  }.  i
179a0 66 28 20 69 4d 65 74 61 21 3d 70 4f 70 2d 3e 70  f( iMeta!=pOp->p
179b0 32 20 7c 7c 20 69 47 65 6e 21 3d 70 4f 70 2d 3e  2 || iGen!=pOp->
179c0 70 33 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  p3 ){.    sqlite
179d0 33 44 62 46 72 65 65 28 64 62 2c 20 70 2d 3e 7a  3DbFree(db, p->z
179e0 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 70 2d 3e  ErrMsg);.    p->
179f0 7a 45 72 72 4d 73 67 20 3d 20 73 71 6c 69 74 65  zErrMsg = sqlite
17a00 33 44 62 53 74 72 44 75 70 28 64 62 2c 20 22 64  3DbStrDup(db, "d
17a10 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 68  atabase schema h
17a20 61 73 20 63 68 61 6e 67 65 64 22 29 3b 0a 20 20  as changed");.  
17a30 20 20 2f 2a 20 49 66 20 74 68 65 20 73 63 68 65    /* If the sche
17a40 6d 61 2d 63 6f 6f 6b 69 65 20 66 72 6f 6d 20 74  ma-cookie from t
17a50 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
17a60 20 6d 61 74 63 68 65 73 20 74 68 65 20 63 6f 6f   matches the coo
17a70 6b 69 65 20 0a 20 20 20 20 2a 2a 20 73 74 6f 72  kie .    ** stor
17a80 65 64 20 77 69 74 68 20 74 68 65 20 69 6e 2d 6d  ed with the in-m
17a90 65 6d 6f 72 79 20 72 65 70 72 65 73 65 6e 74 61  emory representa
17aa0 74 69 6f 6e 20 6f 66 20 74 68 65 20 73 63 68 65  tion of the sche
17ab0 6d 61 2c 20 64 6f 0a 20 20 20 20 2a 2a 20 6e 6f  ma, do.    ** no
17ac0 74 20 72 65 6c 6f 61 64 20 74 68 65 20 73 63 68  t reload the sch
17ad0 65 6d 61 20 66 72 6f 6d 20 74 68 65 20 64 61 74  ema from the dat
17ae0 61 62 61 73 65 20 66 69 6c 65 2e 0a 20 20 20 20  abase file..    
17af0 2a 2a 0a 20 20 20 20 2a 2a 20 49 66 20 76 69 72  **.    ** If vir
17b00 74 75 61 6c 2d 74 61 62 6c 65 73 20 61 72 65 20  tual-tables are 
17b10 69 6e 20 75 73 65 2c 20 74 68 69 73 20 69 73 20  in use, this is 
17b20 6e 6f 74 20 6a 75 73 74 20 61 6e 20 6f 70 74 69  not just an opti
17b30 6d 69 7a 61 74 69 6f 6e 2e 0a 20 20 20 20 2a 2a  mization..    **
17b40 20 4f 66 74 65 6e 2c 20 76 2d 74 61 62 6c 65 73   Often, v-tables
17b50 20 73 74 6f 72 65 20 74 68 65 69 72 20 64 61 74   store their dat
17b60 61 20 69 6e 20 6f 74 68 65 72 20 53 51 4c 69 74  a in other SQLit
17b70 65 20 74 61 62 6c 65 73 2c 20 77 68 69 63 68 0a  e tables, which.
17b80 20 20 20 20 2a 2a 20 61 72 65 20 71 75 65 72 69      ** are queri
17b90 65 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 78  ed from within x
17ba0 4e 65 78 74 28 29 20 61 6e 64 20 6f 74 68 65 72  Next() and other
17bb0 20 76 2d 74 61 62 6c 65 20 6d 65 74 68 6f 64 73   v-table methods
17bc0 20 75 73 69 6e 67 0a 20 20 20 20 2a 2a 20 70 72   using.    ** pr
17bd0 65 70 61 72 65 64 20 71 75 65 72 69 65 73 2e 20  epared queries. 
17be0 49 66 20 73 75 63 68 20 61 20 71 75 65 72 79 20  If such a query 
17bf0 69 73 20 6f 75 74 2d 6f 66 2d 64 61 74 65 2c 20  is out-of-date, 
17c00 77 65 20 64 6f 20 6e 6f 74 20 77 61 6e 74 20 74  we do not want t
17c10 6f 0a 20 20 20 20 2a 2a 20 64 69 73 63 61 72 64  o.    ** discard
17c20 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63   the database sc
17c30 68 65 6d 61 2c 20 61 73 20 74 68 65 20 75 73 65  hema, as the use
17c40 72 20 63 6f 64 65 20 69 6d 70 6c 65 6d 65 6e 74  r code implement
17c50 69 6e 67 20 74 68 65 0a 20 20 20 20 2a 2a 20 76  ing the.    ** v
17c60 2d 74 61 62 6c 65 20 77 6f 75 6c 64 20 68 61 76  -table would hav
17c70 65 20 74 6f 20 62 65 20 72 65 61 64 79 20 66 6f  e to be ready fo
17c80 72 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74  r the sqlite3_vt
17c90 61 62 20 73 74 72 75 63 74 75 72 65 20 69 74 73  ab structure its
17ca0 65 6c 66 0a 20 20 20 20 2a 2a 20 74 6f 20 62 65  elf.    ** to be
17cb0 20 69 6e 76 61 6c 69 64 61 74 65 64 20 77 68 65   invalidated whe
17cc0 6e 65 76 65 72 20 73 71 6c 69 74 65 33 5f 73 74  never sqlite3_st
17cd0 65 70 28 29 20 69 73 20 63 61 6c 6c 65 64 20 66  ep() is called f
17ce0 72 6f 6d 20 77 69 74 68 69 6e 20 0a 20 20 20 20  rom within .    
17cf0 2a 2a 20 61 20 76 2d 74 61 62 6c 65 20 6d 65 74  ** a v-table met
17d00 68 6f 64 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  hod..    */.    
17d10 69 66 28 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d  if( db->aDb[pOp-
17d20 3e 70 31 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63  >p1].pSchema->sc
17d30 68 65 6d 61 5f 63 6f 6f 6b 69 65 21 3d 69 4d 65  hema_cookie!=iMe
17d40 74 61 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  ta ){.      sqli
17d50 74 65 33 52 65 73 65 74 49 6e 74 65 72 6e 61 6c  te3ResetInternal
17d60 53 63 68 65 6d 61 28 64 62 2c 20 70 4f 70 2d 3e  Schema(db, pOp->
17d70 70 31 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  p1);.      sqlit
17d80 65 33 56 64 62 65 4d 75 74 65 78 52 65 73 79 6e  e3VdbeMutexResyn
17d90 63 28 70 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20  c(p);.    }..   
17da0 20 70 2d 3e 65 78 70 69 72 65 64 20 3d 20 31 3b   p->expired = 1;
17db0 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45  .    rc = SQLITE
17dc0 5f 53 43 48 45 4d 41 3b 0a 20 20 7d 0a 20 20 62  _SCHEMA;.  }.  b
17dd0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
17de0 64 65 3a 20 4f 70 65 6e 52 65 61 64 20 50 31 20  de: OpenRead P1 
17df0 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a  P2 P3 P4 P5.**.*
17e00 2a 20 4f 70 65 6e 20 61 20 72 65 61 64 2d 6f 6e  * Open a read-on
17e10 6c 79 20 63 75 72 73 6f 72 20 66 6f 72 20 74 68  ly cursor for th
17e20 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65  e database table
17e30 20 77 68 6f 73 65 20 72 6f 6f 74 20 70 61 67 65   whose root page
17e40 20 69 73 0a 2a 2a 20 50 32 20 69 6e 20 61 20 64   is.** P2 in a d
17e50 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20 20 54  atabase file.  T
17e60 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
17e70 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62   is determined b
17e80 79 20 50 33 2e 20 0a 2a 2a 20 50 33 3d 3d 30 20  y P3. .** P3==0 
17e90 6d 65 61 6e 73 20 74 68 65 20 6d 61 69 6e 20 64  means the main d
17ea0 61 74 61 62 61 73 65 2c 20 50 33 3d 3d 31 20 6d  atabase, P3==1 m
17eb0 65 61 6e 73 20 74 68 65 20 64 61 74 61 62 61 73  eans the databas
17ec0 65 20 75 73 65 64 20 66 6f 72 20 0a 2a 2a 20 74  e used for .** t
17ed0 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2c  emporary tables,
17ee0 20 61 6e 64 20 50 33 3e 31 20 6d 65 61 6e 73 20   and P3>1 means 
17ef0 75 73 65 64 20 74 68 65 20 63 6f 72 72 65 73 70  used the corresp
17f00 6f 6e 64 69 6e 67 20 61 74 74 61 63 68 65 64 0a  onding attached.
17f10 2a 2a 20 64 61 74 61 62 61 73 65 2e 20 20 47 69  ** database.  Gi
17f20 76 65 20 74 68 65 20 6e 65 77 20 63 75 72 73 6f  ve the new curso
17f30 72 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72 20  r an identifier 
17f40 6f 66 20 50 31 2e 20 20 54 68 65 20 50 31 0a 2a  of P1.  The P1.*
17f50 2a 20 76 61 6c 75 65 73 20 6e 65 65 64 20 6e 6f  * values need no
17f60 74 20 62 65 20 63 6f 6e 74 69 67 75 6f 75 73 20  t be contiguous 
17f70 62 75 74 20 61 6c 6c 20 50 31 20 76 61 6c 75 65  but all P1 value
17f80 73 20 73 68 6f 75 6c 64 20 62 65 20 73 6d 61 6c  s should be smal
17f90 6c 20 69 6e 74 65 67 65 72 73 2e 0a 2a 2a 20 49  l integers..** I
17fa0 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20 66 6f  t is an error fo
17fb0 72 20 50 31 20 74 6f 20 62 65 20 6e 65 67 61 74  r P1 to be negat
17fc0 69 76 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35  ive..**.** If P5
17fd0 21 3d 30 20 74 68 65 6e 20 75 73 65 20 74 68 65  !=0 then use the
17fe0 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69   content of regi
17ff0 73 74 65 72 20 50 32 20 61 73 20 74 68 65 20 72  ster P2 as the r
18000 6f 6f 74 20 70 61 67 65 2c 20 6e 6f 74 0a 2a 2a  oot page, not.**
18010 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 50 32   the value of P2
18020 20 69 74 73 65 6c 66 2e 0a 2a 2a 0a 2a 2a 20 54   itself..**.** T
18030 68 65 72 65 20 77 69 6c 6c 20 62 65 20 61 20 72  here will be a r
18040 65 61 64 20 6c 6f 63 6b 20 6f 6e 20 74 68 65 20  ead lock on the 
18050 64 61 74 61 62 61 73 65 20 77 68 65 6e 65 76 65  database wheneve
18060 72 20 74 68 65 72 65 20 69 73 20 61 6e 0a 2a 2a  r there is an.**
18070 20 6f 70 65 6e 20 63 75 72 73 6f 72 2e 20 20 49   open cursor.  I
18080 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 77  f the database w
18090 61 73 20 75 6e 6c 6f 63 6b 65 64 20 70 72 69 6f  as unlocked prio
180a0 72 20 74 6f 20 74 68 69 73 20 69 6e 73 74 72 75  r to this instru
180b0 63 74 69 6f 6e 0a 2a 2a 20 74 68 65 6e 20 61 20  ction.** then a 
180c0 72 65 61 64 20 6c 6f 63 6b 20 69 73 20 61 63 71  read lock is acq
180d0 75 69 72 65 64 20 61 73 20 70 61 72 74 20 6f 66  uired as part of
180e0 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
180f0 6e 2e 20 20 41 20 72 65 61 64 0a 2a 2a 20 6c 6f  n.  A read.** lo
18100 63 6b 20 61 6c 6c 6f 77 73 20 6f 74 68 65 72 20  ck allows other 
18110 70 72 6f 63 65 73 73 65 73 20 74 6f 20 72 65 61  processes to rea
18120 64 20 74 68 65 20 64 61 74 61 62 61 73 65 20 62  d the database b
18130 75 74 20 70 72 6f 68 69 62 69 74 73 0a 2a 2a 20  ut prohibits.** 
18140 61 6e 79 20 6f 74 68 65 72 20 70 72 6f 63 65 73  any other proces
18150 73 20 66 72 6f 6d 20 6d 6f 64 69 66 79 69 6e 67  s from modifying
18160 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 20 20   the database.  
18170 54 68 65 20 72 65 61 64 20 6c 6f 63 6b 20 69 73  The read lock is
18180 0a 2a 2a 20 72 65 6c 65 61 73 65 64 20 77 68 65  .** released whe
18190 6e 20 61 6c 6c 20 63 75 72 73 6f 72 73 20 61 72  n all cursors ar
181a0 65 20 63 6c 6f 73 65 64 2e 20 20 49 66 20 74 68  e closed.  If th
181b0 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61  is instruction a
181c0 74 74 65 6d 70 74 73 0a 2a 2a 20 74 6f 20 67 65  ttempts.** to ge
181d0 74 20 61 20 72 65 61 64 20 6c 6f 63 6b 20 62 75  t a read lock bu
181e0 74 20 66 61 69 6c 73 2c 20 74 68 65 20 73 63 72  t fails, the scr
181f0 69 70 74 20 74 65 72 6d 69 6e 61 74 65 73 20 77  ipt terminates w
18200 69 74 68 20 61 6e 0a 2a 2a 20 53 51 4c 49 54 45  ith an.** SQLITE
18210 5f 42 55 53 59 20 65 72 72 6f 72 20 63 6f 64 65  _BUSY error code
18220 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 76  ..**.** The P4 v
18230 61 6c 75 65 20 6d 61 79 20 62 65 20 65 69 74 68  alue may be eith
18240 65 72 20 61 6e 20 69 6e 74 65 67 65 72 20 28 50  er an integer (P
18250 34 5f 49 4e 54 33 32 29 20 6f 72 20 61 20 70 6f  4_INT32) or a po
18260 69 6e 74 65 72 20 74 6f 0a 2a 2a 20 61 20 4b 65  inter to.** a Ke
18270 79 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65 20  yInfo structure 
18280 28 50 34 5f 4b 45 59 49 4e 46 4f 29 2e 20 49 66  (P4_KEYINFO). If
18290 20 69 74 20 69 73 20 61 20 70 6f 69 6e 74 65 72   it is a pointer
182a0 20 74 6f 20 61 20 4b 65 79 49 6e 66 6f 20 0a 2a   to a KeyInfo .*
182b0 2a 20 73 74 72 75 63 74 75 72 65 2c 20 74 68 65  * structure, the
182c0 6e 20 73 61 69 64 20 73 74 72 75 63 74 75 72 65  n said structure
182d0 20 64 65 66 69 6e 65 73 20 74 68 65 20 63 6f 6e   defines the con
182e0 74 65 6e 74 20 61 6e 64 20 63 6f 6c 6c 61 74 69  tent and collati
182f0 6e 67 20 0a 2a 2a 20 73 65 71 75 65 6e 63 65 20  ng .** sequence 
18300 6f 66 20 74 68 65 20 69 6e 64 65 78 20 62 65 69  of the index bei
18310 6e 67 20 6f 70 65 6e 65 64 2e 20 4f 74 68 65 72  ng opened. Other
18320 77 69 73 65 2c 20 69 66 20 50 34 20 69 73 20 61  wise, if P4 is a
18330 6e 20 69 6e 74 65 67 65 72 20 0a 2a 2a 20 76 61  n integer .** va
18340 6c 75 65 2c 20 69 74 20 69 73 20 73 65 74 20 74  lue, it is set t
18350 6f 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  o the number of 
18360 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74  columns in the t
18370 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  able..**.** See 
18380 61 6c 73 6f 20 4f 70 65 6e 57 72 69 74 65 2e 0a  also OpenWrite..
18390 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70  */./* Opcode: Op
183a0 65 6e 57 72 69 74 65 20 50 31 20 50 32 20 50 33  enWrite P1 P2 P3
183b0 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 4f 70 65   P4 P5.**.** Ope
183c0 6e 20 61 20 72 65 61 64 2f 77 72 69 74 65 20 63  n a read/write c
183d0 75 72 73 6f 72 20 6e 61 6d 65 64 20 50 31 20 6f  ursor named P1 o
183e0 6e 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69  n the table or i
183f0 6e 64 65 78 20 77 68 6f 73 65 20 72 6f 6f 74 0a  ndex whose root.
18400 2a 2a 20 70 61 67 65 20 69 73 20 50 32 2e 20 20  ** page is P2.  
18410 4f 72 20 69 66 20 50 35 21 3d 30 20 75 73 65 20  Or if P5!=0 use 
18420 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72  the content of r
18430 65 67 69 73 74 65 72 20 50 32 20 74 6f 20 66 69  egister P2 to fi
18440 6e 64 20 74 68 65 0a 2a 2a 20 72 6f 6f 74 20 70  nd the.** root p
18450 61 67 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50  age..**.** The P
18460 34 20 76 61 6c 75 65 20 6d 61 79 20 62 65 20 65  4 value may be e
18470 69 74 68 65 72 20 61 6e 20 69 6e 74 65 67 65 72  ither an integer
18480 20 28 50 34 5f 49 4e 54 33 32 29 20 6f 72 20 61   (P4_INT32) or a
18490 20 70 6f 69 6e 74 65 72 20 74 6f 0a 2a 2a 20 61   pointer to.** a
184a0 20 4b 65 79 49 6e 66 6f 20 73 74 72 75 63 74 75   KeyInfo structu
184b0 72 65 20 28 50 34 5f 4b 45 59 49 4e 46 4f 29 2e  re (P4_KEYINFO).
184c0 20 49 66 20 69 74 20 69 73 20 61 20 70 6f 69 6e   If it is a poin
184d0 74 65 72 20 74 6f 20 61 20 4b 65 79 49 6e 66 6f  ter to a KeyInfo
184e0 20 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 2c 20   .** structure, 
184f0 74 68 65 6e 20 73 61 69 64 20 73 74 72 75 63 74  then said struct
18500 75 72 65 20 64 65 66 69 6e 65 73 20 74 68 65 20  ure defines the 
18510 63 6f 6e 74 65 6e 74 20 61 6e 64 20 63 6f 6c 6c  content and coll
18520 61 74 69 6e 67 20 0a 2a 2a 20 73 65 71 75 65 6e  ating .** sequen
18530 63 65 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20  ce of the index 
18540 62 65 69 6e 67 20 6f 70 65 6e 65 64 2e 20 4f 74  being opened. Ot
18550 68 65 72 77 69 73 65 2c 20 69 66 20 50 34 20 69  herwise, if P4 i
18560 73 20 61 6e 20 69 6e 74 65 67 65 72 20 0a 2a 2a  s an integer .**
18570 20 76 61 6c 75 65 2c 20 69 74 20 69 73 20 73 65   value, it is se
18580 74 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72 20  t to the number 
18590 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  of columns in th
185a0 65 20 74 61 62 6c 65 2c 20 6f 72 20 74 6f 20 74  e table, or to t
185b0 68 65 0a 2a 2a 20 6c 61 72 67 65 73 74 20 69 6e  he.** largest in
185c0 64 65 78 20 6f 66 20 61 6e 79 20 63 6f 6c 75 6d  dex of any colum
185d0 6e 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74  n of the table t
185e0 68 61 74 20 69 73 20 61 63 74 75 61 6c 6c 79 20  hat is actually 
185f0 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  used..**.** This
18600 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 77 6f 72   instruction wor
18610 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 4f 70 65  ks just like Ope
18620 6e 52 65 61 64 20 65 78 63 65 70 74 20 74 68 61  nRead except tha
18630 74 20 69 74 20 6f 70 65 6e 73 20 74 68 65 20 63  t it opens the c
18640 75 72 73 6f 72 0a 2a 2a 20 69 6e 20 72 65 61 64  ursor.** in read
18650 2f 77 72 69 74 65 20 6d 6f 64 65 2e 20 20 46 6f  /write mode.  Fo
18660 72 20 61 20 67 69 76 65 6e 20 74 61 62 6c 65 2c  r a given table,
18670 20 74 68 65 72 65 20 63 61 6e 20 62 65 20 6f 6e   there can be on
18680 65 20 6f 72 20 6d 6f 72 65 20 72 65 61 64 2d 6f  e or more read-o
18690 6e 6c 79 0a 2a 2a 20 63 75 72 73 6f 72 73 20 6f  nly.** cursors o
186a0 72 20 61 20 73 69 6e 67 6c 65 20 72 65 61 64 2f  r a single read/
186b0 77 72 69 74 65 20 63 75 72 73 6f 72 20 62 75 74  write cursor but
186c0 20 6e 6f 74 20 62 6f 74 68 2e 0a 2a 2a 0a 2a 2a   not both..**.**
186d0 20 53 65 65 20 61 6c 73 6f 20 4f 70 65 6e 52 65   See also OpenRe
186e0 61 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f  ad..*/.case OP_O
186f0 70 65 6e 52 65 61 64 3a 0a 63 61 73 65 20 4f 50  penRead:.case OP
18700 5f 4f 70 65 6e 57 72 69 74 65 3a 20 7b 0a 20 20  _OpenWrite: {.  
18710 69 6e 74 20 6e 46 69 65 6c 64 3b 0a 20 20 4b 65  int nField;.  Ke
18720 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b  yInfo *pKeyInfo;
18730 0a 20 20 69 6e 74 20 70 32 3b 0a 20 20 69 6e 74  .  int p2;.  int
18740 20 69 44 62 3b 0a 20 20 69 6e 74 20 77 72 46 6c   iDb;.  int wrFl
18750 61 67 3b 0a 20 20 42 74 72 65 65 20 2a 70 58 3b  ag;.  Btree *pX;
18760 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
18770 43 75 72 3b 0a 20 20 44 62 20 2a 70 44 62 3b 0a  Cur;.  Db *pDb;.
18780 0a 20 20 69 66 28 20 70 2d 3e 65 78 70 69 72 65  .  if( p->expire
18790 64 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51  d ){.    rc = SQ
187a0 4c 49 54 45 5f 41 42 4f 52 54 3b 0a 20 20 20 20  LITE_ABORT;.    
187b0 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 6e 46  break;.  }..  nF
187c0 69 65 6c 64 20 3d 20 30 3b 0a 20 20 70 4b 65 79  ield = 0;.  pKey
187d0 49 6e 66 6f 20 3d 20 30 3b 0a 20 20 70 32 20 3d  Info = 0;.  p2 =
187e0 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 69 44 62 20   pOp->p2;.  iDb 
187f0 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73  = pOp->p3;.  ass
18800 65 72 74 28 20 69 44 62 3e 3d 30 20 26 26 20 69  ert( iDb>=0 && i
18810 44 62 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20  Db<db->nDb );.  
18820 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65  assert( (p->btre
18830 65 4d 61 73 6b 20 26 20 28 28 28 79 44 62 4d 61  eMask & (((yDbMa
18840 73 6b 29 31 29 3c 3c 69 44 62 29 29 21 3d 30 20  sk)1)<<iDb))!=0 
18850 29 3b 0a 20 20 70 44 62 20 3d 20 26 64 62 2d 3e  );.  pDb = &db->
18860 61 44 62 5b 69 44 62 5d 3b 0a 20 20 70 58 20 3d  aDb[iDb];.  pX =
18870 20 70 44 62 2d 3e 70 42 74 3b 0a 20 20 61 73 73   pDb->pBt;.  ass
18880 65 72 74 28 20 70 58 21 3d 30 20 29 3b 0a 20 20  ert( pX!=0 );.  
18890 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  if( pOp->opcode=
188a0 3d 4f 50 5f 4f 70 65 6e 57 72 69 74 65 20 29 7b  =OP_OpenWrite ){
188b0 0a 20 20 20 20 77 72 46 6c 61 67 20 3d 20 31 3b  .    wrFlag = 1;
188c0 0a 20 20 20 20 69 66 28 20 70 44 62 2d 3e 70 53  .    if( pDb->pS
188d0 63 68 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d  chema->file_form
188e0 61 74 20 3c 20 70 2d 3e 6d 69 6e 57 72 69 74 65  at < p->minWrite
188f0 46 69 6c 65 46 6f 72 6d 61 74 20 29 7b 0a 20 20  FileFormat ){.  
18900 20 20 20 20 70 2d 3e 6d 69 6e 57 72 69 74 65 46      p->minWriteF
18910 69 6c 65 46 6f 72 6d 61 74 20 3d 20 70 44 62 2d  ileFormat = pDb-
18920 3e 70 53 63 68 65 6d 61 2d 3e 66 69 6c 65 5f 66  >pSchema->file_f
18930 6f 72 6d 61 74 3b 0a 20 20 20 20 7d 0a 20 20 7d  ormat;.    }.  }
18940 65 6c 73 65 7b 0a 20 20 20 20 77 72 46 6c 61 67  else{.    wrFlag
18950 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20   = 0;.  }.  if( 
18960 70 4f 70 2d 3e 70 35 20 29 7b 0a 20 20 20 20 61  pOp->p5 ){.    a
18970 73 73 65 72 74 28 20 70 32 3e 30 20 29 3b 0a 20  ssert( p2>0 );. 
18980 20 20 20 61 73 73 65 72 74 28 20 70 32 3c 3d 70     assert( p2<=p
18990 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 70 49  ->nMem );.    pI
189a0 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 32 5d 3b 0a  n2 = &aMem[p2];.
189b0 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
189c0 73 56 61 6c 69 64 28 70 49 6e 32 29 20 29 3b 0a  sValid(pIn2) );.
189d0 20 20 20 20 61 73 73 65 72 74 28 20 28 70 49 6e      assert( (pIn
189e0 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  2->flags & MEM_I
189f0 6e 74 29 21 3d 30 20 29 3b 0a 20 20 20 20 73 71  nt)!=0 );.    sq
18a00 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65  lite3VdbeMemInte
18a10 67 65 72 69 66 79 28 70 49 6e 32 29 3b 0a 20 20  gerify(pIn2);.  
18a20 20 20 70 32 20 3d 20 28 69 6e 74 29 70 49 6e 32    p2 = (int)pIn2
18a30 2d 3e 75 2e 69 3b 0a 20 20 20 20 2f 2a 20 54 68  ->u.i;.    /* Th
18a40 65 20 70 32 20 76 61 6c 75 65 20 61 6c 77 61 79  e p2 value alway
18a50 73 20 63 6f 6d 65 73 20 66 72 6f 6d 20 61 20 70  s comes from a p
18a60 72 69 6f 72 20 4f 50 5f 43 72 65 61 74 65 54 61  rior OP_CreateTa
18a70 62 6c 65 20 6f 70 63 6f 64 65 20 61 6e 64 0a 20  ble opcode and. 
18a80 20 20 20 2a 2a 20 74 68 61 74 20 6f 70 63 6f 64     ** that opcod
18a90 65 20 77 69 6c 6c 20 61 6c 77 61 79 73 20 73 65  e will always se
18aa0 74 20 74 68 65 20 70 32 20 76 61 6c 75 65 20 74  t the p2 value t
18ab0 6f 20 32 20 6f 72 20 6d 6f 72 65 20 6f 72 20 65  o 2 or more or e
18ac0 6c 73 65 20 66 61 69 6c 2e 0a 20 20 20 20 2a 2a  lse fail..    **
18ad0 20 49 66 20 74 68 65 72 65 20 77 65 72 65 20 61   If there were a
18ae0 20 66 61 69 6c 75 72 65 2c 20 74 68 65 20 70 72   failure, the pr
18af0 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74  epared statement
18b00 20 77 6f 75 6c 64 20 68 61 76 65 20 68 61 6c 74   would have halt
18b10 65 64 0a 20 20 20 20 2a 2a 20 62 65 66 6f 72 65  ed.    ** before
18b20 20 72 65 61 63 68 69 6e 67 20 74 68 69 73 20 69   reaching this i
18b30 6e 73 74 72 75 63 74 69 6f 6e 2e 20 2a 2f 0a 20  nstruction. */. 
18b40 20 20 20 69 66 28 20 4e 45 56 45 52 28 70 32 3c     if( NEVER(p2<
18b50 32 29 20 29 20 7b 0a 20 20 20 20 20 20 72 63 20  2) ) {.      rc 
18b60 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54  = SQLITE_CORRUPT
18b70 5f 42 4b 50 54 3b 0a 20 20 20 20 20 20 67 6f 74  _BKPT;.      got
18b80 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
18b90 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  rror;.    }.  }.
18ba0 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70    if( pOp->p4typ
18bb0 65 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f 20 29 7b  e==P4_KEYINFO ){
18bc0 0a 20 20 20 20 70 4b 65 79 49 6e 66 6f 20 3d 20  .    pKeyInfo = 
18bd0 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f  pOp->p4.pKeyInfo
18be0 3b 0a 20 20 20 20 70 4b 65 79 49 6e 66 6f 2d 3e  ;.    pKeyInfo->
18bf0 65 6e 63 20 3d 20 45 4e 43 28 70 2d 3e 64 62 29  enc = ENC(p->db)
18c00 3b 0a 20 20 20 20 6e 46 69 65 6c 64 20 3d 20 70  ;.    nField = p
18c10 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64 2b  KeyInfo->nField+
18c20 31 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70  1;.  }else if( p
18c30 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49  Op->p4type==P4_I
18c40 4e 54 33 32 20 29 7b 0a 20 20 20 20 6e 46 69 65  NT32 ){.    nFie
18c50 6c 64 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a  ld = pOp->p4.i;.
18c60 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 70 4f    }.  assert( pO
18c70 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 70 43  p->p1>=0 );.  pC
18c80 75 72 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72  ur = allocateCur
18c90 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20  sor(p, pOp->p1, 
18ca0 6e 46 69 65 6c 64 2c 20 69 44 62 2c 20 31 29 3b  nField, iDb, 1);
18cb0 0a 20 20 69 66 28 20 70 43 75 72 3d 3d 30 20 29  .  if( pCur==0 )
18cc0 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
18cd0 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20  pCur->nullRow = 
18ce0 31 3b 0a 20 20 70 43 75 72 2d 3e 69 73 4f 72 64  1;.  pCur->isOrd
18cf0 65 72 65 64 20 3d 20 31 3b 0a 20 20 72 63 20 3d  ered = 1;.  rc =
18d00 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72   sqlite3BtreeCur
18d10 73 6f 72 28 70 58 2c 20 70 32 2c 20 77 72 46 6c  sor(pX, p2, wrFl
18d20 61 67 2c 20 70 4b 65 79 49 6e 66 6f 2c 20 70 43  ag, pKeyInfo, pC
18d30 75 72 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20  ur->pCursor);.  
18d40 70 43 75 72 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d  pCur->pKeyInfo =
18d50 20 70 4b 65 79 49 6e 66 6f 3b 0a 0a 20 20 2f 2a   pKeyInfo;..  /*
18d60 20 53 69 6e 63 65 20 69 74 20 70 65 72 66 6f 72   Since it perfor
18d70 6d 73 20 6e 6f 20 6d 65 6d 6f 72 79 20 61 6c 6c  ms no memory all
18d80 6f 63 61 74 69 6f 6e 20 6f 72 20 49 4f 2c 20 74  ocation or IO, t
18d90 68 65 20 6f 6e 6c 79 20 76 61 6c 75 65 73 20 74  he only values t
18da0 68 61 74 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33  hat.  ** sqlite3
18db0 42 74 72 65 65 43 75 72 73 6f 72 28 29 20 6d 61  BtreeCursor() ma
18dc0 79 20 72 65 74 75 72 6e 20 61 72 65 20 53 51 4c  y return are SQL
18dd0 49 54 45 5f 45 4d 50 54 59 20 61 6e 64 20 53 51  ITE_EMPTY and SQ
18de0 4c 49 54 45 5f 4f 4b 2e 20 0a 20 20 2a 2a 20 53  LITE_OK. .  ** S
18df0 51 4c 49 54 45 5f 45 4d 50 54 59 20 69 73 20 6f  QLITE_EMPTY is o
18e00 6e 6c 79 20 72 65 74 75 72 6e 65 64 20 77 68 65  nly returned whe
18e10 6e 20 61 74 74 65 6d 70 74 69 6e 67 20 74 6f 20  n attempting to 
18e20 6f 70 65 6e 20 74 68 65 20 74 61 62 6c 65 0a 20  open the table. 
18e30 20 2a 2a 20 72 6f 6f 74 65 64 20 61 74 20 70 61   ** rooted at pa
18e40 67 65 20 31 20 6f 66 20 61 20 7a 65 72 6f 2d 62  ge 1 of a zero-b
18e50 79 74 65 20 64 61 74 61 62 61 73 65 2e 20 20 2a  yte database.  *
18e60 2f 0a 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d  /.  assert( rc==
18e70 53 51 4c 49 54 45 5f 45 4d 50 54 59 20 7c 7c 20  SQLITE_EMPTY || 
18e80 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b  rc==SQLITE_OK );
18e90 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54  .  if( rc==SQLIT
18ea0 45 5f 45 4d 50 54 59 20 29 7b 0a 20 20 20 20 70  E_EMPTY ){.    p
18eb0 43 75 72 2d 3e 70 43 75 72 73 6f 72 20 3d 20 30  Cur->pCursor = 0
18ec0 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54  ;.    rc = SQLIT
18ed0 45 5f 4f 4b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20  E_OK;.  }..  /* 
18ee0 53 65 74 20 74 68 65 20 56 64 62 65 43 75 72 73  Set the VdbeCurs
18ef0 6f 72 2e 69 73 54 61 62 6c 65 20 61 6e 64 20 69  or.isTable and i
18f00 73 49 6e 64 65 78 20 76 61 72 69 61 62 6c 65 73  sIndex variables
18f10 2e 20 50 72 65 76 69 6f 75 73 20 76 65 72 73 69  . Previous versi
18f20 6f 6e 73 20 6f 66 0a 20 20 2a 2a 20 53 51 4c 69  ons of.  ** SQLi
18f30 74 65 20 75 73 65 64 20 74 6f 20 63 68 65 63 6b  te used to check
18f40 20 69 66 20 74 68 65 20 72 6f 6f 74 2d 70 61 67   if the root-pag
18f50 65 20 66 6c 61 67 73 20 77 65 72 65 20 73 61 6e  e flags were san
18f60 65 20 61 74 20 74 68 69 73 20 70 6f 69 6e 74 0a  e at this point.
18f70 20 20 2a 2a 20 61 6e 64 20 72 65 70 6f 72 74 20    ** and report 
18f80 64 61 74 61 62 61 73 65 20 63 6f 72 72 75 70 74  database corrupt
18f90 69 6f 6e 20 69 66 20 74 68 65 79 20 77 65 72 65  ion if they were
18fa0 20 6e 6f 74 2c 20 62 75 74 20 74 68 69 73 20 63   not, but this c
18fb0 68 65 63 6b 20 68 61 73 0a 20 20 2a 2a 20 73 69  heck has.  ** si
18fc0 6e 63 65 20 6d 6f 76 65 64 20 69 6e 74 6f 20 74  nce moved into t
18fd0 68 65 20 62 74 72 65 65 20 6c 61 79 65 72 2e 20  he btree layer. 
18fe0 20 2a 2f 20 20 0a 20 20 70 43 75 72 2d 3e 69 73   */  .  pCur->is
18ff0 54 61 62 6c 65 20 3d 20 70 4f 70 2d 3e 70 34 74  Table = pOp->p4t
19000 79 70 65 21 3d 50 34 5f 4b 45 59 49 4e 46 4f 3b  ype!=P4_KEYINFO;
19010 0a 20 20 70 43 75 72 2d 3e 69 73 49 6e 64 65 78  .  pCur->isIndex
19020 20 3d 20 21 70 43 75 72 2d 3e 69 73 54 61 62 6c   = !pCur->isTabl
19030 65 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  e;.  break;.}../
19040 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 45 70  * Opcode: OpenEp
19050 68 65 6d 65 72 61 6c 20 50 31 20 50 32 20 2a 20  hemeral P1 P2 * 
19060 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20  P4 *.**.** Open 
19070 61 20 6e 65 77 20 63 75 72 73 6f 72 20 50 31 20  a new cursor P1 
19080 74 6f 20 61 20 74 72 61 6e 73 69 65 6e 74 20 74  to a transient t
19090 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 63 75 72  able..** The cur
190a0 73 6f 72 20 69 73 20 61 6c 77 61 79 73 20 6f 70  sor is always op
190b0 65 6e 65 64 20 72 65 61 64 2f 77 72 69 74 65 20  ened read/write 
190c0 65 76 65 6e 20 69 66 20 0a 2a 2a 20 74 68 65 20  even if .** the 
190d0 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 69 73  main database is
190e0 20 72 65 61 64 2d 6f 6e 6c 79 2e 20 20 54 68 65   read-only.  The
190f0 20 65 70 68 65 6d 65 72 61 6c 0a 2a 2a 20 74 61   ephemeral.** ta
19100 62 6c 65 20 69 73 20 64 65 6c 65 74 65 64 20 61  ble is deleted a
19110 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 77 68 65  utomatically whe
19120 6e 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20  n the cursor is 
19130 63 6c 6f 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 50 32  closed..**.** P2
19140 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   is the number o
19150 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65  f columns in the
19160 20 65 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65   ephemeral table
19170 2e 0a 2a 2a 20 54 68 65 20 63 75 72 73 6f 72 20  ..** The cursor 
19180 70 6f 69 6e 74 73 20 74 6f 20 61 20 42 54 72 65  points to a BTre
19190 65 20 74 61 62 6c 65 20 69 66 20 50 34 3d 3d 30  e table if P4==0
191a0 20 61 6e 64 20 74 6f 20 61 20 42 54 72 65 65 20   and to a BTree 
191b0 69 6e 64 65 78 0a 2a 2a 20 69 66 20 50 34 20 69  index.** if P4 i
191c0 73 20 6e 6f 74 20 30 2e 20 20 49 66 20 50 34 20  s not 0.  If P4 
191d0 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 69 74 20  is not NULL, it 
191e0 70 6f 69 6e 74 73 20 74 6f 20 61 20 4b 65 79 49  points to a KeyI
191f0 6e 66 6f 20 73 74 72 75 63 74 75 72 65 0a 2a 2a  nfo structure.**
19200 20 74 68 61 74 20 64 65 66 69 6e 65 73 20 74 68   that defines th
19210 65 20 66 6f 72 6d 61 74 20 6f 66 20 6b 65 79 73  e format of keys
19220 20 69 6e 20 74 68 65 20 69 6e 64 65 78 2e 0a 2a   in the index..*
19230 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
19240 20 77 61 73 20 6f 6e 63 65 20 63 61 6c 6c 65 64   was once called
19250 20 4f 70 65 6e 54 65 6d 70 2e 20 20 42 75 74 20   OpenTemp.  But 
19260 74 68 61 74 20 63 72 65 61 74 65 64 0a 2a 2a 20  that created.** 
19270 63 6f 6e 66 75 73 69 6f 6e 20 62 65 63 61 75 73  confusion becaus
19280 65 20 74 68 65 20 74 65 72 6d 20 22 74 65 6d 70  e the term "temp
19290 20 74 61 62 6c 65 22 2c 20 6d 69 67 68 74 20 72   table", might r
192a0 65 66 65 72 20 65 69 74 68 65 72 0a 2a 2a 20 74  efer either.** t
192b0 6f 20 61 20 54 45 4d 50 20 74 61 62 6c 65 20 61  o a TEMP table a
192c0 74 20 74 68 65 20 53 51 4c 20 6c 65 76 65 6c 2c  t the SQL level,
192d0 20 6f 72 20 74 6f 20 61 20 74 61 62 6c 65 20 6f   or to a table o
192e0 70 65 6e 65 64 20 62 79 0a 2a 2a 20 74 68 69 73  pened by.** this
192f0 20 6f 70 63 6f 64 65 2e 20 20 54 68 65 6e 20 74   opcode.  Then t
19300 68 69 73 20 6f 70 63 6f 64 65 20 77 61 73 20 63  his opcode was c
19310 61 6c 6c 20 4f 70 65 6e 56 69 72 74 75 61 6c 2e  all OpenVirtual.
19320 20 20 42 75 74 0a 2a 2a 20 74 68 61 74 20 63 72    But.** that cr
19330 65 61 74 65 64 20 63 6f 6e 66 75 73 69 6f 6e 20  eated confusion 
19340 77 69 74 68 20 74 68 65 20 77 68 6f 6c 65 20 76  with the whole v
19350 69 72 74 75 61 6c 2d 74 61 62 6c 65 20 69 64 65  irtual-table ide
19360 61 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  a..*/./* Opcode:
19370 20 4f 70 65 6e 41 75 74 6f 69 6e 64 65 78 20 50   OpenAutoindex P
19380 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a  1 P2 * P4 *.**.*
19390 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77 6f  * This opcode wo
193a0 72 6b 73 20 74 68 65 20 73 61 6d 65 20 61 73 20  rks the same as 
193b0 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c  OP_OpenEphemeral
193c0 2e 20 20 49 74 20 68 61 73 20 61 0a 2a 2a 20 64  .  It has a.** d
193d0 69 66 66 65 72 65 6e 74 20 6e 61 6d 65 20 74 6f  ifferent name to
193e0 20 64 69 73 74 69 6e 67 75 69 73 68 20 69 74 73   distinguish its
193f0 20 75 73 65 2e 20 20 54 61 62 6c 65 73 20 63 72   use.  Tables cr
19400 65 61 74 65 64 20 75 73 69 6e 67 0a 2a 2a 20 62  eated using.** b
19410 79 20 74 68 69 73 20 6f 70 63 6f 64 65 20 77 69  y this opcode wi
19420 6c 6c 20 62 65 20 75 73 65 64 20 66 6f 72 20 61  ll be used for a
19430 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63 72 65  utomatically cre
19440 61 74 65 64 20 74 72 61 6e 73 69 65 6e 74 0a 2a  ated transient.*
19450 2a 20 69 6e 64 69 63 65 73 20 69 6e 20 6a 6f 69  * indices in joi
19460 6e 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f  ns..*/.case OP_O
19470 70 65 6e 41 75 74 6f 69 6e 64 65 78 3a 20 0a 63  penAutoindex: .c
19480 61 73 65 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d  ase OP_OpenEphem
19490 65 72 61 6c 3a 20 7b 0a 20 20 56 64 62 65 43 75  eral: {.  VdbeCu
194a0 72 73 6f 72 20 2a 70 43 78 3b 0a 20 20 73 74 61  rsor *pCx;.  sta
194b0 74 69 63 20 63 6f 6e 73 74 20 69 6e 74 20 76 66  tic const int vf
194c0 73 46 6c 61 67 73 20 3d 20 0a 20 20 20 20 20 20  sFlags = .      
194d0 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 52 45 41 44  SQLITE_OPEN_READ
194e0 57 52 49 54 45 20 7c 0a 20 20 20 20 20 20 53 51  WRITE |.      SQ
194f0 4c 49 54 45 5f 4f 50 45 4e 5f 43 52 45 41 54 45  LITE_OPEN_CREATE
19500 20 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f   |.      SQLITE_
19510 4f 50 45 4e 5f 45 58 43 4c 55 53 49 56 45 20 7c  OPEN_EXCLUSIVE |
19520 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50  .      SQLITE_OP
19530 45 4e 5f 44 45 4c 45 54 45 4f 4e 43 4c 4f 53 45  EN_DELETEONCLOSE
19540 20 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f   |.      SQLITE_
19550 4f 50 45 4e 5f 54 52 41 4e 53 49 45 4e 54 5f 44  OPEN_TRANSIENT_D
19560 42 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  B;..  assert( pO
19570 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 70 43  p->p1>=0 );.  pC
19580 78 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73  x = allocateCurs
19590 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 70  or(p, pOp->p1, p
195a0 4f 70 2d 3e 70 32 2c 20 2d 31 2c 20 31 29 3b 0a  Op->p2, -1, 1);.
195b0 20 20 69 66 28 20 70 43 78 3d 3d 30 20 29 20 67    if( pCx==0 ) g
195c0 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43  oto no_mem;.  pC
195d0 78 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a  x->nullRow = 1;.
195e0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
195f0 72 65 65 4f 70 65 6e 28 30 2c 20 64 62 2c 20 26  reeOpen(0, db, &
19600 70 43 78 2d 3e 70 42 74 2c 20 0a 20 20 20 20 20  pCx->pBt, .     
19610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19620 20 20 20 42 54 52 45 45 5f 4f 4d 49 54 5f 4a 4f     BTREE_OMIT_JO
19630 55 52 4e 41 4c 20 7c 20 42 54 52 45 45 5f 53 49  URNAL | BTREE_SI
19640 4e 47 4c 45 20 7c 20 70 4f 70 2d 3e 70 35 2c 20  NGLE | pOp->p5, 
19650 76 66 73 46 6c 61 67 73 29 3b 0a 20 20 69 66 28  vfsFlags);.  if(
19660 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
19670 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  {.    rc = sqlit
19680 65 33 42 74 72 65 65 42 65 67 69 6e 54 72 61 6e  e3BtreeBeginTran
19690 73 28 70 43 78 2d 3e 70 42 74 2c 20 31 29 3b 0a  s(pCx->pBt, 1);.
196a0 20 20 7d 0a 20 20 69 66 28 20 72 63 3d 3d 53 51    }.  if( rc==SQ
196b0 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 2f  LITE_OK ){.    /
196c0 2a 20 49 66 20 61 20 74 72 61 6e 73 69 65 6e 74  * If a transient
196d0 20 69 6e 64 65 78 20 69 73 20 72 65 71 75 69 72   index is requir
196e0 65 64 2c 20 63 72 65 61 74 65 20 69 74 20 62 79  ed, create it by
196f0 20 63 61 6c 6c 69 6e 67 0a 20 20 20 20 2a 2a 20   calling.    ** 
19700 73 71 6c 69 74 65 33 42 74 72 65 65 43 72 65 61  sqlite3BtreeCrea
19710 74 65 54 61 62 6c 65 28 29 20 77 69 74 68 20 74  teTable() with t
19720 68 65 20 42 54 52 45 45 5f 42 4c 4f 42 4b 45 59  he BTREE_BLOBKEY
19730 20 66 6c 61 67 20 62 65 66 6f 72 65 0a 20 20 20   flag before.   
19740 20 2a 2a 20 6f 70 65 6e 69 6e 67 20 69 74 2e 20   ** opening it. 
19750 49 66 20 61 20 74 72 61 6e 73 69 65 6e 74 20 74  If a transient t
19760 61 62 6c 65 20 69 73 20 72 65 71 75 69 72 65 64  able is required
19770 2c 20 6a 75 73 74 20 75 73 65 20 74 68 65 0a 20  , just use the. 
19780 20 20 20 2a 2a 20 61 75 74 6f 6d 61 74 69 63 61     ** automatica
19790 6c 6c 79 20 63 72 65 61 74 65 64 20 74 61 62 6c  lly created tabl
197a0 65 20 77 69 74 68 20 72 6f 6f 74 2d 70 61 67 65  e with root-page
197b0 20 31 20 28 61 6e 20 42 4c 4f 42 5f 49 4e 54 4b   1 (an BLOB_INTK
197c0 45 59 20 74 61 62 6c 65 29 2e 0a 20 20 20 20 2a  EY table)..    *
197d0 2f 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70  /.    if( pOp->p
197e0 34 2e 70 4b 65 79 49 6e 66 6f 20 29 7b 0a 20 20  4.pKeyInfo ){.  
197f0 20 20 20 20 69 6e 74 20 70 67 6e 6f 3b 0a 20 20      int pgno;.  
19800 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
19810 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4b 45 59 49  >p4type==P4_KEYI
19820 4e 46 4f 20 29 3b 0a 20 20 20 20 20 20 72 63 20  NFO );.      rc 
19830 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 72  = sqlite3BtreeCr
19840 65 61 74 65 54 61 62 6c 65 28 70 43 78 2d 3e 70  eateTable(pCx->p
19850 42 74 2c 20 26 70 67 6e 6f 2c 20 42 54 52 45 45  Bt, &pgno, BTREE
19860 5f 42 4c 4f 42 4b 45 59 29 3b 20 0a 20 20 20 20  _BLOBKEY); .    
19870 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
19880 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 61  _OK ){.        a
19890 73 73 65 72 74 28 20 70 67 6e 6f 3d 3d 4d 41 53  ssert( pgno==MAS
198a0 54 45 52 5f 52 4f 4f 54 2b 31 20 29 3b 0a 20 20  TER_ROOT+1 );.  
198b0 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
198c0 65 33 42 74 72 65 65 43 75 72 73 6f 72 28 70 43  e3BtreeCursor(pC
198d0 78 2d 3e 70 42 74 2c 20 70 67 6e 6f 2c 20 31 2c  x->pBt, pgno, 1,
198e0 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   .              
198f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19900 20 20 28 4b 65 79 49 6e 66 6f 2a 29 70 4f 70 2d    (KeyInfo*)pOp-
19910 3e 70 34 2e 7a 2c 20 70 43 78 2d 3e 70 43 75 72  >p4.z, pCx->pCur
19920 73 6f 72 29 3b 0a 20 20 20 20 20 20 20 20 70 43  sor);.        pC
19930 78 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f  x->pKeyInfo = pO
19940 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a  p->p4.pKeyInfo;.
19950 20 20 20 20 20 20 20 20 70 43 78 2d 3e 70 4b 65          pCx->pKe
19960 79 49 6e 66 6f 2d 3e 65 6e 63 20 3d 20 45 4e 43  yInfo->enc = ENC
19970 28 70 2d 3e 64 62 29 3b 0a 20 20 20 20 20 20 7d  (p->db);.      }
19980 0a 20 20 20 20 20 20 70 43 78 2d 3e 69 73 54 61  .      pCx->isTa
19990 62 6c 65 20 3d 20 30 3b 0a 20 20 20 20 7d 65 6c  ble = 0;.    }el
199a0 73 65 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73  se{.      rc = s
199b0 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f  qlite3BtreeCurso
199c0 72 28 70 43 78 2d 3e 70 42 74 2c 20 4d 41 53 54  r(pCx->pBt, MAST
199d0 45 52 5f 52 4f 4f 54 2c 20 31 2c 20 30 2c 20 70  ER_ROOT, 1, 0, p
199e0 43 78 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20  Cx->pCursor);.  
199f0 20 20 20 20 70 43 78 2d 3e 69 73 54 61 62 6c 65      pCx->isTable
19a00 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a   = 1;.    }.  }.
19a10 20 20 70 43 78 2d 3e 69 73 4f 72 64 65 72 65 64    pCx->isOrdered
19a20 20 3d 20 28 70 4f 70 2d 3e 70 35 21 3d 42 54 52   = (pOp->p5!=BTR
19a30 45 45 5f 55 4e 4f 52 44 45 52 45 44 29 3b 0a 20  EE_UNORDERED);. 
19a40 20 70 43 78 2d 3e 69 73 49 6e 64 65 78 20 3d 20   pCx->isIndex = 
19a50 21 70 43 78 2d 3e 69 73 54 61 62 6c 65 3b 0a 20  !pCx->isTable;. 
19a60 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
19a70 63 6f 64 65 3a 20 4f 70 65 6e 50 73 65 75 64 6f  code: OpenPseudo
19a80 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
19a90 0a 2a 2a 20 4f 70 65 6e 20 61 20 6e 65 77 20 63  .** Open a new c
19aa0 75 72 73 6f 72 20 74 68 61 74 20 70 6f 69 6e 74  ursor that point
19ab0 73 20 74 6f 20 61 20 66 61 6b 65 20 74 61 62 6c  s to a fake tabl
19ac0 65 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20  e that contains 
19ad0 61 20 73 69 6e 67 6c 65 0a 2a 2a 20 72 6f 77 20  a single.** row 
19ae0 6f 66 20 64 61 74 61 2e 20 20 54 68 65 20 63 6f  of data.  The co
19af0 6e 74 65 6e 74 20 6f 66 20 74 68 61 74 20 6f 6e  ntent of that on
19b00 65 20 72 6f 77 20 69 6e 20 74 68 65 20 63 6f 6e  e row in the con
19b10 74 65 6e 74 20 6f 66 20 6d 65 6d 6f 72 79 0a 2a  tent of memory.*
19b20 2a 20 72 65 67 69 73 74 65 72 20 50 32 2e 20 20  * register P2.  
19b30 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
19b40 63 75 72 73 6f 72 20 50 31 20 62 65 63 6f 6d 65  cursor P1 become
19b50 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 74  s an alias for t
19b60 68 65 20 0a 2a 2a 20 4d 45 4d 5f 42 6c 6f 62 20  he .** MEM_Blob 
19b70 63 6f 6e 74 65 6e 74 20 63 6f 6e 74 61 69 6e 65  content containe
19b80 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  d in register P2
19b90 2e 0a 2a 2a 0a 2a 2a 20 41 20 70 73 65 75 64 6f  ..**.** A pseudo
19ba0 2d 74 61 62 6c 65 20 63 72 65 61 74 65 64 20 62  -table created b
19bb0 79 20 74 68 69 73 20 6f 70 63 6f 64 65 20 69 73  y this opcode is
19bc0 20 75 73 65 64 20 74 6f 20 68 6f 6c 64 20 61 20   used to hold a 
19bd0 73 69 6e 67 6c 65 0a 2a 2a 20 72 6f 77 20 6f 75  single.** row ou
19be0 74 70 75 74 20 66 72 6f 6d 20 74 68 65 20 73 6f  tput from the so
19bf0 72 74 65 72 20 73 6f 20 74 68 61 74 20 74 68 65  rter so that the
19c00 20 72 6f 77 20 63 61 6e 20 62 65 20 64 65 63 6f   row can be deco
19c10 6d 70 6f 73 65 64 20 69 6e 74 6f 0a 2a 2a 20 69  mposed into.** i
19c20 6e 64 69 76 69 64 75 61 6c 20 63 6f 6c 75 6d 6e  ndividual column
19c30 73 20 75 73 69 6e 67 20 74 68 65 20 4f 50 5f 43  s using the OP_C
19c40 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 2e 20 20 54  olumn opcode.  T
19c50 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63  he OP_Column opc
19c60 6f 64 65 0a 2a 2a 20 69 73 20 74 68 65 20 6f 6e  ode.** is the on
19c70 6c 79 20 63 75 72 73 6f 72 20 6f 70 63 6f 64 65  ly cursor opcode
19c80 20 74 68 61 74 20 77 6f 72 6b 73 20 77 69 74 68   that works with
19c90 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e   a pseudo-table.
19ca0 0a 2a 2a 0a 2a 2a 20 50 33 20 69 73 20 74 68 65  .**.** P3 is the
19cb0 20 6e 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64   number of field
19cc0 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 73  s in the records
19cd0 20 74 68 61 74 20 77 69 6c 6c 20 62 65 20 73 74   that will be st
19ce0 6f 72 65 64 20 62 79 0a 2a 2a 20 74 68 65 20 70  ored by.** the p
19cf0 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2f 0a  seudo-table..*/.
19d00 63 61 73 65 20 4f 50 5f 4f 70 65 6e 50 73 65 75  case OP_OpenPseu
19d10 64 6f 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73  do: {.  VdbeCurs
19d20 6f 72 20 2a 70 43 78 3b 0a 0a 20 20 61 73 73 65  or *pCx;..  asse
19d30 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 29  rt( pOp->p1>=0 )
19d40 3b 0a 20 20 70 43 78 20 3d 20 61 6c 6c 6f 63 61  ;.  pCx = alloca
19d50 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d  teCursor(p, pOp-
19d60 3e 70 31 2c 20 70 4f 70 2d 3e 70 33 2c 20 2d 31  >p1, pOp->p3, -1
19d70 2c 20 30 29 3b 0a 20 20 69 66 28 20 70 43 78 3d  , 0);.  if( pCx=
19d80 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  =0 ) goto no_mem
19d90 3b 0a 20 20 70 43 78 2d 3e 6e 75 6c 6c 52 6f 77  ;.  pCx->nullRow
19da0 20 3d 20 31 3b 0a 20 20 70 43 78 2d 3e 70 73 65   = 1;.  pCx->pse
19db0 75 64 6f 54 61 62 6c 65 52 65 67 20 3d 20 70 4f  udoTableReg = pO
19dc0 70 2d 3e 70 32 3b 0a 20 20 70 43 78 2d 3e 69 73  p->p2;.  pCx->is
19dd0 54 61 62 6c 65 20 3d 20 31 3b 0a 20 20 70 43 78  Table = 1;.  pCx
19de0 2d 3e 69 73 49 6e 64 65 78 20 3d 20 30 3b 0a 20  ->isIndex = 0;. 
19df0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
19e00 63 6f 64 65 3a 20 43 6c 6f 73 65 20 50 31 20 2a  code: Close P1 *
19e10 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 6c 6f   * * *.**.** Clo
19e20 73 65 20 61 20 63 75 72 73 6f 72 20 70 72 65 76  se a cursor prev
19e30 69 6f 75 73 6c 79 20 6f 70 65 6e 65 64 20 61 73  iously opened as
19e40 20 50 31 2e 20 20 49 66 20 50 31 20 69 73 20 6e   P1.  If P1 is n
19e50 6f 74 0a 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20  ot.** currently 
19e60 6f 70 65 6e 2c 20 74 68 69 73 20 69 6e 73 74 72  open, this instr
19e70 75 63 74 69 6f 6e 20 69 73 20 61 20 6e 6f 2d 6f  uction is a no-o
19e80 70 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6c  p..*/.case OP_Cl
19e90 6f 73 65 3a 20 7b 0a 20 20 61 73 73 65 72 74 28  ose: {.  assert(
19ea0 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
19eb0 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
19ec0 72 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  r );.  sqlite3Vd
19ed0 62 65 46 72 65 65 43 75 72 73 6f 72 28 70 2c 20  beFreeCursor(p, 
19ee0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
19ef0 5d 29 3b 0a 20 20 70 2d 3e 61 70 43 73 72 5b 70  ]);.  p->apCsr[p
19f00 4f 70 2d 3e 70 31 5d 20 3d 20 30 3b 0a 20 20 62  Op->p1] = 0;.  b
19f10 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
19f20 64 65 3a 20 53 65 65 6b 47 65 20 50 31 20 50 32  de: SeekGe P1 P2
19f30 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 49   P3 P4 *.**.** I
19f40 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65  f cursor P1 refe
19f50 72 73 20 74 6f 20 61 6e 20 53 51 4c 20 74 61 62  rs to an SQL tab
19f60 6c 65 20 28 42 2d 54 72 65 65 20 74 68 61 74 20  le (B-Tree that 
19f70 75 73 65 73 20 69 6e 74 65 67 65 72 20 6b 65 79  uses integer key
19f80 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65 20  s), .** use the 
19f90 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
19fa0 72 20 50 33 20 61 73 20 74 68 65 20 6b 65 79 2e  r P3 as the key.
19fb0 20 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72    If cursor P1 r
19fc0 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20  efers .** to an 
19fd0 53 51 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e 20  SQL index, then 
19fe0 50 33 20 69 73 20 74 68 65 20 66 69 72 73 74 20  P3 is the first 
19ff0 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20 50  in an array of P
1a000 34 20 72 65 67 69 73 74 65 72 73 20 0a 2a 2a 20  4 registers .** 
1a010 74 68 61 74 20 61 72 65 20 75 73 65 64 20 61 73  that are used as
1a020 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64   an unpacked ind
1a030 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52  ex key. .**.** R
1a040 65 70 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72  eposition cursor
1a050 20 50 31 20 73 6f 20 74 68 61 74 20 20 69 74 20   P1 so that  it 
1a060 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 73 6d  points to the sm
1a070 61 6c 6c 65 73 74 20 65 6e 74 72 79 20 74 68 61  allest entry tha
1a080 74 20 0a 2a 2a 20 69 73 20 67 72 65 61 74 65 72  t .** is greater
1a090 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74   than or equal t
1a0a0 6f 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 2e  o the key value.
1a0b0 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f   If there are no
1a0c0 20 72 65 63 6f 72 64 73 20 0a 2a 2a 20 67 72 65   records .** gre
1a0d0 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75  ater than or equ
1a0e0 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 61 6e  al to the key an
1a0f0 64 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f  d P2 is not zero
1a100 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50  , then jump to P
1a110 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  2..**.** See als
1a120 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75  o: Found, NotFou
1a130 6e 64 2c 20 44 69 73 74 69 6e 63 74 2c 20 53 65  nd, Distinct, Se
1a140 65 6b 4c 74 2c 20 53 65 65 6b 47 74 2c 20 53 65  ekLt, SeekGt, Se
1a150 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ekLe.*/./* Opcod
1a160 65 3a 20 53 65 65 6b 47 74 20 50 31 20 50 32 20  e: SeekGt P1 P2 
1a170 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 49 66  P3 P4 *.**.** If
1a180 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72   cursor P1 refer
1a190 73 20 74 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c  s to an SQL tabl
1a1a0 65 20 28 42 2d 54 72 65 65 20 74 68 61 74 20 75  e (B-Tree that u
1a1b0 73 65 73 20 69 6e 74 65 67 65 72 20 6b 65 79 73  ses integer keys
1a1c0 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65 20 76  ), .** use the v
1a1d0 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
1a1e0 20 50 33 20 61 73 20 61 20 6b 65 79 2e 20 49 66   P3 as a key. If
1a1f0 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72   cursor P1 refer
1a200 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20  s .** to an SQL 
1a210 69 6e 64 65 78 2c 20 74 68 65 6e 20 50 33 20 69  index, then P3 i
1a220 73 20 74 68 65 20 66 69 72 73 74 20 69 6e 20 61  s the first in a
1a230 6e 20 61 72 72 61 79 20 6f 66 20 50 34 20 72 65  n array of P4 re
1a240 67 69 73 74 65 72 73 20 0a 2a 2a 20 74 68 61 74  gisters .** that
1a250 20 61 72 65 20 75 73 65 64 20 61 73 20 61 6e 20   are used as an 
1a260 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b  unpacked index k
1a270 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73  ey. .**.** Repos
1a280 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50 31 20  ition cursor P1 
1a290 73 6f 20 74 68 61 74 20 20 69 74 20 70 6f 69 6e  so that  it poin
1a2a0 74 73 20 74 6f 20 74 68 65 20 73 6d 61 6c 6c 65  ts to the smalle
1a2b0 73 74 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a  st entry that .*
1a2c0 2a 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61  * is greater tha
1a2d0 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 2e  n the key value.
1a2e0 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f   If there are no
1a2f0 20 72 65 63 6f 72 64 73 20 67 72 65 61 74 65 72   records greater
1a300 20 74 68 61 6e 20 0a 2a 2a 20 74 68 65 20 6b 65   than .** the ke
1a310 79 20 61 6e 64 20 50 32 20 69 73 20 6e 6f 74 20  y and P2 is not 
1a320 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20  zero, then jump 
1a330 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  to P2..**.** See
1a340 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f   also: Found, No
1a350 74 46 6f 75 6e 64 2c 20 44 69 73 74 69 6e 63 74  tFound, Distinct
1a360 2c 20 53 65 65 6b 4c 74 2c 20 53 65 65 6b 47 65  , SeekLt, SeekGe
1a370 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f  , SeekLe.*/./* O
1a380 70 63 6f 64 65 3a 20 53 65 65 6b 4c 74 20 50 31  pcode: SeekLt P1
1a390 20 50 32 20 50 33 20 50 34 20 2a 20 0a 2a 2a 0a   P2 P3 P4 * .**.
1a3a0 2a 2a 20 49 66 20 63 75 72 73 6f 72 20 50 31 20  ** If cursor P1 
1a3b0 72 65 66 65 72 73 20 74 6f 20 61 6e 20 53 51 4c  refers to an SQL
1a3c0 20 74 61 62 6c 65 20 28 42 2d 54 72 65 65 20 74   table (B-Tree t
1a3d0 68 61 74 20 75 73 65 73 20 69 6e 74 65 67 65 72  hat uses integer
1a3e0 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20   keys), .** use 
1a3f0 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
1a400 69 73 74 65 72 20 50 33 20 61 73 20 61 20 6b 65  ister P3 as a ke
1a410 79 2e 20 49 66 20 63 75 72 73 6f 72 20 50 31 20  y. If cursor P1 
1a420 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e  refers .** to an
1a430 20 53 51 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e   SQL index, then
1a440 20 50 33 20 69 73 20 74 68 65 20 66 69 72 73 74   P3 is the first
1a450 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20   in an array of 
1a460 50 34 20 72 65 67 69 73 74 65 72 73 20 0a 2a 2a  P4 registers .**
1a470 20 74 68 61 74 20 61 72 65 20 75 73 65 64 20 61   that are used a
1a480 73 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e  s an unpacked in
1a490 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20  dex key. .**.** 
1a4a0 52 65 70 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f  Reposition curso
1a4b0 72 20 50 31 20 73 6f 20 74 68 61 74 20 20 69 74  r P1 so that  it
1a4c0 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 6c   points to the l
1a4d0 61 72 67 65 73 74 20 65 6e 74 72 79 20 74 68 61  argest entry tha
1a4e0 74 20 0a 2a 2a 20 69 73 20 6c 65 73 73 20 74 68  t .** is less th
1a4f0 61 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65  an the key value
1a500 2e 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6e  . If there are n
1a510 6f 20 72 65 63 6f 72 64 73 20 6c 65 73 73 20 74  o records less t
1a520 68 61 6e 20 0a 2a 2a 20 74 68 65 20 6b 65 79 20  han .** the key 
1a530 61 6e 64 20 50 32 20 69 73 20 6e 6f 74 20 7a 65  and P2 is not ze
1a540 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f  ro, then jump to
1a550 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61   P2..**.** See a
1a560 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46  lso: Found, NotF
1a570 6f 75 6e 64 2c 20 44 69 73 74 69 6e 63 74 2c 20  ound, Distinct, 
1a580 53 65 65 6b 47 74 2c 20 53 65 65 6b 47 65 2c 20  SeekGt, SeekGe, 
1a590 53 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63  SeekLe.*/./* Opc
1a5a0 6f 64 65 3a 20 53 65 65 6b 4c 65 20 50 31 20 50  ode: SeekLe P1 P
1a5b0 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20  2 P3 P4 *.**.** 
1a5c0 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66  If cursor P1 ref
1a5d0 65 72 73 20 74 6f 20 61 6e 20 53 51 4c 20 74 61  ers to an SQL ta
1a5e0 62 6c 65 20 28 42 2d 54 72 65 65 20 74 68 61 74  ble (B-Tree that
1a5f0 20 75 73 65 73 20 69 6e 74 65 67 65 72 20 6b 65   uses integer ke
1a600 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65  ys), .** use the
1a610 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
1a620 65 72 20 50 33 20 61 73 20 61 20 6b 65 79 2e 20  er P3 as a key. 
1a630 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66  If cursor P1 ref
1a640 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51  ers .** to an SQ
1a650 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 50 33  L index, then P3
1a660 20 69 73 20 74 68 65 20 66 69 72 73 74 20 69 6e   is the first in
1a670 20 61 6e 20 61 72 72 61 79 20 6f 66 20 50 34 20   an array of P4 
1a680 72 65 67 69 73 74 65 72 73 20 0a 2a 2a 20 74 68  registers .** th
1a690 61 74 20 61 72 65 20 75 73 65 64 20 61 73 20 61  at are used as a
1a6a0 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78  n unpacked index
1a6b0 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70   key. .**.** Rep
1a6c0 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50  osition cursor P
1a6d0 31 20 73 6f 20 74 68 61 74 20 69 74 20 70 6f 69  1 so that it poi
1a6e0 6e 74 73 20 74 6f 20 74 68 65 20 6c 61 72 67 65  nts to the large
1a6f0 73 74 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a  st entry that .*
1a700 2a 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 6f  * is less than o
1a710 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b  r equal to the k
1a720 65 79 20 76 61 6c 75 65 2e 20 49 66 20 74 68 65  ey value. If the
1a730 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64  re are no record
1a740 73 20 0a 2a 2a 20 6c 65 73 73 20 74 68 61 6e 20  s .** less than 
1a750 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20  or equal to the 
1a760 6b 65 79 20 61 6e 64 20 50 32 20 69 73 20 6e 6f  key and P2 is no
1a770 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d  t zero, then jum
1a780 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53  p to P2..**.** S
1a790 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20  ee also: Found, 
1a7a0 4e 6f 74 46 6f 75 6e 64 2c 20 44 69 73 74 69 6e  NotFound, Distin
1a7b0 63 74 2c 20 53 65 65 6b 47 74 2c 20 53 65 65 6b  ct, SeekGt, Seek
1a7c0 47 65 2c 20 53 65 65 6b 4c 74 0a 2a 2f 0a 63 61  Ge, SeekLt.*/.ca
1a7d0 73 65 20 4f 50 5f 53 65 65 6b 4c 74 3a 20 20 20  se OP_SeekLt:   
1a7e0 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
1a7f0 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65  n3 */.case OP_Se
1a800 65 6b 4c 65 3a 20 20 20 20 20 20 20 20 20 2f 2a  ekLe:         /*
1a810 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61   jump, in3 */.ca
1a820 73 65 20 4f 50 5f 53 65 65 6b 47 65 3a 20 20 20  se OP_SeekGe:   
1a830 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
1a840 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65  n3 */.case OP_Se
1a850 65 6b 47 74 3a 20 7b 20 20 20 20 20 20 20 2f 2a  ekGt: {       /*
1a860 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20   jump, in3 */.  
1a870 69 6e 74 20 72 65 73 3b 0a 20 20 69 6e 74 20 6f  int res;.  int o
1a880 63 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  c;.  VdbeCursor 
1a890 2a 70 43 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52  *pC;.  UnpackedR
1a8a0 65 63 6f 72 64 20 72 3b 0a 20 20 69 6e 74 20 6e  ecord r;.  int n
1a8b0 46 69 65 6c 64 3b 0a 20 20 69 36 34 20 69 4b 65  Field;.  i64 iKe
1a8c0 79 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 72  y;      /* The r
1a8d0 6f 77 69 64 20 77 65 20 61 72 65 20 74 6f 20 73  owid we are to s
1a8e0 65 65 6b 20 74 6f 20 2a 2f 0a 0a 20 20 61 73 73  eek to */..  ass
1a8f0 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
1a900 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
1a910 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72  ursor );.  asser
1a920 74 28 20 70 4f 70 2d 3e 70 32 21 3d 30 20 29 3b  t( pOp->p2!=0 );
1a930 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
1a940 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
1a950 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
1a960 61 73 73 65 72 74 28 20 70 43 2d 3e 70 73 65 75  assert( pC->pseu
1a970 64 6f 54 61 62 6c 65 52 65 67 3d 3d 30 20 29 3b  doTableReg==0 );
1a980 0a 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65  .  assert( OP_Se
1a990 65 6b 4c 65 20 3d 3d 20 4f 50 5f 53 65 65 6b 4c  ekLe == OP_SeekL
1a9a0 74 2b 31 20 29 3b 0a 20 20 61 73 73 65 72 74 28  t+1 );.  assert(
1a9b0 20 4f 50 5f 53 65 65 6b 47 65 20 3d 3d 20 4f 50   OP_SeekGe == OP
1a9c0 5f 53 65 65 6b 4c 74 2b 32 20 29 3b 0a 20 20 61  _SeekLt+2 );.  a
1a9d0 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 47 74  ssert( OP_SeekGt
1a9e0 20 3d 3d 20 4f 50 5f 53 65 65 6b 4c 74 2b 33 20   == OP_SeekLt+3 
1a9f0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
1aa00 3e 69 73 4f 72 64 65 72 65 64 20 29 3b 0a 20 20  >isOrdered );.  
1aa10 69 66 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21  if( pC->pCursor!
1aa20 3d 30 20 29 7b 0a 20 20 20 20 6f 63 20 3d 20 70  =0 ){.    oc = p
1aa30 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a 20 20 20 20  Op->opcode;.    
1aa40 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b  pC->nullRow = 0;
1aa50 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 69 73 54  .    if( pC->isT
1aa60 61 62 6c 65 20 29 7b 0a 20 20 20 20 20 20 2f 2a  able ){.      /*
1aa70 20 54 68 65 20 69 6e 70 75 74 20 76 61 6c 75 65   The input value
1aa80 20 69 6e 20 50 33 20 6d 69 67 68 74 20 62 65 20   in P3 might be 
1aa90 6f 66 20 61 6e 79 20 74 79 70 65 3a 20 69 6e 74  of any type: int
1aaa0 65 67 65 72 2c 20 72 65 61 6c 2c 20 73 74 72 69  eger, real, stri
1aab0 6e 67 2c 0a 20 20 20 20 20 20 2a 2a 20 62 6c 6f  ng,.      ** blo
1aac0 62 2c 20 6f 72 20 4e 55 4c 4c 2e 20 20 42 75 74  b, or NULL.  But
1aad0 20 69 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20   it needs to be 
1aae0 61 6e 20 69 6e 74 65 67 65 72 20 62 65 66 6f 72  an integer befor
1aaf0 65 20 77 65 20 63 61 6e 20 64 6f 0a 20 20 20 20  e we can do.    
1ab00 20 20 2a 2a 20 74 68 65 20 73 65 65 6b 2c 20 73    ** the seek, s
1ab10 6f 20 63 6f 76 65 72 74 20 69 74 2e 20 2a 2f 0a  o covert it. */.
1ab20 20 20 20 20 20 20 70 49 6e 33 20 3d 20 26 61 4d        pIn3 = &aM
1ab30 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20  em[pOp->p3];.   
1ab40 20 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41     applyNumericA
1ab50 66 66 69 6e 69 74 79 28 70 49 6e 33 29 3b 0a 20  ffinity(pIn3);. 
1ab60 20 20 20 20 20 69 4b 65 79 20 3d 20 73 71 6c 69       iKey = sqli
1ab70 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28  te3VdbeIntValue(
1ab80 70 49 6e 33 29 3b 0a 20 20 20 20 20 20 70 43 2d  pIn3);.      pC-
1ab90 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20  >rowidIsValid = 
1aba0 30 3b 0a 0a 20 20 20 20 20 20 2f 2a 20 49 66 20  0;..      /* If 
1abb0 74 68 65 20 50 33 20 76 61 6c 75 65 20 63 6f 75  the P3 value cou
1abc0 6c 64 20 6e 6f 74 20 62 65 20 63 6f 6e 76 65 72  ld not be conver
1abd0 74 65 64 20 69 6e 74 6f 20 61 6e 20 69 6e 74 65  ted into an inte
1abe0 67 65 72 20 77 69 74 68 6f 75 74 0a 20 20 20 20  ger without.    
1abf0 20 20 2a 2a 20 6c 6f 73 73 20 6f 66 20 69 6e 66    ** loss of inf
1ac00 6f 72 6d 61 74 69 6f 6e 2c 20 74 68 65 6e 20 73  ormation, then s
1ac10 70 65 63 69 61 6c 20 70 72 6f 63 65 73 73 69 6e  pecial processin
1ac20 67 20 69 73 20 72 65 71 75 69 72 65 64 2e 2e 2e  g is required...
1ac30 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 28 70   */.      if( (p
1ac40 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In3->flags & MEM
1ac50 5f 49 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20  _Int)==0 ){.    
1ac60 20 20 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66      if( (pIn3->f
1ac70 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 29  lags & MEM_Real)
1ac80 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20  ==0 ){.         
1ac90 20 2f 2a 20 49 66 20 74 68 65 20 50 33 20 76 61   /* If the P3 va
1aca0 6c 75 65 20 63 61 6e 6e 6f 74 20 62 65 20 63 6f  lue cannot be co
1acb0 6e 76 65 72 74 65 64 20 69 6e 74 6f 20 61 6e 79  nverted into any
1acc0 20 6b 69 6e 64 20 6f 66 20 61 20 6e 75 6d 62 65   kind of a numbe
1acd0 72 2c 0a 20 20 20 20 20 20 20 20 20 20 2a 2a 20  r,.          ** 
1ace0 74 68 65 6e 20 74 68 65 20 73 65 65 6b 20 69 73  then the seek is
1acf0 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65 2c 20 73   not possible, s
1ad00 6f 20 6a 75 6d 70 20 74 6f 20 50 32 20 2a 2f 0a  o jump to P2 */.
1ad10 20 20 20 20 20 20 20 20 20 20 70 63 20 3d 20 70            pc = p
1ad20 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20  Op->p2 - 1;.    
1ad30 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
1ad40 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 2f       }.        /
1ad50 2a 20 49 66 20 77 65 20 72 65 61 63 68 20 74 68  * If we reach th
1ad60 69 73 20 70 6f 69 6e 74 2c 20 74 68 65 6e 20 74  is point, then t
1ad70 68 65 20 50 33 20 76 61 6c 75 65 20 6d 75 73 74  he P3 value must
1ad80 20 62 65 20 61 20 66 6c 6f 61 74 69 6e 67 0a 20   be a floating. 
1ad90 20 20 20 20 20 20 20 2a 2a 20 70 6f 69 6e 74 20         ** point 
1ada0 6e 75 6d 62 65 72 2e 20 2a 2f 0a 20 20 20 20 20  number. */.     
1adb0 20 20 20 61 73 73 65 72 74 28 20 28 70 49 6e 33     assert( (pIn3
1adc0 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65  ->flags & MEM_Re
1add0 61 6c 29 21 3d 30 20 29 3b 0a 0a 20 20 20 20 20  al)!=0 );..     
1ade0 20 20 20 69 66 28 20 69 4b 65 79 3d 3d 53 4d 41     if( iKey==SMA
1adf0 4c 4c 45 53 54 5f 49 4e 54 36 34 20 26 26 20 28  LLEST_INT64 && (
1ae00 70 49 6e 33 2d 3e 72 3c 28 64 6f 75 62 6c 65 29  pIn3->r<(double)
1ae10 69 4b 65 79 20 7c 7c 20 70 49 6e 33 2d 3e 72 3e  iKey || pIn3->r>
1ae20 30 29 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  0) ){.          
1ae30 2f 2a 20 54 68 65 20 50 33 20 76 61 6c 75 65 20  /* The P3 value 
1ae40 69 73 20 74 6f 6f 20 6c 61 72 67 65 20 69 6e 20  is too large in 
1ae50 6d 61 67 6e 69 74 75 64 65 20 74 6f 20 62 65 20  magnitude to be 
1ae60 65 78 70 72 65 73 73 65 64 20 61 73 20 61 6e 0a  expressed as an.
1ae70 20 20 20 20 20 20 20 20 20 20 2a 2a 20 69 6e 74            ** int
1ae80 65 67 65 72 2e 20 2a 2f 0a 20 20 20 20 20 20 20  eger. */.       
1ae90 20 20 20 72 65 73 20 3d 20 31 3b 0a 20 20 20 20     res = 1;.    
1aea0 20 20 20 20 20 20 69 66 28 20 70 49 6e 33 2d 3e        if( pIn3->
1aeb0 72 3c 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20  r<0 ){.         
1aec0 20 20 20 69 66 28 20 6f 63 3e 3d 4f 50 5f 53 65     if( oc>=OP_Se
1aed0 65 6b 47 65 20 29 7b 20 20 61 73 73 65 72 74 28  ekGe ){  assert(
1aee0 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 65 20 7c   oc==OP_SeekGe |
1aef0 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 74 20  | oc==OP_SeekGt 
1af00 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  );.             
1af10 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
1af20 65 65 46 69 72 73 74 28 70 43 2d 3e 70 43 75 72  eeFirst(pC->pCur
1af30 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20  sor, &res);.    
1af40 20 20 20 20 20 20 20 20 20 20 69 66 28 20 72 63            if( rc
1af50 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f  !=SQLITE_OK ) go
1af60 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
1af70 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 20  error;.         
1af80 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 7d     }.          }
1af90 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20  else{.          
1afa0 20 20 69 66 28 20 6f 63 3c 3d 4f 50 5f 53 65 65    if( oc<=OP_See
1afb0 6b 4c 65 20 29 7b 20 20 61 73 73 65 72 74 28 20  kLe ){  assert( 
1afc0 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 74 20 7c 7c  oc==OP_SeekLt ||
1afd0 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 65 20 29   oc==OP_SeekLe )
1afe0 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;.              
1aff0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
1b000 65 4c 61 73 74 28 70 43 2d 3e 70 43 75 72 73 6f  eLast(pC->pCurso
1b010 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20  r, &res);.      
1b020 20 20 20 20 20 20 20 20 69 66 28 20 72 63 21 3d          if( rc!=
1b030 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f  SQLITE_OK ) goto
1b040 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
1b050 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 20 20 20  ror;.           
1b060 20 7d 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20   }.          }. 
1b070 20 20 20 20 20 20 20 20 20 69 66 28 20 72 65 73           if( res
1b080 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20   ){.            
1b090 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
1b0a0 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20  ;.          }.  
1b0b0 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
1b0c0 20 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28         }else if(
1b0d0 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 74 20 7c   oc==OP_SeekLt |
1b0e0 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 65 20  | oc==OP_SeekGe 
1b0f0 29 7b 0a 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ){.          /* 
1b100 55 73 65 20 74 68 65 20 63 65 69 6c 69 6e 67 28  Use the ceiling(
1b110 29 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 63 6f  ) function to co
1b120 6e 76 65 72 74 20 72 65 61 6c 2d 3e 69 6e 74 20  nvert real->int 
1b130 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 69 66 28  */.          if(
1b140 20 70 49 6e 33 2d 3e 72 20 3e 20 28 64 6f 75 62   pIn3->r > (doub
1b150 6c 65 29 69 4b 65 79 20 29 20 69 4b 65 79 2b 2b  le)iKey ) iKey++
1b160 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b  ;.        }else{
1b170 0a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73  .          /* Us
1b180 65 20 74 68 65 20 66 6c 6f 6f 72 28 29 20 66 75  e the floor() fu
1b190 6e 63 74 69 6f 6e 20 74 6f 20 63 6f 6e 76 65 72  nction to conver
1b1a0 74 20 72 65 61 6c 2d 3e 69 6e 74 20 2a 2f 0a 20  t real->int */. 
1b1b0 20 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28           assert(
1b1c0 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 65 20 7c   oc==OP_SeekLe |
1b1d0 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 74 20  | oc==OP_SeekGt 
1b1e0 29 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28  );.          if(
1b1f0 20 70 49 6e 33 2d 3e 72 20 3c 20 28 64 6f 75 62   pIn3->r < (doub
1b200 6c 65 29 69 4b 65 79 20 29 20 69 4b 65 79 2d 2d  le)iKey ) iKey--
1b210 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
1b220 20 20 7d 20 0a 20 20 20 20 20 20 72 63 20 3d 20    } .      rc = 
1b230 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65  sqlite3BtreeMove
1b240 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e 70  toUnpacked(pC->p
1b250 43 75 72 73 6f 72 2c 20 30 2c 20 28 75 36 34 29  Cursor, 0, (u64)
1b260 69 4b 65 79 2c 20 30 2c 20 26 72 65 73 29 3b 0a  iKey, 0, &res);.
1b270 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
1b280 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
1b290 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
1b2a0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
1b2b0 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 72 65    }.      if( re
1b2c0 73 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  s==0 ){.        
1b2d0 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64  pC->rowidIsValid
1b2e0 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 70 43   = 1;.        pC
1b2f0 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 69 4b  ->lastRowid = iK
1b300 65 79 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ey;.      }.    
1b310 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 6e 46 69  }else{.      nFi
1b320 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b  eld = pOp->p4.i;
1b330 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
1b340 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49  Op->p4type==P4_I
1b350 4e 54 33 32 20 29 3b 0a 20 20 20 20 20 20 61 73  NT32 );.      as
1b360 73 65 72 74 28 20 6e 46 69 65 6c 64 3e 30 20 29  sert( nField>0 )
1b370 3b 0a 20 20 20 20 20 20 72 2e 70 4b 65 79 49 6e  ;.      r.pKeyIn
1b380 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66  fo = pC->pKeyInf
1b390 6f 3b 0a 20 20 20 20 20 20 72 2e 6e 46 69 65 6c  o;.      r.nFiel
1b3a0 64 20 3d 20 28 75 31 36 29 6e 46 69 65 6c 64 3b  d = (u16)nField;
1b3b0 0a 0a 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e  ..      /* The n
1b3c0 65 78 74 20 6c 69 6e 65 20 6f 66 20 63 6f 64 65  ext line of code
1b3d0 20 63 6f 6d 70 75 74 65 73 20 61 73 20 66 6f 6c   computes as fol
1b3e0 6c 6f 77 73 2c 20 6f 6e 6c 79 20 66 61 73 74 65  lows, only faste
1b3f0 72 3a 0a 20 20 20 20 20 20 2a 2a 20 20 20 69 66  r:.      **   if
1b400 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 74 20  ( oc==OP_SeekGt 
1b410 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 65  || oc==OP_SeekLe
1b420 20 29 7b 0a 20 20 20 20 20 20 2a 2a 20 20 20 20   ){.      **    
1b430 20 72 2e 66 6c 61 67 73 20 3d 20 55 4e 50 41 43   r.flags = UNPAC
1b440 4b 45 44 5f 49 4e 43 52 4b 45 59 3b 0a 20 20 20  KED_INCRKEY;.   
1b450 20 20 20 2a 2a 20 20 20 7d 65 6c 73 65 7b 0a 20     **   }else{. 
1b460 20 20 20 20 20 2a 2a 20 20 20 20 20 72 2e 66 6c       **     r.fl
1b470 61 67 73 20 3d 20 30 3b 0a 20 20 20 20 20 20 2a  ags = 0;.      *
1b480 2a 20 20 20 7d 0a 20 20 20 20 20 20 2a 2f 0a 20  *   }.      */. 
1b490 20 20 20 20 20 72 2e 66 6c 61 67 73 20 3d 20 28       r.flags = (
1b4a0 75 31 36 29 28 55 4e 50 41 43 4b 45 44 5f 49 4e  u16)(UNPACKED_IN
1b4b0 43 52 4b 45 59 20 2a 20 28 31 20 26 20 28 6f 63  CRKEY * (1 & (oc
1b4c0 20 2d 20 4f 50 5f 53 65 65 6b 4c 74 29 29 29 3b   - OP_SeekLt)));
1b4d0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6f  .      assert( o
1b4e0 63 21 3d 4f 50 5f 53 65 65 6b 47 74 20 7c 7c 20  c!=OP_SeekGt || 
1b4f0 72 2e 66 6c 61 67 73 3d 3d 55 4e 50 41 43 4b 45  r.flags==UNPACKE
1b500 44 5f 49 4e 43 52 4b 45 59 20 29 3b 0a 20 20 20  D_INCRKEY );.   
1b510 20 20 20 61 73 73 65 72 74 28 20 6f 63 21 3d 4f     assert( oc!=O
1b520 50 5f 53 65 65 6b 4c 65 20 7c 7c 20 72 2e 66 6c  P_SeekLe || r.fl
1b530 61 67 73 3d 3d 55 4e 50 41 43 4b 45 44 5f 49 4e  ags==UNPACKED_IN
1b540 43 52 4b 45 59 20 29 3b 0a 20 20 20 20 20 20 61  CRKEY );.      a
1b550 73 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65  ssert( oc!=OP_Se
1b560 65 6b 47 65 20 7c 7c 20 72 2e 66 6c 61 67 73 3d  ekGe || r.flags=
1b570 3d 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  =0 );.      asse
1b580 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 4c  rt( oc!=OP_SeekL
1b590 74 20 7c 7c 20 72 2e 66 6c 61 67 73 3d 3d 30 20  t || r.flags==0 
1b5a0 29 3b 0a 0a 20 20 20 20 20 20 72 2e 61 4d 65 6d  );..      r.aMem
1b5b0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
1b5c0 5d 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  ];.#ifdef SQLITE
1b5d0 5f 44 45 42 55 47 0a 20 20 20 20 20 20 7b 20 69  _DEBUG.      { i
1b5e0 6e 74 20 69 3b 20 66 6f 72 28 69 3d 30 3b 20 69  nt i; for(i=0; i
1b5f0 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b 29 20  <r.nField; i++) 
1b600 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
1b610 69 64 28 26 72 2e 61 4d 65 6d 5b 69 5d 29 20 29  id(&r.aMem[i]) )
1b620 3b 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 20  ; }.#endif.     
1b630 20 45 78 70 61 6e 64 42 6c 6f 62 28 72 2e 61 4d   ExpandBlob(r.aM
1b640 65 6d 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  em);.      rc = 
1b650 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65  sqlite3BtreeMove
1b660 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e 70  toUnpacked(pC->p
1b670 43 75 72 73 6f 72 2c 20 26 72 2c 20 30 2c 20 30  Cursor, &r, 0, 0
1b680 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20 69  , &res);.      i
1b690 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
1b6a0 20 29 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f   ){.        goto
1b6b0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
1b6c0 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  ror;.      }.   
1b6d0 20 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61     pC->rowidIsVa
1b6e0 6c 69 64 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20  lid = 0;.    }. 
1b6f0 20 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d     pC->deferredM
1b700 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20 20 70  oveto = 0;.    p
1b710 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
1b720 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 23 69   CACHE_STALE;.#i
1b730 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54  fdef SQLITE_TEST
1b740 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 65 61  .    sqlite3_sea
1b750 72 63 68 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e  rch_count++;.#en
1b760 64 69 66 0a 20 20 20 20 69 66 28 20 6f 63 3e 3d  dif.    if( oc>=
1b770 4f 50 5f 53 65 65 6b 47 65 20 29 7b 20 20 61 73  OP_SeekGe ){  as
1b780 73 65 72 74 28 20 6f 63 3d 3d 4f 50 5f 53 65 65  sert( oc==OP_See
1b790 6b 47 65 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65  kGe || oc==OP_Se
1b7a0 65 6b 47 74 20 29 3b 0a 20 20 20 20 20 20 69 66  ekGt );.      if
1b7b0 28 20 72 65 73 3c 30 20 7c 7c 20 28 72 65 73 3d  ( res<0 || (res=
1b7c0 3d 30 20 26 26 20 6f 63 3d 3d 4f 50 5f 53 65 65  =0 && oc==OP_See
1b7d0 6b 47 74 29 20 29 7b 0a 20 20 20 20 20 20 20 20  kGt) ){.        
1b7e0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
1b7f0 65 4e 65 78 74 28 70 43 2d 3e 70 43 75 72 73 6f  eNext(pC->pCurso
1b800 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20  r, &res);.      
1b810 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
1b820 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74  _OK ) goto abort
1b830 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
1b840 20 20 20 20 20 20 20 70 43 2d 3e 72 6f 77 69 64         pC->rowid
1b850 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 20  IsValid = 0;.   
1b860 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
1b870 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 20 20 20    res = 0;.     
1b880 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20   }.    }else{.  
1b890 20 20 20 20 61 73 73 65 72 74 28 20 6f 63 3d 3d      assert( oc==
1b8a0 4f 50 5f 53 65 65 6b 4c 74 20 7c 7c 20 6f 63 3d  OP_SeekLt || oc=
1b8b0 3d 4f 50 5f 53 65 65 6b 4c 65 20 29 3b 0a 20 20  =OP_SeekLe );.  
1b8c0 20 20 20 20 69 66 28 20 72 65 73 3e 30 20 7c 7c      if( res>0 ||
1b8d0 20 28 72 65 73 3d 3d 30 20 26 26 20 6f 63 3d 3d   (res==0 && oc==
1b8e0 4f 50 5f 53 65 65 6b 4c 74 29 20 29 7b 0a 20 20  OP_SeekLt) ){.  
1b8f0 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
1b900 65 33 42 74 72 65 65 50 72 65 76 69 6f 75 73 28  e3BtreePrevious(
1b910 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72 65  pC->pCursor, &re
1b920 73 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  s);.        if( 
1b930 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20  rc!=SQLITE_OK ) 
1b940 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
1b950 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20  o_error;.       
1b960 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69   pC->rowidIsVali
1b970 64 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 65 6c  d = 0;.      }el
1b980 73 65 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 72  se{.        /* r
1b990 65 73 20 6d 69 67 68 74 20 62 65 20 6e 65 67 61  es might be nega
1b9a0 74 69 76 65 20 62 65 63 61 75 73 65 20 74 68 65  tive because the
1b9b0 20 74 61 62 6c 65 20 69 73 20 65 6d 70 74 79 2e   table is empty.
1b9c0 20 20 43 68 65 63 6b 20 74 6f 0a 20 20 20 20 20    Check to.     
1b9d0 20 20 20 2a 2a 20 73 65 65 20 69 66 20 74 68 69     ** see if thi
1b9e0 73 20 69 73 20 74 68 65 20 63 61 73 65 2e 0a 20  s is the case.. 
1b9f0 20 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20         */.      
1ba00 20 20 72 65 73 20 3d 20 73 71 6c 69 74 65 33 42    res = sqlite3B
1ba10 74 72 65 65 45 6f 66 28 70 43 2d 3e 70 43 75 72  treeEof(pC->pCur
1ba20 73 6f 72 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  sor);.      }.  
1ba30 20 20 7d 0a 20 20 20 20 61 73 73 65 72 74 28 20    }.    assert( 
1ba40 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 20  pOp->p2>0 );.   
1ba50 20 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20   if( res ){.    
1ba60 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
1ba70 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73   1;.    }.  }els
1ba80 65 7b 0a 20 20 20 20 2f 2a 20 54 68 69 73 20 68  e{.    /* This h
1ba90 61 70 70 65 6e 73 20 77 68 65 6e 20 61 74 74 65  appens when atte
1baa0 6d 70 74 69 6e 67 20 74 6f 20 6f 70 65 6e 20 74  mpting to open t
1bab0 68 65 20 73 71 6c 69 74 65 33 5f 6d 61 73 74 65  he sqlite3_maste
1bac0 72 20 74 61 62 6c 65 0a 20 20 20 20 2a 2a 20 66  r table.    ** f
1bad0 6f 72 20 72 65 61 64 20 61 63 63 65 73 73 20 72  or read access r
1bae0 65 74 75 72 6e 73 20 53 51 4c 49 54 45 5f 45 4d  eturns SQLITE_EM
1baf0 50 54 59 2e 20 49 6e 20 74 68 69 73 20 63 61 73  PTY. In this cas
1bb00 65 20 61 6c 77 61 79 73 0a 20 20 20 20 2a 2a 20  e always.    ** 
1bb10 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 20 28 73  take the jump (s
1bb20 69 6e 63 65 20 74 68 65 72 65 20 61 72 65 20 6e  ince there are n
1bb30 6f 20 72 65 63 6f 72 64 73 20 69 6e 20 74 68 65  o records in the
1bb40 20 74 61 62 6c 65 29 2e 0a 20 20 20 20 2a 2f 0a   table)..    */.
1bb50 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
1bb60 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61   - 1;.  }.  brea
1bb70 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
1bb80 20 53 65 65 6b 20 50 31 20 50 32 20 2a 20 2a 20   Seek P1 P2 * * 
1bb90 2a 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 6e  *.**.** P1 is an
1bba0 20 6f 70 65 6e 20 74 61 62 6c 65 20 63 75 72 73   open table curs
1bbb0 6f 72 20 61 6e 64 20 50 32 20 69 73 20 61 20 72  or and P2 is a r
1bbc0 6f 77 69 64 20 69 6e 74 65 67 65 72 2e 20 20 41  owid integer.  A
1bbd0 72 72 61 6e 67 65 0a 2a 2a 20 66 6f 72 20 50 31  rrange.** for P1
1bbe0 20 74 6f 20 6d 6f 76 65 20 73 6f 20 74 68 61 74   to move so that
1bbf0 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68   it points to th
1bc00 65 20 72 6f 77 69 64 20 67 69 76 65 6e 20 62 79  e rowid given by
1bc10 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20   P2..**.** This 
1bc20 69 73 20 61 63 74 75 61 6c 6c 79 20 61 20 64 65  is actually a de
1bc30 66 65 72 72 65 64 20 73 65 65 6b 2e 20 20 4e 6f  ferred seek.  No
1bc40 74 68 69 6e 67 20 61 63 74 75 61 6c 6c 79 20 68  thing actually h
1bc50 61 70 70 65 6e 73 20 75 6e 74 69 6c 0a 2a 2a 20  appens until.** 
1bc60 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 75 73  the cursor is us
1bc70 65 64 20 74 6f 20 72 65 61 64 20 61 20 72 65 63  ed to read a rec
1bc80 6f 72 64 2e 20 20 54 68 61 74 20 77 61 79 2c 20  ord.  That way, 
1bc90 69 66 20 6e 6f 20 72 65 61 64 73 0a 2a 2a 20 6f  if no reads.** o
1bca0 63 63 75 72 2c 20 6e 6f 20 75 6e 6e 65 63 65 73  ccur, no unneces
1bcb0 73 61 72 79 20 49 2f 4f 20 68 61 70 70 65 6e 73  sary I/O happens
1bcc0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65  ..*/.case OP_See
1bcd0 6b 3a 20 7b 20 20 20 20 2f 2a 20 69 6e 32 20 2a  k: {    /* in2 *
1bce0 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  /.  VdbeCursor *
1bcf0 70 43 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  pC;..  assert( p
1bd00 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
1bd10 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
1bd20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
1bd30 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
1bd40 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
1bd50 20 20 69 66 28 20 41 4c 57 41 59 53 28 70 43 2d    if( ALWAYS(pC-
1bd60 3e 70 43 75 72 73 6f 72 21 3d 30 29 20 29 7b 0a  >pCursor!=0) ){.
1bd70 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
1bd80 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 20 20 70  isTable );.    p
1bd90 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a  C->nullRow = 0;.
1bda0 20 20 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d      pIn2 = &aMem
1bdb0 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 70  [pOp->p2];.    p
1bdc0 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 20  C->movetoTarget 
1bdd0 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74  = sqlite3VdbeInt
1bde0 56 61 6c 75 65 28 70 49 6e 32 29 3b 0a 20 20 20  Value(pIn2);.   
1bdf0 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69   pC->rowidIsVali
1be00 64 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e 64  d = 0;.    pC->d
1be10 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20  eferredMoveto = 
1be20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  1;.  }.  break;.
1be30 7d 0a 20 20 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  }.  ../* Opcode:
1be40 20 46 6f 75 6e 64 20 50 31 20 50 32 20 50 33 20   Found P1 P2 P3 
1be50 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34  P4 *.**.** If P4
1be60 3d 3d 30 20 74 68 65 6e 20 72 65 67 69 73 74 65  ==0 then registe
1be70 72 20 50 33 20 68 6f 6c 64 73 20 61 20 62 6c 6f  r P3 holds a blo
1be80 62 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79  b constructed by
1be90 20 4d 61 6b 65 52 65 63 6f 72 64 2e 20 20 49 66   MakeRecord.  If
1bea0 0a 2a 2a 20 50 34 3e 30 20 74 68 65 6e 20 72 65  .** P4>0 then re
1beb0 67 69 73 74 65 72 20 50 33 20 69 73 20 74 68 65  gister P3 is the
1bec0 20 66 69 72 73 74 20 6f 66 20 50 34 20 72 65 67   first of P4 reg
1bed0 69 73 74 65 72 73 20 74 68 61 74 20 66 6f 72 6d  isters that form
1bee0 20 61 6e 20 75 6e 70 61 63 6b 65 64 0a 2a 2a 20   an unpacked.** 
1bef0 72 65 63 6f 72 64 2e 0a 2a 2a 0a 2a 2a 20 43 75  record..**.** Cu
1bf00 72 73 6f 72 20 50 31 20 69 73 20 6f 6e 20 61 6e  rsor P1 is on an
1bf10 20 69 6e 64 65 78 20 62 74 72 65 65 2e 20 20 49   index btree.  I
1bf20 66 20 74 68 65 20 72 65 63 6f 72 64 20 69 64 65  f the record ide
1bf30 6e 74 69 66 69 65 64 20 62 79 20 50 33 20 61 6e  ntified by P3 an
1bf40 64 20 50 34 0a 2a 2a 20 69 73 20 61 20 70 72 65  d P4.** is a pre
1bf50 66 69 78 20 6f 66 20 61 6e 79 20 65 6e 74 72 79  fix of any entry
1bf60 20 69 6e 20 50 31 20 74 68 65 6e 20 61 20 6a 75   in P1 then a ju
1bf70 6d 70 20 69 73 20 6d 61 64 65 20 74 6f 20 50 32  mp is made to P2
1bf80 20 61 6e 64 0a 2a 2a 20 50 31 20 69 73 20 6c 65   and.** P1 is le
1bf90 66 74 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74  ft pointing at t
1bfa0 68 65 20 6d 61 74 63 68 69 6e 67 20 65 6e 74 72  he matching entr
1bfb0 79 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  y..*/./* Opcode:
1bfc0 20 4e 6f 74 46 6f 75 6e 64 20 50 31 20 50 32 20   NotFound P1 P2 
1bfd0 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 49 66  P3 P4 *.**.** If
1bfe0 20 50 34 3d 3d 30 20 74 68 65 6e 20 72 65 67 69   P4==0 then regi
1bff0 73 74 65 72 20 50 33 20 68 6f 6c 64 73 20 61 20  ster P3 holds a 
1c000 62 6c 6f 62 20 63 6f 6e 73 74 72 75 63 74 65 64  blob constructed
1c010 20 62 79 20 4d 61 6b 65 52 65 63 6f 72 64 2e 20   by MakeRecord. 
1c020 20 49 66 0a 2a 2a 20 50 34 3e 30 20 74 68 65 6e   If.** P4>0 then
1c030 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20   register P3 is 
1c040 74 68 65 20 66 69 72 73 74 20 6f 66 20 50 34 20  the first of P4 
1c050 72 65 67 69 73 74 65 72 73 20 74 68 61 74 20 66  registers that f
1c060 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 0a  orm an unpacked.
1c070 2a 2a 20 72 65 63 6f 72 64 2e 0a 2a 2a 20 0a 2a  ** record..** .*
1c080 2a 20 43 75 72 73 6f 72 20 50 31 20 69 73 20 6f  * Cursor P1 is o
1c090 6e 20 61 6e 20 69 6e 64 65 78 20 62 74 72 65 65  n an index btree
1c0a0 2e 20 20 49 66 20 74 68 65 20 72 65 63 6f 72 64  .  If the record
1c0b0 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 50   identified by P
1c0c0 33 20 61 6e 64 20 50 34 0a 2a 2a 20 69 73 20 6e  3 and P4.** is n
1c0d0 6f 74 20 74 68 65 20 70 72 65 66 69 78 20 6f 66  ot the prefix of
1c0e0 20 61 6e 79 20 65 6e 74 72 79 20 69 6e 20 50 31   any entry in P1
1c0f0 20 74 68 65 6e 20 61 20 6a 75 6d 70 20 69 73 20   then a jump is 
1c100 6d 61 64 65 20 74 6f 20 50 32 2e 20 20 49 66 20  made to P2.  If 
1c110 50 31 20 0a 2a 2a 20 64 6f 65 73 20 63 6f 6e 74  P1 .** does cont
1c120 61 69 6e 20 61 6e 20 65 6e 74 72 79 20 77 68 6f  ain an entry who
1c130 73 65 20 70 72 65 66 69 78 20 6d 61 74 63 68 65  se prefix matche
1c140 73 20 74 68 65 20 50 33 2f 50 34 20 72 65 63 6f  s the P3/P4 reco
1c150 72 64 20 74 68 65 6e 20 63 6f 6e 74 72 6f 6c 0a  rd then control.
1c160 2a 2a 20 66 61 6c 6c 73 20 74 68 72 6f 75 67 68  ** falls through
1c170 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73   to the next ins
1c180 74 72 75 63 74 69 6f 6e 20 61 6e 64 20 50 31 20  truction and P1 
1c190 69 73 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67  is left pointing
1c1a0 20 61 74 20 74 68 65 0a 2a 2a 20 6d 61 74 63 68   at the.** match
1c1b0 69 6e 67 20 65 6e 74 72 79 2e 0a 2a 2a 0a 2a 2a  ing entry..**.**
1c1c0 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64   See also: Found
1c1d0 2c 20 4e 6f 74 45 78 69 73 74 73 2c 20 49 73 55  , NotExists, IsU
1c1e0 6e 69 71 75 65 0a 2a 2f 0a 63 61 73 65 20 4f 50  nique.*/.case OP
1c1f0 5f 4e 6f 74 46 6f 75 6e 64 3a 20 20 20 20 20 20  _NotFound:      
1c200 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f   /* jump, in3 */
1c210 0a 63 61 73 65 20 4f 50 5f 46 6f 75 6e 64 3a 20  .case OP_Found: 
1c220 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70  {        /* jump
1c230 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 61  , in3 */.  int a
1c240 6c 72 65 61 64 79 45 78 69 73 74 73 3b 0a 20 20  lreadyExists;.  
1c250 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
1c260 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 55 6e 70    int res;.  Unp
1c270 61 63 6b 65 64 52 65 63 6f 72 64 20 2a 70 49 64  ackedRecord *pId
1c280 78 4b 65 79 3b 0a 20 20 55 6e 70 61 63 6b 65 64  xKey;.  Unpacked
1c290 52 65 63 6f 72 64 20 72 3b 0a 20 20 63 68 61 72  Record r;.  char
1c2a0 20 61 54 65 6d 70 52 65 63 5b 52 4f 55 4e 44 38   aTempRec[ROUND8
1c2b0 28 73 69 7a 65 6f 66 28 55 6e 70 61 63 6b 65 64  (sizeof(Unpacked
1c2c0 52 65 63 6f 72 64 29 29 20 2b 20 73 69 7a 65 6f  Record)) + sizeo
1c2d0 66 28 4d 65 6d 29 2a 33 20 2b 20 37 5d 3b 0a 0a  f(Mem)*3 + 7];..
1c2e0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45  #ifdef SQLITE_TE
1c2f0 53 54 0a 20 20 73 71 6c 69 74 65 33 5f 66 6f 75  ST.  sqlite3_fou
1c300 6e 64 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64  nd_count++;.#end
1c310 69 66 0a 0a 20 20 61 6c 72 65 61 64 79 45 78 69  if..  alreadyExi
1c320 73 74 73 20 3d 20 30 3b 0a 20 20 61 73 73 65 72  sts = 0;.  asser
1c330 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
1c340 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
1c350 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28  sor );.  assert(
1c360 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
1c370 5f 49 4e 54 33 32 20 29 3b 0a 20 20 70 43 20 3d  _INT32 );.  pC =
1c380 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
1c390 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
1c3a0 21 3d 30 20 29 3b 0a 20 20 70 49 6e 33 20 3d 20  !=0 );.  pIn3 = 
1c3b0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
1c3c0 20 20 69 66 28 20 41 4c 57 41 59 53 28 70 43 2d    if( ALWAYS(pC-
1c3d0 3e 70 43 75 72 73 6f 72 21 3d 30 29 20 29 7b 0a  >pCursor!=0) ){.
1c3e0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d  .    assert( pC-
1c3f0 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29 3b 0a 20  >isTable==0 );. 
1c400 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 2e 69     if( pOp->p4.i
1c410 3e 30 20 29 7b 0a 20 20 20 20 20 20 72 2e 70 4b  >0 ){.      r.pK
1c420 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65  eyInfo = pC->pKe
1c430 79 49 6e 66 6f 3b 0a 20 20 20 20 20 20 72 2e 6e  yInfo;.      r.n
1c440 46 69 65 6c 64 20 3d 20 28 75 31 36 29 70 4f 70  Field = (u16)pOp
1c450 2d 3e 70 34 2e 69 3b 0a 20 20 20 20 20 20 72 2e  ->p4.i;.      r.
1c460 61 4d 65 6d 20 3d 20 70 49 6e 33 3b 0a 23 69 66  aMem = pIn3;.#if
1c470 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
1c480 0a 20 20 20 20 20 20 7b 20 69 6e 74 20 69 3b 20  .      { int i; 
1c490 66 6f 72 28 69 3d 30 3b 20 69 3c 72 2e 6e 46 69  for(i=0; i<r.nFi
1c4a0 65 6c 64 3b 20 69 2b 2b 29 20 61 73 73 65 72 74  eld; i++) assert
1c4b0 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 72 2e  ( memIsValid(&r.
1c4c0 61 4d 65 6d 5b 69 5d 29 20 29 3b 20 7d 0a 23 65  aMem[i]) ); }.#e
1c4d0 6e 64 69 66 0a 20 20 20 20 20 20 72 2e 66 6c 61  ndif.      r.fla
1c4e0 67 73 20 3d 20 55 4e 50 41 43 4b 45 44 5f 50 52  gs = UNPACKED_PR
1c4f0 45 46 49 58 5f 4d 41 54 43 48 3b 0a 20 20 20 20  EFIX_MATCH;.    
1c500 20 20 70 49 64 78 4b 65 79 20 3d 20 26 72 3b 0a    pIdxKey = &r;.
1c510 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
1c520 20 61 73 73 65 72 74 28 20 70 49 6e 33 2d 3e 66   assert( pIn3->f
1c530 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20  lags & MEM_Blob 
1c540 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
1c550 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20   (pIn3->flags & 
1c560 4d 45 4d 5f 5a 65 72 6f 29 3d 3d 30 20 29 3b 20  MEM_Zero)==0 ); 
1c570 20 2f 2a 20 7a 65 72 6f 62 6c 6f 62 73 20 61 6c   /* zeroblobs al
1c580 72 65 61 64 79 20 65 78 70 61 6e 64 65 64 20 2a  ready expanded *
1c590 2f 0a 20 20 20 20 20 20 70 49 64 78 4b 65 79 20  /.      pIdxKey 
1c5a0 3d 20 73 71 6c 69 74 65 33 56 64 62 65 52 65 63  = sqlite3VdbeRec
1c5b0 6f 72 64 55 6e 70 61 63 6b 28 70 43 2d 3e 70 4b  ordUnpack(pC->pK
1c5c0 65 79 49 6e 66 6f 2c 20 70 49 6e 33 2d 3e 6e 2c  eyInfo, pIn3->n,
1c5d0 20 70 49 6e 33 2d 3e 7a 2c 0a 20 20 20 20 20 20   pIn3->z,.      
1c5e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c5f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c600 20 20 61 54 65 6d 70 52 65 63 2c 20 73 69 7a 65    aTempRec, size
1c610 6f 66 28 61 54 65 6d 70 52 65 63 29 29 3b 0a 20  of(aTempRec));. 
1c620 20 20 20 20 20 69 66 28 20 70 49 64 78 4b 65 79       if( pIdxKey
1c630 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 67  ==0 ){.        g
1c640 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20  oto no_mem;.    
1c650 20 20 7d 0a 20 20 20 20 20 20 70 49 64 78 4b 65    }.      pIdxKe
1c660 79 2d 3e 66 6c 61 67 73 20 7c 3d 20 55 4e 50 41  y->flags |= UNPA
1c670 43 4b 45 44 5f 50 52 45 46 49 58 5f 4d 41 54 43  CKED_PREFIX_MATC
1c680 48 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72 63 20  H;.    }.    rc 
1c690 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f  = sqlite3BtreeMo
1c6a0 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d  vetoUnpacked(pC-
1c6b0 3e 70 43 75 72 73 6f 72 2c 20 70 49 64 78 4b 65  >pCursor, pIdxKe
1c6c0 79 2c 20 30 2c 20 30 2c 20 26 72 65 73 29 3b 0a  y, 0, 0, &res);.
1c6d0 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 2e      if( pOp->p4.
1c6e0 69 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 73 71  i==0 ){.      sq
1c6f0 6c 69 74 65 33 56 64 62 65 44 65 6c 65 74 65 55  lite3VdbeDeleteU
1c700 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 28 70 49  npackedRecord(pI
1c710 64 78 4b 65 79 29 3b 0a 20 20 20 20 7d 0a 20 20  dxKey);.    }.  
1c720 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
1c730 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 62 72 65  _OK ){.      bre
1c740 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 61 6c  ak;.    }.    al
1c750 72 65 61 64 79 45 78 69 73 74 73 20 3d 20 28 72  readyExists = (r
1c760 65 73 3d 3d 30 29 3b 0a 20 20 20 20 70 43 2d 3e  es==0);.    pC->
1c770 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d  deferredMoveto =
1c780 20 30 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68   0;.    pC->cach
1c790 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
1c7a0 53 54 41 4c 45 3b 0a 20 20 7d 0a 20 20 69 66 28  STALE;.  }.  if(
1c7b0 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
1c7c0 5f 46 6f 75 6e 64 20 29 7b 0a 20 20 20 20 69 66  _Found ){.    if
1c7d0 28 20 61 6c 72 65 61 64 79 45 78 69 73 74 73 20  ( alreadyExists 
1c7e0 29 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d  ) pc = pOp->p2 -
1c7f0 20 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20   1;.  }else{.   
1c800 20 69 66 28 20 21 61 6c 72 65 61 64 79 45 78 69   if( !alreadyExi
1c810 73 74 73 20 29 20 70 63 20 3d 20 70 4f 70 2d 3e  sts ) pc = pOp->
1c820 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72  p2 - 1;.  }.  br
1c830 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
1c840 65 3a 20 49 73 55 6e 69 71 75 65 20 50 31 20 50  e: IsUnique P1 P
1c850 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20  2 P3 P4 *.**.** 
1c860 43 75 72 73 6f 72 20 50 31 20 69 73 20 6f 70 65  Cursor P1 is ope
1c870 6e 20 6f 6e 20 61 6e 20 69 6e 64 65 78 20 62 2d  n on an index b-
1c880 74 72 65 65 20 2d 20 74 68 61 74 20 69 73 20 74  tree - that is t
1c890 6f 20 73 61 79 2c 20 61 20 62 74 72 65 65 20 77  o say, a btree w
1c8a0 68 69 63 68 0a 2a 2a 20 6e 6f 20 64 61 74 61 20  hich.** no data 
1c8b0 61 6e 64 20 77 68 65 72 65 20 74 68 65 20 6b 65  and where the ke
1c8c0 79 20 61 72 65 20 72 65 63 6f 72 64 73 20 67 65  y are records ge
1c8d0 6e 65 72 61 74 65 64 20 62 79 20 4f 50 5f 4d 61  nerated by OP_Ma
1c8e0 6b 65 52 65 63 6f 72 64 20 77 69 74 68 0a 2a 2a  keRecord with.**
1c8f0 20 74 68 65 20 6c 69 73 74 20 66 69 65 6c 64 20   the list field 
1c900 62 65 69 6e 67 20 74 68 65 20 69 6e 74 65 67 65  being the intege
1c910 72 20 52 4f 57 49 44 20 6f 66 20 74 68 65 20 65  r ROWID of the e
1c920 6e 74 72 79 20 74 68 61 74 20 74 68 65 20 69 6e  ntry that the in
1c930 64 65 78 0a 2a 2a 20 65 6e 74 72 79 20 72 65 66  dex.** entry ref
1c940 65 72 73 20 74 6f 2e 0a 2a 2a 0a 2a 2a 20 54 68  ers to..**.** Th
1c950 65 20 50 33 20 72 65 67 69 73 74 65 72 20 63 6f  e P3 register co
1c960 6e 74 61 69 6e 73 20 61 6e 20 69 6e 74 65 67 65  ntains an intege
1c970 72 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 2e  r record number.
1c980 20 43 61 6c 6c 20 74 68 69 73 20 72 65 63 6f 72   Call this recor
1c990 64 20 0a 2a 2a 20 6e 75 6d 62 65 72 20 52 2e 20  d .** number R. 
1c9a0 52 65 67 69 73 74 65 72 20 50 34 20 69 73 20 74  Register P4 is t
1c9b0 68 65 20 66 69 72 73 74 20 69 6e 20 61 20 73 65  he first in a se
1c9c0 74 20 6f 66 20 4e 20 63 6f 6e 74 69 67 75 6f 75  t of N contiguou
1c9d0 73 20 72 65 67 69 73 74 65 72 73 0a 2a 2a 20 74  s registers.** t
1c9e0 68 61 74 20 6d 61 6b 65 20 75 70 20 61 6e 20 75  hat make up an u
1c9f0 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65  npacked index ke
1ca00 79 20 74 68 61 74 20 63 61 6e 20 62 65 20 75 73  y that can be us
1ca10 65 64 20 77 69 74 68 20 63 75 72 73 6f 72 20 50  ed with cursor P
1ca20 31 2e 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65 20  1..** The value 
1ca30 6f 66 20 4e 20 63 61 6e 20 62 65 20 69 6e 66 65  of N can be infe
1ca40 72 72 65 64 20 66 72 6f 6d 20 74 68 65 20 63 75  rred from the cu
1ca50 72 73 6f 72 2e 20 4e 20 69 6e 63 6c 75 64 65 73  rsor. N includes
1ca60 20 74 68 65 20 72 6f 77 69 64 0a 2a 2a 20 76 61   the rowid.** va
1ca70 6c 75 65 20 61 70 70 65 6e 64 65 64 20 74 6f 20  lue appended to 
1ca80 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 69  the end of the i
1ca90 6e 64 65 78 20 72 65 63 6f 72 64 2e 20 54 68 69  ndex record. Thi
1caa0 73 20 72 6f 77 69 64 20 76 61 6c 75 65 20 6d 61  s rowid value ma
1cab0 79 0a 2a 2a 20 6f 72 20 6d 61 79 20 6e 6f 74 20  y.** or may not 
1cac0 62 65 20 74 68 65 20 73 61 6d 65 20 61 73 20 52  be the same as R
1cad0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 61 6e 79 20 6f  ..**.** If any o
1cae0 66 20 74 68 65 20 4e 20 72 65 67 69 73 74 65 72  f the N register
1caf0 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68  s beginning with
1cb00 20 72 65 67 69 73 74 65 72 20 50 34 20 63 6f 6e   register P4 con
1cb10 74 61 69 6e 73 20 61 20 4e 55 4c 4c 0a 2a 2a 20  tains a NULL.** 
1cb20 76 61 6c 75 65 2c 20 6a 75 6d 70 20 69 6d 6d 65  value, jump imme
1cb30 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a  diately to P2..*
1cb40 2a 0a 2a 2a 20 4f 74 68 65 72 77 69 73 65 2c 20  *.** Otherwise, 
1cb50 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
1cb60 20 63 68 65 63 6b 73 20 69 66 20 63 75 72 73 6f   checks if curso
1cb70 72 20 50 31 20 63 6f 6e 74 61 69 6e 73 20 61 6e  r P1 contains an
1cb80 20 65 6e 74 72 79 0a 2a 2a 20 77 68 65 72 65 20   entry.** where 
1cb90 74 68 65 20 66 69 72 73 74 20 28 4e 2d 31 29 20  the first (N-1) 
1cba0 66 69 65 6c 64 73 20 6d 61 74 63 68 20 62 75 74  fields match but
1cbb0 20 74 68 65 20 72 6f 77 69 64 20 76 61 6c 75 65   the rowid value
1cbc0 20 61 74 20 74 68 65 20 65 6e 64 0a 2a 2a 20 6f   at the end.** o
1cbd0 66 20 74 68 65 20 69 6e 64 65 78 20 65 6e 74 72  f the index entr
1cbe0 79 20 69 73 20 6e 6f 74 20 52 2e 20 49 66 20 74  y is not R. If t
1cbf0 68 65 72 65 20 69 73 20 6e 6f 20 73 75 63 68 20  here is no such 
1cc00 65 6e 74 72 79 2c 20 63 6f 6e 74 72 6f 6c 20 6a  entry, control j
1cc10 75 6d 70 73 0a 2a 2a 20 74 6f 20 69 6e 73 74 72  umps.** to instr
1cc20 75 63 74 69 6f 6e 20 50 32 2e 20 4f 74 68 65 72  uction P2. Other
1cc30 77 69 73 65 2c 20 74 68 65 20 72 6f 77 69 64 20  wise, the rowid 
1cc40 6f 66 20 74 68 65 20 63 6f 6e 66 6c 69 63 74 69  of the conflicti
1cc50 6e 67 20 69 6e 64 65 78 0a 2a 2a 20 65 6e 74 72  ng index.** entr
1cc60 79 20 69 73 20 63 6f 70 69 65 64 20 74 6f 20 72  y is copied to r
1cc70 65 67 69 73 74 65 72 20 50 33 20 61 6e 64 20 63  egister P3 and c
1cc80 6f 6e 74 72 6f 6c 20 66 61 6c 6c 73 20 74 68 72  ontrol falls thr
1cc90 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74  ough to the next
1cca0 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  .** instruction.
1ccb0 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
1ccc0 20 4e 6f 74 46 6f 75 6e 64 2c 20 4e 6f 74 45 78   NotFound, NotEx
1ccd0 69 73 74 73 2c 20 46 6f 75 6e 64 0a 2a 2f 0a 63  ists, Found.*/.c
1cce0 61 73 65 20 4f 50 5f 49 73 55 6e 69 71 75 65 3a  ase OP_IsUnique:
1ccf0 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d   {        /* jum
1cd00 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 75 31 36 20  p, in3 */.  u16 
1cd10 69 69 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  ii;.  VdbeCursor
1cd20 20 2a 70 43 78 3b 0a 20 20 42 74 43 75 72 73 6f   *pCx;.  BtCurso
1cd30 72 20 2a 70 43 72 73 72 3b 0a 20 20 75 31 36 20  r *pCrsr;.  u16 
1cd40 6e 46 69 65 6c 64 3b 0a 20 20 4d 65 6d 20 2a 61  nField;.  Mem *a
1cd50 4d 78 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65  Mx;.  UnpackedRe
1cd60 63 6f 72 64 20 72 3b 20 20 20 20 20 20 20 20 20  cord r;         
1cd70 20 20 20 20 20 20 20 20 20 2f 2a 20 42 2d 54 72           /* B-Tr
1cd80 65 65 20 69 6e 64 65 78 20 73 65 61 72 63 68 20  ee index search 
1cd90 6b 65 79 20 2a 2f 0a 20 20 69 36 34 20 52 3b 20  key */.  i64 R; 
1cda0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cdb0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52              /* R
1cdc0 6f 77 69 64 20 73 74 6f 72 65 64 20 69 6e 20 72  owid stored in r
1cdd0 65 67 69 73 74 65 72 20 50 33 20 2a 2f 0a 0a 20  egister P3 */.. 
1cde0 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn3 = &aMem[pO
1cdf0 70 2d 3e 70 33 5d 3b 0a 20 20 61 4d 78 20 3d 20  p->p3];.  aMx = 
1ce00 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 34 2e 69 5d  &aMem[pOp->p4.i]
1ce10 3b 0a 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68  ;.  /* Assert th
1ce20 61 74 20 74 68 65 20 76 61 6c 75 65 73 20 6f 66  at the values of
1ce30 20 70 61 72 61 6d 65 74 65 72 73 20 50 31 20 61   parameters P1 a
1ce40 6e 64 20 50 34 20 61 72 65 20 69 6e 20 72 61 6e  nd P4 are in ran
1ce50 67 65 2e 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ge. */.  assert(
1ce60 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
1ce70 5f 49 4e 54 33 32 20 29 3b 0a 20 20 61 73 73 65  _INT32 );.  asse
1ce80 72 74 28 20 70 4f 70 2d 3e 70 34 2e 69 3e 30 20  rt( pOp->p4.i>0 
1ce90 26 26 20 70 4f 70 2d 3e 70 34 2e 69 3c 3d 70 2d  && pOp->p4.i<=p-
1cea0 3e 6e 4d 65 6d 20 29 3b 0a 20 20 61 73 73 65 72  >nMem );.  asser
1ceb0 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
1cec0 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
1ced0 73 6f 72 20 29 3b 0a 0a 20 20 2f 2a 20 46 69 6e  sor );..  /* Fin
1cee0 64 20 74 68 65 20 69 6e 64 65 78 20 63 75 72 73  d the index curs
1cef0 6f 72 2e 20 2a 2f 0a 20 20 70 43 78 20 3d 20 70  or. */.  pCx = p
1cf00 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
1cf10 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 78 2d  ;.  assert( pCx-
1cf20 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d  >deferredMoveto=
1cf30 3d 30 20 29 3b 0a 20 20 70 43 78 2d 3e 73 65 65  =0 );.  pCx->see
1cf40 6b 52 65 73 75 6c 74 20 3d 20 30 3b 0a 20 20 70  kResult = 0;.  p
1cf50 43 78 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20  Cx->cacheStatus 
1cf60 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20  = CACHE_STALE;. 
1cf70 20 70 43 72 73 72 20 3d 20 70 43 78 2d 3e 70 43   pCrsr = pCx->pC
1cf80 75 72 73 6f 72 3b 0a 0a 20 20 2f 2a 20 49 66 20  ursor;..  /* If 
1cf90 61 6e 79 20 6f 66 20 74 68 65 20 76 61 6c 75 65  any of the value
1cfa0 73 20 61 72 65 20 4e 55 4c 4c 2c 20 74 61 6b 65  s are NULL, take
1cfb0 20 74 68 65 20 6a 75 6d 70 2e 20 2a 2f 0a 20 20   the jump. */.  
1cfc0 6e 46 69 65 6c 64 20 3d 20 70 43 78 2d 3e 70 4b  nField = pCx->pK
1cfd0 65 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64 3b 0a  eyInfo->nField;.
1cfe0 20 20 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 6e    for(ii=0; ii<n
1cff0 46 69 65 6c 64 3b 20 69 69 2b 2b 29 7b 0a 20 20  Field; ii++){.  
1d000 20 20 69 66 28 20 61 4d 78 5b 69 69 5d 2e 66 6c    if( aMx[ii].fl
1d010 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29  ags & MEM_Null )
1d020 7b 0a 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70  {.      pc = pOp
1d030 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 20 20  ->p2 - 1;.      
1d040 70 43 72 73 72 20 3d 20 30 3b 0a 20 20 20 20 20  pCrsr = 0;.     
1d050 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20   break;.    }.  
1d060 7d 0a 20 20 61 73 73 65 72 74 28 20 28 61 4d 78  }.  assert( (aMx
1d070 5b 6e 46 69 65 6c 64 5d 2e 66 6c 61 67 73 20 26  [nField].flags &
1d080 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 3b   MEM_Null)==0 );
1d090 0a 0a 20 20 69 66 28 20 70 43 72 73 72 21 3d 30  ..  if( pCrsr!=0
1d0a0 20 29 7b 0a 20 20 20 20 2f 2a 20 50 6f 70 75 6c   ){.    /* Popul
1d0b0 61 74 65 20 74 68 65 20 69 6e 64 65 78 20 73 65  ate the index se
1d0c0 61 72 63 68 20 6b 65 79 2e 20 2a 2f 0a 20 20 20  arch key. */.   
1d0d0 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43   r.pKeyInfo = pC
1d0e0 78 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20  x->pKeyInfo;.   
1d0f0 20 72 2e 6e 46 69 65 6c 64 20 3d 20 6e 46 69 65   r.nField = nFie
1d100 6c 64 20 2b 20 31 3b 0a 20 20 20 20 72 2e 66 6c  ld + 1;.    r.fl
1d110 61 67 73 20 3d 20 55 4e 50 41 43 4b 45 44 5f 50  ags = UNPACKED_P
1d120 52 45 46 49 58 5f 53 45 41 52 43 48 3b 0a 20 20  REFIX_SEARCH;.  
1d130 20 20 72 2e 61 4d 65 6d 20 3d 20 61 4d 78 3b 0a    r.aMem = aMx;.
1d140 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
1d150 42 55 47 0a 20 20 20 20 7b 20 69 6e 74 20 69 3b  BUG.    { int i;
1d160 20 66 6f 72 28 69 3d 30 3b 20 69 3c 72 2e 6e 46   for(i=0; i<r.nF
1d170 69 65 6c 64 3b 20 69 2b 2b 29 20 61 73 73 65 72  ield; i++) asser
1d180 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 72  t( memIsValid(&r
1d190 2e 61 4d 65 6d 5b 69 5d 29 20 29 3b 20 7d 0a 23  .aMem[i]) ); }.#
1d1a0 65 6e 64 69 66 0a 0a 20 20 20 20 2f 2a 20 45 78  endif..    /* Ex
1d1b0 74 72 61 63 74 20 74 68 65 20 76 61 6c 75 65 20  tract the value 
1d1c0 6f 66 20 52 20 66 72 6f 6d 20 72 65 67 69 73 74  of R from regist
1d1d0 65 72 20 50 33 2e 20 2a 2f 0a 20 20 20 20 73 71  er P3. */.    sq
1d1e0 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65  lite3VdbeMemInte
1d1f0 67 65 72 69 66 79 28 70 49 6e 33 29 3b 0a 20 20  gerify(pIn3);.  
1d200 20 20 52 20 3d 20 70 49 6e 33 2d 3e 75 2e 69 3b    R = pIn3->u.i;
1d210 0a 0a 20 20 20 20 2f 2a 20 53 65 61 72 63 68 20  ..    /* Search 
1d220 74 68 65 20 42 2d 54 72 65 65 20 69 6e 64 65 78  the B-Tree index
1d230 2e 20 49 66 20 6e 6f 20 63 6f 6e 66 6c 69 63 74  . If no conflict
1d240 69 6e 67 20 72 65 63 6f 72 64 20 69 73 20 66 6f  ing record is fo
1d250 75 6e 64 2c 20 6a 75 6d 70 0a 20 20 20 20 2a 2a  und, jump.    **
1d260 20 74 6f 20 50 32 2e 20 4f 74 68 65 72 77 69 73   to P2. Otherwis
1d270 65 2c 20 63 6f 70 79 20 74 68 65 20 72 6f 77 69  e, copy the rowi
1d280 64 20 6f 66 20 74 68 65 20 63 6f 6e 66 6c 69 63  d of the conflic
1d290 74 69 6e 67 20 72 65 63 6f 72 64 20 74 6f 0a 20  ting record to. 
1d2a0 20 20 20 2a 2a 20 72 65 67 69 73 74 65 72 20 50     ** register P
1d2b0 33 20 61 6e 64 20 66 61 6c 6c 20 74 68 72 6f 75  3 and fall throu
1d2c0 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69  gh to the next i
1d2d0 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 2a 2f 0a  nstruction.  */.
1d2e0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
1d2f0 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63  BtreeMovetoUnpac
1d300 6b 65 64 28 70 43 72 73 72 2c 20 26 72 2c 20 30  ked(pCrsr, &r, 0
1d310 2c 20 30 2c 20 26 70 43 78 2d 3e 73 65 65 6b 52  , 0, &pCx->seekR
1d320 65 73 75 6c 74 29 3b 0a 20 20 20 20 69 66 28 20  esult);.    if( 
1d330 28 72 2e 66 6c 61 67 73 20 26 20 55 4e 50 41 43  (r.flags & UNPAC
1d340 4b 45 44 5f 50 52 45 46 49 58 5f 53 45 41 52 43  KED_PREFIX_SEARC
1d350 48 29 20 7c 7c 20 72 2e 72 6f 77 69 64 3d 3d 52  H) || r.rowid==R
1d360 20 29 7b 0a 20 20 20 20 20 20 70 63 20 3d 20 70   ){.      pc = p
1d370 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20  Op->p2 - 1;.    
1d380 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 70 49 6e  }else{.      pIn
1d390 33 2d 3e 75 2e 69 20 3d 20 72 2e 72 6f 77 69 64  3->u.i = r.rowid
1d3a0 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72  ;.    }.  }.  br
1d3b0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
1d3c0 65 3a 20 4e 6f 74 45 78 69 73 74 73 20 50 31 20  e: NotExists P1 
1d3d0 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
1d3e0 55 73 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  Use the content 
1d3f0 6f 66 20 72 65 67 69 73 74 65 72 20 50 33 20 61  of register P3 a
1d400 73 20 61 20 69 6e 74 65 67 65 72 20 6b 65 79 2e  s a integer key.
1d410 20 20 49 66 20 61 20 72 65 63 6f 72 64 20 0a 2a    If a record .*
1d420 2a 20 77 69 74 68 20 74 68 61 74 20 6b 65 79 20  * with that key 
1d430 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 20 69  does not exist i
1d440 6e 20 74 61 62 6c 65 20 6f 66 20 50 31 2c 20 74  n table of P1, t
1d450 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20  hen jump to P2. 
1d460 0a 2a 2a 20 49 66 20 74 68 65 20 72 65 63 6f 72  .** If the recor
1d470 64 20 64 6f 65 73 20 65 78 69 73 74 2c 20 74 68  d does exist, th
1d480 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 2e  en fall through.
1d490 20 20 54 68 65 20 63 75 72 73 6f 72 20 69 73 20    The cursor is 
1d4a0 6c 65 66 74 20 0a 2a 2a 20 70 6f 69 6e 74 69 6e  left .** pointin
1d4b0 67 20 74 6f 20 74 68 65 20 72 65 63 6f 72 64 20  g to the record 
1d4c0 69 66 20 69 74 20 65 78 69 73 74 73 2e 0a 2a 2a  if it exists..**
1d4d0 0a 2a 2a 20 54 68 65 20 64 69 66 66 65 72 65 6e  .** The differen
1d4e0 63 65 20 62 65 74 77 65 65 6e 20 74 68 69 73 20  ce between this 
1d4f0 6f 70 65 72 61 74 69 6f 6e 20 61 6e 64 20 4e 6f  operation and No
1d500 74 46 6f 75 6e 64 20 69 73 20 74 68 61 74 20 74  tFound is that t
1d510 68 69 73 0a 2a 2a 20 6f 70 65 72 61 74 69 6f 6e  his.** operation
1d520 20 61 73 73 75 6d 65 73 20 74 68 65 20 6b 65 79   assumes the key
1d530 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 61   is an integer a
1d540 6e 64 20 74 68 61 74 20 50 31 20 69 73 20 61 20  nd that P1 is a 
1d550 74 61 62 6c 65 20 77 68 65 72 65 61 73 0a 2a 2a  table whereas.**
1d560 20 4e 6f 74 46 6f 75 6e 64 20 61 73 73 75 6d 65   NotFound assume
1d570 73 20 6b 65 79 20 69 73 20 61 20 62 6c 6f 62 20  s key is a blob 
1d580 63 6f 6e 73 74 72 75 63 74 65 64 20 66 72 6f 6d  constructed from
1d590 20 4d 61 6b 65 52 65 63 6f 72 64 20 61 6e 64 0a   MakeRecord and.
1d5a0 2a 2a 20 50 31 20 69 73 20 61 6e 20 69 6e 64 65  ** P1 is an inde
1d5b0 78 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  x..**.** See als
1d5c0 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75  o: Found, NotFou
1d5d0 6e 64 2c 20 49 73 55 6e 69 71 75 65 0a 2a 2f 0a  nd, IsUnique.*/.
1d5e0 63 61 73 65 20 4f 50 5f 4e 6f 74 45 78 69 73 74  case OP_NotExist
1d5f0 73 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a  s: {        /* j
1d600 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 56 64  ump, in3 */.  Vd
1d610 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
1d620 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b  BtCursor *pCrsr;
1d630 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 75 36  .  int res;.  u6
1d640 34 20 69 4b 65 79 3b 0a 0a 20 20 70 49 6e 33 20  4 iKey;..  pIn3 
1d650 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
1d660 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 33  ;.  assert( pIn3
1d670 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
1d680 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  t );.  assert( p
1d690 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
1d6a0 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
1d6b0 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
1d6c0 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
1d6d0 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
1d6e0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73    assert( pC->is
1d6f0 54 61 62 6c 65 20 29 3b 0a 20 20 61 73 73 65 72  Table );.  asser
1d700 74 28 20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62  t( pC->pseudoTab
1d710 6c 65 52 65 67 3d 3d 30 20 29 3b 0a 20 20 70 43  leReg==0 );.  pC
1d720 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f  rsr = pC->pCurso
1d730 72 3b 0a 20 20 69 66 28 20 70 43 72 73 72 21 3d  r;.  if( pCrsr!=
1d740 30 20 29 7b 0a 20 20 20 20 72 65 73 20 3d 20 30  0 ){.    res = 0
1d750 3b 0a 20 20 20 20 69 4b 65 79 20 3d 20 70 49 6e  ;.    iKey = pIn
1d760 33 2d 3e 75 2e 69 3b 0a 20 20 20 20 72 63 20 3d  3->u.i;.    rc =
1d770 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76   sqlite3BtreeMov
1d780 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 72 73  etoUnpacked(pCrs
1d790 72 2c 20 30 2c 20 69 4b 65 79 2c 20 30 2c 20 26  r, 0, iKey, 0, &
1d7a0 72 65 73 29 3b 0a 20 20 20 20 70 43 2d 3e 6c 61  res);.    pC->la
1d7b0 73 74 52 6f 77 69 64 20 3d 20 70 49 6e 33 2d 3e  stRowid = pIn3->
1d7c0 75 2e 69 3b 0a 20 20 20 20 70 43 2d 3e 72 6f 77  u.i;.    pC->row
1d7d0 69 64 49 73 56 61 6c 69 64 20 3d 20 72 65 73 3d  idIsValid = res=
1d7e0 3d 30 20 3f 31 3a 30 3b 0a 20 20 20 20 70 43 2d  =0 ?1:0;.    pC-
1d7f0 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20  >nullRow = 0;.  
1d800 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
1d810 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
1d820 0a 20 20 20 20 70 43 2d 3e 64 65 66 65 72 72 65  .    pC->deferre
1d830 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20  dMoveto = 0;.   
1d840 20 69 66 28 20 72 65 73 21 3d 30 20 29 7b 0a 20   if( res!=0 ){. 
1d850 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70       pc = pOp->p
1d860 32 20 2d 20 31 3b 0a 20 20 20 20 20 20 61 73 73  2 - 1;.      ass
1d870 65 72 74 28 20 70 43 2d 3e 72 6f 77 69 64 49 73  ert( pC->rowidIs
1d880 56 61 6c 69 64 3d 3d 30 20 29 3b 0a 20 20 20 20  Valid==0 );.    
1d890 7d 0a 20 20 20 20 70 43 2d 3e 73 65 65 6b 52 65  }.    pC->seekRe
1d8a0 73 75 6c 74 20 3d 20 72 65 73 3b 0a 20 20 7d 65  sult = res;.  }e
1d8b0 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 54 68 69 73  lse{.    /* This
1d8c0 20 68 61 70 70 65 6e 73 20 77 68 65 6e 20 61 6e   happens when an
1d8d0 20 61 74 74 65 6d 70 74 20 74 6f 20 6f 70 65 6e   attempt to open
1d8e0 20 61 20 72 65 61 64 20 63 75 72 73 6f 72 20 6f   a read cursor o
1d8f0 6e 20 74 68 65 20 0a 20 20 20 20 2a 2a 20 73 71  n the .    ** sq
1d900 6c 69 74 65 5f 6d 61 73 74 65 72 20 74 61 62 6c  lite_master tabl
1d910 65 20 72 65 74 75 72 6e 73 20 53 51 4c 49 54 45  e returns SQLITE
1d920 5f 45 4d 50 54 59 2e 0a 20 20 20 20 2a 2f 0a 20  _EMPTY..    */. 
1d930 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
1d940 2d 20 31 3b 0a 20 20 20 20 61 73 73 65 72 74 28  - 1;.    assert(
1d950 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69   pC->rowidIsVali
1d960 64 3d 3d 30 20 29 3b 0a 20 20 20 20 70 43 2d 3e  d==0 );.    pC->
1d970 73 65 65 6b 52 65 73 75 6c 74 20 3d 20 30 3b 0a  seekResult = 0;.
1d980 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
1d990 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 71 75 65  /* Opcode: Seque
1d9a0 6e 63 65 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  nce P1 P2 * * *.
1d9b0 2a 2a 0a 2a 2a 20 46 69 6e 64 20 74 68 65 20 6e  **.** Find the n
1d9c0 65 78 74 20 61 76 61 69 6c 61 62 6c 65 20 73 65  ext available se
1d9d0 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20 66 6f  quence number fo
1d9e0 72 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20  r cursor P1..** 
1d9f0 57 72 69 74 65 20 74 68 65 20 73 65 71 75 65 6e  Write the sequen
1da00 63 65 20 6e 75 6d 62 65 72 20 69 6e 74 6f 20 72  ce number into r
1da10 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 20 54  egister P2..** T
1da20 68 65 20 73 65 71 75 65 6e 63 65 20 6e 75 6d 62  he sequence numb
1da30 65 72 20 6f 6e 20 74 68 65 20 63 75 72 73 6f 72  er on the cursor
1da40 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20   is incremented 
1da50 61 66 74 65 72 20 74 68 69 73 0a 2a 2a 20 69 6e  after this.** in
1da60 73 74 72 75 63 74 69 6f 6e 2e 20 20 0a 2a 2f 0a  struction.  .*/.
1da70 63 61 73 65 20 4f 50 5f 53 65 71 75 65 6e 63 65  case OP_Sequence
1da80 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  : {           /*
1da90 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65   out2-prerelease
1daa0 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f   */.  assert( pO
1dab0 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
1dac0 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
1dad0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 61  ;.  assert( p->a
1dae0 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 21 3d 30  pCsr[pOp->p1]!=0
1daf0 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20   );.  pOut->u.i 
1db00 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
1db10 70 31 5d 2d 3e 73 65 71 43 6f 75 6e 74 2b 2b 3b  p1]->seqCount++;
1db20 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a  .  break;.}.../*
1db30 20 4f 70 63 6f 64 65 3a 20 4e 65 77 52 6f 77 69   Opcode: NewRowi
1db40 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  d P1 P2 P3 * *.*
1db50 2a 0a 2a 2a 20 47 65 74 20 61 20 6e 65 77 20 69  *.** Get a new i
1db60 6e 74 65 67 65 72 20 72 65 63 6f 72 64 20 6e 75  nteger record nu
1db70 6d 62 65 72 20 28 61 2e 6b 2e 61 20 22 72 6f 77  mber (a.k.a "row
1db80 69 64 22 29 20 75 73 65 64 20 61 73 20 74 68 65  id") used as the
1db90 20 6b 65 79 20 74 6f 20 61 20 74 61 62 6c 65 2e   key to a table.
1dba0 0a 2a 2a 20 54 68 65 20 72 65 63 6f 72 64 20 6e  .** The record n
1dbb0 75 6d 62 65 72 20 69 73 20 6e 6f 74 20 70 72 65  umber is not pre
1dbc0 76 69 6f 75 73 6c 79 20 75 73 65 64 20 61 73 20  viously used as 
1dbd0 61 20 6b 65 79 20 69 6e 20 74 68 65 20 64 61 74  a key in the dat
1dbe0 61 62 61 73 65 0a 2a 2a 20 74 61 62 6c 65 20 74  abase.** table t
1dbf0 68 61 74 20 63 75 72 73 6f 72 20 50 31 20 70 6f  hat cursor P1 po
1dc00 69 6e 74 73 20 74 6f 2e 20 20 54 68 65 20 6e 65  ints to.  The ne
1dc10 77 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 20  w record number 
1dc20 69 73 20 77 72 69 74 74 65 6e 0a 2a 2a 20 77 72  is written.** wr
1dc30 69 74 74 65 6e 20 74 6f 20 72 65 67 69 73 74 65  itten to registe
1dc40 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  r P2..**.** If P
1dc50 33 3e 30 20 74 68 65 6e 20 50 33 20 69 73 20 61  3>0 then P3 is a
1dc60 20 72 65 67 69 73 74 65 72 20 69 6e 20 74 68 65   register in the
1dc70 20 72 6f 6f 74 20 66 72 61 6d 65 20 6f 66 20 74   root frame of t
1dc80 68 69 73 20 56 44 42 45 20 74 68 61 74 20 68 6f  his VDBE that ho
1dc90 6c 64 73 20 0a 2a 2a 20 74 68 65 20 6c 61 72 67  lds .** the larg
1dca0 65 73 74 20 70 72 65 76 69 6f 75 73 6c 79 20 67  est previously g
1dcb0 65 6e 65 72 61 74 65 64 20 72 65 63 6f 72 64 20  enerated record 
1dcc0 6e 75 6d 62 65 72 2e 20 4e 6f 20 6e 65 77 20 72  number. No new r
1dcd0 65 63 6f 72 64 20 6e 75 6d 62 65 72 73 20 61 72  ecord numbers ar
1dce0 65 0a 2a 2a 20 61 6c 6c 6f 77 65 64 20 74 6f 20  e.** allowed to 
1dcf0 62 65 20 6c 65 73 73 20 74 68 61 6e 20 74 68 69  be less than thi
1dd00 73 20 76 61 6c 75 65 2e 20 57 68 65 6e 20 74 68  s value. When th
1dd10 69 73 20 76 61 6c 75 65 20 72 65 61 63 68 65 73  is value reaches
1dd20 20 69 74 73 20 6d 61 78 69 6d 75 6d 2c 20 0a 2a   its maximum, .*
1dd30 2a 20 61 20 53 51 4c 49 54 45 5f 46 55 4c 4c 20  * a SQLITE_FULL 
1dd40 65 72 72 6f 72 20 69 73 20 67 65 6e 65 72 61 74  error is generat
1dd50 65 64 2e 20 54 68 65 20 50 33 20 72 65 67 69 73  ed. The P3 regis
1dd60 74 65 72 20 69 73 20 75 70 64 61 74 65 64 20 77  ter is updated w
1dd70 69 74 68 20 74 68 65 20 27 0a 2a 2a 20 67 65 6e  ith the '.** gen
1dd80 65 72 61 74 65 64 20 72 65 63 6f 72 64 20 6e 75  erated record nu
1dd90 6d 62 65 72 2e 20 54 68 69 73 20 50 33 20 6d 65  mber. This P3 me
1dda0 63 68 61 6e 69 73 6d 20 69 73 20 75 73 65 64 20  chanism is used 
1ddb0 74 6f 20 68 65 6c 70 20 69 6d 70 6c 65 6d 65 6e  to help implemen
1ddc0 74 20 74 68 65 0a 2a 2a 20 41 55 54 4f 49 4e 43  t the.** AUTOINC
1ddd0 52 45 4d 45 4e 54 20 66 65 61 74 75 72 65 2e 0a  REMENT feature..
1dde0 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 77 52 6f  */.case OP_NewRo
1ddf0 77 69 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20  wid: {          
1de00 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65   /* out2-prerele
1de10 61 73 65 20 2a 2f 0a 20 20 69 36 34 20 76 3b 20  ase */.  i64 v; 
1de20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1de30 2f 2a 20 54 68 65 20 6e 65 77 20 72 6f 77 69 64  /* The new rowid
1de40 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72   */.  VdbeCursor
1de50 20 2a 70 43 3b 20 20 20 20 20 20 20 20 2f 2a 20   *pC;        /* 
1de60 43 75 72 73 6f 72 20 6f 66 20 74 61 62 6c 65 20  Cursor of table 
1de70 74 6f 20 67 65 74 20 74 68 65 20 6e 65 77 20 72  to get the new r
1de80 6f 77 69 64 20 2a 2f 0a 20 20 69 6e 74 20 72 65  owid */.  int re
1de90 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s;              
1dea0 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20 61 6e   /* Result of an
1deb0 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73   sqlite3BtreeLas
1dec0 74 28 29 20 2a 2f 0a 20 20 69 6e 74 20 63 6e 74  t() */.  int cnt
1ded0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1dee0 2f 2a 20 43 6f 75 6e 74 65 72 20 74 6f 20 6c 69  /* Counter to li
1def0 6d 69 74 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  mit the number o
1df00 66 20 73 65 61 72 63 68 65 73 20 2a 2f 0a 20 20  f searches */.  
1df10 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20 20 20 20 20  Mem *pMem;      
1df20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74         /* Regist
1df30 65 72 20 68 6f 6c 64 69 6e 67 20 6c 61 72 67 65  er holding large
1df40 73 74 20 72 6f 77 69 64 20 66 6f 72 20 41 55 54  st rowid for AUT
1df50 4f 49 4e 43 52 45 4d 45 4e 54 20 2a 2f 0a 20 20  OINCREMENT */.  
1df60 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d  VdbeFrame *pFram
1df70 65 3b 20 20 20 20 20 2f 2a 20 52 6f 6f 74 20 66  e;     /* Root f
1df80 72 61 6d 65 20 6f 66 20 56 44 42 45 20 2a 2f 0a  rame of VDBE */.
1df90 0a 20 20 76 20 3d 20 30 3b 0a 20 20 72 65 73 20  .  v = 0;.  res 
1dfa0 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70  = 0;.  assert( p
1dfb0 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
1dfc0 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
1dfd0 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
1dfe0 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
1dff0 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
1e000 20 20 69 66 28 20 4e 45 56 45 52 28 70 43 2d 3e    if( NEVER(pC->
1e010 70 43 75 72 73 6f 72 3d 3d 30 29 20 29 7b 0a 20  pCursor==0) ){. 
1e020 20 20 20 2f 2a 20 54 68 65 20 7a 65 72 6f 20 69     /* The zero i
1e030 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 61 62  nitialization ab
1e040 6f 76 65 20 69 73 20 61 6c 6c 20 74 68 61 74 20  ove is all that 
1e050 69 73 20 6e 65 65 64 65 64 20 2a 2f 0a 20 20 7d  is needed */.  }
1e060 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 54 68 65  else{.    /* The
1e070 20 6e 65 78 74 20 72 6f 77 69 64 20 6f 72 20 72   next rowid or r
1e080 65 63 6f 72 64 20 6e 75 6d 62 65 72 20 28 64 69  ecord number (di
1e090 66 66 65 72 65 6e 74 20 74 65 72 6d 73 20 66 6f  fferent terms fo
1e0a0 72 20 74 68 65 20 73 61 6d 65 0a 20 20 20 20 2a  r the same.    *
1e0b0 2a 20 74 68 69 6e 67 29 20 69 73 20 6f 62 74 61  * thing) is obta
1e0c0 69 6e 65 64 20 69 6e 20 61 20 74 77 6f 2d 73 74  ined in a two-st
1e0d0 65 70 20 61 6c 67 6f 72 69 74 68 6d 2e 0a 20 20  ep algorithm..  
1e0e0 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 46 69 72 73    **.    ** Firs
1e0f0 74 20 77 65 20 61 74 74 65 6d 70 74 20 74 6f 20  t we attempt to 
1e100 66 69 6e 64 20 74 68 65 20 6c 61 72 67 65 73 74  find the largest
1e110 20 65 78 69 73 74 69 6e 67 20 72 6f 77 69 64 20   existing rowid 
1e120 61 6e 64 20 61 64 64 20 6f 6e 65 0a 20 20 20 20  and add one.    
1e130 2a 2a 20 74 6f 20 74 68 61 74 2e 20 20 42 75 74  ** to that.  But
1e140 20 69 66 20 74 68 65 20 6c 61 72 67 65 73 74 20   if the largest 
1e150 65 78 69 73 74 69 6e 67 20 72 6f 77 69 64 20 69  existing rowid i
1e160 73 20 61 6c 72 65 61 64 79 20 74 68 65 20 6d 61  s already the ma
1e170 78 69 6d 75 6d 0a 20 20 20 20 2a 2a 20 70 6f 73  ximum.    ** pos
1e180 69 74 69 76 65 20 69 6e 74 65 67 65 72 2c 20 77  itive integer, w
1e190 65 20 68 61 76 65 20 74 6f 20 66 61 6c 6c 20 74  e have to fall t
1e1a0 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 73 65  hrough to the se
1e1b0 63 6f 6e 64 0a 20 20 20 20 2a 2a 20 70 72 6f 62  cond.    ** prob
1e1c0 61 62 69 6c 69 73 74 69 63 20 61 6c 67 6f 72 69  abilistic algori
1e1d0 74 68 6d 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a  thm.    **.    *
1e1e0 2a 20 54 68 65 20 73 65 63 6f 6e 64 20 61 6c 67  * The second alg
1e1f0 6f 72 69 74 68 6d 20 69 73 20 74 6f 20 73 65 6c  orithm is to sel
1e200 65 63 74 20 61 20 72 6f 77 69 64 20 61 74 20 72  ect a rowid at r
1e210 61 6e 64 6f 6d 20 61 6e 64 20 73 65 65 20 69 66  andom and see if
1e220 0a 20 20 20 20 2a 2a 20 69 74 20 61 6c 72 65 61  .    ** it alrea
1e230 64 79 20 65 78 69 73 74 73 20 69 6e 20 74 68 65  dy exists in the
1e240 20 74 61 62 6c 65 2e 20 20 49 66 20 69 74 20 64   table.  If it d
1e250 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 2c 20 77  oes not exist, w
1e260 65 20 68 61 76 65 0a 20 20 20 20 2a 2a 20 73 75  e have.    ** su
1e270 63 63 65 65 64 65 64 2e 20 20 49 66 20 74 68 65  cceeded.  If the
1e280 20 72 61 6e 64 6f 6d 20 72 6f 77 69 64 20 64 6f   random rowid do
1e290 65 73 20 65 78 69 73 74 2c 20 77 65 20 73 65 6c  es exist, we sel
1e2a0 65 63 74 20 61 20 6e 65 77 20 6f 6e 65 0a 20 20  ect a new one.  
1e2b0 20 20 2a 2a 20 61 6e 64 20 74 72 79 20 61 67 61    ** and try aga
1e2c0 69 6e 2c 20 75 70 20 74 6f 20 31 30 30 20 74 69  in, up to 100 ti
1e2d0 6d 65 73 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  mes..    */.    
1e2e0 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61  assert( pC->isTa
1e2f0 62 6c 65 20 29 3b 0a 0a 23 69 66 64 65 66 20 53  ble );..#ifdef S
1e300 51 4c 49 54 45 5f 33 32 42 49 54 5f 52 4f 57 49  QLITE_32BIT_ROWI
1e310 44 0a 23 20 20 20 64 65 66 69 6e 65 20 4d 41 58  D.#   define MAX
1e320 5f 52 4f 57 49 44 20 30 78 37 66 66 66 66 66 66  _ROWID 0x7ffffff
1e330 66 0a 23 65 6c 73 65 0a 20 20 20 20 2f 2a 20 53  f.#else.    /* S
1e340 6f 6d 65 20 63 6f 6d 70 69 6c 65 72 73 20 63 6f  ome compilers co
1e350 6d 70 6c 61 69 6e 20 61 62 6f 75 74 20 63 6f 6e  mplain about con
1e360 73 74 61 6e 74 73 20 6f 66 20 74 68 65 20 66 6f  stants of the fo
1e370 72 6d 20 30 78 37 66 66 66 66 66 66 66 66 66 66  rm 0x7ffffffffff
1e380 66 66 66 66 66 2e 0a 20 20 20 20 2a 2a 20 4f 74  fffff..    ** Ot
1e390 68 65 72 73 20 63 6f 6d 70 6c 61 69 6e 20 61 62  hers complain ab
1e3a0 6f 75 74 20 30 78 37 66 66 66 66 66 66 66 66 66  out 0x7fffffffff
1e3b0 66 66 66 66 66 66 66 4c 4c 2e 20 20 54 68 65 20  fffffffLL.  The 
1e3c0 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 20  following macro 
1e3d0 73 65 65 6d 73 0a 20 20 20 20 2a 2a 20 74 6f 20  seems.    ** to 
1e3e0 70 72 6f 76 69 64 65 20 74 68 65 20 63 6f 6e 73  provide the cons
1e3f0 74 61 6e 74 20 77 68 69 6c 65 20 6d 61 6b 69 6e  tant while makin
1e400 67 20 61 6c 6c 20 63 6f 6d 70 69 6c 65 72 73 20  g all compilers 
1e410 68 61 70 70 79 2e 0a 20 20 20 20 2a 2f 0a 23 20  happy..    */.# 
1e420 20 20 64 65 66 69 6e 65 20 4d 41 58 5f 52 4f 57    define MAX_ROW
1e430 49 44 20 20 28 69 36 34 29 28 20 28 28 28 75 36  ID  (i64)( (((u6
1e440 34 29 30 78 37 66 66 66 66 66 66 66 29 3c 3c 33  4)0x7fffffff)<<3
1e450 32 29 20 7c 20 28 75 36 34 29 30 78 66 66 66 66  2) | (u64)0xffff
1e460 66 66 66 66 20 29 0a 23 65 6e 64 69 66 0a 0a 20  ffff ).#endif.. 
1e470 20 20 20 69 66 28 20 21 70 43 2d 3e 75 73 65 52     if( !pC->useR
1e480 61 6e 64 6f 6d 52 6f 77 69 64 20 29 7b 0a 20 20  andomRowid ){.  
1e490 20 20 20 20 76 20 3d 20 73 71 6c 69 74 65 33 42      v = sqlite3B
1e4a0 74 72 65 65 47 65 74 43 61 63 68 65 64 52 6f 77  treeGetCachedRow
1e4b0 69 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 29 3b  id(pC->pCursor);
1e4c0 0a 20 20 20 20 20 20 69 66 28 20 76 3d 3d 30 20  .      if( v==0 
1e4d0 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  ){.        rc = 
1e4e0 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74  sqlite3BtreeLast
1e4f0 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72  (pC->pCursor, &r
1e500 65 73 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28  es);.        if(
1e510 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
1e520 7b 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f  {.          goto
1e530 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
1e540 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  ror;.        }. 
1e550 20 20 20 20 20 20 20 69 66 28 20 72 65 73 20 29         if( res )
1e560 7b 0a 20 20 20 20 20 20 20 20 20 20 76 20 3d 20  {.          v = 
1e570 31 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 36  1;   /* IMP: R-6
1e580 31 39 31 34 2d 34 38 30 37 34 20 2a 2f 0a 20 20  1914-48074 */.  
1e590 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
1e5a0 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73         assert( s
1e5b0 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f  qlite3BtreeCurso
1e5c0 72 49 73 56 61 6c 69 64 28 70 43 2d 3e 70 43 75  rIsValid(pC->pCu
1e5d0 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 20  rsor) );.       
1e5e0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
1e5f0 74 72 65 65 4b 65 79 53 69 7a 65 28 70 43 2d 3e  treeKeySize(pC->
1e600 70 43 75 72 73 6f 72 2c 20 26 76 29 3b 0a 20 20  pCursor, &v);.  
1e610 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
1e620 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b  rc==SQLITE_OK );
1e630 20 20 20 2f 2a 20 43 61 6e 6e 6f 74 20 66 61 69     /* Cannot fai
1e640 6c 20 66 6f 6c 6c 6f 77 69 6e 67 20 42 74 72 65  l following Btre
1e650 65 4c 61 73 74 28 29 20 2a 2f 0a 20 20 20 20 20  eLast() */.     
1e660 20 20 20 20 20 69 66 28 20 76 3d 3d 4d 41 58 5f       if( v==MAX_
1e670 52 4f 57 49 44 20 29 7b 0a 20 20 20 20 20 20 20  ROWID ){.       
1e680 20 20 20 20 20 70 43 2d 3e 75 73 65 52 61 6e 64       pC->useRand
1e690 6f 6d 52 6f 77 69 64 20 3d 20 31 3b 0a 20 20 20  omRowid = 1;.   
1e6a0 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20         }else{.  
1e6b0 20 20 20 20 20 20 20 20 20 20 76 2b 2b 3b 20 20            v++;  
1e6c0 20 2f 2a 20 49 4d 50 3a 20 52 2d 32 39 35 33 38   /* IMP: R-29538
1e6d0 2d 33 34 39 38 37 20 2a 2f 0a 20 20 20 20 20 20  -34987 */.      
1e6e0 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a      }.        }.
1e6f0 20 20 20 20 20 20 7d 0a 0a 23 69 66 6e 64 65 66        }..#ifndef
1e700 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54   SQLITE_OMIT_AUT
1e710 4f 49 4e 43 52 45 4d 45 4e 54 0a 20 20 20 20 20  OINCREMENT.     
1e720 20 69 66 28 20 70 4f 70 2d 3e 70 33 20 29 7b 0a   if( pOp->p3 ){.
1e730 20 20 20 20 20 20 20 20 2f 2a 20 41 73 73 65 72          /* Asser
1e740 74 20 74 68 61 74 20 50 33 20 69 73 20 61 20 76  t that P3 is a v
1e750 61 6c 69 64 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  alid memory cell
1e760 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 61 73 73  . */.        ass
1e770 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29  ert( pOp->p3>0 )
1e780 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 2d  ;.        if( p-
1e790 3e 70 46 72 61 6d 65 20 29 7b 0a 20 20 20 20 20  >pFrame ){.     
1e7a0 20 20 20 20 20 66 6f 72 28 70 46 72 61 6d 65 3d       for(pFrame=
1e7b0 70 2d 3e 70 46 72 61 6d 65 3b 20 70 46 72 61 6d  p->pFrame; pFram
1e7c0 65 2d 3e 70 50 61 72 65 6e 74 3b 20 70 46 72 61  e->pParent; pFra
1e7d0 6d 65 3d 70 46 72 61 6d 65 2d 3e 70 50 61 72 65  me=pFrame->pPare
1e7e0 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20 2f  nt);.          /
1e7f0 2a 20 41 73 73 65 72 74 20 74 68 61 74 20 50 33  * Assert that P3
1e800 20 69 73 20 61 20 76 61 6c 69 64 20 6d 65 6d 6f   is a valid memo
1e810 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20  ry cell. */.    
1e820 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
1e830 70 2d 3e 70 33 3c 3d 70 46 72 61 6d 65 2d 3e 6e  p->p3<=pFrame->n
1e840 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20 20 20 20  Mem );.         
1e850 20 70 4d 65 6d 20 3d 20 26 70 46 72 61 6d 65 2d   pMem = &pFrame-
1e860 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  >aMem[pOp->p3];.
1e870 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20          }else{. 
1e880 20 20 20 20 20 20 20 20 20 2f 2a 20 41 73 73 65           /* Asse
1e890 72 74 20 74 68 61 74 20 50 33 20 69 73 20 61 20  rt that P3 is a 
1e8a0 76 61 6c 69 64 20 6d 65 6d 6f 72 79 20 63 65 6c  valid memory cel
1e8b0 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  l. */.          
1e8c0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c  assert( pOp->p3<
1e8d0 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20  =p->nMem );.    
1e8e0 20 20 20 20 20 20 70 4d 65 6d 20 3d 20 26 61 4d        pMem = &aM
1e8f0 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20  em[pOp->p3];.   
1e900 20 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74 54         memAboutT
1e910 6f 43 68 61 6e 67 65 28 70 2c 20 70 4d 65 6d 29  oChange(p, pMem)
1e920 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
1e930 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
1e940 73 56 61 6c 69 64 28 70 4d 65 6d 29 20 29 3b 0a  sValid(pMem) );.
1e950 0a 20 20 20 20 20 20 20 20 52 45 47 49 53 54 45  .        REGISTE
1e960 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c  R_TRACE(pOp->p3,
1e970 20 70 4d 65 6d 29 3b 0a 20 20 20 20 20 20 20 20   pMem);.        
1e980 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e  sqlite3VdbeMemIn
1e990 74 65 67 65 72 69 66 79 28 70 4d 65 6d 29 3b 0a  tegerify(pMem);.
1e9a0 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
1e9b0 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 4d  (pMem->flags & M
1e9c0 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 20 20 2f  EM_Int)!=0 );  /
1e9d0 2a 20 6d 65 6d 28 50 33 29 20 68 6f 6c 64 73 20  * mem(P3) holds 
1e9e0 61 6e 20 69 6e 74 65 67 65 72 20 2a 2f 0a 20 20  an integer */.  
1e9f0 20 20 20 20 20 20 69 66 28 20 70 4d 65 6d 2d 3e        if( pMem->
1ea00 75 2e 69 3d 3d 4d 41 58 5f 52 4f 57 49 44 20 7c  u.i==MAX_ROWID |
1ea10 7c 20 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52  | pC->useRandomR
1ea20 6f 77 69 64 20 29 7b 0a 20 20 20 20 20 20 20 20  owid ){.        
1ea30 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 46 55    rc = SQLITE_FU
1ea40 4c 4c 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d  LL;   /* IMP: R-
1ea50 31 32 32 37 35 2d 36 31 33 33 38 20 2a 2f 0a 20  12275-61338 */. 
1ea60 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62           goto ab
1ea70 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
1ea80 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
1ea90 20 20 20 20 69 66 28 20 76 3c 70 4d 65 6d 2d 3e      if( v<pMem->
1eaa0 75 2e 69 2b 31 20 29 7b 0a 20 20 20 20 20 20 20  u.i+1 ){.       
1eab0 20 20 20 76 20 3d 20 70 4d 65 6d 2d 3e 75 2e 69     v = pMem->u.i
1eac0 20 2b 20 31 3b 0a 20 20 20 20 20 20 20 20 7d 0a   + 1;.        }.
1ead0 20 20 20 20 20 20 20 20 70 4d 65 6d 2d 3e 75 2e          pMem->u.
1eae0 69 20 3d 20 76 3b 0a 20 20 20 20 20 20 7d 0a 23  i = v;.      }.#
1eaf0 65 6e 64 69 66 0a 0a 20 20 20 20 20 20 73 71 6c  endif..      sql
1eb00 69 74 65 33 42 74 72 65 65 53 65 74 43 61 63 68  ite3BtreeSetCach
1eb10 65 64 52 6f 77 69 64 28 70 43 2d 3e 70 43 75 72  edRowid(pC->pCur
1eb20 73 6f 72 2c 20 76 3c 4d 41 58 5f 52 4f 57 49 44  sor, v<MAX_ROWID
1eb30 20 3f 20 76 2b 31 20 3a 20 30 29 3b 0a 20 20 20   ? v+1 : 0);.   
1eb40 20 7d 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 75   }.    if( pC->u
1eb50 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20 29 7b  seRandomRowid ){
1eb60 0a 20 20 20 20 20 20 2f 2a 20 49 4d 50 4c 45 4d  .      /* IMPLEM
1eb70 45 4e 54 41 54 49 4f 4e 2d 4f 46 3a 20 52 2d 30  ENTATION-OF: R-0
1eb80 37 36 37 37 2d 34 31 38 38 31 20 49 66 20 74 68  7677-41881 If th
1eb90 65 20 6c 61 72 67 65 73 74 20 52 4f 57 49 44 20  e largest ROWID 
1eba0 69 73 20 65 71 75 61 6c 20 74 6f 20 74 68 65 0a  is equal to the.
1ebb0 20 20 20 20 20 20 2a 2a 20 6c 61 72 67 65 73 74        ** largest
1ebc0 20 70 6f 73 73 69 62 6c 65 20 69 6e 74 65 67 65   possible intege
1ebd0 72 20 28 39 32 32 33 33 37 32 30 33 36 38 35 34  r (9223372036854
1ebe0 37 37 35 38 30 37 29 20 74 68 65 6e 20 74 68 65  775807) then the
1ebf0 20 64 61 74 61 62 61 73 65 0a 20 20 20 20 20 20   database.      
1ec00 2a 2a 20 65 6e 67 69 6e 65 20 73 74 61 72 74 73  ** engine starts
1ec10 20 70 69 63 6b 69 6e 67 20 70 6f 73 69 74 69 76   picking positiv
1ec20 65 20 63 61 6e 64 69 64 61 74 65 20 52 4f 57 49  e candidate ROWI
1ec30 44 73 20 61 74 20 72 61 6e 64 6f 6d 20 75 6e 74  Ds at random unt
1ec40 69 6c 0a 20 20 20 20 20 20 2a 2a 20 69 74 20 66  il.      ** it f
1ec50 69 6e 64 73 20 6f 6e 65 20 74 68 61 74 20 69 73  inds one that is
1ec60 20 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c 79 20   not previously 
1ec70 75 73 65 64 2e 20 2a 2f 0a 20 20 20 20 20 20 61  used. */.      a
1ec80 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3d 3d  ssert( pOp->p3==
1ec90 30 20 29 3b 20 20 2f 2a 20 57 65 20 63 61 6e 6e  0 );  /* We cann
1eca0 6f 74 20 62 65 20 69 6e 20 72 61 6e 64 6f 6d 20  ot be in random 
1ecb0 72 6f 77 69 64 20 6d 6f 64 65 20 69 66 20 74 68  rowid mode if th
1ecc0 69 73 20 69 73 0a 20 20 20 20 20 20 20 20 20 20  is is.          
1ecd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ece0 20 20 20 2a 2a 20 61 6e 20 41 55 54 4f 49 4e 43     ** an AUTOINC
1ecf0 52 45 4d 45 4e 54 20 74 61 62 6c 65 2e 20 2a 2f  REMENT table. */
1ed00 0a 20 20 20 20 20 20 2f 2a 20 6f 6e 20 74 68 65  .      /* on the
1ed10 20 66 69 72 73 74 20 61 74 74 65 6d 70 74 2c 20   first attempt, 
1ed20 73 69 6d 70 6c 79 20 64 6f 20 6f 6e 65 20 6d 6f  simply do one mo
1ed30 72 65 20 74 68 61 6e 20 70 72 65 76 69 6f 75 73  re than previous
1ed40 20 2a 2f 0a 20 20 20 20 20 20 76 20 3d 20 64 62   */.      v = db
1ed50 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20 20  ->lastRowid;.   
1ed60 20 20 20 76 20 26 3d 20 28 4d 41 58 5f 52 4f 57     v &= (MAX_ROW
1ed70 49 44 3e 3e 31 29 3b 20 2f 2a 20 65 6e 73 75 72  ID>>1); /* ensur
1ed80 65 20 64 6f 65 73 6e 27 74 20 67 6f 20 6e 65 67  e doesn't go neg
1ed90 61 74 69 76 65 20 2a 2f 0a 20 20 20 20 20 20 76  ative */.      v
1eda0 2b 2b 3b 20 2f 2a 20 65 6e 73 75 72 65 20 6e 6f  ++; /* ensure no
1edb0 6e 2d 7a 65 72 6f 20 2a 2f 0a 20 20 20 20 20 20  n-zero */.      
1edc0 63 6e 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 77  cnt = 0;.      w
1edd0 68 69 6c 65 28 20 20 20 28 28 72 63 20 3d 20 73  hile(   ((rc = s
1ede0 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74  qlite3BtreeMovet
1edf0 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e 70 43  oUnpacked(pC->pC
1ee00 75 72 73 6f 72 2c 20 30 2c 20 28 75 36 34 29 76  ursor, 0, (u64)v
1ee10 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
1ee20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ee30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ee40 20 20 20 30 2c 20 26 72 65 73 29 29 3d 3d 53 51     0, &res))==SQ
1ee50 4c 49 54 45 5f 4f 4b 29 0a 20 20 20 20 20 20 20  LITE_OK).       
1ee60 20 20 20 20 20 26 26 20 28 72 65 73 3d 3d 30 29       && (res==0)
1ee70 0a 20 20 20 20 20 20 20 20 20 20 20 20 26 26 20  .            && 
1ee80 28 2b 2b 63 6e 74 3c 31 30 30 29 29 7b 0a 20 20  (++cnt<100)){.  
1ee90 20 20 20 20 20 20 2f 2a 20 63 6f 6c 6c 69 73 69        /* collisi
1eea0 6f 6e 20 2d 20 74 72 79 20 61 6e 6f 74 68 65 72  on - try another
1eeb0 20 72 61 6e 64 6f 6d 20 72 6f 77 69 64 20 2a 2f   random rowid */
1eec0 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
1eed0 5f 72 61 6e 64 6f 6d 6e 65 73 73 28 73 69 7a 65  _randomness(size
1eee0 6f 66 28 76 29 2c 20 26 76 29 3b 0a 20 20 20 20  of(v), &v);.    
1eef0 20 20 20 20 69 66 28 20 63 6e 74 3c 35 20 29 7b      if( cnt<5 ){
1ef00 0a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 74 72  .          /* tr
1ef10 79 20 22 73 6d 61 6c 6c 22 20 72 61 6e 64 6f 6d  y "small" random
1ef20 20 72 6f 77 69 64 73 20 66 6f 72 20 74 68 65 20   rowids for the 
1ef30 69 6e 69 74 69 61 6c 20 61 74 74 65 6d 70 74 73  initial attempts
1ef40 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 76 20   */.          v 
1ef50 26 3d 20 30 78 66 66 66 66 66 66 3b 0a 20 20 20  &= 0xffffff;.   
1ef60 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
1ef70 20 20 20 20 20 20 76 20 26 3d 20 28 4d 41 58 5f        v &= (MAX_
1ef80 52 4f 57 49 44 3e 3e 31 29 3b 20 2f 2a 20 65 6e  ROWID>>1); /* en
1ef90 73 75 72 65 20 64 6f 65 73 6e 27 74 20 67 6f 20  sure doesn't go 
1efa0 6e 65 67 61 74 69 76 65 20 2a 2f 0a 20 20 20 20  negative */.    
1efb0 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 76 2b      }.        v+
1efc0 2b 3b 20 2f 2a 20 65 6e 73 75 72 65 20 6e 6f 6e  +; /* ensure non
1efd0 2d 7a 65 72 6f 20 2a 2f 0a 20 20 20 20 20 20 7d  -zero */.      }
1efe0 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53  .      if( rc==S
1eff0 51 4c 49 54 45 5f 4f 4b 20 26 26 20 72 65 73 3d  QLITE_OK && res=
1f000 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63  =0 ){.        rc
1f010 20 3d 20 53 51 4c 49 54 45 5f 46 55 4c 4c 3b 20   = SQLITE_FULL; 
1f020 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 33 38 32 31    /* IMP: R-3821
1f030 39 2d 35 33 30 30 32 20 2a 2f 0a 20 20 20 20 20  9-53002 */.     
1f040 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
1f050 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
1f060 20 20 7d 0a 20 20 20 20 20 20 61 73 73 65 72 74    }.      assert
1f070 28 20 76 3e 30 20 29 3b 20 20 2f 2a 20 45 56 3a  ( v>0 );  /* EV:
1f080 20 52 2d 34 30 38 31 32 2d 30 33 35 37 30 20 2a   R-40812-03570 *
1f090 2f 0a 20 20 20 20 7d 0a 20 20 20 20 70 43 2d 3e  /.    }.    pC->
1f0a0 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30  rowidIsValid = 0
1f0b0 3b 0a 20 20 20 20 70 43 2d 3e 64 65 66 65 72 72  ;.    pC->deferr
1f0c0 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20  edMoveto = 0;.  
1f0d0 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
1f0e0 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
1f0f0 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69  .  }.  pOut->u.i
1f100 20 3d 20 76 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d   = v;.  break;.}
1f110 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 73  ../* Opcode: Ins
1f120 65 72 74 20 50 31 20 50 32 20 50 33 20 50 34 20  ert P1 P2 P3 P4 
1f130 50 35 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 61  P5.**.** Write a
1f140 6e 20 65 6e 74 72 79 20 69 6e 74 6f 20 74 68 65  n entry into the
1f150 20 74 61 62 6c 65 20 6f 66 20 63 75 72 73 6f 72   table of cursor
1f160 20 50 31 2e 20 20 41 20 6e 65 77 20 65 6e 74 72   P1.  A new entr
1f170 79 20 69 73 0a 2a 2a 20 63 72 65 61 74 65 64 20  y is.** created 
1f180 69 66 20 69 74 20 64 6f 65 73 6e 27 74 20 61 6c  if it doesn't al
1f190 72 65 61 64 79 20 65 78 69 73 74 20 6f 72 20 74  ready exist or t
1f1a0 68 65 20 64 61 74 61 20 66 6f 72 20 61 6e 20 65  he data for an e
1f1b0 78 69 73 74 69 6e 67 0a 2a 2a 20 65 6e 74 72 79  xisting.** entry
1f1c0 20 69 73 20 6f 76 65 72 77 72 69 74 74 65 6e 2e   is overwritten.
1f1d0 20 20 54 68 65 20 64 61 74 61 20 69 73 20 74 68    The data is th
1f1e0 65 20 76 61 6c 75 65 20 4d 45 4d 5f 42 6c 6f 62  e value MEM_Blob
1f1f0 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73   stored in regis
1f200 74 65 72 0a 2a 2a 20 6e 75 6d 62 65 72 20 50 32  ter.** number P2
1f210 2e 20 54 68 65 20 6b 65 79 20 69 73 20 73 74 6f  . The key is sto
1f220 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20  red in register 
1f230 50 33 2e 20 54 68 65 20 6b 65 79 20 6d 75 73 74  P3. The key must
1f240 0a 2a 2a 20 62 65 20 61 20 4d 45 4d 5f 49 6e 74  .** be a MEM_Int
1f250 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f  ..**.** If the O
1f260 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 66 6c  PFLAG_NCHANGE fl
1f270 61 67 20 6f 66 20 50 35 20 69 73 20 73 65 74 2c  ag of P5 is set,
1f280 20 74 68 65 6e 20 74 68 65 20 72 6f 77 20 63 68   then the row ch
1f290 61 6e 67 65 20 63 6f 75 6e 74 20 69 73 0a 2a 2a  ange count is.**
1f2a0 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 28 6f 74   incremented (ot
1f2b0 68 65 72 77 69 73 65 20 6e 6f 74 29 2e 20 20 49  herwise not).  I
1f2c0 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4c 41 53  f the OPFLAG_LAS
1f2d0 54 52 4f 57 49 44 20 66 6c 61 67 20 6f 66 20 50  TROWID flag of P
1f2e0 35 20 69 73 20 73 65 74 2c 0a 2a 2a 20 74 68 65  5 is set,.** the
1f2f0 6e 20 72 6f 77 69 64 20 69 73 20 73 74 6f 72 65  n rowid is store
1f300 64 20 66 6f 72 20 73 75 62 73 65 71 75 65 6e 74  d for subsequent
1f310 20 72 65 74 75 72 6e 20 62 79 20 74 68 65 0a 2a   return by the.*
1f320 2a 20 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69  * sqlite3_last_i
1f330 6e 73 65 72 74 5f 72 6f 77 69 64 28 29 20 66 75  nsert_rowid() fu
1f340 6e 63 74 69 6f 6e 20 28 6f 74 68 65 72 77 69 73  nction (otherwis
1f350 65 20 69 74 20 69 73 20 75 6e 6d 6f 64 69 66 69  e it is unmodifi
1f360 65 64 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ed)..**.** If th
1f370 65 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b  e OPFLAG_USESEEK
1f380 52 45 53 55 4c 54 20 66 6c 61 67 20 6f 66 20 50  RESULT flag of P
1f390 35 20 69 73 20 73 65 74 20 61 6e 64 20 69 66 20  5 is set and if 
1f3a0 74 68 65 20 72 65 73 75 6c 74 20 6f 66 0a 2a 2a  the result of.**
1f3b0 20 74 68 65 20 6c 61 73 74 20 73 65 65 6b 20 6f   the last seek o
1f3c0 70 65 72 61 74 69 6f 6e 20 28 4f 50 5f 4e 6f 74  peration (OP_Not
1f3d0 45 78 69 73 74 73 29 20 77 61 73 20 61 20 73 75  Exists) was a su
1f3e0 63 63 65 73 73 2c 20 74 68 65 6e 20 74 68 69 73  ccess, then this
1f3f0 0a 2a 2a 20 6f 70 65 72 61 74 69 6f 6e 20 77 69  .** operation wi
1f400 6c 6c 20 6e 6f 74 20 61 74 74 65 6d 70 74 20 74  ll not attempt t
1f410 6f 20 66 69 6e 64 20 74 68 65 20 61 70 70 72 6f  o find the appro
1f420 70 72 69 61 74 65 20 72 6f 77 20 62 65 66 6f 72  priate row befor
1f430 65 20 64 6f 69 6e 67 0a 2a 2a 20 74 68 65 20 69  e doing.** the i
1f440 6e 73 65 72 74 20 62 75 74 20 77 69 6c 6c 20 69  nsert but will i
1f450 6e 73 74 65 61 64 20 6f 76 65 72 77 72 69 74 65  nstead overwrite
1f460 20 74 68 65 20 72 6f 77 20 74 68 61 74 20 74 68   the row that th
1f470 65 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63  e cursor is.** c
1f480 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e  urrently pointin
1f490 67 20 74 6f 2e 20 20 50 72 65 73 75 6d 61 62 6c  g to.  Presumabl
1f4a0 79 2c 20 74 68 65 20 70 72 69 6f 72 20 4f 50 5f  y, the prior OP_
1f4b0 4e 6f 74 45 78 69 73 74 73 20 6f 70 63 6f 64 65  NotExists opcode
1f4c0 0a 2a 2a 20 68 61 73 20 61 6c 72 65 61 64 79 20  .** has already 
1f4d0 70 6f 73 69 74 69 6f 6e 65 64 20 74 68 65 20 63  positioned the c
1f4e0 75 72 73 6f 72 20 63 6f 72 72 65 63 74 6c 79 2e  ursor correctly.
1f4f0 20 20 54 68 69 73 20 69 73 20 61 6e 20 6f 70 74    This is an opt
1f500 69 6d 69 7a 61 74 69 6f 6e 0a 2a 2a 20 74 68 61  imization.** tha
1f510 74 20 62 6f 6f 73 74 73 20 70 65 72 66 6f 72 6d  t boosts perform
1f520 61 6e 63 65 20 62 79 20 61 76 6f 69 64 69 6e 67  ance by avoiding
1f530 20 72 65 64 75 6e 64 61 6e 74 20 73 65 65 6b 73   redundant seeks
1f540 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f  ..**.** If the O
1f550 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45 20 66  PFLAG_ISUPDATE f
1f560 6c 61 67 20 69 73 20 73 65 74 2c 20 74 68 65 6e  lag is set, then
1f570 20 74 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20   this opcode is 
1f580 70 61 72 74 20 6f 66 20 61 6e 0a 2a 2a 20 55 50  part of an.** UP
1f590 44 41 54 45 20 6f 70 65 72 61 74 69 6f 6e 2e 20  DATE operation. 
1f5a0 20 4f 74 68 65 72 77 69 73 65 20 28 69 66 20 74   Otherwise (if t
1f5b0 68 65 20 66 6c 61 67 20 69 73 20 63 6c 65 61 72  he flag is clear
1f5c0 29 20 74 68 65 6e 20 74 68 69 73 20 6f 70 63 6f  ) then this opco
1f5d0 64 65 0a 2a 2a 20 69 73 20 70 61 72 74 20 6f 66  de.** is part of
1f5e0 20 61 6e 20 49 4e 53 45 52 54 20 6f 70 65 72 61   an INSERT opera
1f5f0 74 69 6f 6e 2e 20 20 54 68 65 20 64 69 66 66 65  tion.  The diffe
1f600 72 65 6e 63 65 20 69 73 20 6f 6e 6c 79 20 69 6d  rence is only im
1f610 70 6f 72 74 61 6e 74 20 74 6f 0a 2a 2a 20 74 68  portant to.** th
1f620 65 20 75 70 64 61 74 65 20 68 6f 6f 6b 2e 0a 2a  e update hook..*
1f630 2a 0a 2a 2a 20 50 61 72 61 6d 65 74 65 72 20 50  *.** Parameter P
1f640 34 20 6d 61 79 20 70 6f 69 6e 74 20 74 6f 20 61  4 may point to a
1f650 20 73 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e 69   string containi
1f660 6e 67 20 74 68 65 20 74 61 62 6c 65 2d 6e 61 6d  ng the table-nam
1f670 65 2c 20 6f 72 0a 2a 2a 20 6d 61 79 20 62 65 20  e, or.** may be 
1f680 4e 55 4c 4c 2e 20 49 66 20 69 74 20 69 73 20 6e  NULL. If it is n
1f690 6f 74 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 74 68  ot NULL, then th
1f6a0 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20 0a 2a  e update-hook .*
1f6b0 2a 20 28 73 71 6c 69 74 65 33 2e 78 55 70 64 61  * (sqlite3.xUpda
1f6c0 74 65 43 61 6c 6c 62 61 63 6b 29 20 69 73 20 69  teCallback) is i
1f6d0 6e 76 6f 6b 65 64 20 66 6f 6c 6c 6f 77 69 6e 67  nvoked following
1f6e0 20 61 20 73 75 63 63 65 73 73 66 75 6c 20 69 6e   a successful in
1f6f0 73 65 72 74 2e 0a 2a 2a 0a 2a 2a 20 28 57 41 52  sert..**.** (WAR
1f700 4e 49 4e 47 2f 54 4f 44 4f 3a 20 49 66 20 50 31  NING/TODO: If P1
1f710 20 69 73 20 61 20 70 73 65 75 64 6f 2d 63 75 72   is a pseudo-cur
1f720 73 6f 72 20 61 6e 64 20 50 32 20 69 73 20 64 79  sor and P2 is dy
1f730 6e 61 6d 69 63 61 6c 6c 79 0a 2a 2a 20 61 6c 6c  namically.** all
1f740 6f 63 61 74 65 64 2c 20 74 68 65 6e 20 6f 77 6e  ocated, then own
1f750 65 72 73 68 69 70 20 6f 66 20 50 32 20 69 73 20  ership of P2 is 
1f760 74 72 61 6e 73 66 65 72 72 65 64 20 74 6f 20 74  transferred to t
1f770 68 65 20 70 73 65 75 64 6f 2d 63 75 72 73 6f 72  he pseudo-cursor
1f780 0a 2a 2a 20 61 6e 64 20 72 65 67 69 73 74 65 72  .** and register
1f790 20 50 32 20 62 65 63 6f 6d 65 73 20 65 70 68 65   P2 becomes ephe
1f7a0 6d 65 72 61 6c 2e 20 20 49 66 20 74 68 65 20 63  meral.  If the c
1f7b0 75 72 73 6f 72 20 69 73 20 63 68 61 6e 67 65 64  ursor is changed
1f7c0 2c 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 6f  , the.** value o
1f7d0 66 20 72 65 67 69 73 74 65 72 20 50 32 20 77 69  f register P2 wi
1f7e0 6c 6c 20 74 68 65 6e 20 63 68 61 6e 67 65 2e 20  ll then change. 
1f7f0 20 4d 61 6b 65 20 73 75 72 65 20 74 68 69 73 20   Make sure this 
1f800 64 6f 65 73 20 6e 6f 74 0a 2a 2a 20 63 61 75 73  does not.** caus
1f810 65 20 61 6e 79 20 70 72 6f 62 6c 65 6d 73 2e 29  e any problems.)
1f820 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74  .**.** This inst
1f830 72 75 63 74 69 6f 6e 20 6f 6e 6c 79 20 77 6f 72  ruction only wor
1f840 6b 73 20 6f 6e 20 74 61 62 6c 65 73 2e 20 20 54  ks on tables.  T
1f850 68 65 20 65 71 75 69 76 61 6c 65 6e 74 20 69 6e  he equivalent in
1f860 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 66 6f 72  struction.** for
1f870 20 69 6e 64 69 63 65 73 20 69 73 20 4f 50 5f 49   indices is OP_I
1f880 64 78 49 6e 73 65 72 74 2e 0a 2a 2f 0a 2f 2a 20  dxInsert..*/./* 
1f890 4f 70 63 6f 64 65 3a 20 49 6e 73 65 72 74 49 6e  Opcode: InsertIn
1f8a0 74 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  t P1 P2 P3 P4 P5
1f8b0 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b  .**.** This work
1f8c0 73 20 65 78 61 63 74 6c 79 20 6c 69 6b 65 20 4f  s exactly like O
1f8d0 50 5f 49 6e 73 65 72 74 20 65 78 63 65 70 74 20  P_Insert except 
1f8e0 74 68 61 74 20 74 68 65 20 6b 65 79 20 69 73 20  that the key is 
1f8f0 74 68 65 0a 2a 2a 20 69 6e 74 65 67 65 72 20 76  the.** integer v
1f900 61 6c 75 65 20 50 33 2c 20 6e 6f 74 20 74 68 65  alue P3, not the
1f910 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 69 6e   value of the in
1f920 74 65 67 65 72 20 73 74 6f 72 65 64 20 69 6e 20  teger stored in 
1f930 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2f 0a  register P3..*/.
1f940 63 61 73 65 20 4f 50 5f 49 6e 73 65 72 74 3a 20  case OP_Insert: 
1f950 0a 63 61 73 65 20 4f 50 5f 49 6e 73 65 72 74 49  .case OP_InsertI
1f960 6e 74 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70 44 61  nt: {.  Mem *pDa
1f970 74 61 3b 20 20 20 20 20 20 20 2f 2a 20 4d 45 4d  ta;       /* MEM
1f980 20 63 65 6c 6c 20 68 6f 6c 64 69 6e 67 20 64 61   cell holding da
1f990 74 61 20 66 6f 72 20 74 68 65 20 72 65 63 6f 72  ta for the recor
1f9a0 64 20 74 6f 20 62 65 20 69 6e 73 65 72 74 65 64  d to be inserted
1f9b0 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4b 65 79 3b   */.  Mem *pKey;
1f9c0 20 20 20 20 20 20 20 20 2f 2a 20 4d 45 4d 20 63          /* MEM c
1f9d0 65 6c 6c 20 68 6f 6c 64 69 6e 67 20 6b 65 79 20  ell holding key 
1f9e0 20 66 6f 72 20 74 68 65 20 72 65 63 6f 72 64 20   for the record 
1f9f0 2a 2f 0a 20 20 69 36 34 20 69 4b 65 79 3b 20 20  */.  i64 iKey;  
1fa00 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 69 6e         /* The in
1fa10 74 65 67 65 72 20 52 4f 57 49 44 20 6f 72 20 6b  teger ROWID or k
1fa20 65 79 20 66 6f 72 20 74 68 65 20 72 65 63 6f 72  ey for the recor
1fa30 64 20 74 6f 20 62 65 20 69 6e 73 65 72 74 65 64  d to be inserted
1fa40 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72   */.  VdbeCursor
1fa50 20 2a 70 43 3b 20 20 20 2f 2a 20 43 75 72 73 6f   *pC;   /* Curso
1fa60 72 20 74 6f 20 74 61 62 6c 65 20 69 6e 74 6f 20  r to table into 
1fa70 77 68 69 63 68 20 69 6e 73 65 72 74 20 69 73 20  which insert is 
1fa80 77 72 69 74 74 65 6e 20 2a 2f 0a 20 20 69 6e 74  written */.  int
1fa90 20 6e 5a 65 72 6f 3b 20 20 20 20 20 20 20 20 2f   nZero;        /
1faa0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 7a 65 72 6f  * Number of zero
1fab0 2d 62 79 74 65 73 20 74 6f 20 61 70 70 65 6e 64  -bytes to append
1fac0 20 2a 2f 0a 20 20 69 6e 74 20 73 65 65 6b 52 65   */.  int seekRe
1fad0 73 75 6c 74 3b 20 20 20 2f 2a 20 52 65 73 75 6c  sult;   /* Resul
1fae0 74 20 6f 66 20 70 72 69 6f 72 20 73 65 65 6b 20  t of prior seek 
1faf0 6f 72 20 30 20 69 66 20 6e 6f 20 55 53 45 53 45  or 0 if no USESE
1fb00 45 4b 52 45 53 55 4c 54 20 66 6c 61 67 20 2a 2f  EKRESULT flag */
1fb10 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
1fb20 44 62 3b 20 20 2f 2a 20 64 61 74 61 62 61 73 65  Db;  /* database
1fb30 20 6e 61 6d 65 20 2d 20 75 73 65 64 20 62 79 20   name - used by 
1fb40 74 68 65 20 75 70 64 61 74 65 20 68 6f 6f 6b 20  the update hook 
1fb50 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
1fb60 2a 7a 54 62 6c 3b 20 2f 2a 20 54 61 62 6c 65 20  *zTbl; /* Table 
1fb70 6e 61 6d 65 20 2d 20 75 73 65 64 20 62 79 20 74  name - used by t
1fb80 68 65 20 6f 70 64 61 74 65 20 68 6f 6f 6b 20 2a  he opdate hook *
1fb90 2f 0a 20 20 69 6e 74 20 6f 70 3b 20 20 20 20 20  /.  int op;     
1fba0 20 20 20 20 20 20 2f 2a 20 4f 70 63 6f 64 65 20        /* Opcode 
1fbb0 66 6f 72 20 75 70 64 61 74 65 20 68 6f 6f 6b 3a  for update hook:
1fbc0 20 53 51 4c 49 54 45 5f 55 50 44 41 54 45 20 6f   SQLITE_UPDATE o
1fbd0 72 20 53 51 4c 49 54 45 5f 49 4e 53 45 52 54 20  r SQLITE_INSERT 
1fbe0 2a 2f 0a 0a 20 20 70 44 61 74 61 20 3d 20 26 61  */..  pData = &a
1fbf0 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
1fc00 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
1fc10 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
1fc20 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73  >nCursor );.  as
1fc30 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
1fc40 28 70 44 61 74 61 29 20 29 3b 0a 20 20 70 43 20  (pData) );.  pC 
1fc50 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
1fc60 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
1fc70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  C!=0 );.  assert
1fc80 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30  ( pC->pCursor!=0
1fc90 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
1fca0 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67  ->pseudoTableReg
1fcb0 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==0 );.  assert(
1fcc0 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a   pC->isTable );.
1fcd0 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
1fce0 28 70 4f 70 2d 3e 70 32 2c 20 70 44 61 74 61 29  (pOp->p2, pData)
1fcf0 3b 0a 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70  ;..  if( pOp->op
1fd00 63 6f 64 65 3d 3d 4f 50 5f 49 6e 73 65 72 74 20  code==OP_Insert 
1fd10 29 7b 0a 20 20 20 20 70 4b 65 79 20 3d 20 26 61  ){.    pKey = &a
1fd20 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
1fd30 20 20 61 73 73 65 72 74 28 20 70 4b 65 79 2d 3e    assert( pKey->
1fd40 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20  flags & MEM_Int 
1fd50 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d  );.    assert( m
1fd60 65 6d 49 73 56 61 6c 69 64 28 70 4b 65 79 29 20  emIsValid(pKey) 
1fd70 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f  );.    REGISTER_
1fd80 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70  TRACE(pOp->p3, p
1fd90 4b 65 79 29 3b 0a 20 20 20 20 69 4b 65 79 20 3d  Key);.    iKey =
1fda0 20 70 4b 65 79 2d 3e 75 2e 69 3b 0a 20 20 7d 65   pKey->u.i;.  }e
1fdb0 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28  lse{.    assert(
1fdc0 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
1fdd0 5f 49 6e 73 65 72 74 49 6e 74 20 29 3b 0a 20 20  _InsertInt );.  
1fde0 20 20 69 4b 65 79 20 3d 20 70 4f 70 2d 3e 70 33    iKey = pOp->p3
1fdf0 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 70 4f 70  ;.  }..  if( pOp
1fe00 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 4e 43  ->p5 & OPFLAG_NC
1fe10 48 41 4e 47 45 20 29 20 70 2d 3e 6e 43 68 61 6e  HANGE ) p->nChan
1fe20 67 65 2b 2b 3b 0a 20 20 69 66 28 20 70 4f 70 2d  ge++;.  if( pOp-
1fe30 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 4c 41 53  >p5 & OPFLAG_LAS
1fe40 54 52 4f 57 49 44 20 29 20 64 62 2d 3e 6c 61 73  TROWID ) db->las
1fe50 74 52 6f 77 69 64 20 3d 20 69 4b 65 79 3b 0a 20  tRowid = iKey;. 
1fe60 20 69 66 28 20 70 44 61 74 61 2d 3e 66 6c 61 67   if( pData->flag
1fe70 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a  s & MEM_Null ){.
1fe80 20 20 20 20 70 44 61 74 61 2d 3e 7a 20 3d 20 30      pData->z = 0
1fe90 3b 0a 20 20 20 20 70 44 61 74 61 2d 3e 6e 20 3d  ;.    pData->n =
1fea0 20 30 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20   0;.  }else{.   
1feb0 20 61 73 73 65 72 74 28 20 70 44 61 74 61 2d 3e   assert( pData->
1fec0 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 42 6c 6f  flags & (MEM_Blo
1fed0 62 7c 4d 45 4d 5f 53 74 72 29 20 29 3b 0a 20 20  b|MEM_Str) );.  
1fee0 7d 0a 20 20 73 65 65 6b 52 65 73 75 6c 74 20 3d  }.  seekResult =
1fef0 20 28 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46   ((pOp->p5 & OPF
1ff00 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c  LAG_USESEEKRESUL
1ff10 54 29 20 3f 20 70 43 2d 3e 73 65 65 6b 52 65 73  T) ? pC->seekRes
1ff20 75 6c 74 20 3a 20 30 29 3b 0a 20 20 69 66 28 20  ult : 0);.  if( 
1ff30 70 44 61 74 61 2d 3e 66 6c 61 67 73 20 26 20 4d  pData->flags & M
1ff40 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20 6e  EM_Zero ){.    n
1ff50 5a 65 72 6f 20 3d 20 70 44 61 74 61 2d 3e 75 2e  Zero = pData->u.
1ff60 6e 5a 65 72 6f 3b 0a 20 20 7d 65 6c 73 65 7b 0a  nZero;.  }else{.
1ff70 20 20 20 20 6e 5a 65 72 6f 20 3d 20 30 3b 0a 20      nZero = 0;. 
1ff80 20 7d 0a 20 20 73 71 6c 69 74 65 33 42 74 72 65   }.  sqlite3Btre
1ff90 65 53 65 74 43 61 63 68 65 64 52 6f 77 69 64 28  eSetCachedRowid(
1ffa0 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 30 29 3b  pC->pCursor, 0);
1ffb0 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42  .  rc = sqlite3B
1ffc0 74 72 65 65 49 6e 73 65 72 74 28 70 43 2d 3e 70  treeInsert(pC->p
1ffd0 43 75 72 73 6f 72 2c 20 30 2c 20 69 4b 65 79 2c  Cursor, 0, iKey,
1ffe0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1fff0 20 20 20 20 20 20 20 20 20 20 20 70 44 61 74 61             pData
20000 2d 3e 7a 2c 20 70 44 61 74 61 2d 3e 6e 2c 20 6e  ->z, pData->n, n
20010 5a 65 72 6f 2c 0a 20 20 20 20 20 20 20 20 20 20  Zero,.          
20020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20030 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47  pOp->p5 & OPFLAG
20040 5f 41 50 50 45 4e 44 2c 20 73 65 65 6b 52 65 73  _APPEND, seekRes
20050 75 6c 74 0a 20 20 29 3b 0a 20 20 70 43 2d 3e 72  ult.  );.  pC->r
20060 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b  owidIsValid = 0;
20070 0a 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d  .  pC->deferredM
20080 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 70 43 2d  oveto = 0;.  pC-
20090 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
200a0 41 43 48 45 5f 53 54 41 4c 45 3b 0a 0a 20 20 2f  ACHE_STALE;..  /
200b0 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 75 70 64  * Invoke the upd
200c0 61 74 65 2d 68 6f 6f 6b 20 69 66 20 72 65 71 75  ate-hook if requ
200d0 69 72 65 64 2e 20 2a 2f 0a 20 20 69 66 28 20 72  ired. */.  if( r
200e0 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20  c==SQLITE_OK && 
200f0 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62  db->xUpdateCallb
20100 61 63 6b 20 26 26 20 70 4f 70 2d 3e 70 34 2e 7a  ack && pOp->p4.z
20110 20 29 7b 0a 20 20 20 20 7a 44 62 20 3d 20 64 62   ){.    zDb = db
20120 2d 3e 61 44 62 5b 70 43 2d 3e 69 44 62 5d 2e 7a  ->aDb[pC->iDb].z
20130 4e 61 6d 65 3b 0a 20 20 20 20 7a 54 62 6c 20 3d  Name;.    zTbl =
20140 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 20 20   pOp->p4.z;.    
20150 6f 70 20 3d 20 28 28 70 4f 70 2d 3e 70 35 20 26  op = ((pOp->p5 &
20160 20 4f 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45   OPFLAG_ISUPDATE
20170 29 20 3f 20 53 51 4c 49 54 45 5f 55 50 44 41 54  ) ? SQLITE_UPDAT
20180 45 20 3a 20 53 51 4c 49 54 45 5f 49 4e 53 45 52  E : SQLITE_INSER
20190 54 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  T);.    assert( 
201a0 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20  pC->isTable );. 
201b0 20 20 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61     db->xUpdateCa
201c0 6c 6c 62 61 63 6b 28 64 62 2d 3e 70 55 70 64 61  llback(db->pUpda
201d0 74 65 41 72 67 2c 20 6f 70 2c 20 7a 44 62 2c 20  teArg, op, zDb, 
201e0 7a 54 62 6c 2c 20 69 4b 65 79 29 3b 0a 20 20 20  zTbl, iKey);.   
201f0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 44 62   assert( pC->iDb
20200 3e 3d 30 20 29 3b 0a 20 20 7d 0a 20 20 62 72 65  >=0 );.  }.  bre
20210 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
20220 3a 20 44 65 6c 65 74 65 20 50 31 20 50 32 20 2a  : Delete P1 P2 *
20230 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 44 65 6c 65   P4 *.**.** Dele
20240 74 65 20 74 68 65 20 72 65 63 6f 72 64 20 61 74  te the record at
20250 20 77 68 69 63 68 20 74 68 65 20 50 31 20 63 75   which the P1 cu
20260 72 73 6f 72 20 69 73 20 63 75 72 72 65 6e 74 6c  rsor is currentl
20270 79 20 70 6f 69 6e 74 69 6e 67 2e 0a 2a 2a 0a 2a  y pointing..**.*
20280 2a 20 54 68 65 20 63 75 72 73 6f 72 20 77 69 6c  * The cursor wil
20290 6c 20 62 65 20 6c 65 66 74 20 70 6f 69 6e 74 69  l be left pointi
202a0 6e 67 20 61 74 20 65 69 74 68 65 72 20 74 68 65  ng at either the
202b0 20 6e 65 78 74 20 6f 72 20 74 68 65 20 70 72 65   next or the pre
202c0 76 69 6f 75 73 0a 2a 2a 20 72 65 63 6f 72 64 20  vious.** record 
202d0 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 49 66  in the table. If
202e0 20 69 74 20 69 73 20 6c 65 66 74 20 70 6f 69 6e   it is left poin
202f0 74 69 6e 67 20 61 74 20 74 68 65 20 6e 65 78 74  ting at the next
20300 20 72 65 63 6f 72 64 2c 20 74 68 65 6e 0a 2a 2a   record, then.**
20310 20 74 68 65 20 6e 65 78 74 20 4e 65 78 74 20 69   the next Next i
20320 6e 73 74 72 75 63 74 69 6f 6e 20 77 69 6c 6c 20  nstruction will 
20330 62 65 20 61 20 6e 6f 2d 6f 70 2e 20 20 48 65 6e  be a no-op.  Hen
20340 63 65 20 69 74 20 69 73 20 4f 4b 20 74 6f 20 64  ce it is OK to d
20350 65 6c 65 74 65 0a 2a 2a 20 61 20 72 65 63 6f 72  elete.** a recor
20360 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 61 6e  d from within an
20370 20 4e 65 78 74 20 6c 6f 6f 70 2e 0a 2a 2a 0a 2a   Next loop..**.*
20380 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f  * If the OPFLAG_
20390 4e 43 48 41 4e 47 45 20 66 6c 61 67 20 6f 66 20  NCHANGE flag of 
203a0 50 32 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20  P2 is set, then 
203b0 74 68 65 20 72 6f 77 20 63 68 61 6e 67 65 20 63  the row change c
203c0 6f 75 6e 74 20 69 73 0a 2a 2a 20 69 6e 63 72 65  ount is.** incre
203d0 6d 65 6e 74 65 64 20 28 6f 74 68 65 72 77 69 73  mented (otherwis
203e0 65 20 6e 6f 74 29 2e 0a 2a 2a 0a 2a 2a 20 50 31  e not)..**.** P1
203f0 20 6d 75 73 74 20 6e 6f 74 20 62 65 20 70 73 65   must not be pse
20400 75 64 6f 2d 74 61 62 6c 65 2e 20 20 49 74 20 68  udo-table.  It h
20410 61 73 20 74 6f 20 62 65 20 61 20 72 65 61 6c 20  as to be a real 
20420 74 61 62 6c 65 20 77 69 74 68 0a 2a 2a 20 6d 75  table with.** mu
20430 6c 74 69 70 6c 65 20 72 6f 77 73 2e 0a 2a 2a 0a  ltiple rows..**.
20440 2a 2a 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20  ** If P4 is not 
20450 4e 55 4c 4c 2c 20 74 68 65 6e 20 69 74 20 69 73  NULL, then it is
20460 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   the name of the
20470 20 74 61 62 6c 65 20 74 68 61 74 20 50 31 20 69   table that P1 i
20480 73 0a 2a 2a 20 70 6f 69 6e 74 69 6e 67 20 74 6f  s.** pointing to
20490 2e 20 20 54 68 65 20 75 70 64 61 74 65 20 68 6f  .  The update ho
204a0 6f 6b 20 77 69 6c 6c 20 62 65 20 69 6e 76 6f 6b  ok will be invok
204b0 65 64 2c 20 69 66 20 69 74 20 65 78 69 73 74 73  ed, if it exists
204c0 2e 0a 2a 2a 20 49 66 20 50 34 20 69 73 20 6e 6f  ..** If P4 is no
204d0 74 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65 20  t NULL then the 
204e0 50 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20 68  P1 cursor must h
204f0 61 76 65 20 62 65 65 6e 20 70 6f 73 69 74 69 6f  ave been positio
20500 6e 65 64 0a 2a 2a 20 75 73 69 6e 67 20 4f 50 5f  ned.** using OP_
20510 4e 6f 74 46 6f 75 6e 64 20 70 72 69 6f 72 20 74  NotFound prior t
20520 6f 20 69 6e 76 6f 6b 69 6e 67 20 74 68 69 73 20  o invoking this 
20530 6f 70 63 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65 20  opcode..*/.case 
20540 4f 50 5f 44 65 6c 65 74 65 3a 20 7b 0a 20 20 69  OP_Delete: {.  i
20550 36 34 20 69 4b 65 79 3b 0a 20 20 56 64 62 65 43  64 iKey;.  VdbeC
20560 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 69 4b  ursor *pC;..  iK
20570 65 79 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74  ey = 0;.  assert
20580 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
20590 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
205a0 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
205b0 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
205c0 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
205d0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
205e0 3e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 20 20  >pCursor!=0 );  
205f0 2f 2a 20 4f 6e 6c 79 20 76 61 6c 69 64 20 66 6f  /* Only valid fo
20600 72 20 72 65 61 6c 20 74 61 62 6c 65 73 2c 20 6e  r real tables, n
20610 6f 20 70 73 65 75 64 6f 74 61 62 6c 65 73 20 2a  o pseudotables *
20620 2f 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 75  /..  /* If the u
20630 70 64 61 74 65 2d 68 6f 6f 6b 20 77 69 6c 6c 20  pdate-hook will 
20640 62 65 20 69 6e 76 6f 6b 65 64 2c 20 73 65 74 20  be invoked, set 
20650 69 4b 65 79 20 74 6f 20 74 68 65 20 72 6f 77 69  iKey to the rowi
20660 64 20 6f 66 20 74 68 65 0a 20 20 2a 2a 20 72 6f  d of the.  ** ro
20670 77 20 62 65 69 6e 67 20 64 65 6c 65 74 65 64 2e  w being deleted.
20680 0a 20 20 2a 2f 0a 20 20 69 66 28 20 64 62 2d 3e  .  */.  if( db->
20690 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20  xUpdateCallback 
206a0 26 26 20 70 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a  && pOp->p4.z ){.
206b0 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
206c0 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 20 20 61  isTable );.    a
206d0 73 73 65 72 74 28 20 70 43 2d 3e 72 6f 77 69 64  ssert( pC->rowid
206e0 49 73 56 61 6c 69 64 20 29 3b 20 20 2f 2a 20 6c  IsValid );  /* l
206f0 61 73 74 52 6f 77 69 64 20 73 65 74 20 62 79 20  astRowid set by 
20700 70 72 65 76 69 6f 75 73 20 4f 50 5f 4e 6f 74 46  previous OP_NotF
20710 6f 75 6e 64 20 2a 2f 0a 20 20 20 20 69 4b 65 79  ound */.    iKey
20720 20 3d 20 70 43 2d 3e 6c 61 73 74 52 6f 77 69 64   = pC->lastRowid
20730 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 54 68 65 20  ;.  }..  /* The 
20740 4f 50 5f 44 65 6c 65 74 65 20 6f 70 63 6f 64 65  OP_Delete opcode
20750 20 61 6c 77 61 79 73 20 66 6f 6c 6c 6f 77 73 20   always follows 
20760 61 6e 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 20  an OP_NotExists 
20770 6f 72 20 4f 50 5f 4c 61 73 74 20 6f 72 0a 20 20  or OP_Last or.  
20780 2a 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 6e 20  ** OP_Column on 
20790 74 68 65 20 73 61 6d 65 20 74 61 62 6c 65 20 77  the same table w
207a0 69 74 68 6f 75 74 20 61 6e 79 20 69 6e 74 65 72  ithout any inter
207b0 76 65 6e 69 6e 67 20 6f 70 65 72 61 74 69 6f 6e  vening operation
207c0 73 20 74 68 61 74 0a 20 20 2a 2a 20 6d 69 67 68  s that.  ** migh
207d0 74 20 6d 6f 76 65 20 6f 72 20 69 6e 76 61 6c 69  t move or invali
207e0 64 61 74 65 20 74 68 65 20 63 75 72 73 6f 72 2e  date the cursor.
207f0 20 20 48 65 6e 63 65 20 63 75 72 73 6f 72 20 70    Hence cursor p
20800 43 20 69 73 20 61 6c 77 61 79 73 20 70 6f 69 6e  C is always poin
20810 74 69 6e 67 0a 20 20 2a 2a 20 74 6f 20 74 68 65  ting.  ** to the
20820 20 72 6f 77 20 74 6f 20 62 65 20 64 65 6c 65 74   row to be delet
20830 65 64 20 61 6e 64 20 74 68 65 20 73 71 6c 69 74  ed and the sqlit
20840 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65  e3VdbeCursorMove
20850 74 6f 28 29 20 6f 70 65 72 61 74 69 6f 6e 0a 20  to() operation. 
20860 20 2a 2a 20 62 65 6c 6f 77 20 69 73 20 61 6c 77   ** below is alw
20870 61 79 73 20 61 20 6e 6f 2d 6f 70 20 61 6e 64 20  ays a no-op and 
20880 63 61 6e 6e 6f 74 20 66 61 69 6c 2e 20 20 57 65  cannot fail.  We
20890 20 77 69 6c 6c 20 72 75 6e 20 69 74 20 61 6e 79   will run it any
208a0 68 6f 77 2c 20 74 68 6f 75 67 68 2c 0a 20 20 2a  how, though,.  *
208b0 2a 20 74 6f 20 67 75 61 72 64 20 61 67 61 69 6e  * to guard again
208c0 73 74 20 66 75 74 75 72 65 20 63 68 61 6e 67 65  st future change
208d0 73 20 74 6f 20 74 68 65 20 63 6f 64 65 20 67 65  s to the code ge
208e0 6e 65 72 61 74 6f 72 2e 0a 20 20 2a 2a 2f 0a 20  nerator..  **/. 
208f0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66   assert( pC->def
20900 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29  erredMoveto==0 )
20910 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
20920 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f  VdbeCursorMoveto
20930 28 70 43 29 3b 0a 20 20 69 66 28 20 4e 45 56 45  (pC);.  if( NEVE
20940 52 28 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 29  R(rc!=SQLITE_OK)
20950 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
20960 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a 20 20 73  e_to_error;..  s
20970 71 6c 69 74 65 33 42 74 72 65 65 53 65 74 43 61  qlite3BtreeSetCa
20980 63 68 65 64 52 6f 77 69 64 28 70 43 2d 3e 70 43  chedRowid(pC->pC
20990 75 72 73 6f 72 2c 20 30 29 3b 0a 20 20 72 63 20  ursor, 0);.  rc 
209a0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 44 65  = sqlite3BtreeDe
209b0 6c 65 74 65 28 70 43 2d 3e 70 43 75 72 73 6f 72  lete(pC->pCursor
209c0 29 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74  );.  pC->cacheSt
209d0 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
209e0 4c 45 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65  LE;..  /* Invoke
209f0 20 74 68 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b   the update-hook
20a00 20 69 66 20 72 65 71 75 69 72 65 64 2e 20 2a 2f   if required. */
20a10 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54  .  if( rc==SQLIT
20a20 45 5f 4f 4b 20 26 26 20 64 62 2d 3e 78 55 70 64  E_OK && db->xUpd
20a30 61 74 65 43 61 6c 6c 62 61 63 6b 20 26 26 20 70  ateCallback && p
20a40 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20 20 20  Op->p4.z ){.    
20a50 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 20  const char *zDb 
20a60 3d 20 64 62 2d 3e 61 44 62 5b 70 43 2d 3e 69 44  = db->aDb[pC->iD
20a70 62 5d 2e 7a 4e 61 6d 65 3b 0a 20 20 20 20 63 6f  b].zName;.    co
20a80 6e 73 74 20 63 68 61 72 20 2a 7a 54 62 6c 20 3d  nst char *zTbl =
20a90 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 20 20   pOp->p4.z;.    
20aa0 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62  db->xUpdateCallb
20ab0 61 63 6b 28 64 62 2d 3e 70 55 70 64 61 74 65 41  ack(db->pUpdateA
20ac0 72 67 2c 20 53 51 4c 49 54 45 5f 44 45 4c 45 54  rg, SQLITE_DELET
20ad0 45 2c 20 7a 44 62 2c 20 7a 54 62 6c 2c 20 69 4b  E, zDb, zTbl, iK
20ae0 65 79 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  ey);.    assert(
20af0 20 70 43 2d 3e 69 44 62 3e 3d 30 20 29 3b 0a 20   pC->iDb>=0 );. 
20b00 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 32   }.  if( pOp->p2
20b10 20 26 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47   & OPFLAG_NCHANG
20b20 45 20 29 20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b  E ) p->nChange++
20b30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 2f 2a 20  ;.  break;.}./* 
20b40 4f 70 63 6f 64 65 3a 20 52 65 73 65 74 43 6f 75  Opcode: ResetCou
20b50 6e 74 20 2a 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a  nt * * * * *.**.
20b60 2a 2a 20 54 68 65 20 76 61 6c 75 65 20 6f 66 20  ** The value of 
20b70 74 68 65 20 63 68 61 6e 67 65 20 63 6f 75 6e 74  the change count
20b80 65 72 20 69 73 20 63 6f 70 69 65 64 20 74 6f 20  er is copied to 
20b90 74 68 65 20 64 61 74 61 62 61 73 65 20 68 61 6e  the database han
20ba0 64 6c 65 0a 2a 2a 20 63 68 61 6e 67 65 20 63 6f  dle.** change co
20bb0 75 6e 74 65 72 20 28 72 65 74 75 72 6e 65 64 20  unter (returned 
20bc0 62 79 20 73 75 62 73 65 71 75 65 6e 74 20 63 61  by subsequent ca
20bd0 6c 6c 73 20 74 6f 20 73 71 6c 69 74 65 33 5f 63  lls to sqlite3_c
20be0 68 61 6e 67 65 73 28 29 29 2e 0a 2a 2a 20 54 68  hanges())..** Th
20bf0 65 6e 20 74 68 65 20 56 4d 73 20 69 6e 74 65 72  en the VMs inter
20c00 6e 61 6c 20 63 68 61 6e 67 65 20 63 6f 75 6e 74  nal change count
20c10 65 72 20 72 65 73 65 74 73 20 74 6f 20 30 2e 0a  er resets to 0..
20c20 2a 2a 20 54 68 69 73 20 69 73 20 75 73 65 64 20  ** This is used 
20c30 62 79 20 74 72 69 67 67 65 72 20 70 72 6f 67 72  by trigger progr
20c40 61 6d 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ams..*/.case OP_
20c50 52 65 73 65 74 43 6f 75 6e 74 3a 20 7b 0a 20 20  ResetCount: {.  
20c60 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 68  sqlite3VdbeSetCh
20c70 61 6e 67 65 73 28 64 62 2c 20 70 2d 3e 6e 43 68  anges(db, p->nCh
20c80 61 6e 67 65 29 3b 0a 20 20 70 2d 3e 6e 43 68 61  ange);.  p->nCha
20c90 6e 67 65 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b  nge = 0;.  break
20ca0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
20cb0 52 6f 77 44 61 74 61 20 50 31 20 50 32 20 2a 20  RowData P1 P2 * 
20cc0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20  * *.**.** Write 
20cd0 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  into register P2
20ce0 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 72 6f   the complete ro
20cf0 77 20 64 61 74 61 20 66 6f 72 20 63 75 72 73 6f  w data for curso
20d00 72 20 50 31 2e 0a 2a 2a 20 54 68 65 72 65 20 69  r P1..** There i
20d10 73 20 6e 6f 20 69 6e 74 65 72 70 72 65 74 61 74  s no interpretat
20d20 69 6f 6e 20 6f 66 20 74 68 65 20 64 61 74 61 2e  ion of the data.
20d30 20 20 0a 2a 2a 20 49 74 20 69 73 20 6a 75 73 74    .** It is just
20d40 20 63 6f 70 69 65 64 20 6f 6e 74 6f 20 74 68 65   copied onto the
20d50 20 50 32 20 72 65 67 69 73 74 65 72 20 65 78 61   P2 register exa
20d60 63 74 6c 79 20 61 73 20 0a 2a 2a 20 69 74 20 69  ctly as .** it i
20d70 73 20 66 6f 75 6e 64 20 69 6e 20 74 68 65 20 64  s found in the d
20d80 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a  atabase file..**
20d90 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20 63 75  .** If the P1 cu
20da0 72 73 6f 72 20 6d 75 73 74 20 62 65 20 70 6f 69  rsor must be poi
20db0 6e 74 69 6e 67 20 74 6f 20 61 20 76 61 6c 69 64  nting to a valid
20dc0 20 72 6f 77 20 28 6e 6f 74 20 61 20 4e 55 4c 4c   row (not a NULL
20dd0 20 72 6f 77 29 0a 2a 2a 20 6f 66 20 61 20 72 65   row).** of a re
20de0 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20  al table, not a 
20df0 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2f  pseudo-table..*/
20e00 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 4b  ./* Opcode: RowK
20e10 65 79 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  ey P1 P2 * * *.*
20e20 2a 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f 20  *.** Write into 
20e30 72 65 67 69 73 74 65 72 20 50 32 20 74 68 65 20  register P2 the 
20e40 63 6f 6d 70 6c 65 74 65 20 72 6f 77 20 6b 65 79  complete row key
20e50 20 66 6f 72 20 63 75 72 73 6f 72 20 50 31 2e 0a   for cursor P1..
20e60 2a 2a 20 54 68 65 72 65 20 69 73 20 6e 6f 20 69  ** There is no i
20e70 6e 74 65 72 70 72 65 74 61 74 69 6f 6e 20 6f 66  nterpretation of
20e80 20 74 68 65 20 64 61 74 61 2e 20 20 0a 2a 2a 20   the data.  .** 
20e90 54 68 65 20 6b 65 79 20 69 73 20 63 6f 70 69 65  The key is copie
20ea0 64 20 6f 6e 74 6f 20 74 68 65 20 50 33 20 72 65  d onto the P3 re
20eb0 67 69 73 74 65 72 20 65 78 61 63 74 6c 79 20 61  gister exactly a
20ec0 73 20 0a 2a 2a 20 69 74 20 69 73 20 66 6f 75 6e  s .** it is foun
20ed0 64 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  d in the databas
20ee0 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66  e file..**.** If
20ef0 20 74 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d   the P1 cursor m
20f00 75 73 74 20 62 65 20 70 6f 69 6e 74 69 6e 67 20  ust be pointing 
20f10 74 6f 20 61 20 76 61 6c 69 64 20 72 6f 77 20 28  to a valid row (
20f20 6e 6f 74 20 61 20 4e 55 4c 4c 20 72 6f 77 29 0a  not a NULL row).
20f30 2a 2a 20 6f 66 20 61 20 72 65 61 6c 20 74 61 62  ** of a real tab
20f40 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65 75 64 6f  le, not a pseudo
20f50 2d 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20  -table..*/.case 
20f60 4f 50 5f 52 6f 77 4b 65 79 3a 0a 63 61 73 65 20  OP_RowKey:.case 
20f70 4f 50 5f 52 6f 77 44 61 74 61 3a 20 7b 0a 20 20  OP_RowData: {.  
20f80 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
20f90 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73    BtCursor *pCrs
20fa0 72 3b 0a 20 20 75 33 32 20 6e 3b 0a 20 20 69 36  r;.  u32 n;.  i6
20fb0 34 20 6e 36 34 3b 0a 0a 20 20 70 4f 75 74 20 3d  4 n64;..  pOut =
20fc0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
20fd0 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61  .  memAboutToCha
20fe0 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 0a 20  nge(p, pOut);.. 
20ff0 20 2f 2a 20 4e 6f 74 65 20 74 68 61 74 20 52 6f   /* Note that Ro
21000 77 4b 65 79 20 61 6e 64 20 52 6f 77 44 61 74 61  wKey and RowData
21010 20 61 72 65 20 72 65 61 6c 6c 79 20 65 78 61 63   are really exac
21020 74 6c 79 20 74 68 65 20 73 61 6d 65 20 69 6e 73  tly the same ins
21030 74 72 75 63 74 69 6f 6e 20 2a 2f 0a 20 20 61 73  truction */.  as
21040 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
21050 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
21060 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
21070 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
21080 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
21090 2d 3e 69 73 54 61 62 6c 65 20 7c 7c 20 70 4f 70  ->isTable || pOp
210a0 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 52 6f 77  ->opcode==OP_Row
210b0 4b 65 79 20 29 3b 0a 20 20 61 73 73 65 72 74 28  Key );.  assert(
210c0 20 70 43 2d 3e 69 73 49 6e 64 65 78 20 7c 7c 20   pC->isIndex || 
210d0 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
210e0 52 6f 77 44 61 74 61 20 29 3b 0a 20 20 61 73 73  RowData );.  ass
210f0 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
21100 61 73 73 65 72 74 28 20 70 43 2d 3e 6e 75 6c 6c  assert( pC->null
21110 52 6f 77 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  Row==0 );.  asse
21120 72 74 28 20 70 43 2d 3e 70 73 65 75 64 6f 54 61  rt( pC->pseudoTa
21130 62 6c 65 52 65 67 3d 3d 30 20 29 3b 0a 20 20 61  bleReg==0 );.  a
21140 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75 72 73  ssert( pC->pCurs
21150 6f 72 21 3d 30 20 29 3b 0a 20 20 70 43 72 73 72  or!=0 );.  pCrsr
21160 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a   = pC->pCursor;.
21170 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
21180 33 42 74 72 65 65 43 75 72 73 6f 72 49 73 56 61  3BtreeCursorIsVa
21190 6c 69 64 28 70 43 72 73 72 29 20 29 3b 0a 0a 20  lid(pCrsr) );.. 
211a0 20 2f 2a 20 54 68 65 20 4f 50 5f 52 6f 77 4b 65   /* The OP_RowKe
211b0 79 20 61 6e 64 20 4f 50 5f 52 6f 77 44 61 74 61  y and OP_RowData
211c0 20 6f 70 63 6f 64 65 73 20 61 6c 77 61 79 73 20   opcodes always 
211d0 66 6f 6c 6c 6f 77 20 4f 50 5f 4e 6f 74 45 78 69  follow OP_NotExi
211e0 73 74 73 20 6f 72 0a 20 20 2a 2a 20 4f 50 5f 52  sts or.  ** OP_R
211f0 65 77 69 6e 64 2f 4f 70 5f 4e 65 78 74 20 77 69  ewind/Op_Next wi
21200 74 68 20 6e 6f 20 69 6e 74 65 72 76 65 6e 69 6e  th no intervenin
21210 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 73 20 74  g instructions t
21220 68 61 74 20 6d 69 67 68 74 20 69 6e 76 61 6c 69  hat might invali
21230 64 61 74 65 0a 20 20 2a 2a 20 74 68 65 20 63 75  date.  ** the cu
21240 72 73 6f 72 2e 20 20 48 65 6e 63 65 20 74 68 65  rsor.  Hence the
21250 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 71 6c 69 74   following sqlit
21260 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65  e3VdbeCursorMove
21270 74 6f 28 29 20 63 61 6c 6c 20 69 73 20 61 6c 77  to() call is alw
21280 61 79 73 0a 20 20 2a 2a 20 61 20 6e 6f 2d 6f 70  ays.  ** a no-op
21290 20 61 6e 64 20 63 61 6e 20 6e 65 76 65 72 20 66   and can never f
212a0 61 69 6c 2e 20 20 42 75 74 20 77 65 20 6c 65 61  ail.  But we lea
212b0 76 65 20 69 74 20 69 6e 20 70 6c 61 63 65 20 61  ve it in place a
212c0 73 20 61 20 73 61 66 65 74 79 2e 0a 20 20 2a 2f  s a safety..  */
212d0 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64  .  assert( pC->d
212e0 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30  eferredMoveto==0
212f0 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   );.  rc = sqlit
21300 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65  e3VdbeCursorMove
21310 74 6f 28 70 43 29 3b 0a 20 20 69 66 28 20 4e 45  to(pC);.  if( NE
21320 56 45 52 28 72 63 21 3d 53 51 4c 49 54 45 5f 4f  VER(rc!=SQLITE_O
21330 4b 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  K) ) goto abort_
21340 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a 20  due_to_error;.. 
21350 20 69 66 28 20 70 43 2d 3e 69 73 49 6e 64 65 78   if( pC->isIndex
21360 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
21370 21 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a  !pC->isTable );.
21380 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
21390 42 74 72 65 65 4b 65 79 53 69 7a 65 28 70 43 72  BtreeKeySize(pCr
213a0 73 72 2c 20 26 6e 36 34 29 3b 0a 20 20 20 20 61  sr, &n64);.    a
213b0 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54  ssert( rc==SQLIT
213c0 45 5f 4f 4b 20 29 3b 20 20 20 20 2f 2a 20 54 72  E_OK );    /* Tr
213d0 75 65 20 62 65 63 61 75 73 65 20 6f 66 20 43 75  ue because of Cu
213e0 72 73 6f 72 4d 6f 76 65 74 6f 28 29 20 63 61 6c  rsorMoveto() cal
213f0 6c 20 61 62 6f 76 65 20 2a 2f 0a 20 20 20 20 69  l above */.    i
21400 66 28 20 6e 36 34 3e 64 62 2d 3e 61 4c 69 6d 69  f( n64>db->aLimi
21410 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c  t[SQLITE_LIMIT_L
21420 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 20 20  ENGTH] ){.      
21430 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20  goto too_big;.  
21440 20 20 7d 0a 20 20 20 20 6e 20 3d 20 28 75 33 32    }.    n = (u32
21450 29 6e 36 34 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  )n64;.  }else{. 
21460 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
21470 74 72 65 65 44 61 74 61 53 69 7a 65 28 70 43 72  treeDataSize(pCr
21480 73 72 2c 20 26 6e 29 3b 0a 20 20 20 20 61 73 73  sr, &n);.    ass
21490 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f  ert( rc==SQLITE_
214a0 4f 4b 20 29 3b 20 20 20 20 2f 2a 20 44 61 74 61  OK );    /* Data
214b0 53 69 7a 65 28 29 20 63 61 6e 6e 6f 74 20 66 61  Size() cannot fa
214c0 69 6c 20 2a 2f 0a 20 20 20 20 69 66 28 20 6e 3e  il */.    if( n>
214d0 28 75 33 32 29 64 62 2d 3e 61 4c 69 6d 69 74 5b  (u32)db->aLimit[
214e0 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e  SQLITE_LIMIT_LEN
214f0 47 54 48 5d 20 29 7b 0a 20 20 20 20 20 20 67 6f  GTH] ){.      go
21500 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 20 20  to too_big;.    
21510 7d 0a 20 20 7d 0a 20 20 69 66 28 20 73 71 6c 69  }.  }.  if( sqli
21520 74 65 33 56 64 62 65 4d 65 6d 47 72 6f 77 28 70  te3VdbeMemGrow(p
21530 4f 75 74 2c 20 6e 2c 20 30 29 20 29 7b 0a 20 20  Out, n, 0) ){.  
21540 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20    goto no_mem;. 
21550 20 7d 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 6e   }.  pOut->n = n
21560 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c  ;.  MemSetTypeFl
21570 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 42 6c 6f  ag(pOut, MEM_Blo
21580 62 29 3b 0a 20 20 69 66 28 20 70 43 2d 3e 69 73  b);.  if( pC->is
21590 49 6e 64 65 78 20 29 7b 0a 20 20 20 20 72 63 20  Index ){.    rc 
215a0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65  = sqlite3BtreeKe
215b0 79 28 70 43 72 73 72 2c 20 30 2c 20 6e 2c 20 70  y(pCrsr, 0, n, p
215c0 4f 75 74 2d 3e 7a 29 3b 0a 20 20 7d 65 6c 73 65  Out->z);.  }else
215d0 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  {.    rc = sqlit
215e0 65 33 42 74 72 65 65 44 61 74 61 28 70 43 72 73  e3BtreeData(pCrs
215f0 72 2c 20 30 2c 20 6e 2c 20 70 4f 75 74 2d 3e 7a  r, 0, n, pOut->z
21600 29 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 65  );.  }.  pOut->e
21610 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55 54 46 38  nc = SQLITE_UTF8
21620 3b 20 20 2f 2a 20 49 6e 20 63 61 73 65 20 74 68  ;  /* In case th
21630 65 20 62 6c 6f 62 20 69 73 20 65 76 65 72 20 63  e blob is ever c
21640 61 73 74 20 74 6f 20 74 65 78 74 20 2a 2f 0a 20  ast to text */. 
21650 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42   UPDATE_MAX_BLOB
21660 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72  SIZE(pOut);.  br
21670 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
21680 65 3a 20 52 6f 77 69 64 20 50 31 20 50 32 20 2a  e: Rowid P1 P2 *
21690 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65   * *.**.** Store
216a0 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 20   in register P2 
216b0 61 6e 20 69 6e 74 65 67 65 72 20 77 68 69 63 68  an integer which
216c0 20 69 73 20 74 68 65 20 6b 65 79 20 6f 66 20 74   is the key of t
216d0 68 65 20 74 61 62 6c 65 20 65 6e 74 72 79 20 74  he table entry t
216e0 68 61 74 0a 2a 2a 20 50 31 20 69 73 20 63 75 72  hat.** P1 is cur
216f0 72 65 6e 74 6c 79 20 70 6f 69 6e 74 20 74 6f 2e  rently point to.
21700 0a 2a 2a 0a 2a 2a 20 50 31 20 63 61 6e 20 62 65  .**.** P1 can be
21710 20 65 69 74 68 65 72 20 61 6e 20 6f 72 64 69 6e   either an ordin
21720 61 72 79 20 74 61 62 6c 65 20 6f 72 20 61 20 76  ary table or a v
21730 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 20 20 54  irtual table.  T
21740 68 65 72 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20  here used to.** 
21750 62 65 20 61 20 73 65 70 61 72 61 74 65 20 4f 50  be a separate OP
21760 5f 56 52 6f 77 69 64 20 6f 70 63 6f 64 65 20 66  _VRowid opcode f
21770 6f 72 20 75 73 65 20 77 69 74 68 20 76 69 72 74  or use with virt
21780 75 61 6c 20 74 61 62 6c 65 73 2c 20 62 75 74 20  ual tables, but 
21790 74 68 69 73 0a 2a 2a 20 6f 6e 65 20 6f 70 63 6f  this.** one opco
217a0 64 65 20 6e 6f 77 20 77 6f 72 6b 73 20 66 6f 72  de now works for
217b0 20 62 6f 74 68 20 74 61 62 6c 65 20 74 79 70 65   both table type
217c0 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f  s..*/.case OP_Ro
217d0 77 69 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20  wid: {          
217e0 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70         /* out2-p
217f0 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 56  rerelease */.  V
21800 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
21810 20 69 36 34 20 76 3b 0a 20 20 73 71 6c 69 74 65   i64 v;.  sqlite
21820 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20  3_vtab *pVtab;. 
21830 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d   const sqlite3_m
21840 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a  odule *pModule;.
21850 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
21860 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
21870 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
21880 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
21890 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
218a0 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73  t( pC!=0 );.  as
218b0 73 65 72 74 28 20 70 43 2d 3e 70 73 65 75 64 6f  sert( pC->pseudo
218c0 54 61 62 6c 65 52 65 67 3d 3d 30 20 29 3b 0a 20  TableReg==0 );. 
218d0 20 69 66 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77   if( pC->nullRow
218e0 20 29 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c   ){.    pOut->fl
218f0 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a  ags = MEM_Null;.
21900 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 65 6c      break;.  }el
21910 73 65 20 69 66 28 20 70 43 2d 3e 64 65 66 65 72  se if( pC->defer
21920 72 65 64 4d 6f 76 65 74 6f 20 29 7b 0a 20 20 20  redMoveto ){.   
21930 20 76 20 3d 20 70 43 2d 3e 6d 6f 76 65 74 6f 54   v = pC->movetoT
21940 61 72 67 65 74 3b 0a 23 69 66 6e 64 65 66 20 53  arget;.#ifndef S
21950 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
21960 41 4c 54 41 42 4c 45 0a 20 20 7d 65 6c 73 65 20  ALTABLE.  }else 
21970 69 66 28 20 70 43 2d 3e 70 56 74 61 62 43 75 72  if( pC->pVtabCur
21980 73 6f 72 20 29 7b 0a 20 20 20 20 70 56 74 61 62  sor ){.    pVtab
21990 20 3d 20 70 43 2d 3e 70 56 74 61 62 43 75 72 73   = pC->pVtabCurs
219a0 6f 72 2d 3e 70 56 74 61 62 3b 0a 20 20 20 20 70  or->pVtab;.    p
219b0 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e  Module = pVtab->
219c0 70 4d 6f 64 75 6c 65 3b 0a 20 20 20 20 61 73 73  pModule;.    ass
219d0 65 72 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 52  ert( pModule->xR
219e0 6f 77 69 64 20 29 3b 0a 20 20 20 20 72 63 20 3d  owid );.    rc =
219f0 20 70 4d 6f 64 75 6c 65 2d 3e 78 52 6f 77 69 64   pModule->xRowid
21a00 28 70 43 2d 3e 70 56 74 61 62 43 75 72 73 6f 72  (pC->pVtabCursor
21a10 2c 20 26 76 29 3b 0a 20 20 20 20 69 6d 70 6f 72  , &v);.    impor
21a20 74 56 74 61 62 45 72 72 4d 73 67 28 70 2c 20 70  tVtabErrMsg(p, p
21a30 56 74 61 62 29 3b 0a 23 65 6e 64 69 66 20 2f 2a  Vtab);.#endif /*
21a40 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
21a50 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 20 20 7d  TUALTABLE */.  }
21a60 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74  else{.    assert
21a70 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30  ( pC->pCursor!=0
21a80 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   );.    rc = sql
21a90 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f  ite3VdbeCursorMo
21aa0 76 65 74 6f 28 70 43 29 3b 0a 20 20 20 20 69 66  veto(pC);.    if
21ab0 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
21ac0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
21ad0 20 20 20 20 69 66 28 20 70 43 2d 3e 72 6f 77 69      if( pC->rowi
21ae0 64 49 73 56 61 6c 69 64 20 29 7b 0a 20 20 20 20  dIsValid ){.    
21af0 20 20 76 20 3d 20 70 43 2d 3e 6c 61 73 74 52 6f    v = pC->lastRo
21b00 77 69 64 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  wid;.    }else{.
21b10 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
21b20 65 33 42 74 72 65 65 4b 65 79 53 69 7a 65 28 70  e3BtreeKeySize(p
21b30 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 76 29 3b  C->pCursor, &v);
21b40 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 72  .      assert( r
21b50 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20  c==SQLITE_OK ); 
21b60 20 2f 2a 20 41 6c 77 61 79 73 20 73 6f 20 62 65   /* Always so be
21b70 63 61 75 73 65 20 6f 66 20 43 75 72 73 6f 72 4d  cause of CursorM
21b80 6f 76 65 74 6f 28 29 20 61 62 6f 76 65 20 2a 2f  oveto() above */
21b90 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 70 4f 75  .    }.  }.  pOu
21ba0 74 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20 20 62 72  t->u.i = v;.  br
21bb0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
21bc0 65 3a 20 4e 75 6c 6c 52 6f 77 20 50 31 20 2a 20  e: NullRow P1 * 
21bd0 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4d 6f 76 65  * * *.**.** Move
21be0 20 74 68 65 20 63 75 72 73 6f 72 20 50 31 20 74   the cursor P1 t
21bf0 6f 20 61 20 6e 75 6c 6c 20 72 6f 77 2e 20 20 41  o a null row.  A
21c00 6e 79 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 65  ny OP_Column ope
21c10 72 61 74 69 6f 6e 73 0a 2a 2a 20 74 68 61 74 20  rations.** that 
21c20 6f 63 63 75 72 20 77 68 69 6c 65 20 74 68 65 20  occur while the 
21c30 63 75 72 73 6f 72 20 69 73 20 6f 6e 20 74 68 65  cursor is on the
21c40 20 6e 75 6c 6c 20 72 6f 77 20 77 69 6c 6c 20 61   null row will a
21c50 6c 77 61 79 73 0a 2a 2a 20 77 72 69 74 65 20 61  lways.** write a
21c60 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f   NULL..*/.case O
21c70 50 5f 4e 75 6c 6c 52 6f 77 3a 20 7b 0a 20 20 56  P_NullRow: {.  V
21c80 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a  dbeCursor *pC;..
21c90 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
21ca0 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
21cb0 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
21cc0 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
21cd0 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
21ce0 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 70 43 2d  ( pC!=0 );.  pC-
21cf0 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20  >nullRow = 1;.  
21d00 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64  pC->rowidIsValid
21d10 20 3d 20 30 3b 0a 20 20 69 66 28 20 70 43 2d 3e   = 0;.  if( pC->
21d20 70 43 75 72 73 6f 72 20 29 7b 0a 20 20 20 20 73  pCursor ){.    s
21d30 71 6c 69 74 65 33 42 74 72 65 65 43 6c 65 61 72  qlite3BtreeClear
21d40 43 75 72 73 6f 72 28 70 43 2d 3e 70 43 75 72 73  Cursor(pC->pCurs
21d50 6f 72 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  or);.  }.  break
21d60 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
21d70 4c 61 73 74 20 50 31 20 50 32 20 2a 20 2a 20 2a  Last P1 P2 * * *
21d80 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20  .**.** The next 
21d90 75 73 65 20 6f 66 20 74 68 65 20 52 6f 77 69 64  use of the Rowid
21da0 20 6f 72 20 43 6f 6c 75 6d 6e 20 6f 72 20 4e 65   or Column or Ne
21db0 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 66  xt instruction f
21dc0 6f 72 20 50 31 20 0a 2a 2a 20 77 69 6c 6c 20 72  or P1 .** will r
21dd0 65 66 65 72 20 74 6f 20 74 68 65 20 6c 61 73 74  efer to the last
21de0 20 65 6e 74 72 79 20 69 6e 20 74 68 65 20 64 61   entry in the da
21df0 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20  tabase table or 
21e00 69 6e 64 65 78 2e 0a 2a 2a 20 49 66 20 74 68 65  index..** If the
21e10 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20   table or index 
21e20 69 73 20 65 6d 70 74 79 20 61 6e 64 20 50 32 3e  is empty and P2>
21e30 30 2c 20 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d  0, then jump imm
21e40 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a  ediately to P2..
21e50 2a 2a 20 49 66 20 50 32 20 69 73 20 30 20 6f 72  ** If P2 is 0 or
21e60 20 69 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72   if the table or
21e70 20 69 6e 64 65 78 20 69 73 20 6e 6f 74 20 65 6d   index is not em
21e80 70 74 79 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67  pty, fall throug
21e90 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c  h.** to the foll
21ea0 6f 77 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f  owing instructio
21eb0 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 61  n..*/.case OP_La
21ec0 73 74 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20  st: {        /* 
21ed0 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43 75  jump */.  VdbeCu
21ee0 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75  rsor *pC;.  BtCu
21ef0 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69  rsor *pCrsr;.  i
21f00 6e 74 20 72 65 73 3b 0a 0a 20 20 61 73 73 65 72  nt res;..  asser
21f10 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
21f20 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
21f30 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  sor );.  pC = p-
21f40 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
21f50 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
21f60 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43   );.  pCrsr = pC
21f70 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 69 66 28  ->pCursor;.  if(
21f80 20 70 43 72 73 72 3d 3d 30 20 29 7b 0a 20 20 20   pCrsr==0 ){.   
21f90 20 72 65 73 20 3d 20 31 3b 0a 20 20 7d 65 6c 73   res = 1;.  }els
21fa0 65 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  e{.    rc = sqli
21fb0 74 65 33 42 74 72 65 65 4c 61 73 74 28 70 43 72  te3BtreeLast(pCr
21fc0 73 72 2c 20 26 72 65 73 29 3b 0a 20 20 7d 0a 20  sr, &res);.  }. 
21fd0 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 28   pC->nullRow = (
21fe0 75 38 29 72 65 73 3b 0a 20 20 70 43 2d 3e 64 65  u8)res;.  pC->de
21ff0 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30  ferredMoveto = 0
22000 3b 0a 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56  ;.  pC->rowidIsV
22010 61 6c 69 64 20 3d 20 30 3b 0a 20 20 70 43 2d 3e  alid = 0;.  pC->
22020 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
22030 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 69 66 28  CHE_STALE;.  if(
22040 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 72 65   pOp->p2>0 && re
22050 73 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f  s ){.    pc = pO
22060 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20  p->p2 - 1;.  }. 
22070 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f   break;.}.../* O
22080 70 63 6f 64 65 3a 20 53 6f 72 74 20 50 31 20 50  pcode: Sort P1 P
22090 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68  2 * * *.**.** Th
220a0 69 73 20 6f 70 63 6f 64 65 20 64 6f 65 73 20 65  is opcode does e
220b0 78 61 63 74 6c 79 20 74 68 65 20 73 61 6d 65 20  xactly the same 
220c0 74 68 69 6e 67 20 61 73 20 4f 50 5f 52 65 77 69  thing as OP_Rewi
220d0 6e 64 20 65 78 63 65 70 74 20 74 68 61 74 0a 2a  nd except that.*
220e0 2a 20 69 74 20 69 6e 63 72 65 6d 65 6e 74 73 20  * it increments 
220f0 61 6e 20 75 6e 64 6f 63 75 6d 65 6e 74 65 64 20  an undocumented 
22100 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 20  global variable 
22110 75 73 65 64 20 66 6f 72 20 74 65 73 74 69 6e 67  used for testing
22120 2e 0a 2a 2a 0a 2a 2a 20 53 6f 72 74 69 6e 67 20  ..**.** Sorting 
22130 69 73 20 61 63 63 6f 6d 70 6c 69 73 68 65 64 20  is accomplished 
22140 62 79 20 77 72 69 74 69 6e 67 20 72 65 63 6f 72  by writing recor
22150 64 73 20 69 6e 74 6f 20 61 20 73 6f 72 74 69 6e  ds into a sortin
22160 67 20 69 6e 64 65 78 2c 0a 2a 2a 20 74 68 65 6e  g index,.** then
22170 20 72 65 77 69 6e 64 69 6e 67 20 74 68 61 74 20   rewinding that 
22180 69 6e 64 65 78 20 61 6e 64 20 70 6c 61 79 69 6e  index and playin
22190 67 20 69 74 20 62 61 63 6b 20 66 72 6f 6d 20 62  g it back from b
221a0 65 67 69 6e 6e 69 6e 67 20 74 6f 0a 2a 2a 20 65  eginning to.** e
221b0 6e 64 2e 20 20 57 65 20 75 73 65 20 74 68 65 20  nd.  We use the 
221c0 4f 50 5f 53 6f 72 74 20 6f 70 63 6f 64 65 20 69  OP_Sort opcode i
221d0 6e 73 74 65 61 64 20 6f 66 20 4f 50 5f 52 65 77  nstead of OP_Rew
221e0 69 6e 64 20 74 6f 20 64 6f 20 74 68 65 0a 2a 2a  ind to do the.**
221f0 20 72 65 77 69 6e 64 69 6e 67 20 73 6f 20 74 68   rewinding so th
22200 61 74 20 74 68 65 20 67 6c 6f 62 61 6c 20 76 61  at the global va
22210 72 69 61 62 6c 65 20 77 69 6c 6c 20 62 65 20 69  riable will be i
22220 6e 63 72 65 6d 65 6e 74 65 64 20 61 6e 64 0a 2a  ncremented and.*
22230 2a 20 72 65 67 72 65 73 73 69 6f 6e 20 74 65 73  * regression tes
22240 74 73 20 63 61 6e 20 64 65 74 65 72 6d 69 6e 65  ts can determine
22250 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
22260 74 68 65 20 6f 70 74 69 6d 69 7a 65 72 20 69 73  the optimizer is
22270 0a 2a 2a 20 63 6f 72 72 65 63 74 6c 79 20 6f 70  .** correctly op
22280 74 69 6d 69 7a 69 6e 67 20 6f 75 74 20 73 6f 72  timizing out sor
22290 74 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  ts..*/.case OP_S
222a0 6f 72 74 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  ort: {        /*
222b0 20 6a 75 6d 70 20 2a 2f 0a 23 69 66 64 65 66 20   jump */.#ifdef 
222c0 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 73 71  SQLITE_TEST.  sq
222d0 6c 69 74 65 33 5f 73 6f 72 74 5f 63 6f 75 6e 74  lite3_sort_count
222e0 2b 2b 3b 0a 20 20 73 71 6c 69 74 65 33 5f 73 65  ++;.  sqlite3_se
222f0 61 72 63 68 5f 63 6f 75 6e 74 2d 2d 3b 0a 23 65  arch_count--;.#e
22300 6e 64 69 66 0a 20 20 70 2d 3e 61 43 6f 75 6e 74  ndif.  p->aCount
22310 65 72 5b 53 51 4c 49 54 45 5f 53 54 4d 54 53 54  er[SQLITE_STMTST
22320 41 54 55 53 5f 53 4f 52 54 2d 31 5d 2b 2b 3b 0a  ATUS_SORT-1]++;.
22330 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67    /* Fall throug
22340 68 20 69 6e 74 6f 20 4f 50 5f 52 65 77 69 6e 64  h into OP_Rewind
22350 20 2a 2f 0a 7d 0a 2f 2a 20 4f 70 63 6f 64 65 3a   */.}./* Opcode:
22360 20 52 65 77 69 6e 64 20 50 31 20 50 32 20 2a 20   Rewind P1 P2 * 
22370 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e 65  * *.**.** The ne
22380 78 74 20 75 73 65 20 6f 66 20 74 68 65 20 52 6f  xt use of the Ro
22390 77 69 64 20 6f 72 20 43 6f 6c 75 6d 6e 20 6f 72  wid or Column or
223a0 20 4e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   Next instructio
223b0 6e 20 66 6f 72 20 50 31 20 0a 2a 2a 20 77 69 6c  n for P1 .** wil
223c0 6c 20 72 65 66 65 72 20 74 6f 20 74 68 65 20 66  l refer to the f
223d0 69 72 73 74 20 65 6e 74 72 79 20 69 6e 20 74 68  irst entry in th
223e0 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65  e database table
223f0 20 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a 20 49 66   or index..** If
22400 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e   the table or in
22410 64 65 78 20 69 73 20 65 6d 70 74 79 20 61 6e 64  dex is empty and
22420 20 50 32 3e 30 2c 20 74 68 65 6e 20 6a 75 6d 70   P2>0, then jump
22430 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20   immediately to 
22440 50 32 2e 0a 2a 2a 20 49 66 20 50 32 20 69 73 20  P2..** If P2 is 
22450 30 20 6f 72 20 69 66 20 74 68 65 20 74 61 62 6c  0 or if the tabl
22460 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20 6e 6f  e or index is no
22470 74 20 65 6d 70 74 79 2c 20 66 61 6c 6c 20 74 68  t empty, fall th
22480 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20  rough.** to the 
22490 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75  following instru
224a0 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ction..*/.case O
224b0 50 5f 52 65 77 69 6e 64 3a 20 7b 20 20 20 20 20  P_Rewind: {     
224c0 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
224d0 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
224e0 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73    BtCursor *pCrs
224f0 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 0a 20  r;.  int res;.. 
22500 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
22510 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
22520 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  ->nCursor );.  p
22530 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
22540 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
22550 20 70 43 21 3d 30 20 29 3b 0a 20 20 72 65 73 20   pC!=0 );.  res 
22560 3d 20 31 3b 0a 20 20 69 66 28 20 28 70 43 72 73  = 1;.  if( (pCrs
22570 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 29  r = pC->pCursor)
22580 21 3d 30 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  !=0 ){.    rc = 
22590 73 71 6c 69 74 65 33 42 74 72 65 65 46 69 72 73  sqlite3BtreeFirs
225a0 74 28 70 43 72 73 72 2c 20 26 72 65 73 29 3b 0a  t(pCrsr, &res);.
225b0 20 20 20 20 70 43 2d 3e 61 74 46 69 72 73 74 20      pC->atFirst 
225c0 3d 20 72 65 73 3d 3d 30 20 3f 31 3a 30 3b 0a 20  = res==0 ?1:0;. 
225d0 20 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d     pC->deferredM
225e0 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20 20 70  oveto = 0;.    p
225f0 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
22600 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20   CACHE_STALE;.  
22610 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c    pC->rowidIsVal
22620 69 64 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 70 43  id = 0;.  }.  pC
22630 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 28 75 38 29  ->nullRow = (u8)
22640 72 65 73 3b 0a 20 20 61 73 73 65 72 74 28 20 70  res;.  assert( p
22650 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d  Op->p2>0 && pOp-
22660 3e 70 32 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20  >p2<p->nOp );.  
22670 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20 70  if( res ){.    p
22680 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
22690 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
226a0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 78 74  ./* Opcode: Next
226b0 20 50 31 20 50 32 20 2a 20 2a 20 50 35 0a 2a 2a   P1 P2 * * P5.**
226c0 0a 2a 2a 20 41 64 76 61 6e 63 65 20 63 75 72 73  .** Advance curs
226d0 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20 69 74  or P1 so that it
226e0 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 6e   points to the n
226f0 65 78 74 20 6b 65 79 2f 64 61 74 61 20 70 61 69  ext key/data pai
22700 72 20 69 6e 20 69 74 73 0a 2a 2a 20 74 61 62 6c  r in its.** tabl
22710 65 20 6f 72 20 69 6e 64 65 78 2e 20 20 49 66 20  e or index.  If 
22720 74 68 65 72 65 20 61 72 65 20 6e 6f 20 6d 6f 72  there are no mor
22730 65 20 6b 65 79 2f 76 61 6c 75 65 20 70 61 69 72  e key/value pair
22740 73 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f  s then fall thro
22750 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66 6f  ugh.** to the fo
22760 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75 63 74  llowing instruct
22770 69 6f 6e 2e 20 20 42 75 74 20 69 66 20 74 68 65  ion.  But if the
22780 20 63 75 72 73 6f 72 20 61 64 76 61 6e 63 65 20   cursor advance 
22790 77 61 73 20 73 75 63 63 65 73 73 66 75 6c 2c 0a  was successful,.
227a0 2a 2a 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74  ** jump immediat
227b0 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a  ely to P2..**.**
227c0 20 54 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d   The P1 cursor m
227d0 75 73 74 20 62 65 20 66 6f 72 20 61 20 72 65 61  ust be for a rea
227e0 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20 70  l table, not a p
227f0 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2a 0a  seudo-table..**.
22800 2a 2a 20 49 66 20 50 35 20 69 73 20 70 6f 73 69  ** If P5 is posi
22810 74 69 76 65 20 61 6e 64 20 74 68 65 20 6a 75 6d  tive and the jum
22820 70 20 69 73 20 74 61 6b 65 6e 2c 20 74 68 65 6e  p is taken, then
22830 20 65 76 65 6e 74 20 63 6f 75 6e 74 65 72 0a 2a   event counter.*
22840 2a 20 6e 75 6d 62 65 72 20 50 35 2d 31 20 69 6e  * number P5-1 in
22850 20 74 68 65 20 70 72 65 70 61 72 65 64 20 73 74   the prepared st
22860 61 74 65 6d 65 6e 74 20 69 73 20 69 6e 63 72 65  atement is incre
22870 6d 65 6e 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 53 65  mented..**.** Se
22880 65 20 61 6c 73 6f 3a 20 50 72 65 76 0a 2a 2f 0a  e also: Prev.*/.
22890 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 72 65 76 20  /* Opcode: Prev 
228a0 50 31 20 50 32 20 2a 20 2a 20 50 35 0a 2a 2a 0a  P1 P2 * * P5.**.
228b0 2a 2a 20 42 61 63 6b 20 75 70 20 63 75 72 73 6f  ** Back up curso
228c0 72 20 50 31 20 73 6f 20 74 68 61 74 20 69 74 20  r P1 so that it 
228d0 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 70 72  points to the pr
228e0 65 76 69 6f 75 73 20 6b 65 79 2f 64 61 74 61 20  evious key/data 
228f0 70 61 69 72 20 69 6e 20 69 74 73 0a 2a 2a 20 74  pair in its.** t
22900 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 20 20  able or index.  
22910 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 70  If there is no p
22920 72 65 76 69 6f 75 73 20 6b 65 79 2f 76 61 6c 75  revious key/valu
22930 65 20 70 61 69 72 73 20 74 68 65 6e 20 66 61 6c  e pairs then fal
22940 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20  l through.** to 
22950 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e  the following in
22960 73 74 72 75 63 74 69 6f 6e 2e 20 20 42 75 74 20  struction.  But 
22970 69 66 20 74 68 65 20 63 75 72 73 6f 72 20 62 61  if the cursor ba
22980 63 6b 75 70 20 77 61 73 20 73 75 63 63 65 73 73  ckup was success
22990 66 75 6c 2c 0a 2a 2a 20 6a 75 6d 70 20 69 6d 6d  ful,.** jump imm
229a0 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a  ediately to P2..
229b0 2a 2a 0a 2a 2a 20 54 68 65 20 50 31 20 63 75 72  **.** The P1 cur
229c0 73 6f 72 20 6d 75 73 74 20 62 65 20 66 6f 72 20  sor must be for 
229d0 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f  a real table, no
229e0 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65  t a pseudo-table
229f0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73  ..**.** If P5 is
22a00 20 70 6f 73 69 74 69 76 65 20 61 6e 64 20 74 68   positive and th
22a10 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 2c  e jump is taken,
22a20 20 74 68 65 6e 20 65 76 65 6e 74 20 63 6f 75 6e   then event coun
22a30 74 65 72 0a 2a 2a 20 6e 75 6d 62 65 72 20 50 35  ter.** number P5
22a40 2d 31 20 69 6e 20 74 68 65 20 70 72 65 70 61 72  -1 in the prepar
22a50 65 64 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  ed statement is 
22a60 69 6e 63 72 65 6d 65 6e 74 65 64 2e 0a 2a 2f 0a  incremented..*/.
22a70 63 61 73 65 20 4f 50 5f 50 72 65 76 3a 20 20 20  case OP_Prev:   
22a80 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
22a90 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 78 74 3a 20  /.case OP_Next: 
22aa0 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70  {        /* jump
22ab0 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72   */.  VdbeCursor
22ac0 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72   *pC;.  BtCursor
22ad0 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72   *pCrsr;.  int r
22ae0 65 73 3b 0a 0a 20 20 43 48 45 43 4b 5f 46 4f 52  es;..  CHECK_FOR
22af0 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20 61 73  _INTERRUPT;.  as
22b00 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
22b10 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
22b20 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65  Cursor );.  asse
22b30 72 74 28 20 70 4f 70 2d 3e 70 35 3c 3d 41 72 72  rt( pOp->p5<=Arr
22b40 61 79 53 69 7a 65 28 70 2d 3e 61 43 6f 75 6e 74  aySize(p->aCount
22b50 65 72 29 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  er) );.  pC = p-
22b60 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
22b70 0a 20 20 69 66 28 20 70 43 3d 3d 30 20 29 7b 0a  .  if( pC==0 ){.
22b80 20 20 20 20 62 72 65 61 6b 3b 20 20 2f 2a 20 53      break;  /* S
22b90 65 65 20 74 69 63 6b 65 74 20 23 32 32 37 33 20  ee ticket #2273 
22ba0 2a 2f 0a 20 20 7d 0a 20 20 70 43 72 73 72 20 3d  */.  }.  pCrsr =
22bb0 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20   pC->pCursor;.  
22bc0 69 66 28 20 70 43 72 73 72 3d 3d 30 20 29 7b 0a  if( pCrsr==0 ){.
22bd0 20 20 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20      pC->nullRow 
22be0 3d 20 31 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a  = 1;.    break;.
22bf0 20 20 7d 0a 20 20 72 65 73 20 3d 20 31 3b 0a 20    }.  res = 1;. 
22c00 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66   assert( pC->def
22c10 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29  erredMoveto==0 )
22c20 3b 0a 20 20 72 63 20 3d 20 70 4f 70 2d 3e 6f 70  ;.  rc = pOp->op
22c30 63 6f 64 65 3d 3d 4f 50 5f 4e 65 78 74 20 3f 20  code==OP_Next ? 
22c40 73 71 6c 69 74 65 33 42 74 72 65 65 4e 65 78 74  sqlite3BtreeNext
22c50 28 70 43 72 73 72 2c 20 26 72 65 73 29 20 3a 0a  (pCrsr, &res) :.
22c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 71                sq
22c80 6c 69 74 65 33 42 74 72 65 65 50 72 65 76 69 6f  lite3BtreePrevio
22c90 75 73 28 70 43 72 73 72 2c 20 26 72 65 73 29 3b  us(pCrsr, &res);
22ca0 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d  .  pC->nullRow =
22cb0 20 28 75 38 29 72 65 73 3b 0a 20 20 70 43 2d 3e   (u8)res;.  pC->
22cc0 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
22cd0 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 69 66 28  CHE_STALE;.  if(
22ce0 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 70   res==0 ){.    p
22cf0 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
22d00 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35  .    if( pOp->p5
22d10 20 29 20 70 2d 3e 61 43 6f 75 6e 74 65 72 5b 70   ) p->aCounter[p
22d20 4f 70 2d 3e 70 35 2d 31 5d 2b 2b 3b 0a 23 69 66  Op->p5-1]++;.#if
22d30 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a  def SQLITE_TEST.
22d40 20 20 20 20 73 71 6c 69 74 65 33 5f 73 65 61 72      sqlite3_sear
22d50 63 68 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64  ch_count++;.#end
22d60 69 66 0a 20 20 7d 0a 20 20 70 43 2d 3e 72 6f 77  if.  }.  pC->row
22d70 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20  idIsValid = 0;. 
22d80 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
22d90 63 6f 64 65 3a 20 49 64 78 49 6e 73 65 72 74 20  code: IdxInsert 
22da0 50 31 20 50 32 20 50 33 20 2a 20 50 35 0a 2a 2a  P1 P2 P3 * P5.**
22db0 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50 32 20  .** Register P2 
22dc0 68 6f 6c 64 73 20 61 20 53 51 4c 20 69 6e 64 65  holds a SQL inde
22dd0 78 20 6b 65 79 20 6d 61 64 65 20 75 73 69 6e 67  x key made using
22de0 20 74 68 65 0a 2a 2a 20 4d 61 6b 65 52 65 63 6f   the.** MakeReco
22df0 72 64 20 69 6e 73 74 72 75 63 74 69 6f 6e 73 2e  rd instructions.
22e00 20 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77 72    This opcode wr
22e10 69 74 65 73 20 74 68 61 74 20 6b 65 79 0a 2a 2a  ites that key.**
22e20 20 69 6e 74 6f 20 74 68 65 20 69 6e 64 65 78 20   into the index 
22e30 50 31 2e 20 20 44 61 74 61 20 66 6f 72 20 74 68  P1.  Data for th
22e40 65 20 65 6e 74 72 79 20 69 73 20 6e 69 6c 2e 0a  e entry is nil..
22e50 2a 2a 0a 2a 2a 20 50 33 20 69 73 20 61 20 66 6c  **.** P3 is a fl
22e60 61 67 20 74 68 61 74 20 70 72 6f 76 69 64 65 73  ag that provides
22e70 20 61 20 68 69 6e 74 20 74 6f 20 74 68 65 20 62   a hint to the b
22e80 2d 74 72 65 65 20 6c 61 79 65 72 20 74 68 61 74  -tree layer that
22e90 20 74 68 69 73 0a 2a 2a 20 69 6e 73 65 72 74 20   this.** insert 
22ea0 69 73 20 6c 69 6b 65 6c 79 20 74 6f 20 62 65 20  is likely to be 
22eb0 61 6e 20 61 70 70 65 6e 64 2e 0a 2a 2a 0a 2a 2a  an append..**.**
22ec0 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   This instructio
22ed0 6e 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72  n only works for
22ee0 20 69 6e 64 69 63 65 73 2e 20 20 54 68 65 20 65   indices.  The e
22ef0 71 75 69 76 61 6c 65 6e 74 20 69 6e 73 74 72 75  quivalent instru
22f00 63 74 69 6f 6e 0a 2a 2a 20 66 6f 72 20 74 61 62  ction.** for tab
22f10 6c 65 73 20 69 73 20 4f 50 5f 49 6e 73 65 72 74  les is OP_Insert
22f20 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78  ..*/.case OP_Idx
22f30 49 6e 73 65 72 74 3a 20 7b 20 20 20 20 20 20 20  Insert: {       
22f40 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20 56 64 62   /* in2 */.  Vdb
22f50 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42  eCursor *pC;.  B
22f60 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a  tCursor *pCrsr;.
22f70 20 20 69 6e 74 20 6e 4b 65 79 3b 0a 20 20 63 6f    int nKey;.  co
22f80 6e 73 74 20 63 68 61 72 20 2a 7a 4b 65 79 3b 0a  nst char *zKey;.
22f90 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
22fa0 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
22fb0 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
22fc0 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
22fd0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
22fe0 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 70 49  t( pC!=0 );.  pI
22ff0 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n2 = &aMem[pOp->
23000 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p2];.  assert( p
23010 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In2->flags & MEM
23020 5f 42 6c 6f 62 20 29 3b 0a 20 20 70 43 72 73 72  _Blob );.  pCrsr
23030 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a   = pC->pCursor;.
23040 20 20 69 66 28 20 41 4c 57 41 59 53 28 70 43 72    if( ALWAYS(pCr
23050 73 72 21 3d 30 29 20 29 7b 0a 20 20 20 20 61 73  sr!=0) ){.    as
23060 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c  sert( pC->isTabl
23070 65 3d 3d 30 20 29 3b 0a 20 20 20 20 72 63 20 3d  e==0 );.    rc =
23080 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 32   ExpandBlob(pIn2
23090 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53  );.    if( rc==S
230a0 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
230b0 20 20 6e 4b 65 79 20 3d 20 70 49 6e 32 2d 3e 6e    nKey = pIn2->n
230c0 3b 0a 20 20 20 20 20 20 7a 4b 65 79 20 3d 20 70  ;.      zKey = p
230d0 49 6e 32 2d 3e 7a 3b 0a 20 20 20 20 20 20 72 63  In2->z;.      rc
230e0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 49   = sqlite3BtreeI
230f0 6e 73 65 72 74 28 70 43 72 73 72 2c 20 7a 4b 65  nsert(pCrsr, zKe
23100 79 2c 20 6e 4b 65 79 2c 20 22 22 2c 20 30 2c 20  y, nKey, "", 0, 
23110 30 2c 20 70 4f 70 2d 3e 70 33 2c 20 0a 20 20 20  0, pOp->p3, .   
23120 20 20 20 20 20 20 20 28 28 70 4f 70 2d 3e 70 35         ((pOp->p5
23130 20 26 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45   & OPFLAG_USESEE
23140 4b 52 45 53 55 4c 54 29 20 3f 20 70 43 2d 3e 73  KRESULT) ? pC->s
23150 65 65 6b 52 65 73 75 6c 74 20 3a 20 30 29 0a 20  eekResult : 0). 
23160 20 20 20 20 20 29 3b 0a 20 20 20 20 20 20 61 73       );.      as
23170 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72  sert( pC->deferr
23180 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20  edMoveto==0 );. 
23190 20 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74       pC->cacheSt
231a0 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
231b0 4c 45 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  LE;.    }.  }.  
231c0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
231d0 6f 64 65 3a 20 49 64 78 44 65 6c 65 74 65 20 50  ode: IdxDelete P
231e0 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
231f0 2a 20 54 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  * The content of
23200 20 50 33 20 72 65 67 69 73 74 65 72 73 20 73 74   P3 registers st
23210 61 72 74 69 6e 67 20 61 74 20 72 65 67 69 73 74  arting at regist
23220 65 72 20 50 32 20 66 6f 72 6d 0a 2a 2a 20 61 6e  er P2 form.** an
23230 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20   unpacked index 
23240 6b 65 79 2e 20 54 68 69 73 20 6f 70 63 6f 64 65  key. This opcode
23250 20 72 65 6d 6f 76 65 73 20 74 68 61 74 20 65 6e   removes that en
23260 74 72 79 20 66 72 6f 6d 20 74 68 65 20 0a 2a 2a  try from the .**
23270 20 69 6e 64 65 78 20 6f 70 65 6e 65 64 20 62 79   index opened by
23280 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2f 0a 63   cursor P1..*/.c
23290 61 73 65 20 4f 50 5f 49 64 78 44 65 6c 65 74 65  ase OP_IdxDelete
232a0 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  : {.  VdbeCursor
232b0 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72   *pC;.  BtCursor
232c0 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72   *pCrsr;.  int r
232d0 65 73 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65  es;.  UnpackedRe
232e0 63 6f 72 64 20 72 3b 0a 0a 20 20 61 73 73 65 72  cord r;..  asser
232f0 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a  t( pOp->p3>0 );.
23300 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
23310 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 70  2>0 && pOp->p2+p
23320 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 2b  Op->p3<=p->nMem+
23330 31 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  1 );.  assert( p
23340 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
23350 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
23360 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
23370 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
23380 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
23390 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43    pCrsr = pC->pC
233a0 75 72 73 6f 72 3b 0a 20 20 69 66 28 20 41 4c 57  ursor;.  if( ALW
233b0 41 59 53 28 70 43 72 73 72 21 3d 30 29 20 29 7b  AYS(pCrsr!=0) ){
233c0 0a 20 20 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20  .    r.pKeyInfo 
233d0 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a  = pC->pKeyInfo;.
233e0 20 20 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28      r.nField = (
233f0 75 31 36 29 70 4f 70 2d 3e 70 33 3b 0a 20 20 20  u16)pOp->p3;.   
23400 20 72 2e 66 6c 61 67 73 20 3d 20 30 3b 0a 20 20   r.flags = 0;.  
23410 20 20 72 2e 61 4d 65 6d 20 3d 20 26 61 4d 65 6d    r.aMem = &aMem
23420 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 23 69 66 64 65  [pOp->p2];.#ifde
23430 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
23440 20 20 20 7b 20 69 6e 74 20 69 3b 20 66 6f 72 28     { int i; for(
23450 69 3d 30 3b 20 69 3c 72 2e 6e 46 69 65 6c 64 3b  i=0; i<r.nField;
23460 20 69 2b 2b 29 20 61 73 73 65 72 74 28 20 6d 65   i++) assert( me
23470 6d 49 73 56 61 6c 69 64 28 26 72 2e 61 4d 65 6d  mIsValid(&r.aMem
23480 5b 69 5d 29 20 29 3b 20 7d 0a 23 65 6e 64 69 66  [i]) ); }.#endif
23490 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
234a0 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61  3BtreeMovetoUnpa
234b0 63 6b 65 64 28 70 43 72 73 72 2c 20 26 72 2c 20  cked(pCrsr, &r, 
234c0 30 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 20  0, 0, &res);.   
234d0 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
234e0 4f 4b 20 26 26 20 72 65 73 3d 3d 30 20 29 7b 0a  OK && res==0 ){.
234f0 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
23500 65 33 42 74 72 65 65 44 65 6c 65 74 65 28 70 43  e3BtreeDelete(pC
23510 72 73 72 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  rsr);.    }.    
23520 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65  assert( pC->defe
23530 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b  rredMoveto==0 );
23540 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74  .    pC->cacheSt
23550 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
23560 4c 45 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  LE;.  }.  break;
23570 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
23580 64 78 52 6f 77 69 64 20 50 31 20 50 32 20 2a 20  dxRowid P1 P2 * 
23590 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20  * *.**.** Write 
235a0 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  into register P2
235b0 20 61 6e 20 69 6e 74 65 67 65 72 20 77 68 69 63   an integer whic
235c0 68 20 69 73 20 74 68 65 20 6c 61 73 74 20 65 6e  h is the last en
235d0 74 72 79 20 69 6e 20 74 68 65 20 72 65 63 6f 72  try in the recor
235e0 64 20 61 74 0a 2a 2a 20 74 68 65 20 65 6e 64 20  d at.** the end 
235f0 6f 66 20 74 68 65 20 69 6e 64 65 78 20 6b 65 79  of the index key
23600 20 70 6f 69 6e 74 65 64 20 74 6f 20 62 79 20 63   pointed to by c
23610 75 72 73 6f 72 20 50 31 2e 20 20 54 68 69 73 20  ursor P1.  This 
23620 69 6e 74 65 67 65 72 20 73 68 6f 75 6c 64 20 62  integer should b
23630 65 0a 2a 2a 20 74 68 65 20 72 6f 77 69 64 20 6f  e.** the rowid o
23640 66 20 74 68 65 20 74 61 62 6c 65 20 65 6e 74 72  f the table entr
23650 79 20 74 6f 20 77 68 69 63 68 20 74 68 69 73 20  y to which this 
23660 69 6e 64 65 78 20 65 6e 74 72 79 20 70 6f 69 6e  index entry poin
23670 74 73 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  ts..**.** See al
23680 73 6f 3a 20 52 6f 77 69 64 2c 20 4d 61 6b 65 52  so: Rowid, MakeR
23690 65 63 6f 72 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ecord..*/.case O
236a0 50 5f 49 64 78 52 6f 77 69 64 3a 20 7b 20 20 20  P_IdxRowid: {   
236b0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
236c0 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f  t2-prerelease */
236d0 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72  .  BtCursor *pCr
236e0 73 72 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  sr;.  VdbeCursor
236f0 20 2a 70 43 3b 0a 20 20 69 36 34 20 72 6f 77 69   *pC;.  i64 rowi
23700 64 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  d;..  assert( pO
23710 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
23720 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
23730 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
23740 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
23750 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
23760 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75   pCrsr = pC->pCu
23770 72 73 6f 72 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c  rsor;.  pOut->fl
23780 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a  ags = MEM_Null;.
23790 20 20 69 66 28 20 41 4c 57 41 59 53 28 70 43 72    if( ALWAYS(pCr
237a0 73 72 21 3d 30 29 20 29 7b 0a 20 20 20 20 72 63  sr!=0) ){.    rc
237b0 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 75   = sqlite3VdbeCu
237c0 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b 0a  rsorMoveto(pC);.
237d0 20 20 20 20 69 66 28 20 4e 45 56 45 52 28 72 63      if( NEVER(rc
237e0 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  ) ) goto abort_d
237f0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
23800 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66   assert( pC->def
23810 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29  erredMoveto==0 )
23820 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  ;.    assert( pC
23830 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29 3b 0a  ->isTable==0 );.
23840 20 20 20 20 69 66 28 20 21 70 43 2d 3e 6e 75 6c      if( !pC->nul
23850 6c 52 6f 77 20 29 7b 0a 20 20 20 20 20 20 72 63  lRow ){.      rc
23860 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 64   = sqlite3VdbeId
23870 78 52 6f 77 69 64 28 64 62 2c 20 70 43 72 73 72  xRowid(db, pCrsr
23880 2c 20 26 72 6f 77 69 64 29 3b 0a 20 20 20 20 20  , &rowid);.     
23890 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
238a0 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 67 6f  OK ){.        go
238b0 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
238c0 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20  error;.      }. 
238d0 20 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d       pOut->u.i =
238e0 20 72 6f 77 69 64 3b 0a 20 20 20 20 20 20 70 4f   rowid;.      pO
238f0 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  ut->flags = MEM_
23900 49 6e 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  Int;.    }.  }. 
23910 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
23920 63 6f 64 65 3a 20 49 64 78 47 45 20 50 31 20 50  code: IdxGE P1 P
23930 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a  2 P3 P4 P5.**.**
23940 20 54 68 65 20 50 34 20 72 65 67 69 73 74 65 72   The P4 register
23950 20 76 61 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e   values beginnin
23960 67 20 77 69 74 68 20 50 33 20 66 6f 72 6d 20 61  g with P3 form a
23970 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78  n unpacked index
23980 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d   .** key that om
23990 69 74 73 20 74 68 65 20 52 4f 57 49 44 2e 20 20  its the ROWID.  
239a0 43 6f 6d 70 61 72 65 20 74 68 69 73 20 6b 65 79  Compare this key
239b0 20 76 61 6c 75 65 20 61 67 61 69 6e 73 74 20 74   value against t
239c0 68 65 20 69 6e 64 65 78 20 0a 2a 2a 20 74 68 61  he index .** tha
239d0 74 20 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c  t P1 is currentl
239e0 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69  y pointing to, i
239f0 67 6e 6f 72 69 6e 67 20 74 68 65 20 52 4f 57 49  gnoring the ROWI
23a00 44 20 6f 6e 20 74 68 65 20 50 31 20 69 6e 64 65  D on the P1 inde
23a10 78 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  x..**.** If the 
23a20 50 31 20 69 6e 64 65 78 20 65 6e 74 72 79 20 69  P1 index entry i
23a30 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f  s greater than o
23a40 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b  r equal to the k
23a50 65 79 20 76 61 6c 75 65 0a 2a 2a 20 74 68 65 6e  ey value.** then
23a60 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 20 4f 74   jump to P2.  Ot
23a70 68 65 72 77 69 73 65 20 66 61 6c 6c 20 74 68 72  herwise fall thr
23a80 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74  ough to the next
23a90 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a   instruction..**
23aa0 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 6e 6f 6e  .** If P5 is non
23ab0 2d 7a 65 72 6f 20 74 68 65 6e 20 74 68 65 20 6b  -zero then the k
23ac0 65 79 20 76 61 6c 75 65 20 69 73 20 69 6e 63 72  ey value is incr
23ad0 65 61 73 65 64 20 62 79 20 61 6e 20 65 70 73 69  eased by an epsi
23ae0 6c 6f 6e 20 0a 2a 2a 20 70 72 69 6f 72 20 74 6f  lon .** prior to
23af0 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e   the comparison.
23b00 20 20 54 68 69 73 20 6d 61 6b 65 20 74 68 65 20    This make the 
23b10 6f 70 63 6f 64 65 20 77 6f 72 6b 20 6c 69 6b 65  opcode work like
23b20 20 49 64 78 47 54 20 65 78 63 65 70 74 0a 2a 2a   IdxGT except.**
23b30 20 74 68 61 74 20 69 66 20 74 68 65 20 6b 65 79   that if the key
23b40 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50   from register P
23b50 33 20 69 73 20 61 20 70 72 65 66 69 78 20 6f 66  3 is a prefix of
23b60 20 74 68 65 20 6b 65 79 20 69 6e 20 74 68 65 20   the key in the 
23b70 63 75 72 73 6f 72 2c 0a 2a 2a 20 74 68 65 20 72  cursor,.** the r
23b80 65 73 75 6c 74 20 69 73 20 66 61 6c 73 65 20 77  esult is false w
23b90 68 65 72 65 61 73 20 69 74 20 77 6f 75 6c 64 20  hereas it would 
23ba0 62 65 20 74 72 75 65 20 77 69 74 68 20 49 64 78  be true with Idx
23bb0 47 54 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  GT..*/./* Opcode
23bc0 3a 20 49 64 78 4c 54 20 50 31 20 50 32 20 50 33  : IdxLT P1 P2 P3
23bd0 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 65   P4 P5.**.** The
23be0 20 50 34 20 72 65 67 69 73 74 65 72 20 76 61 6c   P4 register val
23bf0 75 65 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69  ues beginning wi
23c00 74 68 20 50 33 20 66 6f 72 6d 20 61 6e 20 75 6e  th P3 form an un
23c10 70 61 63 6b 65 64 20 69 6e 64 65 78 20 0a 2a 2a  packed index .**
23c20 20 6b 65 79 20 74 68 61 74 20 6f 6d 69 74 73 20   key that omits 
23c30 74 68 65 20 52 4f 57 49 44 2e 20 20 43 6f 6d 70  the ROWID.  Comp
23c40 61 72 65 20 74 68 69 73 20 6b 65 79 20 76 61 6c  are this key val
23c50 75 65 20 61 67 61 69 6e 73 74 20 74 68 65 20 69  ue against the i
23c60 6e 64 65 78 20 0a 2a 2a 20 74 68 61 74 20 50 31  ndex .** that P1
23c70 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f   is currently po
23c80 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72  inting to, ignor
23c90 69 6e 67 20 74 68 65 20 52 4f 57 49 44 20 6f 6e  ing the ROWID on
23ca0 20 74 68 65 20 50 31 20 69 6e 64 65 78 2e 0a 2a   the P1 index..*
23cb0 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20 69  *.** If the P1 i
23cc0 6e 64 65 78 20 65 6e 74 72 79 20 69 73 20 6c 65  ndex entry is le
23cd0 73 73 20 74 68 61 6e 20 74 68 65 20 6b 65 79 20  ss than the key 
23ce0 76 61 6c 75 65 20 74 68 65 6e 20 6a 75 6d 70 20  value then jump 
23cf0 74 6f 20 50 32 2e 0a 2a 2a 20 4f 74 68 65 72 77  to P2..** Otherw
23d00 69 73 65 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  ise fall through
23d10 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73   to the next ins
23d20 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  truction..**.** 
23d30 49 66 20 50 35 20 69 73 20 6e 6f 6e 2d 7a 65 72  If P5 is non-zer
23d40 6f 20 74 68 65 6e 20 74 68 65 20 6b 65 79 20 76  o then the key v
23d50 61 6c 75 65 20 69 73 20 69 6e 63 72 65 61 73 65  alue is increase
23d60 64 20 62 79 20 61 6e 20 65 70 73 69 6c 6f 6e 20  d by an epsilon 
23d70 70 72 69 6f 72 20 0a 2a 2a 20 74 6f 20 74 68 65  prior .** to the
23d80 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 54 68   comparison.  Th
23d90 69 73 20 6d 61 6b 65 73 20 74 68 65 20 6f 70 63  is makes the opc
23da0 6f 64 65 20 77 6f 72 6b 20 6c 69 6b 65 20 49 64  ode work like Id
23db0 78 4c 45 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  xLE..*/.case OP_
23dc0 49 64 78 4c 54 3a 20 20 20 20 20 20 20 20 20 20  IdxLT:          
23dd0 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20  /* jump */.case 
23de0 4f 50 5f 49 64 78 47 45 3a 20 7b 20 20 20 20 20  OP_IdxGE: {     
23df0 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
23e00 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
23e10 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 55 6e 70    int res;.  Unp
23e20 61 63 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a 0a  ackedRecord r;..
23e30 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
23e40 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
23e50 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
23e60 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
23e70 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
23e80 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73  ( pC!=0 );.  ass
23e90 65 72 74 28 20 70 43 2d 3e 69 73 4f 72 64 65 72  ert( pC->isOrder
23ea0 65 64 20 29 3b 0a 20 20 69 66 28 20 41 4c 57 41  ed );.  if( ALWA
23eb0 59 53 28 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d  YS(pC->pCursor!=
23ec0 30 29 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  0) ){.    assert
23ed0 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f  ( pC->deferredMo
23ee0 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 20 20 61  veto==0 );.    a
23ef0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d  ssert( pOp->p5==
23f00 30 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 31 20  0 || pOp->p5==1 
23f10 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
23f20 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49  Op->p4type==P4_I
23f30 4e 54 33 32 20 29 3b 0a 20 20 20 20 72 2e 70 4b  NT32 );.    r.pK
23f40 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65  eyInfo = pC->pKe
23f50 79 49 6e 66 6f 3b 0a 20 20 20 20 72 2e 6e 46 69  yInfo;.    r.nFi
23f60 65 6c 64 20 3d 20 28 75 31 36 29 70 4f 70 2d 3e  eld = (u16)pOp->
23f70 70 34 2e 69 3b 0a 20 20 20 20 69 66 28 20 70 4f  p4.i;.    if( pO
23f80 70 2d 3e 70 35 20 29 7b 0a 20 20 20 20 20 20 72  p->p5 ){.      r
23f90 2e 66 6c 61 67 73 20 3d 20 55 4e 50 41 43 4b 45  .flags = UNPACKE
23fa0 44 5f 49 4e 43 52 4b 45 59 20 7c 20 55 4e 50 41  D_INCRKEY | UNPA
23fb0 43 4b 45 44 5f 49 47 4e 4f 52 45 5f 52 4f 57 49  CKED_IGNORE_ROWI
23fc0 44 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  D;.    }else{.  
23fd0 20 20 20 20 72 2e 66 6c 61 67 73 20 3d 20 55 4e      r.flags = UN
23fe0 50 41 43 4b 45 44 5f 49 47 4e 4f 52 45 5f 52 4f  PACKED_IGNORE_RO
23ff0 57 49 44 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72  WID;.    }.    r
24000 2e 61 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f  .aMem = &aMem[pO
24010 70 2d 3e 70 33 5d 3b 0a 23 69 66 64 65 66 20 53  p->p3];.#ifdef S
24020 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20  QLITE_DEBUG.    
24030 7b 20 69 6e 74 20 69 3b 20 66 6f 72 28 69 3d 30  { int i; for(i=0
24040 3b 20 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 2b  ; i<r.nField; i+
24050 2b 29 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73  +) assert( memIs
24060 56 61 6c 69 64 28 26 72 2e 61 4d 65 6d 5b 69 5d  Valid(&r.aMem[i]
24070 29 20 29 3b 20 7d 0a 23 65 6e 64 69 66 0a 20 20  ) ); }.#endif.  
24080 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
24090 62 65 49 64 78 4b 65 79 43 6f 6d 70 61 72 65 28  beIdxKeyCompare(
240a0 70 43 2c 20 26 72 2c 20 26 72 65 73 29 3b 0a 20  pC, &r, &res);. 
240b0 20 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f     if( pOp->opco
240c0 64 65 3d 3d 4f 50 5f 49 64 78 4c 54 20 29 7b 0a  de==OP_IdxLT ){.
240d0 20 20 20 20 20 20 72 65 73 20 3d 20 2d 72 65 73        res = -res
240e0 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
240f0 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
24100 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 45  opcode==OP_IdxGE
24110 20 29 3b 0a 20 20 20 20 20 20 72 65 73 2b 2b 3b   );.      res++;
24120 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 72  .    }.    if( r
24130 65 73 3e 30 20 29 7b 0a 20 20 20 20 20 20 70 63  es>0 ){.      pc
24140 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 20 3b   = pOp->p2 - 1 ;
24150 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65  .    }.  }.  bre
24160 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
24170 3a 20 44 65 73 74 72 6f 79 20 50 31 20 50 32 20  : Destroy P1 P2 
24180 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 65 6c  P3 * *.**.** Del
24190 65 74 65 20 61 6e 20 65 6e 74 69 72 65 20 64 61  ete an entire da
241a0 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20  tabase table or 
241b0 69 6e 64 65 78 20 77 68 6f 73 65 20 72 6f 6f 74  index whose root
241c0 20 70 61 67 65 20 69 6e 20 74 68 65 20 64 61 74   page in the dat
241d0 61 62 61 73 65 0a 2a 2a 20 66 69 6c 65 20 69 73  abase.** file is
241e0 20 67 69 76 65 6e 20 62 79 20 50 31 2e 0a 2a 2a   given by P1..**
241f0 0a 2a 2a 20 54 68 65 20 74 61 62 6c 65 20 62 65  .** The table be
24200 69 6e 67 20 64 65 73 74 72 6f 79 65 64 20 69 73  ing destroyed is
24210 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74   in the main dat
24220 61 62 61 73 65 20 66 69 6c 65 20 69 66 20 50 33  abase file if P3
24230 3d 3d 30 2e 20 20 49 66 0a 2a 2a 20 50 33 3d 3d  ==0.  If.** P3==
24240 31 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65  1 then the table
24250 20 74 6f 20 62 65 20 63 6c 65 61 72 20 69 73 20   to be clear is 
24260 69 6e 20 74 68 65 20 61 75 78 69 6c 69 61 72 79  in the auxiliary
24270 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a 2a   database file.*
24280 2a 20 74 68 61 74 20 69 73 20 75 73 65 64 20 74  * that is used t
24290 6f 20 73 74 6f 72 65 20 74 61 62 6c 65 73 20 63  o store tables c
242a0 72 65 61 74 65 20 75 73 69 6e 67 20 43 52 45 41  reate using CREA
242b0 54 45 20 54 45 4d 50 4f 52 41 52 59 20 54 41 42  TE TEMPORARY TAB
242c0 4c 45 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 41 55 54  LE..**.** If AUT
242d0 4f 56 41 43 55 55 4d 20 69 73 20 65 6e 61 62 6c  OVACUUM is enabl
242e0 65 64 20 74 68 65 6e 20 69 74 20 69 73 20 70 6f  ed then it is po
242f0 73 73 69 62 6c 65 20 74 68 61 74 20 61 6e 6f 74  ssible that anot
24300 68 65 72 20 72 6f 6f 74 20 70 61 67 65 0a 2a 2a  her root page.**
24310 20 6d 69 67 68 74 20 62 65 20 6d 6f 76 65 64 20   might be moved 
24320 69 6e 74 6f 20 74 68 65 20 6e 65 77 6c 79 20 64  into the newly d
24330 65 6c 65 74 65 64 20 72 6f 6f 74 20 70 61 67 65  eleted root page
24340 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65   in order to kee
24350 70 20 61 6c 6c 0a 2a 2a 20 72 6f 6f 74 20 70 61  p all.** root pa
24360 67 65 73 20 63 6f 6e 74 69 67 75 6f 75 73 20 61  ges contiguous a
24370 74 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20  t the beginning 
24380 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 2e  of the database.
24390 20 20 54 68 65 20 66 6f 72 6d 65 72 0a 2a 2a 20    The former.** 
243a0 76 61 6c 75 65 20 6f 66 20 74 68 65 20 72 6f 6f  value of the roo
243b0 74 20 70 61 67 65 20 74 68 61 74 20 6d 6f 76 65  t page that move
243c0 64 20 2d 20 69 74 73 20 76 61 6c 75 65 20 62 65  d - its value be
243d0 66 6f 72 65 20 74 68 65 20 6d 6f 76 65 20 6f 63  fore the move oc
243e0 63 75 72 72 65 64 20 2d 0a 2a 2a 20 69 73 20 73  curred -.** is s
243f0 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65  tored in registe
24400 72 20 50 32 2e 20 20 49 66 20 6e 6f 20 70 61 67  r P2.  If no pag
24410 65 20 0a 2a 2a 20 6d 6f 76 65 6d 65 6e 74 20 77  e .** movement w
24420 61 73 20 72 65 71 75 69 72 65 64 20 28 62 65 63  as required (bec
24430 61 75 73 65 20 74 68 65 20 74 61 62 6c 65 20 62  ause the table b
24440 65 69 6e 67 20 64 72 6f 70 70 65 64 20 77 61 73  eing dropped was
24450 20 61 6c 72 65 61 64 79 20 0a 2a 2a 20 74 68 65   already .** the
24460 20 6c 61 73 74 20 6f 6e 65 20 69 6e 20 74 68 65   last one in the
24470 20 64 61 74 61 62 61 73 65 29 20 74 68 65 6e 20   database) then 
24480 61 20 7a 65 72 6f 20 69 73 20 73 74 6f 72 65 64  a zero is stored
24490 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e   in register P2.
244a0 0a 2a 2a 20 49 66 20 41 55 54 4f 56 41 43 55 55  .** If AUTOVACUU
244b0 4d 20 69 73 20 64 69 73 61 62 6c 65 64 20 74 68  M is disabled th
244c0 65 6e 20 61 20 7a 65 72 6f 20 69 73 20 73 74 6f  en a zero is sto
244d0 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20  red in register 
244e0 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  P2..**.** See al
244f0 73 6f 3a 20 43 6c 65 61 72 0a 2a 2f 0a 63 61 73  so: Clear.*/.cas
24500 65 20 4f 50 5f 44 65 73 74 72 6f 79 3a 20 7b 20  e OP_Destroy: { 
24510 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72      /* out2-prer
24520 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69 6e 74 20  elease */.  int 
24530 69 4d 6f 76 65 64 3b 0a 20 20 69 6e 74 20 69 43  iMoved;.  int iC
24540 6e 74 3b 0a 20 20 56 64 62 65 20 2a 70 56 64 62  nt;.  Vdbe *pVdb
24550 65 3b 0a 20 20 69 6e 74 20 69 44 62 3b 0a 23 69  e;.  int iDb;.#i
24560 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
24570 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20  T_VIRTUALTABLE. 
24580 20 69 43 6e 74 20 3d 20 30 3b 0a 20 20 66 6f 72   iCnt = 0;.  for
24590 28 70 56 64 62 65 3d 64 62 2d 3e 70 56 64 62 65  (pVdbe=db->pVdbe
245a0 3b 20 70 56 64 62 65 3b 20 70 56 64 62 65 20 3d  ; pVdbe; pVdbe =
245b0 20 70 56 64 62 65 2d 3e 70 4e 65 78 74 29 7b 0a   pVdbe->pNext){.
245c0 20 20 20 20 69 66 28 20 70 56 64 62 65 2d 3e 6d      if( pVdbe->m
245d0 61 67 69 63 3d 3d 56 44 42 45 5f 4d 41 47 49 43  agic==VDBE_MAGIC
245e0 5f 52 55 4e 20 26 26 20 70 56 64 62 65 2d 3e 69  _RUN && pVdbe->i
245f0 6e 56 74 61 62 4d 65 74 68 6f 64 3c 32 20 26 26  nVtabMethod<2 &&
24600 20 70 56 64 62 65 2d 3e 70 63 3e 3d 30 20 29 7b   pVdbe->pc>=0 ){
24610 0a 20 20 20 20 20 20 69 43 6e 74 2b 2b 3b 0a 20  .      iCnt++;. 
24620 20 20 20 7d 0a 20 20 7d 0a 23 65 6c 73 65 0a 20     }.  }.#else. 
24630 20 69 43 6e 74 20 3d 20 64 62 2d 3e 61 63 74 69   iCnt = db->acti
24640 76 65 56 64 62 65 43 6e 74 3b 0a 23 65 6e 64 69  veVdbeCnt;.#endi
24650 66 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20  f.  pOut->flags 
24660 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 69 66  = MEM_Null;.  if
24670 28 20 69 43 6e 74 3e 31 20 29 7b 0a 20 20 20 20  ( iCnt>1 ){.    
24680 72 63 20 3d 20 53 51 4c 49 54 45 5f 4c 4f 43 4b  rc = SQLITE_LOCK
24690 45 44 3b 0a 20 20 20 20 70 2d 3e 65 72 72 6f 72  ED;.    p->error
246a0 41 63 74 69 6f 6e 20 3d 20 4f 45 5f 41 62 6f 72  Action = OE_Abor
246b0 74 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  t;.  }else{.    
246c0 69 44 62 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20  iDb = pOp->p3;. 
246d0 20 20 20 61 73 73 65 72 74 28 20 69 43 6e 74 3d     assert( iCnt=
246e0 3d 31 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  =1 );.    assert
246f0 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20  ( (p->btreeMask 
24700 26 20 28 28 28 79 44 62 4d 61 73 6b 29 31 29 3c  & (((yDbMask)1)<
24710 3c 69 44 62 29 29 21 3d 30 20 29 3b 0a 20 20 20  <iDb))!=0 );.   
24720 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
24730 65 65 44 72 6f 70 54 61 62 6c 65 28 64 62 2d 3e  eeDropTable(db->
24740 61 44 62 5b 69 44 62 5d 2e 70 42 74 2c 20 70 4f  aDb[iDb].pBt, pO
24750 70 2d 3e 70 31 2c 20 26 69 4d 6f 76 65 64 29 3b  p->p1, &iMoved);
24760 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  .    pOut->flags
24770 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20   = MEM_Int;.    
24780 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 4d 6f 76  pOut->u.i = iMov
24790 65 64 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  ed;.#ifndef SQLI
247a0 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55  TE_OMIT_AUTOVACU
247b0 55 4d 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53  UM.    if( rc==S
247c0 51 4c 49 54 45 5f 4f 4b 20 26 26 20 69 4d 6f 76  QLITE_OK && iMov
247d0 65 64 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 73  ed!=0 ){.      s
247e0 71 6c 69 74 65 33 52 6f 6f 74 50 61 67 65 4d 6f  qlite3RootPageMo
247f0 76 65 64 28 26 64 62 2d 3e 61 44 62 5b 69 44 62  ved(&db->aDb[iDb
24800 5d 2c 20 69 4d 6f 76 65 64 2c 20 70 4f 70 2d 3e  ], iMoved, pOp->
24810 70 31 29 3b 0a 20 20 20 20 20 20 72 65 73 65 74  p1);.      reset
24820 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74 20 3d 20  SchemaOnFault = 
24830 31 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a  1;.    }.#endif.
24840 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
24850 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6c 65 61 72  /* Opcode: Clear
24860 20 50 31 20 50 32 20 50 33 0a 2a 2a 0a 2a 2a 20   P1 P2 P3.**.** 
24870 44 65 6c 65 74 65 20 61 6c 6c 20 63 6f 6e 74 65  Delete all conte
24880 6e 74 73 20 6f 66 20 74 68 65 20 64 61 74 61 62  nts of the datab
24890 61 73 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  ase table or ind
248a0 65 78 20 77 68 6f 73 65 20 72 6f 6f 74 20 70 61  ex whose root pa
248b0 67 65 0a 2a 2a 20 69 6e 20 74 68 65 20 64 61 74  ge.** in the dat
248c0 61 62 61 73 65 20 66 69 6c 65 20 69 73 20 67 69  abase file is gi
248d0 76 65 6e 20 62 79 20 50 31 2e 20 20 42 75 74 2c  ven by P1.  But,
248e0 20 75 6e 6c 69 6b 65 20 44 65 73 74 72 6f 79 2c   unlike Destroy,
248f0 20 64 6f 20 6e 6f 74 0a 2a 2a 20 72 65 6d 6f 76   do not.** remov
24900 65 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69  e the table or i
24910 6e 64 65 78 20 66 72 6f 6d 20 74 68 65 20 64 61  ndex from the da
24920 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a  tabase file..**.
24930 2a 2a 20 54 68 65 20 74 61 62 6c 65 20 62 65 69  ** The table bei
24940 6e 67 20 63 6c 65 61 72 20 69 73 20 69 6e 20 74  ng clear is in t
24950 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
24960 20 66 69 6c 65 20 69 66 20 50 32 3d 3d 30 2e 20   file if P2==0. 
24970 20 49 66 0a 2a 2a 20 50 32 3d 3d 31 20 74 68 65   If.** P2==1 the
24980 6e 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 62  n the table to b
24990 65 20 63 6c 65 61 72 20 69 73 20 69 6e 20 74 68  e clear is in th
249a0 65 20 61 75 78 69 6c 69 61 72 79 20 64 61 74 61  e auxiliary data
249b0 62 61 73 65 20 66 69 6c 65 0a 2a 2a 20 74 68 61  base file.** tha
249c0 74 20 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f  t is used to sto
249d0 72 65 20 74 61 62 6c 65 73 20 63 72 65 61 74 65  re tables create
249e0 20 75 73 69 6e 67 20 43 52 45 41 54 45 20 54 45   using CREATE TE
249f0 4d 50 4f 52 41 52 59 20 54 41 42 4c 45 2e 0a 2a  MPORARY TABLE..*
24a00 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 33 20 76  *.** If the P3 v
24a10 61 6c 75 65 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f  alue is non-zero
24a20 2c 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65  , then the table
24a30 20 72 65 66 65 72 72 65 64 20 74 6f 20 6d 75 73   referred to mus
24a40 74 20 62 65 20 61 6e 0a 2a 2a 20 69 6e 74 6b 65  t be an.** intke
24a50 79 20 74 61 62 6c 65 20 28 61 6e 20 53 51 4c 20  y table (an SQL 
24a60 74 61 62 6c 65 2c 20 6e 6f 74 20 61 6e 20 69 6e  table, not an in
24a70 64 65 78 29 2e 20 49 6e 20 74 68 69 73 20 63 61  dex). In this ca
24a80 73 65 20 74 68 65 20 72 6f 77 20 63 68 61 6e 67  se the row chang
24a90 65 20 0a 2a 2a 20 63 6f 75 6e 74 20 69 73 20 69  e .** count is i
24aa0 6e 63 72 65 6d 65 6e 74 65 64 20 62 79 20 74 68  ncremented by th
24ab0 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73  e number of rows
24ac0 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 62 65   in the table be
24ad0 69 6e 67 20 63 6c 65 61 72 65 64 2e 20 0a 2a 2a  ing cleared. .**
24ae0 20 49 66 20 50 33 20 69 73 20 67 72 65 61 74 65   If P3 is greate
24af0 72 20 74 68 61 6e 20 7a 65 72 6f 2c 20 74 68 65  r than zero, the
24b00 6e 20 74 68 65 20 76 61 6c 75 65 20 73 74 6f 72  n the value stor
24b10 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ed in register P
24b20 33 20 69 73 0a 2a 2a 20 61 6c 73 6f 20 69 6e 63  3 is.** also inc
24b30 72 65 6d 65 6e 74 65 64 20 62 79 20 74 68 65 20  remented by the 
24b40 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69  number of rows i
24b50 6e 20 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e  n the table bein
24b60 67 20 63 6c 65 61 72 65 64 2e 0a 2a 2a 0a 2a 2a  g cleared..**.**
24b70 20 53 65 65 20 61 6c 73 6f 3a 20 44 65 73 74 72   See also: Destr
24b80 6f 79 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6c  oy.*/.case OP_Cl
24b90 65 61 72 3a 20 7b 0a 20 20 69 6e 74 20 6e 43 68  ear: {.  int nCh
24ba0 61 6e 67 65 3b 0a 20 0a 20 20 6e 43 68 61 6e 67  ange;. .  nChang
24bb0 65 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28  e = 0;.  assert(
24bc0 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26   (p->btreeMask &
24bd0 20 28 28 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c   (((yDbMask)1)<<
24be0 70 4f 70 2d 3e 70 32 29 29 21 3d 30 20 29 3b 0a  pOp->p2))!=0 );.
24bf0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
24c00 72 65 65 43 6c 65 61 72 54 61 62 6c 65 28 0a 20  reeClearTable(. 
24c10 20 20 20 20 20 64 62 2d 3e 61 44 62 5b 70 4f 70       db->aDb[pOp
24c20 2d 3e 70 32 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e  ->p2].pBt, pOp->
24c30 70 31 2c 20 28 70 4f 70 2d 3e 70 33 20 3f 20 26  p1, (pOp->p3 ? &
24c40 6e 43 68 61 6e 67 65 20 3a 20 30 29 0a 20 20 29  nChange : 0).  )
24c50 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 33 20  ;.  if( pOp->p3 
24c60 29 7b 0a 20 20 20 20 70 2d 3e 6e 43 68 61 6e 67  ){.    p->nChang
24c70 65 20 2b 3d 20 6e 43 68 61 6e 67 65 3b 0a 20 20  e += nChange;.  
24c80 20 20 69 66 28 20 70 4f 70 2d 3e 70 33 3e 30 20    if( pOp->p3>0 
24c90 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ){.      assert(
24ca0 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65   memIsValid(&aMe
24cb0 6d 5b 70 4f 70 2d 3e 70 33 5d 29 20 29 3b 0a 20  m[pOp->p3]) );. 
24cc0 20 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43       memAboutToC
24cd0 68 61 6e 67 65 28 70 2c 20 26 61 4d 65 6d 5b 70  hange(p, &aMem[p
24ce0 4f 70 2d 3e 70 33 5d 29 3b 0a 20 20 20 20 20 20  Op->p3]);.      
24cf0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 2e 75 2e  aMem[pOp->p3].u.
24d00 69 20 2b 3d 20 6e 43 68 61 6e 67 65 3b 0a 20 20  i += nChange;.  
24d10 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b    }.  }.  break;
24d20 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43  .}../* Opcode: C
24d30 72 65 61 74 65 54 61 62 6c 65 20 50 31 20 50 32  reateTable P1 P2
24d40 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 6c 6c   * * *.**.** All
24d50 6f 63 61 74 65 20 61 20 6e 65 77 20 74 61 62 6c  ocate a new tabl
24d60 65 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61  e in the main da
24d70 74 61 62 61 73 65 20 66 69 6c 65 20 69 66 20 50  tabase file if P
24d80 31 3d 3d 30 20 6f 72 20 69 6e 20 74 68 65 0a 2a  1==0 or in the.*
24d90 2a 20 61 75 78 69 6c 69 61 72 79 20 64 61 74 61  * auxiliary data
24da0 62 61 73 65 20 66 69 6c 65 20 69 66 20 50 31 3d  base file if P1=
24db0 3d 31 20 6f 72 20 69 6e 20 61 6e 20 61 74 74 61  =1 or in an atta
24dc0 63 68 65 64 20 64 61 74 61 62 61 73 65 20 69 66  ched database if
24dd0 0a 2a 2a 20 50 31 3e 31 2e 20 20 57 72 69 74 65  .** P1>1.  Write
24de0 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65 20 6e   the root page n
24df0 75 6d 62 65 72 20 6f 66 20 74 68 65 20 6e 65 77  umber of the new
24e00 20 74 61 62 6c 65 20 69 6e 74 6f 0a 2a 2a 20 72   table into.** r
24e10 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 0a 2a 2a  egister P2.**.**
24e20 20 54 68 65 20 64 69 66 66 65 72 65 6e 63 65 20   The difference 
24e30 62 65 74 77 65 65 6e 20 61 20 74 61 62 6c 65 20  between a table 
24e40 61 6e 64 20 61 6e 20 69 6e 64 65 78 20 69 73 20  and an index is 
24e50 74 68 69 73 3a 20 20 41 20 74 61 62 6c 65 20 6d  this:  A table m
24e60 75 73 74 0a 2a 2a 20 68 61 76 65 20 61 20 34 2d  ust.** have a 4-
24e70 62 79 74 65 20 69 6e 74 65 67 65 72 20 6b 65 79  byte integer key
24e80 20 61 6e 64 20 63 61 6e 20 68 61 76 65 20 61 72   and can have ar
24e90 62 69 74 72 61 72 79 20 64 61 74 61 2e 20 20 41  bitrary data.  A
24ea0 6e 20 69 6e 64 65 78 0a 2a 2a 20 68 61 73 20 61  n index.** has a
24eb0 6e 20 61 72 62 69 74 72 61 72 79 20 6b 65 79 20  n arbitrary key 
24ec0 62 75 74 20 6e 6f 20 64 61 74 61 2e 0a 2a 2a 0a  but no data..**.
24ed0 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 43 72 65  ** See also: Cre
24ee0 61 74 65 49 6e 64 65 78 0a 2a 2f 0a 2f 2a 20 4f  ateIndex.*/./* O
24ef0 70 63 6f 64 65 3a 20 43 72 65 61 74 65 49 6e 64  pcode: CreateInd
24f00 65 78 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  ex P1 P2 * * *.*
24f10 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65 20 61 20  *.** Allocate a 
24f20 6e 65 77 20 69 6e 64 65 78 20 69 6e 20 74 68 65  new index in the
24f30 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66   main database f
24f40 69 6c 65 20 69 66 20 50 31 3d 3d 30 20 6f 72 20  ile if P1==0 or 
24f50 69 6e 20 74 68 65 0a 2a 2a 20 61 75 78 69 6c 69  in the.** auxili
24f60 61 72 79 20 64 61 74 61 62 61 73 65 20 66 69 6c  ary database fil
24f70 65 20 69 66 20 50 31 3d 3d 31 20 6f 72 20 69 6e  e if P1==1 or in
24f80 20 61 6e 20 61 74 74 61 63 68 65 64 20 64 61 74   an attached dat
24f90 61 62 61 73 65 20 69 66 0a 2a 2a 20 50 31 3e 31  abase if.** P1>1
24fa0 2e 20 20 57 72 69 74 65 20 74 68 65 20 72 6f 6f  .  Write the roo
24fb0 74 20 70 61 67 65 20 6e 75 6d 62 65 72 20 6f 66  t page number of
24fc0 20 74 68 65 20 6e 65 77 20 74 61 62 6c 65 20 69   the new table i
24fd0 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72 20  nto.** register 
24fe0 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 64 6f  P2..**.** See do
24ff0 63 75 6d 65 6e 74 61 74 69 6f 6e 20 6f 6e 20 4f  cumentation on O
25000 50 5f 43 72 65 61 74 65 54 61 62 6c 65 20 66 6f  P_CreateTable fo
25010 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66  r additional inf
25020 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73  ormation..*/.cas
25030 65 20 4f 50 5f 43 72 65 61 74 65 49 6e 64 65 78  e OP_CreateIndex
25040 3a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  :            /* 
25050 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20  out2-prerelease 
25060 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 72 65 61 74  */.case OP_Creat
25070 65 54 61 62 6c 65 3a 20 7b 20 20 20 20 20 20 20  eTable: {       
25080 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65     /* out2-prere
25090 6c 65 61 73 65 20 2a 2f 0a 20 20 69 6e 74 20 70  lease */.  int p
250a0 67 6e 6f 3b 0a 20 20 69 6e 74 20 66 6c 61 67 73  gno;.  int flags
250b0 3b 0a 20 20 44 62 20 2a 70 44 62 3b 0a 0a 20 20  ;.  Db *pDb;..  
250c0 70 67 6e 6f 20 3d 20 30 3b 0a 20 20 61 73 73 65  pgno = 0;.  asse
250d0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
250e0 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44  & pOp->p1<db->nD
250f0 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28  b );.  assert( (
25100 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28  p->btreeMask & (
25110 28 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c 70 4f  ((yDbMask)1)<<pO
25120 70 2d 3e 70 31 29 29 21 3d 30 20 29 3b 0a 20 20  p->p1))!=0 );.  
25130 70 44 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b 70  pDb = &db->aDb[p
25140 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
25150 74 28 20 70 44 62 2d 3e 70 42 74 21 3d 30 20 29  t( pDb->pBt!=0 )
25160 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63  ;.  if( pOp->opc
25170 6f 64 65 3d 3d 4f 50 5f 43 72 65 61 74 65 54 61  ode==OP_CreateTa
25180 62 6c 65 20 29 7b 0a 20 20 20 20 2f 2a 20 66 6c  ble ){.    /* fl
25190 61 67 73 20 3d 20 42 54 52 45 45 5f 49 4e 54 4b  ags = BTREE_INTK
251a0 45 59 3b 20 2a 2f 0a 20 20 20 20 66 6c 61 67 73  EY; */.    flags
251b0 20 3d 20 42 54 52 45 45 5f 49 4e 54 4b 45 59 3b   = BTREE_INTKEY;
251c0 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 66 6c  .  }else{.    fl
251d0 61 67 73 20 3d 20 42 54 52 45 45 5f 42 4c 4f 42  ags = BTREE_BLOB
251e0 4b 45 59 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20  KEY;.  }.  rc = 
251f0 73 71 6c 69 74 65 33 42 74 72 65 65 43 72 65 61  sqlite3BtreeCrea
25200 74 65 54 61 62 6c 65 28 70 44 62 2d 3e 70 42 74  teTable(pDb->pBt
25210 2c 20 26 70 67 6e 6f 2c 20 66 6c 61 67 73 29 3b  , &pgno, flags);
25220 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70  .  pOut->u.i = p
25230 67 6e 6f 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  gno;.  break;.}.
25240 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 61 72 73  ./* Opcode: Pars
25250 65 53 63 68 65 6d 61 20 50 31 20 2a 20 2a 20 50  eSchema P1 * * P
25260 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 61  4 *.**.** Read a
25270 6e 64 20 70 61 72 73 65 20 61 6c 6c 20 65 6e 74  nd parse all ent
25280 72 69 65 73 20 66 72 6f 6d 20 74 68 65 20 53 51  ries from the SQ
25290 4c 49 54 45 5f 4d 41 53 54 45 52 20 74 61 62 6c  LITE_MASTER tabl
252a0 65 20 6f 66 20 64 61 74 61 62 61 73 65 20 50 31  e of database P1
252b0 0a 2a 2a 20 74 68 61 74 20 6d 61 74 63 68 20 74  .** that match t
252c0 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  he WHERE clause 
252d0 50 34 2e 20 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  P4. .**.** This 
252e0 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74  opcode invokes t
252f0 68 65 20 70 61 72 73 65 72 20 74 6f 20 63 72 65  he parser to cre
25300 61 74 65 20 61 20 6e 65 77 20 76 69 72 74 75 61  ate a new virtua
25310 6c 20 6d 61 63 68 69 6e 65 2c 0a 2a 2a 20 74 68  l machine,.** th
25320 65 6e 20 72 75 6e 73 20 74 68 65 20 6e 65 77 20  en runs the new 
25330 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 2e  virtual machine.
25340 20 20 49 74 20 69 73 20 74 68 75 73 20 61 20 72    It is thus a r
25350 65 2d 65 6e 74 72 61 6e 74 20 6f 70 63 6f 64 65  e-entrant opcode
25360 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 61 72  ..*/.case OP_Par
25370 73 65 53 63 68 65 6d 61 3a 20 7b 0a 20 20 69 6e  seSchema: {.  in
25380 74 20 69 44 62 3b 0a 20 20 63 6f 6e 73 74 20 63  t iDb;.  const c
25390 68 61 72 20 2a 7a 4d 61 73 74 65 72 3b 0a 20 20  har *zMaster;.  
253a0 63 68 61 72 20 2a 7a 53 71 6c 3b 0a 20 20 49 6e  char *zSql;.  In
253b0 69 74 44 61 74 61 20 69 6e 69 74 44 61 74 61 3b  itData initData;
253c0 0a 0a 20 20 2f 2a 20 41 6e 79 20 70 72 65 70 61  ..  /* Any prepa
253d0 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20 74 68  red statement th
253e0 61 74 20 69 6e 76 6f 6b 65 73 20 74 68 69 73 20  at invokes this 
253f0 6f 70 63 6f 64 65 20 77 69 6c 6c 20 68 6f 6c 64  opcode will hold
25400 20 6d 75 74 65 78 65 73 0a 20 20 2a 2a 20 6f 6e   mutexes.  ** on
25410 20 65 76 65 72 79 20 62 74 72 65 65 2e 20 20 54   every btree.  T
25420 68 69 73 20 69 73 20 61 20 70 72 65 72 65 71 75  his is a prerequ
25430 69 73 69 74 65 20 66 6f 72 20 69 6e 76 6f 6b 69  isite for invoki
25440 6e 67 20 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33  ng .  ** sqlite3
25450 49 6e 69 74 43 61 6c 6c 62 61 63 6b 28 29 2e 0a  InitCallback()..
25460 20 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49    */.#ifdef SQLI
25470 54 45 5f 44 45 42 55 47 0a 20 20 66 6f 72 28 69  TE_DEBUG.  for(i
25480 44 62 3d 30 3b 20 69 44 62 3c 64 62 2d 3e 6e 44  Db=0; iDb<db->nD
25490 62 3b 20 69 44 62 2b 2b 29 7b 0a 20 20 20 20 61  b; iDb++){.    a
254a0 73 73 65 72 74 28 20 69 44 62 3d 3d 31 20 7c 7c  ssert( iDb==1 ||
254b0 20 73 71 6c 69 74 65 33 42 74 72 65 65 48 6f 6c   sqlite3BtreeHol
254c0 64 73 4d 75 74 65 78 28 64 62 2d 3e 61 44 62 5b  dsMutex(db->aDb[
254d0 69 44 62 5d 2e 70 42 74 29 20 29 3b 0a 20 20 7d  iDb].pBt) );.  }
254e0 0a 23 65 6e 64 69 66 0a 20 20 61 73 73 65 72 74  .#endif.  assert
254f0 28 20 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 3d  ( p->btreeMask =
25500 3d 20 7e 28 79 44 62 4d 61 73 6b 29 30 20 29 3b  = ~(yDbMask)0 );
25510 0a 0a 0a 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e  ...  iDb = pOp->
25520 70 31 3b 0a 20 20 61 73 73 65 72 74 28 20 69 44  p1;.  assert( iD
25530 62 3e 3d 30 20 26 26 20 69 44 62 3c 64 62 2d 3e  b>=0 && iDb<db->
25540 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28  nDb );.  assert(
25550 20 44 62 48 61 73 50 72 6f 70 65 72 74 79 28 64   DbHasProperty(d
25560 62 2c 20 69 44 62 2c 20 44 42 5f 53 63 68 65 6d  b, iDb, DB_Schem
25570 61 4c 6f 61 64 65 64 29 20 29 3b 0a 20 20 2f 2a  aLoaded) );.  /*
25580 20 55 73 65 64 20 74 6f 20 62 65 20 61 20 63 6f   Used to be a co
25590 6e 64 69 74 69 6f 6e 61 6c 20 2a 2f 20 7b 0a 20  nditional */ {. 
255a0 20 20 20 7a 4d 61 73 74 65 72 20 3d 20 53 43 48     zMaster = SCH
255b0 45 4d 41 5f 54 41 42 4c 45 28 69 44 62 29 3b 0a  EMA_TABLE(iDb);.
255c0 20 20 20 20 69 6e 69 74 44 61 74 61 2e 64 62 20      initData.db 
255d0 3d 20 64 62 3b 0a 20 20 20 20 69 6e 69 74 44 61  = db;.    initDa
255e0 74 61 2e 69 44 62 20 3d 20 70 4f 70 2d 3e 70 31  ta.iDb = pOp->p1
255f0 3b 0a 20 20 20 20 69 6e 69 74 44 61 74 61 2e 70  ;.    initData.p
25600 7a 45 72 72 4d 73 67 20 3d 20 26 70 2d 3e 7a 45  zErrMsg = &p->zE
25610 72 72 4d 73 67 3b 0a 20 20 20 20 7a 53 71 6c 20  rrMsg;.    zSql 
25620 3d 20 73 71 6c 69 74 65 33 4d 50 72 69 6e 74 66  = sqlite3MPrintf
25630 28 64 62 2c 0a 20 20 20 20 20 20 20 22 53 45 4c  (db,.       "SEL
25640 45 43 54 20 6e 61 6d 65 2c 20 72 6f 6f 74 70 61  ECT name, rootpa
25650 67 65 2c 20 73 71 6c 20 46 52 4f 4d 20 27 25 71  ge, sql FROM '%q
25660 27 2e 25 73 20 57 48 45 52 45 20 25 73 20 4f 52  '.%s WHERE %s OR
25670 44 45 52 20 42 59 20 72 6f 77 69 64 22 2c 0a 20  DER BY rowid",. 
25680 20 20 20 20 20 20 64 62 2d 3e 61 44 62 5b 69 44        db->aDb[iD
25690 62 5d 2e 7a 4e 61 6d 65 2c 20 7a 4d 61 73 74 65  b].zName, zMaste
256a0 72 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20  r, pOp->p4.z);. 
256b0 20 20 20 69 66 28 20 7a 53 71 6c 3d 3d 30 20 29     if( zSql==0 )
256c0 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c  {.      rc = SQL
256d0 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 20 20 7d  ITE_NOMEM;.    }
256e0 65 6c 73 65 7b 0a 20 20 20 20 20 20 61 73 73 65  else{.      asse
256f0 72 74 28 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73  rt( db->init.bus
25700 79 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 64 62  y==0 );.      db
25710 2d 3e 69 6e 69 74 2e 62 75 73 79 20 3d 20 31 3b  ->init.busy = 1;
25720 0a 20 20 20 20 20 20 69 6e 69 74 44 61 74 61 2e  .      initData.
25730 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a  rc = SQLITE_OK;.
25740 20 20 20 20 20 20 61 73 73 65 72 74 28 20 21 64        assert( !d
25750 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20  b->mallocFailed 
25760 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71  );.      rc = sq
25770 6c 69 74 65 33 5f 65 78 65 63 28 64 62 2c 20 7a  lite3_exec(db, z
25780 53 71 6c 2c 20 73 71 6c 69 74 65 33 49 6e 69 74  Sql, sqlite3Init
25790 43 61 6c 6c 62 61 63 6b 2c 20 26 69 6e 69 74 44  Callback, &initD
257a0 61 74 61 2c 20 30 29 3b 0a 20 20 20 20 20 20 69  ata, 0);.      i
257b0 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
257c0 20 29 20 72 63 20 3d 20 69 6e 69 74 44 61 74 61   ) rc = initData
257d0 2e 72 63 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  .rc;.      sqlit
257e0 65 33 44 62 46 72 65 65 28 64 62 2c 20 7a 53 71  e3DbFree(db, zSq
257f0 6c 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 69 6e  l);.      db->in
25800 69 74 2e 62 75 73 79 20 3d 20 30 3b 0a 20 20 20  it.busy = 0;.   
25810 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 3d   }.  }.  if( rc=
25820 3d 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 29 7b  =SQLITE_NOMEM ){
25830 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  .    goto no_mem
25840 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 20 20  ;.  }.  break;  
25850 0a 7d 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64  .}..#if !defined
25860 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4e 41  (SQLITE_OMIT_ANA
25870 4c 59 5a 45 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a  LYZE)./* Opcode:
25880 20 4c 6f 61 64 41 6e 61 6c 79 73 69 73 20 50 31   LoadAnalysis P1
25890 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52   * * * *.**.** R
258a0 65 61 64 20 74 68 65 20 73 71 6c 69 74 65 5f 73  ead the sqlite_s
258b0 74 61 74 31 20 74 61 62 6c 65 20 66 6f 72 20 64  tat1 table for d
258c0 61 74 61 62 61 73 65 20 50 31 20 61 6e 64 20 6c  atabase P1 and l
258d0 6f 61 64 20 74 68 65 20 63 6f 6e 74 65 6e 74 0a  oad the content.
258e0 2a 2a 20 6f 66 20 74 68 61 74 20 74 61 62 6c 65  ** of that table
258f0 20 69 6e 74 6f 20 74 68 65 20 69 6e 74 65 72 6e   into the intern
25900 61 6c 20 69 6e 64 65 78 20 68 61 73 68 20 74 61  al index hash ta
25910 62 6c 65 2e 20 20 54 68 69 73 20 77 69 6c 6c 20  ble.  This will 
25920 63 61 75 73 65 0a 2a 2a 20 74 68 65 20 61 6e 61  cause.** the ana
25930 6c 79 73 69 73 20 74 6f 20 62 65 20 75 73 65 64  lysis to be used
25940 20 77 68 65 6e 20 70 72 65 70 61 72 69 6e 67 20   when preparing 
25950 61 6c 6c 20 73 75 62 73 65 71 75 65 6e 74 20 71  all subsequent q
25960 75 65 72 69 65 73 2e 0a 2a 2f 0a 63 61 73 65 20  ueries..*/.case 
25970 4f 50 5f 4c 6f 61 64 41 6e 61 6c 79 73 69 73 3a  OP_LoadAnalysis:
25980 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70   {.  assert( pOp
25990 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
259a0 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20  p1<db->nDb );.  
259b0 72 63 20 3d 20 73 71 6c 69 74 65 33 41 6e 61 6c  rc = sqlite3Anal
259c0 79 73 69 73 4c 6f 61 64 28 64 62 2c 20 70 4f 70  ysisLoad(db, pOp
259d0 2d 3e 70 31 29 3b 0a 20 20 62 72 65 61 6b 3b 20  ->p1);.  break; 
259e0 20 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 21 64   .}.#endif /* !d
259f0 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
25a00 49 54 5f 41 4e 41 4c 59 5a 45 29 20 2a 2f 0a 0a  IT_ANALYZE) */..
25a10 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70 54  /* Opcode: DropT
25a20 61 62 6c 65 20 50 31 20 2a 20 2a 20 50 34 20 2a  able P1 * * P4 *
25a30 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74 68  .**.** Remove th
25a40 65 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d 6d  e internal (in-m
25a50 65 6d 6f 72 79 29 20 64 61 74 61 20 73 74 72 75  emory) data stru
25a60 63 74 75 72 65 73 20 74 68 61 74 20 64 65 73 63  ctures that desc
25a70 72 69 62 65 0a 2a 2a 20 74 68 65 20 74 61 62 6c  ribe.** the tabl
25a80 65 20 6e 61 6d 65 64 20 50 34 20 69 6e 20 64 61  e named P4 in da
25a90 74 61 62 61 73 65 20 50 31 2e 20 20 54 68 69 73  tabase P1.  This
25aa0 20 69 73 20 63 61 6c 6c 65 64 20 61 66 74 65 72   is called after
25ab0 20 61 20 74 61 62 6c 65 0a 2a 2a 20 69 73 20 64   a table.** is d
25ac0 72 6f 70 70 65 64 20 69 6e 20 6f 72 64 65 72 20  ropped in order 
25ad0 74 6f 20 6b 65 65 70 20 74 68 65 20 69 6e 74 65  to keep the inte
25ae0 72 6e 61 6c 20 72 65 70 72 65 73 65 6e 74 61 74  rnal representat
25af0 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63  ion of the.** sc
25b00 68 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74 20  hema consistent 
25b10 77 69 74 68 20 77 68 61 74 20 69 73 20 6f 6e 20  with what is on 
25b20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  disk..*/.case OP
25b30 5f 44 72 6f 70 54 61 62 6c 65 3a 20 7b 0a 20 20  _DropTable: {.  
25b40 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64  sqlite3UnlinkAnd
25b50 44 65 6c 65 74 65 54 61 62 6c 65 28 64 62 2c 20  DeleteTable(db, 
25b60 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34  pOp->p1, pOp->p4
25b70 2e 7a 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .z);.  break;.}.
25b80 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70  ./* Opcode: Drop
25b90 49 6e 64 65 78 20 50 31 20 2a 20 2a 20 50 34 20  Index P1 * * P4 
25ba0 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74  *.**.** Remove t
25bb0 68 65 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d  he internal (in-
25bc0 6d 65 6d 6f 72 79 29 20 64 61 74 61 20 73 74 72  memory) data str
25bd0 75 63 74 75 72 65 73 20 74 68 61 74 20 64 65 73  uctures that des
25be0 63 72 69 62 65 0a 2a 2a 20 74 68 65 20 69 6e 64  cribe.** the ind
25bf0 65 78 20 6e 61 6d 65 64 20 50 34 20 69 6e 20 64  ex named P4 in d
25c00 61 74 61 62 61 73 65 20 50 31 2e 20 20 54 68 69  atabase P1.  Thi
25c10 73 20 69 73 20 63 61 6c 6c 65 64 20 61 66 74 65  s is called afte
25c20 72 20 61 6e 20 69 6e 64 65 78 0a 2a 2a 20 69 73  r an index.** is
25c30 20 64 72 6f 70 70 65 64 20 69 6e 20 6f 72 64 65   dropped in orde
25c40 72 20 74 6f 20 6b 65 65 70 20 74 68 65 20 69 6e  r to keep the in
25c50 74 65 72 6e 61 6c 20 72 65 70 72 65 73 65 6e 74  ternal represent
25c60 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20  ation of the.** 
25c70 73 63 68 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e  schema consisten
25c80 74 20 77 69 74 68 20 77 68 61 74 20 69 73 20 6f  t with what is o
25c90 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20  n disk..*/.case 
25ca0 4f 50 5f 44 72 6f 70 49 6e 64 65 78 3a 20 7b 0a  OP_DropIndex: {.
25cb0 20 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41    sqlite3UnlinkA
25cc0 6e 64 44 65 6c 65 74 65 49 6e 64 65 78 28 64 62  ndDeleteIndex(db
25cd0 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e  , pOp->p1, pOp->
25ce0 70 34 2e 7a 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  p4.z);.  break;.
25cf0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 72  }../* Opcode: Dr
25d00 6f 70 54 72 69 67 67 65 72 20 50 31 20 2a 20 2a  opTrigger P1 * *
25d10 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f   P4 *.**.** Remo
25d20 76 65 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20  ve the internal 
25d30 28 69 6e 2d 6d 65 6d 6f 72 79 29 20 64 61 74 61  (in-memory) data
25d40 20 73 74 72 75 63 74 75 72 65 73 20 74 68 61 74   structures that
25d50 20 64 65 73 63 72 69 62 65 0a 2a 2a 20 74 68 65   describe.** the
25d60 20 74 72 69 67 67 65 72 20 6e 61 6d 65 64 20 50   trigger named P
25d70 34 20 69 6e 20 64 61 74 61 62 61 73 65 20 50 31  4 in database P1
25d80 2e 20 20 54 68 69 73 20 69 73 20 63 61 6c 6c 65  .  This is calle
25d90 64 20 61 66 74 65 72 20 61 20 74 72 69 67 67 65  d after a trigge
25da0 72 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65 64 20  r.** is dropped 
25db0 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65 70  in order to keep
25dc0 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 72 65   the internal re
25dd0 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20  presentation of 
25de0 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 63 6f  the.** schema co
25df0 6e 73 69 73 74 65 6e 74 20 77 69 74 68 20 77 68  nsistent with wh
25e00 61 74 20 69 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a  at is on disk..*
25e10 2f 0a 63 61 73 65 20 4f 50 5f 44 72 6f 70 54 72  /.case OP_DropTr
25e20 69 67 67 65 72 3a 20 7b 0a 20 20 73 71 6c 69 74  igger: {.  sqlit
25e30 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74  e3UnlinkAndDelet
25e40 65 54 72 69 67 67 65 72 28 64 62 2c 20 70 4f 70  eTrigger(db, pOp
25e50 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29  ->p1, pOp->p4.z)
25e60 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 23  ;.  break;.}...#
25e70 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
25e80 49 54 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45  IT_INTEGRITY_CHE
25e90 43 4b 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e  CK./* Opcode: In
25ea0 74 65 67 72 69 74 79 43 6b 20 50 31 20 50 32 20  tegrityCk P1 P2 
25eb0 50 33 20 2a 20 50 35 0a 2a 2a 0a 2a 2a 20 44 6f  P3 * P5.**.** Do
25ec0 20 61 6e 20 61 6e 61 6c 79 73 69 73 20 6f 66 20   an analysis of 
25ed0 74 68 65 20 63 75 72 72 65 6e 74 6c 79 20 6f 70  the currently op
25ee0 65 6e 20 64 61 74 61 62 61 73 65 2e 20 20 53 74  en database.  St
25ef0 6f 72 65 20 69 6e 0a 2a 2a 20 72 65 67 69 73 74  ore in.** regist
25f00 65 72 20 50 31 20 74 68 65 20 74 65 78 74 20 6f  er P1 the text o
25f10 66 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61  f an error messa
25f20 67 65 20 64 65 73 63 72 69 62 69 6e 67 20 61 6e  ge describing an
25f30 79 20 70 72 6f 62 6c 65 6d 73 2e 0a 2a 2a 20 49  y problems..** I
25f40 66 20 6e 6f 20 70 72 6f 62 6c 65 6d 73 20 61 72  f no problems ar
25f50 65 20 66 6f 75 6e 64 2c 20 73 74 6f 72 65 20 61  e found, store a
25f60 20 4e 55 4c 4c 20 69 6e 20 72 65 67 69 73 74 65   NULL in registe
25f70 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  r P1..**.** The 
25f80 72 65 67 69 73 74 65 72 20 50 33 20 63 6f 6e 74  register P3 cont
25f90 61 69 6e 73 20 74 68 65 20 6d 61 78 69 6d 75 6d  ains the maximum
25fa0 20 6e 75 6d 62 65 72 20 6f 66 20 61 6c 6c 6f 77   number of allow
25fb0 65 64 20 65 72 72 6f 72 73 2e 0a 2a 2a 20 41 74  ed errors..** At
25fc0 20 6d 6f 73 74 20 72 65 67 28 50 33 29 20 65 72   most reg(P3) er
25fd0 72 6f 72 73 20 77 69 6c 6c 20 62 65 20 72 65 70  rors will be rep
25fe0 6f 72 74 65 64 2e 0a 2a 2a 20 49 6e 20 6f 74 68  orted..** In oth
25ff0 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 61 6e  er words, the an
26000 61 6c 79 73 69 73 20 73 74 6f 70 73 20 61 73 20  alysis stops as 
26010 73 6f 6f 6e 20 61 73 20 72 65 67 28 50 31 29 20  soon as reg(P1) 
26020 65 72 72 6f 72 73 20 61 72 65 20 0a 2a 2a 20 73  errors are .** s
26030 65 65 6e 2e 20 20 52 65 67 28 50 31 29 20 69 73  een.  Reg(P1) is
26040 20 75 70 64 61 74 65 64 20 77 69 74 68 20 74 68   updated with th
26050 65 20 6e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f  e number of erro
26060 72 73 20 72 65 6d 61 69 6e 69 6e 67 2e 0a 2a 2a  rs remaining..**
26070 0a 2a 2a 20 54 68 65 20 72 6f 6f 74 20 70 61 67  .** The root pag
26080 65 20 6e 75 6d 62 65 72 73 20 6f 66 20 61 6c 6c  e numbers of all
26090 20 74 61 62 6c 65 73 20 69 6e 20 74 68 65 20 64   tables in the d
260a0 61 74 61 62 61 73 65 20 61 72 65 20 69 6e 74 65  atabase are inte
260b0 67 65 72 0a 2a 2a 20 73 74 6f 72 65 64 20 69 6e  ger.** stored in
260c0 20 72 65 67 28 50 31 29 2c 20 72 65 67 28 50 31   reg(P1), reg(P1
260d0 2b 31 29 2c 20 72 65 67 28 50 31 2b 32 29 2c 20  +1), reg(P1+2), 
260e0 2e 2e 2e 2e 20 20 54 68 65 72 65 20 61 72 65 20  ....  There are 
260f0 50 32 20 74 61 62 6c 65 73 0a 2a 2a 20 74 6f 74  P2 tables.** tot
26100 61 6c 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20  al..**.** If P5 
26110 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65  is not zero, the
26120 20 63 68 65 63 6b 20 69 73 20 64 6f 6e 65 20 6f   check is done o
26130 6e 20 74 68 65 20 61 75 78 69 6c 69 61 72 79 20  n the auxiliary 
26140 64 61 74 61 62 61 73 65 0a 2a 2a 20 66 69 6c 65  database.** file
26150 2c 20 6e 6f 74 20 74 68 65 20 6d 61 69 6e 20 64  , not the main d
26160 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a  atabase file..**
26170 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
26180 69 73 20 75 73 65 64 20 74 6f 20 69 6d 70 6c 65  is used to imple
26190 6d 65 6e 74 20 74 68 65 20 69 6e 74 65 67 72 69  ment the integri
261a0 74 79 5f 63 68 65 63 6b 20 70 72 61 67 6d 61 2e  ty_check pragma.
261b0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74 65  .*/.case OP_Inte
261c0 67 72 69 74 79 43 6b 3a 20 7b 0a 20 20 69 6e 74  grityCk: {.  int
261d0 20 6e 52 6f 6f 74 3b 20 20 20 20 20 20 2f 2a 20   nRoot;      /* 
261e0 4e 75 6d 62 65 72 20 6f 66 20 74 61 62 6c 65 73  Number of tables
261f0 20 74 6f 20 63 68 65 63 6b 2e 20 20 28 4e 75 6d   to check.  (Num
26200 62 65 72 20 6f 66 20 72 6f 6f 74 20 70 61 67 65  ber of root page
26210 73 2e 29 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 52  s.) */.  int *aR
26220 6f 6f 74 3b 20 20 20 20 20 2f 2a 20 41 72 72 61  oot;     /* Arra
26230 79 20 6f 66 20 72 6f 6f 74 70 61 67 65 20 6e 75  y of rootpage nu
26240 6d 62 65 72 73 20 66 6f 72 20 74 61 62 6c 65 73  mbers for tables
26250 20 74 6f 20 62 65 20 63 68 65 63 6b 65 64 20 2a   to be checked *
26260 2f 0a 20 20 69 6e 74 20 6a 3b 20 20 20 20 20 20  /.  int j;      
26270 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e      /* Loop coun
26280 74 65 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72  ter */.  int nEr
26290 72 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  r;       /* Numb
262a0 65 72 20 6f 66 20 65 72 72 6f 72 73 20 72 65 70  er of errors rep
262b0 6f 72 74 65 64 20 2a 2f 0a 20 20 63 68 61 72 20  orted */.  char 
262c0 2a 7a 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 65  *z;        /* Te
262d0 78 74 20 6f 66 20 74 68 65 20 65 72 72 6f 72 20  xt of the error 
262e0 72 65 70 6f 72 74 20 2a 2f 0a 20 20 4d 65 6d 20  report */.  Mem 
262f0 2a 70 6e 45 72 72 3b 20 20 20 20 20 2f 2a 20 52  *pnErr;     /* R
26300 65 67 69 73 74 65 72 20 6b 65 65 70 69 6e 67 20  egister keeping 
26310 74 72 61 63 6b 20 6f 66 20 65 72 72 6f 72 73 20  track of errors 
26320 72 65 6d 61 69 6e 69 6e 67 20 2a 2f 0a 20 20 0a  remaining */.  .
26330 20 20 6e 52 6f 6f 74 20 3d 20 70 4f 70 2d 3e 70    nRoot = pOp->p
26340 32 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 52 6f  2;.  assert( nRo
26350 6f 74 3e 30 20 29 3b 0a 20 20 61 52 6f 6f 74 20  ot>0 );.  aRoot 
26360 3d 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f  = sqlite3DbMallo
26370 63 52 61 77 28 64 62 2c 20 73 69 7a 65 6f 66 28  cRaw(db, sizeof(
26380 69 6e 74 29 2a 28 6e 52 6f 6f 74 2b 31 29 20 29  int)*(nRoot+1) )
26390 3b 0a 20 20 69 66 28 20 61 52 6f 6f 74 3d 3d 30  ;.  if( aRoot==0
263a0 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
263b0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
263c0 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d  3>0 && pOp->p3<=
263d0 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 6e 45  p->nMem );.  pnE
263e0 72 72 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  rr = &aMem[pOp->
263f0 70 33 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 28  p3];.  assert( (
26400 70 6e 45 72 72 2d 3e 66 6c 61 67 73 20 26 20 4d  pnErr->flags & M
26410 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 0a 20 20  EM_Int)!=0 );.  
26420 61 73 73 65 72 74 28 20 28 70 6e 45 72 72 2d 3e  assert( (pnErr->
26430 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53 74 72  flags & (MEM_Str
26440 7c 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 29  |MEM_Blob))==0 )
26450 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ;.  pIn1 = &aMem
26460 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 66 6f 72  [pOp->p1];.  for
26470 28 6a 3d 30 3b 20 6a 3c 6e 52 6f 6f 74 3b 20 6a  (j=0; j<nRoot; j
26480 2b 2b 29 7b 0a 20 20 20 20 61 52 6f 6f 74 5b 6a  ++){.    aRoot[j
26490 5d 20 3d 20 28 69 6e 74 29 73 71 6c 69 74 65 33  ] = (int)sqlite3
264a0 56 64 62 65 49 6e 74 56 61 6c 75 65 28 26 70 49  VdbeIntValue(&pI
264b0 6e 31 5b 6a 5d 29 3b 0a 20 20 7d 0a 20 20 61 52  n1[j]);.  }.  aR
264c0 6f 6f 74 5b 6a 5d 20 3d 20 30 3b 0a 20 20 61 73  oot[j] = 0;.  as
264d0 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3c 64 62  sert( pOp->p5<db
264e0 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72  ->nDb );.  asser
264f0 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b  t( (p->btreeMask
26500 20 26 20 28 28 28 79 44 62 4d 61 73 6b 29 31 29   & (((yDbMask)1)
26510 3c 3c 70 4f 70 2d 3e 70 35 29 29 21 3d 30 20 29  <<pOp->p5))!=0 )
26520 3b 0a 20 20 7a 20 3d 20 73 71 6c 69 74 65 33 42  ;.  z = sqlite3B
26530 74 72 65 65 49 6e 74 65 67 72 69 74 79 43 68 65  treeIntegrityChe
26540 63 6b 28 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e  ck(db->aDb[pOp->
26550 70 35 5d 2e 70 42 74 2c 20 61 52 6f 6f 74 2c 20  p5].pBt, aRoot, 
26560 6e 52 6f 6f 74 2c 0a 20 20 20 20 20 20 20 20 20  nRoot,.         
26570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26580 20 20 20 20 20 20 20 20 28 69 6e 74 29 70 6e 45          (int)pnE
26590 72 72 2d 3e 75 2e 69 2c 20 26 6e 45 72 72 29 3b  rr->u.i, &nErr);
265a0 0a 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65  .  sqlite3DbFree
265b0 28 64 62 2c 20 61 52 6f 6f 74 29 3b 0a 20 20 70  (db, aRoot);.  p
265c0 6e 45 72 72 2d 3e 75 2e 69 20 2d 3d 20 6e 45 72  nErr->u.i -= nEr
265d0 72 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  r;.  sqlite3Vdbe
265e0 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 49 6e 31 29  MemSetNull(pIn1)
265f0 3b 0a 20 20 69 66 28 20 6e 45 72 72 3d 3d 30 20  ;.  if( nErr==0 
26600 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 7a  ){.    assert( z
26610 3d 3d 30 20 29 3b 0a 20 20 7d 65 6c 73 65 20 69  ==0 );.  }else i
26620 66 28 20 7a 3d 3d 30 20 29 7b 0a 20 20 20 20 67  f( z==0 ){.    g
26630 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 65  oto no_mem;.  }e
26640 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  lse{.    sqlite3
26650 56 64 62 65 4d 65 6d 53 65 74 53 74 72 28 70 49  VdbeMemSetStr(pI
26660 6e 31 2c 20 7a 2c 20 2d 31 2c 20 53 51 4c 49 54  n1, z, -1, SQLIT
26670 45 5f 55 54 46 38 2c 20 73 71 6c 69 74 65 33 5f  E_UTF8, sqlite3_
26680 66 72 65 65 29 3b 0a 20 20 7d 0a 20 20 55 50 44  free);.  }.  UPD
26690 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45  ATE_MAX_BLOBSIZE
266a0 28 70 49 6e 31 29 3b 0a 20 20 73 71 6c 69 74 65  (pIn1);.  sqlite
266b0 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64  3VdbeChangeEncod
266c0 69 6e 67 28 70 49 6e 31 2c 20 65 6e 63 6f 64 69  ing(pIn1, encodi
266d0 6e 67 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ng);.  break;.}.
266e0 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
266f0 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54 59 5f  _OMIT_INTEGRITY_
26700 43 48 45 43 4b 20 2a 2f 0a 0a 2f 2a 20 4f 70 63  CHECK */../* Opc
26710 6f 64 65 3a 20 52 6f 77 53 65 74 41 64 64 20 50  ode: RowSetAdd P
26720 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
26730 20 49 6e 73 65 72 74 20 74 68 65 20 69 6e 74 65   Insert the inte
26740 67 65 72 20 76 61 6c 75 65 20 68 65 6c 64 20 62  ger value held b
26750 79 20 72 65 67 69 73 74 65 72 20 50 32 20 69 6e  y register P2 in
26760 74 6f 20 61 20 62 6f 6f 6c 65 61 6e 20 69 6e 64  to a boolean ind
26770 65 78 0a 2a 2a 20 68 65 6c 64 20 69 6e 20 72 65  ex.** held in re
26780 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 0a 2a 2a  gister P1..**.**
26790 20 41 6e 20 61 73 73 65 72 74 69 6f 6e 20 66 61   An assertion fa
267a0 69 6c 73 20 69 66 20 50 32 20 69 73 20 6e 6f 74  ils if P2 is not
267b0 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2f 0a   an integer..*/.
267c0 63 61 73 65 20 4f 50 5f 52 6f 77 53 65 74 41 64  case OP_RowSetAd
267d0 64 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20 69 6e  d: {       /* in
267e0 31 2c 20 69 6e 32 20 2a 2f 0a 20 20 70 49 6e 31  1, in2 */.  pIn1
267f0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
26800 5d 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65  ];.  pIn2 = &aMe
26810 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73  m[pOp->p2];.  as
26820 73 65 72 74 28 20 28 70 49 6e 32 2d 3e 66 6c 61  sert( (pIn2->fla
26830 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30  gs & MEM_Int)!=0
26840 20 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d   );.  if( (pIn1-
26850 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77  >flags & MEM_Row
26860 53 65 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73  Set)==0 ){.    s
26870 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
26880 52 6f 77 53 65 74 28 70 49 6e 31 29 3b 0a 20 20  RowSet(pIn1);.  
26890 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
268a0 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29  gs & MEM_RowSet)
268b0 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  ==0 ) goto no_me
268c0 6d 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33  m;.  }.  sqlite3
268d0 52 6f 77 53 65 74 49 6e 73 65 72 74 28 70 49 6e  RowSetInsert(pIn
268e0 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20 70 49  1->u.pRowSet, pI
268f0 6e 32 2d 3e 75 2e 69 29 3b 0a 20 20 62 72 65 61  n2->u.i);.  brea
26900 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
26910 20 52 6f 77 53 65 74 52 65 61 64 20 50 31 20 50   RowSetRead P1 P
26920 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 45  2 P3 * *.**.** E
26930 78 74 72 61 63 74 20 74 68 65 20 73 6d 61 6c 6c  xtract the small
26940 65 73 74 20 76 61 6c 75 65 20 66 72 6f 6d 20 62  est value from b
26950 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 20 50 31 20  oolean index P1 
26960 61 6e 64 20 70 75 74 20 74 68 61 74 20 76 61 6c  and put that val
26970 75 65 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73  ue into.** regis
26980 74 65 72 20 50 33 2e 20 20 4f 72 2c 20 69 66 20  ter P3.  Or, if 
26990 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 20 50 31  boolean index P1
269a0 20 69 73 20 69 6e 69 74 69 61 6c 6c 79 20 65 6d   is initially em
269b0 70 74 79 2c 20 6c 65 61 76 65 20 50 33 0a 2a 2a  pty, leave P3.**
269c0 20 75 6e 63 68 61 6e 67 65 64 20 61 6e 64 20 6a   unchanged and j
269d0 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69  ump to instructi
269e0 6f 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f  on P2..*/.case O
269f0 50 5f 52 6f 77 53 65 74 52 65 61 64 3a 20 7b 20  P_RowSetRead: { 
26a00 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
26a10 6e 31 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69 36  n1, out3 */.  i6
26a20 34 20 76 61 6c 3b 0a 20 20 43 48 45 43 4b 5f 46  4 val;.  CHECK_F
26a30 4f 52 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20  OR_INTERRUPT;.  
26a40 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
26a50 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 28 70 49  ->p1];.  if( (pI
26a60 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
26a70 52 6f 77 53 65 74 29 3d 3d 30 20 0a 20 20 20 7c  RowSet)==0 .   |
26a80 7c 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 4e  | sqlite3RowSetN
26a90 65 78 74 28 70 49 6e 31 2d 3e 75 2e 70 52 6f 77  ext(pIn1->u.pRow
26aa0 53 65 74 2c 20 26 76 61 6c 29 3d 3d 30 0a 20 20  Set, &val)==0.  
26ab0 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20 62 6f  ){.    /* The bo
26ac0 6f 6c 65 61 6e 20 69 6e 64 65 78 20 69 73 20 65  olean index is e
26ad0 6d 70 74 79 20 2a 2f 0a 20 20 20 20 73 71 6c 69  mpty */.    sqli
26ae0 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c  te3VdbeMemSetNul
26af0 6c 28 70 49 6e 31 29 3b 0a 20 20 20 20 70 63 20  l(pIn1);.    pc 
26b00 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
26b10 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 41   }else{.    /* A
26b20 20 76 61 6c 75 65 20 77 61 73 20 70 75 6c 6c 65   value was pulle
26b30 64 20 66 72 6f 6d 20 74 68 65 20 69 6e 64 65 78  d from the index
26b40 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 56   */.    sqlite3V
26b50 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 26  dbeMemSetInt64(&
26b60 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 2c 20 76  aMem[pOp->p3], v
26b70 61 6c 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  al);.  }.  break
26b80 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
26b90 52 6f 77 53 65 74 54 65 73 74 20 50 31 20 50 32  RowSetTest P1 P2
26ba0 20 50 33 20 50 34 0a 2a 2a 0a 2a 2a 20 52 65 67   P3 P4.**.** Reg
26bb0 69 73 74 65 72 20 50 33 20 69 73 20 61 73 73 75  ister P3 is assu
26bc0 6d 65 64 20 74 6f 20 68 6f 6c 64 20 61 20 36 34  med to hold a 64
26bd0 2d 62 69 74 20 69 6e 74 65 67 65 72 20 76 61 6c  -bit integer val
26be0 75 65 2e 20 49 66 20 72 65 67 69 73 74 65 72 20  ue. If register 
26bf0 50 31 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 61  P1.** contains a
26c00 20 52 6f 77 53 65 74 20 6f 62 6a 65 63 74 20 61   RowSet object a
26c10 6e 64 20 74 68 61 74 20 52 6f 77 53 65 74 20 6f  nd that RowSet o
26c20 62 6a 65 63 74 20 63 6f 6e 74 61 69 6e 73 0a 2a  bject contains.*
26c30 2a 20 74 68 65 20 76 61 6c 75 65 20 68 65 6c 64  * the value held
26c40 20 69 6e 20 50 33 2c 20 6a 75 6d 70 20 74 6f 20   in P3, jump to 
26c50 72 65 67 69 73 74 65 72 20 50 32 2e 20 4f 74 68  register P2. Oth
26c60 65 72 77 69 73 65 2c 20 69 6e 73 65 72 74 20 74  erwise, insert t
26c70 68 65 0a 2a 2a 20 69 6e 74 65 67 65 72 20 69 6e  he.** integer in
26c80 20 50 33 20 69 6e 74 6f 20 74 68 65 20 52 6f 77   P3 into the Row
26c90 53 65 74 20 61 6e 64 20 63 6f 6e 74 69 6e 75 65  Set and continue
26ca0 20 6f 6e 20 74 6f 20 74 68 65 0a 2a 2a 20 6e 65   on to the.** ne
26cb0 78 74 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a  xt opcode..**.**
26cc0 20 54 68 65 20 52 6f 77 53 65 74 20 6f 62 6a 65   The RowSet obje
26cd0 63 74 20 69 73 20 6f 70 74 69 6d 69 7a 65 64 20  ct is optimized 
26ce0 66 6f 72 20 74 68 65 20 63 61 73 65 20 77 68 65  for the case whe
26cf0 72 65 20 73 75 63 63 65 73 73 69 76 65 20 73 65  re successive se
26d00 74 73 0a 2a 2a 20 6f 66 20 69 6e 74 65 67 65 72  ts.** of integer
26d10 73 2c 20 77 68 65 72 65 20 65 61 63 68 20 73 65  s, where each se
26d20 74 20 63 6f 6e 74 61 69 6e 73 20 6e 6f 20 64 75  t contains no du
26d30 70 6c 69 63 61 74 65 73 2e 20 45 61 63 68 20 73  plicates. Each s
26d40 65 74 0a 2a 2a 20 6f 66 20 76 61 6c 75 65 73 20  et.** of values 
26d50 69 73 20 69 64 65 6e 74 69 66 69 65 64 20 62 79  is identified by
26d60 20 61 20 75 6e 69 71 75 65 20 50 34 20 76 61 6c   a unique P4 val
26d70 75 65 2e 20 54 68 65 20 66 69 72 73 74 20 73 65  ue. The first se
26d80 74 0a 2a 2a 20 6d 75 73 74 20 68 61 76 65 20 50  t.** must have P
26d90 34 3d 3d 30 2c 20 74 68 65 20 66 69 6e 61 6c 20  4==0, the final 
26da0 73 65 74 20 50 34 3d 2d 31 2e 20 20 50 34 20 6d  set P4=-1.  P4 m
26db0 75 73 74 20 62 65 20 65 69 74 68 65 72 20 2d 31  ust be either -1
26dc0 20 6f 72 0a 2a 2a 20 6e 6f 6e 2d 6e 65 67 61 74   or.** non-negat
26dd0 69 76 65 2e 20 20 46 6f 72 20 6e 6f 6e 2d 6e 65  ive.  For non-ne
26de0 67 61 74 69 76 65 20 76 61 6c 75 65 73 20 6f 66  gative values of
26df0 20 50 34 20 6f 6e 6c 79 20 74 68 65 20 6c 6f 77   P4 only the low
26e00 65 72 20 34 0a 2a 2a 20 62 69 74 73 20 61 72 65  er 4.** bits are
26e10 20 73 69 67 6e 69 66 69 63 61 6e 74 2e 0a 2a 2a   significant..**
26e20 0a 2a 2a 20 54 68 69 73 20 61 6c 6c 6f 77 73 20  .** This allows 
26e30 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 3a 20 28  optimizations: (
26e40 61 29 20 77 68 65 6e 20 50 34 3d 3d 30 20 74 68  a) when P4==0 th
26e50 65 72 65 20 69 73 20 6e 6f 20 6e 65 65 64 20 74  ere is no need t
26e60 6f 20 74 65 73 74 0a 2a 2a 20 74 68 65 20 72 6f  o test.** the ro
26e70 77 73 65 74 20 6f 62 6a 65 63 74 20 66 6f 72 20  wset object for 
26e80 50 33 2c 20 61 73 20 69 74 20 69 73 20 67 75 61  P3, as it is gua
26e90 72 61 6e 74 65 65 64 20 6e 6f 74 20 74 6f 20 63  ranteed not to c
26ea0 6f 6e 74 61 69 6e 20 69 74 2c 0a 2a 2a 20 28 62  ontain it,.** (b
26eb0 29 20 77 68 65 6e 20 50 34 3d 3d 2d 31 20 74 68  ) when P4==-1 th
26ec0 65 72 65 20 69 73 20 6e 6f 20 6e 65 65 64 20 74  ere is no need t
26ed0 6f 20 69 6e 73 65 72 74 20 74 68 65 20 76 61 6c  o insert the val
26ee0 75 65 2c 20 61 73 20 69 74 20 77 69 6c 6c 0a 2a  ue, as it will.*
26ef0 2a 20 6e 65 76 65 72 20 62 65 20 74 65 73 74 65  * never be teste
26f00 64 20 66 6f 72 2c 20 61 6e 64 20 28 63 29 20 77  d for, and (c) w
26f10 68 65 6e 20 61 20 76 61 6c 75 65 20 74 68 61 74  hen a value that
26f20 20 69 73 20 70 61 72 74 20 6f 66 20 73 65 74 20   is part of set 
26f30 58 20 69 73 0a 2a 2a 20 69 6e 73 65 72 74 65 64  X is.** inserted
26f40 2c 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6e 65  , there is no ne
26f50 65 64 20 74 6f 20 73 65 61 72 63 68 20 74 6f 20  ed to search to 
26f60 73 65 65 20 69 66 20 74 68 65 20 73 61 6d 65 20  see if the same 
26f70 76 61 6c 75 65 20 77 61 73 0a 2a 2a 20 70 72 65  value was.** pre
26f80 76 69 6f 75 73 6c 79 20 69 6e 73 65 72 74 65 64  viously inserted
26f90 20 61 73 20 70 61 72 74 20 6f 66 20 73 65 74 20   as part of set 
26fa0 58 20 28 6f 6e 6c 79 20 69 66 20 69 74 20 77 61  X (only if it wa
26fb0 73 20 70 72 65 76 69 6f 75 73 6c 79 0a 2a 2a 20  s previously.** 
26fc0 69 6e 73 65 72 74 65 64 20 61 73 20 70 61 72 74  inserted as part
26fd0 20 6f 66 20 73 6f 6d 65 20 6f 74 68 65 72 20 73   of some other s
26fe0 65 74 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  et)..*/.case OP_
26ff0 52 6f 77 53 65 74 54 65 73 74 3a 20 7b 20 20 20  RowSetTest: {   
27000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27010 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 2c 20    /* jump, in1, 
27020 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 69 53 65  in3 */.  int iSe
27030 74 3b 0a 20 20 69 6e 74 20 65 78 69 73 74 73 3b  t;.  int exists;
27040 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ..  pIn1 = &aMem
27050 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e  [pOp->p1];.  pIn
27060 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  3 = &aMem[pOp->p
27070 33 5d 3b 0a 20 20 69 53 65 74 20 3d 20 70 4f 70  3];.  iSet = pOp
27080 2d 3e 70 34 2e 69 3b 0a 20 20 61 73 73 65 72 74  ->p4.i;.  assert
27090 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 26 4d 45  ( pIn3->flags&ME
270a0 4d 5f 49 6e 74 20 29 3b 0a 0a 20 20 2f 2a 20 49  M_Int );..  /* I
270b0 66 20 74 68 65 72 65 20 69 73 20 61 6e 79 74 68  f there is anyth
270c0 69 6e 67 20 6f 74 68 65 72 20 74 68 61 6e 20 61  ing other than a
270d0 20 72 6f 77 73 65 74 20 6f 62 6a 65 63 74 20 69   rowset object i
270e0 6e 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 50 31  n memory cell P1
270f0 2c 0a 20 20 2a 2a 20 64 65 6c 65 74 65 20 69 74  ,.  ** delete it
27100 20 6e 6f 77 20 61 6e 64 20 69 6e 69 74 69 61 6c   now and initial
27110 69 7a 65 20 50 31 20 77 69 74 68 20 61 6e 20 65  ize P1 with an e
27120 6d 70 74 79 20 72 6f 77 73 65 74 0a 20 20 2a 2f  mpty rowset.  */
27130 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c  .  if( (pIn1->fl
27140 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74  ags & MEM_RowSet
27150 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69  )==0 ){.    sqli
27160 74 65 33 56 64 62 65 4d 65 6d 53 65 74 52 6f 77  te3VdbeMemSetRow
27170 53 65 74 28 70 49 6e 31 29 3b 0a 20 20 20 20 69  Set(pIn1);.    i
27180 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
27190 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30  & MEM_RowSet)==0
271a0 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
271b0 20 20 7d 0a 0a 20 20 61 73 73 65 72 74 28 20 70    }..  assert( p
271c0 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49  Op->p4type==P4_I
271d0 4e 54 33 32 20 29 3b 0a 20 20 61 73 73 65 72 74  NT32 );.  assert
271e0 28 20 69 53 65 74 3d 3d 2d 31 20 7c 7c 20 69 53  ( iSet==-1 || iS
271f0 65 74 3e 3d 30 20 29 3b 0a 20 20 69 66 28 20 69  et>=0 );.  if( i
27200 53 65 74 20 29 7b 0a 20 20 20 20 65 78 69 73 74  Set ){.    exist
27210 73 20 3d 20 73 71 6c 69 74 65 33 52 6f 77 53 65  s = sqlite3RowSe
27220 74 54 65 73 74 28 70 49 6e 31 2d 3e 75 2e 70 52  tTest(pIn1->u.pR
27230 6f 77 53 65 74 2c 20 0a 20 20 20 20 20 20 20 20  owSet, .        
27240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27250 20 20 20 20 20 20 20 28 75 38 29 28 69 53 65 74         (u8)(iSet
27260 3e 3d 30 20 3f 20 69 53 65 74 20 26 20 30 78 66  >=0 ? iSet & 0xf
27270 20 3a 20 30 78 66 66 29 2c 0a 20 20 20 20 20 20   : 0xff),.      
27280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27290 20 20 20 20 20 20 20 20 20 70 49 6e 33 2d 3e 75           pIn3->u
272a0 2e 69 29 3b 0a 20 20 20 20 69 66 28 20 65 78 69  .i);.    if( exi
272b0 73 74 73 20 29 7b 0a 20 20 20 20 20 20 70 63 20  sts ){.      pc 
272c0 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
272d0 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
272e0 7d 0a 20 20 7d 0a 20 20 69 66 28 20 69 53 65 74  }.  }.  if( iSet
272f0 3e 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  >=0 ){.    sqlit
27300 65 33 52 6f 77 53 65 74 49 6e 73 65 72 74 28 70  e3RowSetInsert(p
27310 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20  In1->u.pRowSet, 
27320 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20 20 7d 0a  pIn3->u.i);.  }.
27330 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 23 69 66    break;.}...#if
27340 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
27350 5f 54 52 49 47 47 45 52 0a 0a 2f 2a 20 4f 70 63  _TRIGGER../* Opc
27360 6f 64 65 3a 20 50 72 6f 67 72 61 6d 20 50 31 20  ode: Program P1 
27370 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  P2 P3 P4 *.**.**
27380 20 45 78 65 63 75 74 65 20 74 68 65 20 74 72 69   Execute the tri
27390 67 67 65 72 20 70 72 6f 67 72 61 6d 20 70 61 73  gger program pas
273a0 73 65 64 20 61 73 20 50 34 20 28 74 79 70 65 20  sed as P4 (type 
273b0 50 34 5f 53 55 42 50 52 4f 47 52 41 4d 29 2e 20  P4_SUBPROGRAM). 
273c0 0a 2a 2a 0a 2a 2a 20 50 31 20 63 6f 6e 74 61 69  .**.** P1 contai
273d0 6e 73 20 74 68 65 20 61 64 64 72 65 73 73 20 6f  ns the address o
273e0 66 20 74 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c  f the memory cel
273f0 6c 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20  l that contains 
27400 74 68 65 20 66 69 72 73 74 20 6d 65 6d 6f 72 79  the first memory
27410 20 0a 2a 2a 20 63 65 6c 6c 20 69 6e 20 61 6e 20   .** cell in an 
27420 61 72 72 61 79 20 6f 66 20 76 61 6c 75 65 73 20  array of values 
27430 75 73 65 64 20 61 73 20 61 72 67 75 6d 65 6e 74  used as argument
27440 73 20 74 6f 20 74 68 65 20 73 75 62 2d 70 72 6f  s to the sub-pro
27450 67 72 61 6d 2e 20 50 32 20 0a 2a 2a 20 63 6f 6e  gram. P2 .** con
27460 74 61 69 6e 73 20 74 68 65 20 61 64 64 72 65 73  tains the addres
27470 73 20 74 6f 20 6a 75 6d 70 20 74 6f 20 69 66 20  s to jump to if 
27480 74 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 20  the sub-program 
27490 74 68 72 6f 77 73 20 61 6e 20 49 47 4e 4f 52 45  throws an IGNORE
274a0 20 0a 2a 2a 20 65 78 63 65 70 74 69 6f 6e 20 75   .** exception u
274b0 73 69 6e 67 20 74 68 65 20 52 41 49 53 45 28 29  sing the RAISE()
274c0 20 66 75 6e 63 74 69 6f 6e 2e 20 52 65 67 69 73   function. Regis
274d0 74 65 72 20 50 33 20 63 6f 6e 74 61 69 6e 73 20  ter P3 contains 
274e0 74 68 65 20 61 64 64 72 65 73 73 20 0a 2a 2a 20  the address .** 
274f0 6f 66 20 61 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  of a memory cell
27500 20 69 6e 20 74 68 69 73 20 28 74 68 65 20 70 61   in this (the pa
27510 72 65 6e 74 29 20 56 4d 20 74 68 61 74 20 69 73  rent) VM that is
27520 20 75 73 65 64 20 74 6f 20 61 6c 6c 6f 63 61 74   used to allocat
27530 65 20 74 68 65 20 0a 2a 2a 20 6d 65 6d 6f 72 79  e the .** memory
27540 20 72 65 71 75 69 72 65 64 20 62 79 20 74 68 65   required by the
27550 20 73 75 62 2d 76 64 62 65 20 61 74 20 72 75 6e   sub-vdbe at run
27560 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69  time..**.** P4 i
27570 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  s a pointer to t
27580 68 65 20 56 4d 20 63 6f 6e 74 61 69 6e 69 6e 67  he VM containing
27590 20 74 68 65 20 74 72 69 67 67 65 72 20 70 72 6f   the trigger pro
275a0 67 72 61 6d 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  gram..*/.case OP
275b0 5f 50 72 6f 67 72 61 6d 3a 20 7b 20 20 20 20 20  _Program: {     
275c0 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
275d0 69 6e 74 20 6e 4d 65 6d 3b 20 20 20 20 20 20 20  int nMem;       
275e0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
275f0 72 20 6f 66 20 6d 65 6d 6f 72 79 20 72 65 67 69  r of memory regi
27600 73 74 65 72 73 20 66 6f 72 20 73 75 62 2d 70 72  sters for sub-pr
27610 6f 67 72 61 6d 20 2a 2f 0a 20 20 69 6e 74 20 6e  ogram */.  int n
27620 42 79 74 65 3b 20 20 20 20 20 20 20 20 20 20 20  Byte;           
27630 20 20 20 2f 2a 20 42 79 74 65 73 20 6f 66 20 72     /* Bytes of r
27640 75 6e 74 69 6d 65 20 73 70 61 63 65 20 72 65 71  untime space req
27650 75 69 72 65 64 20 66 6f 72 20 73 75 62 2d 70 72  uired for sub-pr
27660 6f 67 72 61 6d 20 2a 2f 0a 20 20 4d 65 6d 20 2a  ogram */.  Mem *
27670 70 52 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  pRt;            
27680 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 74     /* Register t
27690 6f 20 61 6c 6c 6f 63 61 74 65 20 72 75 6e 74 69  o allocate runti
276a0 6d 65 20 73 70 61 63 65 20 2a 2f 0a 20 20 4d 65  me space */.  Me
276b0 6d 20 2a 70 4d 65 6d 3b 20 20 20 20 20 20 20 20  m *pMem;        
276c0 20 20 20 20 20 20 2f 2a 20 55 73 65 64 20 74 6f        /* Used to
276d0 20 69 74 65 72 61 74 65 20 74 68 72 6f 75 67 68   iterate through
276e0 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 2a 2f   memory cells */
276f0 0a 20 20 4d 65 6d 20 2a 70 45 6e 64 3b 20 20 20  .  Mem *pEnd;   
27700 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 61             /* La
27710 73 74 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69  st memory cell i
27720 6e 20 6e 65 77 20 61 72 72 61 79 20 2a 2f 0a 20  n new array */. 
27730 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61   VdbeFrame *pFra
27740 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e 65 77 20  me;      /* New 
27750 76 64 62 65 20 66 72 61 6d 65 20 74 6f 20 65 78  vdbe frame to ex
27760 65 63 75 74 65 20 69 6e 20 2a 2f 0a 20 20 53 75  ecute in */.  Su
27770 62 50 72 6f 67 72 61 6d 20 2a 70 50 72 6f 67 72  bProgram *pProgr
27780 61 6d 3b 20 20 20 2f 2a 20 53 75 62 2d 70 72 6f  am;   /* Sub-pro
27790 67 72 61 6d 20 74 6f 20 65 78 65 63 75 74 65 20  gram to execute 
277a0 2a 2f 0a 20 20 76 6f 69 64 20 2a 74 3b 20 20 20  */.  void *t;   
277b0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
277c0 54 6f 6b 65 6e 20 69 64 65 6e 74 69 66 79 69 6e  Token identifyin
277d0 67 20 74 72 69 67 67 65 72 20 2a 2f 0a 0a 20 20  g trigger */..  
277e0 70 50 72 6f 67 72 61 6d 20 3d 20 70 4f 70 2d 3e  pProgram = pOp->
277f0 70 34 2e 70 50 72 6f 67 72 61 6d 3b 0a 20 20 70  p4.pProgram;.  p
27800 52 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  Rt = &aMem[pOp->
27810 70 33 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 6d  p3];.  assert( m
27820 65 6d 49 73 56 61 6c 69 64 28 70 52 74 29 20 29  emIsValid(pRt) )
27830 3b 0a 20 20 61 73 73 65 72 74 28 20 70 50 72 6f  ;.  assert( pPro
27840 67 72 61 6d 2d 3e 6e 4f 70 3e 30 20 29 3b 0a 20  gram->nOp>0 );. 
27850 20 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 70 35   .  /* If the p5
27860 20 66 6c 61 67 20 69 73 20 63 6c 65 61 72 2c 20   flag is clear, 
27870 74 68 65 6e 20 72 65 63 75 72 73 69 76 65 20 69  then recursive i
27880 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74 72 69  nvocation of tri
27890 67 67 65 72 73 20 69 73 20 0a 20 20 2a 2a 20 64  ggers is .  ** d
278a0 69 73 61 62 6c 65 64 20 66 6f 72 20 62 61 63 6b  isabled for back
278b0 77 61 72 64 73 20 63 6f 6d 70 61 74 69 62 69 6c  wards compatibil
278c0 69 74 79 20 28 70 35 20 69 73 20 73 65 74 20 69  ity (p5 is set i
278d0 66 20 74 68 69 73 20 73 75 62 2d 70 72 6f 67 72  f this sub-progr
278e0 61 6d 0a 20 20 2a 2a 20 69 73 20 72 65 61 6c 6c  am.  ** is reall
278f0 79 20 61 20 74 72 69 67 67 65 72 2c 20 6e 6f 74  y a trigger, not
27900 20 61 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 61   a foreign key a
27910 63 74 69 6f 6e 2c 20 61 6e 64 20 74 68 65 20 66  ction, and the f
27920 6c 61 67 20 73 65 74 0a 20 20 2a 2a 20 61 6e 64  lag set.  ** and
27930 20 63 6c 65 61 72 65 64 20 62 79 20 74 68 65 20   cleared by the 
27940 22 50 52 41 47 4d 41 20 72 65 63 75 72 73 69 76  "PRAGMA recursiv
27950 65 5f 74 72 69 67 67 65 72 73 22 20 63 6f 6d 6d  e_triggers" comm
27960 61 6e 64 20 69 73 20 63 6c 65 61 72 29 2e 0a 20  and is clear).. 
27970 20 2a 2a 20 0a 20 20 2a 2a 20 49 74 20 69 73 20   ** .  ** It is 
27980 72 65 63 75 72 73 69 76 65 20 69 6e 76 6f 63 61  recursive invoca
27990 74 69 6f 6e 20 6f 66 20 74 72 69 67 67 65 72 73  tion of triggers
279a0 2c 20 61 74 20 74 68 65 20 53 51 4c 20 6c 65 76  , at the SQL lev
279b0 65 6c 2c 20 74 68 61 74 20 69 73 20 0a 20 20 2a  el, that is .  *
279c0 2a 20 64 69 73 61 62 6c 65 64 2e 20 49 6e 20 73  * disabled. In s
279d0 6f 6d 65 20 63 61 73 65 73 20 61 20 73 69 6e 67  ome cases a sing
279e0 6c 65 20 74 72 69 67 67 65 72 20 6d 61 79 20 67  le trigger may g
279f0 65 6e 65 72 61 74 65 20 6d 6f 72 65 20 74 68 61  enerate more tha
27a00 6e 20 6f 6e 65 20 0a 20 20 2a 2a 20 53 75 62 50  n one .  ** SubP
27a10 72 6f 67 72 61 6d 20 28 69 66 20 74 68 65 20 74  rogram (if the t
27a20 72 69 67 67 65 72 20 6d 61 79 20 62 65 20 65 78  rigger may be ex
27a30 65 63 75 74 65 64 20 77 69 74 68 20 6d 6f 72 65  ecuted with more
27a40 20 74 68 61 6e 20 6f 6e 65 20 64 69 66 66 65 72   than one differ
27a50 65 6e 74 20 0a 20 20 2a 2a 20 4f 4e 20 43 4f 4e  ent .  ** ON CON
27a60 46 4c 49 43 54 20 61 6c 67 6f 72 69 74 68 6d 29  FLICT algorithm)
27a70 2e 20 53 75 62 50 72 6f 67 72 61 6d 20 73 74 72  . SubProgram str
27a80 75 63 74 75 72 65 73 20 61 73 73 6f 63 69 61 74  uctures associat
27a90 65 64 20 77 69 74 68 20 61 0a 20 20 2a 2a 20 73  ed with a.  ** s
27aa0 69 6e 67 6c 65 20 74 72 69 67 67 65 72 20 61 6c  ingle trigger al
27ab0 6c 20 68 61 76 65 20 74 68 65 20 73 61 6d 65 20  l have the same 
27ac0 76 61 6c 75 65 20 66 6f 72 20 74 68 65 20 53 75  value for the Su
27ad0 62 50 72 6f 67 72 61 6d 2e 74 6f 6b 65 6e 20 0a  bProgram.token .
27ae0 20 20 2a 2a 20 76 61 72 69 61 62 6c 65 2e 20 20    ** variable.  
27af0 2a 2f 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35  */.  if( pOp->p5
27b00 20 29 7b 0a 20 20 20 20 74 20 3d 20 70 50 72 6f   ){.    t = pPro
27b10 67 72 61 6d 2d 3e 74 6f 6b 65 6e 3b 0a 20 20 20  gram->token;.   
27b20 20 66 6f 72 28 70 46 72 61 6d 65 3d 70 2d 3e 70   for(pFrame=p->p
27b30 46 72 61 6d 65 3b 20 70 46 72 61 6d 65 20 26 26  Frame; pFrame &&
27b40 20 70 46 72 61 6d 65 2d 3e 74 6f 6b 65 6e 21 3d   pFrame->token!=
27b50 74 3b 20 70 46 72 61 6d 65 3d 70 46 72 61 6d 65  t; pFrame=pFrame
27b60 2d 3e 70 50 61 72 65 6e 74 29 3b 0a 20 20 20 20  ->pParent);.    
27b70 69 66 28 20 70 46 72 61 6d 65 20 29 20 62 72 65  if( pFrame ) bre
27b80 61 6b 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 70  ak;.  }..  if( p
27b90 2d 3e 6e 46 72 61 6d 65 3e 3d 64 62 2d 3e 61 4c  ->nFrame>=db->aL
27ba0 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49  imit[SQLITE_LIMI
27bb0 54 5f 54 52 49 47 47 45 52 5f 44 45 50 54 48 5d  T_TRIGGER_DEPTH]
27bc0 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c   ){.    rc = SQL
27bd0 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 73  ITE_ERROR;.    s
27be0 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28  qlite3SetString(
27bf0 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c  &p->zErrMsg, db,
27c00 20 22 74 6f 6f 20 6d 61 6e 79 20 6c 65 76 65 6c   "too many level
27c10 73 20 6f 66 20 74 72 69 67 67 65 72 20 72 65 63  s of trigger rec
27c20 75 72 73 69 6f 6e 22 29 3b 0a 20 20 20 20 62 72  ursion");.    br
27c30 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 52  eak;.  }..  /* R
27c40 65 67 69 73 74 65 72 20 70 52 74 20 69 73 20 75  egister pRt is u
27c50 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65  sed to store the
27c60 20 6d 65 6d 6f 72 79 20 72 65 71 75 69 72 65 64   memory required
27c70 20 74 6f 20 73 61 76 65 20 74 68 65 20 73 74 61   to save the sta
27c80 74 65 0a 20 20 2a 2a 20 6f 66 20 74 68 65 20 63  te.  ** of the c
27c90 75 72 72 65 6e 74 20 70 72 6f 67 72 61 6d 2c 20  urrent program, 
27ca0 61 6e 64 20 74 68 65 20 6d 65 6d 6f 72 79 20 72  and the memory r
27cb0 65 71 75 69 72 65 64 20 61 74 20 72 75 6e 74 69  equired at runti
27cc0 6d 65 20 74 6f 20 65 78 65 63 75 74 65 0a 20 20  me to execute.  
27cd0 2a 2a 20 74 68 65 20 74 72 69 67 67 65 72 20 70  ** the trigger p
27ce0 72 6f 67 72 61 6d 2e 20 49 66 20 74 68 69 73 20  rogram. If this 
27cf0 74 72 69 67 67 65 72 20 68 61 73 20 62 65 65 6e  trigger has been
27d00 20 66 69 72 65 64 20 62 65 66 6f 72 65 2c 20 74   fired before, t
27d10 68 65 6e 20 70 52 74 20 0a 20 20 2a 2a 20 69 73  hen pRt .  ** is
27d20 20 61 6c 72 65 61 64 79 20 61 6c 6c 6f 63 61 74   already allocat
27d30 65 64 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69  ed. Otherwise, i
27d40 74 20 6d 75 73 74 20 62 65 20 69 6e 69 74 69 61  t must be initia
27d50 6c 69 7a 65 64 2e 20 20 2a 2f 0a 20 20 69 66 28  lized.  */.  if(
27d60 20 28 70 52 74 2d 3e 66 6c 61 67 73 26 4d 45 4d   (pRt->flags&MEM
27d70 5f 46 72 61 6d 65 29 3d 3d 30 20 29 7b 0a 20 20  _Frame)==0 ){.  
27d80 20 20 2f 2a 20 53 75 62 50 72 6f 67 72 61 6d 2e    /* SubProgram.
27d90 6e 4d 65 6d 20 69 73 20 73 65 74 20 74 6f 20 74  nMem is set to t
27da0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6d 65 6d  he number of mem
27db0 6f 72 79 20 63 65 6c 6c 73 20 75 73 65 64 20 62  ory cells used b
27dc0 79 20 74 68 65 20 0a 20 20 20 20 2a 2a 20 70 72  y the .    ** pr
27dd0 6f 67 72 61 6d 20 73 74 6f 72 65 64 20 69 6e 20  ogram stored in 
27de0 53 75 62 50 72 6f 67 72 61 6d 2e 61 4f 70 2e 20  SubProgram.aOp. 
27df0 41 73 20 77 65 6c 6c 20 61 73 20 74 68 65 73 65  As well as these
27e00 2c 20 6f 6e 65 20 6d 65 6d 6f 72 79 0a 20 20 20  , one memory.   
27e10 20 2a 2a 20 63 65 6c 6c 20 69 73 20 72 65 71 75   ** cell is requ
27e20 69 72 65 64 20 66 6f 72 20 65 61 63 68 20 63 75  ired for each cu
27e30 72 73 6f 72 20 75 73 65 64 20 62 79 20 74 68 65  rsor used by the
27e40 20 70 72 6f 67 72 61 6d 2e 20 53 65 74 20 6c 6f   program. Set lo
27e50 63 61 6c 0a 20 20 20 20 2a 2a 20 76 61 72 69 61  cal.    ** varia
27e60 62 6c 65 20 6e 4d 65 6d 20 28 61 6e 64 20 6c 61  ble nMem (and la
27e70 74 65 72 2c 20 56 64 62 65 46 72 61 6d 65 2e 6e  ter, VdbeFrame.n
27e80 43 68 69 6c 64 4d 65 6d 29 20 74 6f 20 74 68 69  ChildMem) to thi
27e90 73 20 76 61 6c 75 65 2e 0a 20 20 20 20 2a 2f 0a  s value..    */.
27ea0 20 20 20 20 6e 4d 65 6d 20 3d 20 70 50 72 6f 67      nMem = pProg
27eb0 72 61 6d 2d 3e 6e 4d 65 6d 20 2b 20 70 50 72 6f  ram->nMem + pPro
27ec0 67 72 61 6d 2d 3e 6e 43 73 72 3b 0a 20 20 20 20  gram->nCsr;.    
27ed0 6e 42 79 74 65 20 3d 20 52 4f 55 4e 44 38 28 73  nByte = ROUND8(s
27ee0 69 7a 65 6f 66 28 56 64 62 65 46 72 61 6d 65 29  izeof(VdbeFrame)
27ef0 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ).              
27f00 2b 20 6e 4d 65 6d 20 2a 20 73 69 7a 65 6f 66 28  + nMem * sizeof(
27f10 4d 65 6d 29 0a 20 20 20 20 20 20 20 20 20 20 20  Mem).           
27f20 20 20 20 2b 20 70 50 72 6f 67 72 61 6d 2d 3e 6e     + pProgram->n
27f30 43 73 72 20 2a 20 73 69 7a 65 6f 66 28 56 64 62  Csr * sizeof(Vdb
27f40 65 43 75 72 73 6f 72 20 2a 29 3b 0a 20 20 20 20  eCursor *);.    
27f50 70 46 72 61 6d 65 20 3d 20 73 71 6c 69 74 65 33  pFrame = sqlite3
27f60 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 64 62 2c  DbMallocZero(db,
27f70 20 6e 42 79 74 65 29 3b 0a 20 20 20 20 69 66 28   nByte);.    if(
27f80 20 21 70 46 72 61 6d 65 20 29 7b 0a 20 20 20 20   !pFrame ){.    
27f90 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20    goto no_mem;. 
27fa0 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33     }.    sqlite3
27fb0 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 70  VdbeMemRelease(p
27fc0 52 74 29 3b 0a 20 20 20 20 70 52 74 2d 3e 66 6c  Rt);.    pRt->fl
27fd0 61 67 73 20 3d 20 4d 45 4d 5f 46 72 61 6d 65 3b  ags = MEM_Frame;
27fe0 0a 20 20 20 20 70 52 74 2d 3e 75 2e 70 46 72 61  .    pRt->u.pFra
27ff0 6d 65 20 3d 20 70 46 72 61 6d 65 3b 0a 0a 20 20  me = pFrame;..  
28000 20 20 70 46 72 61 6d 65 2d 3e 76 20 3d 20 70 3b    pFrame->v = p;
28010 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 43 68  .    pFrame->nCh
28020 69 6c 64 4d 65 6d 20 3d 20 6e 4d 65 6d 3b 0a 20  ildMem = nMem;. 
28030 20 20 20 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c     pFrame->nChil
28040 64 43 73 72 20 3d 20 70 50 72 6f 67 72 61 6d 2d  dCsr = pProgram-
28050 3e 6e 43 73 72 3b 0a 20 20 20 20 70 46 72 61 6d  >nCsr;.    pFram
28060 65 2d 3e 70 63 20 3d 20 70 63 3b 0a 20 20 20 20  e->pc = pc;.    
28070 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 20 3d 20 70  pFrame->aMem = p
28080 2d 3e 61 4d 65 6d 3b 0a 20 20 20 20 70 46 72 61  ->aMem;.    pFra
28090 6d 65 2d 3e 6e 4d 65 6d 20 3d 20 70 2d 3e 6e 4d  me->nMem = p->nM
280a0 65 6d 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e  em;.    pFrame->
280b0 61 70 43 73 72 20 3d 20 70 2d 3e 61 70 43 73 72  apCsr = p->apCsr
280c0 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 43  ;.    pFrame->nC
280d0 75 72 73 6f 72 20 3d 20 70 2d 3e 6e 43 75 72 73  ursor = p->nCurs
280e0 6f 72 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e  or;.    pFrame->
280f0 61 4f 70 20 3d 20 70 2d 3e 61 4f 70 3b 0a 20 20  aOp = p->aOp;.  
28100 20 20 70 46 72 61 6d 65 2d 3e 6e 4f 70 20 3d 20    pFrame->nOp = 
28110 70 2d 3e 6e 4f 70 3b 0a 20 20 20 20 70 46 72 61  p->nOp;.    pFra
28120 6d 65 2d 3e 74 6f 6b 65 6e 20 3d 20 70 50 72 6f  me->token = pPro
28130 67 72 61 6d 2d 3e 74 6f 6b 65 6e 3b 0a 0a 20 20  gram->token;..  
28140 20 20 70 45 6e 64 20 3d 20 26 56 64 62 65 46 72    pEnd = &VdbeFr
28150 61 6d 65 4d 65 6d 28 70 46 72 61 6d 65 29 5b 70  ameMem(pFrame)[p
28160 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d  Frame->nChildMem
28170 5d 3b 0a 20 20 20 20 66 6f 72 28 70 4d 65 6d 3d  ];.    for(pMem=
28180 56 64 62 65 46 72 61 6d 65 4d 65 6d 28 70 46 72  VdbeFrameMem(pFr
28190 61 6d 65 29 3b 20 70 4d 65 6d 21 3d 70 45 6e 64  ame); pMem!=pEnd
281a0 3b 20 70 4d 65 6d 2b 2b 29 7b 0a 20 20 20 20 20  ; pMem++){.     
281b0 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 3d 20 4d   pMem->flags = M
281c0 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20 20 20 70  EM_Null;.      p
281d0 4d 65 6d 2d 3e 64 62 20 3d 20 64 62 3b 0a 20 20  Mem->db = db;.  
281e0 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20    }.  }else{.   
281f0 20 70 46 72 61 6d 65 20 3d 20 70 52 74 2d 3e 75   pFrame = pRt->u
28200 2e 70 46 72 61 6d 65 3b 0a 20 20 20 20 61 73 73  .pFrame;.    ass
28210 65 72 74 28 20 70 50 72 6f 67 72 61 6d 2d 3e 6e  ert( pProgram->n
28220 4d 65 6d 2b 70 50 72 6f 67 72 61 6d 2d 3e 6e 43  Mem+pProgram->nC
28230 73 72 3d 3d 70 46 72 61 6d 65 2d 3e 6e 43 68 69  sr==pFrame->nChi
28240 6c 64 4d 65 6d 20 29 3b 0a 20 20 20 20 61 73 73  ldMem );.    ass
28250 65 72 74 28 20 70 50 72 6f 67 72 61 6d 2d 3e 6e  ert( pProgram->n
28260 43 73 72 3d 3d 70 46 72 61 6d 65 2d 3e 6e 43 68  Csr==pFrame->nCh
28270 69 6c 64 43 73 72 20 29 3b 0a 20 20 20 20 61 73  ildCsr );.    as
28280 73 65 72 74 28 20 70 63 3d 3d 70 46 72 61 6d 65  sert( pc==pFrame
28290 2d 3e 70 63 20 29 3b 0a 20 20 7d 0a 0a 20 20 70  ->pc );.  }..  p
282a0 2d 3e 6e 46 72 61 6d 65 2b 2b 3b 0a 20 20 70 46  ->nFrame++;.  pF
282b0 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 20 3d 20  rame->pParent = 
282c0 70 2d 3e 70 46 72 61 6d 65 3b 0a 20 20 70 46 72  p->pFrame;.  pFr
282d0 61 6d 65 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d  ame->lastRowid =
282e0 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 0a   db->lastRowid;.
282f0 20 20 70 46 72 61 6d 65 2d 3e 6e 43 68 61 6e 67    pFrame->nChang
28300 65 20 3d 20 70 2d 3e 6e 43 68 61 6e 67 65 3b 0a  e = p->nChange;.
28310 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20 3d 20 30    p->nChange = 0
28320 3b 0a 20 20 70 2d 3e 70 46 72 61 6d 65 20 3d 20  ;.  p->pFrame = 
28330 70 46 72 61 6d 65 3b 0a 20 20 70 2d 3e 61 4d 65  pFrame;.  p->aMe
28340 6d 20 3d 20 61 4d 65 6d 20 3d 20 26 56 64 62 65  m = aMem = &Vdbe
28350 46 72 61 6d 65 4d 65 6d 28 70 46 72 61 6d 65 29  FrameMem(pFrame)
28360 5b 2d 31 5d 3b 0a 20 20 70 2d 3e 6e 4d 65 6d 20  [-1];.  p->nMem 
28370 3d 20 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64  = pFrame->nChild
28380 4d 65 6d 3b 0a 20 20 70 2d 3e 6e 43 75 72 73 6f  Mem;.  p->nCurso
28390 72 20 3d 20 28 75 31 36 29 70 46 72 61 6d 65 2d  r = (u16)pFrame-
283a0 3e 6e 43 68 69 6c 64 43 73 72 3b 0a 20 20 70 2d  >nChildCsr;.  p-
283b0 3e 61 70 43 73 72 20 3d 20 28 56 64 62 65 43 75  >apCsr = (VdbeCu
283c0 72 73 6f 72 20 2a 2a 29 26 61 4d 65 6d 5b 70 2d  rsor **)&aMem[p-
283d0 3e 6e 4d 65 6d 2b 31 5d 3b 0a 20 20 70 2d 3e 61  >nMem+1];.  p->a
283e0 4f 70 20 3d 20 61 4f 70 20 3d 20 70 50 72 6f 67  Op = aOp = pProg
283f0 72 61 6d 2d 3e 61 4f 70 3b 0a 20 20 70 2d 3e 6e  ram->aOp;.  p->n
28400 4f 70 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 6e  Op = pProgram->n
28410 4f 70 3b 0a 20 20 70 63 20 3d 20 2d 31 3b 0a 0a  Op;.  pc = -1;..
28420 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
28430 70 63 6f 64 65 3a 20 50 61 72 61 6d 20 50 31 20  pcode: Param P1 
28440 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54  P2 * * *.**.** T
28450 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e  his opcode is on
28460 6c 79 20 65 76 65 72 20 70 72 65 73 65 6e 74 20  ly ever present 
28470 69 6e 20 73 75 62 2d 70 72 6f 67 72 61 6d 73 20  in sub-programs 
28480 63 61 6c 6c 65 64 20 76 69 61 20 74 68 65 20 0a  called via the .
28490 2a 2a 20 4f 50 5f 50 72 6f 67 72 61 6d 20 69 6e  ** OP_Program in
284a0 73 74 72 75 63 74 69 6f 6e 2e 20 43 6f 70 79 20  struction. Copy 
284b0 61 20 76 61 6c 75 65 20 63 75 72 72 65 6e 74 6c  a value currentl
284c0 79 20 73 74 6f 72 65 64 20 69 6e 20 61 20 6d 65  y stored in a me
284d0 6d 6f 72 79 20 0a 2a 2a 20 63 65 6c 6c 20 6f 66  mory .** cell of
284e0 20 74 68 65 20 63 61 6c 6c 69 6e 67 20 28 70 61   the calling (pa
284f0 72 65 6e 74 29 20 66 72 61 6d 65 20 74 6f 20 63  rent) frame to c
28500 65 6c 6c 20 50 32 20 69 6e 20 74 68 65 20 63 75  ell P2 in the cu
28510 72 72 65 6e 74 20 66 72 61 6d 65 73 20 0a 2a 2a  rrent frames .**
28520 20 61 64 64 72 65 73 73 20 73 70 61 63 65 2e 20   address space. 
28530 54 68 69 73 20 69 73 20 75 73 65 64 20 62 79 20  This is used by 
28540 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 73  trigger programs
28550 20 74 6f 20 61 63 63 65 73 73 20 74 68 65 20 6e   to access the n
28560 65 77 2e 2a 20 0a 2a 2a 20 61 6e 64 20 6f 6c 64  ew.* .** and old
28570 2e 2a 20 76 61 6c 75 65 73 2e 0a 2a 2a 0a 2a 2a  .* values..**.**
28580 20 54 68 65 20 61 64 64 72 65 73 73 20 6f 66 20   The address of 
28590 74 68 65 20 63 65 6c 6c 20 69 6e 20 74 68 65 20  the cell in the 
285a0 70 61 72 65 6e 74 20 66 72 61 6d 65 20 69 73 20  parent frame is 
285b0 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 61 64  determined by ad
285c0 64 69 6e 67 0a 2a 2a 20 74 68 65 20 76 61 6c 75  ding.** the valu
285d0 65 20 6f 66 20 74 68 65 20 50 31 20 61 72 67 75  e of the P1 argu
285e0 6d 65 6e 74 20 74 6f 20 74 68 65 20 76 61 6c 75  ment to the valu
285f0 65 20 6f 66 20 74 68 65 20 50 31 20 61 72 67 75  e of the P1 argu
28600 6d 65 6e 74 20 74 6f 20 74 68 65 0a 2a 2a 20 63  ment to the.** c
28610 61 6c 6c 69 6e 67 20 4f 50 5f 50 72 6f 67 72 61  alling OP_Progra
28620 6d 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  m instruction..*
28630 2f 0a 63 61 73 65 20 4f 50 5f 50 61 72 61 6d 3a  /.case OP_Param:
28640 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20   {           /* 
28650 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20  out2-prerelease 
28660 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d 65 20 2a  */.  VdbeFrame *
28670 70 46 72 61 6d 65 3b 0a 20 20 4d 65 6d 20 2a 70  pFrame;.  Mem *p
28680 49 6e 3b 0a 20 20 70 46 72 61 6d 65 20 3d 20 70  In;.  pFrame = p
28690 2d 3e 70 46 72 61 6d 65 3b 0a 20 20 70 49 6e 20  ->pFrame;.  pIn 
286a0 3d 20 26 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b  = &pFrame->aMem[
286b0 70 4f 70 2d 3e 70 31 20 2b 20 70 46 72 61 6d 65  pOp->p1 + pFrame
286c0 2d 3e 61 4f 70 5b 70 46 72 61 6d 65 2d 3e 70 63  ->aOp[pFrame->pc
286d0 5d 2e 70 31 5d 3b 20 20 20 0a 20 20 73 71 6c 69  ].p1];   .  sqli
286e0 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f  te3VdbeMemShallo
286f0 77 43 6f 70 79 28 70 4f 75 74 2c 20 70 49 6e 2c  wCopy(pOut, pIn,
28700 20 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a 20 20 62   MEM_Ephem);.  b
28710 72 65 61 6b 3b 0a 7d 0a 0a 23 65 6e 64 69 66 20  reak;.}..#endif 
28720 2f 2a 20 23 69 66 6e 64 65 66 20 53 51 4c 49 54  /* #ifndef SQLIT
28730 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 20 2a  E_OMIT_TRIGGER *
28740 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  /..#ifndef SQLIT
28750 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b  E_OMIT_FOREIGN_K
28760 45 59 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 6b  EY./* Opcode: Fk
28770 43 6f 75 6e 74 65 72 20 50 31 20 50 32 20 2a 20  Counter P1 P2 * 
28780 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 6e 63 72 65 6d  * *.**.** Increm
28790 65 6e 74 20 61 20 22 63 6f 6e 73 74 72 61 69 6e  ent a "constrain
287a0 74 20 63 6f 75 6e 74 65 72 22 20 62 79 20 50 32  t counter" by P2
287b0 20 28 50 32 20 6d 61 79 20 62 65 20 6e 65 67 61   (P2 may be nega
287c0 74 69 76 65 20 6f 72 20 70 6f 73 69 74 69 76 65  tive or positive
287d0 29 2e 0a 2a 2a 20 49 66 20 50 31 20 69 73 20 6e  )..** If P1 is n
287e0 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 20 64 61 74  on-zero, the dat
287f0 61 62 61 73 65 20 63 6f 6e 73 74 72 61 69 6e 74  abase constraint
28800 20 63 6f 75 6e 74 65 72 20 69 73 20 69 6e 63 72   counter is incr
28810 65 6d 65 6e 74 65 64 20 0a 2a 2a 20 28 64 65 66  emented .** (def
28820 65 72 72 65 64 20 66 6f 72 65 69 67 6e 20 6b 65  erred foreign ke
28830 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 29 2e 20  y constraints). 
28840 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20 50 31  Otherwise, if P1
28850 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 20 0a 2a   is zero, the .*
28860 2a 20 73 74 61 74 65 6d 65 6e 74 20 63 6f 75 6e  * statement coun
28870 74 65 72 20 69 73 20 69 6e 63 72 65 6d 65 6e 74  ter is increment
28880 65 64 20 28 69 6d 6d 65 64 69 61 74 65 20 66 6f  ed (immediate fo
28890 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72  reign key constr
288a0 61 69 6e 74 73 29 2e 0a 2a 2f 0a 63 61 73 65 20  aints)..*/.case 
288b0 4f 50 5f 46 6b 43 6f 75 6e 74 65 72 3a 20 7b 0a  OP_FkCounter: {.
288c0 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 20 29 7b    if( pOp->p1 ){
288d0 0a 20 20 20 20 64 62 2d 3e 6e 44 65 66 65 72 72  .    db->nDeferr
288e0 65 64 43 6f 6e 73 20 2b 3d 20 70 4f 70 2d 3e 70  edCons += pOp->p
288f0 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  2;.  }else{.    
28900 70 2d 3e 6e 46 6b 43 6f 6e 73 74 72 61 69 6e 74  p->nFkConstraint
28910 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 7d   += pOp->p2;.  }
28920 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
28930 4f 70 63 6f 64 65 3a 20 46 6b 49 66 5a 65 72 6f  Opcode: FkIfZero
28940 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
28950 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 74  ** This opcode t
28960 65 73 74 73 20 69 66 20 61 20 66 6f 72 65 69 67  ests if a foreig
28970 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74  n key constraint
28980 2d 63 6f 75 6e 74 65 72 20 69 73 20 63 75 72 72  -counter is curr
28990 65 6e 74 6c 79 20 7a 65 72 6f 2e 0a 2a 2a 20 49  ently zero..** I
289a0 66 20 73 6f 2c 20 6a 75 6d 70 20 74 6f 20 69 6e  f so, jump to in
289b0 73 74 72 75 63 74 69 6f 6e 20 50 32 2e 20 4f 74  struction P2. Ot
289c0 68 65 72 77 69 73 65 2c 20 66 61 6c 6c 20 74 68  herwise, fall th
289d0 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78  rough to the nex
289e0 74 20 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f  t .** instructio
289f0 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 31 20 69  n..**.** If P1 i
28a00 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e  s non-zero, then
28a10 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b   the jump is tak
28a20 65 6e 20 69 66 20 74 68 65 20 64 61 74 61 62 61  en if the databa
28a30 73 65 20 63 6f 6e 73 74 72 61 69 6e 74 2d 63 6f  se constraint-co
28a40 75 6e 74 65 72 0a 2a 2a 20 69 73 20 7a 65 72 6f  unter.** is zero
28a50 20 28 74 68 65 20 6f 6e 65 20 74 68 61 74 20 63   (the one that c
28a60 6f 75 6e 74 73 20 64 65 66 65 72 72 65 64 20 63  ounts deferred c
28a70 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74  onstraint violat
28a80 69 6f 6e 73 29 2e 20 49 66 20 50 31 20 69 73 0a  ions). If P1 is.
28a90 2a 2a 20 7a 65 72 6f 2c 20 74 68 65 20 6a 75 6d  ** zero, the jum
28aa0 70 20 69 73 20 74 61 6b 65 6e 20 69 66 20 74 68  p is taken if th
28ab0 65 20 73 74 61 74 65 6d 65 6e 74 20 63 6f 6e 73  e statement cons
28ac0 74 72 61 69 6e 74 2d 63 6f 75 6e 74 65 72 20 69  traint-counter i
28ad0 73 20 7a 65 72 6f 0a 2a 2a 20 28 69 6d 6d 65 64  s zero.** (immed
28ae0 69 61 74 65 20 66 6f 72 65 69 67 6e 20 6b 65 79  iate foreign key
28af0 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c   constraint viol
28b00 61 74 69 6f 6e 73 29 2e 0a 2a 2f 0a 63 61 73 65  ations)..*/.case
28b10 20 4f 50 5f 46 6b 49 66 5a 65 72 6f 3a 20 7b 20   OP_FkIfZero: { 
28b20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
28b30 2a 2f 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31  */.  if( pOp->p1
28b40 20 29 7b 0a 20 20 20 20 69 66 28 20 64 62 2d 3e   ){.    if( db->
28b50 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3d 3d 30  nDeferredCons==0
28b60 20 29 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d   ) pc = pOp->p2-
28b70 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  1;.  }else{.    
28b80 69 66 28 20 70 2d 3e 6e 46 6b 43 6f 6e 73 74 72  if( p->nFkConstr
28b90 61 69 6e 74 3d 3d 30 20 29 20 70 63 20 3d 20 70  aint==0 ) pc = p
28ba0 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d 0a 20 20  Op->p2-1;.  }.  
28bb0 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20  break;.}.#endif 
28bc0 2f 2a 20 23 69 66 6e 64 65 66 20 53 51 4c 49 54  /* #ifndef SQLIT
28bd0 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b  E_OMIT_FOREIGN_K
28be0 45 59 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  EY */..#ifndef S
28bf0 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49  QLITE_OMIT_AUTOI
28c00 4e 43 52 45 4d 45 4e 54 0a 2f 2a 20 4f 70 63 6f  NCREMENT./* Opco
28c10 64 65 3a 20 4d 65 6d 4d 61 78 20 50 31 20 50 32  de: MemMax P1 P2
28c20 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50 31 20   * * *.**.** P1 
28c30 69 73 20 61 20 72 65 67 69 73 74 65 72 20 69 6e  is a register in
28c40 20 74 68 65 20 72 6f 6f 74 20 66 72 61 6d 65 20   the root frame 
28c50 6f 66 20 74 68 69 73 20 56 4d 20 28 74 68 65 20  of this VM (the 
28c60 72 6f 6f 74 20 66 72 61 6d 65 20 69 73 0a 2a 2a  root frame is.**
28c70 20 64 69 66 66 65 72 65 6e 74 20 66 72 6f 6d 20   different from 
28c80 74 68 65 20 63 75 72 72 65 6e 74 20 66 72 61 6d  the current fram
28c90 65 20 69 66 20 74 68 69 73 20 69 6e 73 74 72 75  e if this instru
28ca0 63 74 69 6f 6e 20 69 73 20 62 65 69 6e 67 20 65  ction is being e
28cb0 78 65 63 75 74 65 64 0a 2a 2a 20 77 69 74 68 69  xecuted.** withi
28cc0 6e 20 61 20 73 75 62 2d 70 72 6f 67 72 61 6d 29  n a sub-program)
28cd0 2e 20 53 65 74 20 74 68 65 20 76 61 6c 75 65 20  . Set the value 
28ce0 6f 66 20 72 65 67 69 73 74 65 72 20 50 31 20 74  of register P1 t
28cf0 6f 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6f 66  o the maximum of
28d00 20 0a 2a 2a 20 69 74 73 20 63 75 72 72 65 6e 74   .** its current
28d10 20 76 61 6c 75 65 20 61 6e 64 20 74 68 65 20 76   value and the v
28d20 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
28d30 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20   P2..**.** This 
28d40 69 6e 73 74 72 75 63 74 69 6f 6e 20 74 68 72 6f  instruction thro
28d50 77 73 20 61 6e 20 65 72 72 6f 72 20 69 66 20 74  ws an error if t
28d60 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69  he memory cell i
28d70 73 20 6e 6f 74 20 69 6e 69 74 69 61 6c 6c 79 0a  s not initially.
28d80 2a 2a 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a  ** an integer..*
28d90 2f 0a 63 61 73 65 20 4f 50 5f 4d 65 6d 4d 61 78  /.case OP_MemMax
28da0 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 69 6e  : {        /* in
28db0 32 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e 31  2 */.  Mem *pIn1
28dc0 3b 0a 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70  ;.  VdbeFrame *p
28dd0 46 72 61 6d 65 3b 0a 20 20 69 66 28 20 70 2d 3e  Frame;.  if( p->
28de0 70 46 72 61 6d 65 20 29 7b 0a 20 20 20 20 66 6f  pFrame ){.    fo
28df0 72 28 70 46 72 61 6d 65 3d 70 2d 3e 70 46 72 61  r(pFrame=p->pFra
28e00 6d 65 3b 20 70 46 72 61 6d 65 2d 3e 70 50 61 72  me; pFrame->pPar
28e10 65 6e 74 3b 20 70 46 72 61 6d 65 3d 70 46 72 61  ent; pFrame=pFra
28e20 6d 65 2d 3e 70 50 61 72 65 6e 74 29 3b 0a 20 20  me->pParent);.  
28e30 20 20 70 49 6e 31 20 3d 20 26 70 46 72 61 6d 65    pIn1 = &pFrame
28e40 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b  ->aMem[pOp->p1];
28e50 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 49  .  }else{.    pI
28e60 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
28e70 70 31 5d 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72  p1];.  }.  asser
28e80 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 49  t( memIsValid(pI
28e90 6e 31 29 20 29 3b 0a 20 20 73 71 6c 69 74 65 33  n1) );.  sqlite3
28ea0 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66  VdbeMemIntegerif
28eb0 79 28 70 49 6e 31 29 3b 0a 20 20 70 49 6e 32 20  y(pIn1);.  pIn2 
28ec0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
28ed0 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
28ee0 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e  emIntegerify(pIn
28ef0 32 29 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e  2);.  if( pIn1->
28f00 75 2e 69 3c 70 49 6e 32 2d 3e 75 2e 69 29 7b 0a  u.i<pIn2->u.i){.
28f10 20 20 20 20 70 49 6e 31 2d 3e 75 2e 69 20 3d 20      pIn1->u.i = 
28f20 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20 7d 0a 20  pIn2->u.i;.  }. 
28f30 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
28f40 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
28f50 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 2a 2f  AUTOINCREMENT */
28f60 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 50  ../* Opcode: IfP
28f70 6f 73 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  os P1 P2 * * *.*
28f80 2a 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75  *.** If the valu
28f90 65 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 31  e of register P1
28fa0 20 69 73 20 31 20 6f 72 20 67 72 65 61 74 65 72   is 1 or greater
28fb0 2c 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a  , jump to P2..**
28fc0 0a 2a 2a 20 49 74 20 69 73 20 69 6c 6c 65 67 61  .** It is illega
28fd0 6c 20 74 6f 20 75 73 65 20 74 68 69 73 20 69 6e  l to use this in
28fe0 73 74 72 75 63 74 69 6f 6e 20 6f 6e 20 61 20 72  struction on a r
28ff0 65 67 69 73 74 65 72 20 74 68 61 74 20 64 6f 65  egister that doe
29000 73 0a 2a 2a 20 6e 6f 74 20 63 6f 6e 74 61 69 6e  s.** not contain
29010 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 41 6e   an integer.  An
29020 20 61 73 73 65 72 74 69 6f 6e 20 66 61 75 6c 74   assertion fault
29030 20 77 69 6c 6c 20 72 65 73 75 6c 74 20 69 66 20   will result if 
29040 79 6f 75 20 74 72 79 2e 0a 2a 2f 0a 63 61 73 65  you try..*/.case
29050 20 4f 50 5f 49 66 50 6f 73 3a 20 7b 20 20 20 20   OP_IfPos: {    
29060 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31      /* jump, in1
29070 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   */.  pIn1 = &aM
29080 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  em[pOp->p1];.  a
29090 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61  ssert( pIn1->fla
290a0 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20  gs&MEM_Int );.  
290b0 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3e 30 20  if( pIn1->u.i>0 
290c0 29 7b 0a 20 20 20 20 20 70 63 20 3d 20 70 4f 70  ){.     pc = pOp
290d0 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20  ->p2 - 1;.  }.  
290e0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
290f0 6f 64 65 3a 20 49 66 4e 65 67 20 50 31 20 50 32  ode: IfNeg P1 P2
29100 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20   * * *.**.** If 
29110 74 68 65 20 76 61 6c 75 65 20 6f 66 20 72 65 67  the value of reg
29120 69 73 74 65 72 20 50 31 20 69 73 20 6c 65 73 73  ister P1 is less
29130 20 74 68 61 6e 20 7a 65 72 6f 2c 20 6a 75 6d 70   than zero, jump
29140 20 74 6f 20 50 32 2e 20 0a 2a 2a 0a 2a 2a 20 49   to P2. .**.** I
29150 74 20 69 73 20 69 6c 6c 65 67 61 6c 20 74 6f 20  t is illegal to 
29160 75 73 65 20 74 68 69 73 20 69 6e 73 74 72 75 63  use this instruc
29170 74 69 6f 6e 20 6f 6e 20 61 20 72 65 67 69 73 74  tion on a regist
29180 65 72 20 74 68 61 74 20 64 6f 65 73 0a 2a 2a 20  er that does.** 
29190 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69  not contain an i
291a0 6e 74 65 67 65 72 2e 20 20 41 6e 20 61 73 73 65  nteger.  An asse
291b0 72 74 69 6f 6e 20 66 61 75 6c 74 20 77 69 6c 6c  rtion fault will
291c0 20 72 65 73 75 6c 74 20 69 66 20 79 6f 75 20 74   result if you t
291d0 72 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  ry..*/.case OP_I
291e0 66 4e 65 67 3a 20 7b 20 20 20 20 20 20 20 20 2f  fNeg: {        /
291f0 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20  * jump, in1 */. 
29200 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
29210 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
29220 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45  ( pIn1->flags&ME
29230 4d 5f 49 6e 74 20 29 3b 0a 20 20 69 66 28 20 70  M_Int );.  if( p
29240 49 6e 31 2d 3e 75 2e 69 3c 30 20 29 7b 0a 20 20  In1->u.i<0 ){.  
29250 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
29260 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  - 1;.  }.  break
29270 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
29280 49 66 5a 65 72 6f 20 50 31 20 50 32 20 50 33 20  IfZero P1 P2 P3 
29290 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 65  * *.**.** The re
292a0 67 69 73 74 65 72 20 50 31 20 6d 75 73 74 20 63  gister P1 must c
292b0 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65 67 65  ontain an intege
292c0 72 2e 20 20 41 64 64 20 6c 69 74 65 72 61 6c 20  r.  Add literal 
292d0 50 33 20 74 6f 20 74 68 65 0a 2a 2a 20 76 61 6c  P3 to the.** val
292e0 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
292f0 31 2e 20 20 49 66 20 74 68 65 20 72 65 73 75 6c  1.  If the resul
29300 74 20 69 73 20 65 78 61 63 74 6c 79 20 30 2c 20  t is exactly 0, 
29310 6a 75 6d 70 20 74 6f 20 50 32 2e 20 0a 2a 2a 0a  jump to P2. .**.
29320 2a 2a 20 49 74 20 69 73 20 69 6c 6c 65 67 61 6c  ** It is illegal
29330 20 74 6f 20 75 73 65 20 74 68 69 73 20 69 6e 73   to use this ins
29340 74 72 75 63 74 69 6f 6e 20 6f 6e 20 61 20 72 65  truction on a re
29350 67 69 73 74 65 72 20 74 68 61 74 20 64 6f 65 73  gister that does
29360 0a 2a 2a 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20  .** not contain 
29370 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 41 6e 20  an integer.  An 
29380 61 73 73 65 72 74 69 6f 6e 20 66 61 75 6c 74 20  assertion fault 
29390 77 69 6c 6c 20 72 65 73 75 6c 74 20 69 66 20 79  will result if y
293a0 6f 75 20 74 72 79 2e 0a 2a 2f 0a 63 61 73 65 20  ou try..*/.case 
293b0 4f 50 5f 49 66 5a 65 72 6f 3a 20 7b 20 20 20 20  OP_IfZero: {    
293c0 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31      /* jump, in1
293d0 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   */.  pIn1 = &aM
293e0 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  em[pOp->p1];.  a
293f0 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61  ssert( pIn1->fla
29400 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20  gs&MEM_Int );.  
29410 70 49 6e 31 2d 3e 75 2e 69 20 2b 3d 20 70 4f 70  pIn1->u.i += pOp
29420 2d 3e 70 33 3b 0a 20 20 69 66 28 20 70 49 6e 31  ->p3;.  if( pIn1
29430 2d 3e 75 2e 69 3d 3d 30 20 29 7b 0a 20 20 20 20  ->u.i==0 ){.    
29440 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
29450 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  1;.  }.  break;.
29460 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 67  }../* Opcode: Ag
29470 67 53 74 65 70 20 2a 20 50 32 20 50 33 20 50 34  gStep * P2 P3 P4
29480 20 50 35 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74   P5.**.** Execut
29490 65 20 74 68 65 20 73 74 65 70 20 66 75 6e 63 74  e the step funct
294a0 69 6f 6e 20 66 6f 72 20 61 6e 20 61 67 67 72 65  ion for an aggre
294b0 67 61 74 65 2e 20 20 54 68 65 0a 2a 2a 20 66 75  gate.  The.** fu
294c0 6e 63 74 69 6f 6e 20 68 61 73 20 50 35 20 61 72  nction has P5 ar
294d0 67 75 6d 65 6e 74 73 2e 20 20 20 50 34 20 69 73  guments.   P4 is
294e0 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68   a pointer to th
294f0 65 20 46 75 6e 63 44 65 66 0a 2a 2a 20 73 74 72  e FuncDef.** str
29500 75 63 74 75 72 65 20 74 68 61 74 20 73 70 65 63  ucture that spec
29510 69 66 69 65 73 20 74 68 65 20 66 75 6e 63 74 69  ifies the functi
29520 6f 6e 2e 20 20 55 73 65 20 72 65 67 69 73 74 65  on.  Use registe
29530 72 0a 2a 2a 20 50 33 20 61 73 20 74 68 65 20 61  r.** P3 as the a
29540 63 63 75 6d 75 6c 61 74 6f 72 2e 0a 2a 2a 0a 2a  ccumulator..**.*
29550 2a 20 54 68 65 20 50 35 20 61 72 67 75 6d 65 6e  * The P5 argumen
29560 74 73 20 61 72 65 20 74 61 6b 65 6e 20 66 72 6f  ts are taken fro
29570 6d 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e  m register P2 an
29580 64 20 69 74 73 0a 2a 2a 20 73 75 63 63 65 73 73  d its.** success
29590 6f 72 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ors..*/.case OP_
295a0 41 67 67 53 74 65 70 3a 20 7b 0a 20 20 69 6e 74  AggStep: {.  int
295b0 20 6e 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 4d   n;.  int i;.  M
295c0 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20 4d 65 6d 20  em *pMem;.  Mem 
295d0 2a 70 52 65 63 3b 0a 20 20 73 71 6c 69 74 65 33  *pRec;.  sqlite3
295e0 5f 63 6f 6e 74 65 78 74 20 63 74 78 3b 0a 20 20  _context ctx;.  
295f0 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a  sqlite3_value **
29600 61 70 56 61 6c 3b 0a 0a 20 20 6e 20 3d 20 70 4f  apVal;..  n = pO
29610 70 2d 3e 70 35 3b 0a 20 20 61 73 73 65 72 74 28  p->p5;.  assert(
29620 20 6e 3e 3d 30 20 29 3b 0a 20 20 70 52 65 63 20   n>=0 );.  pRec 
29630 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
29640 3b 0a 20 20 61 70 56 61 6c 20 3d 20 70 2d 3e 61  ;.  apVal = p->a
29650 70 41 72 67 3b 0a 20 20 61 73 73 65 72 74 28 20  pArg;.  assert( 
29660 61 70 56 61 6c 20 7c 7c 20 6e 3d 3d 30 20 29 3b  apVal || n==0 );
29670 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b  .  for(i=0; i<n;
29680 20 69 2b 2b 2c 20 70 52 65 63 2b 2b 29 7b 0a 20   i++, pRec++){. 
29690 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
296a0 56 61 6c 69 64 28 70 52 65 63 29 20 29 3b 0a 20  Valid(pRec) );. 
296b0 20 20 20 61 70 56 61 6c 5b 69 5d 20 3d 20 70 52     apVal[i] = pR
296c0 65 63 3b 0a 20 20 20 20 6d 65 6d 41 62 6f 75 74  ec;.    memAbout
296d0 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 52 65 63  ToChange(p, pRec
296e0 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
296f0 62 65 4d 65 6d 53 74 6f 72 65 54 79 70 65 28 70  beMemStoreType(p
29700 52 65 63 29 3b 0a 20 20 7d 0a 20 20 63 74 78 2e  Rec);.  }.  ctx.
29710 70 46 75 6e 63 20 3d 20 70 4f 70 2d 3e 70 34 2e  pFunc = pOp->p4.
29720 70 46 75 6e 63 3b 0a 20 20 61 73 73 65 72 74 28  pFunc;.  assert(
29730 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f   pOp->p3>0 && pO
29740 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29  p->p3<=p->nMem )
29750 3b 0a 20 20 63 74 78 2e 70 4d 65 6d 20 3d 20 70  ;.  ctx.pMem = p
29760 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Mem = &aMem[pOp-
29770 3e 70 33 5d 3b 0a 20 20 70 4d 65 6d 2d 3e 6e 2b  >p3];.  pMem->n+
29780 2b 3b 0a 20 20 63 74 78 2e 73 2e 66 6c 61 67 73  +;.  ctx.s.flags
29790 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 63   = MEM_Null;.  c
297a0 74 78 2e 73 2e 7a 20 3d 20 30 3b 0a 20 20 63 74  tx.s.z = 0;.  ct
297b0 78 2e 73 2e 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b  x.s.zMalloc = 0;
297c0 0a 20 20 63 74 78 2e 73 2e 78 44 65 6c 20 3d 20  .  ctx.s.xDel = 
297d0 30 3b 0a 20 20 63 74 78 2e 73 2e 64 62 20 3d 20  0;.  ctx.s.db = 
297e0 64 62 3b 0a 20 20 63 74 78 2e 69 73 45 72 72 6f  db;.  ctx.isErro
297f0 72 20 3d 20 30 3b 0a 20 20 63 74 78 2e 70 43 6f  r = 0;.  ctx.pCo
29800 6c 6c 20 3d 20 30 3b 0a 20 20 69 66 28 20 63 74  ll = 0;.  if( ct
29810 78 2e 70 46 75 6e 63 2d 3e 66 6c 61 67 73 20 26  x.pFunc->flags &
29820 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45   SQLITE_FUNC_NEE
29830 44 43 4f 4c 4c 20 29 7b 0a 20 20 20 20 61 73 73  DCOLL ){.    ass
29840 65 72 74 28 20 70 4f 70 3e 70 2d 3e 61 4f 70 20  ert( pOp>p->aOp 
29850 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
29860 4f 70 5b 2d 31 5d 2e 70 34 74 79 70 65 3d 3d 50  Op[-1].p4type==P
29870 34 5f 43 4f 4c 4c 53 45 51 20 29 3b 0a 20 20 20  4_COLLSEQ );.   
29880 20 61 73 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d   assert( pOp[-1]
29890 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43 6f 6c 6c  .opcode==OP_Coll
298a0 53 65 71 20 29 3b 0a 20 20 20 20 63 74 78 2e 70  Seq );.    ctx.p
298b0 43 6f 6c 6c 20 3d 20 70 4f 70 5b 2d 31 5d 2e 70  Coll = pOp[-1].p
298c0 34 2e 70 43 6f 6c 6c 3b 0a 20 20 7d 0a 20 20 28  4.pColl;.  }.  (
298d0 63 74 78 2e 70 46 75 6e 63 2d 3e 78 53 74 65 70  ctx.pFunc->xStep
298e0 29 28 26 63 74 78 2c 20 6e 2c 20 61 70 56 61 6c  )(&ctx, n, apVal
298f0 29 3b 20 2f 2a 20 49 4d 50 3a 20 52 2d 32 34 35  ); /* IMP: R-245
29900 30 35 2d 32 33 32 33 30 20 2a 2f 0a 20 20 73 71  05-23230 */.  sq
29910 6c 69 74 65 33 56 64 62 65 4d 75 74 65 78 52 65  lite3VdbeMutexRe
29920 73 79 6e 63 28 70 29 3b 0a 20 20 69 66 28 20 63  sync(p);.  if( c
29930 74 78 2e 69 73 45 72 72 6f 72 20 29 7b 0a 20 20  tx.isError ){.  
29940 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69    sqlite3SetStri
29950 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20  ng(&p->zErrMsg, 
29960 64 62 2c 20 22 25 73 22 2c 20 73 71 6c 69 74 65  db, "%s", sqlite
29970 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 26 63 74  3_value_text(&ct
29980 78 2e 73 29 29 3b 0a 20 20 20 20 72 63 20 3d 20  x.s));.    rc = 
29990 63 74 78 2e 69 73 45 72 72 6f 72 3b 0a 20 20 7d  ctx.isError;.  }
299a0 0a 0a 20 20 2f 2a 20 54 68 65 20 61 70 70 2d 64  ..  /* The app-d
299b0 65 66 69 6e 65 64 20 66 75 6e 63 74 69 6f 6e 20  efined function 
299c0 68 61 73 20 64 6f 6e 65 20 73 6f 6d 65 74 68 69  has done somethi
299d0 6e 67 20 74 68 61 74 20 61 73 20 63 61 75 73 65  ng that as cause
299e0 64 20 74 68 69 73 0a 20 20 2a 2a 20 73 74 61 74  d this.  ** stat
299f0 65 6d 65 6e 74 20 74 6f 20 65 78 70 69 72 65 2e  ement to expire.
29a00 20 20 28 50 65 72 68 61 70 73 20 74 68 65 20 66    (Perhaps the f
29a10 75 6e 63 74 69 6f 6e 20 63 61 6c 6c 65 64 20 73  unction called s
29a20 71 6c 69 74 65 33 5f 65 78 65 63 28 29 0a 20 20  qlite3_exec().  
29a30 2a 2a 20 77 69 74 68 20 61 20 43 52 45 41 54 45  ** with a CREATE
29a40 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74   TABLE statement
29a50 2e 29 0a 20 20 2a 2f 0a 23 69 66 20 30 0a 20 20  .).  */.#if 0.  
29a60 69 66 28 20 70 2d 3e 65 78 70 69 72 65 64 20 29  if( p->expired )
29a70 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54  {.    rc = SQLIT
29a80 45 5f 41 42 4f 52 54 3b 0a 20 20 20 20 62 72 65  E_ABORT;.    bre
29a90 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a  ak;.  }.#endif..
29aa0 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
29ab0 52 65 6c 65 61 73 65 28 26 63 74 78 2e 73 29 3b  Release(&ctx.s);
29ac0 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ..  break;.}../*
29ad0 20 4f 70 63 6f 64 65 3a 20 41 67 67 46 69 6e 61   Opcode: AggFina
29ae0 6c 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a  l P1 P2 * P4 *.*
29af0 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20 74 68 65  *.** Execute the
29b00 20 66 69 6e 61 6c 69 7a 65 72 20 66 75 6e 63 74   finalizer funct
29b10 69 6f 6e 20 66 6f 72 20 61 6e 20 61 67 67 72 65  ion for an aggre
29b20 67 61 74 65 2e 20 20 50 31 20 69 73 0a 2a 2a 20  gate.  P1 is.** 
29b30 74 68 65 20 6d 65 6d 6f 72 79 20 6c 6f 63 61 74  the memory locat
29b40 69 6f 6e 20 74 68 61 74 20 69 73 20 74 68 65 20  ion that is the 
29b50 61 63 63 75 6d 75 6c 61 74 6f 72 20 66 6f 72 20  accumulator for 
29b60 74 68 65 20 61 67 67 72 65 67 61 74 65 2e 0a 2a  the aggregate..*
29b70 2a 0a 2a 2a 20 50 32 20 69 73 20 74 68 65 20 6e  *.** P2 is the n
29b80 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e  umber of argumen
29b90 74 73 20 74 68 61 74 20 74 68 65 20 73 74 65 70  ts that the step
29ba0 20 66 75 6e 63 74 69 6f 6e 20 74 61 6b 65 73 20   function takes 
29bb0 61 6e 64 0a 2a 2a 20 50 34 20 69 73 20 61 20 70  and.** P4 is a p
29bc0 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 46 75  ointer to the Fu
29bd0 6e 63 44 65 66 20 66 6f 72 20 74 68 69 73 20 66  ncDef for this f
29be0 75 6e 63 74 69 6f 6e 2e 20 20 54 68 65 20 50 32  unction.  The P2
29bf0 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 69 73 20  .** argument is 
29c00 6e 6f 74 20 75 73 65 64 20 62 79 20 74 68 69 73  not used by this
29c10 20 6f 70 63 6f 64 65 2e 20 20 49 74 20 69 73 20   opcode.  It is 
29c20 6f 6e 6c 79 20 74 68 65 72 65 20 74 6f 20 64 69  only there to di
29c30 73 61 6d 62 69 67 75 61 74 65 0a 2a 2a 20 66 75  sambiguate.** fu
29c40 6e 63 74 69 6f 6e 73 20 74 68 61 74 20 63 61 6e  nctions that can
29c50 20 74 61 6b 65 20 76 61 72 79 69 6e 67 20 6e 75   take varying nu
29c60 6d 62 65 72 73 20 6f 66 20 61 72 67 75 6d 65 6e  mbers of argumen
29c70 74 73 2e 20 20 54 68 65 0a 2a 2a 20 50 34 20 61  ts.  The.** P4 a
29c80 72 67 75 6d 65 6e 74 20 69 73 20 6f 6e 6c 79 20  rgument is only 
29c90 6e 65 65 64 65 64 20 66 6f 72 20 74 68 65 20 64  needed for the d
29ca0 65 67 65 6e 65 72 61 74 65 20 63 61 73 65 20 77  egenerate case w
29cb0 68 65 72 65 0a 2a 2a 20 74 68 65 20 73 74 65 70  here.** the step
29cc0 20 66 75 6e 63 74 69 6f 6e 20 77 61 73 20 6e 6f   function was no
29cd0 74 20 70 72 65 76 69 6f 75 73 6c 79 20 63 61 6c  t previously cal
29ce0 6c 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  led..*/.case OP_
29cf0 41 67 67 46 69 6e 61 6c 3a 20 7b 0a 20 20 4d 65  AggFinal: {.  Me
29d00 6d 20 2a 70 4d 65 6d 3b 0a 20 20 61 73 73 65 72  m *pMem;.  asser
29d10 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20  t( pOp->p1>0 && 
29d20 70 4f 70 2d 3e 70 31 3c 3d 70 2d 3e 6e 4d 65 6d  pOp->p1<=p->nMem
29d30 20 29 3b 0a 20 20 70 4d 65 6d 20 3d 20 26 61 4d   );.  pMem = &aM
29d40 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  em[pOp->p1];.  a
29d50 73 73 65 72 74 28 20 28 70 4d 65 6d 2d 3e 66 6c  ssert( (pMem->fl
29d60 61 67 73 20 26 20 7e 28 4d 45 4d 5f 4e 75 6c 6c  ags & ~(MEM_Null
29d70 7c 4d 45 4d 5f 41 67 67 29 29 3d 3d 30 20 29 3b  |MEM_Agg))==0 );
29d80 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
29d90 64 62 65 4d 65 6d 46 69 6e 61 6c 69 7a 65 28 70  dbeMemFinalize(p
29da0 4d 65 6d 2c 20 70 4f 70 2d 3e 70 34 2e 70 46 75  Mem, pOp->p4.pFu
29db0 6e 63 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  nc);.  sqlite3Vd
29dc0 62 65 4d 75 74 65 78 52 65 73 79 6e 63 28 70 29  beMutexResync(p)
29dd0 3b 0a 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20  ;.  if( rc ){.  
29de0 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69    sqlite3SetStri
29df0 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20  ng(&p->zErrMsg, 
29e00 64 62 2c 20 22 25 73 22 2c 20 73 71 6c 69 74 65  db, "%s", sqlite
29e10 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 70 4d 65  3_value_text(pMe
29e20 6d 29 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  m));.  }else if(
29e30 20 70 2d 3e 65 78 70 69 72 65 64 20 29 7b 0a 20   p->expired ){. 
29e40 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 41     rc = SQLITE_A
29e50 42 4f 52 54 3b 0a 20 20 7d 0a 20 20 73 71 6c 69  BORT;.  }.  sqli
29e60 74 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63  te3VdbeChangeEnc
29e70 6f 64 69 6e 67 28 70 4d 65 6d 2c 20 65 6e 63 6f  oding(pMem, enco
29e80 64 69 6e 67 29 3b 0a 20 20 55 50 44 41 54 45 5f  ding);.  UPDATE_
29e90 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4d 65  MAX_BLOBSIZE(pMe
29ea0 6d 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65  m);.  if( sqlite
29eb0 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28 70  3VdbeMemTooBig(p
29ec0 4d 65 6d 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f  Mem) ){.    goto
29ed0 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20   too_big;.  }.  
29ee0 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65  break;.}..#ifnde
29ef0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41  f SQLITE_OMIT_WA
29f00 4c 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 68 65  L./* Opcode: Che
29f10 63 6b 70 6f 69 6e 74 20 50 31 20 50 32 20 50 33  ckpoint P1 P2 P3
29f20 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b   * *.**.** Check
29f30 70 6f 69 6e 74 20 64 61 74 61 62 61 73 65 20 50  point database P
29f40 31 2e 20 54 68 69 73 20 69 73 20 61 20 6e 6f 2d  1. This is a no-
29f50 6f 70 20 69 66 20 50 31 20 69 73 20 6e 6f 74 20  op if P1 is not 
29f60 63 75 72 72 65 6e 74 6c 79 20 69 6e 0a 2a 2a 20  currently in.** 
29f70 57 41 4c 20 6d 6f 64 65 2e 20 50 61 72 61 6d 65  WAL mode. Parame
29f80 74 65 72 20 50 32 20 69 73 20 6f 6e 65 20 6f 66  ter P2 is one of
29f90 20 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49   SQLITE_CHECKPOI
29fa0 4e 54 5f 50 41 53 53 49 56 45 2c 20 46 55 4c 4c  NT_PASSIVE, FULL
29fb0 0a 2a 2a 20 6f 72 20 52 45 53 54 41 52 54 2e 20  .** or RESTART. 
29fc0 20 57 72 69 74 65 20 31 20 6f 72 20 30 20 69 6e   Write 1 or 0 in
29fd0 74 6f 20 6d 65 6d 5b 50 33 5d 20 69 66 20 74 68  to mem[P3] if th
29fe0 65 20 63 68 65 63 6b 70 6f 69 6e 74 20 72 65 74  e checkpoint ret
29ff0 75 72 6e 73 0a 2a 2a 20 53 51 4c 49 54 45 5f 42  urns.** SQLITE_B
2a000 55 53 59 20 6f 72 20 6e 6f 74 2c 20 72 65 73 70  USY or not, resp
2a010 65 63 74 69 76 65 6c 79 2e 20 20 57 72 69 74 65  ectively.  Write
2a020 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70   the number of p
2a030 61 67 65 73 20 69 6e 20 74 68 65 0a 2a 2a 20 57  ages in the.** W
2a040 41 4c 20 61 66 74 65 72 20 74 68 65 20 63 68 65  AL after the che
2a050 63 6b 70 6f 69 6e 74 20 69 6e 74 6f 20 6d 65 6d  ckpoint into mem
2a060 5b 50 33 2b 31 5d 20 61 6e 64 20 74 68 65 20 6e  [P3+1] and the n
2a070 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 0a 2a  umber of pages.*
2a080 2a 20 69 6e 20 74 68 65 20 57 41 4c 20 74 68 61  * in the WAL tha
2a090 74 20 68 61 76 65 20 62 65 65 6e 20 63 68 65 63  t have been chec
2a0a0 6b 70 6f 69 6e 74 65 64 20 61 66 74 65 72 20 74  kpointed after t
2a0b0 68 65 20 63 68 65 63 6b 70 6f 69 6e 74 0a 2a 2a  he checkpoint.**
2a0c0 20 63 6f 6d 70 6c 65 74 65 73 20 69 6e 74 6f 20   completes into 
2a0d0 6d 65 6d 5b 50 33 2b 32 5d 2e 20 20 48 6f 77 65  mem[P3+2].  Howe
2a0e0 76 65 72 20 6f 6e 20 61 6e 20 65 72 72 6f 72 2c  ver on an error,
2a0f0 20 6d 65 6d 5b 50 33 2b 31 5d 20 61 6e 64 0a 2a   mem[P3+1] and.*
2a100 2a 20 6d 65 6d 5b 50 33 2b 32 5d 20 61 72 65 20  * mem[P3+2] are 
2a110 69 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f 20 2d  initialized to -
2a120 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 68  1..*/.case OP_Ch
2a130 65 63 6b 70 6f 69 6e 74 3a 20 7b 0a 20 20 69 6e  eckpoint: {.  in
2a140 74 20 69 3b 20 20 20 20 20 20 20 20 20 20 20 20  t i;            
2a150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
2a160 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 20 2a 2f   Loop counter */
2a170 0a 20 20 69 6e 74 20 61 52 65 73 5b 33 5d 3b 20  .  int aRes[3]; 
2a180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a190 20 20 20 2f 2a 20 52 65 73 75 6c 74 73 20 2a 2f     /* Results */
2a1a0 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20 20  .  Mem *pMem;   
2a1b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a1c0 20 20 20 2f 2a 20 57 72 69 74 65 20 72 65 73 75     /* Write resu
2a1d0 6c 74 73 20 68 65 72 65 20 2a 2f 0a 0a 20 20 61  lts here */..  a
2a1e0 52 65 73 5b 30 5d 20 3d 20 30 3b 0a 20 20 61 52  Res[0] = 0;.  aR
2a1f0 65 73 5b 31 5d 20 3d 20 61 52 65 73 5b 32 5d 20  es[1] = aRes[2] 
2a200 3d 20 2d 31 3b 0a 20 20 61 73 73 65 72 74 28 20  = -1;.  assert( 
2a210 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f  pOp->p2==SQLITE_
2a220 43 48 45 43 4b 50 4f 49 4e 54 5f 50 41 53 53 49  CHECKPOINT_PASSI
2a230 56 45 0a 20 20 20 20 20 20 20 7c 7c 20 70 4f 70  VE.       || pOp
2a240 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 43 48 45  ->p2==SQLITE_CHE
2a250 43 4b 50 4f 49 4e 54 5f 46 55 4c 4c 0a 20 20 20  CKPOINT_FULL.   
2a260 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d      || pOp->p2==
2a270 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e  SQLITE_CHECKPOIN
2a280 54 5f 52 45 53 54 41 52 54 0a 20 20 29 3b 0a 20  T_RESTART.  );. 
2a290 20 72 63 20 3d 20 73 71 6c 69 74 65 33 43 68 65   rc = sqlite3Che
2a2a0 63 6b 70 6f 69 6e 74 28 64 62 2c 20 70 4f 70 2d  ckpoint(db, pOp-
2a2b0 3e 70 31 2c 20 70 4f 70 2d 3e 70 32 2c 20 26 61  >p1, pOp->p2, &a
2a2c0 52 65 73 5b 31 5d 2c 20 26 61 52 65 73 5b 32 5d  Res[1], &aRes[2]
2a2d0 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  );.  if( rc==SQL
2a2e0 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20 20  ITE_BUSY ){.    
2a2f0 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a  rc = SQLITE_OK;.
2a300 20 20 20 20 61 52 65 73 5b 30 5d 20 3d 20 31 3b      aRes[0] = 1;
2a310 0a 20 20 7d 0a 20 20 66 6f 72 28 69 3d 30 2c 20  .  }.  for(i=0, 
2a320 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pMem = &aMem[pOp
2a330 2d 3e 70 33 5d 3b 20 69 3c 33 3b 20 69 2b 2b 2c  ->p3]; i<3; i++,
2a340 20 70 4d 65 6d 2b 2b 29 7b 0a 20 20 20 20 73 71   pMem++){.    sq
2a350 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49  lite3VdbeMemSetI
2a360 6e 74 36 34 28 70 4d 65 6d 2c 20 28 69 36 34 29  nt64(pMem, (i64)
2a370 61 52 65 73 5b 69 5d 29 3b 0a 20 20 7d 20 20 20  aRes[i]);.  }   
2a380 20 0a 20 20 62 72 65 61 6b 3b 0a 7d 3b 20 20 0a   .  break;.};  .
2a390 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20  #endif..#ifndef 
2a3a0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 41 47  SQLITE_OMIT_PRAG
2a3b0 4d 41 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4a 6f  MA./* Opcode: Jo
2a3c0 75 72 6e 61 6c 4d 6f 64 65 20 50 31 20 50 32 20  urnalMode P1 P2 
2a3d0 50 33 20 2a 20 50 35 0a 2a 2a 0a 2a 2a 20 43 68  P3 * P5.**.** Ch
2a3e0 61 6e 67 65 20 74 68 65 20 6a 6f 75 72 6e 61 6c  ange the journal
2a3f0 20 6d 6f 64 65 20 6f 66 20 64 61 74 61 62 61 73   mode of databas
2a400 65 20 50 31 20 74 6f 20 50 33 2e 20 50 33 20 6d  e P1 to P3. P3 m
2a410 75 73 74 20 62 65 20 6f 6e 65 20 6f 66 20 74 68  ust be one of th
2a420 65 0a 2a 2a 20 50 41 47 45 52 5f 4a 4f 55 52 4e  e.** PAGER_JOURN
2a430 41 4c 4d 4f 44 45 5f 58 58 58 20 76 61 6c 75 65  ALMODE_XXX value
2a440 73 2e 20 49 66 20 63 68 61 6e 67 69 6e 67 20 62  s. If changing b
2a450 65 74 77 65 65 6e 20 74 68 65 20 76 61 72 69 6f  etween the vario
2a460 75 73 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 6d  us rollback.** m
2a470 6f 64 65 73 20 28 64 65 6c 65 74 65 2c 20 74 72  odes (delete, tr
2a480 75 6e 63 61 74 65 2c 20 70 65 72 73 69 73 74 2c  uncate, persist,
2a490 20 6f 66 66 20 61 6e 64 20 6d 65 6d 6f 72 79 29   off and memory)
2a4a0 2c 20 74 68 69 73 20 69 73 20 61 20 73 69 6d 70  , this is a simp
2a4b0 6c 65 0a 2a 2a 20 6f 70 65 72 61 74 69 6f 6e 2e  le.** operation.
2a4c0 20 4e 6f 20 49 4f 20 69 73 20 72 65 71 75 69 72   No IO is requir
2a4d0 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 63 68 61  ed..**.** If cha
2a4e0 6e 67 69 6e 67 20 69 6e 74 6f 20 6f 72 20 6f 75  nging into or ou
2a4f0 74 20 6f 66 20 57 41 4c 20 6d 6f 64 65 20 74 68  t of WAL mode th
2a500 65 20 70 72 6f 63 65 64 75 72 65 20 69 73 20 6d  e procedure is m
2a510 6f 72 65 20 63 6f 6d 70 6c 69 63 61 74 65 64 2e  ore complicated.
2a520 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 61 20 73  .**.** Write a s
2a530 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e 69 6e 67  tring containing
2a540 20 74 68 65 20 66 69 6e 61 6c 20 6a 6f 75 72 6e   the final journ
2a550 61 6c 2d 6d 6f 64 65 20 74 6f 20 72 65 67 69 73  al-mode to regis
2a560 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20  ter P2..*/.case 
2a570 4f 50 5f 4a 6f 75 72 6e 61 6c 4d 6f 64 65 3a 20  OP_JournalMode: 
2a580 7b 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65  {    /* out2-pre
2a590 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 42 74 72  release */.  Btr
2a5a0 65 65 20 2a 70 42 74 3b 20 20 20 20 20 20 20 20  ee *pBt;        
2a5b0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
2a5c0 42 74 72 65 65 20 74 6f 20 63 68 61 6e 67 65 20  Btree to change 
2a5d0 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 6f 66 20  journal mode of 
2a5e0 2a 2f 0a 20 20 50 61 67 65 72 20 2a 70 50 61 67  */.  Pager *pPag
2a5f0 65 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  er;             
2a600 20 20 20 20 20 2f 2a 20 50 61 67 65 72 20 61 73       /* Pager as
2a610 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 70 42  sociated with pB
2a620 74 20 2a 2f 0a 20 20 69 6e 74 20 65 4e 65 77 3b  t */.  int eNew;
2a630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a640 20 20 20 20 20 20 20 2f 2a 20 4e 65 77 20 6a 6f         /* New jo
2a650 75 72 6e 61 6c 20 6d 6f 64 65 20 2a 2f 0a 20 20  urnal mode */.  
2a660 69 6e 74 20 65 4f 6c 64 3b 20 20 20 20 20 20 20  int eOld;       
2a670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a680 2f 2a 20 54 68 65 20 6f 6c 64 20 6a 6f 75 72 6e  /* The old journ
2a690 61 6c 20 6d 6f 64 65 20 2a 2f 0a 20 20 63 6f 6e  al mode */.  con
2a6a0 73 74 20 63 68 61 72 20 2a 7a 46 69 6c 65 6e 61  st char *zFilena
2a6b0 6d 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  me;          /* 
2a6c0 4e 61 6d 65 20 6f 66 20 64 61 74 61 62 61 73 65  Name of database
2a6d0 20 66 69 6c 65 20 66 6f 72 20 70 50 61 67 65 72   file for pPager
2a6e0 20 2a 2f 0a 0a 20 20 65 4e 65 77 20 3d 20 70 4f   */..  eNew = pO
2a6f0 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72 74 28  p->p3;.  assert(
2a700 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55   eNew==PAGER_JOU
2a710 52 4e 41 4c 4d 4f 44 45 5f 44 45 4c 45 54 45 20  RNALMODE_DELETE 
2a720 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d  .       || eNew=
2a730 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f  =PAGER_JOURNALMO
2a740 44 45 5f 54 52 55 4e 43 41 54 45 20 0a 20 20 20  DE_TRUNCATE .   
2a750 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47      || eNew==PAG
2a760 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 50  ER_JOURNALMODE_P
2a770 45 52 53 49 53 54 20 0a 20 20 20 20 20 20 20 7c  ERSIST .       |
2a780 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f  | eNew==PAGER_JO
2a790 55 52 4e 41 4c 4d 4f 44 45 5f 4f 46 46 0a 20 20  URNALMODE_OFF.  
2a7a0 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41       || eNew==PA
2a7b0 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
2a7c0 4d 45 4d 4f 52 59 0a 20 20 20 20 20 20 20 7c 7c  MEMORY.       ||
2a7d0 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55   eNew==PAGER_JOU
2a7e0 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 0a 20 20 20  RNALMODE_WAL.   
2a7f0 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47      || eNew==PAG
2a800 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 51  ER_JOURNALMODE_Q
2a810 55 45 52 59 0a 20 20 29 3b 0a 20 20 61 73 73 65  UERY.  );.  asse
2a820 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
2a830 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44  & pOp->p1<db->nD
2a840 62 20 29 3b 0a 0a 20 20 2f 2a 20 54 68 69 73 20  b );..  /* This 
2a850 6f 70 63 6f 64 65 20 69 73 20 75 73 65 64 20 69  opcode is used i
2a860 6e 20 74 77 6f 20 70 6c 61 63 65 73 3a 20 50 52  n two places: PR
2a870 41 47 4d 41 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64  AGMA journal_mod
2a880 65 20 61 6e 64 20 41 54 54 41 43 48 2e 0a 20 20  e and ATTACH..  
2a890 2a 2a 20 49 6e 20 50 52 41 47 4d 41 20 6a 6f 75  ** In PRAGMA jou
2a8a0 72 6e 61 6c 5f 6d 6f 64 65 2c 20 74 68 65 20 73  rnal_mode, the s
2a8b0 71 6c 69 74 65 33 56 64 62 65 55 73 65 73 42 74  qlite3VdbeUsesBt
2a8c0 72 65 65 28 29 20 72 6f 75 74 69 6e 65 20 69 73  ree() routine is
2a8d0 20 63 61 6c 6c 65 64 0a 20 20 2a 2a 20 77 68 65   called.  ** whe
2a8e0 6e 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20  n the statement 
2a8f0 69 73 20 70 72 65 70 61 72 65 64 20 61 6e 64 20  is prepared and 
2a900 73 6f 20 70 2d 3e 62 74 72 65 65 4d 61 73 6b 21  so p->btreeMask!
2a910 3d 30 2e 20 20 41 6c 6c 20 6d 75 74 65 78 65 73  =0.  All mutexes
2a920 0a 20 20 2a 2a 20 61 72 65 20 61 6c 72 65 61 64  .  ** are alread
2a930 79 20 61 63 71 75 69 72 65 64 2e 20 20 42 75 74  y acquired.  But
2a940 20 77 68 65 6e 20 75 73 65 64 20 69 6e 20 41 54   when used in AT
2a950 54 41 43 48 2c 20 73 71 6c 69 74 65 33 56 64 62  TACH, sqlite3Vdb
2a960 65 55 73 65 73 42 74 72 65 65 28 29 0a 20 20 2a  eUsesBtree().  *
2a970 2a 20 69 73 20 6e 6f 74 20 63 61 6c 6c 65 64 20  * is not called 
2a980 77 68 65 6e 20 74 68 65 20 73 74 61 74 65 6d 65  when the stateme
2a990 6e 74 20 69 73 20 70 72 65 70 61 72 65 64 20 62  nt is prepared b
2a9a0 65 63 61 75 73 65 20 69 74 20 72 65 71 75 69 72  ecause it requir
2a9b0 65 73 20 74 68 65 0a 20 20 2a 2a 20 69 44 62 20  es the.  ** iDb 
2a9c0 69 6e 64 65 78 20 6f 66 20 74 68 65 20 64 61 74  index of the dat
2a9d0 61 62 61 73 65 20 61 73 20 61 20 70 61 72 61 6d  abase as a param
2a9e0 65 74 65 72 2c 20 61 6e 64 20 74 68 65 20 64 61  eter, and the da
2a9f0 74 61 62 61 73 65 20 68 61 73 20 6e 6f 74 0a 20  tabase has not. 
2aa00 20 2a 2a 20 79 65 74 20 62 65 65 6e 20 61 74 74   ** yet been att
2aa10 61 63 68 65 64 20 73 6f 20 74 68 61 74 20 69 6e  ached so that in
2aa20 64 65 78 20 69 73 20 75 6e 61 76 61 69 6c 61 62  dex is unavailab
2aa30 6c 65 2e 20 20 57 65 20 68 61 76 65 20 74 6f 20  le.  We have to 
2aa40 77 61 69 74 0a 20 20 2a 2a 20 75 6e 74 69 6c 20  wait.  ** until 
2aa50 72 75 6e 74 69 6d 65 20 28 6e 6f 77 29 20 74 6f  runtime (now) to
2aa60 20 67 65 74 20 74 68 65 20 6d 75 74 65 78 20 6f   get the mutex o
2aa70 6e 20 74 68 65 20 6e 65 77 6c 79 20 61 74 74 61  n the newly atta
2aa80 63 68 65 64 20 64 61 74 61 62 61 73 65 2e 0a 20  ched database.. 
2aa90 20 2a 2a 20 4e 6f 20 6f 74 68 65 72 20 6d 75 74   ** No other mut
2aaa0 65 78 65 73 20 61 72 65 20 72 65 71 75 69 72 65  exes are require
2aab0 64 20 62 79 20 74 68 65 20 41 54 54 41 43 48 20  d by the ATTACH 
2aac0 63 6f 6d 6d 61 6e 64 20 73 6f 20 74 68 69 73 20  command so this 
2aad0 69 73 20 73 61 66 65 0a 20 20 2a 2a 20 74 6f 20  is safe.  ** to 
2aae0 64 6f 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 70  do..  */.  if( p
2aaf0 2d 3e 62 74 72 65 65 4d 61 73 6b 3d 3d 30 20 29  ->btreeMask==0 )
2ab00 7b 0a 20 20 20 20 2f 2a 20 54 68 69 73 20 6f 63  {.    /* This oc
2ab10 63 75 72 73 20 72 69 67 68 74 20 61 66 74 65 72  curs right after
2ab20 20 41 54 54 41 43 48 2e 20 20 47 65 74 20 61 20   ATTACH.  Get a 
2ab30 6d 75 74 65 78 20 6f 6e 20 74 68 65 20 6e 65 77  mutex on the new
2ab40 6c 79 20 41 54 54 41 43 48 65 64 0a 20 20 20 20  ly ATTACHed.    
2ab50 2a 2a 20 64 61 74 61 62 61 73 65 2e 20 2a 2f 0a  ** database. */.
2ab60 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 55      sqlite3VdbeU
2ab70 73 65 73 42 74 72 65 65 28 70 2c 20 70 4f 70 2d  sesBtree(p, pOp-
2ab80 3e 70 31 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  >p1);.    sqlite
2ab90 33 56 64 62 65 45 6e 74 65 72 28 70 29 3b 0a 20  3VdbeEnter(p);. 
2aba0 20 7d 0a 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e   }..  pBt = db->
2abb0 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74  aDb[pOp->p1].pBt
2abc0 3b 0a 20 20 70 50 61 67 65 72 20 3d 20 73 71 6c  ;.  pPager = sql
2abd0 69 74 65 33 42 74 72 65 65 50 61 67 65 72 28 70  ite3BtreePager(p
2abe0 42 74 29 3b 0a 20 20 65 4f 6c 64 20 3d 20 73 71  Bt);.  eOld = sq
2abf0 6c 69 74 65 33 50 61 67 65 72 47 65 74 4a 6f 75  lite3PagerGetJou
2ac00 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65 72 29  rnalMode(pPager)
2ac10 3b 0a 20 20 69 66 28 20 65 4e 65 77 3d 3d 50 41  ;.  if( eNew==PA
2ac20 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
2ac30 51 55 45 52 59 20 29 20 65 4e 65 77 20 3d 20 65  QUERY ) eNew = e
2ac40 4f 6c 64 3b 0a 20 20 69 66 28 20 21 73 71 6c 69  Old;.  if( !sqli
2ac50 74 65 33 50 61 67 65 72 4f 6b 54 6f 43 68 61 6e  te3PagerOkToChan
2ac60 67 65 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50  geJournalMode(pP
2ac70 61 67 65 72 29 20 29 20 65 4e 65 77 20 3d 20 65  ager) ) eNew = e
2ac80 4f 6c 64 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51  Old;..#ifndef SQ
2ac90 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20  LITE_OMIT_WAL.  
2aca0 7a 46 69 6c 65 6e 61 6d 65 20 3d 20 73 71 6c 69  zFilename = sqli
2acb0 74 65 33 50 61 67 65 72 46 69 6c 65 6e 61 6d 65  te3PagerFilename
2acc0 28 70 50 61 67 65 72 29 3b 0a 0a 20 20 2f 2a 20  (pPager);..  /* 
2acd0 44 6f 20 6e 6f 74 20 61 6c 6c 6f 77 20 61 20 74  Do not allow a t
2ace0 72 61 6e 73 69 74 69 6f 6e 20 74 6f 20 6a 6f 75  ransition to jou
2acf0 72 6e 61 6c 5f 6d 6f 64 65 3d 57 41 4c 20 66 6f  rnal_mode=WAL fo
2ad00 72 20 61 20 64 61 74 61 62 61 73 65 0a 20 20 2a  r a database.  *
2ad10 2a 20 69 6e 20 74 65 6d 70 6f 72 61 72 79 20 73  * in temporary s
2ad20 74 6f 72 61 67 65 20 6f 72 20 69 66 20 74 68 65  torage or if the
2ad30 20 56 46 53 20 64 6f 65 73 20 6e 6f 74 20 73 75   VFS does not su
2ad40 70 70 6f 72 74 20 73 68 61 72 65 64 20 6d 65 6d  pport shared mem
2ad50 6f 72 79 20 0a 20 20 2a 2f 0a 20 20 69 66 28 20  ory .  */.  if( 
2ad60 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52  eNew==PAGER_JOUR
2ad70 4e 41 4c 4d 4f 44 45 5f 57 41 4c 0a 20 20 20 26  NALMODE_WAL.   &
2ad80 26 20 28 7a 46 69 6c 65 6e 61 6d 65 5b 30 5d 3d  & (zFilename[0]=
2ad90 3d 30 20 20 20 20 20 20 20 20 20 20 20 20 20 20  =0              
2ada0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65             /* Te
2adb0 6d 70 20 66 69 6c 65 20 2a 2f 0a 20 20 20 20 20  mp file */.     
2adc0 20 20 7c 7c 20 21 73 71 6c 69 74 65 33 50 61 67    || !sqlite3Pag
2add0 65 72 57 61 6c 53 75 70 70 6f 72 74 65 64 28 70  erWalSupported(p
2ade0 50 61 67 65 72 29 29 20 20 20 2f 2a 20 4e 6f 20  Pager))   /* No 
2adf0 73 68 61 72 65 64 2d 6d 65 6d 6f 72 79 20 73 75  shared-memory su
2ae00 70 70 6f 72 74 20 2a 2f 0a 20 20 29 7b 0a 20 20  pport */.  ){.  
2ae10 20 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a 20    eNew = eOld;. 
2ae20 20 7d 0a 0a 20 20 69 66 28 20 28 65 4e 65 77 21   }..  if( (eNew!
2ae30 3d 65 4f 6c 64 29 0a 20 20 20 26 26 20 28 65 4f  =eOld).   && (eO
2ae40 6c 64 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41  ld==PAGER_JOURNA
2ae50 4c 4d 4f 44 45 5f 57 41 4c 20 7c 7c 20 65 4e 65  LMODE_WAL || eNe
2ae60 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  w==PAGER_JOURNAL
2ae70 4d 4f 44 45 5f 57 41 4c 29 0a 20 20 29 7b 0a 20  MODE_WAL).  ){. 
2ae80 20 20 20 69 66 28 20 21 64 62 2d 3e 61 75 74 6f     if( !db->auto
2ae90 43 6f 6d 6d 69 74 20 7c 7c 20 64 62 2d 3e 61 63  Commit || db->ac
2aea0 74 69 76 65 56 64 62 65 43 6e 74 3e 31 20 29 7b  tiveVdbeCnt>1 ){
2aeb0 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49  .      rc = SQLI
2aec0 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 20 20  TE_ERROR;.      
2aed0 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67  sqlite3SetString
2aee0 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62  (&p->zErrMsg, db
2aef0 2c 20 0a 20 20 20 20 20 20 20 20 20 20 22 63 61  , .          "ca
2af00 6e 6e 6f 74 20 63 68 61 6e 67 65 20 25 73 20 77  nnot change %s w
2af10 61 6c 20 6d 6f 64 65 20 66 72 6f 6d 20 77 69 74  al mode from wit
2af20 68 69 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f  hin a transactio
2af30 6e 22 2c 0a 20 20 20 20 20 20 20 20 20 20 28 65  n",.          (e
2af40 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e  New==PAGER_JOURN
2af50 41 4c 4d 4f 44 45 5f 57 41 4c 20 3f 20 22 69 6e  ALMODE_WAL ? "in
2af60 74 6f 22 20 3a 20 22 6f 75 74 20 6f 66 22 29 0a  to" : "out of").
2af70 20 20 20 20 20 20 29 3b 0a 20 20 20 20 20 20 62        );.      b
2af80 72 65 61 6b 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  reak;.    }else{
2af90 0a 20 0a 20 20 20 20 20 20 69 66 28 20 65 4f 6c  . .      if( eOl
2afa0 64 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  d==PAGER_JOURNAL
2afb0 4d 4f 44 45 5f 57 41 4c 20 29 7b 0a 20 20 20 20  MODE_WAL ){.    
2afc0 20 20 20 20 2f 2a 20 49 66 20 6c 65 61 76 69 6e      /* If leavin
2afd0 67 20 57 41 4c 20 6d 6f 64 65 2c 20 63 6c 6f 73  g WAL mode, clos
2afe0 65 20 74 68 65 20 6c 6f 67 20 66 69 6c 65 2e 20  e the log file. 
2aff0 49 66 20 73 75 63 63 65 73 73 66 75 6c 2c 20 74  If successful, t
2b000 68 65 20 63 61 6c 6c 0a 20 20 20 20 20 20 20 20  he call.        
2b010 2a 2a 20 74 6f 20 50 61 67 65 72 43 6c 6f 73 65  ** to PagerClose
2b020 57 61 6c 28 29 20 63 68 65 63 6b 70 6f 69 6e 74  Wal() checkpoint
2b030 73 20 61 6e 64 20 64 65 6c 65 74 65 73 20 74 68  s and deletes th
2b040 65 20 77 72 69 74 65 2d 61 68 65 61 64 2d 6c 6f  e write-ahead-lo
2b050 67 20 0a 20 20 20 20 20 20 20 20 2a 2a 20 66 69  g .        ** fi
2b060 6c 65 2e 20 41 6e 20 45 58 43 4c 55 53 49 56 45  le. An EXCLUSIVE
2b070 20 6c 6f 63 6b 20 6d 61 79 20 73 74 69 6c 6c 20   lock may still 
2b080 62 65 20 68 65 6c 64 20 6f 6e 20 74 68 65 20 64  be held on the d
2b090 61 74 61 62 61 73 65 20 66 69 6c 65 20 0a 20 20  atabase file .  
2b0a0 20 20 20 20 20 20 2a 2a 20 61 66 74 65 72 20 61        ** after a
2b0b0 20 73 75 63 63 65 73 73 66 75 6c 20 72 65 74 75   successful retu
2b0c0 72 6e 2e 20 0a 20 20 20 20 20 20 20 20 2a 2f 0a  rn. .        */.
2b0d0 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c          rc = sql
2b0e0 69 74 65 33 50 61 67 65 72 43 6c 6f 73 65 57 61  ite3PagerCloseWa
2b0f0 6c 28 70 50 61 67 65 72 29 3b 0a 20 20 20 20 20  l(pPager);.     
2b100 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54     if( rc==SQLIT
2b110 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20  E_OK ){.        
2b120 20 20 73 71 6c 69 74 65 33 50 61 67 65 72 53 65    sqlite3PagerSe
2b130 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61  tJournalMode(pPa
2b140 67 65 72 2c 20 65 4e 65 77 29 3b 0a 20 20 20 20  ger, eNew);.    
2b150 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 65 6c 73      }.      }els
2b160 65 20 69 66 28 20 65 4f 6c 64 3d 3d 50 41 47 45  e if( eOld==PAGE
2b170 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4d 45  R_JOURNALMODE_ME
2b180 4d 4f 52 59 20 29 7b 0a 20 20 20 20 20 20 20 20  MORY ){.        
2b190 2f 2a 20 43 61 6e 6e 6f 74 20 74 72 61 6e 73 69  /* Cannot transi
2b1a0 74 69 6f 6e 20 64 69 72 65 63 74 6c 79 20 66 72  tion directly fr
2b1b0 6f 6d 20 4d 45 4d 4f 52 59 20 74 6f 20 57 41 4c  om MEMORY to WAL
2b1c0 2e 20 20 55 73 65 20 6d 6f 64 65 20 4f 46 46 0a  .  Use mode OFF.
2b1d0 20 20 20 20 20 20 20 20 2a 2a 20 61 73 20 61 6e          ** as an
2b1e0 20 69 6e 74 65 72 6d 65 64 69 61 74 65 20 2a 2f   intermediate */
2b1f0 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
2b200 50 61 67 65 72 53 65 74 4a 6f 75 72 6e 61 6c 4d  PagerSetJournalM
2b210 6f 64 65 28 70 50 61 67 65 72 2c 20 50 41 47 45  ode(pPager, PAGE
2b220 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4f 46  R_JOURNALMODE_OF
2b230 46 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 0a 20  F);.      }.  . 
2b240 20 20 20 20 20 2f 2a 20 4f 70 65 6e 20 61 20 74       /* Open a t
2b250 72 61 6e 73 61 63 74 69 6f 6e 20 6f 6e 20 74 68  ransaction on th
2b260 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e  e database file.
2b270 20 52 65 67 61 72 64 6c 65 73 73 20 6f 66 20 74   Regardless of t
2b280 68 65 20 6a 6f 75 72 6e 61 6c 0a 20 20 20 20 20  he journal.     
2b290 20 2a 2a 20 6d 6f 64 65 2c 20 74 68 69 73 20 74   ** mode, this t
2b2a0 72 61 6e 73 61 63 74 69 6f 6e 20 61 6c 77 61 79  ransaction alway
2b2b0 73 20 75 73 65 73 20 61 20 72 6f 6c 6c 62 61 63  s uses a rollbac
2b2c0 6b 20 6a 6f 75 72 6e 61 6c 2e 0a 20 20 20 20 20  k journal..     
2b2d0 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74   */.      assert
2b2e0 28 20 73 71 6c 69 74 65 33 42 74 72 65 65 49 73  ( sqlite3BtreeIs
2b2f0 49 6e 54 72 61 6e 73 28 70 42 74 29 3d 3d 30 20  InTrans(pBt)==0 
2b300 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d  );.      if( rc=
2b310 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
2b320 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
2b330 65 33 42 74 72 65 65 53 65 74 56 65 72 73 69 6f  e3BtreeSetVersio
2b340 6e 28 70 42 74 2c 20 28 65 4e 65 77 3d 3d 50 41  n(pBt, (eNew==PA
2b350 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
2b360 57 41 4c 20 3f 20 32 20 3a 20 31 29 29 3b 0a 20  WAL ? 2 : 1));. 
2b370 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d       }.    }.  }
2b380 0a 23 65 6e 64 69 66 20 2f 2a 20 69 66 6e 64 65  .#endif /* ifnde
2b390 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41  f SQLITE_OMIT_WA
2b3a0 4c 20 2a 2f 0a 0a 20 20 69 66 28 20 72 63 20 29  L */..  if( rc )
2b3b0 7b 0a 20 20 20 20 65 4e 65 77 20 3d 20 65 4f 6c  {.    eNew = eOl
2b3c0 64 3b 0a 20 20 7d 0a 20 20 65 4e 65 77 20 3d 20  d;.  }.  eNew = 
2b3d0 73 71 6c 69 74 65 33 50 61 67 65 72 53 65 74 4a  sqlite3PagerSetJ
2b3e0 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65  ournalMode(pPage
2b3f0 72 2c 20 65 4e 65 77 29 3b 0a 0a 20 20 70 4f 75  r, eNew);..  pOu
2b400 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
2b410 32 5d 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67  2];.  pOut->flag
2b420 73 20 3d 20 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f  s = MEM_Str|MEM_
2b430 53 74 61 74 69 63 7c 4d 45 4d 5f 54 65 72 6d 3b  Static|MEM_Term;
2b440 0a 20 20 70 4f 75 74 2d 3e 7a 20 3d 20 28 63 68  .  pOut->z = (ch
2b450 61 72 20 2a 29 73 71 6c 69 74 65 33 4a 6f 75 72  ar *)sqlite3Jour
2b460 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28 65 4e 65 77  nalModename(eNew
2b470 29 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 73  );.  pOut->n = s
2b480 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 70  qlite3Strlen30(p
2b490 4f 75 74 2d 3e 7a 29 3b 0a 20 20 70 4f 75 74 2d  Out->z);.  pOut-
2b4a0 3e 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55 54  >enc = SQLITE_UT
2b4b0 46 38 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  F8;.  sqlite3Vdb
2b4c0 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28  eChangeEncoding(
2b4d0 70 4f 75 74 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  pOut, encoding);
2b4e0 0a 20 20 62 72 65 61 6b 3b 0a 7d 3b 0a 23 65 6e  .  break;.};.#en
2b4f0 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
2b500 49 54 5f 50 52 41 47 4d 41 20 2a 2f 0a 0a 23 69  IT_PRAGMA */..#i
2b510 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
2b520 45 5f 4f 4d 49 54 5f 56 41 43 55 55 4d 29 20 26  E_OMIT_VACUUM) &
2b530 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  & !defined(SQLIT
2b540 45 5f 4f 4d 49 54 5f 41 54 54 41 43 48 29 0a 2f  E_OMIT_ATTACH)./
2b550 2a 20 4f 70 63 6f 64 65 3a 20 56 61 63 75 75 6d  * Opcode: Vacuum
2b560 20 2a 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a   * * * * *.**.**
2b570 20 56 61 63 75 75 6d 20 74 68 65 20 65 6e 74 69   Vacuum the enti
2b580 72 65 20 64 61 74 61 62 61 73 65 2e 20 20 54 68  re database.  Th
2b590 69 73 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 63  is opcode will c
2b5a0 61 75 73 65 20 6f 74 68 65 72 20 76 69 72 74 75  ause other virtu
2b5b0 61 6c 0a 2a 2a 20 6d 61 63 68 69 6e 65 73 20 74  al.** machines t
2b5c0 6f 20 62 65 20 63 72 65 61 74 65 64 20 61 6e 64  o be created and
2b5d0 20 72 75 6e 2e 20 20 49 74 20 6d 61 79 20 6e 6f   run.  It may no
2b5e0 74 20 62 65 20 63 61 6c 6c 65 64 20 66 72 6f 6d  t be called from
2b5f0 20 77 69 74 68 69 6e 0a 2a 2a 20 61 20 74 72 61   within.** a tra
2b600 6e 73 61 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73  nsaction..*/.cas
2b610 65 20 4f 50 5f 56 61 63 75 75 6d 3a 20 7b 0a 20  e OP_Vacuum: {. 
2b620 20 72 63 20 3d 20 73 71 6c 69 74 65 33 52 75 6e   rc = sqlite3Run
2b630 56 61 63 75 75 6d 28 26 70 2d 3e 7a 45 72 72 4d  Vacuum(&p->zErrM
2b640 73 67 2c 20 64 62 29 3b 0a 20 20 62 72 65 61 6b  sg, db);.  break
2b650 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20  ;.}.#endif..#if 
2b660 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
2b670 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 29  OMIT_AUTOVACUUM)
2b680 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 63 72  ./* Opcode: Incr
2b690 56 61 63 75 75 6d 20 50 31 20 50 32 20 2a 20 2a  Vacuum P1 P2 * *
2b6a0 20 2a 0a 2a 2a 0a 2a 2a 20 50 65 72 66 6f 72 6d   *.**.** Perform
2b6b0 20 61 20 73 69 6e 67 6c 65 20 73 74 65 70 20 6f   a single step o
2b6c0 66 20 74 68 65 20 69 6e 63 72 65 6d 65 6e 74 61  f the incrementa
2b6d0 6c 20 76 61 63 75 75 6d 20 70 72 6f 63 65 64 75  l vacuum procedu
2b6e0 72 65 20 6f 6e 0a 2a 2a 20 74 68 65 20 50 31 20  re on.** the P1 
2b6f0 64 61 74 61 62 61 73 65 2e 20 49 66 20 74 68 65  database. If the
2b700 20 76 61 63 75 75 6d 20 68 61 73 20 66 69 6e 69   vacuum has fini
2b710 73 68 65 64 2c 20 6a 75 6d 70 20 74 6f 20 69 6e  shed, jump to in
2b720 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 50 32 2e  struction.** P2.
2b730 20 4f 74 68 65 72 77 69 73 65 2c 20 66 61 6c 6c   Otherwise, fall
2b740 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
2b750 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
2b760 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 63  ..*/.case OP_Inc
2b770 72 56 61 63 75 75 6d 3a 20 7b 20 20 20 20 20 20  rVacuum: {      
2b780 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 42    /* jump */.  B
2b790 74 72 65 65 20 2a 70 42 74 3b 0a 0a 20 20 61 73  tree *pBt;..  as
2b7a0 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
2b7b0 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e   && pOp->p1<db->
2b7c0 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28  nDb );.  assert(
2b7d0 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26   (p->btreeMask &
2b7e0 20 28 28 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c   (((yDbMask)1)<<
2b7f0 70 4f 70 2d 3e 70 31 29 29 21 3d 30 20 29 3b 0a  pOp->p1))!=0 );.
2b800 20 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b    pBt = db->aDb[
2b810 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20 20  pOp->p1].pBt;.  
2b820 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
2b830 65 49 6e 63 72 56 61 63 75 75 6d 28 70 42 74 29  eIncrVacuum(pBt)
2b840 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49  ;.  if( rc==SQLI
2b850 54 45 5f 44 4f 4e 45 20 29 7b 0a 20 20 20 20 70  TE_DONE ){.    p
2b860 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
2b870 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45  .    rc = SQLITE
2b880 5f 4f 4b 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  _OK;.  }.  break
2b890 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f  ;.}.#endif../* O
2b8a0 70 63 6f 64 65 3a 20 45 78 70 69 72 65 20 50 31  pcode: Expire P1
2b8b0 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43   * * * *.**.** C
2b8c0 61 75 73 65 20 70 72 65 63 6f 6d 70 69 6c 65 64  ause precompiled
2b8d0 20 73 74 61 74 65 6d 65 6e 74 73 20 74 6f 20 62   statements to b
2b8e0 65 63 6f 6d 65 20 65 78 70 69 72 65 64 2e 20 41  ecome expired. A
2b8f0 6e 20 65 78 70 69 72 65 64 20 73 74 61 74 65 6d  n expired statem
2b900 65 6e 74 0a 2a 2a 20 66 61 69 6c 73 20 77 69 74  ent.** fails wit
2b910 68 20 61 6e 20 65 72 72 6f 72 20 63 6f 64 65 20  h an error code 
2b920 6f 66 20 53 51 4c 49 54 45 5f 53 43 48 45 4d 41  of SQLITE_SCHEMA
2b930 20 69 66 20 69 74 20 69 73 20 65 76 65 72 20 65   if it is ever e
2b940 78 65 63 75 74 65 64 20 0a 2a 2a 20 28 76 69 61  xecuted .** (via
2b950 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 29   sqlite3_step())
2b960 2e 0a 2a 2a 20 0a 2a 2a 20 49 66 20 50 31 20 69  ..** .** If P1 i
2b970 73 20 30 2c 20 74 68 65 6e 20 61 6c 6c 20 53 51  s 0, then all SQ
2b980 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 62 65 63  L statements bec
2b990 6f 6d 65 20 65 78 70 69 72 65 64 2e 20 49 66 20  ome expired. If 
2b9a0 50 31 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 0a  P1 is non-zero,.
2b9b0 2a 2a 20 74 68 65 6e 20 6f 6e 6c 79 20 74 68 65  ** then only the
2b9c0 20 63 75 72 72 65 6e 74 6c 79 20 65 78 65 63 75   currently execu
2b9d0 74 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 69  ting statement i
2b9e0 73 20 61 66 66 65 63 74 65 64 2e 20 0a 2a 2f 0a  s affected. .*/.
2b9f0 63 61 73 65 20 4f 50 5f 45 78 70 69 72 65 3a 20  case OP_Expire: 
2ba00 7b 0a 20 20 69 66 28 20 21 70 4f 70 2d 3e 70 31  {.  if( !pOp->p1
2ba10 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 45   ){.    sqlite3E
2ba20 78 70 69 72 65 50 72 65 70 61 72 65 64 53 74 61  xpirePreparedSta
2ba30 74 65 6d 65 6e 74 73 28 64 62 29 3b 0a 20 20 7d  tements(db);.  }
2ba40 65 6c 73 65 7b 0a 20 20 20 20 70 2d 3e 65 78 70  else{.    p->exp
2ba50 69 72 65 64 20 3d 20 31 3b 0a 20 20 7d 0a 20 20  ired = 1;.  }.  
2ba60 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65  break;.}..#ifnde
2ba70 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48  f SQLITE_OMIT_SH
2ba80 41 52 45 44 5f 43 41 43 48 45 0a 2f 2a 20 4f 70  ARED_CACHE./* Op
2ba90 63 6f 64 65 3a 20 54 61 62 6c 65 4c 6f 63 6b 20  code: TableLock 
2baa0 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a  P1 P2 P3 P4 *.**
2bab0 0a 2a 2a 20 4f 62 74 61 69 6e 20 61 20 6c 6f 63  .** Obtain a loc
2bac0 6b 20 6f 6e 20 61 20 70 61 72 74 69 63 75 6c 61  k on a particula
2bad0 72 20 74 61 62 6c 65 2e 20 54 68 69 73 20 69 6e  r table. This in
2bae0 73 74 72 75 63 74 69 6f 6e 20 69 73 20 6f 6e 6c  struction is onl
2baf0 79 20 75 73 65 64 20 77 68 65 6e 0a 2a 2a 20 74  y used when.** t
2bb00 68 65 20 73 68 61 72 65 64 2d 63 61 63 68 65 20  he shared-cache 
2bb10 66 65 61 74 75 72 65 20 69 73 20 65 6e 61 62 6c  feature is enabl
2bb20 65 64 2e 20 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73  ed. .**.** P1 is
2bb30 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68   the index of th
2bb40 65 20 64 61 74 61 62 61 73 65 20 69 6e 20 73 71  e database in sq
2bb50 6c 69 74 65 33 2e 61 44 62 5b 5d 20 6f 66 20 74  lite3.aDb[] of t
2bb60 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 6f  he database.** o
2bb70 6e 20 77 68 69 63 68 20 74 68 65 20 6c 6f 63 6b  n which the lock
2bb80 20 69 73 20 61 63 71 75 69 72 65 64 2e 20 20 41   is acquired.  A
2bb90 20 72 65 61 64 6c 6f 63 6b 20 69 73 20 6f 62 74   readlock is obt
2bba0 61 69 6e 65 64 20 69 66 20 50 33 3d 3d 30 20 6f  ained if P3==0 o
2bbb0 72 0a 2a 2a 20 61 20 77 72 69 74 65 20 6c 6f 63  r.** a write loc
2bbc0 6b 20 69 66 20 50 33 3d 3d 31 2e 0a 2a 2a 0a 2a  k if P3==1..**.*
2bbd0 2a 20 50 32 20 63 6f 6e 74 61 69 6e 73 20 74 68  * P2 contains th
2bbe0 65 20 72 6f 6f 74 2d 70 61 67 65 20 6f 66 20 74  e root-page of t
2bbf0 68 65 20 74 61 62 6c 65 20 74 6f 20 6c 6f 63 6b  he table to lock
2bc00 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 63 6f 6e 74 61  ..**.** P4 conta
2bc10 69 6e 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f  ins a pointer to
2bc20 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   the name of the
2bc30 20 74 61 62 6c 65 20 62 65 69 6e 67 20 6c 6f 63   table being loc
2bc40 6b 65 64 2e 20 54 68 69 73 20 69 73 20 6f 6e 6c  ked. This is onl
2bc50 79 0a 2a 2a 20 75 73 65 64 20 74 6f 20 67 65 6e  y.** used to gen
2bc60 65 72 61 74 65 20 61 6e 20 65 72 72 6f 72 20 6d  erate an error m
2bc70 65 73 73 61 67 65 20 69 66 20 74 68 65 20 6c 6f  essage if the lo
2bc80 63 6b 20 63 61 6e 6e 6f 74 20 62 65 20 6f 62 74  ck cannot be obt
2bc90 61 69 6e 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ained..*/.case O
2bca0 50 5f 54 61 62 6c 65 4c 6f 63 6b 3a 20 7b 0a 20  P_TableLock: {. 
2bcb0 20 75 38 20 69 73 57 72 69 74 65 4c 6f 63 6b 20   u8 isWriteLock 
2bcc0 3d 20 28 75 38 29 70 4f 70 2d 3e 70 33 3b 0a 20  = (u8)pOp->p3;. 
2bcd0 20 69 66 28 20 69 73 57 72 69 74 65 4c 6f 63 6b   if( isWriteLock
2bce0 20 7c 7c 20 30 3d 3d 28 64 62 2d 3e 66 6c 61 67   || 0==(db->flag
2bcf0 73 26 53 51 4c 49 54 45 5f 52 65 61 64 55 6e 63  s&SQLITE_ReadUnc
2bd00 6f 6d 6d 69 74 74 65 64 29 20 29 7b 0a 20 20 20  ommitted) ){.   
2bd10 20 69 6e 74 20 70 31 20 3d 20 70 4f 70 2d 3e 70   int p1 = pOp->p
2bd20 31 3b 20 0a 20 20 20 20 61 73 73 65 72 74 28 20  1; .    assert( 
2bd30 70 31 3e 3d 30 20 26 26 20 70 31 3c 64 62 2d 3e  p1>=0 && p1<db->
2bd40 6e 44 62 20 29 3b 0a 20 20 20 20 61 73 73 65 72  nDb );.    asser
2bd50 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b  t( (p->btreeMask
2bd60 20 26 20 28 28 28 79 44 62 4d 61 73 6b 29 31 29   & (((yDbMask)1)
2bd70 3c 3c 70 31 29 29 21 3d 30 20 29 3b 0a 20 20 20  <<p1))!=0 );.   
2bd80 20 61 73 73 65 72 74 28 20 69 73 57 72 69 74 65   assert( isWrite
2bd90 4c 6f 63 6b 3d 3d 30 20 7c 7c 20 69 73 57 72 69  Lock==0 || isWri
2bda0 74 65 4c 6f 63 6b 3d 3d 31 20 29 3b 0a 20 20 20  teLock==1 );.   
2bdb0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
2bdc0 65 65 4c 6f 63 6b 54 61 62 6c 65 28 64 62 2d 3e  eeLockTable(db->
2bdd0 61 44 62 5b 70 31 5d 2e 70 42 74 2c 20 70 4f 70  aDb[p1].pBt, pOp
2bde0 2d 3e 70 32 2c 20 69 73 57 72 69 74 65 4c 6f 63  ->p2, isWriteLoc
2bdf0 6b 29 3b 0a 20 20 20 20 69 66 28 20 28 72 63 26  k);.    if( (rc&
2be00 30 78 46 46 29 3d 3d 53 51 4c 49 54 45 5f 4c 4f  0xFF)==SQLITE_LO
2be10 43 4b 45 44 20 29 7b 0a 20 20 20 20 20 20 63 6f  CKED ){.      co
2be20 6e 73 74 20 63 68 61 72 20 2a 7a 20 3d 20 70 4f  nst char *z = pO
2be30 70 2d 3e 70 34 2e 7a 3b 0a 20 20 20 20 20 20 73  p->p4.z;.      s
2be40 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28  qlite3SetString(
2be50 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c  &p->zErrMsg, db,
2be60 20 22 64 61 74 61 62 61 73 65 20 74 61 62 6c 65   "database table
2be70 20 69 73 20 6c 6f 63 6b 65 64 3a 20 25 73 22 2c   is locked: %s",
2be80 20 7a 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20   z);.    }.  }. 
2be90 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
2bea0 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
2beb0 53 48 41 52 45 44 5f 43 41 43 48 45 20 2a 2f 0a  SHARED_CACHE */.
2bec0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2bed0 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
2bee0 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 42 65  E./* Opcode: VBe
2bef0 67 69 6e 20 2a 20 2a 20 2a 20 50 34 20 2a 0a 2a  gin * * * P4 *.*
2bf00 2a 0a 2a 2a 20 50 34 20 6d 61 79 20 62 65 20 61  *.** P4 may be a
2bf10 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 6e 20 73   pointer to an s
2bf20 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74 72 75  qlite3_vtab stru
2bf30 63 74 75 72 65 2e 20 49 66 20 73 6f 2c 20 63 61  cture. If so, ca
2bf40 6c 6c 20 74 68 65 20 0a 2a 2a 20 78 42 65 67 69  ll the .** xBegi
2bf50 6e 20 6d 65 74 68 6f 64 20 66 6f 72 20 74 68 61  n method for tha
2bf60 74 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41  t table..**.** A
2bf70 6c 73 6f 2c 20 77 68 65 74 68 65 72 20 6f 72 20  lso, whether or 
2bf80 6e 6f 74 20 50 34 20 69 73 20 73 65 74 2c 20 63  not P4 is set, c
2bf90 68 65 63 6b 20 74 68 61 74 20 74 68 69 73 20 69  heck that this i
2bfa0 73 20 6e 6f 74 20 62 65 69 6e 67 20 63 61 6c 6c  s not being call
2bfb0 65 64 20 66 72 6f 6d 0a 2a 2a 20 77 69 74 68 69  ed from.** withi
2bfc0 6e 20 61 20 63 61 6c 6c 62 61 63 6b 20 74 6f 20  n a callback to 
2bfd0 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  a virtual table 
2bfe0 78 53 79 6e 63 28 29 20 6d 65 74 68 6f 64 2e 20  xSync() method. 
2bff0 49 66 20 69 74 20 69 73 2c 20 74 68 65 20 65 72  If it is, the er
2c000 72 6f 72 0a 2a 2a 20 63 6f 64 65 20 77 69 6c 6c  ror.** code will
2c010 20 62 65 20 73 65 74 20 74 6f 20 53 51 4c 49 54   be set to SQLIT
2c020 45 5f 4c 4f 43 4b 45 44 2e 0a 2a 2f 0a 63 61 73  E_LOCKED..*/.cas
2c030 65 20 4f 50 5f 56 42 65 67 69 6e 3a 20 7b 0a 20  e OP_VBegin: {. 
2c040 20 56 54 61 62 6c 65 20 2a 70 56 54 61 62 3b 0a   VTable *pVTab;.
2c050 20 20 70 56 54 61 62 20 3d 20 70 4f 70 2d 3e 70    pVTab = pOp->p
2c060 34 2e 70 56 74 61 62 3b 0a 20 20 72 63 20 3d 20  4.pVtab;.  rc = 
2c070 73 71 6c 69 74 65 33 56 74 61 62 42 65 67 69 6e  sqlite3VtabBegin
2c080 28 64 62 2c 20 70 56 54 61 62 29 3b 0a 20 20 69  (db, pVTab);.  i
2c090 66 28 20 70 56 54 61 62 20 29 20 69 6d 70 6f 72  f( pVTab ) impor
2c0a0 74 56 74 61 62 45 72 72 4d 73 67 28 70 2c 20 70  tVtabErrMsg(p, p
2c0b0 56 54 61 62 2d 3e 70 56 74 61 62 29 3b 0a 20 20  VTab->pVtab);.  
2c0c0 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20  break;.}.#endif 
2c0d0 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  /* SQLITE_OMIT_V
2c0e0 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a  IRTUALTABLE */..
2c0f0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2c100 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
2c110 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 43 72 65  ./* Opcode: VCre
2c120 61 74 65 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a  ate P1 * * P4 *.
2c130 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 74 68 65 20  **.** P4 is the 
2c140 6e 61 6d 65 20 6f 66 20 61 20 76 69 72 74 75 61  name of a virtua
2c150 6c 20 74 61 62 6c 65 20 69 6e 20 64 61 74 61 62  l table in datab
2c160 61 73 65 20 50 31 2e 20 43 61 6c 6c 20 74 68 65  ase P1. Call the
2c170 20 78 43 72 65 61 74 65 20 6d 65 74 68 6f 64 0a   xCreate method.
2c180 2a 2a 20 66 6f 72 20 74 68 61 74 20 74 61 62 6c  ** for that tabl
2c190 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 43  e..*/.case OP_VC
2c1a0 72 65 61 74 65 3a 20 7b 0a 20 20 72 63 20 3d 20  reate: {.  rc = 
2c1b0 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 43  sqlite3VtabCallC
2c1c0 72 65 61 74 65 28 64 62 2c 20 70 4f 70 2d 3e 70  reate(db, pOp->p
2c1d0 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 26 70  1, pOp->p4.z, &p
2c1e0 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 62 72  ->zErrMsg);.  br
2c1f0 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
2c200 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
2c210 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69  TUALTABLE */..#i
2c220 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2c230 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f  T_VIRTUALTABLE./
2c240 2a 20 4f 70 63 6f 64 65 3a 20 56 44 65 73 74 72  * Opcode: VDestr
2c250 6f 79 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a  oy P1 * * P4 *.*
2c260 2a 0a 2a 2a 20 50 34 20 69 73 20 74 68 65 20 6e  *.** P4 is the n
2c270 61 6d 65 20 6f 66 20 61 20 76 69 72 74 75 61 6c  ame of a virtual
2c280 20 74 61 62 6c 65 20 69 6e 20 64 61 74 61 62 61   table in databa
2c290 73 65 20 50 31 2e 20 20 43 61 6c 6c 20 74 68 65  se P1.  Call the
2c2a0 20 78 44 65 73 74 72 6f 79 20 6d 65 74 68 6f 64   xDestroy method
2c2b0 0a 2a 2a 20 6f 66 20 74 68 61 74 20 74 61 62 6c  .** of that tabl
2c2c0 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 44  e..*/.case OP_VD
2c2d0 65 73 74 72 6f 79 3a 20 7b 0a 20 20 70 2d 3e 69  estroy: {.  p->i
2c2e0 6e 56 74 61 62 4d 65 74 68 6f 64 20 3d 20 32 3b  nVtabMethod = 2;
2c2f0 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
2c300 74 61 62 43 61 6c 6c 44 65 73 74 72 6f 79 28 64  tabCallDestroy(d
2c310 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d  b, pOp->p1, pOp-
2c320 3e 70 34 2e 7a 29 3b 0a 20 20 70 2d 3e 69 6e 56  >p4.z);.  p->inV
2c330 74 61 62 4d 65 74 68 6f 64 20 3d 20 30 3b 0a 20  tabMethod = 0;. 
2c340 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
2c350 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
2c360 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a  VIRTUALTABLE */.
2c370 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2c380 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
2c390 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 4f 70  E./* Opcode: VOp
2c3a0 65 6e 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a  en P1 * * P4 *.*
2c3b0 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69  *.** P4 is a poi
2c3c0 6e 74 65 72 20 74 6f 20 61 20 76 69 72 74 75 61  nter to a virtua
2c3d0 6c 20 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20  l table object, 
2c3e0 61 6e 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  an sqlite3_vtab 
2c3f0 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 20 50 31  structure..** P1
2c400 20 69 73 20 61 20 63 75 72 73 6f 72 20 6e 75 6d   is a cursor num
2c410 62 65 72 2e 20 20 54 68 69 73 20 6f 70 63 6f 64  ber.  This opcod
2c420 65 20 6f 70 65 6e 73 20 61 20 63 75 72 73 6f 72  e opens a cursor
2c430 20 74 6f 20 74 68 65 20 76 69 72 74 75 61 6c 0a   to the virtual.
2c440 2a 2a 20 74 61 62 6c 65 20 61 6e 64 20 73 74 6f  ** table and sto
2c450 72 65 73 20 74 68 61 74 20 63 75 72 73 6f 72 20  res that cursor 
2c460 69 6e 20 50 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f  in P1..*/.case O
2c470 50 5f 56 4f 70 65 6e 3a 20 7b 0a 20 20 56 64 62  P_VOpen: {.  Vdb
2c480 65 43 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a 20  eCursor *pCur;. 
2c490 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75   sqlite3_vtab_cu
2c4a0 72 73 6f 72 20 2a 70 56 74 61 62 43 75 72 73 6f  rsor *pVtabCurso
2c4b0 72 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61  r;.  sqlite3_vta
2c4c0 62 20 2a 70 56 74 61 62 3b 0a 20 20 73 71 6c 69  b *pVtab;.  sqli
2c4d0 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64  te3_module *pMod
2c4e0 75 6c 65 3b 0a 0a 20 20 70 43 75 72 20 3d 20 30  ule;..  pCur = 0
2c4f0 3b 0a 20 20 70 56 74 61 62 43 75 72 73 6f 72 20  ;.  pVtabCursor 
2c500 3d 20 30 3b 0a 20 20 70 56 74 61 62 20 3d 20 70  = 0;.  pVtab = p
2c510 4f 70 2d 3e 70 34 2e 70 56 74 61 62 2d 3e 70 56  Op->p4.pVtab->pV
2c520 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d  tab;.  pModule =
2c530 20 28 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65   (sqlite3_module
2c540 20 2a 29 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c   *)pVtab->pModul
2c550 65 3b 0a 20 20 61 73 73 65 72 74 28 70 56 74 61  e;.  assert(pVta
2c560 62 20 26 26 20 70 4d 6f 64 75 6c 65 29 3b 0a 20  b && pModule);. 
2c570 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78   rc = pModule->x
2c580 4f 70 65 6e 28 70 56 74 61 62 2c 20 26 70 56 74  Open(pVtab, &pVt
2c590 61 62 43 75 72 73 6f 72 29 3b 0a 20 20 69 6d 70  abCursor);.  imp
2c5a0 6f 72 74 56 74 61 62 45 72 72 4d 73 67 28 70 2c  ortVtabErrMsg(p,
2c5b0 20 70 56 74 61 62 29 3b 0a 20 20 69 66 28 20 53   pVtab);.  if( S
2c5c0 51 4c 49 54 45 5f 4f 4b 3d 3d 72 63 20 29 7b 0a  QLITE_OK==rc ){.
2c5d0 20 20 20 20 2f 2a 20 49 6e 69 74 69 61 6c 69 7a      /* Initializ
2c5e0 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63  e sqlite3_vtab_c
2c5f0 75 72 73 6f 72 20 62 61 73 65 20 63 6c 61 73 73  ursor base class
2c600 20 2a 2f 0a 20 20 20 20 70 56 74 61 62 43 75 72   */.    pVtabCur
2c610 73 6f 72 2d 3e 70 56 74 61 62 20 3d 20 70 56 74  sor->pVtab = pVt
2c620 61 62 3b 0a 0a 20 20 20 20 2f 2a 20 49 6e 69 74  ab;..    /* Init
2c630 69 61 6c 69 73 65 20 76 64 62 65 20 63 75 72 73  ialise vdbe curs
2c640 6f 72 20 6f 62 6a 65 63 74 20 2a 2f 0a 20 20 20  or object */.   
2c650 20 70 43 75 72 20 3d 20 61 6c 6c 6f 63 61 74 65   pCur = allocate
2c660 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70  Cursor(p, pOp->p
2c670 31 2c 20 30 2c 20 2d 31 2c 20 30 29 3b 0a 20 20  1, 0, -1, 0);.  
2c680 20 20 69 66 28 20 70 43 75 72 20 29 7b 0a 20 20    if( pCur ){.  
2c690 20 20 20 20 70 43 75 72 2d 3e 70 56 74 61 62 43      pCur->pVtabC
2c6a0 75 72 73 6f 72 20 3d 20 70 56 74 61 62 43 75 72  ursor = pVtabCur
2c6b0 73 6f 72 3b 0a 20 20 20 20 20 20 70 43 75 72 2d  sor;.      pCur-
2c6c0 3e 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62  >pModule = pVtab
2c6d0 43 75 72 73 6f 72 2d 3e 70 56 74 61 62 2d 3e 70  Cursor->pVtab->p
2c6e0 4d 6f 64 75 6c 65 3b 0a 20 20 20 20 7d 65 6c 73  Module;.    }els
2c6f0 65 7b 0a 20 20 20 20 20 20 64 62 2d 3e 6d 61 6c  e{.      db->mal
2c700 6c 6f 63 46 61 69 6c 65 64 20 3d 20 31 3b 0a 20  locFailed = 1;. 
2c710 20 20 20 20 20 70 4d 6f 64 75 6c 65 2d 3e 78 43       pModule->xC
2c720 6c 6f 73 65 28 70 56 74 61 62 43 75 72 73 6f 72  lose(pVtabCursor
2c730 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62  );.    }.  }.  b
2c740 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  reak;.}.#endif /
2c750 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  * SQLITE_OMIT_VI
2c760 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23  RTUALTABLE */..#
2c770 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2c780 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
2c790 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 46 69 6c 74  /* Opcode: VFilt
2c7a0 65 72 20 50 31 20 50 32 20 50 33 20 50 34 20 2a  er P1 P2 P3 P4 *
2c7b0 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 63  .**.** P1 is a c
2c7c0 75 72 73 6f 72 20 6f 70 65 6e 65 64 20 75 73 69  ursor opened usi
2c7d0 6e 67 20 56 4f 70 65 6e 2e 20 20 50 32 20 69 73  ng VOpen.  P2 is
2c7e0 20 61 6e 20 61 64 64 72 65 73 73 20 74 6f 20 6a   an address to j
2c7f0 75 6d 70 20 74 6f 20 69 66 0a 2a 2a 20 74 68 65  ump to if.** the
2c800 20 66 69 6c 74 65 72 65 64 20 72 65 73 75 6c 74   filtered result
2c810 20 73 65 74 20 69 73 20 65 6d 70 74 79 2e 0a 2a   set is empty..*
2c820 2a 0a 2a 2a 20 50 34 20 69 73 20 65 69 74 68 65  *.** P4 is eithe
2c830 72 20 4e 55 4c 4c 20 6f 72 20 61 20 73 74 72 69  r NULL or a stri
2c840 6e 67 20 74 68 61 74 20 77 61 73 20 67 65 6e 65  ng that was gene
2c850 72 61 74 65 64 20 62 79 20 74 68 65 20 78 42 65  rated by the xBe
2c860 73 74 49 6e 64 65 78 0a 2a 2a 20 6d 65 74 68 6f  stIndex.** metho
2c870 64 20 6f 66 20 74 68 65 20 6d 6f 64 75 6c 65 2e  d of the module.
2c880 20 20 54 68 65 20 69 6e 74 65 72 70 72 65 74 61    The interpreta
2c890 74 69 6f 6e 20 6f 66 20 74 68 65 20 50 34 20 73  tion of the P4 s
2c8a0 74 72 69 6e 67 20 69 73 20 6c 65 66 74 0a 2a 2a  tring is left.**
2c8b0 20 74 6f 20 74 68 65 20 6d 6f 64 75 6c 65 20 69   to the module i
2c8c0 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 0a 2a  mplementation..*
2c8d0 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
2c8e0 20 69 6e 76 6f 6b 65 73 20 74 68 65 20 78 46 69   invokes the xFi
2c8f0 6c 74 65 72 20 6d 65 74 68 6f 64 20 6f 6e 20 74  lter method on t
2c900 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
2c910 20 73 70 65 63 69 66 69 65 64 0a 2a 2a 20 62 79   specified.** by
2c920 20 50 31 2e 20 20 54 68 65 20 69 6e 74 65 67 65   P1.  The intege
2c930 72 20 71 75 65 72 79 20 70 6c 61 6e 20 70 61 72  r query plan par
2c940 61 6d 65 74 65 72 20 74 6f 20 78 46 69 6c 74 65  ameter to xFilte
2c950 72 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72  r is stored in r
2c960 65 67 69 73 74 65 72 0a 2a 2a 20 50 33 2e 20 52  egister.** P3. R
2c970 65 67 69 73 74 65 72 20 50 33 2b 31 20 73 74 6f  egister P3+1 sto
2c980 72 65 73 20 74 68 65 20 61 72 67 63 20 70 61 72  res the argc par
2c990 61 6d 65 74 65 72 20 74 6f 20 62 65 20 70 61 73  ameter to be pas
2c9a0 73 65 64 20 74 6f 20 74 68 65 0a 2a 2a 20 78 46  sed to the.** xF
2c9b0 69 6c 74 65 72 20 6d 65 74 68 6f 64 2e 20 52 65  ilter method. Re
2c9c0 67 69 73 74 65 72 73 20 50 33 2b 32 2e 2e 50 33  gisters P3+2..P3
2c9d0 2b 31 2b 61 72 67 63 20 61 72 65 20 74 68 65 20  +1+argc are the 
2c9e0 61 72 67 63 0a 2a 2a 20 61 64 64 69 74 69 6f 6e  argc.** addition
2c9f0 61 6c 20 70 61 72 61 6d 65 74 65 72 73 20 77 68  al parameters wh
2ca00 69 63 68 20 61 72 65 20 70 61 73 73 65 64 20 74  ich are passed t
2ca10 6f 0a 2a 2a 20 78 46 69 6c 74 65 72 20 61 73 20  o.** xFilter as 
2ca20 61 72 67 76 2e 20 52 65 67 69 73 74 65 72 20 50  argv. Register P
2ca30 33 2b 32 20 62 65 63 6f 6d 65 73 20 61 72 67 76  3+2 becomes argv
2ca40 5b 30 5d 20 77 68 65 6e 20 70 61 73 73 65 64 20  [0] when passed 
2ca50 74 6f 20 78 46 69 6c 74 65 72 2e 0a 2a 2a 0a 2a  to xFilter..**.*
2ca60 2a 20 41 20 6a 75 6d 70 20 69 73 20 6d 61 64 65  * A jump is made
2ca70 20 74 6f 20 50 32 20 69 66 20 74 68 65 20 72 65   to P2 if the re
2ca80 73 75 6c 74 20 73 65 74 20 61 66 74 65 72 20 66  sult set after f
2ca90 69 6c 74 65 72 69 6e 67 20 77 6f 75 6c 64 20 62  iltering would b
2caa0 65 20 65 6d 70 74 79 2e 0a 2a 2f 0a 63 61 73 65  e empty..*/.case
2cab0 20 4f 50 5f 56 46 69 6c 74 65 72 3a 20 7b 20 20   OP_VFilter: {  
2cac0 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e   /* jump */.  in
2cad0 74 20 6e 41 72 67 3b 0a 20 20 69 6e 74 20 69 51  t nArg;.  int iQ
2cae0 75 65 72 79 3b 0a 20 20 63 6f 6e 73 74 20 73 71  uery;.  const sq
2caf0 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d  lite3_module *pM
2cb00 6f 64 75 6c 65 3b 0a 20 20 4d 65 6d 20 2a 70 51  odule;.  Mem *pQ
2cb10 75 65 72 79 3b 0a 20 20 4d 65 6d 20 2a 70 41 72  uery;.  Mem *pAr
2cb20 67 63 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74  gc;.  sqlite3_vt
2cb30 61 62 5f 63 75 72 73 6f 72 20 2a 70 56 74 61 62  ab_cursor *pVtab
2cb40 43 75 72 73 6f 72 3b 0a 20 20 73 71 6c 69 74 65  Cursor;.  sqlite
2cb50 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20  3_vtab *pVtab;. 
2cb60 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 75   VdbeCursor *pCu
2cb70 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20  r;.  int res;.  
2cb80 69 6e 74 20 69 3b 0a 20 20 4d 65 6d 20 2a 2a 61  int i;.  Mem **a
2cb90 70 41 72 67 3b 0a 0a 20 20 70 51 75 65 72 79 20  pArg;..  pQuery 
2cba0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
2cbb0 3b 0a 20 20 70 41 72 67 63 20 3d 20 26 70 51 75  ;.  pArgc = &pQu
2cbc0 65 72 79 5b 31 5d 3b 0a 20 20 70 43 75 72 20 3d  ery[1];.  pCur =
2cbd0 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
2cbe0 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 6d 65  1];.  assert( me
2cbf0 6d 49 73 56 61 6c 69 64 28 70 51 75 65 72 79 29  mIsValid(pQuery)
2cc00 20 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54   );.  REGISTER_T
2cc10 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 51  RACE(pOp->p3, pQ
2cc20 75 65 72 79 29 3b 0a 20 20 61 73 73 65 72 74 28  uery);.  assert(
2cc30 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73   pCur->pVtabCurs
2cc40 6f 72 20 29 3b 0a 20 20 70 56 74 61 62 43 75 72  or );.  pVtabCur
2cc50 73 6f 72 20 3d 20 70 43 75 72 2d 3e 70 56 74 61  sor = pCur->pVta
2cc60 62 43 75 72 73 6f 72 3b 0a 20 20 70 56 74 61 62  bCursor;.  pVtab
2cc70 20 3d 20 70 56 74 61 62 43 75 72 73 6f 72 2d 3e   = pVtabCursor->
2cc80 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65  pVtab;.  pModule
2cc90 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c   = pVtab->pModul
2cca0 65 3b 0a 0a 20 20 2f 2a 20 47 72 61 62 20 74 68  e;..  /* Grab th
2ccb0 65 20 69 6e 64 65 78 20 6e 75 6d 62 65 72 20 61  e index number a
2ccc0 6e 64 20 61 72 67 63 20 70 61 72 61 6d 65 74 65  nd argc paramete
2ccd0 72 73 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  rs */.  assert( 
2cce0 28 70 51 75 65 72 79 2d 3e 66 6c 61 67 73 26 4d  (pQuery->flags&M
2ccf0 45 4d 5f 49 6e 74 29 21 3d 30 20 26 26 20 70 41  EM_Int)!=0 && pA
2cd00 72 67 63 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d 5f  rgc->flags==MEM_
2cd10 49 6e 74 20 29 3b 0a 20 20 6e 41 72 67 20 3d 20  Int );.  nArg = 
2cd20 28 69 6e 74 29 70 41 72 67 63 2d 3e 75 2e 69 3b  (int)pArgc->u.i;
2cd30 0a 20 20 69 51 75 65 72 79 20 3d 20 28 69 6e 74  .  iQuery = (int
2cd40 29 70 51 75 65 72 79 2d 3e 75 2e 69 3b 0a 0a 20  )pQuery->u.i;.. 
2cd50 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 78   /* Invoke the x
2cd60 46 69 6c 74 65 72 20 6d 65 74 68 6f 64 20 2a 2f  Filter method */
2cd70 0a 20 20 7b 0a 20 20 20 20 72 65 73 20 3d 20 30  .  {.    res = 0
2cd80 3b 0a 20 20 20 20 61 70 41 72 67 20 3d 20 70 2d  ;.    apArg = p-
2cd90 3e 61 70 41 72 67 3b 0a 20 20 20 20 66 6f 72 28  >apArg;.    for(
2cda0 69 20 3d 20 30 3b 20 69 3c 6e 41 72 67 3b 20 69  i = 0; i<nArg; i
2cdb0 2b 2b 29 7b 0a 20 20 20 20 20 20 61 70 41 72 67  ++){.      apArg
2cdc0 5b 69 5d 20 3d 20 26 70 41 72 67 63 5b 69 2b 31  [i] = &pArgc[i+1
2cdd0 5d 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ];.      sqlite3
2cde0 56 64 62 65 4d 65 6d 53 74 6f 72 65 54 79 70 65  VdbeMemStoreType
2cdf0 28 61 70 41 72 67 5b 69 5d 29 3b 0a 20 20 20 20  (apArg[i]);.    
2ce00 7d 0a 0a 20 20 20 20 70 2d 3e 69 6e 56 74 61 62  }..    p->inVtab
2ce10 4d 65 74 68 6f 64 20 3d 20 31 3b 0a 20 20 20 20  Method = 1;.    
2ce20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 46  rc = pModule->xF
2ce30 69 6c 74 65 72 28 70 56 74 61 62 43 75 72 73 6f  ilter(pVtabCurso
2ce40 72 2c 20 69 51 75 65 72 79 2c 20 70 4f 70 2d 3e  r, iQuery, pOp->
2ce50 70 34 2e 7a 2c 20 6e 41 72 67 2c 20 61 70 41 72  p4.z, nArg, apAr
2ce60 67 29 3b 0a 20 20 20 20 70 2d 3e 69 6e 56 74 61  g);.    p->inVta
2ce70 62 4d 65 74 68 6f 64 20 3d 20 30 3b 0a 20 20 20  bMethod = 0;.   
2ce80 20 69 6d 70 6f 72 74 56 74 61 62 45 72 72 4d 73   importVtabErrMs
2ce90 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 20  g(p, pVtab);.   
2cea0 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
2ceb0 4f 4b 20 29 7b 0a 20 20 20 20 20 20 72 65 73 20  OK ){.      res 
2cec0 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 45 6f 66 28  = pModule->xEof(
2ced0 70 56 74 61 62 43 75 72 73 6f 72 29 3b 0a 20 20  pVtabCursor);.  
2cee0 20 20 7d 0a 0a 20 20 20 20 69 66 28 20 72 65 73    }..    if( res
2cef0 20 29 7b 0a 20 20 20 20 20 20 70 63 20 3d 20 70   ){.      pc = p
2cf00 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20  Op->p2 - 1;.    
2cf10 7d 0a 20 20 7d 0a 20 20 70 43 75 72 2d 3e 6e 75  }.  }.  pCur->nu
2cf20 6c 6c 52 6f 77 20 3d 20 30 3b 0a 0a 20 20 62 72  llRow = 0;..  br
2cf30 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
2cf40 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
2cf50 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69  TUALTABLE */..#i
2cf60 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2cf70 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f  T_VIRTUALTABLE./
2cf80 2a 20 4f 70 63 6f 64 65 3a 20 56 43 6f 6c 75 6d  * Opcode: VColum
2cf90 6e 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  n P1 P2 P3 * *.*
2cfa0 2a 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 76  *.** Store the v
2cfb0 61 6c 75 65 20 6f 66 20 74 68 65 20 50 32 2d 74  alue of the P2-t
2cfc0 68 20 63 6f 6c 75 6d 6e 20 6f 66 0a 2a 2a 20 74  h column of.** t
2cfd0 68 65 20 72 6f 77 20 6f 66 20 74 68 65 20 76 69  he row of the vi
2cfe0 72 74 75 61 6c 2d 74 61 62 6c 65 20 74 68 61 74  rtual-table that
2cff0 20 74 68 65 20 0a 2a 2a 20 50 31 20 63 75 72 73   the .** P1 curs
2d000 6f 72 20 69 73 20 70 6f 69 6e 74 69 6e 67 20 74  or is pointing t
2d010 6f 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  o into register 
2d020 50 33 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56  P3..*/.case OP_V
2d030 43 6f 6c 75 6d 6e 3a 20 7b 0a 20 20 73 71 6c 69  Column: {.  sqli
2d040 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b  te3_vtab *pVtab;
2d050 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33  .  const sqlite3
2d060 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65  _module *pModule
2d070 3b 0a 20 20 4d 65 6d 20 2a 70 44 65 73 74 3b 0a  ;.  Mem *pDest;.
2d080 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78    sqlite3_contex
2d090 74 20 73 43 6f 6e 74 65 78 74 3b 0a 0a 20 20 56  t sContext;..  V
2d0a0 64 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72 20  dbeCursor *pCur 
2d0b0 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
2d0c0 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
2d0d0 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72  Cur->pVtabCursor
2d0e0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
2d0f0 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p3>0 && pOp->
2d100 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20  p3<=p->nMem );. 
2d110 20 70 44 65 73 74 20 3d 20 26 61 4d 65 6d 5b 70   pDest = &aMem[p
2d120 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41 62  Op->p3];.  memAb
2d130 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70  outToChange(p, p
2d140 44 65 73 74 29 3b 0a 20 20 69 66 28 20 70 43 75  Dest);.  if( pCu
2d150 72 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20  r->nullRow ){.  
2d160 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
2d170 53 65 74 4e 75 6c 6c 28 70 44 65 73 74 29 3b 0a  SetNull(pDest);.
2d180 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20      break;.  }. 
2d190 20 70 56 74 61 62 20 3d 20 70 43 75 72 2d 3e 70   pVtab = pCur->p
2d1a0 56 74 61 62 43 75 72 73 6f 72 2d 3e 70 56 74 61  VtabCursor->pVta
2d1b0 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70  b;.  pModule = p
2d1c0 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20  Vtab->pModule;. 
2d1d0 20 61 73 73 65 72 74 28 20 70 4d 6f 64 75 6c 65   assert( pModule
2d1e0 2d 3e 78 43 6f 6c 75 6d 6e 20 29 3b 0a 20 20 6d  ->xColumn );.  m
2d1f0 65 6d 73 65 74 28 26 73 43 6f 6e 74 65 78 74 2c  emset(&sContext,
2d200 20 30 2c 20 73 69 7a 65 6f 66 28 73 43 6f 6e 74   0, sizeof(sCont
2d210 65 78 74 29 29 3b 0a 0a 20 20 2f 2a 20 54 68 65  ext));..  /* The
2d220 20 6f 75 74 70 75 74 20 63 65 6c 6c 20 6d 61 79   output cell may
2d230 20 61 6c 72 65 61 64 79 20 68 61 76 65 20 61 20   already have a 
2d240 62 75 66 66 65 72 20 61 6c 6c 6f 63 61 74 65 64  buffer allocated
2d250 2e 20 4d 6f 76 65 0a 20 20 2a 2a 20 74 68 65 20  . Move.  ** the 
2d260 63 75 72 72 65 6e 74 20 63 6f 6e 74 65 6e 74 73  current contents
2d270 20 74 6f 20 73 43 6f 6e 74 65 78 74 2e 73 20 73   to sContext.s s
2d280 6f 20 69 6e 20 63 61 73 65 20 74 68 65 20 75 73  o in case the us
2d290 65 72 2d 66 75 6e 63 74 69 6f 6e 20 0a 20 20 2a  er-function .  *
2d2a0 2a 20 63 61 6e 20 75 73 65 20 74 68 65 20 61 6c  * can use the al
2d2b0 72 65 61 64 79 20 61 6c 6c 6f 63 61 74 65 64 20  ready allocated 
2d2c0 62 75 66 66 65 72 20 69 6e 73 74 65 61 64 20 6f  buffer instead o
2d2d0 66 20 61 6c 6c 6f 63 61 74 69 6e 67 20 61 20 0a  f allocating a .
2d2e0 20 20 2a 2a 20 6e 65 77 20 6f 6e 65 2e 0a 20 20    ** new one..  
2d2f0 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  */.  sqlite3Vdbe
2d300 4d 65 6d 4d 6f 76 65 28 26 73 43 6f 6e 74 65 78  MemMove(&sContex
2d310 74 2e 73 2c 20 70 44 65 73 74 29 3b 0a 20 20 4d  t.s, pDest);.  M
2d320 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 26 73  emSetTypeFlag(&s
2d330 43 6f 6e 74 65 78 74 2e 73 2c 20 4d 45 4d 5f 4e  Context.s, MEM_N
2d340 75 6c 6c 29 3b 0a 0a 20 20 72 63 20 3d 20 70 4d  ull);..  rc = pM
2d350 6f 64 75 6c 65 2d 3e 78 43 6f 6c 75 6d 6e 28 70  odule->xColumn(p
2d360 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72  Cur->pVtabCursor
2d370 2c 20 26 73 43 6f 6e 74 65 78 74 2c 20 70 4f 70  , &sContext, pOp
2d380 2d 3e 70 32 29 3b 0a 20 20 69 6d 70 6f 72 74 56  ->p2);.  importV
2d390 74 61 62 45 72 72 4d 73 67 28 70 2c 20 70 56 74  tabErrMsg(p, pVt
2d3a0 61 62 29 3b 0a 20 20 69 66 28 20 73 43 6f 6e 74  ab);.  if( sCont
2d3b0 65 78 74 2e 69 73 45 72 72 6f 72 20 29 7b 0a 20  ext.isError ){. 
2d3c0 20 20 20 72 63 20 3d 20 73 43 6f 6e 74 65 78 74     rc = sContext
2d3d0 2e 69 73 45 72 72 6f 72 3b 0a 20 20 7d 0a 0a 20  .isError;.  }.. 
2d3e0 20 2f 2a 20 43 6f 70 79 20 74 68 65 20 72 65 73   /* Copy the res
2d3f0 75 6c 74 20 6f 66 20 74 68 65 20 66 75 6e 63 74  ult of the funct
2d400 69 6f 6e 20 74 6f 20 74 68 65 20 50 33 20 72 65  ion to the P3 re
2d410 67 69 73 74 65 72 2e 20 57 65 0a 20 20 2a 2a 20  gister. We.  ** 
2d420 64 6f 20 74 68 69 73 20 72 65 67 61 72 64 6c 65  do this regardle
2d430 73 73 20 6f 66 20 77 68 65 74 68 65 72 20 6f 72  ss of whether or
2d440 20 6e 6f 74 20 61 6e 20 65 72 72 6f 72 20 6f 63   not an error oc
2d450 63 75 72 72 65 64 20 74 6f 20 65 6e 73 75 72 65  curred to ensure
2d460 20 61 6e 79 0a 20 20 2a 2a 20 64 79 6e 61 6d 69   any.  ** dynami
2d470 63 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e 20  c allocation in 
2d480 73 43 6f 6e 74 65 78 74 2e 73 20 28 61 20 4d 65  sContext.s (a Me
2d490 6d 20 73 74 72 75 63 74 29 20 69 73 20 20 72 65  m struct) is  re
2d4a0 6c 65 61 73 65 64 2e 0a 20 20 2a 2f 0a 20 20 73  leased..  */.  s
2d4b0 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
2d4c0 45 6e 63 6f 64 69 6e 67 28 26 73 43 6f 6e 74 65  Encoding(&sConte
2d4d0 78 74 2e 73 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  xt.s, encoding);
2d4e0 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
2d4f0 6d 4d 6f 76 65 28 70 44 65 73 74 2c 20 26 73 43  mMove(pDest, &sC
2d500 6f 6e 74 65 78 74 2e 73 29 3b 0a 20 20 52 45 47  ontext.s);.  REG
2d510 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
2d520 3e 70 33 2c 20 70 44 65 73 74 29 3b 0a 20 20 55  >p3, pDest);.  U
2d530 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49  PDATE_MAX_BLOBSI
2d540 5a 45 28 70 44 65 73 74 29 3b 0a 0a 20 20 69 66  ZE(pDest);..  if
2d550 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  ( sqlite3VdbeMem
2d560 54 6f 6f 42 69 67 28 70 44 65 73 74 29 20 29 7b  TooBig(pDest) ){
2d570 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69  .    goto too_bi
2d580 67 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  g;.  }.  break;.
2d590 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
2d5a0 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
2d5b0 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  ABLE */..#ifndef
2d5c0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
2d5d0 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63  TUALTABLE./* Opc
2d5e0 6f 64 65 3a 20 56 4e 65 78 74 20 50 31 20 50 32  ode: VNext P1 P2
2d5f0 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 64 76   * * *.**.** Adv
2d600 61 6e 63 65 20 76 69 72 74 75 61 6c 20 74 61 62  ance virtual tab
2d610 6c 65 20 50 31 20 74 6f 20 74 68 65 20 6e 65 78  le P1 to the nex
2d620 74 20 72 6f 77 20 69 6e 20 69 74 73 20 72 65 73  t row in its res
2d630 75 6c 74 20 73 65 74 20 61 6e 64 0a 2a 2a 20 6a  ult set and.** j
2d640 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69  ump to instructi
2d650 6f 6e 20 50 32 2e 20 20 4f 72 2c 20 69 66 20 74  on P2.  Or, if t
2d660 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
2d670 20 68 61 73 20 72 65 61 63 68 65 64 0a 2a 2a 20   has reached.** 
2d680 74 68 65 20 65 6e 64 20 6f 66 20 69 74 73 20 72  the end of its r
2d690 65 73 75 6c 74 20 73 65 74 2c 20 74 68 65 6e 20  esult set, then 
2d6a0 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  fall through to 
2d6b0 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63  the next instruc
2d6c0 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  tion..*/.case OP
2d6d0 5f 56 4e 65 78 74 3a 20 7b 20 20 20 2f 2a 20 6a  _VNext: {   /* j
2d6e0 75 6d 70 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  ump */.  sqlite3
2d6f0 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20  _vtab *pVtab;.  
2d700 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f  const sqlite3_mo
2d710 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20  dule *pModule;. 
2d720 20 69 6e 74 20 72 65 73 3b 0a 20 20 56 64 62 65   int res;.  Vdbe
2d730 43 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a 0a 20  Cursor *pCur;.. 
2d740 20 72 65 73 20 3d 20 30 3b 0a 20 20 70 43 75 72   res = 0;.  pCur
2d750 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
2d760 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
2d770 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f  pCur->pVtabCurso
2d780 72 20 29 3b 0a 20 20 69 66 28 20 70 43 75 72 2d  r );.  if( pCur-
2d790 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20  >nullRow ){.    
2d7a0 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 56 74  break;.  }.  pVt
2d7b0 61 62 20 3d 20 70 43 75 72 2d 3e 70 56 74 61 62  ab = pCur->pVtab
2d7c0 43 75 72 73 6f 72 2d 3e 70 56 74 61 62 3b 0a 20  Cursor->pVtab;. 
2d7d0 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62   pModule = pVtab
2d7e0 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 61 73 73  ->pModule;.  ass
2d7f0 65 72 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 4e  ert( pModule->xN
2d800 65 78 74 20 29 3b 0a 0a 20 20 2f 2a 20 49 6e 76  ext );..  /* Inv
2d810 6f 6b 65 20 74 68 65 20 78 4e 65 78 74 28 29 20  oke the xNext() 
2d820 6d 65 74 68 6f 64 20 6f 66 20 74 68 65 20 6d 6f  method of the mo
2d830 64 75 6c 65 2e 20 54 68 65 72 65 20 69 73 20 6e  dule. There is n
2d840 6f 20 77 61 79 20 66 6f 72 20 74 68 65 0a 20 20  o way for the.  
2d850 2a 2a 20 75 6e 64 65 72 6c 79 69 6e 67 20 69 6d  ** underlying im
2d860 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 74 6f 20  plementation to 
2d870 72 65 74 75 72 6e 20 61 6e 20 65 72 72 6f 72 20  return an error 
2d880 69 66 20 6f 6e 65 20 6f 63 63 75 72 73 20 64 75  if one occurs du
2d890 72 69 6e 67 0a 20 20 2a 2a 20 78 4e 65 78 74 28  ring.  ** xNext(
2d8a0 29 2e 20 49 6e 73 74 65 61 64 2c 20 69 66 20 61  ). Instead, if a
2d8b0 6e 20 65 72 72 6f 72 20 6f 63 63 75 72 73 2c 20  n error occurs, 
2d8c0 74 72 75 65 20 69 73 20 72 65 74 75 72 6e 65 64  true is returned
2d8d0 20 28 69 6e 64 69 63 61 74 69 6e 67 20 74 68 61   (indicating tha
2d8e0 74 20 0a 20 20 2a 2a 20 64 61 74 61 20 69 73 20  t .  ** data is 
2d8f0 61 76 61 69 6c 61 62 6c 65 29 20 61 6e 64 20 74  available) and t
2d900 68 65 20 65 72 72 6f 72 20 63 6f 64 65 20 72 65  he error code re
2d910 74 75 72 6e 65 64 20 77 68 65 6e 20 78 43 6f 6c  turned when xCol
2d920 75 6d 6e 20 6f 72 0a 20 20 2a 2a 20 73 6f 6d 65  umn or.  ** some
2d930 20 6f 74 68 65 72 20 6d 65 74 68 6f 64 20 69 73   other method is
2d940 20 6e 65 78 74 20 69 6e 76 6f 6b 65 64 20 6f 6e   next invoked on
2d950 20 74 68 65 20 73 61 76 65 20 76 69 72 74 75 61   the save virtua
2d960 6c 20 74 61 62 6c 65 20 63 75 72 73 6f 72 2e 0a  l table cursor..
2d970 20 20 2a 2f 0a 20 20 70 2d 3e 69 6e 56 74 61 62    */.  p->inVtab
2d980 4d 65 74 68 6f 64 20 3d 20 31 3b 0a 20 20 72 63  Method = 1;.  rc
2d990 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 4e 65 78   = pModule->xNex
2d9a0 74 28 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72  t(pCur->pVtabCur
2d9b0 73 6f 72 29 3b 0a 20 20 70 2d 3e 69 6e 56 74 61  sor);.  p->inVta
2d9c0 62 4d 65 74 68 6f 64 20 3d 20 30 3b 0a 20 20 69  bMethod = 0;.  i
2d9d0 6d 70 6f 72 74 56 74 61 62 45 72 72 4d 73 67 28  mportVtabErrMsg(
2d9e0 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 69 66 28  p, pVtab);.  if(
2d9f0 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
2da00 7b 0a 20 20 20 20 72 65 73 20 3d 20 70 4d 6f 64  {.    res = pMod
2da10 75 6c 65 2d 3e 78 45 6f 66 28 70 43 75 72 2d 3e  ule->xEof(pCur->
2da20 70 56 74 61 62 43 75 72 73 6f 72 29 3b 0a 20 20  pVtabCursor);.  
2da30 7d 0a 0a 20 20 69 66 28 20 21 72 65 73 20 29 7b  }..  if( !res ){
2da40 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 65 72 65  .    /* If there
2da50 20 69 73 20 64 61 74 61 2c 20 6a 75 6d 70 20 74   is data, jump t
2da60 6f 20 50 32 20 2a 2f 0a 20 20 20 20 70 63 20 3d  o P2 */.    pc =
2da70 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
2da80 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  }.  break;.}.#en
2da90 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
2daa0 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20  IT_VIRTUALTABLE 
2dab0 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
2dac0 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
2dad0 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ABLE./* Opcode: 
2dae0 56 52 65 6e 61 6d 65 20 50 31 20 2a 20 2a 20 50  VRename P1 * * P
2daf0 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20  4 *.**.** P4 is 
2db00 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 76  a pointer to a v
2db10 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6f 62 6a  irtual table obj
2db20 65 63 74 2c 20 61 6e 20 73 71 6c 69 74 65 33 5f  ect, an sqlite3_
2db30 76 74 61 62 20 73 74 72 75 63 74 75 72 65 2e 0a  vtab structure..
2db40 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69  ** This opcode i
2db50 6e 76 6f 6b 65 73 20 74 68 65 20 63 6f 72 72 65  nvokes the corre
2db60 73 70 6f 6e 64 69 6e 67 20 78 52 65 6e 61 6d 65  sponding xRename
2db70 20 6d 65 74 68 6f 64 2e 20 54 68 65 20 76 61 6c   method. The val
2db80 75 65 0a 2a 2a 20 69 6e 20 72 65 67 69 73 74 65  ue.** in registe
2db90 72 20 50 31 20 69 73 20 70 61 73 73 65 64 20 61  r P1 is passed a
2dba0 73 20 74 68 65 20 7a 4e 61 6d 65 20 61 72 67 75  s the zName argu
2dbb0 6d 65 6e 74 20 74 6f 20 74 68 65 20 78 52 65 6e  ment to the xRen
2dbc0 61 6d 65 20 6d 65 74 68 6f 64 2e 0a 2a 2f 0a 63  ame method..*/.c
2dbd0 61 73 65 20 4f 50 5f 56 52 65 6e 61 6d 65 3a 20  ase OP_VRename: 
2dbe0 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62  {.  sqlite3_vtab
2dbf0 20 2a 70 56 74 61 62 3b 0a 20 20 4d 65 6d 20 2a   *pVtab;.  Mem *
2dc00 70 4e 61 6d 65 3b 0a 0a 20 20 70 56 74 61 62 20  pName;..  pVtab 
2dc10 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62 2d  = pOp->p4.pVtab-
2dc20 3e 70 56 74 61 62 3b 0a 20 20 70 4e 61 6d 65 20  >pVtab;.  pName 
2dc30 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
2dc40 3b 0a 20 20 61 73 73 65 72 74 28 20 70 56 74 61  ;.  assert( pVta
2dc50 62 2d 3e 70 4d 6f 64 75 6c 65 2d 3e 78 52 65 6e  b->pModule->xRen
2dc60 61 6d 65 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ame );.  assert(
2dc70 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 4e 61 6d   memIsValid(pNam
2dc80 65 29 20 29 3b 0a 20 20 52 45 47 49 53 54 45 52  e) );.  REGISTER
2dc90 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20  _TRACE(pOp->p1, 
2dca0 70 4e 61 6d 65 29 3b 0a 20 20 61 73 73 65 72 74  pName);.  assert
2dcb0 28 20 70 4e 61 6d 65 2d 3e 66 6c 61 67 73 20 26  ( pName->flags &
2dcc0 20 4d 45 4d 5f 53 74 72 20 29 3b 0a 20 20 72 63   MEM_Str );.  rc
2dcd0 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c   = pVtab->pModul
2dce0 65 2d 3e 78 52 65 6e 61 6d 65 28 70 56 74 61 62  e->xRename(pVtab
2dcf0 2c 20 70 4e 61 6d 65 2d 3e 7a 29 3b 0a 20 20 69  , pName->z);.  i
2dd00 6d 70 6f 72 74 56 74 61 62 45 72 72 4d 73 67 28  mportVtabErrMsg(
2dd10 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 70 2d 3e  p, pVtab);.  p->
2dd20 65 78 70 69 72 65 64 20 3d 20 30 3b 0a 0a 20 20  expired = 0;..  
2dd30 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a  break;.}.#endif.
2dd40 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2dd50 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
2dd60 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 55 70  E./* Opcode: VUp
2dd70 64 61 74 65 20 50 31 20 50 32 20 50 33 20 50 34  date P1 P2 P3 P4
2dd80 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61   *.**.** P4 is a
2dd90 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 76 69   pointer to a vi
2dda0 72 74 75 61 6c 20 74 61 62 6c 65 20 6f 62 6a 65  rtual table obje
2ddb0 63 74 2c 20 61 6e 20 73 71 6c 69 74 65 33 5f 76  ct, an sqlite3_v
2ddc0 74 61 62 20 73 74 72 75 63 74 75 72 65 2e 0a 2a  tab structure..*
2ddd0 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 6e  * This opcode in
2dde0 76 6f 6b 65 73 20 74 68 65 20 63 6f 72 72 65 73  vokes the corres
2ddf0 70 6f 6e 64 69 6e 67 20 78 55 70 64 61 74 65 20  ponding xUpdate 
2de00 6d 65 74 68 6f 64 2e 20 50 32 20 76 61 6c 75 65  method. P2 value
2de10 73 0a 2a 2a 20 61 72 65 20 63 6f 6e 74 69 67 75  s.** are contigu
2de20 6f 75 73 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73  ous memory cells
2de30 20 73 74 61 72 74 69 6e 67 20 61 74 20 50 33 20   starting at P3 
2de40 74 6f 20 70 61 73 73 20 74 6f 20 74 68 65 20 78  to pass to the x
2de50 55 70 64 61 74 65 20 0a 2a 2a 20 69 6e 76 6f 63  Update .** invoc
2de60 61 74 69 6f 6e 2e 20 54 68 65 20 76 61 6c 75 65  ation. The value
2de70 20 69 6e 20 72 65 67 69 73 74 65 72 20 28 50 33   in register (P3
2de80 2b 50 32 2d 31 29 20 63 6f 72 72 65 73 70 6f 6e  +P2-1) correspon
2de90 64 73 20 74 6f 20 74 68 65 20 0a 2a 2a 20 70 32  ds to the .** p2
2dea0 74 68 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68  th element of th
2deb0 65 20 61 72 67 76 20 61 72 72 61 79 20 70 61 73  e argv array pas
2dec0 73 65 64 20 74 6f 20 78 55 70 64 61 74 65 2e 0a  sed to xUpdate..
2ded0 2a 2a 0a 2a 2a 20 54 68 65 20 78 55 70 64 61 74  **.** The xUpdat
2dee0 65 20 6d 65 74 68 6f 64 20 77 69 6c 6c 20 64 6f  e method will do
2def0 20 61 20 44 45 4c 45 54 45 20 6f 72 20 61 6e 20   a DELETE or an 
2df00 49 4e 53 45 52 54 20 6f 72 20 62 6f 74 68 2e 0a  INSERT or both..
2df10 2a 2a 20 54 68 65 20 61 72 67 76 5b 30 5d 20 65  ** The argv[0] e
2df20 6c 65 6d 65 6e 74 20 28 77 68 69 63 68 20 63 6f  lement (which co
2df30 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 6d 65 6d  rresponds to mem
2df40 6f 72 79 20 63 65 6c 6c 20 50 33 29 0a 2a 2a 20  ory cell P3).** 
2df50 69 73 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20  is the rowid of 
2df60 61 20 72 6f 77 20 74 6f 20 64 65 6c 65 74 65 2e  a row to delete.
2df70 20 20 49 66 20 61 72 67 76 5b 30 5d 20 69 73 20    If argv[0] is 
2df80 4e 55 4c 4c 20 74 68 65 6e 20 6e 6f 20 0a 2a 2a  NULL then no .**
2df90 20 64 65 6c 65 74 69 6f 6e 20 6f 63 63 75 72 73   deletion occurs
2dfa0 2e 20 20 54 68 65 20 61 72 67 76 5b 31 5d 20 65  .  The argv[1] e
2dfb0 6c 65 6d 65 6e 74 20 69 73 20 74 68 65 20 72 6f  lement is the ro
2dfc0 77 69 64 20 6f 66 20 74 68 65 20 6e 65 77 20 0a  wid of the new .
2dfd0 2a 2a 20 72 6f 77 2e 20 20 54 68 69 73 20 63 61  ** row.  This ca
2dfe0 6e 20 62 65 20 4e 55 4c 4c 20 74 6f 20 68 61 76  n be NULL to hav
2dff0 65 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61  e the virtual ta
2e000 62 6c 65 20 73 65 6c 65 63 74 20 74 68 65 20 6e  ble select the n
2e010 65 77 20 0a 2a 2a 20 72 6f 77 69 64 20 66 6f 72  ew .** rowid for
2e020 20 69 74 73 65 6c 66 2e 20 20 54 68 65 20 73 75   itself.  The su
2e030 62 73 65 71 75 65 6e 74 20 65 6c 65 6d 65 6e 74  bsequent element
2e040 73 20 69 6e 20 74 68 65 20 61 72 72 61 79 20 61  s in the array a
2e050 72 65 20 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65  re .** the value
2e060 73 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  s of columns in 
2e070 74 68 65 20 6e 65 77 20 72 6f 77 2e 0a 2a 2a 0a  the new row..**.
2e080 2a 2a 20 49 66 20 50 32 3d 3d 31 20 74 68 65 6e  ** If P2==1 then
2e090 20 6e 6f 20 69 6e 73 65 72 74 20 69 73 20 70 65   no insert is pe
2e0a0 72 66 6f 72 6d 65 64 2e 20 20 61 72 67 76 5b 30  rformed.  argv[0
2e0b0 5d 20 69 73 20 74 68 65 20 72 6f 77 69 64 20 6f  ] is the rowid o
2e0c0 66 0a 2a 2a 20 61 20 72 6f 77 20 74 6f 20 64 65  f.** a row to de
2e0d0 6c 65 74 65 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69  lete..**.** P1 i
2e0e0 73 20 61 20 62 6f 6f 6c 65 61 6e 20 66 6c 61 67  s a boolean flag
2e0f0 2e 20 49 66 20 69 74 20 69 73 20 73 65 74 20 74  . If it is set t
2e100 6f 20 74 72 75 65 20 61 6e 64 20 74 68 65 20 78  o true and the x
2e110 55 70 64 61 74 65 20 63 61 6c 6c 0a 2a 2a 20 69  Update call.** i
2e120 73 20 73 75 63 63 65 73 73 66 75 6c 2c 20 74 68  s successful, th
2e130 65 6e 20 74 68 65 20 76 61 6c 75 65 20 72 65 74  en the value ret
2e140 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33  urned by sqlite3
2e150 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77  _last_insert_row
2e160 69 64 28 29 20 0a 2a 2a 20 69 73 20 73 65 74 20  id() .** is set 
2e170 74 6f 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  to the value of 
2e180 74 68 65 20 72 6f 77 69 64 20 66 6f 72 20 74 68  the rowid for th
2e190 65 20 72 6f 77 20 6a 75 73 74 20 69 6e 73 65 72  e row just inser
2e1a0 74 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ted..*/.case OP_
2e1b0 56 55 70 64 61 74 65 3a 20 7b 0a 20 20 73 71 6c  VUpdate: {.  sql
2e1c0 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62  ite3_vtab *pVtab
2e1d0 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75  ;.  sqlite3_modu
2e1e0 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 69  le *pModule;.  i
2e1f0 6e 74 20 6e 41 72 67 3b 0a 20 20 69 6e 74 20 69  nt nArg;.  int i
2e200 3b 0a 20 20 73 71 6c 69 74 65 5f 69 6e 74 36 34  ;.  sqlite_int64
2e210 20 72 6f 77 69 64 3b 0a 20 20 4d 65 6d 20 2a 2a   rowid;.  Mem **
2e220 61 70 41 72 67 3b 0a 20 20 4d 65 6d 20 2a 70 58  apArg;.  Mem *pX
2e230 3b 0a 0a 20 20 70 56 74 61 62 20 3d 20 70 4f 70  ;..  pVtab = pOp
2e240 2d 3e 70 34 2e 70 56 74 61 62 2d 3e 70 56 74 61  ->p4.pVtab->pVta
2e250 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20 28  b;.  pModule = (
2e260 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a  sqlite3_module *
2e270 29 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b  )pVtab->pModule;
2e280 0a 20 20 6e 41 72 67 20 3d 20 70 4f 70 2d 3e 70  .  nArg = pOp->p
2e290 32 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  2;.  assert( pOp
2e2a0 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 56 54 41  ->p4type==P4_VTA
2e2b0 42 20 29 3b 0a 20 20 69 66 28 20 41 4c 57 41 59  B );.  if( ALWAY
2e2c0 53 28 70 4d 6f 64 75 6c 65 2d 3e 78 55 70 64 61  S(pModule->xUpda
2e2d0 74 65 29 20 29 7b 0a 20 20 20 20 61 70 41 72 67  te) ){.    apArg
2e2e0 20 3d 20 70 2d 3e 61 70 41 72 67 3b 0a 20 20 20   = p->apArg;.   
2e2f0 20 70 58 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d   pX = &aMem[pOp-
2e300 3e 70 33 5d 3b 0a 20 20 20 20 66 6f 72 28 69 3d  >p3];.    for(i=
2e310 30 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b  0; i<nArg; i++){
2e320 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d  .      assert( m
2e330 65 6d 49 73 56 61 6c 69 64 28 70 58 29 20 29 3b  emIsValid(pX) );
2e340 0a 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74 54  .      memAboutT
2e350 6f 43 68 61 6e 67 65 28 70 2c 20 70 58 29 3b 0a  oChange(p, pX);.
2e360 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
2e370 65 4d 65 6d 53 74 6f 72 65 54 79 70 65 28 70 58  eMemStoreType(pX
2e380 29 3b 0a 20 20 20 20 20 20 61 70 41 72 67 5b 69  );.      apArg[i
2e390 5d 20 3d 20 70 58 3b 0a 20 20 20 20 20 20 70 58  ] = pX;.      pX
2e3a0 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72 63  ++;.    }.    rc
2e3b0 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 55 70 64   = pModule->xUpd
2e3c0 61 74 65 28 70 56 74 61 62 2c 20 6e 41 72 67 2c  ate(pVtab, nArg,
2e3d0 20 61 70 41 72 67 2c 20 26 72 6f 77 69 64 29 3b   apArg, &rowid);
2e3e0 0a 20 20 20 20 69 6d 70 6f 72 74 56 74 61 62 45  .    importVtabE
2e3f0 72 72 4d 73 67 28 70 2c 20 70 56 74 61 62 29 3b  rrMsg(p, pVtab);
2e400 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  .    if( rc==SQL
2e410 49 54 45 5f 4f 4b 20 26 26 20 70 4f 70 2d 3e 70  ITE_OK && pOp->p
2e420 31 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72  1 ){.      asser
2e430 74 28 20 6e 41 72 67 3e 31 20 26 26 20 61 70 41  t( nArg>1 && apA
2e440 72 67 5b 30 5d 20 26 26 20 28 61 70 41 72 67 5b  rg[0] && (apArg[
2e450 30 5d 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 4e 75  0]->flags&MEM_Nu
2e460 6c 6c 29 20 29 3b 0a 20 20 20 20 20 20 64 62 2d  ll) );.      db-
2e470 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 72 6f 77  >lastRowid = row
2e480 69 64 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 2d  id;.    }.    p-
2e490 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 7d 0a  >nChange++;.  }.
2e4a0 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
2e4b0 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
2e4c0 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f  _VIRTUALTABLE */
2e4d0 0a 0a 23 69 66 6e 64 65 66 20 20 53 51 4c 49 54  ..#ifndef  SQLIT
2e4e0 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52 41  E_OMIT_PAGER_PRA
2e4f0 47 4d 41 53 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  GMAS./* Opcode: 
2e500 50 61 67 65 63 6f 75 6e 74 20 50 31 20 50 32 20  Pagecount P1 P2 
2e510 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74  * * *.**.** Writ
2e520 65 20 74 68 65 20 63 75 72 72 65 6e 74 20 6e 75  e the current nu
2e530 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e  mber of pages in
2e540 20 64 61 74 61 62 61 73 65 20 50 31 20 74 6f 20   database P1 to 
2e550 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 50 32 2e 0a  memory cell P2..
2e560 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 61 67 65 63  */.case OP_Pagec
2e570 6f 75 6e 74 3a 20 7b 20 20 20 20 20 20 20 20 20  ount: {         
2e580 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65     /* out2-prere
2e590 6c 65 61 73 65 20 2a 2f 0a 20 20 70 4f 75 74 2d  lease */.  pOut-
2e5a0 3e 75 2e 69 20 3d 20 73 71 6c 69 74 65 33 42 74  >u.i = sqlite3Bt
2e5b0 72 65 65 4c 61 73 74 50 61 67 65 28 64 62 2d 3e  reeLastPage(db->
2e5c0 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74  aDb[pOp->p1].pBt
2e5d0 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65  );.  break;.}.#e
2e5e0 6e 64 69 66 0a 0a 0a 23 69 66 6e 64 65 66 20 20  ndif...#ifndef  
2e5f0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45  SQLITE_OMIT_PAGE
2e600 52 5f 50 52 41 47 4d 41 53 0a 2f 2a 20 4f 70 63  R_PRAGMAS./* Opc
2e610 6f 64 65 3a 20 4d 61 78 50 67 63 6e 74 20 50 31  ode: MaxPgcnt P1
2e620 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
2e630 20 54 72 79 20 74 6f 20 73 65 74 20 74 68 65 20   Try to set the 
2e640 6d 61 78 69 6d 75 6d 20 70 61 67 65 20 63 6f 75  maximum page cou
2e650 6e 74 20 66 6f 72 20 64 61 74 61 62 61 73 65 20  nt for database 
2e660 50 31 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20  P1 to the value 
2e670 69 6e 20 50 33 2e 0a 2a 2a 20 44 6f 20 6e 6f 74  in P3..** Do not
2e680 20 6c 65 74 20 74 68 65 20 6d 61 78 69 6d 75 6d   let the maximum
2e690 20 70 61 67 65 20 63 6f 75 6e 74 20 66 61 6c 6c   page count fall
2e6a0 20 62 65 6c 6f 77 20 74 68 65 20 63 75 72 72 65   below the curre
2e6b0 6e 74 20 70 61 67 65 20 63 6f 75 6e 74 20 61 6e  nt page count an
2e6c0 64 0a 2a 2a 20 64 6f 20 6e 6f 74 20 63 68 61 6e  d.** do not chan
2e6d0 67 65 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 70  ge the maximum p
2e6e0 61 67 65 20 63 6f 75 6e 74 20 76 61 6c 75 65 20  age count value 
2e6f0 69 66 20 50 33 3d 3d 30 2e 0a 2a 2a 0a 2a 2a 20  if P3==0..**.** 
2e700 53 74 6f 72 65 20 74 68 65 20 6d 61 78 69 6d 75  Store the maximu
2e710 6d 20 70 61 67 65 20 63 6f 75 6e 74 20 61 66 74  m page count aft
2e720 65 72 20 74 68 65 20 63 68 61 6e 67 65 20 69 6e  er the change in
2e730 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f   register P2..*/
2e740 0a 63 61 73 65 20 4f 50 5f 4d 61 78 50 67 63 6e  .case OP_MaxPgcn
2e750 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  t: {            
2e760 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61  /* out2-prerelea
2e770 73 65 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64  se */.  unsigned
2e780 20 69 6e 74 20 6e 65 77 4d 61 78 3b 0a 20 20 42   int newMax;.  B
2e790 74 72 65 65 20 2a 70 42 74 3b 0a 0a 20 20 70 42  tree *pBt;..  pB
2e7a0 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d  t = db->aDb[pOp-
2e7b0 3e 70 31 5d 2e 70 42 74 3b 0a 20 20 6e 65 77 4d  >p1].pBt;.  newM
2e7c0 61 78 20 3d 20 30 3b 0a 20 20 69 66 28 20 70 4f  ax = 0;.  if( pO
2e7d0 70 2d 3e 70 33 20 29 7b 0a 20 20 20 20 6e 65 77  p->p3 ){.    new
2e7e0 4d 61 78 20 3d 20 73 71 6c 69 74 65 33 42 74 72  Max = sqlite3Btr
2e7f0 65 65 4c 61 73 74 50 61 67 65 28 70 42 74 29 3b  eeLastPage(pBt);
2e800 0a 20 20 20 20 69 66 28 20 6e 65 77 4d 61 78 20  .    if( newMax 
2e810 3c 20 28 75 6e 73 69 67 6e 65 64 29 70 4f 70 2d  < (unsigned)pOp-
2e820 3e 70 33 20 29 20 6e 65 77 4d 61 78 20 3d 20 28  >p3 ) newMax = (
2e830 75 6e 73 69 67 6e 65 64 29 70 4f 70 2d 3e 70 33  unsigned)pOp->p3
2e840 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e  ;.  }.  pOut->u.
2e850 69 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  i = sqlite3Btree
2e860 4d 61 78 50 61 67 65 43 6f 75 6e 74 28 70 42 74  MaxPageCount(pBt
2e870 2c 20 6e 65 77 4d 61 78 29 3b 0a 20 20 62 72 65  , newMax);.  bre
2e880 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a 23  ak;.}.#endif...#
2e890 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2e8a0 49 54 5f 54 52 41 43 45 0a 2f 2a 20 4f 70 63 6f  IT_TRACE./* Opco
2e8b0 64 65 3a 20 54 72 61 63 65 20 2a 20 2a 20 2a 20  de: Trace * * * 
2e8c0 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 74 72  P4 *.**.** If tr
2e8d0 61 63 69 6e 67 20 69 73 20 65 6e 61 62 6c 65 64  acing is enabled
2e8e0 20 28 62 79 20 74 68 65 20 73 71 6c 69 74 65 33   (by the sqlite3
2e8f0 5f 74 72 61 63 65 28 29 29 20 69 6e 74 65 72 66  _trace()) interf
2e900 61 63 65 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 65  ace, then.** the
2e910 20 55 54 46 2d 38 20 73 74 72 69 6e 67 20 63 6f   UTF-8 string co
2e920 6e 74 61 69 6e 65 64 20 69 6e 20 50 34 20 69 73  ntained in P4 is
2e930 20 65 6d 69 74 74 65 64 20 6f 6e 20 74 68 65 20   emitted on the 
2e940 74 72 61 63 65 20 63 61 6c 6c 62 61 63 6b 2e 0a  trace callback..
2e950 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 72 61 63 65  */.case OP_Trace
2e960 3a 20 7b 0a 20 20 63 68 61 72 20 2a 7a 54 72 61  : {.  char *zTra
2e970 63 65 3b 0a 0a 20 20 7a 54 72 61 63 65 20 3d 20  ce;..  zTrace = 
2e980 28 70 4f 70 2d 3e 70 34 2e 7a 20 3f 20 70 4f 70  (pOp->p4.z ? pOp
2e990 2d 3e 70 34 2e 7a 20 3a 20 70 2d 3e 7a 53 71 6c  ->p4.z : p->zSql
2e9a0 29 3b 0a 20 20 69 66 28 20 7a 54 72 61 63 65 20  );.  if( zTrace 
2e9b0 29 7b 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 78  ){.    if( db->x
2e9c0 54 72 61 63 65 20 29 7b 0a 20 20 20 20 20 20 63  Trace ){.      c
2e9d0 68 61 72 20 2a 7a 20 3d 20 73 71 6c 69 74 65 33  har *z = sqlite3
2e9e0 56 64 62 65 45 78 70 61 6e 64 53 71 6c 28 70 2c  VdbeExpandSql(p,
2e9f0 20 7a 54 72 61 63 65 29 3b 0a 20 20 20 20 20 20   zTrace);.      
2ea00 64 62 2d 3e 78 54 72 61 63 65 28 64 62 2d 3e 70  db->xTrace(db->p
2ea10 54 72 61 63 65 41 72 67 2c 20 7a 29 3b 0a 20 20  TraceArg, z);.  
2ea20 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65      sqlite3DbFre
2ea30 65 28 64 62 2c 20 7a 29 3b 0a 20 20 20 20 7d 0a  e(db, z);.    }.
2ea40 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
2ea50 42 55 47 0a 20 20 20 20 69 66 28 20 28 64 62 2d  BUG.    if( (db-
2ea60 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f  >flags & SQLITE_
2ea70 53 71 6c 54 72 61 63 65 29 21 3d 30 20 29 7b 0a  SqlTrace)!=0 ){.
2ea80 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 65 62        sqlite3Deb
2ea90 75 67 50 72 69 6e 74 66 28 22 53 51 4c 2d 74 72  ugPrintf("SQL-tr
2eaa0 61 63 65 3a 20 25 73 5c 6e 22 2c 20 7a 54 72 61  ace: %s\n", zTra
2eab0 63 65 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69  ce);.    }.#endi
2eac0 66 20 2f 2a 20 53 51 4c 49 54 45 5f 44 45 42 55  f /* SQLITE_DEBU
2ead0 47 20 2a 2f 0a 20 20 7d 0a 20 20 62 72 65 61 6b  G */.  }.  break
2eae0 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 20  ;.}.#endif.../* 
2eaf0 4f 70 63 6f 64 65 3a 20 4e 6f 6f 70 20 2a 20 2a  Opcode: Noop * *
2eb00 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 6f 20   * * *.**.** Do 
2eb10 6e 6f 74 68 69 6e 67 2e 20 20 54 68 69 73 20 69  nothing.  This i
2eb20 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 6f 66  nstruction is of
2eb30 74 65 6e 20 75 73 65 66 75 6c 20 61 73 20 61 20  ten useful as a 
2eb40 6a 75 6d 70 0a 2a 2a 20 64 65 73 74 69 6e 61 74  jump.** destinat
2eb50 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 0a 2a 2a 20 54 68  ion..*/./*.** Th
2eb60 65 20 6d 61 67 69 63 20 45 78 70 6c 61 69 6e 20  e magic Explain 
2eb70 6f 70 63 6f 64 65 20 61 72 65 20 6f 6e 6c 79 20  opcode are only 
2eb80 69 6e 73 65 72 74 65 64 20 77 68 65 6e 20 65 78  inserted when ex
2eb90 70 6c 61 69 6e 3d 3d 32 20 28 77 68 69 63 68 0a  plain==2 (which.
2eba0 2a 2a 20 69 73 20 74 6f 20 73 61 79 20 77 68 65  ** is to say whe
2ebb0 6e 20 74 68 65 20 45 58 50 4c 41 49 4e 20 51 55  n the EXPLAIN QU
2ebc0 45 52 59 20 50 4c 41 4e 20 73 79 6e 74 61 78 20  ERY PLAN syntax 
2ebd0 69 73 20 75 73 65 64 2e 29 0a 2a 2a 20 54 68 69  is used.).** Thi
2ebe0 73 20 6f 70 63 6f 64 65 20 72 65 63 6f 72 64 73  s opcode records
2ebf0 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 72 6f   information fro
2ec00 6d 20 74 68 65 20 6f 70 74 69 6d 69 7a 65 72 2e  m the optimizer.
2ec10 20 20 49 74 20 69 73 20 74 68 65 0a 2a 2a 20 74    It is the.** t
2ec20 68 65 20 73 61 6d 65 20 61 73 20 61 20 6e 6f 2d  he same as a no-
2ec30 6f 70 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65  op.  This opcode
2ec40 73 6e 65 76 65 72 20 61 70 70 65 61 72 73 20 69  snever appears i
2ec50 6e 20 61 20 72 65 61 6c 20 56 4d 20 70 72 6f 67  n a real VM prog
2ec60 72 61 6d 2e 0a 2a 2f 0a 64 65 66 61 75 6c 74 3a  ram..*/.default:
2ec70 20 7b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54   {          /* T
2ec80 68 69 73 20 69 73 20 72 65 61 6c 6c 79 20 4f 50  his is really OP
2ec90 5f 4e 6f 6f 70 20 61 6e 64 20 4f 50 5f 45 78 70  _Noop and OP_Exp
2eca0 6c 61 69 6e 20 2a 2f 0a 20 20 61 73 73 65 72 74  lain */.  assert
2ecb0 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
2ecc0 50 5f 4e 6f 6f 70 20 7c 7c 20 70 4f 70 2d 3e 6f  P_Noop || pOp->o
2ecd0 70 63 6f 64 65 3d 3d 4f 50 5f 45 78 70 6c 61 69  pcode==OP_Explai
2ece0 6e 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  n );.  break;.}.
2ecf0 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ./**************
2ed00 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2ed10 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2ed20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2ed30 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a  ***************.
2ed40 2a 2a 20 54 68 65 20 63 61 73 65 73 20 6f 66 20  ** The cases of 
2ed50 74 68 65 20 73 77 69 74 63 68 20 73 74 61 74 65  the switch state
2ed60 6d 65 6e 74 20 61 62 6f 76 65 20 74 68 69 73 20  ment above this 
2ed70 6c 69 6e 65 20 73 68 6f 75 6c 64 20 61 6c 6c 20  line should all 
2ed80 62 65 20 69 6e 64 65 6e 74 65 64 0a 2a 2a 20 62  be indented.** b
2ed90 79 20 36 20 73 70 61 63 65 73 2e 20 20 42 75 74  y 6 spaces.  But
2eda0 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20 36   the left-most 6
2edb0 20 73 70 61 63 65 73 20 68 61 76 65 20 62 65 65   spaces have bee
2edc0 6e 20 72 65 6d 6f 76 65 64 20 74 6f 20 69 6d 70  n removed to imp
2edd0 72 6f 76 65 20 74 68 65 0a 2a 2a 20 72 65 61 64  rove the.** read
2ede0 61 62 69 6c 69 74 79 2e 20 20 46 72 6f 6d 20 74  ability.  From t
2edf0 68 69 73 20 70 6f 69 6e 74 20 6f 6e 20 64 6f 77  his point on dow
2ee00 6e 2c 20 74 68 65 20 6e 6f 72 6d 61 6c 20 69 6e  n, the normal in
2ee10 64 65 6e 74 61 74 69 6f 6e 20 72 75 6c 65 73 20  dentation rules 
2ee20 61 72 65 0a 2a 2a 20 72 65 73 74 6f 72 65 64 2e  are.** restored.
2ee30 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .***************
2ee40 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2ee50 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2ee60 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2ee70 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a  **************/.
2ee80 20 20 20 20 7d 0a 0a 23 69 66 64 65 66 20 56 44      }..#ifdef VD
2ee90 42 45 5f 50 52 4f 46 49 4c 45 0a 20 20 20 20 7b  BE_PROFILE.    {
2eea0 0a 20 20 20 20 20 20 75 36 34 20 65 6c 61 70 73  .      u64 elaps
2eeb0 65 64 20 3d 20 73 71 6c 69 74 65 33 48 77 74 69  ed = sqlite3Hwti
2eec0 6d 65 28 29 20 2d 20 73 74 61 72 74 3b 0a 20 20  me() - start;.  
2eed0 20 20 20 20 70 4f 70 2d 3e 63 79 63 6c 65 73 20      pOp->cycles 
2eee0 2b 3d 20 65 6c 61 70 73 65 64 3b 0a 20 20 20 20  += elapsed;.    
2eef0 20 20 70 4f 70 2d 3e 63 6e 74 2b 2b 3b 0a 23 69    pOp->cnt++;.#i
2ef00 66 20 30 0a 20 20 20 20 20 20 20 20 66 70 72 69  f 0.        fpri
2ef10 6e 74 66 28 73 74 64 6f 75 74 2c 20 22 25 31 30  ntf(stdout, "%10
2ef20 6c 6c 75 20 22 2c 20 65 6c 61 70 73 65 64 29 3b  llu ", elapsed);
2ef30 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
2ef40 56 64 62 65 50 72 69 6e 74 4f 70 28 73 74 64 6f  VdbePrintOp(stdo
2ef50 75 74 2c 20 6f 72 69 67 50 63 2c 20 26 61 4f 70  ut, origPc, &aOp
2ef60 5b 6f 72 69 67 50 63 5d 29 3b 0a 23 65 6e 64 69  [origPc]);.#endi
2ef70 66 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 0a  f.    }.#endif..
2ef80 20 20 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f      /* The follo
2ef90 77 69 6e 67 20 63 6f 64 65 20 61 64 64 73 20 6e  wing code adds n
2efa0 6f 74 68 69 6e 67 20 74 6f 20 74 68 65 20 61 63  othing to the ac
2efb0 74 75 61 6c 20 66 75 6e 63 74 69 6f 6e 61 6c 69  tual functionali
2efc0 74 79 0a 20 20 20 20 2a 2a 20 6f 66 20 74 68 65  ty.    ** of the
2efd0 20 70 72 6f 67 72 61 6d 2e 20 20 49 74 20 69 73   program.  It is
2efe0 20 6f 6e 6c 79 20 68 65 72 65 20 66 6f 72 20 74   only here for t
2eff0 65 73 74 69 6e 67 20 61 6e 64 20 64 65 62 75 67  esting and debug
2f000 67 69 6e 67 2e 0a 20 20 20 20 2a 2a 20 4f 6e 20  ging..    ** On 
2f010 74 68 65 20 6f 74 68 65 72 20 68 61 6e 64 2c 20  the other hand, 
2f020 69 74 20 64 6f 65 73 20 62 75 72 6e 20 43 50 55  it does burn CPU
2f030 20 63 79 63 6c 65 73 20 65 76 65 72 79 20 74 69   cycles every ti
2f040 6d 65 20 74 68 72 6f 75 67 68 0a 20 20 20 20 2a  me through.    *
2f050 2a 20 74 68 65 20 65 76 61 6c 75 61 74 6f 72 20  * the evaluator 
2f060 6c 6f 6f 70 2e 20 20 53 6f 20 77 65 20 63 61 6e  loop.  So we can
2f070 20 6c 65 61 76 65 20 69 74 20 6f 75 74 20 77 68   leave it out wh
2f080 65 6e 20 4e 44 45 42 55 47 20 69 73 20 64 65 66  en NDEBUG is def
2f090 69 6e 65 64 2e 0a 20 20 20 20 2a 2f 0a 23 69 66  ined..    */.#if
2f0a0 6e 64 65 66 20 4e 44 45 42 55 47 0a 20 20 20 20  ndef NDEBUG.    
2f0b0 61 73 73 65 72 74 28 20 70 63 3e 3d 2d 31 20 26  assert( pc>=-1 &
2f0c0 26 20 70 63 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 0a  & pc<p->nOp );..
2f0d0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
2f0e0 42 55 47 0a 20 20 20 20 69 66 28 20 70 2d 3e 74  BUG.    if( p->t
2f0f0 72 61 63 65 20 29 7b 0a 20 20 20 20 20 20 69 66  race ){.      if
2f100 28 20 72 63 21 3d 30 20 29 20 66 70 72 69 6e 74  ( rc!=0 ) fprint
2f110 66 28 70 2d 3e 74 72 61 63 65 2c 22 72 63 3d 25  f(p->trace,"rc=%
2f120 64 5c 6e 22 2c 72 63 29 3b 0a 20 20 20 20 20 20  d\n",rc);.      
2f130 69 66 28 20 70 4f 70 2d 3e 6f 70 66 6c 61 67 73  if( pOp->opflags
2f140 20 26 20 28 4f 50 46 4c 47 5f 4f 55 54 32 5f 50   & (OPFLG_OUT2_P
2f150 52 45 52 45 4c 45 41 53 45 7c 4f 50 46 4c 47 5f  RERELEASE|OPFLG_
2f160 4f 55 54 32 29 20 29 7b 0a 20 20 20 20 20 20 20  OUT2) ){.       
2f170 20 72 65 67 69 73 74 65 72 54 72 61 63 65 28 70   registerTrace(p
2f180 2d 3e 74 72 61 63 65 2c 20 70 4f 70 2d 3e 70 32  ->trace, pOp->p2
2f190 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  , &aMem[pOp->p2]
2f1a0 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  );.      }.     
2f1b0 20 69 66 28 20 70 4f 70 2d 3e 6f 70 66 6c 61 67   if( pOp->opflag
2f1c0 73 20 26 20 4f 50 46 4c 47 5f 4f 55 54 33 20 29  s & OPFLG_OUT3 )
2f1d0 7b 0a 20 20 20 20 20 20 20 20 72 65 67 69 73 74  {.        regist
2f1e0 65 72 54 72 61 63 65 28 70 2d 3e 74 72 61 63 65  erTrace(p->trace
2f1f0 2c 20 70 4f 70 2d 3e 70 33 2c 20 26 61 4d 65 6d  , pOp->p3, &aMem
2f200 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20 20 20 20  [pOp->p3]);.    
2f210 20 20 7d 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66    }.    }.#endif
2f220 20 20 2f 2a 20 53 51 4c 49 54 45 5f 44 45 42 55    /* SQLITE_DEBU
2f230 47 20 2a 2f 0a 23 65 6e 64 69 66 20 20 2f 2a 20  G */.#endif  /* 
2f240 4e 44 45 42 55 47 20 2a 2f 0a 20 20 7d 20 20 2f  NDEBUG */.  }  /
2f250 2a 20 54 68 65 20 65 6e 64 20 6f 66 20 74 68 65  * The end of the
2f260 20 66 6f 72 28 3b 3b 29 20 6c 6f 6f 70 20 74 68   for(;;) loop th
2f270 65 20 6c 6f 6f 70 73 20 74 68 72 6f 75 67 68 20  e loops through 
2f280 6f 70 63 6f 64 65 73 20 2a 2f 0a 0a 20 20 2f 2a  opcodes */..  /*
2f290 20 49 66 20 77 65 20 72 65 61 63 68 20 74 68 69   If we reach thi
2f2a0 73 20 70 6f 69 6e 74 2c 20 69 74 20 6d 65 61 6e  s point, it mean
2f2b0 73 20 74 68 61 74 20 65 78 65 63 75 74 69 6f 6e  s that execution
2f2c0 20 69 73 20 66 69 6e 69 73 68 65 64 20 77 69 74   is finished wit
2f2d0 68 0a 20 20 2a 2a 20 61 6e 20 65 72 72 6f 72 20  h.  ** an error 
2f2e0 6f 66 20 73 6f 6d 65 20 6b 69 6e 64 2e 0a 20 20  of some kind..  
2f2f0 2a 2f 0a 76 64 62 65 5f 65 72 72 6f 72 5f 68 61  */.vdbe_error_ha
2f300 6c 74 3a 0a 20 20 61 73 73 65 72 74 28 20 72 63  lt:.  assert( rc
2f310 20 29 3b 0a 20 20 70 2d 3e 72 63 20 3d 20 72 63   );.  p->rc = rc
2f320 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 73 71  ;.  testcase( sq
2f330 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69  lite3GlobalConfi
2f340 67 2e 78 4c 6f 67 21 3d 30 20 29 3b 0a 20 20 73  g.xLog!=0 );.  s
2f350 71 6c 69 74 65 33 5f 6c 6f 67 28 72 63 2c 20 22  qlite3_log(rc, "
2f360 73 74 61 74 65 6d 65 6e 74 20 61 62 6f 72 74 73  statement aborts
2f370 20 61 74 20 25 64 3a 20 5b 25 73 5d 20 25 73 22   at %d: [%s] %s"
2f380 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  , .             
2f390 20 20 20 20 20 20 70 63 2c 20 70 2d 3e 7a 53 71        pc, p->zSq
2f3a0 6c 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a  l, p->zErrMsg);.
2f3b0 20 20 73 71 6c 69 74 65 33 56 64 62 65 48 61 6c    sqlite3VdbeHal
2f3c0 74 28 70 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d  t(p);.  if( rc==
2f3d0 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d  SQLITE_IOERR_NOM
2f3e0 45 4d 20 29 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46  EM ) db->mallocF
2f3f0 61 69 6c 65 64 20 3d 20 31 3b 0a 20 20 72 63 20  ailed = 1;.  rc 
2f400 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a  = SQLITE_ERROR;.
2f410 20 20 69 66 28 20 72 65 73 65 74 53 63 68 65 6d    if( resetSchem
2f420 61 4f 6e 46 61 75 6c 74 20 29 7b 0a 20 20 20 20  aOnFault ){.    
2f430 73 71 6c 69 74 65 33 52 65 73 65 74 49 6e 74 65  sqlite3ResetInte
2f440 72 6e 61 6c 53 63 68 65 6d 61 28 64 62 2c 20 30  rnalSchema(db, 0
2f450 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
2f460 62 65 4d 75 74 65 78 52 65 73 79 6e 63 28 70 29  beMutexResync(p)
2f470 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 54 68 69 73  ;.  }..  /* This
2f480 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 77 61 79   is the only way
2f490 20 6f 75 74 20 6f 66 20 74 68 69 73 20 70 72 6f   out of this pro
2f4a0 63 65 64 75 72 65 2e 20 20 57 65 20 68 61 76 65  cedure.  We have
2f4b0 20 74 6f 0a 20 20 2a 2a 20 72 65 6c 65 61 73 65   to.  ** release
2f4c0 20 74 68 65 20 6d 75 74 65 78 65 73 20 6f 6e 20   the mutexes on 
2f4d0 62 74 72 65 65 73 20 74 68 61 74 20 77 65 72 65  btrees that were
2f4e0 20 61 63 71 75 69 72 65 64 20 61 74 20 74 68 65   acquired at the
2f4f0 0a 20 20 2a 2a 20 74 6f 70 2e 20 2a 2f 0a 76 64  .  ** top. */.vd
2f500 62 65 5f 72 65 74 75 72 6e 3a 0a 20 20 73 71 6c  be_return:.  sql
2f510 69 74 65 33 56 64 62 65 4c 65 61 76 65 28 70 29  ite3VdbeLeave(p)
2f520 3b 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 0a  ;.  return rc;..
2f530 20 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72    /* Jump to her
2f540 65 20 69 66 20 61 20 73 74 72 69 6e 67 20 6f 72  e if a string or
2f550 20 62 6c 6f 62 20 6c 61 72 67 65 72 20 74 68 61   blob larger tha
2f560 6e 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4c 45 4e  n SQLITE_MAX_LEN
2f570 47 54 48 0a 20 20 2a 2a 20 69 73 20 65 6e 63 6f  GTH.  ** is enco
2f580 75 6e 74 65 72 65 64 2e 0a 20 20 2a 2f 0a 74 6f  untered..  */.to
2f590 6f 5f 62 69 67 3a 0a 20 20 73 71 6c 69 74 65 33  o_big:.  sqlite3
2f5a0 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45  SetString(&p->zE
2f5b0 72 72 4d 73 67 2c 20 64 62 2c 20 22 73 74 72 69  rrMsg, db, "stri
2f5c0 6e 67 20 6f 72 20 62 6c 6f 62 20 74 6f 6f 20 62  ng or blob too b
2f5d0 69 67 22 29 3b 0a 20 20 72 63 20 3d 20 53 51 4c  ig");.  rc = SQL
2f5e0 49 54 45 5f 54 4f 4f 42 49 47 3b 0a 20 20 67 6f  ITE_TOOBIG;.  go
2f5f0 74 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f 68 61  to vdbe_error_ha
2f600 6c 74 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74  lt;..  /* Jump t
2f610 6f 20 68 65 72 65 20 69 66 20 61 20 6d 61 6c 6c  o here if a mall
2f620 6f 63 28 29 20 66 61 69 6c 73 2e 0a 20 20 2a 2f  oc() fails..  */
2f630 0a 6e 6f 5f 6d 65 6d 3a 0a 20 20 64 62 2d 3e 6d  .no_mem:.  db->m
2f640 61 6c 6c 6f 63 46 61 69 6c 65 64 20 3d 20 31 3b  allocFailed = 1;
2f650 0a 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72  .  sqlite3SetStr
2f660 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c  ing(&p->zErrMsg,
2f670 20 64 62 2c 20 22 6f 75 74 20 6f 66 20 6d 65 6d   db, "out of mem
2f680 6f 72 79 22 29 3b 0a 20 20 72 63 20 3d 20 53 51  ory");.  rc = SQ
2f690 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 67 6f  LITE_NOMEM;.  go
2f6a0 74 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f 68 61  to vdbe_error_ha
2f6b0 6c 74 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74  lt;..  /* Jump t
2f6c0 6f 20 68 65 72 65 20 66 6f 72 20 61 6e 79 20 6f  o here for any o
2f6d0 74 68 65 72 20 6b 69 6e 64 20 6f 66 20 66 61 74  ther kind of fat
2f6e0 61 6c 20 65 72 72 6f 72 2e 20 20 54 68 65 20 22  al error.  The "
2f6f0 72 63 22 20 76 61 72 69 61 62 6c 65 0a 20 20 2a  rc" variable.  *
2f700 2a 20 73 68 6f 75 6c 64 20 68 6f 6c 64 20 74 68  * should hold th
2f710 65 20 65 72 72 6f 72 20 6e 75 6d 62 65 72 2e 0a  e error number..
2f720 20 20 2a 2f 0a 61 62 6f 72 74 5f 64 75 65 5f 74    */.abort_due_t
2f730 6f 5f 65 72 72 6f 72 3a 0a 20 20 61 73 73 65 72  o_error:.  asser
2f740 74 28 20 70 2d 3e 7a 45 72 72 4d 73 67 3d 3d 30  t( p->zErrMsg==0
2f750 20 29 3b 0a 20 20 69 66 28 20 64 62 2d 3e 6d 61   );.  if( db->ma
2f760 6c 6c 6f 63 46 61 69 6c 65 64 20 29 20 72 63 20  llocFailed ) rc 
2f770 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a  = SQLITE_NOMEM;.
2f780 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
2f790 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d 20 29 7b 0a  _IOERR_NOMEM ){.
2f7a0 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74      sqlite3SetSt
2f7b0 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67  ring(&p->zErrMsg
2f7c0 2c 20 64 62 2c 20 22 25 73 22 2c 20 73 71 6c 69  , db, "%s", sqli
2f7d0 74 65 33 45 72 72 53 74 72 28 72 63 29 29 3b 0a  te3ErrStr(rc));.
2f7e0 20 20 7d 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f    }.  goto vdbe_
2f7f0 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 0a 20 20 2f  error_halt;..  /
2f800 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72 65 20 69  * Jump to here i
2f810 66 20 74 68 65 20 73 71 6c 69 74 65 33 5f 69 6e  f the sqlite3_in
2f820 74 65 72 72 75 70 74 28 29 20 41 50 49 20 73 65  terrupt() API se
2f830 74 73 20 74 68 65 20 69 6e 74 65 72 72 75 70 74  ts the interrupt
2f840 0a 20 20 2a 2a 20 66 6c 61 67 2e 0a 20 20 2a 2f  .  ** flag..  */
2f850 0a 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 69 6e  .abort_due_to_in
2f860 74 65 72 72 75 70 74 3a 0a 20 20 61 73 73 65 72  terrupt:.  asser
2f870 74 28 20 64 62 2d 3e 75 31 2e 69 73 49 6e 74 65  t( db->u1.isInte
2f880 72 72 75 70 74 65 64 20 29 3b 0a 20 20 72 63 20  rrupted );.  rc 
2f890 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45 52 52 55  = SQLITE_INTERRU
2f8a0 50 54 3b 0a 20 20 70 2d 3e 72 63 20 3d 20 72 63  PT;.  p->rc = rc
2f8b0 3b 0a 20 20 73 71 6c 69 74 65 33 53 65 74 53 74  ;.  sqlite3SetSt
2f8c0 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67  ring(&p->zErrMsg
2f8d0 2c 20 64 62 2c 20 22 25 73 22 2c 20 73 71 6c 69  , db, "%s", sqli
2f8e0 74 65 33 45 72 72 53 74 72 28 72 63 29 29 3b 0a  te3ErrStr(rc));.
2f8f0 20 20 67 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f    goto vdbe_erro
2f900 72 5f 68 61 6c 74 3b 0a 7d 0a                    r_halt;.}.