/ Hex Artifact Content
Login

Artifact f38def1fc23013c13d8e97a1551c2ed0e23136fe:


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: 69 73 20 6d 61 63 72 6f 20 65 76 61 6c 75 61 74  is macro evaluat
1040: 65 73 20 74 6f 20 74 72 75 65 20 69 66 20 65 69  es to true if ei
1050: 74 68 65 72 20 74 68 65 20 75 70 64 61 74 65 20  ther the update 
1060: 68 6f 6f 6b 20 6f 72 20 74 68 65 20 70 72 65 75  hook or the preu
1070: 70 64 61 74 65 0a 2a 2a 20 68 6f 6f 6b 20 61 72  pdate.** hook ar
1080: 65 20 65 6e 61 62 6c 65 64 20 66 6f 72 20 64 61  e enabled for da
1090: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 20 44  tabase connect D
10a0: 42 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  B..*/.#ifdef SQL
10b0: 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52 45 55 50  ITE_ENABLE_PREUP
10c0: 44 41 54 45 5f 48 4f 4f 4b 0a 23 20 64 65 66 69  DATE_HOOK.# defi
10d0: 6e 65 20 48 41 53 5f 55 50 44 41 54 45 5f 48 4f  ne HAS_UPDATE_HO
10e0: 4f 4b 28 44 42 29 20 20 20 28 28 44 42 29 2d 3e  OK(DB)   ((DB)->
10f0: 78 50 72 65 55 70 64 61 74 65 43 61 6c 6c 62 61  xPreUpdateCallba
1100: 63 6b 7c 7c 28 44 42 29 2d 3e 78 55 70 64 61 74  ck||(DB)->xUpdat
1110: 65 43 61 6c 6c 62 61 63 6b 29 0a 23 65 6c 73 65  eCallback).#else
1120: 0a 23 20 64 65 66 69 6e 65 20 48 41 53 5f 55 50  .# define HAS_UP
1130: 44 41 54 45 5f 48 4f 4f 4b 28 44 42 29 20 20 28  DATE_HOOK(DB)  (
1140: 28 44 42 29 2d 3e 78 55 70 64 61 74 65 43 61 6c  (DB)->xUpdateCal
1150: 6c 62 61 63 6b 29 0a 23 65 6e 64 69 66 0a 0a 2f  lback).#endif../
1160: 2a 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 67 6c  *.** The next gl
1170: 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 20 69 73  obal variable is
1180: 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 65 61 63   incremented eac
1190: 68 20 74 79 70 65 20 74 68 65 20 4f 50 5f 46 6f  h type the OP_Fo
11a0: 75 6e 64 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73  und opcode.** is
11b0: 20 65 78 65 63 75 74 65 64 2e 20 54 68 69 73 20   executed. This 
11c0: 69 73 20 75 73 65 64 20 74 6f 20 74 65 73 74 20  is used to test 
11d0: 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74  whether or not t
11e0: 68 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 0a 2a  he foreign key.*
11f0: 2a 20 6f 70 65 72 61 74 69 6f 6e 20 69 6d 70 6c  * operation impl
1200: 65 6d 65 6e 74 65 64 20 75 73 69 6e 67 20 4f 50  emented using OP
1210: 5f 46 6b 49 73 5a 65 72 6f 20 69 73 20 77 6f 72  _FkIsZero is wor
1220: 6b 69 6e 67 2e 20 54 68 69 73 20 76 61 72 69 61  king. This varia
1230: 62 6c 65 0a 2a 2a 20 68 61 73 20 6e 6f 20 66 75  ble.** has no fu
1240: 6e 63 74 69 6f 6e 20 6f 74 68 65 72 20 74 68 61  nction other tha
1250: 6e 20 74 6f 20 68 65 6c 70 20 76 65 72 69 66 79  n to help verify
1260: 20 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65   the correct ope
1270: 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a  ration of the.**
1280: 20 6c 69 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66   library..*/.#if
1290: 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a  def SQLITE_TEST.
12a0: 69 6e 74 20 73 71 6c 69 74 65 33 5f 66 6f 75 6e  int sqlite3_foun
12b0: 64 5f 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e  d_count = 0;.#en
12c0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 65 73 74 20  dif../*.** Test 
12d0: 61 20 72 65 67 69 73 74 65 72 20 74 6f 20 73 65  a register to se
12e0: 65 20 69 66 20 69 74 20 65 78 63 65 65 64 73 20  e if it exceeds 
12f0: 74 68 65 20 63 75 72 72 65 6e 74 20 6d 61 78 69  the current maxi
1300: 6d 75 6d 20 62 6c 6f 62 20 73 69 7a 65 2e 0a 2a  mum blob size..*
1310: 2a 20 49 66 20 69 74 20 64 6f 65 73 2c 20 72 65  * If it does, re
1320: 63 6f 72 64 20 74 68 65 20 6e 65 77 20 6d 61 78  cord the new max
1330: 69 6d 75 6d 20 62 6c 6f 62 20 73 69 7a 65 2e 0a  imum blob size..
1340: 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  */.#if defined(S
1350: 51 4c 49 54 45 5f 54 45 53 54 29 20 26 26 20 21  QLITE_TEST) && !
1360: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
1370: 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54  MIT_BUILTIN_TEST
1380: 29 0a 23 20 64 65 66 69 6e 65 20 55 50 44 41 54  ).# define UPDAT
1390: 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 50  E_MAX_BLOBSIZE(P
13a0: 29 20 20 75 70 64 61 74 65 4d 61 78 42 6c 6f 62  )  updateMaxBlob
13b0: 73 69 7a 65 28 50 29 0a 23 65 6c 73 65 0a 23 20  size(P).#else.# 
13c0: 64 65 66 69 6e 65 20 55 50 44 41 54 45 5f 4d 41  define UPDATE_MA
13d0: 58 5f 42 4c 4f 42 53 49 5a 45 28 50 29 0a 23 65  X_BLOBSIZE(P).#e
13e0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 76  ndif../*.** Conv
13f0: 65 72 74 20 74 68 65 20 67 69 76 65 6e 20 72 65  ert the given re
1400: 67 69 73 74 65 72 20 69 6e 74 6f 20 61 20 73 74  gister into a st
1410: 72 69 6e 67 20 69 66 20 69 74 20 69 73 6e 27 74  ring if it isn't
1420: 20 6f 6e 65 0a 2a 2a 20 61 6c 72 65 61 64 79 2e   one.** already.
1430: 20 52 65 74 75 72 6e 20 6e 6f 6e 2d 7a 65 72 6f   Return non-zero
1440: 20 69 66 20 61 20 6d 61 6c 6c 6f 63 28 29 20 66   if a malloc() f
1450: 61 69 6c 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ails..*/.#define
1460: 20 53 74 72 69 6e 67 69 66 79 28 50 2c 20 65 6e   Stringify(P, en
1470: 63 29 20 5c 0a 20 20 20 69 66 28 28 28 50 29 2d  c) \.   if(((P)-
1480: 3e 66 6c 61 67 73 26 28 4d 45 4d 5f 53 74 72 7c  >flags&(MEM_Str|
1490: 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 26 26  MEM_Blob))==0 &&
14a0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
14b0: 74 72 69 6e 67 69 66 79 28 50 2c 65 6e 63 29 29  tringify(P,enc))
14c0: 20 5c 0a 20 20 20 20 20 7b 20 67 6f 74 6f 20 6e   \.     { goto n
14d0: 6f 5f 6d 65 6d 3b 20 7d 0a 0a 2f 2a 0a 2a 2a 20  o_mem; }../*.** 
14e0: 41 6e 20 65 70 68 65 6d 65 72 61 6c 20 73 74 72  An ephemeral str
14f0: 69 6e 67 20 76 61 6c 75 65 20 28 73 69 67 6e 69  ing value (signi
1500: 66 69 65 64 20 62 79 20 74 68 65 20 4d 45 4d 5f  fied by the MEM_
1510: 45 70 68 65 6d 20 66 6c 61 67 29 20 63 6f 6e 74  Ephem flag) cont
1520: 61 69 6e 73 0a 2a 2a 20 61 20 70 6f 69 6e 74 65  ains.** a pointe
1530: 72 20 74 6f 20 61 20 64 79 6e 61 6d 69 63 61 6c  r to a dynamical
1540: 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 73 74 72  ly allocated str
1550: 69 6e 67 20 77 68 65 72 65 20 73 6f 6d 65 20 6f  ing where some o
1560: 74 68 65 72 20 65 6e 74 69 74 79 0a 2a 2a 20 69  ther entity.** i
1570: 73 20 72 65 73 70 6f 6e 73 69 62 6c 65 20 66 6f  s responsible fo
1580: 72 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67 20 74  r deallocating t
1590: 68 61 74 20 73 74 72 69 6e 67 2e 20 20 42 65 63  hat string.  Bec
15a0: 61 75 73 65 20 74 68 65 20 72 65 67 69 73 74 65  ause the registe
15b0: 72 0a 2a 2a 20 64 6f 65 73 20 6e 6f 74 20 63 6f  r.** does not co
15c0: 6e 74 72 6f 6c 20 74 68 65 20 73 74 72 69 6e 67  ntrol the string
15d0: 2c 20 69 74 20 6d 69 67 68 74 20 62 65 20 64 65  , it might be de
15e0: 6c 65 74 65 64 20 77 69 74 68 6f 75 74 20 74 68  leted without th
15f0: 65 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 6b 6e  e register.** kn
1600: 6f 77 69 6e 67 20 69 74 2e 0a 2a 2a 0a 2a 2a 20  owing it..**.** 
1610: 54 68 69 73 20 72 6f 75 74 69 6e 65 20 63 6f 6e  This routine con
1620: 76 65 72 74 73 20 61 6e 20 65 70 68 65 6d 65 72  verts an ephemer
1630: 61 6c 20 73 74 72 69 6e 67 20 69 6e 74 6f 20 61  al string into a
1640: 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c   dynamically all
1650: 6f 63 61 74 65 64 0a 2a 2a 20 73 74 72 69 6e 67  ocated.** string
1660: 20 74 68 61 74 20 74 68 65 20 72 65 67 69 73 74   that the regist
1670: 65 72 20 69 74 73 65 6c 66 20 63 6f 6e 74 72 6f  er itself contro
1680: 6c 73 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f  ls.  In other wo
1690: 72 64 73 2c 20 69 74 0a 2a 2a 20 63 6f 6e 76 65  rds, it.** conve
16a0: 72 74 73 20 61 6e 20 4d 45 4d 5f 45 70 68 65 6d  rts an MEM_Ephem
16b0: 20 73 74 72 69 6e 67 20 69 6e 74 6f 20 61 6e 20   string into an 
16c0: 4d 45 4d 5f 44 79 6e 20 73 74 72 69 6e 67 2e 0a  MEM_Dyn string..
16d0: 2a 2f 0a 23 64 65 66 69 6e 65 20 44 65 65 70 68  */.#define Deeph
16e0: 65 6d 65 72 61 6c 69 7a 65 28 50 29 20 5c 0a 20  emeralize(P) \. 
16f0: 20 20 69 66 28 20 28 28 50 29 2d 3e 66 6c 61 67    if( ((P)->flag
1700: 73 26 4d 45 4d 5f 45 70 68 65 6d 29 21 3d 30 20  s&MEM_Ephem)!=0 
1710: 5c 0a 20 20 20 20 20 20 20 26 26 20 73 71 6c 69  \.       && sqli
1720: 74 65 33 56 64 62 65 4d 65 6d 4d 61 6b 65 57 72  te3VdbeMemMakeWr
1730: 69 74 65 61 62 6c 65 28 50 29 20 29 7b 20 67 6f  iteable(P) ){ go
1740: 74 6f 20 6e 6f 5f 6d 65 6d 3b 7d 0a 0a 2f 2a 0a  to no_mem;}../*.
1750: 2a 2a 20 43 61 6c 6c 20 73 71 6c 69 74 65 33 56  ** Call sqlite3V
1760: 64 62 65 4d 65 6d 45 78 70 61 6e 64 42 6c 6f 62  dbeMemExpandBlob
1770: 28 29 20 6f 6e 20 74 68 65 20 73 75 70 70 6c 69  () on the suppli
1780: 65 64 20 76 61 6c 75 65 20 28 74 79 70 65 20 4d  ed value (type M
1790: 65 6d 2a 29 0a 2a 2a 20 50 20 69 66 20 72 65 71  em*).** P if req
17a0: 75 69 72 65 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e  uired..*/.#defin
17b0: 65 20 45 78 70 61 6e 64 42 6c 6f 62 28 50 29 20  e ExpandBlob(P) 
17c0: 28 28 28 50 29 2d 3e 66 6c 61 67 73 26 4d 45 4d  (((P)->flags&MEM
17d0: 5f 5a 65 72 6f 29 3f 73 71 6c 69 74 65 33 56 64  _Zero)?sqlite3Vd
17e0: 62 65 4d 65 6d 45 78 70 61 6e 64 42 6c 6f 62 28  beMemExpandBlob(
17f0: 50 29 3a 30 29 0a 0a 2f 2a 0a 2a 2a 20 41 72 67  P):0)../*.** Arg
1800: 75 6d 65 6e 74 20 70 4d 65 6d 20 70 6f 69 6e 74  ument pMem point
1810: 73 20 61 74 20 61 20 72 65 67 69 73 74 65 72 20  s at a register 
1820: 74 68 61 74 20 77 69 6c 6c 20 62 65 20 70 61 73  that will be pas
1830: 73 65 64 20 74 6f 20 61 0a 2a 2a 20 75 73 65 72  sed to a.** user
1840: 2d 64 65 66 69 6e 65 64 20 66 75 6e 63 74 69 6f  -defined functio
1850: 6e 20 6f 72 20 72 65 74 75 72 6e 65 64 20 74 6f  n or returned to
1860: 20 74 68 65 20 75 73 65 72 20 61 73 20 74 68 65   the user as the
1870: 20 72 65 73 75 6c 74 20 6f 66 20 61 20 71 75 65   result of a que
1880: 72 79 2e 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74  ry..** This rout
1890: 69 6e 65 20 73 65 74 73 20 74 68 65 20 70 4d 65  ine sets the pMe
18a0: 6d 2d 3e 74 79 70 65 20 76 61 72 69 61 62 6c 65  m->type variable
18b0: 20 75 73 65 64 20 62 79 20 74 68 65 20 73 71 6c   used by the sql
18c0: 69 74 65 33 5f 76 61 6c 75 65 5f 2a 28 29 20 0a  ite3_value_*() .
18d0: 2a 2a 20 72 6f 75 74 69 6e 65 73 2e 0a 2a 2f 0a  ** routines..*/.
18e0: 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64 62 65  void sqlite3Vdbe
18f0: 4d 65 6d 53 74 6f 72 65 54 79 70 65 28 4d 65 6d  MemStoreType(Mem
1900: 20 2a 70 4d 65 6d 29 7b 0a 20 20 69 6e 74 20 66   *pMem){.  int f
1910: 6c 61 67 73 20 3d 20 70 4d 65 6d 2d 3e 66 6c 61  lags = pMem->fla
1920: 67 73 3b 0a 20 20 69 66 28 20 66 6c 61 67 73 20  gs;.  if( flags 
1930: 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20  & MEM_Null ){.  
1940: 20 20 70 4d 65 6d 2d 3e 74 79 70 65 20 3d 20 53    pMem->type = S
1950: 51 4c 49 54 45 5f 4e 55 4c 4c 3b 0a 20 20 7d 0a  QLITE_NULL;.  }.
1960: 20 20 65 6c 73 65 20 69 66 28 20 66 6c 61 67 73    else if( flags
1970: 20 26 20 4d 45 4d 5f 49 6e 74 20 29 7b 0a 20 20   & MEM_Int ){.  
1980: 20 20 70 4d 65 6d 2d 3e 74 79 70 65 20 3d 20 53    pMem->type = S
1990: 51 4c 49 54 45 5f 49 4e 54 45 47 45 52 3b 0a 20  QLITE_INTEGER;. 
19a0: 20 7d 0a 20 20 65 6c 73 65 20 69 66 28 20 66 6c   }.  else if( fl
19b0: 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 20 29  ags & MEM_Real )
19c0: 7b 0a 20 20 20 20 70 4d 65 6d 2d 3e 74 79 70 65  {.    pMem->type
19d0: 20 3d 20 53 51 4c 49 54 45 5f 46 4c 4f 41 54 3b   = SQLITE_FLOAT;
19e0: 0a 20 20 7d 0a 20 20 65 6c 73 65 20 69 66 28 20  .  }.  else if( 
19f0: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74 72 20  flags & MEM_Str 
1a00: 29 7b 0a 20 20 20 20 70 4d 65 6d 2d 3e 74 79 70  ){.    pMem->typ
1a10: 65 20 3d 20 53 51 4c 49 54 45 5f 54 45 58 54 3b  e = SQLITE_TEXT;
1a20: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 4d  .  }else{.    pM
1a30: 65 6d 2d 3e 74 79 70 65 20 3d 20 53 51 4c 49 54  em->type = SQLIT
1a40: 45 5f 42 4c 4f 42 3b 0a 20 20 7d 0a 7d 0a 0a 2f  E_BLOB;.  }.}../
1a50: 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65 20 56 64  *.** Allocate Vd
1a60: 62 65 43 75 72 73 6f 72 20 6e 75 6d 62 65 72 20  beCursor number 
1a70: 69 43 75 72 2e 20 20 52 65 74 75 72 6e 20 61 20  iCur.  Return a 
1a80: 70 6f 69 6e 74 65 72 20 74 6f 20 69 74 2e 20 20  pointer to it.  
1a90: 52 65 74 75 72 6e 20 4e 55 4c 4c 0a 2a 2a 20 69  Return NULL.** i
1aa0: 66 20 77 65 20 72 75 6e 20 6f 75 74 20 6f 66 20  f we run out of 
1ab0: 6d 65 6d 6f 72 79 2e 0a 2a 2f 0a 73 74 61 74 69  memory..*/.stati
1ac0: 63 20 56 64 62 65 43 75 72 73 6f 72 20 2a 61 6c  c VdbeCursor *al
1ad0: 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 0a 20 20  locateCursor(.  
1ae0: 56 64 62 65 20 2a 70 2c 20 20 20 20 20 20 20 20  Vdbe *p,        
1af0: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 76 69 72        /* The vir
1b00: 74 75 61 6c 20 6d 61 63 68 69 6e 65 20 2a 2f 0a  tual machine */.
1b10: 20 20 69 6e 74 20 69 43 75 72 2c 20 20 20 20 20    int iCur,     
1b20: 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78          /* Index
1b30: 20 6f 66 20 74 68 65 20 6e 65 77 20 56 64 62 65   of the new Vdbe
1b40: 43 75 72 73 6f 72 20 2a 2f 0a 20 20 69 6e 74 20  Cursor */.  int 
1b50: 6e 46 69 65 6c 64 2c 20 20 20 20 20 20 20 20 20  nField,         
1b60: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 66    /* Number of f
1b70: 69 65 6c 64 73 20 69 6e 20 74 68 65 20 74 61 62  ields in the tab
1b80: 6c 65 20 6f 72 20 69 6e 64 65 78 20 2a 2f 0a 20  le or index */. 
1b90: 20 69 6e 74 20 69 44 62 2c 20 20 20 20 20 20 20   int iDb,       
1ba0: 20 20 20 20 20 20 20 2f 2a 20 57 68 65 6e 20 64         /* When d
1bb0: 61 74 61 62 61 73 65 20 74 68 65 20 63 75 72 73  atabase the curs
1bc0: 6f 72 20 62 65 6c 6f 6e 67 73 20 74 6f 2c 20 6f  or belongs to, o
1bd0: 72 20 2d 31 20 2a 2f 0a 20 20 69 6e 74 20 69 73  r -1 */.  int is
1be0: 42 74 72 65 65 43 75 72 73 6f 72 20 20 20 20 20  BtreeCursor     
1bf0: 2f 2a 20 54 72 75 65 20 66 6f 72 20 42 2d 54 72  /* True for B-Tr
1c00: 65 65 2e 20 20 46 61 6c 73 65 20 66 6f 72 20 70  ee.  False for p
1c10: 73 65 75 64 6f 2d 74 61 62 6c 65 20 6f 72 20 76  seudo-table or v
1c20: 74 61 62 20 2a 2f 0a 29 7b 0a 20 20 2f 2a 20 46  tab */.){.  /* F
1c30: 69 6e 64 20 74 68 65 20 6d 65 6d 6f 72 79 20 63  ind the memory c
1c40: 65 6c 6c 20 74 68 61 74 20 77 69 6c 6c 20 62 65  ell that will be
1c50: 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74   used to store t
1c60: 68 65 20 62 6c 6f 62 20 6f 66 20 6d 65 6d 6f 72  he blob of memor
1c70: 79 0a 20 20 2a 2a 20 72 65 71 75 69 72 65 64 20  y.  ** required 
1c80: 66 6f 72 20 74 68 69 73 20 56 64 62 65 43 75 72  for this VdbeCur
1c90: 73 6f 72 20 73 74 72 75 63 74 75 72 65 2e 20 49  sor structure. I
1ca0: 74 20 69 73 20 63 6f 6e 76 65 6e 69 65 6e 74 20  t is convenient 
1cb0: 74 6f 20 75 73 65 20 61 20 0a 20 20 2a 2a 20 76  to use a .  ** v
1cc0: 64 62 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20  dbe memory cell 
1cd0: 74 6f 20 6d 61 6e 61 67 65 20 74 68 65 20 6d 65  to manage the me
1ce0: 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20  mory allocation 
1cf0: 72 65 71 75 69 72 65 64 20 66 6f 72 20 61 0a 20  required for a. 
1d00: 20 2a 2a 20 56 64 62 65 43 75 72 73 6f 72 20 73   ** VdbeCursor s
1d10: 74 72 75 63 74 75 72 65 20 66 6f 72 20 74 68 65  tructure for the
1d20: 20 66 6f 6c 6c 6f 77 69 6e 67 20 72 65 61 73 6f   following reaso
1d30: 6e 73 3a 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 20  ns:.  **.  **   
1d40: 2a 20 53 6f 6d 65 74 69 6d 65 73 20 63 75 72 73  * Sometimes curs
1d50: 6f 72 20 6e 75 6d 62 65 72 73 20 61 72 65 20 75  or numbers are u
1d60: 73 65 64 20 66 6f 72 20 61 20 63 6f 75 70 6c 65  sed for a couple
1d70: 20 6f 66 20 64 69 66 66 65 72 65 6e 74 0a 20 20   of different.  
1d80: 2a 2a 20 20 20 20 20 70 75 72 70 6f 73 65 73 20  **     purposes 
1d90: 69 6e 20 61 20 76 64 62 65 20 70 72 6f 67 72 61  in a vdbe progra
1da0: 6d 2e 20 54 68 65 20 64 69 66 66 65 72 65 6e 74  m. The different
1db0: 20 75 73 65 73 20 6d 69 67 68 74 20 72 65 71 75   uses might requ
1dc0: 69 72 65 0a 20 20 2a 2a 20 20 20 20 20 64 69 66  ire.  **     dif
1dd0: 66 65 72 65 6e 74 20 73 69 7a 65 64 20 61 6c 6c  ferent sized all
1de0: 6f 63 61 74 69 6f 6e 73 2e 20 4d 65 6d 6f 72 79  ocations. Memory
1df0: 20 63 65 6c 6c 73 20 70 72 6f 76 69 64 65 20 67   cells provide g
1e00: 72 6f 77 61 62 6c 65 0a 20 20 2a 2a 20 20 20 20  rowable.  **    
1e10: 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 2e 0a 20 20   allocations..  
1e20: 2a 2a 0a 20 20 2a 2a 20 20 20 2a 20 57 68 65 6e  **.  **   * When
1e30: 20 75 73 69 6e 67 20 45 4e 41 42 4c 45 5f 4d 45   using ENABLE_ME
1e40: 4d 4f 52 59 5f 4d 41 4e 41 47 45 4d 45 4e 54 2c  MORY_MANAGEMENT,
1e50: 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 62 75 66   memory cell buf
1e60: 66 65 72 73 20 63 61 6e 0a 20 20 2a 2a 20 20 20  fers can.  **   
1e70: 20 20 62 65 20 66 72 65 65 64 20 6c 61 7a 69 6c    be freed lazil
1e80: 79 20 76 69 61 20 74 68 65 20 73 71 6c 69 74 65  y via the sqlite
1e90: 33 5f 72 65 6c 65 61 73 65 5f 6d 65 6d 6f 72 79  3_release_memory
1ea0: 28 29 20 41 50 49 2e 20 54 68 69 73 0a 20 20 2a  () API. This.  *
1eb0: 2a 20 20 20 20 20 6d 69 6e 69 6d 69 7a 65 73 20  *     minimizes 
1ec0: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6d 61  the number of ma
1ed0: 6c 6c 6f 63 20 63 61 6c 6c 73 20 6d 61 64 65 20  lloc calls made 
1ee0: 62 79 20 74 68 65 20 73 79 73 74 65 6d 2e 0a 20  by the system.. 
1ef0: 20 2a 2a 0a 20 20 2a 2a 20 4d 65 6d 6f 72 79 20   **.  ** Memory 
1f00: 63 65 6c 6c 73 20 66 6f 72 20 63 75 72 73 6f 72  cells for cursor
1f10: 73 20 61 72 65 20 61 6c 6c 6f 63 61 74 65 64 20  s are allocated 
1f20: 61 74 20 74 68 65 20 74 6f 70 20 6f 66 20 74 68  at the top of th
1f30: 65 20 61 64 64 72 65 73 73 0a 20 20 2a 2a 20 73  e address.  ** s
1f40: 70 61 63 65 2e 20 4d 65 6d 6f 72 79 20 63 65 6c  pace. Memory cel
1f50: 6c 20 28 70 2d 3e 6e 4d 65 6d 29 20 63 6f 72 72  l (p->nMem) corr
1f60: 65 73 70 6f 6e 64 73 20 74 6f 20 63 75 72 73 6f  esponds to curso
1f70: 72 20 30 2e 20 53 70 61 63 65 20 66 6f 72 0a 20  r 0. Space for. 
1f80: 20 2a 2a 20 63 75 72 73 6f 72 20 31 20 69 73 20   ** cursor 1 is 
1f90: 6d 61 6e 61 67 65 64 20 62 79 20 6d 65 6d 6f 72  managed by memor
1fa0: 79 20 63 65 6c 6c 20 28 70 2d 3e 6e 4d 65 6d 2d  y cell (p->nMem-
1fb0: 31 29 2c 20 65 74 63 2e 0a 20 20 2a 2f 0a 20 20  1), etc..  */.  
1fc0: 4d 65 6d 20 2a 70 4d 65 6d 20 3d 20 26 70 2d 3e  Mem *pMem = &p->
1fd0: 61 4d 65 6d 5b 70 2d 3e 6e 4d 65 6d 2d 69 43 75  aMem[p->nMem-iCu
1fe0: 72 5d 3b 0a 0a 20 20 69 6e 74 20 6e 42 79 74 65  r];..  int nByte
1ff0: 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  ;.  VdbeCursor *
2000: 70 43 78 20 3d 20 30 3b 0a 20 20 6e 42 79 74 65  pCx = 0;.  nByte
2010: 20 3d 20 0a 20 20 20 20 20 20 52 4f 55 4e 44 38   = .      ROUND8
2020: 28 73 69 7a 65 6f 66 28 56 64 62 65 43 75 72 73  (sizeof(VdbeCurs
2030: 6f 72 29 29 20 2b 20 0a 20 20 20 20 20 20 28 69  or)) + .      (i
2040: 73 42 74 72 65 65 43 75 72 73 6f 72 3f 73 71 6c  sBtreeCursor?sql
2050: 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 53  ite3BtreeCursorS
2060: 69 7a 65 28 29 3a 30 29 20 2b 20 0a 20 20 20 20  ize():0) + .    
2070: 20 20 32 2a 6e 46 69 65 6c 64 2a 73 69 7a 65 6f    2*nField*sizeo
2080: 66 28 75 33 32 29 3b 0a 0a 20 20 61 73 73 65 72  f(u32);..  asser
2090: 74 28 20 69 43 75 72 3c 70 2d 3e 6e 43 75 72 73  t( iCur<p->nCurs
20a0: 6f 72 20 29 3b 0a 20 20 69 66 28 20 70 2d 3e 61  or );.  if( p->a
20b0: 70 43 73 72 5b 69 43 75 72 5d 20 29 7b 0a 20 20  pCsr[iCur] ){.  
20c0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 46 72 65    sqlite3VdbeFre
20d0: 65 43 75 72 73 6f 72 28 70 2c 20 70 2d 3e 61 70  eCursor(p, p->ap
20e0: 43 73 72 5b 69 43 75 72 5d 29 3b 0a 20 20 20 20  Csr[iCur]);.    
20f0: 70 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 20 3d  p->apCsr[iCur] =
2100: 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 53 51   0;.  }.  if( SQ
2110: 4c 49 54 45 5f 4f 4b 3d 3d 73 71 6c 69 74 65 33  LITE_OK==sqlite3
2120: 56 64 62 65 4d 65 6d 47 72 6f 77 28 70 4d 65 6d  VdbeMemGrow(pMem
2130: 2c 20 6e 42 79 74 65 2c 20 30 29 20 29 7b 0a 20  , nByte, 0) ){. 
2140: 20 20 20 70 2d 3e 61 70 43 73 72 5b 69 43 75 72     p->apCsr[iCur
2150: 5d 20 3d 20 70 43 78 20 3d 20 28 56 64 62 65 43  ] = pCx = (VdbeC
2160: 75 72 73 6f 72 2a 29 70 4d 65 6d 2d 3e 7a 3b 0a  ursor*)pMem->z;.
2170: 20 20 20 20 6d 65 6d 73 65 74 28 70 43 78 2c 20      memset(pCx, 
2180: 30 2c 20 73 69 7a 65 6f 66 28 56 64 62 65 43 75  0, sizeof(VdbeCu
2190: 72 73 6f 72 29 29 3b 0a 20 20 20 20 70 43 78 2d  rsor));.    pCx-
21a0: 3e 69 44 62 20 3d 20 69 44 62 3b 0a 20 20 20 20  >iDb = iDb;.    
21b0: 70 43 78 2d 3e 6e 46 69 65 6c 64 20 3d 20 6e 46  pCx->nField = nF
21c0: 69 65 6c 64 3b 0a 20 20 20 20 69 66 28 20 6e 46  ield;.    if( nF
21d0: 69 65 6c 64 20 29 7b 0a 20 20 20 20 20 20 70 43  ield ){.      pC
21e0: 78 2d 3e 61 54 79 70 65 20 3d 20 28 75 33 32 20  x->aType = (u32 
21f0: 2a 29 26 70 4d 65 6d 2d 3e 7a 5b 52 4f 55 4e 44  *)&pMem->z[ROUND
2200: 38 28 73 69 7a 65 6f 66 28 56 64 62 65 43 75 72  8(sizeof(VdbeCur
2210: 73 6f 72 29 29 5d 3b 0a 20 20 20 20 7d 0a 20 20  sor))];.    }.  
2220: 20 20 69 66 28 20 69 73 42 74 72 65 65 43 75 72    if( isBtreeCur
2230: 73 6f 72 20 29 7b 0a 20 20 20 20 20 20 70 43 78  sor ){.      pCx
2240: 2d 3e 70 43 75 72 73 6f 72 20 3d 20 28 42 74 43  ->pCursor = (BtC
2250: 75 72 73 6f 72 2a 29 0a 20 20 20 20 20 20 20 20  ursor*).        
2260: 20 20 26 70 4d 65 6d 2d 3e 7a 5b 52 4f 55 4e 44    &pMem->z[ROUND
2270: 38 28 73 69 7a 65 6f 66 28 56 64 62 65 43 75 72  8(sizeof(VdbeCur
2280: 73 6f 72 29 29 2b 32 2a 6e 46 69 65 6c 64 2a 73  sor))+2*nField*s
2290: 69 7a 65 6f 66 28 75 33 32 29 5d 3b 0a 20 20 20  izeof(u32)];.   
22a0: 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 43     sqlite3BtreeC
22b0: 75 72 73 6f 72 5a 65 72 6f 28 70 43 78 2d 3e 70  ursorZero(pCx->p
22c0: 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 7d 0a 20  Cursor);.    }. 
22d0: 20 7d 0a 20 20 72 65 74 75 72 6e 20 70 43 78 3b   }.  return pCx;
22e0: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 72 79 20 74 6f  .}../*.** Try to
22f0: 20 63 6f 6e 76 65 72 74 20 61 20 76 61 6c 75 65   convert a value
2300: 20 69 6e 74 6f 20 61 20 6e 75 6d 65 72 69 63 20   into a numeric 
2310: 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 69  representation i
2320: 66 20 77 65 20 63 61 6e 0a 2a 2a 20 64 6f 20 73  f we can.** do s
2330: 6f 20 77 69 74 68 6f 75 74 20 6c 6f 73 73 20 6f  o without loss o
2340: 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 20 20  f information.  
2350: 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
2360: 69 66 20 74 68 65 20 73 74 72 69 6e 67 0a 2a 2a  if the string.**
2370: 20 6c 6f 6f 6b 73 20 6c 69 6b 65 20 61 20 6e 75   looks like a nu
2380: 6d 62 65 72 2c 20 63 6f 6e 76 65 72 74 20 69 74  mber, convert it
2390: 20 69 6e 74 6f 20 61 20 6e 75 6d 62 65 72 2e 20   into a number. 
23a0: 20 49 66 20 69 74 20 64 6f 65 73 20 6e 6f 74 0a   If it does not.
23b0: 2a 2a 20 6c 6f 6f 6b 20 6c 69 6b 65 20 61 20 6e  ** look like a n
23c0: 75 6d 62 65 72 2c 20 6c 65 61 76 65 20 69 74 20  umber, leave it 
23d0: 61 6c 6f 6e 65 2e 0a 2a 2f 0a 73 74 61 74 69 63  alone..*/.static
23e0: 20 76 6f 69 64 20 61 70 70 6c 79 4e 75 6d 65 72   void applyNumer
23f0: 69 63 41 66 66 69 6e 69 74 79 28 4d 65 6d 20 2a  icAffinity(Mem *
2400: 70 52 65 63 29 7b 0a 20 20 69 66 28 20 28 70 52  pRec){.  if( (pR
2410: 65 63 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d  ec->flags & (MEM
2420: 5f 52 65 61 6c 7c 4d 45 4d 5f 49 6e 74 29 29 3d  _Real|MEM_Int))=
2430: 3d 30 20 29 7b 0a 20 20 20 20 64 6f 75 62 6c 65  =0 ){.    double
2440: 20 72 56 61 6c 75 65 3b 0a 20 20 20 20 69 36 34   rValue;.    i64
2450: 20 69 56 61 6c 75 65 3b 0a 20 20 20 20 75 38 20   iValue;.    u8 
2460: 65 6e 63 20 3d 20 70 52 65 63 2d 3e 65 6e 63 3b  enc = pRec->enc;
2470: 0a 20 20 20 20 69 66 28 20 28 70 52 65 63 2d 3e  .    if( (pRec->
2480: 66 6c 61 67 73 26 4d 45 4d 5f 53 74 72 29 3d 3d  flags&MEM_Str)==
2490: 30 20 29 20 72 65 74 75 72 6e 3b 0a 20 20 20 20  0 ) return;.    
24a0: 69 66 28 20 73 71 6c 69 74 65 33 41 74 6f 46 28  if( sqlite3AtoF(
24b0: 70 52 65 63 2d 3e 7a 2c 20 26 72 56 61 6c 75 65  pRec->z, &rValue
24c0: 2c 20 70 52 65 63 2d 3e 6e 2c 20 65 6e 63 29 3d  , pRec->n, enc)=
24d0: 3d 30 20 29 20 72 65 74 75 72 6e 3b 0a 20 20 20  =0 ) return;.   
24e0: 20 69 66 28 20 30 3d 3d 73 71 6c 69 74 65 33 41   if( 0==sqlite3A
24f0: 74 6f 69 36 34 28 70 52 65 63 2d 3e 7a 2c 20 26  toi64(pRec->z, &
2500: 69 56 61 6c 75 65 2c 20 70 52 65 63 2d 3e 6e 2c  iValue, pRec->n,
2510: 20 65 6e 63 29 20 29 7b 0a 20 20 20 20 20 20 70   enc) ){.      p
2520: 52 65 63 2d 3e 75 2e 69 20 3d 20 69 56 61 6c 75  Rec->u.i = iValu
2530: 65 3b 0a 20 20 20 20 20 20 70 52 65 63 2d 3e 66  e;.      pRec->f
2540: 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 49 6e 74 3b  lags |= MEM_Int;
2550: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
2560: 20 20 70 52 65 63 2d 3e 72 20 3d 20 72 56 61 6c    pRec->r = rVal
2570: 75 65 3b 0a 20 20 20 20 20 20 70 52 65 63 2d 3e  ue;.      pRec->
2580: 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 52 65 61  flags |= MEM_Rea
2590: 6c 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a 0a  l;.    }.  }.}..
25a0: 2f 2a 0a 2a 2a 20 50 72 6f 63 65 73 73 69 6e 67  /*.** Processing
25b0: 20 69 73 20 64 65 74 65 72 6d 69 6e 65 20 62 79   is determine by
25c0: 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 70 61   the affinity pa
25d0: 72 61 6d 65 74 65 72 3a 0a 2a 2a 0a 2a 2a 20 53  rameter:.**.** S
25e0: 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45  QLITE_AFF_INTEGE
25f0: 52 3a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46  R:.** SQLITE_AFF
2600: 5f 52 45 41 4c 3a 0a 2a 2a 20 53 51 4c 49 54 45  _REAL:.** SQLITE
2610: 5f 41 46 46 5f 4e 55 4d 45 52 49 43 3a 0a 2a 2a  _AFF_NUMERIC:.**
2620: 20 20 20 20 54 72 79 20 74 6f 20 63 6f 6e 76 65      Try to conve
2630: 72 74 20 70 52 65 63 20 74 6f 20 61 6e 20 69 6e  rt pRec to an in
2640: 74 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 61  teger representa
2650: 74 69 6f 6e 20 6f 72 20 61 20 0a 2a 2a 20 20 20  tion or a .**   
2660: 20 66 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e 74 20   floating-point 
2670: 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 69  representation i
2680: 66 20 61 6e 20 69 6e 74 65 67 65 72 20 72 65 70  f an integer rep
2690: 72 65 73 65 6e 74 61 74 69 6f 6e 0a 2a 2a 20 20  resentation.**  
26a0: 20 20 69 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c    is not possibl
26b0: 65 2e 20 20 4e 6f 74 65 20 74 68 61 74 20 74 68  e.  Note that th
26c0: 65 20 69 6e 74 65 67 65 72 20 72 65 70 72 65 73  e integer repres
26d0: 65 6e 74 61 74 69 6f 6e 20 69 73 0a 2a 2a 20 20  entation is.**  
26e0: 20 20 61 6c 77 61 79 73 20 70 72 65 66 65 72 72    always preferr
26f0: 65 64 2c 20 65 76 65 6e 20 69 66 20 74 68 65 20  ed, even if the 
2700: 61 66 66 69 6e 69 74 79 20 69 73 20 52 45 41 4c  affinity is REAL
2710: 2c 20 62 65 63 61 75 73 65 0a 2a 2a 20 20 20 20  , because.**    
2720: 61 6e 20 69 6e 74 65 67 65 72 20 72 65 70 72 65  an integer repre
2730: 73 65 6e 74 61 74 69 6f 6e 20 69 73 20 6d 6f 72  sentation is mor
2740: 65 20 73 70 61 63 65 20 65 66 66 69 63 69 65 6e  e space efficien
2750: 74 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2a 0a 2a 2a  t on disk..**.**
2760: 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54   SQLITE_AFF_TEXT
2770: 3a 0a 2a 2a 20 20 20 20 43 6f 6e 76 65 72 74 20  :.**    Convert 
2780: 70 52 65 63 20 74 6f 20 61 20 74 65 78 74 20 72  pRec to a text r
2790: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e 0a 2a  epresentation..*
27a0: 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f  *.** SQLITE_AFF_
27b0: 4e 4f 4e 45 3a 0a 2a 2a 20 20 20 20 4e 6f 2d 6f  NONE:.**    No-o
27c0: 70 2e 20 20 70 52 65 63 20 69 73 20 75 6e 63 68  p.  pRec is unch
27d0: 61 6e 67 65 64 2e 0a 2a 2f 0a 73 74 61 74 69 63  anged..*/.static
27e0: 20 76 6f 69 64 20 61 70 70 6c 79 41 66 66 69 6e   void applyAffin
27f0: 69 74 79 28 0a 20 20 4d 65 6d 20 2a 70 52 65 63  ity(.  Mem *pRec
2800: 2c 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  ,          /* Th
2810: 65 20 76 61 6c 75 65 20 74 6f 20 61 70 70 6c 79  e value to apply
2820: 20 61 66 66 69 6e 69 74 79 20 74 6f 20 2a 2f 0a   affinity to */.
2830: 20 20 63 68 61 72 20 61 66 66 69 6e 69 74 79 2c    char affinity,
2840: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61 66 66        /* The aff
2850: 69 6e 69 74 79 20 74 6f 20 62 65 20 61 70 70 6c  inity to be appl
2860: 69 65 64 20 2a 2f 0a 20 20 75 38 20 65 6e 63 20  ied */.  u8 enc 
2870: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
2880: 55 73 65 20 74 68 69 73 20 74 65 78 74 20 65 6e  Use this text en
2890: 63 6f 64 69 6e 67 20 2a 2f 0a 29 7b 0a 20 20 69  coding */.){.  i
28a0: 66 28 20 61 66 66 69 6e 69 74 79 3d 3d 53 51 4c  f( affinity==SQL
28b0: 49 54 45 5f 41 46 46 5f 54 45 58 54 20 29 7b 0a  ITE_AFF_TEXT ){.
28c0: 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 61 74 74 65      /* Only atte
28d0: 6d 70 74 20 74 68 65 20 63 6f 6e 76 65 72 73 69  mpt the conversi
28e0: 6f 6e 20 74 6f 20 54 45 58 54 20 69 66 20 74 68  on to TEXT if th
28f0: 65 72 65 20 69 73 20 61 6e 20 69 6e 74 65 67 65  ere is an intege
2900: 72 20 6f 72 20 72 65 61 6c 0a 20 20 20 20 2a 2a  r or real.    **
2910: 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   representation 
2920: 28 62 6c 6f 62 20 61 6e 64 20 4e 55 4c 4c 20 64  (blob and NULL d
2930: 6f 20 6e 6f 74 20 67 65 74 20 63 6f 6e 76 65 72  o not get conver
2940: 74 65 64 29 20 62 75 74 20 6e 6f 20 73 74 72 69  ted) but no stri
2950: 6e 67 0a 20 20 20 20 2a 2a 20 72 65 70 72 65 73  ng.    ** repres
2960: 65 6e 74 61 74 69 6f 6e 2e 0a 20 20 20 20 2a 2f  entation..    */
2970: 0a 20 20 20 20 69 66 28 20 30 3d 3d 28 70 52 65  .    if( 0==(pRe
2980: 63 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 53 74 72  c->flags&MEM_Str
2990: 29 20 26 26 20 28 70 52 65 63 2d 3e 66 6c 61 67  ) && (pRec->flag
29a0: 73 26 28 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f  s&(MEM_Real|MEM_
29b0: 49 6e 74 29 29 20 29 7b 0a 20 20 20 20 20 20 73  Int)) ){.      s
29c0: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74 72  qlite3VdbeMemStr
29d0: 69 6e 67 69 66 79 28 70 52 65 63 2c 20 65 6e 63  ingify(pRec, enc
29e0: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 52 65  );.    }.    pRe
29f0: 63 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 28 4d 45  c->flags &= ~(ME
2a00: 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 49 6e 74 29 3b  M_Real|MEM_Int);
2a10: 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 61 66 66  .  }else if( aff
2a20: 69 6e 69 74 79 21 3d 53 51 4c 49 54 45 5f 41 46  inity!=SQLITE_AF
2a30: 46 5f 4e 4f 4e 45 20 29 7b 0a 20 20 20 20 61 73  F_NONE ){.    as
2a40: 73 65 72 74 28 20 61 66 66 69 6e 69 74 79 3d 3d  sert( affinity==
2a50: 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47  SQLITE_AFF_INTEG
2a60: 45 52 20 7c 7c 20 61 66 66 69 6e 69 74 79 3d 3d  ER || affinity==
2a70: 53 51 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c 0a  SQLITE_AFF_REAL.
2a80: 20 20 20 20 20 20 20 20 20 20 20 20 20 7c 7c 20               || 
2a90: 61 66 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45  affinity==SQLITE
2aa0: 5f 41 46 46 5f 4e 55 4d 45 52 49 43 20 29 3b 0a  _AFF_NUMERIC );.
2ab0: 20 20 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63      applyNumeric
2ac0: 41 66 66 69 6e 69 74 79 28 70 52 65 63 29 3b 0a  Affinity(pRec);.
2ad0: 20 20 20 20 69 66 28 20 70 52 65 63 2d 3e 66 6c      if( pRec->fl
2ae0: 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 20 29  ags & MEM_Real )
2af0: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  {.      sqlite3V
2b00: 64 62 65 49 6e 74 65 67 65 72 41 66 66 69 6e 69  dbeIntegerAffini
2b10: 74 79 28 70 52 65 63 29 3b 0a 20 20 20 20 7d 0a  ty(pRec);.    }.
2b20: 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 72 79    }.}../*.** Try
2b30: 20 74 6f 20 63 6f 6e 76 65 72 74 20 74 68 65 20   to convert the 
2b40: 74 79 70 65 20 6f 66 20 61 20 66 75 6e 63 74 69  type of a functi
2b50: 6f 6e 20 61 72 67 75 6d 65 6e 74 20 6f 72 20 61  on argument or a
2b60: 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 0a 2a   result column.*
2b70: 2a 20 69 6e 74 6f 20 61 20 6e 75 6d 65 72 69 63  * into a numeric
2b80: 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e   representation.
2b90: 20 20 55 73 65 20 65 69 74 68 65 72 20 49 4e 54    Use either INT
2ba0: 45 47 45 52 20 6f 72 20 52 45 41 4c 20 77 68 69  EGER or REAL whi
2bb0: 63 68 65 76 65 72 0a 2a 2a 20 69 73 20 61 70 70  chever.** is app
2bc0: 72 6f 70 72 69 61 74 65 2e 20 20 42 75 74 20 6f  ropriate.  But o
2bd0: 6e 6c 79 20 64 6f 20 74 68 65 20 63 6f 6e 76 65  nly do the conve
2be0: 72 73 69 6f 6e 20 69 66 20 69 74 20 69 73 20 70  rsion if it is p
2bf0: 6f 73 73 69 62 6c 65 20 77 69 74 68 6f 75 74 0a  ossible without.
2c00: 2a 2a 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72  ** loss of infor
2c10: 6d 61 74 69 6f 6e 20 61 6e 64 20 72 65 74 75 72  mation and retur
2c20: 6e 20 74 68 65 20 72 65 76 69 73 65 64 20 74 79  n the revised ty
2c30: 70 65 20 6f 66 20 74 68 65 20 61 72 67 75 6d 65  pe of the argume
2c40: 6e 74 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  nt..*/.int sqlit
2c50: 65 33 5f 76 61 6c 75 65 5f 6e 75 6d 65 72 69 63  e3_value_numeric
2c60: 5f 74 79 70 65 28 73 71 6c 69 74 65 33 5f 76 61  _type(sqlite3_va
2c70: 6c 75 65 20 2a 70 56 61 6c 29 7b 0a 20 20 4d 65  lue *pVal){.  Me
2c80: 6d 20 2a 70 4d 65 6d 20 3d 20 28 4d 65 6d 2a 29  m *pMem = (Mem*)
2c90: 70 56 61 6c 3b 0a 20 20 69 66 28 20 70 4d 65 6d  pVal;.  if( pMem
2ca0: 2d 3e 74 79 70 65 3d 3d 53 51 4c 49 54 45 5f 54  ->type==SQLITE_T
2cb0: 45 58 54 20 29 7b 0a 20 20 20 20 61 70 70 6c 79  EXT ){.    apply
2cc0: 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28  NumericAffinity(
2cd0: 70 4d 65 6d 29 3b 0a 20 20 20 20 73 71 6c 69 74  pMem);.    sqlit
2ce0: 65 33 56 64 62 65 4d 65 6d 53 74 6f 72 65 54 79  e3VdbeMemStoreTy
2cf0: 70 65 28 70 4d 65 6d 29 3b 0a 20 20 7d 0a 20 20  pe(pMem);.  }.  
2d00: 72 65 74 75 72 6e 20 70 4d 65 6d 2d 3e 74 79 70  return pMem->typ
2d10: 65 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 45 78 70 6f  e;.}../*.** Expo
2d20: 72 74 65 64 20 76 65 72 73 69 6f 6e 20 6f 66 20  rted version of 
2d30: 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 29 2e  applyAffinity().
2d40: 20 54 68 69 73 20 6f 6e 65 20 77 6f 72 6b 73 20   This one works 
2d50: 6f 6e 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  on sqlite3_value
2d60: 2a 2c 20 0a 2a 2a 20 6e 6f 74 20 74 68 65 20 69  *, .** not the i
2d70: 6e 74 65 72 6e 61 6c 20 4d 65 6d 2a 20 74 79 70  nternal Mem* typ
2d80: 65 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74  e..*/.void sqlit
2d90: 65 33 56 61 6c 75 65 41 70 70 6c 79 41 66 66 69  e3ValueApplyAffi
2da0: 6e 69 74 79 28 0a 20 20 73 71 6c 69 74 65 33 5f  nity(.  sqlite3_
2db0: 76 61 6c 75 65 20 2a 70 56 61 6c 2c 20 0a 20 20  value *pVal, .  
2dc0: 75 38 20 61 66 66 69 6e 69 74 79 2c 20 0a 20 20  u8 affinity, .  
2dd0: 75 38 20 65 6e 63 0a 29 7b 0a 20 20 61 70 70 6c  u8 enc.){.  appl
2de0: 79 41 66 66 69 6e 69 74 79 28 28 4d 65 6d 20 2a  yAffinity((Mem *
2df0: 29 70 56 61 6c 2c 20 61 66 66 69 6e 69 74 79 2c  )pVal, affinity,
2e00: 20 65 6e 63 29 3b 0a 7d 0a 0a 23 69 66 64 65 66   enc);.}..#ifdef
2e10: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a   SQLITE_DEBUG./*
2e20: 0a 2a 2a 20 57 72 69 74 65 20 61 20 6e 69 63 65  .** Write a nice
2e30: 20 73 74 72 69 6e 67 20 72 65 70 72 65 73 65 6e   string represen
2e40: 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 63 6f  tation of the co
2e50: 6e 74 65 6e 74 73 20 6f 66 20 63 65 6c 6c 20 70  ntents of cell p
2e60: 4d 65 6d 0a 2a 2a 20 69 6e 74 6f 20 62 75 66 66  Mem.** into buff
2e70: 65 72 20 7a 42 75 66 2c 20 6c 65 6e 67 74 68 20  er zBuf, length 
2e80: 6e 42 75 66 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71  nBuf..*/.void sq
2e90: 6c 69 74 65 33 56 64 62 65 4d 65 6d 50 72 65 74  lite3VdbeMemPret
2ea0: 74 79 50 72 69 6e 74 28 4d 65 6d 20 2a 70 4d 65  tyPrint(Mem *pMe
2eb0: 6d 2c 20 63 68 61 72 20 2a 7a 42 75 66 29 7b 0a  m, char *zBuf){.
2ec0: 20 20 63 68 61 72 20 2a 7a 43 73 72 20 3d 20 7a    char *zCsr = z
2ed0: 42 75 66 3b 0a 20 20 69 6e 74 20 66 20 3d 20 70  Buf;.  int f = p
2ee0: 4d 65 6d 2d 3e 66 6c 61 67 73 3b 0a 0a 20 20 73  Mem->flags;..  s
2ef0: 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72  tatic const char
2f00: 20 2a 63 6f 6e 73 74 20 65 6e 63 6e 61 6d 65 73   *const encnames
2f10: 5b 5d 20 3d 20 7b 22 28 58 29 22 2c 20 22 28 38  [] = {"(X)", "(8
2f20: 29 22 2c 20 22 28 31 36 4c 45 29 22 2c 20 22 28  )", "(16LE)", "(
2f30: 31 36 42 45 29 22 7d 3b 0a 0a 20 20 69 66 28 20  16BE)"};..  if( 
2f40: 66 26 4d 45 4d 5f 42 6c 6f 62 20 29 7b 0a 20 20  f&MEM_Blob ){.  
2f50: 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 63 68 61    int i;.    cha
2f60: 72 20 63 3b 0a 20 20 20 20 69 66 28 20 66 20 26  r c;.    if( f &
2f70: 20 4d 45 4d 5f 44 79 6e 20 29 7b 0a 20 20 20 20   MEM_Dyn ){.    
2f80: 20 20 63 20 3d 20 27 7a 27 3b 0a 20 20 20 20 20    c = 'z';.     
2f90: 20 61 73 73 65 72 74 28 20 28 66 20 26 20 28 4d   assert( (f & (M
2fa0: 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 45 70  EM_Static|MEM_Ep
2fb0: 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20  hem))==0 );.    
2fc0: 7d 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45  }else if( f & ME
2fd0: 4d 5f 53 74 61 74 69 63 20 29 7b 0a 20 20 20 20  M_Static ){.    
2fe0: 20 20 63 20 3d 20 27 74 27 3b 0a 20 20 20 20 20    c = 't';.     
2ff0: 20 61 73 73 65 72 74 28 20 28 66 20 26 20 28 4d   assert( (f & (M
3000: 45 4d 5f 44 79 6e 7c 4d 45 4d 5f 45 70 68 65 6d  EM_Dyn|MEM_Ephem
3010: 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c  ))==0 );.    }el
3020: 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 45  se if( f & MEM_E
3030: 70 68 65 6d 20 29 7b 0a 20 20 20 20 20 20 63 20  phem ){.      c 
3040: 3d 20 27 65 27 3b 0a 20 20 20 20 20 20 61 73 73  = 'e';.      ass
3050: 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53  ert( (f & (MEM_S
3060: 74 61 74 69 63 7c 4d 45 4d 5f 44 79 6e 29 29 3d  tatic|MEM_Dyn))=
3070: 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  =0 );.    }else{
3080: 0a 20 20 20 20 20 20 63 20 3d 20 27 73 27 3b 0a  .      c = 's';.
3090: 20 20 20 20 7d 0a 0a 20 20 20 20 73 71 6c 69 74      }..    sqlit
30a0: 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c  e3_snprintf(100,
30b0: 20 7a 43 73 72 2c 20 22 25 63 22 2c 20 63 29 3b   zCsr, "%c", c);
30c0: 0a 20 20 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c  .    zCsr += sql
30d0: 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 43 73  ite3Strlen30(zCs
30e0: 72 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  r);.    sqlite3_
30f0: 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43  snprintf(100, zC
3100: 73 72 2c 20 22 25 64 5b 22 2c 20 70 4d 65 6d 2d  sr, "%d[", pMem-
3110: 3e 6e 29 3b 0a 20 20 20 20 7a 43 73 72 20 2b 3d  >n);.    zCsr +=
3120: 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30   sqlite3Strlen30
3130: 28 7a 43 73 72 29 3b 0a 20 20 20 20 66 6f 72 28  (zCsr);.    for(
3140: 69 3d 30 3b 20 69 3c 31 36 20 26 26 20 69 3c 70  i=0; i<16 && i<p
3150: 4d 65 6d 2d 3e 6e 3b 20 69 2b 2b 29 7b 0a 20 20  Mem->n; i++){.  
3160: 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72      sqlite3_snpr
3170: 69 6e 74 66 28 31 30 30 2c 20 7a 43 73 72 2c 20  intf(100, zCsr, 
3180: 22 25 30 32 58 22 2c 20 28 28 69 6e 74 29 70 4d  "%02X", ((int)pM
3190: 65 6d 2d 3e 7a 5b 69 5d 20 26 20 30 78 46 46 29  em->z[i] & 0xFF)
31a0: 29 3b 0a 20 20 20 20 20 20 7a 43 73 72 20 2b 3d  );.      zCsr +=
31b0: 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30   sqlite3Strlen30
31c0: 28 7a 43 73 72 29 3b 0a 20 20 20 20 7d 0a 20 20  (zCsr);.    }.  
31d0: 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 31 36 20    for(i=0; i<16 
31e0: 26 26 20 69 3c 70 4d 65 6d 2d 3e 6e 3b 20 69 2b  && i<pMem->n; i+
31f0: 2b 29 7b 0a 20 20 20 20 20 20 63 68 61 72 20 7a  +){.      char z
3200: 20 3d 20 70 4d 65 6d 2d 3e 7a 5b 69 5d 3b 0a 20   = pMem->z[i];. 
3210: 20 20 20 20 20 69 66 28 20 7a 3c 33 32 20 7c 7c       if( z<32 ||
3220: 20 7a 3e 31 32 36 20 29 20 2a 7a 43 73 72 2b 2b   z>126 ) *zCsr++
3230: 20 3d 20 27 2e 27 3b 0a 20 20 20 20 20 20 65 6c   = '.';.      el
3240: 73 65 20 2a 7a 43 73 72 2b 2b 20 3d 20 7a 3b 0a  se *zCsr++ = z;.
3250: 20 20 20 20 7d 0a 0a 20 20 20 20 73 71 6c 69 74      }..    sqlit
3260: 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c  e3_snprintf(100,
3270: 20 7a 43 73 72 2c 20 22 5d 25 73 22 2c 20 65 6e   zCsr, "]%s", en
3280: 63 6e 61 6d 65 73 5b 70 4d 65 6d 2d 3e 65 6e 63  cnames[pMem->enc
3290: 5d 29 3b 0a 20 20 20 20 7a 43 73 72 20 2b 3d 20  ]);.    zCsr += 
32a0: 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
32b0: 7a 43 73 72 29 3b 0a 20 20 20 20 69 66 28 20 66  zCsr);.    if( f
32c0: 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20   & MEM_Zero ){. 
32d0: 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70       sqlite3_snp
32e0: 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73 72 2c  rintf(100, zCsr,
32f0: 22 2b 25 64 7a 22 2c 70 4d 65 6d 2d 3e 75 2e 6e  "+%dz",pMem->u.n
3300: 5a 65 72 6f 29 3b 0a 20 20 20 20 20 20 7a 43 73  Zero);.      zCs
3310: 72 20 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c  r += sqlite3Strl
3320: 65 6e 33 30 28 7a 43 73 72 29 3b 0a 20 20 20 20  en30(zCsr);.    
3330: 7d 0a 20 20 20 20 2a 7a 43 73 72 20 3d 20 27 5c  }.    *zCsr = '\
3340: 30 27 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  0';.  }else if( 
3350: 66 20 26 20 4d 45 4d 5f 53 74 72 20 29 7b 0a 20  f & MEM_Str ){. 
3360: 20 20 20 69 6e 74 20 6a 2c 20 6b 3b 0a 20 20 20     int j, k;.   
3370: 20 7a 42 75 66 5b 30 5d 20 3d 20 27 20 27 3b 0a   zBuf[0] = ' ';.
3380: 20 20 20 20 69 66 28 20 66 20 26 20 4d 45 4d 5f      if( f & MEM_
3390: 44 79 6e 20 29 7b 0a 20 20 20 20 20 20 7a 42 75  Dyn ){.      zBu
33a0: 66 5b 31 5d 20 3d 20 27 7a 27 3b 0a 20 20 20 20  f[1] = 'z';.    
33b0: 20 20 61 73 73 65 72 74 28 20 28 66 20 26 20 28    assert( (f & (
33c0: 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 45  MEM_Static|MEM_E
33d0: 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20  phem))==0 );.   
33e0: 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d   }else if( f & M
33f0: 45 4d 5f 53 74 61 74 69 63 20 29 7b 0a 20 20 20  EM_Static ){.   
3400: 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27 74 27     zBuf[1] = 't'
3410: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
3420: 28 66 20 26 20 28 4d 45 4d 5f 44 79 6e 7c 4d 45  (f & (MEM_Dyn|ME
3430: 4d 5f 45 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a  M_Ephem))==0 );.
3440: 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20      }else if( f 
3450: 26 20 4d 45 4d 5f 45 70 68 65 6d 20 29 7b 0a 20  & MEM_Ephem ){. 
3460: 20 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27       zBuf[1] = '
3470: 65 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  e';.      assert
3480: 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74 61 74  ( (f & (MEM_Stat
3490: 69 63 7c 4d 45 4d 5f 44 79 6e 29 29 3d 3d 30 20  ic|MEM_Dyn))==0 
34a0: 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  );.    }else{.  
34b0: 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27 73      zBuf[1] = 's
34c0: 27 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6b 20 3d  ';.    }.    k =
34d0: 20 32 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f   2;.    sqlite3_
34e0: 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 26 7a  snprintf(100, &z
34f0: 42 75 66 5b 6b 5d 2c 20 22 25 64 22 2c 20 70 4d  Buf[k], "%d", pM
3500: 65 6d 2d 3e 6e 29 3b 0a 20 20 20 20 6b 20 2b 3d  em->n);.    k +=
3510: 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30   sqlite3Strlen30
3520: 28 26 7a 42 75 66 5b 6b 5d 29 3b 0a 20 20 20 20  (&zBuf[k]);.    
3530: 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 27 5b 27 3b  zBuf[k++] = '[';
3540: 0a 20 20 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c  .    for(j=0; j<
3550: 31 35 20 26 26 20 6a 3c 70 4d 65 6d 2d 3e 6e 3b  15 && j<pMem->n;
3560: 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 75 38 20   j++){.      u8 
3570: 63 20 3d 20 70 4d 65 6d 2d 3e 7a 5b 6a 5d 3b 0a  c = pMem->z[j];.
3580: 20 20 20 20 20 20 69 66 28 20 63 3e 3d 30 78 32        if( c>=0x2
3590: 30 20 26 26 20 63 3c 30 78 37 66 20 29 7b 0a 20  0 && c<0x7f ){. 
35a0: 20 20 20 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d         zBuf[k++]
35b0: 20 3d 20 63 3b 0a 20 20 20 20 20 20 7d 65 6c 73   = c;.      }els
35c0: 65 7b 0a 20 20 20 20 20 20 20 20 7a 42 75 66 5b  e{.        zBuf[
35d0: 6b 2b 2b 5d 20 3d 20 27 2e 27 3b 0a 20 20 20 20  k++] = '.';.    
35e0: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 7a 42    }.    }.    zB
35f0: 75 66 5b 6b 2b 2b 5d 20 3d 20 27 5d 27 3b 0a 20  uf[k++] = ']';. 
3600: 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69     sqlite3_snpri
3610: 6e 74 66 28 31 30 30 2c 26 7a 42 75 66 5b 6b 5d  ntf(100,&zBuf[k]
3620: 2c 20 65 6e 63 6e 61 6d 65 73 5b 70 4d 65 6d 2d  , encnames[pMem-
3630: 3e 65 6e 63 5d 29 3b 0a 20 20 20 20 6b 20 2b 3d  >enc]);.    k +=
3640: 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30   sqlite3Strlen30
3650: 28 26 7a 42 75 66 5b 6b 5d 29 3b 0a 20 20 20 20  (&zBuf[k]);.    
3660: 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 30 3b 0a 20  zBuf[k++] = 0;. 
3670: 20 7d 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66   }.}.#endif..#if
3680: 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
3690: 0a 2f 2a 0a 2a 2a 20 50 72 69 6e 74 20 74 68 65  ./*.** Print the
36a0: 20 76 61 6c 75 65 20 6f 66 20 61 20 72 65 67 69   value of a regi
36b0: 73 74 65 72 20 66 6f 72 20 74 72 61 63 69 6e 67  ster for tracing
36c0: 20 70 75 72 70 6f 73 65 73 3a 0a 2a 2f 0a 73 74   purposes:.*/.st
36d0: 61 74 69 63 20 76 6f 69 64 20 6d 65 6d 54 72 61  atic void memTra
36e0: 63 65 50 72 69 6e 74 28 46 49 4c 45 20 2a 6f 75  cePrint(FILE *ou
36f0: 74 2c 20 4d 65 6d 20 2a 70 29 7b 0a 20 20 69 66  t, Mem *p){.  if
3700: 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  ( p->flags & MEM
3710: 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 66 70 72  _Null ){.    fpr
3720: 69 6e 74 66 28 6f 75 74 2c 20 22 20 4e 55 4c 4c  intf(out, " NULL
3730: 22 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  ");.  }else if( 
3740: 28 70 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d  (p->flags & (MEM
3750: 5f 49 6e 74 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d  _Int|MEM_Str))==
3760: 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 53 74 72  (MEM_Int|MEM_Str
3770: 29 20 29 7b 0a 20 20 20 20 66 70 72 69 6e 74 66  ) ){.    fprintf
3780: 28 6f 75 74 2c 20 22 20 73 69 3a 25 6c 6c 64 22  (out, " si:%lld"
3790: 2c 20 70 2d 3e 75 2e 69 29 3b 0a 20 20 7d 65 6c  , p->u.i);.  }el
37a0: 73 65 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20  se if( p->flags 
37b0: 26 20 4d 45 4d 5f 49 6e 74 20 29 7b 0a 20 20 20  & MEM_Int ){.   
37c0: 20 66 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 20   fprintf(out, " 
37d0: 69 3a 25 6c 6c 64 22 2c 20 70 2d 3e 75 2e 69 29  i:%lld", p->u.i)
37e0: 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
37f0: 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50  _OMIT_FLOATING_P
3800: 4f 49 4e 54 0a 20 20 7d 65 6c 73 65 20 69 66 28  OINT.  }else if(
3810: 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f   p->flags & MEM_
3820: 52 65 61 6c 20 29 7b 0a 20 20 20 20 66 70 72 69  Real ){.    fpri
3830: 6e 74 66 28 6f 75 74 2c 20 22 20 72 3a 25 67 22  ntf(out, " r:%g"
3840: 2c 20 70 2d 3e 72 29 3b 0a 23 65 6e 64 69 66 0a  , p->r);.#endif.
3850: 20 20 7d 65 6c 73 65 20 69 66 28 20 70 2d 3e 66    }else if( p->f
3860: 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65  lags & MEM_RowSe
3870: 74 20 29 7b 0a 20 20 20 20 66 70 72 69 6e 74 66  t ){.    fprintf
3880: 28 6f 75 74 2c 20 22 20 28 72 6f 77 73 65 74 29  (out, " (rowset)
3890: 22 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ");.  }else{.   
38a0: 20 63 68 61 72 20 7a 42 75 66 5b 32 30 30 5d 3b   char zBuf[200];
38b0: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
38c0: 4d 65 6d 50 72 65 74 74 79 50 72 69 6e 74 28 70  MemPrettyPrint(p
38d0: 2c 20 7a 42 75 66 29 3b 0a 20 20 20 20 66 70 72  , zBuf);.    fpr
38e0: 69 6e 74 66 28 6f 75 74 2c 20 22 20 22 29 3b 0a  intf(out, " ");.
38f0: 20 20 20 20 66 70 72 69 6e 74 66 28 6f 75 74 2c      fprintf(out,
3900: 20 22 25 73 22 2c 20 7a 42 75 66 29 3b 0a 20 20   "%s", zBuf);.  
3910: 7d 0a 7d 0a 73 74 61 74 69 63 20 76 6f 69 64 20  }.}.static void 
3920: 72 65 67 69 73 74 65 72 54 72 61 63 65 28 46 49  registerTrace(FI
3930: 4c 45 20 2a 6f 75 74 2c 20 69 6e 74 20 69 52 65  LE *out, int iRe
3940: 67 2c 20 4d 65 6d 20 2a 70 29 7b 0a 20 20 66 70  g, Mem *p){.  fp
3950: 72 69 6e 74 66 28 6f 75 74 2c 20 22 52 45 47 5b  rintf(out, "REG[
3960: 25 64 5d 20 3d 20 22 2c 20 69 52 65 67 29 3b 0a  %d] = ", iReg);.
3970: 20 20 6d 65 6d 54 72 61 63 65 50 72 69 6e 74 28    memTracePrint(
3980: 6f 75 74 2c 20 70 29 3b 0a 20 20 66 70 72 69 6e  out, p);.  fprin
3990: 74 66 28 6f 75 74 2c 20 22 5c 6e 22 29 3b 0a 7d  tf(out, "\n");.}
39a0: 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20  .#endif..#ifdef 
39b0: 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 23 20 20  SQLITE_DEBUG.#  
39c0: 64 65 66 69 6e 65 20 52 45 47 49 53 54 45 52 5f  define REGISTER_
39d0: 54 52 41 43 45 28 52 2c 4d 29 20 69 66 28 70 2d  TRACE(R,M) if(p-
39e0: 3e 74 72 61 63 65 29 72 65 67 69 73 74 65 72 54  >trace)registerT
39f0: 72 61 63 65 28 70 2d 3e 74 72 61 63 65 2c 52 2c  race(p->trace,R,
3a00: 4d 29 0a 23 65 6c 73 65 0a 23 20 20 64 65 66 69  M).#else.#  defi
3a10: 6e 65 20 52 45 47 49 53 54 45 52 5f 54 52 41 43  ne REGISTER_TRAC
3a20: 45 28 52 2c 4d 29 0a 23 65 6e 64 69 66 0a 0a 0a  E(R,M).#endif...
3a30: 23 69 66 64 65 66 20 56 44 42 45 5f 50 52 4f 46  #ifdef VDBE_PROF
3a40: 49 4c 45 0a 0a 2f 2a 20 0a 2a 2a 20 68 77 74 69  ILE../* .** hwti
3a50: 6d 65 2e 68 20 63 6f 6e 74 61 69 6e 73 20 69 6e  me.h contains in
3a60: 6c 69 6e 65 20 61 73 73 65 6d 62 6c 65 72 20 63  line assembler c
3a70: 6f 64 65 20 66 6f 72 20 69 6d 70 6c 65 6d 65 6e  ode for implemen
3a80: 74 69 6e 67 20 0a 2a 2a 20 68 69 67 68 2d 70 65  ting .** high-pe
3a90: 72 66 6f 72 6d 61 6e 63 65 20 74 69 6d 69 6e 67  rformance timing
3aa0: 20 72 6f 75 74 69 6e 65 73 2e 0a 2a 2f 0a 23 69   routines..*/.#i
3ab0: 6e 63 6c 75 64 65 20 22 68 77 74 69 6d 65 2e 68  nclude "hwtime.h
3ac0: 22 0a 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  "..#endif../*.**
3ad0: 20 54 68 65 20 43 48 45 43 4b 5f 46 4f 52 5f 49   The CHECK_FOR_I
3ae0: 4e 54 45 52 52 55 50 54 20 6d 61 63 72 6f 20 64  NTERRUPT macro d
3af0: 65 66 69 6e 65 64 20 68 65 72 65 20 6c 6f 6f 6b  efined here look
3b00: 73 20 74 6f 20 73 65 65 20 69 66 20 74 68 65 0a  s to see if the.
3b10: 2a 2a 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72  ** sqlite3_inter
3b20: 72 75 70 74 28 29 20 72 6f 75 74 69 6e 65 20 68  rupt() routine h
3b30: 61 73 20 62 65 65 6e 20 63 61 6c 6c 65 64 2e 20  as been called. 
3b40: 20 49 66 20 69 74 20 68 61 73 20 62 65 65 6e 2c   If it has been,
3b50: 20 74 68 65 6e 0a 2a 2a 20 70 72 6f 63 65 73 73   then.** process
3b60: 69 6e 67 20 6f 66 20 74 68 65 20 56 44 42 45 20  ing of the VDBE 
3b70: 70 72 6f 67 72 61 6d 20 69 73 20 69 6e 74 65 72  program is inter
3b80: 72 75 70 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68  rupted..**.** Th
3b90: 69 73 20 6d 61 63 72 6f 20 61 64 64 65 64 20 74  is macro added t
3ba0: 6f 20 65 76 65 72 79 20 69 6e 73 74 72 75 63 74  o every instruct
3bb0: 69 6f 6e 20 74 68 61 74 20 64 6f 65 73 20 61 20  ion that does a 
3bc0: 6a 75 6d 70 20 69 6e 20 6f 72 64 65 72 20 74 6f  jump in order to
3bd0: 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 20 61 20  .** implement a 
3be0: 6c 6f 6f 70 2e 20 20 54 68 69 73 20 74 65 73 74  loop.  This test
3bf0: 20 75 73 65 64 20 74 6f 20 62 65 20 6f 6e 20 65   used to be on e
3c00: 76 65 72 79 20 73 69 6e 67 6c 65 20 69 6e 73 74  very single inst
3c10: 72 75 63 74 69 6f 6e 2c 0a 2a 2a 20 62 75 74 20  ruction,.** but 
3c20: 74 68 61 74 20 6d 65 61 6e 74 20 77 65 20 6d 6f  that meant we mo
3c30: 72 65 20 74 65 73 74 69 6e 67 20 74 68 61 74 20  re testing that 
3c40: 77 65 20 6e 65 65 64 65 64 2e 20 20 42 79 20 6f  we needed.  By o
3c50: 6e 6c 79 20 74 65 73 74 69 6e 67 20 74 68 65 0a  nly testing the.
3c60: 2a 2a 20 66 6c 61 67 20 6f 6e 20 6a 75 6d 70 20  ** flag on jump 
3c70: 69 6e 73 74 72 75 63 74 69 6f 6e 73 2c 20 77 65  instructions, we
3c80: 20 67 65 74 20 61 20 28 73 6d 61 6c 6c 29 20 73   get a (small) s
3c90: 70 65 65 64 20 69 6d 70 72 6f 76 65 6d 65 6e 74  peed improvement
3ca0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43 48 45  ..*/.#define CHE
3cb0: 43 4b 5f 46 4f 52 5f 49 4e 54 45 52 52 55 50 54  CK_FOR_INTERRUPT
3cc0: 20 5c 0a 20 20 20 69 66 28 20 64 62 2d 3e 75 31   \.   if( db->u1
3cd0: 2e 69 73 49 6e 74 65 72 72 75 70 74 65 64 20 29  .isInterrupted )
3ce0: 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
3cf0: 74 6f 5f 69 6e 74 65 72 72 75 70 74 3b 0a 0a 0a  to_interrupt;...
3d00: 23 69 66 6e 64 65 66 20 4e 44 45 42 55 47 0a 2f  #ifndef NDEBUG./
3d10: 2a 0a 2a 2a 20 54 68 69 73 20 66 75 6e 63 74 69  *.** This functi
3d20: 6f 6e 20 69 73 20 6f 6e 6c 79 20 63 61 6c 6c 65  on is only calle
3d30: 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 61 6e  d from within an
3d40: 20 61 73 73 65 72 74 28 29 20 65 78 70 72 65 73   assert() expres
3d50: 73 69 6f 6e 2e 20 49 74 0a 2a 2a 20 63 68 65 63  sion. It.** chec
3d60: 6b 73 20 74 68 61 74 20 74 68 65 20 73 71 6c 69  ks that the sqli
3d70: 74 65 33 2e 6e 54 72 61 6e 73 61 63 74 69 6f 6e  te3.nTransaction
3d80: 20 76 61 72 69 61 62 6c 65 20 69 73 20 63 6f 72   variable is cor
3d90: 72 65 63 74 6c 79 20 73 65 74 20 74 6f 0a 2a 2a  rectly set to.**
3da0: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6e   the number of n
3db0: 6f 6e 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 73  on-transaction s
3dc0: 61 76 65 70 6f 69 6e 74 73 20 63 75 72 72 65 6e  avepoints curren
3dd0: 74 6c 79 20 69 6e 20 74 68 65 20 0a 2a 2a 20 6c  tly in the .** l
3de0: 69 6e 6b 65 64 20 6c 69 73 74 20 73 74 61 72 74  inked list start
3df0: 69 6e 67 20 61 74 20 73 71 6c 69 74 65 33 2e 70  ing at sqlite3.p
3e00: 53 61 76 65 70 6f 69 6e 74 2e 0a 2a 2a 20 0a 2a  Savepoint..** .*
3e10: 2a 20 55 73 61 67 65 3a 0a 2a 2a 0a 2a 2a 20 20  * Usage:.**.**  
3e20: 20 20 20 61 73 73 65 72 74 28 20 63 68 65 63 6b     assert( check
3e30: 53 61 76 65 70 6f 69 6e 74 43 6f 75 6e 74 28 64  SavepointCount(d
3e40: 62 29 20 29 3b 0a 2a 2f 0a 73 74 61 74 69 63 20  b) );.*/.static 
3e50: 69 6e 74 20 63 68 65 63 6b 53 61 76 65 70 6f 69  int checkSavepoi
3e60: 6e 74 43 6f 75 6e 74 28 73 71 6c 69 74 65 33 20  ntCount(sqlite3 
3e70: 2a 64 62 29 7b 0a 20 20 69 6e 74 20 6e 20 3d 20  *db){.  int n = 
3e80: 30 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a  0;.  Savepoint *
3e90: 70 3b 0a 20 20 66 6f 72 28 70 3d 64 62 2d 3e 70  p;.  for(p=db->p
3ea0: 53 61 76 65 70 6f 69 6e 74 3b 20 70 3b 20 70 3d  Savepoint; p; p=
3eb0: 70 2d 3e 70 4e 65 78 74 29 20 6e 2b 2b 3b 0a 20  p->pNext) n++;. 
3ec0: 20 61 73 73 65 72 74 28 20 6e 3d 3d 28 64 62 2d   assert( n==(db-
3ed0: 3e 6e 53 61 76 65 70 6f 69 6e 74 20 2b 20 64 62  >nSavepoint + db
3ee0: 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53  ->isTransactionS
3ef0: 61 76 65 70 6f 69 6e 74 29 20 29 3b 0a 20 20 72  avepoint) );.  r
3f00: 65 74 75 72 6e 20 31 3b 0a 7d 0a 23 65 6e 64 69  eturn 1;.}.#endi
3f10: 66 0a 0a 2f 2a 0a 2a 2a 20 54 72 61 6e 73 66 65  f../*.** Transfe
3f20: 72 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20  r error message 
3f30: 74 65 78 74 20 66 72 6f 6d 20 61 6e 20 73 71 6c  text from an sql
3f40: 69 74 65 33 5f 76 74 61 62 2e 7a 45 72 72 4d 73  ite3_vtab.zErrMs
3f50: 67 20 28 74 65 78 74 20 73 74 6f 72 65 64 0a 2a  g (text stored.*
3f60: 2a 20 69 6e 20 6d 65 6d 6f 72 79 20 6f 62 74 61  * in memory obta
3f70: 69 6e 65 64 20 66 72 6f 6d 20 73 71 6c 69 74 65  ined from sqlite
3f80: 33 5f 6d 61 6c 6c 6f 63 29 20 69 6e 74 6f 20 61  3_malloc) into a
3f90: 20 56 64 62 65 2e 7a 45 72 72 4d 73 67 20 28 74   Vdbe.zErrMsg (t
3fa0: 65 78 74 20 73 74 6f 72 65 64 0a 2a 2a 20 69 6e  ext stored.** in
3fb0: 20 6d 65 6d 6f 72 79 20 6f 62 74 61 69 6e 65 64   memory obtained
3fc0: 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 44 62 4d   from sqlite3DbM
3fd0: 61 6c 6c 6f 63 29 2e 0a 2a 2f 0a 73 74 61 74 69  alloc)..*/.stati
3fe0: 63 20 76 6f 69 64 20 69 6d 70 6f 72 74 56 74 61  c void importVta
3ff0: 62 45 72 72 4d 73 67 28 56 64 62 65 20 2a 70 2c  bErrMsg(Vdbe *p,
4000: 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70   sqlite3_vtab *p
4010: 56 74 61 62 29 7b 0a 20 20 73 71 6c 69 74 65 33  Vtab){.  sqlite3
4020: 20 2a 64 62 20 3d 20 70 2d 3e 64 62 3b 0a 20 20   *db = p->db;.  
4030: 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62  sqlite3DbFree(db
4040: 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20  , p->zErrMsg);. 
4050: 20 70 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 73 71   p->zErrMsg = sq
4060: 6c 69 74 65 33 44 62 53 74 72 44 75 70 28 64 62  lite3DbStrDup(db
4070: 2c 20 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67  , pVtab->zErrMsg
4080: 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 66 72 65  );.  sqlite3_fre
4090: 65 28 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67  e(pVtab->zErrMsg
40a0: 29 3b 0a 20 20 70 56 74 61 62 2d 3e 7a 45 72 72  );.  pVtab->zErr
40b0: 4d 73 67 20 3d 20 30 3b 0a 7d 0a 0a 0a 2f 2a 0a  Msg = 0;.}.../*.
40c0: 2a 2a 20 45 78 65 63 75 74 65 20 61 73 20 6d 75  ** Execute as mu
40d0: 63 68 20 6f 66 20 61 20 56 44 42 45 20 70 72 6f  ch of a VDBE pro
40e0: 67 72 61 6d 20 61 73 20 77 65 20 63 61 6e 20 74  gram as we can t
40f0: 68 65 6e 20 72 65 74 75 72 6e 2e 0a 2a 2a 0a 2a  hen return..**.*
4100: 2a 20 73 71 6c 69 74 65 33 56 64 62 65 4d 61 6b  * sqlite3VdbeMak
4110: 65 52 65 61 64 79 28 29 20 6d 75 73 74 20 62 65  eReady() must be
4120: 20 63 61 6c 6c 65 64 20 62 65 66 6f 72 65 20 74   called before t
4130: 68 69 73 20 72 6f 75 74 69 6e 65 20 69 6e 20 6f  his routine in o
4140: 72 64 65 72 20 74 6f 0a 2a 2a 20 63 6c 6f 73 65  rder to.** close
4150: 20 74 68 65 20 70 72 6f 67 72 61 6d 20 77 69 74   the program wit
4160: 68 20 61 20 66 69 6e 61 6c 20 4f 50 5f 48 61 6c  h a final OP_Hal
4170: 74 20 61 6e 64 20 74 6f 20 73 65 74 20 75 70 20  t and to set up 
4180: 74 68 65 20 63 61 6c 6c 62 61 63 6b 73 0a 2a 2a  the callbacks.**
4190: 20 61 6e 64 20 74 68 65 20 65 72 72 6f 72 20 6d   and the error m
41a0: 65 73 73 61 67 65 20 70 6f 69 6e 74 65 72 2e 0a  essage pointer..
41b0: 2a 2a 0a 2a 2a 20 57 68 65 6e 65 76 65 72 20 61  **.** Whenever a
41c0: 20 72 6f 77 20 6f 72 20 72 65 73 75 6c 74 20 64   row or result d
41d0: 61 74 61 20 69 73 20 61 76 61 69 6c 61 62 6c 65  ata is available
41e0: 2c 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 77  , this routine w
41f0: 69 6c 6c 20 65 69 74 68 65 72 0a 2a 2a 20 69 6e  ill either.** in
4200: 76 6f 6b 65 20 74 68 65 20 72 65 73 75 6c 74 20  voke the result 
4210: 63 61 6c 6c 62 61 63 6b 20 28 69 66 20 74 68 65  callback (if the
4220: 72 65 20 69 73 20 6f 6e 65 29 20 6f 72 20 72 65  re is one) or re
4230: 74 75 72 6e 20 77 69 74 68 0a 2a 2a 20 53 51 4c  turn with.** SQL
4240: 49 54 45 5f 52 4f 57 2e 0a 2a 2a 0a 2a 2a 20 49  ITE_ROW..**.** I
4250: 66 20 61 6e 20 61 74 74 65 6d 70 74 20 69 73 20  f an attempt is 
4260: 6d 61 64 65 20 74 6f 20 6f 70 65 6e 20 61 20 6c  made to open a l
4270: 6f 63 6b 65 64 20 64 61 74 61 62 61 73 65 2c 20  ocked database, 
4280: 74 68 65 6e 20 74 68 69 73 20 72 6f 75 74 69 6e  then this routin
4290: 65 0a 2a 2a 20 77 69 6c 6c 20 65 69 74 68 65 72  e.** will either
42a0: 20 69 6e 76 6f 6b 65 20 74 68 65 20 62 75 73 79   invoke the busy
42b0: 20 63 61 6c 6c 62 61 63 6b 20 28 69 66 20 74 68   callback (if th
42c0: 65 72 65 20 69 73 20 6f 6e 65 29 20 6f 72 20 69  ere is one) or i
42d0: 74 20 77 69 6c 6c 0a 2a 2a 20 72 65 74 75 72 6e  t will.** return
42e0: 20 53 51 4c 49 54 45 5f 42 55 53 59 2e 0a 2a 2a   SQLITE_BUSY..**
42f0: 0a 2a 2a 20 49 66 20 61 6e 20 65 72 72 6f 72 20  .** If an error 
4300: 6f 63 63 75 72 73 2c 20 61 6e 20 65 72 72 6f 72  occurs, an error
4310: 20 6d 65 73 73 61 67 65 20 69 73 20 77 72 69 74   message is writ
4320: 74 65 6e 20 74 6f 20 6d 65 6d 6f 72 79 20 6f 62  ten to memory ob
4330: 74 61 69 6e 65 64 0a 2a 2a 20 66 72 6f 6d 20 73  tained.** from s
4340: 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 28 29 20  qlite3_malloc() 
4350: 61 6e 64 20 70 2d 3e 7a 45 72 72 4d 73 67 20 69  and p->zErrMsg i
4360: 73 20 6d 61 64 65 20 74 6f 20 70 6f 69 6e 74 20  s made to point 
4370: 74 6f 20 74 68 61 74 20 6d 65 6d 6f 72 79 2e 0a  to that memory..
4380: 2a 2a 20 54 68 65 20 65 72 72 6f 72 20 63 6f 64  ** The error cod
4390: 65 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 70  e is stored in p
43a0: 2d 3e 72 63 20 61 6e 64 20 74 68 69 73 20 72 6f  ->rc and this ro
43b0: 75 74 69 6e 65 20 72 65 74 75 72 6e 73 20 53 51  utine returns SQ
43c0: 4c 49 54 45 5f 45 52 52 4f 52 2e 0a 2a 2a 0a 2a  LITE_ERROR..**.*
43d0: 2a 20 49 66 20 74 68 65 20 63 61 6c 6c 62 61 63  * If the callbac
43e0: 6b 20 65 76 65 72 20 72 65 74 75 72 6e 73 20 6e  k ever returns n
43f0: 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68  on-zero, then th
4400: 65 20 70 72 6f 67 72 61 6d 20 65 78 69 74 73 0a  e program exits.
4410: 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c 79 2e 20  ** immediately. 
4420: 20 54 68 65 72 65 20 77 69 6c 6c 20 62 65 20 6e   There will be n
4430: 6f 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20  o error message 
4440: 62 75 74 20 74 68 65 20 70 2d 3e 72 63 20 66 69  but the p->rc fi
4450: 65 6c 64 20 69 73 0a 2a 2a 20 73 65 74 20 74 6f  eld is.** set to
4460: 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 20 61 6e   SQLITE_ABORT an
4470: 64 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 77  d this routine w
4480: 69 6c 6c 20 72 65 74 75 72 6e 20 53 51 4c 49 54  ill return SQLIT
4490: 45 5f 45 52 52 4f 52 2e 0a 2a 2a 0a 2a 2a 20 41  E_ERROR..**.** A
44a0: 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
44b0: 6f 6e 20 65 72 72 6f 72 20 63 61 75 73 65 73 20  on error causes 
44c0: 70 2d 3e 72 63 20 74 6f 20 62 65 20 73 65 74 20  p->rc to be set 
44d0: 74 6f 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20  to SQLITE_NOMEM 
44e0: 61 6e 64 20 74 68 69 73 0a 2a 2a 20 72 6f 75 74  and this.** rout
44f0: 69 6e 65 20 74 6f 20 72 65 74 75 72 6e 20 53 51  ine to return SQ
4500: 4c 49 54 45 5f 45 52 52 4f 52 2e 0a 2a 2a 0a 2a  LITE_ERROR..**.*
4510: 2a 20 4f 74 68 65 72 20 66 61 74 61 6c 20 65 72  * Other fatal er
4520: 72 6f 72 73 20 72 65 74 75 72 6e 20 53 51 4c 49  rors return SQLI
4530: 54 45 5f 45 52 52 4f 52 2e 0a 2a 2a 0a 2a 2a 20  TE_ERROR..**.** 
4540: 41 66 74 65 72 20 74 68 69 73 20 72 6f 75 74 69  After this routi
4550: 6e 65 20 68 61 73 20 66 69 6e 69 73 68 65 64 2c  ne has finished,
4560: 20 73 71 6c 69 74 65 33 56 64 62 65 46 69 6e 61   sqlite3VdbeFina
4570: 6c 69 7a 65 28 29 20 73 68 6f 75 6c 64 20 62 65  lize() should be
4580: 0a 2a 2a 20 75 73 65 64 20 74 6f 20 63 6c 65 61  .** used to clea
4590: 6e 20 75 70 20 74 68 65 20 6d 65 73 73 20 74 68  n up the mess th
45a0: 61 74 20 77 61 73 20 6c 65 66 74 20 62 65 68 69  at was left behi
45b0: 6e 64 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  nd..*/.int sqlit
45c0: 65 33 56 64 62 65 45 78 65 63 28 0a 20 20 56 64  e3VdbeExec(.  Vd
45d0: 62 65 20 2a 70 20 20 20 20 20 20 20 20 20 20 20  be *p           
45e0: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
45f0: 56 44 42 45 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74  VDBE */.){.  int
4600: 20 70 63 3d 30 3b 20 20 20 20 20 20 20 20 20 20   pc=0;          
4610: 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 70          /* The p
4620: 72 6f 67 72 61 6d 20 63 6f 75 6e 74 65 72 20 2a  rogram counter *
4630: 2f 0a 20 20 4f 70 20 2a 61 4f 70 20 3d 20 70 2d  /.  Op *aOp = p-
4640: 3e 61 4f 70 3b 20 20 20 20 20 20 20 20 20 20 2f  >aOp;          /
4650: 2a 20 43 6f 70 79 20 6f 66 20 70 2d 3e 61 4f 70  * Copy of p->aOp
4660: 20 2a 2f 0a 20 20 4f 70 20 2a 70 4f 70 3b 20 20   */.  Op *pOp;  
4670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4680: 20 2f 2a 20 43 75 72 72 65 6e 74 20 6f 70 65 72   /* Current oper
4690: 61 74 69 6f 6e 20 2a 2f 0a 20 20 69 6e 74 20 72  ation */.  int r
46a0: 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 20 20  c = SQLITE_OK;  
46b0: 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74        /* Value t
46c0: 6f 20 72 65 74 75 72 6e 20 2a 2f 0a 20 20 73 71  o return */.  sq
46d0: 6c 69 74 65 33 20 2a 64 62 20 3d 20 70 2d 3e 64  lite3 *db = p->d
46e0: 62 3b 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20  b;       /* The 
46f0: 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 75 38  database */.  u8
4700: 20 72 65 73 65 74 53 63 68 65 6d 61 4f 6e 46 61   resetSchemaOnFa
4710: 75 6c 74 20 3d 20 30 3b 20 2f 2a 20 52 65 73 65  ult = 0; /* Rese
4720: 74 20 73 63 68 65 6d 61 20 61 66 74 65 72 20 61  t schema after a
4730: 6e 20 65 72 72 6f 72 20 69 66 20 70 6f 73 69 74  n error if posit
4740: 69 76 65 20 2a 2f 0a 20 20 75 38 20 65 6e 63 6f  ive */.  u8 enco
4750: 64 69 6e 67 20 3d 20 45 4e 43 28 64 62 29 3b 20  ding = ENC(db); 
4760: 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62      /* The datab
4770: 61 73 65 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a  ase encoding */.
4780: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
4790: 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c  MIT_PROGRESS_CAL
47a0: 4c 42 41 43 4b 0a 20 20 69 6e 74 20 63 68 65 63  LBACK.  int chec
47b0: 6b 50 72 6f 67 72 65 73 73 3b 20 20 20 20 20 20  kProgress;      
47c0: 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 70 72     /* True if pr
47d0: 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 73  ogress callbacks
47e0: 20 61 72 65 20 65 6e 61 62 6c 65 64 20 2a 2f 0a   are enabled */.
47f0: 20 20 69 6e 74 20 6e 50 72 6f 67 72 65 73 73 4f    int nProgressO
4800: 70 73 20 3d 20 30 3b 20 20 20 20 20 20 2f 2a 20  ps = 0;      /* 
4810: 4f 70 63 6f 64 65 73 20 65 78 65 63 75 74 65 64  Opcodes executed
4820: 20 73 69 6e 63 65 20 70 72 6f 67 72 65 73 73 20   since progress 
4830: 63 61 6c 6c 62 61 63 6b 2e 20 2a 2f 0a 23 65 6e  callback. */.#en
4840: 64 69 66 0a 20 20 4d 65 6d 20 2a 61 4d 65 6d 20  dif.  Mem *aMem 
4850: 3d 20 70 2d 3e 61 4d 65 6d 3b 20 20 20 20 20 20  = p->aMem;      
4860: 20 2f 2a 20 43 6f 70 79 20 6f 66 20 70 2d 3e 61   /* Copy of p->a
4870: 4d 65 6d 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49  Mem */.  Mem *pI
4880: 6e 31 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20  n1 = 0;         
4890: 20 20 20 20 2f 2a 20 31 73 74 20 69 6e 70 75 74      /* 1st input
48a0: 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 4d 65   operand */.  Me
48b0: 6d 20 2a 70 49 6e 32 20 3d 20 30 3b 20 20 20 20  m *pIn2 = 0;    
48c0: 20 20 20 20 20 20 20 20 20 2f 2a 20 32 6e 64 20           /* 2nd 
48d0: 69 6e 70 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f  input operand */
48e0: 0a 20 20 4d 65 6d 20 2a 70 49 6e 33 20 3d 20 30  .  Mem *pIn3 = 0
48f0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
4900: 20 33 72 64 20 69 6e 70 75 74 20 6f 70 65 72 61   3rd input opera
4910: 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4f 75  nd */.  Mem *pOu
4920: 74 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20  t = 0;          
4930: 20 20 20 2f 2a 20 4f 75 74 70 75 74 20 6f 70 65     /* Output ope
4940: 72 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 69 43  rand */.  int iC
4950: 6f 6d 70 61 72 65 20 3d 20 30 3b 20 20 20 20 20  ompare = 0;     
4960: 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f       /* Result o
4970: 66 20 6c 61 73 74 20 4f 50 5f 43 6f 6d 70 61 72  f last OP_Compar
4980: 65 20 6f 70 65 72 61 74 69 6f 6e 20 2a 2f 0a 20  e operation */. 
4990: 20 69 6e 74 20 2a 61 50 65 72 6d 75 74 65 20 3d   int *aPermute =
49a0: 20 30 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 50   0;         /* P
49b0: 65 72 6d 75 74 61 74 69 6f 6e 20 6f 66 20 63 6f  ermutation of co
49c0: 6c 75 6d 6e 73 20 66 6f 72 20 4f 50 5f 43 6f 6d  lumns for OP_Com
49d0: 70 61 72 65 20 2a 2f 0a 23 69 66 64 65 66 20 56  pare */.#ifdef V
49e0: 44 42 45 5f 50 52 4f 46 49 4c 45 0a 20 20 75 36  DBE_PROFILE.  u6
49f0: 34 20 73 74 61 72 74 3b 20 20 20 20 20 20 20 20  4 start;        
4a00: 20 20 20 20 20 20 20 20 20 2f 2a 20 43 50 55 20           /* CPU 
4a10: 63 6c 6f 63 6b 20 63 6f 75 6e 74 20 61 74 20 73  clock count at s
4a20: 74 61 72 74 20 6f 66 20 6f 70 63 6f 64 65 20 2a  tart of opcode *
4a30: 2f 0a 20 20 69 6e 74 20 6f 72 69 67 50 63 3b 20  /.  int origPc; 
4a40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
4a50: 2a 20 50 72 6f 67 72 61 6d 20 63 6f 75 6e 74 65  * Program counte
4a60: 72 20 61 74 20 73 74 61 72 74 20 6f 66 20 6f 70  r at start of op
4a70: 63 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  code */.#endif. 
4a80: 20 2f 2a 2a 2a 20 49 4e 53 45 52 54 20 53 54 41   /*** INSERT STA
4a90: 43 4b 20 55 4e 49 4f 4e 20 48 45 52 45 20 2a 2a  CK UNION HERE **
4aa0: 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d  */..  assert( p-
4ab0: 3e 6d 61 67 69 63 3d 3d 56 44 42 45 5f 4d 41 47  >magic==VDBE_MAG
4ac0: 49 43 5f 52 55 4e 20 29 3b 20 20 2f 2a 20 73 71  IC_RUN );  /* sq
4ad0: 6c 69 74 65 33 5f 73 74 65 70 28 29 20 76 65 72  lite3_step() ver
4ae0: 69 66 69 65 73 20 74 68 69 73 20 2a 2f 0a 20 20  ifies this */.  
4af0: 73 71 6c 69 74 65 33 56 64 62 65 45 6e 74 65 72  sqlite3VdbeEnter
4b00: 28 70 29 3b 0a 20 20 69 66 28 20 70 2d 3e 72 63  (p);.  if( p->rc
4b10: 3d 3d 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 29  ==SQLITE_NOMEM )
4b20: 7b 0a 20 20 20 20 2f 2a 20 54 68 69 73 20 68 61  {.    /* This ha
4b30: 70 70 65 6e 73 20 69 66 20 61 20 6d 61 6c 6c 6f  ppens if a mallo
4b40: 63 28 29 20 69 6e 73 69 64 65 20 61 20 63 61 6c  c() inside a cal
4b50: 6c 20 74 6f 20 73 71 6c 69 74 65 33 5f 63 6f 6c  l to sqlite3_col
4b60: 75 6d 6e 5f 74 65 78 74 28 29 20 6f 72 0a 20 20  umn_text() or.  
4b70: 20 20 2a 2a 20 73 71 6c 69 74 65 33 5f 63 6f 6c    ** sqlite3_col
4b80: 75 6d 6e 5f 74 65 78 74 31 36 28 29 20 66 61 69  umn_text16() fai
4b90: 6c 65 64 2e 20 20 2a 2f 0a 20 20 20 20 67 6f 74  led.  */.    got
4ba0: 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20  o no_mem;.  }.  
4bb0: 61 73 73 65 72 74 28 20 70 2d 3e 72 63 3d 3d 53  assert( p->rc==S
4bc0: 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 70 2d 3e 72  QLITE_OK || p->r
4bd0: 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29  c==SQLITE_BUSY )
4be0: 3b 0a 20 20 70 2d 3e 72 63 20 3d 20 53 51 4c 49  ;.  p->rc = SQLI
4bf0: 54 45 5f 4f 4b 3b 0a 20 20 61 73 73 65 72 74 28  TE_OK;.  assert(
4c00: 20 70 2d 3e 65 78 70 6c 61 69 6e 3d 3d 30 20 29   p->explain==0 )
4c10: 3b 0a 20 20 70 2d 3e 70 52 65 73 75 6c 74 53 65  ;.  p->pResultSe
4c20: 74 20 3d 20 30 3b 0a 20 20 64 62 2d 3e 62 75 73  t = 0;.  db->bus
4c30: 79 48 61 6e 64 6c 65 72 2e 6e 42 75 73 79 20 3d  yHandler.nBusy =
4c40: 20 30 3b 0a 20 20 43 48 45 43 4b 5f 46 4f 52 5f   0;.  CHECK_FOR_
4c50: 49 4e 54 45 52 52 55 50 54 3b 0a 20 20 73 71 6c  INTERRUPT;.  sql
4c60: 69 74 65 33 56 64 62 65 49 4f 54 72 61 63 65 53  ite3VdbeIOTraceS
4c70: 71 6c 28 70 29 3b 0a 23 69 66 6e 64 65 66 20 53  ql(p);.#ifndef S
4c80: 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52  QLITE_OMIT_PROGR
4c90: 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 63  ESS_CALLBACK.  c
4ca0: 68 65 63 6b 50 72 6f 67 72 65 73 73 20 3d 20 64  heckProgress = d
4cb0: 62 2d 3e 78 50 72 6f 67 72 65 73 73 21 3d 30 3b  b->xProgress!=0;
4cc0: 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53  .#endif.#ifdef S
4cd0: 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 73 71  QLITE_DEBUG.  sq
4ce0: 6c 69 74 65 33 42 65 67 69 6e 42 65 6e 69 67 6e  lite3BeginBenign
4cf0: 4d 61 6c 6c 6f 63 28 29 3b 0a 20 20 69 66 28 20  Malloc();.  if( 
4d00: 70 2d 3e 70 63 3d 3d 30 20 20 26 26 20 28 70 2d  p->pc==0  && (p-
4d10: 3e 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c  >db->flags & SQL
4d20: 49 54 45 5f 56 64 62 65 4c 69 73 74 69 6e 67 29  ITE_VdbeListing)
4d30: 21 3d 30 20 29 7b 0a 20 20 20 20 69 6e 74 20 69  !=0 ){.    int i
4d40: 3b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 56 44  ;.    printf("VD
4d50: 42 45 20 50 72 6f 67 72 61 6d 20 4c 69 73 74 69  BE Program Listi
4d60: 6e 67 3a 5c 6e 22 29 3b 0a 20 20 20 20 73 71 6c  ng:\n");.    sql
4d70: 69 74 65 33 56 64 62 65 50 72 69 6e 74 53 71 6c  ite3VdbePrintSql
4d80: 28 70 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30  (p);.    for(i=0
4d90: 3b 20 69 3c 70 2d 3e 6e 4f 70 3b 20 69 2b 2b 29  ; i<p->nOp; i++)
4da0: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  {.      sqlite3V
4db0: 64 62 65 50 72 69 6e 74 4f 70 28 73 74 64 6f 75  dbePrintOp(stdou
4dc0: 74 2c 20 69 2c 20 26 61 4f 70 5b 69 5d 29 3b 0a  t, i, &aOp[i]);.
4dd0: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 73 71 6c 69      }.  }.  sqli
4de0: 74 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c  te3EndBenignMall
4df0: 6f 63 28 29 3b 0a 23 65 6e 64 69 66 0a 20 20 66  oc();.#endif.  f
4e00: 6f 72 28 70 63 3d 70 2d 3e 70 63 3b 20 72 63 3d  or(pc=p->pc; rc=
4e10: 3d 53 51 4c 49 54 45 5f 4f 4b 3b 20 70 63 2b 2b  =SQLITE_OK; pc++
4e20: 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ){.    assert( p
4e30: 63 3e 3d 30 20 26 26 20 70 63 3c 70 2d 3e 6e 4f  c>=0 && pc<p->nO
4e40: 70 20 29 3b 0a 20 20 20 20 69 66 28 20 64 62 2d  p );.    if( db-
4e50: 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 20  >mallocFailed ) 
4e60: 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 23 69 66  goto no_mem;.#if
4e70: 64 65 66 20 56 44 42 45 5f 50 52 4f 46 49 4c 45  def VDBE_PROFILE
4e80: 0a 20 20 20 20 6f 72 69 67 50 63 20 3d 20 70 63  .    origPc = pc
4e90: 3b 0a 20 20 20 20 73 74 61 72 74 20 3d 20 73 71  ;.    start = sq
4ea0: 6c 69 74 65 33 48 77 74 69 6d 65 28 29 3b 0a 23  lite3Hwtime();.#
4eb0: 65 6e 64 69 66 0a 20 20 20 20 70 4f 70 20 3d 20  endif.    pOp = 
4ec0: 26 61 4f 70 5b 70 63 5d 3b 0a 0a 20 20 20 20 2f  &aOp[pc];..    /
4ed0: 2a 20 4f 6e 6c 79 20 61 6c 6c 6f 77 20 74 72 61  * Only allow tra
4ee0: 63 69 6e 67 20 69 66 20 53 51 4c 49 54 45 5f 44  cing if SQLITE_D
4ef0: 45 42 55 47 20 69 73 20 64 65 66 69 6e 65 64 2e  EBUG is defined.
4f00: 0a 20 20 20 20 2a 2f 0a 23 69 66 64 65 66 20 53  .    */.#ifdef S
4f10: 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20  QLITE_DEBUG.    
4f20: 69 66 28 20 70 2d 3e 74 72 61 63 65 20 29 7b 0a  if( p->trace ){.
4f30: 20 20 20 20 20 20 69 66 28 20 70 63 3d 3d 30 20        if( pc==0 
4f40: 29 7b 0a 20 20 20 20 20 20 20 20 70 72 69 6e 74  ){.        print
4f50: 66 28 22 56 44 42 45 20 45 78 65 63 75 74 69 6f  f("VDBE Executio
4f60: 6e 20 54 72 61 63 65 3a 5c 6e 22 29 3b 0a 20 20  n Trace:\n");.  
4f70: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
4f80: 65 50 72 69 6e 74 53 71 6c 28 70 29 3b 0a 20 20  ePrintSql(p);.  
4f90: 20 20 20 20 7d 0a 20 20 20 20 20 20 73 71 6c 69      }.      sqli
4fa0: 74 65 33 56 64 62 65 50 72 69 6e 74 4f 70 28 70  te3VdbePrintOp(p
4fb0: 2d 3e 74 72 61 63 65 2c 20 70 63 2c 20 70 4f 70  ->trace, pc, pOp
4fc0: 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a  );.    }.#endif.
4fd0: 20 20 20 20 20 20 0a 0a 20 20 20 20 2f 2a 20 43        ..    /* C
4fe0: 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 77  heck to see if w
4ff0: 65 20 6e 65 65 64 20 74 6f 20 73 69 6d 75 6c 61  e need to simula
5000: 74 65 20 61 6e 20 69 6e 74 65 72 72 75 70 74 2e  te an interrupt.
5010: 20 20 54 68 69 73 20 6f 6e 6c 79 20 68 61 70 70    This only happ
5020: 65 6e 73 0a 20 20 20 20 2a 2a 20 69 66 20 77 65  ens.    ** if we
5030: 20 68 61 76 65 20 61 20 73 70 65 63 69 61 6c 20   have a special 
5040: 74 65 73 74 20 62 75 69 6c 64 2e 0a 20 20 20 20  test build..    
5050: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
5060: 5f 54 45 53 54 0a 20 20 20 20 69 66 28 20 73 71  _TEST.    if( sq
5070: 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 5f  lite3_interrupt_
5080: 63 6f 75 6e 74 3e 30 20 29 7b 0a 20 20 20 20 20  count>0 ){.     
5090: 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75   sqlite3_interru
50a0: 70 74 5f 63 6f 75 6e 74 2d 2d 3b 0a 20 20 20 20  pt_count--;.    
50b0: 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f 69 6e    if( sqlite3_in
50c0: 74 65 72 72 75 70 74 5f 63 6f 75 6e 74 3d 3d 30  terrupt_count==0
50d0: 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69   ){.        sqli
50e0: 74 65 33 5f 69 6e 74 65 72 72 75 70 74 28 64 62  te3_interrupt(db
50f0: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
5100: 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66  .#endif..#ifndef
5110: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f   SQLITE_OMIT_PRO
5120: 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20  GRESS_CALLBACK. 
5130: 20 20 20 2f 2a 20 43 61 6c 6c 20 74 68 65 20 70     /* Call the p
5140: 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b  rogress callback
5150: 20 69 66 20 69 74 20 69 73 20 63 6f 6e 66 69 67   if it is config
5160: 75 72 65 64 20 61 6e 64 20 74 68 65 20 72 65 71  ured and the req
5170: 75 69 72 65 64 20 6e 75 6d 62 65 72 0a 20 20 20  uired number.   
5180: 20 2a 2a 20 6f 66 20 56 44 42 45 20 6f 70 73 20   ** of VDBE ops 
5190: 68 61 76 65 20 62 65 65 6e 20 65 78 65 63 75 74  have been execut
51a0: 65 64 20 28 65 69 74 68 65 72 20 73 69 6e 63 65  ed (either since
51b0: 20 74 68 69 73 20 69 6e 76 6f 63 61 74 69 6f 6e   this invocation
51c0: 20 6f 66 0a 20 20 20 20 2a 2a 20 73 71 6c 69 74   of.    ** sqlit
51d0: 65 33 56 64 62 65 45 78 65 63 28 29 20 6f 72 20  e3VdbeExec() or 
51e0: 73 69 6e 63 65 20 6c 61 73 74 20 74 69 6d 65 20  since last time 
51f0: 74 68 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c  the progress cal
5200: 6c 62 61 63 6b 20 77 61 73 20 63 61 6c 6c 65 64  lback was called
5210: 29 2e 0a 20 20 20 20 2a 2a 20 49 66 20 74 68 65  )..    ** If the
5220: 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61   progress callba
5230: 63 6b 20 72 65 74 75 72 6e 73 20 6e 6f 6e 2d 7a  ck returns non-z
5240: 65 72 6f 2c 20 65 78 69 74 20 74 68 65 20 76 69  ero, exit the vi
5250: 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 20 77 69  rtual machine wi
5260: 74 68 0a 20 20 20 20 2a 2a 20 61 20 72 65 74 75  th.    ** a retu
5270: 72 6e 20 63 6f 64 65 20 53 51 4c 49 54 45 5f 41  rn code SQLITE_A
5280: 42 4f 52 54 2e 0a 20 20 20 20 2a 2f 0a 20 20 20  BORT..    */.   
5290: 20 69 66 28 20 63 68 65 63 6b 50 72 6f 67 72 65   if( checkProgre
52a0: 73 73 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20  ss ){.      if( 
52b0: 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73  db->nProgressOps
52c0: 3d 3d 6e 50 72 6f 67 72 65 73 73 4f 70 73 20 29  ==nProgressOps )
52d0: 7b 0a 20 20 20 20 20 20 20 20 69 6e 74 20 70 72  {.        int pr
52e0: 63 3b 0a 20 20 20 20 20 20 20 20 70 72 63 20 3d  c;.        prc =
52f0: 20 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 28 64   db->xProgress(d
5300: 62 2d 3e 70 50 72 6f 67 72 65 73 73 41 72 67 29  b->pProgressArg)
5310: 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 72  ;.        if( pr
5320: 63 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  c!=0 ){.        
5330: 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 49 4e    rc = SQLITE_IN
5340: 54 45 52 52 55 50 54 3b 0a 20 20 20 20 20 20 20  TERRUPT;.       
5350: 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 65 72 72     goto vdbe_err
5360: 6f 72 5f 68 61 6c 74 3b 0a 20 20 20 20 20 20 20  or_halt;.       
5370: 20 7d 0a 20 20 20 20 20 20 20 20 6e 50 72 6f 67   }.        nProg
5380: 72 65 73 73 4f 70 73 20 3d 20 30 3b 0a 20 20 20  ressOps = 0;.   
5390: 20 20 20 7d 0a 20 20 20 20 20 20 6e 50 72 6f 67     }.      nProg
53a0: 72 65 73 73 4f 70 73 2b 2b 3b 0a 20 20 20 20 7d  ressOps++;.    }
53b0: 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 2f 2a 20  .#endif..    /* 
53c0: 4f 6e 20 61 6e 79 20 6f 70 63 6f 64 65 20 77 69  On any opcode wi
53d0: 74 68 20 74 68 65 20 22 6f 75 74 32 2d 70 72 65  th the "out2-pre
53e0: 72 65 6c 61 73 65 22 20 74 61 67 2c 20 66 72 65  relase" tag, fre
53f0: 65 20 61 6e 79 0a 20 20 20 20 2a 2a 20 65 78 74  e any.    ** ext
5400: 65 72 6e 61 6c 20 61 6c 6c 6f 63 61 74 69 6f 6e  ernal allocation
5410: 73 20 6f 75 74 20 6f 66 20 6d 65 6d 5b 70 32 5d  s out of mem[p2]
5420: 20 61 6e 64 20 73 65 74 20 6d 65 6d 5b 70 32 5d   and set mem[p2]
5430: 20 74 6f 20 62 65 0a 20 20 20 20 2a 2a 20 61 6e   to be.    ** an
5440: 20 75 6e 64 65 66 69 6e 65 64 20 69 6e 74 65 67   undefined integ
5450: 65 72 2e 20 20 4f 70 63 6f 64 65 73 20 77 69 6c  er.  Opcodes wil
5460: 6c 20 65 69 74 68 65 72 20 66 69 6c 6c 20 69 6e  l either fill in
5470: 20 74 68 65 20 69 6e 74 65 67 65 72 0a 20 20 20   the integer.   
5480: 20 2a 2a 20 76 61 6c 75 65 20 6f 72 20 63 6f 6e   ** value or con
5490: 76 65 72 74 20 6d 65 6d 5b 70 32 5d 20 74 6f 20  vert mem[p2] to 
54a0: 61 20 64 69 66 66 65 72 65 6e 74 20 74 79 70 65  a different type
54b0: 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 61 73 73  ..    */.    ass
54c0: 65 72 74 28 20 70 4f 70 2d 3e 6f 70 66 6c 61 67  ert( pOp->opflag
54d0: 73 3d 3d 73 71 6c 69 74 65 33 4f 70 63 6f 64 65  s==sqlite3Opcode
54e0: 50 72 6f 70 65 72 74 79 5b 70 4f 70 2d 3e 6f 70  Property[pOp->op
54f0: 63 6f 64 65 5d 20 29 3b 0a 20 20 20 20 69 66 28  code] );.    if(
5500: 20 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20   pOp->opflags & 
5510: 4f 50 46 4c 47 5f 4f 55 54 32 5f 50 52 45 52 45  OPFLG_OUT2_PRERE
5520: 4c 45 41 53 45 20 29 7b 0a 20 20 20 20 20 20 61  LEASE ){.      a
5530: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30  ssert( pOp->p2>0
5540: 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
5550: 28 20 70 4f 70 2d 3e 70 32 3c 3d 70 2d 3e 6e 4d  ( pOp->p2<=p->nM
5560: 65 6d 20 29 3b 0a 20 20 20 20 20 20 70 4f 75 74  em );.      pOut
5570: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
5580: 5d 3b 0a 20 20 20 20 20 20 6d 65 6d 41 62 6f 75  ];.      memAbou
5590: 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75  tToChange(p, pOu
55a0: 74 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  t);.      sqlite
55b0: 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 45  3VdbeMemReleaseE
55c0: 78 74 65 72 6e 61 6c 28 70 4f 75 74 29 3b 0a 20  xternal(pOut);. 
55d0: 20 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73       pOut->flags
55e0: 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20   = MEM_Int;.    
55f0: 7d 0a 0a 20 20 20 20 2f 2a 20 53 61 6e 69 74 79  }..    /* Sanity
5600: 20 63 68 65 63 6b 69 6e 67 20 6f 6e 20 6f 74 68   checking on oth
5610: 65 72 20 6f 70 65 72 61 6e 64 73 20 2a 2f 0a 23  er operands */.#
5620: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
5630: 55 47 0a 20 20 20 20 69 66 28 20 28 70 4f 70 2d  UG.    if( (pOp-
5640: 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 47  >opflags & OPFLG
5650: 5f 49 4e 31 29 21 3d 30 20 29 7b 0a 20 20 20 20  _IN1)!=0 ){.    
5660: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
5670: 31 3e 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73  1>0 );.      ass
5680: 65 72 74 28 20 70 4f 70 2d 3e 70 31 3c 3d 70 2d  ert( pOp->p1<=p-
5690: 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20 61  >nMem );.      a
56a0: 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
56b0: 64 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  d(&aMem[pOp->p1]
56c0: 29 20 29 3b 0a 20 20 20 20 20 20 52 45 47 49 53  ) );.      REGIS
56d0: 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
56e0: 31 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31  1, &aMem[pOp->p1
56f0: 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  ]);.    }.    if
5700: 28 20 28 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20  ( (pOp->opflags 
5710: 26 20 4f 50 46 4c 47 5f 49 4e 32 29 21 3d 30 20  & OPFLG_IN2)!=0 
5720: 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ){.      assert(
5730: 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20   pOp->p2>0 );.  
5740: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
5750: 3e 70 32 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a  >p2<=p->nMem );.
5760: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65        assert( me
5770: 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70  mIsValid(&aMem[p
5780: 4f 70 2d 3e 70 32 5d 29 20 29 3b 0a 20 20 20 20  Op->p2]) );.    
5790: 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
57a0: 28 70 4f 70 2d 3e 70 32 2c 20 26 61 4d 65 6d 5b  (pOp->p2, &aMem[
57b0: 70 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20 20 20 7d  pOp->p2]);.    }
57c0: 0a 20 20 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f  .    if( (pOp->o
57d0: 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f 49  pflags & OPFLG_I
57e0: 4e 33 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20  N3)!=0 ){.      
57f0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e  assert( pOp->p3>
5800: 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  0 );.      asser
5810: 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e  t( pOp->p3<=p->n
5820: 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20 61 73 73  Mem );.      ass
5830: 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
5840: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 20  &aMem[pOp->p3]) 
5850: 29 3b 0a 20 20 20 20 20 20 52 45 47 49 53 54 45  );.      REGISTE
5860: 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c  R_TRACE(pOp->p3,
5870: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29   &aMem[pOp->p3])
5880: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
5890: 28 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20  (pOp->opflags & 
58a0: 4f 50 46 4c 47 5f 4f 55 54 32 29 21 3d 30 20 29  OPFLG_OUT2)!=0 )
58b0: 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  {.      assert( 
58c0: 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 20  pOp->p2>0 );.   
58d0: 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
58e0: 70 32 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20  p2<=p->nMem );. 
58f0: 20 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43       memAboutToC
5900: 68 61 6e 67 65 28 70 2c 20 26 61 4d 65 6d 5b 70  hange(p, &aMem[p
5910: 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20 20 20 7d 0a  Op->p2]);.    }.
5920: 20 20 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70      if( (pOp->op
5930: 66 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f 4f 55  flags & OPFLG_OU
5940: 54 33 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20  T3)!=0 ){.      
5950: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e  assert( pOp->p3>
5960: 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  0 );.      asser
5970: 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e  t( pOp->p3<=p->n
5980: 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20 6d 65 6d  Mem );.      mem
5990: 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
59a0: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29   &aMem[pOp->p3])
59b0: 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20  ;.    }.#endif. 
59c0: 20 0a 20 20 20 20 73 77 69 74 63 68 28 20 70 4f   .    switch( pO
59d0: 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 0a 2f 2a  p->opcode ){../*
59e0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
59f0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5a00: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5a10: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5a20: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20  ************.** 
5a30: 57 68 61 74 20 66 6f 6c 6c 6f 77 73 20 69 73 20  What follows is 
5a40: 61 20 6d 61 73 73 69 76 65 20 73 77 69 74 63 68  a massive switch
5a50: 20 73 74 61 74 65 6d 65 6e 74 20 77 68 65 72 65   statement where
5a60: 20 65 61 63 68 20 63 61 73 65 20 69 6d 70 6c 65   each case imple
5a70: 6d 65 6e 74 73 20 61 0a 2a 2a 20 73 65 70 61 72  ments a.** separ
5a80: 61 74 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  ate instruction 
5a90: 69 6e 20 74 68 65 20 76 69 72 74 75 61 6c 20 6d  in the virtual m
5aa0: 61 63 68 69 6e 65 2e 20 20 49 66 20 77 65 20 66  achine.  If we f
5ab0: 6f 6c 6c 6f 77 20 74 68 65 20 75 73 75 61 6c 0a  ollow the usual.
5ac0: 2a 2a 20 69 6e 64 65 6e 74 61 74 69 6f 6e 20 63  ** indentation c
5ad0: 6f 6e 76 65 6e 74 69 6f 6e 73 2c 20 65 61 63 68  onventions, each
5ae0: 20 63 61 73 65 20 73 68 6f 75 6c 64 20 62 65 20   case should be 
5af0: 69 6e 64 65 6e 74 65 64 20 62 79 20 36 20 73 70  indented by 6 sp
5b00: 61 63 65 73 2e 20 20 42 75 74 0a 2a 2a 20 74 68  aces.  But.** th
5b10: 61 74 20 69 73 20 61 20 6c 6f 74 20 6f 66 20 77  at is a lot of w
5b20: 61 73 74 65 64 20 73 70 61 63 65 20 6f 6e 20 74  asted space on t
5b30: 68 65 20 6c 65 66 74 20 6d 61 72 67 69 6e 2e 20  he left margin. 
5b40: 20 53 6f 20 74 68 65 20 63 6f 64 65 20 77 69 74   So the code wit
5b50: 68 69 6e 0a 2a 2a 20 74 68 65 20 73 77 69 74 63  hin.** the switc
5b60: 68 20 73 74 61 74 65 6d 65 6e 74 20 77 69 6c 6c  h statement will
5b70: 20 62 72 65 61 6b 20 77 69 74 68 20 63 6f 6e 76   break with conv
5b80: 65 6e 74 69 6f 6e 20 61 6e 64 20 62 65 20 66 6c  ention and be fl
5b90: 75 73 68 2d 6c 65 66 74 2e 20 41 6e 6f 74 68 65  ush-left. Anothe
5ba0: 72 0a 2a 2a 20 62 69 67 20 63 6f 6d 6d 65 6e 74  r.** big comment
5bb0: 20 28 73 69 6d 69 6c 61 72 20 74 6f 20 74 68 69   (similar to thi
5bc0: 73 20 6f 6e 65 29 20 77 69 6c 6c 20 6d 61 72 6b  s one) will mark
5bd0: 20 74 68 65 20 70 6f 69 6e 74 20 69 6e 20 74 68   the point in th
5be0: 65 20 63 6f 64 65 20 77 68 65 72 65 0a 2a 2a 20  e code where.** 
5bf0: 77 65 20 74 72 61 6e 73 69 74 69 6f 6e 20 62 61  we transition ba
5c00: 63 6b 20 74 6f 20 6e 6f 72 6d 61 6c 20 69 6e 64  ck to normal ind
5c10: 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  entation..**.** 
5c20: 54 68 65 20 66 6f 72 6d 61 74 74 69 6e 67 20 6f  The formatting o
5c30: 66 20 65 61 63 68 20 63 61 73 65 20 69 73 20 69  f each case is i
5c40: 6d 70 6f 72 74 61 6e 74 2e 20 20 54 68 65 20 6d  mportant.  The m
5c50: 61 6b 65 66 69 6c 65 20 66 6f 72 20 53 51 4c 69  akefile for SQLi
5c60: 74 65 0a 2a 2a 20 67 65 6e 65 72 61 74 65 73 20  te.** generates 
5c70: 74 77 6f 20 43 20 66 69 6c 65 73 20 22 6f 70 63  two C files "opc
5c80: 6f 64 65 73 2e 68 22 20 61 6e 64 20 22 6f 70 63  odes.h" and "opc
5c90: 6f 64 65 73 2e 63 22 20 62 79 20 73 63 61 6e 6e  odes.c" by scann
5ca0: 69 6e 67 20 74 68 69 73 0a 2a 2a 20 66 69 6c 65  ing this.** file
5cb0: 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20 6c 69 6e   looking for lin
5cc0: 65 73 20 74 68 61 74 20 62 65 67 69 6e 20 77 69  es that begin wi
5cd0: 74 68 20 22 63 61 73 65 20 4f 50 5f 22 2e 20 20  th "case OP_".  
5ce0: 54 68 65 20 6f 70 63 6f 64 65 73 2e 68 20 66 69  The opcodes.h fi
5cf0: 6c 65 73 0a 2a 2a 20 77 69 6c 6c 20 62 65 20 66  les.** will be f
5d00: 69 6c 6c 65 64 20 77 69 74 68 20 23 64 65 66 69  illed with #defi
5d10: 6e 65 73 20 74 68 61 74 20 67 69 76 65 20 75 6e  nes that give un
5d20: 69 71 75 65 20 69 6e 74 65 67 65 72 20 76 61 6c  ique integer val
5d30: 75 65 73 20 74 6f 20 65 61 63 68 0a 2a 2a 20 6f  ues to each.** o
5d40: 70 63 6f 64 65 20 61 6e 64 20 74 68 65 20 6f 70  pcode and the op
5d50: 63 6f 64 65 73 2e 63 20 66 69 6c 65 20 69 73 20  codes.c file is 
5d60: 66 69 6c 6c 65 64 20 77 69 74 68 20 61 6e 20 61  filled with an a
5d70: 72 72 61 79 20 6f 66 20 73 74 72 69 6e 67 73 20  rray of strings 
5d80: 77 68 65 72 65 0a 2a 2a 20 65 61 63 68 20 73 74  where.** each st
5d90: 72 69 6e 67 20 69 73 20 74 68 65 20 73 79 6d 62  ring is the symb
5da0: 6f 6c 69 63 20 6e 61 6d 65 20 66 6f 72 20 74 68  olic name for th
5db0: 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  e corresponding 
5dc0: 6f 70 63 6f 64 65 2e 20 20 49 66 20 74 68 65 0a  opcode.  If the.
5dd0: 2a 2a 20 63 61 73 65 20 73 74 61 74 65 6d 65 6e  ** case statemen
5de0: 74 20 69 73 20 66 6f 6c 6c 6f 77 65 64 20 62 79  t is followed by
5df0: 20 61 20 63 6f 6d 6d 65 6e 74 20 6f 66 20 74 68   a comment of th
5e00: 65 20 66 6f 72 6d 20 22 2f 23 20 73 61 6d 65 20  e form "/# same 
5e10: 61 73 20 2e 2e 2e 20 23 2f 22 0a 2a 2a 20 74 68  as ... #/".** th
5e20: 61 74 20 63 6f 6d 6d 65 6e 74 20 69 73 20 75 73  at comment is us
5e30: 65 64 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20  ed to determine 
5e40: 74 68 65 20 70 61 72 74 69 63 75 6c 61 72 20 76  the particular v
5e50: 61 6c 75 65 20 6f 66 20 74 68 65 20 6f 70 63 6f  alue of the opco
5e60: 64 65 2e 0a 2a 2a 0a 2a 2a 20 4f 74 68 65 72 20  de..**.** Other 
5e70: 6b 65 79 77 6f 72 64 73 20 69 6e 20 74 68 65 20  keywords in the 
5e80: 63 6f 6d 6d 65 6e 74 20 74 68 61 74 20 66 6f 6c  comment that fol
5e90: 6c 6f 77 73 20 65 61 63 68 20 63 61 73 65 20 61  lows each case a
5ea0: 72 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 63 6f  re used to.** co
5eb0: 6e 73 74 72 75 63 74 20 74 68 65 20 4f 50 46 4c  nstruct the OPFL
5ec0: 47 5f 49 4e 49 54 49 41 4c 49 5a 45 52 20 76 61  G_INITIALIZER va
5ed0: 6c 75 65 20 74 68 61 74 20 69 6e 69 74 69 61 6c  lue that initial
5ee0: 69 7a 65 73 20 6f 70 63 6f 64 65 50 72 6f 70 65  izes opcodePrope
5ef0: 72 74 79 5b 5d 2e 0a 2a 2a 20 4b 65 79 77 6f 72  rty[]..** Keywor
5f00: 64 73 20 69 6e 63 6c 75 64 65 3a 20 69 6e 31 2c  ds include: in1,
5f10: 20 69 6e 32 2c 20 69 6e 33 2c 20 6f 75 74 32 5f   in2, in3, out2_
5f20: 70 72 65 72 65 6c 65 61 73 65 2c 20 6f 75 74 32  prerelease, out2
5f30: 2c 20 6f 75 74 33 2e 20 20 53 65 65 0a 2a 2a 20  , out3.  See.** 
5f40: 74 68 65 20 6d 6b 6f 70 63 6f 64 65 68 2e 61 77  the mkopcodeh.aw
5f50: 6b 20 73 63 72 69 70 74 20 66 6f 72 20 61 64 64  k script for add
5f60: 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74  itional informat
5f70: 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 44 6f 63 75 6d  ion..**.** Docum
5f80: 65 6e 74 61 74 69 6f 6e 20 61 62 6f 75 74 20 56  entation about V
5f90: 44 42 45 20 6f 70 63 6f 64 65 73 20 69 73 20 67  DBE opcodes is g
5fa0: 65 6e 65 72 61 74 65 64 20 62 79 20 73 63 61 6e  enerated by scan
5fb0: 6e 69 6e 67 20 74 68 69 73 20 66 69 6c 65 0a 2a  ning this file.*
5fc0: 2a 20 66 6f 72 20 6c 69 6e 65 73 20 6f 66 20 74  * for lines of t
5fd0: 68 61 74 20 63 6f 6e 74 61 69 6e 20 22 4f 70 63  hat contain "Opc
5fe0: 6f 64 65 3a 22 2e 20 20 54 68 61 74 20 6c 69 6e  ode:".  That lin
5ff0: 65 20 61 6e 64 20 61 6c 6c 20 73 75 62 73 65 71  e and all subseq
6000: 75 65 6e 74 0a 2a 2a 20 63 6f 6d 6d 65 6e 74 20  uent.** comment 
6010: 6c 69 6e 65 73 20 61 72 65 20 75 73 65 64 20 69  lines are used i
6020: 6e 20 74 68 65 20 67 65 6e 65 72 61 74 69 6f 6e  n the generation
6030: 20 6f 66 20 74 68 65 20 6f 70 63 6f 64 65 2e 68   of the opcode.h
6040: 74 6d 6c 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  tml documentatio
6050: 6e 0a 2a 2a 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a  n.** file..**.**
6060: 20 53 55 4d 4d 41 52 59 3a 0a 2a 2a 0a 2a 2a 20   SUMMARY:.**.** 
6070: 20 20 20 20 46 6f 72 6d 61 74 74 69 6e 67 20 69      Formatting i
6080: 73 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20 73  s important to s
6090: 63 72 69 70 74 73 20 74 68 61 74 20 73 63 61 6e  cripts that scan
60a0: 20 74 68 69 73 20 66 69 6c 65 2e 0a 2a 2a 20 20   this file..**  
60b0: 20 20 20 44 6f 20 6e 6f 74 20 64 65 76 69 61 74     Do not deviat
60c0: 65 20 66 72 6f 6d 20 74 68 65 20 66 6f 72 6d 61  e from the forma
60d0: 74 74 69 6e 67 20 73 74 79 6c 65 20 63 75 72 72  tting style curr
60e0: 65 6e 74 6c 79 20 69 6e 20 75 73 65 2e 0a 2a 2a  ently in use..**
60f0: 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .***************
6100: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6110: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6120: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a  **************/.
6140: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 47 6f 74  ./* Opcode:  Got
6150: 6f 20 2a 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a  o * P2 * * *.**.
6160: 2a 2a 20 41 6e 20 75 6e 63 6f 6e 64 69 74 69 6f  ** An unconditio
6170: 6e 61 6c 20 6a 75 6d 70 20 74 6f 20 61 64 64 72  nal jump to addr
6180: 65 73 73 20 50 32 2e 0a 2a 2a 20 54 68 65 20 6e  ess P2..** The n
6190: 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  ext instruction 
61a0: 65 78 65 63 75 74 65 64 20 77 69 6c 6c 20 62 65  executed will be
61b0: 20 0a 2a 2a 20 74 68 65 20 6f 6e 65 20 61 74 20   .** the one at 
61c0: 69 6e 64 65 78 20 50 32 20 66 72 6f 6d 20 74 68  index P2 from th
61d0: 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 0a 2a  e beginning of.*
61e0: 2a 20 74 68 65 20 70 72 6f 67 72 61 6d 2e 0a 2a  * the program..*
61f0: 2f 0a 63 61 73 65 20 4f 50 5f 47 6f 74 6f 3a 20  /.case OP_Goto: 
6200: 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  {             /*
6210: 20 6a 75 6d 70 20 2a 2f 0a 20 20 43 48 45 43 4b   jump */.  CHECK
6220: 5f 46 4f 52 5f 49 4e 54 45 52 52 55 50 54 3b 0a  _FOR_INTERRUPT;.
6230: 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
6240: 20 31 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a   1;.  break;.}..
6250: 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 47 6f 73 75  /* Opcode:  Gosu
6260: 62 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  b P1 P2 * * *.**
6270: 0a 2a 2a 20 57 72 69 74 65 20 74 68 65 20 63 75  .** Write the cu
6280: 72 72 65 6e 74 20 61 64 64 72 65 73 73 20 6f 6e  rrent address on
6290: 74 6f 20 72 65 67 69 73 74 65 72 20 50 31 0a 2a  to register P1.*
62a0: 2a 20 61 6e 64 20 74 68 65 6e 20 6a 75 6d 70 20  * and then jump 
62b0: 74 6f 20 61 64 64 72 65 73 73 20 50 32 2e 0a 2a  to address P2..*
62c0: 2f 0a 63 61 73 65 20 4f 50 5f 47 6f 73 75 62 3a  /.case OP_Gosub:
62d0: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
62e0: 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20   jump, in1 */.  
62f0: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
6300: 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
6310: 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
6320: 4d 45 4d 5f 44 79 6e 29 3d 3d 30 20 29 3b 0a 20  MEM_Dyn)==0 );. 
6330: 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
6340: 65 28 70 2c 20 70 49 6e 31 29 3b 0a 20 20 70 49  e(p, pIn1);.  pI
6350: 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  n1->flags = MEM_
6360: 49 6e 74 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69  Int;.  pIn1->u.i
6370: 20 3d 20 70 63 3b 0a 20 20 52 45 47 49 53 54 45   = pc;.  REGISTE
6380: 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c  R_TRACE(pOp->p1,
6390: 20 70 49 6e 31 29 3b 0a 20 20 70 63 20 3d 20 70   pIn1);.  pc = p
63a0: 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 62 72  Op->p2 - 1;.  br
63b0: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
63c0: 65 3a 20 20 52 65 74 75 72 6e 20 50 31 20 2a 20  e:  Return P1 * 
63d0: 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70  * * *.**.** Jump
63e0: 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73   to the next ins
63f0: 74 72 75 63 74 69 6f 6e 20 61 66 74 65 72 20 74  truction after t
6400: 68 65 20 61 64 64 72 65 73 73 20 69 6e 20 72 65  he address in re
6410: 67 69 73 74 65 72 20 50 31 2e 0a 2a 2f 0a 63 61  gister P1..*/.ca
6420: 73 65 20 4f 50 5f 52 65 74 75 72 6e 3a 20 7b 20  se OP_Return: { 
6430: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31            /* in1
6440: 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   */.  pIn1 = &aM
6450: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  em[pOp->p1];.  a
6460: 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61  ssert( pIn1->fla
6470: 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a  gs & MEM_Int );.
6480: 20 20 70 63 20 3d 20 28 69 6e 74 29 70 49 6e 31    pc = (int)pIn1
6490: 2d 3e 75 2e 69 3b 0a 20 20 62 72 65 61 6b 3b 0a  ->u.i;.  break;.
64a0: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 59  }../* Opcode:  Y
64b0: 69 65 6c 64 20 50 31 20 2a 20 2a 20 2a 20 2a 0a  ield P1 * * * *.
64c0: 2a 2a 0a 2a 2a 20 53 77 61 70 20 74 68 65 20 70  **.** Swap the p
64d0: 72 6f 67 72 61 6d 20 63 6f 75 6e 74 65 72 20 77  rogram counter w
64e0: 69 74 68 20 74 68 65 20 76 61 6c 75 65 20 69 6e  ith the value in
64f0: 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2f   register P1..*/
6500: 0a 63 61 73 65 20 4f 50 5f 59 69 65 6c 64 3a 20  .case OP_Yield: 
6510: 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  {            /* 
6520: 69 6e 31 20 2a 2f 0a 20 20 69 6e 74 20 70 63 44  in1 */.  int pcD
6530: 65 73 74 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61  est;.  pIn1 = &a
6540: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
6550: 61 73 73 65 72 74 28 20 28 70 49 6e 31 2d 3e 66  assert( (pIn1->f
6560: 6c 61 67 73 20 26 20 4d 45 4d 5f 44 79 6e 29 3d  lags & MEM_Dyn)=
6570: 3d 30 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c  =0 );.  pIn1->fl
6580: 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20  ags = MEM_Int;. 
6590: 20 70 63 44 65 73 74 20 3d 20 28 69 6e 74 29 70   pcDest = (int)p
65a0: 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20 70 49 6e 31  In1->u.i;.  pIn1
65b0: 2d 3e 75 2e 69 20 3d 20 70 63 3b 0a 20 20 52 45  ->u.i = pc;.  RE
65c0: 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
65d0: 2d 3e 70 31 2c 20 70 49 6e 31 29 3b 0a 20 20 70  ->p1, pIn1);.  p
65e0: 63 20 3d 20 70 63 44 65 73 74 3b 0a 20 20 62 72  c = pcDest;.  br
65f0: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
6600: 65 3a 20 20 48 61 6c 74 49 66 4e 75 6c 6c 20 20  e:  HaltIfNull  
6610: 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a  P1 P2 P3 P4 *.**
6620: 0a 2a 2a 20 43 68 65 63 6b 20 74 68 65 20 76 61  .** Check the va
6630: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
6640: 50 33 2e 20 20 49 66 20 69 73 20 69 73 20 4e 55  P3.  If is is NU
6650: 4c 4c 20 74 68 65 6e 20 48 61 6c 74 20 75 73 69  LL then Halt usi
6660: 6e 67 0a 2a 2a 20 70 61 72 61 6d 65 74 65 72 20  ng.** parameter 
6670: 50 31 2c 20 50 32 2c 20 61 6e 64 20 50 34 20 61  P1, P2, and P4 a
6680: 73 20 69 66 20 74 68 69 73 20 77 65 72 65 20 61  s if this were a
6690: 20 48 61 6c 74 20 69 6e 73 74 72 75 63 74 69 6f   Halt instructio
66a0: 6e 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 76 61  n.  If the.** va
66b0: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
66c0: 50 33 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20  P3 is not NULL, 
66d0: 74 68 65 6e 20 74 68 69 73 20 72 6f 75 74 69 6e  then this routin
66e0: 65 20 69 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f  e is a no-op..*/
66f0: 0a 63 61 73 65 20 4f 50 5f 48 61 6c 74 49 66 4e  .case OP_HaltIfN
6700: 75 6c 6c 3a 20 7b 20 20 20 20 20 20 2f 2a 20 69  ull: {      /* i
6710: 6e 33 20 2a 2f 0a 20 20 70 49 6e 33 20 3d 20 26  n3 */.  pIn3 = &
6720: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
6730: 20 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67   if( (pIn3->flag
6740: 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30  s & MEM_Null)==0
6750: 20 29 20 62 72 65 61 6b 3b 0a 20 20 2f 2a 20 46   ) break;.  /* F
6760: 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e 74 6f  all through into
6770: 20 4f 50 5f 48 61 6c 74 20 2a 2f 0a 7d 0a 0a 2f   OP_Halt */.}../
6780: 2a 20 4f 70 63 6f 64 65 3a 20 20 48 61 6c 74 20  * Opcode:  Halt 
6790: 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a  P1 P2 * P4 *.**.
67a0: 2a 2a 20 45 78 69 74 20 69 6d 6d 65 64 69 61 74  ** Exit immediat
67b0: 65 6c 79 2e 20 20 41 6c 6c 20 6f 70 65 6e 20 63  ely.  All open c
67c0: 75 72 73 6f 72 73 2c 20 65 74 63 20 61 72 65 20  ursors, etc are 
67d0: 63 6c 6f 73 65 64 0a 2a 2a 20 61 75 74 6f 6d 61  closed.** automa
67e0: 74 69 63 61 6c 6c 79 2e 0a 2a 2a 0a 2a 2a 20 50  tically..**.** P
67f0: 31 20 69 73 20 74 68 65 20 72 65 73 75 6c 74 20  1 is the result 
6800: 63 6f 64 65 20 72 65 74 75 72 6e 65 64 20 62 79  code returned by
6810: 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28 29 2c   sqlite3_exec(),
6820: 20 73 71 6c 69 74 65 33 5f 72 65 73 65 74 28 29   sqlite3_reset()
6830: 2c 0a 2a 2a 20 6f 72 20 73 71 6c 69 74 65 33 5f  ,.** or sqlite3_
6840: 66 69 6e 61 6c 69 7a 65 28 29 2e 20 20 46 6f 72  finalize().  For
6850: 20 61 20 6e 6f 72 6d 61 6c 20 68 61 6c 74 2c 20   a normal halt, 
6860: 74 68 69 73 20 73 68 6f 75 6c 64 20 62 65 20 53  this should be S
6870: 51 4c 49 54 45 5f 4f 4b 20 28 30 29 2e 0a 2a 2a  QLITE_OK (0)..**
6880: 20 46 6f 72 20 65 72 72 6f 72 73 2c 20 69 74 20   For errors, it 
6890: 63 61 6e 20 62 65 20 73 6f 6d 65 20 6f 74 68 65  can be some othe
68a0: 72 20 76 61 6c 75 65 2e 20 20 49 66 20 50 31 21  r value.  If P1!
68b0: 3d 30 20 74 68 65 6e 20 50 32 20 77 69 6c 6c 20  =0 then P2 will 
68c0: 64 65 74 65 72 6d 69 6e 65 0a 2a 2a 20 77 68 65  determine.** whe
68d0: 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 6f 20 72  ther or not to r
68e0: 6f 6c 6c 62 61 63 6b 20 74 68 65 20 63 75 72 72  ollback the curr
68f0: 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e  ent transaction.
6900: 20 20 44 6f 20 6e 6f 74 20 72 6f 6c 6c 62 61 63    Do not rollbac
6910: 6b 0a 2a 2a 20 69 66 20 50 32 3d 3d 4f 45 5f 46  k.** if P2==OE_F
6920: 61 69 6c 2e 20 44 6f 20 74 68 65 20 72 6f 6c 6c  ail. Do the roll
6930: 62 61 63 6b 20 69 66 20 50 32 3d 3d 4f 45 5f 52  back if P2==OE_R
6940: 6f 6c 6c 62 61 63 6b 2e 20 20 49 66 20 50 32 3d  ollback.  If P2=
6950: 3d 4f 45 5f 41 62 6f 72 74 2c 0a 2a 2a 20 74 68  =OE_Abort,.** th
6960: 65 6e 20 62 61 63 6b 20 6f 75 74 20 61 6c 6c 20  en back out all 
6970: 63 68 61 6e 67 65 73 20 74 68 61 74 20 68 61 76  changes that hav
6980: 65 20 6f 63 63 75 72 72 65 64 20 64 75 72 69 6e  e occurred durin
6990: 67 20 74 68 69 73 20 65 78 65 63 75 74 69 6f 6e  g this execution
69a0: 20 6f 66 20 74 68 65 0a 2a 2a 20 56 44 42 45 2c   of the.** VDBE,
69b0: 20 62 75 74 20 64 6f 20 6e 6f 74 20 72 6f 6c 6c   but do not roll
69c0: 62 61 63 6b 20 74 68 65 20 74 72 61 6e 73 61 63  back the transac
69d0: 74 69 6f 6e 2e 20 0a 2a 2a 0a 2a 2a 20 49 66 20  tion. .**.** If 
69e0: 50 34 20 69 73 20 6e 6f 74 20 6e 75 6c 6c 20 74  P4 is not null t
69f0: 68 65 6e 20 69 74 20 69 73 20 61 6e 20 65 72 72  hen it is an err
6a00: 6f 72 20 6d 65 73 73 61 67 65 20 73 74 72 69 6e  or message strin
6a10: 67 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 69  g..**.** There i
6a20: 73 20 61 6e 20 69 6d 70 6c 69 65 64 20 22 48 61  s an implied "Ha
6a30: 6c 74 20 30 20 30 20 30 22 20 69 6e 73 74 72 75  lt 0 0 0" instru
6a40: 63 74 69 6f 6e 20 69 6e 73 65 72 74 65 64 20 61  ction inserted a
6a50: 74 20 74 68 65 20 76 65 72 79 20 65 6e 64 20 6f  t the very end o
6a60: 66 0a 2a 2a 20 65 76 65 72 79 20 70 72 6f 67 72  f.** every progr
6a70: 61 6d 2e 20 20 53 6f 20 61 20 6a 75 6d 70 20 70  am.  So a jump p
6a80: 61 73 74 20 74 68 65 20 6c 61 73 74 20 69 6e 73  ast the last ins
6a90: 74 72 75 63 74 69 6f 6e 20 6f 66 20 74 68 65 20  truction of the 
6aa0: 70 72 6f 67 72 61 6d 0a 2a 2a 20 69 73 20 74 68  program.** is th
6ab0: 65 20 73 61 6d 65 20 61 73 20 65 78 65 63 75 74  e same as execut
6ac0: 69 6e 67 20 48 61 6c 74 2e 0a 2a 2f 0a 63 61 73  ing Halt..*/.cas
6ad0: 65 20 4f 50 5f 48 61 6c 74 3a 20 7b 0a 20 20 69  e OP_Halt: {.  i
6ae0: 66 28 20 70 4f 70 2d 3e 70 31 3d 3d 53 51 4c 49  f( pOp->p1==SQLI
6af0: 54 45 5f 4f 4b 20 26 26 20 70 2d 3e 70 46 72 61  TE_OK && p->pFra
6b00: 6d 65 20 29 7b 0a 20 20 20 20 2f 2a 20 48 61 6c  me ){.    /* Hal
6b10: 74 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72 61  t the sub-progra
6b20: 6d 2e 20 52 65 74 75 72 6e 20 63 6f 6e 74 72 6f  m. Return contro
6b30: 6c 20 74 6f 20 74 68 65 20 70 61 72 65 6e 74 20  l to the parent 
6b40: 66 72 61 6d 65 2e 20 2a 2f 0a 20 20 20 20 56 64  frame. */.    Vd
6b50: 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 20  beFrame *pFrame 
6b60: 3d 20 70 2d 3e 70 46 72 61 6d 65 3b 0a 20 20 20  = p->pFrame;.   
6b70: 20 70 2d 3e 70 46 72 61 6d 65 20 3d 20 70 46 72   p->pFrame = pFr
6b80: 61 6d 65 2d 3e 70 50 61 72 65 6e 74 3b 0a 20 20  ame->pParent;.  
6b90: 20 20 70 2d 3e 6e 46 72 61 6d 65 2d 2d 3b 0a 20    p->nFrame--;. 
6ba0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
6bb0: 74 43 68 61 6e 67 65 73 28 64 62 2c 20 70 2d 3e  tChanges(db, p->
6bc0: 6e 43 68 61 6e 67 65 29 3b 0a 20 20 20 20 70 63  nChange);.    pc
6bd0: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 46 72   = sqlite3VdbeFr
6be0: 61 6d 65 52 65 73 74 6f 72 65 28 70 46 72 61 6d  ameRestore(pFram
6bf0: 65 29 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d  e);.    if( pOp-
6c00: 3e 70 32 3d 3d 4f 45 5f 49 67 6e 6f 72 65 20 29  >p2==OE_Ignore )
6c10: 7b 0a 20 20 20 20 20 20 2f 2a 20 49 6e 73 74 72  {.      /* Instr
6c20: 75 63 74 69 6f 6e 20 70 63 20 69 73 20 74 68 65  uction pc is the
6c30: 20 4f 50 5f 50 72 6f 67 72 61 6d 20 74 68 61 74   OP_Program that
6c40: 20 69 6e 76 6f 6b 65 64 20 74 68 65 20 73 75 62   invoked the sub
6c50: 2d 70 72 6f 67 72 61 6d 20 0a 20 20 20 20 20 20  -program .      
6c60: 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20 62 65 69  ** currently bei
6c70: 6e 67 20 68 61 6c 74 65 64 2e 20 49 66 20 74 68  ng halted. If th
6c80: 65 20 70 32 20 69 6e 73 74 72 75 63 74 69 6f 6e  e p2 instruction
6c90: 20 6f 66 20 74 68 69 73 20 4f 50 5f 48 61 6c 74   of this OP_Halt
6ca0: 0a 20 20 20 20 20 20 2a 2a 20 69 6e 73 74 72 75  .      ** instru
6cb0: 63 74 69 6f 6e 20 69 73 20 73 65 74 20 74 6f 20  ction is set to 
6cc0: 4f 45 5f 49 67 6e 6f 72 65 2c 20 74 68 65 6e 20  OE_Ignore, then 
6cd0: 74 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 20  the sub-program 
6ce0: 69 73 20 74 68 72 6f 77 69 6e 67 0a 20 20 20 20  is throwing.    
6cf0: 20 20 2a 2a 20 61 6e 20 49 47 4e 4f 52 45 20 65    ** an IGNORE e
6d00: 78 63 65 70 74 69 6f 6e 2e 20 49 6e 20 74 68 69  xception. In thi
6d10: 73 20 63 61 73 65 20 6a 75 6d 70 20 74 6f 20 74  s case jump to t
6d20: 68 65 20 61 64 64 72 65 73 73 20 73 70 65 63 69  he address speci
6d30: 66 69 65 64 0a 20 20 20 20 20 20 2a 2a 20 61 73  fied.      ** as
6d40: 20 74 68 65 20 70 32 20 6f 66 20 74 68 65 20 63   the p2 of the c
6d50: 61 6c 6c 69 6e 67 20 4f 50 5f 50 72 6f 67 72 61  alling OP_Progra
6d60: 6d 2e 20 20 2a 2f 0a 20 20 20 20 20 20 70 63 20  m.  */.      pc 
6d70: 3d 20 70 2d 3e 61 4f 70 5b 70 63 5d 2e 70 32 2d  = p->aOp[pc].p2-
6d80: 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 61 4f 70  1;.    }.    aOp
6d90: 20 3d 20 70 2d 3e 61 4f 70 3b 0a 20 20 20 20 61   = p->aOp;.    a
6da0: 4d 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b 0a 20  Mem = p->aMem;. 
6db0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20     break;.  }.. 
6dc0: 20 70 2d 3e 72 63 20 3d 20 70 4f 70 2d 3e 70 31   p->rc = pOp->p1
6dd0: 3b 0a 20 20 70 2d 3e 65 72 72 6f 72 41 63 74 69  ;.  p->errorActi
6de0: 6f 6e 20 3d 20 28 75 38 29 70 4f 70 2d 3e 70 32  on = (u8)pOp->p2
6df0: 3b 0a 20 20 70 2d 3e 70 63 20 3d 20 70 63 3b 0a  ;.  p->pc = pc;.
6e00: 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 2e 7a 20    if( pOp->p4.z 
6e10: 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ){.    assert( p
6e20: 2d 3e 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ->rc!=SQLITE_OK 
6e30: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65  );.    sqlite3Se
6e40: 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72  tString(&p->zErr
6e50: 4d 73 67 2c 20 64 62 2c 20 22 25 73 22 2c 20 70  Msg, db, "%s", p
6e60: 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 74  Op->p4.z);.    t
6e70: 65 73 74 63 61 73 65 28 20 73 71 6c 69 74 65 33  estcase( sqlite3
6e80: 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 78 4c 6f  GlobalConfig.xLo
6e90: 67 21 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c 69  g!=0 );.    sqli
6ea0: 74 65 33 5f 6c 6f 67 28 70 4f 70 2d 3e 70 31 2c  te3_log(pOp->p1,
6eb0: 20 22 61 62 6f 72 74 20 61 74 20 25 64 20 69 6e   "abort at %d in
6ec0: 20 5b 25 73 5d 3a 20 25 73 22 2c 20 70 63 2c 20   [%s]: %s", pc, 
6ed0: 70 2d 3e 7a 53 71 6c 2c 20 70 4f 70 2d 3e 70 34  p->zSql, pOp->p4
6ee0: 2e 7a 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  .z);.  }else if(
6ef0: 20 70 2d 3e 72 63 20 29 7b 0a 20 20 20 20 74 65   p->rc ){.    te
6f00: 73 74 63 61 73 65 28 20 73 71 6c 69 74 65 33 47  stcase( sqlite3G
6f10: 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 78 4c 6f 67  lobalConfig.xLog
6f20: 21 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c 69 74  !=0 );.    sqlit
6f30: 65 33 5f 6c 6f 67 28 70 4f 70 2d 3e 70 31 2c 20  e3_log(pOp->p1, 
6f40: 22 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c  "constraint fail
6f50: 65 64 20 61 74 20 25 64 20 69 6e 20 5b 25 73 5d  ed at %d in [%s]
6f60: 22 2c 20 70 63 2c 20 70 2d 3e 7a 53 71 6c 29 3b  ", pc, p->zSql);
6f70: 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69  .  }.  rc = sqli
6f80: 74 65 33 56 64 62 65 48 61 6c 74 28 70 29 3b 0a  te3VdbeHalt(p);.
6f90: 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51    assert( rc==SQ
6fa0: 4c 49 54 45 5f 42 55 53 59 20 7c 7c 20 72 63 3d  LITE_BUSY || rc=
6fb0: 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 72 63  =SQLITE_OK || rc
6fc0: 3d 3d 53 51 4c 49 54 45 5f 45 52 52 4f 52 20 29  ==SQLITE_ERROR )
6fd0: 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49  ;.  if( rc==SQLI
6fe0: 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 70  TE_BUSY ){.    p
6ff0: 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53 51 4c 49  ->rc = rc = SQLI
7000: 54 45 5f 42 55 53 59 3b 0a 20 20 7d 65 6c 73 65  TE_BUSY;.  }else
7010: 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 72 63  {.    assert( rc
7020: 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 70  ==SQLITE_OK || p
7030: 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 43 4f 4e  ->rc==SQLITE_CON
7040: 53 54 52 41 49 4e 54 20 29 3b 0a 20 20 20 20 61  STRAINT );.    a
7050: 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54  ssert( rc==SQLIT
7060: 45 5f 4f 4b 20 7c 7c 20 64 62 2d 3e 6e 44 65 66  E_OK || db->nDef
7070: 65 72 72 65 64 43 6f 6e 73 3e 30 20 29 3b 0a 20  erredCons>0 );. 
7080: 20 20 20 72 63 20 3d 20 70 2d 3e 72 63 20 3f 20     rc = p->rc ? 
7090: 53 51 4c 49 54 45 5f 45 52 52 4f 52 20 3a 20 53  SQLITE_ERROR : S
70a0: 51 4c 49 54 45 5f 44 4f 4e 45 3b 0a 20 20 7d 0a  QLITE_DONE;.  }.
70b0: 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75    goto vdbe_retu
70c0: 72 6e 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  rn;.}../* Opcode
70d0: 3a 20 49 6e 74 65 67 65 72 20 50 31 20 50 32 20  : Integer P1 P2 
70e0: 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20  * * *.**.** The 
70f0: 33 32 2d 62 69 74 20 69 6e 74 65 67 65 72 20 76  32-bit integer v
7100: 61 6c 75 65 20 50 31 20 69 73 20 77 72 69 74 74  alue P1 is writt
7110: 65 6e 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  en into register
7120: 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P2..*/.case OP_
7130: 49 6e 74 65 67 65 72 3a 20 7b 20 20 20 20 20 20  Integer: {      
7140: 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65     /* out2-prere
7150: 6c 65 61 73 65 20 2a 2f 0a 20 20 70 4f 75 74 2d  lease */.  pOut-
7160: 3e 75 2e 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a  >u.i = pOp->p1;.
7170: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
7180: 70 63 6f 64 65 3a 20 49 6e 74 36 34 20 2a 20 50  pcode: Int64 * P
7190: 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50  2 * P4 *.**.** P
71a0: 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  4 is a pointer t
71b0: 6f 20 61 20 36 34 2d 62 69 74 20 69 6e 74 65 67  o a 64-bit integ
71c0: 65 72 20 76 61 6c 75 65 2e 0a 2a 2a 20 57 72 69  er value..** Wri
71d0: 74 65 20 74 68 61 74 20 76 61 6c 75 65 20 69 6e  te that value in
71e0: 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  to register P2..
71f0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74 36 34  */.case OP_Int64
7200: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  : {           /*
7210: 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65   out2-prerelease
7220: 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f   */.  assert( pO
7230: 70 2d 3e 70 34 2e 70 49 36 34 21 3d 30 20 29 3b  p->p4.pI64!=0 );
7240: 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 2a  .  pOut->u.i = *
7250: 70 4f 70 2d 3e 70 34 2e 70 49 36 34 3b 0a 20 20  pOp->p4.pI64;.  
7260: 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65  break;.}..#ifnde
7270: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c  f SQLITE_OMIT_FL
7280: 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 2f 2a 20  OATING_POINT./* 
7290: 4f 70 63 6f 64 65 3a 20 52 65 61 6c 20 2a 20 50  Opcode: Real * P
72a0: 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50  2 * P4 *.**.** P
72b0: 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  4 is a pointer t
72c0: 6f 20 61 20 36 34 2d 62 69 74 20 66 6c 6f 61 74  o a 64-bit float
72d0: 69 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75 65 2e  ing point value.
72e0: 0a 2a 2a 20 57 72 69 74 65 20 74 68 61 74 20 76  .** Write that v
72f0: 61 6c 75 65 20 69 6e 74 6f 20 72 65 67 69 73 74  alue into regist
7300: 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f  er P2..*/.case O
7310: 50 5f 52 65 61 6c 3a 20 7b 20 20 20 20 20 20 20  P_Real: {       
7320: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
7330: 54 4b 5f 46 4c 4f 41 54 2c 20 6f 75 74 32 2d 70  TK_FLOAT, out2-p
7340: 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 70  rerelease */.  p
7350: 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
7360: 5f 52 65 61 6c 3b 0a 20 20 61 73 73 65 72 74 28  _Real;.  assert(
7370: 20 21 73 71 6c 69 74 65 33 49 73 4e 61 4e 28 2a   !sqlite3IsNaN(*
7380: 70 4f 70 2d 3e 70 34 2e 70 52 65 61 6c 29 20 29  pOp->p4.pReal) )
7390: 3b 0a 20 20 70 4f 75 74 2d 3e 72 20 3d 20 2a 70  ;.  pOut->r = *p
73a0: 4f 70 2d 3e 70 34 2e 70 52 65 61 6c 3b 0a 20 20  Op->p4.pReal;.  
73b0: 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a  break;.}.#endif.
73c0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 74 72 69  ./* Opcode: Stri
73d0: 6e 67 38 20 2a 20 50 32 20 2a 20 50 34 20 2a 0a  ng8 * P2 * P4 *.
73e0: 2a 2a 0a 2a 2a 20 50 34 20 70 6f 69 6e 74 73 20  **.** P4 points 
73f0: 74 6f 20 61 20 6e 75 6c 20 74 65 72 6d 69 6e 61  to a nul termina
7400: 74 65 64 20 55 54 46 2d 38 20 73 74 72 69 6e 67  ted UTF-8 string
7410: 2e 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73  . This opcode is
7420: 20 74 72 61 6e 73 66 6f 72 6d 65 64 20 0a 2a 2a   transformed .**
7430: 20 69 6e 74 6f 20 61 6e 20 4f 50 5f 53 74 72 69   into an OP_Stri
7440: 6e 67 20 62 65 66 6f 72 65 20 69 74 20 69 73 20  ng before it is 
7450: 65 78 65 63 75 74 65 64 20 66 6f 72 20 74 68 65  executed for the
7460: 20 66 69 72 73 74 20 74 69 6d 65 2e 0a 2a 2f 0a   first time..*/.
7470: 63 61 73 65 20 4f 50 5f 53 74 72 69 6e 67 38 3a  case OP_String8:
7480: 20 7b 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61   {         /* sa
7490: 6d 65 20 61 73 20 54 4b 5f 53 54 52 49 4e 47 2c  me as TK_STRING,
74a0: 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65   out2-prerelease
74b0: 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f   */.  assert( pO
74c0: 70 2d 3e 70 34 2e 7a 21 3d 30 20 29 3b 0a 20 20  p->p4.z!=0 );.  
74d0: 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 3d 20 4f 50  pOp->opcode = OP
74e0: 5f 53 74 72 69 6e 67 3b 0a 20 20 70 4f 70 2d 3e  _String;.  pOp->
74f0: 70 31 20 3d 20 73 71 6c 69 74 65 33 53 74 72 6c  p1 = sqlite3Strl
7500: 65 6e 33 30 28 70 4f 70 2d 3e 70 34 2e 7a 29 3b  en30(pOp->p4.z);
7510: 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
7520: 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20 69 66  _OMIT_UTF16.  if
7530: 28 20 65 6e 63 6f 64 69 6e 67 21 3d 53 51 4c 49  ( encoding!=SQLI
7540: 54 45 5f 55 54 46 38 20 29 7b 0a 20 20 20 20 72  TE_UTF8 ){.    r
7550: 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d  c = sqlite3VdbeM
7560: 65 6d 53 65 74 53 74 72 28 70 4f 75 74 2c 20 70  emSetStr(pOut, p
7570: 4f 70 2d 3e 70 34 2e 7a 2c 20 2d 31 2c 20 53 51  Op->p4.z, -1, SQ
7580: 4c 49 54 45 5f 55 54 46 38 2c 20 53 51 4c 49 54  LITE_UTF8, SQLIT
7590: 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 69  E_STATIC);.    i
75a0: 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 54 4f  f( rc==SQLITE_TO
75b0: 4f 42 49 47 20 29 20 67 6f 74 6f 20 74 6f 6f 5f  OBIG ) goto too_
75c0: 62 69 67 3b 0a 20 20 20 20 69 66 28 20 53 51 4c  big;.    if( SQL
75d0: 49 54 45 5f 4f 4b 21 3d 73 71 6c 69 74 65 33 56  ITE_OK!=sqlite3V
75e0: 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e  dbeChangeEncodin
75f0: 67 28 70 4f 75 74 2c 20 65 6e 63 6f 64 69 6e 67  g(pOut, encoding
7600: 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  ) ) goto no_mem;
7610: 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 75  .    assert( pOu
7620: 74 2d 3e 7a 4d 61 6c 6c 6f 63 3d 3d 70 4f 75 74  t->zMalloc==pOut
7630: 2d 3e 7a 20 29 3b 0a 20 20 20 20 61 73 73 65 72  ->z );.    asser
7640: 74 28 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 26  t( pOut->flags &
7650: 20 4d 45 4d 5f 44 79 6e 20 29 3b 0a 20 20 20 20   MEM_Dyn );.    
7660: 70 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d 20  pOut->zMalloc = 
7670: 30 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61  0;.    pOut->fla
7680: 67 73 20 7c 3d 20 4d 45 4d 5f 53 74 61 74 69 63  gs |= MEM_Static
7690: 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67  ;.    pOut->flag
76a0: 73 20 26 3d 20 7e 4d 45 4d 5f 44 79 6e 3b 0a 20  s &= ~MEM_Dyn;. 
76b0: 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79     if( pOp->p4ty
76c0: 70 65 3d 3d 50 34 5f 44 59 4e 41 4d 49 43 20 29  pe==P4_DYNAMIC )
76d0: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 44  {.      sqlite3D
76e0: 62 46 72 65 65 28 64 62 2c 20 70 4f 70 2d 3e 70  bFree(db, pOp->p
76f0: 34 2e 7a 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  4.z);.    }.    
7700: 70 4f 70 2d 3e 70 34 74 79 70 65 20 3d 20 50 34  pOp->p4type = P4
7710: 5f 44 59 4e 41 4d 49 43 3b 0a 20 20 20 20 70 4f  _DYNAMIC;.    pO
7720: 70 2d 3e 70 34 2e 7a 20 3d 20 70 4f 75 74 2d 3e  p->p4.z = pOut->
7730: 7a 3b 0a 20 20 20 20 70 4f 70 2d 3e 70 31 20 3d  z;.    pOp->p1 =
7740: 20 70 4f 75 74 2d 3e 6e 3b 0a 20 20 7d 0a 23 65   pOut->n;.  }.#e
7750: 6e 64 69 66 0a 20 20 69 66 28 20 70 4f 70 2d 3e  ndif.  if( pOp->
7760: 70 31 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51  p1>db->aLimit[SQ
7770: 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54  LITE_LIMIT_LENGT
7780: 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74  H] ){.    goto t
7790: 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 2f 2a  oo_big;.  }.  /*
77a0: 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f   Fall through to
77b0: 20 74 68 65 20 6e 65 78 74 20 63 61 73 65 2c 20   the next case, 
77c0: 4f 50 5f 53 74 72 69 6e 67 20 2a 2f 0a 7d 0a 20  OP_String */.}. 
77d0: 20 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 74 72   ./* Opcode: Str
77e0: 69 6e 67 20 50 31 20 50 32 20 2a 20 50 34 20 2a  ing P1 P2 * P4 *
77f0: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 74 72 69 6e  .**.** The strin
7800: 67 20 76 61 6c 75 65 20 50 34 20 6f 66 20 6c 65  g value P4 of le
7810: 6e 67 74 68 20 50 31 20 28 62 79 74 65 73 29 20  ngth P1 (bytes) 
7820: 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67  is stored in reg
7830: 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73  ister P2..*/.cas
7840: 65 20 4f 50 5f 53 74 72 69 6e 67 3a 20 7b 20 20  e OP_String: {  
7850: 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d          /* out2-
7860: 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20  prerelease */.  
7870: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e  assert( pOp->p4.
7880: 7a 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74 2d 3e  z!=0 );.  pOut->
7890: 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 53 74 72 7c  flags = MEM_Str|
78a0: 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 54  MEM_Static|MEM_T
78b0: 65 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e 7a 20 3d  erm;.  pOut->z =
78c0: 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 70 4f   pOp->p4.z;.  pO
78d0: 75 74 2d 3e 6e 20 3d 20 70 4f 70 2d 3e 70 31 3b  ut->n = pOp->p1;
78e0: 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 65  .  pOut->enc = e
78f0: 6e 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44 41 54  ncoding;.  UPDAT
7900: 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70  E_MAX_BLOBSIZE(p
7910: 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Out);.  break;.}
7920: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 75 6c  ../* Opcode: Nul
7930: 6c 20 2a 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a  l * P2 * * *.**.
7940: 2a 2a 20 57 72 69 74 65 20 61 20 4e 55 4c 4c 20  ** Write a NULL 
7950: 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  into register P2
7960: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 75 6c  ..*/.case OP_Nul
7970: 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f  l: {           /
7980: 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73  * out2-prereleas
7990: 65 20 2a 2f 0a 20 20 70 4f 75 74 2d 3e 66 6c 61  e */.  pOut->fla
79a0: 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20  gs = MEM_Null;. 
79b0: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f   break;.}.../* O
79c0: 70 63 6f 64 65 3a 20 42 6c 6f 62 20 50 31 20 50  pcode: Blob P1 P
79d0: 32 20 2a 20 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20  2 * P4.**.** P4 
79e0: 70 6f 69 6e 74 73 20 74 6f 20 61 20 62 6c 6f 62  points to a blob
79f0: 20 6f 66 20 64 61 74 61 20 50 31 20 62 79 74 65   of data P1 byte
7a00: 73 20 6c 6f 6e 67 2e 20 20 53 74 6f 72 65 20 74  s long.  Store t
7a10: 68 69 73 0a 2a 2a 20 62 6c 6f 62 20 69 6e 20 72  his.** blob in r
7a20: 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63  egister P2..*/.c
7a30: 61 73 65 20 4f 50 5f 42 6c 6f 62 3a 20 7b 20 20  ase OP_Blob: {  
7a40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
7a50: 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65   out2-prerelease
7a60: 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f   */.  assert( pO
7a70: 70 2d 3e 70 31 20 3c 3d 20 53 51 4c 49 54 45 5f  p->p1 <= SQLITE_
7a80: 4d 41 58 5f 4c 45 4e 47 54 48 20 29 3b 0a 20 20  MAX_LENGTH );.  
7a90: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
7aa0: 74 53 74 72 28 70 4f 75 74 2c 20 70 4f 70 2d 3e  tStr(pOut, pOp->
7ab0: 70 34 2e 7a 2c 20 70 4f 70 2d 3e 70 31 2c 20 30  p4.z, pOp->p1, 0
7ac0: 2c 20 30 29 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e  , 0);.  pOut->en
7ad0: 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20  c = encoding;.  
7ae0: 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53  UPDATE_MAX_BLOBS
7af0: 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65  IZE(pOut);.  bre
7b00: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
7b10: 3a 20 56 61 72 69 61 62 6c 65 20 50 31 20 50 32  : Variable P1 P2
7b20: 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 54 72   * P4 *.**.** Tr
7b30: 61 6e 73 66 65 72 20 74 68 65 20 76 61 6c 75 65  ansfer the value
7b40: 73 20 6f 66 20 62 6f 75 6e 64 20 70 61 72 61 6d  s of bound param
7b50: 65 74 65 72 20 50 31 20 69 6e 74 6f 20 72 65 67  eter P1 into reg
7b60: 69 73 74 65 72 20 50 32 0a 2a 2a 0a 2a 2a 20 49  ister P2.**.** I
7b70: 66 20 74 68 65 20 70 61 72 61 6d 65 74 65 72 20  f the parameter 
7b80: 69 73 20 6e 61 6d 65 64 2c 20 74 68 65 6e 20 69  is named, then i
7b90: 74 73 20 6e 61 6d 65 20 61 70 70 65 61 72 73 20  ts name appears 
7ba0: 69 6e 20 50 34 20 61 6e 64 20 50 33 3d 3d 31 2e  in P4 and P3==1.
7bb0: 0a 2a 2a 20 54 68 65 20 50 34 20 76 61 6c 75 65  .** The P4 value
7bc0: 20 69 73 20 75 73 65 64 20 62 79 20 73 71 6c 69   is used by sqli
7bd0: 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74  te3_bind_paramet
7be0: 65 72 5f 6e 61 6d 65 28 29 2e 0a 2a 2f 0a 63 61  er_name()..*/.ca
7bf0: 73 65 20 4f 50 5f 56 61 72 69 61 62 6c 65 3a 20  se OP_Variable: 
7c00: 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  {            /* 
7c10: 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20  out2-prerelease 
7c20: 2a 2f 0a 20 20 4d 65 6d 20 2a 70 56 61 72 3b 20  */.  Mem *pVar; 
7c30: 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 62        /* Value b
7c40: 65 69 6e 67 20 74 72 61 6e 73 66 65 72 72 65 64  eing transferred
7c50: 20 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70   */..  assert( p
7c60: 4f 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d  Op->p1>0 && pOp-
7c70: 3e 70 31 3c 3d 70 2d 3e 6e 56 61 72 20 29 3b 0a  >p1<=p->nVar );.
7c80: 20 20 70 56 61 72 20 3d 20 26 70 2d 3e 61 56 61    pVar = &p->aVa
7c90: 72 5b 70 4f 70 2d 3e 70 31 20 2d 20 31 5d 3b 0a  r[pOp->p1 - 1];.
7ca0: 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62    if( sqlite3Vdb
7cb0: 65 4d 65 6d 54 6f 6f 42 69 67 28 70 56 61 72 29  eMemTooBig(pVar)
7cc0: 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f   ){.    goto too
7cd0: 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 73 71 6c 69  _big;.  }.  sqli
7ce0: 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f  te3VdbeMemShallo
7cf0: 77 43 6f 70 79 28 70 4f 75 74 2c 20 70 56 61 72  wCopy(pOut, pVar
7d00: 2c 20 4d 45 4d 5f 53 74 61 74 69 63 29 3b 0a 20  , MEM_Static);. 
7d10: 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42   UPDATE_MAX_BLOB
7d20: 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72  SIZE(pOut);.  br
7d30: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
7d40: 65 3a 20 4d 6f 76 65 20 50 31 20 50 32 20 50 33  e: Move P1 P2 P3
7d50: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4d 6f 76 65 20   * *.**.** Move 
7d60: 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65  the values in re
7d70: 67 69 73 74 65 72 20 50 31 2e 2e 50 31 2b 50 33  gister P1..P1+P3
7d80: 2d 31 20 6f 76 65 72 20 69 6e 74 6f 0a 2a 2a 20  -1 over into.** 
7d90: 72 65 67 69 73 74 65 72 73 20 50 32 2e 2e 50 32  registers P2..P2
7da0: 2b 50 33 2d 31 2e 20 20 52 65 67 69 73 74 65 72  +P3-1.  Register
7db0: 73 20 50 31 2e 2e 50 31 2b 50 31 2d 31 20 61 72  s P1..P1+P1-1 ar
7dc0: 65 0a 2a 2a 20 6c 65 66 74 20 68 6f 6c 64 69 6e  e.** left holdin
7dd0: 67 20 61 20 4e 55 4c 4c 2e 20 20 49 74 20 69 73  g a NULL.  It is
7de0: 20 61 6e 20 65 72 72 6f 72 20 66 6f 72 20 72 65   an error for re
7df0: 67 69 73 74 65 72 20 72 61 6e 67 65 73 0a 2a 2a  gister ranges.**
7e00: 20 50 31 2e 2e 50 31 2b 50 33 2d 31 20 61 6e 64   P1..P1+P3-1 and
7e10: 20 50 32 2e 2e 50 32 2b 50 33 2d 31 20 74 6f 20   P2..P2+P3-1 to 
7e20: 6f 76 65 72 6c 61 70 2e 0a 2a 2f 0a 63 61 73 65  overlap..*/.case
7e30: 20 4f 50 5f 4d 6f 76 65 3a 20 7b 0a 20 20 63 68   OP_Move: {.  ch
7e40: 61 72 20 2a 7a 4d 61 6c 6c 6f 63 3b 20 20 20 2f  ar *zMalloc;   /
7e50: 2a 20 48 6f 6c 64 69 6e 67 20 76 61 72 69 61 62  * Holding variab
7e60: 6c 65 20 66 6f 72 20 61 6c 6c 6f 63 61 74 65 64  le for allocated
7e70: 20 6d 65 6d 6f 72 79 20 2a 2f 0a 20 20 69 6e 74   memory */.  int
7e80: 20 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a   n;           /*
7e90: 20 4e 75 6d 62 65 72 20 6f 66 20 72 65 67 69 73   Number of regis
7ea0: 74 65 72 73 20 6c 65 66 74 20 74 6f 20 63 6f 70  ters left to cop
7eb0: 79 20 2a 2f 0a 20 20 69 6e 74 20 70 31 3b 20 20  y */.  int p1;  
7ec0: 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73          /* Regis
7ed0: 74 65 72 20 74 6f 20 63 6f 70 79 20 66 72 6f 6d  ter to copy from
7ee0: 20 2a 2f 0a 20 20 69 6e 74 20 70 32 3b 20 20 20   */.  int p2;   
7ef0: 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74         /* Regist
7f00: 65 72 20 74 6f 20 63 6f 70 79 20 74 6f 20 2a 2f  er to copy to */
7f10: 0a 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 33 3b  ..  n = pOp->p3;
7f20: 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b  .  p1 = pOp->p1;
7f30: 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b  .  p2 = pOp->p2;
7f40: 0a 20 20 61 73 73 65 72 74 28 20 6e 3e 30 20 26  .  assert( n>0 &
7f50: 26 20 70 31 3e 30 20 26 26 20 70 32 3e 30 20 29  & p1>0 && p2>0 )
7f60: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 31 2b 6e  ;.  assert( p1+n
7f70: 3c 3d 70 32 20 7c 7c 20 70 32 2b 6e 3c 3d 70 31  <=p2 || p2+n<=p1
7f80: 20 29 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61   );..  pIn1 = &a
7f90: 4d 65 6d 5b 70 31 5d 3b 0a 20 20 70 4f 75 74 20  Mem[p1];.  pOut 
7fa0: 3d 20 26 61 4d 65 6d 5b 70 32 5d 3b 0a 20 20 77  = &aMem[p2];.  w
7fb0: 68 69 6c 65 28 20 6e 2d 2d 20 29 7b 0a 20 20 20  hile( n-- ){.   
7fc0: 20 61 73 73 65 72 74 28 20 70 4f 75 74 3c 3d 26   assert( pOut<=&
7fd0: 61 4d 65 6d 5b 70 2d 3e 6e 4d 65 6d 5d 20 29 3b  aMem[p->nMem] );
7fe0: 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 49 6e  .    assert( pIn
7ff0: 31 3c 3d 26 61 4d 65 6d 5b 70 2d 3e 6e 4d 65 6d  1<=&aMem[p->nMem
8000: 5d 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  ] );.    assert(
8010: 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 49 6e 31   memIsValid(pIn1
8020: 29 20 29 3b 0a 20 20 20 20 6d 65 6d 41 62 6f 75  ) );.    memAbou
8030: 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75  tToChange(p, pOu
8040: 74 29 3b 0a 20 20 20 20 7a 4d 61 6c 6c 6f 63 20  t);.    zMalloc 
8050: 3d 20 70 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f 63 3b  = pOut->zMalloc;
8060: 0a 20 20 20 20 70 4f 75 74 2d 3e 7a 4d 61 6c 6c  .    pOut->zMall
8070: 6f 63 20 3d 20 30 3b 0a 20 20 20 20 73 71 6c 69  oc = 0;.    sqli
8080: 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28 70  te3VdbeMemMove(p
8090: 4f 75 74 2c 20 70 49 6e 31 29 3b 0a 20 20 20 20  Out, pIn1);.    
80a0: 70 49 6e 31 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d 20  pIn1->zMalloc = 
80b0: 7a 4d 61 6c 6c 6f 63 3b 0a 20 20 20 20 52 45 47  zMalloc;.    REG
80c0: 49 53 54 45 52 5f 54 52 41 43 45 28 70 32 2b 2b  ISTER_TRACE(p2++
80d0: 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 70 49 6e  , pOut);.    pIn
80e0: 31 2b 2b 3b 0a 20 20 20 20 70 4f 75 74 2b 2b 3b  1++;.    pOut++;
80f0: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
8100: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 70 79  ./* Opcode: Copy
8110: 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
8120: 2a 2a 20 4d 61 6b 65 20 61 20 63 6f 70 79 20 6f  ** Make a copy o
8130: 66 20 72 65 67 69 73 74 65 72 20 50 31 20 69 6e  f register P1 in
8140: 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  to register P2..
8150: 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72  **.** This instr
8160: 75 63 74 69 6f 6e 20 6d 61 6b 65 73 20 61 20 64  uction makes a d
8170: 65 65 70 20 63 6f 70 79 20 6f 66 20 74 68 65 20  eep copy of the 
8180: 76 61 6c 75 65 2e 20 20 41 20 64 75 70 6c 69 63  value.  A duplic
8190: 61 74 65 0a 2a 2a 20 69 73 20 6d 61 64 65 20 6f  ate.** is made o
81a0: 66 20 61 6e 79 20 73 74 72 69 6e 67 20 6f 72 20  f any string or 
81b0: 62 6c 6f 62 20 63 6f 6e 73 74 61 6e 74 2e 20 20  blob constant.  
81c0: 53 65 65 20 61 6c 73 6f 20 4f 50 5f 53 43 6f 70  See also OP_SCop
81d0: 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f  y..*/.case OP_Co
81e0: 70 79 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  py: {           
81f0: 20 20 2f 2a 20 69 6e 31 2c 20 6f 75 74 32 20 2a    /* in1, out2 *
8200: 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
8210: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75  [pOp->p1];.  pOu
8220: 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
8230: 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  2];.  assert( pO
8240: 75 74 21 3d 70 49 6e 31 20 29 3b 0a 20 20 73 71  ut!=pIn1 );.  sq
8250: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c  lite3VdbeMemShal
8260: 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20 70 49  lowCopy(pOut, pI
8270: 6e 31 2c 20 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a  n1, MEM_Ephem);.
8280: 20 20 44 65 65 70 68 65 6d 65 72 61 6c 69 7a 65    Deephemeralize
8290: 28 70 4f 75 74 29 3b 0a 20 20 52 45 47 49 53 54  (pOut);.  REGIST
82a0: 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32  ER_TRACE(pOp->p2
82b0: 2c 20 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b  , pOut);.  break
82c0: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
82d0: 53 43 6f 70 79 20 50 31 20 50 32 20 2a 20 2a 20  SCopy P1 P2 * * 
82e0: 2a 0a 2a 2a 0a 2a 2a 20 4d 61 6b 65 20 61 20 73  *.**.** Make a s
82f0: 68 61 6c 6c 6f 77 20 63 6f 70 79 20 6f 66 20 72  hallow copy of r
8300: 65 67 69 73 74 65 72 20 50 31 20 69 6e 74 6f 20  egister P1 into 
8310: 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a  register P2..**.
8320: 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74  ** This instruct
8330: 69 6f 6e 20 6d 61 6b 65 73 20 61 20 73 68 61 6c  ion makes a shal
8340: 6c 6f 77 20 63 6f 70 79 20 6f 66 20 74 68 65 20  low copy of the 
8350: 76 61 6c 75 65 2e 20 20 49 66 20 74 68 65 20 76  value.  If the v
8360: 61 6c 75 65 0a 2a 2a 20 69 73 20 61 20 73 74 72  alue.** is a str
8370: 69 6e 67 20 6f 72 20 62 6c 6f 62 2c 20 74 68 65  ing or blob, the
8380: 6e 20 74 68 65 20 63 6f 70 79 20 69 73 20 6f 6e  n the copy is on
8390: 6c 79 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  ly a pointer to 
83a0: 74 68 65 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c 20  the.** original 
83b0: 61 6e 64 20 68 65 6e 63 65 20 69 66 20 74 68 65  and hence if the
83c0: 20 6f 72 69 67 69 6e 61 6c 20 63 68 61 6e 67 65   original change
83d0: 73 20 73 6f 20 77 69 6c 6c 20 74 68 65 20 63 6f  s so will the co
83e0: 70 79 2e 0a 2a 2a 20 57 6f 72 73 65 2c 20 69 66  py..** Worse, if
83f0: 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 69 73   the original is
8400: 20 64 65 61 6c 6c 6f 63 61 74 65 64 2c 20 74 68   deallocated, th
8410: 65 20 63 6f 70 79 20 62 65 63 6f 6d 65 73 20 69  e copy becomes i
8420: 6e 76 61 6c 69 64 2e 0a 2a 2a 20 54 68 75 73 20  nvalid..** Thus 
8430: 74 68 65 20 70 72 6f 67 72 61 6d 20 6d 75 73 74  the program must
8440: 20 67 75 61 72 61 6e 74 65 65 20 74 68 61 74 20   guarantee that 
8450: 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 77 69 6c  the original wil
8460: 6c 20 6e 6f 74 20 63 68 61 6e 67 65 0a 2a 2a 20  l not change.** 
8470: 64 75 72 69 6e 67 20 74 68 65 20 6c 69 66 65 74  during the lifet
8480: 69 6d 65 20 6f 66 20 74 68 65 20 63 6f 70 79 2e  ime of the copy.
8490: 20 20 55 73 65 20 4f 50 5f 43 6f 70 79 20 74 6f    Use OP_Copy to
84a0: 20 6d 61 6b 65 20 61 20 63 6f 6d 70 6c 65 74 65   make a complete
84b0: 0a 2a 2a 20 63 6f 70 79 2e 0a 2a 2f 0a 63 61 73  .** copy..*/.cas
84c0: 65 20 4f 50 5f 53 43 6f 70 79 3a 20 7b 20 20 20  e OP_SCopy: {   
84d0: 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 2c           /* in1,
84e0: 20 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e 31 20   out2 */.  pIn1 
84f0: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
8500: 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d  ;.  pOut = &aMem
8510: 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73  [pOp->p2];.  ass
8520: 65 72 74 28 20 70 4f 75 74 21 3d 70 49 6e 31 20  ert( pOut!=pIn1 
8530: 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  );.  sqlite3Vdbe
8540: 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70  MemShallowCopy(p
8550: 4f 75 74 2c 20 70 49 6e 31 2c 20 4d 45 4d 5f 45  Out, pIn1, MEM_E
8560: 70 68 65 6d 29 3b 0a 23 69 66 64 65 66 20 53 51  phem);.#ifdef SQ
8570: 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69 66 28  LITE_DEBUG.  if(
8580: 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f   pOut->pScopyFro
8590: 6d 3d 3d 30 20 29 20 70 4f 75 74 2d 3e 70 53 63  m==0 ) pOut->pSc
85a0: 6f 70 79 46 72 6f 6d 20 3d 20 70 49 6e 31 3b 0a  opyFrom = pIn1;.
85b0: 23 65 6e 64 69 66 0a 20 20 52 45 47 49 53 54 45  #endif.  REGISTE
85c0: 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c  R_TRACE(pOp->p2,
85d0: 20 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b   pOut);.  break;
85e0: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  .}../* Opcode: R
85f0: 65 73 75 6c 74 52 6f 77 20 50 31 20 50 32 20 2a  esultRow P1 P2 *
8600: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72   * *.**.** The r
8610: 65 67 69 73 74 65 72 73 20 50 31 20 74 68 72 6f  egisters P1 thro
8620: 75 67 68 20 50 31 2b 50 32 2d 31 20 63 6f 6e 74  ugh P1+P2-1 cont
8630: 61 69 6e 20 61 20 73 69 6e 67 6c 65 20 72 6f 77  ain a single row
8640: 20 6f 66 0a 2a 2a 20 72 65 73 75 6c 74 73 2e 20   of.** results. 
8650: 54 68 69 73 20 6f 70 63 6f 64 65 20 63 61 75 73  This opcode caus
8660: 65 73 20 74 68 65 20 73 71 6c 69 74 65 33 5f 73  es the sqlite3_s
8670: 74 65 70 28 29 20 63 61 6c 6c 20 74 6f 20 74 65  tep() call to te
8680: 72 6d 69 6e 61 74 65 0a 2a 2a 20 77 69 74 68 20  rminate.** with 
8690: 61 6e 20 53 51 4c 49 54 45 5f 52 4f 57 20 72 65  an SQLITE_ROW re
86a0: 74 75 72 6e 20 63 6f 64 65 20 61 6e 64 20 69 74  turn code and it
86b0: 20 73 65 74 73 20 75 70 20 74 68 65 20 73 71 6c   sets up the sql
86c0: 69 74 65 33 5f 73 74 6d 74 0a 2a 2a 20 73 74 72  ite3_stmt.** str
86d0: 75 63 74 75 72 65 20 74 6f 20 70 72 6f 76 69 64  ucture to provid
86e0: 65 20 61 63 63 65 73 73 20 74 6f 20 74 68 65 20  e access to the 
86f0: 74 6f 70 20 50 31 20 76 61 6c 75 65 73 20 61 73  top P1 values as
8700: 20 74 68 65 20 72 65 73 75 6c 74 0a 2a 2a 20 72   the result.** r
8710: 6f 77 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  ow..*/.case OP_R
8720: 65 73 75 6c 74 52 6f 77 3a 20 7b 0a 20 20 4d 65  esultRow: {.  Me
8730: 6d 20 2a 70 4d 65 6d 3b 0a 20 20 69 6e 74 20 69  m *pMem;.  int i
8740: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 6e  ;.  assert( p->n
8750: 52 65 73 43 6f 6c 75 6d 6e 3d 3d 70 4f 70 2d 3e  ResColumn==pOp->
8760: 70 32 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  p2 );.  assert( 
8770: 70 4f 70 2d 3e 70 31 3e 30 20 29 3b 0a 20 20 61  pOp->p1>0 );.  a
8780: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 2b 70  ssert( pOp->p1+p
8790: 4f 70 2d 3e 70 32 3c 3d 70 2d 3e 6e 4d 65 6d 2b  Op->p2<=p->nMem+
87a0: 31 20 29 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68  1 );..  /* If th
87b0: 69 73 20 73 74 61 74 65 6d 65 6e 74 20 68 61 73  is statement has
87c0: 20 76 69 6f 6c 61 74 65 64 20 69 6d 6d 65 64 69   violated immedi
87d0: 61 74 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  ate foreign key 
87e0: 63 6f 6e 73 74 72 61 69 6e 74 73 2c 20 64 6f 0a  constraints, do.
87f0: 20 20 2a 2a 20 6e 6f 74 20 72 65 74 75 72 6e 20    ** not return 
8800: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f  the number of ro
8810: 77 73 20 6d 6f 64 69 66 69 65 64 2e 20 41 6e 64  ws modified. And
8820: 20 64 6f 20 6e 6f 74 20 52 45 4c 45 41 53 45 20   do not RELEASE 
8830: 74 68 65 20 73 74 61 74 65 6d 65 6e 74 0a 20 20  the statement.  
8840: 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20  ** transaction. 
8850: 49 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20 72  It needs to be r
8860: 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20 2a 2f 0a  olled back.  */.
8870: 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b 21    if( SQLITE_OK!
8880: 3d 28 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64  =(rc = sqlite3Vd
8890: 62 65 43 68 65 63 6b 46 6b 28 70 2c 20 30 29 29  beCheckFk(p, 0))
88a0: 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
88b0: 64 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54 45  db->flags&SQLITE
88c0: 5f 43 6f 75 6e 74 52 6f 77 73 20 29 3b 0a 20 20  _CountRows );.  
88d0: 20 20 61 73 73 65 72 74 28 20 70 2d 3e 75 73 65    assert( p->use
88e0: 73 53 74 6d 74 4a 6f 75 72 6e 61 6c 20 29 3b 0a  sStmtJournal );.
88f0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a      break;.  }..
8900: 20 20 2f 2a 20 49 66 20 74 68 65 20 53 51 4c 49    /* If the SQLI
8910: 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20 66 6c 61  TE_CountRows fla
8920: 67 20 69 73 20 73 65 74 20 69 6e 20 73 71 6c 69  g is set in sqli
8930: 74 65 33 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20  te3.flags mask, 
8940: 74 68 65 6e 20 0a 20 20 2a 2a 20 44 4d 4c 20 73  then .  ** DML s
8950: 74 61 74 65 6d 65 6e 74 73 20 69 6e 76 6f 6b 65  tatements invoke
8960: 20 74 68 69 73 20 6f 70 63 6f 64 65 20 74 6f 20   this opcode to 
8970: 72 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65  return the numbe
8980: 72 20 6f 66 20 72 6f 77 73 20 0a 20 20 2a 2a 20  r of rows .  ** 
8990: 6d 6f 64 69 66 69 65 64 20 74 6f 20 74 68 65 20  modified to the 
89a0: 75 73 65 72 2e 20 54 68 69 73 20 69 73 20 74 68  user. This is th
89b0: 65 20 6f 6e 6c 79 20 77 61 79 20 74 68 61 74 20  e only way that 
89c0: 61 20 56 4d 20 74 68 61 74 0a 20 20 2a 2a 20 6f  a VM that.  ** o
89d0: 70 65 6e 73 20 61 20 73 74 61 74 65 6d 65 6e 74  pens a statement
89e0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 61 79   transaction may
89f0: 20 69 6e 76 6f 6b 65 20 74 68 69 73 20 6f 70 63   invoke this opc
8a00: 6f 64 65 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49  ode..  **.  ** I
8a10: 6e 20 63 61 73 65 20 74 68 69 73 20 69 73 20 73  n case this is s
8a20: 75 63 68 20 61 20 73 74 61 74 65 6d 65 6e 74 2c  uch a statement,
8a30: 20 63 6c 6f 73 65 20 61 6e 79 20 73 74 61 74 65   close any state
8a40: 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  ment transaction
8a50: 0a 20 20 2a 2a 20 6f 70 65 6e 65 64 20 62 79 20  .  ** opened by 
8a60: 74 68 69 73 20 56 4d 20 62 65 66 6f 72 65 20 72  this VM before r
8a70: 65 74 75 72 6e 69 6e 67 20 63 6f 6e 74 72 6f 6c  eturning control
8a80: 20 74 6f 20 74 68 65 20 75 73 65 72 2e 20 54 68   to the user. Th
8a90: 69 73 20 69 73 20 74 6f 0a 20 20 2a 2a 20 65 6e  is is to.  ** en
8aa0: 73 75 72 65 20 74 68 61 74 20 73 74 61 74 65 6d  sure that statem
8ab0: 65 6e 74 2d 74 72 61 6e 73 61 63 74 69 6f 6e 73  ent-transactions
8ac0: 20 61 72 65 20 61 6c 77 61 79 73 20 6e 65 73 74   are always nest
8ad0: 65 64 2c 20 6e 6f 74 20 6f 76 65 72 6c 61 70 70  ed, not overlapp
8ae0: 69 6e 67 2e 0a 20 20 2a 2a 20 49 66 20 74 68 65  ing..  ** If the
8af0: 20 6f 70 65 6e 20 73 74 61 74 65 6d 65 6e 74 2d   open statement-
8b00: 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e  transaction is n
8b10: 6f 74 20 63 6c 6f 73 65 64 20 68 65 72 65 2c 20  ot closed here, 
8b20: 74 68 65 6e 20 74 68 65 20 75 73 65 72 0a 20 20  then the user.  
8b30: 2a 2a 20 6d 61 79 20 73 74 65 70 20 61 6e 6f 74  ** may step anot
8b40: 68 65 72 20 56 4d 20 74 68 61 74 20 6f 70 65 6e  her VM that open
8b50: 73 20 69 74 73 20 6f 77 6e 20 73 74 61 74 65 6d  s its own statem
8b60: 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e  ent transaction.
8b70: 20 54 68 69 73 0a 20 20 2a 2a 20 6d 61 79 20 6c   This.  ** may l
8b80: 65 61 64 20 74 6f 20 6f 76 65 72 6c 61 70 70 69  ead to overlappi
8b90: 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61  ng statement tra
8ba0: 6e 73 61 63 74 69 6f 6e 73 2e 0a 20 20 2a 2a 0a  nsactions..  **.
8bb0: 20 20 2a 2a 20 54 68 65 20 73 74 61 74 65 6d 65    ** The stateme
8bc0: 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  nt transaction i
8bd0: 73 20 6e 65 76 65 72 20 61 20 74 6f 70 2d 6c 65  s never a top-le
8be0: 76 65 6c 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e  vel transaction.
8bf0: 20 20 48 65 6e 63 65 0a 20 20 2a 2a 20 74 68 65    Hence.  ** the
8c00: 20 52 45 4c 45 41 53 45 20 63 61 6c 6c 20 62 65   RELEASE call be
8c10: 6c 6f 77 20 63 61 6e 20 6e 65 76 65 72 20 66 61  low can never fa
8c20: 69 6c 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72  il..  */.  asser
8c30: 74 28 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74  t( p->iStatement
8c40: 3d 3d 30 20 7c 7c 20 64 62 2d 3e 66 6c 61 67 73  ==0 || db->flags
8c50: 26 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77  &SQLITE_CountRow
8c60: 73 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  s );.  rc = sqli
8c70: 74 65 33 56 64 62 65 43 6c 6f 73 65 53 74 61 74  te3VdbeCloseStat
8c80: 65 6d 65 6e 74 28 70 2c 20 53 41 56 45 50 4f 49  ement(p, SAVEPOI
8c90: 4e 54 5f 52 45 4c 45 41 53 45 29 3b 0a 20 20 69  NT_RELEASE);.  i
8ca0: 66 28 20 4e 45 56 45 52 28 72 63 21 3d 53 51 4c  f( NEVER(rc!=SQL
8cb0: 49 54 45 5f 4f 4b 29 20 29 7b 0a 20 20 20 20 62  ITE_OK) ){.    b
8cc0: 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20  reak;.  }..  /* 
8cd0: 49 6e 76 61 6c 69 64 61 74 65 20 61 6c 6c 20 65  Invalidate all e
8ce0: 70 68 65 6d 65 72 61 6c 20 63 75 72 73 6f 72 20  phemeral cursor 
8cf0: 72 6f 77 20 63 61 63 68 65 73 20 2a 2f 0a 20 20  row caches */.  
8d00: 70 2d 3e 63 61 63 68 65 43 74 72 20 3d 20 28 70  p->cacheCtr = (p
8d10: 2d 3e 63 61 63 68 65 43 74 72 20 2b 20 32 29 7c  ->cacheCtr + 2)|
8d20: 31 3b 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20 73 75  1;..  /* Make su
8d30: 72 65 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f  re the results o
8d40: 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f  f the current ro
8d50: 77 20 61 72 65 20 5c 30 30 30 20 74 65 72 6d 69  w are \000 termi
8d60: 6e 61 74 65 64 0a 20 20 2a 2a 20 61 6e 64 20 68  nated.  ** and h
8d70: 61 76 65 20 61 6e 20 61 73 73 69 67 6e 65 64 20  ave an assigned 
8d80: 74 79 70 65 2e 20 20 54 68 65 20 72 65 73 75 6c  type.  The resul
8d90: 74 73 20 61 72 65 20 64 65 2d 65 70 68 65 6d 65  ts are de-epheme
8da0: 72 61 6c 69 7a 65 64 20 61 73 0a 20 20 2a 2a 20  ralized as.  ** 
8db0: 61 73 20 73 69 64 65 20 65 66 66 65 63 74 2e 0a  as side effect..
8dc0: 20 20 2a 2f 0a 20 20 70 4d 65 6d 20 3d 20 70 2d    */.  pMem = p-
8dd0: 3e 70 52 65 73 75 6c 74 53 65 74 20 3d 20 26 61  >pResultSet = &a
8de0: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
8df0: 66 6f 72 28 69 3d 30 3b 20 69 3c 70 4f 70 2d 3e  for(i=0; i<pOp->
8e00: 70 32 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 61 73  p2; i++){.    as
8e10: 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
8e20: 28 26 70 4d 65 6d 5b 69 5d 29 20 29 3b 0a 20 20  (&pMem[i]) );.  
8e30: 20 20 44 65 65 70 68 65 6d 65 72 61 6c 69 7a 65    Deephemeralize
8e40: 28 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 20 20  (&pMem[i]);.    
8e50: 61 73 73 65 72 74 28 20 28 70 4d 65 6d 5b 69 5d  assert( (pMem[i]
8e60: 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 45 70 68  .flags & MEM_Eph
8e70: 65 6d 29 3d 3d 30 0a 20 20 20 20 20 20 20 20 20  em)==0.         
8e80: 20 20 20 7c 7c 20 28 70 4d 65 6d 5b 69 5d 2e 66     || (pMem[i].f
8e90: 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c  lags & (MEM_Str|
8ea0: 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 29 3b  MEM_Blob))==0 );
8eb0: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
8ec0: 4d 65 6d 4e 75 6c 54 65 72 6d 69 6e 61 74 65 28  MemNulTerminate(
8ed0: 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 20 20 73  &pMem[i]);.    s
8ee0: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74 6f  qlite3VdbeMemSto
8ef0: 72 65 54 79 70 65 28 26 70 4d 65 6d 5b 69 5d 29  reType(&pMem[i])
8f00: 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54  ;.    REGISTER_T
8f10: 52 41 43 45 28 70 4f 70 2d 3e 70 31 2b 69 2c 20  RACE(pOp->p1+i, 
8f20: 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 7d 0a 20  &pMem[i]);.  }. 
8f30: 20 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46   if( db->mallocF
8f40: 61 69 6c 65 64 20 29 20 67 6f 74 6f 20 6e 6f 5f  ailed ) goto no_
8f50: 6d 65 6d 3b 0a 0a 20 20 2f 2a 20 52 65 74 75 72  mem;..  /* Retur
8f60: 6e 20 53 51 4c 49 54 45 5f 52 4f 57 0a 20 20 2a  n SQLITE_ROW.  *
8f70: 2f 0a 20 20 70 2d 3e 70 63 20 3d 20 70 63 20 2b  /.  p->pc = pc +
8f80: 20 31 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49 54   1;.  rc = SQLIT
8f90: 45 5f 52 4f 57 3b 0a 20 20 67 6f 74 6f 20 76 64  E_ROW;.  goto vd
8fa0: 62 65 5f 72 65 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a  be_return;.}../*
8fb0: 20 4f 70 63 6f 64 65 3a 20 43 6f 6e 63 61 74 20   Opcode: Concat 
8fc0: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
8fd0: 2a 2a 20 41 64 64 20 74 68 65 20 74 65 78 74 20  ** Add the text 
8fe0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 6f  in register P1 o
8ff0: 6e 74 6f 20 74 68 65 20 65 6e 64 20 6f 66 20 74  nto the end of t
9000: 68 65 20 74 65 78 74 20 69 6e 0a 2a 2a 20 72 65  he text in.** re
9010: 67 69 73 74 65 72 20 50 32 20 61 6e 64 20 73 74  gister P2 and st
9020: 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69  ore the result i
9030: 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  n register P3..*
9040: 2a 20 49 66 20 65 69 74 68 65 72 20 74 68 65 20  * If either the 
9050: 50 31 20 6f 72 20 50 32 20 74 65 78 74 20 61 72  P1 or P2 text ar
9060: 65 20 4e 55 4c 4c 20 74 68 65 6e 20 73 74 6f 72  e NULL then stor
9070: 65 20 4e 55 4c 4c 20 69 6e 20 50 33 2e 0a 2a 2a  e NULL in P3..**
9080: 0a 2a 2a 20 20 20 50 33 20 3d 20 50 32 20 7c 7c  .**   P3 = P2 ||
9090: 20 50 31 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73 20   P1.**.** It is 
90a0: 69 6c 6c 65 67 61 6c 20 66 6f 72 20 50 31 20 61  illegal for P1 a
90b0: 6e 64 20 50 33 20 74 6f 20 62 65 20 74 68 65 20  nd P3 to be the 
90c0: 73 61 6d 65 20 72 65 67 69 73 74 65 72 2e 20 53  same register. S
90d0: 6f 6d 65 74 69 6d 65 73 2c 0a 2a 2a 20 69 66 20  ometimes,.** if 
90e0: 50 33 20 69 73 20 74 68 65 20 73 61 6d 65 20 72  P3 is the same r
90f0: 65 67 69 73 74 65 72 20 61 73 20 50 32 2c 20 74  egister as P2, t
9100: 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  he implementatio
9110: 6e 20 69 73 20 61 62 6c 65 0a 2a 2a 20 74 6f 20  n is able.** to 
9120: 61 76 6f 69 64 20 61 20 6d 65 6d 63 70 79 28 29  avoid a memcpy()
9130: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6e  ..*/.case OP_Con
9140: 63 61 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20  cat: {          
9150: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 43   /* same as TK_C
9160: 4f 4e 43 41 54 2c 20 69 6e 31 2c 20 69 6e 32 2c  ONCAT, in1, in2,
9170: 20 6f 75 74 33 20 2a 2f 0a 20 20 69 36 34 20 6e   out3 */.  i64 n
9180: 42 79 74 65 3b 0a 0a 20 20 70 49 6e 31 20 3d 20  Byte;..  pIn1 = 
9190: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
91a0: 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70    pIn2 = &aMem[p
91b0: 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70 4f 75 74 20  Op->p2];.  pOut 
91c0: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
91d0: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 31  ;.  assert( pIn1
91e0: 21 3d 70 4f 75 74 20 29 3b 0a 20 20 69 66 28 20  !=pOut );.  if( 
91f0: 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70  (pIn1->flags | p
9200: 49 6e 32 2d 3e 66 6c 61 67 73 29 20 26 20 4d 45  In2->flags) & ME
9210: 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 73 71  M_Null ){.    sq
9220: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e  lite3VdbeMemSetN
9230: 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 20 20 62  ull(pOut);.    b
9240: 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 69 66 28 20  reak;.  }.  if( 
9250: 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 31 29  ExpandBlob(pIn1)
9260: 20 7c 7c 20 45 78 70 61 6e 64 42 6c 6f 62 28 70   || ExpandBlob(p
9270: 49 6e 32 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  In2) ) goto no_m
9280: 65 6d 3b 0a 20 20 53 74 72 69 6e 67 69 66 79 28  em;.  Stringify(
9290: 70 49 6e 31 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  pIn1, encoding);
92a0: 0a 20 20 53 74 72 69 6e 67 69 66 79 28 70 49 6e  .  Stringify(pIn
92b0: 32 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20  2, encoding);.  
92c0: 6e 42 79 74 65 20 3d 20 70 49 6e 31 2d 3e 6e 20  nByte = pIn1->n 
92d0: 2b 20 70 49 6e 32 2d 3e 6e 3b 0a 20 20 69 66 28  + pIn2->n;.  if(
92e0: 20 6e 42 79 74 65 3e 64 62 2d 3e 61 4c 69 6d 69   nByte>db->aLimi
92f0: 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c  t[SQLITE_LIMIT_L
9300: 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f  ENGTH] ){.    go
9310: 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a  to too_big;.  }.
9320: 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
9330: 28 70 4f 75 74 2c 20 4d 45 4d 5f 53 74 72 29 3b  (pOut, MEM_Str);
9340: 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64  .  if( sqlite3Vd
9350: 62 65 4d 65 6d 47 72 6f 77 28 70 4f 75 74 2c 20  beMemGrow(pOut, 
9360: 28 69 6e 74 29 6e 42 79 74 65 2b 32 2c 20 70 4f  (int)nByte+2, pO
9370: 75 74 3d 3d 70 49 6e 32 29 20 29 7b 0a 20 20 20  ut==pIn2) ){.   
9380: 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
9390: 7d 0a 20 20 69 66 28 20 70 4f 75 74 21 3d 70 49  }.  if( pOut!=pI
93a0: 6e 32 20 29 7b 0a 20 20 20 20 6d 65 6d 63 70 79  n2 ){.    memcpy
93b0: 28 70 4f 75 74 2d 3e 7a 2c 20 70 49 6e 32 2d 3e  (pOut->z, pIn2->
93c0: 7a 2c 20 70 49 6e 32 2d 3e 6e 29 3b 0a 20 20 7d  z, pIn2->n);.  }
93d0: 0a 20 20 6d 65 6d 63 70 79 28 26 70 4f 75 74 2d  .  memcpy(&pOut-
93e0: 3e 7a 5b 70 49 6e 32 2d 3e 6e 5d 2c 20 70 49 6e  >z[pIn2->n], pIn
93f0: 31 2d 3e 7a 2c 20 70 49 6e 31 2d 3e 6e 29 3b 0a  1->z, pIn1->n);.
9400: 20 20 70 4f 75 74 2d 3e 7a 5b 6e 42 79 74 65 5d    pOut->z[nByte]
9410: 20 3d 20 30 3b 0a 20 20 70 4f 75 74 2d 3e 7a 5b   = 0;.  pOut->z[
9420: 6e 42 79 74 65 2b 31 5d 20 3d 20 30 3b 0a 20 20  nByte+1] = 0;.  
9430: 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d  pOut->flags |= M
9440: 45 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f 75 74 2d  EM_Term;.  pOut-
9450: 3e 6e 20 3d 20 28 69 6e 74 29 6e 42 79 74 65 3b  >n = (int)nByte;
9460: 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 65  .  pOut->enc = e
9470: 6e 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44 41 54  ncoding;.  UPDAT
9480: 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70  E_MAX_BLOBSIZE(p
9490: 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Out);.  break;.}
94a0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 64 64  ../* Opcode: Add
94b0: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
94c0: 0a 2a 2a 20 41 64 64 20 74 68 65 20 76 61 6c 75  .** Add the valu
94d0: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
94e0: 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 69 6e   to the value in
94f0: 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20   register P2.** 
9500: 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65  and store the re
9510: 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72  sult in register
9520: 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65   P3..** If eithe
9530: 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c  r input is NULL,
9540: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e   the result is N
9550: 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ULL..*/./* Opcod
9560: 65 3a 20 4d 75 6c 74 69 70 6c 79 20 50 31 20 50  e: Multiply P1 P
9570: 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 0a 2a  2 P3 * *.**.**.*
9580: 2a 20 4d 75 6c 74 69 70 6c 79 20 74 68 65 20 76  * Multiply the v
9590: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
95a0: 20 50 31 20 62 79 20 74 68 65 20 76 61 6c 75 65   P1 by the value
95b0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a   in register P2.
95c0: 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65  ** and store the
95d0: 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73   result in regis
95e0: 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69  ter P3..** If ei
95f0: 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55  ther input is NU
9600: 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69  LL, the result i
9610: 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70  s NULL..*/./* Op
9620: 63 6f 64 65 3a 20 53 75 62 74 72 61 63 74 20 50  code: Subtract P
9630: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
9640: 2a 20 53 75 62 74 72 61 63 74 20 74 68 65 20 76  * Subtract the v
9650: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
9660: 20 50 31 20 66 72 6f 6d 20 74 68 65 20 76 61 6c   P1 from the val
9670: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
9680: 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20 74  2.** and store t
9690: 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67  he result in reg
96a0: 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20  ister P3..** If 
96b0: 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20  either input is 
96c0: 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74  NULL, the result
96d0: 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20   is NULL..*/./* 
96e0: 4f 70 63 6f 64 65 3a 20 44 69 76 69 64 65 20 50  Opcode: Divide P
96f0: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
9700: 2a 20 44 69 76 69 64 65 20 74 68 65 20 76 61 6c  * Divide the val
9710: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
9720: 31 20 62 79 20 74 68 65 20 76 61 6c 75 65 20 69  1 by the value i
9730: 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a  n register P2.**
9740: 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72   and store the r
9750: 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65  esult in registe
9760: 72 20 50 33 20 28 50 33 3d 50 32 2f 50 31 29 2e  r P3 (P3=P2/P1).
9770: 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e   If the value in
9780: 20 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31   .** register P1
9790: 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 6e 20 74   is zero, then t
97a0: 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c  he result is NUL
97b0: 4c 2e 20 49 66 20 65 69 74 68 65 72 20 69 6e 70  L. If either inp
97c0: 75 74 20 69 73 20 0a 2a 2a 20 4e 55 4c 4c 2c 20  ut is .** NULL, 
97d0: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
97e0: 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  LL..*/./* Opcode
97f0: 3a 20 52 65 6d 61 69 6e 64 65 72 20 50 31 20 50  : Remainder P1 P
9800: 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43  2 P3 * *.**.** C
9810: 6f 6d 70 75 74 65 20 74 68 65 20 72 65 6d 61 69  ompute the remai
9820: 6e 64 65 72 20 61 66 74 65 72 20 69 6e 74 65 67  nder after integ
9830: 65 72 20 64 69 76 69 73 69 6f 6e 20 6f 66 20 74  er division of t
9840: 68 65 20 76 61 6c 75 65 20 69 6e 0a 2a 2a 20 72  he value in.** r
9850: 65 67 69 73 74 65 72 20 50 31 20 62 79 20 74 68  egister P1 by th
9860: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
9870: 74 65 72 20 50 32 20 61 6e 64 20 73 74 6f 72 65  ter P2 and store
9880: 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 50   the result in P
9890: 33 2e 20 0a 2a 2a 20 49 66 20 74 68 65 20 76 61  3. .** If the va
98a0: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
98b0: 50 32 20 69 73 20 7a 65 72 6f 20 74 68 65 20 72  P2 is zero the r
98c0: 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a  esult is NULL..*
98d0: 2a 20 49 66 20 65 69 74 68 65 72 20 6f 70 65 72  * If either oper
98e0: 61 6e 64 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65  and is NULL, the
98f0: 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e   result is NULL.
9900: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 64 64 3a  .*/.case OP_Add:
9910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9920: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
9930: 5f 50 4c 55 53 2c 20 69 6e 31 2c 20 69 6e 32 2c  _PLUS, in1, in2,
9940: 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50   out3 */.case OP
9950: 5f 53 75 62 74 72 61 63 74 3a 20 20 20 20 20 20  _Subtract:      
9960: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
9970: 61 73 20 54 4b 5f 4d 49 4e 55 53 2c 20 69 6e 31  as TK_MINUS, in1
9980: 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63  , in2, out3 */.c
9990: 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a  ase OP_Multiply:
99a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
99b0: 20 73 61 6d 65 20 61 73 20 54 4b 5f 53 54 41 52   same as TK_STAR
99c0: 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33  , in1, in2, out3
99d0: 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 69 76 69   */.case OP_Divi
99e0: 64 65 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  de:             
99f0: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
9a00: 5f 53 4c 41 53 48 2c 20 69 6e 31 2c 20 69 6e 32  _SLASH, in1, in2
9a10: 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f  , out3 */.case O
9a20: 50 5f 52 65 6d 61 69 6e 64 65 72 3a 20 7b 20 20  P_Remainder: {  
9a30: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
9a40: 20 61 73 20 54 4b 5f 52 45 4d 2c 20 69 6e 31 2c   as TK_REM, in1,
9a50: 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20   in2, out3 */.  
9a60: 69 6e 74 20 66 6c 61 67 73 3b 20 20 20 20 20 20  int flags;      
9a70: 2f 2a 20 43 6f 6d 62 69 6e 65 64 20 4d 45 4d 5f  /* Combined MEM_
9a80: 2a 20 66 6c 61 67 73 20 66 72 6f 6d 20 62 6f 74  * flags from bot
9a90: 68 20 69 6e 70 75 74 73 20 2a 2f 0a 20 20 69 36  h inputs */.  i6
9aa0: 34 20 69 41 3b 20 20 20 20 20 20 20 20 20 2f 2a  4 iA;         /*
9ab0: 20 49 6e 74 65 67 65 72 20 76 61 6c 75 65 20 6f   Integer value o
9ac0: 66 20 6c 65 66 74 20 6f 70 65 72 61 6e 64 20 2a  f left operand *
9ad0: 2f 0a 20 20 69 36 34 20 69 42 3b 20 20 20 20 20  /.  i64 iB;     
9ae0: 20 20 20 20 2f 2a 20 49 6e 74 65 67 65 72 20 76      /* Integer v
9af0: 61 6c 75 65 20 6f 66 20 72 69 67 68 74 20 6f 70  alue of right op
9b00: 65 72 61 6e 64 20 2a 2f 0a 20 20 64 6f 75 62 6c  erand */.  doubl
9b10: 65 20 72 41 3b 20 20 20 20 20 20 2f 2a 20 52 65  e rA;      /* Re
9b20: 61 6c 20 76 61 6c 75 65 20 6f 66 20 6c 65 66 74  al value of left
9b30: 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 64 6f   operand */.  do
9b40: 75 62 6c 65 20 72 42 3b 20 20 20 20 20 20 2f 2a  uble rB;      /*
9b50: 20 52 65 61 6c 20 76 61 6c 75 65 20 6f 66 20 72   Real value of r
9b60: 69 67 68 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a  ight operand */.
9b70: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
9b80: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 70 70 6c  pOp->p1];.  appl
9b90: 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79  yNumericAffinity
9ba0: 28 70 49 6e 31 29 3b 0a 20 20 70 49 6e 32 20 3d  (pIn1);.  pIn2 =
9bb0: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
9bc0: 0a 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41  .  applyNumericA
9bd0: 66 66 69 6e 69 74 79 28 70 49 6e 32 29 3b 0a 20  ffinity(pIn2);. 
9be0: 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f   pOut = &aMem[pO
9bf0: 70 2d 3e 70 33 5d 3b 0a 20 20 66 6c 61 67 73 20  p->p3];.  flags 
9c00: 3d 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20  = pIn1->flags | 
9c10: 70 49 6e 32 2d 3e 66 6c 61 67 73 3b 0a 20 20 69  pIn2->flags;.  i
9c20: 66 28 20 28 66 6c 61 67 73 20 26 20 4d 45 4d 5f  f( (flags & MEM_
9c30: 4e 75 6c 6c 29 21 3d 30 20 29 20 67 6f 74 6f 20  Null)!=0 ) goto 
9c40: 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c  arithmetic_resul
9c50: 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 69 66 28  t_is_null;.  if(
9c60: 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
9c70: 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn2->flags & ME
9c80: 4d 5f 49 6e 74 29 3d 3d 4d 45 4d 5f 49 6e 74 20  M_Int)==MEM_Int 
9c90: 29 7b 0a 20 20 20 20 69 41 20 3d 20 70 49 6e 31  ){.    iA = pIn1
9ca0: 2d 3e 75 2e 69 3b 0a 20 20 20 20 69 42 20 3d 20  ->u.i;.    iB = 
9cb0: 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20 20 20 73  pIn2->u.i;.    s
9cc0: 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f  witch( pOp->opco
9cd0: 64 65 20 29 7b 0a 20 20 20 20 20 20 63 61 73 65  de ){.      case
9ce0: 20 4f 50 5f 41 64 64 3a 20 20 20 20 20 20 20 69   OP_Add:       i
9cf0: 66 28 20 73 71 6c 69 74 65 33 41 64 64 49 6e 74  f( sqlite3AddInt
9d00: 36 34 28 26 69 42 2c 69 41 29 20 29 20 67 6f 74  64(&iB,iA) ) got
9d10: 6f 20 66 70 5f 6d 61 74 68 3b 20 20 62 72 65 61  o fp_math;  brea
9d20: 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50  k;.      case OP
9d30: 5f 53 75 62 74 72 61 63 74 3a 20 20 69 66 28 20  _Subtract:  if( 
9d40: 73 71 6c 69 74 65 33 53 75 62 49 6e 74 36 34 28  sqlite3SubInt64(
9d50: 26 69 42 2c 69 41 29 20 29 20 67 6f 74 6f 20 66  &iB,iA) ) goto f
9d60: 70 5f 6d 61 74 68 3b 20 20 62 72 65 61 6b 3b 0a  p_math;  break;.
9d70: 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 4d 75        case OP_Mu
9d80: 6c 74 69 70 6c 79 3a 20 20 69 66 28 20 73 71 6c  ltiply:  if( sql
9d90: 69 74 65 33 4d 75 6c 49 6e 74 36 34 28 26 69 42  ite3MulInt64(&iB
9da0: 2c 69 41 29 20 29 20 67 6f 74 6f 20 66 70 5f 6d  ,iA) ) goto fp_m
9db0: 61 74 68 3b 20 20 62 72 65 61 6b 3b 0a 20 20 20  ath;  break;.   
9dc0: 20 20 20 63 61 73 65 20 4f 50 5f 44 69 76 69 64     case OP_Divid
9dd0: 65 3a 20 7b 0a 20 20 20 20 20 20 20 20 69 66 28  e: {.        if(
9de0: 20 69 41 3d 3d 30 20 29 20 67 6f 74 6f 20 61 72   iA==0 ) goto ar
9df0: 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f  ithmetic_result_
9e00: 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20  is_null;.       
9e10: 20 69 66 28 20 69 41 3d 3d 2d 31 20 26 26 20 69   if( iA==-1 && i
9e20: 42 3d 3d 53 4d 41 4c 4c 45 53 54 5f 49 4e 54 36  B==SMALLEST_INT6
9e30: 34 20 29 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68  4 ) goto fp_math
9e40: 3b 0a 20 20 20 20 20 20 20 20 69 42 20 2f 3d 20  ;.        iB /= 
9e50: 69 41 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61  iA;.        brea
9e60: 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  k;.      }.     
9e70: 20 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20 20 20   default: {.    
9e80: 20 20 20 20 69 66 28 20 69 41 3d 3d 30 20 29 20      if( iA==0 ) 
9e90: 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f  goto arithmetic_
9ea0: 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a  result_is_null;.
9eb0: 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d          if( iA==
9ec0: 2d 31 20 29 20 69 41 20 3d 20 31 3b 0a 20 20 20  -1 ) iA = 1;.   
9ed0: 20 20 20 20 20 69 42 20 25 3d 20 69 41 3b 0a 20       iB %= iA;. 
9ee0: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
9ef0: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
9f00: 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 42 3b 0a  pOut->u.i = iB;.
9f10: 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c      MemSetTypeFl
9f20: 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74  ag(pOut, MEM_Int
9f30: 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 66 70 5f 6d  );.  }else{.fp_m
9f40: 61 74 68 3a 0a 20 20 20 20 72 41 20 3d 20 73 71  ath:.    rA = sq
9f50: 6c 69 74 65 33 56 64 62 65 52 65 61 6c 56 61 6c  lite3VdbeRealVal
9f60: 75 65 28 70 49 6e 31 29 3b 0a 20 20 20 20 72 42  ue(pIn1);.    rB
9f70: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 52 65   = sqlite3VdbeRe
9f80: 61 6c 56 61 6c 75 65 28 70 49 6e 32 29 3b 0a 20  alValue(pIn2);. 
9f90: 20 20 20 73 77 69 74 63 68 28 20 70 4f 70 2d 3e     switch( pOp->
9fa0: 6f 70 63 6f 64 65 20 29 7b 0a 20 20 20 20 20 20  opcode ){.      
9fb0: 63 61 73 65 20 4f 50 5f 41 64 64 3a 20 20 20 20  case OP_Add:    
9fc0: 20 20 20 20 20 72 42 20 2b 3d 20 72 41 3b 20 20       rB += rA;  
9fd0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
9fe0: 20 20 63 61 73 65 20 4f 50 5f 53 75 62 74 72 61    case OP_Subtra
9ff0: 63 74 3a 20 20 20 20 72 42 20 2d 3d 20 72 41 3b  ct:    rB -= rA;
a000: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
a010: 20 20 20 20 63 61 73 65 20 4f 50 5f 4d 75 6c 74      case OP_Mult
a020: 69 70 6c 79 3a 20 20 20 20 72 42 20 2a 3d 20 72  iply:    rB *= r
a030: 41 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  A;       break;.
a040: 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 44 69        case OP_Di
a050: 76 69 64 65 3a 20 7b 0a 20 20 20 20 20 20 20 20  vide: {.        
a060: 2f 2a 20 28 64 6f 75 62 6c 65 29 30 20 49 6e 20  /* (double)0 In 
a070: 63 61 73 65 20 6f 66 20 53 51 4c 49 54 45 5f 4f  case of SQLITE_O
a080: 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49  MIT_FLOATING_POI
a090: 4e 54 2e 2e 2e 20 2a 2f 0a 20 20 20 20 20 20 20  NT... */.       
a0a0: 20 69 66 28 20 72 41 3d 3d 28 64 6f 75 62 6c 65   if( rA==(double
a0b0: 29 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d  )0 ) goto arithm
a0c0: 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e  etic_result_is_n
a0d0: 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 72 42 20  ull;.        rB 
a0e0: 2f 3d 20 72 41 3b 0a 20 20 20 20 20 20 20 20 62  /= rA;.        b
a0f0: 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20  reak;.      }.  
a100: 20 20 20 20 64 65 66 61 75 6c 74 3a 20 7b 0a 20      default: {. 
a110: 20 20 20 20 20 20 20 69 41 20 3d 20 28 69 36 34         iA = (i64
a120: 29 72 41 3b 0a 20 20 20 20 20 20 20 20 69 42 20  )rA;.        iB 
a130: 3d 20 28 69 36 34 29 72 42 3b 0a 20 20 20 20 20  = (i64)rB;.     
a140: 20 20 20 69 66 28 20 69 41 3d 3d 30 20 29 20 67     if( iA==0 ) g
a150: 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72  oto arithmetic_r
a160: 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20  esult_is_null;. 
a170: 20 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d 2d         if( iA==-
a180: 31 20 29 20 69 41 20 3d 20 31 3b 0a 20 20 20 20  1 ) iA = 1;.    
a190: 20 20 20 20 72 42 20 3d 20 28 64 6f 75 62 6c 65      rB = (double
a1a0: 29 28 69 42 20 25 20 69 41 29 3b 0a 20 20 20 20  )(iB % iA);.    
a1b0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
a1c0: 20 7d 0a 20 20 20 20 7d 0a 23 69 66 64 65 66 20   }.    }.#ifdef 
a1d0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41  SQLITE_OMIT_FLOA
a1e0: 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 20 20 70  TING_POINT.    p
a1f0: 4f 75 74 2d 3e 75 2e 69 20 3d 20 72 42 3b 0a 20  Out->u.i = rB;. 
a200: 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61     MemSetTypeFla
a210: 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29  g(pOut, MEM_Int)
a220: 3b 0a 23 65 6c 73 65 0a 20 20 20 20 69 66 28 20  ;.#else.    if( 
a230: 73 71 6c 69 74 65 33 49 73 4e 61 4e 28 72 42 29  sqlite3IsNaN(rB)
a240: 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61   ){.      goto a
a250: 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74  rithmetic_result
a260: 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 7d 0a  _is_null;.    }.
a270: 20 20 20 20 70 4f 75 74 2d 3e 72 20 3d 20 72 42      pOut->r = rB
a280: 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65  ;.    MemSetType
a290: 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 52  Flag(pOut, MEM_R
a2a0: 65 61 6c 29 3b 0a 20 20 20 20 69 66 28 20 28 66  eal);.    if( (f
a2b0: 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 29  lags & MEM_Real)
a2c0: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  ==0 ){.      sql
a2d0: 69 74 65 33 56 64 62 65 49 6e 74 65 67 65 72 41  ite3VdbeIntegerA
a2e0: 66 66 69 6e 69 74 79 28 70 4f 75 74 29 3b 0a 20  ffinity(pOut);. 
a2f0: 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 7d 0a     }.#endif.  }.
a300: 20 20 62 72 65 61 6b 3b 0a 0a 61 72 69 74 68 6d    break;..arithm
a310: 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e  etic_result_is_n
a320: 75 6c 6c 3a 0a 20 20 73 71 6c 69 74 65 33 56 64  ull:.  sqlite3Vd
a330: 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75  beMemSetNull(pOu
a340: 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
a350: 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6c 6c 53  /* Opcode: CollS
a360: 65 71 20 2a 20 2a 20 50 34 0a 2a 2a 0a 2a 2a 20  eq * * P4.**.** 
a370: 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20  P4 is a pointer 
a380: 74 6f 20 61 20 43 6f 6c 6c 53 65 71 20 73 74 72  to a CollSeq str
a390: 75 63 74 2e 20 49 66 20 74 68 65 20 6e 65 78 74  uct. If the next
a3a0: 20 63 61 6c 6c 20 74 6f 20 61 20 75 73 65 72 20   call to a user 
a3b0: 66 75 6e 63 74 69 6f 6e 0a 2a 2a 20 6f 72 20 61  function.** or a
a3c0: 67 67 72 65 67 61 74 65 20 63 61 6c 6c 73 20 73  ggregate calls s
a3d0: 71 6c 69 74 65 33 47 65 74 46 75 6e 63 43 6f 6c  qlite3GetFuncCol
a3e0: 6c 53 65 71 28 29 2c 20 74 68 69 73 20 63 6f 6c  lSeq(), this col
a3f0: 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20  lation sequence 
a400: 77 69 6c 6c 0a 2a 2a 20 62 65 20 72 65 74 75 72  will.** be retur
a410: 6e 65 64 2e 20 54 68 69 73 20 69 73 20 75 73 65  ned. This is use
a420: 64 20 62 79 20 74 68 65 20 62 75 69 6c 74 2d 69  d by the built-i
a430: 6e 20 6d 69 6e 28 29 2c 20 6d 61 78 28 29 20 61  n min(), max() a
a440: 6e 64 20 6e 75 6c 6c 69 66 28 29 0a 2a 2a 20 66  nd nullif().** f
a450: 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20  unctions..**.** 
a460: 54 68 65 20 69 6e 74 65 72 66 61 63 65 20 75 73  The interface us
a470: 65 64 20 62 79 20 74 68 65 20 69 6d 70 6c 65 6d  ed by the implem
a480: 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  entation of the 
a490: 61 66 6f 72 65 6d 65 6e 74 69 6f 6e 65 64 20 66  aforementioned f
a4a0: 75 6e 63 74 69 6f 6e 73 0a 2a 2a 20 74 6f 20 72  unctions.** to r
a4b0: 65 74 72 69 65 76 65 20 74 68 65 20 63 6f 6c 6c  etrieve the coll
a4c0: 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 73  ation sequence s
a4d0: 65 74 20 62 79 20 74 68 69 73 20 6f 70 63 6f 64  et by this opcod
a4e0: 65 20 69 73 20 6e 6f 74 20 61 76 61 69 6c 61 62  e is not availab
a4f0: 6c 65 0a 2a 2a 20 70 75 62 6c 69 63 6c 79 2c 20  le.** publicly, 
a500: 6f 6e 6c 79 20 74 6f 20 75 73 65 72 20 66 75 6e  only to user fun
a510: 63 74 69 6f 6e 73 20 64 65 66 69 6e 65 64 20 69  ctions defined i
a520: 6e 20 66 75 6e 63 2e 63 2e 0a 2a 2f 0a 63 61 73  n func.c..*/.cas
a530: 65 20 4f 50 5f 43 6f 6c 6c 53 65 71 3a 20 7b 0a  e OP_CollSeq: {.
a540: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
a550: 34 74 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45  4type==P4_COLLSE
a560: 51 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  Q );.  break;.}.
a570: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 75 6e 63  ./* Opcode: Func
a580: 74 69 6f 6e 20 50 31 20 50 32 20 50 33 20 50 34  tion P1 P2 P3 P4
a590: 20 50 35 0a 2a 2a 0a 2a 2a 20 49 6e 76 6f 6b 65   P5.**.** Invoke
a5a0: 20 61 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e   a user function
a5b0: 20 28 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65   (P4 is a pointe
a5c0: 72 20 74 6f 20 61 20 46 75 6e 63 74 69 6f 6e 20  r to a Function 
a5d0: 73 74 72 75 63 74 75 72 65 20 74 68 61 74 0a 2a  structure that.*
a5e0: 2a 20 64 65 66 69 6e 65 73 20 74 68 65 20 66 75  * defines the fu
a5f0: 6e 63 74 69 6f 6e 29 20 77 69 74 68 20 50 35 20  nction) with P5 
a600: 61 72 67 75 6d 65 6e 74 73 20 74 61 6b 65 6e 20  arguments taken 
a610: 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50 32  from register P2
a620: 20 61 6e 64 0a 2a 2a 20 73 75 63 63 65 73 73 6f   and.** successo
a630: 72 73 2e 20 20 54 68 65 20 72 65 73 75 6c 74 20  rs.  The result 
a640: 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20  of the function 
a650: 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67  is stored in reg
a660: 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 52 65 67  ister P3..** Reg
a670: 69 73 74 65 72 20 50 33 20 6d 75 73 74 20 6e 6f  ister P3 must no
a680: 74 20 62 65 20 6f 6e 65 20 6f 66 20 74 68 65 20  t be one of the 
a690: 66 75 6e 63 74 69 6f 6e 20 69 6e 70 75 74 73 2e  function inputs.
a6a0: 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 33  .**.** P1 is a 3
a6b0: 32 2d 62 69 74 20 62 69 74 6d 61 73 6b 20 69 6e  2-bit bitmask in
a6c0: 64 69 63 61 74 69 6e 67 20 77 68 65 74 68 65 72  dicating whether
a6d0: 20 6f 72 20 6e 6f 74 20 65 61 63 68 20 61 72 67   or not each arg
a6e0: 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 0a 2a 2a  ument to the .**
a6f0: 20 66 75 6e 63 74 69 6f 6e 20 77 61 73 20 64 65   function was de
a700: 74 65 72 6d 69 6e 65 64 20 74 6f 20 62 65 20 63  termined to be c
a710: 6f 6e 73 74 61 6e 74 20 61 74 20 63 6f 6d 70 69  onstant at compi
a720: 6c 65 20 74 69 6d 65 2e 20 49 66 20 74 68 65 20  le time. If the 
a730: 66 69 72 73 74 0a 2a 2a 20 61 72 67 75 6d 65 6e  first.** argumen
a740: 74 20 77 61 73 20 63 6f 6e 73 74 61 6e 74 20 74  t was constant t
a750: 68 65 6e 20 62 69 74 20 30 20 6f 66 20 50 31 20  hen bit 0 of P1 
a760: 69 73 20 73 65 74 2e 20 54 68 69 73 20 69 73 20  is set. This is 
a770: 75 73 65 64 20 74 6f 20 64 65 74 65 72 6d 69 6e  used to determin
a780: 65 0a 2a 2a 20 77 68 65 74 68 65 72 20 6d 65 74  e.** whether met
a790: 61 20 64 61 74 61 20 61 73 73 6f 63 69 61 74 65  a data associate
a7a0: 64 20 77 69 74 68 20 61 20 75 73 65 72 20 66 75  d with a user fu
a7b0: 6e 63 74 69 6f 6e 20 61 72 67 75 6d 65 6e 74 20  nction argument 
a7c0: 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 73 71 6c  using the.** sql
a7d0: 69 74 65 33 5f 73 65 74 5f 61 75 78 64 61 74 61  ite3_set_auxdata
a7e0: 28 29 20 41 50 49 20 6d 61 79 20 62 65 20 73 61  () API may be sa
a7f0: 66 65 6c 79 20 72 65 74 61 69 6e 65 64 20 75 6e  fely retained un
a800: 74 69 6c 20 74 68 65 20 6e 65 78 74 0a 2a 2a 20  til the next.** 
a810: 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68  invocation of th
a820: 69 73 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a  is opcode..**.**
a830: 20 53 65 65 20 61 6c 73 6f 3a 20 41 67 67 53 74   See also: AggSt
a840: 65 70 20 61 6e 64 20 41 67 67 46 69 6e 61 6c 0a  ep and AggFinal.
a850: 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 75 6e 63 74  */.case OP_Funct
a860: 69 6f 6e 3a 20 7b 0a 20 20 69 6e 74 20 69 3b 0a  ion: {.  int i;.
a870: 20 20 4d 65 6d 20 2a 70 41 72 67 3b 0a 20 20 73    Mem *pArg;.  s
a880: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 63  qlite3_context c
a890: 74 78 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 61  tx;.  sqlite3_va
a8a0: 6c 75 65 20 2a 2a 61 70 56 61 6c 3b 0a 20 20 69  lue **apVal;.  i
a8b0: 6e 74 20 6e 3b 0a 0a 20 20 6e 20 3d 20 70 4f 70  nt n;..  n = pOp
a8c0: 2d 3e 70 35 3b 0a 20 20 61 70 56 61 6c 20 3d 20  ->p5;.  apVal = 
a8d0: 70 2d 3e 61 70 41 72 67 3b 0a 20 20 61 73 73 65  p->apArg;.  asse
a8e0: 72 74 28 20 61 70 56 61 6c 20 7c 7c 20 6e 3d 3d  rt( apVal || n==
a8f0: 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
a900: 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d  Op->p3>0 && pOp-
a910: 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a  >p3<=p->nMem );.
a920: 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
a930: 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41 62  Op->p3];.  memAb
a940: 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70  outToChange(p, p
a950: 4f 75 74 29 3b 0a 0a 20 20 61 73 73 65 72 74 28  Out);..  assert(
a960: 20 6e 3d 3d 30 20 7c 7c 20 28 70 4f 70 2d 3e 70   n==0 || (pOp->p
a970: 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 6e  2>0 && pOp->p2+n
a980: 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31 29 20 29 3b 0a  <=p->nMem+1) );.
a990: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
a9a0: 33 3c 70 4f 70 2d 3e 70 32 20 7c 7c 20 70 4f 70  3<pOp->p2 || pOp
a9b0: 2d 3e 70 33 3e 3d 70 4f 70 2d 3e 70 32 2b 6e 20  ->p3>=pOp->p2+n 
a9c0: 29 3b 0a 20 20 70 41 72 67 20 3d 20 26 61 4d 65  );.  pArg = &aMe
a9d0: 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 66 6f  m[pOp->p2];.  fo
a9e0: 72 28 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b 2b 2c  r(i=0; i<n; i++,
a9f0: 20 70 41 72 67 2b 2b 29 7b 0a 20 20 20 20 61 73   pArg++){.    as
aa00: 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
aa10: 28 70 41 72 67 29 20 29 3b 0a 20 20 20 20 61 70  (pArg) );.    ap
aa20: 56 61 6c 5b 69 5d 20 3d 20 70 41 72 67 3b 0a 20  Val[i] = pArg;. 
aa30: 20 20 20 44 65 65 70 68 65 6d 65 72 61 6c 69 7a     Deephemeraliz
aa40: 65 28 70 41 72 67 29 3b 0a 20 20 20 20 73 71 6c  e(pArg);.    sql
aa50: 69 74 65 33 56 64 62 65 4d 65 6d 53 74 6f 72 65  ite3VdbeMemStore
aa60: 54 79 70 65 28 70 41 72 67 29 3b 0a 20 20 20 20  Type(pArg);.    
aa70: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
aa80: 4f 70 2d 3e 70 32 2b 69 2c 20 70 41 72 67 29 3b  Op->p2+i, pArg);
aa90: 0a 20 20 7d 0a 0a 20 20 61 73 73 65 72 74 28 20  .  }..  assert( 
aaa0: 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
aab0: 46 55 4e 43 44 45 46 20 7c 7c 20 70 4f 70 2d 3e  FUNCDEF || pOp->
aac0: 70 34 74 79 70 65 3d 3d 50 34 5f 56 44 42 45 46  p4type==P4_VDBEF
aad0: 55 4e 43 20 29 3b 0a 20 20 69 66 28 20 70 4f 70  UNC );.  if( pOp
aae0: 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 46 55 4e  ->p4type==P4_FUN
aaf0: 43 44 45 46 20 29 7b 0a 20 20 20 20 63 74 78 2e  CDEF ){.    ctx.
ab00: 70 46 75 6e 63 20 3d 20 70 4f 70 2d 3e 70 34 2e  pFunc = pOp->p4.
ab10: 70 46 75 6e 63 3b 0a 20 20 20 20 63 74 78 2e 70  pFunc;.    ctx.p
ab20: 56 64 62 65 46 75 6e 63 20 3d 20 30 3b 0a 20 20  VdbeFunc = 0;.  
ab30: 7d 65 6c 73 65 7b 0a 20 20 20 20 63 74 78 2e 70  }else{.    ctx.p
ab40: 56 64 62 65 46 75 6e 63 20 3d 20 28 56 64 62 65  VdbeFunc = (Vdbe
ab50: 46 75 6e 63 2a 29 70 4f 70 2d 3e 70 34 2e 70 56  Func*)pOp->p4.pV
ab60: 64 62 65 46 75 6e 63 3b 0a 20 20 20 20 63 74 78  dbeFunc;.    ctx
ab70: 2e 70 46 75 6e 63 20 3d 20 63 74 78 2e 70 56 64  .pFunc = ctx.pVd
ab80: 62 65 46 75 6e 63 2d 3e 70 46 75 6e 63 3b 0a 20  beFunc->pFunc;. 
ab90: 20 7d 0a 0a 20 20 63 74 78 2e 73 2e 66 6c 61 67   }..  ctx.s.flag
aba0: 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20  s = MEM_Null;.  
abb0: 63 74 78 2e 73 2e 64 62 20 3d 20 64 62 3b 0a 20  ctx.s.db = db;. 
abc0: 20 63 74 78 2e 73 2e 78 44 65 6c 20 3d 20 30 3b   ctx.s.xDel = 0;
abd0: 0a 20 20 63 74 78 2e 73 2e 7a 4d 61 6c 6c 6f 63  .  ctx.s.zMalloc
abe0: 20 3d 20 30 3b 0a 0a 20 20 2f 2a 20 54 68 65 20   = 0;..  /* The 
abf0: 6f 75 74 70 75 74 20 63 65 6c 6c 20 6d 61 79 20  output cell may 
ac00: 61 6c 72 65 61 64 79 20 68 61 76 65 20 61 20 62  already have a b
ac10: 75 66 66 65 72 20 61 6c 6c 6f 63 61 74 65 64 2e  uffer allocated.
ac20: 20 4d 6f 76 65 0a 20 20 2a 2a 20 74 68 65 20 70   Move.  ** the p
ac30: 6f 69 6e 74 65 72 20 74 6f 20 63 74 78 2e 73 20  ointer to ctx.s 
ac40: 73 6f 20 69 6e 20 63 61 73 65 20 74 68 65 20 75  so in case the u
ac50: 73 65 72 2d 66 75 6e 63 74 69 6f 6e 20 63 61 6e  ser-function can
ac60: 20 75 73 65 0a 20 20 2a 2a 20 74 68 65 20 61 6c   use.  ** the al
ac70: 72 65 61 64 79 20 61 6c 6c 6f 63 61 74 65 64 20  ready allocated 
ac80: 62 75 66 66 65 72 20 69 6e 73 74 65 61 64 20 6f  buffer instead o
ac90: 66 20 61 6c 6c 6f 63 61 74 69 6e 67 20 61 20 6e  f allocating a n
aca0: 65 77 20 6f 6e 65 2e 0a 20 20 2a 2f 0a 20 20 73  ew one..  */.  s
acb0: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76  qlite3VdbeMemMov
acc0: 65 28 26 63 74 78 2e 73 2c 20 70 4f 75 74 29 3b  e(&ctx.s, pOut);
acd0: 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61  .  MemSetTypeFla
ace0: 67 28 26 63 74 78 2e 73 2c 20 4d 45 4d 5f 4e 75  g(&ctx.s, MEM_Nu
acf0: 6c 6c 29 3b 0a 0a 20 20 63 74 78 2e 69 73 45 72  ll);..  ctx.isEr
ad00: 72 6f 72 20 3d 20 30 3b 0a 20 20 69 66 28 20 63  ror = 0;.  if( c
ad10: 74 78 2e 70 46 75 6e 63 2d 3e 66 6c 61 67 73 20  tx.pFunc->flags 
ad20: 26 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45  & SQLITE_FUNC_NE
ad30: 45 44 43 4f 4c 4c 20 29 7b 0a 20 20 20 20 61 73  EDCOLL ){.    as
ad40: 73 65 72 74 28 20 70 4f 70 3e 61 4f 70 20 29 3b  sert( pOp>aOp );
ad50: 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
ad60: 5b 2d 31 5d 2e 70 34 74 79 70 65 3d 3d 50 34 5f  [-1].p4type==P4_
ad70: 43 4f 4c 4c 53 45 51 20 29 3b 0a 20 20 20 20 61  COLLSEQ );.    a
ad80: 73 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 6f  ssert( pOp[-1].o
ad90: 70 63 6f 64 65 3d 3d 4f 50 5f 43 6f 6c 6c 53 65  pcode==OP_CollSe
ada0: 71 20 29 3b 0a 20 20 20 20 63 74 78 2e 70 43 6f  q );.    ctx.pCo
adb0: 6c 6c 20 3d 20 70 4f 70 5b 2d 31 5d 2e 70 34 2e  ll = pOp[-1].p4.
adc0: 70 43 6f 6c 6c 3b 0a 20 20 7d 0a 20 20 28 2a 63  pColl;.  }.  (*c
add0: 74 78 2e 70 46 75 6e 63 2d 3e 78 46 75 6e 63 29  tx.pFunc->xFunc)
ade0: 28 26 63 74 78 2c 20 6e 2c 20 61 70 56 61 6c 29  (&ctx, n, apVal)
adf0: 3b 20 2f 2a 20 49 4d 50 3a 20 52 2d 32 34 35 30  ; /* IMP: R-2450
ae00: 35 2d 32 33 32 33 30 20 2a 2f 0a 20 20 73 71 6c  5-23230 */.  sql
ae10: 69 74 65 33 56 64 62 65 4d 75 74 65 78 52 65 73  ite3VdbeMutexRes
ae20: 79 6e 63 28 70 29 3b 0a 20 20 69 66 28 20 64 62  ync(p);.  if( db
ae30: 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29  ->mallocFailed )
ae40: 7b 0a 20 20 20 20 2f 2a 20 45 76 65 6e 20 74 68  {.    /* Even th
ae50: 6f 75 67 68 20 61 20 6d 61 6c 6c 6f 63 28 29 20  ough a malloc() 
ae60: 68 61 73 20 66 61 69 6c 65 64 2c 20 74 68 65 20  has failed, the 
ae70: 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f  implementation o
ae80: 66 20 74 68 65 0a 20 20 20 20 2a 2a 20 75 73 65  f the.    ** use
ae90: 72 20 66 75 6e 63 74 69 6f 6e 20 6d 61 79 20 68  r function may h
aea0: 61 76 65 20 63 61 6c 6c 65 64 20 61 6e 20 73 71  ave called an sq
aeb0: 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 58 58 58  lite3_result_XXX
aec0: 28 29 20 66 75 6e 63 74 69 6f 6e 0a 20 20 20 20  () function.    
aed0: 2a 2a 20 74 6f 20 72 65 74 75 72 6e 20 61 20 76  ** to return a v
aee0: 61 6c 75 65 2e 20 54 68 65 20 66 6f 6c 6c 6f 77  alue. The follow
aef0: 69 6e 67 20 63 61 6c 6c 20 72 65 6c 65 61 73 65  ing call release
af00: 73 20 61 6e 79 20 72 65 73 6f 75 72 63 65 73 0a  s any resources.
af10: 20 20 20 20 2a 2a 20 61 73 73 6f 63 69 61 74 65      ** associate
af20: 64 20 77 69 74 68 20 73 75 63 68 20 61 20 76 61  d with such a va
af30: 6c 75 65 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  lue..    */.    
af40: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65  sqlite3VdbeMemRe
af50: 6c 65 61 73 65 28 26 63 74 78 2e 73 29 3b 0a 20  lease(&ctx.s);. 
af60: 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a     goto no_mem;.
af70: 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20 61 6e 79    }..  /* If any
af80: 20 61 75 78 69 6c 69 61 72 79 20 64 61 74 61 20   auxiliary data 
af90: 66 75 6e 63 74 69 6f 6e 73 20 68 61 76 65 20 62  functions have b
afa0: 65 65 6e 20 63 61 6c 6c 65 64 20 62 79 20 74 68  een called by th
afb0: 69 73 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e  is user function
afc0: 2c 0a 20 20 2a 2a 20 69 6d 6d 65 64 69 61 74 65  ,.  ** immediate
afd0: 6c 79 20 63 61 6c 6c 20 74 68 65 20 64 65 73 74  ly call the dest
afe0: 72 75 63 74 6f 72 20 66 6f 72 20 61 6e 79 20 6e  ructor for any n
aff0: 6f 6e 2d 73 74 61 74 69 63 20 76 61 6c 75 65 73  on-static values
b000: 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 63 74 78  ..  */.  if( ctx
b010: 2e 70 56 64 62 65 46 75 6e 63 20 29 7b 0a 20 20  .pVdbeFunc ){.  
b020: 20 20 73 71 6c 69 74 65 33 56 64 62 65 44 65 6c    sqlite3VdbeDel
b030: 65 74 65 41 75 78 44 61 74 61 28 63 74 78 2e 70  eteAuxData(ctx.p
b040: 56 64 62 65 46 75 6e 63 2c 20 70 4f 70 2d 3e 70  VdbeFunc, pOp->p
b050: 31 29 3b 0a 20 20 20 20 70 4f 70 2d 3e 70 34 2e  1);.    pOp->p4.
b060: 70 56 64 62 65 46 75 6e 63 20 3d 20 63 74 78 2e  pVdbeFunc = ctx.
b070: 70 56 64 62 65 46 75 6e 63 3b 0a 20 20 20 20 70  pVdbeFunc;.    p
b080: 4f 70 2d 3e 70 34 74 79 70 65 20 3d 20 50 34 5f  Op->p4type = P4_
b090: 56 44 42 45 46 55 4e 43 3b 0a 20 20 7d 0a 0a 20  VDBEFUNC;.  }.. 
b0a0: 20 2f 2a 20 49 66 20 74 68 65 20 66 75 6e 63 74   /* If the funct
b0b0: 69 6f 6e 20 72 65 74 75 72 6e 65 64 20 61 6e 20  ion returned an 
b0c0: 65 72 72 6f 72 2c 20 74 68 72 6f 77 20 61 6e 20  error, throw an 
b0d0: 65 78 63 65 70 74 69 6f 6e 20 2a 2f 0a 20 20 69  exception */.  i
b0e0: 66 28 20 63 74 78 2e 69 73 45 72 72 6f 72 20 29  f( ctx.isError )
b0f0: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65 74  {.    sqlite3Set
b100: 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d  String(&p->zErrM
b110: 73 67 2c 20 64 62 2c 20 22 25 73 22 2c 20 73 71  sg, db, "%s", sq
b120: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74  lite3_value_text
b130: 28 26 63 74 78 2e 73 29 29 3b 0a 20 20 20 20 72  (&ctx.s));.    r
b140: 63 20 3d 20 63 74 78 2e 69 73 45 72 72 6f 72 3b  c = ctx.isError;
b150: 0a 20 20 7d 0a 0a 20 20 2f 2a 20 43 6f 70 79 20  .  }..  /* Copy 
b160: 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68  the result of th
b170: 65 20 66 75 6e 63 74 69 6f 6e 20 69 6e 74 6f 20  e function into 
b180: 72 65 67 69 73 74 65 72 20 50 33 20 2a 2f 0a 20  register P3 */. 
b190: 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e   sqlite3VdbeChan
b1a0: 67 65 45 6e 63 6f 64 69 6e 67 28 26 63 74 78 2e  geEncoding(&ctx.
b1b0: 73 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20  s, encoding);.  
b1c0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d 6f  sqlite3VdbeMemMo
b1d0: 76 65 28 70 4f 75 74 2c 20 26 63 74 78 2e 73 29  ve(pOut, &ctx.s)
b1e0: 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 56  ;.  if( sqlite3V
b1f0: 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28 70 4f 75  dbeMemTooBig(pOu
b200: 74 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74  t) ){.    goto t
b210: 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 0a 23 69 66  oo_big;.  }..#if
b220: 20 30 0a 20 20 2f 2a 20 54 68 65 20 61 70 70 2d   0.  /* The app-
b230: 64 65 66 69 6e 65 64 20 66 75 6e 63 74 69 6f 6e  defined function
b240: 20 68 61 73 20 64 6f 6e 65 20 73 6f 6d 65 74 68   has done someth
b250: 69 6e 67 20 74 68 61 74 20 61 73 20 63 61 75 73  ing that as caus
b260: 65 64 20 74 68 69 73 0a 20 20 2a 2a 20 73 74 61  ed this.  ** sta
b270: 74 65 6d 65 6e 74 20 74 6f 20 65 78 70 69 72 65  tement to expire
b280: 2e 20 20 28 50 65 72 68 61 70 73 20 74 68 65 20  .  (Perhaps the 
b290: 66 75 6e 63 74 69 6f 6e 20 63 61 6c 6c 65 64 20  function called 
b2a0: 73 71 6c 69 74 65 33 5f 65 78 65 63 28 29 0a 20  sqlite3_exec(). 
b2b0: 20 2a 2a 20 77 69 74 68 20 61 20 43 52 45 41 54   ** with a CREAT
b2c0: 45 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e  E TABLE statemen
b2d0: 74 2e 29 0a 20 20 2a 2f 0a 20 20 69 66 28 20 70  t.).  */.  if( p
b2e0: 2d 3e 65 78 70 69 72 65 64 20 29 20 72 63 20 3d  ->expired ) rc =
b2f0: 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 3b 0a 23   SQLITE_ABORT;.#
b300: 65 6e 64 69 66 0a 0a 20 20 52 45 47 49 53 54 45  endif..  REGISTE
b310: 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c  R_TRACE(pOp->p3,
b320: 20 70 4f 75 74 29 3b 0a 20 20 55 50 44 41 54 45   pOut);.  UPDATE
b330: 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f  _MAX_BLOBSIZE(pO
b340: 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ut);.  break;.}.
b350: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 69 74 41  ./* Opcode: BitA
b360: 6e 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  nd P1 P2 P3 * *.
b370: 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20 62  **.** Take the b
b380: 69 74 2d 77 69 73 65 20 41 4e 44 20 6f 66 20 74  it-wise AND of t
b390: 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67  he values in reg
b3a0: 69 73 74 65 72 20 50 31 20 61 6e 64 20 50 32 20  ister P1 and P2 
b3b0: 61 6e 64 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65  and.** store the
b3c0: 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73   result in regis
b3d0: 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69  ter P3..** If ei
b3e0: 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55  ther input is NU
b3f0: 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69  LL, the result i
b400: 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70  s NULL..*/./* Op
b410: 63 6f 64 65 3a 20 42 69 74 4f 72 20 50 31 20 50  code: BitOr P1 P
b420: 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54  2 P3 * *.**.** T
b430: 61 6b 65 20 74 68 65 20 62 69 74 2d 77 69 73 65  ake the bit-wise
b440: 20 4f 52 20 6f 66 20 74 68 65 20 76 61 6c 75 65   OR of the value
b450: 73 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  s in register P1
b460: 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20 73   and P2 and.** s
b470: 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20  tore the result 
b480: 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  in register P3..
b490: 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70  ** If either inp
b4a0: 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20  ut is NULL, the 
b4b0: 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a  result is NULL..
b4c0: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 68  */./* Opcode: Sh
b4d0: 69 66 74 4c 65 66 74 20 50 31 20 50 32 20 50 33  iftLeft P1 P2 P3
b4e0: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 68 69 66 74   * *.**.** Shift
b4f0: 20 74 68 65 20 69 6e 74 65 67 65 72 20 76 61 6c   the integer val
b500: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
b510: 32 20 74 6f 20 74 68 65 20 6c 65 66 74 20 62 79  2 to the left by
b520: 20 74 68 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f   the.** number o
b530: 66 20 62 69 74 73 20 73 70 65 63 69 66 69 65 64  f bits specified
b540: 20 62 79 20 74 68 65 20 69 6e 74 65 67 65 72 20   by the integer 
b550: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a  in register P1..
b560: 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 72 65 73  ** Store the res
b570: 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ult in register 
b580: 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  P3..** If either
b590: 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20   input is NULL, 
b5a0: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
b5b0: 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  LL..*/./* Opcode
b5c0: 3a 20 53 68 69 66 74 52 69 67 68 74 20 50 31 20  : ShiftRight P1 
b5d0: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
b5e0: 53 68 69 66 74 20 74 68 65 20 69 6e 74 65 67 65  Shift the intege
b5f0: 72 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  r value in regis
b600: 74 65 72 20 50 32 20 74 6f 20 74 68 65 20 72 69  ter P2 to the ri
b610: 67 68 74 20 62 79 20 74 68 65 0a 2a 2a 20 6e 75  ght by the.** nu
b620: 6d 62 65 72 20 6f 66 20 62 69 74 73 20 73 70 65  mber of bits spe
b630: 63 69 66 69 65 64 20 62 79 20 74 68 65 20 69 6e  cified by the in
b640: 74 65 67 65 72 20 69 6e 20 72 65 67 69 73 74 65  teger in registe
b650: 72 20 50 31 2e 0a 2a 2a 20 53 74 6f 72 65 20 74  r P1..** Store t
b660: 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67  he result in reg
b670: 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20  ister P3..** If 
b680: 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20  either input is 
b690: 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74  NULL, the result
b6a0: 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73   is NULL..*/.cas
b6b0: 65 20 4f 50 5f 42 69 74 41 6e 64 3a 20 20 20 20  e OP_BitAnd:    
b6c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
b6d0: 73 61 6d 65 20 61 73 20 54 4b 5f 42 49 54 41 4e  same as TK_BITAN
b6e0: 44 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74  D, in1, in2, out
b6f0: 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 69 74  3 */.case OP_Bit
b700: 4f 72 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  Or:             
b710: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
b720: 54 4b 5f 42 49 54 4f 52 2c 20 69 6e 31 2c 20 69  TK_BITOR, in1, i
b730: 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65  n2, out3 */.case
b740: 20 4f 50 5f 53 68 69 66 74 4c 65 66 74 3a 20 20   OP_ShiftLeft:  
b750: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
b760: 61 6d 65 20 61 73 20 54 4b 5f 4c 53 48 49 46 54  ame as TK_LSHIFT
b770: 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33  , in1, in2, out3
b780: 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 68 69 66   */.case OP_Shif
b790: 74 52 69 67 68 74 3a 20 7b 20 20 20 20 20 20 20  tRight: {       
b7a0: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
b7b0: 4b 5f 52 53 48 49 46 54 2c 20 69 6e 31 2c 20 69  K_RSHIFT, in1, i
b7c0: 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69 36  n2, out3 */.  i6
b7d0: 34 20 69 41 3b 0a 20 20 75 36 34 20 75 41 3b 0a  4 iA;.  u64 uA;.
b7e0: 20 20 69 36 34 20 69 42 3b 0a 20 20 75 38 20 6f    i64 iB;.  u8 o
b7f0: 70 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d  p;..  pIn1 = &aM
b800: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70  em[pOp->p1];.  p
b810: 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In2 = &aMem[pOp-
b820: 3e 70 32 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26  >p2];.  pOut = &
b830: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
b840: 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67   if( (pIn1->flag
b850: 73 20 7c 20 70 49 6e 32 2d 3e 66 6c 61 67 73 29  s | pIn2->flags)
b860: 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20   & MEM_Null ){. 
b870: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
b880: 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a  mSetNull(pOut);.
b890: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20      break;.  }. 
b8a0: 20 69 41 20 3d 20 73 71 6c 69 74 65 33 56 64 62   iA = sqlite3Vdb
b8b0: 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 32 29 3b  eIntValue(pIn2);
b8c0: 0a 20 20 69 42 20 3d 20 73 71 6c 69 74 65 33 56  .  iB = sqlite3V
b8d0: 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31  dbeIntValue(pIn1
b8e0: 29 3b 0a 20 20 6f 70 20 3d 20 70 4f 70 2d 3e 6f  );.  op = pOp->o
b8f0: 70 63 6f 64 65 3b 0a 20 20 69 66 28 20 6f 70 3d  pcode;.  if( op=
b900: 3d 4f 50 5f 42 69 74 41 6e 64 20 29 7b 0a 20 20  =OP_BitAnd ){.  
b910: 20 20 69 41 20 26 3d 20 69 42 3b 0a 20 20 7d 65    iA &= iB;.  }e
b920: 6c 73 65 20 69 66 28 20 6f 70 3d 3d 4f 50 5f 42  lse if( op==OP_B
b930: 69 74 4f 72 20 29 7b 0a 20 20 20 20 69 41 20 7c  itOr ){.    iA |
b940: 3d 20 69 42 3b 0a 20 20 7d 65 6c 73 65 20 69 66  = iB;.  }else if
b950: 28 20 69 42 21 3d 30 20 29 7b 0a 20 20 20 20 61  ( iB!=0 ){.    a
b960: 73 73 65 72 74 28 20 6f 70 3d 3d 4f 50 5f 53 68  ssert( op==OP_Sh
b970: 69 66 74 52 69 67 68 74 20 7c 7c 20 6f 70 3d 3d  iftRight || op==
b980: 4f 50 5f 53 68 69 66 74 4c 65 66 74 20 29 3b 0a  OP_ShiftLeft );.
b990: 0a 20 20 20 20 2f 2a 20 49 66 20 73 68 69 66 74  .    /* If shift
b9a0: 69 6e 67 20 62 79 20 61 20 6e 65 67 61 74 69 76  ing by a negativ
b9b0: 65 20 61 6d 6f 75 6e 74 2c 20 73 68 69 66 74 20  e amount, shift 
b9c0: 69 6e 20 74 68 65 20 6f 74 68 65 72 20 64 69 72  in the other dir
b9d0: 65 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 66  ection */.    if
b9e0: 28 20 69 42 3c 30 20 29 7b 0a 20 20 20 20 20 20  ( iB<0 ){.      
b9f0: 61 73 73 65 72 74 28 20 4f 50 5f 53 68 69 66 74  assert( OP_Shift
ba00: 52 69 67 68 74 3d 3d 4f 50 5f 53 68 69 66 74 4c  Right==OP_ShiftL
ba10: 65 66 74 2b 31 20 29 3b 0a 20 20 20 20 20 20 6f  eft+1 );.      o
ba20: 70 20 3d 20 32 2a 4f 50 5f 53 68 69 66 74 4c 65  p = 2*OP_ShiftLe
ba30: 66 74 20 2b 20 31 20 2d 20 6f 70 3b 0a 20 20 20  ft + 1 - op;.   
ba40: 20 20 20 69 42 20 3d 20 69 42 3e 28 2d 36 34 29     iB = iB>(-64)
ba50: 20 3f 20 2d 69 42 20 3a 20 36 34 3b 0a 20 20 20   ? -iB : 64;.   
ba60: 20 7d 0a 0a 20 20 20 20 69 66 28 20 69 42 3e 3d   }..    if( iB>=
ba70: 36 34 20 29 7b 0a 20 20 20 20 20 20 69 41 20 3d  64 ){.      iA =
ba80: 20 28 69 41 3e 3d 30 20 7c 7c 20 6f 70 3d 3d 4f   (iA>=0 || op==O
ba90: 50 5f 53 68 69 66 74 4c 65 66 74 29 20 3f 20 30  P_ShiftLeft) ? 0
baa0: 20 3a 20 2d 31 3b 0a 20 20 20 20 7d 65 6c 73 65   : -1;.    }else
bab0: 7b 0a 20 20 20 20 20 20 6d 65 6d 63 70 79 28 26  {.      memcpy(&
bac0: 75 41 2c 20 26 69 41 2c 20 73 69 7a 65 6f 66 28  uA, &iA, sizeof(
bad0: 75 41 29 29 3b 0a 20 20 20 20 20 20 69 66 28 20  uA));.      if( 
bae0: 6f 70 3d 3d 4f 50 5f 53 68 69 66 74 4c 65 66 74  op==OP_ShiftLeft
baf0: 20 29 7b 0a 20 20 20 20 20 20 20 20 75 41 20 3c   ){.        uA <
bb00: 3c 3d 20 69 42 3b 0a 20 20 20 20 20 20 7d 65 6c  <= iB;.      }el
bb10: 73 65 7b 0a 20 20 20 20 20 20 20 20 75 41 20 3e  se{.        uA >
bb20: 3e 3d 20 69 42 3b 0a 20 20 20 20 20 20 20 20 2f  >= iB;.        /
bb30: 2a 20 53 69 67 6e 2d 65 78 74 65 6e 64 20 6f 6e  * Sign-extend on
bb40: 20 61 20 72 69 67 68 74 20 73 68 69 66 74 20 6f   a right shift o
bb50: 66 20 61 20 6e 65 67 61 74 69 76 65 20 6e 75 6d  f a negative num
bb60: 62 65 72 20 2a 2f 0a 20 20 20 20 20 20 20 20 69  ber */.        i
bb70: 66 28 20 69 41 3c 30 20 29 20 75 41 20 7c 3d 20  f( iA<0 ) uA |= 
bb80: 28 28 28 28 75 36 34 29 30 78 66 66 66 66 66 66  ((((u64)0xffffff
bb90: 66 66 29 3c 3c 33 32 29 7c 30 78 66 66 66 66 66  ff)<<32)|0xfffff
bba0: 66 66 66 29 20 3c 3c 20 28 36 34 2d 69 42 29 3b  fff) << (64-iB);
bbb0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 6d  .      }.      m
bbc0: 65 6d 63 70 79 28 26 69 41 2c 20 26 75 41 2c 20  emcpy(&iA, &uA, 
bbd0: 73 69 7a 65 6f 66 28 69 41 29 29 3b 0a 20 20 20  sizeof(iA));.   
bbe0: 20 7d 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75   }.  }.  pOut->u
bbf0: 2e 69 20 3d 20 69 41 3b 0a 20 20 4d 65 6d 53 65  .i = iA;.  MemSe
bc00: 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20  tTypeFlag(pOut, 
bc10: 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 62 72 65 61  MEM_Int);.  brea
bc20: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
bc30: 20 41 64 64 49 6d 6d 20 20 50 31 20 50 32 20 2a   AddImm  P1 P2 *
bc40: 20 2a 20 2a 0a 2a 2a 20 0a 2a 2a 20 41 64 64 20   * *.** .** Add 
bc50: 74 68 65 20 63 6f 6e 73 74 61 6e 74 20 50 32 20  the constant P2 
bc60: 74 6f 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  to the value in 
bc70: 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 20  register P1..** 
bc80: 54 68 65 20 72 65 73 75 6c 74 20 69 73 20 61 6c  The result is al
bc90: 77 61 79 73 20 61 6e 20 69 6e 74 65 67 65 72 2e  ways an integer.
bca0: 0a 2a 2a 0a 2a 2a 20 54 6f 20 66 6f 72 63 65 20  .**.** To force 
bcb0: 61 6e 79 20 72 65 67 69 73 74 65 72 20 74 6f 20  any register to 
bcc0: 62 65 20 61 6e 20 69 6e 74 65 67 65 72 2c 20 6a  be an integer, j
bcd0: 75 73 74 20 61 64 64 20 30 2e 0a 2a 2f 0a 63 61  ust add 0..*/.ca
bce0: 73 65 20 4f 50 5f 41 64 64 49 6d 6d 3a 20 7b 20  se OP_AddImm: { 
bcf0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e             /* in
bd00: 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  1 */.  pIn1 = &a
bd10: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
bd20: 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
bd30: 28 70 2c 20 70 49 6e 31 29 3b 0a 20 20 73 71 6c  (p, pIn1);.  sql
bd40: 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67  ite3VdbeMemInteg
bd50: 65 72 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 70  erify(pIn1);.  p
bd60: 49 6e 31 2d 3e 75 2e 69 20 2b 3d 20 70 4f 70 2d  In1->u.i += pOp-
bd70: 3e 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  >p2;.  break;.}.
bd80: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 75 73 74  ./* Opcode: Must
bd90: 42 65 49 6e 74 20 50 31 20 50 32 20 2a 20 2a 20  BeInt P1 P2 * * 
bda0: 2a 0a 2a 2a 20 0a 2a 2a 20 46 6f 72 63 65 20 74  *.** .** Force t
bdb0: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
bdc0: 73 74 65 72 20 50 31 20 74 6f 20 62 65 20 61 6e  ster P1 to be an
bdd0: 20 69 6e 74 65 67 65 72 2e 20 20 49 66 20 74 68   integer.  If th
bde0: 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 50 31  e value.** in P1
bdf0: 20 69 73 20 6e 6f 74 20 61 6e 20 69 6e 74 65 67   is not an integ
be00: 65 72 20 61 6e 64 20 63 61 6e 6e 6f 74 20 62 65  er and cannot be
be10: 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f 20   converted into 
be20: 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20 77 69  an integer.** wi
be30: 74 68 6f 75 74 20 64 61 74 61 20 6c 6f 73 73 2c  thout data loss,
be40: 20 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65 64   then jump immed
be50: 69 61 74 65 6c 79 20 74 6f 20 50 32 2c 20 6f 72  iately to P2, or
be60: 20 69 66 20 50 32 3d 3d 30 0a 2a 2a 20 72 61 69   if P2==0.** rai
be70: 73 65 20 61 6e 20 53 51 4c 49 54 45 5f 4d 49 53  se an SQLITE_MIS
be80: 4d 41 54 43 48 20 65 78 63 65 70 74 69 6f 6e 2e  MATCH exception.
be90: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 75 73 74  .*/.case OP_Must
bea0: 42 65 49 6e 74 3a 20 7b 20 20 20 20 20 20 20 20  BeInt: {        
beb0: 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31      /* jump, in1
bec0: 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   */.  pIn1 = &aM
bed0: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  em[pOp->p1];.  a
bee0: 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70 49 6e  pplyAffinity(pIn
bef0: 31 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55  1, SQLITE_AFF_NU
bf00: 4d 45 52 49 43 2c 20 65 6e 63 6f 64 69 6e 67 29  MERIC, encoding)
bf10: 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66  ;.  if( (pIn1->f
bf20: 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d  lags & MEM_Int)=
bf30: 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20 70 4f  =0 ){.    if( pO
bf40: 70 2d 3e 70 32 3d 3d 30 20 29 7b 0a 20 20 20 20  p->p2==0 ){.    
bf50: 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4d 49    rc = SQLITE_MI
bf60: 53 4d 41 54 43 48 3b 0a 20 20 20 20 20 20 67 6f  SMATCH;.      go
bf70: 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
bf80: 65 72 72 6f 72 3b 0a 20 20 20 20 7d 65 6c 73 65  error;.    }else
bf90: 7b 0a 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70  {.      pc = pOp
bfa0: 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 7d 0a  ->p2 - 1;.    }.
bfb0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 4d 65 6d    }else{.    Mem
bfc0: 53 65 74 54 79 70 65 46 6c 61 67 28 70 49 6e 31  SetTypeFlag(pIn1
bfd0: 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d 0a  , MEM_Int);.  }.
bfe0: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e    break;.}..#ifn
bff0: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
c000: 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 2f  FLOATING_POINT./
c010: 2a 20 4f 70 63 6f 64 65 3a 20 52 65 61 6c 41 66  * Opcode: RealAf
c020: 66 69 6e 69 74 79 20 50 31 20 2a 20 2a 20 2a 20  finity P1 * * * 
c030: 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 72 65 67 69 73  *.**.** If regis
c040: 74 65 72 20 50 31 20 68 6f 6c 64 73 20 61 6e 20  ter P1 holds an 
c050: 69 6e 74 65 67 65 72 20 63 6f 6e 76 65 72 74 20  integer convert 
c060: 69 74 20 74 6f 20 61 20 72 65 61 6c 20 76 61 6c  it to a real val
c070: 75 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  ue..**.** This o
c080: 70 63 6f 64 65 20 69 73 20 75 73 65 64 20 77 68  pcode is used wh
c090: 65 6e 20 65 78 74 72 61 63 74 69 6e 67 20 69 6e  en extracting in
c0a0: 66 6f 72 6d 61 74 69 6f 6e 20 66 72 6f 6d 20 61  formation from a
c0b0: 20 63 6f 6c 75 6d 6e 20 74 68 61 74 0a 2a 2a 20   column that.** 
c0c0: 68 61 73 20 52 45 41 4c 20 61 66 66 69 6e 69 74  has REAL affinit
c0d0: 79 2e 20 20 53 75 63 68 20 63 6f 6c 75 6d 6e 20  y.  Such column 
c0e0: 76 61 6c 75 65 73 20 6d 61 79 20 73 74 69 6c 6c  values may still
c0f0: 20 62 65 20 73 74 6f 72 65 64 20 61 73 0a 2a 2a   be stored as.**
c100: 20 69 6e 74 65 67 65 72 73 2c 20 66 6f 72 20 73   integers, for s
c110: 70 61 63 65 20 65 66 66 69 63 69 65 6e 63 79 2c  pace efficiency,
c120: 20 62 75 74 20 61 66 74 65 72 20 65 78 74 72 61   but after extra
c130: 63 74 69 6f 6e 20 77 65 20 77 61 6e 74 20 74 68  ction we want th
c140: 65 6d 0a 2a 2a 20 74 6f 20 68 61 76 65 20 6f 6e  em.** to have on
c150: 6c 79 20 61 20 72 65 61 6c 20 76 61 6c 75 65 2e  ly a real value.
c160: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 61 6c  .*/.case OP_Real
c170: 41 66 66 69 6e 69 74 79 3a 20 7b 20 20 20 20 20  Affinity: {     
c180: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
c190: 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  in1 */.  pIn1 = 
c1a0: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
c1b0: 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67    if( pIn1->flag
c1c0: 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 7b 0a 20  s & MEM_Int ){. 
c1d0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
c1e0: 6d 52 65 61 6c 69 66 79 28 70 49 6e 31 29 3b 0a  mRealify(pIn1);.
c1f0: 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23    }.  break;.}.#
c200: 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53  endif..#ifndef S
c210: 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 41 53 54 0a  QLITE_OMIT_CAST.
c220: 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 6f 54 65 78  /* Opcode: ToTex
c230: 74 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a  t P1 * * * *.**.
c240: 2a 2a 20 46 6f 72 63 65 20 74 68 65 20 76 61 6c  ** Force the val
c250: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
c260: 31 20 74 6f 20 62 65 20 74 65 78 74 2e 0a 2a 2a  1 to be text..**
c270: 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 69 73   If the value is
c280: 20 6e 75 6d 65 72 69 63 2c 20 63 6f 6e 76 65 72   numeric, conver
c290: 74 20 69 74 20 74 6f 20 61 20 73 74 72 69 6e 67  t it to a string
c2a0: 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 65 71   using the.** eq
c2b0: 75 69 76 61 6c 65 6e 74 20 6f 66 20 70 72 69 6e  uivalent of prin
c2c0: 74 66 28 29 2e 20 20 42 6c 6f 62 20 76 61 6c 75  tf().  Blob valu
c2d0: 65 73 20 61 72 65 20 75 6e 63 68 61 6e 67 65 64  es are unchanged
c2e0: 20 61 6e 64 0a 2a 2a 20 61 72 65 20 61 66 74 65   and.** are afte
c2f0: 72 77 61 72 64 73 20 73 69 6d 70 6c 79 20 69 6e  rwards simply in
c300: 74 65 72 70 72 65 74 65 64 20 61 73 20 74 65 78  terpreted as tex
c310: 74 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20  t..**.** A NULL 
c320: 76 61 6c 75 65 20 69 73 20 6e 6f 74 20 63 68 61  value is not cha
c330: 6e 67 65 64 20 62 79 20 74 68 69 73 20 72 6f 75  nged by this rou
c340: 74 69 6e 65 2e 20 20 49 74 20 72 65 6d 61 69 6e  tine.  It remain
c350: 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20  s NULL..*/.case 
c360: 4f 50 5f 54 6f 54 65 78 74 3a 20 7b 20 20 20 20  OP_ToText: {    
c370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
c380: 20 73 61 6d 65 20 61 73 20 54 4b 5f 54 4f 5f 54   same as TK_TO_T
c390: 45 58 54 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49  EXT, in1 */.  pI
c3a0: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
c3b0: 70 31 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54  p1];.  memAboutT
c3c0: 6f 43 68 61 6e 67 65 28 70 2c 20 70 49 6e 31 29  oChange(p, pIn1)
c3d0: 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c  ;.  if( pIn1->fl
c3e0: 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29  ags & MEM_Null )
c3f0: 20 62 72 65 61 6b 3b 0a 20 20 61 73 73 65 72 74   break;.  assert
c400: 28 20 4d 45 4d 5f 53 74 72 3d 3d 28 4d 45 4d 5f  ( MEM_Str==(MEM_
c410: 42 6c 6f 62 3e 3e 33 29 20 29 3b 0a 20 20 70 49  Blob>>3) );.  pI
c420: 6e 31 2d 3e 66 6c 61 67 73 20 7c 3d 20 28 70 49  n1->flags |= (pI
c430: 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 42 6c  n1->flags&MEM_Bl
c440: 6f 62 29 3e 3e 33 3b 0a 20 20 61 70 70 6c 79 41  ob)>>3;.  applyA
c450: 66 66 69 6e 69 74 79 28 70 49 6e 31 2c 20 53 51  ffinity(pIn1, SQ
c460: 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 2c 20 65  LITE_AFF_TEXT, e
c470: 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 72 63 20 3d  ncoding);.  rc =
c480: 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 31   ExpandBlob(pIn1
c490: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e  );.  assert( pIn
c4a0: 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53  1->flags & MEM_S
c4b0: 74 72 20 7c 7c 20 64 62 2d 3e 6d 61 6c 6c 6f 63  tr || db->malloc
c4c0: 46 61 69 6c 65 64 20 29 3b 0a 20 20 70 49 6e 31  Failed );.  pIn1
c4d0: 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 28 4d 45 4d  ->flags &= ~(MEM
c4e0: 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 7c 4d 45  _Int|MEM_Real|ME
c4f0: 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f 5a 65 72 6f 29  M_Blob|MEM_Zero)
c500: 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  ;.  UPDATE_MAX_B
c510: 4c 4f 42 53 49 5a 45 28 70 49 6e 31 29 3b 0a 20  LOBSIZE(pIn1);. 
c520: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
c530: 63 6f 64 65 3a 20 54 6f 42 6c 6f 62 20 50 31 20  code: ToBlob P1 
c540: 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f  * * * *.**.** Fo
c550: 72 63 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e  rce the value in
c560: 20 72 65 67 69 73 74 65 72 20 50 31 20 74 6f 20   register P1 to 
c570: 62 65 20 61 20 42 4c 4f 42 2e 0a 2a 2a 20 49 66  be a BLOB..** If
c580: 20 74 68 65 20 76 61 6c 75 65 20 69 73 20 6e 75   the value is nu
c590: 6d 65 72 69 63 2c 20 63 6f 6e 76 65 72 74 20 69  meric, convert i
c5a0: 74 20 74 6f 20 61 20 73 74 72 69 6e 67 20 66 69  t to a string fi
c5b0: 72 73 74 2e 0a 2a 2a 20 53 74 72 69 6e 67 73 20  rst..** Strings 
c5c0: 61 72 65 20 73 69 6d 70 6c 79 20 72 65 69 6e 74  are simply reint
c5d0: 65 72 70 72 65 74 65 64 20 61 73 20 62 6c 6f 62  erpreted as blob
c5e0: 73 20 77 69 74 68 20 6e 6f 20 63 68 61 6e 67 65  s with no change
c5f0: 0a 2a 2a 20 74 6f 20 74 68 65 20 75 6e 64 65 72  .** to the under
c600: 6c 79 69 6e 67 20 64 61 74 61 2e 0a 2a 2a 0a 2a  lying data..**.*
c610: 2a 20 41 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69  * A NULL value i
c620: 73 20 6e 6f 74 20 63 68 61 6e 67 65 64 20 62 79  s not changed by
c630: 20 74 68 69 73 20 72 6f 75 74 69 6e 65 2e 20 20   this routine.  
c640: 49 74 20 72 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e  It remains NULL.
c650: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 6f 42 6c  .*/.case OP_ToBl
c660: 6f 62 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ob: {           
c670: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
c680: 73 20 54 4b 5f 54 4f 5f 42 4c 4f 42 2c 20 69 6e  s TK_TO_BLOB, in
c690: 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  1 */.  pIn1 = &a
c6a0: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
c6b0: 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20  if( pIn1->flags 
c6c0: 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 20 62 72 65  & MEM_Null ) bre
c6d0: 61 6b 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d  ak;.  if( (pIn1-
c6e0: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f  >flags & MEM_Blo
c6f0: 62 29 3d 3d 30 20 29 7b 0a 20 20 20 20 61 70 70  b)==0 ){.    app
c700: 6c 79 41 66 66 69 6e 69 74 79 28 70 49 6e 31 2c  lyAffinity(pIn1,
c710: 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54   SQLITE_AFF_TEXT
c720: 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20  , encoding);.   
c730: 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66   assert( pIn1->f
c740: 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74 72 20 7c  lags & MEM_Str |
c750: 7c 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c  | db->mallocFail
c760: 65 64 20 29 3b 0a 20 20 20 20 4d 65 6d 53 65 74  ed );.    MemSet
c770: 54 79 70 65 46 6c 61 67 28 70 49 6e 31 2c 20 4d  TypeFlag(pIn1, M
c780: 45 4d 5f 42 6c 6f 62 29 3b 0a 20 20 7d 65 6c 73  EM_Blob);.  }els
c790: 65 7b 0a 20 20 20 20 70 49 6e 31 2d 3e 66 6c 61  e{.    pIn1->fla
c7a0: 67 73 20 26 3d 20 7e 28 4d 45 4d 5f 54 79 70 65  gs &= ~(MEM_Type
c7b0: 4d 61 73 6b 26 7e 4d 45 4d 5f 42 6c 6f 62 29 3b  Mask&~MEM_Blob);
c7c0: 0a 20 20 7d 0a 20 20 55 50 44 41 54 45 5f 4d 41  .  }.  UPDATE_MA
c7d0: 58 5f 42 4c 4f 42 53 49 5a 45 28 70 49 6e 31 29  X_BLOBSIZE(pIn1)
c7e0: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
c7f0: 20 4f 70 63 6f 64 65 3a 20 54 6f 4e 75 6d 65 72   Opcode: ToNumer
c800: 69 63 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a  ic P1 * * * *.**
c810: 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65 20 76 61  .** Force the va
c820: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
c830: 50 31 20 74 6f 20 62 65 20 6e 75 6d 65 72 69 63  P1 to be numeric
c840: 20 28 65 69 74 68 65 72 20 61 6e 0a 2a 2a 20 69   (either an.** i
c850: 6e 74 65 67 65 72 20 6f 72 20 61 20 66 6c 6f 61  nteger or a floa
c860: 74 69 6e 67 2d 70 6f 69 6e 74 20 6e 75 6d 62 65  ting-point numbe
c870: 72 2e 29 0a 2a 2a 20 49 66 20 74 68 65 20 76 61  r.).** If the va
c880: 6c 75 65 20 69 73 20 74 65 78 74 20 6f 72 20 62  lue is text or b
c890: 6c 6f 62 2c 20 74 72 79 20 74 6f 20 63 6f 6e 76  lob, try to conv
c8a0: 65 72 74 20 69 74 20 74 6f 20 61 6e 20 75 73 69  ert it to an usi
c8b0: 6e 67 20 74 68 65 0a 2a 2a 20 65 71 75 69 76 61  ng the.** equiva
c8c0: 6c 65 6e 74 20 6f 66 20 61 74 6f 69 28 29 20 6f  lent of atoi() o
c8d0: 72 20 61 74 6f 66 28 29 20 61 6e 64 20 73 74 6f  r atof() and sto
c8e0: 72 65 20 30 20 69 66 20 6e 6f 20 73 75 63 68 20  re 0 if no such 
c8f0: 63 6f 6e 76 65 72 73 69 6f 6e 20 0a 2a 2a 20 69  conversion .** i
c900: 73 20 70 6f 73 73 69 62 6c 65 2e 0a 2a 2a 0a 2a  s possible..**.*
c910: 2a 20 41 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69  * A NULL value i
c920: 73 20 6e 6f 74 20 63 68 61 6e 67 65 64 20 62 79  s not changed by
c930: 20 74 68 69 73 20 72 6f 75 74 69 6e 65 2e 20 20   this routine.  
c940: 49 74 20 72 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e  It remains NULL.
c950: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 6f 4e 75  .*/.case OP_ToNu
c960: 6d 65 72 69 63 3a 20 7b 20 20 20 20 20 20 20 20  meric: {        
c970: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
c980: 65 20 61 73 20 54 4b 5f 54 4f 5f 4e 55 4d 45 52  e as TK_TO_NUMER
c990: 49 43 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e  IC, in1 */.  pIn
c9a0: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
c9b0: 31 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  1];.  sqlite3Vdb
c9c0: 65 4d 65 6d 4e 75 6d 65 72 69 66 79 28 70 49 6e  eMemNumerify(pIn
c9d0: 31 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23  1);.  break;.}.#
c9e0: 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
c9f0: 4f 4d 49 54 5f 43 41 53 54 20 2a 2f 0a 0a 2f 2a  OMIT_CAST */../*
ca00: 20 4f 70 63 6f 64 65 3a 20 54 6f 49 6e 74 20 50   Opcode: ToInt P
ca10: 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  1 * * * *.**.** 
ca20: 46 6f 72 63 65 20 74 68 65 20 76 61 6c 75 65 20  Force the value 
ca30: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 74  in register P1 t
ca40: 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72 2e  o be an integer.
ca50: 20 20 49 66 0a 2a 2a 20 54 68 65 20 76 61 6c 75    If.** The valu
ca60: 65 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 61  e is currently a
ca70: 20 72 65 61 6c 20 6e 75 6d 62 65 72 2c 20 64 72   real number, dr
ca80: 6f 70 20 69 74 73 20 66 72 61 63 74 69 6f 6e 61  op its fractiona
ca90: 6c 20 70 61 72 74 2e 0a 2a 2a 20 49 66 20 74 68  l part..** If th
caa0: 65 20 76 61 6c 75 65 20 69 73 20 74 65 78 74 20  e value is text 
cab0: 6f 72 20 62 6c 6f 62 2c 20 74 72 79 20 74 6f 20  or blob, try to 
cac0: 63 6f 6e 76 65 72 74 20 69 74 20 74 6f 20 61 6e  convert it to an
cad0: 20 69 6e 74 65 67 65 72 20 75 73 69 6e 67 20 74   integer using t
cae0: 68 65 0a 2a 2a 20 65 71 75 69 76 61 6c 65 6e 74  he.** equivalent
caf0: 20 6f 66 20 61 74 6f 69 28 29 20 61 6e 64 20 73   of atoi() and s
cb00: 74 6f 72 65 20 30 20 69 66 20 6e 6f 20 73 75 63  tore 0 if no suc
cb10: 68 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69 73 20  h conversion is 
cb20: 70 6f 73 73 69 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20  possible..**.** 
cb30: 41 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69 73 20  A NULL value is 
cb40: 6e 6f 74 20 63 68 61 6e 67 65 64 20 62 79 20 74  not changed by t
cb50: 68 69 73 20 72 6f 75 74 69 6e 65 2e 20 20 49 74  his routine.  It
cb60: 20 72 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a   remains NULL..*
cb70: 2f 0a 63 61 73 65 20 4f 50 5f 54 6f 49 6e 74 3a  /.case OP_ToInt:
cb80: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
cb90: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
cba0: 4b 5f 54 4f 5f 49 4e 54 2c 20 69 6e 31 20 2a 2f  K_TO_INT, in1 */
cbb0: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
cbc0: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20  pOp->p1];.  if( 
cbd0: 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn1->flags & M
cbe0: 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20  EM_Null)==0 ){. 
cbf0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
cc00: 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e 31  mIntegerify(pIn1
cc10: 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
cc20: 7d 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  }..#if !defined(
cc30: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 41 53 54  SQLITE_OMIT_CAST
cc40: 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51  ) && !defined(SQ
cc50: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49  LITE_OMIT_FLOATI
cc60: 4e 47 5f 50 4f 49 4e 54 29 0a 2f 2a 20 4f 70 63  NG_POINT)./* Opc
cc70: 6f 64 65 3a 20 54 6f 52 65 61 6c 20 50 31 20 2a  ode: ToReal P1 *
cc80: 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72   * * *.**.** For
cc90: 63 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  ce the value in 
cca0: 72 65 67 69 73 74 65 72 20 50 31 20 74 6f 20 62  register P1 to b
ccb0: 65 20 61 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69  e a floating poi
ccc0: 6e 74 20 6e 75 6d 62 65 72 2e 0a 2a 2a 20 49 66  nt number..** If
ccd0: 20 54 68 65 20 76 61 6c 75 65 20 69 73 20 63 75   The value is cu
cce0: 72 72 65 6e 74 6c 79 20 61 6e 20 69 6e 74 65 67  rrently an integ
ccf0: 65 72 2c 20 63 6f 6e 76 65 72 74 20 69 74 2e 0a  er, convert it..
cd00: 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65 20  ** If the value 
cd10: 69 73 20 74 65 78 74 20 6f 72 20 62 6c 6f 62 2c  is text or blob,
cd20: 20 74 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20   try to convert 
cd30: 69 74 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72  it to an integer
cd40: 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 65 71   using the.** eq
cd50: 75 69 76 61 6c 65 6e 74 20 6f 66 20 61 74 6f 69  uivalent of atoi
cd60: 28 29 20 61 6e 64 20 73 74 6f 72 65 20 30 2e 30  () and store 0.0
cd70: 20 69 66 20 6e 6f 20 73 75 63 68 20 63 6f 6e 76   if no such conv
cd80: 65 72 73 69 6f 6e 20 69 73 20 70 6f 73 73 69 62  ersion is possib
cd90: 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c  le..**.** A NULL
cda0: 20 76 61 6c 75 65 20 69 73 20 6e 6f 74 20 63 68   value is not ch
cdb0: 61 6e 67 65 64 20 62 79 20 74 68 69 73 20 72 6f  anged by this ro
cdc0: 75 74 69 6e 65 2e 20 20 49 74 20 72 65 6d 61 69  utine.  It remai
cdd0: 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65  ns NULL..*/.case
cde0: 20 4f 50 5f 54 6f 52 65 61 6c 3a 20 7b 20 20 20   OP_ToReal: {   
cdf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
ce00: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 54 4f 5f  * same as TK_TO_
ce10: 52 45 41 4c 2c 20 69 6e 31 20 2a 2f 0a 20 20 70  REAL, in1 */.  p
ce20: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
ce30: 3e 70 31 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74  >p1];.  memAbout
ce40: 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 49 6e 31  ToChange(p, pIn1
ce50: 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  );.  if( (pIn1->
ce60: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
ce70: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69  )==0 ){.    sqli
ce80: 74 65 33 56 64 62 65 4d 65 6d 52 65 61 6c 69 66  te3VdbeMemRealif
ce90: 79 28 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20 62  y(pIn1);.  }.  b
cea0: 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  reak;.}.#endif /
ceb0: 2a 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  * !defined(SQLIT
cec0: 45 5f 4f 4d 49 54 5f 43 41 53 54 29 20 26 26 20  E_OMIT_CAST) && 
ced0: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
cee0: 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f  OMIT_FLOATING_PO
cef0: 49 4e 54 29 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f  INT) */../* Opco
cf00: 64 65 3a 20 4c 74 20 50 31 20 50 32 20 50 33 20  de: Lt P1 P2 P3 
cf10: 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70  P4 P5.**.** Comp
cf20: 61 72 65 20 74 68 65 20 76 61 6c 75 65 73 20 69  are the values i
cf30: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 61 6e  n register P1 an
cf40: 64 20 50 33 2e 20 20 49 66 20 72 65 67 28 50 33  d P3.  If reg(P3
cf50: 29 3c 72 65 67 28 50 31 29 20 74 68 65 6e 0a 2a  )<reg(P1) then.*
cf60: 2a 20 6a 75 6d 70 20 74 6f 20 61 64 64 72 65 73  * jump to addres
cf70: 73 20 50 32 2e 20 20 0a 2a 2a 0a 2a 2a 20 49 66  s P2.  .**.** If
cf80: 20 74 68 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50   the SQLITE_JUMP
cf90: 49 46 4e 55 4c 4c 20 62 69 74 20 6f 66 20 50 35  IFNULL bit of P5
cfa0: 20 69 73 20 73 65 74 20 61 6e 64 20 65 69 74 68   is set and eith
cfb0: 65 72 20 72 65 67 28 50 31 29 20 6f 72 0a 2a 2a  er reg(P1) or.**
cfc0: 20 72 65 67 28 50 33 29 20 69 73 20 4e 55 4c 4c   reg(P3) is NULL
cfd0: 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65 20 6a   then take the j
cfe0: 75 6d 70 2e 20 20 49 66 20 74 68 65 20 53 51 4c  ump.  If the SQL
cff0: 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 0a  ITE_JUMPIFNULL .
d000: 2a 2a 20 62 69 74 20 69 73 20 63 6c 65 61 72 20  ** bit is clear 
d010: 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67  then fall throug
d020: 68 20 69 66 20 65 69 74 68 65 72 20 6f 70 65 72  h if either oper
d030: 61 6e 64 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 0a  and is NULL..**.
d040: 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 41 46  ** The SQLITE_AF
d050: 46 5f 4d 41 53 4b 20 70 6f 72 74 69 6f 6e 20 6f  F_MASK portion o
d060: 66 20 50 35 20 6d 75 73 74 20 62 65 20 61 6e 20  f P5 must be an 
d070: 61 66 66 69 6e 69 74 79 20 63 68 61 72 61 63 74  affinity charact
d080: 65 72 20 2d 0a 2a 2a 20 53 51 4c 49 54 45 5f 41  er -.** SQLITE_A
d090: 46 46 5f 54 45 58 54 2c 20 53 51 4c 49 54 45 5f  FF_TEXT, SQLITE_
d0a0: 41 46 46 5f 49 4e 54 45 47 45 52 2c 20 61 6e 64  AFF_INTEGER, and
d0b0: 20 73 6f 20 66 6f 72 74 68 2e 20 41 6e 20 61 74   so forth. An at
d0c0: 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20 0a 2a  tempt is made .*
d0d0: 2a 20 74 6f 20 63 6f 65 72 63 65 20 62 6f 74 68  * to coerce both
d0e0: 20 69 6e 70 75 74 73 20 61 63 63 6f 72 64 69 6e   inputs accordin
d0f0: 67 20 74 6f 20 74 68 69 73 20 61 66 66 69 6e 69  g to this affini
d100: 74 79 20 62 65 66 6f 72 65 20 74 68 65 0a 2a 2a  ty before the.**
d110: 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 6d   comparison is m
d120: 61 64 65 2e 20 49 66 20 74 68 65 20 53 51 4c 49  ade. If the SQLI
d130: 54 45 5f 41 46 46 5f 4d 41 53 4b 20 69 73 20 30  TE_AFF_MASK is 0
d140: 78 30 30 2c 20 74 68 65 6e 20 6e 75 6d 65 72 69  x00, then numeri
d150: 63 0a 2a 2a 20 61 66 66 69 6e 69 74 79 20 69 73  c.** affinity is
d160: 20 75 73 65 64 2e 20 4e 6f 74 65 20 74 68 61 74   used. Note that
d170: 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 63 6f   the affinity co
d180: 6e 76 65 72 73 69 6f 6e 73 20 61 72 65 20 73 74  nversions are st
d190: 6f 72 65 64 0a 2a 2a 20 62 61 63 6b 20 69 6e 74  ored.** back int
d1a0: 6f 20 74 68 65 20 69 6e 70 75 74 20 72 65 67 69  o the input regi
d1b0: 73 74 65 72 73 20 50 31 20 61 6e 64 20 50 33 2e  sters P1 and P3.
d1c0: 20 20 53 6f 20 74 68 69 73 20 6f 70 63 6f 64 65    So this opcode
d1d0: 20 63 61 6e 20 63 61 75 73 65 0a 2a 2a 20 70 65   can cause.** pe
d1e0: 72 73 69 73 74 65 6e 74 20 63 68 61 6e 67 65 73  rsistent changes
d1f0: 20 74 6f 20 72 65 67 69 73 74 65 72 73 20 50 31   to registers P1
d200: 20 61 6e 64 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 4f   and P3..**.** O
d210: 6e 63 65 20 61 6e 79 20 63 6f 6e 76 65 72 73 69  nce any conversi
d220: 6f 6e 73 20 68 61 76 65 20 74 61 6b 65 6e 20 70  ons have taken p
d230: 6c 61 63 65 2c 20 61 6e 64 20 6e 65 69 74 68 65  lace, and neithe
d240: 72 20 76 61 6c 75 65 20 69 73 20 4e 55 4c 4c 2c  r value is NULL,
d250: 20 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 73 20   .** the values 
d260: 61 72 65 20 63 6f 6d 70 61 72 65 64 2e 20 49 66  are compared. If
d270: 20 62 6f 74 68 20 76 61 6c 75 65 73 20 61 72 65   both values are
d280: 20 62 6c 6f 62 73 20 74 68 65 6e 20 6d 65 6d 63   blobs then memc
d290: 6d 70 28 29 20 69 73 0a 2a 2a 20 75 73 65 64 20  mp() is.** used 
d2a0: 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65  to determine the
d2b0: 20 72 65 73 75 6c 74 73 20 6f 66 20 74 68 65 20   results of the 
d2c0: 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 49 66 20  comparison.  If 
d2d0: 62 6f 74 68 20 76 61 6c 75 65 73 0a 2a 2a 20 61  both values.** a
d2e0: 72 65 20 74 65 78 74 2c 20 74 68 65 6e 20 74 68  re text, then th
d2f0: 65 20 61 70 70 72 6f 70 72 69 61 74 65 20 63 6f  e appropriate co
d300: 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e  llating function
d310: 20 73 70 65 63 69 66 69 65 64 20 69 6e 0a 2a 2a   specified in.**
d320: 20 50 34 20 69 73 20 20 75 73 65 64 20 74 6f 20   P4 is  used to 
d330: 64 6f 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f  do the compariso
d340: 6e 2e 20 20 49 66 20 50 34 20 69 73 20 6e 6f 74  n.  If P4 is not
d350: 20 73 70 65 63 69 66 69 65 64 20 74 68 65 6e 0a   specified then.
d360: 2a 2a 20 6d 65 6d 63 6d 70 28 29 20 69 73 20 75  ** memcmp() is u
d370: 73 65 64 20 74 6f 20 63 6f 6d 70 61 72 65 20 74  sed to compare t
d380: 65 78 74 20 73 74 72 69 6e 67 2e 20 20 49 66 20  ext string.  If 
d390: 62 6f 74 68 20 76 61 6c 75 65 73 20 61 72 65 0a  both values are.
d3a0: 2a 2a 20 6e 75 6d 65 72 69 63 2c 20 74 68 65 6e  ** numeric, then
d3b0: 20 61 20 6e 75 6d 65 72 69 63 20 63 6f 6d 70 61   a numeric compa
d3c0: 72 69 73 6f 6e 20 69 73 20 75 73 65 64 2e 20 49  rison is used. I
d3d0: 66 20 74 68 65 20 74 77 6f 20 76 61 6c 75 65 73  f the two values
d3e0: 0a 2a 2a 20 61 72 65 20 6f 66 20 64 69 66 66 65  .** are of diffe
d3f0: 72 65 6e 74 20 74 79 70 65 73 2c 20 74 68 65 6e  rent types, then
d400: 20 6e 75 6d 62 65 72 73 20 61 72 65 20 63 6f 6e   numbers are con
d410: 73 69 64 65 72 65 64 20 6c 65 73 73 20 74 68 61  sidered less tha
d420: 6e 0a 2a 2a 20 73 74 72 69 6e 67 73 20 61 6e 64  n.** strings and
d430: 20 73 74 72 69 6e 67 73 20 61 72 65 20 63 6f 6e   strings are con
d440: 73 69 64 65 72 65 64 20 6c 65 73 73 20 74 68 61  sidered less tha
d450: 6e 20 62 6c 6f 62 73 2e 0a 2a 2a 0a 2a 2a 20 49  n blobs..**.** I
d460: 66 20 74 68 65 20 53 51 4c 49 54 45 5f 53 54 4f  f the SQLITE_STO
d470: 52 45 50 32 20 62 69 74 20 6f 66 20 50 35 20 69  REP2 bit of P5 i
d480: 73 20 73 65 74 2c 20 74 68 65 6e 20 64 6f 20 6e  s set, then do n
d490: 6f 74 20 6a 75 6d 70 2e 20 20 49 6e 73 74 65 61  ot jump.  Instea
d4a0: 64 2c 0a 2a 2a 20 73 74 6f 72 65 20 61 20 62 6f  d,.** store a bo
d4b0: 6f 6c 65 61 6e 20 72 65 73 75 6c 74 20 28 65 69  olean result (ei
d4c0: 74 68 65 72 20 30 2c 20 6f 72 20 31 2c 20 6f 72  ther 0, or 1, or
d4d0: 20 4e 55 4c 4c 29 20 69 6e 20 72 65 67 69 73 74   NULL) in regist
d4e0: 65 72 20 50 32 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  er P2..*/./* Opc
d4f0: 6f 64 65 3a 20 4e 65 20 50 31 20 50 32 20 50 33  ode: Ne P1 P2 P3
d500: 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69   P4 P5.**.** Thi
d510: 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b  s works just lik
d520: 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20  e the Lt opcode 
d530: 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20  except that the 
d540: 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66  jump is taken if
d550: 0a 2a 2a 20 74 68 65 20 6f 70 65 72 61 6e 64 73  .** the operands
d560: 20 69 6e 20 72 65 67 69 73 74 65 72 73 20 50 31   in registers P1
d570: 20 61 6e 64 20 50 33 20 61 72 65 20 6e 6f 74 20   and P3 are not 
d580: 65 71 75 61 6c 2e 20 20 53 65 65 20 74 68 65 20  equal.  See the 
d590: 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 0a 2a 2a  Lt opcode for.**
d5a0: 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
d5b0: 72 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49  rmation..**.** I
d5c0: 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20  f SQLITE_NULLEQ 
d5d0: 69 73 20 73 65 74 20 69 6e 20 50 35 20 74 68 65  is set in P5 the
d5e0: 6e 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20  n the result of 
d5f0: 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 61 6c  comparison is al
d600: 77 61 79 73 20 65 69 74 68 65 72 0a 2a 2a 20 74  ways either.** t
d610: 72 75 65 20 6f 72 20 66 61 6c 73 65 20 61 6e 64  rue or false and
d620: 20 69 73 20 6e 65 76 65 72 20 4e 55 4c 4c 2e 20   is never NULL. 
d630: 20 49 66 20 62 6f 74 68 20 6f 70 65 72 61 6e 64   If both operand
d640: 73 20 61 72 65 20 4e 55 4c 4c 20 74 68 65 6e 20  s are NULL then 
d650: 74 68 65 20 72 65 73 75 6c 74 0a 2a 2a 20 6f 66  the result.** of
d660: 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 66   comparison is f
d670: 61 6c 73 65 2e 20 20 49 66 20 65 69 74 68 65 72  alse.  If either
d680: 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c   operand is NULL
d690: 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74   then the result
d6a0: 20 69 73 20 74 72 75 65 2e 0a 2a 2a 20 49 66 20   is true..** If 
d6b0: 6e 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20  neither operand 
d6c0: 69 73 20 4e 55 4c 4c 20 74 68 65 20 74 68 65 20  is NULL the the 
d6d0: 72 65 73 75 6c 74 20 69 73 20 74 68 65 20 73 61  result is the sa
d6e0: 6d 65 20 61 73 20 69 74 20 77 6f 75 6c 64 20 62  me as it would b
d6f0: 65 20 69 66 0a 2a 2a 20 74 68 65 20 53 51 4c 49  e if.** the SQLI
d700: 54 45 5f 4e 55 4c 4c 45 51 20 66 6c 61 67 20 77  TE_NULLEQ flag w
d710: 65 72 65 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d  ere omitted from
d720: 20 50 35 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64   P5..*/./* Opcod
d730: 65 3a 20 45 71 20 50 31 20 50 32 20 50 33 20 50  e: Eq P1 P2 P3 P
d740: 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  4 P5.**.** This 
d750: 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20  works just like 
d760: 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78  the Lt opcode ex
d770: 63 65 70 74 20 74 68 61 74 20 74 68 65 20 6a 75  cept that the ju
d780: 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a  mp is taken if.*
d790: 2a 20 74 68 65 20 6f 70 65 72 61 6e 64 73 20 69  * the operands i
d7a0: 6e 20 72 65 67 69 73 74 65 72 73 20 50 31 20 61  n registers P1 a
d7b0: 6e 64 20 50 33 20 61 72 65 20 65 71 75 61 6c 2e  nd P3 are equal.
d7c0: 0a 2a 2a 20 53 65 65 20 74 68 65 20 4c 74 20 6f  .** See the Lt o
d7d0: 70 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69  pcode for additi
d7e0: 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  onal information
d7f0: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 53 51 4c 49 54  ..**.** If SQLIT
d800: 45 5f 4e 55 4c 4c 45 51 20 69 73 20 73 65 74 20  E_NULLEQ is set 
d810: 69 6e 20 50 35 20 74 68 65 6e 20 74 68 65 20 72  in P5 then the r
d820: 65 73 75 6c 74 20 6f 66 20 63 6f 6d 70 61 72 69  esult of compari
d830: 73 6f 6e 20 69 73 20 61 6c 77 61 79 73 20 65 69  son is always ei
d840: 74 68 65 72 0a 2a 2a 20 74 72 75 65 20 6f 72 20  ther.** true or 
d850: 66 61 6c 73 65 20 61 6e 64 20 69 73 20 6e 65 76  false and is nev
d860: 65 72 20 4e 55 4c 4c 2e 20 20 49 66 20 62 6f 74  er NULL.  If bot
d870: 68 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20 4e  h operands are N
d880: 55 4c 4c 20 74 68 65 6e 20 74 68 65 20 72 65 73  ULL then the res
d890: 75 6c 74 0a 2a 2a 20 6f 66 20 63 6f 6d 70 61 72  ult.** of compar
d8a0: 69 73 6f 6e 20 69 73 20 74 72 75 65 2e 20 20 49  ison is true.  I
d8b0: 66 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64  f either operand
d8c0: 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68   is NULL then th
d8d0: 65 20 72 65 73 75 6c 74 20 69 73 20 66 61 6c 73  e result is fals
d8e0: 65 2e 0a 2a 2a 20 49 66 20 6e 65 69 74 68 65 72  e..** If neither
d8f0: 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c   operand is NULL
d900: 20 74 68 65 20 74 68 65 20 72 65 73 75 6c 74 20   the the result 
d910: 69 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 69  is the same as i
d920: 74 20 77 6f 75 6c 64 20 62 65 20 69 66 0a 2a 2a  t would be if.**
d930: 20 74 68 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c   the SQLITE_NULL
d940: 45 51 20 66 6c 61 67 20 77 65 72 65 20 6f 6d 69  EQ flag were omi
d950: 74 74 65 64 20 66 72 6f 6d 20 50 35 2e 0a 2a 2f  tted from P5..*/
d960: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 65 20 50  ./* Opcode: Le P
d970: 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
d980: 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a  .** This works j
d990: 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20  ust like the Lt 
d9a0: 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20 74 68  opcode except th
d9b0: 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74  at the jump is t
d9c0: 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 63  aken if.** the c
d9d0: 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74  ontent of regist
d9e0: 65 72 20 50 33 20 69 73 20 6c 65 73 73 20 74 68  er P3 is less th
d9f0: 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74  an or equal to t
da00: 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a  he content of.**
da10: 20 72 65 67 69 73 74 65 72 20 50 31 2e 20 20 53   register P1.  S
da20: 65 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65  ee the Lt opcode
da30: 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20   for additional 
da40: 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a  information..*/.
da50: 2f 2a 20 4f 70 63 6f 64 65 3a 20 47 74 20 50 31  /* Opcode: Gt P1
da60: 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a   P2 P3 P4 P5.**.
da70: 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75  ** This works ju
da80: 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f  st like the Lt o
da90: 70 63 6f 64 65 20 65 78 63 65 70 74 20 74 68 61  pcode except tha
daa0: 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61  t the jump is ta
dab0: 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f  ken if.** the co
dac0: 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65  ntent of registe
dad0: 72 20 50 33 20 69 73 20 67 72 65 61 74 65 72 20  r P3 is greater 
dae0: 74 68 61 6e 20 74 68 65 20 63 6f 6e 74 65 6e 74  than the content
daf0: 20 6f 66 0a 2a 2a 20 72 65 67 69 73 74 65 72 20   of.** register 
db00: 50 31 2e 20 20 53 65 65 20 74 68 65 20 4c 74 20  P1.  See the Lt 
db10: 6f 70 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74  opcode for addit
db20: 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ional informatio
db30: 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  n..*/./* Opcode:
db40: 20 47 65 20 50 31 20 50 32 20 50 33 20 50 34 20   Ge P1 P2 P3 P4 
db50: 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f  P5.**.** This wo
db60: 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 74 68  rks just like th
db70: 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78 63 65  e Lt opcode exce
db80: 70 74 20 74 68 61 74 20 74 68 65 20 6a 75 6d 70  pt that the jump
db90: 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20   is taken if.** 
dba0: 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72  the content of r
dbb0: 65 67 69 73 74 65 72 20 50 33 20 69 73 20 67 72  egister P3 is gr
dbc0: 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71  eater than or eq
dbd0: 75 61 6c 20 74 6f 20 74 68 65 20 63 6f 6e 74 65  ual to the conte
dbe0: 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69 73 74 65  nt of.** registe
dbf0: 72 20 50 31 2e 20 20 53 65 65 20 74 68 65 20 4c  r P1.  See the L
dc00: 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64 64  t opcode for add
dc10: 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74  itional informat
dc20: 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ion..*/.case OP_
dc30: 45 71 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  Eq:             
dc40: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
dc50: 45 51 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69  EQ, jump, in1, i
dc60: 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65  n3 */.case OP_Ne
dc70: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :               
dc80: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4e 45  /* same as TK_NE
dc90: 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33  , jump, in1, in3
dca0: 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 74 3a 20   */.case OP_Lt: 
dcb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
dcc0: 20 73 61 6d 65 20 61 73 20 54 4b 5f 4c 54 2c 20   same as TK_LT, 
dcd0: 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a  jump, in1, in3 *
dce0: 2f 0a 63 61 73 65 20 4f 50 5f 4c 65 3a 20 20 20  /.case OP_Le:   
dcf0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
dd00: 61 6d 65 20 61 73 20 54 4b 5f 4c 45 2c 20 6a 75  ame as TK_LE, ju
dd10: 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a  mp, in1, in3 */.
dd20: 63 61 73 65 20 4f 50 5f 47 74 3a 20 20 20 20 20  case OP_Gt:     
dd30: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
dd40: 65 20 61 73 20 54 4b 5f 47 54 2c 20 6a 75 6d 70  e as TK_GT, jump
dd50: 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61  , in1, in3 */.ca
dd60: 73 65 20 4f 50 5f 47 65 3a 20 7b 20 20 20 20 20  se OP_Ge: {     
dd70: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
dd80: 61 73 20 54 4b 5f 47 45 2c 20 6a 75 6d 70 2c 20  as TK_GE, jump, 
dd90: 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e  in1, in3 */.  in
dda0: 74 20 72 65 73 3b 20 20 20 20 20 20 20 20 20 20  t res;          
ddb0: 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20 74    /* Result of t
ddc0: 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 66  he comparison of
ddd0: 20 70 49 6e 31 20 61 67 61 69 6e 73 74 20 70 49   pIn1 against pI
dde0: 6e 33 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66  n3 */.  char aff
ddf0: 69 6e 69 74 79 3b 20 20 20 20 20 20 2f 2a 20 41  inity;      /* A
de00: 66 66 69 6e 69 74 79 20 74 6f 20 75 73 65 20 66  ffinity to use f
de10: 6f 72 20 63 6f 6d 70 61 72 69 73 6f 6e 20 2a 2f  or comparison */
de20: 0a 20 20 75 31 36 20 66 6c 61 67 73 31 3b 20 20  .  u16 flags1;  
de30: 20 20 20 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f         /* Copy o
de40: 66 20 69 6e 69 74 69 61 6c 20 76 61 6c 75 65 20  f initial value 
de50: 6f 66 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 2a  of pIn1->flags *
de60: 2f 0a 20 20 75 31 36 20 66 6c 61 67 73 33 3b 20  /.  u16 flags3; 
de70: 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 70 79 20          /* Copy 
de80: 6f 66 20 69 6e 69 74 69 61 6c 20 76 61 6c 75 65  of initial value
de90: 20 6f 66 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20   of pIn3->flags 
dea0: 2a 2f 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d  */..  pIn1 = &aM
deb0: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70  em[pOp->p1];.  p
dec0: 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In3 = &aMem[pOp-
ded0: 3e 70 33 5d 3b 0a 20 20 66 6c 61 67 73 31 20 3d  >p3];.  flags1 =
dee0: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 3b 0a 20 20   pIn1->flags;.  
def0: 66 6c 61 67 73 33 20 3d 20 70 49 6e 33 2d 3e 66  flags3 = pIn3->f
df00: 6c 61 67 73 3b 0a 20 20 69 66 28 20 28 70 49 6e  lags;.  if( (pIn
df10: 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49 6e 33 2d  1->flags | pIn3-
df20: 3e 66 6c 61 67 73 29 26 4d 45 4d 5f 4e 75 6c 6c  >flags)&MEM_Null
df30: 20 29 7b 0a 20 20 20 20 2f 2a 20 4f 6e 65 20 6f   ){.    /* One o
df40: 72 20 62 6f 74 68 20 6f 70 65 72 61 6e 64 73 20  r both operands 
df50: 61 72 65 20 4e 55 4c 4c 20 2a 2f 0a 20 20 20 20  are NULL */.    
df60: 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 53 51  if( pOp->p5 & SQ
df70: 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 29 7b 0a 20  LITE_NULLEQ ){. 
df80: 20 20 20 20 20 2f 2a 20 49 66 20 53 51 4c 49 54       /* If SQLIT
df90: 45 5f 4e 55 4c 4c 45 51 20 69 73 20 73 65 74 20  E_NULLEQ is set 
dfa0: 28 77 68 69 63 68 20 77 69 6c 6c 20 6f 6e 6c 79  (which will only
dfb0: 20 68 61 70 70 65 6e 20 69 66 20 74 68 65 20 6f   happen if the o
dfc0: 70 65 72 61 74 6f 72 20 69 73 0a 20 20 20 20 20  perator is.     
dfd0: 20 2a 2a 20 4f 50 5f 45 71 20 6f 72 20 4f 50 5f   ** OP_Eq or OP_
dfe0: 4e 65 29 20 74 68 65 6e 20 74 61 6b 65 20 74 68  Ne) then take th
dff0: 65 20 6a 75 6d 70 20 6f 72 20 6e 6f 74 20 64 65  e jump or not de
e000: 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68  pending on wheth
e010: 65 72 0a 20 20 20 20 20 20 2a 2a 20 6f 72 20 6e  er.      ** or n
e020: 6f 74 20 62 6f 74 68 20 6f 70 65 72 61 6e 64 73  ot both operands
e030: 20 61 72 65 20 6e 75 6c 6c 2e 0a 20 20 20 20 20   are null..     
e040: 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74   */.      assert
e050: 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
e060: 50 5f 45 71 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63  P_Eq || pOp->opc
e070: 6f 64 65 3d 3d 4f 50 5f 4e 65 20 29 3b 0a 20 20  ode==OP_Ne );.  
e080: 20 20 20 20 72 65 73 20 3d 20 28 70 49 6e 31 2d      res = (pIn1-
e090: 3e 66 6c 61 67 73 20 26 20 70 49 6e 33 2d 3e 66  >flags & pIn3->f
e0a0: 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29  lags & MEM_Null)
e0b0: 3d 3d 30 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  ==0;.    }else{.
e0c0: 20 20 20 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f        /* SQLITE_
e0d0: 4e 55 4c 4c 45 51 20 69 73 20 63 6c 65 61 72 20  NULLEQ is clear 
e0e0: 61 6e 64 20 61 74 20 6c 65 61 73 74 20 6f 6e 65  and at least one
e0f0: 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c   operand is NULL
e100: 2c 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 6e 20  ,.      ** then 
e110: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 61 6c  the result is al
e120: 77 61 79 73 20 4e 55 4c 4c 2e 0a 20 20 20 20 20  ways NULL..     
e130: 20 2a 2a 20 54 68 65 20 6a 75 6d 70 20 69 73 20   ** The jump is 
e140: 74 61 6b 65 6e 20 69 66 20 74 68 65 20 53 51 4c  taken if the SQL
e150: 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 62  ITE_JUMPIFNULL b
e160: 69 74 20 69 73 20 73 65 74 2e 0a 20 20 20 20 20  it is set..     
e170: 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70 4f   */.      if( pO
e180: 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 53  p->p5 & SQLITE_S
e190: 54 4f 52 45 50 32 20 29 7b 0a 20 20 20 20 20 20  TOREP2 ){.      
e1a0: 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
e1b0: 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 20 20 20  Op->p2];.       
e1c0: 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
e1d0: 70 4f 75 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b  pOut, MEM_Null);
e1e0: 0a 20 20 20 20 20 20 20 20 52 45 47 49 53 54 45  .        REGISTE
e1f0: 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c  R_TRACE(pOp->p2,
e200: 20 70 4f 75 74 29 3b 0a 20 20 20 20 20 20 7d 65   pOut);.      }e
e210: 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e 70 35 20  lse if( pOp->p5 
e220: 26 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e  & SQLITE_JUMPIFN
e230: 55 4c 4c 20 29 7b 0a 20 20 20 20 20 20 20 20 70  ULL ){.        p
e240: 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20  c = pOp->p2-1;. 
e250: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 62 72 65       }.      bre
e260: 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73  ak;.    }.  }els
e270: 65 7b 0a 20 20 20 20 2f 2a 20 4e 65 69 74 68 65  e{.    /* Neithe
e280: 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c  r operand is NUL
e290: 4c 2e 20 20 44 6f 20 61 20 63 6f 6d 70 61 72 69  L.  Do a compari
e2a0: 73 6f 6e 2e 20 2a 2f 0a 20 20 20 20 61 66 66 69  son. */.    affi
e2b0: 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70 35 20 26  nity = pOp->p5 &
e2c0: 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b   SQLITE_AFF_MASK
e2d0: 3b 0a 20 20 20 20 69 66 28 20 61 66 66 69 6e 69  ;.    if( affini
e2e0: 74 79 20 29 7b 0a 20 20 20 20 20 20 61 70 70 6c  ty ){.      appl
e2f0: 79 41 66 66 69 6e 69 74 79 28 70 49 6e 31 2c 20  yAffinity(pIn1, 
e300: 61 66 66 69 6e 69 74 79 2c 20 65 6e 63 6f 64 69  affinity, encodi
e310: 6e 67 29 3b 0a 20 20 20 20 20 20 61 70 70 6c 79  ng);.      apply
e320: 41 66 66 69 6e 69 74 79 28 70 49 6e 33 2c 20 61  Affinity(pIn3, a
e330: 66 66 69 6e 69 74 79 2c 20 65 6e 63 6f 64 69 6e  ffinity, encodin
e340: 67 29 3b 0a 20 20 20 20 20 20 69 66 28 20 64 62  g);.      if( db
e350: 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29  ->mallocFailed )
e360: 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
e370: 20 20 7d 0a 0a 20 20 20 20 61 73 73 65 72 74 28    }..    assert(
e380: 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
e390: 5f 43 4f 4c 4c 53 45 51 20 7c 7c 20 70 4f 70 2d  _COLLSEQ || pOp-
e3a0: 3e 70 34 2e 70 43 6f 6c 6c 3d 3d 30 20 29 3b 0a  >p4.pColl==0 );.
e3b0: 20 20 20 20 45 78 70 61 6e 64 42 6c 6f 62 28 70      ExpandBlob(p
e3c0: 49 6e 31 29 3b 0a 20 20 20 20 45 78 70 61 6e 64  In1);.    Expand
e3d0: 42 6c 6f 62 28 70 49 6e 33 29 3b 0a 20 20 20 20  Blob(pIn3);.    
e3e0: 72 65 73 20 3d 20 73 71 6c 69 74 65 33 4d 65 6d  res = sqlite3Mem
e3f0: 43 6f 6d 70 61 72 65 28 70 49 6e 33 2c 20 70 49  Compare(pIn3, pI
e400: 6e 31 2c 20 70 4f 70 2d 3e 70 34 2e 70 43 6f 6c  n1, pOp->p4.pCol
e410: 6c 29 3b 0a 20 20 7d 0a 20 20 73 77 69 74 63 68  l);.  }.  switch
e420: 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b  ( pOp->opcode ){
e430: 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 45 71 3a  .    case OP_Eq:
e440: 20 20 20 20 72 65 73 20 3d 20 72 65 73 3d 3d 30      res = res==0
e450: 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20  ;     break;.   
e460: 20 63 61 73 65 20 4f 50 5f 4e 65 3a 20 20 20 20   case OP_Ne:    
e470: 72 65 73 20 3d 20 72 65 73 21 3d 30 3b 20 20 20  res = res!=0;   
e480: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
e490: 65 20 4f 50 5f 4c 74 3a 20 20 20 20 72 65 73 20  e OP_Lt:    res 
e4a0: 3d 20 72 65 73 3c 30 3b 20 20 20 20 20 20 62 72  = res<0;      br
e4b0: 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f 50  eak;.    case OP
e4c0: 5f 4c 65 3a 20 20 20 20 72 65 73 20 3d 20 72 65  _Le:    res = re
e4d0: 73 3c 3d 30 3b 20 20 20 20 20 62 72 65 61 6b 3b  s<=0;     break;
e4e0: 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 47 74 3a  .    case OP_Gt:
e4f0: 20 20 20 20 72 65 73 20 3d 20 72 65 73 3e 30 3b      res = res>0;
e500: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
e510: 20 64 65 66 61 75 6c 74 3a 20 20 20 20 20 20 20   default:       
e520: 72 65 73 20 3d 20 72 65 73 3e 3d 30 3b 20 20 20  res = res>=0;   
e530: 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20    break;.  }..  
e540: 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 53 51  if( pOp->p5 & SQ
e550: 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 29 7b 0a  LITE_STOREP2 ){.
e560: 20 20 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d      pOut = &aMem
e570: 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 6d  [pOp->p2];.    m
e580: 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
e590: 70 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 4d 65  p, pOut);.    Me
e5a0: 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75  mSetTypeFlag(pOu
e5b0: 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 20  t, MEM_Int);.   
e5c0: 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 72 65 73   pOut->u.i = res
e5d0: 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54  ;.    REGISTER_T
e5e0: 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f  RACE(pOp->p2, pO
e5f0: 75 74 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  ut);.  }else if(
e600: 20 72 65 73 20 29 7b 0a 20 20 20 20 70 63 20 3d   res ){.    pc =
e610: 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d 0a   pOp->p2-1;.  }.
e620: 0a 20 20 2f 2a 20 55 6e 64 6f 20 61 6e 79 20 63  .  /* Undo any c
e630: 68 61 6e 67 65 73 20 6d 61 64 65 20 62 79 20 61  hanges made by a
e640: 70 70 6c 79 41 66 66 69 6e 69 74 79 28 29 20 74  pplyAffinity() t
e650: 6f 20 74 68 65 20 69 6e 70 75 74 20 72 65 67 69  o the input regi
e660: 73 74 65 72 73 2e 20 2a 2f 0a 20 20 70 49 6e 31  sters. */.  pIn1
e670: 2d 3e 66 6c 61 67 73 20 3d 20 28 70 49 6e 31 2d  ->flags = (pIn1-
e680: 3e 66 6c 61 67 73 26 7e 4d 45 4d 5f 54 79 70 65  >flags&~MEM_Type
e690: 4d 61 73 6b 29 20 7c 20 28 66 6c 61 67 73 31 26  Mask) | (flags1&
e6a0: 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 29 3b 0a 20  MEM_TypeMask);. 
e6b0: 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 3d 20 28   pIn3->flags = (
e6c0: 70 49 6e 33 2d 3e 66 6c 61 67 73 26 7e 4d 45 4d  pIn3->flags&~MEM
e6d0: 5f 54 79 70 65 4d 61 73 6b 29 20 7c 20 28 66 6c  _TypeMask) | (fl
e6e0: 61 67 73 33 26 4d 45 4d 5f 54 79 70 65 4d 61 73  ags3&MEM_TypeMas
e6f0: 6b 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  k);.  break;.}..
e700: 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 65 72 6d 75  /* Opcode: Permu
e710: 74 61 74 69 6f 6e 20 2a 20 2a 20 2a 20 50 34 20  tation * * * P4 
e720: 2a 0a 2a 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20  *.**.** Set the 
e730: 70 65 72 6d 75 74 61 74 69 6f 6e 20 75 73 65 64  permutation used
e740: 20 62 79 20 74 68 65 20 4f 50 5f 43 6f 6d 70 61   by the OP_Compa
e750: 72 65 20 6f 70 65 72 61 74 6f 72 20 74 6f 20 62  re operator to b
e760: 65 20 74 68 65 20 61 72 72 61 79 0a 2a 2a 20 6f  e the array.** o
e770: 66 20 69 6e 74 65 67 65 72 73 20 69 6e 20 50 34  f integers in P4
e780: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 70 65 72 6d  ..**.** The perm
e790: 75 74 61 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20  utation is only 
e7a0: 76 61 6c 69 64 20 75 6e 74 69 6c 20 74 68 65 20  valid until the 
e7b0: 6e 65 78 74 20 4f 50 5f 50 65 72 6d 75 74 61 74  next OP_Permutat
e7c0: 69 6f 6e 2c 20 4f 50 5f 43 6f 6d 70 61 72 65 2c  ion, OP_Compare,
e7d0: 0a 2a 2a 20 4f 50 5f 48 61 6c 74 2c 20 6f 72 20  .** OP_Halt, or 
e7e0: 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2e 20 20 54  OP_ResultRow.  T
e7f0: 79 70 69 63 61 6c 6c 79 20 74 68 65 20 4f 50 5f  ypically the OP_
e800: 50 65 72 6d 75 74 61 74 69 6f 6e 20 73 68 6f 75  Permutation shou
e810: 6c 64 20 6f 63 63 75 72 0a 2a 2a 20 69 6d 6d 65  ld occur.** imme
e820: 64 69 61 74 65 6c 79 20 70 72 69 6f 72 20 74 6f  diately prior to
e830: 20 74 68 65 20 4f 50 5f 43 6f 6d 70 61 72 65 2e   the OP_Compare.
e840: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 65 72 6d  .*/.case OP_Perm
e850: 75 74 61 74 69 6f 6e 3a 20 7b 0a 20 20 61 73 73  utation: {.  ass
e860: 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65  ert( pOp->p4type
e870: 3d 3d 50 34 5f 49 4e 54 41 52 52 41 59 20 29 3b  ==P4_INTARRAY );
e880: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
e890: 70 34 2e 61 69 20 29 3b 0a 20 20 61 50 65 72 6d  p4.ai );.  aPerm
e8a0: 75 74 65 20 3d 20 70 4f 70 2d 3e 70 34 2e 61 69  ute = pOp->p4.ai
e8b0: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
e8c0: 20 4f 70 63 6f 64 65 3a 20 43 6f 6d 70 61 72 65   Opcode: Compare
e8d0: 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a   P1 P2 P3 P4 *.*
e8e0: 2a 0a 2a 2a 20 43 6f 6d 70 61 72 65 20 74 77 6f  *.** Compare two
e8f0: 20 76 65 63 74 6f 72 73 20 6f 66 20 72 65 67 69   vectors of regi
e900: 73 74 65 72 73 20 69 6e 20 72 65 67 28 50 31 29  sters in reg(P1)
e910: 2e 2e 72 65 67 28 50 31 2b 50 33 2d 31 29 20 28  ..reg(P1+P3-1) (
e920: 63 61 6c 6c 20 74 68 69 73 0a 2a 2a 20 76 65 63  call this.** vec
e930: 74 6f 72 20 22 41 22 29 20 61 6e 64 20 69 6e 20  tor "A") and in 
e940: 72 65 67 28 50 32 29 2e 2e 72 65 67 28 50 32 2b  reg(P2)..reg(P2+
e950: 50 33 2d 31 29 20 28 22 42 22 29 2e 20 20 53 61  P3-1) ("B").  Sa
e960: 76 65 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  ve the result of
e970: 0a 2a 2a 20 74 68 65 20 63 6f 6d 70 61 72 69 73  .** the comparis
e980: 6f 6e 20 66 6f 72 20 75 73 65 20 62 79 20 74 68  on for use by th
e990: 65 20 6e 65 78 74 20 4f 50 5f 4a 75 6d 70 20 69  e next OP_Jump i
e9a0: 6e 73 74 72 75 63 74 2e 0a 2a 2a 0a 2a 2a 20 50  nstruct..**.** P
e9b0: 34 20 69 73 20 61 20 4b 65 79 49 6e 66 6f 20 73  4 is a KeyInfo s
e9c0: 74 72 75 63 74 75 72 65 20 74 68 61 74 20 64 65  tructure that de
e9d0: 66 69 6e 65 73 20 63 6f 6c 6c 61 74 69 6e 67 20  fines collating 
e9e0: 73 65 71 75 65 6e 63 65 73 20 61 6e 64 20 73 6f  sequences and so
e9f0: 72 74 0a 2a 2a 20 6f 72 64 65 72 73 20 66 6f 72  rt.** orders for
ea00: 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e   the comparison.
ea10: 20 20 54 68 65 20 70 65 72 6d 75 74 61 74 69 6f    The permutatio
ea20: 6e 20 61 70 70 6c 69 65 73 20 74 6f 20 72 65 67  n applies to reg
ea30: 69 73 74 65 72 73 0a 2a 2a 20 6f 6e 6c 79 2e 20  isters.** only. 
ea40: 20 54 68 65 20 4b 65 79 49 6e 66 6f 20 65 6c 65   The KeyInfo ele
ea50: 6d 65 6e 74 73 20 61 72 65 20 75 73 65 64 20 73  ments are used s
ea60: 65 71 75 65 6e 74 69 61 6c 6c 79 2e 0a 2a 2a 0a  equentially..**.
ea70: 2a 2a 20 54 68 65 20 63 6f 6d 70 61 72 69 73 6f  ** The compariso
ea80: 6e 20 69 73 20 61 20 73 6f 72 74 20 63 6f 6d 70  n is a sort comp
ea90: 61 72 69 73 6f 6e 2c 20 73 6f 20 4e 55 4c 4c 73  arison, so NULLs
eaa0: 20 63 6f 6d 70 61 72 65 20 65 71 75 61 6c 2c 0a   compare equal,.
eab0: 2a 2a 20 4e 55 4c 4c 73 20 61 72 65 20 6c 65 73  ** NULLs are les
eac0: 73 20 74 68 61 6e 20 6e 75 6d 62 65 72 73 2c 20  s than numbers, 
ead0: 6e 75 6d 62 65 72 73 20 61 72 65 20 6c 65 73 73  numbers are less
eae0: 20 74 68 61 6e 20 73 74 72 69 6e 67 73 2c 0a 2a   than strings,.*
eaf0: 2a 20 61 6e 64 20 73 74 72 69 6e 67 73 20 61 72  * and strings ar
eb00: 65 20 6c 65 73 73 20 74 68 61 6e 20 62 6c 6f 62  e less than blob
eb10: 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f  s..*/.case OP_Co
eb20: 6d 70 61 72 65 3a 20 7b 0a 20 20 69 6e 74 20 6e  mpare: {.  int n
eb30: 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 69 6e 74  ;.  int i;.  int
eb40: 20 70 31 3b 0a 20 20 69 6e 74 20 70 32 3b 0a 20   p1;.  int p2;. 
eb50: 20 63 6f 6e 73 74 20 4b 65 79 49 6e 66 6f 20 2a   const KeyInfo *
eb60: 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 69 6e 74 20  pKeyInfo;.  int 
eb70: 69 64 78 3b 0a 20 20 43 6f 6c 6c 53 65 71 20 2a  idx;.  CollSeq *
eb80: 70 43 6f 6c 6c 3b 20 20 20 20 2f 2a 20 43 6f 6c  pColl;    /* Col
eb90: 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20  lating sequence 
eba0: 74 6f 20 75 73 65 20 6f 6e 20 74 68 69 73 20 74  to use on this t
ebb0: 65 72 6d 20 2a 2f 0a 20 20 69 6e 74 20 62 52 65  erm */.  int bRe
ebc0: 76 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  v;          /* T
ebd0: 72 75 65 20 66 6f 72 20 44 45 53 43 45 4e 44 49  rue for DESCENDI
ebe0: 4e 47 20 73 6f 72 74 20 6f 72 64 65 72 20 2a 2f  NG sort order */
ebf0: 0a 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 33 3b  ..  n = pOp->p3;
ec00: 0a 20 20 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f  .  pKeyInfo = pO
ec10: 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a  p->p4.pKeyInfo;.
ec20: 20 20 61 73 73 65 72 74 28 20 6e 3e 30 20 29 3b    assert( n>0 );
ec30: 0a 20 20 61 73 73 65 72 74 28 20 70 4b 65 79 49  .  assert( pKeyI
ec40: 6e 66 6f 21 3d 30 20 29 3b 0a 20 20 70 31 20 3d  nfo!=0 );.  p1 =
ec50: 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 32 20 3d   pOp->p1;.  p2 =
ec60: 20 70 4f 70 2d 3e 70 32 3b 0a 23 69 66 20 53 51   pOp->p2;.#if SQ
ec70: 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69 66 28  LITE_DEBUG.  if(
ec80: 20 61 50 65 72 6d 75 74 65 20 29 7b 0a 20 20 20   aPermute ){.   
ec90: 20 69 6e 74 20 6b 2c 20 6d 78 20 3d 20 30 3b 0a   int k, mx = 0;.
eca0: 20 20 20 20 66 6f 72 28 6b 3d 30 3b 20 6b 3c 6e      for(k=0; k<n
ecb0: 3b 20 6b 2b 2b 29 20 69 66 28 20 61 50 65 72 6d  ; k++) if( aPerm
ecc0: 75 74 65 5b 6b 5d 3e 6d 78 20 29 20 6d 78 20 3d  ute[k]>mx ) mx =
ecd0: 20 61 50 65 72 6d 75 74 65 5b 6b 5d 3b 0a 20 20   aPermute[k];.  
ece0: 20 20 61 73 73 65 72 74 28 20 70 31 3e 30 20 26    assert( p1>0 &
ecf0: 26 20 70 31 2b 6d 78 3c 3d 70 2d 3e 6e 4d 65 6d  & p1+mx<=p->nMem
ed00: 2b 31 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  +1 );.    assert
ed10: 28 20 70 32 3e 30 20 26 26 20 70 32 2b 6d 78 3c  ( p2>0 && p2+mx<
ed20: 3d 70 2d 3e 6e 4d 65 6d 2b 31 20 29 3b 0a 20 20  =p->nMem+1 );.  
ed30: 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72  }else{.    asser
ed40: 74 28 20 70 31 3e 30 20 26 26 20 70 31 2b 6e 3c  t( p1>0 && p1+n<
ed50: 3d 70 2d 3e 6e 4d 65 6d 2b 31 20 29 3b 0a 20 20  =p->nMem+1 );.  
ed60: 20 20 61 73 73 65 72 74 28 20 70 32 3e 30 20 26    assert( p2>0 &
ed70: 26 20 70 32 2b 6e 3c 3d 70 2d 3e 6e 4d 65 6d 2b  & p2+n<=p->nMem+
ed80: 31 20 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 20  1 );.  }.#endif 
ed90: 2f 2a 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20  /* SQLITE_DEBUG 
eda0: 2a 2f 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  */.  for(i=0; i<
edb0: 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69 64 78  n; i++){.    idx
edc0: 20 3d 20 61 50 65 72 6d 75 74 65 20 3f 20 61 50   = aPermute ? aP
edd0: 65 72 6d 75 74 65 5b 69 5d 20 3a 20 69 3b 0a 20  ermute[i] : i;. 
ede0: 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
edf0: 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 31 2b 69  Valid(&aMem[p1+i
ee00: 64 78 5d 29 20 29 3b 0a 20 20 20 20 61 73 73 65  dx]) );.    asse
ee10: 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26  rt( memIsValid(&
ee20: 61 4d 65 6d 5b 70 32 2b 69 64 78 5d 29 20 29 3b  aMem[p2+idx]) );
ee30: 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52  .    REGISTER_TR
ee40: 41 43 45 28 70 31 2b 69 64 78 2c 20 26 61 4d 65  ACE(p1+idx, &aMe
ee50: 6d 5b 70 31 2b 69 64 78 5d 29 3b 0a 20 20 20 20  m[p1+idx]);.    
ee60: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
ee70: 32 2b 69 64 78 2c 20 26 61 4d 65 6d 5b 70 32 2b  2+idx, &aMem[p2+
ee80: 69 64 78 5d 29 3b 0a 20 20 20 20 61 73 73 65 72  idx]);.    asser
ee90: 74 28 20 69 3c 70 4b 65 79 49 6e 66 6f 2d 3e 6e  t( i<pKeyInfo->n
eea0: 46 69 65 6c 64 20 29 3b 0a 20 20 20 20 70 43 6f  Field );.    pCo
eeb0: 6c 6c 20 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e 61  ll = pKeyInfo->a
eec0: 43 6f 6c 6c 5b 69 5d 3b 0a 20 20 20 20 62 52 65  Coll[i];.    bRe
eed0: 76 20 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e 61 53  v = pKeyInfo->aS
eee0: 6f 72 74 4f 72 64 65 72 5b 69 5d 3b 0a 20 20 20  ortOrder[i];.   
eef0: 20 69 43 6f 6d 70 61 72 65 20 3d 20 73 71 6c 69   iCompare = sqli
ef00: 74 65 33 4d 65 6d 43 6f 6d 70 61 72 65 28 26 61  te3MemCompare(&a
ef10: 4d 65 6d 5b 70 31 2b 69 64 78 5d 2c 20 26 61 4d  Mem[p1+idx], &aM
ef20: 65 6d 5b 70 32 2b 69 64 78 5d 2c 20 70 43 6f 6c  em[p2+idx], pCol
ef30: 6c 29 3b 0a 20 20 20 20 69 66 28 20 69 43 6f 6d  l);.    if( iCom
ef40: 70 61 72 65 20 29 7b 0a 20 20 20 20 20 20 69 66  pare ){.      if
ef50: 28 20 62 52 65 76 20 29 20 69 43 6f 6d 70 61 72  ( bRev ) iCompar
ef60: 65 20 3d 20 2d 69 43 6f 6d 70 61 72 65 3b 0a 20  e = -iCompare;. 
ef70: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
ef80: 7d 0a 20 20 7d 0a 20 20 61 50 65 72 6d 75 74 65  }.  }.  aPermute
ef90: 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d   = 0;.  break;.}
efa0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4a 75 6d  ../* Opcode: Jum
efb0: 70 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  p P1 P2 P3 * *.*
efc0: 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 74 68 65  *.** Jump to the
efd0: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 74 20   instruction at 
efe0: 61 64 64 72 65 73 73 20 50 31 2c 20 50 32 2c 20  address P1, P2, 
eff0: 6f 72 20 50 33 20 64 65 70 65 6e 64 69 6e 67 20  or P3 depending 
f000: 6f 6e 20 77 68 65 74 68 65 72 0a 2a 2a 20 69 6e  on whether.** in
f010: 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74   the most recent
f020: 20 4f 50 5f 43 6f 6d 70 61 72 65 20 69 6e 73 74   OP_Compare inst
f030: 72 75 63 74 69 6f 6e 20 74 68 65 20 50 31 20 76  ruction the P1 v
f040: 65 63 74 6f 72 20 77 61 73 20 6c 65 73 73 20 74  ector was less t
f050: 68 61 6e 0a 2a 2a 20 65 71 75 61 6c 20 74 6f 2c  han.** equal to,
f060: 20 6f 72 20 67 72 65 61 74 65 72 20 74 68 61 6e   or greater than
f070: 20 74 68 65 20 50 32 20 76 65 63 74 6f 72 2c 20   the P2 vector, 
f080: 72 65 73 70 65 63 74 69 76 65 6c 79 2e 0a 2a 2f  respectively..*/
f090: 0a 63 61 73 65 20 4f 50 5f 4a 75 6d 70 3a 20 7b  .case OP_Jump: {
f0a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
f0b0: 6a 75 6d 70 20 2a 2f 0a 20 20 69 66 28 20 69 43  jump */.  if( iC
f0c0: 6f 6d 70 61 72 65 3c 30 20 29 7b 0a 20 20 20 20  ompare<0 ){.    
f0d0: 70 63 20 3d 20 70 4f 70 2d 3e 70 31 20 2d 20 31  pc = pOp->p1 - 1
f0e0: 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 69 43  ;.  }else if( iC
f0f0: 6f 6d 70 61 72 65 3d 3d 30 20 29 7b 0a 20 20 20  ompare==0 ){.   
f100: 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
f110: 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  1;.  }else{.    
f120: 70 63 20 3d 20 70 4f 70 2d 3e 70 33 20 2d 20 31  pc = pOp->p3 - 1
f130: 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
f140: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 6e 64  ../* Opcode: And
f150: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
f160: 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20 6c 6f 67  .** Take the log
f170: 69 63 61 6c 20 41 4e 44 20 6f 66 20 74 68 65 20  ical AND of the 
f180: 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74  values in regist
f190: 65 72 73 20 50 31 20 61 6e 64 20 50 32 20 61 6e  ers P1 and P2 an
f1a0: 64 0a 2a 2a 20 77 72 69 74 65 20 74 68 65 20 72  d.** write the r
f1b0: 65 73 75 6c 74 20 69 6e 74 6f 20 72 65 67 69 73  esult into regis
f1c0: 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66  ter P3..**.** If
f1d0: 20 65 69 74 68 65 72 20 50 31 20 6f 72 20 50 32   either P1 or P2
f1e0: 20 69 73 20 30 20 28 66 61 6c 73 65 29 20 74 68   is 0 (false) th
f1f0: 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  en the result is
f200: 20 30 20 65 76 65 6e 20 69 66 0a 2a 2a 20 74 68   0 even if.** th
f210: 65 20 6f 74 68 65 72 20 69 6e 70 75 74 20 69 73  e other input is
f220: 20 4e 55 4c 4c 2e 20 20 41 20 4e 55 4c 4c 20 61   NULL.  A NULL a
f230: 6e 64 20 74 72 75 65 20 6f 72 20 74 77 6f 20 4e  nd true or two N
f240: 55 4c 4c 73 20 67 69 76 65 0a 2a 2a 20 61 20 4e  ULLs give.** a N
f250: 55 4c 4c 20 6f 75 74 70 75 74 2e 0a 2a 2f 0a 2f  ULL output..*/./
f260: 2a 20 4f 70 63 6f 64 65 3a 20 4f 72 20 50 31 20  * Opcode: Or P1 
f270: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
f280: 54 61 6b 65 20 74 68 65 20 6c 6f 67 69 63 61 6c  Take the logical
f290: 20 4f 52 20 6f 66 20 74 68 65 20 76 61 6c 75 65   OR of the value
f2a0: 73 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  s in register P1
f2b0: 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20 73   and P2 and.** s
f2c0: 74 6f 72 65 20 74 68 65 20 61 6e 73 77 65 72 20  tore the answer 
f2d0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  in register P3..
f2e0: 2a 2a 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20  **.** If either 
f2f0: 50 31 20 6f 72 20 50 32 20 69 73 20 6e 6f 6e 7a  P1 or P2 is nonz
f300: 65 72 6f 20 28 74 72 75 65 29 20 74 68 65 6e 20  ero (true) then 
f310: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 31 20  the result is 1 
f320: 28 74 72 75 65 29 0a 2a 2a 20 65 76 65 6e 20 69  (true).** even i
f330: 66 20 74 68 65 20 6f 74 68 65 72 20 69 6e 70 75  f the other inpu
f340: 74 20 69 73 20 4e 55 4c 4c 2e 20 20 41 20 4e 55  t is NULL.  A NU
f350: 4c 4c 20 61 6e 64 20 66 61 6c 73 65 20 6f 72 20  LL and false or 
f360: 74 77 6f 20 4e 55 4c 4c 73 0a 2a 2a 20 67 69 76  two NULLs.** giv
f370: 65 20 61 20 4e 55 4c 4c 20 6f 75 74 70 75 74 2e  e a NULL output.
f380: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 6e 64 3a  .*/.case OP_And:
f390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
f3a0: 20 73 61 6d 65 20 61 73 20 54 4b 5f 41 4e 44 2c   same as TK_AND,
f3b0: 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20   in1, in2, out3 
f3c0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 72 3a 20 7b  */.case OP_Or: {
f3d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
f3e0: 73 61 6d 65 20 61 73 20 54 4b 5f 4f 52 2c 20 69  same as TK_OR, i
f3f0: 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f  n1, in2, out3 */
f400: 0a 20 20 69 6e 74 20 76 31 3b 20 20 20 20 2f 2a  .  int v1;    /*
f410: 20 4c 65 66 74 20 6f 70 65 72 61 6e 64 3a 20 20   Left operand:  
f420: 30 3d 3d 46 41 4c 53 45 2c 20 31 3d 3d 54 52 55  0==FALSE, 1==TRU
f430: 45 2c 20 32 3d 3d 55 4e 4b 4e 4f 57 4e 20 6f 72  E, 2==UNKNOWN or
f440: 20 4e 55 4c 4c 20 2a 2f 0a 20 20 69 6e 74 20 76   NULL */.  int v
f450: 32 3b 20 20 20 20 2f 2a 20 52 69 67 68 74 20 6f  2;    /* Right o
f460: 70 65 72 61 6e 64 3a 20 30 3d 3d 46 41 4c 53 45  perand: 0==FALSE
f470: 2c 20 31 3d 3d 54 52 55 45 2c 20 32 3d 3d 55 4e  , 1==TRUE, 2==UN
f480: 4b 4e 4f 57 4e 20 6f 72 20 4e 55 4c 4c 20 2a 2f  KNOWN or NULL */
f490: 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ..  pIn1 = &aMem
f4a0: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28  [pOp->p1];.  if(
f4b0: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn1->flags & M
f4c0: 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 76  EM_Null ){.    v
f4d0: 31 20 3d 20 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a  1 = 2;.  }else{.
f4e0: 20 20 20 20 76 31 20 3d 20 73 71 6c 69 74 65 33      v1 = sqlite3
f4f0: 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e  VdbeIntValue(pIn
f500: 31 29 21 3d 30 3b 0a 20 20 7d 0a 20 20 70 49 6e  1)!=0;.  }.  pIn
f510: 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  2 = &aMem[pOp->p
f520: 32 5d 3b 0a 20 20 69 66 28 20 70 49 6e 32 2d 3e  2];.  if( pIn2->
f530: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
f540: 20 29 7b 0a 20 20 20 20 76 32 20 3d 20 32 3b 0a   ){.    v2 = 2;.
f550: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 76 32 20    }else{.    v2 
f560: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74  = sqlite3VdbeInt
f570: 56 61 6c 75 65 28 70 49 6e 32 29 21 3d 30 3b 0a  Value(pIn2)!=0;.
f580: 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f    }.  if( pOp->o
f590: 70 63 6f 64 65 3d 3d 4f 50 5f 41 6e 64 20 29 7b  pcode==OP_And ){
f5a0: 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73  .    static cons
f5b0: 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  t unsigned char 
f5c0: 61 6e 64 5f 6c 6f 67 69 63 5b 5d 20 3d 20 7b 20  and_logic[] = { 
f5d0: 30 2c 20 30 2c 20 30 2c 20 30 2c 20 31 2c 20 32  0, 0, 0, 0, 1, 2
f5e0: 2c 20 30 2c 20 32 2c 20 32 20 7d 3b 0a 20 20 20  , 0, 2, 2 };.   
f5f0: 20 76 31 20 3d 20 61 6e 64 5f 6c 6f 67 69 63 5b   v1 = and_logic[
f600: 76 31 2a 33 2b 76 32 5d 3b 0a 20 20 7d 65 6c 73  v1*3+v2];.  }els
f610: 65 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f  e{.    static co
f620: 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
f630: 72 20 6f 72 5f 6c 6f 67 69 63 5b 5d 20 3d 20 7b  r or_logic[] = {
f640: 20 30 2c 20 31 2c 20 32 2c 20 31 2c 20 31 2c 20   0, 1, 2, 1, 1, 
f650: 31 2c 20 32 2c 20 31 2c 20 32 20 7d 3b 0a 20 20  1, 2, 1, 2 };.  
f660: 20 20 76 31 20 3d 20 6f 72 5f 6c 6f 67 69 63 5b    v1 = or_logic[
f670: 76 31 2a 33 2b 76 32 5d 3b 0a 20 20 7d 0a 20 20  v1*3+v2];.  }.  
f680: 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
f690: 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20 76 31 3d  ->p3];.  if( v1=
f6a0: 3d 32 20 29 7b 0a 20 20 20 20 4d 65 6d 53 65 74  =2 ){.    MemSet
f6b0: 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d  TypeFlag(pOut, M
f6c0: 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 7d 65 6c 73  EM_Null);.  }els
f6d0: 65 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69  e{.    pOut->u.i
f6e0: 20 3d 20 76 31 3b 0a 20 20 20 20 4d 65 6d 53 65   = v1;.    MemSe
f6f0: 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20  tTypeFlag(pOut, 
f700: 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d 0a 20 20  MEM_Int);.  }.  
f710: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
f720: 6f 64 65 3a 20 4e 6f 74 20 50 31 20 50 32 20 2a  ode: Not P1 P2 *
f730: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72   * *.**.** Inter
f740: 70 72 65 74 20 74 68 65 20 76 61 6c 75 65 20 69  pret the value i
f750: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 61 73  n register P1 as
f760: 20 61 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65   a boolean value
f770: 2e 20 20 53 74 6f 72 65 20 74 68 65 0a 2a 2a 20  .  Store the.** 
f780: 62 6f 6f 6c 65 61 6e 20 63 6f 6d 70 6c 65 6d 65  boolean compleme
f790: 6e 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  nt in register P
f7a0: 32 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75 65  2.  If the value
f7b0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
f7c0: 69 73 20 0a 2a 2a 20 4e 55 4c 4c 2c 20 74 68 65  is .** NULL, the
f7d0: 6e 20 61 20 4e 55 4c 4c 20 69 73 20 73 74 6f 72  n a NULL is stor
f7e0: 65 64 20 69 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73  ed in P2..*/.cas
f7f0: 65 20 4f 50 5f 4e 6f 74 3a 20 7b 20 20 20 20 20  e OP_Not: {     
f800: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
f810: 6d 65 20 61 73 20 54 4b 5f 4e 4f 54 2c 20 69 6e  me as TK_NOT, in
f820: 31 2c 20 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e  1, out2 */.  pIn
f830: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
f840: 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d  1];.  pOut = &aM
f850: 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 69  em[pOp->p2];.  i
f860: 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  f( pIn1->flags &
f870: 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20   MEM_Null ){.   
f880: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
f890: 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20  etNull(pOut);.  
f8a0: 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74  }else{.    sqlit
f8b0: 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36  e3VdbeMemSetInt6
f8c0: 34 28 70 4f 75 74 2c 20 21 73 71 6c 69 74 65 33  4(pOut, !sqlite3
f8d0: 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e  VdbeIntValue(pIn
f8e0: 31 29 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  1));.  }.  break
f8f0: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
f900: 42 69 74 4e 6f 74 20 50 31 20 50 32 20 2a 20 2a  BitNot P1 P2 * *
f910: 20 2a 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72   *.**.** Interpr
f920: 65 74 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  et the content o
f930: 66 20 72 65 67 69 73 74 65 72 20 50 31 20 61 73  f register P1 as
f940: 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 53 74   an integer.  St
f950: 6f 72 65 20 74 68 65 0a 2a 2a 20 6f 6e 65 73 2d  ore the.** ones-
f960: 63 6f 6d 70 6c 65 6d 65 6e 74 20 6f 66 20 74 68  complement of th
f970: 65 20 50 31 20 76 61 6c 75 65 20 69 6e 74 6f 20  e P1 value into 
f980: 72 65 67 69 73 74 65 72 20 50 32 2e 20 20 49 66  register P2.  If
f990: 20 50 31 20 68 6f 6c 64 73 0a 2a 2a 20 61 20 4e   P1 holds.** a N
f9a0: 55 4c 4c 20 74 68 65 6e 20 73 74 6f 72 65 20 61  ULL then store a
f9b0: 20 4e 55 4c 4c 20 69 6e 20 50 32 2e 0a 2a 2f 0a   NULL in P2..*/.
f9c0: 63 61 73 65 20 4f 50 5f 42 69 74 4e 6f 74 3a 20  case OP_BitNot: 
f9d0: 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  {             /*
f9e0: 20 73 61 6d 65 20 61 73 20 54 4b 5f 42 49 54 4e   same as TK_BITN
f9f0: 4f 54 2c 20 69 6e 31 2c 20 6f 75 74 32 20 2a 2f  OT, in1, out2 */
fa00: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
fa10: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74  pOp->p1];.  pOut
fa20: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
fa30: 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66  ];.  if( pIn1->f
fa40: 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20  lags & MEM_Null 
fa50: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
fa60: 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75  beMemSetNull(pOu
fa70: 74 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  t);.  }else{.   
fa80: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
fa90: 65 74 49 6e 74 36 34 28 70 4f 75 74 2c 20 7e 73  etInt64(pOut, ~s
faa0: 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c  qlite3VdbeIntVal
fab0: 75 65 28 70 49 6e 31 29 29 3b 0a 20 20 7d 0a 20  ue(pIn1));.  }. 
fac0: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
fad0: 63 6f 64 65 3a 20 49 66 20 50 31 20 50 32 20 50  code: If P1 P2 P
fae0: 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70  3 * *.**.** Jump
faf0: 20 74 6f 20 50 32 20 69 66 20 74 68 65 20 76 61   to P2 if the va
fb00: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
fb10: 50 31 20 69 73 20 74 72 75 65 2e 20 20 54 68 65  P1 is true.  The
fb20: 20 76 61 6c 75 65 20 69 73 0a 2a 2a 20 69 73 20   value is.** is 
fb30: 63 6f 6e 73 69 64 65 72 65 64 20 74 72 75 65 20  considered true 
fb40: 69 66 20 69 74 20 69 73 20 6e 75 6d 65 72 69 63  if it is numeric
fb50: 20 61 6e 64 20 6e 6f 6e 2d 7a 65 72 6f 2e 20 20   and non-zero.  
fb60: 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20  If the value.** 
fb70: 69 6e 20 50 31 20 69 73 20 4e 55 4c 4c 20 74 68  in P1 is NULL th
fb80: 65 6e 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70  en take the jump
fb90: 20 69 66 20 50 33 20 69 73 20 74 72 75 65 2e 0a   if P3 is true..
fba0: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66  */./* Opcode: If
fbb0: 4e 6f 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a  Not P1 P2 P3 * *
fbc0: 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50  .**.** Jump to P
fbd0: 32 20 69 66 20 74 68 65 20 76 61 6c 75 65 20 69  2 if the value i
fbe0: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  n register P1 is
fbf0: 20 46 61 6c 73 65 2e 20 20 54 68 65 20 76 61 6c   False.  The val
fc00: 75 65 20 69 73 0a 2a 2a 20 69 73 20 63 6f 6e 73  ue is.** is cons
fc10: 69 64 65 72 65 64 20 74 72 75 65 20 69 66 20 69  idered true if i
fc20: 74 20 68 61 73 20 61 20 6e 75 6d 65 72 69 63 20  t has a numeric 
fc30: 76 61 6c 75 65 20 6f 66 20 7a 65 72 6f 2e 20 20  value of zero.  
fc40: 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20  If the value.** 
fc50: 69 6e 20 50 31 20 69 73 20 4e 55 4c 4c 20 74 68  in P1 is NULL th
fc60: 65 6e 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70  en take the jump
fc70: 20 69 66 20 50 33 20 69 73 20 74 72 75 65 2e 0a   if P3 is true..
fc80: 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 3a 20 20  */.case OP_If:  
fc90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
fca0: 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 63  * jump, in1 */.c
fcb0: 61 73 65 20 4f 50 5f 49 66 4e 6f 74 3a 20 7b 20  ase OP_IfNot: { 
fcc0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75             /* ju
fcd0: 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 69 6e 74  mp, in1 */.  int
fce0: 20 63 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   c;.  pIn1 = &aM
fcf0: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69  em[pOp->p1];.  i
fd00: 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  f( pIn1->flags &
fd10: 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20   MEM_Null ){.   
fd20: 20 63 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20   c = pOp->p3;.  
fd30: 7d 65 6c 73 65 7b 0a 23 69 66 64 65 66 20 53 51  }else{.#ifdef SQ
fd40: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49  LITE_OMIT_FLOATI
fd50: 4e 47 5f 50 4f 49 4e 54 0a 20 20 20 20 63 20 3d  NG_POINT.    c =
fd60: 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56   sqlite3VdbeIntV
fd70: 61 6c 75 65 28 70 49 6e 31 29 21 3d 30 3b 0a 23  alue(pIn1)!=0;.#
fd80: 65 6c 73 65 0a 20 20 20 20 63 20 3d 20 73 71 6c  else.    c = sql
fd90: 69 74 65 33 56 64 62 65 52 65 61 6c 56 61 6c 75  ite3VdbeRealValu
fda0: 65 28 70 49 6e 31 29 21 3d 30 2e 30 3b 0a 23 65  e(pIn1)!=0.0;.#e
fdb0: 6e 64 69 66 0a 20 20 20 20 69 66 28 20 70 4f 70  ndif.    if( pOp
fdc0: 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 66 4e  ->opcode==OP_IfN
fdd0: 6f 74 20 29 20 63 20 3d 20 21 63 3b 0a 20 20 7d  ot ) c = !c;.  }
fde0: 0a 20 20 69 66 28 20 63 20 29 7b 0a 20 20 20 20  .  if( c ){.    
fdf0: 70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a  pc = pOp->p2-1;.
fe00: 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
fe10: 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 73 4e 75 6c  /* Opcode: IsNul
fe20: 6c 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  l P1 P2 * * *.**
fe30: 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20 69  .** Jump to P2 i
fe40: 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  f the value in r
fe50: 65 67 69 73 74 65 72 20 50 31 20 69 73 20 4e 55  egister P1 is NU
fe60: 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  LL..*/.case OP_I
fe70: 73 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20 20 20  sNull: {        
fe80: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
fe90: 4b 5f 49 53 4e 55 4c 4c 2c 20 6a 75 6d 70 2c 20  K_ISNULL, jump, 
fea0: 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  in1 */.  pIn1 = 
feb0: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
fec0: 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
fed0: 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d  gs & MEM_Null)!=
fee0: 30 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f  0 ){.    pc = pO
fef0: 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20  p->p2 - 1;.  }. 
ff00: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
ff10: 63 6f 64 65 3a 20 4e 6f 74 4e 75 6c 6c 20 50 31  code: NotNull P1
ff20: 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
ff30: 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68  Jump to P2 if th
ff40: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
ff50: 74 65 72 20 50 31 20 69 73 20 6e 6f 74 20 4e 55  ter P1 is not NU
ff60: 4c 4c 2e 20 20 0a 2a 2f 0a 63 61 73 65 20 4f 50  LL.  .*/.case OP
ff70: 5f 4e 6f 74 4e 75 6c 6c 3a 20 7b 20 20 20 20 20  _NotNull: {     
ff80: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
ff90: 73 20 54 4b 5f 4e 4f 54 4e 55 4c 4c 2c 20 6a 75  s TK_NOTNULL, ju
ffa0: 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e  mp, in1 */.  pIn
ffb0: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
ffc0: 31 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d  1];.  if( (pIn1-
ffd0: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
ffe0: 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 70 63 20  l)==0 ){.    pc 
fff0: 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
10000 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
10010 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6c 75 6d 6e  * Opcode: Column
10020 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
10030 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20  **.** Interpret 
10040 74 68 65 20 64 61 74 61 20 74 68 61 74 20 63 75  the data that cu
10050 72 73 6f 72 20 50 31 20 70 6f 69 6e 74 73 20 74  rsor P1 points t
10060 6f 20 61 73 20 61 20 73 74 72 75 63 74 75 72 65  o as a structure
10070 20 62 75 69 6c 74 20 75 73 69 6e 67 0a 2a 2a 20   built using.** 
10080 74 68 65 20 4d 61 6b 65 52 65 63 6f 72 64 20 69  the MakeRecord i
10090 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 28 53 65  nstruction.  (Se
100a0 65 20 74 68 65 20 4d 61 6b 65 52 65 63 6f 72 64  e the MakeRecord
100b0 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64 64 69   opcode for addi
100c0 74 69 6f 6e 61 6c 0a 2a 2a 20 69 6e 66 6f 72 6d  tional.** inform
100d0 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 20  ation about the 
100e0 66 6f 72 6d 61 74 20 6f 66 20 74 68 65 20 64 61  format of the da
100f0 74 61 2e 29 20 20 45 78 74 72 61 63 74 20 74 68  ta.)  Extract th
10100 65 20 50 32 2d 74 68 20 63 6f 6c 75 6d 6e 0a 2a  e P2-th column.*
10110 2a 20 66 72 6f 6d 20 74 68 69 73 20 72 65 63 6f  * from this reco
10120 72 64 2e 20 20 49 66 20 74 68 65 72 65 20 61 72  rd.  If there ar
10130 65 20 6c 65 73 73 20 74 68 61 74 20 28 50 32 2b  e less that (P2+
10140 31 29 20 0a 2a 2a 20 76 61 6c 75 65 73 20 69 6e  1) .** values in
10150 20 74 68 65 20 72 65 63 6f 72 64 2c 20 65 78 74   the record, ext
10160 72 61 63 74 20 61 20 4e 55 4c 4c 2e 0a 2a 2a 0a  ract a NULL..**.
10170 2a 2a 20 54 68 65 20 76 61 6c 75 65 20 65 78 74  ** The value ext
10180 72 61 63 74 65 64 20 69 73 20 73 74 6f 72 65 64  racted is stored
10190 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e   in register P3.
101a0 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 63 6f  .**.** If the co
101b0 6c 75 6d 6e 20 63 6f 6e 74 61 69 6e 73 20 66 65  lumn contains fe
101c0 77 65 72 20 74 68 61 6e 20 50 32 20 66 69 65 6c  wer than P2 fiel
101d0 64 73 2c 20 74 68 65 6e 20 65 78 74 72 61 63 74  ds, then extract
101e0 20 61 20 4e 55 4c 4c 2e 20 20 4f 72 2c 0a 2a 2a   a NULL.  Or,.**
101f0 20 69 66 20 74 68 65 20 50 34 20 61 72 67 75 6d   if the P4 argum
10200 65 6e 74 20 69 73 20 61 20 50 34 5f 4d 45 4d 20  ent is a P4_MEM 
10210 75 73 65 20 74 68 65 20 76 61 6c 75 65 20 6f 66  use the value of
10220 20 74 68 65 20 50 34 20 61 72 67 75 6d 65 6e 74   the P4 argument
10230 20 61 73 0a 2a 2a 20 74 68 65 20 72 65 73 75 6c   as.** the resul
10240 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  t..**.** If the 
10250 4f 50 46 4c 41 47 5f 43 4c 45 41 52 43 41 43 48  OPFLAG_CLEARCACH
10260 45 20 62 69 74 20 69 73 20 73 65 74 20 6f 6e 20  E bit is set on 
10270 50 35 20 61 6e 64 20 50 31 20 69 73 20 61 20 70  P5 and P1 is a p
10280 73 65 75 64 6f 2d 74 61 62 6c 65 20 63 75 72 73  seudo-table curs
10290 6f 72 2c 0a 2a 2a 20 74 68 65 6e 20 74 68 65 20  or,.** then the 
102a0 63 61 63 68 65 20 6f 66 20 74 68 65 20 63 75 72  cache of the cur
102b0 73 6f 72 20 69 73 20 72 65 73 65 74 20 70 72 69  sor is reset pri
102c0 6f 72 20 74 6f 20 65 78 74 72 61 63 74 69 6e 67  or to extracting
102d0 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a 20   the column..** 
102e0 54 68 65 20 66 69 72 73 74 20 4f 50 5f 43 6f 6c  The first OP_Col
102f0 75 6d 6e 20 61 67 61 69 6e 73 74 20 61 20 70 73  umn against a ps
10300 65 75 64 6f 2d 74 61 62 6c 65 20 61 66 74 65 72  eudo-table after
10310 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   the value of th
10320 65 20 63 6f 6e 74 65 6e 74 0a 2a 2a 20 72 65 67  e content.** reg
10330 69 73 74 65 72 20 68 61 73 20 63 68 61 6e 67 65  ister has change
10340 64 20 73 68 6f 75 6c 64 20 68 61 76 65 20 74 68  d should have th
10350 69 73 20 62 69 74 20 73 65 74 2e 0a 2a 2f 0a 63  is bit set..*/.c
10360 61 73 65 20 4f 50 5f 43 6f 6c 75 6d 6e 3a 20 7b  ase OP_Column: {
10370 0a 20 20 75 33 32 20 70 61 79 6c 6f 61 64 53 69  .  u32 payloadSi
10380 7a 65 3b 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20  ze;   /* Number 
10390 6f 66 20 62 79 74 65 73 20 69 6e 20 74 68 65 20  of bytes in the 
103a0 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 36 34 20  record */.  i64 
103b0 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 3b 20 2f  payloadSize64; /
103c0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  * Number of byte
103d0 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20  s in the record 
103e0 2a 2f 0a 20 20 69 6e 74 20 70 31 3b 20 20 20 20  */.  int p1;    
103f0 20 20 20 20 20 20 20 20 2f 2a 20 50 31 20 76 61          /* P1 va
10400 6c 75 65 20 6f 66 20 74 68 65 20 6f 70 63 6f 64  lue of the opcod
10410 65 20 2a 2f 0a 20 20 69 6e 74 20 70 32 3b 20 20  e */.  int p2;  
10420 20 20 20 20 20 20 20 20 20 20 2f 2a 20 63 6f 6c            /* col
10430 75 6d 6e 20 6e 75 6d 62 65 72 20 74 6f 20 72 65  umn number to re
10440 74 72 69 65 76 65 20 2a 2f 0a 20 20 56 64 62 65  trieve */.  Vdbe
10450 43 75 72 73 6f 72 20 2a 70 43 3b 20 20 20 20 2f  Cursor *pC;    /
10460 2a 20 54 68 65 20 56 44 42 45 20 63 75 72 73 6f  * The VDBE curso
10470 72 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 52 65  r */.  char *zRe
10480 63 3b 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69  c;        /* Poi
10490 6e 74 65 72 20 74 6f 20 63 6f 6d 70 6c 65 74 65  nter to complete
104a0 20 72 65 63 6f 72 64 2d 64 61 74 61 20 2a 2f 0a   record-data */.
104b0 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73    BtCursor *pCrs
104c0 72 3b 20 20 20 2f 2a 20 54 68 65 20 42 54 72 65  r;   /* The BTre
104d0 65 20 63 75 72 73 6f 72 20 2a 2f 0a 20 20 75 33  e cursor */.  u3
104e0 32 20 2a 61 54 79 70 65 3b 20 20 20 20 20 20 20  2 *aType;       
104f0 20 2f 2a 20 61 54 79 70 65 5b 69 5d 20 68 6f 6c   /* aType[i] hol
10500 64 73 20 74 68 65 20 6e 75 6d 65 72 69 63 20 74  ds the numeric t
10510 79 70 65 20 6f 66 20 74 68 65 20 69 2d 74 68 20  ype of the i-th 
10520 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 75 33 32 20  column */.  u32 
10530 2a 61 4f 66 66 73 65 74 3b 20 20 20 20 20 20 2f  *aOffset;      /
10540 2a 20 61 4f 66 66 73 65 74 5b 69 5d 20 69 73 20  * aOffset[i] is 
10550 6f 66 66 73 65 74 20 74 6f 20 73 74 61 72 74 20  offset to start 
10560 6f 66 20 64 61 74 61 20 66 6f 72 20 69 2d 74 68  of data for i-th
10570 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 69 6e 74   column */.  int
10580 20 6e 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20   nField;        
10590 2f 2a 20 6e 75 6d 62 65 72 20 6f 66 20 66 69 65  /* number of fie
105a0 6c 64 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72  lds in the recor
105b0 64 20 2a 2f 0a 20 20 69 6e 74 20 6c 65 6e 3b 20  d */.  int len; 
105c0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
105d0 20 6c 65 6e 67 74 68 20 6f 66 20 74 68 65 20 73   length of the s
105e0 65 72 69 61 6c 69 7a 65 64 20 64 61 74 61 20 66  erialized data f
105f0 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 20 2a 2f  or the column */
10600 0a 20 20 69 6e 74 20 69 3b 20 20 20 20 20 20 20  .  int i;       
10610 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f        /* Loop co
10620 75 6e 74 65 72 20 2a 2f 0a 20 20 63 68 61 72 20  unter */.  char 
10630 2a 7a 44 61 74 61 3b 20 20 20 20 20 20 20 2f 2a  *zData;       /*
10640 20 50 61 72 74 20 6f 66 20 74 68 65 20 72 65 63   Part of the rec
10650 6f 72 64 20 62 65 69 6e 67 20 64 65 63 6f 64 65  ord being decode
10660 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 44 65 73  d */.  Mem *pDes
10670 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 57 68 65  t;        /* Whe
10680 72 65 20 74 6f 20 77 72 69 74 65 20 74 68 65 20  re to write the 
10690 65 78 74 72 61 63 74 65 64 20 76 61 6c 75 65 20  extracted value 
106a0 2a 2f 0a 20 20 4d 65 6d 20 73 4d 65 6d 3b 20 20  */.  Mem sMem;  
106b0 20 20 20 20 20 20 20 20 2f 2a 20 46 6f 72 20 73          /* For s
106c0 74 6f 72 69 6e 67 20 74 68 65 20 72 65 63 6f 72  toring the recor
106d0 64 20 62 65 69 6e 67 20 64 65 63 6f 64 65 64 20  d being decoded 
106e0 2a 2f 0a 20 20 75 38 20 2a 7a 49 64 78 3b 20 20  */.  u8 *zIdx;  
106f0 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78          /* Index
10700 20 69 6e 74 6f 20 68 65 61 64 65 72 20 2a 2f 0a   into header */.
10710 20 20 75 38 20 2a 7a 45 6e 64 48 64 72 3b 20 20    u8 *zEndHdr;  
10720 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20       /* Pointer 
10730 74 6f 20 66 69 72 73 74 20 62 79 74 65 20 61 66  to first byte af
10740 74 65 72 20 74 68 65 20 68 65 61 64 65 72 20 2a  ter the header *
10750 2f 0a 20 20 75 33 32 20 6f 66 66 73 65 74 3b 20  /.  u32 offset; 
10760 20 20 20 20 20 20 20 2f 2a 20 4f 66 66 73 65 74         /* Offset
10770 20 69 6e 74 6f 20 74 68 65 20 64 61 74 61 20 2a   into the data *
10780 2f 0a 20 20 75 33 32 20 73 7a 46 69 65 6c 64 3b  /.  u32 szField;
10790 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
107a0 20 6f 66 20 62 79 74 65 73 20 69 6e 20 74 68 65   of bytes in the
107b0 20 63 6f 6e 74 65 6e 74 20 6f 66 20 61 20 66 69   content of a fi
107c0 65 6c 64 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 48  eld */.  int szH
107d0 64 72 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 53  dr;         /* S
107e0 69 7a 65 20 6f 66 20 74 68 65 20 68 65 61 64 65  ize of the heade
107f0 72 20 73 69 7a 65 20 66 69 65 6c 64 20 61 74 20  r size field at 
10800 73 74 61 72 74 20 6f 66 20 72 65 63 6f 72 64 20  start of record 
10810 2a 2f 0a 20 20 69 6e 74 20 61 76 61 69 6c 3b 20  */.  int avail; 
10820 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
10830 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20 61 76  r of bytes of av
10840 61 69 6c 61 62 6c 65 20 64 61 74 61 20 2a 2f 0a  ailable data */.
10850 20 20 4d 65 6d 20 2a 70 52 65 67 3b 20 20 20 20    Mem *pReg;    
10860 20 20 20 20 20 2f 2a 20 50 73 65 75 64 6f 54 61       /* PseudoTa
10870 62 6c 65 20 69 6e 70 75 74 20 72 65 67 69 73 74  ble input regist
10880 65 72 20 2a 2f 0a 0a 0a 20 20 70 31 20 3d 20 70  er */...  p1 = p
10890 4f 70 2d 3e 70 31 3b 0a 20 20 70 32 20 3d 20 70  Op->p1;.  p2 = p
108a0 4f 70 2d 3e 70 32 3b 0a 20 20 70 43 20 3d 20 30  Op->p2;.  pC = 0
108b0 3b 0a 20 20 6d 65 6d 73 65 74 28 26 73 4d 65 6d  ;.  memset(&sMem
108c0 2c 20 30 2c 20 73 69 7a 65 6f 66 28 73 4d 65 6d  , 0, sizeof(sMem
108d0 29 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 31  ));.  assert( p1
108e0 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
108f0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
10900 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 70  >0 && pOp->p3<=p
10910 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 44 65 73  ->nMem );.  pDes
10920 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
10930 33 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f  3];.  memAboutTo
10940 43 68 61 6e 67 65 28 70 2c 20 70 44 65 73 74 29  Change(p, pDest)
10950 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c  ;.  MemSetTypeFl
10960 61 67 28 70 44 65 73 74 2c 20 4d 45 4d 5f 4e 75  ag(pDest, MEM_Nu
10970 6c 6c 29 3b 0a 20 20 7a 52 65 63 20 3d 20 30 3b  ll);.  zRec = 0;
10980 0a 0a 20 20 2f 2a 20 54 68 69 73 20 62 6c 6f 63  ..  /* This bloc
10990 6b 20 73 65 74 73 20 74 68 65 20 76 61 72 69 61  k sets the varia
109a0 62 6c 65 20 70 61 79 6c 6f 61 64 53 69 7a 65 20  ble payloadSize 
109b0 74 6f 20 62 65 20 74 68 65 20 74 6f 74 61 6c 20  to be the total 
109c0 6e 75 6d 62 65 72 20 6f 66 0a 20 20 2a 2a 20 62  number of.  ** b
109d0 79 74 65 73 20 69 6e 20 74 68 65 20 72 65 63 6f  ytes in the reco
109e0 72 64 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 7a 52  rd..  **.  ** zR
109f0 65 63 20 69 73 20 73 65 74 20 74 6f 20 62 65 20  ec is set to be 
10a00 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 74 65 78  the complete tex
10a10 74 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20  t of the record 
10a20 69 66 20 69 74 20 69 73 20 61 76 61 69 6c 61 62  if it is availab
10a30 6c 65 2e 0a 20 20 2a 2a 20 54 68 65 20 63 6f 6d  le..  ** The com
10a40 70 6c 65 74 65 20 72 65 63 6f 72 64 20 74 65 78  plete record tex
10a50 74 20 69 73 20 61 6c 77 61 79 73 20 61 76 61 69  t is always avai
10a60 6c 61 62 6c 65 20 66 6f 72 20 70 73 65 75 64 6f  lable for pseudo
10a70 2d 74 61 62 6c 65 73 0a 20 20 2a 2a 20 49 66 20  -tables.  ** If 
10a80 74 68 65 20 72 65 63 6f 72 64 20 69 73 20 73 74  the record is st
10a90 6f 72 65 64 20 69 6e 20 61 20 63 75 72 73 6f 72  ored in a cursor
10aa0 2c 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 72  , the complete r
10ab0 65 63 6f 72 64 20 74 65 78 74 0a 20 20 2a 2a 20  ecord text.  ** 
10ac0 6d 69 67 68 74 20 62 65 20 61 76 61 69 6c 61 62  might be availab
10ad0 6c 65 20 69 6e 20 74 68 65 20 20 70 43 2d 3e 61  le in the  pC->a
10ae0 52 6f 77 20 63 61 63 68 65 2e 20 20 4f 72 20 69  Row cache.  Or i
10af0 74 20 6d 69 67 68 74 20 6e 6f 74 20 62 65 2e 0a  t might not be..
10b00 20 20 2a 2a 20 49 66 20 74 68 65 20 64 61 74 61    ** If the data
10b10 20 69 73 20 75 6e 61 76 61 69 6c 61 62 6c 65 2c   is unavailable,
10b20 20 20 7a 52 65 63 20 69 73 20 73 65 74 20 74 6f    zRec is set to
10b30 20 4e 55 4c 4c 2e 0a 20 20 2a 2a 0a 20 20 2a 2a   NULL..  **.  **
10b40 20 57 65 20 61 6c 73 6f 20 63 6f 6d 70 75 74 65   We also compute
10b50 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63   the number of c
10b60 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 72 65  olumns in the re
10b70 63 6f 72 64 2e 20 20 46 6f 72 20 63 75 72 73 6f  cord.  For curso
10b80 72 73 2c 0a 20 20 2a 2a 20 74 68 65 20 6e 75 6d  rs,.  ** the num
10b90 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
10ba0 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20  s stored in the 
10bb0 56 64 62 65 43 75 72 73 6f 72 2e 6e 46 69 65 6c  VdbeCursor.nFiel
10bc0 64 20 65 6c 65 6d 65 6e 74 2e 0a 20 20 2a 2f 0a  d element..  */.
10bd0 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
10be0 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
10bf0 43 21 3d 30 20 29 3b 0a 23 69 66 6e 64 65 66 20  C!=0 );.#ifndef 
10c00 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
10c10 55 41 4c 54 41 42 4c 45 0a 20 20 61 73 73 65 72  UALTABLE.  asser
10c20 74 28 20 70 43 2d 3e 70 56 74 61 62 43 75 72 73  t( pC->pVtabCurs
10c30 6f 72 3d 3d 30 20 29 3b 0a 23 65 6e 64 69 66 0a  or==0 );.#endif.
10c40 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43    pCrsr = pC->pC
10c50 75 72 73 6f 72 3b 0a 20 20 69 66 28 20 70 43 72  ursor;.  if( pCr
10c60 73 72 21 3d 30 20 29 7b 0a 20 20 20 20 2f 2a 20  sr!=0 ){.    /* 
10c70 54 68 65 20 72 65 63 6f 72 64 20 69 73 20 73 74  The record is st
10c80 6f 72 65 64 20 69 6e 20 61 20 42 2d 54 72 65 65  ored in a B-Tree
10c90 20 2a 2f 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   */.    rc = sql
10ca0 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f  ite3VdbeCursorMo
10cb0 76 65 74 6f 28 70 43 29 3b 0a 20 20 20 20 69 66  veto(pC);.    if
10cc0 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
10cd0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
10ce0 20 20 20 20 69 66 28 20 70 43 2d 3e 6e 75 6c 6c      if( pC->null
10cf0 52 6f 77 20 29 7b 0a 20 20 20 20 20 20 70 61 79  Row ){.      pay
10d00 6c 6f 61 64 53 69 7a 65 20 3d 20 30 3b 0a 20 20  loadSize = 0;.  
10d10 20 20 7d 65 6c 73 65 20 69 66 28 20 70 43 2d 3e    }else if( pC->
10d20 63 61 63 68 65 53 74 61 74 75 73 3d 3d 70 2d 3e  cacheStatus==p->
10d30 63 61 63 68 65 43 74 72 20 29 7b 0a 20 20 20 20  cacheCtr ){.    
10d40 20 20 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20    payloadSize = 
10d50 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 3b  pC->payloadSize;
10d60 0a 20 20 20 20 20 20 7a 52 65 63 20 3d 20 28 63  .      zRec = (c
10d70 68 61 72 2a 29 70 43 2d 3e 61 52 6f 77 3b 0a 20  har*)pC->aRow;. 
10d80 20 20 20 7d 65 6c 73 65 20 69 66 28 20 70 43 2d     }else if( pC-
10d90 3e 69 73 49 6e 64 65 78 20 29 7b 0a 20 20 20 20  >isIndex ){.    
10da0 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
10db0 33 42 74 72 65 65 43 75 72 73 6f 72 49 73 56 61  3BtreeCursorIsVa
10dc0 6c 69 64 28 70 43 72 73 72 29 20 29 3b 0a 20 20  lid(pCrsr) );.  
10dd0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
10de0 42 74 72 65 65 4b 65 79 53 69 7a 65 28 70 43 72  BtreeKeySize(pCr
10df0 73 72 2c 20 26 70 61 79 6c 6f 61 64 53 69 7a 65  sr, &payloadSize
10e00 36 34 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  64);.      asser
10e10 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  t( rc==SQLITE_OK
10e20 20 29 3b 20 20 20 2f 2a 20 54 72 75 65 20 62 65   );   /* True be
10e30 63 61 75 73 65 20 6f 66 20 43 75 72 73 6f 72 4d  cause of CursorM
10e40 6f 76 65 74 6f 28 29 20 63 61 6c 6c 20 61 62 6f  oveto() call abo
10e50 76 65 20 2a 2f 0a 20 20 20 20 20 20 2f 2a 20 73  ve */.      /* s
10e60 71 6c 69 74 65 33 42 74 72 65 65 50 61 72 73 65  qlite3BtreeParse
10e70 43 65 6c 6c 50 74 72 28 29 20 75 73 65 73 20 67  CellPtr() uses g
10e80 65 74 56 61 72 69 6e 74 33 32 28 29 20 74 6f 20  etVarint32() to 
10e90 65 78 74 72 61 63 74 20 74 68 65 0a 20 20 20 20  extract the.    
10ea0 20 20 2a 2a 20 70 61 79 6c 6f 61 64 20 73 69 7a    ** payload siz
10eb0 65 2c 20 73 6f 20 69 74 20 69 73 20 69 6d 70 6f  e, so it is impo
10ec0 73 73 69 62 6c 65 20 66 6f 72 20 70 61 79 6c 6f  ssible for paylo
10ed0 61 64 53 69 7a 65 36 34 20 74 6f 20 62 65 0a 20  adSize64 to be. 
10ee0 20 20 20 20 20 2a 2a 20 6c 61 72 67 65 72 20 74       ** larger t
10ef0 68 61 6e 20 33 32 20 62 69 74 73 2e 20 2a 2f 0a  han 32 bits. */.
10f00 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28 70        assert( (p
10f10 61 79 6c 6f 61 64 53 69 7a 65 36 34 20 26 20 53  ayloadSize64 & S
10f20 51 4c 49 54 45 5f 4d 41 58 5f 55 33 32 29 3d 3d  QLITE_MAX_U32)==
10f30 28 75 36 34 29 70 61 79 6c 6f 61 64 53 69 7a 65  (u64)payloadSize
10f40 36 34 20 29 3b 0a 20 20 20 20 20 20 70 61 79 6c  64 );.      payl
10f50 6f 61 64 53 69 7a 65 20 3d 20 28 75 33 32 29 70  oadSize = (u32)p
10f60 61 79 6c 6f 61 64 53 69 7a 65 36 34 3b 0a 20 20  ayloadSize64;.  
10f70 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 61    }else{.      a
10f80 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 42 74  ssert( sqlite3Bt
10f90 72 65 65 43 75 72 73 6f 72 49 73 56 61 6c 69 64  reeCursorIsValid
10fa0 28 70 43 72 73 72 29 20 29 3b 0a 20 20 20 20 20  (pCrsr) );.     
10fb0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
10fc0 65 65 44 61 74 61 53 69 7a 65 28 70 43 72 73 72  eeDataSize(pCrsr
10fd0 2c 20 26 70 61 79 6c 6f 61 64 53 69 7a 65 29 3b  , &payloadSize);
10fe0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 72  .      assert( r
10ff0 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20  c==SQLITE_OK ); 
11000 20 20 2f 2a 20 44 61 74 61 53 69 7a 65 28 29 20    /* DataSize() 
11010 63 61 6e 6e 6f 74 20 66 61 69 6c 20 2a 2f 0a 20  cannot fail */. 
11020 20 20 20 7d 0a 20 20 7d 65 6c 73 65 20 69 66 28     }.  }else if(
11030 20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65   pC->pseudoTable
11040 52 65 67 3e 30 20 29 7b 0a 20 20 20 20 70 52 65  Reg>0 ){.    pRe
11050 67 20 3d 20 26 61 4d 65 6d 5b 70 43 2d 3e 70 73  g = &aMem[pC->ps
11060 65 75 64 6f 54 61 62 6c 65 52 65 67 5d 3b 0a 20  eudoTableReg];. 
11070 20 20 20 61 73 73 65 72 74 28 20 70 52 65 67 2d     assert( pReg-
11080 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f  >flags & MEM_Blo
11090 62 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  b );.    assert(
110a0 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 52 65 67   memIsValid(pReg
110b0 29 20 29 3b 0a 20 20 20 20 70 61 79 6c 6f 61 64  ) );.    payload
110c0 53 69 7a 65 20 3d 20 70 52 65 67 2d 3e 6e 3b 0a  Size = pReg->n;.
110d0 20 20 20 20 7a 52 65 63 20 3d 20 70 52 65 67 2d      zRec = pReg-
110e0 3e 7a 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68  >z;.    pC->cach
110f0 65 53 74 61 74 75 73 20 3d 20 28 70 4f 70 2d 3e  eStatus = (pOp->
11100 70 35 26 4f 50 46 4c 41 47 5f 43 4c 45 41 52 43  p5&OPFLAG_CLEARC
11110 41 43 48 45 29 20 3f 20 43 41 43 48 45 5f 53 54  ACHE) ? CACHE_ST
11120 41 4c 45 20 3a 20 70 2d 3e 63 61 63 68 65 43 74  ALE : p->cacheCt
11130 72 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  r;.    assert( p
11140 61 79 6c 6f 61 64 53 69 7a 65 3d 3d 30 20 7c 7c  ayloadSize==0 ||
11150 20 7a 52 65 63 21 3d 30 20 29 3b 0a 20 20 7d 65   zRec!=0 );.  }e
11160 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 43 6f 6e 73  lse{.    /* Cons
11170 69 64 65 72 20 74 68 65 20 72 6f 77 20 74 6f 20  ider the row to 
11180 62 65 20 4e 55 4c 4c 20 2a 2f 0a 20 20 20 20 70  be NULL */.    p
11190 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20 30 3b 0a  ayloadSize = 0;.
111a0 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20 70 61 79    }..  /* If pay
111b0 6c 6f 61 64 53 69 7a 65 20 69 73 20 30 2c 20 74  loadSize is 0, t
111c0 68 65 6e 20 6a 75 73 74 20 73 74 6f 72 65 20 61  hen just store a
111d0 20 4e 55 4c 4c 20 2a 2f 0a 20 20 69 66 28 20 70   NULL */.  if( p
111e0 61 79 6c 6f 61 64 53 69 7a 65 3d 3d 30 20 29 7b  ayloadSize==0 ){
111f0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 44 65  .    assert( pDe
11200 73 74 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 4e 75  st->flags&MEM_Nu
11210 6c 6c 20 29 3b 0a 20 20 20 20 67 6f 74 6f 20 6f  ll );.    goto o
11220 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20  p_column_out;.  
11230 7d 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e  }.  assert( db->
11240 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49  aLimit[SQLITE_LI
11250 4d 49 54 5f 4c 45 4e 47 54 48 5d 3e 3d 30 20 29  MIT_LENGTH]>=0 )
11260 3b 0a 20 20 69 66 28 20 70 61 79 6c 6f 61 64 53  ;.  if( payloadS
11270 69 7a 65 20 3e 20 28 75 33 32 29 64 62 2d 3e 61  ize > (u32)db->a
11280 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d  Limit[SQLITE_LIM
11290 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20  IT_LENGTH] ){.  
112a0 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a    goto too_big;.
112b0 20 20 7d 0a 0a 20 20 6e 46 69 65 6c 64 20 3d 20    }..  nField = 
112c0 70 43 2d 3e 6e 46 69 65 6c 64 3b 0a 20 20 61 73  pC->nField;.  as
112d0 73 65 72 74 28 20 70 32 3c 6e 46 69 65 6c 64 20  sert( p2<nField 
112e0 29 3b 0a 0a 20 20 2f 2a 20 52 65 61 64 20 61 6e  );..  /* Read an
112f0 64 20 70 61 72 73 65 20 74 68 65 20 74 61 62 6c  d parse the tabl
11300 65 20 68 65 61 64 65 72 2e 20 20 53 74 6f 72 65  e header.  Store
11310 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20   the results of 
11320 74 68 65 20 70 61 72 73 65 0a 20 20 2a 2a 20 69  the parse.  ** i
11330 6e 74 6f 20 74 68 65 20 72 65 63 6f 72 64 20 68  nto the record h
11340 65 61 64 65 72 20 63 61 63 68 65 20 66 69 65 6c  eader cache fiel
11350 64 73 20 6f 66 20 74 68 65 20 63 75 72 73 6f 72  ds of the cursor
11360 2e 0a 20 20 2a 2f 0a 20 20 61 54 79 70 65 20 3d  ..  */.  aType =
11370 20 70 43 2d 3e 61 54 79 70 65 3b 0a 20 20 69 66   pC->aType;.  if
11380 28 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75  ( pC->cacheStatu
11390 73 3d 3d 70 2d 3e 63 61 63 68 65 43 74 72 20 29  s==p->cacheCtr )
113a0 7b 0a 20 20 20 20 61 4f 66 66 73 65 74 20 3d 20  {.    aOffset = 
113b0 70 43 2d 3e 61 4f 66 66 73 65 74 3b 0a 20 20 7d  pC->aOffset;.  }
113c0 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74  else{.    assert
113d0 28 61 54 79 70 65 29 3b 0a 20 20 20 20 61 76 61  (aType);.    ava
113e0 69 6c 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e  il = 0;.    pC->
113f0 61 4f 66 66 73 65 74 20 3d 20 61 4f 66 66 73 65  aOffset = aOffse
11400 74 20 3d 20 26 61 54 79 70 65 5b 6e 46 69 65 6c  t = &aType[nFiel
11410 64 5d 3b 0a 20 20 20 20 70 43 2d 3e 70 61 79 6c  d];.    pC->payl
11420 6f 61 64 53 69 7a 65 20 3d 20 70 61 79 6c 6f 61  oadSize = payloa
11430 64 53 69 7a 65 3b 0a 20 20 20 20 70 43 2d 3e 63  dSize;.    pC->c
11440 61 63 68 65 53 74 61 74 75 73 20 3d 20 70 2d 3e  acheStatus = p->
11450 63 61 63 68 65 43 74 72 3b 0a 0a 20 20 20 20 2f  cacheCtr;..    /
11460 2a 20 46 69 67 75 72 65 20 6f 75 74 20 68 6f 77  * Figure out how
11470 20 6d 61 6e 79 20 62 79 74 65 73 20 61 72 65 20   many bytes are 
11480 69 6e 20 74 68 65 20 68 65 61 64 65 72 20 2a 2f  in the header */
11490 0a 20 20 20 20 69 66 28 20 7a 52 65 63 20 29 7b  .    if( zRec ){
114a0 0a 20 20 20 20 20 20 7a 44 61 74 61 20 3d 20 7a  .      zData = z
114b0 52 65 63 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  Rec;.    }else{.
114c0 20 20 20 20 20 20 69 66 28 20 70 43 2d 3e 69 73        if( pC->is
114d0 49 6e 64 65 78 20 29 7b 0a 20 20 20 20 20 20 20  Index ){.       
114e0 20 7a 44 61 74 61 20 3d 20 28 63 68 61 72 2a 29   zData = (char*)
114f0 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79 46  sqlite3BtreeKeyF
11500 65 74 63 68 28 70 43 72 73 72 2c 20 26 61 76 61  etch(pCrsr, &ava
11510 69 6c 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  il);.      }else
11520 7b 0a 20 20 20 20 20 20 20 20 7a 44 61 74 61 20  {.        zData 
11530 3d 20 28 63 68 61 72 2a 29 73 71 6c 69 74 65 33  = (char*)sqlite3
11540 42 74 72 65 65 44 61 74 61 46 65 74 63 68 28 70  BtreeDataFetch(p
11550 43 72 73 72 2c 20 26 61 76 61 69 6c 29 3b 0a 20  Crsr, &avail);. 
11560 20 20 20 20 20 7d 0a 20 20 20 20 20 20 2f 2a 20       }.      /* 
11570 49 66 20 4b 65 79 46 65 74 63 68 28 29 2f 44 61  If KeyFetch()/Da
11580 74 61 46 65 74 63 68 28 29 20 6d 61 6e 61 67 65  taFetch() manage
11590 64 20 74 6f 20 67 65 74 20 74 68 65 20 65 6e 74  d to get the ent
115a0 69 72 65 20 70 61 79 6c 6f 61 64 2c 0a 20 20 20  ire payload,.   
115b0 20 20 20 2a 2a 20 73 61 76 65 20 74 68 65 20 70     ** save the p
115c0 61 79 6c 6f 61 64 20 69 6e 20 74 68 65 20 70 43  ayload in the pC
115d0 2d 3e 61 52 6f 77 20 63 61 63 68 65 2e 20 20 54  ->aRow cache.  T
115e0 68 61 74 20 77 69 6c 6c 20 73 61 76 65 20 75 73  hat will save us
115f0 20 66 72 6f 6d 0a 20 20 20 20 20 20 2a 2a 20 68   from.      ** h
11600 61 76 69 6e 67 20 74 6f 20 6d 61 6b 65 20 61 64  aving to make ad
11610 64 69 74 69 6f 6e 61 6c 20 63 61 6c 6c 73 20 74  ditional calls t
11620 6f 20 66 65 74 63 68 20 74 68 65 20 63 6f 6e 74  o fetch the cont
11630 65 6e 74 20 70 6f 72 74 69 6f 6e 20 6f 66 0a 20  ent portion of. 
11640 20 20 20 20 20 2a 2a 20 74 68 65 20 72 65 63 6f       ** the reco
11650 72 64 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20  rd..      */.   
11660 20 20 20 61 73 73 65 72 74 28 20 61 76 61 69 6c     assert( avail
11670 3e 3d 30 20 29 3b 0a 20 20 20 20 20 20 69 66 28  >=0 );.      if(
11680 20 70 61 79 6c 6f 61 64 53 69 7a 65 20 3c 3d 20   payloadSize <= 
11690 28 75 33 32 29 61 76 61 69 6c 20 29 7b 0a 20 20  (u32)avail ){.  
116a0 20 20 20 20 20 20 7a 52 65 63 20 3d 20 7a 44 61        zRec = zDa
116b0 74 61 3b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e  ta;.        pC->
116c0 61 52 6f 77 20 3d 20 28 75 38 2a 29 7a 44 61 74  aRow = (u8*)zDat
116d0 61 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  a;.      }else{.
116e0 20 20 20 20 20 20 20 20 70 43 2d 3e 61 52 6f 77          pC->aRow
116f0 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20   = 0;.      }.  
11700 20 20 7d 0a 20 20 20 20 2f 2a 20 54 68 65 20 66    }.    /* The f
11710 6f 6c 6c 6f 77 69 6e 67 20 61 73 73 65 72 74 20  ollowing assert 
11720 69 73 20 74 72 75 65 20 69 6e 20 61 6c 6c 20 63  is true in all c
11730 61 73 65 73 20 61 63 63 65 70 74 20 77 68 65 6e  ases accept when
11740 0a 20 20 20 20 2a 2a 20 74 68 65 20 64 61 74 61  .    ** the data
11750 62 61 73 65 20 66 69 6c 65 20 68 61 73 20 62 65  base file has be
11760 65 6e 20 63 6f 72 72 75 70 74 65 64 20 65 78 74  en corrupted ext
11770 65 72 6e 61 6c 6c 79 2e 0a 20 20 20 20 2a 2a 20  ernally..    ** 
11780 20 20 20 61 73 73 65 72 74 28 20 7a 52 65 63 21     assert( zRec!
11790 3d 30 20 7c 7c 20 61 76 61 69 6c 3e 3d 70 61 79  =0 || avail>=pay
117a0 6c 6f 61 64 53 69 7a 65 20 7c 7c 20 61 76 61 69  loadSize || avai
117b0 6c 3e 3d 39 20 29 3b 20 2a 2f 0a 20 20 20 20 73  l>=9 ); */.    s
117c0 7a 48 64 72 20 3d 20 67 65 74 56 61 72 69 6e 74  zHdr = getVarint
117d0 33 32 28 28 75 38 2a 29 7a 44 61 74 61 2c 20 6f  32((u8*)zData, o
117e0 66 66 73 65 74 29 3b 0a 0a 20 20 20 20 2f 2a 20  ffset);..    /* 
117f0 4d 61 6b 65 20 73 75 72 65 20 61 20 63 6f 72 72  Make sure a corr
11800 75 70 74 20 64 61 74 61 62 61 73 65 20 68 61 73  upt database has
11810 20 6e 6f 74 20 67 69 76 65 6e 20 75 73 20 61 6e   not given us an
11820 20 6f 76 65 72 73 69 7a 65 20 68 65 61 64 65 72   oversize header
11830 2e 0a 20 20 20 20 2a 2a 20 44 6f 20 74 68 69 73  ..    ** Do this
11840 20 6e 6f 77 20 74 6f 20 61 76 6f 69 64 20 61 6e   now to avoid an
11850 20 6f 76 65 72 73 69 7a 65 20 6d 65 6d 6f 72 79   oversize memory
11860 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 0a 20 20 20   allocation..   
11870 20 2a 2a 0a 20 20 20 20 2a 2a 20 54 79 70 65 20   **.    ** Type 
11880 65 6e 74 72 69 65 73 20 63 61 6e 20 62 65 20 62  entries can be b
11890 65 74 77 65 65 6e 20 31 20 61 6e 64 20 35 20 62  etween 1 and 5 b
118a0 79 74 65 73 20 65 61 63 68 2e 20 20 42 75 74 20  ytes each.  But 
118b0 34 20 61 6e 64 20 35 20 62 79 74 65 0a 20 20 20  4 and 5 byte.   
118c0 20 2a 2a 20 74 79 70 65 73 20 75 73 65 20 73 6f   ** types use so
118d0 20 6d 75 63 68 20 64 61 74 61 20 73 70 61 63 65   much data space
118e0 20 74 68 61 74 20 74 68 65 72 65 20 63 61 6e 20   that there can 
118f0 6f 6e 6c 79 20 62 65 20 34 30 39 36 20 61 6e 64  only be 4096 and
11900 20 33 32 20 6f 66 0a 20 20 20 20 2a 2a 20 74 68   32 of.    ** th
11910 65 6d 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79  em, respectively
11920 2e 20 20 53 6f 20 74 68 65 20 6d 61 78 69 6d 75  .  So the maximu
11930 6d 20 68 65 61 64 65 72 20 6c 65 6e 67 74 68 20  m header length 
11940 72 65 73 75 6c 74 73 20 66 72 6f 6d 20 61 0a 20  results from a. 
11950 20 20 20 2a 2a 20 33 2d 62 79 74 65 20 74 79 70     ** 3-byte typ
11960 65 20 66 6f 72 20 65 61 63 68 20 6f 66 20 74 68  e for each of th
11970 65 20 6d 61 78 69 6d 75 6d 20 6f 66 20 33 32 37  e maximum of 327
11980 36 38 20 63 6f 6c 75 6d 6e 73 20 70 6c 75 73 20  68 columns plus 
11990 74 68 72 65 65 0a 20 20 20 20 2a 2a 20 65 78 74  three.    ** ext
119a0 72 61 20 62 79 74 65 73 20 66 6f 72 20 74 68 65  ra bytes for the
119b0 20 68 65 61 64 65 72 20 6c 65 6e 67 74 68 20 69   header length i
119c0 74 73 65 6c 66 2e 20 20 33 32 37 36 38 2a 33 20  tself.  32768*3 
119d0 2b 20 33 20 3d 20 39 38 33 30 37 2e 0a 20 20 20  + 3 = 98307..   
119e0 20 2a 2f 0a 20 20 20 20 69 66 28 20 6f 66 66 73   */.    if( offs
119f0 65 74 20 3e 20 39 38 33 30 37 20 29 7b 0a 20 20  et > 98307 ){.  
11a00 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
11a10 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20  CORRUPT_BKPT;.  
11a20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75      goto op_colu
11a30 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20 7d 0a 0a 20  mn_out;.    }.. 
11a40 20 20 20 2f 2a 20 43 6f 6d 70 75 74 65 20 69 6e     /* Compute in
11a50 20 6c 65 6e 20 74 68 65 20 6e 75 6d 62 65 72 20   len the number 
11a60 6f 66 20 62 79 74 65 73 20 6f 66 20 64 61 74 61  of bytes of data
11a70 20 77 65 20 6e 65 65 64 20 74 6f 20 72 65 61 64   we need to read
11a80 20 69 6e 20 6f 72 64 65 72 0a 20 20 20 20 2a 2a   in order.    **
11a90 20 74 6f 20 67 65 74 20 6e 46 69 65 6c 64 20 74   to get nField t
11aa0 79 70 65 20 76 61 6c 75 65 73 2e 20 20 6f 66 66  ype values.  off
11ab0 73 65 74 20 69 73 20 61 6e 20 75 70 70 65 72 20  set is an upper 
11ac0 62 6f 75 6e 64 20 6f 6e 20 74 68 69 73 2e 20 20  bound on this.  
11ad0 42 75 74 0a 20 20 20 20 2a 2a 20 6e 46 69 65 6c  But.    ** nFiel
11ae0 64 20 6d 69 67 68 74 20 62 65 20 73 69 67 6e 69  d might be signi
11af0 66 69 63 61 6e 74 6c 79 20 6c 65 73 73 20 74 68  ficantly less th
11b00 61 6e 20 74 68 65 20 74 72 75 65 20 6e 75 6d 62  an the true numb
11b10 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 0a 20 20  er of columns.  
11b20 20 20 2a 2a 20 69 6e 20 74 68 65 20 74 61 62 6c    ** in the tabl
11b30 65 2c 20 61 6e 64 20 69 6e 20 74 68 61 74 20 63  e, and in that c
11b40 61 73 65 2c 20 35 2a 6e 46 69 65 6c 64 2b 33 20  ase, 5*nField+3 
11b50 6d 69 67 68 74 20 62 65 20 73 6d 61 6c 6c 65 72  might be smaller
11b60 20 74 68 61 6e 20 6f 66 66 73 65 74 2e 0a 20 20   than offset..  
11b70 20 20 2a 2a 20 57 65 20 77 61 6e 74 20 74 6f 20    ** We want to 
11b80 6d 69 6e 69 6d 69 7a 65 20 6c 65 6e 20 69 6e 20  minimize len in 
11b90 6f 72 64 65 72 20 74 6f 20 6c 69 6d 69 74 20 74  order to limit t
11ba0 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20 6d  he size of the m
11bb0 65 6d 6f 72 79 0a 20 20 20 20 2a 2a 20 61 6c 6c  emory.    ** all
11bc0 6f 63 61 74 69 6f 6e 2c 20 65 73 70 65 63 69 61  ocation, especia
11bd0 6c 6c 79 20 69 66 20 61 20 63 6f 72 72 75 70 74  lly if a corrupt
11be0 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 68   database file h
11bf0 61 73 20 63 61 75 73 65 64 20 6f 66 66 73 65 74  as caused offset
11c00 0a 20 20 20 20 2a 2a 20 74 6f 20 62 65 20 6f 76  .    ** to be ov
11c10 65 72 73 69 7a 65 64 2e 20 4f 66 66 73 65 74 20  ersized. Offset 
11c20 69 73 20 6c 69 6d 69 74 65 64 20 74 6f 20 39 38  is limited to 98
11c30 33 30 37 20 61 62 6f 76 65 2e 20 20 42 75 74 20  307 above.  But 
11c40 39 38 33 30 37 20 6d 69 67 68 74 0a 20 20 20 20  98307 might.    
11c50 2a 2a 20 73 74 69 6c 6c 20 65 78 63 65 65 64 20  ** still exceed 
11c60 52 6f 62 73 6f 6e 20 6d 65 6d 6f 72 79 20 61 6c  Robson memory al
11c70 6c 6f 63 61 74 69 6f 6e 20 6c 69 6d 69 74 73 20  location limits 
11c80 6f 6e 20 73 6f 6d 65 20 63 6f 6e 66 69 67 75 72  on some configur
11c90 61 74 69 6f 6e 73 2e 0a 20 20 20 20 2a 2a 20 4f  ations..    ** O
11ca0 6e 20 73 79 73 74 65 6d 73 20 74 68 61 74 20 63  n systems that c
11cb0 61 6e 6e 6f 74 20 74 6f 6c 65 72 61 74 65 20 6c  annot tolerate l
11cc0 61 72 67 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  arge memory allo
11cd0 63 61 74 69 6f 6e 73 2c 20 6e 46 69 65 6c 64 2a  cations, nField*
11ce0 35 2b 33 0a 20 20 20 20 2a 2a 20 77 69 6c 6c 20  5+3.    ** will 
11cf0 6c 69 6b 65 6c 79 20 62 65 20 6d 75 63 68 20 73  likely be much s
11d00 6d 61 6c 6c 65 72 20 73 69 6e 63 65 20 6e 46 69  maller since nFi
11d10 65 6c 64 20 77 69 6c 6c 20 6c 69 6b 65 6c 79 20  eld will likely 
11d20 62 65 20 6c 65 73 73 20 74 68 61 6e 0a 20 20 20  be less than.   
11d30 20 2a 2a 20 32 30 20 6f 72 20 73 6f 2e 20 20 54   ** 20 or so.  T
11d40 68 69 73 20 69 6e 73 75 72 65 73 20 74 68 61 74  his insures that
11d50 20 52 6f 62 73 6f 6e 20 6d 65 6d 6f 72 79 20 61   Robson memory a
11d60 6c 6c 6f 63 61 74 69 6f 6e 20 6c 69 6d 69 74 73  llocation limits
11d70 20 61 72 65 0a 20 20 20 20 2a 2a 20 6e 6f 74 20   are.    ** not 
11d80 65 78 63 65 65 64 65 64 20 65 76 65 6e 20 66 6f  exceeded even fo
11d90 72 20 63 6f 72 72 75 70 74 20 64 61 74 61 62 61  r corrupt databa
11da0 73 65 20 66 69 6c 65 73 2e 0a 20 20 20 20 2a 2f  se files..    */
11db0 0a 20 20 20 20 6c 65 6e 20 3d 20 6e 46 69 65 6c  .    len = nFiel
11dc0 64 2a 35 20 2b 20 33 3b 0a 20 20 20 20 69 66 28  d*5 + 3;.    if(
11dd0 20 6c 65 6e 20 3e 20 28 69 6e 74 29 6f 66 66 73   len > (int)offs
11de0 65 74 20 29 20 6c 65 6e 20 3d 20 28 69 6e 74 29  et ) len = (int)
11df0 6f 66 66 73 65 74 3b 0a 0a 20 20 20 20 2f 2a 20  offset;..    /* 
11e00 54 68 65 20 4b 65 79 46 65 74 63 68 28 29 20 6f  The KeyFetch() o
11e10 72 20 44 61 74 61 46 65 74 63 68 28 29 20 61 62  r DataFetch() ab
11e20 6f 76 65 20 61 72 65 20 66 61 73 74 20 61 6e 64  ove are fast and
11e30 20 77 69 6c 6c 20 67 65 74 20 74 68 65 20 65 6e   will get the en
11e40 74 69 72 65 0a 20 20 20 20 2a 2a 20 72 65 63 6f  tire.    ** reco
11e50 72 64 20 68 65 61 64 65 72 20 69 6e 20 6d 6f 73  rd header in mos
11e60 74 20 63 61 73 65 73 2e 20 20 42 75 74 20 74 68  t cases.  But th
11e70 65 79 20 77 69 6c 6c 20 66 61 69 6c 20 74 6f 20  ey will fail to 
11e80 67 65 74 20 74 68 65 20 63 6f 6d 70 6c 65 74 65  get the complete
11e90 0a 20 20 20 20 2a 2a 20 72 65 63 6f 72 64 20 68  .    ** record h
11ea0 65 61 64 65 72 20 69 66 20 74 68 65 20 72 65 63  eader if the rec
11eb0 6f 72 64 20 68 65 61 64 65 72 20 64 6f 65 73 20  ord header does 
11ec0 6e 6f 74 20 66 69 74 20 6f 6e 20 61 20 73 69 6e  not fit on a sin
11ed0 67 6c 65 20 70 61 67 65 0a 20 20 20 20 2a 2a 20  gle page.    ** 
11ee0 69 6e 20 74 68 65 20 42 2d 54 72 65 65 2e 20 20  in the B-Tree.  
11ef0 57 68 65 6e 20 74 68 61 74 20 68 61 70 70 65 6e  When that happen
11f00 73 2c 20 75 73 65 20 73 71 6c 69 74 65 33 56 64  s, use sqlite3Vd
11f10 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65 28 29  beMemFromBtree()
11f20 20 74 6f 0a 20 20 20 20 2a 2a 20 61 63 71 75 69   to.    ** acqui
11f30 72 65 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20  re the complete 
11f40 68 65 61 64 65 72 20 74 65 78 74 2e 0a 20 20 20  header text..   
11f50 20 2a 2f 0a 20 20 20 20 69 66 28 20 21 7a 52 65   */.    if( !zRe
11f60 63 20 26 26 20 61 76 61 69 6c 3c 6c 65 6e 20 29  c && avail<len )
11f70 7b 0a 20 20 20 20 20 20 73 4d 65 6d 2e 66 6c 61  {.      sMem.fla
11f80 67 73 20 3d 20 30 3b 0a 20 20 20 20 20 20 73 4d  gs = 0;.      sM
11f90 65 6d 2e 64 62 20 3d 20 30 3b 0a 20 20 20 20 20  em.db = 0;.     
11fa0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
11fb0 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65 28 70 43  eMemFromBtree(pC
11fc0 72 73 72 2c 20 30 2c 20 6c 65 6e 2c 20 70 43 2d  rsr, 0, len, pC-
11fd0 3e 69 73 49 6e 64 65 78 2c 20 26 73 4d 65 6d 29  >isIndex, &sMem)
11fe0 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 21 3d  ;.      if( rc!=
11ff0 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
12000 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c       goto op_col
12010 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20 20 20 7d  umn_out;.      }
12020 0a 20 20 20 20 20 20 7a 44 61 74 61 20 3d 20 73  .      zData = s
12030 4d 65 6d 2e 7a 3b 0a 20 20 20 20 7d 0a 20 20 20  Mem.z;.    }.   
12040 20 7a 45 6e 64 48 64 72 20 3d 20 28 75 38 20 2a   zEndHdr = (u8 *
12050 29 26 7a 44 61 74 61 5b 6c 65 6e 5d 3b 0a 20 20  )&zData[len];.  
12060 20 20 7a 49 64 78 20 3d 20 28 75 38 20 2a 29 26    zIdx = (u8 *)&
12070 7a 44 61 74 61 5b 73 7a 48 64 72 5d 3b 0a 0a 20  zData[szHdr];.. 
12080 20 20 20 2f 2a 20 53 63 61 6e 20 74 68 65 20 68     /* Scan the h
12090 65 61 64 65 72 20 61 6e 64 20 75 73 65 20 69 74  eader and use it
120a0 20 74 6f 20 66 69 6c 6c 20 69 6e 20 74 68 65 20   to fill in the 
120b0 61 54 79 70 65 5b 5d 20 61 6e 64 20 61 4f 66 66  aType[] and aOff
120c0 73 65 74 5b 5d 0a 20 20 20 20 2a 2a 20 61 72 72  set[].    ** arr
120d0 61 79 73 2e 20 20 61 54 79 70 65 5b 69 5d 20 77  ays.  aType[i] w
120e0 69 6c 6c 20 63 6f 6e 74 61 69 6e 20 74 68 65 20  ill contain the 
120f0 74 79 70 65 20 69 6e 74 65 67 65 72 20 66 6f 72  type integer for
12100 20 74 68 65 20 69 2d 74 68 0a 20 20 20 20 2a 2a   the i-th.    **
12110 20 63 6f 6c 75 6d 6e 20 61 6e 64 20 61 4f 66 66   column and aOff
12120 73 65 74 5b 69 5d 20 77 69 6c 6c 20 63 6f 6e 74  set[i] will cont
12130 61 69 6e 20 74 68 65 20 6f 66 66 73 65 74 20 66  ain the offset f
12140 72 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e  rom the beginnin
12150 67 0a 20 20 20 20 2a 2a 20 6f 66 20 74 68 65 20  g.    ** of the 
12160 72 65 63 6f 72 64 20 74 6f 20 74 68 65 20 73 74  record to the st
12170 61 72 74 20 6f 66 20 74 68 65 20 64 61 74 61 20  art of the data 
12180 66 6f 72 20 74 68 65 20 69 2d 74 68 20 63 6f 6c  for the i-th col
12190 75 6d 6e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 66  umn.    */.    f
121a0 6f 72 28 69 3d 30 3b 20 69 3c 6e 46 69 65 6c 64  or(i=0; i<nField
121b0 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 69 66  ; i++){.      if
121c0 28 20 7a 49 64 78 3c 7a 45 6e 64 48 64 72 20 29  ( zIdx<zEndHdr )
121d0 7b 0a 20 20 20 20 20 20 20 20 61 4f 66 66 73 65  {.        aOffse
121e0 74 5b 69 5d 20 3d 20 6f 66 66 73 65 74 3b 0a 20  t[i] = offset;. 
121f0 20 20 20 20 20 20 20 7a 49 64 78 20 2b 3d 20 67         zIdx += g
12200 65 74 56 61 72 69 6e 74 33 32 28 7a 49 64 78 2c  etVarint32(zIdx,
12210 20 61 54 79 70 65 5b 69 5d 29 3b 0a 20 20 20 20   aType[i]);.    
12220 20 20 20 20 73 7a 46 69 65 6c 64 20 3d 20 73 71      szField = sq
12230 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 54  lite3VdbeSerialT
12240 79 70 65 4c 65 6e 28 61 54 79 70 65 5b 69 5d 29  ypeLen(aType[i])
12250 3b 0a 20 20 20 20 20 20 20 20 6f 66 66 73 65 74  ;.        offset
12260 20 2b 3d 20 73 7a 46 69 65 6c 64 3b 0a 20 20 20   += szField;.   
12270 20 20 20 20 20 69 66 28 20 6f 66 66 73 65 74 3c       if( offset<
12280 73 7a 46 69 65 6c 64 20 29 7b 20 20 2f 2a 20 54  szField ){  /* T
12290 72 75 65 20 69 66 20 6f 66 66 73 65 74 20 6f 76  rue if offset ov
122a0 65 72 66 6c 6f 77 73 20 2a 2f 0a 20 20 20 20 20  erflows */.     
122b0 20 20 20 20 20 7a 49 64 78 20 3d 20 26 7a 45 6e       zIdx = &zEn
122c0 64 48 64 72 5b 31 5d 3b 20 20 2f 2a 20 46 6f 72  dHdr[1];  /* For
122d0 63 65 73 20 53 51 4c 49 54 45 5f 43 4f 52 52 55  ces SQLITE_CORRU
122e0 50 54 20 72 65 74 75 72 6e 20 62 65 6c 6f 77 20  PT return below 
122f0 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 62 72 65  */.          bre
12300 61 6b 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  ak;.        }.  
12310 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
12320 20 20 20 2f 2a 20 49 66 20 69 20 69 73 20 6c 65     /* If i is le
12330 73 73 20 74 68 61 74 20 6e 46 69 65 6c 64 2c 20  ss that nField, 
12340 74 68 65 6e 20 74 68 65 72 65 20 61 72 65 20 6c  then there are l
12350 65 73 73 20 66 69 65 6c 64 73 20 69 6e 20 74 68  ess fields in th
12360 69 73 0a 20 20 20 20 20 20 20 20 2a 2a 20 72 65  is.        ** re
12370 63 6f 72 64 20 74 68 61 6e 20 53 65 74 4e 75 6d  cord than SetNum
12380 43 6f 6c 75 6d 6e 73 20 69 6e 64 69 63 61 74 65  Columns indicate
12390 64 20 74 68 65 72 65 20 61 72 65 20 63 6f 6c 75  d there are colu
123a0 6d 6e 73 20 69 6e 20 74 68 65 0a 20 20 20 20 20  mns in the.     
123b0 20 20 20 2a 2a 20 74 61 62 6c 65 2e 20 53 65 74     ** table. Set
123c0 20 74 68 65 20 6f 66 66 73 65 74 20 66 6f 72 20   the offset for 
123d0 61 6e 79 20 65 78 74 72 61 20 63 6f 6c 75 6d 6e  any extra column
123e0 73 20 6e 6f 74 20 70 72 65 73 65 6e 74 20 69 6e  s not present in
123f0 0a 20 20 20 20 20 20 20 20 2a 2a 20 74 68 65 20  .        ** the 
12400 72 65 63 6f 72 64 20 74 6f 20 30 2e 20 54 68 69  record to 0. Thi
12410 73 20 74 65 6c 6c 73 20 63 6f 64 65 20 62 65 6c  s tells code bel
12420 6f 77 20 74 6f 20 73 74 6f 72 65 20 61 20 4e 55  ow to store a NU
12430 4c 4c 0a 20 20 20 20 20 20 20 20 2a 2a 20 69 6e  LL.        ** in
12440 73 74 65 61 64 20 6f 66 20 64 65 73 65 72 69 61  stead of deseria
12450 6c 69 7a 69 6e 67 20 61 20 76 61 6c 75 65 20 66  lizing a value f
12460 72 6f 6d 20 74 68 65 20 72 65 63 6f 72 64 2e 0a  rom the record..
12470 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20          */.     
12480 20 20 20 61 4f 66 66 73 65 74 5b 69 5d 20 3d 20     aOffset[i] = 
12490 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  0;.      }.    }
124a0 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
124b0 4d 65 6d 52 65 6c 65 61 73 65 28 26 73 4d 65 6d  MemRelease(&sMem
124c0 29 3b 0a 20 20 20 20 73 4d 65 6d 2e 66 6c 61 67  );.    sMem.flag
124d0 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 0a 20  s = MEM_Null;.. 
124e0 20 20 20 2f 2a 20 49 66 20 77 65 20 68 61 76 65     /* If we have
124f0 20 72 65 61 64 20 6d 6f 72 65 20 68 65 61 64 65   read more heade
12500 72 20 64 61 74 61 20 74 68 61 6e 20 77 61 73 20  r data than was 
12510 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74 68 65  contained in the
12520 20 68 65 61 64 65 72 2c 0a 20 20 20 20 2a 2a 20   header,.    ** 
12530 6f 72 20 69 66 20 74 68 65 20 65 6e 64 20 6f 66  or if the end of
12540 20 74 68 65 20 6c 61 73 74 20 66 69 65 6c 64 20   the last field 
12550 61 70 70 65 61 72 73 20 74 6f 20 62 65 20 70 61  appears to be pa
12560 73 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  st the end of th
12570 65 0a 20 20 20 20 2a 2a 20 72 65 63 6f 72 64 2c  e.    ** record,
12580 20 6f 72 20 69 66 20 74 68 65 20 65 6e 64 20 6f   or if the end o
12590 66 20 74 68 65 20 6c 61 73 74 20 66 69 65 6c 64  f the last field
125a0 20 61 70 70 65 61 72 73 20 74 6f 20 62 65 20 62   appears to be b
125b0 65 66 6f 72 65 20 74 68 65 20 65 6e 64 0a 20 20  efore the end.  
125c0 20 20 2a 2a 20 6f 66 20 74 68 65 20 72 65 63 6f    ** of the reco
125d0 72 64 20 28 77 68 65 6e 20 61 6c 6c 20 66 69 65  rd (when all fie
125e0 6c 64 73 20 70 72 65 73 65 6e 74 29 2c 20 74 68  lds present), th
125f0 65 6e 20 77 65 20 6d 75 73 74 20 62 65 20 64 65  en we must be de
12600 61 6c 69 6e 67 20 0a 20 20 20 20 2a 2a 20 77 69  aling .    ** wi
12610 74 68 20 61 20 63 6f 72 72 75 70 74 20 64 61 74  th a corrupt dat
12620 61 62 61 73 65 2e 0a 20 20 20 20 2a 2f 0a 20 20  abase..    */.  
12630 20 20 69 66 28 20 28 7a 49 64 78 20 3e 20 7a 45    if( (zIdx > zE
12640 6e 64 48 64 72 29 20 7c 7c 20 28 6f 66 66 73 65  ndHdr) || (offse
12650 74 20 3e 20 70 61 79 6c 6f 61 64 53 69 7a 65 29  t > payloadSize)
12660 0a 20 20 20 20 20 20 20 20 20 7c 7c 20 28 7a 49  .         || (zI
12670 64 78 3d 3d 7a 45 6e 64 48 64 72 20 26 26 20 6f  dx==zEndHdr && o
12680 66 66 73 65 74 21 3d 70 61 79 6c 6f 61 64 53 69  ffset!=payloadSi
12690 7a 65 29 20 29 7b 0a 20 20 20 20 20 20 72 63 20  ze) ){.      rc 
126a0 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54  = SQLITE_CORRUPT
126b0 5f 42 4b 50 54 3b 0a 20 20 20 20 20 20 67 6f 74  _BKPT;.      got
126c0 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b  o op_column_out;
126d0 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 2f 2a  .    }.  }..  /*
126e0 20 47 65 74 20 74 68 65 20 63 6f 6c 75 6d 6e 20   Get the column 
126f0 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 20 49 66 20  information. If 
12700 61 4f 66 66 73 65 74 5b 70 32 5d 20 69 73 20 6e  aOffset[p2] is n
12710 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 0a 20  on-zero, then . 
12720 20 2a 2a 20 64 65 73 65 72 69 61 6c 69 7a 65 20   ** deserialize 
12730 74 68 65 20 76 61 6c 75 65 20 66 72 6f 6d 20 74  the value from t
12740 68 65 20 72 65 63 6f 72 64 2e 20 49 66 20 61 4f  he record. If aO
12750 66 66 73 65 74 5b 70 32 5d 20 69 73 20 7a 65 72  ffset[p2] is zer
12760 6f 2c 0a 20 20 2a 2a 20 74 68 65 6e 20 74 68 65  o,.  ** then the
12770 72 65 20 61 72 65 20 6e 6f 74 20 65 6e 6f 75 67  re are not enoug
12780 68 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20  h fields in the 
12790 72 65 63 6f 72 64 20 74 6f 20 73 61 74 69 73 66  record to satisf
127a0 79 20 74 68 65 0a 20 20 2a 2a 20 72 65 71 75 65  y the.  ** reque
127b0 73 74 2e 20 20 49 6e 20 74 68 69 73 20 63 61 73  st.  In this cas
127c0 65 2c 20 73 65 74 20 74 68 65 20 76 61 6c 75 65  e, set the value
127d0 20 4e 55 4c 4c 20 6f 72 20 74 6f 20 50 34 20 69   NULL or to P4 i
127e0 66 20 50 34 20 69 73 0a 20 20 2a 2a 20 61 20 70  f P4 is.  ** a p
127f0 6f 69 6e 74 65 72 20 74 6f 20 61 20 4d 65 6d 20  ointer to a Mem 
12800 6f 62 6a 65 63 74 2e 0a 20 20 2a 2f 0a 20 20 69  object..  */.  i
12810 66 28 20 61 4f 66 66 73 65 74 5b 70 32 5d 20 29  f( aOffset[p2] )
12820 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 72 63  {.    assert( rc
12830 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 20  ==SQLITE_OK );. 
12840 20 20 20 69 66 28 20 7a 52 65 63 20 29 7b 0a 20     if( zRec ){. 
12850 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
12860 4d 65 6d 52 65 6c 65 61 73 65 45 78 74 65 72 6e  MemReleaseExtern
12870 61 6c 28 70 44 65 73 74 29 3b 0a 20 20 20 20 20  al(pDest);.     
12880 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69   sqlite3VdbeSeri
12890 61 6c 47 65 74 28 28 75 38 20 2a 29 26 7a 52 65  alGet((u8 *)&zRe
128a0 63 5b 61 4f 66 66 73 65 74 5b 70 32 5d 5d 2c 20  c[aOffset[p2]], 
128b0 61 54 79 70 65 5b 70 32 5d 2c 20 70 44 65 73 74  aType[p2], pDest
128c0 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  );.    }else{.  
128d0 20 20 20 20 6c 65 6e 20 3d 20 73 71 6c 69 74 65      len = sqlite
128e0 33 56 64 62 65 53 65 72 69 61 6c 54 79 70 65 4c  3VdbeSerialTypeL
128f0 65 6e 28 61 54 79 70 65 5b 70 32 5d 29 3b 0a 20  en(aType[p2]);. 
12900 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
12910 4d 65 6d 4d 6f 76 65 28 26 73 4d 65 6d 2c 20 70  MemMove(&sMem, p
12920 44 65 73 74 29 3b 0a 20 20 20 20 20 20 72 63 20  Dest);.      rc 
12930 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  = sqlite3VdbeMem
12940 46 72 6f 6d 42 74 72 65 65 28 70 43 72 73 72 2c  FromBtree(pCrsr,
12950 20 61 4f 66 66 73 65 74 5b 70 32 5d 2c 20 6c 65   aOffset[p2], le
12960 6e 2c 20 70 43 2d 3e 69 73 49 6e 64 65 78 2c 20  n, pC->isIndex, 
12970 26 73 4d 65 6d 29 3b 0a 20 20 20 20 20 20 69 66  &sMem);.      if
12980 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
12990 29 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20  ){.        goto 
129a0 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20  op_column_out;. 
129b0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7a 44 61       }.      zDa
129c0 74 61 20 3d 20 73 4d 65 6d 2e 7a 3b 0a 20 20 20  ta = sMem.z;.   
129d0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
129e0 72 69 61 6c 47 65 74 28 28 75 38 2a 29 7a 44 61  rialGet((u8*)zDa
129f0 74 61 2c 20 61 54 79 70 65 5b 70 32 5d 2c 20 70  ta, aType[p2], p
12a00 44 65 73 74 29 3b 0a 20 20 20 20 7d 0a 20 20 20  Dest);.    }.   
12a10 20 70 44 65 73 74 2d 3e 65 6e 63 20 3d 20 65 6e   pDest->enc = en
12a20 63 6f 64 69 6e 67 3b 0a 20 20 7d 65 6c 73 65 7b  coding;.  }else{
12a30 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 34  .    if( pOp->p4
12a40 74 79 70 65 3d 3d 50 34 5f 4d 45 4d 20 29 7b 0a  type==P4_MEM ){.
12a50 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
12a60 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28  eMemShallowCopy(
12a70 70 44 65 73 74 2c 20 70 4f 70 2d 3e 70 34 2e 70  pDest, pOp->p4.p
12a80 4d 65 6d 2c 20 4d 45 4d 5f 53 74 61 74 69 63 29  Mem, MEM_Static)
12a90 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
12aa0 20 20 20 61 73 73 65 72 74 28 20 70 44 65 73 74     assert( pDest
12ab0 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 4e 75 6c 6c  ->flags&MEM_Null
12ac0 20 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20   );.    }.  }.. 
12ad0 20 2f 2a 20 49 66 20 77 65 20 64 79 6e 61 6d 69   /* If we dynami
12ae0 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20  cally allocated 
12af0 73 70 61 63 65 20 74 6f 20 68 6f 6c 64 20 74 68  space to hold th
12b00 65 20 64 61 74 61 20 28 69 6e 20 74 68 65 0a 20  e data (in the. 
12b10 20 2a 2a 20 73 71 6c 69 74 65 33 56 64 62 65 4d   ** sqlite3VdbeM
12b20 65 6d 46 72 6f 6d 42 74 72 65 65 28 29 20 63 61  emFromBtree() ca
12b30 6c 6c 20 61 62 6f 76 65 29 20 74 68 65 6e 20 74  ll above) then t
12b40 72 61 6e 73 66 65 72 20 63 6f 6e 74 72 6f 6c 20  ransfer control 
12b50 6f 66 20 74 68 61 74 0a 20 20 2a 2a 20 64 79 6e  of that.  ** dyn
12b60 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74  amically allocat
12b70 65 64 20 73 70 61 63 65 20 6f 76 65 72 20 74 6f  ed space over to
12b80 20 74 68 65 20 70 44 65 73 74 20 73 74 72 75 63   the pDest struc
12b90 74 75 72 65 2e 0a 20 20 2a 2a 20 54 68 69 73 20  ture..  ** This 
12ba0 70 72 65 76 65 6e 74 73 20 61 20 6d 65 6d 6f 72  prevents a memor
12bb0 79 20 63 6f 70 79 2e 0a 20 20 2a 2f 0a 20 20 69  y copy..  */.  i
12bc0 66 28 20 73 4d 65 6d 2e 7a 4d 61 6c 6c 6f 63 20  f( sMem.zMalloc 
12bd0 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 73  ){.    assert( s
12be0 4d 65 6d 2e 7a 3d 3d 73 4d 65 6d 2e 7a 4d 61 6c  Mem.z==sMem.zMal
12bf0 6c 6f 63 20 29 3b 0a 20 20 20 20 61 73 73 65 72  loc );.    asser
12c00 74 28 20 21 28 70 44 65 73 74 2d 3e 66 6c 61 67  t( !(pDest->flag
12c10 73 20 26 20 4d 45 4d 5f 44 79 6e 29 20 29 3b 0a  s & MEM_Dyn) );.
12c20 20 20 20 20 61 73 73 65 72 74 28 20 21 28 70 44      assert( !(pD
12c30 65 73 74 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45  est->flags & (ME
12c40 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f 53 74 72 29 29  M_Blob|MEM_Str))
12c50 20 7c 7c 20 70 44 65 73 74 2d 3e 7a 3d 3d 73 4d   || pDest->z==sM
12c60 65 6d 2e 7a 20 29 3b 0a 20 20 20 20 70 44 65 73  em.z );.    pDes
12c70 74 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 28 4d 45  t->flags &= ~(ME
12c80 4d 5f 45 70 68 65 6d 7c 4d 45 4d 5f 53 74 61 74  M_Ephem|MEM_Stat
12c90 69 63 29 3b 0a 20 20 20 20 70 44 65 73 74 2d 3e  ic);.    pDest->
12ca0 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 54 65 72  flags |= MEM_Ter
12cb0 6d 3b 0a 20 20 20 20 70 44 65 73 74 2d 3e 7a 20  m;.    pDest->z 
12cc0 3d 20 73 4d 65 6d 2e 7a 3b 0a 20 20 20 20 70 44  = sMem.z;.    pD
12cd0 65 73 74 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d 20 73  est->zMalloc = s
12ce0 4d 65 6d 2e 7a 4d 61 6c 6c 6f 63 3b 0a 20 20 7d  Mem.zMalloc;.  }
12cf0 0a 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ..  rc = sqlite3
12d00 56 64 62 65 4d 65 6d 4d 61 6b 65 57 72 69 74 65  VdbeMemMakeWrite
12d10 61 62 6c 65 28 70 44 65 73 74 29 3b 0a 0a 6f 70  able(pDest);..op
12d20 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3a 0a 20 20 55  _column_out:.  U
12d30 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49  PDATE_MAX_BLOBSI
12d40 5a 45 28 70 44 65 73 74 29 3b 0a 20 20 52 45 47  ZE(pDest);.  REG
12d50 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
12d60 3e 70 33 2c 20 70 44 65 73 74 29 3b 0a 20 20 62  >p3, pDest);.  b
12d70 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
12d80 64 65 3a 20 41 66 66 69 6e 69 74 79 20 50 31 20  de: Affinity P1 
12d90 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20  P2 * P4 *.**.** 
12da0 41 70 70 6c 79 20 61 66 66 69 6e 69 74 69 65 73  Apply affinities
12db0 20 74 6f 20 61 20 72 61 6e 67 65 20 6f 66 20 50   to a range of P
12dc0 32 20 72 65 67 69 73 74 65 72 73 20 73 74 61 72  2 registers star
12dd0 74 69 6e 67 20 77 69 74 68 20 50 31 2e 0a 2a 2a  ting with P1..**
12de0 0a 2a 2a 20 50 34 20 69 73 20 61 20 73 74 72 69  .** P4 is a stri
12df0 6e 67 20 74 68 61 74 20 69 73 20 50 32 20 63 68  ng that is P2 ch
12e00 61 72 61 63 74 65 72 73 20 6c 6f 6e 67 2e 20 54  aracters long. T
12e10 68 65 20 6e 74 68 20 63 68 61 72 61 63 74 65 72  he nth character
12e20 20 6f 66 20 74 68 65 0a 2a 2a 20 73 74 72 69 6e   of the.** strin
12e30 67 20 69 6e 64 69 63 61 74 65 73 20 74 68 65 20  g indicates the 
12e40 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 20  column affinity 
12e50 74 68 61 74 20 73 68 6f 75 6c 64 20 62 65 20 75  that should be u
12e60 73 65 64 20 66 6f 72 20 74 68 65 20 6e 74 68 0a  sed for the nth.
12e70 2a 2a 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69  ** memory cell i
12e80 6e 20 74 68 65 20 72 61 6e 67 65 2e 0a 2a 2f 0a  n the range..*/.
12e90 63 61 73 65 20 4f 50 5f 41 66 66 69 6e 69 74 79  case OP_Affinity
12ea0 3a 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  : {.  const char
12eb0 20 2a 7a 41 66 66 69 6e 69 74 79 3b 20 20 20 2f   *zAffinity;   /
12ec0 2a 20 54 68 65 20 61 66 66 69 6e 69 74 79 20 74  * The affinity t
12ed0 6f 20 62 65 20 61 70 70 6c 69 65 64 20 2a 2f 0a  o be applied */.
12ee0 20 20 63 68 61 72 20 63 41 66 66 3b 20 20 20 20    char cAff;    
12ef0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20             /* A 
12f00 73 69 6e 67 6c 65 20 63 68 61 72 61 63 74 65 72  single character
12f10 20 6f 66 20 61 66 66 69 6e 69 74 79 20 2a 2f 0a   of affinity */.
12f20 0a 20 20 7a 41 66 66 69 6e 69 74 79 20 3d 20 70  .  zAffinity = p
12f30 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 61 73 73 65  Op->p4.z;.  asse
12f40 72 74 28 20 7a 41 66 66 69 6e 69 74 79 21 3d 30  rt( zAffinity!=0
12f50 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 7a 41   );.  assert( zA
12f60 66 66 69 6e 69 74 79 5b 70 4f 70 2d 3e 70 32 5d  ffinity[pOp->p2]
12f70 3d 3d 30 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20  ==0 );.  pIn1 = 
12f80 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
12f90 20 20 77 68 69 6c 65 28 20 28 63 41 66 66 20 3d    while( (cAff =
12fa0 20 2a 28 7a 41 66 66 69 6e 69 74 79 2b 2b 29 29   *(zAffinity++))
12fb0 21 3d 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72  !=0 ){.    asser
12fc0 74 28 20 70 49 6e 31 20 3c 3d 20 26 70 2d 3e 61  t( pIn1 <= &p->a
12fd0 4d 65 6d 5b 70 2d 3e 6e 4d 65 6d 5d 20 29 3b 0a  Mem[p->nMem] );.
12fe0 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
12ff0 73 56 61 6c 69 64 28 70 49 6e 31 29 20 29 3b 0a  sValid(pIn1) );.
13000 20 20 20 20 45 78 70 61 6e 64 42 6c 6f 62 28 70      ExpandBlob(p
13010 49 6e 31 29 3b 0a 20 20 20 20 61 70 70 6c 79 41  In1);.    applyA
13020 66 66 69 6e 69 74 79 28 70 49 6e 31 2c 20 63 41  ffinity(pIn1, cA
13030 66 66 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  ff, encoding);. 
13040 20 20 20 70 49 6e 31 2b 2b 3b 0a 20 20 7d 0a 20     pIn1++;.  }. 
13050 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
13060 63 6f 64 65 3a 20 4d 61 6b 65 52 65 63 6f 72 64  code: MakeRecord
13070 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a   P1 P2 P3 P4 *.*
13080 2a 0a 2a 2a 20 43 6f 6e 76 65 72 74 20 50 32 20  *.** Convert P2 
13090 72 65 67 69 73 74 65 72 73 20 62 65 67 69 6e 6e  registers beginn
130a0 69 6e 67 20 77 69 74 68 20 50 31 20 69 6e 74 6f  ing with P1 into
130b0 20 74 68 65 20 5b 72 65 63 6f 72 64 20 66 6f 72   the [record for
130c0 6d 61 74 5d 0a 2a 2a 20 75 73 65 20 61 73 20 61  mat].** use as a
130d0 20 64 61 74 61 20 72 65 63 6f 72 64 20 69 6e 20   data record in 
130e0 61 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65  a database table
130f0 20 6f 72 20 61 73 20 61 20 6b 65 79 0a 2a 2a 20   or as a key.** 
13100 69 6e 20 61 6e 20 69 6e 64 65 78 2e 20 20 54 68  in an index.  Th
13110 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f  e OP_Column opco
13120 64 65 20 63 61 6e 20 64 65 63 6f 64 65 20 74 68  de can decode th
13130 65 20 72 65 63 6f 72 64 20 6c 61 74 65 72 2e 0a  e record later..
13140 2a 2a 0a 2a 2a 20 50 34 20 6d 61 79 20 62 65 20  **.** P4 may be 
13150 61 20 73 74 72 69 6e 67 20 74 68 61 74 20 69 73  a string that is
13160 20 50 32 20 63 68 61 72 61 63 74 65 72 73 20 6c   P2 characters l
13170 6f 6e 67 2e 20 20 54 68 65 20 6e 74 68 20 63 68  ong.  The nth ch
13180 61 72 61 63 74 65 72 20 6f 66 20 74 68 65 0a 2a  aracter of the.*
13190 2a 20 73 74 72 69 6e 67 20 69 6e 64 69 63 61 74  * string indicat
131a0 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61 66  es the column af
131b0 66 69 6e 69 74 79 20 74 68 61 74 20 73 68 6f 75  finity that shou
131c0 6c 64 20 62 65 20 75 73 65 64 20 66 6f 72 20 74  ld be used for t
131d0 68 65 20 6e 74 68 0a 2a 2a 20 66 69 65 6c 64 20  he nth.** field 
131e0 6f 66 20 74 68 65 20 69 6e 64 65 78 20 6b 65 79  of the index key
131f0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6d 61 70 70  ..**.** The mapp
13200 69 6e 67 20 66 72 6f 6d 20 63 68 61 72 61 63 74  ing from charact
13210 65 72 20 74 6f 20 61 66 66 69 6e 69 74 79 20 69  er to affinity i
13220 73 20 67 69 76 65 6e 20 62 79 20 74 68 65 20 53  s given by the S
13230 51 4c 49 54 45 5f 41 46 46 5f 0a 2a 2a 20 6d 61  QLITE_AFF_.** ma
13240 63 72 6f 73 20 64 65 66 69 6e 65 64 20 69 6e 20  cros defined in 
13250 73 71 6c 69 74 65 49 6e 74 2e 68 2e 0a 2a 2a 0a  sqliteInt.h..**.
13260 2a 2a 20 49 66 20 50 34 20 69 73 20 4e 55 4c 4c  ** If P4 is NULL
13270 20 74 68 65 6e 20 61 6c 6c 20 69 6e 64 65 78 20   then all index 
13280 66 69 65 6c 64 73 20 68 61 76 65 20 74 68 65 20  fields have the 
13290 61 66 66 69 6e 69 74 79 20 4e 4f 4e 45 2e 0a 2a  affinity NONE..*
132a0 2f 0a 63 61 73 65 20 4f 50 5f 4d 61 6b 65 52 65  /.case OP_MakeRe
132b0 63 6f 72 64 3a 20 7b 0a 20 20 75 38 20 2a 7a 4e  cord: {.  u8 *zN
132c0 65 77 52 65 63 6f 72 64 3b 20 20 20 20 20 20 20  ewRecord;       
132d0 20 2f 2a 20 41 20 62 75 66 66 65 72 20 74 6f 20   /* A buffer to 
132e0 68 6f 6c 64 20 74 68 65 20 64 61 74 61 20 66 6f  hold the data fo
132f0 72 20 74 68 65 20 6e 65 77 20 72 65 63 6f 72 64  r the new record
13300 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 52 65 63 3b   */.  Mem *pRec;
13310 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
13320 54 68 65 20 6e 65 77 20 72 65 63 6f 72 64 20 2a  The new record *
13330 2f 0a 20 20 75 36 34 20 6e 44 61 74 61 3b 20 20  /.  u64 nData;  
13340 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
13350 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66  mber of bytes of
13360 20 64 61 74 61 20 73 70 61 63 65 20 2a 2f 0a 20   data space */. 
13370 20 69 6e 74 20 6e 48 64 72 3b 20 20 20 20 20 20   int nHdr;      
13380 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
13390 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20 68 65  r of bytes of he
133a0 61 64 65 72 20 73 70 61 63 65 20 2a 2f 0a 20 20  ader space */.  
133b0 69 36 34 20 6e 42 79 74 65 3b 20 20 20 20 20 20  i64 nByte;      
133c0 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61 20 73         /* Data s
133d0 70 61 63 65 20 72 65 71 75 69 72 65 64 20 66 6f  pace required fo
133e0 72 20 74 68 69 73 20 72 65 63 6f 72 64 20 2a 2f  r this record */
133f0 0a 20 20 69 6e 74 20 6e 5a 65 72 6f 3b 20 20 20  .  int nZero;   
13400 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
13410 62 65 72 20 6f 66 20 7a 65 72 6f 20 62 79 74 65  ber of zero byte
13420 73 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20  s at the end of 
13430 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20  the record */.  
13440 69 6e 74 20 6e 56 61 72 69 6e 74 3b 20 20 20 20  int nVarint;    
13450 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
13460 20 6f 66 20 62 79 74 65 73 20 69 6e 20 61 20 76   of bytes in a v
13470 61 72 69 6e 74 20 2a 2f 0a 20 20 75 33 32 20 73  arint */.  u32 s
13480 65 72 69 61 6c 5f 74 79 70 65 3b 20 20 20 20 20  erial_type;     
13490 20 20 2f 2a 20 54 79 70 65 20 66 69 65 6c 64 20    /* Type field 
134a0 2a 2f 0a 20 20 4d 65 6d 20 2a 70 44 61 74 61 30  */.  Mem *pData0
134b0 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46  ;           /* F
134c0 69 72 73 74 20 66 69 65 6c 64 20 74 6f 20 62 65  irst field to be
134d0 20 63 6f 6d 62 69 6e 65 64 20 69 6e 74 6f 20 74   combined into t
134e0 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 4d  he record */.  M
134f0 65 6d 20 2a 70 4c 61 73 74 3b 20 20 20 20 20 20  em *pLast;      
13500 20 20 20 20 20 20 2f 2a 20 4c 61 73 74 20 66 69        /* Last fi
13510 65 6c 64 20 6f 66 20 74 68 65 20 72 65 63 6f 72  eld of the recor
13520 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c  d */.  int nFiel
13530 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  d;            /*
13540 20 4e 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64   Number of field
13550 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20  s in the record 
13560 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 41 66 66 69  */.  char *zAffi
13570 6e 69 74 79 3b 20 20 20 20 20 20 20 2f 2a 20 54  nity;       /* T
13580 68 65 20 61 66 66 69 6e 69 74 79 20 73 74 72 69  he affinity stri
13590 6e 67 20 66 6f 72 20 74 68 65 20 72 65 63 6f 72  ng for the recor
135a0 64 20 2a 2f 0a 20 20 69 6e 74 20 66 69 6c 65 5f  d */.  int file_
135b0 66 6f 72 6d 61 74 3b 20 20 20 20 20 20 20 2f 2a  format;       /*
135c0 20 46 69 6c 65 20 66 6f 72 6d 61 74 20 74 6f 20   File format to 
135d0 75 73 65 20 66 6f 72 20 65 6e 63 6f 64 69 6e 67  use for encoding
135e0 20 2a 2f 0a 20 20 69 6e 74 20 69 3b 20 20 20 20   */.  int i;    
135f0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
13600 53 70 61 63 65 20 75 73 65 64 20 69 6e 20 7a 4e  Space used in zN
13610 65 77 52 65 63 6f 72 64 5b 5d 20 2a 2f 0a 20 20  ewRecord[] */.  
13620 69 6e 74 20 6c 65 6e 3b 20 20 20 20 20 20 20 20  int len;        
13630 20 20 20 20 20 20 20 2f 2a 20 4c 65 6e 67 74 68         /* Length
13640 20 6f 66 20 61 20 66 69 65 6c 64 20 2a 2f 0a 0a   of a field */..
13650 20 20 2f 2a 20 41 73 73 75 6d 69 6e 67 20 74 68    /* Assuming th
13660 65 20 72 65 63 6f 72 64 20 63 6f 6e 74 61 69 6e  e record contain
13670 73 20 4e 20 66 69 65 6c 64 73 2c 20 74 68 65 20  s N fields, the 
13680 72 65 63 6f 72 64 20 66 6f 72 6d 61 74 20 6c 6f  record format lo
13690 6f 6b 73 0a 20 20 2a 2a 20 6c 69 6b 65 20 74 68  oks.  ** like th
136a0 69 73 3a 0a 20 20 2a 2a 0a 20 20 2a 2a 20 2d 2d  is:.  **.  ** --
136b0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
136c0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
136d0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
136e0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
136f0 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2a 20 7c 20 68 64  ------.  ** | hd
13700 72 2d 73 69 7a 65 20 7c 20 74 79 70 65 20 30 20  r-size | type 0 
13710 7c 20 74 79 70 65 20 31 20 7c 20 2e 2e 2e 20 7c  | type 1 | ... |
13720 20 74 79 70 65 20 4e 2d 31 20 7c 20 64 61 74 61   type N-1 | data
13730 30 20 7c 20 2e 2e 2e 20 7c 20 64 61 74 61 20 4e  0 | ... | data N
13740 2d 31 20 7c 20 0a 20 20 2a 2a 20 2d 2d 2d 2d 2d  -1 | .  ** -----
13750 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13760 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13770 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13780 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13790 2d 2d 2d 0a 20 20 2a 2a 0a 20 20 2a 2a 20 44 61  ---.  **.  ** Da
137a0 74 61 28 30 29 20 69 73 20 74 61 6b 65 6e 20 66  ta(0) is taken f
137b0 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50 31 2e  rom register P1.
137c0 20 20 44 61 74 61 28 31 29 20 63 6f 6d 65 73 20    Data(1) comes 
137d0 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50 31  from register P1
137e0 2b 31 0a 20 20 2a 2a 20 61 6e 64 20 73 6f 20 66  +1.  ** and so f
137f0 72 6f 74 68 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  roth..  **.  ** 
13800 45 61 63 68 20 74 79 70 65 20 66 69 65 6c 64 20  Each type field 
13810 69 73 20 61 20 76 61 72 69 6e 74 20 72 65 70 72  is a varint repr
13820 65 73 65 6e 74 69 6e 67 20 74 68 65 20 73 65 72  esenting the ser
13830 69 61 6c 20 74 79 70 65 20 6f 66 20 74 68 65 20  ial type of the 
13840 0a 20 20 2a 2a 20 63 6f 72 72 65 73 70 6f 6e 64  .  ** correspond
13850 69 6e 67 20 64 61 74 61 20 65 6c 65 6d 65 6e 74  ing data element
13860 20 28 73 65 65 20 73 71 6c 69 74 65 33 56 64 62   (see sqlite3Vdb
13870 65 53 65 72 69 61 6c 54 79 70 65 28 29 29 2e 20  eSerialType()). 
13880 54 68 65 0a 20 20 2a 2a 20 68 64 72 2d 73 69 7a  The.  ** hdr-siz
13890 65 20 66 69 65 6c 64 20 69 73 20 61 6c 73 6f 20  e field is also 
138a0 61 20 76 61 72 69 6e 74 20 77 68 69 63 68 20 69  a varint which i
138b0 73 20 74 68 65 20 6f 66 66 73 65 74 20 66 72 6f  s the offset fro
138c0 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 0a  m the beginning.
138d0 20 20 2a 2a 20 6f 66 20 74 68 65 20 72 65 63 6f    ** of the reco
138e0 72 64 20 74 6f 20 64 61 74 61 30 2e 0a 20 20 2a  rd to data0..  *
138f0 2f 0a 20 20 6e 44 61 74 61 20 3d 20 30 3b 20 20  /.  nData = 0;  
13900 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
13910 20 6f 66 20 62 79 74 65 73 20 6f 66 20 64 61 74   of bytes of dat
13920 61 20 73 70 61 63 65 20 2a 2f 0a 20 20 6e 48 64  a space */.  nHd
13930 72 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20  r = 0;          
13940 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74  /* Number of byt
13950 65 73 20 6f 66 20 68 65 61 64 65 72 20 73 70 61  es of header spa
13960 63 65 20 2a 2f 0a 20 20 6e 5a 65 72 6f 20 3d 20  ce */.  nZero = 
13970 30 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  0;         /* Nu
13980 6d 62 65 72 20 6f 66 20 7a 65 72 6f 20 62 79 74  mber of zero byt
13990 65 73 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66  es at the end of
139a0 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20   the record */. 
139b0 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70   nField = pOp->p
139c0 31 3b 0a 20 20 7a 41 66 66 69 6e 69 74 79 20 3d  1;.  zAffinity =
139d0 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 61 73   pOp->p4.z;.  as
139e0 73 65 72 74 28 20 6e 46 69 65 6c 64 3e 30 20 26  sert( nField>0 &
139f0 26 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70  & pOp->p2>0 && p
13a00 4f 70 2d 3e 70 32 2b 6e 46 69 65 6c 64 3c 3d 70  Op->p2+nField<=p
13a10 2d 3e 6e 4d 65 6d 2b 31 20 29 3b 0a 20 20 70 44  ->nMem+1 );.  pD
13a20 61 74 61 30 20 3d 20 26 61 4d 65 6d 5b 6e 46 69  ata0 = &aMem[nFi
13a30 65 6c 64 5d 3b 0a 20 20 6e 46 69 65 6c 64 20 3d  eld];.  nField =
13a40 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 70 4c 61 73   pOp->p2;.  pLas
13a50 74 20 3d 20 26 70 44 61 74 61 30 5b 6e 46 69 65  t = &pData0[nFie
13a60 6c 64 2d 31 5d 3b 0a 20 20 66 69 6c 65 5f 66 6f  ld-1];.  file_fo
13a70 72 6d 61 74 20 3d 20 70 2d 3e 6d 69 6e 57 72 69  rmat = p->minWri
13a80 74 65 46 69 6c 65 46 6f 72 6d 61 74 3b 0a 0a 20  teFileFormat;.. 
13a90 20 2f 2a 20 49 64 65 6e 74 69 66 79 20 74 68 65   /* Identify the
13aa0 20 6f 75 74 70 75 74 20 72 65 67 69 73 74 65 72   output register
13ab0 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f   */.  assert( pO
13ac0 70 2d 3e 70 33 3c 70 4f 70 2d 3e 70 31 20 7c 7c  p->p3<pOp->p1 ||
13ad0 20 70 4f 70 2d 3e 70 33 3e 3d 70 4f 70 2d 3e 70   pOp->p3>=pOp->p
13ae0 31 2b 70 4f 70 2d 3e 70 32 20 29 3b 0a 20 20 70  1+pOp->p2 );.  p
13af0 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
13b00 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74  >p3];.  memAbout
13b10 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74  ToChange(p, pOut
13b20 29 3b 0a 0a 20 20 2f 2a 20 4c 6f 6f 70 20 74 68  );..  /* Loop th
13b30 72 6f 75 67 68 20 74 68 65 20 65 6c 65 6d 65 6e  rough the elemen
13b40 74 73 20 74 68 61 74 20 77 69 6c 6c 20 6d 61 6b  ts that will mak
13b50 65 20 75 70 20 74 68 65 20 72 65 63 6f 72 64 20  e up the record 
13b60 74 6f 20 66 69 67 75 72 65 0a 20 20 2a 2a 20 6f  to figure.  ** o
13b70 75 74 20 68 6f 77 20 6d 75 63 68 20 73 70 61 63  ut how much spac
13b80 65 20 69 73 20 72 65 71 75 69 72 65 64 20 66 6f  e is required fo
13b90 72 20 74 68 65 20 6e 65 77 20 72 65 63 6f 72 64  r the new record
13ba0 2e 0a 20 20 2a 2f 0a 20 20 66 6f 72 28 70 52 65  ..  */.  for(pRe
13bb0 63 3d 70 44 61 74 61 30 3b 20 70 52 65 63 3c 3d  c=pData0; pRec<=
13bc0 70 4c 61 73 74 3b 20 70 52 65 63 2b 2b 29 7b 0a  pLast; pRec++){.
13bd0 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
13be0 73 56 61 6c 69 64 28 70 52 65 63 29 20 29 3b 0a  sValid(pRec) );.
13bf0 20 20 20 20 69 66 28 20 7a 41 66 66 69 6e 69 74      if( zAffinit
13c00 79 20 29 7b 0a 20 20 20 20 20 20 61 70 70 6c 79  y ){.      apply
13c10 41 66 66 69 6e 69 74 79 28 70 52 65 63 2c 20 7a  Affinity(pRec, z
13c20 41 66 66 69 6e 69 74 79 5b 70 52 65 63 2d 70 44  Affinity[pRec-pD
13c30 61 74 61 30 5d 2c 20 65 6e 63 6f 64 69 6e 67 29  ata0], encoding)
13c40 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
13c50 70 52 65 63 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  pRec->flags&MEM_
13c60 5a 65 72 6f 20 26 26 20 70 52 65 63 2d 3e 6e 3e  Zero && pRec->n>
13c70 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  0 ){.      sqlit
13c80 65 33 56 64 62 65 4d 65 6d 45 78 70 61 6e 64 42  e3VdbeMemExpandB
13c90 6c 6f 62 28 70 52 65 63 29 3b 0a 20 20 20 20 7d  lob(pRec);.    }
13ca0 0a 20 20 20 20 73 65 72 69 61 6c 5f 74 79 70 65  .    serial_type
13cb0 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 65   = sqlite3VdbeSe
13cc0 72 69 61 6c 54 79 70 65 28 70 52 65 63 2c 20 66  rialType(pRec, f
13cd0 69 6c 65 5f 66 6f 72 6d 61 74 29 3b 0a 20 20 20  ile_format);.   
13ce0 20 6c 65 6e 20 3d 20 73 71 6c 69 74 65 33 56 64   len = sqlite3Vd
13cf0 62 65 53 65 72 69 61 6c 54 79 70 65 4c 65 6e 28  beSerialTypeLen(
13d00 73 65 72 69 61 6c 5f 74 79 70 65 29 3b 0a 20 20  serial_type);.  
13d10 20 20 6e 44 61 74 61 20 2b 3d 20 6c 65 6e 3b 0a    nData += len;.
13d20 20 20 20 20 6e 48 64 72 20 2b 3d 20 73 71 6c 69      nHdr += sqli
13d30 74 65 33 56 61 72 69 6e 74 4c 65 6e 28 73 65 72  te3VarintLen(ser
13d40 69 61 6c 5f 74 79 70 65 29 3b 0a 20 20 20 20 69  ial_type);.    i
13d50 66 28 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 26  f( pRec->flags &
13d60 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20   MEM_Zero ){.   
13d70 20 20 20 2f 2a 20 4f 6e 6c 79 20 70 75 72 65 20     /* Only pure 
13d80 7a 65 72 6f 2d 66 69 6c 6c 65 64 20 42 4c 4f 42  zero-filled BLOB
13d90 73 20 63 61 6e 20 62 65 20 69 6e 70 75 74 20 74  s can be input t
13da0 6f 20 74 68 69 73 20 4f 70 63 6f 64 65 2e 0a 20  o this Opcode.. 
13db0 20 20 20 20 20 2a 2a 20 57 65 20 64 6f 20 6e 6f       ** We do no
13dc0 74 20 61 6c 6c 6f 77 20 62 6c 6f 62 73 20 77 69  t allow blobs wi
13dd0 74 68 20 61 20 70 72 65 66 69 78 20 61 6e 64 20  th a prefix and 
13de0 61 20 7a 65 72 6f 2d 66 69 6c 6c 65 64 20 74 61  a zero-filled ta
13df0 69 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 6e 5a 65  il. */.      nZe
13e00 72 6f 20 2b 3d 20 70 52 65 63 2d 3e 75 2e 6e 5a  ro += pRec->u.nZ
13e10 65 72 6f 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69  ero;.    }else i
13e20 66 28 20 6c 65 6e 20 29 7b 0a 20 20 20 20 20 20  f( len ){.      
13e30 6e 5a 65 72 6f 20 3d 20 30 3b 0a 20 20 20 20 7d  nZero = 0;.    }
13e40 0a 20 20 7d 0a 0a 20 20 2f 2a 20 41 64 64 20 74  .  }..  /* Add t
13e50 68 65 20 69 6e 69 74 69 61 6c 20 68 65 61 64 65  he initial heade
13e60 72 20 76 61 72 69 6e 74 20 61 6e 64 20 74 6f 74  r varint and tot
13e70 61 6c 20 74 68 65 20 73 69 7a 65 20 2a 2f 0a 20  al the size */. 
13e80 20 6e 48 64 72 20 2b 3d 20 6e 56 61 72 69 6e 74   nHdr += nVarint
13e90 20 3d 20 73 71 6c 69 74 65 33 56 61 72 69 6e 74   = sqlite3Varint
13ea0 4c 65 6e 28 6e 48 64 72 29 3b 0a 20 20 69 66 28  Len(nHdr);.  if(
13eb0 20 6e 56 61 72 69 6e 74 3c 73 71 6c 69 74 65 33   nVarint<sqlite3
13ec0 56 61 72 69 6e 74 4c 65 6e 28 6e 48 64 72 29 20  VarintLen(nHdr) 
13ed0 29 7b 0a 20 20 20 20 6e 48 64 72 2b 2b 3b 0a 20  ){.    nHdr++;. 
13ee0 20 7d 0a 20 20 6e 42 79 74 65 20 3d 20 6e 48 64   }.  nByte = nHd
13ef0 72 2b 6e 44 61 74 61 2d 6e 5a 65 72 6f 3b 0a 20  r+nData-nZero;. 
13f00 20 69 66 28 20 6e 42 79 74 65 3e 64 62 2d 3e 61   if( nByte>db->a
13f10 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d  Limit[SQLITE_LIM
13f20 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20  IT_LENGTH] ){.  
13f30 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a    goto too_big;.
13f40 20 20 7d 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20 73    }..  /* Make s
13f50 75 72 65 20 74 68 65 20 6f 75 74 70 75 74 20 72  ure the output r
13f60 65 67 69 73 74 65 72 20 68 61 73 20 61 20 62 75  egister has a bu
13f70 66 66 65 72 20 6c 61 72 67 65 20 65 6e 6f 75 67  ffer large enoug
13f80 68 20 74 6f 20 73 74 6f 72 65 20 0a 20 20 2a 2a  h to store .  **
13f90 20 74 68 65 20 6e 65 77 20 72 65 63 6f 72 64 2e   the new record.
13fa0 20 54 68 65 20 6f 75 74 70 75 74 20 72 65 67 69   The output regi
13fb0 73 74 65 72 20 28 70 4f 70 2d 3e 70 33 29 20 69  ster (pOp->p3) i
13fc0 73 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20 74 6f  s not allowed to
13fd0 0a 20 20 2a 2a 20 62 65 20 6f 6e 65 20 6f 66 20  .  ** be one of 
13fe0 74 68 65 20 69 6e 70 75 74 20 72 65 67 69 73 74  the input regist
13ff0 65 72 73 20 28 62 65 63 61 75 73 65 20 74 68 65  ers (because the
14000 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 61 6c 6c 20   following call 
14010 74 6f 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 56  to.  ** sqlite3V
14020 64 62 65 4d 65 6d 47 72 6f 77 28 29 20 63 6f 75  dbeMemGrow() cou
14030 6c 64 20 63 6c 6f 62 62 65 72 20 74 68 65 20 76  ld clobber the v
14040 61 6c 75 65 20 62 65 66 6f 72 65 20 69 74 20 69  alue before it i
14050 73 20 75 73 65 64 29 2e 0a 20 20 2a 2f 0a 20 20  s used)..  */.  
14060 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d  if( sqlite3VdbeM
14070 65 6d 47 72 6f 77 28 70 4f 75 74 2c 20 28 69 6e  emGrow(pOut, (in
14080 74 29 6e 42 79 74 65 2c 20 30 29 20 29 7b 0a 20  t)nByte, 0) ){. 
14090 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a     goto no_mem;.
140a0 20 20 7d 0a 20 20 7a 4e 65 77 52 65 63 6f 72 64    }.  zNewRecord
140b0 20 3d 20 28 75 38 20 2a 29 70 4f 75 74 2d 3e 7a   = (u8 *)pOut->z
140c0 3b 0a 0a 20 20 2f 2a 20 57 72 69 74 65 20 74 68  ;..  /* Write th
140d0 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 20  e record */.  i 
140e0 3d 20 70 75 74 56 61 72 69 6e 74 33 32 28 7a 4e  = putVarint32(zN
140f0 65 77 52 65 63 6f 72 64 2c 20 6e 48 64 72 29 3b  ewRecord, nHdr);
14100 0a 20 20 66 6f 72 28 70 52 65 63 3d 70 44 61 74  .  for(pRec=pDat
14110 61 30 3b 20 70 52 65 63 3c 3d 70 4c 61 73 74 3b  a0; pRec<=pLast;
14120 20 70 52 65 63 2b 2b 29 7b 0a 20 20 20 20 73 65   pRec++){.    se
14130 72 69 61 6c 5f 74 79 70 65 20 3d 20 73 71 6c 69  rial_type = sqli
14140 74 65 33 56 64 62 65 53 65 72 69 61 6c 54 79 70  te3VdbeSerialTyp
14150 65 28 70 52 65 63 2c 20 66 69 6c 65 5f 66 6f 72  e(pRec, file_for
14160 6d 61 74 29 3b 0a 20 20 20 20 69 20 2b 3d 20 70  mat);.    i += p
14170 75 74 56 61 72 69 6e 74 33 32 28 26 7a 4e 65 77  utVarint32(&zNew
14180 52 65 63 6f 72 64 5b 69 5d 2c 20 73 65 72 69 61  Record[i], seria
14190 6c 5f 74 79 70 65 29 3b 20 20 20 20 20 20 2f 2a  l_type);      /*
141a0 20 73 65 72 69 61 6c 20 74 79 70 65 20 2a 2f 0a   serial type */.
141b0 20 20 7d 0a 20 20 66 6f 72 28 70 52 65 63 3d 70    }.  for(pRec=p
141c0 44 61 74 61 30 3b 20 70 52 65 63 3c 3d 70 4c 61  Data0; pRec<=pLa
141d0 73 74 3b 20 70 52 65 63 2b 2b 29 7b 20 20 2f 2a  st; pRec++){  /*
141e0 20 73 65 72 69 61 6c 20 64 61 74 61 20 2a 2f 0a   serial data */.
141f0 20 20 20 20 69 20 2b 3d 20 73 71 6c 69 74 65 33      i += sqlite3
14200 56 64 62 65 53 65 72 69 61 6c 50 75 74 28 26 7a  VdbeSerialPut(&z
14210 4e 65 77 52 65 63 6f 72 64 5b 69 5d 2c 20 28 69  NewRecord[i], (i
14220 6e 74 29 28 6e 42 79 74 65 2d 69 29 2c 20 70 52  nt)(nByte-i), pR
14230 65 63 2c 66 69 6c 65 5f 66 6f 72 6d 61 74 29 3b  ec,file_format);
14240 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 69  .  }.  assert( i
14250 3d 3d 6e 42 79 74 65 20 29 3b 0a 0a 20 20 61 73  ==nByte );..  as
14260 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20  sert( pOp->p3>0 
14270 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e  && pOp->p3<=p->n
14280 4d 65 6d 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 6e  Mem );.  pOut->n
14290 20 3d 20 28 69 6e 74 29 6e 42 79 74 65 3b 0a 20   = (int)nByte;. 
142a0 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
142b0 45 4d 5f 42 6c 6f 62 20 7c 20 4d 45 4d 5f 44 79  EM_Blob | MEM_Dy
142c0 6e 3b 0a 20 20 70 4f 75 74 2d 3e 78 44 65 6c 20  n;.  pOut->xDel 
142d0 3d 20 30 3b 0a 20 20 69 66 28 20 6e 5a 65 72 6f  = 0;.  if( nZero
142e0 20 29 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e   ){.    pOut->u.
142f0 6e 5a 65 72 6f 20 3d 20 6e 5a 65 72 6f 3b 0a 20  nZero = nZero;. 
14300 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c     pOut->flags |
14310 3d 20 4d 45 4d 5f 5a 65 72 6f 3b 0a 20 20 7d 0a  = MEM_Zero;.  }.
14320 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 53 51    pOut->enc = SQ
14330 4c 49 54 45 5f 55 54 46 38 3b 20 20 2f 2a 20 49  LITE_UTF8;  /* I
14340 6e 20 63 61 73 65 20 74 68 65 20 62 6c 6f 62 20  n case the blob 
14350 69 73 20 65 76 65 72 20 63 6f 6e 76 65 72 74 65  is ever converte
14360 64 20 74 6f 20 74 65 78 74 20 2a 2f 0a 20 20 52  d to text */.  R
14370 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
14380 70 2d 3e 70 33 2c 20 70 4f 75 74 29 3b 0a 20 20  p->p3, pOut);.  
14390 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53  UPDATE_MAX_BLOBS
143a0 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65  IZE(pOut);.  bre
143b0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
143c0 3a 20 43 6f 75 6e 74 20 50 31 20 50 32 20 2a 20  : Count P1 P2 * 
143d0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20  * *.**.** Store 
143e0 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 65 6e  the number of en
143f0 74 72 69 65 73 20 28 61 6e 20 69 6e 74 65 67 65  tries (an intege
14400 72 20 76 61 6c 75 65 29 20 69 6e 20 74 68 65 20  r value) in the 
14410 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 0a  table or index .
14420 2a 2a 20 6f 70 65 6e 65 64 20 62 79 20 63 75 72  ** opened by cur
14430 73 6f 72 20 50 31 20 69 6e 20 72 65 67 69 73 74  sor P1 in regist
14440 65 72 20 50 32 0a 2a 2f 0a 23 69 66 6e 64 65 66  er P2.*/.#ifndef
14450 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 54 52   SQLITE_OMIT_BTR
14460 45 45 43 4f 55 4e 54 0a 63 61 73 65 20 4f 50 5f  EECOUNT.case OP_
14470 43 6f 75 6e 74 3a 20 7b 20 20 20 20 20 20 20 20  Count: {        
14480 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65   /* out2-prerele
14490 61 73 65 20 2a 2f 0a 20 20 69 36 34 20 6e 45 6e  ase */.  i64 nEn
144a0 74 72 79 3b 0a 20 20 42 74 43 75 72 73 6f 72 20  try;.  BtCursor 
144b0 2a 70 43 72 73 72 3b 0a 0a 20 20 70 43 72 73 72  *pCrsr;..  pCrsr
144c0 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
144d0 3e 70 31 5d 2d 3e 70 43 75 72 73 6f 72 3b 0a 20  >p1]->pCursor;. 
144e0 20 69 66 28 20 70 43 72 73 72 20 29 7b 0a 20 20   if( pCrsr ){.  
144f0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
14500 72 65 65 43 6f 75 6e 74 28 70 43 72 73 72 2c 20  reeCount(pCrsr, 
14510 26 6e 45 6e 74 72 79 29 3b 0a 20 20 7d 65 6c 73  &nEntry);.  }els
14520 65 7b 0a 20 20 20 20 6e 45 6e 74 72 79 20 3d 20  e{.    nEntry = 
14530 30 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75  0;.  }.  pOut->u
14540 2e 69 20 3d 20 6e 45 6e 74 72 79 3b 0a 20 20 62  .i = nEntry;.  b
14550 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a  reak;.}.#endif..
14560 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 61 76 65 70  /* Opcode: Savep
14570 6f 69 6e 74 20 50 31 20 2a 20 2a 20 50 34 20 2a  oint P1 * * P4 *
14580 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 2c 20 72 65 6c  .**.** Open, rel
14590 65 61 73 65 20 6f 72 20 72 6f 6c 6c 62 61 63 6b  ease or rollback
145a0 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74 20 6e   the savepoint n
145b0 61 6d 65 64 20 62 79 20 70 61 72 61 6d 65 74 65  amed by paramete
145c0 72 20 50 34 2c 20 64 65 70 65 6e 64 69 6e 67 0a  r P4, depending.
145d0 2a 2a 20 6f 6e 20 74 68 65 20 76 61 6c 75 65 20  ** on the value 
145e0 6f 66 20 50 31 2e 20 54 6f 20 6f 70 65 6e 20 61  of P1. To open a
145f0 20 6e 65 77 20 73 61 76 65 70 6f 69 6e 74 2c 20   new savepoint, 
14600 50 31 3d 3d 30 2e 20 54 6f 20 72 65 6c 65 61 73  P1==0. To releas
14610 65 20 28 63 6f 6d 6d 69 74 29 20 61 6e 0a 2a 2a  e (commit) an.**
14620 20 65 78 69 73 74 69 6e 67 20 73 61 76 65 70 6f   existing savepo
14630 69 6e 74 2c 20 50 31 3d 3d 31 2c 20 6f 72 20 74  int, P1==1, or t
14640 6f 20 72 6f 6c 6c 62 61 63 6b 20 61 6e 20 65 78  o rollback an ex
14650 69 73 74 69 6e 67 20 73 61 76 65 70 6f 69 6e 74  isting savepoint
14660 20 50 31 3d 3d 32 2e 0a 2a 2f 0a 63 61 73 65 20   P1==2..*/.case 
14670 4f 50 5f 53 61 76 65 70 6f 69 6e 74 3a 20 7b 0a  OP_Savepoint: {.
14680 20 20 69 6e 74 20 70 31 3b 20 20 20 20 20 20 20    int p1;       
14690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
146a0 20 20 2f 2a 20 56 61 6c 75 65 20 6f 66 20 50 31    /* Value of P1
146b0 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 63 68   operand */.  ch
146c0 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
146d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
146e0 20 4e 61 6d 65 20 6f 66 20 73 61 76 65 70 6f 69   Name of savepoi
146f0 6e 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 4e 61 6d  nt */.  int nNam
14700 65 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a  e;.  Savepoint *
14710 70 4e 65 77 3b 0a 20 20 53 61 76 65 70 6f 69 6e  pNew;.  Savepoin
14720 74 20 2a 70 53 61 76 65 70 6f 69 6e 74 3b 0a 20  t *pSavepoint;. 
14730 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 54 6d 70   Savepoint *pTmp
14740 3b 0a 20 20 69 6e 74 20 69 53 61 76 65 70 6f 69  ;.  int iSavepoi
14750 6e 74 3b 0a 20 20 69 6e 74 20 69 69 3b 0a 0a 20  nt;.  int ii;.. 
14760 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20   p1 = pOp->p1;. 
14770 20 7a 4e 61 6d 65 20 3d 20 70 4f 70 2d 3e 70 34   zName = pOp->p4
14780 2e 7a 3b 0a 0a 20 20 2f 2a 20 41 73 73 65 72 74  .z;..  /* Assert
14790 20 74 68 61 74 20 74 68 65 20 70 31 20 70 61 72   that the p1 par
147a0 61 6d 65 74 65 72 20 69 73 20 76 61 6c 69 64 2e  ameter is valid.
147b0 20 41 6c 73 6f 20 74 68 61 74 20 69 66 20 74 68   Also that if th
147c0 65 72 65 20 69 73 20 6e 6f 20 6f 70 65 6e 0a 20  ere is no open. 
147d0 20 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c   ** transaction,
147e0 20 74 68 65 6e 20 74 68 65 72 65 20 63 61 6e 6e   then there cann
147f0 6f 74 20 62 65 20 61 6e 79 20 73 61 76 65 70 6f  ot be any savepo
14800 69 6e 74 73 2e 20 0a 20 20 2a 2f 0a 20 20 61 73  ints. .  */.  as
14810 73 65 72 74 28 20 64 62 2d 3e 70 53 61 76 65 70  sert( db->pSavep
14820 6f 69 6e 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 61  oint==0 || db->a
14830 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 29 3b 0a  utoCommit==0 );.
14840 20 20 61 73 73 65 72 74 28 20 70 31 3d 3d 53 41    assert( p1==SA
14850 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 7c 7c 70  VEPOINT_BEGIN||p
14860 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c  1==SAVEPOINT_REL
14870 45 41 53 45 7c 7c 70 31 3d 3d 53 41 56 45 50 4f  EASE||p1==SAVEPO
14880 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 29 3b 0a  INT_ROLLBACK );.
14890 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 70 53    assert( db->pS
148a0 61 76 65 70 6f 69 6e 74 20 7c 7c 20 64 62 2d 3e  avepoint || db->
148b0 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76  isTransactionSav
148c0 65 70 6f 69 6e 74 3d 3d 30 20 29 3b 0a 20 20 61  epoint==0 );.  a
148d0 73 73 65 72 74 28 20 63 68 65 63 6b 53 61 76 65  ssert( checkSave
148e0 70 6f 69 6e 74 43 6f 75 6e 74 28 64 62 29 20 29  pointCount(db) )
148f0 3b 0a 0a 20 20 69 66 28 20 70 31 3d 3d 53 41 56  ;..  if( p1==SAV
14900 45 50 4f 49 4e 54 5f 42 45 47 49 4e 20 29 7b 0a  EPOINT_BEGIN ){.
14910 20 20 20 20 69 66 28 20 64 62 2d 3e 77 72 69 74      if( db->writ
14920 65 56 64 62 65 43 6e 74 3e 30 20 29 7b 0a 20 20  eVdbeCnt>0 ){.  
14930 20 20 20 20 2f 2a 20 41 20 6e 65 77 20 73 61 76      /* A new sav
14940 65 70 6f 69 6e 74 20 63 61 6e 6e 6f 74 20 62 65  epoint cannot be
14950 20 63 72 65 61 74 65 64 20 69 66 20 74 68 65 72   created if ther
14960 65 20 61 72 65 20 61 63 74 69 76 65 20 77 72 69  e are active wri
14970 74 65 20 0a 20 20 20 20 20 20 2a 2a 20 73 74 61  te .      ** sta
14980 74 65 6d 65 6e 74 73 20 28 69 2e 65 2e 20 6f 70  tements (i.e. op
14990 65 6e 20 72 65 61 64 2f 77 72 69 74 65 20 69 6e  en read/write in
149a0 63 72 65 6d 65 6e 74 61 6c 20 62 6c 6f 62 20 68  cremental blob h
149b0 61 6e 64 6c 65 73 29 2e 0a 20 20 20 20 20 20 2a  andles)..      *
149c0 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 53  /.      sqlite3S
149d0 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72  etString(&p->zEr
149e0 72 4d 73 67 2c 20 64 62 2c 20 22 63 61 6e 6e 6f  rMsg, db, "canno
149f0 74 20 6f 70 65 6e 20 73 61 76 65 70 6f 69 6e 74  t open savepoint
14a00 20 2d 20 22 0a 20 20 20 20 20 20 20 20 22 53 51   - ".        "SQ
14a10 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20  L statements in 
14a20 70 72 6f 67 72 65 73 73 22 29 3b 0a 20 20 20 20  progress");.    
14a30 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55    rc = SQLITE_BU
14a40 53 59 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  SY;.    }else{. 
14a50 20 20 20 20 20 6e 4e 61 6d 65 20 3d 20 73 71 6c       nName = sql
14a60 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 4e 61  ite3Strlen30(zNa
14a70 6d 65 29 3b 0a 0a 20 20 20 20 20 20 2f 2a 20 43  me);..      /* C
14a80 72 65 61 74 65 20 61 20 6e 65 77 20 73 61 76 65  reate a new save
14a90 70 6f 69 6e 74 20 73 74 72 75 63 74 75 72 65 2e  point structure.
14aa0 20 2a 2f 0a 20 20 20 20 20 20 70 4e 65 77 20 3d   */.      pNew =
14ab0 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63   sqlite3DbMalloc
14ac0 52 61 77 28 64 62 2c 20 73 69 7a 65 6f 66 28 53  Raw(db, sizeof(S
14ad0 61 76 65 70 6f 69 6e 74 29 2b 6e 4e 61 6d 65 2b  avepoint)+nName+
14ae0 31 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70 4e  1);.      if( pN
14af0 65 77 20 29 7b 0a 20 20 20 20 20 20 20 20 70 4e  ew ){.        pN
14b00 65 77 2d 3e 7a 4e 61 6d 65 20 3d 20 28 63 68 61  ew->zName = (cha
14b10 72 20 2a 29 26 70 4e 65 77 5b 31 5d 3b 0a 20 20  r *)&pNew[1];.  
14b20 20 20 20 20 20 20 6d 65 6d 63 70 79 28 70 4e 65        memcpy(pNe
14b30 77 2d 3e 7a 4e 61 6d 65 2c 20 7a 4e 61 6d 65 2c  w->zName, zName,
14b40 20 6e 4e 61 6d 65 2b 31 29 3b 0a 20 20 20 20 0a   nName+1);.    .
14b50 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68          /* If th
14b60 65 72 65 20 69 73 20 6e 6f 20 6f 70 65 6e 20 74  ere is no open t
14b70 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65 6e  ransaction, then
14b80 20 6d 61 72 6b 20 74 68 69 73 20 61 73 20 61 20   mark this as a 
14b90 73 70 65 63 69 61 6c 0a 20 20 20 20 20 20 20 20  special.        
14ba0 2a 2a 20 22 74 72 61 6e 73 61 63 74 69 6f 6e 20  ** "transaction 
14bb0 73 61 76 65 70 6f 69 6e 74 22 2e 20 2a 2f 0a 20  savepoint". */. 
14bc0 20 20 20 20 20 20 20 69 66 28 20 64 62 2d 3e 61         if( db->a
14bd0 75 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20 20 20  utoCommit ){.   
14be0 20 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43         db->autoC
14bf0 6f 6d 6d 69 74 20 3d 20 30 3b 0a 20 20 20 20 20  ommit = 0;.     
14c00 20 20 20 20 20 64 62 2d 3e 69 73 54 72 61 6e 73       db->isTrans
14c10 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 20  actionSavepoint 
14c20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c  = 1;.        }el
14c30 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 64 62  se{.          db
14c40 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 2b 2b 3b 0a  ->nSavepoint++;.
14c50 20 20 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20          }..     
14c60 20 20 20 2f 2a 20 4c 69 6e 6b 20 74 68 65 20 6e     /* Link the n
14c70 65 77 20 73 61 76 65 70 6f 69 6e 74 20 69 6e 74  ew savepoint int
14c80 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68  o the database h
14c90 61 6e 64 6c 65 27 73 20 6c 69 73 74 2e 20 2a 2f  andle's list. */
14ca0 0a 20 20 20 20 20 20 20 20 70 4e 65 77 2d 3e 70  .        pNew->p
14cb0 4e 65 78 74 20 3d 20 64 62 2d 3e 70 53 61 76 65  Next = db->pSave
14cc0 70 6f 69 6e 74 3b 0a 20 20 20 20 20 20 20 20 64  point;.        d
14cd0 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 3d 20  b->pSavepoint = 
14ce0 70 4e 65 77 3b 0a 20 20 20 20 20 20 20 20 70 4e  pNew;.        pN
14cf0 65 77 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e  ew->nDeferredCon
14d00 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72 72 65  s = db->nDeferre
14d10 64 43 6f 6e 73 3b 0a 20 20 20 20 20 20 7d 0a 20  dCons;.      }. 
14d20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20     }.  }else{.  
14d30 20 20 69 53 61 76 65 70 6f 69 6e 74 20 3d 20 30    iSavepoint = 0
14d40 3b 0a 0a 20 20 20 20 2f 2a 20 46 69 6e 64 20 74  ;..    /* Find t
14d50 68 65 20 6e 61 6d 65 64 20 73 61 76 65 70 6f 69  he named savepoi
14d60 6e 74 2e 20 49 66 20 74 68 65 72 65 20 69 73 20  nt. If there is 
14d70 6e 6f 20 73 75 63 68 20 73 61 76 65 70 6f 69 6e  no such savepoin
14d80 74 2c 20 74 68 65 6e 20 61 6e 0a 20 20 20 20 2a  t, then an.    *
14d90 2a 20 61 6e 20 65 72 72 6f 72 20 69 73 20 72 65  * an error is re
14da0 74 75 72 6e 65 64 20 74 6f 20 74 68 65 20 75 73  turned to the us
14db0 65 72 2e 20 20 2a 2f 0a 20 20 20 20 66 6f 72 28  er.  */.    for(
14dc0 0a 20 20 20 20 20 20 70 53 61 76 65 70 6f 69 6e  .      pSavepoin
14dd0 74 20 3d 20 64 62 2d 3e 70 53 61 76 65 70 6f 69  t = db->pSavepoi
14de0 6e 74 3b 20 0a 20 20 20 20 20 20 70 53 61 76 65  nt; .      pSave
14df0 70 6f 69 6e 74 20 26 26 20 73 71 6c 69 74 65 33  point && sqlite3
14e00 53 74 72 49 43 6d 70 28 70 53 61 76 65 70 6f 69  StrICmp(pSavepoi
14e10 6e 74 2d 3e 7a 4e 61 6d 65 2c 20 7a 4e 61 6d 65  nt->zName, zName
14e20 29 3b 0a 20 20 20 20 20 20 70 53 61 76 65 70 6f  );.      pSavepo
14e30 69 6e 74 20 3d 20 70 53 61 76 65 70 6f 69 6e 74  int = pSavepoint
14e40 2d 3e 70 4e 65 78 74 0a 20 20 20 20 29 7b 0a 20  ->pNext.    ){. 
14e50 20 20 20 20 20 69 53 61 76 65 70 6f 69 6e 74 2b       iSavepoint+
14e60 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  +;.    }.    if(
14e70 20 21 70 53 61 76 65 70 6f 69 6e 74 20 29 7b 0a   !pSavepoint ){.
14e80 20 20 20 20 20 20 73 71 6c 69 74 65 33 53 65 74        sqlite3Set
14e90 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d  String(&p->zErrM
14ea0 73 67 2c 20 64 62 2c 20 22 6e 6f 20 73 75 63 68  sg, db, "no such
14eb0 20 73 61 76 65 70 6f 69 6e 74 3a 20 25 73 22 2c   savepoint: %s",
14ec0 20 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 72   zName);.      r
14ed0 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  c = SQLITE_ERROR
14ee0 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
14ef0 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 77 72 69  .        db->wri
14f00 74 65 56 64 62 65 43 6e 74 3e 30 20 7c 7c 20 28  teVdbeCnt>0 || (
14f10 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 4f  p1==SAVEPOINT_RO
14f20 4c 4c 42 41 43 4b 20 26 26 20 64 62 2d 3e 61 63  LLBACK && db->ac
14f30 74 69 76 65 56 64 62 65 43 6e 74 3e 31 29 20 0a  tiveVdbeCnt>1) .
14f40 20 20 20 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20      ){.      /* 
14f50 49 74 20 69 73 20 6e 6f 74 20 70 6f 73 73 69 62  It is not possib
14f60 6c 65 20 74 6f 20 72 65 6c 65 61 73 65 20 28 63  le to release (c
14f70 6f 6d 6d 69 74 29 20 61 20 73 61 76 65 70 6f 69  ommit) a savepoi
14f80 6e 74 20 69 66 20 74 68 65 72 65 20 61 72 65 20  nt if there are 
14f90 0a 20 20 20 20 20 20 2a 2a 20 61 63 74 69 76 65  .      ** active
14fa0 20 77 72 69 74 65 20 73 74 61 74 65 6d 65 6e 74   write statement
14fb0 73 2e 20 49 74 20 69 73 20 6e 6f 74 20 70 6f 73  s. It is not pos
14fc0 73 69 62 6c 65 20 74 6f 20 72 6f 6c 6c 62 61 63  sible to rollbac
14fd0 6b 20 61 20 73 61 76 65 70 6f 69 6e 74 0a 20 20  k a savepoint.  
14fe0 20 20 20 20 2a 2a 20 69 66 20 74 68 65 72 65 20      ** if there 
14ff0 61 72 65 20 61 6e 79 20 61 63 74 69 76 65 20 73  are any active s
15000 74 61 74 65 6d 65 6e 74 73 20 61 74 20 61 6c 6c  tatements at all
15010 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
15020 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
15030 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64  g(&p->zErrMsg, d
15040 62 2c 20 0a 20 20 20 20 20 20 20 20 22 63 61 6e  b, .        "can
15050 6e 6f 74 20 25 73 20 73 61 76 65 70 6f 69 6e 74  not %s savepoint
15060 20 2d 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74   - SQL statement
15070 73 20 69 6e 20 70 72 6f 67 72 65 73 73 22 2c 0a  s in progress",.
15080 20 20 20 20 20 20 20 20 28 70 31 3d 3d 53 41 56          (p1==SAV
15090 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20  EPOINT_ROLLBACK 
150a0 3f 20 22 72 6f 6c 6c 62 61 63 6b 22 3a 20 22 72  ? "rollback": "r
150b0 65 6c 65 61 73 65 22 29 0a 20 20 20 20 20 20 29  elease").      )
150c0 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c  ;.      rc = SQL
150d0 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 7d 65  ITE_BUSY;.    }e
150e0 6c 73 65 7b 0a 0a 20 20 20 20 20 20 2f 2a 20 44  lse{..      /* D
150f0 65 74 65 72 6d 69 6e 65 20 77 68 65 74 68 65 72  etermine whether
15100 20 6f 72 20 6e 6f 74 20 74 68 69 73 20 69 73 20   or not this is 
15110 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61  a transaction sa
15120 76 65 70 6f 69 6e 74 2e 20 49 66 20 73 6f 2c 0a  vepoint. If so,.
15130 20 20 20 20 20 20 2a 2a 20 61 6e 64 20 74 68 69        ** and thi
15140 73 20 69 73 20 61 20 52 45 4c 45 41 53 45 20 63  s is a RELEASE c
15150 6f 6d 6d 61 6e 64 2c 20 74 68 65 6e 20 74 68 65  ommand, then the
15160 20 63 75 72 72 65 6e 74 20 74 72 61 6e 73 61 63   current transac
15170 74 69 6f 6e 20 0a 20 20 20 20 20 20 2a 2a 20 69  tion .      ** i
15180 73 20 63 6f 6d 6d 69 74 74 65 64 2e 20 0a 20 20  s committed. .  
15190 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 69 6e 74      */.      int
151a0 20 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 20 3d   isTransaction =
151b0 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 70 4e 65   pSavepoint->pNe
151c0 78 74 3d 3d 30 20 26 26 20 64 62 2d 3e 69 73 54  xt==0 && db->isT
151d0 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f  ransactionSavepo
151e0 69 6e 74 3b 0a 20 20 20 20 20 20 69 66 28 20 69  int;.      if( i
151f0 73 54 72 61 6e 73 61 63 74 69 6f 6e 20 26 26 20  sTransaction && 
15200 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45  p1==SAVEPOINT_RE
15210 4c 45 41 53 45 20 29 7b 0a 20 20 20 20 20 20 20  LEASE ){.       
15220 20 69 66 28 20 28 72 63 20 3d 20 73 71 6c 69 74   if( (rc = sqlit
15230 65 33 56 64 62 65 43 68 65 63 6b 46 6b 28 70 2c  e3VdbeCheckFk(p,
15240 20 31 29 29 21 3d 53 51 4c 49 54 45 5f 4f 4b 20   1))!=SQLITE_OK 
15250 29 7b 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74  ){.          got
15260 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20  o vdbe_return;. 
15270 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
15280 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20   db->autoCommit 
15290 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 69 66 28  = 1;.        if(
152a0 20 73 71 6c 69 74 65 33 56 64 62 65 48 61 6c 74   sqlite3VdbeHalt
152b0 28 70 29 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59  (p)==SQLITE_BUSY
152c0 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 70 2d   ){.          p-
152d0 3e 70 63 20 3d 20 70 63 3b 0a 20 20 20 20 20 20  >pc = pc;.      
152e0 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d      db->autoComm
152f0 69 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20  it = 0;.        
15300 20 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53    p->rc = rc = S
15310 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20  QLITE_BUSY;.    
15320 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f        goto vdbe_
15330 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 20 20  return;.        
15340 7d 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 69 73  }.        db->is
15350 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70  TransactionSavep
15360 6f 69 6e 74 20 3d 20 30 3b 0a 20 20 20 20 20 20  oint = 0;.      
15370 20 20 72 63 20 3d 20 70 2d 3e 72 63 3b 0a 20 20    rc = p->rc;.  
15380 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
15390 20 20 20 69 53 61 76 65 70 6f 69 6e 74 20 3d 20     iSavepoint = 
153a0 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 20 2d  db->nSavepoint -
153b0 20 69 53 61 76 65 70 6f 69 6e 74 20 2d 20 31 3b   iSavepoint - 1;
153c0 0a 20 20 20 20 20 20 20 20 66 6f 72 28 69 69 3d  .        for(ii=
153d0 30 3b 20 69 69 3c 64 62 2d 3e 6e 44 62 3b 20 69  0; ii<db->nDb; i
153e0 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20  i++){.          
153f0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
15400 65 53 61 76 65 70 6f 69 6e 74 28 64 62 2d 3e 61  eSavepoint(db->a
15410 44 62 5b 69 69 5d 2e 70 42 74 2c 20 70 31 2c 20  Db[ii].pBt, p1, 
15420 69 53 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20 20  iSavepoint);.   
15430 20 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53         if( rc!=S
15440 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
15450 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f          goto abo
15460 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
15470 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20  .          }.   
15480 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69       }.        i
15490 66 28 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54  f( p1==SAVEPOINT
154a0 5f 52 4f 4c 4c 42 41 43 4b 20 26 26 20 28 64 62  _ROLLBACK && (db
154b0 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54 45 5f 49  ->flags&SQLITE_I
154c0 6e 74 65 72 6e 43 68 61 6e 67 65 73 29 21 3d 30  nternChanges)!=0
154d0 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71   ){.          sq
154e0 6c 69 74 65 33 45 78 70 69 72 65 50 72 65 70 61  lite3ExpirePrepa
154f0 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28 64 62  redStatements(db
15500 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  );.          sql
15510 69 74 65 33 52 65 73 65 74 49 6e 74 65 72 6e 61  ite3ResetInterna
15520 6c 53 63 68 65 6d 61 28 64 62 2c 20 2d 31 29 3b  lSchema(db, -1);
15530 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
15540 65 33 56 64 62 65 4d 75 74 65 78 52 65 73 79 6e  e3VdbeMutexResyn
15550 63 28 70 29 3b 0a 20 20 20 20 20 20 20 20 20 20  c(p);.          
15560 64 62 2d 3e 66 6c 61 67 73 20 3d 20 28 64 62 2d  db->flags = (db-
15570 3e 66 6c 61 67 73 20 7c 20 53 51 4c 49 54 45 5f  >flags | SQLITE_
15580 49 6e 74 65 72 6e 43 68 61 6e 67 65 73 29 3b 0a  InternChanges);.
15590 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
155a0 7d 0a 20 20 0a 20 20 20 20 20 20 2f 2a 20 52 65  }.  .      /* Re
155b0 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68 65 74  gardless of whet
155c0 68 65 72 20 74 68 69 73 20 69 73 20 61 20 52 45  her this is a RE
155d0 4c 45 41 53 45 20 6f 72 20 52 4f 4c 4c 42 41 43  LEASE or ROLLBAC
155e0 4b 2c 20 64 65 73 74 72 6f 79 20 61 6c 6c 20 0a  K, destroy all .
155f0 20 20 20 20 20 20 2a 2a 20 73 61 76 65 70 6f 69        ** savepoi
15600 6e 74 73 20 6e 65 73 74 65 64 20 69 6e 73 69 64  nts nested insid
15610 65 20 6f 66 20 74 68 65 20 73 61 76 65 70 6f 69  e of the savepoi
15620 6e 74 20 62 65 69 6e 67 20 6f 70 65 72 61 74 65  nt being operate
15630 64 20 6f 6e 2e 20 2a 2f 0a 20 20 20 20 20 20 77  d on. */.      w
15640 68 69 6c 65 28 20 64 62 2d 3e 70 53 61 76 65 70  hile( db->pSavep
15650 6f 69 6e 74 21 3d 70 53 61 76 65 70 6f 69 6e 74  oint!=pSavepoint
15660 20 29 7b 0a 20 20 20 20 20 20 20 20 70 54 6d 70   ){.        pTmp
15670 20 3d 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e   = db->pSavepoin
15680 74 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 70  t;.        db->p
15690 53 61 76 65 70 6f 69 6e 74 20 3d 20 70 54 6d 70  Savepoint = pTmp
156a0 2d 3e 70 4e 65 78 74 3b 0a 20 20 20 20 20 20 20  ->pNext;.       
156b0 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64   sqlite3DbFree(d
156c0 62 2c 20 70 54 6d 70 29 3b 0a 20 20 20 20 20 20  b, pTmp);.      
156d0 20 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74    db->nSavepoint
156e0 2d 2d 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20  --;.      }..   
156f0 20 20 20 2f 2a 20 49 66 20 69 74 20 69 73 20 61     /* If it is a
15700 20 52 45 4c 45 41 53 45 2c 20 74 68 65 6e 20 64   RELEASE, then d
15710 65 73 74 72 6f 79 20 74 68 65 20 73 61 76 65 70  estroy the savep
15720 6f 69 6e 74 20 62 65 69 6e 67 20 6f 70 65 72 61  oint being opera
15730 74 65 64 20 6f 6e 20 0a 20 20 20 20 20 20 2a 2a  ted on .      **
15740 20 74 6f 6f 2e 20 49 66 20 69 74 20 69 73 20 61   too. If it is a
15750 20 52 4f 4c 4c 42 41 43 4b 20 54 4f 2c 20 74 68   ROLLBACK TO, th
15760 65 6e 20 73 65 74 20 74 68 65 20 6e 75 6d 62 65  en set the numbe
15770 72 20 6f 66 20 64 65 66 65 72 72 65 64 20 0a 20  r of deferred . 
15780 20 20 20 20 20 2a 2a 20 63 6f 6e 73 74 72 61 69       ** constrai
15790 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 73 20 70 72  nt violations pr
157a0 65 73 65 6e 74 20 69 6e 20 74 68 65 20 64 61 74  esent in the dat
157b0 61 62 61 73 65 20 74 6f 20 74 68 65 20 76 61 6c  abase to the val
157c0 75 65 20 73 74 6f 72 65 64 0a 20 20 20 20 20 20  ue stored.      
157d0 2a 2a 20 77 68 65 6e 20 74 68 65 20 73 61 76 65  ** when the save
157e0 70 6f 69 6e 74 20 77 61 73 20 63 72 65 61 74 65  point was create
157f0 64 2e 20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28  d.  */.      if(
15800 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52   p1==SAVEPOINT_R
15810 45 4c 45 41 53 45 20 29 7b 0a 20 20 20 20 20 20  ELEASE ){.      
15820 20 20 61 73 73 65 72 74 28 20 70 53 61 76 65 70    assert( pSavep
15830 6f 69 6e 74 3d 3d 64 62 2d 3e 70 53 61 76 65 70  oint==db->pSavep
15840 6f 69 6e 74 20 29 3b 0a 20 20 20 20 20 20 20 20  oint );.        
15850 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 3d  db->pSavepoint =
15860 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 70 4e 65   pSavepoint->pNe
15870 78 74 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  xt;.        sqli
15880 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 70 53  te3DbFree(db, pS
15890 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20  avepoint);.     
158a0 20 20 20 69 66 28 20 21 69 73 54 72 61 6e 73 61     if( !isTransa
158b0 63 74 69 6f 6e 20 29 7b 0a 20 20 20 20 20 20 20  ction ){.       
158c0 20 20 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e     db->nSavepoin
158d0 74 2d 2d 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  t--;.        }. 
158e0 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
158f0 20 20 20 20 64 62 2d 3e 6e 44 65 66 65 72 72 65      db->nDeferre
15900 64 43 6f 6e 73 20 3d 20 70 53 61 76 65 70 6f 69  dCons = pSavepoi
15910 6e 74 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e  nt->nDeferredCon
15920 73 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  s;.      }.    }
15930 0a 20 20 7d 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d  .  }..  break;.}
15940 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 75 74  ../* Opcode: Aut
15950 6f 43 6f 6d 6d 69 74 20 50 31 20 50 32 20 2a 20  oCommit P1 P2 * 
15960 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 65 74 20 74 68  * *.**.** Set th
15970 65 20 64 61 74 61 62 61 73 65 20 61 75 74 6f 2d  e database auto-
15980 63 6f 6d 6d 69 74 20 66 6c 61 67 20 74 6f 20 50  commit flag to P
15990 31 20 28 31 20 6f 72 20 30 29 2e 20 49 66 20 50  1 (1 or 0). If P
159a0 32 20 69 73 20 74 72 75 65 2c 20 72 6f 6c 6c 0a  2 is true, roll.
159b0 2a 2a 20 62 61 63 6b 20 61 6e 79 20 63 75 72 72  ** back any curr
159c0 65 6e 74 6c 79 20 61 63 74 69 76 65 20 62 74 72  ently active btr
159d0 65 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 2e  ee transactions.
159e0 20 49 66 20 74 68 65 72 65 20 61 72 65 20 61 6e   If there are an
159f0 79 20 61 63 74 69 76 65 0a 2a 2a 20 56 4d 73 20  y active.** VMs 
15a00 28 61 70 61 72 74 20 66 72 6f 6d 20 74 68 69 73  (apart from this
15a10 20 6f 6e 65 29 2c 20 74 68 65 6e 20 61 20 52 4f   one), then a RO
15a20 4c 4c 42 41 43 4b 20 66 61 69 6c 73 2e 20 20 41  LLBACK fails.  A
15a30 20 43 4f 4d 4d 49 54 20 66 61 69 6c 73 20 69 66   COMMIT fails if
15a40 0a 2a 2a 20 74 68 65 72 65 20 61 72 65 20 61 63  .** there are ac
15a50 74 69 76 65 20 77 72 69 74 69 6e 67 20 56 4d 73  tive writing VMs
15a60 20 6f 72 20 61 63 74 69 76 65 20 56 4d 73 20 74   or active VMs t
15a70 68 61 74 20 75 73 65 20 73 68 61 72 65 64 20 63  hat use shared c
15a80 61 63 68 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  ache..**.** This
15a90 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 63 61 75   instruction cau
15aa0 73 65 73 20 74 68 65 20 56 4d 20 74 6f 20 68 61  ses the VM to ha
15ab0 6c 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41  lt..*/.case OP_A
15ac0 75 74 6f 43 6f 6d 6d 69 74 3a 20 7b 0a 20 20 69  utoCommit: {.  i
15ad0 6e 74 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f  nt desiredAutoCo
15ae0 6d 6d 69 74 3b 0a 20 20 69 6e 74 20 69 52 6f 6c  mmit;.  int iRol
15af0 6c 62 61 63 6b 3b 0a 20 20 69 6e 74 20 74 75 72  lback;.  int tur
15b00 6e 4f 6e 41 43 3b 0a 0a 20 20 64 65 73 69 72 65  nOnAC;..  desire
15b10 64 41 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 70 4f  dAutoCommit = pO
15b20 70 2d 3e 70 31 3b 0a 20 20 69 52 6f 6c 6c 62 61  p->p1;.  iRollba
15b30 63 6b 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  ck = pOp->p2;.  
15b40 74 75 72 6e 4f 6e 41 43 20 3d 20 64 65 73 69 72  turnOnAC = desir
15b50 65 64 41 75 74 6f 43 6f 6d 6d 69 74 20 26 26 20  edAutoCommit && 
15b60 21 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3b  !db->autoCommit;
15b70 0a 20 20 61 73 73 65 72 74 28 20 64 65 73 69 72  .  assert( desir
15b80 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20  edAutoCommit==1 
15b90 7c 7c 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f  || desiredAutoCo
15ba0 6d 6d 69 74 3d 3d 30 20 29 3b 0a 20 20 61 73 73  mmit==0 );.  ass
15bb0 65 72 74 28 20 64 65 73 69 72 65 64 41 75 74 6f  ert( desiredAuto
15bc0 43 6f 6d 6d 69 74 3d 3d 31 20 7c 7c 20 69 52 6f  Commit==1 || iRo
15bd0 6c 6c 62 61 63 6b 3d 3d 30 20 29 3b 0a 20 20 61  llback==0 );.  a
15be0 73 73 65 72 74 28 20 64 62 2d 3e 61 63 74 69 76  ssert( db->activ
15bf0 65 56 64 62 65 43 6e 74 3e 30 20 29 3b 20 20 2f  eVdbeCnt>0 );  /
15c00 2a 20 41 74 20 6c 65 61 73 74 20 74 68 69 73 20  * At least this 
15c10 6f 6e 65 20 56 4d 20 69 73 20 61 63 74 69 76 65  one VM is active
15c20 20 2a 2f 0a 0a 20 20 69 66 28 20 74 75 72 6e 4f   */..  if( turnO
15c30 6e 41 43 20 26 26 20 69 52 6f 6c 6c 62 61 63 6b  nAC && iRollback
15c40 20 26 26 20 64 62 2d 3e 61 63 74 69 76 65 56 64   && db->activeVd
15c50 62 65 43 6e 74 3e 31 20 29 7b 0a 20 20 20 20 2f  beCnt>1 ){.    /
15c60 2a 20 49 66 20 74 68 69 73 20 69 6e 73 74 72 75  * If this instru
15c70 63 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 73  ction implements
15c80 20 61 20 52 4f 4c 4c 42 41 43 4b 20 61 6e 64 20   a ROLLBACK and 
15c90 6f 74 68 65 72 20 56 4d 73 20 61 72 65 0a 20 20  other VMs are.  
15ca0 20 20 2a 2a 20 73 74 69 6c 6c 20 72 75 6e 6e 69    ** still runni
15cb0 6e 67 2c 20 61 6e 64 20 61 20 74 72 61 6e 73 61  ng, and a transa
15cc0 63 74 69 6f 6e 20 69 73 20 61 63 74 69 76 65 2c  ction is active,
15cd0 20 72 65 74 75 72 6e 20 61 6e 20 65 72 72 6f 72   return an error
15ce0 20 69 6e 64 69 63 61 74 69 6e 67 0a 20 20 20 20   indicating.    
15cf0 2a 2a 20 74 68 61 74 20 74 68 65 20 6f 74 68 65  ** that the othe
15d00 72 20 56 4d 73 20 6d 75 73 74 20 63 6f 6d 70 6c  r VMs must compl
15d10 65 74 65 20 66 69 72 73 74 2e 20 0a 20 20 20 20  ete first. .    
15d20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65  */.    sqlite3Se
15d30 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72  tString(&p->zErr
15d40 4d 73 67 2c 20 64 62 2c 20 22 63 61 6e 6e 6f 74  Msg, db, "cannot
15d50 20 72 6f 6c 6c 62 61 63 6b 20 74 72 61 6e 73 61   rollback transa
15d60 63 74 69 6f 6e 20 2d 20 22 0a 20 20 20 20 20 20  ction - ".      
15d70 20 20 22 53 51 4c 20 73 74 61 74 65 6d 65 6e 74    "SQL statement
15d80 73 20 69 6e 20 70 72 6f 67 72 65 73 73 22 29 3b  s in progress");
15d90 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45  .    rc = SQLITE
15da0 5f 42 55 53 59 3b 0a 20 20 7d 65 6c 73 65 20 69  _BUSY;.  }else i
15db0 66 28 20 74 75 72 6e 4f 6e 41 43 20 26 26 20 21  f( turnOnAC && !
15dc0 69 52 6f 6c 6c 62 61 63 6b 20 26 26 20 64 62 2d  iRollback && db-
15dd0 3e 77 72 69 74 65 56 64 62 65 43 6e 74 3e 30 20  >writeVdbeCnt>0 
15de0 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 69  ){.    /* If thi
15df0 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 6d  s instruction im
15e00 70 6c 65 6d 65 6e 74 73 20 61 20 43 4f 4d 4d 49  plements a COMMI
15e10 54 20 61 6e 64 20 6f 74 68 65 72 20 56 4d 73 20  T and other VMs 
15e20 61 72 65 20 77 72 69 74 69 6e 67 0a 20 20 20 20  are writing.    
15e30 2a 2a 20 72 65 74 75 72 6e 20 61 6e 20 65 72 72  ** return an err
15e40 6f 72 20 69 6e 64 69 63 61 74 69 6e 67 20 74 68  or indicating th
15e50 61 74 20 74 68 65 20 6f 74 68 65 72 20 56 4d 73  at the other VMs
15e60 20 6d 75 73 74 20 63 6f 6d 70 6c 65 74 65 20 66   must complete f
15e70 69 72 73 74 2e 20 0a 20 20 20 20 2a 2f 0a 20 20  irst. .    */.  
15e80 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69    sqlite3SetStri
15e90 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20  ng(&p->zErrMsg, 
15ea0 64 62 2c 20 22 63 61 6e 6e 6f 74 20 63 6f 6d 6d  db, "cannot comm
15eb0 69 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2d  it transaction -
15ec0 20 22 0a 20 20 20 20 20 20 20 20 22 53 51 4c 20   ".        "SQL 
15ed0 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 70 72  statements in pr
15ee0 6f 67 72 65 73 73 22 29 3b 0a 20 20 20 20 72 63  ogress");.    rc
15ef0 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a   = SQLITE_BUSY;.
15f00 20 20 7d 65 6c 73 65 20 69 66 28 20 64 65 73 69    }else if( desi
15f10 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 21 3d 64  redAutoCommit!=d
15f20 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 29 7b  b->autoCommit ){
15f30 0a 20 20 20 20 69 66 28 20 69 52 6f 6c 6c 62 61  .    if( iRollba
15f40 63 6b 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65  ck ){.      asse
15f50 72 74 28 20 64 65 73 69 72 65 64 41 75 74 6f 43  rt( desiredAutoC
15f60 6f 6d 6d 69 74 3d 3d 31 20 29 3b 0a 20 20 20 20  ommit==1 );.    
15f70 20 20 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63    sqlite3Rollbac
15f80 6b 41 6c 6c 28 64 62 29 3b 0a 20 20 20 20 20 20  kAll(db);.      
15f90 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d  db->autoCommit =
15fa0 20 31 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66   1;.    }else if
15fb0 28 20 28 72 63 20 3d 20 73 71 6c 69 74 65 33 56  ( (rc = sqlite3V
15fc0 64 62 65 43 68 65 63 6b 46 6b 28 70 2c 20 31 29  dbeCheckFk(p, 1)
15fd0 29 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  )!=SQLITE_OK ){.
15fe0 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f        goto vdbe_
15ff0 72 65 74 75 72 6e 3b 0a 20 20 20 20 7d 65 6c 73  return;.    }els
16000 65 7b 0a 20 20 20 20 20 20 64 62 2d 3e 61 75 74  e{.      db->aut
16010 6f 43 6f 6d 6d 69 74 20 3d 20 28 75 38 29 64 65  oCommit = (u8)de
16020 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3b  siredAutoCommit;
16030 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74  .      if( sqlit
16040 65 33 56 64 62 65 48 61 6c 74 28 70 29 3d 3d 53  e3VdbeHalt(p)==S
16050 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20  QLITE_BUSY ){.  
16060 20 20 20 20 20 20 70 2d 3e 70 63 20 3d 20 70 63        p->pc = pc
16070 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 61 75  ;.        db->au
16080 74 6f 43 6f 6d 6d 69 74 20 3d 20 28 75 38 29 28  toCommit = (u8)(
16090 31 2d 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d  1-desiredAutoCom
160a0 6d 69 74 29 3b 0a 20 20 20 20 20 20 20 20 70 2d  mit);.        p-
160b0 3e 72 63 20 3d 20 72 63 20 3d 20 53 51 4c 49 54  >rc = rc = SQLIT
160c0 45 5f 42 55 53 59 3b 0a 20 20 20 20 20 20 20 20  E_BUSY;.        
160d0 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e  goto vdbe_return
160e0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
160f0 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e      assert( db->
16100 6e 53 74 61 74 65 6d 65 6e 74 3d 3d 30 20 29 3b  nStatement==0 );
16110 0a 20 20 20 20 73 71 6c 69 74 65 33 43 6c 6f 73  .    sqlite3Clos
16120 65 53 61 76 65 70 6f 69 6e 74 73 28 64 62 29 3b  eSavepoints(db);
16130 0a 20 20 20 20 69 66 28 20 70 2d 3e 72 63 3d 3d  .    if( p->rc==
16140 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
16150 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 44     rc = SQLITE_D
16160 4f 4e 45 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  ONE;.    }else{.
16170 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
16180 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d 0a 20  E_ERROR;.    }. 
16190 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74     goto vdbe_ret
161a0 75 72 6e 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  urn;.  }else{.  
161b0 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69    sqlite3SetStri
161c0 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20  ng(&p->zErrMsg, 
161d0 64 62 2c 0a 20 20 20 20 20 20 20 20 28 21 64 65  db,.        (!de
161e0 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 29  siredAutoCommit)
161f0 3f 22 63 61 6e 6e 6f 74 20 73 74 61 72 74 20 61  ?"cannot start a
16200 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 77 69 74   transaction wit
16210 68 69 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f  hin a transactio
16220 6e 22 3a 28 0a 20 20 20 20 20 20 20 20 28 69 52  n":(.        (iR
16230 6f 6c 6c 62 61 63 6b 29 3f 22 63 61 6e 6e 6f 74  ollback)?"cannot
16240 20 72 6f 6c 6c 62 61 63 6b 20 2d 20 6e 6f 20 74   rollback - no t
16250 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 61 63  ransaction is ac
16260 74 69 76 65 22 3a 0a 20 20 20 20 20 20 20 20 20  tive":.         
16270 20 20 20 20 20 20 20 20 20 20 22 63 61 6e 6e 6f            "canno
16280 74 20 63 6f 6d 6d 69 74 20 2d 20 6e 6f 20 74 72  t commit - no tr
16290 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 61 63 74  ansaction is act
162a0 69 76 65 22 29 29 3b 0a 20 20 20 20 20 20 20 20  ive"));.        
162b0 20 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54   .    rc = SQLIT
162c0 45 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 62  E_ERROR;.  }.  b
162d0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
162e0 64 65 3a 20 54 72 61 6e 73 61 63 74 69 6f 6e 20  de: Transaction 
162f0 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
16300 2a 20 42 65 67 69 6e 20 61 20 74 72 61 6e 73 61  * Begin a transa
16310 63 74 69 6f 6e 2e 20 20 54 68 65 20 74 72 61 6e  ction.  The tran
16320 73 61 63 74 69 6f 6e 20 65 6e 64 73 20 77 68 65  saction ends whe
16330 6e 20 61 20 43 6f 6d 6d 69 74 20 6f 72 20 52 6f  n a Commit or Ro
16340 6c 6c 62 61 63 6b 0a 2a 2a 20 6f 70 63 6f 64 65  llback.** opcode
16350 20 69 73 20 65 6e 63 6f 75 6e 74 65 72 65 64 2e   is encountered.
16360 20 20 44 65 70 65 6e 64 69 6e 67 20 6f 6e 20 74    Depending on t
16370 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 73  he ON CONFLICT s
16380 65 74 74 69 6e 67 2c 20 74 68 65 0a 2a 2a 20 74  etting, the.** t
16390 72 61 6e 73 61 63 74 69 6f 6e 20 6d 69 67 68 74  ransaction might
163a0 20 61 6c 73 6f 20 62 65 20 72 6f 6c 6c 65 64 20   also be rolled 
163b0 62 61 63 6b 20 69 66 20 61 6e 20 65 72 72 6f 72  back if an error
163c0 20 69 73 20 65 6e 63 6f 75 6e 74 65 72 65 64 2e   is encountered.
163d0 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68 65  .**.** P1 is the
163e0 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 64 61   index of the da
163f0 74 61 62 61 73 65 20 66 69 6c 65 20 6f 6e 20 77  tabase file on w
16400 68 69 63 68 20 74 68 65 20 74 72 61 6e 73 61 63  hich the transac
16410 74 69 6f 6e 20 69 73 0a 2a 2a 20 73 74 61 72 74  tion is.** start
16420 65 64 2e 20 20 49 6e 64 65 78 20 30 20 69 73 20  ed.  Index 0 is 
16430 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
16440 65 20 66 69 6c 65 20 61 6e 64 20 69 6e 64 65 78  e file and index
16450 20 31 20 69 73 20 74 68 65 0a 2a 2a 20 66 69 6c   1 is the.** fil
16460 65 20 75 73 65 64 20 66 6f 72 20 74 65 6d 70 6f  e used for tempo
16470 72 61 72 79 20 74 61 62 6c 65 73 2e 20 20 49 6e  rary tables.  In
16480 64 69 63 65 73 20 6f 66 20 32 20 6f 72 20 6d 6f  dices of 2 or mo
16490 72 65 20 61 72 65 20 75 73 65 64 20 66 6f 72 0a  re are used for.
164a0 2a 2a 20 61 74 74 61 63 68 65 64 20 64 61 74 61  ** attached data
164b0 62 61 73 65 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  bases..**.** If 
164c0 50 32 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20  P2 is non-zero, 
164d0 74 68 65 6e 20 61 20 77 72 69 74 65 2d 74 72 61  then a write-tra
164e0 6e 73 61 63 74 69 6f 6e 20 69 73 20 73 74 61 72  nsaction is star
164f0 74 65 64 2e 20 20 41 20 52 45 53 45 52 56 45 44  ted.  A RESERVED
16500 20 6c 6f 63 6b 20 69 73 0a 2a 2a 20 6f 62 74 61   lock is.** obta
16510 69 6e 65 64 20 6f 6e 20 74 68 65 20 64 61 74 61  ined on the data
16520 62 61 73 65 20 66 69 6c 65 20 77 68 65 6e 20 61  base file when a
16530 20 77 72 69 74 65 2d 74 72 61 6e 73 61 63 74 69   write-transacti
16540 6f 6e 20 69 73 20 73 74 61 72 74 65 64 2e 20 20  on is started.  
16550 4e 6f 0a 2a 2a 20 6f 74 68 65 72 20 70 72 6f 63  No.** other proc
16560 65 73 73 20 63 61 6e 20 73 74 61 72 74 20 61 6e  ess can start an
16570 6f 74 68 65 72 20 77 72 69 74 65 20 74 72 61 6e  other write tran
16580 73 61 63 74 69 6f 6e 20 77 68 69 6c 65 20 74 68  saction while th
16590 69 73 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  is transaction i
165a0 73 0a 2a 2a 20 75 6e 64 65 72 77 61 79 2e 20 20  s.** underway.  
165b0 53 74 61 72 74 69 6e 67 20 61 20 77 72 69 74 65  Starting a write
165c0 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61 6c 73   transaction als
165d0 6f 20 63 72 65 61 74 65 73 20 61 20 72 6f 6c 6c  o creates a roll
165e0 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 2e 20 41 0a  back journal. A.
165f0 2a 2a 20 77 72 69 74 65 20 74 72 61 6e 73 61 63  ** write transac
16600 74 69 6f 6e 20 6d 75 73 74 20 62 65 20 73 74 61  tion must be sta
16610 72 74 65 64 20 62 65 66 6f 72 65 20 61 6e 79 20  rted before any 
16620 63 68 61 6e 67 65 73 20 63 61 6e 20 62 65 20 6d  changes can be m
16630 61 64 65 20 74 6f 20 74 68 65 0a 2a 2a 20 64 61  ade to the.** da
16640 74 61 62 61 73 65 2e 20 20 49 66 20 50 32 20 69  tabase.  If P2 i
16650 73 20 32 20 6f 72 20 67 72 65 61 74 65 72 20 74  s 2 or greater t
16660 68 65 6e 20 61 6e 20 45 58 43 4c 55 53 49 56 45  hen an EXCLUSIVE
16670 20 6c 6f 63 6b 20 69 73 20 61 6c 73 6f 20 6f 62   lock is also ob
16680 74 61 69 6e 65 64 0a 2a 2a 20 6f 6e 20 74 68 65  tained.** on the
16690 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20   file..**.** If 
166a0 61 20 77 72 69 74 65 2d 74 72 61 6e 73 61 63 74  a write-transact
166b0 69 6f 6e 20 69 73 20 73 74 61 72 74 65 64 20 61  ion is started a
166c0 6e 64 20 74 68 65 20 56 64 62 65 2e 75 73 65 73  nd the Vdbe.uses
166d0 53 74 6d 74 4a 6f 75 72 6e 61 6c 20 66 6c 61 67  StmtJournal flag
166e0 20 69 73 0a 2a 2a 20 74 72 75 65 20 28 74 68 69   is.** true (thi
166f0 73 20 66 6c 61 67 20 69 73 20 73 65 74 20 69 66  s flag is set if
16700 20 74 68 65 20 56 64 62 65 20 6d 61 79 20 6d 6f   the Vdbe may mo
16710 64 69 66 79 20 6d 6f 72 65 20 74 68 61 6e 20 6f  dify more than o
16720 6e 65 20 72 6f 77 20 61 6e 64 20 6d 61 79 0a 2a  ne row and may.*
16730 2a 20 74 68 72 6f 77 20 61 6e 20 41 42 4f 52 54  * throw an ABORT
16740 20 65 78 63 65 70 74 69 6f 6e 29 2c 20 61 20 73   exception), a s
16750 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63  tatement transac
16760 74 69 6f 6e 20 6d 61 79 20 61 6c 73 6f 20 62 65  tion may also be
16770 20 6f 70 65 6e 65 64 2e 0a 2a 2a 20 4d 6f 72 65   opened..** More
16780 20 73 70 65 63 69 66 69 63 61 6c 6c 79 2c 20 61   specifically, a
16790 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73   statement trans
167a0 61 63 74 69 6f 6e 20 69 73 20 6f 70 65 6e 65 64  action is opened
167b0 20 69 66 66 20 74 68 65 20 64 61 74 61 62 61 73   iff the databas
167c0 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  e.** connection 
167d0 69 73 20 63 75 72 72 65 6e 74 6c 79 20 6e 6f 74  is currently not
167e0 20 69 6e 20 61 75 74 6f 63 6f 6d 6d 69 74 20 6d   in autocommit m
167f0 6f 64 65 2c 20 6f 72 20 69 66 20 74 68 65 72 65  ode, or if there
16800 20 61 72 65 20 6f 74 68 65 72 0a 2a 2a 20 61 63   are other.** ac
16810 74 69 76 65 20 73 74 61 74 65 6d 65 6e 74 73 2e  tive statements.
16820 20 41 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61   A statement tra
16830 6e 73 61 63 74 69 6f 6e 20 61 6c 6c 6f 77 73 20  nsaction allows 
16840 74 68 65 20 61 66 66 65 63 74 73 20 6f 66 20 74  the affects of t
16850 68 69 73 0a 2a 2a 20 56 44 42 45 20 74 6f 20 62  his.** VDBE to b
16860 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 20 61 66  e rolled back af
16870 74 65 72 20 61 6e 20 65 72 72 6f 72 20 77 69 74  ter an error wit
16880 68 6f 75 74 20 68 61 76 69 6e 67 20 74 6f 20 72  hout having to r
16890 6f 6c 6c 20 62 61 63 6b 20 74 68 65 0a 2a 2a 20  oll back the.** 
168a0 65 6e 74 69 72 65 20 74 72 61 6e 73 61 63 74 69  entire transacti
168b0 6f 6e 2e 20 49 66 20 6e 6f 20 65 72 72 6f 72 20  on. If no error 
168c0 69 73 20 65 6e 63 6f 75 6e 74 65 72 65 64 2c 20  is encountered, 
168d0 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74 72  the statement tr
168e0 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 77 69 6c  ansaction.** wil
168f0 6c 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20  l automatically 
16900 63 6f 6d 6d 69 74 20 77 68 65 6e 20 74 68 65 20  commit when the 
16910 56 44 42 45 20 68 61 6c 74 73 2e 0a 2a 2a 0a 2a  VDBE halts..**.*
16920 2a 20 49 66 20 50 32 20 69 73 20 7a 65 72 6f 2c  * If P2 is zero,
16930 20 74 68 65 6e 20 61 20 72 65 61 64 2d 6c 6f 63   then a read-loc
16940 6b 20 69 73 20 6f 62 74 61 69 6e 65 64 20 6f 6e  k is obtained on
16950 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
16960 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54  le..*/.case OP_T
16970 72 61 6e 73 61 63 74 69 6f 6e 3a 20 7b 0a 20 20  ransaction: {.  
16980 42 74 72 65 65 20 2a 70 42 74 3b 0a 0a 20 20 61  Btree *pBt;..  a
16990 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
169a0 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d  0 && pOp->p1<db-
169b0 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74  >nDb );.  assert
169c0 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20  ( (p->btreeMask 
169d0 26 20 28 28 28 79 44 62 4d 61 73 6b 29 31 29 3c  & (((yDbMask)1)<
169e0 3c 70 4f 70 2d 3e 70 31 29 29 21 3d 30 20 29 3b  <pOp->p1))!=0 );
169f0 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62  .  pBt = db->aDb
16a00 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 0a  [pOp->p1].pBt;..
16a10 20 20 69 66 28 20 70 42 74 20 29 7b 0a 20 20 20    if( pBt ){.   
16a20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
16a30 65 65 42 65 67 69 6e 54 72 61 6e 73 28 70 42 74  eeBeginTrans(pBt
16a40 2c 20 70 4f 70 2d 3e 70 32 29 3b 0a 20 20 20 20  , pOp->p2);.    
16a50 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42  if( rc==SQLITE_B
16a60 55 53 59 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e  USY ){.      p->
16a70 70 63 20 3d 20 70 63 3b 0a 20 20 20 20 20 20 70  pc = pc;.      p
16a80 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53 51 4c 49  ->rc = rc = SQLI
16a90 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 20 20 67  TE_BUSY;.      g
16aa0 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b  oto vdbe_return;
16ab0 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 72  .    }.    if( r
16ac0 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c!=SQLITE_OK ){.
16ad0 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74        goto abort
16ae0 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
16af0 20 20 20 7d 0a 0a 20 20 20 20 69 66 28 20 70 4f     }..    if( pO
16b00 70 2d 3e 70 32 20 26 26 20 70 2d 3e 75 73 65 73  p->p2 && p->uses
16b10 53 74 6d 74 4a 6f 75 72 6e 61 6c 20 0a 20 20 20  StmtJournal .   
16b20 20 20 26 26 20 28 64 62 2d 3e 61 75 74 6f 43 6f    && (db->autoCo
16b30 6d 6d 69 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 61  mmit==0 || db->a
16b40 63 74 69 76 65 56 64 62 65 43 6e 74 3e 31 29 20  ctiveVdbeCnt>1) 
16b50 0a 20 20 20 20 29 7b 0a 20 20 20 20 20 20 61 73  .    ){.      as
16b60 73 65 72 74 28 20 73 71 6c 69 74 65 33 42 74 72  sert( sqlite3Btr
16b70 65 65 49 73 49 6e 54 72 61 6e 73 28 70 42 74 29  eeIsInTrans(pBt)
16b80 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70 2d   );.      if( p-
16b90 3e 69 53 74 61 74 65 6d 65 6e 74 3d 3d 30 20 29  >iStatement==0 )
16ba0 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  {.        assert
16bb0 28 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74  ( db->nStatement
16bc0 3e 3d 30 20 26 26 20 64 62 2d 3e 6e 53 61 76 65  >=0 && db->nSave
16bd0 70 6f 69 6e 74 3e 3d 30 20 29 3b 0a 20 20 20 20  point>=0 );.    
16be0 20 20 20 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65      db->nStateme
16bf0 6e 74 2b 2b 3b 20 0a 20 20 20 20 20 20 20 20 70  nt++; .        p
16c00 2d 3e 69 53 74 61 74 65 6d 65 6e 74 20 3d 20 64  ->iStatement = d
16c10 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 20 2b 20  b->nSavepoint + 
16c20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 3b 0a  db->nStatement;.
16c30 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 72 63        }.      rc
16c40 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 42   = sqlite3BtreeB
16c50 65 67 69 6e 53 74 6d 74 28 70 42 74 2c 20 70 2d  eginStmt(pBt, p-
16c60 3e 69 53 74 61 74 65 6d 65 6e 74 29 3b 0a 0a 20  >iStatement);.. 
16c70 20 20 20 20 20 2f 2a 20 53 74 6f 72 65 20 74 68       /* Store th
16c80 65 20 63 75 72 72 65 6e 74 20 76 61 6c 75 65 20  e current value 
16c90 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  of the database 
16ca0 68 61 6e 64 6c 65 73 20 64 65 66 65 72 72 65 64  handles deferred
16cb0 20 63 6f 6e 73 74 72 61 69 6e 74 0a 20 20 20 20   constraint.    
16cc0 20 20 2a 2a 20 63 6f 75 6e 74 65 72 2e 20 49 66    ** counter. If
16cd0 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74   the statement t
16ce0 72 61 6e 73 61 63 74 69 6f 6e 20 6e 65 65 64 73  ransaction needs
16cf0 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61   to be rolled ba
16d00 63 6b 2c 0a 20 20 20 20 20 20 2a 2a 20 74 68 65  ck,.      ** the
16d10 20 76 61 6c 75 65 20 6f 66 20 74 68 69 73 20 63   value of this c
16d20 6f 75 6e 74 65 72 20 6e 65 65 64 73 20 74 6f 20  ounter needs to 
16d30 62 65 20 72 65 73 74 6f 72 65 64 20 74 6f 6f 2e  be restored too.
16d40 20 20 2a 2f 0a 20 20 20 20 20 20 70 2d 3e 6e 53    */.      p->nS
16d50 74 6d 74 44 65 66 43 6f 6e 73 20 3d 20 64 62 2d  tmtDefCons = db-
16d60 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 0a  >nDeferredCons;.
16d70 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61      }.  }.  brea
16d80 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
16d90 20 52 65 61 64 43 6f 6f 6b 69 65 20 50 31 20 50   ReadCookie P1 P
16da0 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52  2 P3 * *.**.** R
16db0 65 61 64 20 63 6f 6f 6b 69 65 20 6e 75 6d 62 65  ead cookie numbe
16dc0 72 20 50 33 20 66 72 6f 6d 20 64 61 74 61 62 61  r P3 from databa
16dd0 73 65 20 50 31 20 61 6e 64 20 77 72 69 74 65 20  se P1 and write 
16de0 69 74 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  it into register
16df0 20 50 32 2e 0a 2a 2a 20 50 33 3d 3d 31 20 69 73   P2..** P3==1 is
16e00 20 74 68 65 20 73 63 68 65 6d 61 20 76 65 72 73   the schema vers
16e10 69 6f 6e 2e 20 20 50 33 3d 3d 32 20 69 73 20 74  ion.  P3==2 is t
16e20 68 65 20 64 61 74 61 62 61 73 65 20 66 6f 72 6d  he database form
16e30 61 74 2e 0a 2a 2a 20 50 33 3d 3d 33 20 69 73 20  at..** P3==3 is 
16e40 74 68 65 20 72 65 63 6f 6d 6d 65 6e 64 65 64 20  the recommended 
16e50 70 61 67 65 72 20 63 61 63 68 65 20 73 69 7a 65  pager cache size
16e60 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20  , and so forth. 
16e70 20 50 31 3d 3d 30 20 69 73 0a 2a 2a 20 74 68 65   P1==0 is.** the
16e80 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66   main database f
16e90 69 6c 65 20 61 6e 64 20 50 31 3d 3d 31 20 69 73  ile and P1==1 is
16ea0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
16eb0 6c 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65  le used to store
16ec0 0a 2a 2a 20 74 65 6d 70 6f 72 61 72 79 20 74 61  .** temporary ta
16ed0 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72  bles..**.** Ther
16ee0 65 20 6d 75 73 74 20 62 65 20 61 20 72 65 61 64  e must be a read
16ef0 2d 6c 6f 63 6b 20 6f 6e 20 74 68 65 20 64 61 74  -lock on the dat
16f00 61 62 61 73 65 20 28 65 69 74 68 65 72 20 61 20  abase (either a 
16f10 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 6d  transaction.** m
16f20 75 73 74 20 62 65 20 73 74 61 72 74 65 64 20 6f  ust be started o
16f30 72 20 74 68 65 72 65 20 6d 75 73 74 20 62 65 20  r there must be 
16f40 61 6e 20 6f 70 65 6e 20 63 75 72 73 6f 72 29 20  an open cursor) 
16f50 62 65 66 6f 72 65 0a 2a 2a 20 65 78 65 63 75 74  before.** execut
16f60 69 6e 67 20 74 68 69 73 20 69 6e 73 74 72 75 63  ing this instruc
16f70 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  tion..*/.case OP
16f80 5f 52 65 61 64 43 6f 6f 6b 69 65 3a 20 7b 20 20  _ReadCookie: {  
16f90 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
16fa0 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20  out2-prerelease 
16fb0 2a 2f 0a 20 20 69 6e 74 20 69 4d 65 74 61 3b 0a  */.  int iMeta;.
16fc0 20 20 69 6e 74 20 69 44 62 3b 0a 20 20 69 6e 74    int iDb;.  int
16fd0 20 69 43 6f 6f 6b 69 65 3b 0a 0a 20 20 69 44 62   iCookie;..  iDb
16fe0 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 69 43   = pOp->p1;.  iC
16ff0 6f 6f 6b 69 65 20 3d 20 70 4f 70 2d 3e 70 33 3b  ookie = pOp->p3;
17000 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
17010 70 33 3c 53 51 4c 49 54 45 5f 4e 5f 42 54 52 45  p3<SQLITE_N_BTRE
17020 45 5f 4d 45 54 41 20 29 3b 0a 20 20 61 73 73 65  E_META );.  asse
17030 72 74 28 20 69 44 62 3e 3d 30 20 26 26 20 69 44  rt( iDb>=0 && iD
17040 62 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61  b<db->nDb );.  a
17050 73 73 65 72 74 28 20 64 62 2d 3e 61 44 62 5b 69  ssert( db->aDb[i
17060 44 62 5d 2e 70 42 74 21 3d 30 20 29 3b 0a 20 20  Db].pBt!=0 );.  
17070 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65  assert( (p->btre
17080 65 4d 61 73 6b 20 26 20 28 28 28 79 44 62 4d 61  eMask & (((yDbMa
17090 73 6b 29 31 29 3c 3c 69 44 62 29 29 21 3d 30 20  sk)1)<<iDb))!=0 
170a0 29 3b 0a 0a 20 20 73 71 6c 69 74 65 33 42 74 72  );..  sqlite3Btr
170b0 65 65 47 65 74 4d 65 74 61 28 64 62 2d 3e 61 44  eeGetMeta(db->aD
170c0 62 5b 69 44 62 5d 2e 70 42 74 2c 20 69 43 6f 6f  b[iDb].pBt, iCoo
170d0 6b 69 65 2c 20 28 75 33 32 20 2a 29 26 69 4d 65  kie, (u32 *)&iMe
170e0 74 61 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69  ta);.  pOut->u.i
170f0 20 3d 20 69 4d 65 74 61 3b 0a 20 20 62 72 65 61   = iMeta;.  brea
17100 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
17110 20 53 65 74 43 6f 6f 6b 69 65 20 50 31 20 50 32   SetCookie P1 P2
17120 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72   P3 * *.**.** Wr
17130 69 74 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  ite the content 
17140 6f 66 20 72 65 67 69 73 74 65 72 20 50 33 20 28  of register P3 (
17150 69 6e 74 65 72 70 72 65 74 65 64 20 61 73 20 61  interpreted as a
17160 6e 20 69 6e 74 65 67 65 72 29 0a 2a 2a 20 69 6e  n integer).** in
17170 74 6f 20 63 6f 6f 6b 69 65 20 6e 75 6d 62 65 72  to cookie number
17180 20 50 32 20 6f 66 20 64 61 74 61 62 61 73 65 20   P2 of database 
17190 50 31 2e 20 20 50 32 3d 3d 31 20 69 73 20 74 68  P1.  P2==1 is th
171a0 65 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e  e schema version
171b0 2e 20 20 0a 2a 2a 20 50 32 3d 3d 32 20 69 73 20  .  .** P2==2 is 
171c0 74 68 65 20 64 61 74 61 62 61 73 65 20 66 6f 72  the database for
171d0 6d 61 74 2e 20 50 32 3d 3d 33 20 69 73 20 74 68  mat. P2==3 is th
171e0 65 20 72 65 63 6f 6d 6d 65 6e 64 65 64 20 70 61  e recommended pa
171f0 67 65 72 20 63 61 63 68 65 20 0a 2a 2a 20 73 69  ger cache .** si
17200 7a 65 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68  ze, and so forth
17210 2e 20 20 50 31 3d 3d 30 20 69 73 20 74 68 65 20  .  P1==0 is the 
17220 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69  main database fi
17230 6c 65 20 61 6e 64 20 50 31 3d 3d 31 20 69 73 20  le and P1==1 is 
17240 74 68 65 20 0a 2a 2a 20 64 61 74 61 62 61 73 65  the .** database
17250 20 66 69 6c 65 20 75 73 65 64 20 74 6f 20 73 74   file used to st
17260 6f 72 65 20 74 65 6d 70 6f 72 61 72 79 20 74 61  ore temporary ta
17270 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 41 20 74 72  bles..**.** A tr
17280 61 6e 73 61 63 74 69 6f 6e 20 6d 75 73 74 20 62  ansaction must b
17290 65 20 73 74 61 72 74 65 64 20 62 65 66 6f 72 65  e started before
172a0 20 65 78 65 63 75 74 69 6e 67 20 74 68 69 73 20   executing this 
172b0 6f 70 63 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65 20  opcode..*/.case 
172c0 4f 50 5f 53 65 74 43 6f 6f 6b 69 65 3a 20 7b 20  OP_SetCookie: { 
172d0 20 20 20 20 20 20 2f 2a 20 69 6e 33 20 2a 2f 0a        /* in3 */.
172e0 20 20 44 62 20 2a 70 44 62 3b 0a 20 20 61 73 73    Db *pDb;.  ass
172f0 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 53 51 4c  ert( pOp->p2<SQL
17300 49 54 45 5f 4e 5f 42 54 52 45 45 5f 4d 45 54 41  ITE_N_BTREE_META
17310 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
17320 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
17330 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20  >p1<db->nDb );. 
17340 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72   assert( (p->btr
17350 65 65 4d 61 73 6b 20 26 20 28 28 28 79 44 62 4d  eeMask & (((yDbM
17360 61 73 6b 29 31 29 3c 3c 70 4f 70 2d 3e 70 31 29  ask)1)<<pOp->p1)
17370 29 21 3d 30 20 29 3b 0a 20 20 70 44 62 20 3d 20  )!=0 );.  pDb = 
17380 26 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31  &db->aDb[pOp->p1
17390 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 44 62  ];.  assert( pDb
173a0 2d 3e 70 42 74 21 3d 30 20 29 3b 0a 20 20 61 73  ->pBt!=0 );.  as
173b0 73 65 72 74 28 20 73 71 6c 69 74 65 33 53 63 68  sert( sqlite3Sch
173c0 65 6d 61 4d 75 74 65 78 48 65 6c 64 28 64 62 2c  emaMutexHeld(db,
173d0 20 70 4f 70 2d 3e 70 31 2c 20 30 29 20 29 3b 0a   pOp->p1, 0) );.
173e0 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70    pIn3 = &aMem[p
173f0 4f 70 2d 3e 70 33 5d 3b 0a 20 20 73 71 6c 69 74  Op->p3];.  sqlit
17400 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72  e3VdbeMemInteger
17410 69 66 79 28 70 49 6e 33 29 3b 0a 20 20 2f 2a 20  ify(pIn3);.  /* 
17420 53 65 65 20 6e 6f 74 65 20 61 62 6f 75 74 20 69  See note about i
17430 6e 64 65 78 20 73 68 69 66 74 69 6e 67 20 6f 6e  ndex shifting on
17440 20 4f 50 5f 52 65 61 64 43 6f 6f 6b 69 65 20 2a   OP_ReadCookie *
17450 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  /.  rc = sqlite3
17460 42 74 72 65 65 55 70 64 61 74 65 4d 65 74 61 28  BtreeUpdateMeta(
17470 70 44 62 2d 3e 70 42 74 2c 20 70 4f 70 2d 3e 70  pDb->pBt, pOp->p
17480 32 2c 20 28 69 6e 74 29 70 49 6e 33 2d 3e 75 2e  2, (int)pIn3->u.
17490 69 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70  i);.  if( pOp->p
174a0 32 3d 3d 42 54 52 45 45 5f 53 43 48 45 4d 41 5f  2==BTREE_SCHEMA_
174b0 56 45 52 53 49 4f 4e 20 29 7b 0a 20 20 20 20 2f  VERSION ){.    /
174c0 2a 20 57 68 65 6e 20 74 68 65 20 73 63 68 65 6d  * When the schem
174d0 61 20 63 6f 6f 6b 69 65 20 63 68 61 6e 67 65 73  a cookie changes
174e0 2c 20 72 65 63 6f 72 64 20 74 68 65 20 6e 65 77  , record the new
174f0 20 63 6f 6f 6b 69 65 20 69 6e 74 65 72 6e 61 6c   cookie internal
17500 6c 79 20 2a 2f 0a 20 20 20 20 70 44 62 2d 3e 70  ly */.    pDb->p
17510 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 5f 63  Schema->schema_c
17520 6f 6f 6b 69 65 20 3d 20 28 69 6e 74 29 70 49 6e  ookie = (int)pIn
17530 33 2d 3e 75 2e 69 3b 0a 20 20 20 20 64 62 2d 3e  3->u.i;.    db->
17540 66 6c 61 67 73 20 7c 3d 20 53 51 4c 49 54 45 5f  flags |= SQLITE_
17550 49 6e 74 65 72 6e 43 68 61 6e 67 65 73 3b 0a 20  InternChanges;. 
17560 20 7d 65 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e   }else if( pOp->
17570 70 32 3d 3d 42 54 52 45 45 5f 46 49 4c 45 5f 46  p2==BTREE_FILE_F
17580 4f 52 4d 41 54 20 29 7b 0a 20 20 20 20 2f 2a 20  ORMAT ){.    /* 
17590 52 65 63 6f 72 64 20 63 68 61 6e 67 65 73 20 69  Record changes i
175a0 6e 20 74 68 65 20 66 69 6c 65 20 66 6f 72 6d 61  n the file forma
175b0 74 20 2a 2f 0a 20 20 20 20 70 44 62 2d 3e 70 53  t */.    pDb->pS
175c0 63 68 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d  chema->file_form
175d0 61 74 20 3d 20 28 75 38 29 70 49 6e 33 2d 3e 75  at = (u8)pIn3->u
175e0 2e 69 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f  .i;.  }.  if( pO
175f0 70 2d 3e 70 31 3d 3d 31 20 29 7b 0a 20 20 20 20  p->p1==1 ){.    
17600 2f 2a 20 49 6e 76 61 6c 69 64 61 74 65 20 61 6c  /* Invalidate al
17610 6c 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65  l prepared state
17620 6d 65 6e 74 73 20 77 68 65 6e 65 76 65 72 20 74  ments whenever t
17630 68 65 20 54 45 4d 50 20 64 61 74 61 62 61 73 65  he TEMP database
17640 0a 20 20 20 20 2a 2a 20 73 63 68 65 6d 61 20 69  .    ** schema i
17650 73 20 63 68 61 6e 67 65 64 2e 20 20 54 69 63 6b  s changed.  Tick
17660 65 74 20 23 31 36 34 34 20 2a 2f 0a 20 20 20 20  et #1644 */.    
17670 73 71 6c 69 74 65 33 45 78 70 69 72 65 50 72 65  sqlite3ExpirePre
17680 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28  paredStatements(
17690 64 62 29 3b 0a 20 20 20 20 70 2d 3e 65 78 70 69  db);.    p->expi
176a0 72 65 64 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 62  red = 0;.  }.  b
176b0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
176c0 64 65 3a 20 56 65 72 69 66 79 43 6f 6f 6b 69 65  de: VerifyCookie
176d0 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
176e0 0a 2a 2a 20 43 68 65 63 6b 20 74 68 65 20 76 61  .** Check the va
176f0 6c 75 65 20 6f 66 20 67 6c 6f 62 61 6c 20 64 61  lue of global da
17700 74 61 62 61 73 65 20 70 61 72 61 6d 65 74 65 72  tabase parameter
17710 20 6e 75 6d 62 65 72 20 30 20 28 74 68 65 0a 2a   number 0 (the.*
17720 2a 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e  * schema version
17730 29 20 61 6e 64 20 6d 61 6b 65 20 73 75 72 65 20  ) and make sure 
17740 69 74 20 69 73 20 65 71 75 61 6c 20 74 6f 20 50  it is equal to P
17750 32 20 61 6e 64 20 74 68 61 74 20 74 68 65 0a 2a  2 and that the.*
17760 2a 20 67 65 6e 65 72 61 74 69 6f 6e 20 63 6f 75  * generation cou
17770 6e 74 65 72 20 6f 6e 20 74 68 65 20 6c 6f 63 61  nter on the loca
17780 6c 20 73 63 68 65 6d 61 20 70 61 72 73 65 20 65  l schema parse e
17790 71 75 61 6c 73 20 50 33 2e 0a 2a 2a 0a 2a 2a 20  quals P3..**.** 
177a0 50 31 20 69 73 20 74 68 65 20 64 61 74 61 62 61  P1 is the databa
177b0 73 65 20 6e 75 6d 62 65 72 20 77 68 69 63 68 20  se number which 
177c0 69 73 20 30 20 66 6f 72 20 74 68 65 20 6d 61 69  is 0 for the mai
177d0 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a  n database file.
177e0 2a 2a 20 61 6e 64 20 31 20 66 6f 72 20 74 68 65  ** and 1 for the
177f0 20 66 69 6c 65 20 68 6f 6c 64 69 6e 67 20 74 65   file holding te
17800 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 20 61  mporary tables a
17810 6e 64 20 73 6f 6d 65 20 68 69 67 68 65 72 20 6e  nd some higher n
17820 75 6d 62 65 72 0a 2a 2a 20 66 6f 72 20 61 75 78  umber.** for aux
17830 69 6c 69 61 72 79 20 64 61 74 61 62 61 73 65 73  iliary databases
17840 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6f 6b  ..**.** The cook
17850 69 65 20 63 68 61 6e 67 65 73 20 69 74 73 20 76  ie changes its v
17860 61 6c 75 65 20 77 68 65 6e 65 76 65 72 20 74 68  alue whenever th
17870 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  e database schem
17880 61 20 63 68 61 6e 67 65 73 2e 0a 2a 2a 20 54 68  a changes..** Th
17890 69 73 20 6f 70 65 72 61 74 69 6f 6e 20 69 73 20  is operation is 
178a0 75 73 65 64 20 74 6f 20 64 65 74 65 63 74 20 77  used to detect w
178b0 68 65 6e 20 74 68 61 74 20 74 68 65 20 63 6f 6f  hen that the coo
178c0 6b 69 65 20 68 61 73 20 63 68 61 6e 67 65 64 0a  kie has changed.
178d0 2a 2a 20 61 6e 64 20 74 68 61 74 20 74 68 65 20  ** and that the 
178e0 63 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73 20  current process 
178f0 6e 65 65 64 73 20 74 6f 20 72 65 72 65 61 64 20  needs to reread 
17900 74 68 65 20 73 63 68 65 6d 61 2e 0a 2a 2a 0a 2a  the schema..**.*
17910 2a 20 45 69 74 68 65 72 20 61 20 74 72 61 6e 73  * Either a trans
17920 61 63 74 69 6f 6e 20 6e 65 65 64 73 20 74 6f 20  action needs to 
17930 68 61 76 65 20 62 65 65 6e 20 73 74 61 72 74 65  have been starte
17940 64 20 6f 72 20 61 6e 20 4f 50 5f 4f 70 65 6e 20  d or an OP_Open 
17950 6e 65 65 64 73 0a 2a 2a 20 74 6f 20 62 65 20 65  needs.** to be e
17960 78 65 63 75 74 65 64 20 28 74 6f 20 65 73 74 61  xecuted (to esta
17970 62 6c 69 73 68 20 61 20 72 65 61 64 20 6c 6f 63  blish a read loc
17980 6b 29 20 62 65 66 6f 72 65 20 74 68 69 73 20 6f  k) before this o
17990 70 63 6f 64 65 20 69 73 0a 2a 2a 20 69 6e 76 6f  pcode is.** invo
179a0 6b 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ked..*/.case OP_
179b0 56 65 72 69 66 79 43 6f 6f 6b 69 65 3a 20 7b 0a  VerifyCookie: {.
179c0 20 20 69 6e 74 20 69 4d 65 74 61 3b 0a 20 20 69    int iMeta;.  i
179d0 6e 74 20 69 47 65 6e 3b 0a 20 20 42 74 72 65 65  nt iGen;.  Btree
179e0 20 2a 70 42 74 3b 0a 0a 20 20 61 73 73 65 72 74   *pBt;..  assert
179f0 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
17a00 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20  pOp->p1<db->nDb 
17a10 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d  );.  assert( (p-
17a20 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28 28 28  >btreeMask & (((
17a30 79 44 62 4d 61 73 6b 29 31 29 3c 3c 70 4f 70 2d  yDbMask)1)<<pOp-
17a40 3e 70 31 29 29 21 3d 30 20 29 3b 0a 20 20 61 73  >p1))!=0 );.  as
17a50 73 65 72 74 28 20 73 71 6c 69 74 65 33 53 63 68  sert( sqlite3Sch
17a60 65 6d 61 4d 75 74 65 78 48 65 6c 64 28 64 62 2c  emaMutexHeld(db,
17a70 20 70 4f 70 2d 3e 70 31 2c 20 30 29 20 29 3b 0a   pOp->p1, 0) );.
17a80 20 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b    pBt = db->aDb[
17a90 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20 20  pOp->p1].pBt;.  
17aa0 69 66 28 20 70 42 74 20 29 7b 0a 20 20 20 20 73  if( pBt ){.    s
17ab0 71 6c 69 74 65 33 42 74 72 65 65 47 65 74 4d 65  qlite3BtreeGetMe
17ac0 74 61 28 70 42 74 2c 20 42 54 52 45 45 5f 53 43  ta(pBt, BTREE_SC
17ad0 48 45 4d 41 5f 56 45 52 53 49 4f 4e 2c 20 28 75  HEMA_VERSION, (u
17ae0 33 32 20 2a 29 26 69 4d 65 74 61 29 3b 0a 20 20  32 *)&iMeta);.  
17af0 20 20 69 47 65 6e 20 3d 20 64 62 2d 3e 61 44 62    iGen = db->aDb
17b00 5b 70 4f 70 2d 3e 70 31 5d 2e 70 53 63 68 65 6d  [pOp->p1].pSchem
17b10 61 2d 3e 69 47 65 6e 65 72 61 74 69 6f 6e 3b 0a  a->iGeneration;.
17b20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69 4d 65    }else{.    iMe
17b30 74 61 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 69 66  ta = 0;.  }.  if
17b40 28 20 69 4d 65 74 61 21 3d 70 4f 70 2d 3e 70 32  ( iMeta!=pOp->p2
17b50 20 7c 7c 20 69 47 65 6e 21 3d 70 4f 70 2d 3e 70   || iGen!=pOp->p
17b60 33 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  3 ){.    sqlite3
17b70 44 62 46 72 65 65 28 64 62 2c 20 70 2d 3e 7a 45  DbFree(db, p->zE
17b80 72 72 4d 73 67 29 3b 0a 20 20 20 20 70 2d 3e 7a  rrMsg);.    p->z
17b90 45 72 72 4d 73 67 20 3d 20 73 71 6c 69 74 65 33  ErrMsg = sqlite3
17ba0 44 62 53 74 72 44 75 70 28 64 62 2c 20 22 64 61  DbStrDup(db, "da
17bb0 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 68 61  tabase schema ha
17bc0 73 20 63 68 61 6e 67 65 64 22 29 3b 0a 20 20 20  s changed");.   
17bd0 20 2f 2a 20 49 66 20 74 68 65 20 73 63 68 65 6d   /* If the schem
17be0 61 2d 63 6f 6f 6b 69 65 20 66 72 6f 6d 20 74 68  a-cookie from th
17bf0 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
17c00 6d 61 74 63 68 65 73 20 74 68 65 20 63 6f 6f 6b  matches the cook
17c10 69 65 20 0a 20 20 20 20 2a 2a 20 73 74 6f 72 65  ie .    ** store
17c20 64 20 77 69 74 68 20 74 68 65 20 69 6e 2d 6d 65  d with the in-me
17c30 6d 6f 72 79 20 72 65 70 72 65 73 65 6e 74 61 74  mory representat
17c40 69 6f 6e 20 6f 66 20 74 68 65 20 73 63 68 65 6d  ion of the schem
17c50 61 2c 20 64 6f 0a 20 20 20 20 2a 2a 20 6e 6f 74  a, do.    ** not
17c60 20 72 65 6c 6f 61 64 20 74 68 65 20 73 63 68 65   reload the sche
17c70 6d 61 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61  ma from the data
17c80 62 61 73 65 20 66 69 6c 65 2e 0a 20 20 20 20 2a  base file..    *
17c90 2a 0a 20 20 20 20 2a 2a 20 49 66 20 76 69 72 74  *.    ** If virt
17ca0 75 61 6c 2d 74 61 62 6c 65 73 20 61 72 65 20 69  ual-tables are i
17cb0 6e 20 75 73 65 2c 20 74 68 69 73 20 69 73 20 6e  n use, this is n
17cc0 6f 74 20 6a 75 73 74 20 61 6e 20 6f 70 74 69 6d  ot just an optim
17cd0 69 7a 61 74 69 6f 6e 2e 0a 20 20 20 20 2a 2a 20  ization..    ** 
17ce0 4f 66 74 65 6e 2c 20 76 2d 74 61 62 6c 65 73 20  Often, v-tables 
17cf0 73 74 6f 72 65 20 74 68 65 69 72 20 64 61 74 61  store their data
17d00 20 69 6e 20 6f 74 68 65 72 20 53 51 4c 69 74 65   in other SQLite
17d10 20 74 61 62 6c 65 73 2c 20 77 68 69 63 68 0a 20   tables, which. 
17d20 20 20 20 2a 2a 20 61 72 65 20 71 75 65 72 69 65     ** are querie
17d30 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 78 4e  d from within xN
17d40 65 78 74 28 29 20 61 6e 64 20 6f 74 68 65 72 20  ext() and other 
17d50 76 2d 74 61 62 6c 65 20 6d 65 74 68 6f 64 73 20  v-table methods 
17d60 75 73 69 6e 67 0a 20 20 20 20 2a 2a 20 70 72 65  using.    ** pre
17d70 70 61 72 65 64 20 71 75 65 72 69 65 73 2e 20 49  pared queries. I
17d80 66 20 73 75 63 68 20 61 20 71 75 65 72 79 20 69  f such a query i
17d90 73 20 6f 75 74 2d 6f 66 2d 64 61 74 65 2c 20 77  s out-of-date, w
17da0 65 20 64 6f 20 6e 6f 74 20 77 61 6e 74 20 74 6f  e do not want to
17db0 0a 20 20 20 20 2a 2a 20 64 69 73 63 61 72 64 20  .    ** discard 
17dc0 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68  the database sch
17dd0 65 6d 61 2c 20 61 73 20 74 68 65 20 75 73 65 72  ema, as the user
17de0 20 63 6f 64 65 20 69 6d 70 6c 65 6d 65 6e 74 69   code implementi
17df0 6e 67 20 74 68 65 0a 20 20 20 20 2a 2a 20 76 2d  ng the.    ** v-
17e00 74 61 62 6c 65 20 77 6f 75 6c 64 20 68 61 76 65  table would have
17e10 20 74 6f 20 62 65 20 72 65 61 64 79 20 66 6f 72   to be ready for
17e20 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61   the sqlite3_vta
17e30 62 20 73 74 72 75 63 74 75 72 65 20 69 74 73 65  b structure itse
17e40 6c 66 0a 20 20 20 20 2a 2a 20 74 6f 20 62 65 20  lf.    ** to be 
17e50 69 6e 76 61 6c 69 64 61 74 65 64 20 77 68 65 6e  invalidated when
17e60 65 76 65 72 20 73 71 6c 69 74 65 33 5f 73 74 65  ever sqlite3_ste
17e70 70 28 29 20 69 73 20 63 61 6c 6c 65 64 20 66 72  p() is called fr
17e80 6f 6d 20 77 69 74 68 69 6e 20 0a 20 20 20 20 2a  om within .    *
17e90 2a 20 61 20 76 2d 74 61 62 6c 65 20 6d 65 74 68  * a v-table meth
17ea0 6f 64 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69  od..    */.    i
17eb0 66 28 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e  f( db->aDb[pOp->
17ec0 70 31 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68  p1].pSchema->sch
17ed0 65 6d 61 5f 63 6f 6f 6b 69 65 21 3d 69 4d 65 74  ema_cookie!=iMet
17ee0 61 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  a ){.      sqlit
17ef0 65 33 52 65 73 65 74 49 6e 74 65 72 6e 61 6c 53  e3ResetInternalS
17f00 63 68 65 6d 61 28 64 62 2c 20 70 4f 70 2d 3e 70  chema(db, pOp->p
17f10 31 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70  1);.    }..    p
17f20 2d 3e 65 78 70 69 72 65 64 20 3d 20 31 3b 0a 20  ->expired = 1;. 
17f30 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 53     rc = SQLITE_S
17f40 43 48 45 4d 41 3b 0a 20 20 7d 0a 20 20 62 72 65  CHEMA;.  }.  bre
17f50 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
17f60 3a 20 4f 70 65 6e 52 65 61 64 20 50 31 20 50 32  : OpenRead P1 P2
17f70 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20   P3 P4 P5.**.** 
17f80 4f 70 65 6e 20 61 20 72 65 61 64 2d 6f 6e 6c 79  Open a read-only
17f90 20 63 75 72 73 6f 72 20 66 6f 72 20 74 68 65 20   cursor for the 
17fa0 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 77  database table w
17fb0 68 6f 73 65 20 72 6f 6f 74 20 70 61 67 65 20 69  hose root page i
17fc0 73 0a 2a 2a 20 50 32 20 69 6e 20 61 20 64 61 74  s.** P2 in a dat
17fd0 61 62 61 73 65 20 66 69 6c 65 2e 20 20 54 68 65  abase file.  The
17fe0 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69   database file i
17ff0 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20  s determined by 
18000 50 33 2e 20 0a 2a 2a 20 50 33 3d 3d 30 20 6d 65  P3. .** P3==0 me
18010 61 6e 73 20 74 68 65 20 6d 61 69 6e 20 64 61 74  ans the main dat
18020 61 62 61 73 65 2c 20 50 33 3d 3d 31 20 6d 65 61  abase, P3==1 mea
18030 6e 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20  ns the database 
18040 75 73 65 64 20 66 6f 72 20 0a 2a 2a 20 74 65 6d  used for .** tem
18050 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2c 20 61  porary tables, a
18060 6e 64 20 50 33 3e 31 20 6d 65 61 6e 73 20 75 73  nd P3>1 means us
18070 65 64 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e  ed the correspon
18080 64 69 6e 67 20 61 74 74 61 63 68 65 64 0a 2a 2a  ding attached.**
18090 20 64 61 74 61 62 61 73 65 2e 20 20 47 69 76 65   database.  Give
180a0 20 74 68 65 20 6e 65 77 20 63 75 72 73 6f 72 20   the new cursor 
180b0 61 6e 20 69 64 65 6e 74 69 66 69 65 72 20 6f 66  an identifier of
180c0 20 50 31 2e 20 20 54 68 65 20 50 31 0a 2a 2a 20   P1.  The P1.** 
180d0 76 61 6c 75 65 73 20 6e 65 65 64 20 6e 6f 74 20  values need not 
180e0 62 65 20 63 6f 6e 74 69 67 75 6f 75 73 20 62 75  be contiguous bu
180f0 74 20 61 6c 6c 20 50 31 20 76 61 6c 75 65 73 20  t all P1 values 
18100 73 68 6f 75 6c 64 20 62 65 20 73 6d 61 6c 6c 20  should be small 
18110 69 6e 74 65 67 65 72 73 2e 0a 2a 2a 20 49 74 20  integers..** It 
18120 69 73 20 61 6e 20 65 72 72 6f 72 20 66 6f 72 20  is an error for 
18130 50 31 20 74 6f 20 62 65 20 6e 65 67 61 74 69 76  P1 to be negativ
18140 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 21 3d  e..**.** If P5!=
18150 30 20 74 68 65 6e 20 75 73 65 20 74 68 65 20 63  0 then use the c
18160 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74  ontent of regist
18170 65 72 20 50 32 20 61 73 20 74 68 65 20 72 6f 6f  er P2 as the roo
18180 74 20 70 61 67 65 2c 20 6e 6f 74 0a 2a 2a 20 74  t page, not.** t
18190 68 65 20 76 61 6c 75 65 20 6f 66 20 50 32 20 69  he value of P2 i
181a0 74 73 65 6c 66 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  tself..**.** The
181b0 72 65 20 77 69 6c 6c 20 62 65 20 61 20 72 65 61  re will be a rea
181c0 64 20 6c 6f 63 6b 20 6f 6e 20 74 68 65 20 64 61  d lock on the da
181d0 74 61 62 61 73 65 20 77 68 65 6e 65 76 65 72 20  tabase whenever 
181e0 74 68 65 72 65 20 69 73 20 61 6e 0a 2a 2a 20 6f  there is an.** o
181f0 70 65 6e 20 63 75 72 73 6f 72 2e 20 20 49 66 20  pen cursor.  If 
18200 74 68 65 20 64 61 74 61 62 61 73 65 20 77 61 73  the database was
18210 20 75 6e 6c 6f 63 6b 65 64 20 70 72 69 6f 72 20   unlocked prior 
18220 74 6f 20 74 68 69 73 20 69 6e 73 74 72 75 63 74  to this instruct
18230 69 6f 6e 0a 2a 2a 20 74 68 65 6e 20 61 20 72 65  ion.** then a re
18240 61 64 20 6c 6f 63 6b 20 69 73 20 61 63 71 75 69  ad lock is acqui
18250 72 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 74  red as part of t
18260 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  his instruction.
18270 20 20 41 20 72 65 61 64 0a 2a 2a 20 6c 6f 63 6b    A read.** lock
18280 20 61 6c 6c 6f 77 73 20 6f 74 68 65 72 20 70 72   allows other pr
18290 6f 63 65 73 73 65 73 20 74 6f 20 72 65 61 64 20  ocesses to read 
182a0 74 68 65 20 64 61 74 61 62 61 73 65 20 62 75 74  the database but
182b0 20 70 72 6f 68 69 62 69 74 73 0a 2a 2a 20 61 6e   prohibits.** an
182c0 79 20 6f 74 68 65 72 20 70 72 6f 63 65 73 73 20  y other process 
182d0 66 72 6f 6d 20 6d 6f 64 69 66 79 69 6e 67 20 74  from modifying t
182e0 68 65 20 64 61 74 61 62 61 73 65 2e 20 20 54 68  he database.  Th
182f0 65 20 72 65 61 64 20 6c 6f 63 6b 20 69 73 0a 2a  e read lock is.*
18300 2a 20 72 65 6c 65 61 73 65 64 20 77 68 65 6e 20  * released when 
18310 61 6c 6c 20 63 75 72 73 6f 72 73 20 61 72 65 20  all cursors are 
18320 63 6c 6f 73 65 64 2e 20 20 49 66 20 74 68 69 73  closed.  If this
18330 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 74 74   instruction att
18340 65 6d 70 74 73 0a 2a 2a 20 74 6f 20 67 65 74 20  empts.** to get 
18350 61 20 72 65 61 64 20 6c 6f 63 6b 20 62 75 74 20  a read lock but 
18360 66 61 69 6c 73 2c 20 74 68 65 20 73 63 72 69 70  fails, the scrip
18370 74 20 74 65 72 6d 69 6e 61 74 65 73 20 77 69 74  t terminates wit
18380 68 20 61 6e 0a 2a 2a 20 53 51 4c 49 54 45 5f 42  h an.** SQLITE_B
18390 55 53 59 20 65 72 72 6f 72 20 63 6f 64 65 2e 0a  USY error code..
183a0 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 76 61 6c  **.** The P4 val
183b0 75 65 20 6d 61 79 20 62 65 20 65 69 74 68 65 72  ue may be either
183c0 20 61 6e 20 69 6e 74 65 67 65 72 20 28 50 34 5f   an integer (P4_
183d0 49 4e 54 33 32 29 20 6f 72 20 61 20 70 6f 69 6e  INT32) or a poin
183e0 74 65 72 20 74 6f 0a 2a 2a 20 61 20 4b 65 79 49  ter to.** a KeyI
183f0 6e 66 6f 20 73 74 72 75 63 74 75 72 65 20 28 50  nfo structure (P
18400 34 5f 4b 45 59 49 4e 46 4f 29 2e 20 49 66 20 69  4_KEYINFO). If i
18410 74 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  t is a pointer t
18420 6f 20 61 20 4b 65 79 49 6e 66 6f 20 0a 2a 2a 20  o a KeyInfo .** 
18430 73 74 72 75 63 74 75 72 65 2c 20 74 68 65 6e 20  structure, then 
18440 73 61 69 64 20 73 74 72 75 63 74 75 72 65 20 64  said structure d
18450 65 66 69 6e 65 73 20 74 68 65 20 63 6f 6e 74 65  efines the conte
18460 6e 74 20 61 6e 64 20 63 6f 6c 6c 61 74 69 6e 67  nt and collating
18470 20 0a 2a 2a 20 73 65 71 75 65 6e 63 65 20 6f 66   .** sequence of
18480 20 74 68 65 20 69 6e 64 65 78 20 62 65 69 6e 67   the index being
18490 20 6f 70 65 6e 65 64 2e 20 4f 74 68 65 72 77 69   opened. Otherwi
184a0 73 65 2c 20 69 66 20 50 34 20 69 73 20 61 6e 20  se, if P4 is an 
184b0 69 6e 74 65 67 65 72 20 0a 2a 2a 20 76 61 6c 75  integer .** valu
184c0 65 2c 20 69 74 20 69 73 20 73 65 74 20 74 6f 20  e, it is set to 
184d0 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f  the number of co
184e0 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61 62  lumns in the tab
184f0 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  le..**.** See al
18500 73 6f 20 4f 70 65 6e 57 72 69 74 65 2e 0a 2a 2f  so OpenWrite..*/
18510 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e  ./* Opcode: Open
18520 57 72 69 74 65 20 50 31 20 50 32 20 50 33 20 50  Write P1 P2 P3 P
18530 34 20 50 35 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20  4 P5.**.** Open 
18540 61 20 72 65 61 64 2f 77 72 69 74 65 20 63 75 72  a read/write cur
18550 73 6f 72 20 6e 61 6d 65 64 20 50 31 20 6f 6e 20  sor named P1 on 
18560 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  the table or ind
18570 65 78 20 77 68 6f 73 65 20 72 6f 6f 74 0a 2a 2a  ex whose root.**
18580 20 70 61 67 65 20 69 73 20 50 32 2e 20 20 4f 72   page is P2.  Or
18590 20 69 66 20 50 35 21 3d 30 20 75 73 65 20 74 68   if P5!=0 use th
185a0 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67  e content of reg
185b0 69 73 74 65 72 20 50 32 20 74 6f 20 66 69 6e 64  ister P2 to find
185c0 20 74 68 65 0a 2a 2a 20 72 6f 6f 74 20 70 61 67   the.** root pag
185d0 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20  e..**.** The P4 
185e0 76 61 6c 75 65 20 6d 61 79 20 62 65 20 65 69 74  value may be eit
185f0 68 65 72 20 61 6e 20 69 6e 74 65 67 65 72 20 28  her an integer (
18600 50 34 5f 49 4e 54 33 32 29 20 6f 72 20 61 20 70  P4_INT32) or a p
18610 6f 69 6e 74 65 72 20 74 6f 0a 2a 2a 20 61 20 4b  ointer to.** a K
18620 65 79 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65  eyInfo structure
18630 20 28 50 34 5f 4b 45 59 49 4e 46 4f 29 2e 20 49   (P4_KEYINFO). I
18640 66 20 69 74 20 69 73 20 61 20 70 6f 69 6e 74 65  f it is a pointe
18650 72 20 74 6f 20 61 20 4b 65 79 49 6e 66 6f 20 0a  r to a KeyInfo .
18660 2a 2a 20 73 74 72 75 63 74 75 72 65 2c 20 74 68  ** structure, th
18670 65 6e 20 73 61 69 64 20 73 74 72 75 63 74 75 72  en said structur
18680 65 20 64 65 66 69 6e 65 73 20 74 68 65 20 63 6f  e defines the co
18690 6e 74 65 6e 74 20 61 6e 64 20 63 6f 6c 6c 61 74  ntent and collat
186a0 69 6e 67 20 0a 2a 2a 20 73 65 71 75 65 6e 63 65  ing .** sequence
186b0 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20 62 65   of the index be
186c0 69 6e 67 20 6f 70 65 6e 65 64 2e 20 4f 74 68 65  ing opened. Othe
186d0 72 77 69 73 65 2c 20 69 66 20 50 34 20 69 73 20  rwise, if P4 is 
186e0 61 6e 20 69 6e 74 65 67 65 72 20 0a 2a 2a 20 76  an integer .** v
186f0 61 6c 75 65 2c 20 69 74 20 69 73 20 73 65 74 20  alue, it is set 
18700 74 6f 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  to the number of
18710 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20   columns in the 
18720 74 61 62 6c 65 2c 20 6f 72 20 74 6f 20 74 68 65  table, or to the
18730 0a 2a 2a 20 6c 61 72 67 65 73 74 20 69 6e 64 65  .** largest inde
18740 78 20 6f 66 20 61 6e 79 20 63 6f 6c 75 6d 6e 20  x of any column 
18750 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 68 61  of the table tha
18760 74 20 69 73 20 61 63 74 75 61 6c 6c 79 20 75 73  t is actually us
18770 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69  ed..**.** This i
18780 6e 73 74 72 75 63 74 69 6f 6e 20 77 6f 72 6b 73  nstruction works
18790 20 6a 75 73 74 20 6c 69 6b 65 20 4f 70 65 6e 52   just like OpenR
187a0 65 61 64 20 65 78 63 65 70 74 20 74 68 61 74 20  ead except that 
187b0 69 74 20 6f 70 65 6e 73 20 74 68 65 20 63 75 72  it opens the cur
187c0 73 6f 72 0a 2a 2a 20 69 6e 20 72 65 61 64 2f 77  sor.** in read/w
187d0 72 69 74 65 20 6d 6f 64 65 2e 20 20 46 6f 72 20  rite mode.  For 
187e0 61 20 67 69 76 65 6e 20 74 61 62 6c 65 2c 20 74  a given table, t
187f0 68 65 72 65 20 63 61 6e 20 62 65 20 6f 6e 65 20  here can be one 
18800 6f 72 20 6d 6f 72 65 20 72 65 61 64 2d 6f 6e 6c  or more read-onl
18810 79 0a 2a 2a 20 63 75 72 73 6f 72 73 20 6f 72 20  y.** cursors or 
18820 61 20 73 69 6e 67 6c 65 20 72 65 61 64 2f 77 72  a single read/wr
18830 69 74 65 20 63 75 72 73 6f 72 20 62 75 74 20 6e  ite cursor but n
18840 6f 74 20 62 6f 74 68 2e 0a 2a 2a 0a 2a 2a 20 53  ot both..**.** S
18850 65 65 20 61 6c 73 6f 20 4f 70 65 6e 52 65 61 64  ee also OpenRead
18860 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 70 65  ..*/.case OP_Ope
18870 6e 52 65 61 64 3a 0a 63 61 73 65 20 4f 50 5f 4f  nRead:.case OP_O
18880 70 65 6e 57 72 69 74 65 3a 20 7b 0a 20 20 69 6e  penWrite: {.  in
18890 74 20 6e 46 69 65 6c 64 3b 0a 20 20 4b 65 79 49  t nField;.  KeyI
188a0 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 0a 20  nfo *pKeyInfo;. 
188b0 20 69 6e 74 20 70 32 3b 0a 20 20 69 6e 74 20 69   int p2;.  int i
188c0 44 62 3b 0a 20 20 69 6e 74 20 77 72 46 6c 61 67  Db;.  int wrFlag
188d0 3b 0a 20 20 42 74 72 65 65 20 2a 70 58 3b 0a 20  ;.  Btree *pX;. 
188e0 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 75   VdbeCursor *pCu
188f0 72 3b 0a 20 20 44 62 20 2a 70 44 62 3b 0a 0a 20  r;.  Db *pDb;.. 
18900 20 69 66 28 20 70 2d 3e 65 78 70 69 72 65 64 20   if( p->expired 
18910 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49  ){.    rc = SQLI
18920 54 45 5f 41 42 4f 52 54 3b 0a 20 20 20 20 62 72  TE_ABORT;.    br
18930 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 6e 46 69 65  eak;.  }..  nFie
18940 6c 64 20 3d 20 30 3b 0a 20 20 70 4b 65 79 49 6e  ld = 0;.  pKeyIn
18950 66 6f 20 3d 20 30 3b 0a 20 20 70 32 20 3d 20 70  fo = 0;.  p2 = p
18960 4f 70 2d 3e 70 32 3b 0a 20 20 69 44 62 20 3d 20  Op->p2;.  iDb = 
18970 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72  pOp->p3;.  asser
18980 74 28 20 69 44 62 3e 3d 30 20 26 26 20 69 44 62  t( iDb>=0 && iDb
18990 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73  <db->nDb );.  as
189a0 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d  sert( (p->btreeM
189b0 61 73 6b 20 26 20 28 28 28 79 44 62 4d 61 73 6b  ask & (((yDbMask
189c0 29 31 29 3c 3c 69 44 62 29 29 21 3d 30 20 29 3b  )1)<<iDb))!=0 );
189d0 0a 20 20 70 44 62 20 3d 20 26 64 62 2d 3e 61 44  .  pDb = &db->aD
189e0 62 5b 69 44 62 5d 3b 0a 20 20 70 58 20 3d 20 70  b[iDb];.  pX = p
189f0 44 62 2d 3e 70 42 74 3b 0a 20 20 61 73 73 65 72  Db->pBt;.  asser
18a00 74 28 20 70 58 21 3d 30 20 29 3b 0a 20 20 69 66  t( pX!=0 );.  if
18a10 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
18a20 50 5f 4f 70 65 6e 57 72 69 74 65 20 29 7b 0a 20  P_OpenWrite ){. 
18a30 20 20 20 77 72 46 6c 61 67 20 3d 20 31 3b 0a 20     wrFlag = 1;. 
18a40 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74     assert( sqlit
18a50 65 33 53 63 68 65 6d 61 4d 75 74 65 78 48 65 6c  e3SchemaMutexHel
18a60 64 28 64 62 2c 20 69 44 62 2c 20 30 29 20 29 3b  d(db, iDb, 0) );
18a70 0a 20 20 20 20 69 66 28 20 70 44 62 2d 3e 70 53  .    if( pDb->pS
18a80 63 68 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d  chema->file_form
18a90 61 74 20 3c 20 70 2d 3e 6d 69 6e 57 72 69 74 65  at < p->minWrite
18aa0 46 69 6c 65 46 6f 72 6d 61 74 20 29 7b 0a 20 20  FileFormat ){.  
18ab0 20 20 20 20 70 2d 3e 6d 69 6e 57 72 69 74 65 46      p->minWriteF
18ac0 69 6c 65 46 6f 72 6d 61 74 20 3d 20 70 44 62 2d  ileFormat = pDb-
18ad0 3e 70 53 63 68 65 6d 61 2d 3e 66 69 6c 65 5f 66  >pSchema->file_f
18ae0 6f 72 6d 61 74 3b 0a 20 20 20 20 7d 0a 20 20 7d  ormat;.    }.  }
18af0 65 6c 73 65 7b 0a 20 20 20 20 77 72 46 6c 61 67  else{.    wrFlag
18b00 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20   = 0;.  }.  if( 
18b10 70 4f 70 2d 3e 70 35 20 29 7b 0a 20 20 20 20 61  pOp->p5 ){.    a
18b20 73 73 65 72 74 28 20 70 32 3e 30 20 29 3b 0a 20  ssert( p2>0 );. 
18b30 20 20 20 61 73 73 65 72 74 28 20 70 32 3c 3d 70     assert( p2<=p
18b40 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 70 49  ->nMem );.    pI
18b50 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 32 5d 3b 0a  n2 = &aMem[p2];.
18b60 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
18b70 73 56 61 6c 69 64 28 70 49 6e 32 29 20 29 3b 0a  sValid(pIn2) );.
18b80 20 20 20 20 61 73 73 65 72 74 28 20 28 70 49 6e      assert( (pIn
18b90 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  2->flags & MEM_I
18ba0 6e 74 29 21 3d 30 20 29 3b 0a 20 20 20 20 73 71  nt)!=0 );.    sq
18bb0 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65  lite3VdbeMemInte
18bc0 67 65 72 69 66 79 28 70 49 6e 32 29 3b 0a 20 20  gerify(pIn2);.  
18bd0 20 20 70 32 20 3d 20 28 69 6e 74 29 70 49 6e 32    p2 = (int)pIn2
18be0 2d 3e 75 2e 69 3b 0a 20 20 20 20 2f 2a 20 54 68  ->u.i;.    /* Th
18bf0 65 20 70 32 20 76 61 6c 75 65 20 61 6c 77 61 79  e p2 value alway
18c00 73 20 63 6f 6d 65 73 20 66 72 6f 6d 20 61 20 70  s comes from a p
18c10 72 69 6f 72 20 4f 50 5f 43 72 65 61 74 65 54 61  rior OP_CreateTa
18c20 62 6c 65 20 6f 70 63 6f 64 65 20 61 6e 64 0a 20  ble opcode and. 
18c30 20 20 20 2a 2a 20 74 68 61 74 20 6f 70 63 6f 64     ** that opcod
18c40 65 20 77 69 6c 6c 20 61 6c 77 61 79 73 20 73 65  e will always se
18c50 74 20 74 68 65 20 70 32 20 76 61 6c 75 65 20 74  t the p2 value t
18c60 6f 20 32 20 6f 72 20 6d 6f 72 65 20 6f 72 20 65  o 2 or more or e
18c70 6c 73 65 20 66 61 69 6c 2e 0a 20 20 20 20 2a 2a  lse fail..    **
18c80 20 49 66 20 74 68 65 72 65 20 77 65 72 65 20 61   If there were a
18c90 20 66 61 69 6c 75 72 65 2c 20 74 68 65 20 70 72   failure, the pr
18ca0 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74  epared statement
18cb0 20 77 6f 75 6c 64 20 68 61 76 65 20 68 61 6c 74   would have halt
18cc0 65 64 0a 20 20 20 20 2a 2a 20 62 65 66 6f 72 65  ed.    ** before
18cd0 20 72 65 61 63 68 69 6e 67 20 74 68 69 73 20 69   reaching this i
18ce0 6e 73 74 72 75 63 74 69 6f 6e 2e 20 2a 2f 0a 20  nstruction. */. 
18cf0 20 20 20 69 66 28 20 4e 45 56 45 52 28 70 32 3c     if( NEVER(p2<
18d00 32 29 20 29 20 7b 0a 20 20 20 20 20 20 72 63 20  2) ) {.      rc 
18d10 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54  = SQLITE_CORRUPT
18d20 5f 42 4b 50 54 3b 0a 20 20 20 20 20 20 67 6f 74  _BKPT;.      got
18d30 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
18d40 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  rror;.    }.  }.
18d50 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70    if( pOp->p4typ
18d60 65 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f 20 29 7b  e==P4_KEYINFO ){
18d70 0a 20 20 20 20 70 4b 65 79 49 6e 66 6f 20 3d 20  .    pKeyInfo = 
18d80 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f  pOp->p4.pKeyInfo
18d90 3b 0a 20 20 20 20 70 4b 65 79 49 6e 66 6f 2d 3e  ;.    pKeyInfo->
18da0 65 6e 63 20 3d 20 45 4e 43 28 70 2d 3e 64 62 29  enc = ENC(p->db)
18db0 3b 0a 20 20 20 20 6e 46 69 65 6c 64 20 3d 20 70  ;.    nField = p
18dc0 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64 2b  KeyInfo->nField+
18dd0 31 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70  1;.  }else if( p
18de0 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49  Op->p4type==P4_I
18df0 4e 54 33 32 20 29 7b 0a 20 20 20 20 6e 46 69 65  NT32 ){.    nFie
18e00 6c 64 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a  ld = pOp->p4.i;.
18e10 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 70 4f    }.  assert( pO
18e20 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 70 43  p->p1>=0 );.  pC
18e30 75 72 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72  ur = allocateCur
18e40 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20  sor(p, pOp->p1, 
18e50 6e 46 69 65 6c 64 2c 20 69 44 62 2c 20 31 29 3b  nField, iDb, 1);
18e60 0a 20 20 69 66 28 20 70 43 75 72 3d 3d 30 20 29  .  if( pCur==0 )
18e70 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
18e80 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20  pCur->nullRow = 
18e90 31 3b 0a 20 20 70 43 75 72 2d 3e 69 73 4f 72 64  1;.  pCur->isOrd
18ea0 65 72 65 64 20 3d 20 31 3b 0a 20 20 72 63 20 3d  ered = 1;.  rc =
18eb0 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72   sqlite3BtreeCur
18ec0 73 6f 72 28 70 58 2c 20 70 32 2c 20 77 72 46 6c  sor(pX, p2, wrFl
18ed0 61 67 2c 20 70 4b 65 79 49 6e 66 6f 2c 20 70 43  ag, pKeyInfo, pC
18ee0 75 72 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20  ur->pCursor);.  
18ef0 70 43 75 72 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d  pCur->pKeyInfo =
18f00 20 70 4b 65 79 49 6e 66 6f 3b 0a 0a 20 20 2f 2a   pKeyInfo;..  /*
18f10 20 53 69 6e 63 65 20 69 74 20 70 65 72 66 6f 72   Since it perfor
18f20 6d 73 20 6e 6f 20 6d 65 6d 6f 72 79 20 61 6c 6c  ms no memory all
18f30 6f 63 61 74 69 6f 6e 20 6f 72 20 49 4f 2c 20 74  ocation or IO, t
18f40 68 65 20 6f 6e 6c 79 20 76 61 6c 75 65 73 20 74  he only values t
18f50 68 61 74 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33  hat.  ** sqlite3
18f60 42 74 72 65 65 43 75 72 73 6f 72 28 29 20 6d 61  BtreeCursor() ma
18f70 79 20 72 65 74 75 72 6e 20 61 72 65 20 53 51 4c  y return are SQL
18f80 49 54 45 5f 45 4d 50 54 59 20 61 6e 64 20 53 51  ITE_EMPTY and SQ
18f90 4c 49 54 45 5f 4f 4b 2e 20 0a 20 20 2a 2a 20 53  LITE_OK. .  ** S
18fa0 51 4c 49 54 45 5f 45 4d 50 54 59 20 69 73 20 6f  QLITE_EMPTY is o
18fb0 6e 6c 79 20 72 65 74 75 72 6e 65 64 20 77 68 65  nly returned whe
18fc0 6e 20 61 74 74 65 6d 70 74 69 6e 67 20 74 6f 20  n attempting to 
18fd0 6f 70 65 6e 20 74 68 65 20 74 61 62 6c 65 0a 20  open the table. 
18fe0 20 2a 2a 20 72 6f 6f 74 65 64 20 61 74 20 70 61   ** rooted at pa
18ff0 67 65 20 31 20 6f 66 20 61 20 7a 65 72 6f 2d 62  ge 1 of a zero-b
19000 79 74 65 20 64 61 74 61 62 61 73 65 2e 20 20 2a  yte database.  *
19010 2f 0a 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d  /.  assert( rc==
19020 53 51 4c 49 54 45 5f 45 4d 50 54 59 20 7c 7c 20  SQLITE_EMPTY || 
19030 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b  rc==SQLITE_OK );
19040 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54  .  if( rc==SQLIT
19050 45 5f 45 4d 50 54 59 20 29 7b 0a 20 20 20 20 70  E_EMPTY ){.    p
19060 43 75 72 2d 3e 70 43 75 72 73 6f 72 20 3d 20 30  Cur->pCursor = 0
19070 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54  ;.    rc = SQLIT
19080 45 5f 4f 4b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20  E_OK;.  }..  /* 
19090 53 65 74 20 74 68 65 20 56 64 62 65 43 75 72 73  Set the VdbeCurs
190a0 6f 72 2e 69 73 54 61 62 6c 65 20 61 6e 64 20 69  or.isTable and i
190b0 73 49 6e 64 65 78 20 76 61 72 69 61 62 6c 65 73  sIndex variables
190c0 2e 20 50 72 65 76 69 6f 75 73 20 76 65 72 73 69  . Previous versi
190d0 6f 6e 73 20 6f 66 0a 20 20 2a 2a 20 53 51 4c 69  ons of.  ** SQLi
190e0 74 65 20 75 73 65 64 20 74 6f 20 63 68 65 63 6b  te used to check
190f0 20 69 66 20 74 68 65 20 72 6f 6f 74 2d 70 61 67   if the root-pag
19100 65 20 66 6c 61 67 73 20 77 65 72 65 20 73 61 6e  e flags were san
19110 65 20 61 74 20 74 68 69 73 20 70 6f 69 6e 74 0a  e at this point.
19120 20 20 2a 2a 20 61 6e 64 20 72 65 70 6f 72 74 20    ** and report 
19130 64 61 74 61 62 61 73 65 20 63 6f 72 72 75 70 74  database corrupt
19140 69 6f 6e 20 69 66 20 74 68 65 79 20 77 65 72 65  ion if they were
19150 20 6e 6f 74 2c 20 62 75 74 20 74 68 69 73 20 63   not, but this c
19160 68 65 63 6b 20 68 61 73 0a 20 20 2a 2a 20 73 69  heck has.  ** si
19170 6e 63 65 20 6d 6f 76 65 64 20 69 6e 74 6f 20 74  nce moved into t
19180 68 65 20 62 74 72 65 65 20 6c 61 79 65 72 2e 20  he btree layer. 
19190 20 2a 2f 20 20 0a 20 20 70 43 75 72 2d 3e 69 73   */  .  pCur->is
191a0 54 61 62 6c 65 20 3d 20 70 4f 70 2d 3e 70 34 74  Table = pOp->p4t
191b0 79 70 65 21 3d 50 34 5f 4b 45 59 49 4e 46 4f 3b  ype!=P4_KEYINFO;
191c0 0a 20 20 70 43 75 72 2d 3e 69 73 49 6e 64 65 78  .  pCur->isIndex
191d0 20 3d 20 21 70 43 75 72 2d 3e 69 73 54 61 62 6c   = !pCur->isTabl
191e0 65 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  e;.  break;.}../
191f0 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 45 70  * Opcode: OpenEp
19200 68 65 6d 65 72 61 6c 20 50 31 20 50 32 20 2a 20  hemeral P1 P2 * 
19210 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20  P4 *.**.** Open 
19220 61 20 6e 65 77 20 63 75 72 73 6f 72 20 50 31 20  a new cursor P1 
19230 74 6f 20 61 20 74 72 61 6e 73 69 65 6e 74 20 74  to a transient t
19240 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 63 75 72  able..** The cur
19250 73 6f 72 20 69 73 20 61 6c 77 61 79 73 20 6f 70  sor is always op
19260 65 6e 65 64 20 72 65 61 64 2f 77 72 69 74 65 20  ened read/write 
19270 65 76 65 6e 20 69 66 20 0a 2a 2a 20 74 68 65 20  even if .** the 
19280 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 69 73  main database is
19290 20 72 65 61 64 2d 6f 6e 6c 79 2e 20 20 54 68 65   read-only.  The
192a0 20 65 70 68 65 6d 65 72 61 6c 0a 2a 2a 20 74 61   ephemeral.** ta
192b0 62 6c 65 20 69 73 20 64 65 6c 65 74 65 64 20 61  ble is deleted a
192c0 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 77 68 65  utomatically whe
192d0 6e 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20  n the cursor is 
192e0 63 6c 6f 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 50 32  closed..**.** P2
192f0 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   is the number o
19300 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65  f columns in the
19310 20 65 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65   ephemeral table
19320 2e 0a 2a 2a 20 54 68 65 20 63 75 72 73 6f 72 20  ..** The cursor 
19330 70 6f 69 6e 74 73 20 74 6f 20 61 20 42 54 72 65  points to a BTre
19340 65 20 74 61 62 6c 65 20 69 66 20 50 34 3d 3d 30  e table if P4==0
19350 20 61 6e 64 20 74 6f 20 61 20 42 54 72 65 65 20   and to a BTree 
19360 69 6e 64 65 78 0a 2a 2a 20 69 66 20 50 34 20 69  index.** if P4 i
19370 73 20 6e 6f 74 20 30 2e 20 20 49 66 20 50 34 20  s not 0.  If P4 
19380 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 69 74 20  is not NULL, it 
19390 70 6f 69 6e 74 73 20 74 6f 20 61 20 4b 65 79 49  points to a KeyI
193a0 6e 66 6f 20 73 74 72 75 63 74 75 72 65 0a 2a 2a  nfo structure.**
193b0 20 74 68 61 74 20 64 65 66 69 6e 65 73 20 74 68   that defines th
193c0 65 20 66 6f 72 6d 61 74 20 6f 66 20 6b 65 79 73  e format of keys
193d0 20 69 6e 20 74 68 65 20 69 6e 64 65 78 2e 0a 2a   in the index..*
193e0 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
193f0 20 77 61 73 20 6f 6e 63 65 20 63 61 6c 6c 65 64   was once called
19400 20 4f 70 65 6e 54 65 6d 70 2e 20 20 42 75 74 20   OpenTemp.  But 
19410 74 68 61 74 20 63 72 65 61 74 65 64 0a 2a 2a 20  that created.** 
19420 63 6f 6e 66 75 73 69 6f 6e 20 62 65 63 61 75 73  confusion becaus
19430 65 20 74 68 65 20 74 65 72 6d 20 22 74 65 6d 70  e the term "temp
19440 20 74 61 62 6c 65 22 2c 20 6d 69 67 68 74 20 72   table", might r
19450 65 66 65 72 20 65 69 74 68 65 72 0a 2a 2a 20 74  efer either.** t
19460 6f 20 61 20 54 45 4d 50 20 74 61 62 6c 65 20 61  o a TEMP table a
19470 74 20 74 68 65 20 53 51 4c 20 6c 65 76 65 6c 2c  t the SQL level,
19480 20 6f 72 20 74 6f 20 61 20 74 61 62 6c 65 20 6f   or to a table o
19490 70 65 6e 65 64 20 62 79 0a 2a 2a 20 74 68 69 73  pened by.** this
194a0 20 6f 70 63 6f 64 65 2e 20 20 54 68 65 6e 20 74   opcode.  Then t
194b0 68 69 73 20 6f 70 63 6f 64 65 20 77 61 73 20 63  his opcode was c
194c0 61 6c 6c 20 4f 70 65 6e 56 69 72 74 75 61 6c 2e  all OpenVirtual.
194d0 20 20 42 75 74 0a 2a 2a 20 74 68 61 74 20 63 72    But.** that cr
194e0 65 61 74 65 64 20 63 6f 6e 66 75 73 69 6f 6e 20  eated confusion 
194f0 77 69 74 68 20 74 68 65 20 77 68 6f 6c 65 20 76  with the whole v
19500 69 72 74 75 61 6c 2d 74 61 62 6c 65 20 69 64 65  irtual-table ide
19510 61 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  a..*/./* Opcode:
19520 20 4f 70 65 6e 41 75 74 6f 69 6e 64 65 78 20 50   OpenAutoindex P
19530 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a  1 P2 * P4 *.**.*
19540 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77 6f  * This opcode wo
19550 72 6b 73 20 74 68 65 20 73 61 6d 65 20 61 73 20  rks the same as 
19560 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c  OP_OpenEphemeral
19570 2e 20 20 49 74 20 68 61 73 20 61 0a 2a 2a 20 64  .  It has a.** d
19580 69 66 66 65 72 65 6e 74 20 6e 61 6d 65 20 74 6f  ifferent name to
19590 20 64 69 73 74 69 6e 67 75 69 73 68 20 69 74 73   distinguish its
195a0 20 75 73 65 2e 20 20 54 61 62 6c 65 73 20 63 72   use.  Tables cr
195b0 65 61 74 65 64 20 75 73 69 6e 67 0a 2a 2a 20 62  eated using.** b
195c0 79 20 74 68 69 73 20 6f 70 63 6f 64 65 20 77 69  y this opcode wi
195d0 6c 6c 20 62 65 20 75 73 65 64 20 66 6f 72 20 61  ll be used for a
195e0 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63 72 65  utomatically cre
195f0 61 74 65 64 20 74 72 61 6e 73 69 65 6e 74 0a 2a  ated transient.*
19600 2a 20 69 6e 64 69 63 65 73 20 69 6e 20 6a 6f 69  * indices in joi
19610 6e 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f  ns..*/.case OP_O
19620 70 65 6e 41 75 74 6f 69 6e 64 65 78 3a 20 0a 63  penAutoindex: .c
19630 61 73 65 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d  ase OP_OpenEphem
19640 65 72 61 6c 3a 20 7b 0a 20 20 56 64 62 65 43 75  eral: {.  VdbeCu
19650 72 73 6f 72 20 2a 70 43 78 3b 0a 20 20 73 74 61  rsor *pCx;.  sta
19660 74 69 63 20 63 6f 6e 73 74 20 69 6e 74 20 76 66  tic const int vf
19670 73 46 6c 61 67 73 20 3d 20 0a 20 20 20 20 20 20  sFlags = .      
19680 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 52 45 41 44  SQLITE_OPEN_READ
19690 57 52 49 54 45 20 7c 0a 20 20 20 20 20 20 53 51  WRITE |.      SQ
196a0 4c 49 54 45 5f 4f 50 45 4e 5f 43 52 45 41 54 45  LITE_OPEN_CREATE
196b0 20 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f   |.      SQLITE_
196c0 4f 50 45 4e 5f 45 58 43 4c 55 53 49 56 45 20 7c  OPEN_EXCLUSIVE |
196d0 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50  .      SQLITE_OP
196e0 45 4e 5f 44 45 4c 45 54 45 4f 4e 43 4c 4f 53 45  EN_DELETEONCLOSE
196f0 20 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f   |.      SQLITE_
19700 4f 50 45 4e 5f 54 52 41 4e 53 49 45 4e 54 5f 44  OPEN_TRANSIENT_D
19710 42 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  B;..  assert( pO
19720 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 70 43  p->p1>=0 );.  pC
19730 78 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73  x = allocateCurs
19740 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 70  or(p, pOp->p1, p
19750 4f 70 2d 3e 70 32 2c 20 2d 31 2c 20 31 29 3b 0a  Op->p2, -1, 1);.
19760 20 20 69 66 28 20 70 43 78 3d 3d 30 20 29 20 67    if( pCx==0 ) g
19770 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43  oto no_mem;.  pC
19780 78 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a  x->nullRow = 1;.
19790 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
197a0 72 65 65 4f 70 65 6e 28 30 2c 20 64 62 2c 20 26  reeOpen(0, db, &
197b0 70 43 78 2d 3e 70 42 74 2c 20 0a 20 20 20 20 20  pCx->pBt, .     
197c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
197d0 20 20 20 42 54 52 45 45 5f 4f 4d 49 54 5f 4a 4f     BTREE_OMIT_JO
197e0 55 52 4e 41 4c 20 7c 20 42 54 52 45 45 5f 53 49  URNAL | BTREE_SI
197f0 4e 47 4c 45 20 7c 20 70 4f 70 2d 3e 70 35 2c 20  NGLE | pOp->p5, 
19800 76 66 73 46 6c 61 67 73 29 3b 0a 20 20 69 66 28  vfsFlags);.  if(
19810 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
19820 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  {.    rc = sqlit
19830 65 33 42 74 72 65 65 42 65 67 69 6e 54 72 61 6e  e3BtreeBeginTran
19840 73 28 70 43 78 2d 3e 70 42 74 2c 20 31 29 3b 0a  s(pCx->pBt, 1);.
19850 20 20 7d 0a 20 20 69 66 28 20 72 63 3d 3d 53 51    }.  if( rc==SQ
19860 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 2f  LITE_OK ){.    /
19870 2a 20 49 66 20 61 20 74 72 61 6e 73 69 65 6e 74  * If a transient
19880 20 69 6e 64 65 78 20 69 73 20 72 65 71 75 69 72   index is requir
19890 65 64 2c 20 63 72 65 61 74 65 20 69 74 20 62 79  ed, create it by
198a0 20 63 61 6c 6c 69 6e 67 0a 20 20 20 20 2a 2a 20   calling.    ** 
198b0 73 71 6c 69 74 65 33 42 74 72 65 65 43 72 65 61  sqlite3BtreeCrea
198c0 74 65 54 61 62 6c 65 28 29 20 77 69 74 68 20 74  teTable() with t
198d0 68 65 20 42 54 52 45 45 5f 42 4c 4f 42 4b 45 59  he BTREE_BLOBKEY
198e0 20 66 6c 61 67 20 62 65 66 6f 72 65 0a 20 20 20   flag before.   
198f0 20 2a 2a 20 6f 70 65 6e 69 6e 67 20 69 74 2e 20   ** opening it. 
19900 49 66 20 61 20 74 72 61 6e 73 69 65 6e 74 20 74  If a transient t
19910 61 62 6c 65 20 69 73 20 72 65 71 75 69 72 65 64  able is required
19920 2c 20 6a 75 73 74 20 75 73 65 20 74 68 65 0a 20  , just use the. 
19930 20 20 20 2a 2a 20 61 75 74 6f 6d 61 74 69 63 61     ** automatica
19940 6c 6c 79 20 63 72 65 61 74 65 64 20 74 61 62 6c  lly created tabl
19950 65 20 77 69 74 68 20 72 6f 6f 74 2d 70 61 67 65  e with root-page
19960 20 31 20 28 61 6e 20 42 4c 4f 42 5f 49 4e 54 4b   1 (an BLOB_INTK
19970 45 59 20 74 61 62 6c 65 29 2e 0a 20 20 20 20 2a  EY table)..    *
19980 2f 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70  /.    if( pOp->p
19990 34 2e 70 4b 65 79 49 6e 66 6f 20 29 7b 0a 20 20  4.pKeyInfo ){.  
199a0 20 20 20 20 69 6e 74 20 70 67 6e 6f 3b 0a 20 20      int pgno;.  
199b0 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
199c0 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4b 45 59 49  >p4type==P4_KEYI
199d0 4e 46 4f 20 29 3b 0a 20 20 20 20 20 20 72 63 20  NFO );.      rc 
199e0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 72  = sqlite3BtreeCr
199f0 65 61 74 65 54 61 62 6c 65 28 70 43 78 2d 3e 70  eateTable(pCx->p
19a00 42 74 2c 20 26 70 67 6e 6f 2c 20 42 54 52 45 45  Bt, &pgno, BTREE
19a10 5f 42 4c 4f 42 4b 45 59 29 3b 20 0a 20 20 20 20  _BLOBKEY); .    
19a20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
19a30 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 61  _OK ){.        a
19a40 73 73 65 72 74 28 20 70 67 6e 6f 3d 3d 4d 41 53  ssert( pgno==MAS
19a50 54 45 52 5f 52 4f 4f 54 2b 31 20 29 3b 0a 20 20  TER_ROOT+1 );.  
19a60 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
19a70 65 33 42 74 72 65 65 43 75 72 73 6f 72 28 70 43  e3BtreeCursor(pC
19a80 78 2d 3e 70 42 74 2c 20 70 67 6e 6f 2c 20 31 2c  x->pBt, pgno, 1,
19a90 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   .              
19aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ab0 20 20 28 4b 65 79 49 6e 66 6f 2a 29 70 4f 70 2d    (KeyInfo*)pOp-
19ac0 3e 70 34 2e 7a 2c 20 70 43 78 2d 3e 70 43 75 72  >p4.z, pCx->pCur
19ad0 73 6f 72 29 3b 0a 20 20 20 20 20 20 20 20 70 43  sor);.        pC
19ae0 78 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f  x->pKeyInfo = pO
19af0 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a  p->p4.pKeyInfo;.
19b00 20 20 20 20 20 20 20 20 70 43 78 2d 3e 70 4b 65          pCx->pKe
19b10 79 49 6e 66 6f 2d 3e 65 6e 63 20 3d 20 45 4e 43  yInfo->enc = ENC
19b20 28 70 2d 3e 64 62 29 3b 0a 20 20 20 20 20 20 7d  (p->db);.      }
19b30 0a 20 20 20 20 20 20 70 43 78 2d 3e 69 73 54 61  .      pCx->isTa
19b40 62 6c 65 20 3d 20 30 3b 0a 20 20 20 20 7d 65 6c  ble = 0;.    }el
19b50 73 65 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73  se{.      rc = s
19b60 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f  qlite3BtreeCurso
19b70 72 28 70 43 78 2d 3e 70 42 74 2c 20 4d 41 53 54  r(pCx->pBt, MAST
19b80 45 52 5f 52 4f 4f 54 2c 20 31 2c 20 30 2c 20 70  ER_ROOT, 1, 0, p
19b90 43 78 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20  Cx->pCursor);.  
19ba0 20 20 20 20 70 43 78 2d 3e 69 73 54 61 62 6c 65      pCx->isTable
19bb0 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a   = 1;.    }.  }.
19bc0 20 20 70 43 78 2d 3e 69 73 4f 72 64 65 72 65 64    pCx->isOrdered
19bd0 20 3d 20 28 70 4f 70 2d 3e 70 35 21 3d 42 54 52   = (pOp->p5!=BTR
19be0 45 45 5f 55 4e 4f 52 44 45 52 45 44 29 3b 0a 20  EE_UNORDERED);. 
19bf0 20 70 43 78 2d 3e 69 73 49 6e 64 65 78 20 3d 20   pCx->isIndex = 
19c00 21 70 43 78 2d 3e 69 73 54 61 62 6c 65 3b 0a 20  !pCx->isTable;. 
19c10 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
19c20 63 6f 64 65 3a 20 4f 70 65 6e 50 73 65 75 64 6f  code: OpenPseudo
19c30 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
19c40 0a 2a 2a 20 4f 70 65 6e 20 61 20 6e 65 77 20 63  .** Open a new c
19c50 75 72 73 6f 72 20 74 68 61 74 20 70 6f 69 6e 74  ursor that point
19c60 73 20 74 6f 20 61 20 66 61 6b 65 20 74 61 62 6c  s to a fake tabl
19c70 65 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20  e that contains 
19c80 61 20 73 69 6e 67 6c 65 0a 2a 2a 20 72 6f 77 20  a single.** row 
19c90 6f 66 20 64 61 74 61 2e 20 20 54 68 65 20 63 6f  of data.  The co
19ca0 6e 74 65 6e 74 20 6f 66 20 74 68 61 74 20 6f 6e  ntent of that on
19cb0 65 20 72 6f 77 20 69 6e 20 74 68 65 20 63 6f 6e  e row in the con
19cc0 74 65 6e 74 20 6f 66 20 6d 65 6d 6f 72 79 0a 2a  tent of memory.*
19cd0 2a 20 72 65 67 69 73 74 65 72 20 50 32 2e 20 20  * register P2.  
19ce0 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
19cf0 63 75 72 73 6f 72 20 50 31 20 62 65 63 6f 6d 65  cursor P1 become
19d00 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 74  s an alias for t
19d10 68 65 20 0a 2a 2a 20 4d 45 4d 5f 42 6c 6f 62 20  he .** MEM_Blob 
19d20 63 6f 6e 74 65 6e 74 20 63 6f 6e 74 61 69 6e 65  content containe
19d30 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  d in register P2
19d40 2e 0a 2a 2a 0a 2a 2a 20 41 20 70 73 65 75 64 6f  ..**.** A pseudo
19d50 2d 74 61 62 6c 65 20 63 72 65 61 74 65 64 20 62  -table created b
19d60 79 20 74 68 69 73 20 6f 70 63 6f 64 65 20 69 73  y this opcode is
19d70 20 75 73 65 64 20 74 6f 20 68 6f 6c 64 20 61 20   used to hold a 
19d80 73 69 6e 67 6c 65 0a 2a 2a 20 72 6f 77 20 6f 75  single.** row ou
19d90 74 70 75 74 20 66 72 6f 6d 20 74 68 65 20 73 6f  tput from the so
19da0 72 74 65 72 20 73 6f 20 74 68 61 74 20 74 68 65  rter so that the
19db0 20 72 6f 77 20 63 61 6e 20 62 65 20 64 65 63 6f   row can be deco
19dc0 6d 70 6f 73 65 64 20 69 6e 74 6f 0a 2a 2a 20 69  mposed into.** i
19dd0 6e 64 69 76 69 64 75 61 6c 20 63 6f 6c 75 6d 6e  ndividual column
19de0 73 20 75 73 69 6e 67 20 74 68 65 20 4f 50 5f 43  s using the OP_C
19df0 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 2e 20 20 54  olumn opcode.  T
19e00 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63  he OP_Column opc
19e10 6f 64 65 0a 2a 2a 20 69 73 20 74 68 65 20 6f 6e  ode.** is the on
19e20 6c 79 20 63 75 72 73 6f 72 20 6f 70 63 6f 64 65  ly cursor opcode
19e30 20 74 68 61 74 20 77 6f 72 6b 73 20 77 69 74 68   that works with
19e40 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e   a pseudo-table.
19e50 0a 2a 2a 0a 2a 2a 20 50 33 20 69 73 20 74 68 65  .**.** P3 is the
19e60 20 6e 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64   number of field
19e70 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 73  s in the records
19e80 20 74 68 61 74 20 77 69 6c 6c 20 62 65 20 73 74   that will be st
19e90 6f 72 65 64 20 62 79 0a 2a 2a 20 74 68 65 20 70  ored by.** the p
19ea0 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2f 0a  seudo-table..*/.
19eb0 63 61 73 65 20 4f 50 5f 4f 70 65 6e 50 73 65 75  case OP_OpenPseu
19ec0 64 6f 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73  do: {.  VdbeCurs
19ed0 6f 72 20 2a 70 43 78 3b 0a 0a 20 20 61 73 73 65  or *pCx;..  asse
19ee0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 29  rt( pOp->p1>=0 )
19ef0 3b 0a 20 20 70 43 78 20 3d 20 61 6c 6c 6f 63 61  ;.  pCx = alloca
19f00 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d  teCursor(p, pOp-
19f10 3e 70 31 2c 20 70 4f 70 2d 3e 70 33 2c 20 2d 31  >p1, pOp->p3, -1
19f20 2c 20 30 29 3b 0a 20 20 69 66 28 20 70 43 78 3d  , 0);.  if( pCx=
19f30 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  =0 ) goto no_mem
19f40 3b 0a 20 20 70 43 78 2d 3e 6e 75 6c 6c 52 6f 77  ;.  pCx->nullRow
19f50 20 3d 20 31 3b 0a 20 20 70 43 78 2d 3e 70 73 65   = 1;.  pCx->pse
19f60 75 64 6f 54 61 62 6c 65 52 65 67 20 3d 20 70 4f  udoTableReg = pO
19f70 70 2d 3e 70 32 3b 0a 20 20 70 43 78 2d 3e 69 73  p->p2;.  pCx->is
19f80 54 61 62 6c 65 20 3d 20 31 3b 0a 20 20 70 43 78  Table = 1;.  pCx
19f90 2d 3e 69 73 49 6e 64 65 78 20 3d 20 30 3b 0a 20  ->isIndex = 0;. 
19fa0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
19fb0 63 6f 64 65 3a 20 43 6c 6f 73 65 20 50 31 20 2a  code: Close P1 *
19fc0 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 6c 6f   * * *.**.** Clo
19fd0 73 65 20 61 20 63 75 72 73 6f 72 20 70 72 65 76  se a cursor prev
19fe0 69 6f 75 73 6c 79 20 6f 70 65 6e 65 64 20 61 73  iously opened as
19ff0 20 50 31 2e 20 20 49 66 20 50 31 20 69 73 20 6e   P1.  If P1 is n
1a000 6f 74 0a 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20  ot.** currently 
1a010 6f 70 65 6e 2c 20 74 68 69 73 20 69 6e 73 74 72  open, this instr
1a020 75 63 74 69 6f 6e 20 69 73 20 61 20 6e 6f 2d 6f  uction is a no-o
1a030 70 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6c  p..*/.case OP_Cl
1a040 6f 73 65 3a 20 7b 0a 20 20 61 73 73 65 72 74 28  ose: {.  assert(
1a050 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
1a060 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
1a070 72 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  r );.  sqlite3Vd
1a080 62 65 46 72 65 65 43 75 72 73 6f 72 28 70 2c 20  beFreeCursor(p, 
1a090 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
1a0a0 5d 29 3b 0a 20 20 70 2d 3e 61 70 43 73 72 5b 70  ]);.  p->apCsr[p
1a0b0 4f 70 2d 3e 70 31 5d 20 3d 20 30 3b 0a 20 20 62  Op->p1] = 0;.  b
1a0c0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
1a0d0 64 65 3a 20 53 65 65 6b 47 65 20 50 31 20 50 32  de: SeekGe P1 P2
1a0e0 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 49   P3 P4 *.**.** I
1a0f0 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65  f cursor P1 refe
1a100 72 73 20 74 6f 20 61 6e 20 53 51 4c 20 74 61 62  rs to an SQL tab
1a110 6c 65 20 28 42 2d 54 72 65 65 20 74 68 61 74 20  le (B-Tree that 
1a120 75 73 65 73 20 69 6e 74 65 67 65 72 20 6b 65 79  uses integer key
1a130 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65 20  s), .** use the 
1a140 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
1a150 72 20 50 33 20 61 73 20 74 68 65 20 6b 65 79 2e  r P3 as the key.
1a160 20 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72    If cursor P1 r
1a170 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20  efers .** to an 
1a180 53 51 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e 20  SQL index, then 
1a190 50 33 20 69 73 20 74 68 65 20 66 69 72 73 74 20  P3 is the first 
1a1a0 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20 50  in an array of P
1a1b0 34 20 72 65 67 69 73 74 65 72 73 20 0a 2a 2a 20  4 registers .** 
1a1c0 74 68 61 74 20 61 72 65 20 75 73 65 64 20 61 73  that are used as
1a1d0 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64   an unpacked ind
1a1e0 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52  ex key. .**.** R
1a1f0 65 70 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72  eposition cursor
1a200 20 50 31 20 73 6f 20 74 68 61 74 20 20 69 74 20   P1 so that  it 
1a210 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 73 6d  points to the sm
1a220 61 6c 6c 65 73 74 20 65 6e 74 72 79 20 74 68 61  allest entry tha
1a230 74 20 0a 2a 2a 20 69 73 20 67 72 65 61 74 65 72  t .** is greater
1a240 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74   than or equal t
1a250 6f 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 2e  o the key value.
1a260 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f   If there are no
1a270 20 72 65 63 6f 72 64 73 20 0a 2a 2a 20 67 72 65   records .** gre
1a280 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75  ater than or equ
1a290 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 61 6e  al to the key an
1a2a0 64 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f  d P2 is not zero
1a2b0 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50  , then jump to P
1a2c0 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  2..**.** See als
1a2d0 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75  o: Found, NotFou
1a2e0 6e 64 2c 20 44 69 73 74 69 6e 63 74 2c 20 53 65  nd, Distinct, Se
1a2f0 65 6b 4c 74 2c 20 53 65 65 6b 47 74 2c 20 53 65  ekLt, SeekGt, Se
1a300 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ekLe.*/./* Opcod
1a310 65 3a 20 53 65 65 6b 47 74 20 50 31 20 50 32 20  e: SeekGt P1 P2 
1a320 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 49 66  P3 P4 *.**.** If
1a330 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72   cursor P1 refer
1a340 73 20 74 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c  s to an SQL tabl
1a350 65 20 28 42 2d 54 72 65 65 20 74 68 61 74 20 75  e (B-Tree that u
1a360 73 65 73 20 69 6e 74 65 67 65 72 20 6b 65 79 73  ses integer keys
1a370 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65 20 76  ), .** use the v
1a380 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
1a390 20 50 33 20 61 73 20 61 20 6b 65 79 2e 20 49 66   P3 as a key. If
1a3a0 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72   cursor P1 refer
1a3b0 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20  s .** to an SQL 
1a3c0 69 6e 64 65 78 2c 20 74 68 65 6e 20 50 33 20 69  index, then P3 i
1a3d0 73 20 74 68 65 20 66 69 72 73 74 20 69 6e 20 61  s the first in a
1a3e0 6e 20 61 72 72 61 79 20 6f 66 20 50 34 20 72 65  n array of P4 re
1a3f0 67 69 73 74 65 72 73 20 0a 2a 2a 20 74 68 61 74  gisters .** that
1a400 20 61 72 65 20 75 73 65 64 20 61 73 20 61 6e 20   are used as an 
1a410 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b  unpacked index k
1a420 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73  ey. .**.** Repos
1a430 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50 31 20  ition cursor P1 
1a440 73 6f 20 74 68 61 74 20 20 69 74 20 70 6f 69 6e  so that  it poin
1a450 74 73 20 74 6f 20 74 68 65 20 73 6d 61 6c 6c 65  ts to the smalle
1a460 73 74 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a  st entry that .*
1a470 2a 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61  * is greater tha
1a480 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 2e  n the key value.
1a490 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f   If there are no
1a4a0 20 72 65 63 6f 72 64 73 20 67 72 65 61 74 65 72   records greater
1a4b0 20 74 68 61 6e 20 0a 2a 2a 20 74 68 65 20 6b 65   than .** the ke
1a4c0 79 20 61 6e 64 20 50 32 20 69 73 20 6e 6f 74 20  y and P2 is not 
1a4d0 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20  zero, then jump 
1a4e0 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  to P2..**.** See
1a4f0 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f   also: Found, No
1a500 74 46 6f 75 6e 64 2c 20 44 69 73 74 69 6e 63 74  tFound, Distinct
1a510 2c 20 53 65 65 6b 4c 74 2c 20 53 65 65 6b 47 65  , SeekLt, SeekGe
1a520 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f  , SeekLe.*/./* O
1a530 70 63 6f 64 65 3a 20 53 65 65 6b 4c 74 20 50 31  pcode: SeekLt P1
1a540 20 50 32 20 50 33 20 50 34 20 2a 20 0a 2a 2a 0a   P2 P3 P4 * .**.
1a550 2a 2a 20 49 66 20 63 75 72 73 6f 72 20 50 31 20  ** If cursor P1 
1a560 72 65 66 65 72 73 20 74 6f 20 61 6e 20 53 51 4c  refers to an SQL
1a570 20 74 61 62 6c 65 20 28 42 2d 54 72 65 65 20 74   table (B-Tree t
1a580 68 61 74 20 75 73 65 73 20 69 6e 74 65 67 65 72  hat uses integer
1a590 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20   keys), .** use 
1a5a0 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
1a5b0 69 73 74 65 72 20 50 33 20 61 73 20 61 20 6b 65  ister P3 as a ke
1a5c0 79 2e 20 49 66 20 63 75 72 73 6f 72 20 50 31 20  y. If cursor P1 
1a5d0 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e  refers .** to an
1a5e0 20 53 51 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e   SQL index, then
1a5f0 20 50 33 20 69 73 20 74 68 65 20 66 69 72 73 74   P3 is the first
1a600 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20   in an array of 
1a610 50 34 20 72 65 67 69 73 74 65 72 73 20 0a 2a 2a  P4 registers .**
1a620 20 74 68 61 74 20 61 72 65 20 75 73 65 64 20 61   that are used a
1a630 73 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e  s an unpacked in
1a640 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20  dex key. .**.** 
1a650 52 65 70 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f  Reposition curso
1a660 72 20 50 31 20 73 6f 20 74 68 61 74 20 20 69 74  r P1 so that  it
1a670 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 6c   points to the l
1a680 61 72 67 65 73 74 20 65 6e 74 72 79 20 74 68 61  argest entry tha
1a690 74 20 0a 2a 2a 20 69 73 20 6c 65 73 73 20 74 68  t .** is less th
1a6a0 61 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65  an the key value
1a6b0 2e 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6e  . If there are n
1a6c0 6f 20 72 65 63 6f 72 64 73 20 6c 65 73 73 20 74  o records less t
1a6d0 68 61 6e 20 0a 2a 2a 20 74 68 65 20 6b 65 79 20  han .** the key 
1a6e0 61 6e 64 20 50 32 20 69 73 20 6e 6f 74 20 7a 65  and P2 is not ze
1a6f0 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f  ro, then jump to
1a700 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61   P2..**.** See a
1a710 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46  lso: Found, NotF
1a720 6f 75 6e 64 2c 20 44 69 73 74 69 6e 63 74 2c 20  ound, Distinct, 
1a730 53 65 65 6b 47 74 2c 20 53 65 65 6b 47 65 2c 20  SeekGt, SeekGe, 
1a740 53 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63  SeekLe.*/./* Opc
1a750 6f 64 65 3a 20 53 65 65 6b 4c 65 20 50 31 20 50  ode: SeekLe P1 P
1a760 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20  2 P3 P4 *.**.** 
1a770 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66  If cursor P1 ref
1a780 65 72 73 20 74 6f 20 61 6e 20 53 51 4c 20 74 61  ers to an SQL ta
1a790 62 6c 65 20 28 42 2d 54 72 65 65 20 74 68 61 74  ble (B-Tree that
1a7a0 20 75 73 65 73 20 69 6e 74 65 67 65 72 20 6b 65   uses integer ke
1a7b0 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65  ys), .** use the
1a7c0 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
1a7d0 65 72 20 50 33 20 61 73 20 61 20 6b 65 79 2e 20  er P3 as a key. 
1a7e0 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66  If cursor P1 ref
1a7f0 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51  ers .** to an SQ
1a800 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 50 33  L index, then P3
1a810 20 69 73 20 74 68 65 20 66 69 72 73 74 20 69 6e   is the first in
1a820 20 61 6e 20 61 72 72 61 79 20 6f 66 20 50 34 20   an array of P4 
1a830 72 65 67 69 73 74 65 72 73 20 0a 2a 2a 20 74 68  registers .** th
1a840 61 74 20 61 72 65 20 75 73 65 64 20 61 73 20 61  at are used as a
1a850 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78  n unpacked index
1a860 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70   key. .**.** Rep
1a870 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50  osition cursor P
1a880 31 20 73 6f 20 74 68 61 74 20 69 74 20 70 6f 69  1 so that it poi
1a890 6e 74 73 20 74 6f 20 74 68 65 20 6c 61 72 67 65  nts to the large
1a8a0 73 74 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a  st entry that .*
1a8b0 2a 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 6f  * is less than o
1a8c0 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b  r equal to the k
1a8d0 65 79 20 76 61 6c 75 65 2e 20 49 66 20 74 68 65  ey value. If the
1a8e0 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64  re are no record
1a8f0 73 20 0a 2a 2a 20 6c 65 73 73 20 74 68 61 6e 20  s .** less than 
1a900 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20  or equal to the 
1a910 6b 65 79 20 61 6e 64 20 50 32 20 69 73 20 6e 6f  key and P2 is no
1a920 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d  t zero, then jum
1a930 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53  p to P2..**.** S
1a940 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20  ee also: Found, 
1a950 4e 6f 74 46 6f 75 6e 64 2c 20 44 69 73 74 69 6e  NotFound, Distin
1a960 63 74 2c 20 53 65 65 6b 47 74 2c 20 53 65 65 6b  ct, SeekGt, Seek
1a970 47 65 2c 20 53 65 65 6b 4c 74 0a 2a 2f 0a 63 61  Ge, SeekLt.*/.ca
1a980 73 65 20 4f 50 5f 53 65 65 6b 4c 74 3a 20 20 20  se OP_SeekLt:   
1a990 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
1a9a0 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65  n3 */.case OP_Se
1a9b0 65 6b 4c 65 3a 20 20 20 20 20 20 20 20 20 2f 2a  ekLe:         /*
1a9c0 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61   jump, in3 */.ca
1a9d0 73 65 20 4f 50 5f 53 65 65 6b 47 65 3a 20 20 20  se OP_SeekGe:   
1a9e0 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
1a9f0 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65  n3 */.case OP_Se
1aa00 65 6b 47 74 3a 20 7b 20 20 20 20 20 20 20 2f 2a  ekGt: {       /*
1aa10 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20   jump, in3 */.  
1aa20 69 6e 74 20 72 65 73 3b 0a 20 20 69 6e 74 20 6f  int res;.  int o
1aa30 63 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  c;.  VdbeCursor 
1aa40 2a 70 43 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52  *pC;.  UnpackedR
1aa50 65 63 6f 72 64 20 72 3b 0a 20 20 69 6e 74 20 6e  ecord r;.  int n
1aa60 46 69 65 6c 64 3b 0a 20 20 69 36 34 20 69 4b 65  Field;.  i64 iKe
1aa70 79 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 72  y;      /* The r
1aa80 6f 77 69 64 20 77 65 20 61 72 65 20 74 6f 20 73  owid we are to s
1aa90 65 65 6b 20 74 6f 20 2a 2f 0a 0a 20 20 61 73 73  eek to */..  ass
1aaa0 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
1aab0 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
1aac0 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72  ursor );.  asser
1aad0 74 28 20 70 4f 70 2d 3e 70 32 21 3d 30 20 29 3b  t( pOp->p2!=0 );
1aae0 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
1aaf0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
1ab00 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
1ab10 61 73 73 65 72 74 28 20 70 43 2d 3e 70 73 65 75  assert( pC->pseu
1ab20 64 6f 54 61 62 6c 65 52 65 67 3d 3d 30 20 29 3b  doTableReg==0 );
1ab30 0a 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65  .  assert( OP_Se
1ab40 65 6b 4c 65 20 3d 3d 20 4f 50 5f 53 65 65 6b 4c  ekLe == OP_SeekL
1ab50 74 2b 31 20 29 3b 0a 20 20 61 73 73 65 72 74 28  t+1 );.  assert(
1ab60 20 4f 50 5f 53 65 65 6b 47 65 20 3d 3d 20 4f 50   OP_SeekGe == OP
1ab70 5f 53 65 65 6b 4c 74 2b 32 20 29 3b 0a 20 20 61  _SeekLt+2 );.  a
1ab80 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 47 74  ssert( OP_SeekGt
1ab90 20 3d 3d 20 4f 50 5f 53 65 65 6b 4c 74 2b 33 20   == OP_SeekLt+3 
1aba0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
1abb0 3e 69 73 4f 72 64 65 72 65 64 20 29 3b 0a 20 20  >isOrdered );.  
1abc0 69 66 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21  if( pC->pCursor!
1abd0 3d 30 20 29 7b 0a 20 20 20 20 6f 63 20 3d 20 70  =0 ){.    oc = p
1abe0 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a 20 20 20 20  Op->opcode;.    
1abf0 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b  pC->nullRow = 0;
1ac00 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 69 73 54  .    if( pC->isT
1ac10 61 62 6c 65 20 29 7b 0a 20 20 20 20 20 20 2f 2a  able ){.      /*
1ac20 20 54 68 65 20 69 6e 70 75 74 20 76 61 6c 75 65   The input value
1ac30 20 69 6e 20 50 33 20 6d 69 67 68 74 20 62 65 20   in P3 might be 
1ac40 6f 66 20 61 6e 79 20 74 79 70 65 3a 20 69 6e 74  of any type: int
1ac50 65 67 65 72 2c 20 72 65 61 6c 2c 20 73 74 72 69  eger, real, stri
1ac60 6e 67 2c 0a 20 20 20 20 20 20 2a 2a 20 62 6c 6f  ng,.      ** blo
1ac70 62 2c 20 6f 72 20 4e 55 4c 4c 2e 20 20 42 75 74  b, or NULL.  But
1ac80 20 69 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20   it needs to be 
1ac90 61 6e 20 69 6e 74 65 67 65 72 20 62 65 66 6f 72  an integer befor
1aca0 65 20 77 65 20 63 61 6e 20 64 6f 0a 20 20 20 20  e we can do.    
1acb0 20 20 2a 2a 20 74 68 65 20 73 65 65 6b 2c 20 73    ** the seek, s
1acc0 6f 20 63 6f 76 65 72 74 20 69 74 2e 20 2a 2f 0a  o covert it. */.
1acd0 20 20 20 20 20 20 70 49 6e 33 20 3d 20 26 61 4d        pIn3 = &aM
1ace0 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20  em[pOp->p3];.   
1acf0 20 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41     applyNumericA
1ad00 66 66 69 6e 69 74 79 28 70 49 6e 33 29 3b 0a 20  ffinity(pIn3);. 
1ad10 20 20 20 20 20 69 4b 65 79 20 3d 20 73 71 6c 69       iKey = sqli
1ad20 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28  te3VdbeIntValue(
1ad30 70 49 6e 33 29 3b 0a 20 20 20 20 20 20 70 43 2d  pIn3);.      pC-
1ad40 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20  >rowidIsValid = 
1ad50 30 3b 0a 0a 20 20 20 20 20 20 2f 2a 20 49 66 20  0;..      /* If 
1ad60 74 68 65 20 50 33 20 76 61 6c 75 65 20 63 6f 75  the P3 value cou
1ad70 6c 64 20 6e 6f 74 20 62 65 20 63 6f 6e 76 65 72  ld not be conver
1ad80 74 65 64 20 69 6e 74 6f 20 61 6e 20 69 6e 74 65  ted into an inte
1ad90 67 65 72 20 77 69 74 68 6f 75 74 0a 20 20 20 20  ger without.    
1ada0 20 20 2a 2a 20 6c 6f 73 73 20 6f 66 20 69 6e 66    ** loss of inf
1adb0 6f 72 6d 61 74 69 6f 6e 2c 20 74 68 65 6e 20 73  ormation, then s
1adc0 70 65 63 69 61 6c 20 70 72 6f 63 65 73 73 69 6e  pecial processin
1add0 67 20 69 73 20 72 65 71 75 69 72 65 64 2e 2e 2e  g is required...
1ade0 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 28 70   */.      if( (p
1adf0 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In3->flags & MEM
1ae00 5f 49 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20  _Int)==0 ){.    
1ae10 20 20 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66      if( (pIn3->f
1ae20 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 29  lags & MEM_Real)
1ae30 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20  ==0 ){.         
1ae40 20 2f 2a 20 49 66 20 74 68 65 20 50 33 20 76 61   /* If the P3 va
1ae50 6c 75 65 20 63 61 6e 6e 6f 74 20 62 65 20 63 6f  lue cannot be co
1ae60 6e 76 65 72 74 65 64 20 69 6e 74 6f 20 61 6e 79  nverted into any
1ae70 20 6b 69 6e 64 20 6f 66 20 61 20 6e 75 6d 62 65   kind of a numbe
1ae80 72 2c 0a 20 20 20 20 20 20 20 20 20 20 2a 2a 20  r,.          ** 
1ae90 74 68 65 6e 20 74 68 65 20 73 65 65 6b 20 69 73  then the seek is
1aea0 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65 2c 20 73   not possible, s
1aeb0 6f 20 6a 75 6d 70 20 74 6f 20 50 32 20 2a 2f 0a  o jump to P2 */.
1aec0 20 20 20 20 20 20 20 20 20 20 70 63 20 3d 20 70            pc = p
1aed0 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20  Op->p2 - 1;.    
1aee0 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
1aef0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 2f       }.        /
1af00 2a 20 49 66 20 77 65 20 72 65 61 63 68 20 74 68  * If we reach th
1af10 69 73 20 70 6f 69 6e 74 2c 20 74 68 65 6e 20 74  is point, then t
1af20 68 65 20 50 33 20 76 61 6c 75 65 20 6d 75 73 74  he P3 value must
1af30 20 62 65 20 61 20 66 6c 6f 61 74 69 6e 67 0a 20   be a floating. 
1af40 20 20 20 20 20 20 20 2a 2a 20 70 6f 69 6e 74 20         ** point 
1af50 6e 75 6d 62 65 72 2e 20 2a 2f 0a 20 20 20 20 20  number. */.     
1af60 20 20 20 61 73 73 65 72 74 28 20 28 70 49 6e 33     assert( (pIn3
1af70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65  ->flags & MEM_Re
1af80 61 6c 29 21 3d 30 20 29 3b 0a 0a 20 20 20 20 20  al)!=0 );..     
1af90 20 20 20 69 66 28 20 69 4b 65 79 3d 3d 53 4d 41     if( iKey==SMA
1afa0 4c 4c 45 53 54 5f 49 4e 54 36 34 20 26 26 20 28  LLEST_INT64 && (
1afb0 70 49 6e 33 2d 3e 72 3c 28 64 6f 75 62 6c 65 29  pIn3->r<(double)
1afc0 69 4b 65 79 20 7c 7c 20 70 49 6e 33 2d 3e 72 3e  iKey || pIn3->r>
1afd0 30 29 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  0) ){.          
1afe0 2f 2a 20 54 68 65 20 50 33 20 76 61 6c 75 65 20  /* The P3 value 
1aff0 69 73 20 74 6f 6f 20 6c 61 72 67 65 20 69 6e 20  is too large in 
1b000 6d 61 67 6e 69 74 75 64 65 20 74 6f 20 62 65 20  magnitude to be 
1b010 65 78 70 72 65 73 73 65 64 20 61 73 20 61 6e 0a  expressed as an.
1b020 20 20 20 20 20 20 20 20 20 20 2a 2a 20 69 6e 74            ** int
1b030 65 67 65 72 2e 20 2a 2f 0a 20 20 20 20 20 20 20  eger. */.       
1b040 20 20 20 72 65 73 20 3d 20 31 3b 0a 20 20 20 20     res = 1;.    
1b050 20 20 20 20 20 20 69 66 28 20 70 49 6e 33 2d 3e        if( pIn3->
1b060 72 3c 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20  r<0 ){.         
1b070 20 20 20 69 66 28 20 6f 63 3e 3d 4f 50 5f 53 65     if( oc>=OP_Se
1b080 65 6b 47 65 20 29 7b 20 20 61 73 73 65 72 74 28  ekGe ){  assert(
1b090 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 65 20 7c   oc==OP_SeekGe |
1b0a0 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 74 20  | oc==OP_SeekGt 
1b0b0 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  );.             
1b0c0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
1b0d0 65 65 46 69 72 73 74 28 70 43 2d 3e 70 43 75 72  eeFirst(pC->pCur
1b0e0 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20  sor, &res);.    
1b0f0 20 20 20 20 20 20 20 20 20 20 69 66 28 20 72 63            if( rc
1b100 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f  !=SQLITE_OK ) go
1b110 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
1b120 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 20  error;.         
1b130 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 7d     }.          }
1b140 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20  else{.          
1b150 20 20 69 66 28 20 6f 63 3c 3d 4f 50 5f 53 65 65    if( oc<=OP_See
1b160 6b 4c 65 20 29 7b 20 20 61 73 73 65 72 74 28 20  kLe ){  assert( 
1b170 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 74 20 7c 7c  oc==OP_SeekLt ||
1b180 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 65 20 29   oc==OP_SeekLe )
1b190 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;.              
1b1a0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
1b1b0 65 4c 61 73 74 28 70 43 2d 3e 70 43 75 72 73 6f  eLast(pC->pCurso
1b1c0 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20  r, &res);.      
1b1d0 20 20 20 20 20 20 20 20 69 66 28 20 72 63 21 3d          if( rc!=
1b1e0 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f  SQLITE_OK ) goto
1b1f0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
1b200 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 20 20 20  ror;.           
1b210 20 7d 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20   }.          }. 
1b220 20 20 20 20 20 20 20 20 20 69 66 28 20 72 65 73           if( res
1b230 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20   ){.            
1b240 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
1b250 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20  ;.          }.  
1b260 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
1b270 20 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28         }else if(
1b280 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 74 20 7c   oc==OP_SeekLt |
1b290 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 65 20  | oc==OP_SeekGe 
1b2a0 29 7b 0a 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ){.          /* 
1b2b0 55 73 65 20 74 68 65 20 63 65 69 6c 69 6e 67 28  Use the ceiling(
1b2c0 29 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 63 6f  ) function to co
1b2d0 6e 76 65 72 74 20 72 65 61 6c 2d 3e 69 6e 74 20  nvert real->int 
1b2e0 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 69 66 28  */.          if(
1b2f0 20 70 49 6e 33 2d 3e 72 20 3e 20 28 64 6f 75 62   pIn3->r > (doub
1b300 6c 65 29 69 4b 65 79 20 29 20 69 4b 65 79 2b 2b  le)iKey ) iKey++
1b310 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b  ;.        }else{
1b320 0a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73  .          /* Us
1b330 65 20 74 68 65 20 66 6c 6f 6f 72 28 29 20 66 75  e the floor() fu
1b340 6e 63 74 69 6f 6e 20 74 6f 20 63 6f 6e 76 65 72  nction to conver
1b350 74 20 72 65 61 6c 2d 3e 69 6e 74 20 2a 2f 0a 20  t real->int */. 
1b360 20 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28           assert(
1b370 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 65 20 7c   oc==OP_SeekLe |
1b380 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 74 20  | oc==OP_SeekGt 
1b390 29 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28  );.          if(
1b3a0 20 70 49 6e 33 2d 3e 72 20 3c 20 28 64 6f 75 62   pIn3->r < (doub
1b3b0 6c 65 29 69 4b 65 79 20 29 20 69 4b 65 79 2d 2d  le)iKey ) iKey--
1b3c0 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
1b3d0 20 20 7d 20 0a 20 20 20 20 20 20 72 63 20 3d 20    } .      rc = 
1b3e0 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65  sqlite3BtreeMove
1b3f0 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e 70  toUnpacked(pC->p
1b400 43 75 72 73 6f 72 2c 20 30 2c 20 28 75 36 34 29  Cursor, 0, (u64)
1b410 69 4b 65 79 2c 20 30 2c 20 26 72 65 73 29 3b 0a  iKey, 0, &res);.
1b420 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
1b430 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
1b440 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
1b450 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
1b460 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 72 65    }.      if( re
1b470 73 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  s==0 ){.        
1b480 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64  pC->rowidIsValid
1b490 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 70 43   = 1;.        pC
1b4a0 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 69 4b  ->lastRowid = iK
1b4b0 65 79 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ey;.      }.    
1b4c0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 6e 46 69  }else{.      nFi
1b4d0 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b  eld = pOp->p4.i;
1b4e0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
1b4f0 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49  Op->p4type==P4_I
1b500 4e 54 33 32 20 29 3b 0a 20 20 20 20 20 20 61 73  NT32 );.      as
1b510 73 65 72 74 28 20 6e 46 69 65 6c 64 3e 30 20 29  sert( nField>0 )
1b520 3b 0a 20 20 20 20 20 20 72 2e 70 4b 65 79 49 6e  ;.      r.pKeyIn
1b530 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66  fo = pC->pKeyInf
1b540 6f 3b 0a 20 20 20 20 20 20 72 2e 6e 46 69 65 6c  o;.      r.nFiel
1b550 64 20 3d 20 28 75 31 36 29 6e 46 69 65 6c 64 3b  d = (u16)nField;
1b560 0a 0a 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e  ..      /* The n
1b570 65 78 74 20 6c 69 6e 65 20 6f 66 20 63 6f 64 65  ext line of code
1b580 20 63 6f 6d 70 75 74 65 73 20 61 73 20 66 6f 6c   computes as fol
1b590 6c 6f 77 73 2c 20 6f 6e 6c 79 20 66 61 73 74 65  lows, only faste
1b5a0 72 3a 0a 20 20 20 20 20 20 2a 2a 20 20 20 69 66  r:.      **   if
1b5b0 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 74 20  ( oc==OP_SeekGt 
1b5c0 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 65  || oc==OP_SeekLe
1b5d0 20 29 7b 0a 20 20 20 20 20 20 2a 2a 20 20 20 20   ){.      **    
1b5e0 20 72 2e 66 6c 61 67 73 20 3d 20 55 4e 50 41 43   r.flags = UNPAC
1b5f0 4b 45 44 5f 49 4e 43 52 4b 45 59 3b 0a 20 20 20  KED_INCRKEY;.   
1b600 20 20 20 2a 2a 20 20 20 7d 65 6c 73 65 7b 0a 20     **   }else{. 
1b610 20 20 20 20 20 2a 2a 20 20 20 20 20 72 2e 66 6c       **     r.fl
1b620 61 67 73 20 3d 20 30 3b 0a 20 20 20 20 20 20 2a  ags = 0;.      *
1b630 2a 20 20 20 7d 0a 20 20 20 20 20 20 2a 2f 0a 20  *   }.      */. 
1b640 20 20 20 20 20 72 2e 66 6c 61 67 73 20 3d 20 28       r.flags = (
1b650 75 31 36 29 28 55 4e 50 41 43 4b 45 44 5f 49 4e  u16)(UNPACKED_IN
1b660 43 52 4b 45 59 20 2a 20 28 31 20 26 20 28 6f 63  CRKEY * (1 & (oc
1b670 20 2d 20 4f 50 5f 53 65 65 6b 4c 74 29 29 29 3b   - OP_SeekLt)));
1b680 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6f  .      assert( o
1b690 63 21 3d 4f 50 5f 53 65 65 6b 47 74 20 7c 7c 20  c!=OP_SeekGt || 
1b6a0 72 2e 66 6c 61 67 73 3d 3d 55 4e 50 41 43 4b 45  r.flags==UNPACKE
1b6b0 44 5f 49 4e 43 52 4b 45 59 20 29 3b 0a 20 20 20  D_INCRKEY );.   
1b6c0 20 20 20 61 73 73 65 72 74 28 20 6f 63 21 3d 4f     assert( oc!=O
1b6d0 50 5f 53 65 65 6b 4c 65 20 7c 7c 20 72 2e 66 6c  P_SeekLe || r.fl
1b6e0 61 67 73 3d 3d 55 4e 50 41 43 4b 45 44 5f 49 4e  ags==UNPACKED_IN
1b6f0 43 52 4b 45 59 20 29 3b 0a 20 20 20 20 20 20 61  CRKEY );.      a
1b700 73 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65  ssert( oc!=OP_Se
1b710 65 6b 47 65 20 7c 7c 20 72 2e 66 6c 61 67 73 3d  ekGe || r.flags=
1b720 3d 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  =0 );.      asse
1b730 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 4c  rt( oc!=OP_SeekL
1b740 74 20 7c 7c 20 72 2e 66 6c 61 67 73 3d 3d 30 20  t || r.flags==0 
1b750 29 3b 0a 0a 20 20 20 20 20 20 72 2e 61 4d 65 6d  );..      r.aMem
1b760 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
1b770 5d 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  ];.#ifdef SQLITE
1b780 5f 44 45 42 55 47 0a 20 20 20 20 20 20 7b 20 69  _DEBUG.      { i
1b790 6e 74 20 69 3b 20 66 6f 72 28 69 3d 30 3b 20 69  nt i; for(i=0; i
1b7a0 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b 29 20  <r.nField; i++) 
1b7b0 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
1b7c0 69 64 28 26 72 2e 61 4d 65 6d 5b 69 5d 29 20 29  id(&r.aMem[i]) )
1b7d0 3b 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 20  ; }.#endif.     
1b7e0 20 45 78 70 61 6e 64 42 6c 6f 62 28 72 2e 61 4d   ExpandBlob(r.aM
1b7f0 65 6d 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  em);.      rc = 
1b800 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65  sqlite3BtreeMove
1b810 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e 70  toUnpacked(pC->p
1b820 43 75 72 73 6f 72 2c 20 26 72 2c 20 30 2c 20 30  Cursor, &r, 0, 0
1b830 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20 69  , &res);.      i
1b840 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
1b850 20 29 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f   ){.        goto
1b860 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
1b870 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  ror;.      }.   
1b880 20 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61     pC->rowidIsVa
1b890 6c 69 64 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20  lid = 0;.    }. 
1b8a0 20 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d     pC->deferredM
1b8b0 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20 20 70  oveto = 0;.    p
1b8c0 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
1b8d0 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 23 69   CACHE_STALE;.#i
1b8e0 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54  fdef SQLITE_TEST
1b8f0 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 65 61  .    sqlite3_sea
1b900 72 63 68 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e  rch_count++;.#en
1b910 64 69 66 0a 20 20 20 20 69 66 28 20 6f 63 3e 3d  dif.    if( oc>=
1b920 4f 50 5f 53 65 65 6b 47 65 20 29 7b 20 20 61 73  OP_SeekGe ){  as
1b930 73 65 72 74 28 20 6f 63 3d 3d 4f 50 5f 53 65 65  sert( oc==OP_See
1b940 6b 47 65 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65  kGe || oc==OP_Se
1b950 65 6b 47 74 20 29 3b 0a 20 20 20 20 20 20 69 66  ekGt );.      if
1b960 28 20 72 65 73 3c 30 20 7c 7c 20 28 72 65 73 3d  ( res<0 || (res=
1b970 3d 30 20 26 26 20 6f 63 3d 3d 4f 50 5f 53 65 65  =0 && oc==OP_See
1b980 6b 47 74 29 20 29 7b 0a 20 20 20 20 20 20 20 20  kGt) ){.        
1b990 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
1b9a0 65 4e 65 78 74 28 70 43 2d 3e 70 43 75 72 73 6f  eNext(pC->pCurso
1b9b0 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20  r, &res);.      
1b9c0 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
1b9d0 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74  _OK ) goto abort
1b9e0 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
1b9f0 20 20 20 20 20 20 20 70 43 2d 3e 72 6f 77 69 64         pC->rowid
1ba00 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 20  IsValid = 0;.   
1ba10 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
1ba20 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 20 20 20    res = 0;.     
1ba30 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20   }.    }else{.  
1ba40 20 20 20 20 61 73 73 65 72 74 28 20 6f 63 3d 3d      assert( oc==
1ba50 4f 50 5f 53 65 65 6b 4c 74 20 7c 7c 20 6f 63 3d  OP_SeekLt || oc=
1ba60 3d 4f 50 5f 53 65 65 6b 4c 65 20 29 3b 0a 20 20  =OP_SeekLe );.  
1ba70 20 20 20 20 69 66 28 20 72 65 73 3e 30 20 7c 7c      if( res>0 ||
1ba80 20 28 72 65 73 3d 3d 30 20 26 26 20 6f 63 3d 3d   (res==0 && oc==
1ba90 4f 50 5f 53 65 65 6b 4c 74 29 20 29 7b 0a 20 20  OP_SeekLt) ){.  
1baa0 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
1bab0 65 33 42 74 72 65 65 50 72 65 76 69 6f 75 73 28  e3BtreePrevious(
1bac0 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72 65  pC->pCursor, &re
1bad0 73 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  s);.        if( 
1bae0 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20  rc!=SQLITE_OK ) 
1baf0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
1bb00 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20  o_error;.       
1bb10 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69   pC->rowidIsVali
1bb20 64 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 65 6c  d = 0;.      }el
1bb30 73 65 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 72  se{.        /* r
1bb40 65 73 20 6d 69 67 68 74 20 62 65 20 6e 65 67 61  es might be nega
1bb50 74 69 76 65 20 62 65 63 61 75 73 65 20 74 68 65  tive because the
1bb60 20 74 61 62 6c 65 20 69 73 20 65 6d 70 74 79 2e   table is empty.
1bb70 20 20 43 68 65 63 6b 20 74 6f 0a 20 20 20 20 20    Check to.     
1bb80 20 20 20 2a 2a 20 73 65 65 20 69 66 20 74 68 69     ** see if thi
1bb90 73 20 69 73 20 74 68 65 20 63 61 73 65 2e 0a 20  s is the case.. 
1bba0 20 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20         */.      
1bbb0 20 20 72 65 73 20 3d 20 73 71 6c 69 74 65 33 42    res = sqlite3B
1bbc0 74 72 65 65 45 6f 66 28 70 43 2d 3e 70 43 75 72  treeEof(pC->pCur
1bbd0 73 6f 72 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  sor);.      }.  
1bbe0 20 20 7d 0a 20 20 20 20 61 73 73 65 72 74 28 20    }.    assert( 
1bbf0 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 20  pOp->p2>0 );.   
1bc00 20 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20   if( res ){.    
1bc10 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
1bc20 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73   1;.    }.  }els
1bc30 65 7b 0a 20 20 20 20 2f 2a 20 54 68 69 73 20 68  e{.    /* This h
1bc40 61 70 70 65 6e 73 20 77 68 65 6e 20 61 74 74 65  appens when atte
1bc50 6d 70 74 69 6e 67 20 74 6f 20 6f 70 65 6e 20 74  mpting to open t
1bc60 68 65 20 73 71 6c 69 74 65 33 5f 6d 61 73 74 65  he sqlite3_maste
1bc70 72 20 74 61 62 6c 65 0a 20 20 20 20 2a 2a 20 66  r table.    ** f
1bc80 6f 72 20 72 65 61 64 20 61 63 63 65 73 73 20 72  or read access r
1bc90 65 74 75 72 6e 73 20 53 51 4c 49 54 45 5f 45 4d  eturns SQLITE_EM
1bca0 50 54 59 2e 20 49 6e 20 74 68 69 73 20 63 61 73  PTY. In this cas
1bcb0 65 20 61 6c 77 61 79 73 0a 20 20 20 20 2a 2a 20  e always.    ** 
1bcc0 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 20 28 73  take the jump (s
1bcd0 69 6e 63 65 20 74 68 65 72 65 20 61 72 65 20 6e  ince there are n
1bce0 6f 20 72 65 63 6f 72 64 73 20 69 6e 20 74 68 65  o records in the
1bcf0 20 74 61 62 6c 65 29 2e 0a 20 20 20 20 2a 2f 0a   table)..    */.
1bd00 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
1bd10 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61   - 1;.  }.  brea
1bd20 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
1bd30 20 53 65 65 6b 20 50 31 20 50 32 20 2a 20 2a 20   Seek P1 P2 * * 
1bd40 2a 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 6e  *.**.** P1 is an
1bd50 20 6f 70 65 6e 20 74 61 62 6c 65 20 63 75 72 73   open table curs
1bd60 6f 72 20 61 6e 64 20 50 32 20 69 73 20 61 20 72  or and P2 is a r
1bd70 6f 77 69 64 20 69 6e 74 65 67 65 72 2e 20 20 41  owid integer.  A
1bd80 72 72 61 6e 67 65 0a 2a 2a 20 66 6f 72 20 50 31  rrange.** for P1
1bd90 20 74 6f 20 6d 6f 76 65 20 73 6f 20 74 68 61 74   to move so that
1bda0 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68   it points to th
1bdb0 65 20 72 6f 77 69 64 20 67 69 76 65 6e 20 62 79  e rowid given by
1bdc0 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20   P2..**.** This 
1bdd0 69 73 20 61 63 74 75 61 6c 6c 79 20 61 20 64 65  is actually a de
1bde0 66 65 72 72 65 64 20 73 65 65 6b 2e 20 20 4e 6f  ferred seek.  No
1bdf0 74 68 69 6e 67 20 61 63 74 75 61 6c 6c 79 20 68  thing actually h
1be00 61 70 70 65 6e 73 20 75 6e 74 69 6c 0a 2a 2a 20  appens until.** 
1be10 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 75 73  the cursor is us
1be20 65 64 20 74 6f 20 72 65 61 64 20 61 20 72 65 63  ed to read a rec
1be30 6f 72 64 2e 20 20 54 68 61 74 20 77 61 79 2c 20  ord.  That way, 
1be40 69 66 20 6e 6f 20 72 65 61 64 73 0a 2a 2a 20 6f  if no reads.** o
1be50 63 63 75 72 2c 20 6e 6f 20 75 6e 6e 65 63 65 73  ccur, no unneces
1be60 73 61 72 79 20 49 2f 4f 20 68 61 70 70 65 6e 73  sary I/O happens
1be70 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65  ..*/.case OP_See
1be80 6b 3a 20 7b 20 20 20 20 2f 2a 20 69 6e 32 20 2a  k: {    /* in2 *
1be90 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  /.  VdbeCursor *
1bea0 70 43 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  pC;..  assert( p
1beb0 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
1bec0 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
1bed0 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
1bee0 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
1bef0 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
1bf00 20 20 69 66 28 20 41 4c 57 41 59 53 28 70 43 2d    if( ALWAYS(pC-
1bf10 3e 70 43 75 72 73 6f 72 21 3d 30 29 20 29 7b 0a  >pCursor!=0) ){.
1bf20 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
1bf30 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 20 20 70  isTable );.    p
1bf40 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a  C->nullRow = 0;.
1bf50 20 20 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d      pIn2 = &aMem
1bf60 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 70  [pOp->p2];.    p
1bf70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 20  C->movetoTarget 
1bf80 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74  = sqlite3VdbeInt
1bf90 56 61 6c 75 65 28 70 49 6e 32 29 3b 0a 20 20 20  Value(pIn2);.   
1bfa0 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69   pC->rowidIsVali
1bfb0 64 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e 64  d = 0;.    pC->d
1bfc0 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20  eferredMoveto = 
1bfd0 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  1;.  }.  break;.
1bfe0 7d 0a 20 20 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  }.  ../* Opcode:
1bff0 20 46 6f 75 6e 64 20 50 31 20 50 32 20 50 33 20   Found P1 P2 P3 
1c000 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34  P4 *.**.** If P4
1c010 3d 3d 30 20 74 68 65 6e 20 72 65 67 69 73 74 65  ==0 then registe
1c020 72 20 50 33 20 68 6f 6c 64 73 20 61 20 62 6c 6f  r P3 holds a blo
1c030 62 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79  b constructed by
1c040 20 4d 61 6b 65 52 65 63 6f 72 64 2e 20 20 49 66   MakeRecord.  If
1c050 0a 2a 2a 20 50 34 3e 30 20 74 68 65 6e 20 72 65  .** P4>0 then re
1c060 67 69 73 74 65 72 20 50 33 20 69 73 20 74 68 65  gister P3 is the
1c070 20 66 69 72 73 74 20 6f 66 20 50 34 20 72 65 67   first of P4 reg
1c080 69 73 74 65 72 73 20 74 68 61 74 20 66 6f 72 6d  isters that form
1c090 20 61 6e 20 75 6e 70 61 63 6b 65 64 0a 2a 2a 20   an unpacked.** 
1c0a0 72 65 63 6f 72 64 2e 0a 2a 2a 0a 2a 2a 20 43 75  record..**.** Cu
1c0b0 72 73 6f 72 20 50 31 20 69 73 20 6f 6e 20 61 6e  rsor P1 is on an
1c0c0 20 69 6e 64 65 78 20 62 74 72 65 65 2e 20 20 49   index btree.  I
1c0d0 66 20 74 68 65 20 72 65 63 6f 72 64 20 69 64 65  f the record ide
1c0e0 6e 74 69 66 69 65 64 20 62 79 20 50 33 20 61 6e  ntified by P3 an
1c0f0 64 20 50 34 0a 2a 2a 20 69 73 20 61 20 70 72 65  d P4.** is a pre
1c100 66 69 78 20 6f 66 20 61 6e 79 20 65 6e 74 72 79  fix of any entry
1c110 20 69 6e 20 50 31 20 74 68 65 6e 20 61 20 6a 75   in P1 then a ju
1c120 6d 70 20 69 73 20 6d 61 64 65 20 74 6f 20 50 32  mp is made to P2
1c130 20 61 6e 64 0a 2a 2a 20 50 31 20 69 73 20 6c 65   and.** P1 is le
1c140 66 74 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74  ft pointing at t
1c150 68 65 20 6d 61 74 63 68 69 6e 67 20 65 6e 74 72  he matching entr
1c160 79 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  y..*/./* Opcode:
1c170 20 4e 6f 74 46 6f 75 6e 64 20 50 31 20 50 32 20   NotFound P1 P2 
1c180 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 49 66  P3 P4 *.**.** If
1c190 20 50 34 3d 3d 30 20 74 68 65 6e 20 72 65 67 69   P4==0 then regi
1c1a0 73 74 65 72 20 50 33 20 68 6f 6c 64 73 20 61 20  ster P3 holds a 
1c1b0 62 6c 6f 62 20 63 6f 6e 73 74 72 75 63 74 65 64  blob constructed
1c1c0 20 62 79 20 4d 61 6b 65 52 65 63 6f 72 64 2e 20   by MakeRecord. 
1c1d0 20 49 66 0a 2a 2a 20 50 34 3e 30 20 74 68 65 6e   If.** P4>0 then
1c1e0 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20   register P3 is 
1c1f0 74 68 65 20 66 69 72 73 74 20 6f 66 20 50 34 20  the first of P4 
1c200 72 65 67 69 73 74 65 72 73 20 74 68 61 74 20 66  registers that f
1c210 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 0a  orm an unpacked.
1c220 2a 2a 20 72 65 63 6f 72 64 2e 0a 2a 2a 20 0a 2a  ** record..** .*
1c230 2a 20 43 75 72 73 6f 72 20 50 31 20 69 73 20 6f  * Cursor P1 is o
1c240 6e 20 61 6e 20 69 6e 64 65 78 20 62 74 72 65 65  n an index btree
1c250 2e 20 20 49 66 20 74 68 65 20 72 65 63 6f 72 64  .  If the record
1c260 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 50   identified by P
1c270 33 20 61 6e 64 20 50 34 0a 2a 2a 20 69 73 20 6e  3 and P4.** is n
1c280 6f 74 20 74 68 65 20 70 72 65 66 69 78 20 6f 66  ot the prefix of
1c290 20 61 6e 79 20 65 6e 74 72 79 20 69 6e 20 50 31   any entry in P1
1c2a0 20 74 68 65 6e 20 61 20 6a 75 6d 70 20 69 73 20   then a jump is 
1c2b0 6d 61 64 65 20 74 6f 20 50 32 2e 20 20 49 66 20  made to P2.  If 
1c2c0 50 31 20 0a 2a 2a 20 64 6f 65 73 20 63 6f 6e 74  P1 .** does cont
1c2d0 61 69 6e 20 61 6e 20 65 6e 74 72 79 20 77 68 6f  ain an entry who
1c2e0 73 65 20 70 72 65 66 69 78 20 6d 61 74 63 68 65  se prefix matche
1c2f0 73 20 74 68 65 20 50 33 2f 50 34 20 72 65 63 6f  s the P3/P4 reco
1c300 72 64 20 74 68 65 6e 20 63 6f 6e 74 72 6f 6c 0a  rd then control.
1c310 2a 2a 20 66 61 6c 6c 73 20 74 68 72 6f 75 67 68  ** falls through
1c320 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73   to the next ins
1c330 74 72 75 63 74 69 6f 6e 20 61 6e 64 20 50 31 20  truction and P1 
1c340 69 73 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67  is left pointing
1c350 20 61 74 20 74 68 65 0a 2a 2a 20 6d 61 74 63 68   at the.** match
1c360 69 6e 67 20 65 6e 74 72 79 2e 0a 2a 2a 0a 2a 2a  ing entry..**.**
1c370 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64   See also: Found
1c380 2c 20 4e 6f 74 45 78 69 73 74 73 2c 20 49 73 55  , NotExists, IsU
1c390 6e 69 71 75 65 0a 2a 2f 0a 63 61 73 65 20 4f 50  nique.*/.case OP
1c3a0 5f 4e 6f 74 46 6f 75 6e 64 3a 20 20 20 20 20 20  _NotFound:      
1c3b0 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f   /* jump, in3 */
1c3c0 0a 63 61 73 65 20 4f 50 5f 46 6f 75 6e 64 3a 20  .case OP_Found: 
1c3d0 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70  {        /* jump
1c3e0 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 61  , in3 */.  int a
1c3f0 6c 72 65 61 64 79 45 78 69 73 74 73 3b 0a 20 20  lreadyExists;.  
1c400 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
1c410 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 55 6e 70    int res;.  Unp
1c420 61 63 6b 65 64 52 65 63 6f 72 64 20 2a 70 49 64  ackedRecord *pId
1c430 78 4b 65 79 3b 0a 20 20 55 6e 70 61 63 6b 65 64  xKey;.  Unpacked
1c440 52 65 63 6f 72 64 20 72 3b 0a 20 20 63 68 61 72  Record r;.  char
1c450 20 61 54 65 6d 70 52 65 63 5b 52 4f 55 4e 44 38   aTempRec[ROUND8
1c460 28 73 69 7a 65 6f 66 28 55 6e 70 61 63 6b 65 64  (sizeof(Unpacked
1c470 52 65 63 6f 72 64 29 29 20 2b 20 73 69 7a 65 6f  Record)) + sizeo
1c480 66 28 4d 65 6d 29 2a 33 20 2b 20 37 5d 3b 0a 0a  f(Mem)*3 + 7];..
1c490 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45  #ifdef SQLITE_TE
1c4a0 53 54 0a 20 20 73 71 6c 69 74 65 33 5f 66 6f 75  ST.  sqlite3_fou
1c4b0 6e 64 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64  nd_count++;.#end
1c4c0 69 66 0a 0a 20 20 61 6c 72 65 61 64 79 45 78 69  if..  alreadyExi
1c4d0 73 74 73 20 3d 20 30 3b 0a 20 20 61 73 73 65 72  sts = 0;.  asser
1c4e0 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
1c4f0 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
1c500 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28  sor );.  assert(
1c510 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
1c520 5f 49 4e 54 33 32 20 29 3b 0a 20 20 70 43 20 3d  _INT32 );.  pC =
1c530 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
1c540 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
1c550 21 3d 30 20 29 3b 0a 20 20 70 49 6e 33 20 3d 20  !=0 );.  pIn3 = 
1c560 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
1c570 20 20 69 66 28 20 41 4c 57 41 59 53 28 70 43 2d    if( ALWAYS(pC-
1c580 3e 70 43 75 72 73 6f 72 21 3d 30 29 20 29 7b 0a  >pCursor!=0) ){.
1c590 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d  .    assert( pC-
1c5a0 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29 3b 0a 20  >isTable==0 );. 
1c5b0 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 2e 69     if( pOp->p4.i
1c5c0 3e 30 20 29 7b 0a 20 20 20 20 20 20 72 2e 70 4b  >0 ){.      r.pK
1c5d0 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65  eyInfo = pC->pKe
1c5e0 79 49 6e 66 6f 3b 0a 20 20 20 20 20 20 72 2e 6e  yInfo;.      r.n
1c5f0 46 69 65 6c 64 20 3d 20 28 75 31 36 29 70 4f 70  Field = (u16)pOp
1c600 2d 3e 70 34 2e 69 3b 0a 20 20 20 20 20 20 72 2e  ->p4.i;.      r.
1c610 61 4d 65 6d 20 3d 20 70 49 6e 33 3b 0a 23 69 66  aMem = pIn3;.#if
1c620 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
1c630 0a 20 20 20 20 20 20 7b 20 69 6e 74 20 69 3b 20  .      { int i; 
1c640 66 6f 72 28 69 3d 30 3b 20 69 3c 72 2e 6e 46 69  for(i=0; i<r.nFi
1c650 65 6c 64 3b 20 69 2b 2b 29 20 61 73 73 65 72 74  eld; i++) assert
1c660 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 72 2e  ( memIsValid(&r.
1c670 61 4d 65 6d 5b 69 5d 29 20 29 3b 20 7d 0a 23 65  aMem[i]) ); }.#e
1c680 6e 64 69 66 0a 20 20 20 20 20 20 72 2e 66 6c 61  ndif.      r.fla
1c690 67 73 20 3d 20 55 4e 50 41 43 4b 45 44 5f 50 52  gs = UNPACKED_PR
1c6a0 45 46 49 58 5f 4d 41 54 43 48 3b 0a 20 20 20 20  EFIX_MATCH;.    
1c6b0 20 20 70 49 64 78 4b 65 79 20 3d 20 26 72 3b 0a    pIdxKey = &r;.
1c6c0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
1c6d0 20 61 73 73 65 72 74 28 20 70 49 6e 33 2d 3e 66   assert( pIn3->f
1c6e0 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20  lags & MEM_Blob 
1c6f0 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
1c700 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20   (pIn3->flags & 
1c710 4d 45 4d 5f 5a 65 72 6f 29 3d 3d 30 20 29 3b 20  MEM_Zero)==0 ); 
1c720 20 2f 2a 20 7a 65 72 6f 62 6c 6f 62 73 20 61 6c   /* zeroblobs al
1c730 72 65 61 64 79 20 65 78 70 61 6e 64 65 64 20 2a  ready expanded *
1c740 2f 0a 20 20 20 20 20 20 70 49 64 78 4b 65 79 20  /.      pIdxKey 
1c750 3d 20 73 71 6c 69 74 65 33 56 64 62 65 52 65 63  = sqlite3VdbeRec
1c760 6f 72 64 55 6e 70 61 63 6b 28 70 43 2d 3e 70 4b  ordUnpack(pC->pK
1c770 65 79 49 6e 66 6f 2c 20 70 49 6e 33 2d 3e 6e 2c  eyInfo, pIn3->n,
1c780 20 70 49 6e 33 2d 3e 7a 2c 0a 20 20 20 20 20 20   pIn3->z,.      
1c790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c7a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c7b0 20 20 61 54 65 6d 70 52 65 63 2c 20 73 69 7a 65    aTempRec, size
1c7c0 6f 66 28 61 54 65 6d 70 52 65 63 29 29 3b 0a 20  of(aTempRec));. 
1c7d0 20 20 20 20 20 69 66 28 20 70 49 64 78 4b 65 79       if( pIdxKey
1c7e0 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 67  ==0 ){.        g
1c7f0 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20  oto no_mem;.    
1c800 20 20 7d 0a 20 20 20 20 20 20 70 49 64 78 4b 65    }.      pIdxKe
1c810 79 2d 3e 66 6c 61 67 73 20 7c 3d 20 55 4e 50 41  y->flags |= UNPA
1c820 43 4b 45 44 5f 50 52 45 46 49 58 5f 4d 41 54 43  CKED_PREFIX_MATC
1c830 48 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72 63 20  H;.    }.    rc 
1c840 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f  = sqlite3BtreeMo
1c850 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d  vetoUnpacked(pC-
1c860 3e 70 43 75 72 73 6f 72 2c 20 70 49 64 78 4b 65  >pCursor, pIdxKe
1c870 79 2c 20 30 2c 20 30 2c 20 26 72 65 73 29 3b 0a  y, 0, 0, &res);.
1c880 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 2e      if( pOp->p4.
1c890 69 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 73 71  i==0 ){.      sq
1c8a0 6c 69 74 65 33 56 64 62 65 44 65 6c 65 74 65 55  lite3VdbeDeleteU
1c8b0 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 28 70 49  npackedRecord(pI
1c8c0 64 78 4b 65 79 29 3b 0a 20 20 20 20 7d 0a 20 20  dxKey);.    }.  
1c8d0 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
1c8e0 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 62 72 65  _OK ){.      bre
1c8f0 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 61 6c  ak;.    }.    al
1c900 72 65 61 64 79 45 78 69 73 74 73 20 3d 20 28 72  readyExists = (r
1c910 65 73 3d 3d 30 29 3b 0a 20 20 20 20 70 43 2d 3e  es==0);.    pC->
1c920 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d  deferredMoveto =
1c930 20 30 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68   0;.    pC->cach
1c940 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
1c950 53 54 41 4c 45 3b 0a 20 20 7d 0a 20 20 69 66 28  STALE;.  }.  if(
1c960 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
1c970 5f 46 6f 75 6e 64 20 29 7b 0a 20 20 20 20 69 66  _Found ){.    if
1c980 28 20 61 6c 72 65 61 64 79 45 78 69 73 74 73 20  ( alreadyExists 
1c990 29 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d  ) pc = pOp->p2 -
1c9a0 20 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20   1;.  }else{.   
1c9b0 20 69 66 28 20 21 61 6c 72 65 61 64 79 45 78 69   if( !alreadyExi
1c9c0 73 74 73 20 29 20 70 63 20 3d 20 70 4f 70 2d 3e  sts ) pc = pOp->
1c9d0 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72  p2 - 1;.  }.  br
1c9e0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
1c9f0 65 3a 20 49 73 55 6e 69 71 75 65 20 50 31 20 50  e: IsUnique P1 P
1ca00 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20  2 P3 P4 *.**.** 
1ca10 43 75 72 73 6f 72 20 50 31 20 69 73 20 6f 70 65  Cursor P1 is ope
1ca20 6e 20 6f 6e 20 61 6e 20 69 6e 64 65 78 20 62 2d  n on an index b-
1ca30 74 72 65 65 20 2d 20 74 68 61 74 20 69 73 20 74  tree - that is t
1ca40 6f 20 73 61 79 2c 20 61 20 62 74 72 65 65 20 77  o say, a btree w
1ca50 68 69 63 68 0a 2a 2a 20 6e 6f 20 64 61 74 61 20  hich.** no data 
1ca60 61 6e 64 20 77 68 65 72 65 20 74 68 65 20 6b 65  and where the ke
1ca70 79 20 61 72 65 20 72 65 63 6f 72 64 73 20 67 65  y are records ge
1ca80 6e 65 72 61 74 65 64 20 62 79 20 4f 50 5f 4d 61  nerated by OP_Ma
1ca90 6b 65 52 65 63 6f 72 64 20 77 69 74 68 0a 2a 2a  keRecord with.**
1caa0 20 74 68 65 20 6c 69 73 74 20 66 69 65 6c 64 20   the list field 
1cab0 62 65 69 6e 67 20 74 68 65 20 69 6e 74 65 67 65  being the intege
1cac0 72 20 52 4f 57 49 44 20 6f 66 20 74 68 65 20 65  r ROWID of the e
1cad0 6e 74 72 79 20 74 68 61 74 20 74 68 65 20 69 6e  ntry that the in
1cae0 64 65 78 0a 2a 2a 20 65 6e 74 72 79 20 72 65 66  dex.** entry ref
1caf0 65 72 73 20 74 6f 2e 0a 2a 2a 0a 2a 2a 20 54 68  ers to..**.** Th
1cb00 65 20 50 33 20 72 65 67 69 73 74 65 72 20 63 6f  e P3 register co
1cb10 6e 74 61 69 6e 73 20 61 6e 20 69 6e 74 65 67 65  ntains an intege
1cb20 72 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 2e  r record number.
1cb30 20 43 61 6c 6c 20 74 68 69 73 20 72 65 63 6f 72   Call this recor
1cb40 64 20 0a 2a 2a 20 6e 75 6d 62 65 72 20 52 2e 20  d .** number R. 
1cb50 52 65 67 69 73 74 65 72 20 50 34 20 69 73 20 74  Register P4 is t
1cb60 68 65 20 66 69 72 73 74 20 69 6e 20 61 20 73 65  he first in a se
1cb70 74 20 6f 66 20 4e 20 63 6f 6e 74 69 67 75 6f 75  t of N contiguou
1cb80 73 20 72 65 67 69 73 74 65 72 73 0a 2a 2a 20 74  s registers.** t
1cb90 68 61 74 20 6d 61 6b 65 20 75 70 20 61 6e 20 75  hat make up an u
1cba0 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65  npacked index ke
1cbb0 79 20 74 68 61 74 20 63 61 6e 20 62 65 20 75 73  y that can be us
1cbc0 65 64 20 77 69 74 68 20 63 75 72 73 6f 72 20 50  ed with cursor P
1cbd0 31 2e 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65 20  1..** The value 
1cbe0 6f 66 20 4e 20 63 61 6e 20 62 65 20 69 6e 66 65  of N can be infe
1cbf0 72 72 65 64 20 66 72 6f 6d 20 74 68 65 20 63 75  rred from the cu
1cc00 72 73 6f 72 2e 20 4e 20 69 6e 63 6c 75 64 65 73  rsor. N includes
1cc10 20 74 68 65 20 72 6f 77 69 64 0a 2a 2a 20 76 61   the rowid.** va
1cc20 6c 75 65 20 61 70 70 65 6e 64 65 64 20 74 6f 20  lue appended to 
1cc30 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 69  the end of the i
1cc40 6e 64 65 78 20 72 65 63 6f 72 64 2e 20 54 68 69  ndex record. Thi
1cc50 73 20 72 6f 77 69 64 20 76 61 6c 75 65 20 6d 61  s rowid value ma
1cc60 79 0a 2a 2a 20 6f 72 20 6d 61 79 20 6e 6f 74 20  y.** or may not 
1cc70 62 65 20 74 68 65 20 73 61 6d 65 20 61 73 20 52  be the same as R
1cc80 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 61 6e 79 20 6f  ..**.** If any o
1cc90 66 20 74 68 65 20 4e 20 72 65 67 69 73 74 65 72  f the N register
1cca0 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68  s beginning with
1ccb0 20 72 65 67 69 73 74 65 72 20 50 34 20 63 6f 6e   register P4 con
1ccc0 74 61 69 6e 73 20 61 20 4e 55 4c 4c 0a 2a 2a 20  tains a NULL.** 
1ccd0 76 61 6c 75 65 2c 20 6a 75 6d 70 20 69 6d 6d 65  value, jump imme
1cce0 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a  diately to P2..*
1ccf0 2a 0a 2a 2a 20 4f 74 68 65 72 77 69 73 65 2c 20  *.** Otherwise, 
1cd00 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
1cd10 20 63 68 65 63 6b 73 20 69 66 20 63 75 72 73 6f   checks if curso
1cd20 72 20 50 31 20 63 6f 6e 74 61 69 6e 73 20 61 6e  r P1 contains an
1cd30 20 65 6e 74 72 79 0a 2a 2a 20 77 68 65 72 65 20   entry.** where 
1cd40 74 68 65 20 66 69 72 73 74 20 28 4e 2d 31 29 20  the first (N-1) 
1cd50 66 69 65 6c 64 73 20 6d 61 74 63 68 20 62 75 74  fields match but
1cd60 20 74 68 65 20 72 6f 77 69 64 20 76 61 6c 75 65   the rowid value
1cd70 20 61 74 20 74 68 65 20 65 6e 64 0a 2a 2a 20 6f   at the end.** o
1cd80 66 20 74 68 65 20 69 6e 64 65 78 20 65 6e 74 72  f the index entr
1cd90 79 20 69 73 20 6e 6f 74 20 52 2e 20 49 66 20 74  y is not R. If t
1cda0 68 65 72 65 20 69 73 20 6e 6f 20 73 75 63 68 20  here is no such 
1cdb0 65 6e 74 72 79 2c 20 63 6f 6e 74 72 6f 6c 20 6a  entry, control j
1cdc0 75 6d 70 73 0a 2a 2a 20 74 6f 20 69 6e 73 74 72  umps.** to instr
1cdd0 75 63 74 69 6f 6e 20 50 32 2e 20 4f 74 68 65 72  uction P2. Other
1cde0 77 69 73 65 2c 20 74 68 65 20 72 6f 77 69 64 20  wise, the rowid 
1cdf0 6f 66 20 74 68 65 20 63 6f 6e 66 6c 69 63 74 69  of the conflicti
1ce00 6e 67 20 69 6e 64 65 78 0a 2a 2a 20 65 6e 74 72  ng index.** entr
1ce10 79 20 69 73 20 63 6f 70 69 65 64 20 74 6f 20 72  y is copied to r
1ce20 65 67 69 73 74 65 72 20 50 33 20 61 6e 64 20 63  egister P3 and c
1ce30 6f 6e 74 72 6f 6c 20 66 61 6c 6c 73 20 74 68 72  ontrol falls thr
1ce40 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74  ough to the next
1ce50 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  .** instruction.
1ce60 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
1ce70 20 4e 6f 74 46 6f 75 6e 64 2c 20 4e 6f 74 45 78   NotFound, NotEx
1ce80 69 73 74 73 2c 20 46 6f 75 6e 64 0a 2a 2f 0a 63  ists, Found.*/.c
1ce90 61 73 65 20 4f 50 5f 49 73 55 6e 69 71 75 65 3a  ase OP_IsUnique:
1cea0 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d   {        /* jum
1ceb0 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 75 31 36 20  p, in3 */.  u16 
1cec0 69 69 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  ii;.  VdbeCursor
1ced0 20 2a 70 43 78 3b 0a 20 20 42 74 43 75 72 73 6f   *pCx;.  BtCurso
1cee0 72 20 2a 70 43 72 73 72 3b 0a 20 20 75 31 36 20  r *pCrsr;.  u16 
1cef0 6e 46 69 65 6c 64 3b 0a 20 20 4d 65 6d 20 2a 61  nField;.  Mem *a
1cf00 4d 78 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65  Mx;.  UnpackedRe
1cf10 63 6f 72 64 20 72 3b 20 20 20 20 20 20 20 20 20  cord r;         
1cf20 20 20 20 20 20 20 20 20 20 2f 2a 20 42 2d 54 72           /* B-Tr
1cf30 65 65 20 69 6e 64 65 78 20 73 65 61 72 63 68 20  ee index search 
1cf40 6b 65 79 20 2a 2f 0a 20 20 69 36 34 20 52 3b 20  key */.  i64 R; 
1cf50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cf60 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52              /* R
1cf70 6f 77 69 64 20 73 74 6f 72 65 64 20 69 6e 20 72  owid stored in r
1cf80 65 67 69 73 74 65 72 20 50 33 20 2a 2f 0a 0a 20  egister P3 */.. 
1cf90 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn3 = &aMem[pO
1cfa0 70 2d 3e 70 33 5d 3b 0a 20 20 61 4d 78 20 3d 20  p->p3];.  aMx = 
1cfb0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 34 2e 69 5d  &aMem[pOp->p4.i]
1cfc0 3b 0a 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68  ;.  /* Assert th
1cfd0 61 74 20 74 68 65 20 76 61 6c 75 65 73 20 6f 66  at the values of
1cfe0 20 70 61 72 61 6d 65 74 65 72 73 20 50 31 20 61   parameters P1 a
1cff0 6e 64 20 50 34 20 61 72 65 20 69 6e 20 72 61 6e  nd P4 are in ran
1d000 67 65 2e 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ge. */.  assert(
1d010 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
1d020 5f 49 4e 54 33 32 20 29 3b 0a 20 20 61 73 73 65  _INT32 );.  asse
1d030 72 74 28 20 70 4f 70 2d 3e 70 34 2e 69 3e 30 20  rt( pOp->p4.i>0 
1d040 26 26 20 70 4f 70 2d 3e 70 34 2e 69 3c 3d 70 2d  && pOp->p4.i<=p-
1d050 3e 6e 4d 65 6d 20 29 3b 0a 20 20 61 73 73 65 72  >nMem );.  asser
1d060 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
1d070 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
1d080 73 6f 72 20 29 3b 0a 0a 20 20 2f 2a 20 46 69 6e  sor );..  /* Fin
1d090 64 20 74 68 65 20 69 6e 64 65 78 20 63 75 72 73  d the index curs
1d0a0 6f 72 2e 20 2a 2f 0a 20 20 70 43 78 20 3d 20 70  or. */.  pCx = p
1d0b0 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
1d0c0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 78 2d  ;.  assert( pCx-
1d0d0 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d  >deferredMoveto=
1d0e0 3d 30 20 29 3b 0a 20 20 70 43 78 2d 3e 73 65 65  =0 );.  pCx->see
1d0f0 6b 52 65 73 75 6c 74 20 3d 20 30 3b 0a 20 20 70  kResult = 0;.  p
1d100 43 78 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20  Cx->cacheStatus 
1d110 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20  = CACHE_STALE;. 
1d120 20 70 43 72 73 72 20 3d 20 70 43 78 2d 3e 70 43   pCrsr = pCx->pC
1d130 75 72 73 6f 72 3b 0a 0a 20 20 2f 2a 20 49 66 20  ursor;..  /* If 
1d140 61 6e 79 20 6f 66 20 74 68 65 20 76 61 6c 75 65  any of the value
1d150 73 20 61 72 65 20 4e 55 4c 4c 2c 20 74 61 6b 65  s are NULL, take
1d160 20 74 68 65 20 6a 75 6d 70 2e 20 2a 2f 0a 20 20   the jump. */.  
1d170 6e 46 69 65 6c 64 20 3d 20 70 43 78 2d 3e 70 4b  nField = pCx->pK
1d180 65 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64 3b 0a  eyInfo->nField;.
1d190 20 20 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 6e    for(ii=0; ii<n
1d1a0 46 69 65 6c 64 3b 20 69 69 2b 2b 29 7b 0a 20 20  Field; ii++){.  
1d1b0 20 20 69 66 28 20 61 4d 78 5b 69 69 5d 2e 66 6c    if( aMx[ii].fl
1d1c0 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29  ags & MEM_Null )
1d1d0 7b 0a 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70  {.      pc = pOp
1d1e0 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 20 20  ->p2 - 1;.      
1d1f0 70 43 72 73 72 20 3d 20 30 3b 0a 20 20 20 20 20  pCrsr = 0;.     
1d200 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20   break;.    }.  
1d210 7d 0a 20 20 61 73 73 65 72 74 28 20 28 61 4d 78  }.  assert( (aMx
1d220 5b 6e 46 69 65 6c 64 5d 2e 66 6c 61 67 73 20 26  [nField].flags &
1d230 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 3b   MEM_Null)==0 );
1d240 0a 0a 20 20 69 66 28 20 70 43 72 73 72 21 3d 30  ..  if( pCrsr!=0
1d250 20 29 7b 0a 20 20 20 20 2f 2a 20 50 6f 70 75 6c   ){.    /* Popul
1d260 61 74 65 20 74 68 65 20 69 6e 64 65 78 20 73 65  ate the index se
1d270 61 72 63 68 20 6b 65 79 2e 20 2a 2f 0a 20 20 20  arch key. */.   
1d280 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43   r.pKeyInfo = pC
1d290 78 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20  x->pKeyInfo;.   
1d2a0 20 72 2e 6e 46 69 65 6c 64 20 3d 20 6e 46 69 65   r.nField = nFie
1d2b0 6c 64 20 2b 20 31 3b 0a 20 20 20 20 72 2e 66 6c  ld + 1;.    r.fl
1d2c0 61 67 73 20 3d 20 55 4e 50 41 43 4b 45 44 5f 50  ags = UNPACKED_P
1d2d0 52 45 46 49 58 5f 53 45 41 52 43 48 3b 0a 20 20  REFIX_SEARCH;.  
1d2e0 20 20 72 2e 61 4d 65 6d 20 3d 20 61 4d 78 3b 0a    r.aMem = aMx;.
1d2f0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
1d300 42 55 47 0a 20 20 20 20 7b 20 69 6e 74 20 69 3b  BUG.    { int i;
1d310 20 66 6f 72 28 69 3d 30 3b 20 69 3c 72 2e 6e 46   for(i=0; i<r.nF
1d320 69 65 6c 64 3b 20 69 2b 2b 29 20 61 73 73 65 72  ield; i++) asser
1d330 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 72  t( memIsValid(&r
1d340 2e 61 4d 65 6d 5b 69 5d 29 20 29 3b 20 7d 0a 23  .aMem[i]) ); }.#
1d350 65 6e 64 69 66 0a 0a 20 20 20 20 2f 2a 20 45 78  endif..    /* Ex
1d360 74 72 61 63 74 20 74 68 65 20 76 61 6c 75 65 20  tract the value 
1d370 6f 66 20 52 20 66 72 6f 6d 20 72 65 67 69 73 74  of R from regist
1d380 65 72 20 50 33 2e 20 2a 2f 0a 20 20 20 20 73 71  er P3. */.    sq
1d390 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65  lite3VdbeMemInte
1d3a0 67 65 72 69 66 79 28 70 49 6e 33 29 3b 0a 20 20  gerify(pIn3);.  
1d3b0 20 20 52 20 3d 20 70 49 6e 33 2d 3e 75 2e 69 3b    R = pIn3->u.i;
1d3c0 0a 0a 20 20 20 20 2f 2a 20 53 65 61 72 63 68 20  ..    /* Search 
1d3d0 74 68 65 20 42 2d 54 72 65 65 20 69 6e 64 65 78  the B-Tree index
1d3e0 2e 20 49 66 20 6e 6f 20 63 6f 6e 66 6c 69 63 74  . If no conflict
1d3f0 69 6e 67 20 72 65 63 6f 72 64 20 69 73 20 66 6f  ing record is fo
1d400 75 6e 64 2c 20 6a 75 6d 70 0a 20 20 20 20 2a 2a  und, jump.    **
1d410 20 74 6f 20 50 32 2e 20 4f 74 68 65 72 77 69 73   to P2. Otherwis
1d420 65 2c 20 63 6f 70 79 20 74 68 65 20 72 6f 77 69  e, copy the rowi
1d430 64 20 6f 66 20 74 68 65 20 63 6f 6e 66 6c 69 63  d of the conflic
1d440 74 69 6e 67 20 72 65 63 6f 72 64 20 74 6f 0a 20  ting record to. 
1d450 20 20 20 2a 2a 20 72 65 67 69 73 74 65 72 20 50     ** register P
1d460 33 20 61 6e 64 20 66 61 6c 6c 20 74 68 72 6f 75  3 and fall throu
1d470 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69  gh to the next i
1d480 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 2a 2f 0a  nstruction.  */.
1d490 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
1d4a0 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63  BtreeMovetoUnpac
1d4b0 6b 65 64 28 70 43 72 73 72 2c 20 26 72 2c 20 30  ked(pCrsr, &r, 0
1d4c0 2c 20 30 2c 20 26 70 43 78 2d 3e 73 65 65 6b 52  , 0, &pCx->seekR
1d4d0 65 73 75 6c 74 29 3b 0a 20 20 20 20 69 66 28 20  esult);.    if( 
1d4e0 28 72 2e 66 6c 61 67 73 20 26 20 55 4e 50 41 43  (r.flags & UNPAC
1d4f0 4b 45 44 5f 50 52 45 46 49 58 5f 53 45 41 52 43  KED_PREFIX_SEARC
1d500 48 29 20 7c 7c 20 72 2e 72 6f 77 69 64 3d 3d 52  H) || r.rowid==R
1d510 20 29 7b 0a 20 20 20 20 20 20 70 63 20 3d 20 70   ){.      pc = p
1d520 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20  Op->p2 - 1;.    
1d530 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 70 49 6e  }else{.      pIn
1d540 33 2d 3e 75 2e 69 20 3d 20 72 2e 72 6f 77 69 64  3->u.i = r.rowid
1d550 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72  ;.    }.  }.  br
1d560 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
1d570 65 3a 20 4e 6f 74 45 78 69 73 74 73 20 50 31 20  e: NotExists P1 
1d580 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
1d590 55 73 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  Use the content 
1d5a0 6f 66 20 72 65 67 69 73 74 65 72 20 50 33 20 61  of register P3 a
1d5b0 73 20 61 20 69 6e 74 65 67 65 72 20 6b 65 79 2e  s a integer key.
1d5c0 20 20 49 66 20 61 20 72 65 63 6f 72 64 20 0a 2a    If a record .*
1d5d0 2a 20 77 69 74 68 20 74 68 61 74 20 6b 65 79 20  * with that key 
1d5e0 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 20 69  does not exist i
1d5f0 6e 20 74 61 62 6c 65 20 6f 66 20 50 31 2c 20 74  n table of P1, t
1d600 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20  hen jump to P2. 
1d610 0a 2a 2a 20 49 66 20 74 68 65 20 72 65 63 6f 72  .** If the recor
1d620 64 20 64 6f 65 73 20 65 78 69 73 74 2c 20 74 68  d does exist, th
1d630 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 2e  en fall through.
1d640 20 20 54 68 65 20 63 75 72 73 6f 72 20 69 73 20    The cursor is 
1d650 6c 65 66 74 20 0a 2a 2a 20 70 6f 69 6e 74 69 6e  left .** pointin
1d660 67 20 74 6f 20 74 68 65 20 72 65 63 6f 72 64 20  g to the record 
1d670 69 66 20 69 74 20 65 78 69 73 74 73 2e 0a 2a 2a  if it exists..**
1d680 0a 2a 2a 20 54 68 65 20 64 69 66 66 65 72 65 6e  .** The differen
1d690 63 65 20 62 65 74 77 65 65 6e 20 74 68 69 73 20  ce between this 
1d6a0 6f 70 65 72 61 74 69 6f 6e 20 61 6e 64 20 4e 6f  operation and No
1d6b0 74 46 6f 75 6e 64 20 69 73 20 74 68 61 74 20 74  tFound is that t
1d6c0 68 69 73 0a 2a 2a 20 6f 70 65 72 61 74 69 6f 6e  his.** operation
1d6d0 20 61 73 73 75 6d 65 73 20 74 68 65 20 6b 65 79   assumes the key
1d6e0 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 61   is an integer a
1d6f0 6e 64 20 74 68 61 74 20 50 31 20 69 73 20 61 20  nd that P1 is a 
1d700 74 61 62 6c 65 20 77 68 65 72 65 61 73 0a 2a 2a  table whereas.**
1d710 20 4e 6f 74 46 6f 75 6e 64 20 61 73 73 75 6d 65   NotFound assume
1d720 73 20 6b 65 79 20 69 73 20 61 20 62 6c 6f 62 20  s key is a blob 
1d730 63 6f 6e 73 74 72 75 63 74 65 64 20 66 72 6f 6d  constructed from
1d740 20 4d 61 6b 65 52 65 63 6f 72 64 20 61 6e 64 0a   MakeRecord and.
1d750 2a 2a 20 50 31 20 69 73 20 61 6e 20 69 6e 64 65  ** P1 is an inde
1d760 78 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  x..**.** See als
1d770 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75  o: Found, NotFou
1d780 6e 64 2c 20 49 73 55 6e 69 71 75 65 0a 2a 2f 0a  nd, IsUnique.*/.
1d790 63 61 73 65 20 4f 50 5f 4e 6f 74 45 78 69 73 74  case OP_NotExist
1d7a0 73 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a  s: {        /* j
1d7b0 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 56 64  ump, in3 */.  Vd
1d7c0 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
1d7d0 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b  BtCursor *pCrsr;
1d7e0 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 75 36  .  int res;.  u6
1d7f0 34 20 69 4b 65 79 3b 0a 0a 20 20 70 49 6e 33 20  4 iKey;..  pIn3 
1d800 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
1d810 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 33  ;.  assert( pIn3
1d820 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
1d830 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  t );.  assert( p
1d840 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
1d850 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
1d860 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
1d870 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
1d880 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
1d890 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73    assert( pC->is
1d8a0 54 61 62 6c 65 20 29 3b 0a 20 20 61 73 73 65 72  Table );.  asser
1d8b0 74 28 20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62  t( pC->pseudoTab
1d8c0 6c 65 52 65 67 3d 3d 30 20 29 3b 0a 20 20 70 43  leReg==0 );.  pC
1d8d0 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f  rsr = pC->pCurso
1d8e0 72 3b 0a 20 20 69 66 28 20 70 43 72 73 72 21 3d  r;.  if( pCrsr!=
1d8f0 30 20 29 7b 0a 20 20 20 20 72 65 73 20 3d 20 30  0 ){.    res = 0
1d900 3b 0a 20 20 20 20 69 4b 65 79 20 3d 20 70 49 6e  ;.    iKey = pIn
1d910 33 2d 3e 75 2e 69 3b 0a 20 20 20 20 72 63 20 3d  3->u.i;.    rc =
1d920 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76   sqlite3BtreeMov
1d930 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 72 73  etoUnpacked(pCrs
1d940 72 2c 20 30 2c 20 69 4b 65 79 2c 20 30 2c 20 26  r, 0, iKey, 0, &
1d950 72 65 73 29 3b 0a 20 20 20 20 70 43 2d 3e 6c 61  res);.    pC->la
1d960 73 74 52 6f 77 69 64 20 3d 20 70 49 6e 33 2d 3e  stRowid = pIn3->
1d970 75 2e 69 3b 0a 20 20 20 20 70 43 2d 3e 72 6f 77  u.i;.    pC->row
1d980 69 64 49 73 56 61 6c 69 64 20 3d 20 72 65 73 3d  idIsValid = res=
1d990 3d 30 20 3f 31 3a 30 3b 0a 20 20 20 20 70 43 2d  =0 ?1:0;.    pC-
1d9a0 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20  >nullRow = 0;.  
1d9b0 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
1d9c0 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
1d9d0 0a 20 20 20 20 70 43 2d 3e 64 65 66 65 72 72 65  .    pC->deferre
1d9e0 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20  dMoveto = 0;.   
1d9f0 20 69 66 28 20 72 65 73 21 3d 30 20 29 7b 0a 20   if( res!=0 ){. 
1da00 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70       pc = pOp->p
1da10 32 20 2d 20 31 3b 0a 20 20 20 20 20 20 61 73 73  2 - 1;.      ass
1da20 65 72 74 28 20 70 43 2d 3e 72 6f 77 69 64 49 73  ert( pC->rowidIs
1da30 56 61 6c 69 64 3d 3d 30 20 29 3b 0a 20 20 20 20  Valid==0 );.    
1da40 7d 0a 20 20 20 20 70 43 2d 3e 73 65 65 6b 52 65  }.    pC->seekRe
1da50 73 75 6c 74 20 3d 20 72 65 73 3b 0a 20 20 7d 65  sult = res;.  }e
1da60 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 54 68 69 73  lse{.    /* This
1da70 20 68 61 70 70 65 6e 73 20 77 68 65 6e 20 61 6e   happens when an
1da80 20 61 74 74 65 6d 70 74 20 74 6f 20 6f 70 65 6e   attempt to open
1da90 20 61 20 72 65 61 64 20 63 75 72 73 6f 72 20 6f   a read cursor o
1daa0 6e 20 74 68 65 20 0a 20 20 20 20 2a 2a 20 73 71  n the .    ** sq
1dab0 6c 69 74 65 5f 6d 61 73 74 65 72 20 74 61 62 6c  lite_master tabl
1dac0 65 20 72 65 74 75 72 6e 73 20 53 51 4c 49 54 45  e returns SQLITE
1dad0 5f 45 4d 50 54 59 2e 0a 20 20 20 20 2a 2f 0a 20  _EMPTY..    */. 
1dae0 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
1daf0 2d 20 31 3b 0a 20 20 20 20 61 73 73 65 72 74 28  - 1;.    assert(
1db00 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69   pC->rowidIsVali
1db10 64 3d 3d 30 20 29 3b 0a 20 20 20 20 70 43 2d 3e  d==0 );.    pC->
1db20 73 65 65 6b 52 65 73 75 6c 74 20 3d 20 30 3b 0a  seekResult = 0;.
1db30 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
1db40 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 71 75 65  /* Opcode: Seque
1db50 6e 63 65 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  nce P1 P2 * * *.
1db60 2a 2a 0a 2a 2a 20 46 69 6e 64 20 74 68 65 20 6e  **.** Find the n
1db70 65 78 74 20 61 76 61 69 6c 61 62 6c 65 20 73 65  ext available se
1db80 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20 66 6f  quence number fo
1db90 72 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20  r cursor P1..** 
1dba0 57 72 69 74 65 20 74 68 65 20 73 65 71 75 65 6e  Write the sequen
1dbb0 63 65 20 6e 75 6d 62 65 72 20 69 6e 74 6f 20 72  ce number into r
1dbc0 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 20 54  egister P2..** T
1dbd0 68 65 20 73 65 71 75 65 6e 63 65 20 6e 75 6d 62  he sequence numb
1dbe0 65 72 20 6f 6e 20 74 68 65 20 63 75 72 73 6f 72  er on the cursor
1dbf0 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20   is incremented 
1dc00 61 66 74 65 72 20 74 68 69 73 0a 2a 2a 20 69 6e  after this.** in
1dc10 73 74 72 75 63 74 69 6f 6e 2e 20 20 0a 2a 2f 0a  struction.  .*/.
1dc20 63 61 73 65 20 4f 50 5f 53 65 71 75 65 6e 63 65  case OP_Sequence
1dc30 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  : {           /*
1dc40 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65   out2-prerelease
1dc50 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f   */.  assert( pO
1dc60 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
1dc70 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
1dc80 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 61  ;.  assert( p->a
1dc90 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 21 3d 30  pCsr[pOp->p1]!=0
1dca0 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20   );.  pOut->u.i 
1dcb0 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
1dcc0 70 31 5d 2d 3e 73 65 71 43 6f 75 6e 74 2b 2b 3b  p1]->seqCount++;
1dcd0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a  .  break;.}.../*
1dce0 20 4f 70 63 6f 64 65 3a 20 4e 65 77 52 6f 77 69   Opcode: NewRowi
1dcf0 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  d P1 P2 P3 * *.*
1dd00 2a 0a 2a 2a 20 47 65 74 20 61 20 6e 65 77 20 69  *.** Get a new i
1dd10 6e 74 65 67 65 72 20 72 65 63 6f 72 64 20 6e 75  nteger record nu
1dd20 6d 62 65 72 20 28 61 2e 6b 2e 61 20 22 72 6f 77  mber (a.k.a "row
1dd30 69 64 22 29 20 75 73 65 64 20 61 73 20 74 68 65  id") used as the
1dd40 20 6b 65 79 20 74 6f 20 61 20 74 61 62 6c 65 2e   key to a table.
1dd50 0a 2a 2a 20 54 68 65 20 72 65 63 6f 72 64 20 6e  .** The record n
1dd60 75 6d 62 65 72 20 69 73 20 6e 6f 74 20 70 72 65  umber is not pre
1dd70 76 69 6f 75 73 6c 79 20 75 73 65 64 20 61 73 20  viously used as 
1dd80 61 20 6b 65 79 20 69 6e 20 74 68 65 20 64 61 74  a key in the dat
1dd90 61 62 61 73 65 0a 2a 2a 20 74 61 62 6c 65 20 74  abase.** table t
1dda0 68 61 74 20 63 75 72 73 6f 72 20 50 31 20 70 6f  hat cursor P1 po
1ddb0 69 6e 74 73 20 74 6f 2e 20 20 54 68 65 20 6e 65  ints to.  The ne
1ddc0 77 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 20  w record number 
1ddd0 69 73 20 77 72 69 74 74 65 6e 0a 2a 2a 20 77 72  is written.** wr
1dde0 69 74 74 65 6e 20 74 6f 20 72 65 67 69 73 74 65  itten to registe
1ddf0 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  r P2..**.** If P
1de00 33 3e 30 20 74 68 65 6e 20 50 33 20 69 73 20 61  3>0 then P3 is a
1de10 20 72 65 67 69 73 74 65 72 20 69 6e 20 74 68 65   register in the
1de20 20 72 6f 6f 74 20 66 72 61 6d 65 20 6f 66 20 74   root frame of t
1de30 68 69 73 20 56 44 42 45 20 74 68 61 74 20 68 6f  his VDBE that ho
1de40 6c 64 73 20 0a 2a 2a 20 74 68 65 20 6c 61 72 67  lds .** the larg
1de50 65 73 74 20 70 72 65 76 69 6f 75 73 6c 79 20 67  est previously g
1de60 65 6e 65 72 61 74 65 64 20 72 65 63 6f 72 64 20  enerated record 
1de70 6e 75 6d 62 65 72 2e 20 4e 6f 20 6e 65 77 20 72  number. No new r
1de80 65 63 6f 72 64 20 6e 75 6d 62 65 72 73 20 61 72  ecord numbers ar
1de90 65 0a 2a 2a 20 61 6c 6c 6f 77 65 64 20 74 6f 20  e.** allowed to 
1dea0 62 65 20 6c 65 73 73 20 74 68 61 6e 20 74 68 69  be less than thi
1deb0 73 20 76 61 6c 75 65 2e 20 57 68 65 6e 20 74 68  s value. When th
1dec0 69 73 20 76 61 6c 75 65 20 72 65 61 63 68 65 73  is value reaches
1ded0 20 69 74 73 20 6d 61 78 69 6d 75 6d 2c 20 0a 2a   its maximum, .*
1dee0 2a 20 61 20 53 51 4c 49 54 45 5f 46 55 4c 4c 20  * a SQLITE_FULL 
1def0 65 72 72 6f 72 20 69 73 20 67 65 6e 65 72 61 74  error is generat
1df00 65 64 2e 20 54 68 65 20 50 33 20 72 65 67 69 73  ed. The P3 regis
1df10 74 65 72 20 69 73 20 75 70 64 61 74 65 64 20 77  ter is updated w
1df20 69 74 68 20 74 68 65 20 27 0a 2a 2a 20 67 65 6e  ith the '.** gen
1df30 65 72 61 74 65 64 20 72 65 63 6f 72 64 20 6e 75  erated record nu
1df40 6d 62 65 72 2e 20 54 68 69 73 20 50 33 20 6d 65  mber. This P3 me
1df50 63 68 61 6e 69 73 6d 20 69 73 20 75 73 65 64 20  chanism is used 
1df60 74 6f 20 68 65 6c 70 20 69 6d 70 6c 65 6d 65 6e  to help implemen
1df70 74 20 74 68 65 0a 2a 2a 20 41 55 54 4f 49 4e 43  t the.** AUTOINC
1df80 52 45 4d 45 4e 54 20 66 65 61 74 75 72 65 2e 0a  REMENT feature..
1df90 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 77 52 6f  */.case OP_NewRo
1dfa0 77 69 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20  wid: {          
1dfb0 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65   /* out2-prerele
1dfc0 61 73 65 20 2a 2f 0a 20 20 69 36 34 20 76 3b 20  ase */.  i64 v; 
1dfd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dfe0 2f 2a 20 54 68 65 20 6e 65 77 20 72 6f 77 69 64  /* The new rowid
1dff0 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72   */.  VdbeCursor
1e000 20 2a 70 43 3b 20 20 20 20 20 20 20 20 2f 2a 20   *pC;        /* 
1e010 43 75 72 73 6f 72 20 6f 66 20 74 61 62 6c 65 20  Cursor of table 
1e020 74 6f 20 67 65 74 20 74 68 65 20 6e 65 77 20 72  to get the new r
1e030 6f 77 69 64 20 2a 2f 0a 20 20 69 6e 74 20 72 65  owid */.  int re
1e040 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s;              
1e050 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20 61 6e   /* Result of an
1e060 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73   sqlite3BtreeLas
1e070 74 28 29 20 2a 2f 0a 20 20 69 6e 74 20 63 6e 74  t() */.  int cnt
1e080 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1e090 2f 2a 20 43 6f 75 6e 74 65 72 20 74 6f 20 6c 69  /* Counter to li
1e0a0 6d 69 74 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  mit the number o
1e0b0 66 20 73 65 61 72 63 68 65 73 20 2a 2f 0a 20 20  f searches */.  
1e0c0 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20 20 20 20 20  Mem *pMem;      
1e0d0 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74         /* Regist
1e0e0 65 72 20 68 6f 6c 64 69 6e 67 20 6c 61 72 67 65  er holding large
1e0f0 73 74 20 72 6f 77 69 64 20 66 6f 72 20 41 55 54  st rowid for AUT
1e100 4f 49 4e 43 52 45 4d 45 4e 54 20 2a 2f 0a 20 20  OINCREMENT */.  
1e110 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d  VdbeFrame *pFram
1e120 65 3b 20 20 20 20 20 2f 2a 20 52 6f 6f 74 20 66  e;     /* Root f
1e130 72 61 6d 65 20 6f 66 20 56 44 42 45 20 2a 2f 0a  rame of VDBE */.
1e140 0a 20 20 76 20 3d 20 30 3b 0a 20 20 72 65 73 20  .  v = 0;.  res 
1e150 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70  = 0;.  assert( p
1e160 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
1e170 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
1e180 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
1e190 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
1e1a0 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
1e1b0 20 20 69 66 28 20 4e 45 56 45 52 28 70 43 2d 3e    if( NEVER(pC->
1e1c0 70 43 75 72 73 6f 72 3d 3d 30 29 20 29 7b 0a 20  pCursor==0) ){. 
1e1d0 20 20 20 2f 2a 20 54 68 65 20 7a 65 72 6f 20 69     /* The zero i
1e1e0 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 61 62  nitialization ab
1e1f0 6f 76 65 20 69 73 20 61 6c 6c 20 74 68 61 74 20  ove is all that 
1e200 69 73 20 6e 65 65 64 65 64 20 2a 2f 0a 20 20 7d  is needed */.  }
1e210 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 54 68 65  else{.    /* The
1e220 20 6e 65 78 74 20 72 6f 77 69 64 20 6f 72 20 72   next rowid or r
1e230 65 63 6f 72 64 20 6e 75 6d 62 65 72 20 28 64 69  ecord number (di
1e240 66 66 65 72 65 6e 74 20 74 65 72 6d 73 20 66 6f  fferent terms fo
1e250 72 20 74 68 65 20 73 61 6d 65 0a 20 20 20 20 2a  r the same.    *
1e260 2a 20 74 68 69 6e 67 29 20 69 73 20 6f 62 74 61  * thing) is obta
1e270 69 6e 65 64 20 69 6e 20 61 20 74 77 6f 2d 73 74  ined in a two-st
1e280 65 70 20 61 6c 67 6f 72 69 74 68 6d 2e 0a 20 20  ep algorithm..  
1e290 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 46 69 72 73    **.    ** Firs
1e2a0 74 20 77 65 20 61 74 74 65 6d 70 74 20 74 6f 20  t we attempt to 
1e2b0 66 69 6e 64 20 74 68 65 20 6c 61 72 67 65 73 74  find the largest
1e2c0 20 65 78 69 73 74 69 6e 67 20 72 6f 77 69 64 20   existing rowid 
1e2d0 61 6e 64 20 61 64 64 20 6f 6e 65 0a 20 20 20 20  and add one.    
1e2e0 2a 2a 20 74 6f 20 74 68 61 74 2e 20 20 42 75 74  ** to that.  But
1e2f0 20 69 66 20 74 68 65 20 6c 61 72 67 65 73 74 20   if the largest 
1e300 65 78 69 73 74 69 6e 67 20 72 6f 77 69 64 20 69  existing rowid i
1e310 73 20 61 6c 72 65 61 64 79 20 74 68 65 20 6d 61  s already the ma
1e320 78 69 6d 75 6d 0a 20 20 20 20 2a 2a 20 70 6f 73  ximum.    ** pos
1e330 69 74 69 76 65 20 69 6e 74 65 67 65 72 2c 20 77  itive integer, w
1e340 65 20 68 61 76 65 20 74 6f 20 66 61 6c 6c 20 74  e have to fall t
1e350 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 73 65  hrough to the se
1e360 63 6f 6e 64 0a 20 20 20 20 2a 2a 20 70 72 6f 62  cond.    ** prob
1e370 61 62 69 6c 69 73 74 69 63 20 61 6c 67 6f 72 69  abilistic algori
1e380 74 68 6d 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a  thm.    **.    *
1e390 2a 20 54 68 65 20 73 65 63 6f 6e 64 20 61 6c 67  * The second alg
1e3a0 6f 72 69 74 68 6d 20 69 73 20 74 6f 20 73 65 6c  orithm is to sel
1e3b0 65 63 74 20 61 20 72 6f 77 69 64 20 61 74 20 72  ect a rowid at r
1e3c0 61 6e 64 6f 6d 20 61 6e 64 20 73 65 65 20 69 66  andom and see if
1e3d0 0a 20 20 20 20 2a 2a 20 69 74 20 61 6c 72 65 61  .    ** it alrea
1e3e0 64 79 20 65 78 69 73 74 73 20 69 6e 20 74 68 65  dy exists in the
1e3f0 20 74 61 62 6c 65 2e 20 20 49 66 20 69 74 20 64   table.  If it d
1e400 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 2c 20 77  oes not exist, w
1e410 65 20 68 61 76 65 0a 20 20 20 20 2a 2a 20 73 75  e have.    ** su
1e420 63 63 65 65 64 65 64 2e 20 20 49 66 20 74 68 65  cceeded.  If the
1e430 20 72 61 6e 64 6f 6d 20 72 6f 77 69 64 20 64 6f   random rowid do
1e440 65 73 20 65 78 69 73 74 2c 20 77 65 20 73 65 6c  es exist, we sel
1e450 65 63 74 20 61 20 6e 65 77 20 6f 6e 65 0a 20 20  ect a new one.  
1e460 20 20 2a 2a 20 61 6e 64 20 74 72 79 20 61 67 61    ** and try aga
1e470 69 6e 2c 20 75 70 20 74 6f 20 31 30 30 20 74 69  in, up to 100 ti
1e480 6d 65 73 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  mes..    */.    
1e490 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61  assert( pC->isTa
1e4a0 62 6c 65 20 29 3b 0a 0a 23 69 66 64 65 66 20 53  ble );..#ifdef S
1e4b0 51 4c 49 54 45 5f 33 32 42 49 54 5f 52 4f 57 49  QLITE_32BIT_ROWI
1e4c0 44 0a 23 20 20 20 64 65 66 69 6e 65 20 4d 41 58  D.#   define MAX
1e4d0 5f 52 4f 57 49 44 20 30 78 37 66 66 66 66 66 66  _ROWID 0x7ffffff
1e4e0 66 0a 23 65 6c 73 65 0a 20 20 20 20 2f 2a 20 53  f.#else.    /* S
1e4f0 6f 6d 65 20 63 6f 6d 70 69 6c 65 72 73 20 63 6f  ome compilers co
1e500 6d 70 6c 61 69 6e 20 61 62 6f 75 74 20 63 6f 6e  mplain about con
1e510 73 74 61 6e 74 73 20 6f 66 20 74 68 65 20 66 6f  stants of the fo
1e520 72 6d 20 30 78 37 66 66 66 66 66 66 66 66 66 66  rm 0x7ffffffffff
1e530 66 66 66 66 66 2e 0a 20 20 20 20 2a 2a 20 4f 74  fffff..    ** Ot
1e540 68 65 72 73 20 63 6f 6d 70 6c 61 69 6e 20 61 62  hers complain ab
1e550 6f 75 74 20 30 78 37 66 66 66 66 66 66 66 66 66  out 0x7fffffffff
1e560 66 66 66 66 66 66 66 4c 4c 2e 20 20 54 68 65 20  fffffffLL.  The 
1e570 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 20  following macro 
1e580 73 65 65 6d 73 0a 20 20 20 20 2a 2a 20 74 6f 20  seems.    ** to 
1e590 70 72 6f 76 69 64 65 20 74 68 65 20 63 6f 6e 73  provide the cons
1e5a0 74 61 6e 74 20 77 68 69 6c 65 20 6d 61 6b 69 6e  tant while makin
1e5b0 67 20 61 6c 6c 20 63 6f 6d 70 69 6c 65 72 73 20  g all compilers 
1e5c0 68 61 70 70 79 2e 0a 20 20 20 20 2a 2f 0a 23 20  happy..    */.# 
1e5d0 20 20 64 65 66 69 6e 65 20 4d 41 58 5f 52 4f 57    define MAX_ROW
1e5e0 49 44 20 20 28 69 36 34 29 28 20 28 28 28 75 36  ID  (i64)( (((u6
1e5f0 34 29 30 78 37 66 66 66 66 66 66 66 29 3c 3c 33  4)0x7fffffff)<<3
1e600 32 29 20 7c 20 28 75 36 34 29 30 78 66 66 66 66  2) | (u64)0xffff
1e610 66 66 66 66 20 29 0a 23 65 6e 64 69 66 0a 0a 20  ffff ).#endif.. 
1e620 20 20 20 69 66 28 20 21 70 43 2d 3e 75 73 65 52     if( !pC->useR
1e630 61 6e 64 6f 6d 52 6f 77 69 64 20 29 7b 0a 20 20  andomRowid ){.  
1e640 20 20 20 20 76 20 3d 20 73 71 6c 69 74 65 33 42      v = sqlite3B
1e650 74 72 65 65 47 65 74 43 61 63 68 65 64 52 6f 77  treeGetCachedRow
1e660 69 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 29 3b  id(pC->pCursor);
1e670 0a 20 20 20 20 20 20 69 66 28 20 76 3d 3d 30 20  .      if( v==0 
1e680 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  ){.        rc = 
1e690 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74  sqlite3BtreeLast
1e6a0 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72  (pC->pCursor, &r
1e6b0 65 73 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28  es);.        if(
1e6c0 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
1e6d0 7b 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f  {.          goto
1e6e0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
1e6f0 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  ror;.        }. 
1e700 20 20 20 20 20 20 20 69 66 28 20 72 65 73 20 29         if( res )
1e710 7b 0a 20 20 20 20 20 20 20 20 20 20 76 20 3d 20  {.          v = 
1e720 31 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 36  1;   /* IMP: R-6
1e730 31 39 31 34 2d 34 38 30 37 34 20 2a 2f 0a 20 20  1914-48074 */.  
1e740 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
1e750 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73         assert( s
1e760 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f  qlite3BtreeCurso
1e770 72 49 73 56 61 6c 69 64 28 70 43 2d 3e 70 43 75  rIsValid(pC->pCu
1e780 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 20  rsor) );.       
1e790 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
1e7a0 74 72 65 65 4b 65 79 53 69 7a 65 28 70 43 2d 3e  treeKeySize(pC->
1e7b0 70 43 75 72 73 6f 72 2c 20 26 76 29 3b 0a 20 20  pCursor, &v);.  
1e7c0 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
1e7d0 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b  rc==SQLITE_OK );
1e7e0 20 20 20 2f 2a 20 43 61 6e 6e 6f 74 20 66 61 69     /* Cannot fai
1e7f0 6c 20 66 6f 6c 6c 6f 77 69 6e 67 20 42 74 72 65  l following Btre
1e800 65 4c 61 73 74 28 29 20 2a 2f 0a 20 20 20 20 20  eLast() */.     
1e810 20 20 20 20 20 69 66 28 20 76 3d 3d 4d 41 58 5f       if( v==MAX_
1e820 52 4f 57 49 44 20 29 7b 0a 20 20 20 20 20 20 20  ROWID ){.       
1e830 20 20 20 20 20 70 43 2d 3e 75 73 65 52 61 6e 64       pC->useRand
1e840 6f 6d 52 6f 77 69 64 20 3d 20 31 3b 0a 20 20 20  omRowid = 1;.   
1e850 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20         }else{.  
1e860 20 20 20 20 20 20 20 20 20 20 76 2b 2b 3b 20 20            v++;  
1e870 20 2f 2a 20 49 4d 50 3a 20 52 2d 32 39 35 33 38   /* IMP: R-29538
1e880 2d 33 34 39 38 37 20 2a 2f 0a 20 20 20 20 20 20  -34987 */.      
1e890 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a      }.        }.
1e8a0 20 20 20 20 20 20 7d 0a 0a 23 69 66 6e 64 65 66        }..#ifndef
1e8b0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54   SQLITE_OMIT_AUT
1e8c0 4f 49 4e 43 52 45 4d 45 4e 54 0a 20 20 20 20 20  OINCREMENT.     
1e8d0 20 69 66 28 20 70 4f 70 2d 3e 70 33 20 29 7b 0a   if( pOp->p3 ){.
1e8e0 20 20 20 20 20 20 20 20 2f 2a 20 41 73 73 65 72          /* Asser
1e8f0 74 20 74 68 61 74 20 50 33 20 69 73 20 61 20 76  t that P3 is a v
1e900 61 6c 69 64 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  alid memory cell
1e910 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 61 73 73  . */.        ass
1e920 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29  ert( pOp->p3>0 )
1e930 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 2d  ;.        if( p-
1e940 3e 70 46 72 61 6d 65 20 29 7b 0a 20 20 20 20 20  >pFrame ){.     
1e950 20 20 20 20 20 66 6f 72 28 70 46 72 61 6d 65 3d       for(pFrame=
1e960 70 2d 3e 70 46 72 61 6d 65 3b 20 70 46 72 61 6d  p->pFrame; pFram
1e970 65 2d 3e 70 50 61 72 65 6e 74 3b 20 70 46 72 61  e->pParent; pFra
1e980 6d 65 3d 70 46 72 61 6d 65 2d 3e 70 50 61 72 65  me=pFrame->pPare
1e990 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20 2f  nt);.          /
1e9a0 2a 20 41 73 73 65 72 74 20 74 68 61 74 20 50 33  * Assert that P3
1e9b0 20 69 73 20 61 20 76 61 6c 69 64 20 6d 65 6d 6f   is a valid memo
1e9c0 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20  ry cell. */.    
1e9d0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
1e9e0 70 2d 3e 70 33 3c 3d 70 46 72 61 6d 65 2d 3e 6e  p->p3<=pFrame->n
1e9f0 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20 20 20 20  Mem );.         
1ea00 20 70 4d 65 6d 20 3d 20 26 70 46 72 61 6d 65 2d   pMem = &pFrame-
1ea10 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  >aMem[pOp->p3];.
1ea20 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20          }else{. 
1ea30 20 20 20 20 20 20 20 20 20 2f 2a 20 41 73 73 65           /* Asse
1ea40 72 74 20 74 68 61 74 20 50 33 20 69 73 20 61 20  rt that P3 is a 
1ea50 76 61 6c 69 64 20 6d 65 6d 6f 72 79 20 63 65 6c  valid memory cel
1ea60 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  l. */.          
1ea70 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c  assert( pOp->p3<
1ea80 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20  =p->nMem );.    
1ea90 20 20 20 20 20 20 70 4d 65 6d 20 3d 20 26 61 4d        pMem = &aM
1eaa0 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20  em[pOp->p3];.   
1eab0 20 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74 54         memAboutT
1eac0 6f 43 68 61 6e 67 65 28 70 2c 20 70 4d 65 6d 29  oChange(p, pMem)
1ead0 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
1eae0 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
1eaf0 73 56 61 6c 69 64 28 70 4d 65 6d 29 20 29 3b 0a  sValid(pMem) );.
1eb00 0a 20 20 20 20 20 20 20 20 52 45 47 49 53 54 45  .        REGISTE
1eb10 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c  R_TRACE(pOp->p3,
1eb20 20 70 4d 65 6d 29 3b 0a 20 20 20 20 20 20 20 20   pMem);.        
1eb30 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e  sqlite3VdbeMemIn
1eb40 74 65 67 65 72 69 66 79 28 70 4d 65 6d 29 3b 0a  tegerify(pMem);.
1eb50 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
1eb60 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 4d  (pMem->flags & M
1eb70 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 20 20 2f  EM_Int)!=0 );  /
1eb80 2a 20 6d 65 6d 28 50 33 29 20 68 6f 6c 64 73 20  * mem(P3) holds 
1eb90 61 6e 20 69 6e 74 65 67 65 72 20 2a 2f 0a 20 20  an integer */.  
1eba0 20 20 20 20 20 20 69 66 28 20 70 4d 65 6d 2d 3e        if( pMem->
1ebb0 75 2e 69 3d 3d 4d 41 58 5f 52 4f 57 49 44 20 7c  u.i==MAX_ROWID |
1ebc0 7c 20 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52  | pC->useRandomR
1ebd0 6f 77 69 64 20 29 7b 0a 20 20 20 20 20 20 20 20  owid ){.        
1ebe0 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 46 55    rc = SQLITE_FU
1ebf0 4c 4c 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d  LL;   /* IMP: R-
1ec00 31 32 32 37 35 2d 36 31 33 33 38 20 2a 2f 0a 20  12275-61338 */. 
1ec10 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62           goto ab
1ec20 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
1ec30 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
1ec40 20 20 20 20 69 66 28 20 76 3c 70 4d 65 6d 2d 3e      if( v<pMem->
1ec50 75 2e 69 2b 31 20 29 7b 0a 20 20 20 20 20 20 20  u.i+1 ){.       
1ec60 20 20 20 76 20 3d 20 70 4d 65 6d 2d 3e 75 2e 69     v = pMem->u.i
1ec70 20 2b 20 31 3b 0a 20 20 20 20 20 20 20 20 7d 0a   + 1;.        }.
1ec80 20 20 20 20 20 20 20 20 70 4d 65 6d 2d 3e 75 2e          pMem->u.
1ec90 69 20 3d 20 76 3b 0a 20 20 20 20 20 20 7d 0a 23  i = v;.      }.#
1eca0 65 6e 64 69 66 0a 0a 20 20 20 20 20 20 73 71 6c  endif..      sql
1ecb0 69 74 65 33 42 74 72 65 65 53 65 74 43 61 63 68  ite3BtreeSetCach
1ecc0 65 64 52 6f 77 69 64 28 70 43 2d 3e 70 43 75 72  edRowid(pC->pCur
1ecd0 73 6f 72 2c 20 76 3c 4d 41 58 5f 52 4f 57 49 44  sor, v<MAX_ROWID
1ece0 20 3f 20 76 2b 31 20 3a 20 30 29 3b 0a 20 20 20   ? v+1 : 0);.   
1ecf0 20 7d 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 75   }.    if( pC->u
1ed00 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20 29 7b  seRandomRowid ){
1ed10 0a 20 20 20 20 20 20 2f 2a 20 49 4d 50 4c 45 4d  .      /* IMPLEM
1ed20 45 4e 54 41 54 49 4f 4e 2d 4f 46 3a 20 52 2d 30  ENTATION-OF: R-0
1ed30 37 36 37 37 2d 34 31 38 38 31 20 49 66 20 74 68  7677-41881 If th
1ed40 65 20 6c 61 72 67 65 73 74 20 52 4f 57 49 44 20  e largest ROWID 
1ed50 69 73 20 65 71 75 61 6c 20 74 6f 20 74 68 65 0a  is equal to the.
1ed60 20 20 20 20 20 20 2a 2a 20 6c 61 72 67 65 73 74        ** largest
1ed70 20 70 6f 73 73 69 62 6c 65 20 69 6e 74 65 67 65   possible intege
1ed80 72 20 28 39 32 32 33 33 37 32 30 33 36 38 35 34  r (9223372036854
1ed90 37 37 35 38 30 37 29 20 74 68 65 6e 20 74 68 65  775807) then the
1eda0 20 64 61 74 61 62 61 73 65 0a 20 20 20 20 20 20   database.      
1edb0 2a 2a 20 65 6e 67 69 6e 65 20 73 74 61 72 74 73  ** engine starts
1edc0 20 70 69 63 6b 69 6e 67 20 70 6f 73 69 74 69 76   picking positiv
1edd0 65 20 63 61 6e 64 69 64 61 74 65 20 52 4f 57 49  e candidate ROWI
1ede0 44 73 20 61 74 20 72 61 6e 64 6f 6d 20 75 6e 74  Ds at random unt
1edf0 69 6c 0a 20 20 20 20 20 20 2a 2a 20 69 74 20 66  il.      ** it f
1ee00 69 6e 64 73 20 6f 6e 65 20 74 68 61 74 20 69 73  inds one that is
1ee10 20 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c 79 20   not previously 
1ee20 75 73 65 64 2e 20 2a 2f 0a 20 20 20 20 20 20 61  used. */.      a
1ee30 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3d 3d  ssert( pOp->p3==
1ee40 30 20 29 3b 20 20 2f 2a 20 57 65 20 63 61 6e 6e  0 );  /* We cann
1ee50 6f 74 20 62 65 20 69 6e 20 72 61 6e 64 6f 6d 20  ot be in random 
1ee60 72 6f 77 69 64 20 6d 6f 64 65 20 69 66 20 74 68  rowid mode if th
1ee70 69 73 20 69 73 0a 20 20 20 20 20 20 20 20 20 20  is is.          
1ee80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ee90 20 20 20 2a 2a 20 61 6e 20 41 55 54 4f 49 4e 43     ** an AUTOINC
1eea0 52 45 4d 45 4e 54 20 74 61 62 6c 65 2e 20 2a 2f  REMENT table. */
1eeb0 0a 20 20 20 20 20 20 2f 2a 20 6f 6e 20 74 68 65  .      /* on the
1eec0 20 66 69 72 73 74 20 61 74 74 65 6d 70 74 2c 20   first attempt, 
1eed0 73 69 6d 70 6c 79 20 64 6f 20 6f 6e 65 20 6d 6f  simply do one mo
1eee0 72 65 20 74 68 61 6e 20 70 72 65 76 69 6f 75 73  re than previous
1eef0 20 2a 2f 0a 20 20 20 20 20 20 76 20 3d 20 64 62   */.      v = db
1ef00 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20 20  ->lastRowid;.   
1ef10 20 20 20 76 20 26 3d 20 28 4d 41 58 5f 52 4f 57     v &= (MAX_ROW
1ef20 49 44 3e 3e 31 29 3b 20 2f 2a 20 65 6e 73 75 72  ID>>1); /* ensur
1ef30 65 20 64 6f 65 73 6e 27 74 20 67 6f 20 6e 65 67  e doesn't go neg
1ef40 61 74 69 76 65 20 2a 2f 0a 20 20 20 20 20 20 76  ative */.      v
1ef50 2b 2b 3b 20 2f 2a 20 65 6e 73 75 72 65 20 6e 6f  ++; /* ensure no
1ef60 6e 2d 7a 65 72 6f 20 2a 2f 0a 20 20 20 20 20 20  n-zero */.      
1ef70 63 6e 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 77  cnt = 0;.      w
1ef80 68 69 6c 65 28 20 20 20 28 28 72 63 20 3d 20 73  hile(   ((rc = s
1ef90 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74  qlite3BtreeMovet
1efa0 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e 70 43  oUnpacked(pC->pC
1efb0 75 72 73 6f 72 2c 20 30 2c 20 28 75 36 34 29 76  ursor, 0, (u64)v
1efc0 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
1efd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1efe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eff0 20 20 20 30 2c 20 26 72 65 73 29 29 3d 3d 53 51     0, &res))==SQ
1f000 4c 49 54 45 5f 4f 4b 29 0a 20 20 20 20 20 20 20  LITE_OK).       
1f010 20 20 20 20 20 26 26 20 28 72 65 73 3d 3d 30 29       && (res==0)
1f020 0a 20 20 20 20 20 20 20 20 20 20 20 20 26 26 20  .            && 
1f030 28 2b 2b 63 6e 74 3c 31 30 30 29 29 7b 0a 20 20  (++cnt<100)){.  
1f040 20 20 20 20 20 20 2f 2a 20 63 6f 6c 6c 69 73 69        /* collisi
1f050 6f 6e 20 2d 20 74 72 79 20 61 6e 6f 74 68 65 72  on - try another
1f060 20 72 61 6e 64 6f 6d 20 72 6f 77 69 64 20 2a 2f   random rowid */
1f070 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
1f080 5f 72 61 6e 64 6f 6d 6e 65 73 73 28 73 69 7a 65  _randomness(size
1f090 6f 66 28 76 29 2c 20 26 76 29 3b 0a 20 20 20 20  of(v), &v);.    
1f0a0 20 20 20 20 69 66 28 20 63 6e 74 3c 35 20 29 7b      if( cnt<5 ){
1f0b0 0a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 74 72  .          /* tr
1f0c0 79 20 22 73 6d 61 6c 6c 22 20 72 61 6e 64 6f 6d  y "small" random
1f0d0 20 72 6f 77 69 64 73 20 66 6f 72 20 74 68 65 20   rowids for the 
1f0e0 69 6e 69 74 69 61 6c 20 61 74 74 65 6d 70 74 73  initial attempts
1f0f0 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 76 20   */.          v 
1f100 26 3d 20 30 78 66 66 66 66 66 66 3b 0a 20 20 20  &= 0xffffff;.   
1f110 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
1f120 20 20 20 20 20 20 76 20 26 3d 20 28 4d 41 58 5f        v &= (MAX_
1f130 52 4f 57 49 44 3e 3e 31 29 3b 20 2f 2a 20 65 6e  ROWID>>1); /* en
1f140 73 75 72 65 20 64 6f 65 73 6e 27 74 20 67 6f 20  sure doesn't go 
1f150 6e 65 67 61 74 69 76 65 20 2a 2f 0a 20 20 20 20  negative */.    
1f160 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 76 2b      }.        v+
1f170 2b 3b 20 2f 2a 20 65 6e 73 75 72 65 20 6e 6f 6e  +; /* ensure non
1f180 2d 7a 65 72 6f 20 2a 2f 0a 20 20 20 20 20 20 7d  -zero */.      }
1f190 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53  .      if( rc==S
1f1a0 51 4c 49 54 45 5f 4f 4b 20 26 26 20 72 65 73 3d  QLITE_OK && res=
1f1b0 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63  =0 ){.        rc
1f1c0 20 3d 20 53 51 4c 49 54 45 5f 46 55 4c 4c 3b 20   = SQLITE_FULL; 
1f1d0 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 33 38 32 31    /* IMP: R-3821
1f1e0 39 2d 35 33 30 30 32 20 2a 2f 0a 20 20 20 20 20  9-53002 */.     
1f1f0 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
1f200 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
1f210 20 20 7d 0a 20 20 20 20 20 20 61 73 73 65 72 74    }.      assert
1f220 28 20 76 3e 30 20 29 3b 20 20 2f 2a 20 45 56 3a  ( v>0 );  /* EV:
1f230 20 52 2d 34 30 38 31 32 2d 30 33 35 37 30 20 2a   R-40812-03570 *
1f240 2f 0a 20 20 20 20 7d 0a 20 20 20 20 70 43 2d 3e  /.    }.    pC->
1f250 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30  rowidIsValid = 0
1f260 3b 0a 20 20 20 20 70 43 2d 3e 64 65 66 65 72 72  ;.    pC->deferr
1f270 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20  edMoveto = 0;.  
1f280 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
1f290 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
1f2a0 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69  .  }.  pOut->u.i
1f2b0 20 3d 20 76 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d   = v;.  break;.}
1f2c0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 73  ../* Opcode: Ins
1f2d0 65 72 74 20 50 31 20 50 32 20 50 33 20 50 34 20  ert P1 P2 P3 P4 
1f2e0 50 35 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 61  P5.**.** Write a
1f2f0 6e 20 65 6e 74 72 79 20 69 6e 74 6f 20 74 68 65  n entry into the
1f300 20 74 61 62 6c 65 20 6f 66 20 63 75 72 73 6f 72   table of cursor
1f310 20 50 31 2e 20 20 41 20 6e 65 77 20 65 6e 74 72   P1.  A new entr
1f320 79 20 69 73 0a 2a 2a 20 63 72 65 61 74 65 64 20  y is.** created 
1f330 69 66 20 69 74 20 64 6f 65 73 6e 27 74 20 61 6c  if it doesn't al
1f340 72 65 61 64 79 20 65 78 69 73 74 20 6f 72 20 74  ready exist or t
1f350 68 65 20 64 61 74 61 20 66 6f 72 20 61 6e 20 65  he data for an e
1f360 78 69 73 74 69 6e 67 0a 2a 2a 20 65 6e 74 72 79  xisting.** entry
1f370 20 69 73 20 6f 76 65 72 77 72 69 74 74 65 6e 2e   is overwritten.
1f380 20 20 54 68 65 20 64 61 74 61 20 69 73 20 74 68    The data is th
1f390 65 20 76 61 6c 75 65 20 4d 45 4d 5f 42 6c 6f 62  e value MEM_Blob
1f3a0 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73   stored in regis
1f3b0 74 65 72 0a 2a 2a 20 6e 75 6d 62 65 72 20 50 32  ter.** number P2
1f3c0 2e 20 54 68 65 20 6b 65 79 20 69 73 20 73 74 6f  . The key is sto
1f3d0 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20  red in register 
1f3e0 50 33 2e 20 54 68 65 20 6b 65 79 20 6d 75 73 74  P3. The key must
1f3f0 0a 2a 2a 20 62 65 20 61 20 4d 45 4d 5f 49 6e 74  .** be a MEM_Int
1f400 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f  ..**.** If the O
1f410 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 66 6c  PFLAG_NCHANGE fl
1f420 61 67 20 6f 66 20 50 35 20 69 73 20 73 65 74 2c  ag of P5 is set,
1f430 20 74 68 65 6e 20 74 68 65 20 72 6f 77 20 63 68   then the row ch
1f440 61 6e 67 65 20 63 6f 75 6e 74 20 69 73 0a 2a 2a  ange count is.**
1f450 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 28 6f 74   incremented (ot
1f460 68 65 72 77 69 73 65 20 6e 6f 74 29 2e 20 20 49  herwise not).  I
1f470 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4c 41 53  f the OPFLAG_LAS
1f480 54 52 4f 57 49 44 20 66 6c 61 67 20 6f 66 20 50  TROWID flag of P
1f490 35 20 69 73 20 73 65 74 2c 0a 2a 2a 20 74 68 65  5 is set,.** the
1f4a0 6e 20 72 6f 77 69 64 20 69 73 20 73 74 6f 72 65  n rowid is store
1f4b0 64 20 66 6f 72 20 73 75 62 73 65 71 75 65 6e 74  d for subsequent
1f4c0 20 72 65 74 75 72 6e 20 62 79 20 74 68 65 0a 2a   return by the.*
1f4d0 2a 20 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69  * sqlite3_last_i
1f4e0 6e 73 65 72 74 5f 72 6f 77 69 64 28 29 20 66 75  nsert_rowid() fu
1f4f0 6e 63 74 69 6f 6e 20 28 6f 74 68 65 72 77 69 73  nction (otherwis
1f500 65 20 69 74 20 69 73 20 75 6e 6d 6f 64 69 66 69  e it is unmodifi
1f510 65 64 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ed)..**.** If th
1f520 65 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b  e OPFLAG_USESEEK
1f530 52 45 53 55 4c 54 20 66 6c 61 67 20 6f 66 20 50  RESULT flag of P
1f540 35 20 69 73 20 73 65 74 20 61 6e 64 20 69 66 20  5 is set and if 
1f550 74 68 65 20 72 65 73 75 6c 74 20 6f 66 0a 2a 2a  the result of.**
1f560 20 74 68 65 20 6c 61 73 74 20 73 65 65 6b 20 6f   the last seek o
1f570 70 65 72 61 74 69 6f 6e 20 28 4f 50 5f 4e 6f 74  peration (OP_Not
1f580 45 78 69 73 74 73 29 20 77 61 73 20 61 20 73 75  Exists) was a su
1f590 63 63 65 73 73 2c 20 74 68 65 6e 20 74 68 69 73  ccess, then this
1f5a0 0a 2a 2a 20 6f 70 65 72 61 74 69 6f 6e 20 77 69  .** operation wi
1f5b0 6c 6c 20 6e 6f 74 20 61 74 74 65 6d 70 74 20 74  ll not attempt t
1f5c0 6f 20 66 69 6e 64 20 74 68 65 20 61 70 70 72 6f  o find the appro
1f5d0 70 72 69 61 74 65 20 72 6f 77 20 62 65 66 6f 72  priate row befor
1f5e0 65 20 64 6f 69 6e 67 0a 2a 2a 20 74 68 65 20 69  e doing.** the i
1f5f0 6e 73 65 72 74 20 62 75 74 20 77 69 6c 6c 20 69  nsert but will i
1f600 6e 73 74 65 61 64 20 6f 76 65 72 77 72 69 74 65  nstead overwrite
1f610 20 74 68 65 20 72 6f 77 20 74 68 61 74 20 74 68   the row that th
1f620 65 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63  e cursor is.** c
1f630 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e  urrently pointin
1f640 67 20 74 6f 2e 20 20 50 72 65 73 75 6d 61 62 6c  g to.  Presumabl
1f650 79 2c 20 74 68 65 20 70 72 69 6f 72 20 4f 50 5f  y, the prior OP_
1f660 4e 6f 74 45 78 69 73 74 73 20 6f 70 63 6f 64 65  NotExists opcode
1f670 0a 2a 2a 20 68 61 73 20 61 6c 72 65 61 64 79 20  .** has already 
1f680 70 6f 73 69 74 69 6f 6e 65 64 20 74 68 65 20 63  positioned the c
1f690 75 72 73 6f 72 20 63 6f 72 72 65 63 74 6c 79 2e  ursor correctly.
1f6a0 20 20 54 68 69 73 20 69 73 20 61 6e 20 6f 70 74    This is an opt
1f6b0 69 6d 69 7a 61 74 69 6f 6e 0a 2a 2a 20 74 68 61  imization.** tha
1f6c0 74 20 62 6f 6f 73 74 73 20 70 65 72 66 6f 72 6d  t boosts perform
1f6d0 61 6e 63 65 20 62 79 20 61 76 6f 69 64 69 6e 67  ance by avoiding
1f6e0 20 72 65 64 75 6e 64 61 6e 74 20 73 65 65 6b 73   redundant seeks
1f6f0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f  ..**.** If the O
1f700 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45 20 66  PFLAG_ISUPDATE f
1f710 6c 61 67 20 69 73 20 73 65 74 2c 20 74 68 65 6e  lag is set, then
1f720 20 74 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20   this opcode is 
1f730 70 61 72 74 20 6f 66 20 61 6e 0a 2a 2a 20 55 50  part of an.** UP
1f740 44 41 54 45 20 6f 70 65 72 61 74 69 6f 6e 2e 20  DATE operation. 
1f750 20 4f 74 68 65 72 77 69 73 65 20 28 69 66 20 74   Otherwise (if t
1f760 68 65 20 66 6c 61 67 20 69 73 20 63 6c 65 61 72  he flag is clear
1f770 29 20 74 68 65 6e 20 74 68 69 73 20 6f 70 63 6f  ) then this opco
1f780 64 65 0a 2a 2a 20 69 73 20 70 61 72 74 20 6f 66  de.** is part of
1f790 20 61 6e 20 49 4e 53 45 52 54 20 6f 70 65 72 61   an INSERT opera
1f7a0 74 69 6f 6e 2e 20 20 54 68 65 20 64 69 66 66 65  tion.  The diffe
1f7b0 72 65 6e 63 65 20 69 73 20 6f 6e 6c 79 20 69 6d  rence is only im
1f7c0 70 6f 72 74 61 6e 74 20 74 6f 0a 2a 2a 20 74 68  portant to.** th
1f7d0 65 20 75 70 64 61 74 65 20 68 6f 6f 6b 2e 0a 2a  e update hook..*
1f7e0 2a 0a 2a 2a 20 50 61 72 61 6d 65 74 65 72 20 50  *.** Parameter P
1f7f0 34 20 6d 61 79 20 70 6f 69 6e 74 20 74 6f 20 61  4 may point to a
1f800 20 54 61 62 6c 65 20 73 74 72 75 63 74 75 72 65   Table structure
1f810 2c 20 6f 72 20 6d 61 79 20 62 65 20 4e 55 4c 4c  , or may be NULL
1f820 2e 20 49 66 20 69 74 20 69 73 20 0a 2a 2a 20 6e  . If it is .** n
1f830 6f 74 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 74 68  ot NULL, then th
1f840 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20 28 73  e update-hook (s
1f850 71 6c 69 74 65 33 2e 78 55 70 64 61 74 65 43 61  qlite3.xUpdateCa
1f860 6c 6c 62 61 63 6b 29 20 69 73 20 69 6e 76 6f 6b  llback) is invok
1f870 65 64 20 0a 2a 2a 20 66 6f 6c 6c 6f 77 69 6e 67  ed .** following
1f880 20 61 20 73 75 63 63 65 73 73 66 75 6c 20 69 6e   a successful in
1f890 73 65 72 74 2e 0a 2a 2a 0a 2a 2a 20 28 57 41 52  sert..**.** (WAR
1f8a0 4e 49 4e 47 2f 54 4f 44 4f 3a 20 49 66 20 50 31  NING/TODO: If P1
1f8b0 20 69 73 20 61 20 70 73 65 75 64 6f 2d 63 75 72   is a pseudo-cur
1f8c0 73 6f 72 20 61 6e 64 20 50 32 20 69 73 20 64 79  sor and P2 is dy
1f8d0 6e 61 6d 69 63 61 6c 6c 79 0a 2a 2a 20 61 6c 6c  namically.** all
1f8e0 6f 63 61 74 65 64 2c 20 74 68 65 6e 20 6f 77 6e  ocated, then own
1f8f0 65 72 73 68 69 70 20 6f 66 20 50 32 20 69 73 20  ership of P2 is 
1f900 74 72 61 6e 73 66 65 72 72 65 64 20 74 6f 20 74  transferred to t
1f910 68 65 20 70 73 65 75 64 6f 2d 63 75 72 73 6f 72  he pseudo-cursor
1f920 0a 2a 2a 20 61 6e 64 20 72 65 67 69 73 74 65 72  .** and register
1f930 20 50 32 20 62 65 63 6f 6d 65 73 20 65 70 68 65   P2 becomes ephe
1f940 6d 65 72 61 6c 2e 20 20 49 66 20 74 68 65 20 63  meral.  If the c
1f950 75 72 73 6f 72 20 69 73 20 63 68 61 6e 67 65 64  ursor is changed
1f960 2c 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 6f  , the.** value o
1f970 66 20 72 65 67 69 73 74 65 72 20 50 32 20 77 69  f register P2 wi
1f980 6c 6c 20 74 68 65 6e 20 63 68 61 6e 67 65 2e 20  ll then change. 
1f990 20 4d 61 6b 65 20 73 75 72 65 20 74 68 69 73 20   Make sure this 
1f9a0 64 6f 65 73 20 6e 6f 74 0a 2a 2a 20 63 61 75 73  does not.** caus
1f9b0 65 20 61 6e 79 20 70 72 6f 62 6c 65 6d 73 2e 29  e any problems.)
1f9c0 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74  .**.** This inst
1f9d0 72 75 63 74 69 6f 6e 20 6f 6e 6c 79 20 77 6f 72  ruction only wor
1f9e0 6b 73 20 6f 6e 20 74 61 62 6c 65 73 2e 20 20 54  ks on tables.  T
1f9f0 68 65 20 65 71 75 69 76 61 6c 65 6e 74 20 69 6e  he equivalent in
1fa00 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 66 6f 72  struction.** for
1fa10 20 69 6e 64 69 63 65 73 20 69 73 20 4f 50 5f 49   indices is OP_I
1fa20 64 78 49 6e 73 65 72 74 2e 0a 2a 2f 0a 2f 2a 20  dxInsert..*/./* 
1fa30 4f 70 63 6f 64 65 3a 20 49 6e 73 65 72 74 49 6e  Opcode: InsertIn
1fa40 74 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  t P1 P2 P3 P4 P5
1fa50 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b  .**.** This work
1fa60 73 20 65 78 61 63 74 6c 79 20 6c 69 6b 65 20 4f  s exactly like O
1fa70 50 5f 49 6e 73 65 72 74 20 65 78 63 65 70 74 20  P_Insert except 
1fa80 74 68 61 74 20 74 68 65 20 6b 65 79 20 69 73 20  that the key is 
1fa90 74 68 65 0a 2a 2a 20 69 6e 74 65 67 65 72 20 76  the.** integer v
1faa0 61 6c 75 65 20 50 33 2c 20 6e 6f 74 20 74 68 65  alue P3, not the
1fab0 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 69 6e   value of the in
1fac0 74 65 67 65 72 20 73 74 6f 72 65 64 20 69 6e 20  teger stored in 
1fad0 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2f 0a  register P3..*/.
1fae0 63 61 73 65 20 4f 50 5f 49 6e 73 65 72 74 3a 20  case OP_Insert: 
1faf0 0a 63 61 73 65 20 4f 50 5f 49 6e 73 65 72 74 49  .case OP_InsertI
1fb00 6e 74 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70 44 61  nt: {.  Mem *pDa
1fb10 74 61 3b 20 20 20 20 20 20 20 2f 2a 20 4d 45 4d  ta;       /* MEM
1fb20 20 63 65 6c 6c 20 68 6f 6c 64 69 6e 67 20 64 61   cell holding da
1fb30 74 61 20 66 6f 72 20 74 68 65 20 72 65 63 6f 72  ta for the recor
1fb40 64 20 74 6f 20 62 65 20 69 6e 73 65 72 74 65 64  d to be inserted
1fb50 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4b 65 79 3b   */.  Mem *pKey;
1fb60 20 20 20 20 20 20 20 20 2f 2a 20 4d 45 4d 20 63          /* MEM c
1fb70 65 6c 6c 20 68 6f 6c 64 69 6e 67 20 6b 65 79 20  ell holding key 
1fb80 20 66 6f 72 20 74 68 65 20 72 65 63 6f 72 64 20   for the record 
1fb90 2a 2f 0a 20 20 69 36 34 20 69 4b 65 79 3b 20 20  */.  i64 iKey;  
1fba0 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 69 6e         /* The in
1fbb0 74 65 67 65 72 20 52 4f 57 49 44 20 6f 72 20 6b  teger ROWID or k
1fbc0 65 79 20 66 6f 72 20 74 68 65 20 72 65 63 6f 72  ey for the recor
1fbd0 64 20 74 6f 20 62 65 20 69 6e 73 65 72 74 65 64  d to be inserted
1fbe0 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72   */.  VdbeCursor
1fbf0 20 2a 70 43 3b 20 20 20 2f 2a 20 43 75 72 73 6f   *pC;   /* Curso
1fc00 72 20 74 6f 20 74 61 62 6c 65 20 69 6e 74 6f 20  r to table into 
1fc10 77 68 69 63 68 20 69 6e 73 65 72 74 20 69 73 20  which insert is 
1fc20 77 72 69 74 74 65 6e 20 2a 2f 0a 20 20 69 6e 74  written */.  int
1fc30 20 6e 5a 65 72 6f 3b 20 20 20 20 20 20 20 20 2f   nZero;        /
1fc40 2a 20 4e 75 6d 62 65 72 20 6f 66 20 7a 65 72 6f  * Number of zero
1fc50 2d 62 79 74 65 73 20 74 6f 20 61 70 70 65 6e 64  -bytes to append
1fc60 20 2a 2f 0a 20 20 69 6e 74 20 73 65 65 6b 52 65   */.  int seekRe
1fc70 73 75 6c 74 3b 20 20 20 2f 2a 20 52 65 73 75 6c  sult;   /* Resul
1fc80 74 20 6f 66 20 70 72 69 6f 72 20 73 65 65 6b 20  t of prior seek 
1fc90 6f 72 20 30 20 69 66 20 6e 6f 20 55 53 45 53 45  or 0 if no USESE
1fca0 45 4b 52 45 53 55 4c 54 20 66 6c 61 67 20 2a 2f  EKRESULT flag */
1fcb0 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
1fcc0 44 62 3b 20 20 2f 2a 20 64 61 74 61 62 61 73 65  Db;  /* database
1fcd0 20 6e 61 6d 65 20 2d 20 75 73 65 64 20 62 79 20   name - used by 
1fce0 74 68 65 20 75 70 64 61 74 65 20 68 6f 6f 6b 20  the update hook 
1fcf0 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62  */.  Table *pTab
1fd00 3b 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20  ;      /* Table 
1fd10 73 74 72 75 63 74 75 72 65 20 2d 20 75 73 65 64  structure - used
1fd20 20 62 79 20 75 70 64 61 74 65 20 61 6e 64 20 70   by update and p
1fd30 72 65 2d 75 70 64 61 74 65 20 68 6f 6f 6b 73 20  re-update hooks 
1fd40 2a 2f 0a 20 20 69 6e 74 20 6f 70 3b 20 20 20 20  */.  int op;    
1fd50 20 20 20 20 20 20 20 2f 2a 20 4f 70 63 6f 64 65         /* Opcode
1fd60 20 66 6f 72 20 75 70 64 61 74 65 20 68 6f 6f 6b   for update hook
1fd70 3a 20 53 51 4c 49 54 45 5f 55 50 44 41 54 45 20  : SQLITE_UPDATE 
1fd80 6f 72 20 53 51 4c 49 54 45 5f 49 4e 53 45 52 54  or SQLITE_INSERT
1fd90 20 2a 2f 0a 0a 20 20 70 44 61 74 61 20 3d 20 26   */..  pData = &
1fda0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
1fdb0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
1fdc0 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
1fdd0 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61  ->nCursor );.  a
1fde0 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
1fdf0 64 28 70 44 61 74 61 29 20 29 3b 0a 20 20 70 43  d(pData) );.  pC
1fe00 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
1fe10 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
1fe20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  pC!=0 );.  asser
1fe30 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d  t( pC->pCursor!=
1fe40 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
1fe50 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65  C->pseudoTableRe
1fe60 67 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  g==0 );.  assert
1fe70 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b  ( pC->isTable );
1fe80 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1fe90 70 34 74 79 70 65 3d 3d 50 34 5f 54 41 42 4c 45  p4type==P4_TABLE
1fea0 20 7c 7c 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d   || pOp->p4type=
1feb0 3d 50 34 5f 4e 4f 54 55 53 45 44 20 29 3b 0a 20  =P4_NOTUSED );. 
1fec0 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
1fed0 70 4f 70 2d 3e 70 32 2c 20 70 44 61 74 61 29 3b  pOp->p2, pData);
1fee0 0a 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63  ..  if( pOp->opc
1fef0 6f 64 65 3d 3d 4f 50 5f 49 6e 73 65 72 74 20 29  ode==OP_Insert )
1ff00 7b 0a 20 20 20 20 70 4b 65 79 20 3d 20 26 61 4d  {.    pKey = &aM
1ff10 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20  em[pOp->p3];.   
1ff20 20 61 73 73 65 72 74 28 20 70 4b 65 79 2d 3e 66   assert( pKey->f
1ff30 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29  lags & MEM_Int )
1ff40 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65  ;.    assert( me
1ff50 6d 49 73 56 61 6c 69 64 28 70 4b 65 79 29 20 29  mIsValid(pKey) )
1ff60 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54  ;.    REGISTER_T
1ff70 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4b  RACE(pOp->p3, pK
1ff80 65 79 29 3b 0a 20 20 20 20 69 4b 65 79 20 3d 20  ey);.    iKey = 
1ff90 70 4b 65 79 2d 3e 75 2e 69 3b 0a 20 20 7d 65 6c  pKey->u.i;.  }el
1ffa0 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20  se{.    assert( 
1ffb0 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
1ffc0 49 6e 73 65 72 74 49 6e 74 20 29 3b 0a 20 20 20  InsertInt );.   
1ffd0 20 69 4b 65 79 20 3d 20 70 4f 70 2d 3e 70 33 3b   iKey = pOp->p3;
1ffe0 0a 20 20 7d 0a 0a 20 20 69 66 28 20 70 4f 70 2d  .  }..  if( pOp-
1fff0 3e 70 34 74 79 70 65 3d 3d 50 34 5f 54 41 42 4c  >p4type==P4_TABL
20000 45 20 26 26 20 48 41 53 5f 55 50 44 41 54 45 5f  E && HAS_UPDATE_
20010 48 4f 4f 4b 28 64 62 29 20 29 7b 0a 20 20 20 20  HOOK(db) ){.    
20020 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61  assert( pC->isTa
20030 62 6c 65 20 29 3b 0a 20 20 20 20 61 73 73 65 72  ble );.    asser
20040 74 28 20 70 43 2d 3e 69 44 62 3e 3d 30 20 29 3b  t( pC->iDb>=0 );
20050 0a 20 20 20 20 7a 44 62 20 3d 20 64 62 2d 3e 61  .    zDb = db->a
20060 44 62 5b 70 43 2d 3e 69 44 62 5d 2e 7a 4e 61 6d  Db[pC->iDb].zNam
20070 65 3b 0a 20 20 20 20 70 54 61 62 20 3d 20 70 4f  e;.    pTab = pO
20080 70 2d 3e 70 34 2e 70 54 61 62 3b 0a 20 20 20 20  p->p4.pTab;.    
20090 6f 70 20 3d 20 28 28 70 4f 70 2d 3e 70 35 20 26  op = ((pOp->p5 &
200a0 20 4f 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45   OPFLAG_ISUPDATE
200b0 29 20 3f 20 53 51 4c 49 54 45 5f 55 50 44 41 54  ) ? SQLITE_UPDAT
200c0 45 20 3a 20 53 51 4c 49 54 45 5f 49 4e 53 45 52  E : SQLITE_INSER
200d0 54 29 3b 0a 20 20 7d 0a 0a 23 69 66 64 65 66 20  T);.  }..#ifdef 
200e0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52  SQLITE_ENABLE_PR
200f0 45 55 50 44 41 54 45 5f 48 4f 4f 4b 0a 20 20 2f  EUPDATE_HOOK.  /
20100 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 70 72 65  * Invoke the pre
20110 2d 75 70 64 61 74 65 20 68 6f 6f 6b 2c 20 69 66  -update hook, if
20120 20 61 6e 79 20 2a 2f 0a 20 20 69 66 28 20 64 62   any */.  if( db
20130 2d 3e 78 50 72 65 55 70 64 61 74 65 43 61 6c 6c  ->xPreUpdateCall
20140 62 61 63 6b 20 0a 20 20 20 26 26 20 70 4f 70 2d  back .   && pOp-
20150 3e 70 34 74 79 70 65 3d 3d 50 34 5f 54 41 42 4c  >p4type==P4_TABL
20160 45 0a 20 20 20 26 26 20 28 21 28 70 4f 70 2d 3e  E.   && (!(pOp->
20170 70 35 20 26 20 4f 50 46 4c 41 47 5f 49 53 55 50  p5 & OPFLAG_ISUP
20180 44 41 54 45 29 20 7c 7c 20 70 43 2d 3e 72 6f 77  DATE) || pC->row
20190 69 64 49 73 56 61 6c 69 64 3d 3d 30 29 0a 20 20  idIsValid==0).  
201a0 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
201b0 62 65 50 72 65 55 70 64 61 74 65 48 6f 6f 6b 28  bePreUpdateHook(
201c0 70 2c 20 70 43 2c 20 53 51 4c 49 54 45 5f 49 4e  p, pC, SQLITE_IN
201d0 53 45 52 54 2c 20 7a 44 62 2c 20 70 54 61 62 2c  SERT, zDb, pTab,
201e0 20 69 4b 65 79 2c 20 70 4f 70 2d 3e 70 32 29 3b   iKey, pOp->p2);
201f0 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 69  .  }.#endif..  i
20200 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46  f( pOp->p5 & OPF
20210 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29 20 70 2d  LAG_NCHANGE ) p-
20220 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 69 66  >nChange++;.  if
20230 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c  ( pOp->p5 & OPFL
20240 41 47 5f 4c 41 53 54 52 4f 57 49 44 20 29 20 64  AG_LASTROWID ) d
20250 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 69  b->lastRowid = i
20260 4b 65 79 3b 0a 20 20 69 66 28 20 70 44 61 74 61  Key;.  if( pData
20270 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ->flags & MEM_Nu
20280 6c 6c 20 29 7b 0a 20 20 20 20 70 44 61 74 61 2d  ll ){.    pData-
20290 3e 7a 20 3d 20 30 3b 0a 20 20 20 20 70 44 61 74  >z = 0;.    pDat
202a0 61 2d 3e 6e 20 3d 20 30 3b 0a 20 20 7d 65 6c 73  a->n = 0;.  }els
202b0 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  e{.    assert( p
202c0 44 61 74 61 2d 3e 66 6c 61 67 73 20 26 20 28 4d  Data->flags & (M
202d0 45 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f 53 74 72 29  EM_Blob|MEM_Str)
202e0 20 29 3b 0a 20 20 7d 0a 20 20 73 65 65 6b 52 65   );.  }.  seekRe
202f0 73 75 6c 74 20 3d 20 28 28 70 4f 70 2d 3e 70 35  sult = ((pOp->p5
20300 20 26 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45   & OPFLAG_USESEE
20310 4b 52 45 53 55 4c 54 29 20 3f 20 70 43 2d 3e 73  KRESULT) ? pC->s
20320 65 65 6b 52 65 73 75 6c 74 20 3a 20 30 29 3b 0a  eekResult : 0);.
20330 20 20 69 66 28 20 70 44 61 74 61 2d 3e 66 6c 61    if( pData->fla
20340 67 73 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b  gs & MEM_Zero ){
20350 0a 20 20 20 20 6e 5a 65 72 6f 20 3d 20 70 44 61  .    nZero = pDa
20360 74 61 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a 20 20 7d  ta->u.nZero;.  }
20370 65 6c 73 65 7b 0a 20 20 20 20 6e 5a 65 72 6f 20  else{.    nZero 
20380 3d 20 30 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74  = 0;.  }.  sqlit
20390 65 33 42 74 72 65 65 53 65 74 43 61 63 68 65 64  e3BtreeSetCached
203a0 52 6f 77 69 64 28 70 43 2d 3e 70 43 75 72 73 6f  Rowid(pC->pCurso
203b0 72 2c 20 30 29 3b 0a 20 20 72 63 20 3d 20 73 71  r, 0);.  rc = sq
203c0 6c 69 74 65 33 42 74 72 65 65 49 6e 73 65 72 74  lite3BtreeInsert
203d0 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 30 2c  (pC->pCursor, 0,
203e0 20 69 4b 65 79 2c 0a 20 20 20 20 20 20 20 20 20   iKey,.         
203f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20400 20 70 44 61 74 61 2d 3e 7a 2c 20 70 44 61 74 61   pData->z, pData
20410 2d 3e 6e 2c 20 6e 5a 65 72 6f 2c 0a 20 20 20 20  ->n, nZero,.    
20420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20430 20 20 20 20 20 20 70 4f 70 2d 3e 70 35 20 26 20        pOp->p5 & 
20440 4f 50 46 4c 41 47 5f 41 50 50 45 4e 44 2c 20 73  OPFLAG_APPEND, s
20450 65 65 6b 52 65 73 75 6c 74 0a 20 20 29 3b 0a 20  eekResult.  );. 
20460 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69   pC->rowidIsVali
20470 64 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 64 65 66  d = 0;.  pC->def
20480 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b  erredMoveto = 0;
20490 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74  .  pC->cacheStat
204a0 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45  us = CACHE_STALE
204b0 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74  ;..  /* Invoke t
204c0 68 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20 69  he update-hook i
204d0 66 20 72 65 71 75 69 72 65 64 2e 20 2a 2f 0a 20  f required. */. 
204e0 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
204f0 4f 4b 20 26 26 20 64 62 2d 3e 78 55 70 64 61 74  OK && db->xUpdat
20500 65 43 61 6c 6c 62 61 63 6b 20 26 26 20 70 4f 70  eCallback && pOp
20510 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20 20 20 64 62  ->p4.z ){.    db
20520 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63  ->xUpdateCallbac
20530 6b 28 64 62 2d 3e 70 55 70 64 61 74 65 41 72 67  k(db->pUpdateArg
20540 2c 20 6f 70 2c 20 7a 44 62 2c 20 70 54 61 62 2d  , op, zDb, pTab-
20550 3e 7a 4e 61 6d 65 2c 20 69 4b 65 79 29 3b 0a 20  >zName, iKey);. 
20560 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
20570 2a 20 4f 70 63 6f 64 65 3a 20 44 65 6c 65 74 65  * Opcode: Delete
20580 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a   P1 P2 P3 P4 *.*
20590 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 74 68 65 20  *.** Delete the 
205a0 72 65 63 6f 72 64 20 61 74 20 77 68 69 63 68 20  record at which 
205b0 74 68 65 20 50 31 20 63 75 72 73 6f 72 20 69 73  the P1 cursor is
205c0 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74   currently point
205d0 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63  ing..**.** The c
205e0 75 72 73 6f 72 20 77 69 6c 6c 20 62 65 20 6c 65  ursor will be le
205f0 66 74 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 65  ft pointing at e
20600 69 74 68 65 72 20 74 68 65 20 6e 65 78 74 20 6f  ither the next o
20610 72 20 74 68 65 20 70 72 65 76 69 6f 75 73 0a 2a  r the previous.*
20620 2a 20 72 65 63 6f 72 64 20 69 6e 20 74 68 65 20  * record in the 
20630 74 61 62 6c 65 2e 20 49 66 20 69 74 20 69 73 20  table. If it is 
20640 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67 20 61 74  left pointing at
20650 20 74 68 65 20 6e 65 78 74 20 72 65 63 6f 72 64   the next record
20660 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20 6e 65  , then.** the ne
20670 78 74 20 4e 65 78 74 20 69 6e 73 74 72 75 63 74  xt Next instruct
20680 69 6f 6e 20 77 69 6c 6c 20 62 65 20 61 20 6e 6f  ion will be a no
20690 2d 6f 70 2e 20 20 48 65 6e 63 65 20 69 74 20 69  -op.  Hence it i
206a0 73 20 4f 4b 20 74 6f 20 64 65 6c 65 74 65 0a 2a  s OK to delete.*
206b0 2a 20 61 20 72 65 63 6f 72 64 20 66 72 6f 6d 20  * a record from 
206c0 77 69 74 68 69 6e 20 61 6e 20 4e 65 78 74 20 6c  within an Next l
206d0 6f 6f 70 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  oop..**.** If th
206e0 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45  e OPFLAG_NCHANGE
206f0 20 66 6c 61 67 20 6f 66 20 50 32 20 69 73 20 73   flag of P2 is s
20700 65 74 2c 20 74 68 65 6e 20 74 68 65 20 72 6f 77  et, then the row
20710 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 20 69 73   change count is
20720 0a 2a 2a 20 69 6e 63 72 65 6d 65 6e 74 65 64 20  .** incremented 
20730 28 6f 74 68 65 72 77 69 73 65 20 6e 6f 74 29 2e  (otherwise not).
20740 0a 2a 2a 0a 2a 2a 20 50 31 20 6d 75 73 74 20 6e  .**.** P1 must n
20750 6f 74 20 62 65 20 70 73 65 75 64 6f 2d 74 61 62  ot be pseudo-tab
20760 6c 65 2e 20 20 49 74 20 68 61 73 20 74 6f 20 62  le.  It has to b
20770 65 20 61 20 72 65 61 6c 20 74 61 62 6c 65 20 77  e a real table w
20780 69 74 68 0a 2a 2a 20 6d 75 6c 74 69 70 6c 65 20  ith.** multiple 
20790 72 6f 77 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  rows..**.** If P
207a0 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 20 74 68  4 is not NULL th
207b0 65 6e 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20  en it points to 
207c0 61 20 54 61 62 6c 65 20 73 74 72 75 74 75 72 65  a Table struture
207d0 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65 20 65  . In this case e
207e0 69 74 68 65 72 20 0a 2a 2a 20 74 68 65 20 75 70  ither .** the up
207f0 64 61 74 65 20 6f 72 20 70 72 65 2d 75 70 64 61  date or pre-upda
20800 74 65 20 68 6f 6f 6b 2c 20 6f 72 20 62 6f 74 68  te hook, or both
20810 2c 20 6d 61 79 20 62 65 20 69 6e 76 6f 6b 65 64  , may be invoked
20820 2e 20 54 68 65 20 50 31 20 63 75 72 73 6f 72 20  . The P1 cursor 
20830 6d 75 73 74 0a 2a 2a 20 68 61 76 65 20 62 65 65  must.** have bee
20840 6e 20 70 6f 73 69 74 69 6f 6e 65 64 20 75 73 69  n positioned usi
20850 6e 67 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20 70  ng OP_NotFound p
20860 72 69 6f 72 20 74 6f 20 69 6e 76 6f 6b 69 6e 67  rior to invoking
20870 20 74 68 69 73 20 6f 70 63 6f 64 65 20 69 6e 20   this opcode in 
20880 0a 2a 2a 20 74 68 69 73 20 63 61 73 65 2e 20 53  .** this case. S
20890 70 65 63 69 66 69 63 61 6c 6c 79 2c 20 69 66 20  pecifically, if 
208a0 6f 6e 65 20 69 73 20 63 6f 6e 66 69 67 75 72 65  one is configure
208b0 64 2c 20 74 68 65 20 70 72 65 2d 75 70 64 61 74  d, the pre-updat
208c0 65 20 68 6f 6f 6b 20 69 73 20 0a 2a 2a 20 69 6e  e hook is .** in
208d0 76 6f 6b 65 64 20 69 66 20 50 34 20 69 73 20 6e  voked if P4 is n
208e0 6f 74 20 4e 55 4c 4c 2e 20 54 68 65 20 75 70 64  ot NULL. The upd
208f0 61 74 65 2d 68 6f 6f 6b 20 69 73 20 69 6e 76 6f  ate-hook is invo
20900 6b 65 64 20 69 66 20 6f 6e 65 20 69 73 20 63 6f  ked if one is co
20910 6e 66 69 67 75 72 65 64 2c 20 0a 2a 2a 20 50 34  nfigured, .** P4
20920 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 61 6e   is not NULL, an
20930 64 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48  d the OPFLAG_NCH
20940 41 4e 47 45 20 66 6c 61 67 20 69 73 20 73 65 74  ANGE flag is set
20950 20 69 6e 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66   in P2..**.** If
20960 20 74 68 65 20 4f 50 46 4c 41 47 5f 49 53 55 50   the OPFLAG_ISUP
20970 44 41 54 45 20 66 6c 61 67 20 69 73 20 73 65 74  DATE flag is set
20980 20 69 6e 20 50 32 2c 20 74 68 65 6e 20 50 33 20   in P2, then P3 
20990 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 61 64 64  contains the add
209a0 72 65 73 73 0a 2a 2a 20 6f 66 20 74 68 65 20 6d  ress.** of the m
209b0 65 6d 6f 72 79 20 63 65 6c 6c 20 74 68 61 74 20  emory cell that 
209c0 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 76 61 6c  contains the val
209d0 75 65 20 74 68 61 74 20 74 68 65 20 72 6f 77 69  ue that the rowi
209e0 64 20 6f 66 20 74 68 65 20 72 6f 77 20 77 69 6c  d of the row wil
209f0 6c 0a 2a 2a 20 62 65 20 73 65 74 20 74 6f 20 62  l.** be set to b
20a00 79 20 74 68 65 20 75 70 64 61 74 65 2e 0a 2a 2f  y the update..*/
20a10 0a 63 61 73 65 20 4f 50 5f 44 65 6c 65 74 65 3a  .case OP_Delete:
20a20 20 7b 0a 20 20 69 36 34 20 69 4b 65 79 3b 0a 20   {.  i64 iKey;. 
20a30 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
20a40 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
20a50 44 62 3b 0a 20 20 54 61 62 6c 65 20 2a 70 54 61  Db;.  Table *pTa
20a60 62 3b 0a 20 20 69 6e 74 20 6f 70 66 6c 61 67 73  b;.  int opflags
20a70 3b 0a 0a 20 20 6f 70 66 6c 61 67 73 20 3d 20 70  ;..  opflags = p
20a80 4f 70 2d 3e 70 32 3b 0a 20 20 69 4b 65 79 20 3d  Op->p2;.  iKey =
20a90 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   0;.  assert( pO
20aa0 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
20ab0 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
20ac0 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
20ad0 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
20ae0 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
20af0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75   assert( pC->pCu
20b00 72 73 6f 72 21 3d 30 20 29 3b 20 20 2f 2a 20 4f  rsor!=0 );  /* O
20b10 6e 6c 79 20 76 61 6c 69 64 20 66 6f 72 20 72 65  nly valid for re
20b20 61 6c 20 74 61 62 6c 65 73 2c 20 6e 6f 20 70 73  al tables, no ps
20b30 65 75 64 6f 74 61 62 6c 65 73 20 2a 2f 0a 20 20  eudotables */.  
20b40 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
20b50 79 70 65 3d 3d 50 34 5f 54 41 42 4c 45 20 7c 7c  ype==P4_TABLE ||
20b60 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
20b70 5f 4e 4f 54 55 53 45 44 20 29 3b 0a 0a 20 20 2f  _NOTUSED );..  /
20b80 2a 20 54 68 65 20 4f 50 5f 44 65 6c 65 74 65 20  * The OP_Delete 
20b90 6f 70 63 6f 64 65 20 61 6c 77 61 79 73 20 66 6f  opcode always fo
20ba0 6c 6c 6f 77 73 20 61 6e 20 4f 50 5f 4e 6f 74 45  llows an OP_NotE
20bb0 78 69 73 74 73 20 6f 72 20 4f 50 5f 4c 61 73 74  xists or OP_Last
20bc0 20 6f 72 0a 20 20 2a 2a 20 4f 50 5f 43 6f 6c 75   or.  ** OP_Colu
20bd0 6d 6e 20 6f 6e 20 74 68 65 20 73 61 6d 65 20 74  mn on the same t
20be0 61 62 6c 65 20 77 69 74 68 6f 75 74 20 61 6e 79  able without any
20bf0 20 69 6e 74 65 72 76 65 6e 69 6e 67 20 6f 70 65   intervening ope
20c00 72 61 74 69 6f 6e 73 20 74 68 61 74 0a 20 20 2a  rations that.  *
20c10 2a 20 6d 69 67 68 74 20 6d 6f 76 65 20 6f 72 20  * might move or 
20c20 69 6e 76 61 6c 69 64 61 74 65 20 74 68 65 20 63  invalidate the c
20c30 75 72 73 6f 72 2e 20 20 48 65 6e 63 65 20 63 75  ursor.  Hence cu
20c40 72 73 6f 72 20 70 43 20 69 73 20 61 6c 77 61 79  rsor pC is alway
20c50 73 20 70 6f 69 6e 74 69 6e 67 0a 20 20 2a 2a 20  s pointing.  ** 
20c60 74 6f 20 74 68 65 20 72 6f 77 20 74 6f 20 62 65  to the row to be
20c70 20 64 65 6c 65 74 65 64 20 61 6e 64 20 74 68 65   deleted and the
20c80 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73   sqlite3VdbeCurs
20c90 6f 72 4d 6f 76 65 74 6f 28 29 20 6f 70 65 72 61  orMoveto() opera
20ca0 74 69 6f 6e 0a 20 20 2a 2a 20 62 65 6c 6f 77 20  tion.  ** below 
20cb0 69 73 20 61 6c 77 61 79 73 20 61 20 6e 6f 2d 6f  is always a no-o
20cc0 70 20 61 6e 64 20 63 61 6e 6e 6f 74 20 66 61 69  p and cannot fai
20cd0 6c 2e 20 20 57 65 20 77 69 6c 6c 20 72 75 6e 20  l.  We will run 
20ce0 69 74 20 61 6e 79 68 6f 77 2c 20 74 68 6f 75 67  it anyhow, thoug
20cf0 68 2c 0a 20 20 2a 2a 20 74 6f 20 67 75 61 72 64  h,.  ** to guard
20d00 20 61 67 61 69 6e 73 74 20 66 75 74 75 72 65 20   against future 
20d10 63 68 61 6e 67 65 73 20 74 6f 20 74 68 65 20 63  changes to the c
20d20 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 2e 0a 20  ode generator.. 
20d30 20 2a 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70   **/.  assert( p
20d40 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
20d50 6f 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 73  o==0 );.  rc = s
20d60 71 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72  qlite3VdbeCursor
20d70 4d 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20 69 66  Moveto(pC);.  if
20d80 28 20 4e 45 56 45 52 28 72 63 21 3d 53 51 4c 49  ( NEVER(rc!=SQLI
20d90 54 45 5f 4f 4b 29 20 29 20 67 6f 74 6f 20 61 62  TE_OK) ) goto ab
20da0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
20db0 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 75  ;..  /* If the u
20dc0 70 64 61 74 65 2d 68 6f 6f 6b 20 6f 72 20 70 72  pdate-hook or pr
20dd0 65 2d 75 70 64 61 74 65 2d 68 6f 6f 6b 20 77 69  e-update-hook wi
20de0 6c 6c 20 62 65 20 69 6e 76 6f 6b 65 64 2c 20 73  ll be invoked, s
20df0 65 74 20 69 4b 65 79 20 74 6f 20 0a 20 20 2a 2a  et iKey to .  **
20e00 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68   the rowid of th
20e10 65 20 72 6f 77 20 62 65 69 6e 67 20 64 65 6c 65  e row being dele
20e20 74 65 64 2e 20 53 65 74 20 7a 44 62 20 61 6e 64  ted. Set zDb and
20e30 20 7a 54 61 62 20 61 73 20 77 65 6c 6c 2e 0a 20   zTab as well.. 
20e40 20 2a 2f 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70   */.  if( pOp->p
20e50 34 2e 7a 20 26 26 20 48 41 53 5f 55 50 44 41 54  4.z && HAS_UPDAT
20e60 45 5f 48 4f 4f 4b 28 64 62 29 20 29 7b 0a 20 20  E_HOOK(db) ){.  
20e70 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 44    assert( pC->iD
20e80 62 3e 3d 30 20 29 3b 0a 20 20 20 20 61 73 73 65  b>=0 );.    asse
20e90 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20  rt( pC->isTable 
20ea0 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
20eb0 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20  C->rowidIsValid 
20ec0 29 3b 20 20 2f 2a 20 6c 61 73 74 52 6f 77 69 64  );  /* lastRowid
20ed0 20 73 65 74 20 62 79 20 70 72 65 76 69 6f 75 73   set by previous
20ee0 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20 2a 2f 0a   OP_NotFound */.
20ef0 20 20 20 20 69 4b 65 79 20 3d 20 70 43 2d 3e 6c      iKey = pC->l
20f00 61 73 74 52 6f 77 69 64 3b 0a 20 20 20 20 7a 44  astRowid;.    zD
20f10 62 20 3d 20 64 62 2d 3e 61 44 62 5b 70 43 2d 3e  b = db->aDb[pC->
20f20 69 44 62 5d 2e 7a 4e 61 6d 65 3b 0a 20 20 20 20  iDb].zName;.    
20f30 70 54 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70  pTab = pOp->p4.p
20f40 54 61 62 3b 0a 20 20 7d 0a 0a 23 69 66 64 65 66  Tab;.  }..#ifdef
20f50 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50   SQLITE_ENABLE_P
20f60 52 45 55 50 44 41 54 45 5f 48 4f 4f 4b 0a 20 20  REUPDATE_HOOK.  
20f70 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 70 72  /* Invoke the pr
20f80 65 2d 75 70 64 61 74 65 2d 68 6f 6f 6b 20 69 66  e-update-hook if
20f90 20 72 65 71 75 69 72 65 64 2e 20 2a 2f 0a 20 20   required. */.  
20fa0 69 66 28 20 64 62 2d 3e 78 50 72 65 55 70 64 61  if( db->xPreUpda
20fb0 74 65 43 61 6c 6c 62 61 63 6b 20 26 26 20 70 4f  teCallback && pO
20fc0 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20 20 20 61  p->p4.z ){.    a
20fd0 73 73 65 72 74 28 20 21 28 6f 70 66 6c 61 67 73  ssert( !(opflags
20fe0 20 26 20 4f 50 46 4c 41 47 5f 49 53 55 50 44 41   & OPFLAG_ISUPDA
20ff0 54 45 29 20 7c 7c 20 28 61 4d 65 6d 5b 70 4f 70  TE) || (aMem[pOp
21000 2d 3e 70 33 5d 2e 66 6c 61 67 73 20 26 20 4d 45  ->p3].flags & ME
21010 4d 5f 49 6e 74 29 20 29 3b 0a 20 20 20 20 73 71  M_Int) );.    sq
21020 6c 69 74 65 33 56 64 62 65 50 72 65 55 70 64 61  lite3VdbePreUpda
21030 74 65 48 6f 6f 6b 28 70 2c 20 70 43 2c 0a 20 20  teHook(p, pC,.  
21040 20 20 20 20 20 20 28 6f 70 66 6c 61 67 73 20 26        (opflags &
21050 20 4f 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45   OPFLAG_ISUPDATE
21060 29 20 3f 20 53 51 4c 49 54 45 5f 55 50 44 41 54  ) ? SQLITE_UPDAT
21070 45 20 3a 20 53 51 4c 49 54 45 5f 44 45 4c 45 54  E : SQLITE_DELET
21080 45 2c 20 0a 20 20 20 20 20 20 20 20 7a 44 62 2c  E, .        zDb,
21090 20 70 54 61 62 2c 20 69 4b 65 79 2c 0a 20 20 20   pTab, iKey,.   
210a0 20 20 20 20 20 70 4f 70 2d 3e 70 33 0a 20 20 20       pOp->p3.   
210b0 20 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a   );.  }.#endif..
210c0 20 20 69 66 28 20 6f 70 66 6c 61 67 73 20 26 20    if( opflags & 
210d0 4f 50 46 4c 41 47 5f 49 53 4e 4f 4f 50 20 29 20  OPFLAG_ISNOOP ) 
210e0 62 72 65 61 6b 3b 0a 0a 20 20 73 71 6c 69 74 65  break;..  sqlite
210f0 33 42 74 72 65 65 53 65 74 43 61 63 68 65 64 52  3BtreeSetCachedR
21100 6f 77 69 64 28 70 43 2d 3e 70 43 75 72 73 6f 72  owid(pC->pCursor
21110 2c 20 30 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c  , 0);.  rc = sql
21120 69 74 65 33 42 74 72 65 65 44 65 6c 65 74 65 28  ite3BtreeDelete(
21130 70 43 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20  pC->pCursor);.  
21140 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20  pC->cacheStatus 
21150 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 0a  = CACHE_STALE;..
21160 20 20 2f 2a 20 55 70 64 61 74 65 20 74 68 65 20    /* Update the 
21170 63 68 61 6e 67 65 2d 63 6f 75 6e 74 65 72 20 61  change-counter a
21180 6e 64 20 69 6e 76 6f 6b 65 20 74 68 65 20 75 70  nd invoke the up
21190 64 61 74 65 2d 68 6f 6f 6b 20 69 66 20 72 65 71  date-hook if req
211a0 75 69 72 65 64 2e 20 2a 2f 0a 20 20 69 66 28 20  uired. */.  if( 
211b0 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 41 47  opflags & OPFLAG
211c0 5f 4e 43 48 41 4e 47 45 20 29 7b 0a 20 20 20 20  _NCHANGE ){.    
211d0 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20  p->nChange++;.  
211e0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
211f0 34 2e 7a 20 29 3b 0a 20 20 20 20 69 66 28 20 72  4.z );.    if( r
21200 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20  c==SQLITE_OK && 
21210 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62  db->xUpdateCallb
21220 61 63 6b 20 29 7b 0a 20 20 20 20 20 20 64 62 2d  ack ){.      db-
21230 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b  >xUpdateCallback
21240 28 64 62 2d 3e 70 55 70 64 61 74 65 41 72 67 2c  (db->pUpdateArg,
21250 20 53 51 4c 49 54 45 5f 44 45 4c 45 54 45 2c 20   SQLITE_DELETE, 
21260 7a 44 62 2c 20 70 54 61 62 2d 3e 7a 4e 61 6d 65  zDb, pTab->zName
21270 2c 69 4b 65 79 29 3b 0a 20 20 20 20 7d 0a 20 20  ,iKey);.    }.  
21280 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 2f 2a 20  }.  break;.}./* 
21290 4f 70 63 6f 64 65 3a 20 52 65 73 65 74 43 6f 75  Opcode: ResetCou
212a0 6e 74 20 2a 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a  nt * * * * *.**.
212b0 2a 2a 20 54 68 65 20 76 61 6c 75 65 20 6f 66 20  ** The value of 
212c0 74 68 65 20 63 68 61 6e 67 65 20 63 6f 75 6e 74  the change count
212d0 65 72 20 69 73 20 63 6f 70 69 65 64 20 74 6f 20  er is copied to 
212e0 74 68 65 20 64 61 74 61 62 61 73 65 20 68 61 6e  the database han
212f0 64 6c 65 0a 2a 2a 20 63 68 61 6e 67 65 20 63 6f  dle.** change co
21300 75 6e 74 65 72 20 28 72 65 74 75 72 6e 65 64 20  unter (returned 
21310 62 79 20 73 75 62 73 65 71 75 65 6e 74 20 63 61  by subsequent ca
21320 6c 6c 73 20 74 6f 20 73 71 6c 69 74 65 33 5f 63  lls to sqlite3_c
21330 68 61 6e 67 65 73 28 29 29 2e 0a 2a 2a 20 54 68  hanges())..** Th
21340 65 6e 20 74 68 65 20 56 4d 73 20 69 6e 74 65 72  en the VMs inter
21350 6e 61 6c 20 63 68 61 6e 67 65 20 63 6f 75 6e 74  nal change count
21360 65 72 20 72 65 73 65 74 73 20 74 6f 20 30 2e 0a  er resets to 0..
21370 2a 2a 20 54 68 69 73 20 69 73 20 75 73 65 64 20  ** This is used 
21380 62 79 20 74 72 69 67 67 65 72 20 70 72 6f 67 72  by trigger progr
21390 61 6d 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ams..*/.case OP_
213a0 52 65 73 65 74 43 6f 75 6e 74 3a 20 7b 0a 20 20  ResetCount: {.  
213b0 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 68  sqlite3VdbeSetCh
213c0 61 6e 67 65 73 28 64 62 2c 20 70 2d 3e 6e 43 68  anges(db, p->nCh
213d0 61 6e 67 65 29 3b 0a 20 20 70 2d 3e 6e 43 68 61  ange);.  p->nCha
213e0 6e 67 65 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b  nge = 0;.  break
213f0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
21400 52 6f 77 44 61 74 61 20 50 31 20 50 32 20 2a 20  RowData P1 P2 * 
21410 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20  * *.**.** Write 
21420 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  into register P2
21430 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 72 6f   the complete ro
21440 77 20 64 61 74 61 20 66 6f 72 20 63 75 72 73 6f  w data for curso
21450 72 20 50 31 2e 0a 2a 2a 20 54 68 65 72 65 20 69  r P1..** There i
21460 73 20 6e 6f 20 69 6e 74 65 72 70 72 65 74 61 74  s no interpretat
21470 69 6f 6e 20 6f 66 20 74 68 65 20 64 61 74 61 2e  ion of the data.
21480 20 20 0a 2a 2a 20 49 74 20 69 73 20 6a 75 73 74    .** It is just
21490 20 63 6f 70 69 65 64 20 6f 6e 74 6f 20 74 68 65   copied onto the
214a0 20 50 32 20 72 65 67 69 73 74 65 72 20 65 78 61   P2 register exa
214b0 63 74 6c 79 20 61 73 20 0a 2a 2a 20 69 74 20 69  ctly as .** it i
214c0 73 20 66 6f 75 6e 64 20 69 6e 20 74 68 65 20 64  s found in the d
214d0 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a  atabase file..**
214e0 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20 63 75  .** If the P1 cu
214f0 72 73 6f 72 20 6d 75 73 74 20 62 65 20 70 6f 69  rsor must be poi
21500 6e 74 69 6e 67 20 74 6f 20 61 20 76 61 6c 69 64  nting to a valid
21510 20 72 6f 77 20 28 6e 6f 74 20 61 20 4e 55 4c 4c   row (not a NULL
21520 20 72 6f 77 29 0a 2a 2a 20 6f 66 20 61 20 72 65   row).** of a re
21530 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20  al table, not a 
21540 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2f  pseudo-table..*/
21550 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 4b  ./* Opcode: RowK
21560 65 79 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  ey P1 P2 * * *.*
21570 2a 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f 20  *.** Write into 
21580 72 65 67 69 73 74 65 72 20 50 32 20 74 68 65 20  register P2 the 
21590 63 6f 6d 70 6c 65 74 65 20 72 6f 77 20 6b 65 79  complete row key
215a0 20 66 6f 72 20 63 75 72 73 6f 72 20 50 31 2e 0a   for cursor P1..
215b0 2a 2a 20 54 68 65 72 65 20 69 73 20 6e 6f 20 69  ** There is no i
215c0 6e 74 65 72 70 72 65 74 61 74 69 6f 6e 20 6f 66  nterpretation of
215d0 20 74 68 65 20 64 61 74 61 2e 20 20 0a 2a 2a 20   the data.  .** 
215e0 54 68 65 20 6b 65 79 20 69 73 20 63 6f 70 69 65  The key is copie
215f0 64 20 6f 6e 74 6f 20 74 68 65 20 50 33 20 72 65  d onto the P3 re
21600 67 69 73 74 65 72 20 65 78 61 63 74 6c 79 20 61  gister exactly a
21610 73 20 0a 2a 2a 20 69 74 20 69 73 20 66 6f 75 6e  s .** it is foun
21620 64 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  d in the databas
21630 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66  e file..**.** If
21640 20 74 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d   the P1 cursor m
21650 75 73 74 20 62 65 20 70 6f 69 6e 74 69 6e 67 20  ust be pointing 
21660 74 6f 20 61 20 76 61 6c 69 64 20 72 6f 77 20 28  to a valid row (
21670 6e 6f 74 20 61 20 4e 55 4c 4c 20 72 6f 77 29 0a  not a NULL row).
21680 2a 2a 20 6f 66 20 61 20 72 65 61 6c 20 74 61 62  ** of a real tab
21690 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65 75 64 6f  le, not a pseudo
216a0 2d 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20  -table..*/.case 
216b0 4f 50 5f 52 6f 77 4b 65 79 3a 0a 63 61 73 65 20  OP_RowKey:.case 
216c0 4f 50 5f 52 6f 77 44 61 74 61 3a 20 7b 0a 20 20  OP_RowData: {.  
216d0 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
216e0 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73    BtCursor *pCrs
216f0 72 3b 0a 20 20 75 33 32 20 6e 3b 0a 20 20 69 36  r;.  u32 n;.  i6
21700 34 20 6e 36 34 3b 0a 0a 20 20 70 4f 75 74 20 3d  4 n64;..  pOut =
21710 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
21720 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61  .  memAboutToCha
21730 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 0a 20  nge(p, pOut);.. 
21740 20 2f 2a 20 4e 6f 74 65 20 74 68 61 74 20 52 6f   /* Note that Ro
21750 77 4b 65 79 20 61 6e 64 20 52 6f 77 44 61 74 61  wKey and RowData
21760 20 61 72 65 20 72 65 61 6c 6c 79 20 65 78 61 63   are really exac
21770 74 6c 79 20 74 68 65 20 73 61 6d 65 20 69 6e 73  tly the same ins
21780 74 72 75 63 74 69 6f 6e 20 2a 2f 0a 20 20 61 73  truction */.  as
21790 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
217a0 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
217b0 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
217c0 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
217d0 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
217e0 2d 3e 69 73 54 61 62 6c 65 20 7c 7c 20 70 4f 70  ->isTable || pOp
217f0 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 52 6f 77  ->opcode==OP_Row
21800 4b 65 79 20 29 3b 0a 20 20 61 73 73 65 72 74 28  Key );.  assert(
21810 20 70 43 2d 3e 69 73 49 6e 64 65 78 20 7c 7c 20   pC->isIndex || 
21820 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
21830 52 6f 77 44 61 74 61 20 29 3b 0a 20 20 61 73 73  RowData );.  ass
21840 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
21850 61 73 73 65 72 74 28 20 70 43 2d 3e 6e 75 6c 6c  assert( pC->null
21860 52 6f 77 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  Row==0 );.  asse
21870 72 74 28 20 70 43 2d 3e 70 73 65 75 64 6f 54 61  rt( pC->pseudoTa
21880 62 6c 65 52 65 67 3d 3d 30 20 29 3b 0a 20 20 61  bleReg==0 );.  a
21890 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75 72 73  ssert( pC->pCurs
218a0 6f 72 21 3d 30 20 29 3b 0a 20 20 70 43 72 73 72  or!=0 );.  pCrsr
218b0 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a   = pC->pCursor;.
218c0 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
218d0 33 42 74 72 65 65 43 75 72 73 6f 72 49 73 56 61  3BtreeCursorIsVa
218e0 6c 69 64 28 70 43 72 73 72 29 20 29 3b 0a 0a 20  lid(pCrsr) );.. 
218f0 20 2f 2a 20 54 68 65 20 4f 50 5f 52 6f 77 4b 65   /* The OP_RowKe
21900 79 20 61 6e 64 20 4f 50 5f 52 6f 77 44 61 74 61  y and OP_RowData
21910 20 6f 70 63 6f 64 65 73 20 61 6c 77 61 79 73 20   opcodes always 
21920 66 6f 6c 6c 6f 77 20 4f 50 5f 4e 6f 74 45 78 69  follow OP_NotExi
21930 73 74 73 20 6f 72 0a 20 20 2a 2a 20 4f 50 5f 52  sts or.  ** OP_R
21940 65 77 69 6e 64 2f 4f 70 5f 4e 65 78 74 20 77 69  ewind/Op_Next wi
21950 74 68 20 6e 6f 20 69 6e 74 65 72 76 65 6e 69 6e  th no intervenin
21960 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 73 20 74  g instructions t
21970 68 61 74 20 6d 69 67 68 74 20 69 6e 76 61 6c 69  hat might invali
21980 64 61 74 65 0a 20 20 2a 2a 20 74 68 65 20 63 75  date.  ** the cu
21990 72 73 6f 72 2e 20 20 48 65 6e 63 65 20 74 68 65  rsor.  Hence the
219a0 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 71 6c 69 74   following sqlit
219b0 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65  e3VdbeCursorMove
219c0 74 6f 28 29 20 63 61 6c 6c 20 69 73 20 61 6c 77  to() call is alw
219d0 61 79 73 0a 20 20 2a 2a 20 61 20 6e 6f 2d 6f 70  ays.  ** a no-op
219e0 20 61 6e 64 20 63 61 6e 20 6e 65 76 65 72 20 66   and can never f
219f0 61 69 6c 2e 20 20 42 75 74 20 77 65 20 6c 65 61  ail.  But we lea
21a00 76 65 20 69 74 20 69 6e 20 70 6c 61 63 65 20 61  ve it in place a
21a10 73 20 61 20 73 61 66 65 74 79 2e 0a 20 20 2a 2f  s a safety..  */
21a20 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64  .  assert( pC->d
21a30 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30  eferredMoveto==0
21a40 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   );.  rc = sqlit
21a50 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65  e3VdbeCursorMove
21a60 74 6f 28 70 43 29 3b 0a 20 20 69 66 28 20 4e 45  to(pC);.  if( NE
21a70 56 45 52 28 72 63 21 3d 53 51 4c 49 54 45 5f 4f  VER(rc!=SQLITE_O
21a80 4b 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  K) ) goto abort_
21a90 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a 20  due_to_error;.. 
21aa0 20 69 66 28 20 70 43 2d 3e 69 73 49 6e 64 65 78   if( pC->isIndex
21ab0 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
21ac0 21 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a  !pC->isTable );.
21ad0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
21ae0 42 74 72 65 65 4b 65 79 53 69 7a 65 28 70 43 72  BtreeKeySize(pCr
21af0 73 72 2c 20 26 6e 36 34 29 3b 0a 20 20 20 20 61  sr, &n64);.    a
21b00 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54  ssert( rc==SQLIT
21b10 45 5f 4f 4b 20 29 3b 20 20 20 20 2f 2a 20 54 72  E_OK );    /* Tr
21b20 75 65 20 62 65 63 61 75 73 65 20 6f 66 20 43 75  ue because of Cu
21b30 72 73 6f 72 4d 6f 76 65 74 6f 28 29 20 63 61 6c  rsorMoveto() cal
21b40 6c 20 61 62 6f 76 65 20 2a 2f 0a 20 20 20 20 69  l above */.    i
21b50 66 28 20 6e 36 34 3e 64 62 2d 3e 61 4c 69 6d 69  f( n64>db->aLimi
21b60 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c  t[SQLITE_LIMIT_L
21b70 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 20 20  ENGTH] ){.      
21b80 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20  goto too_big;.  
21b90 20 20 7d 0a 20 20 20 20 6e 20 3d 20 28 75 33 32    }.    n = (u32
21ba0 29 6e 36 34 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  )n64;.  }else{. 
21bb0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
21bc0 74 72 65 65 44 61 74 61 53 69 7a 65 28 70 43 72  treeDataSize(pCr
21bd0 73 72 2c 20 26 6e 29 3b 0a 20 20 20 20 61 73 73  sr, &n);.    ass
21be0 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f  ert( rc==SQLITE_
21bf0 4f 4b 20 29 3b 20 20 20 20 2f 2a 20 44 61 74 61  OK );    /* Data
21c00 53 69 7a 65 28 29 20 63 61 6e 6e 6f 74 20 66 61  Size() cannot fa
21c10 69 6c 20 2a 2f 0a 20 20 20 20 69 66 28 20 6e 3e  il */.    if( n>
21c20 28 75 33 32 29 64 62 2d 3e 61 4c 69 6d 69 74 5b  (u32)db->aLimit[
21c30 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e  SQLITE_LIMIT_LEN
21c40 47 54 48 5d 20 29 7b 0a 20 20 20 20 20 20 67 6f  GTH] ){.      go
21c50 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 20 20  to too_big;.    
21c60 7d 0a 20 20 7d 0a 20 20 69 66 28 20 73 71 6c 69  }.  }.  if( sqli
21c70 74 65 33 56 64 62 65 4d 65 6d 47 72 6f 77 28 70  te3VdbeMemGrow(p
21c80 4f 75 74 2c 20 6e 2c 20 30 29 20 29 7b 0a 20 20  Out, n, 0) ){.  
21c90 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20    goto no_mem;. 
21ca0 20 7d 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 6e   }.  pOut->n = n
21cb0 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c  ;.  MemSetTypeFl
21cc0 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 42 6c 6f  ag(pOut, MEM_Blo
21cd0 62 29 3b 0a 20 20 69 66 28 20 70 43 2d 3e 69 73  b);.  if( pC->is
21ce0 49 6e 64 65 78 20 29 7b 0a 20 20 20 20 72 63 20  Index ){.    rc 
21cf0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65  = sqlite3BtreeKe
21d00 79 28 70 43 72 73 72 2c 20 30 2c 20 6e 2c 20 70  y(pCrsr, 0, n, p
21d10 4f 75 74 2d 3e 7a 29 3b 0a 20 20 7d 65 6c 73 65  Out->z);.  }else
21d20 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  {.    rc = sqlit
21d30 65 33 42 74 72 65 65 44 61 74 61 28 70 43 72 73  e3BtreeData(pCrs
21d40 72 2c 20 30 2c 20 6e 2c 20 70 4f 75 74 2d 3e 7a  r, 0, n, pOut->z
21d50 29 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 65  );.  }.  pOut->e
21d60 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55 54 46 38  nc = SQLITE_UTF8
21d70 3b 20 20 2f 2a 20 49 6e 20 63 61 73 65 20 74 68  ;  /* In case th
21d80 65 20 62 6c 6f 62 20 69 73 20 65 76 65 72 20 63  e blob is ever c
21d90 61 73 74 20 74 6f 20 74 65 78 74 20 2a 2f 0a 20  ast to text */. 
21da0 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42   UPDATE_MAX_BLOB
21db0 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72  SIZE(pOut);.  br
21dc0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
21dd0 65 3a 20 52 6f 77 69 64 20 50 31 20 50 32 20 2a  e: Rowid P1 P2 *
21de0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65   * *.**.** Store
21df0 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 20   in register P2 
21e00 61 6e 20 69 6e 74 65 67 65 72 20 77 68 69 63 68  an integer which
21e10 20 69 73 20 74 68 65 20 6b 65 79 20 6f 66 20 74   is the key of t
21e20 68 65 20 74 61 62 6c 65 20 65 6e 74 72 79 20 74  he table entry t
21e30 68 61 74 0a 2a 2a 20 50 31 20 69 73 20 63 75 72  hat.** P1 is cur
21e40 72 65 6e 74 6c 79 20 70 6f 69 6e 74 20 74 6f 2e  rently point to.
21e50 0a 2a 2a 0a 2a 2a 20 50 31 20 63 61 6e 20 62 65  .**.** P1 can be
21e60 20 65 69 74 68 65 72 20 61 6e 20 6f 72 64 69 6e   either an ordin
21e70 61 72 79 20 74 61 62 6c 65 20 6f 72 20 61 20 76  ary table or a v
21e80 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 20 20 54  irtual table.  T
21e90 68 65 72 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20  here used to.** 
21ea0 62 65 20 61 20 73 65 70 61 72 61 74 65 20 4f 50  be a separate OP
21eb0 5f 56 52 6f 77 69 64 20 6f 70 63 6f 64 65 20 66  _VRowid opcode f
21ec0 6f 72 20 75 73 65 20 77 69 74 68 20 76 69 72 74  or use with virt
21ed0 75 61 6c 20 74 61 62 6c 65 73 2c 20 62 75 74 20  ual tables, but 
21ee0 74 68 69 73 0a 2a 2a 20 6f 6e 65 20 6f 70 63 6f  this.** one opco
21ef0 64 65 20 6e 6f 77 20 77 6f 72 6b 73 20 66 6f 72  de now works for
21f00 20 62 6f 74 68 20 74 61 62 6c 65 20 74 79 70 65   both table type
21f10 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f  s..*/.case OP_Ro
21f20 77 69 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20  wid: {          
21f30 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70         /* out2-p
21f40 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 56  rerelease */.  V
21f50 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
21f60 20 69 36 34 20 76 3b 0a 20 20 73 71 6c 69 74 65   i64 v;.  sqlite
21f70 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20  3_vtab *pVtab;. 
21f80 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d   const sqlite3_m
21f90 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a  odule *pModule;.
21fa0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
21fb0 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
21fc0 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
21fd0 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
21fe0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
21ff0 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73  t( pC!=0 );.  as
22000 73 65 72 74 28 20 70 43 2d 3e 70 73 65 75 64 6f  sert( pC->pseudo
22010 54 61 62 6c 65 52 65 67 3d 3d 30 20 29 3b 0a 20  TableReg==0 );. 
22020 20 69 66 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77   if( pC->nullRow
22030 20 29 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c   ){.    pOut->fl
22040 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a  ags = MEM_Null;.
22050 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 65 6c      break;.  }el
22060 73 65 20 69 66 28 20 70 43 2d 3e 64 65 66 65 72  se if( pC->defer
22070 72 65 64 4d 6f 76 65 74 6f 20 29 7b 0a 20 20 20  redMoveto ){.   
22080 20 76 20 3d 20 70 43 2d 3e 6d 6f 76 65 74 6f 54   v = pC->movetoT
22090 61 72 67 65 74 3b 0a 23 69 66 6e 64 65 66 20 53  arget;.#ifndef S
220a0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
220b0 41 4c 54 41 42 4c 45 0a 20 20 7d 65 6c 73 65 20  ALTABLE.  }else 
220c0 69 66 28 20 70 43 2d 3e 70 56 74 61 62 43 75 72  if( pC->pVtabCur
220d0 73 6f 72 20 29 7b 0a 20 20 20 20 70 56 74 61 62  sor ){.    pVtab
220e0 20 3d 20 70 43 2d 3e 70 56 74 61 62 43 75 72 73   = pC->pVtabCurs
220f0 6f 72 2d 3e 70 56 74 61 62 3b 0a 20 20 20 20 70  or->pVtab;.    p
22100 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e  Module = pVtab->
22110 70 4d 6f 64 75 6c 65 3b 0a 20 20 20 20 61 73 73  pModule;.    ass
22120 65 72 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 52  ert( pModule->xR
22130 6f 77 69 64 20 29 3b 0a 20 20 20 20 72 63 20 3d  owid );.    rc =
22140 20 70 4d 6f 64 75 6c 65 2d 3e 78 52 6f 77 69 64   pModule->xRowid
22150 28 70 43 2d 3e 70 56 74 61 62 43 75 72 73 6f 72  (pC->pVtabCursor
22160 2c 20 26 76 29 3b 0a 20 20 20 20 69 6d 70 6f 72  , &v);.    impor
22170 74 56 74 61 62 45 72 72 4d 73 67 28 70 2c 20 70  tVtabErrMsg(p, p
22180 56 74 61 62 29 3b 0a 23 65 6e 64 69 66 20 2f 2a  Vtab);.#endif /*
22190 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
221a0 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 20 20 7d  TUALTABLE */.  }
221b0 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74  else{.    assert
221c0 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30  ( pC->pCursor!=0
221d0 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   );.    rc = sql
221e0 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f  ite3VdbeCursorMo
221f0 76 65 74 6f 28 70 43 29 3b 0a 20 20 20 20 69 66  veto(pC);.    if
22200 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
22210 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
22220 20 20 20 20 69 66 28 20 70 43 2d 3e 72 6f 77 69      if( pC->rowi
22230 64 49 73 56 61 6c 69 64 20 29 7b 0a 20 20 20 20  dIsValid ){.    
22240 20 20 76 20 3d 20 70 43 2d 3e 6c 61 73 74 52 6f    v = pC->lastRo
22250 77 69 64 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  wid;.    }else{.
22260 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
22270 65 33 42 74 72 65 65 4b 65 79 53 69 7a 65 28 70  e3BtreeKeySize(p
22280 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 76 29 3b  C->pCursor, &v);
22290 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 72  .      assert( r
222a0 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20  c==SQLITE_OK ); 
222b0 20 2f 2a 20 41 6c 77 61 79 73 20 73 6f 20 62 65   /* Always so be
222c0 63 61 75 73 65 20 6f 66 20 43 75 72 73 6f 72 4d  cause of CursorM
222d0 6f 76 65 74 6f 28 29 20 61 62 6f 76 65 20 2a 2f  oveto() above */
222e0 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 70 4f 75  .    }.  }.  pOu
222f0 74 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20 20 62 72  t->u.i = v;.  br
22300 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
22310 65 3a 20 4e 75 6c 6c 52 6f 77 20 50 31 20 2a 20  e: NullRow P1 * 
22320 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4d 6f 76 65  * * *.**.** Move
22330 20 74 68 65 20 63 75 72 73 6f 72 20 50 31 20 74   the cursor P1 t
22340 6f 20 61 20 6e 75 6c 6c 20 72 6f 77 2e 20 20 41  o a null row.  A
22350 6e 79 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 65  ny OP_Column ope
22360 72 61 74 69 6f 6e 73 0a 2a 2a 20 74 68 61 74 20  rations.** that 
22370 6f 63 63 75 72 20 77 68 69 6c 65 20 74 68 65 20  occur while the 
22380 63 75 72 73 6f 72 20 69 73 20 6f 6e 20 74 68 65  cursor is on the
22390 20 6e 75 6c 6c 20 72 6f 77 20 77 69 6c 6c 20 61   null row will a
223a0 6c 77 61 79 73 0a 2a 2a 20 77 72 69 74 65 20 61  lways.** write a
223b0 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f   NULL..*/.case O
223c0 50 5f 4e 75 6c 6c 52 6f 77 3a 20 7b 0a 20 20 56  P_NullRow: {.  V
223d0 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a  dbeCursor *pC;..
223e0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
223f0 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
22400 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
22410 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
22420 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
22430 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 70 43 2d  ( pC!=0 );.  pC-
22440 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20  >nullRow = 1;.  
22450 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64  pC->rowidIsValid
22460 20 3d 20 30 3b 0a 20 20 69 66 28 20 70 43 2d 3e   = 0;.  if( pC->
22470 70 43 75 72 73 6f 72 20 29 7b 0a 20 20 20 20 73  pCursor ){.    s
22480 71 6c 69 74 65 33 42 74 72 65 65 43 6c 65 61 72  qlite3BtreeClear
22490 43 75 72 73 6f 72 28 70 43 2d 3e 70 43 75 72 73  Cursor(pC->pCurs
224a0 6f 72 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  or);.  }.  break
224b0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
224c0 4c 61 73 74 20 50 31 20 50 32 20 2a 20 2a 20 2a  Last P1 P2 * * *
224d0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20  .**.** The next 
224e0 75 73 65 20 6f 66 20 74 68 65 20 52 6f 77 69 64  use of the Rowid
224f0 20 6f 72 20 43 6f 6c 75 6d 6e 20 6f 72 20 4e 65   or Column or Ne
22500 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 66  xt instruction f
22510 6f 72 20 50 31 20 0a 2a 2a 20 77 69 6c 6c 20 72  or P1 .** will r
22520 65 66 65 72 20 74 6f 20 74 68 65 20 6c 61 73 74  efer to the last
22530 20 65 6e 74 72 79 20 69 6e 20 74 68 65 20 64 61   entry in the da
22540 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20  tabase table or 
22550 69 6e 64 65 78 2e 0a 2a 2a 20 49 66 20 74 68 65  index..** If the
22560 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20   table or index 
22570 69 73 20 65 6d 70 74 79 20 61 6e 64 20 50 32 3e  is empty and P2>
22580 30 2c 20 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d  0, then jump imm
22590 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a  ediately to P2..
225a0 2a 2a 20 49 66 20 50 32 20 69 73 20 30 20 6f 72  ** If P2 is 0 or
225b0 20 69 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72   if the table or
225c0 20 69 6e 64 65 78 20 69 73 20 6e 6f 74 20 65 6d   index is not em
225d0 70 74 79 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67  pty, fall throug
225e0 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c  h.** to the foll
225f0 6f 77 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f  owing instructio
22600 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 61  n..*/.case OP_La
22610 73 74 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20  st: {        /* 
22620 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43 75  jump */.  VdbeCu
22630 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75  rsor *pC;.  BtCu
22640 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69  rsor *pCrsr;.  i
22650 6e 74 20 72 65 73 3b 0a 0a 20 20 61 73 73 65 72  nt res;..  asser
22660 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
22670 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
22680 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  sor );.  pC = p-
22690 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
226a0 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
226b0 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43   );.  pCrsr = pC
226c0 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 69 66 28  ->pCursor;.  if(
226d0 20 70 43 72 73 72 3d 3d 30 20 29 7b 0a 20 20 20   pCrsr==0 ){.   
226e0 20 72 65 73 20 3d 20 31 3b 0a 20 20 7d 65 6c 73   res = 1;.  }els
226f0 65 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  e{.    rc = sqli
22700 74 65 33 42 74 72 65 65 4c 61 73 74 28 70 43 72  te3BtreeLast(pCr
22710 73 72 2c 20 26 72 65 73 29 3b 0a 20 20 7d 0a 20  sr, &res);.  }. 
22720 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 28   pC->nullRow = (
22730 75 38 29 72 65 73 3b 0a 20 20 70 43 2d 3e 64 65  u8)res;.  pC->de
22740 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30  ferredMoveto = 0
22750 3b 0a 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56  ;.  pC->rowidIsV
22760 61 6c 69 64 20 3d 20 30 3b 0a 20 20 70 43 2d 3e  alid = 0;.  pC->
22770 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
22780 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 69 66 28  CHE_STALE;.  if(
22790 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 72 65   pOp->p2>0 && re
227a0 73 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f  s ){.    pc = pO
227b0 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20  p->p2 - 1;.  }. 
227c0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f   break;.}.../* O
227d0 70 63 6f 64 65 3a 20 53 6f 72 74 20 50 31 20 50  pcode: Sort P1 P
227e0 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68  2 * * *.**.** Th
227f0 69 73 20 6f 70 63 6f 64 65 20 64 6f 65 73 20 65  is opcode does e
22800 78 61 63 74 6c 79 20 74 68 65 20 73 61 6d 65 20  xactly the same 
22810 74 68 69 6e 67 20 61 73 20 4f 50 5f 52 65 77 69  thing as OP_Rewi
22820 6e 64 20 65 78 63 65 70 74 20 74 68 61 74 0a 2a  nd except that.*
22830 2a 20 69 74 20 69 6e 63 72 65 6d 65 6e 74 73 20  * it increments 
22840 61 6e 20 75 6e 64 6f 63 75 6d 65 6e 74 65 64 20  an undocumented 
22850 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 20  global variable 
22860 75 73 65 64 20 66 6f 72 20 74 65 73 74 69 6e 67  used for testing
22870 2e 0a 2a 2a 0a 2a 2a 20 53 6f 72 74 69 6e 67 20  ..**.** Sorting 
22880 69 73 20 61 63 63 6f 6d 70 6c 69 73 68 65 64 20  is accomplished 
22890 62 79 20 77 72 69 74 69 6e 67 20 72 65 63 6f 72  by writing recor
228a0 64 73 20 69 6e 74 6f 20 61 20 73 6f 72 74 69 6e  ds into a sortin
228b0 67 20 69 6e 64 65 78 2c 0a 2a 2a 20 74 68 65 6e  g index,.** then
228c0 20 72 65 77 69 6e 64 69 6e 67 20 74 68 61 74 20   rewinding that 
228d0 69 6e 64 65 78 20 61 6e 64 20 70 6c 61 79 69 6e  index and playin
228e0 67 20 69 74 20 62 61 63 6b 20 66 72 6f 6d 20 62  g it back from b
228f0 65 67 69 6e 6e 69 6e 67 20 74 6f 0a 2a 2a 20 65  eginning to.** e
22900 6e 64 2e 20 20 57 65 20 75 73 65 20 74 68 65 20  nd.  We use the 
22910 4f 50 5f 53 6f 72 74 20 6f 70 63 6f 64 65 20 69  OP_Sort opcode i
22920 6e 73 74 65 61 64 20 6f 66 20 4f 50 5f 52 65 77  nstead of OP_Rew
22930 69 6e 64 20 74 6f 20 64 6f 20 74 68 65 0a 2a 2a  ind to do the.**
22940 20 72 65 77 69 6e 64 69 6e 67 20 73 6f 20 74 68   rewinding so th
22950 61 74 20 74 68 65 20 67 6c 6f 62 61 6c 20 76 61  at the global va
22960 72 69 61 62 6c 65 20 77 69 6c 6c 20 62 65 20 69  riable will be i
22970 6e 63 72 65 6d 65 6e 74 65 64 20 61 6e 64 0a 2a  ncremented and.*
22980 2a 20 72 65 67 72 65 73 73 69 6f 6e 20 74 65 73  * regression tes
22990 74 73 20 63 61 6e 20 64 65 74 65 72 6d 69 6e 65  ts can determine
229a0 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
229b0 74 68 65 20 6f 70 74 69 6d 69 7a 65 72 20 69 73  the optimizer is
229c0 0a 2a 2a 20 63 6f 72 72 65 63 74 6c 79 20 6f 70  .** correctly op
229d0 74 69 6d 69 7a 69 6e 67 20 6f 75 74 20 73 6f 72  timizing out sor
229e0 74 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  ts..*/.case OP_S
229f0 6f 72 74 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  ort: {        /*
22a00 20 6a 75 6d 70 20 2a 2f 0a 23 69 66 64 65 66 20   jump */.#ifdef 
22a10 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 73 71  SQLITE_TEST.  sq
22a20 6c 69 74 65 33 5f 73 6f 72 74 5f 63 6f 75 6e 74  lite3_sort_count
22a30 2b 2b 3b 0a 20 20 73 71 6c 69 74 65 33 5f 73 65  ++;.  sqlite3_se
22a40 61 72 63 68 5f 63 6f 75 6e 74 2d 2d 3b 0a 23 65  arch_count--;.#e
22a50 6e 64 69 66 0a 20 20 70 2d 3e 61 43 6f 75 6e 74  ndif.  p->aCount
22a60 65 72 5b 53 51 4c 49 54 45 5f 53 54 4d 54 53 54  er[SQLITE_STMTST
22a70 41 54 55 53 5f 53 4f 52 54 2d 31 5d 2b 2b 3b 0a  ATUS_SORT-1]++;.
22a80 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67    /* Fall throug
22a90 68 20 69 6e 74 6f 20 4f 50 5f 52 65 77 69 6e 64  h into OP_Rewind
22aa0 20 2a 2f 0a 7d 0a 2f 2a 20 4f 70 63 6f 64 65 3a   */.}./* Opcode:
22ab0 20 52 65 77 69 6e 64 20 50 31 20 50 32 20 2a 20   Rewind P1 P2 * 
22ac0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e 65  * *.**.** The ne
22ad0 78 74 20 75 73 65 20 6f 66 20 74 68 65 20 52 6f  xt use of the Ro
22ae0 77 69 64 20 6f 72 20 43 6f 6c 75 6d 6e 20 6f 72  wid or Column or
22af0 20 4e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   Next instructio
22b00 6e 20 66 6f 72 20 50 31 20 0a 2a 2a 20 77 69 6c  n for P1 .** wil
22b10 6c 20 72 65 66 65 72 20 74 6f 20 74 68 65 20 66  l refer to the f
22b20 69 72 73 74 20 65 6e 74 72 79 20 69 6e 20 74 68  irst entry in th
22b30 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65  e database table
22b40 20 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a 20 49 66   or index..** If
22b50 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e   the table or in
22b60 64 65 78 20 69 73 20 65 6d 70 74 79 20 61 6e 64  dex is empty and
22b70 20 50 32 3e 30 2c 20 74 68 65 6e 20 6a 75 6d 70   P2>0, then jump
22b80 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20   immediately to 
22b90 50 32 2e 0a 2a 2a 20 49 66 20 50 32 20 69 73 20  P2..** If P2 is 
22ba0 30 20 6f 72 20 69 66 20 74 68 65 20 74 61 62 6c  0 or if the tabl
22bb0 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20 6e 6f  e or index is no
22bc0 74 20 65 6d 70 74 79 2c 20 66 61 6c 6c 20 74 68  t empty, fall th
22bd0 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20  rough.** to the 
22be0 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75  following instru
22bf0 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ction..*/.case O
22c00 50 5f 52 65 77 69 6e 64 3a 20 7b 20 20 20 20 20  P_Rewind: {     
22c10 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
22c20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
22c30 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73    BtCursor *pCrs
22c40 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 0a 20  r;.  int res;.. 
22c50 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
22c60 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
22c70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  ->nCursor );.  p
22c80 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
22c90 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
22ca0 20 70 43 21 3d 30 20 29 3b 0a 20 20 72 65 73 20   pC!=0 );.  res 
22cb0 3d 20 31 3b 0a 20 20 69 66 28 20 28 70 43 72 73  = 1;.  if( (pCrs
22cc0 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 29  r = pC->pCursor)
22cd0 21 3d 30 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  !=0 ){.    rc = 
22ce0 73 71 6c 69 74 65 33 42 74 72 65 65 46 69 72 73  sqlite3BtreeFirs
22cf0 74 28 70 43 72 73 72 2c 20 26 72 65 73 29 3b 0a  t(pCrsr, &res);.
22d00 20 20 20 20 70 43 2d 3e 61 74 46 69 72 73 74 20      pC->atFirst 
22d10 3d 20 72 65 73 3d 3d 30 20 3f 31 3a 30 3b 0a 20  = res==0 ?1:0;. 
22d20 20 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d     pC->deferredM
22d30 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20 20 70  oveto = 0;.    p
22d40 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
22d50 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20   CACHE_STALE;.  
22d60 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c    pC->rowidIsVal
22d70 69 64 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 70 43  id = 0;.  }.  pC
22d80 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 28 75 38 29  ->nullRow = (u8)
22d90 72 65 73 3b 0a 20 20 61 73 73 65 72 74 28 20 70  res;.  assert( p
22da0 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d  Op->p2>0 && pOp-
22db0 3e 70 32 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20  >p2<p->nOp );.  
22dc0 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20 70  if( res ){.    p
22dd0 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
22de0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
22df0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 78 74  ./* Opcode: Next
22e00 20 50 31 20 50 32 20 2a 20 2a 20 50 35 0a 2a 2a   P1 P2 * * P5.**
22e10 0a 2a 2a 20 41 64 76 61 6e 63 65 20 63 75 72 73  .** Advance curs
22e20 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20 69 74  or P1 so that it
22e30 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 6e   points to the n
22e40 65 78 74 20 6b 65 79 2f 64 61 74 61 20 70 61 69  ext key/data pai
22e50 72 20 69 6e 20 69 74 73 0a 2a 2a 20 74 61 62 6c  r in its.** tabl
22e60 65 20 6f 72 20 69 6e 64 65 78 2e 20 20 49 66 20  e or index.  If 
22e70 74 68 65 72 65 20 61 72 65 20 6e 6f 20 6d 6f 72  there are no mor
22e80 65 20 6b 65 79 2f 76 61 6c 75 65 20 70 61 69 72  e key/value pair
22e90 73 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f  s then fall thro
22ea0 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66 6f  ugh.** to the fo
22eb0 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75 63 74  llowing instruct
22ec0 69 6f 6e 2e 20 20 42 75 74 20 69 66 20 74 68 65  ion.  But if the
22ed0 20 63 75 72 73 6f 72 20 61 64 76 61 6e 63 65 20   cursor advance 
22ee0 77 61 73 20 73 75 63 63 65 73 73 66 75 6c 2c 0a  was successful,.
22ef0 2a 2a 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74  ** jump immediat
22f00 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a  ely to P2..**.**
22f10 20 54 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d   The P1 cursor m
22f20 75 73 74 20 62 65 20 66 6f 72 20 61 20 72 65 61  ust be for a rea
22f30 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20 70  l table, not a p
22f40 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2a 0a  seudo-table..**.
22f50 2a 2a 20 49 66 20 50 35 20 69 73 20 70 6f 73 69  ** If P5 is posi
22f60 74 69 76 65 20 61 6e 64 20 74 68 65 20 6a 75 6d  tive and the jum
22f70 70 20 69 73 20 74 61 6b 65 6e 2c 20 74 68 65 6e  p is taken, then
22f80 20 65 76 65 6e 74 20 63 6f 75 6e 74 65 72 0a 2a   event counter.*
22f90 2a 20 6e 75 6d 62 65 72 20 50 35 2d 31 20 69 6e  * number P5-1 in
22fa0 20 74 68 65 20 70 72 65 70 61 72 65 64 20 73 74   the prepared st
22fb0 61 74 65 6d 65 6e 74 20 69 73 20 69 6e 63 72 65  atement is incre
22fc0 6d 65 6e 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 53 65  mented..**.** Se
22fd0 65 20 61 6c 73 6f 3a 20 50 72 65 76 0a 2a 2f 0a  e also: Prev.*/.
22fe0 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 72 65 76 20  /* Opcode: Prev 
22ff0 50 31 20 50 32 20 2a 20 2a 20 50 35 0a 2a 2a 0a  P1 P2 * * P5.**.
23000 2a 2a 20 42 61 63 6b 20 75 70 20 63 75 72 73 6f  ** Back up curso
23010 72 20 50 31 20 73 6f 20 74 68 61 74 20 69 74 20  r P1 so that it 
23020 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 70 72  points to the pr
23030 65 76 69 6f 75 73 20 6b 65 79 2f 64 61 74 61 20  evious key/data 
23040 70 61 69 72 20 69 6e 20 69 74 73 0a 2a 2a 20 74  pair in its.** t
23050 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 20 20  able or index.  
23060 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 70  If there is no p
23070 72 65 76 69 6f 75 73 20 6b 65 79 2f 76 61 6c 75  revious key/valu
23080 65 20 70 61 69 72 73 20 74 68 65 6e 20 66 61 6c  e pairs then fal
23090 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20  l through.** to 
230a0 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e  the following in
230b0 73 74 72 75 63 74 69 6f 6e 2e 20 20 42 75 74 20  struction.  But 
230c0 69 66 20 74 68 65 20 63 75 72 73 6f 72 20 62 61  if the cursor ba
230d0 63 6b 75 70 20 77 61 73 20 73 75 63 63 65 73 73  ckup was success
230e0 66 75 6c 2c 0a 2a 2a 20 6a 75 6d 70 20 69 6d 6d  ful,.** jump imm
230f0 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a  ediately to P2..
23100 2a 2a 0a 2a 2a 20 54 68 65 20 50 31 20 63 75 72  **.** The P1 cur
23110 73 6f 72 20 6d 75 73 74 20 62 65 20 66 6f 72 20  sor must be for 
23120 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f  a real table, no
23130 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65  t a pseudo-table
23140 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73  ..**.** If P5 is
23150 20 70 6f 73 69 74 69 76 65 20 61 6e 64 20 74 68   positive and th
23160 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 2c  e jump is taken,
23170 20 74 68 65 6e 20 65 76 65 6e 74 20 63 6f 75 6e   then event coun
23180 74 65 72 0a 2a 2a 20 6e 75 6d 62 65 72 20 50 35  ter.** number P5
23190 2d 31 20 69 6e 20 74 68 65 20 70 72 65 70 61 72  -1 in the prepar
231a0 65 64 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  ed statement is 
231b0 69 6e 63 72 65 6d 65 6e 74 65 64 2e 0a 2a 2f 0a  incremented..*/.
231c0 63 61 73 65 20 4f 50 5f 50 72 65 76 3a 20 20 20  case OP_Prev:   
231d0 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
231e0 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 78 74 3a 20  /.case OP_Next: 
231f0 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70  {        /* jump
23200 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72   */.  VdbeCursor
23210 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72   *pC;.  BtCursor
23220 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72   *pCrsr;.  int r
23230 65 73 3b 0a 0a 20 20 43 48 45 43 4b 5f 46 4f 52  es;..  CHECK_FOR
23240 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20 61 73  _INTERRUPT;.  as
23250 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
23260 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
23270 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65  Cursor );.  asse
23280 72 74 28 20 70 4f 70 2d 3e 70 35 3c 3d 41 72 72  rt( pOp->p5<=Arr
23290 61 79 53 69 7a 65 28 70 2d 3e 61 43 6f 75 6e 74  aySize(p->aCount
232a0 65 72 29 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  er) );.  pC = p-
232b0 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
232c0 0a 20 20 69 66 28 20 70 43 3d 3d 30 20 29 7b 0a  .  if( pC==0 ){.
232d0 20 20 20 20 62 72 65 61 6b 3b 20 20 2f 2a 20 53      break;  /* S
232e0 65 65 20 74 69 63 6b 65 74 20 23 32 32 37 33 20  ee ticket #2273 
232f0 2a 2f 0a 20 20 7d 0a 20 20 70 43 72 73 72 20 3d  */.  }.  pCrsr =
23300 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20   pC->pCursor;.  
23310 69 66 28 20 70 43 72 73 72 3d 3d 30 20 29 7b 0a  if( pCrsr==0 ){.
23320 20 20 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20      pC->nullRow 
23330 3d 20 31 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a  = 1;.    break;.
23340 20 20 7d 0a 20 20 72 65 73 20 3d 20 31 3b 0a 20    }.  res = 1;. 
23350 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66   assert( pC->def
23360 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29  erredMoveto==0 )
23370 3b 0a 20 20 72 63 20 3d 20 70 4f 70 2d 3e 6f 70  ;.  rc = pOp->op
23380 63 6f 64 65 3d 3d 4f 50 5f 4e 65 78 74 20 3f 20  code==OP_Next ? 
23390 73 71 6c 69 74 65 33 42 74 72 65 65 4e 65 78 74  sqlite3BtreeNext
233a0 28 70 43 72 73 72 2c 20 26 72 65 73 29 20 3a 0a  (pCrsr, &res) :.
233b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
233c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 71                sq
233d0 6c 69 74 65 33 42 74 72 65 65 50 72 65 76 69 6f  lite3BtreePrevio
233e0 75 73 28 70 43 72 73 72 2c 20 26 72 65 73 29 3b  us(pCrsr, &res);
233f0 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d  .  pC->nullRow =
23400 20 28 75 38 29 72 65 73 3b 0a 20 20 70 43 2d 3e   (u8)res;.  pC->
23410 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
23420 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 69 66 28  CHE_STALE;.  if(
23430 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 70   res==0 ){.    p
23440 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
23450 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35  .    if( pOp->p5
23460 20 29 20 70 2d 3e 61 43 6f 75 6e 74 65 72 5b 70   ) p->aCounter[p
23470 4f 70 2d 3e 70 35 2d 31 5d 2b 2b 3b 0a 23 69 66  Op->p5-1]++;.#if
23480 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a  def SQLITE_TEST.
23490 20 20 20 20 73 71 6c 69 74 65 33 5f 73 65 61 72      sqlite3_sear
234a0 63 68 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64  ch_count++;.#end
234b0 69 66 0a 20 20 7d 0a 20 20 70 43 2d 3e 72 6f 77  if.  }.  pC->row
234c0 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20  idIsValid = 0;. 
234d0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
234e0 63 6f 64 65 3a 20 49 64 78 49 6e 73 65 72 74 20  code: IdxInsert 
234f0 50 31 20 50 32 20 50 33 20 2a 20 50 35 0a 2a 2a  P1 P2 P3 * P5.**
23500 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50 32 20  .** Register P2 
23510 68 6f 6c 64 73 20 61 20 53 51 4c 20 69 6e 64 65  holds a SQL inde
23520 78 20 6b 65 79 20 6d 61 64 65 20 75 73 69 6e 67  x key made using
23530 20 74 68 65 0a 2a 2a 20 4d 61 6b 65 52 65 63 6f   the.** MakeReco
23540 72 64 20 69 6e 73 74 72 75 63 74 69 6f 6e 73 2e  rd instructions.
23550 20 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77 72    This opcode wr
23560 69 74 65 73 20 74 68 61 74 20 6b 65 79 0a 2a 2a  ites that key.**
23570 20 69 6e 74 6f 20 74 68 65 20 69 6e 64 65 78 20   into the index 
23580 50 31 2e 20 20 44 61 74 61 20 66 6f 72 20 74 68  P1.  Data for th
23590 65 20 65 6e 74 72 79 20 69 73 20 6e 69 6c 2e 0a  e entry is nil..
235a0 2a 2a 0a 2a 2a 20 50 33 20 69 73 20 61 20 66 6c  **.** P3 is a fl
235b0 61 67 20 74 68 61 74 20 70 72 6f 76 69 64 65 73  ag that provides
235c0 20 61 20 68 69 6e 74 20 74 6f 20 74 68 65 20 62   a hint to the b
235d0 2d 74 72 65 65 20 6c 61 79 65 72 20 74 68 61 74  -tree layer that
235e0 20 74 68 69 73 0a 2a 2a 20 69 6e 73 65 72 74 20   this.** insert 
235f0 69 73 20 6c 69 6b 65 6c 79 20 74 6f 20 62 65 20  is likely to be 
23600 61 6e 20 61 70 70 65 6e 64 2e 0a 2a 2a 0a 2a 2a  an append..**.**
23610 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   This instructio
23620 6e 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72  n only works for
23630 20 69 6e 64 69 63 65 73 2e 20 20 54 68 65 20 65   indices.  The e
23640 71 75 69 76 61 6c 65 6e 74 20 69 6e 73 74 72 75  quivalent instru
23650 63 74 69 6f 6e 0a 2a 2a 20 66 6f 72 20 74 61 62  ction.** for tab
23660 6c 65 73 20 69 73 20 4f 50 5f 49 6e 73 65 72 74  les is OP_Insert
23670 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78  ..*/.case OP_Idx
23680 49 6e 73 65 72 74 3a 20 7b 20 20 20 20 20 20 20  Insert: {       
23690 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20 56 64 62   /* in2 */.  Vdb
236a0 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42  eCursor *pC;.  B
236b0 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a  tCursor *pCrsr;.
236c0 20 20 69 6e 74 20 6e 4b 65 79 3b 0a 20 20 63 6f    int nKey;.  co
236d0 6e 73 74 20 63 68 61 72 20 2a 7a 4b 65 79 3b 0a  nst char *zKey;.
236e0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
236f0 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
23700 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
23710 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
23720 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
23730 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 70 49  t( pC!=0 );.  pI
23740 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n2 = &aMem[pOp->
23750 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p2];.  assert( p
23760 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In2->flags & MEM
23770 5f 42 6c 6f 62 20 29 3b 0a 20 20 70 43 72 73 72  _Blob );.  pCrsr
23780 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a   = pC->pCursor;.
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 61 73  sr!=0) ){.    as
237b0 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c  sert( pC->isTabl
237c0 65 3d 3d 30 20 29 3b 0a 20 20 20 20 72 63 20 3d  e==0 );.    rc =
237d0 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 32   ExpandBlob(pIn2
237e0 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53  );.    if( rc==S
237f0 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
23800 20 20 6e 4b 65 79 20 3d 20 70 49 6e 32 2d 3e 6e    nKey = pIn2->n
23810 3b 0a 20 20 20 20 20 20 7a 4b 65 79 20 3d 20 70  ;.      zKey = p
23820 49 6e 32 2d 3e 7a 3b 0a 20 20 20 20 20 20 72 63  In2->z;.      rc
23830 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 49   = sqlite3BtreeI
23840 6e 73 65 72 74 28 70 43 72 73 72 2c 20 7a 4b 65  nsert(pCrsr, zKe
23850 79 2c 20 6e 4b 65 79 2c 20 22 22 2c 20 30 2c 20  y, nKey, "", 0, 
23860 30 2c 20 70 4f 70 2d 3e 70 33 2c 20 0a 20 20 20  0, pOp->p3, .   
23870 20 20 20 20 20 20 20 28 28 70 4f 70 2d 3e 70 35         ((pOp->p5
23880 20 26 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45   & OPFLAG_USESEE
23890 4b 52 45 53 55 4c 54 29 20 3f 20 70 43 2d 3e 73  KRESULT) ? pC->s
238a0 65 65 6b 52 65 73 75 6c 74 20 3a 20 30 29 0a 20  eekResult : 0). 
238b0 20 20 20 20 20 29 3b 0a 20 20 20 20 20 20 61 73       );.      as
238c0 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72  sert( pC->deferr
238d0 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20  edMoveto==0 );. 
238e0 20 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74       pC->cacheSt
238f0 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
23900 4c 45 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  LE;.    }.  }.  
23910 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
23920 6f 64 65 3a 20 49 64 78 44 65 6c 65 74 65 20 50  ode: IdxDelete P
23930 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
23940 2a 20 54 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  * The content of
23950 20 50 33 20 72 65 67 69 73 74 65 72 73 20 73 74   P3 registers st
23960 61 72 74 69 6e 67 20 61 74 20 72 65 67 69 73 74  arting at regist
23970 65 72 20 50 32 20 66 6f 72 6d 0a 2a 2a 20 61 6e  er P2 form.** an
23980 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20   unpacked index 
23990 6b 65 79 2e 20 54 68 69 73 20 6f 70 63 6f 64 65  key. This opcode
239a0 20 72 65 6d 6f 76 65 73 20 74 68 61 74 20 65 6e   removes that en
239b0 74 72 79 20 66 72 6f 6d 20 74 68 65 20 0a 2a 2a  try from the .**
239c0 20 69 6e 64 65 78 20 6f 70 65 6e 65 64 20 62 79   index opened by
239d0 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2f 0a 63   cursor P1..*/.c
239e0 61 73 65 20 4f 50 5f 49 64 78 44 65 6c 65 74 65  ase OP_IdxDelete
239f0 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  : {.  VdbeCursor
23a00 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72   *pC;.  BtCursor
23a10 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72   *pCrsr;.  int r
23a20 65 73 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65  es;.  UnpackedRe
23a30 63 6f 72 64 20 72 3b 0a 0a 20 20 61 73 73 65 72  cord r;..  asser
23a40 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a  t( pOp->p3>0 );.
23a50 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
23a60 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 70  2>0 && pOp->p2+p
23a70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 2b  Op->p3<=p->nMem+
23a80 31 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  1 );.  assert( p
23a90 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
23aa0 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
23ab0 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
23ac0 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
23ad0 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
23ae0 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43    pCrsr = pC->pC
23af0 75 72 73 6f 72 3b 0a 20 20 69 66 28 20 41 4c 57  ursor;.  if( ALW
23b00 41 59 53 28 70 43 72 73 72 21 3d 30 29 20 29 7b  AYS(pCrsr!=0) ){
23b10 0a 20 20 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20  .    r.pKeyInfo 
23b20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a  = pC->pKeyInfo;.
23b30 20 20 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28      r.nField = (
23b40 75 31 36 29 70 4f 70 2d 3e 70 33 3b 0a 20 20 20  u16)pOp->p3;.   
23b50 20 72 2e 66 6c 61 67 73 20 3d 20 30 3b 0a 20 20   r.flags = 0;.  
23b60 20 20 72 2e 61 4d 65 6d 20 3d 20 26 61 4d 65 6d    r.aMem = &aMem
23b70 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 23 69 66 64 65  [pOp->p2];.#ifde
23b80 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
23b90 20 20 20 7b 20 69 6e 74 20 69 3b 20 66 6f 72 28     { int i; for(
23ba0 69 3d 30 3b 20 69 3c 72 2e 6e 46 69 65 6c 64 3b  i=0; i<r.nField;
23bb0 20 69 2b 2b 29 20 61 73 73 65 72 74 28 20 6d 65   i++) assert( me
23bc0 6d 49 73 56 61 6c 69 64 28 26 72 2e 61 4d 65 6d  mIsValid(&r.aMem
23bd0 5b 69 5d 29 20 29 3b 20 7d 0a 23 65 6e 64 69 66  [i]) ); }.#endif
23be0 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
23bf0 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61  3BtreeMovetoUnpa
23c00 63 6b 65 64 28 70 43 72 73 72 2c 20 26 72 2c 20  cked(pCrsr, &r, 
23c10 30 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 20  0, 0, &res);.   
23c20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
23c30 4f 4b 20 26 26 20 72 65 73 3d 3d 30 20 29 7b 0a  OK && res==0 ){.
23c40 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
23c50 65 33 42 74 72 65 65 44 65 6c 65 74 65 28 70 43  e3BtreeDelete(pC
23c60 72 73 72 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  rsr);.    }.    
23c70 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65  assert( pC->defe
23c80 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b  rredMoveto==0 );
23c90 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74  .    pC->cacheSt
23ca0 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
23cb0 4c 45 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  LE;.  }.  break;
23cc0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
23cd0 64 78 52 6f 77 69 64 20 50 31 20 50 32 20 2a 20  dxRowid P1 P2 * 
23ce0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20  * *.**.** Write 
23cf0 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  into register P2
23d00 20 61 6e 20 69 6e 74 65 67 65 72 20 77 68 69 63   an integer whic
23d10 68 20 69 73 20 74 68 65 20 6c 61 73 74 20 65 6e  h is the last en
23d20 74 72 79 20 69 6e 20 74 68 65 20 72 65 63 6f 72  try in the recor
23d30 64 20 61 74 0a 2a 2a 20 74 68 65 20 65 6e 64 20  d at.** the end 
23d40 6f 66 20 74 68 65 20 69 6e 64 65 78 20 6b 65 79  of the index key
23d50 20 70 6f 69 6e 74 65 64 20 74 6f 20 62 79 20 63   pointed to by c
23d60 75 72 73 6f 72 20 50 31 2e 20 20 54 68 69 73 20  ursor P1.  This 
23d70 69 6e 74 65 67 65 72 20 73 68 6f 75 6c 64 20 62  integer should b
23d80 65 0a 2a 2a 20 74 68 65 20 72 6f 77 69 64 20 6f  e.** the rowid o
23d90 66 20 74 68 65 20 74 61 62 6c 65 20 65 6e 74 72  f the table entr
23da0 79 20 74 6f 20 77 68 69 63 68 20 74 68 69 73 20  y to which this 
23db0 69 6e 64 65 78 20 65 6e 74 72 79 20 70 6f 69 6e  index entry poin
23dc0 74 73 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  ts..**.** See al
23dd0 73 6f 3a 20 52 6f 77 69 64 2c 20 4d 61 6b 65 52  so: Rowid, MakeR
23de0 65 63 6f 72 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ecord..*/.case O
23df0 50 5f 49 64 78 52 6f 77 69 64 3a 20 7b 20 20 20  P_IdxRowid: {   
23e00 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
23e10 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f  t2-prerelease */
23e20 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72  .  BtCursor *pCr
23e30 73 72 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  sr;.  VdbeCursor
23e40 20 2a 70 43 3b 0a 20 20 69 36 34 20 72 6f 77 69   *pC;.  i64 rowi
23e50 64 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  d;..  assert( pO
23e60 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
23e70 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
23e80 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
23e90 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
23ea0 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
23eb0 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75   pCrsr = pC->pCu
23ec0 72 73 6f 72 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c  rsor;.  pOut->fl
23ed0 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a  ags = MEM_Null;.
23ee0 20 20 69 66 28 20 41 4c 57 41 59 53 28 70 43 72    if( ALWAYS(pCr
23ef0 73 72 21 3d 30 29 20 29 7b 0a 20 20 20 20 72 63  sr!=0) ){.    rc
23f00 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 75   = sqlite3VdbeCu
23f10 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b 0a  rsorMoveto(pC);.
23f20 20 20 20 20 69 66 28 20 4e 45 56 45 52 28 72 63      if( NEVER(rc
23f30 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  ) ) goto abort_d
23f40 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
23f50 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66   assert( pC->def
23f60 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29  erredMoveto==0 )
23f70 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  ;.    assert( pC
23f80 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29 3b 0a  ->isTable==0 );.
23f90 20 20 20 20 69 66 28 20 21 70 43 2d 3e 6e 75 6c      if( !pC->nul
23fa0 6c 52 6f 77 20 29 7b 0a 20 20 20 20 20 20 72 63  lRow ){.      rc
23fb0 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 64   = sqlite3VdbeId
23fc0 78 52 6f 77 69 64 28 64 62 2c 20 70 43 72 73 72  xRowid(db, pCrsr
23fd0 2c 20 26 72 6f 77 69 64 29 3b 0a 20 20 20 20 20  , &rowid);.     
23fe0 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
23ff0 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 67 6f  OK ){.        go
24000 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
24010 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20  error;.      }. 
24020 20 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d       pOut->u.i =
24030 20 72 6f 77 69 64 3b 0a 20 20 20 20 20 20 70 4f   rowid;.      pO
24040 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  ut->flags = MEM_
24050 49 6e 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  Int;.    }.  }. 
24060 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
24070 63 6f 64 65 3a 20 49 64 78 47 45 20 50 31 20 50  code: IdxGE P1 P
24080 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a  2 P3 P4 P5.**.**
24090 20 54 68 65 20 50 34 20 72 65 67 69 73 74 65 72   The P4 register
240a0 20 76 61 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e   values beginnin
240b0 67 20 77 69 74 68 20 50 33 20 66 6f 72 6d 20 61  g with P3 form a
240c0 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78  n unpacked index
240d0 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d   .** key that om
240e0 69 74 73 20 74 68 65 20 52 4f 57 49 44 2e 20 20  its the ROWID.  
240f0 43 6f 6d 70 61 72 65 20 74 68 69 73 20 6b 65 79  Compare this key
24100 20 76 61 6c 75 65 20 61 67 61 69 6e 73 74 20 74   value against t
24110 68 65 20 69 6e 64 65 78 20 0a 2a 2a 20 74 68 61  he index .** tha
24120 74 20 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c  t P1 is currentl
24130 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69  y pointing to, i
24140 67 6e 6f 72 69 6e 67 20 74 68 65 20 52 4f 57 49  gnoring the ROWI
24150 44 20 6f 6e 20 74 68 65 20 50 31 20 69 6e 64 65  D on the P1 inde
24160 78 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  x..**.** If the 
24170 50 31 20 69 6e 64 65 78 20 65 6e 74 72 79 20 69  P1 index entry i
24180 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f  s greater than o
24190 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b  r equal to the k
241a0 65 79 20 76 61 6c 75 65 0a 2a 2a 20 74 68 65 6e  ey value.** then
241b0 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 20 4f 74   jump to P2.  Ot
241c0 68 65 72 77 69 73 65 20 66 61 6c 6c 20 74 68 72  herwise fall thr
241d0 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74  ough to the next
241e0 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a   instruction..**
241f0 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 6e 6f 6e  .** If P5 is non
24200 2d 7a 65 72 6f 20 74 68 65 6e 20 74 68 65 20 6b  -zero then the k
24210 65 79 20 76 61 6c 75 65 20 69 73 20 69 6e 63 72  ey value is incr
24220 65 61 73 65 64 20 62 79 20 61 6e 20 65 70 73 69  eased by an epsi
24230 6c 6f 6e 20 0a 2a 2a 20 70 72 69 6f 72 20 74 6f  lon .** prior to
24240 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e   the comparison.
24250 20 20 54 68 69 73 20 6d 61 6b 65 20 74 68 65 20    This make the 
24260 6f 70 63 6f 64 65 20 77 6f 72 6b 20 6c 69 6b 65  opcode work like
24270 20 49 64 78 47 54 20 65 78 63 65 70 74 0a 2a 2a   IdxGT except.**
24280 20 74 68 61 74 20 69 66 20 74 68 65 20 6b 65 79   that if the key
24290 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50   from register P
242a0 33 20 69 73 20 61 20 70 72 65 66 69 78 20 6f 66  3 is a prefix of
242b0 20 74 68 65 20 6b 65 79 20 69 6e 20 74 68 65 20   the key in the 
242c0 63 75 72 73 6f 72 2c 0a 2a 2a 20 74 68 65 20 72  cursor,.** the r
242d0 65 73 75 6c 74 20 69 73 20 66 61 6c 73 65 20 77  esult is false w
242e0 68 65 72 65 61 73 20 69 74 20 77 6f 75 6c 64 20  hereas it would 
242f0 62 65 20 74 72 75 65 20 77 69 74 68 20 49 64 78  be true with Idx
24300 47 54 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  GT..*/./* Opcode
24310 3a 20 49 64 78 4c 54 20 50 31 20 50 32 20 50 33  : IdxLT P1 P2 P3
24320 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 65   P4 P5.**.** The
24330 20 50 34 20 72 65 67 69 73 74 65 72 20 76 61 6c   P4 register val
24340 75 65 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69  ues beginning wi
24350 74 68 20 50 33 20 66 6f 72 6d 20 61 6e 20 75 6e  th P3 form an un
24360 70 61 63 6b 65 64 20 69 6e 64 65 78 20 0a 2a 2a  packed index .**
24370 20 6b 65 79 20 74 68 61 74 20 6f 6d 69 74 73 20   key that omits 
24380 74 68 65 20 52 4f 57 49 44 2e 20 20 43 6f 6d 70  the ROWID.  Comp
24390 61 72 65 20 74 68 69 73 20 6b 65 79 20 76 61 6c  are this key val
243a0 75 65 20 61 67 61 69 6e 73 74 20 74 68 65 20 69  ue against the i
243b0 6e 64 65 78 20 0a 2a 2a 20 74 68 61 74 20 50 31  ndex .** that P1
243c0 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f   is currently po
243d0 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72  inting to, ignor
243e0 69 6e 67 20 74 68 65 20 52 4f 57 49 44 20 6f 6e  ing the ROWID on
243f0 20 74 68 65 20 50 31 20 69 6e 64 65 78 2e 0a 2a   the P1 index..*
24400 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20 69  *.** If the P1 i
24410 6e 64 65 78 20 65 6e 74 72 79 20 69 73 20 6c 65  ndex entry is le
24420 73 73 20 74 68 61 6e 20 74 68 65 20 6b 65 79 20  ss than the key 
24430 76 61 6c 75 65 20 74 68 65 6e 20 6a 75 6d 70 20  value then jump 
24440 74 6f 20 50 32 2e 0a 2a 2a 20 4f 74 68 65 72 77  to P2..** Otherw
24450 69 73 65 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  ise fall through
24460 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73   to the next ins
24470 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  truction..**.** 
24480 49 66 20 50 35 20 69 73 20 6e 6f 6e 2d 7a 65 72  If P5 is non-zer
24490 6f 20 74 68 65 6e 20 74 68 65 20 6b 65 79 20 76  o then the key v
244a0 61 6c 75 65 20 69 73 20 69 6e 63 72 65 61 73 65  alue is increase
244b0 64 20 62 79 20 61 6e 20 65 70 73 69 6c 6f 6e 20  d by an epsilon 
244c0 70 72 69 6f 72 20 0a 2a 2a 20 74 6f 20 74 68 65  prior .** to the
244d0 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 54 68   comparison.  Th
244e0 69 73 20 6d 61 6b 65 73 20 74 68 65 20 6f 70 63  is makes the opc
244f0 6f 64 65 20 77 6f 72 6b 20 6c 69 6b 65 20 49 64  ode work like Id
24500 78 4c 45 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  xLE..*/.case OP_
24510 49 64 78 4c 54 3a 20 20 20 20 20 20 20 20 20 20  IdxLT:          
24520 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20  /* jump */.case 
24530 4f 50 5f 49 64 78 47 45 3a 20 7b 20 20 20 20 20  OP_IdxGE: {     
24540 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
24550 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
24560 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 55 6e 70    int res;.  Unp
24570 61 63 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a 0a  ackedRecord r;..
24580 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
24590 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
245a0 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
245b0 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
245c0 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
245d0 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73  ( pC!=0 );.  ass
245e0 65 72 74 28 20 70 43 2d 3e 69 73 4f 72 64 65 72  ert( pC->isOrder
245f0 65 64 20 29 3b 0a 20 20 69 66 28 20 41 4c 57 41  ed );.  if( ALWA
24600 59 53 28 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d  YS(pC->pCursor!=
24610 30 29 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  0) ){.    assert
24620 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f  ( pC->deferredMo
24630 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 20 20 61  veto==0 );.    a
24640 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d  ssert( pOp->p5==
24650 30 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 31 20  0 || pOp->p5==1 
24660 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
24670 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49  Op->p4type==P4_I
24680 4e 54 33 32 20 29 3b 0a 20 20 20 20 72 2e 70 4b  NT32 );.    r.pK
24690 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65  eyInfo = pC->pKe
246a0 79 49 6e 66 6f 3b 0a 20 20 20 20 72 2e 6e 46 69  yInfo;.    r.nFi
246b0 65 6c 64 20 3d 20 28 75 31 36 29 70 4f 70 2d 3e  eld = (u16)pOp->
246c0 70 34 2e 69 3b 0a 20 20 20 20 69 66 28 20 70 4f  p4.i;.    if( pO
246d0 70 2d 3e 70 35 20 29 7b 0a 20 20 20 20 20 20 72  p->p5 ){.      r
246e0 2e 66 6c 61 67 73 20 3d 20 55 4e 50 41 43 4b 45  .flags = UNPACKE
246f0 44 5f 49 4e 43 52 4b 45 59 20 7c 20 55 4e 50 41  D_INCRKEY | UNPA
24700 43 4b 45 44 5f 49 47 4e 4f 52 45 5f 52 4f 57 49  CKED_IGNORE_ROWI
24710 44 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  D;.    }else{.  
24720 20 20 20 20 72 2e 66 6c 61 67 73 20 3d 20 55 4e      r.flags = UN
24730 50 41 43 4b 45 44 5f 49 47 4e 4f 52 45 5f 52 4f  PACKED_IGNORE_RO
24740 57 49 44 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72  WID;.    }.    r
24750 2e 61 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f  .aMem = &aMem[pO
24760 70 2d 3e 70 33 5d 3b 0a 23 69 66 64 65 66 20 53  p->p3];.#ifdef S
24770 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20  QLITE_DEBUG.    
24780 7b 20 69 6e 74 20 69 3b 20 66 6f 72 28 69 3d 30  { int i; for(i=0
24790 3b 20 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 2b  ; i<r.nField; i+
247a0 2b 29 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73  +) assert( memIs
247b0 56 61 6c 69 64 28 26 72 2e 61 4d 65 6d 5b 69 5d  Valid(&r.aMem[i]
247c0 29 20 29 3b 20 7d 0a 23 65 6e 64 69 66 0a 20 20  ) ); }.#endif.  
247d0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
247e0 62 65 49 64 78 4b 65 79 43 6f 6d 70 61 72 65 28  beIdxKeyCompare(
247f0 70 43 2c 20 26 72 2c 20 26 72 65 73 29 3b 0a 20  pC, &r, &res);. 
24800 20 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f     if( pOp->opco
24810 64 65 3d 3d 4f 50 5f 49 64 78 4c 54 20 29 7b 0a  de==OP_IdxLT ){.
24820 20 20 20 20 20 20 72 65 73 20 3d 20 2d 72 65 73        res = -res
24830 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
24840 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
24850 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 45  opcode==OP_IdxGE
24860 20 29 3b 0a 20 20 20 20 20 20 72 65 73 2b 2b 3b   );.      res++;
24870 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 72  .    }.    if( r
24880 65 73 3e 30 20 29 7b 0a 20 20 20 20 20 20 70 63  es>0 ){.      pc
24890 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 20 3b   = pOp->p2 - 1 ;
248a0 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65  .    }.  }.  bre
248b0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
248c0 3a 20 44 65 73 74 72 6f 79 20 50 31 20 50 32 20  : Destroy P1 P2 
248d0 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 65 6c  P3 * *.**.** Del
248e0 65 74 65 20 61 6e 20 65 6e 74 69 72 65 20 64 61  ete an entire da
248f0 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20  tabase table or 
24900 69 6e 64 65 78 20 77 68 6f 73 65 20 72 6f 6f 74  index whose root
24910 20 70 61 67 65 20 69 6e 20 74 68 65 20 64 61 74   page in the dat
24920 61 62 61 73 65 0a 2a 2a 20 66 69 6c 65 20 69 73  abase.** file is
24930 20 67 69 76 65 6e 20 62 79 20 50 31 2e 0a 2a 2a   given by P1..**
24940 0a 2a 2a 20 54 68 65 20 74 61 62 6c 65 20 62 65  .** The table be
24950 69 6e 67 20 64 65 73 74 72 6f 79 65 64 20 69 73  ing destroyed is
24960 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74   in the main dat
24970 61 62 61 73 65 20 66 69 6c 65 20 69 66 20 50 33  abase file if P3
24980 3d 3d 30 2e 20 20 49 66 0a 2a 2a 20 50 33 3d 3d  ==0.  If.** P3==
24990 31 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65  1 then the table
249a0 20 74 6f 20 62 65 20 63 6c 65 61 72 20 69 73 20   to be clear is 
249b0 69 6e 20 74 68 65 20 61 75 78 69 6c 69 61 72 79  in the auxiliary
249c0 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a 2a   database file.*
249d0 2a 20 74 68 61 74 20 69 73 20 75 73 65 64 20 74  * that is used t
249e0 6f 20 73 74 6f 72 65 20 74 61 62 6c 65 73 20 63  o store tables c
249f0 72 65 61 74 65 20 75 73 69 6e 67 20 43 52 45 41  reate using CREA
24a00 54 45 20 54 45 4d 50 4f 52 41 52 59 20 54 41 42  TE TEMPORARY TAB
24a10 4c 45 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 41 55 54  LE..**.** If AUT
24a20 4f 56 41 43 55 55 4d 20 69 73 20 65 6e 61 62 6c  OVACUUM is enabl
24a30 65 64 20 74 68 65 6e 20 69 74 20 69 73 20 70 6f  ed then it is po
24a40 73 73 69 62 6c 65 20 74 68 61 74 20 61 6e 6f 74  ssible that anot
24a50 68 65 72 20 72 6f 6f 74 20 70 61 67 65 0a 2a 2a  her root page.**
24a60 20 6d 69 67 68 74 20 62 65 20 6d 6f 76 65 64 20   might be moved 
24a70 69 6e 74 6f 20 74 68 65 20 6e 65 77 6c 79 20 64  into the newly d
24a80 65 6c 65 74 65 64 20 72 6f 6f 74 20 70 61 67 65  eleted root page
24a90 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65   in order to kee
24aa0 70 20 61 6c 6c 0a 2a 2a 20 72 6f 6f 74 20 70 61  p all.** root pa
24ab0 67 65 73 20 63 6f 6e 74 69 67 75 6f 75 73 20 61  ges contiguous a
24ac0 74 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20  t the beginning 
24ad0 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 2e  of the database.
24ae0 20 20 54 68 65 20 66 6f 72 6d 65 72 0a 2a 2a 20    The former.** 
24af0 76 61 6c 75 65 20 6f 66 20 74 68 65 20 72 6f 6f  value of the roo
24b00 74 20 70 61 67 65 20 74 68 61 74 20 6d 6f 76 65  t page that move
24b10 64 20 2d 20 69 74 73 20 76 61 6c 75 65 20 62 65  d - its value be
24b20 66 6f 72 65 20 74 68 65 20 6d 6f 76 65 20 6f 63  fore the move oc
24b30 63 75 72 72 65 64 20 2d 0a 2a 2a 20 69 73 20 73  curred -.** is s
24b40 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65  tored in registe
24b50 72 20 50 32 2e 20 20 49 66 20 6e 6f 20 70 61 67  r P2.  If no pag
24b60 65 20 0a 2a 2a 20 6d 6f 76 65 6d 65 6e 74 20 77  e .** movement w
24b70 61 73 20 72 65 71 75 69 72 65 64 20 28 62 65 63  as required (bec
24b80 61 75 73 65 20 74 68 65 20 74 61 62 6c 65 20 62  ause the table b
24b90 65 69 6e 67 20 64 72 6f 70 70 65 64 20 77 61 73  eing dropped was
24ba0 20 61 6c 72 65 61 64 79 20 0a 2a 2a 20 74 68 65   already .** the
24bb0 20 6c 61 73 74 20 6f 6e 65 20 69 6e 20 74 68 65   last one in the
24bc0 20 64 61 74 61 62 61 73 65 29 20 74 68 65 6e 20   database) then 
24bd0 61 20 7a 65 72 6f 20 69 73 20 73 74 6f 72 65 64  a zero is stored
24be0 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e   in register P2.
24bf0 0a 2a 2a 20 49 66 20 41 55 54 4f 56 41 43 55 55  .** If AUTOVACUU
24c00 4d 20 69 73 20 64 69 73 61 62 6c 65 64 20 74 68  M is disabled th
24c10 65 6e 20 61 20 7a 65 72 6f 20 69 73 20 73 74 6f  en a zero is sto
24c20 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20  red in register 
24c30 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  P2..**.** See al
24c40 73 6f 3a 20 43 6c 65 61 72 0a 2a 2f 0a 63 61 73  so: Clear.*/.cas
24c50 65 20 4f 50 5f 44 65 73 74 72 6f 79 3a 20 7b 20  e OP_Destroy: { 
24c60 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72      /* out2-prer
24c70 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69 6e 74 20  elease */.  int 
24c80 69 4d 6f 76 65 64 3b 0a 20 20 69 6e 74 20 69 43  iMoved;.  int iC
24c90 6e 74 3b 0a 20 20 56 64 62 65 20 2a 70 56 64 62  nt;.  Vdbe *pVdb
24ca0 65 3b 0a 20 20 69 6e 74 20 69 44 62 3b 0a 23 69  e;.  int iDb;.#i
24cb0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
24cc0 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20  T_VIRTUALTABLE. 
24cd0 20 69 43 6e 74 20 3d 20 30 3b 0a 20 20 66 6f 72   iCnt = 0;.  for
24ce0 28 70 56 64 62 65 3d 64 62 2d 3e 70 56 64 62 65  (pVdbe=db->pVdbe
24cf0 3b 20 70 56 64 62 65 3b 20 70 56 64 62 65 20 3d  ; pVdbe; pVdbe =
24d00 20 70 56 64 62 65 2d 3e 70 4e 65 78 74 29 7b 0a   pVdbe->pNext){.
24d10 20 20 20 20 69 66 28 20 70 56 64 62 65 2d 3e 6d      if( pVdbe->m
24d20 61 67 69 63 3d 3d 56 44 42 45 5f 4d 41 47 49 43  agic==VDBE_MAGIC
24d30 5f 52 55 4e 20 26 26 20 70 56 64 62 65 2d 3e 69  _RUN && pVdbe->i
24d40 6e 56 74 61 62 4d 65 74 68 6f 64 3c 32 20 26 26  nVtabMethod<2 &&
24d50 20 70 56 64 62 65 2d 3e 70 63 3e 3d 30 20 29 7b   pVdbe->pc>=0 ){
24d60 0a 20 20 20 20 20 20 69 43 6e 74 2b 2b 3b 0a 20  .      iCnt++;. 
24d70 20 20 20 7d 0a 20 20 7d 0a 23 65 6c 73 65 0a 20     }.  }.#else. 
24d80 20 69 43 6e 74 20 3d 20 64 62 2d 3e 61 63 74 69   iCnt = db->acti
24d90 76 65 56 64 62 65 43 6e 74 3b 0a 23 65 6e 64 69  veVdbeCnt;.#endi
24da0 66 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20  f.  pOut->flags 
24db0 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 69 66  = MEM_Null;.  if
24dc0 28 20 69 43 6e 74 3e 31 20 29 7b 0a 20 20 20 20  ( iCnt>1 ){.    
24dd0 72 63 20 3d 20 53 51 4c 49 54 45 5f 4c 4f 43 4b  rc = SQLITE_LOCK
24de0 45 44 3b 0a 20 20 20 20 70 2d 3e 65 72 72 6f 72  ED;.    p->error
24df0 41 63 74 69 6f 6e 20 3d 20 4f 45 5f 41 62 6f 72  Action = OE_Abor
24e00 74 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  t;.  }else{.    
24e10 69 44 62 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20  iDb = pOp->p3;. 
24e20 20 20 20 61 73 73 65 72 74 28 20 69 43 6e 74 3d     assert( iCnt=
24e30 3d 31 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  =1 );.    assert
24e40 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20  ( (p->btreeMask 
24e50 26 20 28 28 28 79 44 62 4d 61 73 6b 29 31 29 3c  & (((yDbMask)1)<
24e60 3c 69 44 62 29 29 21 3d 30 20 29 3b 0a 20 20 20  <iDb))!=0 );.   
24e70 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
24e80 65 65 44 72 6f 70 54 61 62 6c 65 28 64 62 2d 3e  eeDropTable(db->
24e90 61 44 62 5b 69 44 62 5d 2e 70 42 74 2c 20 70 4f  aDb[iDb].pBt, pO
24ea0 70 2d 3e 70 31 2c 20 26 69 4d 6f 76 65 64 29 3b  p->p1, &iMoved);
24eb0 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  .    pOut->flags
24ec0 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20   = MEM_Int;.    
24ed0 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 4d 6f 76  pOut->u.i = iMov
24ee0 65 64 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  ed;.#ifndef SQLI
24ef0 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55  TE_OMIT_AUTOVACU
24f00 55 4d 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53  UM.    if( rc==S
24f10 51 4c 49 54 45 5f 4f 4b 20 26 26 20 69 4d 6f 76  QLITE_OK && iMov
24f20 65 64 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 73  ed!=0 ){.      s
24f30 71 6c 69 74 65 33 52 6f 6f 74 50 61 67 65 4d 6f  qlite3RootPageMo
24f40 76 65 64 28 64 62 2c 20 69 44 62 2c 20 69 4d 6f  ved(db, iDb, iMo
24f50 76 65 64 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20  ved, pOp->p1);. 
24f60 20 20 20 20 20 2f 2a 20 41 6c 6c 20 4f 50 5f 44       /* All OP_D
24f70 65 73 74 72 6f 79 20 6f 70 65 72 61 74 69 6f 6e  estroy operation
24f80 73 20 6f 63 63 75 72 20 6f 6e 20 74 68 65 20 73  s occur on the s
24f90 61 6d 65 20 62 74 72 65 65 20 2a 2f 0a 20 20 20  ame btree */.   
24fa0 20 20 20 61 73 73 65 72 74 28 20 72 65 73 65 74     assert( reset
24fb0 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74 3d 3d 30  SchemaOnFault==0
24fc0 20 7c 7c 20 72 65 73 65 74 53 63 68 65 6d 61 4f   || resetSchemaO
24fd0 6e 46 61 75 6c 74 3d 3d 69 44 62 2b 31 20 29 3b  nFault==iDb+1 );
24fe0 0a 20 20 20 20 20 20 72 65 73 65 74 53 63 68 65  .      resetSche
24ff0 6d 61 4f 6e 46 61 75 6c 74 20 3d 20 69 44 62 2b  maOnFault = iDb+
25000 31 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a  1;.    }.#endif.
25010 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
25020 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6c 65 61 72  /* Opcode: Clear
25030 20 50 31 20 50 32 20 50 33 0a 2a 2a 0a 2a 2a 20   P1 P2 P3.**.** 
25040 44 65 6c 65 74 65 20 61 6c 6c 20 63 6f 6e 74 65  Delete all conte
25050 6e 74 73 20 6f 66 20 74 68 65 20 64 61 74 61 62  nts of the datab
25060 61 73 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  ase table or ind
25070 65 78 20 77 68 6f 73 65 20 72 6f 6f 74 20 70 61  ex whose root pa
25080 67 65 0a 2a 2a 20 69 6e 20 74 68 65 20 64 61 74  ge.** in the dat
25090 61 62 61 73 65 20 66 69 6c 65 20 69 73 20 67 69  abase file is gi
250a0 76 65 6e 20 62 79 20 50 31 2e 20 20 42 75 74 2c  ven by P1.  But,
250b0 20 75 6e 6c 69 6b 65 20 44 65 73 74 72 6f 79 2c   unlike Destroy,
250c0 20 64 6f 20 6e 6f 74 0a 2a 2a 20 72 65 6d 6f 76   do not.** remov
250d0 65 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69  e the table or i
250e0 6e 64 65 78 20 66 72 6f 6d 20 74 68 65 20 64 61  ndex from the da
250f0 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a  tabase file..**.
25100 2a 2a 20 54 68 65 20 74 61 62 6c 65 20 62 65 69  ** The table bei
25110 6e 67 20 63 6c 65 61 72 20 69 73 20 69 6e 20 74  ng clear is in t
25120 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
25130 20 66 69 6c 65 20 69 66 20 50 32 3d 3d 30 2e 20   file if P2==0. 
25140 20 49 66 0a 2a 2a 20 50 32 3d 3d 31 20 74 68 65   If.** P2==1 the
25150 6e 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 62  n the table to b
25160 65 20 63 6c 65 61 72 20 69 73 20 69 6e 20 74 68  e clear is in th
25170 65 20 61 75 78 69 6c 69 61 72 79 20 64 61 74 61  e auxiliary data
25180 62 61 73 65 20 66 69 6c 65 0a 2a 2a 20 74 68 61  base file.** tha
25190 74 20 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f  t is used to sto
251a0 72 65 20 74 61 62 6c 65 73 20 63 72 65 61 74 65  re tables create
251b0 20 75 73 69 6e 67 20 43 52 45 41 54 45 20 54 45   using CREATE TE
251c0 4d 50 4f 52 41 52 59 20 54 41 42 4c 45 2e 0a 2a  MPORARY TABLE..*
251d0 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 33 20 76  *.** If the P3 v
251e0 61 6c 75 65 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f  alue is non-zero
251f0 2c 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65  , then the table
25200 20 72 65 66 65 72 72 65 64 20 74 6f 20 6d 75 73   referred to mus
25210 74 20 62 65 20 61 6e 0a 2a 2a 20 69 6e 74 6b 65  t be an.** intke
25220 79 20 74 61 62 6c 65 20 28 61 6e 20 53 51 4c 20  y table (an SQL 
25230 74 61 62 6c 65 2c 20 6e 6f 74 20 61 6e 20 69 6e  table, not an in
25240 64 65 78 29 2e 20 49 6e 20 74 68 69 73 20 63 61  dex). In this ca
25250 73 65 20 74 68 65 20 72 6f 77 20 63 68 61 6e 67  se the row chang
25260 65 20 0a 2a 2a 20 63 6f 75 6e 74 20 69 73 20 69  e .** count is i
25270 6e 63 72 65 6d 65 6e 74 65 64 20 62 79 20 74 68  ncremented by th
25280 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73  e number of rows
25290 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 62 65   in the table be
252a0 69 6e 67 20 63 6c 65 61 72 65 64 2e 20 0a 2a 2a  ing cleared. .**
252b0 20 49 66 20 50 33 20 69 73 20 67 72 65 61 74 65   If P3 is greate
252c0 72 20 74 68 61 6e 20 7a 65 72 6f 2c 20 74 68 65  r than zero, the
252d0 6e 20 74 68 65 20 76 61 6c 75 65 20 73 74 6f 72  n the value stor
252e0 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ed in register P
252f0 33 20 69 73 0a 2a 2a 20 61 6c 73 6f 20 69 6e 63  3 is.** also inc
25300 72 65 6d 65 6e 74 65 64 20 62 79 20 74 68 65 20  remented by the 
25310 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69  number of rows i
25320 6e 20 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e  n the table bein
25330 67 20 63 6c 65 61 72 65 64 2e 0a 2a 2a 0a 2a 2a  g cleared..**.**
25340 20 53 65 65 20 61 6c 73 6f 3a 20 44 65 73 74 72   See also: Destr
25350 6f 79 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6c  oy.*/.case OP_Cl
25360 65 61 72 3a 20 7b 0a 20 20 69 6e 74 20 6e 43 68  ear: {.  int nCh
25370 61 6e 67 65 3b 0a 20 0a 20 20 6e 43 68 61 6e 67  ange;. .  nChang
25380 65 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28  e = 0;.  assert(
25390 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26   (p->btreeMask &
253a0 20 28 28 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c   (((yDbMask)1)<<
253b0 70 4f 70 2d 3e 70 32 29 29 21 3d 30 20 29 3b 0a  pOp->p2))!=0 );.
253c0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
253d0 72 65 65 43 6c 65 61 72 54 61 62 6c 65 28 0a 20  reeClearTable(. 
253e0 20 20 20 20 20 64 62 2d 3e 61 44 62 5b 70 4f 70       db->aDb[pOp
253f0 2d 3e 70 32 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e  ->p2].pBt, pOp->
25400 70 31 2c 20 28 70 4f 70 2d 3e 70 33 20 3f 20 26  p1, (pOp->p3 ? &
25410 6e 43 68 61 6e 67 65 20 3a 20 30 29 0a 20 20 29  nChange : 0).  )
25420 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 33 20  ;.  if( pOp->p3 
25430 29 7b 0a 20 20 20 20 70 2d 3e 6e 43 68 61 6e 67  ){.    p->nChang
25440 65 20 2b 3d 20 6e 43 68 61 6e 67 65 3b 0a 20 20  e += nChange;.  
25450 20 20 69 66 28 20 70 4f 70 2d 3e 70 33 3e 30 20    if( pOp->p3>0 
25460 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ){.      assert(
25470 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65   memIsValid(&aMe
25480 6d 5b 70 4f 70 2d 3e 70 33 5d 29 20 29 3b 0a 20  m[pOp->p3]) );. 
25490 20 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43       memAboutToC
254a0 68 61 6e 67 65 28 70 2c 20 26 61 4d 65 6d 5b 70  hange(p, &aMem[p
254b0 4f 70 2d 3e 70 33 5d 29 3b 0a 20 20 20 20 20 20  Op->p3]);.      
254c0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 2e 75 2e  aMem[pOp->p3].u.
254d0 69 20 2b 3d 20 6e 43 68 61 6e 67 65 3b 0a 20 20  i += nChange;.  
254e0 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b    }.  }.  break;
254f0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43  .}../* Opcode: C
25500 72 65 61 74 65 54 61 62 6c 65 20 50 31 20 50 32  reateTable P1 P2
25510 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 6c 6c   * * *.**.** All
25520 6f 63 61 74 65 20 61 20 6e 65 77 20 74 61 62 6c  ocate a new tabl
25530 65 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61  e in the main da
25540 74 61 62 61 73 65 20 66 69 6c 65 20 69 66 20 50  tabase file if P
25550 31 3d 3d 30 20 6f 72 20 69 6e 20 74 68 65 0a 2a  1==0 or in the.*
25560 2a 20 61 75 78 69 6c 69 61 72 79 20 64 61 74 61  * auxiliary data
25570 62 61 73 65 20 66 69 6c 65 20 69 66 20 50 31 3d  base file if P1=
25580 3d 31 20 6f 72 20 69 6e 20 61 6e 20 61 74 74 61  =1 or in an atta
25590 63 68 65 64 20 64 61 74 61 62 61 73 65 20 69 66  ched database if
255a0 0a 2a 2a 20 50 31 3e 31 2e 20 20 57 72 69 74 65  .** P1>1.  Write
255b0 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65 20 6e   the root page n
255c0 75 6d 62 65 72 20 6f 66 20 74 68 65 20 6e 65 77  umber of the new
255d0 20 74 61 62 6c 65 20 69 6e 74 6f 0a 2a 2a 20 72   table into.** r
255e0 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 0a 2a 2a  egister P2.**.**
255f0 20 54 68 65 20 64 69 66 66 65 72 65 6e 63 65 20   The difference 
25600 62 65 74 77 65 65 6e 20 61 20 74 61 62 6c 65 20  between a table 
25610 61 6e 64 20 61 6e 20 69 6e 64 65 78 20 69 73 20  and an index is 
25620 74 68 69 73 3a 20 20 41 20 74 61 62 6c 65 20 6d  this:  A table m
25630 75 73 74 0a 2a 2a 20 68 61 76 65 20 61 20 34 2d  ust.** have a 4-
25640 62 79 74 65 20 69 6e 74 65 67 65 72 20 6b 65 79  byte integer key
25650 20 61 6e 64 20 63 61 6e 20 68 61 76 65 20 61 72   and can have ar
25660 62 69 74 72 61 72 79 20 64 61 74 61 2e 20 20 41  bitrary data.  A
25670 6e 20 69 6e 64 65 78 0a 2a 2a 20 68 61 73 20 61  n index.** has a
25680 6e 20 61 72 62 69 74 72 61 72 79 20 6b 65 79 20  n arbitrary key 
25690 62 75 74 20 6e 6f 20 64 61 74 61 2e 0a 2a 2a 0a  but no data..**.
256a0 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 43 72 65  ** See also: Cre
256b0 61 74 65 49 6e 64 65 78 0a 2a 2f 0a 2f 2a 20 4f  ateIndex.*/./* O
256c0 70 63 6f 64 65 3a 20 43 72 65 61 74 65 49 6e 64  pcode: CreateInd
256d0 65 78 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  ex P1 P2 * * *.*
256e0 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65 20 61 20  *.** Allocate a 
256f0 6e 65 77 20 69 6e 64 65 78 20 69 6e 20 74 68 65  new index in the
25700 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66   main database f
25710 69 6c 65 20 69 66 20 50 31 3d 3d 30 20 6f 72 20  ile if P1==0 or 
25720 69 6e 20 74 68 65 0a 2a 2a 20 61 75 78 69 6c 69  in the.** auxili
25730 61 72 79 20 64 61 74 61 62 61 73 65 20 66 69 6c  ary database fil
25740 65 20 69 66 20 50 31 3d 3d 31 20 6f 72 20 69 6e  e if P1==1 or in
25750 20 61 6e 20 61 74 74 61 63 68 65 64 20 64 61 74   an attached dat
25760 61 62 61 73 65 20 69 66 0a 2a 2a 20 50 31 3e 31  abase if.** P1>1
25770 2e 20 20 57 72 69 74 65 20 74 68 65 20 72 6f 6f  .  Write the roo
25780 74 20 70 61 67 65 20 6e 75 6d 62 65 72 20 6f 66  t page number of
25790 20 74 68 65 20 6e 65 77 20 74 61 62 6c 65 20 69   the new table i
257a0 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72 20  nto.** register 
257b0 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 64 6f  P2..**.** See do
257c0 63 75 6d 65 6e 74 61 74 69 6f 6e 20 6f 6e 20 4f  cumentation on O
257d0 50 5f 43 72 65 61 74 65 54 61 62 6c 65 20 66 6f  P_CreateTable fo
257e0 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66  r additional inf
257f0 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73  ormation..*/.cas
25800 65 20 4f 50 5f 43 72 65 61 74 65 49 6e 64 65 78  e OP_CreateIndex
25810 3a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  :            /* 
25820 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20  out2-prerelease 
25830 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 72 65 61 74  */.case OP_Creat
25840 65 54 61 62 6c 65 3a 20 7b 20 20 20 20 20 20 20  eTable: {       
25850 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65     /* out2-prere
25860 6c 65 61 73 65 20 2a 2f 0a 20 20 69 6e 74 20 70  lease */.  int p
25870 67 6e 6f 3b 0a 20 20 69 6e 74 20 66 6c 61 67 73  gno;.  int flags
25880 3b 0a 20 20 44 62 20 2a 70 44 62 3b 0a 0a 20 20  ;.  Db *pDb;..  
25890 70 67 6e 6f 20 3d 20 30 3b 0a 20 20 61 73 73 65  pgno = 0;.  asse
258a0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
258b0 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44  & pOp->p1<db->nD
258c0 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28  b );.  assert( (
258d0 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28  p->btreeMask & (
258e0 28 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c 70 4f  ((yDbMask)1)<<pO
258f0 70 2d 3e 70 31 29 29 21 3d 30 20 29 3b 0a 20 20  p->p1))!=0 );.  
25900 70 44 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b 70  pDb = &db->aDb[p
25910 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
25920 74 28 20 70 44 62 2d 3e 70 42 74 21 3d 30 20 29  t( pDb->pBt!=0 )
25930 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63  ;.  if( pOp->opc
25940 6f 64 65 3d 3d 4f 50 5f 43 72 65 61 74 65 54 61  ode==OP_CreateTa
25950 62 6c 65 20 29 7b 0a 20 20 20 20 2f 2a 20 66 6c  ble ){.    /* fl
25960 61 67 73 20 3d 20 42 54 52 45 45 5f 49 4e 54 4b  ags = BTREE_INTK
25970 45 59 3b 20 2a 2f 0a 20 20 20 20 66 6c 61 67 73  EY; */.    flags
25980 20 3d 20 42 54 52 45 45 5f 49 4e 54 4b 45 59 3b   = BTREE_INTKEY;
25990 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 66 6c  .  }else{.    fl
259a0 61 67 73 20 3d 20 42 54 52 45 45 5f 42 4c 4f 42  ags = BTREE_BLOB
259b0 4b 45 59 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20  KEY;.  }.  rc = 
259c0 73 71 6c 69 74 65 33 42 74 72 65 65 43 72 65 61  sqlite3BtreeCrea
259d0 74 65 54 61 62 6c 65 28 70 44 62 2d 3e 70 42 74  teTable(pDb->pBt
259e0 2c 20 26 70 67 6e 6f 2c 20 66 6c 61 67 73 29 3b  , &pgno, flags);
259f0 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70  .  pOut->u.i = p
25a00 67 6e 6f 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  gno;.  break;.}.
25a10 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 61 72 73  ./* Opcode: Pars
25a20 65 53 63 68 65 6d 61 20 50 31 20 2a 20 2a 20 50  eSchema P1 * * P
25a30 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 61  4 *.**.** Read a
25a40 6e 64 20 70 61 72 73 65 20 61 6c 6c 20 65 6e 74  nd parse all ent
25a50 72 69 65 73 20 66 72 6f 6d 20 74 68 65 20 53 51  ries from the SQ
25a60 4c 49 54 45 5f 4d 41 53 54 45 52 20 74 61 62 6c  LITE_MASTER tabl
25a70 65 20 6f 66 20 64 61 74 61 62 61 73 65 20 50 31  e of database P1
25a80 0a 2a 2a 20 74 68 61 74 20 6d 61 74 63 68 20 74  .** that match t
25a90 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  he WHERE clause 
25aa0 50 34 2e 20 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  P4. .**.** This 
25ab0 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74  opcode invokes t
25ac0 68 65 20 70 61 72 73 65 72 20 74 6f 20 63 72 65  he parser to cre
25ad0 61 74 65 20 61 20 6e 65 77 20 76 69 72 74 75 61  ate a new virtua
25ae0 6c 20 6d 61 63 68 69 6e 65 2c 0a 2a 2a 20 74 68  l machine,.** th
25af0 65 6e 20 72 75 6e 73 20 74 68 65 20 6e 65 77 20  en runs the new 
25b00 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 2e  virtual machine.
25b10 20 20 49 74 20 69 73 20 74 68 75 73 20 61 20 72    It is thus a r
25b20 65 2d 65 6e 74 72 61 6e 74 20 6f 70 63 6f 64 65  e-entrant opcode
25b30 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 61 72  ..*/.case OP_Par
25b40 73 65 53 63 68 65 6d 61 3a 20 7b 0a 20 20 69 6e  seSchema: {.  in
25b50 74 20 69 44 62 3b 0a 20 20 63 6f 6e 73 74 20 63  t iDb;.  const c
25b60 68 61 72 20 2a 7a 4d 61 73 74 65 72 3b 0a 20 20  har *zMaster;.  
25b70 63 68 61 72 20 2a 7a 53 71 6c 3b 0a 20 20 49 6e  char *zSql;.  In
25b80 69 74 44 61 74 61 20 69 6e 69 74 44 61 74 61 3b  itData initData;
25b90 0a 0a 20 20 2f 2a 20 41 6e 79 20 70 72 65 70 61  ..  /* Any prepa
25ba0 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20 74 68  red statement th
25bb0 61 74 20 69 6e 76 6f 6b 65 73 20 74 68 69 73 20  at invokes this 
25bc0 6f 70 63 6f 64 65 20 77 69 6c 6c 20 68 6f 6c 64  opcode will hold
25bd0 20 6d 75 74 65 78 65 73 0a 20 20 2a 2a 20 6f 6e   mutexes.  ** on
25be0 20 65 76 65 72 79 20 62 74 72 65 65 2e 20 20 54   every btree.  T
25bf0 68 69 73 20 69 73 20 61 20 70 72 65 72 65 71 75  his is a prerequ
25c00 69 73 69 74 65 20 66 6f 72 20 69 6e 76 6f 6b 69  isite for invoki
25c10 6e 67 20 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33  ng .  ** sqlite3
25c20 49 6e 69 74 43 61 6c 6c 62 61 63 6b 28 29 2e 0a  InitCallback()..
25c30 20 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49    */.#ifdef SQLI
25c40 54 45 5f 44 45 42 55 47 0a 20 20 66 6f 72 28 69  TE_DEBUG.  for(i
25c50 44 62 3d 30 3b 20 69 44 62 3c 64 62 2d 3e 6e 44  Db=0; iDb<db->nD
25c60 62 3b 20 69 44 62 2b 2b 29 7b 0a 20 20 20 20 61  b; iDb++){.    a
25c70 73 73 65 72 74 28 20 69 44 62 3d 3d 31 20 7c 7c  ssert( iDb==1 ||
25c80 20 73 71 6c 69 74 65 33 42 74 72 65 65 48 6f 6c   sqlite3BtreeHol
25c90 64 73 4d 75 74 65 78 28 64 62 2d 3e 61 44 62 5b  dsMutex(db->aDb[
25ca0 69 44 62 5d 2e 70 42 74 29 20 29 3b 0a 20 20 7d  iDb].pBt) );.  }
25cb0 0a 23 65 6e 64 69 66 0a 20 20 61 73 73 65 72 74  .#endif.  assert
25cc0 28 20 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 3d  ( p->btreeMask =
25cd0 3d 20 7e 28 79 44 62 4d 61 73 6b 29 30 20 29 3b  = ~(yDbMask)0 );
25ce0 0a 0a 0a 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e  ...  iDb = pOp->
25cf0 70 31 3b 0a 20 20 61 73 73 65 72 74 28 20 69 44  p1;.  assert( iD
25d00 62 3e 3d 30 20 26 26 20 69 44 62 3c 64 62 2d 3e  b>=0 && iDb<db->
25d10 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28  nDb );.  assert(
25d20 20 44 62 48 61 73 50 72 6f 70 65 72 74 79 28 64   DbHasProperty(d
25d30 62 2c 20 69 44 62 2c 20 44 42 5f 53 63 68 65 6d  b, iDb, DB_Schem
25d40 61 4c 6f 61 64 65 64 29 20 29 3b 0a 20 20 2f 2a  aLoaded) );.  /*
25d50 20 55 73 65 64 20 74 6f 20 62 65 20 61 20 63 6f   Used to be a co
25d60 6e 64 69 74 69 6f 6e 61 6c 20 2a 2f 20 7b 0a 20  nditional */ {. 
25d70 20 20 20 7a 4d 61 73 74 65 72 20 3d 20 53 43 48     zMaster = SCH
25d80 45 4d 41 5f 54 41 42 4c 45 28 69 44 62 29 3b 0a  EMA_TABLE(iDb);.
25d90 20 20 20 20 69 6e 69 74 44 61 74 61 2e 64 62 20      initData.db 
25da0 3d 20 64 62 3b 0a 20 20 20 20 69 6e 69 74 44 61  = db;.    initDa
25db0 74 61 2e 69 44 62 20 3d 20 70 4f 70 2d 3e 70 31  ta.iDb = pOp->p1
25dc0 3b 0a 20 20 20 20 69 6e 69 74 44 61 74 61 2e 70  ;.    initData.p
25dd0 7a 45 72 72 4d 73 67 20 3d 20 26 70 2d 3e 7a 45  zErrMsg = &p->zE
25de0 72 72 4d 73 67 3b 0a 20 20 20 20 7a 53 71 6c 20  rrMsg;.    zSql 
25df0 3d 20 73 71 6c 69 74 65 33 4d 50 72 69 6e 74 66  = sqlite3MPrintf
25e00 28 64 62 2c 0a 20 20 20 20 20 20 20 22 53 45 4c  (db,.       "SEL
25e10 45 43 54 20 6e 61 6d 65 2c 20 72 6f 6f 74 70 61  ECT name, rootpa
25e20 67 65 2c 20 73 71 6c 20 46 52 4f 4d 20 27 25 71  ge, sql FROM '%q
25e30 27 2e 25 73 20 57 48 45 52 45 20 25 73 20 4f 52  '.%s WHERE %s OR
25e40 44 45 52 20 42 59 20 72 6f 77 69 64 22 2c 0a 20  DER BY rowid",. 
25e50 20 20 20 20 20 20 64 62 2d 3e 61 44 62 5b 69 44        db->aDb[iD
25e60 62 5d 2e 7a 4e 61 6d 65 2c 20 7a 4d 61 73 74 65  b].zName, zMaste
25e70 72 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20  r, pOp->p4.z);. 
25e80 20 20 20 69 66 28 20 7a 53 71 6c 3d 3d 30 20 29     if( zSql==0 )
25e90 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c  {.      rc = SQL
25ea0 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 20 20 7d  ITE_NOMEM;.    }
25eb0 65 6c 73 65 7b 0a 20 20 20 20 20 20 61 73 73 65  else{.      asse
25ec0 72 74 28 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73  rt( db->init.bus
25ed0 79 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 64 62  y==0 );.      db
25ee0 2d 3e 69 6e 69 74 2e 62 75 73 79 20 3d 20 31 3b  ->init.busy = 1;
25ef0 0a 20 20 20 20 20 20 69 6e 69 74 44 61 74 61 2e  .      initData.
25f00 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a  rc = SQLITE_OK;.
25f10 20 20 20 20 20 20 61 73 73 65 72 74 28 20 21 64        assert( !d
25f20 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20  b->mallocFailed 
25f30 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71  );.      rc = sq
25f40 6c 69 74 65 33 5f 65 78 65 63 28 64 62 2c 20 7a  lite3_exec(db, z
25f50 53 71 6c 2c 20 73 71 6c 69 74 65 33 49 6e 69 74  Sql, sqlite3Init
25f60 43 61 6c 6c 62 61 63 6b 2c 20 26 69 6e 69 74 44  Callback, &initD
25f70 61 74 61 2c 20 30 29 3b 0a 20 20 20 20 20 20 69  ata, 0);.      i
25f80 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
25f90 20 29 20 72 63 20 3d 20 69 6e 69 74 44 61 74 61   ) rc = initData
25fa0 2e 72 63 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  .rc;.      sqlit
25fb0 65 33 44 62 46 72 65 65 28 64 62 2c 20 7a 53 71  e3DbFree(db, zSq
25fc0 6c 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 69 6e  l);.      db->in
25fd0 69 74 2e 62 75 73 79 20 3d 20 30 3b 0a 20 20 20  it.busy = 0;.   
25fe0 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 3d   }.  }.  if( rc=
25ff0 3d 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 29 7b  =SQLITE_NOMEM ){
26000 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  .    goto no_mem
26010 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 20 20  ;.  }.  break;  
26020 0a 7d 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64  .}..#if !defined
26030 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4e 41  (SQLITE_OMIT_ANA
26040 4c 59 5a 45 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a  LYZE)./* Opcode:
26050 20 4c 6f 61 64 41 6e 61 6c 79 73 69 73 20 50 31   LoadAnalysis P1
26060 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52   * * * *.**.** R
26070 65 61 64 20 74 68 65 20 73 71 6c 69 74 65 5f 73  ead the sqlite_s
26080 74 61 74 31 20 74 61 62 6c 65 20 66 6f 72 20 64  tat1 table for d
26090 61 74 61 62 61 73 65 20 50 31 20 61 6e 64 20 6c  atabase P1 and l
260a0 6f 61 64 20 74 68 65 20 63 6f 6e 74 65 6e 74 0a  oad the content.
260b0 2a 2a 20 6f 66 20 74 68 61 74 20 74 61 62 6c 65  ** of that table
260c0 20 69 6e 74 6f 20 74 68 65 20 69 6e 74 65 72 6e   into the intern
260d0 61 6c 20 69 6e 64 65 78 20 68 61 73 68 20 74 61  al index hash ta
260e0 62 6c 65 2e 20 20 54 68 69 73 20 77 69 6c 6c 20  ble.  This will 
260f0 63 61 75 73 65 0a 2a 2a 20 74 68 65 20 61 6e 61  cause.** the ana
26100 6c 79 73 69 73 20 74 6f 20 62 65 20 75 73 65 64  lysis to be used
26110 20 77 68 65 6e 20 70 72 65 70 61 72 69 6e 67 20   when preparing 
26120 61 6c 6c 20 73 75 62 73 65 71 75 65 6e 74 20 71  all subsequent q
26130 75 65 72 69 65 73 2e 0a 2a 2f 0a 63 61 73 65 20  ueries..*/.case 
26140 4f 50 5f 4c 6f 61 64 41 6e 61 6c 79 73 69 73 3a  OP_LoadAnalysis:
26150 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70   {.  assert( pOp
26160 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
26170 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20  p1<db->nDb );.  
26180 72 63 20 3d 20 73 71 6c 69 74 65 33 41 6e 61 6c  rc = sqlite3Anal
26190 79 73 69 73 4c 6f 61 64 28 64 62 2c 20 70 4f 70  ysisLoad(db, pOp
261a0 2d 3e 70 31 29 3b 0a 20 20 62 72 65 61 6b 3b 20  ->p1);.  break; 
261b0 20 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 21 64   .}.#endif /* !d
261c0 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
261d0 49 54 5f 41 4e 41 4c 59 5a 45 29 20 2a 2f 0a 0a  IT_ANALYZE) */..
261e0 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70 54  /* Opcode: DropT
261f0 61 62 6c 65 20 50 31 20 2a 20 2a 20 50 34 20 2a  able P1 * * P4 *
26200 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74 68  .**.** Remove th
26210 65 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d 6d  e internal (in-m
26220 65 6d 6f 72 79 29 20 64 61 74 61 20 73 74 72 75  emory) data stru
26230 63 74 75 72 65 73 20 74 68 61 74 20 64 65 73 63  ctures that desc
26240 72 69 62 65 0a 2a 2a 20 74 68 65 20 74 61 62 6c  ribe.** the tabl
26250 65 20 6e 61 6d 65 64 20 50 34 20 69 6e 20 64 61  e named P4 in da
26260 74 61 62 61 73 65 20 50 31 2e 20 20 54 68 69 73  tabase P1.  This
26270 20 69 73 20 63 61 6c 6c 65 64 20 61 66 74 65 72   is called after
26280 20 61 20 74 61 62 6c 65 0a 2a 2a 20 69 73 20 64   a table.** is d
26290 72 6f 70 70 65 64 20 69 6e 20 6f 72 64 65 72 20  ropped in order 
262a0 74 6f 20 6b 65 65 70 20 74 68 65 20 69 6e 74 65  to keep the inte
262b0 72 6e 61 6c 20 72 65 70 72 65 73 65 6e 74 61 74  rnal representat
262c0 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63  ion of the.** sc
262d0 68 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74 20  hema consistent 
262e0 77 69 74 68 20 77 68 61 74 20 69 73 20 6f 6e 20  with what is on 
262f0 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  disk..*/.case OP
26300 5f 44 72 6f 70 54 61 62 6c 65 3a 20 7b 0a 20 20  _DropTable: {.  
26310 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64  sqlite3UnlinkAnd
26320 44 65 6c 65 74 65 54 61 62 6c 65 28 64 62 2c 20  DeleteTable(db, 
26330 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34  pOp->p1, pOp->p4
26340 2e 7a 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .z);.  break;.}.
26350 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70  ./* Opcode: Drop
26360 49 6e 64 65 78 20 50 31 20 2a 20 2a 20 50 34 20  Index P1 * * P4 
26370 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74  *.**.** Remove t
26380 68 65 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d  he internal (in-
26390 6d 65 6d 6f 72 79 29 20 64 61 74 61 20 73 74 72  memory) data str
263a0 75 63 74 75 72 65 73 20 74 68 61 74 20 64 65 73  uctures that des
263b0 63 72 69 62 65 0a 2a 2a 20 74 68 65 20 69 6e 64  cribe.** the ind
263c0 65 78 20 6e 61 6d 65 64 20 50 34 20 69 6e 20 64  ex named P4 in d
263d0 61 74 61 62 61 73 65 20 50 31 2e 20 20 54 68 69  atabase P1.  Thi
263e0 73 20 69 73 20 63 61 6c 6c 65 64 20 61 66 74 65  s is called afte
263f0 72 20 61 6e 20 69 6e 64 65 78 0a 2a 2a 20 69 73  r an index.** is
26400 20 64 72 6f 70 70 65 64 20 69 6e 20 6f 72 64 65   dropped in orde
26410 72 20 74 6f 20 6b 65 65 70 20 74 68 65 20 69 6e  r to keep the in
26420 74 65 72 6e 61 6c 20 72 65 70 72 65 73 65 6e 74  ternal represent
26430 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20  ation of the.** 
26440 73 63 68 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e  schema consisten
26450 74 20 77 69 74 68 20 77 68 61 74 20 69 73 20 6f  t with what is o
26460 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20  n disk..*/.case 
26470 4f 50 5f 44 72 6f 70 49 6e 64 65 78 3a 20 7b 0a  OP_DropIndex: {.
26480 20 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41    sqlite3UnlinkA
26490 6e 64 44 65 6c 65 74 65 49 6e 64 65 78 28 64 62  ndDeleteIndex(db
264a0 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e  , pOp->p1, pOp->
264b0 70 34 2e 7a 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  p4.z);.  break;.
264c0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 72  }../* Opcode: Dr
264d0 6f 70 54 72 69 67 67 65 72 20 50 31 20 2a 20 2a  opTrigger P1 * *
264e0 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f   P4 *.**.** Remo
264f0 76 65 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20  ve the internal 
26500 28 69 6e 2d 6d 65 6d 6f 72 79 29 20 64 61 74 61  (in-memory) data
26510 20 73 74 72 75 63 74 75 72 65 73 20 74 68 61 74   structures that
26520 20 64 65 73 63 72 69 62 65 0a 2a 2a 20 74 68 65   describe.** the
26530 20 74 72 69 67 67 65 72 20 6e 61 6d 65 64 20 50   trigger named P
26540 34 20 69 6e 20 64 61 74 61 62 61 73 65 20 50 31  4 in database P1
26550 2e 20 20 54 68 69 73 20 69 73 20 63 61 6c 6c 65  .  This is calle
26560 64 20 61 66 74 65 72 20 61 20 74 72 69 67 67 65  d after a trigge
26570 72 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65 64 20  r.** is dropped 
26580 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65 70  in order to keep
26590 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 72 65   the internal re
265a0 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20  presentation of 
265b0 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 63 6f  the.** schema co
265c0 6e 73 69 73 74 65 6e 74 20 77 69 74 68 20 77 68  nsistent with wh
265d0 61 74 20 69 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a  at is on disk..*
265e0 2f 0a 63 61 73 65 20 4f 50 5f 44 72 6f 70 54 72  /.case OP_DropTr
265f0 69 67 67 65 72 3a 20 7b 0a 20 20 73 71 6c 69 74  igger: {.  sqlit
26600 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74  e3UnlinkAndDelet
26610 65 54 72 69 67 67 65 72 28 64 62 2c 20 70 4f 70  eTrigger(db, pOp
26620 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29  ->p1, pOp->p4.z)
26630 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 23  ;.  break;.}...#
26640 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
26650 49 54 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45  IT_INTEGRITY_CHE
26660 43 4b 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e  CK./* Opcode: In
26670 74 65 67 72 69 74 79 43 6b 20 50 31 20 50 32 20  tegrityCk P1 P2 
26680 50 33 20 2a 20 50 35 0a 2a 2a 0a 2a 2a 20 44 6f  P3 * P5.**.** Do
26690 20 61 6e 20 61 6e 61 6c 79 73 69 73 20 6f 66 20   an analysis of 
266a0 74 68 65 20 63 75 72 72 65 6e 74 6c 79 20 6f 70  the currently op
266b0 65 6e 20 64 61 74 61 62 61 73 65 2e 20 20 53 74  en database.  St
266c0 6f 72 65 20 69 6e 0a 2a 2a 20 72 65 67 69 73 74  ore in.** regist
266d0 65 72 20 50 31 20 74 68 65 20 74 65 78 74 20 6f  er P1 the text o
266e0 66 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61  f an error messa
266f0 67 65 20 64 65 73 63 72 69 62 69 6e 67 20 61 6e  ge describing an
26700 79 20 70 72 6f 62 6c 65 6d 73 2e 0a 2a 2a 20 49  y problems..** I
26710 66 20 6e 6f 20 70 72 6f 62 6c 65 6d 73 20 61 72  f no problems ar
26720 65 20 66 6f 75 6e 64 2c 20 73 74 6f 72 65 20 61  e found, store a
26730 20 4e 55 4c 4c 20 69 6e 20 72 65 67 69 73 74 65   NULL in registe
26740 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  r P1..**.** The 
26750 72 65 67 69 73 74 65 72 20 50 33 20 63 6f 6e 74  register P3 cont
26760 61 69 6e 73 20 74 68 65 20 6d 61 78 69 6d 75 6d  ains the maximum
26770 20 6e 75 6d 62 65 72 20 6f 66 20 61 6c 6c 6f 77   number of allow
26780 65 64 20 65 72 72 6f 72 73 2e 0a 2a 2a 20 41 74  ed errors..** At
26790 20 6d 6f 73 74 20 72 65 67 28 50 33 29 20 65 72   most reg(P3) er
267a0 72 6f 72 73 20 77 69 6c 6c 20 62 65 20 72 65 70  rors will be rep
267b0 6f 72 74 65 64 2e 0a 2a 2a 20 49 6e 20 6f 74 68  orted..** In oth
267c0 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 61 6e  er words, the an
267d0 61 6c 79 73 69 73 20 73 74 6f 70 73 20 61 73 20  alysis stops as 
267e0 73 6f 6f 6e 20 61 73 20 72 65 67 28 50 31 29 20  soon as reg(P1) 
267f0 65 72 72 6f 72 73 20 61 72 65 20 0a 2a 2a 20 73  errors are .** s
26800 65 65 6e 2e 20 20 52 65 67 28 50 31 29 20 69 73  een.  Reg(P1) is
26810 20 75 70 64 61 74 65 64 20 77 69 74 68 20 74 68   updated with th
26820 65 20 6e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f  e number of erro
26830 72 73 20 72 65 6d 61 69 6e 69 6e 67 2e 0a 2a 2a  rs remaining..**
26840 0a 2a 2a 20 54 68 65 20 72 6f 6f 74 20 70 61 67  .** The root pag
26850 65 20 6e 75 6d 62 65 72 73 20 6f 66 20 61 6c 6c  e numbers of all
26860 20 74 61 62 6c 65 73 20 69 6e 20 74 68 65 20 64   tables in the d
26870 61 74 61 62 61 73 65 20 61 72 65 20 69 6e 74 65  atabase are inte
26880 67 65 72 0a 2a 2a 20 73 74 6f 72 65 64 20 69 6e  ger.** stored in
26890 20 72 65 67 28 50 31 29 2c 20 72 65 67 28 50 31   reg(P1), reg(P1
268a0 2b 31 29 2c 20 72 65 67 28 50 31 2b 32 29 2c 20  +1), reg(P1+2), 
268b0 2e 2e 2e 2e 20 20 54 68 65 72 65 20 61 72 65 20  ....  There are 
268c0 50 32 20 74 61 62 6c 65 73 0a 2a 2a 20 74 6f 74  P2 tables.** tot
268d0 61 6c 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20  al..**.** If P5 
268e0 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65  is not zero, the
268f0 20 63 68 65 63 6b 20 69 73 20 64 6f 6e 65 20 6f   check is done o
26900 6e 20 74 68 65 20 61 75 78 69 6c 69 61 72 79 20  n the auxiliary 
26910 64 61 74 61 62 61 73 65 0a 2a 2a 20 66 69 6c 65  database.** file
26920 2c 20 6e 6f 74 20 74 68 65 20 6d 61 69 6e 20 64  , not the main d
26930 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a  atabase file..**
26940 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
26950 69 73 20 75 73 65 64 20 74 6f 20 69 6d 70 6c 65  is used to imple
26960 6d 65 6e 74 20 74 68 65 20 69 6e 74 65 67 72 69  ment the integri
26970 74 79 5f 63 68 65 63 6b 20 70 72 61 67 6d 61 2e  ty_check pragma.
26980 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74 65  .*/.case OP_Inte
26990 67 72 69 74 79 43 6b 3a 20 7b 0a 20 20 69 6e 74  grityCk: {.  int
269a0 20 6e 52 6f 6f 74 3b 20 20 20 20 20 20 2f 2a 20   nRoot;      /* 
269b0 4e 75 6d 62 65 72 20 6f 66 20 74 61 62 6c 65 73  Number of tables
269c0 20 74 6f 20 63 68 65 63 6b 2e 20 20 28 4e 75 6d   to check.  (Num
269d0 62 65 72 20 6f 66 20 72 6f 6f 74 20 70 61 67 65  ber of root page
269e0 73 2e 29 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 52  s.) */.  int *aR
269f0 6f 6f 74 3b 20 20 20 20 20 2f 2a 20 41 72 72 61  oot;     /* Arra
26a00 79 20 6f 66 20 72 6f 6f 74 70 61 67 65 20 6e 75  y of rootpage nu
26a10 6d 62 65 72 73 20 66 6f 72 20 74 61 62 6c 65 73  mbers for tables
26a20 20 74 6f 20 62 65 20 63 68 65 63 6b 65 64 20 2a   to be checked *
26a30 2f 0a 20 20 69 6e 74 20 6a 3b 20 20 20 20 20 20  /.  int j;      
26a40 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e      /* Loop coun
26a50 74 65 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72  ter */.  int nEr
26a60 72 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  r;       /* Numb
26a70 65 72 20 6f 66 20 65 72 72 6f 72 73 20 72 65 70  er of errors rep
26a80 6f 72 74 65 64 20 2a 2f 0a 20 20 63 68 61 72 20  orted */.  char 
26a90 2a 7a 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 65  *z;        /* Te
26aa0 78 74 20 6f 66 20 74 68 65 20 65 72 72 6f 72 20  xt of the error 
26ab0 72 65 70 6f 72 74 20 2a 2f 0a 20 20 4d 65 6d 20  report */.  Mem 
26ac0 2a 70 6e 45 72 72 3b 20 20 20 20 20 2f 2a 20 52  *pnErr;     /* R
26ad0 65 67 69 73 74 65 72 20 6b 65 65 70 69 6e 67 20  egister keeping 
26ae0 74 72 61 63 6b 20 6f 66 20 65 72 72 6f 72 73 20  track of errors 
26af0 72 65 6d 61 69 6e 69 6e 67 20 2a 2f 0a 20 20 0a  remaining */.  .
26b00 20 20 6e 52 6f 6f 74 20 3d 20 70 4f 70 2d 3e 70    nRoot = pOp->p
26b10 32 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 52 6f  2;.  assert( nRo
26b20 6f 74 3e 30 20 29 3b 0a 20 20 61 52 6f 6f 74 20  ot>0 );.  aRoot 
26b30 3d 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f  = sqlite3DbMallo
26b40 63 52 61 77 28 64 62 2c 20 73 69 7a 65 6f 66 28  cRaw(db, sizeof(
26b50 69 6e 74 29 2a 28 6e 52 6f 6f 74 2b 31 29 20 29  int)*(nRoot+1) )
26b60 3b 0a 20 20 69 66 28 20 61 52 6f 6f 74 3d 3d 30  ;.  if( aRoot==0
26b70 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
26b80 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
26b90 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d  3>0 && pOp->p3<=
26ba0 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 6e 45  p->nMem );.  pnE
26bb0 72 72 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  rr = &aMem[pOp->
26bc0 70 33 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 28  p3];.  assert( (
26bd0 70 6e 45 72 72 2d 3e 66 6c 61 67 73 20 26 20 4d  pnErr->flags & M
26be0 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 0a 20 20  EM_Int)!=0 );.  
26bf0 61 73 73 65 72 74 28 20 28 70 6e 45 72 72 2d 3e  assert( (pnErr->
26c00 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53 74 72  flags & (MEM_Str
26c10 7c 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 29  |MEM_Blob))==0 )
26c20 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ;.  pIn1 = &aMem
26c30 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 66 6f 72  [pOp->p1];.  for
26c40 28 6a 3d 30 3b 20 6a 3c 6e 52 6f 6f 74 3b 20 6a  (j=0; j<nRoot; j
26c50 2b 2b 29 7b 0a 20 20 20 20 61 52 6f 6f 74 5b 6a  ++){.    aRoot[j
26c60 5d 20 3d 20 28 69 6e 74 29 73 71 6c 69 74 65 33  ] = (int)sqlite3
26c70 56 64 62 65 49 6e 74 56 61 6c 75 65 28 26 70 49  VdbeIntValue(&pI
26c80 6e 31 5b 6a 5d 29 3b 0a 20 20 7d 0a 20 20 61 52  n1[j]);.  }.  aR
26c90 6f 6f 74 5b 6a 5d 20 3d 20 30 3b 0a 20 20 61 73  oot[j] = 0;.  as
26ca0 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3c 64 62  sert( pOp->p5<db
26cb0 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72  ->nDb );.  asser
26cc0 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b  t( (p->btreeMask
26cd0 20 26 20 28 28 28 79 44 62 4d 61 73 6b 29 31 29   & (((yDbMask)1)
26ce0 3c 3c 70 4f 70 2d 3e 70 35 29 29 21 3d 30 20 29  <<pOp->p5))!=0 )
26cf0 3b 0a 20 20 7a 20 3d 20 73 71 6c 69 74 65 33 42  ;.  z = sqlite3B
26d00 74 72 65 65 49 6e 74 65 67 72 69 74 79 43 68 65  treeIntegrityChe
26d10 63 6b 28 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e  ck(db->aDb[pOp->
26d20 70 35 5d 2e 70 42 74 2c 20 61 52 6f 6f 74 2c 20  p5].pBt, aRoot, 
26d30 6e 52 6f 6f 74 2c 0a 20 20 20 20 20 20 20 20 20  nRoot,.         
26d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26d50 20 20 20 20 20 20 20 20 28 69 6e 74 29 70 6e 45          (int)pnE
26d60 72 72 2d 3e 75 2e 69 2c 20 26 6e 45 72 72 29 3b  rr->u.i, &nErr);
26d70 0a 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65  .  sqlite3DbFree
26d80 28 64 62 2c 20 61 52 6f 6f 74 29 3b 0a 20 20 70  (db, aRoot);.  p
26d90 6e 45 72 72 2d 3e 75 2e 69 20 2d 3d 20 6e 45 72  nErr->u.i -= nEr
26da0 72 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  r;.  sqlite3Vdbe
26db0 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 49 6e 31 29  MemSetNull(pIn1)
26dc0 3b 0a 20 20 69 66 28 20 6e 45 72 72 3d 3d 30 20  ;.  if( nErr==0 
26dd0 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 7a  ){.    assert( z
26de0 3d 3d 30 20 29 3b 0a 20 20 7d 65 6c 73 65 20 69  ==0 );.  }else i
26df0 66 28 20 7a 3d 3d 30 20 29 7b 0a 20 20 20 20 67  f( z==0 ){.    g
26e00 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 65  oto no_mem;.  }e
26e10 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  lse{.    sqlite3
26e20 56 64 62 65 4d 65 6d 53 65 74 53 74 72 28 70 49  VdbeMemSetStr(pI
26e30 6e 31 2c 20 7a 2c 20 2d 31 2c 20 53 51 4c 49 54  n1, z, -1, SQLIT
26e40 45 5f 55 54 46 38 2c 20 73 71 6c 69 74 65 33 5f  E_UTF8, sqlite3_
26e50 66 72 65 65 29 3b 0a 20 20 7d 0a 20 20 55 50 44  free);.  }.  UPD
26e60 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45  ATE_MAX_BLOBSIZE
26e70 28 70 49 6e 31 29 3b 0a 20 20 73 71 6c 69 74 65  (pIn1);.  sqlite
26e80 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64  3VdbeChangeEncod
26e90 69 6e 67 28 70 49 6e 31 2c 20 65 6e 63 6f 64 69  ing(pIn1, encodi
26ea0 6e 67 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ng);.  break;.}.
26eb0 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
26ec0 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54 59 5f  _OMIT_INTEGRITY_
26ed0 43 48 45 43 4b 20 2a 2f 0a 0a 2f 2a 20 4f 70 63  CHECK */../* Opc
26ee0 6f 64 65 3a 20 52 6f 77 53 65 74 41 64 64 20 50  ode: RowSetAdd P
26ef0 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
26f00 20 49 6e 73 65 72 74 20 74 68 65 20 69 6e 74 65   Insert the inte
26f10 67 65 72 20 76 61 6c 75 65 20 68 65 6c 64 20 62  ger value held b
26f20 79 20 72 65 67 69 73 74 65 72 20 50 32 20 69 6e  y register P2 in
26f30 74 6f 20 61 20 62 6f 6f 6c 65 61 6e 20 69 6e 64  to a boolean ind
26f40 65 78 0a 2a 2a 20 68 65 6c 64 20 69 6e 20 72 65  ex.** held in re
26f50 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 0a 2a 2a  gister P1..**.**
26f60 20 41 6e 20 61 73 73 65 72 74 69 6f 6e 20 66 61   An assertion fa
26f70 69 6c 73 20 69 66 20 50 32 20 69 73 20 6e 6f 74  ils if P2 is not
26f80 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2f 0a   an integer..*/.
26f90 63 61 73 65 20 4f 50 5f 52 6f 77 53 65 74 41 64  case OP_RowSetAd
26fa0 64 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20 69 6e  d: {       /* in
26fb0 31 2c 20 69 6e 32 20 2a 2f 0a 20 20 70 49 6e 31  1, in2 */.  pIn1
26fc0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
26fd0 5d 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65  ];.  pIn2 = &aMe
26fe0 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73  m[pOp->p2];.  as
26ff0 73 65 72 74 28 20 28 70 49 6e 32 2d 3e 66 6c 61  sert( (pIn2->fla
27000 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30  gs & MEM_Int)!=0
27010 20 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d   );.  if( (pIn1-
27020 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77  >flags & MEM_Row
27030 53 65 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73  Set)==0 ){.    s
27040 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
27050 52 6f 77 53 65 74 28 70 49 6e 31 29 3b 0a 20 20  RowSet(pIn1);.  
27060 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
27070 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29  gs & MEM_RowSet)
27080 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  ==0 ) goto no_me
27090 6d 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33  m;.  }.  sqlite3
270a0 52 6f 77 53 65 74 49 6e 73 65 72 74 28 70 49 6e  RowSetInsert(pIn
270b0 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20 70 49  1->u.pRowSet, pI
270c0 6e 32 2d 3e 75 2e 69 29 3b 0a 20 20 62 72 65 61  n2->u.i);.  brea
270d0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
270e0 20 52 6f 77 53 65 74 52 65 61 64 20 50 31 20 50   RowSetRead P1 P
270f0 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 45  2 P3 * *.**.** E
27100 78 74 72 61 63 74 20 74 68 65 20 73 6d 61 6c 6c  xtract the small
27110 65 73 74 20 76 61 6c 75 65 20 66 72 6f 6d 20 62  est value from b
27120 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 20 50 31 20  oolean index P1 
27130 61 6e 64 20 70 75 74 20 74 68 61 74 20 76 61 6c  and put that val
27140 75 65 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73  ue into.** regis
27150 74 65 72 20 50 33 2e 20 20 4f 72 2c 20 69 66 20  ter P3.  Or, if 
27160 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 20 50 31  boolean index P1
27170 20 69 73 20 69 6e 69 74 69 61 6c 6c 79 20 65 6d   is initially em
27180 70 74 79 2c 20 6c 65 61 76 65 20 50 33 0a 2a 2a  pty, leave P3.**
27190 20 75 6e 63 68 61 6e 67 65 64 20 61 6e 64 20 6a   unchanged and j
271a0 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69  ump to instructi
271b0 6f 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f  on P2..*/.case O
271c0 50 5f 52 6f 77 53 65 74 52 65 61 64 3a 20 7b 20  P_RowSetRead: { 
271d0 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
271e0 6e 31 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69 36  n1, out3 */.  i6
271f0 34 20 76 61 6c 3b 0a 20 20 43 48 45 43 4b 5f 46  4 val;.  CHECK_F
27200 4f 52 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20  OR_INTERRUPT;.  
27210 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
27220 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 28 70 49  ->p1];.  if( (pI
27230 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
27240 52 6f 77 53 65 74 29 3d 3d 30 20 0a 20 20 20 7c  RowSet)==0 .   |
27250 7c 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 4e  | sqlite3RowSetN
27260 65 78 74 28 70 49 6e 31 2d 3e 75 2e 70 52 6f 77  ext(pIn1->u.pRow
27270 53 65 74 2c 20 26 76 61 6c 29 3d 3d 30 0a 20 20  Set, &val)==0.  
27280 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20 62 6f  ){.    /* The bo
27290 6f 6c 65 61 6e 20 69 6e 64 65 78 20 69 73 20 65  olean index is e
272a0 6d 70 74 79 20 2a 2f 0a 20 20 20 20 73 71 6c 69  mpty */.    sqli
272b0 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c  te3VdbeMemSetNul
272c0 6c 28 70 49 6e 31 29 3b 0a 20 20 20 20 70 63 20  l(pIn1);.    pc 
272d0 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
272e0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 41   }else{.    /* A
272f0 20 76 61 6c 75 65 20 77 61 73 20 70 75 6c 6c 65   value was pulle
27300 64 20 66 72 6f 6d 20 74 68 65 20 69 6e 64 65 78  d from the index
27310 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 56   */.    sqlite3V
27320 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 26  dbeMemSetInt64(&
27330 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 2c 20 76  aMem[pOp->p3], v
27340 61 6c 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  al);.  }.  break
27350 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
27360 52 6f 77 53 65 74 54 65 73 74 20 50 31 20 50 32  RowSetTest P1 P2
27370 20 50 33 20 50 34 0a 2a 2a 0a 2a 2a 20 52 65 67   P3 P4.**.** Reg
27380 69 73 74 65 72 20 50 33 20 69 73 20 61 73 73 75  ister P3 is assu
27390 6d 65 64 20 74 6f 20 68 6f 6c 64 20 61 20 36 34  med to hold a 64
273a0 2d 62 69 74 20 69 6e 74 65 67 65 72 20 76 61 6c  -bit integer val
273b0 75 65 2e 20 49 66 20 72 65 67 69 73 74 65 72 20  ue. If register 
273c0 50 31 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 61  P1.** contains a
273d0 20 52 6f 77 53 65 74 20 6f 62 6a 65 63 74 20 61   RowSet object a
273e0 6e 64 20 74 68 61 74 20 52 6f 77 53 65 74 20 6f  nd that RowSet o
273f0 62 6a 65 63 74 20 63 6f 6e 74 61 69 6e 73 0a 2a  bject contains.*
27400 2a 20 74 68 65 20 76 61 6c 75 65 20 68 65 6c 64  * the value held
27410 20 69 6e 20 50 33 2c 20 6a 75 6d 70 20 74 6f 20   in P3, jump to 
27420 72 65 67 69 73 74 65 72 20 50 32 2e 20 4f 74 68  register P2. Oth
27430 65 72 77 69 73 65 2c 20 69 6e 73 65 72 74 20 74  erwise, insert t
27440 68 65 0a 2a 2a 20 69 6e 74 65 67 65 72 20 69 6e  he.** integer in
27450 20 50 33 20 69 6e 74 6f 20 74 68 65 20 52 6f 77   P3 into the Row
27460 53 65 74 20 61 6e 64 20 63 6f 6e 74 69 6e 75 65  Set and continue
27470 20 6f 6e 20 74 6f 20 74 68 65 0a 2a 2a 20 6e 65   on to the.** ne
27480 78 74 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a  xt opcode..**.**
27490 20 54 68 65 20 52 6f 77 53 65 74 20 6f 62 6a 65   The RowSet obje
274a0 63 74 20 69 73 20 6f 70 74 69 6d 69 7a 65 64 20  ct is optimized 
274b0 66 6f 72 20 74 68 65 20 63 61 73 65 20 77 68 65  for the case whe
274c0 72 65 20 73 75 63 63 65 73 73 69 76 65 20 73 65  re successive se
274d0 74 73 0a 2a 2a 20 6f 66 20 69 6e 74 65 67 65 72  ts.** of integer
274e0 73 2c 20 77 68 65 72 65 20 65 61 63 68 20 73 65  s, where each se
274f0 74 20 63 6f 6e 74 61 69 6e 73 20 6e 6f 20 64 75  t contains no du
27500 70 6c 69 63 61 74 65 73 2e 20 45 61 63 68 20 73  plicates. Each s
27510 65 74 0a 2a 2a 20 6f 66 20 76 61 6c 75 65 73 20  et.** of values 
27520 69 73 20 69 64 65 6e 74 69 66 69 65 64 20 62 79  is identified by
27530 20 61 20 75 6e 69 71 75 65 20 50 34 20 76 61 6c   a unique P4 val
27540 75 65 2e 20 54 68 65 20 66 69 72 73 74 20 73 65  ue. The first se
27550 74 0a 2a 2a 20 6d 75 73 74 20 68 61 76 65 20 50  t.** must have P
27560 34 3d 3d 30 2c 20 74 68 65 20 66 69 6e 61 6c 20  4==0, the final 
27570 73 65 74 20 50 34 3d 2d 31 2e 20 20 50 34 20 6d  set P4=-1.  P4 m
27580 75 73 74 20 62 65 20 65 69 74 68 65 72 20 2d 31  ust be either -1
27590 20 6f 72 0a 2a 2a 20 6e 6f 6e 2d 6e 65 67 61 74   or.** non-negat
275a0 69 76 65 2e 20 20 46 6f 72 20 6e 6f 6e 2d 6e 65  ive.  For non-ne
275b0 67 61 74 69 76 65 20 76 61 6c 75 65 73 20 6f 66  gative values of
275c0 20 50 34 20 6f 6e 6c 79 20 74 68 65 20 6c 6f 77   P4 only the low
275d0 65 72 20 34 0a 2a 2a 20 62 69 74 73 20 61 72 65  er 4.** bits are
275e0 20 73 69 67 6e 69 66 69 63 61 6e 74 2e 0a 2a 2a   significant..**
275f0 0a 2a 2a 20 54 68 69 73 20 61 6c 6c 6f 77 73 20  .** This allows 
27600 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 3a 20 28  optimizations: (
27610 61 29 20 77 68 65 6e 20 50 34 3d 3d 30 20 74 68  a) when P4==0 th
27620 65 72 65 20 69 73 20 6e 6f 20 6e 65 65 64 20 74  ere is no need t
27630 6f 20 74 65 73 74 0a 2a 2a 20 74 68 65 20 72 6f  o test.** the ro
27640 77 73 65 74 20 6f 62 6a 65 63 74 20 66 6f 72 20  wset object for 
27650 50 33 2c 20 61 73 20 69 74 20 69 73 20 67 75 61  P3, as it is gua
27660 72 61 6e 74 65 65 64 20 6e 6f 74 20 74 6f 20 63  ranteed not to c
27670 6f 6e 74 61 69 6e 20 69 74 2c 0a 2a 2a 20 28 62  ontain it,.** (b
27680 29 20 77 68 65 6e 20 50 34 3d 3d 2d 31 20 74 68  ) when P4==-1 th
27690 65 72 65 20 69 73 20 6e 6f 20 6e 65 65 64 20 74  ere is no need t
276a0 6f 20 69 6e 73 65 72 74 20 74 68 65 20 76 61 6c  o insert the val
276b0 75 65 2c 20 61 73 20 69 74 20 77 69 6c 6c 0a 2a  ue, as it will.*
276c0 2a 20 6e 65 76 65 72 20 62 65 20 74 65 73 74 65  * never be teste
276d0 64 20 66 6f 72 2c 20 61 6e 64 20 28 63 29 20 77  d for, and (c) w
276e0 68 65 6e 20 61 20 76 61 6c 75 65 20 74 68 61 74  hen a value that
276f0 20 69 73 20 70 61 72 74 20 6f 66 20 73 65 74 20   is part of set 
27700 58 20 69 73 0a 2a 2a 20 69 6e 73 65 72 74 65 64  X is.** inserted
27710 2c 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6e 65  , there is no ne
27720 65 64 20 74 6f 20 73 65 61 72 63 68 20 74 6f 20  ed to search to 
27730 73 65 65 20 69 66 20 74 68 65 20 73 61 6d 65 20  see if the same 
27740 76 61 6c 75 65 20 77 61 73 0a 2a 2a 20 70 72 65  value was.** pre
27750 76 69 6f 75 73 6c 79 20 69 6e 73 65 72 74 65 64  viously inserted
27760 20 61 73 20 70 61 72 74 20 6f 66 20 73 65 74 20   as part of set 
27770 58 20 28 6f 6e 6c 79 20 69 66 20 69 74 20 77 61  X (only if it wa
27780 73 20 70 72 65 76 69 6f 75 73 6c 79 0a 2a 2a 20  s previously.** 
27790 69 6e 73 65 72 74 65 64 20 61 73 20 70 61 72 74  inserted as part
277a0 20 6f 66 20 73 6f 6d 65 20 6f 74 68 65 72 20 73   of some other s
277b0 65 74 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  et)..*/.case OP_
277c0 52 6f 77 53 65 74 54 65 73 74 3a 20 7b 20 20 20  RowSetTest: {   
277d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
277e0 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 2c 20    /* jump, in1, 
277f0 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 69 53 65  in3 */.  int iSe
27800 74 3b 0a 20 20 69 6e 74 20 65 78 69 73 74 73 3b  t;.  int exists;
27810 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ..  pIn1 = &aMem
27820 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e  [pOp->p1];.  pIn
27830 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  3 = &aMem[pOp->p
27840 33 5d 3b 0a 20 20 69 53 65 74 20 3d 20 70 4f 70  3];.  iSet = pOp
27850 2d 3e 70 34 2e 69 3b 0a 20 20 61 73 73 65 72 74  ->p4.i;.  assert
27860 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 26 4d 45  ( pIn3->flags&ME
27870 4d 5f 49 6e 74 20 29 3b 0a 0a 20 20 2f 2a 20 49  M_Int );..  /* I
27880 66 20 74 68 65 72 65 20 69 73 20 61 6e 79 74 68  f there is anyth
27890 69 6e 67 20 6f 74 68 65 72 20 74 68 61 6e 20 61  ing other than a
278a0 20 72 6f 77 73 65 74 20 6f 62 6a 65 63 74 20 69   rowset object i
278b0 6e 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 50 31  n memory cell P1
278c0 2c 0a 20 20 2a 2a 20 64 65 6c 65 74 65 20 69 74  ,.  ** delete it
278d0 20 6e 6f 77 20 61 6e 64 20 69 6e 69 74 69 61 6c   now and initial
278e0 69 7a 65 20 50 31 20 77 69 74 68 20 61 6e 20 65  ize P1 with an e
278f0 6d 70 74 79 20 72 6f 77 73 65 74 0a 20 20 2a 2f  mpty rowset.  */
27900 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c  .  if( (pIn1->fl
27910 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74  ags & MEM_RowSet
27920 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69  )==0 ){.    sqli
27930 74 65 33 56 64 62 65 4d 65 6d 53 65 74 52 6f 77  te3VdbeMemSetRow
27940 53 65 74 28 70 49 6e 31 29 3b 0a 20 20 20 20 69  Set(pIn1);.    i
27950 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
27960 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30  & MEM_RowSet)==0
27970 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
27980 20 20 7d 0a 0a 20 20 61 73 73 65 72 74 28 20 70    }..  assert( p
27990 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49  Op->p4type==P4_I
279a0 4e 54 33 32 20 29 3b 0a 20 20 61 73 73 65 72 74  NT32 );.  assert
279b0 28 20 69 53 65 74 3d 3d 2d 31 20 7c 7c 20 69 53  ( iSet==-1 || iS
279c0 65 74 3e 3d 30 20 29 3b 0a 20 20 69 66 28 20 69  et>=0 );.  if( i
279d0 53 65 74 20 29 7b 0a 20 20 20 20 65 78 69 73 74  Set ){.    exist
279e0 73 20 3d 20 73 71 6c 69 74 65 33 52 6f 77 53 65  s = sqlite3RowSe
279f0 74 54 65 73 74 28 70 49 6e 31 2d 3e 75 2e 70 52  tTest(pIn1->u.pR
27a00 6f 77 53 65 74 2c 20 0a 20 20 20 20 20 20 20 20  owSet, .        
27a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27a20 20 20 20 20 20 20 20 28 75 38 29 28 69 53 65 74         (u8)(iSet
27a30 3e 3d 30 20 3f 20 69 53 65 74 20 26 20 30 78 66  >=0 ? iSet & 0xf
27a40 20 3a 20 30 78 66 66 29 2c 0a 20 20 20 20 20 20   : 0xff),.      
27a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27a60 20 20 20 20 20 20 20 20 20 70 49 6e 33 2d 3e 75           pIn3->u
27a70 2e 69 29 3b 0a 20 20 20 20 69 66 28 20 65 78 69  .i);.    if( exi
27a80 73 74 73 20 29 7b 0a 20 20 20 20 20 20 70 63 20  sts ){.      pc 
27a90 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
27aa0 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
27ab0 7d 0a 20 20 7d 0a 20 20 69 66 28 20 69 53 65 74  }.  }.  if( iSet
27ac0 3e 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  >=0 ){.    sqlit
27ad0 65 33 52 6f 77 53 65 74 49 6e 73 65 72 74 28 70  e3RowSetInsert(p
27ae0 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20  In1->u.pRowSet, 
27af0 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20 20 7d 0a  pIn3->u.i);.  }.
27b00 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 23 69 66    break;.}...#if
27b10 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
27b20 5f 54 52 49 47 47 45 52 0a 0a 2f 2a 20 4f 70 63  _TRIGGER../* Opc
27b30 6f 64 65 3a 20 50 72 6f 67 72 61 6d 20 50 31 20  ode: Program P1 
27b40 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  P2 P3 P4 *.**.**
27b50 20 45 78 65 63 75 74 65 20 74 68 65 20 74 72 69   Execute the tri
27b60 67 67 65 72 20 70 72 6f 67 72 61 6d 20 70 61 73  gger program pas
27b70 73 65 64 20 61 73 20 50 34 20 28 74 79 70 65 20  sed as P4 (type 
27b80 50 34 5f 53 55 42 50 52 4f 47 52 41 4d 29 2e 20  P4_SUBPROGRAM). 
27b90 0a 2a 2a 0a 2a 2a 20 50 31 20 63 6f 6e 74 61 69  .**.** P1 contai
27ba0 6e 73 20 74 68 65 20 61 64 64 72 65 73 73 20 6f  ns the address o
27bb0 66 20 74 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c  f the memory cel
27bc0 6c 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20  l that contains 
27bd0 74 68 65 20 66 69 72 73 74 20 6d 65 6d 6f 72 79  the first memory
27be0 20 0a 2a 2a 20 63 65 6c 6c 20 69 6e 20 61 6e 20   .** cell in an 
27bf0 61 72 72 61 79 20 6f 66 20 76 61 6c 75 65 73 20  array of values 
27c00 75 73 65 64 20 61 73 20 61 72 67 75 6d 65 6e 74  used as argument
27c10 73 20 74 6f 20 74 68 65 20 73 75 62 2d 70 72 6f  s to the sub-pro
27c20 67 72 61 6d 2e 20 50 32 20 0a 2a 2a 20 63 6f 6e  gram. P2 .** con
27c30 74 61 69 6e 73 20 74 68 65 20 61 64 64 72 65 73  tains the addres
27c40 73 20 74 6f 20 6a 75 6d 70 20 74 6f 20 69 66 20  s to jump to if 
27c50 74 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 20  the sub-program 
27c60 74 68 72 6f 77 73 20 61 6e 20 49 47 4e 4f 52 45  throws an IGNORE
27c70 20 0a 2a 2a 20 65 78 63 65 70 74 69 6f 6e 20 75   .** exception u
27c80 73 69 6e 67 20 74 68 65 20 52 41 49 53 45 28 29  sing the RAISE()
27c90 20 66 75 6e 63 74 69 6f 6e 2e 20 52 65 67 69 73   function. Regis
27ca0 74 65 72 20 50 33 20 63 6f 6e 74 61 69 6e 73 20  ter P3 contains 
27cb0 74 68 65 20 61 64 64 72 65 73 73 20 0a 2a 2a 20  the address .** 
27cc0 6f 66 20 61 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  of a memory cell
27cd0 20 69 6e 20 74 68 69 73 20 28 74 68 65 20 70 61   in this (the pa
27ce0 72 65 6e 74 29 20 56 4d 20 74 68 61 74 20 69 73  rent) VM that is
27cf0 20 75 73 65 64 20 74 6f 20 61 6c 6c 6f 63 61 74   used to allocat
27d00 65 20 74 68 65 20 0a 2a 2a 20 6d 65 6d 6f 72 79  e the .** memory
27d10 20 72 65 71 75 69 72 65 64 20 62 79 20 74 68 65   required by the
27d20 20 73 75 62 2d 76 64 62 65 20 61 74 20 72 75 6e   sub-vdbe at run
27d30 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69  time..**.** P4 i
27d40 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  s a pointer to t
27d50 68 65 20 56 4d 20 63 6f 6e 74 61 69 6e 69 6e 67  he VM containing
27d60 20 74 68 65 20 74 72 69 67 67 65 72 20 70 72 6f   the trigger pro
27d70 67 72 61 6d 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  gram..*/.case OP
27d80 5f 50 72 6f 67 72 61 6d 3a 20 7b 20 20 20 20 20  _Program: {     
27d90 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
27da0 69 6e 74 20 6e 4d 65 6d 3b 20 20 20 20 20 20 20  int nMem;       
27db0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
27dc0 72 20 6f 66 20 6d 65 6d 6f 72 79 20 72 65 67 69  r of memory regi
27dd0 73 74 65 72 73 20 66 6f 72 20 73 75 62 2d 70 72  sters for sub-pr
27de0 6f 67 72 61 6d 20 2a 2f 0a 20 20 69 6e 74 20 6e  ogram */.  int n
27df0 42 79 74 65 3b 20 20 20 20 20 20 20 20 20 20 20  Byte;           
27e00 20 20 20 2f 2a 20 42 79 74 65 73 20 6f 66 20 72     /* Bytes of r
27e10 75 6e 74 69 6d 65 20 73 70 61 63 65 20 72 65 71  untime space req
27e20 75 69 72 65 64 20 66 6f 72 20 73 75 62 2d 70 72  uired for sub-pr
27e30 6f 67 72 61 6d 20 2a 2f 0a 20 20 4d 65 6d 20 2a  ogram */.  Mem *
27e40 70 52 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  pRt;            
27e50 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 74     /* Register t
27e60 6f 20 61 6c 6c 6f 63 61 74 65 20 72 75 6e 74 69  o allocate runti
27e70 6d 65 20 73 70 61 63 65 20 2a 2f 0a 20 20 4d 65  me space */.  Me
27e80 6d 20 2a 70 4d 65 6d 3b 20 20 20 20 20 20 20 20  m *pMem;        
27e90 20 20 20 20 20 20 2f 2a 20 55 73 65 64 20 74 6f        /* Used to
27ea0 20 69 74 65 72 61 74 65 20 74 68 72 6f 75 67 68   iterate through
27eb0 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 2a 2f   memory cells */
27ec0 0a 20 20 4d 65 6d 20 2a 70 45 6e 64 3b 20 20 20  .  Mem *pEnd;   
27ed0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 61             /* La
27ee0 73 74 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69  st memory cell i
27ef0 6e 20 6e 65 77 20 61 72 72 61 79 20 2a 2f 0a 20  n new array */. 
27f00 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61   VdbeFrame *pFra
27f10 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e 65 77 20  me;      /* New 
27f20 76 64 62 65 20 66 72 61 6d 65 20 74 6f 20 65 78  vdbe frame to ex
27f30 65 63 75 74 65 20 69 6e 20 2a 2f 0a 20 20 53 75  ecute in */.  Su
27f40 62 50 72 6f 67 72 61 6d 20 2a 70 50 72 6f 67 72  bProgram *pProgr
27f50 61 6d 3b 20 20 20 2f 2a 20 53 75 62 2d 70 72 6f  am;   /* Sub-pro
27f60 67 72 61 6d 20 74 6f 20 65 78 65 63 75 74 65 20  gram to execute 
27f70 2a 2f 0a 20 20 76 6f 69 64 20 2a 74 3b 20 20 20  */.  void *t;   
27f80 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
27f90 54 6f 6b 65 6e 20 69 64 65 6e 74 69 66 79 69 6e  Token identifyin
27fa0 67 20 74 72 69 67 67 65 72 20 2a 2f 0a 0a 20 20  g trigger */..  
27fb0 70 50 72 6f 67 72 61 6d 20 3d 20 70 4f 70 2d 3e  pProgram = pOp->
27fc0 70 34 2e 70 50 72 6f 67 72 61 6d 3b 0a 20 20 70  p4.pProgram;.  p
27fd0 52 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  Rt = &aMem[pOp->
27fe0 70 33 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 6d  p3];.  assert( m
27ff0 65 6d 49 73 56 61 6c 69 64 28 70 52 74 29 20 29  emIsValid(pRt) )
28000 3b 0a 20 20 61 73 73 65 72 74 28 20 70 50 72 6f  ;.  assert( pPro
28010 67 72 61 6d 2d 3e 6e 4f 70 3e 30 20 29 3b 0a 20  gram->nOp>0 );. 
28020 20 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 70 35   .  /* If the p5
28030 20 66 6c 61 67 20 69 73 20 63 6c 65 61 72 2c 20   flag is clear, 
28040 74 68 65 6e 20 72 65 63 75 72 73 69 76 65 20 69  then recursive i
28050 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74 72 69  nvocation of tri
28060 67 67 65 72 73 20 69 73 20 0a 20 20 2a 2a 20 64  ggers is .  ** d
28070 69 73 61 62 6c 65 64 20 66 6f 72 20 62 61 63 6b  isabled for back
28080 77 61 72 64 73 20 63 6f 6d 70 61 74 69 62 69 6c  wards compatibil
28090 69 74 79 20 28 70 35 20 69 73 20 73 65 74 20 69  ity (p5 is set i
280a0 66 20 74 68 69 73 20 73 75 62 2d 70 72 6f 67 72  f this sub-progr
280b0 61 6d 0a 20 20 2a 2a 20 69 73 20 72 65 61 6c 6c  am.  ** is reall
280c0 79 20 61 20 74 72 69 67 67 65 72 2c 20 6e 6f 74  y a trigger, not
280d0 20 61 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 61   a foreign key a
280e0 63 74 69 6f 6e 2c 20 61 6e 64 20 74 68 65 20 66  ction, and the f
280f0 6c 61 67 20 73 65 74 0a 20 20 2a 2a 20 61 6e 64  lag set.  ** and
28100 20 63 6c 65 61 72 65 64 20 62 79 20 74 68 65 20   cleared by the 
28110 22 50 52 41 47 4d 41 20 72 65 63 75 72 73 69 76  "PRAGMA recursiv
28120 65 5f 74 72 69 67 67 65 72 73 22 20 63 6f 6d 6d  e_triggers" comm
28130 61 6e 64 20 69 73 20 63 6c 65 61 72 29 2e 0a 20  and is clear).. 
28140 20 2a 2a 20 0a 20 20 2a 2a 20 49 74 20 69 73 20   ** .  ** It is 
28150 72 65 63 75 72 73 69 76 65 20 69 6e 76 6f 63 61  recursive invoca
28160 74 69 6f 6e 20 6f 66 20 74 72 69 67 67 65 72 73  tion of triggers
28170 2c 20 61 74 20 74 68 65 20 53 51 4c 20 6c 65 76  , at the SQL lev
28180 65 6c 2c 20 74 68 61 74 20 69 73 20 0a 20 20 2a  el, that is .  *
28190 2a 20 64 69 73 61 62 6c 65 64 2e 20 49 6e 20 73  * disabled. In s
281a0 6f 6d 65 20 63 61 73 65 73 20 61 20 73 69 6e 67  ome cases a sing
281b0 6c 65 20 74 72 69 67 67 65 72 20 6d 61 79 20 67  le trigger may g
281c0 65 6e 65 72 61 74 65 20 6d 6f 72 65 20 74 68 61  enerate more tha
281d0 6e 20 6f 6e 65 20 0a 20 20 2a 2a 20 53 75 62 50  n one .  ** SubP
281e0 72 6f 67 72 61 6d 20 28 69 66 20 74 68 65 20 74  rogram (if the t
281f0 72 69 67 67 65 72 20 6d 61 79 20 62 65 20 65 78  rigger may be ex
28200 65 63 75 74 65 64 20 77 69 74 68 20 6d 6f 72 65  ecuted with more
28210 20 74 68 61 6e 20 6f 6e 65 20 64 69 66 66 65 72   than one differ
28220 65 6e 74 20 0a 20 20 2a 2a 20 4f 4e 20 43 4f 4e  ent .  ** ON CON
28230 46 4c 49 43 54 20 61 6c 67 6f 72 69 74 68 6d 29  FLICT algorithm)
28240 2e 20 53 75 62 50 72 6f 67 72 61 6d 20 73 74 72  . SubProgram str
28250 75 63 74 75 72 65 73 20 61 73 73 6f 63 69 61 74  uctures associat
28260 65 64 20 77 69 74 68 20 61 0a 20 20 2a 2a 20 73  ed with a.  ** s
28270 69 6e 67 6c 65 20 74 72 69 67 67 65 72 20 61 6c  ingle trigger al
28280 6c 20 68 61 76 65 20 74 68 65 20 73 61 6d 65 20  l have the same 
28290 76 61 6c 75 65 20 66 6f 72 20 74 68 65 20 53 75  value for the Su
282a0 62 50 72 6f 67 72 61 6d 2e 74 6f 6b 65 6e 20 0a  bProgram.token .
282b0 20 20 2a 2a 20 76 61 72 69 61 62 6c 65 2e 20 20    ** variable.  
282c0 2a 2f 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35  */.  if( pOp->p5
282d0 20 29 7b 0a 20 20 20 20 74 20 3d 20 70 50 72 6f   ){.    t = pPro
282e0 67 72 61 6d 2d 3e 74 6f 6b 65 6e 3b 0a 20 20 20  gram->token;.   
282f0 20 66 6f 72 28 70 46 72 61 6d 65 3d 70 2d 3e 70   for(pFrame=p->p
28300 46 72 61 6d 65 3b 20 70 46 72 61 6d 65 20 26 26  Frame; pFrame &&
28310 20 70 46 72 61 6d 65 2d 3e 74 6f 6b 65 6e 21 3d   pFrame->token!=
28320 74 3b 20 70 46 72 61 6d 65 3d 70 46 72 61 6d 65  t; pFrame=pFrame
28330 2d 3e 70 50 61 72 65 6e 74 29 3b 0a 20 20 20 20  ->pParent);.    
28340 69 66 28 20 70 46 72 61 6d 65 20 29 20 62 72 65  if( pFrame ) bre
28350 61 6b 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 70  ak;.  }..  if( p
28360 2d 3e 6e 46 72 61 6d 65 3e 3d 64 62 2d 3e 61 4c  ->nFrame>=db->aL
28370 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49  imit[SQLITE_LIMI
28380 54 5f 54 52 49 47 47 45 52 5f 44 45 50 54 48 5d  T_TRIGGER_DEPTH]
28390 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c   ){.    rc = SQL
283a0 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 73  ITE_ERROR;.    s
283b0 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28  qlite3SetString(
283c0 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c  &p->zErrMsg, db,
283d0 20 22 74 6f 6f 20 6d 61 6e 79 20 6c 65 76 65 6c   "too many level
283e0 73 20 6f 66 20 74 72 69 67 67 65 72 20 72 65 63  s of trigger rec
283f0 75 72 73 69 6f 6e 22 29 3b 0a 20 20 20 20 62 72  ursion");.    br
28400 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 52  eak;.  }..  /* R
28410 65 67 69 73 74 65 72 20 70 52 74 20 69 73 20 75  egister pRt is u
28420 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65  sed to store the
28430 20 6d 65 6d 6f 72 79 20 72 65 71 75 69 72 65 64   memory required
28440 20 74 6f 20 73 61 76 65 20 74 68 65 20 73 74 61   to save the sta
28450 74 65 0a 20 20 2a 2a 20 6f 66 20 74 68 65 20 63  te.  ** of the c
28460 75 72 72 65 6e 74 20 70 72 6f 67 72 61 6d 2c 20  urrent program, 
28470 61 6e 64 20 74 68 65 20 6d 65 6d 6f 72 79 20 72  and the memory r
28480 65 71 75 69 72 65 64 20 61 74 20 72 75 6e 74 69  equired at runti
28490 6d 65 20 74 6f 20 65 78 65 63 75 74 65 0a 20 20  me to execute.  
284a0 2a 2a 20 74 68 65 20 74 72 69 67 67 65 72 20 70  ** the trigger p
284b0 72 6f 67 72 61 6d 2e 20 49 66 20 74 68 69 73 20  rogram. If this 
284c0 74 72 69 67 67 65 72 20 68 61 73 20 62 65 65 6e  trigger has been
284d0 20 66 69 72 65 64 20 62 65 66 6f 72 65 2c 20 74   fired before, t
284e0 68 65 6e 20 70 52 74 20 0a 20 20 2a 2a 20 69 73  hen pRt .  ** is
284f0 20 61 6c 72 65 61 64 79 20 61 6c 6c 6f 63 61 74   already allocat
28500 65 64 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69  ed. Otherwise, i
28510 74 20 6d 75 73 74 20 62 65 20 69 6e 69 74 69 61  t must be initia
28520 6c 69 7a 65 64 2e 20 20 2a 2f 0a 20 20 69 66 28  lized.  */.  if(
28530 20 28 70 52 74 2d 3e 66 6c 61 67 73 26 4d 45 4d   (pRt->flags&MEM
28540 5f 46 72 61 6d 65 29 3d 3d 30 20 29 7b 0a 20 20  _Frame)==0 ){.  
28550 20 20 2f 2a 20 53 75 62 50 72 6f 67 72 61 6d 2e    /* SubProgram.
28560 6e 4d 65 6d 20 69 73 20 73 65 74 20 74 6f 20 74  nMem is set to t
28570 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6d 65 6d  he number of mem
28580 6f 72 79 20 63 65 6c 6c 73 20 75 73 65 64 20 62  ory cells used b
28590 79 20 74 68 65 20 0a 20 20 20 20 2a 2a 20 70 72  y the .    ** pr
285a0 6f 67 72 61 6d 20 73 74 6f 72 65 64 20 69 6e 20  ogram stored in 
285b0 53 75 62 50 72 6f 67 72 61 6d 2e 61 4f 70 2e 20  SubProgram.aOp. 
285c0 41 73 20 77 65 6c 6c 20 61 73 20 74 68 65 73 65  As well as these
285d0 2c 20 6f 6e 65 20 6d 65 6d 6f 72 79 0a 20 20 20  , one memory.   
285e0 20 2a 2a 20 63 65 6c 6c 20 69 73 20 72 65 71 75   ** cell is requ
285f0 69 72 65 64 20 66 6f 72 20 65 61 63 68 20 63 75  ired for each cu
28600 72 73 6f 72 20 75 73 65 64 20 62 79 20 74 68 65  rsor used by the
28610 20 70 72 6f 67 72 61 6d 2e 20 53 65 74 20 6c 6f   program. Set lo
28620 63 61 6c 0a 20 20 20 20 2a 2a 20 76 61 72 69 61  cal.    ** varia
28630 62 6c 65 20 6e 4d 65 6d 20 28 61 6e 64 20 6c 61  ble nMem (and la
28640 74 65 72 2c 20 56 64 62 65 46 72 61 6d 65 2e 6e  ter, VdbeFrame.n
28650 43 68 69 6c 64 4d 65 6d 29 20 74 6f 20 74 68 69  ChildMem) to thi
28660 73 20 76 61 6c 75 65 2e 0a 20 20 20 20 2a 2f 0a  s value..    */.
28670 20 20 20 20 6e 4d 65 6d 20 3d 20 70 50 72 6f 67      nMem = pProg
28680 72 61 6d 2d 3e 6e 4d 65 6d 20 2b 20 70 50 72 6f  ram->nMem + pPro
28690 67 72 61 6d 2d 3e 6e 43 73 72 3b 0a 20 20 20 20  gram->nCsr;.    
286a0 6e 42 79 74 65 20 3d 20 52 4f 55 4e 44 38 28 73  nByte = ROUND8(s
286b0 69 7a 65 6f 66 28 56 64 62 65 46 72 61 6d 65 29  izeof(VdbeFrame)
286c0 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ).              
286d0 2b 20 6e 4d 65 6d 20 2a 20 73 69 7a 65 6f 66 28  + nMem * sizeof(
286e0 4d 65 6d 29 0a 20 20 20 20 20 20 20 20 20 20 20  Mem).           
286f0 20 20 20 2b 20 70 50 72 6f 67 72 61 6d 2d 3e 6e     + pProgram->n
28700 43 73 72 20 2a 20 73 69 7a 65 6f 66 28 56 64 62  Csr * sizeof(Vdb
28710 65 43 75 72 73 6f 72 20 2a 29 3b 0a 20 20 20 20  eCursor *);.    
28720 70 46 72 61 6d 65 20 3d 20 73 71 6c 69 74 65 33  pFrame = sqlite3
28730 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 64 62 2c  DbMallocZero(db,
28740 20 6e 42 79 74 65 29 3b 0a 20 20 20 20 69 66 28   nByte);.    if(
28750 20 21 70 46 72 61 6d 65 20 29 7b 0a 20 20 20 20   !pFrame ){.    
28760 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20    goto no_mem;. 
28770 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33     }.    sqlite3
28780 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 70  VdbeMemRelease(p
28790 52 74 29 3b 0a 20 20 20 20 70 52 74 2d 3e 66 6c  Rt);.    pRt->fl
287a0 61 67 73 20 3d 20 4d 45 4d 5f 46 72 61 6d 65 3b  ags = MEM_Frame;
287b0 0a 20 20 20 20 70 52 74 2d 3e 75 2e 70 46 72 61  .    pRt->u.pFra
287c0 6d 65 20 3d 20 70 46 72 61 6d 65 3b 0a 0a 20 20  me = pFrame;..  
287d0 20 20 70 46 72 61 6d 65 2d 3e 76 20 3d 20 70 3b    pFrame->v = p;
287e0 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 43 68  .    pFrame->nCh
287f0 69 6c 64 4d 65 6d 20 3d 20 6e 4d 65 6d 3b 0a 20  ildMem = nMem;. 
28800 20 20 20 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c     pFrame->nChil
28810 64 43 73 72 20 3d 20 70 50 72 6f 67 72 61 6d 2d  dCsr = pProgram-
28820 3e 6e 43 73 72 3b 0a 20 20 20 20 70 46 72 61 6d  >nCsr;.    pFram
28830 65 2d 3e 70 63 20 3d 20 70 63 3b 0a 20 20 20 20  e->pc = pc;.    
28840 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 20 3d 20 70  pFrame->aMem = p
28850 2d 3e 61 4d 65 6d 3b 0a 20 20 20 20 70 46 72 61  ->aMem;.    pFra
28860 6d 65 2d 3e 6e 4d 65 6d 20 3d 20 70 2d 3e 6e 4d  me->nMem = p->nM
28870 65 6d 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e  em;.    pFrame->
28880 61 70 43 73 72 20 3d 20 70 2d 3e 61 70 43 73 72  apCsr = p->apCsr
28890 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 43  ;.    pFrame->nC
288a0 75 72 73 6f 72 20 3d 20 70 2d 3e 6e 43 75 72 73  ursor = p->nCurs
288b0 6f 72 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e  or;.    pFrame->
288c0 61 4f 70 20 3d 20 70 2d 3e 61 4f 70 3b 0a 20 20  aOp = p->aOp;.  
288d0 20 20 70 46 72 61 6d 65 2d 3e 6e 4f 70 20 3d 20    pFrame->nOp = 
288e0 70 2d 3e 6e 4f 70 3b 0a 20 20 20 20 70 46 72 61  p->nOp;.    pFra
288f0 6d 65 2d 3e 74 6f 6b 65 6e 20 3d 20 70 50 72 6f  me->token = pPro
28900 67 72 61 6d 2d 3e 74 6f 6b 65 6e 3b 0a 0a 20 20  gram->token;..  
28910 20 20 70 45 6e 64 20 3d 20 26 56 64 62 65 46 72    pEnd = &VdbeFr
28920 61 6d 65 4d 65 6d 28 70 46 72 61 6d 65 29 5b 70  ameMem(pFrame)[p
28930 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d  Frame->nChildMem
28940 5d 3b 0a 20 20 20 20 66 6f 72 28 70 4d 65 6d 3d  ];.    for(pMem=
28950 56 64 62 65 46 72 61 6d 65 4d 65 6d 28 70 46 72  VdbeFrameMem(pFr
28960 61 6d 65 29 3b 20 70 4d 65 6d 21 3d 70 45 6e 64  ame); pMem!=pEnd
28970 3b 20 70 4d 65 6d 2b 2b 29 7b 0a 20 20 20 20 20  ; pMem++){.     
28980 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 3d 20 4d   pMem->flags = M
28990 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20 20 20 70  EM_Null;.      p
289a0 4d 65 6d 2d 3e 64 62 20 3d 20 64 62 3b 0a 20 20  Mem->db = db;.  
289b0 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20    }.  }else{.   
289c0 20 70 46 72 61 6d 65 20 3d 20 70 52 74 2d 3e 75   pFrame = pRt->u
289d0 2e 70 46 72 61 6d 65 3b 0a 20 20 20 20 61 73 73  .pFrame;.    ass
289e0 65 72 74 28 20 70 50 72 6f 67 72 61 6d 2d 3e 6e  ert( pProgram->n
289f0 4d 65 6d 2b 70 50 72 6f 67 72 61 6d 2d 3e 6e 43  Mem+pProgram->nC
28a00 73 72 3d 3d 70 46 72 61 6d 65 2d 3e 6e 43 68 69  sr==pFrame->nChi
28a10 6c 64 4d 65 6d 20 29 3b 0a 20 20 20 20 61 73 73  ldMem );.    ass
28a20 65 72 74 28 20 70 50 72 6f 67 72 61 6d 2d 3e 6e  ert( pProgram->n
28a30 43 73 72 3d 3d 70 46 72 61 6d 65 2d 3e 6e 43 68  Csr==pFrame->nCh
28a40 69 6c 64 43 73 72 20 29 3b 0a 20 20 20 20 61 73  ildCsr );.    as
28a50 73 65 72 74 28 20 70 63 3d 3d 70 46 72 61 6d 65  sert( pc==pFrame
28a60 2d 3e 70 63 20 29 3b 0a 20 20 7d 0a 0a 20 20 70  ->pc );.  }..  p
28a70 2d 3e 6e 46 72 61 6d 65 2b 2b 3b 0a 20 20 70 46  ->nFrame++;.  pF
28a80 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 20 3d 20  rame->pParent = 
28a90 70 2d 3e 70 46 72 61 6d 65 3b 0a 20 20 70 46 72  p->pFrame;.  pFr
28aa0 61 6d 65 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d  ame->lastRowid =
28ab0 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 0a   db->lastRowid;.
28ac0 20 20 70 46 72 61 6d 65 2d 3e 6e 43 68 61 6e 67    pFrame->nChang
28ad0 65 20 3d 20 70 2d 3e 6e 43 68 61 6e 67 65 3b 0a  e = p->nChange;.
28ae0 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20 3d 20 30    p->nChange = 0
28af0 3b 0a 20 20 70 2d 3e 70 46 72 61 6d 65 20 3d 20  ;.  p->pFrame = 
28b00 70 46 72 61 6d 65 3b 0a 20 20 70 2d 3e 61 4d 65  pFrame;.  p->aMe
28b10 6d 20 3d 20 61 4d 65 6d 20 3d 20 26 56 64 62 65  m = aMem = &Vdbe
28b20 46 72 61 6d 65 4d 65 6d 28 70 46 72 61 6d 65 29  FrameMem(pFrame)
28b30 5b 2d 31 5d 3b 0a 20 20 70 2d 3e 6e 4d 65 6d 20  [-1];.  p->nMem 
28b40 3d 20 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64  = pFrame->nChild
28b50 4d 65 6d 3b 0a 20 20 70 2d 3e 6e 43 75 72 73 6f  Mem;.  p->nCurso
28b60 72 20 3d 20 28 75 31 36 29 70 46 72 61 6d 65 2d  r = (u16)pFrame-
28b70 3e 6e 43 68 69 6c 64 43 73 72 3b 0a 20 20 70 2d  >nChildCsr;.  p-
28b80 3e 61 70 43 73 72 20 3d 20 28 56 64 62 65 43 75  >apCsr = (VdbeCu
28b90 72 73 6f 72 20 2a 2a 29 26 61 4d 65 6d 5b 70 2d  rsor **)&aMem[p-
28ba0 3e 6e 4d 65 6d 2b 31 5d 3b 0a 20 20 70 2d 3e 61  >nMem+1];.  p->a
28bb0 4f 70 20 3d 20 61 4f 70 20 3d 20 70 50 72 6f 67  Op = aOp = pProg
28bc0 72 61 6d 2d 3e 61 4f 70 3b 0a 20 20 70 2d 3e 6e  ram->aOp;.  p->n
28bd0 4f 70 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 6e  Op = pProgram->n
28be0 4f 70 3b 0a 20 20 70 63 20 3d 20 2d 31 3b 0a 0a  Op;.  pc = -1;..
28bf0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
28c00 70 63 6f 64 65 3a 20 50 61 72 61 6d 20 50 31 20  pcode: Param P1 
28c10 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54  P2 * * *.**.** T
28c20 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e  his opcode is on
28c30 6c 79 20 65 76 65 72 20 70 72 65 73 65 6e 74 20  ly ever present 
28c40 69 6e 20 73 75 62 2d 70 72 6f 67 72 61 6d 73 20  in sub-programs 
28c50 63 61 6c 6c 65 64 20 76 69 61 20 74 68 65 20 0a  called via the .
28c60 2a 2a 20 4f 50 5f 50 72 6f 67 72 61 6d 20 69 6e  ** OP_Program in
28c70 73 74 72 75 63 74 69 6f 6e 2e 20 43 6f 70 79 20  struction. Copy 
28c80 61 20 76 61 6c 75 65 20 63 75 72 72 65 6e 74 6c  a value currentl
28c90 79 20 73 74 6f 72 65 64 20 69 6e 20 61 20 6d 65  y stored in a me
28ca0 6d 6f 72 79 20 0a 2a 2a 20 63 65 6c 6c 20 6f 66  mory .** cell of
28cb0 20 74 68 65 20 63 61 6c 6c 69 6e 67 20 28 70 61   the calling (pa
28cc0 72 65 6e 74 29 20 66 72 61 6d 65 20 74 6f 20 63  rent) frame to c
28cd0 65 6c 6c 20 50 32 20 69 6e 20 74 68 65 20 63 75  ell P2 in the cu
28ce0 72 72 65 6e 74 20 66 72 61 6d 65 73 20 0a 2a 2a  rrent frames .**
28cf0 20 61 64 64 72 65 73 73 20 73 70 61 63 65 2e 20   address space. 
28d00 54 68 69 73 20 69 73 20 75 73 65 64 20 62 79 20  This is used by 
28d10 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 73  trigger programs
28d20 20 74 6f 20 61 63 63 65 73 73 20 74 68 65 20 6e   to access the n
28d30 65 77 2e 2a 20 0a 2a 2a 20 61 6e 64 20 6f 6c 64  ew.* .** and old
28d40 2e 2a 20 76 61 6c 75 65 73 2e 0a 2a 2a 0a 2a 2a  .* values..**.**
28d50 20 54 68 65 20 61 64 64 72 65 73 73 20 6f 66 20   The address of 
28d60 74 68 65 20 63 65 6c 6c 20 69 6e 20 74 68 65 20  the cell in the 
28d70 70 61 72 65 6e 74 20 66 72 61 6d 65 20 69 73 20  parent frame is 
28d80 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 61 64  determined by ad
28d90 64 69 6e 67 0a 2a 2a 20 74 68 65 20 76 61 6c 75  ding.** the valu
28da0 65 20 6f 66 20 74 68 65 20 50 31 20 61 72 67 75  e of the P1 argu
28db0 6d 65 6e 74 20 74 6f 20 74 68 65 20 76 61 6c 75  ment to the valu
28dc0 65 20 6f 66 20 74 68 65 20 50 31 20 61 72 67 75  e of the P1 argu
28dd0 6d 65 6e 74 20 74 6f 20 74 68 65 0a 2a 2a 20 63  ment to the.** c
28de0 61 6c 6c 69 6e 67 20 4f 50 5f 50 72 6f 67 72 61  alling OP_Progra
28df0 6d 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  m instruction..*
28e00 2f 0a 63 61 73 65 20 4f 50 5f 50 61 72 61 6d 3a  /.case OP_Param:
28e10 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20   {           /* 
28e20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20  out2-prerelease 
28e30 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d 65 20 2a  */.  VdbeFrame *
28e40 70 46 72 61 6d 65 3b 0a 20 20 4d 65 6d 20 2a 70  pFrame;.  Mem *p
28e50 49 6e 3b 0a 20 20 70 46 72 61 6d 65 20 3d 20 70  In;.  pFrame = p
28e60 2d 3e 70 46 72 61 6d 65 3b 0a 20 20 70 49 6e 20  ->pFrame;.  pIn 
28e70 3d 20 26 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b  = &pFrame->aMem[
28e80 70 4f 70 2d 3e 70 31 20 2b 20 70 46 72 61 6d 65  pOp->p1 + pFrame
28e90 2d 3e 61 4f 70 5b 70 46 72 61 6d 65 2d 3e 70 63  ->aOp[pFrame->pc
28ea0 5d 2e 70 31 5d 3b 20 20 20 0a 20 20 73 71 6c 69  ].p1];   .  sqli
28eb0 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f  te3VdbeMemShallo
28ec0 77 43 6f 70 79 28 70 4f 75 74 2c 20 70 49 6e 2c  wCopy(pOut, pIn,
28ed0 20 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a 20 20 62   MEM_Ephem);.  b
28ee0 72 65 61 6b 3b 0a 7d 0a 0a 23 65 6e 64 69 66 20  reak;.}..#endif 
28ef0 2f 2a 20 23 69 66 6e 64 65 66 20 53 51 4c 49 54  /* #ifndef SQLIT
28f00 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 20 2a  E_OMIT_TRIGGER *
28f10 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  /..#ifndef SQLIT
28f20 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b  E_OMIT_FOREIGN_K
28f30 45 59 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 6b  EY./* Opcode: Fk
28f40 43 6f 75 6e 74 65 72 20 50 31 20 50 32 20 2a 20  Counter P1 P2 * 
28f50 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 6e 63 72 65 6d  * *.**.** Increm
28f60 65 6e 74 20 61 20 22 63 6f 6e 73 74 72 61 69 6e  ent a "constrain
28f70 74 20 63 6f 75 6e 74 65 72 22 20 62 79 20 50 32  t counter" by P2
28f80 20 28 50 32 20 6d 61 79 20 62 65 20 6e 65 67 61   (P2 may be nega
28f90 74 69 76 65 20 6f 72 20 70 6f 73 69 74 69 76 65  tive or positive
28fa0 29 2e 0a 2a 2a 20 49 66 20 50 31 20 69 73 20 6e  )..** If P1 is n
28fb0 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 20 64 61 74  on-zero, the dat
28fc0 61 62 61 73 65 20 63 6f 6e 73 74 72 61 69 6e 74  abase constraint
28fd0 20 63 6f 75 6e 74 65 72 20 69 73 20 69 6e 63 72   counter is incr
28fe0 65 6d 65 6e 74 65 64 20 0a 2a 2a 20 28 64 65 66  emented .** (def
28ff0 65 72 72 65 64 20 66 6f 72 65 69 67 6e 20 6b 65  erred foreign ke
29000 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 29 2e 20  y constraints). 
29010 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20 50 31  Otherwise, if P1
29020 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 20 0a 2a   is zero, the .*
29030 2a 20 73 74 61 74 65 6d 65 6e 74 20 63 6f 75 6e  * statement coun
29040 74 65 72 20 69 73 20 69 6e 63 72 65 6d 65 6e 74  ter is increment
29050 65 64 20 28 69 6d 6d 65 64 69 61 74 65 20 66 6f  ed (immediate fo
29060 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72  reign key constr
29070 61 69 6e 74 73 29 2e 0a 2a 2f 0a 63 61 73 65 20  aints)..*/.case 
29080 4f 50 5f 46 6b 43 6f 75 6e 74 65 72 3a 20 7b 0a  OP_FkCounter: {.
29090 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 20 29 7b    if( pOp->p1 ){
290a0 0a 20 20 20 20 64 62 2d 3e 6e 44 65 66 65 72 72  .    db->nDeferr
290b0 65 64 43 6f 6e 73 20 2b 3d 20 70 4f 70 2d 3e 70  edCons += pOp->p
290c0 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  2;.  }else{.    
290d0 70 2d 3e 6e 46 6b 43 6f 6e 73 74 72 61 69 6e 74  p->nFkConstraint
290e0 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 7d   += pOp->p2;.  }
290f0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
29100 4f 70 63 6f 64 65 3a 20 46 6b 49 66 5a 65 72 6f  Opcode: FkIfZero
29110 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
29120 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 74  ** This opcode t
29130 65 73 74 73 20 69 66 20 61 20 66 6f 72 65 69 67  ests if a foreig
29140 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74  n key constraint
29150 2d 63 6f 75 6e 74 65 72 20 69 73 20 63 75 72 72  -counter is curr
29160 65 6e 74 6c 79 20 7a 65 72 6f 2e 0a 2a 2a 20 49  ently zero..** I
29170 66 20 73 6f 2c 20 6a 75 6d 70 20 74 6f 20 69 6e  f so, jump to in
29180 73 74 72 75 63 74 69 6f 6e 20 50 32 2e 20 4f 74  struction P2. Ot
29190 68 65 72 77 69 73 65 2c 20 66 61 6c 6c 20 74 68  herwise, fall th
291a0 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78  rough to the nex
291b0 74 20 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f  t .** instructio
291c0 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 31 20 69  n..**.** If P1 i
291d0 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e  s non-zero, then
291e0 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b   the jump is tak
291f0 65 6e 20 69 66 20 74 68 65 20 64 61 74 61 62 61  en if the databa
29200 73 65 20 63 6f 6e 73 74 72 61 69 6e 74 2d 63 6f  se constraint-co
29210 75 6e 74 65 72 0a 2a 2a 20 69 73 20 7a 65 72 6f  unter.** is zero
29220 20 28 74 68 65 20 6f 6e 65 20 74 68 61 74 20 63   (the one that c
29230 6f 75 6e 74 73 20 64 65 66 65 72 72 65 64 20 63  ounts deferred c
29240 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74  onstraint violat
29250 69 6f 6e 73 29 2e 20 49 66 20 50 31 20 69 73 0a  ions). If P1 is.
29260 2a 2a 20 7a 65 72 6f 2c 20 74 68 65 20 6a 75 6d  ** zero, the jum
29270 70 20 69 73 20 74 61 6b 65 6e 20 69 66 20 74 68  p is taken if th
29280 65 20 73 74 61 74 65 6d 65 6e 74 20 63 6f 6e 73  e statement cons
29290 74 72 61 69 6e 74 2d 63 6f 75 6e 74 65 72 20 69  traint-counter i
292a0 73 20 7a 65 72 6f 0a 2a 2a 20 28 69 6d 6d 65 64  s zero.** (immed
292b0 69 61 74 65 20 66 6f 72 65 69 67 6e 20 6b 65 79  iate foreign key
292c0 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c   constraint viol
292d0 61 74 69 6f 6e 73 29 2e 0a 2a 2f 0a 63 61 73 65  ations)..*/.case
292e0 20 4f 50 5f 46 6b 49 66 5a 65 72 6f 3a 20 7b 20   OP_FkIfZero: { 
292f0 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
29300 2a 2f 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31  */.  if( pOp->p1
29310 20 29 7b 0a 20 20 20 20 69 66 28 20 64 62 2d 3e   ){.    if( db->
29320 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3d 3d 30  nDeferredCons==0
29330 20 29 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d   ) pc = pOp->p2-
29340 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  1;.  }else{.    
29350 69 66 28 20 70 2d 3e 6e 46 6b 43 6f 6e 73 74 72  if( p->nFkConstr
29360 61 69 6e 74 3d 3d 30 20 29 20 70 63 20 3d 20 70  aint==0 ) pc = p
29370 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d 0a 20 20  Op->p2-1;.  }.  
29380 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20  break;.}.#endif 
29390 2f 2a 20 23 69 66 6e 64 65 66 20 53 51 4c 49 54  /* #ifndef SQLIT
293a0 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b  E_OMIT_FOREIGN_K
293b0 45 59 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  EY */..#ifndef S
293c0 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49  QLITE_OMIT_AUTOI
293d0 4e 43 52 45 4d 45 4e 54 0a 2f 2a 20 4f 70 63 6f  NCREMENT./* Opco
293e0 64 65 3a 20 4d 65 6d 4d 61 78 20 50 31 20 50 32  de: MemMax P1 P2
293f0 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50 31 20   * * *.**.** P1 
29400 69 73 20 61 20 72 65 67 69 73 74 65 72 20 69 6e  is a register in
29410 20 74 68 65 20 72 6f 6f 74 20 66 72 61 6d 65 20   the root frame 
29420 6f 66 20 74 68 69 73 20 56 4d 20 28 74 68 65 20  of this VM (the 
29430 72 6f 6f 74 20 66 72 61 6d 65 20 69 73 0a 2a 2a  root frame is.**
29440 20 64 69 66 66 65 72 65 6e 74 20 66 72 6f 6d 20   different from 
29450 74 68 65 20 63 75 72 72 65 6e 74 20 66 72 61 6d  the current fram
29460 65 20 69 66 20 74 68 69 73 20 69 6e 73 74 72 75  e if this instru
29470 63 74 69 6f 6e 20 69 73 20 62 65 69 6e 67 20 65  ction is being e
29480 78 65 63 75 74 65 64 0a 2a 2a 20 77 69 74 68 69  xecuted.** withi
29490 6e 20 61 20 73 75 62 2d 70 72 6f 67 72 61 6d 29  n a sub-program)
294a0 2e 20 53 65 74 20 74 68 65 20 76 61 6c 75 65 20  . Set the value 
294b0 6f 66 20 72 65 67 69 73 74 65 72 20 50 31 20 74  of register P1 t
294c0 6f 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6f 66  o the maximum of
294d0 20 0a 2a 2a 20 69 74 73 20 63 75 72 72 65 6e 74   .** its current
294e0 20 76 61 6c 75 65 20 61 6e 64 20 74 68 65 20 76   value and the v
294f0 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
29500 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20   P2..**.** This 
29510 69 6e 73 74 72 75 63 74 69 6f 6e 20 74 68 72 6f  instruction thro
29520 77 73 20 61 6e 20 65 72 72 6f 72 20 69 66 20 74  ws an error if t
29530 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69  he memory cell i
29540 73 20 6e 6f 74 20 69 6e 69 74 69 61 6c 6c 79 0a  s not initially.
29550 2a 2a 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a  ** an integer..*
29560 2f 0a 63 61 73 65 20 4f 50 5f 4d 65 6d 4d 61 78  /.case OP_MemMax
29570 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 69 6e  : {        /* in
29580 32 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e 31  2 */.  Mem *pIn1
29590 3b 0a 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70  ;.  VdbeFrame *p
295a0 46 72 61 6d 65 3b 0a 20 20 69 66 28 20 70 2d 3e  Frame;.  if( p->
295b0 70 46 72 61 6d 65 20 29 7b 0a 20 20 20 20 66 6f  pFrame ){.    fo
295c0 72 28 70 46 72 61 6d 65 3d 70 2d 3e 70 46 72 61  r(pFrame=p->pFra
295d0 6d 65 3b 20 70 46 72 61 6d 65 2d 3e 70 50 61 72  me; pFrame->pPar
295e0 65 6e 74 3b 20 70 46 72 61 6d 65 3d 70 46 72 61  ent; pFrame=pFra
295f0 6d 65 2d 3e 70 50 61 72 65 6e 74 29 3b 0a 20 20  me->pParent);.  
29600 20 20 70 49 6e 31 20 3d 20 26 70 46 72 61 6d 65    pIn1 = &pFrame
29610 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b  ->aMem[pOp->p1];
29620 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 49  .  }else{.    pI
29630 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
29640 70 31 5d 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72  p1];.  }.  asser
29650 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 49  t( memIsValid(pI
29660 6e 31 29 20 29 3b 0a 20 20 73 71 6c 69 74 65 33  n1) );.  sqlite3
29670 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66  VdbeMemIntegerif
29680 79 28 70 49 6e 31 29 3b 0a 20 20 70 49 6e 32 20  y(pIn1);.  pIn2 
29690 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
296a0 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
296b0 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e  emIntegerify(pIn
296c0 32 29 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e  2);.  if( pIn1->
296d0 75 2e 69 3c 70 49 6e 32 2d 3e 75 2e 69 29 7b 0a  u.i<pIn2->u.i){.
296e0 20 20 20 20 70 49 6e 31 2d 3e 75 2e 69 20 3d 20      pIn1->u.i = 
296f0 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20 7d 0a 20  pIn2->u.i;.  }. 
29700 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
29710 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
29720 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 2a 2f  AUTOINCREMENT */
29730 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 50  ../* Opcode: IfP
29740 6f 73 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  os P1 P2 * * *.*
29750 2a 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75  *.** If the valu
29760 65 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 31  e of register P1
29770 20 69 73 20 31 20 6f 72 20 67 72 65 61 74 65 72   is 1 or greater
29780 2c 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a  , jump to P2..**
29790 0a 2a 2a 20 49 74 20 69 73 20 69 6c 6c 65 67 61  .** It is illega
297a0 6c 20 74 6f 20 75 73 65 20 74 68 69 73 20 69 6e  l to use this in
297b0 73 74 72 75 63 74 69 6f 6e 20 6f 6e 20 61 20 72  struction on a r
297c0 65 67 69 73 74 65 72 20 74 68 61 74 20 64 6f 65  egister that doe
297d0 73 0a 2a 2a 20 6e 6f 74 20 63 6f 6e 74 61 69 6e  s.** not contain
297e0 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 41 6e   an integer.  An
297f0 20 61 73 73 65 72 74 69 6f 6e 20 66 61 75 6c 74   assertion fault
29800 20 77 69 6c 6c 20 72 65 73 75 6c 74 20 69 66 20   will result if 
29810 79 6f 75 20 74 72 79 2e 0a 2a 2f 0a 63 61 73 65  you try..*/.case
29820 20 4f 50 5f 49 66 50 6f 73 3a 20 7b 20 20 20 20   OP_IfPos: {    
29830 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31      /* jump, in1
29840 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   */.  pIn1 = &aM
29850 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  em[pOp->p1];.  a
29860 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61  ssert( pIn1->fla
29870 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20  gs&MEM_Int );.  
29880 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3e 30 20  if( pIn1->u.i>0 
29890 29 7b 0a 20 20 20 20 20 70 63 20 3d 20 70 4f 70  ){.     pc = pOp
298a0 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20  ->p2 - 1;.  }.  
298b0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
298c0 6f 64 65 3a 20 49 66 4e 65 67 20 50 31 20 50 32  ode: IfNeg P1 P2
298d0 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20   * * *.**.** If 
298e0 74 68 65 20 76 61 6c 75 65 20 6f 66 20 72 65 67  the value of reg
298f0 69 73 74 65 72 20 50 31 20 69 73 20 6c 65 73 73  ister P1 is less
29900 20 74 68 61 6e 20 7a 65 72 6f 2c 20 6a 75 6d 70   than zero, jump
29910 20 74 6f 20 50 32 2e 20 0a 2a 2a 0a 2a 2a 20 49   to P2. .**.** I
29920 74 20 69 73 20 69 6c 6c 65 67 61 6c 20 74 6f 20  t is illegal to 
29930 75 73 65 20 74 68 69 73 20 69 6e 73 74 72 75 63  use this instruc
29940 74 69 6f 6e 20 6f 6e 20 61 20 72 65 67 69 73 74  tion on a regist
29950 65 72 20 74 68 61 74 20 64 6f 65 73 0a 2a 2a 20  er that does.** 
29960 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69  not contain an i
29970 6e 74 65 67 65 72 2e 20 20 41 6e 20 61 73 73 65  nteger.  An asse
29980 72 74 69 6f 6e 20 66 61 75 6c 74 20 77 69 6c 6c  rtion fault will
29990 20 72 65 73 75 6c 74 20 69 66 20 79 6f 75 20 74   result if you t
299a0 72 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  ry..*/.case OP_I
299b0 66 4e 65 67 3a 20 7b 20 20 20 20 20 20 20 20 2f  fNeg: {        /
299c0 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20  * jump, in1 */. 
299d0 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
299e0 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
299f0 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45  ( pIn1->flags&ME
29a00 4d 5f 49 6e 74 20 29 3b 0a 20 20 69 66 28 20 70  M_Int );.  if( p
29a10 49 6e 31 2d 3e 75 2e 69 3c 30 20 29 7b 0a 20 20  In1->u.i<0 ){.  
29a20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
29a30 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  - 1;.  }.  break
29a40 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
29a50 49 66 5a 65 72 6f 20 50 31 20 50 32 20 50 33 20  IfZero P1 P2 P3 
29a60 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 65  * *.**.** The re
29a70 67 69 73 74 65 72 20 50 31 20 6d 75 73 74 20 63  gister P1 must c
29a80 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65 67 65  ontain an intege
29a90 72 2e 20 20 41 64 64 20 6c 69 74 65 72 61 6c 20  r.  Add literal 
29aa0 50 33 20 74 6f 20 74 68 65 0a 2a 2a 20 76 61 6c  P3 to the.** val
29ab0 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
29ac0 31 2e 20 20 49 66 20 74 68 65 20 72 65 73 75 6c  1.  If the resul
29ad0 74 20 69 73 20 65 78 61 63 74 6c 79 20 30 2c 20  t is exactly 0, 
29ae0 6a 75 6d 70 20 74 6f 20 50 32 2e 20 0a 2a 2a 0a  jump to P2. .**.
29af0 2a 2a 20 49 74 20 69 73 20 69 6c 6c 65 67 61 6c  ** It is illegal
29b00 20 74 6f 20 75 73 65 20 74 68 69 73 20 69 6e 73   to use this ins
29b10 74 72 75 63 74 69 6f 6e 20 6f 6e 20 61 20 72 65  truction on a re
29b20 67 69 73 74 65 72 20 74 68 61 74 20 64 6f 65 73  gister that does
29b30 0a 2a 2a 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20  .** not contain 
29b40 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 41 6e 20  an integer.  An 
29b50 61 73 73 65 72 74 69 6f 6e 20 66 61 75 6c 74 20  assertion fault 
29b60 77 69 6c 6c 20 72 65 73 75 6c 74 20 69 66 20 79  will result if y
29b70 6f 75 20 74 72 79 2e 0a 2a 2f 0a 63 61 73 65 20  ou try..*/.case 
29b80 4f 50 5f 49 66 5a 65 72 6f 3a 20 7b 20 20 20 20  OP_IfZero: {    
29b90 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31      /* jump, in1
29ba0 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   */.  pIn1 = &aM
29bb0 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  em[pOp->p1];.  a
29bc0 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61  ssert( pIn1->fla
29bd0 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20  gs&MEM_Int );.  
29be0 70 49 6e 31 2d 3e 75 2e 69 20 2b 3d 20 70 4f 70  pIn1->u.i += pOp
29bf0 2d 3e 70 33 3b 0a 20 20 69 66 28 20 70 49 6e 31  ->p3;.  if( pIn1
29c00 2d 3e 75 2e 69 3d 3d 30 20 29 7b 0a 20 20 20 20  ->u.i==0 ){.    
29c10 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
29c20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  1;.  }.  break;.
29c30 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 67  }../* Opcode: Ag
29c40 67 53 74 65 70 20 2a 20 50 32 20 50 33 20 50 34  gStep * P2 P3 P4
29c50 20 50 35 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74   P5.**.** Execut
29c60 65 20 74 68 65 20 73 74 65 70 20 66 75 6e 63 74  e the step funct
29c70 69 6f 6e 20 66 6f 72 20 61 6e 20 61 67 67 72 65  ion for an aggre
29c80 67 61 74 65 2e 20 20 54 68 65 0a 2a 2a 20 66 75  gate.  The.** fu
29c90 6e 63 74 69 6f 6e 20 68 61 73 20 50 35 20 61 72  nction has P5 ar
29ca0 67 75 6d 65 6e 74 73 2e 20 20 20 50 34 20 69 73  guments.   P4 is
29cb0 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68   a pointer to th
29cc0 65 20 46 75 6e 63 44 65 66 0a 2a 2a 20 73 74 72  e FuncDef.** str
29cd0 75 63 74 75 72 65 20 74 68 61 74 20 73 70 65 63  ucture that spec
29ce0 69 66 69 65 73 20 74 68 65 20 66 75 6e 63 74 69  ifies the functi
29cf0 6f 6e 2e 20 20 55 73 65 20 72 65 67 69 73 74 65  on.  Use registe
29d00 72 0a 2a 2a 20 50 33 20 61 73 20 74 68 65 20 61  r.** P3 as the a
29d10 63 63 75 6d 75 6c 61 74 6f 72 2e 0a 2a 2a 0a 2a  ccumulator..**.*
29d20 2a 20 54 68 65 20 50 35 20 61 72 67 75 6d 65 6e  * The P5 argumen
29d30 74 73 20 61 72 65 20 74 61 6b 65 6e 20 66 72 6f  ts are taken fro
29d40 6d 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e  m register P2 an
29d50 64 20 69 74 73 0a 2a 2a 20 73 75 63 63 65 73 73  d its.** success
29d60 6f 72 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ors..*/.case OP_
29d70 41 67 67 53 74 65 70 3a 20 7b 0a 20 20 69 6e 74  AggStep: {.  int
29d80 20 6e 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 4d   n;.  int i;.  M
29d90 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20 4d 65 6d 20  em *pMem;.  Mem 
29da0 2a 70 52 65 63 3b 0a 20 20 73 71 6c 69 74 65 33  *pRec;.  sqlite3
29db0 5f 63 6f 6e 74 65 78 74 20 63 74 78 3b 0a 20 20  _context ctx;.  
29dc0 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a  sqlite3_value **
29dd0 61 70 56 61 6c 3b 0a 0a 20 20 6e 20 3d 20 70 4f  apVal;..  n = pO
29de0 70 2d 3e 70 35 3b 0a 20 20 61 73 73 65 72 74 28  p->p5;.  assert(
29df0 20 6e 3e 3d 30 20 29 3b 0a 20 20 70 52 65 63 20   n>=0 );.  pRec 
29e00 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
29e10 3b 0a 20 20 61 70 56 61 6c 20 3d 20 70 2d 3e 61  ;.  apVal = p->a
29e20 70 41 72 67 3b 0a 20 20 61 73 73 65 72 74 28 20  pArg;.  assert( 
29e30 61 70 56 61 6c 20 7c 7c 20 6e 3d 3d 30 20 29 3b  apVal || n==0 );
29e40 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b  .  for(i=0; i<n;
29e50 20 69 2b 2b 2c 20 70 52 65 63 2b 2b 29 7b 0a 20   i++, pRec++){. 
29e60 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
29e70 56 61 6c 69 64 28 70 52 65 63 29 20 29 3b 0a 20  Valid(pRec) );. 
29e80 20 20 20 61 70 56 61 6c 5b 69 5d 20 3d 20 70 52     apVal[i] = pR
29e90 65 63 3b 0a 20 20 20 20 6d 65 6d 41 62 6f 75 74  ec;.    memAbout
29ea0 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 52 65 63  ToChange(p, pRec
29eb0 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
29ec0 62 65 4d 65 6d 53 74 6f 72 65 54 79 70 65 28 70  beMemStoreType(p
29ed0 52 65 63 29 3b 0a 20 20 7d 0a 20 20 63 74 78 2e  Rec);.  }.  ctx.
29ee0 70 46 75 6e 63 20 3d 20 70 4f 70 2d 3e 70 34 2e  pFunc = pOp->p4.
29ef0 70 46 75 6e 63 3b 0a 20 20 61 73 73 65 72 74 28  pFunc;.  assert(
29f00 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f   pOp->p3>0 && pO
29f10 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29  p->p3<=p->nMem )
29f20 3b 0a 20 20 63 74 78 2e 70 4d 65 6d 20 3d 20 70  ;.  ctx.pMem = p
29f30 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Mem = &aMem[pOp-
29f40 3e 70 33 5d 3b 0a 20 20 70 4d 65 6d 2d 3e 6e 2b  >p3];.  pMem->n+
29f50 2b 3b 0a 20 20 63 74 78 2e 73 2e 66 6c 61 67 73  +;.  ctx.s.flags
29f60 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 63   = MEM_Null;.  c
29f70 74 78 2e 73 2e 7a 20 3d 20 30 3b 0a 20 20 63 74  tx.s.z = 0;.  ct
29f80 78 2e 73 2e 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b  x.s.zMalloc = 0;
29f90 0a 20 20 63 74 78 2e 73 2e 78 44 65 6c 20 3d 20  .  ctx.s.xDel = 
29fa0 30 3b 0a 20 20 63 74 78 2e 73 2e 64 62 20 3d 20  0;.  ctx.s.db = 
29fb0 64 62 3b 0a 20 20 63 74 78 2e 69 73 45 72 72 6f  db;.  ctx.isErro
29fc0 72 20 3d 20 30 3b 0a 20 20 63 74 78 2e 70 43 6f  r = 0;.  ctx.pCo
29fd0 6c 6c 20 3d 20 30 3b 0a 20 20 69 66 28 20 63 74  ll = 0;.  if( ct
29fe0 78 2e 70 46 75 6e 63 2d 3e 66 6c 61 67 73 20 26  x.pFunc->flags &
29ff0 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45   SQLITE_FUNC_NEE
2a000 44 43 4f 4c 4c 20 29 7b 0a 20 20 20 20 61 73 73  DCOLL ){.    ass
2a010 65 72 74 28 20 70 4f 70 3e 70 2d 3e 61 4f 70 20  ert( pOp>p->aOp 
2a020 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
2a030 4f 70 5b 2d 31 5d 2e 70 34 74 79 70 65 3d 3d 50  Op[-1].p4type==P
2a040 34 5f 43 4f 4c 4c 53 45 51 20 29 3b 0a 20 20 20  4_COLLSEQ );.   
2a050 20 61 73 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d   assert( pOp[-1]
2a060 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43 6f 6c 6c  .opcode==OP_Coll
2a070 53 65 71 20 29 3b 0a 20 20 20 20 63 74 78 2e 70  Seq );.    ctx.p
2a080 43 6f 6c 6c 20 3d 20 70 4f 70 5b 2d 31 5d 2e 70  Coll = pOp[-1].p
2a090 34 2e 70 43 6f 6c 6c 3b 0a 20 20 7d 0a 20 20 28  4.pColl;.  }.  (
2a0a0 63 74 78 2e 70 46 75 6e 63 2d 3e 78 53 74 65 70  ctx.pFunc->xStep
2a0b0 29 28 26 63 74 78 2c 20 6e 2c 20 61 70 56 61 6c  )(&ctx, n, apVal
2a0c0 29 3b 20 2f 2a 20 49 4d 50 3a 20 52 2d 32 34 35  ); /* IMP: R-245
2a0d0 30 35 2d 32 33 32 33 30 20 2a 2f 0a 20 20 73 71  05-23230 */.  sq
2a0e0 6c 69 74 65 33 56 64 62 65 4d 75 74 65 78 52 65  lite3VdbeMutexRe
2a0f0 73 79 6e 63 28 70 29 3b 0a 20 20 69 66 28 20 63  sync(p);.  if( c
2a100 74 78 2e 69 73 45 72 72 6f 72 20 29 7b 0a 20 20  tx.isError ){.  
2a110 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69    sqlite3SetStri
2a120 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20  ng(&p->zErrMsg, 
2a130 64 62 2c 20 22 25 73 22 2c 20 73 71 6c 69 74 65  db, "%s", sqlite
2a140 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 26 63 74  3_value_text(&ct
2a150 78 2e 73 29 29 3b 0a 20 20 20 20 72 63 20 3d 20  x.s));.    rc = 
2a160 63 74 78 2e 69 73 45 72 72 6f 72 3b 0a 20 20 7d  ctx.isError;.  }
2a170 0a 0a 20 20 2f 2a 20 54 68 65 20 61 70 70 2d 64  ..  /* The app-d
2a180 65 66 69 6e 65 64 20 66 75 6e 63 74 69 6f 6e 20  efined function 
2a190 68 61 73 20 64 6f 6e 65 20 73 6f 6d 65 74 68 69  has done somethi
2a1a0 6e 67 20 74 68 61 74 20 61 73 20 63 61 75 73 65  ng that as cause
2a1b0 64 20 74 68 69 73 0a 20 20 2a 2a 20 73 74 61 74  d this.  ** stat
2a1c0 65 6d 65 6e 74 20 74 6f 20 65 78 70 69 72 65 2e  ement to expire.
2a1d0 20 20 28 50 65 72 68 61 70 73 20 74 68 65 20 66    (Perhaps the f
2a1e0 75 6e 63 74 69 6f 6e 20 63 61 6c 6c 65 64 20 73  unction called s
2a1f0 71 6c 69 74 65 33 5f 65 78 65 63 28 29 0a 20 20  qlite3_exec().  
2a200 2a 2a 20 77 69 74 68 20 61 20 43 52 45 41 54 45  ** with a CREATE
2a210 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74   TABLE statement
2a220 2e 29 0a 20 20 2a 2f 0a 23 69 66 20 30 0a 20 20  .).  */.#if 0.  
2a230 69 66 28 20 70 2d 3e 65 78 70 69 72 65 64 20 29  if( p->expired )
2a240 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54  {.    rc = SQLIT
2a250 45 5f 41 42 4f 52 54 3b 0a 20 20 20 20 62 72 65  E_ABORT;.    bre
2a260 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a  ak;.  }.#endif..
2a270 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
2a280 52 65 6c 65 61 73 65 28 26 63 74 78 2e 73 29 3b  Release(&ctx.s);
2a290 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ..  break;.}../*
2a2a0 20 4f 70 63 6f 64 65 3a 20 41 67 67 46 69 6e 61   Opcode: AggFina
2a2b0 6c 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a  l P1 P2 * P4 *.*
2a2c0 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20 74 68 65  *.** Execute the
2a2d0 20 66 69 6e 61 6c 69 7a 65 72 20 66 75 6e 63 74   finalizer funct
2a2e0 69 6f 6e 20 66 6f 72 20 61 6e 20 61 67 67 72 65  ion for an aggre
2a2f0 67 61 74 65 2e 20 20 50 31 20 69 73 0a 2a 2a 20  gate.  P1 is.** 
2a300 74 68 65 20 6d 65 6d 6f 72 79 20 6c 6f 63 61 74  the memory locat
2a310 69 6f 6e 20 74 68 61 74 20 69 73 20 74 68 65 20  ion that is the 
2a320 61 63 63 75 6d 75 6c 61 74 6f 72 20 66 6f 72 20  accumulator for 
2a330 74 68 65 20 61 67 67 72 65 67 61 74 65 2e 0a 2a  the aggregate..*
2a340 2a 0a 2a 2a 20 50 32 20 69 73 20 74 68 65 20 6e  *.** P2 is the n
2a350 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e  umber of argumen
2a360 74 73 20 74 68 61 74 20 74 68 65 20 73 74 65 70  ts that the step
2a370 20 66 75 6e 63 74 69 6f 6e 20 74 61 6b 65 73 20   function takes 
2a380 61 6e 64 0a 2a 2a 20 50 34 20 69 73 20 61 20 70  and.** P4 is a p
2a390 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 46 75  ointer to the Fu
2a3a0 6e 63 44 65 66 20 66 6f 72 20 74 68 69 73 20 66  ncDef for this f
2a3b0 75 6e 63 74 69 6f 6e 2e 20 20 54 68 65 20 50 32  unction.  The P2
2a3c0 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 69 73 20  .** argument is 
2a3d0 6e 6f 74 20 75 73 65 64 20 62 79 20 74 68 69 73  not used by this
2a3e0 20 6f 70 63 6f 64 65 2e 20 20 49 74 20 69 73 20   opcode.  It is 
2a3f0 6f 6e 6c 79 20 74 68 65 72 65 20 74 6f 20 64 69  only there to di
2a400 73 61 6d 62 69 67 75 61 74 65 0a 2a 2a 20 66 75  sambiguate.** fu
2a410 6e 63 74 69 6f 6e 73 20 74 68 61 74 20 63 61 6e  nctions that can
2a420 20 74 61 6b 65 20 76 61 72 79 69 6e 67 20 6e 75   take varying nu
2a430 6d 62 65 72 73 20 6f 66 20 61 72 67 75 6d 65 6e  mbers of argumen
2a440 74 73 2e 20 20 54 68 65 0a 2a 2a 20 50 34 20 61  ts.  The.** P4 a
2a450 72 67 75 6d 65 6e 74 20 69 73 20 6f 6e 6c 79 20  rgument is only 
2a460 6e 65 65 64 65 64 20 66 6f 72 20 74 68 65 20 64  needed for the d
2a470 65 67 65 6e 65 72 61 74 65 20 63 61 73 65 20 77  egenerate case w
2a480 68 65 72 65 0a 2a 2a 20 74 68 65 20 73 74 65 70  here.** the step
2a490 20 66 75 6e 63 74 69 6f 6e 20 77 61 73 20 6e 6f   function was no
2a4a0 74 20 70 72 65 76 69 6f 75 73 6c 79 20 63 61 6c  t previously cal
2a4b0 6c 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  led..*/.case OP_
2a4c0 41 67 67 46 69 6e 61 6c 3a 20 7b 0a 20 20 4d 65  AggFinal: {.  Me
2a4d0 6d 20 2a 70 4d 65 6d 3b 0a 20 20 61 73 73 65 72  m *pMem;.  asser
2a4e0 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20  t( pOp->p1>0 && 
2a4f0 70 4f 70 2d 3e 70 31 3c 3d 70 2d 3e 6e 4d 65 6d  pOp->p1<=p->nMem
2a500 20 29 3b 0a 20 20 70 4d 65 6d 20 3d 20 26 61 4d   );.  pMem = &aM
2a510 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  em[pOp->p1];.  a
2a520 73 73 65 72 74 28 20 28 70 4d 65 6d 2d 3e 66 6c  ssert( (pMem->fl
2a530 61 67 73 20 26 20 7e 28 4d 45 4d 5f 4e 75 6c 6c  ags & ~(MEM_Null
2a540 7c 4d 45 4d 5f 41 67 67 29 29 3d 3d 30 20 29 3b  |MEM_Agg))==0 );
2a550 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
2a560 64 62 65 4d 65 6d 46 69 6e 61 6c 69 7a 65 28 70  dbeMemFinalize(p
2a570 4d 65 6d 2c 20 70 4f 70 2d 3e 70 34 2e 70 46 75  Mem, pOp->p4.pFu
2a580 6e 63 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  nc);.  sqlite3Vd
2a590 62 65 4d 75 74 65 78 52 65 73 79 6e 63 28 70 29  beMutexResync(p)
2a5a0 3b 0a 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20  ;.  if( rc ){.  
2a5b0 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69    sqlite3SetStri
2a5c0 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20  ng(&p->zErrMsg, 
2a5d0 64 62 2c 20 22 25 73 22 2c 20 73 71 6c 69 74 65  db, "%s", sqlite
2a5e0 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 70 4d 65  3_value_text(pMe
2a5f0 6d 29 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  m));.  }else if(
2a600 20 70 2d 3e 65 78 70 69 72 65 64 20 29 7b 0a 20   p->expired ){. 
2a610 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 41     rc = SQLITE_A
2a620 42 4f 52 54 3b 0a 20 20 7d 0a 20 20 73 71 6c 69  BORT;.  }.  sqli
2a630 74 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63  te3VdbeChangeEnc
2a640 6f 64 69 6e 67 28 70 4d 65 6d 2c 20 65 6e 63 6f  oding(pMem, enco
2a650 64 69 6e 67 29 3b 0a 20 20 55 50 44 41 54 45 5f  ding);.  UPDATE_
2a660 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4d 65  MAX_BLOBSIZE(pMe
2a670 6d 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65  m);.  if( sqlite
2a680 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28 70  3VdbeMemTooBig(p
2a690 4d 65 6d 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f  Mem) ){.    goto
2a6a0 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20   too_big;.  }.  
2a6b0 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65  break;.}..#ifnde
2a6c0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41  f SQLITE_OMIT_WA
2a6d0 4c 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 68 65  L./* Opcode: Che
2a6e0 63 6b 70 6f 69 6e 74 20 50 31 20 50 32 20 50 33  ckpoint P1 P2 P3
2a6f0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b   * *.**.** Check
2a700 70 6f 69 6e 74 20 64 61 74 61 62 61 73 65 20 50  point database P
2a710 31 2e 20 54 68 69 73 20 69 73 20 61 20 6e 6f 2d  1. This is a no-
2a720 6f 70 20 69 66 20 50 31 20 69 73 20 6e 6f 74 20  op if P1 is not 
2a730 63 75 72 72 65 6e 74 6c 79 20 69 6e 0a 2a 2a 20  currently in.** 
2a740 57 41 4c 20 6d 6f 64 65 2e 20 50 61 72 61 6d 65  WAL mode. Parame
2a750 74 65 72 20 50 32 20 69 73 20 6f 6e 65 20 6f 66  ter P2 is one of
2a760 20 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49   SQLITE_CHECKPOI
2a770 4e 54 5f 50 41 53 53 49 56 45 2c 20 46 55 4c 4c  NT_PASSIVE, FULL
2a780 0a 2a 2a 20 6f 72 20 52 45 53 54 41 52 54 2e 20  .** or RESTART. 
2a790 20 57 72 69 74 65 20 31 20 6f 72 20 30 20 69 6e   Write 1 or 0 in
2a7a0 74 6f 20 6d 65 6d 5b 50 33 5d 20 69 66 20 74 68  to mem[P3] if th
2a7b0 65 20 63 68 65 63 6b 70 6f 69 6e 74 20 72 65 74  e checkpoint ret
2a7c0 75 72 6e 73 0a 2a 2a 20 53 51 4c 49 54 45 5f 42  urns.** SQLITE_B
2a7d0 55 53 59 20 6f 72 20 6e 6f 74 2c 20 72 65 73 70  USY or not, resp
2a7e0 65 63 74 69 76 65 6c 79 2e 20 20 57 72 69 74 65  ectively.  Write
2a7f0 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70   the number of p
2a800 61 67 65 73 20 69 6e 20 74 68 65 0a 2a 2a 20 57  ages in the.** W
2a810 41 4c 20 61 66 74 65 72 20 74 68 65 20 63 68 65  AL after the che
2a820 63 6b 70 6f 69 6e 74 20 69 6e 74 6f 20 6d 65 6d  ckpoint into mem
2a830 5b 50 33 2b 31 5d 20 61 6e 64 20 74 68 65 20 6e  [P3+1] and the n
2a840 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 0a 2a  umber of pages.*
2a850 2a 20 69 6e 20 74 68 65 20 57 41 4c 20 74 68 61  * in the WAL tha
2a860 74 20 68 61 76 65 20 62 65 65 6e 20 63 68 65 63  t have been chec
2a870 6b 70 6f 69 6e 74 65 64 20 61 66 74 65 72 20 74  kpointed after t
2a880 68 65 20 63 68 65 63 6b 70 6f 69 6e 74 0a 2a 2a  he checkpoint.**
2a890 20 63 6f 6d 70 6c 65 74 65 73 20 69 6e 74 6f 20   completes into 
2a8a0 6d 65 6d 5b 50 33 2b 32 5d 2e 20 20 48 6f 77 65  mem[P3+2].  Howe
2a8b0 76 65 72 20 6f 6e 20 61 6e 20 65 72 72 6f 72 2c  ver on an error,
2a8c0 20 6d 65 6d 5b 50 33 2b 31 5d 20 61 6e 64 0a 2a   mem[P3+1] and.*
2a8d0 2a 20 6d 65 6d 5b 50 33 2b 32 5d 20 61 72 65 20  * mem[P3+2] are 
2a8e0 69 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f 20 2d  initialized to -
2a8f0 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 68  1..*/.case OP_Ch
2a900 65 63 6b 70 6f 69 6e 74 3a 20 7b 0a 20 20 69 6e  eckpoint: {.  in
2a910 74 20 69 3b 20 20 20 20 20 20 20 20 20 20 20 20  t i;            
2a920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
2a930 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 20 2a 2f   Loop counter */
2a940 0a 20 20 69 6e 74 20 61 52 65 73 5b 33 5d 3b 20  .  int aRes[3]; 
2a950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a960 20 20 20 2f 2a 20 52 65 73 75 6c 74 73 20 2a 2f     /* Results */
2a970 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20 20  .  Mem *pMem;   
2a980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a990 20 20 20 2f 2a 20 57 72 69 74 65 20 72 65 73 75     /* Write resu
2a9a0 6c 74 73 20 68 65 72 65 20 2a 2f 0a 0a 20 20 61  lts here */..  a
2a9b0 52 65 73 5b 30 5d 20 3d 20 30 3b 0a 20 20 61 52  Res[0] = 0;.  aR
2a9c0 65 73 5b 31 5d 20 3d 20 61 52 65 73 5b 32 5d 20  es[1] = aRes[2] 
2a9d0 3d 20 2d 31 3b 0a 20 20 61 73 73 65 72 74 28 20  = -1;.  assert( 
2a9e0 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f  pOp->p2==SQLITE_
2a9f0 43 48 45 43 4b 50 4f 49 4e 54 5f 50 41 53 53 49  CHECKPOINT_PASSI
2aa00 56 45 0a 20 20 20 20 20 20 20 7c 7c 20 70 4f 70  VE.       || pOp
2aa10 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 43 48 45  ->p2==SQLITE_CHE
2aa20 43 4b 50 4f 49 4e 54 5f 46 55 4c 4c 0a 20 20 20  CKPOINT_FULL.   
2aa30 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d      || pOp->p2==
2aa40 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e  SQLITE_CHECKPOIN
2aa50 54 5f 52 45 53 54 41 52 54 0a 20 20 29 3b 0a 20  T_RESTART.  );. 
2aa60 20 72 63 20 3d 20 73 71 6c 69 74 65 33 43 68 65   rc = sqlite3Che
2aa70 63 6b 70 6f 69 6e 74 28 64 62 2c 20 70 4f 70 2d  ckpoint(db, pOp-
2aa80 3e 70 31 2c 20 70 4f 70 2d 3e 70 32 2c 20 26 61  >p1, pOp->p2, &a
2aa90 52 65 73 5b 31 5d 2c 20 26 61 52 65 73 5b 32 5d  Res[1], &aRes[2]
2aaa0 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  );.  if( rc==SQL
2aab0 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20 20  ITE_BUSY ){.    
2aac0 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a  rc = SQLITE_OK;.
2aad0 20 20 20 20 61 52 65 73 5b 30 5d 20 3d 20 31 3b      aRes[0] = 1;
2aae0 0a 20 20 7d 0a 20 20 66 6f 72 28 69 3d 30 2c 20  .  }.  for(i=0, 
2aaf0 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pMem = &aMem[pOp
2ab00 2d 3e 70 33 5d 3b 20 69 3c 33 3b 20 69 2b 2b 2c  ->p3]; i<3; i++,
2ab10 20 70 4d 65 6d 2b 2b 29 7b 0a 20 20 20 20 73 71   pMem++){.    sq
2ab20 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49  lite3VdbeMemSetI
2ab30 6e 74 36 34 28 70 4d 65 6d 2c 20 28 69 36 34 29  nt64(pMem, (i64)
2ab40 61 52 65 73 5b 69 5d 29 3b 0a 20 20 7d 20 20 20  aRes[i]);.  }   
2ab50 20 0a 20 20 62 72 65 61 6b 3b 0a 7d 3b 20 20 0a   .  break;.};  .
2ab60 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20  #endif..#ifndef 
2ab70 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 41 47  SQLITE_OMIT_PRAG
2ab80 4d 41 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4a 6f  MA./* Opcode: Jo
2ab90 75 72 6e 61 6c 4d 6f 64 65 20 50 31 20 50 32 20  urnalMode P1 P2 
2aba0 50 33 20 2a 20 50 35 0a 2a 2a 0a 2a 2a 20 43 68  P3 * P5.**.** Ch
2abb0 61 6e 67 65 20 74 68 65 20 6a 6f 75 72 6e 61 6c  ange the journal
2abc0 20 6d 6f 64 65 20 6f 66 20 64 61 74 61 62 61 73   mode of databas
2abd0 65 20 50 31 20 74 6f 20 50 33 2e 20 50 33 20 6d  e P1 to P3. P3 m
2abe0 75 73 74 20 62 65 20 6f 6e 65 20 6f 66 20 74 68  ust be one of th
2abf0 65 0a 2a 2a 20 50 41 47 45 52 5f 4a 4f 55 52 4e  e.** PAGER_JOURN
2ac00 41 4c 4d 4f 44 45 5f 58 58 58 20 76 61 6c 75 65  ALMODE_XXX value
2ac10 73 2e 20 49 66 20 63 68 61 6e 67 69 6e 67 20 62  s. If changing b
2ac20 65 74 77 65 65 6e 20 74 68 65 20 76 61 72 69 6f  etween the vario
2ac30 75 73 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 6d  us rollback.** m
2ac40 6f 64 65 73 20 28 64 65 6c 65 74 65 2c 20 74 72  odes (delete, tr
2ac50 75 6e 63 61 74 65 2c 20 70 65 72 73 69 73 74 2c  uncate, persist,
2ac60 20 6f 66 66 20 61 6e 64 20 6d 65 6d 6f 72 79 29   off and memory)
2ac70 2c 20 74 68 69 73 20 69 73 20 61 20 73 69 6d 70  , this is a simp
2ac80 6c 65 0a 2a 2a 20 6f 70 65 72 61 74 69 6f 6e 2e  le.** operation.
2ac90 20 4e 6f 20 49 4f 20 69 73 20 72 65 71 75 69 72   No IO is requir
2aca0 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 63 68 61  ed..**.** If cha
2acb0 6e 67 69 6e 67 20 69 6e 74 6f 20 6f 72 20 6f 75  nging into or ou
2acc0 74 20 6f 66 20 57 41 4c 20 6d 6f 64 65 20 74 68  t of WAL mode th
2acd0 65 20 70 72 6f 63 65 64 75 72 65 20 69 73 20 6d  e procedure is m
2ace0 6f 72 65 20 63 6f 6d 70 6c 69 63 61 74 65 64 2e  ore complicated.
2acf0 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 61 20 73  .**.** Write a s
2ad00 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e 69 6e 67  tring containing
2ad10 20 74 68 65 20 66 69 6e 61 6c 20 6a 6f 75 72 6e   the final journ
2ad20 61 6c 2d 6d 6f 64 65 20 74 6f 20 72 65 67 69 73  al-mode to regis
2ad30 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20  ter P2..*/.case 
2ad40 4f 50 5f 4a 6f 75 72 6e 61 6c 4d 6f 64 65 3a 20  OP_JournalMode: 
2ad50 7b 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65  {    /* out2-pre
2ad60 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 42 74 72  release */.  Btr
2ad70 65 65 20 2a 70 42 74 3b 20 20 20 20 20 20 20 20  ee *pBt;        
2ad80 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
2ad90 42 74 72 65 65 20 74 6f 20 63 68 61 6e 67 65 20  Btree to change 
2ada0 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 6f 66 20  journal mode of 
2adb0 2a 2f 0a 20 20 50 61 67 65 72 20 2a 70 50 61 67  */.  Pager *pPag
2adc0 65 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  er;             
2add0 20 20 20 20 20 2f 2a 20 50 61 67 65 72 20 61 73       /* Pager as
2ade0 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 70 42  sociated with pB
2adf0 74 20 2a 2f 0a 20 20 69 6e 74 20 65 4e 65 77 3b  t */.  int eNew;
2ae00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ae10 20 20 20 20 20 20 20 2f 2a 20 4e 65 77 20 6a 6f         /* New jo
2ae20 75 72 6e 61 6c 20 6d 6f 64 65 20 2a 2f 0a 20 20  urnal mode */.  
2ae30 69 6e 74 20 65 4f 6c 64 3b 20 20 20 20 20 20 20  int eOld;       
2ae40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ae50 2f 2a 20 54 68 65 20 6f 6c 64 20 6a 6f 75 72 6e  /* The old journ
2ae60 61 6c 20 6d 6f 64 65 20 2a 2f 0a 20 20 63 6f 6e  al mode */.  con
2ae70 73 74 20 63 68 61 72 20 2a 7a 46 69 6c 65 6e 61  st char *zFilena
2ae80 6d 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  me;          /* 
2ae90 4e 61 6d 65 20 6f 66 20 64 61 74 61 62 61 73 65  Name of database
2aea0 20 66 69 6c 65 20 66 6f 72 20 70 50 61 67 65 72   file for pPager
2aeb0 20 2a 2f 0a 0a 20 20 65 4e 65 77 20 3d 20 70 4f   */..  eNew = pO
2aec0 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72 74 28  p->p3;.  assert(
2aed0 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55   eNew==PAGER_JOU
2aee0 52 4e 41 4c 4d 4f 44 45 5f 44 45 4c 45 54 45 20  RNALMODE_DELETE 
2aef0 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d  .       || eNew=
2af00 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f  =PAGER_JOURNALMO
2af10 44 45 5f 54 52 55 4e 43 41 54 45 20 0a 20 20 20  DE_TRUNCATE .   
2af20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47      || eNew==PAG
2af30 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 50  ER_JOURNALMODE_P
2af40 45 52 53 49 53 54 20 0a 20 20 20 20 20 20 20 7c  ERSIST .       |
2af50 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f  | eNew==PAGER_JO
2af60 55 52 4e 41 4c 4d 4f 44 45 5f 4f 46 46 0a 20 20  URNALMODE_OFF.  
2af70 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41       || eNew==PA
2af80 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
2af90 4d 45 4d 4f 52 59 0a 20 20 20 20 20 20 20 7c 7c  MEMORY.       ||
2afa0 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55   eNew==PAGER_JOU
2afb0 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 0a 20 20 20  RNALMODE_WAL.   
2afc0 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47      || eNew==PAG
2afd0 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 51  ER_JOURNALMODE_Q
2afe0 55 45 52 59 0a 20 20 29 3b 0a 20 20 61 73 73 65  UERY.  );.  asse
2aff0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
2b000 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44  & pOp->p1<db->nD
2b010 62 20 29 3b 0a 0a 20 20 2f 2a 20 54 68 69 73 20  b );..  /* This 
2b020 6f 70 63 6f 64 65 20 69 73 20 75 73 65 64 20 69  opcode is used i
2b030 6e 20 74 77 6f 20 70 6c 61 63 65 73 3a 20 50 52  n two places: PR
2b040 41 47 4d 41 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64  AGMA journal_mod
2b050 65 20 61 6e 64 20 41 54 54 41 43 48 2e 0a 20 20  e and ATTACH..  
2b060 2a 2a 20 49 6e 20 50 52 41 47 4d 41 20 6a 6f 75  ** In PRAGMA jou
2b070 72 6e 61 6c 5f 6d 6f 64 65 2c 20 74 68 65 20 73  rnal_mode, the s
2b080 71 6c 69 74 65 33 56 64 62 65 55 73 65 73 42 74  qlite3VdbeUsesBt
2b090 72 65 65 28 29 20 72 6f 75 74 69 6e 65 20 69 73  ree() routine is
2b0a0 20 63 61 6c 6c 65 64 0a 20 20 2a 2a 20 77 68 65   called.  ** whe
2b0b0 6e 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20  n the statement 
2b0c0 69 73 20 70 72 65 70 61 72 65 64 20 61 6e 64 20  is prepared and 
2b0d0 73 6f 20 70 2d 3e 62 74 72 65 65 4d 61 73 6b 21  so p->btreeMask!
2b0e0 3d 30 2e 20 20 41 6c 6c 20 6d 75 74 65 78 65 73  =0.  All mutexes
2b0f0 0a 20 20 2a 2a 20 61 72 65 20 61 6c 72 65 61 64  .  ** are alread
2b100 79 20 61 63 71 75 69 72 65 64 2e 20 20 42 75 74  y acquired.  But
2b110 20 77 68 65 6e 20 75 73 65 64 20 69 6e 20 41 54   when used in AT
2b120 54 41 43 48 2c 20 73 71 6c 69 74 65 33 56 64 62  TACH, sqlite3Vdb
2b130 65 55 73 65 73 42 74 72 65 65 28 29 0a 20 20 2a  eUsesBtree().  *
2b140 2a 20 69 73 20 6e 6f 74 20 63 61 6c 6c 65 64 20  * is not called 
2b150 77 68 65 6e 20 74 68 65 20 73 74 61 74 65 6d 65  when the stateme
2b160 6e 74 20 69 73 20 70 72 65 70 61 72 65 64 20 62  nt is prepared b
2b170 65 63 61 75 73 65 20 69 74 20 72 65 71 75 69 72  ecause it requir
2b180 65 73 20 74 68 65 0a 20 20 2a 2a 20 69 44 62 20  es the.  ** iDb 
2b190 69 6e 64 65 78 20 6f 66 20 74 68 65 20 64 61 74  index of the dat
2b1a0 61 62 61 73 65 20 61 73 20 61 20 70 61 72 61 6d  abase as a param
2b1b0 65 74 65 72 2c 20 61 6e 64 20 74 68 65 20 64 61  eter, and the da
2b1c0 74 61 62 61 73 65 20 68 61 73 20 6e 6f 74 0a 20  tabase has not. 
2b1d0 20 2a 2a 20 79 65 74 20 62 65 65 6e 20 61 74 74   ** yet been att
2b1e0 61 63 68 65 64 20 73 6f 20 74 68 61 74 20 69 6e  ached so that in
2b1f0 64 65 78 20 69 73 20 75 6e 61 76 61 69 6c 61 62  dex is unavailab
2b200 6c 65 2e 20 20 57 65 20 68 61 76 65 20 74 6f 20  le.  We have to 
2b210 77 61 69 74 0a 20 20 2a 2a 20 75 6e 74 69 6c 20  wait.  ** until 
2b220 72 75 6e 74 69 6d 65 20 28 6e 6f 77 29 20 74 6f  runtime (now) to
2b230 20 67 65 74 20 74 68 65 20 6d 75 74 65 78 20 6f   get the mutex o
2b240 6e 20 74 68 65 20 6e 65 77 6c 79 20 61 74 74 61  n the newly atta
2b250 63 68 65 64 20 64 61 74 61 62 61 73 65 2e 0a 20  ched database.. 
2b260 20 2a 2a 20 4e 6f 20 6f 74 68 65 72 20 6d 75 74   ** No other mut
2b270 65 78 65 73 20 61 72 65 20 72 65 71 75 69 72 65  exes are require
2b280 64 20 62 79 20 74 68 65 20 41 54 54 41 43 48 20  d by the ATTACH 
2b290 63 6f 6d 6d 61 6e 64 20 73 6f 20 74 68 69 73 20  command so this 
2b2a0 69 73 20 73 61 66 65 0a 20 20 2a 2a 20 74 6f 20  is safe.  ** to 
2b2b0 64 6f 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 70  do..  */.  if( p
2b2c0 2d 3e 62 74 72 65 65 4d 61 73 6b 3d 3d 30 20 29  ->btreeMask==0 )
2b2d0 7b 0a 20 20 20 20 2f 2a 20 54 68 69 73 20 6f 63  {.    /* This oc
2b2e0 63 75 72 73 20 72 69 67 68 74 20 61 66 74 65 72  curs right after
2b2f0 20 41 54 54 41 43 48 2e 20 20 47 65 74 20 61 20   ATTACH.  Get a 
2b300 6d 75 74 65 78 20 6f 6e 20 74 68 65 20 6e 65 77  mutex on the new
2b310 6c 79 20 41 54 54 41 43 48 65 64 0a 20 20 20 20  ly ATTACHed.    
2b320 2a 2a 20 64 61 74 61 62 61 73 65 2e 20 2a 2f 0a  ** database. */.
2b330 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 55      sqlite3VdbeU
2b340 73 65 73 42 74 72 65 65 28 70 2c 20 70 4f 70 2d  sesBtree(p, pOp-
2b350 3e 70 31 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  >p1);.    sqlite
2b360 33 56 64 62 65 45 6e 74 65 72 28 70 29 3b 0a 20  3VdbeEnter(p);. 
2b370 20 7d 0a 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e   }..  pBt = db->
2b380 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74  aDb[pOp->p1].pBt
2b390 3b 0a 20 20 70 50 61 67 65 72 20 3d 20 73 71 6c  ;.  pPager = sql
2b3a0 69 74 65 33 42 74 72 65 65 50 61 67 65 72 28 70  ite3BtreePager(p
2b3b0 42 74 29 3b 0a 20 20 65 4f 6c 64 20 3d 20 73 71  Bt);.  eOld = sq
2b3c0 6c 69 74 65 33 50 61 67 65 72 47 65 74 4a 6f 75  lite3PagerGetJou
2b3d0 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65 72 29  rnalMode(pPager)
2b3e0 3b 0a 20 20 69 66 28 20 65 4e 65 77 3d 3d 50 41  ;.  if( eNew==PA
2b3f0 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
2b400 51 55 45 52 59 20 29 20 65 4e 65 77 20 3d 20 65  QUERY ) eNew = e
2b410 4f 6c 64 3b 0a 20 20 69 66 28 20 21 73 71 6c 69  Old;.  if( !sqli
2b420 74 65 33 50 61 67 65 72 4f 6b 54 6f 43 68 61 6e  te3PagerOkToChan
2b430 67 65 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50  geJournalMode(pP
2b440 61 67 65 72 29 20 29 20 65 4e 65 77 20 3d 20 65  ager) ) eNew = e
2b450 4f 6c 64 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51  Old;..#ifndef SQ
2b460 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20  LITE_OMIT_WAL.  
2b470 7a 46 69 6c 65 6e 61 6d 65 20 3d 20 73 71 6c 69  zFilename = sqli
2b480 74 65 33 50 61 67 65 72 46 69 6c 65 6e 61 6d 65  te3PagerFilename
2b490 28 70 50 61 67 65 72 29 3b 0a 0a 20 20 2f 2a 20  (pPager);..  /* 
2b4a0 44 6f 20 6e 6f 74 20 61 6c 6c 6f 77 20 61 20 74  Do not allow a t
2b4b0 72 61 6e 73 69 74 69 6f 6e 20 74 6f 20 6a 6f 75  ransition to jou
2b4c0 72 6e 61 6c 5f 6d 6f 64 65 3d 57 41 4c 20 66 6f  rnal_mode=WAL fo
2b4d0 72 20 61 20 64 61 74 61 62 61 73 65 0a 20 20 2a  r a database.  *
2b4e0 2a 20 69 6e 20 74 65 6d 70 6f 72 61 72 79 20 73  * in temporary s
2b4f0 74 6f 72 61 67 65 20 6f 72 20 69 66 20 74 68 65  torage or if the
2b500 20 56 46 53 20 64 6f 65 73 20 6e 6f 74 20 73 75   VFS does not su
2b510 70 70 6f 72 74 20 73 68 61 72 65 64 20 6d 65 6d  pport shared mem
2b520 6f 72 79 20 0a 20 20 2a 2f 0a 20 20 69 66 28 20  ory .  */.  if( 
2b530 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52  eNew==PAGER_JOUR
2b540 4e 41 4c 4d 4f 44 45 5f 57 41 4c 0a 20 20 20 26  NALMODE_WAL.   &
2b550 26 20 28 7a 46 69 6c 65 6e 61 6d 65 5b 30 5d 3d  & (zFilename[0]=
2b560 3d 30 20 20 20 20 20 20 20 20 20 20 20 20 20 20  =0              
2b570 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65             /* Te
2b580 6d 70 20 66 69 6c 65 20 2a 2f 0a 20 20 20 20 20  mp file */.     
2b590 20 20 7c 7c 20 21 73 71 6c 69 74 65 33 50 61 67    || !sqlite3Pag
2b5a0 65 72 57 61 6c 53 75 70 70 6f 72 74 65 64 28 70  erWalSupported(p
2b5b0 50 61 67 65 72 29 29 20 20 20 2f 2a 20 4e 6f 20  Pager))   /* No 
2b5c0 73 68 61 72 65 64 2d 6d 65 6d 6f 72 79 20 73 75  shared-memory su
2b5d0 70 70 6f 72 74 20 2a 2f 0a 20 20 29 7b 0a 20 20  pport */.  ){.  
2b5e0 20 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a 20    eNew = eOld;. 
2b5f0 20 7d 0a 0a 20 20 69 66 28 20 28 65 4e 65 77 21   }..  if( (eNew!
2b600 3d 65 4f 6c 64 29 0a 20 20 20 26 26 20 28 65 4f  =eOld).   && (eO
2b610 6c 64 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41  ld==PAGER_JOURNA
2b620 4c 4d 4f 44 45 5f 57 41 4c 20 7c 7c 20 65 4e 65  LMODE_WAL || eNe
2b630 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  w==PAGER_JOURNAL
2b640 4d 4f 44 45 5f 57 41 4c 29 0a 20 20 29 7b 0a 20  MODE_WAL).  ){. 
2b650 20 20 20 69 66 28 20 21 64 62 2d 3e 61 75 74 6f     if( !db->auto
2b660 43 6f 6d 6d 69 74 20 7c 7c 20 64 62 2d 3e 61 63  Commit || db->ac
2b670 74 69 76 65 56 64 62 65 43 6e 74 3e 31 20 29 7b  tiveVdbeCnt>1 ){
2b680 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49  .      rc = SQLI
2b690 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 20 20  TE_ERROR;.      
2b6a0 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67  sqlite3SetString
2b6b0 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62  (&p->zErrMsg, db
2b6c0 2c 20 0a 20 20 20 20 20 20 20 20 20 20 22 63 61  , .          "ca
2b6d0 6e 6e 6f 74 20 63 68 61 6e 67 65 20 25 73 20 77  nnot change %s w
2b6e0 61 6c 20 6d 6f 64 65 20 66 72 6f 6d 20 77 69 74  al mode from wit
2b6f0 68 69 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f  hin a transactio
2b700 6e 22 2c 0a 20 20 20 20 20 20 20 20 20 20 28 65  n",.          (e
2b710 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e  New==PAGER_JOURN
2b720 41 4c 4d 4f 44 45 5f 57 41 4c 20 3f 20 22 69 6e  ALMODE_WAL ? "in
2b730 74 6f 22 20 3a 20 22 6f 75 74 20 6f 66 22 29 0a  to" : "out of").
2b740 20 20 20 20 20 20 29 3b 0a 20 20 20 20 20 20 62        );.      b
2b750 72 65 61 6b 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  reak;.    }else{
2b760 0a 20 0a 20 20 20 20 20 20 69 66 28 20 65 4f 6c  . .      if( eOl
2b770 64 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  d==PAGER_JOURNAL
2b780 4d 4f 44 45 5f 57 41 4c 20 29 7b 0a 20 20 20 20  MODE_WAL ){.    
2b790 20 20 20 20 2f 2a 20 49 66 20 6c 65 61 76 69 6e      /* If leavin
2b7a0 67 20 57 41 4c 20 6d 6f 64 65 2c 20 63 6c 6f 73  g WAL mode, clos
2b7b0 65 20 74 68 65 20 6c 6f 67 20 66 69 6c 65 2e 20  e the log file. 
2b7c0 49 66 20 73 75 63 63 65 73 73 66 75 6c 2c 20 74  If successful, t
2b7d0 68 65 20 63 61 6c 6c 0a 20 20 20 20 20 20 20 20  he call.        
2b7e0 2a 2a 20 74 6f 20 50 61 67 65 72 43 6c 6f 73 65  ** to PagerClose
2b7f0 57 61 6c 28 29 20 63 68 65 63 6b 70 6f 69 6e 74  Wal() checkpoint
2b800 73 20 61 6e 64 20 64 65 6c 65 74 65 73 20 74 68  s and deletes th
2b810 65 20 77 72 69 74 65 2d 61 68 65 61 64 2d 6c 6f  e write-ahead-lo
2b820 67 20 0a 20 20 20 20 20 20 20 20 2a 2a 20 66 69  g .        ** fi
2b830 6c 65 2e 20 41 6e 20 45 58 43 4c 55 53 49 56 45  le. An EXCLUSIVE
2b840 20 6c 6f 63 6b 20 6d 61 79 20 73 74 69 6c 6c 20   lock may still 
2b850 62 65 20 68 65 6c 64 20 6f 6e 20 74 68 65 20 64  be held on the d
2b860 61 74 61 62 61 73 65 20 66 69 6c 65 20 0a 20 20  atabase file .  
2b870 20 20 20 20 20 20 2a 2a 20 61 66 74 65 72 20 61        ** after a
2b880 20 73 75 63 63 65 73 73 66 75 6c 20 72 65 74 75   successful retu
2b890 72 6e 2e 20 0a 20 20 20 20 20 20 20 20 2a 2f 0a  rn. .        */.
2b8a0 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c          rc = sql
2b8b0 69 74 65 33 50 61 67 65 72 43 6c 6f 73 65 57 61  ite3PagerCloseWa
2b8c0 6c 28 70 50 61 67 65 72 29 3b 0a 20 20 20 20 20  l(pPager);.     
2b8d0 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54     if( rc==SQLIT
2b8e0 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20  E_OK ){.        
2b8f0 20 20 73 71 6c 69 74 65 33 50 61 67 65 72 53 65    sqlite3PagerSe
2b900 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61  tJournalMode(pPa
2b910 67 65 72 2c 20 65 4e 65 77 29 3b 0a 20 20 20 20  ger, eNew);.    
2b920 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 65 6c 73      }.      }els
2b930 65 20 69 66 28 20 65 4f 6c 64 3d 3d 50 41 47 45  e if( eOld==PAGE
2b940 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4d 45  R_JOURNALMODE_ME
2b950 4d 4f 52 59 20 29 7b 0a 20 20 20 20 20 20 20 20  MORY ){.        
2b960 2f 2a 20 43 61 6e 6e 6f 74 20 74 72 61 6e 73 69  /* Cannot transi
2b970 74 69 6f 6e 20 64 69 72 65 63 74 6c 79 20 66 72  tion directly fr
2b980 6f 6d 20 4d 45 4d 4f 52 59 20 74 6f 20 57 41 4c  om MEMORY to WAL
2b990 2e 20 20 55 73 65 20 6d 6f 64 65 20 4f 46 46 0a  .  Use mode OFF.
2b9a0 20 20 20 20 20 20 20 20 2a 2a 20 61 73 20 61 6e          ** as an
2b9b0 20 69 6e 74 65 72 6d 65 64 69 61 74 65 20 2a 2f   intermediate */
2b9c0 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
2b9d0 50 61 67 65 72 53 65 74 4a 6f 75 72 6e 61 6c 4d  PagerSetJournalM
2b9e0 6f 64 65 28 70 50 61 67 65 72 2c 20 50 41 47 45  ode(pPager, PAGE
2b9f0 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4f 46  R_JOURNALMODE_OF
2ba00 46 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 0a 20  F);.      }.  . 
2ba10 20 20 20 20 20 2f 2a 20 4f 70 65 6e 20 61 20 74       /* Open a t
2ba20 72 61 6e 73 61 63 74 69 6f 6e 20 6f 6e 20 74 68  ransaction on th
2ba30 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e  e database file.
2ba40 20 52 65 67 61 72 64 6c 65 73 73 20 6f 66 20 74   Regardless of t
2ba50 68 65 20 6a 6f 75 72 6e 61 6c 0a 20 20 20 20 20  he journal.     
2ba60 20 2a 2a 20 6d 6f 64 65 2c 20 74 68 69 73 20 74   ** mode, this t
2ba70 72 61 6e 73 61 63 74 69 6f 6e 20 61 6c 77 61 79  ransaction alway
2ba80 73 20 75 73 65 73 20 61 20 72 6f 6c 6c 62 61 63  s uses a rollbac
2ba90 6b 20 6a 6f 75 72 6e 61 6c 2e 0a 20 20 20 20 20  k journal..     
2baa0 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74   */.      assert
2bab0 28 20 73 71 6c 69 74 65 33 42 74 72 65 65 49 73  ( sqlite3BtreeIs
2bac0 49 6e 54 72 61 6e 73 28 70 42 74 29 3d 3d 30 20  InTrans(pBt)==0 
2bad0 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d  );.      if( rc=
2bae0 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
2baf0 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
2bb00 65 33 42 74 72 65 65 53 65 74 56 65 72 73 69 6f  e3BtreeSetVersio
2bb10 6e 28 70 42 74 2c 20 28 65 4e 65 77 3d 3d 50 41  n(pBt, (eNew==PA
2bb20 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
2bb30 57 41 4c 20 3f 20 32 20 3a 20 31 29 29 3b 0a 20  WAL ? 2 : 1));. 
2bb40 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d       }.    }.  }
2bb50 0a 23 65 6e 64 69 66 20 2f 2a 20 69 66 6e 64 65  .#endif /* ifnde
2bb60 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41  f SQLITE_OMIT_WA
2bb70 4c 20 2a 2f 0a 0a 20 20 69 66 28 20 72 63 20 29  L */..  if( rc )
2bb80 7b 0a 20 20 20 20 65 4e 65 77 20 3d 20 65 4f 6c  {.    eNew = eOl
2bb90 64 3b 0a 20 20 7d 0a 20 20 65 4e 65 77 20 3d 20  d;.  }.  eNew = 
2bba0 73 71 6c 69 74 65 33 50 61 67 65 72 53 65 74 4a  sqlite3PagerSetJ
2bbb0 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65  ournalMode(pPage
2bbc0 72 2c 20 65 4e 65 77 29 3b 0a 0a 20 20 70 4f 75  r, eNew);..  pOu
2bbd0 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
2bbe0 32 5d 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67  2];.  pOut->flag
2bbf0 73 20 3d 20 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f  s = MEM_Str|MEM_
2bc00 53 74 61 74 69 63 7c 4d 45 4d 5f 54 65 72 6d 3b  Static|MEM_Term;
2bc10 0a 20 20 70 4f 75 74 2d 3e 7a 20 3d 20 28 63 68  .  pOut->z = (ch
2bc20 61 72 20 2a 29 73 71 6c 69 74 65 33 4a 6f 75 72  ar *)sqlite3Jour
2bc30 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28 65 4e 65 77  nalModename(eNew
2bc40 29 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 73  );.  pOut->n = s
2bc50 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 70  qlite3Strlen30(p
2bc60 4f 75 74 2d 3e 7a 29 3b 0a 20 20 70 4f 75 74 2d  Out->z);.  pOut-
2bc70 3e 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55 54  >enc = SQLITE_UT
2bc80 46 38 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  F8;.  sqlite3Vdb
2bc90 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28  eChangeEncoding(
2bca0 70 4f 75 74 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  pOut, encoding);
2bcb0 0a 20 20 62 72 65 61 6b 3b 0a 7d 3b 0a 23 65 6e  .  break;.};.#en
2bcc0 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
2bcd0 49 54 5f 50 52 41 47 4d 41 20 2a 2f 0a 0a 23 69  IT_PRAGMA */..#i
2bce0 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
2bcf0 45 5f 4f 4d 49 54 5f 56 41 43 55 55 4d 29 20 26  E_OMIT_VACUUM) &
2bd00 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  & !defined(SQLIT
2bd10 45 5f 4f 4d 49 54 5f 41 54 54 41 43 48 29 0a 2f  E_OMIT_ATTACH)./
2bd20 2a 20 4f 70 63 6f 64 65 3a 20 56 61 63 75 75 6d  * Opcode: Vacuum
2bd30 20 2a 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a   * * * * *.**.**
2bd40 20 56 61 63 75 75 6d 20 74 68 65 20 65 6e 74 69   Vacuum the enti
2bd50 72 65 20 64 61 74 61 62 61 73 65 2e 20 20 54 68  re database.  Th
2bd60 69 73 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 63  is opcode will c
2bd70 61 75 73 65 20 6f 74 68 65 72 20 76 69 72 74 75  ause other virtu
2bd80 61 6c 0a 2a 2a 20 6d 61 63 68 69 6e 65 73 20 74  al.** machines t
2bd90 6f 20 62 65 20 63 72 65 61 74 65 64 20 61 6e 64  o be created and
2bda0 20 72 75 6e 2e 20 20 49 74 20 6d 61 79 20 6e 6f   run.  It may no
2bdb0 74 20 62 65 20 63 61 6c 6c 65 64 20 66 72 6f 6d  t be called from
2bdc0 20 77 69 74 68 69 6e 0a 2a 2a 20 61 20 74 72 61   within.** a tra
2bdd0 6e 73 61 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73  nsaction..*/.cas
2bde0 65 20 4f 50 5f 56 61 63 75 75 6d 3a 20 7b 0a 20  e OP_Vacuum: {. 
2bdf0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 52 75 6e   rc = sqlite3Run
2be00 56 61 63 75 75 6d 28 26 70 2d 3e 7a 45 72 72 4d  Vacuum(&p->zErrM
2be10 73 67 2c 20 64 62 29 3b 0a 20 20 62 72 65 61 6b  sg, db);.  break
2be20 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20  ;.}.#endif..#if 
2be30 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
2be40 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 29  OMIT_AUTOVACUUM)
2be50 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 63 72  ./* Opcode: Incr
2be60 56 61 63 75 75 6d 20 50 31 20 50 32 20 2a 20 2a  Vacuum P1 P2 * *
2be70 20 2a 0a 2a 2a 0a 2a 2a 20 50 65 72 66 6f 72 6d   *.**.** Perform
2be80 20 61 20 73 69 6e 67 6c 65 20 73 74 65 70 20 6f   a single step o
2be90 66 20 74 68 65 20 69 6e 63 72 65 6d 65 6e 74 61  f the incrementa
2bea0 6c 20 76 61 63 75 75 6d 20 70 72 6f 63 65 64 75  l vacuum procedu
2beb0 72 65 20 6f 6e 0a 2a 2a 20 74 68 65 20 50 31 20  re on.** the P1 
2bec0 64 61 74 61 62 61 73 65 2e 20 49 66 20 74 68 65  database. If the
2bed0 20 76 61 63 75 75 6d 20 68 61 73 20 66 69 6e 69   vacuum has fini
2bee0 73 68 65 64 2c 20 6a 75 6d 70 20 74 6f 20 69 6e  shed, jump to in
2bef0 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 50 32 2e  struction.** P2.
2bf00 20 4f 74 68 65 72 77 69 73 65 2c 20 66 61 6c 6c   Otherwise, fall
2bf10 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
2bf20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
2bf30 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 63  ..*/.case OP_Inc
2bf40 72 56 61 63 75 75 6d 3a 20 7b 20 20 20 20 20 20  rVacuum: {      
2bf50 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 42    /* jump */.  B
2bf60 74 72 65 65 20 2a 70 42 74 3b 0a 0a 20 20 61 73  tree *pBt;..  as
2bf70 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
2bf80 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e   && pOp->p1<db->
2bf90 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28  nDb );.  assert(
2bfa0 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26   (p->btreeMask &
2bfb0 20 28 28 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c   (((yDbMask)1)<<
2bfc0 70 4f 70 2d 3e 70 31 29 29 21 3d 30 20 29 3b 0a  pOp->p1))!=0 );.
2bfd0 20 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b    pBt = db->aDb[
2bfe0 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20 20  pOp->p1].pBt;.  
2bff0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
2c000 65 49 6e 63 72 56 61 63 75 75 6d 28 70 42 74 29  eIncrVacuum(pBt)
2c010 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49  ;.  if( rc==SQLI
2c020 54 45 5f 44 4f 4e 45 20 29 7b 0a 20 20 20 20 70  TE_DONE ){.    p
2c030 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
2c040 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45  .    rc = SQLITE
2c050 5f 4f 4b 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  _OK;.  }.  break
2c060 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f  ;.}.#endif../* O
2c070 70 63 6f 64 65 3a 20 45 78 70 69 72 65 20 50 31  pcode: Expire P1
2c080 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43   * * * *.**.** C
2c090 61 75 73 65 20 70 72 65 63 6f 6d 70 69 6c 65 64  ause precompiled
2c0a0 20 73 74 61 74 65 6d 65 6e 74 73 20 74 6f 20 62   statements to b
2c0b0 65 63 6f 6d 65 20 65 78 70 69 72 65 64 2e 20 41  ecome expired. A
2c0c0 6e 20 65 78 70 69 72 65 64 20 73 74 61 74 65 6d  n expired statem
2c0d0 65 6e 74 0a 2a 2a 20 66 61 69 6c 73 20 77 69 74  ent.** fails wit
2c0e0 68 20 61 6e 20 65 72 72 6f 72 20 63 6f 64 65 20  h an error code 
2c0f0 6f 66 20 53 51 4c 49 54 45 5f 53 43 48 45 4d 41  of SQLITE_SCHEMA
2c100 20 69 66 20 69 74 20 69 73 20 65 76 65 72 20 65   if it is ever e
2c110 78 65 63 75 74 65 64 20 0a 2a 2a 20 28 76 69 61  xecuted .** (via
2c120 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 29   sqlite3_step())
2c130 2e 0a 2a 2a 20 0a 2a 2a 20 49 66 20 50 31 20 69  ..** .** If P1 i
2c140 73 20 30 2c 20 74 68 65 6e 20 61 6c 6c 20 53 51  s 0, then all SQ
2c150 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 62 65 63  L statements bec
2c160 6f 6d 65 20 65 78 70 69 72 65 64 2e 20 49 66 20  ome expired. If 
2c170 50 31 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 0a  P1 is non-zero,.
2c180 2a 2a 20 74 68 65 6e 20 6f 6e 6c 79 20 74 68 65  ** then only the
2c190 20 63 75 72 72 65 6e 74 6c 79 20 65 78 65 63 75   currently execu
2c1a0 74 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 69  ting statement i
2c1b0 73 20 61 66 66 65 63 74 65 64 2e 20 0a 2a 2f 0a  s affected. .*/.
2c1c0 63 61 73 65 20 4f 50 5f 45 78 70 69 72 65 3a 20  case OP_Expire: 
2c1d0 7b 0a 20 20 69 66 28 20 21 70 4f 70 2d 3e 70 31  {.  if( !pOp->p1
2c1e0 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 45   ){.    sqlite3E
2c1f0 78 70 69 72 65 50 72 65 70 61 72 65 64 53 74 61  xpirePreparedSta
2c200 74 65 6d 65 6e 74 73 28 64 62 29 3b 0a 20 20 7d  tements(db);.  }
2c210 65 6c 73 65 7b 0a 20 20 20 20 70 2d 3e 65 78 70  else{.    p->exp
2c220 69 72 65 64 20 3d 20 31 3b 0a 20 20 7d 0a 20 20  ired = 1;.  }.  
2c230 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65  break;.}..#ifnde
2c240 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48  f SQLITE_OMIT_SH
2c250 41 52 45 44 5f 43 41 43 48 45 0a 2f 2a 20 4f 70  ARED_CACHE./* Op
2c260 63 6f 64 65 3a 20 54 61 62 6c 65 4c 6f 63 6b 20  code: TableLock 
2c270 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a  P1 P2 P3 P4 *.**
2c280 0a 2a 2a 20 4f 62 74 61 69 6e 20 61 20 6c 6f 63  .** Obtain a loc
2c290 6b 20 6f 6e 20 61 20 70 61 72 74 69 63 75 6c 61  k on a particula
2c2a0 72 20 74 61 62 6c 65 2e 20 54 68 69 73 20 69 6e  r table. This in
2c2b0 73 74 72 75 63 74 69 6f 6e 20 69 73 20 6f 6e 6c  struction is onl
2c2c0 79 20 75 73 65 64 20 77 68 65 6e 0a 2a 2a 20 74  y used when.** t
2c2d0 68 65 20 73 68 61 72 65 64 2d 63 61 63 68 65 20  he shared-cache 
2c2e0 66 65 61 74 75 72 65 20 69 73 20 65 6e 61 62 6c  feature is enabl
2c2f0 65 64 2e 20 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73  ed. .**.** P1 is
2c300 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68   the index of th
2c310 65 20 64 61 74 61 62 61 73 65 20 69 6e 20 73 71  e database in sq
2c320 6c 69 74 65 33 2e 61 44 62 5b 5d 20 6f 66 20 74  lite3.aDb[] of t
2c330 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 6f  he database.** o
2c340 6e 20 77 68 69 63 68 20 74 68 65 20 6c 6f 63 6b  n which the lock
2c350 20 69 73 20 61 63 71 75 69 72 65 64 2e 20 20 41   is acquired.  A
2c360 20 72 65 61 64 6c 6f 63 6b 20 69 73 20 6f 62 74   readlock is obt
2c370 61 69 6e 65 64 20 69 66 20 50 33 3d 3d 30 20 6f  ained if P3==0 o
2c380 72 0a 2a 2a 20 61 20 77 72 69 74 65 20 6c 6f 63  r.** a write loc
2c390 6b 20 69 66 20 50 33 3d 3d 31 2e 0a 2a 2a 0a 2a  k if P3==1..**.*
2c3a0 2a 20 50 32 20 63 6f 6e 74 61 69 6e 73 20 74 68  * P2 contains th
2c3b0 65 20 72 6f 6f 74 2d 70 61 67 65 20 6f 66 20 74  e root-page of t
2c3c0 68 65 20 74 61 62 6c 65 20 74 6f 20 6c 6f 63 6b  he table to lock
2c3d0 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 63 6f 6e 74 61  ..**.** P4 conta
2c3e0 69 6e 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f  ins a pointer to
2c3f0 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   the name of the
2c400 20 74 61 62 6c 65 20 62 65 69 6e 67 20 6c 6f 63   table being loc
2c410 6b 65 64 2e 20 54 68 69 73 20 69 73 20 6f 6e 6c  ked. This is onl
2c420 79 0a 2a 2a 20 75 73 65 64 20 74 6f 20 67 65 6e  y.** used to gen
2c430 65 72 61 74 65 20 61 6e 20 65 72 72 6f 72 20 6d  erate an error m
2c440 65 73 73 61 67 65 20 69 66 20 74 68 65 20 6c 6f  essage if the lo
2c450 63 6b 20 63 61 6e 6e 6f 74 20 62 65 20 6f 62 74  ck cannot be obt
2c460 61 69 6e 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ained..*/.case O
2c470 50 5f 54 61 62 6c 65 4c 6f 63 6b 3a 20 7b 0a 20  P_TableLock: {. 
2c480 20 75 38 20 69 73 57 72 69 74 65 4c 6f 63 6b 20   u8 isWriteLock 
2c490 3d 20 28 75 38 29 70 4f 70 2d 3e 70 33 3b 0a 20  = (u8)pOp->p3;. 
2c4a0 20 69 66 28 20 69 73 57 72 69 74 65 4c 6f 63 6b   if( isWriteLock
2c4b0 20 7c 7c 20 30 3d 3d 28 64 62 2d 3e 66 6c 61 67   || 0==(db->flag
2c4c0 73 26 53 51 4c 49 54 45 5f 52 65 61 64 55 6e 63  s&SQLITE_ReadUnc
2c4d0 6f 6d 6d 69 74 74 65 64 29 20 29 7b 0a 20 20 20  ommitted) ){.   
2c4e0 20 69 6e 74 20 70 31 20 3d 20 70 4f 70 2d 3e 70   int p1 = pOp->p
2c4f0 31 3b 20 0a 20 20 20 20 61 73 73 65 72 74 28 20  1; .    assert( 
2c500 70 31 3e 3d 30 20 26 26 20 70 31 3c 64 62 2d 3e  p1>=0 && p1<db->
2c510 6e 44 62 20 29 3b 0a 20 20 20 20 61 73 73 65 72  nDb );.    asser
2c520 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b  t( (p->btreeMask
2c530 20 26 20 28 28 28 79 44 62 4d 61 73 6b 29 31 29   & (((yDbMask)1)
2c540 3c 3c 70 31 29 29 21 3d 30 20 29 3b 0a 20 20 20  <<p1))!=0 );.   
2c550 20 61 73 73 65 72 74 28 20 69 73 57 72 69 74 65   assert( isWrite
2c560 4c 6f 63 6b 3d 3d 30 20 7c 7c 20 69 73 57 72 69  Lock==0 || isWri
2c570 74 65 4c 6f 63 6b 3d 3d 31 20 29 3b 0a 20 20 20  teLock==1 );.   
2c580 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
2c590 65 65 4c 6f 63 6b 54 61 62 6c 65 28 64 62 2d 3e  eeLockTable(db->
2c5a0 61 44 62 5b 70 31 5d 2e 70 42 74 2c 20 70 4f 70  aDb[p1].pBt, pOp
2c5b0 2d 3e 70 32 2c 20 69 73 57 72 69 74 65 4c 6f 63  ->p2, isWriteLoc
2c5c0 6b 29 3b 0a 20 20 20 20 69 66 28 20 28 72 63 26  k);.    if( (rc&
2c5d0 30 78 46 46 29 3d 3d 53 51 4c 49 54 45 5f 4c 4f  0xFF)==SQLITE_LO
2c5e0 43 4b 45 44 20 29 7b 0a 20 20 20 20 20 20 63 6f  CKED ){.      co
2c5f0 6e 73 74 20 63 68 61 72 20 2a 7a 20 3d 20 70 4f  nst char *z = pO
2c600 70 2d 3e 70 34 2e 7a 3b 0a 20 20 20 20 20 20 73  p->p4.z;.      s
2c610 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28  qlite3SetString(
2c620 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c  &p->zErrMsg, db,
2c630 20 22 64 61 74 61 62 61 73 65 20 74 61 62 6c 65   "database table
2c640 20 69 73 20 6c 6f 63 6b 65 64 3a 20 25 73 22 2c   is locked: %s",
2c650 20 7a 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20   z);.    }.  }. 
2c660 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
2c670 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
2c680 53 48 41 52 45 44 5f 43 41 43 48 45 20 2a 2f 0a  SHARED_CACHE */.
2c690 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2c6a0 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
2c6b0 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 42 65  E./* Opcode: VBe
2c6c0 67 69 6e 20 2a 20 2a 20 2a 20 50 34 20 2a 0a 2a  gin * * * P4 *.*
2c6d0 2a 0a 2a 2a 20 50 34 20 6d 61 79 20 62 65 20 61  *.** P4 may be a
2c6e0 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 6e 20 73   pointer to an s
2c6f0 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74 72 75  qlite3_vtab stru
2c700 63 74 75 72 65 2e 20 49 66 20 73 6f 2c 20 63 61  cture. If so, ca
2c710 6c 6c 20 74 68 65 20 0a 2a 2a 20 78 42 65 67 69  ll the .** xBegi
2c720 6e 20 6d 65 74 68 6f 64 20 66 6f 72 20 74 68 61  n method for tha
2c730 74 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41  t table..**.** A
2c740 6c 73 6f 2c 20 77 68 65 74 68 65 72 20 6f 72 20  lso, whether or 
2c750 6e 6f 74 20 50 34 20 69 73 20 73 65 74 2c 20 63  not P4 is set, c
2c760 68 65 63 6b 20 74 68 61 74 20 74 68 69 73 20 69  heck that this i
2c770 73 20 6e 6f 74 20 62 65 69 6e 67 20 63 61 6c 6c  s not being call
2c780 65 64 20 66 72 6f 6d 0a 2a 2a 20 77 69 74 68 69  ed from.** withi
2c790 6e 20 61 20 63 61 6c 6c 62 61 63 6b 20 74 6f 20  n a callback to 
2c7a0 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  a virtual table 
2c7b0 78 53 79 6e 63 28 29 20 6d 65 74 68 6f 64 2e 20  xSync() method. 
2c7c0 49 66 20 69 74 20 69 73 2c 20 74 68 65 20 65 72  If it is, the er
2c7d0 72 6f 72 0a 2a 2a 20 63 6f 64 65 20 77 69 6c 6c  ror.** code will
2c7e0 20 62 65 20 73 65 74 20 74 6f 20 53 51 4c 49 54   be set to SQLIT
2c7f0 45 5f 4c 4f 43 4b 45 44 2e 0a 2a 2f 0a 63 61 73  E_LOCKED..*/.cas
2c800 65 20 4f 50 5f 56 42 65 67 69 6e 3a 20 7b 0a 20  e OP_VBegin: {. 
2c810 20 56 54 61 62 6c 65 20 2a 70 56 54 61 62 3b 0a   VTable *pVTab;.
2c820 20 20 70 56 54 61 62 20 3d 20 70 4f 70 2d 3e 70    pVTab = pOp->p
2c830 34 2e 70 56 74 61 62 3b 0a 20 20 72 63 20 3d 20  4.pVtab;.  rc = 
2c840 73 71 6c 69 74 65 33 56 74 61 62 42 65 67 69 6e  sqlite3VtabBegin
2c850 28 64 62 2c 20 70 56 54 61 62 29 3b 0a 20 20 69  (db, pVTab);.  i
2c860 66 28 20 70 56 54 61 62 20 29 20 69 6d 70 6f 72  f( pVTab ) impor
2c870 74 56 74 61 62 45 72 72 4d 73 67 28 70 2c 20 70  tVtabErrMsg(p, p
2c880 56 54 61 62 2d 3e 70 56 74 61 62 29 3b 0a 20 20  VTab->pVtab);.  
2c890 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20  break;.}.#endif 
2c8a0 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  /* SQLITE_OMIT_V
2c8b0 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a  IRTUALTABLE */..
2c8c0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2c8d0 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
2c8e0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 43 72 65  ./* Opcode: VCre
2c8f0 61 74 65 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a  ate P1 * * P4 *.
2c900 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 74 68 65 20  **.** P4 is the 
2c910 6e 61 6d 65 20 6f 66 20 61 20 76 69 72 74 75 61  name of a virtua
2c920 6c 20 74 61 62 6c 65 20 69 6e 20 64 61 74 61 62  l table in datab
2c930 61 73 65 20 50 31 2e 20 43 61 6c 6c 20 74 68 65  ase P1. Call the
2c940 20 78 43 72 65 61 74 65 20 6d 65 74 68 6f 64 0a   xCreate method.
2c950 2a 2a 20 66 6f 72 20 74 68 61 74 20 74 61 62 6c  ** for that tabl
2c960 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 43  e..*/.case OP_VC
2c970 72 65 61 74 65 3a 20 7b 0a 20 20 72 63 20 3d 20  reate: {.  rc = 
2c980 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 43  sqlite3VtabCallC
2c990 72 65 61 74 65 28 64 62 2c 20 70 4f 70 2d 3e 70  reate(db, pOp->p
2c9a0 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 26 70  1, pOp->p4.z, &p
2c9b0 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 62 72  ->zErrMsg);.  br
2c9c0 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
2c9d0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
2c9e0 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69  TUALTABLE */..#i
2c9f0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2ca00 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f  T_VIRTUALTABLE./
2ca10 2a 20 4f 70 63 6f 64 65 3a 20 56 44 65 73 74 72  * Opcode: VDestr
2ca20 6f 79 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a  oy P1 * * P4 *.*
2ca30 2a 0a 2a 2a 20 50 34 20 69 73 20 74 68 65 20 6e  *.** P4 is the n
2ca40 61 6d 65 20 6f 66 20 61 20 76 69 72 74 75 61 6c  ame of a virtual
2ca50 20 74 61 62 6c 65 20 69 6e 20 64 61 74 61 62 61   table in databa
2ca60 73 65 20 50 31 2e 20 20 43 61 6c 6c 20 74 68 65  se P1.  Call the
2ca70 20 78 44 65 73 74 72 6f 79 20 6d 65 74 68 6f 64   xDestroy method
2ca80 0a 2a 2a 20 6f 66 20 74 68 61 74 20 74 61 62 6c  .** of that tabl
2ca90 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 44  e..*/.case OP_VD
2caa0 65 73 74 72 6f 79 3a 20 7b 0a 20 20 70 2d 3e 69  estroy: {.  p->i
2cab0 6e 56 74 61 62 4d 65 74 68 6f 64 20 3d 20 32 3b  nVtabMethod = 2;
2cac0 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
2cad0 74 61 62 43 61 6c 6c 44 65 73 74 72 6f 79 28 64  tabCallDestroy(d
2cae0 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d  b, pOp->p1, pOp-
2caf0 3e 70 34 2e 7a 29 3b 0a 20 20 70 2d 3e 69 6e 56  >p4.z);.  p->inV
2cb00 74 61 62 4d 65 74 68 6f 64 20 3d 20 30 3b 0a 20  tabMethod = 0;. 
2cb10 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
2cb20 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
2cb30 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a  VIRTUALTABLE */.
2cb40 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2cb50 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
2cb60 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 4f 70  E./* Opcode: VOp
2cb70 65 6e 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a  en P1 * * P4 *.*
2cb80 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69  *.** P4 is a poi
2cb90 6e 74 65 72 20 74 6f 20 61 20 76 69 72 74 75 61  nter to a virtua
2cba0 6c 20 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20  l table object, 
2cbb0 61 6e 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  an sqlite3_vtab 
2cbc0 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 20 50 31  structure..** P1
2cbd0 20 69 73 20 61 20 63 75 72 73 6f 72 20 6e 75 6d   is a cursor num
2cbe0 62 65 72 2e 20 20 54 68 69 73 20 6f 70 63 6f 64  ber.  This opcod
2cbf0 65 20 6f 70 65 6e 73 20 61 20 63 75 72 73 6f 72  e opens a cursor
2cc00 20 74 6f 20 74 68 65 20 76 69 72 74 75 61 6c 0a   to the virtual.
2cc10 2a 2a 20 74 61 62 6c 65 20 61 6e 64 20 73 74 6f  ** table and sto
2cc20 72 65 73 20 74 68 61 74 20 63 75 72 73 6f 72 20  res that cursor 
2cc30 69 6e 20 50 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f  in P1..*/.case O
2cc40 50 5f 56 4f 70 65 6e 3a 20 7b 0a 20 20 56 64 62  P_VOpen: {.  Vdb
2cc50 65 43 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a 20  eCursor *pCur;. 
2cc60 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75   sqlite3_vtab_cu
2cc70 72 73 6f 72 20 2a 70 56 74 61 62 43 75 72 73 6f  rsor *pVtabCurso
2cc80 72 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61  r;.  sqlite3_vta
2cc90 62 20 2a 70 56 74 61 62 3b 0a 20 20 73 71 6c 69  b *pVtab;.  sqli
2cca0 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64  te3_module *pMod
2ccb0 75 6c 65 3b 0a 0a 20 20 70 43 75 72 20 3d 20 30  ule;..  pCur = 0
2ccc0 3b 0a 20 20 70 56 74 61 62 43 75 72 73 6f 72 20  ;.  pVtabCursor 
2ccd0 3d 20 30 3b 0a 20 20 70 56 74 61 62 20 3d 20 70  = 0;.  pVtab = p
2cce0 4f 70 2d 3e 70 34 2e 70 56 74 61 62 2d 3e 70 56  Op->p4.pVtab->pV
2ccf0 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d  tab;.  pModule =
2cd00 20 28 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65   (sqlite3_module
2cd10 20 2a 29 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c   *)pVtab->pModul
2cd20 65 3b 0a 20 20 61 73 73 65 72 74 28 70 56 74 61  e;.  assert(pVta
2cd30 62 20 26 26 20 70 4d 6f 64 75 6c 65 29 3b 0a 20  b && pModule);. 
2cd40 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78   rc = pModule->x
2cd50 4f 70 65 6e 28 70 56 74 61 62 2c 20 26 70 56 74  Open(pVtab, &pVt
2cd60 61 62 43 75 72 73 6f 72 29 3b 0a 20 20 69 6d 70  abCursor);.  imp
2cd70 6f 72 74 56 74 61 62 45 72 72 4d 73 67 28 70 2c  ortVtabErrMsg(p,
2cd80 20 70 56 74 61 62 29 3b 0a 20 20 69 66 28 20 53   pVtab);.  if( S
2cd90 51 4c 49 54 45 5f 4f 4b 3d 3d 72 63 20 29 7b 0a  QLITE_OK==rc ){.
2cda0 20 20 20 20 2f 2a 20 49 6e 69 74 69 61 6c 69 7a      /* Initializ
2cdb0 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63  e sqlite3_vtab_c
2cdc0 75 72 73 6f 72 20 62 61 73 65 20 63 6c 61 73 73  ursor base class
2cdd0 20 2a 2f 0a 20 20 20 20 70 56 74 61 62 43 75 72   */.    pVtabCur
2cde0 73 6f 72 2d 3e 70 56 74 61 62 20 3d 20 70 56 74  sor->pVtab = pVt
2cdf0 61 62 3b 0a 0a 20 20 20 20 2f 2a 20 49 6e 69 74  ab;..    /* Init
2ce00 69 61 6c 69 73 65 20 76 64 62 65 20 63 75 72 73  ialise vdbe curs
2ce10 6f 72 20 6f 62 6a 65 63 74 20 2a 2f 0a 20 20 20  or object */.   
2ce20 20 70 43 75 72 20 3d 20 61 6c 6c 6f 63 61 74 65   pCur = allocate
2ce30 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70  Cursor(p, pOp->p
2ce40 31 2c 20 30 2c 20 2d 31 2c 20 30 29 3b 0a 20 20  1, 0, -1, 0);.  
2ce50 20 20 69 66 28 20 70 43 75 72 20 29 7b 0a 20 20    if( pCur ){.  
2ce60 20 20 20 20 70 43 75 72 2d 3e 70 56 74 61 62 43      pCur->pVtabC
2ce70 75 72 73 6f 72 20 3d 20 70 56 74 61 62 43 75 72  ursor = pVtabCur
2ce80 73 6f 72 3b 0a 20 20 20 20 20 20 70 43 75 72 2d  sor;.      pCur-
2ce90 3e 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62  >pModule = pVtab
2cea0 43 75 72 73 6f 72 2d 3e 70 56 74 61 62 2d 3e 70  Cursor->pVtab->p
2ceb0 4d 6f 64 75 6c 65 3b 0a 20 20 20 20 7d 65 6c 73  Module;.    }els
2cec0 65 7b 0a 20 20 20 20 20 20 64 62 2d 3e 6d 61 6c  e{.      db->mal
2ced0 6c 6f 63 46 61 69 6c 65 64 20 3d 20 31 3b 0a 20  locFailed = 1;. 
2cee0 20 20 20 20 20 70 4d 6f 64 75 6c 65 2d 3e 78 43       pModule->xC
2cef0 6c 6f 73 65 28 70 56 74 61 62 43 75 72 73 6f 72  lose(pVtabCursor
2cf00 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62  );.    }.  }.  b
2cf10 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  reak;.}.#endif /
2cf20 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  * SQLITE_OMIT_VI
2cf30 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23  RTUALTABLE */..#
2cf40 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2cf50 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
2cf60 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 46 69 6c 74  /* Opcode: VFilt
2cf70 65 72 20 50 31 20 50 32 20 50 33 20 50 34 20 2a  er P1 P2 P3 P4 *
2cf80 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 63  .**.** P1 is a c
2cf90 75 72 73 6f 72 20 6f 70 65 6e 65 64 20 75 73 69  ursor opened usi
2cfa0 6e 67 20 56 4f 70 65 6e 2e 20 20 50 32 20 69 73  ng VOpen.  P2 is
2cfb0 20 61 6e 20 61 64 64 72 65 73 73 20 74 6f 20 6a   an address to j
2cfc0 75 6d 70 20 74 6f 20 69 66 0a 2a 2a 20 74 68 65  ump to if.** the
2cfd0 20 66 69 6c 74 65 72 65 64 20 72 65 73 75 6c 74   filtered result
2cfe0 20 73 65 74 20 69 73 20 65 6d 70 74 79 2e 0a 2a   set is empty..*
2cff0 2a 0a 2a 2a 20 50 34 20 69 73 20 65 69 74 68 65  *.** P4 is eithe
2d000 72 20 4e 55 4c 4c 20 6f 72 20 61 20 73 74 72 69  r NULL or a stri
2d010 6e 67 20 74 68 61 74 20 77 61 73 20 67 65 6e 65  ng that was gene
2d020 72 61 74 65 64 20 62 79 20 74 68 65 20 78 42 65  rated by the xBe
2d030 73 74 49 6e 64 65 78 0a 2a 2a 20 6d 65 74 68 6f  stIndex.** metho
2d040 64 20 6f 66 20 74 68 65 20 6d 6f 64 75 6c 65 2e  d of the module.
2d050 20 20 54 68 65 20 69 6e 74 65 72 70 72 65 74 61    The interpreta
2d060 74 69 6f 6e 20 6f 66 20 74 68 65 20 50 34 20 73  tion of the P4 s
2d070 74 72 69 6e 67 20 69 73 20 6c 65 66 74 0a 2a 2a  tring is left.**
2d080 20 74 6f 20 74 68 65 20 6d 6f 64 75 6c 65 20 69   to the module i
2d090 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 0a 2a  mplementation..*
2d0a0 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
2d0b0 20 69 6e 76 6f 6b 65 73 20 74 68 65 20 78 46 69   invokes the xFi
2d0c0 6c 74 65 72 20 6d 65 74 68 6f 64 20 6f 6e 20 74  lter method on t
2d0d0 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
2d0e0 20 73 70 65 63 69 66 69 65 64 0a 2a 2a 20 62 79   specified.** by
2d0f0 20 50 31 2e 20 20 54 68 65 20 69 6e 74 65 67 65   P1.  The intege
2d100 72 20 71 75 65 72 79 20 70 6c 61 6e 20 70 61 72  r query plan par
2d110 61 6d 65 74 65 72 20 74 6f 20 78 46 69 6c 74 65  ameter to xFilte
2d120 72 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72  r is stored in r
2d130 65 67 69 73 74 65 72 0a 2a 2a 20 50 33 2e 20 52  egister.** P3. R
2d140 65 67 69 73 74 65 72 20 50 33 2b 31 20 73 74 6f  egister P3+1 sto
2d150 72 65 73 20 74 68 65 20 61 72 67 63 20 70 61 72  res the argc par
2d160 61 6d 65 74 65 72 20 74 6f 20 62 65 20 70 61 73  ameter to be pas
2d170 73 65 64 20 74 6f 20 74 68 65 0a 2a 2a 20 78 46  sed to the.** xF
2d180 69 6c 74 65 72 20 6d 65 74 68 6f 64 2e 20 52 65  ilter method. Re
2d190 67 69 73 74 65 72 73 20 50 33 2b 32 2e 2e 50 33  gisters P3+2..P3
2d1a0 2b 31 2b 61 72 67 63 20 61 72 65 20 74 68 65 20  +1+argc are the 
2d1b0 61 72 67 63 0a 2a 2a 20 61 64 64 69 74 69 6f 6e  argc.** addition
2d1c0 61 6c 20 70 61 72 61 6d 65 74 65 72 73 20 77 68  al parameters wh
2d1d0 69 63 68 20 61 72 65 20 70 61 73 73 65 64 20 74  ich are passed t
2d1e0 6f 0a 2a 2a 20 78 46 69 6c 74 65 72 20 61 73 20  o.** xFilter as 
2d1f0 61 72 67 76 2e 20 52 65 67 69 73 74 65 72 20 50  argv. Register P
2d200 33 2b 32 20 62 65 63 6f 6d 65 73 20 61 72 67 76  3+2 becomes argv
2d210 5b 30 5d 20 77 68 65 6e 20 70 61 73 73 65 64 20  [0] when passed 
2d220 74 6f 20 78 46 69 6c 74 65 72 2e 0a 2a 2a 0a 2a  to xFilter..**.*
2d230 2a 20 41 20 6a 75 6d 70 20 69 73 20 6d 61 64 65  * A jump is made
2d240 20 74 6f 20 50 32 20 69 66 20 74 68 65 20 72 65   to P2 if the re
2d250 73 75 6c 74 20 73 65 74 20 61 66 74 65 72 20 66  sult set after f
2d260 69 6c 74 65 72 69 6e 67 20 77 6f 75 6c 64 20 62  iltering would b
2d270 65 20 65 6d 70 74 79 2e 0a 2a 2f 0a 63 61 73 65  e empty..*/.case
2d280 20 4f 50 5f 56 46 69 6c 74 65 72 3a 20 7b 20 20   OP_VFilter: {  
2d290 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e   /* jump */.  in
2d2a0 74 20 6e 41 72 67 3b 0a 20 20 69 6e 74 20 69 51  t nArg;.  int iQ
2d2b0 75 65 72 79 3b 0a 20 20 63 6f 6e 73 74 20 73 71  uery;.  const sq
2d2c0 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d  lite3_module *pM
2d2d0 6f 64 75 6c 65 3b 0a 20 20 4d 65 6d 20 2a 70 51  odule;.  Mem *pQ
2d2e0 75 65 72 79 3b 0a 20 20 4d 65 6d 20 2a 70 41 72  uery;.  Mem *pAr
2d2f0 67 63 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74  gc;.  sqlite3_vt
2d300 61 62 5f 63 75 72 73 6f 72 20 2a 70 56 74 61 62  ab_cursor *pVtab
2d310 43 75 72 73 6f 72 3b 0a 20 20 73 71 6c 69 74 65  Cursor;.  sqlite
2d320 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20  3_vtab *pVtab;. 
2d330 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 75   VdbeCursor *pCu
2d340 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20  r;.  int res;.  
2d350 69 6e 74 20 69 3b 0a 20 20 4d 65 6d 20 2a 2a 61  int i;.  Mem **a
2d360 70 41 72 67 3b 0a 0a 20 20 70 51 75 65 72 79 20  pArg;..  pQuery 
2d370 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
2d380 3b 0a 20 20 70 41 72 67 63 20 3d 20 26 70 51 75  ;.  pArgc = &pQu
2d390 65 72 79 5b 31 5d 3b 0a 20 20 70 43 75 72 20 3d  ery[1];.  pCur =
2d3a0 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
2d3b0 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 6d 65  1];.  assert( me
2d3c0 6d 49 73 56 61 6c 69 64 28 70 51 75 65 72 79 29  mIsValid(pQuery)
2d3d0 20 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54   );.  REGISTER_T
2d3e0 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 51  RACE(pOp->p3, pQ
2d3f0 75 65 72 79 29 3b 0a 20 20 61 73 73 65 72 74 28  uery);.  assert(
2d400 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73   pCur->pVtabCurs
2d410 6f 72 20 29 3b 0a 20 20 70 56 74 61 62 43 75 72  or );.  pVtabCur
2d420 73 6f 72 20 3d 20 70 43 75 72 2d 3e 70 56 74 61  sor = pCur->pVta
2d430 62 43 75 72 73 6f 72 3b 0a 20 20 70 56 74 61 62  bCursor;.  pVtab
2d440 20 3d 20 70 56 74 61 62 43 75 72 73 6f 72 2d 3e   = pVtabCursor->
2d450 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65  pVtab;.  pModule
2d460 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c   = pVtab->pModul
2d470 65 3b 0a 0a 20 20 2f 2a 20 47 72 61 62 20 74 68  e;..  /* Grab th
2d480 65 20 69 6e 64 65 78 20 6e 75 6d 62 65 72 20 61  e index number a
2d490 6e 64 20 61 72 67 63 20 70 61 72 61 6d 65 74 65  nd argc paramete
2d4a0 72 73 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  rs */.  assert( 
2d4b0 28 70 51 75 65 72 79 2d 3e 66 6c 61 67 73 26 4d  (pQuery->flags&M
2d4c0 45 4d 5f 49 6e 74 29 21 3d 30 20 26 26 20 70 41  EM_Int)!=0 && pA
2d4d0 72 67 63 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d 5f  rgc->flags==MEM_
2d4e0 49 6e 74 20 29 3b 0a 20 20 6e 41 72 67 20 3d 20  Int );.  nArg = 
2d4f0 28 69 6e 74 29 70 41 72 67 63 2d 3e 75 2e 69 3b  (int)pArgc->u.i;
2d500 0a 20 20 69 51 75 65 72 79 20 3d 20 28 69 6e 74  .  iQuery = (int
2d510 29 70 51 75 65 72 79 2d 3e 75 2e 69 3b 0a 0a 20  )pQuery->u.i;.. 
2d520 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 78   /* Invoke the x
2d530 46 69 6c 74 65 72 20 6d 65 74 68 6f 64 20 2a 2f  Filter method */
2d540 0a 20 20 7b 0a 20 20 20 20 72 65 73 20 3d 20 30  .  {.    res = 0
2d550 3b 0a 20 20 20 20 61 70 41 72 67 20 3d 20 70 2d  ;.    apArg = p-
2d560 3e 61 70 41 72 67 3b 0a 20 20 20 20 66 6f 72 28  >apArg;.    for(
2d570 69 20 3d 20 30 3b 20 69 3c 6e 41 72 67 3b 20 69  i = 0; i<nArg; i
2d580 2b 2b 29 7b 0a 20 20 20 20 20 20 61 70 41 72 67  ++){.      apArg
2d590 5b 69 5d 20 3d 20 26 70 41 72 67 63 5b 69 2b 31  [i] = &pArgc[i+1
2d5a0 5d 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ];.      sqlite3
2d5b0 56 64 62 65 4d 65 6d 53 74 6f 72 65 54 79 70 65  VdbeMemStoreType
2d5c0 28 61 70 41 72 67 5b 69 5d 29 3b 0a 20 20 20 20  (apArg[i]);.    
2d5d0 7d 0a 0a 20 20 20 20 70 2d 3e 69 6e 56 74 61 62  }..    p->inVtab
2d5e0 4d 65 74 68 6f 64 20 3d 20 31 3b 0a 20 20 20 20  Method = 1;.    
2d5f0 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 46  rc = pModule->xF
2d600 69 6c 74 65 72 28 70 56 74 61 62 43 75 72 73 6f  ilter(pVtabCurso
2d610 72 2c 20 69 51 75 65 72 79 2c 20 70 4f 70 2d 3e  r, iQuery, pOp->
2d620 70 34 2e 7a 2c 20 6e 41 72 67 2c 20 61 70 41 72  p4.z, nArg, apAr
2d630 67 29 3b 0a 20 20 20 20 70 2d 3e 69 6e 56 74 61  g);.    p->inVta
2d640 62 4d 65 74 68 6f 64 20 3d 20 30 3b 0a 20 20 20  bMethod = 0;.   
2d650 20 69 6d 70 6f 72 74 56 74 61 62 45 72 72 4d 73   importVtabErrMs
2d660 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 20  g(p, pVtab);.   
2d670 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
2d680 4f 4b 20 29 7b 0a 20 20 20 20 20 20 72 65 73 20  OK ){.      res 
2d690 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 45 6f 66 28  = pModule->xEof(
2d6a0 70 56 74 61 62 43 75 72 73 6f 72 29 3b 0a 20 20  pVtabCursor);.  
2d6b0 20 20 7d 0a 0a 20 20 20 20 69 66 28 20 72 65 73    }..    if( res
2d6c0 20 29 7b 0a 20 20 20 20 20 20 70 63 20 3d 20 70   ){.      pc = p
2d6d0 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20  Op->p2 - 1;.    
2d6e0 7d 0a 20 20 7d 0a 20 20 70 43 75 72 2d 3e 6e 75  }.  }.  pCur->nu
2d6f0 6c 6c 52 6f 77 20 3d 20 30 3b 0a 0a 20 20 62 72  llRow = 0;..  br
2d700 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
2d710 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
2d720 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69  TUALTABLE */..#i
2d730 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2d740 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f  T_VIRTUALTABLE./
2d750 2a 20 4f 70 63 6f 64 65 3a 20 56 43 6f 6c 75 6d  * Opcode: VColum
2d760 6e 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  n P1 P2 P3 * *.*
2d770 2a 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 76  *.** Store the v
2d780 61 6c 75 65 20 6f 66 20 74 68 65 20 50 32 2d 74  alue of the P2-t
2d790 68 20 63 6f 6c 75 6d 6e 20 6f 66 0a 2a 2a 20 74  h column of.** t
2d7a0 68 65 20 72 6f 77 20 6f 66 20 74 68 65 20 76 69  he row of the vi
2d7b0 72 74 75 61 6c 2d 74 61 62 6c 65 20 74 68 61 74  rtual-table that
2d7c0 20 74 68 65 20 0a 2a 2a 20 50 31 20 63 75 72 73   the .** P1 curs
2d7d0 6f 72 20 69 73 20 70 6f 69 6e 74 69 6e 67 20 74  or is pointing t
2d7e0 6f 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  o into register 
2d7f0 50 33 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56  P3..*/.case OP_V
2d800 43 6f 6c 75 6d 6e 3a 20 7b 0a 20 20 73 71 6c 69  Column: {.  sqli
2d810 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b  te3_vtab *pVtab;
2d820 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33  .  const sqlite3
2d830 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65  _module *pModule
2d840 3b 0a 20 20 4d 65 6d 20 2a 70 44 65 73 74 3b 0a  ;.  Mem *pDest;.
2d850 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78    sqlite3_contex
2d860 74 20 73 43 6f 6e 74 65 78 74 3b 0a 0a 20 20 56  t sContext;..  V
2d870 64 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72 20  dbeCursor *pCur 
2d880 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
2d890 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
2d8a0 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72  Cur->pVtabCursor
2d8b0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
2d8c0 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p3>0 && pOp->
2d8d0 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20  p3<=p->nMem );. 
2d8e0 20 70 44 65 73 74 20 3d 20 26 61 4d 65 6d 5b 70   pDest = &aMem[p
2d8f0 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41 62  Op->p3];.  memAb
2d900 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70  outToChange(p, p
2d910 44 65 73 74 29 3b 0a 20 20 69 66 28 20 70 43 75  Dest);.  if( pCu
2d920 72 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20  r->nullRow ){.  
2d930 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
2d940 53 65 74 4e 75 6c 6c 28 70 44 65 73 74 29 3b 0a  SetNull(pDest);.
2d950 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20      break;.  }. 
2d960 20 70 56 74 61 62 20 3d 20 70 43 75 72 2d 3e 70   pVtab = pCur->p
2d970 56 74 61 62 43 75 72 73 6f 72 2d 3e 70 56 74 61  VtabCursor->pVta
2d980 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70  b;.  pModule = p
2d990 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20  Vtab->pModule;. 
2d9a0 20 61 73 73 65 72 74 28 20 70 4d 6f 64 75 6c 65   assert( pModule
2d9b0 2d 3e 78 43 6f 6c 75 6d 6e 20 29 3b 0a 20 20 6d  ->xColumn );.  m
2d9c0 65 6d 73 65 74 28 26 73 43 6f 6e 74 65 78 74 2c  emset(&sContext,
2d9d0 20 30 2c 20 73 69 7a 65 6f 66 28 73 43 6f 6e 74   0, sizeof(sCont
2d9e0 65 78 74 29 29 3b 0a 0a 20 20 2f 2a 20 54 68 65  ext));..  /* The
2d9f0 20 6f 75 74 70 75 74 20 63 65 6c 6c 20 6d 61 79   output cell may
2da00 20 61 6c 72 65 61 64 79 20 68 61 76 65 20 61 20   already have a 
2da10 62 75 66 66 65 72 20 61 6c 6c 6f 63 61 74 65 64  buffer allocated
2da20 2e 20 4d 6f 76 65 0a 20 20 2a 2a 20 74 68 65 20  . Move.  ** the 
2da30 63 75 72 72 65 6e 74 20 63 6f 6e 74 65 6e 74 73  current contents
2da40 20 74 6f 20 73 43 6f 6e 74 65 78 74 2e 73 20 73   to sContext.s s
2da50 6f 20 69 6e 20 63 61 73 65 20 74 68 65 20 75 73  o in case the us
2da60 65 72 2d 66 75 6e 63 74 69 6f 6e 20 0a 20 20 2a  er-function .  *
2da70 2a 20 63 61 6e 20 75 73 65 20 74 68 65 20 61 6c  * can use the al
2da80 72 65 61 64 79 20 61 6c 6c 6f 63 61 74 65 64 20  ready allocated 
2da90 62 75 66 66 65 72 20 69 6e 73 74 65 61 64 20 6f  buffer instead o
2daa0 66 20 61 6c 6c 6f 63 61 74 69 6e 67 20 61 20 0a  f allocating a .
2dab0 20 20 2a 2a 20 6e 65 77 20 6f 6e 65 2e 0a 20 20    ** new one..  
2dac0 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  */.  sqlite3Vdbe
2dad0 4d 65 6d 4d 6f 76 65 28 26 73 43 6f 6e 74 65 78  MemMove(&sContex
2dae0 74 2e 73 2c 20 70 44 65 73 74 29 3b 0a 20 20 4d  t.s, pDest);.  M
2daf0 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 26 73  emSetTypeFlag(&s
2db00 43 6f 6e 74 65 78 74 2e 73 2c 20 4d 45 4d 5f 4e  Context.s, MEM_N
2db10 75 6c 6c 29 3b 0a 0a 20 20 72 63 20 3d 20 70 4d  ull);..  rc = pM
2db20 6f 64 75 6c 65 2d 3e 78 43 6f 6c 75 6d 6e 28 70  odule->xColumn(p
2db30 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72  Cur->pVtabCursor
2db40 2c 20 26 73 43 6f 6e 74 65 78 74 2c 20 70 4f 70  , &sContext, pOp
2db50 2d 3e 70 32 29 3b 0a 20 20 69 6d 70 6f 72 74 56  ->p2);.  importV
2db60 74 61 62 45 72 72 4d 73 67 28 70 2c 20 70 56 74  tabErrMsg(p, pVt
2db70 61 62 29 3b 0a 20 20 69 66 28 20 73 43 6f 6e 74  ab);.  if( sCont
2db80 65 78 74 2e 69 73 45 72 72 6f 72 20 29 7b 0a 20  ext.isError ){. 
2db90 20 20 20 72 63 20 3d 20 73 43 6f 6e 74 65 78 74     rc = sContext
2dba0 2e 69 73 45 72 72 6f 72 3b 0a 20 20 7d 0a 0a 20  .isError;.  }.. 
2dbb0 20 2f 2a 20 43 6f 70 79 20 74 68 65 20 72 65 73   /* Copy the res
2dbc0 75 6c 74 20 6f 66 20 74 68 65 20 66 75 6e 63 74  ult of the funct
2dbd0 69 6f 6e 20 74 6f 20 74 68 65 20 50 33 20 72 65  ion to the P3 re
2dbe0 67 69 73 74 65 72 2e 20 57 65 0a 20 20 2a 2a 20  gister. We.  ** 
2dbf0 64 6f 20 74 68 69 73 20 72 65 67 61 72 64 6c 65  do this regardle
2dc00 73 73 20 6f 66 20 77 68 65 74 68 65 72 20 6f 72  ss of whether or
2dc10 20 6e 6f 74 20 61 6e 20 65 72 72 6f 72 20 6f 63   not an error oc
2dc20 63 75 72 72 65 64 20 74 6f 20 65 6e 73 75 72 65  curred to ensure
2dc30 20 61 6e 79 0a 20 20 2a 2a 20 64 79 6e 61 6d 69   any.  ** dynami
2dc40 63 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e 20  c allocation in 
2dc50 73 43 6f 6e 74 65 78 74 2e 73 20 28 61 20 4d 65  sContext.s (a Me
2dc60 6d 20 73 74 72 75 63 74 29 20 69 73 20 20 72 65  m struct) is  re
2dc70 6c 65 61 73 65 64 2e 0a 20 20 2a 2f 0a 20 20 73  leased..  */.  s
2dc80 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
2dc90 45 6e 63 6f 64 69 6e 67 28 26 73 43 6f 6e 74 65  Encoding(&sConte
2dca0 78 74 2e 73 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  xt.s, encoding);
2dcb0 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
2dcc0 6d 4d 6f 76 65 28 70 44 65 73 74 2c 20 26 73 43  mMove(pDest, &sC
2dcd0 6f 6e 74 65 78 74 2e 73 29 3b 0a 20 20 52 45 47  ontext.s);.  REG
2dce0 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
2dcf0 3e 70 33 2c 20 70 44 65 73 74 29 3b 0a 20 20 55  >p3, pDest);.  U
2dd00 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49  PDATE_MAX_BLOBSI
2dd10 5a 45 28 70 44 65 73 74 29 3b 0a 0a 20 20 69 66  ZE(pDest);..  if
2dd20 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  ( sqlite3VdbeMem
2dd30 54 6f 6f 42 69 67 28 70 44 65 73 74 29 20 29 7b  TooBig(pDest) ){
2dd40 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69  .    goto too_bi
2dd50 67 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  g;.  }.  break;.
2dd60 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
2dd70 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
2dd80 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  ABLE */..#ifndef
2dd90 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
2dda0 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63  TUALTABLE./* Opc
2ddb0 6f 64 65 3a 20 56 4e 65 78 74 20 50 31 20 50 32  ode: VNext P1 P2
2ddc0 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 64 76   * * *.**.** Adv
2ddd0 61 6e 63 65 20 76 69 72 74 75 61 6c 20 74 61 62  ance virtual tab
2dde0 6c 65 20 50 31 20 74 6f 20 74 68 65 20 6e 65 78  le P1 to the nex
2ddf0 74 20 72 6f 77 20 69 6e 20 69 74 73 20 72 65 73  t row in its res
2de00 75 6c 74 20 73 65 74 20 61 6e 64 0a 2a 2a 20 6a  ult set and.** j
2de10 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69  ump to instructi
2de20 6f 6e 20 50 32 2e 20 20 4f 72 2c 20 69 66 20 74  on P2.  Or, if t
2de30 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
2de40 20 68 61 73 20 72 65 61 63 68 65 64 0a 2a 2a 20   has reached.** 
2de50 74 68 65 20 65 6e 64 20 6f 66 20 69 74 73 20 72  the end of its r
2de60 65 73 75 6c 74 20 73 65 74 2c 20 74 68 65 6e 20  esult set, then 
2de70 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  fall through to 
2de80 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63  the next instruc
2de90 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  tion..*/.case OP
2dea0 5f 56 4e 65 78 74 3a 20 7b 20 20 20 2f 2a 20 6a  _VNext: {   /* j
2deb0 75 6d 70 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  ump */.  sqlite3
2dec0 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20  _vtab *pVtab;.  
2ded0 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f  const sqlite3_mo
2dee0 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20  dule *pModule;. 
2def0 20 69 6e 74 20 72 65 73 3b 0a 20 20 56 64 62 65   int res;.  Vdbe
2df00 43 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a 0a 20  Cursor *pCur;.. 
2df10 20 72 65 73 20 3d 20 30 3b 0a 20 20 70 43 75 72   res = 0;.  pCur
2df20 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
2df30 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
2df40 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f  pCur->pVtabCurso
2df50 72 20 29 3b 0a 20 20 69 66 28 20 70 43 75 72 2d  r );.  if( pCur-
2df60 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20  >nullRow ){.    
2df70 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 56 74  break;.  }.  pVt
2df80 61 62 20 3d 20 70 43 75 72 2d 3e 70 56 74 61 62  ab = pCur->pVtab
2df90 43 75 72 73 6f 72 2d 3e 70 56 74 61 62 3b 0a 20  Cursor->pVtab;. 
2dfa0 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62   pModule = pVtab
2dfb0 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 61 73 73  ->pModule;.  ass
2dfc0 65 72 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 4e  ert( pModule->xN
2dfd0 65 78 74 20 29 3b 0a 0a 20 20 2f 2a 20 49 6e 76  ext );..  /* Inv
2dfe0 6f 6b 65 20 74 68 65 20 78 4e 65 78 74 28 29 20  oke the xNext() 
2dff0 6d 65 74 68 6f 64 20 6f 66 20 74 68 65 20 6d 6f  method of the mo
2e000 64 75 6c 65 2e 20 54 68 65 72 65 20 69 73 20 6e  dule. There is n
2e010 6f 20 77 61 79 20 66 6f 72 20 74 68 65 0a 20 20  o way for the.  
2e020 2a 2a 20 75 6e 64 65 72 6c 79 69 6e 67 20 69 6d  ** underlying im
2e030 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 74 6f 20  plementation to 
2e040 72 65 74 75 72 6e 20 61 6e 20 65 72 72 6f 72 20  return an error 
2e050 69 66 20 6f 6e 65 20 6f 63 63 75 72 73 20 64 75  if one occurs du
2e060 72 69 6e 67 0a 20 20 2a 2a 20 78 4e 65 78 74 28  ring.  ** xNext(
2e070 29 2e 20 49 6e 73 74 65 61 64 2c 20 69 66 20 61  ). Instead, if a
2e080 6e 20 65 72 72 6f 72 20 6f 63 63 75 72 73 2c 20  n error occurs, 
2e090 74 72 75 65 20 69 73 20 72 65 74 75 72 6e 65 64  true is returned
2e0a0 20 28 69 6e 64 69 63 61 74 69 6e 67 20 74 68 61   (indicating tha
2e0b0 74 20 0a 20 20 2a 2a 20 64 61 74 61 20 69 73 20  t .  ** data is 
2e0c0 61 76 61 69 6c 61 62 6c 65 29 20 61 6e 64 20 74  available) and t
2e0d0 68 65 20 65 72 72 6f 72 20 63 6f 64 65 20 72 65  he error code re
2e0e0 74 75 72 6e 65 64 20 77 68 65 6e 20 78 43 6f 6c  turned when xCol
2e0f0 75 6d 6e 20 6f 72 0a 20 20 2a 2a 20 73 6f 6d 65  umn or.  ** some
2e100 20 6f 74 68 65 72 20 6d 65 74 68 6f 64 20 69 73   other method is
2e110 20 6e 65 78 74 20 69 6e 76 6f 6b 65 64 20 6f 6e   next invoked on
2e120 20 74 68 65 20 73 61 76 65 20 76 69 72 74 75 61   the save virtua
2e130 6c 20 74 61 62 6c 65 20 63 75 72 73 6f 72 2e 0a  l table cursor..
2e140 20 20 2a 2f 0a 20 20 70 2d 3e 69 6e 56 74 61 62    */.  p->inVtab
2e150 4d 65 74 68 6f 64 20 3d 20 31 3b 0a 20 20 72 63  Method = 1;.  rc
2e160 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 4e 65 78   = pModule->xNex
2e170 74 28 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72  t(pCur->pVtabCur
2e180 73 6f 72 29 3b 0a 20 20 70 2d 3e 69 6e 56 74 61  sor);.  p->inVta
2e190 62 4d 65 74 68 6f 64 20 3d 20 30 3b 0a 20 20 69  bMethod = 0;.  i
2e1a0 6d 70 6f 72 74 56 74 61 62 45 72 72 4d 73 67 28  mportVtabErrMsg(
2e1b0 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 69 66 28  p, pVtab);.  if(
2e1c0 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
2e1d0 7b 0a 20 20 20 20 72 65 73 20 3d 20 70 4d 6f 64  {.    res = pMod
2e1e0 75 6c 65 2d 3e 78 45 6f 66 28 70 43 75 72 2d 3e  ule->xEof(pCur->
2e1f0 70 56 74 61 62 43 75 72 73 6f 72 29 3b 0a 20 20  pVtabCursor);.  
2e200 7d 0a 0a 20 20 69 66 28 20 21 72 65 73 20 29 7b  }..  if( !res ){
2e210 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 65 72 65  .    /* If there
2e220 20 69 73 20 64 61 74 61 2c 20 6a 75 6d 70 20 74   is data, jump t
2e230 6f 20 50 32 20 2a 2f 0a 20 20 20 20 70 63 20 3d  o P2 */.    pc =
2e240 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
2e250 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  }.  break;.}.#en
2e260 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
2e270 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20  IT_VIRTUALTABLE 
2e280 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
2e290 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
2e2a0 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ABLE./* Opcode: 
2e2b0 56 52 65 6e 61 6d 65 20 50 31 20 2a 20 2a 20 50  VRename P1 * * P
2e2c0 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20  4 *.**.** P4 is 
2e2d0 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 76  a pointer to a v
2e2e0 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6f 62 6a  irtual table obj
2e2f0 65 63 74 2c 20 61 6e 20 73 71 6c 69 74 65 33 5f  ect, an sqlite3_
2e300 76 74 61 62 20 73 74 72 75 63 74 75 72 65 2e 0a  vtab structure..
2e310 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69  ** This opcode i
2e320 6e 76 6f 6b 65 73 20 74 68 65 20 63 6f 72 72 65  nvokes the corre
2e330 73 70 6f 6e 64 69 6e 67 20 78 52 65 6e 61 6d 65  sponding xRename
2e340 20 6d 65 74 68 6f 64 2e 20 54 68 65 20 76 61 6c   method. The val
2e350 75 65 0a 2a 2a 20 69 6e 20 72 65 67 69 73 74 65  ue.** in registe
2e360 72 20 50 31 20 69 73 20 70 61 73 73 65 64 20 61  r P1 is passed a
2e370 73 20 74 68 65 20 7a 4e 61 6d 65 20 61 72 67 75  s the zName argu
2e380 6d 65 6e 74 20 74 6f 20 74 68 65 20 78 52 65 6e  ment to the xRen
2e390 61 6d 65 20 6d 65 74 68 6f 64 2e 0a 2a 2f 0a 63  ame method..*/.c
2e3a0 61 73 65 20 4f 50 5f 56 52 65 6e 61 6d 65 3a 20  ase OP_VRename: 
2e3b0 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62  {.  sqlite3_vtab
2e3c0 20 2a 70 56 74 61 62 3b 0a 20 20 4d 65 6d 20 2a   *pVtab;.  Mem *
2e3d0 70 4e 61 6d 65 3b 0a 0a 20 20 70 56 74 61 62 20  pName;..  pVtab 
2e3e0 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62 2d  = pOp->p4.pVtab-
2e3f0 3e 70 56 74 61 62 3b 0a 20 20 70 4e 61 6d 65 20  >pVtab;.  pName 
2e400 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
2e410 3b 0a 20 20 61 73 73 65 72 74 28 20 70 56 74 61  ;.  assert( pVta
2e420 62 2d 3e 70 4d 6f 64 75 6c 65 2d 3e 78 52 65 6e  b->pModule->xRen
2e430 61 6d 65 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ame );.  assert(
2e440 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 4e 61 6d   memIsValid(pNam
2e450 65 29 20 29 3b 0a 20 20 52 45 47 49 53 54 45 52  e) );.  REGISTER
2e460 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20  _TRACE(pOp->p1, 
2e470 70 4e 61 6d 65 29 3b 0a 20 20 61 73 73 65 72 74  pName);.  assert
2e480 28 20 70 4e 61 6d 65 2d 3e 66 6c 61 67 73 20 26  ( pName->flags &
2e490 20 4d 45 4d 5f 53 74 72 20 29 3b 0a 20 20 72 63   MEM_Str );.  rc
2e4a0 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c   = pVtab->pModul
2e4b0 65 2d 3e 78 52 65 6e 61 6d 65 28 70 56 74 61 62  e->xRename(pVtab
2e4c0 2c 20 70 4e 61 6d 65 2d 3e 7a 29 3b 0a 20 20 69  , pName->z);.  i
2e4d0 6d 70 6f 72 74 56 74 61 62 45 72 72 4d 73 67 28  mportVtabErrMsg(
2e4e0 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 70 2d 3e  p, pVtab);.  p->
2e4f0 65 78 70 69 72 65 64 20 3d 20 30 3b 0a 0a 20 20  expired = 0;..  
2e500 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a  break;.}.#endif.
2e510 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2e520 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
2e530 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 55 70  E./* Opcode: VUp
2e540 64 61 74 65 20 50 31 20 50 32 20 50 33 20 50 34  date P1 P2 P3 P4
2e550 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61   *.**.** P4 is a
2e560 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 76 69   pointer to a vi
2e570 72 74 75 61 6c 20 74 61 62 6c 65 20 6f 62 6a 65  rtual table obje
2e580 63 74 2c 20 61 6e 20 73 71 6c 69 74 65 33 5f 76  ct, an sqlite3_v
2e590 74 61 62 20 73 74 72 75 63 74 75 72 65 2e 0a 2a  tab structure..*
2e5a0 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 6e  * This opcode in
2e5b0 76 6f 6b 65 73 20 74 68 65 20 63 6f 72 72 65 73  vokes the corres
2e5c0 70 6f 6e 64 69 6e 67 20 78 55 70 64 61 74 65 20  ponding xUpdate 
2e5d0 6d 65 74 68 6f 64 2e 20 50 32 20 76 61 6c 75 65  method. P2 value
2e5e0 73 0a 2a 2a 20 61 72 65 20 63 6f 6e 74 69 67 75  s.** are contigu
2e5f0 6f 75 73 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73  ous memory cells
2e600 20 73 74 61 72 74 69 6e 67 20 61 74 20 50 33 20   starting at P3 
2e610 74 6f 20 70 61 73 73 20 74 6f 20 74 68 65 20 78  to pass to the x
2e620 55 70 64 61 74 65 20 0a 2a 2a 20 69 6e 76 6f 63  Update .** invoc
2e630 61 74 69 6f 6e 2e 20 54 68 65 20 76 61 6c 75 65  ation. The value
2e640 20 69 6e 20 72 65 67 69 73 74 65 72 20 28 50 33   in register (P3
2e650 2b 50 32 2d 31 29 20 63 6f 72 72 65 73 70 6f 6e  +P2-1) correspon
2e660 64 73 20 74 6f 20 74 68 65 20 0a 2a 2a 20 70 32  ds to the .** p2
2e670 74 68 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68  th element of th
2e680 65 20 61 72 67 76 20 61 72 72 61 79 20 70 61 73  e argv array pas
2e690 73 65 64 20 74 6f 20 78 55 70 64 61 74 65 2e 0a  sed to xUpdate..
2e6a0 2a 2a 0a 2a 2a 20 54 68 65 20 78 55 70 64 61 74  **.** The xUpdat
2e6b0 65 20 6d 65 74 68 6f 64 20 77 69 6c 6c 20 64 6f  e method will do
2e6c0 20 61 20 44 45 4c 45 54 45 20 6f 72 20 61 6e 20   a DELETE or an 
2e6d0 49 4e 53 45 52 54 20 6f 72 20 62 6f 74 68 2e 0a  INSERT or both..
2e6e0 2a 2a 20 54 68 65 20 61 72 67 76 5b 30 5d 20 65  ** The argv[0] e
2e6f0 6c 65 6d 65 6e 74 20 28 77 68 69 63 68 20 63 6f  lement (which co
2e700 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 6d 65 6d  rresponds to mem
2e710 6f 72 79 20 63 65 6c 6c 20 50 33 29 0a 2a 2a 20  ory cell P3).** 
2e720 69 73 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20  is the rowid of 
2e730 61 20 72 6f 77 20 74 6f 20 64 65 6c 65 74 65 2e  a row to delete.
2e740 20 20 49 66 20 61 72 67 76 5b 30 5d 20 69 73 20    If argv[0] is 
2e750 4e 55 4c 4c 20 74 68 65 6e 20 6e 6f 20 0a 2a 2a  NULL then no .**
2e760 20 64 65 6c 65 74 69 6f 6e 20 6f 63 63 75 72 73   deletion occurs
2e770 2e 20 20 54 68 65 20 61 72 67 76 5b 31 5d 20 65  .  The argv[1] e
2e780 6c 65 6d 65 6e 74 20 69 73 20 74 68 65 20 72 6f  lement is the ro
2e790 77 69 64 20 6f 66 20 74 68 65 20 6e 65 77 20 0a  wid of the new .
2e7a0 2a 2a 20 72 6f 77 2e 20 20 54 68 69 73 20 63 61  ** row.  This ca
2e7b0 6e 20 62 65 20 4e 55 4c 4c 20 74 6f 20 68 61 76  n be NULL to hav
2e7c0 65 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61  e the virtual ta
2e7d0 62 6c 65 20 73 65 6c 65 63 74 20 74 68 65 20 6e  ble select the n
2e7e0 65 77 20 0a 2a 2a 20 72 6f 77 69 64 20 66 6f 72  ew .** rowid for
2e7f0 20 69 74 73 65 6c 66 2e 20 20 54 68 65 20 73 75   itself.  The su
2e800 62 73 65 71 75 65 6e 74 20 65 6c 65 6d 65 6e 74  bsequent element
2e810 73 20 69 6e 20 74 68 65 20 61 72 72 61 79 20 61  s in the array a
2e820 72 65 20 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65  re .** the value
2e830 73 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  s of columns in 
2e840 74 68 65 20 6e 65 77 20 72 6f 77 2e 0a 2a 2a 0a  the new row..**.
2e850 2a 2a 20 49 66 20 50 32 3d 3d 31 20 74 68 65 6e  ** If P2==1 then
2e860 20 6e 6f 20 69 6e 73 65 72 74 20 69 73 20 70 65   no insert is pe
2e870 72 66 6f 72 6d 65 64 2e 20 20 61 72 67 76 5b 30  rformed.  argv[0
2e880 5d 20 69 73 20 74 68 65 20 72 6f 77 69 64 20 6f  ] is the rowid o
2e890 66 0a 2a 2a 20 61 20 72 6f 77 20 74 6f 20 64 65  f.** a row to de
2e8a0 6c 65 74 65 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69  lete..**.** P1 i
2e8b0 73 20 61 20 62 6f 6f 6c 65 61 6e 20 66 6c 61 67  s a boolean flag
2e8c0 2e 20 49 66 20 69 74 20 69 73 20 73 65 74 20 74  . If it is set t
2e8d0 6f 20 74 72 75 65 20 61 6e 64 20 74 68 65 20 78  o true and the x
2e8e0 55 70 64 61 74 65 20 63 61 6c 6c 0a 2a 2a 20 69  Update call.** i
2e8f0 73 20 73 75 63 63 65 73 73 66 75 6c 2c 20 74 68  s successful, th
2e900 65 6e 20 74 68 65 20 76 61 6c 75 65 20 72 65 74  en the value ret
2e910 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33  urned by sqlite3
2e920 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77  _last_insert_row
2e930 69 64 28 29 20 0a 2a 2a 20 69 73 20 73 65 74 20  id() .** is set 
2e940 74 6f 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  to the value of 
2e950 74 68 65 20 72 6f 77 69 64 20 66 6f 72 20 74 68  the rowid for th
2e960 65 20 72 6f 77 20 6a 75 73 74 20 69 6e 73 65 72  e row just inser
2e970 74 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ted..*/.case OP_
2e980 56 55 70 64 61 74 65 3a 20 7b 0a 20 20 73 71 6c  VUpdate: {.  sql
2e990 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62  ite3_vtab *pVtab
2e9a0 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75  ;.  sqlite3_modu
2e9b0 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 69  le *pModule;.  i
2e9c0 6e 74 20 6e 41 72 67 3b 0a 20 20 69 6e 74 20 69  nt nArg;.  int i
2e9d0 3b 0a 20 20 73 71 6c 69 74 65 5f 69 6e 74 36 34  ;.  sqlite_int64
2e9e0 20 72 6f 77 69 64 3b 0a 20 20 4d 65 6d 20 2a 2a   rowid;.  Mem **
2e9f0 61 70 41 72 67 3b 0a 20 20 4d 65 6d 20 2a 70 58  apArg;.  Mem *pX
2ea00 3b 0a 0a 20 20 70 56 74 61 62 20 3d 20 70 4f 70  ;..  pVtab = pOp
2ea10 2d 3e 70 34 2e 70 56 74 61 62 2d 3e 70 56 74 61  ->p4.pVtab->pVta
2ea20 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20 28  b;.  pModule = (
2ea30 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a  sqlite3_module *
2ea40 29 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b  )pVtab->pModule;
2ea50 0a 20 20 6e 41 72 67 20 3d 20 70 4f 70 2d 3e 70  .  nArg = pOp->p
2ea60 32 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  2;.  assert( pOp
2ea70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 56 54 41  ->p4type==P4_VTA
2ea80 42 20 29 3b 0a 20 20 69 66 28 20 41 4c 57 41 59  B );.  if( ALWAY
2ea90 53 28 70 4d 6f 64 75 6c 65 2d 3e 78 55 70 64 61  S(pModule->xUpda
2eaa0 74 65 29 20 29 7b 0a 20 20 20 20 61 70 41 72 67  te) ){.    apArg
2eab0 20 3d 20 70 2d 3e 61 70 41 72 67 3b 0a 20 20 20   = p->apArg;.   
2eac0 20 70 58 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d   pX = &aMem[pOp-
2ead0 3e 70 33 5d 3b 0a 20 20 20 20 66 6f 72 28 69 3d  >p3];.    for(i=
2eae0 30 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b  0; i<nArg; i++){
2eaf0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d  .      assert( m
2eb00 65 6d 49 73 56 61 6c 69 64 28 70 58 29 20 29 3b  emIsValid(pX) );
2eb10 0a 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74 54  .      memAboutT
2eb20 6f 43 68 61 6e 67 65 28 70 2c 20 70 58 29 3b 0a  oChange(p, pX);.
2eb30 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
2eb40 65 4d 65 6d 53 74 6f 72 65 54 79 70 65 28 70 58  eMemStoreType(pX
2eb50 29 3b 0a 20 20 20 20 20 20 61 70 41 72 67 5b 69  );.      apArg[i
2eb60 5d 20 3d 20 70 58 3b 0a 20 20 20 20 20 20 70 58  ] = pX;.      pX
2eb70 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72 63  ++;.    }.    rc
2eb80 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 55 70 64   = pModule->xUpd
2eb90 61 74 65 28 70 56 74 61 62 2c 20 6e 41 72 67 2c  ate(pVtab, nArg,
2eba0 20 61 70 41 72 67 2c 20 26 72 6f 77 69 64 29 3b   apArg, &rowid);
2ebb0 0a 20 20 20 20 69 6d 70 6f 72 74 56 74 61 62 45  .    importVtabE
2ebc0 72 72 4d 73 67 28 70 2c 20 70 56 74 61 62 29 3b  rrMsg(p, pVtab);
2ebd0 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  .    if( rc==SQL
2ebe0 49 54 45 5f 4f 4b 20 26 26 20 70 4f 70 2d 3e 70  ITE_OK && pOp->p
2ebf0 31 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72  1 ){.      asser
2ec00 74 28 20 6e 41 72 67 3e 31 20 26 26 20 61 70 41  t( nArg>1 && apA
2ec10 72 67 5b 30 5d 20 26 26 20 28 61 70 41 72 67 5b  rg[0] && (apArg[
2ec20 30 5d 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 4e 75  0]->flags&MEM_Nu
2ec30 6c 6c 29 20 29 3b 0a 20 20 20 20 20 20 64 62 2d  ll) );.      db-
2ec40 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 72 6f 77  >lastRowid = row
2ec50 69 64 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 2d  id;.    }.    p-
2ec60 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 7d 0a  >nChange++;.  }.
2ec70 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
2ec80 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
2ec90 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f  _VIRTUALTABLE */
2eca0 0a 0a 23 69 66 6e 64 65 66 20 20 53 51 4c 49 54  ..#ifndef  SQLIT
2ecb0 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52 41  E_OMIT_PAGER_PRA
2ecc0 47 4d 41 53 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  GMAS./* Opcode: 
2ecd0 50 61 67 65 63 6f 75 6e 74 20 50 31 20 50 32 20  Pagecount P1 P2 
2ece0 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74  * * *.**.** Writ
2ecf0 65 20 74 68 65 20 63 75 72 72 65 6e 74 20 6e 75  e the current nu
2ed00 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e  mber of pages in
2ed10 20 64 61 74 61 62 61 73 65 20 50 31 20 74 6f 20   database P1 to 
2ed20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 50 32 2e 0a  memory cell P2..
2ed30 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 61 67 65 63  */.case OP_Pagec
2ed40 6f 75 6e 74 3a 20 7b 20 20 20 20 20 20 20 20 20  ount: {         
2ed50 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65     /* out2-prere
2ed60 6c 65 61 73 65 20 2a 2f 0a 20 20 70 4f 75 74 2d  lease */.  pOut-
2ed70 3e 75 2e 69 20 3d 20 73 71 6c 69 74 65 33 42 74  >u.i = sqlite3Bt
2ed80 72 65 65 4c 61 73 74 50 61 67 65 28 64 62 2d 3e  reeLastPage(db->
2ed90 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74  aDb[pOp->p1].pBt
2eda0 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65  );.  break;.}.#e
2edb0 6e 64 69 66 0a 0a 0a 23 69 66 6e 64 65 66 20 20  ndif...#ifndef  
2edc0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45  SQLITE_OMIT_PAGE
2edd0 52 5f 50 52 41 47 4d 41 53 0a 2f 2a 20 4f 70 63  R_PRAGMAS./* Opc
2ede0 6f 64 65 3a 20 4d 61 78 50 67 63 6e 74 20 50 31  ode: MaxPgcnt P1
2edf0 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
2ee00 20 54 72 79 20 74 6f 20 73 65 74 20 74 68 65 20   Try to set the 
2ee10 6d 61 78 69 6d 75 6d 20 70 61 67 65 20 63 6f 75  maximum page cou
2ee20 6e 74 20 66 6f 72 20 64 61 74 61 62 61 73 65 20  nt for database 
2ee30 50 31 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20  P1 to the value 
2ee40 69 6e 20 50 33 2e 0a 2a 2a 20 44 6f 20 6e 6f 74  in P3..** Do not
2ee50 20 6c 65 74 20 74 68 65 20 6d 61 78 69 6d 75 6d   let the maximum
2ee60 20 70 61 67 65 20 63 6f 75 6e 74 20 66 61 6c 6c   page count fall
2ee70 20 62 65 6c 6f 77 20 74 68 65 20 63 75 72 72 65   below the curre
2ee80 6e 74 20 70 61 67 65 20 63 6f 75 6e 74 20 61 6e  nt page count an
2ee90 64 0a 2a 2a 20 64 6f 20 6e 6f 74 20 63 68 61 6e  d.** do not chan
2eea0 67 65 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 70  ge the maximum p
2eeb0 61 67 65 20 63 6f 75 6e 74 20 76 61 6c 75 65 20  age count value 
2eec0 69 66 20 50 33 3d 3d 30 2e 0a 2a 2a 0a 2a 2a 20  if P3==0..**.** 
2eed0 53 74 6f 72 65 20 74 68 65 20 6d 61 78 69 6d 75  Store the maximu
2eee0 6d 20 70 61 67 65 20 63 6f 75 6e 74 20 61 66 74  m page count aft
2eef0 65 72 20 74 68 65 20 63 68 61 6e 67 65 20 69 6e  er the change in
2ef00 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f   register P2..*/
2ef10 0a 63 61 73 65 20 4f 50 5f 4d 61 78 50 67 63 6e  .case OP_MaxPgcn
2ef20 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  t: {            
2ef30 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61  /* out2-prerelea
2ef40 73 65 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64  se */.  unsigned
2ef50 20 69 6e 74 20 6e 65 77 4d 61 78 3b 0a 20 20 42   int newMax;.  B
2ef60 74 72 65 65 20 2a 70 42 74 3b 0a 0a 20 20 70 42  tree *pBt;..  pB
2ef70 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d  t = db->aDb[pOp-
2ef80 3e 70 31 5d 2e 70 42 74 3b 0a 20 20 6e 65 77 4d  >p1].pBt;.  newM
2ef90 61 78 20 3d 20 30 3b 0a 20 20 69 66 28 20 70 4f  ax = 0;.  if( pO
2efa0 70 2d 3e 70 33 20 29 7b 0a 20 20 20 20 6e 65 77  p->p3 ){.    new
2efb0 4d 61 78 20 3d 20 73 71 6c 69 74 65 33 42 74 72  Max = sqlite3Btr
2efc0 65 65 4c 61 73 74 50 61 67 65 28 70 42 74 29 3b  eeLastPage(pBt);
2efd0 0a 20 20 20 20 69 66 28 20 6e 65 77 4d 61 78 20  .    if( newMax 
2efe0 3c 20 28 75 6e 73 69 67 6e 65 64 29 70 4f 70 2d  < (unsigned)pOp-
2eff0 3e 70 33 20 29 20 6e 65 77 4d 61 78 20 3d 20 28  >p3 ) newMax = (
2f000 75 6e 73 69 67 6e 65 64 29 70 4f 70 2d 3e 70 33  unsigned)pOp->p3
2f010 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e  ;.  }.  pOut->u.
2f020 69 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  i = sqlite3Btree
2f030 4d 61 78 50 61 67 65 43 6f 75 6e 74 28 70 42 74  MaxPageCount(pBt
2f040 2c 20 6e 65 77 4d 61 78 29 3b 0a 20 20 62 72 65  , newMax);.  bre
2f050 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a 23  ak;.}.#endif...#
2f060 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2f070 49 54 5f 54 52 41 43 45 0a 2f 2a 20 4f 70 63 6f  IT_TRACE./* Opco
2f080 64 65 3a 20 54 72 61 63 65 20 2a 20 2a 20 2a 20  de: Trace * * * 
2f090 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 74 72  P4 *.**.** If tr
2f0a0 61 63 69 6e 67 20 69 73 20 65 6e 61 62 6c 65 64  acing is enabled
2f0b0 20 28 62 79 20 74 68 65 20 73 71 6c 69 74 65 33   (by the sqlite3
2f0c0 5f 74 72 61 63 65 28 29 29 20 69 6e 74 65 72 66  _trace()) interf
2f0d0 61 63 65 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 65  ace, then.** the
2f0e0 20 55 54 46 2d 38 20 73 74 72 69 6e 67 20 63 6f   UTF-8 string co
2f0f0 6e 74 61 69 6e 65 64 20 69 6e 20 50 34 20 69 73  ntained in P4 is
2f100 20 65 6d 69 74 74 65 64 20 6f 6e 20 74 68 65 20   emitted on the 
2f110 74 72 61 63 65 20 63 61 6c 6c 62 61 63 6b 2e 0a  trace callback..
2f120 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 72 61 63 65  */.case OP_Trace
2f130 3a 20 7b 0a 20 20 63 68 61 72 20 2a 7a 54 72 61  : {.  char *zTra
2f140 63 65 3b 0a 0a 20 20 7a 54 72 61 63 65 20 3d 20  ce;..  zTrace = 
2f150 28 70 4f 70 2d 3e 70 34 2e 7a 20 3f 20 70 4f 70  (pOp->p4.z ? pOp
2f160 2d 3e 70 34 2e 7a 20 3a 20 70 2d 3e 7a 53 71 6c  ->p4.z : p->zSql
2f170 29 3b 0a 20 20 69 66 28 20 7a 54 72 61 63 65 20  );.  if( zTrace 
2f180 29 7b 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 78  ){.    if( db->x
2f190 54 72 61 63 65 20 29 7b 0a 20 20 20 20 20 20 63  Trace ){.      c
2f1a0 68 61 72 20 2a 7a 20 3d 20 73 71 6c 69 74 65 33  har *z = sqlite3
2f1b0 56 64 62 65 45 78 70 61 6e 64 53 71 6c 28 70 2c  VdbeExpandSql(p,
2f1c0 20 7a 54 72 61 63 65 29 3b 0a 20 20 20 20 20 20   zTrace);.      
2f1d0 64 62 2d 3e 78 54 72 61 63 65 28 64 62 2d 3e 70  db->xTrace(db->p
2f1e0 54 72 61 63 65 41 72 67 2c 20 7a 29 3b 0a 20 20  TraceArg, z);.  
2f1f0 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65      sqlite3DbFre
2f200 65 28 64 62 2c 20 7a 29 3b 0a 20 20 20 20 7d 0a  e(db, z);.    }.
2f210 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
2f220 42 55 47 0a 20 20 20 20 69 66 28 20 28 64 62 2d  BUG.    if( (db-
2f230 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f  >flags & SQLITE_
2f240 53 71 6c 54 72 61 63 65 29 21 3d 30 20 29 7b 0a  SqlTrace)!=0 ){.
2f250 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 65 62        sqlite3Deb
2f260 75 67 50 72 69 6e 74 66 28 22 53 51 4c 2d 74 72  ugPrintf("SQL-tr
2f270 61 63 65 3a 20 25 73 5c 6e 22 2c 20 7a 54 72 61  ace: %s\n", zTra
2f280 63 65 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69  ce);.    }.#endi
2f290 66 20 2f 2a 20 53 51 4c 49 54 45 5f 44 45 42 55  f /* SQLITE_DEBU
2f2a0 47 20 2a 2f 0a 20 20 7d 0a 20 20 62 72 65 61 6b  G */.  }.  break
2f2b0 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 20  ;.}.#endif.../* 
2f2c0 4f 70 63 6f 64 65 3a 20 4e 6f 6f 70 20 2a 20 2a  Opcode: Noop * *
2f2d0 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 6f 20   * * *.**.** Do 
2f2e0 6e 6f 74 68 69 6e 67 2e 20 20 54 68 69 73 20 69  nothing.  This i
2f2f0 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 6f 66  nstruction is of
2f300 74 65 6e 20 75 73 65 66 75 6c 20 61 73 20 61 20  ten useful as a 
2f310 6a 75 6d 70 0a 2a 2a 20 64 65 73 74 69 6e 61 74  jump.** destinat
2f320 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 0a 2a 2a 20 54 68  ion..*/./*.** Th
2f330 65 20 6d 61 67 69 63 20 45 78 70 6c 61 69 6e 20  e magic Explain 
2f340 6f 70 63 6f 64 65 20 61 72 65 20 6f 6e 6c 79 20  opcode are only 
2f350 69 6e 73 65 72 74 65 64 20 77 68 65 6e 20 65 78  inserted when ex
2f360 70 6c 61 69 6e 3d 3d 32 20 28 77 68 69 63 68 0a  plain==2 (which.
2f370 2a 2a 20 69 73 20 74 6f 20 73 61 79 20 77 68 65  ** is to say whe
2f380 6e 20 74 68 65 20 45 58 50 4c 41 49 4e 20 51 55  n the EXPLAIN QU
2f390 45 52 59 20 50 4c 41 4e 20 73 79 6e 74 61 78 20  ERY PLAN syntax 
2f3a0 69 73 20 75 73 65 64 2e 29 0a 2a 2a 20 54 68 69  is used.).** Thi
2f3b0 73 20 6f 70 63 6f 64 65 20 72 65 63 6f 72 64 73  s opcode records
2f3c0 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 72 6f   information fro
2f3d0 6d 20 74 68 65 20 6f 70 74 69 6d 69 7a 65 72 2e  m the optimizer.
2f3e0 20 20 49 74 20 69 73 20 74 68 65 0a 2a 2a 20 74    It is the.** t
2f3f0 68 65 20 73 61 6d 65 20 61 73 20 61 20 6e 6f 2d  he same as a no-
2f400 6f 70 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65  op.  This opcode
2f410 73 6e 65 76 65 72 20 61 70 70 65 61 72 73 20 69  snever appears i
2f420 6e 20 61 20 72 65 61 6c 20 56 4d 20 70 72 6f 67  n a real VM prog
2f430 72 61 6d 2e 0a 2a 2f 0a 64 65 66 61 75 6c 74 3a  ram..*/.default:
2f440 20 7b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54   {          /* T
2f450 68 69 73 20 69 73 20 72 65 61 6c 6c 79 20 4f 50  his is really OP
2f460 5f 4e 6f 6f 70 20 61 6e 64 20 4f 50 5f 45 78 70  _Noop and OP_Exp
2f470 6c 61 69 6e 20 2a 2f 0a 20 20 61 73 73 65 72 74  lain */.  assert
2f480 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
2f490 50 5f 4e 6f 6f 70 20 7c 7c 20 70 4f 70 2d 3e 6f  P_Noop || pOp->o
2f4a0 70 63 6f 64 65 3d 3d 4f 50 5f 45 78 70 6c 61 69  pcode==OP_Explai
2f4b0 6e 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  n );.  break;.}.
2f4c0 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ./**************
2f4d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2f4e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2f4f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2f500 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a  ***************.
2f510 2a 2a 20 54 68 65 20 63 61 73 65 73 20 6f 66 20  ** The cases of 
2f520 74 68 65 20 73 77 69 74 63 68 20 73 74 61 74 65  the switch state
2f530 6d 65 6e 74 20 61 62 6f 76 65 20 74 68 69 73 20  ment above this 
2f540 6c 69 6e 65 20 73 68 6f 75 6c 64 20 61 6c 6c 20  line should all 
2f550 62 65 20 69 6e 64 65 6e 74 65 64 0a 2a 2a 20 62  be indented.** b
2f560 79 20 36 20 73 70 61 63 65 73 2e 20 20 42 75 74  y 6 spaces.  But
2f570 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20 36   the left-most 6
2f580 20 73 70 61 63 65 73 20 68 61 76 65 20 62 65 65   spaces have bee
2f590 6e 20 72 65 6d 6f 76 65 64 20 74 6f 20 69 6d 70  n removed to imp
2f5a0 72 6f 76 65 20 74 68 65 0a 2a 2a 20 72 65 61 64  rove the.** read
2f5b0 61 62 69 6c 69 74 79 2e 20 20 46 72 6f 6d 20 74  ability.  From t
2f5c0 68 69 73 20 70 6f 69 6e 74 20 6f 6e 20 64 6f 77  his point on dow
2f5d0 6e 2c 20 74 68 65 20 6e 6f 72 6d 61 6c 20 69 6e  n, the normal in
2f5e0 64 65 6e 74 61 74 69 6f 6e 20 72 75 6c 65 73 20  dentation rules 
2f5f0 61 72 65 0a 2a 2a 20 72 65 73 74 6f 72 65 64 2e  are.** restored.
2f600 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .***************
2f610 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2f620 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2f630 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2f640 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a  **************/.
2f650 20 20 20 20 7d 0a 0a 23 69 66 64 65 66 20 56 44      }..#ifdef VD
2f660 42 45 5f 50 52 4f 46 49 4c 45 0a 20 20 20 20 7b  BE_PROFILE.    {
2f670 0a 20 20 20 20 20 20 75 36 34 20 65 6c 61 70 73  .      u64 elaps
2f680 65 64 20 3d 20 73 71 6c 69 74 65 33 48 77 74 69  ed = sqlite3Hwti
2f690 6d 65 28 29 20 2d 20 73 74 61 72 74 3b 0a 20 20  me() - start;.  
2f6a0 20 20 20 20 70 4f 70 2d 3e 63 79 63 6c 65 73 20      pOp->cycles 
2f6b0 2b 3d 20 65 6c 61 70 73 65 64 3b 0a 20 20 20 20  += elapsed;.    
2f6c0 20 20 70 4f 70 2d 3e 63 6e 74 2b 2b 3b 0a 23 69    pOp->cnt++;.#i
2f6d0 66 20 30 0a 20 20 20 20 20 20 20 20 66 70 72 69  f 0.        fpri
2f6e0 6e 74 66 28 73 74 64 6f 75 74 2c 20 22 25 31 30  ntf(stdout, "%10
2f6f0 6c 6c 75 20 22 2c 20 65 6c 61 70 73 65 64 29 3b  llu ", elapsed);
2f700 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
2f710 56 64 62 65 50 72 69 6e 74 4f 70 28 73 74 64 6f  VdbePrintOp(stdo
2f720 75 74 2c 20 6f 72 69 67 50 63 2c 20 26 61 4f 70  ut, origPc, &aOp
2f730 5b 6f 72 69 67 50 63 5d 29 3b 0a 23 65 6e 64 69  [origPc]);.#endi
2f740 66 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 0a  f.    }.#endif..
2f750 20 20 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f      /* The follo
2f760 77 69 6e 67 20 63 6f 64 65 20 61 64 64 73 20 6e  wing code adds n
2f770 6f 74 68 69 6e 67 20 74 6f 20 74 68 65 20 61 63  othing to the ac
2f780 74 75 61 6c 20 66 75 6e 63 74 69 6f 6e 61 6c 69  tual functionali
2f790 74 79 0a 20 20 20 20 2a 2a 20 6f 66 20 74 68 65  ty.    ** of the
2f7a0 20 70 72 6f 67 72 61 6d 2e 20 20 49 74 20 69 73   program.  It is
2f7b0 20 6f 6e 6c 79 20 68 65 72 65 20 66 6f 72 20 74   only here for t
2f7c0 65 73 74 69 6e 67 20 61 6e 64 20 64 65 62 75 67  esting and debug
2f7d0 67 69 6e 67 2e 0a 20 20 20 20 2a 2a 20 4f 6e 20  ging..    ** On 
2f7e0 74 68 65 20 6f 74 68 65 72 20 68 61 6e 64 2c 20  the other hand, 
2f7f0 69 74 20 64 6f 65 73 20 62 75 72 6e 20 43 50 55  it does burn CPU
2f800 20 63 79 63 6c 65 73 20 65 76 65 72 79 20 74 69   cycles every ti
2f810 6d 65 20 74 68 72 6f 75 67 68 0a 20 20 20 20 2a  me through.    *
2f820 2a 20 74 68 65 20 65 76 61 6c 75 61 74 6f 72 20  * the evaluator 
2f830 6c 6f 6f 70 2e 20 20 53 6f 20 77 65 20 63 61 6e  loop.  So we can
2f840 20 6c 65 61 76 65 20 69 74 20 6f 75 74 20 77 68   leave it out wh
2f850 65 6e 20 4e 44 45 42 55 47 20 69 73 20 64 65 66  en NDEBUG is def
2f860 69 6e 65 64 2e 0a 20 20 20 20 2a 2f 0a 23 69 66  ined..    */.#if
2f870 6e 64 65 66 20 4e 44 45 42 55 47 0a 20 20 20 20  ndef NDEBUG.    
2f880 61 73 73 65 72 74 28 20 70 63 3e 3d 2d 31 20 26  assert( pc>=-1 &
2f890 26 20 70 63 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 0a  & pc<p->nOp );..
2f8a0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
2f8b0 42 55 47 0a 20 20 20 20 69 66 28 20 70 2d 3e 74  BUG.    if( p->t
2f8c0 72 61 63 65 20 29 7b 0a 20 20 20 20 20 20 69 66  race ){.      if
2f8d0 28 20 72 63 21 3d 30 20 29 20 66 70 72 69 6e 74  ( rc!=0 ) fprint
2f8e0 66 28 70 2d 3e 74 72 61 63 65 2c 22 72 63 3d 25  f(p->trace,"rc=%
2f8f0 64 5c 6e 22 2c 72 63 29 3b 0a 20 20 20 20 20 20  d\n",rc);.      
2f900 69 66 28 20 70 4f 70 2d 3e 6f 70 66 6c 61 67 73  if( pOp->opflags
2f910 20 26 20 28 4f 50 46 4c 47 5f 4f 55 54 32 5f 50   & (OPFLG_OUT2_P
2f920 52 45 52 45 4c 45 41 53 45 7c 4f 50 46 4c 47 5f  RERELEASE|OPFLG_
2f930 4f 55 54 32 29 20 29 7b 0a 20 20 20 20 20 20 20  OUT2) ){.       
2f940 20 72 65 67 69 73 74 65 72 54 72 61 63 65 28 70   registerTrace(p
2f950 2d 3e 74 72 61 63 65 2c 20 70 4f 70 2d 3e 70 32  ->trace, pOp->p2
2f960 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  , &aMem[pOp->p2]
2f970 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  );.      }.     
2f980 20 69 66 28 20 70 4f 70 2d 3e 6f 70 66 6c 61 67   if( pOp->opflag
2f990 73 20 26 20 4f 50 46 4c 47 5f 4f 55 54 33 20 29  s & OPFLG_OUT3 )
2f9a0 7b 0a 20 20 20 20 20 20 20 20 72 65 67 69 73 74  {.        regist
2f9b0 65 72 54 72 61 63 65 28 70 2d 3e 74 72 61 63 65  erTrace(p->trace
2f9c0 2c 20 70 4f 70 2d 3e 70 33 2c 20 26 61 4d 65 6d  , pOp->p3, &aMem
2f9d0 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20 20 20 20  [pOp->p3]);.    
2f9e0 20 20 7d 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66    }.    }.#endif
2f9f0 20 20 2f 2a 20 53 51 4c 49 54 45 5f 44 45 42 55    /* SQLITE_DEBU
2fa00 47 20 2a 2f 0a 23 65 6e 64 69 66 20 20 2f 2a 20  G */.#endif  /* 
2fa10 4e 44 45 42 55 47 20 2a 2f 0a 20 20 7d 20 20 2f  NDEBUG */.  }  /
2fa20 2a 20 54 68 65 20 65 6e 64 20 6f 66 20 74 68 65  * The end of the
2fa30 20 66 6f 72 28 3b 3b 29 20 6c 6f 6f 70 20 74 68   for(;;) loop th
2fa40 65 20 6c 6f 6f 70 73 20 74 68 72 6f 75 67 68 20  e loops through 
2fa50 6f 70 63 6f 64 65 73 20 2a 2f 0a 0a 20 20 2f 2a  opcodes */..  /*
2fa60 20 49 66 20 77 65 20 72 65 61 63 68 20 74 68 69   If we reach thi
2fa70 73 20 70 6f 69 6e 74 2c 20 69 74 20 6d 65 61 6e  s point, it mean
2fa80 73 20 74 68 61 74 20 65 78 65 63 75 74 69 6f 6e  s that execution
2fa90 20 69 73 20 66 69 6e 69 73 68 65 64 20 77 69 74   is finished wit
2faa0 68 0a 20 20 2a 2a 20 61 6e 20 65 72 72 6f 72 20  h.  ** an error 
2fab0 6f 66 20 73 6f 6d 65 20 6b 69 6e 64 2e 0a 20 20  of some kind..  
2fac0 2a 2f 0a 76 64 62 65 5f 65 72 72 6f 72 5f 68 61  */.vdbe_error_ha
2fad0 6c 74 3a 0a 20 20 61 73 73 65 72 74 28 20 72 63  lt:.  assert( rc
2fae0 20 29 3b 0a 20 20 70 2d 3e 72 63 20 3d 20 72 63   );.  p->rc = rc
2faf0 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 73 71  ;.  testcase( sq
2fb00 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69  lite3GlobalConfi
2fb10 67 2e 78 4c 6f 67 21 3d 30 20 29 3b 0a 20 20 73  g.xLog!=0 );.  s
2fb20 71 6c 69 74 65 33 5f 6c 6f 67 28 72 63 2c 20 22  qlite3_log(rc, "
2fb30 73 74 61 74 65 6d 65 6e 74 20 61 62 6f 72 74 73  statement aborts
2fb40 20 61 74 20 25 64 3a 20 5b 25 73 5d 20 25 73 22   at %d: [%s] %s"
2fb50 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  , .             
2fb60 20 20 20 20 20 20 70 63 2c 20 70 2d 3e 7a 53 71        pc, p->zSq
2fb70 6c 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a  l, p->zErrMsg);.
2fb80 20 20 73 71 6c 69 74 65 33 56 64 62 65 48 61 6c    sqlite3VdbeHal
2fb90 74 28 70 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d  t(p);.  if( rc==
2fba0 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d  SQLITE_IOERR_NOM
2fbb0 45 4d 20 29 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46  EM ) db->mallocF
2fbc0 61 69 6c 65 64 20 3d 20 31 3b 0a 20 20 72 63 20  ailed = 1;.  rc 
2fbd0 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a  = SQLITE_ERROR;.
2fbe0 20 20 69 66 28 20 72 65 73 65 74 53 63 68 65 6d    if( resetSchem
2fbf0 61 4f 6e 46 61 75 6c 74 3e 30 20 29 7b 0a 20 20  aOnFault>0 ){.  
2fc00 20 20 73 71 6c 69 74 65 33 52 65 73 65 74 49 6e    sqlite3ResetIn
2fc10 74 65 72 6e 61 6c 53 63 68 65 6d 61 28 64 62 2c  ternalSchema(db,
2fc20 20 72 65 73 65 74 53 63 68 65 6d 61 4f 6e 46 61   resetSchemaOnFa
2fc30 75 6c 74 2d 31 29 3b 0a 20 20 7d 0a 0a 20 20 2f  ult-1);.  }..  /
2fc40 2a 20 54 68 69 73 20 69 73 20 74 68 65 20 6f 6e  * This is the on
2fc50 6c 79 20 77 61 79 20 6f 75 74 20 6f 66 20 74 68  ly way out of th
2fc60 69 73 20 70 72 6f 63 65 64 75 72 65 2e 20 20 57  is procedure.  W
2fc70 65 20 68 61 76 65 20 74 6f 0a 20 20 2a 2a 20 72  e have to.  ** r
2fc80 65 6c 65 61 73 65 20 74 68 65 20 6d 75 74 65 78  elease the mutex
2fc90 65 73 20 6f 6e 20 62 74 72 65 65 73 20 74 68 61  es on btrees tha
2fca0 74 20 77 65 72 65 20 61 63 71 75 69 72 65 64 20  t were acquired 
2fcb0 61 74 20 74 68 65 0a 20 20 2a 2a 20 74 6f 70 2e  at the.  ** top.
2fcc0 20 2a 2f 0a 76 64 62 65 5f 72 65 74 75 72 6e 3a   */.vdbe_return:
2fcd0 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4c 65  .  sqlite3VdbeLe
2fce0 61 76 65 28 70 29 3b 0a 20 20 72 65 74 75 72 6e  ave(p);.  return
2fcf0 20 72 63 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20   rc;..  /* Jump 
2fd00 74 6f 20 68 65 72 65 20 69 66 20 61 20 73 74 72  to here if a str
2fd10 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6c 61 72 67  ing or blob larg
2fd20 65 72 20 74 68 61 6e 20 53 51 4c 49 54 45 5f 4d  er than SQLITE_M
2fd30 41 58 5f 4c 45 4e 47 54 48 0a 20 20 2a 2a 20 69  AX_LENGTH.  ** i
2fd40 73 20 65 6e 63 6f 75 6e 74 65 72 65 64 2e 0a 20  s encountered.. 
2fd50 20 2a 2f 0a 74 6f 6f 5f 62 69 67 3a 0a 20 20 73   */.too_big:.  s
2fd60 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28  qlite3SetString(
2fd70 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c  &p->zErrMsg, db,
2fd80 20 22 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62   "string or blob
2fd90 20 74 6f 6f 20 62 69 67 22 29 3b 0a 20 20 72 63   too big");.  rc
2fda0 20 3d 20 53 51 4c 49 54 45 5f 54 4f 4f 42 49 47   = SQLITE_TOOBIG
2fdb0 3b 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 65 72  ;.  goto vdbe_er
2fdc0 72 6f 72 5f 68 61 6c 74 3b 0a 0a 20 20 2f 2a 20  ror_halt;..  /* 
2fdd0 4a 75 6d 70 20 74 6f 20 68 65 72 65 20 69 66 20  Jump to here if 
2fde0 61 20 6d 61 6c 6c 6f 63 28 29 20 66 61 69 6c 73  a malloc() fails
2fdf0 2e 0a 20 20 2a 2f 0a 6e 6f 5f 6d 65 6d 3a 0a 20  ..  */.no_mem:. 
2fe00 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65   db->mallocFaile
2fe10 64 20 3d 20 31 3b 0a 20 20 73 71 6c 69 74 65 33  d = 1;.  sqlite3
2fe20 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45  SetString(&p->zE
2fe30 72 72 4d 73 67 2c 20 64 62 2c 20 22 6f 75 74 20  rrMsg, db, "out 
2fe40 6f 66 20 6d 65 6d 6f 72 79 22 29 3b 0a 20 20 72  of memory");.  r
2fe50 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d  c = SQLITE_NOMEM
2fe60 3b 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 65 72  ;.  goto vdbe_er
2fe70 72 6f 72 5f 68 61 6c 74 3b 0a 0a 20 20 2f 2a 20  ror_halt;..  /* 
2fe80 4a 75 6d 70 20 74 6f 20 68 65 72 65 20 66 6f 72  Jump to here for
2fe90 20 61 6e 79 20 6f 74 68 65 72 20 6b 69 6e 64 20   any other kind 
2fea0 6f 66 20 66 61 74 61 6c 20 65 72 72 6f 72 2e 20  of fatal error. 
2feb0 20 54 68 65 20 22 72 63 22 20 76 61 72 69 61 62   The "rc" variab
2fec0 6c 65 0a 20 20 2a 2a 20 73 68 6f 75 6c 64 20 68  le.  ** should h
2fed0 6f 6c 64 20 74 68 65 20 65 72 72 6f 72 20 6e 75  old the error nu
2fee0 6d 62 65 72 2e 0a 20 20 2a 2f 0a 61 62 6f 72 74  mber..  */.abort
2fef0 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3a 0a 20  _due_to_error:. 
2ff00 20 61 73 73 65 72 74 28 20 70 2d 3e 7a 45 72 72   assert( p->zErr
2ff10 4d 73 67 3d 3d 30 20 29 3b 0a 20 20 69 66 28 20  Msg==0 );.  if( 
2ff20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64  db->mallocFailed
2ff30 20 29 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e   ) rc = SQLITE_N
2ff40 4f 4d 45 4d 3b 0a 20 20 69 66 28 20 72 63 21 3d  OMEM;.  if( rc!=
2ff50 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d  SQLITE_IOERR_NOM
2ff60 45 4d 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  EM ){.    sqlite
2ff70 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a  3SetString(&p->z
2ff80 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 22  ErrMsg, db, "%s"
2ff90 2c 20 73 71 6c 69 74 65 33 45 72 72 53 74 72 28  , sqlite3ErrStr(
2ffa0 72 63 29 29 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f  rc));.  }.  goto
2ffb0 20 76 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74   vdbe_error_halt
2ffc0 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f 20  ;..  /* Jump to 
2ffd0 68 65 72 65 20 69 66 20 74 68 65 20 73 71 6c 69  here if the sqli
2ffe0 74 65 33 5f 69 6e 74 65 72 72 75 70 74 28 29 20  te3_interrupt() 
2fff0 41 50 49 20 73 65 74 73 20 74 68 65 20 69 6e 74  API sets the int
30000 65 72 72 75 70 74 0a 20 20 2a 2a 20 66 6c 61 67  errupt.  ** flag
30010 2e 0a 20 20 2a 2f 0a 61 62 6f 72 74 5f 64 75 65  ..  */.abort_due
30020 5f 74 6f 5f 69 6e 74 65 72 72 75 70 74 3a 0a 20  _to_interrupt:. 
30030 20 61 73 73 65 72 74 28 20 64 62 2d 3e 75 31 2e   assert( db->u1.
30040 69 73 49 6e 74 65 72 72 75 70 74 65 64 20 29 3b  isInterrupted );
30050 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 49  .  rc = SQLITE_I
30060 4e 54 45 52 52 55 50 54 3b 0a 20 20 70 2d 3e 72  NTERRUPT;.  p->r
30070 63 20 3d 20 72 63 3b 0a 20 20 73 71 6c 69 74 65  c = rc;.  sqlite
30080 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a  3SetString(&p->z
30090 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 22  ErrMsg, db, "%s"
300a0 2c 20 73 71 6c 69 74 65 33 45 72 72 53 74 72 28  , sqlite3ErrStr(
300b0 72 63 29 29 3b 0a 20 20 67 6f 74 6f 20 76 64 62  rc));.  goto vdb
300c0 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 7d 0a  e_error_halt;.}.